Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
demo.attachments.har.har Maven / Gradle / Ivy
{
"log": {
"version": "1.2",
"creator": {
"name": "WebInspector",
"version": "537.36"
},
"pages": [
{
"startedDateTime": "2019-03-21T10:55:05.788Z",
"id": "page_1",
"title": "http://dev.epm-rpp.projects.epam.com:9090/ui/",
"pageTimings": {
"onContentLoad": 1744.5990000014717,
"onLoad": 1830.6120000015653
}
}
],
"entries": [
{
"startedDateTime": "2019-03-21T10:55:05.788Z",
"time": 6.707000000460539,
"request": {
"method": "GET",
"url": "http://dev.epm-rpp.projects.epam.com:9090/ui/",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "dev.epm-rpp.projects.epam.com:9090"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Cache-Control",
"value": "max-age=0"
},
{
"name": "Upgrade-Insecure-Requests",
"value": "1"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"
},
{
"name": "Cookie",
"value": "_ga=GA1.2.1307115397.1547201089"
},
{
"name": "If-Modified-Since",
"value": "Wed, 20 Mar 2019 14:45:22 GMT"
}
],
"queryString": [],
"cookies": [
{
"name": "_ga",
"value": "GA1.2.1307115397.1547201089",
"expires": null,
"httpOnly": false,
"secure": false
}
],
"headersSize": 542,
"bodySize": 0
},
"response": {
"status": 304,
"statusText": "Not Modified",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "Content-Security-Policy",
"value": "default-src 'self' 'unsafe-inline' *.uservoice.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' status.reportportal.io www.google-analytics.com stats.g.doubleclick.net *.epam.com *.uservoice.com; img-src 'self' data: www.google-analytics.com stats.g.doubleclick.net *.epam.com *.uservoice.com; object-src 'self'"
},
{
"name": "Date",
"value": "Thu, 21 Mar 2019 10:55:05 GMT"
},
{
"name": "Last-Modified",
"value": "Wed, 20 Mar 2019 14:45:22 GMT"
},
{
"name": "X-Content-Type-Options",
"value": "nosniff"
},
{
"name": "X-Xss-Protection",
"value": "1; mode=block"
}
],
"cookies": [],
"content": {
"size": 724,
"mimeType": "text/html",
"text": "\n \n \n \n \n Report Portal \n \n \n \n \n
\n
\n
\n
\n
\n \n \n"
},
"redirectURL": "",
"headersSize": 545,
"bodySize": 0,
"_transferSize": 545
},
"cache": {},
"timings": {
"blocked": 2.446999999081716,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.548,
"wait": 3.0449999993111705,
"receive": 0.6670000020676525,
"_blocked_queueing": 0.8139999990817159
},
"serverIPAddress": "10.6.219.19",
"_initiator": {
"type": "other"
},
"_priority": "VeryHigh",
"_resourceType": "document",
"connection": "346",
"pageref": "page_1"
},
{
"startedDateTime": "2019-03-21T10:55:05.805Z",
"time": 0.02499999936844688,
"request": {
"method": "GET",
"url": "http://dev.epm-rpp.projects.epam.com:9090/ui/app.aa4fab.js",
"httpVersion": "http/1.1",
"headers": [],
"queryString": [],
"cookies": [],
"headersSize": -1,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "http/1.1",
"headers": [
{
"name": "Content-Security-Policy",
"value": "default-src 'self' 'unsafe-inline' *.uservoice.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' status.reportportal.io www.google-analytics.com stats.g.doubleclick.net *.epam.com *.uservoice.com; img-src 'self' data: www.google-analytics.com stats.g.doubleclick.net *.epam.com *.uservoice.com; object-src 'self'"
},
{
"name": "Content-Encoding",
"value": "gzip"
},
{
"name": "X-Content-Type-Options",
"value": "nosniff"
},
{
"name": "Last-Modified",
"value": "Wed, 20 Mar 2019 14:45:22 GMT"
},
{
"name": "Date",
"value": "Thu, 21 Mar 2019 10:54:29 GMT"
},
{
"name": "Content-Type",
"value": "application/x-javascript"
},
{
"name": "Accept-Ranges",
"value": "bytes"
},
{
"name": "X-Xss-Protection",
"value": "1; mode=block"
}
],
"cookies": [],
"content": {
"size": 9000180,
"mimeType": "application/x-javascript",
"text": "IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7ZGVsZXRlIGtbZV19ZnVuY3Rpb24gbihlKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7bi50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLG4uY2hhcnNldD0idXRmLTgiLG4uc3JjPXAucCsiIitlKyIuIit2KyIuaG90LXVwZGF0ZS5qcyIsdC5hcHBlbmRDaGlsZChuKX1mdW5jdGlvbiByKGUpe3JldHVybiBlPWV8fDFlNCxuZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgWE1MSHR0cFJlcXVlc3QpcmV0dXJuIG4obmV3IEVycm9yKCJObyBicm93c2VyIHN1cHBvcnQiKSk7dHJ5e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdCxvPXAucCsiIit2KyIuaG90LXVwZGF0ZS5qc29uIjtyLm9wZW4oIkdFVCIsbywhMCksci50aW1lb3V0PWUsci5zZW5kKG51bGwpfWNhdGNoKGUpe3JldHVybiBuKGUpfXIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoND09PXIucmVhZHlTdGF0ZSlpZigwPT09ci5zdGF0dXMpbihuZXcgRXJyb3IoIk1hbmlmZXN0IHJlcXVlc3QgdG8gIitvKyIgdGltZWQgb3V0LiIpKTtlbHNlIGlmKDQwND09PXIuc3RhdHVzKXQoKTtlbHNlIGlmKDIwMCE9PXIuc3RhdHVzJiYzMDQhPT1yLnN0YXR1cyluKG5ldyBFcnJvcigiTWFuaWZlc3QgcmVxdWVzdCB0byAiK28rIiBmYWlsZWQuIikpO2Vsc2V7dHJ5e3ZhciBlPUpTT04ucGFyc2Uoci5yZXNwb25zZVRleHQpfWNhdGNoKGUpe3JldHVybiB2b2lkIG4oZSl9dChlKX19fSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1NW2VdO2lmKCF0KXJldHVybiBwO3ZhciBuPWZ1bmN0aW9uKG4pe3JldHVybiB0LmhvdC5hY3RpdmU/KE1bbl0/TVtuXS5wYXJlbnRzLmluZGV4T2YoZSk8MCYmTVtuXS5wYXJlbnRzLnB1c2goZSk6KEM9W2VdLGg9biksdC5jaGlsZHJlbi5pbmRleE9mKG4pPDAmJnQuY2hpbGRyZW4ucHVzaChuKSk6KGNvbnNvbGUud2FybigiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKCIrbisiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSAiK2UpLEM9W10pLHAobil9O2Zvcih2YXIgciBpbiBwKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHIpJiYiZSIhPT1yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixyLGZ1bmN0aW9uKGUpe3JldHVybntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcFtlXX0sc2V0OmZ1bmN0aW9uKHQpe3BbZV09dH19fShyKSk7cmV0dXJuIG4uZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7eC0tLCJwcmVwYXJlIj09PVImJihMW2VdfHxjKGUpLDA9PT14JiYwPT09aiYmZCgpKX1yZXR1cm4icmVhZHkiPT09UiYmaSgicHJlcGFyZSIpLHgrKyxwLmUoZSkudGhlbih0LGZ1bmN0aW9uKGUpe3Rocm93IHQoKSxlfSl9LG59ZnVuY3Rpb24gcyhlKXt2YXIgdD17X2FjY2VwdGVkRGVwZW5kZW5jaWVzOnt9LF9kZWNsaW5lZERlcGVuZGVuY2llczp7fSxfc2VsZkFjY2VwdGVkOiExLF9zZWxmRGVjbGluZWQ6ITEsX2Rpc3Bvc2VIYW5kbGVyczpbXSxfbWFpbjpoIT09ZSxhY3RpdmU6ITAsYWNjZXB0OmZ1bmN0aW9uKGUsbil7aWYodm9pZCAwPT09ZSl0Ll9zZWxmQWNjZXB0ZWQ9ITA7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0Ll9zZWxmQWNjZXB0ZWQ9ZTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tlW3JdXT1ufHxmdW5jdGlvbigpe307ZWxzZSB0Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tlXT1ufHxmdW5jdGlvbigpe319LGRlY2xpbmU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0Ll9zZWxmRGVjbGluZWQ9ITA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZVtuXV09ITA7ZWxzZSB0Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tlXT0hMH0sZGlzcG9zZTpmdW5jdGlvbihlKXt0Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChlKX0sYWRkRGlzcG9zZUhhbmRsZXI6ZnVuY3Rpb24oZSl7dC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goZSl9LHJlbW92ZURpc3Bvc2VIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciBuPXQuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGUpO24+PTAmJnQuX2Rpc3Bvc2VIYW5kbGVycy5zcGxpY2UobiwxKX0sY2hlY2s6bCxhcHBseTpfLHN0YXR1czpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gUjtTLnB1c2goZSl9LGFkZFN0YXR1c0hhbmRsZXI6ZnVuY3Rpb24oZSl7Uy5wdXNoKGUpfSxyZW1vdmVTdGF0dXNIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVMuaW5kZXhPZihlKTt0Pj0wJiZTLnNwbGljZSh0LDEpfSxkYXRhOkFbZV19O3JldHVybiBoPXZvaWQgMCx0fWZ1bmN0aW9uIGkoZSl7Uj1lO2Zvcih2YXIgdD0wO3Q8Uy5sZW5ndGg7dCsrKVNbdF0uY2FsbChudWxsLGUpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuK2UrIiI9PT1lPytlOmV9ZnVuY3Rpb24gbChlKXtpZigiaWRsZSIhPT1SKXRocm93IG5ldyBFcnJvcigiY2hlY2soKSBpcyBvbmx5IGFsbG93ZWQgaW4gaWRsZSBzdGF0dXMiKTtyZXR1cm4geT1lLGkoImNoZWNrIikscihUKS50aGVuKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBpKCJpZGxlIiksbnVsbDtEPXt9LEw9e30sdz1lLmMsRT1lLmgsaSgicHJlcGFyZSIpO3ZhciB0PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7Zz17cmVzb2x2ZTplLHJlamVjdDp0fX0pO2I9e307Zm9yKHZhciBuIGluIGspYyhuKTtyZXR1cm4icHJlcGFyZSI9PT1SJiYwPT09eCYmMD09PWomJmQoKSx0fSl9ZnVuY3Rpb24gdShlLHQpe2lmKHdbZV0mJkRbZV0pe0RbZV09ITE7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihiW25dPXRbbl0pOzA9PS0taiYmMD09PXgmJmQoKX19ZnVuY3Rpb24gYyhlKXt3W2VdPyhEW2VdPSEwLGorKyxuKGUpKTpMW2VdPSEwfWZ1bmN0aW9uIGQoKXtpKCJyZWFkeSIpO3ZhciBlPWc7aWYoZz1udWxsLGUpaWYoeSlQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIF8oeSl9KS50aGVuKGZ1bmN0aW9uKHQpe2UucmVzb2x2ZSh0KX0sZnVuY3Rpb24odCl7ZS5yZWplY3QodCl9KTtlbHNle3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLG4pJiZ0LnB1c2goYShuKSk7ZS5yZXNvbHZlKHQpfX1mdW5jdGlvbiBfKG4pe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtlLmluZGV4T2Yocik8MCYmZS5wdXNoKHIpfX1pZigicmVhZHkiIT09Uil0aHJvdyBuZXcgRXJyb3IoImFwcGx5KCkgaXMgb25seSBhbGxvd2VkIGluIHJlYWR5IHN0YXR1cyIpO249bnx8e307dmFyIG8scyxsLHUsYyxkPXt9LF89W10sZj17fSxtPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoIitnLm1vZHVsZUlkKyIpIHRvIGRpc3Bvc2VkIG1vZHVsZSIpfTtmb3IodmFyIGggaW4gYilpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixoKSl7Yz1hKGgpO3ZhciBnO2c9YltoXT9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W2VdLG49e30sbz10LnNsaWNlKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntjaGFpbjpbZV0saWQ6ZX19KTtvLmxlbmd0aD4wOyl7dmFyIHM9by5wb3AoKSxpPXMuaWQsYT1zLmNoYWluO2lmKCh1PU1baV0pJiYhdS5ob3QuX3NlbGZBY2NlcHRlZCl7aWYodS5ob3QuX3NlbGZEZWNsaW5lZClyZXR1cm57dHlwZToic2VsZi1kZWNsaW5lZCIsY2hhaW46YSxtb2R1bGVJZDppfTtpZih1LmhvdC5fbWFpbilyZXR1cm57dHlwZToidW5hY2NlcHRlZCIsY2hhaW46YSxtb2R1bGVJZDppfTtmb3IodmFyIGw9MDtsPHUucGFyZW50cy5sZW5ndGg7bCsrKXt2YXIgYz11LnBhcmVudHNbbF0sZD1NW2NdO2lmKGQpe2lmKGQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tpXSlyZXR1cm57dHlwZToiZGVjbGluZWQiLGNoYWluOmEuY29uY2F0KFtjXSksbW9kdWxlSWQ6aSxwYXJlbnRJZDpjfTt0LmluZGV4T2YoYyk+PTB8fChkLmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbaV0/KG5bY118fChuW2NdPVtdKSxyKG5bY10sW2ldKSk6KGRlbGV0ZSBuW2NdLHQucHVzaChjKSxvLnB1c2goe2NoYWluOmEuY29uY2F0KFtjXSksaWQ6Y30pKSl9fX19cmV0dXJue3R5cGU6ImFjY2VwdGVkIixtb2R1bGVJZDplLG91dGRhdGVkTW9kdWxlczp0LG91dGRhdGVkRGVwZW5kZW5jaWVzOm59fShjKTp7dHlwZToiZGlzcG9zZWQiLG1vZHVsZUlkOmh9O3ZhciB5PSExLFQ9ITEsTz0hMSxTPSIiO3N3aXRjaChnLmNoYWluJiYoUz0iXG5VcGRhdGUgcHJvcGFnYXRpb246ICIrZy5jaGFpbi5qb2luKCIgLT4gIikpLGcudHlwZSl7Y2FzZSJzZWxmLWRlY2xpbmVkIjpuLm9uRGVjbGluZWQmJm4ub25EZWNsaW5lZChnKSxuLmlnbm9yZURlY2xpbmVkfHwoeT1uZXcgRXJyb3IoIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6ICIrZy5tb2R1bGVJZCtTKSk7YnJlYWs7Y2FzZSJkZWNsaW5lZCI6bi5vbkRlY2xpbmVkJiZuLm9uRGVjbGluZWQoZyksbi5pZ25vcmVEZWNsaW5lZHx8KHk9bmV3IEVycm9yKCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogIitnLm1vZHVsZUlkKyIgaW4gIitnLnBhcmVudElkK1MpKTticmVhaztjYXNlInVuYWNjZXB0ZWQiOm4ub25VbmFjY2VwdGVkJiZuLm9uVW5hY2NlcHRlZChnKSxuLmlnbm9yZVVuYWNjZXB0ZWR8fCh5PW5ldyBFcnJvcigiQWJvcnRlZCBiZWNhdXNlICIrYysiIGlzIG5vdCBhY2NlcHRlZCIrUykpO2JyZWFrO2Nhc2UiYWNjZXB0ZWQiOm4ub25BY2NlcHRlZCYmbi5vbkFjY2VwdGVkKGcpLFQ9ITA7YnJlYWs7Y2FzZSJkaXNwb3NlZCI6bi5vbkRpc3Bvc2VkJiZuLm9uRGlzcG9zZWQoZyksTz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leGNlcHRpb24gdHlwZSAiK2cudHlwZSl9aWYoeSlyZXR1cm4gaSgiYWJvcnQiKSxQcm9taXNlLnJlamVjdCh5KTtpZihUKXtmW2NdPWJbY10scihfLGcub3V0ZGF0ZWRNb2R1bGVzKTtmb3IoYyBpbiBnLm91dGRhdGVkRGVwZW5kZW5jaWVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnLm91dGRhdGVkRGVwZW5kZW5jaWVzLGMpJiYoZFtjXXx8KGRbY109W10pLHIoZFtjXSxnLm91dGRhdGVkRGVwZW5kZW5jaWVzW2NdKSl9TyYmKHIoXyxbZy5tb2R1bGVJZF0pLGZbY109bSl9dmFyIGo9W107Zm9yKHM9MDtzPF8ubGVuZ3RoO3MrKyljPV9bc10sTVtjXSYmTVtjXS5ob3QuX3NlbGZBY2NlcHRlZCYmai5wdXNoKHttb2R1bGU6YyxlcnJvckhhbmRsZXI6TVtjXS5ob3QuX3NlbGZBY2NlcHRlZH0pO2koImRpc3Bvc2UiKSxPYmplY3Qua2V5cyh3KS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyExPT09d1tlXSYmdChlKX0pO2Zvcih2YXIgeCxMPV8uc2xpY2UoKTtMLmxlbmd0aD4wOylpZihjPUwucG9wKCksdT1NW2NdKXt2YXIgRD17fSxrPXUuaG90Ll9kaXNwb3NlSGFuZGxlcnM7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKykobz1rW2xdKShEKTtmb3IoQVtjXT1ELHUuaG90LmFjdGl2ZT0hMSxkZWxldGUgTVtjXSxkZWxldGUgZFtjXSxsPTA7bDx1LmNoaWxkcmVuLmxlbmd0aDtsKyspe3ZhciBJPU1bdS5jaGlsZHJlbltsXV07SSYmKCh4PUkucGFyZW50cy5pbmRleE9mKGMpKT49MCYmSS5wYXJlbnRzLnNwbGljZSh4LDEpKX19dmFyIFAsTjtmb3IoYyBpbiBkKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGMpJiYodT1NW2NdKSlmb3IoTj1kW2NdLGw9MDtsPE4ubGVuZ3RoO2wrKylQPU5bbF0sKHg9dS5jaGlsZHJlbi5pbmRleE9mKFApKT49MCYmdS5jaGlsZHJlbi5zcGxpY2UoeCwxKTtpKCJhcHBseSIpLHY9RTtmb3IoYyBpbiBmKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLGMpJiYoZVtjXT1mW2NdKTt2YXIgSD1udWxsO2ZvcihjIGluIGQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsYykmJih1PU1bY10pKXtOPWRbY107dmFyIEY9W107Zm9yKHM9MDtzPE4ubGVuZ3RoO3MrKylpZihQPU5bc10sbz11LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbUF0pe2lmKEYuaW5kZXhPZihvKT49MCljb250aW51ZTtGLnB1c2gobyl9Zm9yKHM9MDtzPEYubGVuZ3RoO3MrKyl7bz1GW3NdO3RyeXtvKE4pfWNhdGNoKGUpe24ub25FcnJvcmVkJiZuLm9uRXJyb3JlZCh7dHlwZToiYWNjZXB0LWVycm9yZWQiLG1vZHVsZUlkOmMsZGVwZW5kZW5jeUlkOk5bc10sZXJyb3I6ZX0pLG4uaWdub3JlRXJyb3JlZHx8SHx8KEg9ZSl9fX1mb3Iocz0wO3M8ai5sZW5ndGg7cysrKXt2YXIgQj1qW3NdO2M9Qi5tb2R1bGUsQz1bY107dHJ5e3AoYyl9Y2F0Y2goZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIuZXJyb3JIYW5kbGVyKXRyeXtCLmVycm9ySGFuZGxlcihlKX1jYXRjaCh0KXtuLm9uRXJyb3JlZCYmbi5vbkVycm9yZWQoe3R5cGU6InNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZCIsbW9kdWxlSWQ6YyxlcnJvcjp0LG9yZ2luYWxFcnJvcjplLG9yaWdpbmFsRXJyb3I6ZX0pLG4uaWdub3JlRXJyb3JlZHx8SHx8KEg9dCksSHx8KEg9ZSl9ZWxzZSBuLm9uRXJyb3JlZCYmbi5vbkVycm9yZWQoe3R5cGU6InNlbGYtYWNjZXB0LWVycm9yZWQiLG1vZHVsZUlkOmMsZXJyb3I6ZX0pLG4uaWdub3JlRXJyb3JlZHx8SHx8KEg9ZSl9fXJldHVybiBIPyhpKCJmYWlsIiksUHJvbWlzZS5yZWplY3QoSCkpOihpKCJpZGxlIiksbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7ZShfKX0pKX1mdW5jdGlvbiBwKHQpe2lmKE1bdF0pcmV0dXJuIE1bdF0uZXhwb3J0czt2YXIgbj1NW3RdPXtpOnQsbDohMSxleHBvcnRzOnt9LGhvdDpzKHQpLHBhcmVudHM6KE89QyxDPVtdLE8pLGNoaWxkcmVuOltdfTtyZXR1cm4gZVt0XS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxvKHQpKSxuLmw9ITAsbi5leHBvcnRzfXZhciBmPXdpbmRvdy53ZWJwYWNrSnNvbnA7d2luZG93LndlYnBhY2tKc29ucD1mdW5jdGlvbih0LG4scil7Zm9yKHZhciBvLHMsaT0wLGE9W107aTx0Lmxlbmd0aDtpKyspcz10W2ldLGtbc10mJmEucHVzaChrW3NdWzBdKSxrW3NdPTA7Zm9yKG8gaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmKGVbb109bltvXSk7Zm9yKGYmJmYodCxuLHIpO2EubGVuZ3RoOylhLnNoaWZ0KCkoKX07dmFyIG09dGhpcy53ZWJwYWNrSG90VXBkYXRlO3RoaXMud2VicGFja0hvdFVwZGF0ZT1mdW5jdGlvbihlLHQpe3UoZSx0KSxtJiZtKGUsdCl9O3ZhciBoLGcsYixFLHk9ITAsdj0iYWE0ZmFiZWUzYmE2MTA3MWM4MGYiLFQ9MWU0LEE9e30sQz1bXSxPPVtdLFM9W10sUj0iaWRsZSIsaj0wLHg9MCxMPXt9LEQ9e30sdz17fSxNPXt9LGs9ezE6MH07cC5lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtzLm9uZXJyb3I9cy5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoaSk7dmFyIHQ9a1tlXTswIT09dCYmKHQmJnRbMV0obmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC4iKSksa1tlXT12b2lkIDApfXZhciBuPWtbZV07aWYoMD09PW4pcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2UoKX0pO2lmKG4pcmV0dXJuIG5bMl07dmFyIHI9bmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtuPWtbZV09W3Qscl19KTtuWzJdPXI7dmFyIG89ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IixzLmNoYXJzZXQ9InV0Zi04IixzLmFzeW5jPSEwLHMudGltZW91dD0xMmU0LHAubmMmJnMuc2V0QXR0cmlidXRlKCJub25jZSIscC5uYykscy5zcmM9cC5wKyIiK2UrIi5hcHAuIit2LnN1YnN0cigwLDYpKyIuanMiO3ZhciBpPXNldFRpbWVvdXQodCwxMmU0KTtyZXR1cm4gcy5vbmVycm9yPXMub25sb2FkPXQsby5hcHBlbmRDaGlsZChzKSxyfSxwLm09ZSxwLmM9TSxwLmQ9ZnVuY3Rpb24oZSx0LG4pe3AubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxwLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHAuZCh0LCJhIix0KSx0fSxwLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHAucD0iIixwLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX0scC5oPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LG8oMCkocC5zPTApfSh7Ii4vbG9jYWxpemF0aW9uL3RyYW5zbGF0ZWQvYmUuanNvbiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJBY2N1cmFjeUZvcm1CbG9jay5taW5Eb2NGcmVxSGludCI6ItCf0LDRgNCw0LzQtdGC0YAg0L/RgNGL0LzQsNC1INC30L3QsNGH0Y3QvdC90Y8g0LDQtCAxINC00LAgMTAiLCJBY2N1cmFjeUZvcm1CbG9jay5taW5TaG91bGRNYXRjaEhpbnQiOiLQn9Cw0YDQsNC80LXRgtGAINC/0YDRi9C80LDQtSDQt9C90LDRh9GN0L3QvdGPINCw0LQgNTAg0LTQsCAxMDAiLCJBY2N1cmFjeUZvcm1CbG9jay5taW5UZXJtRnJlcUhpbnQiOiLQn9Cw0YDQsNC80LXRgtGAINC/0YDRi9C80LDQtSDQt9C90LDRh9GN0L3QvdGPINCw0LQgMSDQtNCwIDEwIiwiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bURvY0ZyZXFEZXNjcmlwdGlvbiI6ItCj0YHRgtCw0LvRjtC50YbQtSDQvNGW0L3RltC80LDQu9GM0L3Rg9GOINGH0LDRgdGC0LDRgtGDINC30LDRhdCw0LLQsNC90YvRhSDQu9C+0LPQsNGeINGDIEVsYXN0aWNTZWFyY2ggKNCG0L3QtNGN0LrRgSksINGDINGP0LrRltGFINC/0LDQstGW0L3QvdCwINGe0LbRi9Cy0LDRhtGG0LAg0YHQu9C+0LLQsCDQtyDQsNC90LDQu9GW0LfQsNCy0LDQvdCw0LPQsCDQu9C+0LPQsC4g0JrQsNC70ZYg0LrQvtC70YzQutCw0YHRhtGMINC70L7Qs9Cw0Z4g0L3RltC20Y3QuSDQv9Cw0LrQsNC30LDQvdCw0LPQsCDQt9C90LDRh9GN0L3QvdGPLCDQtNCw0LTQt9C10L3QsNC1INGB0LvQvtCy0LAg0LHRg9C00LfQtSDRltCz0L3QsNGA0LDQstCw0YbRhtCwINGeINCQ0Z7RgtCwLdCw0L3QsNC70ZbQt9GDLiDQp9GL0Lwg0YfQsNGB0YbQtdC5INGP0L3QviDRntC20YvQstCw0LXRhtGG0LAg0Z4g0IbQvdC00Y3QutGB0LUsINGC0YvQvCDQvNC10L3RiCDQt9C90LDRh9GN0L3QvdGPINCw0LrQsNC30LLQsNC1INC90LAg0LLRi9C90ZbQutGWINCQ0Z7RgtCwLdCQ0L3QsNC70ZbQt9GDLiIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1Eb2NGcmVxVGl0bGUiOiJNaW5pbXVtIGRvY3VtZW50IGZyZXF1ZW5jeSIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1TaG91bGRNYXRjaERlc2NyaXB0aW9uIjoi0J/RgNCw0YbRjdC90YIg0YHRg9C/0LDQtNC30LXQvdC90Y8g0YHQu9C+0Z4g0L/QsNC80ZbQtiDQsNC90LDQu9GW0LfQsNCy0LDQvdCw0Lkg0LvQvtCz0LDQvCDRliDQu9C+0LPQsNC8LCDQt9Cw0YXQsNCy0LDQvdGL0Lwg0YMgRWxhc3RpY1NlYXJjaC4g0JvQvtCz0ZYg0LcgRWxhc3RpY1NlYXJjaCBjINCw0LTRgdC+0YLQutCw0Lwg0L3RltC20Y3QuSDRg9GB0YLQsNC90L7RntC70LXQvdCw0LPQsCDQsdGD0LTRg9GG0Ywg0ZbQs9C90LDRgNCw0LLQsNGG0Ywg0Z4g0JDRntGC0LAt0LDQvdCw0LvRltC30YMuIiwiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bVNob3VsZE1hdGNoVGl0bGUiOiJNaW5pbXVtIHNob3VsZCBtYXRjaCIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1UZXJtRnJlcURlc2NyaXB0aW9uIjoi0KPRgdGC0LDQu9GO0LnRhtC1INC80ZbQvdGW0LzQsNC70YzQvdGD0Y4g0YfQsNGB0YLQsNGC0YMg0YHQu9C+0LLQsCDRniDQsNC90LDQu9GW0LfQsNCy0LDQvdGL0Lwg0LvQvtCz0YMuINCa0LDQu9GWINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC70L7RniDQvdGW0LbRjdC5INC/0LDQutCw0LfQsNC90LDQs9CwINC30L3QsNGH0Y3QvdC90Y8sINCz0Y3RgtCw0LUg0YHQu9C+0LLQsCDQsdGD0LTQt9C1INGW0LPQvdCw0YDQsNCy0LDRhtGG0LAg0Z4g0JDRntGC0LAt0LDQvdCw0LvRltC30YMuINCn0YvQvCDRh9Cw0YHRhtC10Lkg0Y/QvdC+INGe0LbRi9Cy0LDQtdGG0YbQsCDRniDQsNC90LDQu9GW0LfQsNCy0LDQvdGL0Lwg0LvQvtCz0YMsINGC0YvQvCDQsdC+0LvRjNGIINC30L3QsNGH0Y3QvdC90LUg0LDQutCw0LfQstCw0LUg0L3QsCDQstGL0L3RltC60ZYg0JDRntGC0LAt0JDQvdCw0LvRltC30YMuIiwiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bVRlcm1GcmVxVGl0bGUiOiJNaW5pbXVtIHRlcm0gZnJlcXVlbmN5IiwiQWNjdXJhY3lGb3JtQmxvY2subnVtYmVyT2ZMb2dMaW5lc0FsbE9wdGlvbiI6ItCj0YHQtSIsIkFjY3VyYWN5Rm9ybUJsb2NrLm51bWJlck9mTG9nTGluZXNEZXNjcmlwdGlvbiI6ItCa0L7Qu9GM0LrQsNGB0YbRjCDQv9C10YDRiNGL0YUg0YDQsNC00LrQvtGeINC70L7Qs9CwLCDRj9C60ZbRjyDQsdGD0LTRg9GG0Ywg0YPQu9GW0YfQstCw0YbRhtCwINC/0YDRiyDQkNGe0YLQsC3QsNC90LDQu9GW0LfRgy4iLCJBY2N1cmFjeUZvcm1CbG9jay5udW1iZXJPZkxvZ0xpbmVzVGl0bGUiOiLQmtC+0LvRjNC60LDRgdGG0Ywg0YDQsNC00LrQvtGeINGH0LDRgdC+0L/RltGB0LAiLCJBY2N1cmFjeUZvcm1CbG9jay5zdWJtaXRCdXR0b25UZXh0Ijoi0JDQtNC/0YDQsNCy0ZbRhtGMIiwiQWN0aW9uUGFuZWwuYWN0aW9uQ29tcGFyZSI6ItCf0LDRgNCw0Z7QvdCw0YbRjCIsIkFjdGlvblBhbmVsLmFjdGlvbkRlbGV0ZSI6ItCS0YvQtNCw0LvRltGG0YwiLCJBY3Rpb25QYW5lbC5hY3Rpb25Gb3JjZUZpbmlzaCI6ItCf0YDRi9C80YPRgdC+0LLRiyDRgdGC0L7QvyIsIkFjdGlvblBhbmVsLmFjdGlvbk1lcmdlIjoi0JDQsSfRj9C00L3QsNGG0YwiLCJBY3Rpb25QYW5lbC5hY3Rpb25Nb3ZlVG9BbGwiOiLQn9C10YDQsNC50YHRhtGWINC00LAg0Z7RgdGW0YUg0LfQsNC/0YPRgdC60LDQvCIsIkFjdGlvblBhbmVsLmFjdGlvbk1vdmVUb0RlYnVnIjoiQdC00L/RgNCw0LLRltGG0Ywg0Z4g0LDQtNC70LDQtNC60YMiLCJBY3Rpb25QYW5lbC5hY3Rpb25zQnRuIjoi0JTQt9C10Y/QvdC90ZYiLCJBY3Rpb25QYW5lbC5hY3Rpb25zQnRuVG9vbHRpcCI6ItCQ0LHRj9GA0YvRhtC1INC90LXQutCw0LvRjNC60ZYg0Y3Qu9C10LzQtdC90YLQsNGeINC00LvRjyDQsNC/0YDQsNGG0L7RntC60ZYiLCJBY3Rpb25QYW5lbC5kZWxldGVCdG5Ub29sdGlwIjoi0JLRi9C00LDQu9GW0YbRjCDRgtGN0YHRgtCw0LLRi9GPINGN0LvQtdC80LXQvdGC0Ysg0LPRgNGD0L/QsNC5IiwiQWN0aW9uUGFuZWwuZWRpdERlZmVjdHMiOiLQoNGN0LTQsNCz0LDQstCw0YbRjCDQlNGN0YTQtdC60YLRiyIsIkFjdGlvblBhbmVsLmhpc3RvcnkiOiLQk9GW0YHRgtC+0YDRi9GPIiwiQWN0aW9uUGFuZWwuaWdub3JlSW5BQSI6ItCS0YvQutC70Y7Rh9GL0YbRjCDQtyDQkNGe0YLQsC3QkNC90LDQu2nQt9CwIiwiQWN0aW9uUGFuZWwuaW5jbHVkZUluQUEiOiLQjtC60LvRjtGH0YvRhtGMINGDINCQ0Z7RgtCwLdCQ0L3QsNC7adC3IiwiQWN0aW9uUGFuZWwubGlua0lzc3VlIjoi0JfQstGP0LfQsNGG0Ywg0Lcg0L/RgNCw0LHQu9C10LzQsNC5IiwiQWN0aW9uUGFuZWwubm9CdWdUcmFja2luZ1N5c3RlbVRvTGlua0lzc3VlIjoi0J3QsNC70LDQtNC30YzRhtC1INCh0ZbRgdGC0Y3QvNGDINCw0LTRgdC+0YfQstCw0L3QvdGPINC/0LDQvNGL0LvQsNC6INC90LAg0LfQsNCz0YDRg9C30LrRgyDQv9Cw0LzRi9C70LDQuiIsIkFjdGlvblBhbmVsLm5vQnVnVHJhY2tpbmdTeXN0ZW1Ub1Bvc3RJc3N1ZSI6ItCd0LDQu9Cw0LTQt9GM0YbQtSDQodGW0YHRgtGN0LzRgyDQsNC00YHQvtGH0LLQsNC90L3RjyDQv9Cw0LzRi9C70LDQuiDQvdCwINCw0LTQv9GA0LDRntC60YMg0L/QsNC80YvQu9Cw0LoiLCJBY3Rpb25QYW5lbC5wb3N0SXNzdWUiOiLQn9Cw0LLQtdC00LDQvNGW0YbRjCDQsNCxINC/0YDQsNCx0LvQtdC80LUiLCJBY3Rpb25QYW5lbC5wcm9jZWVkQnV0dG9uIjoi0JDQv9GA0LDRhtC+0Z7QstCw0LnRhtC1INGB0LDQv9GA0LDRntC00L3Ri9GPINGN0LvQtdC80LXQvdGC0YsiLCJBY3Rpb25QYW5lbC51bmxpbmtJc3N1ZSI6ItCQ0LTQstGP0LfQsNGG0Ywg0L/RgNCw0LHQu9C10LzRgyIsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtLmZvcm1IZWFkZXIiOiLQkNC60YLRi9Ge0L3QsNGPINC00YvRgNGN0LrRgtC+0YDRi9GPIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uc3dpdGNoZXJMYWJlbCI6ItCQ0Z7RgtCw0YDRi9C30LDRhtGL0Y8g0Z4g0JDQutGC0YvRntC90LDQuSDQtNGL0YDRjdC60YLQvtGA0YvRliIsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLmJhc2VEbkxhYmVsIjoiQmFzZSBETiIsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLmRvbWFpbkxhYmVsIjoiRG9tYWluIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuZW1haWxBdHRyaWJ1dGVMYWJlbCI6IkVtYWlsIGF0dHJpYnV0ZSIsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLmZ1bGxOYW1lQXR0cmlidXRlTGFiZWwiOiJGdWxsIG5hbWUgYXR0cmlidXRlIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMucGhvdG9BdHRyaWJ1dGVMYWJlbCI6IlBob3RvIGF0dHJpYnV0ZSIsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLnVybExhYmVsIjoiVXJsIiwiQWRkRWRpdERhc2hib2FyZC5kYXNoYm9hcmROYW1lSGludCI6ItCd0LDQt9Cy0LAg0L/QsNC90Y3Qu9GWINC60ZbRgNCw0LLQsNC90L3RjyDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMyDQtNCwIDEyOC4iLCJBZGRGaWx0ZXIuZmlsdGVyTmFtZSI6IkZpbHRlciBOYW1lIiwiQWRkRmlsdGVyLnBsYWNlaG9sZGVyRmlsdGVyTmFtZSI6IklucHV0IGZpbHRlciBuYW1lIiwiQWRkU2hhcmVkV2lkZ2V0TW9kYWwuaGVhZGVyVGV4dCI6IkFkZCBzaGFyZWQgd2lkZ2V0IiwiQWRtaW5IZWFkZXIuYnRuTG9nb3V0Ijoi0JLRi9C50YHRhtGWIiwiQWRtaW5IZWFkZXIuYnRuVG9Qcm9qZWN0Ijoi0JLRj9GA0L3Rg9GG0YbQsCDQtNCwINC/0YDQsNC10LrRgtCwIiwiQWRtaW5IZWFkZXIuaGVhZGVyIjoi0JrRltGA0LDQstCw0L3QvdC1IiwiQWRtaW5TaWRlYmFyLmFsbFByb2plY3RzIjoi0J/RgNCw0LXQutGC0YsiLCJBZG1pblNpZGViYXIuYWxsVXNlcnMiOiLQo9GB0LUg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60ZYiLCJBZG1pblNpZGViYXIuYnRuUHJvZmlsZSI6ItCf0YDQvtGE0ZbQu9GMIiwiQWRtaW5TaWRlYmFyLmJ0blRvUHJvamVjdCI6ItCS0Y/RgNC90YPRhtGG0LAg0LTQsCDQv9GA0LDQtdC60YLQsCIsIkFkbWluU2lkZWJhci5wbHVnaW5zIjoi0J/Qu9Cw0LPRltC90YsiLCJBZG1pblNpZGViYXIuc2V0dGluZ3MiOiLQndCw0LvQsNC00Ysg0YHQtdGA0LLQtdGA0LAiLCJBbGxMYXRlc3REcm9wZG93bi5hbGxMYXVuY2hlcyI6ItCj0YHQtSDQt9Cw0L/Rg9GB0LrRliIsIkFsbExhdGVzdERyb3Bkb3duLmFsbExhdW5jaGVzU2hvcnQiOiLQo9GB0LUiLCJBbGxMYXRlc3REcm9wZG93bi5sYXRlc3RMYXVuY2hlcyI6ItCQ0L/QvtGI0L3RltGPINC30LDQv9GD0YHQutGWIiwiQWxsTGF0ZXN0RHJvcGRvd24ubGF0ZXN0TGF1bmNoZXNTaG9ydCI6ItCQ0L/QvtGI0L3RltGPIiwiQWxsVXNlcnNHcmlkLmVtYWlsQ29sIjoi0K3Qu9C10LrRgtGA0L7QvdC90Ysg0LDQtNGA0LDRgSIsIkFsbFVzZXJzR3JpZC5sYXN0TG9naW5Db2wiOiLQkNC/0L7RiNC90ZYg0Z7QstCw0YXQvtC0IiwiQWxsVXNlcnNHcmlkLmxvZ2luQ29sIjoi0JvQsNCz0ZbQvSIsIkFsbFVzZXJzR3JpZC5uYW1lQ29sIjoiSdC80Y8iLCJBbGxVc2Vyc0dyaWQucHJvamVjdHNBbmRSb2xlc0NvbCI6ItCf0YDQsNC10LrRgtGLINGWINGA0L7Qu9GWIiwiQWxsVXNlcnNHcmlkLnR5cGVDb2wiOiLQotGL0L8iLCJBbGxVc2Vyc1BhZ2UuQWRkVXNlciI6ItCU0LDQtNCw0YbRjCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIkFsbFVzZXJzUGFnZS5leHBvcnQiOiLQrdC60YHQv9Cw0YDRgtCw0LLQsNGG0YwiLCJBbGxVc2Vyc1BhZ2UuaW52aXRlVXNlciI6ItCX0LDQv9GA0LDRgdGW0YbRjCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIkFuYWx5c2lzQ29uZmlndXJhdGlvbnMuYW5hbHlzaXNDb25maWd1cmF0aW9ucyI6ItC60LDQvdGE0ZbQs9GD0YDQsNGG0YvRjiDQkNGe0YLQvi3QkNC90LDQu9GW0LfRgzoiLCJBbmFseXNpc0NvbmZpZ3VyYXRpb25zLmdlbmVyYXRlSW5kZXgiOiLRltC90LTRjdC60YEg0LHRi9GeINC30LPQtdC90LXRgNCw0LLQsNC90YsiLCJBbmFseXNpc0NvbmZpZ3VyYXRpb25zLnJlbW92ZUluZGV4Ijoi0ZbQvdC00Y3QutGBINCx0YvRniDQstGL0LTQsNC70LXQvdGLIiwiQW5hbHlzaXNDb25maWd1cmF0aW9ucy51cGRhdGUiOiLQsNCx0L3QsNCy0ZbRniIsIkFuYWx5c2lzRm9ybS5hbmFseXNpc0NsYXNzaWNNb2RlVGl0bGUiOiLQmtC70LDRgdGW0YfQvdGLIiwiQW5hbHlzaXNGb3JtLmFuYWx5c2lzTGlnaHRNb2RlVGl0bGUiOiLQnNGP0LrQutGWIiwiQW5hbHlzaXNGb3JtLmFuYWx5c2lzTW9kZVRpdGxlIjoi0JTQsNC60LvQsNC00L3QsNGB0YbRjCDQkNGe0YLQsC3QkNC90LDQu9GW0LfRgyIsIkFuYWx5c2lzRm9ybS5hbmFseXNpc01vZGVyYXRlTW9kZVRpdGxlIjoi0KHRj9GA0Y3QtNC90ZYiLCJBbmFseXNpc0Zvcm0udXBkYXRlRXJyb3JOb3RpZmljYXRpb24iOiJTb21ldGhpbmcgd2VudCB3cm9uZyIsIkFuYWx5c2lzRm9ybS51cGRhdGVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0J3QsNC70LDQtNGLINC/0YDQsNC10LrRgtCwINC/0LDRgdC/0Y/RhdC+0LLQsCDQsNCx0L3QvtGe0LvQtdC90YsiLCJBbmFseXNpc1Byb3BlcnRpZXMuYWxsIjoi0KPRgdC1IiwiQW5hbHlzaXNQcm9wZXJ0aWVzLmZyb20iOiLQtyIsIkFuYWx5c2lzUHJvcGVydGllcy5vZmYiOiLQktGL0LrQuyIsIkFuYWx5c2lzUHJvcGVydGllcy5vbiI6ItCS0LrQuyIsIkFuYWx5c2lzUHJvcGVydGllcy50byI6ItC90LAiLCJBcGlQYWdlLnRpdGxlIjoi0JTQsNC60YPQvNC10L3RgtCw0YbRi9GPIEFQSSIsIkFzc2lnbmVkUHJvamVjdHNCbG9jay5oZWFkZXJOYW1lQ29sIjoi0J/RgNGL0LfQvdCw0YfQsNC90YvRjyDQv9GA0LDQtdC60YLRiyIsIkFzc2lnbmVkUHJvamVjdHNCbG9jay5oZWFkZXJSb2xlQ29sIjoi0J/RgNCw0LXQutGC0L3QsNGPINGA0L7Qu9GPIiwiQXR0YWNobWVudERpYWxvZy5jbG9zZSI6IkNsb3NlIiwiQXR0YWNobWVudERpYWxvZy5lZGl0b3IiOiJFZGl0b3IiLCJBdHRhY2htZW50RGlhbG9nLm5vQXR0YWNobWVudHNNZXNzYWdlIjoiTm8gYXR0YWNobWVudHMgdG8gZGlzcGxheSIsIkF0dGFjaG1lbnREaWFsb2cucm90YXRlIjoiUm90YXRlIiwiQXR0YWNobWVudERpYWxvZy50aXRsZSI6IkF0dGFjaG1lbnQiLCJBdHRyaWJ1dGVMaXN0LmFkZE5ldyI6IkFkZCBuZXciLCJCYXJDaGFydFRvb2x0aXAuZmFpbGVkIjoi0J3Rj9Ge0LTQsNC70Ys6IiwiQmFyQ2hhcnRUb29sdGlwLnBhc3NlZCI6ItCf0LDRgdC/0Y/RhdC+0LLRizoiLCJCYXJDaGFydFRvb2x0aXAuc2tpcHBlZCI6ItCf0LXRgNCw0YDQstCw0L3RizoiLCJCZXRhQmFkZ2UuYmV0YSI6ItCx0Y3RgtCwIiwiQnJlYWRjcnVtYnMubG9zdExhdW5jaCI6ItCf0LXRgNGI0LDQv9Cw0YfQsNGC0LrQvtCy0Ysg0LfQsNC/0YPRgdC6INC30LPRg9Cx0LvQtdC90YsiLCJCcmVhZGNydW1icy5yZXN0b3JlUGF0aCI6ItCQ0LTQvdCw0LLRltGG0Ywg0YjQu9GP0YUiLCJDYXRlZ29yaWVzTGlzdC5hZGRPcmdhbml6YXRpb25CdXR0b25UaXRsZSI6ItCU0LDQtNCw0YbRjCDQsNGA0LPQsNC90ZbQt9Cw0YbRi9GOIEdpdEh1YiIsIkNhdGVnb3JpZXNMaXN0Lm9yZ2FuaXphdGlvbk5hbWVMYWJlbCI6ItCd0LDQt9Cy0LAg0LDRgNCz0LDQvdGW0LfQsNGG0YvRliIsIkNoYW5nZVBhc3N3b3JkQmxvY2suY2hhbmdlUGFzcyI6ItCX0LzRj9C90ZbRhtGMINC/0LDRgNC+0LvRjCIsIkNoYW5nZVBhc3N3b3JkQmxvY2suZW50ZXJFbWFpbCI6ItCj0LLRj9C00LfRltGG0LUg0L3QvtCy0Ysg0L/QsNGA0L7Qu9GMINGWINC/0LDRhtCy0LXRgNC00LfRltGG0LUg0Y/Qs9C+IiwiQ2hhbmdlUGFzc3dvcmRGb3JtLmNoYW5nZVBhc3N3b3JkIjoi0JfQvNGP0L3RltGG0Ywg0L/QsNGA0L7Qu9GMIiwiQ2hhbmdlUGFzc3dvcmRGb3JtLmZhaWxlZENoYW5nZSI6ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LDQsdC90LDQstGW0YbRjCDQv9Cw0YDQvtC70YwiLCJDaGFuZ2VQYXNzd29yZEZvcm0ubmV3UGFzc3dvcmRDb25maXJtUGxhY2Vob2xkZXIiOiLQn9Cw0YbQstC10YDQtNC30ZbRhtGMINC/0LDRgNC+0LvRjCIsIkNoYW5nZVBhc3N3b3JkRm9ybS5uZXdQYXNzd29yZFBsYWNlaG9sZGVyIjoi0J3QvtCy0Ysg0L/QsNGA0L7Qu9GMIiwiQ2hhbmdlUGFzc3dvcmRGb3JtLnBhc3N3b3JkQ29uc3RyYWludHMiOiI0LTI1INGB0ZbQvNCy0LDQu9Cw0Z4iLCJDaGFuZ2VQYXNzd29yZEZvcm0uc3VjY2Vzc0NoYW5nZSI6ItCS0LDRiCDQv9Cw0YDQvtC70Ywg0L/QsNGB0L/Rj9GF0L7QstCwINC30LzQtdC90LXQvdGLIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5jb25maXJtTGFiZWwiOiJDb25maXJtIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5jb25maXJtUGxhY2Vob2xkZXIiOiJDb25maXJtIG5ldyBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwuaGVhZGVyIjoiQ2hhbmdlIHBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5uZXdQYXNzd29yZExhYmVsIjoiTmV3IHBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5uZXdQYXNzd29yZFBsYWNlaG9sZGVyIjoiRW50ZXIgbmV3IHBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5vbGRQYXNzd29yZExhYmVsIjoiT2xkIHBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5vbGRQYXNzd29yZFBsYWNlaG9sZGVyIjoiRW50ZXIgb2xkIHBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5wcm9maWxlQ29uZmlybVBhc3N3b3JkIjoi0J/QsNGA0L7Qu9GWINC90LUg0YHRg9C/0LDQtNCw0Y7RhtGMIiwiQ2hhbmdlUGFzc3dvcmRNb2RhbC5wcm9maWxlRW1haWwiOiLQndGP0L/RgNCw0LLRltC70YzQvdGLINGN0LvQtdC60YLRgNC+0L3QvdGLINCw0LTRgNCw0YEiLCJDaGFuZ2VQYXNzd29yZE1vZGFsLnByb2ZpbGVQYXNzd29yZCI6ItCf0LDRgNC+0LvRjCDQv9Cw0LLRltC90LXQvSDRg9GC0YDRi9C80L7RntCy0LDRhtGMINCw0LQgNCDQtNCwIDI1INC30L3QsNC60LDRniIsIkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZVVzZXJOYW1lIjoi0J/QvtGe0L3QsNC1INGW0LzRjyDQv9Cw0LLRltC90L3QsCDRntGC0YDRi9C80LvRltCy0LDRhtGMINCw0LQgMyDQtNCwIDI1NiDQt9C90LDQutCw0Z4sINGD0LrQu9GO0YfQsNGO0YfRiyDQu9Cw0YbRltC90YHQutGW0Y8g0ZYg0YDRg9GB0LrRltGPINC70ZbRgtCw0YDRiywg0LvRltGH0LHRiywg0LfQu9GD0YfQvtC6LCDQvdGW0LbQvdGP0LUg0L/QsNC00LrRgNGN0YHQu9GW0LLQsNC90L3QtSwg0LrRgNC+0L/QutGDINGWINC/0YDQsNCx0LXQuy4iLCJDaGFuZ2VQYXNzd29yZE1vZGFsLnNob3dQYXNzd29yZCI6IlNob3cgcGFzc3dvcmQiLCJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmNhbmNlbFRleHQiOiLQkNC00LzRj9C90ZbRhtGMIiwiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbC5jaGFuZ2VBY2NvdW50Um9sZVRleHQiOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDRhdC+0YfQsNGG0LUg0LfQvNGP0L3RltGG0Ywg0L/RgNCw0LXQutGC0L3Rg9GOINGA0L7Qu9GOINC00LvRjyAne25hbWV9Jz8iLCJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmNoYW5nZUFjY291bnRSb2xlVGl0bGUiOiLQt9C80Y/QvWnRhtGMINGA0L7Qu9GOIiwiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbC5zdWJtaXRUZXh0Ijoi0JfQvNGP0L3RltGG0YwiLCJDaGFydHMuYWIiOiLRhdCwIiwiQ2hhcnRzLmNhc2VzIjoi0YHRhtGN0L3QsNGA0YvRliIsIkNoYXJ0cy5mYWlsZWQiOiLQndGP0Z7QtNCw0LvQsCIsIkNoYXJ0cy5mYWlsZWRTa2lwcGVkVG90YWwiOiIlICjQndGP0Z7QtNCw0LvRi9GFK9Cf0YDQsNC/0YPRiNGH0LDQvdGL0YUpL9Cj0YHRj9Cz0L4iLCJDaGFydHMubGF1bmNoTmFtZSI6IkxhdW5jaCBuYW1lOiIsIkNoYXJ0cy5uZCI6ItCx0LQiLCJDaGFydHMubm90UGFzc2VkIjoiTm90IHBhc3NlZCIsIkNoYXJ0cy5wYXNzZWQiOiLQn9Cw0YHQv9GP0YXQvtCy0LAiLCJDaGFydHMucGIiOiLRhdC/IiwiQ2hhcnRzLnNpIjoi0YHQvyIsIkNoYXJ0cy5za2lwcGVkIjoi0J/RgNCw0L/Rg9GI0YfQsNC90LAiLCJDaGFydHMudGkiOiLRgtCwIiwiQ2hhcnRzLnRvdGFsIjoi0KPRgdGP0LPQviB7dHlwZX0iLCJDb21tb24uYWRkIjoi0JTQsNC00LDRhtGMIiwiQ29tbW9uLmNhbmNlbCI6ItCQ0LTQvNGP0L3RltGG0YwiLCJDb21tb24uY2xvbmUiOiLQmtC70LDQvdCw0LLQsNGG0YwiLCJDb21tb24uY2xvc2VNb2RhbFdhcm5pbmciOiLQktGLINC/0LDQstGW0L3QvdGLINC30LDRhdCw0LLQsNGG0Ywg0LfQvNC10L3RiyDQsNCx0L4g0LDQtNC80Y/QvdGW0YbRjCDRltGFINC/0LXRgNCw0LQg0LfQsNC60YDRi9GG0YbRkdC8INCy0L7QutC90YsiLCJDb21tb24uY29uZmlybSI6ItCf0LDRhtCy0LXRgNC00LfRltGG0YwiLCJDb21tb24uZGVsZXRlIjoi0JLRi9C00LDQu9GW0YbRjCIsIkNvbW1vbi5kaXNjYXJkIjoi0KHQutCw0YHQsNCy0LDRhtGMIiwiQ29tbW9uLmVkaXQiOiLQoNGN0LTQsNCz0LDQstCw0YbRjCIsIkNvbW1vbi5maW5pc2giOiLQl9Cw0LLRj9GA0YjRi9GG0YwiLCJDb21tb24uaW52aXRlIjoi0JfQsNC/0YDQsNGB0ZbRhtGMIiwiQ29tbW9uLm1lcmdlIjoi0JfQu9GD0YfRi9GG0YwiLCJDb21tb24ubW92ZSI6ItCf0LXRgNCw0LzRj9GB0YbRltGG0YwiLCJDb21tb24ubm9SZXN1bHRzIjoi0JLRi9C90ZbQutCw0Z4g0L3QtSDQt9C90L7QudC00LfQtdC90LAiLCJDb21tb24ub2YiOiLQtyIsIkNvbW1vbi5vZmYiOiLQktCr0JrQmyIsIkNvbW1vbi5vayI6ItCe0LoiLCJDb21tb24ub24iOiLQo9Ca0JsiLCJDb21tb24ucmVmcmVzaCI6ItCQ0LHQvdCw0LLRltGG0YwiLCJDb21tb24ucmVxdWlyZWRGaWVsZEhpbnQiOiLQk9GN0YLQsCDQv9C+0LvQtSDQsNCx0LDQstGP0LfQutC+0LLQsNC1IiwiQ29tbW9uLnNhdmUiOiLQl9Cw0YXQsNCy0LDRhtGMIiwiQ29tbW9uLnNlY29uZHMiOiLRgdC10LrRg9C90LTRiy/RgdC10LrRg9C90LQiLCJDb21tb24uc3VibWl0Ijoi0JDQtNC/0YDQsNCy0ZbRhtGMIiwiQ29tbW9uLnVwZGF0ZSI6ItCQ0LrRgtGD0LDQu9GW0LfQsNCy0LDRhtGMIiwiQ29tbW9uLnZhbGlkYXRpb24uZW1haWwiOiLQrdC70LXQutGC0YDQvtC90L3RiyDQsNC00YDQsNGBINC90Y/RgdC70YPRiNC90YsuINCa0LDQu9GWINC70LDRgdC60LAsINGD0LLRj9C00LfRltGG0LUg0YHQu9GD0YjQvdGLINGN0LvQtdC60YLRgNC+0L3QvdGLINCw0LTRgNCw0YEuIiwiQ29tbW9uRW50aXR5Q2hhbmdlcy5jcmVhdGUiOiJjcmVhdGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMuY3JlYXRlRmlsdGVyIjoiY3JlYXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLmNyZWF0ZVdpZGdldCI6ImNyZWF0ZWQgd2lkZ2V0IiwiQ29tbW9uRW50aXR5Q2hhbmdlcy5kZWxldGVEYXNoYm9hcmQiOiJkZWxldGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMuZGVsZXRlRmlsdGVyIjoiZGVsZXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLmRlbGV0ZVdpZGdldCI6ImRlbGV0ZWQgd2lkZ2V0IiwiQ29tbW9uRW50aXR5Q2hhbmdlcy51cGRhdGVEYXNoYm9hcmQiOiJ1cGRhdGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMudXBkYXRlRmlsdGVyIjoidXBkYXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLnVwZGF0ZVdpZGdldCI6InVwZGF0ZWQgd2lkZ2V0IiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMuZGVzY3JpcHRpb25MYWJlbCI6IkRlc2NyaXB0aW9uIiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciI6IkFkZCBzb21lIGRlc2NyaXB0aW9uIHRvIHdpZGdldCIsIkNvbW1vbldpZGdldENvbnRyb2xzLm5hbWVMYWJlbCI6IldpZGdldCBuYW1lIiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMubmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgd2lkZ2V0IG5hbWUiLCJDb21tb25XaWRnZXRDb250cm9scy5zaGFyZUxhYmVsIjoiU2hhcmUiLCJDb21tb25XaWRnZXRDb250cm9scy53aWRnZXROYW1lSGludCI6IldpZGdldCBuYW1lIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDEyOCIsIkNvbXBhcmVMYXVuY2hEaWFsb2cuY29tcGFyZUxhdW5jaEhlYWRlciI6ItCf0LDRgNCw0Z7QvdCw0YbRjCDQt9Cw0L/Rg9GB0LrRliIsIkNvbXBhcmVMYXVuY2hEaWFsb2cueUF4aXNUaXRsZSI6IiUg0Lcg0YLRjdGB0YLQsNCy0YvRhSDRgdGG0Y3QvdCw0YDQvtGeIiwiQ29uZGl0aW9ucy5hbGwiOiLQo9GB0LUiLCJDb25kaXRpb25zLmFsbFNob3J0Ijoi0KPRgdC1IiwiQ29uZGl0aW9ucy5hbnkiOiLQm9GO0LHRiyIsIkNvbmRpdGlvbnMuYW55U2hvcnQiOiLQm9GO0LEiLCJDb25kaXRpb25zLmNudCI6ItCX0LzRj9GI0YfQsNC1IiwiQ29uZGl0aW9ucy5jbnRTaG9ydCI6ItC30LzRiCIsIkNvbmRpdGlvbnMuZXEiOiLQoNC+0Z7QvdGLIiwiQ29uZGl0aW9ucy5lcVNob3J0Ijoi0YDQvSIsIkNvbmRpdGlvbnMuZ3RlIjoi0JHQvtC70YzRiNGLINGH0YvQvCDRhtGWINGA0L7RntC90YsiLCJDb25kaXRpb25zLmd0ZVNob3J0Ijoi4omlIiwiQ29uZGl0aW9ucy5sdGUiOiLQnNC10L3RiNGLINGH0YvQvCDRhtGWINGA0L7RntC90YsiLCJDb25kaXRpb25zLmx0ZVNob3J0Ijoi4omkIiwiQ29uZGl0aW9ucy5ub3RDbnQiOiLQndC1INC30LzRj9GI0YfQsNC1IiwiQ29uZGl0aW9ucy5ub3RDbnRTaG9ydCI6IiHQt9C80YgiLCJDb25kaXRpb25zLm5vdEVxIjoi0J3QtSDRgNC+0Z7QvdGLIiwiQ29uZGl0aW9ucy5ub3RFcVNob3J0IjoiIdGA0L0iLCJDb25kaXRpb25zLndpdGhvdXRBbGwiOiLQkdC10Lcg0YPRgdGW0YUiLCJDb25kaXRpb25zLndpdGhvdXRBbGxTaG9ydCI6IiHRg9GB0LUiLCJDb25kaXRpb25zLndpdGhvdXRBbnkiOiLQkdC10Lcg0LDQvdGW0Y/QutC+0LPQsCIsIkNvbmRpdGlvbnMud2l0aG91dEFueVNob3J0IjoiIdC70Y7QsSIsIkNvbmZpZ0V4YW1wbGVzQmxvY2suaGVhZGVyIjoi0J/RgNGL0LrQu9Cw0LTRiyDQvdCw0LvQsNC00LDRniIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuYnV0dG9uQ29weVRpdGxlIjoi0JDRgtGA0YvQvNCw0YbRjCIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuYnV0dG9uU2VuZFRpdGxlIjoi0JDQtNC/0YDQsNCy0ZbRhtGMIiwiQ29weVNlbmREZWZlY3RNb2RhbC5jb250ZW50Q29weVRpdGxlIjoi0JLRiyDRntC/0Y3RntC90LXQvdGLLCDRiNGC0L4g0YXQvtGH0LDRhtC1INCw0YLRgNGL0LzQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQsNCxINC00Y3RhNC10LrRhtC1INC3INC/0LDQv9GP0YDRjdC00L3Rj9Cz0LAg0L3Rj9Ge0LTQsNC70LDQs9CwINC30LDQv9GD0YHQutGDPyIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuY29udGVudFNlbmRUaXRsZSI6ItCS0Ysg0Z7Qv9GN0Z7QvdC10L3Ri9GPLCDRiNGC0L4g0YXQvtGH0LDRhtC1INCw0LTQv9GA0LDQstGW0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCw0LEg0LTRjdGE0LXQutGG0LUg0Z4g0LDQv9C+0YjQvdGWINC30LDQv9GD0YHQuj8iLCJDb3B5U2VuZERlZmVjdE1vZGFsLmhlYWRlckNvcHlUaXRsZSI6ItCQ0YLRgNGL0LzQsNGG0Ywg0LLRi9C90ZbQutGWINC/0LDQv9GP0YDRjdC00L3Rj9Cz0LAg0LfQsNC/0YPRgdC60YMiLCJDb3B5U2VuZERlZmVjdE1vZGFsLmhlYWRlclNlbmRUaXRsZSI6ItCQ0LTQv9GA0LDQstGW0YbRjCDQstGL0L3RltC60ZYg0Z4g0LDQv9C+0YjQvdGWINC30LDQv9GD0YHQuiIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuc3VjY2Vzc01lc3NhZ2UiOiLQlNGN0YTQtdC60YLRiyDQsNCx0L3QvtGe0LvQtdC90YsiLCJDcmVhdGVVc2VyLndlbGNvbWUiOiJ3ZWxjb21lIHRvIFJlcG9ydCBQb3J0YWwhIiwiQ3VtdWxhdGl2ZVRyZW5kQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIkN1bXVsYXRpdmVUcmVuZENvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiQ3VtdWxhdGl2ZVRyZW5kQ29udHJvbHMuYXR0cmlidXRlS2V5RmllbGRMYWJlbCI6IkF0dHJpYnV0ZSBrZXkiLCJDdW11bGF0aXZlVHJlbmRDb250cm9scy5hdHRyaWJ1dGVLZXlGaWVsZFBsYWNlaG9sZGVyIjoiRW50ZXIgYW4gYXR0cmlidXRlIGtleSIsIkN1bXVsYXRpdmVUcmVuZENvbnRyb2xzLmF0dHJpYnV0ZUtleUZpZWxkVGlwIjoiVG8gdmlldyBhIGR5bmFtaWMgb2YgYSBkZWZpbml0ZSBhdHRyaWJ1dGUgeW91IHNob3VsZCB0eXBlIGl0cyBrZXkiLCJDdXN0b21Db2x1bW5JdGVtLmF0dHJpYnV0ZUtleVBsYWNlaG9sZGVyIjoiQXR0cmlidXRlIGtleSIsIkN1c3RvbUNvbHVtbkl0ZW0ubGFiZWwiOiJDdXN0b20gY29sdW1uIiwiQ3VzdG9tQ29sdW1uSXRlbS5uYW1lUGxhY2Vob2xkZXIiOiJDb2x1bW4gbmFtZSIsIkN1c3RvbUNvbHVtbnNDb250cm9sLmFkZENvbHVtbiI6IisgQWRkIGN1c3RvbSBjb2x1bW4iLCJDdXN0b21Db2x1bW5zQ29udHJvbC50aXAiOiJZb3UgY2FuIGFkZCBjdXN0b20gY29sdW1uIHRvIHZpZXcgYXR0cmlidXRlcyB3aXRoIGNob3NlbiBrZXkiLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuY3VycmVudFVzZXJEYXNoYm9hcmRzQWN0aW9uVGV4dCI6ItCU0LDQtNCw0YbRjCDQvdC+0LLRg9GOINC/0LDQvdGN0LvRjCDQutGW0YDQsNCy0LDQvdC90Y8iLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuY3VycmVudFVzZXJEYXNoYm9hcmRzSGVhZGxpbmUiOiLQoyDQstCw0YEg0L3Rj9C80LAg0L/QsNC90Y3Qu9GP0Z4g0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkRW1wdHlSZXN1bHRzLmN1cnJlbnRVc2VyRGFzaGJvYXJkc1RleHQiOiLQlNCw0LTQsNC50YbQtSDRgdCy0LDRjiDQv9C10YDRiNGD0Y4g0L/QsNC90Y3Qu9GMINC60ZbRgNCw0LLQsNC90L3Rjywg0LrQsNCxINC/0YDQsNCw0L3QsNC70ZbQt9Cw0LLQsNGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMiLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuc2hhcmVkRGFzaGJvYXJkc0hlYWRsaW5lIjoi0J3Rj9C80LAg0LDQv9GD0LHQu9GW0LrQsNCy0LDQvdGL0YUg0L/QsNC90Y3Qu9GP0Z4g0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkRm9ybS5hZGRNb2RhbFN1Ym1pdEJ1dHRvblRleHQiOiLQlNCw0LTQsNGG0YwiLCJEYXNoYm9hcmRGb3JtLmFkZE1vZGFsVGl0bGUiOiLQlNCw0LTQsNGG0Ywg0L3QvtCy0YPRjiDQv9Cw0L3RjdC70Ywg0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmREZXNjcmlwdGlvbkxhYmVsIjoi0JDQv9GW0YHQsNC90L3QtSIsIkRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25QbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0LDQv9GW0YHQsNC90L3QtSDQv9Cw0L3RjdC70ZYg0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lTGFiZWwiOiLQhtC80Y8iLCJEYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWVQbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0L3QsNC30LLRgyDQv9Cw0L3RjdC70ZYg0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmRTaGFyZUxhYmVsIjoi0JDQv9GD0LHQu9GW0LrQsNCy0LDRhtGMIiwiRGFzaGJvYXJkRm9ybS5lZGl0TW9kYWxTdWJtaXRCdXR0b25UZXh0Ijoi0JDQutGC0YPQsNC70ZbQt9Cw0LLQsNGG0YwiLCJEYXNoYm9hcmRGb3JtLmVkaXRNb2RhbFRpdGxlIjoi0KDRjdC00LDQs9Cw0LLQsNGG0Ywg0L/QsNC90Y3Qu9GMINC60ZbRgNCw0LLQsNC90L3RjyIsIkRhc2hib2FyZEZvcm0ubW9kYWxDYW5jZWxCdXR0b25UZXh0Ijoi0JDQtNC80Y/QvdGW0YbRjCIsIkRhc2hib2FyZEdyaWQubXlEYXNoYm9hcmRzIjoi0JzQsNC1INC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8iLCJEYXNoYm9hcmRHcmlkLnNoYXJlZERhc2hib2FyZHMiOiLQkNC/0YPQsdC70ZbQutCw0LLQsNC90YvRjyDQv9Cw0L3RjdC70ZYg0LrRltGA0LDQstCw0L3QvdGPIiwiRGFzaGJvYXJkR3JpZEl0ZW0uZGFzaGJvYXJkSXNTaGFyZWQiOiLQn9Cw0L3RjdC70Ywg0LrRltGA0LDQstCw0L3QvdGPINCw0L/Rg9Cx0LvRltC60LDQstCw0L3QsCIsIkRhc2hib2FyZEdyaWRJdGVtLmRhc2hib2FyZElzU2hhcmVkQnkiOiLQn9Cw0L3RjdC70Ywg0LrRltGA0LDQstCw0L3QvdGPINCw0L/Rg9Cx0LvRltC60LDQstCw0L3QsCIsIkRhc2hib2FyZEl0ZW1QYWdlLmFkZE5ld1dpZGdldCI6ItCU0LDQtNCw0YbRjCDQvdC+0LLRiyDQstGW0LTQttGN0YIiLCJEYXNoYm9hcmRJdGVtUGFnZS5hZGRTaGFyZWRXaWRnZXQiOiLQlNCw0LTQsNGG0Ywg0LDQs9GD0LvRjNC90Ysg0LLRltC00LbRjdGCIiwiRGFzaGJvYXJkSXRlbVBhZ2UuYWRkV2lkZ2V0U3VjY2VzcyI6IldpZGdldCBoYXMgYmVlbiBhZGRlZCIsIkRhc2hib2FyZEl0ZW1QYWdlLmRhc2hib2FyZEVtcHR5VGV4dCI6ItCU0LDQtNCw0LnRhtC1INCS0LDRiCDQv9C10YDRiNGLINCy0ZbQtNC20Y3RgiDQutCw0LEg0L/RgNCw0LDQvdCw0LvRltC30LDQstCw0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyIsIkRhc2hib2FyZEl0ZW1QYWdlLmRlbGV0ZSI6ItCS0YvQtNCw0LvRltGG0YwiLCJEYXNoYm9hcmRJdGVtUGFnZS5lZGl0RGFzaGJvYXJkIjoi0KDRjdC00LDQs9Cw0LLQsNGG0YwiLCJEYXNoYm9hcmRJdGVtUGFnZS5mdWxsc2NyZWVuIjoi0J/QvtGe0L3QsNGN0LrRgNCw0L3QvdGLINGA0Y3QttGL0LwiLCJEYXNoYm9hcmRJdGVtUGFnZS5ub3RNeURhc2hib2FyZEVtcHR5SGVhZGVyIjoi0J3QsCDQs9GN0YLQsNC5INC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8g0L3Rj9C80LAg0LLRltC00LbRjdGC0LDRniIsIkRhc2hib2FyZFBhZ2UubW9kYWwuZGVsZXRlTW9kYWxDb25maXJtYXRpb25UZXh0Ijoi0JLRiyDRntC/0Y3RntC90LXQvdGLLCDRiNGC0L4g0YXQvtGH0LDRhtC1INCy0YvQtNCw0LvRltGG0Ywg0L/QsNC90Y3Qu9GMINC60ZbRgNCw0LLQsNC90L3RjyAgJzxiPntuYW1lfTwvYj4nPyDQr9C90LAg0LHQvtC70YzRiCDQvdC1INCx0YPQtNC30LUg0ZbRgdC90LDQstCw0YbRjC4iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLmRlbGV0ZU1vZGFsU3VibWl0QnV0dG9uVGV4dCI6ItCS0YvQtNCw0LvRltGG0YwiLCJEYXNoYm9hcmRQYWdlLm1vZGFsLmRlbGV0ZU1vZGFsVGl0bGUiOiLQktGL0LTQsNC70ZbRhtGMINC/0LDQvdGN0LvRjCDQutGW0YDQsNCy0LDQvdC90Y8iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLmRlbGV0ZU1vZGFsV2FybmluZ01lc3NhZ2UiOiLQktGLINC30LHRltGA0LDQtdGG0LXRgdGPINCy0YvQtNCw0LvRltGG0Ywg0L3QtSDQstCw0YjRgyDQv9Cw0L3RjdC70Ywg0LrRltGA0LDQstCw0L3QvdGPLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9Cw0Z7Qv9C70YvQstCw0YbRjCDQvdCwINGW0L3RhNCw0YDQvNCw0YbRi9GOINGW0L3RiNGL0YUg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDRniDQv9GA0LDQtdC60YLQsC4iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLm1vZGFsQ2FuY2VsQnV0dG9uVGV4dCI6ItCQ0LTQvNGP0L3RltGG0YwiLCJEYXNoYm9hcmRQYWdlLnRpdGxlIjoi0KPRgdC1INC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8iLCJEYXNoYm9hcmRQYWdlSGVhZGVyLmFsbERhc2hib2FyZHNUaXRsZSI6IkFsbCBkYXNoYm9hcmRzIiwiRGFzaGJvYXJkUGFnZVRvb2xiYXIuc2VhcmNoUGxhY2Vob2xkZXIiOiLQn9C+0YjRg9C6INC/0LAg0L3QsNC30LLQtSIsIkRhc2hib2FyZFRhYmxlLmRhc2hib2FyZE5hbWUiOiLQndCw0LfQstCwINC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8iLCJEYXNoYm9hcmRUYWJsZS5kZWxldGVEYXNoYm9hcmQiOiLQktGL0LTQsNC70ZbRhtGMIiwiRGFzaGJvYXJkVGFibGUuZGVzY3JpcHRpb24iOiLQkNC/0ZbRgdCw0L3QvdC1IiwiRGFzaGJvYXJkVGFibGUuZWRpdCI6ItCg0Y3QtNCw0LPQsNCy0LDRhtGMIiwiRGFzaGJvYXJkVGFibGUub3duZXIiOiLQo9C70LDRgdC90ZbQuiIsIkRhc2hib2FyZFRhYmxlLnNoYXJlZCI6ItCQ0L/Rg9Cx0LvRltC60LDQstCw0L3RiyIsIkRlZmF1bHRQcm9qZWN0U2V0dGluZ3MuZnJvbSI6ItC3IiwiRGVmYXVsdFByb2plY3RTZXR0aW5ncy5rZWVwQXR0YWNobWVudHMiOiLQl9Cw0YXQvtGe0LLQsNGG0Ywg0YHQutGA0YvQvdGI0L7RgtGLIiwiRGVmYXVsdFByb2plY3RTZXR0aW5ncy5rZWVwTG9ncyI6ItCX0LDRhdC+0Z7QstCw0YbRjCDRh9Cw0YHQvtC/0ZbRgSIsIkRlZmF1bHRQcm9qZWN0U2V0dGluZ3MubGF1bmNoSW5hY3Rpdml0eSI6ItCn0LDRgSDQsdGP0LfQtNC30LXQudC90LDRgdGG0ZYg0LfQsNC/0YPRgdC60YMiLCJEZWZhdWx0UHJvamVjdFNldHRpbmdzLnRvIjoi0L3QsCIsIkRlZmVjdFR5cGUuYXV0b21hdGlvbl9idWciOiLQpdGW0LHRiyDQsNGe0YLQsNC80LDRgtGL0LfQsNGG0YvRliIsIkRlZmVjdFR5cGUubm9fZGVmZWN0Ijoi0J3Rj9C80LAg0LTRjdGE0LXQutGC0LDRniIsIkRlZmVjdFR5cGUucHJvZHVjdF9idWciOiLQpdGW0LHRiyDQv9GA0LDQtNGD0LrRgtGDIiwiRGVmZWN0VHlwZS5zeXN0ZW1faXNzdWUiOiLQodGW0YHRgtGN0LzQvdGL0Y8g0L/RgNCw0LHQu9C10LzRiyIsIkRlZmVjdFR5cGUudG9faW52ZXN0aWdhdGUiOiLQndC10LDQsdGF0L7QtNC90Ysg0LDQvdCw0LvRltC3IiwiRGVmZWN0VHlwZUNoYW5nZXMuZGVmZWN0VHlwZXMiOiLRgtGL0L/RiyDQtNGN0YTQtdC60YLQsNGeIiwiRGVmZWN0VHlwZUNoYW5nZXMuZGVsZXRlIjoi0LLRi9C00LDQu9GW0Z4g0LTRjdGE0LXQutGCINGC0YvQvyIsIkRlZmVjdFR5cGVDaGFuZ2VzLnVwZGF0ZSI6ItCw0LHQvdCw0LLRltGeIiwiRGVmZWN0VHlwZVRvb2x0aXAuYWItdG90YWwiOiLQo9GB0Y/Qs9C+INGF0ZbQsdCw0Z4g0LDRntGC0LDQvNCw0YLRi9C30LDRhtGL0ZYiLCJEZWZlY3RUeXBlVG9vbHRpcC5uZC10b3RhbCI6ItCj0YHRj9Cz0L4g0LHQtdC3INC00Y3RhNC10LrRgtCw0Z4iLCJEZWZlY3RUeXBlVG9vbHRpcC5wYi10b3RhbCI6ItCj0YHRj9Cz0L4g0YXRltCx0LDRniDQv9GA0LDQtNGD0LrRgtGDIiwiRGVmZWN0VHlwZVRvb2x0aXAuc2ktdG90YWwiOiLQo9GB0Y/Qs9C+INGB0ZbRgdGC0Y3QvNC90YvRhSDQv9GA0LDQsdC70LXQvCIsIkRlbGV0ZUZpbHRlckRpYWxvZy5kZWxldGVGaWx0ZXIiOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDRhdC+0YfQsNGG0LUg0LLRi9C00LDQu9GW0YbRjCDRhNGW0LvRjNGC0YAgJzxiPntuYW1lfTwvYj4nPyDQgdC9INCx0L7Qu9GM0Ygg0L3QtSDQsdGD0LTQt9C1INGW0YHQvdCw0LLQsNGG0YwuIiwiRGVsZXRlRmlsdGVyRGlhbG9nLmRlbGV0ZUZpbHRlckhlYWRlciI6ItCS0KvQlNCQ0JvQhtCm0Kwg0KTQhtCb0KzQotCgIiwiRGVsZXRlSW1hZ2VNb2RhbC5oZWFkZXIiOiLQktGL0LTQsNC70ZbRhtGMINGE0L7RgtCwIiwiRGVsZXRlSW1hZ2VNb2RhbC50ZXh0Ijoi0JLRiyDRntC/0Y3RntC90LXQvdGL0Y8sINGI0YLQviDQttCw0LTQsNC10YbQtSDQstGL0LTQsNC70ZbRhtGMINGE0L7RgtCwINC/0YDQvtGE0ZbQu9GOPyIsIkRlbGV0ZUxhdW5jaERpYWxvZy5kZWxldGVMYXVuY2giOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDRhdC+0YfQsNGG0LUg0LLRi9C00LDQu9GW0YbRjCDQt9Cw0L/Rg9GB0LogJzxiPntuYW1lfSAje251bWJlcn08L2I+Jz8g0IHQvSDQsdC+0LvRjNGIINC90LUg0LHRg9C00LfQtSDRltGB0L3QsNCy0LDRhtGMLi4iLCJEZWxldGVMYXVuY2hEaWFsb2cuZGVsZXRlTGF1bmNoSGVhZGVyIjoi0JLRi9C00LDQu9GW0YbRjCDQt9Cw0L/Rg9GB0LoiLCJEZWxldGVMYXVuY2hEaWFsb2cuZGVsZXRlTGF1bmNoV2FybmluZyI6ItCS0Ysg0LfQsdGW0YDQsNC10YbQtdGB0Y8g0LLRi9C00LDQu9GW0YbRjCDQvdC1INGB0LLQvtC5INGD0LvQsNGB0L3RiyDQt9Cw0L/Rg9GB0LouINCT0Y3RgtCwINC80L7QttCwINC/0LDRntC/0LvRi9Cy0LDRhtGMINC90LAg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0ZbQvdGI0YvRhSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNGeINC90LAg0L/RgNCw0LXQutGG0LUuIiwiRGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmNhbmNlbEJ1dHRvbiI6IkNhbmNlbCIsIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5tZXNzYWdlIjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBub3RpZmljYXRpb24gIHJ1bGUgPGI+e251bWJlcn08L2I+PyIsIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5zdWJtaXRCdXR0b24iOiJEZWxldGUiLCJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwudGl0bGUiOiJEZWxldGUgTm90aWZpY2F0aW9uIFJ1bGUiLCJEZWxldGVXaWRnZXRNb2RhbC5kZWxldGVPd25XaWRnZXRXYXJuaW5nIjoi0JLRiyDQt9Cx0ZbRgNCw0LXRhtC10YHRjyDQstGL0LTQsNC70ZbRhtGMINCy0LDRiCDQstGW0LTQttC00Y3Rgi4g0JPRjdGC0LAg0LzQvtC20LAg0L/QsNGe0L/Qu9GL0LLQsNGG0Ywg0L3QsCDRltC90YTQsNGA0LzQsNGG0YvRjiDQvdCwINCy0LDRiNGL0YUg0L/QsNC90Y3Qu9GP0YUg0LrRltGA0LDQstCw0L3QvdGPLiIsIkRlbGV0ZVdpZGdldE1vZGFsLmRlbGV0ZVdpZGdldEFkbWluV2FybmluZyI6ItCS0Ysg0LfQsdGW0YDQsNC10YbQtdGB0Y8g0LLRi9C00LDQu9GW0YbRjCDQvdC1INCy0LDRiCDQstGW0LTQttC00Y3Rgi4g0JPRjdGC0LAg0LzQvtC20LAg0L/QsNGe0L/Qu9GL0LLQsNGG0Ywg0L3QsCDRltC90YTQsNGA0LzQsNGG0YvRjiDRltC90YjRi9GFINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCw0Z4g0L/RgNCw0LXQutGC0LAuIiwiRGVsZXRlV2lkZ2V0TW9kYWwuZGVsZXRlV2lkZ2V0SGVhZGVyIjoi0JLRi9C00LDQu9GW0YbRjCDQstGW0LTQttC00Y3RgiIsIkRlbGV0ZVdpZGdldE1vZGFsLmRlbGV0ZVdpZGdldFRleHQiOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDRhdC+0YfQsNGG0LUg0LLRi9C00LDQu9GW0YbRjCDQstGW0LTQttGN0YIgJzxiPntuYW1lfTwvYj4nPyDQktGLINGB0YLRgNCw0YbRltGG0LUg0LTQvtGB0YLRg9C/INC00LAg0Y/Qs9C+LiDQk9GN0YLQsCDQtNC30LXRj9C90L3QtSDQvdC10LvRjNCz0LAg0LDQtNC80Y/QvdGW0YbRjC4iLCJEZW1vRGF0YVRhYi5kZXNjcmlwdGlvbkhlYWRlciI6ItCh0ZbRgdGC0Y3QvNCwINC30LPQtdC90LXRgNGD0LUg0L3QsNGB0YLRg9C/0L3Ri9GPINC00Y3QvNCwLdC00LDQtNC30LXQvdGL0Y86IiwiRGVtb0RhdGFUYWIuZGVzY3JpcHRpb25MaXN0Rmlyc3RJdGVtIjoiMTAg0LfQsNC/0YPRgdC60LDRniIsIkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uTGlzdFNlY0l0ZW0iOiIxINC/0LDQvdGN0LvRjCDQutGW0YDQsNCy0LDQvdC90Y8g0LcgOSDQstGW0LTQttGN0YLQsNC80ZYiLCJEZW1vRGF0YVRhYi5kZXNjcmlwdGlvbkxpc3RUaGlyZEl0ZW0iOiIxINGE0ZbQu9GM0YLRgCIsIkRlbW9EYXRhVGFiLm1vYmlsZUhpbnQiOiLQktGLINC80L7QttCw0YbQtSDQs9C10L3QtdGA0LDQstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINGC0L7Qu9GM0LrRliDRniDQutCw0LzQv9GD0YLQsNGA0L3Ri9C8INCy0YvQs9C70Y/QtNC30LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rjy4iLCJEZW1vRGF0YVRhYi53YXJuaW5nSW5mbyI6ItCS0LDQvCDQv9GA0YvQudC00LfQtdGG0YbQsCDQstGL0LTQsNC70ZbRhtGMINC00Y3QvNCwLdC00LDQtNC30LXQvdGL0Y8g0Z7RgNGD0YfQvdGD0Y4uIiwiRGVtb0RhdGFUYWIud2FybmluZ1RleHQiOiLQo9Cy0LDQs9CwISIsIkRlbW9EYXRhVGFiRm9ybS5kZW1vRGF0YVBvc3RmaXhIaW50Ijoi0J/QvtGB0YLRhNC40LrRgSDQv9Cw0LLRltC90LXQvSDQsdGL0YbRjCDQv9Cw0LzQtdGA0LDQvCDQsNC0IDEg0LTQsCA5MCIsIkRlbW9EYXRhVGFiRm9ybS5nZW5lcmF0ZUJ1dHRvblRpdGxlIjoi0JfQs9C10L3QtdGA0LDQstCw0YbRjCDQtNGN0LzQsC3QtNCw0LTQt9C10L3Ri9GPIiwiRGVtb0RhdGFUYWJGb3JtLnByZWxvYWRlckluZm8iOiLQk9C10L3QtdGA0LDQstCw0L3QvdC1INC00LDQtNC30LXQvdGL0YUg0L/QsNGH0LDQu9C+0YHRjy4g0J/RgNCw0YbRjdGBINC80L7QttCwINC30LDQvdGP0YbRjCDQvdC10LrQsNC70YzQutGWINGF0LLRltC70ZbQvSwg0LrQsNC70ZYg0LvQsNGB0LrQsCwg0L/QsNGH0LDQutCw0LnRhtC1LiIsIkRpc3BsYXlGaWx0ZXIuZGlzcGxheSI6ItCQ0LTQu9GO0YHRgtGA0LDQstCw0YbRjCDQvdCwINC30LDQv9GD0YHQutCw0YU6IiwiRGlzcGxheUZpbHRlci5zaG93T25MYXVuY2hlc1N3aXRjaGVyT2ZmIjoi0JLRi9C60LsiLCJEaXNwbGF5RmlsdGVyLnNob3dPbkxhdW5jaGVzU3dpdGNoZXJPbiI6ItCj0LrQuyIsIkR1cmF0aW9uQmxvY2suZmluaXNoZWQiOiLQn9GA0LDRhtGP0LPQu9Cw0YHRhtGMOiB7ZHVyYXRpb25UaW1lfS4g0KfQsNGBINC30LDQutCw0L3Rh9GN0L3QvdGPOiB7ZW5kVGltZX0iLCJEdXJhdGlvbkJsb2NrLmluUHJvZ3Jlc3MiOiLQoyDQv9GA0LDRhtGN0YHQtSIsIkR1cmF0aW9uQmxvY2suaW5Qcm9ncmVzc1dpdGhFbmQiOiLQndGP0L/RgNCw0LLRltC70YzQvdGLINGB0YLQsNGC0YPRgTogJ9CjINC/0YDQsNGG0Y3RgdC1JyDQvNCw0LUg0YfQsNGBINC30LDQutCw0L3Rh9GN0L3QvdGPIiwiRHVyYXRpb25CbG9jay5pbnRlcnJ1cHRlZCI6ItCS0YvQutCw0L3QsNC90L3QtSDQn9CV0KDQkNCf0KvQndCV0J3QkCDQv9Cw0YHQu9GPOiB7ZHVyYXRpb25UaW1lfS4g0KHQv9GL0L3QtdC90Ysg0LI6IHtlbmRUaW1lfSIsIkR1cmF0aW9uQmxvY2subm90SW5Qcm9ncmVzc1dpdGhvdXRFbmQiOiLQndGP0L/RgNCw0LLRltC70YzQvdGLINGB0YLQsNGC0YPRgTog0Y3Qu9C10LzQtdC90YIg0L3QtSAn0KMg0L/RgNCw0YbRjdGB0LUnLCDQsNC70LUg0L3QtSDQvNCw0LUg0YfQsNGB0YMg0LfQsNC60LDQvdGH0Y3QvdC90Y8iLCJEdXJhdGlvbkJsb2NrLm92ZXJBcHByb3hpbWF0ZSI6ItCh0Y/RgNGN0LTQvdGWINGH0LDRgSDQstGL0LrQsNC90LDQvdC90Y8gLSB7ZW5kfSwg0YbRj9C/0LXRgNCw0YjQvdGP0LUg0L/QtdGA0LDQutGA0YvRhtGG0ZEgLSB7b3Zlcn0iLCJEdXJhdGlvbkJsb2NrLnNraXBwZWQiOiLQn9Cg0JDQn9Cj0KjQp9CQ0J3QkC4g0J/RgNCw0YbRj9Cz0LvQsNGB0YbRjDoge2R1cmF0aW9uVGltZX0iLCJEdXJhdGlvbkJsb2NrLnN0b3BwZWQiOiLQktGL0LrQsNC90LDQvdC90LUg0KHQn9Cr0J3QldCd0JAg0L/QsNGB0LvRjzoge2R1cmF0aW9uVGltZX0uINCh0L/Ri9C90LXQvdGLINCyOiB7ZW5kVGltZX0iLCJEdXJhdGlvblRvb2x0aXAubWVzc2FnZSI6ItCf0YDQsNGG0Y/Qs9C70LDRgdGG0YwgLSAg0ZbQvdGC0Y3RgNCy0LDQuyDQv9Cw0LzRltC2INC/0LDRh9Cw0YLQutCw0Lwg0L/QtdGA0YjQsNCz0LAg0L/QsNC00LfQsNC/0YPRgdC60YMg0ZYg0LfQsNC60LDQvdGH0Y3QvdC90LXQvCDQsNC/0L7RiNC90Y/Qs9CwINC/0LDQtNC30LDQv9GD0YHQutGDLiDQkNC70LUg0LrQsNC70ZYg0L/QsNC00LfQsNC/0YPRgdC60ZYg0ZbQtNGD0YbRjCDRgyDQv9Cw0YDQsNC70LvQtdC70ZYsINGH0LDRgSDQt9Cw0LrQsNC90YfRjdC90L3RjyAtINCz0Y3RgtCwINGH0LDRgSDQvdCw0LnQtNCw0Z7QttGN0LnRiNCw0LPQsCDQv9Cw0LTQt9Cw0L/Rg9GB0LrRgywg0YMg0LPRjdGC0YvQvCDQstGL0L/QsNC00LrRgyDQv9GA0LDRhtGP0LPQu9Cw0YHRhtGMINC90LUg0LHRg9C00LfQtSDRgNC+0Z7QvdCw0Lkg0YHRg9C80LUg0L/RgNCw0YbRj9Cz0LvQsNGB0YbRj9GeINC/0LDQtNC30LDQv9GD0YHQutCw0Z4uIiwiRWRpdERlZmVjdE1vZGFsLmRlZmVjdENvbW1lbnRQbGFjZWhvbGRlciI6ItCf0YDQsNC60LDQvNC10L3RgtGD0LnRhtC1INCi0YvQvyDQtNGN0YTQtdC60YLRgyIsIkVkaXREZWZlY3RNb2RhbC5kZWZlY3RUeXBlU2VsZWN0b3JQbGFjZWhvbGRlciI6ItCS0YvQsdC10YDRi9GG0LUg0KLRi9C/INC00Y3RhNC10LrRgtGDIiwiRWRpdERlZmVjdE1vZGFsLmRlZmVjdFR5cGVUaXRsZSI6ItCi0YvQvyDQtNGN0YTQtdC60YLRgyIsIkVkaXREZWZlY3RNb2RhbC5ob3RLZXlDYW5jZWxDYXB0aW9uIjoi0LTQu9GPINCw0LTQvNC10L3RiyIsIkVkaXREZWZlY3RNb2RhbC5ob3RLZXlTdWJtaXRDYXB0aW9uIjoi0LTQu9GPINC/0LDRhtCy0LXRgNC00LbQsNC90L3RjyIsIkVkaXREZWZlY3RNb2RhbC5pZ25vcmVBYVRpdGxlIjoi0IbQs9C90LDRgNCw0LLQsNGG0Ywg0L/RgNGLINCQ0Z7RgtCwLdCw0L3QsNC70ZbQt9C1IiwiRWRpdERlZmVjdE1vZGFsLnJlcGxhY2VDb21tZW50c1RpdGxlIjoi0JfQsNC80Y/QvdGW0YbRjCDQutCw0LzQtdC90YLQsNGA0YvRliDQtNC70Y8g0Z7RgdGW0YUg0LLRi9Cx0YDQsNC90YvRhSDRjdC70LXQvNC10L3RgtCw0Z4iLCJFZGl0RGVmZWN0TW9kYWwuc2F2ZUFuZExpbmtJc3N1ZU1lc3NhZ2UiOiLQl9Cw0YXQsNCy0LDRhtGMINGWINC/0YDRi9C80LDRhtCw0LLQsNGG0Ywg0L/QsNC80YvQu9C60YMiLCJFZGl0RGVmZWN0TW9kYWwuc2F2ZUFuZFBvc3RJc3N1ZU1lc3NhZ2UiOiLQl9Cw0YXQsNCy0LDRhtGMINGWINCw0LTQv9GA0LDQstGW0YbRjCDQv9Cw0LzRi9C70LrRgyIsIkVkaXREZWZlY3RNb2RhbC5zYXZlQW5kVW5saW5rSXNzdWVNZXNzYWdlIjoi0JfQsNGF0LDQstCw0YbRjCDRliDQsNC00LLRj9C30LDRhtGMINC/0LDQvNGL0LvQutGDIiwiRWRpdERlZmVjdE1vZGFsLnRpdGxlIjoi0KDRjdC00LDQs9Cw0LLQsNGG0Ywg0YLRi9C/INC00Y3RhNC10LrRgtGDIiwiRWRpdERlZmVjdE1vZGFsLnVwZGF0ZURlZmVjdHNGYWlsZWQiOiLQndC1INCw0YLRgNGL0LzQsNC70LDRgdGPINCw0LHQvdCw0LLRltGG0Ywg0LTRjdGE0LXQutGC0YsiLCJFZGl0RGVmZWN0TW9kYWwudXBkYXRlRGVmZWN0c1N1Y2Nlc3MiOiLQlNGN0YTQtdC60YLRiyDQsNCx0L3QvtGe0LvQtdC90YsiLCJFZGl0SXRlbU1vZGFsLmF0dHJpYnV0ZXNMYWJlbCI6ItCQ0YLRgNGL0LHRg9GC0YsiLCJFZGl0SXRlbU1vZGFsLmNvbnRlbnRUaXRsZSI6ItCQ0L/RltGB0LDQvdC90LUge3R5cGV90LAiLCJFZGl0SXRlbU1vZGFsLmRlc2NyaXB0aW9uUGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INCw0L/RltGB0LDQvdC90LUge3R5cGV90LAiLCJFZGl0SXRlbU1vZGFsLml0ZW0iOiLRjdC70LXQvNC10L3RgiIsIkVkaXRJdGVtTW9kYWwuaXRlbVVwZGF0ZVN1Y2Nlc3MiOiLQl9Cw0LLQtdGA0YjQtdC90L4g0YPRgdC/0LXRiNC90L4iLCJFZGl0SXRlbU1vZGFsLmxhdW5jaCI6ItC30LDQv9GD0YHQuiIsIkVkaXRJdGVtTW9kYWwubGF1bmNoVXBkYXRlU3VjY2VzcyI6ItCX0LDQv9GD0YHQuiDRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0LvRkdC9IiwiRWRpdEl0ZW1Nb2RhbC5tb2RhbEhlYWRlciI6ItCg0Y3QtNCw0LPQsNCy0LDRhtGMIHt0eXBlfSIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwuZW1haWxMYWJlbCI6ItCt0LvQtdC60YLRgNC+0L3QvdGLINCw0LTRgNCw0YEiLCJFZGl0UGVyc29uYWxJbmZvcm1hdGlvbk1vZGFsLmVtYWlsUGxhY2Vob2xkZXIiOiLQmtCw0LvRliDQu9Cw0YHQutCwLCDRg9Cy0Y/QtNC30ZbRhtC1INGN0LvQtdC60YLRgNC+0L3QvdGLINCw0LTRgNCw0YEiLCJFZGl0UGVyc29uYWxJbmZvcm1hdGlvbk1vZGFsLmhlYWRlciI6ItCg0Y3QtNCw0LPQsNCy0LDRhtGMINCw0YHQsNCx0ZbRgdGC0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwubmFtZUxhYmVsIjoi0IbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwIiwiRWRpdFBlcnNvbmFsSW5mb3JtYXRpb25Nb2RhbC5uYW1lUGxhY2Vob2xkZXIiOiLQmtCw0LvRliDQu9Cw0YHQutCwLCDRg9Cy0Y/QtNC30ZbRhtC1INGW0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIkVkaXRXaWRnZXRNb2RhbC5lZGl0V2lkZ2V0U3VjY2VzcyI6IldpZGdldCBoYXMgYmVlbiB1cGRhdGVkIiwiRWRpdFdpZGdldE1vZGFsLmhlYWRlclRleHQiOiJFZGl0IHdpZGdldCIsIkVtYWlsU2VydmVyVGFiLmVtYWlsU3dpdGNoZXIiOiLQo9C60LvRjtGH0YvRhtGMINC/0LDRiNGC0L7QstGLINGB0LXRgNCy0LXRgCIsIkVtYWlsU2VydmVyVGFiLnBvcnRGaWVsZEhpbnQiOiLQnNCw0LPRh9GL0LzRiyDRgtC+0LvRjNC60ZYg0LvRltGH0LHRiyDQsNC0ICcxJyDQtNCwICc2NTUzNScuIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmF1dGhMYWJlbCI6ItCQ0Z7RgtCw0YDRi9C30LDRhtGL0Y8iLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMuZnJvbUxhYmVsIjoi0IbQvNGPINCw0LTQv9GA0LDRntC90ZbQutCwINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmhvc3RMYWJlbCI6ItCl0L7RgdGCIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLnBhc3N3b3JkTGFiZWwiOiLQn9Cw0YDQvtC70YwiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucG9ydExhYmVsIjoi0J/QvtGA0YIiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucHJvdG9jb2xMYWJlbCI6ItCf0YDQsNGC0LDQutC+0LsiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMudXBkYXRlRW1haWxTZXJ2ZXJTdWNjZXNzIjoi0J3QsNC70LDQtNGLINC/0LDRiNGC0L7QstCw0LPQsCDRgdC10YDQstC10YDQsCDQvtCx0L3QvtGe0LvQtdC90YsiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMudXNlcm5hbWVMYWJlbCI6ItCG0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIkVudGl0aWVzU2VsZWN0b3IubW9yZSI6ItCR0L7Qu9GM0YgiLCJFbnRpdHlJdGVtQXR0cmlidXRlS2V5cy5wbGFjZWhvbGRlciI6IkVudGVyIGF0dHJpYnV0ZSBrZXlzIiwiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5wbGFjZWhvbGRlciI6IkVudGVyIGF0dHJpYnV0ZSB2YWx1ZXMiLCJFbnRpdHlJdGVtRGVzY3JpcHRpb24ucGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INCw0L/RltGB0LDQvdC90LUiLCJFbnRpdHlJdGVtTmFtZS5wbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0ZbQvNGPIiwiRW50aXR5SXRlbVN0YXRpc3RpY3MucGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INC60L7Qu9GM0LrQsNGB0YbRjCIsIkVudGl0eUxhdW5jaE51bWJlci5wbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0L3Rg9C80LDRgCIsIkVudGl0eVVzZXJTZWFyY2guZm9jdXNQbGFjZWhvbGRlciI6ItCf0LDRgtGA0LDQsdGD0LXRhtGG0LAg0L/QsCDQvNC10L3RiNCw0Lkg0LzQtdGA0YsgMyDRgdGW0LzQstCw0LvQsC4iLCJFbnRpdHlVc2VyU2VhcmNoLnBsYWNlaG9sZGVyIjoi0KPQstGP0LTQt9GW0YbQtSDRg9C70LDQtNCw0LvRjNC90ZbQutCwIiwiRXZlbnRBY3Rpb25zLmNyZWF0ZUJ0cyI6ImNyZWF0ZSBidHMiLCJFdmVudEFjdGlvbnMuY3JlYXRlRGFzaGJvYXJkIjoi0KHRgtCy0LDRgNGN0L3QvdC1INC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8iLCJFdmVudEFjdGlvbnMuY3JlYXRlRGVmZWN0Ijoi0KHRgtCy0LDRgNGN0L3QvdC1INC00Y3RhNC10LrRgtCwIiwiRXZlbnRBY3Rpb25zLmNyZWF0ZUZpbHRlciI6ItCh0YLQstCw0YDRjdC90L3QtSDRhGnQu9GM0YLRgNCwIiwiRXZlbnRBY3Rpb25zLmNyZWF0ZVVzZXIiOiLQodGC0LLQsNGA0Y3QvdC90LUg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAiLCJFdmVudEFjdGlvbnMuY3JlYXRlV2lkZ2V0Ijoi0KHRgtCy0LDRgNGN0L3QvdC1INCy0ZbQtNC20LTRjdGC0LAiLCJFdmVudEFjdGlvbnMuZGVsZXRlQnRzIjoiZGVsZXRlIGJ0cyIsIkV2ZW50QWN0aW9ucy5kZWxldGVEYXNoYm9hcmQiOiLQktGL0LTQsNC70LXQvdC90LUg0L/QsNC90Y3Qu9GWINC60ZbRgNCw0LLQsNC90L3RjyIsIkV2ZW50QWN0aW9ucy5kZWxldGVEZWZlY3QiOiJkZWxldGUgZGVmZWN0IiwiRXZlbnRBY3Rpb25zLmRlbGV0ZUZpbHRlciI6ItCS0YvQtNCw0LvQtdC90L3QtSDRhGnQuNC70YzRgtGA0LAiLCJFdmVudEFjdGlvbnMuZGVsZXRlTGF1bmNoIjoi0JLRi9C00LDQu9C10L3QvdC1INC30LDQv9GD0YHQutGDIiwiRXZlbnRBY3Rpb25zLmRlbGV0ZVdpZGdldCI6ItCS0YvQtNCw0LvQtdC90L3QtSDQstGW0LTQttGN0YLQsCIsIkV2ZW50QWN0aW9ucy5maW5pc2hJbXBvcnQiOiLQmtCw0L3Rh9Cw0YLQsNC6INGW0LzQv9Cw0YDRgtGDIiwiRXZlbnRBY3Rpb25zLmZpbmlzaExhdW5jaCI6ItCa0LDQvdGH0LDRgtCw0Log0LfQsNC/0YPRgdC60YMiLCJFdmVudEFjdGlvbnMuZ2VuZXJhdGVJbmRleCI6ImdlbmVyYXRlIGluZGV4IiwiRXZlbnRBY3Rpb25zLmxpbmtJc3N1ZSI6ImxpbmsgaXNzdWUiLCJFdmVudEFjdGlvbnMucG9zdElzc3VlIjoicG9zdCBpc3N1ZSIsIkV2ZW50QWN0aW9ucy5zdGFydEltcG9ydCI6ItCh0YLQsNGA0YIg0ZbQvNC/0LDRgNGC0YMiLCJFdmVudEFjdGlvbnMuc3RhcnRMYXVuY2giOiLQodGC0LDRgNGCINC30LDQv9GD0YHQutGDIiwiRXZlbnRBY3Rpb25zLnVwZGF0ZUFuYWx5emVyIjoidXBkYXRlIGFuYWxpemVyIiwiRXZlbnRBY3Rpb25zLnVwZGF0ZUJ0cyI6InVwZGF0ZSBidHMiLCJFdmVudEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkIjoi0JDQsdC90LDRntC70LXQvdC90LUg0L/QsNC90Y3Qu9GWINC60ZbRgNCw0LLQsNC90L3RjyIsIkV2ZW50QWN0aW9ucy51cGRhdGVEZWZlY3QiOiLQkNCx0L3QsNGe0LvQtdC90L3QtSDQtNGN0YTQtdC60YLQsCIsIkV2ZW50QWN0aW9ucy51cGRhdGVGaWx0ZXIiOiLQkNCx0L3QsNGe0LvQtdC90L3QtSDRhGnQu9GM0YLRgNCwIiwiRXZlbnRBY3Rpb25zLnVwZGF0ZUl0ZW0iOiLQkNCx0L3QsNCy0ZbRhtGMINGN0LvQtdC80LXQvdGCIiwiRXZlbnRBY3Rpb25zLnVwZGF0ZVByb2plY3QiOiLQkNCx0L3QsNGe0LvQtdC90L3QtSDQv9GA0LDQtdC60YLQsCIsIkV2ZW50QWN0aW9ucy51cGRhdGVXaWRnZXQiOiLQkNCx0L3QsNGe0LvQtdC90L3QtSDQstGW0LTQttC00Y3RgiIsIkV2ZW50T2JqZWN0VHlwZXMuZGFzaGJvYXJkIjoi0J/QsNC90Y3Qu9GMINC60ZbRgNCw0LLQsNC90L3RjyIsIkV2ZW50T2JqZWN0VHlwZXMuZGVmZWN0VHlwZSI6ItCi0YvQvyDQtNGN0YTQtdC60YLQsCIsIkV2ZW50T2JqZWN0VHlwZXMuZW1haWxDb25maWciOiLQndCw0LvQsNC00Ysg0Y3Qu9C10LrRgtGA0L7QvdC90LDQuSDQv9C+0YjRgtGLIiwiRXZlbnRPYmplY3RUeXBlcy5maWx0ZXIiOiLQpGnQu9GM0YLRgCIsIkV2ZW50T2JqZWN0VHlwZXMuaW1wb3J0IjoiSdC80L/QsNGA0YIiLCJFdmVudE9iamVjdFR5cGVzLml0ZW1Jc3N1ZSI6ItCi0Y3RgdGCLdGN0LvQtdC80LXQvdGCIiwiRXZlbnRPYmplY3RUeXBlcy5sYXVuY2giOiLQl9Cw0L/Rg9GB0LoiLCJFdmVudE9iamVjdFR5cGVzLnByb2plY3QiOiJwcm9qZWN0IiwiRXZlbnRPYmplY3RUeXBlcy50ZXN0SXRlbSI6ItCi0Y3RgdGCLdGN0LvQtdC80LXQvdGCIiwiRXZlbnRPYmplY3RUeXBlcy51c2VyIjoiS9Cw0YDRi9GB0YLQsNC70YzQvdGW0LoiLCJFdmVudE9iamVjdFR5cGVzLndpZGdldCI6ItCSadC00LbRjdGCIiwiRXZlbnRzR3JpZC5hY3Rpb25Db2wiOiLQlNC30LXRj9C90L3QtSIsIkV2ZW50c0dyaWQuY29udGFpbnMiOiJDb250YWlucyIsIkV2ZW50c0dyaWQubmV3VmFsdWVDb2wiOiLQndC+0LLQsNC1INC30L3QsNGH0Y3QvdC90LUiLCJFdmVudHNHcmlkLm9iamVjdE5hbWVDb2wiOiJJ0LzRjyDQsNCxJ9C10LrRgtCwIiwiRXZlbnRzR3JpZC5vYmplY3RUeXBlQ29sIjoi0KLRi9C/INCw0LEn0LXQutGC0LAiLCJFdmVudHNHcmlkLm9sZFZhbHVlQ29sIjoiQ9GC0LDRgNC+0LUg0LfQvdCw0YfRjdC90L3QtSIsIkV2ZW50c0dyaWQudGltZUNvbCI6ItCn0LDRgSIsIkV2ZW50c0dyaWQudXNlckNvbCI6IkvQsNGA0YvRgdGC0LDQu9GM0L3RltC6IiwiRXhwYW5kVG9nZ2xlci5oaWRlQ3JpdGVyaWEiOiLQodGF0LDQstCw0YbRjCDQutGA0YvRgtGN0YDRi9GWIiwiRXhwYW5kVG9nZ2xlci5zaG93Q3JpdGVyaWEiOiLQn9Cw0LrQsNC30LDRhtGMINC60YDRi9GC0Y3RgNGL0ZYiLCJFeHRlcm5hbFN5c3RlbXMuY3JldGVCVHMiOiLRgdC60LDQvdGE0ZbQs9GD0YDQsNCy0LDRniIsIkV4dGVybmFsU3lzdGVtcy5kZWxldGVCdHMiOiLQstGL0LTQsNC70ZbRniIsIkV4dGVybmFsU3lzdGVtcy5mcm9tUHJvamVjdCI6ItC3INC/0YDQsNC10LrRgtGDIiwiRXh0ZXJuYWxTeXN0ZW1zLnByb3BlcnRpZXMiOiLRg9C70LDRgdGG0ZbQstCw0YHRhtGWIiwiRXh0ZXJuYWxTeXN0ZW1zLnVwZGF0ZUJ0cyI6ItCw0LHQvdCw0LLRltGeIiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmNvcHlMaW5rIjoi0JrQsNC/0ZbRj9Cy0LDRhtGMINGB0L/QsNGB0YvQu9C60YMiLCJFeHRlcm5hbFVzZXJJbnZpdGF0aW9uTW9kYWwuZGVzY3JpcHRpb24iOiLQl9Cw0L/RgNCw0YHRltGG0Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0L3QsCDQv9GA0LDQtdC60YIiLCJFeHRlcm5hbFVzZXJJbnZpdGF0aW9uTW9kYWwuZW1haWwiOiLQl9Cw0L/RgNCw0YjRjdC90L3QtSDQsdGL0LvQviDQsNC00L/RgNCw0Z7Qu9C10L3QsCDQvdCwIiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmhlYWRlciI6ItCX0LDQv9GA0LDRgdGW0YbRjCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIkV4dGVybmFsVXNlckludml0YXRpb25Nb2RhbC5saW5rIjoi0KHQv9Cw0YHRi9C70LrQsCDQvdCwINC30LDQv9GA0LDRiNGN0L3QvdC1IiwiRmFpbGVkQ2FzZXNUcmVuZENoYXJ0LmZhaWxlZENhc2VzIjoi0L3Rj9Ge0LTQsNC70YvRjyDRgdGG0Y3QvdCw0YDRi9GWIiwiRmFpbGVkQ2FzZXNUcmVuZENvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiRmFpbGVkQ2FzZXNUcmVuZENvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIkZpbHRlci5hZGQiOiLQlNCw0LTQsNGG0Ywg0YTRltC70YzRgtGAIiwiRmlsdGVyLmRlc2NyaXB0aW9uUGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INCw0L/RltGB0LDQvdC90LUg0YTRltC70YzRgtGA0LAiLCJGaWx0ZXIuZWRpdCI6ItCg0Y3QtNCw0LPQsNCy0LDRhtGMINGE0ZbQu9GM0YLRgCIsIkZpbHRlci5uYW1lIjoi0J3QsNC30LLQsCIsIkZpbHRlci5uYW1lUGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INC90LDQt9Cy0YMg0YTRltC70YzRgtGA0LAiLCJGaWx0ZXJBZGQuYWRkVGl0bGUiOiJBZGQgbmV3IGZpbHRlciIsIkZpbHRlckVkaXQuZWRpdFRpdGxlIjoiRWRpdCBmaWx0ZXIiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkYXV0b21hdGlvbl9idWciOiJBdXRvbWF0aW9uIGJ1ZyIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZGVmZWN0cyRub19kZWZlY3QiOiJObyBkZWZlY3QiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkcHJvZHVjdF9idWciOiJQcm9kdWN0IGJ1ZyIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZGVmZWN0cyRzeXN0ZW1faXNzdWUiOiJTeXN0ZW0gaXNzdWUiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkdG9faW52ZXN0aWdhdGUiOiJUbyBpbnZlc3RpZ2F0ZSIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZXhlY3V0aW9ucyRmYWlsZWQiOiJGYWlsZWQiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkcGFzc2VkIjoiUGFzc2VkIiwiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRleGVjdXRpb25zJHNraXBwZWQiOiJTa2lwcGVkIiwiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRleGVjdXRpb25zJHRvdGFsIjoiVG90YWwiLCJGaWx0ZXJPcHRpb25zLkFCIjoi0J7QoiIsIkZpbHRlck9wdGlvbnMuUEIiOiLQlNCfIiwiRmlsdGVyT3B0aW9ucy5TSSI6ItCh0J4iLCJGaWx0ZXJPcHRpb25zLlRJIjoi0KLQkCIsIkZpbHRlck9wdGlvbnMuYW5kIjoi0KPQmtCb0K7Qp9CQ0K7Qp9CrIiwiRmlsdGVyT3B0aW9ucy5hdHRyaWJ1dGVLZXkiOiLQmtC70Y7Rh9GLINCw0YLRgNGL0LHRg9GC0LDRniIsIkZpbHRlck9wdGlvbnMuYXR0cmlidXRlVmFsdWUiOiLQl9C90LDRh9GN0L3QvdGWINCw0YLRgNGL0LHRg9GC0LDRniIsIkZpbHRlck9wdGlvbnMuY250Ijoi0LfQvNGP0YjRh9Cw0LUiLCJGaWx0ZXJPcHRpb25zLmRlc2NyaXB0aW9uIjoi0JDQv9GW0YHQsNC90L3QtSIsIkZpbHRlck9wdGlvbnMuZHluYW1pYyI6IijQtNGL0L3QsNC80ZbRh9C90LApIiwiRmlsdGVyT3B0aW9ucy5mYWlsZWQiOiLQndGP0Z7QtNCw0LvQsCIsIkZpbHRlck9wdGlvbnMuZnJvbSI6ItC3IiwiRmlsdGVyT3B0aW9ucy5oYXMiOiLQt9C80Y/RiNGH0LDQtSIsIkZpbHRlck9wdGlvbnMuaW4iOiLRkdGB0YbRjCDQu9GO0LHRiyDQtyIsIkZpbHRlck9wdGlvbnMubmFtZSI6ItCG0LzRjyDQt9Cw0L/Rg9GB0LrRgyIsIkZpbHRlck9wdGlvbnMubm90X2NudCI6ItC90LUg0Z7RgtGA0YvQvNC70ZbQstCw0LUiLCJGaWx0ZXJPcHRpb25zLm5vdF9oYXMiOiLQsdC10Lcg0LvRjtCx0L7Qs9CwINC3IiwiRmlsdGVyT3B0aW9ucy5ub3RfaW4iOiLQvdC1INGe0YLRgNGL0LzQu9GW0LLQsNC1IiwiRmlsdGVyT3B0aW9ucy5udW1iZXIiOiLQndGD0LzQsNGAINC30LDQv9GD0YHQutGDIiwiRmlsdGVyT3B0aW9ucy5wYXNzZWQiOiLQn9Cw0YHQv9GP0YXQvtCy0LAiLCJGaWx0ZXJPcHRpb25zLnNraXBwZWQiOiLQn9GA0LDQv9GD0YjRh9Cw0L3QsCIsIkZpbHRlck9wdGlvbnMuc29ydCI6ItGB0LDRgNGC0LDQstCw0YbRjCDQv9CwIiwiRmlsdGVyT3B0aW9ucy5zdGFydFRpbWUiOiLQp9Cw0YEg0L/QsNGH0LDRgtC60YMiLCJGaWx0ZXJPcHRpb25zLnRhZ3MiOiLQn9Cw0LfQvdCw0LrRliIsIkZpbHRlck9wdGlvbnMudG8iOiLQv9CwIiwiRmlsdGVyT3B0aW9ucy50b3RhbCI6ItCj0YHRj9Cz0L4iLCJGaWx0ZXJPcHRpb25zLnVzZXIiOiLQo9C70LDQtNCw0LvRjNC90ZbQuiIsIkZpbHRlclNvcnQuYXV0b0J1ZyI6IkF1dG8gQnVnIiwiRmlsdGVyU29ydC5mYWlsZWQiOiJGYWlsZWQiLCJGaWx0ZXJTb3J0LmxhdW5jaE5hbWUiOiJMYXVuY2ggbmFtZSIsIkZpbHRlclNvcnQucGFzc2VkIjoiUGFzc2VkIiwiRmlsdGVyU29ydC5wcm9kdWN0QnVnIjoiUHJvZHVjdCBCdWciLCJGaWx0ZXJTb3J0LnNraXBwZWQiOiJTa2lwcGVkIiwiRmlsdGVyU29ydC5zb3J0QnkiOiJTb3J0IGJ5IiwiRmlsdGVyU29ydC5zdGFydFRpbWUiOiJTdGFydCB0aW1lIiwiRmlsdGVyU29ydC5zeXN0ZW1Jc3N1ZSI6IlN5c3RlbSBJc3N1ZSIsIkZpbHRlclNvcnQudG9JbnZlc3RpZ2F0ZSI6IlRvIEludmVzdGlnYXRlIiwiRmlsdGVyU29ydC50b3RhbCI6IlRvdGFsIiwiRmlsdGVycy5yZWZpbmUiOiLQo9C00LDRgdC60LDQvdCw0LvRltGG0Yw6IiwiRmlsdGVycy5zaGFyZSI6ItCQ0L/Rg9Cx0LvRltC60LDQstCw0YbRjCIsIkZpbHRlcnNBY3Rpb25CYXIuc2hhcmVkRmlsdGVyIjoi0KTRltC70YzRgtGAINCw0L/Rg9Cx0LvRltC60LDQstCw0L3RiyIsIkZpbHRlcnNBY3Rpb25CYXIudW5zYXZlZEZpbHRlciI6ItCk0ZbQu9GM0YLRgCDQvdC1INC30LDRhdCw0LLQsNC90YsiLCJGaWx0ZXJzQWN0aW9uUGFuZWwuYWRkRmlsdGVyQnV0dG9uIjoi0JTQsNC00LDRhtGMINGE0ZbQu9GM0YLRgCIsIkZpbHRlcnNBY3Rpb25QYW5lbC5zZWFyY2hJbnB1dFBsYWNlaG9sZGVyIjoi0J/QvtGI0YPQuiDQv9CwINC90LDQt9Cy0LUiLCJGaWx0ZXJzQ29udHJvbC5pbnNlcnRGaWx0ZXJFcnJvciI6IkZpbHRlciBkb24ndCBjcmVhdGVkIiwiRmlsdGVyc0NvbnRyb2wuaW5zZXJ0RmlsdGVyU3VjY2VzcyI6IkZpbHRlciBoYXMgYmVlbiBjcmVhdGVkIiwiRmlsdGVyc0NvbnRyb2wubm90Rm91bmQiOidObyBmaWx0ZXJzIGZvdW5kIGZvciAie2ZpbHRlcn0iLicsIkZpbHRlcnNDb250cm9sLnVwZGF0ZUZpbHRlckVycm9yIjoiRmlsdGVyIGRvbid0IHVwZGF0ZWQiLCJGaWx0ZXJzQ29udHJvbC51cGRhdGVGaWx0ZXJTdWNjZXNzIjoiRmlsdGVyIGhhcyBiZWVuIHVwZGF0ZWQiLCJGaWx0ZXJzUGFnZS5hZGRGaWx0ZXIiOiLQlNCw0LTQsNGG0Ywg0YTRltC70YzRgtGAIiwiRmlsdGVyc1BhZ2UuZmlsdGVyTmFtZUxlbmd0aCI6ItCd0LDQt9Cy0LAg0YTRltC70YzRgtGA0LAg0L/QsNCy0ZbQvdC90LAg0LHRi9GG0Ywg0LTQsNGe0LbRi9C90ZHQuSDQsNC0IDMg0LTQsCAxMjgg0LfQvdCw0LrQsNGeLiIsIkZpbHRlcnNQYWdlLm1zZ0Zhdm9yaXRlRmlsdGVycyI6ItCk0ZbQu9GM0YLRgNGLIC0g0L/QvtGI0YPQutCw0LLRi9GPINC30LDQv9GL0YLRiywg0Y/QutGW0Y8g0LHRi9C70ZYg0Z7Qv9Cw0LTQsNCx0LDQvdGLINC00LvRjyDQv9Cw0Z7RgtC+0YDQvdCw0LPQsCDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8uIiwiRmlsdGVyc1BhZ2Uubm90Rm91bmQiOiJObyBmaWx0ZXJzIGZvdW5kIGZvciAne2ZpbHRlcn0nIiwiRmlsdGVyc1BhZ2Uuc2VhcmNoQnlOYW1lIjoi0J/QvtGI0YPQuiDQv9CwINC90LDQt9Cy0LUiLCJGaWx0ZXJzUGFnZS5zaGFyZUZpbHRlciI6ItCQ0LPRg9C70YzQvdGLINGE0ZbQu9GM0YLRgCIsIkZpbHRlcnNQYWdlLnRpdGxlIjoi0KTRltC70YzRgtGA0YsiLCJGaWx0ZXJzV3JhcHBlci5jaG9vc2VGaWx0ZXIiOiLQktGL0LHQtdGA0YvRhtC1INGE0ZbQu9GM0YLRgCDQtyDRgdC/0ZbRgdGDINC90ZbQttGN0LkiLCJGbGFreVRlc3RDYXNlc1RhYmxlQ29udHJvbHMuSW5jbHVkZU1ldGhvZHNDb250cm9sVGV4dCI6IkluY2x1ZGUgQmVmb3JlIGFuZCBBZnRlciBtZXRob2RzIiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6IkxhdW5jaGVzIGNvdW50IiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAyIHRvIDE1MCIsIkZsYWt5VGVzdENhc2VzVGFibGVDb250cm9scy5MYXVuY2hOYW1lRmllbGRMYWJlbCI6IkxhdW5jaCBuYW1lIiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVGb2N1c1BsYWNlaG9sZGVyIjoiQXQgbGVhc3QgMyBzeW1ib2xzIHJlcXVpcmVkLiIsIkZsYWt5VGVzdENhc2VzVGFibGVDb250cm9scy5MYXVuY2hOYW1lTm9NYXRjaGVzIjoiTm8gbWF0Y2hlcyBmb3VuZC4iLCJGbGFreVRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgbGF1bmNoIG5hbWUiLCJGbGFreVRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZXNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJGbGFreVRlc3RzLnRhYmxlLmhlYWRlci5sYXN0U3dpdGNoIjoi0JDQv9C+0YjQvdGP0Y8g0LfQvNC10L3QsCIsIkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLm9mU3dpdGNoZXMiOiIlINC30LzQtdC9IiwiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIub2ZTd2l0Y2hlc1Nob3J0IjoiJSDQt9C80LXQvSIsIkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLnN3aXRjaGVzIjoi0LfQvNC10L3QsCIsIkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLnN3aXRjaGVzU2hvcnQiOiLQt9C80LXQvdCwIiwiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIudGVzdENhc2UiOiLQotGN0YHRgtCw0LLRiyDRgdGG0Y3QvdCw0YAiLCJGb290ZXIuYnVpbGQiOiLQl9Cx0L7RgNC60LAiLCJGb290ZXIuY29udGFjdCI6ItCX0LLRj9C20YvRhtC10YHRjyDQtyDQvdCw0LzRliIsIkZvb3Rlci5jb3B5cmlnaHQiOiLQo9GB0LUg0L/RgNCw0LLRiyDQsNCx0LDRgNC+0L3QtdC90YsuIiwiRm9vdGVyLmRvY3VtZW50YXRpb24iOiLQlNCw0LrRg9C80LXQvdGC0LDRhtGL0Y8iLCJGb290ZXIuZ2l0Ijoi0JzRiyDQvdCwIEdpdEh1YiIsIkZvb3Rlci5zbGFjayI6ItCf0LDRgNCw0LfQvNCw0Z7Qu9GP0LXQvCDRgyBTbGFjayIsIkZvcmNlVXBkYXRlTW9kYWwuYWRkaXRpb25hbFRleHQiOiLQmtCw0LvRliDQu9Cw0YHQutCwLCDQsNGe0YLQsNGA0YvQt9GD0LnRhtC10YHRjyDQt9C90L7RntC60YMsINC60LDQsSDQv9GA0YvQvNGP0L3RltGG0Ywg0LfQvNC10L3RiyEiLCJGb3JjZVVwZGF0ZU1vZGFsLmhlYWRlciI6ItCj0LLQsNCz0LAhIiwiRm9yY2VVcGRhdGVNb2RhbC5yZWxvZ2luIjoi0JDRntGC0LDRgNGL0LfRg9C50YbQtdGB0Y8g0LfQvdC+0Z7QutGDIiwiRm9yY2VVcGRhdGVNb2RhbC50ZXh0Ijoi0JDQsdC90LDRntC70LXQvdC90LUg0LTQsNC00LfQtdC90YvRhSDQtyB7YWNjb3VudH06INGW0L3RhNCw0YDQvNCw0YbRi9GPINC00LvRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCAne3VzZXJ9JyDQv9Cw0YHQv9GP0YXQvtCy0LAg0YHRltC90YXRgNCw0L3RltC30LDQstCw0L3QsC4iLCJGb3Jnb3RQYXNzd29yZEJsb2NrLmVudGVyRW1haWwiOiLQo9Cy0Y/QtNC30ZbRhtC1INCw0LTRgNCw0YEg0LLQsNGI0LDQuSDRjdC70LXQutGC0YDQvtC90L3QsNC5INGB0LrRgNGL0L3Rliwg0LrQsNCxINCw0LTQvdCw0LLRltGG0Ywg0Y/Qs9C+IiwiRm9yZ290UGFzc3dvcmRCbG9jay5mb3Jnb3RQYXNzIjoi0JfQsNCx0YvQu9GWINC/0LDRgNC+0LvRjD8iLCJGb3Jnb3RQYXNzd29yZEZvcm0uY2FuY2VsIjoi0JDQtNC80Y/QvdGW0YbRjCIsIkZvcmdvdFBhc3N3b3JkRm9ybS5lbWFpbFBsYWNlaG9sZGVyIjoi0KPQstGP0LTQt9GW0YbQtSDRjdC70LXQutGC0YDQvtC90L3RiyDQsNC00YDQsNGBIiwiRm9yZ290UGFzc3dvcmRGb3JtLmVycm9yU2VuZEVtYWlsIjoi0JrQsNGA0YvRgdGC0LDQu9GM0L3RltC6INC3INGD0LLQtdC00LfQtdC90YvQvCDRjdC70LXQutGC0YDQvtC90L3Ri9C8INCw0LTRgNCw0YHQsNC8INC90LUg0LfQvdC+0LnQtNC30LXQvdGLIiwiRm9yZ290UGFzc3dvcmRGb3JtLnNlbmRFbWFpbCI6ItCQ0LTQsNGB0LvQsNGG0Ywg0LvRltGB0YIiLCJGb3Jnb3RQYXNzd29yZEZvcm0uc3VjY2Vzc1NlbmRFbWFpbCI6ItCG0L3RgdGC0YDRg9C60YbRi9GWINC/0LAg0LDQtNC90LDRntC70LXQvdC90ZYg0L/QsNGA0L7Qu9GPINC00LDRgdC70LDQvdGLINC90LAg0Y3Qu9C10LrRgtGA0L7QvdC90Ysg0LDQtNGA0LDRgSB7ZW1haWx9IiwiR2VuZXJhbEluZm8ubGF1bmNoZXNQZXJXZWVrIjoi0YHRj9GA0Y3QtNC90Y/RjyDQutC+0LvRjNC60LDRgdGG0Ywg0LfQsNC/0YPRgdC60LDRniDQvdCwINGC0YvQtNC30LXQvdGMIiwiR2VuZXJhbEluZm8ubGF1bmNoZXNRdWFudGl0eSI6ItC30LDQv9GD0YHQuijQsC/QsNGeKSIsIkdlbmVyYWxJbmZvLnVuaXF1ZVRpY2tldHMiOiLQsNC00L/RgNCw0Z7Qu9C10L3QsCDRntC90ZbQutCw0LvRjNC90LDRjyDQv9Cw0LzRi9C70LrQsCIsIkdlbmVyYWxJbmZvLnVzZXJzUXVhbnRpdHkiOiLRg9C00LfQtdC70YzQvdGW0Loo0LAv0LDRnikiLCJHZW5lcmFsVGFiLmRheTEiOiIxINC00LfQtdC90YwiLCJHZW5lcmFsVGFiLmZvcmV2ZXIiOiLQl9Cw0Z7RgdGR0LTRiyIsIkdlbmVyYWxUYWIuaG91cjEiOiIxINCz0LDQtNC30ZbQvdGDIiwiR2VuZXJhbFRhYi5ob3VyMTIiOiIxMiDQs9Cw0LTQt9GW0L0iLCJHZW5lcmFsVGFiLmhvdXIzIjoiMyDQs9Cw0LTQt9GW0L3RiyIsIkdlbmVyYWxUYWIuaG91cjYiOiI2INCz0LDQtNC30ZbQvSIsIkdlbmVyYWxUYWIuaW50ZXJydXB0ZWRKb2IiOiLQp9Cw0YEg0LHRj9C30LTQt9C10LnQvdCw0YHRhtGWINC30LDQv9GD0YHQutGDIiwiR2VuZXJhbFRhYi5pbnRlcnJ1cHRlZEpvYkRlc2NyaXB0aW9uIjoi0J3QsNC30L3QsNGH0YbQtSDQv9GA0LDRhtC+0Z7QvdGLINGH0LDRgSwg0LrQsNCxINC/0LXRgNCw0L/Ri9C90ZbRhtGMINC90LXQsNC60YLRi9Ge0L3Ri9GPINC30LDQv9GD0YHQutGWIiwiR2VuZXJhbFRhYi5rZWVwTGF1bmNoZXMiOiLQl9Cw0YXQvtGe0LLQsNGG0Ywg0LfQsNC/0YPRgdC60ZYiLCJHZW5lcmFsVGFiLmtlZXBMYXVuY2hlc0Rlc2NyaXB0aW9uIjoi0K/QuiDQtNC+0Z7Qs9CwINC30LDRhdC+0Z7QstCw0YbRjCDRgdGC0LDRgNGL0Y8g0LfQsNC/0YPRgdC60ZYuINCX0LDQv9GD0YHQuiDRliDRntGB0LUg0Y/Qs9C+INC90LDRiNGH0LDQtNC60ZYgKNC90LDQsdC+0YDRiywg0YLRjdGB0YLRiywg0LrRgNC+0LrRliwg0LvQvtCz0ZYpINCx0YPQtNGD0YbRjCDQstGL0LTQsNC70LXQvdGLLiDQl9Cw0L/Rg9GB0Log0LHRg9C00LfQtSDQstGL0LTQsNC70LXQvdGLINC3INGE0ZbQu9GM0YLRgNCw0Z4g0ZYg0LLRltC00LbRjdGC0LDRniIsIkdlbmVyYWxUYWIua2VlcExvZ3MiOiLQl9Cw0YXQvtGe0LLQsNGG0Ywg0LfQsNC/0ZbRgdGLINGeINGH0LDRgdC+0L/RltGB0LUiLCJHZW5lcmFsVGFiLmtlZXBMb2dzRGVzY3JpcHRpb24iOiLQmtC+0LvRjNC60ZYg0YfQsNGB0YMg0LfQsNGF0L7RntCy0LDRhtGMINGB0YLQsNGA0YvRjyDQt9Cw0L/RltGB0Ysg0YfQsNGB0L7Qv9GW0YHQsCDRniDQt9Cw0L/Rg9GB0LrQsNGFLiDQkNC00L/QsNCy0LXQtNC90YvRjyDQt9Cw0L/Rg9GB0LrRliDQsdGD0LTRg9GG0Ywg0LfQsNGF0L7RntCy0LDRhtGG0LAsINC60LDQsSDQvdC1INGB0YLRgNCw0YbRltGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMiLCJHZW5lcmFsVGFiLmtlZXBTY3JlZW5zaG90cyI6ItCX0LDRhdC+0Z7QstCw0YbRjCDRgdC60YDRi9C90YjQvtGC0YsiLCJHZW5lcmFsVGFiLmtlZXBTY3JlZW5zaG90c0Rlc2NyaXB0aW9uIjoi0JrQvtC70YzQutGWINGH0LDRgdGDINC30LDRhdC+0Z7QstCw0YbRjCDRgdC60YDRi9C90YjQvtGC0Ysg0Z4g0YHRltGB0YLRjdC80LUiLCJHZW5lcmFsVGFiLm1vbnRoMSI6IjEg0LzQtdGB0Y/RhiIsIkdlbmVyYWxUYWIubW9udGgzIjoiMyDQvNC10YHRj9GG0LAiLCJHZW5lcmFsVGFiLm1vbnRoNiI6IjYg0LzQtdGB0Y/RhtCw0Z4iLCJHZW5lcmFsVGFiLnByb2plY3ROYW1lTGFiZWwiOiLQhtC80Y8iLCJHZW5lcmFsVGFiLnVwZGF0ZUVycm9yTm90aWZpY2F0aW9uIjoi0J3QtSDRntC00LDQu9C+0YHRjyDQsNCx0L3QsNCy0ZbRhtGMINC90LDQu9Cw0LTRiyDQv9GA0LDQtdC60YLQsCIsIkdlbmVyYWxUYWIudXBkYXRlU3VjY2Vzc05vdGlmaWNhdGlvbiI6ItCd0LDQu9Cw0LTRiyDQv9GA0LDQtdC60YLQsCDQv9Cw0YHQv9GP0YXQvtCy0LAg0LDQsdC90L7RntC70LXQvdGLIiwiR2VuZXJhbFRhYi53ZWVrMSI6IjEg0YLRi9C00LfQtdC90YwiLCJHZW5lcmFsVGFiLndlZWsyIjoiMiDRgtGL0LTQvdGPIiwiR2VuZXJhbFRhYi53ZWVrMyI6IjMg0YLRi9C00L3RjyIsIkdlbmVyYXRlSW5kZXhNb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSI6ItCS0Ysg0Z7Qv9GN0Z7QvdC10L3Riywg0YjRgtC+INC20LDQtNCw0LXRhtC1INC30L3QvtGeINC30LPQtdC90LXRgNCw0LLQsNGG0Ywg0ZbQvdC00Y3QutGBINGeIEVsYXN0aWNTZWFyY2g/IiwiR2VuZXJhdGVJbmRleE1vZGFsLmdlbmVyYXRlQnV0dG9uVGV4dCI6ItCX0LPQtdC90LXRgNCw0LLQsNGG0YwiLCJHZW5lcmF0ZUluZGV4TW9kYWwuZ2VuZXJhdGVFcnJvck5vdGlmaWNhdGlvbiI6IkluZGV4IGdlbmVyYXRpb24gd2FzIGNhbmNlbGVkIiwiR2VuZXJhdGVJbmRleE1vZGFsLmdlbmVyYXRlU3VjY2Vzc05vdGlmaWNhdGlvbiI6ItCT0LXQvdC10YDQsNGG0YvRjyDRltC90LTRjdC60YHQsCDQv9Cw0YfQsNC70LDRgdGPIiwiR2VuZXJhdGVJbmRleE1vZGFsLmhlYWRlckdlbmVyYXRlSW5kZXhNb2RhbCI6ItCX0LPQtdC90LXRgNCw0LLQsNGG0Ywg0ZbQvdC00LXQutGBIiwiR2VuZXJhdGVJbmRleE1vZGFsLm5vdGVCbG9ja1RleHQiOiLQn9CwINC30LDQutCw0L3Rh9GN0L3QvdGWINC/0YDQsNGG0Y3RgdGDINCS0Ysg0LDRgtGA0YvQvNCw0LXRhtC1INC70ZbRgdGCINC/0LAg0Y3Qu9C10LrRgtGA0L7QvdC90LDQuSDQv9C+0YjRhtC1LiIsIkdlbmVyYXRlSW5kZXhNb2RhbC5ub3RlQmxvY2tUaXRsZSI6ItCU0LAg0LLQtdC00LDQvNCwOiIsIkdpdGh1YkF1dGhGb3JtLmZvcm1IZWFkZXIiOiJHaXRodWIiLCJHaXRodWJBdXRoRm9ybS5zd2l0Y2hlckxhYmVsIjoi0JDRntGC0LDRgNGL0LfQsNGG0YvRjyDRniBHaXRIdWIiLCJHaXRodWJBdXRoRm9ybUZpZWxkcy5jbGllbnRJZExhYmVsIjoiQ2xpZW50IElEIiwiR2l0aHViQXV0aEZvcm1GaWVsZHMuY2xpZW50U2VjcmV0TGFiZWwiOiJDbGllbnQgc2VjcmV0IiwiSGFtYnVyZ2VyLmFuYWx5c2lzIjoi0JDQvdCw0LvRltC30LDQstCw0YbRjCIsIkhhbWJ1cmdlci5kZWxldGUiOiLQktGL0LTQsNC70LjRhtGMIiwiSGFtYnVyZ2VyLmV4cG9ydCI6ItCt0LrRgdC/0LDRgNGC0LDQstCw0YbRjDoiLCJIYW1idXJnZXIuZm9yY2VGaW5pc2giOiLQodC60L7QvdGH0YvRhtGMINC/0YDRi9C80YPRgdC+0LLQsCIsIkhhbWJ1cmdlci5sYXVuY2hGaW5pc2hlZCI6ItCX0LDQv9GD0YHQuiDRntC20L4g0LfQsNCy0LXRgNGI0LDQvdGLIiwiSGFtYnVyZ2VyLmxhdW5jaEluUHJvZ3Jlc3MiOiLQl9Cw0L/Rg9GB0Log0L3QtSDQv9Cw0LLRltC90LXQvSDQsdGL0YbRjCDRgyDRgdGC0LDQvdC1INCOINCf0KDQkNCm0K3QodCVISIsIkhhbWJ1cmdlci5ub1Blcm1pc3Npb25zIjoi0JLRiyDQvdC1INC3J9GP0Z7Qu9GP0LXRhtC10YHRjyDRg9C70LDQtNCw0LvRjNC90ZbQutCw0Lwg0LfQsNC/0YPRgdC60YMiLCJIYW1idXJnZXIubm90WW91ckxhdW5jaCI6ItCS0Ysg0L3QtSDQtyfRj9Ge0LvRj9C10YbQtdGB0Y8g0YPQu9Cw0LTQsNC70YzQvdGW0LrQsNC8INC30LDQv9GD0YHQutGDIiwiSGFtYnVyZ2VyLnRvQWxsTGF1bmNoZXMiOiJB0LTQv9GA0LDQstGW0YbRjCDQstCwINGD0YHQtSDQt9Cw0L/Rg9GB0LoiLCJIYW1idXJnZXIudG9EZWJ1ZyI6IkHQtNC/0YDQsNCy0ZbRhtGMINGeINCw0LTQu9Cw0LTQutGDIiwiSGlzdG9yeUZpbHRlcnNCbG9jay5kZXB0aEZpbHRlclRpdGxlIjoi0JPQu9GL0LHRltC90Y8g0LPRltGB0YLQvtGA0YvRliIsIkhpc3RvcnlJdGVtLmVtcHR5SXRlbUNhcHRpb24iOiLQrdC70LXQvNC10L3RgiDQv9GD0YHRgtGLIiwiSGlzdG9yeUl0ZW0ubm9JdGVtQ2FwdGlvbiI6ItCd0Y/QvNCwINGN0LvQtdC80LXQvdGC0LDRnjxici8+0YMg0LfQsNC/0YPRgdC60YMiLCJIaXN0b3J5SXRlbS5zYW1lSXRlbXNDYXB0aW9uIjoi0IbRgdC90YPQtSDQvdC10LrQsNC70YzQutGWINGN0LvQtdC80LXQvdGC0LDRniDQtyDQsNC00L3QvtC70YzQutCw0LLRi9C8INC30L3QsNGH0Y3QvdC90LXQvCBVSUQuIiwiSGlzdG9yeUxpbmVJdGVtQ29udGVudC5sYXVuY2hGYWlsZWQiOiLQndGP0Z7QtNCw0LvQsCIsIkhpc3RvcnlMaW5lSXRlbUNvbnRlbnQubGF1bmNoSW5Qcm9ncmVzcyI6ItCjINC/0YDQsNCz0YDRjdGB0LUiLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaEludGVycnVwdGVkIjoi0J/QtdGA0LDQv9GL0L3QtdC90LAiLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaE5vdEZvdW5kIjoi0J3Rj9C80LAg0Y3Qu9C10LzQtdC90YLQsNGeINGDINC30LDQv9GD0YHQutGDIiwiSGlzdG9yeUxpbmVJdGVtQ29udGVudC5sYXVuY2hQYXNzZWQiOiLQn9Cw0YHQv9GP0YXQvtCy0LAiLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaFJlc2V0ZWQiOiLQrdC70LXQvNC10L3RgiDQv9GD0YHRgtGLIiwiSGlzdG9yeUxpbmVJdGVtQ29udGVudC5sYXVuY2hTYW1lSXRlbXMiOiLQhtGB0L3Rg9C1INC90LXQutCw0LvRjNC60ZYg0Y3Qu9C10LzQtdC90YLQsNGeINC3INCw0LTQvdC+0LvRjNC60LDQstGL0Lwg0LfQvdCw0YfRjdC90L3QtdC8IFVJRC4iLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaFNraXBwZWQiOiLQn9GA0LDQv9GD0YjRh9Cw0L3QsCIsIkhpc3RvcnlUYWJsZS5pdGVtTmFtZXNIZWFkZXJUaXRsZSI6ItCG0LzRjyIsIkhpc3RvcnlUYWJsZS5sYXVuY2hOdW1iZXJUaXRsZSI6ItCX0LDQv9GD0YHQuiDihJYiLCJIaXN0b3J5VGFibGUubG9hZEhpc3RvcnlFcnJvck5vdGlmaWNhdGlvbiI6ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LfQsNCz0YDRg9C30ZbRhtGMINCz0ZbRgdGC0L7RgNGL0Y4g0LTQu9GPINCx0Y/Qs9GD0YfQsNCz0LAg0Y3Qu9C10LzQtdC90YLQsCIsIkhpc3RvcnlUYWJsZS5sb2FkSXRlbUluZm9FcnJvck5vdGlmaWNhdGlvbiI6ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LfQsNCz0YDRg9C30ZbRhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINC00LvRjyDRjdC70LXQvNC10L3RgtCwIiwiSGlzdG9yeVRhYmxlLmxvYWRNb3JlSGlzdG9yeUl0ZW1zVGl0bGUiOiLQn9GB0YLRgNGL0LrQvdGW0YbQtSDRgtGD0YIsINC60LDQsSDQt9Cw0LPRgNGD0LfRltGG0Ywg0LHQvtC70YzRiCDRjdC70LXQvNC10L3RgtCw0Z4iLCJJZ25vcmVJbkFBTW9kYWwuaWdub3JlQnV0dG9uIjoiSWdub3JlIiwiSWdub3JlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlIjoiSXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IGlnbm9yZWQgaW4gQXV0by1BbmFseXNpcyIsIklnbm9yZUluQUFNb2RhbC5zdWNjZXNzTWVzc2FnZU11bHRpcGxlIjoiSXRlbXMgd2VyZSBzdWNjZXNzZnVsbHkgaWdub3JlZCBpbiBBdXRvLUFuYWx5c2lzIiwiSWdub3JlSW5BQU1vZGFsLnRleHQiOiJBcmUgeW91IHN1cmUgdG8gaWdub3JlIGl0ZW0gJzxiPntuYW1lfTwvYj4nIGluIEF1dG8tQW5hbHlzaXM/IiwiSWdub3JlSW5BQU1vZGFsLnRleHRNdWx0aXBsZSI6IkFyZSB5b3Ugc3VyZSB0byBpZ25vcmUgaXRlbXMgaW4gQXV0by1BbmFseXNpcz8iLCJJZ25vcmVJbkFBTW9kYWwudGl0bGUiOiJJZ25vcmUgaXRlbSBpbiBhdXRvLWFuYWx5c2lzIiwiSWdub3JlSW5BQU1vZGFsLnRpdGxlTXVsdGlwbGUiOiJJZ25vcmUgaXRlbXMgaW4gYXV0by1hbmFseXNpcyIsIkluY2x1ZGVJbkFBTW9kYWwuaW5jbHVkZUJ1dHRvbiI6IkluY2x1ZGUiLCJJbmNsdWRlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlIjoiSXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IGluY2x1ZGVkIGluIEF1dG8tQW5hbHlzaXMiLCJJbmNsdWRlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlTXVsdGlwbGUiOiJJdGVtcyB3ZXJlIHN1Y2Nlc3NmdWxseSBpbmNsdWRlZCBpbiBBdXRvLUFuYWx5c2lzIiwiSW5jbHVkZUluQUFNb2RhbC50ZXh0IjoiQXJlIHlvdSBzdXJlIHRvIGluY2x1ZGUgaXRlbSAnPGI+e25hbWV9PC9iPicgaW4gQXV0by1BbmFseXNpcz8iLCJJbmNsdWRlSW5BQU1vZGFsLnRleHRNdWx0aXBsZSI6IkFyZSB5b3Ugc3VyZSB0byBpbmNsdWRlIGl0ZW1zIGluIEF1dG8tQW5hbHlzaXM/IiwiSW5jbHVkZUluQUFNb2RhbC50aXRsZSI6IkluY2x1ZGUgaXRlbSBpbiBhdXRvLWFuYWx5c2lzIiwiSW5jbHVkZUluQUFNb2RhbC50aXRsZU11bHRpcGxlIjoiSW5jbHVkZSBpdGVtcyBpbiBhdXRvLWFuYWx5c2lzIiwiSW5kZXhBY3Rpb25zQmxvY2suYW5hbHl6ZXJEaXNhYmxlZEJ1dHRvblRpdGxlIjoiU2VydmljZSBBTkFMWVpFUiBpcyBub3QgcnVubmluZyIsIkluZGV4QWN0aW9uc0Jsb2NrLmdlbmVyYXRlSW5kZXhCdXR0b25DYXB0aW9uIjoi0JfQs9C10L3QtdGA0LDQstCw0YbRjCDRltC90LTRjdC60YEiLCJJbmRleEFjdGlvbnNCbG9jay5nZW5lcmF0ZUluZGV4QnV0dG9uUHJvZ3Jlc3NDYXB0aW9uIjoi0KMg0L/RgNCw0LPRgNGN0YHQtS4uLiIsIkluZGV4QWN0aW9uc0Jsb2NrLmdlbmVyYXRlSW5kZXhEZXNjcmlwdGlvbiI6ItCj0YHRjyDRltC90YTQsNGA0LzQsNGG0YvRjyDQsdGD0LTQt9C1INCy0YvQtNCw0LvQtdC90LAg0LcgRWxhc3RpY1NlYXJjaCDRliDQt9Cz0LXQvdGN0YDQsNCy0LDQvdCwINC30L3QvtGeLCDQvdCwINC/0LDQtNGB0YLQsNCy0LUg0L/RgNCw0LDQvdCw0LvRltC30LDQstCw0L3Ri9GFINC00LDQtNC30LXQvdGL0YUg0L3QsCDQktCw0YjRi9C8INC/0YDQsNC10LrRhtC1INC3INGD0LvRltC60LDQvCDQtNC30LXRjtGH0YvRhSDQvdCw0LvQsNC0INCQ0Z7RgtCwLdCQ0L3QsNC70ZbQt9GDLiDQktGLINC30LzQvtC20LDRhtC1INC30LDQv9GD0YHRhtGW0YbRjCDQkNGe0YLQsC3QkNC90LDQu9GW0Lcg0L/QsNGB0LvRjyDQt9Cw0LrQsNC90YfRjdC90L3RjyDQv9GA0LDRhtGN0YHRgywg0LDQsSDRj9C60ZbQvCDQsdGD0LTQt9C10YbQtSDQsNC/0LDQstC10YjRh9Cw0L3RiyDQu9GW0YHRgtC+0Lwg0L/QsCDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGG0LUiLCJJbmRleEFjdGlvbnNCbG9jay5yZW1vdmVJbmRleEJ1dHRvbkNhcHRpb24iOiLQktGL0LTQsNC70ZbRhtGMINGW0L3QtNGN0LrRgSIsIkluZGV4QWN0aW9uc0Jsb2NrLnJlbW92ZUluZGV4RGVzY3JpcHRpb24iOiLQo9GB0Y8g0ZbQvdGE0LDRgNC80LDRhtGL0Y8g0LHRg9C00LfQtSDQstGL0LTQsNC70LXQvdCwINC3IEVsYXN0aWNTZWFyY2guINCU0LvRjyDQs9C10L3QtdGA0LDRhtGL0ZYg0LTQsNC00LfQtdC90YvRhSDQt9C90L7RniDQktGLINC80L7QttCw0YbQtSDQv9Cw0YfQsNGG0Ywg0LDQvdCw0LvRltC30LDQstCw0YbRjCDRgtGN0YHRgtCw0LLRi9GPINCy0YvQvdGW0LrRliDRntGA0YPRh9C90YPRjiwg0LDQsdC+INC30LPQtdC90LXRgNCw0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQsNGe0YLQsNC80LDRgtGL0YfQvdCwIiwiSW5kZXhBY3Rpb25zQmxvY2sudGl0bGUiOiLQlNC10Y/QvdC90ZYg0Lcg0ZbQvdC00LXQutGB0LDQvCIsIkluZm9MaW5lLmR1cmF0aW9uIjoi0J/RgNCw0YbRj9Cz0LvQsNGB0YbRjCIsIkluZm9MaW5lLnBhc3NlZCI6ItCf0LDRgdC/0Y/RhdC+0LLRiyB7dmFsdWV9JSIsIkluZm9MaW5lLnRvdGFsIjoi0KPRgdGP0LPQviB7dmFsdWV9IiwiSW5wdXRDb25kaXRpb25hbFRhZ3MudGFnc0hpbnQiOiLQmtCw0LvRliDQu9Cw0YHQutCwLCDRg9Cy0Y/QtNC30ZbRhtC1IDEg0YbRliDQsdC+0LvQtdC5INC30L3QsNC60LDRniIsIklucHV0RmlsdGVyVG9vbGJhci5hcHBseSI6ItCf0YDRi9C80Y/QvdGW0YbRjCIsIklucHV0RmlsdGVyVG9vbGJhci5jbGVhckFsbGZpbHRlcnMiOiLQkNGH0YvRgdGG0ZbRhtGMINGe0YHQtSDRhNGW0LvRjNGC0YDRiyIsIklucHV0VGFnc1NlYXJjaC5keW5hbWljU2VhcmNoUHJvbXB0VGV4dCI6ItCa0LDQu9GWINC70LDRgdC60LAg0YPQstGP0LTQt9GW0YbQtSB7bGVuZ3RofSDQsNCx0L4g0LHQvtC70YzRiCDRgdGW0LzQstCw0LvQsNGeIiwiSW5wdXRUYWdzU2VhcmNoLm5ldyI6ItCd0L7QstGLIiwiSW5wdXRUaW1lRGF0ZVJhbmdlLmN1c3RvbVJhbmdlIjoi0JfQsCDQsNCx0YDQsNC90Ysg0L/QtdGA0YvRj9C0IiwiSW5wdXRUaW1lRGF0ZVJhbmdlLmR5bmFtaWNVcGRhdGUiOiLQlNGL0L3QsNC80ZbRh9C90LDQtSDQsNCx0L3QsNGe0LvQtdC90L3QtSIsIklucHV0VGltZURhdGVSYW5nZS5keW5hbWljVXBkYXRlSGludCI6ItCS0LDRiCDQtNGL0Y/Qv9Cw0LfQvtC9INGH0LDRgdGDINCx0YPQtNC30LUg0LDQsdC90LDRntC70Y/RhtGG0LAg0LrQvtC20L3RiyDQtNC30LXQvdGMIiwiSW5wdXRUaW1lRGF0ZVJhbmdlLmZyb20iOiLQkNC0IiwiSW5wdXRUaW1lRGF0ZVJhbmdlLnRpbWUiOiLQp9Cw0YEiLCJJbnB1dFRpbWVEYXRlUmFuZ2UudG8iOiLQlNCwIiwiSW5wdXRVc2VyU2VhcmNoLmludml0ZU5ld1VzZXIiOiLQl9Cw0L/RgNCw0YHRltGG0Ywge3VzZXJFbWFpbH0iLCJJbnB1dFVzZXJTZWFyY2guaW52aXRlTmV3VXNlckluZm8iOiLQkNC00L/RgNCw0LLRltGG0Ywg0LfQsNC/0YDQsNGI0Y3QvdC90LUg0L3QsCDQs9GN0YLRiyDQsNC00YDQsNGBIiwiSW5wdXRVc2VyU2VhcmNoLm5vUmVzdWx0cyI6ItCd0ZbRh9C+0LPQsCDQvdC1INC30L3QvtC50LTQt9C10L3QsCIsIklucHV0VXNlclNlYXJjaC5wbGFjZWhvbGRlciI6ItCa0LDQu9GWINC70LDRgdC60LAg0YPQstGP0LTQt9GW0YbQtSAxINCw0LHQviDQsdC+0LvRjNGIINGB0ZbQvNCy0LDQu9Cw0Z4iLCJJbnB1dFVzZXJTZWFyY2guc2VhcmNoaW5nIjoi0J/QvtGI0YPQui4uLiIsIkludGVncmF0aW9uc0xpc3QuYnRzIjoiQnVnIFRyYWNraW5nIFN5c3RlbXMiLCJJbnRlZ3JhdGlvbnNMaXN0Lm5vdGlmaWNhdGlvbiI6Ik5vdGlmaWNhdGlvbnMiLCJJbnZlc3RpZ2F0ZWRQZXJjZW50YWdlT2ZMYXVuY2hlc0NvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiSW52ZXN0aWdhdGVkUGVyY2VudGFnZU9mTGF1bmNoZXNDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJJbnZpdGVVc2VyTW9kYWwuZGVzY3JpcHRpb24iOiLQl9Cw0L/RgNCw0YHRltGG0Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0L3QsCDQv9GA0LDQtdC60YIiLCJJbnZpdGVVc2VyTW9kYWwuZW1haWxMYWJlbCI6ItCb0LDQs9GW0L0g0LDQsdC+INGN0LvQtdC60YLRgNC+0L3QvdCw0Y8g0L/QvtGI0YLQsCIsIkludml0ZVVzZXJNb2RhbC5oZWFkZXJJbnZpdGVVc2VyTW9kYWwiOiLQl9Cw0L/RgNCw0YHRltGG0Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAiLCJJbnZpdGVVc2VyTW9kYWwuaW5wdXRQbGFjZWhvbGRlciI6ItCa0LDQu9GWINC70LDRgdC60LAsINGD0LLRj9C00LfRltGG0LUg0LvQsNCz0ZbQvSDQsNCx0L4g0LDQtNGA0LDRgSDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGC0YsiLCJJbnZpdGVVc2VyTW9kYWwucm9sZSI6ItCf0YDQsNC10LrRgtC90LDRjyDRgNC+0LvRjiIsIkl0ZW1JbmZvLlJldHJ5VG9vbHRpcCI6IkxhdW5jaCBoYXMgdGVzdCBpdGVtcyB3aXRoIHJldHJpZXMiLCJMYXN0TG9naW4ubW9iaWxlVGl0bGUiOiLQkNC/0L7RiNC90ZYg0Z7QstCw0YXQvtC0OiIsIkxhdW5jaENoYW5nZXMuZGVsZXRlIjoi0LLRi9C00LDQu9GW0Z4iLCJMYXVuY2hDaGFuZ2VzLmZpbmlzaCI6ItC30LDQstGP0YDRiNGL0Z4iLCJMYXVuY2hDaGFuZ2VzLmZpbmlzaEltcG9ydCI6ItC60LDQvdC10YYg0ZbQvNC/0LDRgNGC0YMiLCJMYXVuY2hDaGFuZ2VzLmxhdW5jaCI6ItC30LDQv9GD0YHQuiIsIkxhdW5jaENoYW5nZXMuc3RhcnQiOiLRgdGC0LDRgNGCIiwiTGF1bmNoQ2hhbmdlcy5zdGFydEltcG9ydCI6ItC/0LDRh9Cw0YLQsNC6INGW0LzQv9Cw0YDRgtGDIiwiTGF1bmNoRHVyYXRpb25Db250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIkxhdW5jaER1cmF0aW9uQ29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTUwIiwiTGF1bmNoRmlsdGVyc1Rvb2xiYXIuYWRkRmlsdGVyIjoi0JTQsNC00LDRhtGMINGE0ZbQu9GM0YLRgCIsIkxhdW5jaEZpbmlzaEZvcmNlRGlhbG9nLmZpbmlzaEZvcmNlTGF1bmNoSGVhZGVyIjoi0KHQutC+0L3Rh9GL0YbRjCDQv9GA0YvQvNGD0YHQvtCy0LAiLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5maW5pc2hGb3JjZUxhdW5jaFRleHQiOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDQttCw0LTQsNC10YbQtSDQt9Cw0LLRj9GA0YjRi9GG0Ywg0LfQsNC/0YPRgdC6PyDQo9GB0LUg0LTQsNC00LfQtdC90YvRjyDQsdGD0LTRg9GG0Ywg0YHRgtGA0LDRh9Cw0L3Riy4iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5maW5pc2hGb3JjZUxhdW5jaFdhcm5pbmciOiLQktGLINC30LHRltGA0LDQtdGG0LXRgdGPINGB0L/Ri9C90ZbRhtGMINC90LUg0YHQstC+0Lkg0YPQu9Cw0YHQvdGLINC30LDQv9GD0YHQui4g0JPRjdGC0LAg0LzQvtC20LAg0L/QsNGe0L/Qu9GL0LLQsNGG0Ywg0L3QsCDRltC90YTQsNGA0LzQsNGG0YvRjiDRltC90YjRi9GFINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCw0Z4g0L/RgNCw0LXQutGC0LAuIiwiTGF1bmNoRmluaXNoRm9yY2VEaWFsb2cuZmluaXNoRm9yY2VNdWx0aXBsZVRleHQiOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDQttCw0LTQsNC10YbQtSDQt9Cw0LLRj9GA0YjRi9GG0Ywg0LLRi9Cx0YDQsNC90YvRjyDQt9Cw0L/Rg9GB0LrRlj8g0KPRgdC1INC00LDQtNC30LXQvdGL0Y8g0LHRg9C00YPRhtGMINGB0YLRgNCw0YfQsNC90YsuIiwiTGF1bmNoRmluaXNoRm9yY2VEaWFsb2cuZm9yY2VGaW5pc2hGYWlsZWRNZXNzYWdlIjoi0J3QtSDQsNGC0YDRi9C80LDQu9Cw0YHRjyDQv9GA0YvQvNGD0YHQvtCy0LAg0LfQsNCy0Y/RgNGI0YvRhtGMINC30LDQv9GD0YHQujoge21lc3NhZ2V9IiwiTGF1bmNoRmluaXNoRm9yY2VEaWFsb2cuZm9yY2VGaW5pc2hGYWlsZWRNdWx0aXBsZU1lc3NhZ2UiOiLQndC1INCw0YLRgNGL0LzQsNC70LDRgdGPINC/0YDRi9C80YPRgdC+0LLQsCDQt9Cw0LLRj9GA0YjRi9GG0Ywg0LfQsNC/0YPRgdC60ZY6IHttZXNzYWdlfSIsIkxhdW5jaEZpbmlzaEZvcmNlRGlhbG9nLmZvcmNlRmluaXNoU3VjY2Vzc01lc3NhZ2UiOiLQl9Cw0L/Rg9GB0Log0L/QsNGB0L/Rj9GF0L7QstCwINC/0YDRi9C80YPRgdC+0LLQsCDQt9Cw0LLQtdGA0YjQsNC90YsiLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5mb3JjZUZpbmlzaFN1Y2Nlc3NNdWx0aXBsZU1lc3NhZ2UiOiLQl9Cw0L/Rg9GB0LrRliDQv9Cw0YHQv9GP0YXQvtCy0LAg0L/RgNGL0LzRg9GB0L7QstCwINC30LDQstC10YDRiNCw0L3RiyIsIkxhdW5jaEltcG9ydE1vZGFsLmNhbmNlbEJ1dHRvbiI6ItCQ0LTQvNGP0L3RltGG0YwiLCJMYXVuY2hJbXBvcnRNb2RhbC5pbXBvcnRCdXR0b24iOiLQhtC80L/QsNGA0YIiLCJMYXVuY2hJbXBvcnRNb2RhbC5pbXBvcnRDb25maXJtYXRpb24iOiLQn9Cw0YbQstC10YDQtNC30ZbRhtC1INCw0LTQvNC10L3RgyIsIkxhdW5jaEltcG9ydE1vZGFsLmltcG9ydENvbmZpcm1hdGlvbldhcm5pbmciOiLQktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDQttCw0LTQsNC10YbQtSDRgdGD0L/Ri9C90ZbRhtGMINC/0YDQsNGG0Y3RgSDRltC80L/QsNGA0YLRgz8iLCJMYXVuY2hJbXBvcnRNb2RhbC5pbmNvcnJlY3RGaWxlRm9ybWF0Ijoi0J3Rj9GB0LvRg9GI0L3RiyDRhNCw0YDQvNCw0YIg0YTQsNC50LvQsCIsIkxhdW5jaEltcG9ydE1vZGFsLmluY29ycmVjdEZpbGVTaXplIjoi0J/QsNC80LXRgCDRhNCw0LnQu9CwINCx0L7Qu9GM0YjRiyDQt9CwIDMyIE1iIiwiTGF1bmNoSW1wb3J0TW9kYWwubW9kYWxUaXRsZSI6ItCG0LzQv9Cw0YDRgtCw0LLQsNGG0Ywg0LfQsNC/0YPRgdC6IiwiTGF1bmNoSW1wb3J0TW9kYWwubm90ZSI6ItCX0LDRhtC10LzQutCwOiIsIkxhdW5jaEltcG9ydE1vZGFsLm5vdGVNZXNzYWdlIjoi0JrQsNC70ZYg0LLQsNGIINCy0YvQutCw0L3QsNGe0YbQsCDQvdC1INC30LDQv9GW0YHQstCw0LUg0YfQsNGBINC/0LDRh9Cw0YLQutGDINGC0Y3RgdGC0LAg0Z4gLnhtbCDRhNCw0LnQuywg0YLQsNC00Ysg0LHRg9C00LfQtSDQstGL0LrQsNGA0YvRgdGC0LDQvdGLINCx0Y/Qs9GD0YfRiyDRh9Cw0YEg0YHQtdGA0LLQtdGA0LAuIiwiTGF1bmNoSW1wb3J0TW9kYWwub2tCdXR0b24iOiLQlNC+0LHRgNCwIiwiTGF1bmNoSW1wb3J0TW9kYWwudGlwIjoi0J/QtdGA0LDRhtGP0LPQvdGD0YbRjCDRgtC+0LvRjNC60ZYgPGI+LnppcDwvYj4g0YTQsNC50Lsg0LTQsCAzMiBNQiDQtNC70Y8g0LfQsNCz0YDRg9C30LrRliDQsNCx0L4gIDxzcGFuPtC/0YHRgtGA0YvQutC90ZbRhtC1PC9zcGFuPiDQutCw0LEg0LTQsNC00LDRhtGMINGP0LPQviIsIkxhdW5jaExldmVsRW50aXRpZXMuQVVUT01BVElPTl9CVUdfdGl0bGUiOiLQpdGW0LHQsCDQsNGe0YLQsNC80LDRgtGL0LfQsNGG0YvRliIsIkxhdW5jaExldmVsRW50aXRpZXMuQVVUT01BVElPTl9CVUdfdG90YWxUaXRsZSI6ItCj0YHRj9Cz0L4g0YXRltCx0LDRniDQsNGe0YLQsNC80LDRgtGL0LfQsNGG0YvRliIsIkxhdW5jaExldmVsRW50aXRpZXMuQXR0cmlidXRlS2V5c1RpdGxlIjoi0JrQu9GO0YfRiyDQsNGC0YDRi9Cx0YPRgtCw0Z4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLkF0dHJpYnV0ZVZhbHVlc1RpdGxlIjoi0JfQvdCw0YfRjdC90L3RliDQsNGC0YDRi9Cx0YPRgtCw0Z4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLkRlc2NyaXB0aW9uVGl0bGUiOiLQkNC/0ZbRgdCw0L3QvdC1IiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5GYWlsZWRUaXRsZSI6ItCd0Y/RntC00LDQu9CwIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiOiLQhtC80Y8g0LfQsNC/0YPRgdC60YMiLCJMYXVuY2hMZXZlbEVudGl0aWVzLk51bWJlclRpdGxlIjoi0J3Rg9C80LDRgCDQt9Cw0L/Rg9GB0LrRgyIsIkxhdW5jaExldmVsRW50aXRpZXMuT3duZXJUaXRsZSI6ItCj0LvQsNGB0L3RltC6IiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5QUk9EVUNUX0JVR190aXRsZSI6ItCl0ZbQsdCwINC/0YDQsNC00YPQutGC0YMiLCJMYXVuY2hMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX3RvdGFsVGl0bGUiOiLQo9GB0Y/Qs9C+INGF0ZbQsdCw0Z4g0L/RgNCw0LTRg9C60YLRgyIsIkxhdW5jaExldmVsRW50aXRpZXMuUGFzc2VkVGl0bGUiOiLQn9Cw0YHQv9GP0YXQvtCy0LAiLCJMYXVuY2hMZXZlbEVudGl0aWVzLlNZU1RFTV9JU1NVRV90aXRsZSI6ItCh0ZbRgdGC0Y3QvNC90LDRjyDQv9GA0LDQsdC70LXQvNCwIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5TWVNURU1fSVNTVUVfdG90YWxUaXRsZSI6ItCj0YHRj9Cz0L4g0YHRltGB0YLRjdC80L3Ri9GFINC/0YDQsNCx0LvQtdC8IiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5Ta2lwcGVkVGl0bGUiOiLQn9GA0LDQv9GD0YjRh9Cw0L3QsCIsIkxhdW5jaExldmVsRW50aXRpZXMuU3RhcnRUaW1lVGl0bGUiOiLQp9Cw0YEg0LfQsNC/0YPRgdC60YMiLCJMYXVuY2hMZXZlbEVudGl0aWVzLlRPX0lOVkVTVElHQVRFX3RpdGxlIjoi0J3QtdCw0LHRhdC+0LTQvdGLINCw0L3QsNC70ZbQtyIsIkxhdW5jaExldmVsRW50aXRpZXMuVG90YWxUaXRsZSI6ItCj0YHRj9Cz0L4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLml0ZW1OYW1lRW50aXR5SGludCI6ItCf0LDRgtGA0LDQsdGD0LXRhtGG0LAg0L/QsCDQvNC10L3RiNCw0Lkg0LzQtdGA0YsgMyDRgdGW0LzQstCw0LvQsC4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLmxhdW5jaERlc2NyaXB0aW9uRW50aXR5SGludCI6ItCf0LDRgtGA0LDQsdGD0LXRhtGG0LAg0L/QsCDQvNC10L3RiNCw0Lkg0LzQtdGA0YsgMyDRgdGW0LzQstCw0LvQsC4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLmxhdW5jaE51bWJlckVudGl0eUhpbnQiOiLQk9GN0YLRiyDRhNGW0LvRjNGC0YAg0L/RgNGL0LzQsNC1INGC0L7Qu9GM0LrRliDQu9GW0YfQsdGLLiIsIkxhdW5jaE1lcmdlTW9kYWwubGF1bmNoRGVzY3JpcHRpb25IaW50Ijoi0JDQv9GW0YHQsNC90L3QtSDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGALCDQvdC1INCx0L7Qu9GM0YjRiyDQt9CwIDEwMjQg0YHRltC80LLQsNC70LDRni4iLCJMYXVuY2hNZXJnZU1vZGFsLmxhdW5jaE5hbWVIaW50Ijoi0J3QsNC30LLQsCDQt9Cw0L/Rg9GB0LrRgyDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMyDQtNCwIDI1Ni4iLCJMYXVuY2hTdGF0aXN0aWNzQ29udHJvbHMuQ29udGVudEZpZWxkc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIkxhdW5jaFN0YXRpc3RpY3NDb250cm9scy5Dcml0ZXJpYUZpZWxkTGFiZWwiOiJDcml0ZXJpYSBmb3Igd2lkZ2V0IiwiTGF1bmNoU3RhdGlzdGljc0NvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiTGF1bmNoU3RhdGlzdGljc0NvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIkxhdW5jaFN0YXRpc3RpY3NDb250cm9scy5ab29tQ29udHJvbFRleHQiOiJab29tIHdpZGdldCBhcmVhIiwiTGF1bmNoU3RhdGlzdGljc0NvbnRyb2xzLmF0dHJpYnV0ZUtleVZhbGlkYXRpb25FcnJvciI6IlZhbHVlIHNob3VsZCBoYXZlIHNpemUgZnJvbSAxIHRvIDEyOCIsIkxhdW5jaFN0YXR1cy5mYWlsZWQiOiLQndGP0Z7QtNCw0LvQsCIsIkxhdW5jaFN0YXR1cy5wYXNzZWQiOiLQn9Cw0YHQv9GP0YXQvtCy0LAiLCJMYXVuY2hTdGF0dXMuc2tpcHBlZCI6ItCf0YDQsNC/0YPRiNGH0LDQvdCwIiwiTGF1bmNoZXNQYWdlLmFscmVhZHlJZ25vcmVkIjoiSXRlbSBhbHJlYWR5IGlnbm9yZWQgaW4gQXV0by1BbmFseXNpcyIsIkxhdW5jaGVzUGFnZS5hbHJlYWR5SW5jbHVkZWQiOiJJdGVtIGFscmVhZHkgaW5jbHVkZWQgaW4gQXV0by1BbmFseXNpcyIsIkxhdW5jaGVzUGFnZS5hbmFseXNlU3RhcnRTdWNjZXNzIjoiQXV0by1hbmFseXplciBoYXMgYmVlbiBzdGFydGVkLiIsIkxhdW5jaGVzUGFnZS5jaGVja1F1ZXJ5IjoiRmFpbGVkIHRvIGxvYWQgZGF0YSBmb3IgbGF1bmNoZXMgdGFibGUiLCJMYXVuY2hlc1BhZ2UuZGVsZXRlTW9kYWxDb250ZW50Ijoi0JLRiyDRntC/0Y3RntC90LXQvdGL0Y8sINGI0YLQviDRhdC+0YfQsNGG0LUg0LLRi9C00LDQu9GW0YbRjCDQt9Cw0L/Rg9GB0LogJzxiPntuYW1lfTwvYj4nPyDQktGLINGB0YLRgNCw0YbRltGG0LUg0LTQvtGB0YLRg9C/INC00LAg0Y/Qs9C+LiIsIkxhdW5jaGVzUGFnZS5kZWxldGVNb2RhbEhlYWRlciI6ItCS0YvQtNCw0LvRltGG0Ywg0LfQsNC/0YPRgdC6IiwiTGF1bmNoZXNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVDb250ZW50Ijoi0JLRiyDRntC/0Y3RntC90LXQvdGL0Y8sINGI0YLQviDRhdC+0YfQsNGG0LUg0LLRi9C00LDQu9GW0YbRjCDQt9Cw0L/Rg9GB0LrRlj8g0JLRiyDRgdGC0YDQsNGG0ZbRhtC1INC00L7RgdGC0YPQvyDQtNCwINGW0YUuIiwiTGF1bmNoZXNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVIZWFkZXIiOiLQktGL0LTQsNC70ZbRhtGMINC30LDQv9GD0YHQutGWIiwiTGF1bmNoZXNQYWdlLmVycm9yIjoi0J/QsNC80YvQu9C60LAg0L/RgNGLINCy0YvQtNCw0LvQtdC90L3RliDQt9Cw0L/Rg9GB0LrRgyIsIkxhdW5jaGVzUGFnZS5lcnJvck11bHRpcGxlIjoi0J/QsNC80YvQu9C60LAg0L/RgNGLINCy0YvQtNCw0LvQtdC90L3RliDQt9Cw0L/Rg9GB0LrQsNGeIiwiTGF1bmNoZXNQYWdlLmltcG9ydCI6ItCG0LzQv9Cw0YDRgiIsIkxhdW5jaGVzUGFnZS5sYXVuY2hGaW5pc2hlZCI6ItCX0LDQv9GD0YHQuiDQt9Cw0LLQtdGA0YjQsNC90YsiLCJMYXVuY2hlc1BhZ2UubGF1bmNoSXNQcm9jZXNzaW5nIjoi0JfQsNC/0YPRgdC6INC90LUg0L/QsNCy0ZbQvdC90Ysg0LDQv9GA0LDRhtC+0Z7QstCw0YbRhtCwINCQ0Z7RgtCw0LDQvdCw0LvRltC30LDRgtCw0YDQsNC8ISIsIkxhdW5jaGVzUGFnZS5sYXVuY2hOb3RJblByb2dyZXNzIjoi0JfQsNC/0YPRgdC6INC90LUg0L/QsNCy0ZbQvdC90Ysg0LHRi9GG0Ywg0YMg0YHRgtCw0YLRg9GB0LUg0KMg0J/QoNCQ0KbQrdCh0KHQlSEiLCJMYXVuY2hlc1BhZ2UubXVsdGlTZWxlY3RFcnJvciI6ItCS0Ysg0L3QtSDQvNC+0LbQsNGG0LUg0LLRi9C60LDQvdCw0YbRjCDQsNC/0LXRgNCw0YbRi9GOINC3INC90Y/Qv9GA0LDQstGW0LvRjNC90YvQvNGWINGN0LvQtdC80LXQvdGC0LDQvNGWIiwiTGF1bmNoZXNQYWdlLm11bHRpcGxlU2VsZWN0SGVhZGVyIjoi0JLRiyDQvNC+0LbQsNGG0LUg0LLRi9C60L7QvdCy0LDRhtGMINC00LfQtdGP0L3QvdGWINC3INCw0LHRgNCw0L3Ri9C80ZYg0Y3Qu9C10LzQtdC90YLQsNC80ZY6IiwiTGF1bmNoZXNQYWdlLm5vRGVmZWN0VHlwZSI6ItCt0LvQtdC80LXQvdGCINC90LUg0LzQsNC1INC00Y3RhNC10LrRgtGDIiwiTGF1bmNoZXNQYWdlLm5vRGVmZWN0VHlwZVRvTGlua0lzc3VlIjoi0JLRiyDQvdC1INC80L7QttCw0YbQtSDQv9GA0YvQvNCw0YbQsNCy0LDRhtGMINC/0LDQvNGL0LvQutGDLCDQutCw0LvRliDRjdC70LXQvNC10L3RgiDQvdC1INC80LDQtSDQtNGN0YTQtdC60YLRgyIsIkxhdW5jaGVzUGFnZS5ub0lzc3VlIjoi0KMg0Y3Qu9C10LzQtdC90YLQsCDQvdGP0LzQsCDQtNGN0YTQtdC60YLRgyDQtNC70Y8g0YDRjdC00LDQs9Cw0LLQsNC90L3RjyIsIkxhdW5jaGVzUGFnZS5ub0xpbmtlZElzc3VlIjoi0Jcg0Y3Qu9C10LzQtdC90YLQsNC8INC90Y/QvNCwINC30LLRj9C30LDQvdGL0YUg0L/RgNCw0LHQu9C10LwiLCJMYXVuY2hlc1BhZ2Uubm90Rm91bmQiOiJMYXVuY2ggaXMgbm90IGZvdW5kIiwiTGF1bmNoZXNQYWdlLm5vdFlvdXJPd25MYXVuY2giOiLQktGLINC90LUg0Z7Qu9Cw0YHQvdGW0Log0LfQsNC/0YPRgdC60YMiLCJMYXVuY2hlc1BhZ2UucmVmcmVzaCI6ItCQ0LHQvdCw0LLRltGG0YwiLCJMYXVuY2hlc1BhZ2Uuc2VsZWN0TW9yZUl0ZW1zIjoi0JLRiyDQv9Cw0LLRltC90L3RiyDQstGL0LHRgNCw0YbRjCDQsdC+0LvRjNGIINC30LAg0LDQtNC30ZbQvSDRjdC70LXQvNC10L3RgiIsIkxhdW5jaGVzUGFnZS5zdWNjZXNzIjoi0JfQsNC/0YPRgdC6INCx0YvRniDQstGL0LTQsNC70LXQvdGLIiwiTGF1bmNoZXNQYWdlLnN1Y2Nlc3NNdWx0aXBsZSI6ItCX0LDQv9GD0YHQutGWINCx0YvQu9GWINCy0YvQtNCw0LvQtdC90YvRjyIsIkxhdW5jaGVzUGFnZS53YXJuaW5nIjoi0JLRiyDQt9Cx0ZbRgNCw0LXRhtC10YHRjyDQstGL0LTQsNC70ZbRhtGMINC90LUg0YHQstC+0Lkg0LfQsNC/0YPRgdC6LiDQk9GN0YLQsCDQvNC+0LbQsCDQv9Cw0Z7Qv9C70YvQstCw0YbRjCDQvdCwINGW0L3RhNCw0YDQvNCw0YbRi9GOINGW0L3RiNGL0YUg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDRniDQv9GA0LDQtdC60YLQsC4iLCJMYXVuY2hlc1BhZ2Uud2FybmluZ011bHRpcGxlIjoi0JLRiyDQt9Cx0ZbRgNCw0LXRhtC10YHRjyDQstGL0LTQsNC70ZbRhtGMINC90LUg0YHQstC+0Lkg0LfQsNC/0YPRgdC60ZYuINCT0Y3RgtCwINC80L7QttCwINC/0LDRntC/0LvRi9Cy0LDRhtGMINC90LAg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0ZbQvdGI0YvRhSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNGeINC/0YDQsNC10LrRgtCwLiIsIkxhdW5jaGVzVGFibGUuZW5kVGltZUNvbHVtbkZ1bGwiOiLQp9Cw0YEg0LfQsNC60LDQvdGH0Y3QvdC90Y8iLCJMYXVuY2hlc1RhYmxlLmVuZFRpbWVDb2x1bW5TaG9ydCI6ItCX0LDQutCw0L3Rh9GN0L3QvdC1IiwiTGF1bmNoZXNUYWJsZS5lbmRUaW1lSGludCI6ItCn0LDRgSDQt9Cw0LrQsNC90YfRjdC90L3RjzoiLCJMYXVuY2hlc1RhYmxlLmZhaWxlZENvbHVtbkZ1bGwiOiLQndGP0Z7QtNCw0LvQsCIsIkxhdW5jaGVzVGFibGUuZmFpbGVkQ29sdW1uU2hvcnQiOiLQvdGP0Z7QtCIsIkxhdW5jaGVzVGFibGUubmFtZUNvbHVtbiI6ItCG0LzRjyIsIkxhdW5jaGVzVGFibGUucGFzc2VkQ29sdW1uRnVsbCI6ItCf0LDRgdC/0Y/RhdC+0LLQsCIsIkxhdW5jaGVzVGFibGUucGFzc2VkQ29sdW1uU2hvcnQiOiLQv9Cw0YHQvyIsIkxhdW5jaGVzVGFibGUuc2tpcHBlZENvbHVtbkZ1bGwiOiLQn9GA0LDQv9GD0YjRh9Cw0L3QsCIsIkxhdW5jaGVzVGFibGUuc2tpcHBlZENvbHVtblNob3J0Ijoi0L/RgNCw0L8iLCJMYXVuY2hlc1RhYmxlLnN0YXJ0VGltZUNvbHVtbkZ1bGwiOiLQp9Cw0YEg0L/QsNGH0LDRgtC60YMiLCJMYXVuY2hlc1RhYmxlLnN0YXJ0VGltZUNvbHVtblNob3J0Ijoi0J/QsNGH0LDRgtCw0LoiLCJMYXVuY2hlc1RhYmxlLnN0YXJ0VGltZUhpbnQiOiLQp9Cw0YEg0L/QsNGH0LDRgtC60YM6IiwiTGF1bmNoZXNUYWJsZS5zdGF0dXNDb2x1bW4iOiLQodGC0LDRgtGD0YEiLCJMYXVuY2hlc1RhYmxlLnN0YXR1c0hpbnQiOiLQodGC0LDQvToiLCJMYXVuY2hlc1RhYmxlLnRvdGFsQ29sdW1uRnVsbCI6ItCj0YHRj9Cz0L4iLCJMYXVuY2hlc1RhYmxlLnRvdGFsQ29sdW1uU2hvcnQiOiLQo9GB0Y/Qs9C+IiwiTGF1bmNoZXNUYWJsZUNvbnRyb2xzLkNvbnRlbnRGaWVsZHNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJMYXVuY2hlc1RhYmxlQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIkxhdW5jaGVzVGFibGVDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIkxhdW5jaGVzVGFibGVDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJMZGFwQXV0aEZvcm0uc3dpdGNoZXJMYWJlbCI6ItCQ0Z7RgtCw0YDRi9C30LDRhtGL0Y8g0Z4gTERBUCIsIkxkYXBBdXRoRm9ybUZpZWxkcy5iYXNlRG5MYWJlbCI6IkJhc2UgRE4iLCJMZGFwQXV0aEZvcm1GaWVsZHMuZW1haWxBdHRyaWJ1dGVMYWJlbCI6IkVtYWlsIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5mdWxsTmFtZUF0dHJpYnV0ZUxhYmVsIjoiRnVsbCBuYW1lIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5ncm91cFNlYXJjaEJhc2VMYWJlbCI6Ikdyb3VwIHNlYXJjaCBiYXNlIiwiTGRhcEF1dGhGb3JtRmllbGRzLmdyb3VwU2VhcmNoRmlsdGVyTGFiZWwiOiJHcm91cCBzZWFyY2ggZmlsdGVyIiwiTGRhcEF1dGhGb3JtRmllbGRzLm1hbmFnZXJEbkxhYmVsIjoiTWFuYWdlciBETiIsIkxkYXBBdXRoRm9ybUZpZWxkcy5tYW5hZ2VyUGFzc3dvcmRMYWJlbCI6Ik1hbmFnZXIgcGFzc3dvcmQiLCJMZGFwQXV0aEZvcm1GaWVsZHMucGFzc3dvcmRBdHRyaWJ1dGVMYWJlbCI6IlBhc3N3b3JkIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5wYXNzd29yZEVuY29kZXJUeXBlTGFiZWwiOiJQYXNzd29yZCBlbmNvZGVyIHR5cGUiLCJMZGFwQXV0aEZvcm1GaWVsZHMucGhvdG9BdHRyaWJ1dGVMYWJlbCI6IlBob3RvIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy51cmxMYWJlbCI6IlVybCIsIkxkYXBBdXRoRm9ybUZpZWxkcy51c2VyRG5QYXR0ZXJuTGFiZWwiOiJVc2VyIEROIHBhdHRlcm4iLCJMZGFwQXV0aEZvcm1GaWVsZHMudXNlclNlYXJjaEZpbHRlckxhYmVsIjoiVXNlciBzZWFyY2ggZmlsdGVyIiwiTGlua0lzc3VlTW9kYWwuYWRkSXNzdWVCdXR0b25UaXRsZSI6ItCU0LDQtNCw0YbRjCDQvdC+0LLRg9GOINC/0LDQvNGL0LvQutGDIiwiTGlua0lzc3VlTW9kYWwuYWRkSXNzdWVJZFRpdGxlIjoi0JTQsNC00LDRhtGMIElkINC/0LDQvNGL0LvQutGWIiwiTGlua0lzc3VlTW9kYWwuaXNzdWVJZEhpbnQiOiJJRCDQv9Cw0LzRi9C70LrRliDQv9Cw0LLRltC90LXQvSDQsdGL0YbRjCDQv9Cw0LzQtdGA0LDQvCDQsNC0IDEg0LTQsCAxMjgiLCJMaW5rSXNzdWVNb2RhbC5pc3N1ZUlkTGFiZWwiOiJJZCDQv9Cw0LzRi9C70LrRliIsIkxpbmtJc3N1ZU1vZGFsLmlzc3VlTGlua0xhYmVsIjoi0KHQv9Cw0YHRi9C70LrQsCDQvdCwINC/0LDQvNGL0LvQutGDIiwiTGlua0lzc3VlTW9kYWwuaXNzdWVMaW5rUGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INGB0L/QsNGB0YvQu9C60YMg0L3QsCDQv9Cw0LzRi9C70LrRgyIsIkxpbmtJc3N1ZU1vZGFsLmxpbmtCdXR0b24iOiLQn9GA0YvQvNCw0YbQsNCy0LDRhtGMIiwiTGlua0lzc3VlTW9kYWwubGlua0lzc3VlRmFpbGVkIjoi0J3QtSDQsNGC0YDRi9C80LDQu9Cw0YHRjyDQv9GA0YvQvNCw0YbQsNCy0LDRhtGMINC/0LDQvNGL0LvQutGDIiwiTGlua0lzc3VlTW9kYWwubGlua0lzc3VlU3VjY2VzcyI6ItCh0L/QsNGB0YvQu9C60LAg0L3QsCDQv9Cw0LzRi9C70LrRgyDQv9Cw0YHQv9GP0YXQvtCy0LAg0LTQsNC00LDQtNC30LXQvdCwIiwiTGlua0lzc3VlTW9kYWwucHJvamVjdEluQnRzVGl0bGUiOiLQhtC80Y8g0L/RgNCw0LXQutGC0LAg0Z4g0KHQkNClIiwiTGlua0lzc3VlTW9kYWwudGl0bGUiOiLQn9GA0YvQvNCw0YbQsNCy0LDRhtGMINC/0LDQvNGL0LvQutGDIiwiTGlua0lzc3VlTW9kYWwudXJsSGludCI6ItCh0L/QsNGB0YvQu9C60LAg0L/QsNCy0ZbQvdC90LAg0LDQtNC/0LDQstGP0LTQsNGG0Ywg0YHQsNC/0YDQsNGe0LTQvdCw0LzRgyDQsNC00YDQsNGB0YMg0LLRjdCxLdGB0LDQudGC0LAiLCJMb2NhbGl6YXRpb25CbG9jay5iZWxhcnVzaWFuIjoi0JHQtdC70LDRgNGD0YHQutGWIiwiTG9jYWxpemF0aW9uQmxvY2suY29udHJpYnV0ZSI6ItCg0YPRgdC60LDRjyDQvNC+0LLQsCDQt9C90LDRhdC+0LTQt9GW0YbRhtCwINGeINCx0Y3RgtCwLdCy0LXRgNGB0ZbRli4g0JrQsNC70ZYg0LvQsNGB0LrQsCwg0LTQsNC/0LDQvNCw0LbRi9GG0LUg0L3QsNC8INC3INC/0LXRgNCw0LrQu9Cw0LTQsNC8LCDQsNC00L/RgNCw0Z7RhtC1INCS0LDRiCDQn9CgINGeIDxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmVwb3J0cG9ydGFsL3NlcnZpY2UtdWkvYmxvYi92NS9hcHAvbG9jYWxpemF0aW9uL3RyYW5zbGF0ZWQvcnUuanNvbicgPtGE0LDQudC7LjwvYT4iLCJMb2NhbGl6YXRpb25CbG9jay5lbmdsaXNoIjoiRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykiLCJMb2NhbGl6YXRpb25CbG9jay5sYWJlbCI6ItCc0L7QstCwIiwiTG9jYWxpemF0aW9uQmxvY2subm90ZSI6ItCU0LAg0LLQtdC00LDQvNCwIiwiTG9jYWxpemF0aW9uQmxvY2sucnVzc2lhbiI6ItCg0YPRgdC60ZYiLCJMb2dJdGVtQWN0aXZpdHkuY2hhbmdlZEJ5QW5hbHl6ZXIiOiLQkNCQINC30LzRj9C90ZbRniDRgtGL0L8g0LTRjdGE0LXQutGC0YMiLCJMb2dJdGVtQWN0aXZpdHkuaXNzdWVMb2FkQnlBbmFseXplciI6IkFBINC/0YDRi9Cy0Y/Qt9Cw0Z4g0L/QsNC80YvQu9C60YMiLCJMb2dJdGVtQWN0aXZpdHkubGlua0lzc3VlIjoi0L/RgNGL0LLRj9C30LDRniDQv9Cw0LzRi9C70LrRgyIsIkxvZ0l0ZW1BY3Rpdml0eS5ub0FjdGl2aXRpZXMiOiLQndGP0LzQsCDQtNC30LXRj9C90L3Rj9GeINC00LvRjyDQsNC00LvRjtGB0YLRgNCw0LLQsNC90L3RjyIsIkxvZ0l0ZW1BY3Rpdml0eS5wb3N0SXNzdWUiOiLQsNC00L/RgNCw0LLRltGeINC/0LDQvNGL0LvQutGDIiwiTG9nSXRlbUFjdGl2aXR5LnVubGlua0lzc3VlIjoi0LDQtNCy0Y/Qt9Cw0Z4g0L/QsNC80YvQu9C60YMiLCJMb2dJdGVtQWN0aXZpdHkudXBkYXRlSXRlbSI6ItCw0LHQvdCw0LLRltGeINGN0LvQtdC80LXQvdGCIiwiTG9nSXRlbUFjdGl2aXR5LnVwZGF0ZUl0ZW1Jc3N1ZSI6ItCw0LHQvdCw0LLRltGeINC00LDQtNC30LXQvdGL0Y8g0Y3Qu9C10LzQtdC90YLQsCIsIkxvZ0l0ZW1JbmZvLmJhc2VkT24iOiLQl9Cw0YHQvdCw0LLQsNC90Ysg0L3QsCIsIkxvZ0l0ZW1JbmZvLmNvcHlEZWZlY3QiOiLQmtCw0L/RltGP0LLQsNGG0Ywg0LTRjdGE0LXQutGCIHtwcmVmaXh9IHttZXNzYWdlfSIsIkxvZ0l0ZW1JbmZvLmZyb21QcmVmaXgiOiLQsNC0IiwiTG9nSXRlbUluZm8uaWdub3JlQUEiOiLQhtCz0L3QsNGA0LDQstCw0YbRjCDQv9GA0Ysg0JDRntGC0LAt0LDQvdCw0LvRltC3IiwiTG9nSXRlbUluZm8uaXRlbSI6ItGN0LvQtdC80LXQvdGCIiwiTG9nSXRlbUluZm8ubGlua0lzc3VlIjoi0J/RgNGL0LzQsNGG0LDQstCw0YbRjCDQv9Cw0LzRi9C70LrRgyIsIkxvZ0l0ZW1JbmZvLm5vQnVnVHJhY2tpbmdTeXN0ZW1Ub0xpbmtJc3N1ZSI6ItCd0LDQu9Cw0LTQt9GM0YbQtSDQodGW0YHRgtGN0LzRgyDQsNC00YHQvtGH0LLQsNC90L3RjyDQv9Cw0LzRi9C70LDQuiDQvdCwINC30LDQs9GA0YPQt9C60YMg0L/QsNC80YvQu9Cw0LoiLCJMb2dJdGVtSW5mby5ub0RlZmVjdFR5cGVUb0xpbmtJc3N1ZSI6ItCS0Ysg0L3QtSDQvNC+0LbQsNGG0LUg0L/RgNGL0LzQsNGG0LDQstCw0YbRjCDQv9Cw0LzRi9C70LrRgywg0LrQsNC70ZYg0Y3Qu9C10LzQtdC90YIg0L3QtSDQvNCw0LUg0LTRjdGE0LXQutGC0YMiLCJMb2dJdGVtSW5mby5wb3N0SXNzdWUiOiLQkNC00L/RgNCw0LLRltGG0Ywg0L/QsNC80YvQu9C60YMiLCJMb2dJdGVtSW5mby5zZW5kRGVmZWN0Ijoi0JDQtNC/0YDQsNCy0ZbRhtGMINC00Y3RhNC10LrRgiDQtNCwIHttZXNzYWdlfSIsIkxvZ0l0ZW1JbmZvVGFicy5hdHRhY2htZW50c1RhYiI6ItCj0LrQu9Cw0LTQsNC90L3RliIsIkxvZ0l0ZW1JbmZvVGFicy5kZXRhaWxzVGFiIjoi0JDQv9GW0YHQsNC90L3QtSDRjdC70LXQvNC10L3RgtCwIiwiTG9nSXRlbUluZm9UYWJzLmhpc3RvcnlUYWIiOiLQk9GW0YHRgtC+0YDRi9GPINC00LfQtdGP0L3QvdGP0Z4iLCJMb2dJdGVtSW5mb1RhYnMucGFyYW1ldGVyc1RhYiI6ItCf0LDRgNCw0LzQtdGC0YDRiyIsIkxvZ0l0ZW1JbmZvVGFicy5zdGFja1RhYiI6ItCi0YDQsNGB0ZbRgNC+0Z7QutCwINGB0YLRjdC60LAiLCJMb2dNZXNzYWdlU2VhcmNoLnNlYXJjaEhpbnQiOiLQn9CwINC80LXQvdGI0LDQuSDQvNC10YDRiyAzINGB0ZbQvNCy0LDQu9CwINC/0LDRgtGA0LDQsdGD0LXRhtGG0LAuIiwiTG9nTWVzc2FnZVNlYXJjaC5zZWFyY2hUaXRsZSI6ItCX0LzQtdGB0YIg0LvQvtCz0LAiLCJMb2dpbkJsb2NrLmxvZ2luIjoi0YPQstCw0LnQtNC30ZbRhtC1INGeINCy0LDRiCDRg9C70ZbQutC+0LLRiyDQt9Cw0L/RltGBIiwiTG9naW5CbG9jay53ZWxjb21lIjoi0JLRltGC0LDQtdC8LCIsIkxvZ2luRm9ybS5mb3Jnb3RQYXNzIjoi0JfQsNCx0YvQu9GWINC/0LDRgNC+0LvRjD8iLCJMb2dpbkZvcm0ubG9naW4iOiLQm9Cw0LPRltC9IiwiTG9naW5Gb3JtLmxvZ2luUGxhY2Vob2xkZXIiOiLQm9Cw0LPRltC9IiwiTG9naW5Gb3JtLm9yIjoi0LDQu9GM0LHQviIsIkxvZ2luRm9ybS5wYXNzd29yZFBsYWNlaG9sZGVyIjoi0J/QsNGA0L7Qu9GMIiwiTG9nc0dyaWQubm9SZXN1bHRzIjoiTm8gcmVzdWx0cyBmb3VuZCIsIkxvZ3NHcmlkLnRpbWVDb2x1bW5UaXRsZSI6ItCn0LDRgSIsIkxvZ3NHcmlkVG9vbGJhci5jb25zb2xlVmlldyI6ItCa0LDQvdGB0L7Qu9GM0L3RiyDQstGL0LPQu9GP0LQiLCJMb2dzR3JpZFRvb2xiYXIubWFya2Rvd25Nb2RlIjoi0KDRjdC20YvQvCDRgNCw0LfQvNC10YLQutGWIiwiTG9nc0dyaWRUb29sYmFyLm5leHRFcnJvciI6ItCd0LDRgdGC0YPQv9C90LDRjyDQv9Cw0LzRi9C70LrQsCIsIkxvZ3NHcmlkVG9vbGJhci53aXRoQXR0YWNobWVudHMiOiLQm9C+0LPRliDQtyDRntC60LvQsNC00LDQvdC90Y/QvNGWIiwiTWFya2Rvd25FZGl0b3IuYm9sZCI6ItCi0L7RntGB0YLQsNC1INC90LDQv9GW0YHQsNC90L3QtSIsIk1hcmtkb3duRWRpdG9yLmNsZWFuQmxvY2siOiLQkNGH0YvRgdGG0ZbRhtGMINCx0LvQvtC6IiwiTWFya2Rvd25FZGl0b3IuY29kZSI6ItCa0L7QtCIsIk1hcmtkb3duRWRpdG9yLmhlYWRpbmcxIjoi0JLRj9C70ZbQutGWINC30LDQs9Cw0LvQvtCy0LDQuiIsIk1hcmtkb3duRWRpdG9yLmhlYWRpbmcyIjoi0KHRj9GA0Y3QtNC90ZYg0LfQsNCz0LDQu9C+0LLQsNC6IiwiTWFya2Rvd25FZGl0b3IuaGVhZGluZzMiOiLQnNCw0LvRiyDQt9Cw0LPQsNC70L7QstCw0LoiLCJNYXJrZG93bkVkaXRvci5pbWFnZSI6ItCj0YHRgtCw0LLRltGG0Ywg0LLRltC00LDRgNGL0YEiLCJNYXJrZG93bkVkaXRvci5pdGFsaWMiOiLQmtGD0YDRgdGW0Z4iLCJNYXJrZG93bkVkaXRvci5saW5rIjoi0KHRgtCy0LDRgNGL0YbRjCDRgdC/0LDRgdGL0LvQutGDIiwiTWFya2Rvd25FZGl0b3Iub3JkZXJlZExpc3QiOiLQndGD0LzQtdGA0LDQstCw0L3RiyDRgdC/0ZbRgSIsIk1hcmtkb3duRWRpdG9yLnByZXZpZXciOiLQn9Cw0L/Rj9GA0Y3QtNC90ZYg0L/RgNCw0LPQu9GP0LQiLCJNYXJrZG93bkVkaXRvci5xdW90ZSI6ItCm0YvRgtCw0YLQsCIsIk1hcmtkb3duRWRpdG9yLnN0cmlrZXRocm91Z2giOiLQl9Cw0LrRgNGN0YHQu9C10L3RiyIsIk1hcmtkb3duRWRpdG9yLnVub3JkZXJlZExpc3QiOiLQnNCw0YDQutGW0YDQsNCy0LDQvdGLINGB0L/RltGBIiwiTWVtYmVyc0dyaWQuYWN0aW9uQ29sIjoi0JTQt9C10Y/QvdC90LUiLCJNZW1iZXJzR3JpZC5kZWxldGVDb2wiOiLQktGL0LTQsNC70ZbRhtGMIiwiTWVtYmVyc0dyaWQuZGlzcGxheUNvbCI6ItCQ0LTQu9GO0YHRgtGA0LDQstCw0YbRjCDQvdCwINC30LDQv9GD0YHQutCw0YUiLCJNZW1iZXJzR3JpZC5sYXN0TG9naW5Db2wiOiLQkNC/0L7RiNC90ZYg0Z7QstCw0YXQvtC0IiwiTWVtYmVyc0dyaWQubmFtZUNvbCI6ItCd0LDQt9Cy0LAg0YTRltC70YzRgtGA0LAiLCJNZW1iZXJzR3JpZC5vcHRpb25zQ29sIjoi0J7Qv9GG0YvRliIsIk1lbWJlcnNHcmlkLm93bmVyQ29sIjoi0KPQu9Cw0YHQvdGW0LoiLCJNZW1iZXJzR3JpZC5yb2xlQ29sIjoi0J/RgNCw0LXQutGC0L3QsNGPINGA0L7Qu9GOIiwiTWVtYmVyc0dyaWQuc2hhcmVkQ29sIjoi0JDQv9GD0LHQu9GW0LrQsNCy0LDQvdGLIiwiTWVtYmVyc1BhZ2UuaW52aXRlRXh0ZXJuYWxNZW1iZXIiOiLQl9Cw0L/RgNCw0YjRjdC90L3QtSDRntC00LfQtdC70YzQvdGW0LrQsCDQsdGL0LvQviDQv9Cw0YHQv9GP0YXQvtCy0LAg0LfQsNGA0Y3Qs9GW0YHRgtGA0LDQstCw0L3QsC4g0K/QutCw0Y8g0L/QsNGG0LLRj9GA0LTQttCw0LUg0ZbQvdGE0LDRgNC80LDRhtGL0Y8g0LHRg9C00LfQtSDQsNC00L/RgNCw0Z7Qu9C10L3QsCDQvdCwINC/0YDQsNC00YHRgtCw0Z7Qu9C10L3RiyDRjdC70LXQutGC0YDQvtC90L3RiyDQsNC00YDQsNGBLiDQotGN0YDQvNGW0L0g0LTQt9C10Y/QvdC90Y86IDEg0LTQt9C10L3RjC4iLCJNZW1iZXJzUGFnZS5tZW1iZXJXYXNJbnZpdGVkIjoi0KPQtNC30LXQu9GM0L3RltC6ICc8Yj57bmFtZX08L2I+JyDQv9GA0YvQt9C90LDRh9Cw0L3RiyDQvdCwINC/0YDQsNC10LrRgiIsIk1lbWJlcnNQYWdlLm5vdEZvdW5kIjoiTm8gbWVtYmVycyBmb3VuZCBmb3IgJ3tmaWx0ZXJ9JyIsIk1lbWJlcnNQYWdlLnRpdGxlIjoi0KPQtNC30LXQu9GM0L3RltC60ZYg0L/RgNCw0LXQutGC0LAiLCJNZW1iZXJzUGFnZVRvb2xiYXIuaW52aXRlVXNlciI6ItCX0LDQv9GA0LDRgdGW0YbRjCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCIsIk1lbWJlcnNQYWdlVG9vbGJhci5wZXJtaXNzaW9uTWFwIjoi0JrQsNGA0YLQsCDQv9GA0LDQstC+0Z4iLCJNZW1iZXJzUGFnZVRvb2xiYXIuc2VhcmNoQnlOYW1lIjoi0KjRg9C60LDRhtGMINC/0LAg0ZbQvNGPIiwiTWVyZ2VMYXVuY2hEaWFsb2cuTWVyZ2VMYXVuY2hIZWFkZXIiOiLQkNCxJ9GP0LTQvdCw0YbRjCDQt9Cw0L/Rg9GB0LrRliIsIk1lcmdlTGF1bmNoRGlhbG9nLmV4dGVuZFN1aXRlc0Rlc2NyaXB0aW9uVGV4dCI6ItCf0LDRiNGL0YDRi9GG0Ywg0LDQv9GW0YHQsNC90L3QtSDQsNCxJ9C10LrRgtCw0Z4t0L3QsNGI0YfQsNC00LrQsNGeINC3INCw0YDRi9Cz0L3RltCw0LvRjNC90LDQuSDQvdCw0LfQstCw0Lkg0LfQsNC/0YPRgdC60YMgKNGCLtCxLiBA0LfQsNC/0YPRgdC6ICfQl9Cw0L/Rg9GB0LogIzEnKSIsIk1lcmdlTGF1bmNoRGlhbG9nLmxhdW5jaEF0dHJpYnV0ZXNMYWJlbCI6ItCQ0YLRgNGL0LHRg9GC0YsiLCJNZXJnZUxhdW5jaERpYWxvZy5sYXVuY2hEZXNjcmlwdGlvbkxhYmVsIjoi0KPQstGP0LTQt9GW0YbQtSDQsNC/0ZbRgdCw0L3QvdC1INC30LDQv9GD0YHQutGDIiwiTWVyZ2VMYXVuY2hEaWFsb2cubGF1bmNoSW5mb0hlYWRpbmciOiLQo9GB0LUg0LLRi9Cx0YDQsNC90YvRjyDQt9Cw0L/Rg9GB0LrRliDQsdGD0LTRg9GG0Ywg0LDQsSfRj9C00LDQvdGL0Y8g0Z4g0LDQtNC30ZbQvSIsIk1lcmdlTGF1bmNoRGlhbG9nLmxhdW5jaE5hbWVMYWJlbCI6ItCG0LzRjyDQt9Cw0L/Rg9GB0LrRgyIsIk1lcmdlTGF1bmNoRGlhbG9nLmxhdW5jaE5hbWVQbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0ZbQvNGPINC30LDQv9GD0YHQutGDIiwiTWVyZ2VMYXVuY2hEaWFsb2cubGF1bmNoT3duZXJMYWJlbCI6ItCj0LvQsNGB0L3QuNC6IiwiTWVyZ2VMYXVuY2hEaWFsb2cubGF1bmNoVGltZUxhYmVsIjoi0KfQsNGBINC/0LDRh9Cw0YLQutGDL9C30LDQutCw0L3Rh9GN0L3QvdGPIiwiTWVyZ2VMYXVuY2hEaWFsb2cubWVyZ2VUeXBlRGVlcCI6ItCf0L7RntC90LDQtSDQsNCxJ9GP0LTQsNC90L3QtSIsIk1lcmdlTGF1bmNoRGlhbG9nLm1lcmdlVHlwZUhlYWRpbmciOiLQktGL0LHRj9GA0YvRhtC1INGC0YvQvyDQsNCxJ9GP0LTQvdCw0L3QvdGPIiwiTWVyZ2VMYXVuY2hEaWFsb2cubWVyZ2VUeXBlTGluZWFyIjoi0JvRltC90LXQudC90LDQtSDQsNCxJ9GP0LTQvdCw0L3QvdC1IiwiTWV0aG9kVHlwZXMuYWZ0ZXJDbGFzcyI6ItCf0LDRgdC70Y8t0LrQu9Cw0YEiLCJNZXRob2RUeXBlcy5hZnRlckdyb3VwcyI6ItCf0LDRgdC70Y8t0LPRgNGD0L/RiyIsIk1ldGhvZFR5cGVzLmFmdGVyTWV0aG9kIjoi0J/QsNGB0LvRjy3QvNC10YLQsNC0IiwiTWV0aG9kVHlwZXMuYWZ0ZXJTdWl0ZSI6ItCf0LDRgdC70Y8t0LrQsNC80L/Qu9C10LrRgiIsIk1ldGhvZFR5cGVzLmFmdGVyVGVzdCI6ItCf0LDRgdC70Y8t0YLRjdGB0YIiLCJNZXRob2RUeXBlcy5iZWZvcmVDbGFzcyI6ItCf0LXRgNCw0LQt0LrQu9Cw0YEiLCJNZXRob2RUeXBlcy5iZWZvcmVHcm91cHMiOiLQn9C10YDQsNC0LdCz0YDRg9C/0YsiLCJNZXRob2RUeXBlcy5iZWZvcmVNZXRob2QiOiLQn9C10YDQsNC0LdC80LXRgtCw0LQiLCJNZXRob2RUeXBlcy5iZWZvcmVTdWl0ZSI6ItCf0LXRgNCw0LQt0LrQsNC80L/Qu9C10LrRgiIsIk1ldGhvZFR5cGVzLmJlZm9yZVRlc3QiOiLQn9C10YDQsNC0LdGC0Y3RgdGCIiwiTWV0aG9kVHlwZXMuc3RlcCI6ItCi0Y3RgdGCIiwiTWV0aG9kVHlwZXMudGVzdCI6ItCi0Y3RgdGCLdC60LvQsNGBIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIk1vc3RGYWlsZWRUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkluY2x1ZGVNZXRob2RzQ29udHJvbFRleHQiOiJJbmNsdWRlIEJlZm9yZSBhbmQgQWZ0ZXIgbWV0aG9kcyIsIk1vc3RGYWlsZWRUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6IkxhdW5jaGVzIGNvdW50IiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDIgdG8gMTUwIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZUZpZWxkTGFiZWwiOiJMYXVuY2ggbmFtZSIsIk1vc3RGYWlsZWRUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVGb2N1c1BsYWNlaG9sZGVyIjoiQXQgbGVhc3QgMyBzeW1ib2xzIHJlcXVpcmVkLiIsIk1vc3RGYWlsZWRUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIk1vc3RGYWlsZWRUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVQbGFjZWhvbGRlciI6IkVudGVyIGxhdW5jaCBuYW1lIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZXNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJNb3N0RmFpbGVkVGVzdHMuaGVhZGVyLmlzc3VlVHlwZS5hdXRvbWF0aW9uX2J1ZyI6ItCl0ZbQsdCwINCw0Z7RgtCw0LzQsNGC0YvQt9Cw0YbRi9GWIiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUuZmFpbGVkIjoi0J3Rj9Ge0LTQsNC70LAiLCJNb3N0RmFpbGVkVGVzdHMuaGVhZGVyLmlzc3VlVHlwZS5ub19kZWZlY3QiOiLQndGP0LzQsCDQtNGN0YTQtdC60YLQsNGeIiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUucHJvZHVjdF9idWciOiLQpdGW0LHQsCDQv9GA0LDQtNGD0LrRgtGDIiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUuc2tpcHBlZCI6ItCf0YDQsNC/0YPRiNGH0LDQvdCwIiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUuc3lzdGVtX2lzc3VlIjoi0KHRltGB0YLRjdC80L3QsNGPINC/0YDQsNCx0LvQtdC80LAiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLmlzc3Vlc0luRXhlYyI6ItC/0YDQsNCx0LvQtdC80Ysg0YMg0LfQsNC/0YPRgdC60LUiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLmlzc3Vlc0luRXhlY1Nob3J0Ijoi0L/RgNCw0LHQu9C10LzRiyIsIk1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIubGFzdElzc3VlIjoi0LDQv9C+0YjQvdGP0Y8g0L/RgNCw0LHQu9C10LzQsCIsIk1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIub2ZJc3N1ZXMiOiIlINC/0YDQsNCx0LvQtdC8ICIsIk1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIub2ZJc3N1ZXNTaG9ydCI6IiUg0L/RgNCw0LHQu9C10LwgIiwiTW9zdEZhaWxlZFRlc3RzLnRhYmxlLmhlYWRlci50ZXN0Q2FzZSI6ItCi0Y3RgdGC0LDQstGLINGB0YbRjdC90LDRgCIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuQ29udGVudEZpZWxkc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuSW5jbHVkZU1ldGhvZHNDb250cm9sVGV4dCI6IkluY2x1ZGUgQmVmb3JlIGFuZCBBZnRlciBtZXRob2RzIiwiTW9zdFRpbWVDb25zdW1pbmdUZXN0Q2FzZXNDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJMYXVuY2hlcyBjb3VudCIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuTGF1bmNoTmFtZUZpZWxkTGFiZWwiOiJMYXVuY2ggbmFtZSIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuTGF1bmNoTmFtZUZvY3VzUGxhY2Vob2xkZXIiOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQuIiwiTW9zdFRpbWVDb25zdW1pbmdUZXN0Q2FzZXNDb250cm9scy5MYXVuY2hOYW1lTm9NYXRjaGVzIjoiTm8gbWF0Y2hlcyBmb3VuZC4iLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkxhdW5jaE5hbWVQbGFjZWhvbGRlciI6IkVudGVyIGxhdW5jaCBuYW1lIiwiTW9zdFRpbWVDb25zdW1pbmdUZXN0Q2FzZXNDb250cm9scy5MYXVuY2hOYW1lc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsRmFpbGVkTWVzc2FnZSI6ItCd0LXQvNCw0LPRh9GL0LzQsCDQv9C10YDQsNC80Y/RgdGG0ZbRhtGMINC30LDQv9GD0YHQuiDQtNCwINCO0YHRltGFINC30LDQv9GD0YHQutCw0Lw6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsSGVhZGVyIjoi0L/QtdGA0LDQvNGP0YHRhtGW0YbRjCDQstCwINGe0YHQtSDQt9Cw0L/Rg9GB0LrRliIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsTXVsdGlwbGVGYWlsZWRNZXNzYWdlIjoi0J3QtdC80LDQs9GH0YvQvNCwINC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0LfQsNC/0YPRgdC60ZYg0LTQsCDQjtGB0ZbRhSDQt9Cw0L/Rg9GB0LrQsNC8OiB7bWVzc2FnZX0iLCJNb3ZlVG9EZWJ1Z01vZGFsLm1vdmVUb0FsbE11bHRpcGxlU3VjY2Vzc01lc3NhZ2UiOiLQl9Cw0L/Rg9GB0LrRliDQv9Cw0YHQv9GP0YXQvtCy0LAg0L/QtdGA0LDQvNC10YjRh9Cw0L3Ri9GPINC00LAg0I7RgdGW0YUg0LfQsNC/0YPRgdC60LDQvCIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsTXVsdGlwbGVUZXh0Ijoi0JLRiyDRhdC+0YfQsNGG0LUg0L/QtdGA0LDQvNGP0YHRhtGW0YbRjCDQstGL0LHRgNCw0L3Ri9GPINC30LDQv9GD0YHQutGWINCy0LAg0I7RgdC1INC30LDQv9GD0YHQutGWPyIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsU3VjY2Vzc01lc3NhZ2UiOiLQl9Cw0L/Rg9GB0Log0L/QsNGB0L/Rj9GF0L7QstCwINC/0LXRgNCw0LzQtdGI0YfQsNC90Ysg0Z4g0LTQsCDQjtGB0ZbRhSDQt9Cw0L/Rg9GB0LrQsNC8IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9BbGxUZXh0Ijoi0JLRiyDRhdC+0YfQsNGG0LUg0L/QtdGA0LDQvNGP0YHRhtGW0YbRjCDQt9Cw0L/Rg9GB0Log0LLQsCDQjtGB0LUg0LfQsNC/0YPRgdC60ZY/IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9EZWJ1ZyI6ItCS0Ysg0YXQvtGH0LDRhtC1INC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0LfQsNC/0YPRgdC6INGDINCQ0LTQu9Cw0LTQutGDPyIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdGYWlsZWRNZXNzYWdlIjoi0J3QtdC80LDQs9GH0YvQvNCwINC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0LfQsNC/0YPRgdC6INGDINCQ0LTQu9Cw0LTQutGDOiB7bWVzc2FnZX0iLCJNb3ZlVG9EZWJ1Z01vZGFsLm1vdmVUb0RlYnVnSGVhZGVyIjoi0J/QtdGA0LDQvNGP0YHRhtGW0YbRjCDRgyDQsNC00LvQsNC00LrRgyIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdNdWx0aXBsZSI6ItCS0Ysg0YXQvtGH0LDRhtC1INC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0LLRi9Cx0YDQsNC90YvRjyDQt9Cw0L/Rg9GB0LrRliDRniDQkNC00LvQsNC00LrRgz8iLCJNb3ZlVG9EZWJ1Z01vZGFsLm1vdmVUb0RlYnVnTXVsdGlwbGVGYWlsZWRNZXNzYWdlIjoi0J3QtdC80LDQs9GH0YvQvNCwINC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0LfQsNC/0YPRgdC60ZYg0Z4g0JDQtNC70LDQtNC60YM6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdNdWx0aXBsZVN1Y2Nlc3NNZXNzYWdlIjoi0JfQsNC/0YPRgdC60ZYg0L/QsNGB0L/Rj9GF0L7QstCwINC/0LXRgNCw0LzQtdGI0YfQsNC90YvRjyDRniDQkNC00LvQsNC00LrRgyIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdTdWNjZXNzTWVzc2FnZSI6ItCX0LDQv9GD0YHQuiDQv9Cw0YHQv9GP0YXQvtCy0LAg0L/QtdGA0LDQvNC10YjRh9Cw0L3RiyDRniDQkNC00LvQsNC00LrRgyIsIk5hbWVDb2x1bW4uYWRtaW5MYWJlbCI6ItCw0LTQvGnQvWnRgdGC0YDQsNGC0LDRgCIsIk5hbWVDb2x1bW4uY2hhbmdlQWNjb3VudFJvbGVOb3RpZmljYXRpb24iOiLQoNC+0LvRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDQtNC70Y8gJ3tuYW1lfScg0LfQvNC10L3QtdC90LAiLCJOYW1lQ29sdW1uLm1ha2VBZG1pbkxhYmVsIjoi0L/RgNGL0LfQvdCw0YfRi9GG0Ywg0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtCw0YDQsNC8IiwiTmFtZUNvbHVtbi55b3VMYWJlbCI6ItCy0YsiLCJOZXdzQmxvY2sudHdpdHRlclRpdGxlIjoi0JDQt9C90LDRkdC80ZbRhtGG0LAg0Lcg0L3QsNGI0YvQvNGWINCw0L/QvtGI0L3RltC80ZYg0YLQstGW0YLQsNC80ZYiLCJOb0RhdGFBdmFpbGFibGUubm9EYXRhTWVzc2FnZSI6Ik5vIGRhdGEgYXZhaWxhYmxlLiIsIk5vRmlsdGVyc0Jsb2NrLkJ1dHRvbiI6ItCU0LDQtNCw0YbRjCDRhNGW0LvRjNGC0YAiLCJOb0ZpbHRlcnNCbG9jay5saW5rIjoi0KHRgtCw0YDQvtC90YbRiyDQt9Cw0L/Rg9GB0LrQsNGeIiwiTm9GaWx0ZXJzQmxvY2subWVzc2FnZSI6ItCS0Ysg0LzQvtC20LDRhtC1INGB0YLQstCw0YDRi9GG0Ywg0YHQstC+0Lkg0L/QtdGA0YjRiyDRhNGW0LvRjNGC0YAg0L3QsCAiLCJOb0ZpbHRlcnNCbG9jay5vciI6ItCQ0LvRjNCx0L4iLCJOb0ZpbHRlcnNCbG9jay50aXRsZSI6Ilkg0JLQsNGBINC90Y/QvNCwINGE0ZbQu9GM0YLRgNCw0Z4iLCJOb1Jlc3VsdHNGb3JGaWx0ZXIuY2hlY2tRdWVyeSI6IkNoZWNrIHlvdXIgcXVlcnkgYW5kIHRyeSBhZ2FpbiIsIk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQubm9uUGFzc2VkQ2FzZXMiOiLRgdGG0Y3QvdCw0YDRi9GP0Z4sINGP0LrRltGPINC90LUg0L/RgNCw0LnRiNC70ZYiLCJOb3RQYXNzZWRUZXN0Q2FzZXNUcmVuZENvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiTm90UGFzc2VkVGVzdENhc2VzVHJlbmRDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJOb3RpZmljYXRpb24uZmFpbHVyZURlZmF1bHQiOiLQkNC00LHRi9C70LDRgdGPINC/0LDQvNGL0LvQutCwINC/0YDRiyDQv9Cw0LTQutC70Y7Rh9GN0L3QvdGWINC00LAg0YHQtdGA0LLQtdGA0LA6IHtlcnJvcn0iLCJOb3RpZmljYXRpb24uaW5mb0xvZ291dCI6ItCS0Ysg0LLRi9C50YjQu9GWIiwiTm90aWZpY2F0aW9uLnN1Y2Nlc3NMb2dpbiI6ItCf0LDRgdC/0Y/RhdC+0LLRiyDRntCy0LDRhdC+0LQiLCJOb3RpZmljYXRpb25DYXNlLmF0dHJpYnV0ZXNMYWJlbCI6ItCQ0YLRgNGL0LHRg9GC0YsgKNGWKSIsIk5vdGlmaWNhdGlvbkNhc2UuYXR0cmlidXRlc05vdGUiOiLQlNCw0YfRi9C70LDRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90ZYg0L/RgNCwINC30LDQv9GD0YHQutGWLCDRj9C60ZbRjyDRntGC0YDRi9C80LvRltCy0LDRjtGG0Ywg0L/QsNC30L3QsNGH0LDQvdGL0Y8g0LDRgtGA0YvQsdGD0YLRiyIsIk5vdGlmaWNhdGlvbkNhc2UuY29udHJvbFBhbmVsTmFtZSI6ItCf0YDQsNCy0ZbQu9CwIiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlQWx3YXlzIjoi0JfQsNGe0YHRkdC00YsiLCJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVGYWlsZWQiOiLQl9Cw0L/Rg9GB0Log0YPRgtGA0YvQvNC70ZbQstCw0LUg0L/RgNCw0LHQu9C10LzRiyIsIk5vdGlmaWNhdGlvbkNhc2UuZHJvcGRvd25WYWx1ZU1vcmUxMCI6Ij4gMTAlINGB0LrQu9Cw0LTQvdGW0LrQsNGeINGD0YLRgNGL0LzQu9GW0LLQsNGO0YbRjCDQv9GA0LDQsdC70LXQvNGLIiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlTW9yZTIwIjoiPiAyMCUg0YHQutC70LDQtNC90ZbQutCw0Z4g0YPRgtGA0YvQvNC70ZbQstCw0Y7RhtGMINC/0YDQsNCx0LvQtdC80YsiLCJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVNb3JlNTAiOiI+IDUwJSDRgdC60LvQsNC00L3RltC60LDRniDRg9GC0YDRi9C80LvRltCy0LDRjtGG0Ywg0L/RgNCw0LHQu9C10LzRiyIsIk5vdGlmaWNhdGlvbkNhc2UuZHJvcGRvd25WYWx1ZVRvSW52ZXN0aWdhdGUiOiLQl9Cw0L/Rg9GB0Log0YPRgtGA0YvQvNC70ZbQstCw0LUg0YHQutC70LDQtNC90ZbQutGWLCDRiNGC0L4g0L/QsNGC0YDQsNCx0YPRjtGG0Ywg0LDQvdCw0LvRltC30YMiLCJOb3RpZmljYXRpb25DYXNlLmR1cGxpY2F0aW9uRXJyb3JNZXNzYWdlIjoi0KLQsNC60L7QtSDQv9GA0LDQstGW0LvQsCDQsNC/0LDQstGP0YjRh9GN0L3QvdGP0Z4g0YPQttC+INGW0YHQvdGD0LUuINCS0Ysg0L3QtSDQvNC+0LbQsNGG0LUg0YHRgtCy0LDRgNGL0YbRjCDQtNGD0LHQu9GW0LrQsNGCLiIsIk5vdGlmaWNhdGlvbkNhc2UuaW5DYXNlTGFiZWwiOiLQoyDQstGL0L/QsNC00LrRgyIsIk5vdGlmaWNhdGlvbkNhc2UubGF1bmNoTmFtZXNIaW50Ijoi0J/RgNGL0L3QsNC80YHRliAzINC30L3QsNC60LAg0L3QtdCw0LHRhdC+0LTQvdCwINC00LvRjyDRgdCw0LzQsNC00LDQstGP0YDRiNGN0L3QvdGPLiIsIk5vdGlmaWNhdGlvbkNhc2UubGF1bmNoTmFtZXNMYWJlbCI6ItCd0LDQt9Cy0Ysg0JfQsNC/0YPRgdC60LDRniAo0ZYpIiwiTm90aWZpY2F0aW9uQ2FzZS5sYXVuY2hOYW1lc05vdGUiOiLQlNCw0YHRi9C70LDRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90ZYg0L/RgNCwINGB0LrQvtC90YfQsNC90YvRjyDQstGL0LvRg9GH0LDQvdGL0Y8g0LfQsNC/0YPRgdC60ZYiLCJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE5hbWVzUGxhY2Vob2xkZXIiOiLQktGL0LHQtdGA0YvRhtC1INGW0LzRkdC90Ysg0LfQsNC/0YPRgdC60LDQtSIsIk5vdGlmaWNhdGlvbkNhc2UubGF1bmNoT3duZXJMYWJlbCI6ItCj0LvQsNGB0L3RltC6INC30LDQv9GD0YHQutGDICjRhdGC0L4g0LfQsNC/0YPRgdC60LDRniAtINGC0L7QuSDQsNGC0YDRi9C80LDRnikiLCJOb3RpZmljYXRpb25DYXNlLnJlY2lwaWVudHNIaW50Ijoi0JrQsNC70ZYg0LvQsNGB0LrQsCwg0YPQstGP0LTQt9GW0YbQtSDQutCw0YDRjdC60YLQvdGLINGN0LvQtdC60YLRgNC+0L3QvdGLINCw0LTRgNCw0YEiLCJOb3RpZmljYXRpb25DYXNlLnJlY2lwaWVudHNMYWJlbCI6ItCQ0YLRgNGL0LzQsNC70YzQvdGW0LrRliIsIk5vdGlmaWNhdGlvbkNhc2UucmVjaXBpZW50c1BsYWNlaG9sZGVyIjoi0JLRi9C70YPRh9GL0YbQtSDRntC00LfQtdC70YzQvdGW0LrQsNGeINC60LDQvNCw0L3QtNGLIiwiTm90aWZpY2F0aW9uQ2FzZUxpc3QuYWRkTmV3UnVsZUJ1dHRvbiI6ItCU0LDQtNCw0YbRjCDQvdC+0LLQsNC1INC/0YDQsNCy0ZbQu9CwIiwiTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25zIjoi0J/QsNCy0LXQtNCw0LzQu9C10L3QvdGPINC/0LAg0Y3Qu9C10LrRgtGA0L7QvdC90LDQuSDQv9C+0YjRhtC1IiwiTm90aWZpY2F0aW9ucy5vZmZFbWFpbCI6ItCy0YvQutC70Y7Rh9GL0Z4iLCJOb3RpZmljYXRpb25zLm9uRW1haWwiOiLRgdC60LDQvdGE0ZbQs9GD0YDQsNCy0LDRniIsIk5vdGlmaWNhdGlvbnMudXBkYXRlRW1haWwiOiLQsNCx0L3QsNCy0ZbRniIsIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnRvZ2dsZU5vdGlmaWNhdGlvbnNMYWJlbCI6ItCQ0L/QsNCy0Y/RiNGH0Y3QvdC90ZYg0L/QsCDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGG0LUiLCJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50b2dnbGVOb3RpZmljYXRpb25zTm90ZSI6ItCU0LDRgdGL0LvQsNGG0Ywg0LDQv9Cw0LLRj9GI0YfRjdC90L3RliDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGC0Ysg0L/RgNCwINGB0LrQvtC90YfQsNC90YvRjyDQt9Cw0L/Rg9GB0LrRliIsIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnR1cm5PZmYiOiLQktCr0JrQmyIsIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnR1cm5PbiI6ItCj0JrQmyIsIk92ZXJhbGxTdGF0aXN0aWNzQ29udHJvbHMuQ29udGVudEZpZWxkc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIk92ZXJhbGxTdGF0aXN0aWNzQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIk92ZXJhbGxTdGF0aXN0aWNzQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJPdmVyYWxsU3RhdGlzdGljc0NvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIk93bmVyQmxvY2sub3duZXJUaXRsZSI6ItCj0LvQsNGB0L3QuNC6IiwiT3duZXJDb2x1bW4ub3duZXIiOiLQo9C70LDRgdC90ZbQujoiLCJPd25lcnNJbmZvLm5vRGF0YU1lc3NhZ2UiOiLQoyDQsNCx0YDQsNC90Ysg0L/QtdGA0YvRj9C0INC90LUg0LHRi9C70L4g0LLRi9C60LDQvdCw0L3QsCDQvdGW0LLQvtC00L3QsNCz0LAg0LfQsNC/0YPRgdC60YMiLCJQYWdlU2l6ZUNvbnRyb2wucGVyUGFnZSI6ItC90LAg0YHRgtCw0YDQvtC90YbRiyIsIlBhcmFtZXRlcnMua2V5SGVhZGVyIjoi0JrQu9GO0YciLCJQYXJhbWV0ZXJzLm5vUGFyYW1ldGVycyI6ItCd0Y/QvNCwINC/0LDRgNCw0LzQtdGC0YDQsNGeINC00LvRjyDQsNC00LvRjtGB0YLRgNCw0LLQsNC90L3RjyIsIlBhcmFtZXRlcnMudmFsdWVIZWFkZXIiOiLQl9C90LDRh9GN0L3QvdC1IiwiUGFzc2luZ1JhdGVQZXJMYXVuY2hDb250cm9scy5MYXVuY2hOYW1lRmllbGRMYWJlbCI6IkxhdW5jaCBuYW1lIiwiUGFzc2luZ1JhdGVQZXJMYXVuY2hDb250cm9scy5MYXVuY2hOYW1lRm9jdXNQbGFjZWhvbGRlciI6IkF0IGxlYXN0IDMgc3ltYm9scyByZXF1aXJlZC4iLCJQYXNzaW5nUmF0ZVBlckxhdW5jaENvbnRyb2xzLkxhdW5jaE5hbWVOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIlBhc3NpbmdSYXRlUGVyTGF1bmNoQ29udHJvbHMuTGF1bmNoTmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgbGF1bmNoIG5hbWUiLCJQYXNzaW5nUmF0ZVBlckxhdW5jaENvbnRyb2xzLkxhdW5jaE5hbWVzVmFsaWRhdGlvbkVycm9yIjoiWW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIiwiUGFzc2luZ1JhdGVTdW1tYXJ5Q29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJQYXNzaW5nUmF0ZVN1bW1hcnlDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJQZXJtaXNzaW9uTWFwLmFjdGlvbnNXaXRoSXRlbSI6ItCU0LfQtdGP0L3QvdGWINC3INGN0LvQtdC80LXQvdGC0LDQvCAo0LfQvNGP0L3RltGG0YwsINCy0YvQtNCw0LvRltGG0YwpIiwiUGVybWlzc2lvbk1hcC5hY3Rpb25zV2l0aExhdW5jaCI6ItCU0LfQtdGP0L3QvdGWINC3INC30LDQv9GD0YHQutCw0LzRliAo0LfQvNGP0L3RltGG0YwsINC/0YDRi9C80YPRgdC+0LLQsCDQt9Cw0LLRj9GA0YjRi9GG0YwsINCw0LEn0Y/QtNC90LDRhtGMLCDQstGL0LTQsNC70ZbRhtGMKSIsIlBlcm1pc3Npb25NYXAuYWN0aW9uc1dpdGhNZW1iZXJzIjoi0JTQt9C10Y/QvdC90ZYg0Lcg0YPQtNC30LXQu9GM0L3RltC60LDQvNGWICjQt9Cw0L/RgNCw0YHRltGG0YwsINC/0YDRi9C30L3QsNGH0YvRhtGMIC8g0LDQtNC80Y/QvdGW0YbRjCDQv9GA0YvQt9C90LDRh9GN0L3QvdC1LCDQsNCx0L3QsNCy0ZbRhtGMINGA0L7Qu9GWKSIsIlBlcm1pc3Npb25NYXAuYWRtaW4iOiLQkNC00LzRltC90ZbRgdGC0YDQsNGC0LDRgCIsIlBlcm1pc3Npb25NYXAuYXR0ZW50aW9uIjoi0JrQsNGA0YvRgdGC0LDQu9GM0L3RltC6INC3INGA0L7Qu9GP0Lkg0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtCw0YDQsCDQvNC+0LbQsCDQstGL0LrQvtC90LLQsNGG0Ywg0YPRgdC1INCw0L/QtdGA0LDRhtGL0ZYuIiwiUGVybWlzc2lvbk1hcC5jcmVhdGVTaGFyZUl0ZW0iOiLQodGC0LLQsNGA0YvRhtGMLCDQv9Cw0LTQt9GP0LvRltGG0YbQsCDRjdC70LXQvNC10L3RgtCw0LwiLCJQZXJtaXNzaW9uTWFwLmN1c3RvbWVyIjoi0JfQsNC60LDQt9GH0YvQuiIsIlBlcm1pc3Npb25NYXAuZGVsZXRlU2hhcmVkSXRlbSI6ItCS0YvQtNCw0LvRltGG0Ywg0LDQs9GD0LvRjNC90LDQtNCw0YHRgtGD0L/QvdGLINGN0LvQtdC80LXQvdGCIiwiUGVybWlzc2lvbk1hcC5lZGl0UHJvamVjdFNldHRpbmdzIjoi0JfQvNGP0L3RltGG0Ywg0L3QsNC70LDQtNGLINC/0YDQsNC10LrRgtCwIiwiUGVybWlzc2lvbk1hcC5lZGl0U2hhcmVkSXRlbSI6ItCX0LzRj9C90ZbRhtGMINCw0LPRg9C70YzQvdCw0LTQsNGB0YLRg9C/0L3RiyDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAuaW52ZXN0aWdhdGlvbkFjdGlvbnMiOiLQlNC30LXRj9C90L3RliDQtyDQsNC90LDQu9GW0LfQsNC8ICjRgtGL0L/RiyDQtNGN0YTQtdC60YLQsNGeINGWINC/0YvRgtCw0L3QvdGWINGeINGB0ZbRgdGC0Y3QvNC1INCw0LTRgdC+0YfQstCw0L3QvdGPINC/0LDQvNGL0LvQsNC6KSIsIlBlcm1pc3Npb25NYXAubGF1bmNoZXMiOiLQl9Cw0L/Rg9GB0LrRliIsIlBlcm1pc3Npb25NYXAubWFuYWdlciI6ItCc0LXQvdC10LTQttGN0YAiLCJQZXJtaXNzaW9uTWFwLm1hbnVhbEFuYWx5c2lzRXhwb3J0Q29tcGFyZUltcG9ydCI6ItCg0YPRh9C90L7QuSDQsNC90LDQu9GW0LcsINGN0LrRgdC/0LDRgNGCLCDQv9Cw0YDQsNGe0L3QsNC90L3QtSwg0ZbQvNC/0LDRgNGCINGE0YPQvdC60YbRi9GP0L3QsNC70YzQvdGL0YUg0LzQsNCz0YfRi9C80LDRgdGG0Y/RniIsIlBlcm1pc3Npb25NYXAubWVtYmVyIjoi0KPQtNC30LXQu9GM0L3RltC6IiwiUGVybWlzc2lvbk1hcC5tb3ZlTGF1bmNoVG9EZWJ1Z0RlZmF1bHQiOiLQn9C10YDQsNC80Y/RgdGG0ZbRhtGMINC30LDQv9GD0YHQutGWINGDKNC3KSDQsNC00LvQsNC00LrRgyjRlikiLCJQZXJtaXNzaW9uTWFwLm5vdE93bkxlZ2VuZCI6ItCd0Y/RntC70LDRgdC90Ysg0Y3Qu9C10LzQtdC90YIg0YHRgtCy0LDRgNCw0LXRhtGG0LAg0ZbQvdGI0LDQuSDQsNGB0L7QsdCw0LkiLCJQZXJtaXNzaW9uTWFwLm5vdE93blRpdGxlIjoi0J3Rj9Ge0LvQsNGB0L3RiyDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAub3BlcmF0b3IiOiLQkNC/0LXRgNCw0YLQsNGAIiwiUGVybWlzc2lvbk1hcC5vd25MZWdlbmQiOiLQo9C70LDRgdC90Ysg0Y3Qu9C10LzQtdC90YIg0YHRgtCy0LDRgNCw0LXRhtGG0LAg0YHQsNC80ZbQvCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNC8IiwiUGVybWlzc2lvbk1hcC5vd25UaXRsZSI6ItCj0LvQsNGB0L3RiyDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAucHJvamVjdE1hbmFnZW1lbnQiOiLQmtGW0YDQsNCy0LDQvdC90LUg0L/RgNCw0LXQutGC0LDQvCIsIlBlcm1pc3Npb25NYXAucHJvamVjdE1lbWJlcnMiOiLQo9C00LfQtdC70YzQvdGW0LrRliDQv9GA0LDQtdC60YLQsCIsIlBlcm1pc3Npb25NYXAucmVwb3J0TGF1bmNoIjoi0JfQsNC/0YPRgdGG0ZbRhtGMINGC0Y3RgdGC0YsiLCJQZXJtaXNzaW9uTWFwLnJvbGUiOiLQlNC30LXRj9C90L3QtSAvINCf0YDQsNC10LrRgtC90LDRjyDRgNC+0LvRjiIsIlBlcm1pc3Npb25NYXAuc3VpdGVUZXN0VGVzdEl0ZW0iOiLQmtCw0LzQv9C70LXQutGCIC8g0YLRjdGB0YIgLyDRgtGN0YHRgtCw0LLRiyDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAudmlld0luZm9BYm91dE1lbWJlcnMiOiLQkdCw0YfRi9GG0Ywg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0L/RgNCwINGe0LTQt9C10LvRjNC90ZbQutCw0Z4g0L/RgNCw0LXQutGC0LAiLCJQZXJtaXNzaW9uTWFwLnZpZXdMYXVuY2hJbkRlYnVnTW9kZSI6ItCR0LDRh9GL0YbRjCDRltC90YTQsNGA0LzQsNGG0YvRjiDQsNCxINC30LDQv9GD0YHQutCw0YUg0Z4g0YDRjdC20YvQvNC1INCy0YvQv9GA0LDRntC70LXQvdGM0L3RjyIsIlBlcm1pc3Npb25NYXAud2lkZ2V0RmlsdGVyRGFzaGJvYXJkIjoi0JLRltC00LbRjdGC0YsgLyDRhNGW0LvRjNGC0YDRiyAvINC/0LDQvdGN0LvRliDQutGW0YDQsNCy0LDQvdC90Y8iLCJQZXJtaXNzaW9uTWFwTW9kYWwuaGVhZGVyUGVybWlzc2lvbk1hcE1vZGFsIjoi0JrQsNGA0YLQsCDQv9GA0LDQstC+0Z4iLCJQZXJzb25hbEluZm8ubWVtYmVyQWRtaW4iOiLQkNC00LzRltC90ZbRgdGC0YDQsNGC0LDRgCIsIlBlcnNvbmFsSW5mby5tZW1iZXJZb3UiOiLQktGLIiwiUGVyc29uYWxJbmZvQmxvY2suY2hhbmdlUGFzc3dvcmQiOiLQl9C80Y/QvdGW0YbRjCDQv9Cw0YDQvtC70YwiLCJQZXJzb25hbEluZm9CbG9jay5lcnJvckNoYW5nZVBhc3N3b3JkIjoi0J/QsNC80YvQu9C60LAhINCd0LUg0Z7QtNCw0LXRhtGG0LAg0LfQvNGP0L3RltGG0Ywg0L/QsNGA0L7Qu9GMIiwiUGVyc29uYWxJbmZvQmxvY2suZm9yY2VVcGRhdGUiOiLQkNCx0L3QsNCy0ZbRhtGMINC/0YDRi9C80YPRgdC+0LLQsCIsIlBlcnNvbmFsSW5mb0Jsb2NrLmhlYWRlciI6ItCQ0YHQsNCx0ZbRgdGC0LDRjyDRltC90YTQsNGA0LzQsNGG0YvRjyIsIlBlcnNvbmFsSW5mb0Jsb2NrLnBhc3N3b3JkQ2hhbmdlZCI6ItCS0LDRiCDQv9Cw0YDQvtC70Ywg0L/QsNGB0L/Rj9GF0L7QstCwINC30LzQtdC90LXQvdGLIiwiUGVyc29uYWxJbmZvQmxvY2suc3luY2hyb25pemUiOiLQhtC90YTQsNGA0LzQsNGG0YvRjyDQsNCxINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutGDINC/0LDRgdC/0Y/RhdC+0LLQsCDRgdGW0L3RhdGA0LDQvdGW0LfQsNCy0LDQvdCwIiwiUGVyc29uYWxJbmZvQmxvY2suc3luY2hyb25pemVFcnJvciI6ItCd0LUg0Z7QtNCw0LXRhtGG0LAg0YHRltC90YXRgNCw0L3RltC30LDQstCw0YbRjCDQv9GA0L7RhNGW0LvRjCEiLCJQaG90b0NvbnRyb2xzLmRlbGV0ZUVycm9yIjoi0KTQvtGC0LAg0L3QtSDQsdGL0LvQviDQstGL0LTQsNC70LXQvdCw0LUg0L/QsNGB0L/Rj9GF0L7QstCwIiwiUGhvdG9Db250cm9scy5pbnZhbGlkSW1hZ2UiOiLQktGLINC80L7QttCw0YbQtSDQt9Cw0LPRgNGD0LfRltGG0Ywg0YTQsNC50LsganBlZywgcG5nLCBnaWYgZmlsZSwg0L3QtSDQsdC+0LvRjNGIINC30LAgMSDQvNC10LPQsNCx0LDQudGC0LAg0ZYgMzAweDUwMCDQv9GW0LrRgdC10LvRj9GeIiwiUGhvdG9Db250cm9scy5yZW1vdmVQaG90byI6ItCf0YDRi9Cx0YDQsNGG0Ywg0YTQvtGC0LDQt9C00YvQvNCw0LoiLCJQaG90b0NvbnRyb2xzLnNhdmVQaG90byI6ItCX0LDRhdCw0LLQsNGG0Ywg0YTQvtGC0LAiLCJQaG90b0NvbnRyb2xzLnN1Ym1pdFVwbG9hZCI6ItCk0L7RgtCwINC/0LDRgdC/0Y/RhdC+0LLQsCDQt9Cw0LPRgNGD0LbQsNC90LAiLCJQaG90b0NvbnRyb2xzLnVwbG9hZEVycm9yIjoi0J3QtSDRntC00LDQu9C+0YHRjyDQsNCx0L3QsNCy0ZbRhtGMINGE0L7RgtCwIiwiUGhvdG9Db250cm9scy51cGxvYWRQaG90byI6ItCX0LDQv9Cw0LzQv9Cw0LLQsNGG0Ywg0YTQvtGC0LDQt9C00YvQvNCw0LoiLCJQaG90b0NvbnRyb2xzLndhc0RlbGV0ZWQiOiLQpNC+0YLQsCDQv9Cw0YHQv9GP0YXQvtCy0LAg0LLRi9C00LDQu9C10L3QsCIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5CYXNpY0NvbHVtbnNGaWVsZExhYmVsIjoiQmFzaWMgY29sdW1ucyIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5GaWx0ZXJzRmllbGRMYWJlbCI6IkZpbHRlcnMiLCJQcm9kdWN0U3RhdHVzQ29udHJvbHMuRmlsdGVyc0ZvY3VzUGxhY2Vob2xkZXIiOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQuIiwiUHJvZHVjdFN0YXR1c0NvbnRyb2xzLkZpbHRlcnNOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5GaWx0ZXJzUGxhY2Vob2xkZXIiOiJFbnRlciBmaWx0ZXIgbmFtZXMiLCJQcm9kdWN0U3RhdHVzQ29udHJvbHMuRmlsdGVyc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5Hcm91cENvbnRyb2xUZXh0IjoiR3JvdXAgbGF1bmNoZXMgYnkgZmlsdGVyIiwiUHJvZHVjdFN0YXR1c0NvbnRyb2xzLlN0YXJ0VGltZUNyaXRlcmlhIjoiU3RhcnQgdGltZSIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5TdGF0dXNDcml0ZXJpYSI6IlN0YXR1cyIsIlByb2ZpbGVQYWdlLnRpdGxlIjoi0J/RgNC+0YTRltC70Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAiLCJQcm9qZWN0QWN0aXZpdHkuYXByaWwiOiLQmtGA0LDRgdCw0LLRltC6IiwiUHJvamVjdEFjdGl2aXR5LmF1Z3VzdCI6ItCW0L3RltCy0LXQvdGMIiwiUHJvamVjdEFjdGl2aXR5LmRlY2VtYmVyIjoi0KHQvdC10LbQsNC90YwiLCJQcm9qZWN0QWN0aXZpdHkuZmVicnVhcnkiOiLQm9GO0YLRiyIsIlByb2plY3RBY3Rpdml0eS5mcmlkYXkiOiLQn9GP0YLQvdGW0YbQsCIsIlByb2plY3RBY3Rpdml0eS5qYW51YXJ5Ijoi0KHRgtGD0LTQt9C10L3RjCIsIlByb2plY3RBY3Rpdml0eS5qdWx5Ijoi0JvRltC/0LXQvdGMIiwiUHJvamVjdEFjdGl2aXR5Lmp1bmUiOiLQp9GN0YDQstC10L3RjCIsIlByb2plY3RBY3Rpdml0eS5tYXJjaCI6ItCh0LDQutCw0LLRltC6IiwiUHJvamVjdEFjdGl2aXR5Lm1heSI6ItCc0LDQuSIsIlByb2plY3RBY3Rpdml0eS5tb25kYXkiOiLQn9Cw0L3Rj9C00LfQtdC70LDQuiIsIlByb2plY3RBY3Rpdml0eS5ub3ZlbWJlciI6ItCb0ZbRgdGC0LDQv9Cw0LQiLCJQcm9qZWN0QWN0aXZpdHkub2N0b2JlciI6ItCa0LDRgdGC0YDRi9GH0L3RltC6IiwiUHJvamVjdEFjdGl2aXR5LnByb2plY3RQcm9wcyI6ItGe0LvQsNGB0YbRltCy0LDRgdGG0ZYg0L/RgNCw0LXQutGC0LA6IiwiUHJvamVjdEFjdGl2aXR5LnNhdHVyZGF5Ijoi0KHRg9Cx0L7RgtCwIiwiUHJvamVjdEFjdGl2aXR5LnNlcHRlbWJlciI6ItCS0LXRgNCw0YHQtdC90YwiLCJQcm9qZWN0QWN0aXZpdHkuc3VuZGF5Ijoi0J3Rj9C00LfQtdC70Y8iLCJQcm9qZWN0QWN0aXZpdHkudGh1cnNkYXkiOiLQp9Cw0YbQstC10YAiLCJQcm9qZWN0QWN0aXZpdHkudG9kYXkiOiLQodGR0L3QvdGPIiwiUHJvamVjdEFjdGl2aXR5LnR1ZXNkYXkiOiLQkNGe0YLQvtGA0LDQuiIsIlByb2plY3RBY3Rpdml0eS51cGRhdGVQcm9qZWN0Ijoi0LDQsdC90LDQstGW0Z4iLCJQcm9qZWN0QWN0aXZpdHkud2VkbmVzZGF5Ijoi0KHQtdGA0LDQtNCwIiwiUHJvamVjdEFjdGl2aXR5Lnllc3RlcmRheSI6ItCj0YfQvtGA0LAiLCJQcm9qZWN0QWN0aXZpdHlDb250cm9scy5BY3Rpb25UeXBlc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLkNyaXRlcmlhRmllbGRMYWJlbCI6IkNyaXRlcmlhIGZvciB3aWRnZXQiLCJQcm9qZWN0QWN0aXZpdHlDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLlVzZXJuYW1lQ29udHJvbFRleHQiOiJVc2VyIG5hbWUiLCJQcm9qZWN0QWN0aXZpdHlDb250cm9scy5Vc2Vyc0ZvY3VzUGxhY2Vob2xkZXIiOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQuIiwiUHJvamVjdEFjdGl2aXR5Q29udHJvbHMuVXNlcnNOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLlVzZXJzUGxhY2Vob2xkZXIiOiJFbnRlciB1c2VyIG5hbWUiLCJQcm9qZWN0RGV0YWlsc1BhZ2VFdmVudHMudGl0bGUiOiLQn9Cw0LTQt9C10ZYiLCJQcm9qZWN0RGV0YWlsc1BhZ2VNZW1iZXJzLnRpdGxlIjoi0J3QsNC70LDQtNGLIiwiUHJvamVjdERldGFpbHNQYWdlU2V0dGluZ3MudGl0bGUiOiLQndCw0YHRgtGA0L7QudC60LgiLCJQcm9qZWN0Um9sZS5hbGxQZXJtaXNzaW9ucyI6ItCQ0LTQvNGW0L3RltGB0YLRgNCw0YLQsNGAINC80LDQtSDRntGB0LUg0L/RgNGL0LLRltC70LXRliDQt9Cz0L7QtNC90LAg0Lcg0LrQsNGA0YbQtSDQv9GA0LDQstCw0LLQvtCz0LAiLCJQcm9qZWN0Um9sZS5tb2JpbGVUaXRsZSI6ItCf0YDQsNC10LrRgtC90LDRjyDRgNC+0LvRjiIsIlByb2plY3RSb2xlLnVwZGF0ZU1lbWJlciI6ItCj0LTQt9C10LvRjNC90ZbQuiAnPGI+e25hbWV9PC9iPicg0LDQsdC90L7RntC70LXQvdGLIiwiUHJvamVjdFN0YXR1c1BhZ2Uub25lTW9udGgiOiIxINC80LXRgdGP0YYiLCJQcm9qZWN0U3RhdHVzUGFnZS5zaXhNb250aHMiOiI2INC80LXRgdGP0YbQsNGeIiwiUHJvamVjdFN0YXR1c1BhZ2UudGhyZWVNb250aHMiOiIzINC80LXRgdGP0YbQsCIsIlByb2plY3RzQW5kUm9sZXNDb2x1bW4ubW9yZSI6ItGP0YjRh9GNIiwiUHJvamVjdHNHcmlkLmxhc3RMYXVuY2hDb2wiOiLQlNCw0YLQsCDQsNC/0L7RiNC90Y/Qs9CwINC30LDQv9GD0YHQutGDIiwiUHJvamVjdHNHcmlkLmxhdW5jaGVzQ29sIjoi0JfQsNC/0YPRgdC60ZYiLCJQcm9qZWN0c0dyaWQubWVtYmVyc0NvbCI6ItCj0LTQt9C10LvRjNC90ZbQutGWIiwiUHJvamVjdHNHcmlkLm5hbWVDb2wiOiLQndCw0LfQstCwIiwiUHJvamVjdHNHcmlkLm9yZ2FuaXphdGlvbkNvbCI6ItCQ0YDQs9Cw0L3RltC30LDRhtGL0Y8iLCJQcm9qZWN0c0dyaWQucHJvamVjdFR5cGVDb2wiOiLQotGL0L8g0L/RgNCw0LXQutGC0LAiLCJQcm9qZWN0c1BhZ2UuYWRkUHJvamVjdCI6ItCU0LDQtNCw0YbRjCDQn9GA0LDQtdC60YIiLCJQcm9qZWN0c1BhZ2UudGl0bGUiOiLQo9GB0LUg0J/RgNCw0LXQutGC0YsiLCJQcm9qZWN0c1Rvb2xiYXIuZXhwb3J0Ijoi0K3QutGB0L/QsNGA0YLQsNCy0LDRhtGMIiwiUHJvamVjdHNUb29sYmFyLnNlYXJjaFBsYWNlaG9sZGVyIjoi0J/QvtGI0YPQuiIsIlJlZ2VuZXJhdGVVdWlkTW9kYWwuaGVhZGVyIjoi0KHRgtCy0LDRgNGL0YbRjCDQvdC+0LLRiyBVVUlEIiwiUmVnZW5lcmF0ZVV1aWRNb2RhbC50ZXh0Ijoi0KPRgdC1INC90LDRgdGC0YDQvtC10L3Ri9GPINCw0LPQtdC90YLRiyDRgdCwINGB0YLQsNGA0YvQvNGWIFVVSUQg0L3QtSDQsdGD0LTRg9GG0Ywg0L/RgNCw0YbQsNCy0LDRhtGMINC/0LDRgdC70Y8g0LPRjdGC0LDQs9CwIiwiUmVnZW5lcmF0ZVV1aWRNb2RhbC53YXJuaW5nIjoi0KPQstCw0LPQsCEiLCJSZWdpc3RyYXRpb25Gb3JtLmNvbmZpcm1QYXNzd29yZEhpbnQiOiLQn9Cw0YDQvtC70ZYg0L3QtSDRgdGD0L/QsNC00LDRjtGG0YwiLCJSZWdpc3RyYXRpb25Gb3JtLmxvZ2luQ29uc3RyYWludHMiOiIxLTEyOCDRgdGW0LzQstCw0LvQsNGeLCDQu9Cw0YbRltC90LrQsCwg0LvRltGH0LHQsNCy0YvRjyDRgdGW0LzQstCw0LvRiywg0YHRltC80LLQsNC70Ys6INC30LvRg9GH0L7Quiwg0L3RltC20L3Rj9C1INC/0LDQtNC60YDRjdGB0LvRltCy0LDQvdC90LUsINC60YDQvtC/0LrQsCIsIlJlZ2lzdHJhdGlvbkZvcm0ubG9naW5IaW50Ijoi0JvQsNCz0ZbQvSDQv9Cw0LLRltC90LXQvSDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMSDQtNCwIDEyOCDRgdGW0LzQstCw0LvQsNGeLCDRg9C60LvRjtGH0LDRjtGH0Ysg0LvQsNGG0ZbQvdC60YMsINC70ZbRh9Cx0YssINC30LvRg9GH0L7Quiwg0L3RltC20L3Rj9C1INC/0LDQtNC60YDRjdGB0LvRltCy0LDQvdC90LUsINC60YDQvtC/0LrRgy4iLCJSZWdpc3RyYXRpb25Gb3JtLmxvZ2luUGxhY2Vob2xkZXIiOiLQm9Cw0LPRltC9IiwiUmVnaXN0cmF0aW9uRm9ybS5uYW1lQ29uc3RyYWludHMiOiIzLTI1NiDRgdGW0LzQstCw0LvQsNGeLCDQu9Cw0YbRltC90LrQsCwg0LrRltGA0YvQu9GW0YbQsCwg0LvRltGH0LHRiywg0YHRltC80LLQsNC70Ys6INC30LvRg9GH0L7Quiwg0L/QsNC00LrRgNGN0YHQu9GW0LLQsNC90L3QtSwg0LrRgNC+0L/QutCwLCDQv9GA0LDQsdC10LsiLCJSZWdpc3RyYXRpb25Gb3JtLm5hbWVIaW50Ijoi0J/QvtGe0L3QsNC1INGW0LzRjyDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMyDQtNCwIDI1NiDRgdGW0LzQstCw0LvQsNGeLCDRg9C60LvRjtGH0LDRjtGH0Ysg0LvQsNGG0ZbQvdC60YMsINC60ZbRgNGL0LvRltGG0YMsINC70ZbRh9Cx0YssINC30LvRg9GH0L7Quiwg0L3RltC20L3Rj9C1INC/0LDQtNC60YDRjdGB0LvRltCy0LDQvdC90LUsINC60YDQvtC/0LrRgywg0L/RgNCw0LHQtdC7LiIsIlJlZ2lzdHJhdGlvbkZvcm0ubmFtZVBsYWNlaG9sZGVyIjoi0J/QvtGe0L3QsNC1INGW0LzRjyIsIlJlZ2lzdHJhdGlvbkZvcm0ucGFzc3dvcmRDb25maXJtUGxhY2Vob2xkZXIiOiLQn9Cw0LTRhtCy0LXRgNC00LfRltGG0Ywg0L/QsNGA0L7Qu9GMIiwiUmVnaXN0cmF0aW9uRm9ybS5wYXNzd29yZENvbnN0cmFpbnRzIjoiNC0xMjgg0YHRltC80LLQsNC70LDRniIsIlJlZ2lzdHJhdGlvbkZvcm0ucGFzc3dvcmRIaW50Ijoi0J/QsNGA0L7Qu9GMINC/0LDQstGW0L3QtdC9INC80LXRhtGMINC/0LDQvNC10YAg0LDQtCA0INC00LAgMTI4INGB0ZbQvNCy0LDQu9Cw0Z4iLCJSZWdpc3RyYXRpb25Gb3JtLnBhc3N3b3JkUGxhY2Vob2xkZXIiOiLQn9Cw0YDQvtC70YwiLCJSZWdpc3RyYXRpb25Gb3JtLnJlZ2lzdGVyIjoi0JfQsNGA0Y3Qs9GW0YHRgtGA0LDQstCw0YbRjCIsIlJlZ2lzdHJhdGlvbkZvcm0ucmVzZXQiOiLQodC60ZbQvdGD0YbRjCIsIlJlZ2lzdHJhdGlvblBhZ2UuY291cGxlTWludXRlcyI6ItCT0Y3RgtCwINC30L7QudC80LUg0Z7RgdGP0LPQviDQvdC10LrQsNC70YzQutGWINGF0LLRltC70ZbQvSwg0LrQsNCxINC/0LDRh9Cw0YbRjCIsIlJlZ2lzdHJhdGlvblBhZ2Uub29wcyI6ItCe0LksIiwiUmVnaXN0cmF0aW9uUGFnZS5yZWdpc3RyYXRpb24iOiLQt9Cw0L/QvtGe0L3RltGG0LUg0YDRjdCz0ZbRgdGC0YDQsNGG0YvQudC90YPRjiDRhNC+0YDQvNGDIiwiUmVnaXN0cmF0aW9uUGFnZS50b2tlbkV4cGlyZWQiOiLQk9GN0YLQsCDQt9Cw0L/RgNCw0YjRjdC90L3QtSDRgdC60L7QvdGH0YvQu9Cw0YHRjyDQsNCx0L4g0Z7QttC+INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwIiwiUmVnaXN0cmF0aW9uUGFnZS50b2tlbk5vdFByb3ZpZGVkIjoi0LfQsNC/0YDQsNGI0Y3QvdC90LUg0L3QtSDQsdGL0LvQviDQv9GA0LDQtNCw0YHRgtCw0Z7Qu9C10L3QsCDRniDQv9Cw0YDQsNC80LXRgtGA0LDRhSBVUkwiLCJSZWdpc3RyYXRpb25QYWdlLnZpc2l0Ijoi0J3QsNCy0LXQtNCw0LnRhtC1IiwiUmVnaXN0cmF0aW9uUGFnZS53ZWxjb21lIjoi0JTQsNCx0YDQviDQt9Cw0L/RgNCw0YjQsNC10LwsIiwiUmVtb3ZlSW5kZXhNb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSI6ItCS0Ysg0Z7Qv9GN0Z7QvdC10L3Riywg0YjRgtC+INC20LDQtNCw0LXRhtC1INCy0YvQtNCw0LvRltGG0Ywg0YPRgdGOINGW0L3RhNCw0YDQvNCw0YbRi9GOINC3IEVsYXN0aWNTZWFyY2g/IiwiUmVtb3ZlSW5kZXhNb2RhbC5oZWFkZXJSZW1vdmVJbmRleE1vZGFsIjoi0JLRi9C00LDQu9GW0YbRjCDRltC90LTRjdC60YEiLCJSZW1vdmVJbmRleE1vZGFsLnJlbW92ZUJ1dHRvblRleHQiOiLQktGL0LTQsNC70ZbRhtGMIiwiUmVtb3ZlSW5kZXhNb2RhbC5yZW1vdmVFcnJvck5vdGlmaWNhdGlvbiI6IlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIiwiUmVtb3ZlSW5kZXhNb2RhbC5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0IbQvdC00Y3QutGBINCx0YvRniDQv9Cw0YHQv9GP0YXQvtCy0LAg0LLRi9C00LDQu9C10L3RiyIsIlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLmNvbnRlbnRIZWFkZXJNZXNzYWdlIjoi0JLRiyDRntC/0Y3RntC90LXQvdGLLCDRiNGC0L4g0LbQsNC00LDQtdGG0LUg0LLRi9C00LDQu9GW0YbRjCDQstGL0LHRgNCw0L3Rg9GOINCw0YDQs9Cw0L3RltC30LDRhtGL0Y4/INCO0YHQtSDQv9GA0YvQt9C90LDRh9Cw0L3Ri9GPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutGWINC90LUg0LfQvNC+0LPRg9GG0Ywg0LDRntGC0LDRgNGL0LfQsNCy0LDRhtGG0LAg0L3QsCBSZXBvcnQgUG9ydGFsLiIsIlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLnJlbW92ZU9yZ2FuaXphdGlvbkhlYWRlciI6ItCS0YvQtNCw0LvRltGG0Ywg0LDRgNCz0LDQvdGW0LfQsNGG0YvRjiBnaXRodWIiLCJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0JDRgNCz0LDQvdGW0LfQsNGG0YvRjyDRniBHaXRIdWIg0LLRi9C00LDQu9C10L3QsCIsIlJldHJpZXNDb3VudGVyLmxhYmVsIjoie2NvdW50fSByZXRyaWVzIiwiU2Nyb2xsV3JhcHBlci5iYWNrVG9Ub3AiOiLQo9Cy0LXRgNGFIiwiU2VhcmNoRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lU2VhcmNoSGludCI6ItCd0LDQt9Cy0LAg0L/QsNC90Y3Qu9GWINC60ZbRgNCw0LLQsNC90L3RjyDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMyDQtNCwIDEyOC4iLCJTZXJ2ZXJTZXR0aW5nc1BhZ2UudGl0bGUiOiLQndCw0LvQsNC00Ysg0YHQtdGA0LLQtdGA0LAiLCJTZXJ2ZXJTZXR0aW5nc1RhYnMuYXV0aENvbmZpZ3VyYXRpb24iOiLQndCw0LvQsNC00Ysg0LDRntGC0LDRgNGL0LfQsNGG0YvRliIsIlNlcnZlclNldHRpbmdzVGFicy5lTWFpbFNlcnZlciI6ItCf0LDRiNGC0L7QstGLINGB0LXRgNCy0LXRgCIsIlNlcnZlclNldHRpbmdzVGFicy5zdGF0aXN0aWNzIjoi0KHRgtCw0YLRi9GB0YLRi9C60LAiLCJTZXJ2ZXJTZXR0aW5nc1RhYnMudXBkYXRlQXV0aFN1Y2Nlc3MiOiLQndCw0LvQsNC00Ysg0ZbQvdGC0Y3Qs9GA0LDRhtGL0ZYgT0F1dGgg0LDQsdC90L7RntC70LXQvdGLIiwiU2VydmVyU2V0dGluZ3NUYWJzLndhcm5pbmdNZXNzYWdlIjoi0J3QtSDQsNGC0YDRi9C80LDQu9Cw0YHRjyDRntGB0YLQsNC70Y/QstCw0YbRjCDRgtGN0YHRgtCw0LLQsNC1INC30LvRg9GH0Y3QvdC90LU6IiwiU2VydmljZVZlcnNpb25JdGVtLm5ld1ZlcnNpb24iOiLQlNCw0YHRgtGD0L/QvdGLINC90L7QstGL0Y8g0LLQtdGA0YHRltGWOiB7bmV3VmVyc2lvbn0iLCJTZXJ2aWNlVmVyc2lvbnNCbG9jay5jdXJyZW50VmVyc2lvbiI6ItCR0Y/Qs9GD0YfQsNGPINCy0LXRgNGB0ZbRjyIsIlNldHRpbmdzUGFnZS5hbmFseXNpcyI6ItCQ0Z7RgtCwLdCQ0L3QsNC70ZbQtyIsIlNldHRpbmdzUGFnZS5kZWZlY3QiOiLQotGL0L/RiyDQtNGN0YTQtdC60YLQsNGeIiwiU2V0dGluZ3NQYWdlLmRlbW9EYXRhIjoi0JTRjdC80LAt0LTQsNC00LfQtdC90YvRjyIsIlNldHRpbmdzUGFnZS5nZW5lcmFsIjoi0JDQs9GD0LvRjNC90LDQtSIsIlNldHRpbmdzUGFnZS5pbnRlZ3JhdGlvbnMiOiLQhtC90YLRjdCz0YDQsNGG0YvRliIsIlNldHRpbmdzUGFnZS5ub3RpZmljYXRpb25zIjoi0JDQv9Cw0LLRj9GI0YfRjdC90L3RjyIsIlNldHRpbmdzUGFnZS50aXRsZSI6ItCd0LDQu9Cw0LTRiyIsIlNoYXJlRmlsdGVyLnNoYXJlZCI6ItCQ0L/Rg9Cx0LvRltC60LDQstCw0L3RizoiLCJTaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24ud2lkZ2V0c0xpc3RIZWFkZXIiOiJTZWxlY3Qgc2hhcmVkIHdpZGdldCIsIlNoYXJlZFdpZGdldHNTZWFyY2guc2VhcmNoSW5wdXRQbGFjZWhvbGRlciI6IlNlYXJjaCBieSBuYW1lLCBvd25lciIsIlNoYXJlZFdpZGdldHNTZWFyY2guc2hhcmVkV2lkZ2V0U2VhcmNoSGludCI6IlZhbHVlIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDI1Ni4iLCJTaWRlYmFyLmFkbWluaXN0cmF0ZUJ0biI6ItCQ0LTQvNGW0L3RltGB0YLRgNCw0LLQsNGG0YwiLCJTaWRlYmFyLmRhc2hib2FyZHNCdG4iOiLQn9Cw0L3RjdC70Ywg0LrRltGA0LDQstCw0L3QvdGPIiwiU2lkZWJhci5kZWJ1Z0J0biI6ItCQ0LTQu9Cw0LTQutCwIiwiU2lkZWJhci5maWx0ZXJzQnRuIjoi0KTRltC70YzRgtGA0YsiLCJTaWRlYmFyLmxhdW5jaGVzQnRuIjoi0JfQsNC/0YPRgdC60ZYiLCJTaWRlYmFyLmxvZ291dEJ0biI6ItCS0YvQudGB0YbRliIsIlNpZGViYXIucHJvZmlsZUJ0biI6ItCf0YDQvtGE0ZbQu9GMIiwiU3RhY2tUcmFjZS5lbXB0eU1lc3NhZ2UiOiJObyBzdGFjayB0cmFjZSB0byBkaXNwbGF5IiwiU3RhY2tUcmFjZS5saW5rVGV4dCI6Ik9wZW4gaW4gTG9nIHZpZXciLCJTdGFja1RyYWNlLm1lc3NhZ2VSZWZDYXB0aW9uIjoi0J/QtdGA0LDQudC00LfRltGG0LUg0LTQsCDRgtGA0LDRgdGW0YDQvtGe0LrRliDRgdGC0Y3QutCwINGeINC30LDQv9GW0YHQtSDQu9C+0LPQsCIsIlN0YWNrVHJhY2Uubm9TdGFja1RyYWNlIjoi0J3Rj9C80LAg0YLRgNCw0YHRltGA0L7RntC60ZYg0YHRgtGN0LrQsCDQtNC70Y8g0LDQtNC70Y7RgdGC0YDQsNCy0LDQvdC90Y8iLCJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NFbmFibGVkIjoi0JTQsNC/0LDQvNCw0LbRi9GG0LUg0L3QsNC8INC30YDQsNCx0ZbRhtGMIFJlcG9ydFBvcnRhbCDQu9C10L/RiCDQtyDQtNCw0L/QsNC80L7Qs9Cw0Lkg0LDRntGC0LDQvNCw0YLRi9GH0L3QsNC5INCw0LTQv9GA0LDRntC60ZYg0YHRgtCw0YLRi9GB0YLRi9C60ZYiLCJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NJbmZvIjoi0JLRiyDQvNC+0LbQsNGG0LUg0LTQsNC/0LDQvNCw0LPRh9GLINC90LDQvCDQv9Cw0LvQtdC/0YjRi9GG0YwgUmVwb3J0UG9ydGFsLCDQstGL0LHRltGA0LDRjtGH0Ysg0LDQtNC/0YDQsNCy0ZbRhtGMINGB0YLQsNGC0YvRgdGC0YvQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3Rjy4g0J/QsNC60YPQu9GMINCy0Ysg0LHRg9C00LfQtdGG0LUg0LrQsNGA0YvRgdGC0LDRhtGG0LAg0LTQsNC00LDRgtC60LDQvCwg0LzRiyDQsdGD0LTQt9C10Lwg0LfQsdGW0YDQsNGG0Ywg0LTQsNC00LfQtdC90YvRjywg0Y/QutGW0Y8g0LzQvtCz0YPRgtGMINC00LDQv9Cw0LzQsNCz0YfRiyDQvdCw0Lwg0L/QsNCy0YvRgdGW0YbRjCDRjdGE0LXQutGC0YvRntC90LDRgdGG0Ywg0ZYg0LfRgNGD0YfQvdCw0YHRhtGMINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyBSZXBvcnRQb3J0YWwg0YjQu9GP0YXQsNC8INCw0LTRgdC+0YfQstCw0L3QvdGPINGH0LDRgdGC0L7RgtGLINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQv9GN0Z7QvdGL0YUg0YTRg9C90LrRhtGL0LkuINCd0ZbQttGN0LkgLSDQsdC+0LvRjNGIINC/0LDQtNGA0LDQsdGP0LfQvdCwINC/0YDQsCDRgtC+0LUsINGP0LrQsNGPINGW0L3RhNCw0YDQvNCw0YbRi9GPINCw0LTQv9GA0LDRntC70Y/QtdGG0YbQsC4iLCJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NMaXN0Ijoi0KHQn9CG0KEg0JDQlNCf0KDQkNCO0JvQldCd0J3QlSDQodCi0JDQotCr0KHQotCr0JrQhiIsIlN0YXRpc3RpY3NUYWIuc3RhdGlzdGljc0xpc3RNZXNzYWdlIjoi0KHQv9GA0LDQstCw0LfQtNCw0YfRiyDQsNCxINGB0YLQsNGC0YvRgdGC0YvRhtGLINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdCwINC90LUg0Z7QutC70Y7Rh9Cw0Y7RhtGMINCw0YHQsNCx0ZbRgdGC0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiwg0LDQu9C1INGeINGW0YUg0LzQvtC20LAg0Z7QstCw0YXQvtC00LfRltGG0Yw6IiwiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzTGlzdFBvaW50MSI6ItCG0L3RhNCw0YDQvNCw0YbRi9GPINC/0YDQsCDQv9GA0YvQu9Cw0LTRgzog0LzQsNC00Y3Qu9GMINCy0LDRiNCw0LPQsCDQsNCx0YHRgtCw0LvRj9Cy0LDQvdC90Y8sINCy0LXRgNGB0ZbRjyDQsNC/0LXRgNCw0YbRi9C50L3QsNC5INGB0ZbRgdGC0Y3QvNGLLCDQtNCw0LfQstC+0Lsg0Y3QutGA0LDQvdCwLCDQstC10YDRgdGW0Y8g0LHRgNCw0Z7Qt9GN0YDQsDsiLCJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NMaXN0UG9pbnQyIjoi0IbQvdGE0LDRgNC80LDRhtGL0Y8g0L/RgNCwINGH0LDRgdC+0L/RltGBOiDQv9Cw0LTRgNCw0LHRj9C30L3QsNGB0YbRliDQstCw0YjQsNCz0LAg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPIFJlcG9ydFBvcnRhbCwg0L3QsCDRiNGC0L4g0LLRiyDQvdCw0YbRltGB0LrQsNC10YbQtSDRliDRj9C60ZbRjyDQtNC30LXRj9C90L3RliDQstGL0YDQsNCx0LvRj9C10YbQtSwg0Y/QuiDQtNC+0Z7Qs9CwINGC0YDRi9C80LDQtdGG0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQsNC00LrRgNGL0YLRi9C8LiIsIlN0YXRpc3RpY3NUYWIudXBkYXRlU3RhdGlzdGljc0VuYWJsZWRTdWNjZXNzIjoi0J3QsNGB0YLRgNC+0LnQutGWINGB0LXRgNCy0LXRgNCwINC/0LDRgdC/0Y/RhdC+0LLQsCDQsNCx0L3QvtGe0LvQtdC90YvRjyIsIlN0YXR1c1BhZ2VDb250ZW50LmFjdGl2aXRpZXMiOiLQn9Cw0L3RjdC70Ywg0LDQutGC0YvRntC90LDRgdGG0ZYg0L/RgNCw0LXQutGC0LAiLCJTdGF0dXNQYWdlQ29udGVudC5hdXRvQnVncyI6ItCf0YDQsNGG0Y3QvdGCINC/0LDQvNGL0LvQsNC6INGC0Y3RgdGC0LDRniIsIlN0YXR1c1BhZ2VDb250ZW50LmdlbmVyYWwiOiLQkNCz0YPQu9GM0L3QsNGPINGW0L3RhNCw0YDQvNCw0YbRi9GPIiwiU3RhdHVzUGFnZUNvbnRlbnQuaW52ZXN0aWdhdGVkIjoi0J/RgNCw0YbRjdC90YIg0LTQsNGB0LvQtdC00LDQstCw0L3QvdGP0Z4iLCJTdGF0dXNQYWdlQ29udGVudC5pc3N1ZXNDaGFydCI6ItCf0YDQsNGG0Y3QvdGCINC00Y3RhNC10LrRgtCw0Z4g0L/RgNCw0LTRg9C60YLRgyIsIlN0YXR1c1BhZ2VDb250ZW50Lmxhc3RMYXVuY2giOiLQodGC0LDRgtGL0YHRgtGL0LrQsCDQsNC/0L7RiNC90Y/Qs9CwINC30LDQv9GD0YHQutGDIiwiU3RhdHVzUGFnZUNvbnRlbnQubGF1bmNoU3RhdGlzdGljcyI6ItCh0YLQsNGC0YvRgdGC0YvQutCwINC30LDQv9GD0YHQutGDIiwiU3RhdHVzUGFnZUNvbnRlbnQubGF1bmNoZXNRdWFudGl0eSI6ItCa0L7Qu9GM0LrQsNGB0YbRjCDQt9Cw0L/Rg9GB0LrQsNGeIiwiU3RhdHVzUGFnZUNvbnRlbnQub3duZXJzIjoi0KPQu9Cw0LTQsNC70YzQvdGW0LrRliDQt9Cw0L/Rg9GB0LrQsNGeIiwiU3RhdHVzUGFnZUNvbnRlbnQuc3lzdGVtSXNzdWVzIjoi0J/RgNCw0YbRjdC90YIg0YHRltGB0YLRjdC80L3Ri9GFINC/0LDQvNGL0LvQsNC6IiwiU3RlcEdyaWQuaGlkZVByZWNvbmRpdGlvbk1ldGhvZHMiOiLQoNCw0LfQs9Cw0YDQvdGW0YbQtSDQvNC10YLQsNC00Ysg0L/QtdGA0LDQtNGD0LzQvtGeIiwiU3RlcEdyaWQuaWdub3JlQUFTaG9ydCI6Iklnbm9yZSBBQSIsIlN0ZXBHcmlkLmlnbm9yZUF1dG9hbmFseXplclRvb2x0aXAiOiJJZ25vcmUgaXRlbSBpbiBBdXRvLUFuYWx5c2lzIiwiU3RlcEdyaWQuc2hvd1ByZWNvbmRpdGlvbk1ldGhvZHMiOiLQl9Cz0LDRgNC90ZbRhtC1INC80LXRgtCw0LTRiyDQv9C10YDQsNC00YPQvNC+0Z4iLCJTdGVwTGV2ZWxFbnRpdGllcy5BVVRPTUFUSU9OX0JVR19BTEwiOiLQo9GB0LUg0YXRltCx0Ysg0LDRntGC0LDQvNCw0YLRi9C30LDRhtGL0ZYiLCJTdGVwTGV2ZWxFbnRpdGllcy5BbmFseXNlT3B0aW9uMSI6J9CXINC/0LDQt9C90LDQutCw0LkgItCQ0JAiJywiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZU9wdGlvbjIiOifQkdC10Lcg0L/QsNC30L3QsNC60ZYgItCQ0JAiJywiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZVRpdGxlIjoi0JTQvtGB0LvQtdC00L3RiyDQv9CwIFJQIChBQSkiLCJTdGVwTGV2ZWxFbnRpdGllcy5CdHNJc3N1ZU9wdGlvbjEiOiLQodCwINC30LLRj9C30LDQvdGL0LzRliDQodCQ0KUiLCJTdGVwTGV2ZWxFbnRpdGllcy5CdHNJc3N1ZU9wdGlvbjIiOiLQkdC10Lcg0LfQstGP0LfQsNC90YvRhSDQv9Cw0LzRi9C70LDQuiIsIlN0ZXBMZXZlbEVudGl0aWVzLkJ0c0lzc3VlVGl0bGUiOiLQn9Cw0LzRi9C70LrRliDRniDQodCQ0KUiLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RDb21tZW50UGxhY2Vob2xkZXIiOiLQo9Cy0Y/QtNC30ZbRhtC1INC60LDQvNC10L3RgtCw0YDRi9C5IiwiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0Q29tbWVudFRpdGxlIjoi0JrQsNC80LXQvdGC0LDRgNGL0Lkg0LTQsCDQtNGN0YTQtdC60YLRgyIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdFR5cGVUaXRsZSI6ItCi0YvQvyDQtNGN0YTQtdC60YLRgyIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX0FCMDAxIjoi0KXRltCx0Ysg0LDRntGC0LDQvNCw0YLRi9C30LDRhtGL0ZYiLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RfVHlwZV9ORDAwMSI6ItCd0Y/QvNCwINC00Y3RhNC10LrRgtCw0Z4iLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RfVHlwZV9QQjAwMSI6ItCl0ZbQsdGLINC/0YDQsNC00YPQutGC0YMiLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RfVHlwZV9TSTAwMSI6ItCh0ZbRgdGC0Y3QvNC90YvRjyDQv9GA0LDQsdC70LXQvNGLIiwiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0X1R5cGVfVEkwMDEiOiLQndC10LDQsdGF0L7QtNC90Ysg0LDQvdCw0LvRltC3IiwiU3RlcExldmVsRW50aXRpZXMuRGVzY3JpcHRpb25QbGFjZWhvbGRlciI6ItCj0LLRj9C00LfRltGG0LUg0LDQv9GW0YHQsNC90L3QtSIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlc2NyaXB0aW9uVGl0bGUiOiLQkNC/0ZbRgdCw0L3QvdC1IiwiU3RlcExldmVsRW50aXRpZXMuSWdub3JlQUFPcHRpb24xIjon0Jcg0L/QsNC30L3QsNC60LDQuSAi0ZbQs9C90LDRgNCw0LLQsNGG0Ywg0JDQkCInLCJTdGVwTGV2ZWxFbnRpdGllcy5JZ25vcmVBQU9wdGlvbjIiOifQkdC10Lcg0L/QsNC30L3QsNC60ZYgItGW0LPQvdCw0YDQsNCy0LDRhtGMINCQ0JAiJywiU3RlcExldmVsRW50aXRpZXMuSWdub3JlQUFUaXRsZSI6ItCG0LPQvdCw0YDQsNCy0LDRhtGMINCy0LAgQUEiLCJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNGYWlsZWQiOiLQndGP0Z7QtNCw0LvRiyIsIlN0ZXBMZXZlbEVudGl0aWVzLkxhdW5jaFN0YXR1c0luUHJvZ3Jlc3MiOiLQoyDQv9GA0LDRhtGN0YHQtSIsIlN0ZXBMZXZlbEVudGl0aWVzLkxhdW5jaFN0YXR1c0ludGVycnVwdGVkIjoi0J/QtdGA0LDRgNCy0LDQvdGLIiwiU3RlcExldmVsRW50aXRpZXMuTGF1bmNoU3RhdHVzUGFzc2VkIjoi0J/QsNGB0L/Rj9GF0L7QstGLIiwiU3RlcExldmVsRW50aXRpZXMuTGF1bmNoU3RhdHVzU2tpcHBlZCI6ItCf0YDQsNC/0YPRiNGH0LDQvdGLIiwiU3RlcExldmVsRW50aXRpZXMuTWV0aG9kVHlwZVRpdGxlIjoi0KLRi9C/INCc0LXRgtCw0LTRgyIsIlN0ZXBMZXZlbEVudGl0aWVzLk5PX0RFRkVDVF9BTEwiOiLQo9GB0LUg0LHQtdC3INC00Y3RhNC10LrRgtCw0Z4iLCJTdGVwTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiOiLQhtC80Y8g0KLRjdGB0YLQsCIsIlN0ZXBMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX0FMTCI6ItCj0YHQtSDRhdGW0LHRiyDQv9GA0LDQtNGD0LrRgtGDIiwiU3RlcExldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX0FMTCI6ItCj0YHQtSDRgdGW0YHRgtGN0LzQvdGL0Y8g0L/RgNCw0LHQu9C10LzRiyIsIlN0ZXBMZXZlbEVudGl0aWVzLlN0YXJ0VGltZVRpdGxlIjoi0KfQsNGBINC30LDQv9GD0YHQutGDIiwiU3RlcExldmVsRW50aXRpZXMuU3RhdHVzVGl0bGUiOiLQodGC0LDRgtGD0YEiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJDbGFzcyI6ItCf0LDRgdC70Y8t0LrQu9Cw0YEiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJHcm91cHMiOiLQn9Cw0YHQu9GPLdCz0YDRg9C/0YsiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJNZXRob2QiOiLQn9Cw0YHQu9GPLdC80LXRgtCw0LQiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJTdWl0ZSI6ItCf0LDRgdC70Y8t0LrQsNC80L/Qu9C10LrRgiIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlclRlc3QiOiLQn9Cw0YHQu9GPLdGC0Y3RgdGCIiwiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZUNsYXNzIjoi0J/QtdGA0LDQtC3QutC70LDRgSIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVCZWZvcmVHcm91cHMiOiLQn9C10YDQsNC0LdCz0YDRg9C/0YsiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQmVmb3JlTWV0aG9kIjoi0J/QtdGA0LDQtC3QvNC10YLQsNC0IiwiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZVN1aXRlIjoi0J/QtdGA0LDQtC3QutCw0LzQv9C70LXQutGCIiwiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZVRlc3QiOiLQn9C10YDQsNC0LdGC0Y3RgdGCIiwiU3RlcExldmVsRW50aXRpZXMuVHlwZVN0ZXAiOiLQotGN0YHRgiIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVUZXN0Ijoi0KLRjdGB0YIt0LrQu9Cw0YEiLCJTdHJhdGVneUJsb2NrLmFsbExhdW5jaGVzQ2FwdGlvbiI6ItCj0YHQtSDQt9Cw0L/Rg9GB0LrRliIsIlN0cmF0ZWd5QmxvY2suYWxsTGF1bmNoZXNJbmZvIjoi0KLRjdGB0YLQsNCy0YvRjyDRjdC70LXQvNC10L3RgtGLINCx0YPQtNGD0YbRjCDQv9GA0LDQsNC90LDQu9GW0LfQsNCy0LDQvdGLINC90LAg0LDRgdC90L7QstC1INGA0LDQvdC10Lkg0L/RgNCw0LDQvdCw0LvRltC30LDQstCw0L3Ri9GFINC00LDQtNC30LXQvdGL0YUg0LLQsCDRntGB0ZbRhSDQt9Cw0L/Rg9GB0LrQsNGFIiwiU3RyYXRlZ3lCbG9jay5hbmFseXNpc1N0YXR1c0luZm8iOiLQn9GA0Ysg0JLQmtCbINCw0L3QsNC70ZbQtyDQv9Cw0YfRi9C90LDQtdGG0YbQsCwg0Y/QuiDRgtC+0LvRjNC60ZYg0LfQsNC60LDQvdGH0LLQsNC10YbRhtCwINC70Y7QsdGLINC30LDQv9GD0YHQujxici8+0J/RgNGLINCS0KvQmtCbINC90LUg0L/QsNGH0L3QtdGG0YbQsCDQsNGe0YLQsNC80LDRgtGL0YfQvdCwLCDQsNC70LUg0LzQvtC20L3QsCDQstGL0LrQu9GW0LrQsNGG0Ywg0Z7RgNGD0YfQvdGD0Y4iLCJTdHJhdGVneUJsb2NrLmF1dG9BbmFseXNpc1N3aXRjaGVyVGl0bGUiOiLQkNGe0YLQsNC80LDRgtGL0YfQvdGLINCw0L3QsNC70ZbQtyIsIlN0cmF0ZWd5QmxvY2suc2FtZU5hbWVMYXVuY2hlc0NhcHRpb24iOiLQl9Cw0L/Rg9GB0LrRliDQtyDQsNC00L3QvtC70YzQutCw0LLRi9C80ZYg0ZbQvNGR0L3QsNC80ZYiLCJTdHJhdGVneUJsb2NrLnNhbWVOYW1lTGF1bmNoZXNJbmZvIjoi0KLRjdGB0YLQsNCy0YvRjyDRjdC70LXQvNC10L3RgtGLINCx0YPQtNGD0YbRjCDQv9GA0LDQsNC90LDQu9GW0LfQsNCy0LDQvdGLINC90LAg0LDRgdC90L7QstC1INGA0LDQvdC10Lkg0L/RgNCw0LDQvdCw0LvRltC30LDQstCw0L3Ri9GFINC00LDQtNC30LXQvdGL0YUg0YMg0LfQsNC/0YPRgdC60LDRhSDQtyDQsNC00L3QvtC70YzQutCw0LLRi9C80ZYg0ZbQvNGR0L3QsNC80ZYiLCJTdHJhdGVneUJsb2NrLnN0cmF0ZWd5U2VsZWN0b3JUaXRsZSI6ItCh0YLRgNCw0YLRjdCz0ZbRjyDQkNGe0YLQsC3QkNC90LDQu9GW0LfRgyIsIlN1Y2Nlc3NNZXNzYWdlcy5nZW5lcmF0ZURlbW9EYXRhU3VjY2VzcyI6ItCU0Y3QvNCwLdC00LDQtNC30LXQvdGL0Y8g0LfQs9C10L3QtdGA0LDQstCw0L3RiyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5BVVRPTUFUSU9OX0JVR190aXRsZSI6ItCl0ZbQsdGLINCw0Z7RgtCw0LzQsNGC0YvQt9Cw0YbRi9GWIiwiU3VpdGVMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGUiOiLQo9GB0Y/Qs9C+INGF0ZbQsdCw0Z4g0LDRntGC0LDQvNCw0YLRi9C30LDRhtGL0ZYiLCJTdWl0ZUxldmVsRW50aXRpZXMuRGVzY3JpcHRpb25UaXRsZSI6ItCQ0L/RltGB0LDQvdC90LUiLCJTdWl0ZUxldmVsRW50aXRpZXMuRmFpbGVkVGl0bGUiOiLQndGP0Z7QtNCw0LvRiyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiOiLQhtC80Y8g0J3QsNCx0L7RgNGDIiwiU3VpdGVMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX3RpdGxlIjoi0KXRltCx0Ysg0L/RgNCw0LTRg9C60YLRgyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5QUk9EVUNUX0JVR190b3RhbFRpdGxlIjoi0KPRgdGP0LPQviDRhdGW0LHQsNGeINC/0YDQsNC00YPQutGC0YMiLCJTdWl0ZUxldmVsRW50aXRpZXMuUGFzc2VkVGl0bGUiOiLQn9Cw0YHQv9GP0YXQvtCy0YsiLCJTdWl0ZUxldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX3RpdGxlIjoi0KHRltGB0YLRjdC80L3Ri9GPINC/0YDQsNCx0LvQtdC80YsiLCJTdWl0ZUxldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX3RvdGFsVGl0bGUiOiLQo9GB0Y/Qs9C+INGB0ZbRgdGC0Y3QvNC90YvRhSDQv9GA0LDQsdC70LXQvCIsIlN1aXRlTGV2ZWxFbnRpdGllcy5Ta2lwcGVkVGl0bGUiOiLQn9GA0LDQv9GD0YjRh9Cw0L3RiyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5TdGFydFRpbWVUaXRsZSI6ItCn0LDRgSDQt9Cw0L/Rg9GB0LrRgyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5UT19JTlZFU1RJR0FURV90aXRsZSI6ItCd0LXQsNCx0YXQvtC00L3RiyDQsNC90LDQu9GW0LciLCJTdWl0ZUxldmVsRW50aXRpZXMuVG90YWxUaXRsZSI6ItCj0YHRj9Cz0L4iLCJUZXN0Q2FzZXNHcm93dGhUcmVuZENvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiVGVzdENhc2VzR3Jvd3RoVHJlbmRDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJUZXN0SXRlbUNoYW5nZXMuZnJvbUl0ZW0iOiLQsNC0INGN0LvQtdC80LXQvdGC0LAg0YLRjdGB0YLQsNCy0LDQvdC90Y8iLCJUZXN0SXRlbUNoYW5nZXMubGlua0lzc3VlIjoi0LTQsNC00LDRniDQv9Cw0LzRi9C70LrRgyIsIlRlc3RJdGVtQ2hhbmdlcy5wb3N0SXNzdWUiOiLQsNC/0YPQsdC70ZbQutCw0LLQsNGeINC/0LDQvNGL0LvQutGDIiwiVGVzdEl0ZW1DaGFuZ2VzLnRvSXRlbSI6ItC00LAg0Y3Qu9C10LzQtdC90YLQsCDRgtGN0YHRgtCw0LLQsNC90L3RjyIsIlRlc3RJdGVtQ2hhbmdlcy51bmxpbmtJc3N1ZSI6ItCw0LTQvNCw0YbQsNCy0LDRniDQv9Cw0LzRi9C70LrRgyIsIlRlc3RJdGVtRGV0YWlsc01vZGFsLmRlc2NyaXB0aW9uIjoiRGVzY3JpcHRpb246IiwiVGVzdEl0ZW1EZXRhaWxzTW9kYWwuZHVyYXRpb24iOiJEdXJhdGlvbjoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC5wYXJhbWV0ZXJLZXkiOiJQYXJhbWV0ZXIga2V5IiwiVGVzdEl0ZW1EZXRhaWxzTW9kYWwucGFyYW1ldGVyVmFsdWUiOiJQYXJhbWV0ZXIgdmFsdWUiLCJUZXN0SXRlbURldGFpbHNNb2RhbC5zdGFja3RyYWNlIjoiU3RhY2t0cmFjZToiLCJUZXN0SXRlbURldGFpbHNNb2RhbC50YWdzIjoiVGFnczoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC50ZXN0Q2FzZUlkIjoiVW5pcXVlIHRlc3QgY2FzZSBpZDoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC50aXRsZSI6IlRlc3QgaXRlbSBkZXRhaWxzIiwiVGVzdEl0ZW1zUGFnZS5kZWxldGVNb2RhbENvbnRlbnQiOiLQktGLINGe0L/RjdGe0L3QtdC90YvRjywg0YjRgtC+INGF0L7Rh9Cw0YbQtSDQstGL0LTQsNC70ZbRhtGMINGN0LvQtdC80LXQvdGCICc8Yj57bmFtZX08L2I+Jz8g0JLRiyDRgdGC0YDQsNGG0ZbRhtC1INC00L7RgdGC0YPQvyDQtNCwINGP0LPQvi4iLCJUZXN0SXRlbXNQYWdlLmRlbGV0ZU1vZGFsSGVhZGVyIjoi0JLRi9C00LDQu9GW0YbRjCDRjdC70LXQvNC10L3RgiIsIlRlc3RJdGVtc1BhZ2UuZGVsZXRlTW9kYWxNdWx0aXBsZUNvbnRlbnQiOiLQktGLINGe0L/RjdGe0L3QtdC90YvRjywg0YjRgtC+INGF0L7Rh9Cw0YbQtSDQstGL0LTQsNC70ZbRhtGMINGN0LvQtdC80LXQvdGC0Ys/INCS0Ysg0YHRgtGA0LDRhtGW0YbQtSDQtNC+0YHRgtGD0L8g0LTQsCDRltGFLiIsIlRlc3RJdGVtc1BhZ2UuZGVsZXRlTW9kYWxNdWx0aXBsZUhlYWRlciI6ItCS0YvQtNCw0LvRltGG0Ywg0Y3Qu9C10LzQtdC90YLRiyIsIlRlc3RJdGVtc1BhZ2UuZXJyb3IiOiLQn9Cw0LzRi9C70LrQsCDQv9GA0Ysg0LLRi9C00LDQu9C10L3QvdGWINGN0LvQtdC80LXQvdGC0LAiLCJUZXN0SXRlbXNQYWdlLmVycm9yTXVsdGlwbGUiOiLQn9Cw0LzRi9C70LrQsCDQv9GA0Ysg0LLRi9C00LDQu9C10L3QvdGWINGN0LvQtdC80LXQvdGC0LDRniIsIlRlc3RJdGVtc1BhZ2Uuc3VjY2VzcyI6ItCt0LvQtdC80LXQvdGCINCx0YvRniDQstGL0LTQsNC70LXQvdGLIiwiVGVzdEl0ZW1zUGFnZS5zdWNjZXNzTXVsdGlwbGUiOiLQrdC70LXQvNC10L3RgtGLINCx0YvQu9GWINCy0YvQtNCw0LvQtdC90YsiLCJUZXN0SXRlbXNQYWdlLndhcm5pbmciOiLQktGLINC30LHRltGA0LDQtdGG0LXRgdGPINCy0YvQtNCw0LvRltGG0Ywg0L3QtSDRgdCy0L7QuSDRjdC70LXQvNC10L3Rgi4g0JPRjdGC0LAg0LzQvtC20LAg0L/QsNGe0L/Qu9GL0LLQsNGG0Ywg0L3QsCDRltC90YTQsNGA0LzQsNGG0YvRjiDRltC90YjRi9GFINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCw0Z4g0L/RgNCw0LXQutGC0LAuIiwiVGVzdEl0ZW1zUGFnZS53YXJuaW5nTXVsdGlwbGUiOiLQktGLINC30LHRltGA0LDQtdGG0LXRgdGPINCy0YvQtNCw0LvRltGG0Ywg0L3QtSDRgdCy0LDQtSDRjdC70LXQvNC10L3RgtGLLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9Cw0Z7Qv9C70YvQstCw0YbRjCDQvdCwINGW0L3RhNCw0YDQvNCw0YbRi9GOINGW0L3RiNGL0YUg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDRniDQv9GA0LDQtdC60YLQsC4iLCJUZXN0U3RhdHVzZXMuZmFpbGVkIjoi0L3Rj9Ge0LTQsNC70YsiLCJUZXN0U3RhdHVzZXMuaW5Qcm9ncmVzcyI6ItGDINC/0YDQsNGG0Y3RgdC1IiwiVGVzdFN0YXR1c2VzLmludGVycnVwdGVkIjoi0L/QtdGA0LDRgNCy0LDQvdGLIiwiVGVzdFN0YXR1c2VzLnBhc3NlZCI6ItC/0LDRgdC/0Y/RhdC+0LLRiyIsIlRlc3RTdGF0dXNlcy5yZXNldGVkIjoiUmVzZXRlZCIsIlRlc3RTdGF0dXNlcy5za2lwcGVkIjoi0L/RgNCw0L/Rg9GI0YfQsNC90YsiLCJUZXN0U3RhdHVzZXMuc3RvcHBlZCI6ItGB0YPQv9GL0L3QtdC90YsiLCJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5iYXNlZE9uIjoi0JfQsNGB0L3QsNCy0LDQvdGLINC90LAiLCJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5sYXVuY2hOYW1lIjoi0IbQvNGPINC30LDQv9GD0YHQutGDIiwiVW5hc3NpZ25CdXR0b24uYW5hc3NpZ25CdG4iOiLQktGL0LLQtdGB0YbRliIsIlVuYXNzaWduQnV0dG9uLmFuYXNzaWduVXNlciI6ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbQuiDQsdGL0Z4g0LLRi9Cy0LXQtNC30LXQvdGLINC3INC/0YDQsNC10LrRgtCwISIsIlVuYXNzaWduQnV0dG9uLnVuQXNzaWduVGl0bGUiOiLQktGL0LLQtdGB0YbRliDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDQtyDQv9GA0LDQtdC60YLQsCIsIlVuYXNzaWduQnV0dG9uLnVuQXNzaWduVGl0bGVFeHRlcm5hbCI6ItCd0LXQu9GM0LPQsCDQstGL0LLQtdGB0YbRliDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCBVUFNBINC3INC/0YDQsNC10LrRgtCwIFVQU0EiLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlTm9QZXJtaXNzaW9uIjoi0KMg0LLQsNGBINC90LXQtNCw0YHRgtCw0YLQutC+0LLQsCDQv9GA0LDQstC+0Z4iLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlUGVyc29uYWwiOiLQndC10LzQsNCz0YfRi9C80LAg0LLRi9Cy0LXRgdGG0ZYg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0Lcg0L/QtdGA0YHQsNC90LDQu9GM0L3QsNCz0LAg0L/RgNCw0LXQutGC0LAiLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlWW91Ijoi0J3QtdC70YzQs9CwINCy0YvQstC10YHRhtGWINGe0LvQsNGB0L3Rg9GOINGe0LvRltC60L7QstGLINC30LDQv9GW0YEg0Lcg0L/RgNCw0LXQutGC0LAiLCJVbmFzc2lnbk1vZGFsLm1vZGFsSGVhZGVyIjoi0JLRi9Cy0LXRgdGG0ZYg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAiLCJVbmFzc2lnbk1vZGFsLm1vZGFsVGV4dCI6ItCS0Ysg0Z7Qv9GN0Z7QvdC10L3Ri9GPLCDRiNGC0L4g0LLRiyDRhdC+0YfQsNGG0LUg0L/RgNGL0LHRgNCw0YbRjCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCAnPGI+e3VzZXJ9PC9iPicg0Lcg0L/RgNCw0LXQutGC0LAgJzxiPntwcm9qZWN0fTwvYj4nPyIsIlVuYXNzaWduTW9kYWwudW5hc3NpZ24iOiLQkNC00LzRj9C90ZbRhtGMINC/0YDRi9C30L3QsNGH0Y3QvdC90LUiLCJVbmlxdWVCdWdzVGFibGUuYnVnSURDb2x1bW4iOiJCVUcgSUQiLCJVbmlxdWVCdWdzVGFibGUuZm91bmRJbkNvbHVtbiI6IkZPVU5EIElOIiwiVW5pcXVlQnVnc1RhYmxlLnN1Ym1pdERhdGVDb2x1bW4iOiJTVUJNSVQgREFURSIsIlVuaXF1ZUJ1Z3NUYWJsZS5zdWJtaXREYXRlSGludCI6IlN1Ym1pdCBkYXRlOiIsIlVuaXF1ZUJ1Z3NUYWJsZS5zdWJtaXR0ZXJDb2x1bW4iOiJTVUJNSVRURVIiLCJVbmlxdWVCdWdzVGFibGVDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJNYXhpbXVtIGxhdW5jaGVzIGluIHNlbGVjdGlvbiIsIlVuaXF1ZUJ1Z3NUYWJsZUNvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIlVubGlua0lzc3VlTW9kYWwudGl0bGUiOiLQkNC00LLRj9C30LDRhtGMINC/0YDQsNCx0LvQtdC80YMiLCJVbmxpbmtJc3N1ZU1vZGFsLnVubGlua0J1dHRvbiI6ItCQ0LTQstGP0LfQsNGG0YwiLCJVbmxpbmtJc3N1ZU1vZGFsLnVubGlua01vZGFsQ29uZmlybWF0aW9uVGV4dCI6ItCS0Ysg0Z7Qv9GN0Z7QvdC10L3Ri9GPLCDRiNGC0L4g0LbQsNC00LDQtdGG0LUg0LDQtNCy0Y/Qt9Cw0YbRjCDQv9GA0LDQsdC70LXQvNGLINGeINCh0JDQpT8iLCJVbmxpbmtJc3N1ZU1vZGFsLnVubGlua1N1Y2Nlc3NNZXNzYWdlIjoi0J/QsNGB0L/Rj9GF0L7QstCwINC30LDQstC10YDRiNCw0L3QsCEiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLmFuYWx5c2lzUHJvcHMiOiLQv9Cw0YDQsNC80LXRgtGA0Ysg0JDRntGC0LAt0LDQvdCw0LvRltC30YM6IiwiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5hbmFseXplTW9kZSI6ItCh0YLRgNCw0YLRjdCz0ZbRjyDQkNGe0YLQvi3QkNC90LDQu9GW0LfRgyIsIlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MuYXV0b0FuYWx5emUiOiLQv9C10YDQsNC60LvRjtGH0Y3QvdC90LUg0JDRntGC0LDQsNC90LDQu9GW0LfQsNGC0LDRgNCwIiwiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5taW5Eb2NGcmVxIjoiTWluaW11bSBkb2N1bWVudCBmcmVxdWVuY3kiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pblNob3VsZE1hdGNoIjoiTWluaW11bSBzaG91bGQgbWF0Y2giLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pblRlcm1GcmVxIjoiTWluaW11bSB0ZXJtIGZyZXF1ZW5jeSIsIlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MubnVtYmVyT2ZMb2dMaW5lcyI6ItCa0L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LTQutC+0Z4g0LvQvtCz0LAiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLnVwZGF0ZWQiOiLQsNCx0L3QsNCy0ZbRniIsIlVzZXJCbG9jay5hZG1pbkJhZGdlIjoi0JDQtNC80ZbQvdGW0YHRgtGA0LDRgtCw0YAiLCJVc2VyQmxvY2suYWRtaW5pc3RyYXRlIjoi0JDQtNC80ZbQvdGW0YHRgtGA0LDQstCw0YbRjCIsIlVzZXJCbG9jay5sb2dvdXQiOiLQktGL0LnRgdGG0ZYiLCJVc2VyQmxvY2sucHJvZmlsZSI6ItCf0YDQvtGE0ZbQu9GMIiwiVXNlckluZm8uc3VibWl0RXJyb3IiOiLQntGI0LjQsdC60LAhINCd0LUg0YPQtNCw0LXRgtGB0Y8g0YHQvtC30YDQsNC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIsIlVzZXJJbmZvLnN1Ym1pdFN1Y2Nlc3MiOiLQl9C80LXQvdGLINC/0LDRgdC/0Y/RhdC+0LLQsCDQt9Cw0YXQsNCy0LDQvdGLIiwiVXVpZEJsb2NrLmhlYWRlciI6ItCj0L3RltCy0LXRgNGB0LDQu9GM0L3RiyDRg9C90ZbQutCw0LvRjNC90Ysg0ZbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YAiLCJVdWlkQmxvY2sucmVnZW5lcmF0ZSI6ItCh0YLQstCw0YDRi9GG0Ywg0L3QvtCy0YsiLCJVdWlkQmxvY2sucmVnZW5lcmF0ZVN1Y2Nlc3MiOiLQl9C80LXQvdGLINC/0LDRgdC/0Y/RhdC+0LLQsCDQt9Cw0YXQsNCy0LDQvdGLIiwiVXVpZEJsb2NrLnN1Ym1pdEVycm9yIjoi0J/QsNC80YvQu9C60LAg0L/RgNGLINC/0LXRgNC10YHQvtC30LTQsNC90LjQuCBVVUlEIiwiVXVpZEJsb2NrLnRleHQiOiLQmtCw0LEg0LfQsNCx0Y/RgdC/0LXRh9GL0YbRjCDQvdCw0LTQt9C10LnQvdCw0YHRhtGMINCy0LDRiNCw0LPQsCDQtNCw0LzQtdC90L3QsNCz0LAg0L/QsNGA0L7Qu9GPLCDQstGLINC80L7QttCw0YbQtSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC60LDRgNGL0YHRgtCw0YbQutGWINCw0L/QsNC30L3QsNCy0LDQu9GM0L3RiyDQvdGD0LzQsNGALCDQt9Cy0LDQvdGLIFVVSUQsINC60LDQsSDQv9Cw0YbQstC10YDQtNC30ZbRhtGMLCDRiNGC0L4g0LLQsNGIINGD0LvRltC60L7QstGLINC30LDQv9GW0YEg0LzQvtC20LAg0LfQsNCz0YDRg9C20LDRhtGG0LAg0LDQs9C10L3RgtCw0LwuIiwiV2FybmluZ1Rvb2x0aXAuZGVzY3JpcHRpb24iOiLQmtCw0LvRliDQstGLINGF0L7Rh9Cw0YbQtSDQsNCx0L3QsNCy0ZbRhtGMINCy0LDRiCBVVUlELCDQvdCw0YbRltGB0L3RltGG0LUgJ9GB0YLQstCw0YDRi9GG0Ywg0L3QvtCy0YsnLCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCDQvdC+0LLRiy4uIiwiV2FybmluZ1Rvb2x0aXAud2FybmluZyI6ItCj0LLQsNCz0LAhIiwiV2FybmluZ1Rvb2x0aXAud2FybmluZ0Rlc2NyaXB0aW9uIjoi0KPRgdC1INC90LDRgdGC0YDQvtC10L3Ri9GPINCw0LPQtdC90YLRiyDRgdCwINGB0YLQsNGA0YvQvNGWIFVVSUQg0L3QtSDQsdGD0LTRg9GG0Ywg0L/RgNCw0YbQsNCy0LDRhtGMINC/0LDRgdC70Y8g0LPRjdGC0LDQs9CwIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uQVVUT01BVElPTl9CVUciOiJBdXRvbWF0aW9uIGJ1ZyIsIldpZGdldENyaXRlcmlhT3B0aW9uLkFVVE9NQVRJT05fQlVHX1RPVEFMIjoiVG90YWwgYXV0b21hdGlvbiBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5Dcml0ZXJpYUZhaWxlZCI6IkZhaWxlZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkNyaXRlcmlhUGFzc2VkIjoiUGFzc2VkIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uQ3JpdGVyaWFTa2lwcGVkIjoiU2tpcHBlZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkNyaXRlcmlhVG90YWwiOiJUb3RhbCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX0FCMDAxIjoiQXV0b21hdGlvbiBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5EZWZlY3RfVHlwZV9ORDAwMSI6Ik5vIGRlZmVjdCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX1BCMDAxIjoiUHJvZHVjdCBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5EZWZlY3RfVHlwZV9TSTAwMSI6IlN5c3RlbSBpc3N1ZSIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX1RJMDAxIjoiVG8gaW52ZXN0aWdhdGUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5OT19ERUZFQ1QiOiJObyBkZWZlY3QiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5OT19ERUZFQ1RfVE9UQUwiOiJUb3RhbCBubyBkZWZlY3RzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uUFJPRFVDVF9CVUciOiJQcm9kdWN0IGJ1ZyIsIldpZGdldENyaXRlcmlhT3B0aW9uLlBST0RVQ1RfQlVHX1RPVEFMIjoiVG90YWwgcHJvZHVjdCBidWdzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uU1lTVEVNX0lTU1VFIjoiU3lzdGVtIGlzc3VlIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uU1lTVEVNX0lTU1VFX1RPVEFMIjoiVG90YWwgc3lzdGVtIGlzc3VlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLlRPX0lOVkVTVElHQVRFIjoiVG8gaW52ZXN0aWdhdGUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5hYV9zZXR0aW5nc19hY3Rpb25zIjoiVXBkYXRlIEF1dG8tQW5hbHlzaXMgc2V0dGluZ3MiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5hdHRyaWJ1dGVzIjoiQXR0cmlidXRlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLmJ0c19hY3Rpb25zIjoiVXBkYXRlIEJUUyIsIldpZGdldENyaXRlcmlhT3B0aW9uLmNyZWF0ZV91c2VyIjoiQWRkLCByZWdpc3RlciB1c2VyIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uZGFzaGJvYXJkc19hY3Rpb25zIjoiVXBkYXRlIGRhc2hib2FyZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmRlZmVjdHNfYWN0aW9ucyI6IlVwZGF0ZSBkZWZlY3QgdHlwZXMiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5kZWxldGVfbGF1bmNoIjoiRGVsZXRlIGxhdW5jaCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmRlc2NyaXB0aW9uIjoiRGVzY3JpcHRpb24iLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5lbmRUaW1lIjoiRmluaXNoIHRpbWUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5maWx0ZXJzX2FjdGlvbnMiOiJVcGRhdGUgZmlsdGVyIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uZmluaXNoX2xhdW5jaCI6IkZpbmlzaCBsYXVuY2giLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5pbXBvcnRfYWN0aW9ucyI6IkltcG9ydCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmlzc3Vlc19hY3Rpb25zIjoiQWN0aW9ucyB3aXRoIGlzc3VlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLnN0YXJ0VGltZSI6IlN0YXJ0IHRpbWUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5zdGFydF9sYXVuY2giOiJTdGFydCBsYXVuY2giLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi51cGRhdGVfcHJvamVjdCI6IlVwZGF0ZSBwcm9qZWN0IHNldHRpbmdzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24udXNlciI6IlVzZXIiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi53aWRnZXRzX2FjdGlvbnMiOiJVcGRhdGUgd2lkZ2V0IiwiV2lkZ2V0SGVhZGVyLnNoYXJlZFdpZGdldCI6ItCS0ZbQtNC20Y3RgiDRgdGC0LLQvtGA0LDQvdGLIHtvd25lcn0iLCJXaWRnZXRIZWFkZXIud2lkZ2V0SXNTaGFyZWQiOiLQktGW0LTQttGN0YIg0LDQv9GD0LHQu9GW0LrQsNCy0LDQvdGLIiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUuYXJlYUNoYXJ0TW9kZSI6ItCS0YvQs9C70Y/QtCDQv9C70L7RiNGH0LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0TW9kZS5iYXJNb2RlIjoi0KHRgtC+0LvQsdGH0LDRgtGLINCy0YvQs9C70Y/QtCIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLmNoYXJ0TW9kZSI6ItCa0YDRg9Cz0LDQstCw0Y8g0LTRi9GP0LPRgNCw0LzQsCIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLmRvbnV0Q2hhcnRNb2RlIjoi0JrQsNC70YzRhtCw0LLQsNGPINC00YvRj9Cz0YDQsNC80LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0TW9kZS5saW5lQ2hhcnQiOiLQm9GW0L3QtdC50L3RiyDQs9GA0LDRhNGW0LoiLCJXaWRnZXRIZWFkZXIud2lkZ2V0TW9kZS5wYW5lbE1vZGUiOiLQktGL0LPQu9GP0LQg0L/QsNC90Y3Qu9GWIiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUucGllQ2hhcnRNb2RlIjoi0JrRgNGD0LPQsNCy0LDRjyDQtNGL0Y/Qs9GA0LDQvNCwIiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUudHJlbmRDaGFydCI6ItCi0Y3QvdC00Y3QvdGG0YvQudC90Ysg0LPRgNCw0YTRltC6IiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUudHJlbmRDaGFydE1vZGUiOiLQotGN0L3QtNGN0L3RhtGL0LnQvdGLINCy0YvQs9C70Y/QtCIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmFjdGl2aXR5U3RyZWFtIjoi0J/QsNC90Y3Qu9GMINC00LfQtdC50L3QsNGB0YbRliDQv9GA0LDQtdC60YLQsCIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmJ1Z1RyZW5kIjoi0KHRgtCw0YLRi9GB0YLRi9C60LAg0LLRi9C60LDQvdCw0L3QvdGPINC30LDQv9GD0YHQutCw0Z4g0ZYg0L/RgNCw0LHQu9C10LwiLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS5jYXNlc1RyZW5kIjoi0JTRi9GP0LPRgNCw0LzQsCDRgtGN0L3QtNGN0L3RhtGL0Lkg0YDQvtGB0YLRgyDQutC+0LvRjNC60LDRgdGG0ZYg0YLRjdGB0YLQsNCy0YvRhSDRgdGG0Y3QvdCw0YDQvtGeIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuY3VtdWxhdGl2ZSI6ItCa0YPQvNGD0LvRj9GC0YvRntC90LDRjyDQtNGL0Y/Qs9GA0LDQvNCwIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuZmxha3lUZXN0Q2FzZXMiOiLQotCw0LHQu9GW0YbQsCDRgdCw0LzRi9GFINC30LzQtdC90LvRltCy0YvRhSDRgtGN0YHRgtCw0LLRi9GFINGB0YbRjdC90LDRgNGL0Y/RniAo0KLQntCfLTIwKSIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmludmVzdGlnYXRlZFRyZW5kIjoi0JTQsNGB0LvQtdC00LDQstCw0L3RiyDQsNC00YHQvtGC0LDQuiDQt9Cw0L/Rg9GB0LrQsNGeIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoU3RhdGlzdGljcyI6ItCU0YvRj9Cz0YDQsNC80LAg0YHRgtCw0YLRi9GB0YLRi9C60ZYg0LfQsNC/0YPRgdC60LDRniIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0Ijoi0JTRi9GP0LPRgNCw0LzQsCDQv9Cw0YDQsNGe0L3QsNC90L3RjyDRgNC+0LfQvdGL0YUg0LfQsNC/0YPRgdC60LDRniIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmxhdW5jaGVzRHVyYXRpb25DaGFydCI6IkxhdW5jaGVzIGR1cmF0aW9uIGNoYXJ0IiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoZXNUYWJsZSI6ItCU0YvRj9Cz0YDQsNC80LAg0L/RgNCw0YbRj9Cz0LvQsNGB0YbRliDQt9Cw0L/Rg9GB0LrQsNGeIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubW9zdEZhaWxlZFRlc3RDYXNlcyI6ItCi0LDQsdC70ZbRhtCwINGB0LDQvNGL0YUg0L/RgNCw0LLQsNC70YzQvdGL0YUg0YLRjdGB0YLQsNCy0YvRhSDRgdGG0Y3QvdCw0YDRi9GP0Z4gKNCi0J7Qny0yMCkiLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS5ub3RQYXNzZWQiOiLQlNGL0Y/Qs9GA0LDQvNCwINGC0Y3QvdC00Y3QvdGG0YvQuSDQvdGP0L/RgNC+0LnQtNC30LXQvdGL0YUg0YLRjdGB0YLQsNCy0YvRhSDRgdGG0Y3QvdCw0YDQvtGeIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUub3ZlcmFsbFN0YXRpc3RpY3MiOiLQkNCz0YPQu9GM0L3QsNGPINGB0YLQsNGC0YvRgdGC0YvQutCwIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUucGFzc2luZ1JhdGVQZXJMYXVuY2giOiLQmtCw0Y3RhNGW0YbRltC10L3RgiDQv9GA0LDRhdC+0LTQttCw0L3QvdGPINC30LDQv9GD0YHQutGDIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUucGFzc2luZ1JhdGVTdW1tYXJ5Ijoi0JfQstC+0LTQutCwINC60LDRjdGE0ZbRhtGW0LXQvdGC0LDRniDQv9GA0LDRhdC+0LTQttCw0L3QvdGPIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUucHJvZHVjdFN0YXR1cyI6ItCh0YLQsNGC0YPRgSDQv9GA0LDQtNGD0LrRgtGDIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuc3RhdGlzdGljVHJlbmQiOiLQlNGL0Y/Qs9GA0LDQvNCwINGB0YLQsNGC0YvRgdGC0YvQutGWINC30LDQv9GD0YHQutCw0Z4iLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS51bmlxdWVCdWdUYWJsZSI6ItCi0LDQsdC70ZbRhtCwINGe0L3RltC60LDQu9GM0L3Ri9GFINGF0ZbQsdCw0Z4iLCJXaWRnZXRMaXN0SXRlbS5hbHJlYWR5QWRkZWRXaWRnZXRUaXRsZSI6IldpZGdldCBpcyBhbHJlYWR5IGFkZGVkIHRvIHNlbGVjdGVkIGRhc2hib2FyZCIsIldpZGdldE1vZGVzLmFsbExhdW5jaGVzIjoiQWxsIGxhdW5jaGVzIiwiV2lkZ2V0TW9kZXMuYXJlYVZpZXdNb2RlIjoiQXJlYSB2aWV3IiwiV2lkZ2V0TW9kZXMuYmFyVmlld01vZGUiOiJCYXIgdmlldyIsIldpZGdldE1vZGVzLmRvbnV0VmlldyI6IkRvbnV0IHZpZXciLCJXaWRnZXRNb2Rlcy5sYXRlc3RMYXVuY2hlcyI6IkxhdGVzdCBsYXVuY2hlcyIsIldpZGdldE1vZGVzLmxhdW5jaE1vZGUiOiJMYXVuY2ggbW9kZSIsIldpZGdldE1vZGVzLnBhbmVsVmlldyI6IlBhbmVsIHZpZXciLCJXaWRnZXRNb2Rlcy5waWVWaWV3IjoiUGllIHZpZXciLCJXaWRnZXRNb2Rlcy50YWJsZVZpZXciOiJUYWJsZSB2aWV3IiwiV2lkZ2V0TW9kZXMudGltZWxpbmVNb2RlIjoiVGltZWxpbmUgbW9kZSIsIldpZGdldFR5cGVTZWxlY3Rvci5oZWFkaW5nIjoiQ2hvb3NlIHdpZGdldCB0eXBlIGZyb20gdGhlIGxpc3QgYmVsb3ciLCJXaWRnZXRXaXphcmRNb2RhbC5oZWFkZXJUZXh0IjoiQWRkIG5ldyB3aWRnZXQiLCJXaWRnZXRzLkRlc2NyaXB0aW9uLmFjdGl2aXR5U3RyZWFtIjoiU2hvd3MgYWxsIGFjdGl2aXRpZXMgb2NjdXJyaW5nIG9uIHRoZSBwcm9qZWN0LiIsIldpZGdldHMuRGVzY3JpcHRpb24uYnVnVHJlbmQiOiJTaG93cyB0aGUgdHJlbmQgb2YgZ3Jvd3RoIGluIHRoZSBudW1iZXIgb2YgZmFpbGVkIHRlc3QgY2FzZXMgZnJvbSBydW4gdG8gcnVuLiIsIldpZGdldHMuRGVzY3JpcHRpb24uY2FzZXNUcmVuZCI6Jy0gaW4gIkxhdW5jaCBNb2RlIiBzaG93cyB0aGUgaW5jcmVtZW50IG9mIHRlc3QtY2FzZXMgZnJvbSBydW4gdG8gcnVuLDxicj4gLSBpbiAiVGltZWxpbmUgTW9kZSIgc2hvd3MgdGhlIGluY3JlbWVudCBvZiB0ZXN0LWNhc2VzIGRpc3RyaWJ1dGVkIGJ5IGRhdGVzIChpbiBsYXVuY2hlcyB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiB0ZXN0LWNhc2VzIHBlciBkYXkpLicsIldpZGdldHMuRGVzY3JpcHRpb24uY3VtdWxhdGl2ZSI6ItCf0LDQutCw0LfQstCw0LUg0YLRjdC90LTRjdC90YbRi9GOINGA0L7RgdGC0YMg0LfQstC+0LTQvdGL0YUg0YHRgtCw0YLRi9GB0YLRi9GH0L3Ri9GFINC00LDQtNC30LXQvdGL0YUg0L/QsCDQt9Cw0L/Rg9GB0LrQsNGFINC3INCw0LTQvdC+0LvRjNC60LDQstGL0Lwg0LrQu9GO0YfQvtC8INCw0YLRgNGL0LHRg9GC0YMuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5mbGFreVRlc3RDYXNlcyI6IlNob3dzIHRoZSBUT1AtMjAgdGhlIG1vc3QgZmxha3kgdGVzdCBjYXNlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcmV2aW91cyBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLmludmVzdGlnYXRlZFRyZW5kIjonLSBpbiAiTGF1bmNoIE1vZGUiIHNob3dzIHdoZXRoZXIgdGhlIGxhdW5jaGVzIGFyZSBhbmFseXplZCBvciBub3QgKHRoZSBwZXJjZW50YWdlIG9mICJJbnZlc3RpZ2F0ZWQiLyJUbyBJbnZlc3RpZ2F0ZSIpIGZyb20gcnVuIHRvIHJ1biw8YnI+IC0gaW4gIlRpbWVsaW5lIE1vZGUiIHNob3dzIHBlcmNlbnRhZ2Ugb2YgIkludmVzdGlnYXRlZCIvIlRvIEludmVzdGlnYXRlIiB0ZXN0cyBpbiBhbGwgcnVucyBwZXIgZGF5IGRpc3RyaWJ1dGVkIGJ5IGRhdGVzLicsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoU3RhdGlzdGljcyI6IlNob3dzIHN0YXRpc3RpY3Mgb2YgdGhlIGxhc3QgbGF1bmNoIGRpdmlkZWQgaW50byAyIHNlY3Rpb25zOjwvYnI+IC0gU2tpcHBlZCwgUGFzc2VkLCBGYWlsZWQgPC9icj4gLSBQcm9kdWN0IEJ1ZywgU3lzdGVtIElzc3VlLCBUbyBJbnZlc3RpZ2F0ZSwgQXV0b21hdGlvbiBCdWdzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiOiJBbGxvd3MgdG8gY29tcGFyZSBzdGF0aXN0aWNzIGZvciAyIGxhc3QgbGF1bmNoZXMgc2lkZSBieSBzaWRlLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNEdXJhdGlvbkNoYXJ0IjoiU2hvd3MgZHVyYXRpb24gb2YgdGhlIHNlbGVjdGVkIGxhdW5jaGVzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNUYWJsZSI6IlNob3dzIHRoZSBjb25maWd1cmFibGUgdGFibGUgb2YgbGF1bmNoZXMuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5tb3N0RmFpbGVkVGVzdENhc2VzIjoiU2hvd3MgdGhlIFRPUC0yMCBtb3N0IGZhaWxpbmcgdGVzdCBjYXNlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcmV2aW91cyBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLm1vc3RUaW1lQ29uc3VtaW5nIjoic2hvdyB0aGUgVE9QIDIwIHRoZSBtb3N0IHRpbWUtY29uc3VtaW5nIHRlc3QgY2FzZXMgaW4gdGhlIGxhc3QgZXhlY3V0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF1bmNoLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubm90UGFzc2VkIjoiU2hvd3MgdGhlIHBlcmNlbnQgcmF0aW8gb2Ygbm9uLXBhc3NlZCB0ZXN0IGNhc2VzIChGYWlsZWQgKyBTa2lwcGVkKSB0byBUb3RhbCBjYXNlcyBmcm9tIHJ1biB0byBydW4uIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5vdmVyYWxsU3RhdGlzdGljcyI6IlNob3dzIHN1bW1hcnkgb2YgdGVzdCBjYXNlcyB3aXRoIGVhY2ggc3RhdHVzZXMgaW4gdGhlIHNlbGVjdGVkIGxhdW5jaGVzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ucGFzc2luZ1JhdGVQZXJMYXVuY2giOiJTaG93cyB0aGUgcGVyY2VudGFnZSByYXRpbyBvZiBQYXNzZWQgdGVzdCBjYXNlcyB0byBUb3RhbCBjYXNlcyBmb3IgbGFzdCBydW4gb2Ygc2VsZWN0ZWQgbGF1bmNoLiIsIldpZGdldHMuRGVzY3JpcHRpb24ucGFzc2luZ1JhdGVTdW1tYXJ5IjoiU2hvd3MgdGhlIHBlcmNlbnRhZ2UgcmF0aW8gb2YgUGFzc2VkIHRlc3QgY2FzZXMgdG8gVG90YWwgY2FzZXMgZm9yIHNldCBvZiBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLnByb2R1Y3RTdGF0dXMiOiJTaG93cyB0aGUgY29uZmlndXJhYmxlIHRhYmxlIHRoYXQgaXMgcmVwcmVzZW50aW5nIGxhdW5jaCBzdGF0aXN0aWNzIG9yIGdyb3VwIHN0YXRpc3RpY3MgYnkgc3BlY2lhbCBmaWx0ZXIuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5zdGF0aXN0aWNUcmVuZCI6Jy0gaW4gIkxhdW5jaCBtb2RlIiBzaG93cyB0aGUgZ3Jvd3RoIHRyZW5kIGluIHRoZSBudW1iZXIgb2YgdGVzdCBjYXNlcyB3aXRoIGVhY2ggc2VsZWN0ZWQgc3RhdHVzZXMgZnJvbSBydW4gdG8gcnVuLDxicj4gLSBpbiAiVGltZWxpbmUgbW9kZSIgc2hvd3Mgc3VtLCBkaXN0cmlidXRlZCBieSBkYXRlcy4nLCJXaWRnZXRzLkRlc2NyaXB0aW9uLnVuaXF1ZUJ1Z1RhYmxlIjoiU2hvd3MgcmVhbCBpZGVudGlmaWVkIGJ1Z3MsIHBvc3RlZCB0byB0aGUgQnVnIFRyYWNraW5nIFN5c3RlbSwgYW5kIGV4aXN0aW5nIGluIHRoZSBCVFMgYnVncywgbG9hZGVkIG9uIHRoZSBwcm9qZWN0LiIsIldpZGdldHMuTmFtZS5hY3Rpdml0eVN0cmVhbSI6IlByb2plY3QgYWN0aXZpdHkgcGFuZWwiLCJXaWRnZXRzLk5hbWUuYnVnVHJlbmQiOiJGYWlsZWQgY2FzZXMgdHJlbmQgY2hhcnQiLCJXaWRnZXRzLk5hbWUuY2FzZXNUcmVuZCI6IlRlc3QtQ2FzZXMgZ3Jvd3RoIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLmN1bXVsYXRpdmUiOiJDdW11bGF0aXZlIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLmZsYWt5VGVzdENhc2VzIjoiRmxha3kgdGVzdCBjYXNlcyB0YWJsZSAoVE9QLTIwKSIsIldpZGdldHMuTmFtZS5pbnZlc3RpZ2F0ZWRUcmVuZCI6IkludmVzdGlnYXRlZCBwZXJjZW50YWdlIG9mIGxhdW5jaGVzIiwiV2lkZ2V0cy5OYW1lLmxhdW5jaFN0YXRpc3RpY3MiOiJMYXVuY2ggZXhlY3V0aW9uIGFuZCBpc3N1ZSBzdGF0aXN0aWMiLCJXaWRnZXRzLk5hbWUubGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiOiJEaWZmZXJlbnQgbGF1bmNoZXMgY29tcGFyaXNvbiBjaGFydCIsIldpZGdldHMuTmFtZS5sYXVuY2hlc0R1cmF0aW9uQ2hhcnQiOiJMYXVuY2hlcyBkdXJhdGlvbiBjaGFydCIsIldpZGdldHMuTmFtZS5sYXVuY2hlc1RhYmxlIjoiTGF1bmNoZXMgdGFibGUiLCJXaWRnZXRzLk5hbWUubW9zdEZhaWxlZFRlc3RDYXNlcyI6Ik1vc3QgZmFpbHVyZSB0ZXN0LWNhc2VzIHRhYmxlIChUT1AtMjApIiwiV2lkZ2V0cy5OYW1lLm1vc3RUaW1lQ29uc3VtaW5nIjoiVGhlIG1vc3QgdGltZS1jb25zdW1pbmcgdGVzdCBjYXNlcyB3aWRnZXQgKFRPUC0yMCkiLCJXaWRnZXRzLk5hbWUubm90UGFzc2VkIjoiTm9uLVBhc3NlZCB0ZXN0LWNhc2VzIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLm92ZXJhbGxTdGF0aXN0aWNzIjoiT3ZlcmFsbCBzdGF0aXN0aWNzIiwiV2lkZ2V0cy5OYW1lLnBhc3NpbmdSYXRlUGVyTGF1bmNoIjoiUGFzc2luZyByYXRlIHBlciBsYXVuY2giLCJXaWRnZXRzLk5hbWUucGFzc2luZ1JhdGVTdW1tYXJ5IjoiUGFzc2luZyByYXRlIHN1bW1hcnkiLCJXaWRnZXRzLk5hbWUucHJvZHVjdFN0YXR1cyI6IlByb2R1Y3Qgc3RhdHVzIiwiV2lkZ2V0cy5OYW1lLnN0YXRpc3RpY1RyZW5kIjoiTGF1bmNoIHN0YXRpc3RpY3MgY2hhcnQiLCJXaWRnZXRzLk5hbWUudW5pcXVlQnVnVGFibGUiOiJVbmlxdWUgYnVncyB0YWJsZSIsIldpZGdldHMuZ3Jvd3Rlc3RDYXNlcyI6Ikdyb3cgdGVzdCBjYXNlcyIsIldpZGdldHMub2ZUZXN0Q2FzZXMiOiLQtyDRgtGN0YHRgtCw0LLRi9GFINGB0YbRjdC90LDRgNC+0Z4iLCJXaWRnZXRzLnRvdGFsVGVzdENhc2VzIjoiVG90YWwgdGVzdCBjYXNlcyIsIldpZGdldHNHcmlkLm5vdGlmaWNhdGlvbi5kZWxldGVXaWRnZXRTdWNjZXNzIjoi0JLRltC00LbRjdGCINC/0LDRgdC/0Y/RhdC+0LLQsCDQstGL0LTQsNC70LXQvdGLIiwiV2l6YXJkSW5mb1NlY3Rpb24uV2lkZ2V0Q29uZmlndXJpbmdTdGVwTGFiZWwiOiJDb25maWd1cmUgd2lkZ2V0IiwiV2l6YXJkSW5mb1NlY3Rpb24uV2lkZ2V0U2F2aW5nU3RlcExhYmVsIjoiU2F2ZSIsIldpemFyZEluZm9TZWN0aW9uLldpZGdldFNlbGVjdGlvblN0ZXBMYWJlbCI6IlNlbGVjdCB3aWRnZXQgdHlwZSIsIldpemFyZEluZm9TZWN0aW9uLmFkZFdpZGdldEJ1dHRvbiI6IkFkZCIsIldpemFyZEluZm9TZWN0aW9uLm5leHRTdGVwQnV0dG9uIjoiTmV4dCBzdGVwIiwiV2l6YXJkSW5mb1NlY3Rpb24ucHJldlN0ZXBCdXR0b24iOiJQcmV2aW91cyBzdGVwIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmFsbFVzZXJzIjoiQWxsIHVzZXJzIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsQ29udGVudCI6IkFyZSB5b3Ugc3VyZSB0byBkZWxldGUgdXNlciA8Yj4ne25hbWV9JzwvYj4/IiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsSGVhZGVyIjoiRGVsZXRlIHVzZXIiLCJhZG1pbmlzdHJhdGVVc2Vyc1BhZ2UuZGVsZXRlTW9kYWxNdWx0aXBsZUNvbnRlbnQiOiJBcmUgeW91IHN1cmUgdG8gZGVsZXRlIHVzZXJzPyA8YnI+IDxiPntuYW1lc308L2I+IiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVIZWFkZXIiOiJEZWxldGUgdXNlcidzIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmVycm9yIjoiRXJyb3Igd2hlbiBkZWxldGluZyB1c2VyIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmVycm9yTXVsdGlwbGUiOiJFcnJvciB3aGVuIGRlbGV0aW5nIHVzZXIncyIsImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5zdWNjZXNzIjoiVXNlciB3YXMgZGVsZXRlZCIsImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5zdWNjZXNzTXVsdGlwbGUiOiJVc2VyJ3Mgd2VyZSBkZWxldGVkIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlVG9vbGJhci5hbGxVc2VycyI6Intjb3VudH0gaXRlbXMgc2VsZWN0ZWQiLCJlbWFpbENhc2UubGF1bmNoZXNIaW50Ijoi0J3QsNC30LLRgyDQt9Cw0L/Rg9GB0LrRgyDQv9Cw0LLRltC90L3QsCDQvNC10YbRjCDQv9Cw0LzQtdGAINCw0LQgMyDQtNCwIDI1NiIsImVtYWlsQ2FzZS5yZWNpcGllbnRzSGludCI6ItCa0LDQu9GWINC70LDRgdC60LAsINCy0YvQsdC10YDRi9GG0LUg0YXQsNGG0Y8g0LEg0LDQtNC90LDQs9C+INCw0YLRgNGL0LzQsNC70YzQvdGW0LrQsCIsImVtYWlsQ2FzZS50YWdzSGludCI6ItCd0LDQt9Cy0LAg0YLRjdCz0LAg0L/QsNCy0ZbQvdC90LAg0LzQtdGG0Ywg0L/QsNC80LXRgCDQsNC0IDMg0LTQsCAyNTYiLCJsYXVuY2hBbmFseXNpc01vZGFsLmFuYWx5c2UiOiJBbmFseXNlIiwibGF1bmNoQW5hbHlzaXNNb2RhbC5iYXNlT3B0aW9ucy5hbGxMYXVuY2hlcyI6IkFsbCBsYXVuY2hlcyIsImxhdW5jaEFuYWx5c2lzTW9kYWwuYmFzZU9wdGlvbnMuY3VycmVudCI6Ik9ubHkgY3VycmVudCBsYXVuY2giLCJsYXVuY2hBbmFseXNpc01vZGFsLmJhc2VPcHRpb25zLndpdGhTYW1lTmFtZSI6IkxhdW5jaGVzIHdpdGggdGhlIHNhbWUgbmFtZSIsImxhdW5jaEFuYWx5c2lzTW9kYWwuaXRlbU9wdGlvbnMuYnlBQSI6Ikl0ZW1zIGFuYWx5emVkIGF1dG9tYXRpY2FsbHkgKGJ5IEFBKSIsImxhdW5jaEFuYWx5c2lzTW9kYWwuaXRlbU9wdGlvbnMuaW52ZXN0aWdhdGUiOiJUbyBpbnZlc3RpZ2F0ZWQgaXRlbXMiLCJsYXVuY2hBbmFseXNpc01vZGFsLml0ZW1PcHRpb25zLm1hbnVhbGx5IjoiSXRlbXMgYW5hbHl6ZWQgbWFudWFsbHkiLCJsYXVuY2hBbmFseXNpc01vZGFsLm1vZFRpdGxlIjoiQ2hvb3NlIHRoZSBiYXNlIG9uIHdoaWNoIHRoZSBBdXRvIEFuYWx5c2lzIHdpbGwgYmUgcGVyZm9ybWVkOiIsImxhdW5jaEFuYWx5c2lzTW9kYWwub3B0aW9uc1RpdGxlIjoiQ2hvb3NlIHRoZSB0ZXN0IGl0ZW1zIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkOiIsImxhdW5jaEFuYWx5c2lzTW9kYWwuc3VjY2Vzc01lc3NhZ2UiOiJBdXRvLWFuYWx5emVyIGhhcyBiZWVuIHN0YXJ0ZWQuIiwibGF1bmNoQW5hbHlzaXNNb2RhbC50aXRsZSI6IkFuYWx5c2UgbGF1bmNoZXMiLCJsYXVuY2hBbmFseXNpc01vZGFsLnZhbGlkYXRpb24uY2hvb3NlT3B0aW9uIjoiWW91IGNhbiBub3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1bmxlc3MgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgY2hvc2VuIiwibGF1bmNoQW5hbHlzaXNNb2RhbC52YWxpZGF0aW9uLmN1cnJlbnRMYXVuY2giOiJZb3UgY2FuIG5vdCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIGZvciBBdXRvLWFuYWx5emVkIGFuZCBNYW51YWxseSBhbmFseXplZCBpdGVtcyBzaW11bHRhbmVvdXNseS4gUGxlYXNlIGNob29zZSBvbmUgb2YgdGhlbSJ9fSwiLi9sb2NhbGl6YXRpb24vdHJhbnNsYXRlZC9ydS5qc29uIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17IkFjY3VyYWN5Rm9ybUJsb2NrLm1pbkRvY0ZyZXFIaW50Ijoi0J/QsNGA0LDQvNC10YLRgCDQv9GA0LjQvdC40LzQsNC10YIg0LfQvdCw0YfQtdC90LjRjyDQvtGCIDEg0LTQviAxMCIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pblNob3VsZE1hdGNoSGludCI6ItCf0LDRgNCw0LzQtdGC0YAg0L/RgNC40L3QuNC80LDQtdGCINC30L3QsNGH0LXQvdC40Y8g0L7RgiA1MCDQtNC+IDEwMCIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pblRlcm1GcmVxSGludCI6ItCf0LDRgNCw0LzQtdGC0YAg0L/RgNC40L3QuNC80LDQtdGCINC30L3QsNGH0LXQvdC40Y8g0L7RgiAxINC00L4gMTAiLCJBY2N1cmFjeUZvcm1CbG9jay5taW5pbXVtRG9jRnJlcURlc2NyaXB0aW9uIjoi0KPRgdGC0LDQvdC+0LLQuNGC0LUg0LzQuNC90LjQvNCw0LvRjNC90YPRjiDRh9Cw0YHRgtC+0YLRgyDRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC70L7Qs9C+0LIg0LIgRWxhc3RpY1NlYXJjaCAo0JjQvdC00LXQutGBKSwg0LIg0LrQvtGC0L7RgNGL0YUg0LTQvtC70LbQvdC+INGD0L/QvtGC0YDQtdCx0LvRj9GC0YzRgdGPINGB0LvQvtCy0L4g0LjQtyDQsNC90LDQu9C40LfQuNGA0YPQtdC80L7Qs9C+INC70L7Qs9CwLiDQldGB0LvQuCDQutC+0LvQuNGH0LXRgdGC0LLQviDQu9C+0LPQvtCyINC90LjQttC1INGD0LrQsNC30LDQvdC90L7Qs9C+INC30L3QsNGH0LXQvdC40Y8sINC00LDQvdC90L7QtSDRgdC70L7QstC+INCx0YPQtNC10YIg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGM0YHRjyDQsiDQkNCy0YLQvi3QkNC90LDQu9C40LfQtS4g0KfQtdC8INGH0LDRidC1INC+0L3QviDRg9C/0L7RgtGA0LXQsdC70Y/QtdGC0YHRjyDQsiDQmNC90LTQtdC60YHQtSwg0YLQtdC8INC80LXQvdGM0YjQtSDQt9C90LDRh9C10L3QuNGPINC+0LrQsNC30YvQstCw0LXRgiDQvdCwINGA0LXQt9GD0LvRjNGC0LDRgtGLINCQ0LLRgtC+LdCQ0L3QsNC70LjQt9CwLiIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1Eb2NGcmVxVGl0bGUiOiJNaW5pbXVtIGRvY3VtZW50IGZyZXF1ZW5jeSIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1TaG91bGRNYXRjaERlc2NyaXB0aW9uIjoi0J/RgNC+0YbQtdC90YIg0YHQvtCy0L/QsNC00LXQvdC40Y8g0YHQu9C+0LIg0LzQtdC20LTRgyDQsNC90LDQu9C40LfQuNGA0YPQtdC80YvQvCDQu9C+0LPQvtC8INC4INC70L7Qs9C+0LwsINGB0L7RhdGA0LDQvdC10L3QvdGL0Lwg0LIgRWxhc3RpY1NlYXJjaC4g0JvQvtCz0Lgg0LjQtyBFbGFzdGljU2VhcmNoIGMg0L/RgNC+0YbQtdC90YLQvtC8INC90LjQttC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L3QvtCz0L4g0LHRg9C00YPRgiDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LIg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUuIiwiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bVNob3VsZE1hdGNoVGl0bGUiOiJNaW5pbXVtIHNob3VsZCBtYXRjaCIsIkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1UZXJtRnJlcURlc2NyaXB0aW9uIjoi0KPRgdGC0LDQvdC+0LLQuNGC0LUg0LzQuNC90LjQvNCw0LvRjNC90YPRjiDRh9Cw0YHRgtC+0YLRgyDRgdC70L7QstCwINCyINCw0L3QsNC70LjQt9C40YDRg9C10LzQvtC8INC70L7Qs9C1LiDQldGB0LvQuCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC70L7QsiDQvdC40LbQtSDRg9C60LDQt9Cw0L3QvdC+0LPQviDQt9C90LDRh9C10L3QuNGPLCDRjdGC0L4g0YHQu9C+0LLQviDQsdGD0LTQtdGCINC40LPQvdC+0YDQuNGA0L7QstCw0YLRjNGB0Y8g0LIg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUuINCn0LXQvCDRh9Cw0YnQtSDQvtC90L4g0YPQv9C+0YLRgNC10LHQu9GP0LXRgtGB0Y8g0LIg0LDQvdCw0LvQuNC30LjRgNGD0LXQvNC+0Lwg0LvQvtCz0LUsINGC0LXQvCDQsdC+0LvRjNGI0LUg0LfQvdCw0YfQtdC90LjQtSDQvtC60LDQt9GL0LLQsNC10YIg0L3QsCDRgNC10LfRg9C70YzRgtCw0YLRiyDQkNCy0YLQvi3QkNC90LDQu9C40LfQsC4iLCJBY2N1cmFjeUZvcm1CbG9jay5taW5pbXVtVGVybUZyZXFUaXRsZSI6Ik1pbmltdW0gdGVybSBmcmVxdWVuY3kiLCJBY2N1cmFjeUZvcm1CbG9jay5udW1iZXJPZkxvZ0xpbmVzQWxsT3B0aW9uIjoi0JLRgdC1IiwiQWNjdXJhY3lGb3JtQmxvY2subnVtYmVyT2ZMb2dMaW5lc0Rlc2NyaXB0aW9uIjoi0JrQvtC70LjRh9C10YHRgtCy0L4g0L/QtdGA0LLRi9GFINGB0YLRgNC+0Log0LvQvtCz0LAsINC60L7RgtC+0YDRi9C1INCx0YPQtNGD0YIg0YPRh9C40YLRi9Cy0LDRgtGM0YHRjyDQv9GA0Lgg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUuIiwiQWNjdXJhY3lGb3JtQmxvY2subnVtYmVyT2ZMb2dMaW5lc1RpdGxlIjoi0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiDQttGD0YDQvdCw0LvQsCIsIkFjY3VyYWN5Rm9ybUJsb2NrLnN1Ym1pdEJ1dHRvblRleHQiOiLQntGC0L/RgNCw0LLQuNGC0YwiLCJBY3Rpb25QYW5lbC5hY3Rpb25Db21wYXJlIjoi0KHRgNCw0LLQvdC40YLRjCIsIkFjdGlvblBhbmVsLmFjdGlvbkRlbGV0ZSI6ItCj0LTQsNC70LjRgtGMIiwiQWN0aW9uUGFuZWwuYWN0aW9uRm9yY2VGaW5pc2giOiLQn9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQt9Cw0LLQtdGA0YjQuNGC0YwiLCJBY3Rpb25QYW5lbC5hY3Rpb25NZXJnZSI6ItCe0LHRitC10LTQuNC90LjRgtGMIiwiQWN0aW9uUGFuZWwuYWN0aW9uTW92ZVRvQWxsIjoi0J/QtdGA0LXQudGC0Lgg0LrQviDQstGB0LXQvCDQt9Cw0L/Rg9GB0LrQsNC8IiwiQWN0aW9uUGFuZWwuYWN0aW9uTW92ZVRvRGVidWciOiLQn9C10YDQtdC80LXRgdGC0LjRgtGMINCyINC+0YLQu9Cw0LTQutGDIiwiQWN0aW9uUGFuZWwuYWN0aW9uc0J0biI6ItCU0LXQudGB0YLQstC40Y8iLCJBY3Rpb25QYW5lbC5hY3Rpb25zQnRuVG9vbHRpcCI6ItCS0YvQsdC10YDQuNGC0LUg0L3QtdGB0LrQvtC70YzQutC+INGN0LvQtdC80LXQvdGC0L7QsiDQtNC70Y8g0L7QsdGA0LDQsdC+0YLQutC4IiwiQWN0aW9uUGFuZWwuZGVsZXRlQnRuVG9vbHRpcCI6ItCj0LTQsNC70LjRgtGMINGC0LXRgdGC0L7QstGL0LUg0Y3Qu9C10LzQtdC90YLRiyDQs9GA0YPQv9C/0L7QuSIsIkFjdGlvblBhbmVsLmVkaXREZWZlY3RzIjoi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LTQtdGE0LXQutGC0YsiLCJBY3Rpb25QYW5lbC5oaXN0b3J5Ijoi0JjRgdGC0L7RgNC40Y8iLCJBY3Rpb25QYW5lbC5pZ25vcmVJbkFBIjoi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0YDQuCDQkNCy0YLQvi3QkNC90LDQu9C40LfQtSIsIkFjdGlvblBhbmVsLmluY2x1ZGVJbkFBIjoi0JLQutC70Y7Rh9C40YLRjCDQsiDQkNCy0YLQvi3QkNC90LDQu9C40LciLCJBY3Rpb25QYW5lbC5saW5rSXNzdWUiOiLQn9GA0LjQutGA0LXQv9C40YLRjCDQvtGI0LjQsdC60YMiLCJBY3Rpb25QYW5lbC5ub0J1Z1RyYWNraW5nU3lzdGVtVG9MaW5rSXNzdWUiOiLQndCw0YHRgtGA0L7QudGC0LUg0KHQuNGB0YLQtdC80YMg0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINC+0YjQuNCx0L7QuiDQvdCwINC30LDQs9GA0YPQt9C60YMg0L7RiNC40LHQvtC6IiwiQWN0aW9uUGFuZWwubm9CdWdUcmFja2luZ1N5c3RlbVRvUG9zdElzc3VlIjoi0J3QsNGB0YLRgNC+0LnRgtC1INCh0LjRgdGC0LXQvNGDINC+0YLRgdC70LXQttC40LLQsNC90LjRjyDQvtGI0LjQsdC+0Log0L3QsCDQvtGC0L/RgNCw0LLQutGDINC+0YjQuNCx0L7QuiIsIkFjdGlvblBhbmVsLnBvc3RJc3N1ZSI6ItCe0YLQv9GA0LDQstC40YLRjCDQvtGI0LjQsdC60YMiLCJBY3Rpb25QYW5lbC5wcm9jZWVkQnV0dG9uIjoi0J7QsdGA0LDQsdC+0YLQsNGC0Ywg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQtSDRjdC70LXQvNC10L3RgtGLIiwiQWN0aW9uUGFuZWwudW5saW5rSXNzdWUiOiLQntGC0LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uZm9ybUhlYWRlciI6ItCQ0LrRgtC40LLQvdCw0Y8g0LTQuNGA0LXQutGC0L7RgNC40Y8iLCJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS5zd2l0Y2hlckxhYmVsIjoi0JDQstGC0L7RgNC40LfQsNGG0LjRjyDQsiDQkNC60YLQuNCy0L3QvtC5INC00LjRgNC10LrRgtC+0YDQuNC4IiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuYmFzZURuTGFiZWwiOiJCYXNlIEROIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuZG9tYWluTGFiZWwiOiJEb21haW4iLCJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5lbWFpbEF0dHJpYnV0ZUxhYmVsIjoiRW1haWwgYXR0cmlidXRlIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuZnVsbE5hbWVBdHRyaWJ1dGVMYWJlbCI6IkZ1bGwgbmFtZSBhdHRyaWJ1dGUiLCJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5waG90b0F0dHJpYnV0ZUxhYmVsIjoiUGhvdG8gYXR0cmlidXRlIiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMudXJsTGFiZWwiOiJVcmwiLCJBZGRFZGl0RGFzaGJvYXJkLmRhc2hib2FyZE5hbWVIaW50Ijoi0JjQvNGPINC/0LDQvdC10LvQuCDRg9C/0YDQsNCy0LvQtdC90LjRjyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LTQu9C40L3QvtC5INC+0YIgMyDQtNC+IDEyOC4iLCJBZGRGaWx0ZXIuZmlsdGVyTmFtZSI6IkZpbHRlciBOYW1lIiwiQWRkRmlsdGVyLnBsYWNlaG9sZGVyRmlsdGVyTmFtZSI6IklucHV0IGZpbHRlciBuYW1lIiwiQWRkU2hhcmVkV2lkZ2V0TW9kYWwuaGVhZGVyVGV4dCI6IkFkZCBzaGFyZWQgd2lkZ2V0IiwiQWRtaW5IZWFkZXIuYnRuTG9nb3V0Ijoi0JLRi9C50YLQuCIsIkFkbWluSGVhZGVyLmJ0blRvUHJvamVjdCI6ItCd0LDQt9Cw0LQg0Log0L/RgNC+0LXQutGC0YMiLCJBZG1pbkhlYWRlci5oZWFkZXIiOiLQo9C/0YDQsNCy0LvQtdC90LjQtSIsIkFkbWluU2lkZWJhci5hbGxQcm9qZWN0cyI6ItCf0YDQvtC10LrRgtGLIiwiQWRtaW5TaWRlYmFyLmFsbFVzZXJzIjoi0JLRgdC1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuCIsIkFkbWluU2lkZWJhci5idG5Qcm9maWxlIjoi0J/RgNC+0YTQuNC70YwiLCJBZG1pblNpZGViYXIuYnRuVG9Qcm9qZWN0Ijoi0J3QsNC30LDQtCDQuiDQv9GA0L7QtdC60YLQsNC8IiwiQWRtaW5TaWRlYmFyLnBsdWdpbnMiOiLQn9C70LDQs9C40L3RiyIsIkFkbWluU2lkZWJhci5zZXR0aW5ncyI6ItCd0LDRgdGC0YDQvtC50LrQuCDRgdC10YDQstC10YDQsCIsIkFsbExhdGVzdERyb3Bkb3duLmFsbExhdW5jaGVzIjoi0JLRgdC1INC30LDQv9GD0YHQutC4IiwiQWxsTGF0ZXN0RHJvcGRvd24uYWxsTGF1bmNoZXNTaG9ydCI6ItCS0YHQtSIsIkFsbExhdGVzdERyb3Bkb3duLmxhdGVzdExhdW5jaGVzIjoi0J/QvtGB0LvQtdC00L3QuNC1INC30LDQv9GD0YHQutC4IiwiQWxsTGF0ZXN0RHJvcGRvd24ubGF0ZXN0TGF1bmNoZXNTaG9ydCI6ItCf0L7RgdC70LXQtNC90LjQtSIsIkFsbFVzZXJzR3JpZC5lbWFpbENvbCI6ItCt0LvQtdC60YLRgNC+0L3QvdGL0Lkg0LDQtNGA0LXRgSIsIkFsbFVzZXJzR3JpZC5sYXN0TG9naW5Db2wiOiLQn9C+0YHQu9C10LTQvdC40Lkg0LLRhdC+0LQiLCJBbGxVc2Vyc0dyaWQubG9naW5Db2wiOiLQm9C+0LPQuNC9IiwiQWxsVXNlcnNHcmlkLm5hbWVDb2wiOiLQmNC80Y8iLCJBbGxVc2Vyc0dyaWQucHJvamVjdHNBbmRSb2xlc0NvbCI6ItCf0YDQvtC10LrRgtGLINC4INGA0L7Qu9C4IiwiQWxsVXNlcnNHcmlkLnR5cGVDb2wiOiLQotC40L8iLCJBbGxVc2Vyc1BhZ2UuQWRkVXNlciI6ItCU0L7QsdCw0LLQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIiwiQWxsVXNlcnNQYWdlLmV4cG9ydCI6ItCt0LrRgdC/0L7RgNGC0LjRgNC+0LLQsNGC0YwiLCJBbGxVc2Vyc1BhZ2UuaW52aXRlVXNlciI6ItCf0YDQuNCz0LvQsNGB0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkFuYWx5c2lzQ29uZmlndXJhdGlvbnMuYW5hbHlzaXNDb25maWd1cmF0aW9ucyI6ItC60L7QvdGE0LjQs9GD0YDQsNGG0LjRjiDQkNCy0YLQvi3QkNC90YTQu9C40LfQsCIsIkFuYWx5c2lzQ29uZmlndXJhdGlvbnMuZ2VuZXJhdGVJbmRleCI6ItC40L3QtNC10LrRgSDQsdGL0Lsg0YHQs9C10L3QtdGA0LjRgNC+0LLQsNC9IiwiQW5hbHlzaXNDb25maWd1cmF0aW9ucy5yZW1vdmVJbmRleCI6ItC40L3QtNC10LrRgSDQsdGL0Lsg0YPQtNCw0LvQtdC9IiwiQW5hbHlzaXNDb25maWd1cmF0aW9ucy51cGRhdGUiOiLQvtCx0L3QvtCy0LjQuyIsIkFuYWx5c2lzRm9ybS5hbmFseXNpc0NsYXNzaWNNb2RlVGl0bGUiOiLQmtC70LDRgdGB0LjRh9C10YHQutC40LkiLCJBbmFseXNpc0Zvcm0uYW5hbHlzaXNMaWdodE1vZGVUaXRsZSI6ItCc0Y/Qs9C60LjQuSIsIkFuYWx5c2lzRm9ybS5hbmFseXNpc01vZGVUaXRsZSI6ItCi0L7Rh9C90L7RgdGC0Ywg0JDQstGC0L4t0JDQvdCw0LvQuNC30LAiLCJBbmFseXNpc0Zvcm0uYW5hbHlzaXNNb2RlcmF0ZU1vZGVUaXRsZSI6ItCh0YDQtdC00L3QuNC5IiwiQW5hbHlzaXNGb3JtLnVwZGF0ZUVycm9yTm90aWZpY2F0aW9uIjoiU29tZXRoaW5nIHdlbnQgd3JvbmciLCJBbmFseXNpc0Zvcm0udXBkYXRlU3VjY2Vzc05vdGlmaWNhdGlvbiI6ItCd0LDRgdGC0YDQvtC50LrQuCDQv9GA0L7QtdC60YLQsCDRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0LvQtdC90YsiLCJBbmFseXNpc1Byb3BlcnRpZXMuYWxsIjoi0JLRgdC1IiwiQW5hbHlzaXNQcm9wZXJ0aWVzLmZyb20iOiLRgSIsIkFuYWx5c2lzUHJvcGVydGllcy5vZmYiOiLQktGL0LrQuyIsIkFuYWx5c2lzUHJvcGVydGllcy5vbiI6ItCS0LrQuyIsIkFuYWx5c2lzUHJvcGVydGllcy50byI6ItC90LAiLCJBcGlQYWdlLnRpdGxlIjoi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPIEFQSSIsIkFzc2lnbmVkUHJvamVjdHNCbG9jay5oZWFkZXJOYW1lQ29sIjoi0J3QsNC30L3QsNGH0LXQvdC90YvQtSDQv9GA0L7QtdC60YLRiyIsIkFzc2lnbmVkUHJvamVjdHNCbG9jay5oZWFkZXJSb2xlQ29sIjoi0J/RgNC+0LXQutGC0L3QsNGPINGA0L7Qu9GMIiwiQXR0YWNobWVudERpYWxvZy5jbG9zZSI6IkNsb3NlIiwiQXR0YWNobWVudERpYWxvZy5lZGl0b3IiOiJFZGl0b3IiLCJBdHRhY2htZW50RGlhbG9nLm5vQXR0YWNobWVudHNNZXNzYWdlIjoiTm8gYXR0YWNobWVudHMgdG8gZGlzcGxheSIsIkF0dGFjaG1lbnREaWFsb2cucm90YXRlIjoiUm90YXRlIiwiQXR0YWNobWVudERpYWxvZy50aXRsZSI6IkF0dGFjaG1lbnQiLCJBdHRyaWJ1dGVMaXN0LmFkZE5ldyI6IkFkZCBuZXciLCJCYXJDaGFydFRvb2x0aXAuZmFpbGVkIjoi0J3QtdGD0LTQsNGH0L3QvjoiLCJCYXJDaGFydFRvb2x0aXAucGFzc2VkIjoi0KPRgdC/0LXRiNC90L46IiwiQmFyQ2hhcnRUb29sdGlwLnNraXBwZWQiOiLQn9GA0L7Qv9GD0YnQtdC90L46IiwiQmV0YUJhZGdlLmJldGEiOiLQsdC10YLQsCIsIkJyZWFkY3J1bWJzLmxvc3RMYXVuY2giOiLQmNGB0YXQvtC00L3Ri9C5INC30LDQv9GD0YHQuiDRg9GC0LXRgNGP0L0iLCJCcmVhZGNydW1icy5yZXN0b3JlUGF0aCI6ItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9GD0YLRjCIsIkNhdGVnb3JpZXNMaXN0LmFkZE9yZ2FuaXphdGlvbkJ1dHRvblRpdGxlIjoi0JTQvtCx0LDQstC40YLRjCDQvtGA0LPQsNC90LjQt9Cw0YbQuNGOIEdpdEh1YiIsIkNhdGVnb3JpZXNMaXN0Lm9yZ2FuaXphdGlvbk5hbWVMYWJlbCI6ItCd0LDQt9Cy0LDQvdC40LUg0L7RgNCz0LDQvdC40LfQsNGG0LjQuCIsIkNoYW5nZVBhc3N3b3JkQmxvY2suY2hhbmdlUGFzcyI6ItCY0LfQvNC10L3QtdC90LjQtSDQv9Cw0YDQvtC70Y8iLCJDaGFuZ2VQYXNzd29yZEJsb2NrLmVudGVyRW1haWwiOiLQktCy0LXQtNC40YLQtSDQvdC+0LLRi9C5INC/0LDRgNC+0LvRjCDQuCDQv9C+0LTRgtCy0LXRgNC00LjRgtC1INC10LPQviIsIkNoYW5nZVBhc3N3b3JkRm9ybS5jaGFuZ2VQYXNzd29yZCI6ItCY0LfQvNC10L3QuNGC0Ywg0L/QsNGA0L7Qu9GMIiwiQ2hhbmdlUGFzc3dvcmRGb3JtLmZhaWxlZENoYW5nZSI6ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQv9Cw0YDQvtC70YwiLCJDaGFuZ2VQYXNzd29yZEZvcm0ubmV3UGFzc3dvcmRDb25maXJtUGxhY2Vob2xkZXIiOiLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC90L7QstGL0Lkg0L/QsNGA0L7Qu9GMIiwiQ2hhbmdlUGFzc3dvcmRGb3JtLm5ld1Bhc3N3b3JkUGxhY2Vob2xkZXIiOiLQndC+0LLRi9C5INC/0LDRgNC+0LvRjCIsIkNoYW5nZVBhc3N3b3JkRm9ybS5wYXNzd29yZENvbnN0cmFpbnRzIjoiNC0xMjgg0YHQuNC80LLQvtC70L7QsiIsIkNoYW5nZVBhc3N3b3JkRm9ybS5zdWNjZXNzQ2hhbmdlIjoi0JLQsNGIINC/0LDRgNC+0LvRjCDRg9GB0L/QtdGI0L3QviDQuNC30LzQtdC90LXQvSIsIkNoYW5nZVBhc3N3b3JkTW9kYWwuY29uZmlybUxhYmVsIjoiQ29uZmlybSIsIkNoYW5nZVBhc3N3b3JkTW9kYWwuY29uZmlybVBsYWNlaG9sZGVyIjoiQ29uZmlybSBuZXcgcGFzc3dvcmQiLCJDaGFuZ2VQYXNzd29yZE1vZGFsLmhlYWRlciI6IkNoYW5nZSBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwubmV3UGFzc3dvcmRMYWJlbCI6Ik5ldyBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwubmV3UGFzc3dvcmRQbGFjZWhvbGRlciI6IkVudGVyIG5ldyBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwub2xkUGFzc3dvcmRMYWJlbCI6Ik9sZCBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwub2xkUGFzc3dvcmRQbGFjZWhvbGRlciI6IkVudGVyIG9sZCBwYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZUNvbmZpcm1QYXNzd29yZCI6ItCf0LDRgNC+0LvQuCDQvdC1INGB0L7QstC/0LDQtNCw0Y7RgiIsIkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZUVtYWlsIjoi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGN0LvQtdC60YLRgNC+0L3QvdGL0Lkg0LDQtNGA0LXRgSIsIkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZVBhc3N3b3JkIjoi0J/QsNGA0L7Qu9GMINC00L7Qu9C20LXQvSDRgdC+0LTQtdGA0LbQsNGC0Ywg0L7RgiA0INC00L4gMjUg0YHQuNC80LLQvtC70L7QsiIsIkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZVVzZXJOYW1lIjoi0J/QvtC70L3QvtC1INC40LzRjyDQtNC+0LvQttC90L4g0YHQvtC00LXRgNC20LDRgtGMINC+0YIgMyDQtNC+IDI1NiDRgdC40LzQstC+0LvQvtCyLCDQstC60LvRjtGH0LDRjyDQu9Cw0YLQuNC90YHQutC40LUg0Lgg0YDRg9GB0YHQutC40LUg0LHRg9C60LLRiywg0YbQuNGE0YDRiywg0LTQtdGE0LjRgSwg0L3QuNC20L3QtdC1INC/0L7QtNGH0LXRgNC60LjQstCw0L3QuNC1LCDRgtC+0YfQutGDINC4INC/0YDQvtCx0LXQuy4iLCJDaGFuZ2VQYXNzd29yZE1vZGFsLnNob3dQYXNzd29yZCI6IlNob3cgcGFzc3dvcmQiLCJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmNhbmNlbFRleHQiOiLQntGC0LzQtdC90LAiLCJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmNoYW5nZUFjY291bnRSb2xlVGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LjQt9C80LXQvdC40YLRjCDQv9GA0L7QtdC60YLQvdGD0Y4g0YDQvtC70Ywg0LTQu9GPICd7bmFtZX0nPyIsIkNoYW5nZVByb2plY3RSb2xlTW9kYWwuY2hhbmdlQWNjb3VudFJvbGVUaXRsZSI6ItC40LfQvNC10L3QuNGC0Ywg0YDQvtC70YwiLCJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLnN1Ym1pdFRleHQiOiLQmNC30LzQtdC90LjRgtGMIiwiQ2hhcnRzLmFiIjoi0J7QoiIsIkNoYXJ0cy5jYXNlcyI6ItGB0YbQtdC90LDRgNC40LgiLCJDaGFydHMuZmFpbGVkIjoi0J3QtdGD0LTQsNGH0L3QviIsIkNoYXJ0cy5mYWlsZWRTa2lwcGVkVG90YWwiOiIlICjQndC10YPQtNCw0YfQvdGL0YUr0J/RgNC+0L/Rg9GJ0LXQvdC90YvRhSkv0JLRgdC10LPQviIsIkNoYXJ0cy5sYXVuY2hOYW1lIjoiTGF1bmNoIG5hbWU6IiwiQ2hhcnRzLm5kIjoi0JHQlCIsIkNoYXJ0cy5ub3RQYXNzZWQiOiJOb3QgcGFzc2VkIiwiQ2hhcnRzLnBhc3NlZCI6ItCj0YHQv9C10YjQvdC+IiwiQ2hhcnRzLnBiIjoi0JTQnyIsIkNoYXJ0cy5zaSI6ItCh0J4iLCJDaGFydHMuc2tpcHBlZCI6ItCf0YDQvtC/0YPRidC10L3QviIsIkNoYXJ0cy50aSI6ItCi0JAiLCJDaGFydHMudG90YWwiOiLQktGB0LXQs9C+IHt0eXBlfSIsIkNvbW1vbi5hZGQiOiLQlNC+0LHQsNCy0LjRgtGMIiwiQ29tbW9uLmNhbmNlbCI6ItCe0YLQvNC10L3QuNGC0YwiLCJDb21tb24uY2xvbmUiOiLQmtC70L7QvdC40YDQvtCy0LDRgtGMIiwiQ29tbW9uLmNsb3NlTW9kYWxXYXJuaW5nIjoi0JLRiyDQtNC+0LvQttC90Ysg0YHQvtGF0YDQsNC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdC40YLRjCDQuNGFINC/0LXRgNC10LQg0LfQsNC60YDRi9GC0LjQtdC8INC+0LrQvdCwIiwiQ29tbW9uLmNvbmZpcm0iOiLQn9C+0LTRgtCy0LXRgNC00LjRgtGMIiwiQ29tbW9uLmRlbGV0ZSI6ItCj0LTQsNC70LjRgtGMIiwiQ29tbW9uLmRpc2NhcmQiOiLQodCx0YDQvtGB0LjRgtGMIiwiQ29tbW9uLmVkaXQiOiLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIsIkNvbW1vbi5maW5pc2giOiLQl9Cw0LLQtdGA0YjQuNGC0YwiLCJDb21tb24uaW52aXRlIjoi0J/RgNC40LPQu9Cw0YHQuNGC0YwiLCJDb21tb24ubWVyZ2UiOiLQodC+0LXQtNC40L3QuNGC0YwiLCJDb21tb24ubW92ZSI6ItCf0LXRgNC10LTQstC40L3Rg9GC0YwiLCJDb21tb24ubm9SZXN1bHRzIjoi0KDQtdC30YPQu9GM0YLQsNGC0L7QsiDQvdC1INC90LDQudC00LXQvdC+IiwiQ29tbW9uLm9mIjoi0LjQtyIsIkNvbW1vbi5vZmYiOiLQktGL0LrQuyIsIkNvbW1vbi5vayI6ItCe0LoiLCJDb21tb24ub24iOiLQktC60LsiLCJDb21tb24ucmVmcmVzaCI6ItCe0LHQvdC+0LLQuNGC0YwiLCJDb21tb24ucmVxdWlyZWRGaWVsZEhpbnQiOiLQrdGC0L4g0L/QvtC70LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QviIsIkNvbW1vbi5zYXZlIjoi0KHQvtGF0YDQsNC90LjRgtGMIiwiQ29tbW9uLnNlY29uZHMiOiLRgdC10LrRg9C90LTRiy/RgdC10LrRg9C90LQiLCJDb21tb24uc3VibWl0Ijoi0J7RgtC/0YDQsNCy0LjRgtGMIiwiQ29tbW9uLnVwZGF0ZSI6ItCe0LHQvdC+0LLQuNGC0YwiLCJDb21tb24udmFsaWRhdGlvbi5lbWFpbCI6ItCd0LXQv9GA0LDQstC40LvRjNC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi9GOINCS0LLQtdC00LjRgtC1INC/0YDQsNCy0LjQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIiwiQ29tbW9uRW50aXR5Q2hhbmdlcy5jcmVhdGUiOiJjcmVhdGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMuY3JlYXRlRmlsdGVyIjoiY3JlYXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLmNyZWF0ZVdpZGdldCI6ImNyZWF0ZWQgd2lkZ2V0IiwiQ29tbW9uRW50aXR5Q2hhbmdlcy5kZWxldGVEYXNoYm9hcmQiOiJkZWxldGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMuZGVsZXRlRmlsdGVyIjoiZGVsZXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLmRlbGV0ZVdpZGdldCI6ImRlbGV0ZWQgd2lkZ2V0IiwiQ29tbW9uRW50aXR5Q2hhbmdlcy51cGRhdGVEYXNoYm9hcmQiOiJ1cGRhdGVkIGRhc2hib2FyZCIsIkNvbW1vbkVudGl0eUNoYW5nZXMudXBkYXRlRmlsdGVyIjoidXBkYXRlZCBmaWx0ZXIiLCJDb21tb25FbnRpdHlDaGFuZ2VzLnVwZGF0ZVdpZGdldCI6InVwZGF0ZWQgd2lkZ2V0IiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMuZGVzY3JpcHRpb25MYWJlbCI6IkRlc2NyaXB0aW9uIiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciI6IkFkZCBzb21lIGRlc2NyaXB0aW9uIHRvIHdpZGdldCIsIkNvbW1vbldpZGdldENvbnRyb2xzLm5hbWVMYWJlbCI6IldpZGdldCBuYW1lIiwiQ29tbW9uV2lkZ2V0Q29udHJvbHMubmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgd2lkZ2V0IG5hbWUiLCJDb21tb25XaWRnZXRDb250cm9scy5zaGFyZUxhYmVsIjoiU2hhcmUiLCJDb21tb25XaWRnZXRDb250cm9scy53aWRnZXROYW1lSGludCI6IldpZGdldCBuYW1lIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDEyOCIsIkNvbXBhcmVMYXVuY2hEaWFsb2cuY29tcGFyZUxhdW5jaEhlYWRlciI6ItCh0YDQsNCy0L3QuNGC0Ywg0LfQsNC/0YPRgdC60LgiLCJDb21wYXJlTGF1bmNoRGlhbG9nLnlBeGlzVGl0bGUiOiIlINGC0LXRgdGC0L7QstGL0YUg0YHRhtC10L3QsNGA0LjQtdCyIiwiQ29uZGl0aW9ucy5hbGwiOiLQktGB0LUiLCJDb25kaXRpb25zLmFsbFNob3J0Ijoi0JLRgdC1IiwiQ29uZGl0aW9ucy5hbnkiOiLQm9GO0LHQvtC5IiwiQ29uZGl0aW9ucy5hbnlTaG9ydCI6ItCb0Y7QsSIsIkNvbmRpdGlvbnMuY250Ijoi0KHQvtC00LXRgNC20LjRgiIsIkNvbmRpdGlvbnMuY250U2hvcnQiOiLRgdC0IiwiQ29uZGl0aW9ucy5lcSI6ItCg0LDQstC90Y/QtdGC0YHRjyIsIkNvbmRpdGlvbnMuZXFTaG9ydCI6ItGA0LDQsiIsIkNvbmRpdGlvbnMuZ3RlIjoi0JHQvtC70YzRiNC1INC40LvQuCDRgNCw0LLQvdC+IiwiQ29uZGl0aW9ucy5ndGVTaG9ydCI6IuKJpSIsIkNvbmRpdGlvbnMubHRlIjoi0JzQtdC90YzRiNC1INC40LvQuCDRgNCw0LLQvdC+IiwiQ29uZGl0aW9ucy5sdGVTaG9ydCI6IuKJpCIsIkNvbmRpdGlvbnMubm90Q250Ijoi0J3QtSDRgdC+0LTQtdGA0LbQuNGCIiwiQ29uZGl0aW9ucy5ub3RDbnRTaG9ydCI6IiHRgdC0IiwiQ29uZGl0aW9ucy5ub3RFcSI6ItCd0LUg0YDQsNCy0L3Rj9C10YLRgdGPIiwiQ29uZGl0aW9ucy5ub3RFcVNob3J0IjoiIdGA0LDQsiIsIkNvbmRpdGlvbnMud2l0aG91dEFsbCI6ItCR0LXQtyDQstGB0LXRhSIsIkNvbmRpdGlvbnMud2l0aG91dEFsbFNob3J0IjoiIdCy0YHQtSIsIkNvbmRpdGlvbnMud2l0aG91dEFueSI6ItCR0LXQtyDQu9GO0LHQvtCz0L4iLCJDb25kaXRpb25zLndpdGhvdXRBbnlTaG9ydCI6IiHQu9GO0LEiLCJDb25maWdFeGFtcGxlc0Jsb2NrLmhlYWRlciI6ItCf0YDQuNC80LXRgNGLINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuSIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuYnV0dG9uQ29weVRpdGxlIjoi0J/QvtC70YPRh9C40YLRjCIsIkNvcHlTZW5kRGVmZWN0TW9kYWwuYnV0dG9uU2VuZFRpdGxlIjoi0J7RgtC/0YDQsNCy0LjRgtGMIiwiQ29weVNlbmREZWZlY3RNb2RhbC5jb250ZW50Q29weVRpdGxlIjoi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQv9C+0LvRg9GH0LjRgtGMINC00LDQvdC90YvQtSDQviDQtNC10YTQtdC60YLQtSDQuNC3INC/0YDQtdC00YvQtNGD0YnQtdCz0L4g0L3QtdGD0LTQsNGH0L3QvtCz0L4g0LfQsNC/0YPRgdC60LA/IiwiQ29weVNlbmREZWZlY3RNb2RhbC5jb250ZW50U2VuZFRpdGxlIjoi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQvtGC0L/RgNCw0LLQuNGC0Ywg0LTQsNC90L3Ri9C1INC+INC00LXRhNC10LrRgtC1INCyINC/0L7RgdC70LXQtNC90LjQuSDQt9Cw0L/Rg9GB0Lo/IiwiQ29weVNlbmREZWZlY3RNb2RhbC5oZWFkZXJDb3B5VGl0bGUiOiLQn9C+0LvRg9GH0LjRgtGMINGA0LXQt9GD0LvRjNGC0LDRgtGLINC/0YDQtdC00YvQtNGD0YnQtdCz0L4g0LfQsNC/0YPRgdC60LAiLCJDb3B5U2VuZERlZmVjdE1vZGFsLmhlYWRlclNlbmRUaXRsZSI6ItCe0YLQv9GA0LDQstC40YLRjCDRgNC10LfRg9C70YzRgtCw0YLRiyDQsiDQv9C+0YHQu9C10LTQvdC40Lkg0LfQsNC/0YPRgdC6IiwiQ29weVNlbmREZWZlY3RNb2RhbC5zdWNjZXNzTWVzc2FnZSI6ItCU0LXRhNC10LrRgtGLINC+0LHQvdC+0LLQu9C10L3RiyIsIkNyZWF0ZVVzZXIud2VsY29tZSI6ItGB0LDRgNC00Y3Rh9C90LAg0LfQsNC/0YDQsNGI0LDQtdC8INGDIFJlcG9ydCBQb3J0YWwhIiwiQ3VtdWxhdGl2ZVRyZW5kQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIkN1bXVsYXRpdmVUcmVuZENvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiQ3VtdWxhdGl2ZVRyZW5kQ29udHJvbHMuYXR0cmlidXRlS2V5RmllbGRMYWJlbCI6IkF0dHJpYnV0ZSBrZXkiLCJDdW11bGF0aXZlVHJlbmRDb250cm9scy5hdHRyaWJ1dGVLZXlGaWVsZFBsYWNlaG9sZGVyIjoiRW50ZXIgYW4gYXR0cmlidXRlIGtleSIsIkN1bXVsYXRpdmVUcmVuZENvbnRyb2xzLmF0dHJpYnV0ZUtleUZpZWxkVGlwIjoiVG8gdmlldyBhIGR5bmFtaWMgb2YgYSBkZWZpbml0ZSBhdHRyaWJ1dGUgeW91IHNob3VsZCB0eXBlIGl0cyBrZXkiLCJDdXN0b21Db2x1bW5JdGVtLmF0dHJpYnV0ZUtleVBsYWNlaG9sZGVyIjoiQXR0cmlidXRlIGtleSIsIkN1c3RvbUNvbHVtbkl0ZW0ubGFiZWwiOiJDdXN0b20gY29sdW1uIiwiQ3VzdG9tQ29sdW1uSXRlbS5uYW1lUGxhY2Vob2xkZXIiOiJDb2x1bW4gbmFtZSIsIkN1c3RvbUNvbHVtbnNDb250cm9sLmFkZENvbHVtbiI6IisgQWRkIGN1c3RvbSBjb2x1bW4iLCJDdXN0b21Db2x1bW5zQ29udHJvbC50aXAiOiJZb3UgY2FuIGFkZCBjdXN0b20gY29sdW1uIHRvIHZpZXcgYXR0cmlidXRlcyB3aXRoIGNob3NlbiBrZXkiLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuY3VycmVudFVzZXJEYXNoYm9hcmRzQWN0aW9uVGV4dCI6ItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQn9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuY3VycmVudFVzZXJEYXNoYm9hcmRzSGVhZGxpbmUiOiLQoyDQstCw0YEg0L3QtdGCINCf0LDQvdC10LvQtdC5INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRGFzaGJvYXJkRW1wdHlSZXN1bHRzLmN1cnJlbnRVc2VyRGFzaGJvYXJkc1RleHQiOiLQlNC+0LHQsNCy0YzRgtC1INGB0LLQvtGOINC/0LXRgNCy0YPRjiDQn9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8sINGH0YLQvtCx0Ysg0L/RgNC+0LDQvdCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMiLCJEYXNoYm9hcmRFbXB0eVJlc3VsdHMuc2hhcmVkRGFzaGJvYXJkc0hlYWRsaW5lIjoi0J3QtdGCINC00L7RgdGC0YPQv9C90YvRhSDQn9Cw0L3QtdC70LXQuSDRg9C/0YDQsNCy0LvQtdC90LjRjyIsIkRhc2hib2FyZEZvcm0uYWRkTW9kYWxTdWJtaXRCdXR0b25UZXh0Ijoi0JTQvtCx0LDQstC40YLRjCIsIkRhc2hib2FyZEZvcm0uYWRkTW9kYWxUaXRsZSI6ItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQn9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJEYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uTGFiZWwiOiLQntC/0LjRgdCw0L3QuNC1IiwiRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmREZXNjcmlwdGlvblBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0L7Qv9C40YHQsNC90LjQtSDQv9Cw0L3QtdC70Lgg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJEYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWVMYWJlbCI6ItCY0LzRjyIsIkRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZVBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0L3QsNC30LLQsNC90LjQtSDQv9Cw0L3QtdC70Lgg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJEYXNoYm9hcmRGb3JtLmRhc2hib2FyZFNoYXJlTGFiZWwiOiLQn9C+0LTQtdC70LjRgtGM0YHRjyIsIkRhc2hib2FyZEZvcm0uZWRpdE1vZGFsU3VibWl0QnV0dG9uVGV4dCI6ItCe0LHQvdC+0LLQuNGC0YwiLCJEYXNoYm9hcmRGb3JtLmVkaXRNb2RhbFRpdGxlIjoi0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/QsNC90LXQu9GMINGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRGFzaGJvYXJkRm9ybS5tb2RhbENhbmNlbEJ1dHRvblRleHQiOiLQntGC0LzQtdC90LjRgtGMIiwiRGFzaGJvYXJkR3JpZC5teURhc2hib2FyZHMiOiLQnNC+0Lgg0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRGFzaGJvYXJkR3JpZC5zaGFyZWREYXNoYm9hcmRzIjoi0JTQvtGB0YLRg9C/0L3Ri9C1INC/0LDQvdC10LvQuCDRg9C/0YDQsNCy0LvQtdC90LjRjyIsIkRhc2hib2FyZEdyaWRJdGVtLmRhc2hib2FyZElzU2hhcmVkIjoi0J/QsNC90LXQu9GMINGD0L/RgNCw0LLQu9C10L3QuNGPINC00L7RgdGC0YPQv9C90LAiLCJEYXNoYm9hcmRHcmlkSXRlbS5kYXNoYm9hcmRJc1NoYXJlZEJ5Ijoi0J/QsNC90LXQu9GMINGD0L/RgNCw0LLQu9C10L3QuNGPINC00L7QsdCw0LLQu9C10L3QsCDQsiDQtNC+0YHRgtGD0L8iLCJEYXNoYm9hcmRJdGVtUGFnZS5hZGROZXdXaWRnZXQiOiLQlNC+0LHQsNCy0LjRgtGMINC90L7QstGL0Lkg0LLQuNC00LbQtdGCIiwiRGFzaGJvYXJkSXRlbVBhZ2UuYWRkU2hhcmVkV2lkZ2V0Ijoi0JTQvtCx0LDQstC40YLRjCDQstC40LTQttC10YIg0Lgg0L/QvtC00LXQu9C40YLRjNGB0Y8iLCJEYXNoYm9hcmRJdGVtUGFnZS5hZGRXaWRnZXRTdWNjZXNzIjoiV2lkZ2V0IGhhcyBiZWVuIGFkZGVkIiwiRGFzaGJvYXJkSXRlbVBhZ2UuZGFzaGJvYXJkRW1wdHlUZXh0Ijoi0JTQvtCx0LDQstGM0YLQtSDQv9C10YDQstGL0Lkg0LLQuNC00LbQtdGCLCDRh9GC0L7QsdGLINC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDRgtGMINGB0YLQsNGC0LjRgdGC0LjQutGDIiwiRGFzaGJvYXJkSXRlbVBhZ2UuZGVsZXRlIjoi0KPQtNCw0LvQuNGC0YwiLCJEYXNoYm9hcmRJdGVtUGFnZS5lZGl0RGFzaGJvYXJkIjoi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwiLCJEYXNoYm9hcmRJdGVtUGFnZS5mdWxsc2NyZWVuIjoi0J/QvtC70L3QvtGN0LrRgNCw0L3QvdGL0Lkg0YDQtdC20LjQvCIsIkRhc2hib2FyZEl0ZW1QYWdlLm5vdE15RGFzaGJvYXJkRW1wdHlIZWFkZXIiOiLQndCwINGN0YLQvtC5INCf0LDQvdC10LvQuCDRg9C/0YDQsNCy0LvQtdC90LjRjyDQvdC10YIg0LLQuNC00LbQtdGC0L7QsiIsIkRhc2hib2FyZFBhZ2UubW9kYWwuZGVsZXRlTW9kYWxDb25maXJtYXRpb25UZXh0Ijoi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQv9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8gJzxiPntuYW1lfTwvYj4nPyDQktGLINC/0L7RgtC10YDRj9C10YLQtSDQtNC+0YHRgtGD0L8g0Log0L3QtdC5LiDQrdGC0L4g0LTQtdC50YHRgtCy0LjQtSDQvdC10LvRjNC30Y8g0L7RgtC80LXQvdC40YLRjC4iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLmRlbGV0ZU1vZGFsU3VibWl0QnV0dG9uVGV4dCI6ItCj0LTQsNC70LjRgtGMIiwiRGFzaGJvYXJkUGFnZS5tb2RhbC5kZWxldGVNb2RhbFRpdGxlIjoi0YPQtNCw0LvQtdC90LjQtSDQv9Cw0L3QtdC70Lgg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLmRlbGV0ZU1vZGFsV2FybmluZ01lc3NhZ2UiOiLQktGLINGB0L7QsdC40YDQsNC10YLQtdGB0Ywg0YPQtNCw0LvQuNGC0Ywg0L3QtSDRgdCy0L7RjiDQv9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8uINCt0YLQviDQvNC+0LbQtdGCINC/0L7QstC70LjRj9GC0Ywg0L3QsCDQuNC40L3RhNC+0YDQvNCw0YbQuNGOINC00YDRg9Cz0LjRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9GA0L7QtdC60YLQsC4iLCJEYXNoYm9hcmRQYWdlLm1vZGFsLm1vZGFsQ2FuY2VsQnV0dG9uVGV4dCI6ItCe0YLQvNC10L3QuNGC0YwiLCJEYXNoYm9hcmRQYWdlLnRpdGxlIjoi0JLRgdC1INC/0LDQvdC10LvQuCDRg9C/0YDQsNCy0LvQtdC90LjRjyIsIkRhc2hib2FyZFBhZ2VIZWFkZXIuYWxsRGFzaGJvYXJkc1RpdGxlIjoiQWxsIGRhc2hib2FyZHMiLCJEYXNoYm9hcmRQYWdlVG9vbGJhci5zZWFyY2hQbGFjZWhvbGRlciI6ItCf0L7QuNGB0Log0L/QviDQvdCw0LfQstCw0L3QuNGOIiwiRGFzaGJvYXJkVGFibGUuZGFzaGJvYXJkTmFtZSI6ItCd0LDQt9Cy0LDQvdC40LUg0J/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRGFzaGJvYXJkVGFibGUuZGVsZXRlRGFzaGJvYXJkIjoi0KPQtNCw0LvQuNGC0YwiLCJEYXNoYm9hcmRUYWJsZS5kZXNjcmlwdGlvbiI6ItCe0L/QuNGB0LDQvdC40LUiLCJEYXNoYm9hcmRUYWJsZS5lZGl0Ijoi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwiLCJEYXNoYm9hcmRUYWJsZS5vd25lciI6ItCS0LvQsNC00LXQu9C10YYiLCJEYXNoYm9hcmRUYWJsZS5zaGFyZWQiOiLQn9GA0LXQtNC+0YHRgtCw0LLQu9C10L0iLCJEZWZhdWx0UHJvamVjdFNldHRpbmdzLmZyb20iOiLRgSIsIkRlZmF1bHRQcm9qZWN0U2V0dGluZ3Mua2VlcEF0dGFjaG1lbnRzIjoi0KHQvtGF0YDQsNC90Y/RgtGMINGB0LrRgNC40L3RiNC+0YLRiyIsIkRlZmF1bHRQcm9qZWN0U2V0dGluZ3Mua2VlcExvZ3MiOiLQodC+0YXRgNCw0L3Rj9GC0Ywg0LbRg9GA0L3QsNC7IiwiRGVmYXVsdFByb2plY3RTZXR0aW5ncy5sYXVuY2hJbmFjdGl2aXR5Ijoi0JLRgNC10LzRjyDQsdC10LfQtNC10LnRgdGC0LLQuNGPINC30LDQv9GD0YHQutCwIiwiRGVmYXVsdFByb2plY3RTZXR0aW5ncy50byI6ItC90LAiLCJEZWZlY3RUeXBlLmF1dG9tYXRpb25fYnVnIjoi0J7RiNC40LHQutC4INGC0LXRgdGC0LAiLCJEZWZlY3RUeXBlLm5vX2RlZmVjdCI6ItCd0LXRgiDQtNC10YTQtdC60YLQvtCyIiwiRGVmZWN0VHlwZS5wcm9kdWN0X2J1ZyI6ItCU0LXRhNC10LrRgtGLINC/0YDQvtC00YPQutGC0LAiLCJEZWZlY3RUeXBlLnN5c3RlbV9pc3N1ZSI6ItCh0LjRgdGC0LXQvNC90YvQtSDQvtGI0LjQsdC60LgiLCJEZWZlY3RUeXBlLnRvX2ludmVzdGlnYXRlIjoi0KLRgNC10LHRg9C10YLRgdGPINCw0L3QsNC70LjQtyIsIkRlZmVjdFR5cGVDaGFuZ2VzLmRlZmVjdFR5cGVzIjoi0YLQuNC/0Ysg0LTQtdGE0LXQutGC0L7QsiIsIkRlZmVjdFR5cGVDaGFuZ2VzLmRlbGV0ZSI6ItGD0LTQsNC70LjQuyDQtNC10YTQtdC60YIg0YLQuNC/IiwiRGVmZWN0VHlwZUNoYW5nZXMudXBkYXRlIjoi0L7QsdC90L7QstC40LsiLCJEZWZlY3RUeXBlVG9vbHRpcC5hYi10b3RhbCI6ItCS0YHQtdCz0L4g0L7RiNC40LHQvtC6INCw0LLRgtC+0LzQsNGC0LjQt9Cw0YbQuNC4IiwiRGVmZWN0VHlwZVRvb2x0aXAubmQtdG90YWwiOiLQktGB0LXQs9C+INCx0LXQtyDQtNC10YTQtdC60YLQvtCyIiwiRGVmZWN0VHlwZVRvb2x0aXAucGItdG90YWwiOiLQktGB0LXQs9C+INC00LXRhNC10LrRgtC+0LIg0L/RgNC+0LTRg9C60YLQsCIsIkRlZmVjdFR5cGVUb29sdGlwLnNpLXRvdGFsIjoi0JLRgdC10LPQviDRgdC40YHRgtC10LzQvdGL0YUg0L7RiNC40LHQvtC6IiwiRGVsZXRlRmlsdGVyRGlhbG9nLmRlbGV0ZUZpbHRlciI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0YTQuNC70YzRgtGAICc8Yj57bmFtZX08L2I+Jz8iLCJEZWxldGVGaWx0ZXJEaWFsb2cuZGVsZXRlRmlsdGVySGVhZGVyIjoi0KPQtNCw0LvQuNGC0Ywg0YTQuNC70YzRgtGAIiwiRGVsZXRlSW1hZ2VNb2RhbC5oZWFkZXIiOiLQo9C00LDQu9C40YLRjCDRhNC+0YLQviIsIkRlbGV0ZUltYWdlTW9kYWwudGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0YTQvtGC0L4g0L/RgNC+0YTQuNC70Y8/IiwiRGVsZXRlTGF1bmNoRGlhbG9nLmRlbGV0ZUxhdW5jaCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LfQsNC/0YPRgdC6ICc8Yj57bmFtZX0gI3tudW1iZXJ9PC9iPic/INCt0YLQviDQtNC10LnRgdGC0LLQuNC1INC90LXQu9GM0LfRjyDQvtGC0LzQtdC90LjRgtGMLiIsIkRlbGV0ZUxhdW5jaERpYWxvZy5kZWxldGVMYXVuY2hIZWFkZXIiOiLQo9C00LDQu9C40YLRjCDQt9Cw0L/Rg9GB0LoiLCJEZWxldGVMYXVuY2hEaWFsb2cuZGVsZXRlTGF1bmNoV2FybmluZyI6ItCS0Ysg0YHQvtCx0LjRgNCw0LXRgtC10YHRjCDRg9C00LDQu9C40YLRjCDQt9Cw0L/Rg9GB0Log0LTRgNGD0LPQvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLiDQrdGC0L4g0LzQvtC20LXRgiDQv9C+0LLQu9C40Y/RgtGMINC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y4g0LTRgNGD0LPQuNGFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INC90LAg0L/RgNC+0LXQutGC0LUuIiwiRGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmNhbmNlbEJ1dHRvbiI6IkNhbmNlbCIsIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5tZXNzYWdlIjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBub3RpZmljYXRpb24gIHJ1bGUgPGI+e251bWJlcn08L2I+PyIsIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5zdWJtaXRCdXR0b24iOiJEZWxldGUiLCJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwudGl0bGUiOiJEZWxldGUgTm90aWZpY2F0aW9uIFJ1bGUiLCJEZWxldGVXaWRnZXRNb2RhbC5kZWxldGVPd25XaWRnZXRXYXJuaW5nIjoi0JLRiyDRgdC+0LHQuNGA0LDQtdGC0LXRgdGMINGD0LTQsNC70LjRgtGMINGB0LLQvtC5INCy0LjQtNC20LXRgi4g0K3RgtC+INC80L7QttC10YIg0L/QvtCy0LvQuNGP0YLRjCDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGOINC90LAg0LLQsNGI0LjRhSDQv9Cw0L3QtdC70Y/RhSDRg9C/0YDQsNCy0LvQtdC90LjRjy4iLCJEZWxldGVXaWRnZXRNb2RhbC5kZWxldGVXaWRnZXRBZG1pbldhcm5pbmciOiLQktGLINGB0L7QsdC40YDQsNC10YLQtdGB0Ywg0YPQtNCw0LvQuNGC0Ywg0L3QtSDRgdCy0L7QuSDQstC40LTQttC10YIuINCt0YLQviDQvNC+0LbQtdGCINC/0L7QstC70LjRj9GC0Ywg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQtNGA0YPQs9C40YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/RgNC+0LXQutGC0LAuIiwiRGVsZXRlV2lkZ2V0TW9kYWwuZGVsZXRlV2lkZ2V0SGVhZGVyIjoi0KPQtNCw0LvQtdC90LjQtSDQstC40LTQttC10YLQsCIsIkRlbGV0ZVdpZGdldE1vZGFsLmRlbGV0ZVdpZGdldFRleHQiOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LjQtNC20LXRgiAnPGI+e25hbWV9PC9iPic/INCS0Ysg0L/QvtGC0LXRgNGP0LXRgtC1INC00L7RgdGC0YPQvyDQuiDQvdC10LkuINCt0YLQviDQtNC10LnRgdGC0LLQuNC1INC90LXQu9GM0LfRjyDQvtGC0LzQtdC90LjRgtGMLiIsIkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uSGVhZGVyIjoi0KHQuNGB0YLQtdC80LAg0YHQs9C10L3QtdGA0LjRgNGD0LXRgiDRgdC70LXQtNGD0Y7RidC40LUg0LTQtdC80L4t0LTQsNC90L3Ri9C1OiIsIkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uTGlzdEZpcnN0SXRlbSI6IjEwINC30LDQv9GD0YHQutC+0LIiLCJEZW1vRGF0YVRhYi5kZXNjcmlwdGlvbkxpc3RTZWNJdGVtIjoiMSDQv9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8g0YEgOSDQstC40LTQttC10YLQsNC80LgiLCJEZW1vRGF0YVRhYi5kZXNjcmlwdGlvbkxpc3RUaGlyZEl0ZW0iOiIxINGE0LjQu9GM0YLRgCIsIkRlbW9EYXRhVGFiLm1vYmlsZUhpbnQiOiLQktGLINC80L7QttC10YLQtSDQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0LTQsNC90L3Ri9C1INGC0L7Qu9GM0LrQviDQsiDQutC+0LzQv9GM0Y7RgtC10YDQvdC+0Lwg0LLQuNC00LUg0L/RgNC40LvQvtC20LXQvdC40Y8uIiwiRGVtb0RhdGFUYWIud2FybmluZ0luZm8iOiLQktCw0Lwg0L/RgNC40LTQtdGC0YHRjyDRg9C00LDQu9C40YLRjCDQtNC10LzQvi3QtNCw0L3QvdGL0LUg0LLRgNGD0YfQvdGD0Y4uIiwiRGVtb0RhdGFUYWIud2FybmluZ1RleHQiOiLQktC90LjQvNCw0L3QuNC1ISIsIkRlbW9EYXRhVGFiRm9ybS5kZW1vRGF0YVBvc3RmaXhIaW50Ijoi0J/QvtGB0YLRhNC40LrRgSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0YDQsNC30LzQtdGA0L7QvCDQvtGCIDEg0LTQviA5MCIsIkRlbW9EYXRhVGFiRm9ybS5nZW5lcmF0ZUJ1dHRvblRpdGxlIjoi0KHQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0LTQtdC80L4t0LTQsNC90L3Ri9C1IiwiRGVtb0RhdGFUYWJGb3JtLnByZWxvYWRlckluZm8iOiLQk9C10L3QtdGA0LjRgNC+0LLQsNC90LjQtSDQtNCw0L3QvdGL0YUg0L3QsNGH0LDQu9C+0YHRjC4g0J/RgNC+0YbQtdGB0YEg0LzQvtC20LXRgiDQt9Cw0L3Rj9GC0Ywg0L3QtdGB0LrQvtC70YzQutC+INC80LjQvdGD0YIsINC/0L7QttCw0LvRg9C50YHRgtCwLCDQv9C+0LTQvtC20LTQuNGC0LUuIiwiRGlzcGxheUZpbHRlci5kaXNwbGF5Ijoi0J7RgtC+0LHRgNCw0LfQuNGC0Ywg0L3QsCDQt9Cw0L/Rg9GB0LrQsNGFOiIsIkRpc3BsYXlGaWx0ZXIuc2hvd09uTGF1bmNoZXNTd2l0Y2hlck9mZiI6ItCS0YvQutC7IiwiRGlzcGxheUZpbHRlci5zaG93T25MYXVuY2hlc1N3aXRjaGVyT24iOiLQktC60LsiLCJEdXJhdGlvbkJsb2NrLmZpbmlzaGVkIjoi0JTQu9C40YLQtdC70YzQvdC+0YHRgtGMOiB7ZHVyYXRpb25UaW1lfS4g0JLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y86IHtlbmRUaW1lfSIsIkR1cmF0aW9uQmxvY2suaW5Qcm9ncmVzcyI6ItCSINC/0YDQvtGG0LXRgdGB0LUiLCJEdXJhdGlvbkJsb2NrLmluUHJvZ3Jlc3NXaXRoRW5kIjoi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGB0YLQsNGC0YPRgTogJ9CSINC/0YDQvtGG0LXRgdGB0LUnINGB0L4g0LLRgNC10LzQtdC90LXQvCDQvtC60L7QvdGH0LDQvdC40Y8iLCJEdXJhdGlvbkJsb2NrLmludGVycnVwdGVkIjoi0J/RgNC+0LPQvtC9INCf0KDQldCg0JLQkNCdINC/0L7RgdC70LU6IHtkdXJhdGlvblRpbWV9LiDQntGB0YLQsNC90L7QstC70LXQvSDQsjoge2VuZFRpbWV9IiwiRHVyYXRpb25CbG9jay5ub3RJblByb2dyZXNzV2l0aG91dEVuZCI6ItCd0LXQv9GA0LDQstC40LvRjNC90YvQuSDRgdGC0LDRgtGD0YE6INGN0LvQtdC80LXQvdGCINC90LUgJ9CSINC/0YDQvtGG0LXRgdGB0LUnLCDQvdC+INC90LUg0LjQvNC10LXRgiDQstGA0LXQvNC10L3QuCDQvtC60L7QvdGH0LDQvdC40Y8iLCJEdXJhdGlvbkJsb2NrLm92ZXJBcHByb3hpbWF0ZSI6ItCh0YDQtdC00L3QtdC1INCy0YDQtdC80Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gLSB7ZW5kfSwg0YLQtdC60YPRidCw0Y8g0LfQsNC00LXRgNC20LrQsCAtIHtvdmVyfSIsIkR1cmF0aW9uQmxvY2suc2tpcHBlZCI6ItCf0KDQntCf0KPQqdCV0J3Qni4g0JTQu9C40YLQtdC70YzQvdC+0YHRgtGMOiB7ZHVyYXRpb25UaW1lfSIsIkR1cmF0aW9uQmxvY2suc3RvcHBlZCI6ItCf0YDQvtCz0L7QvSDQntCh0KLQkNCd0J7QktCb0JXQnSDQv9C+0YHQu9C1OiB7ZHVyYXRpb25UaW1lfS4g0J7RgdGC0LDQvdC+0LLQu9C10L0g0LI6IHtlbmRUaW1lfSIsIkR1cmF0aW9uVG9vbHRpcC5tZXNzYWdlIjoi0JTQu9C40YLQtdC70YzQvdC+0YHRgtGMIC0g0Y3RgtC+INC40L3RgtC10YDQstCw0Lsg0LzQtdC20LTRgyDQvdCw0YfQsNC70L7QvCDQv9C10YDQstC+0LPQviDQv9C+0LTQv9GA0L7Qs9C+0L3QsCDQuCDQvtC60L7QvdGH0LDQvdC40LXQvCDQv9C+0YHQu9C10LTQvdC10LPQviDQv9C+0LTQv9GA0L7Qs9C+0L3QsC4g0J3QviDQtdGB0LvQuCDQv9C+0LTQv9GA0L7Qs9C+0L3RiyDQv9GA0L7QuNGB0YXQvtC00Y/RgiDQv9Cw0YDQsNC70LvQtdC70YzQvdC+LCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyAtINGN0YLQviDQvtC60L7QvdGH0LDQvdC40LUg0L3QsNC40LHQvtC70LXQtSDQtNC70LjRgtC10LvRjNC90L7Qs9C+INC/0L7QtNC/0YDQvtCz0L7QvdCwLCDQsiDRjdGC0L7QvCDRgdC70YPRh9Cw0LUg0LTQu9C40YLQtdC70YzQvdC+0YHRgtGMINC90LUg0LHRg9C00LXRgiDRgNCw0LLQvdCwINGB0YPQvNC80LUg0LTQu9C40YLQtdC70YzQvdC+0YHRgtC10Lkg0L/QvtC00L/RgNC+0LPQvtC90L7Qsi4iLCJFZGl0RGVmZWN0TW9kYWwuZGVmZWN0Q29tbWVudFBsYWNlaG9sZGVyIjoi0J/RgNC+0LrQvtC80LzQtdC90YLQuNGA0YPQudGC0LUg0KLQuNC/INCU0LXRhNC10LrRgtCwIiwiRWRpdERlZmVjdE1vZGFsLmRlZmVjdFR5cGVTZWxlY3RvclBsYWNlaG9sZGVyIjoi0JLRi9Cx0LXRgNC40YLQtSDQotC40L8g0JTQtdGE0LXQutGC0LAiLCJFZGl0RGVmZWN0TW9kYWwuZGVmZWN0VHlwZVRpdGxlIjoi0KLQuNC/INCU0LXRhNC10LrRgtCwIiwiRWRpdERlZmVjdE1vZGFsLmhvdEtleUNhbmNlbENhcHRpb24iOiLQtNC70Y8g0L7RgtC80LXQvdGLIiwiRWRpdERlZmVjdE1vZGFsLmhvdEtleVN1Ym1pdENhcHRpb24iOiLQtNC70Y8g0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8iLCJFZGl0RGVmZWN0TW9kYWwuaWdub3JlQWFUaXRsZSI6ItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9GA0Lgg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUiLCJFZGl0RGVmZWN0TW9kYWwucmVwbGFjZUNvbW1lbnRzVGl0bGUiOiLQl9Cw0LzQtdC90LjRgtGMINC60L7QvNC80LXQvdGC0LDRgNC40Lgg0LTQu9GPINCy0YHQtdGFINCy0YvQsdGA0LDQvdC90YvRhSDRjdC70LXQvNC10L3RgtC+0LIiLCJFZGl0RGVmZWN0TW9kYWwuc2F2ZUFuZExpbmtJc3N1ZU1lc3NhZ2UiOiLQodC+0YXRgNCw0L3QuNGC0Ywg0Lgg0L/RgNC40LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDIiwiRWRpdERlZmVjdE1vZGFsLnNhdmVBbmRQb3N0SXNzdWVNZXNzYWdlIjoi0KHQvtGF0YDQsNC90LjRgtGMINC4INC+0YLQv9GA0LDQstC40YLRjCDQvtGI0LjQsdC60YMiLCJFZGl0RGVmZWN0TW9kYWwuc2F2ZUFuZFVubGlua0lzc3VlTWVzc2FnZSI6ItCh0L7RhdGA0LDQvdC40YLRjCDQuCDQvtGC0LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDIiwiRWRpdERlZmVjdE1vZGFsLnRpdGxlIjoi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YLQuNC/INC00LXRhNC10LrRgtCwIiwiRWRpdERlZmVjdE1vZGFsLnVwZGF0ZURlZmVjdHNGYWlsZWQiOiLQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LTQtdGE0LXQutGC0YsiLCJFZGl0RGVmZWN0TW9kYWwudXBkYXRlRGVmZWN0c1N1Y2Nlc3MiOiLQlNC10YTQtdC60YLRiyDQvtCx0L3QvtCy0LvQtdC90YsiLCJFZGl0SXRlbU1vZGFsLmF0dHJpYnV0ZXNMYWJlbCI6ItCQ0YLRgNC40LHRg9GC0YsiLCJFZGl0SXRlbU1vZGFsLmNvbnRlbnRUaXRsZSI6ItCU0LXRgtCw0LvQuCB7dHlwZX3QsCIsIkVkaXRJdGVtTW9kYWwuZGVzY3JpcHRpb25QbGFjZWhvbGRlciI6ItCS0LLQtdC00LjRgtC1INC+0L/QuNGB0LDQvdC40LUge3R5cGV90LAiLCJFZGl0SXRlbU1vZGFsLml0ZW0iOiLRjdC70LXQvNC10L3RgiIsIkVkaXRJdGVtTW9kYWwuaXRlbVVwZGF0ZVN1Y2Nlc3MiOiLQl9Cw0LLQtdGA0YjQtdC90L4g0YPRgdC/0LXRiNC90L4iLCJFZGl0SXRlbU1vZGFsLmxhdW5jaCI6ItC30LDQv9GD0YHQuiIsIkVkaXRJdGVtTW9kYWwubGF1bmNoVXBkYXRlU3VjY2VzcyI6ItCX0LDQv9GD0YHQuiDRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0LvRkdC9IiwiRWRpdEl0ZW1Nb2RhbC5tb2RhbEhlYWRlciI6ItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIHt0eXBlfSIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwuZW1haWxMYWJlbCI6ItCt0LvQtdC60YLRgNC+0L3QvdGL0Lkg0LDQtNGA0LXRgSIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwuZW1haWxQbGFjZWhvbGRlciI6ItCS0LLQtdC00LjRgtC1INGN0LvQtdC60YLRgNC+0L3QvdGL0Lkg0LDQtNGA0LXRgSIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwuaGVhZGVyIjoi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LvQuNGH0L3Rg9GOINC40L3QvtGA0LzQsNGG0LjRjiIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwubmFtZUxhYmVsIjoi0JjQvNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkVkaXRQZXJzb25hbEluZm9ybWF0aW9uTW9kYWwubmFtZVBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0LjQvNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkVkaXRXaWRnZXRNb2RhbC5lZGl0V2lkZ2V0U3VjY2VzcyI6IldpZGdldCBoYXMgYmVlbiB1cGRhdGVkIiwiRWRpdFdpZGdldE1vZGFsLmhlYWRlclRleHQiOiJFZGl0IHdpZGdldCIsIkVtYWlsU2VydmVyVGFiLmVtYWlsU3dpdGNoZXIiOiLQktC60LvRjtGH0LjRgtGMINC/0L7Rh9GC0L7QstGL0Lkg0YHQtdGA0LLQtdGAIiwiRW1haWxTZXJ2ZXJUYWIucG9ydEZpZWxkSGludCI6ItCS0L7Qt9C80L7QttC90Ysg0YLQvtC70YzQutC+INGG0LjRhNGA0Ysg0L7RgiAnMScg0LTQviAnNjU1MzUnLiIsIkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy5hdXRoTGFiZWwiOiLQkNCy0YLQvtGA0LjQt9Cw0YbQuNGPIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmZyb21MYWJlbCI6ItCY0LzRjyDQvtGC0L/RgNCw0LLQuNGC0LXQu9GPINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmhvc3RMYWJlbCI6ItCl0L7RgdGCIiwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLnBhc3N3b3JkTGFiZWwiOiLQn9Cw0YDQvtC70YwiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucG9ydExhYmVsIjoi0J/QvtGA0YIiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucHJvdG9jb2xMYWJlbCI6ItCf0YDQvtGC0L7QutC+0LsiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMudXBkYXRlRW1haWxTZXJ2ZXJTdWNjZXNzIjoi0J3QsNGB0YLRgNC+0LnQutC4INC/0L7Rh9GC0L7QstC+0LPQviDRgdC10YDQstC10YDQsCDQvtCx0L3QvtCy0LvQtdC90YsiLCJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMudXNlcm5hbWVMYWJlbCI6ItCY0LzRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iLCJFbnRpdGllc1NlbGVjdG9yLm1vcmUiOiLQldGJ0ZEiLCJFbnRpdHlJdGVtQXR0cmlidXRlS2V5cy5wbGFjZWhvbGRlciI6IkVudGVyIGF0dHJpYnV0ZSBrZXlzIiwiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5wbGFjZWhvbGRlciI6IkVudGVyIGF0dHJpYnV0ZSB2YWx1ZXMiLCJFbnRpdHlJdGVtRGVzY3JpcHRpb24ucGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDQvtC/0LjRgdCw0L3QuNC1IiwiRW50aXR5SXRlbU5hbWUucGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDQuNC80Y8iLCJFbnRpdHlJdGVtU3RhdGlzdGljcy5wbGFjZWhvbGRlciI6ItCS0LLQtdC00LjRgtC1INC60L7Qu9C40YfQtdGB0YLQstC+IiwiRW50aXR5TGF1bmNoTnVtYmVyLnBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0L3QvtC80LXRgCIsIkVudGl0eVVzZXJTZWFyY2guZm9jdXNQbGFjZWhvbGRlciI6ItCf0L4g0LrRgNCw0LnQvdC10Lkg0LzQtdGA0LUgMyDRgdC40LzQstC+0LvQsCDQvdC10L7QsdGF0L7QtNC40LzQvi4iLCJFbnRpdHlVc2VyU2VhcmNoLnBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0LjQvNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkV2ZW50QWN0aW9ucy5jcmVhdGVCdHMiOiJjcmVhdGUgYnRzIiwiRXZlbnRBY3Rpb25zLmNyZWF0ZURhc2hib2FyZCI6ItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRXZlbnRBY3Rpb25zLmNyZWF0ZURlZmVjdCI6ItCh0L7Qt9C00LDQvdC40LUg0LTQtdGE0LXQutGC0LAiLCJFdmVudEFjdGlvbnMuY3JlYXRlRmlsdGVyIjoi0KHQvtC30LTQsNC90LjQtSDRhNC40LvRjNGC0YDQsCIsIkV2ZW50QWN0aW9ucy5jcmVhdGVVc2VyIjoi0KHQvtC30LTQsNC90LjQtSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iLCJFdmVudEFjdGlvbnMuY3JlYXRlV2lkZ2V0Ijoi0KHQvtC30LTQsNC90LjQtSDQstC40LTQttC10YLQsCIsIkV2ZW50QWN0aW9ucy5kZWxldGVCdHMiOiJkZWxldGUgYnRzIiwiRXZlbnRBY3Rpb25zLmRlbGV0ZURhc2hib2FyZCI6ItCj0LTQsNC70LXQvdC40LUg0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiRXZlbnRBY3Rpb25zLmRlbGV0ZURlZmVjdCI6ImRlbGV0ZSBkZWZlY3QiLCJFdmVudEFjdGlvbnMuZGVsZXRlRmlsdGVyIjoi0KPQtNCw0LvQtdC90LjQtSDRhNC40LvRjNGC0YDQsCIsIkV2ZW50QWN0aW9ucy5kZWxldGVMYXVuY2giOiLQo9C00LDQu9C10L3QuNC1INC30LDQv9GD0YHQutCwIiwiRXZlbnRBY3Rpb25zLmRlbGV0ZVdpZGdldCI6ItCj0LTQsNC70LXQvdC40LUg0LLQuNC00LbQtdGC0LAiLCJFdmVudEFjdGlvbnMuZmluaXNoSW1wb3J0Ijoi0JrQvtC90LXRhiDQuNC80L/QvtGA0YLQsCIsIkV2ZW50QWN0aW9ucy5maW5pc2hMYXVuY2giOiLQntC60L7QvdGH0LDQvdC40LUg0LfQsNC/0YPRgdC60LAiLCJFdmVudEFjdGlvbnMuZ2VuZXJhdGVJbmRleCI6ImdlbmVyYXRlIGluZGV4IiwiRXZlbnRBY3Rpb25zLmxpbmtJc3N1ZSI6ImxpbmsgaXNzdWUiLCJFdmVudEFjdGlvbnMucG9zdElzc3VlIjoicG9zdCBpc3N1ZSIsIkV2ZW50QWN0aW9ucy5zdGFydEltcG9ydCI6ItCd0LDRh9Cw0LvQviDQuNC80L/QvtGA0YLQsCIsIkV2ZW50QWN0aW9ucy5zdGFydExhdW5jaCI6ItCh0YLQsNGA0YIg0LfQsNC/0YPRgdC60LAiLCJFdmVudEFjdGlvbnMudXBkYXRlQW5hbHl6ZXIiOiJ1cGRhdGUgYW5hbGl6ZXIiLCJFdmVudEFjdGlvbnMudXBkYXRlQnRzIjoidXBkYXRlIGJ0cyIsIkV2ZW50QWN0aW9ucy51cGRhdGVEYXNoYm9hcmQiOiJP0LHQvdC+0LLQu9C10L3QuNC1INC/0LDQvdC10LvQuCDRg9C/0YDQsNCy0LvQtdC90LjRjyIsIkV2ZW50QWN0aW9ucy51cGRhdGVEZWZlY3QiOiLQntCx0L3QvtCy0LvQtdC90LjQtSDQtNC10YTQtdC60YLQsCIsIkV2ZW50QWN0aW9ucy51cGRhdGVGaWx0ZXIiOiLQntCx0L3QvtCy0LvQtdC90LjQtSDRhNC40LvRjNGC0YDQsCIsIkV2ZW50QWN0aW9ucy51cGRhdGVJdGVtIjoi0J7QsdC90L7QstC70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQsCIsIkV2ZW50QWN0aW9ucy51cGRhdGVQcm9qZWN0Ijoi0J7QsdC90L7QstC70LXQvdC40LUg0L/RgNC+0LXQutGC0LAiLCJFdmVudEFjdGlvbnMudXBkYXRlV2lkZ2V0Ijoi0J7QsdC90L7QstC70LXQvdC40LUg0LLQuNC00LbQtdGC0LAiLCJFdmVudE9iamVjdFR5cGVzLmRhc2hib2FyZCI6ItCf0LDQvdC10LvRjCDRg9C/0YDQsNCy0LvQtdC90LjRjyIsIkV2ZW50T2JqZWN0VHlwZXMuZGVmZWN0VHlwZSI6ItCi0LjQvyDQtNC10YTQtdC60YLQsCIsIkV2ZW50T2JqZWN0VHlwZXMuZW1haWxDb25maWciOiLQndCw0YHRgtGA0L7QudC60Lgg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIiwiRXZlbnRPYmplY3RUeXBlcy5maWx0ZXIiOiLQpNC40LvRjNGC0YAiLCJFdmVudE9iamVjdFR5cGVzLmltcG9ydCI6ItCY0LzQv9C+0YDRgiIsIkV2ZW50T2JqZWN0VHlwZXMuaXRlbUlzc3VlIjoi0K3Qu9C10LzQtdC90YIg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNGPIiwiRXZlbnRPYmplY3RUeXBlcy5sYXVuY2giOiLQl9Cw0L/Rg9GB0LoiLCJFdmVudE9iamVjdFR5cGVzLnByb2plY3QiOiLQn9GA0L7QtdC60YIiLCJFdmVudE9iamVjdFR5cGVzLnRlc3RJdGVtIjoi0K3Qu9C10LzQtdC90YIg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNGPIiwiRXZlbnRPYmplY3RUeXBlcy51c2VyIjoi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMIiwiRXZlbnRPYmplY3RUeXBlcy53aWRnZXQiOiLQktC40LTQttC10YIiLCJFdmVudHNHcmlkLmFjdGlvbkNvbCI6ItCU0LXQudGB0YLQstC40LUiLCJFdmVudHNHcmlkLmNvbnRhaW5zIjoi0KHQvtC00LXRgNC20LjRgiIsIkV2ZW50c0dyaWQubmV3VmFsdWVDb2wiOiLQndC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUiLCJFdmVudHNHcmlkLm9iamVjdE5hbWVDb2wiOiLQmNC80Y8g0L7QsdGK0LXQutGC0LAiLCJFdmVudHNHcmlkLm9iamVjdFR5cGVDb2wiOiLQotC40L8g0L7QsdGK0LXQutGC0LAiLCJFdmVudHNHcmlkLm9sZFZhbHVlQ29sIjoi0KHRgtCw0YDQvtC1INC30L3QsNGH0LXQvdC40LUiLCJFdmVudHNHcmlkLnRpbWVDb2wiOiLQktGA0LXQvNGPIiwiRXZlbnRzR3JpZC51c2VyQ29sIjoi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMIiwiRXhwYW5kVG9nZ2xlci5oaWRlQ3JpdGVyaWEiOiLQodC/0YDRj9GC0LDRgtGMINC60YDQuNGC0LXRgNC40LgiLCJFeHBhbmRUb2dnbGVyLnNob3dDcml0ZXJpYSI6ItCf0L7QutCw0LfQsNGC0Ywg0LrRgNC40YLQtdGA0LjQuCIsIkV4dGVybmFsU3lzdGVtcy5jcmV0ZUJUcyI6ItGB0LrQvtC90YTQuNCz0YPRgNC40YDQvtCy0LDQuyIsIkV4dGVybmFsU3lzdGVtcy5kZWxldGVCdHMiOiLRg9C00LDQu9C40LsiLCJFeHRlcm5hbFN5c3RlbXMuZnJvbVByb2plY3QiOiLQuNC3INC/0YDQvtC10LrRgtCwIiwiRXh0ZXJuYWxTeXN0ZW1zLnByb3BlcnRpZXMiOiLRgdCy0L7QudGB0YLQstCwIiwiRXh0ZXJuYWxTeXN0ZW1zLnVwZGF0ZUJ0cyI6ItC+0LHQvdC+0LLQuNC7IiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmNvcHlMaW5rIjoi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0YHRgdGL0LvQutGDIiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmRlc2NyaXB0aW9uIjoi0J/RgNC40LPQu9Cw0YHQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC90LAg0L/RgNC+0LXQutGCIiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmVtYWlsIjoi0J/RgNC40LPQu9Cw0YjQtdC90LjQtSDQsdGL0LvQviDQvtGC0L/RgNCw0LLQu9C10L3QviDQvdCwIiwiRXh0ZXJuYWxVc2VySW52aXRhdGlvbk1vZGFsLmhlYWRlciI6ItCf0YDQuNCz0LvQsNGB0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkV4dGVybmFsVXNlckludml0YXRpb25Nb2RhbC5saW5rIjoi0KHRgdGL0LvQutCwINC90LAg0L/RgNC40LPQu9Cw0YjQtdC90LjQtSIsIkZhaWxlZENhc2VzVHJlbmRDaGFydC5mYWlsZWRDYXNlcyI6ImZhaWxlZCBjYXNlcyIsIkZhaWxlZENhc2VzVHJlbmRDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIkZhaWxlZENhc2VzVHJlbmRDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJGaWx0ZXIuYWRkIjoi0JTQvtCx0LDQstC40YLRjCDRhNC40LvRjNGC0YAiLCJGaWx0ZXIuZGVzY3JpcHRpb25QbGFjZWhvbGRlciI6ItCS0LLQtdC00LjRgtC1INC+0L/QuNGB0LDQvdC40LUg0YTQuNC70YzRgtGA0LAiLCJGaWx0ZXIuZWRpdCI6ItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGE0LjQu9GM0YLRgCIsIkZpbHRlci5uYW1lIjoi0JjQvNGPIiwiRmlsdGVyLm5hbWVQbGFjZWhvbGRlciI6ItCS0LLQtdGB0YLQuCDQuNC80Y8g0YTQuNC70YzRgtGA0LAiLCJGaWx0ZXJBZGQuYWRkVGl0bGUiOiJBZGQgbmV3IGZpbHRlciIsIkZpbHRlckVkaXQuZWRpdFRpdGxlIjoiRWRpdCBmaWx0ZXIiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkYXV0b21hdGlvbl9idWciOiJBdXRvbWF0aW9uIGJ1ZyIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZGVmZWN0cyRub19kZWZlY3QiOiJObyBkZWZlY3QiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkcHJvZHVjdF9idWciOiJQcm9kdWN0IGJ1ZyIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZGVmZWN0cyRzeXN0ZW1faXNzdWUiOiJTeXN0ZW0gaXNzdWUiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkdG9faW52ZXN0aWdhdGUiOiJUbyBpbnZlc3RpZ2F0ZSIsIkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZXhlY3V0aW9ucyRmYWlsZWQiOiJGYWlsZWQiLCJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkcGFzc2VkIjoiUGFzc2VkIiwiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRleGVjdXRpb25zJHNraXBwZWQiOiJTa2lwcGVkIiwiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRleGVjdXRpb25zJHRvdGFsIjoiVG90YWwiLCJGaWx0ZXJPcHRpb25zLkFCIjoi0J7QoiIsIkZpbHRlck9wdGlvbnMuUEIiOiLQlNCfIiwiRmlsdGVyT3B0aW9ucy5TSSI6ItCh0J4iLCJGaWx0ZXJPcHRpb25zLlRJIjoi0KLQkCIsIkZpbHRlck9wdGlvbnMuYW5kIjoi0JLQmtCb0K7Qp9CQ0K8iLCJGaWx0ZXJPcHRpb25zLmF0dHJpYnV0ZUtleSI6ItCa0LvRjtGH0Lgg0LDRgtGA0LjQsdGD0YLQvtCyIiwiRmlsdGVyT3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZSI6ItCX0L3QsNGH0LXQvdC40Y8g0LDRgtGA0LjQsdGD0YLQvtCyIiwiRmlsdGVyT3B0aW9ucy5jbnQiOiLRgdC+0LTQtdGA0LbQuNGCIiwiRmlsdGVyT3B0aW9ucy5kZXNjcmlwdGlvbiI6ItCe0L/QuNGB0LDQvdC40LUiLCJGaWx0ZXJPcHRpb25zLmR5bmFtaWMiOiIo0LTQuNC90LDQvNC40YfQtdGB0LrQuCkiLCJGaWx0ZXJPcHRpb25zLmZhaWxlZCI6ItCd0LXRg9C00LDRh9C90L4iLCJGaWx0ZXJPcHRpb25zLmZyb20iOiLRgSIsIkZpbHRlck9wdGlvbnMuaGFzIjoi0YHQvtC00LXRgNC20LjRgiIsIkZpbHRlck9wdGlvbnMuaW4iOiLQtdGB0YLRjCDQu9GO0LHQvtC5INC40LciLCJGaWx0ZXJPcHRpb25zLm5hbWUiOiLQmNC80Y8g0LfQsNC/0YPRgdC60LAiLCJGaWx0ZXJPcHRpb25zLm5vdF9jbnQiOiLQvdC1INGB0L7QtNC10YDQttC40YIiLCJGaWx0ZXJPcHRpb25zLm5vdF9oYXMiOiLQsdC10Lcg0LvRjtCx0L7Qs9C+INC40LciLCJGaWx0ZXJPcHRpb25zLm5vdF9pbiI6ItC90LUg0YHQvtC00LXRgNC20LjRgiIsIkZpbHRlck9wdGlvbnMubnVtYmVyIjoi0J3QvtC80LXRgCDQt9Cw0L/Rg9GB0LrQsCIsIkZpbHRlck9wdGlvbnMucGFzc2VkIjoi0KPRgdC/0LXRiNC90L4iLCJGaWx0ZXJPcHRpb25zLnNraXBwZWQiOiLQn9GA0L7Qv9GD0YnQtdC90L4iLCJGaWx0ZXJPcHRpb25zLnNvcnQiOiLQvtGC0YHQvtGA0YLQuNGA0L7QstCw0L3QviDQv9C+IiwiRmlsdGVyT3B0aW9ucy5zdGFydFRpbWUiOiLQktGA0LXQvNGPINC90LDRh9Cw0LvQsCIsIkZpbHRlck9wdGlvbnMudGFncyI6ItCc0LXRgtC60LgiLCJGaWx0ZXJPcHRpb25zLnRvIjoi0L/QviIsIkZpbHRlck9wdGlvbnMudG90YWwiOiLQktGB0LXQs9C+IiwiRmlsdGVyT3B0aW9ucy51c2VyIjoi0JLQu9Cw0LTQtdC70LXRhiIsIkZpbHRlclNvcnQuYXV0b0J1ZyI6IkF1dG8gQnVnIiwiRmlsdGVyU29ydC5mYWlsZWQiOiJGYWlsZWQiLCJGaWx0ZXJTb3J0LmxhdW5jaE5hbWUiOiJMYXVuY2ggbmFtZSIsIkZpbHRlclNvcnQucGFzc2VkIjoiUGFzc2VkIiwiRmlsdGVyU29ydC5wcm9kdWN0QnVnIjoiUHJvZHVjdCBCdWciLCJGaWx0ZXJTb3J0LnNraXBwZWQiOiJTa2lwcGVkIiwiRmlsdGVyU29ydC5zb3J0QnkiOiJTb3J0IGJ5IiwiRmlsdGVyU29ydC5zdGFydFRpbWUiOiJTdGFydCB0aW1lIiwiRmlsdGVyU29ydC5zeXN0ZW1Jc3N1ZSI6IlN5c3RlbSBJc3N1ZSIsIkZpbHRlclNvcnQudG9JbnZlc3RpZ2F0ZSI6IlRvIEludmVzdGlnYXRlIiwiRmlsdGVyU29ydC50b3RhbCI6IlRvdGFsIiwiRmlsdGVycy5yZWZpbmUiOiLQo9GC0L7Rh9C90LjRgtGMOiIsIkZpbHRlcnMuc2hhcmUiOiLQn9C+0LTQtdC70LjRgtGM0YHRjyIsIkZpbHRlcnNBY3Rpb25CYXIuc2hhcmVkRmlsdGVyIjoi0KTQuNC70YzRgtGAINC/0YDQtdC00L7RgdGC0LDQstC70LXQvSIsIkZpbHRlcnNBY3Rpb25CYXIudW5zYXZlZEZpbHRlciI6ItCk0LjQu9GM0YLRgCDQvdC1INGB0L7RhdGA0LDQvdC10L0iLCJGaWx0ZXJzQWN0aW9uUGFuZWwuYWRkRmlsdGVyQnV0dG9uIjoi0JTQvtCx0LDQstC40YLRjCDRhNC40LvRjNGC0YAiLCJGaWx0ZXJzQWN0aW9uUGFuZWwuc2VhcmNoSW5wdXRQbGFjZWhvbGRlciI6ItCf0L7QuNGB0Log0L/QviDQmNC80LXQvdC4IiwiRmlsdGVyc0NvbnRyb2wuaW5zZXJ0RmlsdGVyRXJyb3IiOiJGaWx0ZXIgZG9uJ3QgY3JlYXRlZCIsIkZpbHRlcnNDb250cm9sLmluc2VydEZpbHRlclN1Y2Nlc3MiOiJGaWx0ZXIgaGFzIGJlZW4gY3JlYXRlZCIsIkZpbHRlcnNDb250cm9sLm5vdEZvdW5kIjonTm8gZmlsdGVycyBmb3VuZCBmb3IgIntmaWx0ZXJ9Ii4nLCJGaWx0ZXJzQ29udHJvbC51cGRhdGVGaWx0ZXJFcnJvciI6IkZpbHRlciBkb24ndCB1cGRhdGVkIiwiRmlsdGVyc0NvbnRyb2wudXBkYXRlRmlsdGVyU3VjY2VzcyI6IkZpbHRlciBoYXMgYmVlbiB1cGRhdGVkIiwiRmlsdGVyc1BhZ2UuYWRkRmlsdGVyIjoi0JTQvtCx0LDQstC40YLRjCDRhNC40LvRjNGC0YAiLCJGaWx0ZXJzUGFnZS5maWx0ZXJOYW1lTGVuZ3RoIjoi0JjQvNGPINGE0LjQu9GM0YLRgNCwINC00L7Qu9C20L3QviDQsdGL0YLRjCDQtNC70LjQvdC+0Lkg0L7RgiAzINC00L4gMTI4INC30L3QsNC60L7Qsi4iLCJGaWx0ZXJzUGFnZS5tc2dGYXZvcml0ZUZpbHRlcnMiOiLQpNC40LvRjNGC0YDRiyAtINGN0YLQviDQv9C+0LjRgdC60L7QstGL0LUg0LfQsNC/0YDQvtGB0YssINC60L7RgtC+0YDRi9C1INCx0YvQu9C4INGB0L7RhdGA0LDQvdC10L3RiyDQtNC70Y8g0L/QvtCy0YLQvtGA0L3QvtCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8uIiwiRmlsdGVyc1BhZ2Uubm90Rm91bmQiOiJObyBmaWx0ZXJzIGZvdW5kIGZvciAne2ZpbHRlcn0nIiwiRmlsdGVyc1BhZ2Uuc2VhcmNoQnlOYW1lIjoi0J/QvtC40YHQuiDQv9C+INC40LzQtdC90LgiLCJGaWx0ZXJzUGFnZS5zaGFyZUZpbHRlciI6ItCe0LHRidC40Lkg0YTQuNC70YzRgtGAIiwiRmlsdGVyc1BhZ2UudGl0bGUiOiLQpNC40LvRjNGC0YDRiyIsIkZpbHRlcnNXcmFwcGVyLmNob29zZUZpbHRlciI6ItCS0YvQsdC10YDQuNGC0LUg0YTQuNC70YzRgtGAINC40Lcg0YHQv9C40YHQutCwINC90LjQttC1IiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkluY2x1ZGVNZXRob2RzQ29udHJvbFRleHQiOiJJbmNsdWRlIEJlZm9yZSBhbmQgQWZ0ZXIgbWV0aG9kcyIsIkZsYWt5VGVzdENhc2VzVGFibGVDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJMYXVuY2hlcyBjb3VudCIsIkZsYWt5VGVzdENhc2VzVGFibGVDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMiB0byAxNTAiLCJGbGFreVRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZUZpZWxkTGFiZWwiOiJMYXVuY2ggbmFtZSIsIkZsYWt5VGVzdENhc2VzVGFibGVDb250cm9scy5MYXVuY2hOYW1lRm9jdXNQbGFjZWhvbGRlciI6IkF0IGxlYXN0IDMgc3ltYm9scyByZXF1aXJlZC4iLCJGbGFreVRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZU5vTWF0Y2hlcyI6Ik5vIG1hdGNoZXMgZm91bmQuIiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVQbGFjZWhvbGRlciI6IkVudGVyIGxhdW5jaCBuYW1lIiwiRmxha3lUZXN0Q2FzZXNUYWJsZUNvbnRyb2xzLkxhdW5jaE5hbWVzVmFsaWRhdGlvbkVycm9yIjoiWW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIiwiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIubGFzdFN3aXRjaCI6ItCf0L7RgdC70LXQtNC90LXQtSDQv9C10YDQtdC60LvRjtGH0LXQvdC40LUiLCJGbGFreVRlc3RzLnRhYmxlLmhlYWRlci5vZlN3aXRjaGVzIjoiJSDQv9C10YDQtdC60LvRjtGH0LXQvdC40LkiLCJGbGFreVRlc3RzLnRhYmxlLmhlYWRlci5vZlN3aXRjaGVzU2hvcnQiOiIlINC/0LXRgNC10LrQuyIsIkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLnN3aXRjaGVzIjoi0J/QtdGA0LXQutC70Y7Rh9C10L3QuNGPIiwiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIuc3dpdGNoZXNTaG9ydCI6ItCf0LXRgNC10LrQuyIsIkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLnRlc3RDYXNlIjoi0KLQtdGB0YLQvtCy0YvQuSDRgdGG0LXQvdCw0YDQuNC5IiwiRm9vdGVyLmJ1aWxkIjoi0KHQsdC+0YDQutCwIiwiRm9vdGVyLmNvbnRhY3QiOiLQodCy0Y/QttC40YLQtdGB0Ywg0YEg0L3QsNC80LgiLCJGb290ZXIuY29weXJpZ2h0Ijoi0JLRgdC1INC/0YDQsNCy0LAg0LfQsNGJ0LjRidC10L3RiyIsIkZvb3Rlci5kb2N1bWVudGF0aW9uIjoi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPIiwiRm9vdGVyLmdpdCI6ItCc0Ysg0L3QsCBHaXRIdWIiLCJGb290ZXIuc2xhY2siOiLQn9C+0L7QsdGJ0LDQudGC0LXRgdGMINGBINC90LDQvNC4INC90LAgU2xhY2siLCJGb3JjZVVwZGF0ZU1vZGFsLmFkZGl0aW9uYWxUZXh0Ijoi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCw0LLRgtC+0YDQuNC30YPQudGC0LXRgdGMINC30LDQvdC+0LLQviwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPISIsIkZvcmNlVXBkYXRlTW9kYWwuaGVhZGVyIjoi0JLQvdC40LzQsNC90LjQtSEiLCJGb3JjZVVwZGF0ZU1vZGFsLnJlbG9naW4iOiLQkNGC0L7RgNC40LfRg9C50YLQtdGB0Ywg0LfQsNC90L7QstC+IiwiRm9yY2VVcGRhdGVNb2RhbC50ZXh0Ijoi0J7QsdC90L7QstC70LXQvdC40LUg0LTQsNC90L3Ri9GFINC40Lcge2FjY291bnR9OiDQuNC90YTQvtGA0LzQsNGG0LjRjyDQtNC70Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPICd7dXNlcn0nINGD0YHQv9C10YjQvdC+INGB0LjQvdGF0YDQvtC90LjQt9C40YDQvtCy0LDQvdCwLiIsIkZvcmdvdFBhc3N3b3JkQmxvY2suZW50ZXJFbWFpbCI6ItCS0LLQtdC00LjRgtC1INCw0LTRgNC10YEg0LLQsNGI0LXQuSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YssINGH0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC10LPQviIsIkZvcmdvdFBhc3N3b3JkQmxvY2suZm9yZ290UGFzcyI6ItCX0LDQsdGL0LvQuCDQv9Cw0YDQvtC70Yw/IiwiRm9yZ290UGFzc3dvcmRGb3JtLmNhbmNlbCI6ItCe0YLQvNC10L3QuNGC0YwiLCJGb3Jnb3RQYXNzd29yZEZvcm0uZW1haWxQbGFjZWhvbGRlciI6ItCS0LLQtdC00LjRgtC1IGVtYWlsIiwiRm9yZ290UGFzc3dvcmRGb3JtLmVycm9yU2VuZEVtYWlsIjoi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINGBINC00LDQvdC90YvQvCDQsNC00YDQtdGB0L7QvCDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0Ysg0L3QtSDQvdCw0LnQtNC10L0iLCJGb3Jnb3RQYXNzd29yZEZvcm0uc2VuZEVtYWlsIjoi0J7RgtC/0YDQsNCy0LjRgtGMINC/0LjRgdGM0LzQviIsIkZvcmdvdFBhc3N3b3JkRm9ybS5zdWNjZXNzU2VuZEVtYWlsIjoi0JjQvdGB0YLRgNGD0LrRhtC40Lgg0L/QviDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGOINC/0LDRgNC+0LvRjyDQvtGC0L/RgNCw0LLQu9C10L3RiyDQvdCwINGN0LvQtdC60YLRgNC+0L3QvdGL0Lkg0LDQtNGA0LXRgSB7ZW1haWx9IiwiR2VuZXJhbEluZm8ubGF1bmNoZXNQZXJXZWVrIjoi0YHRgNC10LTQvdC10LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0YPRgdC60L7QsiDQsiDQvdC10LTQtdC70Y4iLCJHZW5lcmFsSW5mby5sYXVuY2hlc1F1YW50aXR5Ijoi0LfQsNC/0YPRgdC6KNCwL9C+0LIpIiwiR2VuZXJhbEluZm8udW5pcXVlVGlja2V0cyI6ItC+0YLQv9GA0LDQstC70LXQvdCwINGD0L3QuNC60LDQu9GM0L3QsNGPINC+0YjQuNCx0LrQsCIsIkdlbmVyYWxJbmZvLnVzZXJzUXVhbnRpdHkiOiLRg9GH0LDRgdGC0L3QuNC6KNCwL9C+0LIpIiwiR2VuZXJhbFRhYi5kYXkxIjoiMSDQtNC10L3RjCIsIkdlbmVyYWxUYWIuZm9yZXZlciI6ItCS0YHQtdCz0LTQsCIsIkdlbmVyYWxUYWIuaG91cjEiOiIxINGH0LDRgSIsIkdlbmVyYWxUYWIuaG91cjEyIjoiMTIg0YfQsNGB0L7QsiIsIkdlbmVyYWxUYWIuaG91cjMiOiIzINGH0LDRgdCwIiwiR2VuZXJhbFRhYi5ob3VyNiI6IjYg0YfQsNGB0L7QsiIsIkdlbmVyYWxUYWIuaW50ZXJydXB0ZWRKb2IiOiLQktGA0LXQvNGPINCx0LXQt9C00LXQudGB0YLQstC40Y8g0LfQsNC/0YPRgdC60LAiLCJHZW5lcmFsVGFiLmludGVycnVwdGVkSm9iRGVzY3JpcHRpb24iOiLQndCw0LfQvdCw0YfRjNGC0LUg0YDQsNCx0L7Rh9C10LUg0LLRgNC10LzRjywg0YfRgtC+0LHRiyDQv9GA0LXRgNCy0LDRgtGMINC90LXQsNC60YLQuNCy0L3Ri9C1INC30LDQv9GD0YHQutC4IiwiR2VuZXJhbFRhYi5rZWVwTGF1bmNoZXMiOiLQodC+0YXRgNCw0L3Rj9GC0Ywg0LfQsNC/0YPRgdC60LgiLCJHZW5lcmFsVGFiLmtlZXBMYXVuY2hlc0Rlc2NyaXB0aW9uIjoi0JrQsNC6INC00L7Qu9Cz0L4g0YXRgNCw0L3QuNGC0Ywg0YHRgtCw0YDRi9C1INC30LDQv9GD0YHQutC4LiDQl9Cw0L/Rg9GB0Log0Lgg0LLRgdC1INC10LPQviDQv9C+0YLQvtC80LrQuCAo0L3QsNCx0L7RgNGLLCDRgtC10YHRgtGLLCDRiNCw0LPQuCwg0LvQvtCz0LgpINCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuINCX0LDQv9GD0YHQuiDQsdGD0LTQtdGCINGD0LTQsNC70LXQvSDQuNC3INGE0LjQu9GM0YLRgNC+0LIg0Lgg0LLQuNC00LbQtdGC0L7QsiIsIkdlbmVyYWxUYWIua2VlcExvZ3MiOiLQodC+0YXRgNCw0L3Rj9GC0Ywg0LfQsNC/0LjRgdC4INCyINC20YPRgNC90LDQu9C1IiwiR2VuZXJhbFRhYi5rZWVwTG9nc0Rlc2NyaXB0aW9uIjoi0KHQutC+0LvRjNC60L4g0LLRgNC10LzQtdC90Lgg0YHQvtGF0YDQsNC90Y/RgtGMINGB0YLQsNGA0YvQtSDQt9Cw0L/QuNGB0Lgg0LbRg9GA0L3QsNC70LAg0LIg0LfQsNC/0YPRgdC60LDRhS4g0KHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1INC30LDQv9GD0YHQutC4INCx0YPQtNGD0YIg0YHQvtGF0YDQsNC90Y/RgtGM0YHRjywg0YfRgtC+0LHRiyDQvdC1INGD0YLRgNCw0YLQuNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMiLCJHZW5lcmFsVGFiLmtlZXBTY3JlZW5zaG90cyI6ItCh0L7RhdGA0LDQvdGP0YLRjCDRgdC60YDQuNC90YjQvtGC0YsiLCJHZW5lcmFsVGFiLmtlZXBTY3JlZW5zaG90c0Rlc2NyaXB0aW9uIjoi0KHQutC+0LvRjNC60L4g0LLRgNC10LzQtdC90Lgg0YHQvtGF0YDQsNC90Y/RgtGMINGB0LrRgNC40L3RiNC+0YLRiyDQsiDRgdC40YHRgtC10LzQtSIsIkdlbmVyYWxUYWIubW9udGgxIjoiMSDQvNC10YHRj9GGIiwiR2VuZXJhbFRhYi5tb250aDMiOiIzINC80LXRgdGP0YbQsCIsIkdlbmVyYWxUYWIubW9udGg2IjoiNiDQvNC10YHRj9GG0LXQsiIsIkdlbmVyYWxUYWIucHJvamVjdE5hbWVMYWJlbCI6ItCY0LzRjyIsIkdlbmVyYWxUYWIudXBkYXRlRXJyb3JOb3RpZmljYXRpb24iOiLQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0L3QsNGB0YLRgNC+0LnQutC4INC/0YDQvtC10LrRgtCwIiwiR2VuZXJhbFRhYi51cGRhdGVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0J3QsNGB0YLRgNC+0LnQutC4INC/0YDQvtC10LrRgtCwINGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLQu9C10L3RiyIsIkdlbmVyYWxUYWIud2VlazEiOiIxINC90LXQtNC10LvRjyIsIkdlbmVyYWxUYWIud2VlazIiOiIyINC90LXQtNC10LvQuCIsIkdlbmVyYWxUYWIud2VlazMiOiIzINC90LXQtNC10LvQuCIsIkdlbmVyYXRlSW5kZXhNb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LfQsNC90L7QstC+INGB0LPQtdC90LXRgNC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSDQsiBFbGFzdGljU2VhcmNoPyIsIkdlbmVyYXRlSW5kZXhNb2RhbC5nZW5lcmF0ZUJ1dHRvblRleHQiOiLQodCz0LXQvdC10YDQuNGA0L7QstCw0YLRjCIsIkdlbmVyYXRlSW5kZXhNb2RhbC5nZW5lcmF0ZUVycm9yTm90aWZpY2F0aW9uIjoi0JPQtdC90LXRgNCw0YbQuNGPINC40L3QtNC10LrRgdCwINCx0YvQu9CwINC+0YLQvNC10L3QtdC90LAiLCJHZW5lcmF0ZUluZGV4TW9kYWwuZ2VuZXJhdGVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0JPQtdC90LXRgNCw0YbQuNGPINC40L3QtNC10LrRgdCwINC90LDRh9Cw0LvQsNGB0YwiLCJHZW5lcmF0ZUluZGV4TW9kYWwuaGVhZGVyR2VuZXJhdGVJbmRleE1vZGFsIjoi0KHQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0LjQvdC00LXQutGBIiwiR2VuZXJhdGVJbmRleE1vZGFsLm5vdGVCbG9ja1RleHQiOiLQn9C+INC+0LrQvtC90YfQsNC90LjRjiDQv9GA0L7RhtC10YHRgdCwINCS0Ysg0L/QvtC70YPRh9C40YLQtSDQv9C40YHRjNC80L4g0L/QviDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0LUuIiwiR2VuZXJhdGVJbmRleE1vZGFsLm5vdGVCbG9ja1RpdGxlIjoi0Jog0YHQstC10LTQtdC90LjRjjoiLCJHaXRodWJBdXRoRm9ybS5mb3JtSGVhZGVyIjoiR2l0aHViIiwiR2l0aHViQXV0aEZvcm0uc3dpdGNoZXJMYWJlbCI6ItCQ0LLRgtC+0YDQuNC30LDRhtC40Y8g0LIgR2l0SHViIiwiR2l0aHViQXV0aEZvcm1GaWVsZHMuY2xpZW50SWRMYWJlbCI6IkNsaWVudCBJRCIsIkdpdGh1YkF1dGhGb3JtRmllbGRzLmNsaWVudFNlY3JldExhYmVsIjoiQ2xpZW50IHNlY3JldCIsIkhhbWJ1cmdlci5hbmFseXNpcyI6ItCQ0L3QsNC70LjQt9C40YDQvtCy0LDRgtGMIiwiSGFtYnVyZ2VyLmRlbGV0ZSI6ItCj0LTQsNC70LjRgtGMIiwiSGFtYnVyZ2VyLmV4cG9ydCI6ItCt0LrRgdC/0L7RgNGC0LjRgNC+0LLQsNGC0Yw6IiwiSGFtYnVyZ2VyLmZvcmNlRmluaXNoIjoi0JfQsNCy0LXRgNGI0LjRgtGMINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+IiwiSGFtYnVyZ2VyLmxhdW5jaEZpbmlzaGVkIjoi0JfQsNC/0YPRgdC6INGD0LbQtSDQt9Cw0LLQtdGA0YjRkdC9IiwiSGFtYnVyZ2VyLmxhdW5jaEluUHJvZ3Jlc3MiOiLQl9Cw0L/Rg9GB0Log0L3QtSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LIg0YHQvtGB0YLQvtGP0L3QuNC4INCSINCf0KDQntCm0JXQodCh0JUhIiwiSGFtYnVyZ2VyLm5vUGVybWlzc2lvbnMiOiLQktGLINC90LUg0Y/QstC70Y/QtdGC0LXRgdGMINCy0LvQsNC00LXQu9GM0YbQtdC8INC30LDQv9GD0YHQutCwIiwiSGFtYnVyZ2VyLm5vdFlvdXJMYXVuY2giOiLQl9Cw0L/Rg9GB0Log0LHRi9C7INGB0L7Qt9C00LDQvSDQvdC1INCS0LDQvNC4IiwiSGFtYnVyZ2VyLnRvQWxsTGF1bmNoZXMiOiLQn9C10YDQtdC80LXRgdGC0LjRgtGMINCy0L4g0LLRgdC1INC30LDQv9GD0YHQutC4IiwiSGFtYnVyZ2VyLnRvRGVidWciOiLQn9C10YDQtdC80LXRgdGC0LjRgtGMINCyINC+0YLQu9Cw0LTQutGDIiwiSGlzdG9yeUZpbHRlcnNCbG9jay5kZXB0aEZpbHRlclRpdGxlIjoi0JPQu9GD0LHQuNC90LAg0LjRgdGC0L7RgNC40LgiLCJIaXN0b3J5SXRlbS5lbXB0eUl0ZW1DYXB0aW9uIjoi0K3Qu9C10LzQtdC90YIg0L/Rg9GB0YIiLCJIaXN0b3J5SXRlbS5ub0l0ZW1DYXB0aW9uIjoi0J3QtdGCINGN0LvQtdC80LXQvdGC0L7Qsjxici8+0LIg0LfQsNC/0YPRgdC60LUiLCJIaXN0b3J5SXRlbS5zYW1lSXRlbXNDYXB0aW9uIjoi0KHRg9GJ0LXRgdGC0LLRg9C10YIg0L3QtdGB0LrQvtC70YzQutC+INGN0LvQtdC80LXQvdGC0L7QsiDRgSDQvtC00LjQvdCw0LrQvtCy0YvQvCDQt9C90LDRh9C10L3QuNC10LwgVUlELiIsIkhpc3RvcnlMaW5lSXRlbUNvbnRlbnQubGF1bmNoRmFpbGVkIjoi0J3QtdGD0LTQsNGH0L3QviIsIkhpc3RvcnlMaW5lSXRlbUNvbnRlbnQubGF1bmNoSW5Qcm9ncmVzcyI6ItCSINC/0YDQvtCz0YDQtdGB0YHQtSIsIkhpc3RvcnlMaW5lSXRlbUNvbnRlbnQubGF1bmNoSW50ZXJydXB0ZWQiOiLQn9GA0LXRgNCy0LDQvdC+IiwiSGlzdG9yeUxpbmVJdGVtQ29udGVudC5sYXVuY2hOb3RGb3VuZCI6ItCd0LXRgiDRjdC70LXQvNC10L3RgtC+0LIg0LIg0LfQsNC/0YPRgdC60LUiLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaFBhc3NlZCI6ItCj0YHQv9C10YjQvdC+IiwiSGlzdG9yeUxpbmVJdGVtQ29udGVudC5sYXVuY2hSZXNldGVkIjoi0K3Qu9C10LzQtdC90YIg0L/Rg9GB0YIiLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaFNhbWVJdGVtcyI6ItCh0YPRidC10YHRgtCy0YPQtdGCINC90LXRgdC60L7Qu9GM0LrQviDRjdC70LXQvNC10L3RgtC+0LIg0YEg0L7QtNC40L3QsNC60L7QstGL0Lwg0LfQvdCw0YfQtdC90LjQtdC8IFVJRC4iLCJIaXN0b3J5TGluZUl0ZW1Db250ZW50LmxhdW5jaFNraXBwZWQiOiLQn9GA0L7Qv9GD0YnQtdC90L4iLCJIaXN0b3J5VGFibGUuaXRlbU5hbWVzSGVhZGVyVGl0bGUiOiLQmNC80Y8iLCJIaXN0b3J5VGFibGUubGF1bmNoTnVtYmVyVGl0bGUiOiLQl9Cw0L/Rg9GB0Log4oSWIiwiSGlzdG9yeVRhYmxlLmxvYWRIaXN0b3J5RXJyb3JOb3RpZmljYXRpb24iOiLQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDQuNGB0YLQvtGA0LjRjiDQtNC70Y8g0YLQtdC60YPRidC10LPQviDRjdC70LXQvNC10L3RgtCwIiwiSGlzdG9yeVRhYmxlLmxvYWRJdGVtSW5mb0Vycm9yTm90aWZpY2F0aW9uIjoi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0LTQu9GPINGN0LvQtdC80LXQvdGC0LAiLCJIaXN0b3J5VGFibGUubG9hZE1vcmVIaXN0b3J5SXRlbXNUaXRsZSI6ItCp0ZHQu9C60L3QuNGC0LUg0LfQtNC10YHRjCwg0YfRgtC+0LHRiyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LHQvtC70YzRiNC1INGN0LvQtdC80LXQvdGC0L7QsiIsIklnbm9yZUluQUFNb2RhbC5pZ25vcmVCdXR0b24iOiLQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0YwiLCJJZ25vcmVJbkFBTW9kYWwuc3VjY2Vzc01lc3NhZ2UiOiLQrdC70LXQvNC10L3RgiDRg9GB0L/QtdGI0L3QviDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0L/RgNC4INCQ0LLRgtC+LdCQ0L3QsNC70LjQt9C1IiwiSWdub3JlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlTXVsdGlwbGUiOiLQrdC70LXQvNC10L3RgtGLINGD0YHQv9C10YjQvdC+INC40LPQvdC+0YDQuNGA0YPRjtGC0YHRjyDQv9GA0Lgg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUiLCJJZ25vcmVJbkFBTW9kYWwudGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMICc8Yj57bmFtZX08L2I+JyDQv9GA0Lgg0JDQstGC0L4t0JDQvdCw0LvQuNC30LU/IiwiSWdub3JlSW5BQU1vZGFsLnRleHRNdWx0aXBsZSI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGN0LvQtdC80LXQvdGC0Ysg0LIg0JDQstGC0L4t0JDQvdCw0LvQuNC3PyIsIklnbm9yZUluQUFNb2RhbC50aXRsZSI6ItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRjdC70LXQvNC10L3RgiDQv9GA0Lgg0JDQstGC0L4t0JDQvdCw0LvQuNC30LUiLCJJZ25vcmVJbkFBTW9kYWwudGl0bGVNdWx0aXBsZSI6ItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRjdC70LXQvNC10L3RgtGLINC/0YDQuCDQkNCy0YLQvi3QkNC90LDQu9C40LfQtSIsIkluY2x1ZGVJbkFBTW9kYWwuaW5jbHVkZUJ1dHRvbiI6ItCS0LrQu9GO0YfQuNGC0YwiLCJJbmNsdWRlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlIjoi0K3Qu9C10LzQtdC90YIg0YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstC70LXQvSDQsiDQkNCy0YLQvi3QkNC90LDQu9C40LciLCJJbmNsdWRlSW5BQU1vZGFsLnN1Y2Nlc3NNZXNzYWdlTXVsdGlwbGUiOiLQrdC70LXQvNC10L3RgtGLINGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLQu9C10L3RiyDQsiDQkNCy0YLQvi3QkNC90LDQu9C40LciLCJJbmNsdWRlSW5BQU1vZGFsLnRleHQiOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INCy0LrQu9GO0YfQuNGC0YwgJzxiPntuYW1lfTwvYj4nINCyINCQ0LLRgtC+LdCQ0L3QsNC70LjQtz8iLCJJbmNsdWRlSW5BQU1vZGFsLnRleHRNdWx0aXBsZSI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LLQutC70Y7Rh9C40YLRjCDRjdC70LXQvNC10L3RgtGLINCyINCQ0LLRgtC+LdCQ0L3QsNC70LjQtz8iLCJJbmNsdWRlSW5BQU1vZGFsLnRpdGxlIjoi0JLQutC70Y7Rh9C40YLRjCDRjdC70LXQvNC10L3RgiDQsiDQkNCy0YLQvi3QkNC90LDQu9C40LciLCJJbmNsdWRlSW5BQU1vZGFsLnRpdGxlTXVsdGlwbGUiOiLQktC60LvRjtGH0LjRgtGMINGN0LvQtdC80LXQvdGC0Ysg0LIg0JDQstGC0L4t0JDQvdCw0LvQuNC3IiwiSW5kZXhBY3Rpb25zQmxvY2suYW5hbHl6ZXJEaXNhYmxlZEJ1dHRvblRpdGxlIjoiU2VydmljZSBBTkFMWVpFUiBpcyBub3QgcnVubmluZyIsIkluZGV4QWN0aW9uc0Jsb2NrLmdlbmVyYXRlSW5kZXhCdXR0b25DYXB0aW9uIjoi0KHQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0LjQvdC00LXQutGBIiwiSW5kZXhBY3Rpb25zQmxvY2suZ2VuZXJhdGVJbmRleEJ1dHRvblByb2dyZXNzQ2FwdGlvbiI6ItCSINC/0YDQvtCz0YDQtdGB0YHQtS4uLiIsIkluZGV4QWN0aW9uc0Jsb2NrLmdlbmVyYXRlSW5kZXhEZXNjcmlwdGlvbiI6ItCS0YHRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQsdGD0LTQtdGCINGD0LTQsNC70LXQvdCwINC40LcgRWxhc3RpY1NlYXJjaCDQuCDRgdCz0LXQvdC10YDQuNGA0L7QstCw0L3QsCDQt9Cw0L3QvtCy0L4sINC90LAg0L7RgdC90L7QstCw0L3QuNC4INC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQvdC90YvRhSDQtNCw0L3QvdGL0YUg0L3QsCDQktCw0YjQtdC8INC/0YDQvtC10LrRgtC1INGBINGD0YfQtdGC0L7QvCDQtNC10LnRgdGC0LLRg9GO0YnQuNGFINC90LDRgdGC0YDQvtC10Log0JDQstGC0L4t0JDQvdCw0LvQuNC30LAuINCS0Ysg0YHQvNC+0LbQtdGC0LUg0LfQsNC/0YPRgdGC0LjRgtGMINCQ0LLRgtC+LdCQ0L3QsNC70LjQtyDQv9C+0YHQu9C1INC+0LrQvtC90YfQsNC90LjRjyDQv9GA0L7RhtC10YHRgdCwLCDQviDQutC+0YLQvtGA0L7QvCDQsdGD0LTQtdGC0LUg0YPQstC10LTQvtC80LvQtdC90Ysg0L/QuNGB0YzQvNC+0Lwg0L/QviDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0LUiLCJJbmRleEFjdGlvbnNCbG9jay5yZW1vdmVJbmRleEJ1dHRvbkNhcHRpb24iOiLQo9C00LDQu9C40YLRjCDQuNC90LTQtdC60YEiLCJJbmRleEFjdGlvbnNCbG9jay5yZW1vdmVJbmRleERlc2NyaXB0aW9uIjoi0JLRgdGPINC40L3RhNC+0YDQvNCw0YbQuNGPINCx0YPQtNC10YIg0YPQtNCw0LvQtdC90LAg0LjQtyBFbGFzdGljU2VhcmNoLiDQlNC70Y8g0LPQtdC90LXRgNCw0YbQuNC4INC00LDQvdC90YvRhSDQt9Cw0L3QvtCy0L4g0JLRiyDQvNC+0LbQtdGC0LUg0L3QsNGH0LDRgtGMINCw0L3QsNC70LjQt9C40YDQvtCy0LDRgtGMINGC0LXRgdGC0L7QstGL0LUg0YDQtdC30YPQu9GM0YLQsNGC0Ysg0LLRgNGD0YfQvdGD0Y4g0LjQu9C4INGB0LPQtdC90LXRgNC40YDQvtCy0LDRgtGMINC00LDQvdC90YvQtSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCIsIkluZGV4QWN0aW9uc0Jsb2NrLnRpdGxlIjoi0JTQtdC50YHRgtCy0LjRjyDRgSDQuNC90LTQtdC60YHQvtC8IiwiSW5mb0xpbmUuZHVyYXRpb24iOiLQlNC70LjRgtC10LvRjNC90L7RgdGC0YwiLCJJbmZvTGluZS5wYXNzZWQiOiLQo9GB0L/QtdGI0L3QviB7dmFsdWV9JSIsIkluZm9MaW5lLnRvdGFsIjoi0JLRgdC10LPQviB7dmFsdWV9IiwiSW5wdXRDb25kaXRpb25hbFRhZ3MudGFnc0hpbnQiOiLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUgMSDQuNC70Lgg0LHQvtC70LXQtSDQt9C90LDQutC+0LIiLCJJbnB1dEZpbHRlclRvb2xiYXIuYXBwbHkiOiLQn9GA0LjQvNC10L3QuNGC0YwiLCJJbnB1dEZpbHRlclRvb2xiYXIuY2xlYXJBbGxmaWx0ZXJzIjoi0J7Rh9C40YHRgtC40YLRjCDQstGB0LUg0YTQuNC70YzRgtGA0YsiLCJJbnB1dFRhZ3NTZWFyY2guZHluYW1pY1NlYXJjaFByb21wdFRleHQiOiLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtXtsZW5ndGh9INC40LvQuCDQsdC+0LvQtdC1INGB0LjQvNCy0L7Qu9C+0LIiLCJJbnB1dFRhZ3NTZWFyY2gubmV3Ijoi0J3QvtCy0YvQuSIsIklucHV0VGltZURhdGVSYW5nZS5jdXN0b21SYW5nZSI6ItCX0LAg0LLRi9Cx0YDQsNC90L3Ri9C5INC/0LXRgNC40L7QtCIsIklucHV0VGltZURhdGVSYW5nZS5keW5hbWljVXBkYXRlIjoi0JTQuNC90LDQvNC40YfQtdGB0LrQvtC1INC+0LHQvdC+0LLQu9C10L3QuNC1IiwiSW5wdXRUaW1lRGF0ZVJhbmdlLmR5bmFtaWNVcGRhdGVIaW50Ijoi0JLQsNGIINCy0YDQtdC80LXQvdC90L7QuSDQtNC40LDQv9Cw0LfQvtC9INCx0YPQtNC10YIg0L7QsdC90L7QstC70Y/RgtGM0YHRjyDQutCw0LbQtNGL0Lkg0LTQtdC90YwiLCJJbnB1dFRpbWVEYXRlUmFuZ2UuZnJvbSI6ItCe0YIiLCJJbnB1dFRpbWVEYXRlUmFuZ2UudGltZSI6ItCS0YDQtdC80Y8iLCJJbnB1dFRpbWVEYXRlUmFuZ2UudG8iOiLQlNC+IiwiSW5wdXRVc2VyU2VhcmNoLmludml0ZU5ld1VzZXIiOiLQn9GA0LjQs9C70LDRgdC40YLRjCB7dXNlckVtYWlsfSIsIklucHV0VXNlclNlYXJjaC5pbnZpdGVOZXdVc2VySW5mbyI6ItCe0YLQv9GA0LDQstC40YLRjCDQv9GA0LjQs9C70LDRiNC10L3QuNC1INC90LAg0Y3RgtC+0YIg0LDQtNGA0LXRgSIsIklucHV0VXNlclNlYXJjaC5ub1Jlc3VsdHMiOiLQndC40YfQtdCz0L4g0L3QtSDQvdCw0LnQtNC10L3QviIsIklucHV0VXNlclNlYXJjaC5wbGFjZWhvbGRlciI6ItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1IDEg0LjQu9C4INCx0L7Qu9C10LUg0YHQuNC80LLQvtC70L7QsiIsIklucHV0VXNlclNlYXJjaC5zZWFyY2hpbmciOiLQn9C+0LjRgdC6Li4uIiwiSW50ZWdyYXRpb25zTGlzdC5idHMiOiJCdWcgVHJhY2tpbmcgU3lzdGVtcyIsIkludGVncmF0aW9uc0xpc3Qubm90aWZpY2F0aW9uIjoiTm90aWZpY2F0aW9ucyIsIkludmVzdGlnYXRlZFBlcmNlbnRhZ2VPZkxhdW5jaGVzQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJJbnZlc3RpZ2F0ZWRQZXJjZW50YWdlT2ZMYXVuY2hlc0NvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIkludml0ZVVzZXJNb2RhbC5kZXNjcmlwdGlvbiI6ItCf0YDQuNCz0LvQsNGB0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvdCwINC/0YDQvtC10LrRgiIsIkludml0ZVVzZXJNb2RhbC5lbWFpbExhYmVsIjoi0JvQvtCz0LjQvSDQuNC70Lgg0Y3Qu9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0YfRgtCwIiwiSW52aXRlVXNlck1vZGFsLmhlYWRlckludml0ZVVzZXJNb2RhbCI6ItCf0YDQuNCz0LvQsNGB0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIsIkludml0ZVVzZXJNb2RhbC5pbnB1dFBsYWNlaG9sZGVyIjoi0JLQstC10LTQuNGC0LUg0LvQvtCz0LjQvSDQuNC70Lgg0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsiLCJJbnZpdGVVc2VyTW9kYWwucm9sZSI6ItCf0YDQvtC10LrRgtC90LDRjyDRgNC+0LvRjCIsIkl0ZW1JbmZvLlJldHJ5VG9vbHRpcCI6IkxhdW5jaCBoYXMgdGVzdCBpdGVtcyB3aXRoIHJldHJpZXMiLCJMYXN0TG9naW4ubW9iaWxlVGl0bGUiOiLQn9C+0YHQu9C10LTQvdC40Lkg0LLRhdC+0LQ6IiwiTGF1bmNoQ2hhbmdlcy5kZWxldGUiOiLRg9C00LDQu9C40LsiLCJMYXVuY2hDaGFuZ2VzLmZpbmlzaCI6ItC30LDQstC10YDRiNC40LsiLCJMYXVuY2hDaGFuZ2VzLmZpbmlzaEltcG9ydCI6ItC60L7QvdC10YYg0LjQvNC/0L7RgNGC0LAiLCJMYXVuY2hDaGFuZ2VzLmxhdW5jaCI6ItC30LDQv9GD0YHQuiIsIkxhdW5jaENoYW5nZXMuc3RhcnQiOiLRgdGC0LDRgNGCIiwiTGF1bmNoQ2hhbmdlcy5zdGFydEltcG9ydCI6ItC90LDRh9Cw0LvQviDQuNC80L/QvtGA0YLQsCIsIkxhdW5jaER1cmF0aW9uQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJMYXVuY2hEdXJhdGlvbkNvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIkxhdW5jaEZpbHRlcnNUb29sYmFyLmFkZEZpbHRlciI6ItCU0L7QsdCw0LLQuNGC0Ywg0YTQuNC70YzRgtGAIiwiTGF1bmNoRmluaXNoRm9yY2VEaWFsb2cuZmluaXNoRm9yY2VMYXVuY2hIZWFkZXIiOiLQl9Cw0LLQtdGA0YjQuNGC0Ywg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5maW5pc2hGb3JjZUxhdW5jaFRleHQiOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INC30LDQstC10YDRiNC40YLRjCDQt9Cw0L/Rg9GB0Lo/INCS0YHQtSDQtNCw0L3QvdGL0LUg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLLiIsIkxhdW5jaEZpbmlzaEZvcmNlRGlhbG9nLmZpbmlzaEZvcmNlTGF1bmNoV2FybmluZyI6ItCS0Ysg0YHQvtCx0LjRgNCw0LXRgtC10YHRjCDQvtGB0YLQsNC90L7QstC40YLRjCDQvdC1INCy0LDRiCDQt9Cw0L/Rg9GB0LouINCt0YLQviDQvNC+0LbQtdGCINC/0L7QstC70LjRj9GC0Ywg0L3QsCDQuNC40L3RhNC+0YDQvNCw0YbQuNGOINC00YDRg9Cz0LjRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9GA0L7QtdC60YLQsC4iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5maW5pc2hGb3JjZU11bHRpcGxlVGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LfQsNCy0LXRgNGI0LjRgtGMINCy0YvQsdGA0LDQvdC90YvQtSDQt9Cw0L/Rg9GB0LrQuD8g0JLRgdC1INC00LDQvdC90YvQtSDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90YsuIiwiTGF1bmNoRmluaXNoRm9yY2VEaWFsb2cuZm9yY2VGaW5pc2hGYWlsZWRNZXNzYWdlIjoi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQt9Cw0LLQtdGA0YjQuNGC0Ywg0LfQsNC/0YPRgdC6OiB7bWVzc2FnZX0iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5mb3JjZUZpbmlzaEZhaWxlZE11bHRpcGxlTWVzc2FnZSI6ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LfQsNCy0LXRgNGI0LjRgtGMINC30LDQv9GD0YHQutC4OiB7bWVzc2FnZX0iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5mb3JjZUZpbmlzaFN1Y2Nlc3NNZXNzYWdlIjoi0JfQsNC/0YPRgdC6INGD0YHQv9C10YjQvdC+INC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC30LDQstC10YDRiNGR0L0iLCJMYXVuY2hGaW5pc2hGb3JjZURpYWxvZy5mb3JjZUZpbmlzaFN1Y2Nlc3NNdWx0aXBsZU1lc3NhZ2UiOiLQl9Cw0L/Rg9GB0LrQuCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQt9Cw0LLQtdGA0YjRkdC90YsiLCJMYXVuY2hJbXBvcnRNb2RhbC5jYW5jZWxCdXR0b24iOiLQntGC0LzQtdC90LjRgtGMIiwiTGF1bmNoSW1wb3J0TW9kYWwuaW1wb3J0QnV0dG9uIjoi0JjQvNC/0L7RgNGCIiwiTGF1bmNoSW1wb3J0TW9kYWwuaW1wb3J0Q29uZmlybWF0aW9uIjoi0J/QvtC00YLQstC10YDQtNC40YLQtSDQvtGC0LzQtdC90YMiLCJMYXVuY2hJbXBvcnRNb2RhbC5pbXBvcnRDb25maXJtYXRpb25XYXJuaW5nIjoi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQvtGB0YLQsNC90L7QstC40YLRjCDQv9GA0L7RhtC10YHRgSDQuNC80L/QvtGA0YLQsD8iLCJMYXVuY2hJbXBvcnRNb2RhbC5pbmNvcnJlY3RGaWxlRm9ybWF0Ijoi0J3QtdCy0LXRgNC90YvQuSDRhNC+0YDQvNCw0YIg0YTQsNC50LvQsCIsIkxhdW5jaEltcG9ydE1vZGFsLmluY29ycmVjdEZpbGVTaXplIjoi0KDQsNC30LzQtdGAINGE0LDQudC70LAg0LHQvtC70YzRiNC1IDMyIE1iIiwiTGF1bmNoSW1wb3J0TW9kYWwubW9kYWxUaXRsZSI6ItCY0LzQv9C+0YDRgtC40YDQvtCy0LDRgtGMINCX0LDQv9GD0YHQuiIsIkxhdW5jaEltcG9ydE1vZGFsLm5vdGUiOiLQl9Cw0LzQtdGH0LDQvdC40LU6IiwiTGF1bmNoSW1wb3J0TW9kYWwubm90ZU1lc3NhZ2UiOiLQldGB0LvQuCDQstCw0Ygg0LjRgdC/0L7Qu9C90LjRgtC10LvRjCDQvdC1INC30LDQv9C40YHRi9Cy0LDQtdGCINCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINGC0LXRgdGC0LAg0LIgLnhtbCDRhNCw0LnQuywg0YLQvtCz0LTQsCDQsdGD0LTQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0L0g0YLQtdC60YPRidC10LUg0LLRgNC10LzRjyDRgdC10YDQstC10YDQsC4iLCJMYXVuY2hJbXBvcnRNb2RhbC5va0J1dHRvbiI6Ik9rIiwiTGF1bmNoSW1wb3J0TW9kYWwudGlwIjoi0J/QtdGA0LXRgtCw0YnQuNGC0LUg0YLQvtC70YzQutC+IDxiPi56aXA8L2I+INGE0LDQudC7INC00L4gMzIgTUIg0LTQu9GPINC30LDQs9GA0YPQt9C60Lgg0LjQu9C4IDxzcGFuPtGJ0LXQu9C60L3QuNGC0LU8L3NwYW4+INGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQtdCz0L4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RpdGxlIjoi0J7RiNC40LHQutCwINGC0LXRgdGC0LAiLCJMYXVuY2hMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGUiOiLQktGB0LXQs9C+INC+0YjQuNCx0L7QuiDRgtC10YHRgtCwIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5BdHRyaWJ1dGVLZXlzVGl0bGUiOiLQmtC70Y7Rh9C4INCw0YLRgNC40LHRg9GC0L7QsiIsIkxhdW5jaExldmVsRW50aXRpZXMuQXR0cmlidXRlVmFsdWVzVGl0bGUiOiLQl9C90LDRh9C10L3QuNGPINCw0YLRgNC40LHRg9GC0L7QsiIsIkxhdW5jaExldmVsRW50aXRpZXMuRGVzY3JpcHRpb25UaXRsZSI6ItCe0L/QuNGB0LDQvdC40LUiLCJMYXVuY2hMZXZlbEVudGl0aWVzLkZhaWxlZFRpdGxlIjoi0J3QtdGD0LTQsNGH0L3QviIsIkxhdW5jaExldmVsRW50aXRpZXMuTmFtZVRpdGxlIjoi0JjQvNGPINC30LDQv9GD0YHQutCwIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5OdW1iZXJUaXRsZSI6ItCd0L7QvNC10YAg0LfQsNC/0YPRgdC60LAiLCJMYXVuY2hMZXZlbEVudGl0aWVzLk93bmVyVGl0bGUiOiLQktC70LDQtNC10LvQtdGGIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5QUk9EVUNUX0JVR190aXRsZSI6ItCU0LXRhNC10LrRgiDQv9GA0L7QtNGD0LrRgtCwIiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5QUk9EVUNUX0JVR190b3RhbFRpdGxlIjoi0JLRgdC10LPQviDQtNC10YTQtdC60YLQvtCyINC/0YDQvtC00YPQutGC0LAiLCJMYXVuY2hMZXZlbEVudGl0aWVzLlBhc3NlZFRpdGxlIjoi0KPRgdC/0LXRiNC90L4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLlNZU1RFTV9JU1NVRV90aXRsZSI6ItCh0LjRgdGC0LXQvNC90LDRjyDQvtGI0LjQsdC60LAiLCJMYXVuY2hMZXZlbEVudGl0aWVzLlNZU1RFTV9JU1NVRV90b3RhbFRpdGxlIjoi0JLRgdC10LPQviDRgdC40YHRgtC10LzQvdGL0YUg0L7RiNC40LHQvtC6IiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5Ta2lwcGVkVGl0bGUiOiLQn9GA0L7Qv9GD0YnQtdC90L4iLCJMYXVuY2hMZXZlbEVudGl0aWVzLlN0YXJ0VGltZVRpdGxlIjoi0JLRgNC10LzRjyDQt9Cw0L/Rg9GB0LrQsCIsIkxhdW5jaExldmVsRW50aXRpZXMuVE9fSU5WRVNUSUdBVEVfdGl0bGUiOiLQotGA0LXQsdGD0LXRgtGB0Y8g0LDQvdCw0LvQuNC3IiwiTGF1bmNoTGV2ZWxFbnRpdGllcy5Ub3RhbFRpdGxlIjoi0JLRgdC10LPQviIsIkxhdW5jaExldmVsRW50aXRpZXMuaXRlbU5hbWVFbnRpdHlIaW50Ijoi0J/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSAzINGB0LjQvNCy0L7Qu9CwINC90LXQvtCx0YXQvtC00LjQvNC+LiIsIkxhdW5jaExldmVsRW50aXRpZXMubGF1bmNoRGVzY3JpcHRpb25FbnRpdHlIaW50Ijoi0J/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSAzINGB0LjQvNCy0L7Qu9CwINC90LXQvtCx0YXQvtC00LjQvNC+LiIsIkxhdW5jaExldmVsRW50aXRpZXMubGF1bmNoTnVtYmVyRW50aXR5SGludCI6ItCt0YLQvtGCINGE0LjQu9GM0YLRgCDQv9GA0LjQvdC40LzQsNC10YIg0YLQvtC70YzQutC+INGG0LjRhNGA0YsuIiwiTGF1bmNoTWVyZ2VNb2RhbC5sYXVuY2hEZXNjcmlwdGlvbkhpbnQiOiLQntC/0LjRgdCw0L3QuNC1INC90LUg0LTQvtC70LbQvdC+INCx0YvRgtGMINCx0L7Qu9GM0YjQtSAxMDI0INGB0LjQvNCy0L7Qu9C+0LIuIiwiTGF1bmNoTWVyZ2VNb2RhbC5sYXVuY2hOYW1lSGludCI6ItCd0LDQt9Cy0LDQvdC40LUg0LfQsNC/0YPRgdC60LAg0LTQvtC70LbQvdC+INCx0YvRgtGMINGA0LDQt9C80LXRgNC+0Lwg0L7RgiAzINC00L4gMjU2LiIsIkxhdW5jaFN0YXRpc3RpY3NDb250cm9scy5Db250ZW50RmllbGRzVmFsaWRhdGlvbkVycm9yIjoiWW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIiwiTGF1bmNoU3RhdGlzdGljc0NvbnRyb2xzLkNyaXRlcmlhRmllbGRMYWJlbCI6IkNyaXRlcmlhIGZvciB3aWRnZXQiLCJMYXVuY2hTdGF0aXN0aWNzQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJMYXVuY2hTdGF0aXN0aWNzQ29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTUwIiwiTGF1bmNoU3RhdGlzdGljc0NvbnRyb2xzLlpvb21Db250cm9sVGV4dCI6Ilpvb20gd2lkZ2V0IGFyZWEiLCJMYXVuY2hTdGF0aXN0aWNzQ29udHJvbHMuYXR0cmlidXRlS2V5VmFsaWRhdGlvbkVycm9yIjoiVmFsdWUgc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDEgdG8gMTI4IiwiTGF1bmNoU3RhdHVzLmZhaWxlZCI6ItCd0LXRg9C00LDRh9C90L4iLCJMYXVuY2hTdGF0dXMucGFzc2VkIjoi0KPRgdC/0LXRiNC90L4iLCJMYXVuY2hTdGF0dXMuc2tpcHBlZCI6ItCf0YDQvtC/0YPRidC10L3QviIsIkxhdW5jaGVzUGFnZS5hbHJlYWR5SWdub3JlZCI6ItCt0LvQtdC80LXQvdGCINGD0LbQtSDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0JDQstGC0L4t0JDQvdCw0LvQuNC30L7QvCIsIkxhdW5jaGVzUGFnZS5hbHJlYWR5SW5jbHVkZWQiOiLQrdC70LXQvNC10L3RgiDRg9C20LUg0LLQutC70Y7Rh9C10L0g0LIg0JDQstGC0L4t0JDQvdCw0LvQuNC3IiwiTGF1bmNoZXNQYWdlLmFuYWx5c2VTdGFydFN1Y2Nlc3MiOiJBdXRvLWFuYWx5emVyIGhhcyBiZWVuIHN0YXJ0ZWQuIiwiTGF1bmNoZXNQYWdlLmNoZWNrUXVlcnkiOiJGYWlsZWQgdG8gbG9hZCBkYXRhIGZvciBsYXVuY2hlcyB0YWJsZSIsIkxhdW5jaGVzUGFnZS5kZWxldGVNb2RhbENvbnRlbnQiOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINC30LDQv9GD0YHQuiAnPGI+e25hbWV9PC9iPic/INCS0Ysg0L/QvtGC0LXRgNGP0LXRgtC1INC00L7RgdGC0YPQvyDQuiDQvdC10LzRgy4iLCJMYXVuY2hlc1BhZ2UuZGVsZXRlTW9kYWxIZWFkZXIiOiLQo9C00LDQu9C40YLRjCDQt9Cw0L/Rg9GB0LoiLCJMYXVuY2hlc1BhZ2UuZGVsZXRlTW9kYWxNdWx0aXBsZUNvbnRlbnQiOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINC30LDQv9GD0YHQutC4PyDQktGLINC/0L7RgtC10YDRj9C10YLQtSDQtNC+0YHRgtGD0L8g0Log0L3QuNC8LiIsIkxhdW5jaGVzUGFnZS5kZWxldGVNb2RhbE11bHRpcGxlSGVhZGVyIjoi0KPQtNCw0LvQuNGC0Ywg0LfQsNC/0YPRgdC60LgiLCJMYXVuY2hlc1BhZ2UuZXJyb3IiOiLQntGI0LjQsdC60LAg0L/RgNC4INGD0LTQsNC70LXQvdC40Lgg0LfQsNC/0YPRgdC60LAiLCJMYXVuY2hlc1BhZ2UuZXJyb3JNdWx0aXBsZSI6ItCe0YjQuNCx0LrQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCDQt9Cw0L/Rg9GB0LrQvtCyIiwiTGF1bmNoZXNQYWdlLmltcG9ydCI6ItCY0LzQv9C+0YDRgiIsIkxhdW5jaGVzUGFnZS5sYXVuY2hGaW5pc2hlZCI6ItCX0LDQv9GD0YHQuiDQt9Cw0LLQtdGA0YjRkdC9IiwiTGF1bmNoZXNQYWdlLmxhdW5jaElzUHJvY2Vzc2luZyI6ItCX0LDQv9GD0YHQuiDQvdC1INC00L7Qu9C20LXQvSDQvtCx0YDQsNCx0LDRgtGL0LLQsNGC0YzRgdGPINCQ0LLRgtC+0LDQvdCw0LvQuNC30LDRgtC+0YDQvtC8ISIsIkxhdW5jaGVzUGFnZS5sYXVuY2hOb3RJblByb2dyZXNzIjoi0JfQsNC/0YPRgdC6INC90LUg0LTQvtC70LbQtdC9INCx0YvRgtGMINCyINGB0L7RgdGC0L7Rj9C90LjQuCDQkiDQn9Cg0J7QptCV0KHQodCVISIsIkxhdW5jaGVzUGFnZS5tdWx0aVNlbGVjdEVycm9yIjoi0JLRiyDQvdC1INC80L7QttC10YLQtSDQstGL0L/QvtC70L3QuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgSDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQvNC4INGN0LvQtdC80LXQvdGC0LDQvNC4IiwiTGF1bmNoZXNQYWdlLm11bHRpcGxlU2VsZWN0SGVhZGVyIjoi0JLRiyDQvNC+0LbQtdGC0LUg0LLRi9C/0L7Qu9C90Y/RgtGMINC00LXQudGB0YLQstC40Y8g0YEg0LLRi9Cx0YDQsNC90L3Ri9C80Lgg0Y3Qu9C10LzQtdC90YLQsNC80Lg6IiwiTGF1bmNoZXNQYWdlLm5vRGVmZWN0VHlwZSI6ItCt0LvQtdC80LXQvdGCINC90LUg0LjQvNC10LXRgiDQtNC10YTQtdC60YLQsCIsIkxhdW5jaGVzUGFnZS5ub0RlZmVjdFR5cGVUb0xpbmtJc3N1ZSI6ItCS0Ysg0L3QtSDQvNC+0LbQtdGC0LUg0L/RgNC40LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDLCDQtdGB0LvQuCDRjdC70LXQvNC10L3RgiDQvdC1INC40LzQtdC10YIg0LTQtdGE0LXQutGC0LAiLCJMYXVuY2hlc1BhZ2Uubm9Jc3N1ZSI6ItCjINGN0LvQtdC80LXQvdGC0LAg0L3QtdGCINC00LXRhNC10LrRgtCwINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPIiwiTGF1bmNoZXNQYWdlLm5vTGlua2VkSXNzdWUiOiLQoyDRjdC70LXQvNC10L3RgtCwINC90LXRgiDQv9GA0LjQutGA0LXQv9C70LXQvdC90L7QuSDQvtGI0LjQsdC60LgiLCJMYXVuY2hlc1BhZ2Uubm90Rm91bmQiOiJMYXVuY2ggaXMgbm90IGZvdW5kIiwiTGF1bmNoZXNQYWdlLm5vdFlvdXJPd25MYXVuY2giOiLQl9Cw0L/Rg9GB0Log0LHRi9C7INGB0L7Qt9C00LDQvSDQvdC1INCS0LDQvNC4IiwiTGF1bmNoZXNQYWdlLnJlZnJlc2giOiLQntCx0L3QvtCy0LjRgtGMIiwiTGF1bmNoZXNQYWdlLnNlbGVjdE1vcmVJdGVtcyI6ItCS0LDQvCDQvdCw0LTQviDQstGL0LHRgNCw0YLRjCDQsdC+0LvQtdC1INC+0LTQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwIiwiTGF1bmNoZXNQYWdlLnN1Y2Nlc3MiOiLQl9Cw0L/Rg9GB0Log0LHRi9C7INGD0LTQsNC70LXQvSIsIkxhdW5jaGVzUGFnZS5zdWNjZXNzTXVsdGlwbGUiOiLQl9Cw0L/Rg9GB0LrQuCDQsdGL0LvQuCDRg9C00LDQu9C10L3RiyIsIkxhdW5jaGVzUGFnZS53YXJuaW5nIjoi0JLRiyDRgdC+0LHQuNGA0LDQtdGC0LXRgdGMINGD0LTQsNC70LjRgtGMINC90LUg0YHQstC+0Lkg0LfQsNC/0YPRgdC6LiDQrdGC0L4g0LzQvtC20LXRgiDQv9C+0LLQu9C40Y/RgtGMINC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y4g0LTRgNGD0LPQuNGFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INC/0YDQvtC10LrRgtCwLiIsIkxhdW5jaGVzUGFnZS53YXJuaW5nTXVsdGlwbGUiOiLQktGLINGB0L7QsdC40YDQsNC10YLQtdGB0Ywg0YPQtNCw0LvQuNGC0Ywg0L3QtSDRgdCy0L7QuSDQt9Cw0L/Rg9GB0LrQuC4g0K3RgtC+INC80L7QttC10YIg0L/QvtCy0LvQuNGP0YLRjCDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGOINC00YDRg9Cz0LjRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9GA0L7QtdC60YLQsC4iLCJMYXVuY2hlc1RhYmxlLmVuZFRpbWVDb2x1bW5GdWxsIjoi0JLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y8iLCJMYXVuY2hlc1RhYmxlLmVuZFRpbWVDb2x1bW5TaG9ydCI6ItCe0LrQvtC90YfQsNC90LjQtSIsIkxhdW5jaGVzVGFibGUuZW5kVGltZUhpbnQiOiLQktGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjzoiLCJMYXVuY2hlc1RhYmxlLmZhaWxlZENvbHVtbkZ1bGwiOiLQndC10YPQtNCw0YfQvdC+IiwiTGF1bmNoZXNUYWJsZS5mYWlsZWRDb2x1bW5TaG9ydCI6ItC90LXRg9C0IiwiTGF1bmNoZXNUYWJsZS5uYW1lQ29sdW1uIjoi0JjQvNGPIiwiTGF1bmNoZXNUYWJsZS5wYXNzZWRDb2x1bW5GdWxsIjoi0KPRgdC/0LXRiNC90L4iLCJMYXVuY2hlc1RhYmxlLnBhc3NlZENvbHVtblNob3J0Ijoi0YPRgdC/IiwiTGF1bmNoZXNUYWJsZS5za2lwcGVkQ29sdW1uRnVsbCI6ItCf0YDQvtC/0YPRidC10L3QviIsIkxhdW5jaGVzVGFibGUuc2tpcHBlZENvbHVtblNob3J0Ijoi0L/RgNC+0L8iLCJMYXVuY2hlc1RhYmxlLnN0YXJ0VGltZUNvbHVtbkZ1bGwiOiLQktGA0LXQvNGPINC90LDRh9Cw0LvQsCIsIkxhdW5jaGVzVGFibGUuc3RhcnRUaW1lQ29sdW1uU2hvcnQiOiLQndCw0YfQsNC70L4iLCJMYXVuY2hlc1RhYmxlLnN0YXJ0VGltZUhpbnQiOiLQktGA0LXQvNGPINC90LDRh9Cw0LvQsDoiLCJMYXVuY2hlc1RhYmxlLnN0YXR1c0NvbHVtbiI6ItCh0YLQsNGC0YPRgSIsIkxhdW5jaGVzVGFibGUuc3RhdHVzSGludCI6ItCh0L7RgdGC0L7Rj9C90LjQtToiLCJMYXVuY2hlc1RhYmxlLnRvdGFsQ29sdW1uRnVsbCI6ItCS0YHQtdCz0L4iLCJMYXVuY2hlc1RhYmxlLnRvdGFsQ29sdW1uU2hvcnQiOiLQktGBIiwiTGF1bmNoZXNUYWJsZUNvbnRyb2xzLkNvbnRlbnRGaWVsZHNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJMYXVuY2hlc1RhYmxlQ29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIkxhdW5jaGVzVGFibGVDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIkxhdW5jaGVzVGFibGVDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJMZGFwQXV0aEZvcm0uc3dpdGNoZXJMYWJlbCI6ItCQ0LLRgtC+0YDQuNC30LDRhtC40Y8g0LIgTERBUCIsIkxkYXBBdXRoRm9ybUZpZWxkcy5iYXNlRG5MYWJlbCI6IkJhc2UgRE4iLCJMZGFwQXV0aEZvcm1GaWVsZHMuZW1haWxBdHRyaWJ1dGVMYWJlbCI6IkVtYWlsIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5mdWxsTmFtZUF0dHJpYnV0ZUxhYmVsIjoiRnVsbCBuYW1lIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5ncm91cFNlYXJjaEJhc2VMYWJlbCI6Ikdyb3VwIHNlYXJjaCBiYXNlIiwiTGRhcEF1dGhGb3JtRmllbGRzLmdyb3VwU2VhcmNoRmlsdGVyTGFiZWwiOiJHcm91cCBzZWFyY2ggZmlsdGVyIiwiTGRhcEF1dGhGb3JtRmllbGRzLm1hbmFnZXJEbkxhYmVsIjoiTWFuYWdlciBETiIsIkxkYXBBdXRoRm9ybUZpZWxkcy5tYW5hZ2VyUGFzc3dvcmRMYWJlbCI6Ik1hbmFnZXIgcGFzc3dvcmQiLCJMZGFwQXV0aEZvcm1GaWVsZHMucGFzc3dvcmRBdHRyaWJ1dGVMYWJlbCI6IlBhc3N3b3JkIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy5wYXNzd29yZEVuY29kZXJUeXBlTGFiZWwiOiJQYXNzd29yZCBlbmNvZGVyIHR5cGUiLCJMZGFwQXV0aEZvcm1GaWVsZHMucGhvdG9BdHRyaWJ1dGVMYWJlbCI6IlBob3RvIGF0dHJpYnV0ZSIsIkxkYXBBdXRoRm9ybUZpZWxkcy51cmxMYWJlbCI6IlVybCIsIkxkYXBBdXRoRm9ybUZpZWxkcy51c2VyRG5QYXR0ZXJuTGFiZWwiOiJVc2VyIEROIHBhdHRlcm4iLCJMZGFwQXV0aEZvcm1GaWVsZHMudXNlclNlYXJjaEZpbHRlckxhYmVsIjoiVXNlciBzZWFyY2ggZmlsdGVyIiwiTGlua0lzc3VlTW9kYWwuYWRkSXNzdWVCdXR0b25UaXRsZSI6ItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQvtGI0LjQsdC60YMiLCJMaW5rSXNzdWVNb2RhbC5hZGRJc3N1ZUlkVGl0bGUiOiLQlNC+0LHQsNCy0LjRgtGMIElkINC+0YjQuNCx0LrQuCIsIkxpbmtJc3N1ZU1vZGFsLmlzc3VlSWRIaW50IjoiSUQg0L7RiNC40LHQutC4INC00L7Qu9C20LXQvSDQsdGL0YLRjCDRgNCw0LfQvNC10YDQvtC8INC+0YIgMSDQtNC+IDEyOCIsIkxpbmtJc3N1ZU1vZGFsLmlzc3VlSWRMYWJlbCI6IklEINC+0YjQuNCx0LrQuCIsIkxpbmtJc3N1ZU1vZGFsLmlzc3VlTGlua0xhYmVsIjoi0KHRgdGL0LvQutCwINC90LAg0L7RiNC40LHQutGDIiwiTGlua0lzc3VlTW9kYWwuaXNzdWVMaW5rUGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDRgdGB0YvQu9C60YMg0L3QsCDQvtGI0LjQsdC60YMiLCJMaW5rSXNzdWVNb2RhbC5saW5rQnV0dG9uIjoi0J/RgNC40LrRgNC10L/QuNGC0YwiLCJMaW5rSXNzdWVNb2RhbC5saW5rSXNzdWVGYWlsZWQiOiLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC60YDQtdC/0LjRgtGMINC+0YjQuNCx0LrRgyIsIkxpbmtJc3N1ZU1vZGFsLmxpbmtJc3N1ZVN1Y2Nlc3MiOiLQodGB0YvQu9C60LAg0L3QsCDQvtGI0LjQsdC60YMg0YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstC70LXQvdCwIiwiTGlua0lzc3VlTW9kYWwucHJvamVjdEluQnRzVGl0bGUiOiLQmNC80Y8g0L/RgNC+0LXQutGC0LAg0LIg0KHQntCUIiwiTGlua0lzc3VlTW9kYWwudGl0bGUiOiLQn9GA0LjQutGA0LXQv9C40YLRjCDQvtGI0LjQsdC60YMiLCJMaW5rSXNzdWVNb2RhbC51cmxIaW50Ijoi0KHRgdGL0LvQutCwINC00L7Qu9C20L3QsCDRgdC+0L7RgtCy0LXRgtGB0YLQstC+0LLQsNGC0Ywg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L7QvNGDINCw0LTRgNC10YHRgyDQstC10LEt0YHQsNC50YLQsCIsIkxvY2FsaXphdGlvbkJsb2NrLmJlbGFydXNpYW4iOiLQkdC10LvQvtGA0YPRgdGB0LrQuNC5IiwiTG9jYWxpemF0aW9uQmxvY2suY29udHJpYnV0ZSI6ItCg0YPRgdGB0LrQuNC5INGP0LfRi9C6INC90LDRhdC+0LTQuNGC0YHRjyDQsiDQsdC10YLQsC3QstC10YDRgdC40LguINCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9C+0LzQvtCz0LjRgtC1INC90LDQvCDRgSDQv9C10YDQtdCy0L7QtNC+0LwsINC+0YLQv9GA0LDQstGM0YLQtSDQktCw0Ygg0J/QoCDQsiA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZiA9J2h0dHBzOi8vZ2l0aHViLmNvbS9yZXBvcnRwb3J0YWwvc2VydmljZS11aS9ibG9iL3Y1L2FwcC9sb2NhbGl6YXRpb24vdHJhbnNsYXRlZC9ydS5qc29uJz7RhNCw0LnQuzwvYT4uIiwiTG9jYWxpemF0aW9uQmxvY2suZW5nbGlzaCI6IkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpIiwiTG9jYWxpemF0aW9uQmxvY2subGFiZWwiOiLQr9C30YvQuiIsIkxvY2FsaXphdGlvbkJsb2NrLm5vdGUiOiLQmiDRgdCy0LXQtNC10L3QuNGOIiwiTG9jYWxpemF0aW9uQmxvY2sucnVzc2lhbiI6ItCg0YPRgdGB0LrQuNC5IiwiTG9nSXRlbUFjdGl2aXR5LmNoYW5nZWRCeUFuYWx5emVyIjoi0JDQkCDQuNC30LzQtdC90LjQuyDRgtC40L8g0LTQtdGE0LXQutGC0LAiLCJMb2dJdGVtQWN0aXZpdHkuaXNzdWVMb2FkQnlBbmFseXplciI6IkFBINC/0YDQuNCy0Y/Qt9Cw0Lsg0L7RiNC40LHQutGDIiwiTG9nSXRlbUFjdGl2aXR5LmxpbmtJc3N1ZSI6ItC/0YDQuNCy0Y/Qt9Cw0Lsg0L7RiNC40LHQutGDIiwiTG9nSXRlbUFjdGl2aXR5Lm5vQWN0aXZpdGllcyI6ItCd0LXRgiDQtNC10LnRgdGC0LLQuNC5INC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPIiwiTG9nSXRlbUFjdGl2aXR5LnBvc3RJc3N1ZSI6ItC+0YLQv9GA0LDQstC40Lsg0L7RiNC40LHQutGDIiwiTG9nSXRlbUFjdGl2aXR5LnVubGlua0lzc3VlIjoi0L7RgtCy0Y/Qt9Cw0Lsg0L7RiNC40LHQutGDIiwiTG9nSXRlbUFjdGl2aXR5LnVwZGF0ZUl0ZW0iOiLQvtCx0L3QvtCy0LjQuyDRjdC70LXQvNC10L3RgiIsIkxvZ0l0ZW1BY3Rpdml0eS51cGRhdGVJdGVtSXNzdWUiOiLQvtCx0L3QvtCy0LjQuyDQtNCw0L3QvdGL0LUg0Y3Qu9C10LzQtdC90YLQsCIsIkxvZ0l0ZW1JbmZvLmJhc2VkT24iOiLQntGB0L3QvtCy0LDQvSDQvdCwIiwiTG9nSXRlbUluZm8uY29weURlZmVjdCI6ItCa0L7Qv9C40YDQvtCy0LDRgtGMINC00LXRhNC10LrRgiB7cHJlZml4fSB7bWVzc2FnZX0iLCJMb2dJdGVtSW5mby5mcm9tUHJlZml4Ijoi0L7RgiIsIkxvZ0l0ZW1JbmZvLmlnbm9yZUFBIjoi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0YDQuCDQkNCy0YLQvi3QkNC90LDQu9C40LfQtSIsIkxvZ0l0ZW1JbmZvLml0ZW0iOiLRjdC70LXQvNC10L3RgiIsIkxvZ0l0ZW1JbmZvLmxpbmtJc3N1ZSI6ItCf0YDQuNC60YDQtdC/0LjRgtGMINC+0YjQuNCx0LrRgyIsIkxvZ0l0ZW1JbmZvLm5vQnVnVHJhY2tpbmdTeXN0ZW1Ub0xpbmtJc3N1ZSI6ItCd0LDRgdGC0YDQvtC50YLQtSDQodC40YHRgtC10LzRgyDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0L7RiNC40LHQvtC6INC90LAg0LfQsNCz0YDRg9C30LrRgyDQvtGI0LjQsdC+0LoiLCJMb2dJdGVtSW5mby5ub0RlZmVjdFR5cGVUb0xpbmtJc3N1ZSI6ItCS0Ysg0L3QtSDQvNC+0LbQtdGC0LUg0L/RgNC40LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDLCDQtdGB0LvQuCDRjdC70LXQvNC10L3RgiDQvdC1INC40LzQtdC10YIg0LTQtdGE0LXQutGC0LAiLCJMb2dJdGVtSW5mby5wb3N0SXNzdWUiOiLQntGC0L/RgNCw0LLQuNGC0Ywg0L7RiNC40LHQutGDIiwiTG9nSXRlbUluZm8uc2VuZERlZmVjdCI6ItCe0YLQv9GA0LDQstC40YLRjCDQtNC10YTQtdC60YIg0LTQviB7bWVzc2FnZX0iLCJMb2dJdGVtSW5mb1RhYnMuYXR0YWNobWVudHNUYWIiOiLQktC70L7QttC10L3QuNGPIiwiTG9nSXRlbUluZm9UYWJzLmRldGFpbHNUYWIiOiLQntC/0LjRgdCw0L3QuNC1INGN0LvQtdC80LXQvdGC0LAiLCJMb2dJdGVtSW5mb1RhYnMuaGlzdG9yeVRhYiI6ItCY0YHRgtC+0YDQuNGPINC00LXQudGB0YLQstC40LkiLCJMb2dJdGVtSW5mb1RhYnMucGFyYW1ldGVyc1RhYiI6ItCf0LDRgNCw0LzQtdGC0YDRiyIsIkxvZ0l0ZW1JbmZvVGFicy5zdGFja1RhYiI6ItCi0YDQsNGB0YHQuNGA0L7QstC60LAg0YHRgtC10LrQsCIsIkxvZ01lc3NhZ2VTZWFyY2guc2VhcmNoSGludCI6ItCf0L4g0LrRgNCw0LnQvdC10Lkg0LzQtdGA0LUgMyDRgdC40LzQstC+0LvQsCDRgtGA0LXQsdGD0LXRgtGB0Y8uIiwiTG9nTWVzc2FnZVNlYXJjaC5zZWFyY2hUaXRsZSI6ItCh0L7QtNC10YDQttCw0L3QuNC1INC70L7Qs9CwIiwiTG9naW5CbG9jay5sb2dpbiI6ItCy0L7QudC00LjRgtC1INCyINCy0LDRiNGDINGD0YfQtdGC0L3Rg9GOINC30LDQv9C40YHRjCIsIkxvZ2luQmxvY2sud2VsY29tZSI6ItCU0L7QsdGA0L4g0L/QvtC20LDQu9C+0LLQsNGC0YwsIiwiTG9naW5Gb3JtLmZvcmdvdFBhc3MiOiLQl9Cw0LHRi9C70Lgg0L/QsNGA0L7Qu9GMPyIsIkxvZ2luRm9ybS5sb2dpbiI6ItCS0L7QudGC0LgiLCJMb2dpbkZvcm0ubG9naW5QbGFjZWhvbGRlciI6ItCb0L7Qs9C40L0iLCJMb2dpbkZvcm0ub3IiOiLQuNC70LgiLCJMb2dpbkZvcm0ucGFzc3dvcmRQbGFjZWhvbGRlciI6ItCf0LDRgNC+0LvRjCIsIkxvZ3NHcmlkLm5vUmVzdWx0cyI6Ik5vIHJlc3VsdHMgZm91bmQiLCJMb2dzR3JpZC50aW1lQ29sdW1uVGl0bGUiOiLQktGA0LXQvNGPIiwiTG9nc0dyaWRUb29sYmFyLmNvbnNvbGVWaWV3Ijoi0JrQvtC90YHQvtC70YzQvdGL0Lkg0LLQuNC0IiwiTG9nc0dyaWRUb29sYmFyLm1hcmtkb3duTW9kZSI6ItCg0LXQttC40Lwg0YDQsNC30LzQtdGC0LrQuCIsIkxvZ3NHcmlkVG9vbGJhci5uZXh0RXJyb3IiOiLQodC70LXQtNGD0Y7RidCw0Y8g0L7RiNC40LHQutCwIiwiTG9nc0dyaWRUb29sYmFyLndpdGhBdHRhY2htZW50cyI6ItCb0L7Qs9C4INGBINCy0LvQvtC20LXQvdC40Y/QvNC4IiwiTWFya2Rvd25FZGl0b3IuYm9sZCI6ItCW0LjRgNC90L7QtSDQvdCw0YfQtdGA0YLQsNC90LjQtSIsIk1hcmtkb3duRWRpdG9yLmNsZWFuQmxvY2siOiLQntGH0LjRgdGC0LjRgtGMINCx0LvQvtC6IiwiTWFya2Rvd25FZGl0b3IuY29kZSI6ItCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC0IiwiTWFya2Rvd25FZGl0b3IuaGVhZGluZzEiOiLQkdC+0LvRjNGI0L7QuSDQt9Cw0LPQvtC70L7QstC+0LoiLCJNYXJrZG93bkVkaXRvci5oZWFkaW5nMiI6ItCh0YDQtdC00L3QuNC5INC30LDQs9C+0LvQvtCy0L7QuiIsIk1hcmtkb3duRWRpdG9yLmhlYWRpbmczIjoi0JzQsNC70LXQvdGM0LrQuNC5INC30LDQs9C+0LvQvtCy0L7QuiIsIk1hcmtkb3duRWRpdG9yLmltYWdlIjoi0JTQvtCx0LDQstC40YLRjCDQuNC30L7QsdGA0LDQttC10L3QuNC1IiwiTWFya2Rvd25FZGl0b3IuaXRhbGljIjoi0JrRg9GA0YHQuNCyIiwiTWFya2Rvd25FZGl0b3IubGluayI6ItCh0L7Qt9C00LDRgtGMINGB0YHRi9C70LrRgyIsIk1hcmtkb3duRWRpdG9yLm9yZGVyZWRMaXN0Ijoi0J3Rg9C80LXRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsIk1hcmtkb3duRWRpdG9yLnByZXZpZXciOiLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsIk1hcmtkb3duRWRpdG9yLnF1b3RlIjoi0KbQuNGC0LDRgtCwIiwiTWFya2Rvd25FZGl0b3Iuc3RyaWtldGhyb3VnaCI6ItCf0LXRgNC10YfQtdGA0LrQvdGD0YLRjCIsIk1hcmtkb3duRWRpdG9yLnVub3JkZXJlZExpc3QiOiLQnNCw0YDQutC40YDQvtCy0LDQvdC90YvQuSDRgdC/0LjRgdC+0LoiLCJNZW1iZXJzR3JpZC5hY3Rpb25Db2wiOiLQlNC10LnRgdGC0LLQuNC1IiwiTWVtYmVyc0dyaWQuZGVsZXRlQ29sIjoi0KPQtNCw0LvQuNGC0YwiLCJNZW1iZXJzR3JpZC5kaXNwbGF5Q29sIjoi0J7RgtC+0LHRgNCw0LfQuNGC0Ywg0L3QsCDQt9Cw0L/Rg9GB0LrQsNGFIiwiTWVtYmVyc0dyaWQubGFzdExvZ2luQ29sIjoi0J/QvtGB0LvQtdC00L3QuNC5INCy0YXQvtC0IiwiTWVtYmVyc0dyaWQubmFtZUNvbCI6ItCY0LzRjyAvINCb0L7Qs9C40L0iLCJNZW1iZXJzR3JpZC5vcHRpb25zQ29sIjoi0J7Qv9GG0LjQuCIsIk1lbWJlcnNHcmlkLm93bmVyQ29sIjoi0JLQu9Cw0LTQtdC70LXRhiIsIk1lbWJlcnNHcmlkLnJvbGVDb2wiOiLQn9GA0L7QtdC60YLQvdCw0Y8g0YDQvtC70YwiLCJNZW1iZXJzR3JpZC5zaGFyZWRDb2wiOiLQn9C+0LTQtdC70LjRgtGM0YHRjyIsIk1lbWJlcnNQYWdlLmludml0ZUV4dGVybmFsTWVtYmVyIjoi0J/RgNC40LPQu9Cw0YjQtdC90LjQtSDRg9GH0LDRgdGC0L3QuNC60LAg0LHRi9C70L4g0YPRgdC/0LXRiNC90L4g0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC90L4uINCf0L7QtNGC0LLQtdGA0LbQtNCw0Y7RidCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0LHRg9C00LXRgiDQvtGC0L/RgNCw0LLQu9C10L3QsCDQvdCwINC/0YDQtdC00L7RgdGC0LDQstC70LXQvdC90YvQuSDRjdC70LXQutGC0YDQvtC90L3Ri9C5INCw0LTRgNC10YEuINCh0YDQvtC6INC00LXQudGB0YLQstC40Y86IDEg0LTQtdC90YwuIiwiTWVtYmVyc1BhZ2UubWVtYmVyV2FzSW52aXRlZCI6ItCj0YfQsNGB0YLQvdC40LogJzxiPntuYW1lfTwvYj4nINC90LDQt9C90LDRh9C10L0g0L3QsCDQv9GA0L7QtdC60YIiLCJNZW1iZXJzUGFnZS5ub3RGb3VuZCI6Ik5vIG1lbWJlcnMgZm91bmQgZm9yICd7ZmlsdGVyfSciLCJNZW1iZXJzUGFnZS50aXRsZSI6ItCj0YfQsNGB0YLQvdC40LrQuCDQv9GA0L7QtdC60YLQsCIsIk1lbWJlcnNQYWdlVG9vbGJhci5pbnZpdGVVc2VyIjoi0J/RgNC40LPQu9Cw0YHQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIiwiTWVtYmVyc1BhZ2VUb29sYmFyLnBlcm1pc3Npb25NYXAiOiLQmtCw0YDRgtCwINC/0YDQsNCyIiwiTWVtYmVyc1BhZ2VUb29sYmFyLnNlYXJjaEJ5TmFtZSI6ItCY0YHQutCw0YLRjCDQv9C+INC40LzQtdC90LgiLCJNZXJnZUxhdW5jaERpYWxvZy5NZXJnZUxhdW5jaEhlYWRlciI6ItCe0LHRitC10LTQuNC90LjRgtGMINC30LDQv9GD0YHQutC4IiwiTWVyZ2VMYXVuY2hEaWFsb2cuZXh0ZW5kU3VpdGVzRGVzY3JpcHRpb25UZXh0Ijoi0JTQvtC/0L7Qu9C90LjRgtGMINC+0L/QuNGB0LDQvdC40LUg0LTQvtGH0LXRgNC90LjRhSDQvdCw0LHQvtGA0L7QsiDQvdCw0LfQstCw0L3QuNC10Lwg0L7RgNC40LPQuNC90LDQu9GM0L3QvtCz0L4g0LfQsNC/0YPRgdC60LAgKNC90LDQv9GALiBA0LfQsNC/0YPRgdC6ICfQl9Cw0L/Rg9GB0Log4oSWMScpIiwiTWVyZ2VMYXVuY2hEaWFsb2cubGF1bmNoQXR0cmlidXRlc0xhYmVsIjoi0JDRgtGA0LjQsdGD0YLRiyIsIk1lcmdlTGF1bmNoRGlhbG9nLmxhdW5jaERlc2NyaXB0aW9uTGFiZWwiOiLQntC/0LjRgdCw0L3QuNC1IiwiTWVyZ2VMYXVuY2hEaWFsb2cubGF1bmNoSW5mb0hlYWRpbmciOiLQktGB0LUg0LLRi9Cx0YDQsNC90L3Ri9C1INC30LDQv9GD0YHQutC4INCx0YPQtNGD0YIg0L7QsdGK0LXQtNC40L3QtdC90Ysg0LIg0L7QtNC40L0iLCJNZXJnZUxhdW5jaERpYWxvZy5sYXVuY2hOYW1lTGFiZWwiOiLQmNC80Y8g0LfQsNC/0YPRgdC60LAiLCJNZXJnZUxhdW5jaERpYWxvZy5sYXVuY2hOYW1lUGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDQuNC80Y8g0LfQsNC/0YPRgdC60LAiLCJNZXJnZUxhdW5jaERpYWxvZy5sYXVuY2hPd25lckxhYmVsIjoi0JLQu9Cw0LTQtdC70LXRhiIsIk1lcmdlTGF1bmNoRGlhbG9nLmxhdW5jaFRpbWVMYWJlbCI6ItCS0YDQtdC80Y8g0KHRgtCw0YDRgtCwL9Ce0LrQvtC90YfQsNC90LjRjyIsIk1lcmdlTGF1bmNoRGlhbG9nLm1lcmdlVHlwZURlZXAiOiLQn9C+0LvQvdC+0LUg0L7QsdGK0LXQtNC40L3QtdC90LjQtSIsIk1lcmdlTGF1bmNoRGlhbG9nLm1lcmdlVHlwZUhlYWRpbmciOiLQktGL0LHQtdGA0LjRgtC1INGC0LjQvyDQvtCx0YrQtdC00LjQvdC10L3QuNGPIiwiTWVyZ2VMYXVuY2hEaWFsb2cubWVyZ2VUeXBlTGluZWFyIjoi0JvQuNC90LXQudC90L7QtSDQvtCx0YrQtdC00LjQvdC10L3QuNC1IiwiTWV0aG9kVHlwZXMuYWZ0ZXJDbGFzcyI6ItCf0L7RgdGCLdC60LvQsNGB0YEiLCJNZXRob2RUeXBlcy5hZnRlckdyb3VwcyI6ItCf0L7RgdGCLdCz0YDRg9C/0L/RiyIsIk1ldGhvZFR5cGVzLmFmdGVyTWV0aG9kIjoi0J/QvtGB0YIt0LzQtdGC0L7QtCIsIk1ldGhvZFR5cGVzLmFmdGVyU3VpdGUiOiLQn9C+0YHRgi3QvdCw0LHQvtGAIiwiTWV0aG9kVHlwZXMuYWZ0ZXJUZXN0Ijoi0J/QvtGB0YIt0YLQtdGB0YIiLCJNZXRob2RUeXBlcy5iZWZvcmVDbGFzcyI6ItCf0YDQtdC0LdC60LvQsNGB0YEiLCJNZXRob2RUeXBlcy5iZWZvcmVHcm91cHMiOiLQn9GA0LXQtC3Qs9GA0YPQv9C/0YsiLCJNZXRob2RUeXBlcy5iZWZvcmVNZXRob2QiOiLQn9GA0LUt0LzQtdGC0L7QtCIsIk1ldGhvZFR5cGVzLmJlZm9yZVN1aXRlIjoi0J/RgNC10LQt0L3QsNCx0L7RgCIsIk1ldGhvZFR5cGVzLmJlZm9yZVRlc3QiOiLQn9GA0LXQtC3RgtC10YHRgiIsIk1ldGhvZFR5cGVzLnN0ZXAiOiLQotC10YHRgiIsIk1ldGhvZFR5cGVzLnRlc3QiOiLQotC10YHRgtC+0LLRi9C5INC60LvQsNGB0YEiLCJNb3N0RmFpbGVkVGVzdENhc2VzVGFibGVDb250cm9scy5Dcml0ZXJpYUZpZWxkTGFiZWwiOiJDcml0ZXJpYSBmb3Igd2lkZ2V0IiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuSW5jbHVkZU1ldGhvZHNDb250cm9sVGV4dCI6IkluY2x1ZGUgQmVmb3JlIGFuZCBBZnRlciBtZXRob2RzIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiTGF1bmNoZXMgY291bnQiLCJNb3N0RmFpbGVkVGVzdENhc2VzVGFibGVDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMiB0byAxNTAiLCJNb3N0RmFpbGVkVGVzdENhc2VzVGFibGVDb250cm9scy5MYXVuY2hOYW1lRmllbGRMYWJlbCI6IkxhdW5jaCBuYW1lIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZUZvY3VzUGxhY2Vob2xkZXIiOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQuIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZU5vTWF0Y2hlcyI6Ik5vIG1hdGNoZXMgZm91bmQuIiwiTW9zdEZhaWxlZFRlc3RDYXNlc1RhYmxlQ29udHJvbHMuTGF1bmNoTmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgbGF1bmNoIG5hbWUiLCJNb3N0RmFpbGVkVGVzdENhc2VzVGFibGVDb250cm9scy5MYXVuY2hOYW1lc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIk1vc3RGYWlsZWRUZXN0cy5oZWFkZXIuaXNzdWVUeXBlLmF1dG9tYXRpb25fYnVnIjoi0J7RiNC40LHQutCwINGC0LXRgdGC0LAiLCJNb3N0RmFpbGVkVGVzdHMuaGVhZGVyLmlzc3VlVHlwZS5mYWlsZWQiOiLQndC10YPQtNCw0YfQvdC+IiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUubm9fZGVmZWN0Ijoi0JHQtdC3INCU0LXRhNC10LrRgtC+0LIiLCJNb3N0RmFpbGVkVGVzdHMuaGVhZGVyLmlzc3VlVHlwZS5wcm9kdWN0X2J1ZyI6ItCU0LXRhNC10LrRgiDQn9GA0L7QtNGD0LrRgtCwIiwiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUuc2tpcHBlZCI6ItCf0YDQvtC/0YPRidC10L3QviIsIk1vc3RGYWlsZWRUZXN0cy5oZWFkZXIuaXNzdWVUeXBlLnN5c3RlbV9pc3N1ZSI6ItCh0LjRgdGC0LXQvNC90LDRjyDQvtGI0LjQsdC60LAiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLmlzc3Vlc0luRXhlYyI6ItCe0YjQuNCx0L7QuiDQsiDQt9Cw0L/Rg9GB0LrQtSIsIk1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIuaXNzdWVzSW5FeGVjU2hvcnQiOiLQntGI0LjQsdC+0LoiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLmxhc3RJc3N1ZSI6ItCf0L7RgdC70LXQtNC90Y/RjyDQvtGI0LjQsdC60LAiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLm9mSXNzdWVzIjoiJSDQvtGI0LjQsdC+0LoiLCJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLm9mSXNzdWVzU2hvcnQiOiIlINC+0YjQsSIsIk1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIudGVzdENhc2UiOiLQotC10YHRgtC+0LLRi9C5INGB0YbQtdC90LDRgNC40LkiLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkNvbnRlbnRGaWVsZHNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkNyaXRlcmlhRmllbGRMYWJlbCI6IkNyaXRlcmlhIGZvciB3aWRnZXQiLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkluY2x1ZGVNZXRob2RzQ29udHJvbFRleHQiOiJJbmNsdWRlIEJlZm9yZSBhbmQgQWZ0ZXIgbWV0aG9kcyIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiTGF1bmNoZXMgY291bnQiLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkxhdW5jaE5hbWVGaWVsZExhYmVsIjoiTGF1bmNoIG5hbWUiLCJNb3N0VGltZUNvbnN1bWluZ1Rlc3RDYXNlc0NvbnRyb2xzLkxhdW5jaE5hbWVGb2N1c1BsYWNlaG9sZGVyIjoiQXQgbGVhc3QgMyBzeW1ib2xzIHJlcXVpcmVkLiIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuTGF1bmNoTmFtZU5vTWF0Y2hlcyI6Ik5vIG1hdGNoZXMgZm91bmQuIiwiTW9zdFRpbWVDb25zdW1pbmdUZXN0Q2FzZXNDb250cm9scy5MYXVuY2hOYW1lUGxhY2Vob2xkZXIiOiJFbnRlciBsYXVuY2ggbmFtZSIsIk1vc3RUaW1lQ29uc3VtaW5nVGVzdENhc2VzQ29udHJvbHMuTGF1bmNoTmFtZXNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJNb3ZlVG9EZWJ1Z01vZGFsLm1vdmVUb0FsbEZhaWxlZE1lc3NhZ2UiOiLQndC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC30LDQv9GD0YHQuiDQutC+INCS0YHQtdC8INC30LDQv9GD0YHQutCw0Lw6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsSGVhZGVyIjoi0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQstC+INCy0YHQtSDQt9Cw0L/Rg9GB0LrQuCIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsTXVsdGlwbGVGYWlsZWRNZXNzYWdlIjoi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQt9Cw0L/Rg9GB0LrQuCDQutC+INCS0YHQtdC8INC30LDQv9GD0YHQutCw0Lw6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsTXVsdGlwbGVTdWNjZXNzTWVzc2FnZSI6ItCX0LDQv9GD0YHQutC4INGD0YHQv9C10YjQvdC+INC/0LXRgNC10LzQtdGJ0ZHQvdGLINC60L4g0JLRgdC10Lwg0LfQsNC/0YPRgdC60LDQvCIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvQWxsTXVsdGlwbGVUZXh0Ijoi0JLRiyDRhdC+0YLQuNGC0LUg0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQuNC30LHRgNCw0L3QvdGL0LUg0LfQsNC/0YPRgdC60Lgg0LLQviDQktGB0LUg0LfQsNC/0YPRgdC60Lg/IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9BbGxTdWNjZXNzTWVzc2FnZSI6ItCX0LDQv9GD0YHQuiDRg9GB0L/QtdGI0L3QviDQv9C10YDQtdC80LXRidGR0L0g0LIg0LrQviDQktGB0LXQvCDQt9Cw0L/Rg9GB0LrQsNC8IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9BbGxUZXh0Ijoi0JLRiyDRhdC+0YLQuNGC0LUg0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQt9Cw0L/Rg9GB0Log0LLQviDQktGB0LUg0LfQsNC/0YPRgdC60Lg/IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9EZWJ1ZyI6ItCS0Ysg0YXQvtGC0LjRgtC1INC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LfQsNC/0YPRgdC6INCyINCe0YLQu9Cw0LTQutGDPyIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdGYWlsZWRNZXNzYWdlIjoi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQt9Cw0L/Rg9GB0Log0LIg0J7RgtC70LDQtNC60YM6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdIZWFkZXIiOiLQn9C10YDQtdC80LXRgdGC0LjRgtGMINCyINC+0YLQu9Cw0LTQutGDIiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9EZWJ1Z011bHRpcGxlIjoi0JLRiyDRhdC+0YLQuNGC0LUg0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQstGL0LHRgNCw0L3QvdGL0LUg0LfQsNC/0YPRgdC60Lgg0LIg0J7RgtC70LDQtNC60YM/IiwiTW92ZVRvRGVidWdNb2RhbC5tb3ZlVG9EZWJ1Z011bHRpcGxlRmFpbGVkTWVzc2FnZSI6ItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LfQsNC/0YPRgdC60Lgg0LIg0J7RgtC70LDQtNC60YM6IHttZXNzYWdlfSIsIk1vdmVUb0RlYnVnTW9kYWwubW92ZVRvRGVidWdNdWx0aXBsZVN1Y2Nlc3NNZXNzYWdlIjoi0JfQsNC/0YPRgdC60Lgg0YPRgdC/0LXRiNC90L4g0L/QtdGA0LXQvNC10YnRkdC90Ysg0LIg0J7RgtC70LDQtNC60YMiLCJNb3ZlVG9EZWJ1Z01vZGFsLm1vdmVUb0RlYnVnU3VjY2Vzc01lc3NhZ2UiOiLQl9Cw0L/Rg9GB0Log0YPRgdC/0LXRiNC90L4g0L/QtdGA0LXQvNC10YnRkdC9INCyINCe0YLQu9Cw0LTQutGDIiwiTmFtZUNvbHVtbi5hZG1pbkxhYmVsIjoi0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAiLCJOYW1lQ29sdW1uLmNoYW5nZUFjY291bnRSb2xlTm90aWZpY2F0aW9uIjoi0KDQvtC70Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC00LvRjyAne25hbWV9JyDQuNC30LzQtdC90LXQvdCwIiwiTmFtZUNvbHVtbi5tYWtlQWRtaW5MYWJlbCI6ItGB0LTQtdC70LDRgtGMINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7QvCIsIk5hbWVDb2x1bW4ueW91TGFiZWwiOiLQstGLIiwiTmV3c0Jsb2NrLnR3aXR0ZXJUaXRsZSI6ItCe0LfQvdCw0LrQvtC80YzRgtC10YHRjCDRgSDQvdCw0YjQuNC80Lgg0L/QvtGB0LvQtdC00L3QuNC80Lgg0YLQstC40YLQsNC80LgiLCJOb0RhdGFBdmFpbGFibGUubm9EYXRhTWVzc2FnZSI6Ik5vIGRhdGEgYXZhaWxhYmxlLiIsIk5vRmlsdGVyc0Jsb2NrLkJ1dHRvbiI6ItCU0L7QsdCw0LLQuNGC0Ywg0YTQuNC70YzRgtGAIiwiTm9GaWx0ZXJzQmxvY2subGluayI6ItCh0YLRgNCw0L3QuNGG0LUg0LfQsNC/0YPRgdC60L7QsiIsIk5vRmlsdGVyc0Jsb2NrLm1lc3NhZ2UiOiLQktGLINC80L7QttC10YLQtSDRgdC+0LfQtNCw0YLRjCDRgdCy0L7QuSDQv9C10YDQstGL0Lkg0YTQuNC70YzRgtGAINC90LAgIiwiTm9GaWx0ZXJzQmxvY2sub3IiOiLQmNC70LgiLCJOb0ZpbHRlcnNCbG9jay50aXRsZSI6ItCjINCS0LDRgSDQvdC10YIg0YTQuNC70YzRgtGA0L7QsiIsIk5vUmVzdWx0c0ZvckZpbHRlci5jaGVja1F1ZXJ5IjoiQ2hlY2sgeW91ciBxdWVyeSBhbmQgdHJ5IGFnYWluIiwiTm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5ub25QYXNzZWRDYXNlcyI6ItC90LXQv9GA0L7RiNC10LTRiNC40YUg0YHRhtC10L3QsNGA0LjQtdCyIiwiTm90UGFzc2VkVGVzdENhc2VzVHJlbmRDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIk5vdFBhc3NlZFRlc3RDYXNlc1RyZW5kQ29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTUwIiwiTm90aWZpY2F0aW9uLmZhaWx1cmVEZWZhdWx0Ijoi0JLQviDQstGA0LXQvNGPINGB0L7QtdC00LjQvdC10L3QuNGPINGBINGB0LXRgNCy0LXRgNC+0Lwg0LLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LA6IHtlcnJvcn0iLCJOb3RpZmljYXRpb24uaW5mb0xvZ291dCI6ItCS0Ysg0LLRi9GI0LvQuCIsIk5vdGlmaWNhdGlvbi5zdWNjZXNzTG9naW4iOiLQo9GB0L/QtdGI0L3Ri9C5INCy0YXQvtC0IiwiTm90aWZpY2F0aW9uQ2FzZS5hdHRyaWJ1dGVzTGFiZWwiOiLQkNGC0YDQuNCx0YPRgtGLICjQuCkiLCJOb3RpZmljYXRpb25DYXNlLmF0dHJpYnV0ZXNOb3RlIjoi0J7RgtC/0YDQsNCy0LvRj9GC0Ywg0YPQstC10LTQvtC80LvQtdC90LjRjyDQviDQt9Cw0L/Rg9GB0LrQsNGFLCDRgdC+0LTQtdGA0LbQsNGJ0LjRhSDQvtCx0L7Qt9C90LDRh9C10L3QvdGL0LUg0LDRgtGA0LjQsdGD0YLRiyIsIk5vdGlmaWNhdGlvbkNhc2UuY29udHJvbFBhbmVsTmFtZSI6ItCf0YDQsNCy0LjQu9C+IiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlQWx3YXlzIjoi0JLRgdC10LPQtNCwIiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlRmFpbGVkIjoi0JfQsNC/0YPRgdC6INGB0L7QtNC10YDQttC40YIg0L7RiNC40LHQutC4IiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlTW9yZTEwIjoiPiAxMCUg0Y3Qu9C10LzQtdC90YLQvtCyINGB0L7QtNC10YDQttCw0YIg0L7RiNC40LHQutC4IiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlTW9yZTIwIjoiPiAyMCUg0Y3Qu9C10LzQtdC90YLQvtCyINGB0L7QtNC10YDQttCw0YIg0L7RiNC40LHQutC4IiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlTW9yZTUwIjoiPiA1MCUg0Y3Qu9C10LzQtdC90YLQvtCyINGB0L7QtNC10YDQttCw0YIg0L7RiNC40LHQutC4IiwiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlVG9JbnZlc3RpZ2F0ZSI6ItCX0LDQv9GD0YHQuiDQuNC80LXQtdGCINGN0LvQtdC80LXQvdGC0Ysg0YLRgNC10LHRg9GO0YnQuNC1INCw0L3QsNC70LjQt9CwIiwiTm90aWZpY2F0aW9uQ2FzZS5kdXBsaWNhdGlvbkVycm9yTWVzc2FnZSI6ItCi0LDQutC+0LUg0L/RgNCw0LLQuNC70L4g0L7Qv9C+0YnQtdGJ0LXQvdC40Lkg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQndC10LvRjNC30Y8g0YHQvtC30LTQsNGC0Ywg0YLQsNC60L7QtSDQttC1LiIsIk5vdGlmaWNhdGlvbkNhc2UuaW5DYXNlTGFiZWwiOiLQkiDRgdC70YPRh9Cw0LUiLCJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE5hbWVzSGludCI6ItCf0L4g0LrRgNCw0LnQvdC10Lkg0LzQtdGA0LUgMyDRgdC40LzQstC+0LvQsCDRgtGA0LXQsdGD0LXRgtGB0Y8g0LTQu9GPINCw0LLRgtC+0LfQsNC/0L7Qu9C90LXQvdC40Y8uIiwiTm90aWZpY2F0aW9uQ2FzZS5sYXVuY2hOYW1lc0xhYmVsIjoi0JjQvNC10L3QsCDQt9Cw0L/Rg9GB0LrQvtCyICjQuCkiLCJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE5hbWVzTm90ZSI6ItCe0YLQv9GA0LDQstC70Y/RgtGMINC/0L7Rh9GC0L7QstGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjyDQviDQt9Cw0LLQtdGA0YjQtdC90LjQuCDQstGL0LHRgNCw0L3QvdGL0YUg0LfQsNC/0YPRgdC60L7QsiIsIk5vdGlmaWNhdGlvbkNhc2UubGF1bmNoTmFtZXNQbGFjZWhvbGRlciI6ItCS0YvQsdGA0LDRgtGMINC40LzQtdC90LAg0LfQsNC/0YPRgdC60LAiLCJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE93bmVyTGFiZWwiOiLQktC70LDQtNC10LvQtdGGINC30LDQv9GD0YHQutCwICjQutGC0L4g0LfQsNC/0YPRgdC60LDQuywg0YLQvtGCINC/0L7Qu9GD0YfQuNC7KSIsIk5vdGlmaWNhdGlvbkNhc2UucmVjaXBpZW50c0hpbnQiOiLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0L/RgNCw0LLQuNC70YzQvdGL0Lkg0Y3Qu9C10LrRgtGA0L7QvdC90YvQuSDQsNC00YDQtdGBIiwiTm90aWZpY2F0aW9uQ2FzZS5yZWNpcGllbnRzTGFiZWwiOiLQn9C+0LvRg9GH0LDRgtC10LvQuCIsIk5vdGlmaWNhdGlvbkNhc2UucmVjaXBpZW50c1BsYWNlaG9sZGVyIjoi0JLRi9Cx0LXRgNC40YLQtSDRg9GH0LDRgdGC0L3QuNC60L7QsiDQutC+0LzQsNC90LTRiyIsIk5vdGlmaWNhdGlvbkNhc2VMaXN0LmFkZE5ld1J1bGVCdXR0b24iOiLQlNC+0LHQsNCy0LjRgtGMINC90L7QstC+0LUg0L/RgNCw0LLQuNC70L4iLCJOb3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnMiOiLQo9Cy0LXQtNC+0LzQu9C10L3QuNGPINC/0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtC1IiwiTm90aWZpY2F0aW9ucy5vZmZFbWFpbCI6ItCy0YvQutC70Y7Rh9C40LsiLCJOb3RpZmljYXRpb25zLm9uRW1haWwiOiLRgdC60L7QvdGE0LjQs9GD0YDQuNGA0L7QstCw0LsiLCJOb3RpZmljYXRpb25zLnVwZGF0ZUVtYWlsIjoi0L7QsdC90L7QstC40LsiLCJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50b2dnbGVOb3RpZmljYXRpb25zTGFiZWwiOiLQntC/0L7QstC10YnQtdC90LjRjyDQv9C+INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLQtSIsIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnRvZ2dsZU5vdGlmaWNhdGlvbnNOb3RlIjoi0J7RgtC/0YDQsNCy0LvRj9GC0Ywg0L/QvtGH0YLQvtCy0YvQtSDQvtC/0L7QstC10YnQtdC90LjRjyDQviDQt9Cw0LLQtdGA0YjQtdC90L3Ri9GFINC30LDQv9GD0YHQutCw0YUiLCJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50dXJuT2ZmIjoi0JLRi9C60LsiLCJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50dXJuT24iOiLQktC60LsiLCJPdmVyYWxsU3RhdGlzdGljc0NvbnRyb2xzLkNvbnRlbnRGaWVsZHNWYWxpZGF0aW9uRXJyb3IiOiJZb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0iLCJPdmVyYWxsU3RhdGlzdGljc0NvbnRyb2xzLkNyaXRlcmlhRmllbGRMYWJlbCI6IkNyaXRlcmlhIGZvciB3aWRnZXQiLCJPdmVyYWxsU3RhdGlzdGljc0NvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiT3ZlcmFsbFN0YXRpc3RpY3NDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJPd25lckJsb2NrLm93bmVyVGl0bGUiOiLQktC70LDQtNC10LvQtdGGIiwiT3duZXJDb2x1bW4ub3duZXIiOiLQktC70LDQtNC10LvQtdGGOiIsIk93bmVyc0luZm8ubm9EYXRhTWVzc2FnZSI6ItCSINCy0YvQsdGA0LDQvdC90YvQuSDQv9C10YDQuNC+0LQg0L3QtSDQsdGL0LvQviDQstGL0L/QvtC70L3QtdC90L4g0L3QuCDQvtC00L3QvtCz0L4g0LfQsNC/0YPRgdC60LAiLCJQYWdlU2l6ZUNvbnRyb2wucGVyUGFnZSI6ItC90LAg0YHRgtGA0LDQvdC40YbQtSIsIlBhcmFtZXRlcnMua2V5SGVhZGVyIjoi0JrQu9GO0YciLCJQYXJhbWV0ZXJzLm5vUGFyYW1ldGVycyI6ItCd0LXRgiDQv9Cw0YDQsNC80LXRgtGA0L7QsiDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyIsIlBhcmFtZXRlcnMudmFsdWVIZWFkZXIiOiLQl9C90LDRh9C10L3QuNC1IiwiUGFzc2luZ1JhdGVQZXJMYXVuY2hDb250cm9scy5MYXVuY2hOYW1lRmllbGRMYWJlbCI6IkxhdW5jaCBuYW1lIiwiUGFzc2luZ1JhdGVQZXJMYXVuY2hDb250cm9scy5MYXVuY2hOYW1lRm9jdXNQbGFjZWhvbGRlciI6IkF0IGxlYXN0IDMgc3ltYm9scyByZXF1aXJlZC4iLCJQYXNzaW5nUmF0ZVBlckxhdW5jaENvbnRyb2xzLkxhdW5jaE5hbWVOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIlBhc3NpbmdSYXRlUGVyTGF1bmNoQ29udHJvbHMuTGF1bmNoTmFtZVBsYWNlaG9sZGVyIjoiRW50ZXIgbGF1bmNoIG5hbWUiLCJQYXNzaW5nUmF0ZVBlckxhdW5jaENvbnRyb2xzLkxhdW5jaE5hbWVzVmFsaWRhdGlvbkVycm9yIjoiWW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIiwiUGFzc2luZ1JhdGVTdW1tYXJ5Q29udHJvbHMuSXRlbXNGaWVsZExhYmVsIjoiSXRlbXMiLCJQYXNzaW5nUmF0ZVN1bW1hcnlDb250cm9scy5JdGVtc1ZhbGlkYXRpb25FcnJvciI6Ikl0ZW1zIGNvdW50IHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxNTAiLCJQZXJtaXNzaW9uTWFwLmFjdGlvbnNXaXRoSXRlbSI6ItCU0LXQudGB0YLQstC40Y8g0YEg0Y3Qu9C10LzQtdC90YLQvtC8ICjQuNC30LzQtdC90LjRgtGMLCDRg9C00LDQu9C40YLRjCkiLCJQZXJtaXNzaW9uTWFwLmFjdGlvbnNXaXRoTGF1bmNoIjoi0JTQtdC50YHRgtCy0LjRjyDRgSDQt9Cw0L/Rg9GB0LrQsNC80LggKNC40LfQvNC10L3QuNGC0YwsINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC30LDQstC10YDRiNC40YLRjCwg0L7QsdGK0LXQtNC40L3QuNGC0YwsINGD0LTQsNC70LjRgtGMKSIsIlBlcm1pc3Npb25NYXAuYWN0aW9uc1dpdGhNZW1iZXJzIjoi0JTQtdC50YHRgtCy0LjRjyDRgSDRg9GH0LDRgdGC0L3QuNC60LDQvNC4ICjQv9GA0LjQs9C70LDRgdC40YLRjCwg0L3QsNC30L3QsNGH0LjRgtGML9C+0YLQvNC10L3QuNGC0Ywg0L3QsNC30L3QsNGH0LXQvdC40LUsINC+0LHQvdC+0LLQuNGC0Ywg0YDQvtC70LgpIiwiUGVybWlzc2lvbk1hcC5hZG1pbiI6ItCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGAIiwiUGVybWlzc2lvbk1hcC5hdHRlbnRpb24iOiLQn9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0YEg0YDQvtC70YzRjiDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwINC80L7QttC10YIg0LLRi9C/0L7Qu9C90Y/RgtGMINCy0YHQtSDQvtC/0LXRgNCw0YbQuNC4LiIsIlBlcm1pc3Npb25NYXAuY3JlYXRlU2hhcmVJdGVtIjoi0KHQvtC30LTQsNGC0YwsINC/0L7QtNC10LvQuNGC0YzRgdGPINGN0LvQtdC80LXQvdGC0L7QvCIsIlBlcm1pc3Npb25NYXAuY3VzdG9tZXIiOiLQl9Cw0LrQsNC30YfQuNC6IiwiUGVybWlzc2lvbk1hcC5kZWxldGVTaGFyZWRJdGVtIjoi0KPQtNCw0LvQuNGC0Ywg0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdGL0Lkg0Y3Qu9C10LzQtdC90YIiLCJQZXJtaXNzaW9uTWFwLmVkaXRQcm9qZWN0U2V0dGluZ3MiOiLQmNC30LzQtdC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQv9GA0L7QtdC60YLQsCIsIlBlcm1pc3Npb25NYXAuZWRpdFNoYXJlZEl0ZW0iOiLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQvtCx0YnQtdC00L7RgdGC0YPQv9C90YvQuSDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAuaW52ZXN0aWdhdGlvbkFjdGlvbnMiOiLQlNC10LnRgdGC0LLQuNGPINGBINCw0L3QsNC70LjQt9C+0LwgKNGC0LjQv9GLINC00LXRhNC10LrRgtC+0LIg0Lgg0LLQvtC/0YDQvtGB0Ysg0LIg0YHQuNGB0YLQtdC80LUg0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINC+0YjQuNCx0L7QuikiLCJQZXJtaXNzaW9uTWFwLmxhdW5jaGVzIjoi0JfQsNC/0YPRgdC60LgiLCJQZXJtaXNzaW9uTWFwLm1hbmFnZXIiOiLQnNC10L3QtdC00LbQtdGAIiwiUGVybWlzc2lvbk1hcC5tYW51YWxBbmFseXNpc0V4cG9ydENvbXBhcmVJbXBvcnQiOiLQoNGD0YfQvdC+0Lkg0LDQvdCw0LvQuNC3LCDRjdC60YHQv9C+0YDRgiwg0YHRgNCw0LLQvdC10L3QuNC1LCDQuNC80L/QvtGA0YIg0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhSDQstC+0LfQvNC+0LbQvdC+0YHRgtC10LkiLCJQZXJtaXNzaW9uTWFwLm1lbWJlciI6ItCj0YfQsNGB0YLQvdC40LoiLCJQZXJtaXNzaW9uTWFwLm1vdmVMYXVuY2hUb0RlYnVnRGVmYXVsdCI6ItCf0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LfQsNC/0YPRgdC60Lgg0LIo0LjQtykg0L7RgtC70LDQtNC60YMo0LgpIiwiUGVybWlzc2lvbk1hcC5ub3RPd25MZWdlbmQiOiLQndC10YHQvtCx0YHRgtCy0LXQvdC90YvQuSDRjdC70LXQvNC10L3RgiDRgdC+0LfQtNCw0LXRgtGB0Y8g0LTRgNGD0LPQuNC8INC70LjRhtC+0LwiLCJQZXJtaXNzaW9uTWFwLm5vdE93blRpdGxlIjoi0J3QtdGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YIiLCJQZXJtaXNzaW9uTWFwLm9wZXJhdG9yIjoi0J7Qv9C10YDQsNGC0L7RgCIsIlBlcm1pc3Npb25NYXAub3duTGVnZW5kIjoi0KHQvtCx0YHRgtCy0LXQvdC90YvQuSDRjdC70LXQvNC10L3RgiDRgdC+0LfQtNCw0LXRgtGB0Y8g0YHQsNC80LjQvCDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQvCIsIlBlcm1pc3Npb25NYXAub3duVGl0bGUiOiLQodC+0LHRgdGC0LLQtdC90L3Ri9C5INGN0LvQtdC80LXQvdGCIiwiUGVybWlzc2lvbk1hcC5wcm9qZWN0TWFuYWdlbWVudCI6ItCj0L/RgNCw0LLQu9C10L3QuNC1INC/0YDQvtC10LrRgtC+0LwiLCJQZXJtaXNzaW9uTWFwLnByb2plY3RNZW1iZXJzIjoi0KPRh9Cw0YHRgtC90LjQutC4INC/0YDQvtC10LrRgtCwIiwiUGVybWlzc2lvbk1hcC5yZXBvcnRMYXVuY2giOiLQl9Cw0L/Rg9GB0YLQuNGC0Ywg0YLQtdGB0YLRiyIsIlBlcm1pc3Npb25NYXAucm9sZSI6ItCU0LXQudGB0YLQstC40LUgLyDQn9GA0L7QtdC60YLQvdCw0Y8g0YDQvtC70YwiLCJQZXJtaXNzaW9uTWFwLnN1aXRlVGVzdFRlc3RJdGVtIjoi0J3QsNCx0L7RgCAvINGC0LXRgdGCIC8g0YLQtdGB0YLQvtCy0YvQuSDRjdC70LXQvNC10L3RgiIsIlBlcm1pc3Npb25NYXAudmlld0luZm9BYm91dE1lbWJlcnMiOiLQktC40LTQtdGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDRg9GH0LDRgdGC0L3QuNC60LDRhSDQv9GA0L7QtdC60YLQsCIsIlBlcm1pc3Npb25NYXAudmlld0xhdW5jaEluRGVidWdNb2RlIjoi0JLQuNC00LXRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INC30LDQv9GD0YHQutCw0YUg0LIg0YDQtdC20LjQvNC1INC+0YLQu9Cw0LTQutC4IiwiUGVybWlzc2lvbk1hcC53aWRnZXRGaWx0ZXJEYXNoYm9hcmQiOiLQktC40LTQttC10YLRiyAvINGE0LjQu9GM0YLRgNGLIC8g0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIiwiUGVybWlzc2lvbk1hcE1vZGFsLmhlYWRlclBlcm1pc3Npb25NYXBNb2RhbCI6ItCa0LDRgNGC0LAg0L/RgNCw0LIiLCJQZXJzb25hbEluZm8ubWVtYmVyQWRtaW4iOiLQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCIsIlBlcnNvbmFsSW5mby5tZW1iZXJZb3UiOiLQktGLIiwiUGVyc29uYWxJbmZvQmxvY2suY2hhbmdlUGFzc3dvcmQiOiLQmNC30LzQtdC90LjRgtGMINC/0LDRgNC+0LvRjCIsIlBlcnNvbmFsSW5mb0Jsb2NrLmVycm9yQ2hhbmdlUGFzc3dvcmQiOiLQntGI0LjQsdC60LAhINCd0LUg0YPQtNCw0LXRgtGB0Y8g0LjQt9C80LXQvdC40YLRjCDQv9Cw0YDQvtC70YwiLCJQZXJzb25hbEluZm9CbG9jay5mb3JjZVVwZGF0ZSI6ItCe0LHQvdC+0LLQuNGC0Ywg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4iLCJQZXJzb25hbEluZm9CbG9jay5oZWFkZXIiOiLQn9C10YDRgdC+0L3QsNC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8iLCJQZXJzb25hbEluZm9CbG9jay5wYXNzd29yZENoYW5nZWQiOiLQktCw0Ygg0L/QsNGA0L7Qu9GMINGD0YHQv9C10YjQvdC+INC40LfQvNC10L3QtdC9IiwiUGVyc29uYWxJbmZvQmxvY2suc3luY2hyb25pemUiOiLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUg0YPRgdC/0LXRiNC90L4g0YHQuNC90YXRgNC+0L3QuNC30LjRgNC+0LLQsNC90LAiLCJQZXJzb25hbEluZm9CbG9jay5zeW5jaHJvbml6ZUVycm9yIjoi0J3QtSDRg9C00LDQtdGC0YHRjyDRgdC40L3RhdGA0L7QvdC40LfQuNGA0L7QstCw0YLRjCDQv9GA0L7RhNC40LvRjCEiLCJQaG90b0NvbnRyb2xzLmRlbGV0ZUVycm9yIjoi0KTQvtGC0L4g0L3QtSDQsdGL0LvQviDRg9C00LDQu9C10L3QviDRg9GB0L/QtdGI0L3QviIsIlBob3RvQ29udHJvbHMuaW52YWxpZEltYWdlIjoi0JLRiyDQvNC+0LbQtdGC0LUg0LfQsNCz0YDRg9C30LjRgtGMINGE0LDQudC7IGpwZWcsIHBuZywgZ2lmIGZpbGUsINC90LUg0LHQvtC70LXQtSAxINC80LXQs9Cw0LHQsNC50YLQsCDQuCAzMDB4NTAwINC/0LjQutGB0LXQu9C10LkiLCJQaG90b0NvbnRyb2xzLnJlbW92ZVBob3RvIjoi0KPQtNCw0LvQuNGC0Ywg0YTQvtGC0L4iLCJQaG90b0NvbnRyb2xzLnNhdmVQaG90byI6ItCh0L7RhdGA0LDQvdC40YLRjCDRhNC+0YLQviIsIlBob3RvQ29udHJvbHMuc3VibWl0VXBsb2FkIjoi0KTQvtGC0L4g0YPRgdC/0LXRiNC90L4g0LfQsNCz0YDRg9C20LXQvdC+IiwiUGhvdG9Db250cm9scy51cGxvYWRFcnJvciI6ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDRhNC+0YLQviIsIlBob3RvQ29udHJvbHMudXBsb2FkUGhvdG8iOiLQl9Cw0LPRgNGD0LfQuNGC0Ywg0YTQvtGC0L4iLCJQaG90b0NvbnRyb2xzLndhc0RlbGV0ZWQiOiLQpNC+0YLQviDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9C10L3QviIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5CYXNpY0NvbHVtbnNGaWVsZExhYmVsIjoiQmFzaWMgY29sdW1ucyIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5GaWx0ZXJzRmllbGRMYWJlbCI6IkZpbHRlcnMiLCJQcm9kdWN0U3RhdHVzQ29udHJvbHMuRmlsdGVyc0ZvY3VzUGxhY2Vob2xkZXIiOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQuIiwiUHJvZHVjdFN0YXR1c0NvbnRyb2xzLkZpbHRlcnNOb01hdGNoZXMiOiJObyBtYXRjaGVzIGZvdW5kLiIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5GaWx0ZXJzUGxhY2Vob2xkZXIiOiJFbnRlciBmaWx0ZXIgbmFtZXMiLCJQcm9kdWN0U3RhdHVzQ29udHJvbHMuRmlsdGVyc1ZhbGlkYXRpb25FcnJvciI6IllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbSIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5Hcm91cENvbnRyb2xUZXh0IjoiR3JvdXAgbGF1bmNoZXMgYnkgZmlsdGVyIiwiUHJvZHVjdFN0YXR1c0NvbnRyb2xzLlN0YXJ0VGltZUNyaXRlcmlhIjoiU3RhcnQgdGltZSIsIlByb2R1Y3RTdGF0dXNDb250cm9scy5TdGF0dXNDcml0ZXJpYSI6IlN0YXR1cyIsIlByb2ZpbGVQYWdlLnRpdGxlIjoi0J/RgNC+0YTQuNC70Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIiwiUHJvamVjdEFjdGl2aXR5LmFwcmlsIjoi0JDQv9GA0LXQu9GMIiwiUHJvamVjdEFjdGl2aXR5LmF1Z3VzdCI6ItCQ0LLQs9GD0YHRgiIsIlByb2plY3RBY3Rpdml0eS5kZWNlbWJlciI6ItCU0LXQutCw0LHRgNGMIiwiUHJvamVjdEFjdGl2aXR5LmZlYnJ1YXJ5Ijoi0KTQtdCy0YDQsNC70YwiLCJQcm9qZWN0QWN0aXZpdHkuZnJpZGF5Ijoi0J/Rj9GC0L3QuNGG0LAiLCJQcm9qZWN0QWN0aXZpdHkuamFudWFyeSI6ItCv0L3QstCw0YDRjCIsIlByb2plY3RBY3Rpdml0eS5qdWx5Ijoi0JjRjtC70YwiLCJQcm9qZWN0QWN0aXZpdHkuanVuZSI6ItCY0Y7QvdGMIiwiUHJvamVjdEFjdGl2aXR5Lm1hcmNoIjoi0JzQsNGA0YIiLCJQcm9qZWN0QWN0aXZpdHkubWF5Ijoi0JzQsNC5IiwiUHJvamVjdEFjdGl2aXR5Lm1vbmRheSI6ItCf0L7QvdC10LTQtdC70YzQvdC40LoiLCJQcm9qZWN0QWN0aXZpdHkubm92ZW1iZXIiOiLQndC+0Y/QsdGA0YwiLCJQcm9qZWN0QWN0aXZpdHkub2N0b2JlciI6ItCe0LrRgtGP0LHRgNGMIiwiUHJvamVjdEFjdGl2aXR5LnByb2plY3RQcm9wcyI6ItGB0LLQvtC50YHRgtCy0LAg0L/RgNC+0LXQutGC0LA6IiwiUHJvamVjdEFjdGl2aXR5LnNhdHVyZGF5Ijoi0KHRg9Cx0LHQvtGC0LAiLCJQcm9qZWN0QWN0aXZpdHkuc2VwdGVtYmVyIjoi0KHQtdC90YLRj9Cx0YDRjCIsIlByb2plY3RBY3Rpdml0eS5zdW5kYXkiOiLQktC+0YHQutGA0LXRgdC10L3RjNC1IiwiUHJvamVjdEFjdGl2aXR5LnRodXJzZGF5Ijoi0KfQtdGC0LLQtdGA0LMiLCJQcm9qZWN0QWN0aXZpdHkudG9kYXkiOiLQodC10LPQvtC00L3RjyIsIlByb2plY3RBY3Rpdml0eS50dWVzZGF5Ijoi0JLRgtC+0YDQvdC40LoiLCJQcm9qZWN0QWN0aXZpdHkudXBkYXRlUHJvamVjdCI6ItC+0LHQvdC+0LLQuNC7IiwiUHJvamVjdEFjdGl2aXR5LndlZG5lc2RheSI6ItCh0YDQtdC00LAiLCJQcm9qZWN0QWN0aXZpdHkueWVzdGVyZGF5Ijoi0JLRh9C10YDQsCIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLkFjdGlvblR5cGVzVmFsaWRhdGlvbkVycm9yIjoiWW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIiwiUHJvamVjdEFjdGl2aXR5Q29udHJvbHMuQ3JpdGVyaWFGaWVsZExhYmVsIjoiQ3JpdGVyaWEgZm9yIHdpZGdldCIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLkl0ZW1zRmllbGRMYWJlbCI6Ikl0ZW1zIiwiUHJvamVjdEFjdGl2aXR5Q29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTUwIiwiUHJvamVjdEFjdGl2aXR5Q29udHJvbHMuVXNlcm5hbWVDb250cm9sVGV4dCI6IlVzZXIgbmFtZSIsIlByb2plY3RBY3Rpdml0eUNvbnRyb2xzLlVzZXJzRm9jdXNQbGFjZWhvbGRlciI6IkF0IGxlYXN0IDMgc3ltYm9scyByZXF1aXJlZC4iLCJQcm9qZWN0QWN0aXZpdHlDb250cm9scy5Vc2Vyc05vTWF0Y2hlcyI6Ik5vIG1hdGNoZXMgZm91bmQuIiwiUHJvamVjdEFjdGl2aXR5Q29udHJvbHMuVXNlcnNQbGFjZWhvbGRlciI6IkVudGVyIHVzZXIgbmFtZSIsIlByb2plY3REZXRhaWxzUGFnZUV2ZW50cy50aXRsZSI6ItCh0L7QsdGL0YLQuNGPIiwiUHJvamVjdERldGFpbHNQYWdlTWVtYmVycy50aXRsZSI6ItCj0YfQsNGB0YLQvdC40LrQuCIsIlByb2plY3REZXRhaWxzUGFnZVNldHRpbmdzLnRpdGxlIjoi0J3QsNGB0YLRgNC+0LnQutC4IiwiUHJvamVjdFJvbGUuYWxsUGVybWlzc2lvbnMiOiLQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQuNC80LXQtdGCINCy0YHQtSDQv9GA0LjQstC40LvQtdCz0LjQuCDRgdC+0LPQu9Cw0YHQvdC+INC60LDRgNGC0LUg0L/RgNCw0LIiLCJQcm9qZWN0Um9sZS5tb2JpbGVUaXRsZSI6ItCf0YDQvtC10LrRgtC90LDRjyDRgNC+0LvRjCIsIlByb2plY3RSb2xlLnVwZGF0ZU1lbWJlciI6ItCj0YfQsNGB0YLQvdC40LogJzxiPntuYW1lfTwvYj4nINC+0LHQvdC+0LLQu9C10L0iLCJQcm9qZWN0U3RhdHVzUGFnZS5vbmVNb250aCI6IjEg0LzQtdGB0Y/RhiIsIlByb2plY3RTdGF0dXNQYWdlLnNpeE1vbnRocyI6IjYg0LzQtdGB0Y/RhtC10LIiLCJQcm9qZWN0U3RhdHVzUGFnZS50aHJlZU1vbnRocyI6IjMg0LzQtdGB0Y/RhtCwIiwiUHJvamVjdHNBbmRSb2xlc0NvbHVtbi5tb3JlIjoi0LXRidC1IiwiUHJvamVjdHNHcmlkLmxhc3RMYXVuY2hDb2wiOiLQlNCw0YLQsCDQv9C+0YHQu9C10LTQvdC10LPQviDQt9Cw0L/Rg9GB0LrQsCIsIlByb2plY3RzR3JpZC5sYXVuY2hlc0NvbCI6ItCX0LDQv9GD0YHQutC4IiwiUHJvamVjdHNHcmlkLm1lbWJlcnNDb2wiOiLQo9GH0LDRgdGC0L3QuNC60LgiLCJQcm9qZWN0c0dyaWQubmFtZUNvbCI6ItCd0LDQt9Cy0LDQvdC40LUiLCJQcm9qZWN0c0dyaWQub3JnYW5pemF0aW9uQ29sIjoi0J7RgNCz0LDQvdC40LfQsNGG0LjRjyIsIlByb2plY3RzR3JpZC5wcm9qZWN0VHlwZUNvbCI6ItCi0LjQvyDQv9GA0L7QtdC60YLQsCIsIlByb2plY3RzUGFnZS5hZGRQcm9qZWN0Ijoi0JTQvtCx0LDQstC40YLRjCDQn9GA0L7QtdC60YIiLCJQcm9qZWN0c1BhZ2UudGl0bGUiOiLQktGB0LUg0J/RgNC+0LXQutGC0YsiLCJQcm9qZWN0c1Rvb2xiYXIuZXhwb3J0Ijoi0K3QutGB0L/QvtGA0YLQuNGA0L7QstCw0YLRjCIsIlByb2plY3RzVG9vbGJhci5zZWFyY2hQbGFjZWhvbGRlciI6ItCf0L7QuNGB0LoiLCJSZWdlbmVyYXRlVXVpZE1vZGFsLmhlYWRlciI6ItCh0L7Qt9C00LDRgtGMINC90L7QstGL0LkgVVVJRCIsIlJlZ2VuZXJhdGVVdWlkTW9kYWwudGV4dCI6ItCS0YHQtSDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INCw0LPQtdC90YLRiyDRgdC+INGB0YLQsNGA0YvQvNC4IFVVSUQg0L3QtSDQsdGD0LTRg9GCINGA0LDQsdC+0YLQsNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7Qs9C+IiwiUmVnZW5lcmF0ZVV1aWRNb2RhbC53YXJuaW5nIjoi0JLQvdC40LzQsNC90LjQtSEiLCJSZWdpc3RyYXRpb25Gb3JtLmNvbmZpcm1QYXNzd29yZEhpbnQiOiLQn9Cw0YDQvtC70Lgg0L3QtSDRgdC+0LLQv9Cw0LTQsNGO0YIiLCJSZWdpc3RyYXRpb25Gb3JtLmxvZ2luQ29uc3RyYWludHMiOiIxLTEyOCDRgdC40LzQstC+0LvQvtCyLCDQu9Cw0YLQuNC90YHQutC40LUg0LHRg9C60LLRiywg0YbQuNGE0YDRiywg0LfQvdCw0LrQuDog0LTQtdGE0LjRgSwg0L3QuNC20L3QtdC1INC/0L7QtNGH0LXRgNC60LjQstCw0L3QuNC1IiwiUmVnaXN0cmF0aW9uRm9ybS5sb2dpbkhpbnQiOiLQm9C+0LPQuNC9INC00L7Qu9C20LXQvSDRgdC+0LTQtdGA0LbQsNGC0Ywg0L7RgiAxINC00L4gMTI4INGB0LjQvNCy0L7Qu9C+0LIsINCy0LrQu9GO0YfQsNGPINC70LDRgtC40L3RgdC60LjQtSDQsdGD0LrQstGLLCDRhtC40YTRgNGLLCDQtNC10YTQuNGBLCDQvdC40LbQvdC10LUg0L/QvtC00YfQtdGA0LrQuNCy0LDQvdC40LUg0Lgg0YLQvtGH0LrRgy4iLCJSZWdpc3RyYXRpb25Gb3JtLmxvZ2luUGxhY2Vob2xkZXIiOiLQm9C+0LPQuNC9IiwiUmVnaXN0cmF0aW9uRm9ybS5uYW1lQ29uc3RyYWludHMiOiIzLTI1NiDRgdC40LzQstC+0LvQvtCyLCDQu9Cw0YLQuNC90YHQutC40LUg0LHRg9C60LLRiywg0YDRg9GB0YHQutC40LUg0LHRg9C60LLRiywg0YbQuNGE0YDRiywg0LfQvdCw0LrQuDog0LTQtdGE0LjRgSwg0L3QuNC20L3QtdC1INC/0L7QtNGH0LXRgNC60LjQstCw0L3QuNC1LCDRgtC+0YfQutCwLCDQv9GA0L7QsdC10LsiLCJSZWdpc3RyYXRpb25Gb3JtLm5hbWVIaW50Ijoi0J/QvtC70L3QvtC1INC40LzRjyDQtNC+0LvQttC90L4g0YHQvtC00LXRgNC20LDRgtGMINC+0YIgMyDQtNC+IDI1NiDRgdC40LzQstC+0LvQvtCyLCDQstC60LvRjtGH0LDRjyDQu9Cw0YLQuNC90YHQutC40LUg0Lgg0YDRg9GB0YHQutC40LUg0LHRg9C60LLRiywg0YbQuNGE0YDRiywg0LTQtdGE0LjRgSwg0L3QuNC20L3QtdC1INC/0L7QtNGH0LXRgNC60LjQstCw0L3QuNC1LCDRgtC+0YfQutGDINC4INC/0YDQvtCx0LXQuy4iLCJSZWdpc3RyYXRpb25Gb3JtLm5hbWVQbGFjZWhvbGRlciI6ItCf0L7Qu9C90L7QtSDQuNC80Y8iLCJSZWdpc3RyYXRpb25Gb3JtLnBhc3N3b3JkQ29uZmlybVBsYWNlaG9sZGVyIjoi0J/QvtC00YLQstC10YDQtNC40YLQtSDQv9Cw0YDQvtC70YwiLCJSZWdpc3RyYXRpb25Gb3JtLnBhc3N3b3JkQ29uc3RyYWludHMiOiI0LTI1INGB0LjQvNCy0L7Qu9C+0LIiLCJSZWdpc3RyYXRpb25Gb3JtLnBhc3N3b3JkSGludCI6ItCf0LDRgNC+0LvRjCDQtNC+0LvQttC10L0g0YHQvtC00LXRgNC20LDRgtGMINC+0YIgNCDQtNC+IDEyOCDRgdC40LzQstC+0LvQvtCyIiwiUmVnaXN0cmF0aW9uRm9ybS5wYXNzd29yZFBsYWNlaG9sZGVyIjoi0J/QsNGA0L7Qu9GMIiwiUmVnaXN0cmF0aW9uRm9ybS5yZWdpc3RlciI6ItCX0LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGM0YHRjyIsIlJlZ2lzdHJhdGlvbkZvcm0ucmVzZXQiOiLQntGH0LjRgdGC0LjRgtGMIiwiUmVnaXN0cmF0aW9uUGFnZS5jb3VwbGVNaW51dGVzIjoi0KHRgtCw0YDRgiDQt9Cw0LnQvNC10YIg0LLRgdC10LPQviDQv9Cw0YDRgyDQvNC40L3Rg9GCIiwiUmVnaXN0cmF0aW9uUGFnZS5vb3BzIjoi0KPQv9GBLCIsIlJlZ2lzdHJhdGlvblBhZ2UucmVnaXN0cmF0aW9uIjoi0LfQsNC/0L7Qu9C90LjRgtC1INGE0L7RgNC80YMg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCIsIlJlZ2lzdHJhdGlvblBhZ2UudG9rZW5FeHBpcmVkIjoi0Y3RgtC+INC/0YDQuNCz0LvQsNGI0LXQvdC40LUg0L/RgNC+0YHRgNC+0YfQtdC90L4g0LjQu9C4INGD0LbQtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8iLCJSZWdpc3RyYXRpb25QYWdlLnRva2VuTm90UHJvdmlkZWQiOiLQutC70Y7RhyDQv9GA0LjQs9C70LDRiNC10L3QuNGPINC90LUg0L7QsdC90LDRgNGD0LbQtdC9INCyIFVSTCDQv9Cw0YDQsNC80LXRgtGA0LDRhSIsIlJlZ2lzdHJhdGlvblBhZ2UudmlzaXQiOiLQn9C+0YHQtdGC0LjRgtC1IiwiUmVnaXN0cmF0aW9uUGFnZS53ZWxjb21lIjoi0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCwiLCJSZW1vdmVJbmRleE1vZGFsLmNvbnRlbnRIZWFkZXJNZXNzYWdlIjoi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQstGB0Y4g0LjQvdGE0L7RgNC80LDRhtC40Y4g0LjQtyBFbGFzdGljU2VhcmNoPyIsIlJlbW92ZUluZGV4TW9kYWwuaGVhZGVyUmVtb3ZlSW5kZXhNb2RhbCI6ItCj0LTQsNC70LjRgtGMINC40L3QtNC10LrRgSIsIlJlbW92ZUluZGV4TW9kYWwucmVtb3ZlQnV0dG9uVGV4dCI6ItCj0LHRgNCw0YLRjCIsIlJlbW92ZUluZGV4TW9kYWwucmVtb3ZlRXJyb3JOb3RpZmljYXRpb24iOiLQp9GC0L4t0YLQviDQv9C+0YjQu9C+INC90LUg0YLQsNC6Li4uIiwiUmVtb3ZlSW5kZXhNb2RhbC5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uIjoi0JjQvdC00LXQutGBINCx0YvQuyDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9GR0L0iLCJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINC+0YDQs9Cw0L3QuNC30LDRhtC40Y4/INCS0YHQtSDQvdCw0LfQvdCw0YfQtdC90L3Ri9C1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuCDQvdC1INGB0LzQvtCz0YPRgiDQsNCy0YLQvtGA0LjQt9C+0LLQsNGC0YzRgdGPINC90LAgUmVwb3J0IFBvcnRhbC4iLCJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5yZW1vdmVPcmdhbml6YXRpb25IZWFkZXIiOiLQo9C00LDQu9C40YLRjCDQvtGA0LPQsNC90LjQt9Cw0YbQuNGOIGdpdGh1YiIsIlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24iOiLQntGA0LPQsNC90LjQt9Cw0YbQuNGPINCyIEdpdEh1YiDRg9C00LDQu9C10L3QsCIsIlJldHJpZXNDb3VudGVyLmxhYmVsIjoie2NvdW50fSByZXRyaWVzIiwiU2Nyb2xsV3JhcHBlci5iYWNrVG9Ub3AiOiLQktCy0LXRgNGFIiwiU2VhcmNoRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lU2VhcmNoSGludCI6ItCY0LzRjyDQv9Cw0L3QtdC70Lgg0YPQv9GA0LDQstC70LXQvdC40Y8g0LTQvtC70LbQvdC+INCx0YvRgtGMINC00LvQuNC90L7QuSDQvtGCIDMg0LTQviAxMjguIiwiU2VydmVyU2V0dGluZ3NQYWdlLnRpdGxlIjoi0J3QsNGB0YLRgNC+0LnQutC4INGB0LXRgNCy0LXRgNCwIiwiU2VydmVyU2V0dGluZ3NUYWJzLmF1dGhDb25maWd1cmF0aW9uIjoi0J3QsNGB0YLRgNC+0LnQutC4INCw0LLRgtC+0YDQuNC30LDRhtC40LgiLCJTZXJ2ZXJTZXR0aW5nc1RhYnMuZU1haWxTZXJ2ZXIiOiLQn9C+0YfRgtC+0LLRi9C5INGB0LXRgNCy0LXRgCIsIlNlcnZlclNldHRpbmdzVGFicy5zdGF0aXN0aWNzIjoi0KHRgtCw0YLQuNGB0YLQuNC60LAiLCJTZXJ2ZXJTZXR0aW5nc1RhYnMudXBkYXRlQXV0aFN1Y2Nlc3MiOiLQndCw0YHRgtGA0L7QudC60Lgg0LjQvdGC0LXQs9GA0LDRhtC40LggT0F1dGgg0L7QsdC90L7QstC70LXQvdGLIiwiU2VydmVyU2V0dGluZ3NUYWJzLndhcm5pbmdNZXNzYWdlIjoi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCDRgtC10YHRgtC+0LLQvtC1INGB0L7QtdC00LjQvdC10L3QuNC1OiIsIlNlcnZpY2VWZXJzaW9uSXRlbS5uZXdWZXJzaW9uIjoi0JTQvtGB0YLRg9C/0L3QsCDQvdC+0LLQsNGPINCy0LXRgNGB0LjRjzoge25ld1ZlcnNpb259IiwiU2VydmljZVZlcnNpb25zQmxvY2suY3VycmVudFZlcnNpb24iOiLQotC10LrRg9GJ0LDRjyDQstC10YDRgdC40Y8iLCJTZXR0aW5nc1BhZ2UuYW5hbHlzaXMiOiLQkNCy0YLQvi3QsNC90LDQu9C40LciLCJTZXR0aW5nc1BhZ2UuZGVmZWN0Ijoi0KLQuNC/0Ysg0LTQtdGE0LXQutGC0L7QsiIsIlNldHRpbmdzUGFnZS5kZW1vRGF0YSI6ItCU0LXQvNC+INC00LDQvdC90YvQtSIsIlNldHRpbmdzUGFnZS5nZW5lcmFsIjoi0J7QsdGJ0LXQtSIsIlNldHRpbmdzUGFnZS5pbnRlZ3JhdGlvbnMiOiLQmNC90YLQtdCz0YDQsNGG0LjQuCIsIlNldHRpbmdzUGFnZS5ub3RpZmljYXRpb25zIjoi0KPQstC10LTQvtC80LvQtdC90LjRjyIsIlNldHRpbmdzUGFnZS50aXRsZSI6ItCd0LDRgdGC0YDQvtC50LrQuCIsIlNoYXJlRmlsdGVyLnNoYXJlZCI6ItCf0L7QtNC10LvQuNGC0YzRgdGPOiIsIlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi53aWRnZXRzTGlzdEhlYWRlciI6IlNlbGVjdCBzaGFyZWQgd2lkZ2V0IiwiU2hhcmVkV2lkZ2V0c1NlYXJjaC5zZWFyY2hJbnB1dFBsYWNlaG9sZGVyIjoiU2VhcmNoIGJ5IG5hbWUsIG93bmVyIiwiU2hhcmVkV2lkZ2V0c1NlYXJjaC5zaGFyZWRXaWRnZXRTZWFyY2hIaW50IjoiVmFsdWUgc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDMgdG8gMjU2LiIsIlNpZGViYXIuYWRtaW5pc3RyYXRlQnRuIjoi0JDQtNC80LjQvdC40YHRgtGA0LjRgNC+0LLQsNGC0YwiLCJTaWRlYmFyLmRhc2hib2FyZHNCdG4iOiLQn9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8iLCJTaWRlYmFyLmRlYnVnQnRuIjoi0J7RgtC70LDQtNC60LAiLCJTaWRlYmFyLmZpbHRlcnNCdG4iOiLQpNC40LvRjNGC0YDRiyIsIlNpZGViYXIubGF1bmNoZXNCdG4iOiLQl9Cw0L/Rg9GB0LrQuCIsIlNpZGViYXIubG9nb3V0QnRuIjoi0JLRi9C50YLQuCIsIlNpZGViYXIucHJvZmlsZUJ0biI6ItCf0YDQvtGE0LjQu9GMIiwiU3RhY2tUcmFjZS5lbXB0eU1lc3NhZ2UiOiJObyBzdGFjayB0cmFjZSB0byBkaXNwbGF5IiwiU3RhY2tUcmFjZS5saW5rVGV4dCI6Ik9wZW4gaW4gTG9nIHZpZXciLCJTdGFja1RyYWNlLm1lc3NhZ2VSZWZDYXB0aW9uIjoi0J/QtdGA0LXQudC00LjRgtC1INC6INGC0YDQsNGB0YHQuNGA0L7QstC60LUg0YHRgtC10LrQsCDQsiDQt9Cw0L/QuNGB0Lgg0LbRg9GA0L3QsNC70LAiLCJTdGFja1RyYWNlLm5vU3RhY2tUcmFjZSI6ItCd0LXRgiDRgtGA0LDRgdGB0LjRgNC+0LLQutC4INGB0YLQtdC60LAg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8iLCJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NFbmFibGVkIjoi0J/QvtC80L7Qs9C40YLQtSDQvdCw0Lwg0YHQtNC10LvQsNGC0YwgUmVwb3J0UG9ydGFsINC70YPRh9GI0LUg0YEg0L/QvtC80L7RidGM0Y4g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7QuSDQvtGC0L/RgNCw0LLQutC4INGB0YLQsNGC0LjRgdGC0LjQutC4IiwiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzSW5mbyI6J9CS0Ysg0LzQvtC20LXRgtC1INC/0L7QvNC+0YfRjCDQvdCw0Lwg0YPQu9GD0YfRiNC40YLRjCBSZXBvcnRQb3J0YWwsINCy0YvQsdC40YDQsNGPICLQvtGC0L/RgNCw0LLQuNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8uINCf0L7QutCwINCy0Ysg0LHRg9C00LXRgtC1INC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQv9GA0LjQu9C+0LbQtdC90LjQtdC8LCDQvNGLINCx0YPQtNC10Lwg0YHQvtCx0LjRgNCw0YLRjCDQtNCw0L3QvdGL0LUsINC60L7RgtC+0YDRi9C1INC80L7Qs9GD0YLRjCDQv9C+0LzQvtGH0Ywg0L3QsNC8INC/0L7QstGL0YHQuNGC0Ywg0Y3RhNGE0LXQutGC0LjQstC90L7RgdGC0Ywg0Lgg0YPQtNC+0LHRgdGC0LLQviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyBSZXBvcnRQb3J0YWwg0L/Rg9GC0LXQvCDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0YfQsNGB0YLQvtGC0Ysg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GFINGE0YPQvdC60YbQuNC5LiDQndC40LbQtSAtINC/0L7QtNGA0L7QsdC90LXQtSDQviDRgtC+0LwsINC60LDQutCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L7RgtC/0YDQsNCy0LvRj9C10YLRgdGPLicsIlN0YXRpc3RpY3NUYWIuc3RhdGlzdGljc0xpc3QiOiLQodCf0JjQodCe0Jog0J7QotCf0KDQkNCS0JvQldCd0J3QntCZINCh0KLQkNCi0JjQodCi0JjQmtCYIiwiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzTGlzdE1lc3NhZ2UiOiLQntGC0YfQtdGC0Ysg0L4g0YHRgtCw0YLQuNGB0YLQuNC60LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L7QsdGL0YfQvdC+INC90LUg0LLQutC70Y7Rh9Cw0Y7RgiDQu9C40YfQvdGD0Y4g0LjQvdGE0L7RgNC80LDRhtC40Y4sINC90L4g0LIg0L3QuNGFINC80L7QttC10YIg0LLRhdC+0LTQuNGC0Yw6IiwiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzTGlzdFBvaW50MSI6ItCY0L3RhNC+0YDQvNCw0YbQuNGPINC+0LEg0YPRgdGC0YDQvtC50YHRgtCy0LU6INC80L7QtNC10LvRjCDQstCw0YjQtdCz0L4g0L7QsdC+0YDRg9C00L7QstCw0L3QuNGPLCDQstC10YDRgdC40Y8g0L7Qv9C10YDQsNGG0LjQvtC90L3QvtC5INGB0LjRgdGC0LXQvNGLLCDRgNCw0LfRgNC10YjQtdC90LjQtSDRjdC60YDQsNC90LAsINCy0LXRgNGB0LjRjyDQsdGA0LDRg9C30LXRgNCwOyIsIlN0YXRpc3RpY3NUYWIuc3RhdGlzdGljc0xpc3RQb2ludDIiOiLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQttGD0YDQvdCw0LvQtTog0L/QvtC00YDQvtCx0L3QvtGB0YLQuCDQstCw0YjQtdCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gUmVwb3J0UG9ydGFsLCDQvdCwINGH0YLQviDQstGLINC90LDQttC40LzQsNC10YLQtSDQuCDQutCw0LrQuNC1INC00LXQudGB0YLQstC40Y8g0L/RgNC+0LjQt9Cy0L7QtNC40YLQtSwg0LrQsNC6INC00L7Qu9Cz0L4g0LTQtdGA0LbQuNGC0LUg0L/RgNC40LvQvtC20LXQvdC40LUg0L7RgtC60YDRi9GC0YvQvC4iLCJTdGF0aXN0aWNzVGFiLnVwZGF0ZVN0YXRpc3RpY3NFbmFibGVkU3VjY2VzcyI6ItCd0LDRgdGC0YDQvtC50LrQuCDRgdC10YDQstC10YDQsCDRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0LvQtdC90YsiLCJTdGF0dXNQYWdlQ29udGVudC5hY3Rpdml0aWVzIjoi0J/QsNC90LXQu9GMINCw0LrRgtC40LLQvdC+0YHRgtC10Lkg0L/RgNC+0LXQutGC0LAiLCJTdGF0dXNQYWdlQ29udGVudC5hdXRvQnVncyI6ItCf0YDQvtGG0LXQvdGCINC+0YjQuNCx0L7QuiDRgtC10YHRgtC+0LIiLCJTdGF0dXNQYWdlQ29udGVudC5nZW5lcmFsIjoi0J7QsdGJ0LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyIsIlN0YXR1c1BhZ2VDb250ZW50LmludmVzdGlnYXRlZCI6ItCf0YDQvtGG0LXQvdGCINC40YHRgdC70LXQtNC+0LLQsNC90LjQuSIsIlN0YXR1c1BhZ2VDb250ZW50Lmlzc3Vlc0NoYXJ0Ijoi0J/RgNC+0YbQtdC90YIg0LTQtdGE0LXQutGC0L7QsiDQv9GA0L7QtNGD0LrRgtCwIiwiU3RhdHVzUGFnZUNvbnRlbnQubGFzdExhdW5jaCI6ItCh0YLQsNGC0LjRgdGC0LjQutCwINC/0L7RgdC70LXQtNC90LXQs9C+INC30LDQv9GD0YHQutCwIiwiU3RhdHVzUGFnZUNvbnRlbnQubGF1bmNoU3RhdGlzdGljcyI6ItCh0YLQsNGC0LjRgdGC0LjQutCwINC30LDQv9GD0YHQutCwIiwiU3RhdHVzUGFnZUNvbnRlbnQubGF1bmNoZXNRdWFudGl0eSI6ItCa0L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9GD0YHQutC+0LIiLCJTdGF0dXNQYWdlQ29udGVudC5vd25lcnMiOiLQktC70LDQtNC10LvRjNGG0Ysg0LfQsNC/0YPRgdC60L7QsiIsIlN0YXR1c1BhZ2VDb250ZW50LnN5c3RlbUlzc3VlcyI6ItCf0YDQvtGG0LXQvdGCINGB0LjRgdGC0LXQvNC90YvRhSDQvtGI0LjQsdC+0LoiLCJTdGVwR3JpZC5oaWRlUHJlY29uZGl0aW9uTWV0aG9kcyI6ItCg0LDQt9Cy0LXRgNC90YPRgtGMINC/0YDQtdC60L7QvdC00LjRhtC40L7QvdC90YvQtSDQvNC10YLQvtC00YsiLCJTdGVwR3JpZC5pZ25vcmVBQVNob3J0Ijoi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINCQ0JAiLCJTdGVwR3JpZC5pZ25vcmVBdXRvYW5hbHl6ZXJUb29sdGlwIjoi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGN0LvQtdC80LXQvdGCINC/0YDQuCDQkNCy0YLQvi3QkNC90LDQu9C40LfQtSIsIlN0ZXBHcmlkLnNob3dQcmVjb25kaXRpb25NZXRob2RzIjoi0KHQstC10YDQvdGD0YLRjCDQv9GA0LXQutC+0L3QtNC40YbQuNC+0L3QvdGL0LUg0LzQtdGC0L7QtNGLIiwiU3RlcExldmVsRW50aXRpZXMuQVVUT01BVElPTl9CVUdfQUxMIjoi0JLRgdC1INC+0YjQuNCx0LrQuCDRgtC10YHRgtCwIiwiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZU9wdGlvbjEiOifQoSAiQUEiINC80LXRgtC60L7QuScsIlN0ZXBMZXZlbEVudGl0aWVzLkFuYWx5c2VPcHRpb24yIjon0LHQtdC3ICJBQSIg0LzQtdGC0LrQuCcsIlN0ZXBMZXZlbEVudGl0aWVzLkFuYWx5c2VUaXRsZSI6ItCf0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQvdC+IFJQIChBQSkiLCJTdGVwTGV2ZWxFbnRpdGllcy5CdHNJc3N1ZU9wdGlvbjEiOiLQoSDQv9GA0LjQutGA0LXQv9C70LXQvdC90YvQvNC4INC+0YjQuNCx0LrQsNC80LgiLCJTdGVwTGV2ZWxFbnRpdGllcy5CdHNJc3N1ZU9wdGlvbjIiOiLQkdC10Lcg0L/RgNC40LrRgNC10L/Qu9C10L3QvdGL0YUg0L7RiNC40LHQvtC6IiwiU3RlcExldmVsRW50aXRpZXMuQnRzSXNzdWVUaXRsZSI6ItCe0YjQuNCx0LrQuCDQsiDQodCe0JQiLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RDb21tZW50UGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDQutC+0LzQvNC10L3RgtCw0YDQuNC5IiwiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0Q29tbWVudFRpdGxlIjoi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQtNC10YTQtdC60YLQsCIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdFR5cGVUaXRsZSI6ItCi0LjQvyDQtNC10YTQtdC60YLQsCIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX0FCMDAxIjoi0J7RiNC40LHQutCwINGC0LXRgdGC0LAiLCJTdGVwTGV2ZWxFbnRpdGllcy5EZWZlY3RfVHlwZV9ORDAwMSI6ItCR0LXQtyDQtNC10YTQtdC60YLQvtCyIiwiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0X1R5cGVfUEIwMDEiOiLQlNC10YTQtdC60YIg0L/RgNC+0LTRg9C60YLQsCIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX1NJMDAxIjoi0KHQuNGB0YLQtdC80L3QsNGPINC+0YjQuNCx0LrQsCIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX1RJMDAxIjoi0KLRgNC10LHRg9C10YLRgdGPINCw0L3QsNC70LjQtyIsIlN0ZXBMZXZlbEVudGl0aWVzLkRlc2NyaXB0aW9uUGxhY2Vob2xkZXIiOiLQktCy0LXQtNC40YLQtSDQvtC/0LjRgdCw0L3QuNC1IiwiU3RlcExldmVsRW50aXRpZXMuRGVzY3JpcHRpb25UaXRsZSI6ItCe0L/QuNGB0LDQvdC40LUiLCJTdGVwTGV2ZWxFbnRpdGllcy5JZ25vcmVBQU9wdGlvbjEiOifQoSAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMIEFBIiDQvNC10YLQutC+0LknLCJTdGVwTGV2ZWxFbnRpdGllcy5JZ25vcmVBQU9wdGlvbjIiOifQkdC10LcgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCBBQSIg0LzQtdGC0LrQuCcsIlN0ZXBMZXZlbEVudGl0aWVzLklnbm9yZUFBVGl0bGUiOiLQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/RgNC4INCQ0JAiLCJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNGYWlsZWQiOiLQndC10YPQtNCw0YfQvdC+IiwiU3RlcExldmVsRW50aXRpZXMuTGF1bmNoU3RhdHVzSW5Qcm9ncmVzcyI6ItCSINC/0YDQvtGG0LXRgdGB0LUiLCJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNJbnRlcnJ1cHRlZCI6ItCf0YDQtdGA0LLQsNC90L4iLCJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNQYXNzZWQiOiLQo9GB0L/QtdGI0L3QviIsIlN0ZXBMZXZlbEVudGl0aWVzLkxhdW5jaFN0YXR1c1NraXBwZWQiOiLQn9GA0L7Qv9GD0YnQtdC90L4iLCJTdGVwTGV2ZWxFbnRpdGllcy5NZXRob2RUeXBlVGl0bGUiOiLQotC40L8g0LzQtdGC0L7QtNCwIiwiU3RlcExldmVsRW50aXRpZXMuTk9fREVGRUNUX0FMTCI6ItCS0YHQtSDQsdC10Lcg0LTQtdGE0LXQutGC0L7QsiIsIlN0ZXBMZXZlbEVudGl0aWVzLk5hbWVUaXRsZSI6ItCY0LzRjyDRgtC10YHRgtCwIiwiU3RlcExldmVsRW50aXRpZXMuUFJPRFVDVF9CVUdfQUxMIjoi0JLRgdC1INC00LXRhNC10LrRgtGLINC/0YDQvtC00YPQutGC0LAiLCJTdGVwTGV2ZWxFbnRpdGllcy5TWVNURU1fSVNTVUVfQUxMIjoi0JLRgdC1INGB0LjRgdGC0LXQvNC90YvQtSDQvtGI0LjQsdC60LgiLCJTdGVwTGV2ZWxFbnRpdGllcy5TdGFydFRpbWVUaXRsZSI6ItCS0YDQtdC80Y8g0LfQsNC/0YPRgdC60LAiLCJTdGVwTGV2ZWxFbnRpdGllcy5TdGF0dXNUaXRsZSI6ItCh0YLQsNGC0YPRgSIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlckNsYXNzIjoi0J/QvtGB0YIt0LrQu9Cw0YHRgSIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlckdyb3VwcyI6ItCf0L7RgdGCLdCz0YDRg9C/0L/QsCIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlck1ldGhvZCI6ItCf0L7RgdGCLdC80LXRgtC+0LQiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJTdWl0ZSI6ItCf0L7RgdGCLdC90LDQsdC+0YAiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJUZXN0Ijoi0J/QvtGB0YIt0YLQtdGB0YIiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQmVmb3JlQ2xhc3MiOiLQn9GA0LXQtC3QutC70LDRgdGBIiwiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZUdyb3VwcyI6ItCf0YDQtdC0LdCz0YDRg9C/0L/QsCIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVCZWZvcmVNZXRob2QiOiLQn9GA0LUt0LzQtdGC0L7QtCIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVCZWZvcmVTdWl0ZSI6ItCf0YDQtdC0LdC90LDQsdC+0YAiLCJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQmVmb3JlVGVzdCI6ItCf0YDQtdC0LdGC0LXRgdGCIiwiU3RlcExldmVsRW50aXRpZXMuVHlwZVN0ZXAiOiLQotC10YHRgiIsIlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVUZXN0Ijoi0KLQtdGB0YLQvtCy0YvQuSDQutC70LDRgdGBIiwiU3RyYXRlZ3lCbG9jay5hbGxMYXVuY2hlc0NhcHRpb24iOiLQktGB0LUg0LfQsNC/0YPRgdC60LgiLCJTdHJhdGVneUJsb2NrLmFsbExhdW5jaGVzSW5mbyI6ItCi0LXRgdGC0L7QstGL0LUg0Y3Qu9C10LzQtdC90YLRiyDQsdGD0LTRg9GCINC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQvdGLINC90LAg0L7RgdC90L7QstC1INGA0LDQvdC10LUg0L/RgNC+0LDQvdCw0LvQuNC30LjRgNC+0LLQsNC90L3Ri9GFINC00LDQvdC90YvRhSDQstC+INCy0YHQtdGFINC30LDQv9GD0YHQutCw0YUiLCJTdHJhdGVneUJsb2NrLmFuYWx5c2lzU3RhdHVzSW5mbyI6ItCf0YDQuCDQktCa0Jsg0LDQvdCw0LvQuNC3INC90LDRh9C40L3QsNC10YLRgdGPLCDQutCw0Log0YLQvtC70YzQutC+INC30LDQutCw0L3Rh9C40LLQsNC10YLRgdGPINC70Y7QsdC+0Lkg0LfQsNC/0YPRgdC6PGJyLz7Qn9GA0Lgg0JLQq9Ca0Jsg0L3QtSDQvdCw0YfQvdC10YLRgdGPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LCDQvdC+INC80L7QttC90L4g0LLRi9C30LLQsNGC0Ywg0LLRgNGD0YfQvdGD0Y4iLCJTdHJhdGVneUJsb2NrLmF1dG9BbmFseXNpc1N3aXRjaGVyVGl0bGUiOiLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuNC5INCw0L3QsNC70LjQtyIsIlN0cmF0ZWd5QmxvY2suc2FtZU5hbWVMYXVuY2hlc0NhcHRpb24iOiLQl9Cw0L/Rg9GB0LrQuCDRgSDQvtC00LjQvdCw0LrQvtCy0YvQvNC4INC40LzQtdC90LDQvNC4IiwiU3RyYXRlZ3lCbG9jay5zYW1lTmFtZUxhdW5jaGVzSW5mbyI6ItCi0LXRgdGC0L7QstGL0LUg0Y3Qu9C10LzQtdC90YLRiyDQsdGD0LTRg9GCINC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQvdGLINC90LAg0L7RgdC90L7QstC1INGA0LDQvdC10LUg0L/RgNC+0LDQvdCw0LvQuNC30LjRgNC+0LLQsNC90L3Ri9GFINC00LDQvdC90YvRhSDQsiDQt9Cw0L/Rg9GB0LrQsNGFINGBINC+0LTQuNC90LDQutC+0LLRi9C80Lgg0LjQvNC10L3QsNC80LgiLCJTdHJhdGVneUJsb2NrLnN0cmF0ZWd5U2VsZWN0b3JUaXRsZSI6ItCh0YLRgNCw0YLQtdCz0LjRjyDQkNCy0YLQvi3QkNC90LDQu9C40LfQsCIsIlN1Y2Nlc3NNZXNzYWdlcy5nZW5lcmF0ZURlbW9EYXRhU3VjY2VzcyI6ItCU0LXQvNC+0L3RgdGC0YDQsNGG0LjQvtC90L3Ri9C1INC00LDQvdC90YvQtSDRgdCz0LXQvdC10YDQuNGA0L7QstCw0L3RiyIsIlN1aXRlTGV2ZWxFbnRpdGllcy5BVVRPTUFUSU9OX0JVR190aXRsZSI6ItCe0YjQuNCx0LrQsCDRgtC10YHRgtCwIiwiU3VpdGVMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGUiOiLQktGB0LXQs9C+INC+0YjQuNCx0L7QuiDRgtC10YHRgtCwIiwiU3VpdGVMZXZlbEVudGl0aWVzLkRlc2NyaXB0aW9uVGl0bGUiOiLQntC/0LjRgdCw0L3QuNC1IiwiU3VpdGVMZXZlbEVudGl0aWVzLkZhaWxlZFRpdGxlIjoi0J3QtdGD0LTQsNGH0L3QviIsIlN1aXRlTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiOiLQmNC80Y8g0L3QsNCx0L7RgNCwIiwiU3VpdGVMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX3RpdGxlIjoi0J7RiNC40LHQutCwINC/0YDQvtC00YPQutGC0LAiLCJTdWl0ZUxldmVsRW50aXRpZXMuUFJPRFVDVF9CVUdfdG90YWxUaXRsZSI6ItCS0YHQtdCz0L4g0L7RiNC40LHQvtC6INC/0YDQvtC00YPQutGC0LAiLCJTdWl0ZUxldmVsRW50aXRpZXMuUGFzc2VkVGl0bGUiOiLQo9GB0L/QtdGI0L3QviIsIlN1aXRlTGV2ZWxFbnRpdGllcy5TWVNURU1fSVNTVUVfdGl0bGUiOiLQodC40YHRgtC10LzQvdCw0Y8g0L7RiNC40LHQutCwIiwiU3VpdGVMZXZlbEVudGl0aWVzLlNZU1RFTV9JU1NVRV90b3RhbFRpdGxlIjoi0JLRgdC10LPQviDRgdC40YHRgtC10LzQvdGL0YUg0L7RiNC40LHQvtC6IiwiU3VpdGVMZXZlbEVudGl0aWVzLlNraXBwZWRUaXRsZSI6ItCf0YDQvtC/0YPRidC10L3QviIsIlN1aXRlTGV2ZWxFbnRpdGllcy5TdGFydFRpbWVUaXRsZSI6ItCS0YDQtdC80Y8g0LfQsNC/0YPRgdC60LAiLCJTdWl0ZUxldmVsRW50aXRpZXMuVE9fSU5WRVNUSUdBVEVfdGl0bGUiOiLQotGA0LXQsdGD0LXRgtGB0Y8g0LDQvdCw0LvQuNC3IiwiU3VpdGVMZXZlbEVudGl0aWVzLlRvdGFsVGl0bGUiOiLQktGB0LXQs9C+IiwiVGVzdENhc2VzR3Jvd3RoVHJlbmRDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJJdGVtcyIsIlRlc3RDYXNlc0dyb3d0aFRyZW5kQ29udHJvbHMuSXRlbXNWYWxpZGF0aW9uRXJyb3IiOiJJdGVtcyBjb3VudCBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTUwIiwiVGVzdEl0ZW1DaGFuZ2VzLmZyb21JdGVtIjoi0L7RgiDRjdC70LXQvNC10L3RgtCwINGC0LXRgdGC0LjRgNC+0LLQsNC90LjRjyIsIlRlc3RJdGVtQ2hhbmdlcy5saW5rSXNzdWUiOiLQtNC+0LHQsNCy0LjQuyDQvtGI0LjQsdC60YMiLCJUZXN0SXRlbUNoYW5nZXMucG9zdElzc3VlIjoi0L7Qv9GD0LHQu9C40LrQvtCy0LDQuyDQvtGI0LjQsdC60YMiLCJUZXN0SXRlbUNoYW5nZXMudG9JdGVtIjoi0Log0Y3Qu9C10LzQtdC90YLRgyDRgtC10YHRgtC40YDQvtCy0LDQvdC40Y8iLCJUZXN0SXRlbUNoYW5nZXMudW5saW5rSXNzdWUiOiLQvtGC0LrRgNC10L/QuNC7INC+0YjQuNCx0LrRgyIsIlRlc3RJdGVtRGV0YWlsc01vZGFsLmRlc2NyaXB0aW9uIjoi0J7Qv9C40YHQsNC90LjQtToiLCJUZXN0SXRlbURldGFpbHNNb2RhbC5kdXJhdGlvbiI6ItCU0LvQuNGC0LXQu9GM0L3QvtGB0YLRjDoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC5wYXJhbWV0ZXJLZXkiOiLQmtC70Y7RhyDQv9Cw0YDQsNC80LXRgtGA0LAiLCJUZXN0SXRlbURldGFpbHNNb2RhbC5wYXJhbWV0ZXJWYWx1ZSI6ItCX0L3QsNGH0LXQvdC40LUg0L/QsNGA0LDQvNC10YLRgNCwIiwiVGVzdEl0ZW1EZXRhaWxzTW9kYWwuc3RhY2t0cmFjZSI6ItCi0YDQsNGB0YHQuNGA0L7QstC60LAg0YHRgtC10LrQsDoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC50YWdzIjoi0JzQtdGC0LrQuDoiLCJUZXN0SXRlbURldGFpbHNNb2RhbC50ZXN0Q2FzZUlkIjoiVUlEINGN0LvQtdC80LXQvdGC0LA6IiwiVGVzdEl0ZW1EZXRhaWxzTW9kYWwudGl0bGUiOiLQlNC10YLQsNC70Lgg0YLQtdGB0YLQvtCy0L7Qs9C+INGN0LvQtdC80LXQvdGC0LAiLCJUZXN0SXRlbXNQYWdlLmRlbGV0ZU1vZGFsQ29udGVudCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3Qu9C10LzQtdC90YIgJzxiPntuYW1lfTwvYj4nPyDQktGLINC/0L7RgtC10YDRj9C10YLQtSDQtNC+0YHRgtGD0L8g0Log0L3QtdC80YMuIiwiVGVzdEl0ZW1zUGFnZS5kZWxldGVNb2RhbEhlYWRlciI6ItCj0LTQsNC70LjRgtGMINGN0LvQtdC80L3QtdGCIiwiVGVzdEl0ZW1zUGFnZS5kZWxldGVNb2RhbE11bHRpcGxlQ29udGVudCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3Qu9C10LzQtdC90YLRiz8g0JLRiyDQv9C+0YLQtdGA0Y/QtdGC0LUg0LTQvtGB0YLRg9C/INC6INC90LjQvC4iLCJUZXN0SXRlbXNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVIZWFkZXIiOiLQo9C00LDQu9C40YLRjCDRjdC70LXQvNC10L3RgtGLIiwiVGVzdEl0ZW1zUGFnZS5lcnJvciI6ItCe0YjQuNCx0LrQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCDRjdC70LXQvNC10L3RgtCwIiwiVGVzdEl0ZW1zUGFnZS5lcnJvck11bHRpcGxlIjoi0J7RiNC40LHQutCwINC/0YDQuCDRg9C00LDQu9C10L3QuNC4INGN0LvQtdC80LXQvdGC0L7QsiIsIlRlc3RJdGVtc1BhZ2Uuc3VjY2VzcyI6ItCt0LvQtdC80LXQvdGCINCx0YvQuyDRg9C00LDQu9C10L0iLCJUZXN0SXRlbXNQYWdlLnN1Y2Nlc3NNdWx0aXBsZSI6ItCt0LvQtdC80LXQvdGC0Ysg0LHRi9C70Lgg0YPQtNCw0LvQtdC90YsiLCJUZXN0SXRlbXNQYWdlLndhcm5pbmciOiLQktGLINGB0L7QsdC40YDQsNC10YLQtdGB0Ywg0YPQtNCw0LvQuNGC0Ywg0L3QtSDRgdCy0L7QuSDRjdC70LXQvNC10L3Rgi4g0K3RgtC+INC80L7QttC10YIg0L/QvtCy0LvQuNGP0YLRjCDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGOINC00YDRg9Cz0LjRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9GA0L7QtdC60YLQsC4iLCJUZXN0SXRlbXNQYWdlLndhcm5pbmdNdWx0aXBsZSI6ItCS0Ysg0YHQvtCx0LjRgNCw0LXRgtC10YHRjCDRg9C00LDQu9C40YLRjCDQvdC1INGB0LLQvtC4INGN0LvQtdC80LXQvdGC0YsuINCt0YLQviDQvNC+0LbQtdGCINC/0L7QstC70LjRj9GC0Ywg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQtNGA0YPQs9C40YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/RgNC+0LXQutGC0LAuIiwiVGVzdFN0YXR1c2VzLmZhaWxlZCI6ItC90LXRg9C00LDRh9C90L4iLCJUZXN0U3RhdHVzZXMuaW5Qcm9ncmVzcyI6ItCyINC/0YDQvtGG0LXRgdGB0LUiLCJUZXN0U3RhdHVzZXMuaW50ZXJydXB0ZWQiOiLQv9GA0LXRgNCy0LDQvdC+IiwiVGVzdFN0YXR1c2VzLnBhc3NlZCI6ItGD0YHQv9C10YjQvdC+IiwiVGVzdFN0YXR1c2VzLnJlc2V0ZWQiOiJSZXNldGVkIiwiVGVzdFN0YXR1c2VzLnNraXBwZWQiOiLQv9GA0L7Qv9GD0YnQtdC90L4iLCJUZXN0U3RhdHVzZXMuc3RvcHBlZCI6ItC+0YHRgtCw0L3QvtCy0LvQtdC90L4iLCJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5iYXNlZE9uIjoi0J3QsCDQvtGB0L3QvtCy0LUiLCJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5sYXVuY2hOYW1lIjoi0JjQvNGPINC30LDQv9GD0YHQutCwIiwiVW5hc3NpZ25CdXR0b24uYW5hc3NpZ25CdG4iOiLQktGL0LLQtdGB0YLQuCIsIlVuYXNzaWduQnV0dG9uLmFuYXNzaWduVXNlciI6ItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQsdGL0Lsg0LLRi9Cy0LXQtNC10L0g0LjQtyDQv9GA0L7QtdC60YLQsCEiLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlIjoi0JLRi9Cy0LXRgdGC0Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC40Lcg0L/RgNC+0LXQutGC0LAiLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlRXh0ZXJuYWwiOiLQndC10LvRjNC30Y8g0LLRi9Cy0LXRgdGC0Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIFVQU0Eg0LjQtyDQv9GA0L7QtdC60YLQsCBVUFNBIiwiVW5hc3NpZ25CdXR0b24udW5Bc3NpZ25UaXRsZU5vUGVybWlzc2lvbiI6ItCjINCy0LDRgSDQvdC10LTQvtGB0YLQsNGC0L7Rh9C90L4g0L/RgNCw0LIiLCJVbmFzc2lnbkJ1dHRvbi51bkFzc2lnblRpdGxlUGVyc29uYWwiOiLQndC10LLQvtC30LzQvtC20L3QviDQstGL0LLQtdGB0YLQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LjQtyDQv9C10YDRgdC+0L3QsNC70YzQvdC+0LPQviDQv9GA0L7QtdC60YLQsCIsIlVuYXNzaWduQnV0dG9uLnVuQXNzaWduVGl0bGVZb3UiOiLQndC10LvRjNC30Y8g0LLRi9Cy0LXRgdGC0Lgg0YHQvtCx0YHRgtCy0LXQvdC90YPRjiDRg9GH0LXRgtC90YPRjiDQt9Cw0L/QuNGB0Ywg0LjQtyDQv9GA0L7QtdC60YLQsCIsIlVuYXNzaWduTW9kYWwubW9kYWxIZWFkZXIiOiLQktGL0LLQtdGB0YLQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iLCJVbmFzc2lnbk1vZGFsLm1vZGFsVGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDQstGLINGF0L7RgtC40YLQtSDRg9Cx0YDQsNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPICc8Yj57dXNlcn08L2I+JyDRgSDQv9GA0L7QtdC60YLQsCAnPGI+e3Byb2plY3R9PC9iPic/IiwiVW5hc3NpZ25Nb2RhbC51bmFzc2lnbiI6ItCe0YLQvNC10L3QuNGC0Ywg0L3QsNC30L3QsNGH0LXQvdC40LUiLCJVbmlxdWVCdWdzVGFibGUuYnVnSURDb2x1bW4iOiJCVUcgSUQiLCJVbmlxdWVCdWdzVGFibGUuZm91bmRJbkNvbHVtbiI6IkZPVU5EIElOIiwiVW5pcXVlQnVnc1RhYmxlLnN1Ym1pdERhdGVDb2x1bW4iOiJTVUJNSVQgREFURSIsIlVuaXF1ZUJ1Z3NUYWJsZS5zdWJtaXREYXRlSGludCI6IlN1Ym1pdCBkYXRlOiIsIlVuaXF1ZUJ1Z3NUYWJsZS5zdWJtaXR0ZXJDb2x1bW4iOiJTVUJNSVRURVIiLCJVbmlxdWVCdWdzVGFibGVDb250cm9scy5JdGVtc0ZpZWxkTGFiZWwiOiJNYXhpbXVtIGxhdW5jaGVzIGluIHNlbGVjdGlvbiIsIlVuaXF1ZUJ1Z3NUYWJsZUNvbnRyb2xzLkl0ZW1zVmFsaWRhdGlvbkVycm9yIjoiSXRlbXMgY291bnQgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSAxIHRvIDE1MCIsIlVubGlua0lzc3VlTW9kYWwudGl0bGUiOiLQntGC0LrRgNC10L/QuNGC0Ywg0L7RiNC40LHQutGDIiwiVW5saW5rSXNzdWVNb2RhbC51bmxpbmtCdXR0b24iOiLQntGC0LrRgNC10L/QuNGC0YwiLCJVbmxpbmtJc3N1ZU1vZGFsLnVubGlua01vZGFsQ29uZmlybWF0aW9uVGV4dCI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L7RgtC60YDQtdC/0LjRgtGMINC+0YjQuNCx0LrQuCDQsiDQodCe0JQ/IiwiVW5saW5rSXNzdWVNb2RhbC51bmxpbmtTdWNjZXNzTWVzc2FnZSI6ItCX0LDQstC10YDRiNC10L3QviDRg9GB0L/QtdGI0L3QviEiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLmFuYWx5c2lzUHJvcHMiOiLQv9Cw0YDQsNC80LXRgtGA0Ysg0JDQstGC0L4t0JDQvdCw0LvQuNC30LA6IiwiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5hbmFseXplTW9kZSI6ItCh0YLRgNCw0YLQtdCz0LjRjyDQkNCy0YLQvi3QkNC90LDQu9C40LfQsCIsIlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MuYXV0b0FuYWx5emUiOiLQv9C10YDQtdC60LvRjtGH0LXQvdC40LUg0JDQstGC0L7QsNC90LDQu9C40LfQsNGC0L7RgNCwIiwiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5taW5Eb2NGcmVxIjoiTWluaW11bSBkb2N1bWVudCBmcmVxdWVuY3kiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pblNob3VsZE1hdGNoIjoiTWluaW11bSBzaG91bGQgbWF0Y2giLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pblRlcm1GcmVxIjoiTWluaW11bSB0ZXJtIGZyZXF1ZW5jeSIsIlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MubnVtYmVyT2ZMb2dMaW5lcyI6ItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNC+0Log0LvQvtCz0LAiLCJVcGRhdGVBbmFseXNpc1NldHRpbmdzLnVwZGF0ZWQiOiLQvtCx0L3QvtCy0LjQuyIsIlVzZXJCbG9jay5hZG1pbkJhZGdlIjoi0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAiLCJVc2VyQmxvY2suYWRtaW5pc3RyYXRlIjoi0JDQtNC80LjQvdC40YHRgtGA0LjRgNC+0LLQsNGC0YwiLCJVc2VyQmxvY2subG9nb3V0Ijoi0JLRi9C50YLQuCIsIlVzZXJCbG9jay5wcm9maWxlIjoi0J/RgNC+0YTQuNC70YwiLCJVc2VySW5mby5zdWJtaXRFcnJvciI6ItCe0YjQuNCx0LrQsCEg0J3QtSDRg9C00LDQtdGC0YHRjyDRgdC+0LfRgNCw0L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIiwiVXNlckluZm8uc3VibWl0U3VjY2VzcyI6ItCY0LfQvNC10L3QtdC90LjRjyDRg9GB0L/QtdGI0L3QviDRgdC+0YXRgNCw0L3QtdC90YsiLCJVdWlkQmxvY2suaGVhZGVyIjoi0KPQvdC40LLQtdGA0YHQsNC70YzQvdGL0Lkg0YPQvdC40LrQsNC70YzQvdGL0Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAiLCJVdWlkQmxvY2sucmVnZW5lcmF0ZSI6ItCh0L7Qt9C00LDRgtGMINC90L7QstGL0LkiLCJVdWlkQmxvY2sucmVnZW5lcmF0ZVN1Y2Nlc3MiOiLQmNC30LzQtdC90LXQvdC40Y8g0YPRgdC/0LXRiNC90L4g0YHQvtGF0YDQsNC90LXQvdGLIiwiVXVpZEJsb2NrLnN1Ym1pdEVycm9yIjoi0J7RiNC40LHQutCwINC/0YDQuCDQv9C10YDQtdGB0L7Qt9C00LDQvdC40LggVVVJRCIsIlV1aWRCbG9jay50ZXh0Ijoi0KfRgtC+0LHRiyDQvtCx0LXRgdC/0LXRh9C40YLRjCDQvdCw0LTQtdC20L3QvtGB0YLRjCDQstCw0YjQtdCz0L4g0LTQvtC80LXQvdC90L7Qs9C+INC/0LDRgNC+0LvRjywg0LLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNC5INC+0L/QvtC30L3QsNCy0LDRgtC10LvRjNC90YvQuSDQvdC+0LzQtdGALCDQvdCw0LfRi9Cy0LDQtdC80YvQuSBVVUlELCDRh9GC0L7QsdGLINC/0L7QtNGC0LLQtdGA0LTQuNGC0YwsINGH0YLQviDQstCw0YjQsCDRg9GH0LXRgtC90LDRjyDQt9Cw0L/QuNGB0Ywg0LzQvtC20LXRgiDQt9Cw0LPRgNGD0LbQsNGC0YzRgdGPINCw0LPQtdC90YLQvtC8LiIsIldhcm5pbmdUb29sdGlwLmRlc2NyaXB0aW9uIjoi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0L7QsdC90L7QstC40YLRjCDQstCw0YggVVVJRCwg0YnQtdC70LrQvdC40YLQtSAn0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YvQuScsINGH0YLQvtCx0Ysg0L/QvtC70YPRh9C40YLRjCDQvdC+0LLRi9C5LiIsIldhcm5pbmdUb29sdGlwLndhcm5pbmciOiLQktC90LjQvNCw0L3QuNC1ISIsIldhcm5pbmdUb29sdGlwLndhcm5pbmdEZXNjcmlwdGlvbiI6ItCS0YHQtSDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INCw0LPQtdC90YLRiyDRgdC+INGB0YLQsNGA0YvQvNC4IFVVSUQg0L3QtSDQsdGD0LTRg9GCINGA0LDQsdC+0YLQsNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7Qs9C+IiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uQVVUT01BVElPTl9CVUciOiJBdXRvbWF0aW9uIGJ1ZyIsIldpZGdldENyaXRlcmlhT3B0aW9uLkFVVE9NQVRJT05fQlVHX1RPVEFMIjoiVG90YWwgYXV0b21hdGlvbiBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5Dcml0ZXJpYUZhaWxlZCI6IkZhaWxlZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkNyaXRlcmlhUGFzc2VkIjoiUGFzc2VkIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uQ3JpdGVyaWFTa2lwcGVkIjoiU2tpcHBlZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkNyaXRlcmlhVG90YWwiOiJUb3RhbCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX0FCMDAxIjoiQXV0b21hdGlvbiBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5EZWZlY3RfVHlwZV9ORDAwMSI6Ik5vIGRlZmVjdCIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX1BCMDAxIjoiUHJvZHVjdCBidWciLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5EZWZlY3RfVHlwZV9TSTAwMSI6IlN5c3RlbSBpc3N1ZSIsIldpZGdldENyaXRlcmlhT3B0aW9uLkRlZmVjdF9UeXBlX1RJMDAxIjoiVG8gaW52ZXN0aWdhdGUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5OT19ERUZFQ1QiOiJObyBkZWZlY3QiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5OT19ERUZFQ1RfVE9UQUwiOiJUb3RhbCBubyBkZWZlY3RzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uUFJPRFVDVF9CVUciOiJQcm9kdWN0IGJ1ZyIsIldpZGdldENyaXRlcmlhT3B0aW9uLlBST0RVQ1RfQlVHX1RPVEFMIjoiVG90YWwgcHJvZHVjdCBidWdzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uU1lTVEVNX0lTU1VFIjoiU3lzdGVtIGlzc3VlIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uU1lTVEVNX0lTU1VFX1RPVEFMIjoiVG90YWwgc3lzdGVtIGlzc3VlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLlRPX0lOVkVTVElHQVRFIjoiVG8gaW52ZXN0aWdhdGUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5hYV9zZXR0aW5nc19hY3Rpb25zIjoiVXBkYXRlIEF1dG8tQW5hbHlzaXMgc2V0dGluZ3MiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5hdHRyaWJ1dGVzIjoiQXR0cmlidXRlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLmJ0c19hY3Rpb25zIjoiVXBkYXRlIEJUUyIsIldpZGdldENyaXRlcmlhT3B0aW9uLmNyZWF0ZV91c2VyIjoiQWRkLCByZWdpc3RlciB1c2VyIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uZGFzaGJvYXJkc19hY3Rpb25zIjoiVXBkYXRlIGRhc2hib2FyZCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmRlZmVjdHNfYWN0aW9ucyI6IlVwZGF0ZSBkZWZlY3QgdHlwZXMiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5kZWxldGVfbGF1bmNoIjoiRGVsZXRlIGxhdW5jaCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmRlc2NyaXB0aW9uIjoiRGVzY3JpcHRpb24iLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5lbmRUaW1lIjoiRmluaXNoIHRpbWUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5maWx0ZXJzX2FjdGlvbnMiOiJVcGRhdGUgZmlsdGVyIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24uZmluaXNoX2xhdW5jaCI6IkZpbmlzaCBsYXVuY2giLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5pbXBvcnRfYWN0aW9ucyI6IkltcG9ydCIsIldpZGdldENyaXRlcmlhT3B0aW9uLmlzc3Vlc19hY3Rpb25zIjoiQWN0aW9ucyB3aXRoIGlzc3VlcyIsIldpZGdldENyaXRlcmlhT3B0aW9uLnN0YXJ0VGltZSI6IlN0YXJ0IHRpbWUiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi5zdGFydF9sYXVuY2giOiJTdGFydCBsYXVuY2giLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi51cGRhdGVfcHJvamVjdCI6IlVwZGF0ZSBwcm9qZWN0IHNldHRpbmdzIiwiV2lkZ2V0Q3JpdGVyaWFPcHRpb24udXNlciI6IlVzZXIiLCJXaWRnZXRDcml0ZXJpYU9wdGlvbi53aWRnZXRzX2FjdGlvbnMiOiJVcGRhdGUgd2lkZ2V0IiwiV2lkZ2V0SGVhZGVyLnNoYXJlZFdpZGdldCI6ItCS0LjQtNC20LXRgiDRgdC+0LfQtNCw0L0ge293bmVyfSIsIldpZGdldEhlYWRlci53aWRnZXRJc1NoYXJlZCI6ItCe0YLQutGA0YvRgiDQtNC+0YHRgtGD0L8g0Log0LLQsNGI0LXQvNGDINCy0LjQtNC20LXRgtGDIiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUuYXJlYUNoYXJ0TW9kZSI6ItCS0LjQtCDQvtCx0LvQsNGB0YLQuCIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLmJhck1vZGUiOiLQktC40LQg0YHRgtC+0LvQsdGG0L7QsiIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLmNoYXJ0TW9kZSI6ItCS0LjQtCDQutGA0YPQs9C+0LLQvtCz0L4g0LPRgNCw0YTQuNC60LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0TW9kZS5kb251dENoYXJ0TW9kZSI6ItCS0LjQtCDQutC+0LvRjNGG0LXQstC+0LPQviDQs9GA0LDRhNC40LrQsCIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLmxpbmVDaGFydCI6ItCb0LjQvdC10LnQvdGL0Lkg0LPRgNCw0YTQuNC6IiwiV2lkZ2V0SGVhZGVyLndpZGdldE1vZGUucGFuZWxNb2RlIjoi0J/QsNC90LXQu9GM0L3Ri9C5INCy0LjQtCIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLnBpZUNoYXJ0TW9kZSI6ItCS0LjQtCDQutGA0YPQs9C+0LLQvtCz0L4g0LPRgNCw0YTQuNC60LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0TW9kZS50cmVuZENoYXJ0Ijoi0JPRgNCw0YTQuNC6INGC0LXQvdC00LXQvdGG0LjQuSIsIldpZGdldEhlYWRlci53aWRnZXRNb2RlLnRyZW5kQ2hhcnRNb2RlIjoi0JLQuNC0INGC0LXQvdC00LXQvdGG0LjQuSIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmFjdGl2aXR5U3RyZWFtIjoi0J/QsNC90LXQu9GMINCw0LrRgtC40LLQvdC+0YHRgtC10Lkg0L/RgNC+0LXQutGC0LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS5idWdUcmVuZCI6ItCh0YLQsNGC0LjRgdGC0LjQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC4INC+0YjQuNCx0L7QuiDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuY2FzZXNUcmVuZCI6ItCU0LjQsNCz0YDQsNC80LzQsCDRgtC10L3QtNC10L3RhtC40Lgg0YDQvtGB0YLQsCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC10YHRgtC+0LLRi9GFINGB0YbQtdC90LDRgNC40LXQsiIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLmN1bXVsYXRpdmUiOiLQndCw0LrQvtC/0LjRgtC10LvRjNC90LDRjyDQtNC40LDQs9GA0LDQvNC80LAg0YLQtdC90LTQtdC90YbQuNC5IiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuZmxha3lUZXN0Q2FzZXMiOiLQotCw0LHQu9C40YbQsCDRgdCw0LzRi9GFINC40LfQvNC10L3Rh9C40LLRi9GFINGC0LXRgdGC0L7QstGL0YUg0YHRhtC10L3QsNGA0LjQtdCyICjQotCe0J8tMjApIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUuaW52ZXN0aWdhdGVkVHJlbmQiOiLQmNGB0YHQu9C10LTQvtCy0LDQvdC90YvQuSDQv9GA0L7RhtC10L3RgiDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoU3RhdGlzdGljcyI6ItCU0LjQsNCz0YDQsNC80LzQsCDRgdGC0LDRgtC40YHRgtC40LrQuCDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiOiLQlNC40LDQs9GA0LDQvNC80LAg0YHRgNCw0LLQvdC10L3QuNGPINGA0LDQt9C90YvRhSDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoZXNEdXJhdGlvbkNoYXJ0Ijoi0JTQuNCw0LPRgNCw0LzQvNCwINC00LvQuNGC0LXQu9GM0L3QvtGB0YLQuCDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUubGF1bmNoZXNUYWJsZSI6ItCi0LDQsdC70LjRhtCwINC30LDQv9GD0YHQutC+0LIiLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS5tb3N0RmFpbGVkVGVzdENhc2VzIjoi0KLQsNCx0LvQuNGG0LAg0YHQsNC80YvRhSDQv9GA0L7QstCw0LvRjNC90YvRhSDRgtC10YHRgtC+0LLRi9GFINGB0YbQtdC90LDRgNC40LXQsiAo0KLQntCfLTIwKSIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLm5vdFBhc3NlZCI6ItCU0LjQsNCz0YDQsNC80LzQsCDRgtC10L3QtNC10L3RhtC40Lkg0L3QtdC/0YDQvtGI0LXQtNGI0LjRhSDRgtC10YHRgtC+0LLRi9GFINGB0YbQtdC90LDRgNC40LXQsiIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLm92ZXJhbGxTdGF0aXN0aWNzIjoi0J7QsdGJ0LDRjyDRgdGC0LDRgtC40YHRgtC40LrQsCIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLnBhc3NpbmdSYXRlUGVyTGF1bmNoIjoi0J/RgNC+0YbQtdC90YIg0L/RgNC+0LnQtNC10L3QvdGL0YUg0YLQtdGB0YLQvtCyINC00LvRjyDQvtC00L3QvtCz0L4g0LfQsNC/0YPRgdC60LAiLCJXaWRnZXRIZWFkZXIud2lkZ2V0VHlwZS5wYXNzaW5nUmF0ZVN1bW1hcnkiOiLQn9GA0L7RhtC10L3RgiDQv9GA0L7QudC00LXQvdC90YvRhSDRgtC10YHRgtC+0LIg0LTQu9GPINCy0YvQsdGA0LDQvdC90YvRhSDQt9Cw0L/Rg9GB0LrQvtCyIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUucHJvZHVjdFN0YXR1cyI6ItCh0YLQsNGC0YPRgSDQv9GA0L7QtdC60YLQsCIsIldpZGdldEhlYWRlci53aWRnZXRUeXBlLnN0YXRpc3RpY1RyZW5kIjoi0JTQuNCw0LPRgNCw0LzQvNCwINGB0YLQsNGC0LjRgdGC0LjQutC4INC30LDQv9GD0YHQutCwIiwiV2lkZ2V0SGVhZGVyLndpZGdldFR5cGUudW5pcXVlQnVnVGFibGUiOiLQotCw0LHQu9C40YbQsCDRg9C90LjQutCw0LvRjNC90YvRhSDQvtGI0LjQsdC+0LoiLCJXaWRnZXRMaXN0SXRlbS5hbHJlYWR5QWRkZWRXaWRnZXRUaXRsZSI6IldpZGdldCBpcyBhbHJlYWR5IGFkZGVkIHRvIHNlbGVjdGVkIGRhc2hib2FyZCIsIldpZGdldE1vZGVzLmFsbExhdW5jaGVzIjoiQWxsIGxhdW5jaGVzIiwiV2lkZ2V0TW9kZXMuYXJlYVZpZXdNb2RlIjoiQXJlYSB2aWV3IiwiV2lkZ2V0TW9kZXMuYmFyVmlld01vZGUiOiJCYXIgdmlldyIsIldpZGdldE1vZGVzLmRvbnV0VmlldyI6IkRvbnV0IHZpZXciLCJXaWRnZXRNb2Rlcy5sYXRlc3RMYXVuY2hlcyI6IkxhdGVzdCBsYXVuY2hlcyIsIldpZGdldE1vZGVzLmxhdW5jaE1vZGUiOiJMYXVuY2ggbW9kZSIsIldpZGdldE1vZGVzLnBhbmVsVmlldyI6IlBhbmVsIHZpZXciLCJXaWRnZXRNb2Rlcy5waWVWaWV3IjoiUGllIHZpZXciLCJXaWRnZXRNb2Rlcy50YWJsZVZpZXciOiJUYWJsZSB2aWV3IiwiV2lkZ2V0TW9kZXMudGltZWxpbmVNb2RlIjoiVGltZWxpbmUgbW9kZSIsIldpZGdldFR5cGVTZWxlY3Rvci5oZWFkaW5nIjoiQ2hvb3NlIHdpZGdldCB0eXBlIGZyb20gdGhlIGxpc3QgYmVsb3ciLCJXaWRnZXRXaXphcmRNb2RhbC5oZWFkZXJUZXh0IjoiQWRkIG5ldyB3aWRnZXQiLCJXaWRnZXRzLkRlc2NyaXB0aW9uLmFjdGl2aXR5U3RyZWFtIjoiU2hvd3MgYWxsIGFjdGl2aXRpZXMgb2NjdXJyaW5nIG9uIHRoZSBwcm9qZWN0LiIsIldpZGdldHMuRGVzY3JpcHRpb24uYnVnVHJlbmQiOiJTaG93cyB0aGUgdHJlbmQgb2YgZ3Jvd3RoIGluIHRoZSBudW1iZXIgb2YgZmFpbGVkIHRlc3QgY2FzZXMgZnJvbSBydW4gdG8gcnVuLiIsIldpZGdldHMuRGVzY3JpcHRpb24uY2FzZXNUcmVuZCI6Jy0gaW4gIkxhdW5jaCBNb2RlIiBzaG93cyB0aGUgaW5jcmVtZW50IG9mIHRlc3QtY2FzZXMgZnJvbSBydW4gdG8gcnVuLDxicj4gLSBpbiAiVGltZWxpbmUgTW9kZSIgc2hvd3MgdGhlIGluY3JlbWVudCBvZiB0ZXN0LWNhc2VzIGRpc3RyaWJ1dGVkIGJ5IGRhdGVzIChpbiBsYXVuY2hlcyB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiB0ZXN0LWNhc2VzIHBlciBkYXkpLicsIldpZGdldHMuRGVzY3JpcHRpb24uY3VtdWxhdGl2ZSI6ItCf0L7QutCw0LfRi9Cy0LDQtdGCINGC0LXQvdC00LXQvdGG0LjRjiDRgNC+0YHRgtCwINGB0YPQvNC80LDRgNC90L7QuSDRgdGC0LDRgtC40YHRgtC40LrQuCDQt9Cw0L/Rg9GB0LrQvtCyINGBINC+0LTQvdC40Lwg0Lgg0YLQtdC8INC20LUg0LrQu9GO0YfQvtC8INCw0YLRgNC40LHRg9GC0LAuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5mbGFreVRlc3RDYXNlcyI6IlNob3dzIHRoZSBUT1AtMjAgdGhlIG1vc3QgZmxha3kgdGVzdCBjYXNlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcmV2aW91cyBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLmludmVzdGlnYXRlZFRyZW5kIjonLSBpbiAiTGF1bmNoIE1vZGUiIHNob3dzIHdoZXRoZXIgdGhlIGxhdW5jaGVzIGFyZSBhbmFseXplZCBvciBub3QgKHRoZSBwZXJjZW50YWdlIG9mICJJbnZlc3RpZ2F0ZWQiLyJUbyBJbnZlc3RpZ2F0ZSIpIGZyb20gcnVuIHRvIHJ1biw8YnI+IC0gaW4gIlRpbWVsaW5lIE1vZGUiIHNob3dzIHBlcmNlbnRhZ2Ugb2YgIkludmVzdGlnYXRlZCIvIlRvIEludmVzdGlnYXRlIiB0ZXN0cyBpbiBhbGwgcnVucyBwZXIgZGF5IGRpc3RyaWJ1dGVkIGJ5IGRhdGVzLicsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoU3RhdGlzdGljcyI6IlNob3dzIHN0YXRpc3RpY3Mgb2YgdGhlIGxhc3QgbGF1bmNoIGRpdmlkZWQgaW50byAyIHNlY3Rpb25zOjwvYnI+IC0gU2tpcHBlZCwgUGFzc2VkLCBGYWlsZWQgPC9icj4gLSBQcm9kdWN0IEJ1ZywgU3lzdGVtIElzc3VlLCBUbyBJbnZlc3RpZ2F0ZSwgQXV0b21hdGlvbiBCdWdzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiOiJBbGxvd3MgdG8gY29tcGFyZSBzdGF0aXN0aWNzIGZvciAyIGxhc3QgbGF1bmNoZXMgc2lkZSBieSBzaWRlLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNEdXJhdGlvbkNoYXJ0IjoiU2hvd3MgZHVyYXRpb24gb2YgdGhlIHNlbGVjdGVkIGxhdW5jaGVzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubGF1bmNoZXNUYWJsZSI6IlNob3dzIHRoZSBjb25maWd1cmFibGUgdGFibGUgb2YgbGF1bmNoZXMuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5tb3N0RmFpbGVkVGVzdENhc2VzIjoiU2hvd3MgdGhlIFRPUC0yMCBtb3N0IGZhaWxpbmcgdGVzdCBjYXNlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcmV2aW91cyBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLm1vc3RUaW1lQ29uc3VtaW5nIjoic2hvdyB0aGUgVE9QIDIwIHRoZSBtb3N0IHRpbWUtY29uc3VtaW5nIHRlc3QgY2FzZXMgaW4gdGhlIGxhc3QgZXhlY3V0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF1bmNoLiIsIldpZGdldHMuRGVzY3JpcHRpb24ubm90UGFzc2VkIjoiU2hvd3MgdGhlIHBlcmNlbnQgcmF0aW8gb2Ygbm9uLXBhc3NlZCB0ZXN0IGNhc2VzIChGYWlsZWQgKyBTa2lwcGVkKSB0byBUb3RhbCBjYXNlcyBmcm9tIHJ1biB0byBydW4uIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5vdmVyYWxsU3RhdGlzdGljcyI6IlNob3dzIHN1bW1hcnkgb2YgdGVzdCBjYXNlcyB3aXRoIGVhY2ggc3RhdHVzZXMgaW4gdGhlIHNlbGVjdGVkIGxhdW5jaGVzLiIsIldpZGdldHMuRGVzY3JpcHRpb24ucGFzc2luZ1JhdGVQZXJMYXVuY2giOiJTaG93cyB0aGUgcGVyY2VudGFnZSByYXRpbyBvZiBQYXNzZWQgdGVzdCBjYXNlcyB0byBUb3RhbCBjYXNlcyBmb3IgbGFzdCBydW4gb2Ygc2VsZWN0ZWQgbGF1bmNoLiIsIldpZGdldHMuRGVzY3JpcHRpb24ucGFzc2luZ1JhdGVTdW1tYXJ5IjoiU2hvd3MgdGhlIHBlcmNlbnRhZ2UgcmF0aW8gb2YgUGFzc2VkIHRlc3QgY2FzZXMgdG8gVG90YWwgY2FzZXMgZm9yIHNldCBvZiBsYXVuY2hlcy4iLCJXaWRnZXRzLkRlc2NyaXB0aW9uLnByb2R1Y3RTdGF0dXMiOiJTaG93cyB0aGUgY29uZmlndXJhYmxlIHRhYmxlIHRoYXQgaXMgcmVwcmVzZW50aW5nIGxhdW5jaCBzdGF0aXN0aWNzIG9yIGdyb3VwIHN0YXRpc3RpY3MgYnkgc3BlY2lhbCBmaWx0ZXIuIiwiV2lkZ2V0cy5EZXNjcmlwdGlvbi5zdGF0aXN0aWNUcmVuZCI6Jy0gaW4gIkxhdW5jaCBtb2RlIiBzaG93cyB0aGUgZ3Jvd3RoIHRyZW5kIGluIHRoZSBudW1iZXIgb2YgdGVzdCBjYXNlcyB3aXRoIGVhY2ggc2VsZWN0ZWQgc3RhdHVzZXMgZnJvbSBydW4gdG8gcnVuLDxicj4gLSBpbiAiVGltZWxpbmUgbW9kZSIgc2hvd3Mgc3VtLCBkaXN0cmlidXRlZCBieSBkYXRlcy4nLCJXaWRnZXRzLkRlc2NyaXB0aW9uLnVuaXF1ZUJ1Z1RhYmxlIjoiU2hvd3MgcmVhbCBpZGVudGlmaWVkIGJ1Z3MsIHBvc3RlZCB0byB0aGUgQnVnIFRyYWNraW5nIFN5c3RlbSwgYW5kIGV4aXN0aW5nIGluIHRoZSBCVFMgYnVncywgbG9hZGVkIG9uIHRoZSBwcm9qZWN0LiIsIldpZGdldHMuTmFtZS5hY3Rpdml0eVN0cmVhbSI6IlByb2plY3QgYWN0aXZpdHkgcGFuZWwiLCJXaWRnZXRzLk5hbWUuYnVnVHJlbmQiOiJGYWlsZWQgY2FzZXMgdHJlbmQgY2hhcnQiLCJXaWRnZXRzLk5hbWUuY2FzZXNUcmVuZCI6IlRlc3QtQ2FzZXMgZ3Jvd3RoIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLmN1bXVsYXRpdmUiOiJDdW11bGF0aXZlIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLmZsYWt5VGVzdENhc2VzIjoiRmxha3kgdGVzdCBjYXNlcyB0YWJsZSAoVE9QLTIwKSIsIldpZGdldHMuTmFtZS5pbnZlc3RpZ2F0ZWRUcmVuZCI6IkludmVzdGlnYXRlZCBwZXJjZW50YWdlIG9mIGxhdW5jaGVzIiwiV2lkZ2V0cy5OYW1lLmxhdW5jaFN0YXRpc3RpY3MiOiJMYXVuY2ggZXhlY3V0aW9uIGFuZCBpc3N1ZSBzdGF0aXN0aWMiLCJXaWRnZXRzLk5hbWUubGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiOiJEaWZmZXJlbnQgbGF1bmNoZXMgY29tcGFyaXNvbiBjaGFydCIsIldpZGdldHMuTmFtZS5sYXVuY2hlc0R1cmF0aW9uQ2hhcnQiOiJMYXVuY2hlcyBkdXJhdGlvbiBjaGFydCIsIldpZGdldHMuTmFtZS5sYXVuY2hlc1RhYmxlIjoiTGF1bmNoZXMgdGFibGUiLCJXaWRnZXRzLk5hbWUubW9zdEZhaWxlZFRlc3RDYXNlcyI6Ik1vc3QgZmFpbHVyZSB0ZXN0LWNhc2VzIHRhYmxlIChUT1AtMjApIiwiV2lkZ2V0cy5OYW1lLm1vc3RUaW1lQ29uc3VtaW5nIjoiVGhlIG1vc3QgdGltZS1jb25zdW1pbmcgdGVzdCBjYXNlcyB3aWRnZXQgKFRPUC0yMCkiLCJXaWRnZXRzLk5hbWUubm90UGFzc2VkIjoiTm9uLVBhc3NlZCB0ZXN0LWNhc2VzIHRyZW5kIGNoYXJ0IiwiV2lkZ2V0cy5OYW1lLm92ZXJhbGxTdGF0aXN0aWNzIjoiT3ZlcmFsbCBzdGF0aXN0aWNzIiwiV2lkZ2V0cy5OYW1lLnBhc3NpbmdSYXRlUGVyTGF1bmNoIjoiUGFzc2luZyByYXRlIHBlciBsYXVuY2giLCJXaWRnZXRzLk5hbWUucGFzc2luZ1JhdGVTdW1tYXJ5IjoiUGFzc2luZyByYXRlIHN1bW1hcnkiLCJXaWRnZXRzLk5hbWUucHJvZHVjdFN0YXR1cyI6IlByb2R1Y3Qgc3RhdHVzIiwiV2lkZ2V0cy5OYW1lLnN0YXRpc3RpY1RyZW5kIjoiTGF1bmNoIHN0YXRpc3RpY3MgY2hhcnQiLCJXaWRnZXRzLk5hbWUudW5pcXVlQnVnVGFibGUiOiJVbmlxdWUgYnVncyB0YWJsZSIsIldpZGdldHMuZ3Jvd3Rlc3RDYXNlcyI6Ikdyb3cgdGVzdCBjYXNlcyIsIldpZGdldHMub2ZUZXN0Q2FzZXMiOiLRgtC10YHRgtC+0LLRi9GFINGB0YbQtdC90LDRgNC40LXQsiIsIldpZGdldHMudG90YWxUZXN0Q2FzZXMiOiJUb3RhbCB0ZXN0IGNhc2VzIiwiV2lkZ2V0c0dyaWQubm90aWZpY2F0aW9uLmRlbGV0ZVdpZGdldFN1Y2Nlc3MiOiLQktC40LTQttC10YIg0YPRgdC/0LXRiNC90L4g0YPQtNCw0LvRkdC9IiwiV2l6YXJkSW5mb1NlY3Rpb24uV2lkZ2V0Q29uZmlndXJpbmdTdGVwTGFiZWwiOiJDb25maWd1cmUgd2lkZ2V0IiwiV2l6YXJkSW5mb1NlY3Rpb24uV2lkZ2V0U2F2aW5nU3RlcExhYmVsIjoiU2F2ZSIsIldpemFyZEluZm9TZWN0aW9uLldpZGdldFNlbGVjdGlvblN0ZXBMYWJlbCI6IlNlbGVjdCB3aWRnZXQgdHlwZSIsIldpemFyZEluZm9TZWN0aW9uLmFkZFdpZGdldEJ1dHRvbiI6IkFkZCIsIldpemFyZEluZm9TZWN0aW9uLm5leHRTdGVwQnV0dG9uIjoiTmV4dCBzdGVwIiwiV2l6YXJkSW5mb1NlY3Rpb24ucHJldlN0ZXBCdXR0b24iOiJQcmV2aW91cyBzdGVwIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmFsbFVzZXJzIjoiQWxsIHVzZXJzIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsQ29udGVudCI6IkFyZSB5b3Ugc3VyZSB0byBkZWxldGUgdXNlciA8Yj4ne25hbWV9JzwvYj4/IiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsSGVhZGVyIjoiRGVsZXRlIHVzZXIiLCJhZG1pbmlzdHJhdGVVc2Vyc1BhZ2UuZGVsZXRlTW9kYWxNdWx0aXBsZUNvbnRlbnQiOiJBcmUgeW91IHN1cmUgdG8gZGVsZXRlIHVzZXJzPyA8YnI+IDxiPntuYW1lc308L2I+IiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVIZWFkZXIiOiJEZWxldGUgdXNlcidzIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmVycm9yIjoiRXJyb3Igd2hlbiBkZWxldGluZyB1c2VyIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmVycm9yTXVsdGlwbGUiOiJFcnJvciB3aGVuIGRlbGV0aW5nIHVzZXIncyIsImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5zdWNjZXNzIjoiVXNlciB3YXMgZGVsZXRlZCIsImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5zdWNjZXNzTXVsdGlwbGUiOiJVc2VyJ3Mgd2VyZSBkZWxldGVkIiwiYWRtaW5pc3RyYXRlVXNlcnNQYWdlVG9vbGJhci5hbGxVc2VycyI6Intjb3VudH0gaXRlbXMgc2VsZWN0ZWQiLCJlbWFpbENhc2UubGF1bmNoZXNIaW50Ijoi0JjQvNGPINC30LDQv9GD0YHQutCwINC00L7Qu9C20L3QviDQuNC80LXRgtGMINGA0LDQt9C80LXRgCDQvtGCIDMg0LTQviAyNTYiLCJlbWFpbENhc2UucmVjaXBpZW50c0hpbnQiOiLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhdC+0YLRjyDQsdGLINC+0LTQvdC+0LPQviDQv9C+0LvRg9GH0LDRgtC10LvRjyIsImVtYWlsQ2FzZS50YWdzSGludCI6ItCd0LDQt9Cy0LDQvdC40LUg0LzQtdGC0LrQuCDQtNC+0LvQttC90L4g0LjQvNC10YLRjCDRgNCw0LfQvNC10YAg0L7RgiAzINC00L4gMjU2IiwibGF1bmNoQW5hbHlzaXNNb2RhbC5hbmFseXNlIjoiQW5hbHlzZSIsImxhdW5jaEFuYWx5c2lzTW9kYWwuYmFzZU9wdGlvbnMuYWxsTGF1bmNoZXMiOiJBbGwgbGF1bmNoZXMiLCJsYXVuY2hBbmFseXNpc01vZGFsLmJhc2VPcHRpb25zLmN1cnJlbnQiOiJPbmx5IGN1cnJlbnQgbGF1bmNoIiwibGF1bmNoQW5hbHlzaXNNb2RhbC5iYXNlT3B0aW9ucy53aXRoU2FtZU5hbWUiOiJMYXVuY2hlcyB3aXRoIHRoZSBzYW1lIG5hbWUiLCJsYXVuY2hBbmFseXNpc01vZGFsLml0ZW1PcHRpb25zLmJ5QUEiOiJJdGVtcyBhbmFseXplZCBhdXRvbWF0aWNhbGx5IChieSBBQSkiLCJsYXVuY2hBbmFseXNpc01vZGFsLml0ZW1PcHRpb25zLmludmVzdGlnYXRlIjoiVG8gaW52ZXN0aWdhdGVkIGl0ZW1zIiwibGF1bmNoQW5hbHlzaXNNb2RhbC5pdGVtT3B0aW9ucy5tYW51YWxseSI6Ikl0ZW1zIGFuYWx5emVkIG1hbnVhbGx5IiwibGF1bmNoQW5hbHlzaXNNb2RhbC5tb2RUaXRsZSI6IkNob29zZSB0aGUgYmFzZSBvbiB3aGljaCB0aGUgQXV0byBBbmFseXNpcyB3aWxsIGJlIHBlcmZvcm1lZDoiLCJsYXVuY2hBbmFseXNpc01vZGFsLm9wdGlvbnNUaXRsZSI6IkNob29zZSB0aGUgdGVzdCBpdGVtcyB0aGF0IHNob3VsZCBiZSBhbmFseXplZDoiLCJsYXVuY2hBbmFseXNpc01vZGFsLnN1Y2Nlc3NNZXNzYWdlIjoiQXV0by1hbmFseXplciBoYXMgYmVlbiBzdGFydGVkLiIsImxhdW5jaEFuYWx5c2lzTW9kYWwudGl0bGUiOiJBbmFseXNlIGxhdW5jaGVzIiwibGF1bmNoQW5hbHlzaXNNb2RhbC52YWxpZGF0aW9uLmNob29zZU9wdGlvbiI6IllvdSBjYW4gbm90IHBlcmZvcm0gdGhpcyBvcGVyYXRpb24gdW5sZXNzIGF0IGxlYXN0IG9uZSBpdGVtIGlzIGNob3NlbiIsImxhdW5jaEFuYWx5c2lzTW9kYWwudmFsaWRhdGlvbi5jdXJyZW50TGF1bmNoIjoiWW91IGNhbiBub3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBmb3IgQXV0by1hbmFseXplZCBhbmQgTWFudWFsbHkgYW5hbHl6ZWQgaXRlbXMgc2ltdWx0YW5lb3VzbHkuIFBsZWFzZSBjaG9vc2Ugb25lIG9mIHRoZW0ifX0sIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L29iamVjdC1hc3NpZ24tZGVlcC9kaXN0L29iamVjdEFzc2lnbkRlZXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09PWU/Im51bGwiOnZvaWQgMD09PWU/InVuZGVmaW5lZCI6Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpKT9BcnJheS5pc0FycmF5KGUpPyJhcnJheSI6Im9iamVjdCI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PT1yKGUpP2koZSk6ImFycmF5Ij09PXIoZSk/cyhlKTplfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubWFwKG8pfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09byhlW25dKSk7cmV0dXJuIHR9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG89e2FycmF5QmVoYXZpb3VyOm4uYXJyYXlCZWhhdmlvdXJ8fCJyZXBsYWNlIn0sbD10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZXx8e319KSx1PWV8fHt9LGM9MDtjPGwubGVuZ3RoO2MrKylmb3IodmFyIGQ9bFtjXSxfPU9iamVjdC5rZXlzKGQpLHA9MDtwPF8ubGVuZ3RoO3ArKyl7dmFyIGY9X1twXSxtPWRbZl0saD1yKG0pLGc9cih1W2ZdKTtpZigib2JqZWN0Ij09PWgpaWYoInVuZGVmaW5lZCIhPT1nKXt2YXIgYj0ib2JqZWN0Ij09PWc/dVtmXTp7fTt1W2ZdPWEoe30sW2IsaShtKV0sbyl9ZWxzZSB1W2ZdPWkobSk7ZWxzZSBpZigiYXJyYXkiPT09aClpZigiYXJyYXkiPT09Zyl7dmFyIEU9cyhtKTt1W2ZdPSJtZXJnZSI9PT1vLmFycmF5QmVoYXZpb3VyP3VbZl0uY29uY2F0KEUpOkV9ZWxzZSB1W2ZdPXMobSk7ZWxzZSB1W2ZdPW19cmV0dXJuIHV9dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gYShlLG4pfSxlLmV4cG9ydHMubm9NdXRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBhKHt9LHQpfSxlLmV4cG9ydHMud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBhKGUsdCxuKX19LCIuL25vZGVfbW9kdWxlcy9hZGQtZG9tLWV2ZW50LWxpc3RlbmVyL2xpYi9FdmVudEJhc2VPYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiExfWZ1bmN0aW9uIG8oKXtyZXR1cm4hMH1mdW5jdGlvbiBzKCl7dGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKSx0aGlzLnRhcmdldD12b2lkIDAsdGhpcy5jdXJyZW50VGFyZ2V0PXZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscy5wcm90b3R5cGU9e2lzRXZlbnRPYmplY3Q6MSxjb25zdHJ1Y3RvcjpzLGlzRGVmYXVsdFByZXZlbnRlZDpyLGlzUHJvcGFnYXRpb25TdG9wcGVkOnIsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cixwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPW99LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9b30sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1vLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGhhbHQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOnRoaXMuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcmV2ZW50RGVmYXVsdCgpfX0sdC5kZWZhdWx0PXMsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2FkZC1kb20tZXZlbnQtbGlzdGVuZXIvbGliL0V2ZW50T2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfWZ1bmN0aW9uIHMoKXtyZXR1cm4gX31mdW5jdGlvbiBpKCl7cmV0dXJuIHB9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnR5cGUsbj0iZnVuY3Rpb24iPT10eXBlb2YgZS5zdG9wUHJvcGFnYXRpb258fCJib29sZWFuIj09dHlwZW9mIGUuY2FuY2VsQnViYmxlO3UuZGVmYXVsdC5jYWxsKHRoaXMpLHRoaXMubmF0aXZlRXZlbnQ9ZTt2YXIgcj1pOyJkZWZhdWx0UHJldmVudGVkImluIGU/cj1lLmRlZmF1bHRQcmV2ZW50ZWQ/czppOiJnZXRQcmV2ZW50RGVmYXVsdCJpbiBlP3I9ZS5nZXRQcmV2ZW50RGVmYXVsdCgpP3M6aToicmV0dXJuVmFsdWUiaW4gZSYmKHI9ZS5yZXR1cm5WYWx1ZT09PXA/czppKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1yO3ZhciBvPVtdLGE9dm9pZCAwLGw9dm9pZCAwLGM9Zi5jb25jYXQoKTtmb3IobS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QubWF0Y2goZS5yZWcpJiYoYz1jLmNvbmNhdChlLnByb3BzKSxlLmZpeCYmby5wdXNoKGUuZml4KSl9KSxhPWMubGVuZ3RoO2E7KWw9Y1stLWFdLHRoaXNbbF09ZVtsXTtmb3IoIXRoaXMudGFyZ2V0JiZuJiYodGhpcy50YXJnZXQ9ZS5zcmNFbGVtZW50fHxkb2N1bWVudCksdGhpcy50YXJnZXQmJjM9PT10aGlzLnRhcmdldC5ub2RlVHlwZSYmKHRoaXMudGFyZ2V0PXRoaXMudGFyZ2V0LnBhcmVudE5vZGUpLGE9by5sZW5ndGg7YTspKDAsb1stLWFdKSh0aGlzLGUpO3RoaXMudGltZVN0YW1wPWUudGltZVN0YW1wfHxEYXRlLm5vdygpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9hZGQtZG9tLWV2ZW50LWxpc3RlbmVyL2xpYi9FdmVudEJhc2VPYmplY3QuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksZD1yKGMpLF89ITAscD0hMSxmPVsiYWx0S2V5IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJjdHJsS2V5IiwiY3VycmVudFRhcmdldCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJ0YXJnZXQiLCJ0aW1lU3RhbXAiLCJ2aWV3IiwidHlwZSJdLG09W3tyZWc6L15rZXkvLHByb3BzOlsiY2hhciIsImNoYXJDb2RlIiwia2V5Iiwia2V5Q29kZSIsIndoaWNoIl0sZml4OmZ1bmN0aW9uKGUsdCl7byhlLndoaWNoKSYmKGUud2hpY2g9byh0LmNoYXJDb2RlKT90LmtleUNvZGU6dC5jaGFyQ29kZSksdm9pZCAwPT09ZS5tZXRhS2V5JiYoZS5tZXRhS2V5PWUuY3RybEtleSl9fSx7cmVnOi9edG91Y2gvLHByb3BzOlsidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwidGFyZ2V0VG91Y2hlcyJdfSx7cmVnOi9eaGFzaGNoYW5nZSQvLHByb3BzOlsibmV3VVJMIiwib2xkVVJMIl19LHtyZWc6L15nZXN0dXJlY2hhbmdlJC9pLHByb3BzOlsicm90YXRpb24iLCJzY2FsZSJdfSx7cmVnOi9eKG1vdXNld2hlZWx8RE9NTW91c2VTY3JvbGwpJC8scHJvcHM6W10sZml4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwLG89dm9pZCAwLHM9dC53aGVlbERlbHRhLGk9dC5heGlzLGE9dC53aGVlbERlbHRhWSxsPXQud2hlZWxEZWx0YVgsdT10LmRldGFpbDtzJiYobz1zLzEyMCksdSYmKG89MC0odSUzPT0wP3UvMzp1KSksdm9pZCAwIT09aSYmKGk9PT1lLkhPUklaT05UQUxfQVhJUz8ocj0wLG49MC1vKTppPT09ZS5WRVJUSUNBTF9BWElTJiYobj0wLHI9bykpLHZvaWQgMCE9PWEmJihyPWEvMTIwKSx2b2lkIDAhPT1sJiYobj0tMSpsLzEyMCksbnx8cnx8KHI9byksdm9pZCAwIT09biYmKGUuZGVsdGFYPW4pLHZvaWQgMCE9PXImJihlLmRlbHRhWT1yKSx2b2lkIDAhPT1vJiYoZS5kZWx0YT1vKX19LHtyZWc6L15tb3VzZXxjb250ZXh0bWVudXxjbGlja3xtc3BvaW50ZXJ8KF5ET01Nb3VzZVNjcm9sbCQpL2kscHJvcHM6WyJidXR0b25zIiwiY2xpZW50WCIsImNsaWVudFkiLCJidXR0b24iLCJvZmZzZXRYIiwicmVsYXRlZFRhcmdldCIsIndoaWNoIiwiZnJvbUVsZW1lbnQiLCJ0b0VsZW1lbnQiLCJvZmZzZXRZIiwicGFnZVgiLCJwYWdlWSIsInNjcmVlblgiLCJzY3JlZW5ZIl0sZml4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwLHM9dm9pZCAwLGk9ZS50YXJnZXQsYT10LmJ1dHRvbjtyZXR1cm4gaSYmbyhlLnBhZ2VYKSYmIW8odC5jbGllbnRYKSYmKG49aS5vd25lckRvY3VtZW50fHxkb2N1bWVudCxyPW4uZG9jdW1lbnRFbGVtZW50LHM9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fHMmJnMuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8cyYmcy5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fHMmJnMuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fHMmJnMuY2xpZW50VG9wfHwwKSksZS53aGljaHx8dm9pZCAwPT09YXx8KGUud2hpY2g9MSZhPzE6MiZhPzM6NCZhPzI6MCksIWUucmVsYXRlZFRhcmdldCYmZS5mcm9tRWxlbWVudCYmKGUucmVsYXRlZFRhcmdldD1lLmZyb21FbGVtZW50PT09aT9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KSxlfX1dLGg9dS5kZWZhdWx0LnByb3RvdHlwZTsoMCxkLmRlZmF1bHQpKGEucHJvdG90eXBlLGgse2NvbnN0cnVjdG9yOmEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9cCxoLnByZXZlbnREZWZhdWx0LmNhbGwodGhpcyl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZS5zdG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKTplLmNhbmNlbEJ1YmJsZT1fLGguc3RvcFByb3BhZ2F0aW9uLmNhbGwodGhpcyl9fSksdC5kZWZhdWx0PWEsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2FkZC1kb20tZXZlbnQtbGlzdGVuZXIvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7ZnVuY3Rpb24gbyh0KXt2YXIgcj1uZXcgcy5kZWZhdWx0KHQpO24uY2FsbChlLHIpfWlmKGUuYWRkRXZlbnRMaXN0ZW5lcil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgbj0hMTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHI/bj1yLmNhcHR1cmV8fCExOiJib29sZWFuIj09dHlwZW9mIHImJihuPXIpLGUuYWRkRXZlbnRMaXN0ZW5lcih0LG8scnx8ITEpLHt2OntyZW1vdmU6ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxvLG4pfX19fSgpO2lmKCJvYmplY3QiPT10eXBlb2YgaSlyZXR1cm4gaS52fWVsc2UgaWYoZS5hdHRhY2hFdmVudClyZXR1cm4gZS5hdHRhY2hFdmVudCgib24iK3Qsbykse3JlbW92ZTpmdW5jdGlvbigpe2UuZGV0YWNoRXZlbnQoIm9uIit0LG8pfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2FkZC1kb20tZXZlbnQtbGlzdGVuZXIvbGliL0V2ZW50T2JqZWN0LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9hZGQtcHgtdG8tc3R5bGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7dmFyIG49e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZFJvdzohMCxncmlkQ29sdW1uOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHxuW2VdP3Q6dCsicHgifX0sIi4vbm9kZV9tb2R1bGVzL2FycmF5LXVuaXEvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyktMT09PXQuaW5kZXhPZihlW25dKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIHIoZSl7dmFyIHQ9bmV3IFNldDtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaGFzKGUpJiYodC5hZGQoZSksITApfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1bXTtyZXR1cm4gbmV3IFNldChlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9IlNldCJpbiB0PyJmdW5jdGlvbiI9PXR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2gmJmZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIG5ldyBTZXQoWyEwXSkuZm9yRWFjaChmdW5jdGlvbih0KXtlPXR9KSwhMD09PWV9KCk/ZS5leHBvcnRzPW86ZS5leHBvcnRzPXI6ZS5leHBvcnRzPW59KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL2FycmF5LmZpbmQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9hcnJheS5maW5kL3NyYy9hcnJheS1maW5kLXBvbHlmaWxsLmpzIiksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5maW5kKHQsbil9fSwiLi9ub2RlX21vZHVsZXMvYXJyYXkuZmluZC9zcmMvYXJyYXktZmluZC1wb2x5ZmlsbC5qcyI6ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ImZ1bmN0aW9uIiE9dHlwZW9mIEFycmF5LnByb3RvdHlwZS5maW5kJiYoQXJyYXkucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAnZmluZCcgb2YgbnVsbCIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgbj10aGlzLmxlbmd0aCxyPTA7cjxuO3IrKylpZihlLmNhbGwodCx0aGlzW3JdLHIsdGhpcykpcmV0dXJuIHRoaXNbcl19KX0oKX0sIi4vbm9kZV9tb2R1bGVzL2FycmF5LmZpbmRpbmRleC9zcmMvYXJyYXktZmluZC1pbmRleC1wb2x5ZmlsbC5qcyI6ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ImZ1bmN0aW9uIiE9dHlwZW9mIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgmJihBcnJheS5wcm90b3R5cGUuZmluZEluZGV4PWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ2ZpbmRJbmRleCcgb2YgbnVsbCIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgbj10aGlzLmxlbmd0aCxyPS0xLG89MDtvPG47bysrKWlmKGUuY2FsbCh0LHRoaXNbb10sbyx0aGlzKSl7cj1vO2JyZWFrfXJldHVybiByfSl9KCl9LCIuL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgbz1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyx0KSxvLmw9ITAsby5leHBvcnRzfXZhciBuPXt9O3JldHVybiB0Lm09ZSx0LmM9bix0LmQ9ZnVuY3Rpb24oZSxuLHIpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLCJhIixuKSxufSx0Lm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHQucD0iIix0KHQucz0xMyl9KFtmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS4wIn07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMyKSgid2tzIiksbz1uKDkpLHM9bigwKS5TeW1ib2wsaT0iZnVuY3Rpb24iPT10eXBlb2YgczsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1pJiZzW2VdfHwoaT9zOm8pKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oMikscz1uKDgpLGk9bigyMiksYT1uKDEwKSxsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgdSxjLGQsXyxwPWUmbC5GLGY9ZSZsLkcsbT1lJmwuUyxoPWUmbC5QLGc9ZSZsLkIsYj1mP3I6bT9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsRT1mP286b1t0XXx8KG9bdF09e30pLHk9RS5wcm90b3R5cGV8fChFLnByb3RvdHlwZT17fSk7ZiYmKG49dCk7Zm9yKHUgaW4gbiljPSFwJiZiJiZ2b2lkIDAhPT1iW3VdLGQ9KGM/YjpuKVt1XSxfPWcmJmM/YShkLHIpOmgmJiJmdW5jdGlvbiI9PXR5cGVvZiBkP2EoRnVuY3Rpb24uY2FsbCxkKTpkLGImJmkoYix1LGQsZSZsLlUpLEVbdV0hPWQmJnMoRSx1LF8pLGgmJnlbdV0hPWQmJih5W3VdPWQpfTtyLmNvcmU9byxsLkY9MSxsLkc9MixsLlM9NCxsLlA9OCxsLkI9MTYsbC5XPTMyLGwuVT02NCxsLlI9MTI4LGUuZXhwb3J0cz1sfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxNiksbz1uKDIxKTtlLmV4cG9ydHM9bigzKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmNhbGwodCxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZS5jYWxsKHQsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyOCksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2lmKGUmJnQpe3ZhciBuPUFycmF5LmlzQXJyYXkodCk/dDp0LnNwbGl0KCIsIikscj1lLm5hbWV8fCIiLG89ZS50eXBlfHwiIixzPW8ucmVwbGFjZSgvXC8uKiQvLCIiKTtyZXR1cm4gbi5zb21lKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHJpbSgpO3JldHVybiIuIj09PXQuY2hhckF0KDApP3IudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCh0LnRvTG93ZXJDYXNlKCkpOnQuZW5kc1dpdGgoIi8qIik/cz09PXQucmVwbGFjZSgvXC8uKiQvLCIiKTpvPT09dH0pfXJldHVybiEwfSxuKDE0KSxuKDM0KX0sZnVuY3Rpb24oZSx0LG4pe24oMTUpLGUuZXhwb3J0cz1uKDIpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3KSxvPW4oMjUpKDMpO3Ioci5QK3IuRiohbigzMykoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLGUsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTcpLG89bigxOCkscz1uKDIwKSxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1zKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGkoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oMykmJiFuKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDE5KSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigwKS5kb2N1bWVudCxzPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM/by5jcmVhdGVFbGVtZW50KGUpOnt9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oOCkscz1uKDIzKSxpPW4oOSkoInNyYyIpLGE9RnVuY3Rpb24udG9TdHJpbmcsbD0oIiIrYSkuc3BsaXQoInRvU3RyaW5nIik7bigyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIG47dSYmKHMobiwibmFtZSIpfHxvKG4sIm5hbWUiLHQpKSxlW3RdIT09biYmKHUmJihzKG4saSl8fG8obixpLGVbdF0/IiIrZVt0XTpsLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1yP2VbdF09bjphP2VbdF0/ZVt0XT1uOm8oZSx0LG4pOihkZWxldGUgZVt0XSxvKGUsdCxuKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1tpXXx8YS5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEwKSxvPW4oMjYpLHM9bigyNyksaT1uKDEyKSxhPW4oMjkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PWUsbD0yPT1lLHU9Mz09ZSxjPTQ9PWUsZD02PT1lLF89NT09ZXx8ZCxwPXR8fGE7cmV0dXJuIGZ1bmN0aW9uKHQsYSxmKXtmb3IodmFyIG0saCxnPXModCksYj1vKGcpLEU9cihhLGYsMykseT1pKGIubGVuZ3RoKSx2PTAsVD1uP3AodCx5KTpsP3AodCwwKTp2b2lkIDA7eT52O3YrKylpZigoX3x8diBpbiBiKSYmKG09Ylt2XSxoPUUobSx2LGcpLGUpKWlmKG4pVFt2XT1oO2Vsc2UgaWYoaClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gbTtjYXNlIDY6cmV0dXJuIHY7Y2FzZSAyOlQucHVzaChtKX1lbHNlIGlmKGMpcmV0dXJuITE7cmV0dXJuIGQ/LTE6dXx8Yz9jOlR9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNSk7ZS5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09cihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/cjpuKShlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KHIoZSkpKHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDMxKSxzPW4oNikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG8oZSkmJih0PWUuY29uc3RydWN0b3IsImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQhPT1BcnJheSYmIW8odC5wcm90b3R5cGUpfHwodD12b2lkIDApLHIodCkmJm51bGw9PT0odD10W3NdKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNSk7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PXIoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPXJbIl9fY29yZS1qc19zaGFyZWRfXyJdfHwoclsiX19jb3JlLWpzX3NoYXJlZF9fIl09e30pO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gb1tlXXx8KG9bZV09e30pfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiEhZSYmcihmdW5jdGlvbigpe3Q/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24oZSx0LG4pe24oMzUpLGUuZXhwb3J0cz1uKDIpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcpLG89bigxMikscz1uKDM2KSxpPSIiLmVuZHNXaXRoO3Ioci5QK3IuRipuKDM4KSgiZW5kc1dpdGgiKSwiU3RyaW5nIix7ZW5kc1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9cyh0aGlzLGUsImVuZHNXaXRoIiksbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPW8odC5sZW5ndGgpLGE9dm9pZCAwPT09bj9yOk1hdGgubWluKG8obiksciksbD1TdHJpbmcoZSk7cmV0dXJuIGk/aS5jYWxsKHQsbCxhKTp0LnNsaWNlKGEtbC5sZW5ndGgsYSk9PT1sfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNyksbz1uKDExKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIodCkpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmcjIituKyIgZG9lc24ndCBhY2NlcHQgcmVnZXghIik7cmV0dXJuIFN0cmluZyhvKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89big1KSxzPW4oNikoIm1hdGNoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiByKGUpJiYodm9pZCAwIT09KHQ9ZVtzXSk/ISF0OiJSZWdFeHAiPT1vKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDYpKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5eyIvLi8iW2VdKHQpfWNhdGNoKG4pe3RyeXtyZXR1cm4gdFtyXT0hMSwhIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMH19XSl9LCIuL25vZGVfbW9kdWxlcy9hdXRvbGlua2VyL2Rpc3QvQXV0b2xpbmtlci5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87IWZ1bmN0aW9uKG4scyl7cj1bXSx2b2lkIDAhPT0obz1mdW5jdGlvbigpe3JldHVybiBuLkF1dG9saW5rZXI9cygpfS5hcHBseSh0LHIpKSYmKGUuZXhwb3J0cz1vKX0odGhpcyxmdW5jdGlvbigpey8qIQogKiBBdXRvbGlua2VyLmpzCiAqIDAuMTUuMwogKgogKiBDb3B5cmlnaHQoYykgMjAxNSBHcmVnb3J5IEphY29icyA8Z3JlZ0BncmVnLWphY29icy5jb20+CiAqIE1JVCBMaWNlbnNlZC4gaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKICoKICogaHR0cHM6Ly9naXRodWIuY29tL2dyZWdqYWNvYnMvQXV0b2xpbmtlci5qcwogKi8KdmFyIGU9ZnVuY3Rpb24odCl7ZS5VdGlsLmFzc2lnbih0aGlzLHQpfTtyZXR1cm4gZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsdXJsczohMCxlbWFpbDohMCx0d2l0dGVyOiEwLG5ld1dpbmRvdzohMCxzdHJpcFByZWZpeDohMCx0cnVuY2F0ZTp2b2lkIDAsY2xhc3NOYW1lOiIiLGh0bWxQYXJzZXI6dm9pZCAwLG1hdGNoUGFyc2VyOnZvaWQgMCx0YWdCdWlsZGVyOnZvaWQgMCxsaW5rOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmdldEh0bWxQYXJzZXIoKSxuPXQucGFyc2UoZSkscj0wLG89W10scz0wLGk9bi5sZW5ndGg7czxpO3MrKyl7dmFyIGE9bltzXSxsPWEuZ2V0VHlwZSgpLHU9YS5nZXRUZXh0KCk7aWYoImVsZW1lbnQiPT09bCkiYSI9PT1hLmdldFRhZ05hbWUoKSYmKGEuaXNDbG9zaW5nKCk/cj1NYXRoLm1heChyLTEsMCk6cisrKSxvLnB1c2godSk7ZWxzZSBpZigiZW50aXR5Ij09PWwpby5wdXNoKHUpO2Vsc2UgaWYoMD09PXIpe3ZhciBjPXRoaXMubGlua2lmeVN0cih1KTtvLnB1c2goYyl9ZWxzZSBvLnB1c2godSl9cmV0dXJuIG8uam9pbigiIil9LGxpbmtpZnlTdHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0TWF0Y2hQYXJzZXIoKS5yZXBsYWNlKGUsdGhpcy5jcmVhdGVNYXRjaFJldHVyblZhbCx0aGlzKX0sY3JlYXRlTWF0Y2hSZXR1cm5WYWw6ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMucmVwbGFjZUZuJiYobj10aGlzLnJlcGxhY2VGbi5jYWxsKHRoaXMsdGhpcyx0KSksInN0cmluZyI9PXR5cGVvZiBuP246ITE9PT1uP3QuZ2V0TWF0Y2hlZFRleHQoKTpuIGluc3RhbmNlb2YgZS5IdG1sVGFnP24udG9TdHJpbmcoKTp0aGlzLmdldFRhZ0J1aWxkZXIoKS5idWlsZCh0KS50b1N0cmluZygpfSxnZXRIdG1sUGFyc2VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5odG1sUGFyc2VyO3JldHVybiB0fHwodD10aGlzLmh0bWxQYXJzZXI9bmV3IGUuaHRtbFBhcnNlci5IdG1sUGFyc2VyKSx0fSxnZXRNYXRjaFBhcnNlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hQYXJzZXI7cmV0dXJuIHR8fCh0PXRoaXMubWF0Y2hQYXJzZXI9bmV3IGUubWF0Y2hQYXJzZXIuTWF0Y2hQYXJzZXIoe3VybHM6dGhpcy51cmxzLGVtYWlsOnRoaXMuZW1haWwsdHdpdHRlcjp0aGlzLnR3aXR0ZXIsc3RyaXBQcmVmaXg6dGhpcy5zdHJpcFByZWZpeH0pKSx0fSxnZXRUYWdCdWlsZGVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50YWdCdWlsZGVyO3JldHVybiB0fHwodD10aGlzLnRhZ0J1aWxkZXI9bmV3IGUuQW5jaG9yVGFnQnVpbGRlcih7bmV3V2luZG93OnRoaXMubmV3V2luZG93LHRydW5jYXRlOnRoaXMudHJ1bmNhdGUsY2xhc3NOYW1lOnRoaXMuY2xhc3NOYW1lfSkpLHR9fSxlLmxpbms9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGUobikubGluayh0KX0sZS5tYXRjaD17fSxlLmh0bWxQYXJzZXI9e30sZS5tYXRjaFBhcnNlcj17fSxlLlV0aWw9e2Fic3RyYWN0TWV0aG9kOmZ1bmN0aW9uKCl7dGhyb3ciYWJzdHJhY3QifSxhc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKTtyZXR1cm4gZX0sZXh0ZW5kOmZ1bmN0aW9uKHQsbil7dmFyIHI9dC5wcm90b3R5cGUsbz1mdW5jdGlvbigpe307by5wcm90b3R5cGU9cjt2YXIgcztzPW4uaGFzT3duUHJvcGVydHkoImNvbnN0cnVjdG9yIik/bi5jb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3IuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgaT1zLnByb3RvdHlwZT1uZXcgbztyZXR1cm4gaS5jb25zdHJ1Y3Rvcj1zLGkuc3VwZXJjbGFzcz1yLGRlbGV0ZSBuLmNvbnN0cnVjdG9yLGUuVXRpbC5hc3NpZ24oaSxuKSxzfSxlbGxpcHNpczpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUubGVuZ3RoPnQmJihuPW51bGw9PW4/Ii4uIjpuLGU9ZS5zdWJzdHJpbmcoMCx0LW4ubGVuZ3RoKStuKSxlfSxpbmRleE9mOmZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpcmV0dXJuIGUuaW5kZXhPZih0KTtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LHNwbGl0QW5kQ2FwdHVyZTpmdW5jdGlvbihlLHQpe2lmKCF0Lmdsb2JhbCl0aHJvdyBuZXcgRXJyb3IoImBzcGxpdFJlZ2V4YCBtdXN0IGhhdmUgdGhlICdnJyBmbGFnIHNldCIpO2Zvcih2YXIgbixyPVtdLG89MDtuPXQuZXhlYyhlKTspci5wdXNoKGUuc3Vic3RyaW5nKG8sbi5pbmRleCkpLHIucHVzaChuWzBdKSxvPW4uaW5kZXgrblswXS5sZW5ndGg7cmV0dXJuIHIucHVzaChlLnN1YnN0cmluZyhvKSkscn19LGUuSHRtbFRhZz1lLlV0aWwuZXh0ZW5kKE9iamVjdCx7d2hpdGVzcGFjZVJlZ2V4Oi9ccysvLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2UuVXRpbC5hc3NpZ24odGhpcyx0KSx0aGlzLmlubmVySHRtbD10aGlzLmlubmVySHRtbHx8dGhpcy5pbm5lckhUTUx9LHNldFRhZ05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGFnTmFtZT1lLHRoaXN9LGdldFRhZ05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdOYW1lfHwiIn0sc2V0QXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdldEF0dHJzKClbZV09dCx0aGlzfSxnZXRBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldEF0dHJzKClbZV19LHNldEF0dHJzOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuZ2V0QXR0cnMoKTtyZXR1cm4gZS5VdGlsLmFzc2lnbihuLHQpLHRoaXN9LGdldEF0dHJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXR0cnN8fCh0aGlzLmF0dHJzPXt9KX0sc2V0Q2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0QXR0cigiY2xhc3MiLGUpfSxhZGRDbGFzczpmdW5jdGlvbih0KXtmb3IodmFyIG4scj10aGlzLmdldENsYXNzKCksbz10aGlzLndoaXRlc3BhY2VSZWdleCxzPWUuVXRpbC5pbmRleE9mLGk9cj9yLnNwbGl0KG8pOltdLGE9dC5zcGxpdChvKTtuPWEuc2hpZnQoKTspLTE9PT1zKGksbikmJmkucHVzaChuKTtyZXR1cm4gdGhpcy5nZXRBdHRycygpLmNsYXNzPWkuam9pbigiICIpLHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPXRoaXMuZ2V0Q2xhc3MoKSxvPXRoaXMud2hpdGVzcGFjZVJlZ2V4LHM9ZS5VdGlsLmluZGV4T2YsaT1yP3Iuc3BsaXQobyk6W10sYT10LnNwbGl0KG8pO2kubGVuZ3RoJiYobj1hLnNoaWZ0KCkpOyl7dmFyIGw9cyhpLG4pOy0xIT09bCYmaS5zcGxpY2UobCwxKX1yZXR1cm4gdGhpcy5nZXRBdHRycygpLmNsYXNzPWkuam9pbigiICIpLHRoaXN9LGdldENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cnMoKS5jbGFzc3x8IiJ9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09KCIgIit0aGlzLmdldENsYXNzKCkrIiAiKS5pbmRleE9mKCIgIitlKyIgIil9LHNldElubmVySHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbm5lckh0bWw9ZSx0aGlzfSxnZXRJbm5lckh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lckh0bWx8fCIifSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VGFnTmFtZSgpLHQ9dGhpcy5idWlsZEF0dHJzU3RyKCk7cmV0dXJuIHQ9dD8iICIrdDoiIixbIjwiLGUsdCwiPiIsdGhpcy5nZXRJbm5lckh0bWwoKSwiPC8iLGUsIj4iXS5qb2luKCIiKX0sYnVpbGRBdHRyc1N0cjpmdW5jdGlvbigpe2lmKCF0aGlzLmF0dHJzKXJldHVybiIiO3ZhciBlPXRoaXMuZ2V0QXR0cnMoKSx0PVtdO2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQucHVzaChuKyc9IicrZVtuXSsnIicpO3JldHVybiB0LmpvaW4oIiAiKX19KSxlLkFuY2hvclRhZ0J1aWxkZXI9ZS5VdGlsLmV4dGVuZChPYmplY3Qse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2UuVXRpbC5hc3NpZ24odGhpcyx0KX0sYnVpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlLkh0bWxUYWcoe3RhZ05hbWU6ImEiLGF0dHJzOnRoaXMuY3JlYXRlQXR0cnModC5nZXRUeXBlKCksdC5nZXRBbmNob3JIcmVmKCkpLGlubmVySHRtbDp0aGlzLnByb2Nlc3NBbmNob3JUZXh0KHQuZ2V0QW5jaG9yVGV4dCgpKX0pfSxjcmVhdGVBdHRyczpmdW5jdGlvbihlLHQpe3ZhciBuPXtocmVmOnR9LHI9dGhpcy5jcmVhdGVDc3NDbGFzcyhlKTtyZXR1cm4gciYmKG4uY2xhc3M9ciksdGhpcy5uZXdXaW5kb3cmJihuLnRhcmdldD0iX2JsYW5rIiksbn0sY3JlYXRlQ3NzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbGFzc05hbWU7cmV0dXJuIHQ/dCsiICIrdCsiLSIrZToiIn0scHJvY2Vzc0FuY2hvclRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5kb1RydW5jYXRlKGUpfSxkb1RydW5jYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlLlV0aWwuZWxsaXBzaXModCx0aGlzLnRydW5jYXRlfHxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfX0pLGUuaHRtbFBhcnNlci5IdG1sUGFyc2VyPWUuVXRpbC5leHRlbmQoT2JqZWN0LHtodG1sUmVnZXg6ZnVuY3Rpb24oKXt2YXIgZT0vWzAtOWEtekEtWl1bMC05YS16QS1aOl0qLyx0PS9bXlxzXDAiJz5cLz1ceDAxLVx4MUZceDdGXSsvLG49Lyg/OiJbXiJdKj8ifCdbXiddKj8nfFteJyI9PD5gXHNdKykvLHI9dC5zb3VyY2UrIig/Olxccyo9XFxzKiIrbi5zb3VyY2UrIik/IjtyZXR1cm4gbmV3IFJlZ0V4cChbIig/OiIsIjwoIURPQ1RZUEUpIiwiKD86IiwiXFxzKyIsIig/OiIsciwifCIsbi5zb3VyY2UrIikiLCIpKiIsIj4iLCIpIiwifCIsIig/OiIsIjwoLyk/IiwiKCIrZS5zb3VyY2UrIikiLCIoPzoiLCJcXHMrIixyLCIpKiIsIlxccyovPyIsIj4iLCIpIl0uam9pbigiIiksImdpIil9KCksaHRtbENoYXJhY3RlckVudGl0aWVzUmVnZXg6LygmbmJzcDt8JiMxNjA7fCZsdDt8JiM2MDt8Jmd0O3wmIzYyO3wmcXVvdDt8JiMzNDt8JiMzOTspL2dpLHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9dGhpcy5odG1sUmVnZXgsbz0wLHM9W107bnVsbCE9PSh0PXIuZXhlYyhlKSk7KXt2YXIgaT10WzBdLGE9dFsxXXx8dFszXSxsPSEhdFsyXSx1PWUuc3Vic3RyaW5nKG8sdC5pbmRleCk7dSYmKG49dGhpcy5wYXJzZVRleHRBbmRFbnRpdHlOb2Rlcyh1KSxzLnB1c2guYXBwbHkocyxuKSkscy5wdXNoKHRoaXMuY3JlYXRlRWxlbWVudE5vZGUoaSxhLGwpKSxvPXQuaW5kZXgraS5sZW5ndGh9aWYobzxlLmxlbmd0aCl7dmFyIGM9ZS5zdWJzdHJpbmcobyk7YyYmKG49dGhpcy5wYXJzZVRleHRBbmRFbnRpdHlOb2RlcyhjKSxzLnB1c2guYXBwbHkocyxuKSl9cmV0dXJuIHN9LHBhcnNlVGV4dEFuZEVudGl0eU5vZGVzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1bXSxyPWUuVXRpbC5zcGxpdEFuZENhcHR1cmUodCx0aGlzLmh0bWxDaGFyYWN0ZXJFbnRpdGllc1JlZ2V4KSxvPTAscz1yLmxlbmd0aDtvPHM7bys9Mil7dmFyIGk9cltvXSxhPXJbbysxXTtpJiZuLnB1c2godGhpcy5jcmVhdGVUZXh0Tm9kZShpKSksYSYmbi5wdXNoKHRoaXMuY3JlYXRlRW50aXR5Tm9kZShhKSl9cmV0dXJuIG59LGNyZWF0ZUVsZW1lbnROb2RlOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IGUuaHRtbFBhcnNlci5FbGVtZW50Tm9kZSh7dGV4dDp0LHRhZ05hbWU6bi50b0xvd2VyQ2FzZSgpLGNsb3Npbmc6cn0pfSxjcmVhdGVFbnRpdHlOb2RlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZS5odG1sUGFyc2VyLkVudGl0eU5vZGUoe3RleHQ6dH0pfSxjcmVhdGVUZXh0Tm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUuaHRtbFBhcnNlci5UZXh0Tm9kZSh7dGV4dDp0fSl9fSksZS5odG1sUGFyc2VyLkh0bWxOb2RlPWUuVXRpbC5leHRlbmQoT2JqZWN0LHt0ZXh0OiIiLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2UuVXRpbC5hc3NpZ24odGhpcyx0KX0sZ2V0VHlwZTplLlV0aWwuYWJzdHJhY3RNZXRob2QsZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHR9fSksZS5odG1sUGFyc2VyLkVsZW1lbnROb2RlPWUuVXRpbC5leHRlbmQoZS5odG1sUGFyc2VyLkh0bWxOb2RlLHt0YWdOYW1lOiIiLGNsb3Npbmc6ITEsZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJlbGVtZW50In0sZ2V0VGFnTmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWV9LGlzQ2xvc2luZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb3Npbmd9fSksZS5odG1sUGFyc2VyLkVudGl0eU5vZGU9ZS5VdGlsLmV4dGVuZChlLmh0bWxQYXJzZXIuSHRtbE5vZGUse2dldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW50aXR5In19KSxlLmh0bWxQYXJzZXIuVGV4dE5vZGU9ZS5VdGlsLmV4dGVuZChlLmh0bWxQYXJzZXIuSHRtbE5vZGUse2dldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idGV4dCJ9fSksZS5tYXRjaFBhcnNlci5NYXRjaFBhcnNlcj1lLlV0aWwuZXh0ZW5kKE9iamVjdCx7dXJsczohMCxlbWFpbDohMCx0d2l0dGVyOiEwLHN0cmlwUHJlZml4OiEwLG1hdGNoZXJSZWdleDpmdW5jdGlvbigpe3ZhciBlPS8oXnxbXlx3XSlAKFx3ezEsMTV9KS8sdD0vKD86W1wtOzomPVwrXCQsXHdcLl0rQCkvLG49Lyg/OltBLVphLXpdWy0uK0EtWmEtejAtOV0rOig/IVtBLVphLXpdWy0uK0EtWmEtejAtOV0rOlwvXC8pKD8hXGQrXC8/KSg/OlwvXC8pPykvLHI9Lyg/Ond3d1wuKS8sbz0vW0EtWmEtejAtOVwuXC1dKltBLVphLXowLTlcLV0vLHM9L1wuKD86aW50ZXJuYXRpb25hbHxjb25zdHJ1Y3Rpb258Y29udHJhY3RvcnN8ZW50ZXJwcmlzZXN8cGhvdG9ncmFwaHl8cHJvZHVjdGlvbnN8Zm91bmRhdGlvbnxpbW1vYmlsaWVufGluZHVzdHJpZXN8bWFuYWdlbWVudHxwcm9wZXJ0aWVzfHRlY2hub2xvZ3l8Y2hyaXN0bWFzfGNvbW11bml0eXxkaXJlY3Rvcnl8ZWR1Y2F0aW9ufGVxdWlwbWVudHxpbnN0aXR1dGV8bWFya2V0aW5nfHNvbHV0aW9uc3x2YWNhdGlvbnN8YmFyZ2FpbnN8Ym91dGlxdWV8YnVpbGRlcnN8Y2F0ZXJpbmd8Y2xlYW5pbmd8Y2xvdGhpbmd8Y29tcHV0ZXJ8ZGVtb2NyYXR8ZGlhbW9uZHN8Z3JhcGhpY3N8aG9sZGluZ3N8bGlnaHRpbmd8cGFydG5lcnN8cGx1bWJpbmd8c3VwcGxpZXN8dHJhaW5pbmd8dmVudHVyZXN8YWNhZGVteXxjYXJlZXJzfGNvbXBhbnl8Y3J1aXNlc3xkb21haW5zfGV4cG9zZWR8ZmxpZ2h0c3xmbG9yaXN0fGdhbGxlcnl8Z3VpdGFyc3xob2xpZGF5fGtpdGNoZW58bmV1c3Rhcnxva2luYXdhfHJlY2lwZXN8cmVudGFsc3xyZXZpZXdzfHNoaWtzaGF8c2luZ2xlc3xzdXBwb3J0fHN5c3RlbXN8YWdlbmN5fGJlcmxpbnxjYW1lcmF8Y2VudGVyfGNvZmZlZXxjb25kb3N8ZGF0aW5nfGVzdGF0ZXxldmVudHN8ZXhwZXJ0fGZ1dGJvbHxrYXVmZW58bHV4dXJ5fG1haXNvbnxtb25hc2h8bXVzZXVtfG5hZ295YXxwaG90b3N8cmVwYWlyfHJlcG9ydHxzb2NpYWx8c3VwcGx5fHRhdHRvb3x0aWVuZGF8dHJhdmVsfHZpYWplc3x2aWxsYXN8dmlzaW9ufHZvdGluZ3x2b3lhZ2V8YWN0b3J8YnVpbGR8Y2FyZHN8Y2hlYXB8Y29kZXN8ZGFuY2V8ZW1haWx8Z2xhc3N8aG91c2V8bWFuZ298bmluamF8cGFydHN8cGhvdG98c2hvZXN8c29sYXJ8dG9kYXl8dG9reW98dG9vbHN8d2F0Y2h8d29ya3N8YWVyb3xhcnBhfGFzaWF8YmVzdHxiaWtlfGJsdWV8YnV6enxjYW1wfGNsdWJ8Y29vbHxjb29wfGZhcm18ZmlzaHxnaWZ0fGd1cnV8aW5mb3xqb2JzfGtpd2l8a3JlZHxsYW5kfGxpbW98bGlua3xtZW51fG1vYml8bW9kYXxuYW1lfHBpY3N8cGlua3xwb3N0fHFwb258cmljaHxydWhyfHNleHl8dGlwc3x2b3RlfHZvdG98d2FuZ3x3aWVufHdpa2l8em9uZXxiYXJ8YmlkfGJpenxjYWJ8Y2F0fGNlb3xjb218ZWR1fGdvdnxpbnR8a2ltfG1pbHxuZXR8b25sfG9yZ3xwcm98cHVifHJlZHx0ZWx8dW5vfHdlZHx4eHh8eHl6fGFjfGFkfGFlfGFmfGFnfGFpfGFsfGFtfGFufGFvfGFxfGFyfGFzfGF0fGF1fGF3fGF4fGF6fGJhfGJifGJkfGJlfGJmfGJnfGJofGJpfGJqfGJtfGJufGJvfGJyfGJzfGJ0fGJ2fGJ3fGJ5fGJ6fGNhfGNjfGNkfGNmfGNnfGNofGNpfGNrfGNsfGNtfGNufGNvfGNyfGN1fGN2fGN3fGN4fGN5fGN6fGRlfGRqfGRrfGRtfGRvfGR6fGVjfGVlfGVnfGVyfGVzfGV0fGV1fGZpfGZqfGZrfGZtfGZvfGZyfGdhfGdifGdkfGdlfGdmfGdnfGdofGdpfGdsfGdtfGdufGdwfGdxfGdyfGdzfGd0fGd1fGd3fGd5fGhrfGhtfGhufGhyfGh0fGh1fGlkfGllfGlsfGltfGlufGlvfGlxfGlyfGlzfGl0fGplfGptfGpvfGpwfGtlfGtnfGtofGtpfGttfGtufGtwfGtyfGt3fGt5fGt6fGxhfGxifGxjfGxpfGxrfGxyfGxzfGx0fGx1fGx2fGx5fG1hfG1jfG1kfG1lfG1nfG1ofG1rfG1sfG1tfG1ufG1vfG1wfG1xfG1yfG1zfG10fG11fG12fG13fG14fG15fG16fG5hfG5jfG5lfG5mfG5nfG5pfG5sfG5vfG5wfG5yfG51fG56fG9tfHBhfHBlfHBmfHBnfHBofHBrfHBsfHBtfHBufHByfHBzfHB0fHB3fHB5fHFhfHJlfHJvfHJzfHJ1fHJ3fHNhfHNifHNjfHNkfHNlfHNnfHNofHNpfHNqfHNrfHNsfHNtfHNufHNvfHNyfHN0fHN1fHN2fHN4fHN5fHN6fHRjfHRkfHRmfHRnfHRofHRqfHRrfHRsfHRtfHRufHRvfHRwfHRyfHR0fHR2fHR3fHR6fHVhfHVnfHVrfHVzfHV5fHV6fHZhfHZjfHZlfHZnfHZpfHZufHZ1fHdmfHdzfHllfHl0fHphfHptfHp3KVxiLyxpPS9bXC1BLVphLXowLTkrJkAjXC8lPX5fKCl8JyQqXFtcXT8hOiwuO10qW1wtQS1aYS16MC05KyZAI1wvJT1+XygpfCckKlxbXF1dLztyZXR1cm4gbmV3IFJlZ0V4cChbIigiLGUuc291cmNlLCIpIiwifCIsIigiLHQuc291cmNlLG8uc291cmNlLHMuc291cmNlLCIpIiwifCIsIigiLCIoPzoiLCIoIixuLnNvdXJjZSxvLnNvdXJjZSwiKSIsInwiLCIoPzoiLCIoLj8vLyk/IixyLnNvdXJjZSxvLnNvdXJjZSwiKSIsInwiLCIoPzoiLCIoLj8vLyk/IixvLnNvdXJjZSxzLnNvdXJjZSwiKSIsIikiLCIoPzoiK2kuc291cmNlKyIpPyIsIikiXS5qb2luKCIiKSwiZ2kiKX0oKSxjaGFyQmVmb3JlUHJvdG9jb2xSZWxNYXRjaFJlZ2V4Oi9eKC4pP1wvXC8vLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2UuVXRpbC5hc3NpZ24odGhpcyx0KSx0aGlzLm1hdGNoVmFsaWRhdG9yPW5ldyBlLk1hdGNoVmFsaWRhdG9yfSxyZXBsYWNlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3JldHVybiBlLnJlcGxhY2UodGhpcy5tYXRjaGVyUmVnZXgsZnVuY3Rpb24oZSxvLHMsaSxhLGwsdSxjLGQpe3ZhciBfPXIucHJvY2Vzc0NhbmRpZGF0ZU1hdGNoKGUsbyxzLGksYSxsLHUsYyxkKTtpZihfKXt2YXIgcD10LmNhbGwobixfLm1hdGNoKTtyZXR1cm4gXy5wcmVmaXhTdHIrcCtfLnN1ZmZpeFN0cn1yZXR1cm4gZX0pfSxwcm9jZXNzQ2FuZGlkYXRlTWF0Y2g6ZnVuY3Rpb24odCxuLHIsbyxzLGksYSxsLHUpe3ZhciBjLGQ9bHx8dSxfPSIiLHA9IiI7aWYobiYmIXRoaXMudHdpdHRlcnx8cyYmIXRoaXMuZW1haWx8fGkmJiF0aGlzLnVybHN8fCF0aGlzLm1hdGNoVmFsaWRhdG9yLmlzVmFsaWRNYXRjaChpLGEsZCkpcmV0dXJuIG51bGw7aWYodGhpcy5tYXRjaEhhc1VuYmFsYW5jZWRDbG9zaW5nUGFyZW4odCkmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkscD0iKSIpLHMpYz1uZXcgZS5tYXRjaC5FbWFpbCh7bWF0Y2hlZFRleHQ6dCxlbWFpbDpzfSk7ZWxzZSBpZihuKXImJihfPXIsdD10LnNsaWNlKDEpKSxjPW5ldyBlLm1hdGNoLlR3aXR0ZXIoe21hdGNoZWRUZXh0OnQsdHdpdHRlckhhbmRsZTpvfSk7ZWxzZXtpZihkKXt2YXIgZj1kLm1hdGNoKHRoaXMuY2hhckJlZm9yZVByb3RvY29sUmVsTWF0Y2hSZWdleClbMV18fCIiO2YmJihfPWYsdD10LnNsaWNlKDEpKX1jPW5ldyBlLm1hdGNoLlVybCh7bWF0Y2hlZFRleHQ6dCx1cmw6dCxwcm90b2NvbFVybE1hdGNoOiEhYSxwcm90b2NvbFJlbGF0aXZlTWF0Y2g6ISFkLHN0cmlwUHJlZml4OnRoaXMuc3RyaXBQcmVmaXh9KX1yZXR1cm57cHJlZml4U3RyOl8sc3VmZml4U3RyOnAsbWF0Y2g6Y319LG1hdGNoSGFzVW5iYWxhbmNlZENsb3NpbmdQYXJlbjpmdW5jdGlvbihlKXtpZigiKSI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKSl7dmFyIHQ9ZS5tYXRjaCgvXCgvZyksbj1lLm1hdGNoKC9cKS9nKTtpZigodCYmdC5sZW5ndGh8fDApPChuJiZuLmxlbmd0aHx8MCkpcmV0dXJuITB9cmV0dXJuITF9fSksZS5NYXRjaFZhbGlkYXRvcj1lLlV0aWwuZXh0ZW5kKE9iamVjdCx7aW52YWxpZFByb3RvY29sUmVsTWF0Y2hSZWdleDovXltcd11cL1wvLyxoYXNGdWxsUHJvdG9jb2xSZWdleDovXltBLVphLXpdWy0uK0EtWmEtejAtOV0rOlwvXC8vLHVyaVNjaGVtZVJlZ2V4Oi9eW0EtWmEtel1bLS4rQS1aYS16MC05XSs6LyxoYXNXb3JkQ2hhckFmdGVyUHJvdG9jb2xSZWdleDovOlteXHNdKj9bQS1aYS16XS8saXNWYWxpZE1hdGNoOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKHQmJiF0aGlzLmlzVmFsaWRVcmlTY2hlbWUodCl8fHRoaXMudXJsTWF0Y2hEb2VzTm90SGF2ZVByb3RvY29sT3JEb3QoZSx0KXx8dGhpcy51cmxNYXRjaERvZXNOb3RIYXZlQXRMZWFzdE9uZVdvcmRDaGFyKGUsdCl8fHRoaXMuaXNJbnZhbGlkUHJvdG9jb2xSZWxhdGl2ZU1hdGNoKG4pKX0saXNWYWxpZFVyaVNjaGVtZTpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHRoaXMudXJpU2NoZW1lUmVnZXgpWzBdLnRvTG93ZXJDYXNlKCk7cmV0dXJuImphdmFzY3JpcHQ6IiE9PXQmJiJ2YnNjcmlwdDoiIT09dH0sdXJsTWF0Y2hEb2VzTm90SGF2ZVByb3RvY29sT3JEb3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCFlfHx0JiZ0aGlzLmhhc0Z1bGxQcm90b2NvbFJlZ2V4LnRlc3QodCl8fC0xIT09ZS5pbmRleE9mKCIuIikpfSx1cmxNYXRjaERvZXNOb3RIYXZlQXRMZWFzdE9uZVdvcmRDaGFyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiYhdGhpcy5oYXNXb3JkQ2hhckFmdGVyUHJvdG9jb2xSZWdleC50ZXN0KGUpfSxpc0ludmFsaWRQcm90b2NvbFJlbGF0aXZlTWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZ0aGlzLmludmFsaWRQcm90b2NvbFJlbE1hdGNoUmVnZXgudGVzdChlKX19KSxlLm1hdGNoLk1hdGNoPWUuVXRpbC5leHRlbmQoT2JqZWN0LHtjb25zdHJ1Y3RvcjpmdW5jdGlvbih0KXtlLlV0aWwuYXNzaWduKHRoaXMsdCl9LGdldFR5cGU6ZS5VdGlsLmFic3RyYWN0TWV0aG9kLGdldE1hdGNoZWRUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlZFRleHR9LGdldEFuY2hvckhyZWY6ZS5VdGlsLmFic3RyYWN0TWV0aG9kLGdldEFuY2hvclRleHQ6ZS5VdGlsLmFic3RyYWN0TWV0aG9kfSksZS5tYXRjaC5FbWFpbD1lLlV0aWwuZXh0ZW5kKGUubWF0Y2guTWF0Y2gse2dldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifSxnZXRFbWFpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtYWlsfSxnZXRBbmNob3JIcmVmOmZ1bmN0aW9uKCl7cmV0dXJuIm1haWx0bzoiK3RoaXMuZW1haWx9LGdldEFuY2hvclRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWFpbH19KSxlLm1hdGNoLlR3aXR0ZXI9ZS5VdGlsLmV4dGVuZChlLm1hdGNoLk1hdGNoLHtnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInR3aXR0ZXIifSxnZXRUd2l0dGVySGFuZGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHdpdHRlckhhbmRsZX0sZ2V0QW5jaG9ySHJlZjpmdW5jdGlvbigpe3JldHVybiJodHRwczovL3R3aXR0ZXIuY29tLyIrdGhpcy50d2l0dGVySGFuZGxlfSxnZXRBbmNob3JUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIkAiK3RoaXMudHdpdHRlckhhbmRsZX19KSxlLm1hdGNoLlVybD1lLlV0aWwuZXh0ZW5kKGUubWF0Y2guTWF0Y2gse3VybFByZWZpeFJlZ2V4Oi9eKGh0dHBzPzpcL1wvKT8od3d3XC4pPy9pLHByb3RvY29sUmVsYXRpdmVSZWdleDovXlwvXC8vLHByb3RvY29sUHJlcGVuZGVkOiExLGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn0sZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51cmw7cmV0dXJuIHRoaXMucHJvdG9jb2xSZWxhdGl2ZU1hdGNofHx0aGlzLnByb3RvY29sVXJsTWF0Y2h8fHRoaXMucHJvdG9jb2xQcmVwZW5kZWR8fChlPXRoaXMudXJsPSJodHRwOi8vIitlLHRoaXMucHJvdG9jb2xQcmVwZW5kZWQ9ITApLGV9LGdldEFuY2hvckhyZWY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRVcmwoKS5yZXBsYWNlKC8mYW1wOy9nLCImIil9LGdldEFuY2hvclRleHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFVybCgpO3JldHVybiB0aGlzLnByb3RvY29sUmVsYXRpdmVNYXRjaCYmKGU9dGhpcy5zdHJpcFByb3RvY29sUmVsYXRpdmVQcmVmaXgoZSkpLHRoaXMuc3RyaXBQcmVmaXgmJihlPXRoaXMuc3RyaXBVcmxQcmVmaXgoZSkpLGU9dGhpcy5yZW1vdmVUcmFpbGluZ1NsYXNoKGUpfSxzdHJpcFVybFByZWZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHRoaXMudXJsUHJlZml4UmVnZXgsIiIpfSxzdHJpcFByb3RvY29sUmVsYXRpdmVQcmVmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSh0aGlzLnByb3RvY29sUmVsYXRpdmVSZWdleCwiIil9LHJlbW92ZVRyYWlsaW5nU2xhc2g6ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoZS5sZW5ndGgtMSkmJihlPWUuc2xpY2UoMCwtMSkpLGV9fSksZX0pfSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIil9LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzIiksdT0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmJ0b2EmJndpbmRvdy5idG9hLmJpbmQod2luZG93KXx8bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnRvYS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxjKXt2YXIgZD1lLmRhdGEsXz1lLmhlYWRlcnM7ci5pc0Zvcm1EYXRhKGQpJiZkZWxldGUgX1siQ29udGVudC1UeXBlIl07dmFyIHA9bmV3IFhNTEh0dHBSZXF1ZXN0LGY9Im9ucmVhZHlzdGF0ZWNoYW5nZSIsbT0hMTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5YRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBwfHxhKGUudXJsKXx8KHA9bmV3IHdpbmRvdy5YRG9tYWluUmVxdWVzdCxmPSJvbmxvYWQiLG09ITAscC5vbnByb2dyZXNzPWZ1bmN0aW9uKCl7fSxwLm9udGltZW91dD1mdW5jdGlvbigpe30pLGUuYXV0aCl7dmFyIGg9ZS5hdXRoLnVzZXJuYW1lfHwiIixnPWUuYXV0aC5wYXNzd29yZHx8IiI7Xy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK3UoaCsiOiIrZyl9aWYocC5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCkscyhlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxwLnRpbWVvdXQ9ZS50aW1lb3V0LHBbZl09ZnVuY3Rpb24oKXtpZihwJiYoND09PXAucmVhZHlTdGF0ZXx8bSkmJigwIT09cC5zdGF0dXN8fHAucmVzcG9uc2VVUkwmJjA9PT1wLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHA/aShwLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLHI9ZS5yZXNwb25zZVR5cGUmJiJ0ZXh0IiE9PWUucmVzcG9uc2VUeXBlP3AucmVzcG9uc2U6cC5yZXNwb25zZVRleHQscz17ZGF0YTpyLHN0YXR1czoxMjIzPT09cC5zdGF0dXM/MjA0OnAuc3RhdHVzLHN0YXR1c1RleHQ6MTIyMz09PXAuc3RhdHVzPyJObyBDb250ZW50IjpwLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6cH07byh0LGMscykscD1udWxsfX0scC5vbmVycm9yPWZ1bmN0aW9uKCl7YyhsKCJOZXR3b3JrIEVycm9yIixlLG51bGwscCkpLHA9bnVsbH0scC5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtjKGwoInRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIixlLCJFQ09OTkFCT1JURUQiLHApKSxwPW51bGx9LHIuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGI9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIpLEU9KGUud2l0aENyZWRlbnRpYWxzfHxhKGUudXJsKSkmJmUueHNyZkNvb2tpZU5hbWU/Yi5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtFJiYoX1tlLnhzcmZIZWFkZXJOYW1lXT1FKX1pZigic2V0UmVxdWVzdEhlYWRlciJpbiBwJiZyLmZvckVhY2goXyxmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWQmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBfW3RdOnAuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSksZS53aXRoQ3JlZGVudGlhbHMmJihwLndpdGhDcmVkZW50aWFscz0hMCksZS5yZXNwb25zZVR5cGUpdHJ5e3AucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlfWNhdGNoKHQpe2lmKCJqc29uIiE9PWUucmVzcG9uc2VUeXBlKXRocm93IHR9ImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZwLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmcC51cGxvYWQmJnAudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGUpe3AmJihwLmFib3J0KCksYyhlKSxwPW51bGwpfSksdm9pZCAwPT09ZCYmKGQ9bnVsbCkscC5zZW5kKGQpfSl9fSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9bmV3IGkoZSksbj1zKGkucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIG8uZXh0ZW5kKG4saS5wcm90b3R5cGUsdCksby5leHRlbmQobix0KSxufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIpLGw9cihhKTtsLkF4aW9zPWksbC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoby5tZXJnZShhLGUpKX0sbC5DYW5jZWw9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiKSxsLkNhbmNlbFRva2VuPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiKSxsLmlzQ2FuY2VsPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiKSxsLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LGwuc3ByZWFkPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIpLGUuZXhwb3J0cz1sLGUuZXhwb3J0cy5kZWZhdWx0PWx9LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMubWVzc2FnZT1lfXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LHIucHJvdG90eXBlLl9fQ0FOQ0VMX189ITAsZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0PWV9KTt2YXIgbj10aGlzO2UoZnVuY3Rpb24oZSl7bi5yZWFzb258fChuLnJlYXNvbj1uZXcgbyhlKSx0KG4ucmVhc29uKSl9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIpO3IucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sci5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm57dG9rZW46bmV3IHIoZnVuY3Rpb24odCl7ZT10fSksY2FuY2VsOmV9fSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBpLHJlc3BvbnNlOm5ldyBpfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiKTtyLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9cy5tZXJnZSh7dXJsOmFyZ3VtZW50c1swXX0sYXJndW1lbnRzWzFdKSksZT1zLm1lcmdlKG8sdGhpcy5kZWZhdWx0cyx7bWV0aG9kOiJnZXQifSxlKSxlLm1ldGhvZD1lLm1ldGhvZC50b0xvd2VyQ2FzZSgpO3ZhciB0PVthLHZvaWQgMF0sbj1Qcm9taXNlLnJlc29sdmUoZSk7Zm9yKHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihlKXt0LnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSx0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pO3QubGVuZ3RoOyluPW4udGhlbih0LnNoaWZ0KCksdC5zaGlmdCgpKTtyZXR1cm4gbn0scy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtyLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qocy5tZXJnZShufHx7fSx7bWV0aG9kOmUsdXJsOnR9KSl9fSkscy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ci5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3Qocy5tZXJnZShyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpufSkpfX0pLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLmhhbmRsZXJzPVtdfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpO3IucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnR9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxyLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sci5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtvLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pfSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvLHMpe3ZhciBpPW5ldyBFcnJvcihlKTtyZXR1cm4gcihpLHQsbixvLHMpfX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlKSxlLmJhc2VVUkwmJiFsKGUudXJsKSYmKGUudXJsPXUoZS5iYXNlVVJMLGUudXJsKSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPXMoZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1vLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVyc3x8e30pLG8uZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSksKGUuYWRhcHRlcnx8YS5hZGFwdGVyKShlKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByKGUpLHQuZGF0YT1zKHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0sZnVuY3Rpb24odCl7cmV0dXJuIGkodCl8fChyKGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9cyh0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KX19LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGUuY29uZmlnPXQsbiYmKGUuY29kZT1uKSxlLnJlcXVlc3Q9cixlLnJlc3BvbnNlPW8sZX19LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZvJiYhbyhuLnN0YXR1cyk/dChyKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpOmUobil9fSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByLmZvckVhY2gobixmdW5jdGlvbihuKXtlPW4oZSx0KX0pLGV9fSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUsdCl7IW8uaXNVbmRlZmluZWQoZSkmJm8uaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiksaT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGE9e2FkYXB0ZXI6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0P2U9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIpOnZvaWQgMCE9PXQmJihlPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiKSksZX0oKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsIkNvbnRlbnQtVHlwZSIpLG8uaXNGb3JtRGF0YShlKXx8by5pc0FycmF5QnVmZmVyKGUpfHxvLmlzQnVmZmVyKGUpfHxvLmlzU3RyZWFtKGUpfHxvLmlzRmlsZShlKXx8by5pc0Jsb2IoZSk/ZTpvLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOm8uaXNVUkxTZWFyY2hQYXJhbXMoZSk/KHIodCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxlLnRvU3RyaW5nKCkpOm8uaXNPYmplY3QoZSk/KHIodCwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04IiksSlNPTi5zdHJpbmdpZnkoZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXRyeXtlPUpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07YS5oZWFkZXJzPXtjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19LG8uZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSxmdW5jdGlvbihlKXthLmhlYWRlcnNbZV09e319KSxvLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXthLmhlYWRlcnNbZV09by5tZXJnZShpKX0pLGUuZXhwb3J0cz1hfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J0b2EuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMubWVzc2FnZT0iU3RyaW5nIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVyIn1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLG89U3RyaW5nKGUpLGk9IiIsYT0wLGw9cztvLmNoYXJBdCgwfGEpfHwobD0iPSIsYSUxKTtpKz1sLmNoYXJBdCg2MyZ0Pj44LWElMSo4KSl7aWYoKG49by5jaGFyQ29kZUF0KGErPS43NSkpPjI1NSl0aHJvdyBuZXcgcjt0PXQ8PDh8bn1yZXR1cm4gaX12YXIgcz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3IucHJvdG90eXBlPW5ldyBFcnJvcixyLnByb3RvdHlwZS5jb2RlPTUsci5wcm90b3R5cGUubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIixlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcztpZihuKXM9bih0KTtlbHNlIGlmKG8uaXNVUkxTZWFyY2hQYXJhbXModCkpcz10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgaT1bXTtvLmZvckVhY2godCxmdW5jdGlvbihlLHQpe251bGwhPT1lJiZ2b2lkIDAhPT1lJiYoby5pc0FycmF5KGUpJiYodCs9IltdIiksby5pc0FycmF5KGUpfHwoZT1bZV0pLG8uZm9yRWFjaChlLGZ1bmN0aW9uKGUpe28uaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOm8uaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2gocih0KSsiPSIrcihlKSl9KSl9KSxzPWkuam9pbigiJiIpfXJldHVybiBzJiYoZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcyksZX19LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX19LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpO2UuZXhwb3J0cz1yLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24oZSx0LG4sbyxzLGkpe3ZhciBhPVtdO2EucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLHIuaXNOdW1iZXIobikmJmEucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKG4pLnRvR01UU3RyaW5nKCkpLHIuaXNTdHJpbmcobykmJmEucHVzaCgicGF0aD0iK28pLHIuaXNTdHJpbmcocykmJmEucHVzaCgiZG9tYWluPSIrcyksITA9PT1pJiZhLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1hLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpfSwiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGRcK1wtXC5dKjopP1wvXC8vaS50ZXN0KGUpfX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiKTtlLmV4cG9ydHM9ci5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lO3JldHVybiBuJiYoby5zZXRBdHRyaWJ1dGUoImhyZWYiLHQpLHQ9by5ocmVmKSxvLnNldEF0dHJpYnV0ZSgiaHJlZiIsdCkse2hyZWY6by5ocmVmLHByb3RvY29sOm8ucHJvdG9jb2w/by5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6by5ob3N0LHNlYXJjaDpvLnNlYXJjaD9vLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm8uaGFzaD9vLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpvLmhvc3RuYW1lLHBvcnQ6by5wb3J0LHBhdGhuYW1lOiIvIj09PW8ucGF0aG5hbWUuY2hhckF0KDApP28ucGF0aG5hbWU6Ii8iK28ucGF0aG5hbWV9fXZhciB0LG49Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gdD1lKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihuKXt2YXIgbz1yLmlzU3RyaW5nKG4pP2Uobik6bjtyZXR1cm4gby5wcm90b2NvbD09PXQucHJvdG9jb2wmJm8uaG9zdD09PXQuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCl9LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3IuZm9yRWFjaChlLGZ1bmN0aW9uKG4scil7ciE9PXQmJnIudG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09bixkZWxldGUgZVtyXSl9KX19LCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiksbz1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHMsaT17fTtyZXR1cm4gZT8oci5mb3JFYWNoKGUuc3BsaXQoIlxuIiksZnVuY3Rpb24oZSl7aWYocz1lLmluZGV4T2YoIjoiKSx0PXIudHJpbShlLnN1YnN0cigwLHMpKS50b0xvd2VyQ2FzZSgpLG49ci50cmltKGUuc3Vic3RyKHMrMSkpLHQpe2lmKGlbdF0mJm8uaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbbl0pOmlbdF0/aVt0XSsiLCAiK246bn19KSxpKTppfX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fX0sIi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1DLmNhbGwoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09Qy5jYWxsKGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfWZ1bmN0aW9uIGkoZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBhKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX1mdW5jdGlvbiBsKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gZChlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1DLmNhbGwoZSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1DLmNhbGwoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1DLmNhbGwoZSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09Qy5jYWxsKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGMoZSkmJmYoZS5waXBlKX1mdW5jdGlvbiBoKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zJiZlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGUucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoL1xzKiQvLCIiKX1mdW5jdGlvbiBiKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfWZ1bmN0aW9uIEUoZSx0KXtpZihudWxsIT09ZSYmdm9pZCAwIT09ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSkscihlKSlmb3IodmFyIG49MCxvPWUubGVuZ3RoO248bztuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBzIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscykmJnQuY2FsbChudWxsLGVbc10scyxlKX1mdW5jdGlvbiB5KCl7ZnVuY3Rpb24gZShlLG4peyJvYmplY3QiPT10eXBlb2YgdFtuXSYmIm9iamVjdCI9PXR5cGVvZiBlP3Rbbl09eSh0W25dLGUpOnRbbl09ZX1mb3IodmFyIHQ9e30sbj0wLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKUUoYXJndW1lbnRzW25dLGUpO3JldHVybiB0fWZ1bmN0aW9uIHYoZSx0LG4pe3JldHVybiBFKHQsZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1QodCxuKTp0fSksZX12YXIgVD1uKCIuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiKSxDPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPXtpc0FycmF5OnIsaXNBcnJheUJ1ZmZlcjpvLGlzQnVmZmVyOkEsaXNGb3JtRGF0YTpzLGlzQXJyYXlCdWZmZXJWaWV3OmksaXNTdHJpbmc6YSxpc051bWJlcjpsLGlzT2JqZWN0OmMsaXNVbmRlZmluZWQ6dSxpc0RhdGU6ZCxpc0ZpbGU6Xyxpc0Jsb2I6cCxpc0Z1bmN0aW9uOmYsaXNTdHJlYW06bSxpc1VSTFNlYXJjaFBhcmFtczpoLGlzU3RhbmRhcmRCcm93c2VyRW52OmIsZm9yRWFjaDpFLG1lcmdlOnksZXh0ZW5kOnYsdHJpbTpnfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvbWFwLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9tYXAuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvci5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2lzLWl0ZXJhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeS5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hdGgvdHJ1bmMuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL21hdGgvdHJ1bmMuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZS5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZS5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3JlZmxlY3QvYXBwbHkuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3JlZmxlY3QvYXBwbHkuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9yZWZsZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vcmVmbGVjdC9kZWZpbmUtcHJvcGVydHkuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3NldC5qcyIpLF9fZXNNb2R1bGU6ITB9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzIiksX19lc01vZHVsZTohMH19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy93ZWFrLW1hcC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vd2Vhay1tYXAuanMiKSxfX2VzTW9kdWxlOiEwfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG5ldyBvLmRlZmF1bHQoZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiByKHMsaSl7dHJ5e3ZhciBhPXRbc10oaSksbD1hLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIG4oZSl9aWYoIWEuZG9uZSlyZXR1cm4gby5kZWZhdWx0LnJlc29sdmUobCkudGhlbihmdW5jdGlvbihlKXtyKCJuZXh0IixlKX0sZnVuY3Rpb24oZSl7cigidGhyb3ciLGUpfSk7ZShsKX1yZXR1cm4gcigibmV4dCIpfSl9fX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSwoMCxvLmRlZmF1bHQpKGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpfSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0IGluIGU/KDAsby5kZWZhdWx0KShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5kZWZhdWx0PW8uZGVmYXVsdHx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIpLGE9cihpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24gZSh0LG4scil7bnVsbD09PXQmJih0PUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIG89KDAsYS5kZWZhdWx0KSh0LG4pO2lmKHZvaWQgMD09PW8pe3ZhciBpPSgwLHMuZGVmYXVsdCkodCk7cmV0dXJuIG51bGw9PT1pP3ZvaWQgMDplKGksbixyKX1pZigidmFsdWUiaW4gbylyZXR1cm4gby52YWx1ZTt2YXIgbD1vLmdldDtpZih2b2lkIDAhPT1sKXJldHVybiBsLmNhbGwocil9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiKSx1PXIobCk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIisodm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCx1LmRlZmF1bHQpKHQpKSk7ZS5wcm90b3R5cGU9KDAsYS5kZWZhdWx0KSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKHMuZGVmYXVsdD8oMCxzLmRlZmF1bHQpKGUsdCk6ZS5fX3Byb3RvX189dCl9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn19LCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOigwLG8uZGVmYXVsdCkodCkpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9fSwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9pcy1pdGVyYWJsZS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanMiKSxhPXIoaSk7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPVtdLHI9ITAsbz0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciBpLGw9KDAsYS5kZWZhdWx0KShlKTshKHI9KGk9bC5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGkudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtvPSEwLHM9ZX1maW5hbGx5e3RyeXshciYmbC5yZXR1cm4mJmwucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IHN9fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoKDAscy5kZWZhdWx0KShPYmplY3QodCkpKXJldHVybiBlKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTooMCxvLmRlZmF1bHQpKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG49QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn1yZXR1cm4oMCxvLmRlZmF1bHQpKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiksYT1yKGkpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIGEuZGVmYXVsdCYmInN5bWJvbCI9PXR5cGVvZiBzLmRlZmF1bHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZGVmYXVsdCYmZS5jb25zdHJ1Y3Rvcj09PWEuZGVmYXVsdCYmZSE9PWEuZGVmYXVsdC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O3QuZGVmYXVsdD0iZnVuY3Rpb24iPT10eXBlb2YgYS5kZWZhdWx0JiYic3ltYm9sIj09PWwocy5kZWZhdWx0KT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZGVmYXVsdCYmZS5jb25zdHJ1Y3Rvcj09PWEuZGVmYXVsdCYmZSE9PWEuZGVmYXVsdC5wcm90b3R5cGU/InN5bWJvbCI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLW1vZHVsZS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIG49ZS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1uJiYobj10KSxbbixuPT09dD8wOjQtbiU0XX1mdW5jdGlvbiBvKGUpe3ZhciB0PXIoZSksbj10WzBdLG89dFsxXTtyZXR1cm4gMyoobitvKS80LW99ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIDMqKHQrbikvNC1ufWZ1bmN0aW9uIGkoZSl7Zm9yKHZhciB0LG49cihlKSxvPW5bMF0saT1uWzFdLGE9bmV3IF8ocyhlLG8saSkpLGw9MCx1PWk+MD9vLTQ6byxjPTA7Yzx1O2MrPTQpdD1kW2UuY2hhckNvZGVBdChjKV08PDE4fGRbZS5jaGFyQ29kZUF0KGMrMSldPDwxMnxkW2UuY2hhckNvZGVBdChjKzIpXTw8NnxkW2UuY2hhckNvZGVBdChjKzMpXSxhW2wrK109dD4+MTYmMjU1LGFbbCsrXT10Pj44JjI1NSxhW2wrK109MjU1JnQ7cmV0dXJuIDI9PT1pJiYodD1kW2UuY2hhckNvZGVBdChjKV08PDJ8ZFtlLmNoYXJDb2RlQXQoYysxKV0+PjQsYVtsKytdPTI1NSZ0KSwxPT09aSYmKHQ9ZFtlLmNoYXJDb2RlQXQoYyldPDwxMHxkW2UuY2hhckNvZGVBdChjKzEpXTw8NHxkW2UuY2hhckNvZGVBdChjKzIpXT4+MixhW2wrK109dD4+OCYyNTUsYVtsKytdPTI1NSZ0KSxhfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGNbZT4+MTgmNjNdK2NbZT4+MTImNjNdK2NbZT4+NiY2M10rY1s2MyZlXX1mdW5jdGlvbiBsKGUsdCxuKXtmb3IodmFyIHIsbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYmMTY3MTE2ODApKyhlW3MrMV08PDgmNjUyODApKygyNTUmZVtzKzJdKSxvLnB1c2goYShyKSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gdShlKXtmb3IodmFyIHQsbj1lLmxlbmd0aCxyPW4lMyxvPVtdLHM9MCxpPW4tcjtzPGk7cys9MTYzODMpby5wdXNoKGwoZSxzLHMrMTYzODM+aT9pOnMrMTYzODMpKTtyZXR1cm4gMT09PXI/KHQ9ZVtuLTFdLG8ucHVzaChjW3Q+PjJdK2NbdDw8NCY2M10rIj09IikpOjI9PT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0sby5wdXNoKGNbdD4+MTBdK2NbdD4+NCY2M10rY1t0PDwyJjYzXSsiPSIpKSxvLmpvaW4oIiIpfXQuYnl0ZUxlbmd0aD1vLHQudG9CeXRlQXJyYXk9aSx0LmZyb21CeXRlQXJyYXk9dTtmb3IodmFyIGM9W10sZD1bXSxfPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LHA9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGY9MCxtPXAubGVuZ3RoO2Y8bTsrK2YpY1tmXT1wW2ZdLGRbcC5jaGFyQ29kZUF0KGYpXT1mO2RbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSwiLi9ub2RlX21vZHVsZXMvYm93c2VyL3NyYy9ib3dzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsvKiEKICogQm93c2VyIC0gYSBicm93c2VyIGRldGVjdG9yCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWQvYm93c2VyCiAqIE1JVCBMaWNlbnNlIHwgKGMpIER1c3RpbiBEaWF6IDIwMTUKICovCiFmdW5jdGlvbih0LHIsbyl7dm9pZCAwIT09ZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1vKCk6bigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2FtZC1kZWZpbmUuanMiKSgiYm93c2VyIixvKX0oMCwwLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUubWF0Y2godCk7cmV0dXJuIG4mJm4ubGVuZ3RoPjEmJm5bMV18fCIifWZ1bmN0aW9uIG4odCl7dmFyIG49ZS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5sZW5ndGg+MSYmblsyXXx8IiJ9dmFyIG8scz10KC8oaXBvZHxpcGhvbmV8aXBhZCkvaSkudG9Mb3dlckNhc2UoKSxhPS9saWtlIGFuZHJvaWQvaS50ZXN0KGUpLGw9IWEmJi9hbmRyb2lkL2kudGVzdChlKSx1PS9uZXh1c1xzKlswLTZdXHMqL2kudGVzdChlKSxjPSF1JiYvbmV4dXNccypbMC05XSsvaS50ZXN0KGUpLGQ9L0NyT1MvLnRlc3QoZSksXz0vc2lsay9pLnRlc3QoZSkscD0vc2FpbGZpc2gvaS50ZXN0KGUpLGY9L3RpemVuL2kudGVzdChlKSxtPS8od2VifGhwdykob3wwKXMvaS50ZXN0KGUpLGg9L3dpbmRvd3MgcGhvbmUvaS50ZXN0KGUpLGc9KC9TYW1zdW5nQnJvd3Nlci9pLnRlc3QoZSksIWgmJi93aW5kb3dzL2kudGVzdChlKSksYj0hcyYmIV8mJi9tYWNpbnRvc2gvaS50ZXN0KGUpLEU9IWwmJiFwJiYhZiYmIW0mJi9saW51eC9pLnRlc3QoZSkseT1uKC9lZGcoW2VhXXxpb3MpXC8oXGQrKFwuXGQrKT8pL2kpLHY9dCgvdmVyc2lvblwvKFxkKyhcLlxkKyk/KS9pKSxUPS90YWJsZXQvaS50ZXN0KGUpJiYhL3RhYmxldCBwYy9pLnRlc3QoZSksQT0hVCYmL1teLV1tb2JpL2kudGVzdChlKSxDPS94Ym94L2kudGVzdChlKTsvb3BlcmEvaS50ZXN0KGUpP289e25hbWU6Ik9wZXJhIixvcGVyYTppLHZlcnNpb246dnx8dCgvKD86b3BlcmF8b3ByfG9waW9zKVtcc1wvXShcZCsoXC5cZCspPykvaSl9Oi9vcHJcL3xvcGlvcy9pLnRlc3QoZSk/bz17bmFtZToiT3BlcmEiLG9wZXJhOmksdmVyc2lvbjp0KC8oPzpvcHJ8b3Bpb3MpW1xzXC9dKFxkKyhcLlxkKyk/KS9pKXx8dn06L1NhbXN1bmdCcm93c2VyL2kudGVzdChlKT9vPXtuYW1lOiJTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkIixzYW1zdW5nQnJvd3NlcjppLHZlcnNpb246dnx8dCgvKD86U2Ftc3VuZ0Jyb3dzZXIpW1xzXC9dKFxkKyhcLlxkKyk/KS9pKX06L1doYWxlL2kudGVzdChlKT9vPXtuYW1lOiJOQVZFUiBXaGFsZSBicm93c2VyIix3aGFsZTppLHZlcnNpb246dCgvKD86d2hhbGUpW1xzXC9dKFxkKyg/OlwuXGQrKSspL2kpfTovTVpCcm93c2VyL2kudGVzdChlKT9vPXtuYW1lOiJNWiBCcm93c2VyIixtemJyb3dzZXI6aSx2ZXJzaW9uOnQoLyg/Ok1aQnJvd3NlcilbXHNcL10oXGQrKD86XC5cZCspKykvaSl9Oi9jb2FzdC9pLnRlc3QoZSk/bz17bmFtZToiT3BlcmEgQ29hc3QiLGNvYXN0OmksdmVyc2lvbjp2fHx0KC8oPzpjb2FzdClbXHNcL10oXGQrKFwuXGQrKT8pL2kpfTovZm9jdXMvaS50ZXN0KGUpP289e25hbWU6IkZvY3VzIixmb2N1czppLHZlcnNpb246dCgvKD86Zm9jdXMpW1xzXC9dKFxkKyg/OlwuXGQrKSspL2kpfToveWFicm93c2VyL2kudGVzdChlKT9vPXtuYW1lOiJZYW5kZXggQnJvd3NlciIseWFuZGV4YnJvd3NlcjppLHZlcnNpb246dnx8dCgvKD86eWFicm93c2VyKVtcc1wvXShcZCsoXC5cZCspPykvaSl9Oi91Y2Jyb3dzZXIvaS50ZXN0KGUpP289e25hbWU6IlVDIEJyb3dzZXIiLHVjYnJvd3NlcjppLHZlcnNpb246dCgvKD86dWNicm93c2VyKVtcc1wvXShcZCsoPzpcLlxkKykrKS9pKX06L214aW9zL2kudGVzdChlKT9vPXtuYW1lOiJNYXh0aG9uIixtYXh0aG9uOmksdmVyc2lvbjp0KC8oPzpteGlvcylbXHNcL10oXGQrKD86XC5cZCspKykvaSl9Oi9lcGlwaGFueS9pLnRlc3QoZSk/bz17bmFtZToiRXBpcGhhbnkiLGVwaXBoYW55OmksdmVyc2lvbjp0KC8oPzplcGlwaGFueSlbXHNcL10oXGQrKD86XC5cZCspKykvaSl9Oi9wdWZmaW4vaS50ZXN0KGUpP289e25hbWU6IlB1ZmZpbiIscHVmZmluOmksdmVyc2lvbjp0KC8oPzpwdWZmaW4pW1xzXC9dKFxkKyg/OlwuXGQrKT8pL2kpfTovc2xlaXBuaXIvaS50ZXN0KGUpP289e25hbWU6IlNsZWlwbmlyIixzbGVpcG5pcjppLHZlcnNpb246dCgvKD86c2xlaXBuaXIpW1xzXC9dKFxkKyg/OlwuXGQrKSspL2kpfTovay1tZWxlb24vaS50ZXN0KGUpP289e25hbWU6IkstTWVsZW9uIixrTWVsZW9uOmksdmVyc2lvbjp0KC8oPzprLW1lbGVvbilbXHNcL10oXGQrKD86XC5cZCspKykvaSl9Omg/KG89e25hbWU6IldpbmRvd3MgUGhvbmUiLG9zbmFtZToiV2luZG93cyBQaG9uZSIsd2luZG93c3Bob25lOml9LHk/KG8ubXNlZGdlPWksby52ZXJzaW9uPXkpOihvLm1zaWU9aSxvLnZlcnNpb249dCgvaWVtb2JpbGVcLyhcZCsoXC5cZCspPykvaSkpKTovbXNpZXx0cmlkZW50L2kudGVzdChlKT9vPXtuYW1lOiJJbnRlcm5ldCBFeHBsb3JlciIsbXNpZTppLHZlcnNpb246dCgvKD86bXNpZSB8cnY6KShcZCsoXC5cZCspPykvaSl9OmQ/bz17bmFtZToiQ2hyb21lIixvc25hbWU6IkNocm9tZSBPUyIsY2hyb21lb3M6aSxjaHJvbWVCb29rOmksY2hyb21lOmksdmVyc2lvbjp0KC8oPzpjaHJvbWV8Y3Jpb3N8Y3JtbylcLyhcZCsoXC5cZCspPykvaSl9Oi9lZGcoW2VhXXxpb3MpL2kudGVzdChlKT9vPXtuYW1lOiJNaWNyb3NvZnQgRWRnZSIsbXNlZGdlOmksdmVyc2lvbjp5fTovdml2YWxkaS9pLnRlc3QoZSk/bz17bmFtZToiVml2YWxkaSIsdml2YWxkaTppLHZlcnNpb246dCgvdml2YWxkaVwvKFxkKyhcLlxkKyk/KS9pKXx8dn06cD9vPXtuYW1lOiJTYWlsZmlzaCIsb3NuYW1lOiJTYWlsZmlzaCBPUyIsc2FpbGZpc2g6aSx2ZXJzaW9uOnQoL3NhaWxmaXNoXHM/YnJvd3NlclwvKFxkKyhcLlxkKyk/KS9pKX06L3NlYW1vbmtleVwvL2kudGVzdChlKT9vPXtuYW1lOiJTZWFNb25rZXkiLHNlYW1vbmtleTppLHZlcnNpb246dCgvc2VhbW9ua2V5XC8oXGQrKFwuXGQrKT8pL2kpfTovZmlyZWZveHxpY2V3ZWFzZWx8Znhpb3MvaS50ZXN0KGUpPyhvPXtuYW1lOiJGaXJlZm94IixmaXJlZm94OmksdmVyc2lvbjp0KC8oPzpmaXJlZm94fGljZXdlYXNlbHxmeGlvcylbIFwvXShcZCsoXC5cZCspPykvaSl9LC9cKChtb2JpbGV8dGFibGV0KTtbXlwpXSpydjpbXGRcLl0rXCkvaS50ZXN0KGUpJiYoby5maXJlZm94b3M9aSxvLm9zbmFtZT0iRmlyZWZveCBPUyIpKTpfP289e25hbWU6IkFtYXpvbiBTaWxrIixzaWxrOmksdmVyc2lvbjp0KC9zaWxrXC8oXGQrKFwuXGQrKT8pL2kpfTovcGhhbnRvbS9pLnRlc3QoZSk/bz17bmFtZToiUGhhbnRvbUpTIixwaGFudG9tOmksdmVyc2lvbjp0KC9waGFudG9tanNcLyhcZCsoXC5cZCspPykvaSl9Oi9zbGltZXJqcy9pLnRlc3QoZSk/bz17bmFtZToiU2xpbWVySlMiLHNsaW1lcjppLHZlcnNpb246dCgvc2xpbWVyanNcLyhcZCsoXC5cZCspPykvaSl9Oi9ibGFja2JlcnJ5fFxiYmJcZCsvaS50ZXN0KGUpfHwvcmltXHN0YWJsZXQvaS50ZXN0KGUpP289e25hbWU6IkJsYWNrQmVycnkiLG9zbmFtZToiQmxhY2tCZXJyeSBPUyIsYmxhY2tiZXJyeTppLHZlcnNpb246dnx8dCgvYmxhY2tiZXJyeVtcZF0rXC8oXGQrKFwuXGQrKT8pL2kpfTptPyhvPXtuYW1lOiJXZWJPUyIsb3NuYW1lOiJXZWJPUyIsd2Vib3M6aSx2ZXJzaW9uOnZ8fHQoL3coPzplYik/b3Nicm93c2VyXC8oXGQrKFwuXGQrKT8pL2kpfSwvdG91Y2hwYWRcLy9pLnRlc3QoZSkmJihvLnRvdWNocGFkPWkpKTovYmFkYS9pLnRlc3QoZSk/bz17bmFtZToiQmFkYSIsb3NuYW1lOiJCYWRhIixiYWRhOmksdmVyc2lvbjp0KC9kb2xmaW5cLyhcZCsoXC5cZCspPykvaSl9OmY/bz17bmFtZToiVGl6ZW4iLG9zbmFtZToiVGl6ZW4iLHRpemVuOmksdmVyc2lvbjp0KC8oPzp0aXplblxzPyk/YnJvd3NlclwvKFxkKyhcLlxkKyk/KS9pKXx8dn06L3F1cHppbGxhL2kudGVzdChlKT9vPXtuYW1lOiJRdXBaaWxsYSIscXVwemlsbGE6aSx2ZXJzaW9uOnQoLyg/OnF1cHppbGxhKVtcc1wvXShcZCsoPzpcLlxkKykrKS9pKXx8dn06L2Nocm9taXVtL2kudGVzdChlKT9vPXtuYW1lOiJDaHJvbWl1bSIsY2hyb21pdW06aSx2ZXJzaW9uOnQoLyg/OmNocm9taXVtKVtcc1wvXShcZCsoPzpcLlxkKyk/KS9pKXx8dn06L2Nocm9tZXxjcmlvc3xjcm1vL2kudGVzdChlKT9vPXtuYW1lOiJDaHJvbWUiLGNocm9tZTppLHZlcnNpb246dCgvKD86Y2hyb21lfGNyaW9zfGNybW8pXC8oXGQrKFwuXGQrKT8pL2kpfTpsP289e25hbWU6IkFuZHJvaWQiLHZlcnNpb246dn06L3NhZmFyaXxhcHBsZXdlYmtpdC9pLnRlc3QoZSk/KG89e25hbWU6IlNhZmFyaSIsc2FmYXJpOml9LHYmJihvLnZlcnNpb249dikpOnM/KG89e25hbWU6ImlwaG9uZSI9PXM/ImlQaG9uZSI6ImlwYWQiPT1zPyJpUGFkIjoiaVBvZCJ9LHYmJihvLnZlcnNpb249dikpOm89L2dvb2dsZWJvdC9pLnRlc3QoZSk/e25hbWU6Ikdvb2dsZWJvdCIsZ29vZ2xlYm90OmksdmVyc2lvbjp0KC9nb29nbGVib3RcLyhcZCsoXC5cZCspKS9pKXx8dn06e25hbWU6dCgvXiguKilcLyguKikgLyksdmVyc2lvbjpuKC9eKC4qKVwvKC4qKSAvKX0sIW8ubXNlZGdlJiYvKGFwcGxlKT93ZWJraXQvaS50ZXN0KGUpPygvKGFwcGxlKT93ZWJraXRcLzUzN1wuMzYvaS50ZXN0KGUpPyhvLm5hbWU9by5uYW1lfHwiQmxpbmsiLG8uYmxpbms9aSk6KG8ubmFtZT1vLm5hbWV8fCJXZWJraXQiLG8ud2Via2l0PWkpLCFvLnZlcnNpb24mJnYmJihvLnZlcnNpb249dikpOiFvLm9wZXJhJiYvZ2Vja29cLy9pLnRlc3QoZSkmJihvLm5hbWU9by5uYW1lfHwiR2Vja28iLG8uZ2Vja289aSxvLnZlcnNpb249by52ZXJzaW9ufHx0KC9nZWNrb1wvKFxkKyhcLlxkKyk/KS9pKSksby53aW5kb3dzcGhvbmV8fCFsJiYhby5zaWxrPyFvLndpbmRvd3NwaG9uZSYmcz8ob1tzXT1pLG8uaW9zPWksby5vc25hbWU9ImlPUyIpOmI/KG8ubWFjPWksby5vc25hbWU9Im1hY09TIik6Qz8oby54Ym94PWksby5vc25hbWU9Ilhib3giKTpnPyhvLndpbmRvd3M9aSxvLm9zbmFtZT0iV2luZG93cyIpOkUmJihvLmxpbnV4PWksby5vc25hbWU9IkxpbnV4Iik6KG8uYW5kcm9pZD1pLG8ub3NuYW1lPSJBbmRyb2lkIik7dmFyIE89IiI7by53aW5kb3dzP089ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiTlQiOnJldHVybiJOVCI7Y2FzZSJYUCI6cmV0dXJuIlhQIjtjYXNlIk5UIDUuMCI6cmV0dXJuIjIwMDAiO2Nhc2UiTlQgNS4xIjpyZXR1cm4iWFAiO2Nhc2UiTlQgNS4yIjpyZXR1cm4iMjAwMyI7Y2FzZSJOVCA2LjAiOnJldHVybiJWaXN0YSI7Y2FzZSJOVCA2LjEiOnJldHVybiI3IjtjYXNlIk5UIDYuMiI6cmV0dXJuIjgiO2Nhc2UiTlQgNi4zIjpyZXR1cm4iOC4xIjtjYXNlIk5UIDEwLjAiOnJldHVybiIxMCI7ZGVmYXVsdDpyZXR1cm59fSh0KC9XaW5kb3dzICgoTlR8WFApKCBcZFxkPy5cZCk/KS9pKSk6by53aW5kb3dzcGhvbmU/Tz10KC93aW5kb3dzIHBob25lICg/Om9zKT9ccz8oXGQrKFwuXGQrKSopL2kpOm8ubWFjPyhPPXQoL01hYyBPUyBYIChcZCsoW19cLlxzXVxkKykqKS9pKSxPPU8ucmVwbGFjZSgvW19cc10vZywiLiIpKTpzPyhPPXQoL29zIChcZCsoW19cc11cZCspKikgbGlrZSBtYWMgb3MgeC9pKSxPPU8ucmVwbGFjZSgvW19cc10vZywiLiIpKTpsP089dCgvYW5kcm9pZFsgXC8tXShcZCsoXC5cZCspKikvaSk6by53ZWJvcz9PPXQoLyg/OndlYnxocHcpb3NcLyhcZCsoXC5cZCspKikvaSk6by5ibGFja2JlcnJ5P089dCgvcmltXHN0YWJsZXRcc29zXHMoXGQrKFwuXGQrKSopL2kpOm8uYmFkYT9PPXQoL2JhZGFcLyhcZCsoXC5cZCspKikvaSk6by50aXplbiYmKE89dCgvdGl6ZW5bXC9cc10oXGQrKFwuXGQrKSopL2kpKSxPJiYoby5vc3ZlcnNpb249Tyk7dmFyIFM9IW8ud2luZG93cyYmTy5zcGxpdCgiLiIpWzBdO3JldHVybiBUfHxjfHwiaXBhZCI9PXN8fGwmJigzPT1TfHxTPj00JiYhQSl8fG8uc2lsaz9vLnRhYmxldD1pOihBfHwiaXBob25lIj09c3x8Imlwb2QiPT1zfHxsfHx1fHxvLmJsYWNrYmVycnl8fG8ud2Vib3N8fG8uYmFkYSkmJihvLm1vYmlsZT1pKSxvLm1zZWRnZXx8by5tc2llJiZvLnZlcnNpb24+PTEwfHxvLnlhbmRleGJyb3dzZXImJm8udmVyc2lvbj49MTV8fG8udml2YWxkaSYmby52ZXJzaW9uPj0xfHxvLmNocm9tZSYmby52ZXJzaW9uPj0yMHx8by5zYW1zdW5nQnJvd3NlciYmby52ZXJzaW9uPj00fHxvLndoYWxlJiYxPT09cihbby52ZXJzaW9uLCIxLjAiXSl8fG8ubXpicm93c2VyJiYxPT09cihbby52ZXJzaW9uLCI2LjAiXSl8fG8uZm9jdXMmJjE9PT1yKFtvLnZlcnNpb24sIjEuMCJdKXx8by5maXJlZm94JiZvLnZlcnNpb24+PTIwfHxvLnNhZmFyaSYmby52ZXJzaW9uPj02fHxvLm9wZXJhJiZvLnZlcnNpb24+PTEwfHxvLmlvcyYmby5vc3ZlcnNpb24mJm8ub3N2ZXJzaW9uLnNwbGl0KCIuIilbMF0+PTZ8fG8uYmxhY2tiZXJyeSYmby52ZXJzaW9uPj0xMC4xfHxvLmNocm9taXVtJiZvLnZlcnNpb24+PTIwP28uYT1pOm8ubXNpZSYmby52ZXJzaW9uPDEwfHxvLmNocm9tZSYmby52ZXJzaW9uPDIwfHxvLmZpcmVmb3gmJm8udmVyc2lvbjwyMHx8by5zYWZhcmkmJm8udmVyc2lvbjw2fHxvLm9wZXJhJiZvLnZlcnNpb248MTB8fG8uaW9zJiZvLm9zdmVyc2lvbiYmby5vc3ZlcnNpb24uc3BsaXQoIi4iKVswXTw2fHxvLmNocm9taXVtJiZvLnZlcnNpb248MjA/by5jPWk6by54PWksb31mdW5jdGlvbiB0KGUpe3JldHVybiBlLnNwbGl0KCIuIikubGVuZ3RofWZ1bmN0aW9uIG4oZSx0KXt2YXIgbixyPVtdO2lmKEFycmF5LnByb3RvdHlwZS5tYXApcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLHQpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspci5wdXNoKHQoZVtuXSkpO3JldHVybiByfWZ1bmN0aW9uIHIoZSl7Zm9yKHZhciByPU1hdGgubWF4KHQoZVswXSksdChlWzFdKSksbz1uKGUsZnVuY3Rpb24oZSl7dmFyIG89ci10KGUpO3JldHVybiBlKz1uZXcgQXJyYXkobysxKS5qb2luKCIuMCIpLG4oZS5zcGxpdCgiLiIpLGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXJyYXkoMjAtZS5sZW5ndGgpLmpvaW4oIjAiKStlfSkucmV2ZXJzZSgpfSk7LS1yPj0wOyl7aWYob1swXVtyXT5vWzFdW3JdKXJldHVybiAxO2lmKG9bMF1bcl0hPT1vWzFdW3JdKXJldHVybi0xO2lmKDA9PT1yKXJldHVybiAwfX1mdW5jdGlvbiBvKHQsbixvKXt2YXIgcz1hOyJzdHJpbmciPT10eXBlb2YgbiYmKG89bixuPXZvaWQgMCksdm9pZCAwPT09biYmKG49ITEpLG8mJihzPWUobykpO3ZhciBpPSIiK3MudmVyc2lvbjtmb3IodmFyIGwgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGwpJiZzW2xdKXtpZigic3RyaW5nIiE9dHlwZW9mIHRbbF0pdGhyb3cgbmV3IEVycm9yKCJCcm93c2VyIHZlcnNpb24gaW4gdGhlIG1pblZlcnNpb24gbWFwIHNob3VsZCBiZSBhIHN0cmluZzogIitsKyI6ICIrU3RyaW5nKHQpKTtyZXR1cm4gcihbaSx0W2xdXSk8MH1yZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4hbyhlLHQsbil9dmFyIGk9ITAsYT1lKCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yP25hdmlnYXRvci51c2VyQWdlbnR8fCIiOiIiKTtyZXR1cm4gYS50ZXN0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXt2YXIgbj1lW3RdO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmbiBpbiBhKXJldHVybiEwfXJldHVybiExfSxhLmlzVW5zdXBwb3J0ZWRCcm93c2VyPW8sYS5jb21wYXJlVmVyc2lvbnM9cixhLmNoZWNrPXMsYS5fZGV0ZWN0PWUsYS5kZXRlY3Q9ZSxhfSl9LCIuL25vZGVfbW9kdWxlcy9idG9hL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3ZhciBuO3JldHVybiBuPWUgaW5zdGFuY2VvZiB0P2U6bmV3IHQoZS50b1N0cmluZygpLCJiaW5hcnkiKSxuLnRvU3RyaW5nKCJiYXNlNjQiKX1lLmV4cG9ydHM9bn0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyKX0sIi4vbm9kZV9tb2R1bGVzL2MzL2MzLmNzcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL25vZGVfbW9kdWxlcy9jMy9jMy5qcyI6ZnVuY3Rpb24oZSx0LG4pey8qIEBsaWNlbnNlIEMzLmpzIHYwLjYuNyB8IChjKSBDMyBUZWFtIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBodHRwOi8vYzNqcy5vcmcvICovCiFmdW5jdGlvbih0LG4pe2UuZXhwb3J0cz1uKCl9KDAsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3QuZDM9d2luZG93LmQzP3dpbmRvdy5kMzpuKCIuL25vZGVfbW9kdWxlcy9kMy9pbmRleC5qcyIpLHQuYXBpPWUsdC5jb25maWc9dC5nZXREZWZhdWx0Q29uZmlnKCksdC5kYXRhPXt9LHQuY2FjaGU9e30sdC5heGVzPXt9fWZ1bmN0aW9uIHQobil7dmFyIHI9dGhpcy5pbnRlcm5hbD1uZXcgZSh0aGlzKTtyLmxvYWRDb25maWcobiksci5iZWZvcmVJbml0KG4pLHIuaW5pdCgpLHIuYWZ0ZXJJbml0KG4pLGZ1bmN0aW9uIGUodCxuLHIpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obyl7bltvXT10W29dLmJpbmQociksT2JqZWN0LmtleXModFtvXSkubGVuZ3RoPjAmJmUodFtvXSxuW29dLHIpfSl9KHQucHJvdG90eXBlLHRoaXMsdGhpcyl9ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXM7bi5jb21wb25lbnQ9ZSxuLnBhcmFtcz10fHx7fSxuLmQzPWUuZDMsbi5zY2FsZT1uLmQzLnNjYWxlTGluZWFyKCksbi5yYW5nZSxuLm9yaWVudD0iYm90dG9tIixuLmlubmVyVGlja1NpemU9NixuLm91dGVyVGlja1NpemU9dGhpcy5wYXJhbXMud2l0aE91dGVyVGljaz82OjAsbi50aWNrUGFkZGluZz0zLG4udGlja1ZhbHVlcz1udWxsLG4udGlja0Zvcm1hdCxuLnRpY2tBcmd1bWVudHMsbi50aWNrT2Zmc2V0PTAsbi50aWNrQ3VsbGluZz0hMCxuLnRpY2tDZW50ZXJlZCxuLnRpY2tUZXh0Q2hhclNpemUsbi50aWNrVGV4dFJvdGF0ZT1uLnBhcmFtcy50aWNrVGV4dFJvdGF0ZSxuLnRpY2tMZW5ndGgsbi5heGlzPW4uZ2VuZXJhdGVBeGlzKCl9ci5wcm90b3R5cGUuYXhpc1g9ZnVuY3Rpb24oZSx0LG4pe2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrTWF0aC5jZWlsKHQoZSkrbikrIiwgMCkifSl9LHIucHJvdG90eXBlLmF4aXNZPWZ1bmN0aW9uKGUsdCl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoMCwiK01hdGguY2VpbCh0KGUpKSsiKSJ9KX0sci5wcm90b3R5cGUuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxuPWVbZS5sZW5ndGgtMV07cmV0dXJuIHQ8bj9bdCxuXTpbbix0XX0sci5wcm90b3R5cGUuZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxvPVtdO2lmKGUudGlja3MpcmV0dXJuIGUudGlja3MuYXBwbHkoZSxyLnRpY2tBcmd1bWVudHMpO2ZvcihuPWUuZG9tYWluKCksdD1NYXRoLmNlaWwoblswXSk7dDxuWzFdO3QrKylvLnB1c2godCk7cmV0dXJuIG8ubGVuZ3RoPjAmJm9bMF0+MCYmby51bnNoaWZ0KG9bMF0tKG9bMV0tb1swXSkpLG99LHIucHJvdG90eXBlLmNvcHlTY2FsZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXQuc2NhbGUuY29weSgpO3JldHVybiB0LnBhcmFtcy5pc0NhdGVnb3J5JiYoZT10LnNjYWxlLmRvbWFpbigpLG4uZG9tYWluKFtlWzBdLGVbMV0tMV0pKSxufSxyLnByb3RvdHlwZS50ZXh0Rm9ybWF0dGVkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0KGUpOmU7cmV0dXJuIHZvaWQgMCE9PW4/bjoiIn0sci5wcm90b3R5cGUudXBkYXRlUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLnJhbmdlPWUuc2NhbGUucmFuZ2VFeHRlbnQ/ZS5zY2FsZS5yYW5nZUV4dGVudCgpOmUuc2NhbGVFeHRlbnQoZS5zY2FsZS5yYW5nZSgpKSxlLnJhbmdlfSxyLnByb3RvdHlwZS51cGRhdGVUaWNrVGV4dENoYXJTaXplPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodC50aWNrVGV4dENoYXJTaXplKXJldHVybiB0LnRpY2tUZXh0Q2hhclNpemU7dmFyIG49e2g6MTEuNSx3OjUuNX07cmV0dXJuIGUuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXh0Rm9ybWF0dGVkKGUpfSkuZWFjaChmdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dC50ZXh0Rm9ybWF0dGVkKGUpLHM9ci5oZWlnaHQsaT1vP3Iud2lkdGgvby5sZW5ndGg6dm9pZCAwO3MmJmkmJihuLmg9cyxuLnc9aSl9KS50ZXh0KCIiKSx0LnRpY2tUZXh0Q2hhclNpemU9bixufSxyLnByb3RvdHlwZS5pc1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuImxlZnQiPT09dGhpcy5vcmllbnR8fCJyaWdodCI9PT10aGlzLm9yaWVudH0sci5wcm90b3R5cGUudHNwYW5EYXRhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89ci5wYXJhbXMudGlja011bHRpbGluZT9yLnNwbGl0VGlja1RleHQoZSxuKTpbXS5jb25jYXQoci50ZXh0Rm9ybWF0dGVkKGUpKTtyZXR1cm4gci5wYXJhbXMudGlja011bHRpbGluZSYmci5wYXJhbXMudGlja011bHRpbGluZU1heD4wJiYobz1yLmVsbGlwc2lmeShvLHIucGFyYW1zLnRpY2tNdWx0aWxpbmVNYXgpKSxvLm1hcChmdW5jdGlvbihlKXtyZXR1cm57aW5kZXg6dCxzcGxpdHRlZDplLGxlbmd0aDpvLmxlbmd0aH19KX0sci5wcm90b3R5cGUuc3BsaXRUaWNrVGV4dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtvPXZvaWQgMDtmb3IodmFyIGE9MTthPHQubGVuZ3RoO2ErKylpZigiICI9PT10LmNoYXJBdChhKSYmKG89YSkscj10LnN1YnN0cigwLGErMSkscz1pLnRpY2tUZXh0Q2hhclNpemUudypyLmxlbmd0aCxsPHMpcmV0dXJuIG4oZS5jb25jYXQodC5zdWJzdHIoMCxvfHxhKSksdC5zbGljZShvP28rMTphKSk7cmV0dXJuIGUuY29uY2F0KHQpfXZhciByLG8scyxpPXRoaXMsYT1pLnRleHRGb3JtYXR0ZWQoZSksbD1pLnBhcmFtcy50aWNrV2lkdGgsdT1bXTtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpP2E6KCghbHx8bDw9MCkmJihsPWkuaXNWZXJ0aWNhbCgpPzk1OmkucGFyYW1zLmlzQ2F0ZWdvcnk/TWF0aC5jZWlsKHQoMSktdCgwKSktMTI6MTEwKSxuKHUsYSsiIikpfSxyLnByb3RvdHlwZS5lbGxpcHNpZnk9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDw9dClyZXR1cm4gZTtmb3IodmFyIG49ZS5zbGljZSgwLHQpLHI9MyxvPXQtMTtvPj0wO28tLSl7dmFyIHM9bltvXS5sZW5ndGg7aWYobltvXT1uW29dLnN1YnN0cigwLHMtcikucGFkRW5kKHMsIi4iKSwoci09cyk8PTApYnJlYWt9cmV0dXJuIG59LHIucHJvdG90eXBlLnVwZGF0ZVRpY2tMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UudGlja0xlbmd0aD1NYXRoLm1heChlLmlubmVyVGlja1NpemUsMCkrZS50aWNrUGFkZGluZ30sci5wcm90b3R5cGUubGluZVkyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LnNjYWxlKGUpKyh0LnRpY2tDZW50ZXJlZD8wOnQudGlja09mZnNldCk7cmV0dXJuIHQucmFuZ2VbMF08biYmbjx0LnJhbmdlWzFdP3QuaW5uZXJUaWNrU2l6ZTowfSxyLnByb3RvdHlwZS50ZXh0WT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLnRpY2tUZXh0Um90YXRlO3JldHVybiB0PzExLjUtdC8xNSoyLjUqKHQ+MD8xOi0xKTplLnRpY2tMZW5ndGh9LHIucHJvdG90eXBlLnRleHRUcmFuc2Zvcm09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS50aWNrVGV4dFJvdGF0ZTtyZXR1cm4gdD8icm90YXRlKCIrdCsiKSI6IiJ9LHIucHJvdG90eXBlLnRleHRUZXh0QW5jaG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUudGlja1RleHRSb3RhdGU7cmV0dXJuIHQ/dD4wPyJzdGFydCI6ImVuZCI6Im1pZGRsZSJ9LHIucHJvdG90eXBlLnRzcGFuRHg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS50aWNrVGV4dFJvdGF0ZTtyZXR1cm4gdD84Kk1hdGguc2luKE1hdGguUEkqKHQvMTgwKSk6MH0sci5wcm90b3R5cGUudHNwYW5EeT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLnRpY2tUZXh0Q2hhclNpemUuaDtyZXR1cm4gMD09PXQmJihyPW4uaXNWZXJ0aWNhbCgpPy0oKGUubGVuZ3RoLTEpKihuLnRpY2tUZXh0Q2hhclNpemUuaC8yKS0zKToiLjcxZW0iKSxyfSxyLnByb3RvdHlwZS5nZW5lcmF0ZUF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKG8scyl7dmFyIGk7cmV0dXJuIG8uZWFjaChmdW5jdGlvbigpe3ZhciBvLGEsbCx1PWUuZz1uLnNlbGVjdCh0aGlzKSxjPXRoaXMuX19jaGFydF9ffHx0LnNjYWxlLGQ9dGhpcy5fX2NoYXJ0X189dC5jb3B5U2NhbGUoKSxfPXQudGlja1ZhbHVlcz90LnRpY2tWYWx1ZXM6dC5nZW5lcmF0ZVRpY2tzKGQpLHA9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShfLGQpLGY9cC5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsMWUtNiksbT1wLmV4aXQoKS5yZW1vdmUoKSxoPXAubWVyZ2UoZik7ci5pc0NhdGVnb3J5Pyh0LnRpY2tPZmZzZXQ9TWF0aC5jZWlsKChkKDEpLWQoMCkpLzIpLGE9dC50aWNrQ2VudGVyZWQ/MDp0LnRpY2tPZmZzZXQsbD10LnRpY2tDZW50ZXJlZD90LnRpY2tPZmZzZXQ6MCk6dC50aWNrT2Zmc2V0PWE9MCx0LnVwZGF0ZVJhbmdlKCksdC51cGRhdGVUaWNrTGVuZ3RoKCksdC51cGRhdGVUaWNrVGV4dENoYXJTaXplKHUuc2VsZWN0KCIudGljayIpKTt2YXIgZz1oLnNlbGVjdCgibGluZSIpLm1lcmdlKGYuYXBwZW5kKCJsaW5lIikpLGI9aC5zZWxlY3QoInRleHQiKS5tZXJnZShmLmFwcGVuZCgidGV4dCIpKSxFPWguc2VsZWN0QWxsKCJ0ZXh0Iikuc2VsZWN0QWxsKCJ0c3BhbiIpLmRhdGEoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkRhdGEoZSxuLGQpfSkseT1FLmVudGVyKCkuYXBwZW5kKCJ0c3BhbiIpLHY9eS5tZXJnZShFKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0dGVkfSk7RS5leGl0KCkucmVtb3ZlKCk7dmFyIFQ9dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksQT1ULmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UoVCkuYXR0cigiY2xhc3MiLCJkb21haW4iKTtzd2l0Y2godC5vcmllbnQpe2Nhc2UiYm90dG9tIjpvPXQuYXhpc1gsZy5hdHRyKCJ4MSIsYSkuYXR0cigieDIiLGEpLmF0dHIoInkyIixmdW5jdGlvbihlLG4pe3JldHVybiB0LmxpbmVZMihlLG4pfSksYi5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRleHRZKGUsbil9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQudGV4dFRyYW5zZm9ybShlLG4pfSkuc3R5bGUoInRleHQtYW5jaG9yIixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRleHRUZXh0QW5jaG9yKGUsbil9KSx2LmF0dHIoIngiLDApLmF0dHIoImR5IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRzcGFuRHkoZSxuKX0pLmF0dHIoImR4IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRzcGFuRHgoZSxuKX0pLEEuYXR0cigiZCIsIk0iK3QucmFuZ2VbMF0rIiwiK3Qub3V0ZXJUaWNrU2l6ZSsiVjBIIit0LnJhbmdlWzFdKyJWIit0Lm91dGVyVGlja1NpemUpO2JyZWFrO2Nhc2UidG9wIjpvPXQuYXhpc1gsZy5hdHRyKCJ4MSIsYSkuYXR0cigieDIiLGEpLmF0dHIoInkyIixmdW5jdGlvbihlLG4pe3JldHVybi0xKnQubGluZVkyKGUsbil9KSxiLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKGUsbil7cmV0dXJuLTEqdC50ZXh0WShlLG4pLShyLmlzQ2F0ZWdvcnk/Mjp0LnRpY2tMZW5ndGgtMil9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQudGV4dFRyYW5zZm9ybShlLG4pfSkuc3R5bGUoInRleHQtYW5jaG9yIixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRleHRUZXh0QW5jaG9yKGUsbil9KSx2LmF0dHIoIngiLDApLmF0dHIoImR5IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRzcGFuRHkoZSxuKX0pLmF0dHIoImR4IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRzcGFuRHgoZSxuKX0pLEEuYXR0cigiZCIsIk0iK3QucmFuZ2VbMF0rIiwiKy10Lm91dGVyVGlja1NpemUrIlYwSCIrdC5yYW5nZVsxXSsiViIrLXQub3V0ZXJUaWNrU2l6ZSk7YnJlYWs7Y2FzZSJsZWZ0IjpvPXQuYXhpc1ksZy5hdHRyKCJ4MiIsLXQuaW5uZXJUaWNrU2l6ZSkuYXR0cigieTEiLGwpLmF0dHIoInkyIixsKSxiLmF0dHIoIngiLC10LnRpY2tMZW5ndGgpLmF0dHIoInkiLHQudGlja09mZnNldCkuc3R5bGUoInRleHQtYW5jaG9yIiwiZW5kIiksdi5hdHRyKCJ4IiwtdC50aWNrTGVuZ3RoKS5hdHRyKCJkeSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkR5KGUsbil9KSxBLmF0dHIoImQiLCJNIistdC5vdXRlclRpY2tTaXplKyIsIit0LnJhbmdlWzBdKyJIMFYiK3QucmFuZ2VbMV0rIkgiKy10Lm91dGVyVGlja1NpemUpO2JyZWFrO2Nhc2UicmlnaHQiOm89dC5heGlzWSxnLmF0dHIoIngyIix0LmlubmVyVGlja1NpemUpLmF0dHIoInkxIixsKS5hdHRyKCJ5MiIsbCksYi5hdHRyKCJ4Iix0LnRpY2tMZW5ndGgpLmF0dHIoInkiLHQudGlja09mZnNldCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2LmF0dHIoIngiLHQudGlja0xlbmd0aCkuYXR0cigiZHkiLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQudHNwYW5EeShlLG4pfSksQS5hdHRyKCJkIiwiTSIrdC5vdXRlclRpY2tTaXplKyIsIit0LnJhbmdlWzBdKyJIMFYiK3QucmFuZ2VbMV0rIkgiK3Qub3V0ZXJUaWNrU2l6ZSl9aWYoZC5yYW5nZUJhbmQpe3ZhciBDPWQsTz1DLnJhbmdlQmFuZCgpLzI7Yz1kPWZ1bmN0aW9uKGUpe3JldHVybiBDKGUpK099fWVsc2UgYy5yYW5nZUJhbmQ/Yz1kOm0uY2FsbChvLGQsdC50aWNrT2Zmc2V0KTtmLmNhbGwobyxjLHQudGlja09mZnNldCksaT0ocz9oLnRyYW5zaXRpb24ocyk6aCkuc3R5bGUoIm9wYWNpdHkiLDEpLmNhbGwobyxkLHQudGlja09mZnNldCl9KSxpfXZhciB0PXRoaXMsbj10LmQzLHI9dC5wYXJhbXM7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuc2NhbGU9bixlKTp0LnNjYWxlfSxlLm9yaWVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5vcmllbnQ9biBpbnt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX0/bisiIjoiYm90dG9tIixlKTp0Lm9yaWVudH0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tGb3JtYXQ9bixlKTp0LnRpY2tGb3JtYXR9LGUudGlja0NlbnRlcmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tDZW50ZXJlZD1uLGUpOnQudGlja0NlbnRlcmVkfSxlLnRpY2tPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC50aWNrT2Zmc2V0fSxlLnRpY2tJbnRlcnZhbD1mdW5jdGlvbigpe3ZhciBuLG87cmV0dXJuIHIuaXNDYXRlZ29yeT9uPTIqdC50aWNrT2Zmc2V0OihvPWUuZy5zZWxlY3QoInBhdGguZG9tYWluIikubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCktMip0Lm91dGVyVGlja1NpemUsbj1vL2UuZy5zZWxlY3RBbGwoImxpbmUiKS5zaXplKCkpLG49PT0xLzA/MDpufSxlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudGlja0FyZ3VtZW50cz1hcmd1bWVudHMsZSk6dC50aWNrQXJndW1lbnRzfSxlLnRpY2tDdWxsaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tDdWxsaW5nPW4sZSk6dC50aWNrQ3VsbGluZ30sZS50aWNrVmFsdWVzPWZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXQudGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBuKHQuc2NhbGUuZG9tYWluKCkpfTtlbHNle2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnRpY2tWYWx1ZXM7dC50aWNrVmFsdWVzPW59cmV0dXJuIGV9LGV9O3ZhciBvPXt0YXJnZXQ6ImMzLXRhcmdldCIsY2hhcnQ6ImMzLWNoYXJ0IixjaGFydExpbmU6ImMzLWNoYXJ0LWxpbmUiLGNoYXJ0TGluZXM6ImMzLWNoYXJ0LWxpbmVzIixjaGFydEJhcjoiYzMtY2hhcnQtYmFyIixjaGFydEJhcnM6ImMzLWNoYXJ0LWJhcnMiLGNoYXJ0VGV4dDoiYzMtY2hhcnQtdGV4dCIsY2hhcnRUZXh0czoiYzMtY2hhcnQtdGV4dHMiLGNoYXJ0QXJjOiJjMy1jaGFydC1hcmMiLGNoYXJ0QXJjczoiYzMtY2hhcnQtYXJjcyIsY2hhcnRBcmNzVGl0bGU6ImMzLWNoYXJ0LWFyY3MtdGl0bGUiLGNoYXJ0QXJjc0JhY2tncm91bmQ6ImMzLWNoYXJ0LWFyY3MtYmFja2dyb3VuZCIsY2hhcnRBcmNzR2F1Z2VVbml0OiJjMy1jaGFydC1hcmNzLWdhdWdlLXVuaXQiLGNoYXJ0QXJjc0dhdWdlTWF4OiJjMy1jaGFydC1hcmNzLWdhdWdlLW1heCIsY2hhcnRBcmNzR2F1Z2VNaW46ImMzLWNoYXJ0LWFyY3MtZ2F1Z2UtbWluIixzZWxlY3RlZENpcmNsZToiYzMtc2VsZWN0ZWQtY2lyY2xlIixzZWxlY3RlZENpcmNsZXM6ImMzLXNlbGVjdGVkLWNpcmNsZXMiLGV2ZW50UmVjdDoiYzMtZXZlbnQtcmVjdCIsZXZlbnRSZWN0czoiYzMtZXZlbnQtcmVjdHMiLGV2ZW50UmVjdHNTaW5nbGU6ImMzLWV2ZW50LXJlY3RzLXNpbmdsZSIsZXZlbnRSZWN0c011bHRpcGxlOiJjMy1ldmVudC1yZWN0cy1tdWx0aXBsZSIsem9vbVJlY3Q6ImMzLXpvb20tcmVjdCIsYnJ1c2g6ImMzLWJydXNoIixkcmFnWm9vbToiYzMtZHJhZy16b29tIixmb2N1c2VkOiJjMy1mb2N1c2VkIixkZWZvY3VzZWQ6ImMzLWRlZm9jdXNlZCIscmVnaW9uOiJjMy1yZWdpb24iLHJlZ2lvbnM6ImMzLXJlZ2lvbnMiLHRpdGxlOiJjMy10aXRsZSIsdG9vbHRpcENvbnRhaW5lcjoiYzMtdG9vbHRpcC1jb250YWluZXIiLHRvb2x0aXA6ImMzLXRvb2x0aXAiLHRvb2x0aXBOYW1lOiJjMy10b29sdGlwLW5hbWUiLHNoYXBlOiJjMy1zaGFwZSIsc2hhcGVzOiJjMy1zaGFwZXMiLGxpbmU6ImMzLWxpbmUiLGxpbmVzOiJjMy1saW5lcyIsYmFyOiJjMy1iYXIiLGJhcnM6ImMzLWJhcnMiLGNpcmNsZToiYzMtY2lyY2xlIixjaXJjbGVzOiJjMy1jaXJjbGVzIixhcmM6ImMzLWFyYyIsYXJjTGFiZWxMaW5lOiJjMy1hcmMtbGFiZWwtbGluZSIsYXJjczoiYzMtYXJjcyIsYXJlYToiYzMtYXJlYSIsYXJlYXM6ImMzLWFyZWFzIixlbXB0eToiYzMtZW1wdHkiLHRleHQ6ImMzLXRleHQiLHRleHRzOiJjMy10ZXh0cyIsZ2F1Z2VWYWx1ZToiYzMtZ2F1Z2UtdmFsdWUiLGdyaWQ6ImMzLWdyaWQiLGdyaWRMaW5lczoiYzMtZ3JpZC1saW5lcyIseGdyaWQ6ImMzLXhncmlkIix4Z3JpZHM6ImMzLXhncmlkcyIseGdyaWRMaW5lOiJjMy14Z3JpZC1saW5lIix4Z3JpZExpbmVzOiJjMy14Z3JpZC1saW5lcyIseGdyaWRGb2N1czoiYzMteGdyaWQtZm9jdXMiLHlncmlkOiJjMy15Z3JpZCIseWdyaWRzOiJjMy15Z3JpZHMiLHlncmlkTGluZToiYzMteWdyaWQtbGluZSIseWdyaWRMaW5lczoiYzMteWdyaWQtbGluZXMiLGF4aXM6ImMzLWF4aXMiLGF4aXNYOiJjMy1heGlzLXgiLGF4aXNYTGFiZWw6ImMzLWF4aXMteC1sYWJlbCIsYXhpc1k6ImMzLWF4aXMteSIsYXhpc1lMYWJlbDoiYzMtYXhpcy15LWxhYmVsIixheGlzWTI6ImMzLWF4aXMteTIiLGF4aXNZMkxhYmVsOiJjMy1heGlzLXkyLWxhYmVsIixsZWdlbmRCYWNrZ3JvdW5kOiJjMy1sZWdlbmQtYmFja2dyb3VuZCIsbGVnZW5kSXRlbToiYzMtbGVnZW5kLWl0ZW0iLGxlZ2VuZEl0ZW1FdmVudDoiYzMtbGVnZW5kLWl0ZW0tZXZlbnQiLGxlZ2VuZEl0ZW1UaWxlOiJjMy1sZWdlbmQtaXRlbS10aWxlIixsZWdlbmRJdGVtSGlkZGVuOiJjMy1sZWdlbmQtaXRlbS1oaWRkZW4iLGxlZ2VuZEl0ZW1Gb2N1c2VkOiJjMy1sZWdlbmQtaXRlbS1mb2N1c2VkIixkcmFnYXJlYToiYzMtZHJhZ2FyZWEiLEVYUEFOREVEOiJfZXhwYW5kZWRfIixTRUxFQ1RFRDoiX3NlbGVjdGVkXyIsSU5DTFVERUQ6Il9pbmNsdWRlZF8ifSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9LGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZSkrLjV9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIDEwKk1hdGguY2VpbChlLzEwKX0sYz1mdW5jdGlvbihlKXtyZXR1cm4gZVsxXS1lWzBdfSxkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbShlW3RdKT9lW3RdOm59LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPVtlLnBhdGhTZWdMaXN0LmdldEl0ZW0oMCksZS5wYXRoU2VnTGlzdC5nZXRJdGVtKDEpXTtyZXR1cm57eDpuWzBdLngseTpNYXRoLm1pbihuWzBdLnksblsxXS55KSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19LHA9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPT09dCYmKG49ITApfSksbn0sZj1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0saD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWV8fGIoZSkmJjA9PT1lLmxlbmd0aHx8Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpzKGUpKSYmMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aH0sZz1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX0sYj1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fDA9PT1lfSx2PWZ1bmN0aW9uKGUpe3JldHVybiFoKGUpfSxUPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpOmV9LEE9ZnVuY3Rpb24gZSh0KXtpKHRoaXMsZSksdGhpcy5vd25lcj10LHRoaXMuZDM9dC5kMyx0aGlzLmludGVybmFsPXJ9O0EucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyLHQ9ZS5jb25maWcsbj1lLm1haW47ZS5heGVzLng9bi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5heGlzKyIgIitvLmF4aXNYKS5hdHRyKCJjbGlwLXBhdGgiLHQuYXhpc194X2lubmVyPyIiOmUuY2xpcFBhdGhGb3JYQXhpcykuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgieCIpKS5zdHlsZSgidmlzaWJpbGl0eSIsdC5heGlzX3hfc2hvdz8idmlzaWJsZSI6ImhpZGRlbiIpLGUuYXhlcy54LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixvLmF4aXNYTGFiZWwpLmF0dHIoInRyYW5zZm9ybSIsdC5heGlzX3JvdGF0ZWQ/InJvdGF0ZSgtOTApIjoiIikuc3R5bGUoInRleHQtYW5jaG9yIix0aGlzLnRleHRBbmNob3JGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpLGUuYXhlcy55PW4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8uYXhpcysiICIrby5heGlzWSkuYXR0cigiY2xpcC1wYXRoIix0LmF4aXNfeV9pbm5lcj8iIjplLmNsaXBQYXRoRm9yWUF4aXMpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoInkiKSkuc3R5bGUoInZpc2liaWxpdHkiLHQuYXhpc195X3Nob3c/InZpc2libGUiOiJoaWRkZW4iKSxlLmF4ZXMueS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsby5heGlzWUxhYmVsKS5hdHRyKCJ0cmFuc2Zvcm0iLHQuYXhpc19yb3RhdGVkPyIiOiJyb3RhdGUoLTkwKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsdGhpcy50ZXh0QW5jaG9yRm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKSxlLmF4ZXMueTI9bi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5heGlzKyIgIitvLmF4aXNZMikuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgieTIiKSkuc3R5bGUoInZpc2liaWxpdHkiLHQuYXhpc195Ml9zaG93PyJ2aXNpYmxlIjoiaGlkZGVuIiksZS5heGVzLnkyLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixvLmF4aXNZMkxhYmVsKS5hdHRyKCJ0cmFuc2Zvcm0iLHQuYXhpc19yb3RhdGVkPyIiOiJyb3RhdGUoLTkwKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsdGhpcy50ZXh0QW5jaG9yRm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSl9LEEucHJvdG90eXBlLmdldFhBeGlzPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe3ZhciBhPXRoaXMub3duZXIsbD1hLmNvbmZpZyx1PXtpc0NhdGVnb3J5OmEuaXNDYXRlZ29yaXplZCgpLHdpdGhPdXRlclRpY2s6byx0aWNrTXVsdGlsaW5lOmwuYXhpc194X3RpY2tfbXVsdGlsaW5lLHRpY2tNdWx0aWxpbmVNYXg6bC5heGlzX3hfdGlja19tdWx0aWxpbmU/TnVtYmVyKGwuYXhpc194X3RpY2tfbXVsdGlsaW5lTWF4KTowLHRpY2tXaWR0aDpsLmF4aXNfeF90aWNrX3dpZHRoLHRpY2tUZXh0Um90YXRlOmk/MDpsLmF4aXNfeF90aWNrX3JvdGF0ZSx3aXRob3V0VHJhbnNpdGlvbjpzfSxjPW5ldyB0aGlzLmludGVybmFsKHRoaXMsdSkuYXhpcy5zY2FsZShlKS5vcmllbnQodCk7cmV0dXJuIGEuaXNUaW1lU2VyaWVzKCkmJnImJiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5wYXJzZURhdGUoZSl9KSksYy50aWNrRm9ybWF0KG4pLnRpY2tWYWx1ZXMociksYS5pc0NhdGVnb3JpemVkKCkmJihjLnRpY2tDZW50ZXJlZChsLmF4aXNfeF90aWNrX2NlbnRlcmVkKSxoKGwuYXhpc194X3RpY2tfY3VsbGluZykmJihsLmF4aXNfeF90aWNrX2N1bGxpbmc9ITEpKSxjfSxBLnByb3RvdHlwZS51cGRhdGVYQXhpc1RpY2tWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMub3duZXIsbz1yLmNvbmZpZztyZXR1cm4oby5heGlzX3hfdGlja19maXR8fG8uYXhpc194X3RpY2tfY291bnQpJiYobj10aGlzLmdlbmVyYXRlVGlja1ZhbHVlcyhyLm1hcFRhcmdldHNUb1VuaXF1ZVhzKGUpLG8uYXhpc194X3RpY2tfY291bnQsci5pc1RpbWVTZXJpZXMoKSkpLHQ/dC50aWNrVmFsdWVzKG4pOihyLnhBeGlzLnRpY2tWYWx1ZXMobiksci5zdWJYQXhpcy50aWNrVmFsdWVzKG4pKSxufSxBLnByb3RvdHlwZS5nZXRZQXhpcz1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2YXIgYT10aGlzLm93bmVyLGw9YS5jb25maWcsdT17d2l0aE91dGVyVGljazpvLHdpdGhvdXRUcmFuc2l0aW9uOnMsdGlja1RleHRSb3RhdGU6aT8wOmwuYXhpc195X3RpY2tfcm90YXRlfSxjPW5ldyB0aGlzLmludGVybmFsKHRoaXMsdSkuYXhpcy5zY2FsZShlKS5vcmllbnQodCkudGlja0Zvcm1hdChuKTtyZXR1cm4gYS5pc1RpbWVTZXJpZXNZKCk/Yy50aWNrcyhsLmF4aXNfeV90aWNrX3RpbWVfdHlwZSxsLmF4aXNfeV90aWNrX3RpbWVfaW50ZXJ2YWwpOmMudGlja1ZhbHVlcyhyKSxjfSxBLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm93bmVyLmNvbmZpZztyZXR1cm4gZSBpbiB0LmRhdGFfYXhlcz90LmRhdGFfYXhlc1tlXToieSJ9LEEucHJvdG90eXBlLmdldFhBeGlzVGlja0Zvcm1hdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXIsdD1lLmNvbmZpZyxuPWUuaXNUaW1lU2VyaWVzKCk/ZS5kZWZhdWx0QXhpc1RpbWVGb3JtYXQ6ZS5pc0NhdGVnb3JpemVkKCk/ZS5jYXRlZ29yeU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O3JldHVybiB0LmF4aXNfeF90aWNrX2Zvcm1hdCYmKGcodC5heGlzX3hfdGlja19mb3JtYXQpP249dC5heGlzX3hfdGlja19mb3JtYXQ6ZS5pc1RpbWVTZXJpZXMoKSYmKG49ZnVuY3Rpb24obil7cmV0dXJuIG4/ZS5heGlzVGltZUZvcm1hdCh0LmF4aXNfeF90aWNrX2Zvcm1hdCkobik6IiJ9KSksZyhuKT9mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKGUsdCl9Om59LEEucHJvdG90eXBlLmdldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8KHQ/dC50aWNrVmFsdWVzKCk6dm9pZCAwKX0sQS5wcm90b3R5cGUuZ2V0WEF4aXNUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGlja1ZhbHVlcyh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3hfdGlja192YWx1ZXMsdGhpcy5vd25lci54QXhpcyl9LEEucHJvdG90eXBlLmdldFlBeGlzVGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpY2tWYWx1ZXModGhpcy5vd25lci5jb25maWcuYXhpc195X3RpY2tfdmFsdWVzLHRoaXMub3duZXIueUF4aXMpfSxBLnByb3RvdHlwZS5nZXRZMkF4aXNUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGlja1ZhbHVlcyh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3kyX3RpY2tfdmFsdWVzLHRoaXMub3duZXIueTJBeGlzKX0sQS5wcm90b3R5cGUuZ2V0TGFiZWxPcHRpb25CeUF4aXNJZD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMub3duZXIscj1uLmNvbmZpZztyZXR1cm4ieSI9PT1lP3Q9ci5heGlzX3lfbGFiZWw6InkyIj09PWU/dD1yLmF4aXNfeTJfbGFiZWw6IngiPT09ZSYmKHQ9ci5heGlzX3hfbGFiZWwpLHR9LEEucHJvdG90eXBlLmdldExhYmVsVGV4dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoZSk7cmV0dXJuIGIodCk/dDp0P3QudGV4dDpudWxsfSxBLnByb3RvdHlwZS5zZXRMYWJlbFRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm93bmVyLHI9bi5jb25maWcsbz10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoZSk7YihvKT8ieSI9PT1lP3IuYXhpc195X2xhYmVsPXQ6InkyIj09PWU/ci5heGlzX3kyX2xhYmVsPXQ6IngiPT09ZSYmKHIuYXhpc194X2xhYmVsPXQpOm8mJihvLnRleHQ9dCl9LEEucHJvdG90eXBlLmdldExhYmVsUG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoZSkscj1uJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1uPyJ1bmRlZmluZWQiOnMobikpJiZuLnBvc2l0aW9uP24ucG9zaXRpb246dDtyZXR1cm57aXNJbm5lcjpyLmluZGV4T2YoImlubmVyIik+PTAsaXNPdXRlcjpyLmluZGV4T2YoIm91dGVyIik+PTAsaXNMZWZ0OnIuaW5kZXhPZigibGVmdCIpPj0wLGlzQ2VudGVyOnIuaW5kZXhPZigiY2VudGVyIik+PTAsaXNSaWdodDpyLmluZGV4T2YoInJpZ2h0Iik+PTAsaXNUb3A6ci5pbmRleE9mKCJ0b3AiKT49MCxpc01pZGRsZTpyLmluZGV4T2YoIm1pZGRsZSIpPj0wLGlzQm90dG9tOnIuaW5kZXhPZigiYm90dG9tIik+PTB9fSxBLnByb3RvdHlwZS5nZXRYQXhpc0xhYmVsUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYWJlbFBvc2l0aW9uKCJ4Iix0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQ/ImlubmVyLXRvcCI6ImlubmVyLXJpZ2h0Iil9LEEucHJvdG90eXBlLmdldFlBeGlzTGFiZWxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsUG9zaXRpb24oInkiLHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZD8iaW5uZXItcmlnaHQiOiJpbm5lci10b3AiKX0sQS5wcm90b3R5cGUuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsUG9zaXRpb24oInkyIix0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQ/ImlubmVyLXJpZ2h0IjoiaW5uZXItdG9wIil9LEEucHJvdG90eXBlLmdldExhYmVsUG9zaXRpb25CeUlkPWZ1bmN0aW9uKGUpe3JldHVybiJ5MiI9PT1lP3RoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpOiJ5Ij09PWU/dGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKTp0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpfSxBLnByb3RvdHlwZS50ZXh0Rm9yWEF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsVGV4dCgieCIpfSxBLnByb3RvdHlwZS50ZXh0Rm9yWUF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsVGV4dCgieSIpfSxBLnByb3RvdHlwZS50ZXh0Rm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYWJlbFRleHQoInkyIil9LEEucHJvdG90eXBlLnhGb3JBeGlzTGFiZWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm93bmVyO3JldHVybiBlP3QuaXNMZWZ0PzA6dC5pc0NlbnRlcj9uLndpZHRoLzI6bi53aWR0aDp0LmlzQm90dG9tPy1uLmhlaWdodDp0LmlzTWlkZGxlPy1uLmhlaWdodC8yOjB9LEEucHJvdG90eXBlLmR4Rm9yQXhpc0xhYmVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/dC5pc0xlZnQ/IjAuNWVtIjp0LmlzUmlnaHQ/Ii0wLjVlbSI6IjAiOnQuaXNUb3A/Ii0wLjVlbSI6dC5pc0JvdHRvbT8iMC41ZW0iOiIwIn0sQS5wcm90b3R5cGUudGV4dEFuY2hvckZvckF4aXNMYWJlbD1mdW5jdGlvbihlLHQpe3JldHVybiBlP3QuaXNMZWZ0PyJzdGFydCI6dC5pc0NlbnRlcj8ibWlkZGxlIjoiZW5kIjp0LmlzQm90dG9tPyJzdGFydCI6dC5pc01pZGRsZT8ibWlkZGxlIjoiZW5kIn0sQS5wcm90b3R5cGUueEZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKCF0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKSl9LEEucHJvdG90eXBlLnhGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKSl9LEEucHJvdG90eXBlLnhGb3JZMkF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnhGb3JBeGlzTGFiZWwodGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKX0sQS5wcm90b3R5cGUuZHhGb3JYQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHhGb3JBeGlzTGFiZWwoIXRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0sQS5wcm90b3R5cGUuZHhGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHhGb3JBeGlzTGFiZWwodGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkpfSxBLnByb3RvdHlwZS5keEZvclkyQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHhGb3JBeGlzTGFiZWwodGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKX0sQS5wcm90b3R5cGUuZHlGb3JYQXhpc0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcix0PWUuY29uZmlnLG49dGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKTtyZXR1cm4gdC5heGlzX3JvdGF0ZWQ/bi5pc0lubmVyPyIxLjJlbSI6LTI1LShlLmNvbmZpZy5heGlzX3hfaW5uZXI/MDp0aGlzLmdldE1heFRpY2tXaWR0aCgieCIpKTpuLmlzSW5uZXI/Ii0wLjVlbSI6dC5heGlzX3hfaGVpZ2h0P3QuYXhpc194X2hlaWdodC0xMDoiM2VtIn0sQS5wcm90b3R5cGUuZHlGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcix0PXRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCk7cmV0dXJuIGUuY29uZmlnLmF4aXNfcm90YXRlZD90LmlzSW5uZXI/Ii0wLjVlbSI6IjNlbSI6dC5pc0lubmVyPyIxLjJlbSI6LTEwLShlLmNvbmZpZy5heGlzX3lfaW5uZXI/MDp0aGlzLmdldE1heFRpY2tXaWR0aCgieSIpKzEwKX0sQS5wcm90b3R5cGUuZHlGb3JZMkF4aXNMYWJlbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXIsdD10aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKTtyZXR1cm4gZS5jb25maWcuYXhpc19yb3RhdGVkP3QuaXNJbm5lcj8iMS4yZW0iOiItMi4yZW0iOnQuaXNJbm5lcj8iLTAuNWVtIjoxNSsoZS5jb25maWcuYXhpc195Ml9pbm5lcj8wOnRoaXMuZ2V0TWF4VGlja1dpZHRoKCJ5MiIpKzE1KX0sQS5wcm90b3R5cGUudGV4dEFuY2hvckZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoIWUuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0sQS5wcm90b3R5cGUudGV4dEFuY2hvckZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoZS5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkpfSxBLnByb3RvdHlwZS50ZXh0QW5jaG9yRm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoZS5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKX0sQS5wcm90b3R5cGUuZ2V0TWF4VGlja1dpZHRoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhPXRoaXMub3duZXIsbD1hLmNvbmZpZyx1PTA7cmV0dXJuIHQmJmEuY3VycmVudE1heFRpY2tXaWR0aHNbZV0/YS5jdXJyZW50TWF4VGlja1dpZHRoc1tlXTooYS5zdmcmJihuPWEuZmlsdGVyVGFyZ2V0c1RvU2hvdyhhLmRhdGEudGFyZ2V0cyksInkiPT09ZT8ocj1hLnkuY29weSgpLmRvbWFpbihhLmdldFlEb21haW4obiwieSIpKSxvPXRoaXMuZ2V0WUF4aXMocixhLnlPcmllbnQsbC5heGlzX3lfdGlja19mb3JtYXQsYS55QXhpc1RpY2tWYWx1ZXMsITEsITAsITApKToieTIiPT09ZT8ocj1hLnkyLmNvcHkoKS5kb21haW4oYS5nZXRZRG9tYWluKG4sInkyIikpLG89dGhpcy5nZXRZQXhpcyhyLGEueTJPcmllbnQsbC5heGlzX3kyX3RpY2tfZm9ybWF0LGEueTJBeGlzVGlja1ZhbHVlcywhMSwhMCwhMCkpOihyPWEueC5jb3B5KCkuZG9tYWluKGEuZ2V0WERvbWFpbihuKSksbz10aGlzLmdldFhBeGlzKHIsYS54T3JpZW50LGEueEF4aXNUaWNrRm9ybWF0LGEueEF4aXNUaWNrVmFsdWVzLCExLCEwLCEwKSx0aGlzLnVwZGF0ZVhBeGlzVGlja1ZhbHVlcyhuLG8pKSxzPWEuZDMuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJjMyIsITApLGk9cy5hcHBlbmQoInN2ZyIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoInBvc2l0aW9uIiwiZml4ZWQiKS5zdHlsZSgidG9wIiwwKS5zdHlsZSgibGVmdCIsMCksaS5hcHBlbmQoImciKS5jYWxsKG8pLmVhY2goZnVuY3Rpb24oKXthLmQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1PGUud2lkdGgmJih1PWUud2lkdGgpfSkscy5yZW1vdmUoKX0pKSxhLmN1cnJlbnRNYXhUaWNrV2lkdGhzW2VdPXU8PTA/YS5jdXJyZW50TWF4VGlja1dpZHRoc1tlXTp1LGEuY3VycmVudE1heFRpY2tXaWR0aHNbZV0pfSxBLnByb3RvdHlwZS51cGRhdGVMYWJlbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vd25lcixuPXQubWFpbi5zZWxlY3QoIi4iK28uYXhpc1grIiAuIitvLmF4aXNYTGFiZWwpLHI9dC5tYWluLnNlbGVjdCgiLiIrby5heGlzWSsiIC4iK28uYXhpc1lMYWJlbCkscz10Lm1haW4uc2VsZWN0KCIuIitvLmF4aXNZMisiIC4iK28uYXhpc1kyTGFiZWwpOyhlP24udHJhbnNpdGlvbigpOm4pLmF0dHIoIngiLHRoaXMueEZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHgiLHRoaXMuZHhGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR5Iix0aGlzLmR5Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKS50ZXh0KHRoaXMudGV4dEZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSksKGU/ci50cmFuc2l0aW9uKCk6cikuYXR0cigieCIsdGhpcy54Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeCIsdGhpcy5keEZvcllBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHkiLHRoaXMuZHlGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLnRleHQodGhpcy50ZXh0Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKSwoZT9zLnRyYW5zaXRpb24oKTpzKS5hdHRyKCJ4Iix0aGlzLnhGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeCIsdGhpcy5keEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR5Iix0aGlzLmR5Rm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSkudGV4dCh0aGlzLnRleHRGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKX0sQS5wcm90b3R5cGUuZ2V0UGFkZGluZz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz0ibnVtYmVyIj09dHlwZW9mIGU/ZTplW3RdO3JldHVybiB5KG8pPyJyYXRpbyI9PT1lLnVuaXQ/ZVt0XSpyOnRoaXMuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcobyxyKTpufSxBLnByb3RvdHlwZS5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3duZXI7cmV0dXJuIHQqKGUvKG4uY29uZmlnLmF4aXNfcm90YXRlZD9uLndpZHRoOm4uaGVpZ2h0KSl9LEEucHJvdG90eXBlLmdlbmVyYXRlVGlja1ZhbHVlcz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzLGksYSxsLHUsYz1lO2lmKHQpaWYoMT09PShyPWcodCk/dCgpOnQpKWM9W2VbMF1dO2Vsc2UgaWYoMj09PXIpYz1bZVswXSxlW2UubGVuZ3RoLTFdXTtlbHNlIGlmKHI+Mil7Zm9yKGk9ci0yLG89ZVswXSxzPWVbZS5sZW5ndGgtMV0sYT0ocy1vKS8oaSsxKSxjPVtvXSxsPTA7bDxpO2wrKyl1PStvK2EqKGwrMSksYy5wdXNoKG4/bmV3IERhdGUodSk6dSk7Yy5wdXNoKHMpfXJldHVybiBufHwoYz1jLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpLGN9LEEucHJvdG90eXBlLmdlbmVyYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vd25lcixuPXQuYXhlcztyZXR1cm57YXhpc1g6ZT9uLngudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpOm4ueCxheGlzWTplP24ueS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSk6bi55LGF4aXNZMjplP24ueTIudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpOm4ueTIsYXhpc1N1Ylg6ZT9uLnN1YngudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpOm4uc3VieH19LEEucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3duZXIscj1lP24uZDMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpOm51bGw7bi5heGVzLnguc3R5bGUoIm9wYWNpdHkiLHQ/MDoxKS5jYWxsKG4ueEF4aXMsciksbi5heGVzLnkuc3R5bGUoIm9wYWNpdHkiLHQ/MDoxKS5jYWxsKG4ueUF4aXMsciksbi5heGVzLnkyLnN0eWxlKCJvcGFjaXR5Iix0PzA6MSkuY2FsbChuLnkyQXhpcyxyKSxuLmF4ZXMuc3VieC5zdHlsZSgib3BhY2l0eSIsdD8wOjEpLmNhbGwobi5zdWJYQXhpcyxyKX07dmFyIEM9e3ZlcnNpb246IjAuNi43IixjaGFydDp7Zm46dC5wcm90b3R5cGUsaW50ZXJuYWw6e2ZuOmUucHJvdG90eXBlLGF4aXM6e2ZuOkEucHJvdG90eXBlLGludGVybmFsOntmbjpyLnByb3RvdHlwZX19fX0sZ2VuZXJhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfX07cmV0dXJuIGUucHJvdG90eXBlLmJlZm9yZUluaXQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmFmdGVySW5pdD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztpZihlLmluaXRQYXJhbXMoKSx0LmRhdGFfdXJsKWUuY29udmVydFVybFRvRGF0YSh0LmRhdGFfdXJsLHQuZGF0YV9taW1lVHlwZSx0LmRhdGFfaGVhZGVycyx0LmRhdGFfa2V5cyxlLmluaXRXaXRoRGF0YSk7ZWxzZSBpZih0LmRhdGFfanNvbillLmluaXRXaXRoRGF0YShlLmNvbnZlcnRKc29uVG9EYXRhKHQuZGF0YV9qc29uLHQuZGF0YV9rZXlzKSk7ZWxzZSBpZih0LmRhdGFfcm93cyllLmluaXRXaXRoRGF0YShlLmNvbnZlcnRSb3dzVG9EYXRhKHQuZGF0YV9yb3dzKSk7ZWxzZXtpZighdC5kYXRhX2NvbHVtbnMpdGhyb3cgRXJyb3IoInVybCBvciBqc29uIG9yIHJvd3Mgb3IgY29sdW1ucyBpcyByZXF1aXJlZC4iKTtlLmluaXRXaXRoRGF0YShlLmNvbnZlcnRDb2x1bW5zVG9EYXRhKHQuZGF0YV9jb2x1bW5zKSl9fSxlLnByb3RvdHlwZS5pbml0UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZDMsbj1lLmNvbmZpZztlLmNsaXBJZD0iYzMtIisgK25ldyBEYXRlKyItY2xpcCIsZS5jbGlwSWRGb3JYQXhpcz1lLmNsaXBJZCsiLXhheGlzIixlLmNsaXBJZEZvcllBeGlzPWUuY2xpcElkKyIteWF4aXMiLGUuY2xpcElkRm9yR3JpZD1lLmNsaXBJZCsiLWdyaWQiLGUuY2xpcElkRm9yU3ViY2hhcnQ9ZS5jbGlwSWQrIi1zdWJjaGFydCIsZS5jbGlwUGF0aD1lLmdldENsaXBQYXRoKGUuY2xpcElkKSxlLmNsaXBQYXRoRm9yWEF4aXM9ZS5nZXRDbGlwUGF0aChlLmNsaXBJZEZvclhBeGlzKSxlLmNsaXBQYXRoRm9yWUF4aXM9ZS5nZXRDbGlwUGF0aChlLmNsaXBJZEZvcllBeGlzKSxlLmNsaXBQYXRoRm9yR3JpZD1lLmdldENsaXBQYXRoKGUuY2xpcElkRm9yR3JpZCksZS5jbGlwUGF0aEZvclN1YmNoYXJ0PWUuZ2V0Q2xpcFBhdGgoZS5jbGlwSWRGb3JTdWJjaGFydCksZS5kcmFnU3RhcnQ9bnVsbCxlLmRyYWdnaW5nPSExLGUuZmxvd2luZz0hMSxlLmNhbmNlbENsaWNrPSExLGUubW91c2VvdmVyPSExLGUudHJhbnNpdGluZz0hMSxlLmNvbG9yPWUuZ2VuZXJhdGVDb2xvcigpLGUubGV2ZWxDb2xvcj1lLmdlbmVyYXRlTGV2ZWxDb2xvcigpLGUuZGF0YVRpbWVQYXJzZT0obi5kYXRhX3hMb2NhbHRpbWU/dC50aW1lUGFyc2U6dC51dGNQYXJzZSkoZS5jb25maWcuZGF0YV94Rm9ybWF0KSxlLmF4aXNUaW1lRm9ybWF0PW4uYXhpc194X2xvY2FsdGltZT90LnRpbWVGb3JtYXQ6dC51dGNGb3JtYXQsZS5kZWZhdWx0QXhpc1RpbWVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TWlsbGlzZWNvbmRzKCk/dC50aW1lRm9ybWF0KCIuJUwiKShlKTplLmdldFNlY29uZHMoKT90LnRpbWVGb3JtYXQoIjolUyIpKGUpOmUuZ2V0TWludXRlcygpP3QudGltZUZvcm1hdCgiJUk6JU0iKShlKTplLmdldEhvdXJzKCk/dC50aW1lRm9ybWF0KCIlSSAlcCIpKGUpOmUuZ2V0RGF5KCkmJjEhPT1lLmdldERhdGUoKT90LnRpbWVGb3JtYXQoIiUtbS8lLWQiKShlKToxIT09ZS5nZXREYXRlKCk/dC50aW1lRm9ybWF0KCIlLW0vJS1kIikoZSk6ZS5nZXRNb250aCgpP3QudGltZUZvcm1hdCgiJS1tLyUtZCIpKGUpOnQudGltZUZvcm1hdCgiJVkvJS1tLyUtZCIpKGUpfSxlLmhpZGRlblRhcmdldElkcz1bXSxlLmhpZGRlbkxlZ2VuZElkcz1bXSxlLmZvY3VzZWRUYXJnZXRJZHM9W10sZS5kZWZvY3VzZWRUYXJnZXRJZHM9W10sZS54T3JpZW50PW4uYXhpc19yb3RhdGVkP24uYXhpc194X2lubmVyPyJyaWdodCI6ImxlZnQiOm4uYXhpc194X2lubmVyPyJ0b3AiOiJib3R0b20iLGUueU9yaWVudD1uLmF4aXNfcm90YXRlZD9uLmF4aXNfeV9pbm5lcj8idG9wIjoiYm90dG9tIjpuLmF4aXNfeV9pbm5lcj8icmlnaHQiOiJsZWZ0IixlLnkyT3JpZW50PW4uYXhpc19yb3RhdGVkP24uYXhpc195Ml9pbm5lcj8iYm90dG9tIjoidG9wIjpuLmF4aXNfeTJfaW5uZXI/ImxlZnQiOiJyaWdodCIsZS5zdWJYT3JpZW50PW4uYXhpc19yb3RhdGVkPyJsZWZ0IjoiYm90dG9tIixlLmlzTGVnZW5kUmlnaHQ9InJpZ2h0Ij09PW4ubGVnZW5kX3Bvc2l0aW9uLGUuaXNMZWdlbmRJbnNldD0iaW5zZXQiPT09bi5sZWdlbmRfcG9zaXRpb24sZS5pc0xlZ2VuZFRvcD0idG9wLWxlZnQiPT09bi5sZWdlbmRfaW5zZXRfYW5jaG9yfHwidG9wLXJpZ2h0Ij09PW4ubGVnZW5kX2luc2V0X2FuY2hvcixlLmlzTGVnZW5kTGVmdD0idG9wLWxlZnQiPT09bi5sZWdlbmRfaW5zZXRfYW5jaG9yfHwiYm90dG9tLWxlZnQiPT09bi5sZWdlbmRfaW5zZXRfYW5jaG9yLGUubGVnZW5kU3RlcD0wLGUubGVnZW5kSXRlbVdpZHRoPTAsZS5sZWdlbmRJdGVtSGVpZ2h0PTAsZS5jdXJyZW50TWF4VGlja1dpZHRocz17eDowLHk6MCx5MjowfSxlLnJvdGF0ZWRfcGFkZGluZ19sZWZ0PTMwLGUucm90YXRlZF9wYWRkaW5nX3JpZ2h0PW4uYXhpc19yb3RhdGVkJiYhbi5heGlzX3hfc2hvdz8wOjMwLGUucm90YXRlZF9wYWRkaW5nX3RvcD01LGUud2l0aG91dEZhZGVJbj17fSxlLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkPXZvaWQgMCxlLmF4ZXMuc3VieD10LnNlbGVjdEFsbChbXSl9LGUucHJvdG90eXBlLmluaXRDaGFydEVsZW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5pbml0QmFyJiZ0aGlzLmluaXRCYXIoKSx0aGlzLmluaXRMaW5lJiZ0aGlzLmluaXRMaW5lKCksdGhpcy5pbml0QXJjJiZ0aGlzLmluaXRBcmMoKSx0aGlzLmluaXRHYXVnZSYmdGhpcy5pbml0R2F1Z2UoKSx0aGlzLmluaXRUZXh0JiZ0aGlzLmluaXRUZXh0KCl9LGUucHJvdG90eXBlLmluaXRXaXRoRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxzPXIuZDMsaT1yLmNvbmZpZyxhPSEwO3IuYXhpcz1uZXcgQShyKSxpLmJpbmR0bz8iZnVuY3Rpb24iPT10eXBlb2YgaS5iaW5kdG8ubm9kZT9yLnNlbGVjdENoYXJ0PWkuYmluZHRvOnIuc2VsZWN0Q2hhcnQ9cy5zZWxlY3QoaS5iaW5kdG8pOnIuc2VsZWN0Q2hhcnQ9cy5zZWxlY3RBbGwoW10pLHIuc2VsZWN0Q2hhcnQuZW1wdHkoKSYmKHIuc2VsZWN0Q2hhcnQ9cy5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnN0eWxlKCJvcGFjaXR5IiwwKSxyLm9ic2VydmVJbnNlcnRlZChyLnNlbGVjdENoYXJ0KSxhPSExKSxyLnNlbGVjdENoYXJ0Lmh0bWwoIiIpLmNsYXNzZWQoImMzIiwhMCksci5kYXRhLnhzPXt9LHIuZGF0YS50YXJnZXRzPXIuY29udmVydERhdGFUb1RhcmdldHMoZSksaS5kYXRhX2ZpbHRlciYmKHIuZGF0YS50YXJnZXRzPXIuZGF0YS50YXJnZXRzLmZpbHRlcihpLmRhdGFfZmlsdGVyKSksaS5kYXRhX2hpZGUmJnIuYWRkSGlkZGVuVGFyZ2V0SWRzKCEwPT09aS5kYXRhX2hpZGU/ci5tYXBUb0lkcyhyLmRhdGEudGFyZ2V0cyk6aS5kYXRhX2hpZGUpLGkubGVnZW5kX2hpZGUmJnIuYWRkSGlkZGVuTGVnZW5kSWRzKCEwPT09aS5sZWdlbmRfaGlkZT9yLm1hcFRvSWRzKHIuZGF0YS50YXJnZXRzKTppLmxlZ2VuZF9oaWRlKSxyLnVwZGF0ZVNpemVzKCksci51cGRhdGVTY2FsZXMoKSxyLnguZG9tYWluKHMuZXh0ZW50KHIuZ2V0WERvbWFpbihyLmRhdGEudGFyZ2V0cykpKSxyLnkuZG9tYWluKHIuZ2V0WURvbWFpbihyLmRhdGEudGFyZ2V0cywieSIpKSxyLnkyLmRvbWFpbihyLmdldFlEb21haW4oci5kYXRhLnRhcmdldHMsInkyIikpLHIuc3ViWC5kb21haW4oci54LmRvbWFpbigpKSxyLnN1YlkuZG9tYWluKHIueS5kb21haW4oKSksci5zdWJZMi5kb21haW4oci55Mi5kb21haW4oKSksci5vcmdYRG9tYWluPXIueC5kb21haW4oKSxyLnN2Zz1yLnNlbGVjdENoYXJ0LmFwcGVuZCgic3ZnIikuc3R5bGUoIm92ZXJmbG93IiwiaGlkZGVuIikub24oIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25tb3VzZW92ZXIuY2FsbChyKX0pLm9uKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBpLm9ubW91c2VvdXQuY2FsbChyKX0pLHIuY29uZmlnLnN2Z19jbGFzc25hbWUmJnIuc3ZnLmF0dHIoImNsYXNzIixyLmNvbmZpZy5zdmdfY2xhc3NuYW1lKSx0PXIuc3ZnLmFwcGVuZCgiZGVmcyIpLHIuY2xpcENoYXJ0PXIuYXBwZW5kQ2xpcCh0LHIuY2xpcElkKSxyLmNsaXBYQXhpcz1yLmFwcGVuZENsaXAodCxyLmNsaXBJZEZvclhBeGlzKSxyLmNsaXBZQXhpcz1yLmFwcGVuZENsaXAodCxyLmNsaXBJZEZvcllBeGlzKSxyLmNsaXBHcmlkPXIuYXBwZW5kQ2xpcCh0LHIuY2xpcElkRm9yR3JpZCksci5jbGlwU3ViY2hhcnQ9ci5hcHBlbmRDbGlwKHQsci5jbGlwSWRGb3JTdWJjaGFydCksci51cGRhdGVTdmdTaXplKCksbj1yLm1haW49ci5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixyLmdldFRyYW5zbGF0ZSgibWFpbiIpKSxyLmluaXRQaWUmJnIuaW5pdFBpZSgpLHIuaW5pdERyYWdab29tJiZyLmluaXREcmFnWm9vbSgpLHIuaW5pdFN1YmNoYXJ0JiZyLmluaXRTdWJjaGFydCgpLHIuaW5pdFRvb2x0aXAmJnIuaW5pdFRvb2x0aXAoKSxyLmluaXRMZWdlbmQmJnIuaW5pdExlZ2VuZCgpLHIuaW5pdFRpdGxlJiZyLmluaXRUaXRsZSgpLHIuaW5pdFpvb20mJnIuaW5pdFpvb20oKSxyLmluaXRTdWJjaGFydEJydXNoJiZyLmluaXRTdWJjaGFydEJydXNoKCksbi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsby50ZXh0KyIgIitvLmVtcHR5KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIiksci5pbml0UmVnaW9uKCksci5pbml0R3JpZCgpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixyLmNsaXBQYXRoKS5hdHRyKCJjbGFzcyIsby5jaGFydCksaS5ncmlkX2xpbmVzX2Zyb250JiZyLmluaXRHcmlkTGluZXMoKSxyLmluaXRFdmVudFJlY3QoKSxyLmluaXRDaGFydEVsZW1lbnRzKCksci5heGlzLmluaXQoKSxyLnVwZGF0ZVRhcmdldHMoci5kYXRhLnRhcmdldHMpLGkuYXhpc194X3NlbGVjdGlvbiYmci5icnVzaC5zZWxlY3Rpb25Bc1ZhbHVlKHIuZ2V0RGVmYXVsdFNlbGVjdGlvbigpKSxhJiYoci51cGRhdGVEaW1lbnNpb24oKSxyLmNvbmZpZy5vbmluaXQuY2FsbChyKSxyLnJlZHJhdyh7d2l0aFRyYW5zaXRpb246ITEsd2l0aFRyYW5zZm9ybTohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVHJhbnNpdGlvbkZvckF4aXM6ITF9KSksci5iaW5kUmVzaXplKCksci5hcGkuZWxlbWVudD1yLnNlbGVjdENoYXJ0Lm5vZGUoKX0sZS5wcm90b3R5cGUuc21vb3RoTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzOyJncmlkIj09PXQmJmUuZWFjaChmdW5jdGlvbigpe3ZhciBlPW4uZDMuc2VsZWN0KHRoaXMpLHQ9ZS5hdHRyKCJ4MSIpLHI9ZS5hdHRyKCJ4MiIpLG89ZS5hdHRyKCJ5MSIpLHM9ZS5hdHRyKCJ5MiIpO2UuYXR0cih7eDE6TWF0aC5jZWlsKHQpLHgyOk1hdGguY2VpbChyKSx5MTpNYXRoLmNlaWwobykseTI6TWF0aC5jZWlsKHMpfSl9KX0sZS5wcm90b3R5cGUudXBkYXRlU2l6ZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmxlZ2VuZD9lLmdldExlZ2VuZEhlaWdodCgpOjAscj1lLmxlZ2VuZD9lLmdldExlZ2VuZFdpZHRoKCk6MCxvPWUuaXNMZWdlbmRSaWdodHx8ZS5pc0xlZ2VuZEluc2V0PzA6bixzPWUuaGFzQXJjVHlwZSgpLGk9dC5heGlzX3JvdGF0ZWR8fHM/MDplLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ4IiksYT10LnN1YmNoYXJ0X3Nob3cmJiFzP3Quc3ViY2hhcnRfc2l6ZV9oZWlnaHQraTowO2UuY3VycmVudFdpZHRoPWUuZ2V0Q3VycmVudFdpZHRoKCksZS5jdXJyZW50SGVpZ2h0PWUuZ2V0Q3VycmVudEhlaWdodCgpLGUubWFyZ2luPXQuYXhpc19yb3RhdGVkP3t0b3A6ZS5nZXRIb3Jpem9udGFsQXhpc0hlaWdodCgieTIiKStlLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6cz8wOmUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTplLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ5IikrbytlLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDphKyhzPzA6ZS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKSl9Ont0b3A6NCtlLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6cz8wOmUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTppK2ErbytlLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDpzPzA6ZS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKX0sZS5tYXJnaW4yPXQuYXhpc19yb3RhdGVkP3t0b3A6ZS5tYXJnaW4udG9wLHJpZ2h0Ok5hTixib3R0b206MjArbyxsZWZ0OmUucm90YXRlZF9wYWRkaW5nX2xlZnR9Ont0b3A6ZS5jdXJyZW50SGVpZ2h0LWEtbyxyaWdodDpOYU4sYm90dG9tOmkrbyxsZWZ0OmUubWFyZ2luLmxlZnR9LGUubWFyZ2luMz17dG9wOjAscmlnaHQ6TmFOLGJvdHRvbTowLGxlZnQ6MH0sZS51cGRhdGVTaXplRm9yTGVnZW5kJiZlLnVwZGF0ZVNpemVGb3JMZWdlbmQobixyKSxlLndpZHRoPWUuY3VycmVudFdpZHRoLWUubWFyZ2luLmxlZnQtZS5tYXJnaW4ucmlnaHQsZS5oZWlnaHQ9ZS5jdXJyZW50SGVpZ2h0LWUubWFyZ2luLnRvcC1lLm1hcmdpbi5ib3R0b20sZS53aWR0aDwwJiYoZS53aWR0aD0wKSxlLmhlaWdodDwwJiYoZS5oZWlnaHQ9MCksZS53aWR0aDI9dC5heGlzX3JvdGF0ZWQ/ZS5tYXJnaW4ubGVmdC1lLnJvdGF0ZWRfcGFkZGluZ19sZWZ0LWUucm90YXRlZF9wYWRkaW5nX3JpZ2h0OmUud2lkdGgsZS5oZWlnaHQyPXQuYXhpc19yb3RhdGVkP2UuaGVpZ2h0OmUuY3VycmVudEhlaWdodC1lLm1hcmdpbjIudG9wLWUubWFyZ2luMi5ib3R0b20sZS53aWR0aDI8MCYmKGUud2lkdGgyPTApLGUuaGVpZ2h0MjwwJiYoZS5oZWlnaHQyPTApLGUuYXJjV2lkdGg9ZS53aWR0aC0oZS5pc0xlZ2VuZFJpZ2h0P3IrMTA6MCksZS5hcmNIZWlnaHQ9ZS5oZWlnaHQtKGUuaXNMZWdlbmRSaWdodD8wOjEwKSxlLmhhc1R5cGUoImdhdWdlIikmJiF0LmdhdWdlX2Z1bGxDaXJjbGUmJihlLmFyY0hlaWdodCs9ZS5oZWlnaHQtZS5nZXRHYXVnZUxhYmVsSGVpZ2h0KCkpLGUudXBkYXRlUmFkaXVzJiZlLnVwZGF0ZVJhZGl1cygpLGUuaXNMZWdlbmRSaWdodCYmcyYmKGUubWFyZ2luMy5sZWZ0PWUuYXJjV2lkdGgvMisxLjEqZS5yYWRpdXNFeHBhbmRlZCl9LGUucHJvdG90eXBlLnVwZGF0ZVRhcmdldHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0LnVwZGF0ZVRhcmdldHNGb3JUZXh0KGUpLHQudXBkYXRlVGFyZ2V0c0ZvckJhcihlKSx0LnVwZGF0ZVRhcmdldHNGb3JMaW5lKGUpLHQuaGFzQXJjVHlwZSgpJiZ0LnVwZGF0ZVRhcmdldHNGb3JBcmMmJnQudXBkYXRlVGFyZ2V0c0ZvckFyYyhlKSx0LnVwZGF0ZVRhcmdldHNGb3JTdWJjaGFydCYmdC51cGRhdGVUYXJnZXRzRm9yU3ViY2hhcnQoZSksdC5zaG93VGFyZ2V0cygpfSxlLnByb3RvdHlwZS5zaG93VGFyZ2V0cz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5zdmcuc2VsZWN0QWxsKCIuIitvLnRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmlzVGFyZ2V0VG9TaG93KHQuaWQpfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUuY29uZmlnLnRyYW5zaXRpb25fZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKX0sZS5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixzLGksYSxsLHUsYyxfLHAsZixtLGgsZyxiLEUseSx2LFQsQSxDLE8sUyxSLGoseCxMLEQsdyxNLGssST10aGlzLFA9SS5tYWluLE49SS5kMyxIPUkuY29uZmlnLEY9SS5nZXRTaGFwZUluZGljZXMoSS5pc0FyZWFUeXBlKSxCPUkuZ2V0U2hhcGVJbmRpY2VzKEkuaXNCYXJUeXBlKSxVPUkuZ2V0U2hhcGVJbmRpY2VzKEkuaXNMaW5lVHlwZSksRz1JLmhhc0FyY1R5cGUoKSx6PUkuZmlsdGVyVGFyZ2V0c1RvU2hvdyhJLmRhdGEudGFyZ2V0cyksVj1JLnh2LmJpbmQoSSk7aWYoZT1lfHx7fSxuPWQoZSwid2l0aFkiLCEwKSxyPWQoZSwid2l0aFN1YmNoYXJ0IiwhMCkscz1kKGUsIndpdGhUcmFuc2l0aW9uIiwhMCksbD1kKGUsIndpdGhUcmFuc2Zvcm0iLCExKSx1PWQoZSwid2l0aFVwZGF0ZVhEb21haW4iLCExKSxjPWQoZSwid2l0aFVwZGF0ZU9yZ1hEb21haW4iLCExKSxfPWQoZSwid2l0aFRyaW1YRG9tYWluIiwhMCksaD1kKGUsIndpdGhVcGRhdGVYQXhpcyIsdSkscD1kKGUsIndpdGhMZWdlbmQiLCExKSxmPWQoZSwid2l0aEV2ZW50UmVjdCIsITApLG09ZChlLCJ3aXRoRGltZW5zaW9uIiwhMCksaT1kKGUsIndpdGhUcmFuc2l0aW9uRm9yRXhpdCIscyksYT1kKGUsIndpdGhUcmFuc2l0aW9uRm9yQXhpcyIscyksVD1zP0gudHJhbnNpdGlvbl9kdXJhdGlvbjowLEE9aT9UOjAsQz1hP1Q6MCx0PXR8fEkuYXhpcy5nZW5lcmF0ZVRyYW5zaXRpb25zKEMpLHAmJkgubGVnZW5kX3Nob3c/SS51cGRhdGVMZWdlbmQoSS5tYXBUb0lkcyhJLmRhdGEudGFyZ2V0cyksZSx0KTptJiZJLnVwZGF0ZURpbWVuc2lvbighMCksSS5pc0NhdGVnb3JpemVkKCkmJjA9PT16Lmxlbmd0aCYmSS54LmRvbWFpbihbMCxJLmF4ZXMueC5zZWxlY3RBbGwoIi50aWNrIikuc2l6ZSgpXSksei5sZW5ndGg/KEkudXBkYXRlWERvbWFpbih6LHUsYyxfKSxILmF4aXNfeF90aWNrX3ZhbHVlc3x8KHg9SS5heGlzLnVwZGF0ZVhBeGlzVGlja1ZhbHVlcyh6KSkpOihJLnhBeGlzLnRpY2tWYWx1ZXMoW10pLEkuc3ViWEF4aXMudGlja1ZhbHVlcyhbXSkpLEguem9vbV9yZXNjYWxlJiYhZS5mbG93JiYodz1JLngub3JnRG9tYWluKCkpLEkueS5kb21haW4oSS5nZXRZRG9tYWluKHosInkiLHcpKSxJLnkyLmRvbWFpbihJLmdldFlEb21haW4oeiwieTIiLHcpKSwhSC5heGlzX3lfdGlja192YWx1ZXMmJkguYXhpc195X3RpY2tfY291bnQmJkkueUF4aXMudGlja1ZhbHVlcyhJLmF4aXMuZ2VuZXJhdGVUaWNrVmFsdWVzKEkueS5kb21haW4oKSxILmF4aXNfeV90aWNrX2NvdW50KSksIUguYXhpc195Ml90aWNrX3ZhbHVlcyYmSC5heGlzX3kyX3RpY2tfY291bnQmJkkueTJBeGlzLnRpY2tWYWx1ZXMoSS5heGlzLmdlbmVyYXRlVGlja1ZhbHVlcyhJLnkyLmRvbWFpbigpLEguYXhpc195Ml90aWNrX2NvdW50KSksSS5heGlzLnJlZHJhdyhDLEcpLEkuYXhpcy51cGRhdGVMYWJlbHMocyksKHV8fGgpJiZ6Lmxlbmd0aClpZihILmF4aXNfeF90aWNrX2N1bGxpbmcmJngpe2ZvcihMPTE7TDx4Lmxlbmd0aDtMKyspaWYoeC5sZW5ndGgvTDxILmF4aXNfeF90aWNrX2N1bGxpbmdfbWF4KXtEPUw7YnJlYWt9SS5zdmcuc2VsZWN0QWxsKCIuIitvLmF4aXNYKyIgLnRpY2sgdGV4dCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9eC5pbmRleE9mKGUpO3Q+PTAmJk4uc2VsZWN0KHRoaXMpLnN0eWxlKCJkaXNwbGF5Iix0JUQ/Im5vbmUiOiJibG9jayIpfSl9ZWxzZSBJLnN2Zy5zZWxlY3RBbGwoIi4iK28uYXhpc1grIiAudGljayB0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJibG9jayIpO2c9SS5nZW5lcmF0ZURyYXdBcmVhP0kuZ2VuZXJhdGVEcmF3QXJlYShGLCExKTp2b2lkIDAsYj1JLmdlbmVyYXRlRHJhd0Jhcj9JLmdlbmVyYXRlRHJhd0JhcihCKTp2b2lkIDAsRT1JLmdlbmVyYXRlRHJhd0xpbmU/SS5nZW5lcmF0ZURyYXdMaW5lKFUsITEpOnZvaWQgMCx5PUkuZ2VuZXJhdGVYWUZvclRleHQoRixCLFUsITApLHY9SS5nZW5lcmF0ZVhZRm9yVGV4dChGLEIsVSwhMSksSS51cGRhdGVDaXJjbGVZKCksTT0oSS5jb25maWcuYXhpc19yb3RhdGVkP0kuY2lyY2xlWTpJLmNpcmNsZVgpLmJpbmQoSSksaz0oSS5jb25maWcuYXhpc19yb3RhdGVkP0kuY2lyY2xlWDpJLmNpcmNsZVkpLmJpbmQoSSksbiYmKEkuc3ViWS5kb21haW4oSS5nZXRZRG9tYWluKHosInkiKSksSS5zdWJZMi5kb21haW4oSS5nZXRZRG9tYWluKHosInkyIikpKSxJLnVwZGF0ZVhncmlkRm9jdXMoKSxQLnNlbGVjdCgidGV4dC4iK28udGV4dCsiLiIrby5lbXB0eSkuYXR0cigieCIsSS53aWR0aC8yKS5hdHRyKCJ5IixJLmhlaWdodC8yKS50ZXh0KEguZGF0YV9lbXB0eV9sYWJlbF90ZXh0KS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLHoubGVuZ3RoPzA6MSksZiYmSS5yZWRyYXdFdmVudFJlY3QoKSxJLnVwZGF0ZUdyaWQoVCksSS51cGRhdGVSZWdpb24oVCksSS51cGRhdGVCYXIoQSksSS51cGRhdGVMaW5lKEEpLEkudXBkYXRlQXJlYShBKSxJLnVwZGF0ZUNpcmNsZShNLGspLEkuaGFzRGF0YUxhYmVsKCkmJkkudXBkYXRlVGV4dCh5LHYsQSksSS5yZWRyYXdUaXRsZSYmSS5yZWRyYXdUaXRsZSgpLEkucmVkcmF3QXJjJiZJLnJlZHJhd0FyYyhULEEsbCksSS5yZWRyYXdTdWJjaGFydCYmSS5yZWRyYXdTdWJjaGFydChyLHQsVCxBLEYsQixVKSxQLnNlbGVjdEFsbCgiLiIrby5zZWxlY3RlZENpcmNsZXMpLmZpbHRlcihJLmlzQmFyVHlwZS5iaW5kKEkpKS5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLGUuZmxvdyYmKFI9SS5nZW5lcmF0ZUZsb3coe3RhcmdldHM6eixmbG93OmUuZmxvdyxkdXJhdGlvbjplLmZsb3cuZHVyYXRpb24sZHJhd0JhcjpiLGRyYXdMaW5lOkUsZHJhd0FyZWE6ZyxjeDpNLGN5OmsseHY6Vix4Rm9yVGV4dDp5LHlGb3JUZXh0OnZ9KSksSS5pc1RhYlZpc2libGUoKSYmKFQ/KGo9Ti50cmFuc2l0aW9uKCkuZHVyYXRpb24oVCksTz1bXSxbSS5yZWRyYXdCYXIoYiwhMCxqKSxJLnJlZHJhd0xpbmUoRSwhMCxqKSxJLnJlZHJhd0FyZWEoZywhMCxqKSxJLnJlZHJhd0NpcmNsZShNLGssITAsaiksSS5yZWRyYXdUZXh0KHksdixlLmZsb3csITAsaiksSS5yZWRyYXdSZWdpb24oITAsaiksSS5yZWRyYXdHcmlkKCEwLGopXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtPLnB1c2goZSl9KX0pLFM9SS5nZW5lcmF0ZVdhaXQoKSxPLmZvckVhY2goZnVuY3Rpb24oZSl7Uy5hZGQoZSl9KSxTKGZ1bmN0aW9uKCl7UiYmUigpLEgub25yZW5kZXJlZCYmSC5vbnJlbmRlcmVkLmNhbGwoSSl9KSk6KEkucmVkcmF3QmFyKGIpLEkucmVkcmF3TGluZShFKSxJLnJlZHJhd0FyZWEoZyksSS5yZWRyYXdDaXJjbGUoTSxrKSxJLnJlZHJhd1RleHQoeSx2LGUuZmxvdyksSS5yZWRyYXdSZWdpb24oKSxJLnJlZHJhd0dyaWQoKSxSJiZSKCksSC5vbnJlbmRlcmVkJiZILm9ucmVuZGVyZWQuY2FsbChJKSkpLEkubWFwVG9JZHMoSS5kYXRhLnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24oZSl7SS53aXRob3V0RmFkZUluW2VdPSEwfSl9LGUucHJvdG90eXBlLnVwZGF0ZUFuZFJlZHJhdz1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMscj1uLmNvbmZpZztlPWV8fHt9LGUud2l0aFRyYW5zaXRpb249ZChlLCJ3aXRoVHJhbnNpdGlvbiIsITApLGUud2l0aFRyYW5zZm9ybT1kKGUsIndpdGhUcmFuc2Zvcm0iLCExKSxlLndpdGhMZWdlbmQ9ZChlLCJ3aXRoTGVnZW5kIiwhMSksZS53aXRoVXBkYXRlWERvbWFpbj1kKGUsIndpdGhVcGRhdGVYRG9tYWluIiwhMCksZS53aXRoVXBkYXRlT3JnWERvbWFpbj1kKGUsIndpdGhVcGRhdGVPcmdYRG9tYWluIiwhMCksZS53aXRoVHJhbnNpdGlvbkZvckV4aXQ9ITEsZS53aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybT1kKGUsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIixlLndpdGhUcmFuc2l0aW9uKSxuLnVwZGF0ZVNpemVzKCksZS53aXRoTGVnZW5kJiZyLmxlZ2VuZF9zaG93fHwodD1uLmF4aXMuZ2VuZXJhdGVUcmFuc2l0aW9ucyhlLndpdGhUcmFuc2l0aW9uRm9yQXhpcz9yLnRyYW5zaXRpb25fZHVyYXRpb246MCksbi51cGRhdGVTY2FsZXMoKSxuLnVwZGF0ZVN2Z1NpemUoKSxuLnRyYW5zZm9ybUFsbChlLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtLHQpKSxuLnJlZHJhdyhlLHQpfSxlLnByb3RvdHlwZS5yZWRyYXdXaXRob3V0UmVzY2FsZT1mdW5jdGlvbigpe3RoaXMucmVkcmF3KHt3aXRoWTohMSx3aXRoU3ViY2hhcnQ6ITEsd2l0aEV2ZW50UmVjdDohMSx3aXRoVHJhbnNpdGlvbkZvckF4aXM6ITF9KX0sZS5wcm90b3R5cGUuaXNUaW1lU2VyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuInRpbWVzZXJpZXMiPT09dGhpcy5jb25maWcuYXhpc194X3R5cGV9LGUucHJvdG90eXBlLmlzQ2F0ZWdvcml6ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuYXhpc194X3R5cGUuaW5kZXhPZigiY2F0ZWdvciIpPj0wfSxlLnByb3RvdHlwZS5pc0N1c3RvbVg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWc7cmV0dXJuIWUuaXNUaW1lU2VyaWVzKCkmJih0LmRhdGFfeHx8dih0LmRhdGFfeHMpKX0sZS5wcm90b3R5cGUuaXNUaW1lU2VyaWVzWT1mdW5jdGlvbigpe3JldHVybiJ0aW1lc2VyaWVzIj09PXRoaXMuY29uZmlnLmF4aXNfeV90eXBlfSxlLnByb3RvdHlwZS5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMsbz1yLmNvbmZpZztyZXR1cm4ibWFpbiI9PT1lPyh0PWwoci5tYXJnaW4ubGVmdCksbj1sKHIubWFyZ2luLnRvcCkpOiJjb250ZXh0Ij09PWU/KHQ9bChyLm1hcmdpbjIubGVmdCksbj1sKHIubWFyZ2luMi50b3ApKToibGVnZW5kIj09PWU/KHQ9ci5tYXJnaW4zLmxlZnQsbj1yLm1hcmdpbjMudG9wKToieCI9PT1lPyh0PTAsbj1vLmF4aXNfcm90YXRlZD8wOnIuaGVpZ2h0KToieSI9PT1lPyh0PTAsbj1vLmF4aXNfcm90YXRlZD9yLmhlaWdodDowKToieTIiPT09ZT8odD1vLmF4aXNfcm90YXRlZD8wOnIud2lkdGgsbj1vLmF4aXNfcm90YXRlZD8xOjApOiJzdWJ4Ij09PWU/KHQ9MCxuPW8uYXhpc19yb3RhdGVkPzA6ci5oZWlnaHQyKToiYXJjIj09PWUmJih0PXIuYXJjV2lkdGgvMixuPXIuYXJjSGVpZ2h0LzItKHIuaGFzVHlwZSgiZ2F1Z2UiKT82OjApKSwidHJhbnNsYXRlKCIrdCsiLCIrbisiKSJ9LGUucHJvdG90eXBlLmluaXRpYWxPcGFjaXR5PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS52YWx1ZSYmdGhpcy53aXRob3V0RmFkZUluW2UuaWRdPzE6MH0sZS5wcm90b3R5cGUuaW5pdGlhbE9wYWNpdHlGb3JDaXJjbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lLnZhbHVlJiZ0aGlzLndpdGhvdXRGYWRlSW5bZS5pZF0/dGhpcy5vcGFjaXR5Rm9yQ2lyY2xlKGUpOjB9LGUucHJvdG90eXBlLm9wYWNpdHlGb3JDaXJjbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Zyh0aGlzLmNvbmZpZy5wb2ludF9zaG93KT90aGlzLmNvbmZpZy5wb2ludF9zaG93KGUpOnRoaXMuY29uZmlnLnBvaW50X3Nob3csbj10PzE6MDtyZXR1cm4geShlLnZhbHVlKT90aGlzLmlzU2NhdHRlclR5cGUoZSk/LjU6bjowfSxlLnByb3RvdHlwZS5vcGFjaXR5Rm9yVGV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0RhdGFMYWJlbCgpPzE6MH0sZS5wcm90b3R5cGUueHg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy54KGUueCk6bnVsbH0sZS5wcm90b3R5cGUueHY9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUudmFsdWU7cmV0dXJuIHQuaXNUaW1lU2VyaWVzKCk/bj10LnBhcnNlRGF0ZShlLnZhbHVlKTp0LmlzQ2F0ZWdvcml6ZWQoKSYmInN0cmluZyI9PXR5cGVvZiBlLnZhbHVlJiYobj10LmNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcy5pbmRleE9mKGUudmFsdWUpKSxNYXRoLmNlaWwodC54KG4pKX0sZS5wcm90b3R5cGUueXY9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUuYXhpcyYmInkyIj09PWUuYXhpcz90LnkyOnQueTtyZXR1cm4gTWF0aC5jZWlsKG4oZS52YWx1ZSkpfSxlLnByb3RvdHlwZS5zdWJ4eD1mdW5jdGlvbihlKXtyZXR1cm4gZT90aGlzLnN1YlgoZS54KTpudWxsfSxlLnByb3RvdHlwZS50cmFuc2Zvcm1NYWluPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixzLGk9dGhpczt0JiZ0LmF4aXNYP249dC5heGlzWDoobj1pLm1haW4uc2VsZWN0KCIuIitvLmF4aXNYKSxlJiYobj1uLnRyYW5zaXRpb24oKSkpLHQmJnQuYXhpc1k/cj10LmF4aXNZOihyPWkubWFpbi5zZWxlY3QoIi4iK28uYXhpc1kpLGUmJihyPXIudHJhbnNpdGlvbigpKSksdCYmdC5heGlzWTI/cz10LmF4aXNZMjoocz1pLm1haW4uc2VsZWN0KCIuIitvLmF4aXNZMiksZSYmKHM9cy50cmFuc2l0aW9uKCkpKSwoZT9pLm1haW4udHJhbnNpdGlvbigpOmkubWFpbikuYXR0cigidHJhbnNmb3JtIixpLmdldFRyYW5zbGF0ZSgibWFpbiIpKSxuLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUcmFuc2xhdGUoIngiKSksci5hdHRyKCJ0cmFuc2Zvcm0iLGkuZ2V0VHJhbnNsYXRlKCJ5IikpLHMuYXR0cigidHJhbnNmb3JtIixpLmdldFRyYW5zbGF0ZSgieTIiKSksaS5tYWluLnNlbGVjdCgiLiIrby5jaGFydEFyY3MpLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUcmFuc2xhdGUoImFyYyIpKX0sZS5wcm90b3R5cGUudHJhbnNmb3JtQWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztuLnRyYW5zZm9ybU1haW4oZSx0KSxuLmNvbmZpZy5zdWJjaGFydF9zaG93JiZuLnRyYW5zZm9ybUNvbnRleHQoZSx0KSxuLmxlZ2VuZCYmbi50cmFuc2Zvcm1MZWdlbmQoZSl9LGUucHJvdG90eXBlLnVwZGF0ZVN2Z1NpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5zdmcuc2VsZWN0KCIuYzMtYnJ1c2ggLm92ZXJsYXkiKTtlLnN2Zy5hdHRyKCJ3aWR0aCIsZS5jdXJyZW50V2lkdGgpLmF0dHIoImhlaWdodCIsZS5jdXJyZW50SGVpZ2h0KSxlLnN2Zy5zZWxlY3RBbGwoWyIjIitlLmNsaXBJZCwiIyIrZS5jbGlwSWRGb3JHcmlkXSkuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLGUuc3ZnLnNlbGVjdCgiIyIrZS5jbGlwSWRGb3JYQXhpcykuc2VsZWN0KCJyZWN0IikuYXR0cigieCIsZS5nZXRYQXhpc0NsaXBYLmJpbmQoZSkpLmF0dHIoInkiLGUuZ2V0WEF4aXNDbGlwWS5iaW5kKGUpKS5hdHRyKCJ3aWR0aCIsZS5nZXRYQXhpc0NsaXBXaWR0aC5iaW5kKGUpKS5hdHRyKCJoZWlnaHQiLGUuZ2V0WEF4aXNDbGlwSGVpZ2h0LmJpbmQoZSkpLGUuc3ZnLnNlbGVjdCgiIyIrZS5jbGlwSWRGb3JZQXhpcykuc2VsZWN0KCJyZWN0IikuYXR0cigieCIsZS5nZXRZQXhpc0NsaXBYLmJpbmQoZSkpLmF0dHIoInkiLGUuZ2V0WUF4aXNDbGlwWS5iaW5kKGUpKS5hdHRyKCJ3aWR0aCIsZS5nZXRZQXhpc0NsaXBXaWR0aC5iaW5kKGUpKS5hdHRyKCJoZWlnaHQiLGUuZ2V0WUF4aXNDbGlwSGVpZ2h0LmJpbmQoZSkpLGUuc3ZnLnNlbGVjdCgiIyIrZS5jbGlwSWRGb3JTdWJjaGFydCkuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsdC5zaXplKCk/dC5hdHRyKCJoZWlnaHQiKTowKSxlLnNlbGVjdENoYXJ0LnN0eWxlKCJtYXgtaGVpZ2h0IixlLmN1cnJlbnRIZWlnaHQrInB4Iil9LGUucHJvdG90eXBlLnVwZGF0ZURpbWVuc2lvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2V8fCh0LmNvbmZpZy5heGlzX3JvdGF0ZWQ/KHQuYXhlcy54LmNhbGwodC54QXhpcyksdC5heGVzLnN1YnguY2FsbCh0LnN1YlhBeGlzKSk6KHQuYXhlcy55LmNhbGwodC55QXhpcyksdC5heGVzLnkyLmNhbGwodC55MkF4aXMpKSksdC51cGRhdGVTaXplcygpLHQudXBkYXRlU2NhbGVzKCksdC51cGRhdGVTdmdTaXplKCksdC50cmFuc2Zvcm1BbGwoITEpfSxlLnByb3RvdHlwZS5vYnNlcnZlSW5zZXJ0ZWQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgTXV0YXRpb25PYnNlcnZlcilyZXR1cm4gdm9pZCB3aW5kb3cuY29uc29sZS5lcnJvcigiTXV0YXRpb25PYnNlcnZlciBub3QgZGVmaW5lZC4iKTt0PW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaChmdW5jdGlvbihyKXsiY2hpbGRMaXN0Ij09PXIudHlwZSYmci5wcmV2aW91c1NpYmxpbmcmJih0LmRpc2Nvbm5lY3QoKSxuLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkPXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe2Uubm9kZSgpLnBhcmVudE5vZGUmJih3aW5kb3cuY2xlYXJJbnRlcnZhbChuLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkKSxuLnVwZGF0ZURpbWVuc2lvbigpLG4uYnJ1c2gmJm4uYnJ1c2gudXBkYXRlKCksbi5jb25maWcub25pbml0LmNhbGwobiksbi5yZWRyYXcoe3dpdGhUcmFuc2Zvcm06ITAsd2l0aFVwZGF0ZVhEb21haW46ITAsd2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFRyYW5zaXRpb246ITEsd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06ITEsd2l0aExlZ2VuZDohMH0pLGUudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKSl9LDEwKSl9KX0pLHQub2JzZXJ2ZShlLm5vZGUoKSx7YXR0cmlidXRlczohMCxjaGlsZExpc3Q6ITAsY2hhcmFjdGVyRGF0YTohMH0pfSxlLnByb3RvdHlwZS5iaW5kUmVzaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnO2lmKGUucmVzaXplRnVuY3Rpb249ZS5nZW5lcmF0ZVJlc2l6ZSgpLGUucmVzaXplRnVuY3Rpb24uYWRkKGZ1bmN0aW9uKCl7dC5vbnJlc2l6ZS5jYWxsKGUpfSksdC5yZXNpemVfYXV0byYmZS5yZXNpemVGdW5jdGlvbi5hZGQoZnVuY3Rpb24oKXt2b2lkIDAhPT1lLnJlc2l6ZVRpbWVvdXQmJndpbmRvdy5jbGVhclRpbWVvdXQoZS5yZXNpemVUaW1lb3V0KSxlLnJlc2l6ZVRpbWVvdXQ9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkZWxldGUgZS5yZXNpemVUaW1lb3V0LGUudXBkYXRlQW5kUmVkcmF3KHt3aXRoVXBkYXRlWERvbWFpbjohMSx3aXRoVXBkYXRlT3JnWERvbWFpbjohMSx3aXRoVHJhbnNpdGlvbjohMSx3aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybTohMSx3aXRoTGVnZW5kOiEwfSksZS5icnVzaCYmZS5icnVzaC51cGRhdGUoKX0sMTAwKX0pLGUucmVzaXplRnVuY3Rpb24uYWRkKGZ1bmN0aW9uKCl7dC5vbnJlc2l6ZWQuY2FsbChlKX0pLGUucmVzaXplSWZFbGVtZW50RGlzcGxheWVkPWZ1bmN0aW9uKCl7bnVsbCE9ZS5hcGkmJmUuYXBpLmVsZW1lbnQub2Zmc2V0UGFyZW50JiZlLnJlc2l6ZUZ1bmN0aW9uKCl9LHdpbmRvdy5hdHRhY2hFdmVudCl3aW5kb3cuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixlLnJlc2l6ZUlmRWxlbWVudERpc3BsYXllZCk7ZWxzZSBpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixlLnJlc2l6ZUlmRWxlbWVudERpc3BsYXllZCwhMSk7ZWxzZXt2YXIgbj13aW5kb3cub25yZXNpemU7bj9uLmFkZCYmbi5yZW1vdmV8fChuPWUuZ2VuZXJhdGVSZXNpemUoKSxuLmFkZCh3aW5kb3cub25yZXNpemUpKTpuPWUuZ2VuZXJhdGVSZXNpemUoKSxuLmFkZChlLnJlc2l6ZUZ1bmN0aW9uKSx3aW5kb3cub25yZXNpemU9ZnVuY3Rpb24oKXtlLmFwaS5lbGVtZW50Lm9mZnNldFBhcmVudCYmbigpfX19LGUucHJvdG90eXBlLmdlbmVyYXRlUmVzaXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3QuZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KX12YXIgdD1bXTtyZXR1cm4gZS5hZGQ9ZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSxlLnJlbW92ZT1mdW5jdGlvbihlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT09ZSl7dC5zcGxpY2UobiwxKTticmVha319LGV9LGUucHJvdG90eXBlLmVuZGFsbD1mdW5jdGlvbihlLHQpe3ZhciBuPTA7ZS5lYWNoKGZ1bmN0aW9uKCl7KytufSkub24oImVuZCIsZnVuY3Rpb24oKXstLW58fHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LGUucHJvdG90eXBlLmdlbmVyYXRlV2FpdD1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9ZnVuY3Rpb24odCl7dmFyIG49c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgcj0wO2UuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmVtcHR5KCkpcmV0dXJuIHZvaWQocis9MSk7dHJ5e2UudHJhbnNpdGlvbigpfWNhdGNoKGUpe3IrPTF9fSkscj09PWUubGVuZ3RoJiYoY2xlYXJJbnRlcnZhbChuKSx0JiZ0KCkpfSw1MCl9O3JldHVybiB0LmFkZD1mdW5jdGlvbih0KXtlLnB1c2godCl9LHR9LGUucHJvdG90eXBlLnBhcnNlRGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlP3Q9ZToic3RyaW5nIj09dHlwZW9mIGU/dD1uLmRhdGFUaW1lUGFyc2UoZSk6Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpzKGUpKT90PW5ldyBEYXRlKCtlKToibnVtYmVyIiE9dHlwZW9mIGV8fGlzTmFOKGUpfHwodD1uZXcgRGF0ZSgrZSkpLHQmJiFpc05hTigrdCl8fHdpbmRvdy5jb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgeCAnIitlKyInIHRvIERhdGUgb2JqZWN0IiksdH0sZS5wcm90b3R5cGUuaXNUYWJWaXNpYmxlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHZvaWQgMCE9PWRvY3VtZW50LmhpZGRlbj9lPSJoaWRkZW4iOnZvaWQgMCE9PWRvY3VtZW50Lm1vekhpZGRlbj9lPSJtb3pIaWRkZW4iOnZvaWQgMCE9PWRvY3VtZW50Lm1zSGlkZGVuP2U9Im1zSGlkZGVuIjp2b2lkIDAhPT1kb2N1bWVudC53ZWJraXRIaWRkZW4mJihlPSJ3ZWJraXRIaWRkZW4iKSwhZG9jdW1lbnRbZV19LGUucHJvdG90eXBlLmdldFBhdGhCb3g9XyxlLnByb3RvdHlwZS5DTEFTUz1vLEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgLSB3aGF0IGlzIHRyeWluZyB0byBiZSBib3VuZCBpcyBub3QgY2FsbGFibGUiKTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbj10aGlzLHI9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh0aGlzIGluc3RhbmNlb2Ygcj90aGlzOmUsdC5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfTtyZXR1cm4gci5wcm90b3R5cGU9dGhpcy5wcm90b3R5cGUsby5wcm90b3R5cGU9bmV3IHIsb30pLGZ1bmN0aW9uKCl7IlNWR1BhdGhTZWciaW4gd2luZG93fHwod2luZG93LlNWR1BhdGhTZWc9ZnVuY3Rpb24oZSx0LG4pe3RoaXMucGF0aFNlZ1R5cGU9ZSx0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXI9dCx0aGlzLl9vd25pbmdQYXRoU2VnTGlzdD1ufSx3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUuY2xhc3NuYW1lPSJTVkdQYXRoU2VnIix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX1VOS05PV049MCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSD0xLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUz0yLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTD0zLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUz00LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTD01LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM9Nix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMPTcsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM9OCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTD05LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUz0xMCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUw9MTEsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM9MTIsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUw9MTMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTPTE0LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTD0xNSx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUz0xNix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTD0xNyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlM9MTgsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMPTE5LHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZS5fc2VnbWVudENoYW5nZWQ9ZnVuY3Rpb24oKXt0aGlzLl9vd25pbmdQYXRoU2VnTGlzdCYmdGhpcy5fb3duaW5nUGF0aFNlZ0xpc3Quc2VnbWVudENoYW5nZWQodGhpcyl9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoPWZ1bmN0aW9uKGUpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSCwieiIsZSl9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGgucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0Nsb3NlUGF0aF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXJ9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGgodm9pZCAwKX0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnM9ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19BQlMsIk0iLGUpLHRoaXMuX3g9dCx0aGlzLl95PW59LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ01vdmV0b0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnModm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbD1mdW5jdGlvbihlLHQsbil7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTCwibSIsZSksdGhpcy5feD10LHRoaXMuX3k9bn0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTW92ZXRvUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbCh2b2lkIDAsdGhpcy5feCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzPWZ1bmN0aW9uKGUsdCxuKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTLCJMIixlKSx0aGlzLl94PXQsdGhpcy5feT1ufSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9BYnNdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWw9ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19SRUwsImwiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW59LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b1JlbF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUywiQyIsZSksdGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5feDI9cyx0aGlzLl95Mj1pfSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNdIn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3gyKyIgIit0aGlzLl95MisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3gxLHRoaXMuX3kxLHRoaXMuX3gyLHRoaXMuX3kyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsIngxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feDE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ4MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3gyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsInkyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTI9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUwsImMiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3gyPXMsdGhpcy5feTI9aX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDErIiAiK3RoaXMuX3kxKyIgIit0aGlzLl94MisiICIrdGhpcy5feTIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MSx0aGlzLl95MSx0aGlzLl94Mix0aGlzLl95Mil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ4MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94MX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3gxPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsInkxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUywiUSIsZSksdGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MT1yLHRoaXMuX3kxPW99LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3gxLHRoaXMuX3kxKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsIngxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feDE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsInkxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMLCJxIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gxPXIsdGhpcy5feTE9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3gxKyIgIit0aGlzLl95MSsiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDEsdGhpcy5feTEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieDEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyxpLGEpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlMsIkEiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5fcjE9cix0aGlzLl9yMj1vLHRoaXMuX2FuZ2xlPXMsdGhpcy5fbGFyZ2VBcmNGbGFnPWksdGhpcy5fc3dlZXBGbGFnPWF9LHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0FyY0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3IxKyIgIit0aGlzLl9yMisiICIrdGhpcy5fYW5nbGUrIiAiKyh0aGlzLl9sYXJnZUFyY0ZsYWc/IjEiOiIwIikrIiAiKyh0aGlzLl9zd2VlcEZsYWc/IjEiOiIwIikrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNBYnModm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl9yMSx0aGlzLl9yMix0aGlzLl9hbmdsZSx0aGlzLl9sYXJnZUFyY0ZsYWcsdGhpcy5fc3dlZXBGbGFnKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsInIxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3IxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcjE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwicjIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yMj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJhbmdsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmdsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2FuZ2xlPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsImxhcmdlQXJjRmxhZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9sYXJnZUFyY0ZsYWc9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwic3dlZXBGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3ZWVwRmxhZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3N3ZWVwRmxhZz1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbD1mdW5jdGlvbihlLHQsbixyLG8scyxpLGEpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUwsImEiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5fcjE9cix0aGlzLl9yMj1vLHRoaXMuX2FuZ2xlPXMsdGhpcy5fbGFyZ2VBcmNGbGFnPWksdGhpcy5fc3dlZXBGbGFnPWF9LHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0FyY1JlbF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3IxKyIgIit0aGlzLl9yMisiICIrdGhpcy5fYW5nbGUrIiAiKyh0aGlzLl9sYXJnZUFyY0ZsYWc/IjEiOiIwIikrIiAiKyh0aGlzLl9zd2VlcEZsYWc/IjEiOiIwIikrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl9yMSx0aGlzLl9yMix0aGlzLl9hbmdsZSx0aGlzLl9sYXJnZUFyY0ZsYWcsdGhpcy5fc3dlZXBGbGFnKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsInIxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3IxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcjE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwicjIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yMj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJhbmdsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmdsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2FuZ2xlPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsImxhcmdlQXJjRmxhZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9sYXJnZUFyY0ZsYWc9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwic3dlZXBGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3ZWVwRmxhZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3N3ZWVwRmxhZz1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM9ZnVuY3Rpb24oZSx0KXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlMsIkgiLGUpLHRoaXMuX3g9dH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3h9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsdGhpcy5feCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD1mdW5jdGlvbihlLHQpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTCwiaCIsZSksdGhpcy5feD10fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKHZvaWQgMCx0aGlzLl94KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz1mdW5jdGlvbihlLHQpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlMsIlYiLGUpLHRoaXMuX3k9dH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh2b2lkIDAsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsPWZ1bmN0aW9uKGUsdCl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTCwidiIsZSksdGhpcy5feT10fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKHZvaWQgMCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTLCJTIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gyPXIsdGhpcy5feTI9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDIrIiAiK3RoaXMuX3kyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDIsdGhpcy5feTIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMLCJzIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gyPXIsdGhpcy5feTI9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDIrIiAiK3RoaXMuX3kyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDIsdGhpcy5feTIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz1mdW5jdGlvbihlLHQsbil7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUywiVCIsZSksdGhpcy5feD10LHRoaXMuX3k9bn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyh2b2lkIDAsdGhpcy5feCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCxuKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMLCJ0IixlKSx0aGlzLl94PXQsdGhpcy5feT1ufSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoKHZvaWQgMCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnModm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwodm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Ficz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnModm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwodm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh2b2lkIDAsZSx0LG4scixvLHMpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw9ZnVuY3Rpb24oZSx0LG4scixvLHMpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodm9pZCAwLGUsdCxuLHIsbyxzKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh2b2lkIDAsZSx0LG4scil9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwodm9pZCAwLGUsdCxuLHIpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnM9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficyh2b2lkIDAsZSx0LG4scixvLHMsaSl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbD1mdW5jdGlvbihlLHQsbixyLG8scyxpKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsKHZvaWQgMCxlLHQsbixyLG8scyxpKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsZSl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwodm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnModm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwodm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyh2b2lkIDAsZSx0LG4scil9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHZvaWQgMCxlLHQsbixyKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHZvaWQgMCxlLHQpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodm9pZCAwLGUsdCl9LCJnZXRQYXRoU2VnQXRMZW5ndGgiaW4gd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZXx8KHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuZ2V0UGF0aFNlZ0F0TGVuZ3RoPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWV8fCFpc0Zpbml0ZShlKSl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cy4iO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dC5zZXRBdHRyaWJ1dGUoImQiLHRoaXMuZ2V0QXR0cmlidXRlKCJkIikpO3ZhciBuPXQucGF0aFNlZ0xpc3QubnVtYmVyT2ZJdGVtcy0xO2lmKG48PTApcmV0dXJuIDA7ZG97aWYodC5wYXRoU2VnTGlzdC5yZW1vdmVJdGVtKG4pLGU+dC5nZXRUb3RhbExlbmd0aCgpKWJyZWFrO24tLX13aGlsZShuPjApO3JldHVybiBufSkpLCJTVkdQYXRoU2VnTGlzdCJpbiB3aW5kb3d8fCh3aW5kb3cuU1ZHUGF0aFNlZ0xpc3Q9ZnVuY3Rpb24oZSl7dGhpcy5fcGF0aEVsZW1lbnQ9ZSx0aGlzLl9saXN0PXRoaXMuX3BhcnNlUGF0aCh0aGlzLl9wYXRoRWxlbWVudC5nZXRBdHRyaWJ1dGUoImQiKSksdGhpcy5fbXV0YXRpb25PYnNlcnZlckNvbmZpZz17YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkIl19LHRoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLl91cGRhdGVMaXN0RnJvbVBhdGhNdXRhdGlvbnMuYmluZCh0aGlzKSksdGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fcGF0aEVsZW1lbnQsdGhpcy5fbXV0YXRpb25PYnNlcnZlckNvbmZpZyl9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuY2xhc3NuYW1lPSJTVkdQYXRoU2VnTGlzdCIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUsIm51bWJlck9mSXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fbGlzdC5sZW5ndGh9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwicGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0aFNlZ0xpc3R8fCh0aGlzLl9wYXRoU2VnTGlzdD1uZXcgd2luZG93LlNWR1BhdGhTZWdMaXN0KHRoaXMpKSx0aGlzLl9wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJub3JtYWxpemVkUGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlZFBhdGhTZWdMaXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ0xpc3R9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwiYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdD1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUxpc3RGcm9tUGF0aE11dGF0aW9ucyh0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSl9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3VwZGF0ZUxpc3RGcm9tUGF0aE11dGF0aW9ucz1mdW5jdGlvbihlKXtpZih0aGlzLl9wYXRoRWxlbWVudCl7dmFyIHQ9ITE7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJkIj09ZS5hdHRyaWJ1dGVOYW1lJiYodD0hMCl9KSx0JiYodGhpcy5fbGlzdD10aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkIikpKX19LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3dyaXRlTGlzdFRvUGF0aD1mdW5jdGlvbigpe3RoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fcGF0aEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkIix3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QuX3BhdGhTZWdBcnJheUFzU3RyaW5nKHRoaXMuX2xpc3QpKSx0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9wYXRoRWxlbWVudCx0aGlzLl9tdXRhdGlvbk9ic2VydmVyQ29uZmlnKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5zZWdtZW50Q2hhbmdlZD1mdW5jdGlvbihlKXt0aGlzLl93cml0ZUxpc3RUb1BhdGgoKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2xpc3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLl9vd25pbmdQYXRoU2VnTGlzdD1udWxsfSksdGhpcy5fbGlzdD1bXSx0aGlzLl93cml0ZUxpc3RUb1BhdGgoKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKSx0aGlzLl9saXN0PVtlXSxlLl9vd25pbmdQYXRoU2VnTGlzdD10aGlzLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLGV9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX2NoZWNrVmFsaWRJbmRleD1mdW5jdGlvbihlKXtpZihpc05hTihlKXx8ZTwwfHxlPj10aGlzLm51bWJlck9mSXRlbXMpdGhyb3ciSU5ERVhfU0laRV9FUlIifSx3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmdldEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2NoZWNrVmFsaWRJbmRleChlKSx0aGlzLl9saXN0W2VdfSx3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmluc2VydEl0ZW1CZWZvcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdD50aGlzLm51bWJlck9mSXRlbXMmJih0PXRoaXMubnVtYmVyT2ZJdGVtcyksZS5fb3duaW5nUGF0aFNlZ0xpc3QmJihlPWUuY2xvbmUoKSksdGhpcy5fbGlzdC5zcGxpY2UodCwwLGUpLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5yZXBsYWNlSXRlbT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKSxlLl9vd25pbmdQYXRoU2VnTGlzdCYmKGU9ZS5jbG9uZSgpKSx0aGlzLl9jaGVja1ZhbGlkSW5kZXgodCksdGhpcy5fbGlzdFt0XT1lLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2NoZWNrVmFsaWRJbmRleChlKTt2YXIgdD10aGlzLl9saXN0W2VdO3JldHVybiB0aGlzLl9saXN0LnNwbGljZShlLDEpLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLHR9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuYXBwZW5kSXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksZS5fb3duaW5nUGF0aFNlZ0xpc3QmJihlPWUuY2xvbmUoKSksdGhpcy5fbGlzdC5wdXNoKGUpLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0Ll9wYXRoU2VnQXJyYXlBc1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD0iIixuPSEwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7bj8obj0hMSx0Kz1lLl9hc1BhdGhTdHJpbmcoKSk6dCs9IiAiK2UuX2FzUGF0aFN0cmluZygpfSksdH0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5fcGFyc2VQYXRoPWZ1bmN0aW9uKGUpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm5bXTt2YXIgdD10aGlzLG49ZnVuY3Rpb24oKXt0aGlzLnBhdGhTZWdMaXN0PVtdfTtuLnByb3RvdHlwZS5hcHBlbmRTZWdtZW50PWZ1bmN0aW9uKGUpe3RoaXMucGF0aFNlZ0xpc3QucHVzaChlKX07dmFyIHI9ZnVuY3Rpb24oZSl7dGhpcy5fc3RyaW5nPWUsdGhpcy5fY3VycmVudEluZGV4PTAsdGhpcy5fZW5kSW5kZXg9dGhpcy5fc3RyaW5nLmxlbmd0aCx0aGlzLl9wcmV2aW91c0NvbW1hbmQ9d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOLHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpfTtyLnByb3RvdHlwZS5faXNDdXJyZW50U3BhY2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zdHJpbmdbdGhpcy5fY3VycmVudEluZGV4XTtyZXR1cm4gZTw9IiAiJiYoIiAiPT1lfHwiXG4iPT1lfHwiXHQiPT1lfHwiXHIiPT1lfHwiXGYiPT1lKX0sci5wcm90b3R5cGUuX3NraXBPcHRpb25hbFNwYWNlcz1mdW5jdGlvbigpe2Zvcig7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9pc0N1cnJlbnRTcGFjZSgpOyl0aGlzLl9jdXJyZW50SW5kZXgrKztyZXR1cm4gdGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4fSxyLnByb3RvdHlwZS5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIXRoaXMuX2lzQ3VycmVudFNwYWNlKCkmJiIsIiE9dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpKSYmKHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpJiZ0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJiIsIj09dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpJiYodGhpcy5fY3VycmVudEluZGV4KyssdGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzKCkpLHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCl9LHIucHJvdG90eXBlLmhhc01vcmVEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleH0sci5wcm90b3R5cGUucGVla1NlZ21lbnRUeXBlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3RyaW5nW3RoaXMuX2N1cnJlbnRJbmRleF07cmV0dXJuIHRoaXMuX3BhdGhTZWdUeXBlRnJvbUNoYXIoZSl9LHIucHJvdG90eXBlLl9wYXRoU2VnVHlwZUZyb21DaGFyPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIloiOmNhc2UieiI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRIO2Nhc2UiTSI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUztjYXNlIm0iOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUw7Y2FzZSJMIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTO2Nhc2UibCI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDtjYXNlIkMiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTO2Nhc2UiYyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw7Y2FzZSJRIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM7Y2FzZSJxIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw7Y2FzZSJBIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19BUkNfQUJTO2Nhc2UiYSI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTDtjYXNlIkgiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUztjYXNlImgiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDtjYXNlIlYiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM7Y2FzZSJ2IjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMO2Nhc2UiUyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTO2Nhc2UicyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMO2Nhc2UiVCI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUztjYXNlInQiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw7ZGVmYXVsdDpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfX0sci5wcm90b3R5cGUuX25leHRDb21tYW5kSGVscGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCIrIj09ZXx8Ii0iPT1lfHwiLiI9PWV8fGU+PSIwIiYmZTw9IjkiKSYmdCE9d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg/dD09d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fQUJTP3dpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUzp0PT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUw/d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fUkVMOnQ6d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfSxyLnByb3RvdHlwZS5pbml0aWFsQ29tbWFuZElzTW92ZVRvPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzTW9yZURhdGEoKSlyZXR1cm4hMDt2YXIgZT10aGlzLnBlZWtTZWdtZW50VHlwZSgpO3JldHVybiBlPT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19BQlN8fGU9PXdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTH0sci5wcm90b3R5cGUuX3BhcnNlTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PTAsbj0xLHI9MCxvPTEscz0xLGk9dGhpcy5fY3VycmVudEluZGV4O2lmKHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpLHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIisiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk/dGhpcy5fY3VycmVudEluZGV4Kys6dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiYiLSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSYmKHRoaXMuX2N1cnJlbnRJbmRleCsrLG89LTEpLCEodGhpcy5fY3VycmVudEluZGV4PT10aGlzLl9lbmRJbmRleHx8KHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTwiMCJ8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT4iOSIpJiYiLiIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSkpe2Zvcih2YXIgYT10aGlzLl9jdXJyZW50SW5kZXg7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+PSIwIiYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPD0iOSI7KXRoaXMuX2N1cnJlbnRJbmRleCsrO2lmKHRoaXMuX2N1cnJlbnRJbmRleCE9YSlmb3IodmFyIGw9dGhpcy5fY3VycmVudEluZGV4LTEsdT0xO2w+PWE7KXQrPXUqKHRoaXMuX3N0cmluZy5jaGFyQXQobC0tKS0iMCIpLHUqPTEwO2lmKHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIi4iPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpe2lmKCsrdGhpcy5fY3VycmVudEluZGV4Pj10aGlzLl9lbmRJbmRleHx8dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPCIwInx8dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPiI5IilyZXR1cm47Zm9yKDt0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJnRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT49IjAiJiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk8PSI5Ijspbio9MTAscis9KHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KS0iMCIpL24sdGhpcy5fY3VycmVudEluZGV4Kz0xfWlmKHRoaXMuX2N1cnJlbnRJbmRleCE9aSYmdGhpcy5fY3VycmVudEluZGV4KzE8dGhpcy5fZW5kSW5kZXgmJigiZSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KXx8IkUiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpJiYieCIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpJiYibSIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpKXtpZih0aGlzLl9jdXJyZW50SW5kZXgrKywiKyI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT90aGlzLl9jdXJyZW50SW5kZXgrKzoiLSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSYmKHRoaXMuX2N1cnJlbnRJbmRleCsrLHM9LTEpLHRoaXMuX2N1cnJlbnRJbmRleD49dGhpcy5fZW5kSW5kZXh8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTwiMCJ8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT4iOSIpcmV0dXJuO2Zvcig7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+PSIwIiYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPD0iOSI7KWUqPTEwLGUrPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KS0iMCIsdGhpcy5fY3VycmVudEluZGV4Kyt9dmFyIGM9dCtyO2lmKGMqPW8sZSYmKGMqPU1hdGgucG93KDEwLHMqZSkpLGkhPXRoaXMuX2N1cnJlbnRJbmRleClyZXR1cm4gdGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIoKSxjfX0sci5wcm90b3R5cGUuX3BhcnNlQXJjRmxhZz1mdW5jdGlvbigpe2lmKCEodGhpcy5fY3VycmVudEluZGV4Pj10aGlzLl9lbmRJbmRleCkpe3ZhciBlPSExLHQ9dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgrKyk7aWYoIjAiPT10KWU9ITE7ZWxzZXtpZigiMSIhPXQpcmV0dXJuO2U9ITB9cmV0dXJuIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKCksZX19LHIucHJvdG90eXBlLnBhcnNlU2VnbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3N0cmluZ1t0aGlzLl9jdXJyZW50SW5kZXhdLG49dGhpcy5fcGF0aFNlZ1R5cGVGcm9tQ2hhcihlKTtpZihuPT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX1VOS05PV04pe2lmKHRoaXMuX3ByZXZpb3VzQ29tbWFuZD09d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOKXJldHVybiBudWxsO2lmKChuPXRoaXMuX25leHRDb21tYW5kSGVscGVyKGUsdGhpcy5fcHJldmlvdXNDb21tYW5kKSk9PXdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTilyZXR1cm4gbnVsbH1lbHNlIHRoaXMuX2N1cnJlbnRJbmRleCsrO3N3aXRjaCh0aGlzLl9wcmV2aW91c0NvbW1hbmQ9bixuKXtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTDpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSk7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg6cmV0dXJuIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpLG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aCh0KTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6dmFyIHI9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSx4Mjp0aGlzLl9wYXJzZU51bWJlcigpLHkyOnRoaXMuX3BhcnNlTnVtYmVyKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh0LHIueCxyLnksci54MSxyLnkxLHIueDIsci55Mik7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOnZhciByPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCkseDI6dGhpcy5fcGFyc2VOdW1iZXIoKSx5Mjp0aGlzLl9wYXJzZU51bWJlcigpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModCxyLngsci55LHIueDEsci55MSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw6dmFyIHI9e3gyOnRoaXMuX3BhcnNlTnVtYmVyKCkseTI6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHQsci54LHIueSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6dmFyIHI9e3gyOnRoaXMuX3BhcnNlTnVtYmVyKCkseTI6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKHQsci54LHIueSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6dmFyIHI9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCh0LHIueCxyLnksci54MSxyLnkxKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOnZhciByPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnModCxyLngsci55LHIueDEsci55MSk7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw6cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodCx0aGlzLl9wYXJzZU51bWJlcigpLHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTDp2YXIgcj17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLGFyY0FuZ2xlOnRoaXMuX3BhcnNlTnVtYmVyKCksYXJjTGFyZ2U6dGhpcy5fcGFyc2VBcmNGbGFnKCksYXJjU3dlZXA6dGhpcy5fcGFyc2VBcmNGbGFnKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbCh0LHIueCxyLnksci54MSxyLnkxLHIuYXJjQW5nbGUsci5hcmNMYXJnZSxyLmFyY1N3ZWVwKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUzp2YXIgcj17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLGFyY0FuZ2xlOnRoaXMuX3BhcnNlTnVtYmVyKCksYXJjTGFyZ2U6dGhpcy5fcGFyc2VBcmNGbGFnKCksYXJjU3dlZXA6dGhpcy5fcGFyc2VBcmNGbGFnKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficyh0LHIueCxyLnksci54MSxyLnkxLHIuYXJjQW5nbGUsci5hcmNMYXJnZSxyLmFyY1N3ZWVwKTtkZWZhdWx0OnRocm93IlVua25vd24gcGF0aCBzZWcgdHlwZS4ifX07dmFyIG89bmV3IG4scz1uZXcgcihlKTtpZighcy5pbml0aWFsQ29tbWFuZElzTW92ZVRvKCkpcmV0dXJuW107Zm9yKDtzLmhhc01vcmVEYXRhKCk7KXt2YXIgaT1zLnBhcnNlU2VnbWVudCgpO2lmKCFpKXJldHVybltdO28uYXBwZW5kU2VnbWVudChpKX1yZXR1cm4gby5wYXRoU2VnTGlzdH0pfSgpLFN0cmluZy5wcm90b3R5cGUucGFkRW5kfHwoU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+PTAsdD1TdHJpbmcodm9pZCAwIT09dD90OiIgIiksdGhpcy5sZW5ndGg+ZT9TdHJpbmcodGhpcyk6KGUtPXRoaXMubGVuZ3RoLGU+dC5sZW5ndGgmJih0Kz10LnJlcGVhdChlL3QubGVuZ3RoKSksU3RyaW5nKHRoaXMpK3Quc2xpY2UoMCxlKSl9KSx0LnByb3RvdHlwZS5heGlzPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5heGlzLmxhYmVscz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO2FyZ3VtZW50cy5sZW5ndGgmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuYXhpcy5zZXRMYWJlbFRleHQobixlW25dKX0pLHQuYXhpcy51cGRhdGVMYWJlbHMoKSl9LHQucHJvdG90eXBlLmF4aXMubWF4PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm57eDpuLmF4aXNfeF9tYXgseTpuLmF4aXNfeV9tYXgseTI6bi5heGlzX3kyX21heH07Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpzKGUpKT8oeShlLngpJiYobi5heGlzX3hfbWF4PWUueCkseShlLnkpJiYobi5heGlzX3lfbWF4PWUueSkseShlLnkyKSYmKG4uYXhpc195Ml9tYXg9ZS55MikpOm4uYXhpc195X21heD1uLmF4aXNfeTJfbWF4PWUsdC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSl9LHQucHJvdG90eXBlLmF4aXMubWluPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm57eDpuLmF4aXNfeF9taW4seTpuLmF4aXNfeV9taW4seTI6bi5heGlzX3kyX21pbn07Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpzKGUpKT8oeShlLngpJiYobi5heGlzX3hfbWluPWUueCkseShlLnkpJiYobi5heGlzX3lfbWluPWUueSkseShlLnkyKSYmKG4uYXhpc195Ml9taW49ZS55MikpOm4uYXhpc195X21pbj1uLmF4aXNfeTJfbWluPWUsdC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSl9LHQucHJvdG90eXBlLmF4aXMucmFuZ2U9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJue21heDp0aGlzLmF4aXMubWF4KCksbWluOnRoaXMuYXhpcy5taW4oKX07bShlLm1heCkmJnRoaXMuYXhpcy5tYXgoZS5tYXgpLG0oZS5taW4pJiZ0aGlzLmF4aXMubWluKGUubWluKX0sdC5wcm90b3R5cGUuY2F0ZWdvcnk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmludGVybmFsLHI9bi5jb25maWc7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKHIuYXhpc194X2NhdGVnb3JpZXNbZV09dCxuLnJlZHJhdygpKSxyLmF4aXNfeF9jYXRlZ29yaWVzW2VdfSx0LnByb3RvdHlwZS5jYXRlZ29yaWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5heGlzX3hfY2F0ZWdvcmllcz1lLHQucmVkcmF3KCksbi5heGlzX3hfY2F0ZWdvcmllcyk6bi5heGlzX3hfY2F0ZWdvcmllc30sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztuLnNpemVfd2lkdGg9ZT9lLndpZHRoOm51bGwsbi5zaXplX2hlaWdodD1lP2UuaGVpZ2h0Om51bGwsdGhpcy5mbHVzaCgpfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwLHdpdGhUcmFuc2l0aW9uOiExLHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtOiExfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmludGVybmFsO2lmKHdpbmRvdy5jbGVhckludGVydmFsKGUuaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQpLHZvaWQgMCE9PWUucmVzaXplVGltZW91dCYmd2luZG93LmNsZWFyVGltZW91dChlLnJlc2l6ZVRpbWVvdXQpLHdpbmRvdy5kZXRhY2hFdmVudCl3aW5kb3cuZGV0YWNoRXZlbnQoIm9ucmVzaXplIixlLnJlc2l6ZUlmRWxlbWVudERpc3BsYXllZCk7ZWxzZSBpZih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcil3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixlLnJlc2l6ZUlmRWxlbWVudERpc3BsYXllZCk7ZWxzZXt2YXIgdD13aW5kb3cub25yZXNpemU7dCYmdC5hZGQmJnQucmVtb3ZlJiZ0LnJlbW92ZShlLnJlc2l6ZUZ1bmN0aW9uKX1yZXR1cm4gZS5yZXNpemVGdW5jdGlvbi5yZW1vdmUoKSxlLnNlbGVjdENoYXJ0LmNsYXNzZWQoImMzIiwhMSkuaHRtbCgiIiksT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW51bGx9KSxudWxsfSx0LnByb3RvdHlwZS5jb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC5jb2xvcihlKX0sdC5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLmRhdGEudGFyZ2V0cztyZXR1cm4gdm9pZCAwPT09ZT90OnQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybltdLmNvbmNhdChlKS5pbmRleE9mKHQuaWQpPj0wfSl9LHQucHJvdG90eXBlLmRhdGEuc2hvd249ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwuZmlsdGVyVGFyZ2V0c1RvU2hvdyh0aGlzLmRhdGEoZSkpfSx0LnByb3RvdHlwZS5kYXRhLnZhbHVlcz1mdW5jdGlvbihlKXt2YXIgdCxuPW51bGw7cmV0dXJuIGUmJih0PXRoaXMuZGF0YShlKSxuPXRbMF0/dFswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSk6bnVsbCksbn0sdC5wcm90b3R5cGUuZGF0YS5uYW1lcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC5jbGVhckxlZ2VuZEl0ZW1UZXh0Qm94Q2FjaGUoKSx0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCJuYW1lcyIsZSl9LHQucHJvdG90eXBlLmRhdGEuY29sb3JzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCJjb2xvcnMiLGUpfSx0LnByb3RvdHlwZS5kYXRhLmF4ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwudXBkYXRlRGF0YUF0dHJpYnV0ZXMoImF4ZXMiLGUpfSx0LnByb3RvdHlwZS5mbG93PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhLGw9dGhpcy5pbnRlcm5hbCx1PVtdLGM9bC5nZXRNYXhEYXRhQ291bnQoKSxkPTAsXz0wO2lmKGUuanNvbiluPWwuY29udmVydEpzb25Ub0RhdGEoZS5qc29uLGUua2V5cyk7ZWxzZSBpZihlLnJvd3Mpbj1sLmNvbnZlcnRSb3dzVG9EYXRhKGUucm93cyk7ZWxzZXtpZighZS5jb2x1bW5zKXJldHVybjtuPWwuY29udmVydENvbHVtbnNUb0RhdGEoZS5jb2x1bW5zKX10PWwuY29udmVydERhdGFUb1RhcmdldHMobiwhMCksbC5kYXRhLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbixyLG89ITE7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlLmlkPT09dFtuXS5pZCl7Zm9yKG89ITAsZS52YWx1ZXNbZS52YWx1ZXMubGVuZ3RoLTFdJiYoXz1lLnZhbHVlc1tlLnZhbHVlcy5sZW5ndGgtMV0uaW5kZXgrMSksZD10W25dLnZhbHVlcy5sZW5ndGgscj0wO3I8ZDtyKyspdFtuXS52YWx1ZXNbcl0uaW5kZXg9XytyLGwuaXNUaW1lU2VyaWVzKCl8fCh0W25dLnZhbHVlc1tyXS54PV8rcik7ZS52YWx1ZXM9ZS52YWx1ZXMuY29uY2F0KHRbbl0udmFsdWVzKSx0LnNwbGljZShuLDEpO2JyZWFrfW98fHUucHVzaChlLmlkKX0pLGwuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQsbjtmb3IodD0wO3Q8dS5sZW5ndGg7dCsrKWlmKGUuaWQ9PT11W3RdKWZvcihfPWUudmFsdWVzW2UudmFsdWVzLmxlbmd0aC0xXS5pbmRleCsxLG49MDtuPGQ7bisrKWUudmFsdWVzLnB1c2goe2lkOmUuaWQsaW5kZXg6XytuLHg6bC5pc1RpbWVTZXJpZXMoKT9sLmdldE90aGVyVGFyZ2V0WChfK24pOl8rbix2YWx1ZTpudWxsfSl9KSxsLmRhdGEudGFyZ2V0cy5sZW5ndGgmJnQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0PWwuZGF0YS50YXJnZXRzWzBdLnZhbHVlc1swXS5pbmRleDt0PF87dCsrKW4ucHVzaCh7aWQ6ZS5pZCxpbmRleDp0LHg6bC5pc1RpbWVTZXJpZXMoKT9sLmdldE90aGVyVGFyZ2V0WCh0KTp0LHZhbHVlOm51bGx9KTtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaW5kZXgrPV8sbC5pc1RpbWVTZXJpZXMoKXx8KGUueCs9Xyl9KSxlLnZhbHVlcz1uLmNvbmNhdChlLnZhbHVlcyl9KSxsLmRhdGEudGFyZ2V0cz1sLmRhdGEudGFyZ2V0cy5jb25jYXQodCksbC5nZXRNYXhEYXRhQ291bnQoKSxvPWwuZGF0YS50YXJnZXRzWzBdLHM9by52YWx1ZXNbMF0sbShlLnRvKT8oZD0wLGE9bC5pc1RpbWVTZXJpZXMoKT9sLnBhcnNlRGF0ZShlLnRvKTplLnRvLG8udmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS54PGEmJmQrK30pKTptKGUubGVuZ3RoKSYmKGQ9ZS5sZW5ndGgpLGM/MT09PWMmJmwuaXNUaW1lU2VyaWVzKCkmJihpPShvLnZhbHVlc1tvLnZhbHVlcy5sZW5ndGgtMV0ueC1zLngpLzIscj1bbmV3IERhdGUoK3MueC1pKSxuZXcgRGF0ZSgrcy54K2kpXSxsLnVwZGF0ZVhEb21haW4obnVsbCwhMCwhMCwhMSxyKSk6KGk9bC5pc1RpbWVTZXJpZXMoKT9vLnZhbHVlcy5sZW5ndGg+MT9vLnZhbHVlc1tvLnZhbHVlcy5sZW5ndGgtMV0ueC1zLng6cy54LWwuZ2V0WERvbWFpbihsLmRhdGEudGFyZ2V0cylbMF06MSxyPVtzLngtaSxzLnhdLGwudXBkYXRlWERvbWFpbihudWxsLCEwLCEwLCExLHIpKSxsLnVwZGF0ZVRhcmdldHMobC5kYXRhLnRhcmdldHMpLGwucmVkcmF3KHtmbG93OntpbmRleDpzLmluZGV4LGxlbmd0aDpkLGR1cmF0aW9uOnkoZS5kdXJhdGlvbik/ZS5kdXJhdGlvbjpsLmNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uLGRvbmU6ZS5kb25lLG9yZ0RhdGFDb3VudDpjfSx3aXRoTGVnZW5kOiEwLHdpdGhUcmFuc2l0aW9uOmM+MSx3aXRoVHJpbVhEb21haW46ITEsd2l0aFVwZGF0ZVhBeGlzOiEwfSl9LGUucHJvdG90eXBlLmdlbmVyYXRlRmxvdz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj10LmQzO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGksYSxsLHUsZCxfLHAsZixtLGgsZz1lLnRhcmdldHMsYj1lLmZsb3csRT1lLmRyYXdCYXIseT1lLmRyYXdMaW5lLHY9ZS5kcmF3QXJlYSxUPWUuY3gsQT1lLmN5LEM9ZS54dixPPWUueEZvclRleHQsUz1lLnlGb3JUZXh0LFI9ZS5kdXJhdGlvbixqPTEseD1iLmluZGV4LEw9Yi5sZW5ndGgsRD10LmdldFZhbHVlT25JbmRleCh0LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMseCksdz10LmdldFZhbHVlT25JbmRleCh0LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMseCtMKSxNPXQueC5kb21haW4oKSxrPWIuZHVyYXRpb258fFIsST1iLmRvbmV8fGZ1bmN0aW9uKCl7fSxQPXQuZ2VuZXJhdGVXYWl0KCk7dC5mbG93aW5nPSEwLHQuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS52YWx1ZXMuc3BsaWNlKDAsTCl9KSxhPXQudXBkYXRlWERvbWFpbihnLCEwLCEwKSx0LnVwZGF0ZVhHcmlkJiZ0LnVwZGF0ZVhHcmlkKCEwKSxsPXQueGdyaWR8fHIuc2VsZWN0QWxsKFtdKSx1PXQueGdyaWRMaW5lc3x8ci5zZWxlY3RBbGwoW10pLGQ9dC5tYWluUmVnaW9ufHxyLnNlbGVjdEFsbChbXSksXz10Lm1haW5UZXh0fHxyLnNlbGVjdEFsbChbXSkscD10Lm1haW5CYXJ8fHIuc2VsZWN0QWxsKFtdKSxmPXQubWFpbkxpbmV8fHIuc2VsZWN0QWxsKFtdKSxtPXQubWFpbkFyZWF8fHIuc2VsZWN0QWxsKFtdKSxoPXQubWFpbkNpcmNsZXx8ci5zZWxlY3RBbGwoW10pLGIub3JnRGF0YUNvdW50P3M9MT09PWIub3JnRGF0YUNvdW50fHwoRCYmRC54KT09PSh3JiZ3LngpP3QueChNWzBdKS10LngoYVswXSk6dC5pc1RpbWVTZXJpZXMoKT90LngoTVswXSktdC54KGFbMF0pOnQueChELngpLXQueCh3LngpOjEhPT10LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMubGVuZ3RoP3M9dC54KE1bMF0pLXQueChhWzBdKTp0LmlzVGltZVNlcmllcygpPyhEPXQuZ2V0VmFsdWVPbkluZGV4KHQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcywwKSx3PXQuZ2V0VmFsdWVPbkluZGV4KHQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcyx0LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMubGVuZ3RoLTEpLHM9dC54KEQueCktdC54KHcueCkpOnM9YyhhKS8yLGo9YyhNKS9jKGEpLGk9InRyYW5zbGF0ZSgiK3MrIiwwKSBzY2FsZSgiK2orIiwxKSIsdC5oaWRlWEdyaWRGb2N1cygpO3ZhciBOPXIudHJhbnNpdGlvbigpLmVhc2Uoci5lYXNlTGluZWFyKS5kdXJhdGlvbihrKTtQLmFkZCh0LnhBeGlzKHQuYXhlcy54LE4pKSxQLmFkZChwLnRyYW5zaXRpb24oTikuYXR0cigidHJhbnNmb3JtIixpKSksUC5hZGQoZi50cmFuc2l0aW9uKE4pLmF0dHIoInRyYW5zZm9ybSIsaSkpLFAuYWRkKG0udHJhbnNpdGlvbihOKS5hdHRyKCJ0cmFuc2Zvcm0iLGkpKSxQLmFkZChoLnRyYW5zaXRpb24oTikuYXR0cigidHJhbnNmb3JtIixpKSksUC5hZGQoXy50cmFuc2l0aW9uKE4pLmF0dHIoInRyYW5zZm9ybSIsaSkpLFAuYWRkKGQuZmlsdGVyKHQuaXNSZWdpb25PblgpLnRyYW5zaXRpb24oTikuYXR0cigidHJhbnNmb3JtIixpKSksUC5hZGQobC50cmFuc2l0aW9uKE4pLmF0dHIoInRyYW5zZm9ybSIsaSkpLFAuYWRkKHUudHJhbnNpdGlvbihOKS5hdHRyKCJ0cmFuc2Zvcm0iLGkpKSxQKGZ1bmN0aW9uKCl7dmFyIGUscj1bXSxzPVtdO2lmKEwpe2ZvcihlPTA7ZTxMO2UrKylyLnB1c2goIi4iK28uc2hhcGUrIi0iKyh4K2UpKSxzLnB1c2goIi4iK28udGV4dCsiLSIrKHgrZSkpO3Quc3ZnLnNlbGVjdEFsbCgiLiIrby5zaGFwZXMpLnNlbGVjdEFsbChyKS5yZW1vdmUoKSx0LnN2Zy5zZWxlY3RBbGwoIi4iK28udGV4dHMpLnNlbGVjdEFsbChzKS5yZW1vdmUoKSx0LnN2Zy5zZWxlY3QoIi4iK28ueGdyaWQpLnJlbW92ZSgpfWwuYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJ4MSIsdC54Z3JpZEF0dHIueDEpLmF0dHIoIngyIix0LnhncmlkQXR0ci54MikuYXR0cigieTEiLHQueGdyaWRBdHRyLnkxKS5hdHRyKCJ5MiIsdC54Z3JpZEF0dHIueTIpLnN0eWxlKCJvcGFjaXR5Iix0LnhncmlkQXR0ci5vcGFjaXR5KSx1LmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ4MSIsbi5heGlzX3JvdGF0ZWQ/MDpDKS5hdHRyKCJ4MiIsbi5heGlzX3JvdGF0ZWQ/dC53aWR0aDpDKSx1LnNlbGVjdCgidGV4dCIpLmF0dHIoIngiLG4uYXhpc19yb3RhdGVkP3Qud2lkdGg6MCkuYXR0cigieSIsQykscC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoImQiLEUpLGYuYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJkIix5KSxtLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuYXR0cigiZCIsdiksaC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoImN4IixUKS5hdHRyKCJjeSIsQSksXy5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoIngiLE8pLmF0dHIoInkiLFMpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLHQub3BhY2l0eUZvclRleHQuYmluZCh0KSksZC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLGQuZmlsdGVyKHQuaXNSZWdpb25PblgpLmF0dHIoIngiLHQucmVnaW9uWC5iaW5kKHQpKS5hdHRyKCJ3aWR0aCIsdC5yZWdpb25XaWR0aC5iaW5kKHQpKSxJKCksdC5mbG93aW5nPSExfSl9fSx0LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuaW50ZXJuYWw7ZT1uLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9bi5zdmcuc2VsZWN0QWxsKG4uc2VsZWN0b3JUYXJnZXRzKGUuZmlsdGVyKG4uaXNUYXJnZXRUb1Nob3csbikpKSx0aGlzLnJldmVydCgpLHRoaXMuZGVmb2N1cygpLHQuY2xhc3NlZChvLmZvY3VzZWQsITApLmNsYXNzZWQoby5kZWZvY3VzZWQsITEpLG4uaGFzQXJjVHlwZSgpJiZuLmV4cGFuZEFyYyhlKSxuLnRvZ2dsZUZvY3VzTGVnZW5kKGUsITApLG4uZm9jdXNlZFRhcmdldElkcz1lLG4uZGVmb2N1c2VkVGFyZ2V0SWRzPW4uZGVmb2N1c2VkVGFyZ2V0SWRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPDB9KX0sdC5wcm90b3R5cGUuZGVmb2N1cz1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuaW50ZXJuYWw7ZT1uLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9bi5zdmcuc2VsZWN0QWxsKG4uc2VsZWN0b3JUYXJnZXRzKGUuZmlsdGVyKG4uaXNUYXJnZXRUb1Nob3csbikpKSx0LmNsYXNzZWQoby5mb2N1c2VkLCExKS5jbGFzc2VkKG8uZGVmb2N1c2VkLCEwKSxuLmhhc0FyY1R5cGUoKSYmbi51bmV4cGFuZEFyYyhlKSxuLnRvZ2dsZUZvY3VzTGVnZW5kKGUsITEpLG4uZm9jdXNlZFRhcmdldElkcz1uLmZvY3VzZWRUYXJnZXRJZHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluZGV4T2YodCk8MH0pLG4uZGVmb2N1c2VkVGFyZ2V0SWRzPWV9LHQucHJvdG90eXBlLnJldmVydD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuaW50ZXJuYWw7ZT1uLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9bi5zdmcuc2VsZWN0QWxsKG4uc2VsZWN0b3JUYXJnZXRzKGUpKSx0LmNsYXNzZWQoby5mb2N1c2VkLCExKS5jbGFzc2VkKG8uZGVmb2N1c2VkLCExKSxuLmhhc0FyY1R5cGUoKSYmbi51bmV4cGFuZEFyYyhlKSxuLmNvbmZpZy5sZWdlbmRfc2hvdyYmKG4uc2hvd0xlZ2VuZChlLmZpbHRlcihuLmlzTGVnZW5kVG9TaG93LmJpbmQobikpKSxuLmxlZ2VuZC5zZWxlY3RBbGwobi5zZWxlY3RvckxlZ2VuZHMoZSkpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBuLmQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKG8ubGVnZW5kSXRlbUZvY3VzZWQpfSkuY2xhc3NlZChvLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKSksbi5mb2N1c2VkVGFyZ2V0SWRzPVtdLG4uZGVmb2N1c2VkVGFyZ2V0SWRzPVtdfSx0LnByb3RvdHlwZS54Z3JpZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBlPyhuLmdyaWRfeF9saW5lcz1lLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLmdyaWRfeF9saW5lcyk6bi5ncmlkX3hfbGluZXN9LHQucHJvdG90eXBlLnhncmlkcy5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtyZXR1cm4gdGhpcy54Z3JpZHModC5jb25maWcuZ3JpZF94X2xpbmVzLmNvbmNhdChlfHxbXSkpfSx0LnByb3RvdHlwZS54Z3JpZHMucmVtb3ZlPWZ1bmN0aW9uKGUpe3RoaXMuaW50ZXJuYWwucmVtb3ZlR3JpZExpbmVzKGUsITApfSx0LnByb3RvdHlwZS55Z3JpZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBlPyhuLmdyaWRfeV9saW5lcz1lLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLmdyaWRfeV9saW5lcyk6bi5ncmlkX3lfbGluZXN9LHQucHJvdG90eXBlLnlncmlkcy5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtyZXR1cm4gdGhpcy55Z3JpZHModC5jb25maWcuZ3JpZF95X2xpbmVzLmNvbmNhdChlfHxbXSkpfSx0LnByb3RvdHlwZS55Z3JpZHMucmVtb3ZlPWZ1bmN0aW9uKGUpe3RoaXMuaW50ZXJuYWwucmVtb3ZlR3JpZExpbmVzKGUsITEpfSx0LnByb3RvdHlwZS5ncm91cHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBFKGUpP24uZGF0YV9ncm91cHM6KG4uZGF0YV9ncm91cHM9ZSx0LnJlZHJhdygpLG4uZGF0YV9ncm91cHMpfSx0LnByb3RvdHlwZS5sZWdlbmQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmxlZ2VuZC5zaG93PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWw7dC5zaG93TGVnZW5kKHQubWFwVG9UYXJnZXRJZHMoZSkpLHQudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwfSl9LHQucHJvdG90eXBlLmxlZ2VuZC5oaWRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWw7dC5oaWRlTGVnZW5kKHQubWFwVG9UYXJnZXRJZHMoZSkpLHQudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiExfSl9LHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5pbnRlcm5hbCxyPW4uY29uZmlnO2lmKGUueHMmJm4uYWRkWHMoZS54cyksIm5hbWVzImluIGUmJnQucHJvdG90eXBlLmRhdGEubmFtZXMuYmluZCh0aGlzKShlLm5hbWVzKSwiY2xhc3NlcyJpbiBlJiZPYmplY3Qua2V5cyhlLmNsYXNzZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ci5kYXRhX2NsYXNzZXNbdF09ZS5jbGFzc2VzW3RdfSksImNhdGVnb3JpZXMiaW4gZSYmbi5pc0NhdGVnb3JpemVkKCkmJihyLmF4aXNfeF9jYXRlZ29yaWVzPWUuY2F0ZWdvcmllcyksImF4ZXMiaW4gZSYmT2JqZWN0LmtleXMoZS5heGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuZGF0YV9heGVzW3RdPWUuYXhlc1t0XX0pLCJjb2xvcnMiaW4gZSYmT2JqZWN0LmtleXMoZS5jb2xvcnMpLmZvckVhY2goZnVuY3Rpb24odCl7ci5kYXRhX2NvbG9yc1t0XT1lLmNvbG9yc1t0XX0pLCJjYWNoZUlkcyJpbiBlJiZuLmhhc0NhY2hlcyhlLmNhY2hlSWRzKSlyZXR1cm4gdm9pZCBuLmxvYWQobi5nZXRDYWNoZXMoZS5jYWNoZUlkcyksZS5kb25lKTsidW5sb2FkImluIGU/bi51bmxvYWQobi5tYXBUb1RhcmdldElkcygiYm9vbGVhbiI9PXR5cGVvZiBlLnVubG9hZCYmZS51bmxvYWQ/bnVsbDplLnVubG9hZCksZnVuY3Rpb24oKXtuLmxvYWRGcm9tQXJncyhlKX0pOm4ubG9hZEZyb21BcmdzKGUpfSx0LnByb3RvdHlwZS51bmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtlPWV8fHt9LGUgaW5zdGFuY2VvZiBBcnJheT9lPXtpZHM6ZX06InN0cmluZyI9PXR5cGVvZiBlJiYoZT17aWRzOltlXX0pLHQudW5sb2FkKHQubWFwVG9UYXJnZXRJZHMoZS5pZHMpLGZ1bmN0aW9uKCl7dC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhMZWdlbmQ6ITB9KSxlLmRvbmUmJmUuZG9uZSgpfSl9LHQucHJvdG90eXBlLnJlZ2lvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBlPyhuLnJlZ2lvbnM9ZSx0LnJlZHJhd1dpdGhvdXRSZXNjYWxlKCksbi5yZWdpb25zKTpuLnJlZ2lvbnN9LHQucHJvdG90eXBlLnJlZ2lvbnMuYWRkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztyZXR1cm4gZT8obi5yZWdpb25zPW4ucmVnaW9ucy5jb25jYXQoZSksdC5yZWRyYXdXaXRob3V0UmVzY2FsZSgpLG4ucmVnaW9ucyk6bi5yZWdpb25zfSx0LnByb3RvdHlwZS5yZWdpb25zLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIscz10aGlzLmludGVybmFsLGk9cy5jb25maWc7cmV0dXJuIGU9ZXx8e30sdD1zLmdldE9wdGlvbihlLCJkdXJhdGlvbiIsaS50cmFuc2l0aW9uX2R1cmF0aW9uKSxuPXMuZ2V0T3B0aW9uKGUsImNsYXNzZXMiLFtvLnJlZ2lvbl0pLHI9cy5tYWluLnNlbGVjdCgiLiIrby5yZWdpb25zKS5zZWxlY3RBbGwobi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2V9KSksKHQ/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24odCk6cikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGkucmVnaW9ucz1pLnJlZ2lvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiFlLmNsYXNzfHwoZS5jbGFzcy5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7bi5pbmRleE9mKGUpPj0wJiYodD0hMCl9KSwhdCl9KSxpLnJlZ2lvbnN9LHQucHJvdG90eXBlLnNlbGVjdGVkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmQzO3JldHVybiBuLm1lcmdlKHQubWFpbi5zZWxlY3RBbGwoIi4iK28uc2hhcGVzK3QuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoZSkpLnNlbGVjdEFsbCgiLiIrby5zaGFwZSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG4uc2VsZWN0KHRoaXMpLmNsYXNzZWQoby5TRUxFQ1RFRCl9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUuX19kYXRhX187cmV0dXJuIHQuZGF0YT90LmRhdGE6dH0pfSkpfSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuaW50ZXJuYWwscz1yLmQzLGk9ci5jb25maWc7aS5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiZyLm1haW4uc2VsZWN0QWxsKCIuIitvLnNoYXBlcykuc2VsZWN0QWxsKCIuIitvLnNoYXBlKS5lYWNoKGZ1bmN0aW9uKGEsbCl7dmFyIHU9cy5zZWxlY3QodGhpcyksYz1hLmRhdGE/YS5kYXRhLmlkOmEuaWQsZD1yLmdldFRvZ2dsZSh0aGlzLGEpLmJpbmQociksXz1pLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWR8fCFlfHxlLmluZGV4T2YoYyk+PTAscD0hdHx8dC5pbmRleE9mKGwpPj0wLGY9dS5jbGFzc2VkKG8uU0VMRUNURUQpO3UuY2xhc3NlZChvLmxpbmUpfHx1LmNsYXNzZWQoby5hcmVhKXx8KF8mJnA/aS5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoYSkmJiFmJiZkKCEwLHUuY2xhc3NlZChvLlNFTEVDVEVELCEwKSxhLGwpOm0obikmJm4mJmYmJmQoITEsdS5jbGFzc2VkKG8uU0VMRUNURUQsITEpLGEsbCkpfSl9LHQucHJvdG90eXBlLnVuc2VsZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pbnRlcm5hbCxyPW4uZDMscz1uLmNvbmZpZztzLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJm4ubWFpbi5zZWxlY3RBbGwoIi4iK28uc2hhcGVzKS5zZWxlY3RBbGwoIi4iK28uc2hhcGUpLmVhY2goZnVuY3Rpb24oaSxhKXt2YXIgbD1yLnNlbGVjdCh0aGlzKSx1PWkuZGF0YT9pLmRhdGEuaWQ6aS5pZCxjPW4uZ2V0VG9nZ2xlKHRoaXMsaSkuYmluZChuKSxkPXMuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZHx8IWV8fGUuaW5kZXhPZih1KT49MCxfPSF0fHx0LmluZGV4T2YoYSk+PTAscD1sLmNsYXNzZWQoby5TRUxFQ1RFRCk7bC5jbGFzc2VkKG8ubGluZSl8fGwuY2xhc3NlZChvLmFyZWEpfHxkJiZfJiZzLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShpKSYmcCYmYyghMSxsLmNsYXNzZWQoby5TRUxFQ1RFRCwhMSksaSxhKX0pfSx0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmludGVybmFsO2U9ci5tYXBUb1RhcmdldElkcyhlKSx0PXR8fHt9LHIucmVtb3ZlSGlkZGVuVGFyZ2V0SWRzKGUpLG49ci5zdmcuc2VsZWN0QWxsKHIuc2VsZWN0b3JUYXJnZXRzKGUpKSxuLnRyYW5zaXRpb24oKS5zdHlsZSgiZGlzcGxheSIsImluaXRpYWwiLCJpbXBvcnRhbnQiKS5zdHlsZSgib3BhY2l0eSIsMSwiaW1wb3J0YW50IikuY2FsbChyLmVuZGFsbCxmdW5jdGlvbigpe24uc3R5bGUoIm9wYWNpdHkiLG51bGwpLnN0eWxlKCJvcGFjaXR5IiwxKX0pLHQud2l0aExlZ2VuZCYmci5zaG93TGVnZW5kKGUpLHIucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoTGVnZW5kOiEwfSl9LHQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuaW50ZXJuYWw7ZT1yLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9dHx8e30sci5hZGRIaWRkZW5UYXJnZXRJZHMoZSksbj1yLnN2Zy5zZWxlY3RBbGwoci5zZWxlY3RvclRhcmdldHMoZSkpLG4udHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwLCJpbXBvcnRhbnQiKS5jYWxsKHIuZW5kYWxsLGZ1bmN0aW9uKCl7bi5zdHlsZSgib3BhY2l0eSIsbnVsbCkuc3R5bGUoIm9wYWNpdHkiLDApLG4uc3R5bGUoImRpc3BsYXkiLCJub25lIil9KSx0LndpdGhMZWdlbmQmJnIuaGlkZUxlZ2VuZChlKSxyLnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITAsd2l0aExlZ2VuZDohMH0pfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5pbnRlcm5hbDtyLm1hcFRvVGFyZ2V0SWRzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7ci5pc1RhcmdldFRvU2hvdyhlKT9uLmhpZGUoZSx0KTpuLnNob3coZSx0KX0pfSx0LnByb3RvdHlwZS50b29sdGlwPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS50b29sdGlwLnNob3c9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMuaW50ZXJuYWwsbz17fTtlLm1vdXNlP289ZS5tb3VzZTooZS5kYXRhP249ZS5kYXRhOnZvaWQgMCE9PWUueCYmKHQ9ZS5pZD9yLmRhdGEudGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lLmlkfSk6ci5kYXRhLnRhcmdldHMsbj1yLmZpbHRlckJ5WCh0LGUueCkuc2xpY2UoMCwxKVswXSksbz1uP3IuZ2V0TW91c2VQb3NpdGlvbihuKTpudWxsKSxyLmRpc3BhdGNoRXZlbnQoIm1vdXNlbW92ZSIsbyksci5jb25maWcudG9vbHRpcF9vbnNob3cuY2FsbChyLG4pfSx0LnByb3RvdHlwZS50b29sdGlwLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmludGVybmFsLmRpc3BhdGNoRXZlbnQoIm1vdXNlb3V0IiwwKSx0aGlzLmludGVybmFsLmNvbmZpZy50b29sdGlwX29uaGlkZS5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmludGVybmFsLHI9WyJwaWUiLCJkb251dCJdLmluZGV4T2YoZSk+PTA/e3dpdGhUcmFuc2Zvcm06ITB9Om51bGw7bi50cmFuc2Zvcm1Ubyh0LGUscil9LGUucHJvdG90eXBlLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89IXIuaGFzQXJjVHlwZSgpLHM9bnx8e3dpdGhUcmFuc2l0aW9uRm9yQXhpczpvfTtzLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtPSExLHIudHJhbnNpdGluZz0hMSxyLnNldFRhcmdldFR5cGUoZSx0KSxyLnVwZGF0ZVRhcmdldHMoci5kYXRhLnRhcmdldHMpLHIudXBkYXRlQW5kUmVkcmF3KHMpfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJih0LnVwZGF0ZVRhcmdldFgodC5kYXRhLnRhcmdldHMsZSksdC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSkpLHQuZGF0YS54c30sdC5wcm90b3R5cGUueHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKHQudXBkYXRlVGFyZ2V0WHModC5kYXRhLnRhcmdldHMsZSksdC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSkpLHQuZGF0YS54c30sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3JldHVybiBlPyh0LmlzVGltZVNlcmllcygpJiYoZT1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5wYXJzZURhdGUoZSl9KSksdC5jb25maWcuc3ViY2hhcnRfc2hvdz90LmJydXNoLnNlbGVjdGlvbkFzVmFsdWUoZSwhMCk6KHQudXBkYXRlWERvbWFpbihudWxsLCEwLCExLCExLGUpLHQucmVkcmF3KHt3aXRoWTp0LmNvbmZpZy56b29tX3Jlc2NhbGUsd2l0aFN1YmNoYXJ0OiExfSkpLHQuY29uZmlnLnpvb21fb256b29tLmNhbGwodGhpcyx0Lngub3JnRG9tYWluKCkpLGUpOnQueC5kb21haW4oKX0sdC5wcm90b3R5cGUuem9vbS5lbmFibGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDt0LmNvbmZpZy56b29tX2VuYWJsZWQ9ZSx0LnVwZGF0ZUFuZFJlZHJhdygpfSx0LnByb3RvdHlwZS51bnpvb209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmludGVybmFsO2UuY29uZmlnLnN1YmNoYXJ0X3Nob3c/ZS5icnVzaC5jbGVhcigpOihlLnVwZGF0ZVhEb21haW4obnVsbCwhMCwhMSwhMSxlLnN1YlguZG9tYWluKCkpLGUucmVkcmF3KHt3aXRoWTplLmNvbmZpZy56b29tX3Jlc2NhbGUsd2l0aFN1YmNoYXJ0OiExfSkpfSx0LnByb3RvdHlwZS56b29tLm1heD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLG49dC5jb25maWcscj10LmQzO2lmKDAhPT1lJiYhZSlyZXR1cm4gbi56b29tX3hfbWF4O24uem9vbV94X21heD1yLm1heChbdC5vcmdYRG9tYWluWzFdLGVdKX0sdC5wcm90b3R5cGUuem9vbS5taW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnLHI9dC5kMztpZigwIT09ZSYmIWUpcmV0dXJuIG4uem9vbV94X21pbjtuLnpvb21feF9taW49ci5taW4oW3Qub3JnWERvbWFpblswXSxlXSl9LHQucHJvdG90eXBlLnpvb20ucmFuZ2U9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJue21heDp0aGlzLmRvbWFpbi5tYXgoKSxtaW46dGhpcy5kb21haW4ubWluKCl9O20oZS5tYXgpJiZ0aGlzLmRvbWFpbi5tYXgoZS5tYXgpLG0oZS5taW4pJiZ0aGlzLmRvbWFpbi5taW4oZS5taW4pfSxlLnByb3RvdHlwZS5pbml0UGllPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZDM7ZS5waWU9dC5waWUoKS52YWx1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC52YWx1ZX0sMCl9KTt2YXIgbj1lLmdldE9yZGVyRnVuY3Rpb24oKTtpZihuJiYoZS5pc09yZGVyQXNjKCl8fGUuaXNPcmRlckRlc2MoKSkpe3ZhciByPW47bj1mdW5jdGlvbihlLHQpe3JldHVybi0xKnIoZSx0KX19ZS5waWUuc29ydChufHxudWxsKX0sZS5wcm90b3R5cGUudXBkYXRlUmFkaXVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49dC5nYXVnZV93aWR0aHx8dC5kb251dF93aWR0aCxyPWUuZmlsdGVyVGFyZ2V0c1RvU2hvdyhlLmRhdGEudGFyZ2V0cykubGVuZ3RoKmUuY29uZmlnLmdhdWdlX2FyY3NfbWluV2lkdGg7ZS5yYWRpdXNFeHBhbmRlZD1NYXRoLm1pbihlLmFyY1dpZHRoLGUuYXJjSGVpZ2h0KS8yKihlLmhhc1R5cGUoImdhdWdlIik/Ljg1OjEpLGUucmFkaXVzPS45NSplLnJhZGl1c0V4cGFuZGVkLGUuaW5uZXJSYWRpdXNSYXRpbz1uPyhlLnJhZGl1cy1uKS9lLnJhZGl1czouNixlLmlubmVyUmFkaXVzPWUuaGFzVHlwZSgiZG9udXQiKXx8ZS5oYXNUeXBlKCJnYXVnZSIpP2UucmFkaXVzKmUuaW5uZXJSYWRpdXNSYXRpbzowLGUuZ2F1Z2VBcmNXaWR0aD1ufHwocjw9ZS5yYWRpdXMtZS5pbm5lclJhZGl1cz9lLnJhZGl1cy1lLmlubmVyUmFkaXVzOnI8PWUucmFkaXVzP3I6ZS5yYWRpdXMpfSxlLnByb3RvdHlwZS51cGRhdGVBcmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2Uuc3ZnQXJjPWUuZ2V0U3ZnQXJjKCksZS5zdmdBcmNFeHBhbmRlZD1lLmdldFN2Z0FyY0V4cGFuZGVkKCksZS5zdmdBcmNFeHBhbmRlZFN1Yj1lLmdldFN2Z0FyY0V4cGFuZGVkKC45OCl9LGUucHJvdG90eXBlLnVwZGF0ZUFuZ2xlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHM9dGhpcyxpPXMuY29uZmlnLGE9ITEsbD0wO3JldHVybiBpPyhzLnBpZShzLmZpbHRlclRhcmdldHNUb1Nob3cocy5kYXRhLnRhcmdldHMpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2F8fHQuZGF0YS5pZCE9PWUuZGF0YS5pZHx8KGE9ITAsZT10LGUuaW5kZXg9bCksbCsrfSksaXNOYU4oZS5zdGFydEFuZ2xlKSYmKGUuc3RhcnRBbmdsZT0wKSxpc05hTihlLmVuZEFuZ2xlKSYmKGUuZW5kQW5nbGU9ZS5zdGFydEFuZ2xlKSxzLmlzR2F1Z2VUeXBlKGUuZGF0YSkmJih0PWkuZ2F1Z2VfbWluLG49aS5nYXVnZV9tYXgscj1NYXRoLlBJKihpLmdhdWdlX2Z1bGxDaXJjbGU/MjoxKS8obi10KSxvPWUudmFsdWU8dD8wOmUudmFsdWU8bj9lLnZhbHVlLXQ6bi10LGUuc3RhcnRBbmdsZT1pLmdhdWdlX3N0YXJ0aW5nQW5nbGUsZS5lbmRBbmdsZT1lLnN0YXJ0QW5nbGUrcipvKSxhP2U6bnVsbCk6bnVsbH0sZS5wcm90b3R5cGUuZ2V0U3ZnQXJjPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuaGFzVHlwZSgiZ2F1Z2UiKSxuPWUuZ2F1Z2VBcmNXaWR0aC9lLmZpbHRlclRhcmdldHNUb1Nob3coZS5kYXRhLnRhcmdldHMpLmxlbmd0aCxyPWUuZDMuYXJjKCkub3V0ZXJSYWRpdXMoZnVuY3Rpb24ocil7cmV0dXJuIHQ/ZS5yYWRpdXMtbipyLmluZGV4OmUucmFkaXVzfSkuaW5uZXJSYWRpdXMoZnVuY3Rpb24ocil7cmV0dXJuIHQ/ZS5yYWRpdXMtbiooci5pbmRleCsxKTplLmlubmVyUmFkaXVzfSksbz1mdW5jdGlvbih0LG4pe3ZhciBvO3JldHVybiBuP3IodCk6KG89ZS51cGRhdGVBbmdsZSh0KSxvP3Iobyk6Ik0gMCAwIil9O3JldHVybiBvLmNlbnRyb2lkPXIuY2VudHJvaWQsb30sZS5wcm90b3R5cGUuZ2V0U3ZnQXJjRXhwYW5kZWQ9ZnVuY3Rpb24oZSl7ZT1lfHwxO3ZhciB0PXRoaXMsbj10Lmhhc1R5cGUoImdhdWdlIikscj10LmdhdWdlQXJjV2lkdGgvdC5maWx0ZXJUYXJnZXRzVG9TaG93KHQuZGF0YS50YXJnZXRzKS5sZW5ndGgsbz1NYXRoLm1pbih0LnJhZGl1c0V4cGFuZGVkKmUtdC5yYWRpdXMsLjgqci0xMDAqKDEtZSkpLHM9dC5kMy5hcmMoKS5vdXRlclJhZGl1cyhmdW5jdGlvbihzKXtyZXR1cm4gbj90LnJhZGl1cy1yKnMuaW5kZXgrbzp0LnJhZGl1c0V4cGFuZGVkKmV9KS5pbm5lclJhZGl1cyhmdW5jdGlvbihlKXtyZXR1cm4gbj90LnJhZGl1cy1yKihlLmluZGV4KzEpOnQuaW5uZXJSYWRpdXN9KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dC51cGRhdGVBbmdsZShlKTtyZXR1cm4gbj9zKG4pOiJNIDAgMCJ9fSxlLnByb3RvdHlwZS5nZXRBcmM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHx0aGlzLmlzQXJjVHlwZShlLmRhdGEpP3RoaXMuc3ZnQXJjKGUsdCk6Ik0gMCAwIn0sZS5wcm90b3R5cGUudHJhbnNmb3JtRm9yQXJjTGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpPXRoaXMsYT1pLmNvbmZpZyxsPWkudXBkYXRlQW5nbGUoZSksdT0iIixjPWkuaGFzVHlwZSgiZ2F1Z2UiKTtpZihsJiYhYyl0PXRoaXMuc3ZnQXJjLmNlbnRyb2lkKGwpLG49aXNOYU4odFswXSk/MDp0WzBdLHI9aXNOYU4odFsxXSk/MDp0WzFdLG89TWF0aC5zcXJ0KG4qbityKnIpLHM9aS5oYXNUeXBlKCJkb251dCIpJiZhLmRvbnV0X2xhYmVsX3JhdGlvP2coYS5kb251dF9sYWJlbF9yYXRpbyk/YS5kb251dF9sYWJlbF9yYXRpbyhlLGkucmFkaXVzLG8pOmEuZG9udXRfbGFiZWxfcmF0aW86aS5oYXNUeXBlKCJwaWUiKSYmYS5waWVfbGFiZWxfcmF0aW8/ZyhhLnBpZV9sYWJlbF9yYXRpbyk/YS5waWVfbGFiZWxfcmF0aW8oZSxpLnJhZGl1cyxvKTphLnBpZV9sYWJlbF9yYXRpbzppLnJhZGl1cyYmbz8oMzYvaS5yYWRpdXM+LjM3NT8xLjE3NS0zNi9pLnJhZGl1czouOCkqaS5yYWRpdXMvbzowLHU9InRyYW5zbGF0ZSgiK24qcysiLCIrcipzKyIpIjtlbHNlIGlmKGwmJmMmJmkuZmlsdGVyVGFyZ2V0c1RvU2hvdyhpLmRhdGEudGFyZ2V0cykubGVuZ3RoPjEpe3ZhciBkPU1hdGguc2luKGwuZW5kQW5nbGUtTWF0aC5QSS8yKTtuPU1hdGguY29zKGwuZW5kQW5nbGUtTWF0aC5QSS8yKSooaS5yYWRpdXNFeHBhbmRlZCsyNSkscj1kKihpLnJhZGl1c0V4cGFuZGVkKzE1LU1hdGguYWJzKDEwKmQpKSszLHU9InRyYW5zbGF0ZSgiK24rIiwiK3IrIikifXJldHVybiB1fSxlLnByb3RvdHlwZS5nZXRBcmNSYXRpbz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj1NYXRoLlBJKih0Lmhhc1R5cGUoImdhdWdlIikmJiFuLmdhdWdlX2Z1bGxDaXJjbGU/MToyKTtyZXR1cm4gZT8oZS5lbmRBbmdsZS1lLnN0YXJ0QW5nbGUpL3I6bnVsbH0sZS5wcm90b3R5cGUuY29udmVydFRvQXJjRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGROYW1lKHtpZDplLmRhdGEuaWQsdmFsdWU6ZS52YWx1ZSxyYXRpbzp0aGlzLmdldEFyY1JhdGlvKGUpLGluZGV4OmUuaW5kZXh9KX0sZS5wcm90b3R5cGUudGV4dEZvckFyY0xhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaT10aGlzO3JldHVybiBpLnNob3VsZFNob3dBcmNMYWJlbCgpPyh0PWkudXBkYXRlQW5nbGUoZSksbj10P3QudmFsdWU6bnVsbCxyPWkuZ2V0QXJjUmF0aW8odCksbz1lLmRhdGEuaWQsaS5oYXNUeXBlKCJnYXVnZSIpfHxpLm1lZXRzQXJjTGFiZWxUaHJlc2hvbGQocik/KHM9aS5nZXRBcmNMYWJlbEZvcm1hdCgpLHM/cyhuLHIsbyk6aS5kZWZhdWx0QXJjVmFsdWVGb3JtYXQobixyKSk6IiIpOiIifSxlLnByb3RvdHlwZS50ZXh0Rm9yR2F1Z2VNaW5NYXg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5nZXRHYXVnZUxhYmVsRXh0ZW50cygpO3JldHVybiByP3IoZSx0KTplfSxlLnByb3RvdHlwZS5leHBhbmRBcmM9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO2lmKG4udHJhbnNpdGluZylyZXR1cm4gdm9pZCh0PXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe24udHJhbnNpdGluZ3x8KHdpbmRvdy5jbGVhckludGVydmFsKHQpLG4ubGVnZW5kLnNlbGVjdEFsbCgiLmMzLWxlZ2VuZC1pdGVtLWZvY3VzZWQiKS5zaXplKCk+MCYmbi5leHBhbmRBcmMoZSkpfSwxMCkpO2U9bi5tYXBUb1RhcmdldElkcyhlKSxuLnN2Zy5zZWxlY3RBbGwobi5zZWxlY3RvclRhcmdldHMoZSwiLiIrby5jaGFydEFyYykpLmVhY2goZnVuY3Rpb24oZSl7bi5zaG91bGRFeHBhbmQoZS5kYXRhLmlkKSYmbi5kMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uZXhwYW5kRHVyYXRpb24oZS5kYXRhLmlkKSkuYXR0cigiZCIsbi5zdmdBcmNFeHBhbmRlZCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIqbi5leHBhbmREdXJhdGlvbihlLmRhdGEuaWQpKS5hdHRyKCJkIixuLnN2Z0FyY0V4cGFuZGVkU3ViKS5lYWNoKGZ1bmN0aW9uKGUpe24uaXNEb251dFR5cGUoZS5kYXRhKX0pfSl9LGUucHJvdG90eXBlLnVuZXhwYW5kQXJjPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC50cmFuc2l0aW5nfHwoZT10Lm1hcFRvVGFyZ2V0SWRzKGUpLHQuc3ZnLnNlbGVjdEFsbCh0LnNlbGVjdG9yVGFyZ2V0cyhlLCIuIitvLmNoYXJ0QXJjKSkuc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKGZ1bmN0aW9uKGUpe3JldHVybiB0LmV4cGFuZER1cmF0aW9uKGUuZGF0YS5pZCl9KS5hdHRyKCJkIix0LnN2Z0FyYyksdC5zdmcuc2VsZWN0QWxsKCIuIitvLmFyYykpfSxlLnByb3RvdHlwZS5leHBhbmREdXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7cmV0dXJuIHQuaXNEb251dFR5cGUoZSk/bi5kb251dF9leHBhbmRfZHVyYXRpb246dC5pc0dhdWdlVHlwZShlKT9uLmdhdWdlX2V4cGFuZF9kdXJhdGlvbjp0LmlzUGllVHlwZShlKT9uLnBpZV9leHBhbmRfZHVyYXRpb246NTB9LGUucHJvdG90eXBlLnNob3VsZEV4cGFuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7cmV0dXJuIHQuaXNEb251dFR5cGUoZSkmJm4uZG9udXRfZXhwYW5kfHx0LmlzR2F1Z2VUeXBlKGUpJiZuLmdhdWdlX2V4cGFuZHx8dC5pc1BpZVR5cGUoZSkmJm4ucGllX2V4cGFuZH0sZS5wcm90b3R5cGUuc2hvdWxkU2hvd0FyY0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49ITA7cmV0dXJuIGUuaGFzVHlwZSgiZG9udXQiKT9uPXQuZG9udXRfbGFiZWxfc2hvdzplLmhhc1R5cGUoInBpZSIpJiYobj10LnBpZV9sYWJlbF9zaG93KSxufSxlLnByb3RvdHlwZS5tZWV0c0FyY0xhYmVsVGhyZXNob2xkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gZT49KHQuaGFzVHlwZSgiZG9udXQiKT9uLmRvbnV0X2xhYmVsX3RocmVzaG9sZDpuLnBpZV9sYWJlbF90aHJlc2hvbGQpfSxlLnByb3RvdHlwZS5nZXRBcmNMYWJlbEZvcm1hdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPXQucGllX2xhYmVsX2Zvcm1hdDtyZXR1cm4gZS5oYXNUeXBlKCJnYXVnZSIpP249dC5nYXVnZV9sYWJlbF9mb3JtYXQ6ZS5oYXNUeXBlKCJkb251dCIpJiYobj10LmRvbnV0X2xhYmVsX2Zvcm1hdCksbn0sZS5wcm90b3R5cGUuZ2V0R2F1Z2VMYWJlbEV4dGVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuZ2F1Z2VfbGFiZWxfZXh0ZW50c30sZS5wcm90b3R5cGUuZ2V0QXJjVGl0bGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLmhhc1R5cGUoImRvbnV0Iik/ZS5jb25maWcuZG9udXRfdGl0bGU6IiJ9LGUucHJvdG90eXBlLnVwZGF0ZVRhcmdldHNGb3JBcmM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMscz1yLm1haW4saT1yLmNsYXNzQ2hhcnRBcmMuYmluZChyKSxhPXIuY2xhc3NBcmNzLmJpbmQociksbD1yLmNsYXNzRm9jdXMuYmluZChyKTt0PXMuc2VsZWN0KCIuIitvLmNoYXJ0QXJjcykuc2VsZWN0QWxsKCIuIitvLmNoYXJ0QXJjKS5kYXRhKHIucGllKGUpKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkrbChlLmRhdGEpfSksbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGkpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEpLG4uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHkiLHIuaGFzVHlwZSgiZ2F1Z2UiKT8iLS4xZW0iOiIuMzVlbSIpLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIil9LGUucHJvdG90eXBlLmluaXRBcmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuYXJjcz1lLm1haW4uc2VsZWN0KCIuIitvLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5jaGFydEFyY3MpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoImFyYyIpKSxlLmFyY3MuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLG8uY2hhcnRBcmNzVGl0bGUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZS5nZXRBcmNUaXRsZSgpKX0sZS5wcm90b3R5cGUucmVkcmF3QXJjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixzLGksYSxsPXRoaXMsdT1sLmQzLGM9bC5jb25maWcsZD1sLm1haW4sXz1sLmhhc1R5cGUoImdhdWdlIik7aWYocj1kLnNlbGVjdEFsbCgiLiIrby5hcmNzKS5zZWxlY3RBbGwoIi4iK28uYXJjKS5kYXRhKGwuYXJjRGF0YS5iaW5kKGwpKSxzPXIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsbC5jbGFzc0FyYy5iaW5kKGwpKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGwuY29sb3IoZS5kYXRhKX0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKGUpe3JldHVybiBjLmludGVyYWN0aW9uX2VuYWJsZWQmJmMuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGUpPyJwb2ludGVyIjpudWxsfSkuZWFjaChmdW5jdGlvbihlKXtsLmlzR2F1Z2VUeXBlKGUuZGF0YSkmJihlLnN0YXJ0QW5nbGU9ZS5lbmRBbmdsZT1jLmdhdWdlX3N0YXJ0aW5nQW5nbGUpLHRoaXMuX2N1cnJlbnQ9ZX0pLm1lcmdlKHIpLF8mJihpPWQuc2VsZWN0QWxsKCIuIitvLmFyY3MpLnNlbGVjdEFsbCgiLiIrby5hcmNMYWJlbExpbmUpLmRhdGEobC5hcmNEYXRhLmJpbmQobCkpLGE9aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlKXtyZXR1cm4gby5hcmNMYWJlbExpbmUrIiAiK28udGFyZ2V0KyIgIitvLnRhcmdldCsiLSIrZS5kYXRhLmlkfSkubWVyZ2UoaSksMT09PWwuZmlsdGVyVGFyZ2V0c1RvU2hvdyhsLmRhdGEudGFyZ2V0cykubGVuZ3RoP2Euc3R5bGUoImRpc3BsYXkiLCJub25lIik6YS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGMuY29sb3JfcGF0dGVybi5sZW5ndGg+MD9sLmxldmVsQ29sb3IoZS5kYXRhLnZhbHVlc1swXS52YWx1ZSk6bC5jb2xvcihlLmRhdGEpfSkuc3R5bGUoImRpc3BsYXkiLGMuZ2F1Z2VfbGFiZWxMaW5lX3Nob3c/IiI6Im5vbmUiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PTAsbj0wLHI9MCxvPSIiO2lmKGwuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YoZS5kYXRhLmlkKTwwKXt2YXIgcz1sLnVwZGF0ZUFuZ2xlKGUpLGk9bC5nYXVnZUFyY1dpZHRoL2wuZmlsdGVyVGFyZ2V0c1RvU2hvdyhsLmRhdGEudGFyZ2V0cykubGVuZ3RoKihzLmluZGV4KzEpLGE9cy5lbmRBbmdsZS1NYXRoLlBJLzIsYz1sLnJhZGl1cy1pLGQ9YS0oMD09PWM/MDoxL2MpO3Q9bC5yYWRpdXNFeHBhbmRlZC1sLnJhZGl1cytpLG49TWF0aC5jb3MoZCkqYyxyPU1hdGguc2luKGQpKmMsbz0icm90YXRlKCIrMTgwKmEvTWF0aC5QSSsiLCAiK24rIiwgIityKyIpIn11LnNlbGVjdCh0aGlzKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyKS5hdHRyKCJ3aWR0aCIsdCkuYXR0cigiaGVpZ2h0IiwyKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgIisodCsyKSsiLCAwIil9KSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiFsLmlzR2F1Z2VUeXBlKGUuZGF0YSkmJm4/InNjYWxlKDApIjoiIn0pLm9uKCJtb3VzZW92ZXIiLGMuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihlKXt2YXIgdCxuO2wudHJhbnNpdGluZ3x8KHQ9bC51cGRhdGVBbmdsZShlKSkmJihuPWwuY29udmVydFRvQXJjRGF0YSh0KSxsLmV4cGFuZEFyYyh0LmRhdGEuaWQpLGwuYXBpLmZvY3VzKHQuZGF0YS5pZCksbC50b2dnbGVGb2N1c0xlZ2VuZCh0LmRhdGEuaWQsITApLGwuY29uZmlnLmRhdGFfb25tb3VzZW92ZXIobix0aGlzKSl9Om51bGwpLm9uKCJtb3VzZW1vdmUiLGMuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihlKXt2YXIgdCxuLHI9bC51cGRhdGVBbmdsZShlKTtyJiYodD1sLmNvbnZlcnRUb0FyY0RhdGEociksbj1bdF0sbC5zaG93VG9vbHRpcChuLHRoaXMpKX06bnVsbCkub24oIm1vdXNlb3V0IixjLmludGVyYWN0aW9uX2VuYWJsZWQ/ZnVuY3Rpb24oZSl7dmFyIHQsbjtsLnRyYW5zaXRpbmd8fCh0PWwudXBkYXRlQW5nbGUoZSkpJiYobj1sLmNvbnZlcnRUb0FyY0RhdGEodCksbC51bmV4cGFuZEFyYyh0LmRhdGEuaWQpLGwuYXBpLnJldmVydCgpLGwucmV2ZXJ0TGVnZW5kKCksbC5oaWRlVG9vbHRpcCgpLGwuY29uZmlnLmRhdGFfb25tb3VzZW91dChuLHRoaXMpKX06bnVsbCkub24oImNsaWNrIixjLmludGVyYWN0aW9uX2VuYWJsZWQ/ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWwudXBkYXRlQW5nbGUoZSk7ciYmKG49bC5jb252ZXJ0VG9BcmNEYXRhKHIpLGwudG9nZ2xlU2hhcGUmJmwudG9nZ2xlU2hhcGUodGhpcyxuLHQpLGwuY29uZmlnLmRhdGFfb25jbGljay5jYWxsKGwuYXBpLG4sdGhpcykpfTpudWxsKS5lYWNoKGZ1bmN0aW9uKCl7bC50cmFuc2l0aW5nPSEwfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24oZSl7dmFyIHQsbj1sLnVwZGF0ZUFuZ2xlKGUpO3JldHVybiBuPyhpc05hTih0aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGUpJiYodGhpcy5fY3VycmVudC5zdGFydEFuZ2xlPTApLGlzTmFOKHRoaXMuX2N1cnJlbnQuZW5kQW5nbGUpJiYodGhpcy5fY3VycmVudC5lbmRBbmdsZT10aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGUpLHQ9dS5pbnRlcnBvbGF0ZSh0aGlzLl9jdXJyZW50LG4pLHRoaXMuX2N1cnJlbnQ9dCgwKSxmdW5jdGlvbihuKXt2YXIgcj10KG4pO3JldHVybiByLmRhdGE9ZS5kYXRhLGwuZ2V0QXJjKHIsITApfSk6ZnVuY3Rpb24oKXtyZXR1cm4iTSAwIDAifX0pLmF0dHIoInRyYW5zZm9ybSIsbj8ic2NhbGUoMSkiOiIiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGwubGV2ZWxDb2xvcj9sLmxldmVsQ29sb3IoZS5kYXRhLnZhbHVlc1swXS52YWx1ZSk6bC5jb2xvcihlLmRhdGEuaWQpfSkuY2FsbChsLmVuZGFsbCxmdW5jdGlvbigpe2wudHJhbnNpdGluZz0hMX0pLHIuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksZC5zZWxlY3RBbGwoIi4iK28uY2hhcnRBcmMpLnNlbGVjdCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGwuaXNHYXVnZVR5cGUoZS5kYXRhKT9vLmdhdWdlVmFsdWU6IiJ9KS50ZXh0KGwudGV4dEZvckFyY0xhYmVsLmJpbmQobCkpLmF0dHIoInRyYW5zZm9ybSIsbC50cmFuc2Zvcm1Gb3JBcmNMYWJlbC5iaW5kKGwpKS5zdHlsZSgiZm9udC1zaXplIixmdW5jdGlvbihlKXtyZXR1cm4gbC5pc0dhdWdlVHlwZShlLmRhdGEpJiYxPT09bC5maWx0ZXJUYXJnZXRzVG9TaG93KGwuZGF0YS50YXJnZXRzKS5sZW5ndGg/TWF0aC5yb3VuZChsLnJhZGl1cy81KSsicHgiOiIifSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlKXtyZXR1cm4gbC5pc1RhcmdldFRvU2hvdyhlLmRhdGEuaWQpJiZsLmlzQXJjVHlwZShlLmRhdGEpPzE6MH0pLGQuc2VsZWN0KCIuIitvLmNoYXJ0QXJjc1RpdGxlKS5zdHlsZSgib3BhY2l0eSIsbC5oYXNUeXBlKCJkb251dCIpfHxfPzE6MCksXyl7dmFyIHA9MCxmPWwuYXJjcy5zZWxlY3QoImcuIitvLmNoYXJ0QXJjc0JhY2tncm91bmQpLnNlbGVjdEFsbCgicGF0aC4iK28uY2hhcnRBcmNzQmFja2dyb3VuZCkuZGF0YShsLmRhdGEudGFyZ2V0cyk7Zi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiBvLmNoYXJ0QXJjc0JhY2tncm91bmQrIiAiK28uY2hhcnRBcmNzQmFja2dyb3VuZCsiLSIrdH0pLm1lcmdlKGYpLmF0dHIoImQiLGZ1bmN0aW9uKGUpe2lmKGwuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YoZS5pZCk+PTApcmV0dXJuIk0gMCAwIjt2YXIgdD17ZGF0YTpbe3ZhbHVlOmMuZ2F1Z2VfbWF4fV0sc3RhcnRBbmdsZTpjLmdhdWdlX3N0YXJ0aW5nQW5nbGUsZW5kQW5nbGU6LTEqYy5nYXVnZV9zdGFydGluZ0FuZ2xlKihjLmdhdWdlX2Z1bGxDaXJjbGU/TWF0aC5QSToxKSxpbmRleDpwKyt9O3JldHVybiBsLmdldEFyYyh0LCEwLCEwKX0pLGYuZXhpdCgpLnJlbW92ZSgpLGwuYXJjcy5zZWxlY3QoIi4iK28uY2hhcnRBcmNzR2F1Z2VVbml0KS5hdHRyKCJkeSIsIi43NWVtIikudGV4dChjLmdhdWdlX2xhYmVsX3Nob3c/Yy5nYXVnZV91bml0czoiIiksbC5hcmNzLnNlbGVjdCgiLiIrby5jaGFydEFyY3NHYXVnZU1pbikuYXR0cigiZHgiLC0xKihsLmlubmVyUmFkaXVzKyhsLnJhZGl1cy1sLmlubmVyUmFkaXVzKS8oYy5nYXVnZV9mdWxsQ2lyY2xlPzE6MikpKyJweCIpLmF0dHIoImR5IiwiMS4yZW0iKS50ZXh0KGMuZ2F1Z2VfbGFiZWxfc2hvdz9sLnRleHRGb3JHYXVnZU1pbk1heChjLmdhdWdlX21pbiwhMSk6IiIpLGwuYXJjcy5zZWxlY3QoIi4iK28uY2hhcnRBcmNzR2F1Z2VNYXgpLmF0dHIoImR4IixsLmlubmVyUmFkaXVzKyhsLnJhZGl1cy1sLmlubmVyUmFkaXVzKS8oYy5nYXVnZV9mdWxsQ2lyY2xlPzE6MikrInB4IikuYXR0cigiZHkiLCIxLjJlbSIpLnRleHQoYy5nYXVnZV9sYWJlbF9zaG93P2wudGV4dEZvckdhdWdlTWluTWF4KGMuZ2F1Z2VfbWF4LCEwKToiIil9fSxlLnByb3RvdHlwZS5pbml0R2F1Z2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFyY3M7dGhpcy5oYXNUeXBlKCJnYXVnZSIpJiYoZS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5jaGFydEFyY3NCYWNrZ3JvdW5kKSxlLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixvLmNoYXJ0QXJjc0dhdWdlVW5pdCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLG8uY2hhcnRBcmNzR2F1Z2VNaW4pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxlLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixvLmNoYXJ0QXJjc0dhdWdlTWF4KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikpfSxlLnByb3RvdHlwZS5nZXRHYXVnZUxhYmVsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZmlnLmdhdWdlX2xhYmVsX3Nob3c/MjA6MH0sZS5wcm90b3R5cGUuaGFzQ2FjaGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCEoZVt0XWluIHRoaXMuY2FjaGUpKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5hZGRDYWNoZT1mdW5jdGlvbihlLHQpe3RoaXMuY2FjaGVbZV09dGhpcy5jbG9uZVRhcmdldCh0KX0sZS5wcm90b3R5cGUuZ2V0Q2FjaGVzPWZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdaW4gdGhpcy5jYWNoZSYmbi5wdXNoKHRoaXMuY2xvbmVUYXJnZXQodGhpcy5jYWNoZVtlW3RdXSkpO3JldHVybiBufSxlLnByb3RvdHlwZS5jYXRlZ29yeU5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25maWc7cmV0dXJuIGU8dC5heGlzX3hfY2F0ZWdvcmllcy5sZW5ndGg/dC5heGlzX3hfY2F0ZWdvcmllc1tlXTplfSxlLnByb3RvdHlwZS5nZW5lcmF0ZVRhcmdldENsYXNzPWZ1bmN0aW9uKGUpe3JldHVybiBlfHwwPT09ZT8oIi0iK2UpLnJlcGxhY2UoL1xzL2csIi0iKToiIn0sZS5wcm90b3R5cGUuZ2VuZXJhdGVDbGFzcz1mdW5jdGlvbihlLHQpe3JldHVybiIgIitlKyIgIitlK3RoaXMuZ2VuZXJhdGVUYXJnZXRDbGFzcyh0KX0sZS5wcm90b3R5cGUuY2xhc3NUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3Moby50ZXh0LGUuaW5kZXgpfSxlLnByb3RvdHlwZS5jbGFzc1RleHRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3Moby50ZXh0cyxlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NTaGFwZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUNsYXNzKG8uc2hhcGUsZS5pbmRleCl9LGUucHJvdG90eXBlLmNsYXNzU2hhcGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3Moby5zaGFwZXMsZS5pZCl9LGUucHJvdG90eXBlLmNsYXNzTGluZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlKGUpK3RoaXMuZ2VuZXJhdGVDbGFzcyhvLmxpbmUsZS5pZCl9LGUucHJvdG90eXBlLmNsYXNzTGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xhc3NTaGFwZXMoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKG8ubGluZXMsZS5pZCl9LGUucHJvdG90eXBlLmNsYXNzQ2lyY2xlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKG8uY2lyY2xlLGUuaW5kZXgpfSxlLnByb3RvdHlwZS5jbGFzc0NpcmNsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xhc3NTaGFwZXMoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKG8uY2lyY2xlcyxlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NCYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xhc3NTaGFwZShlKSt0aGlzLmdlbmVyYXRlQ2xhc3Moby5iYXIsZS5pbmRleCl9LGUucHJvdG90eXBlLmNsYXNzQmFycz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhlKSt0aGlzLmdlbmVyYXRlQ2xhc3Moby5iYXJzLGUuaWQpfSxlLnByb3RvdHlwZS5jbGFzc0FyYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlKGUuZGF0YSkrdGhpcy5nZW5lcmF0ZUNsYXNzKG8uYXJjLGUuZGF0YS5pZCl9LGUucHJvdG90eXBlLmNsYXNzQXJjcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhlLmRhdGEpK3RoaXMuZ2VuZXJhdGVDbGFzcyhvLmFyY3MsZS5kYXRhLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NBcmVhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKG8uYXJlYSxlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NBcmVhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhlKSt0aGlzLmdlbmVyYXRlQ2xhc3Moby5hcmVhcyxlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NSZWdpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUNsYXNzKG8ucmVnaW9uLHQpKyIgIisoImNsYXNzImluIGU/ZS5jbGFzczoiIil9LGUucHJvdG90eXBlLmNsYXNzRXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhvLmV2ZW50UmVjdCxlLmluZGV4KX0sZS5wcm90b3R5cGUuY2xhc3NUYXJnZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLmRhdGFfY2xhc3Nlc1tlXSxyPSIiO3JldHVybiBuJiYocj0iICIrby50YXJnZXQrIi0iK24pLHQuZ2VuZXJhdGVDbGFzcyhvLnRhcmdldCxlKStyfSxlLnByb3RvdHlwZS5jbGFzc0ZvY3VzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzRm9jdXNlZChlKSt0aGlzLmNsYXNzRGVmb2N1c2VkKGUpfSxlLnByb3RvdHlwZS5jbGFzc0ZvY3VzZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIiAiKyh0aGlzLmZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihlLmlkKT49MD9vLmZvY3VzZWQ6IiIpfSxlLnByb3RvdHlwZS5jbGFzc0RlZm9jdXNlZD1mdW5jdGlvbihlKXtyZXR1cm4iICIrKHRoaXMuZGVmb2N1c2VkVGFyZ2V0SWRzLmluZGV4T2YoZS5pZCk+PTA/by5kZWZvY3VzZWQ6IiIpfSxlLnByb3RvdHlwZS5jbGFzc0NoYXJ0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gby5jaGFydFRleHQrdGhpcy5jbGFzc1RhcmdldChlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NDaGFydExpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2hhcnRMaW5lK3RoaXMuY2xhc3NUYXJnZXQoZS5pZCl9LGUucHJvdG90eXBlLmNsYXNzQ2hhcnRCYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2hhcnRCYXIrdGhpcy5jbGFzc1RhcmdldChlLmlkKX0sZS5wcm90b3R5cGUuY2xhc3NDaGFydEFyYz1mdW5jdGlvbihlKXtyZXR1cm4gby5jaGFydEFyYyt0aGlzLmNsYXNzVGFyZ2V0KGUuZGF0YS5pZCl9LGUucHJvdG90eXBlLmdldFRhcmdldFNlbGVjdG9yU3VmZml4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlVGFyZ2V0Q2xhc3MoZSkucmVwbGFjZSgvKFs/IUAjJCVeJiooKV89KywuPD4nIjo7XFtcXVwvfH5ge31cXF0pL2csIlxcJDEiKX0sZS5wcm90b3R5cGUuc2VsZWN0b3JUYXJnZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odHx8IiIpKyIuIitvLnRhcmdldCt0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUpfSxlLnByb3RvdHlwZS5zZWxlY3RvclRhcmdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBlPWV8fFtdLGUubGVuZ3RoP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLnNlbGVjdG9yVGFyZ2V0KGUsdCl9KTpudWxsfSxlLnByb3RvdHlwZS5zZWxlY3RvckxlZ2VuZD1mdW5jdGlvbihlKXtyZXR1cm4iLiIrby5sZWdlbmRJdGVtK3RoaXMuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoZSl9LGUucHJvdG90eXBlLnNlbGVjdG9yTGVnZW5kcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlJiZlLmxlbmd0aD9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5zZWxlY3RvckxlZ2VuZChlKX0pOm51bGx9LGUucHJvdG90eXBlLmdldENsaXBQYXRoPWZ1bmN0aW9uKGUpe3JldHVybiJ1cmwoIisod2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXNpZSA5LiIpPj0wPyIiOmRvY3VtZW50LlVSTC5zcGxpdCgiIyIpWzBdKSsiIyIrZSsiKSJ9LGUucHJvdG90eXBlLmFwcGVuZENsaXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHQpLmFwcGVuZCgicmVjdCIpfSxlLnByb3RvdHlwZS5nZXRBeGlzQ2xpcFg9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5tYXgoMzAsdGhpcy5tYXJnaW4ubGVmdCk7cmV0dXJuIGU/LSgxK3QpOi0odC0xKX0sZS5wcm90b3R5cGUuZ2V0QXhpc0NsaXBZPWZ1bmN0aW9uKGUpe3JldHVybiBlPy0yMDotdGhpcy5tYXJnaW4udG9wfSxlLnByb3RvdHlwZS5nZXRYQXhpc0NsaXBYPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5nZXRBeGlzQ2xpcFgoIWUuY29uZmlnLmF4aXNfcm90YXRlZCl9LGUucHJvdG90eXBlLmdldFhBeGlzQ2xpcFk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLmdldEF4aXNDbGlwWSghZS5jb25maWcuYXhpc19yb3RhdGVkKX0sZS5wcm90b3R5cGUuZ2V0WUF4aXNDbGlwWD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuY29uZmlnLmF4aXNfeV9pbm5lcj8tMTplLmdldEF4aXNDbGlwWChlLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSxlLnByb3RvdHlwZS5nZXRZQXhpc0NsaXBZPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5nZXRBeGlzQ2xpcFkoZS5jb25maWcuYXhpc19yb3RhdGVkKX0sZS5wcm90b3R5cGUuZ2V0QXhpc0NsaXBXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49TWF0aC5tYXgoMzAsdC5tYXJnaW4ubGVmdCkscj1NYXRoLm1heCgzMCx0Lm1hcmdpbi5yaWdodCk7cmV0dXJuIGU/dC53aWR0aCsyK24rcjp0Lm1hcmdpbi5sZWZ0KzIwfSxlLnByb3RvdHlwZS5nZXRBeGlzQ2xpcEhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4oZT90aGlzLm1hcmdpbi5ib3R0b206dGhpcy5tYXJnaW4udG9wK3RoaXMuaGVpZ2h0KSsyMH0sZS5wcm90b3R5cGUuZ2V0WEF4aXNDbGlwV2lkdGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLmdldEF4aXNDbGlwV2lkdGgoIWUuY29uZmlnLmF4aXNfcm90YXRlZCl9LGUucHJvdG90eXBlLmdldFhBeGlzQ2xpcEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZ2V0QXhpc0NsaXBIZWlnaHQoIWUuY29uZmlnLmF4aXNfcm90YXRlZCl9LGUucHJvdG90eXBlLmdldFlBeGlzQ2xpcFdpZHRoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5nZXRBeGlzQ2xpcFdpZHRoKGUuY29uZmlnLmF4aXNfcm90YXRlZCkrKGUuY29uZmlnLmF4aXNfeV9pbm5lcj8yMDowKX0sZS5wcm90b3R5cGUuZ2V0WUF4aXNDbGlwSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5nZXRBeGlzQ2xpcEhlaWdodChlLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSxlLnByb3RvdHlwZS5nZW5lcmF0ZUNvbG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49ZS5kMyxyPXQuZGF0YV9jb2xvcnMsbz12KHQuY29sb3JfcGF0dGVybik/dC5jb2xvcl9wYXR0ZXJuOm4uc2NoZW1lQ2F0ZWdvcnkxMCxzPXQuZGF0YV9jb2xvcixpPVtdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuPWUuaWR8fGUuZGF0YSYmZS5kYXRhLmlkfHxlO3JldHVybiByW25daW5zdGFuY2VvZiBGdW5jdGlvbj90PXJbbl0oZSk6cltuXT90PXJbbl06KGkuaW5kZXhPZihuKTwwJiZpLnB1c2gobiksdD1vW2kuaW5kZXhPZihuKSVvLmxlbmd0aF0scltuXT10KSxzIGluc3RhbmNlb2YgRnVuY3Rpb24/cyh0LGUpOnR9fSxlLnByb3RvdHlwZS5nZW5lcmF0ZUxldmVsQ29sb3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj10LmNvbG9yX3BhdHRlcm4scj10LmNvbG9yX3RocmVzaG9sZCxvPSJ2YWx1ZSI9PT1yLnVuaXQscz1yLnZhbHVlcyYmci52YWx1ZXMubGVuZ3RoP3IudmFsdWVzOltdLGk9ci5tYXh8fDEwMDtyZXR1cm4gdih0LmNvbG9yX3RocmVzaG9sZCk/ZnVuY3Rpb24oZSl7dmFyIHQscj1uW24ubGVuZ3RoLTFdO2Zvcih0PTA7dDxzLmxlbmd0aDt0KyspaWYoKG8/ZToxMDAqZS9pKTxzW3RdKXtyPW5bdF07YnJlYWt9cmV0dXJuIHJ9Om51bGx9LGUucHJvdG90eXBlLmdldERlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZT17YmluZHRvOiIjY2hhcnQiLHN2Z19jbGFzc25hbWU6dm9pZCAwLHNpemVfd2lkdGg6dm9pZCAwLHNpemVfaGVpZ2h0OnZvaWQgMCxwYWRkaW5nX2xlZnQ6dm9pZCAwLHBhZGRpbmdfcmlnaHQ6dm9pZCAwLHBhZGRpbmdfdG9wOnZvaWQgMCxwYWRkaW5nX2JvdHRvbTp2b2lkIDAscmVzaXplX2F1dG86ITAsem9vbV9lbmFibGVkOiExLHpvb21faW5pdGlhbFJhbmdlOnZvaWQgMCx6b29tX3R5cGU6InNjcm9sbCIsem9vbV9kaXNhYmxlRGVmYXVsdEJlaGF2aW9yOiExLHpvb21fcHJpdmlsZWdlZDohMSx6b29tX3Jlc2NhbGU6ITEsem9vbV9vbnpvb206ZnVuY3Rpb24oKXt9LHpvb21fb256b29tc3RhcnQ6ZnVuY3Rpb24oKXt9LHpvb21fb256b29tZW5kOmZ1bmN0aW9uKCl7fSx6b29tX3hfbWluOnZvaWQgMCx6b29tX3hfbWF4OnZvaWQgMCxpbnRlcmFjdGlvbl9icmlnaHRlbjohMCxpbnRlcmFjdGlvbl9lbmFibGVkOiEwLG9ubW91c2VvdmVyOmZ1bmN0aW9uKCl7fSxvbm1vdXNlb3V0OmZ1bmN0aW9uKCl7fSxvbnJlc2l6ZTpmdW5jdGlvbigpe30sb25yZXNpemVkOmZ1bmN0aW9uKCl7fSxvbmluaXQ6ZnVuY3Rpb24oKXt9LG9ucmVuZGVyZWQ6ZnVuY3Rpb24oKXt9LHRyYW5zaXRpb25fZHVyYXRpb246MzUwLGRhdGFfeDp2b2lkIDAsZGF0YV94czp7fSxkYXRhX3hGb3JtYXQ6IiVZLSVtLSVkIixkYXRhX3hMb2NhbHRpbWU6ITAsZGF0YV94U29ydDohMCxkYXRhX2lkQ29udmVydGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkYXRhX25hbWVzOnt9LGRhdGFfY2xhc3Nlczp7fSxkYXRhX2dyb3VwczpbXSxkYXRhX2F4ZXM6e30sZGF0YV90eXBlOnZvaWQgMCxkYXRhX3R5cGVzOnt9LGRhdGFfbGFiZWxzOnt9LGRhdGFfb3JkZXI6ImRlc2MiLGRhdGFfcmVnaW9uczp7fSxkYXRhX2NvbG9yOnZvaWQgMCxkYXRhX2NvbG9yczp7fSxkYXRhX2hpZGU6ITEsZGF0YV9maWx0ZXI6dm9pZCAwLGRhdGFfc2VsZWN0aW9uX2VuYWJsZWQ6ITEsZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZDohMSxkYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGU6ITAsZGF0YV9zZWxlY3Rpb25fZHJhZ2dhYmxlOiExLGRhdGFfb25jbGljazpmdW5jdGlvbigpe30sZGF0YV9vbm1vdXNlb3ZlcjpmdW5jdGlvbigpe30sZGF0YV9vbm1vdXNlb3V0OmZ1bmN0aW9uKCl7fSxkYXRhX29uc2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9LGRhdGFfb251bnNlbGVjdGVkOmZ1bmN0aW9uKCl7fSxkYXRhX3VybDp2b2lkIDAsZGF0YV9oZWFkZXJzOnZvaWQgMCxkYXRhX2pzb246dm9pZCAwLGRhdGFfcm93czp2b2lkIDAsZGF0YV9jb2x1bW5zOnZvaWQgMCxkYXRhX21pbWVUeXBlOnZvaWQgMCxkYXRhX2tleXM6dm9pZCAwLGRhdGFfZW1wdHlfbGFiZWxfdGV4dDoiIixzdWJjaGFydF9zaG93OiExLHN1YmNoYXJ0X3NpemVfaGVpZ2h0OjYwLHN1YmNoYXJ0X2F4aXNfeF9zaG93OiEwLHN1YmNoYXJ0X29uYnJ1c2g6ZnVuY3Rpb24oKXt9LGNvbG9yX3BhdHRlcm46W10sY29sb3JfdGhyZXNob2xkOnt9LGxlZ2VuZF9zaG93OiEwLGxlZ2VuZF9oaWRlOiExLGxlZ2VuZF9wb3NpdGlvbjoiYm90dG9tIixsZWdlbmRfaW5zZXRfYW5jaG9yOiJ0b3AtbGVmdCIsbGVnZW5kX2luc2V0X3g6MTAsbGVnZW5kX2luc2V0X3k6MCxsZWdlbmRfaW5zZXRfc3RlcDp2b2lkIDAsbGVnZW5kX2l0ZW1fb25jbGljazp2b2lkIDAsbGVnZW5kX2l0ZW1fb25tb3VzZW92ZXI6dm9pZCAwLGxlZ2VuZF9pdGVtX29ubW91c2VvdXQ6dm9pZCAwLGxlZ2VuZF9lcXVhbGx5OiExLGxlZ2VuZF9wYWRkaW5nOjAsbGVnZW5kX2l0ZW1fdGlsZV93aWR0aDoxMCxsZWdlbmRfaXRlbV90aWxlX2hlaWdodDoxMCxheGlzX3JvdGF0ZWQ6ITEsYXhpc194X3Nob3c6ITAsYXhpc194X3R5cGU6ImluZGV4ZWQiLGF4aXNfeF9sb2NhbHRpbWU6ITAsYXhpc194X2NhdGVnb3JpZXM6W10sYXhpc194X3RpY2tfY2VudGVyZWQ6ITEsYXhpc194X3RpY2tfZm9ybWF0OnZvaWQgMCxheGlzX3hfdGlja19jdWxsaW5nOnt9LGF4aXNfeF90aWNrX2N1bGxpbmdfbWF4OjEwLGF4aXNfeF90aWNrX2NvdW50OnZvaWQgMCxheGlzX3hfdGlja19maXQ6ITAsYXhpc194X3RpY2tfdmFsdWVzOm51bGwsYXhpc194X3RpY2tfcm90YXRlOjAsYXhpc194X3RpY2tfb3V0ZXI6ITAsYXhpc194X3RpY2tfbXVsdGlsaW5lOiEwLGF4aXNfeF90aWNrX211bHRpbGluZU1heDowLGF4aXNfeF90aWNrX3dpZHRoOm51bGwsYXhpc194X21heDp2b2lkIDAsYXhpc194X21pbjp2b2lkIDAsYXhpc194X3BhZGRpbmc6e30sYXhpc194X2hlaWdodDp2b2lkIDAsYXhpc194X3NlbGVjdGlvbjp2b2lkIDAsYXhpc194X2xhYmVsOnt9LGF4aXNfeF9pbm5lcjp2b2lkIDAsYXhpc195X3Nob3c6ITAsYXhpc195X3R5cGU6dm9pZCAwLGF4aXNfeV9tYXg6dm9pZCAwLGF4aXNfeV9taW46dm9pZCAwLGF4aXNfeV9pbnZlcnRlZDohMSxheGlzX3lfY2VudGVyOnZvaWQgMCxheGlzX3lfaW5uZXI6dm9pZCAwLGF4aXNfeV9sYWJlbDp7fSxheGlzX3lfdGlja19mb3JtYXQ6dm9pZCAwLGF4aXNfeV90aWNrX291dGVyOiEwLGF4aXNfeV90aWNrX3ZhbHVlczpudWxsLGF4aXNfeV90aWNrX3JvdGF0ZTowLGF4aXNfeV90aWNrX2NvdW50OnZvaWQgMCxheGlzX3lfdGlja190aW1lX3R5cGU6dm9pZCAwLGF4aXNfeV90aWNrX3RpbWVfaW50ZXJ2YWw6dm9pZCAwLGF4aXNfeV9wYWRkaW5nOnt9LGF4aXNfeV9kZWZhdWx0OnZvaWQgMCxheGlzX3kyX3Nob3c6ITEsYXhpc195Ml9tYXg6dm9pZCAwLGF4aXNfeTJfbWluOnZvaWQgMCxheGlzX3kyX2ludmVydGVkOiExLGF4aXNfeTJfY2VudGVyOnZvaWQgMCxheGlzX3kyX2lubmVyOnZvaWQgMCxheGlzX3kyX2xhYmVsOnt9LGF4aXNfeTJfdGlja19mb3JtYXQ6dm9pZCAwLGF4aXNfeTJfdGlja19vdXRlcjohMCxheGlzX3kyX3RpY2tfdmFsdWVzOm51bGwsYXhpc195Ml90aWNrX2NvdW50OnZvaWQgMCxheGlzX3kyX3BhZGRpbmc6e30sYXhpc195Ml9kZWZhdWx0OnZvaWQgMCxncmlkX3hfc2hvdzohMSxncmlkX3hfdHlwZToidGljayIsZ3JpZF94X2xpbmVzOltdLGdyaWRfeV9zaG93OiExLGdyaWRfeV9saW5lczpbXSxncmlkX3lfdGlja3M6MTAsZ3JpZF9mb2N1c19zaG93OiEwLGdyaWRfbGluZXNfZnJvbnQ6ITAscG9pbnRfc2hvdzohMCxwb2ludF9yOjIuNSxwb2ludF9zZW5zaXRpdml0eToxMCxwb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZDohMCxwb2ludF9mb2N1c19leHBhbmRfcjp2b2lkIDAscG9pbnRfc2VsZWN0X3I6dm9pZCAwLGxpbmVfY29ubmVjdE51bGw6ITEsbGluZV9zdGVwX3R5cGU6InN0ZXAiLGJhcl93aWR0aDp2b2lkIDAsYmFyX3dpZHRoX3JhdGlvOi42LGJhcl93aWR0aF9tYXg6dm9pZCAwLGJhcl96ZXJvYmFzZWQ6ITAsYmFyX3NwYWNlOjAsYXJlYV96ZXJvYmFzZWQ6ITAsYXJlYV9hYm92ZTohMSxwaWVfbGFiZWxfc2hvdzohMCxwaWVfbGFiZWxfZm9ybWF0OnZvaWQgMCxwaWVfbGFiZWxfdGhyZXNob2xkOi4wNSxwaWVfbGFiZWxfcmF0aW86dm9pZCAwLHBpZV9leHBhbmQ6e30scGllX2V4cGFuZF9kdXJhdGlvbjo1MCxnYXVnZV9mdWxsQ2lyY2xlOiExLGdhdWdlX2xhYmVsX3Nob3c6ITAsZ2F1Z2VfbGFiZWxMaW5lX3Nob3c6ITAsZ2F1Z2VfbGFiZWxfZm9ybWF0OnZvaWQgMCxnYXVnZV9taW46MCxnYXVnZV9tYXg6MTAwLGdhdWdlX3N0YXJ0aW5nQW5nbGU6LTEqTWF0aC5QSS8yLGdhdWdlX2xhYmVsX2V4dGVudHM6dm9pZCAwLGdhdWdlX3VuaXRzOnZvaWQgMCxnYXVnZV93aWR0aDp2b2lkIDAsZ2F1Z2VfYXJjc19taW5XaWR0aDo1LGdhdWdlX2V4cGFuZDp7fSxnYXVnZV9leHBhbmRfZHVyYXRpb246NTAsZG9udXRfbGFiZWxfc2hvdzohMCxkb251dF9sYWJlbF9mb3JtYXQ6dm9pZCAwLGRvbnV0X2xhYmVsX3RocmVzaG9sZDouMDUsZG9udXRfbGFiZWxfcmF0aW86dm9pZCAwLGRvbnV0X3dpZHRoOnZvaWQgMCxkb251dF90aXRsZToiIixkb251dF9leHBhbmQ6e30sZG9udXRfZXhwYW5kX2R1cmF0aW9uOjUwLHNwbGluZV9pbnRlcnBvbGF0aW9uX3R5cGU6ImNhcmRpbmFsIixyZWdpb25zOltdLHRvb2x0aXBfc2hvdzohMCx0b29sdGlwX2dyb3VwZWQ6ITAsdG9vbHRpcF9vcmRlcjp2b2lkIDAsdG9vbHRpcF9mb3JtYXRfdGl0bGU6dm9pZCAwLHRvb2x0aXBfZm9ybWF0X25hbWU6dm9pZCAwLHRvb2x0aXBfZm9ybWF0X3ZhbHVlOnZvaWQgMCx0b29sdGlwX3Bvc2l0aW9uOnZvaWQgMCx0b29sdGlwX2NvbnRlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmdldFRvb2x0aXBDb250ZW50P3RoaXMuZ2V0VG9vbHRpcENvbnRlbnQoZSx0LG4scik6IiJ9LHRvb2x0aXBfaW5pdF9zaG93OiExLHRvb2x0aXBfaW5pdF94OjAsdG9vbHRpcF9pbml0X3Bvc2l0aW9uOnt0b3A6IjBweCIsbGVmdDoiNTBweCJ9LHRvb2x0aXBfb25zaG93OmZ1bmN0aW9uKCl7fSx0b29sdGlwX29uaGlkZTpmdW5jdGlvbigpe30sdGl0bGVfdGV4dDp2b2lkIDAsdGl0bGVfcGFkZGluZzp7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHRpdGxlX3Bvc2l0aW9uOiJ0b3AtY2VudGVyIn07cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWRkaXRpb25hbENvbmZpZykuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXRoaXMuYWRkaXRpb25hbENvbmZpZ1t0XX0sdGhpcyksZX0sZS5wcm90b3R5cGUuYWRkaXRpb25hbENvbmZpZz17fSxlLnByb3RvdHlwZS5sb2FkQ29uZmlnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZT1yLnNoaWZ0KCk7cmV0dXJuIGUmJm4mJiJvYmplY3QiPT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6cyhuKSkmJmUgaW4gbj8obj1uW2VdLHQoKSk6ZT92b2lkIDA6bn12YXIgbixyLG8saT10aGlzLmNvbmZpZztPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe249ZSxyPXMuc3BsaXQoIl8iKSxvPXQoKSxtKG8pJiYoaVtzXT1vKX0pfSxlLnByb3RvdHlwZS5jb252ZXJ0VXJsVG9EYXRhPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHMsaSxhPXRoaXMsbD10fHwiY3N2IjsianNvbiI9PT1sPyhzPWEuZDMuanNvbixpPWEuY29udmVydEpzb25Ub0RhdGEpOiJ0c3YiPT09bD8ocz1hLmQzLnRzdixpPWEuY29udmVydFhzdlRvRGF0YSk6KHM9YS5kMy5jc3YsaT1hLmNvbnZlcnRYc3ZUb0RhdGEpLHMoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe28uY2FsbChhLGkuY2FsbChhLGUscikpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dGhyb3cgZX0pfSxlLnByb3RvdHlwZS5jb252ZXJ0WHN2VG9EYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sdW1ucztyZXR1cm4gMD09PWUubGVuZ3RoP3trZXlzOnQscm93czpbdC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLGEoe30sdCxudWxsKSl9LHt9KV19OntrZXlzOnQscm93czpbXS5jb25jYXQoZSl9fSxlLnByb3RvdHlwZS5jb252ZXJ0SnNvblRvRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz10aGlzLHM9W107cmV0dXJuIHQ/KHQueD8obj10LnZhbHVlLmNvbmNhdCh0LngpLG8uY29uZmlnLmRhdGFfeD10LngpOm49dC52YWx1ZSxzLnB1c2gobiksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1vLmZpbmRWYWx1ZUluSnNvbihlLG4pO0UocikmJihyPW51bGwpLHQucHVzaChyKX0pLHMucHVzaCh0KX0pLHI9by5jb252ZXJ0Um93c1RvRGF0YShzKSk6KE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cy5wdXNoKFt0XS5jb25jYXQoZVt0XSkpfSkscj1vLmNvbnZlcnRDb2x1bW5zVG9EYXRhKHMpKSxyfSxlLnByb3RvdHlwZS5maW5kVmFsdWVJbkpzb249ZnVuY3Rpb24oZSx0KXt0PXQucmVwbGFjZSgvXFsoXHcrKVxdL2csIi4kMSIpLHQ9dC5yZXBsYWNlKC9eXC4vLCIiKTtmb3IodmFyIG49dC5zcGxpdCgiLiIpLHI9MDtyPG4ubGVuZ3RoOysrcil7dmFyIG89bltyXTtpZighKG8gaW4gZSkpcmV0dXJuO2U9ZVtvXX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuY29udmVydFJvd3NUb0RhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49ZVswXSxyPTE7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbz17fSxzPTA7czxlW3JdLmxlbmd0aDtzKyspe2lmKEUoZVtyXVtzXSkpdGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgZGF0YSBpcyBtaXNzaW5nIGEgY29tcG9uZW50IGF0ICgiK3IrIiwiK3MrIikhIik7b1tuW3NdXT1lW3JdW3NdfXQucHVzaChvKX1yZXR1cm57a2V5czpuLHJvd3M6dH19LGUucHJvdG90eXBlLmNvbnZlcnRDb2x1bW5zVG9EYXRhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBvPWVbcl1bMF0scz0xO3M8ZVtyXS5sZW5ndGg7cysrKXtpZihFKHRbcy0xXSkmJih0W3MtMV09e30pLEUoZVtyXVtzXSkpdGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgZGF0YSBpcyBtaXNzaW5nIGEgY29tcG9uZW50IGF0ICgiK3IrIiwiK3MrIikhIik7dFtzLTFdW29dPWVbcl1bc119bi5wdXNoKG8pfXJldHVybntrZXlzOm4scm93czp0fX0sZS5wcm90b3R5cGUuY29udmVydERhdGFUb1RhcmdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scyxpPXRoaXMsYT1pLmNvbmZpZztyZXR1cm4gZihlKT9zPU9iamVjdC5rZXlzKGVbMF0pOihzPWUua2V5cyxlPWUucm93cykscj1zLmZpbHRlcihpLmlzTm90WCxpKSxvPXMuZmlsdGVyKGkuaXNYLGkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1pLmdldFhLZXkobik7aS5pc0N1c3RvbVgoKXx8aS5pc1RpbWVTZXJpZXMoKT9vLmluZGV4T2Yocik+PTA/aS5kYXRhLnhzW25dPSh0JiZpLmRhdGEueHNbbl0/aS5kYXRhLnhzW25dOltdKS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbcl19KS5maWx0ZXIoeSkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuZ2VuZXJhdGVUYXJnZXRYKGUsbix0KX0pKTphLmRhdGFfeD9pLmRhdGEueHNbbl09aS5nZXRPdGhlclRhcmdldFhzKCk6dihhLmRhdGFfeHMpJiYoaS5kYXRhLnhzW25dPWkuZ2V0WFZhbHVlc09mWEtleShyLGkuZGF0YS50YXJnZXRzKSk6aS5kYXRhLnhzW25dPWUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KX0pLHIuZm9yRWFjaChmdW5jdGlvbihlKXtpZighaS5kYXRhLnhzW2VdKXRocm93IG5ldyBFcnJvcigneCBpcyBub3QgZGVmaW5lZCBmb3IgaWQgPSAiJytlKyciLicpfSksbj1yLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPWEuZGF0YV9pZENvbnZlcnRlcih0KTtyZXR1cm57aWQ6cixpZF9vcmc6dCx2YWx1ZXM6ZS5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgcyxsPWkuZ2V0WEtleSh0KSx1PWVbbF0sYz1udWxsPT09ZVt0XXx8aXNOYU4oZVt0XSk/bnVsbDorZVt0XTtyZXR1cm4gaS5pc0N1c3RvbVgoKSYmaS5pc0NhdGVnb3JpemVkKCkmJiFFKHUpPygwPT09biYmMD09PW8mJihhLmF4aXNfeF9jYXRlZ29yaWVzPVtdKSwtMT09PShzPWEuYXhpc194X2NhdGVnb3JpZXMuaW5kZXhPZih1KSkmJihzPWEuYXhpc194X2NhdGVnb3JpZXMubGVuZ3RoLGEuYXhpc194X2NhdGVnb3JpZXMucHVzaCh1KSkpOnM9aS5nZW5lcmF0ZVRhcmdldFgodSx0LG8pLChFKGVbdF0pfHxpLmRhdGEueHNbdF0ubGVuZ3RoPD1vKSYmKHM9dm9pZCAwKSx7eDpzLHZhbHVlOmMsaWQ6cn19KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG0oZS54KX0pfX0pLG4uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdDthLmRhdGFfeFNvcnQmJihlLnZhbHVlcz1lLnZhbHVlcy5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUueHx8MD09PWUueD9lLng6MS8wKS0odC54fHwwPT09dC54P3QueDoxLzApfSkpLHQ9MCxlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaW5kZXg9dCsrfSksaS5kYXRhLnhzW2UuaWRdLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSl9KSxpLmhhc05lZ2F0aXZlVmFsdWU9aS5oYXNOZWdhdGl2ZVZhbHVlSW5UYXJnZXRzKG4pLGkuaGFzUG9zaXRpdmVWYWx1ZT1pLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHMobiksYS5kYXRhX3R5cGUmJmkuc2V0VGFyZ2V0VHlwZShpLm1hcFRvSWRzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW4gYS5kYXRhX3R5cGVzKX0pLGEuZGF0YV90eXBlKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7aS5hZGRDYWNoZShlLmlkX29yZyxlKX0pLG59LGUucHJvdG90eXBlLmlzWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7cmV0dXJuIG4uZGF0YV94JiZlPT09bi5kYXRhX3h8fHYobi5kYXRhX3hzKSYmcChuLmRhdGFfeHMsZSl9LGUucHJvdG90eXBlLmlzTm90WD1mdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5pc1goZSl9LGUucHJvdG90eXBlLmdldFhLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBuLmRhdGFfeD9uLmRhdGFfeDp2KG4uZGF0YV94cyk/bi5kYXRhX3hzW2VdOm51bGx9LGUucHJvdG90eXBlLmdldFhWYWx1ZXNPZlhLZXk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXM7cmV0dXJuKHQmJnYodCk/ci5tYXBUb0lkcyh0KTpbXSkuZm9yRWFjaChmdW5jdGlvbih0KXtyLmdldFhLZXkodCk9PT1lJiYobj1yLmRhdGEueHNbdF0pfSksbn0sZS5wcm90b3R5cGUuZ2V0WFZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gZSBpbiBuLmRhdGEueHMmJm4uZGF0YS54c1tlXSYmeShuLmRhdGEueHNbZV1bdF0pP24uZGF0YS54c1tlXVt0XTp0fSxlLnByb3RvdHlwZS5nZXRPdGhlclRhcmdldFhzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PU9iamVjdC5rZXlzKGUuZGF0YS54cyk7cmV0dXJuIHQubGVuZ3RoP2UuZGF0YS54c1t0WzBdXTpudWxsfSxlLnByb3RvdHlwZS5nZXRPdGhlclRhcmdldFg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRPdGhlclRhcmdldFhzKCk7cmV0dXJuIHQmJmU8dC5sZW5ndGg/dFtlXTpudWxsfSxlLnByb3RvdHlwZS5hZGRYcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7dC5jb25maWcuZGF0YV94c1tuXT1lW25dfSl9LGUucHJvdG90eXBlLmFkZE5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO3JldHVybiBlJiYodD1uLmNvbmZpZy5kYXRhX25hbWVzW2UuaWRdLGUubmFtZT12b2lkIDAhPT10P3Q6ZS5pZCksZX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVPbkluZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZXg9PT10fSk7cmV0dXJuIG4ubGVuZ3RoP25bMF06bnVsbH0sZS5wcm90b3R5cGUudXBkYXRlVGFyZ2V0WD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudmFsdWVzLmZvckVhY2goZnVuY3Rpb24ocixvKXtyLng9bi5nZW5lcmF0ZVRhcmdldFgodFtvXSxlLmlkLG8pfSksbi5kYXRhLnhzW2UuaWRdPXR9KX0sZS5wcm90b3R5cGUudXBkYXRlVGFyZ2V0WHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UuaWRdJiZuLnVwZGF0ZVRhcmdldFgoW2VdLHRbZS5pZF0pfSl9LGUucHJvdG90eXBlLmdlbmVyYXRlVGFyZ2V0WD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztyZXR1cm4gci5pc1RpbWVTZXJpZXMoKT9lP3IucGFyc2VEYXRlKGUpOnIucGFyc2VEYXRlKHIuZ2V0WFZhbHVlKHQsbikpOnIuaXNDdXN0b21YKCkmJiFyLmlzQ2F0ZWdvcml6ZWQoKT95KGUpPytlOnIuZ2V0WFZhbHVlKHQsbik6bn0sZS5wcm90b3R5cGUuY2xvbmVUYXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUuaWQsaWRfb3JnOmUuaWRfb3JnLHZhbHVlczplLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHZhbHVlOmUudmFsdWUsaWQ6ZS5pZH19KX19LGUucHJvdG90eXBlLmdldE1heERhdGFDb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZDMubWF4KGUuZGF0YS50YXJnZXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KX0sZS5wcm90b3R5cGUubWFwVG9JZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSl9LGUucHJvdG90eXBlLm1hcFRvVGFyZ2V0SWRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/W10uY29uY2F0KGUpOnQubWFwVG9JZHModC5kYXRhLnRhcmdldHMpfSxlLnByb3RvdHlwZS5oYXNUYXJnZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubWFwVG9JZHMoZSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNUYXJnZXRUb1Nob3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YoZSk8MH0sZS5wcm90b3R5cGUuaXNMZWdlbmRUb1Nob3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGlkZGVuTGVnZW5kSWRzLmluZGV4T2YoZSk8MH0sZS5wcm90b3R5cGUuZmlsdGVyVGFyZ2V0c1RvU2hvdz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5pc1RhcmdldFRvU2hvdyhlLmlkKX0pfSxlLnByb3RvdHlwZS5tYXBUYXJnZXRzVG9VbmlxdWVYcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5kMy5zZXQodC5kMy5tZXJnZShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybitlLnh9KX0pKSkudmFsdWVzKCk7cmV0dXJuIG49dC5pc1RpbWVTZXJpZXMoKT9uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERhdGUoK2UpfSk6bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuK2V9KSxuLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59KX0sZS5wcm90b3R5cGUuYWRkSGlkZGVuVGFyZ2V0SWRzPWZ1bmN0aW9uKGUpe2U9ZSBpbnN0YW5jZW9mIEFycmF5P2U6bmV3IEFycmF5KGUpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YoZVt0XSk8MCYmKHRoaXMuaGlkZGVuVGFyZ2V0SWRzPXRoaXMuaGlkZGVuVGFyZ2V0SWRzLmNvbmNhdChlW3RdKSl9LGUucHJvdG90eXBlLnJlbW92ZUhpZGRlblRhcmdldElkcz1mdW5jdGlvbihlKXt0aGlzLmhpZGRlblRhcmdldElkcz10aGlzLmhpZGRlblRhcmdldElkcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5kZXhPZih0KTwwfSl9LGUucHJvdG90eXBlLmFkZEhpZGRlbkxlZ2VuZElkcz1mdW5jdGlvbihlKXtlPWUgaW5zdGFuY2VvZiBBcnJheT9lOm5ldyBBcnJheShlKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLmhpZGRlbkxlZ2VuZElkcy5pbmRleE9mKGVbdF0pPDAmJih0aGlzLmhpZGRlbkxlZ2VuZElkcz10aGlzLmhpZGRlbkxlZ2VuZElkcy5jb25jYXQoZVt0XSkpfSxlLnByb3RvdHlwZS5yZW1vdmVIaWRkZW5MZWdlbmRJZHM9ZnVuY3Rpb24oZSl7dGhpcy5oaWRkZW5MZWdlbmRJZHM9dGhpcy5oaWRkZW5MZWdlbmRJZHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluZGV4T2YodCk8MH0pfSxlLnByb3RvdHlwZS5nZXRWYWx1ZXNBc0lkS2V5ZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UuaWRdPVtdLGUudmFsdWVzLmZvckVhY2goZnVuY3Rpb24obil7dFtlLmlkXS5wdXNoKG4udmFsdWUpfSl9KSx0fSxlLnByb3RvdHlwZS5jaGVja1ZhbHVlSW5UYXJnZXRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHM9T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPHMubGVuZ3RoO24rKylmb3Iobz1lW3Nbbl1dLnZhbHVlcyxyPTA7cjxvLmxlbmd0aDtyKyspaWYodChvW3JdLnZhbHVlKSlyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzTmVnYXRpdmVWYWx1ZUluVGFyZ2V0cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVja1ZhbHVlSW5UYXJnZXRzKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGU8MH0pfSxlLnByb3RvdHlwZS5oYXNQb3NpdGl2ZVZhbHVlSW5UYXJnZXRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrVmFsdWVJblRhcmdldHMoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSl9LGUucHJvdG90eXBlLmlzT3JkZXJEZXNjPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25maWc7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLmRhdGFfb3JkZXImJiJkZXNjIj09PWUuZGF0YV9vcmRlci50b0xvd2VyQ2FzZSgpfSxlLnByb3RvdHlwZS5pc09yZGVyQXNjPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25maWc7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLmRhdGFfb3JkZXImJiJhc2MiPT09ZS5kYXRhX29yZGVyLnRvTG93ZXJDYXNlKCl9LGUucHJvdG90eXBlLmdldE9yZGVyRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmlzT3JkZXJBc2MoKSxyPWUuaXNPcmRlckRlc2MoKTtpZihufHxyKXt2YXIgbz1mdW5jdGlvbihlLHQpe3JldHVybiBlK01hdGguYWJzKHQudmFsdWUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlcy5yZWR1Y2UobywwKSxzPXQudmFsdWVzLnJlZHVjZShvLDApO3JldHVybiBuP3MtcjpyLXN9fWlmKGcodC5kYXRhX29yZGVyKSlyZXR1cm4gdC5kYXRhX29yZGVyO2lmKGYodC5kYXRhX29yZGVyKSl7dmFyIHM9dC5kYXRhX29yZGVyO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBzLmluZGV4T2YoZS5pZCktcy5pbmRleE9mKHQuaWQpfX19LGUucHJvdG90eXBlLm9yZGVyVGFyZ2V0cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE9yZGVyRnVuY3Rpb24oKTtyZXR1cm4gdCYmZS5zb3J0KHQpLGV9LGUucHJvdG90eXBlLmZpbHRlckJ5WD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmQzLm1lcmdlKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUueC10PT0wfSl9LGUucHJvdG90eXBlLmZpbHRlclJlbW92ZU51bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB5KGUudmFsdWUpfSl9LGUucHJvdG90eXBlLmZpbHRlckJ5WERvbWFpbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57aWQ6ZS5pZCxpZF9vcmc6ZS5pZF9vcmcsdmFsdWVzOmUudmFsdWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdFswXTw9ZS54JiZlLng8PXRbMV19KX19KX0sZS5wcm90b3R5cGUuaGFzRGF0YUxhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25maWc7cmV0dXJuISgiYm9vbGVhbiIhPXR5cGVvZiBlLmRhdGFfbGFiZWxzfHwhZS5kYXRhX2xhYmVscyl8fCEoIm9iamVjdCIhPT1zKGUuZGF0YV9sYWJlbHMpfHwhdihlLmRhdGFfbGFiZWxzKSl9LGUucHJvdG90eXBlLmdldERhdGFMYWJlbExlbmd0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPVswLDBdO3JldHVybiByLnNlbGVjdENoYXJ0LnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCIuZHVtbXkiKS5kYXRhKFtlLHRdKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGF0YUxhYmVsRm9ybWF0KGUuaWQpKGUpfSkuZWFjaChmdW5jdGlvbihlLHQpe29bdF09MS4zKnRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbbl19KS5yZW1vdmUoKSxvfSxlLnByb3RvdHlwZS5pc05vbmVBcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzVGFyZ2V0KHRoaXMuZGF0YS50YXJnZXRzLGUuaWQpfSxlLnByb3RvdHlwZS5pc0FyYz1mdW5jdGlvbihlKXtyZXR1cm4iZGF0YSJpbiBlJiZ0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cyxlLmRhdGEuaWQpfSxlLnByb3RvdHlwZS5maW5kQ2xvc2VzdEZyb21UYXJnZXRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzO3JldHVybiBuPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiByLmZpbmRDbG9zZXN0KGUudmFsdWVzLHQpfSksci5maW5kQ2xvc2VzdChuLHQpfSxlLnByb3RvdHlwZS5maW5kQ2xvc2VzdD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcyxzPXIuY29uZmlnLnBvaW50X3NlbnNpdGl2aXR5O3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmci5pc0JhclR5cGUoZS5pZCl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXIubWFpbi5zZWxlY3QoIi4iK28uYmFycytyLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUuaWQpKyIgLiIrby5iYXIrIi0iK2UuaW5kZXgpLm5vZGUoKTshbiYmci5pc1dpdGhpbkJhcihyLmQzLm1vdXNlKHQpLHQpJiYobj1lKX0pLGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYhci5pc0JhclR5cGUoZS5pZCl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPXIuZGlzdChlLHQpO288cyYmKHM9byxuPWUpfSksbn0sZS5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPXIuYXhpc19yb3RhdGVkPzE6MCxzPXIuYXhpc19yb3RhdGVkPzA6MSxpPW4uY2lyY2xlWShlLGUuaW5kZXgpLGE9bi54KGUueCk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhhLXRbb10sMikrTWF0aC5wb3coaS10W3NdLDIpKX0sZS5wcm90b3R5cGUuY29udmVydFZhbHVlc1RvU3RlcD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLmNvbmNhdChlKTtpZighdGhpcy5pc0NhdGVnb3JpemVkKCkpcmV0dXJuIGU7Zm9yKHQ9ZS5sZW5ndGgrMTswPHQ7dC0tKW5bdF09blt0LTFdO3JldHVybiBuWzBdPXt4Om5bMF0ueC0xLHZhbHVlOm5bMF0udmFsdWUsaWQ6blswXS5pZH0sbltlLmxlbmd0aCsxXT17eDpuW2UubGVuZ3RoXS54KzEsdmFsdWU6bltlLmxlbmd0aF0udmFsdWUsaWQ6bltlLmxlbmd0aF0uaWR9LG59LGUucHJvdG90eXBlLnVwZGF0ZURhdGFBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89clsiZGF0YV8iK2VdO3JldHVybiB2b2lkIDA9PT10P286KE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7b1tlXT10W2VdfSksbi5yZWRyYXcoe3dpdGhMZWdlbmQ6ITB9KSxvKX0sZS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZSYmKHQuZmlsdGVyJiYoZT1lLmZpbHRlcih0LmZpbHRlcikpLCh0LnR5cGV8fHQudHlwZXMpJiZlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dC50eXBlcyYmdC50eXBlc1tlLmlkXT90LnR5cGVzW2UuaWRdOnQudHlwZTtuLnNldFRhcmdldFR5cGUoZS5pZCxyKX0pLG4uZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYodC5pZD09PWVbbl0uaWQpe3QudmFsdWVzPWVbbl0udmFsdWVzLGUuc3BsaWNlKG4sMSk7YnJlYWt9fSksbi5kYXRhLnRhcmdldHM9bi5kYXRhLnRhcmdldHMuY29uY2F0KGUpKSxuLnVwZGF0ZVRhcmdldHMobi5kYXRhLnRhcmdldHMpLG4ucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoTGVnZW5kOiEwfSksdC5kb25lJiZ0LmRvbmUoKX0sZS5wcm90b3R5cGUubG9hZEZyb21BcmdzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5kYXRhP3QubG9hZCh0LmNvbnZlcnREYXRhVG9UYXJnZXRzKGUuZGF0YSksZSk6ZS51cmw/dC5jb252ZXJ0VXJsVG9EYXRhKGUudXJsLGUubWltZVR5cGUsZS5oZWFkZXJzLGUua2V5cyxmdW5jdGlvbihuKXt0LmxvYWQodC5jb252ZXJ0RGF0YVRvVGFyZ2V0cyhuKSxlKX0pOmUuanNvbj90LmxvYWQodC5jb252ZXJ0RGF0YVRvVGFyZ2V0cyh0LmNvbnZlcnRKc29uVG9EYXRhKGUuanNvbixlLmtleXMpKSxlKTplLnJvd3M/dC5sb2FkKHQuY29udmVydERhdGFUb1RhcmdldHModC5jb252ZXJ0Um93c1RvRGF0YShlLnJvd3MpKSxlKTplLmNvbHVtbnM/dC5sb2FkKHQuY29udmVydERhdGFUb1RhcmdldHModC5jb252ZXJ0Q29sdW1uc1RvRGF0YShlLmNvbHVtbnMpKSxlKTp0LmxvYWQobnVsbCxlKX0sZS5wcm90b3R5cGUudW5sb2FkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0fHwodD1mdW5jdGlvbigpe30pLCEoZT1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5oYXNUYXJnZXQobi5kYXRhLnRhcmdldHMsZSl9KSl8fDA9PT1lLmxlbmd0aClyZXR1cm4gdm9pZCB0KCk7bi5zdmcuc2VsZWN0QWxsKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLnNlbGVjdG9yVGFyZ2V0KGUpfSkpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCkuY2FsbChuLmVuZGFsbCx0KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7bi53aXRob3V0RmFkZUluW2VdPSExLG4ubGVnZW5kJiZuLmxlZ2VuZC5zZWxlY3RBbGwoIi4iK28ubGVnZW5kSXRlbStuLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUpKS5yZW1vdmUoKSxuLmRhdGEudGFyZ2V0cz1uLmRhdGEudGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQhPT1lfSl9KX0sZS5wcm90b3R5cGUuZ2V0WURvbWFpbk1pbj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYT10aGlzLGw9YS5jb25maWcsdT1hLm1hcFRvSWRzKGUpLGM9YS5nZXRWYWx1ZXNBc0lkS2V5ZWQoZSk7aWYobC5kYXRhX2dyb3Vwcy5sZW5ndGg+MClmb3IoaT1hLmhhc05lZ2F0aXZlVmFsdWVJblRhcmdldHMoZSksdD0wO3Q8bC5kYXRhX2dyb3Vwcy5sZW5ndGg7dCsrKWlmKG89bC5kYXRhX2dyb3Vwc1t0XS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaW5kZXhPZihlKT49MH0pLDAhPT1vLmxlbmd0aClmb3Iocj1vWzBdLGkmJmNbcl0mJmNbcl0uZm9yRWFjaChmdW5jdGlvbihlLHQpe2Nbcl1bdF09ZTwwP2U6MH0pLG49MTtuPG8ubGVuZ3RoO24rKylzPW9bbl0sY1tzXSYmY1tzXS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7YS5heGlzLmdldElkKHMpIT09YS5heGlzLmdldElkKHIpfHwhY1tyXXx8aSYmK2U+MHx8KGNbcl1bdF0rPStlKX0pO3JldHVybiBhLmQzLm1pbihPYmplY3Qua2V5cyhjKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZDMubWluKGNbZV0pfSkpfSxlLnByb3RvdHlwZS5nZXRZRG9tYWluTWF4PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhPXRoaXMsbD1hLmNvbmZpZyx1PWEubWFwVG9JZHMoZSksYz1hLmdldFZhbHVlc0FzSWRLZXllZChlKTtpZihsLmRhdGFfZ3JvdXBzLmxlbmd0aD4wKWZvcihpPWEuaGFzUG9zaXRpdmVWYWx1ZUluVGFyZ2V0cyhlKSx0PTA7dDxsLmRhdGFfZ3JvdXBzLmxlbmd0aDt0KyspaWYobz1sLmRhdGFfZ3JvdXBzW3RdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdS5pbmRleE9mKGUpPj0wfSksMCE9PW8ubGVuZ3RoKWZvcihyPW9bMF0saSYmY1tyXSYmY1tyXS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7Y1tyXVt0XT1lPjA/ZTowfSksbj0xO248by5sZW5ndGg7bisrKXM9b1tuXSxjW3NdJiZjW3NdLmZvckVhY2goZnVuY3Rpb24oZSx0KXthLmF4aXMuZ2V0SWQocykhPT1hLmF4aXMuZ2V0SWQocil8fCFjW3JdfHxpJiYrZTwwfHwoY1tyXVt0XSs9K2UpfSk7cmV0dXJuIGEuZDMubWF4KE9iamVjdC5rZXlzKGMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5kMy5tYXgoY1tlXSl9KSl9LGUucHJvdG90eXBlLmdldFlEb21haW49ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scyxpLGEsbCx1LGQsXyxwLGY9dGhpcyxtPWYuY29uZmlnLGg9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXhpcy5nZXRJZChlLmlkKT09PXR9KSxnPW4/Zi5maWx0ZXJCeVhEb21haW4oaCxuKTpoLGI9InkyIj09PXQ/bS5heGlzX3kyX21pbjptLmF4aXNfeV9taW4sRT0ieTIiPT09dD9tLmF4aXNfeTJfbWF4Om0uYXhpc195X21heCxUPWYuZ2V0WURvbWFpbk1pbihnKSxBPWYuZ2V0WURvbWFpbk1heChnKSxDPSJ5MiI9PT10P20uYXhpc195Ml9jZW50ZXI6bS5heGlzX3lfY2VudGVyLE89Zi5oYXNUeXBlKCJiYXIiLGcpJiZtLmJhcl96ZXJvYmFzZWR8fGYuaGFzVHlwZSgiYXJlYSIsZykmJm0uYXJlYV96ZXJvYmFzZWQsUz0ieTIiPT09dD9tLmF4aXNfeTJfaW52ZXJ0ZWQ6bS5heGlzX3lfaW52ZXJ0ZWQsUj1mLmhhc0RhdGFMYWJlbCgpJiZtLmF4aXNfcm90YXRlZCxqPWYuaGFzRGF0YUxhYmVsKCkmJiFtLmF4aXNfcm90YXRlZDtyZXR1cm4gVD15KGIpP2I6eShFKT9UPEU/VDpFLTEwOlQsQT15KEUpP0U6eShiKT9iPEE/QTpiKzEwOkEsMD09PWcubGVuZ3RoPyJ5MiI9PT10P2YueTIuZG9tYWluKCk6Zi55LmRvbWFpbigpOihpc05hTihUKSYmKFQ9MCksaXNOYU4oQSkmJihBPVQpLFQ9PT1BJiYoVDwwP0E9MDpUPTApLF89VD49MCYmQT49MCxwPVQ8PTAmJkE8PTAsKHkoYikmJl98fHkoRSkmJnApJiYoTz0hMSksTyYmKF8mJihUPTApLHAmJihBPTApKSxvPU1hdGguYWJzKEEtVCkscz1pPS4xKm8sdm9pZCAwIT09QyYmKGE9TWF0aC5tYXgoTWF0aC5hYnMoVCksTWF0aC5hYnMoQSkpLEE9QythLFQ9Qy1hKSxSPyhsPWYuZ2V0RGF0YUxhYmVsTGVuZ3RoKFQsQSwid2lkdGgiKSx1PWMoZi55LnJhbmdlKCkpLGQ9W2xbMF0vdSxsWzFdL3VdLHMrPW8qKGRbMV0vKDEtZFswXS1kWzFdKSksaSs9byooZFswXS8oMS1kWzBdLWRbMV0pKSk6aiYmKGw9Zi5nZXREYXRhTGFiZWxMZW5ndGgoVCxBLCJoZWlnaHQiKSxzKz1mLmF4aXMuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcobFsxXSxvKSxpKz1mLmF4aXMuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcobFswXSxvKSksInkiPT09dCYmdihtLmF4aXNfeV9wYWRkaW5nKSYmKHM9Zi5heGlzLmdldFBhZGRpbmcobS5heGlzX3lfcGFkZGluZywidG9wIixzLG8pLGk9Zi5heGlzLmdldFBhZGRpbmcobS5heGlzX3lfcGFkZGluZywiYm90dG9tIixpLG8pKSwieTIiPT09dCYmdihtLmF4aXNfeTJfcGFkZGluZykmJihzPWYuYXhpcy5nZXRQYWRkaW5nKG0uYXhpc195Ml9wYWRkaW5nLCJ0b3AiLHMsbyksaT1mLmF4aXMuZ2V0UGFkZGluZyhtLmF4aXNfeTJfcGFkZGluZywiYm90dG9tIixpLG8pKSxPJiYoXyYmKGk9VCkscCYmKHM9LUEpKSxyPVtULWksQStzXSxTP3IucmV2ZXJzZSgpOnIpfSxlLnByb3RvdHlwZS5nZXRYRG9tYWluTWluPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gbShuLmF4aXNfeF9taW4pP3QuaXNUaW1lU2VyaWVzKCk/dGhpcy5wYXJzZURhdGUobi5heGlzX3hfbWluKTpuLmF4aXNfeF9taW46dC5kMy5taW4oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5kMy5taW4oZS52YWx1ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pfSl9LGUucHJvdG90eXBlLmdldFhEb21haW5NYXg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBtKG4uYXhpc194X21heCk/dC5pc1RpbWVTZXJpZXMoKT90aGlzLnBhcnNlRGF0ZShuLmF4aXNfeF9tYXgpOm4uYXhpc194X21heDp0LmQzLm1heChlLGZ1bmN0aW9uKGUpe3JldHVybiB0LmQzLm1heChlLnZhbHVlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS54fSl9KX0sZS5wcm90b3R5cGUuZ2V0WERvbWFpblBhZGRpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saT10aGlzLGE9aS5jb25maWcsbD1lWzFdLWVbMF07cmV0dXJuIGkuaXNDYXRlZ29yaXplZCgpP249MDppLmhhc1R5cGUoImJhciIpPyh0PWkuZ2V0TWF4RGF0YUNvdW50KCksbj10PjE/bC8odC0xKS8yOi41KTpuPS4wMSpsLCJvYmplY3QiPT09cyhhLmF4aXNfeF9wYWRkaW5nKSYmdihhLmF4aXNfeF9wYWRkaW5nKT8ocj15KGEuYXhpc194X3BhZGRpbmcubGVmdCk/YS5heGlzX3hfcGFkZGluZy5sZWZ0Om4sbz15KGEuYXhpc194X3BhZGRpbmcucmlnaHQpP2EuYXhpc194X3BhZGRpbmcucmlnaHQ6bik6cj1vPSJudW1iZXIiPT10eXBlb2YgYS5heGlzX3hfcGFkZGluZz9hLmF4aXNfeF9wYWRkaW5nOm4se2xlZnQ6cixyaWdodDpvfX0sZS5wcm90b3R5cGUuZ2V0WERvbWFpbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49W3QuZ2V0WERvbWFpbk1pbihlKSx0LmdldFhEb21haW5NYXgoZSldLHI9blswXSxvPW5bMV0scz10LmdldFhEb21haW5QYWRkaW5nKG4pLGk9MCxhPTA7cmV0dXJuIHItbyE9MHx8dC5pc0NhdGVnb3JpemVkKCl8fCh0LmlzVGltZVNlcmllcygpPyhyPW5ldyBEYXRlKC41KnIuZ2V0VGltZSgpKSxvPW5ldyBEYXRlKDEuNSpvLmdldFRpbWUoKSkpOihyPTA9PT1yPzE6LjUqcixvPTA9PT1vPy0xOjEuNSpvKSksKHJ8fDA9PT1yKSYmKGk9dC5pc1RpbWVTZXJpZXMoKT9uZXcgRGF0ZShyLmdldFRpbWUoKS1zLmxlZnQpOnItcy5sZWZ0KSwob3x8MD09PW8pJiYoYT10LmlzVGltZVNlcmllcygpP25ldyBEYXRlKG8uZ2V0VGltZSgpK3MucmlnaHQpOm8rcy5yaWdodCksW2ksYV19LGUucHJvdG90eXBlLnVwZGF0ZVhEb21haW49ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz10aGlzLGk9cy5jb25maWc7cmV0dXJuIG4mJihzLnguZG9tYWluKG98fHMuZDMuZXh0ZW50KHMuZ2V0WERvbWFpbihlKSkpLHMub3JnWERvbWFpbj1zLnguZG9tYWluKCksaS56b29tX2VuYWJsZWQmJnMuem9vbS51cGRhdGUoKSxzLnN1YlguZG9tYWluKHMueC5kb21haW4oKSkscy5icnVzaCYmcy5icnVzaC51cGRhdGVTY2FsZShzLnN1YlgpKSx0JiZzLnguZG9tYWluKG98fCghcy5icnVzaHx8cy5icnVzaC5lbXB0eSgpP3Mub3JnWERvbWFpbjpzLmJydXNoLnNlbGVjdGlvbkFzVmFsdWUoKSkpLHImJnMueC5kb21haW4ocy50cmltWERvbWFpbihzLngub3JnRG9tYWluKCkpKSxzLnguZG9tYWluKCl9LGUucHJvdG90eXBlLnRyaW1YRG9tYWluPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Wm9vbURvbWFpbigpLG49dFswXSxyPXRbMV07cmV0dXJuIGVbMF08PW4mJihlWzFdPStlWzFdKyhuLWVbMF0pLGVbMF09bikscjw9ZVsxXSYmKGVbMF09K2VbMF0tKGVbMV0tciksZVsxXT1yKSxlfSxlLnByb3RvdHlwZS5kcmFnPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLGksYSxsLHUsYz10aGlzLGQ9Yy5jb25maWcscD1jLm1haW4sZj1jLmQzO2MuaGFzQXJjVHlwZSgpfHxkLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJmQuZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGUmJih0PWMuZHJhZ1N0YXJ0WzBdLG49Yy5kcmFnU3RhcnRbMV0scj1lWzBdLHM9ZVsxXSxpPU1hdGgubWluKHQsciksYT1NYXRoLm1heCh0LHIpLGw9ZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP2MubWFyZ2luLnRvcDpNYXRoLm1pbihuLHMpLHU9ZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP2MuaGVpZ2h0Ok1hdGgubWF4KG4scykscC5zZWxlY3QoIi4iK28uZHJhZ2FyZWEpLmF0dHIoIngiLGkpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIixhLWkpLmF0dHIoImhlaWdodCIsdS1sKSxwLnNlbGVjdEFsbCgiLiIrby5zaGFwZXMpLnNlbGVjdEFsbCgiLiIrby5zaGFwZSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBkLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShlKX0pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbixyLHMsZCxwLG0saD1mLnNlbGVjdCh0aGlzKSxnPWguY2xhc3NlZChvLlNFTEVDVEVEKSxiPWguY2xhc3NlZChvLklOQ0xVREVEKSxFPSExO2lmKGguY2xhc3NlZChvLmNpcmNsZSkpbj0xKmguYXR0cigiY3giKSxyPTEqaC5hdHRyKCJjeSIpLHA9Yy50b2dnbGVQb2ludCxFPWk8biYmbjxhJiZsPHImJnI8dTtlbHNle2lmKCFoLmNsYXNzZWQoby5iYXIpKXJldHVybjttPV8odGhpcyksbj1tLngscj1tLnkscz1tLndpZHRoLGQ9bS5oZWlnaHQscD1jLnRvZ2dsZVBhdGgsRT0hKGE8bnx8bitzPGl8fHU8cnx8citkPGwpfUVeYiYmKGguY2xhc3NlZChvLklOQ0xVREVELCFiKSxoLmNsYXNzZWQoby5TRUxFQ1RFRCwhZykscC5jYWxsKGMsIWcsaCxlLHQpKX0pKX0sZS5wcm90b3R5cGUuZHJhZ3N0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZzt0Lmhhc0FyY1R5cGUoKXx8bi5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiYodC5kcmFnU3RhcnQ9ZSx0Lm1haW4uc2VsZWN0KCIuIitvLmNoYXJ0KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsby5kcmFnYXJlYSkuc3R5bGUoIm9wYWNpdHkiLC4xKSx0LmRyYWdnaW5nPSEwKX0sZS5wcm90b3R5cGUuZHJhZ2VuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztlLmhhc0FyY1R5cGUoKXx8dC5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiYoZS5tYWluLnNlbGVjdCgiLiIrby5kcmFnYXJlYSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGUubWFpbi5zZWxlY3RBbGwoIi4iK28uc2hhcGUpLmNsYXNzZWQoby5JTkNMVURFRCwhMSksZS5kcmFnZ2luZz0hMSl9LGUucHJvdG90eXBlLmdldFlGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUmJiF0Lmhhc1R5cGUoImdhdWdlIik/dC5kZWZhdWx0QXJjVmFsdWVGb3JtYXQ6dC55Rm9ybWF0LHI9ZSYmIXQuaGFzVHlwZSgiZ2F1Z2UiKT90LmRlZmF1bHRBcmNWYWx1ZUZvcm1hdDp0LnkyRm9ybWF0O3JldHVybiBmdW5jdGlvbihlLG8scyl7cmV0dXJuKCJ5MiI9PT10LmF4aXMuZ2V0SWQocyk/cjpuKS5jYWxsKHQsZSxvKX19LGUucHJvdG90eXBlLnlGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybihuLmF4aXNfeV90aWNrX2Zvcm1hdD9uLmF4aXNfeV90aWNrX2Zvcm1hdDp0LmRlZmF1bHRWYWx1ZUZvcm1hdCkoZSl9LGUucHJvdG90eXBlLnkyRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4obi5heGlzX3kyX3RpY2tfZm9ybWF0P24uYXhpc195Ml90aWNrX2Zvcm1hdDp0LmRlZmF1bHRWYWx1ZUZvcm1hdCkoZSl9LGUucHJvdG90eXBlLmRlZmF1bHRWYWx1ZUZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4geShlKT8rZToiIn0sZS5wcm90b3R5cGUuZGVmYXVsdEFyY1ZhbHVlRm9ybWF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKDEpKyIlIn0sZS5wcm90b3R5cGUuZGF0YUxhYmVsRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZy5kYXRhX2xhYmVscyxyPWZ1bmN0aW9uKGUpe3JldHVybiB5KGUpPytlOiIifTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5mb3JtYXQ/bi5mb3JtYXQ6Im9iamVjdCI9PT1zKG4uZm9ybWF0KT9uLmZvcm1hdFtlXT8hMD09PW4uZm9ybWF0W2VdP3I6bi5mb3JtYXRbZV06ZnVuY3Rpb24oKXtyZXR1cm4iIn06cn0sZS5wcm90b3R5cGUuaW5pdEdyaWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmQzO2UuZ3JpZD1lLm1haW4uYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixlLmNsaXBQYXRoRm9yR3JpZCkuYXR0cigiY2xhc3MiLG8uZ3JpZCksdC5ncmlkX3hfc2hvdyYmZS5ncmlkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixvLnhncmlkcyksdC5ncmlkX3lfc2hvdyYmZS5ncmlkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixvLnlncmlkcyksdC5ncmlkX2ZvY3VzX3Nob3cmJmUuZ3JpZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby54Z3JpZEZvY3VzKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsby54Z3JpZEZvY3VzKSxlLnhncmlkPW4uc2VsZWN0QWxsKFtdKSx0LmdyaWRfbGluZXNfZnJvbnR8fGUuaW5pdEdyaWRMaW5lcygpfSxlLnByb3RvdHlwZS5pbml0R3JpZExpbmVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZDM7ZS5ncmlkTGluZXM9ZS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aEZvckdyaWQpLmF0dHIoImNsYXNzIixvLmdyaWQrIiAiK28uZ3JpZExpbmVzKSxlLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby54Z3JpZExpbmVzKSxlLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby55Z3JpZExpbmVzKSxlLnhncmlkTGluZXM9dC5zZWxlY3RBbGwoW10pfSxlLnByb3RvdHlwZS51cGRhdGVYR3JpZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj10LmQzLHM9dC5nZW5lcmF0ZUdyaWREYXRhKG4uZ3JpZF94X3R5cGUsdC54KSxpPXQuaXNDYXRlZ29yaXplZCgpP3QueEF4aXMudGlja09mZnNldCgpOjA7dC54Z3JpZEF0dHI9bi5heGlzX3JvdGF0ZWQ/e3gxOjAseDI6dC53aWR0aCx5MTpmdW5jdGlvbihlKXtyZXR1cm4gdC54KGUpLWl9LHkyOmZ1bmN0aW9uKGUpe3JldHVybiB0LngoZSktaX19Ont4MTpmdW5jdGlvbihlKXtyZXR1cm4gdC54KGUpK2l9LHgyOmZ1bmN0aW9uKGUpe3JldHVybiB0LngoZSkraX0seTE6MCx5Mjp0LmhlaWdodH0sdC54Z3JpZEF0dHIub3BhY2l0eT1mdW5jdGlvbigpe3JldHVybityLnNlbGVjdCh0aGlzKS5hdHRyKG4uYXhpc19yb3RhdGVkPyJ5MSI6IngxIik9PT0obi5heGlzX3JvdGF0ZWQ/dC5oZWlnaHQ6MCk/MDoxfTt2YXIgYT10Lm1haW4uc2VsZWN0KCIuIitvLnhncmlkcykuc2VsZWN0QWxsKCIuIitvLnhncmlkKS5kYXRhKHMpLGw9YS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixvLnhncmlkKS5hdHRyKCJ4MSIsdC54Z3JpZEF0dHIueDEpLmF0dHIoIngyIix0LnhncmlkQXR0ci54MikuYXR0cigieTEiLHQueGdyaWRBdHRyLnkxKS5hdHRyKCJ5MiIsdC54Z3JpZEF0dHIueTIpLnN0eWxlKCJvcGFjaXR5IiwwKTt0LnhncmlkPWwubWVyZ2UoYSksZXx8dC54Z3JpZC5hdHRyKCJ4MSIsdC54Z3JpZEF0dHIueDEpLmF0dHIoIngyIix0LnhncmlkQXR0ci54MikuYXR0cigieTEiLHQueGdyaWRBdHRyLnkxKS5hdHRyKCJ5MiIsdC54Z3JpZEF0dHIueTIpLnN0eWxlKCJvcGFjaXR5Iix0LnhncmlkQXR0ci5vcGFjaXR5KSxhLmV4aXQoKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUudXBkYXRlWUdyaWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLnlBeGlzLnRpY2tWYWx1ZXMoKXx8ZS55LnRpY2tzKHQuZ3JpZF95X3RpY2tzKSxyPWUubWFpbi5zZWxlY3QoIi4iK28ueWdyaWRzKS5zZWxlY3RBbGwoIi4iK28ueWdyaWQpLmRhdGEobikscz1yLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLG8ueWdyaWQpO2UueWdyaWQ9cy5tZXJnZShyKSxlLnlncmlkLmF0dHIoIngxIix0LmF4aXNfcm90YXRlZD9lLnk6MCkuYXR0cigieDIiLHQuYXhpc19yb3RhdGVkP2UueTplLndpZHRoKS5hdHRyKCJ5MSIsdC5heGlzX3JvdGF0ZWQ/MDplLnkpLmF0dHIoInkyIix0LmF4aXNfcm90YXRlZD9lLmhlaWdodDplLnkpLHIuZXhpdCgpLnJlbW92ZSgpLGUuc21vb3RoTGluZXMoZS55Z3JpZCwiZ3JpZCIpfSxlLnByb3RvdHlwZS5ncmlkVGV4dEFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4gZS5wb3NpdGlvbj9lLnBvc2l0aW9uOiJlbmQifSxlLnByb3RvdHlwZS5ncmlkVGV4dER4PWZ1bmN0aW9uKGUpe3JldHVybiJzdGFydCI9PT1lLnBvc2l0aW9uPzQ6Im1pZGRsZSI9PT1lLnBvc2l0aW9uPzA6LTR9LGUucHJvdG90eXBlLnhHcmlkVGV4dFg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0YXJ0Ij09PWUucG9zaXRpb24/LXRoaXMuaGVpZ2h0OiJtaWRkbGUiPT09ZS5wb3NpdGlvbj8tdGhpcy5oZWlnaHQvMjowfSxlLnByb3RvdHlwZS55R3JpZFRleHRYPWZ1bmN0aW9uKGUpe3JldHVybiJzdGFydCI9PT1lLnBvc2l0aW9uPzA6Im1pZGRsZSI9PT1lLnBvc2l0aW9uP3RoaXMud2lkdGgvMjp0aGlzLndpZHRofSxlLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLGk9dGhpcyxhPWkubWFpbixsPWkuY29uZmlnLHU9aS54di5iaW5kKGkpLGM9aS55di5iaW5kKGkpLGQ9aS54R3JpZFRleHRYLmJpbmQoaSksXz1pLnlHcmlkVGV4dFguYmluZChpKTtpLmdyaWQuc3R5bGUoInZpc2liaWxpdHkiLGkuaGFzQXJjVHlwZSgpPyJoaWRkZW4iOiJ2aXNpYmxlIiksYS5zZWxlY3QoImxpbmUuIitvLnhncmlkRm9jdXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksbC5ncmlkX3hfc2hvdyYmaS51cGRhdGVYR3JpZCgpLHQ9YS5zZWxlY3QoIi4iK28ueGdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIitvLnhncmlkTGluZSkuZGF0YShsLmdyaWRfeF9saW5lcyksbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBvLnhncmlkTGluZSsoZS5jbGFzcz8iICIrZS5jbGFzczoiIil9KSxuLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixsLmF4aXNfcm90YXRlZD8wOnUpLmF0dHIoIngyIixsLmF4aXNfcm90YXRlZD9pLndpZHRoOnUpLmF0dHIoInkxIixsLmF4aXNfcm90YXRlZD91OjApLmF0dHIoInkyIixsLmF4aXNfcm90YXRlZD91OmkuaGVpZ2h0KS5zdHlsZSgib3BhY2l0eSIsMCksbi5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaS5ncmlkVGV4dEFuY2hvcikuYXR0cigidHJhbnNmb3JtIixsLmF4aXNfcm90YXRlZD8iIjoicm90YXRlKC05MCkiKS5hdHRyKCJ4IixsLmF4aXNfcm90YXRlZD9fOmQpLmF0dHIoInkiLHUpLmF0dHIoImR4IixpLmdyaWRUZXh0RHgpLmF0dHIoImR5IiwtNSkuc3R5bGUoIm9wYWNpdHkiLDApLGkueGdyaWRMaW5lcz1uLm1lcmdlKHQpLHQuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksbC5ncmlkX3lfc2hvdyYmaS51cGRhdGVZR3JpZCgpLHI9YS5zZWxlY3QoIi4iK28ueWdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIitvLnlncmlkTGluZSkuZGF0YShsLmdyaWRfeV9saW5lcykscz1yLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBvLnlncmlkTGluZSsoZS5jbGFzcz8iICIrZS5jbGFzczoiIil9KSxzLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixsLmF4aXNfcm90YXRlZD9jOjApLmF0dHIoIngyIixsLmF4aXNfcm90YXRlZD9jOmkud2lkdGgpLmF0dHIoInkxIixsLmF4aXNfcm90YXRlZD8wOmMpLmF0dHIoInkyIixsLmF4aXNfcm90YXRlZD9pLmhlaWdodDpjKS5zdHlsZSgib3BhY2l0eSIsMCkscy5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaS5ncmlkVGV4dEFuY2hvcikuYXR0cigidHJhbnNmb3JtIixsLmF4aXNfcm90YXRlZD8icm90YXRlKC05MCkiOiIiKS5hdHRyKCJ4IixsLmF4aXNfcm90YXRlZD9kOl8pLmF0dHIoInkiLGMpLmF0dHIoImR4IixpLmdyaWRUZXh0RHgpLmF0dHIoImR5IiwtNSkuc3R5bGUoIm9wYWNpdHkiLDApLGkueWdyaWRMaW5lcz1zLm1lcmdlKHIpLGkueWdyaWRMaW5lcy5zZWxlY3QoImxpbmUiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuYXR0cigieDEiLGwuYXhpc19yb3RhdGVkP2M6MCkuYXR0cigieDIiLGwuYXhpc19yb3RhdGVkP2M6aS53aWR0aCkuYXR0cigieTEiLGwuYXhpc19yb3RhdGVkPzA6YykuYXR0cigieTIiLGwuYXhpc19yb3RhdGVkP2kuaGVpZ2h0OmMpLnN0eWxlKCJvcGFjaXR5IiwxKSxpLnlncmlkTGluZXMuc2VsZWN0KCJ0ZXh0IikudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLmF0dHIoIngiLGwuYXhpc19yb3RhdGVkP2kueEdyaWRUZXh0WC5iaW5kKGkpOmkueUdyaWRUZXh0WC5iaW5kKGkpKS5hdHRyKCJ5IixjKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHR9KS5zdHlsZSgib3BhY2l0eSIsMSksci5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUucmVkcmF3R3JpZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPW4ueHYuYmluZChuKSxzPW4ueGdyaWRMaW5lcy5zZWxlY3QoImxpbmUiKSxpPW4ueGdyaWRMaW5lcy5zZWxlY3QoInRleHQiKTtyZXR1cm5bKGU/cy50cmFuc2l0aW9uKHQpOnMpLmF0dHIoIngxIixyLmF4aXNfcm90YXRlZD8wOm8pLmF0dHIoIngyIixyLmF4aXNfcm90YXRlZD9uLndpZHRoOm8pLmF0dHIoInkxIixyLmF4aXNfcm90YXRlZD9vOjApLmF0dHIoInkyIixyLmF4aXNfcm90YXRlZD9vOm4uaGVpZ2h0KS5zdHlsZSgib3BhY2l0eSIsMSksKGU/aS50cmFuc2l0aW9uKHQpOmkpLmF0dHIoIngiLHIuYXhpc19yb3RhdGVkP24ueUdyaWRUZXh0WC5iaW5kKG4pOm4ueEdyaWRUZXh0WC5iaW5kKG4pKS5hdHRyKCJ5IixvKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHR9KS5zdHlsZSgib3BhY2l0eSIsMSldfSxlLnByb3RvdHlwZS5zaG93WEdyaWRGb2N1cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmeShlLnZhbHVlKX0pLHM9dC5tYWluLnNlbGVjdEFsbCgibGluZS4iK28ueGdyaWRGb2N1cyksaT10Lnh4LmJpbmQodCk7bi50b29sdGlwX3Nob3cmJih0Lmhhc1R5cGUoInNjYXR0ZXIiKXx8dC5oYXNBcmNUeXBlKCl8fChzLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLmRhdGEoW3JbMF1dKS5hdHRyKG4uYXhpc19yb3RhdGVkPyJ5MSI6IngxIixpKS5hdHRyKG4uYXhpc19yb3RhdGVkPyJ5MiI6IngyIixpKSx0LnNtb290aExpbmVzKHMsImdyaWQiKSkpfSxlLnByb3RvdHlwZS5oaWRlWEdyaWRGb2N1cz1mdW5jdGlvbigpe3RoaXMubWFpbi5zZWxlY3QoImxpbmUuIitvLnhncmlkRm9jdXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LGUucHJvdG90eXBlLnVwZGF0ZVhncmlkRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWc7ZS5tYWluLnNlbGVjdCgibGluZS4iK28ueGdyaWRGb2N1cykuYXR0cigieDEiLHQuYXhpc19yb3RhdGVkPzA6LTEwKS5hdHRyKCJ4MiIsdC5heGlzX3JvdGF0ZWQ/ZS53aWR0aDotMTApLmF0dHIoInkxIix0LmF4aXNfcm90YXRlZD8tMTA6MCkuYXR0cigieTIiLHQuYXhpc19yb3RhdGVkPy0xMDplLmhlaWdodCl9LGUucHJvdG90eXBlLmdlbmVyYXRlR3JpZERhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLHMsaSxhPXRoaXMsbD1bXSx1PWEubWFpbi5zZWxlY3QoIi4iK28uYXhpc1gpLnNlbGVjdEFsbCgiLnRpY2siKS5zaXplKCk7aWYoInllYXIiPT09ZSlmb3Iobj1hLmdldFhEb21haW4oKSxyPW5bMF0uZ2V0RnVsbFllYXIoKSxzPW5bMV0uZ2V0RnVsbFllYXIoKSxpPXI7aTw9cztpKyspbC5wdXNoKG5ldyBEYXRlKGkrIi0wMS0wMSAwMDowMDowMCIpKTtlbHNlIGw9dC50aWNrcygxMCksbC5sZW5ndGg+dSYmKGw9bC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuKCIiK2UpLmluZGV4T2YoIi4iKTwwfSkpO3JldHVybiBsfSxlLnByb3RvdHlwZS5nZXRHcmlkRmlsdGVyVG9SZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCl7dmFyIG49ITE7cmV0dXJuW10uY29uY2F0KGUpLmZvckVhY2goZnVuY3Rpb24oZSl7KCJ2YWx1ZSJpbiBlJiZ0LnZhbHVlPT09ZS52YWx1ZXx8ImNsYXNzImluIGUmJnQuY2xhc3M9PT1lLmNsYXNzKSYmKG49ITApfSksbn06ZnVuY3Rpb24oKXtyZXR1cm4hMH19LGUucHJvdG90eXBlLnJlbW92ZUdyaWRMaW5lcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxzPW4uZ2V0R3JpZEZpbHRlclRvUmVtb3ZlKGUpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIXMoZSl9LGE9dD9vLnhncmlkTGluZXM6by55Z3JpZExpbmVzLGw9dD9vLnhncmlkTGluZTpvLnlncmlkTGluZTtuLm1haW4uc2VsZWN0KCIuIithKS5zZWxlY3RBbGwoIi4iK2wpLmZpbHRlcihzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oci50cmFuc2l0aW9uX2R1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdD9yLmdyaWRfeF9saW5lcz1yLmdyaWRfeF9saW5lcy5maWx0ZXIoaSk6ci5ncmlkX3lfbGluZXM9ci5ncmlkX3lfbGluZXMuZmlsdGVyKGkpfSxlLnByb3RvdHlwZS5pbml0RXZlbnRSZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnO2UubWFpbi5zZWxlY3QoIi4iK28uY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixvLmV2ZW50UmVjdHMpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLGUuZXZlbnRSZWN0PWUubWFpbi5zZWxlY3QoIi4iK28uZXZlbnRSZWN0cykuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLG8uZXZlbnRSZWN0KSx0Lnpvb21fZW5hYmxlZCYmZS56b29tJiYoZS5ldmVudFJlY3QuY2FsbChlLnpvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSx0Lnpvb21faW5pdGlhbFJhbmdlJiZlLmV2ZW50UmVjdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkuY2FsbChlLnpvb20udHJhbnNmb3JtLGUuem9vbVRyYW5zZm9ybSh0Lnpvb21faW5pdGlhbFJhbmdlKSkpfSxlLnByb3RvdHlwZS5yZWRyYXdFdmVudFJlY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aS5zdmcuc2VsZWN0KCIuIitvLmV2ZW50UmVjdCkuc3R5bGUoImN1cnNvciIsbnVsbCksaS5oaWRlWEdyaWRGb2N1cygpLGkuaGlkZVRvb2x0aXAoKSxpLnVuZXhwYW5kQ2lyY2xlcygpLGkudW5leHBhbmRCYXJzKCl9dmFyIHQsbixyLHMsaT10aGlzLGE9aS5kMyxsPWkuY29uZmlnO3Q9MCxuPTAscj1pLndpZHRoLHM9aS5oZWlnaHQsaS5tYWluLnNlbGVjdCgiLiIrby5ldmVudFJlY3RzKS5zdHlsZSgiY3Vyc29yIixsLnpvb21fZW5hYmxlZD9sLmF4aXNfcm90YXRlZD8ibnMtcmVzaXplIjoiZXctcmVzaXplIjpudWxsKSxpLmV2ZW50UmVjdC5hdHRyKCJ4Iix0KS5hdHRyKCJ5IixuKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixzKS5vbigibW91c2VvdXQiLGwuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbigpe2wmJihpLmhhc0FyY1R5cGUoKXx8ZSgpKX06bnVsbCkub24oIm1vdXNlbW92ZSIsbC5pbnRlcmFjdGlvbl9lbmFibGVkP2Z1bmN0aW9uKCl7dmFyIHQsbixyLHMsdTtpZighaS5kcmFnZ2luZyYmIWkuaGFzQXJjVHlwZSh0KSl7aWYodD1pLmZpbHRlclRhcmdldHNUb1Nob3coaS5kYXRhLnRhcmdldHMpLG49YS5tb3VzZSh0aGlzKSxyPWkuZmluZENsb3Nlc3RGcm9tVGFyZ2V0cyh0LG4pLCFpLm1vdXNlb3Zlcnx8ciYmci5pZD09PWkubW91c2VvdmVyLmlkfHwobC5kYXRhX29ubW91c2VvdXQuY2FsbChpLmFwaSxpLm1vdXNlb3ZlciksaS5tb3VzZW92ZXI9dm9pZCAwKSwhcilyZXR1cm4gdm9pZCBlKCk7cz1pLmlzU2NhdHRlclR5cGUocil8fCFsLnRvb2x0aXBfZ3JvdXBlZD9bcl06aS5maWx0ZXJCeVgodCxyLngpLHU9cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkTmFtZShlKX0pLGkuc2hvd1Rvb2x0aXAodSx0aGlzKSxsLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkJiYoaS51bmV4cGFuZENpcmNsZXMoKSx1LmZvckVhY2goZnVuY3Rpb24oZSl7aS5leHBhbmRDaXJjbGVzKGUuaW5kZXgsZS5pZCwhMSl9KSksaS5leHBhbmRCYXJzKHIuaW5kZXgsci5pZCwhMCksaS5zaG93WEdyaWRGb2N1cyh1KSwoaS5pc0JhclR5cGUoci5pZCl8fGkuZGlzdChyLG4pPGwucG9pbnRfc2Vuc2l0aXZpdHkpJiYoaS5zdmcuc2VsZWN0KCIuIitvLmV2ZW50UmVjdCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxpLm1vdXNlb3Zlcnx8KGwuZGF0YV9vbm1vdXNlb3Zlci5jYWxsKGkuYXBpLHIpLGkubW91c2VvdmVyPXIpKX19Om51bGwpLm9uKCJjbGljayIsbC5pbnRlcmFjdGlvbl9lbmFibGVkP2Z1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aS5oYXNBcmNUeXBlKGUpfHwoZT1pLmZpbHRlclRhcmdldHNUb1Nob3coaS5kYXRhLnRhcmdldHMpLHQ9YS5tb3VzZSh0aGlzKSwobj1pLmZpbmRDbG9zZXN0RnJvbVRhcmdldHMoZSx0KSkmJihpLmlzQmFyVHlwZShuLmlkKXx8aS5kaXN0KG4sdCk8bC5wb2ludF9zZW5zaXRpdml0eSkmJihyPWkuaXNTY2F0dGVyVHlwZShuKXx8IWwuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZD9bbl06aS5maWx0ZXJCeVgoZSxuLngpLHIuZm9yRWFjaChmdW5jdGlvbihlKXtpLm1haW4uc2VsZWN0QWxsKCIuIitvLnNoYXBlcytpLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUuaWQpKS5zZWxlY3RBbGwoIi4iK28uc2hhcGUrIi0iK2UuaW5kZXgpLmVhY2goZnVuY3Rpb24oKXsobC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHxpLmlzV2l0aGluU2hhcGUodGhpcyxlKSkmJihpLnRvZ2dsZVNoYXBlKHRoaXMsZSxlLmluZGV4KSxsLmRhdGFfb25jbGljay5jYWxsKGkuYXBpLGUsdGhpcykpfSl9KSkpfTpudWxsKS5jYWxsKGwuaW50ZXJhY3Rpb25fZW5hYmxlZCYmbC5kYXRhX3NlbGVjdGlvbl9kcmFnZ2FibGUmJmkuZHJhZz9hLmRyYWcoKS5vbigiZHJhZyIsZnVuY3Rpb24oKXtpLmRyYWcoYS5tb3VzZSh0aGlzKSl9KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7aS5kcmFnc3RhcnQoYS5tb3VzZSh0aGlzKSl9KS5vbigiZW5kIixmdW5jdGlvbigpe2kuZHJhZ2VuZCgpfSk6ZnVuY3Rpb24oKXt9KX0sZS5wcm90b3R5cGUuZ2V0TW91c2VQb3NpdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVyblt0LngoZS54KSx0LmdldFlTY2FsZShlLmlkKShlLnZhbHVlKV19LGUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9Ii4iK28uZXZlbnRSZWN0LHM9bi5tYWluLnNlbGVjdChyKS5ub2RlKCksaT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aS5sZWZ0Kyh0P3RbMF06MCksbD1pLnRvcCsodD90WzFdOjApLHU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7dS5pbml0TW91c2VFdmVudChlLCEwLCEwLHdpbmRvdywwLGEsbCxhLGwsITEsITEsITEsITEsMCxudWxsKSxzLmRpc3BhdGNoRXZlbnQodSl9LGUucHJvdG90eXBlLmluaXRMZWdlbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUubGVnZW5kSXRlbVRleHRCb3g9e30sZS5sZWdlbmRIYXNSZW5kZXJlZD0hMSxlLmxlZ2VuZD1lLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGUuZ2V0VHJhbnNsYXRlKCJsZWdlbmQiKSksIWUuY29uZmlnLmxlZ2VuZF9zaG93KXJldHVybiBlLmxlZ2VuZC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLHZvaWQoZS5oaWRkZW5MZWdlbmRJZHM9ZS5tYXBUb0lkcyhlLmRhdGEudGFyZ2V0cykpO2UudXBkYXRlTGVnZW5kV2l0aERlZmF1bHRzKCl9LGUucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS51cGRhdGVMZWdlbmQoZS5tYXBUb0lkcyhlLmRhdGEudGFyZ2V0cykse3dpdGhUcmFuc2Zvcm06ITEsd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06ITEsd2l0aFRyYW5zaXRpb246ITF9KX0sZS5wcm90b3R5cGUudXBkYXRlU2l6ZUZvckxlZ2VuZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPXt0b3A6bi5pc0xlZ2VuZFRvcD9uLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkrci5sZWdlbmRfaW5zZXRfeSs1LjU6bi5jdXJyZW50SGVpZ2h0LWUtbi5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbSgpLXIubGVnZW5kX2luc2V0X3ksbGVmdDpuLmlzTGVnZW5kTGVmdD9uLmdldEN1cnJlbnRQYWRkaW5nTGVmdCgpK3IubGVnZW5kX2luc2V0X3grLjU6bi5jdXJyZW50V2lkdGgtdC1uLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKS1yLmxlZ2VuZF9pbnNldF94Ky41fTtuLm1hcmdpbjM9e3RvcDpuLmlzTGVnZW5kUmlnaHQ/MDpuLmlzTGVnZW5kSW5zZXQ/by50b3A6bi5jdXJyZW50SGVpZ2h0LWUscmlnaHQ6TmFOLGJvdHRvbTowLGxlZnQ6bi5pc0xlZ2VuZFJpZ2h0P24uY3VycmVudFdpZHRoLXQ6bi5pc0xlZ2VuZEluc2V0P28ubGVmdDowfX0sZS5wcm90b3R5cGUudHJhbnNmb3JtTGVnZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KGU/dC5sZWdlbmQudHJhbnNpdGlvbigpOnQubGVnZW5kKS5hdHRyKCJ0cmFuc2Zvcm0iLHQuZ2V0VHJhbnNsYXRlKCJsZWdlbmQiKSl9LGUucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZFN0ZXA9ZnVuY3Rpb24oZSl7dGhpcy5sZWdlbmRTdGVwPWV9LGUucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZEl0ZW1XaWR0aD1mdW5jdGlvbihlKXt0aGlzLmxlZ2VuZEl0ZW1XaWR0aD1lfSxlLnByb3RvdHlwZS51cGRhdGVMZWdlbmRJdGVtSGVpZ2h0PWZ1bmN0aW9uKGUpe3RoaXMubGVnZW5kSXRlbUhlaWdodD1lfSxlLnByb3RvdHlwZS5nZXRMZWdlbmRXaWR0aD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuY29uZmlnLmxlZ2VuZF9zaG93P2UuaXNMZWdlbmRSaWdodHx8ZS5pc0xlZ2VuZEluc2V0P2UubGVnZW5kSXRlbVdpZHRoKihlLmxlZ2VuZFN0ZXArMSk6ZS5jdXJyZW50V2lkdGg6MH0sZS5wcm90b3R5cGUuZ2V0TGVnZW5kSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PTA7cmV0dXJuIGUuY29uZmlnLmxlZ2VuZF9zaG93JiYodD1lLmlzTGVnZW5kUmlnaHQ/ZS5jdXJyZW50SGVpZ2h0Ok1hdGgubWF4KDIwLGUubGVnZW5kSXRlbUhlaWdodCkqKGUubGVnZW5kU3RlcCsxKSksdH0sZS5wcm90b3R5cGUub3BhY2l0eUZvckxlZ2VuZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc2VkKG8ubGVnZW5kSXRlbUhpZGRlbik/bnVsbDoxfSxlLnByb3RvdHlwZS5vcGFjaXR5Rm9yVW5mb2N1c2VkTGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzZWQoby5sZWdlbmRJdGVtSGlkZGVuKT9udWxsOi4zfSxlLnByb3RvdHlwZS50b2dnbGVGb2N1c0xlZ2VuZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZT1uLm1hcFRvVGFyZ2V0SWRzKGUpLG4ubGVnZW5kLnNlbGVjdEFsbCgiLiIrby5sZWdlbmRJdGVtKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5kZXhPZih0KT49MH0pLmNsYXNzZWQoby5sZWdlbmRJdGVtRm9jdXNlZCx0KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4odD9uLm9wYWNpdHlGb3JMZWdlbmQ6bi5vcGFjaXR5Rm9yVW5mb2N1c2VkTGVnZW5kKS5jYWxsKG4sbi5kMy5zZWxlY3QodGhpcykpfSl9LGUucHJvdG90eXBlLnJldmVydExlZ2VuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmQzO2UubGVnZW5kLnNlbGVjdEFsbCgiLiIrby5sZWdlbmRJdGVtKS5jbGFzc2VkKG8ubGVnZW5kSXRlbUZvY3VzZWQsITEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiBlLm9wYWNpdHlGb3JMZWdlbmQodC5zZWxlY3QodGhpcykpfSl9LGUucHJvdG90eXBlLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO24ubGVnZW5kX3Nob3d8fChuLmxlZ2VuZF9zaG93PSEwLHQubGVnZW5kLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLHQubGVnZW5kSGFzUmVuZGVyZWR8fHQudXBkYXRlTGVnZW5kV2l0aERlZmF1bHRzKCkpLHQucmVtb3ZlSGlkZGVuTGVnZW5kSWRzKGUpLHQubGVnZW5kLnNlbGVjdEFsbCh0LnNlbGVjdG9yTGVnZW5kcyhlKSkuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Lm9wYWNpdHlGb3JMZWdlbmQodC5kMy5zZWxlY3QodGhpcykpfSl9LGUucHJvdG90eXBlLmhpZGVMZWdlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO24ubGVnZW5kX3Nob3cmJmgoZSkmJihuLmxlZ2VuZF9zaG93PSExLHQubGVnZW5kLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikpLHQuYWRkSGlkZGVuTGVnZW5kSWRzKGUpLHQubGVnZW5kLnNlbGVjdEFsbCh0LnNlbGVjdG9yTGVnZW5kcyhlKSkuc3R5bGUoIm9wYWNpdHkiLDApLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LGUucHJvdG90eXBlLmNsZWFyTGVnZW5kSXRlbVRleHRCb3hDYWNoZT1mdW5jdGlvbigpe3RoaXMubGVnZW5kSXRlbVRleHRCb3g9e319LGUucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBDLmxlZ2VuZEl0ZW1UZXh0Qm94W3RdfHwoQy5sZWdlbmRJdGVtVGV4dEJveFt0XT1DLmdldFRleHRSZWN0KGUudGV4dENvbnRlbnQsby5sZWdlbmRJdGVtLGUpKSxDLmxlZ2VuZEl0ZW1UZXh0Qm94W3RdfWZ1bmN0aW9uIHModCxuLG8pe2Z1bmN0aW9uIHMoZSx0KXt0fHwoaT0oZi13LXApLzIpPEwmJihpPShmLXApLzIsdz0wLEgrKyksTltlXT1ILFBbSF09Qy5pc0xlZ2VuZEluc2V0PzEwOmksTVtlXT13LHcrPXB9dmFyIGksYSxsPTA9PT1vLHU9bz09PWUubGVuZ3RoLTEsYz1yKHQsbiksZD1jLndpZHRoK0QrKCF1fHxDLmlzTGVnZW5kUmlnaHR8fEMuaXNMZWdlbmRJbnNldD9SOjApK08ubGVnZW5kX3BhZGRpbmcsXz1jLmhlaWdodCtTLHA9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/XzpkLGY9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/Qy5nZXRMZWdlbmRIZWlnaHQoKTpDLmdldExlZ2VuZFdpZHRoKCk7aWYobCYmKHc9MCxIPTAsaj0wLHg9MCksTy5sZWdlbmRfc2hvdyYmIUMuaXNMZWdlbmRUb1Nob3cobikpcmV0dXJuIHZvaWQoa1tuXT1JW25dPU5bbl09TVtuXT0wKTtrW25dPWQsSVtuXT1fLCghanx8ZD49aikmJihqPWQpLCgheHx8Xz49eCkmJih4PV8pLGE9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/eDpqLE8ubGVnZW5kX2VxdWFsbHk/KE9iamVjdC5rZXlzKGspLmZvckVhY2goZnVuY3Rpb24oZSl7a1tlXT1qfSksT2JqZWN0LmtleXMoSSkuZm9yRWFjaChmdW5jdGlvbihlKXtJW2VdPXh9KSxpPShmLWEqZS5sZW5ndGgpLzIsaTxMPyh3PTAsSD0wLGUuZm9yRWFjaChmdW5jdGlvbihlKXtzKGUpfSkpOnMobiwhMCkpOnMobil9dmFyIGksYSxsLHUsYyxfLHAsZixoLGcsYixFLHksdixULEEsQz10aGlzLE89Qy5jb25maWcsUz00LFI9MTAsaj0wLHg9MCxMPTEwLEQ9Ty5sZWdlbmRfaXRlbV90aWxlX3dpZHRoKzUsdz0wLE09e30saz17fSxJPXt9LFA9WzBdLE49e30sSD0wO2U9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIW0oTy5kYXRhX25hbWVzW2VdKXx8bnVsbCE9PU8uZGF0YV9uYW1lc1tlXX0pLHQ9dHx8e30sYj1kKHQsIndpdGhUcmFuc2l0aW9uIiwhMCksRT1kKHQsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIiwhMCksQy5pc0xlZ2VuZEluc2V0JiYoSD1PLmxlZ2VuZF9pbnNldF9zdGVwP08ubGVnZW5kX2luc2V0X3N0ZXA6ZS5sZW5ndGgsQy51cGRhdGVMZWdlbmRTdGVwKEgpKSxDLmlzTGVnZW5kUmlnaHQ/KGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGoqTltlXX0sdT1mdW5jdGlvbihlKXtyZXR1cm4gUFtOW2VdXStNW2VdfSk6Qy5pc0xlZ2VuZEluc2V0PyhpPWZ1bmN0aW9uKGUpe3JldHVybiBqKk5bZV0rMTB9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIFBbTltlXV0rTVtlXX0pOihpPWZ1bmN0aW9uKGUpe3JldHVybiBQW05bZV1dK01bZV19LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHgqTltlXX0pLGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQpKzQrTy5sZWdlbmRfaXRlbV90aWxlX3dpZHRofSxjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0KSs5fSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0sXz1mdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCktNX0scD1mdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCktMn0sZj1mdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCktMitPLmxlZ2VuZF9pdGVtX3RpbGVfd2lkdGh9LGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpKzR9LGc9Qy5sZWdlbmQuc2VsZWN0QWxsKCIuIitvLmxlZ2VuZEl0ZW0pLmRhdGEoZSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIEMuZ2VuZXJhdGVDbGFzcyhvLmxlZ2VuZEl0ZW0sZSl9KS5zdHlsZSgidmlzaWJpbGl0eSIsZnVuY3Rpb24oZSl7cmV0dXJuIEMuaXNMZWdlbmRUb1Nob3coZSk/InZpc2libGUiOiJoaWRkZW4ifSkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe08ubGVnZW5kX2l0ZW1fb25jbGljaz9PLmxlZ2VuZF9pdGVtX29uY2xpY2suY2FsbChDLGUpOkMuZDMuZXZlbnQuYWx0S2V5PyhDLmFwaS5oaWRlKCksQy5hcGkuc2hvdyhlKSk6KEMuYXBpLnRvZ2dsZShlKSxDLmlzVGFyZ2V0VG9TaG93KGUpP0MuYXBpLmZvY3VzKGUpOkMuYXBpLnJldmVydCgpKX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe08ubGVnZW5kX2l0ZW1fb25tb3VzZW92ZXI/Ty5sZWdlbmRfaXRlbV9vbm1vdXNlb3Zlci5jYWxsKEMsZSk6KEMuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoby5sZWdlbmRJdGVtRm9jdXNlZCwhMCksIUMudHJhbnNpdGluZyYmQy5pc1RhcmdldFRvU2hvdyhlKSYmQy5hcGkuZm9jdXMoZSkpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlKXtPLmxlZ2VuZF9pdGVtX29ubW91c2VvdXQ/Ty5sZWdlbmRfaXRlbV9vbm1vdXNlb3V0LmNhbGwoQyxlKTooQy5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChvLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKSxDLmFwaS5yZXZlcnQoKSl9KSxnLmFwcGVuZCgidGV4dCIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIG0oTy5kYXRhX25hbWVzW2VdKT9PLmRhdGFfbmFtZXNbZV06ZX0pLmVhY2goZnVuY3Rpb24oZSx0KXtzKHRoaXMsZSx0KX0pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5hdHRyKCJ4IixDLmlzTGVnZW5kUmlnaHR8fEMuaXNMZWdlbmRJbnNldD9hOi0yMDApLmF0dHIoInkiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6YyksZy5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsby5sZWdlbmRJdGVtRXZlbnQpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLmF0dHIoIngiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P2w6LTIwMCkuYXR0cigieSIsQy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/LTIwMDpfKSxnLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixvLmxlZ2VuZEl0ZW1UaWxlKS5zdHlsZSgic3Ryb2tlIixDLmNvbG9yKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuYXR0cigieDEiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P3A6LTIwMCkuYXR0cigieTEiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6aCkuYXR0cigieDIiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P2Y6LTIwMCkuYXR0cigieTIiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6aCkuYXR0cigic3Ryb2tlLXdpZHRoIixPLmxlZ2VuZF9pdGVtX3RpbGVfaGVpZ2h0KSxBPUMubGVnZW5kLnNlbGVjdCgiLiIrby5sZWdlbmRCYWNrZ3JvdW5kKyIgcmVjdCIpLEMuaXNMZWdlbmRJbnNldCYmaj4wJiYwPT09QS5zaXplKCkmJihBPUMubGVnZW5kLmluc2VydCgiZyIsIi4iK28ubGVnZW5kSXRlbSkuYXR0cigiY2xhc3MiLG8ubGVnZW5kQmFja2dyb3VuZCkuYXBwZW5kKCJyZWN0IikpLHk9Qy5sZWdlbmQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShlKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBtKE8uZGF0YV9uYW1lc1tlXSk/Ty5kYXRhX25hbWVzW2VdOmV9KS5lYWNoKGZ1bmN0aW9uKGUsdCl7cyh0aGlzLGUsdCl9KSwoYj95LnRyYW5zaXRpb24oKTp5KS5hdHRyKCJ4IixhKS5hdHRyKCJ5IixjKSx2PUMubGVnZW5kLnNlbGVjdEFsbCgicmVjdC4iK28ubGVnZW5kSXRlbUV2ZW50KS5kYXRhKGUpLChiP3YudHJhbnNpdGlvbigpOnYpLmF0dHIoIndpZHRoIixmdW5jdGlvbihlKXtyZXR1cm4ga1tlXX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuIElbZV19KS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixfKSxUPUMubGVnZW5kLnNlbGVjdEFsbCgibGluZS4iK28ubGVnZW5kSXRlbVRpbGUpLmRhdGEoZSksKGI/VC50cmFuc2l0aW9uKCk6VCkuc3R5bGUoInN0cm9rZSIsQy5sZXZlbENvbG9yP2Z1bmN0aW9uKGUpe3JldHVybiBDLmxldmVsQ29sb3IoQy5jYWNoZVtlXS52YWx1ZXNbMF0udmFsdWUpfTpDLmNvbG9yKS5hdHRyKCJ4MSIscCkuYXR0cigieTEiLGgpLmF0dHIoIngyIixmKS5hdHRyKCJ5MiIsaCksQSYmKGI/QS50cmFuc2l0aW9uKCk6QSkuYXR0cigiaGVpZ2h0IixDLmdldExlZ2VuZEhlaWdodCgpLTEyKS5hdHRyKCJ3aWR0aCIsaiooSCsxKSsxMCksQy5sZWdlbmQuc2VsZWN0QWxsKCIuIitvLmxlZ2VuZEl0ZW0pLmNsYXNzZWQoby5sZWdlbmRJdGVtSGlkZGVuLGZ1bmN0aW9uKGUpe3JldHVybiFDLmlzVGFyZ2V0VG9TaG93KGUpfSksQy51cGRhdGVMZWdlbmRJdGVtV2lkdGgoaiksQy51cGRhdGVMZWdlbmRJdGVtSGVpZ2h0KHgpLEMudXBkYXRlTGVnZW5kU3RlcChIKSxDLnVwZGF0ZVNpemVzKCksQy51cGRhdGVTY2FsZXMoKSxDLnVwZGF0ZVN2Z1NpemUoKSxDLnRyYW5zZm9ybUFsbChFLG4pLEMubGVnZW5kSGFzUmVuZGVyZWQ9ITB9LGUucHJvdG90eXBlLmluaXRSZWdpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UucmVnaW9uPWUubWFpbi5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGUuY2xpcFBhdGgpLmF0dHIoImNsYXNzIixvLnJlZ2lvbnMpfSxlLnByb3RvdHlwZS51cGRhdGVSZWdpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3QucmVnaW9uLnN0eWxlKCJ2aXNpYmlsaXR5Iix0Lmhhc0FyY1R5cGUoKT8iaGlkZGVuIjoidmlzaWJsZSIpO3ZhciByPXQubWFpbi5zZWxlY3QoIi4iK28ucmVnaW9ucykuc2VsZWN0QWxsKCIuIitvLnJlZ2lvbikuZGF0YShuLnJlZ2lvbnMpLHM9ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLHQucmVnaW9uWC5iaW5kKHQpKS5hdHRyKCJ5Iix0LnJlZ2lvblkuYmluZCh0KSkuYXR0cigid2lkdGgiLHQucmVnaW9uV2lkdGguYmluZCh0KSkuYXR0cigiaGVpZ2h0Iix0LnJlZ2lvbkhlaWdodC5iaW5kKHQpKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKTt0Lm1haW5SZWdpb249cy5tZXJnZShyKS5hdHRyKCJjbGFzcyIsdC5jbGFzc1JlZ2lvbi5iaW5kKHQpKSxyLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5yZWRyYXdSZWdpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5tYWluUmVnaW9uO3JldHVyblsoZT9yLnRyYW5zaXRpb24odCk6cikuYXR0cigieCIsbi5yZWdpb25YLmJpbmQobikpLmF0dHIoInkiLG4ucmVnaW9uWS5iaW5kKG4pKS5hdHRyKCJ3aWR0aCIsbi5yZWdpb25XaWR0aC5iaW5kKG4pKS5hdHRyKCJoZWlnaHQiLG4ucmVnaW9uSGVpZ2h0LmJpbmQobikpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKGUpe3JldHVybiB5KGUub3BhY2l0eSk/ZS5vcGFjaXR5Oi4xfSldfSxlLnByb3RvdHlwZS5yZWdpb25YPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPSJ5Ij09PWUuYXhpcz90Lnk6dC55MjtyZXR1cm4ieSI9PT1lLmF4aXN8fCJ5MiI9PT1lLmF4aXM/bi5heGlzX3JvdGF0ZWQmJiJzdGFydCJpbiBlP3IoZS5zdGFydCk6MDpuLmF4aXNfcm90YXRlZD8wOiJzdGFydCJpbiBlP3QueCh0LmlzVGltZVNlcmllcygpP3QucGFyc2VEYXRlKGUuc3RhcnQpOmUuc3RhcnQpOjB9LGUucHJvdG90eXBlLnJlZ2lvblk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLHI9InkiPT09ZS5heGlzP3QueTp0LnkyO3JldHVybiJ5Ij09PWUuYXhpc3x8InkyIj09PWUuYXhpcz9uLmF4aXNfcm90YXRlZD8wOiJlbmQiaW4gZT9yKGUuZW5kKTowOm4uYXhpc19yb3RhdGVkJiYic3RhcnQiaW4gZT90LngodC5pc1RpbWVTZXJpZXMoKT90LnBhcnNlRGF0ZShlLnN0YXJ0KTplLnN0YXJ0KTowfSxlLnByb3RvdHlwZS5yZWdpb25XaWR0aD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMscj1uLmNvbmZpZyxvPW4ucmVnaW9uWChlKSxzPSJ5Ij09PWUuYXhpcz9uLnk6bi55MjtyZXR1cm4gdD0ieSI9PT1lLmF4aXN8fCJ5MiI9PT1lLmF4aXM/ci5heGlzX3JvdGF0ZWQmJiJlbmQiaW4gZT9zKGUuZW5kKTpuLndpZHRoOnIuYXhpc19yb3RhdGVkP24ud2lkdGg6ImVuZCJpbiBlP24ueChuLmlzVGltZVNlcmllcygpP24ucGFyc2VEYXRlKGUuZW5kKTplLmVuZCk6bi53aWR0aCx0PG8/MDp0LW99LGUucHJvdG90eXBlLnJlZ2lvbkhlaWdodD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMscj1uLmNvbmZpZyxvPXRoaXMucmVnaW9uWShlKSxzPSJ5Ij09PWUuYXhpcz9uLnk6bi55MjtyZXR1cm4gdD0ieSI9PT1lLmF4aXN8fCJ5MiI9PT1lLmF4aXM/ci5heGlzX3JvdGF0ZWQ/bi5oZWlnaHQ6InN0YXJ0ImluIGU/cyhlLnN0YXJ0KTpuLmhlaWdodDpyLmF4aXNfcm90YXRlZCYmImVuZCJpbiBlP24ueChuLmlzVGltZVNlcmllcygpP24ucGFyc2VEYXRlKGUuZW5kKTplLmVuZCk6bi5oZWlnaHQsdDxvPzA6dC1vfSxlLnByb3RvdHlwZS5pc1JlZ2lvbk9uWD1mdW5jdGlvbihlKXtyZXR1cm4hZS5heGlzfHwieCI9PT1lLmF4aXN9LGUucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj90aGlzLmQzLnNjYWxlVGltZSgpOnRoaXMuZDMuc2NhbGVMaW5lYXIoKSkucmFuZ2UoW2UsdF0pfSxlLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLHM9dGhpcyxpPXMuZ2V0U2NhbGUoZSx0LHMuaXNUaW1lU2VyaWVzKCkpLGE9bj9pLmRvbWFpbihuKTppO3MuaXNDYXRlZ29yaXplZCgpPyhyPXJ8fGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hKGUpK3IoZSk7cmV0dXJuIHQ/bjpNYXRoLmNlaWwobil9KTppPWZ1bmN0aW9uKGUsdCl7dmFyIG49YShlKTtyZXR1cm4gdD9uOk1hdGguY2VpbChuKX07Zm9yKG8gaW4gYSlpW29dPWFbb107cmV0dXJuIGkub3JnRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIGEuZG9tYWluKCl9LHMuaXNDYXRlZ29yaXplZCgpJiYoaS5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuZG9tYWluKGUpLGkpOihlPXRoaXMub3JnRG9tYWluKCksW2VbMF0sZVsxXSsxXSl9KSxpfSxlLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmdldFNjYWxlKGUsdCx0aGlzLmlzVGltZVNlcmllc1koKSk7cmV0dXJuIG4mJnIuZG9tYWluKG4pLHJ9LGUucHJvdG90eXBlLmdldFlTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4ieTIiPT09dGhpcy5heGlzLmdldElkKGUpP3RoaXMueTI6dGhpcy55fSxlLnByb3RvdHlwZS5nZXRTdWJZU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInkyIj09PXRoaXMuYXhpcy5nZXRJZChlKT90aGlzLnN1YlkyOnRoaXMuc3ViWX0sZS5wcm90b3R5cGUudXBkYXRlU2NhbGVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49IWUueDtlLnhNaW49dC5heGlzX3JvdGF0ZWQ/MTowLGUueE1heD10LmF4aXNfcm90YXRlZD9lLmhlaWdodDplLndpZHRoLGUueU1pbj10LmF4aXNfcm90YXRlZD8wOmUuaGVpZ2h0LGUueU1heD10LmF4aXNfcm90YXRlZD9lLndpZHRoOjEsZS5zdWJYTWluPWUueE1pbixlLnN1YlhNYXg9ZS54TWF4LGUuc3ViWU1pbj10LmF4aXNfcm90YXRlZD8wOmUuaGVpZ2h0MixlLnN1YllNYXg9dC5heGlzX3JvdGF0ZWQ/ZS53aWR0aDI6MSxlLng9ZS5nZXRYKGUueE1pbixlLnhNYXgsbj92b2lkIDA6ZS54Lm9yZ0RvbWFpbigpLGZ1bmN0aW9uKCl7cmV0dXJuIGUueEF4aXMudGlja09mZnNldCgpfSksZS55PWUuZ2V0WShlLnlNaW4sZS55TWF4LG4/dC5heGlzX3lfZGVmYXVsdDplLnkuZG9tYWluKCkpLGUueTI9ZS5nZXRZKGUueU1pbixlLnlNYXgsbj90LmF4aXNfeTJfZGVmYXVsdDplLnkyLmRvbWFpbigpKSxlLnN1Ylg9ZS5nZXRYKGUueE1pbixlLnhNYXgsZS5vcmdYRG9tYWluLGZ1bmN0aW9uKHQpe3JldHVybiB0JTE/MDplLnN1YlhBeGlzLnRpY2tPZmZzZXQoKX0pLGUuc3ViWT1lLmdldFkoZS5zdWJZTWluLGUuc3ViWU1heCxuP3QuYXhpc195X2RlZmF1bHQ6ZS5zdWJZLmRvbWFpbigpKSxlLnN1YlkyPWUuZ2V0WShlLnN1YllNaW4sZS5zdWJZTWF4LG4/dC5heGlzX3kyX2RlZmF1bHQ6ZS5zdWJZMi5kb21haW4oKSksZS54QXhpc1RpY2tGb3JtYXQ9ZS5heGlzLmdldFhBeGlzVGlja0Zvcm1hdCgpLGUueEF4aXNUaWNrVmFsdWVzPWUuYXhpcy5nZXRYQXhpc1RpY2tWYWx1ZXMoKSxlLnlBeGlzVGlja1ZhbHVlcz1lLmF4aXMuZ2V0WUF4aXNUaWNrVmFsdWVzKCksZS55MkF4aXNUaWNrVmFsdWVzPWUuYXhpcy5nZXRZMkF4aXNUaWNrVmFsdWVzKCksZS54QXhpcz1lLmF4aXMuZ2V0WEF4aXMoZS54LGUueE9yaWVudCxlLnhBeGlzVGlja0Zvcm1hdCxlLnhBeGlzVGlja1ZhbHVlcyx0LmF4aXNfeF90aWNrX291dGVyKSxlLnN1YlhBeGlzPWUuYXhpcy5nZXRYQXhpcyhlLnN1YlgsZS5zdWJYT3JpZW50LGUueEF4aXNUaWNrRm9ybWF0LGUueEF4aXNUaWNrVmFsdWVzLHQuYXhpc194X3RpY2tfb3V0ZXIpLGUueUF4aXM9ZS5heGlzLmdldFlBeGlzKGUueSxlLnlPcmllbnQsdC5heGlzX3lfdGlja19mb3JtYXQsZS55QXhpc1RpY2tWYWx1ZXMsdC5heGlzX3lfdGlja19vdXRlciksZS55MkF4aXM9ZS5heGlzLmdldFlBeGlzKGUueTIsZS55Mk9yaWVudCx0LmF4aXNfeTJfdGlja19mb3JtYXQsZS55MkF4aXNUaWNrVmFsdWVzLHQuYXhpc195Ml90aWNrX291dGVyKSxufHxlLmJydXNoJiZlLmJydXNoLnVwZGF0ZVNjYWxlKGUuc3ViWCksZS51cGRhdGVBcmMmJmUudXBkYXRlQXJjKCl9LGUucHJvdG90eXBlLnNlbGVjdFBvaW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLHM9ci5jb25maWcsaT0ocy5heGlzX3JvdGF0ZWQ/ci5jaXJjbGVZOnIuY2lyY2xlWCkuYmluZChyKSxhPShzLmF4aXNfcm90YXRlZD9yLmNpcmNsZVg6ci5jaXJjbGVZKS5iaW5kKHIpLGw9ci5wb2ludFNlbGVjdFIuYmluZChyKTtzLmRhdGFfb25zZWxlY3RlZC5jYWxsKHIuYXBpLHQsZS5ub2RlKCkpLHIubWFpbi5zZWxlY3QoIi4iK28uc2VsZWN0ZWRDaXJjbGVzK3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodC5pZCkpLnNlbGVjdEFsbCgiLiIrby5zZWxlY3RlZENpcmNsZSsiLSIrbikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gci5nZW5lcmF0ZUNsYXNzKG8uc2VsZWN0ZWRDaXJjbGUsbil9KS5hdHRyKCJjeCIsaSkuYXR0cigiY3kiLGEpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5jb2xvcih0KX0pLmF0dHIoInIiLGZ1bmN0aW9uKGUpe3JldHVybiAxLjQqci5wb2ludFNlbGVjdFIoZSl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5hdHRyKCJyIixsKX0sZS5wcm90b3R5cGUudW5zZWxlY3RQb2ludD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztyLmNvbmZpZy5kYXRhX29udW5zZWxlY3RlZC5jYWxsKHIuYXBpLHQsZS5ub2RlKCkpLHIubWFpbi5zZWxlY3QoIi4iK28uc2VsZWN0ZWRDaXJjbGVzK3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodC5pZCkpLnNlbGVjdEFsbCgiLiIrby5zZWxlY3RlZENpcmNsZSsiLSIrbikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuYXR0cigiciIsMCkucmVtb3ZlKCl9LGUucHJvdG90eXBlLnRvZ2dsZVBvaW50PWZ1bmN0aW9uKGUsdCxuLHIpe2U/dGhpcy5zZWxlY3RQb2ludCh0LG4scik6dGhpcy51bnNlbGVjdFBvaW50KHQsbixyKX0sZS5wcm90b3R5cGUuc2VsZWN0UGF0aD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7bi5jb25maWcuZGF0YV9vbnNlbGVjdGVkLmNhbGwobix0LGUubm9kZSgpKSxuLmNvbmZpZy5pbnRlcmFjdGlvbl9icmlnaHRlbiYmZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gbi5kMy5yZ2Iobi5jb2xvcih0KSkuYnJpZ2h0ZXIoLjc1KX0pfSxlLnByb3RvdHlwZS51bnNlbGVjdFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uY29uZmlnLmRhdGFfb251bnNlbGVjdGVkLmNhbGwobix0LGUubm9kZSgpKSxuLmNvbmZpZy5pbnRlcmFjdGlvbl9icmlnaHRlbiYmZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gbi5jb2xvcih0KX0pfSxlLnByb3RvdHlwZS50b2dnbGVQYXRoPWZ1bmN0aW9uKGUsdCxuLHIpe2U/dGhpcy5zZWxlY3RQYXRoKHQsbixyKTp0aGlzLnVuc2VsZWN0UGF0aCh0LG4scil9LGUucHJvdG90eXBlLmdldFRvZ2dsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcztyZXR1cm4iY2lyY2xlIj09PWUubm9kZU5hbWU/bj1yLmlzU3RlcFR5cGUodCk/ZnVuY3Rpb24oKXt9OnIudG9nZ2xlUG9pbnQ6InBhdGgiPT09ZS5ub2RlTmFtZSYmKG49ci50b2dnbGVQYXRoKSxufSxlLnByb3RvdHlwZS50b2dnbGVTaGFwZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxzPXIuZDMsaT1yLmNvbmZpZyxhPXMuc2VsZWN0KGUpLGw9YS5jbGFzc2VkKG8uU0VMRUNURUQpLHU9ci5nZXRUb2dnbGUoZSx0KS5iaW5kKHIpO2kuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmaS5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUodCkmJihpLmRhdGFfc2VsZWN0aW9uX211bHRpcGxlfHxyLm1haW4uc2VsZWN0QWxsKCIuIitvLnNoYXBlcysoaS5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodC5pZCk6IiIpKS5zZWxlY3RBbGwoIi4iK28uc2hhcGUpLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1zLnNlbGVjdCh0aGlzKTtuLmNsYXNzZWQoby5TRUxFQ1RFRCkmJnUoITEsbi5jbGFzc2VkKG8uU0VMRUNURUQsITEpLGUsdCl9KSxhLmNsYXNzZWQoby5TRUxFQ1RFRCwhbCksdSghbCxhLHQsbikpfSxlLnByb3RvdHlwZS5pbml0QmFyPWZ1bmN0aW9uKCl7dGhpcy5tYWluLnNlbGVjdCgiLiIrby5jaGFydCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8uY2hhcnRCYXJzKX0sZS5wcm90b3R5cGUudXBkYXRlVGFyZ2V0c0ZvckJhcj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxzPXIuY29uZmlnLGk9ci5jbGFzc0NoYXJ0QmFyLmJpbmQociksYT1yLmNsYXNzQmFycy5iaW5kKHIpLGw9ci5jbGFzc0ZvY3VzLmJpbmQocik7dD1yLm1haW4uc2VsZWN0KCIuIitvLmNoYXJ0QmFycykuc2VsZWN0QWxsKCIuIitvLmNoYXJ0QmFyKS5kYXRhKGUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlKXtyZXR1cm4gaShlKStsKGUpfSksbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGkpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihlKXtyZXR1cm4gcy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoZSk/InBvaW50ZXIiOm51bGx9KX0sZS5wcm90b3R5cGUudXBkYXRlQmFyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmJhckRhdGEuYmluZCh0KSxyPXQuY2xhc3NCYXIuYmluZCh0KSxzPXQuaW5pdGlhbE9wYWNpdHkuYmluZCh0KSxpPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbG9yKGUuaWQpfSxhPXQubWFpbi5zZWxlY3RBbGwoIi4iK28uYmFycykuc2VsZWN0QWxsKCIuIitvLmJhcikuZGF0YShuKSxsPWEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIscikuc3R5bGUoInN0cm9rZSIsaSkuc3R5bGUoImZpbGwiLGkpO3QubWFpbkJhcj1sLm1lcmdlKGEpLnN0eWxlKCJvcGFjaXR5IixzKSxhLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApfSxlLnByb3RvdHlwZS5yZWRyYXdCYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVyblsodD90aGlzLm1haW5CYXIudHJhbnNpdGlvbihuKTp0aGlzLm1haW5CYXIpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLHRoaXMuY29sb3IpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsMSldfSxlLnByb3RvdHlwZS5nZXRCYXJXPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89Im51bWJlciI9PXR5cGVvZiByLmJhcl93aWR0aD9yLmJhcl93aWR0aDp0P2UudGlja0ludGVydmFsKCkqci5iYXJfd2lkdGhfcmF0aW8vdDowO3JldHVybiByLmJhcl93aWR0aF9tYXgmJm8+ci5iYXJfd2lkdGhfbWF4P3IuYmFyX3dpZHRoX21heDpvfSxlLnByb3RvdHlwZS5nZXRCYXJzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4odD9uLm1haW4uc2VsZWN0QWxsKCIuIitvLmJhcnMrbi5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeCh0KSk6bi5tYWluKS5zZWxlY3RBbGwoIi4iK28uYmFyKyh5KGUpPyItIitlOiIiKSl9LGUucHJvdG90eXBlLmV4cGFuZEJhcnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7biYmci51bmV4cGFuZEJhcnMoKSxyLmdldEJhcnMoZSx0KS5jbGFzc2VkKG8uRVhQQU5ERUQsITApfSxlLnByb3RvdHlwZS51bmV4cGFuZEJhcnM9ZnVuY3Rpb24oZSl7dGhpcy5nZXRCYXJzKGUpLmNsYXNzZWQoby5FWFBBTkRFRCwhMSl9LGUucHJvdG90eXBlLmdlbmVyYXRlRHJhd0Jhcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPW4uZ2VuZXJhdGVHZXRCYXJQb2ludHMoZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1vKGUsdCkscz1yLmF4aXNfcm90YXRlZD8xOjAsaT1yLmF4aXNfcm90YXRlZD8wOjE7cmV0dXJuIk0gIituWzBdW3NdKyIsIituWzBdW2ldKyIgTCIrblsxXVtzXSsiLCIrblsxXVtpXSsiIEwiK25bMl1bc10rIiwiK25bMl1baV0rIiBMIituWzNdW3NdKyIsIituWzNdW2ldKyIgeiJ9fSxlLnByb3RvdHlwZS5nZW5lcmF0ZUdldEJhclBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10P24uc3ViWEF4aXM6bi54QXhpcyxvPWUuX19tYXhfXysxLHM9bi5nZXRCYXJXKHIsbyksaT1uLmdldFNoYXBlWChzLG8sZSwhIXQpLGE9bi5nZXRTaGFwZVkoISF0KSxsPW4uZ2V0U2hhcGVPZmZzZXQobi5pc0JhclR5cGUsZSwhIXQpLHU9cyoobi5jb25maWcuYmFyX3NwYWNlLzIpLGM9dD9uLmdldFN1YllTY2FsZTpuLmdldFlTY2FsZTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1jLmNhbGwobixlLmlkKSgwKSxvPWwoZSx0KXx8cixkPWkoZSksXz1hKGUpO3JldHVybiBuLmNvbmZpZy5heGlzX3JvdGF0ZWQmJigwPGUudmFsdWUmJl88cnx8ZS52YWx1ZTwwJiZyPF8pJiYoXz1yKSxbW2QrdSxvXSxbZCt1LF8tKHItbyldLFtkK3MtdSxfLShyLW8pXSxbZCtzLXUsb11dfX0sZS5wcm90b3R5cGUuaXNXaXRoaW5CYXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dC5wYXRoU2VnTGlzdC5nZXRJdGVtKDApLG89dC5wYXRoU2VnTGlzdC5nZXRJdGVtKDEpLHM9TWF0aC5taW4oci54LG8ueCksaT1NYXRoLm1pbihyLnksby55KSxhPW4ud2lkdGgsbD1uLmhlaWdodCx1PXMtMixjPXMrYSsyLGQ9aStsKzIsXz1pLTI7cmV0dXJuIHU8ZVswXSYmZVswXTxjJiZfPGVbMV0mJmVbMV08ZH0sZS5wcm90b3R5cGUuZ2V0U2hhcGVJbmRpY2VzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLG89ci5jb25maWcscz17fSxpPTA7cmV0dXJuIHIuZmlsdGVyVGFyZ2V0c1RvU2hvdyhyLmRhdGEudGFyZ2V0cy5maWx0ZXIoZSxyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodD0wO3Q8by5kYXRhX2dyb3Vwcy5sZW5ndGg7dCsrKWlmKCEoby5kYXRhX2dyb3Vwc1t0XS5pbmRleE9mKGUuaWQpPDApKWZvcihuPTA7bjxvLmRhdGFfZ3JvdXBzW3RdLmxlbmd0aDtuKyspaWYoby5kYXRhX2dyb3Vwc1t0XVtuXWluIHMpe3NbZS5pZF09c1tvLmRhdGFfZ3JvdXBzW3RdW25dXTticmVha31FKHNbZS5pZF0pJiYoc1tlLmlkXT1pKyspfSkscy5fX21heF9fPWktMSxzfSxlLnByb3RvdHlwZS5nZXRTaGFwZVg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcyxzPXI/by5zdWJYOm8ueDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89ci5pZCBpbiBuP25bci5pZF06MDtyZXR1cm4gci54fHwwPT09ci54P3Moci54KS1lKih0LzItbyk6MH19LGUucHJvdG90eXBlLmdldFNoYXBlWT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oZT90LmdldFN1YllTY2FsZShuLmlkKTp0LmdldFlTY2FsZShuLmlkKSkobi52YWx1ZSl9fSxlLnByb3RvdHlwZS5nZXRTaGFwZU9mZnNldD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPXIub3JkZXJUYXJnZXRzKHIuZmlsdGVyVGFyZ2V0c1RvU2hvdyhyLmRhdGEudGFyZ2V0cy5maWx0ZXIoZSxyKSkpLHM9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KTtyZXR1cm4gZnVuY3Rpb24oZSxpKXt2YXIgYT1uP3IuZ2V0U3ViWVNjYWxlKGUuaWQpOnIuZ2V0WVNjYWxlKGUuaWQpLGw9YSgwKSx1PWw7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz1yLmlzU3RlcFR5cGUoZSk/ci5jb252ZXJ0VmFsdWVzVG9TdGVwKG4udmFsdWVzKTpuLnZhbHVlcztuLmlkIT09ZS5pZCYmdFtuLmlkXT09PXRbZS5pZF0mJnMuaW5kZXhPZihuLmlkKTxzLmluZGV4T2YoZS5pZCkmJih2b2lkIDAhPT1vW2ldJiYrb1tpXS54PT0rZS54fHwoaT0tMSxvLmZvckVhY2goZnVuY3Rpb24odCxuKXt0Lng9PT1lLngmJihpPW4pfSkpLGkgaW4gbyYmb1tpXS52YWx1ZSplLnZhbHVlPj0wJiYodSs9YShvW2ldLnZhbHVlKS1sKSl9KSx1fX0sZS5wcm90b3R5cGUuaXNXaXRoaW5TaGFwZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcyxzPXIuZDMuc2VsZWN0KGUpO3JldHVybiByLmlzVGFyZ2V0VG9TaG93KHQuaWQpPyJjaXJjbGUiPT09ZS5ub2RlTmFtZT9uPXIuaXNTdGVwVHlwZSh0KT9yLmlzV2l0aGluU3RlcChlLHIuZ2V0WVNjYWxlKHQuaWQpKHQudmFsdWUpKTpyLmlzV2l0aGluQ2lyY2xlKGUsMS41KnIucG9pbnRTZWxlY3RSKHQpKToicGF0aCI9PT1lLm5vZGVOYW1lJiYobj0hcy5jbGFzc2VkKG8uYmFyKXx8ci5pc1dpdGhpbkJhcihyLmQzLm1vdXNlKGUpLGUpKTpuPSExLG59LGUucHJvdG90eXBlLmdldEludGVycG9sYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmQzLHI9e2xpbmVhcjpuLmN1cnZlTGluZWFyLCJsaW5lYXItY2xvc2VkIjpuLmN1cnZlTGluZWFyQ2xvc2VkLGJhc2lzOm4uY3VydmVCYXNpcywiYmFzaXMtb3BlbiI6bi5jdXJ2ZUJhc2lzT3BlbiwiYmFzaXMtY2xvc2VkIjpuLmN1cnZlQmFzaXNDbG9zZWQsYnVuZGxlOm4uY3VydmVCdW5kbGUsY2FyZGluYWw6bi5jdXJ2ZUNhcmRpbmFsLCJjYXJkaW5hbC1vcGVuIjpuLmN1cnZlQ2FyZGluYWxPcGVuLCJjYXJkaW5hbC1jbG9zZWQiOm4uY3VydmVDYXJkaW5hbENsb3NlZCxtb25vdG9uZTpuLmN1cnZlTW9ub3RvbmVYLHN0ZXA6bi5jdXJ2ZVN0ZXAsInN0ZXAtYmVmb3JlIjpuLmN1cnZlU3RlcEJlZm9yZSwic3RlcC1hZnRlciI6bi5jdXJ2ZVN0ZXBBZnRlcn07cmV0dXJuIHQuaXNTcGxpbmVUeXBlKGUpP3JbdC5jb25maWcuc3BsaW5lX2ludGVycG9sYXRpb25fdHlwZV18fHIuY2FyZGluYWw6dC5pc1N0ZXBUeXBlKGUpP3JbdC5jb25maWcubGluZV9zdGVwX3R5cGVdOnIubGluZWFyfSxlLnByb3RvdHlwZS5pbml0TGluZT1mdW5jdGlvbigpe3RoaXMubWFpbi5zZWxlY3QoIi4iK28uY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixvLmNoYXJ0TGluZXMpfSxlLnByb3RvdHlwZS51cGRhdGVUYXJnZXRzRm9yTGluZT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxzPXIuY29uZmlnLGk9ci5jbGFzc0NoYXJ0TGluZS5iaW5kKHIpLGE9ci5jbGFzc0xpbmVzLmJpbmQociksbD1yLmNsYXNzQXJlYXMuYmluZChyKSx1PXIuY2xhc3NDaXJjbGVzLmJpbmQociksYz1yLmNsYXNzRm9jdXMuYmluZChyKTt0PXIubWFpbi5zZWxlY3QoIi4iK28uY2hhcnRMaW5lcykuc2VsZWN0QWxsKCIuIitvLmNoYXJ0TGluZSkuZGF0YShlKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkrYyhlKX0pLG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixpKS5zdHlsZSgib3BhY2l0eSIsMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGwpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiByLmdlbmVyYXRlQ2xhc3Moby5zZWxlY3RlZENpcmNsZXMsZS5pZCl9KSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix1KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihlKXtyZXR1cm4gcy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoZSk/InBvaW50ZXIiOm51bGx9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7ci5tYWluLnNlbGVjdEFsbCgiLiIrby5zZWxlY3RlZENpcmNsZXMrci5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChlLmlkKSkuc2VsZWN0QWxsKCIuIitvLnNlbGVjdGVkQ2lyY2xlKS5lYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9ZS52YWx1ZXNbdC5pbmRleF0udmFsdWV9KX0pfSxlLnByb3RvdHlwZS51cGRhdGVMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10Lm1haW4uc2VsZWN0QWxsKCIuIitvLmxpbmVzKS5zZWxlY3RBbGwoIi4iK28ubGluZSkuZGF0YSh0LmxpbmVEYXRhLmJpbmQodCkpLHI9bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIix0LmNsYXNzTGluZS5iaW5kKHQpKS5zdHlsZSgic3Ryb2tlIix0LmNvbG9yKTt0Lm1haW5MaW5lPXIubWVyZ2Uobikuc3R5bGUoIm9wYWNpdHkiLHQuaW5pdGlhbE9wYWNpdHkuYmluZCh0KSkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNTdGVwVHlwZShlKT8iY3Jpc3BFZGdlcyI6IiJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLG4uZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5zdHlsZSgib3BhY2l0eSIsMCl9LGUucHJvdG90eXBlLnJlZHJhd0xpbmU9ZnVuY3Rpb24oZSx0LG4pe3JldHVyblsodD90aGlzLm1haW5MaW5lLnRyYW5zaXRpb24obik6dGhpcy5tYWluTGluZSkuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsdGhpcy5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLDEpXX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVEcmF3TGluZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPW4uZDMubGluZSgpLHM9bi5nZW5lcmF0ZUdldExpbmVQb2ludHMoZSx0KSxpPXQ/bi5nZXRTdWJZU2NhbGU6bi5nZXRZU2NhbGUsYT1mdW5jdGlvbihlKXtyZXR1cm4odD9uLnN1Ynh4Om4ueHgpLmNhbGwobixlKX0sbD1mdW5jdGlvbihlLHQpe3JldHVybiByLmRhdGFfZ3JvdXBzLmxlbmd0aD4wP3MoZSx0KVswXVsxXTppLmNhbGwobixlLmlkKShlLnZhbHVlKX07cmV0dXJuIG89ci5heGlzX3JvdGF0ZWQ/by54KGwpLnkoYSk6by54KGEpLnkobCksci5saW5lX2Nvbm5lY3ROdWxsfHwobz1vLmRlZmluZWQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUudmFsdWV9KSksZnVuY3Rpb24oZSl7dmFyIHMsYT1yLmxpbmVfY29ubmVjdE51bGw/bi5maWx0ZXJSZW1vdmVOdWxsKGUudmFsdWVzKTplLnZhbHVlcyxsPXQ/bi5zdWJYOm4ueCx1PWkuY2FsbChuLGUuaWQpLGM9MCxkPTA7cmV0dXJuIG4uaXNMaW5lVHlwZShlKT9yLmRhdGFfcmVnaW9uc1tlLmlkXT9zPW4ubGluZVdpdGhSZWdpb25zKGEsbCx1LHIuZGF0YV9yZWdpb25zW2UuaWRdKToobi5pc1N0ZXBUeXBlKGUpJiYoYT1uLmNvbnZlcnRWYWx1ZXNUb1N0ZXAoYSkpLHM9by5jdXJ2ZShuLmdldEludGVycG9sYXRlKGUpKShhKSk6KGFbMF0mJihjPWwoYVswXS54KSxkPXUoYVswXS52YWx1ZSkpLHM9ci5heGlzX3JvdGF0ZWQ/Ik0gIitkKyIgIitjOiJNICIrYysiICIrZCksc3x8Ik0gMCAwIn19LGUucHJvdG90eXBlLmdlbmVyYXRlR2V0TGluZVBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPWUuX19tYXhfXysxLHM9bi5nZXRTaGFwZVgoMCxvLGUsISF0KSxpPW4uZ2V0U2hhcGVZKCEhdCksYT1uLmdldFNoYXBlT2Zmc2V0KG4uaXNMaW5lVHlwZSxlLCEhdCksbD10P24uZ2V0U3ViWVNjYWxlOm4uZ2V0WVNjYWxlO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBvPWwuY2FsbChuLGUuaWQpKDApLHU9YShlLHQpfHxvLGM9cyhlKSxkPWkoZSk7cmV0dXJuIHIuYXhpc19yb3RhdGVkJiYoMDxlLnZhbHVlJiZkPG98fGUudmFsdWU8MCYmbzxkKSYmKGQ9byksW1tjLGQtKG8tdSldLFtjLGQtKG8tdSldLFtjLGQtKG8tdSldLFtjLGQtKG8tdSldXX19LGUucHJvdG90eXBlLmxpbmVXaXRoUmVnaW9ucz1mdW5jdGlvbihlLHQsbixyKXtmdW5jdGlvbiBvKGUpe3JldHVybiJNIitlWzBdWzBdKyIgIitlWzBdWzFdKyIgIitlWzFdWzBdKyIgIitlWzFdWzFdfXZhciBzLGksYSxsLHUsYyxkLF8scCxmLGgsZyxiPXRoaXMseT1iLmNvbmZpZyx2PSJNIixUPWIuaXNDYXRlZ29yaXplZCgpPy41OjAsQT1bXTtpZihtKHIpKWZvcihzPTA7czxyLmxlbmd0aDtzKyspQVtzXT17fSxFKHJbc10uc3RhcnQpP0Fbc10uc3RhcnQ9ZVswXS54OkFbc10uc3RhcnQ9Yi5pc1RpbWVTZXJpZXMoKT9iLnBhcnNlRGF0ZShyW3NdLnN0YXJ0KTpyW3NdLnN0YXJ0LEUocltzXS5lbmQpP0Fbc10uZW5kPWVbZS5sZW5ndGgtMV0ueDpBW3NdLmVuZD1iLmlzVGltZVNlcmllcygpP2IucGFyc2VEYXRlKHJbc10uZW5kKTpyW3NdLmVuZDtmb3IoaD15LmF4aXNfcm90YXRlZD9mdW5jdGlvbihlKXtyZXR1cm4gbihlLnZhbHVlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS54KX0sZz15LmF4aXNfcm90YXRlZD9mdW5jdGlvbihlKXtyZXR1cm4gdChlLngpfTpmdW5jdGlvbihlKXtyZXR1cm4gbihlLnZhbHVlKX0sYT1iLmlzVGltZVNlcmllcygpP2Z1bmN0aW9uKGUscixzLGkpe3ZhciBhLGw9ZS54LmdldFRpbWUoKSxjPXIueC1lLngsZD1uZXcgRGF0ZShsK2MqcyksXz1uZXcgRGF0ZShsK2MqKHMraSkpO3JldHVybiBhPXkuYXhpc19yb3RhdGVkP1tbbih1KHMpKSx0KGQpXSxbbih1KHMraSkpLHQoXyldXTpbW3QoZCksbih1KHMpKV0sW3QoXyksbih1KHMraSkpXV0sbyhhKX06ZnVuY3Rpb24oZSxyLHMsaSl7dmFyIGE7cmV0dXJuIGE9eS5heGlzX3JvdGF0ZWQ/W1tuKHUocyksITApLHQobChzKSldLFtuKHUocytpKSwhMCksdChsKHMraSkpXV06W1t0KGwocyksITApLG4odShzKSldLFt0KGwocytpKSwhMCksbih1KHMraSkpXV0sbyhhKX0scz0wO3M8ZS5sZW5ndGg7cysrKXtpZihFKEEpfHwhZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uc3RhcnQ8ZSYmZTw9dFtuXS5lbmQpcmV0dXJuITA7cmV0dXJuITF9KGVbc10ueCxBKSl2Kz0iICIraChlW3NdKSsiICIrZyhlW3NdKTtlbHNlIGZvcihsPWIuZ2V0U2NhbGUoZVtzLTFdLngrVCxlW3NdLngrVCxiLmlzVGltZVNlcmllcygpKSx1PWIuZ2V0U2NhbGUoZVtzLTFdLnZhbHVlLGVbc10udmFsdWUpLGM9dChlW3NdLngpLXQoZVtzLTFdLngpLGQ9bihlW3NdLnZhbHVlKS1uKGVbcy0xXS52YWx1ZSksXz1NYXRoLnNxcnQoTWF0aC5wb3coYywyKStNYXRoLnBvdyhkLDIpKSxwPTIvXyxmPTIqcCxpPXA7aTw9MTtpKz1mKXYrPWEoZVtzLTFdLGVbc10saSxwKTtlW3NdLnh9cmV0dXJuIHZ9LGUucHJvdG90eXBlLnVwZGF0ZUFyZWE9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuZDMscj10Lm1haW4uc2VsZWN0QWxsKCIuIitvLmFyZWFzKS5zZWxlY3RBbGwoIi4iK28uYXJlYSkuZGF0YSh0LmxpbmVEYXRhLmJpbmQodCkpLHM9ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIix0LmNsYXNzQXJlYS5iaW5kKHQpKS5zdHlsZSgiZmlsbCIsdC5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIHQub3JnQXJlYU9wYWNpdHk9K24uc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiksMH0pO3QubWFpbkFyZWE9cy5tZXJnZShyKS5zdHlsZSgib3BhY2l0eSIsdC5vcmdBcmVhT3BhY2l0eSksci5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKX0sZS5wcm90b3R5cGUucmVkcmF3QXJlYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuWyh0P3RoaXMubWFpbkFyZWEudHJhbnNpdGlvbihuKTp0aGlzLm1haW5BcmVhKS5hdHRyKCJkIixlKS5zdHlsZSgiZmlsbCIsdGhpcy5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLHRoaXMub3JnQXJlYU9wYWNpdHkpXX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVEcmF3QXJlYT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPW4uZDMuYXJlYSgpLHM9bi5nZW5lcmF0ZUdldEFyZWFQb2ludHMoZSx0KSxpPXQ/bi5nZXRTdWJZU2NhbGU6bi5nZXRZU2NhbGUsYT1mdW5jdGlvbihlKXtyZXR1cm4odD9uLnN1Ynh4Om4ueHgpLmNhbGwobixlKX0sbD1mdW5jdGlvbihlLHQpe3JldHVybiByLmRhdGFfZ3JvdXBzLmxlbmd0aD4wP3MoZSx0KVswXVsxXTppLmNhbGwobixlLmlkKShuLmdldEFyZWFCYXNlVmFsdWUoZS5pZCkpfSx1PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGF0YV9ncm91cHMubGVuZ3RoPjA/cyhlLHQpWzFdWzFdOmkuY2FsbChuLGUuaWQpKGUudmFsdWUpfTtyZXR1cm4gbz1yLmF4aXNfcm90YXRlZD9vLngwKGwpLngxKHUpLnkoYSk6by54KGEpLnkwKHIuYXJlYV9hYm92ZT8wOmwpLnkxKHUpLHIubGluZV9jb25uZWN0TnVsbHx8KG89by5kZWZpbmVkKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS52YWx1ZX0pKSxmdW5jdGlvbihlKXt2YXIgdCxzPXIubGluZV9jb25uZWN0TnVsbD9uLmZpbHRlclJlbW92ZU51bGwoZS52YWx1ZXMpOmUudmFsdWVzLGk9MCxhPTA7cmV0dXJuIG4uaXNBcmVhVHlwZShlKT8obi5pc1N0ZXBUeXBlKGUpJiYocz1uLmNvbnZlcnRWYWx1ZXNUb1N0ZXAocykpLHQ9by5jdXJ2ZShuLmdldEludGVycG9sYXRlKGUpKShzKSk6KHNbMF0mJihpPW4ueChzWzBdLngpLGE9bi5nZXRZU2NhbGUoZS5pZCkoc1swXS52YWx1ZSkpLHQ9ci5heGlzX3JvdGF0ZWQ/Ik0gIithKyIgIitpOiJNICIraSsiICIrYSksdHx8Ik0gMCAwIn19LGUucHJvdG90eXBlLmdldEFyZWFCYXNlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUuZ2VuZXJhdGVHZXRBcmVhUG9pbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89ZS5fX21heF9fKzEscz1uLmdldFNoYXBlWCgwLG8sZSwhIXQpLGk9bi5nZXRTaGFwZVkoISF0KSxhPW4uZ2V0U2hhcGVPZmZzZXQobi5pc0FyZWFUeXBlLGUsISF0KSxsPXQ/bi5nZXRTdWJZU2NhbGU6bi5nZXRZU2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG89bC5jYWxsKG4sZS5pZCkoMCksdT1hKGUsdCl8fG8sYz1zKGUpLGQ9aShlKTtyZXR1cm4gci5heGlzX3JvdGF0ZWQmJigwPGUudmFsdWUmJmQ8b3x8ZS52YWx1ZTwwJiZvPGQpJiYoZD1vKSxbW2MsdV0sW2MsZC0oby11KV0sW2MsZC0oby11KV0sW2MsdV1dfX0sZS5wcm90b3R5cGUudXBkYXRlQ2lyY2xlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4ubWFpbi5zZWxlY3RBbGwoIi4iK28uY2lyY2xlcykuc2VsZWN0QWxsKCIuIitvLmNpcmNsZSkuZGF0YShuLmxpbmVPclNjYXR0ZXJEYXRhLmJpbmQobikpLHM9ci5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLG4uY2xhc3NDaXJjbGUuYmluZChuKSkuYXR0cigiY3giLGUpLmF0dHIoImN5Iix0KS5hdHRyKCJyIixuLnBvaW50Ui5iaW5kKG4pKS5zdHlsZSgiZmlsbCIsbi5jb2xvcik7bi5tYWluQ2lyY2xlPXMubWVyZ2Uocikuc3R5bGUoIm9wYWNpdHkiLG4uaW5pdGlhbE9wYWNpdHlGb3JDaXJjbGUuYmluZChuKSksci5leGl0KCkuc3R5bGUoIm9wYWNpdHkiLDApfSxlLnByb3RvdHlwZS5yZWRyYXdDaXJjbGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIHM9dGhpcyxpPXMubWFpbi5zZWxlY3RBbGwoIi4iK28uc2VsZWN0ZWRDaXJjbGUpO3JldHVyblsobj9zLm1haW5DaXJjbGUudHJhbnNpdGlvbihyKTpzLm1haW5DaXJjbGUpLnN0eWxlKCJvcGFjaXR5Iix0aGlzLm9wYWNpdHlGb3JDaXJjbGUuYmluZChzKSkuc3R5bGUoImZpbGwiLHMuY29sb3IpLmF0dHIoImN4IixlKS5hdHRyKCJjeSIsdCksKG4/aS50cmFuc2l0aW9uKHIpOmkpLmF0dHIoImN4IixlKS5hdHRyKCJjeSIsdCldfSxlLnByb3RvdHlwZS5jaXJjbGVYPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh8fDA9PT1lLng/dGhpcy54KGUueCk6bnVsbH0sZS5wcm90b3R5cGUudXBkYXRlQ2lyY2xlWT1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzO24uY29uZmlnLmRhdGFfZ3JvdXBzLmxlbmd0aD4wPyhlPW4uZ2V0U2hhcGVJbmRpY2VzKG4uaXNMaW5lVHlwZSksdD1uLmdlbmVyYXRlR2V0TGluZVBvaW50cyhlKSxuLmNpcmNsZVk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4pWzBdWzFdfSk6bi5jaXJjbGVZPWZ1bmN0aW9uKGUpe3JldHVybiBuLmdldFlTY2FsZShlLmlkKShlLnZhbHVlKX19LGUucHJvdG90eXBlLmdldENpcmNsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybih0P24ubWFpbi5zZWxlY3RBbGwoIi4iK28uY2lyY2xlcytuLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KHQpKTpuLm1haW4pLnNlbGVjdEFsbCgiLiIrby5jaXJjbGUrKHkoZSk/Ii0iK2U6IiIpKX0sZS5wcm90b3R5cGUuZXhwYW5kQ2lyY2xlcz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxzPXIucG9pbnRFeHBhbmRlZFIuYmluZChyKTtuJiZyLnVuZXhwYW5kQ2lyY2xlcygpLHIuZ2V0Q2lyY2xlcyhlLHQpLmNsYXNzZWQoby5FWFBBTkRFRCwhMCkuYXR0cigiciIscyl9LGUucHJvdG90eXBlLnVuZXhwYW5kQ2lyY2xlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5wb2ludFIuYmluZCh0KTt0LmdldENpcmNsZXMoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoby5FWFBBTkRFRCl9KS5jbGFzc2VkKG8uRVhQQU5ERUQsITEpLmF0dHIoInIiLG4pfSxlLnByb3RvdHlwZS5wb2ludFI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiB0LmlzU3RlcFR5cGUoZSk/MDpnKG4ucG9pbnRfcik/bi5wb2ludF9yKGUpOm4ucG9pbnRfcn0sZS5wcm90b3R5cGUucG9pbnRFeHBhbmRlZFI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBuLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkP2cobi5wb2ludF9mb2N1c19leHBhbmRfcik/bi5wb2ludF9mb2N1c19leHBhbmRfcihlKTpuLnBvaW50X2ZvY3VzX2V4cGFuZF9yP24ucG9pbnRfZm9jdXNfZXhwYW5kX3I6MS43NSp0LnBvaW50UihlKTp0LnBvaW50UihlKX0sZS5wcm90b3R5cGUucG9pbnRTZWxlY3RSPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gZyhuLnBvaW50X3NlbGVjdF9yKT9uLnBvaW50X3NlbGVjdF9yKGUpOm4ucG9pbnRfc2VsZWN0X3I/bi5wb2ludF9zZWxlY3Rfcjo0KnQucG9pbnRSKGUpfSxlLnByb3RvdHlwZS5pc1dpdGhpbkNpcmNsZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZDMscj1uLm1vdXNlKGUpLG89bi5zZWxlY3QoZSkscz0rby5hdHRyKCJjeCIpLGk9K28uYXR0cigiY3kiKTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHMtclswXSwyKStNYXRoLnBvdyhpLXJbMV0sMikpPHR9LGUucHJvdG90eXBlLmlzV2l0aGluU3RlcD1mdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLmFicyh0LXRoaXMuZDMubW91c2UoZSlbMV0pPDMwfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50V2lkdGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWc7cmV0dXJuIHQuc2l6ZV93aWR0aD90LnNpemVfd2lkdGg6ZS5nZXRQYXJlbnRXaWR0aCgpfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50SGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49dC5zaXplX2hlaWdodD90LnNpemVfaGVpZ2h0OmUuZ2V0UGFyZW50SGVpZ2h0KCk7cmV0dXJuIG4+MD9uOjMyMC8oZS5oYXNUeXBlKCJnYXVnZSIpJiYhdC5nYXVnZV9mdWxsQ2lyY2xlPzI6MSl9LGUucHJvdG90eXBlLmdldEN1cnJlbnRQYWRkaW5nVG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49eSh0LnBhZGRpbmdfdG9wKT90LnBhZGRpbmdfdG9wOjA7cmV0dXJuIGUudGl0bGUmJmUudGl0bGUubm9kZSgpJiYobis9ZS5nZXRUaXRsZVBhZGRpbmcoKSksbn0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudFBhZGRpbmdCb3R0b209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbmZpZztyZXR1cm4geShlLnBhZGRpbmdfYm90dG9tKT9lLnBhZGRpbmdfYm90dG9tOjB9LGUucHJvdG90eXBlLmdldEN1cnJlbnRQYWRkaW5nTGVmdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7cmV0dXJuIHkobi5wYWRkaW5nX2xlZnQpP24ucGFkZGluZ19sZWZ0Om4uYXhpc19yb3RhdGVkPyFuLmF4aXNfeF9zaG93fHxuLmF4aXNfeF9pbm5lcj8xOk1hdGgubWF4KHUodC5nZXRBeGlzV2lkdGhCeUF4aXNJZCgieCIsZSkpLDQwKTohbi5heGlzX3lfc2hvd3x8bi5heGlzX3lfaW5uZXI/dC5heGlzLmdldFlBeGlzTGFiZWxQb3NpdGlvbigpLmlzT3V0ZXI/MzA6MTp1KHQuZ2V0QXhpc1dpZHRoQnlBeGlzSWQoInkiLGUpKX0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPWUuaXNMZWdlbmRSaWdodD9lLmdldExlZ2VuZFdpZHRoKCkrMjA6MDtyZXR1cm4geSh0LnBhZGRpbmdfcmlnaHQpP3QucGFkZGluZ19yaWdodCsxOnQuYXhpc19yb3RhdGVkPzEwK246IXQuYXhpc195Ml9zaG93fHx0LmF4aXNfeTJfaW5uZXI/MituKyhlLmF4aXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpLmlzT3V0ZXI/MjA6MCk6dShlLmdldEF4aXNXaWR0aEJ5QXhpc0lkKCJ5MiIpKStufSxlLnByb3RvdHlwZS5nZXRQYXJlbnRSZWN0VmFsdWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcy5zZWxlY3RDaGFydC5ub2RlKCk7biYmIkJPRFkiIT09bi50YWdOYW1lOyl7dHJ5e3Q9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX1jYXRjaChyKXsid2lkdGgiPT09ZSYmKHQ9bi5vZmZzZXRXaWR0aCl9aWYodClicmVhaztuPW4ucGFyZW50Tm9kZX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0UGFyZW50V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQYXJlbnRSZWN0VmFsdWUoIndpZHRoIil9LGUucHJvdG90eXBlLmdldFBhcmVudEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0Q2hhcnQuc3R5bGUoImhlaWdodCIpO3JldHVybiBlLmluZGV4T2YoInB4Iik+MD8rZS5yZXBsYWNlKCJweCIsIiIpOjB9LGUucHJvdG90eXBlLmdldFN2Z0xlZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLHI9bi5heGlzX3JvdGF0ZWR8fCFuLmF4aXNfcm90YXRlZCYmIW4uYXhpc195X2lubmVyLHM9bi5heGlzX3JvdGF0ZWQ/by5heGlzWDpvLmF4aXNZLGk9dC5tYWluLnNlbGVjdCgiLiIrcykubm9kZSgpLGE9aSYmcj9pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOntyaWdodDowfSxsPXQuc2VsZWN0Q2hhcnQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9dC5oYXNBcmNUeXBlKCksYz1hLnJpZ2h0LWwubGVmdC0odT8wOnQuZ2V0Q3VycmVudFBhZGRpbmdMZWZ0KGUpKTtyZXR1cm4gYz4wP2M6MH0sZS5wcm90b3R5cGUuZ2V0QXhpc1dpZHRoQnlBeGlzSWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5heGlzLmdldExhYmVsUG9zaXRpb25CeUlkKGUpO3JldHVybiBuLmF4aXMuZ2V0TWF4VGlja1dpZHRoKGUsdCkrKHIuaXNJbm5lcj8yMDo0MCl9LGUucHJvdG90eXBlLmdldEhvcml6b250YWxBeGlzSGVpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPTMwO3JldHVybiJ4IiE9PWV8fG4uYXhpc194X3Nob3c/IngiPT09ZSYmbi5heGlzX3hfaGVpZ2h0P24uYXhpc194X2hlaWdodDoieSIhPT1lfHxuLmF4aXNfeV9zaG93PyJ5MiIhPT1lfHxuLmF4aXNfeTJfc2hvdz8oIngiPT09ZSYmIW4uYXhpc19yb3RhdGVkJiZuLmF4aXNfeF90aWNrX3JvdGF0ZSYmKHI9MzArdC5heGlzLmdldE1heFRpY2tXaWR0aChlKSpNYXRoLmNvcyhNYXRoLlBJKig5MC1NYXRoLmFicyhuLmF4aXNfeF90aWNrX3JvdGF0ZSkpLzE4MCkpLCJ5Ij09PWUmJm4uYXhpc19yb3RhdGVkJiZuLmF4aXNfeV90aWNrX3JvdGF0ZSYmKHI9MzArdC5heGlzLmdldE1heFRpY2tXaWR0aChlKSpNYXRoLmNvcyhNYXRoLlBJKig5MC1NYXRoLmFicyhuLmF4aXNfeV90aWNrX3JvdGF0ZSkpLzE4MCkpLHIrKHQuYXhpcy5nZXRMYWJlbFBvc2l0aW9uQnlJZChlKS5pc0lubmVyPzA6MTApKygieTIiPT09ZT8tMTA6MCkpOnQucm90YXRlZF9wYWRkaW5nX3RvcDohbi5sZWdlbmRfc2hvd3x8dC5pc0xlZ2VuZFJpZ2h0fHx0LmlzTGVnZW5kSW5zZXQ/MToxMDo4fSxlLnByb3RvdHlwZS5pbml0QnJ1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuZDM7cmV0dXJuIHQuYnJ1c2g9KHQuY29uZmlnLmF4aXNfcm90YXRlZD9uLmJydXNoWSgpOm4uYnJ1c2hYKCkpLm9uKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgZT1uLmV2ZW50LnNvdXJjZUV2ZW50O2UmJiJ6b29tIj09PWUudHlwZXx8dC5yZWRyYXdGb3JCcnVzaCgpfSkub24oImVuZCIsZnVuY3Rpb24oKXt2YXIgZT1uLmV2ZW50LnNvdXJjZUV2ZW50O2UmJiJ6b29tIj09PWUudHlwZXx8dC5icnVzaC5lbXB0eSgpJiZlJiYiZW5kIiE9PWUudHlwZSYmdC5icnVzaC5jbGVhcigpfSksdC5icnVzaC51cGRhdGVFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgZSxuPXRoaXMuc2NhbGUucmFuZ2UoKTtyZXR1cm4gZT10LmNvbmZpZy5heGlzX3JvdGF0ZWQ/W1swLG5bMF1dLFt0LndpZHRoMixuWzFdXV06W1tuWzBdLDBdLFtuWzFdLHQuaGVpZ2h0Ml1dLHRoaXMuZXh0ZW50KGUpLHRoaXN9LHQuYnJ1c2gudXBkYXRlU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NhbGU9ZSx0aGlzfSx0LmJydXNoLnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZVNjYWxlKGV8fHQuc3ViWCkudXBkYXRlRXh0ZW50KCksdC5jb250ZXh0LnNlbGVjdCgiLiIrby5icnVzaCkuY2FsbCh0aGlzKX0sdC5icnVzaC5jbGVhcj1mdW5jdGlvbigpe3QuY29udGV4dC5zZWxlY3QoIi4iK28uYnJ1c2gpLmNhbGwodC5icnVzaC5tb3ZlLG51bGwpfSx0LmJydXNoLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBuLmJydXNoU2VsZWN0aW9uKHQuY29udGV4dC5zZWxlY3QoIi4iK28uYnJ1c2gpLm5vZGUoKSl9LHQuYnJ1c2guc2VsZWN0aW9uQXNWYWx1ZT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIGU/KHQuY29udGV4dCYmKHI9W3RoaXMuc2NhbGUoZVswXSksdGhpcy5zY2FsZShlWzFdKV0scz10LmNvbnRleHQuc2VsZWN0KCIuIitvLmJydXNoKSxuJiYocz1zLnRyYW5zaXRpb24oKSksdC5icnVzaC5tb3ZlKHMscikpLFtdKToocj10LmJydXNoLnNlbGVjdGlvbigpfHxbMCwwXSxbdGhpcy5zY2FsZS5pbnZlcnQoclswXSksdGhpcy5zY2FsZS5pbnZlcnQoclsxXSldKX0sdC5icnVzaC5lbXB0eT1mdW5jdGlvbigpe3ZhciBlPXQuYnJ1c2guc2VsZWN0aW9uKCk7cmV0dXJuIWV8fGVbMF09PT1lWzFdfSx0LmJydXNoLnVwZGF0ZVNjYWxlKGUpfSxlLnByb3RvdHlwZS5pbml0U3ViY2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmNvbnRleHQ9ZS5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgiY29udGV4dCIpKSxyPXQuc3ViY2hhcnRfc2hvdz8idmlzaWJsZSI6ImhpZGRlbiI7bi5zdHlsZSgidmlzaWJpbGl0eSIsciksbi5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGUuY2xpcFBhdGhGb3JTdWJjaGFydCkuYXR0cigiY2xhc3MiLG8uY2hhcnQpLG4uc2VsZWN0KCIuIitvLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5jaGFydEJhcnMpLG4uc2VsZWN0KCIuIitvLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsby5jaGFydExpbmVzKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLG8uYnJ1c2gpLGUuYXhlcy5zdWJ4PW4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8uYXhpc1gpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoInN1YngiKSkuYXR0cigiY2xpcC1wYXRoIix0LmF4aXNfcm90YXRlZD8iIjplLmNsaXBQYXRoRm9yWEF4aXMpfSxlLnByb3RvdHlwZS5pbml0U3ViY2hhcnRCcnVzaD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5pbml0QnJ1c2goZS5zdWJYKS51cGRhdGVFeHRlbnQoKSxlLmNvbnRleHQuc2VsZWN0KCIuIitvLmJydXNoKS5jYWxsKGUuYnJ1c2gpfSxlLnByb3RvdHlwZS51cGRhdGVUYXJnZXRzRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLHMsaT10aGlzLGE9aS5jb250ZXh0LGw9aS5jb25maWcsdT1pLmNsYXNzQ2hhcnRCYXIuYmluZChpKSxjPWkuY2xhc3NCYXJzLmJpbmQoaSksZD1pLmNsYXNzQ2hhcnRMaW5lLmJpbmQoaSksXz1pLmNsYXNzTGluZXMuYmluZChpKSxwPWkuY2xhc3NBcmVhcy5iaW5kKGkpO2wuc3ViY2hhcnRfc2hvdyYmKHM9YS5zZWxlY3QoIi4iK28uY2hhcnRCYXJzKS5zZWxlY3RBbGwoIi4iK28uY2hhcnRCYXIpLmRhdGEoZSkscj1zLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoIm9wYWNpdHkiLDApLHIubWVyZ2UocykuYXR0cigiY2xhc3MiLHUpLHIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGMpLG49YS5zZWxlY3QoIi4iK28uY2hhcnRMaW5lcykuc2VsZWN0QWxsKCIuIitvLmNoYXJ0TGluZSkuZGF0YShlKSx0PW4uZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgib3BhY2l0eSIsMCksdC5tZXJnZShuKS5hdHRyKCJjbGFzcyIsZCksdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsXyksdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIscCksYS5zZWxlY3RBbGwoIi4iK28uYnJ1c2grIiByZWN0IikuYXR0cihsLmF4aXNfcm90YXRlZD8id2lkdGgiOiJoZWlnaHQiLGwuYXhpc19yb3RhdGVkP2kud2lkdGgyOmkuaGVpZ2h0MikpfSxlLnByb3RvdHlwZS51cGRhdGVCYXJGb3JTdWJjaGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb250ZXh0LnNlbGVjdEFsbCgiLiIrby5iYXJzKS5zZWxlY3RBbGwoIi4iK28uYmFyKS5kYXRhKHQuYmFyRGF0YS5iaW5kKHQpKSxyPW4uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsdC5jbGFzc0Jhci5iaW5kKHQpKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLnN0eWxlKCJmaWxsIix0LmNvbG9yKTtuLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHQuY29udGV4dEJhcj1yLm1lcmdlKG4pLnN0eWxlKCJvcGFjaXR5Iix0LmluaXRpYWxPcGFjaXR5LmJpbmQodCkpfSxlLnByb3RvdHlwZS5yZWRyYXdCYXJGb3JTdWJjaGFydD1mdW5jdGlvbihlLHQsbil7KHQ/dGhpcy5jb250ZXh0QmFyLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKS5kdXJhdGlvbihuKTp0aGlzLmNvbnRleHRCYXIpLmF0dHIoImQiLGUpLnN0eWxlKCJvcGFjaXR5IiwxKX0sZS5wcm90b3R5cGUudXBkYXRlTGluZUZvclN1YmNoYXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbnRleHQuc2VsZWN0QWxsKCIuIitvLmxpbmVzKS5zZWxlY3RBbGwoIi4iK28ubGluZSkuZGF0YSh0LmxpbmVEYXRhLmJpbmQodCkpLHI9bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIix0LmNsYXNzTGluZS5iaW5kKHQpKS5zdHlsZSgic3Ryb2tlIix0LmNvbG9yKTtuLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHQuY29udGV4dExpbmU9ci5tZXJnZShuKS5zdHlsZSgib3BhY2l0eSIsdC5pbml0aWFsT3BhY2l0eS5iaW5kKHQpKX0sZS5wcm90b3R5cGUucmVkcmF3TGluZUZvclN1YmNoYXJ0PWZ1bmN0aW9uKGUsdCxuKXsodD90aGlzLmNvbnRleHRMaW5lLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKS5kdXJhdGlvbihuKTp0aGlzLmNvbnRleHRMaW5lKS5hdHRyKCJkIixlKS5zdHlsZSgib3BhY2l0eSIsMSl9LGUucHJvdG90eXBlLnVwZGF0ZUFyZWFGb3JTdWJjaGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5kMyxyPXQuY29udGV4dC5zZWxlY3RBbGwoIi4iK28uYXJlYXMpLnNlbGVjdEFsbCgiLiIrby5hcmVhKS5kYXRhKHQubGluZURhdGEuYmluZCh0KSkscz1yLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLHQuY2xhc3NBcmVhLmJpbmQodCkpLnN0eWxlKCJmaWxsIix0LmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4gdC5vcmdBcmVhT3BhY2l0eT0rbi5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKSwwfSk7ci5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSx0LmNvbnRleHRBcmVhPXMubWVyZ2Uocikuc3R5bGUoIm9wYWNpdHkiLDApfSxlLnByb3RvdHlwZS5yZWRyYXdBcmVhRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oZSx0LG4peyh0P3RoaXMuY29udGV4dEFyZWEudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpLmR1cmF0aW9uKG4pOnRoaXMuY29udGV4dEFyZWEpLmF0dHIoImQiLGUpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsdGhpcy5vcmdBcmVhT3BhY2l0eSl9LGUucHJvdG90eXBlLnJlZHJhd1N1YmNoYXJ0PWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe3ZhciBhLGwsdSxjPXRoaXMsZD1jLmQzLF89Yy5jb25maWc7Yy5jb250ZXh0LnN0eWxlKCJ2aXNpYmlsaXR5IixfLnN1YmNoYXJ0X3Nob3c/InZpc2libGUiOiJoaWRkZW4iKSxfLnN1YmNoYXJ0X3Nob3cmJihkLmV2ZW50JiYiem9vbSI9PT1kLmV2ZW50LnR5cGUmJmMuYnJ1c2guc2VsZWN0aW9uQXNWYWx1ZShjLngub3JnRG9tYWluKCkpLGUmJihjLmJydXNoLmVtcHR5KCl8fGMuYnJ1c2guc2VsZWN0aW9uQXNWYWx1ZShjLngub3JnRG9tYWluKCkpLGE9Yy5nZW5lcmF0ZURyYXdBcmVhKG8sITApLGw9Yy5nZW5lcmF0ZURyYXdCYXIocywhMCksdT1jLmdlbmVyYXRlRHJhd0xpbmUoaSwhMCksYy51cGRhdGVCYXJGb3JTdWJjaGFydChuKSxjLnVwZGF0ZUxpbmVGb3JTdWJjaGFydChuKSxjLnVwZGF0ZUFyZWFGb3JTdWJjaGFydChuKSxjLnJlZHJhd0JhckZvclN1YmNoYXJ0KGwsbixuKSxjLnJlZHJhd0xpbmVGb3JTdWJjaGFydCh1LG4sbiksYy5yZWRyYXdBcmVhRm9yU3ViY2hhcnQoYSxuLG4pKSl9LGUucHJvdG90eXBlLnJlZHJhd0ZvckJydXNoPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC54LHI9dC5kMzt0LnJlZHJhdyh7d2l0aFRyYW5zaXRpb246ITEsd2l0aFk6dC5jb25maWcuem9vbV9yZXNjYWxlLHdpdGhTdWJjaGFydDohMSx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoRXZlbnRSZWN0OiExLHdpdGhEaW1lbnNpb246ITF9KSxlPXIuZXZlbnQuc2VsZWN0aW9ufHx0LmJydXNoLnNjYWxlLnJhbmdlKCksdC5tYWluLnNlbGVjdCgiLiIrby5ldmVudFJlY3QpLmNhbGwodC56b29tLnRyYW5zZm9ybSxyLnpvb21JZGVudGl0eS5zY2FsZSh0LndpZHRoLyhlWzFdLWVbMF0pKS50cmFuc2xhdGUoLWVbMF0sMCkpLHQuY29uZmlnLnN1YmNoYXJ0X29uYnJ1c2guY2FsbCh0LmFwaSxuLm9yZ0RvbWFpbigpKX0sZS5wcm90b3R5cGUudHJhbnNmb3JtQ29udGV4dD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpczt0JiZ0LmF4aXNTdWJYP249dC5heGlzU3ViWDoobj1yLmNvbnRleHQuc2VsZWN0KCIuIitvLmF4aXNYKSxlJiYobj1uLnRyYW5zaXRpb24oKSkpLHIuY29udGV4dC5hdHRyKCJ0cmFuc2Zvcm0iLHIuZ2V0VHJhbnNsYXRlKCJjb250ZXh0IikpLG4uYXR0cigidHJhbnNmb3JtIixyLmdldFRyYW5zbGF0ZSgic3VieCIpKX0sZS5wcm90b3R5cGUuZ2V0RGVmYXVsdFNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPWcodC5heGlzX3hfc2VsZWN0aW9uKT90LmF4aXNfeF9zZWxlY3Rpb24oZS5nZXRYRG9tYWluKGUuZGF0YS50YXJnZXRzKSk6dC5heGlzX3hfc2VsZWN0aW9uO3JldHVybiBlLmlzVGltZVNlcmllcygpJiYobj1bZS5wYXJzZURhdGUoblswXSksZS5wYXJzZURhdGUoblsxXSldKSxufSxlLnByb3RvdHlwZS5pbml0VGV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5tYWluLnNlbGVjdCgiLiIrby5jaGFydCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8uY2hhcnRUZXh0cyksZS5tYWluVGV4dD1lLmQzLnNlbGVjdEFsbChbXSl9LGUucHJvdG90eXBlLnVwZGF0ZVRhcmdldHNGb3JUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNsYXNzQ2hhcnRUZXh0LmJpbmQodCkscj10LmNsYXNzVGV4dHMuYmluZCh0KSxzPXQuY2xhc3NGb2N1cy5iaW5kKHQpLGk9dC5tYWluLnNlbGVjdCgiLiIrby5jaGFydFRleHRzKS5zZWxlY3RBbGwoIi4iK28uY2hhcnRUZXh0KS5kYXRhKGUpLGE9aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixuKS5zdHlsZSgib3BhY2l0eSIsMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO2EuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHIpLGEubWVyZ2UoaSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBuKGUpK3MoZSl9KX0sZS5wcm90b3R5cGUudXBkYXRlVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxzPXIuY29uZmlnLGk9ci5iYXJPckxpbmVEYXRhLmJpbmQociksYT1yLmNsYXNzVGV4dC5iaW5kKHIpLGw9ci5tYWluLnNlbGVjdEFsbCgiLiIrby50ZXh0cykuc2VsZWN0QWxsKCIuIitvLnRleHQpLmRhdGEoaSksdT1sLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGEpLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbihlKXtyZXR1cm4gcy5heGlzX3JvdGF0ZWQ/ZS52YWx1ZTwwPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9KS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLmF0dHIoIngiLGUpLmF0dHIoInkiLHQpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlKXtyZXR1cm4gci5jb2xvcihlKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApO3IubWFpblRleHQ9dS5tZXJnZShsKS50ZXh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5kYXRhTGFiZWxGb3JtYXQoZS5pZCkoZS52YWx1ZSxlLmlkLHQsbil9KSxsLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCl9LGUucHJvdG90eXBlLnJlZHJhd1RleHQ9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm5bKHI/dGhpcy5tYWluVGV4dC50cmFuc2l0aW9uKG8pOnRoaXMubWFpblRleHQpLmF0dHIoIngiLGUpLmF0dHIoInkiLHQpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixuPzA6dGhpcy5vcGFjaXR5Rm9yVGV4dC5iaW5kKHRoaXMpKV19LGUucHJvdG90eXBlLmdldFRleHRSZWN0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPXRoaXMuZDMuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJjMyIsITApLHM9by5hcHBlbmQoInN2ZyIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoInBvc2l0aW9uIiwiZml4ZWQiKS5zdHlsZSgidG9wIiwwKS5zdHlsZSgibGVmdCIsMCksaT10aGlzLmQzLnNlbGVjdChuKS5zdHlsZSgiZm9udCIpO3JldHVybiBzLnNlbGVjdEFsbCgiLmR1bW15IikuZGF0YShbZV0pLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh0fHwiIiwhMCkuc3R5bGUoImZvbnQiLGkpLnRleHQoZSkuZWFjaChmdW5jdGlvbigpe3I9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pLG8ucmVtb3ZlKCkscn0sZS5wcm90b3R5cGUuZ2VuZXJhdGVYWUZvclRleHQ9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcyxzPW8uZ2VuZXJhdGVHZXRBcmVhUG9pbnRzKGUsITEpLGk9by5nZW5lcmF0ZUdldEJhclBvaW50cyh0LCExKSxhPW8uZ2VuZXJhdGVHZXRMaW5lUG9pbnRzKG4sITEpLGw9cj9vLmdldFhGb3JUZXh0Om8uZ2V0WUZvclRleHQ7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49by5pc0FyZWFUeXBlKGUpP3M6by5pc0JhclR5cGUoZSk/aTphO3JldHVybiBsLmNhbGwobyxuKGUsdCksZSx0aGlzKX19LGUucHJvdG90eXBlLmdldFhGb3JUZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHM9dGhpcyxpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHMuY29uZmlnLmF4aXNfcm90YXRlZD8obz1zLmlzQmFyVHlwZSh0KT80OjYscj1lWzJdWzFdK28qKHQudmFsdWU8MD8tMToxKSk6cj1zLmhhc1R5cGUoImJhciIpPyhlWzJdWzBdK2VbMF1bMF0pLzI6ZVswXVswXSxudWxsPT09dC52YWx1ZSYmKHI+cy53aWR0aD9yPXMud2lkdGgtaS53aWR0aDpyPDAmJihyPTQpKSxyfSxlLnByb3RvdHlwZS5nZXRZRm9yVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz10aGlzLHM9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gby5jb25maWcuYXhpc19yb3RhdGVkP3I9KGVbMF1bMF0rZVsyXVswXSsuNipzLmhlaWdodCkvMjoocj1lWzJdWzFdLHQudmFsdWU8MHx8MD09PXQudmFsdWUmJiFvLmhhc1Bvc2l0aXZlVmFsdWU/KHIrPXMuaGVpZ2h0LG8uaXNCYXJUeXBlKHQpJiZvLmlzU2FmYXJpKCk/ci09Mzohby5pc0JhclR5cGUodCkmJm8uaXNDaHJvbWUoKSYmKHIrPTMpKTpyKz1vLmlzQmFyVHlwZSh0KT8tMzotNiksbnVsbCE9PXQudmFsdWV8fG8uY29uZmlnLmF4aXNfcm90YXRlZHx8KHI8cy5oZWlnaHQ/cj1zLmhlaWdodDpyPnRoaXMuaGVpZ2h0JiYocj10aGlzLmhlaWdodC00KSkscn0sZS5wcm90b3R5cGUuaW5pdFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLnRpdGxlPWUuc3ZnLmFwcGVuZCgidGV4dCIpLnRleHQoZS5jb25maWcudGl0bGVfdGV4dCkuYXR0cigiY2xhc3MiLGUuQ0xBU1MudGl0bGUpfSxlLnByb3RvdHlwZS5yZWRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS50aXRsZS5hdHRyKCJ4IixlLnhGb3JUaXRsZS5iaW5kKGUpKS5hdHRyKCJ5IixlLnlGb3JUaXRsZS5iaW5kKGUpKX0sZS5wcm90b3R5cGUueEZvclRpdGxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49dC50aXRsZV9wb3NpdGlvbnx8ImxlZnQiO3JldHVybiBuLmluZGV4T2YoInJpZ2h0Iik+PTA/ZS5jdXJyZW50V2lkdGgtZS5nZXRUZXh0UmVjdChlLnRpdGxlLm5vZGUoKS50ZXh0Q29udGVudCxlLkNMQVNTLnRpdGxlLGUudGl0bGUubm9kZSgpKS53aWR0aC10LnRpdGxlX3BhZGRpbmcucmlnaHQ6bi5pbmRleE9mKCJjZW50ZXIiKT49MD8oZS5jdXJyZW50V2lkdGgtZS5nZXRUZXh0UmVjdChlLnRpdGxlLm5vZGUoKS50ZXh0Q29udGVudCxlLkNMQVNTLnRpdGxlLGUudGl0bGUubm9kZSgpKS53aWR0aCkvMjp0LnRpdGxlX3BhZGRpbmcubGVmdH0sZS5wcm90b3R5cGUueUZvclRpdGxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5jb25maWcudGl0bGVfcGFkZGluZy50b3ArZS5nZXRUZXh0UmVjdChlLnRpdGxlLm5vZGUoKS50ZXh0Q29udGVudCxlLkNMQVNTLnRpdGxlLGUudGl0bGUubm9kZSgpKS5oZWlnaHR9LGUucHJvdG90eXBlLmdldFRpdGxlUGFkZGluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUueUZvclRpdGxlKCkrZS5jb25maWcudGl0bGVfcGFkZGluZy5ib3R0b219LGUucHJvdG90eXBlLmluaXRUb29sdGlwPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC5jb25maWc7aWYodC50b29sdGlwPXQuc2VsZWN0Q2hhcnQuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIixvLnRvb2x0aXBDb250YWluZXIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLG4udG9vbHRpcF9pbml0X3Nob3cpe2lmKHQuaXNUaW1lU2VyaWVzKCkmJmIobi50b29sdGlwX2luaXRfeCkpe2ZvcihuLnRvb2x0aXBfaW5pdF94PXQucGFyc2VEYXRlKG4udG9vbHRpcF9pbml0X3gpLGU9MDtlPHQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5sZW5ndGgmJnQuZGF0YS50YXJnZXRzWzBdLnZhbHVlc1tlXS54LW4udG9vbHRpcF9pbml0X3ghPTA7ZSsrKTtuLnRvb2x0aXBfaW5pdF94PWV9dC50b29sdGlwLmh0bWwobi50b29sdGlwX2NvbnRlbnRzLmNhbGwodCx0LmRhdGEudGFyZ2V0cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYWRkTmFtZShlLnZhbHVlc1tuLnRvb2x0aXBfaW5pdF94XSl9KSx0LmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCksdC5nZXRZRm9ybWF0KHQuaGFzQXJjVHlwZSgpKSx0LmNvbG9yKSksdC50b29sdGlwLnN0eWxlKCJ0b3AiLG4udG9vbHRpcF9pbml0X3Bvc2l0aW9uLnRvcCkuc3R5bGUoImxlZnQiLG4udG9vbHRpcF9pbml0X3Bvc2l0aW9uLmxlZnQpLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKX19LGUucHJvdG90eXBlLmdldFRvb2x0aXBTb3J0RnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWc7aWYoMCE9PXQuZGF0YV9ncm91cHMubGVuZ3RoJiZ2b2lkIDA9PT10LnRvb2x0aXBfb3JkZXIpe3ZhciBuPWUub3JkZXJUYXJnZXRzKGUuZGF0YS50YXJnZXRzKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KTtyZXR1cm4oZS5pc09yZGVyQXNjKCl8fGUuaXNPcmRlckRlc2MoKSkmJihuPW4ucmV2ZXJzZSgpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmluZGV4T2YoZS5pZCktbi5pbmRleE9mKHQuaWQpfX12YXIgcj10LnRvb2x0aXBfb3JkZXI7dm9pZCAwPT09ciYmKHI9dC5kYXRhX29yZGVyKTt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gZT9lLnZhbHVlOm51bGx9O2lmKGIocikmJiJhc2MiPT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBvKGUpLW8odCl9O2lmKGIocikmJiJkZXNjIj09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0KS1vKGUpfTtpZihnKHIpKXt2YXIgcz1yO3JldHVybiB2b2lkIDA9PT10LnRvb2x0aXBfb3JkZXImJihzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZT97aWQ6ZS5pZCx2YWx1ZXM6W2VdfTpudWxsLHQ/e2lkOnQuaWQsdmFsdWVzOlt0XX06bnVsbCl9KSxzfXJldHVybiBmKHIpP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHIuaW5kZXhPZihlLmlkKS1yLmluZGV4T2YodC5pZCl9OnZvaWQgMH0sZS5wcm90b3R5cGUuZ2V0VG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scyxpLGEsbCx1LGM9dGhpcyxkPWMuY29uZmlnLF89ZC50b29sdGlwX2Zvcm1hdF90aXRsZXx8dCxwPWQudG9vbHRpcF9mb3JtYXRfbmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGY9ZC50b29sdGlwX2Zvcm1hdF92YWx1ZXx8bixtPXRoaXMuZ2V0VG9vbHRpcFNvcnRGdW5jdGlvbigpO2ZvcihtJiZlLnNvcnQobSkscz0wO3M8ZS5sZW5ndGg7cysrKWlmKGVbc10mJihlW3NdLnZhbHVlfHwwPT09ZVtzXS52YWx1ZSkmJihvfHwoaT1UKF8/XyhlW3NdLngpOmVbc10ueCksbz0iPHRhYmxlIGNsYXNzPSciK2MuQ0xBU1MudG9vbHRpcCsiJz4iKyhpfHwwPT09aT8iPHRyPjx0aCBjb2xzcGFuPScyJz4iK2krIjwvdGg+PC90cj4iOiIiKSksdm9pZCAwIT09KGE9VChmKGVbc10udmFsdWUsZVtzXS5yYXRpbyxlW3NdLmlkLGVbc10uaW5kZXgsZSkpKSkpe2lmKG51bGw9PT1lW3NdLm5hbWUpY29udGludWU7bD1UKHAoZVtzXS5uYW1lLGVbc10ucmF0aW8sZVtzXS5pZCxlW3NdLmluZGV4KSksdT1jLmxldmVsQ29sb3I/Yy5sZXZlbENvbG9yKGVbc10udmFsdWUpOnIoZVtzXS5pZCksbys9Ijx0ciBjbGFzcz0nIitjLkNMQVNTLnRvb2x0aXBOYW1lKyItIitjLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGVbc10uaWQpKyInPiIsbys9Ijx0ZCBjbGFzcz0nbmFtZSc+PHNwYW4gc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Iit1KyInPjwvc3Bhbj4iK2wrIjwvdGQ+IixvKz0iPHRkIGNsYXNzPSd2YWx1ZSc+IithKyI8L3RkPiIsbys9IjwvdHI+In1yZXR1cm4gbysiPC90YWJsZT4ifSxlLnByb3RvdHlwZS50b29sdGlwUG9zaXRpb249ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scyxpLGEsbCx1PXRoaXMsYz11LmNvbmZpZyxkPXUuZDMsXz11Lmhhc0FyY1R5cGUoKSxwPWQubW91c2Uocik7cmV0dXJuIF8/KHM9KHUud2lkdGgtKHUuaXNMZWdlbmRSaWdodD91LmdldExlZ2VuZFdpZHRoKCk6MCkpLzIrcFswXSxhPSh1Lmhhc1R5cGUoImdhdWdlIik/dS5oZWlnaHQ6dS5oZWlnaHQvMikrcFsxXSsyMCk6KG89dS5nZXRTdmdMZWZ0KCEwKSxjLmF4aXNfcm90YXRlZD8ocz1vK3BbMF0rMTAwLGk9cyt0LGw9dS5jdXJyZW50V2lkdGgtdS5nZXRDdXJyZW50UGFkZGluZ1JpZ2h0KCksYT11LngoZVswXS54KSsyMCk6KHM9byt1LmdldEN1cnJlbnRQYWRkaW5nTGVmdCghMCkrdS54KGVbMF0ueCkrMjAsaT1zK3QsbD1vK3UuY3VycmVudFdpZHRoLXUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGE9cFsxXSsxNSksaT5sJiYocy09aS1sKzIwKSxhK24+dS5jdXJyZW50SGVpZ2h0JiYoYS09biszMCkpLGE8MCYmKGE9MCkse3RvcDphLGxlZnQ6c319LGUucHJvdG90eXBlLnNob3dUb29sdGlwPWZ1bmN0aW9uKHQsbil7dmFyIHIsbyxzLGk9dGhpcyxhPWkuY29uZmlnLGw9aS5oYXNBcmNUeXBlKCksdT10LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmeShlLnZhbHVlKX0pLGM9YS50b29sdGlwX3Bvc2l0aW9ufHxlLnByb3RvdHlwZS50b29sdGlwUG9zaXRpb247MCE9PXUubGVuZ3RoJiZhLnRvb2x0aXBfc2hvdyYmKGkudG9vbHRpcC5odG1sKGEudG9vbHRpcF9jb250ZW50cy5jYWxsKGksdCxpLmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCksaS5nZXRZRm9ybWF0KGwpLGkuY29sb3IpKS5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikscj1pLnRvb2x0aXAucHJvcGVydHkoIm9mZnNldFdpZHRoIiksbz1pLnRvb2x0aXAucHJvcGVydHkoIm9mZnNldEhlaWdodCIpLHM9Yy5jYWxsKHRoaXMsdSxyLG8sbiksaS50b29sdGlwLnN0eWxlKCJ0b3AiLHMudG9wKyJweCIpLnN0eWxlKCJsZWZ0IixzLmxlZnQrInB4IikpfSxlLnByb3RvdHlwZS5oaWRlVG9vbHRpcD1mdW5jdGlvbigpe3RoaXMudG9vbHRpcC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKX0sZS5wcm90b3R5cGUuc2V0VGFyZ2V0VHlwZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZztuLm1hcFRvVGFyZ2V0SWRzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7bi53aXRob3V0RmFkZUluW2VdPXQ9PT1yLmRhdGFfdHlwZXNbZV0sci5kYXRhX3R5cGVzW2VdPXR9KSxlfHwoci5kYXRhX3R5cGU9dCl9LGUucHJvdG90eXBlLmhhc1R5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcuZGF0YV90eXBlcyxvPSExO3JldHVybiB0PXR8fG4uZGF0YS50YXJnZXRzLHQmJnQubGVuZ3RoP3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1yW3QuaWRdOyhuJiZuLmluZGV4T2YoZSk+PTB8fCFuJiYibGluZSI9PT1lKSYmKG89ITApfSk6T2JqZWN0LmtleXMocikubGVuZ3RoP09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT09PWUmJihvPSEwKX0pOm89bi5jb25maWcuZGF0YV90eXBlPT09ZSxvfSxlLnByb3RvdHlwZS5oYXNBcmNUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1R5cGUoInBpZSIsZSl8fHRoaXMuaGFzVHlwZSgiZG9udXQiLGUpfHx0aGlzLmhhc1R5cGUoImdhdWdlIixlKX0sZS5wcm90b3R5cGUuaXNMaW5lVHlwZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbmZpZyxuPWIoZSk/ZTplLmlkO3JldHVybiF0LmRhdGFfdHlwZXNbbl18fFsibGluZSIsInNwbGluZSIsImFyZWEiLCJhcmVhLXNwbGluZSIsInN0ZXAiLCJhcmVhLXN0ZXAiXS5pbmRleE9mKHQuZGF0YV90eXBlc1tuXSk+PTB9LGUucHJvdG90eXBlLmlzU3RlcFR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YihlKT9lOmUuaWQ7cmV0dXJuWyJzdGVwIiwiYXJlYS1zdGVwIl0uaW5kZXhPZih0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW3RdKT49MH0sZS5wcm90b3R5cGUuaXNTcGxpbmVUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWIoZSk/ZTplLmlkO3JldHVyblsic3BsaW5lIiwiYXJlYS1zcGxpbmUiXS5pbmRleE9mKHRoaXMuY29uZmlnLmRhdGFfdHlwZXNbdF0pPj0wfSxlLnByb3RvdHlwZS5pc0FyZWFUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWIoZSk/ZTplLmlkO3JldHVyblsiYXJlYSIsImFyZWEtc3BsaW5lIiwiYXJlYS1zdGVwIl0uaW5kZXhPZih0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW3RdKT49MH0sZS5wcm90b3R5cGUuaXNCYXJUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWIoZSk/ZTplLmlkO3JldHVybiJiYXIiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0sZS5wcm90b3R5cGUuaXNTY2F0dGVyVHlwZT1mdW5jdGlvbihlKXt2YXIgdD1iKGUpP2U6ZS5pZDtyZXR1cm4ic2NhdHRlciI9PT10aGlzLmNvbmZpZy5kYXRhX3R5cGVzW3RdfSxlLnByb3RvdHlwZS5pc1BpZVR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YihlKT9lOmUuaWQ7cmV0dXJuInBpZSI9PT10aGlzLmNvbmZpZy5kYXRhX3R5cGVzW3RdfSxlLnByb3RvdHlwZS5pc0dhdWdlVHlwZT1mdW5jdGlvbihlKXt2YXIgdD1iKGUpP2U6ZS5pZDtyZXR1cm4iZ2F1Z2UiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0sZS5wcm90b3R5cGUuaXNEb251dFR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YihlKT9lOmUuaWQ7cmV0dXJuImRvbnV0Ij09PXRoaXMuY29uZmlnLmRhdGFfdHlwZXNbdF19LGUucHJvdG90eXBlLmlzQXJjVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc1BpZVR5cGUoZSl8fHRoaXMuaXNEb251dFR5cGUoZSl8fHRoaXMuaXNHYXVnZVR5cGUoZSl9LGUucHJvdG90eXBlLmxpbmVEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoZSk/W2VdOltdfSxlLnByb3RvdHlwZS5hcmNEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzQXJjVHlwZShlLmRhdGEpP1tlXTpbXX0sZS5wcm90b3R5cGUuYmFyRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc0JhclR5cGUoZSk/ZS52YWx1ZXM6W119LGUucHJvdG90eXBlLmxpbmVPclNjYXR0ZXJEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoZSl8fHRoaXMuaXNTY2F0dGVyVHlwZShlKT9lLnZhbHVlczpbXX0sZS5wcm90b3R5cGUuYmFyT3JMaW5lRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc0JhclR5cGUoZSl8fHRoaXMuaXNMaW5lVHlwZShlKT9lLnZhbHVlczpbXX0sZS5wcm90b3R5cGUuaXNTYWZhcmk9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4gZS5pbmRleE9mKCJTYWZhcmkiKT49MCYmZS5pbmRleE9mKCJDaHJvbWUiKTwwfSxlLnByb3RvdHlwZS5pc0Nocm9tZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUiKT49MH0sZS5wcm90b3R5cGUuaW5pdFpvb209ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10LmQzLHI9dC5jb25maWc7cmV0dXJuIHQuem9vbT1uLnpvb20oKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7aWYoInNjcm9sbCI9PT1yLnpvb21fdHlwZSl7dmFyIG89bi5ldmVudC5zb3VyY2VFdmVudDtvJiYiYnJ1c2giPT09by50eXBlfHwoZT1vLHIuem9vbV9vbnpvb21zdGFydC5jYWxsKHQuYXBpLG8pKX19KS5vbigiem9vbSIsZnVuY3Rpb24oKXtpZigic2Nyb2xsIj09PXIuem9vbV90eXBlKXt2YXIgZT1uLmV2ZW50LnNvdXJjZUV2ZW50O2UmJiJicnVzaCI9PT1lLnR5cGV8fCh0LnJlZHJhd0Zvclpvb20oKSxyLnpvb21fb256b29tLmNhbGwodC5hcGksdC54Lm9yZ0RvbWFpbigpKSl9fSkub24oImVuZCIsZnVuY3Rpb24oKXtpZigic2Nyb2xsIj09PXIuem9vbV90eXBlKXt2YXIgbz1uLmV2ZW50LnNvdXJjZUV2ZW50O28mJiJicnVzaCI9PT1vLnR5cGV8fG8mJmUuY2xpZW50WD09PW8uY2xpZW50WCYmZS5jbGllbnRZPT09by5jbGllbnRZfHxyLnpvb21fb256b29tZW5kLmNhbGwodC5hcGksdC54Lm9yZ0RvbWFpbigpKX19KSx0Lnpvb20udXBkYXRlRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZXZlbnQmJm4uZXZlbnQudHJhbnNmb3JtJiZ0LnguZG9tYWluKG4uZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVYKHQuc3ViWCkuZG9tYWluKCkpLHRoaXN9LHQuem9vbS51cGRhdGVFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY2FsZUV4dGVudChbMSwxLzBdKS50cmFuc2xhdGVFeHRlbnQoW1swLDBdLFt0LndpZHRoLHQuaGVpZ2h0XV0pLmV4dGVudChbWzAsMF0sW3Qud2lkdGgsdC5oZWlnaHRdXSksdGhpc30sdC56b29tLnVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZUV4dGVudCgpLnVwZGF0ZURvbWFpbigpfSx0Lnpvb20udXBkYXRlRXh0ZW50KCl9LGUucHJvdG90eXBlLnpvb21UcmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPVt0LngoZVswXSksdC54KGVbMV0pXTtyZXR1cm4gdC5kMy56b29tSWRlbnRpdHkuc2NhbGUodC53aWR0aC8oblsxXS1uWzBdKSkudHJhbnNsYXRlKC1uWzBdLDApfSxlLnByb3RvdHlwZS5pbml0RHJhZ1pvb209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5kMyxuPWUuY29uZmlnLHI9ZS5jb250ZXh0PWUuc3ZnLHM9ZS5tYXJnaW4ubGVmdCsyMC41LGk9ZS5tYXJnaW4udG9wKy41O2lmKCJkcmFnIj09PW4uem9vbV90eXBlJiZuLnpvb21fZW5hYmxlZCl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLnguaW52ZXJ0KHQpfSl9LGw9ZS5kcmFnWm9vbUJydXNoPXQuYnJ1c2hYKCkub24oInN0YXJ0IixmdW5jdGlvbigpe2UuYXBpLnVuem9vbSgpLGUuc3ZnLnNlbGVjdCgiLiIrby5kcmFnWm9vbSkuY2xhc3NlZCgiZGlzYWJsZWQiLCExKSxuLnpvb21fb256b29tc3RhcnQuY2FsbChlLmFwaSx0LmV2ZW50LnNvdXJjZUV2ZW50KX0pLm9uKCJicnVzaCIsZnVuY3Rpb24oKXtuLnpvb21fb256b29tLmNhbGwoZS5hcGksYSh0LmV2ZW50LnNlbGVjdGlvbikpfSkub24oImVuZCIsZnVuY3Rpb24oKXtpZihudWxsIT10LmV2ZW50LnNlbGVjdGlvbil7dmFyIHI9YSh0LmV2ZW50LnNlbGVjdGlvbik7bi56b29tX2Rpc2FibGVEZWZhdWx0QmVoYXZpb3J8fGUuYXBpLnpvb20ociksZS5zdmcuc2VsZWN0KCIuIitvLmRyYWdab29tKS5jbGFzc2VkKCJkaXNhYmxlZCIsITApLG4uem9vbV9vbnpvb21lbmQuY2FsbChlLmFwaSxyKX19KTtyLmFwcGVuZCgiZyIpLmNsYXNzZWQoby5kcmFnWm9vbSwhMCkuYXR0cigiY2xpcC1wYXRoIixlLmNsaXBQYXRoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzKyIsIitpKyIpIikuY2FsbChsKX19LGUucHJvdG90eXBlLmdldFpvb21Eb21haW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmQzO3JldHVybltuLm1pbihbZS5vcmdYRG9tYWluWzBdLHQuem9vbV94X21pbl0pLG4ubWF4KFtlLm9yZ1hEb21haW5bMV0sdC56b29tX3hfbWF4XSldfSxlLnByb3RvdHlwZS5yZWRyYXdGb3Jab29tPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZDMsbj1lLmNvbmZpZyxyPWUuem9vbSxvPWUueDtuLnpvb21fZW5hYmxlZCYmMCE9PWUuZmlsdGVyVGFyZ2V0c1RvU2hvdyhlLmRhdGEudGFyZ2V0cykubGVuZ3RoJiYoci51cGRhdGUoKSxuLnpvb21fZGlzYWJsZURlZmF1bHRCZWhhdmlvcnx8KGUuaXNDYXRlZ29yaXplZCgpJiZvLm9yZ0RvbWFpbigpWzBdPT09ZS5vcmdYRG9tYWluWzBdJiZvLmRvbWFpbihbZS5vcmdYRG9tYWluWzBdLTFlLTEwLG8ub3JnRG9tYWluKClbMV1dKSxlLnJlZHJhdyh7d2l0aFRyYW5zaXRpb246ITEsd2l0aFk6bi56b29tX3Jlc2NhbGUsd2l0aFN1YmNoYXJ0OiExLHdpdGhFdmVudFJlY3Q6ITEsd2l0aERpbWVuc2lvbjohMX0pLHQuZXZlbnQuc291cmNlRXZlbnQmJiJtb3VzZW1vdmUiPT09dC5ldmVudC5zb3VyY2VFdmVudC50eXBlJiYoZS5jYW5jZWxDbGljaz0hMCkpKX0sQ30pfSwiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbzsvKiEKICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi4KICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQogIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKKi8KIWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtpZihyKXt2YXIgbz10eXBlb2YgcjtpZigic3RyaW5nIj09PW98fCJudW1iZXIiPT09byllLnB1c2godGhpcyYmdGhpc1tyXXx8cik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpKWUucHVzaChuLmFwcGx5KHRoaXMscikpO2Vsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgaSBpbiByKXMuY2FsbChyLGkpJiZyW2ldJiZlLnB1c2godGhpcyYmdGhpc1tpXXx8aSl9fXJldHVybiBlLmpvaW4oIiAiKX12YXIgcz17fS5oYXNPd25Qcm9wZXJ0eTt2b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPW46KHI9W10sdm9pZCAwIT09KG89ZnVuY3Rpb24oKXtyZXR1cm4gbn0uYXBwbHkodCxyKSkmJihlLmV4cG9ydHM9bykpfSgpfSwiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87LyohCiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uCiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCiovCiFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07aWYocil7dmFyIG89dHlwZW9mIHI7aWYoInN0cmluZyI9PT1vfHwibnVtYmVyIj09PW8pZS5wdXNoKHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSllLnB1c2gobi5hcHBseShudWxsLHIpKTtlbHNlIGlmKCJvYmplY3QiPT09bylmb3IodmFyIGkgaW4gcilzLmNhbGwocixpKSYmcltpXSYmZS5wdXNoKGkpfX1yZXR1cm4gZS5qb2luKCIgIil9dmFyIHM9e30uaGFzT3duUHJvcGVydHk7dm9pZCAwIT09ZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1uOihyPVtdLHZvaWQgMCE9PShvPWZ1bmN0aW9uKCl7cmV0dXJuIG59LmFwcGx5KHQscikpJiYoZS5leHBvcnRzPW8pKX0oKX0sIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3Itc3BlbGwtY2hlY2tlci9zcmMvanMvc3BlbGwtY2hlY2tlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGU9ZXx8e30sImZ1bmN0aW9uIiE9dHlwZW9mIGUuY29kZU1pcnJvckluc3RhbmNlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5jb2RlTWlycm9ySW5zdGFuY2UuZGVmaW5lTW9kZSlyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiQ29kZU1pcnJvciBTcGVsbCBDaGVja2VyOiBZb3UgbXVzdCBwcm92aWRlIGFuIGluc3RhbmNlIG9mIENvZGVNaXJyb3IgdmlhIHRoZSBvcHRpb24gYGNvZGVNaXJyb3JJbnN0YW5jZWAiKTtTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzfHwoU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbigpe3JldHVybi0xIT09U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGUuY29kZU1pcnJvckluc3RhbmNlLmRlZmluZU1vZGUoInNwZWxsLWNoZWNrZXIiLGZ1bmN0aW9uKHQpe2lmKCFyLmFmZl9sb2FkaW5nKXtyLmFmZl9sb2FkaW5nPSEwO3ZhciBuPW5ldyBYTUxIdHRwUmVxdWVzdDtuLm9wZW4oIkdFVCIsImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9jb2RlbWlycm9yLnNwZWxsLWNoZWNrZXIvbGF0ZXN0L2VuX1VTLmFmZiIsITApLG4ub25sb2FkPWZ1bmN0aW9uKCl7ND09PW4ucmVhZHlTdGF0ZSYmMjAwPT09bi5zdGF0dXMmJihyLmFmZl9kYXRhPW4ucmVzcG9uc2VUZXh0LDI9PSsrci5udW1fbG9hZGVkJiYoci50eXBvPW5ldyBvKCJlbl9VUyIsci5hZmZfZGF0YSxyLmRpY19kYXRhLHtwbGF0Zm9ybToiYW55In0pKSl9LG4uc2VuZChudWxsKX1pZighci5kaWNfbG9hZGluZyl7ci5kaWNfbG9hZGluZz0hMDt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7cy5vcGVuKCJHRVQiLCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvY29kZW1pcnJvci5zcGVsbC1jaGVja2VyL2xhdGVzdC9lbl9VUy5kaWMiLCEwKSxzLm9ubG9hZD1mdW5jdGlvbigpezQ9PT1zLnJlYWR5U3RhdGUmJjIwMD09PXMuc3RhdHVzJiYoci5kaWNfZGF0YT1zLnJlc3BvbnNlVGV4dCwyPT0rK3IubnVtX2xvYWRlZCYmKHIudHlwbz1uZXcgbygiZW5fVVMiLHIuYWZmX2RhdGEsci5kaWNfZGF0YSx7cGxhdGZvcm06ImFueSJ9KSkpfSxzLnNlbmQobnVsbCl9dmFyIGk9JyEiIyQlJigpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+ICcsYT17dG9rZW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrKCksbj0iIjtpZihpLmluY2x1ZGVzKHQpKXJldHVybiBlLm5leHQoKSxudWxsO2Zvcig7bnVsbCE9KHQ9ZS5wZWVrKCkpJiYhaS5pbmNsdWRlcyh0KTspbis9dCxlLm5leHQoKTtyZXR1cm4gci50eXBvJiYhci50eXBvLmNoZWNrKG4pPyJzcGVsbC1lcnJvciI6bnVsbH19LGw9ZS5jb2RlTWlycm9ySW5zdGFuY2UuZ2V0TW9kZSh0LHQuYmFja2Ryb3B8fCJ0ZXh0L3BsYWluIik7cmV0dXJuIGUuY29kZU1pcnJvckluc3RhbmNlLm92ZXJsYXlNb2RlKGwsYSwhMCl9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy90eXBvLWpzL3R5cG8uanMiKTtyLm51bV9sb2FkZWQ9MCxyLmFmZl9sb2FkaW5nPSExLHIuZGljX2xvYWRpbmc9ITEsci5hZmZfZGF0YT0iIixyLmRpY19kYXRhPSIiLHIudHlwbyxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZGlzcGxheS9mdWxsc2NyZWVuLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5qcyIpKX0oZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS5nZXRXcmFwcGVyRWxlbWVudCgpO2Uuc3RhdGUuZnVsbFNjcmVlblJlc3RvcmU9e3Njcm9sbFRvcDp3aW5kb3cucGFnZVlPZmZzZXQsc2Nyb2xsTGVmdDp3aW5kb3cucGFnZVhPZmZzZXQsd2lkdGg6dC5zdHlsZS53aWR0aCxoZWlnaHQ6dC5zdHlsZS5oZWlnaHR9LHQuc3R5bGUud2lkdGg9IiIsdC5zdHlsZS5oZWlnaHQ9ImF1dG8iLHQuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZnVsbHNjcmVlbiIsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGUucmVmcmVzaCgpfWZ1bmN0aW9uIG4oZSl7dmFyIHQ9ZS5nZXRXcmFwcGVyRWxlbWVudCgpO3QuY2xhc3NOYW1lPXQuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKkNvZGVNaXJyb3ItZnVsbHNjcmVlblxiLywiIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiO3ZhciBuPWUuc3RhdGUuZnVsbFNjcmVlblJlc3RvcmU7dC5zdHlsZS53aWR0aD1uLndpZHRoLHQuc3R5bGUuaGVpZ2h0PW4uaGVpZ2h0LHdpbmRvdy5zY3JvbGxUbyhuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApLGUucmVmcmVzaCgpfWUuZGVmaW5lT3B0aW9uKCJmdWxsU2NyZWVuIiwhMSxmdW5jdGlvbihyLG8scyl7cz09ZS5Jbml0JiYocz0hMSksIXMhPSFvJiYobz90KHIpOm4ocikpfSl9KX0sIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZGlzcGxheS9wbGFjZWhvbGRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiKSl9KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7ZS5zdGF0ZS5wbGFjZWhvbGRlciYmKGUuc3RhdGUucGxhY2Vob2xkZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLnN0YXRlLnBsYWNlaG9sZGVyKSxlLnN0YXRlLnBsYWNlaG9sZGVyPW51bGwpfWZ1bmN0aW9uIG4oZSl7dChlKTt2YXIgbj1lLnN0YXRlLnBsYWNlaG9sZGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO24uc3R5bGUuY3NzVGV4dD0iaGVpZ2h0OiAwOyBvdmVyZmxvdzogdmlzaWJsZSIsbi5zdHlsZS5kaXJlY3Rpb249ZS5nZXRPcHRpb24oImRpcmVjdGlvbiIpLG4uY2xhc3NOYW1lPSJDb2RlTWlycm9yLXBsYWNlaG9sZGVyIjt2YXIgcj1lLmdldE9wdGlvbigicGxhY2Vob2xkZXIiKTsic3RyaW5nIj09dHlwZW9mIHImJihyPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHIpKSxuLmFwcGVuZENoaWxkKHIpLGUuZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKG4sZS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKX1mdW5jdGlvbiByKGUpe3MoZSkmJm4oZSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLmdldFdyYXBwZXJFbGVtZW50KCksbz1zKGUpO3IuY2xhc3NOYW1lPXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWVtcHR5IiwiIikrKG8/IiBDb2RlTWlycm9yLWVtcHR5IjoiIiksbz9uKGUpOnQoZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMT09PWUubGluZUNvdW50KCkmJiIiPT09ZS5nZXRMaW5lKDApfWUuZGVmaW5lT3B0aW9uKCJwbGFjZWhvbGRlciIsIiIsZnVuY3Rpb24obixzLGkpe3ZhciBhPWkmJmkhPWUuSW5pdDtpZihzJiYhYSluLm9uKCJibHVyIixyKSxuLm9uKCJjaGFuZ2UiLG8pLG4ub24oInN3YXBEb2MiLG8pLG8obik7ZWxzZSBpZighcyYmYSl7bi5vZmYoImJsdXIiLHIpLG4ub2ZmKCJjaGFuZ2UiLG8pLG4ub2ZmKCJzd2FwRG9jIixvKSx0KG4pO3ZhciBsPW4uZ2V0V3JhcHBlckVsZW1lbnQoKTtsLmNsYXNzTmFtZT1sLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1lbXB0eSIsIiIpfXMmJiFuLmhhc0ZvY3VzKCkmJnIobil9KX0pfSwiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9lZGl0L2NvbnRpbnVlbGlzdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9dC5saW5lLG89MCxzPTAsaT1uLmV4ZWMoZS5nZXRMaW5lKHIpKSxhPWlbMV07ZG97bys9MTt2YXIgbD1yK28sdT1lLmdldExpbmUobCksYz1uLmV4ZWModSk7aWYoYyl7dmFyIGQ9Y1sxXSxfPXBhcnNlSW50KGlbM10sMTApK28tcyxwPXBhcnNlSW50KGNbM10sMTApLGY9cDtpZihhIT09ZHx8aXNOYU4ocCkpe2lmKGEubGVuZ3RoPmQubGVuZ3RoKXJldHVybjtpZihhLmxlbmd0aDxkLmxlbmd0aCYmMT09PW8pcmV0dXJuO3MrPTF9ZWxzZSBfPT09cCYmKGY9cCsxKSxfPnAmJihmPV8rMSksZS5yZXBsYWNlUmFuZ2UodS5yZXBsYWNlKG4sZCtmK2NbNF0rY1s1XSkse2xpbmU6bCxjaDowfSx7bGluZTpsLGNoOnUubGVuZ3RofSl9fXdoaWxlKGMpfXZhciBuPS9eKFxzKikoPls+IF0qfFsqKy1dIFxbW3ggXVxdXHN8WyorLV1cc3woXGQrKShbLildKSkoXHMqKS8scj0vXihccyopKD5bPiBdKnxbKistXSBcW1t4IF1cXXxbKistXXwoXGQrKVsuKV0pKFxzKikkLyxvPS9bKistXVxzLztlLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdD1mdW5jdGlvbihzKXtpZihzLmdldE9wdGlvbigiZGlzYWJsZUlucHV0IikpcmV0dXJuIGUuUGFzcztmb3IodmFyIGk9cy5saXN0U2VsZWN0aW9ucygpLGE9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgdT1pW2xdLmhlYWQsYz1zLmdldFN0YXRlQWZ0ZXIodS5saW5lKSxkPXMuZ2V0TW9kZSgpLmlubmVyTW9kZShjKTtpZigibWFya2Rvd24iIT09ZC5tb2RlLm5hbWUpcmV0dXJuIHZvaWQgcy5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpO2M9ZC5zdGF0ZTt2YXIgXz0hMSE9PWMubGlzdCxwPTAhPT1jLnF1b3RlLGY9cy5nZXRMaW5lKHUubGluZSksbT1uLmV4ZWMoZiksaD0vXlxzKiQvLnRlc3QoZi5zbGljZSgwLHUuY2gpKTtpZighaVtsXS5lbXB0eSgpfHwhXyYmIXB8fCFtfHxoKXJldHVybiB2b2lkIHMuZXhlY0NvbW1hbmQoIm5ld2xpbmVBbmRJbmRlbnQiKTtpZihyLnRlc3QoZikpLz5ccyokLy50ZXN0KGYpfHxzLnJlcGxhY2VSYW5nZSgiIix7bGluZTp1LmxpbmUsY2g6MH0se2xpbmU6dS5saW5lLGNoOnUuY2grMX0pLGFbbF09IlxuIjtlbHNle3ZhciBnPW1bMV0sYj1tWzVdLEU9IShvLnRlc3QobVsyXSl8fG1bMl0uaW5kZXhPZigiPiIpPj0wKSx5PUU/cGFyc2VJbnQobVszXSwxMCkrMSttWzRdOm1bMl0ucmVwbGFjZSgieCIsIiAiKTthW2xdPSJcbiIrZyt5K2IsRSYmdChzLHUpfX1zLnJlcGxhY2VTZWxlY3Rpb25zKGEpfX0pfSwiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9tb2RlL292ZXJsYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2xpYi9jb2RlbWlycm9yLmpzIikpfShmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZS5vdmVybGF5TW9kZT1mdW5jdGlvbih0LG4scil7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57YmFzZTplLnN0YXJ0U3RhdGUodCksb3ZlcmxheTplLnN0YXJ0U3RhdGUobiksYmFzZVBvczowLGJhc2VDdXI6bnVsbCxvdmVybGF5UG9zOjAsb3ZlcmxheUN1cjpudWxsLHN0cmVhbVNlZW46bnVsbH19LGNvcHlTdGF0ZTpmdW5jdGlvbihyKXtyZXR1cm57YmFzZTplLmNvcHlTdGF0ZSh0LHIuYmFzZSksb3ZlcmxheTplLmNvcHlTdGF0ZShuLHIub3ZlcmxheSksYmFzZVBvczpyLmJhc2VQb3MsYmFzZUN1cjpudWxsLG92ZXJsYXlQb3M6ci5vdmVybGF5UG9zLG92ZXJsYXlDdXI6bnVsbH19LHRva2VuOmZ1bmN0aW9uKGUsbyl7cmV0dXJuKGUhPW8uc3RyZWFtU2Vlbnx8TWF0aC5taW4oby5iYXNlUG9zLG8ub3ZlcmxheVBvcyk8ZS5zdGFydCkmJihvLnN0cmVhbVNlZW49ZSxvLmJhc2VQb3M9by5vdmVybGF5UG9zPWUuc3RhcnQpLGUuc3RhcnQ9PW8uYmFzZVBvcyYmKG8uYmFzZUN1cj10LnRva2VuKGUsby5iYXNlKSxvLmJhc2VQb3M9ZS5wb3MpLGUuc3RhcnQ9PW8ub3ZlcmxheVBvcyYmKGUucG9zPWUuc3RhcnQsby5vdmVybGF5Q3VyPW4udG9rZW4oZSxvLm92ZXJsYXkpLG8ub3ZlcmxheVBvcz1lLnBvcyksZS5wb3M9TWF0aC5taW4oby5iYXNlUG9zLG8ub3ZlcmxheVBvcyksbnVsbD09by5vdmVybGF5Q3VyP28uYmFzZUN1cjpudWxsIT1vLmJhc2VDdXImJm8ub3ZlcmxheS5jb21iaW5lVG9rZW5zfHxyJiZudWxsPT1vLm92ZXJsYXkuY29tYmluZVRva2Vucz9vLmJhc2VDdXIrIiAiK28ub3ZlcmxheUN1cjpvLm92ZXJsYXlDdXJ9LGluZGVudDp0LmluZGVudCYmZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0LmluZGVudChlLmJhc2UsbixyKX0sZWxlY3RyaWNDaGFyczp0LmVsZWN0cmljQ2hhcnMsaW5uZXJNb2RlOmZ1bmN0aW9uKGUpe3JldHVybntzdGF0ZTplLmJhc2UsbW9kZTp0fX0sYmxhbmtMaW5lOmZ1bmN0aW9uKGUpe3ZhciBvLHM7cmV0dXJuIHQuYmxhbmtMaW5lJiYobz10LmJsYW5rTGluZShlLmJhc2UpKSxuLmJsYW5rTGluZSYmKHM9bi5ibGFua0xpbmUoZS5vdmVybGF5KSksbnVsbD09cz9vOnImJm51bGwhPW8/bysiICIrczpzfX19fSl9LCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe2Uuc3RhdGUubWFya2VkU2VsZWN0aW9uJiZlLm9wZXJhdGlvbihmdW5jdGlvbigpe2koZSl9KX1mdW5jdGlvbiBuKGUpe2Uuc3RhdGUubWFya2VkU2VsZWN0aW9uJiZlLnN0YXRlLm1hcmtlZFNlbGVjdGlvbi5sZW5ndGgmJmUub3BlcmF0aW9uKGZ1bmN0aW9uKCl7byhlKX0pfWZ1bmN0aW9uIHIoZSx0LG4scil7aWYoMCE9dSh0LG4pKWZvcih2YXIgbz1lLnN0YXRlLm1hcmtlZFNlbGVjdGlvbixzPWUuc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUsaT10LmxpbmU7Oyl7dmFyIGM9aT09dC5saW5lP3Q6bChpLDApLGQ9aSthLF89ZD49bi5saW5lLHA9Xz9uOmwoZCwwKSxmPWUubWFya1RleHQoYyxwLHtjbGFzc05hbWU6c30pO2lmKG51bGw9PXI/by5wdXNoKGYpOm8uc3BsaWNlKHIrKywwLGYpLF8pYnJlYWs7aT1kfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1lLnN0YXRlLm1hcmtlZFNlbGVjdGlvbixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXS5jbGVhcigpO3QubGVuZ3RoPTB9ZnVuY3Rpb24gcyhlKXtvKGUpO2Zvcih2YXIgdD1lLmxpc3RTZWxlY3Rpb25zKCksbj0wO248dC5sZW5ndGg7bisrKXIoZSx0W25dLmZyb20oKSx0W25dLnRvKCkpfWZ1bmN0aW9uIGkoZSl7aWYoIWUuc29tZXRoaW5nU2VsZWN0ZWQoKSlyZXR1cm4gbyhlKTtpZihlLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoPjEpcmV0dXJuIHMoZSk7dmFyIHQ9ZS5nZXRDdXJzb3IoInN0YXJ0Iiksbj1lLmdldEN1cnNvcigiZW5kIiksaT1lLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtpZighaS5sZW5ndGgpcmV0dXJuIHIoZSx0LG4pO3ZhciBsPWlbMF0uZmluZCgpLGM9aVtpLmxlbmd0aC0xXS5maW5kKCk7aWYoIWx8fCFjfHxuLmxpbmUtdC5saW5lPD1hfHx1KHQsYy50byk+PTB8fHUobixsLmZyb20pPD0wKXJldHVybiBzKGUpO2Zvcig7dSh0LGwuZnJvbSk+MDspaS5zaGlmdCgpLmNsZWFyKCksbD1pWzBdLmZpbmQoKTtmb3IodSh0LGwuZnJvbSk8MCYmKGwudG8ubGluZS10LmxpbmU8YT8oaS5zaGlmdCgpLmNsZWFyKCkscihlLHQsbC50bywwKSk6cihlLHQsbC5mcm9tLDApKTt1KG4sYy50byk8MDspaS5wb3AoKS5jbGVhcigpLGM9aVtpLmxlbmd0aC0xXS5maW5kKCk7dShuLGMudG8pPjAmJihuLmxpbmUtYy5mcm9tLmxpbmU8YT8oaS5wb3AoKS5jbGVhcigpLHIoZSxjLmZyb20sbikpOnIoZSxjLnRvLG4pKX1lLmRlZmluZU9wdGlvbigic3R5bGVTZWxlY3RlZFRleHQiLCExLGZ1bmN0aW9uKHIsaSxhKXt2YXIgbD1hJiZhIT1lLkluaXQ7aSYmIWw/KHIuc3RhdGUubWFya2VkU2VsZWN0aW9uPVtdLHIuc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU9InN0cmluZyI9PXR5cGVvZiBpP2k6IkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IixzKHIpLHIub24oImN1cnNvckFjdGl2aXR5Iix0KSxyLm9uKCJjaGFuZ2UiLG4pKTohaSYmbCYmKHIub2ZmKCJjdXJzb3JBY3Rpdml0eSIsdCksci5vZmYoImNoYW5nZSIsbiksbyhyKSxyLnN0YXRlLm1hcmtlZFNlbGVjdGlvbj1yLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlPW51bGwpfSk7dmFyIGE9OCxsPWUuUG9zLHU9ZS5jbXBQb3N9KX0sIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIihefFxccykiK2UrIig/OiR8XFxzKVxccyoiKX1mdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD1lLmNoaWxkTm9kZXMubGVuZ3RoO3Q+MDstLXQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO3JldHVybiBlfWZ1bmN0aW9uIG4oZSxuKXtyZXR1cm4gdChlKS5hcHBlbmRDaGlsZChuKX1mdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7aWYobiYmKG8uY2xhc3NOYW1lPW4pLHImJihvLnN0eWxlLmNzc1RleHQ9ciksInN0cmluZyI9PXR5cGVvZiB0KW8uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpO2Vsc2UgaWYodClmb3IodmFyIHM9MDtzPHQubGVuZ3RoOysrcylvLmFwcGVuZENoaWxkKHRbc10pO3JldHVybiBvfWZ1bmN0aW9uIG8oZSx0LG4sbyl7dmFyIHM9cihlLHQsbixvKTtyZXR1cm4gcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxzfWZ1bmN0aW9uIHMoZSx0KXtpZigzPT10Lm5vZGVUeXBlJiYodD10LnBhcmVudE5vZGUpLGUuY29udGFpbnMpcmV0dXJuIGUuY29udGFpbnModCk7ZG97aWYoMTE9PXQubm9kZVR5cGUmJih0PXQuaG9zdCksdD09ZSlyZXR1cm4hMH13aGlsZSh0PXQucGFyZW50Tm9kZSl9ZnVuY3Rpb24gaSgpe3ZhciBlO3RyeXtlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2godCl7ZT1kb2N1bWVudC5ib2R5fHxudWxsfWZvcig7ZSYmZS5zaGFkb3dSb290JiZlLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDspZT1lLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsbil7dmFyIHI9dC5jbGFzc05hbWU7ZShuKS50ZXN0KHIpfHwodC5jbGFzc05hbWUrPShyPyIgIjoiIikrbil9ZnVuY3Rpb24gbCh0LG4pe2Zvcih2YXIgcj10LnNwbGl0KCIgIiksbz0wO288ci5sZW5ndGg7bysrKXJbb10mJiFlKHJbb10pLnRlc3QobikmJihuKz0iICIrcltvXSk7cmV0dXJuIG59ZnVuY3Rpb24gdShlKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gYyhlLHQsbil7dHx8KHQ9e30pO2Zvcih2YXIgciBpbiBlKSFlLmhhc093blByb3BlcnR5KHIpfHwhMT09PW4mJnQuaGFzT3duUHJvcGVydHkocil8fCh0W3JdPWVbcl0pO3JldHVybiB0fWZ1bmN0aW9uIGQoZSx0LG4scixvKXtudWxsPT10JiYtMT09KHQ9ZS5zZWFyY2goL1teXHNcdTAwYTBdLykpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBzPXJ8fDAsaT1vfHwwOzspe3ZhciBhPWUuaW5kZXhPZigiXHQiLHMpO2lmKGE8MHx8YT49dClyZXR1cm4gaSsodC1zKTtpKz1hLXMsaSs9bi1pJW4scz1hKzF9fWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZihlW25dPT10KXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIHAoZSx0LG4pe2Zvcih2YXIgcj0wLG89MDs7KXt2YXIgcz1lLmluZGV4T2YoIlx0IixyKTstMT09cyYmKHM9ZS5sZW5ndGgpO3ZhciBpPXMtcjtpZihzPT1lLmxlbmd0aHx8bytpPj10KXJldHVybiByK01hdGgubWluKGksdC1vKTtpZihvKz1zLXIsbys9bi1vJW4scj1zKzEsbz49dClyZXR1cm4gcn19ZnVuY3Rpb24gZihlKXtmb3IoO0tpLmxlbmd0aDw9ZTspS2kucHVzaChtKEtpKSsiICIpO3JldHVybiBLaVtlXX1mdW5jdGlvbiBtKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09dChlW3JdLHIpO3JldHVybiBufWZ1bmN0aW9uIGcoZSx0LG4pe2Zvcih2YXIgcj0wLG89bih0KTtyPGUubGVuZ3RoJiZuKGVbcl0pPD1vOylyKys7ZS5zcGxpY2UociwwLHQpfWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gRShlLHQpe3ZhciBuO3JldHVybiBPYmplY3QuY3JlYXRlP249T2JqZWN0LmNyZWF0ZShlKTooYi5wcm90b3R5cGU9ZSxuPW5ldyBiKSx0JiZjKHQsbiksbn1mdW5jdGlvbiB5KGUpe3JldHVybi9cdy8udGVzdChlKXx8ZT4iwoAiJiYoZS50b1VwcGVyQ2FzZSgpIT1lLnRvTG93ZXJDYXNlKCl8fFhpLnRlc3QoZSkpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gdD8hISh0LnNvdXJjZS5pbmRleE9mKCJcXHciKT4tMSYmeShlKSl8fHQudGVzdChlKTp5KGUpfWZ1bmN0aW9uIFQoZSl7Zm9yKHZhciB0IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSYmZVt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk+PTc2OCYmJGkudGVzdChlKX1mdW5jdGlvbiBDKGUsdCxuKXtmb3IoOyhuPDA/dD4wOnQ8ZS5sZW5ndGgpJiZBKGUuY2hhckF0KHQpKTspdCs9bjtyZXR1cm4gdH1mdW5jdGlvbiBPKGUsdCxuKXtmb3IodmFyIHI9dD5uPy0xOjE7Oyl7aWYodD09bilyZXR1cm4gdDt2YXIgbz0odCtuKS8yLHM9cjwwP01hdGguY2VpbChvKTpNYXRoLmZsb29yKG8pO2lmKHM9PXQpcmV0dXJuIGUocyk/dDpuO2Uocyk/bj1zOnQ9cytyfX1mdW5jdGlvbiBTKGUsdCxuKXt2YXIgcz10aGlzO3RoaXMuaW5wdXQ9bixzLnNjcm9sbGJhckZpbGxlcj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHMuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCJ0cnVlIikscy5ndXR0ZXJGaWxsZXI9cigiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXIiKSxzLmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IiwidHJ1ZSIpLHMubGluZURpdj1vKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHMuc2VsZWN0aW9uRGl2PXIoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKSxzLmN1cnNvckRpdj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY3Vyc29ycyIpLHMubWVhc3VyZT1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHMubGluZU1lYXN1cmU9cigiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxzLmxpbmVTcGFjZT1vKCJkaXYiLFtzLm1lYXN1cmUscy5saW5lTWVhc3VyZSxzLnNlbGVjdGlvbkRpdixzLmN1cnNvckRpdixzLmxpbmVEaXZdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpO3ZhciBpPW8oImRpdiIsW3MubGluZVNwYWNlXSwiQ29kZU1pcnJvci1saW5lcyIpO3MubW92ZXI9cigiZGl2IixbaV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikscy5zaXplcj1yKCJkaXYiLFtzLm1vdmVyXSwiQ29kZU1pcnJvci1zaXplciIpLHMuc2l6ZXJXaWR0aD1udWxsLHMuaGVpZ2h0Rm9yY2VyPXIoImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIit6aSsicHg7IHdpZHRoOiAxcHg7Iikscy5ndXR0ZXJzPXIoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIikscy5saW5lR3V0dGVyPW51bGwscy5zY3JvbGxlcj1yKCJkaXYiLFtzLnNpemVyLHMuaGVpZ2h0Rm9yY2VyLHMuZ3V0dGVyc10sIkNvZGVNaXJyb3Itc2Nyb2xsIikscy5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwiLTEiKSxzLndyYXBwZXI9cigiZGl2Iixbcy5zY3JvbGxiYXJGaWxsZXIscy5ndXR0ZXJGaWxsZXIscy5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxFaSYmeWk8OCYmKHMuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEscy5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdml8fG1pJiZMaXx8KHMuc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxlJiYoZS5hcHBlbmRDaGlsZD9lLmFwcGVuZENoaWxkKHMud3JhcHBlcik6ZShzLndyYXBwZXIpKSxzLnZpZXdGcm9tPXMudmlld1RvPXQuZmlyc3Qscy5yZXBvcnRlZFZpZXdGcm9tPXMucmVwb3J0ZWRWaWV3VG89dC5maXJzdCxzLnZpZXc9W10scy5yZW5kZXJlZFZpZXc9bnVsbCxzLmV4dGVybmFsTWVhc3VyZWQ9bnVsbCxzLnZpZXdPZmZzZXQ9MCxzLmxhc3RXcmFwSGVpZ2h0PXMubGFzdFdyYXBXaWR0aD0wLHMudXBkYXRlTGluZU51bWJlcnM9bnVsbCxzLm5hdGl2ZUJhcldpZHRoPXMuYmFySGVpZ2h0PXMuYmFyV2lkdGg9MCxzLnNjcm9sbGJhcnNDbGlwcGVkPSExLHMubGluZU51bVdpZHRoPXMubGluZU51bUlubmVyV2lkdGg9cy5saW5lTnVtQ2hhcnM9bnVsbCxzLmFsaWduV2lkZ2V0cz0hMSxzLmNhY2hlZENoYXJXaWR0aD1zLmNhY2hlZFRleHRIZWlnaHQ9cy5jYWNoZWRQYWRkaW5nSD1udWxsLHMubWF4TGluZT1udWxsLHMubWF4TGluZUxlbmd0aD0wLHMubWF4TGluZUNoYW5nZWQ9ITEscy53aGVlbERYPXMud2hlZWxEWT1zLndoZWVsU3RhcnRYPXMud2hlZWxTdGFydFk9bnVsbCxzLnNoaWZ0PSExLHMuc2VsRm9yQ29udGV4dE1lbnU9bnVsbCxzLmFjdGl2ZVRvdWNoPW51bGwsbi5pbml0KHMpfWZ1bmN0aW9uIFIoZSx0KXtpZigodC09ZS5maXJzdCk8MHx8dD49ZS5zaXplKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gbGluZSAiKyh0K2UuZmlyc3QpKyIgaW4gdGhlIGRvY3VtZW50LiIpO2Zvcih2YXIgbj1lOyFuLmxpbmVzOylmb3IodmFyIHI9MDs7KytyKXt2YXIgbz1uLmNoaWxkcmVuW3JdLHM9by5jaHVua1NpemUoKTtpZih0PHMpe249bzticmVha310LT1zfXJldHVybiBuLmxpbmVzW3RdfWZ1bmN0aW9uIGooZSx0LG4pe3ZhciByPVtdLG89dC5saW5lO3JldHVybiBlLml0ZXIodC5saW5lLG4ubGluZSsxLGZ1bmN0aW9uKGUpe3ZhciBzPWUudGV4dDtvPT1uLmxpbmUmJihzPXMuc2xpY2UoMCxuLmNoKSksbz09dC5saW5lJiYocz1zLnNsaWNlKHQuY2gpKSxyLnB1c2gocyksKytvfSkscn1mdW5jdGlvbiB4KGUsdCxuKXt2YXIgcj1bXTtyZXR1cm4gZS5pdGVyKHQsbixmdW5jdGlvbihlKXtyLnB1c2goZS50ZXh0KX0pLHJ9ZnVuY3Rpb24gTChlLHQpe3ZhciBuPXQtZS5oZWlnaHQ7aWYobilmb3IodmFyIHI9ZTtyO3I9ci5wYXJlbnQpci5oZWlnaHQrPW59ZnVuY3Rpb24gRChlKXtpZihudWxsPT1lLnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5wYXJlbnQsbj1fKHQubGluZXMsZSkscj10LnBhcmVudDtyO3Q9cixyPXIucGFyZW50KWZvcih2YXIgbz0wO3IuY2hpbGRyZW5bb10hPXQ7KytvKW4rPXIuY2hpbGRyZW5bb10uY2h1bmtTaXplKCk7cmV0dXJuIG4rdC5maXJzdH1mdW5jdGlvbiB3KGUsdCl7dmFyIG49ZS5maXJzdDtlOmRve2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbz1lLmNoaWxkcmVuW3JdLHM9by5oZWlnaHQ7aWYodDxzKXtlPW87Y29udGludWUgZX10LT1zLG4rPW8uY2h1bmtTaXplKCl9cmV0dXJuIG59d2hpbGUoIWUubGluZXMpO2Zvcih2YXIgaT0wO2k8ZS5saW5lcy5sZW5ndGg7KytpKXt2YXIgYT1lLmxpbmVzW2ldLGw9YS5oZWlnaHQ7aWYodDxsKWJyZWFrO3QtPWx9cmV0dXJuIG4raX1mdW5jdGlvbiBNKGUsdCl7cmV0dXJuIHQ+PWUuZmlyc3QmJnQ8ZS5maXJzdCtlLnNpemV9ZnVuY3Rpb24gayhlLHQpe3JldHVybiBTdHJpbmcoZS5saW5lTnVtYmVyRm9ybWF0dGVyKHQrZS5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiBJKGUsdCxuKXtpZih2b2lkIDA9PT1uJiYobj1udWxsKSwhKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoZSx0LG4pO3RoaXMubGluZT1lLHRoaXMuY2g9dCx0aGlzLnN0aWNreT1ufWZ1bmN0aW9uIFAoZSx0KXtyZXR1cm4gZS5saW5lLXQubGluZXx8ZS5jaC10LmNofWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gZS5zdGlja3k9PXQuc3RpY2t5JiYwPT1QKGUsdCl9ZnVuY3Rpb24gSChlKXtyZXR1cm4gSShlLmxpbmUsZS5jaCl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBQKGUsdCk8MD90OmV9ZnVuY3Rpb24gQihlLHQpe3JldHVybiBQKGUsdCk8MD9lOnR9ZnVuY3Rpb24gVShlLHQpe3JldHVybiBNYXRoLm1heChlLmZpcnN0LE1hdGgubWluKHQsZS5maXJzdCtlLnNpemUtMSkpfWZ1bmN0aW9uIEcoZSx0KXtpZih0LmxpbmU8ZS5maXJzdClyZXR1cm4gSShlLmZpcnN0LDApO3ZhciBuPWUuZmlyc3QrZS5zaXplLTE7cmV0dXJuIHQubGluZT5uP0kobixSKGUsbikudGV4dC5sZW5ndGgpOnoodCxSKGUsdC5saW5lKS50ZXh0Lmxlbmd0aCl9ZnVuY3Rpb24geihlLHQpe3ZhciBuPWUuY2g7cmV0dXJuIG51bGw9PW58fG4+dD9JKGUubGluZSx0KTpuPDA/SShlLmxpbmUsMCk6ZX1mdW5jdGlvbiBWKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyluW3JdPUcoZSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBXKCl7UWk9ITB9ZnVuY3Rpb24gWSgpe0ppPSEwfWZ1bmN0aW9uIHEoZSx0LG4pe3RoaXMubWFya2VyPWUsdGhpcy5mcm9tPXQsdGhpcy50bz1ufWZ1bmN0aW9uIEsoZSx0KXtpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dO2lmKHIubWFya2VyPT10KXJldHVybiByfX1mdW5jdGlvbiBYKGUsdCl7Zm9yKHZhciBuLHI9MDtyPGUubGVuZ3RoOysrcillW3JdIT10JiYobnx8KG49W10pKS5wdXNoKGVbcl0pO3JldHVybiBufWZ1bmN0aW9uICQoZSx0KXtlLm1hcmtlZFNwYW5zPWUubWFya2VkU3BhbnM/ZS5tYXJrZWRTcGFucy5jb25jYXQoW3RdKTpbdF0sdC5tYXJrZXIuYXR0YWNoTGluZShlKX1mdW5jdGlvbiBRKGUsdCxuKXt2YXIgcjtpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcz1lW29dLGk9cy5tYXJrZXIsYT1udWxsPT1zLmZyb218fChpLmluY2x1c2l2ZUxlZnQ/cy5mcm9tPD10OnMuZnJvbTx0KTtpZihhfHxzLmZyb209PXQmJiJib29rbWFyayI9PWkudHlwZSYmKCFufHwhcy5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBsPW51bGw9PXMudG98fChpLmluY2x1c2l2ZVJpZ2h0P3MudG8+PXQ6cy50bz50KTsocnx8KHI9W10pKS5wdXNoKG5ldyBxKGkscy5mcm9tLGw/bnVsbDpzLnRvKSl9fXJldHVybiByfWZ1bmN0aW9uIEooZSx0LG4pe3ZhciByO2lmKGUpZm9yKHZhciBvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzPWVbb10saT1zLm1hcmtlcixhPW51bGw9PXMudG98fChpLmluY2x1c2l2ZVJpZ2h0P3MudG8+PXQ6cy50bz50KTtpZihhfHxzLmZyb209PXQmJiJib29rbWFyayI9PWkudHlwZSYmKCFufHxzLm1hcmtlci5pbnNlcnRMZWZ0KSl7dmFyIGw9bnVsbD09cy5mcm9tfHwoaS5pbmNsdXNpdmVMZWZ0P3MuZnJvbTw9dDpzLmZyb208dCk7KHJ8fChyPVtdKSkucHVzaChuZXcgcShpLGw/bnVsbDpzLmZyb20tdCxudWxsPT1zLnRvP251bGw6cy50by10KSl9fXJldHVybiByfWZ1bmN0aW9uIFooZSx0KXtpZih0LmZ1bGwpcmV0dXJuIG51bGw7dmFyIG49TShlLHQuZnJvbS5saW5lKSYmUihlLHQuZnJvbS5saW5lKS5tYXJrZWRTcGFucyxyPU0oZSx0LnRvLmxpbmUpJiZSKGUsdC50by5saW5lKS5tYXJrZWRTcGFucztpZighbiYmIXIpcmV0dXJuIG51bGw7dmFyIG89dC5mcm9tLmNoLHM9dC50by5jaCxpPTA9PVAodC5mcm9tLHQudG8pLGE9UShuLG8saSksbD1KKHIscyxpKSx1PTE9PXQudGV4dC5sZW5ndGgsYz1tKHQudGV4dCkubGVuZ3RoKyh1P286MCk7aWYoYSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoOysrZCl7dmFyIF89YVtkXTtpZihudWxsPT1fLnRvKXt2YXIgcD1LKGwsXy5tYXJrZXIpO3A/dSYmKF8udG89bnVsbD09cC50bz9udWxsOnAudG8rYyk6Xy50bz1vfX1pZihsKWZvcih2YXIgZj0wO2Y8bC5sZW5ndGg7KytmKXt2YXIgaD1sW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBnPUsoYSxoLm1hcmtlcik7Z3x8KGguZnJvbT1jLHUmJihhfHwoYT1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihhfHwoYT1bXSkpLnB1c2goaCl9YSYmKGE9ZWUoYSkpLGwmJmwhPWEmJihsPWVlKGwpKTt2YXIgYj1bYV07aWYoIXUpe3ZhciBFLHk9dC50ZXh0Lmxlbmd0aC0yO2lmKHk+MCYmYSlmb3IodmFyIHY9MDt2PGEubGVuZ3RoOysrdiludWxsPT1hW3ZdLnRvJiYoRXx8KEU9W10pKS5wdXNoKG5ldyBxKGFbdl0ubWFya2VyLG51bGwsbnVsbCkpO2Zvcih2YXIgVD0wO1Q8eTsrK1QpYi5wdXNoKEUpO2IucHVzaChsKX1yZXR1cm4gYn1mdW5jdGlvbiBlZShlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XTtudWxsIT1uLmZyb20mJm4uZnJvbT09bi50byYmITEhPT1uLm1hcmtlci5jbGVhcldoZW5FbXB0eSYmZS5zcGxpY2UodC0tLDEpfXJldHVybiBlLmxlbmd0aD9lOm51bGx9ZnVuY3Rpb24gdGUoZSx0LG4pe3ZhciByPW51bGw7aWYoZS5pdGVyKHQubGluZSxuLmxpbmUrMSxmdW5jdGlvbihlKXtpZihlLm1hcmtlZFNwYW5zKWZvcih2YXIgdD0wO3Q8ZS5tYXJrZWRTcGFucy5sZW5ndGg7Kyt0KXt2YXIgbj1lLm1hcmtlZFNwYW5zW3RdLm1hcmtlcjshbi5yZWFkT25seXx8ciYmLTEhPV8ocixuKXx8KHJ8fChyPVtdKSkucHVzaChuKX19KSwhcilyZXR1cm4gbnVsbDtmb3IodmFyIG89W3tmcm9tOnQsdG86bn1dLHM9MDtzPHIubGVuZ3RoOysrcylmb3IodmFyIGk9cltzXSxhPWkuZmluZCgwKSxsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciB1PW9bbF07aWYoIShQKHUudG8sYS5mcm9tKTwwfHxQKHUuZnJvbSxhLnRvKT4wKSl7dmFyIGM9W2wsMV0sZD1QKHUuZnJvbSxhLmZyb20pLHA9UCh1LnRvLGEudG8pOyhkPDB8fCFpLmluY2x1c2l2ZUxlZnQmJiFkKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzphLmZyb219KSwocD4wfHwhaS5pbmNsdXNpdmVSaWdodCYmIXApJiZjLnB1c2goe2Zyb206YS50byx0bzp1LnRvfSksby5zcGxpY2UuYXBwbHkobyxjKSxsKz1jLmxlbmd0aC0zfX1yZXR1cm4gb31mdW5jdGlvbiBuZShlKXt2YXIgdD1lLm1hcmtlZFNwYW5zO2lmKHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKXRbbl0ubWFya2VyLmRldGFjaExpbmUoZSk7ZS5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiByZShlLHQpe2lmKHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKXRbbl0ubWFya2VyLmF0dGFjaExpbmUoZSk7ZS5tYXJrZWRTcGFucz10fX1mdW5jdGlvbiBvZShlKXtyZXR1cm4gZS5pbmNsdXNpdmVMZWZ0Py0xOjB9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGUuaW5jbHVzaXZlUmlnaHQ/MTowfWZ1bmN0aW9uIGllKGUsdCl7dmFyIG49ZS5saW5lcy5sZW5ndGgtdC5saW5lcy5sZW5ndGg7aWYoMCE9bilyZXR1cm4gbjt2YXIgcj1lLmZpbmQoKSxvPXQuZmluZCgpLHM9UChyLmZyb20sby5mcm9tKXx8b2UoZSktb2UodCk7aWYocylyZXR1cm4tczt2YXIgaT1QKHIudG8sby50byl8fHNlKGUpLXNlKHQpO3JldHVybiBpfHx0LmlkLWUuaWR9ZnVuY3Rpb24gYWUoZSx0KXt2YXIgbixyPUppJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBvPXZvaWQgMCxzPTA7czxyLmxlbmd0aDsrK3Mpbz1yW3NdLG8ubWFya2VyLmNvbGxhcHNlZCYmbnVsbD09KHQ/by5mcm9tOm8udG8pJiYoIW58fGllKG4sby5tYXJrZXIpPDApJiYobj1vLm1hcmtlcik7cmV0dXJuIG59ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGFlKGUsITApfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBhZShlLCExKX1mdW5jdGlvbiBjZShlLHQpe3ZhciBuLHI9SmkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbyl7dmFyIHM9cltvXTtzLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1zLmZyb218fHMuZnJvbTx0KSYmKG51bGw9PXMudG98fHMudG8+dCkmJighbnx8aWUobixzLm1hcmtlcik8MCkmJihuPXMubWFya2VyKX1yZXR1cm4gbn1mdW5jdGlvbiBkZShlLHQsbixyLG8pe3ZhciBzPVIoZSx0KSxpPUppJiZzLm1hcmtlZFNwYW5zO2lmKGkpZm9yKHZhciBhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBsPWlbYV07aWYobC5tYXJrZXIuY29sbGFwc2VkKXt2YXIgdT1sLm1hcmtlci5maW5kKDApLGM9UCh1LmZyb20sbil8fG9lKGwubWFya2VyKS1vZShvKSxkPVAodS50byxyKXx8c2UobC5tYXJrZXIpLXNlKG8pO2lmKCEoYz49MCYmZDw9MHx8Yzw9MCYmZD49MCkmJihjPD0wJiYobC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJm8uaW5jbHVzaXZlTGVmdD9QKHUudG8sbik+PTA6UCh1LnRvLG4pPjApfHxjPj0wJiYobC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJm8uaW5jbHVzaXZlTGVmdD9QKHUuZnJvbSxyKTw9MDpQKHUuZnJvbSxyKTwwKSkpcmV0dXJuITB9fX1mdW5jdGlvbiBfZShlKXtmb3IodmFyIHQ7dD1sZShlKTspZT10LmZpbmQoLTEsITApLmxpbmU7cmV0dXJuIGV9ZnVuY3Rpb24gcGUoZSl7Zm9yKHZhciB0O3Q9dWUoZSk7KWU9dC5maW5kKDEsITApLmxpbmU7cmV0dXJuIGV9ZnVuY3Rpb24gZmUoZSl7Zm9yKHZhciB0LG47dD11ZShlKTspZT10LmZpbmQoMSwhMCkubGluZSwobnx8KG49W10pKS5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIG1lKGUsdCl7dmFyIG49UihlLHQpLHI9X2Uobik7cmV0dXJuIG49PXI/dDpEKHIpfWZ1bmN0aW9uIGhlKGUsdCl7aWYodD5lLmxhc3RMaW5lKCkpcmV0dXJuIHQ7dmFyIG4scj1SKGUsdCk7aWYoIWdlKGUscikpcmV0dXJuIHQ7Zm9yKDtuPXVlKHIpOylyPW4uZmluZCgxLCEwKS5saW5lO3JldHVybiBEKHIpKzF9ZnVuY3Rpb24gZ2UoZSx0KXt2YXIgbj1KaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgcj12b2lkIDAsbz0wO288bi5sZW5ndGg7KytvKWlmKHI9bltvXSxyLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PXIuZnJvbSlyZXR1cm4hMDtpZighci5tYXJrZXIud2lkZ2V0Tm9kZSYmMD09ci5mcm9tJiZyLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZiZShlLHQscikpcmV0dXJuITB9fWZ1bmN0aW9uIGJlKGUsdCxuKXtpZihudWxsPT1uLnRvKXt2YXIgcj1uLm1hcmtlci5maW5kKDEsITApO3JldHVybiBiZShlLHIubGluZSxLKHIubGluZS5tYXJrZWRTcGFucyxuLm1hcmtlcikpfWlmKG4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0JiZuLnRvPT10LnRleHQubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbz12b2lkIDAscz0wO3M8dC5tYXJrZWRTcGFucy5sZW5ndGg7KytzKWlmKG89dC5tYXJrZWRTcGFuc1tzXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci53aWRnZXROb2RlJiZvLmZyb209PW4udG8mJihudWxsPT1vLnRvfHxvLnRvIT1uLmZyb20pJiYoby5tYXJrZXIuaW5jbHVzaXZlTGVmdHx8bi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpJiZiZShlLHQsbykpcmV0dXJuITB9ZnVuY3Rpb24gRWUoZSl7ZT1fZShlKTtmb3IodmFyIHQ9MCxuPWUucGFyZW50LHI9MDtyPG4ubGluZXMubGVuZ3RoOysrcil7dmFyIG89bi5saW5lc1tyXTtpZihvPT1lKWJyZWFrO3QrPW8uaGVpZ2h0fWZvcih2YXIgcz1uLnBhcmVudDtzO249cyxzPW4ucGFyZW50KWZvcih2YXIgaT0wO2k8cy5jaGlsZHJlbi5sZW5ndGg7KytpKXt2YXIgYT1zLmNoaWxkcmVuW2ldO2lmKGE9PW4pYnJlYWs7dCs9YS5oZWlnaHR9cmV0dXJuIHR9ZnVuY3Rpb24geWUoZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciB0LG49ZS50ZXh0Lmxlbmd0aCxyPWU7dD1sZShyKTspe3ZhciBvPXQuZmluZCgwLCEwKTtyPW8uZnJvbS5saW5lLG4rPW8uZnJvbS5jaC1vLnRvLmNofWZvcihyPWU7dD11ZShyKTspe3ZhciBzPXQuZmluZCgwLCEwKTtuLT1yLnRleHQubGVuZ3RoLXMuZnJvbS5jaCxyPXMudG8ubGluZSxuKz1yLnRleHQubGVuZ3RoLXMudG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gdmUoZSl7dmFyIHQ9ZS5kaXNwbGF5LG49ZS5kb2M7dC5tYXhMaW5lPVIobixuLmZpcnN0KSx0Lm1heExpbmVMZW5ndGg9eWUodC5tYXhMaW5lKSx0Lm1heExpbmVDaGFuZ2VkPSEwLG4uaXRlcihmdW5jdGlvbihlKXt2YXIgbj15ZShlKTtuPnQubWF4TGluZUxlbmd0aCYmKHQubWF4TGluZUxlbmd0aD1uLHQubWF4TGluZT1lKX0pfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe2lmKCFlKXJldHVybiByKHQsbiwibHRyIiwwKTtmb3IodmFyIG89ITEscz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgaT1lW3NdOyhpLmZyb208biYmaS50bz50fHx0PT1uJiZpLnRvPT10KSYmKHIoTWF0aC5tYXgoaS5mcm9tLHQpLE1hdGgubWluKGkudG8sbiksMT09aS5sZXZlbD8icnRsIjoibHRyIixzKSxvPSEwKX1vfHxyKHQsbiwibHRyIil9ZnVuY3Rpb24gQWUoZSx0LG4pe3ZhciByO1ppPW51bGw7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzPWVbb107aWYocy5mcm9tPHQmJnMudG8+dClyZXR1cm4gbztzLnRvPT10JiYocy5mcm9tIT1zLnRvJiYiYmVmb3JlIj09bj9yPW86Wmk9bykscy5mcm9tPT10JiYocy5mcm9tIT1zLnRvJiYiYmVmb3JlIiE9bj9yPW86Wmk9byl9cmV0dXJuIG51bGwhPXI/cjpaaX1mdW5jdGlvbiBDZShlLHQpe3ZhciBuPWUub3JkZXI7cmV0dXJuIG51bGw9PW4mJihuPWUub3JkZXI9ZWEoZS50ZXh0LHQpKSxufWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIGUuX2hhbmRsZXJzJiZlLl9oYW5kbGVyc1t0XXx8dGF9ZnVuY3Rpb24gU2UoZSx0LG4pe2lmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcillLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKTtlbHNlIGlmKGUuZGV0YWNoRXZlbnQpZS5kZXRhY2hFdmVudCgib24iK3Qsbik7ZWxzZXt2YXIgcj1lLl9oYW5kbGVycyxvPXImJnJbdF07aWYobyl7dmFyIHM9XyhvLG4pO3M+LTEmJihyW3RdPW8uc2xpY2UoMCxzKS5jb25jYXQoby5zbGljZShzKzEpKSl9fX1mdW5jdGlvbiBSZShlLHQpe3ZhciBuPU9lKGUsdCk7aWYobi5sZW5ndGgpZm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxvPTA7bzxuLmxlbmd0aDsrK28pbltvXS5hcHBseShudWxsLHIpfWZ1bmN0aW9uIGplKGUsdCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXt0eXBlOnQscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9fSksUmUoZSxufHx0LnR5cGUsZSx0KSxrZSh0KXx8dC5jb2RlbWlycm9ySWdub3JlfWZ1bmN0aW9uIHhlKGUpe3ZhciB0PWUuX2hhbmRsZXJzJiZlLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtpZih0KWZvcih2YXIgbj1lLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnN8fChlLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnM9W10pLHI9MDtyPHQubGVuZ3RoOysrciktMT09XyhuLHRbcl0pJiZuLnB1c2godFtyXSl9ZnVuY3Rpb24gTGUoZSx0KXtyZXR1cm4gT2UoZSx0KS5sZW5ndGg+MH1mdW5jdGlvbiBEZShlKXtlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe25hKHRoaXMsZSx0KX0sZS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKGUsdCl7U2UodGhpcyxlLHQpfX1mdW5jdGlvbiB3ZShlKXtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIE1lKGUpe2Uuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6ZS5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIG51bGwhPWUuZGVmYXVsdFByZXZlbnRlZD9lLmRlZmF1bHRQcmV2ZW50ZWQ6MD09ZS5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBJZShlKXt3ZShlKSxNZShlKX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZS50YXJnZXR8fGUuc3JjRWxlbWVudH1mdW5jdGlvbiBOZShlKXt2YXIgdD1lLndoaWNoO3JldHVybiBudWxsPT10JiYoMSZlLmJ1dHRvbj90PTE6MiZlLmJ1dHRvbj90PTM6NCZlLmJ1dHRvbiYmKHQ9MikpLERpJiZlLmN0cmxLZXkmJjE9PXQmJih0PTMpLHR9ZnVuY3Rpb24gSGUoZSl7aWYobnVsbD09VWkpe3ZhciB0PXIoInNwYW4iLCLigIsiKTtuKGUscigic3BhbiIsW3QsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT1lLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoVWk9dC5vZmZzZXRXaWR0aDw9MSYmdC5vZmZzZXRIZWlnaHQ+MiYmIShFaSYmeWk8OCkpfXZhciBvPVVpP3IoInNwYW4iLCLigIsiKTpyKCJzcGFuIiwiwqAiLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4Iik7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwiIiksb31mdW5jdGlvbiBGZShlKXtpZihudWxsIT1HaSlyZXR1cm4gR2k7dmFyIHI9bihlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJB2K5BIikpLG89SWkociwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9SWkociwxLDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0KGUpLCEoIW98fG8ubGVmdD09by5yaWdodCkmJihHaT1zLnJpZ2h0LW8ucmlnaHQ8Myl9ZnVuY3Rpb24gQmUoZSl7aWYobnVsbCE9YWEpcmV0dXJuIGFhO3ZhciB0PW4oZSxyKCJzcGFuIiwieCIpKSxvPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1JaSh0LDAsMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGFhPU1hdGguYWJzKG8ubGVmdC1zLmxlZnQpPjF9ZnVuY3Rpb24gVWUoZSx0KXthcmd1bWVudHMubGVuZ3RoPjImJih0LmRlcGVuZGVuY2llcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGxhW2VdPXR9ZnVuY3Rpb24gR2UoZSx0KXt1YVtlXT10fWZ1bmN0aW9uIHplKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmdWEuaGFzT3duUHJvcGVydHkoZSkpZT11YVtlXTtlbHNlIGlmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5uYW1lJiZ1YS5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpKXt2YXIgdD11YVtlLm5hbWVdOyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e25hbWU6dH0pLGU9RSh0LGUpLGUubmFtZT10Lm5hbWV9ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gemUoImFwcGxpY2F0aW9uL3htbCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCtqc29uJC8udGVzdChlKSlyZXR1cm4gemUoImFwcGxpY2F0aW9uL2pzb24iKX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX1mdW5jdGlvbiBWZShlLHQpe3Q9emUodCk7dmFyIG49bGFbdC5uYW1lXTtpZighbilyZXR1cm4gVmUoZSwidGV4dC9wbGFpbiIpO3ZhciByPW4oZSx0KTtpZihjYS5oYXNPd25Qcm9wZXJ0eSh0Lm5hbWUpKXt2YXIgbz1jYVt0Lm5hbWVdO2Zvcih2YXIgcyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJihyLmhhc093blByb3BlcnR5KHMpJiYoclsiXyIrc109cltzXSkscltzXT1vW3NdKX1pZihyLm5hbWU9dC5uYW1lLHQuaGVscGVyVHlwZSYmKHIuaGVscGVyVHlwZT10LmhlbHBlclR5cGUpLHQubW9kZVByb3BzKWZvcih2YXIgaSBpbiB0Lm1vZGVQcm9wcylyW2ldPXQubW9kZVByb3BzW2ldO3JldHVybiByfWZ1bmN0aW9uIFdlKGUsdCl7Yyh0LGNhLmhhc093blByb3BlcnR5KGUpP2NhW2VdOmNhW2VdPXt9KX1mdW5jdGlvbiBZZShlLHQpe2lmKCEwPT09dClyZXR1cm4gdDtpZihlLmNvcHlTdGF0ZSlyZXR1cm4gZS5jb3B5U3RhdGUodCk7dmFyIG49e307Zm9yKHZhciByIGluIHQpe3ZhciBvPXRbcl07byBpbnN0YW5jZW9mIEFycmF5JiYobz1vLmNvbmNhdChbXSkpLG5bcl09b31yZXR1cm4gbn1mdW5jdGlvbiBxZShlLHQpe2Zvcih2YXIgbjtlLmlubmVyTW9kZSYmKG49ZS5pbm5lck1vZGUodCkpJiZuLm1vZGUhPWU7KXQ9bi5zdGF0ZSxlPW4ubW9kZTtyZXR1cm4gbnx8e21vZGU6ZSxzdGF0ZTp0fX1mdW5jdGlvbiBLZShlLHQsbil7cmV0dXJuIWUuc3RhcnRTdGF0ZXx8ZS5zdGFydFN0YXRlKHQsbil9ZnVuY3Rpb24gWGUoZSx0LG4scil7dmFyIG89W2Uuc3RhdGUubW9kZUdlbl0scz17fTtydChlLHQudGV4dCxlLmRvYy5tb2RlLG4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5wdXNoKGUsdCl9LHMscik7Zm9yKHZhciBpPW4uc3RhdGUsYT0wO2E8ZS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KythKSFmdW5jdGlvbihyKXtuLmJhc2VUb2tlbnM9bzt2YXIgYT1lLnN0YXRlLm92ZXJsYXlzW3JdLGw9MSx1PTA7bi5zdGF0ZT0hMCxydChlLHQudGV4dCxhLm1vZGUsbixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1sO3U8ZTspe3ZhciByPW9bbF07cj5lJiZvLnNwbGljZShsLDEsZSxvW2wrMV0sciksbCs9Mix1PU1hdGgubWluKGUscil9aWYodClpZihhLm9wYXF1ZSlvLnNwbGljZShuLGwtbixlLCJvdmVybGF5ICIrdCksbD1uKzI7ZWxzZSBmb3IoO248bDtuKz0yKXt2YXIgcz1vW24rMV07b1tuKzFdPShzP3MrIiAiOiIiKSsib3ZlcmxheSAiK3R9fSxzKSxuLnN0YXRlPWksbi5iYXNlVG9rZW5zPW51bGwsbi5iYXNlVG9rZW5Qb3M9MX0oYSk7cmV0dXJue3N0eWxlczpvLGNsYXNzZXM6cy5iZ0NsYXNzfHxzLnRleHRDbGFzcz9zOm51bGx9fWZ1bmN0aW9uICRlKGUsdCxuKXtpZighdC5zdHlsZXN8fHQuc3R5bGVzWzBdIT1lLnN0YXRlLm1vZGVHZW4pe3ZhciByPVFlKGUsRCh0KSksbz10LnRleHQubGVuZ3RoPmUub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgmJlllKGUuZG9jLm1vZGUsci5zdGF0ZSkscz1YZShlLHQscik7byYmKHIuc3RhdGU9byksdC5zdGF0ZUFmdGVyPXIuc2F2ZSghbyksdC5zdHlsZXM9cy5zdHlsZXMscy5jbGFzc2VzP3Quc3R5bGVDbGFzc2VzPXMuY2xhc3Nlczp0LnN0eWxlQ2xhc3NlcyYmKHQuc3R5bGVDbGFzc2VzPW51bGwpLG49PT1lLmRvYy5oaWdobGlnaHRGcm9udGllciYmKGUuZG9jLm1vZGVGcm9udGllcj1NYXRoLm1heChlLmRvYy5tb2RlRnJvbnRpZXIsKytlLmRvYy5oaWdobGlnaHRGcm9udGllcikpfXJldHVybiB0LnN0eWxlc31mdW5jdGlvbiBRZShlLHQsbil7dmFyIHI9ZS5kb2Msbz1lLmRpc3BsYXk7aWYoIXIubW9kZS5zdGFydFN0YXRlKXJldHVybiBuZXcgcGEociwhMCx0KTt2YXIgcz1vdChlLHQsbiksaT1zPnIuZmlyc3QmJlIocixzLTEpLnN0YXRlQWZ0ZXIsYT1pP3BhLmZyb21TYXZlZChyLGkscyk6bmV3IHBhKHIsS2Uoci5tb2RlKSxzKTtyZXR1cm4gci5pdGVyKHMsdCxmdW5jdGlvbihuKXtKZShlLG4udGV4dCxhKTt2YXIgcj1hLmxpbmU7bi5zdGF0ZUFmdGVyPXI9PXQtMXx8ciU1PT0wfHxyPj1vLnZpZXdGcm9tJiZyPG8udmlld1RvP2Euc2F2ZSgpOm51bGwsYS5uZXh0TGluZSgpfSksbiYmKHIubW9kZUZyb250aWVyPWEubGluZSksYX1mdW5jdGlvbiBKZShlLHQsbixyKXt2YXIgbz1lLmRvYy5tb2RlLHM9bmV3IGRhKHQsZS5vcHRpb25zLnRhYlNpemUsbik7Zm9yKHMuc3RhcnQ9cy5wb3M9cnx8MCwiIj09dCYmWmUobyxuLnN0YXRlKTshcy5lb2woKTspZXQobyxzLG4uc3RhdGUpLHMuc3RhcnQ9cy5wb3N9ZnVuY3Rpb24gWmUoZSx0KXtpZihlLmJsYW5rTGluZSlyZXR1cm4gZS5ibGFua0xpbmUodCk7aWYoZS5pbm5lck1vZGUpe3ZhciBuPXFlKGUsdCk7cmV0dXJuIG4ubW9kZS5ibGFua0xpbmU/bi5tb2RlLmJsYW5rTGluZShuLnN0YXRlKTp2b2lkIDB9fWZ1bmN0aW9uIGV0KGUsdCxuLHIpe2Zvcih2YXIgbz0wO288MTA7bysrKXtyJiYoclswXT1xZShlLG4pLm1vZGUpO3ZhciBzPWUudG9rZW4odCxuKTtpZih0LnBvcz50LnN0YXJ0KXJldHVybiBzfXRocm93IG5ldyBFcnJvcigiTW9kZSAiK2UubmFtZSsiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKX1mdW5jdGlvbiB0dChlLHQsbixyKXt2YXIgbyxzPWUuZG9jLGk9cy5tb2RlO3Q9RyhzLHQpO3ZhciBhLGw9UihzLHQubGluZSksdT1RZShlLHQubGluZSxuKSxjPW5ldyBkYShsLnRleHQsZS5vcHRpb25zLnRhYlNpemUsdSk7Zm9yKHImJihhPVtdKTsocnx8Yy5wb3M8dC5jaCkmJiFjLmVvbCgpOyljLnN0YXJ0PWMucG9zLG89ZXQoaSxjLHUuc3RhdGUpLHImJmEucHVzaChuZXcgZmEoYyxvLFllKHMubW9kZSx1LnN0YXRlKSkpO3JldHVybiByP2E6bmV3IGZhKGMsbyx1LnN0YXRlKX1mdW5jdGlvbiBudChlLHQpe2lmKGUpZm9yKDs7KXt2YXIgbj1lLm1hdGNoKC8oPzpefFxzKylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighbilicmVhaztlPWUuc2xpY2UoMCxuLmluZGV4KStlLnNsaWNlKG4uaW5kZXgrblswXS5sZW5ndGgpO3ZhciByPW5bMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PXRbcl0/dFtyXT1uWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK25bMl0rIig/OiR8cykiKS50ZXN0KHRbcl0pfHwodFtyXSs9IiAiK25bMl0pfXJldHVybiBlfWZ1bmN0aW9uIHJ0KGUsdCxuLHIsbyxzLGkpe3ZhciBhPW4uZmxhdHRlblNwYW5zO251bGw9PWEmJihhPWUub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBsLHU9MCxjPW51bGwsZD1uZXcgZGEodCxlLm9wdGlvbnMudGFiU2l6ZSxyKSxfPWUub3B0aW9ucy5hZGRNb2RlQ2xhc3MmJltudWxsXTtmb3IoIiI9PXQmJm50KFplKG4sci5zdGF0ZSkscyk7IWQuZW9sKCk7KXtpZihkLnBvcz5lLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoPyhhPSExLGkmJkplKGUsdCxyLGQucG9zKSxkLnBvcz10Lmxlbmd0aCxsPW51bGwpOmw9bnQoZXQobixkLHIuc3RhdGUsXykscyksXyl7dmFyIHA9X1swXS5uYW1lO3AmJihsPSJtLSIrKGw/cCsiICIrbDpwKSl9aWYoIWF8fGMhPWwpe2Zvcig7dTxkLnN0YXJ0Oyl1PU1hdGgubWluKGQuc3RhcnQsdSs1ZTMpLG8odSxjKTtjPWx9ZC5zdGFydD1kLnBvc31mb3IoO3U8ZC5wb3M7KXt2YXIgZj1NYXRoLm1pbihkLnBvcyx1KzVlMyk7byhmLGMpLHU9Zn19ZnVuY3Rpb24gb3QoZSx0LG4pe2Zvcih2YXIgcixvLHM9ZS5kb2MsaT1uPy0xOnQtKGUuZG9jLm1vZGUuaW5uZXJNb2RlPzFlMzoxMDApLGE9dDthPmk7LS1hKXtpZihhPD1zLmZpcnN0KXJldHVybiBzLmZpcnN0O3ZhciBsPVIocyxhLTEpLHU9bC5zdGF0ZUFmdGVyO2lmKHUmJighbnx8YSsodSBpbnN0YW5jZW9mIF9hP3UubG9va0FoZWFkOjApPD1zLm1vZGVGcm9udGllcikpcmV0dXJuIGE7dmFyIGM9ZChsLnRleHQsbnVsbCxlLm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PW98fHI+YykmJihvPWEtMSxyPWMpfXJldHVybiBvfWZ1bmN0aW9uIHN0KGUsdCl7aWYoZS5tb2RlRnJvbnRpZXI9TWF0aC5taW4oZS5tb2RlRnJvbnRpZXIsdCksIShlLmhpZ2hsaWdodEZyb250aWVyPHQtMTApKXtmb3IodmFyIG49ZS5maXJzdCxyPXQtMTtyPm47ci0tKXt2YXIgbz1SKGUscikuc3RhdGVBZnRlcjtpZihvJiYoIShvIGluc3RhbmNlb2YgX2EpfHxyK28ubG9va0FoZWFkPHQpKXtuPXIrMTticmVha319ZS5oaWdobGlnaHRGcm9udGllcj1NYXRoLm1pbihlLmhpZ2hsaWdodEZyb250aWVyLG4pfX1mdW5jdGlvbiBpdChlLHQsbixyKXtlLnRleHQ9dCxlLnN0YXRlQWZ0ZXImJihlLnN0YXRlQWZ0ZXI9bnVsbCksZS5zdHlsZXMmJihlLnN0eWxlcz1udWxsKSxudWxsIT1lLm9yZGVyJiYoZS5vcmRlcj1udWxsKSxuZShlKSxyZShlLG4pO3ZhciBvPXI/cihlKToxO28hPWUuaGVpZ2h0JiZMKGUsbyl9ZnVuY3Rpb24gYXQoZSl7ZS5wYXJlbnQ9bnVsbCxuZShlKX1mdW5jdGlvbiBsdChlLHQpe2lmKCFlfHwvXlxzKiQvLnRlc3QoZSkpcmV0dXJuIG51bGw7dmFyIG49dC5hZGRNb2RlQ2xhc3M/YmE6Z2E7cmV0dXJuIG5bZV18fChuW2VdPWUucmVwbGFjZSgvXFMrL2csImNtLSQmIikpfWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG49bygic3BhbiIsbnVsbCxudWxsLHZpPyJwYWRkaW5nLXJpZ2h0OiAuMXB4IjpudWxsKSxyPXtwcmU6bygicHJlIixbbl0sIkNvZGVNaXJyb3ItbGluZSIpLGNvbnRlbnQ6bixjb2w6MCxwb3M6MCxjbTplLHRyYWlsaW5nU3BhY2U6ITEsc3BsaXRTcGFjZXM6ZS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpfTt0Lm1lYXN1cmU9e307Zm9yKHZhciBzPTA7czw9KHQucmVzdD90LnJlc3QubGVuZ3RoOjApO3MrKyl7dmFyIGk9cz90LnJlc3Rbcy0xXTp0LmxpbmUsYT12b2lkIDA7ci5wb3M9MCxyLmFkZFRva2VuPWR0LEZlKGUuZGlzcGxheS5tZWFzdXJlKSYmKGE9Q2UoaSxlLmRvYy5kaXJlY3Rpb24pKSYmKHIuYWRkVG9rZW49cHQoci5hZGRUb2tlbixhKSksci5tYXA9W107bXQoaSxyLCRlKGUsaSx0IT1lLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCYmRChpKSkpLGkuc3R5bGVDbGFzc2VzJiYoaS5zdHlsZUNsYXNzZXMuYmdDbGFzcyYmKHIuYmdDbGFzcz1sKGkuc3R5bGVDbGFzc2VzLmJnQ2xhc3Msci5iZ0NsYXNzfHwiIikpLGkuc3R5bGVDbGFzc2VzLnRleHRDbGFzcyYmKHIudGV4dENsYXNzPWwoaS5zdHlsZUNsYXNzZXMudGV4dENsYXNzLHIudGV4dENsYXNzfHwiIikpKSwwPT1yLm1hcC5sZW5ndGgmJnIubWFwLnB1c2goMCwwLHIuY29udGVudC5hcHBlbmRDaGlsZChIZShlLmRpc3BsYXkubWVhc3VyZSkpKSwwPT1zPyh0Lm1lYXN1cmUubWFwPXIubWFwLHQubWVhc3VyZS5jYWNoZT17fSk6KCh0Lm1lYXN1cmUubWFwc3x8KHQubWVhc3VyZS5tYXBzPVtdKSkucHVzaChyLm1hcCksKHQubWVhc3VyZS5jYWNoZXN8fCh0Lm1lYXN1cmUuY2FjaGVzPVtdKSkucHVzaCh7fSkpfWlmKHZpKXt2YXIgdT1yLmNvbnRlbnQubGFzdENoaWxkOygvXGJjbS10YWJcYi8udGVzdCh1LmNsYXNzTmFtZSl8fHUucXVlcnlTZWxlY3RvciYmdS5xdWVyeVNlbGVjdG9yKCIuY20tdGFiIikpJiYoci5jb250ZW50LmNsYXNzTmFtZT0iY20tdGFiLXdyYXAtaGFjayIpfXJldHVybiBSZShlLCJyZW5kZXJMaW5lIixlLHQubGluZSxyLnByZSksci5wcmUuY2xhc3NOYW1lJiYoci50ZXh0Q2xhc3M9bChyLnByZS5jbGFzc05hbWUsci50ZXh0Q2xhc3N8fCIiKSkscn1mdW5jdGlvbiBjdChlKXt2YXIgdD1yKCJzcGFuIiwi4oCiIiwiY20taW52YWxpZGNoYXIiKTtyZXR1cm4gdC50aXRsZT0iXFx1IitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0LnRpdGxlKSx0fWZ1bmN0aW9uIGR0KGUsdCxuLG8scyxpLGEpe2lmKHQpe3ZhciBsLHU9ZS5zcGxpdFNwYWNlcz9fdCh0LGUudHJhaWxpbmdTcGFjZSk6dCxjPWUuY20uc3RhdGUuc3BlY2lhbENoYXJzLGQ9ITE7aWYoYy50ZXN0KHQpKXtsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIF89MDs7KXtjLmxhc3RJbmRleD1fO3ZhciBwPWMuZXhlYyh0KSxtPXA/cC5pbmRleC1fOnQubGVuZ3RoLV87aWYobSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodS5zbGljZShfLF8rbSkpO0VpJiZ5aTw5P2wuYXBwZW5kQ2hpbGQocigic3BhbiIsW2hdKSk6bC5hcHBlbmRDaGlsZChoKSxlLm1hcC5wdXNoKGUucG9zLGUucG9zK20saCksZS5jb2wrPW0sZS5wb3MrPW19aWYoIXApYnJlYWs7Xys9bSsxO3ZhciBnPXZvaWQgMDtpZigiXHQiPT1wWzBdKXt2YXIgYj1lLmNtLm9wdGlvbnMudGFiU2l6ZSxFPWItZS5jb2wlYjtnPWwuYXBwZW5kQ2hpbGQocigic3BhbiIsZihFKSwiY20tdGFiIikpLGcuc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksZy5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCJcdCIpLGUuY29sKz1FfWVsc2UiXHIiPT1wWzBdfHwiXG4iPT1wWzBdPyhnPWwuYXBwZW5kQ2hpbGQocigic3BhbiIsIlxyIj09cFswXT8i4pCNIjoi4pCkIiwiY20taW52YWxpZGNoYXIiKSksZy5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLHBbMF0pLGUuY29sKz0xKTooZz1lLmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihwWzBdKSxnLnNldEF0dHJpYnV0ZSgiY20tdGV4dCIscFswXSksRWkmJnlpPDk/bC5hcHBlbmRDaGlsZChyKCJzcGFuIixbZ10pKTpsLmFwcGVuZENoaWxkKGcpLGUuY29sKz0xKTtlLm1hcC5wdXNoKGUucG9zLGUucG9zKzEsZyksZS5wb3MrK319ZWxzZSBlLmNvbCs9dC5sZW5ndGgsbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh1KSxlLm1hcC5wdXNoKGUucG9zLGUucG9zK3QubGVuZ3RoLGwpLEVpJiZ5aTw5JiYoZD0hMCksZS5wb3MrPXQubGVuZ3RoO2lmKGUudHJhaWxpbmdTcGFjZT0zMj09dS5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLG58fG98fHN8fGR8fGkpe3ZhciB5PW58fCIiO28mJih5Kz1vKSxzJiYoeSs9cyk7dmFyIHY9cigic3BhbiIsW2xdLHksaSk7aWYoYSlmb3IodmFyIFQgaW4gYSlhLmhhc093blByb3BlcnR5KFQpJiYic3R5bGUiIT1UJiYiY2xhc3MiIT1UJiZ2LnNldEF0dHJpYnV0ZShULGFbVF0pO3JldHVybiBlLmNvbnRlbnQuYXBwZW5kQ2hpbGQodil9ZS5jb250ZW50LmFwcGVuZENoaWxkKGwpfX1mdW5jdGlvbiBfdChlLHQpe2lmKGUubGVuZ3RoPjEmJiEvICAvLnRlc3QoZSkpcmV0dXJuIGU7Zm9yKHZhciBuPXQscj0iIixvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPWUuY2hhckF0KG8pOyIgIiE9c3x8IW58fG8hPWUubGVuZ3RoLTEmJjMyIT1lLmNoYXJDb2RlQXQobysxKXx8KHM9IsKgIikscis9cyxuPSIgIj09c31yZXR1cm4gcn1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBmdW5jdGlvbihuLHIsbyxzLGksYSxsKXtvPW8/bysiIGNtLWZvcmNlLWJvcmRlciI6ImNtLWZvcmNlLWJvcmRlciI7Zm9yKHZhciB1PW4ucG9zLGM9dStyLmxlbmd0aDs7KXtmb3IodmFyIGQ9dm9pZCAwLF89MDtfPHQubGVuZ3RoJiYoZD10W19dLCEoZC50bz51JiZkLmZyb208PXUpKTtfKyspO2lmKGQudG8+PWMpcmV0dXJuIGUobixyLG8scyxpLGEsbCk7ZShuLHIuc2xpY2UoMCxkLnRvLXUpLG8scyxudWxsLGEsbCkscz1udWxsLHI9ci5zbGljZShkLnRvLXUpLHU9ZC50b319fWZ1bmN0aW9uIGZ0KGUsdCxuLHIpe3ZhciBvPSFyJiZuLndpZGdldE5vZGU7byYmZS5tYXAucHVzaChlLnBvcyxlLnBvcyt0LG8pLCFyJiZlLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlJiYob3x8KG89ZS5jb250ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSkpLG8uc2V0QXR0cmlidXRlKCJjbS1tYXJrZXIiLG4uaWQpKSxvJiYoZS5jbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobyksZS5jb250ZW50LmFwcGVuZENoaWxkKG8pKSxlLnBvcys9dCxlLnRyYWlsaW5nU3BhY2U9ITF9ZnVuY3Rpb24gbXQoZSx0LG4pe3ZhciByPWUubWFya2VkU3BhbnMsbz1lLnRleHQscz0wO2lmKHIpZm9yKHZhciBpLGEsbCx1LGMsZCxfLHA9by5sZW5ndGgsZj0wLG09MSxoPSIiLGc9MDs7KXtpZihnPT1mKXtsPXU9Yz1hPSIiLF89bnVsbCxkPW51bGwsZz0xLzA7Zm9yKHZhciBiPVtdLEU9dm9pZCAwLHk9MDt5PHIubGVuZ3RoOysreSl7dmFyIHY9clt5XSxUPXYubWFya2VyO2lmKCJib29rbWFyayI9PVQudHlwZSYmdi5mcm9tPT1mJiZULndpZGdldE5vZGUpYi5wdXNoKFQpO2Vsc2UgaWYodi5mcm9tPD1mJiYobnVsbD09di50b3x8di50bz5mfHxULmNvbGxhcHNlZCYmdi50bz09ZiYmdi5mcm9tPT1mKSl7aWYobnVsbCE9di50byYmdi50byE9ZiYmZz52LnRvJiYoZz12LnRvLHU9IiIpLFQuY2xhc3NOYW1lJiYobCs9IiAiK1QuY2xhc3NOYW1lKSxULmNzcyYmKGE9KGE/YSsiOyI6IiIpK1QuY3NzKSxULnN0YXJ0U3R5bGUmJnYuZnJvbT09ZiYmKGMrPSIgIitULnN0YXJ0U3R5bGUpLFQuZW5kU3R5bGUmJnYudG89PWcmJihFfHwoRT1bXSkpLnB1c2goVC5lbmRTdHlsZSx2LnRvKSxULnRpdGxlJiYoKF98fChfPXt9KSkudGl0bGU9VC50aXRsZSksVC5hdHRyaWJ1dGVzKWZvcih2YXIgQSBpbiBULmF0dHJpYnV0ZXMpKF98fChfPXt9KSlbQV09VC5hdHRyaWJ1dGVzW0FdO1QuY29sbGFwc2VkJiYoIWR8fGllKGQubWFya2VyLFQpPDApJiYoZD12KX1lbHNlIHYuZnJvbT5mJiZnPnYuZnJvbSYmKGc9di5mcm9tKX1pZihFKWZvcih2YXIgQz0wO0M8RS5sZW5ndGg7Qys9MilFW0MrMV09PWcmJih1Kz0iICIrRVtDXSk7aWYoIWR8fGQuZnJvbT09Zilmb3IodmFyIE89MDtPPGIubGVuZ3RoOysrTylmdCh0LDAsYltPXSk7aWYoZCYmKGQuZnJvbXx8MCk9PWYpe2lmKGZ0KHQsKG51bGw9PWQudG8/cCsxOmQudG8pLWYsZC5tYXJrZXIsbnVsbD09ZC5mcm9tKSxudWxsPT1kLnRvKXJldHVybjtkLnRvPT1mJiYoZD0hMSl9fWlmKGY+PXApYnJlYWs7Zm9yKHZhciBTPU1hdGgubWluKHAsZyk7Oyl7aWYoaCl7dmFyIFI9ZitoLmxlbmd0aDtpZighZCl7dmFyIGo9Uj5TP2guc2xpY2UoMCxTLWYpOmg7dC5hZGRUb2tlbih0LGosaT9pK2w6bCxjLGYrai5sZW5ndGg9PWc/dToiIixhLF8pfWlmKFI+PVMpe2g9aC5zbGljZShTLWYpLGY9UzticmVha31mPVIsYz0iIn1oPW8uc2xpY2UocyxzPW5bbSsrXSksaT1sdChuW20rK10sdC5jbS5vcHRpb25zKX19ZWxzZSBmb3IodmFyIHg9MTt4PG4ubGVuZ3RoO3grPTIpdC5hZGRUb2tlbih0LG8uc2xpY2UocyxzPW5beF0pLGx0KG5beCsxXSx0LmNtLm9wdGlvbnMpKX1mdW5jdGlvbiBodChlLHQsbil7dGhpcy5saW5lPXQsdGhpcy5yZXN0PWZlKHQpLHRoaXMuc2l6ZT10aGlzLnJlc3Q/RChtKHRoaXMucmVzdCkpLW4rMToxLHRoaXMubm9kZT10aGlzLnRleHQ9bnVsbCx0aGlzLmhpZGRlbj1nZShlLHQpfWZ1bmN0aW9uIGd0KGUsdCxuKXtmb3IodmFyIHIsbz1bXSxzPXQ7czxuO3M9cil7dmFyIGk9bmV3IGh0KGUuZG9jLFIoZS5kb2Mscykscyk7cj1zK2kuc2l6ZSxvLnB1c2goaSl9cmV0dXJuIG99ZnVuY3Rpb24gYnQoZSl7RWE/RWEub3BzLnB1c2goZSk6ZS5vd25zR3JvdXA9RWE9e29wczpbZV0sZGVsYXllZENhbGxiYWNrczpbXX19ZnVuY3Rpb24gRXQoZSl7dmFyIHQ9ZS5kZWxheWVkQ2FsbGJhY2tzLG49MDtkb3tmb3IoO248dC5sZW5ndGg7bisrKXRbbl0uY2FsbChudWxsKTtmb3IodmFyIHI9MDtyPGUub3BzLmxlbmd0aDtyKyspe3ZhciBvPWUub3BzW3JdO2lmKG8uY3Vyc29yQWN0aXZpdHlIYW5kbGVycylmb3IoO28uY3Vyc29yQWN0aXZpdHlDYWxsZWQ8by5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzLmxlbmd0aDspby5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW28uY3Vyc29yQWN0aXZpdHlDYWxsZWQrK10uY2FsbChudWxsLG8uY20pfX13aGlsZShuPHQubGVuZ3RoKX1mdW5jdGlvbiB5dChlLHQpe3ZhciBuPWUub3duc0dyb3VwO2lmKG4pdHJ5e0V0KG4pfWZpbmFsbHl7RWE9bnVsbCx0KG4pfX1mdW5jdGlvbiB2dChlLHQpe3ZhciBuPU9lKGUsdCk7aWYobi5sZW5ndGgpe3ZhciByLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO0VhP3I9RWEuZGVsYXllZENhbGxiYWNrczp5YT9yPXlhOihyPXlhPVtdLHNldFRpbWVvdXQoVHQsMCkpO2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7KytzKSFmdW5jdGlvbihlKXtyLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gbltlXS5hcHBseShudWxsLG8pfSl9KHMpfX1mdW5jdGlvbiBUdCgpe3ZhciBlPXlhO3lhPW51bGw7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDsrK3QpZVt0XSgpfWZ1bmN0aW9uIEF0KGUsdCxuLHIpe2Zvcih2YXIgbz0wO288dC5jaGFuZ2VzLmxlbmd0aDtvKyspe3ZhciBzPXQuY2hhbmdlc1tvXTsidGV4dCI9PXM/UnQoZSx0KToiZ3V0dGVyIj09cz94dChlLHQsbixyKToiY2xhc3MiPT1zP2p0KGUsdCk6IndpZGdldCI9PXMmJkx0KGUsdCxyKX10LmNoYW5nZXM9bnVsbH1mdW5jdGlvbiBDdChlKXtyZXR1cm4gZS5ub2RlPT1lLnRleHQmJihlLm5vZGU9cigiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLGUudGV4dC5wYXJlbnROb2RlJiZlLnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZS5ub2RlLGUudGV4dCksZS5ub2RlLmFwcGVuZENoaWxkKGUudGV4dCksRWkmJnlpPDgmJihlLm5vZGUuc3R5bGUuekluZGV4PTIpKSxlLm5vZGV9ZnVuY3Rpb24gT3QoZSx0KXt2YXIgbj10LmJnQ2xhc3M/dC5iZ0NsYXNzKyIgIisodC5saW5lLmJnQ2xhc3N8fCIiKTp0LmxpbmUuYmdDbGFzcztpZihuJiYobis9IiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksdC5iYWNrZ3JvdW5kKW4/dC5iYWNrZ3JvdW5kLmNsYXNzTmFtZT1uOih0LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmJhY2tncm91bmQpLHQuYmFja2dyb3VuZD1udWxsKTtlbHNlIGlmKG4pe3ZhciBvPUN0KHQpO3QuYmFja2dyb3VuZD1vLmluc2VydEJlZm9yZShyKCJkaXYiLG51bGwsbiksby5maXJzdENoaWxkKSxlLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZSh0LmJhY2tncm91bmQpfX1mdW5jdGlvbiBTdChlLHQpe3ZhciBuPWUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO3JldHVybiBuJiZuLmxpbmU9PXQubGluZT8oZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ9bnVsbCx0Lm1lYXN1cmU9bi5tZWFzdXJlLG4uYnVpbHQpOnV0KGUsdCl9ZnVuY3Rpb24gUnQoZSx0KXt2YXIgbj10LnRleHQuY2xhc3NOYW1lLHI9U3QoZSx0KTt0LnRleHQ9PXQubm9kZSYmKHQubm9kZT1yLnByZSksdC50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHIucHJlLHQudGV4dCksdC50ZXh0PXIucHJlLHIuYmdDbGFzcyE9dC5iZ0NsYXNzfHxyLnRleHRDbGFzcyE9dC50ZXh0Q2xhc3M/KHQuYmdDbGFzcz1yLmJnQ2xhc3MsdC50ZXh0Q2xhc3M9ci50ZXh0Q2xhc3MsanQoZSx0KSk6biYmKHQudGV4dC5jbGFzc05hbWU9bil9ZnVuY3Rpb24ganQoZSx0KXtPdChlLHQpLHQubGluZS53cmFwQ2xhc3M/Q3QodCkuY2xhc3NOYW1lPXQubGluZS53cmFwQ2xhc3M6dC5ub2RlIT10LnRleHQmJih0Lm5vZGUuY2xhc3NOYW1lPSIiKTt2YXIgbj10LnRleHRDbGFzcz90LnRleHRDbGFzcysiICIrKHQubGluZS50ZXh0Q2xhc3N8fCIiKTp0LmxpbmUudGV4dENsYXNzO3QudGV4dC5jbGFzc05hbWU9bnx8IiJ9ZnVuY3Rpb24geHQoZSx0LG4sbyl7aWYodC5ndXR0ZXImJih0Lm5vZGUucmVtb3ZlQ2hpbGQodC5ndXR0ZXIpLHQuZ3V0dGVyPW51bGwpLHQuZ3V0dGVyQmFja2dyb3VuZCYmKHQubm9kZS5yZW1vdmVDaGlsZCh0Lmd1dHRlckJhY2tncm91bmQpLHQuZ3V0dGVyQmFja2dyb3VuZD1udWxsKSx0LmxpbmUuZ3V0dGVyQ2xhc3Mpe3ZhciBzPUN0KHQpO3QuZ3V0dGVyQmFja2dyb3VuZD1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWJhY2tncm91bmQgIit0LmxpbmUuZ3V0dGVyQ2xhc3MsImxlZnQ6ICIrKGUub3B0aW9ucy5maXhlZEd1dHRlcj9vLmZpeGVkUG9zOi1vLmd1dHRlclRvdGFsV2lkdGgpKyJweDsgd2lkdGg6ICIrby5ndXR0ZXJUb3RhbFdpZHRoKyJweCIpLGUuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHQuZ3V0dGVyQmFja2dyb3VuZCkscy5pbnNlcnRCZWZvcmUodC5ndXR0ZXJCYWNrZ3JvdW5kLHQudGV4dCl9dmFyIGk9dC5saW5lLmd1dHRlck1hcmtlcnM7aWYoZS5vcHRpb25zLmxpbmVOdW1iZXJzfHxpKXt2YXIgYT1DdCh0KSxsPXQuZ3V0dGVyPXIoImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciIsImxlZnQ6ICIrKGUub3B0aW9ucy5maXhlZEd1dHRlcj9vLmZpeGVkUG9zOi1vLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpO2lmKGUuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGwpLGEuaW5zZXJ0QmVmb3JlKGwsdC50ZXh0KSx0LmxpbmUuZ3V0dGVyQ2xhc3MmJihsLmNsYXNzTmFtZSs9IiAiK3QubGluZS5ndXR0ZXJDbGFzcyksIWUub3B0aW9ucy5saW5lTnVtYmVyc3x8aSYmaVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwodC5saW5lTnVtYmVyPWwuYXBwZW5kQ2hpbGQocigiZGl2IixrKGUub3B0aW9ucyxuKSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrby5ndXR0ZXJMZWZ0WyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0rInB4OyB3aWR0aDogIitlLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxpKWZvcih2YXIgdT0wO3U8ZS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9ZS5vcHRpb25zLmd1dHRlcnNbdV0sZD1pLmhhc093blByb3BlcnR5KGMpJiZpW2NdO2QmJmwuYXBwZW5kQ2hpbGQocigiZGl2IixbZF0sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrby5ndXR0ZXJMZWZ0W2NdKyJweDsgd2lkdGg6ICIrby5ndXR0ZXJXaWR0aFtjXSsicHgiKSl9fX1mdW5jdGlvbiBMdChlLHQsbil7dC5hbGlnbmFibGUmJih0LmFsaWduYWJsZT1udWxsKTtmb3IodmFyIHI9dC5ub2RlLmZpcnN0Q2hpbGQsbz12b2lkIDA7cjtyPW8pbz1yLm5leHRTaWJsaW5nLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiPT1yLmNsYXNzTmFtZSYmdC5ub2RlLnJlbW92ZUNoaWxkKHIpO3d0KGUsdCxuKX1mdW5jdGlvbiBEdChlLHQsbixyKXt2YXIgbz1TdChlLHQpO3JldHVybiB0LnRleHQ9dC5ub2RlPW8ucHJlLG8uYmdDbGFzcyYmKHQuYmdDbGFzcz1vLmJnQ2xhc3MpLG8udGV4dENsYXNzJiYodC50ZXh0Q2xhc3M9by50ZXh0Q2xhc3MpLGp0KGUsdCkseHQoZSx0LG4sciksd3QoZSx0LHIpLHQubm9kZX1mdW5jdGlvbiB3dChlLHQsbil7aWYoTXQoZSx0LmxpbmUsdCxuLCEwKSx0LnJlc3QpZm9yKHZhciByPTA7cjx0LnJlc3QubGVuZ3RoO3IrKylNdChlLHQucmVzdFtyXSx0LG4sITEpfWZ1bmN0aW9uIE10KGUsdCxuLG8scyl7aWYodC53aWRnZXRzKWZvcih2YXIgaT1DdChuKSxhPTAsbD10LndpZGdldHM7YTxsLmxlbmd0aDsrK2Epe3ZhciB1PWxbYV0sYz1yKCJkaXYiLFt1Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt1LmhhbmRsZU1vdXNlRXZlbnRzfHxjLnNldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50cyIsInRydWUiKSxrdCh1LGMsbixvKSxlLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShjKSxzJiZ1LmFib3ZlP2kuaW5zZXJ0QmVmb3JlKGMsbi5ndXR0ZXJ8fG4udGV4dCk6aS5hcHBlbmRDaGlsZChjKSx2dCh1LCJyZWRyYXciKX19ZnVuY3Rpb24ga3QoZSx0LG4scil7aWYoZS5ub0hTY3JvbGwpeyhuLmFsaWduYWJsZXx8KG4uYWxpZ25hYmxlPVtdKSkucHVzaCh0KTt2YXIgbz1yLndyYXBwZXJXaWR0aDt0LnN0eWxlLmxlZnQ9ci5maXhlZFBvcysicHgiLGUuY292ZXJHdXR0ZXJ8fChvLT1yLmd1dHRlclRvdGFsV2lkdGgsdC5zdHlsZS5wYWRkaW5nTGVmdD1yLmd1dHRlclRvdGFsV2lkdGgrInB4IiksdC5zdHlsZS53aWR0aD1vKyJweCJ9ZS5jb3Zlckd1dHRlciYmKHQuc3R5bGUuekluZGV4PTUsdC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGUubm9IU2Nyb2xsfHwodC5zdHlsZS5tYXJnaW5MZWZ0PS1yLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEl0KGUpe2lmKG51bGwhPWUuaGVpZ2h0KXJldHVybiBlLmhlaWdodDt2YXIgdD1lLmRvYy5jbTtpZighdClyZXR1cm4gMDtpZighcyhkb2N1bWVudC5ib2R5LGUubm9kZSkpe3ZhciBvPSJwb3NpdGlvbjogcmVsYXRpdmU7IjtlLmNvdmVyR3V0dGVyJiYobys9Im1hcmdpbi1sZWZ0OiAtIit0LmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCsicHg7IiksZS5ub0hTY3JvbGwmJihvKz0id2lkdGg6ICIrdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgrInB4OyIpLG4odC5kaXNwbGF5Lm1lYXN1cmUscigiZGl2IixbZS5ub2RlXSxudWxsLG8pKX1yZXR1cm4gZS5oZWlnaHQ9ZS5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFB0KGUsdCl7Zm9yKHZhciBuPVBlKHQpO24hPWUud3JhcHBlcjtuPW4ucGFyZW50Tm9kZSlpZighbnx8MT09bi5ub2RlVHlwZSYmInRydWUiPT1uLmdldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50cyIpfHxuLnBhcmVudE5vZGU9PWUuc2l6ZXImJm4hPWUubW92ZXIpcmV0dXJuITB9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIGUubGluZVNwYWNlLm9mZnNldFRvcH1mdW5jdGlvbiBIdChlKXtyZXR1cm4gZS5tb3Zlci5vZmZzZXRIZWlnaHQtZS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIEZ0KGUpe2lmKGUuY2FjaGVkUGFkZGluZ0gpcmV0dXJuIGUuY2FjaGVkUGFkZGluZ0g7dmFyIHQ9bihlLm1lYXN1cmUscigicHJlIiwieCIpKSxvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnQuY3VycmVudFN0eWxlLHM9e2xlZnQ6cGFyc2VJbnQoby5wYWRkaW5nTGVmdCkscmlnaHQ6cGFyc2VJbnQoby5wYWRkaW5nUmlnaHQpfTtyZXR1cm4gaXNOYU4ocy5sZWZ0KXx8aXNOYU4ocy5yaWdodCl8fChlLmNhY2hlZFBhZGRpbmdIPXMpLHN9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIHppLWUuZGlzcGxheS5uYXRpdmVCYXJXaWR0aH1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLUJ0KGUpLWUuZGlzcGxheS5iYXJXaWR0aH1mdW5jdGlvbiBHdChlKXtyZXR1cm4gZS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodC1CdChlKS1lLmRpc3BsYXkuYmFySGVpZ2h0fWZ1bmN0aW9uIHp0KGUsdCxuKXt2YXIgcj1lLm9wdGlvbnMubGluZVdyYXBwaW5nLG89ciYmVXQoZSk7aWYoIXQubWVhc3VyZS5oZWlnaHRzfHxyJiZ0Lm1lYXN1cmUud2lkdGghPW8pe3ZhciBzPXQubWVhc3VyZS5oZWlnaHRzPVtdO2lmKHIpe3QubWVhc3VyZS53aWR0aD1vO2Zvcih2YXIgaT10LnRleHQuZmlyc3RDaGlsZC5nZXRDbGllbnRSZWN0cygpLGE9MDthPGkubGVuZ3RoLTE7YSsrKXt2YXIgbD1pW2FdLHU9aVthKzFdO01hdGguYWJzKGwuYm90dG9tLXUuYm90dG9tKT4yJiZzLnB1c2goKGwuYm90dG9tK3UudG9wKS8yLW4udG9wKX19cy5wdXNoKG4uYm90dG9tLW4udG9wKX19ZnVuY3Rpb24gVnQoZSx0LG4pe2lmKGUubGluZT09dClyZXR1cm57bWFwOmUubWVhc3VyZS5tYXAsY2FjaGU6ZS5tZWFzdXJlLmNhY2hlfTtmb3IodmFyIHI9MDtyPGUucmVzdC5sZW5ndGg7cisrKWlmKGUucmVzdFtyXT09dClyZXR1cm57bWFwOmUubWVhc3VyZS5tYXBzW3JdLGNhY2hlOmUubWVhc3VyZS5jYWNoZXNbcl19O2Zvcih2YXIgbz0wO288ZS5yZXN0Lmxlbmd0aDtvKyspaWYoRChlLnJlc3Rbb10pPm4pcmV0dXJue21hcDplLm1lYXN1cmUubWFwc1tvXSxjYWNoZTplLm1lYXN1cmUuY2FjaGVzW29dLGJlZm9yZTohMH19ZnVuY3Rpb24gV3QoZSx0KXt0PV9lKHQpO3ZhciByPUQodCksbz1lLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1uZXcgaHQoZS5kb2MsdCxyKTtvLmxpbmVOPXI7dmFyIHM9by5idWlsdD11dChlLG8pO3JldHVybiBvLnRleHQ9cy5wcmUsbihlLmRpc3BsYXkubGluZU1lYXN1cmUscy5wcmUpLG99ZnVuY3Rpb24gWXQoZSx0LG4scil7cmV0dXJuIFh0KGUsS3QoZSx0KSxuLHIpfWZ1bmN0aW9uIHF0KGUsdCl7aWYodD49ZS5kaXNwbGF5LnZpZXdGcm9tJiZ0PGUuZGlzcGxheS52aWV3VG8pcmV0dXJuIGUuZGlzcGxheS52aWV3W1JuKGUsdCldO3ZhciBuPWUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO3JldHVybiBuJiZ0Pj1uLmxpbmVOJiZ0PG4ubGluZU4rbi5zaXplP246dm9pZCAwfWZ1bmN0aW9uIEt0KGUsdCl7dmFyIG49RCh0KSxyPXF0KGUsbik7ciYmIXIudGV4dD9yPW51bGw6ciYmci5jaGFuZ2VzJiYoQXQoZSxyLG4sVG4oZSkpLGUuY3VyT3AuZm9yY2VVcGRhdGU9ITApLHJ8fChyPVd0KGUsdCkpO3ZhciBvPVZ0KHIsdCxuKTtyZXR1cm57bGluZTp0LHZpZXc6cixyZWN0Om51bGwsbWFwOm8ubWFwLGNhY2hlOm8uY2FjaGUsYmVmb3JlOm8uYmVmb3JlLGhhc0hlaWdodHM6ITF9fWZ1bmN0aW9uIFh0KGUsdCxuLHIsbyl7dC5iZWZvcmUmJihuPS0xKTt2YXIgcyxpPW4rKHJ8fCIiKTtyZXR1cm4gdC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShpKT9zPXQuY2FjaGVbaV06KHQucmVjdHx8KHQucmVjdD10LnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdC5oYXNIZWlnaHRzfHwoenQoZSx0LnZpZXcsdC5yZWN0KSx0Lmhhc0hlaWdodHM9ITApLHM9SnQoZSx0LG4scikscy5ib2d1c3x8KHQuY2FjaGVbaV09cykpLHtsZWZ0OnMubGVmdCxyaWdodDpzLnJpZ2h0LHRvcDpvP3MucnRvcDpzLnRvcCxib3R0b206bz9zLnJib3R0b206cy5ib3R0b219fWZ1bmN0aW9uICR0KGUsdCxuKXtmb3IodmFyIHIsbyxzLGksYSxsLHU9MDt1PGUubGVuZ3RoO3UrPTMpaWYoYT1lW3VdLGw9ZVt1KzFdLHQ8YT8obz0wLHM9MSxpPSJsZWZ0Iik6dDxsPyhvPXQtYSxzPW8rMSk6KHU9PWUubGVuZ3RoLTN8fHQ9PWwmJmVbdSszXT50KSYmKHM9bC1hLG89cy0xLHQ+PWwmJihpPSJyaWdodCIpKSxudWxsIT1vKXtpZihyPWVbdSsyXSxhPT1sJiZuPT0oci5pbnNlcnRMZWZ0PyJsZWZ0IjoicmlnaHQiKSYmKGk9biksImxlZnQiPT1uJiYwPT1vKWZvcig7dSYmZVt1LTJdPT1lW3UtM10mJmVbdS0xXS5pbnNlcnRMZWZ0OylyPWVbMisodS09MyldLGk9ImxlZnQiO2lmKCJyaWdodCI9PW4mJm89PWwtYSlmb3IoO3U8ZS5sZW5ndGgtMyYmZVt1KzNdPT1lW3UrNF0mJiFlW3UrNV0uaW5zZXJ0TGVmdDspcj1lWyh1Kz0zKSsyXSxpPSJyaWdodCI7YnJlYWt9cmV0dXJue25vZGU6cixzdGFydDpvLGVuZDpzLGNvbGxhcHNlOmksY292ZXJTdGFydDphLGNvdmVyRW5kOmx9fWZ1bmN0aW9uIFF0KGUsdCl7dmFyIG49dmE7aWYoImxlZnQiPT10KWZvcih2YXIgcj0wO3I8ZS5sZW5ndGgmJihuPWVbcl0pLmxlZnQ9PW4ucmlnaHQ7cisrKTtlbHNlIGZvcih2YXIgbz1lLmxlbmd0aC0xO28+PTAmJihuPWVbb10pLmxlZnQ9PW4ucmlnaHQ7by0tKTtyZXR1cm4gbn1mdW5jdGlvbiBKdChlLHQsbixyKXt2YXIgbyxzPSR0KHQubWFwLG4sciksaT1zLm5vZGUsYT1zLnN0YXJ0LGw9cy5lbmQsdT1zLmNvbGxhcHNlO2lmKDM9PWkubm9kZVR5cGUpe2Zvcih2YXIgYz0wO2M8NDtjKyspe2Zvcig7YSYmQSh0LmxpbmUudGV4dC5jaGFyQXQocy5jb3ZlclN0YXJ0K2EpKTspLS1hO2Zvcig7cy5jb3ZlclN0YXJ0K2w8cy5jb3ZlckVuZCYmQSh0LmxpbmUudGV4dC5jaGFyQXQocy5jb3ZlclN0YXJ0K2wpKTspKytsO2lmKG89RWkmJnlpPDkmJjA9PWEmJmw9PXMuY292ZXJFbmQtcy5jb3ZlclN0YXJ0P2kucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpRdChJaShpLGEsbCkuZ2V0Q2xpZW50UmVjdHMoKSxyKSxvLmxlZnR8fG8ucmlnaHR8fDA9PWEpYnJlYWs7bD1hLGEtPTEsdT0icmlnaHQifUVpJiZ5aTwxMSYmKG89WnQoZS5kaXNwbGF5Lm1lYXN1cmUsbykpfWVsc2V7YT4wJiYodT1yPSJyaWdodCIpO3ZhciBkO289ZS5vcHRpb25zLmxpbmVXcmFwcGluZyYmKGQ9aS5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGg+MT9kWyJyaWdodCI9PXI/ZC5sZW5ndGgtMTowXTppLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWlmKEVpJiZ5aTw5JiYhYSYmKCFvfHwhby5sZWZ0JiYhby5yaWdodCkpe3ZhciBfPWkucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdO289Xz97bGVmdDpfLmxlZnQscmlnaHQ6Xy5sZWZ0K3ZuKGUuZGlzcGxheSksdG9wOl8udG9wLGJvdHRvbTpfLmJvdHRvbX06dmF9Zm9yKHZhciBwPW8udG9wLXQucmVjdC50b3AsZj1vLmJvdHRvbS10LnJlY3QudG9wLG09KHArZikvMixoPXQudmlldy5tZWFzdXJlLmhlaWdodHMsZz0wO2c8aC5sZW5ndGgtMSYmIShtPGhbZ10pO2crKyk7dmFyIGI9Zz9oW2ctMV06MCxFPWhbZ10seT17bGVmdDooInJpZ2h0Ij09dT9vLnJpZ2h0Om8ubGVmdCktdC5yZWN0LmxlZnQscmlnaHQ6KCJsZWZ0Ij09dT9vLmxlZnQ6by5yaWdodCktdC5yZWN0LmxlZnQsdG9wOmIsYm90dG9tOkV9O3JldHVybiBvLmxlZnR8fG8ucmlnaHR8fCh5LmJvZ3VzPSEwKSxlLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZXx8KHkucnRvcD1wLHkucmJvdHRvbT1mKSx5fWZ1bmN0aW9uIFp0KGUsdCl7aWYoIXdpbmRvdy5zY3JlZW58fG51bGw9PXNjcmVlbi5sb2dpY2FsWERQSXx8c2NyZWVuLmxvZ2ljYWxYRFBJPT1zY3JlZW4uZGV2aWNlWERQSXx8IUJlKGUpKXJldHVybiB0O3ZhciBuPXNjcmVlbi5sb2dpY2FsWERQSS9zY3JlZW4uZGV2aWNlWERQSSxyPXNjcmVlbi5sb2dpY2FsWURQSS9zY3JlZW4uZGV2aWNlWURQSTtyZXR1cm57bGVmdDp0LmxlZnQqbixyaWdodDp0LnJpZ2h0Km4sdG9wOnQudG9wKnIsYm90dG9tOnQuYm90dG9tKnJ9fWZ1bmN0aW9uIGVuKGUpe2lmKGUubWVhc3VyZSYmKGUubWVhc3VyZS5jYWNoZT17fSxlLm1lYXN1cmUuaGVpZ2h0cz1udWxsLGUucmVzdCkpZm9yKHZhciB0PTA7dDxlLnJlc3QubGVuZ3RoO3QrKyllLm1lYXN1cmUuY2FjaGVzW3RdPXt9fWZ1bmN0aW9uIHRuKGUpe2UuZGlzcGxheS5leHRlcm5hbE1lYXN1cmU9bnVsbCx0KGUuZGlzcGxheS5saW5lTWVhc3VyZSk7Zm9yKHZhciBuPTA7bjxlLmRpc3BsYXkudmlldy5sZW5ndGg7bisrKWVuKGUuZGlzcGxheS52aWV3W25dKX1mdW5jdGlvbiBubihlKXt0bihlKSxlLmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPWUuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PWUuZGlzcGxheS5jYWNoZWRQYWRkaW5nSD1udWxsLGUub3B0aW9ucy5saW5lV3JhcHBpbmd8fChlLmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLGUuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBybigpe3JldHVybiBBaSYmeGk/LShkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5MZWZ0KSk6d2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIG9uKCl7cmV0dXJuIEFpJiZ4aT8tKGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkubWFyZ2luVG9wKSk6d2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9MDtpZihlLndpZGdldHMpZm9yKHZhciBuPTA7bjxlLndpZGdldHMubGVuZ3RoOysrbillLndpZGdldHNbbl0uYWJvdmUmJih0Kz1JdChlLndpZGdldHNbbl0pKTtyZXR1cm4gdH1mdW5jdGlvbiBhbihlLHQsbixyLG8pe2lmKCFvKXt2YXIgcz1zbih0KTtuLnRvcCs9cyxuLmJvdHRvbSs9c31pZigibGluZSI9PXIpcmV0dXJuIG47cnx8KHI9ImxvY2FsIik7dmFyIGk9RWUodCk7aWYoImxvY2FsIj09cj9pKz1OdChlLmRpc3BsYXkpOmktPWUuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09cnx8IndpbmRvdyI9PXIpe3ZhciBhPWUuZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aSs9YS50b3ArKCJ3aW5kb3ciPT1yPzA6b24oKSk7dmFyIGw9YS5sZWZ0Kygid2luZG93Ij09cj8wOnJuKCkpO24ubGVmdCs9bCxuLnJpZ2h0Kz1sfXJldHVybiBuLnRvcCs9aSxuLmJvdHRvbSs9aSxufWZ1bmN0aW9uIGxuKGUsdCxuKXtpZigiZGl2Ij09bilyZXR1cm4gdDt2YXIgcj10LmxlZnQsbz10LnRvcDtpZigicGFnZSI9PW4pci09cm4oKSxvLT1vbigpO2Vsc2UgaWYoImxvY2FsIj09bnx8IW4pe3ZhciBzPWUuZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKz1zLmxlZnQsbys9cy50b3B9dmFyIGk9ZS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDpyLWkubGVmdCx0b3A6by1pLnRvcH19ZnVuY3Rpb24gdW4oZSx0LG4scixvKXtyZXR1cm4gcnx8KHI9UihlLmRvYyx0LmxpbmUpKSxhbihlLHIsWXQoZSxyLHQuY2gsbyksbil9ZnVuY3Rpb24gY24oZSx0LG4scixvLHMpe2Z1bmN0aW9uIGkodCxpKXt2YXIgYT1YdChlLG8sdCxpPyJyaWdodCI6ImxlZnQiLHMpO3JldHVybiBpP2EubGVmdD1hLnJpZ2h0OmEucmlnaHQ9YS5sZWZ0LGFuKGUscixhLG4pfWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPWxbdF0sbz0xPT1yLmxldmVsO3JldHVybiBpKG4/ZS0xOmUsbyE9bil9cj1yfHxSKGUuZG9jLHQubGluZSksb3x8KG89S3QoZSxyKSk7dmFyIGw9Q2UocixlLmRvYy5kaXJlY3Rpb24pLHU9dC5jaCxjPXQuc3RpY2t5O2lmKHU+PXIudGV4dC5sZW5ndGg/KHU9ci50ZXh0Lmxlbmd0aCxjPSJiZWZvcmUiKTp1PD0wJiYodT0wLGM9ImFmdGVyIiksIWwpcmV0dXJuIGkoImJlZm9yZSI9PWM/dS0xOnUsImJlZm9yZSI9PWMpO3ZhciBkPUFlKGwsdSxjKSxfPVppLHA9YSh1LGQsImJlZm9yZSI9PWMpO3JldHVybiBudWxsIT1fJiYocC5vdGhlcj1hKHUsXywiYmVmb3JlIiE9YykpLHB9ZnVuY3Rpb24gZG4oZSx0KXt2YXIgbj0wO3Q9RyhlLmRvYyx0KSxlLm9wdGlvbnMubGluZVdyYXBwaW5nfHwobj12bihlLmRpc3BsYXkpKnQuY2gpO3ZhciByPVIoZS5kb2MsdC5saW5lKSxvPUVlKHIpK050KGUuZGlzcGxheSk7cmV0dXJue2xlZnQ6bixyaWdodDpuLHRvcDpvLGJvdHRvbTpvK3IuaGVpZ2h0fX1mdW5jdGlvbiBfbihlLHQsbixyLG8pe3ZhciBzPUkoZSx0LG4pO3JldHVybiBzLnhSZWw9byxyJiYocy5vdXRzaWRlPSEwKSxzfWZ1bmN0aW9uIHBuKGUsdCxuKXt2YXIgcj1lLmRvYztpZigobis9ZS5kaXNwbGF5LnZpZXdPZmZzZXQpPDApcmV0dXJuIF9uKHIuZmlyc3QsMCxudWxsLCEwLC0xKTt2YXIgbz13KHIsbikscz1yLmZpcnN0K3Iuc2l6ZS0xO2lmKG8+cylyZXR1cm4gX24oci5maXJzdCtyLnNpemUtMSxSKHIscykudGV4dC5sZW5ndGgsbnVsbCwhMCwxKTt0PDAmJih0PTApO2Zvcih2YXIgaT1SKHIsbyk7Oyl7dmFyIGE9Z24oZSxpLG8sdCxuKSxsPWNlKGksYS5jaCsoYS54UmVsPjA/MTowKSk7aWYoIWwpcmV0dXJuIGE7dmFyIHU9bC5maW5kKDEpO2lmKHUubGluZT09bylyZXR1cm4gdTtpPVIocixvPXUubGluZSl9fWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ItPXNuKHQpO3ZhciBvPXQudGV4dC5sZW5ndGgscz1PKGZ1bmN0aW9uKHQpe3JldHVybiBYdChlLG4sdC0xKS5ib3R0b208PXJ9LG8sMCk7cmV0dXJuIG89TyhmdW5jdGlvbih0KXtyZXR1cm4gWHQoZSxuLHQpLnRvcD5yfSxzLG8pLHtiZWdpbjpzLGVuZDpvfX1mdW5jdGlvbiBtbihlLHQsbixyKXtyZXR1cm4gbnx8KG49S3QoZSx0KSksZm4oZSx0LG4sYW4oZSx0LFh0KGUsbixyKSwibGluZSIpLnRvcCl9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIShlLmJvdHRvbTw9bikmJihlLnRvcD5ufHwocj9lLmxlZnQ6ZS5yaWdodCk+dCl9ZnVuY3Rpb24gZ24oZSx0LG4scixvKXtvLT1FZSh0KTt2YXIgcz1LdChlLHQpLGk9c24odCksYT0wLGw9dC50ZXh0Lmxlbmd0aCx1PSEwLGM9Q2UodCxlLmRvYy5kaXJlY3Rpb24pO2lmKGMpe3ZhciBkPShlLm9wdGlvbnMubGluZVdyYXBwaW5nP0VuOmJuKShlLHQsbixzLGMscixvKTt1PTEhPWQubGV2ZWwsYT11P2QuZnJvbTpkLnRvLTEsbD11P2QudG86ZC5mcm9tLTF9dmFyIF8scCxmPW51bGwsbT1udWxsLGg9TyhmdW5jdGlvbih0KXt2YXIgbj1YdChlLHMsdCk7cmV0dXJuIG4udG9wKz1pLG4uYm90dG9tKz1pLCEhaG4obixyLG8sITEpJiYobi50b3A8PW8mJm4ubGVmdDw9ciYmKGY9dCxtPW4pLCEwKX0sYSxsKSxnPSExO2lmKG0pe3ZhciBiPXItbS5sZWZ0PG0ucmlnaHQtcixFPWI9PXU7aD1mKyhFPzA6MSkscD1FPyJhZnRlciI6ImJlZm9yZSIsXz1iP20ubGVmdDptLnJpZ2h0fWVsc2V7dXx8aCE9bCYmaCE9YXx8aCsrLHA9MD09aD8iYWZ0ZXIiOmg9PXQudGV4dC5sZW5ndGg/ImJlZm9yZSI6WHQoZSxzLGgtKHU/MTowKSkuYm90dG9tK2k8PW89PXU/ImFmdGVyIjoiYmVmb3JlIjt2YXIgeT1jbihlLEkobixoLHApLCJsaW5lIix0LHMpO189eS5sZWZ0LGc9bzx5LnRvcHx8bz49eS5ib3R0b219cmV0dXJuIGg9Qyh0LnRleHQsaCwxKSxfbihuLGgscCxnLHItXyl9ZnVuY3Rpb24gYm4oZSx0LG4scixvLHMsaSl7dmFyIGE9TyhmdW5jdGlvbihhKXt2YXIgbD1vW2FdLHU9MSE9bC5sZXZlbDtyZXR1cm4gaG4oY24oZSxJKG4sdT9sLnRvOmwuZnJvbSx1PyJiZWZvcmUiOiJhZnRlciIpLCJsaW5lIix0LHIpLHMsaSwhMCl9LDAsby5sZW5ndGgtMSksbD1vW2FdO2lmKGE+MCl7dmFyIHU9MSE9bC5sZXZlbCxjPWNuKGUsSShuLHU/bC5mcm9tOmwudG8sdT8iYWZ0ZXIiOiJiZWZvcmUiKSwibGluZSIsdCxyKTtobihjLHMsaSwhMCkmJmMudG9wPmkmJihsPW9bYS0xXSl9cmV0dXJuIGx9ZnVuY3Rpb24gRW4oZSx0LG4scixvLHMsaSl7dmFyIGE9Zm4oZSx0LHIsaSksbD1hLmJlZ2luLHU9YS5lbmQ7L1xzLy50ZXN0KHQudGV4dC5jaGFyQXQodS0xKSkmJnUtLTtmb3IodmFyIGM9bnVsbCxkPW51bGwsXz0wO188by5sZW5ndGg7XysrKXt2YXIgcD1vW19dO2lmKCEocC5mcm9tPj11fHxwLnRvPD1sKSl7dmFyIGY9MSE9cC5sZXZlbCxtPVh0KGUscixmP01hdGgubWluKHUscC50byktMTpNYXRoLm1heChsLHAuZnJvbSkpLnJpZ2h0LGg9bTxzP3MtbSsxZTk6bS1zOyghY3x8ZD5oKSYmKGM9cCxkPWgpfX1yZXR1cm4gY3x8KGM9b1tvLmxlbmd0aC0xXSksYy5mcm9tPGwmJihjPXtmcm9tOmwsdG86Yy50byxsZXZlbDpjLmxldmVsfSksYy50bz51JiYoYz17ZnJvbTpjLmZyb20sdG86dSxsZXZlbDpjLmxldmVsfSksY31mdW5jdGlvbiB5bihlKXtpZihudWxsIT1lLmNhY2hlZFRleHRIZWlnaHQpcmV0dXJuIGUuY2FjaGVkVGV4dEhlaWdodDtpZihudWxsPT1oYSl7aGE9cigicHJlIik7Zm9yKHZhciBvPTA7bzw0OTsrK28paGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksaGEuYXBwZW5kQ2hpbGQocigiYnIiKSk7aGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9bihlLm1lYXN1cmUsaGEpO3ZhciBzPWhhLm9mZnNldEhlaWdodC81MDtyZXR1cm4gcz4zJiYoZS5jYWNoZWRUZXh0SGVpZ2h0PXMpLHQoZS5tZWFzdXJlKSxzfHwxfWZ1bmN0aW9uIHZuKGUpe2lmKG51bGwhPWUuY2FjaGVkQ2hhcldpZHRoKXJldHVybiBlLmNhY2hlZENoYXJXaWR0aDt2YXIgdD1yKCJzcGFuIiwieHh4eHh4eHh4eCIpLG89cigicHJlIixbdF0pO24oZS5tZWFzdXJlLG8pO3ZhciBzPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0ocy5yaWdodC1zLmxlZnQpLzEwO3JldHVybiBpPjImJihlLmNhY2hlZENoYXJXaWR0aD1pKSxpfHwxMH1mdW5jdGlvbiBUbihlKXtmb3IodmFyIHQ9ZS5kaXNwbGF5LG49e30scj17fSxvPXQuZ3V0dGVycy5jbGllbnRMZWZ0LHM9dC5ndXR0ZXJzLmZpcnN0Q2hpbGQsaT0wO3M7cz1zLm5leHRTaWJsaW5nLCsraSluW2Uub3B0aW9ucy5ndXR0ZXJzW2ldXT1zLm9mZnNldExlZnQrcy5jbGllbnRMZWZ0K28scltlLm9wdGlvbnMuZ3V0dGVyc1tpXV09cy5jbGllbnRXaWR0aDtyZXR1cm57Zml4ZWRQb3M6QW4odCksZ3V0dGVyVG90YWxXaWR0aDp0Lmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpuLGd1dHRlcldpZHRoOnIsd3JhcHBlcldpZHRoOnQud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gQW4oZSl7cmV0dXJuIGUuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1lLnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9ZnVuY3Rpb24gQ24oZSl7dmFyIHQ9eW4oZS5kaXNwbGF5KSxuPWUub3B0aW9ucy5saW5lV3JhcHBpbmcscj1uJiZNYXRoLm1heCg1LGUuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC92bihlLmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihvKXtpZihnZShlLmRvYyxvKSlyZXR1cm4gMDt2YXIgcz0wO2lmKG8ud2lkZ2V0cylmb3IodmFyIGk9MDtpPG8ud2lkZ2V0cy5sZW5ndGg7aSsrKW8ud2lkZ2V0c1tpXS5oZWlnaHQmJihzKz1vLndpZGdldHNbaV0uaGVpZ2h0KTtyZXR1cm4gbj9zKyhNYXRoLmNlaWwoby50ZXh0Lmxlbmd0aC9yKXx8MSkqdDpzK3R9fWZ1bmN0aW9uIE9uKGUpe3ZhciB0PWUuZG9jLG49Q24oZSk7dC5pdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PW4oZSk7dCE9ZS5oZWlnaHQmJkwoZSx0KX0pfWZ1bmN0aW9uIFNuKGUsdCxuLHIpe3ZhciBvPWUuZGlzcGxheTtpZighbiYmInRydWUiPT1QZSh0KS5nZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IikpcmV0dXJuIG51bGw7dmFyIHMsaSxhPW8ubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RyeXtzPXQuY2xpZW50WC1hLmxlZnQsaT10LmNsaWVudFktYS50b3B9Y2F0Y2godCl7cmV0dXJuIG51bGx9dmFyIGwsdT1wbihlLHMsaSk7aWYociYmMT09dS54UmVsJiYobD1SKGUuZG9jLHUubGluZSkudGV4dCkubGVuZ3RoPT11LmNoKXt2YXIgYz1kKGwsbC5sZW5ndGgsZS5vcHRpb25zLnRhYlNpemUpLWwubGVuZ3RoO3U9SSh1LmxpbmUsTWF0aC5tYXgoMCxNYXRoLnJvdW5kKChzLUZ0KGUuZGlzcGxheSkubGVmdCkvdm4oZS5kaXNwbGF5KSktYykpfXJldHVybiB1fWZ1bmN0aW9uIFJuKGUsdCl7aWYodD49ZS5kaXNwbGF5LnZpZXdUbylyZXR1cm4gbnVsbDtpZigodC09ZS5kaXNwbGF5LnZpZXdGcm9tKTwwKXJldHVybiBudWxsO2Zvcih2YXIgbj1lLmRpc3BsYXkudmlldyxyPTA7cjxuLmxlbmd0aDtyKyspaWYoKHQtPW5bcl0uc2l6ZSk8MClyZXR1cm4gcn1mdW5jdGlvbiBqbihlKXtlLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihlLmRpc3BsYXkuaW5wdXQucHJlcGFyZVNlbGVjdGlvbigpKX1mdW5jdGlvbiB4bihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKTtmb3IodmFyIG49ZS5kb2Mscj17fSxvPXIuY3Vyc29ycz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1yLnNlbGVjdGlvbj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT0wO2k8bi5zZWwucmFuZ2VzLmxlbmd0aDtpKyspaWYodHx8aSE9bi5zZWwucHJpbUluZGV4KXt2YXIgYT1uLnNlbC5yYW5nZXNbaV07aWYoIShhLmZyb20oKS5saW5lPj1lLmRpc3BsYXkudmlld1RvfHxhLnRvKCkubGluZTxlLmRpc3BsYXkudmlld0Zyb20pKXt2YXIgbD1hLmVtcHR5KCk7KGx8fGUub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykmJkxuKGUsYS5oZWFkLG8pLGx8fHduKGUsYSxzKX19cmV0dXJuIHJ9ZnVuY3Rpb24gTG4oZSx0LG4pe3ZhciBvPWNuKGUsdCwiZGl2IixudWxsLG51bGwsIWUub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lKSxzPW4uYXBwZW5kQ2hpbGQocigiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciIpKTtpZihzLnN0eWxlLmxlZnQ9by5sZWZ0KyJweCIscy5zdHlsZS50b3A9by50b3ArInB4IixzLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLG8uYm90dG9tLW8udG9wKSplLm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsby5vdGhlcil7dmFyIGk9bi5hcHBlbmRDaGlsZChyKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIikpO2kuc3R5bGUuZGlzcGxheT0iIixpLnN0eWxlLmxlZnQ9by5vdGhlci5sZWZ0KyJweCIsaS5zdHlsZS50b3A9by5vdGhlci50b3ArInB4IixpLnN0eWxlLmhlaWdodD0uODUqKG8ub3RoZXIuYm90dG9tLW8ub3RoZXIudG9wKSsicHgifX1mdW5jdGlvbiBEbihlLHQpe3JldHVybiBlLnRvcC10LnRvcHx8ZS5sZWZ0LXQubGVmdH1mdW5jdGlvbiB3bihlLHQsbil7ZnVuY3Rpb24gbyhlLHQsbixvKXt0PDAmJih0PTApLHQ9TWF0aC5yb3VuZCh0KSxvPU1hdGgucm91bmQobyksbC5hcHBlbmRDaGlsZChyKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrZSsicHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIit0KyJweDsgd2lkdGg6ICIrKG51bGw9PW4/ZC1lOm4pKyJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiKyhvLXQpKyJweCIpKX1mdW5jdGlvbiBzKHQsbixyKXtmdW5jdGlvbiBzKG4scil7cmV0dXJuIHVuKGUsSSh0LG4pLCJkaXYiLHAscil9ZnVuY3Rpb24gaSh0LG4scil7dmFyIG89bW4oZSxwLG51bGwsdCksaT0ibHRyIj09bj09KCJhZnRlciI9PXIpPyJsZWZ0IjoicmlnaHQiO3JldHVybiBzKCJhZnRlciI9PXI/by5iZWdpbjpvLmVuZC0oL1xzLy50ZXN0KHAudGV4dC5jaGFyQXQoby5lbmQtMSkpPzI6MSksaSlbaV19dmFyIGwsdSxwPVIoYSx0KSxmPXAudGV4dC5sZW5ndGgsbT1DZShwLGEuZGlyZWN0aW9uKTtyZXR1cm4gVGUobSxufHwwLG51bGw9PXI/ZjpyLGZ1bmN0aW9uKGUsdCxhLHApe3ZhciBoPSJsdHIiPT1hLGc9cyhlLGg/ImxlZnQiOiJyaWdodCIpLGI9cyh0LTEsaD8icmlnaHQiOiJsZWZ0IiksRT1udWxsPT1uJiYwPT1lLHk9bnVsbD09ciYmdD09Zix2PTA9PXAsVD0hbXx8cD09bS5sZW5ndGgtMTtpZihiLnRvcC1nLnRvcDw9Myl7dmFyIEE9KF8/RTp5KSYmdixDPShfP3k6RSkmJlQsTz1BP2M6KGg/ZzpiKS5sZWZ0LFM9Qz9kOihoP2I6ZykucmlnaHQ7byhPLGcudG9wLFMtTyxnLmJvdHRvbSl9ZWxzZXt2YXIgUixqLHgsTDtoPyhSPV8mJkUmJnY/YzpnLmxlZnQsaj1fP2Q6aShlLGEsImJlZm9yZSIpLHg9Xz9jOmkodCxhLCJhZnRlciIpLEw9XyYmeSYmVD9kOmIucmlnaHQpOihSPV8/aShlLGEsImJlZm9yZSIpOmMsaj0hXyYmRSYmdj9kOmcucmlnaHQseD0hXyYmeSYmVD9jOmIubGVmdCxMPV8/aSh0LGEsImFmdGVyIik6ZCksbyhSLGcudG9wLGotUixnLmJvdHRvbSksZy5ib3R0b208Yi50b3AmJm8oYyxnLmJvdHRvbSxudWxsLGIudG9wKSxvKHgsYi50b3AsTC14LGIuYm90dG9tKX0oIWx8fERuKGcsbCk8MCkmJihsPWcpLERuKGIsbCk8MCYmKGw9YiksKCF1fHxEbihnLHUpPDApJiYodT1nKSxEbihiLHUpPDAmJih1PWIpfSkse3N0YXJ0OmwsZW5kOnV9fXZhciBpPWUuZGlzcGxheSxhPWUuZG9jLGw9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9RnQoZS5kaXNwbGF5KSxjPXUubGVmdCxkPU1hdGgubWF4KGkuc2l6ZXJXaWR0aCxVdChlKS1pLnNpemVyLm9mZnNldExlZnQpLXUucmlnaHQsXz0ibHRyIj09YS5kaXJlY3Rpb24scD10LmZyb20oKSxmPXQudG8oKTtpZihwLmxpbmU9PWYubGluZSlzKHAubGluZSxwLmNoLGYuY2gpO2Vsc2V7dmFyIG09UihhLHAubGluZSksaD1SKGEsZi5saW5lKSxnPV9lKG0pPT1fZShoKSxiPXMocC5saW5lLHAuY2gsZz9tLnRleHQubGVuZ3RoKzE6bnVsbCkuZW5kLEU9cyhmLmxpbmUsZz8wOm51bGwsZi5jaCkuc3RhcnQ7ZyYmKGIudG9wPEUudG9wLTI/KG8oYi5yaWdodCxiLnRvcCxudWxsLGIuYm90dG9tKSxvKGMsRS50b3AsRS5sZWZ0LEUuYm90dG9tKSk6byhiLnJpZ2h0LGIudG9wLEUubGVmdC1iLnJpZ2h0LGIuYm90dG9tKSksYi5ib3R0b208RS50b3AmJm8oYyxiLmJvdHRvbSxudWxsLEUudG9wKX1uLmFwcGVuZENoaWxkKGwpfWZ1bmN0aW9uIE1uKGUpe2lmKGUuc3RhdGUuZm9jdXNlZCl7dmFyIHQ9ZS5kaXNwbGF5O2NsZWFySW50ZXJ2YWwodC5ibGlua2VyKTt2YXIgbj0hMDt0LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5PSIiLGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MD90LmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtyZXR1cm4gdC5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eT0obj0hbik/IiI6ImhpZGRlbiJ9LGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOmUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU8MCYmKHQuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpfX1mdW5jdGlvbiBrbihlKXtlLnN0YXRlLmZvY3VzZWR8fChlLmRpc3BsYXkuaW5wdXQuZm9jdXMoKSxQbihlKSl9ZnVuY3Rpb24gSW4oZSl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITEsTm4oZSkpfSwxMDApfWZ1bmN0aW9uIFBuKGUsdCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITEpLCJub2N1cnNvciIhPWUub3B0aW9ucy5yZWFkT25seSYmKGUuc3RhdGUuZm9jdXNlZHx8KFJlKGUsImZvY3VzIixlLHQpLGUuc3RhdGUuZm9jdXNlZD0hMCxhKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLWZvY3VzZWQiKSxlLmN1ck9wfHxlLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnU9PWUuZG9jLnNlbHx8KGUuZGlzcGxheS5pbnB1dC5yZXNldCgpLHZpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LDIwKSksZS5kaXNwbGF5LmlucHV0LnJlY2VpdmVkRm9jdXMoKSksTW4oZSkpfWZ1bmN0aW9uIE5uKGUsdCl7ZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudHx8KGUuc3RhdGUuZm9jdXNlZCYmKFJlKGUsImJsdXIiLGUsdCksZS5zdGF0ZS5mb2N1c2VkPSExLEhpKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLWZvY3VzZWQiKSksY2xlYXJJbnRlcnZhbChlLmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc3RhdGUuZm9jdXNlZHx8KGUuZGlzcGxheS5zaGlmdD0hMSl9LDE1MCkpfWZ1bmN0aW9uIEhuKGUpe2Zvcih2YXIgdD1lLmRpc3BsYXksbj10LmxpbmVEaXYub2Zmc2V0VG9wLHI9MDtyPHQudmlldy5sZW5ndGg7cisrKXt2YXIgbz10LnZpZXdbcl0scz1lLm9wdGlvbnMubGluZVdyYXBwaW5nLGk9dm9pZCAwLGE9MDtpZighby5oaWRkZW4pe2lmKEVpJiZ5aTw4KXt2YXIgbD1vLm5vZGUub2Zmc2V0VG9wK28ubm9kZS5vZmZzZXRIZWlnaHQ7aT1sLW4sbj1sfWVsc2V7dmFyIHU9by5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2k9dS5ib3R0b20tdS50b3AsIXMmJm8udGV4dC5maXJzdENoaWxkJiYoYT1vLnRleHQuZmlyc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodC11LmxlZnQtMSl9dmFyIGM9by5saW5lLmhlaWdodC1pO2lmKChjPi4wMDV8fGM8LS4wMDUpJiYoTChvLmxpbmUsaSksRm4oby5saW5lKSxvLnJlc3QpKWZvcih2YXIgZD0wO2Q8by5yZXN0Lmxlbmd0aDtkKyspRm4oby5yZXN0W2RdKTtpZihhPmUuZGlzcGxheS5zaXplcldpZHRoKXt2YXIgXz1NYXRoLmNlaWwoYS92bihlLmRpc3BsYXkpKTtfPmUuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYoZS5kaXNwbGF5Lm1heExpbmVMZW5ndGg9XyxlLmRpc3BsYXkubWF4TGluZT1vLmxpbmUsZS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX19fX1mdW5jdGlvbiBGbihlKXtpZihlLndpZGdldHMpZm9yKHZhciB0PTA7dDxlLndpZGdldHMubGVuZ3RoOysrdCl7dmFyIG49ZS53aWRnZXRzW3RdLHI9bi5ub2RlLnBhcmVudE5vZGU7ciYmKG4uaGVpZ2h0PXIub2Zmc2V0SGVpZ2h0KX19ZnVuY3Rpb24gQm4oZSx0LG4pe3ZhciByPW4mJm51bGwhPW4udG9wP01hdGgubWF4KDAsbi50b3ApOmUuc2Nyb2xsZXIuc2Nyb2xsVG9wO3I9TWF0aC5mbG9vcihyLU50KGUpKTt2YXIgbz1uJiZudWxsIT1uLmJvdHRvbT9uLmJvdHRvbTpyK2Uud3JhcHBlci5jbGllbnRIZWlnaHQscz13KHQsciksaT13KHQsbyk7aWYobiYmbi5lbnN1cmUpe3ZhciBhPW4uZW5zdXJlLmZyb20ubGluZSxsPW4uZW5zdXJlLnRvLmxpbmU7YTxzPyhzPWEsaT13KHQsRWUoUih0LGEpKStlLndyYXBwZXIuY2xpZW50SGVpZ2h0KSk6TWF0aC5taW4obCx0Lmxhc3RMaW5lKCkpPj1pJiYocz13KHQsRWUoUih0LGwpKS1lLndyYXBwZXIuY2xpZW50SGVpZ2h0KSxpPWwpfXJldHVybntmcm9tOnMsdG86TWF0aC5tYXgoaSxzKzEpfX1mdW5jdGlvbiBVbihlKXt2YXIgdD1lLmRpc3BsYXksbj10LnZpZXc7aWYodC5hbGlnbldpZGdldHN8fHQuZ3V0dGVycy5maXJzdENoaWxkJiZlLm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj1Bbih0KS10LnNjcm9sbGVyLnNjcm9sbExlZnQrZS5kb2Muc2Nyb2xsTGVmdCxvPXQuZ3V0dGVycy5vZmZzZXRXaWR0aCxzPXIrInB4IixpPTA7aTxuLmxlbmd0aDtpKyspaWYoIW5baV0uaGlkZGVuKXtlLm9wdGlvbnMuZml4ZWRHdXR0ZXImJihuW2ldLmd1dHRlciYmKG5baV0uZ3V0dGVyLnN0eWxlLmxlZnQ9cyksbltpXS5ndXR0ZXJCYWNrZ3JvdW5kJiYobltpXS5ndXR0ZXJCYWNrZ3JvdW5kLnN0eWxlLmxlZnQ9cykpO3ZhciBhPW5baV0uYWxpZ25hYmxlO2lmKGEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5zdHlsZS5sZWZ0PXN9ZS5vcHRpb25zLmZpeGVkR3V0dGVyJiYodC5ndXR0ZXJzLnN0eWxlLmxlZnQ9citvKyJweCIpfX1mdW5jdGlvbiBHbihlKXtpZighZS5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciB0PWUuZG9jLG49ayhlLm9wdGlvbnMsdC5maXJzdCt0LnNpemUtMSksbz1lLmRpc3BsYXk7aWYobi5sZW5ndGghPW8ubGluZU51bUNoYXJzKXt2YXIgcz1vLm1lYXN1cmUuYXBwZW5kQ2hpbGQocigiZGl2IixbcigiZGl2IixuKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksaT1zLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsYT1zLm9mZnNldFdpZHRoLWk7cmV0dXJuIG8ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixvLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KGksby5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWEpKzEsby5saW5lTnVtV2lkdGg9by5saW5lTnVtSW5uZXJXaWR0aCthLG8ubGluZU51bUNoYXJzPW8ubGluZU51bUlubmVyV2lkdGg/bi5sZW5ndGg6LTEsby5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW8ubGluZU51bVdpZHRoKyJweCIsTXIoZSksITB9cmV0dXJuITF9ZnVuY3Rpb24gem4oZSx0KXtpZighamUoZSwic2Nyb2xsQ3Vyc29ySW50b1ZpZXciKSl7dmFyIG49ZS5kaXNwbGF5LG89bi5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPW51bGw7aWYodC50b3Arby50b3A8MD9zPSEwOnQuYm90dG9tK28udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYocz0hMSksbnVsbCE9cyYmIVJpKXt2YXIgaT1yKCJkaXYiLCLigIsiLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICIrKHQudG9wLW4udmlld09mZnNldC1OdChlLmRpc3BsYXkpKSsicHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiKyh0LmJvdHRvbS10LnRvcCtCdChlKStuLmJhckhlaWdodCkrInB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICIrdC5sZWZ0KyJweDsgd2lkdGg6ICIrTWF0aC5tYXgoMix0LnJpZ2h0LXQubGVmdCkrInB4OyIpO2UuZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoaSksaS5zY3JvbGxJbnRvVmlldyhzKSxlLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGkpfX19ZnVuY3Rpb24gVm4oZSx0LG4scil7bnVsbD09ciYmKHI9MCk7dmFyIG87ZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8dCE9bnx8KHQ9dC5jaD9JKHQubGluZSwiYmVmb3JlIj09dC5zdGlja3k/dC5jaC0xOnQuY2gsImFmdGVyIik6dCxuPSJiZWZvcmUiPT10LnN0aWNreT9JKHQubGluZSx0LmNoKzEsImJlZm9yZSIpOnQpO2Zvcih2YXIgcz0wO3M8NTtzKyspe3ZhciBpPSExLGE9Y24oZSx0KSxsPW4mJm4hPXQ/Y24oZSxuKTphO289e2xlZnQ6TWF0aC5taW4oYS5sZWZ0LGwubGVmdCksdG9wOk1hdGgubWluKGEudG9wLGwudG9wKS1yLHJpZ2h0Ok1hdGgubWF4KGEubGVmdCxsLmxlZnQpLGJvdHRvbTpNYXRoLm1heChhLmJvdHRvbSxsLmJvdHRvbSkrcn07dmFyIHU9WW4oZSxvKSxjPWUuZG9jLnNjcm9sbFRvcCxkPWUuZG9jLnNjcm9sbExlZnQ7aWYobnVsbCE9dS5zY3JvbGxUb3AmJihabihlLHUuc2Nyb2xsVG9wKSxNYXRoLmFicyhlLmRvYy5zY3JvbGxUb3AtYyk+MSYmKGk9ITApKSxudWxsIT11LnNjcm9sbExlZnQmJih0cihlLHUuc2Nyb2xsTGVmdCksTWF0aC5hYnMoZS5kb2Muc2Nyb2xsTGVmdC1kKT4xJiYoaT0hMCkpLCFpKWJyZWFrfXJldHVybiBvfWZ1bmN0aW9uIFduKGUsdCl7dmFyIG49WW4oZSx0KTtudWxsIT1uLnNjcm9sbFRvcCYmWm4oZSxuLnNjcm9sbFRvcCksbnVsbCE9bi5zY3JvbGxMZWZ0JiZ0cihlLG4uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gWW4oZSx0KXt2YXIgbj1lLmRpc3BsYXkscj15bihlLmRpc3BsYXkpO3QudG9wPDAmJih0LnRvcD0wKTt2YXIgbz1lLmN1ck9wJiZudWxsIT1lLmN1ck9wLnNjcm9sbFRvcD9lLmN1ck9wLnNjcm9sbFRvcDpuLnNjcm9sbGVyLnNjcm9sbFRvcCxzPUd0KGUpLGk9e307dC5ib3R0b20tdC50b3A+cyYmKHQuYm90dG9tPXQudG9wK3MpO3ZhciBhPWUuZG9jLmhlaWdodCtIdChuKSxsPXQudG9wPHIsdT10LmJvdHRvbT5hLXI7aWYodC50b3A8bylpLnNjcm9sbFRvcD1sPzA6dC50b3A7ZWxzZSBpZih0LmJvdHRvbT5vK3Mpe3ZhciBjPU1hdGgubWluKHQudG9wLCh1P2E6dC5ib3R0b20pLXMpO2MhPW8mJihpLnNjcm9sbFRvcD1jKX12YXIgZD1lLmN1ck9wJiZudWxsIT1lLmN1ck9wLnNjcm9sbExlZnQ/ZS5jdXJPcC5zY3JvbGxMZWZ0Om4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxfPVV0KGUpLShlLm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5ndXR0ZXJzLm9mZnNldFdpZHRoOjApLHA9dC5yaWdodC10LmxlZnQ+XztyZXR1cm4gcCYmKHQucmlnaHQ9dC5sZWZ0K18pLHQubGVmdDwxMD9pLnNjcm9sbExlZnQ9MDp0LmxlZnQ8ZD9pLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCx0LmxlZnQtKHA/MDoxMCkpOnQucmlnaHQ+XytkLTMmJihpLnNjcm9sbExlZnQ9dC5yaWdodCsocD8wOjEwKS1fKSxpfWZ1bmN0aW9uIHFuKGUsdCl7bnVsbCE9dCYmKFFuKGUpLGUuY3VyT3Auc2Nyb2xsVG9wPShudWxsPT1lLmN1ck9wLnNjcm9sbFRvcD9lLmRvYy5zY3JvbGxUb3A6ZS5jdXJPcC5zY3JvbGxUb3ApK3QpfWZ1bmN0aW9uIEtuKGUpe1FuKGUpO3ZhciB0PWUuZ2V0Q3Vyc29yKCk7ZS5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LHRvOnQsbWFyZ2luOmUub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW59fWZ1bmN0aW9uIFhuKGUsdCxuKXtudWxsPT10JiZudWxsPT1ufHxRbihlKSxudWxsIT10JiYoZS5jdXJPcC5zY3JvbGxMZWZ0PXQpLG51bGwhPW4mJihlLmN1ck9wLnNjcm9sbFRvcD1uKX1mdW5jdGlvbiAkbihlLHQpe1FuKGUpLGUuY3VyT3Auc2Nyb2xsVG9Qb3M9dH1mdW5jdGlvbiBRbihlKXt2YXIgdD1lLmN1ck9wLnNjcm9sbFRvUG9zO2lmKHQpe2UuY3VyT3Auc2Nyb2xsVG9Qb3M9bnVsbDtKbihlLGRuKGUsdC5mcm9tKSxkbihlLHQudG8pLHQubWFyZ2luKX19ZnVuY3Rpb24gSm4oZSx0LG4scil7dmFyIG89WW4oZSx7bGVmdDpNYXRoLm1pbih0LmxlZnQsbi5sZWZ0KSx0b3A6TWF0aC5taW4odC50b3Asbi50b3ApLXIscmlnaHQ6TWF0aC5tYXgodC5yaWdodCxuLnJpZ2h0KSxib3R0b206TWF0aC5tYXgodC5ib3R0b20sbi5ib3R0b20pK3J9KTtYbihlLG8uc2Nyb2xsTGVmdCxvLnNjcm9sbFRvcCl9ZnVuY3Rpb24gWm4oZSx0KXtNYXRoLmFicyhlLmRvYy5zY3JvbGxUb3AtdCk8Mnx8KG1pfHxEcihlLHt0b3A6dH0pLGVyKGUsdCwhMCksbWkmJkRyKGUpLENyKGUsMTAwKSl9ZnVuY3Rpb24gZXIoZSx0LG4pe3Q9TWF0aC5taW4oZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodC1lLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LHQpLChlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT10fHxuKSYmKGUuZG9jLnNjcm9sbFRvcD10LGUuZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcCh0KSxlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT10JiYoZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD10KSl9ZnVuY3Rpb24gdHIoZSx0LG4scil7dD1NYXRoLm1pbih0LGUuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpLChuP3Q9PWUuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnMoZS5kb2Muc2Nyb2xsTGVmdC10KTwyKSYmIXJ8fChlLmRvYy5zY3JvbGxMZWZ0PXQsVW4oZSksZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPXQmJihlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD10KSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KHQpKX1mdW5jdGlvbiBucihlKXt2YXIgdD1lLmRpc3BsYXksbj10Lmd1dHRlcnMub2Zmc2V0V2lkdGgscj1NYXRoLnJvdW5kKGUuZG9jLmhlaWdodCtIdChlLmRpc3BsYXkpKTtyZXR1cm57Y2xpZW50SGVpZ2h0OnQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LHZpZXdIZWlnaHQ6dC53cmFwcGVyLmNsaWVudEhlaWdodCxzY3JvbGxXaWR0aDp0LnNjcm9sbGVyLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnQuc2Nyb2xsZXIuY2xpZW50V2lkdGgsdmlld1dpZHRoOnQud3JhcHBlci5jbGllbnRXaWR0aCxiYXJMZWZ0OmUub3B0aW9ucy5maXhlZEd1dHRlcj9uOjAsZG9jSGVpZ2h0OnIsc2Nyb2xsSGVpZ2h0OnIrQnQoZSkrdC5iYXJIZWlnaHQsbmF0aXZlQmFyV2lkdGg6dC5uYXRpdmVCYXJXaWR0aCxndXR0ZXJXaWR0aDpufX1mdW5jdGlvbiBycihlLHQpe3R8fCh0PW5yKGUpKTt2YXIgbj1lLmRpc3BsYXkuYmFyV2lkdGgscj1lLmRpc3BsYXkuYmFySGVpZ2h0O29yKGUsdCk7Zm9yKHZhciBvPTA7bzw0JiZuIT1lLmRpc3BsYXkuYmFyV2lkdGh8fHIhPWUuZGlzcGxheS5iYXJIZWlnaHQ7bysrKW4hPWUuZGlzcGxheS5iYXJXaWR0aCYmZS5vcHRpb25zLmxpbmVXcmFwcGluZyYmSG4oZSksb3IoZSxucihlKSksbj1lLmRpc3BsYXkuYmFyV2lkdGgscj1lLmRpc3BsYXkuYmFySGVpZ2h0fWZ1bmN0aW9uIG9yKGUsdCl7dmFyIG49ZS5kaXNwbGF5LHI9bi5zY3JvbGxiYXJzLnVwZGF0ZSh0KTtuLnNpemVyLnN0eWxlLnBhZGRpbmdSaWdodD0obi5iYXJXaWR0aD1yLnJpZ2h0KSsicHgiLG4uc2l6ZXIuc3R5bGUucGFkZGluZ0JvdHRvbT0obi5iYXJIZWlnaHQ9ci5ib3R0b20pKyJweCIsbi5oZWlnaHRGb3JjZXIuc3R5bGUuYm9yZGVyQm90dG9tPXIuYm90dG9tKyJweCBzb2xpZCB0cmFuc3BhcmVudCIsci5yaWdodCYmci5ib3R0b20/KG4uc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixuLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ci5ib3R0b20rInB4IixuLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aD1yLnJpZ2h0KyJweCIpOm4uc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsci5ib3R0b20mJmUub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmZS5vcHRpb25zLmZpeGVkR3V0dGVyPyhuLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsbi5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PXIuYm90dG9tKyJweCIsbi5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9dC5ndXR0ZXJXaWR0aCsicHgiKTpuLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIHNyKGUpe2UuZGlzcGxheS5zY3JvbGxiYXJzJiYoZS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmSGkoZS5kaXNwbGF5LndyYXBwZXIsZS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpKSxlLmRpc3BsYXkuc2Nyb2xsYmFycz1uZXcgQ2FbZS5vcHRpb25zLnNjcm9sbGJhclN0eWxlXShmdW5jdGlvbih0KXtlLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUodCxlLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKSxuYSh0LCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7ZS5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGlzcGxheS5pbnB1dC5mb2N1cygpfSwwKX0pLHQuc2V0QXR0cmlidXRlKCJjbS1ub3QtY29udGVudCIsInRydWUiKX0sZnVuY3Rpb24odCxuKXsiaG9yaXpvbnRhbCI9PW4/dHIoZSx0KTpabihlLHQpfSxlKSxlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmYShlLmRpc3BsYXkud3JhcHBlcixlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyl9ZnVuY3Rpb24gaXIoZSl7ZS5jdXJPcD17Y206ZSx2aWV3Q2hhbmdlZDohMSxzdGFydEhlaWdodDplLmRvYy5oZWlnaHQsZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6MCx0eXBpbmc6ITEsY2hhbmdlT2JqczpudWxsLGN1cnNvckFjdGl2aXR5SGFuZGxlcnM6bnVsbCxjdXJzb3JBY3Rpdml0eUNhbGxlZDowLHNlbGVjdGlvbkNoYW5nZWQ6ITEsdXBkYXRlTWF4TGluZTohMSxzY3JvbGxMZWZ0Om51bGwsc2Nyb2xsVG9wOm51bGwsc2Nyb2xsVG9Qb3M6bnVsbCxmb2N1czohMSxpZDorK09hfSxidChlLmN1ck9wKX1mdW5jdGlvbiBhcihlKXt2YXIgdD1lLmN1ck9wO3QmJnl0KHQsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLm9wcy5sZW5ndGg7dCsrKWUub3BzW3RdLmNtLmN1ck9wPW51bGw7bHIoZSl9KX1mdW5jdGlvbiBscihlKXtmb3IodmFyIHQ9ZS5vcHMsbj0wO248dC5sZW5ndGg7bisrKXVyKHRbbl0pO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWNyKHRbcl0pO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWRyKHRbb10pO2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKV9yKHRbc10pO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXByKHRbaV0pfWZ1bmN0aW9uIHVyKGUpe3ZhciB0PWUuY20sbj10LmRpc3BsYXk7U3IodCksZS51cGRhdGVNYXhMaW5lJiZ2ZSh0KSxlLm11c3RVcGRhdGU9ZS52aWV3Q2hhbmdlZHx8ZS5mb3JjZVVwZGF0ZXx8bnVsbCE9ZS5zY3JvbGxUb3B8fGUuc2Nyb2xsVG9Qb3MmJihlLnNjcm9sbFRvUG9zLmZyb20ubGluZTxuLnZpZXdGcm9tfHxlLnNjcm9sbFRvUG9zLnRvLmxpbmU+PW4udmlld1RvKXx8bi5tYXhMaW5lQ2hhbmdlZCYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyxlLnVwZGF0ZT1lLm11c3RVcGRhdGUmJm5ldyBTYSh0LGUubXVzdFVwZGF0ZSYme3RvcDplLnNjcm9sbFRvcCxlbnN1cmU6ZS5zY3JvbGxUb1Bvc30sZS5mb3JjZVVwZGF0ZSl9ZnVuY3Rpb24gY3IoZSl7ZS51cGRhdGVkRGlzcGxheT1lLm11c3RVcGRhdGUmJnhyKGUuY20sZS51cGRhdGUpfWZ1bmN0aW9uIGRyKGUpe3ZhciB0PWUuY20sbj10LmRpc3BsYXk7ZS51cGRhdGVkRGlzcGxheSYmSG4odCksZS5iYXJNZWFzdXJlPW5yKHQpLG4ubWF4TGluZUNoYW5nZWQmJiF0Lm9wdGlvbnMubGluZVdyYXBwaW5nJiYoZS5hZGp1c3RXaWR0aFRvPVl0KHQsbi5tYXhMaW5lLG4ubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdCszLHQuZGlzcGxheS5zaXplcldpZHRoPWUuYWRqdXN0V2lkdGhUbyxlLmJhck1lYXN1cmUuc2Nyb2xsV2lkdGg9TWF0aC5tYXgobi5zY3JvbGxlci5jbGllbnRXaWR0aCxuLnNpemVyLm9mZnNldExlZnQrZS5hZGp1c3RXaWR0aFRvK0J0KHQpK3QuZGlzcGxheS5iYXJXaWR0aCksZS5tYXhTY3JvbGxMZWZ0PU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K2UuYWRqdXN0V2lkdGhUby1VdCh0KSkpLChlLnVwZGF0ZWREaXNwbGF5fHxlLnNlbGVjdGlvbkNoYW5nZWQpJiYoZS5wcmVwYXJlZFNlbGVjdGlvbj1uLmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSl9ZnVuY3Rpb24gX3IoZSl7dmFyIHQ9ZS5jbTtudWxsIT1lLmFkanVzdFdpZHRoVG8mJih0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9ZS5hZGp1c3RXaWR0aFRvKyJweCIsZS5tYXhTY3JvbGxMZWZ0PHQuZG9jLnNjcm9sbExlZnQmJnRyKHQsTWF0aC5taW4odC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsZS5tYXhTY3JvbGxMZWZ0KSwhMCksdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSExKTt2YXIgbj1lLmZvY3VzJiZlLmZvY3VzPT1pKCk7ZS5wcmVwYXJlZFNlbGVjdGlvbiYmdC5kaXNwbGF5LmlucHV0LnNob3dTZWxlY3Rpb24oZS5wcmVwYXJlZFNlbGVjdGlvbixuKSwoZS51cGRhdGVkRGlzcGxheXx8ZS5zdGFydEhlaWdodCE9dC5kb2MuaGVpZ2h0KSYmcnIodCxlLmJhck1lYXN1cmUpLGUudXBkYXRlZERpc3BsYXkmJmtyKHQsZS5iYXJNZWFzdXJlKSxlLnNlbGVjdGlvbkNoYW5nZWQmJk1uKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmdC5kaXNwbGF5LmlucHV0LnJlc2V0KGUudHlwaW5nKSxuJiZrbihlLmNtKX1mdW5jdGlvbiBwcihlKXt2YXIgdD1lLmNtLG49dC5kaXNwbGF5LHI9dC5kb2M7aWYoZS51cGRhdGVkRGlzcGxheSYmTHIodCxlLnVwZGF0ZSksbnVsbD09bi53aGVlbFN0YXJ0WHx8bnVsbD09ZS5zY3JvbGxUb3AmJm51bGw9PWUuc2Nyb2xsTGVmdCYmIWUuc2Nyb2xsVG9Qb3N8fChuLndoZWVsU3RhcnRYPW4ud2hlZWxTdGFydFk9bnVsbCksbnVsbCE9ZS5zY3JvbGxUb3AmJmVyKHQsZS5zY3JvbGxUb3AsZS5mb3JjZVNjcm9sbCksbnVsbCE9ZS5zY3JvbGxMZWZ0JiZ0cih0LGUuc2Nyb2xsTGVmdCwhMCwhMCksZS5zY3JvbGxUb1Bvcyl7em4odCxWbih0LEcocixlLnNjcm9sbFRvUG9zLmZyb20pLEcocixlLnNjcm9sbFRvUG9zLnRvKSxlLnNjcm9sbFRvUG9zLm1hcmdpbikpfXZhciBvPWUubWF5YmVIaWRkZW5NYXJrZXJzLHM9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihvKWZvcih2YXIgaT0wO2k8by5sZW5ndGg7KytpKW9baV0ubGluZXMubGVuZ3RofHxSZShvW2ldLCJoaWRlIik7aWYocylmb3IodmFyIGE9MDthPHMubGVuZ3RoOysrYSlzW2FdLmxpbmVzLmxlbmd0aCYmUmUoc1thXSwidW5oaWRlIik7bi53cmFwcGVyLm9mZnNldEhlaWdodCYmKHIuc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApLGUuY2hhbmdlT2JqcyYmUmUodCwiY2hhbmdlcyIsdCxlLmNoYW5nZU9ianMpLGUudXBkYXRlJiZlLnVwZGF0ZS5maW5pc2goKX1mdW5jdGlvbiBmcihlLHQpe2lmKGUuY3VyT3ApcmV0dXJuIHQoKTtpcihlKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2FyKGUpfX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBmdW5jdGlvbigpe2lmKGUuY3VyT3ApcmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpO2lyKGUpO3RyeXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9ZmluYWxseXthcihlKX19fWZ1bmN0aW9uIGhyKGUpe3JldHVybiBmdW5jdGlvbigpe2lmKHRoaXMuY3VyT3ApcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lyKHRoaXMpO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXthcih0aGlzKX19fWZ1bmN0aW9uIGdyKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuY207aWYoIXR8fHQuY3VyT3ApcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lyKHQpO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXthcih0KX19fWZ1bmN0aW9uIGJyKGUsdCxuLHIpe251bGw9PXQmJih0PWUuZG9jLmZpcnN0KSxudWxsPT1uJiYobj1lLmRvYy5maXJzdCtlLmRvYy5zaXplKSxyfHwocj0wKTt2YXIgbz1lLmRpc3BsYXk7aWYociYmbjxvLnZpZXdUbyYmKG51bGw9PW8udXBkYXRlTGluZU51bWJlcnN8fG8udXBkYXRlTGluZU51bWJlcnM+dCkmJihvLnVwZGF0ZUxpbmVOdW1iZXJzPXQpLGUuY3VyT3Audmlld0NoYW5nZWQ9ITAsdD49by52aWV3VG8pSmkmJm1lKGUuZG9jLHQpPG8udmlld1RvJiZ5cihlKTtlbHNlIGlmKG48PW8udmlld0Zyb20pSmkmJmhlKGUuZG9jLG4rcik+by52aWV3RnJvbT95cihlKTooby52aWV3RnJvbSs9cixvLnZpZXdUbys9cik7ZWxzZSBpZih0PD1vLnZpZXdGcm9tJiZuPj1vLnZpZXdUbyl5cihlKTtlbHNlIGlmKHQ8PW8udmlld0Zyb20pe3ZhciBzPXZyKGUsbixuK3IsMSk7cz8oby52aWV3PW8udmlldy5zbGljZShzLmluZGV4KSxvLnZpZXdGcm9tPXMubGluZU4sby52aWV3VG8rPXIpOnlyKGUpfWVsc2UgaWYobj49by52aWV3VG8pe3ZhciBpPXZyKGUsdCx0LC0xKTtpPyhvLnZpZXc9by52aWV3LnNsaWNlKDAsaS5pbmRleCksby52aWV3VG89aS5saW5lTik6eXIoZSl9ZWxzZXt2YXIgYT12cihlLHQsdCwtMSksbD12cihlLG4sbityLDEpO2EmJmw/KG8udmlldz1vLnZpZXcuc2xpY2UoMCxhLmluZGV4KS5jb25jYXQoZ3QoZSxhLmxpbmVOLGwubGluZU4pKS5jb25jYXQoby52aWV3LnNsaWNlKGwuaW5kZXgpKSxvLnZpZXdUbys9cik6eXIoZSl9dmFyIHU9by5leHRlcm5hbE1lYXN1cmVkO3UmJihuPHUubGluZU4/dS5saW5lTis9cjp0PHUubGluZU4rdS5zaXplJiYoby5leHRlcm5hbE1lYXN1cmVkPW51bGwpKX1mdW5jdGlvbiBFcihlLHQsbil7ZS5jdXJPcC52aWV3Q2hhbmdlZD0hMDt2YXIgcj1lLmRpc3BsYXksbz1lLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtpZihvJiZ0Pj1vLmxpbmVOJiZ0PG8ubGluZU4rby5zaXplJiYoci5leHRlcm5hbE1lYXN1cmVkPW51bGwpLCEodDxyLnZpZXdGcm9tfHx0Pj1yLnZpZXdUbykpe3ZhciBzPXIudmlld1tSbihlLHQpXTtpZihudWxsIT1zLm5vZGUpe3ZhciBpPXMuY2hhbmdlc3x8KHMuY2hhbmdlcz1bXSk7LTE9PV8oaSxuKSYmaS5wdXNoKG4pfX19ZnVuY3Rpb24geXIoZSl7ZS5kaXNwbGF5LnZpZXdGcm9tPWUuZGlzcGxheS52aWV3VG89ZS5kb2MuZmlyc3QsZS5kaXNwbGF5LnZpZXc9W10sZS5kaXNwbGF5LnZpZXdPZmZzZXQ9MH1mdW5jdGlvbiB2cihlLHQsbixyKXt2YXIgbyxzPVJuKGUsdCksaT1lLmRpc3BsYXkudmlldztpZighSml8fG49PWUuZG9jLmZpcnN0K2UuZG9jLnNpemUpcmV0dXJue2luZGV4OnMsbGluZU46bn07Zm9yKHZhciBhPWUuZGlzcGxheS52aWV3RnJvbSxsPTA7bDxzO2wrKylhKz1pW2xdLnNpemU7aWYoYSE9dCl7aWYocj4wKXtpZihzPT1pLmxlbmd0aC0xKXJldHVybiBudWxsO289YStpW3NdLnNpemUtdCxzKyt9ZWxzZSBvPWEtdDt0Kz1vLG4rPW99Zm9yKDttZShlLmRvYyxuKSE9bjspe2lmKHM9PShyPDA/MDppLmxlbmd0aC0xKSlyZXR1cm4gbnVsbDtuKz1yKmlbcy0ocjwwPzE6MCldLnNpemUscys9cn1yZXR1cm57aW5kZXg6cyxsaW5lTjpufX1mdW5jdGlvbiBUcihlLHQsbil7dmFyIHI9ZS5kaXNwbGF5OzA9PXIudmlldy5sZW5ndGh8fHQ+PXIudmlld1RvfHxuPD1yLnZpZXdGcm9tPyhyLnZpZXc9Z3QoZSx0LG4pLHIudmlld0Zyb209dCk6KHIudmlld0Zyb20+dD9yLnZpZXc9Z3QoZSx0LHIudmlld0Zyb20pLmNvbmNhdChyLnZpZXcpOnIudmlld0Zyb208dCYmKHIudmlldz1yLnZpZXcuc2xpY2UoUm4oZSx0KSkpLHIudmlld0Zyb209dCxyLnZpZXdUbzxuP3Iudmlldz1yLnZpZXcuY29uY2F0KGd0KGUsci52aWV3VG8sbikpOnIudmlld1RvPm4mJihyLnZpZXc9ci52aWV3LnNsaWNlKDAsUm4oZSxuKSkpKSxyLnZpZXdUbz1ufWZ1bmN0aW9uIEFyKGUpe2Zvcih2YXIgdD1lLmRpc3BsYXkudmlldyxuPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO28uaGlkZGVufHxvLm5vZGUmJiFvLmNoYW5nZXN8fCsrbn1yZXR1cm4gbn1mdW5jdGlvbiBDcihlLHQpe2UuZG9jLmhpZ2hsaWdodEZyb250aWVyPGUuZGlzcGxheS52aWV3VG8mJmUuc3RhdGUuaGlnaGxpZ2h0LnNldCh0LHUoT3IsZSkpfWZ1bmN0aW9uIE9yKGUpe3ZhciB0PWUuZG9jO2lmKCEodC5oaWdobGlnaHRGcm9udGllcj49ZS5kaXNwbGF5LnZpZXdUbykpe3ZhciBuPStuZXcgRGF0ZStlLm9wdGlvbnMud29ya1RpbWUscj1RZShlLHQuaGlnaGxpZ2h0RnJvbnRpZXIpLG89W107dC5pdGVyKHIubGluZSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxlLmRpc3BsYXkudmlld1RvKzUwMCksZnVuY3Rpb24ocyl7aWYoci5saW5lPj1lLmRpc3BsYXkudmlld0Zyb20pe3ZhciBpPXMuc3R5bGVzLGE9cy50ZXh0Lmxlbmd0aD5lLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoP1llKHQubW9kZSxyLnN0YXRlKTpudWxsLGw9WGUoZSxzLHIsITApO2EmJihyLnN0YXRlPWEpLHMuc3R5bGVzPWwuc3R5bGVzO3ZhciB1PXMuc3R5bGVDbGFzc2VzLGM9bC5jbGFzc2VzO2M/cy5zdHlsZUNsYXNzZXM9Yzp1JiYocy5zdHlsZUNsYXNzZXM9bnVsbCk7Zm9yKHZhciBkPSFpfHxpLmxlbmd0aCE9cy5zdHlsZXMubGVuZ3RofHx1IT1jJiYoIXV8fCFjfHx1LmJnQ2xhc3MhPWMuYmdDbGFzc3x8dS50ZXh0Q2xhc3MhPWMudGV4dENsYXNzKSxfPTA7IWQmJl88aS5sZW5ndGg7KytfKWQ9aVtfXSE9cy5zdHlsZXNbX107ZCYmby5wdXNoKHIubGluZSkscy5zdGF0ZUFmdGVyPXIuc2F2ZSgpLHIubmV4dExpbmUoKX1lbHNlIHMudGV4dC5sZW5ndGg8PWUub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgmJkplKGUscy50ZXh0LHIpLHMuc3RhdGVBZnRlcj1yLmxpbmUlNT09MD9yLnNhdmUoKTpudWxsLHIubmV4dExpbmUoKTtpZigrbmV3IERhdGU+bilyZXR1cm4gQ3IoZSxlLm9wdGlvbnMud29ya0RlbGF5KSwhMH0pLHQuaGlnaGxpZ2h0RnJvbnRpZXI9ci5saW5lLHQubW9kZUZyb250aWVyPU1hdGgubWF4KHQubW9kZUZyb250aWVyLHIubGluZSksby5sZW5ndGgmJmZyKGUsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoO3QrKylFcihlLG9bdF0sInRleHQiKX0pfX1mdW5jdGlvbiBTcihlKXt2YXIgdD1lLmRpc3BsYXk7IXQuc2Nyb2xsYmFyc0NsaXBwZWQmJnQuc2Nyb2xsZXIub2Zmc2V0V2lkdGgmJih0Lm5hdGl2ZUJhcldpZHRoPXQuc2Nyb2xsZXIub2Zmc2V0V2lkdGgtdC5zY3JvbGxlci5jbGllbnRXaWR0aCx0LmhlaWdodEZvcmNlci5zdHlsZS5oZWlnaHQ9QnQoZSkrInB4Iix0LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbT0tdC5uYXRpdmVCYXJXaWR0aCsicHgiLHQuc2l6ZXIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1CdChlKSsicHgiLHQuc2Nyb2xsYmFyc0NsaXBwZWQ9ITApfWZ1bmN0aW9uIFJyKGUpe2lmKGUuaGFzRm9jdXMoKSlyZXR1cm4gbnVsbDt2YXIgdD1pKCk7aWYoIXR8fCFzKGUuZGlzcGxheS5saW5lRGl2LHQpKXJldHVybiBudWxsO3ZhciBuPXthY3RpdmVFbHQ6dH07aWYod2luZG93LmdldFNlbGVjdGlvbil7dmFyIHI9d2luZG93LmdldFNlbGVjdGlvbigpO3IuYW5jaG9yTm9kZSYmci5leHRlbmQmJnMoZS5kaXNwbGF5LmxpbmVEaXYsci5hbmNob3JOb2RlKSYmKG4uYW5jaG9yTm9kZT1yLmFuY2hvck5vZGUsbi5hbmNob3JPZmZzZXQ9ci5hbmNob3JPZmZzZXQsbi5mb2N1c05vZGU9ci5mb2N1c05vZGUsbi5mb2N1c09mZnNldD1yLmZvY3VzT2Zmc2V0KX1yZXR1cm4gbn1mdW5jdGlvbiBqcihlKXtpZihlJiZlLmFjdGl2ZUVsdCYmZS5hY3RpdmVFbHQhPWkoKSYmKGUuYWN0aXZlRWx0LmZvY3VzKCksZS5hbmNob3JOb2RlJiZzKGRvY3VtZW50LmJvZHksZS5hbmNob3JOb2RlKSYmcyhkb2N1bWVudC5ib2R5LGUuZm9jdXNOb2RlKSkpe3ZhciB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5zZXRFbmQoZS5hbmNob3JOb2RlLGUuYW5jaG9yT2Zmc2V0KSxuLmNvbGxhcHNlKCExKSx0LnJlbW92ZUFsbFJhbmdlcygpLHQuYWRkUmFuZ2UobiksdC5leHRlbmQoZS5mb2N1c05vZGUsZS5mb2N1c09mZnNldCl9fWZ1bmN0aW9uIHhyKGUsbil7dmFyIHI9ZS5kaXNwbGF5LG89ZS5kb2M7aWYobi5lZGl0b3JJc0hpZGRlbilyZXR1cm4geXIoZSksITE7aWYoIW4uZm9yY2UmJm4udmlzaWJsZS5mcm9tPj1yLnZpZXdGcm9tJiZuLnZpc2libGUudG88PXIudmlld1RvJiYobnVsbD09ci51cGRhdGVMaW5lTnVtYmVyc3x8ci51cGRhdGVMaW5lTnVtYmVycz49ci52aWV3VG8pJiZyLnJlbmRlcmVkVmlldz09ci52aWV3JiYwPT1BcihlKSlyZXR1cm4hMTtHbihlKSYmKHlyKGUpLG4uZGltcz1UbihlKSk7dmFyIHM9by5maXJzdCtvLnNpemUsaT1NYXRoLm1heChuLnZpc2libGUuZnJvbS1lLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksYT1NYXRoLm1pbihzLG4udmlzaWJsZS50bytlLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO3Iudmlld0Zyb208aSYmaS1yLnZpZXdGcm9tPDIwJiYoaT1NYXRoLm1heChvLmZpcnN0LHIudmlld0Zyb20pKSxyLnZpZXdUbz5hJiZyLnZpZXdUby1hPDIwJiYoYT1NYXRoLm1pbihzLHIudmlld1RvKSksSmkmJihpPW1lKGUuZG9jLGkpLGE9aGUoZS5kb2MsYSkpO3ZhciBsPWkhPXIudmlld0Zyb218fGEhPXIudmlld1RvfHxyLmxhc3RXcmFwSGVpZ2h0IT1uLndyYXBwZXJIZWlnaHR8fHIubGFzdFdyYXBXaWR0aCE9bi53cmFwcGVyV2lkdGg7VHIoZSxpLGEpLHIudmlld09mZnNldD1FZShSKGUuZG9jLHIudmlld0Zyb20pKSxlLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wPXIudmlld09mZnNldCsicHgiO3ZhciB1PUFyKGUpO2lmKCFsJiYwPT11JiYhbi5mb3JjZSYmci5yZW5kZXJlZFZpZXc9PXIudmlldyYmKG51bGw9PXIudXBkYXRlTGluZU51bWJlcnN8fHIudXBkYXRlTGluZU51bWJlcnM+PXIudmlld1RvKSlyZXR1cm4hMTt2YXIgYz1ScihlKTtyZXR1cm4gdT40JiYoci5saW5lRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx3cihlLHIudXBkYXRlTGluZU51bWJlcnMsbi5kaW1zKSx1PjQmJihyLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIiksci5yZW5kZXJlZFZpZXc9ci52aWV3LGpyKGMpLHQoci5jdXJzb3JEaXYpLHQoci5zZWxlY3Rpb25EaXYpLHIuZ3V0dGVycy5zdHlsZS5oZWlnaHQ9ci5zaXplci5zdHlsZS5taW5IZWlnaHQ9MCxsJiYoci5sYXN0V3JhcEhlaWdodD1uLndyYXBwZXJIZWlnaHQsci5sYXN0V3JhcFdpZHRoPW4ud3JhcHBlcldpZHRoLENyKGUsNDAwKSksci51cGRhdGVMaW5lTnVtYmVycz1udWxsLCEwfWZ1bmN0aW9uIExyKGUsdCl7Zm9yKHZhciBuPXQudmlld3BvcnQscj0hMDsociYmZS5vcHRpb25zLmxpbmVXcmFwcGluZyYmdC5vbGREaXNwbGF5V2lkdGghPVV0KGUpfHwobiYmbnVsbCE9bi50b3AmJihuPXt0b3A6TWF0aC5taW4oZS5kb2MuaGVpZ2h0K0h0KGUuZGlzcGxheSktR3QoZSksbi50b3ApfSksdC52aXNpYmxlPUJuKGUuZGlzcGxheSxlLmRvYyxuKSwhKHQudmlzaWJsZS5mcm9tPj1lLmRpc3BsYXkudmlld0Zyb20mJnQudmlzaWJsZS50bzw9ZS5kaXNwbGF5LnZpZXdUbykpKSYmeHIoZSx0KTtyPSExKXtIbihlKTt2YXIgbz1ucihlKTtqbihlKSxycihlLG8pLGtyKGUsbyksdC5mb3JjZT0hMX10LnNpZ25hbChlLCJ1cGRhdGUiLGUpLGUuZGlzcGxheS52aWV3RnJvbT09ZS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20mJmUuZGlzcGxheS52aWV3VG89PWUuZGlzcGxheS5yZXBvcnRlZFZpZXdUb3x8KHQuc2lnbmFsKGUsInZpZXdwb3J0Q2hhbmdlIixlLGUuZGlzcGxheS52aWV3RnJvbSxlLmRpc3BsYXkudmlld1RvKSxlLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbT1lLmRpc3BsYXkudmlld0Zyb20sZS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvPWUuZGlzcGxheS52aWV3VG8pfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49bmV3IFNhKGUsdCk7aWYoeHIoZSxuKSl7SG4oZSksTHIoZSxuKTt2YXIgcj1ucihlKTtqbihlKSxycihlLHIpLGtyKGUsciksbi5maW5pc2goKX19ZnVuY3Rpb24gd3IoZSxuLHIpe2Z1bmN0aW9uIG8odCl7dmFyIG49dC5uZXh0U2libGluZztyZXR1cm4gdmkmJkRpJiZlLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT10P3Quc3R5bGUuZGlzcGxheT0ibm9uZSI6dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLG59Zm9yKHZhciBzPWUuZGlzcGxheSxpPWUub3B0aW9ucy5saW5lTnVtYmVycyxhPXMubGluZURpdixsPWEuZmlyc3RDaGlsZCx1PXMudmlldyxjPXMudmlld0Zyb20sZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgcD11W2RdO2lmKHAuaGlkZGVuKTtlbHNlIGlmKHAubm9kZSYmcC5ub2RlLnBhcmVudE5vZGU9PWEpe2Zvcig7bCE9cC5ub2RlOylsPW8obCk7dmFyIGY9aSYmbnVsbCE9biYmbjw9YyYmcC5saW5lTnVtYmVyO3AuY2hhbmdlcyYmKF8ocC5jaGFuZ2VzLCJndXR0ZXIiKT4tMSYmKGY9ITEpLEF0KGUscCxjLHIpKSxmJiYodChwLmxpbmVOdW1iZXIpLHAubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrKGUub3B0aW9ucyxjKSkpKSxsPXAubm9kZS5uZXh0U2libGluZ31lbHNle3ZhciBtPUR0KGUscCxjLHIpO2EuaW5zZXJ0QmVmb3JlKG0sbCl9Yys9cC5zaXplfWZvcig7bDspbD1vKGwpfWZ1bmN0aW9uIE1yKGUpe3ZhciB0PWUuZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoO2UuZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0PXQrInB4In1mdW5jdGlvbiBrcihlLHQpe2UuZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQ9dC5kb2NIZWlnaHQrInB4IixlLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD10LmRvY0hlaWdodCsicHgiLGUuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodD10LmRvY0hlaWdodCtlLmRpc3BsYXkuYmFySGVpZ2h0K0J0KGUpKyJweCJ9ZnVuY3Rpb24gSXIoZSl7dmFyIG49ZS5kaXNwbGF5Lmd1dHRlcnMsbz1lLm9wdGlvbnMuZ3V0dGVyczt0KG4pO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7KytzKXt2YXIgaT1vW3NdLGE9bi5hcHBlbmRDaGlsZChyKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKGUuZGlzcGxheS5saW5lR3V0dGVyPWEsYS5zdHlsZS53aWR0aD0oZS5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9bi5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLE1yKGUpfWZ1bmN0aW9uIFByKGUpe3ZhciB0PV8oZS5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PXQmJmUubGluZU51bWJlcnM/ZS5ndXR0ZXJzPWUuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOnQ+LTEmJiFlLmxpbmVOdW1iZXJzJiYoZS5ndXR0ZXJzPWUuZ3V0dGVycy5zbGljZSgwKSxlLmd1dHRlcnMuc3BsaWNlKHQsMSkpfWZ1bmN0aW9uIE5yKGUpe3ZhciB0PWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO3JldHVybiBudWxsPT10JiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHQ9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSkse3g6dCx5Om59fWZ1bmN0aW9uIEhyKGUpe3ZhciB0PU5yKGUpO3JldHVybiB0LngqPWphLHQueSo9amEsdH1mdW5jdGlvbiBGcihlLHQpe3ZhciBuPU5yKHQpLHI9bi54LG89bi55LHM9ZS5kaXNwbGF5LGk9cy5zY3JvbGxlcixhPWkuc2Nyb2xsV2lkdGg+aS5jbGllbnRXaWR0aCxsPWkuc2Nyb2xsSGVpZ2h0PmkuY2xpZW50SGVpZ2h0O2lmKHImJmF8fG8mJmwpe2lmKG8mJkRpJiZ2aSllOmZvcih2YXIgdT10LnRhcmdldCxjPXMudmlldzt1IT1pO3U9dS5wYXJlbnROb2RlKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWlmKGNbZF0ubm9kZT09dSl7ZS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD11O2JyZWFrIGV9aWYociYmIW1pJiYhQ2kmJm51bGwhPWphKXJldHVybiBvJiZsJiZabihlLE1hdGgubWF4KDAsaS5zY3JvbGxUb3ArbypqYSkpLHRyKGUsTWF0aC5tYXgoMCxpLnNjcm9sbExlZnQrcipqYSkpLCghb3x8byYmbCkmJndlKHQpLHZvaWQocy53aGVlbFN0YXJ0WD1udWxsKTtpZihvJiZudWxsIT1qYSl7dmFyIF89bypqYSxwPWUuZG9jLnNjcm9sbFRvcCxmPXArcy53cmFwcGVyLmNsaWVudEhlaWdodDtfPDA/cD1NYXRoLm1heCgwLHArXy01MCk6Zj1NYXRoLm1pbihlLmRvYy5oZWlnaHQsZitfKzUwKSxEcihlLHt0b3A6cCxib3R0b206Zn0pfVJhPDIwJiYobnVsbD09cy53aGVlbFN0YXJ0WD8ocy53aGVlbFN0YXJ0WD1pLnNjcm9sbExlZnQscy53aGVlbFN0YXJ0WT1pLnNjcm9sbFRvcCxzLndoZWVsRFg9cixzLndoZWVsRFk9byxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9cy53aGVlbFN0YXJ0WCl7dmFyIGU9aS5zY3JvbGxMZWZ0LXMud2hlZWxTdGFydFgsdD1pLnNjcm9sbFRvcC1zLndoZWVsU3RhcnRZLG49dCYmcy53aGVlbERZJiZ0L3Mud2hlZWxEWXx8ZSYmcy53aGVlbERYJiZlL3Mud2hlZWxEWDtzLndoZWVsU3RhcnRYPXMud2hlZWxTdGFydFk9bnVsbCxuJiYoamE9KGphKlJhK24pLyhSYSsxKSwrK1JhKX19LDIwMCkpOihzLndoZWVsRFgrPXIscy53aGVlbERZKz1vKSl9fWZ1bmN0aW9uIEJyKGUsdCxuKXt2YXIgcj1lJiZlLm9wdGlvbnMuc2VsZWN0aW9uc01heVRvdWNoLG89dFtuXTt0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gUChlLmZyb20oKSx0LmZyb20oKSl9KSxuPV8odCxvKTtmb3IodmFyIHM9MTtzPHQubGVuZ3RoO3MrKyl7dmFyIGk9dFtzXSxhPXRbcy0xXSxsPVAoYS50bygpLGkuZnJvbSgpKTtpZihyJiYhaS5lbXB0eSgpP2w+MDpsPj0wKXt2YXIgdT1CKGEuZnJvbSgpLGkuZnJvbSgpKSxjPUYoYS50bygpLGkudG8oKSksZD1hLmVtcHR5KCk/aS5mcm9tKCk9PWkuaGVhZDphLmZyb20oKT09YS5oZWFkO3M8PW4mJi0tbix0LnNwbGljZSgtLXMsMixuZXcgTGEoZD9jOnUsZD91OmMpKX19cmV0dXJuIG5ldyB4YSh0LG4pfWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIG5ldyB4YShbbmV3IExhKGUsdHx8ZSldLDApfWZ1bmN0aW9uIEdyKGUpe3JldHVybiBlLnRleHQ/SShlLmZyb20ubGluZStlLnRleHQubGVuZ3RoLTEsbShlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkpOmUudG99ZnVuY3Rpb24genIoZSx0KXtpZihQKGUsdC5mcm9tKTwwKXJldHVybiBlO2lmKFAoZSx0LnRvKTw9MClyZXR1cm4gR3IodCk7dmFyIG49ZS5saW5lK3QudGV4dC5sZW5ndGgtKHQudG8ubGluZS10LmZyb20ubGluZSktMSxyPWUuY2g7cmV0dXJuIGUubGluZT09dC50by5saW5lJiYocis9R3IodCkuY2gtdC50by5jaCksSShuLHIpfWZ1bmN0aW9uIFZyKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPGUuc2VsLnJhbmdlcy5sZW5ndGg7cisrKXt2YXIgbz1lLnNlbC5yYW5nZXNbcl07bi5wdXNoKG5ldyBMYSh6cihvLmFuY2hvcix0KSx6cihvLmhlYWQsdCkpKX1yZXR1cm4gQnIoZS5jbSxuLGUuc2VsLnByaW1JbmRleCl9ZnVuY3Rpb24gV3IoZSx0LG4pe3JldHVybiBlLmxpbmU9PXQubGluZT9JKG4ubGluZSxlLmNoLXQuY2grbi5jaCk6SShuLmxpbmUrKGUubGluZS10LmxpbmUpLGUuY2gpfWZ1bmN0aW9uIFlyKGUsdCxuKXtmb3IodmFyIHI9W10sbz1JKGUuZmlyc3QsMCkscz1vLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXSxsPVdyKGEuZnJvbSxvLHMpLHU9V3IoR3IoYSksbyxzKTtpZihvPWEudG8scz11LCJhcm91bmQiPT1uKXt2YXIgYz1lLnNlbC5yYW5nZXNbaV0sZD1QKGMuaGVhZCxjLmFuY2hvcik8MDtyW2ldPW5ldyBMYShkP3U6bCxkP2w6dSl9ZWxzZSByW2ldPW5ldyBMYShsLGwpfXJldHVybiBuZXcgeGEocixlLnNlbC5wcmltSW5kZXgpfWZ1bmN0aW9uIHFyKGUpe2UuZG9jLm1vZGU9VmUoZS5vcHRpb25zLGUuZG9jLm1vZGVPcHRpb24pLEtyKGUpfWZ1bmN0aW9uIEtyKGUpe2UuZG9jLml0ZXIoZnVuY3Rpb24oZSl7ZS5zdGF0ZUFmdGVyJiYoZS5zdGF0ZUFmdGVyPW51bGwpLGUuc3R5bGVzJiYoZS5zdHlsZXM9bnVsbCl9KSxlLmRvYy5tb2RlRnJvbnRpZXI9ZS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXI9ZS5kb2MuZmlyc3QsQ3IoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJmJyKGUpfWZ1bmN0aW9uIFhyKGUsdCl7cmV0dXJuIDA9PXQuZnJvbS5jaCYmMD09dC50by5jaCYmIiI9PW0odC50ZXh0KSYmKCFlLmNtfHxlLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKX1mdW5jdGlvbiAkcihlLHQsbixyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBuP25bZV06bnVsbH1mdW5jdGlvbiBzKGUsbixvKXtpdChlLG4sbyxyKSx2dChlLCJjaGFuZ2UiLGUsdCl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj1bXSxzPWU7czx0OysrcyluLnB1c2gobmV3IG1hKHVbc10sbyhzKSxyKSk7cmV0dXJuIG59dmFyIGE9dC5mcm9tLGw9dC50byx1PXQudGV4dCxjPVIoZSxhLmxpbmUpLGQ9UihlLGwubGluZSksXz1tKHUpLHA9byh1Lmxlbmd0aC0xKSxmPWwubGluZS1hLmxpbmU7aWYodC5mdWxsKWUuaW5zZXJ0KDAsaSgwLHUubGVuZ3RoKSksZS5yZW1vdmUodS5sZW5ndGgsZS5zaXplLXUubGVuZ3RoKTtlbHNlIGlmKFhyKGUsdCkpe3ZhciBoPWkoMCx1Lmxlbmd0aC0xKTtzKGQsZC50ZXh0LHApLGYmJmUucmVtb3ZlKGEubGluZSxmKSxoLmxlbmd0aCYmZS5pbnNlcnQoYS5saW5lLGgpfWVsc2UgaWYoYz09ZClpZigxPT11Lmxlbmd0aClzKGMsYy50ZXh0LnNsaWNlKDAsYS5jaCkrXytjLnRleHQuc2xpY2UobC5jaCkscCk7ZWxzZXt2YXIgZz1pKDEsdS5sZW5ndGgtMSk7Zy5wdXNoKG5ldyBtYShfK2MudGV4dC5zbGljZShsLmNoKSxwLHIpKSxzKGMsYy50ZXh0LnNsaWNlKDAsYS5jaCkrdVswXSxvKDApKSxlLmluc2VydChhLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKXMoYyxjLnRleHQuc2xpY2UoMCxhLmNoKSt1WzBdK2QudGV4dC5zbGljZShsLmNoKSxvKDApKSxlLnJlbW92ZShhLmxpbmUrMSxmKTtlbHNle3MoYyxjLnRleHQuc2xpY2UoMCxhLmNoKSt1WzBdLG8oMCkpLHMoZCxfK2QudGV4dC5zbGljZShsLmNoKSxwKTt2YXIgYj1pKDEsdS5sZW5ndGgtMSk7Zj4xJiZlLnJlbW92ZShhLmxpbmUrMSxmLTEpLGUuaW5zZXJ0KGEubGluZSsxLGIpfXZ0KGUsImNoYW5nZSIsZSx0KX1mdW5jdGlvbiBRcihlLHQsbil7ZnVuY3Rpb24gcihlLG8scyl7aWYoZS5saW5rZWQpZm9yKHZhciBpPTA7aTxlLmxpbmtlZC5sZW5ndGg7KytpKXt2YXIgYT1lLmxpbmtlZFtpXTtpZihhLmRvYyE9byl7dmFyIGw9cyYmYS5zaGFyZWRIaXN0O24mJiFsfHwodChhLmRvYyxsKSxyKGEuZG9jLGUsbCkpfX19cihlLG51bGwsITApfWZ1bmN0aW9uIEpyKGUsdCl7aWYodC5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7ZS5kb2M9dCx0LmNtPWUsT24oZSkscXIoZSksWnIoZSksZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8dmUoZSksZS5vcHRpb25zLm1vZGU9dC5tb2RlT3B0aW9uLGJyKGUpfWZ1bmN0aW9uIFpyKGUpeygicnRsIj09ZS5kb2MuZGlyZWN0aW9uP2E6SGkpKGUuZGlzcGxheS5saW5lRGl2LCJDb2RlTWlycm9yLXJ0bCIpfWZ1bmN0aW9uIGVvKGUpe2ZyKGUsZnVuY3Rpb24oKXtacihlKSxicihlKX0pfWZ1bmN0aW9uIHRvKGUpe3RoaXMuZG9uZT1bXSx0aGlzLnVuZG9uZT1bXSx0aGlzLnVuZG9EZXB0aD0xLzAsdGhpcy5sYXN0TW9kVGltZT10aGlzLmxhc3RTZWxUaW1lPTAsdGhpcy5sYXN0T3A9dGhpcy5sYXN0U2VsT3A9bnVsbCx0aGlzLmxhc3RPcmlnaW49dGhpcy5sYXN0U2VsT3JpZ2luPW51bGwsdGhpcy5nZW5lcmF0aW9uPXRoaXMubWF4R2VuZXJhdGlvbj1lfHwxfWZ1bmN0aW9uIG5vKGUsdCl7dmFyIG49e2Zyb206SCh0LmZyb20pLHRvOkdyKHQpLHRleHQ6aihlLHQuZnJvbSx0LnRvKX07cmV0dXJuIHVvKGUsbix0LmZyb20ubGluZSx0LnRvLmxpbmUrMSksUXIoZSxmdW5jdGlvbihlKXtyZXR1cm4gdW8oZSxuLHQuZnJvbS5saW5lLHQudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gcm8oZSl7Zm9yKDtlLmxlbmd0aDspe2lmKCFtKGUpLnJhbmdlcylicmVhaztlLnBvcCgpfX1mdW5jdGlvbiBvbyhlLHQpe3JldHVybiB0PyhybyhlLmRvbmUpLG0oZS5kb25lKSk6ZS5kb25lLmxlbmd0aCYmIW0oZS5kb25lKS5yYW5nZXM/bShlLmRvbmUpOmUuZG9uZS5sZW5ndGg+MSYmIWUuZG9uZVtlLmRvbmUubGVuZ3RoLTJdLnJhbmdlcz8oZS5kb25lLnBvcCgpLG0oZS5kb25lKSk6dm9pZCAwfWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3ZhciBvPWUuaGlzdG9yeTtvLnVuZG9uZS5sZW5ndGg9MDt2YXIgcyxpLGE9K25ldyBEYXRlO2lmKChvLmxhc3RPcD09cnx8by5sYXN0T3JpZ2luPT10Lm9yaWdpbiYmdC5vcmlnaW4mJigiKyI9PXQub3JpZ2luLmNoYXJBdCgwKSYmby5sYXN0TW9kVGltZT5hLShlLmNtP2UuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheTo1MDApfHwiKiI9PXQub3JpZ2luLmNoYXJBdCgwKSkpJiYocz1vbyhvLG8ubGFzdE9wPT1yKSkpaT1tKHMuY2hhbmdlcyksMD09UCh0LmZyb20sdC50bykmJjA9PVAodC5mcm9tLGkudG8pP2kudG89R3IodCk6cy5jaGFuZ2VzLnB1c2gobm8oZSx0KSk7ZWxzZXt2YXIgbD1tKG8uZG9uZSk7Zm9yKGwmJmwucmFuZ2VzfHxsbyhlLnNlbCxvLmRvbmUpLHM9e2NoYW5nZXM6W25vKGUsdCldLGdlbmVyYXRpb246by5nZW5lcmF0aW9ufSxvLmRvbmUucHVzaChzKTtvLmRvbmUubGVuZ3RoPm8udW5kb0RlcHRoOylvLmRvbmUuc2hpZnQoKSxvLmRvbmVbMF0ucmFuZ2VzfHxvLmRvbmUuc2hpZnQoKX1vLmRvbmUucHVzaChuKSxvLmdlbmVyYXRpb249KytvLm1heEdlbmVyYXRpb24sby5sYXN0TW9kVGltZT1vLmxhc3RTZWxUaW1lPWEsby5sYXN0T3A9by5sYXN0U2VsT3A9cixvLmxhc3RPcmlnaW49by5sYXN0U2VsT3JpZ2luPXQub3JpZ2luLGl8fFJlKGUsImhpc3RvcnlBZGRlZCIpfWZ1bmN0aW9uIGlvKGUsdCxuLHIpe3ZhciBvPXQuY2hhckF0KDApO3JldHVybiIqIj09b3x8IisiPT1vJiZuLnJhbmdlcy5sZW5ndGg9PXIucmFuZ2VzLmxlbmd0aCYmbi5zb21ldGhpbmdTZWxlY3RlZCgpPT1yLnNvbWV0aGluZ1NlbGVjdGVkKCkmJm5ldyBEYXRlLWUuaGlzdG9yeS5sYXN0U2VsVGltZTw9KGUuY20/ZS5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5OjUwMCl9ZnVuY3Rpb24gYW8oZSx0LG4scil7dmFyIG89ZS5oaXN0b3J5LHM9ciYmci5vcmlnaW47bj09by5sYXN0U2VsT3B8fHMmJm8ubGFzdFNlbE9yaWdpbj09cyYmKG8ubGFzdE1vZFRpbWU9PW8ubGFzdFNlbFRpbWUmJm8ubGFzdE9yaWdpbj09c3x8aW8oZSxzLG0oby5kb25lKSx0KSk/by5kb25lW28uZG9uZS5sZW5ndGgtMV09dDpsbyh0LG8uZG9uZSksby5sYXN0U2VsVGltZT0rbmV3IERhdGUsby5sYXN0U2VsT3JpZ2luPXMsby5sYXN0U2VsT3A9bixyJiYhMSE9PXIuY2xlYXJSZWRvJiZybyhvLnVuZG9uZSl9ZnVuY3Rpb24gbG8oZSx0KXt2YXIgbj1tKHQpO24mJm4ucmFuZ2VzJiZuLmVxdWFscyhlKXx8dC5wdXNoKGUpfWZ1bmN0aW9uIHVvKGUsdCxuLHIpe3ZhciBvPXRbInNwYW5zXyIrZS5pZF0scz0wO2UuaXRlcihNYXRoLm1heChlLmZpcnN0LG4pLE1hdGgubWluKGUuZmlyc3QrZS5zaXplLHIpLGZ1bmN0aW9uKG4pe24ubWFya2VkU3BhbnMmJigob3x8KG89dFsic3BhbnNfIitlLmlkXT17fSkpW3NdPW4ubWFya2VkU3BhbnMpLCsrc30pfWZ1bmN0aW9uIGNvKGUpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgdCxuPTA7bjxlLmxlbmd0aDsrK24pZVtuXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQ/dHx8KHQ9ZS5zbGljZSgwLG4pKTp0JiZ0LnB1c2goZVtuXSk7cmV0dXJuIHQ/dC5sZW5ndGg/dDpudWxsOmV9ZnVuY3Rpb24gX28oZSx0KXt2YXIgbj10WyJzcGFuc18iK2UuaWRdO2lmKCFuKXJldHVybiBudWxsO2Zvcih2YXIgcj1bXSxvPTA7bzx0LnRleHQubGVuZ3RoOysrbylyLnB1c2goY28obltvXSkpO3JldHVybiByfWZ1bmN0aW9uIHBvKGUsdCl7dmFyIG49X28oZSx0KSxyPVooZSx0KTtpZighbilyZXR1cm4gcjtpZighcilyZXR1cm4gbjtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbyl7dmFyIHM9bltvXSxpPXJbb107aWYocyYmaSllOmZvcih2YXIgYT0wO2E8aS5sZW5ndGg7KythKXtmb3IodmFyIGw9aVthXSx1PTA7dTxzLmxlbmd0aDsrK3UpaWYoc1t1XS5tYXJrZXI9PWwubWFya2VyKWNvbnRpbnVlIGU7cy5wdXNoKGwpfWVsc2UgaSYmKG5bb109aSl9cmV0dXJuIG59ZnVuY3Rpb24gZm8oZSx0LG4pe2Zvcih2YXIgcj1bXSxvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzPWVbb107aWYocy5yYW5nZXMpci5wdXNoKG4/eGEucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwocyk6cyk7ZWxzZXt2YXIgaT1zLmNoYW5nZXMsYT1bXTtyLnB1c2goe2NoYW5nZXM6YX0pO2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7KytsKXt2YXIgdT1pW2xdLGM9dm9pZCAwO2lmKGEucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLHQpZm9yKHZhciBkIGluIHUpKGM9ZC5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmXyh0LE51bWJlcihjWzFdKSk+LTEmJihtKGEpW2RdPXVbZF0sZGVsZXRlIHVbZF0pfX19cmV0dXJuIHJ9ZnVuY3Rpb24gbW8oZSx0LG4scil7aWYocil7dmFyIG89ZS5hbmNob3I7aWYobil7dmFyIHM9UCh0LG8pPDA7cyE9UChuLG8pPDA/KG89dCx0PW4pOnMhPVAodCxuKTwwJiYodD1uKX1yZXR1cm4gbmV3IExhKG8sdCl9cmV0dXJuIG5ldyBMYShufHx0LHQpfWZ1bmN0aW9uIGhvKGUsdCxuLHIsbyl7bnVsbD09byYmKG89ZS5jbSYmKGUuY20uZGlzcGxheS5zaGlmdHx8ZS5leHRlbmQpKSxUbyhlLG5ldyB4YShbbW8oZS5zZWwucHJpbWFyeSgpLHQsbixvKV0sMCkscil9ZnVuY3Rpb24gZ28oZSx0LG4pe2Zvcih2YXIgcj1bXSxvPWUuY20mJihlLmNtLmRpc3BsYXkuc2hpZnR8fGUuZXh0ZW5kKSxzPTA7czxlLnNlbC5yYW5nZXMubGVuZ3RoO3MrKylyW3NdPW1vKGUuc2VsLnJhbmdlc1tzXSx0W3NdLG51bGwsbyk7VG8oZSxCcihlLmNtLHIsZS5zZWwucHJpbUluZGV4KSxuKX1mdW5jdGlvbiBibyhlLHQsbixyKXt2YXIgbz1lLnNlbC5yYW5nZXMuc2xpY2UoMCk7b1t0XT1uLFRvKGUsQnIoZS5jbSxvLGUuc2VsLnByaW1JbmRleCkscil9ZnVuY3Rpb24gRW8oZSx0LG4scil7VG8oZSxVcih0LG4pLHIpfWZ1bmN0aW9uIHlvKGUsdCxuKXt2YXIgcj17cmFuZ2VzOnQucmFuZ2VzLHVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMucmFuZ2VzPVtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKW4ucmFuZ2VzW3JdPW5ldyBMYShHKGUsdFtyXS5hbmNob3IpLEcoZSx0W3JdLmhlYWQpKX0sb3JpZ2luOm4mJm4ub3JpZ2lufTtyZXR1cm4gUmUoZSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIixlLHIpLGUuY20mJlJlKGUuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsZS5jbSxyKSxyLnJhbmdlcyE9dC5yYW5nZXM/QnIoZS5jbSxyLnJhbmdlcyxyLnJhbmdlcy5sZW5ndGgtMSk6dH1mdW5jdGlvbiB2byhlLHQsbil7dmFyIHI9ZS5oaXN0b3J5LmRvbmUsbz1tKHIpO28mJm8ucmFuZ2VzPyhyW3IubGVuZ3RoLTFdPXQsQW8oZSx0LG4pKTpUbyhlLHQsbil9ZnVuY3Rpb24gVG8oZSx0LG4pe0FvKGUsdCxuKSxhbyhlLGUuc2VsLGUuY20/ZS5jbS5jdXJPcC5pZDpOYU4sbil9ZnVuY3Rpb24gQW8oZSx0LG4peyhMZShlLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKXx8ZS5jbSYmTGUoZS5jbSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpJiYodD15byhlLHQsbikpLENvKGUsU28oZSx0LG4mJm4uYmlhc3x8KFAodC5wcmltYXJ5KCkuaGVhZCxlLnNlbC5wcmltYXJ5KCkuaGVhZCk8MD8tMToxKSwhMCkpLG4mJiExPT09bi5zY3JvbGx8fCFlLmNtfHxLbihlLmNtKX1mdW5jdGlvbiBDbyhlLHQpe3QuZXF1YWxzKGUuc2VsKXx8KGUuc2VsPXQsZS5jbSYmKGUuY20uY3VyT3AudXBkYXRlSW5wdXQ9MSxlLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITAseGUoZS5jbSkpLHZ0KGUsImN1cnNvckFjdGl2aXR5IixlKSl9ZnVuY3Rpb24gT28oZSl7Q28oZSxTbyhlLGUuc2VsLG51bGwsITEpKX1mdW5jdGlvbiBTbyhlLHQsbixyKXtmb3IodmFyIG8scz0wO3M8dC5yYW5nZXMubGVuZ3RoO3MrKyl7dmFyIGk9dC5yYW5nZXNbc10sYT10LnJhbmdlcy5sZW5ndGg9PWUuc2VsLnJhbmdlcy5sZW5ndGgmJmUuc2VsLnJhbmdlc1tzXSxsPWpvKGUsaS5hbmNob3IsYSYmYS5hbmNob3IsbixyKSx1PWpvKGUsaS5oZWFkLGEmJmEuaGVhZCxuLHIpOyhvfHxsIT1pLmFuY2hvcnx8dSE9aS5oZWFkKSYmKG98fChvPXQucmFuZ2VzLnNsaWNlKDAscykpLG9bc109bmV3IExhKGwsdSkpfXJldHVybiBvP0JyKGUuY20sbyx0LnByaW1JbmRleCk6dH1mdW5jdGlvbiBSbyhlLHQsbixyLG8pe3ZhciBzPVIoZSx0LmxpbmUpO2lmKHMubWFya2VkU3BhbnMpZm9yKHZhciBpPTA7aTxzLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2kpe3ZhciBhPXMubWFya2VkU3BhbnNbaV0sbD1hLm1hcmtlcjtpZigobnVsbD09YS5mcm9tfHwobC5pbmNsdXNpdmVMZWZ0P2EuZnJvbTw9dC5jaDphLmZyb208dC5jaCkpJiYobnVsbD09YS50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/YS50bz49dC5jaDphLnRvPnQuY2gpKSl7aWYobyYmKFJlKGwsImJlZm9yZUN1cnNvckVudGVyIiksbC5leHBsaWNpdGx5Q2xlYXJlZCkpe2lmKHMubWFya2VkU3BhbnMpey0taTtjb250aW51ZX1icmVha31pZighbC5hdG9taWMpY29udGludWU7aWYobil7dmFyIHU9bC5maW5kKHI8MD8xOi0xKSxjPXZvaWQgMDtpZigocjwwP2wuaW5jbHVzaXZlUmlnaHQ6bC5pbmNsdXNpdmVMZWZ0KSYmKHU9eG8oZSx1LC1yLHUmJnUubGluZT09dC5saW5lP3M6bnVsbCkpLHUmJnUubGluZT09dC5saW5lJiYoYz1QKHUsbikpJiYocjwwP2M8MDpjPjApKXJldHVybiBSbyhlLHUsdCxyLG8pfXZhciBkPWwuZmluZChyPDA/LTE6MSk7cmV0dXJuKHI8MD9sLmluY2x1c2l2ZUxlZnQ6bC5pbmNsdXNpdmVSaWdodCkmJihkPXhvKGUsZCxyLGQubGluZT09dC5saW5lP3M6bnVsbCkpLGQ/Um8oZSxkLHQscixvKTpudWxsfX1yZXR1cm4gdH1mdW5jdGlvbiBqbyhlLHQsbixyLG8pe3ZhciBzPXJ8fDEsaT1SbyhlLHQsbixzLG8pfHwhbyYmUm8oZSx0LG4scywhMCl8fFJvKGUsdCxuLC1zLG8pfHwhbyYmUm8oZSx0LG4sLXMsITApO3JldHVybiBpfHwoZS5jYW50RWRpdD0hMCxJKGUuZmlyc3QsMCkpfWZ1bmN0aW9uIHhvKGUsdCxuLHIpe3JldHVybiBuPDAmJjA9PXQuY2g/dC5saW5lPmUuZmlyc3Q/RyhlLEkodC5saW5lLTEpKTpudWxsOm4+MCYmdC5jaD09KHJ8fFIoZSx0LmxpbmUpKS50ZXh0Lmxlbmd0aD90LmxpbmU8ZS5maXJzdCtlLnNpemUtMT9JKHQubGluZSsxLDApOm51bGw6bmV3IEkodC5saW5lLHQuY2grbil9ZnVuY3Rpb24gTG8oZSl7ZS5zZXRTZWxlY3Rpb24oSShlLmZpcnN0TGluZSgpLDApLEkoZS5sYXN0TGluZSgpKSxXaSl9ZnVuY3Rpb24gRG8oZSx0LG4pe3ZhciByPXtjYW5jZWxlZDohMSxmcm9tOnQuZnJvbSx0bzp0LnRvLHRleHQ6dC50ZXh0LG9yaWdpbjp0Lm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5jZWxlZD0hMH19O3JldHVybiBuJiYoci51cGRhdGU9ZnVuY3Rpb24odCxuLG8scyl7dCYmKHIuZnJvbT1HKGUsdCkpLG4mJihyLnRvPUcoZSxuKSksbyYmKHIudGV4dD1vKSx2b2lkIDAhPT1zJiYoci5vcmlnaW49cyl9KSxSZShlLCJiZWZvcmVDaGFuZ2UiLGUsciksZS5jbSYmUmUoZS5jbSwiYmVmb3JlQ2hhbmdlIixlLmNtLHIpLHIuY2FuY2VsZWQ/KGUuY20mJihlLmNtLmN1ck9wLnVwZGF0ZUlucHV0PTIpLG51bGwpOntmcm9tOnIuZnJvbSx0bzpyLnRvLHRleHQ6ci50ZXh0LG9yaWdpbjpyLm9yaWdpbn19ZnVuY3Rpb24gd28oZSx0LG4pe2lmKGUuY20pe2lmKCFlLmNtLmN1ck9wKXJldHVybiBtcihlLmNtLHdvKShlLHQsbik7aWYoZS5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKExlKGUsImJlZm9yZUNoYW5nZSIpfHxlLmNtJiZMZShlLmNtLCJiZWZvcmVDaGFuZ2UiKSl8fCh0PURvKGUsdCwhMCkpKXt2YXIgcj1RaSYmIW4mJnRlKGUsdC5mcm9tLHQudG8pO2lmKHIpZm9yKHZhciBvPXIubGVuZ3RoLTE7bz49MDstLW8pTW8oZSx7ZnJvbTpyW29dLmZyb20sdG86cltvXS50byx0ZXh0Om8/WyIiXTp0LnRleHQsb3JpZ2luOnQub3JpZ2lufSk7ZWxzZSBNbyhlLHQpfX1mdW5jdGlvbiBNbyhlLHQpe2lmKDEhPXQudGV4dC5sZW5ndGh8fCIiIT10LnRleHRbMF18fDAhPVAodC5mcm9tLHQudG8pKXt2YXIgbj1WcihlLHQpO3NvKGUsdCxuLGUuY20/ZS5jbS5jdXJPcC5pZDpOYU4pLFBvKGUsdCxuLFooZSx0KSk7dmFyIHI9W107UXIoZSxmdW5jdGlvbihlLG4pe258fC0xIT1fKHIsZS5oaXN0b3J5KXx8KFVvKGUuaGlzdG9yeSx0KSxyLnB1c2goZS5oaXN0b3J5KSksUG8oZSx0LG51bGwsWihlLHQpKX0pfX1mdW5jdGlvbiBrbyhlLHQsbil7dmFyIHI9ZS5jbSYmZS5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzO2lmKCFyfHxuKXtmb3IodmFyIG8scz1lLmhpc3RvcnksaT1lLnNlbCxhPSJ1bmRvIj09dD9zLmRvbmU6cy51bmRvbmUsbD0idW5kbyI9PXQ/cy51bmRvbmU6cy5kb25lLHU9MDt1PGEubGVuZ3RoJiYobz1hW3VdLG4/IW8ucmFuZ2VzfHxvLmVxdWFscyhlLnNlbCk6by5yYW5nZXMpO3UrKyk7aWYodSE9YS5sZW5ndGgpe2ZvcihzLmxhc3RPcmlnaW49cy5sYXN0U2VsT3JpZ2luPW51bGw7Oyl7aWYobz1hLnBvcCgpLCFvLnJhbmdlcyl7aWYocilyZXR1cm4gdm9pZCBhLnB1c2gobyk7YnJlYWt9aWYobG8obyxsKSxuJiYhby5lcXVhbHMoZS5zZWwpKXJldHVybiB2b2lkIFRvKGUsbyx7Y2xlYXJSZWRvOiExfSk7aT1vfXZhciBjPVtdO2xvKGksbCksbC5wdXNoKHtjaGFuZ2VzOmMsZ2VuZXJhdGlvbjpzLmdlbmVyYXRpb259KSxzLmdlbmVyYXRpb249by5nZW5lcmF0aW9ufHwrK3MubWF4R2VuZXJhdGlvbjtmb3IodmFyIGQ9TGUoZSwiYmVmb3JlQ2hhbmdlIil8fGUuY20mJkxlKGUuY20sImJlZm9yZUNoYW5nZSIpLHA9by5jaGFuZ2VzLmxlbmd0aC0xO3A+PTA7LS1wKXt2YXIgZj1mdW5jdGlvbihuKXt2YXIgcj1vLmNoYW5nZXNbbl07aWYoci5vcmlnaW49dCxkJiYhRG8oZSxyLCExKSlyZXR1cm4gYS5sZW5ndGg9MCx7fTtjLnB1c2gobm8oZSxyKSk7dmFyIHM9bj9WcihlLHIpOm0oYSk7UG8oZSxyLHMscG8oZSxyKSksIW4mJmUuY20mJmUuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206ci5mcm9tLHRvOkdyKHIpfSk7dmFyIGk9W107UXIoZSxmdW5jdGlvbihlLHQpe3R8fC0xIT1fKGksZS5oaXN0b3J5KXx8KFVvKGUuaGlzdG9yeSxyKSxpLnB1c2goZS5oaXN0b3J5KSksUG8oZSxyLG51bGwscG8oZSxyKSl9KX0ocCk7aWYoZilyZXR1cm4gZi52fX19fWZ1bmN0aW9uIElvKGUsdCl7aWYoMCE9dCYmKGUuZmlyc3QrPXQsZS5zZWw9bmV3IHhhKGgoZS5zZWwucmFuZ2VzLGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGEoSShlLmFuY2hvci5saW5lK3QsZS5hbmNob3IuY2gpLEkoZS5oZWFkLmxpbmUrdCxlLmhlYWQuY2gpKX0pLGUuc2VsLnByaW1JbmRleCksZS5jbSkpe2JyKGUuY20sZS5maXJzdCxlLmZpcnN0LXQsdCk7Zm9yKHZhciBuPWUuY20uZGlzcGxheSxyPW4udmlld0Zyb207cjxuLnZpZXdUbztyKyspRXIoZS5jbSxyLCJndXR0ZXIiKX19ZnVuY3Rpb24gUG8oZSx0LG4scil7aWYoZS5jbSYmIWUuY20uY3VyT3ApcmV0dXJuIG1yKGUuY20sUG8pKGUsdCxuLHIpO2lmKHQudG8ubGluZTxlLmZpcnN0KXJldHVybiB2b2lkIElvKGUsdC50ZXh0Lmxlbmd0aC0xLSh0LnRvLmxpbmUtdC5mcm9tLmxpbmUpKTtpZighKHQuZnJvbS5saW5lPmUubGFzdExpbmUoKSkpe2lmKHQuZnJvbS5saW5lPGUuZmlyc3Qpe3ZhciBvPXQudGV4dC5sZW5ndGgtMS0oZS5maXJzdC10LmZyb20ubGluZSk7SW8oZSxvKSx0PXtmcm9tOkkoZS5maXJzdCwwKSx0bzpJKHQudG8ubGluZStvLHQudG8uY2gpLHRleHQ6W20odC50ZXh0KV0sb3JpZ2luOnQub3JpZ2lufX12YXIgcz1lLmxhc3RMaW5lKCk7dC50by5saW5lPnMmJih0PXtmcm9tOnQuZnJvbSx0bzpJKHMsUihlLHMpLnRleHQubGVuZ3RoKSx0ZXh0Olt0LnRleHRbMF1dLG9yaWdpbjp0Lm9yaWdpbn0pLHQucmVtb3ZlZD1qKGUsdC5mcm9tLHQudG8pLG58fChuPVZyKGUsdCkpLGUuY20/Tm8oZS5jbSx0LHIpOiRyKGUsdCxyKSxBbyhlLG4sV2kpfX1mdW5jdGlvbiBObyhlLHQsbil7dmFyIHI9ZS5kb2Msbz1lLmRpc3BsYXkscz10LmZyb20saT10LnRvLGE9ITEsbD1zLmxpbmU7ZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGw9RChfZShSKHIscy5saW5lKSkpLHIuaXRlcihsLGkubGluZSsxLGZ1bmN0aW9uKGUpe2lmKGU9PW8ubWF4TGluZSlyZXR1cm4gYT0hMCwhMH0pKSxyLnNlbC5jb250YWlucyh0LmZyb20sdC50byk+LTEmJnhlKGUpLCRyKHIsdCxuLENuKGUpKSxlLm9wdGlvbnMubGluZVdyYXBwaW5nfHwoci5pdGVyKGwscy5saW5lK3QudGV4dC5sZW5ndGgsZnVuY3Rpb24oZSl7dmFyIHQ9eWUoZSk7dD5vLm1heExpbmVMZW5ndGgmJihvLm1heExpbmU9ZSxvLm1heExpbmVMZW5ndGg9dCxvLm1heExpbmVDaGFuZ2VkPSEwLGE9ITEpfSksYSYmKGUuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLHN0KHIscy5saW5lKSxDcihlLDQwMCk7dmFyIHU9dC50ZXh0Lmxlbmd0aC0oaS5saW5lLXMubGluZSktMTt0LmZ1bGw/YnIoZSk6cy5saW5lIT1pLmxpbmV8fDEhPXQudGV4dC5sZW5ndGh8fFhyKGUuZG9jLHQpP2JyKGUscy5saW5lLGkubGluZSsxLHUpOkVyKGUscy5saW5lLCJ0ZXh0Iik7dmFyIGM9TGUoZSwiY2hhbmdlcyIpLGQ9TGUoZSwiY2hhbmdlIik7aWYoZHx8Yyl7dmFyIF89e2Zyb206cyx0bzppLHRleHQ6dC50ZXh0LHJlbW92ZWQ6dC5yZW1vdmVkLG9yaWdpbjp0Lm9yaWdpbn07ZCYmdnQoZSwiY2hhbmdlIixlLF8pLGMmJihlLmN1ck9wLmNoYW5nZU9ianN8fChlLmN1ck9wLmNoYW5nZU9ianM9W10pKS5wdXNoKF8pfWUuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudT1udWxsfWZ1bmN0aW9uIEhvKGUsdCxuLHIsbyl7dmFyIHM7cnx8KHI9biksUChyLG4pPDAmJihzPVtyLG5dLG49c1swXSxyPXNbMV0pLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9ZS5zcGxpdExpbmVzKHQpKSx3byhlLHtmcm9tOm4sdG86cix0ZXh0OnQsb3JpZ2luOm99KX1mdW5jdGlvbiBGbyhlLHQsbixyKXtuPGUubGluZT9lLmxpbmUrPXI6dDxlLmxpbmUmJihlLmxpbmU9dCxlLmNoPTApfWZ1bmN0aW9uIEJvKGUsdCxuLHIpe2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcz1lW29dLGk9ITA7aWYocy5yYW5nZXMpe3MuY29waWVkfHwocz1lW29dPXMuZGVlcENvcHkoKSxzLmNvcGllZD0hMCk7Zm9yKHZhciBhPTA7YTxzLnJhbmdlcy5sZW5ndGg7YSsrKUZvKHMucmFuZ2VzW2FdLmFuY2hvcix0LG4sciksRm8ocy5yYW5nZXNbYV0uaGVhZCx0LG4scil9ZWxzZXtmb3IodmFyIGw9MDtsPHMuY2hhbmdlcy5sZW5ndGg7KytsKXt2YXIgdT1zLmNoYW5nZXNbbF07aWYobjx1LmZyb20ubGluZSl1LmZyb209SSh1LmZyb20ubGluZStyLHUuZnJvbS5jaCksdS50bz1JKHUudG8ubGluZStyLHUudG8uY2gpO2Vsc2UgaWYodDw9dS50by5saW5lKXtpPSExO2JyZWFrfX1pfHwoZS5zcGxpY2UoMCxvKzEpLG89MCl9fX1mdW5jdGlvbiBVbyhlLHQpe3ZhciBuPXQuZnJvbS5saW5lLHI9dC50by5saW5lLG89dC50ZXh0Lmxlbmd0aC0oci1uKS0xO0JvKGUuZG9uZSxuLHIsbyksQm8oZS51bmRvbmUsbixyLG8pfWZ1bmN0aW9uIEdvKGUsdCxuLHIpe3ZhciBvPXQscz10O3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9zPVIoZSxVKGUsdCkpOm89RCh0KSxudWxsPT1vP251bGw6KHIocyxvKSYmZS5jbSYmRXIoZS5jbSxvLG4pLHMpfWZ1bmN0aW9uIHpvKGUpe3ZhciB0PXRoaXM7dGhpcy5saW5lcz1lLHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBuPTAscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ucGFyZW50PXQsbis9ZVtyXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBWbyhlKXt2YXIgdD10aGlzO3RoaXMuY2hpbGRyZW49ZTtmb3IodmFyIG49MCxyPTAsbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcz1lW29dO24rPXMuY2h1bmtTaXplKCkscis9cy5oZWlnaHQscy5wYXJlbnQ9dH10aGlzLnNpemU9bix0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gV28oZSx0LG4pe0VlKHQpPChlLmN1ck9wJiZlLmN1ck9wLnNjcm9sbFRvcHx8ZS5kb2Muc2Nyb2xsVG9wKSYmcW4oZSxuKX1mdW5jdGlvbiBZbyhlLHQsbixyKXt2YXIgbz1uZXcgRGEoZSxuLHIpLHM9ZS5jbTtyZXR1cm4gcyYmby5ub0hTY3JvbGwmJihzLmRpc3BsYXkuYWxpZ25XaWRnZXRzPSEwKSxHbyhlLHQsIndpZGdldCIsZnVuY3Rpb24odCl7dmFyIG49dC53aWRnZXRzfHwodC53aWRnZXRzPVtdKTtpZihudWxsPT1vLmluc2VydEF0P24ucHVzaChvKTpuLnNwbGljZShNYXRoLm1pbihuLmxlbmd0aC0xLE1hdGgubWF4KDAsby5pbnNlcnRBdCkpLDAsbyksby5saW5lPXQscyYmIWdlKGUsdCkpe3ZhciByPUVlKHQpPGUuc2Nyb2xsVG9wO0wodCx0LmhlaWdodCtJdChvKSksciYmcW4ocyxvLmhlaWdodCkscy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH1yZXR1cm4hMH0pLHMmJnZ0KHMsImxpbmVXaWRnZXRBZGRlZCIscyxvLCJudW1iZXIiPT10eXBlb2YgdD90OkQodCkpLG99ZnVuY3Rpb24gcW8oZSx0LG4scixzKXtpZihyJiZyLnNoYXJlZClyZXR1cm4gS28oZSx0LG4scixzKTtpZihlLmNtJiYhZS5jbS5jdXJPcClyZXR1cm4gbXIoZS5jbSxxbykoZSx0LG4scixzKTt2YXIgaT1uZXcgTWEoZSxzKSxhPVAodCxuKTtpZihyJiZjKHIsaSwhMSksYT4wfHwwPT1hJiYhMSE9PWkuY2xlYXJXaGVuRW1wdHkpcmV0dXJuIGk7aWYoaS5yZXBsYWNlZFdpdGgmJihpLmNvbGxhcHNlZD0hMCxpLndpZGdldE5vZGU9bygic3BhbiIsW2kucmVwbGFjZWRXaXRoXSwiQ29kZU1pcnJvci13aWRnZXQiKSxyLmhhbmRsZU1vdXNlRXZlbnRzfHxpLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwidHJ1ZSIpLHIuaW5zZXJ0TGVmdCYmKGkud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0PSEwKSksaS5jb2xsYXBzZWQpe2lmKGRlKGUsdC5saW5lLHQsbixpKXx8dC5saW5lIT1uLmxpbmUmJmRlKGUsbi5saW5lLHQsbixpKSl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIHBhcnRpYWxseSBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmUiKTtZKCl9aS5hZGRUb0hpc3RvcnkmJnNvKGUse2Zyb206dCx0bzpuLG9yaWdpbjoibWFya1RleHQifSxlLnNlbCxOYU4pO3ZhciBsLHU9dC5saW5lLGQ9ZS5jbTtpZihlLml0ZXIodSxuLmxpbmUrMSxmdW5jdGlvbihlKXtkJiZpLmNvbGxhcHNlZCYmIWQub3B0aW9ucy5saW5lV3JhcHBpbmcmJl9lKGUpPT1kLmRpc3BsYXkubWF4TGluZSYmKGw9ITApLGkuY29sbGFwc2VkJiZ1IT10LmxpbmUmJkwoZSwwKSwkKGUsbmV3IHEoaSx1PT10LmxpbmU/dC5jaDpudWxsLHU9PW4ubGluZT9uLmNoOm51bGwpKSwrK3V9KSxpLmNvbGxhcHNlZCYmZS5pdGVyKHQubGluZSxuLmxpbmUrMSxmdW5jdGlvbih0KXtnZShlLHQpJiZMKHQsMCl9KSxpLmNsZWFyT25FbnRlciYmbmEoaSwiYmVmb3JlQ3Vyc29yRW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xlYXIoKX0pLGkucmVhZE9ubHkmJihXKCksKGUuaGlzdG9yeS5kb25lLmxlbmd0aHx8ZS5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZlLmNsZWFySGlzdG9yeSgpKSxpLmNvbGxhcHNlZCYmKGkuaWQ9Kyt3YSxpLmF0b21pYz0hMCksZCl7aWYobCYmKGQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksaS5jb2xsYXBzZWQpYnIoZCx0LmxpbmUsbi5saW5lKzEpO2Vsc2UgaWYoaS5jbGFzc05hbWV8fGkuc3RhcnRTdHlsZXx8aS5lbmRTdHlsZXx8aS5jc3N8fGkuYXR0cmlidXRlc3x8aS50aXRsZSlmb3IodmFyIF89dC5saW5lO188PW4ubGluZTtfKyspRXIoZCxfLCJ0ZXh0Iik7aS5hdG9taWMmJk9vKGQuZG9jKSx2dChkLCJtYXJrZXJBZGRlZCIsZCxpKX1yZXR1cm4gaX1mdW5jdGlvbiBLbyhlLHQsbixyLG8pe3I9YyhyKSxyLnNoYXJlZD0hMTt2YXIgcz1bcW8oZSx0LG4scixvKV0saT1zWzBdLGE9ci53aWRnZXROb2RlO3JldHVybiBRcihlLGZ1bmN0aW9uKGUpe2EmJihyLndpZGdldE5vZGU9YS5jbG9uZU5vZGUoITApKSxzLnB1c2gocW8oZSxHKGUsdCksRyhlLG4pLHIsbykpO2Zvcih2YXIgbD0wO2w8ZS5saW5rZWQubGVuZ3RoOysrbClpZihlLmxpbmtlZFtsXS5pc1BhcmVudClyZXR1cm47aT1tKHMpfSksbmV3IGthKHMsaSl9ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIGUuZmluZE1hcmtzKEkoZS5maXJzdCwwKSxlLmNsaXBQb3MoSShlLmxhc3RMaW5lKCkpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnR9KX1mdW5jdGlvbiAkbyhlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLG89ci5maW5kKCkscz1lLmNsaXBQb3Moby5mcm9tKSxpPWUuY2xpcFBvcyhvLnRvKTtpZihQKHMsaSkpe3ZhciBhPXFvKGUscyxpLHIucHJpbWFyeSxyLnByaW1hcnkudHlwZSk7ci5tYXJrZXJzLnB1c2goYSksYS5wYXJlbnQ9cn19fWZ1bmN0aW9uIFFvKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKSFmdW5jdGlvbih0KXt2YXIgbj1lW3RdLHI9W24ucHJpbWFyeS5kb2NdO1FyKG4ucHJpbWFyeS5kb2MsZnVuY3Rpb24oZSl7cmV0dXJuIHIucHVzaChlKX0pO2Zvcih2YXIgbz0wO288bi5tYXJrZXJzLmxlbmd0aDtvKyspe3ZhciBzPW4ubWFya2Vyc1tvXTstMT09XyhyLHMuZG9jKSYmKHMucGFyZW50PW51bGwsbi5tYXJrZXJzLnNwbGljZShvLS0sMSkpfX0odCl9ZnVuY3Rpb24gSm8oZSl7dmFyIHQ9dGhpcztpZih0cyh0KSwhamUodCxlKSYmIVB0KHQuZGlzcGxheSxlKSl7d2UoZSksRWkmJihOYT0rbmV3IERhdGUpO3ZhciBuPVNuKHQsZSwhMCkscj1lLmRhdGFUcmFuc2Zlci5maWxlcztpZihuJiYhdC5pc1JlYWRPbmx5KCkpaWYociYmci5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIG89ci5sZW5ndGgscz1BcnJheShvKSxpPTAsYT0wO2E8bzsrK2EpIWZ1bmN0aW9uKGUscil7aWYoIXQub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXN8fC0xIT1fKHQub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsZS50eXBlKSl7dmFyIGE9bmV3IEZpbGVSZWFkZXI7YS5vbmxvYWQ9bXIodCxmdW5jdGlvbigpe3ZhciBlPWEucmVzdWx0O2lmKC9bXHgwMC1ceDA4XHgwZS1ceDFmXXsyfS8udGVzdChlKSYmKGU9IiIpLHNbcl09ZSwrK2k9PW8pe249Ryh0LmRvYyxuKTt2YXIgbD17ZnJvbTpuLHRvOm4sdGV4dDp0LmRvYy5zcGxpdExpbmVzKHMuam9pbih0LmRvYy5saW5lU2VwYXJhdG9yKCkpKSxvcmlnaW46InBhc3RlIn07d28odC5kb2MsbCksdm8odC5kb2MsVXIobixHcihsKSkpfX0pLGEucmVhZEFzVGV4dChlKX19KHJbYV0sYSk7ZWxzZXtpZih0LnN0YXRlLmRyYWdnaW5nVGV4dCYmdC5kb2Muc2VsLmNvbnRhaW5zKG4pPi0xKXJldHVybiB0LnN0YXRlLmRyYWdnaW5nVGV4dChlKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LDIwKTt0cnl7dmFyIGw9ZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpO2lmKGwpe3ZhciB1O2lmKHQuc3RhdGUuZHJhZ2dpbmdUZXh0JiYhdC5zdGF0ZS5kcmFnZ2luZ1RleHQuY29weSYmKHU9dC5saXN0U2VsZWN0aW9ucygpKSxBbyh0LmRvYyxVcihuLG4pKSx1KWZvcih2YXIgYz0wO2M8dS5sZW5ndGg7KytjKUhvKHQuZG9jLCIiLHVbY10uYW5jaG9yLHVbY10uaGVhZCwiZHJhZyIpO3QucmVwbGFjZVNlbGVjdGlvbihsLCJhcm91bmQiLCJwYXN0ZSIpLHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfX1jYXRjaChlKXt9fX19ZnVuY3Rpb24gWm8oZSx0KXtpZihFaSYmKCFlLnN0YXRlLmRyYWdnaW5nVGV4dHx8K25ldyBEYXRlLU5hPDEwMCkpcmV0dXJuIHZvaWQgSWUodCk7aWYoIWplKGUsdCkmJiFQdChlLmRpc3BsYXksdCkmJih0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IixlLmdldFNlbGVjdGlvbigpKSx0LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5TW92ZSIsdC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhT2kpKXt2YXIgbj1yKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09IixDaSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSxlLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLHQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksQ2kmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gZXMoZSx0KXt2YXIgbz1TbihlLHQpO2lmKG8pe3ZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtMbihlLG8scyksZS5kaXNwbGF5LmRyYWdDdXJzb3J8fChlLmRpc3BsYXkuZHJhZ0N1cnNvcj1yKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY3Vyc29ycyBDb2RlTWlycm9yLWRyYWdjdXJzb3JzIiksZS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoZS5kaXNwbGF5LmRyYWdDdXJzb3IsZS5kaXNwbGF5LmN1cnNvckRpdikpLG4oZS5kaXNwbGF5LmRyYWdDdXJzb3Iscyl9fWZ1bmN0aW9uIHRzKGUpe2UuZGlzcGxheS5kcmFnQ3Vyc29yJiYoZS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChlLmRpc3BsYXkuZHJhZ0N1cnNvciksZS5kaXNwbGF5LmRyYWdDdXJzb3I9bnVsbCl9ZnVuY3Rpb24gbnMoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7Zm9yKHZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3IiKSxuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5Db2RlTWlycm9yO28mJm4ucHVzaChvKX1uLmxlbmd0aCYmblswXS5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyllKG5bdF0pfSl9fWZ1bmN0aW9uIHJzKCl7SGF8fChvcygpLEhhPSEwKX1mdW5jdGlvbiBvcygpe3ZhciBlO25hKHdpbmRvdywicmVzaXplIixmdW5jdGlvbigpe251bGw9PWUmJihlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGwsbnMoc3MpfSwxMDApKX0pLG5hKHdpbmRvdywiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gbnMoTm4pfSl9ZnVuY3Rpb24gc3MoZSl7dmFyIHQ9ZS5kaXNwbGF5O3QuY2FjaGVkQ2hhcldpZHRoPXQuY2FjaGVkVGV4dEhlaWdodD10LmNhY2hlZFBhZGRpbmdIPW51bGwsdC5zY3JvbGxiYXJzQ2xpcHBlZD0hMSxlLnNldFNpemUoKX1mdW5jdGlvbiBpcyhlKXt2YXIgdD1lLnNwbGl0KC8tKD8hJCkvKTtlPXRbdC5sZW5ndGgtMV07Zm9yKHZhciBuLHIsbyxzLGk9MDtpPHQubGVuZ3RoLTE7aSsrKXt2YXIgYT10W2ldO2lmKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoYSkpcz0hMDtlbHNlIGlmKC9eYShsdCk/JC9pLnRlc3QoYSkpbj0hMDtlbHNlIGlmKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KGEpKXI9ITA7ZWxzZXtpZighL15zKGhpZnQpPyQvaS50ZXN0KGEpKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIrYSk7bz0hMH19cmV0dXJuIG4mJihlPSJBbHQtIitlKSxyJiYoZT0iQ3RybC0iK2UpLHMmJihlPSJDbWQtIitlKSxvJiYoZT0iU2hpZnQtIitlKSxlfWZ1bmN0aW9uIGFzKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciByPWVbbl07aWYoL14obmFtZXxmYWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KG4pKWNvbnRpbnVlO2lmKCIuLi4iPT1yKXtkZWxldGUgZVtuXTtjb250aW51ZX1mb3IodmFyIG89aChuLnNwbGl0KCIgIiksaXMpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGk9dm9pZCAwLGE9dm9pZCAwO3M9PW8ubGVuZ3RoLTE/KGE9by5qb2luKCIgIiksaT1yKTooYT1vLnNsaWNlKDAscysxKS5qb2luKCIgIiksaT0iLi4uIik7dmFyIGw9dFthXTtpZihsKXtpZihsIT1pKXRocm93IG5ldyBFcnJvcigiSW5jb25zaXN0ZW50IGJpbmRpbmdzIGZvciAiK2EpfWVsc2UgdFthXT1pfWRlbGV0ZSBlW25dfWZvcih2YXIgdSBpbiB0KWVbdV09dFt1XTtyZXR1cm4gZX1mdW5jdGlvbiBscyhlLHQsbixyKXt0PV9zKHQpO3ZhciBvPXQuY2FsbD90LmNhbGwoZSxyKTp0W2VdO2lmKCExPT09bylyZXR1cm4ibm90aGluZyI7aWYoIi4uLiI9PT1vKXJldHVybiJtdWx0aSI7aWYobnVsbCE9byYmbihvKSlyZXR1cm4iaGFuZGxlZCI7aWYodC5mYWxsdGhyb3VnaCl7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQuZmFsbHRocm91Z2gpKXJldHVybiBscyhlLHQuZmFsbHRocm91Z2gsbixyKTtmb3IodmFyIHM9MDtzPHQuZmFsbHRocm91Z2gubGVuZ3RoO3MrKyl7dmFyIGk9bHMoZSx0LmZhbGx0aHJvdWdoW3NdLG4scik7aWYoaSlyZXR1cm4gaX19fWZ1bmN0aW9uIHVzKGUpe3ZhciB0PSJzdHJpbmciPT10eXBlb2YgZT9lOkZhW2Uua2V5Q29kZV07cmV0dXJuIkN0cmwiPT10fHwiQWx0Ij09dHx8IlNoaWZ0Ij09dHx8Ik1vZCI9PXR9ZnVuY3Rpb24gY3MoZSx0LG4pe3ZhciByPWU7cmV0dXJuIHQuYWx0S2V5JiYiQWx0IiE9ciYmKGU9IkFsdC0iK2UpLChQaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmIkN0cmwiIT1yJiYoZT0iQ3RybC0iK2UpLChQaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmIkNtZCIhPXImJihlPSJDbWQtIitlKSwhbiYmdC5zaGlmdEtleSYmIlNoaWZ0IiE9ciYmKGU9IlNoaWZ0LSIrZSksZX1mdW5jdGlvbiBkcyhlLHQpe2lmKENpJiYzND09ZS5rZXlDb2RlJiZlLmNoYXIpcmV0dXJuITE7dmFyIG49RmFbZS5rZXlDb2RlXTtyZXR1cm4gbnVsbCE9biYmIWUuYWx0R3JhcGhLZXkmJigzPT1lLmtleUNvZGUmJmUuY29kZSYmKG49ZS5jb2RlKSxjcyhuLGUsdCkpfWZ1bmN0aW9uIF9zKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT96YVtlXTplfWZ1bmN0aW9uIHBzKGUsdCl7Zm9yKHZhciBuPWUuZG9jLnNlbC5yYW5nZXMscj1bXSxvPTA7bzxuLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10KG5bb10pO3IubGVuZ3RoJiZQKHMuZnJvbSxtKHIpLnRvKTw9MDspe3ZhciBpPXIucG9wKCk7aWYoUChpLmZyb20scy5mcm9tKTwwKXtzLmZyb209aS5mcm9tO2JyZWFrfX1yLnB1c2gocyl9ZnIoZSxmdW5jdGlvbigpe2Zvcih2YXIgdD1yLmxlbmd0aC0xO3Q+PTA7dC0tKUhvKGUuZG9jLCIiLHJbdF0uZnJvbSxyW3RdLnRvLCIrZGVsZXRlIik7S24oZSl9KX1mdW5jdGlvbiBmcyhlLHQsbil7dmFyIHI9QyhlLnRleHQsdCtuLG4pO3JldHVybiByPDB8fHI+ZS50ZXh0Lmxlbmd0aD9udWxsOnJ9ZnVuY3Rpb24gbXMoZSx0LG4pe3ZhciByPWZzKGUsdC5jaCxuKTtyZXR1cm4gbnVsbD09cj9udWxsOm5ldyBJKHQubGluZSxyLG48MD8iYWZ0ZXIiOiJiZWZvcmUiKX1mdW5jdGlvbiBocyhlLHQsbixyLG8pe2lmKGUpe3ZhciBzPUNlKG4sdC5kb2MuZGlyZWN0aW9uKTtpZihzKXt2YXIgaSxhPW88MD9tKHMpOnNbMF0sbD1vPDA9PSgxPT1hLmxldmVsKSx1PWw/ImFmdGVyIjoiYmVmb3JlIjtpZihhLmxldmVsPjB8fCJydGwiPT10LmRvYy5kaXJlY3Rpb24pe3ZhciBjPUt0KHQsbik7aT1vPDA/bi50ZXh0Lmxlbmd0aC0xOjA7dmFyIGQ9WHQodCxjLGkpLnRvcDtpPU8oZnVuY3Rpb24oZSl7cmV0dXJuIFh0KHQsYyxlKS50b3A9PWR9LG88MD09KDE9PWEubGV2ZWwpP2EuZnJvbTphLnRvLTEsaSksImJlZm9yZSI9PXUmJihpPWZzKG4saSwxKSl9ZWxzZSBpPW88MD9hLnRvOmEuZnJvbTtyZXR1cm4gbmV3IEkocixpLHUpfX1yZXR1cm4gbmV3IEkocixvPDA/bi50ZXh0Lmxlbmd0aDowLG88MD8iYmVmb3JlIjoiYWZ0ZXIiKX1mdW5jdGlvbiBncyhlLHQsbixyKXt2YXIgbz1DZSh0LGUuZG9jLmRpcmVjdGlvbik7aWYoIW8pcmV0dXJuIG1zKHQsbixyKTtuLmNoPj10LnRleHQubGVuZ3RoPyhuLmNoPXQudGV4dC5sZW5ndGgsbi5zdGlja3k9ImJlZm9yZSIpOm4uY2g8PTAmJihuLmNoPTAsbi5zdGlja3k9ImFmdGVyIik7dmFyIHM9QWUobyxuLmNoLG4uc3RpY2t5KSxpPW9bc107aWYoImx0ciI9PWUuZG9jLmRpcmVjdGlvbiYmaS5sZXZlbCUyPT0wJiYocj4wP2kudG8+bi5jaDppLmZyb208bi5jaCkpcmV0dXJuIG1zKHQsbixyKTt2YXIgYSxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZzKHQsZSBpbnN0YW5jZW9mIEk/ZS5jaDplLG4pfSx1PWZ1bmN0aW9uKG4pe3JldHVybiBlLm9wdGlvbnMubGluZVdyYXBwaW5nPyhhPWF8fEt0KGUsdCksbW4oZSx0LGEsbikpOntiZWdpbjowLGVuZDp0LnRleHQubGVuZ3RofX0sYz11KCJiZWZvcmUiPT1uLnN0aWNreT9sKG4sLTEpOm4uY2gpO2lmKCJydGwiPT1lLmRvYy5kaXJlY3Rpb258fDE9PWkubGV2ZWwpe3ZhciBkPTE9PWkubGV2ZWw9PXI8MCxfPWwobixkPzE6LTEpO2lmKG51bGwhPV8mJihkP188PWkudG8mJl88PWMuZW5kOl8+PWkuZnJvbSYmXz49Yy5iZWdpbikpe3ZhciBwPWQ/ImJlZm9yZSI6ImFmdGVyIjtyZXR1cm4gbmV3IEkobi5saW5lLF8scCl9fXZhciBmPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9uZXcgSShuLmxpbmUsbChlLDEpLCJiZWZvcmUiKTpuZXcgSShuLmxpbmUsZSwiYWZ0ZXIiKX07ZT49MCYmZTxvLmxlbmd0aDtlKz10KXt2YXIgaT1vW2VdLGE9dD4wPT0oMSE9aS5sZXZlbCksdT1hP3IuYmVnaW46bChyLmVuZCwtMSk7aWYoaS5mcm9tPD11JiZ1PGkudG8pcmV0dXJuIHModSxhKTtpZih1PWE/aS5mcm9tOmwoaS50bywtMSksci5iZWdpbjw9dSYmdTxyLmVuZClyZXR1cm4gcyh1LGEpfX0sbT1mKHMrcixyLGMpO2lmKG0pcmV0dXJuIG07dmFyIGg9cj4wP2MuZW5kOmwoYy5iZWdpbiwtMSk7cmV0dXJuIG51bGw9PWh8fHI+MCYmaD09dC50ZXh0Lmxlbmd0aHx8IShtPWYocj4wPzA6by5sZW5ndGgtMSxyLHUoaCkpKT9udWxsOm19ZnVuY3Rpb24gYnMoZSx0KXt2YXIgbj1SKGUuZG9jLHQpLHI9X2Uobik7cmV0dXJuIHIhPW4mJih0PUQocikpLGhzKCEwLGUscix0LDEpfWZ1bmN0aW9uIEVzKGUsdCl7dmFyIG49UihlLmRvYyx0KSxyPXBlKG4pO3JldHVybiByIT1uJiYodD1EKHIpKSxocyghMCxlLG4sdCwtMSl9ZnVuY3Rpb24geXMoZSx0KXt2YXIgbj1icyhlLHQubGluZSkscj1SKGUuZG9jLG4ubGluZSksbz1DZShyLGUuZG9jLmRpcmVjdGlvbik7aWYoIW98fDA9PW9bMF0ubGV2ZWwpe3ZhciBzPU1hdGgubWF4KDAsci50ZXh0LnNlYXJjaCgvXFMvKSksaT10LmxpbmU9PW4ubGluZSYmdC5jaDw9cyYmdC5jaDtyZXR1cm4gSShuLmxpbmUsaT8wOnMsbi5zdGlja3kpfXJldHVybiBufWZ1bmN0aW9uIHZzKGUsdCxuKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJiEodD1WYVt0XSkpcmV0dXJuITE7ZS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO3ZhciByPWUuZGlzcGxheS5zaGlmdCxvPSExO3RyeXtlLmlzUmVhZE9ubHkoKSYmKGUuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksbiYmKGUuZGlzcGxheS5zaGlmdD0hMSksbz10KGUpIT1WaX1maW5hbGx5e2UuZGlzcGxheS5zaGlmdD1yLGUuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBUcyhlLHQsbil7Zm9yKHZhciByPTA7cjxlLnN0YXRlLmtleU1hcHMubGVuZ3RoO3IrKyl7dmFyIG89bHModCxlLnN0YXRlLmtleU1hcHNbcl0sbixlKTtpZihvKXJldHVybiBvfXJldHVybiBlLm9wdGlvbnMuZXh0cmFLZXlzJiZscyh0LGUub3B0aW9ucy5leHRyYUtleXMsbixlKXx8bHModCxlLm9wdGlvbnMua2V5TWFwLG4sZSl9ZnVuY3Rpb24gQXMoZSx0LG4scil7dmFyIG89ZS5zdGF0ZS5rZXlTZXE7aWYobyl7aWYodXModCkpcmV0dXJuImhhbmRsZWQiO2lmKC9cJyQvLnRlc3QodCk/ZS5zdGF0ZS5rZXlTZXE9bnVsbDpXYS5zZXQoNTAsZnVuY3Rpb24oKXtlLnN0YXRlLmtleVNlcT09byYmKGUuc3RhdGUua2V5U2VxPW51bGwsZS5kaXNwbGF5LmlucHV0LnJlc2V0KCkpfSksQ3MoZSxvKyIgIit0LG4scikpcmV0dXJuITB9cmV0dXJuIENzKGUsdCxuLHIpfWZ1bmN0aW9uIENzKGUsdCxuLHIpe3ZhciBvPVRzKGUsdCxyKTtyZXR1cm4ibXVsdGkiPT1vJiYoZS5zdGF0ZS5rZXlTZXE9dCksImhhbmRsZWQiPT1vJiZ2dChlLCJrZXlIYW5kbGVkIixlLHQsbiksImhhbmRsZWQiIT1vJiYibXVsdGkiIT1vfHwod2UobiksTW4oZSkpLCEhb31mdW5jdGlvbiBPcyhlLHQpe3ZhciBuPWRzKHQsITApO3JldHVybiEhbiYmKHQuc2hpZnRLZXkmJiFlLnN0YXRlLmtleVNlcT9BcyhlLCJTaGlmdC0iK24sdCxmdW5jdGlvbih0KXtyZXR1cm4gdnMoZSx0LCEwKX0pfHxBcyhlLG4sdCxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQ/L15nb1tBLVpdLy50ZXN0KHQpOnQubW90aW9uKXJldHVybiB2cyhlLHQpfSk6QXMoZSxuLHQsZnVuY3Rpb24odCl7cmV0dXJuIHZzKGUsdCl9KSl9ZnVuY3Rpb24gU3MoZSx0LG4pe3JldHVybiBBcyhlLCInIituKyInIix0LGZ1bmN0aW9uKHQpe3JldHVybiB2cyhlLHQsITApfSl9ZnVuY3Rpb24gUnMoZSl7dmFyIHQ9dGhpcztpZih0LmN1ck9wLmZvY3VzPWkoKSwhamUodCxlKSl7RWkmJnlpPDExJiYyNz09ZS5rZXlDb2RlJiYoZS5yZXR1cm5WYWx1ZT0hMSk7dmFyIG49ZS5rZXlDb2RlO3QuZGlzcGxheS5zaGlmdD0xNj09bnx8ZS5zaGlmdEtleTt2YXIgcj1Pcyh0LGUpO0NpJiYoWWE9cj9uOm51bGwsIXImJjg4PT1uJiYhaWEmJihEaT9lLm1ldGFLZXk6ZS5jdHJsS2V5KSYmdC5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpKSwxOCE9bnx8L1xiQ29kZU1pcnJvci1jcm9zc2hhaXJcYi8udGVzdCh0LmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpfHxqcyh0KX19ZnVuY3Rpb24ganMoZSl7ZnVuY3Rpb24gdChlKXsxOCE9ZS5rZXlDb2RlJiZlLmFsdEtleXx8KEhpKG4sIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIiksU2UoZG9jdW1lbnQsImtleXVwIix0KSxTZShkb2N1bWVudCwibW91c2VvdmVyIix0KSl9dmFyIG49ZS5kaXNwbGF5LmxpbmVEaXY7YShuLCJDb2RlTWlycm9yLWNyb3NzaGFpciIpLG5hKGRvY3VtZW50LCJrZXl1cCIsdCksbmEoZG9jdW1lbnQsIm1vdXNlb3ZlciIsdCl9ZnVuY3Rpb24geHMoZSl7MTY9PWUua2V5Q29kZSYmKHRoaXMuZG9jLnNlbC5zaGlmdD0hMSksamUodGhpcyxlKX1mdW5jdGlvbiBMcyhlKXt2YXIgdD10aGlzO2lmKCEoUHQodC5kaXNwbGF5LGUpfHxqZSh0LGUpfHxlLmN0cmxLZXkmJiFlLmFsdEtleXx8RGkmJmUubWV0YUtleSkpe3ZhciBuPWUua2V5Q29kZSxyPWUuY2hhckNvZGU7aWYoQ2kmJm49PVlhKXJldHVybiBZYT1udWxsLHZvaWQgd2UoZSk7aWYoIUNpfHxlLndoaWNoJiYhKGUud2hpY2g8MTApfHwhT3ModCxlKSl7dmFyIG89U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1yP246cik7IlxiIiE9byYmKFNzKHQsZSxvKXx8dC5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSkpfX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgbj0rbmV3IERhdGU7cmV0dXJuIFhhJiZYYS5jb21wYXJlKG4sZSx0KT8oS2E9WGE9bnVsbCwidHJpcGxlIik6S2EmJkthLmNvbXBhcmUobixlLHQpPyhYYT1uZXcgcWEobixlLHQpLEthPW51bGwsImRvdWJsZSIpOihLYT1uZXcgcWEobixlLHQpLFhhPW51bGwsInNpbmdsZSIpfWZ1bmN0aW9uIHdzKGUpe3ZhciB0PXRoaXMsbj10LmRpc3BsYXk7aWYoIShqZSh0LGUpfHxuLmFjdGl2ZVRvdWNoJiZuLmlucHV0LnN1cHBvcnRzVG91Y2goKSkpe2lmKG4uaW5wdXQuZW5zdXJlUG9sbGVkKCksbi5zaGlmdD1lLnNoaWZ0S2V5LFB0KG4sZSkpcmV0dXJuIHZvaWQodml8fChuLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSk7aWYoIVVzKHQsZSkpe3ZhciByPVNuKHQsZSksbz1OZShlKSxzPXI/RHMocixvKToic2luZ2xlIjt3aW5kb3cuZm9jdXMoKSwxPT1vJiZ0LnN0YXRlLnNlbGVjdGluZ1RleHQmJnQuc3RhdGUuc2VsZWN0aW5nVGV4dChlKSxyJiZNcyh0LG8scixzLGUpfHwoMT09bz9yP0lzKHQscixzLGUpOlBlKGUpPT1uLnNjcm9sbGVyJiZ3ZShlKToyPT1vPyhyJiZobyh0LmRvYyxyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uaW5wdXQuZm9jdXMoKX0sMjApKTozPT1vJiYoTmk/dC5kaXNwbGF5LmlucHV0Lm9uQ29udGV4dE1lbnUoZSk6SW4odCkpKX19fWZ1bmN0aW9uIE1zKGUsdCxuLHIsbyl7dmFyIHM9IkNsaWNrIjtyZXR1cm4iZG91YmxlIj09cj9zPSJEb3VibGUiK3M6InRyaXBsZSI9PXImJihzPSJUcmlwbGUiK3MpLHM9KDE9PXQ/IkxlZnQiOjI9PXQ/Ik1pZGRsZSI6IlJpZ2h0IikrcyxBcyhlLGNzKHMsbyksbyxmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVZhW3RdKSwhdClyZXR1cm4hMTt2YXIgcj0hMTt0cnl7ZS5pc1JlYWRPbmx5KCkmJihlLnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHI9dChlLG4pIT1WaX1maW5hbGx5e2Uuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gcn0pfWZ1bmN0aW9uIGtzKGUsdCxuKXt2YXIgcj1lLmdldE9wdGlvbigiY29uZmlndXJlTW91c2UiKSxvPXI/cihlLHQsbik6e307aWYobnVsbD09by51bml0KXt2YXIgcz13aT9uLnNoaWZ0S2V5JiZuLm1ldGFLZXk6bi5hbHRLZXk7by51bml0PXM/InJlY3RhbmdsZSI6InNpbmdsZSI9PXQ/ImNoYXIiOiJkb3VibGUiPT10PyJ3b3JkIjoibGluZSJ9cmV0dXJuKG51bGw9PW8uZXh0ZW5kfHxlLmRvYy5leHRlbmQpJiYoby5leHRlbmQ9ZS5kb2MuZXh0ZW5kfHxuLnNoaWZ0S2V5KSxudWxsPT1vLmFkZE5ldyYmKG8uYWRkTmV3PURpP24ubWV0YUtleTpuLmN0cmxLZXkpLG51bGw9PW8ubW92ZU9uRHJhZyYmKG8ubW92ZU9uRHJhZz0hKERpP24uYWx0S2V5Om4uY3RybEtleSkpLG99ZnVuY3Rpb24gSXMoZSx0LG4scil7RWk/c2V0VGltZW91dCh1KGtuLGUpLDApOmUuY3VyT3AuZm9jdXM9aSgpO3ZhciBvLHM9a3MoZSxuLHIpLGE9ZS5kb2Muc2VsO2Uub3B0aW9ucy5kcmFnRHJvcCYmcmEmJiFlLmlzUmVhZE9ubHkoKSYmInNpbmdsZSI9PW4mJihvPWEuY29udGFpbnModCkpPi0xJiYoUCgobz1hLnJhbmdlc1tvXSkuZnJvbSgpLHQpPDB8fHQueFJlbD4wKSYmKFAoby50bygpLHQpPjB8fHQueFJlbDwwKT9QcyhlLHIsdCxzKTpIcyhlLHIsdCxzKX1mdW5jdGlvbiBQcyhlLHQsbixyKXt2YXIgbz1lLmRpc3BsYXkscz0hMSxpPW1yKGUsZnVuY3Rpb24odCl7dmkmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksZS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsU2Uoby53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNldXAiLGkpLFNlKG8ud3JhcHBlci5vd25lckRvY3VtZW50LCJtb3VzZW1vdmUiLGEpLFNlKG8uc2Nyb2xsZXIsImRyYWdzdGFydCIsbCksU2Uoby5zY3JvbGxlciwiZHJvcCIsaSksc3x8KHdlKHQpLHIuYWRkTmV3fHxobyhlLmRvYyxuLG51bGwsbnVsbCxyLmV4dGVuZCksdml8fEVpJiY5PT15aT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by53cmFwcGVyLm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cygpLG8uaW5wdXQuZm9jdXMoKX0sMjApOm8uaW5wdXQuZm9jdXMoKSl9KSxhPWZ1bmN0aW9uKGUpe3M9c3x8TWF0aC5hYnModC5jbGllbnRYLWUuY2xpZW50WCkrTWF0aC5hYnModC5jbGllbnRZLWUuY2xpZW50WSk+PTEwfSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHM9ITB9O3ZpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGUuc3RhdGUuZHJhZ2dpbmdUZXh0PWksaS5jb3B5PSFyLm1vdmVPbkRyYWcsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLG5hKG8ud3JhcHBlci5vd25lckRvY3VtZW50LCJtb3VzZXVwIixpKSxuYShvLndyYXBwZXIub3duZXJEb2N1bWVudCwibW91c2Vtb3ZlIixhKSxuYShvLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGwpLG5hKG8uc2Nyb2xsZXIsImRyb3AiLGkpLEluKGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gby5pbnB1dC5mb2N1cygpfSwyMCl9ZnVuY3Rpb24gTnMoZSx0LG4pe2lmKCJjaGFyIj09bilyZXR1cm4gbmV3IExhKHQsdCk7aWYoIndvcmQiPT1uKXJldHVybiBlLmZpbmRXb3JkQXQodCk7aWYoImxpbmUiPT1uKXJldHVybiBuZXcgTGEoSSh0LmxpbmUsMCksRyhlLmRvYyxJKHQubGluZSsxLDApKSk7dmFyIHI9bihlLHQpO3JldHVybiBuZXcgTGEoci5mcm9tLHIudG8pfWZ1bmN0aW9uIEhzKGUsdCxuLHIpe2Z1bmN0aW9uIG8odCl7aWYoMCE9UChnLHQpKWlmKGc9dCwicmVjdGFuZ2xlIj09ci51bml0KXtmb3IodmFyIG89W10scz1lLm9wdGlvbnMudGFiU2l6ZSxpPWQoUih1LG4ubGluZSkudGV4dCxuLmNoLHMpLGE9ZChSKHUsdC5saW5lKS50ZXh0LHQuY2gscyksbD1NYXRoLm1pbihpLGEpLG09TWF0aC5tYXgoaSxhKSxoPU1hdGgubWluKG4ubGluZSx0LmxpbmUpLGI9TWF0aC5taW4oZS5sYXN0TGluZSgpLE1hdGgubWF4KG4ubGluZSx0LmxpbmUpKTtoPD1iO2grKyl7dmFyIEU9Uih1LGgpLnRleHQseT1wKEUsbCxzKTtsPT1tP28ucHVzaChuZXcgTGEoSShoLHkpLEkoaCx5KSkpOkUubGVuZ3RoPnkmJm8ucHVzaChuZXcgTGEoSShoLHkpLEkoaCxwKEUsbSxzKSkpKX1vLmxlbmd0aHx8by5wdXNoKG5ldyBMYShuLG4pKSxUbyh1LEJyKGUsZi5yYW5nZXMuc2xpY2UoMCxfKS5jb25jYXQobyksXykse29yaWdpbjoiKm1vdXNlIixzY3JvbGw6ITF9KSxlLnNjcm9sbEludG9WaWV3KHQpfWVsc2V7dmFyIHYsVD1jLEE9TnMoZSx0LHIudW5pdCksQz1ULmFuY2hvcjtQKEEuYW5jaG9yLEMpPjA/KHY9QS5oZWFkLEM9QihULmZyb20oKSxBLmFuY2hvcikpOih2PUEuYW5jaG9yLEM9RihULnRvKCksQS5oZWFkKSk7dmFyIE89Zi5yYW5nZXMuc2xpY2UoMCk7T1tfXT1GcyhlLG5ldyBMYShHKHUsQyksdikpLFRvKHUsQnIoZSxPLF8pLFlpKX19ZnVuY3Rpb24gcyh0KXt2YXIgbj0rK0UsYT1TbihlLHQsITAsInJlY3RhbmdsZSI9PXIudW5pdCk7aWYoYSlpZigwIT1QKGEsZykpe2UuY3VyT3AuZm9jdXM9aSgpLG8oYSk7dmFyIGM9Qm4obCx1KTsoYS5saW5lPj1jLnRvfHxhLmxpbmU8Yy5mcm9tKSYmc2V0VGltZW91dChtcihlLGZ1bmN0aW9uKCl7RT09biYmcyh0KX0pLDE1MCl9ZWxzZXt2YXIgZD10LmNsaWVudFk8Yi50b3A/LTIwOnQuY2xpZW50WT5iLmJvdHRvbT8yMDowO2QmJnNldFRpbWVvdXQobXIoZSxmdW5jdGlvbigpe0U9PW4mJihsLnNjcm9sbGVyLnNjcm9sbFRvcCs9ZCxzKHQpKX0pLDUwKX19ZnVuY3Rpb24gYSh0KXtlLnN0YXRlLnNlbGVjdGluZ1RleHQ9ITEsRT0xLzAsd2UodCksbC5pbnB1dC5mb2N1cygpLFNlKGwud3JhcHBlci5vd25lckRvY3VtZW50LCJtb3VzZW1vdmUiLHkpLFNlKGwud3JhcHBlci5vd25lckRvY3VtZW50LCJtb3VzZXVwIix2KSx1Lmhpc3RvcnkubGFzdFNlbE9yaWdpbj1udWxsfXZhciBsPWUuZGlzcGxheSx1PWUuZG9jO3dlKHQpO3ZhciBjLF8sZj11LnNlbCxtPWYucmFuZ2VzO2lmKHIuYWRkTmV3JiYhci5leHRlbmQ/KF89dS5zZWwuY29udGFpbnMobiksYz1fPi0xP21bX106bmV3IExhKG4sbikpOihjPXUuc2VsLnByaW1hcnkoKSxfPXUuc2VsLnByaW1JbmRleCksInJlY3RhbmdsZSI9PXIudW5pdClyLmFkZE5ld3x8KGM9bmV3IExhKG4sbikpLG49U24oZSx0LCEwLCEwKSxfPS0xO2Vsc2V7dmFyIGg9TnMoZSxuLHIudW5pdCk7Yz1yLmV4dGVuZD9tbyhjLGguYW5jaG9yLGguaGVhZCxyLmV4dGVuZCk6aH1yLmFkZE5ldz8tMT09Xz8oXz1tLmxlbmd0aCxUbyh1LEJyKGUsbS5jb25jYXQoW2NdKSxfKSx7c2Nyb2xsOiExLG9yaWdpbjoiKm1vdXNlIn0pKTptLmxlbmd0aD4xJiZtW19dLmVtcHR5KCkmJiJjaGFyIj09ci51bml0JiYhci5leHRlbmQ/KFRvKHUsQnIoZSxtLnNsaWNlKDAsXykuY29uY2F0KG0uc2xpY2UoXysxKSksMCkse3Njcm9sbDohMSxvcmlnaW46Iiptb3VzZSJ9KSxmPXUuc2VsKTpibyh1LF8sYyxZaSk6KF89MCxUbyh1LG5ldyB4YShbY10sMCksWWkpLGY9dS5zZWwpO3ZhciBnPW4sYj1sLndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRT0wLHk9bXIoZSxmdW5jdGlvbihlKXswIT09ZS5idXR0b25zJiZOZShlKT9zKGUpOmEoZSl9KSx2PW1yKGUsYSk7ZS5zdGF0ZS5zZWxlY3RpbmdUZXh0PXYsbmEobC53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNlbW92ZSIseSksbmEobC53cmFwcGVyLm93bmVyRG9jdW1lbnQsIm1vdXNldXAiLHYpfWZ1bmN0aW9uIEZzKGUsdCl7dmFyIG49dC5hbmNob3Iscj10LmhlYWQsbz1SKGUuZG9jLG4ubGluZSk7aWYoMD09UChuLHIpJiZuLnN0aWNreT09ci5zdGlja3kpcmV0dXJuIHQ7dmFyIHM9Q2Uobyk7aWYoIXMpcmV0dXJuIHQ7dmFyIGk9QWUocyxuLmNoLG4uc3RpY2t5KSxhPXNbaV07aWYoYS5mcm9tIT1uLmNoJiZhLnRvIT1uLmNoKXJldHVybiB0O3ZhciBsPWkrKGEuZnJvbT09bi5jaD09KDEhPWEubGV2ZWwpPzA6MSk7aWYoMD09bHx8bD09cy5sZW5ndGgpcmV0dXJuIHQ7dmFyIHU7aWYoci5saW5lIT1uLmxpbmUpdT0oci5saW5lLW4ubGluZSkqKCJsdHIiPT1lLmRvYy5kaXJlY3Rpb24/MTotMSk+MDtlbHNle3ZhciBjPUFlKHMsci5jaCxyLnN0aWNreSksZD1jLWl8fChyLmNoLW4uY2gpKigxPT1hLmxldmVsPy0xOjEpO3U9Yz09bC0xfHxjPT1sP2Q8MDpkPjB9dmFyIF89c1tsKyh1Py0xOjApXSxwPXU9PSgxPT1fLmxldmVsKSxmPXA/Xy5mcm9tOl8udG8sbT1wPyJhZnRlciI6ImJlZm9yZSI7cmV0dXJuIG4uY2g9PWYmJm4uc3RpY2t5PT1tP3Q6bmV3IExhKG5ldyBJKG4ubGluZSxmLG0pLHIpfWZ1bmN0aW9uIEJzKGUsdCxuLHIpe3ZhciBvLHM7aWYodC50b3VjaGVzKW89dC50b3VjaGVzWzBdLmNsaWVudFgscz10LnRvdWNoZXNbMF0uY2xpZW50WTtlbHNlIHRyeXtvPXQuY2xpZW50WCxzPXQuY2xpZW50WX1jYXRjaCh0KXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGUuZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSlyZXR1cm4hMTtyJiZ3ZSh0KTt2YXIgaT1lLmRpc3BsYXksYT1pLmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYocz5hLmJvdHRvbXx8IUxlKGUsbikpcmV0dXJuIGtlKHQpO3MtPWEudG9wLWkudmlld09mZnNldDtmb3IodmFyIGw9MDtsPGUub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsrK2wpe3ZhciB1PWkuZ3V0dGVycy5jaGlsZE5vZGVzW2xdO2lmKHUmJnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PW8pe3JldHVybiBSZShlLG4sZSx3KGUuZG9jLHMpLGUub3B0aW9ucy5ndXR0ZXJzW2xdLHQpLGtlKHQpfX19ZnVuY3Rpb24gVXMoZSx0KXtyZXR1cm4gQnMoZSx0LCJndXR0ZXJDbGljayIsITApfWZ1bmN0aW9uIEdzKGUsdCl7UHQoZS5kaXNwbGF5LHQpfHx6cyhlLHQpfHxqZShlLHQsImNvbnRleHRtZW51Iil8fE5pfHxlLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudSh0KX1mdW5jdGlvbiB6cyhlLHQpe3JldHVybiEhTGUoZSwiZ3V0dGVyQ29udGV4dE1lbnUiKSYmQnMoZSx0LCJndXR0ZXJDb250ZXh0TWVudSIsITEpfWZ1bmN0aW9uIFZzKGUpe2UuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT1lLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cUysvZywiIikrZS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxzKi9nLCIgY20tcy0iKSxubihlKX1mdW5jdGlvbiBXcyhlKXtJcihlKSxicihlKSxVbihlKX1mdW5jdGlvbiBZcyhlLHQsbil7aWYoIXQhPSEobiYmbiE9JGEpKXt2YXIgcj1lLmRpc3BsYXkuZHJhZ0Z1bmN0aW9ucyxvPXQ/bmE6U2U7byhlLmRpc3BsYXkuc2Nyb2xsZXIsImRyYWdzdGFydCIsci5zdGFydCksbyhlLmRpc3BsYXkuc2Nyb2xsZXIsImRyYWdlbnRlciIsci5lbnRlciksbyhlLmRpc3BsYXkuc2Nyb2xsZXIsImRyYWdvdmVyIixyLm92ZXIpLG8oZS5kaXNwbGF5LnNjcm9sbGVyLCJkcmFnbGVhdmUiLHIubGVhdmUpLG8oZS5kaXNwbGF5LnNjcm9sbGVyLCJkcm9wIixyLmRyb3ApfX1mdW5jdGlvbiBxcyhlKXtlLm9wdGlvbnMubGluZVdyYXBwaW5nPyhhKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLXdyYXAiKSxlLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIsZS5kaXNwbGF5LnNpemVyV2lkdGg9bnVsbCk6KEhpKGUuZGlzcGxheS53cmFwcGVyLCJDb2RlTWlycm9yLXdyYXAiKSx2ZShlKSksT24oZSksYnIoZSksbm4oZSksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBycihlKX0sMTAwKX1mdW5jdGlvbiBLcyhlLHQpe3ZhciBuPXRoaXM7aWYoISh0aGlzIGluc3RhbmNlb2YgS3MpKXJldHVybiBuZXcgS3MoZSx0KTt0aGlzLm9wdGlvbnM9dD10P2ModCk6e30sYyhRYSx0LCExKSxQcih0KTt2YXIgcj10LnZhbHVlOyJzdHJpbmciPT10eXBlb2Ygcj9yPW5ldyBQYShyLHQubW9kZSxudWxsLHQubGluZVNlcGFyYXRvcix0LmRpcmVjdGlvbik6dC5tb2RlJiYoci5tb2RlT3B0aW9uPXQubW9kZSksdGhpcy5kb2M9cjt2YXIgbz1uZXcgS3MuaW5wdXRTdHlsZXNbdC5pbnB1dFN0eWxlXSh0aGlzKSxzPXRoaXMuZGlzcGxheT1uZXcgUyhlLHIsbyk7cy53cmFwcGVyLkNvZGVNaXJyb3I9dGhpcyxJcih0aGlzKSxWcyh0aGlzKSx0LmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLXdyYXAiKSxzcih0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZGVsYXlpbmdCbHVyRXZlbnQ6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6LTEsY3V0SW5jb21pbmc6LTEsc2VsZWN0aW5nVGV4dDohMSxkcmFnZ2luZ1RleHQ6ITEsaGlnaGxpZ2h0Om5ldyBCaSxrZXlTZXE6bnVsbCxzcGVjaWFsQ2hhcnM6bnVsbH0sdC5hdXRvZm9jdXMmJiFMaSYmcy5pbnB1dC5mb2N1cygpLEVpJiZ5aTwxMSYmc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLmRpc3BsYXkuaW5wdXQucmVzZXQoITApfSwyMCksWHModGhpcykscnMoKSxpcih0aGlzKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwLEpyKHRoaXMsciksdC5hdXRvZm9jdXMmJiFMaXx8dGhpcy5oYXNGb2N1cygpP3NldFRpbWVvdXQodShQbix0aGlzKSwyMCk6Tm4odGhpcyk7Zm9yKHZhciBpIGluIEphKUphLmhhc093blByb3BlcnR5KGkpJiZKYVtpXShuLHRbaV0sJGEpO0duKHRoaXMpLHQuZmluaXNoSW5pdCYmdC5maW5pc2hJbml0KHRoaXMpO2Zvcih2YXIgYT0wO2E8WmEubGVuZ3RoOysrYSlaYVthXShuKTthcih0aGlzKSx2aSYmdC5saW5lV3JhcHBpbmcmJiJvcHRpbWl6ZWxlZ2liaWxpdHkiPT1nZXRDb21wdXRlZFN0eWxlKHMubGluZURpdikudGV4dFJlbmRlcmluZyYmKHMubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5nPSJhdXRvIil9ZnVuY3Rpb24gWHMoZSl7ZnVuY3Rpb24gdCgpe28uYWN0aXZlVG91Y2gmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gby5hY3RpdmVUb3VjaD1udWxsfSwxZTMpLGk9by5hY3RpdmVUb3VjaCxpLmVuZD0rbmV3IERhdGUpfWZ1bmN0aW9uIG4oZSl7aWYoMSE9ZS50b3VjaGVzLmxlbmd0aClyZXR1cm4hMTt2YXIgdD1lLnRvdWNoZXNbMF07cmV0dXJuIHQucmFkaXVzWDw9MSYmdC5yYWRpdXNZPD0xfWZ1bmN0aW9uIHIoZSx0KXtpZihudWxsPT10LmxlZnQpcmV0dXJuITA7dmFyIG49dC5sZWZ0LWUubGVmdCxyPXQudG9wLWUudG9wO3JldHVybiBuKm4rcipyPjQwMH12YXIgbz1lLmRpc3BsYXk7bmEoby5zY3JvbGxlciwibW91c2Vkb3duIixtcihlLHdzKSksRWkmJnlpPDExP25hKG8uc2Nyb2xsZXIsImRibGNsaWNrIixtcihlLGZ1bmN0aW9uKHQpe2lmKCFqZShlLHQpKXt2YXIgbj1TbihlLHQpO2lmKG4mJiFVcyhlLHQpJiYhUHQoZS5kaXNwbGF5LHQpKXt3ZSh0KTt2YXIgcj1lLmZpbmRXb3JkQXQobik7aG8oZS5kb2Msci5hbmNob3Isci5oZWFkKX19fSkpOm5hKG8uc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbih0KXtyZXR1cm4gamUoZSx0KXx8d2UodCl9KSxuYShvLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIEdzKGUsdCl9KTt2YXIgcyxpPXtlbmQ6MH07bmEoby5zY3JvbGxlciwidG91Y2hzdGFydCIsZnVuY3Rpb24odCl7aWYoIWplKGUsdCkmJiFuKHQpJiYhVXMoZSx0KSl7by5pbnB1dC5lbnN1cmVQb2xsZWQoKSxjbGVhclRpbWVvdXQocyk7dmFyIHI9K25ldyBEYXRlO28uYWN0aXZlVG91Y2g9e3N0YXJ0OnIsbW92ZWQ6ITEscHJldjpyLWkuZW5kPD0zMDA/aTpudWxsfSwxPT10LnRvdWNoZXMubGVuZ3RoJiYoby5hY3RpdmVUb3VjaC5sZWZ0PXQudG91Y2hlc1swXS5wYWdlWCxvLmFjdGl2ZVRvdWNoLnRvcD10LnRvdWNoZXNbMF0ucGFnZVkpfX0pLG5hKG8uc2Nyb2xsZXIsInRvdWNobW92ZSIsZnVuY3Rpb24oKXtvLmFjdGl2ZVRvdWNoJiYoby5hY3RpdmVUb3VjaC5tb3ZlZD0hMCl9KSxuYShvLnNjcm9sbGVyLCJ0b3VjaGVuZCIsZnVuY3Rpb24obil7dmFyIHM9by5hY3RpdmVUb3VjaDtpZihzJiYhUHQobyxuKSYmbnVsbCE9cy5sZWZ0JiYhcy5tb3ZlZCYmbmV3IERhdGUtcy5zdGFydDwzMDApe3ZhciBpLGE9ZS5jb29yZHNDaGFyKG8uYWN0aXZlVG91Y2gsInBhZ2UiKTtpPSFzLnByZXZ8fHIocyxzLnByZXYpP25ldyBMYShhLGEpOiFzLnByZXYucHJldnx8cihzLHMucHJldi5wcmV2KT9lLmZpbmRXb3JkQXQoYSk6bmV3IExhKEkoYS5saW5lLDApLEcoZS5kb2MsSShhLmxpbmUrMSwwKSkpLGUuc2V0U2VsZWN0aW9uKGkuYW5jaG9yLGkuaGVhZCksZS5mb2N1cygpLHdlKG4pfXQoKX0pLG5hKG8uc2Nyb2xsZXIsInRvdWNoY2FuY2VsIix0KSxuYShvLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7by5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihabihlLG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKSx0cihlLG8uc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksUmUoZSwic2Nyb2xsIixlKSl9KSxuYShvLnNjcm9sbGVyLCJtb3VzZXdoZWVsIixmdW5jdGlvbih0KXtyZXR1cm4gRnIoZSx0KX0pLG5hKG8uc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbih0KXtyZXR1cm4gRnIoZSx0KX0pLG5hKG8ud3JhcHBlciwic2Nyb2xsIixmdW5jdGlvbigpe3JldHVybiBvLndyYXBwZXIuc2Nyb2xsVG9wPW8ud3JhcHBlci5zY3JvbGxMZWZ0PTB9KSxvLmRyYWdGdW5jdGlvbnM9e2VudGVyOmZ1bmN0aW9uKHQpe2plKGUsdCl8fEllKHQpfSxvdmVyOmZ1bmN0aW9uKHQpe2plKGUsdCl8fChlcyhlLHQpLEllKHQpKX0sc3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIFpvKGUsdCl9LGRyb3A6bXIoZSxKbyksbGVhdmU6ZnVuY3Rpb24odCl7amUoZSx0KXx8dHMoZSl9fTt2YXIgYT1vLmlucHV0LmdldEZpZWxkKCk7bmEoYSwia2V5dXAiLGZ1bmN0aW9uKHQpe3JldHVybiB4cy5jYWxsKGUsdCl9KSxuYShhLCJrZXlkb3duIixtcihlLFJzKSksbmEoYSwia2V5cHJlc3MiLG1yKGUsTHMpKSxuYShhLCJmb2N1cyIsZnVuY3Rpb24odCl7cmV0dXJuIFBuKGUsdCl9KSxuYShhLCJibHVyIixmdW5jdGlvbih0KXtyZXR1cm4gTm4oZSx0KX0pfWZ1bmN0aW9uICRzKGUsdCxuLHIpe3ZhciBvLHM9ZS5kb2M7bnVsbD09biYmKG49ImFkZCIpLCJzbWFydCI9PW4mJihzLm1vZGUuaW5kZW50P289UWUoZSx0KS5zdGF0ZTpuPSJwcmV2Iik7dmFyIGk9ZS5vcHRpb25zLnRhYlNpemUsYT1SKHMsdCksbD1kKGEudGV4dCxudWxsLGkpO2Euc3RhdGVBZnRlciYmKGEuc3RhdGVBZnRlcj1udWxsKTt2YXIgdSxjPWEudGV4dC5tYXRjaCgvXlxzKi8pWzBdO2lmKHJ8fC9cUy8udGVzdChhLnRleHQpKXtpZigic21hcnQiPT1uJiYoKHU9cy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSk9PVZpfHx1PjE1MCkpe2lmKCFyKXJldHVybjtuPSJwcmV2In19ZWxzZSB1PTAsbj0ibm90IjsicHJldiI9PW4/dT10PnMuZmlyc3Q/ZChSKHMsdC0xKS50ZXh0LG51bGwsaSk6MDoiYWRkIj09bj91PWwrZS5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09bj91PWwtZS5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiBuJiYodT1sK24pLHU9TWF0aC5tYXgoMCx1KTt2YXIgXz0iIixwPTA7aWYoZS5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgbT1NYXRoLmZsb29yKHUvaSk7bTstLW0pcCs9aSxfKz0iXHQiO2lmKHA8dSYmKF8rPWYodS1wKSksXyE9YylyZXR1cm4gSG8ocyxfLEkodCwwKSxJKHQsYy5sZW5ndGgpLCIraW5wdXQiKSxhLnN0YXRlQWZ0ZXI9bnVsbCwhMDtmb3IodmFyIGg9MDtoPHMuc2VsLnJhbmdlcy5sZW5ndGg7aCsrKXt2YXIgZz1zLnNlbC5yYW5nZXNbaF07aWYoZy5oZWFkLmxpbmU9PXQmJmcuaGVhZC5jaDxjLmxlbmd0aCl7dmFyIGI9SSh0LGMubGVuZ3RoKTtibyhzLGgsbmV3IExhKGIsYikpO2JyZWFrfX19ZnVuY3Rpb24gUXMoZSl7ZWw9ZX1mdW5jdGlvbiBKcyhlLHQsbixyLG8pe3ZhciBzPWUuZG9jO2UuZGlzcGxheS5zaGlmdD0hMSxyfHwocj1zLnNlbCk7dmFyIGk9K25ldyBEYXRlLTIwMCxhPSJwYXN0ZSI9PW98fGUuc3RhdGUucGFzdGVJbmNvbWluZz5pLGw9b2EodCksdT1udWxsO2lmKGEmJnIucmFuZ2VzLmxlbmd0aD4xKWlmKGVsJiZlbC50ZXh0LmpvaW4oIlxuIik9PXQpe2lmKHIucmFuZ2VzLmxlbmd0aCVlbC50ZXh0Lmxlbmd0aD09MCl7dT1bXTtmb3IodmFyIGM9MDtjPGVsLnRleHQubGVuZ3RoO2MrKyl1LnB1c2gocy5zcGxpdExpbmVzKGVsLnRleHRbY10pKX19ZWxzZSBsLmxlbmd0aD09ci5yYW5nZXMubGVuZ3RoJiZlLm9wdGlvbnMucGFzdGVMaW5lc1BlclNlbGVjdGlvbiYmKHU9aChsLGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtmb3IodmFyIGQ9ZS5jdXJPcC51cGRhdGVJbnB1dCxfPXIucmFuZ2VzLmxlbmd0aC0xO18+PTA7Xy0tKXt2YXIgcD1yLnJhbmdlc1tfXSxmPXAuZnJvbSgpLGc9cC50bygpO3AuZW1wdHkoKSYmKG4mJm4+MD9mPUkoZi5saW5lLGYuY2gtbik6ZS5zdGF0ZS5vdmVyd3JpdGUmJiFhP2c9SShnLmxpbmUsTWF0aC5taW4oUihzLGcubGluZSkudGV4dC5sZW5ndGgsZy5jaCttKGwpLmxlbmd0aCkpOmEmJmVsJiZlbC5saW5lV2lzZSYmZWwudGV4dC5qb2luKCJcbiIpPT10JiYoZj1nPUkoZi5saW5lLDApKSk7dmFyIGI9e2Zyb206Zix0bzpnLHRleHQ6dT91W18ldS5sZW5ndGhdOmwsb3JpZ2luOm98fChhPyJwYXN0ZSI6ZS5zdGF0ZS5jdXRJbmNvbWluZz5pPyJjdXQiOiIraW5wdXQiKX07d28oZS5kb2MsYiksdnQoZSwiaW5wdXRSZWFkIixlLGIpfXQmJiFhJiZlaShlLHQpLEtuKGUpLGUuY3VyT3AudXBkYXRlSW5wdXQ8MiYmKGUuY3VyT3AudXBkYXRlSW5wdXQ9ZCksZS5jdXJPcC50eXBpbmc9ITAsZS5zdGF0ZS5wYXN0ZUluY29taW5nPWUuc3RhdGUuY3V0SW5jb21pbmc9LTF9ZnVuY3Rpb24gWnMoZSx0KXt2YXIgbj1lLmNsaXBib2FyZERhdGEmJmUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0Iik7aWYobilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHQuaXNSZWFkT25seSgpfHx0Lm9wdGlvbnMuZGlzYWJsZUlucHV0fHxmcih0LGZ1bmN0aW9uKCl7cmV0dXJuIEpzKHQsbiwwLG51bGwsInBhc3RlIil9KSwhMH1mdW5jdGlvbiBlaShlLHQpe2lmKGUub3B0aW9ucy5lbGVjdHJpY0NoYXJzJiZlLm9wdGlvbnMuc21hcnRJbmRlbnQpZm9yKHZhciBuPWUuZG9jLnNlbCxyPW4ucmFuZ2VzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbz1uLnJhbmdlc1tyXTtpZighKG8uaGVhZC5jaD4xMDB8fHImJm4ucmFuZ2VzW3ItMV0uaGVhZC5saW5lPT1vLmhlYWQubGluZSkpe3ZhciBzPWUuZ2V0TW9kZUF0KG8uaGVhZCksaT0hMTtpZihzLmVsZWN0cmljQ2hhcnMpe2Zvcih2YXIgYT0wO2E8cy5lbGVjdHJpY0NoYXJzLmxlbmd0aDthKyspaWYodC5pbmRleE9mKHMuZWxlY3RyaWNDaGFycy5jaGFyQXQoYSkpPi0xKXtpPSRzKGUsby5oZWFkLmxpbmUsInNtYXJ0Iik7YnJlYWt9fWVsc2Ugcy5lbGVjdHJpY0lucHV0JiZzLmVsZWN0cmljSW5wdXQudGVzdChSKGUuZG9jLG8uaGVhZC5saW5lKS50ZXh0LnNsaWNlKDAsby5oZWFkLmNoKSkmJihpPSRzKGUsby5oZWFkLmxpbmUsInNtYXJ0IikpO2kmJnZ0KGUsImVsZWN0cmljSW5wdXQiLGUsby5oZWFkLmxpbmUpfX19ZnVuY3Rpb24gdGkoZSl7Zm9yKHZhciB0PVtdLG49W10scj0wO3I8ZS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7cisrKXt2YXIgbz1lLmRvYy5zZWwucmFuZ2VzW3JdLmhlYWQubGluZSxzPXthbmNob3I6SShvLDApLGhlYWQ6SShvKzEsMCl9O24ucHVzaChzKSx0LnB1c2goZS5nZXRSYW5nZShzLmFuY2hvcixzLmhlYWQpKX1yZXR1cm57dGV4dDp0LHJhbmdlczpufX1mdW5jdGlvbiBuaShlLHQsbixyKXtlLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCEhbiksZS5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwhIXIpLGUuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwhIXQpfWZ1bmN0aW9uIHJpKCl7dmFyIGU9cigidGV4dGFyZWEiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBib3R0b206IC0xZW07IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lIiksdD1yKCJkaXYiLFtlXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpO3JldHVybiB2aT9lLnN0eWxlLndpZHRoPSIxMDAwcHgiOmUuc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksamkmJihlLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbmkoZSksdH1mdW5jdGlvbiBvaShlLHQsbixyLG8pe2Z1bmN0aW9uIHMoKXt2YXIgcj10LmxpbmUrbjtyZXR1cm4hKHI8ZS5maXJzdHx8cj49ZS5maXJzdCtlLnNpemUpJiYodD1uZXcgSShyLHQuY2gsdC5zdGlja3kpLHU9UihlLHIpKX1mdW5jdGlvbiBpKHIpe3ZhciBpO2lmKG51bGw9PShpPW8/Z3MoZS5jbSx1LHQsbik6bXModSx0LG4pKSl7aWYocnx8IXMoKSlyZXR1cm4hMTt0PWhzKG8sZS5jbSx1LHQubGluZSxuKX1lbHNlIHQ9aTtyZXR1cm4hMH12YXIgYT10LGw9bix1PVIoZSx0LmxpbmUpO2lmKCJjaGFyIj09cilpKCk7ZWxzZSBpZigiY29sdW1uIj09cilpKCEwKTtlbHNlIGlmKCJ3b3JkIj09cnx8Imdyb3VwIj09cilmb3IodmFyIGM9bnVsbCxkPSJncm91cCI9PXIsXz1lLmNtJiZlLmNtLmdldEhlbHBlcih0LCJ3b3JkQ2hhcnMiKSxwPSEwOyEobjwwKXx8aSghcCk7cD0hMSl7dmFyIGY9dS50ZXh0LmNoYXJBdCh0LmNoKXx8IlxuIixtPXYoZixfKT8idyI6ZCYmIlxuIj09Zj8ibiI6IWR8fC9ccy8udGVzdChmKT9udWxsOiJwIjtpZighZHx8cHx8bXx8KG09InMiKSxjJiZjIT1tKXtuPDAmJihuPTEsaSgpLHQuc3RpY2t5PSJhZnRlciIpO2JyZWFrfWlmKG0mJihjPW0pLG4+MCYmIWkoIXApKWJyZWFrfXZhciBoPWpvKGUsdCxhLGwsITApO3JldHVybiBOKGEsaCkmJihoLmhpdFNpZGU9ITApLGh9ZnVuY3Rpb24gc2koZSx0LG4scil7dmFyIG8scz1lLmRvYyxpPXQubGVmdDtpZigicGFnZSI9PXIpe3ZhciBhPU1hdGgubWluKGUuZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLGw9TWF0aC5tYXgoYS0uNSp5bihlLmRpc3BsYXkpLDMpO289KG4+MD90LmJvdHRvbTp0LnRvcCkrbipsfWVsc2UibGluZSI9PXImJihvPW4+MD90LmJvdHRvbSszOnQudG9wLTMpO2Zvcih2YXIgdTt1PXBuKGUsaSxvKSx1Lm91dHNpZGU7KXtpZihuPDA/bzw9MDpvPj1zLmhlaWdodCl7dS5oaXRTaWRlPSEwO2JyZWFrfW8rPTUqbn1yZXR1cm4gdX1mdW5jdGlvbiBpaShlLHQpe3ZhciBuPXF0KGUsdC5saW5lKTtpZighbnx8bi5oaWRkZW4pcmV0dXJuIG51bGw7dmFyIHI9UihlLmRvYyx0LmxpbmUpLG89VnQobixyLHQubGluZSkscz1DZShyLGUuZG9jLmRpcmVjdGlvbiksaT0ibGVmdCI7aWYocyl7aT1BZShzLHQuY2gpJTI/InJpZ2h0IjoibGVmdCJ9dmFyIGE9JHQoby5tYXAsdC5jaCxpKTtyZXR1cm4gYS5vZmZzZXQ9InJpZ2h0Ij09YS5jb2xsYXBzZT9hLmVuZDphLnN0YXJ0LGF9ZnVuY3Rpb24gYWkoZSl7Zm9yKHZhciB0PWU7dDt0PXQucGFyZW50Tm9kZSlpZigvQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlci8udGVzdCh0LmNsYXNzTmFtZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gdCYmKGUuYmFkPSEwKSxlfWZ1bmN0aW9uIHVpKGUsdCxuLHIsbyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PWV9fWZ1bmN0aW9uIGkoKXtjJiYodSs9ZCxfJiYodSs9ZCksYz1fPSExKX1mdW5jdGlvbiBhKGUpe2UmJihpKCksdSs9ZSl9ZnVuY3Rpb24gbCh0KXtpZigxPT10Lm5vZGVUeXBlKXt2YXIgbj10LmdldEF0dHJpYnV0ZSgiY20tdGV4dCIpO2lmKG4pcmV0dXJuIHZvaWQgYShuKTt2YXIgdSxwPXQuZ2V0QXR0cmlidXRlKCJjbS1tYXJrZXIiKTtpZihwKXt2YXIgZj1lLmZpbmRNYXJrcyhJKHIsMCksSShvKzEsMCkscygrcCkpO3JldHVybiB2b2lkKGYubGVuZ3RoJiYodT1mWzBdLmZpbmQoMCkpJiZhKGooZS5kb2MsdS5mcm9tLHUudG8pLmpvaW4oZCkpKX1pZigiZmFsc2UiPT10LmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuO3ZhciBtPS9eKHByZXxkaXZ8cHxsaXx0YWJsZXxicikkL2kudGVzdCh0Lm5vZGVOYW1lKTtpZighL15iciQvaS50ZXN0KHQubm9kZU5hbWUpJiYwPT10LnRleHRDb250ZW50Lmxlbmd0aClyZXR1cm47bSYmaSgpO2Zvcih2YXIgaD0wO2g8dC5jaGlsZE5vZGVzLmxlbmd0aDtoKyspbCh0LmNoaWxkTm9kZXNbaF0pOy9eKHByZXxwKSQvaS50ZXN0KHQubm9kZU5hbWUpJiYoXz0hMCksbSYmKGM9ITApfWVsc2UgMz09dC5ub2RlVHlwZSYmYSh0Lm5vZGVWYWx1ZS5yZXBsYWNlKC9cdTIwMGIvZywiIikucmVwbGFjZSgvXHUwMGEwL2csIiAiKSl9Zm9yKHZhciB1PSIiLGM9ITEsZD1lLmRvYy5saW5lU2VwYXJhdG9yKCksXz0hMTtsKHQpLHQhPW47KXQ9dC5uZXh0U2libGluZyxfPSExO3JldHVybiB1fWZ1bmN0aW9uIGNpKGUsdCxuKXt2YXIgcjtpZih0PT1lLmRpc3BsYXkubGluZURpdil7aWYoIShyPWUuZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbbl0pKXJldHVybiBsaShlLmNsaXBQb3MoSShlLmRpc3BsYXkudmlld1RvLTEpKSwhMCk7dD1udWxsLG49MH1lbHNlIGZvcihyPXQ7O3I9ci5wYXJlbnROb2RlKXtpZighcnx8cj09ZS5kaXNwbGF5LmxpbmVEaXYpcmV0dXJuIG51bGw7aWYoci5wYXJlbnROb2RlJiZyLnBhcmVudE5vZGU9PWUuZGlzcGxheS5saW5lRGl2KWJyZWFrfWZvcih2YXIgbz0wO288ZS5kaXNwbGF5LnZpZXcubGVuZ3RoO28rKyl7dmFyIHM9ZS5kaXNwbGF5LnZpZXdbb107aWYocy5ub2RlPT1yKXJldHVybiBkaShzLHQsbil9fWZ1bmN0aW9uIGRpKGUsdCxuKXtmdW5jdGlvbiByKHQsbixyKXtmb3IodmFyIG89LTE7bzwoZD9kLmxlbmd0aDowKTtvKyspZm9yKHZhciBzPW88MD9jLm1hcDpkW29dLGk9MDtpPHMubGVuZ3RoO2krPTMpe3ZhciBhPXNbaSsyXTtpZihhPT10fHxhPT1uKXt2YXIgbD1EKG88MD9lLmxpbmU6ZS5yZXN0W29dKSx1PXNbaV0rcjtyZXR1cm4ocjwwfHxhIT10KSYmKHU9c1tpKyhyPzE6MCldKSxJKGwsdSl9fX12YXIgbz1lLnRleHQuZmlyc3RDaGlsZCxpPSExO2lmKCF0fHwhcyhvLHQpKXJldHVybiBsaShJKEQoZS5saW5lKSwwKSwhMCk7aWYodD09byYmKGk9ITAsdD1vLmNoaWxkTm9kZXNbbl0sbj0wLCF0KSl7dmFyIGE9ZS5yZXN0P20oZS5yZXN0KTplLmxpbmU7cmV0dXJuIGxpKEkoRChhKSxhLnRleHQubGVuZ3RoKSxpKX12YXIgbD0zPT10Lm5vZGVUeXBlP3Q6bnVsbCx1PXQ7Zm9yKGx8fDEhPXQuY2hpbGROb2Rlcy5sZW5ndGh8fDMhPXQuZmlyc3RDaGlsZC5ub2RlVHlwZXx8KGw9dC5maXJzdENoaWxkLG4mJihuPWwubm9kZVZhbHVlLmxlbmd0aCkpO3UucGFyZW50Tm9kZSE9bzspdT11LnBhcmVudE5vZGU7dmFyIGM9ZS5tZWFzdXJlLGQ9Yy5tYXBzLF89cihsLHUsbik7aWYoXylyZXR1cm4gbGkoXyxpKTtmb3IodmFyIHA9dS5uZXh0U2libGluZyxmPWw/bC5ub2RlVmFsdWUubGVuZ3RoLW46MDtwO3A9cC5uZXh0U2libGluZyl7aWYoXz1yKHAscC5maXJzdENoaWxkLDApKXJldHVybiBsaShJKF8ubGluZSxfLmNoLWYpLGkpO2YrPXAudGV4dENvbnRlbnQubGVuZ3RofWZvcih2YXIgaD11LnByZXZpb3VzU2libGluZyxnPW47aDtoPWgucHJldmlvdXNTaWJsaW5nKXtpZihfPXIoaCxoLmZpcnN0Q2hpbGQsLTEpKXJldHVybiBsaShJKF8ubGluZSxfLmNoK2cpLGkpO2crPWgudGV4dENvbnRlbnQubGVuZ3RofX1mdW5jdGlvbiBfaShlLHQpe2Z1bmN0aW9uIG4oKXtlLnZhbHVlPWwuZ2V0VmFsdWUoKX1pZih0PXQ/Yyh0KTp7fSx0LnZhbHVlPWUudmFsdWUsIXQudGFiaW5kZXgmJmUudGFiSW5kZXgmJih0LnRhYmluZGV4PWUudGFiSW5kZXgpLCF0LnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYodC5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT10LmF1dG9mb2N1cyl7dmFyIHI9aSgpO3QuYXV0b2ZvY3VzPXI9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmcj09ZG9jdW1lbnQuYm9keX12YXIgbztpZihlLmZvcm0mJihuYShlLmZvcm0sInN1Ym1pdCIsbiksIXQubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBzPWUuZm9ybTtvPXMuc3VibWl0O3RyeXt2YXIgYT1zLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxzLnN1Ym1pdD1vLHMuc3VibWl0KCkscy5zdWJtaXQ9YX19Y2F0Y2goZSl7fX10LmZpbmlzaEluaXQ9ZnVuY3Rpb24odCl7dC5zYXZlPW4sdC5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx0LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXt0LnRvVGV4dEFyZWE9aXNOYU4sbigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihTZShlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PW8pKX19LGUuc3R5bGUuZGlzcGxheT0ibm9uZSI7dmFyIGw9S3MoZnVuY3Rpb24odCl7cmV0dXJuIGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0sdCk7cmV0dXJuIGx9dmFyIHBpPW5hdmlnYXRvci51c2VyQWdlbnQsZmk9bmF2aWdhdG9yLnBsYXRmb3JtLG1pPS9nZWNrb1wvXGQvaS50ZXN0KHBpKSxoaT0vTVNJRSBcZC8udGVzdChwaSksZ2k9L1RyaWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4ZWMocGkpLGJpPS9FZGdlXC8oXGQrKS8uZXhlYyhwaSksRWk9aGl8fGdpfHxiaSx5aT1FaSYmKGhpP2RvY3VtZW50LmRvY3VtZW50TW9kZXx8NjorKGJpfHxnaSlbMV0pLHZpPSFiaSYmL1dlYktpdFwvLy50ZXN0KHBpKSxUaT12aSYmL1F0XC9cZCtcLlxkKy8udGVzdChwaSksQWk9IWJpJiYvQ2hyb21lXC8vLnRlc3QocGkpLENpPS9PcGVyYVwvLy50ZXN0KHBpKSxPaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksU2k9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QocGkpLFJpPS9QaGFudG9tSlMvLnRlc3QocGkpLGppPSFiaSYmL0FwcGxlV2ViS2l0Ly50ZXN0KHBpKSYmL01vYmlsZVwvXHcrLy50ZXN0KHBpKSx4aT0vQW5kcm9pZC8udGVzdChwaSksTGk9aml8fHhpfHwvd2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHBpKSxEaT1qaXx8L01hYy8udGVzdChmaSksd2k9L1xiQ3JPU1xiLy50ZXN0KHBpKSxNaT0vd2luL2kudGVzdChmaSksa2k9Q2kmJnBpLm1hdGNoKC9WZXJzaW9uXC8oXGQqXC5cZCopLyk7a2kmJihraT1OdW1iZXIoa2lbMV0pKSxraSYma2k+PTE1JiYoQ2k9ITEsdmk9ITApO3ZhciBJaSxQaT1EaSYmKFRpfHxDaSYmKG51bGw9PWtpfHxraTwxMi4xMSkpLE5pPW1pfHxFaSYmeWk+PTksSGk9ZnVuY3Rpb24odCxuKXt2YXIgcj10LmNsYXNzTmFtZSxvPWUobikuZXhlYyhyKTtpZihvKXt2YXIgcz1yLnNsaWNlKG8uaW5kZXgrb1swXS5sZW5ndGgpO3QuY2xhc3NOYW1lPXIuc2xpY2UoMCxvLmluZGV4KSsocz9vWzFdK3M6IiIpfX07SWk9ZG9jdW1lbnQuY3JlYXRlUmFuZ2U/ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gby5zZXRFbmQocnx8ZSxuKSxvLnNldFN0YXJ0KGUsdCksb306ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7dHJ5e3IubW92ZVRvRWxlbWVudFRleHQoZS5wYXJlbnROb2RlKX1jYXRjaChlKXtyZXR1cm4gcn1yZXR1cm4gci5jb2xsYXBzZSghMCksci5tb3ZlRW5kKCJjaGFyYWN0ZXIiLG4pLHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLHQpLHJ9O3ZhciBGaT1mdW5jdGlvbihlKXtlLnNlbGVjdCgpfTtqaT9GaT1mdW5jdGlvbihlKXtlLnNlbGVjdGlvblN0YXJ0PTAsZS5zZWxlY3Rpb25FbmQ9ZS52YWx1ZS5sZW5ndGh9OkVpJiYoRmk9ZnVuY3Rpb24oZSl7dHJ5e2Uuc2VsZWN0KCl9Y2F0Y2goZSl7fX0pO3ZhciBCaT1mdW5jdGlvbigpe3RoaXMuaWQ9bnVsbH07QmkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQodCxlKX07dmFyIFVpLEdpLHppPTMwLFZpPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX0sV2k9e3Njcm9sbDohMX0sWWk9e29yaWdpbjoiKm1vdXNlIn0scWk9e29yaWdpbjoiK21vdmUifSxLaT1bIiJdLFhpPS9bXHUwMGRmXHUwNTg3XHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLCRpPS9bXHUwMzAwLVx1MDM2Zlx1MDQ4My1cdTA0ODlcdTA1OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNjEwLVx1MDYxYVx1MDY0Yi1cdTA2NWVcdTA2NzBcdTA2ZDYtXHUwNmRjXHUwNmRlLVx1MDZlNFx1MDZlN1x1MDZlOFx1MDZlYS1cdTA2ZWRcdTA3MTFcdTA3MzAtXHUwNzRhXHUwN2E2LVx1MDdiMFx1MDdlYi1cdTA3ZjNcdTA4MTYtXHUwODE5XHUwODFiLVx1MDgyM1x1MDgyNS1cdTA4MjdcdTA4MjktXHUwODJkXHUwOTAwLVx1MDkwMlx1MDkzY1x1MDk0MS1cdTA5NDhcdTA5NGRcdTA5NTEtXHUwOTU1XHUwOTYyXHUwOTYzXHUwOTgxXHUwOWJjXHUwOWJlXHUwOWMxLVx1MDljNFx1MDljZFx1MDlkN1x1MDllMlx1MDllM1x1MGEwMVx1MGEwMlx1MGEzY1x1MGE0MVx1MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1cdTBhNGRcdTBhNTFcdTBhNzBcdTBhNzFcdTBhNzVcdTBhODFcdTBhODJcdTBhYmNcdTBhYzEtXHUwYWM1XHUwYWM3XHUwYWM4XHUwYWNkXHUwYWUyXHUwYWUzXHUwYjAxXHUwYjNjXHUwYjNlXHUwYjNmXHUwYjQxLVx1MGI0NFx1MGI0ZFx1MGI1Nlx1MGI1N1x1MGI2Mlx1MGI2M1x1MGI4Mlx1MGJiZVx1MGJjMFx1MGJjZFx1MGJkN1x1MGMzZS1cdTBjNDBcdTBjNDYtXHUwYzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM2Mlx1MGM2M1x1MGNiY1x1MGNiZlx1MGNjMlx1MGNjNlx1MGNjY1x1MGNjZFx1MGNkNVx1MGNkNlx1MGNlMlx1MGNlM1x1MGQzZVx1MGQ0MS1cdTBkNDRcdTBkNGRcdTBkNTdcdTBkNjJcdTBkNjNcdTBkY2FcdTBkY2ZcdTBkZDItXHUwZGQ0XHUwZGQ2XHUwZGRmXHUwZTMxXHUwZTM0LVx1MGUzYVx1MGU0Ny1cdTBlNGVcdTBlYjFcdTBlYjQtXHUwZWI5XHUwZWJiXHUwZWJjXHUwZWM4LVx1MGVjZFx1MGYxOFx1MGYxOVx1MGYzNVx1MGYzN1x1MGYzOVx1MGY3MS1cdTBmN2VcdTBmODAtXHUwZjg0XHUwZjg2XHUwZjg3XHUwZjkwLVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMmQtXHUxMDMwXHUxMDMyLVx1MTAzN1x1MTAzOVx1MTAzYVx1MTAzZFx1MTAzZVx1MTA1OFx1MTA1OVx1MTA1ZS1cdTEwNjBcdTEwNzEtXHUxMDc0XHUxMDgyXHUxMDg1XHUxMDg2XHUxMDhkXHUxMDlkXHUxMzVmXHUxNzEyLVx1MTcxNFx1MTczMi1cdTE3MzRcdTE3NTJcdTE3NTNcdTE3NzJcdTE3NzNcdTE3YjctXHUxN2JkXHUxN2M2XHUxN2M5LVx1MTdkM1x1MTdkZFx1MTgwYi1cdTE4MGRcdTE4YTlcdTE5MjAtXHUxOTIyXHUxOTI3XHUxOTI4XHUxOTMyXHUxOTM5LVx1MTkzYlx1MWExN1x1MWExOFx1MWE1Nlx1MWE1OC1cdTFhNWVcdTFhNjBcdTFhNjJcdTFhNjUtXHUxYTZjXHUxYTczLVx1MWE3Y1x1MWE3Zlx1MWIwMC1cdTFiMDNcdTFiMzRcdTFiMzYtXHUxYjNhXHUxYjNjXHUxYjQyXHUxYjZiLVx1MWI3M1x1MWI4MFx1MWI4MVx1MWJhMi1cdTFiYTVcdTFiYThcdTFiYTlcdTFjMmMtXHUxYzMzXHUxYzM2XHUxYzM3XHUxY2QwLVx1MWNkMlx1MWNkNC1cdTFjZTBcdTFjZTItXHUxY2U4XHUxY2VkXHUxZGMwLVx1MWRlNlx1MWRmZC1cdTFkZmZcdTIwMGNcdTIwMGRcdTIwZDAtXHUyMGYwXHUyY2VmLVx1MmNmMVx1MmRlMC1cdTJkZmZcdTMwMmEtXHUzMDJmXHUzMDk5XHUzMDlhXHVhNjZmLVx1YTY3Mlx1YTY3Y1x1YTY3ZFx1YTZmMFx1YTZmMVx1YTgwMlx1YTgwNlx1YTgwYlx1YTgyNVx1YTgyNlx1YThjNFx1YThlMC1cdWE4ZjFcdWE5MjYtXHVhOTJkXHVhOTQ3LVx1YTk1MVx1YTk4MC1cdWE5ODJcdWE5YjNcdWE5YjYtXHVhOWI5XHVhOWJjXHVhYTI5LVx1YWEyZVx1YWEzMVx1YWEzMlx1YWEzNVx1YWEzNlx1YWE0M1x1YWE0Y1x1YWFiMFx1YWFiMi1cdWFhYjRcdWFhYjdcdWFhYjhcdWFhYmVcdWFhYmZcdWFhYzFcdWFiZTVcdWFiZThcdWFiZWRcdWRjMDAtXHVkZmZmXHVmYjFlXHVmZTAwLVx1ZmUwZlx1ZmUyMC1cdWZlMjZcdWZmOWVcdWZmOWZdLyxRaT0hMSxKaT0hMSxaaT1udWxsLGVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZTw9MjQ3P24uY2hhckF0KGUpOjE0MjQ8PWUmJmU8PTE1MjQ/IlIiOjE1MzY8PWUmJmU8PTE3ODU/ci5jaGFyQXQoZS0xNTM2KToxNzc0PD1lJiZlPD0yMjIwPyJyIjo4MTkyPD1lJiZlPD04MjAzPyJ3Ijo4MjA0PT1lPyJiIjoiTCJ9ZnVuY3Rpb24gdChlLHQsbil7dGhpcy5sZXZlbD1lLHRoaXMuZnJvbT10LHRoaXMudG89bn12YXIgbj0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4iLHI9Im5ubm5ubk5OciUlcixyTk5tbW1tbW1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1tbW5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbk5tbW1tbW1ycm1tTm1tbW1ycjExMTExMTExMTEiLG89L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxzPS9bc3R3Tl0vLGk9L1tMUnJdLyxhPS9bTGIxbl0vLGw9L1sxbl0vO3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciB1PSJsdHIiPT1yPyJMIjoiUiI7aWYoMD09bi5sZW5ndGh8fCJsdHIiPT1yJiYhby50ZXN0KG4pKXJldHVybiExO2Zvcih2YXIgYz1uLmxlbmd0aCxkPVtdLF89MDtfPGM7KytfKWQucHVzaChlKG4uY2hhckNvZGVBdChfKSkpO2Zvcih2YXIgcD0wLGY9dTtwPGM7KytwKXt2YXIgaD1kW3BdOyJtIj09aD9kW3BdPWY6Zj1ofWZvcih2YXIgZz0wLGI9dTtnPGM7KytnKXt2YXIgRT1kW2ddOyIxIj09RSYmInIiPT1iP2RbZ109Im4iOmkudGVzdChFKSYmKGI9RSwiciI9PUUmJihkW2ddPSJSIikpfWZvcih2YXIgeT0xLHY9ZFswXTt5PGMtMTsrK3kpe3ZhciBUPWRbeV07IisiPT1UJiYiMSI9PXYmJiIxIj09ZFt5KzFdP2RbeV09IjEiOiIsIiE9VHx8diE9ZFt5KzFdfHwiMSIhPXYmJiJuIiE9dnx8KGRbeV09diksdj1UfWZvcih2YXIgQT0wO0E8YzsrK0Epe3ZhciBDPWRbQV07aWYoIiwiPT1DKWRbQV09Ik4iO2Vsc2UgaWYoIiUiPT1DKXt2YXIgTz12b2lkIDA7Zm9yKE89QSsxO088YyYmIiUiPT1kW09dOysrTyk7Zm9yKHZhciBTPUEmJiIhIj09ZFtBLTFdfHxPPGMmJiIxIj09ZFtPXT8iMSI6Ik4iLFI9QTtSPE87KytSKWRbUl09UztBPU8tMX19Zm9yKHZhciBqPTAseD11O2o8YzsrK2ope3ZhciBMPWRbal07IkwiPT14JiYiMSI9PUw/ZFtqXT0iTCI6aS50ZXN0KEwpJiYoeD1MKX1mb3IodmFyIEQ9MDtEPGM7KytEKWlmKHMudGVzdChkW0RdKSl7dmFyIHc9dm9pZCAwO2Zvcih3PUQrMTt3PGMmJnMudGVzdChkW3ddKTsrK3cpO2Zvcih2YXIgTT0iTCI9PShEP2RbRC0xXTp1KSxrPSJMIj09KHc8Yz9kW3ddOnUpLEk9TT09az9NPyJMIjoiUiI6dSxQPUQ7UDx3OysrUClkW1BdPUk7RD13LTF9Zm9yKHZhciBOLEg9W10sRj0wO0Y8YzspaWYoYS50ZXN0KGRbRl0pKXt2YXIgQj1GO2ZvcigrK0Y7RjxjJiZhLnRlc3QoZFtGXSk7KytGKTtILnB1c2gobmV3IHQoMCxCLEYpKX1lbHNle3ZhciBVPUYsRz1ILmxlbmd0aDtmb3IoKytGO0Y8YyYmIkwiIT1kW0ZdOysrRik7Zm9yKHZhciB6PVU7ejxGOylpZihsLnRlc3QoZFt6XSkpe1U8eiYmSC5zcGxpY2UoRywwLG5ldyB0KDEsVSx6KSk7dmFyIFY9ejtmb3IoKyt6O3o8RiYmbC50ZXN0KGRbel0pOysreik7SC5zcGxpY2UoRywwLG5ldyB0KDIsVix6KSksVT16fWVsc2UrK3o7VTxGJiZILnNwbGljZShHLDAsbmV3IHQoMSxVLEYpKX1yZXR1cm4ibHRyIj09ciYmKDE9PUhbMF0ubGV2ZWwmJihOPW4ubWF0Y2goL15ccysvKSkmJihIWzBdLmZyb209TlswXS5sZW5ndGgsSC51bnNoaWZ0KG5ldyB0KDAsMCxOWzBdLmxlbmd0aCkpKSwxPT1tKEgpLmxldmVsJiYoTj1uLm1hdGNoKC9ccyskLykpJiYobShIKS50by09TlswXS5sZW5ndGgsSC5wdXNoKG5ldyB0KDAsYy1OWzBdLmxlbmd0aCxjKSkpKSwicnRsIj09cj9ILnJldmVyc2UoKTpIfX0oKSx0YT1bXSxuYT1mdW5jdGlvbihlLHQsbil7aWYoZS5hZGRFdmVudExpc3RlbmVyKWUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpO2Vsc2UgaWYoZS5hdHRhY2hFdmVudCllLmF0dGFjaEV2ZW50KCJvbiIrdCxuKTtlbHNle3ZhciByPWUuX2hhbmRsZXJzfHwoZS5faGFuZGxlcnM9e30pO3JbdF09KHJbdF18fHRhKS5jb25jYXQobil9fSxyYT1mdW5jdGlvbigpe2lmKEVpJiZ5aTw5KXJldHVybiExO3ZhciBlPXIoImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gZXx8ImRyYWdEcm9wImluIGV9KCksb2E9MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1bXSxyPWUubGVuZ3RoO3Q8PXI7KXt2YXIgbz1lLmluZGV4T2YoIlxuIix0KTstMT09byYmKG89ZS5sZW5ndGgpO3ZhciBzPWUuc2xpY2UodCwiXHIiPT1lLmNoYXJBdChvLTEpP28tMTpvKSxpPXMuaW5kZXhPZigiXHIiKTstMSE9aT8obi5wdXNoKHMuc2xpY2UoMCxpKSksdCs9aSsxKToobi5wdXNoKHMpLHQ9bysxKX1yZXR1cm4gbn06ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG4/fFxuLyl9LHNhPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBlLnNlbGVjdGlvblN0YXJ0IT1lLnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PWUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChlKXt9cmV0dXJuISghdHx8dC5wYXJlbnRFbGVtZW50KCkhPWUpJiYwIT10LmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLHQpfSxpYT1mdW5jdGlvbigpe3ZhciBlPXIoImRpdiIpO3JldHVybiJvbmNvcHkiaW4gZXx8KGUuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIGUub25jb3B5KX0oKSxhYT1udWxsLGxhPXt9LHVhPXt9LGNhPXt9LGRhPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9ZSx0aGlzLnRhYlNpemU9dHx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZU9yYWNsZT1ufTtkYS5wcm90b3R5cGUuZW9sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLnN0cmluZy5sZW5ndGh9LGRhLnByb3RvdHlwZS5zb2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M9PXRoaXMubGluZVN0YXJ0fSxkYS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpfHx2b2lkIDB9LGRhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5wb3M8dGhpcy5zdHJpbmcubGVuZ3RoKXJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyl9LGRhLnByb3RvdHlwZS5lYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIGU/dD09ZTp0JiYoZS50ZXN0P2UudGVzdCh0KTplKHQpKSlyZXR1cm4rK3RoaXMucG9zLHR9LGRhLnByb3RvdHlwZS5lYXRXaGlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5wb3M7dGhpcy5lYXQoZSk7KTtyZXR1cm4gdGhpcy5wb3M+dH0sZGEucHJvdG90eXBlLmVhdFNwYWNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKytlLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sZGEucHJvdG90eXBlLnNraXBUb0VuZD1mdW5jdGlvbigpe3RoaXMucG9zPXRoaXMuc3RyaW5nLmxlbmd0aH0sZGEucHJvdG90eXBlLnNraXBUbz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0cmluZy5pbmRleE9mKGUsdGhpcy5wb3MpO2lmKHQ+LTEpcmV0dXJuIHRoaXMucG9zPXQsITB9LGRhLnByb3RvdHlwZS5iYWNrVXA9ZnVuY3Rpb24oZSl7dGhpcy5wb3MtPWV9LGRhLnByb3RvdHlwZS5jb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0Q29sdW1uUG9zPHRoaXMuc3RhcnQmJih0aGlzLmxhc3RDb2x1bW5WYWx1ZT1kKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlLSh0aGlzLmxpbmVTdGFydD9kKHRoaXMuc3RyaW5nLHRoaXMubGluZVN0YXJ0LHRoaXMudGFiU2l6ZSk6MCl9LGRhLnByb3RvdHlwZS5pbmRlbnRhdGlvbj1mdW5jdGlvbigpe3JldHVybiBkKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKS0odGhpcy5saW5lU3RhcnQ/ZCh0aGlzLnN0cmluZyx0aGlzLmxpbmVTdGFydCx0aGlzLnRhYlNpemUpOjApfSxkYS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7dmFyIHI9dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKGUpO3JldHVybiByJiZyLmluZGV4PjA/bnVsbDoociYmITEhPT10JiYodGhpcy5wb3MrPXJbMF0ubGVuZ3RoKSxyKX12YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gbj9lLnRvTG93ZXJDYXNlKCk6ZX07aWYobyh0aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsZS5sZW5ndGgpKT09byhlKSlyZXR1cm4hMSE9PXQmJih0aGlzLnBvcys9ZS5sZW5ndGgpLCEwfSxkYS5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LHRoaXMucG9zKX0sZGEucHJvdG90eXBlLmhpZGVGaXJzdENoYXJzPWZ1bmN0aW9uKGUsdCl7dGhpcy5saW5lU3RhcnQrPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXt0aGlzLmxpbmVTdGFydC09ZX19LGRhLnByb3RvdHlwZS5sb29rQWhlYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5saW5lT3JhY2xlO3JldHVybiB0JiZ0Lmxvb2tBaGVhZChlKX0sZGEucHJvdG90eXBlLmJhc2VUb2tlbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGluZU9yYWNsZTtyZXR1cm4gZSYmZS5iYXNlVG9rZW4odGhpcy5wb3MpfTt2YXIgX2E9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0YXRlPWUsdGhpcy5sb29rQWhlYWQ9dH0scGE9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zdGF0ZT10LHRoaXMuZG9jPWUsdGhpcy5saW5lPW4sdGhpcy5tYXhMb29rQWhlYWQ9cnx8MCx0aGlzLmJhc2VUb2tlbnM9bnVsbCx0aGlzLmJhc2VUb2tlblBvcz0xfTtwYS5wcm90b3R5cGUubG9va0FoZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZG9jLmdldExpbmUodGhpcy5saW5lK2UpO3JldHVybiBudWxsIT10JiZlPnRoaXMubWF4TG9va0FoZWFkJiYodGhpcy5tYXhMb29rQWhlYWQ9ZSksdH0scGEucHJvdG90eXBlLmJhc2VUb2tlbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCF0aGlzLmJhc2VUb2tlbnMpcmV0dXJuIG51bGw7Zm9yKDt0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdPD1lOyl0LmJhc2VUb2tlblBvcys9Mjt2YXIgbj10aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3MrMV07cmV0dXJue3R5cGU6biYmbi5yZXBsYWNlKC8oIHxeKW92ZXJsYXkgLiovLCIiKSxzaXplOnRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10tZX19LHBhLnByb3RvdHlwZS5uZXh0TGluZT1mdW5jdGlvbigpe3RoaXMubGluZSsrLHRoaXMubWF4TG9va0FoZWFkPjAmJnRoaXMubWF4TG9va0FoZWFkLS19LHBhLmZyb21TYXZlZD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBfYT9uZXcgcGEoZSxZZShlLm1vZGUsdC5zdGF0ZSksbix0Lmxvb2tBaGVhZCk6bmV3IHBhKGUsWWUoZS5tb2RlLHQpLG4pfSxwYS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihlKXt2YXIgdD0hMSE9PWU/WWUodGhpcy5kb2MubW9kZSx0aGlzLnN0YXRlKTp0aGlzLnN0YXRlO3JldHVybiB0aGlzLm1heExvb2tBaGVhZD4wP25ldyBfYSh0LHRoaXMubWF4TG9va0FoZWFkKTp0fTt2YXIgZmE9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3RhcnQ9ZS5zdGFydCx0aGlzLmVuZD1lLnBvcyx0aGlzLnN0cmluZz1lLmN1cnJlbnQoKSx0aGlzLnR5cGU9dHx8bnVsbCx0aGlzLnN0YXRlPW59LG1hPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnRleHQ9ZSxyZSh0aGlzLHQpLHRoaXMuaGVpZ2h0PW4/bih0aGlzKToxfTttYS5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIEQodGhpcyl9LERlKG1hKTt2YXIgaGEsZ2E9e30sYmE9e30sRWE9bnVsbCx5YT1udWxsLHZhPXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sVGE9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY209bjt2YXIgbz10aGlzLnZlcnQ9cigiZGl2IixbcigiZGl2IixudWxsLG51bGwsIm1pbi13aWR0aDogMXB4IildLCJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKSxzPXRoaXMuaG9yaXo9cigiZGl2IixbcigiZGl2IixudWxsLG51bGwsImhlaWdodDogMTAwJTsgbWluLWhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKTtvLnRhYkluZGV4PXMudGFiSW5kZXg9LTEsZShvKSxlKHMpLG5hKG8sInNjcm9sbCIsZnVuY3Rpb24oKXtvLmNsaWVudEhlaWdodCYmdChvLnNjcm9sbFRvcCwidmVydGljYWwiKX0pLG5hKHMsInNjcm9sbCIsZnVuY3Rpb24oKXtzLmNsaWVudFdpZHRoJiZ0KHMuc2Nyb2xsTGVmdCwiaG9yaXpvbnRhbCIpfSksdGhpcy5jaGVja2VkWmVyb1dpZHRoPSExLEVpJiZ5aTw4JiYodGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQ9dGhpcy52ZXJ0LnN0eWxlLm1pbldpZHRoPSIxOHB4Iil9O1RhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRoKzEsbj1lLnNjcm9sbEhlaWdodD5lLmNsaWVudEhlaWdodCsxLHI9ZS5uYXRpdmVCYXJXaWR0aDtpZihuKXt0aGlzLnZlcnQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMudmVydC5zdHlsZS5ib3R0b209dD9yKyJweCI6IjAiO3ZhciBvPWUudmlld0hlaWdodC0odD9yOjApO3RoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLGUuc2Nyb2xsSGVpZ2h0LWUuY2xpZW50SGVpZ2h0K28pKyJweCJ9ZWxzZSB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLnZlcnQuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiO2lmKHQpe3RoaXMuaG9yaXouc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaG9yaXouc3R5bGUucmlnaHQ9bj9yKyJweCI6IjAiLHRoaXMuaG9yaXouc3R5bGUubGVmdD1lLmJhckxlZnQrInB4Ijt2YXIgcz1lLnZpZXdXaWR0aC1lLmJhckxlZnQtKG4/cjowKTt0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9TWF0aC5tYXgoMCxlLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgrcykrInB4In1lbHNlIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiO3JldHVybiF0aGlzLmNoZWNrZWRaZXJvV2lkdGgmJmUuY2xpZW50SGVpZ2h0PjAmJigwPT1yJiZ0aGlzLnplcm9XaWR0aEhhY2soKSx0aGlzLmNoZWNrZWRaZXJvV2lkdGg9ITApLHtyaWdodDpuP3I6MCxib3R0b206dD9yOjB9fSxUYS5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihlKXt0aGlzLmhvcml6LnNjcm9sbExlZnQhPWUmJih0aGlzLmhvcml6LnNjcm9sbExlZnQ9ZSksdGhpcy5kaXNhYmxlSG9yaXomJnRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosdGhpcy5kaXNhYmxlSG9yaXosImhvcml6Iil9LFRhLnByb3RvdHlwZS5zZXRTY3JvbGxUb3A9ZnVuY3Rpb24oZSl7dGhpcy52ZXJ0LnNjcm9sbFRvcCE9ZSYmKHRoaXMudmVydC5zY3JvbGxUb3A9ZSksdGhpcy5kaXNhYmxlVmVydCYmdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LHRoaXMuZGlzYWJsZVZlcnQsInZlcnQiKX0sVGEucHJvdG90eXBlLnplcm9XaWR0aEhhY2s9ZnVuY3Rpb24oKXt2YXIgZT1EaSYmIVNpPyIxMnB4IjoiMThweCI7dGhpcy5ob3Jpei5zdHlsZS5oZWlnaHQ9dGhpcy52ZXJ0LnN0eWxlLndpZHRoPWUsdGhpcy5ob3Jpei5zdHlsZS5wb2ludGVyRXZlbnRzPXRoaXMudmVydC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLmRpc2FibGVIb3Jpej1uZXcgQmksdGhpcy5kaXNhYmxlVmVydD1uZXcgQml9LFRhLnByb3RvdHlwZS5lbmFibGVaZXJvV2lkdGhCYXI9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoKXt2YXIgbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOygidmVydCI9PW4/ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChvLnJpZ2h0LTEsKG8udG9wK28uYm90dG9tKS8yKTpkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChvLnJpZ2h0K28ubGVmdCkvMixvLmJvdHRvbS0xKSkhPWU/ZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIjp0LnNldCgxZTMscil9ZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJhdXRvIix0LnNldCgxZTMscil9LFRhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaG9yaXoucGFyZW50Tm9kZTtlLnJlbW92ZUNoaWxkKHRoaXMuaG9yaXopLGUucmVtb3ZlQ2hpbGQodGhpcy52ZXJ0KX07dmFyIEFhPWZ1bmN0aW9uKCl7fTtBYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJue2JvdHRvbTowLHJpZ2h0OjB9fSxBYS5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbigpe30sQWEucHJvdG90eXBlLnNldFNjcm9sbFRvcD1mdW5jdGlvbigpe30sQWEucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7fTt2YXIgQ2E9e25hdGl2ZTpUYSxudWxsOkFhfSxPYT0wLFNhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmRpc3BsYXk7dGhpcy52aWV3cG9ydD10LHRoaXMudmlzaWJsZT1CbihyLGUuZG9jLHQpLHRoaXMuZWRpdG9ySXNIaWRkZW49IXIud3JhcHBlci5vZmZzZXRXaWR0aCx0aGlzLndyYXBwZXJIZWlnaHQ9ci53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLndyYXBwZXJXaWR0aD1yLndyYXBwZXIuY2xpZW50V2lkdGgsdGhpcy5vbGREaXNwbGF5V2lkdGg9VXQoZSksdGhpcy5mb3JjZT1uLHRoaXMuZGltcz1UbihlKSx0aGlzLmV2ZW50cz1bXX07U2EucHJvdG90eXBlLnNpZ25hbD1mdW5jdGlvbihlLHQpe0xlKGUsdCkmJnRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKX0sU2EucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9MDt0PHRoaXMuZXZlbnRzLmxlbmd0aDt0KyspUmUuYXBwbHkobnVsbCxlLmV2ZW50c1t0XSl9O3ZhciBSYT0wLGphPW51bGw7RWk/amE9LS41MzptaT9qYT0xNTpBaT9qYT0tLjc6T2kmJihqYT0tMS8zKTt2YXIgeGE9ZnVuY3Rpb24oZSx0KXt0aGlzLnJhbmdlcz1lLHRoaXMucHJpbUluZGV4PXR9O3hhLnByb3RvdHlwZS5wcmltYXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XX0seGEucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGU9PXRoaXMpcmV0dXJuITA7aWYoZS5wcmltSW5kZXghPXRoaXMucHJpbUluZGV4fHxlLnJhbmdlcy5sZW5ndGghPXRoaXMucmFuZ2VzLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRoaXMucmFuZ2VzLmxlbmd0aDtuKyspe3ZhciByPXQucmFuZ2VzW25dLG89ZS5yYW5nZXNbbl07aWYoIU4oci5hbmNob3Isby5hbmNob3IpfHwhTihyLmhlYWQsby5oZWFkKSlyZXR1cm4hMX1yZXR1cm4hMH0seGEucHJvdG90eXBlLmRlZXBDb3B5PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1bXSxuPTA7bjx0aGlzLnJhbmdlcy5sZW5ndGg7bisrKXRbbl09bmV3IExhKEgoZS5yYW5nZXNbbl0uYW5jaG9yKSxIKGUucmFuZ2VzW25dLmhlYWQpKTtyZXR1cm4gbmV3IHhhKHQsdGhpcy5wcmltSW5kZXgpfSx4YS5wcm90b3R5cGUuc29tZXRoaW5nU2VsZWN0ZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PTA7dDx0aGlzLnJhbmdlcy5sZW5ndGg7dCsrKWlmKCFlLnJhbmdlc1t0XS5lbXB0eSgpKXJldHVybiEwO3JldHVybiExfSx4YS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3R8fCh0PWUpO2Zvcih2YXIgcj0wO3I8dGhpcy5yYW5nZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5yYW5nZXNbcl07aWYoUCh0LG8uZnJvbSgpKT49MCYmUChlLG8udG8oKSk8PTApcmV0dXJuIHJ9cmV0dXJuLTF9O3ZhciBMYT1mdW5jdGlvbihlLHQpe3RoaXMuYW5jaG9yPWUsdGhpcy5oZWFkPXR9O0xhLnByb3RvdHlwZS5mcm9tPWZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcy5hbmNob3IsdGhpcy5oZWFkKX0sTGEucHJvdG90eXBlLnRvPWZ1bmN0aW9uKCl7cmV0dXJuIEYodGhpcy5hbmNob3IsdGhpcy5oZWFkKX0sTGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5saW5lPT10aGlzLmFuY2hvci5saW5lJiZ0aGlzLmhlYWQuY2g9PXRoaXMuYW5jaG9yLmNofSx6by5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmVzLmxlbmd0aH0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcyxyPWUsbz1lK3Q7cjxvOysrcil7dmFyIHM9bi5saW5lc1tyXTtuLmhlaWdodC09cy5oZWlnaHQsYXQocyksdnQocywiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UoZSx0KX0sY29sbGFwc2U6ZnVuY3Rpb24oZSl7ZS5wdXNoLmFwcGx5KGUsdGhpcy5saW5lcyl9LGluc2VydElubmVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3RoaXMuaGVpZ2h0Kz1uLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLGUpLmNvbmNhdCh0KS5jb25jYXQodGhpcy5saW5lcy5zbGljZShlKSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pdFtvXS5wYXJlbnQ9cn0saXRlck46ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10aGlzLG89ZSt0O2U8bzsrK2UpaWYobihyLmxpbmVzW2VdKSlyZXR1cm4hMH19LFZvLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuc2l6ZS09dDtmb3IodmFyIHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrcil7dmFyIG89bi5jaGlsZHJlbltyXSxzPW8uY2h1bmtTaXplKCk7aWYoZTxzKXt2YXIgaT1NYXRoLm1pbih0LHMtZSksYT1vLmhlaWdodDtpZihvLnJlbW92ZUlubmVyKGUsaSksbi5oZWlnaHQtPWEtby5oZWlnaHQscz09aSYmKG4uY2hpbGRyZW4uc3BsaWNlKHItLSwxKSxvLnBhcmVudD1udWxsKSwwPT0odC09aSkpYnJlYWs7ZT0wfWVsc2UgZS09c31pZih0aGlzLnNpemUtdDwyNSYmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjF8fCEodGhpcy5jaGlsZHJlblswXWluc3RhbmNlb2Ygem8pKSl7dmFyIGw9W107dGhpcy5jb2xsYXBzZShsKSx0aGlzLmNoaWxkcmVuPVtuZXcgem8obCldLHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50PXRoaXN9fSxjb2xsYXBzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK24pdC5jaGlsZHJlbltuXS5jb2xsYXBzZShlKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dGhpcy5zaXplKz10Lmxlbmd0aCx0aGlzLmhlaWdodCs9bjtmb3IodmFyIG89MDtvPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrbyl7dmFyIHM9ci5jaGlsZHJlbltvXSxpPXMuY2h1bmtTaXplKCk7aWYoZTw9aSl7aWYocy5pbnNlcnRJbm5lcihlLHQsbikscy5saW5lcyYmcy5saW5lcy5sZW5ndGg+NTApe2Zvcih2YXIgYT1zLmxpbmVzLmxlbmd0aCUyNSsyNSxsPWE7bDxzLmxpbmVzLmxlbmd0aDspe3ZhciB1PW5ldyB6byhzLmxpbmVzLnNsaWNlKGwsbCs9MjUpKTtzLmhlaWdodC09dS5oZWlnaHQsci5jaGlsZHJlbi5zcGxpY2UoKytvLDAsdSksdS5wYXJlbnQ9cn1zLmxpbmVzPXMubGluZXMuc2xpY2UoMCxhKSxyLm1heWJlU3BpbGwoKX1icmVha31lLT1pfX0sbWF5YmVTcGlsbDpmdW5jdGlvbigpe2lmKCEodGhpcy5jaGlsZHJlbi5sZW5ndGg8PTEwKSl7dmFyIGU9dGhpcztkb3t2YXIgdD1lLmNoaWxkcmVuLnNwbGljZShlLmNoaWxkcmVuLmxlbmd0aC01LDUpLG49bmV3IFZvKHQpO2lmKGUucGFyZW50KXtlLnNpemUtPW4uc2l6ZSxlLmhlaWdodC09bi5oZWlnaHQ7dmFyIHI9XyhlLnBhcmVudC5jaGlsZHJlbixlKTtlLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UocisxLDAsbil9ZWxzZXt2YXIgbz1uZXcgVm8oZS5jaGlsZHJlbik7by5wYXJlbnQ9ZSxlLmNoaWxkcmVuPVtvLG5dLGU9b31uLnBhcmVudD1lLnBhcmVudH13aGlsZShlLmNoaWxkcmVuLmxlbmd0aD4xMCk7ZS5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10aGlzLG89MDtvPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrbyl7dmFyIHM9ci5jaGlsZHJlbltvXSxpPXMuY2h1bmtTaXplKCk7aWYoZTxpKXt2YXIgYT1NYXRoLm1pbih0LGktZSk7aWYocy5pdGVyTihlLGEsbikpcmV0dXJuITA7aWYoMD09KHQtPWEpKWJyZWFrO2U9MH1lbHNlIGUtPWl9fX07dmFyIERhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKG4pZm9yKHZhciBvIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShvKSYmKHJbb109bltvXSk7dGhpcy5kb2M9ZSx0aGlzLm5vZGU9dH07RGEucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZG9jLmNtLG49dGhpcy5saW5lLndpZGdldHMscj10aGlzLmxpbmUsbz1EKHIpO2lmKG51bGwhPW8mJm4pe2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7KytzKW5bc109PWUmJm4uc3BsaWNlKHMtLSwxKTtuLmxlbmd0aHx8KHIud2lkZ2V0cz1udWxsKTt2YXIgaT1JdCh0aGlzKTtMKHIsTWF0aC5tYXgoMCxyLmhlaWdodC1pKSksdCYmKGZyKHQsZnVuY3Rpb24oKXtXbyh0LHIsLWkpLEVyKHQsbywid2lkZ2V0Iil9KSx2dCh0LCJsaW5lV2lkZ2V0Q2xlYXJlZCIsdCx0aGlzLG8pKX19LERhLnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuaGVpZ2h0LG49dGhpcy5kb2MuY20scj10aGlzLmxpbmU7dGhpcy5oZWlnaHQ9bnVsbDt2YXIgbz1JdCh0aGlzKS10O28mJihnZSh0aGlzLmRvYyxyKXx8TChyLHIuaGVpZ2h0K28pLG4mJmZyKG4sZnVuY3Rpb24oKXtuLmN1ck9wLmZvcmNlVXBkYXRlPSEwLFdvKG4scixvKSx2dChuLCJsaW5lV2lkZ2V0Q2hhbmdlZCIsbixlLEQocikpfSkpfSxEZShEYSk7dmFyIHdhPTAsTWE9ZnVuY3Rpb24oZSx0KXt0aGlzLmxpbmVzPVtdLHRoaXMudHlwZT10LHRoaXMuZG9jPWUsdGhpcy5pZD0rK3dhfTtNYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxuPXQmJiF0LmN1ck9wO2lmKG4mJmlyKHQpLExlKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJnZ0KHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBvPW51bGwscz1udWxsLGk9MDtpPHRoaXMubGluZXMubGVuZ3RoOysraSl7dmFyIGE9ZS5saW5lc1tpXSxsPUsoYS5tYXJrZWRTcGFucyxlKTt0JiYhZS5jb2xsYXBzZWQ/RXIodCxEKGEpLCJ0ZXh0Iik6dCYmKG51bGwhPWwudG8mJihzPUQoYSkpLG51bGwhPWwuZnJvbSYmKG89RChhKSkpLGEubWFya2VkU3BhbnM9WChhLm1hcmtlZFNwYW5zLGwpLG51bGw9PWwuZnJvbSYmZS5jb2xsYXBzZWQmJiFnZShlLmRvYyxhKSYmdCYmTChhLHluKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIHU9MDt1PHRoaXMubGluZXMubGVuZ3RoOysrdSl7dmFyIGM9X2UoZS5saW5lc1t1XSksZD15ZShjKTtkPnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9Yyx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD1kLHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9byYmdCYmdGhpcy5jb2xsYXBzZWQmJmJyKHQsbyxzKzEpLHRoaXMubGluZXMubGVuZ3RoPTAsdGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMCx0aGlzLmF0b21pYyYmdGhpcy5kb2MuY2FudEVkaXQmJih0aGlzLmRvYy5jYW50RWRpdD0hMSx0JiZPbyh0LmRvYykpLHQmJnZ0KHQsIm1hcmtlckNsZWFyZWQiLHQsdGhpcyxvLHMpLG4mJmFyKHQpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5jbGVhcigpfX0sTWEucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO251bGw9PWUmJiJib29rbWFyayI9PXRoaXMudHlwZSYmKGU9MSk7Zm9yKHZhciByLG8scz0wO3M8dGhpcy5saW5lcy5sZW5ndGg7KytzKXt2YXIgaT1uLmxpbmVzW3NdLGE9SyhpLm1hcmtlZFNwYW5zLG4pO2lmKG51bGwhPWEuZnJvbSYmKHI9SSh0P2k6RChpKSxhLmZyb20pLC0xPT1lKSlyZXR1cm4gcjtpZihudWxsIT1hLnRvJiYobz1JKHQ/aTpEKGkpLGEudG8pLDE9PWUpKXJldHVybiBvfXJldHVybiByJiZ7ZnJvbTpyLHRvOm99fSxNYS5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmZpbmQoLTEsITApLG49dGhpcyxyPXRoaXMuZG9jLmNtO3QmJnImJmZyKHIsZnVuY3Rpb24oKXt2YXIgbz10LmxpbmUscz1EKHQubGluZSksaT1xdChyLHMpO2lmKGkmJihlbihpKSxyLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ci5jdXJPcC5mb3JjZVVwZGF0ZT0hMCksci5jdXJPcC51cGRhdGVNYXhMaW5lPSEwLCFnZShuLmRvYyxvKSYmbnVsbCE9bi5oZWlnaHQpe3ZhciBhPW4uaGVpZ2h0O24uaGVpZ2h0PW51bGw7dmFyIGw9SXQobiktYTtsJiZMKG8sby5oZWlnaHQrbCl9dnQociwibWFya2VyQ2hhbmdlZCIscixlKX0pfSxNYS5wcm90b3R5cGUuYXR0YWNoTGluZT1mdW5jdGlvbihlKXtpZighdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgdD10aGlzLmRvYy5jbS5jdXJPcDt0Lm1heWJlSGlkZGVuTWFya2VycyYmLTEhPV8odC5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fCh0Lm1heWJlVW5oaWRkZW5NYXJrZXJzfHwodC5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKGUpfSxNYS5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbihlKXtpZih0aGlzLmxpbmVzLnNwbGljZShfKHRoaXMubGluZXMsZSksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIHQ9dGhpcy5kb2MuY20uY3VyT3A7KHQubWF5YmVIaWRkZW5NYXJrZXJzfHwodC5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sRGUoTWEpO3ZhciBrYT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5tYXJrZXJzPWUsdGhpcy5wcmltYXJ5PXQ7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5wYXJlbnQ9bn07a2EucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KWUubWFya2Vyc1t0XS5jbGVhcigpO3Z0KHRoaXMsImNsZWFyIil9fSxrYS5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZChlLHQpfSxEZShrYSk7dmFyIElhPTAsUGE9ZnVuY3Rpb24oZSx0LG4scixvKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQYSkpcmV0dXJuIG5ldyBQYShlLHQsbixyLG8pO251bGw9PW4mJihuPTApLFZvLmNhbGwodGhpcyxbbmV3IHpvKFtuZXcgbWEoIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9bix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5tb2RlRnJvbnRpZXI9dGhpcy5oaWdobGlnaHRGcm9udGllcj1uO3ZhciBzPUkobiwwKTt0aGlzLnNlbD1VcihzKSx0aGlzLmhpc3Rvcnk9bmV3IHRvKG51bGwpLHRoaXMuaWQ9KytJYSx0aGlzLm1vZGVPcHRpb249dCx0aGlzLmxpbmVTZXA9cix0aGlzLmRpcmVjdGlvbj0icnRsIj09bz8icnRsIjoibHRyIix0aGlzLmV4dGVuZD0hMSwic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMuc3BsaXRMaW5lcyhlKSksJHIodGhpcyx7ZnJvbTpzLHRvOnMsdGV4dDplfSksVG8odGhpcyxVcihzKSxXaSl9O1BhLnByb3RvdHlwZT1FKFZvLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6UGEsaXRlcjpmdW5jdGlvbihlLHQsbil7bj90aGlzLml0ZXJOKGUtdGhpcy5maXJzdCx0LWUsbik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLGUpfSxpbnNlcnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjx0Lmxlbmd0aDsrK3Ipbis9dFtyXS5oZWlnaHQ7dGhpcy5pbnNlcnRJbm5lcihlLXRoaXMuZmlyc3QsdCxuKX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJbm5lcihlLXRoaXMuZmlyc3QsdCl9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXgodGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4hMT09PWU/dDp0LmpvaW4oZXx8dGhpcy5saW5lU2VwYXJhdG9yKCkpfSxzZXRWYWx1ZTpncihmdW5jdGlvbihlKXt2YXIgdD1JKHRoaXMuZmlyc3QsMCksbj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO3dvKHRoaXMse2Zyb206dCx0bzpJKG4sUih0aGlzLG4pLnRleHQubGVuZ3RoKSx0ZXh0OnRoaXMuc3BsaXRMaW5lcyhlKSxvcmlnaW46InNldFZhbHVlIixmdWxsOiEwfSwhMCksdGhpcy5jbSYmWG4odGhpcy5jbSwwLDApLFRvKHRoaXMsVXIodCksV2kpfSkscmVwbGFjZVJhbmdlOmZ1bmN0aW9uKGUsdCxuLHIpe3Q9Ryh0aGlzLHQpLG49bj9HKHRoaXMsbik6dCxIbyh0aGlzLGUsdCxuLHIpfSxnZXRSYW5nZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9aih0aGlzLEcodGhpcyxlKSxHKHRoaXMsdCkpO3JldHVybiExPT09bj9yOnIuam9pbihufHx0aGlzLmxpbmVTZXBhcmF0b3IoKSl9LGdldExpbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMaW5lSGFuZGxlKGUpO3JldHVybiB0JiZ0LnRleHR9LGdldExpbmVIYW5kbGU6ZnVuY3Rpb24oZSl7aWYoTSh0aGlzLGUpKXJldHVybiBSKHRoaXMsZSl9LGdldExpbmVOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEQoZSl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJihlPVIodGhpcyxlKSksX2UoZSl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKGUpe3JldHVybiBHKHRoaXMsZSl9LGdldEN1cnNvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbC5wcmltYXJ5KCk7cmV0dXJuIG51bGw9PWV8fCJoZWFkIj09ZT90LmhlYWQ6ImFuY2hvciI9PWU/dC5hbmNob3I6ImVuZCI9PWV8fCJ0byI9PWV8fCExPT09ZT90LnRvKCk6dC5mcm9tKCl9LGxpc3RTZWxlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsLnJhbmdlc30sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKX0sc2V0Q3Vyc29yOmdyKGZ1bmN0aW9uKGUsdCxuKXtFbyh0aGlzLEcodGhpcywibnVtYmVyIj09dHlwZW9mIGU/SShlLHR8fDApOmUpLG51bGwsbil9KSxzZXRTZWxlY3Rpb246Z3IoZnVuY3Rpb24oZSx0LG4pe0VvKHRoaXMsRyh0aGlzLGUpLEcodGhpcyx0fHxlKSxuKX0pLGV4dGVuZFNlbGVjdGlvbjpncihmdW5jdGlvbihlLHQsbil7aG8odGhpcyxHKHRoaXMsZSksdCYmRyh0aGlzLHQpLG4pfSksZXh0ZW5kU2VsZWN0aW9uczpncihmdW5jdGlvbihlLHQpe2dvKHRoaXMsVih0aGlzLGUpLHQpfSksZXh0ZW5kU2VsZWN0aW9uc0J5OmdyKGZ1bmN0aW9uKGUsdCl7Z28odGhpcyxWKHRoaXMsaCh0aGlzLnNlbC5yYW5nZXMsZSkpLHQpfSksc2V0U2VsZWN0aW9uczpncihmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztpZihlLmxlbmd0aCl7Zm9yKHZhciBvPVtdLHM9MDtzPGUubGVuZ3RoO3MrKylvW3NdPW5ldyBMYShHKHIsZVtzXS5hbmNob3IpLEcocixlW3NdLmhlYWQpKTtudWxsPT10JiYodD1NYXRoLm1pbihlLmxlbmd0aC0xLHRoaXMuc2VsLnByaW1JbmRleCkpLFRvKHRoaXMsQnIodGhpcy5jbSxvLHQpLG4pfX0pLGFkZFNlbGVjdGlvbjpncihmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApO3IucHVzaChuZXcgTGEoRyh0aGlzLGUpLEcodGhpcyx0fHxlKSkpLFRvKHRoaXMsQnIodGhpcy5jbSxyLHIubGVuZ3RoLTEpLG4pfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXMscj10aGlzLnNlbC5yYW5nZXMsbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1qKG4scltvXS5mcm9tKCkscltvXS50bygpKTt0PXQ/dC5jb25jYXQocyk6c31yZXR1cm4hMT09PWU/dDp0LmpvaW4oZXx8dGhpcy5saW5lU2VwYXJhdG9yKCkpfSxnZXRTZWxlY3Rpb25zOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLG49W10scj10aGlzLnNlbC5yYW5nZXMsbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1qKHQscltvXS5mcm9tKCkscltvXS50bygpKTshMSE9PWUmJihzPXMuam9pbihlfHx0LmxpbmVTZXBhcmF0b3IoKSkpLG5bb109c31yZXR1cm4gbn0scmVwbGFjZVNlbGVjdGlvbjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLG89MDtvPHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7bysrKXJbb109ZTt0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKHIsdCxufHwiK2lucHV0Iil9LHJlcGxhY2VTZWxlY3Rpb25zOmdyKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcyxvPVtdLHM9dGhpcy5zZWwsaT0wO2k8cy5yYW5nZXMubGVuZ3RoO2krKyl7dmFyIGE9cy5yYW5nZXNbaV07b1tpXT17ZnJvbTphLmZyb20oKSx0bzphLnRvKCksdGV4dDpyLnNwbGl0TGluZXMoZVtpXSksb3JpZ2luOm59fWZvcih2YXIgbD10JiYiZW5kIiE9dCYmWXIodGhpcyxvLHQpLHU9by5sZW5ndGgtMTt1Pj0wO3UtLSl3byhyLG9bdV0pO2w/dm8odGhpcyxsKTp0aGlzLmNtJiZLbih0aGlzLmNtKX0pLHVuZG86Z3IoZnVuY3Rpb24oKXtrbyh0aGlzLCJ1bmRvIil9KSxyZWRvOmdyKGZ1bmN0aW9uKCl7a28odGhpcywicmVkbyIpfSksdW5kb1NlbGVjdGlvbjpncihmdW5jdGlvbigpe2tvKHRoaXMsInVuZG8iLCEwKX0pLHJlZG9TZWxlY3Rpb246Z3IoZnVuY3Rpb24oKXtrbyh0aGlzLCJyZWRvIiwhMCl9KSxzZXRFeHRlbmRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5leHRlbmQ9ZX0sZ2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXh0ZW5kfSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmhpc3RvcnksdD0wLG49MCxyPTA7cjxlLmRvbmUubGVuZ3RoO3IrKyllLmRvbmVbcl0ucmFuZ2VzfHwrK3Q7Zm9yKHZhciBvPTA7bzxlLnVuZG9uZS5sZW5ndGg7bysrKWUudW5kb25lW29dLnJhbmdlc3x8KytuO3JldHVybnt1bmRvOnQscmVkbzpufX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PW5ldyB0byh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbighMCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih0aGlzLmhpc3RvcnkubGFzdE9wPXRoaXMuaGlzdG9yeS5sYXN0U2VsT3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCksdGhpcy5oaXN0b3J5LmdlbmVyYXRpb259LGlzQ2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uPT0oZXx8dGhpcy5jbGVhbkdlbmVyYXRpb24pfSxnZXRIaXN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6Zm8odGhpcy5oaXN0b3J5LmRvbmUpLHVuZG9uZTpmbyh0aGlzLmhpc3RvcnkudW5kb25lKX19LHNldEhpc3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oaXN0b3J5PW5ldyB0byh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7dC5kb25lPWZvKGUuZG9uZS5zbGljZSgwKSxudWxsLCEwKSx0LnVuZG9uZT1mbyhlLnVuZG9uZS5zbGljZSgwKSxudWxsLCEwKX0sc2V0R3V0dGVyTWFya2VyOmdyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gR28odGhpcyxlLCJndXR0ZXIiLGZ1bmN0aW9uKGUpe3ZhciByPWUuZ3V0dGVyTWFya2Vyc3x8KGUuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIHJbdF09biwhbiYmVChyKSYmKGUuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6Z3IoZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLml0ZXIoZnVuY3Rpb24obil7bi5ndXR0ZXJNYXJrZXJzJiZuLmd1dHRlck1hcmtlcnNbZV0mJkdvKHQsbiwiZ3V0dGVyIixmdW5jdGlvbigpe3JldHVybiBuLmd1dHRlck1hcmtlcnNbZV09bnVsbCxUKG4uZ3V0dGVyTWFya2VycykmJihuLmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pfSksbGluZUluZm86ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZighTSh0aGlzLGUpKXJldHVybiBudWxsO2lmKHQ9ZSwhKGU9Uih0aGlzLGUpKSlyZXR1cm4gbnVsbH1lbHNlIGlmKG51bGw9PSh0PUQoZSkpKXJldHVybiBudWxsO3JldHVybntsaW5lOnQsaGFuZGxlOmUsdGV4dDplLnRleHQsZ3V0dGVyTWFya2VyczplLmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOmUudGV4dENsYXNzLGJnQ2xhc3M6ZS5iZ0NsYXNzLHdyYXBDbGFzczplLndyYXBDbGFzcyx3aWRnZXRzOmUud2lkZ2V0c319LGFkZExpbmVDbGFzczpncihmdW5jdGlvbih0LG4scil7cmV0dXJuIEdvKHRoaXMsdCwiZ3V0dGVyIj09bj8iZ3V0dGVyIjoiY2xhc3MiLGZ1bmN0aW9uKHQpe3ZhciBvPSJ0ZXh0Ij09bj8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PW4/ImJnQ2xhc3MiOiJndXR0ZXIiPT1uPyJndXR0ZXJDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtvXSl7aWYoZShyKS50ZXN0KHRbb10pKXJldHVybiExO3Rbb10rPSIgIityfWVsc2UgdFtvXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6Z3IoZnVuY3Rpb24odCxuLHIpe3JldHVybiBHbyh0aGlzLHQsImd1dHRlciI9PW4/Imd1dHRlciI6ImNsYXNzIixmdW5jdGlvbih0KXt2YXIgbz0idGV4dCI9PW4/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1uPyJiZ0NsYXNzIjoiZ3V0dGVyIj09bj8iZ3V0dGVyQ2xhc3MiOiJ3cmFwQ2xhc3MiLHM9dFtvXTtpZighcylyZXR1cm4hMTtpZihudWxsPT1yKXRbb109bnVsbDtlbHNle3ZhciBpPXMubWF0Y2goZShyKSk7aWYoIWkpcmV0dXJuITE7dmFyIGE9aS5pbmRleCtpWzBdLmxlbmd0aDt0W29dPXMuc2xpY2UoMCxpLmluZGV4KSsoaS5pbmRleCYmYSE9cy5sZW5ndGg/IiAiOiIiKStzLnNsaWNlKGEpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmdyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWW8odGhpcyxlLHQsbil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKGUpe2UuY2xlYXIoKX0sbWFya1RleHQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxbyh0aGlzLEcodGhpcyxlKSxHKHRoaXMsdCksbixuJiZuLnR5cGV8fCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbihlLHQpe3ZhciBuPXtyZXBsYWNlZFdpdGg6dCYmKG51bGw9PXQubm9kZVR5cGU/dC53aWRnZXQ6dCksaW5zZXJ0TGVmdDp0JiZ0Lmluc2VydExlZnQsY2xlYXJXaGVuRW1wdHk6ITEsc2hhcmVkOnQmJnQuc2hhcmVkLGhhbmRsZU1vdXNlRXZlbnRzOnQmJnQuaGFuZGxlTW91c2VFdmVudHN9O3JldHVybiBlPUcodGhpcyxlKSxxbyh0aGlzLGUsZSxuLCJib29rbWFyayIpfSxmaW5kTWFya3NBdDpmdW5jdGlvbihlKXtlPUcodGhpcyxlKTt2YXIgdD1bXSxuPVIodGhpcyxlLmxpbmUpLm1hcmtlZFNwYW5zO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDsrK3Ipe3ZhciBvPW5bcl07KG51bGw9PW8uZnJvbXx8by5mcm9tPD1lLmNoKSYmKG51bGw9PW8udG98fG8udG8+PWUuY2gpJiZ0LnB1c2goby5tYXJrZXIucGFyZW50fHxvLm1hcmtlcil9cmV0dXJuIHR9LGZpbmRNYXJrczpmdW5jdGlvbihlLHQsbil7ZT1HKHRoaXMsZSksdD1HKHRoaXMsdCk7dmFyIHI9W10sbz1lLmxpbmU7cmV0dXJuIHRoaXMuaXRlcihlLmxpbmUsdC5saW5lKzEsZnVuY3Rpb24ocyl7dmFyIGk9cy5tYXJrZWRTcGFucztpZihpKWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbD1pW2FdO251bGwhPWwudG8mJm89PWUubGluZSYmZS5jaD49bC50b3x8bnVsbD09bC5mcm9tJiZvIT1lLmxpbmV8fG51bGwhPWwuZnJvbSYmbz09dC5saW5lJiZsLmZyb20+PXQuY2h8fG4mJiFuKGwubWFya2VyKXx8ci5wdXNoKGwubWFya2VyLnBhcmVudHx8bC5tYXJrZXIpfSsrb30pLHJ9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbih0KXt2YXIgbj10Lm1hcmtlZFNwYW5zO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDsrK3IpbnVsbCE9bltyXS5mcm9tJiZlLnB1c2gobltyXS5tYXJrZXIpfSksZX0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5maXJzdCxyPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG8pe3ZhciBzPW8udGV4dC5sZW5ndGgrcjtpZihzPmUpcmV0dXJuIHQ9ZSwhMDtlLT1zLCsrbn0pLEcodGhpcyxJKG4sdCkpfSxpbmRleEZyb21Qb3M6ZnVuY3Rpb24oZSl7ZT1HKHRoaXMsZSk7dmFyIHQ9ZS5jaDtpZihlLmxpbmU8dGhpcy5maXJzdHx8ZS5jaDwwKXJldHVybiAwO3ZhciBuPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtyZXR1cm4gdGhpcy5pdGVyKHRoaXMuZmlyc3QsZS5saW5lLGZ1bmN0aW9uKGUpe3QrPWUudGV4dC5sZW5ndGgrbn0pLHR9LGNvcHk6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFBhKHgodGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCx0aGlzLmxpbmVTZXAsdGhpcy5kaXJlY3Rpb24pO3JldHVybiB0LnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0LnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LHQuc2VsPXRoaXMuc2VsLHQuZXh0ZW5kPSExLGUmJih0Lmhpc3RvcnkudW5kb0RlcHRoPXRoaXMuaGlzdG9yeS51bmRvRGVwdGgsdC5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKSksdH0sbGlua2VkRG9jOmZ1bmN0aW9uKGUpe2V8fChlPXt9KTt2YXIgdD10aGlzLmZpcnN0LG49dGhpcy5maXJzdCt0aGlzLnNpemU7bnVsbCE9ZS5mcm9tJiZlLmZyb20+dCYmKHQ9ZS5mcm9tKSxudWxsIT1lLnRvJiZlLnRvPG4mJihuPWUudG8pO3ZhciByPW5ldyBQYSh4KHRoaXMsdCxuKSxlLm1vZGV8fHRoaXMubW9kZU9wdGlvbix0LHRoaXMubGluZVNlcCx0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGUuc2hhcmVkSGlzdCYmKHIuaGlzdG9yeT10aGlzLmhpc3RvcnkpLCh0aGlzLmxpbmtlZHx8KHRoaXMubGlua2VkPVtdKSkucHVzaCh7ZG9jOnIsc2hhcmVkSGlzdDplLnNoYXJlZEhpc3R9KSxyLmxpbmtlZD1be2RvYzp0aGlzLGlzUGFyZW50OiEwLHNoYXJlZEhpc3Q6ZS5zaGFyZWRIaXN0fV0sJG8ocixYbyh0aGlzKSkscn0sdW5saW5rRG9jOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZSBpbnN0YW5jZW9mIEtzJiYoZT1lLmRvYyksdGhpcy5saW5rZWQpZm9yKHZhciBuPTA7bjx0aGlzLmxpbmtlZC5sZW5ndGg7KytuKXt2YXIgcj10LmxpbmtlZFtuXTtpZihyLmRvYz09ZSl7dC5saW5rZWQuc3BsaWNlKG4sMSksZS51bmxpbmtEb2ModCksUW8oWG8odCkpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIG89W2UuaWRdO1FyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG8ucHVzaChlLmlkKX0sITApLGUuaGlzdG9yeT1uZXcgdG8obnVsbCksZS5oaXN0b3J5LmRvbmU9Zm8odGhpcy5oaXN0b3J5LmRvbmUsbyksZS5oaXN0b3J5LnVuZG9uZT1mbyh0aGlzLmhpc3RvcnkudW5kb25lLG8pfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24oZSl7UXIodGhpcyxlKX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfSxzcGxpdExpbmVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpbmVTZXA/ZS5zcGxpdCh0aGlzLmxpbmVTZXApOm9hKGUpfSxsaW5lU2VwYXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZVNlcHx8IlxuIn0sc2V0RGlyZWN0aW9uOmdyKGZ1bmN0aW9uKGUpeyJydGwiIT1lJiYoZT0ibHRyIiksZSE9dGhpcy5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj1lLHRoaXMuaXRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmRlcj1udWxsfSksdGhpcy5jbSYmZW8odGhpcy5jbSkpfSl9KSxQYS5wcm90b3R5cGUuZWFjaExpbmU9UGEucHJvdG90eXBlLml0ZXI7Zm9yKHZhciBOYT0wLEhhPSExLEZhPXszOiJQYXVzZSIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDYxOiI9Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDY6IioiLDEwNzoiPSIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTI3OiJEZWxldGUiLDE0NToiU2Nyb2xsTG9jayIsMTczOiItIiwxODY6IjsiLDE4NzoiPSIsMTg4OiIsIiwxODk6Ii0iLDE5MDoiLiIsMTkxOiIvIiwxOTI6ImAiLDIxOToiWyIsMjIwOiJcXCIsMjIxOiJdIiwyMjI6IiciLDYzMjMyOiJVcCIsNjMyMzM6IkRvd24iLDYzMjM0OiJMZWZ0Iiw2MzIzNToiUmlnaHQiLDYzMjcyOiJEZWxldGUiLDYzMjczOiJIb21lIiw2MzI3NToiRW5kIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMzAyOiJJbnNlcnQifSxCYT0wO0JhPDEwO0JhKyspRmFbQmErNDhdPUZhW0JhKzk2XT1TdHJpbmcoQmEpO2Zvcih2YXIgVWE9NjU7VWE8PTkwO1VhKyspRmFbVWFdPVN0cmluZy5mcm9tQ2hhckNvZGUoVWEpO2Zvcih2YXIgR2E9MTtHYTw9MTI7R2ErKylGYVtHYSsxMTFdPUZhW0dhKzYzMjM1XT0iRiIrR2E7dmFyIHphPXt9O3phLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIixFc2M6InNpbmdsZVNlbGVjdGlvbiJ9LHphLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtVXAiOiJnb0xpbmVVcCIsIkN0cmwtRG93biI6ImdvTGluZURvd24iLCJDdHJsLUxlZnQiOiJnb0dyb3VwTGVmdCIsIkN0cmwtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJBbHQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQWx0LVJpZ2h0IjoiZ29MaW5lRW5kIiwiQ3RybC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkN0cmwtUyI6InNhdmUiLCJDdHJsLUYiOiJmaW5kIiwiQ3RybC1HIjoiZmluZE5leHQiLCJTaGlmdC1DdHJsLUciOiJmaW5kUHJldiIsIlNoaWZ0LUN0cmwtRiI6InJlcGxhY2UiLCJTaGlmdC1DdHJsLVIiOiJyZXBsYWNlQWxsIiwiQ3RybC1bIjoiaW5kZW50TGVzcyIsIkN0cmwtXSI6ImluZGVudE1vcmUiLCJDdHJsLVUiOiJ1bmRvU2VsZWN0aW9uIiwiU2hpZnQtQ3RybC1VIjoicmVkb1NlbGVjdGlvbiIsIkFsdC1VIjoicmVkb1NlbGVjdGlvbiIsZmFsbHRocm91Z2g6ImJhc2ljIn0semEuZW1hY3N5PXsiQ3RybC1GIjoiZ29DaGFyUmlnaHQiLCJDdHJsLUIiOiJnb0NoYXJMZWZ0IiwiQ3RybC1QIjoiZ29MaW5lVXAiLCJDdHJsLU4iOiJnb0xpbmVEb3duIiwiQWx0LUYiOiJnb1dvcmRSaWdodCIsIkFsdC1CIjoiZ29Xb3JkTGVmdCIsIkN0cmwtQSI6ImdvTGluZVN0YXJ0IiwiQ3RybC1FIjoiZ29MaW5lRW5kIiwiQ3RybC1WIjoiZ29QYWdlRG93biIsIlNoaWZ0LUN0cmwtViI6ImdvUGFnZVVwIiwiQ3RybC1EIjoiZGVsQ2hhckFmdGVyIiwiQ3RybC1IIjoiZGVsQ2hhckJlZm9yZSIsIkFsdC1EIjoiZGVsV29yZEFmdGVyIiwiQWx0LUJhY2tzcGFjZSI6ImRlbFdvcmRCZWZvcmUiLCJDdHJsLUsiOiJraWxsTGluZSIsIkN0cmwtVCI6InRyYW5zcG9zZUNoYXJzIiwiQ3RybC1PIjoib3BlbkxpbmUifSx6YS5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtSG9tZSI6ImdvRG9jU3RhcnQiLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZUxlZnQiLCJDbWQtUmlnaHQiOiJnb0xpbmVSaWdodCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsV3JhcHBlZExpbmVMZWZ0IiwiQ21kLURlbGV0ZSI6ImRlbFdyYXBwZWRMaW5lUmlnaHQiLCJDbWQtVSI6InVuZG9TZWxlY3Rpb24iLCJTaGlmdC1DbWQtVSI6InJlZG9TZWxlY3Rpb24iLCJDdHJsLVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIixmYWxsdGhyb3VnaDpbImJhc2ljIiwiZW1hY3N5Il19LHphLmRlZmF1bHQ9RGk/emEubWFjRGVmYXVsdDp6YS5wY0RlZmF1bHQ7dmFyIFZhPXtzZWxlY3RBbGw6TG8sc2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNldFNlbGVjdGlvbihlLmdldEN1cnNvcigiYW5jaG9yIiksZS5nZXRDdXJzb3IoImhlYWQiKSxXaSl9LGtpbGxMaW5lOmZ1bmN0aW9uKGUpe3JldHVybiBwcyhlLGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkoKSl7dmFyIG49UihlLmRvYyx0LmhlYWQubGluZSkudGV4dC5sZW5ndGg7cmV0dXJuIHQuaGVhZC5jaD09biYmdC5oZWFkLmxpbmU8ZS5sYXN0TGluZSgpP3tmcm9tOnQuaGVhZCx0bzpJKHQuaGVhZC5saW5lKzEsMCl9Ontmcm9tOnQuaGVhZCx0bzpJKHQuaGVhZC5saW5lLG4pfX1yZXR1cm57ZnJvbTp0LmZyb20oKSx0bzp0LnRvKCl9fSl9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHBzKGUsZnVuY3Rpb24odCl7cmV0dXJue2Zyb206SSh0LmZyb20oKS5saW5lLDApLHRvOkcoZS5kb2MsSSh0LnRvKCkubGluZSsxLDApKX19KX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHBzKGUsZnVuY3Rpb24oZSl7cmV0dXJue2Zyb206SShlLmZyb20oKS5saW5lLDApLHRvOmUuZnJvbSgpfX0pfSxkZWxXcmFwcGVkTGluZUxlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHBzKGUsZnVuY3Rpb24odCl7dmFyIG49ZS5jaGFyQ29vcmRzKHQuaGVhZCwiZGl2IikudG9wKzU7cmV0dXJue2Zyb206ZS5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOm59LCJkaXYiKSx0bzp0LmZyb20oKX19KX0sZGVsV3JhcHBlZExpbmVSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gcHMoZSxmdW5jdGlvbih0KXt2YXIgbj1lLmNoYXJDb29yZHModC5oZWFkLCJkaXYiKS50b3ArNSxyPWUuY29vcmRzQ2hhcih7bGVmdDplLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOm59LCJkaXYiKTtyZXR1cm57ZnJvbTp0LmZyb20oKSx0bzpyfX0pfSx1bmRvOmZ1bmN0aW9uKGUpe3JldHVybiBlLnVuZG8oKX0scmVkbzpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWRvKCl9LHVuZG9TZWxlY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUudW5kb1NlbGVjdGlvbigpfSxyZWRvU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZG9TZWxlY3Rpb24oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb24oSShlLmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uKEkoZS5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbih0KXtyZXR1cm4gYnMoZSx0LmhlYWQubGluZSl9LHtvcmlnaW46Iittb3ZlIixiaWFzOjF9KX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24odCl7cmV0dXJuIHlzKGUsdC5oZWFkKX0se29yaWdpbjoiK21vdmUiLGJpYXM6MX0pfSxnb0xpbmVFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHQpe3JldHVybiBFcyhlLHQuaGVhZC5saW5lKX0se29yaWdpbjoiK21vdmUiLGJpYXM6LTF9KX0sZ29MaW5lUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHQpe3ZhciBuPWUuY3Vyc29yQ29vcmRzKHQuaGVhZCwiZGl2IikudG9wKzU7cmV0dXJuIGUuY29vcmRzQ2hhcih7bGVmdDplLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOm59LCJkaXYiKX0scWkpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbih0KXt2YXIgbj1lLmN1cnNvckNvb3Jkcyh0LmhlYWQsImRpdiIpLnRvcCs1O3JldHVybiBlLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6bn0sImRpdiIpfSxxaSl9LGdvTGluZUxlZnRTbWFydDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24odCl7dmFyIG49ZS5jdXJzb3JDb29yZHModC5oZWFkLCJkaXYiKS50b3ArNSxyPWUuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpufSwiZGl2Iik7cmV0dXJuIHIuY2g8ZS5nZXRMaW5lKHIubGluZSkuc2VhcmNoKC9cUy8pP3lzKGUsdC5oZWFkKTpyfSxxaSl9LGdvTGluZVVwOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVWKC0xLCJsaW5lIil9LGdvTGluZURvd246ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVWKDEsInBhZ2UiKX0sZ29DaGFyTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgtMSwiY29sdW1uIil9LGdvQ29sdW1uUmlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVIKDEsImdyb3VwIil9LGdvR3JvdXBMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgtMSwiY2hhciIpfSxkZWxDaGFyQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJ3b3JkIil9LGRlbEdyb3VwQmVmb3JlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGVudFNlbGVjdGlvbigic21hcnQiKX0saW5kZW50TW9yZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2VTZWxlY3Rpb24oIlx0Iil9LGluc2VydFNvZnRUYWI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49ZS5saXN0U2VsZWN0aW9ucygpLHI9ZS5vcHRpb25zLnRhYlNpemUsbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dLmZyb20oKSxpPWQoZS5nZXRMaW5lKHMubGluZSkscy5jaCxyKTt0LnB1c2goZihyLWklcikpfWUucmVwbGFjZVNlbGVjdGlvbnModCl9LGRlZmF1bHRUYWI6ZnVuY3Rpb24oZSl7ZS5zb21ldGhpbmdTZWxlY3RlZCgpP2UuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTplLmV4ZWNDb21tYW5kKCJpbnNlcnRUYWIiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZyKGUsZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49W10scj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uZW1wdHkoKSl7dmFyIG89dFtyXS5oZWFkLHM9UihlLmRvYyxvLmxpbmUpLnRleHQ7aWYocylpZihvLmNoPT1zLmxlbmd0aCYmKG89bmV3IEkoby5saW5lLG8uY2gtMSkpLG8uY2g+MClvPW5ldyBJKG8ubGluZSxvLmNoKzEpLGUucmVwbGFjZVJhbmdlKHMuY2hhckF0KG8uY2gtMSkrcy5jaGFyQXQoby5jaC0yKSxJKG8ubGluZSxvLmNoLTIpLG8sIit0cmFuc3Bvc2UiKTtlbHNlIGlmKG8ubGluZT5lLmRvYy5maXJzdCl7dmFyIGk9UihlLmRvYyxvLmxpbmUtMSkudGV4dDtpJiYobz1uZXcgSShvLmxpbmUsMSksZS5yZXBsYWNlUmFuZ2Uocy5jaGFyQXQoMCkrZS5kb2MubGluZVNlcGFyYXRvcigpK2kuY2hhckF0KGkubGVuZ3RoLTEpLEkoby5saW5lLTEsaS5sZW5ndGgtMSksbywiK3RyYW5zcG9zZSIpKX1uLnB1c2gobmV3IExhKG8sbykpfWUuc2V0U2VsZWN0aW9ucyhuKX0pfSxuZXdsaW5lQW5kSW5kZW50OmZ1bmN0aW9uKGUpe3JldHVybiBmcihlLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUubGlzdFNlbGVjdGlvbnMoKSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pZS5yZXBsYWNlUmFuZ2UoZS5kb2MubGluZVNlcGFyYXRvcigpLHRbbl0uYW5jaG9yLHRbbl0uaGVhZCwiK2lucHV0Iik7dD1lLmxpc3RTZWxlY3Rpb25zKCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS5pbmRlbnRMaW5lKHRbcl0uZnJvbSgpLmxpbmUsbnVsbCwhMCk7S24oZSl9KX0sb3BlbkxpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJzdGFydCIpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9nZ2xlT3ZlcndyaXRlKCl9fSxXYT1uZXcgQmksWWE9bnVsbCxxYT1mdW5jdGlvbihlLHQsbil7dGhpcy50aW1lPWUsdGhpcy5wb3M9dCx0aGlzLmJ1dHRvbj1ufTtxYS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudGltZSs0MDA+ZSYmMD09UCh0LHRoaXMucG9zKSYmbj09dGhpcy5idXR0b259O3ZhciBLYSxYYSwkYT17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19LFFhPXt9LEphPXt9O0tzLmRlZmF1bHRzPVFhLEtzLm9wdGlvbkhhbmRsZXJzPUphO3ZhciBaYT1bXTtLcy5kZWZpbmVJbml0SG9vaz1mdW5jdGlvbihlKXtyZXR1cm4gWmEucHVzaChlKX07dmFyIGVsPW51bGwsdGw9ZnVuY3Rpb24oZSl7dGhpcy5jbT1lLHRoaXMubGFzdEFuY2hvck5vZGU9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0PXRoaXMubGFzdEZvY3VzTm9kZT10aGlzLmxhc3RGb2N1c09mZnNldD1udWxsLHRoaXMucG9sbGluZz1uZXcgQmksdGhpcy5jb21wb3Npbmc9bnVsbCx0aGlzLmdyYWNlUGVyaW9kPSExLHRoaXMucmVhZERPTVRpbWVvdXQ9bnVsbH07dGwucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtpZighamUobyxlKSl7aWYoby5zb21ldGhpbmdTZWxlY3RlZCgpKVFzKHtsaW5lV2lzZTohMSx0ZXh0Om8uZ2V0U2VsZWN0aW9ucygpfSksImN1dCI9PWUudHlwZSYmby5yZXBsYWNlU2VsZWN0aW9uKCIiLG51bGwsImN1dCIpO2Vsc2V7aWYoIW8ub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpcmV0dXJuO3ZhciB0PXRpKG8pO1FzKHtsaW5lV2lzZTohMCx0ZXh0OnQudGV4dH0pLCJjdXQiPT1lLnR5cGUmJm8ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7by5zZXRTZWxlY3Rpb25zKHQucmFuZ2VzLDAsV2kpLG8ucmVwbGFjZVNlbGVjdGlvbigiIixudWxsLCJjdXQiKX0pfWlmKGUuY2xpcGJvYXJkRGF0YSl7ZS5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpO3ZhciBuPWVsLnRleHQuam9pbigiXG4iKTtpZihlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsbiksZS5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKT09bilyZXR1cm4gdm9pZCBlLnByZXZlbnREZWZhdWx0KCl9dmFyIGk9cmkoKSxhPWkuZmlyc3RDaGlsZDtvLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShpLG8uZGlzcGxheS5saW5lU3BhY2UuZmlyc3RDaGlsZCksYS52YWx1ZT1lbC50ZXh0LmpvaW4oIlxuIik7dmFyIGw9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtGaShhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChpKSxsLmZvY3VzKCksbD09cyYmci5zaG93UHJpbWFyeVNlbGVjdGlvbigpfSw1MCl9fXZhciBuPXRoaXMscj10aGlzLG89ci5jbSxzPXIuZGl2PWUubGluZURpdjtuaShzLG8ub3B0aW9ucy5zcGVsbGNoZWNrLG8ub3B0aW9ucy5hdXRvY29ycmVjdCxvLm9wdGlvbnMuYXV0b2NhcGl0YWxpemUpLG5hKHMsInBhc3RlIixmdW5jdGlvbihlKXtqZShvLGUpfHxacyhlLG8pfHx5aTw9MTEmJnNldFRpbWVvdXQobXIobyxmdW5jdGlvbigpe3JldHVybiBuLnVwZGF0ZUZyb21ET00oKX0pLDIwKX0pLG5hKHMsImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKGUpe24uY29tcG9zaW5nPXtkYXRhOmUuZGF0YSxkb25lOiExfX0pLG5hKHMsImNvbXBvc2l0aW9udXBkYXRlIixmdW5jdGlvbihlKXtuLmNvbXBvc2luZ3x8KG4uY29tcG9zaW5nPXtkYXRhOmUuZGF0YSxkb25lOiExfSl9KSxuYShzLCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24oZSl7bi5jb21wb3NpbmcmJihlLmRhdGEhPW4uY29tcG9zaW5nLmRhdGEmJm4ucmVhZEZyb21ET01Tb29uKCksbi5jb21wb3NpbmcuZG9uZT0hMCl9KSxuYShzLCJ0b3VjaHN0YXJ0IixmdW5jdGlvbigpe3JldHVybiByLmZvcmNlQ29tcG9zaXRpb25FbmQoKX0pLG5hKHMsImlucHV0IixmdW5jdGlvbigpe24uY29tcG9zaW5nfHxuLnJlYWRGcm9tRE9NU29vbigpfSksbmEocywiY29weSIsdCksbmEocywiY3V0Iix0KX0sdGwucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT14bih0aGlzLmNtLCExKTtyZXR1cm4gZS5mb2N1cz10aGlzLmNtLnN0YXRlLmZvY3VzZWQsZX0sdGwucHJvdG90eXBlLnNob3dTZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXtlJiZ0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgmJigoZS5mb2N1c3x8dCkmJnRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKSx0aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoZSkpfSx0bC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY20uZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCl9LHRsLnByb3RvdHlwZS5zaG93UHJpbWFyeVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0U2VsZWN0aW9uKCksdD10aGlzLmNtLG49dC5kb2Muc2VsLnByaW1hcnkoKSxyPW4uZnJvbSgpLG89bi50bygpO2lmKHQuZGlzcGxheS52aWV3VG89PXQuZGlzcGxheS52aWV3RnJvbXx8ci5saW5lPj10LmRpc3BsYXkudmlld1RvfHxvLmxpbmU8dC5kaXNwbGF5LnZpZXdGcm9tKXJldHVybiB2b2lkIGUucmVtb3ZlQWxsUmFuZ2VzKCk7dmFyIHM9Y2kodCxlLmFuY2hvck5vZGUsZS5hbmNob3JPZmZzZXQpLGk9Y2kodCxlLmZvY3VzTm9kZSxlLmZvY3VzT2Zmc2V0KTtpZighc3x8cy5iYWR8fCFpfHxpLmJhZHx8MCE9UChCKHMsaSkscil8fDAhPVAoRihzLGkpLG8pKXt2YXIgYT10LmRpc3BsYXkudmlldyxsPXIubGluZT49dC5kaXNwbGF5LnZpZXdGcm9tJiZpaSh0LHIpfHx7bm9kZTphWzBdLm1lYXN1cmUubWFwWzJdLG9mZnNldDowfSx1PW8ubGluZTx0LmRpc3BsYXkudmlld1RvJiZpaSh0LG8pO2lmKCF1KXt2YXIgYz1hW2EubGVuZ3RoLTFdLm1lYXN1cmUsZD1jLm1hcHM/Yy5tYXBzW2MubWFwcy5sZW5ndGgtMV06Yy5tYXA7dT17bm9kZTpkW2QubGVuZ3RoLTFdLG9mZnNldDpkW2QubGVuZ3RoLTJdLWRbZC5sZW5ndGgtM119fWlmKCFsfHwhdSlyZXR1cm4gdm9pZCBlLnJlbW92ZUFsbFJhbmdlcygpO3ZhciBfLHA9ZS5yYW5nZUNvdW50JiZlLmdldFJhbmdlQXQoMCk7dHJ5e189SWkobC5ub2RlLGwub2Zmc2V0LHUub2Zmc2V0LHUubm9kZSl9Y2F0Y2goZSl7fV8mJighbWkmJnQuc3RhdGUuZm9jdXNlZD8oZS5jb2xsYXBzZShsLm5vZGUsbC5vZmZzZXQpLF8uY29sbGFwc2VkfHwoZS5yZW1vdmVBbGxSYW5nZXMoKSxlLmFkZFJhbmdlKF8pKSk6KGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZShfKSkscCYmbnVsbD09ZS5hbmNob3JOb2RlP2UuYWRkUmFuZ2UocCk6bWkmJnRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpKSx0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCl9fSx0bC5wcm90b3R5cGUuc3RhcnRHcmFjZVBlcmlvZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2QpLHRoaXMuZ3JhY2VQZXJpb2Q9c2V0VGltZW91dChmdW5jdGlvbigpe2UuZ3JhY2VQZXJpb2Q9ITEsZS5zZWxlY3Rpb25DaGFuZ2VkKCkmJmUuY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMH0pfSwyMCl9LHRsLnByb3RvdHlwZS5zaG93TXVsdGlwbGVTZWxlY3Rpb25zPWZ1bmN0aW9uKGUpe24odGhpcy5jbS5kaXNwbGF5LmN1cnNvckRpdixlLmN1cnNvcnMpLG4odGhpcy5jbS5kaXNwbGF5LnNlbGVjdGlvbkRpdixlLnNlbGVjdGlvbil9LHRsLnByb3RvdHlwZS5yZW1lbWJlclNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0U2VsZWN0aW9uKCk7dGhpcy5sYXN0QW5jaG9yTm9kZT1lLmFuY2hvck5vZGUsdGhpcy5sYXN0QW5jaG9yT2Zmc2V0PWUuYW5jaG9yT2Zmc2V0LHRoaXMubGFzdEZvY3VzTm9kZT1lLmZvY3VzTm9kZSx0aGlzLmxhc3RGb2N1c09mZnNldD1lLmZvY3VzT2Zmc2V0fSx0bC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvbigpO2lmKCFlLnJhbmdlQ291bnQpcmV0dXJuITE7dmFyIHQ9ZS5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO3JldHVybiBzKHRoaXMuZGl2LHQpfSx0bC5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXsibm9jdXJzb3IiIT10aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkmJih0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCl8fHRoaXMuc2hvd1NlbGVjdGlvbih0aGlzLnByZXBhcmVTZWxlY3Rpb24oKSwhMCksdGhpcy5kaXYuZm9jdXMoKSl9LHRsLnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5kaXYuYmx1cigpfSx0bC5wcm90b3R5cGUuZ2V0RmllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZ9LHRsLnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHRsLnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3QuY20uc3RhdGUuZm9jdXNlZCYmKHQucG9sbFNlbGVjdGlvbigpLHQucG9sbGluZy5zZXQodC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCxlKSl9dmFyIHQ9dGhpczt0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCk/dGhpcy5wb2xsU2VsZWN0aW9uKCk6ZnIodGhpcy5jbSxmdW5jdGlvbigpe3JldHVybiB0LmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITB9KSx0aGlzLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZSl9LHRsLnByb3RvdHlwZS5zZWxlY3Rpb25DaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gZS5hbmNob3JOb2RlIT10aGlzLmxhc3RBbmNob3JOb2RlfHxlLmFuY2hvck9mZnNldCE9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0fHxlLmZvY3VzTm9kZSE9dGhpcy5sYXN0Rm9jdXNOb2RlfHxlLmZvY3VzT2Zmc2V0IT10aGlzLmxhc3RGb2N1c09mZnNldH0sdGwucHJvdG90eXBlLnBvbGxTZWxlY3Rpb249ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLnJlYWRET01UaW1lb3V0JiYhdGhpcy5ncmFjZVBlcmlvZCYmdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpe3ZhciBlPXRoaXMuZ2V0U2VsZWN0aW9uKCksdD10aGlzLmNtO2lmKHhpJiZBaSYmdGhpcy5jbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoJiZhaShlLmFuY2hvck5vZGUpKXJldHVybiB0aGlzLmNtLnRyaWdnZXJPbktleURvd24oe3R5cGU6ImtleWRvd24iLGtleUNvZGU6OCxwcmV2ZW50RGVmYXVsdDpNYXRoLmFic30pLHRoaXMuYmx1cigpLHZvaWQgdGhpcy5mb2N1cygpO2lmKCF0aGlzLmNvbXBvc2luZyl7dGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO3ZhciBuPWNpKHQsZS5hbmNob3JOb2RlLGUuYW5jaG9yT2Zmc2V0KSxyPWNpKHQsZS5mb2N1c05vZGUsZS5mb2N1c09mZnNldCk7biYmciYmZnIodCxmdW5jdGlvbigpe1RvKHQuZG9jLFVyKG4sciksV2kpLChuLmJhZHx8ci5iYWQpJiYodC5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwKX0pfX19LHRsLnByb3RvdHlwZS5wb2xsQ29udGVudD1mdW5jdGlvbigpe251bGwhPXRoaXMucmVhZERPTVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCksdGhpcy5yZWFkRE9NVGltZW91dD1udWxsKTt2YXIgZT10aGlzLmNtLHQ9ZS5kaXNwbGF5LG49ZS5kb2Muc2VsLnByaW1hcnkoKSxyPW4uZnJvbSgpLG89bi50bygpO2lmKDA9PXIuY2gmJnIubGluZT5lLmZpcnN0TGluZSgpJiYocj1JKHIubGluZS0xLFIoZS5kb2Msci5saW5lLTEpLmxlbmd0aCkpLG8uY2g9PVIoZS5kb2Msby5saW5lKS50ZXh0Lmxlbmd0aCYmby5saW5lPGUubGFzdExpbmUoKSYmKG89SShvLmxpbmUrMSwwKSksci5saW5lPHQudmlld0Zyb218fG8ubGluZT50LnZpZXdUby0xKXJldHVybiExO3ZhciBzLGksYTtyLmxpbmU9PXQudmlld0Zyb218fDA9PShzPVJuKGUsci5saW5lKSk/KGk9RCh0LnZpZXdbMF0ubGluZSksYT10LnZpZXdbMF0ubm9kZSk6KGk9RCh0LnZpZXdbc10ubGluZSksYT10LnZpZXdbcy0xXS5ub2RlLm5leHRTaWJsaW5nKTt2YXIgbCx1LGM9Um4oZSxvLmxpbmUpO2lmKGM9PXQudmlldy5sZW5ndGgtMT8obD10LnZpZXdUby0xLHU9dC5saW5lRGl2Lmxhc3RDaGlsZCk6KGw9RCh0LnZpZXdbYysxXS5saW5lKS0xLHU9dC52aWV3W2MrMV0ubm9kZS5wcmV2aW91c1NpYmxpbmcpLCFhKXJldHVybiExO2Zvcih2YXIgZD1lLmRvYy5zcGxpdExpbmVzKHVpKGUsYSx1LGksbCkpLF89aihlLmRvYyxJKGksMCksSShsLFIoZS5kb2MsbCkudGV4dC5sZW5ndGgpKTtkLmxlbmd0aD4xJiZfLmxlbmd0aD4xOylpZihtKGQpPT1tKF8pKWQucG9wKCksXy5wb3AoKSxsLS07ZWxzZXtpZihkWzBdIT1fWzBdKWJyZWFrO2Quc2hpZnQoKSxfLnNoaWZ0KCksaSsrfWZvcih2YXIgcD0wLGY9MCxoPWRbMF0sZz1fWzBdLGI9TWF0aC5taW4oaC5sZW5ndGgsZy5sZW5ndGgpO3A8YiYmaC5jaGFyQ29kZUF0KHApPT1nLmNoYXJDb2RlQXQocCk7KSsrcDtmb3IodmFyIEU9bShkKSx5PW0oXyksdj1NYXRoLm1pbihFLmxlbmd0aC0oMT09ZC5sZW5ndGg/cDowKSx5Lmxlbmd0aC0oMT09Xy5sZW5ndGg/cDowKSk7Zjx2JiZFLmNoYXJDb2RlQXQoRS5sZW5ndGgtZi0xKT09eS5jaGFyQ29kZUF0KHkubGVuZ3RoLWYtMSk7KSsrZjtpZigxPT1kLmxlbmd0aCYmMT09Xy5sZW5ndGgmJmk9PXIubGluZSlmb3IoO3AmJnA+ci5jaCYmRS5jaGFyQ29kZUF0KEUubGVuZ3RoLWYtMSk9PXkuY2hhckNvZGVBdCh5Lmxlbmd0aC1mLTEpOylwLS0sZisrO2RbZC5sZW5ndGgtMV09RS5zbGljZSgwLEUubGVuZ3RoLWYpLnJlcGxhY2UoL15cdTIwMGIrLywiIiksZFswXT1kWzBdLnNsaWNlKHApLnJlcGxhY2UoL1x1MjAwYiskLywiIik7dmFyIFQ9SShpLHApLEE9SShsLF8ubGVuZ3RoP20oXykubGVuZ3RoLWY6MCk7cmV0dXJuIGQubGVuZ3RoPjF8fGRbMF18fFAoVCxBKT8oSG8oZS5kb2MsZCxULEEsIitpbnB1dCIpLCEwKTp2b2lkIDB9LHRsLnByb3RvdHlwZS5lbnN1cmVQb2xsZWQ9ZnVuY3Rpb24oKXt0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKX0sdGwucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9LHRsLnByb3RvdHlwZS5mb3JjZUNvbXBvc2l0aW9uRW5kPWZ1bmN0aW9uKCl7dGhpcy5jb21wb3NpbmcmJihjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCksdGhpcy5jb21wb3Npbmc9bnVsbCx0aGlzLnVwZGF0ZUZyb21ET00oKSx0aGlzLmRpdi5ibHVyKCksdGhpcy5kaXYuZm9jdXMoKSl9LHRsLnByb3RvdHlwZS5yZWFkRnJvbURPTVNvb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO251bGw9PXRoaXMucmVhZERPTVRpbWVvdXQmJih0aGlzLnJlYWRET01UaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnJlYWRET01UaW1lb3V0PW51bGwsZS5jb21wb3Npbmcpe2lmKCFlLmNvbXBvc2luZy5kb25lKXJldHVybjtlLmNvbXBvc2luZz1udWxsfWUudXBkYXRlRnJvbURPTSgpfSw4MCkpfSx0bC5wcm90b3R5cGUudXBkYXRlRnJvbURPTT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuY20uaXNSZWFkT25seSgpJiZ0aGlzLnBvbGxDb250ZW50KCl8fGZyKHRoaXMuY20sZnVuY3Rpb24oKXtyZXR1cm4gYnIoZS5jbSl9KX0sdGwucHJvdG90eXBlLnNldFVuZWRpdGFibGU9ZnVuY3Rpb24oZSl7ZS5jb250ZW50RWRpdGFibGU9ImZhbHNlIn0sdGwucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24oZSl7MD09ZS5jaGFyQ29kZXx8dGhpcy5jb21wb3Npbmd8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbS5pc1JlYWRPbmx5KCl8fG1yKHRoaXMuY20sSnMpKHRoaXMuY20sU3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1lLmNoYXJDb2RlP2Uua2V5Q29kZTplLmNoYXJDb2RlKSwwKSl9LHRsLnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQ9ZnVuY3Rpb24oZSl7dGhpcy5kaXYuY29udGVudEVkaXRhYmxlPVN0cmluZygibm9jdXJzb3IiIT1lKX0sdGwucHJvdG90eXBlLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oKXt9LHRsLnByb3RvdHlwZS5yZXNldFBvc2l0aW9uPWZ1bmN0aW9uKCl7fSx0bC5wcm90b3R5cGUubmVlZHNDb250ZW50QXR0cmlidXRlPSEwO3ZhciBubD1mdW5jdGlvbihlKXt0aGlzLmNtPWUsdGhpcy5wcmV2SW5wdXQ9IiIsdGhpcy5wb2xsaW5nRmFzdD0hMSx0aGlzLnBvbGxpbmc9bmV3IEJpLHRoaXMuaGFzU2VsZWN0aW9uPSExLHRoaXMuY29tcG9zaW5nPW51bGx9O25sLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aWYoIWplKG8sZSkpe2lmKG8uc29tZXRoaW5nU2VsZWN0ZWQoKSlRcyh7bGluZVdpc2U6ITEsdGV4dDpvLmdldFNlbGVjdGlvbnMoKX0pO2Vsc2V7aWYoIW8ub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpcmV0dXJuO3ZhciB0PXRpKG8pO1FzKHtsaW5lV2lzZTohMCx0ZXh0OnQudGV4dH0pLCJjdXQiPT1lLnR5cGU/by5zZXRTZWxlY3Rpb25zKHQucmFuZ2VzLG51bGwsV2kpOihyLnByZXZJbnB1dD0iIixzLnZhbHVlPXQudGV4dC5qb2luKCJcbiIpLEZpKHMpKX0iY3V0Ij09ZS50eXBlJiYoby5zdGF0ZS5jdXRJbmNvbWluZz0rbmV3IERhdGUpfX12YXIgbj10aGlzLHI9dGhpcyxvPXRoaXMuY207dGhpcy5jcmVhdGVGaWVsZChlKTt2YXIgcz10aGlzLnRleHRhcmVhO2Uud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLGUud3JhcHBlci5maXJzdENoaWxkKSxqaSYmKHMuc3R5bGUud2lkdGg9IjBweCIpLG5hKHMsImlucHV0IixmdW5jdGlvbigpe0VpJiZ5aT49OSYmbi5oYXNTZWxlY3Rpb24mJihuLmhhc1NlbGVjdGlvbj1udWxsKSxyLnBvbGwoKX0pLG5hKHMsInBhc3RlIixmdW5jdGlvbihlKXtqZShvLGUpfHxacyhlLG8pfHwoby5zdGF0ZS5wYXN0ZUluY29taW5nPStuZXcgRGF0ZSxyLmZhc3RQb2xsKCkpfSksbmEocywiY3V0Iix0KSxuYShzLCJjb3B5Iix0KSxuYShlLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24odCl7aWYoIVB0KGUsdCkmJiFqZShvLHQpKXtpZighcy5kaXNwYXRjaEV2ZW50KXJldHVybiBvLnN0YXRlLnBhc3RlSW5jb21pbmc9K25ldyBEYXRlLHZvaWQgci5mb2N1cygpO3ZhciBuPW5ldyBFdmVudCgicGFzdGUiKTtuLmNsaXBib2FyZERhdGE9dC5jbGlwYm9hcmREYXRhLHMuZGlzcGF0Y2hFdmVudChuKX19KSxuYShlLmxpbmVTcGFjZSwic2VsZWN0c3RhcnQiLGZ1bmN0aW9uKHQpe1B0KGUsdCl8fHdlKHQpfSksbmEocywiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXt2YXIgZT1vLmdldEN1cnNvcigiZnJvbSIpO3IuY29tcG9zaW5nJiZyLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpLHIuY29tcG9zaW5nPXtzdGFydDplLHJhbmdlOm8ubWFya1RleHQoZSxvLmdldEN1cnNvcigidG8iKSx7Y2xhc3NOYW1lOiJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KX19KSxuYShzLCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24oKXtyLmNvbXBvc2luZyYmKHIucG9sbCgpLHIuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksci5jb21wb3Npbmc9bnVsbCl9KX0sbmwucHJvdG90eXBlLmNyZWF0ZUZpZWxkPWZ1bmN0aW9uKGUpe3RoaXMud3JhcHBlcj1yaSgpLHRoaXMudGV4dGFyZWE9dGhpcy53cmFwcGVyLmZpcnN0Q2hpbGR9LG5sLnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jbSx0PWUuZGlzcGxheSxuPWUuZG9jLHI9eG4oZSk7aWYoZS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBvPWNuKGUsbi5zZWwucHJpbWFyeSgpLmhlYWQsImRpdiIpLHM9dC53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IudGVUb3A9TWF0aC5tYXgoMCxNYXRoLm1pbih0LndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG8udG9wK2kudG9wLXMudG9wKSksci50ZUxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbih0LndyYXBwZXIuY2xpZW50V2lkdGgtMTAsby5sZWZ0K2kubGVmdC1zLmxlZnQpKX1yZXR1cm4gcn0sbmwucHJvdG90eXBlLnNob3dTZWxlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbSxyPXQuZGlzcGxheTtuKHIuY3Vyc29yRGl2LGUuY3Vyc29ycyksbihyLnNlbGVjdGlvbkRpdixlLnNlbGVjdGlvbiksbnVsbCE9ZS50ZVRvcCYmKHRoaXMud3JhcHBlci5zdHlsZS50b3A9ZS50ZVRvcCsicHgiLHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0PWUudGVMZWZ0KyJweCIpfSxubC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuY29udGV4dE1lbnVQZW5kaW5nJiYhdGhpcy5jb21wb3Npbmcpe3ZhciB0PXRoaXMuY207aWYodC5zb21ldGhpbmdTZWxlY3RlZCgpKXt0aGlzLnByZXZJbnB1dD0iIjt2YXIgbj10LmdldFNlbGVjdGlvbigpO3RoaXMudGV4dGFyZWEudmFsdWU9bix0LnN0YXRlLmZvY3VzZWQmJkZpKHRoaXMudGV4dGFyZWEpLEVpJiZ5aT49OSYmKHRoaXMuaGFzU2VsZWN0aW9uPW4pfWVsc2UgZXx8KHRoaXMucHJldklucHV0PXRoaXMudGV4dGFyZWEudmFsdWU9IiIsRWkmJnlpPj05JiYodGhpcy5oYXNTZWxlY3Rpb249bnVsbCkpfX0sbmwucHJvdG90eXBlLmdldEZpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dGFyZWF9LG5sLnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG5sLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe2lmKCJub2N1cnNvciIhPXRoaXMuY20ub3B0aW9ucy5yZWFkT25seSYmKCFMaXx8aSgpIT10aGlzLnRleHRhcmVhKSl0cnl7dGhpcy50ZXh0YXJlYS5mb2N1cygpfWNhdGNoKGUpe319LG5sLnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy50ZXh0YXJlYS5ibHVyKCl9LG5sLnByb3RvdHlwZS5yZXNldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy53cmFwcGVyLnN0eWxlLnRvcD10aGlzLndyYXBwZXIuc3R5bGUubGVmdD0wfSxubC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cz1mdW5jdGlvbigpe3RoaXMuc2xvd1BvbGwoKX0sbmwucHJvdG90eXBlLnNsb3dQb2xsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBvbGxpbmdGYXN0fHx0aGlzLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZnVuY3Rpb24oKXtlLnBvbGwoKSxlLmNtLnN0YXRlLmZvY3VzZWQmJmUuc2xvd1BvbGwoKX0pfSxubC5wcm90b3R5cGUuZmFzdFBvbGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bi5wb2xsKCl8fHQ/KG4ucG9sbGluZ0Zhc3Q9ITEsbi5zbG93UG9sbCgpKToodD0hMCxuLnBvbGxpbmcuc2V0KDYwLGUpKX12YXIgdD0hMSxuPXRoaXM7bi5wb2xsaW5nRmFzdD0hMCxuLnBvbGxpbmcuc2V0KDIwLGUpfSxubC5wcm90b3R5cGUucG9sbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmNtLG49dGhpcy50ZXh0YXJlYSxyPXRoaXMucHJldklucHV0O2lmKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nfHwhdC5zdGF0ZS5mb2N1c2VkfHxzYShuKSYmIXImJiF0aGlzLmNvbXBvc2luZ3x8dC5pc1JlYWRPbmx5KCl8fHQub3B0aW9ucy5kaXNhYmxlSW5wdXR8fHQuc3RhdGUua2V5U2VxKXJldHVybiExO3ZhciBvPW4udmFsdWU7aWYobz09ciYmIXQuc29tZXRoaW5nU2VsZWN0ZWQoKSlyZXR1cm4hMTtpZihFaSYmeWk+PTkmJnRoaXMuaGFzU2VsZWN0aW9uPT09b3x8RGkmJi9bXHVmNzAwLVx1ZjdmZl0vLnRlc3QobykpcmV0dXJuIHQuZGlzcGxheS5pbnB1dC5yZXNldCgpLCExO2lmKHQuZG9jLnNlbD09dC5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KXt2YXIgcz1vLmNoYXJDb2RlQXQoMCk7aWYoODIwMyE9c3x8cnx8KHI9IuKAiyIpLDg2NjY9PXMpcmV0dXJuIHRoaXMucmVzZXQoKSx0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRvIil9Zm9yKHZhciBpPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7aTxhJiZyLmNoYXJDb2RlQXQoaSk9PW8uY2hhckNvZGVBdChpKTspKytpO3JldHVybiBmcih0LGZ1bmN0aW9uKCl7SnModCxvLnNsaWNlKGkpLHIubGVuZ3RoLWksbnVsbCxlLmNvbXBvc2luZz8iKmNvbXBvc2UiOm51bGwpLG8ubGVuZ3RoPjFlM3x8by5pbmRleE9mKCJcbiIpPi0xP24udmFsdWU9ZS5wcmV2SW5wdXQ9IiI6ZS5wcmV2SW5wdXQ9byxlLmNvbXBvc2luZyYmKGUuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksZS5jb21wb3NpbmcucmFuZ2U9dC5tYXJrVGV4dChlLmNvbXBvc2luZy5zdGFydCx0LmdldEN1cnNvcigidG8iKSx7Y2xhc3NOYW1lOiJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KSl9KSwhMH0sbmwucHJvdG90eXBlLmVuc3VyZVBvbGxlZD1mdW5jdGlvbigpe3RoaXMucG9sbGluZ0Zhc3QmJnRoaXMucG9sbCgpJiYodGhpcy5wb2xsaW5nRmFzdD0hMSl9LG5sLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKCl7RWkmJnlpPj05JiYodGhpcy5oYXNTZWxlY3Rpb249bnVsbCksdGhpcy5mYXN0UG9sbCgpfSxubC5wcm90b3R5cGUub25Db250ZXh0TWVudT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7aWYobnVsbCE9aS5zZWxlY3Rpb25TdGFydCl7dmFyIGU9by5zb21ldGhpbmdTZWxlY3RlZCgpLHQ9IuKAiyIrKGU/aS52YWx1ZToiIik7aS52YWx1ZT0i4oeaIixpLnZhbHVlPXQsci5wcmV2SW5wdXQ9ZT8iIjoi4oCLIixpLnNlbGVjdGlvblN0YXJ0PTEsaS5zZWxlY3Rpb25FbmQ9dC5sZW5ndGgscy5zZWxGb3JDb250ZXh0TWVudT1vLmRvYy5zZWx9fWZ1bmN0aW9uIG4oKXtpZihyLmNvbnRleHRNZW51UGVuZGluZz09biYmKHIuY29udGV4dE1lbnVQZW5kaW5nPSExLHIud3JhcHBlci5zdHlsZS5jc3NUZXh0PWMsaS5zdHlsZS5jc3NUZXh0PXUsRWkmJnlpPDkmJnMuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3Aocy5zY3JvbGxlci5zY3JvbGxUb3A9bCksbnVsbCE9aS5zZWxlY3Rpb25TdGFydCkpeyghRWl8fEVpJiZ5aTw5KSYmdCgpO3ZhciBlPTAsYT1mdW5jdGlvbigpe3Muc2VsRm9yQ29udGV4dE1lbnU9PW8uZG9jLnNlbCYmMD09aS5zZWxlY3Rpb25TdGFydCYmaS5zZWxlY3Rpb25FbmQ+MCYmIuKAiyI9PXIucHJldklucHV0P21yKG8sTG8pKG8pOmUrKzwxMD9zLmRldGVjdGluZ1NlbGVjdEFsbD1zZXRUaW1lb3V0KGEsNTAwKToocy5zZWxGb3JDb250ZXh0TWVudT1udWxsLHMuaW5wdXQucmVzZXQoKSl9O3MuZGV0ZWN0aW5nU2VsZWN0QWxsPXNldFRpbWVvdXQoYSwyMDApfX12YXIgcj10aGlzLG89ci5jbSxzPW8uZGlzcGxheSxpPXIudGV4dGFyZWE7ci5jb250ZXh0TWVudVBlbmRpbmcmJnIuY29udGV4dE1lbnVQZW5kaW5nKCk7dmFyIGE9U24obyxlKSxsPXMuc2Nyb2xsZXIuc2Nyb2xsVG9wO2lmKGEmJiFDaSl7by5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSYmLTE9PW8uZG9jLnNlbC5jb250YWlucyhhKSYmbXIobyxUbykoby5kb2MsVXIoYSksV2kpO3ZhciB1PWkuc3R5bGUuY3NzVGV4dCxjPXIud3JhcHBlci5zdHlsZS5jc3NUZXh0LGQ9ci53cmFwcGVyLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyLndyYXBwZXIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IHN0YXRpYyIsaS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7XG4gICAgICB0b3A6ICIrKGUuY2xpZW50WS1kLnRvcC01KSsicHg7IGxlZnQ6ICIrKGUuY2xpZW50WC1kLmxlZnQtNSkrInB4O1xuICAgICAgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIisoRWk/InJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSI6InRyYW5zcGFyZW50IikrIjtcbiAgICAgIG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7Ijt2YXIgXztpZih2aSYmKF89d2luZG93LnNjcm9sbFkpLHMuaW5wdXQuZm9jdXMoKSx2aSYmd2luZG93LnNjcm9sbFRvKG51bGwsXykscy5pbnB1dC5yZXNldCgpLG8uc29tZXRoaW5nU2VsZWN0ZWQoKXx8KGkudmFsdWU9ci5wcmV2SW5wdXQ9IiAiKSxyLmNvbnRleHRNZW51UGVuZGluZz1uLHMuc2VsRm9yQ29udGV4dE1lbnU9by5kb2Muc2VsLGNsZWFyVGltZW91dChzLmRldGVjdGluZ1NlbGVjdEFsbCksRWkmJnlpPj05JiZ0KCksTmkpe0llKGUpO3ZhciBwPWZ1bmN0aW9uKCl7U2Uod2luZG93LCJtb3VzZXVwIixwKSxzZXRUaW1lb3V0KG4sMjApfTtuYSh3aW5kb3csIm1vdXNldXAiLHApfWVsc2Ugc2V0VGltZW91dChuLDUwKX19LG5sLnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQ9ZnVuY3Rpb24oZSl7ZXx8dGhpcy5yZXNldCgpLHRoaXMudGV4dGFyZWEuZGlzYWJsZWQ9Im5vY3Vyc29yIj09ZX0sbmwucHJvdG90eXBlLnNldFVuZWRpdGFibGU9ZnVuY3Rpb24oKXt9LG5sLnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGU9ITEsZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIsbyxzKXtlLmRlZmF1bHRzW3RdPXIsbyYmKG5bdF09cz9mdW5jdGlvbihlLHQsbil7biE9JGEmJm8oZSx0LG4pfTpvKX12YXIgbj1lLm9wdGlvbkhhbmRsZXJzO2UuZGVmaW5lT3B0aW9uPXQsZS5Jbml0PSRhLHQoInZhbHVlIiwiIixmdW5jdGlvbihlLHQpe3JldHVybiBlLnNldFZhbHVlKHQpfSwhMCksdCgibW9kZSIsbnVsbCxmdW5jdGlvbihlLHQpe2UuZG9jLm1vZGVPcHRpb249dCxxcihlKX0sITApLHQoImluZGVudFVuaXQiLDIscXIsITApLHQoImluZGVudFdpdGhUYWJzIiwhMSksdCgic21hcnRJbmRlbnQiLCEwKSx0KCJ0YWJTaXplIiw0LGZ1bmN0aW9uKGUpe0tyKGUpLG5uKGUpLGJyKGUpfSwhMCksdCgibGluZVNlcGFyYXRvciIsbnVsbCxmdW5jdGlvbihlLHQpe2lmKGUuZG9jLmxpbmVTZXA9dCx0KXt2YXIgbj1bXSxyPWUuZG9jLmZpcnN0O2UuZG9jLml0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciBvPTA7Oyl7dmFyIHM9ZS50ZXh0LmluZGV4T2YodCxvKTtpZigtMT09cylicmVhaztvPXMrdC5sZW5ndGgsbi5wdXNoKEkocixzKSl9cisrfSk7Zm9yKHZhciBvPW4ubGVuZ3RoLTE7bz49MDtvLS0pSG8oZS5kb2MsdCxuW29dLEkobltvXS5saW5lLG5bb10uY2grdC5sZW5ndGgpKX19KSx0KCJzcGVjaWFsQ2hhcnMiLC9bXHUwMDAwLVx1MDAxZlx1MDA3Zi1cdTAwOWZcdTAwYWRcdTA2MWNcdTIwMGItXHUyMDBmXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKGUsdCxuKXtlLnN0YXRlLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKHQuc291cmNlKyh0LnRlc3QoIlx0Iik/IiI6InxcdCIpLCJnIiksbiE9JGEmJmUucmVmcmVzaCgpfSksdCgic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsY3QsZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVmcmVzaCgpfSwhMCksdCgiZWxlY3RyaWNDaGFycyIsITApLHQoImlucHV0U3R5bGUiLExpPyJjb250ZW50ZWRpdGFibGUiOiJ0ZXh0YXJlYSIsZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3IiKX0sITApLHQoInNwZWxsY2hlY2siLCExLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2s9dH0sITApLHQoImF1dG9jb3JyZWN0IiwhMSxmdW5jdGlvbihlLHQpe3JldHVybiBlLmdldElucHV0RmllbGQoKS5hdXRvY29ycmVjdD10fSwhMCksdCgiYXV0b2NhcGl0YWxpemUiLCExLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0SW5wdXRGaWVsZCgpLmF1dG9jYXBpdGFsaXplPXR9LCEwKSx0KCJydGxNb3ZlVmlzdWFsbHkiLCFNaSksdCgid2hvbGVMaW5lVXBkYXRlQmVmb3JlIiwhMCksdCgidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbihlKXtWcyhlKSxXcyhlKX0sITApLHQoImtleU1hcCIsImRlZmF1bHQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1fcyh0KSxvPW4hPSRhJiZfcyhuKTtvJiZvLmRldGFjaCYmby5kZXRhY2goZSxyKSxyLmF0dGFjaCYmci5hdHRhY2goZSxvfHxudWxsKX0pLHQoImV4dHJhS2V5cyIsbnVsbCksdCgiY29uZmlndXJlTW91c2UiLG51bGwpLHQoImxpbmVXcmFwcGluZyIsITEscXMsITApLHQoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKGUpe1ByKGUub3B0aW9ucyksV3MoZSl9LCEwKSx0KCJmaXhlZEd1dHRlciIsITAsZnVuY3Rpb24oZSx0KXtlLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0PXQ/QW4oZS5kaXNwbGF5KSsicHgiOiIwIixlLnJlZnJlc2goKX0sITApLHQoImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwhMSxmdW5jdGlvbihlKXtyZXR1cm4gcnIoZSl9LCEwKSx0KCJzY3JvbGxiYXJTdHlsZSIsIm5hdGl2ZSIsZnVuY3Rpb24oZSl7c3IoZSkscnIoZSksZS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGUuZG9jLnNjcm9sbFRvcCksZS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChlLmRvYy5zY3JvbGxMZWZ0KX0sITApLHQoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbihlKXtQcihlLm9wdGlvbnMpLFdzKGUpfSwhMCksdCgiZmlyc3RMaW5lTnVtYmVyIiwxLFdzLCEwKSx0KCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbihlKXtyZXR1cm4gZX0sV3MsITApLHQoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxqbiwhMCksdCgicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCksdCgibGluZVdpc2VDb3B5Q3V0IiwhMCksdCgicGFzdGVMaW5lc1BlclNlbGVjdGlvbiIsITApLHQoInNlbGVjdGlvbnNNYXlUb3VjaCIsITEpLHQoInJlYWRPbmx5IiwhMSxmdW5jdGlvbihlLHQpeyJub2N1cnNvciI9PXQmJihObihlKSxlLmRpc3BsYXkuaW5wdXQuYmx1cigpKSxlLmRpc3BsYXkuaW5wdXQucmVhZE9ubHlDaGFuZ2VkKHQpfSksdCgiZGlzYWJsZUlucHV0IiwhMSxmdW5jdGlvbihlLHQpe3R8fGUuZGlzcGxheS5pbnB1dC5yZXNldCgpfSwhMCksdCgiZHJhZ0Ryb3AiLCEwLFlzKSx0KCJhbGxvd0Ryb3BGaWxlVHlwZXMiLG51bGwpLHQoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx0KCJjdXJzb3JTY3JvbGxNYXJnaW4iLDApLHQoImN1cnNvckhlaWdodCIsMSxqbiwhMCksdCgic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsITAsam4sITApLHQoIndvcmtUaW1lIiwxMDApLHQoIndvcmtEZWxheSIsMTAwKSx0KCJmbGF0dGVuU3BhbnMiLCEwLEtyLCEwKSx0KCJhZGRNb2RlQ2xhc3MiLCExLEtyLCEwKSx0KCJwb2xsSW50ZXJ2YWwiLDEwMCksdCgidW5kb0RlcHRoIiwyMDAsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kb2MuaGlzdG9yeS51bmRvRGVwdGg9dH0pLHQoImhpc3RvcnlFdmVudERlbGF5IiwxMjUwKSx0KCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVmcmVzaCgpfSwhMCksdCgibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsS3IsITApLHQoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKGUsdCl7dHx8ZS5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKX0pLHQoInRhYmluZGV4IixudWxsLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpLnRhYkluZGV4PXR8fCIifSksdCgiYXV0b2ZvY3VzIixudWxsKSx0KCJkaXJlY3Rpb24iLCJsdHIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZG9jLnNldERpcmVjdGlvbih0KX0sITApLHQoInBocmFzZXMiLG51bGwpfShLcyksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25IYW5kbGVycyxuPWUuaGVscGVycz17fTtlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHRoaXMuZGlzcGxheS5pbnB1dC5mb2N1cygpfSxzZXRPcHRpb246ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzLm9wdGlvbnMsbz1yW2VdO3JbZV09PW4mJiJtb2RlIiE9ZXx8KHJbZV09bix0Lmhhc093blByb3BlcnR5KGUpJiZtcih0aGlzLHRbZV0pKHRoaXMsbixvKSxSZSh0aGlzLCJvcHRpb25DaGFuZ2UiLHRoaXMsZSkpfSxnZXRPcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0YXRlLmtleU1hcHNbdD8icHVzaCI6InVuc2hpZnQiXShfcyhlKSl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5zdGF0ZS5rZXlNYXBzLG49MDtuPHQubGVuZ3RoOysrbilpZih0W25dPT1lfHx0W25dLm5hbWU9PWUpcmV0dXJuIHQuc3BsaWNlKG4sMSksITB9LGFkZE92ZXJsYXk6aHIoZnVuY3Rpb24odCxuKXt2YXIgcj10LnRva2VuP3Q6ZS5nZXRNb2RlKHRoaXMub3B0aW9ucyx0KTtpZihyLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO2codGhpcy5zdGF0ZS5vdmVybGF5cyx7bW9kZTpyLG1vZGVTcGVjOnQsb3BhcXVlOm4mJm4ub3BhcXVlLHByaW9yaXR5Om4mJm4ucHJpb3JpdHl8fDB9LGZ1bmN0aW9uKGUpe3JldHVybiBlLnByaW9yaXR5fSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssYnIodGhpcyl9KSxyZW1vdmVPdmVybGF5OmhyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLG49dGhpcy5zdGF0ZS5vdmVybGF5cyxyPTA7cjxuLmxlbmd0aDsrK3Ipe3ZhciBvPW5bcl0ubW9kZVNwZWM7aWYobz09ZXx8InN0cmluZyI9PXR5cGVvZiBlJiZvLm5hbWU9PWUpcmV0dXJuIG4uc3BsaWNlKHIsMSksdC5zdGF0ZS5tb2RlR2VuKyssdm9pZCBicih0KX19KSxpbmRlbnRMaW5lOmhyKGZ1bmN0aW9uKGUsdCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdCYmKHQ9bnVsbD09dD90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6dD8iYWRkIjoic3VidHJhY3QiKSxNKHRoaXMuZG9jLGUpJiYkcyh0aGlzLGUsdCxuKX0pLGluZGVudFNlbGVjdGlvbjpocihmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPXRoaXMuZG9jLnNlbC5yYW5nZXMscj0tMSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107aWYocy5lbXB0eSgpKXMuaGVhZC5saW5lPnImJigkcyh0LHMuaGVhZC5saW5lLGUsITApLHI9cy5oZWFkLmxpbmUsbz09dC5kb2Muc2VsLnByaW1JbmRleCYmS24odCkpO2Vsc2V7dmFyIGk9cy5mcm9tKCksYT1zLnRvKCksbD1NYXRoLm1heChyLGkubGluZSk7cj1NYXRoLm1pbih0Lmxhc3RMaW5lKCksYS5saW5lLShhLmNoPzA6MSkpKzE7Zm9yKHZhciB1PWw7dTxyOysrdSkkcyh0LHUsZSk7dmFyIGM9dC5kb2Muc2VsLnJhbmdlczswPT1pLmNoJiZuLmxlbmd0aD09Yy5sZW5ndGgmJmNbb10uZnJvbSgpLmNoPjAmJmJvKHQuZG9jLG8sbmV3IExhKGksY1tvXS50bygpKSxXaSl9fX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHQodGhpcyxlLHQpfSxnZXRMaW5lVG9rZW5zOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR0KHRoaXMsSShlKSx0LCEwKX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24oZSl7ZT1HKHRoaXMuZG9jLGUpO3ZhciB0LG49JGUodGhpcyxSKHRoaXMuZG9jLGUubGluZSkpLHI9MCxvPShuLmxlbmd0aC0xKS8yLHM9ZS5jaDtpZigwPT1zKXQ9blsyXTtlbHNlIGZvcig7Oyl7dmFyIGk9citvPj4xO2lmKChpP25bMippLTFdOjApPj1zKW89aTtlbHNle2lmKCEoblsyKmkrMV08cykpe3Q9blsyKmkrMl07YnJlYWt9cj1pKzF9fXZhciBhPXQ/dC5pbmRleE9mKCJvdmVybGF5ICIpOi0xO3JldHVybiBhPDA/dDowPT1hP251bGw6dC5zbGljZSgwLGEtMSl9LGdldE1vZGVBdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmRvYy5tb2RlO3JldHVybiBuLmlubmVyTW9kZT9lLmlubmVyTW9kZShuLHRoaXMuZ2V0VG9rZW5BdCh0KS5zdGF0ZSkubW9kZTpufSxnZXRIZWxwZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRIZWxwZXJzKGUsdClbMF19LGdldEhlbHBlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG89W107aWYoIW4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG87dmFyIHM9blt0XSxpPXRoaXMuZ2V0TW9kZUF0KGUpO2lmKCJzdHJpbmciPT10eXBlb2YgaVt0XSlzW2lbdF1dJiZvLnB1c2goc1tpW3RdXSk7ZWxzZSBpZihpW3RdKWZvcih2YXIgYT0wO2E8aVt0XS5sZW5ndGg7YSsrKXt2YXIgbD1zW2lbdF1bYV1dO2wmJm8ucHVzaChsKX1lbHNlIGkuaGVscGVyVHlwZSYmc1tpLmhlbHBlclR5cGVdP28ucHVzaChzW2kuaGVscGVyVHlwZV0pOnNbaS5uYW1lXSYmby5wdXNoKHNbaS5uYW1lXSk7Zm9yKHZhciB1PTA7dTxzLl9nbG9iYWwubGVuZ3RoO3UrKyl7dmFyIGM9cy5fZ2xvYmFsW3VdO2MucHJlZChpLHIpJiYtMT09XyhvLGMudmFsKSYmby5wdXNoKGMudmFsKX1yZXR1cm4gb30sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZG9jO3JldHVybiBlPVUobixudWxsPT1lP24uZmlyc3Qrbi5zaXplLTE6ZSksUWUodGhpcyxlKzEsdCkuc3RhdGV9LGN1cnNvckNvb3JkczpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5kb2Muc2VsLnByaW1hcnkoKTtyZXR1cm4gbj1udWxsPT1lP3IuaGVhZDoib2JqZWN0Ij09dHlwZW9mIGU/Ryh0aGlzLmRvYyxlKTplP3IuZnJvbSgpOnIudG8oKSxjbih0aGlzLG4sdHx8InBhZ2UiKX0sY2hhckNvb3JkczpmdW5jdGlvbihlLHQpe3JldHVybiB1bih0aGlzLEcodGhpcy5kb2MsZSksdHx8InBhZ2UiKX0sY29vcmRzQ2hhcjpmdW5jdGlvbihlLHQpe3JldHVybiBlPWxuKHRoaXMsZSx0fHwicGFnZSIpLHBuKHRoaXMsZS5sZWZ0LGUudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bG4odGhpcyx7dG9wOmUsbGVmdDowfSx0fHwicGFnZSIpLnRvcCx3KHRoaXMuZG9jLGUrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89ITE7aWYoIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgcz10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7ZTx0aGlzLmRvYy5maXJzdD9lPXRoaXMuZG9jLmZpcnN0OmU+cyYmKGU9cyxvPSEwKSxyPVIodGhpcy5kb2MsZSl9ZWxzZSByPWU7cmV0dXJuIGFuKHRoaXMscix7dG9wOjAsbGVmdDowfSx0fHwicGFnZSIsbnx8bykudG9wKyhvP3RoaXMuZG9jLmhlaWdodC1FZShyKTowKX0sZGVmYXVsdFRleHRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4geW4odGhpcy5kaXNwbGF5KX0sZGVmYXVsdENoYXJXaWR0aDpmdW5jdGlvbigpe3JldHVybiB2bih0aGlzLmRpc3BsYXkpfSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS52aWV3RnJvbSx0bzp0aGlzLmRpc3BsYXkudmlld1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHM9dGhpcy5kaXNwbGF5O2U9Y24odGhpcyxHKHRoaXMuZG9jLGUpKTt2YXIgaT1lLmJvdHRvbSxhPWUubGVmdDtpZih0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCJ0cnVlIiksdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUodCkscy5zaXplci5hcHBlbmRDaGlsZCh0KSwib3ZlciI9PXIpaT1lLnRvcDtlbHNlIGlmKCJhYm92ZSI9PXJ8fCJuZWFyIj09cil7dmFyIGw9TWF0aC5tYXgocy53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgocy5zaXplci5jbGllbnRXaWR0aCxzLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PXJ8fGUuYm90dG9tK3Qub2Zmc2V0SGVpZ2h0PmwpJiZlLnRvcD50Lm9mZnNldEhlaWdodD9pPWUudG9wLXQub2Zmc2V0SGVpZ2h0OmUuYm90dG9tK3Qub2Zmc2V0SGVpZ2h0PD1sJiYoaT1lLmJvdHRvbSksYSt0Lm9mZnNldFdpZHRoPnUmJihhPXUtdC5vZmZzZXRXaWR0aCl9dC5zdHlsZS50b3A9aSsicHgiLHQuc3R5bGUubGVmdD10LnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PW8/KGE9cy5zaXplci5jbGllbnRXaWR0aC10Lm9mZnNldFdpZHRoLHQuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PW8/YT0wOiJtaWRkbGUiPT1vJiYoYT0ocy5zaXplci5jbGllbnRXaWR0aC10Lm9mZnNldFdpZHRoKS8yKSx0LnN0eWxlLmxlZnQ9YSsicHgiKSxuJiZXbih0aGlzLHtsZWZ0OmEsdG9wOmkscmlnaHQ6YSt0Lm9mZnNldFdpZHRoLGJvdHRvbTppK3Qub2Zmc2V0SGVpZ2h0fSl9LHRyaWdnZXJPbktleURvd246aHIoUnMpLHRyaWdnZXJPbktleVByZXNzOmhyKExzKSx0cmlnZ2VyT25LZXlVcDp4cyx0cmlnZ2VyT25Nb3VzZURvd246aHIod3MpLGV4ZWNDb21tYW5kOmZ1bmN0aW9uKGUpe2lmKFZhLmhhc093blByb3BlcnR5KGUpKXJldHVybiBWYVtlXS5jYWxsKG51bGwsdGhpcyl9LHRyaWdnZXJFbGVjdHJpYzpocihmdW5jdGlvbihlKXtlaSh0aGlzLGUpfSksZmluZFBvc0g6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcyxzPTE7dDwwJiYocz0tMSx0PS10KTtmb3IodmFyIGk9Ryh0aGlzLmRvYyxlKSxhPTA7YTx0JiYoaT1vaShvLmRvYyxpLHMsbixyKSwhaS5oaXRTaWRlKTsrK2EpO3JldHVybiBpfSxtb3ZlSDpocihmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocil7cmV0dXJuIG4uZGlzcGxheS5zaGlmdHx8bi5kb2MuZXh0ZW5kfHxyLmVtcHR5KCk/b2kobi5kb2Msci5oZWFkLGUsdCxuLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTplPDA/ci5mcm9tKCk6ci50bygpfSxxaSl9KSxkZWxldGVIOmhyKGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5kb2Muc2VsLHI9dGhpcy5kb2M7bi5zb21ldGhpbmdTZWxlY3RlZCgpP3IucmVwbGFjZVNlbGVjdGlvbigiIixudWxsLCIrZGVsZXRlIik6cHModGhpcyxmdW5jdGlvbihuKXt2YXIgbz1vaShyLG4uaGVhZCxlLHQsITEpO3JldHVybiBlPDA/e2Zyb206byx0bzpuLmhlYWR9Ontmcm9tOm4uaGVhZCx0bzpvfX0pfSksZmluZFBvc1Y6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcyxzPTEsaT1yO3Q8MCYmKHM9LTEsdD0tdCk7Zm9yKHZhciBhPUcodGhpcy5kb2MsZSksbD0wO2w8dDsrK2wpe3ZhciB1PWNuKG8sYSwiZGl2Iik7aWYobnVsbD09aT9pPXUubGVmdDp1LmxlZnQ9aSxhPXNpKG8sdSxzLG4pLGEuaGl0U2lkZSlicmVha31yZXR1cm4gYX0sbW92ZVY6aHIoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5kb2Msbz1bXSxzPSF0aGlzLmRpc3BsYXkuc2hpZnQmJiFyLmV4dGVuZCYmci5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTtpZihyLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihpKXtpZihzKXJldHVybiBlPDA/aS5mcm9tKCk6aS50bygpO3ZhciBhPWNuKG4saS5oZWFkLCJkaXYiKTtudWxsIT1pLmdvYWxDb2x1bW4mJihhLmxlZnQ9aS5nb2FsQ29sdW1uKSxvLnB1c2goYS5sZWZ0KTt2YXIgbD1zaShuLGEsZSx0KTtyZXR1cm4icGFnZSI9PXQmJmk9PXIuc2VsLnByaW1hcnkoKSYmcW4obix1bihuLGwsImRpdiIpLnRvcC1hLnRvcCksbH0scWkpLG8ubGVuZ3RoKWZvcih2YXIgaT0wO2k8ci5zZWwucmFuZ2VzLmxlbmd0aDtpKyspci5zZWwucmFuZ2VzW2ldLmdvYWxDb2x1bW49b1tpXX0pLGZpbmRXb3JkQXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb2Msbj1SKHQsZS5saW5lKS50ZXh0LHI9ZS5jaCxvPWUuY2g7aWYobil7dmFyIHM9dGhpcy5nZXRIZWxwZXIoZSwid29yZENoYXJzIik7ImJlZm9yZSIhPWUuc3RpY2t5JiZvIT1uLmxlbmd0aHx8IXI/KytvOi0tcjtmb3IodmFyIGk9bi5jaGFyQXQociksYT12KGkscyk/ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSxzKX06L1xzLy50ZXN0KGkpP2Z1bmN0aW9uKGUpe3JldHVybi9ccy8udGVzdChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIS9ccy8udGVzdChlKSYmIXYoZSl9O3I+MCYmYShuLmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bzxuLmxlbmd0aCYmYShuLmNoYXJBdChvKSk7KSsrb31yZXR1cm4gbmV3IExhKEkoZS5saW5lLHIpLEkoZS5saW5lLG8pKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKGUpe251bGwhPWUmJmU9PXRoaXMuc3RhdGUub3ZlcndyaXRlfHwoKHRoaXMuc3RhdGUub3ZlcndyaXRlPSF0aGlzLnN0YXRlLm92ZXJ3cml0ZSk/YSh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOkhpKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIkNvZGVNaXJyb3Itb3ZlcndyaXRlIiksUmUodGhpcywib3ZlcndyaXRlVG9nZ2xlIix0aGlzLHRoaXMuc3RhdGUub3ZlcndyaXRlKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpPT1pKCl9LGlzUmVhZE9ubHk6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLm9wdGlvbnMucmVhZE9ubHkmJiF0aGlzLmRvYy5jYW50RWRpdCl9LHNjcm9sbFRvOmhyKGZ1bmN0aW9uKGUsdCl7WG4odGhpcyxlLHQpfSksZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGlzcGxheS5zY3JvbGxlcjtyZXR1cm57bGVmdDplLnNjcm9sbExlZnQsdG9wOmUuc2Nyb2xsVG9wLGhlaWdodDplLnNjcm9sbEhlaWdodC1CdCh0aGlzKS10aGlzLmRpc3BsYXkuYmFySGVpZ2h0LHdpZHRoOmUuc2Nyb2xsV2lkdGgtQnQodGhpcyktdGhpcy5kaXNwbGF5LmJhcldpZHRoLGNsaWVudEhlaWdodDpHdCh0aGlzKSxjbGllbnRXaWR0aDpVdCh0aGlzKX19LHNjcm9sbEludG9WaWV3OmhyKGZ1bmN0aW9uKGUsdCl7bnVsbD09ZT8oZT17ZnJvbTp0aGlzLmRvYy5zZWwucHJpbWFyeSgpLmhlYWQsdG86bnVsbH0sbnVsbD09dCYmKHQ9dGhpcy5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbikpOiJudW1iZXIiPT10eXBlb2YgZT9lPXtmcm9tOkkoZSwwKSx0bzpudWxsfTpudWxsPT1lLmZyb20mJihlPXtmcm9tOmUsdG86bnVsbH0pLGUudG98fChlLnRvPWUuZnJvbSksZS5tYXJnaW49dHx8MCxudWxsIT1lLmZyb20ubGluZT8kbih0aGlzLGUpOkpuKHRoaXMsZS5mcm9tLGUudG8sZS5tYXJnaW4pfSksc2V0U2l6ZTpocihmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV8fC9eXGQrJC8udGVzdChTdHJpbmcoZSkpP2UrInB4IjplfTtudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGg9cihlKSksbnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodD1yKHQpKSx0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nJiZ0bih0aGlzKTt2YXIgbz10aGlzLmRpc3BsYXkudmlld0Zyb207dGhpcy5kb2MuaXRlcihvLHRoaXMuZGlzcGxheS52aWV3VG8sZnVuY3Rpb24oZSl7aWYoZS53aWRnZXRzKWZvcih2YXIgdD0wO3Q8ZS53aWRnZXRzLmxlbmd0aDt0KyspaWYoZS53aWRnZXRzW3RdLm5vSFNjcm9sbCl7RXIobixvLCJ3aWRnZXQiKTticmVha30rK299KSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwLFJlKHRoaXMsInJlZnJlc2giLHRoaXMpfSksb3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBmcih0aGlzLGUpfSxzdGFydE9wZXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiBpcih0aGlzKX0sZW5kT3BlcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGFyKHRoaXMpfSxyZWZyZXNoOmhyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7YnIodGhpcyksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMCxubih0aGlzKSxYbih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSxNcih0aGlzKSwobnVsbD09ZXx8TWF0aC5hYnMoZS15bih0aGlzLmRpc3BsYXkpKT4uNSkmJk9uKHRoaXMpLFJlKHRoaXMsInJlZnJlc2giLHRoaXMpfSksc3dhcERvYzpocihmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRvYztyZXR1cm4gdC5jbT1udWxsLEpyKHRoaXMsZSksbm4odGhpcyksdGhpcy5kaXNwbGF5LmlucHV0LnJlc2V0KCksWG4odGhpcyxlLnNjcm9sbExlZnQsZS5zY3JvbGxUb3ApLHRoaXMuY3VyT3AuZm9yY2VTY3JvbGw9ITAsdnQodGhpcywic3dhcERvYyIsdGhpcyx0KSx0fSkscGhyYXNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucy5waHJhc2VzO3JldHVybiB0JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKT90W2VdOmV9LGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LGdldFdyYXBwZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyfSxnZXRTY3JvbGxlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxnZXRHdXR0ZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfX0sRGUoZSksZS5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbih0LHIsbyl7bi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09ZVt0XT17X2dsb2JhbDpbXX0pLG5bdF1bcl09b30sZS5yZWdpc3Rlckdsb2JhbEhlbHBlcj1mdW5jdGlvbih0LHIsbyxzKXtlLnJlZ2lzdGVySGVscGVyKHQscixzKSxuW3RdLl9nbG9iYWwucHVzaCh7cHJlZDpvLHZhbDpzfSl9fShLcyk7dmFyIHJsPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29uc3RydWN0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBvbCBpbiBQYS5wcm90b3R5cGUpUGEucHJvdG90eXBlLmhhc093blByb3BlcnR5KG9sKSYmXyhybCxvbCk8MCYmKEtzLnByb3RvdHlwZVtvbF09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KFBhLnByb3RvdHlwZVtvbF0pKTtyZXR1cm4gRGUoUGEpLEtzLmlucHV0U3R5bGVzPXt0ZXh0YXJlYTpubCxjb250ZW50ZWRpdGFibGU6dGx9LEtzLmRlZmluZU1vZGU9ZnVuY3Rpb24oZSl7S3MuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwoS3MuZGVmYXVsdHMubW9kZT1lKSxVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEtzLmRlZmluZU1JTUU9R2UsS3MuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2tpcFRvRW5kKCl9fX0pLEtzLmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCJudWxsIiksS3MuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCl7S3MucHJvdG90eXBlW2VdPXR9LEtzLmRlZmluZURvY0V4dGVuc2lvbj1mdW5jdGlvbihlLHQpe1BhLnByb3RvdHlwZVtlXT10fSxLcy5mcm9tVGV4dEFyZWE9X2ksZnVuY3Rpb24oZSl7ZS5vZmY9U2UsZS5vbj1uYSxlLndoZWVsRXZlbnRQaXhlbHM9SHIsZS5Eb2M9UGEsZS5zcGxpdExpbmVzPW9hLGUuY291bnRDb2x1bW49ZCxlLmZpbmRDb2x1bW49cCxlLmlzV29yZENoYXI9eSxlLlBhc3M9VmksZS5zaWduYWw9UmUsZS5MaW5lPW1hLGUuY2hhbmdlRW5kPUdyLGUuc2Nyb2xsYmFyTW9kZWw9Q2EsZS5Qb3M9SSxlLmNtcFBvcz1QLGUubW9kZXM9bGEsZS5taW1lTW9kZXM9dWEsZS5yZXNvbHZlTW9kZT16ZSxlLmdldE1vZGU9VmUsZS5tb2RlRXh0ZW5zaW9ucz1jYSxlLmV4dGVuZE1vZGU9V2UsZS5jb3B5U3RhdGU9WWUsZS5zdGFydFN0YXRlPUtlLGUuaW5uZXJNb2RlPXFlLGUuY29tbWFuZHM9VmEsZS5rZXlNYXA9emEsZS5rZXlOYW1lPWRzLGUuaXNNb2RpZmllcktleT11cyxlLmxvb2t1cEtleT1scyxlLm5vcm1hbGl6ZUtleU1hcD1hcyxlLlN0cmluZ1N0cmVhbT1kYSxlLlNoYXJlZFRleHRNYXJrZXI9a2EsZS5UZXh0TWFya2VyPU1hLGUuTGluZVdpZGdldD1EYSxlLmVfcHJldmVudERlZmF1bHQ9d2UsZS5lX3N0b3BQcm9wYWdhdGlvbj1NZSxlLmVfc3RvcD1JZSxlLmFkZENsYXNzPWEsZS5jb250YWlucz1zLGUucm1DbGFzcz1IaSxlLmtleU5hbWVzPUZhfShLcyksS3MudmVyc2lvbj0iNS40NS4wIixLc30pfSwiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL2dmbS9nZm0uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7ZShuKCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2xpYi9jb2RlbWlycm9yLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9tb2RlL292ZXJsYXkuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXigoPzooPzphYWFzP3xhYm91dHxhY2FwfGFkaXVteHRyYXxhZltwc118YWltfGFwdHxhdHRhY2htZW50fGF3fGJlc2hhcmV8Yml0Y29pbnxib2xvfGNhbGx0b3xjYXB8Y2hyb21lKD86LWV4dGVuc2lvbik/fGNpZHxjb2FwfGNvbS1ldmVudGJyaXRlLWF0dGVuZGVlfGNvbnRlbnR8Y3JpZHxjdnN8ZGF0YXxkYXZ8ZGljdHxkbG5hLSg/OnBsYXljb250YWluZXJ8cGxheXNpbmdsZSl8ZG5zfGRvaXxkdG58ZHZifGVkMmt8ZmFjZXRpbWV8ZmVlZHxmaWxlfGZpbmdlcnxmaXNofGZ0cHxnZW98Z2d8Z2l0fGdpem1vcHJvamVjdHxnb3xnb3BoZXJ8Z3RhbGt8aDMyM3xoY3B8aHR0cHM/fGlheHxpY2FwfGljb258aW18aW1hcHxpbmZvfGlwbnxpcHB8aXJjWzZzXT98aXJpcyg/OlwuYmVlcHxcLmx3enxcLnhwY3xcLnhwY3MpP3xpdG1zfGphcnxqYXZhc2NyaXB0fGptc3xrZXlwYXJjfGxhc3RmbXxsZGFwcz98bWFnbmV0fG1haWx0b3xtYXBzfG1hcmtldHxtZXNzYWdlfG1pZHxtbXN8bXMtaGVscHxtc25pbXxtc3Jwcz98bXRxcHxtdW1ibGV8bXVwZGF0ZXxtdm58bmV3c3xuZnN8bmloP3xubnRwfG5vdGVzfG9pZHxvcGFxdWVsb2NrdG9rZW58cGFsbXxwYXBhcmF6eml8cGxhdGZvcm18cG9wfHByZXN8cHJveHl8cHN5Y3xxdWVyeXxyZXMoPzpvdXJjZSk/fHJtaXxyc3luY3xydG1wfHJ0c3B8c2Vjb25kbGlmZXxzZXJ2aWNlfHNlc3Npb258c2Z0cHxzZ258c2h0dHB8c2lldmV8c2lwcz98c2t5cGV8c21bYnNdfHNubXB8c29hcFwuYmVlcHM/fHNvbGRhdHxzcG90aWZ5fHNzaHxzdGVhbXxzdm58dGFnfHRlYW1zcGVha3x0ZWwoPzpuZXQpP3x0ZnRwfHRoaW5nc3x0aGlzbWVzc2FnZXx0aXB8dG4zMjcwfHR2fHVkcHx1bnJlYWx8dXJufHV0MjAwNHx2ZW1taXx2ZW50cmlsb3x2aWV3LXNvdXJjZXx3ZWJjYWx8d3NzP3x3dGFpfHd5Y2l3eWd8eGNvbig/Oi11c2VyaWQpP3x4ZmlyZXx4bWxycGNcLmJlZXBzP3x4bXBwfHhyaXx5bXNncnx6MzlcLjUwW3JzXT8pOig/OlwvezEsM318W2EtejAtOSVdKXx3d3dcZHswLDN9Wy5dfFthLXowLTkuXC1dK1suXVthLXpdezIsNH1cLykoPzpbXlxzKCk8Pl18XChbXlxzKCk8Pl0qXCkpKyg/OlwoW15ccygpPD5dKlwpfFteXHNgKiEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaTtlLmRlZmluZU1vZGUoImdmbSIsZnVuY3Rpb24obixyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlLmNvZGU9ITEsbnVsbH12YXIgcz0wLGk9e3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Y29kZTohMSxjb2RlQmxvY2s6ITEsYXRlU3BhY2U6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJue2NvZGU6ZS5jb2RlLGNvZGVCbG9jazplLmNvZGVCbG9jayxhdGVTcGFjZTplLmF0ZVNwYWNlfX0sdG9rZW46ZnVuY3Rpb24oZSxuKXtpZihuLmNvbWJpbmVUb2tlbnM9bnVsbCxuLmNvZGVCbG9jaylyZXR1cm4gZS5tYXRjaCgvXmBgYCsvKT8obi5jb2RlQmxvY2s9ITEsbnVsbCk6KGUuc2tpcFRvRW5kKCksbnVsbCk7aWYoZS5zb2woKSYmKG4uY29kZT0hMSksZS5zb2woKSYmZS5tYXRjaCgvXmBgYCsvKSlyZXR1cm4gZS5za2lwVG9FbmQoKSxuLmNvZGVCbG9jaz0hMCxudWxsO2lmKCJgIj09PWUucGVlaygpKXtlLm5leHQoKTt2YXIgbz1lLnBvcztlLmVhdFdoaWxlKCJgIik7dmFyIGk9MStlLnBvcy1vO3JldHVybiBuLmNvZGU/aT09PXMmJihuLmNvZGU9ITEpOihzPWksbi5jb2RlPSEwKSxudWxsfWlmKG4uY29kZSlyZXR1cm4gZS5uZXh0KCksbnVsbDtpZihlLmVhdFNwYWNlKCkpcmV0dXJuIG4uYXRlU3BhY2U9ITAsbnVsbDtpZigoZS5zb2woKXx8bi5hdGVTcGFjZSkmJihuLmF0ZVNwYWNlPSExLCExIT09ci5naXRIdWJTcGljZSkpe2lmKGUubWF0Y2goL14oPzpbYS16QS1aMC05XC1fXStcLyk/KD86W2EtekEtWjAtOVwtX10rQCk/KD89LnswLDZ9XGQpKD86W2EtZjAtOV17Nyw0MH1cYikvKSlyZXR1cm4gbi5jb21iaW5lVG9rZW5zPSEwLCJsaW5rIjtpZihlLm1hdGNoKC9eKD86W2EtekEtWjAtOVwtX10rXC8pPyg/OlthLXpBLVowLTlcLV9dKyk/I1swLTldK1xiLykpcmV0dXJuIG4uY29tYmluZVRva2Vucz0hMCwibGluayJ9cmV0dXJuIGUubWF0Y2godCkmJiJdKCIhPWUuc3RyaW5nLnNsaWNlKGUuc3RhcnQtMixlLnN0YXJ0KSYmKDA9PWUuc3RhcnR8fC9cVy8udGVzdChlLnN0cmluZy5jaGFyQXQoZS5zdGFydC0xKSkpPyhuLmNvbWJpbmVUb2tlbnM9ITAsImxpbmsiKTooZS5uZXh0KCksbnVsbCl9LGJsYW5rTGluZTpvfSxhPXt0YXNrTGlzdHM6ITAsc3RyaWtldGhyb3VnaDohMCxlbW9qaTohMH07Zm9yKHZhciBsIGluIHIpYVtsXT1yW2xdO3JldHVybiBhLm5hbWU9Im1hcmtkb3duIixlLm92ZXJsYXlNb2RlKGUuZ2V0TW9kZShuLGEpLGkpfSwibWFya2Rvd24iKSxlLmRlZmluZU1JTUUoInRleHQveC1nZm0iLCJnZm0iKX0pfSwiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpe2UobigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS94bWwveG1sLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21ldGEuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIobil7aWYoZS5maW5kTW9kZUJ5TmFtZSl7dmFyIHI9ZS5maW5kTW9kZUJ5TmFtZShuKTtyJiYobj1yLm1pbWV8fHIubWltZXNbMF0pfXZhciBvPWUuZ2V0TW9kZSh0LG4pO3JldHVybiJudWxsIj09by5uYW1lP251bGw6b31mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gdC5mPXQuaW5saW5lPW4sbihlLHQpfWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiB0LmY9dC5ibG9jaz1uLG4oZSx0KX1mdW5jdGlvbiBpKGUpe3JldHVybiFlfHwhL1xTLy50ZXN0KGUuc3RyaW5nKX1mdW5jdGlvbiBhKHQpe2lmKHQubGlua1RpdGxlPSExLHQubGlua0hyZWY9ITEsdC5saW5rVGV4dD0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQuc3RyaWtldGhyb3VnaD0hMSx0LnF1b3RlPTAsdC5pbmRlbnRlZENvZGU9ITEsdC5mPT11KXt2YXIgbj12O2lmKCFuKXt2YXIgcj1lLmlubmVyTW9kZSh5LHQuaHRtbFN0YXRlKTtuPSJ4bWwiPT1yLm1vZGUubmFtZSYmbnVsbD09PXIuc3RhdGUudGFnU3RhcnQmJiFyLnN0YXRlLmNvbnRleHQmJnIuc3RhdGUudG9rZW5pemUuaXNJblRleHR9biYmKHQuZj1wLHQuYmxvY2s9bCx0Lmh0bWxTdGF0ZT1udWxsKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnByZXZMaW5lPXQudGhpc0xpbmUsdC50aGlzTGluZT17c3RyZWFtOm51bGx9LG51bGx9ZnVuY3Rpb24gbCh0LHMpe3ZhciBhPXQuY29sdW1uKCk9PT1zLmluZGVudGF0aW9uLGw9aShzLnByZXZMaW5lLnN0cmVhbSksdT1zLmluZGVudGVkQ29kZSxfPXMucHJldkxpbmUuaHIscD0hMSE9PXMubGlzdCxmPShzLmxpc3RTdGFja1tzLmxpc3RTdGFjay5sZW5ndGgtMV18fDApKzM7cy5pbmRlbnRlZENvZGU9ITE7dmFyIG09cy5pbmRlbnRhdGlvbjtpZihudWxsPT09cy5pbmRlbnRhdGlvbkRpZmYmJihzLmluZGVudGF0aW9uRGlmZj1zLmluZGVudGF0aW9uLHApKXtmb3Iocy5lbT0hMSxzLnN0cm9uZz0hMSxzLmNvZGU9ITEscy5zdHJpa2V0aHJvdWdoPSExLHMubGlzdD1udWxsO208cy5saXN0U3RhY2tbcy5saXN0U3RhY2subGVuZ3RoLTFdOylzLmxpc3RTdGFjay5wb3AoKSxzLmxpc3RTdGFjay5sZW5ndGg/cy5pbmRlbnRhdGlvbj1zLmxpc3RTdGFja1tzLmxpc3RTdGFjay5sZW5ndGgtMV06cy5saXN0PSExOyExIT09cy5saXN0JiYocy5pbmRlbnRhdGlvbkRpZmY9bS1zLmxpc3RTdGFja1tzLmxpc3RTdGFjay5sZW5ndGgtMV0pfXZhciBoPSEobHx8X3x8cy5wcmV2TGluZS5oZWFkZXJ8fHAmJnV8fHMucHJldkxpbmUuZmVuY2VkQ29kZUVuZCksYj0oITE9PT1zLmxpc3R8fF98fGwpJiZzLmluZGVudGF0aW9uPD1mJiZ0Lm1hdGNoKEMpLEU9bnVsbDtpZihzLmluZGVudGF0aW9uRGlmZj49NCYmKHV8fHMucHJldkxpbmUuZmVuY2VkQ29kZUVuZHx8cy5wcmV2TGluZS5oZWFkZXJ8fGwpKXJldHVybiB0LnNraXBUb0VuZCgpLHMuaW5kZW50ZWRDb2RlPSEwLFQuY29kZTtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7aWYoYSYmcy5pbmRlbnRhdGlvbjw9ZiYmKEU9dC5tYXRjaChSKSkmJkVbMV0ubGVuZ3RoPD02KXJldHVybiBzLnF1b3RlPTAscy5oZWFkZXI9RVsxXS5sZW5ndGgscy50aGlzTGluZS5oZWFkZXI9ITAsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYocy5mb3JtYXR0aW5nPSJoZWFkZXIiKSxzLmY9cy5pbmxpbmUsZChzKTtpZihzLmluZGVudGF0aW9uPD1mJiZ0LmVhdCgiPiIpKXJldHVybiBzLnF1b3RlPWE/MTpzLnF1b3RlKzEsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYocy5mb3JtYXR0aW5nPSJxdW90ZSIpLHQuZWF0U3BhY2UoKSxkKHMpO2lmKCFiJiYhcy5zZXRleHQmJmEmJnMuaW5kZW50YXRpb248PWYmJihFPXQubWF0Y2goTykpKXt2YXIgeT1FWzFdPyJvbCI6InVsIjtyZXR1cm4gcy5pbmRlbnRhdGlvbj1tK3QuY3VycmVudCgpLmxlbmd0aCxzLmxpc3Q9ITAscy5xdW90ZT0wLHMubGlzdFN0YWNrLnB1c2gocy5pbmRlbnRhdGlvbiksbi50YXNrTGlzdHMmJnQubWF0Y2goUywhMSkmJihzLnRhc2tMaXN0PSEwKSxzLmY9cy5pbmxpbmUsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYocy5mb3JtYXR0aW5nPVsibGlzdCIsImxpc3QtIit5XSksZChzKX1yZXR1cm4gYSYmcy5pbmRlbnRhdGlvbjw9ZiYmKEU9dC5tYXRjaChMLCEwKSk/KHMucXVvdGU9MCxzLmZlbmNlZEVuZFJFPW5ldyBSZWdFeHAoRVsxXSsiKyAqJCIpLHMubG9jYWxNb2RlPW4uZmVuY2VkQ29kZUJsb2NrSGlnaGxpZ2h0aW5nJiZyKEVbMl0pLHMubG9jYWxNb2RlJiYocy5sb2NhbFN0YXRlPWUuc3RhcnRTdGF0ZShzLmxvY2FsTW9kZSkpLHMuZj1zLmJsb2NrPWMsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYocy5mb3JtYXR0aW5nPSJjb2RlLWJsb2NrIikscy5jb2RlPS0xLGQocykpOnMuc2V0ZXh0fHwhKGgmJnB8fHMucXVvdGV8fCExIT09cy5saXN0fHxzLmNvZGV8fGJ8fEQudGVzdCh0LnN0cmluZykpJiYoRT10Lmxvb2tBaGVhZCgxKSkmJihFPUUubWF0Y2goaikpPyhzLnNldGV4dD8ocy5oZWFkZXI9cy5zZXRleHQscy5zZXRleHQ9MCx0LnNraXBUb0VuZCgpLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHMuZm9ybWF0dGluZz0iaGVhZGVyIikpOihzLmhlYWRlcj0iPSI9PUVbMF0uY2hhckF0KDApPzE6MixzLnNldGV4dD1zLmhlYWRlcikscy50aGlzTGluZS5oZWFkZXI9ITAscy5mPXMuaW5saW5lLGQocykpOmI/KHQuc2tpcFRvRW5kKCkscy5ocj0hMCxzLnRoaXNMaW5lLmhyPSEwLFQuaHIpOiJbIj09PXQucGVlaygpP28odCxzLGcpOm8odCxzLHMuaW5saW5lKX1mdW5jdGlvbiB1KHQsbil7dmFyIHI9eS50b2tlbih0LG4uaHRtbFN0YXRlKTtpZighdil7dmFyIG89ZS5pbm5lck1vZGUoeSxuLmh0bWxTdGF0ZSk7KCJ4bWwiPT1vLm1vZGUubmFtZSYmbnVsbD09PW8uc3RhdGUudGFnU3RhcnQmJiFvLnN0YXRlLmNvbnRleHQmJm8uc3RhdGUudG9rZW5pemUuaXNJblRleHR8fG4ubWRfaW5zaWRlJiZ0LmN1cnJlbnQoKS5pbmRleE9mKCI+Iik+LTEpJiYobi5mPXAsbi5ibG9jaz1sLG4uaHRtbFN0YXRlPW51bGwpfXJldHVybiByfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj10Lmxpc3RTdGFja1t0Lmxpc3RTdGFjay5sZW5ndGgtMV18fDAsbz10LmluZGVudGF0aW9uPHIsaT1yKzM7aWYodC5mZW5jZWRFbmRSRSYmdC5pbmRlbnRhdGlvbjw9aSYmKG98fGUubWF0Y2godC5mZW5jZWRFbmRSRSkpKXtuLmhpZ2hsaWdodEZvcm1hdHRpbmcmJih0LmZvcm1hdHRpbmc9ImNvZGUtYmxvY2siKTt2YXIgYTtyZXR1cm4gb3x8KGE9ZCh0KSksdC5sb2NhbE1vZGU9dC5sb2NhbFN0YXRlPW51bGwsdC5ibG9jaz1sLHQuZj1wLHQuZmVuY2VkRW5kUkU9bnVsbCx0LmNvZGU9MCx0LnRoaXNMaW5lLmZlbmNlZENvZGVFbmQ9ITAsbz9zKGUsdCx0LmJsb2NrKTphfXJldHVybiB0LmxvY2FsTW9kZT90LmxvY2FsTW9kZS50b2tlbihlLHQubG9jYWxTdGF0ZSk6KGUuc2tpcFRvRW5kKCksVC5jb2RlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PVtdO2lmKGUuZm9ybWF0dGluZyl7dC5wdXNoKFQuZm9ybWF0dGluZyksInN0cmluZyI9PXR5cGVvZiBlLmZvcm1hdHRpbmcmJihlLmZvcm1hdHRpbmc9W2UuZm9ybWF0dGluZ10pO2Zvcih2YXIgcj0wO3I8ZS5mb3JtYXR0aW5nLmxlbmd0aDtyKyspdC5wdXNoKFQuZm9ybWF0dGluZysiLSIrZS5mb3JtYXR0aW5nW3JdKSwiaGVhZGVyIj09PWUuZm9ybWF0dGluZ1tyXSYmdC5wdXNoKFQuZm9ybWF0dGluZysiLSIrZS5mb3JtYXR0aW5nW3JdKyItIitlLmhlYWRlciksInF1b3RlIj09PWUuZm9ybWF0dGluZ1tyXSYmKCFuLm1heEJsb2NrcXVvdGVEZXB0aHx8bi5tYXhCbG9ja3F1b3RlRGVwdGg+PWUucXVvdGU/dC5wdXNoKFQuZm9ybWF0dGluZysiLSIrZS5mb3JtYXR0aW5nW3JdKyItIitlLnF1b3RlKTp0LnB1c2goImVycm9yIikpfWlmKGUudGFza09wZW4pcmV0dXJuIHQucHVzaCgibWV0YSIpLHQubGVuZ3RoP3Quam9pbigiICIpOm51bGw7aWYoZS50YXNrQ2xvc2VkKXJldHVybiB0LnB1c2goInByb3BlcnR5IiksdC5sZW5ndGg/dC5qb2luKCIgIik6bnVsbDtpZihlLmxpbmtIcmVmP3QucHVzaChULmxpbmtIcmVmLCJ1cmwiKTooZS5zdHJvbmcmJnQucHVzaChULnN0cm9uZyksZS5lbSYmdC5wdXNoKFQuZW0pLGUuc3RyaWtldGhyb3VnaCYmdC5wdXNoKFQuc3RyaWtldGhyb3VnaCksZS5lbW9qaSYmdC5wdXNoKFQuZW1vamkpLGUubGlua1RleHQmJnQucHVzaChULmxpbmtUZXh0KSxlLmNvZGUmJnQucHVzaChULmNvZGUpLGUuaW1hZ2UmJnQucHVzaChULmltYWdlKSxlLmltYWdlQWx0VGV4dCYmdC5wdXNoKFQuaW1hZ2VBbHRUZXh0LCJsaW5rIiksZS5pbWFnZU1hcmtlciYmdC5wdXNoKFQuaW1hZ2VNYXJrZXIpKSxlLmhlYWRlciYmdC5wdXNoKFQuaGVhZGVyLFQuaGVhZGVyKyItIitlLmhlYWRlciksZS5xdW90ZSYmKHQucHVzaChULnF1b3RlKSwhbi5tYXhCbG9ja3F1b3RlRGVwdGh8fG4ubWF4QmxvY2txdW90ZURlcHRoPj1lLnF1b3RlP3QucHVzaChULnF1b3RlKyItIitlLnF1b3RlKTp0LnB1c2goVC5xdW90ZSsiLSIrbi5tYXhCbG9ja3F1b3RlRGVwdGgpKSwhMSE9PWUubGlzdCl7dmFyIG89KGUubGlzdFN0YWNrLmxlbmd0aC0xKSUzO28/MT09PW8/dC5wdXNoKFQubGlzdDIpOnQucHVzaChULmxpc3QzKTp0LnB1c2goVC5saXN0MSl9cmV0dXJuIGUudHJhaWxpbmdTcGFjZU5ld0xpbmU/dC5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOmUudHJhaWxpbmdTcGFjZSYmdC5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyhlLnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksdC5sZW5ndGg/dC5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiBfKGUsdCl7aWYoZS5tYXRjaCh4LCEwKSlyZXR1cm4gZCh0KX1mdW5jdGlvbiBwKHQscil7dmFyIG89ci50ZXh0KHQscik7aWYodm9pZCAwIT09bylyZXR1cm4gbztpZihyLmxpc3QpcmV0dXJuIHIubGlzdD1udWxsLGQocik7aWYoci50YXNrTGlzdCl7cmV0dXJuIiAiPT09dC5tYXRjaChTLCEwKVsxXT9yLnRhc2tPcGVuPSEwOnIudGFza0Nsb3NlZD0hMCxuLmhpZ2hsaWdodEZvcm1hdHRpbmcmJihyLmZvcm1hdHRpbmc9InRhc2siKSxyLnRhc2tMaXN0PSExLGQocil9aWYoci50YXNrT3Blbj0hMSxyLnRhc2tDbG9zZWQ9ITEsci5oZWFkZXImJnQubWF0Y2goL14jKyQvLCEwKSlyZXR1cm4gbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYoci5mb3JtYXR0aW5nPSJoZWFkZXIiKSxkKHIpO3ZhciBpPXQubmV4dCgpO2lmKHIubGlua1RpdGxlKXtyLmxpbmtUaXRsZT0hMTt2YXIgYT1pOyIoIj09PWkmJihhPSIpIiksYT0oYSsiIikucmVwbGFjZSgvKFsuPyorXlxbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgbD0iXlxccyooPzpbXiIrYSsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIrYTtpZih0Lm1hdGNoKG5ldyBSZWdFeHAobCksITApKXJldHVybiBULmxpbmtIcmVmfWlmKCJgIj09PWkpe3ZhciBjPXIuZm9ybWF0dGluZztuLmhpZ2hsaWdodEZvcm1hdHRpbmcmJihyLmZvcm1hdHRpbmc9ImNvZGUiKSx0LmVhdFdoaWxlKCJgIik7dmFyIF89dC5jdXJyZW50KCkubGVuZ3RoO2lmKDAhPXIuY29kZXx8ci5xdW90ZSYmMSE9Xyl7aWYoXz09ci5jb2RlKXt2YXIgaD1kKHIpO3JldHVybiByLmNvZGU9MCxofXJldHVybiByLmZvcm1hdHRpbmc9YyxkKHIpfXJldHVybiByLmNvZGU9XyxkKHIpfWlmKHIuY29kZSlyZXR1cm4gZChyKTtpZigiXFwiPT09aSYmKHQubmV4dCgpLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZykpe3ZhciBnPWQociksYj1ULmZvcm1hdHRpbmcrIi1lc2NhcGUiO3JldHVybiBnP2crIiAiK2I6Yn1pZigiISI9PT1pJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gci5pbWFnZU1hcmtlcj0hMCxyLmltYWdlPSEwLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0iaW1hZ2UiKSxkKHIpO2lmKCJbIj09PWkmJnIuaW1hZ2VNYXJrZXImJnQubWF0Y2goL1teXF1dKlxdKFwoLio/XCl8ID9cWy4qP1xdKS8sITEpKXJldHVybiByLmltYWdlTWFya2VyPSExLHIuaW1hZ2VBbHRUZXh0PSEwLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0iaW1hZ2UiKSxkKHIpO2lmKCJdIj09PWkmJnIuaW1hZ2VBbHRUZXh0KXtuLmhpZ2hsaWdodEZvcm1hdHRpbmcmJihyLmZvcm1hdHRpbmc9ImltYWdlIik7dmFyIGc9ZChyKTtyZXR1cm4gci5pbWFnZUFsdFRleHQ9ITEsci5pbWFnZT0hMSxyLmlubGluZT1yLmY9bSxnfWlmKCJbIj09PWkmJiFyLmltYWdlKXJldHVybiByLmxpbmtUZXh0JiZ0Lm1hdGNoKC9eLio/XF0vKT9kKHIpOihyLmxpbmtUZXh0PSEwLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0ibGluayIpLGQocikpO2lmKCJdIj09PWkmJnIubGlua1RleHQpe24uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0ibGluayIpO3ZhciBnPWQocik7cmV0dXJuIHIubGlua1RleHQ9ITEsci5pbmxpbmU9ci5mPXQubWF0Y2goL1woLio/XCl8ID9cWy4qP1xdLywhMSk/bTpwLGd9aWYoIjwiPT09aSYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpe3IuZj1yLmlubGluZT1mLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0ibGluayIpO3ZhciBnPWQocik7cmV0dXJuIGc/Zys9IiAiOmc9IiIsZytULmxpbmtJbmxpbmV9aWYoIjwiPT09aSYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSl7ci5mPXIuaW5saW5lPWYsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYoci5mb3JtYXR0aW5nPSJsaW5rIik7dmFyIGc9ZChyKTtyZXR1cm4gZz9nKz0iICI6Zz0iIixnK1QubGlua0VtYWlsfWlmKG4ueG1sJiYiPCI9PT1pJiZ0Lm1hdGNoKC9eKCEtLXxcP3whXFtDREFUQVxbfFthLXpdW2EtejAtOS1dKig/OlxzK1thLXpfOi5cLV0rKD86XHMqPVxzKltePl0rKT8pKlxzKig/Oj58JCkpL2ksITEpKXt2YXIgRT10LnN0cmluZy5pbmRleE9mKCI+Iix0LnBvcyk7aWYoLTEhPUUpey9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QodC5zdHJpbmcuc3Vic3RyaW5nKHQuc3RhcnQsRSkpJiYoci5tZF9pbnNpZGU9ITApfXJldHVybiB0LmJhY2tVcCgxKSxyLmh0bWxTdGF0ZT1lLnN0YXJ0U3RhdGUoeSkscyh0LHIsdSl9aWYobi54bWwmJiI8Ij09PWkmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIHIubWRfaW5zaWRlPSExLCJ0YWciO2lmKCIqIj09PWl8fCJfIj09PWkpe2Zvcih2YXIgdj0xLEE9MT09dC5wb3M/IiAiOnQuc3RyaW5nLmNoYXJBdCh0LnBvcy0yKTt2PDMmJnQuZWF0KGkpOyl2Kys7dmFyIEM9dC5wZWVrKCl8fCIgIixPPSEvXHMvLnRlc3QoQykmJighdy50ZXN0KEMpfHwvXHMvLnRlc3QoQSl8fHcudGVzdChBKSksUj0hL1xzLy50ZXN0KEEpJiYoIXcudGVzdChBKXx8L1xzLy50ZXN0KEMpfHx3LnRlc3QoQykpLGo9bnVsbCx4PW51bGw7aWYodiUyJiYoci5lbXx8IU98fCIqIiE9PWkmJlImJiF3LnRlc3QoQSk/ci5lbSE9aXx8IVJ8fCIqIiE9PWkmJk8mJiF3LnRlc3QoQyl8fChqPSExKTpqPSEwKSx2PjEmJihyLnN0cm9uZ3x8IU98fCIqIiE9PWkmJlImJiF3LnRlc3QoQSk/ci5zdHJvbmchPWl8fCFSfHwiKiIhPT1pJiZPJiYhdy50ZXN0KEMpfHwoeD0hMSk6eD0hMCksbnVsbCE9eHx8bnVsbCE9ail7bi5oaWdobGlnaHRGb3JtYXR0aW5nJiYoci5mb3JtYXR0aW5nPW51bGw9PWo/InN0cm9uZyI6bnVsbD09eD8iZW0iOiJzdHJvbmcgZW0iKSwhMD09PWomJihyLmVtPWkpLCEwPT09eCYmKHIuc3Ryb25nPWkpO3ZhciBoPWQocik7cmV0dXJuITE9PT1qJiYoci5lbT0hMSksITE9PT14JiYoci5zdHJvbmc9ITEpLGh9fWVsc2UgaWYoIiAiPT09aSYmKHQuZWF0KCIqIil8fHQuZWF0KCJfIikpKXtpZigiICI9PT10LnBlZWsoKSlyZXR1cm4gZChyKTt0LmJhY2tVcCgxKX1pZihuLnN0cmlrZXRocm91Z2gpaWYoIn4iPT09aSYmdC5lYXRXaGlsZShpKSl7aWYoci5zdHJpa2V0aHJvdWdoKXtuLmhpZ2hsaWdodEZvcm1hdHRpbmcmJihyLmZvcm1hdHRpbmc9InN0cmlrZXRocm91Z2giKTt2YXIgaD1kKHIpO3JldHVybiByLnN0cmlrZXRocm91Z2g9ITEsaH1pZih0Lm1hdGNoKC9eW15cc10vLCExKSlyZXR1cm4gci5zdHJpa2V0aHJvdWdoPSEwLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0ic3RyaWtldGhyb3VnaCIpLGQocil9ZWxzZSBpZigiICI9PT1pJiZ0Lm1hdGNoKC9efn4vLCEwKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIGQocik7dC5iYWNrVXAoMil9aWYobi5lbW9qaSYmIjoiPT09aSYmdC5tYXRjaCgvXig/OlthLXpfXGQrXVthLXpfXGQrLV0qfFwtW2Etel9cZCtdW2Etel9cZCstXSopOi8pKXtyLmVtb2ppPSEwLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHIuZm9ybWF0dGluZz0iZW1vamkiKTt2YXIgTD1kKHIpO3JldHVybiByLmVtb2ppPSExLEx9cmV0dXJuIiAiPT09aSYmKHQubWF0Y2goL14gKyQvLCExKT9yLnRyYWlsaW5nU3BhY2UrKzpyLnRyYWlsaW5nU3BhY2UmJihyLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSksZChyKX1mdW5jdGlvbiBmKGUsdCl7aWYoIj4iPT09ZS5uZXh0KCkpe3QuZj10LmlubGluZT1wLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHQuZm9ybWF0dGluZz0ibGluayIpO3ZhciByPWQodCk7cmV0dXJuIHI/cis9IiAiOnI9IiIscitULmxpbmtJbmxpbmV9cmV0dXJuIGUubWF0Y2goL15bXj5dKy8sITApLFQubGlua0lubGluZX1mdW5jdGlvbiBtKGUsdCl7aWYoZS5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciByPWUubmV4dCgpO3JldHVybiIoIj09PXJ8fCJbIj09PXI/KHQuZj10LmlubGluZT1oKCIoIj09PXI/IikiOiJdIiksbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYodC5mb3JtYXR0aW5nPSJsaW5rLXN0cmluZyIpLHQubGlua0hyZWY9ITAsZCh0KSk6ImVycm9yIn1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe2lmKHQubmV4dCgpPT09ZSl7ci5mPXIuaW5saW5lPXAsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYoci5mb3JtYXR0aW5nPSJsaW5rLXN0cmluZyIpO3ZhciBvPWQocik7cmV0dXJuIHIubGlua0hyZWY9ITEsb31yZXR1cm4gdC5tYXRjaChNW2VdKSxyLmxpbmtIcmVmPSEwLGQocil9fWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZS5tYXRjaCgvXihbXlxdXFxdfFxcLikqXF06LywhMSk/KHQuZj1iLGUubmV4dCgpLG4uaGlnaGxpZ2h0Rm9ybWF0dGluZyYmKHQuZm9ybWF0dGluZz0ibGluayIpLHQubGlua1RleHQ9ITAsZCh0KSk6byhlLHQscCl9ZnVuY3Rpb24gYihlLHQpe2lmKGUubWF0Y2goL15cXTovLCEwKSl7dC5mPXQuaW5saW5lPUUsbi5oaWdobGlnaHRGb3JtYXR0aW5nJiYodC5mb3JtYXR0aW5nPSJsaW5rIik7dmFyIHI9ZCh0KTtyZXR1cm4gdC5saW5rVGV4dD0hMSxyfXJldHVybiBlLm1hdGNoKC9eKFteXF1cXF18XFwuKSsvLCEwKSxULmxpbmtUZXh0fWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4gZS5lYXRTcGFjZSgpP251bGw6KGUubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT1lLnBlZWsoKT90LmxpbmtUaXRsZT0hMDplLm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLHQuZj10LmlubGluZT1wLFQubGlua0hyZWYrIiB1cmwiKX12YXIgeT1lLmdldE1vZGUodCwidGV4dC9odG1sIiksdj0ibnVsbCI9PXkubmFtZTt2b2lkIDA9PT1uLmhpZ2hsaWdodEZvcm1hdHRpbmcmJihuLmhpZ2hsaWdodEZvcm1hdHRpbmc9ITEpLHZvaWQgMD09PW4ubWF4QmxvY2txdW90ZURlcHRoJiYobi5tYXhCbG9ja3F1b3RlRGVwdGg9MCksdm9pZCAwPT09bi50YXNrTGlzdHMmJihuLnRhc2tMaXN0cz0hMSksdm9pZCAwPT09bi5zdHJpa2V0aHJvdWdoJiYobi5zdHJpa2V0aHJvdWdoPSExKSx2b2lkIDA9PT1uLmVtb2ppJiYobi5lbW9qaT0hMSksdm9pZCAwPT09bi5mZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmcmJihuLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZz0hMCksdm9pZCAwPT09bi54bWwmJihuLnhtbD0hMCksdm9pZCAwPT09bi50b2tlblR5cGVPdmVycmlkZXMmJihuLnRva2VuVHlwZU92ZXJyaWRlcz17fSk7dmFyIFQ9e2hlYWRlcjoiaGVhZGVyIixjb2RlOiJjb21tZW50IixxdW90ZToicXVvdGUiLGxpc3QxOiJ2YXJpYWJsZS0yIixsaXN0MjoidmFyaWFibGUtMyIsbGlzdDM6ImtleXdvcmQiLGhyOiJociIsaW1hZ2U6ImltYWdlIixpbWFnZUFsdFRleHQ6ImltYWdlLWFsdC10ZXh0IixpbWFnZU1hcmtlcjoiaW1hZ2UtbWFya2VyIixmb3JtYXR0aW5nOiJmb3JtYXR0aW5nIixsaW5rSW5saW5lOiJsaW5rIixsaW5rRW1haWw6ImxpbmsiLGxpbmtUZXh0OiJsaW5rIixsaW5rSHJlZjoic3RyaW5nIixlbToiZW0iLHN0cm9uZzoic3Ryb25nIixzdHJpa2V0aHJvdWdoOiJzdHJpa2V0aHJvdWdoIixlbW9qaToiYnVpbHRpbiJ9O2Zvcih2YXIgQSBpbiBUKVQuaGFzT3duUHJvcGVydHkoQSkmJm4udG9rZW5UeXBlT3ZlcnJpZGVzW0FdJiYoVFtBXT1uLnRva2VuVHlwZU92ZXJyaWRlc1tBXSk7dmFyIEM9L14oWypcLV9dKSg/OlxzKlwxKXsyLH1ccyokLyxPPS9eKD86WypcLStdfF5bMC05XSsoWy4pXSkpXHMrLyxTPS9eXFsoeHwgKVxdKD89XHMpL2ksUj1uLmFsbG93QXR4SGVhZGVyV2l0aG91dFNwYWNlPy9eKCMrKS86L14oIyspKD86IHwkKS8saj0vXiAqKD86XD17MSx9fC17MSx9KVxzKiQvLHg9L15bXiMhXFtcXSpfXFw8PmAgIicofjpdKy8sTD0vXih+fn4rfGBgYCspWyBcdF0qKFtcdysjLV0qKVteXG5gXSokLyxEPS9eXHMqXFtbXlxdXSs/XF06LiokLyx3PS9bISIjJCUmJygpKissXC0uXC86Ozw9Pj9AXFtcXFxdXl9ge3x9flx4QTFceEE3XHhBQlx4QjZceEI3XHhCQlx4QkZcdTAzN0VcdTAzODdcdTA1NUEtXHUwNTVGXHUwNTg5XHUwNThBXHUwNUJFXHUwNUMwXHUwNUMzXHUwNUM2XHUwNUYzXHUwNUY0XHUwNjA5XHUwNjBBXHUwNjBDXHUwNjBEXHUwNjFCXHUwNjFFXHUwNjFGXHUwNjZBLVx1MDY2RFx1MDZENFx1MDcwMC1cdTA3MERcdTA3RjctXHUwN0Y5XHUwODMwLVx1MDgzRVx1MDg1RVx1MDk2NFx1MDk2NVx1MDk3MFx1MEFGMFx1MERGNFx1MEU0Rlx1MEU1QVx1MEU1Qlx1MEYwNC1cdTBGMTJcdTBGMTRcdTBGM0EtXHUwRjNEXHUwRjg1XHUwRkQwLVx1MEZENFx1MEZEOVx1MEZEQVx1MTA0QS1cdTEwNEZcdTEwRkJcdTEzNjAtXHUxMzY4XHUxNDAwXHUxNjZEXHUxNjZFXHUxNjlCXHUxNjlDXHUxNkVCLVx1MTZFRFx1MTczNVx1MTczNlx1MTdENC1cdTE3RDZcdTE3RDgtXHUxN0RBXHUxODAwLVx1MTgwQVx1MTk0NFx1MTk0NVx1MUExRVx1MUExRlx1MUFBMC1cdTFBQTZcdTFBQTgtXHUxQUFEXHUxQjVBLVx1MUI2MFx1MUJGQy1cdTFCRkZcdTFDM0ItXHUxQzNGXHUxQzdFXHUxQzdGXHUxQ0MwLVx1MUNDN1x1MUNEM1x1MjAxMC1cdTIwMjdcdTIwMzAtXHUyMDQzXHUyMDQ1LVx1MjA1MVx1MjA1My1cdTIwNUVcdTIwN0RcdTIwN0VcdTIwOERcdTIwOEVcdTIzMDgtXHUyMzBCXHUyMzI5XHUyMzJBXHUyNzY4LVx1Mjc3NVx1MjdDNVx1MjdDNlx1MjdFNi1cdTI3RUZcdTI5ODMtXHUyOTk4XHUyOUQ4LVx1MjlEQlx1MjlGQ1x1MjlGRFx1MkNGOS1cdTJDRkNcdTJDRkVcdTJDRkZcdTJENzBcdTJFMDAtXHUyRTJFXHUyRTMwLVx1MkU0Mlx1MzAwMS1cdTMwMDNcdTMwMDgtXHUzMDExXHUzMDE0LVx1MzAxRlx1MzAzMFx1MzAzRFx1MzBBMFx1MzBGQlx1QTRGRVx1QTRGRlx1QTYwRC1cdUE2MEZcdUE2NzNcdUE2N0VcdUE2RjItXHVBNkY3XHVBODc0LVx1QTg3N1x1QThDRVx1QThDRlx1QThGOC1cdUE4RkFcdUE4RkNcdUE5MkVcdUE5MkZcdUE5NUZcdUE5QzEtXHVBOUNEXHVBOURFXHVBOURGXHVBQTVDLVx1QUE1Rlx1QUFERVx1QUFERlx1QUFGMFx1QUFGMVx1QUJFQlx1RkQzRVx1RkQzRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2MVx1RkU2M1x1RkU2OFx1RkU2QVx1RkU2Qlx1RkYwMS1cdUZGMDNcdUZGMDUtXHVGRjBBXHVGRjBDLVx1RkYwRlx1RkYxQVx1RkYxQlx1RkYxRlx1RkYyMFx1RkYzQi1cdUZGM0RcdUZGM0ZcdUZGNUJcdUZGNURcdUZGNUYtXHVGRjY1XXxcdUQ4MDBbXHVERDAwLVx1REQwMlx1REY5Rlx1REZEMF18XHVEODAxXHVERDZGfFx1RDgwMltcdURDNTdcdUREMUZcdUREM0ZcdURFNTAtXHVERTU4XHVERTdGXHVERUYwLVx1REVGNlx1REYzOS1cdURGM0ZcdURGOTktXHVERjlDXXxcdUQ4MDRbXHVEQzQ3LVx1REM0RFx1RENCQlx1RENCQ1x1RENCRS1cdURDQzFcdURENDAtXHVERDQzXHVERDc0XHVERDc1XHVEREM1LVx1RERDOVx1RERDRFx1REREQlx1RERERC1cdUREREZcdURFMzgtXHVERTNEXHVERUE5XXxcdUQ4MDVbXHVEQ0M2XHVEREMxLVx1REREN1x1REU0MS1cdURFNDNcdURGM0MtXHVERjNFXXxcdUQ4MDlbXHVEQzcwLVx1REM3NF18XHVEODFBW1x1REU2RVx1REU2Rlx1REVGNVx1REYzNy1cdURGM0JcdURGNDRdfFx1RDgyRlx1REM5RnxcdUQ4MzZbXHVERTg3LVx1REU4Ql0vLE09eyIpIjovXig/OlteXFxcKFwpXXxcXC58XCgoPzpbXlxcXChcKV18XFwuKSpcKSkqPyg/PVwpKS8sIl0iOi9eKD86W15cXFxbXF1dfFxcLnxcWyg/OlteXFxcW1xdXXxcXC4pKlxdKSo/KD89XF0pL30saz17c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOmwscHJldkxpbmU6e3N0cmVhbTpudWxsfSx0aGlzTGluZTp7c3RyZWFtOm51bGx9LGJsb2NrOmwsaHRtbFN0YXRlOm51bGwsaW5kZW50YXRpb246MCxpbmxpbmU6cCx0ZXh0Ol8sZm9ybWF0dGluZzohMSxsaW5rVGV4dDohMSxsaW5rSHJlZjohMSxsaW5rVGl0bGU6ITEsY29kZTowLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCxzZXRleHQ6MCxocjohMSx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3RTdGFjazpbXSxxdW90ZTowLHRyYWlsaW5nU3BhY2U6MCx0cmFpbGluZ1NwYWNlTmV3TGluZTohMSxzdHJpa2V0aHJvdWdoOiExLGVtb2ppOiExLGZlbmNlZEVuZFJFOm51bGx9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lOnQucHJldkxpbmUsdGhpc0xpbmU6dC50aGlzTGluZSxibG9jazp0LmJsb2NrLGh0bWxTdGF0ZTp0Lmh0bWxTdGF0ZSYmZS5jb3B5U3RhdGUoeSx0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9lLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGZvcm1hdHRpbmc6ITEsbGlua1RleHQ6dC5saW5rVGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsbGlua0hyZWY6dC5saW5rSHJlZixjb2RlOnQuY29kZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxzdHJpa2V0aHJvdWdoOnQuc3RyaWtldGhyb3VnaCxlbW9qaTp0LmVtb2ppLGhlYWRlcjp0LmhlYWRlcixzZXRleHQ6dC5zZXRleHQsaHI6dC5ocix0YXNrTGlzdDp0LnRhc2tMaXN0LGxpc3Q6dC5saXN0LGxpc3RTdGFjazp0Lmxpc3RTdGFjay5zbGljZSgwKSxxdW90ZTp0LnF1b3RlLGluZGVudGVkQ29kZTp0LmluZGVudGVkQ29kZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZSxmZW5jZWRFbmRSRTp0LmZlbmNlZEVuZFJFfX0sdG9rZW46ZnVuY3Rpb24oZSx0KXtpZih0LmZvcm1hdHRpbmc9ITEsZSE9dC50aGlzTGluZS5zdHJlYW0pe2lmKHQuaGVhZGVyPTAsdC5ocj0hMSxlLm1hdGNoKC9eXHMqJC8sITApKXJldHVybiBhKHQpLG51bGw7aWYodC5wcmV2TGluZT10LnRoaXNMaW5lLHQudGhpc0xpbmU9e3N0cmVhbTplfSx0LnRhc2tMaXN0PSExLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsIXQubG9jYWxTdGF0ZSYmKHQuZj10LmJsb2NrLHQuZiE9dSkpe3ZhciBuPWUubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoO2lmKHQuaW5kZW50YXRpb249bix0LmluZGVudGF0aW9uRGlmZj1udWxsLG4+MClyZXR1cm4gbnVsbH19cmV0dXJuIHQuZihlLHQpfSxpbm5lck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYmxvY2s9PXU/e3N0YXRlOmUuaHRtbFN0YXRlLG1vZGU6eX06ZS5sb2NhbFN0YXRlP3tzdGF0ZTplLmxvY2FsU3RhdGUsbW9kZTplLmxvY2FsTW9kZX06e3N0YXRlOmUsbW9kZTprfX0saW5kZW50OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdC5ibG9jaz09dSYmeS5pbmRlbnQ/eS5pbmRlbnQodC5odG1sU3RhdGUsbixyKTp0LmxvY2FsU3RhdGUmJnQubG9jYWxNb2RlLmluZGVudD90LmxvY2FsTW9kZS5pbmRlbnQodC5sb2NhbFN0YXRlLG4scik6ZS5QYXNzfSxibGFua0xpbmU6YSxnZXRUeXBlOmQsYmxvY2tDb21tZW50U3RhcnQ6Ilx4M2MhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS1ceDNlIixjbG9zZUJyYWNrZXRzOiIoKVtde30nJ1wiXCJgYCIsZm9sZDoibWFya2Rvd24ifTtyZXR1cm4ga30sInhtbCIpLGUuZGVmaW5lTUlNRSgidGV4dC9tYXJrZG93biIsIm1hcmtkb3duIiksZS5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpfSl9LCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvbWV0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlLm1vZGVJbmZvPVt7bmFtZToiQVBMIixtaW1lOiJ0ZXh0L2FwbCIsbW9kZToiYXBsIixleHQ6WyJkeWFsb2ciLCJhcGwiXX0se25hbWU6IlBHUCIsbWltZXM6WyJhcHBsaWNhdGlvbi9wZ3AiLCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkIiwiYXBwbGljYXRpb24vcGdwLWtleXMiLCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIl0sbW9kZToiYXNjaWlhcm1vciIsZXh0OlsiYXNjIiwicGdwIiwic2lnIl19LHtuYW1lOiJBU04uMSIsbWltZToidGV4dC94LXR0Y24tYXNuIixtb2RlOiJhc24uMSIsZXh0OlsiYXNuIiwiYXNuMSJdfSx7bmFtZToiQXN0ZXJpc2siLG1pbWU6InRleHQveC1hc3RlcmlzayIsbW9kZToiYXN0ZXJpc2siLGZpbGU6L15leHRlbnNpb25zXC5jb25mJC9pfSx7bmFtZToiQnJhaW5mdWNrIixtaW1lOiJ0ZXh0L3gtYnJhaW5mdWNrIixtb2RlOiJicmFpbmZ1Y2siLGV4dDpbImIiLCJiZiJdfSx7bmFtZToiQyIsbWltZToidGV4dC94LWNzcmMiLG1vZGU6ImNsaWtlIixleHQ6WyJjIiwiaCIsImlubyJdfSx7bmFtZToiQysrIixtaW1lOiJ0ZXh0L3gtYysrc3JjIixtb2RlOiJjbGlrZSIsZXh0OlsiY3BwIiwiYysrIiwiY2MiLCJjeHgiLCJocHAiLCJoKysiLCJoaCIsImh4eCJdLGFsaWFzOlsiY3BwIl19LHtuYW1lOiJDb2JvbCIsbWltZToidGV4dC94LWNvYm9sIixtb2RlOiJjb2JvbCIsZXh0OlsiY29iIiwiY3B5Il19LHtuYW1lOiJDIyIsbWltZToidGV4dC94LWNzaGFycCIsbW9kZToiY2xpa2UiLGV4dDpbImNzIl0sYWxpYXM6WyJjc2hhcnAiXX0se25hbWU6IkNsb2p1cmUiLG1pbWU6InRleHQveC1jbG9qdXJlIixtb2RlOiJjbG9qdXJlIixleHQ6WyJjbGoiLCJjbGpjIiwiY2xqeCJdfSx7bmFtZToiQ2xvanVyZVNjcmlwdCIsbWltZToidGV4dC94LWNsb2p1cmVzY3JpcHQiLG1vZGU6ImNsb2p1cmUiLGV4dDpbImNsanMiXX0se25hbWU6IkNsb3N1cmUgU3R5bGVzaGVldHMgKEdTUykiLG1pbWU6InRleHQveC1nc3MiLG1vZGU6ImNzcyIsZXh0OlsiZ3NzIl19LHtuYW1lOiJDTWFrZSIsbWltZToidGV4dC94LWNtYWtlIixtb2RlOiJjbWFrZSIsZXh0OlsiY21ha2UiLCJjbWFrZS5pbiJdLGZpbGU6L15DTWFrZUxpc3RzLnR4dCQvfSx7bmFtZToiQ29mZmVlU2NyaXB0IixtaW1lczpbImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHQiLCJ0ZXh0L2NvZmZlZXNjcmlwdCIsInRleHQveC1jb2ZmZWVzY3JpcHQiXSxtb2RlOiJjb2ZmZWVzY3JpcHQiLGV4dDpbImNvZmZlZSJdLGFsaWFzOlsiY29mZmVlIiwiY29mZmVlLXNjcmlwdCJdfSx7bmFtZToiQ29tbW9uIExpc3AiLG1pbWU6InRleHQveC1jb21tb24tbGlzcCIsbW9kZToiY29tbW9ubGlzcCIsZXh0OlsiY2wiLCJsaXNwIiwiZWwiXSxhbGlhczpbImxpc3AiXX0se25hbWU6IkN5cGhlciIsbWltZToiYXBwbGljYXRpb24veC1jeXBoZXItcXVlcnkiLG1vZGU6ImN5cGhlciIsZXh0OlsiY3lwIiwiY3lwaGVyIl19LHtuYW1lOiJDeXRob24iLG1pbWU6InRleHQveC1jeXRob24iLG1vZGU6InB5dGhvbiIsZXh0OlsicHl4IiwicHhkIiwicHhpIl19LHtuYW1lOiJDcnlzdGFsIixtaW1lOiJ0ZXh0L3gtY3J5c3RhbCIsbW9kZToiY3J5c3RhbCIsZXh0OlsiY3IiXX0se25hbWU6IkNTUyIsbWltZToidGV4dC9jc3MiLG1vZGU6ImNzcyIsZXh0OlsiY3NzIl19LHtuYW1lOiJDUUwiLG1pbWU6InRleHQveC1jYXNzYW5kcmEiLG1vZGU6InNxbCIsZXh0OlsiY3FsIl19LHtuYW1lOiJEIixtaW1lOiJ0ZXh0L3gtZCIsbW9kZToiZCIsZXh0OlsiZCJdfSx7bmFtZToiRGFydCIsbWltZXM6WyJhcHBsaWNhdGlvbi9kYXJ0IiwidGV4dC94LWRhcnQiXSxtb2RlOiJkYXJ0IixleHQ6WyJkYXJ0Il19LHtuYW1lOiJkaWZmIixtaW1lOiJ0ZXh0L3gtZGlmZiIsbW9kZToiZGlmZiIsZXh0OlsiZGlmZiIsInBhdGNoIl19LHtuYW1lOiJEamFuZ28iLG1pbWU6InRleHQveC1kamFuZ28iLG1vZGU6ImRqYW5nbyJ9LHtuYW1lOiJEb2NrZXJmaWxlIixtaW1lOiJ0ZXh0L3gtZG9ja2VyZmlsZSIsbW9kZToiZG9ja2VyZmlsZSIsZmlsZTovXkRvY2tlcmZpbGUkL30se25hbWU6IkRURCIsbWltZToiYXBwbGljYXRpb24veG1sLWR0ZCIsbW9kZToiZHRkIixleHQ6WyJkdGQiXX0se25hbWU6IkR5bGFuIixtaW1lOiJ0ZXh0L3gtZHlsYW4iLG1vZGU6ImR5bGFuIixleHQ6WyJkeWxhbiIsImR5bCIsImludHIiXX0se25hbWU6IkVCTkYiLG1pbWU6InRleHQveC1lYm5mIixtb2RlOiJlYm5mIn0se25hbWU6IkVDTCIsbWltZToidGV4dC94LWVjbCIsbW9kZToiZWNsIixleHQ6WyJlY2wiXX0se25hbWU6ImVkbiIsbWltZToiYXBwbGljYXRpb24vZWRuIixtb2RlOiJjbG9qdXJlIixleHQ6WyJlZG4iXX0se25hbWU6IkVpZmZlbCIsbWltZToidGV4dC94LWVpZmZlbCIsbW9kZToiZWlmZmVsIixleHQ6WyJlIl19LHtuYW1lOiJFbG0iLG1pbWU6InRleHQveC1lbG0iLG1vZGU6ImVsbSIsZXh0OlsiZWxtIl19LHtuYW1lOiJFbWJlZGRlZCBKYXZhc2NyaXB0IixtaW1lOiJhcHBsaWNhdGlvbi94LWVqcyIsbW9kZToiaHRtbGVtYmVkZGVkIixleHQ6WyJlanMiXX0se25hbWU6IkVtYmVkZGVkIFJ1YnkiLG1pbWU6ImFwcGxpY2F0aW9uL3gtZXJiIixtb2RlOiJodG1sZW1iZWRkZWQiLGV4dDpbImVyYiJdfSx7bmFtZToiRXJsYW5nIixtaW1lOiJ0ZXh0L3gtZXJsYW5nIixtb2RlOiJlcmxhbmciLGV4dDpbImVybCJdfSx7bmFtZToiRXNwZXIiLG1pbWU6InRleHQveC1lc3BlciIsbW9kZToic3FsIn0se25hbWU6IkZhY3RvciIsbWltZToidGV4dC94LWZhY3RvciIsbW9kZToiZmFjdG9yIixleHQ6WyJmYWN0b3IiXX0se25hbWU6IkZDTCIsbWltZToidGV4dC94LWZjbCIsbW9kZToiZmNsIn0se25hbWU6IkZvcnRoIixtaW1lOiJ0ZXh0L3gtZm9ydGgiLG1vZGU6ImZvcnRoIixleHQ6WyJmb3J0aCIsImZ0aCIsIjR0aCJdfSx7bmFtZToiRm9ydHJhbiIsbWltZToidGV4dC94LWZvcnRyYW4iLG1vZGU6ImZvcnRyYW4iLGV4dDpbImYiLCJmb3IiLCJmNzciLCJmOTAiLCJmOTUiXX0se25hbWU6IkYjIixtaW1lOiJ0ZXh0L3gtZnNoYXJwIixtb2RlOiJtbGxpa2UiLGV4dDpbImZzIl0sYWxpYXM6WyJmc2hhcnAiXX0se25hbWU6IkdhcyIsbWltZToidGV4dC94LWdhcyIsbW9kZToiZ2FzIixleHQ6WyJzIl19LHtuYW1lOiJHaGVya2luIixtaW1lOiJ0ZXh0L3gtZmVhdHVyZSIsbW9kZToiZ2hlcmtpbiIsZXh0OlsiZmVhdHVyZSJdfSx7bmFtZToiR2l0SHViIEZsYXZvcmVkIE1hcmtkb3duIixtaW1lOiJ0ZXh0L3gtZ2ZtIixtb2RlOiJnZm0iLGZpbGU6L14ocmVhZG1lfGNvbnRyaWJ1dGluZ3xoaXN0b3J5KS5tZCQvaX0se25hbWU6IkdvIixtaW1lOiJ0ZXh0L3gtZ28iLG1vZGU6ImdvIixleHQ6WyJnbyJdfSx7bmFtZToiR3Jvb3Z5IixtaW1lOiJ0ZXh0L3gtZ3Jvb3Z5Iixtb2RlOiJncm9vdnkiLGV4dDpbImdyb292eSIsImdyYWRsZSJdLGZpbGU6L15KZW5raW5zZmlsZSQvfSx7bmFtZToiSEFNTCIsbWltZToidGV4dC94LWhhbWwiLG1vZGU6ImhhbWwiLGV4dDpbImhhbWwiXX0se25hbWU6Ikhhc2tlbGwiLG1pbWU6InRleHQveC1oYXNrZWxsIixtb2RlOiJoYXNrZWxsIixleHQ6WyJocyJdfSx7bmFtZToiSGFza2VsbCAoTGl0ZXJhdGUpIixtaW1lOiJ0ZXh0L3gtbGl0ZXJhdGUtaGFza2VsbCIsbW9kZToiaGFza2VsbC1saXRlcmF0ZSIsZXh0OlsibGhzIl19LHtuYW1lOiJIYXhlIixtaW1lOiJ0ZXh0L3gtaGF4ZSIsbW9kZToiaGF4ZSIsZXh0OlsiaHgiXX0se25hbWU6IkhYTUwiLG1pbWU6InRleHQveC1oeG1sIixtb2RlOiJoYXhlIixleHQ6WyJoeG1sIl19LHtuYW1lOiJBU1AuTkVUIixtaW1lOiJhcHBsaWNhdGlvbi94LWFzcHgiLG1vZGU6Imh0bWxlbWJlZGRlZCIsZXh0OlsiYXNweCJdLGFsaWFzOlsiYXNwIiwiYXNweCJdfSx7bmFtZToiSFRNTCIsbWltZToidGV4dC9odG1sIixtb2RlOiJodG1sbWl4ZWQiLGV4dDpbImh0bWwiLCJodG0iLCJoYW5kbGViYXJzIiwiaGJzIl0sYWxpYXM6WyJ4aHRtbCJdfSx7bmFtZToiSFRUUCIsbWltZToibWVzc2FnZS9odHRwIixtb2RlOiJodHRwIn0se25hbWU6IklETCIsbWltZToidGV4dC94LWlkbCIsbW9kZToiaWRsIixleHQ6WyJwcm8iXX0se25hbWU6IlB1ZyIsbWltZToidGV4dC94LXB1ZyIsbW9kZToicHVnIixleHQ6WyJqYWRlIiwicHVnIl0sYWxpYXM6WyJqYWRlIl19LHtuYW1lOiJKYXZhIixtaW1lOiJ0ZXh0L3gtamF2YSIsbW9kZToiY2xpa2UiLGV4dDpbImphdmEiXX0se25hbWU6IkphdmEgU2VydmVyIFBhZ2VzIixtaW1lOiJhcHBsaWNhdGlvbi94LWpzcCIsbW9kZToiaHRtbGVtYmVkZGVkIixleHQ6WyJqc3AiXSxhbGlhczpbImpzcCJdfSx7bmFtZToiSmF2YVNjcmlwdCIsbWltZXM6WyJ0ZXh0L2phdmFzY3JpcHQiLCJ0ZXh0L2VjbWFzY3JpcHQiLCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCJdLG1vZGU6ImphdmFzY3JpcHQiLGV4dDpbImpzIl0sYWxpYXM6WyJlY21hc2NyaXB0IiwianMiLCJub2RlIl19LHtuYW1lOiJKU09OIixtaW1lczpbImFwcGxpY2F0aW9uL2pzb24iLCJhcHBsaWNhdGlvbi94LWpzb24iXSxtb2RlOiJqYXZhc2NyaXB0IixleHQ6WyJqc29uIiwibWFwIl0sYWxpYXM6WyJqc29uNSJdfSx7bmFtZToiSlNPTi1MRCIsbWltZToiYXBwbGljYXRpb24vbGQranNvbiIsbW9kZToiamF2YXNjcmlwdCIsZXh0OlsianNvbmxkIl0sYWxpYXM6WyJqc29ubGQiXX0se25hbWU6IkpTWCIsbWltZToidGV4dC9qc3giLG1vZGU6ImpzeCIsZXh0OlsianN4Il19LHtuYW1lOiJKaW5qYTIiLG1pbWU6InRleHQvamluamEyIixtb2RlOiJqaW5qYTIiLGV4dDpbImoyIiwiamluamEiLCJqaW5qYTIiXX0se25hbWU6Ikp1bGlhIixtaW1lOiJ0ZXh0L3gtanVsaWEiLG1vZGU6Imp1bGlhIixleHQ6WyJqbCJdfSx7bmFtZToiS290bGluIixtaW1lOiJ0ZXh0L3gta290bGluIixtb2RlOiJjbGlrZSIsZXh0Olsia3QiXX0se25hbWU6IkxFU1MiLG1pbWU6InRleHQveC1sZXNzIixtb2RlOiJjc3MiLGV4dDpbImxlc3MiXX0se25hbWU6IkxpdmVTY3JpcHQiLG1pbWU6InRleHQveC1saXZlc2NyaXB0Iixtb2RlOiJsaXZlc2NyaXB0IixleHQ6WyJscyJdLGFsaWFzOlsibHMiXX0se25hbWU6Ikx1YSIsbWltZToidGV4dC94LWx1YSIsbW9kZToibHVhIixleHQ6WyJsdWEiXX0se25hbWU6Ik1hcmtkb3duIixtaW1lOiJ0ZXh0L3gtbWFya2Rvd24iLG1vZGU6Im1hcmtkb3duIixleHQ6WyJtYXJrZG93biIsIm1kIiwibWtkIl19LHtuYW1lOiJtSVJDIixtaW1lOiJ0ZXh0L21pcmMiLG1vZGU6Im1pcmMifSx7bmFtZToiTWFyaWFEQiBTUUwiLG1pbWU6InRleHQveC1tYXJpYWRiIixtb2RlOiJzcWwifSx7bmFtZToiTWF0aGVtYXRpY2EiLG1pbWU6InRleHQveC1tYXRoZW1hdGljYSIsbW9kZToibWF0aGVtYXRpY2EiLGV4dDpbIm0iLCJuYiJdfSx7bmFtZToiTW9kZWxpY2EiLG1pbWU6InRleHQveC1tb2RlbGljYSIsbW9kZToibW9kZWxpY2EiLGV4dDpbIm1vIl19LHtuYW1lOiJNVU1QUyIsbWltZToidGV4dC94LW11bXBzIixtb2RlOiJtdW1wcyIsZXh0OlsibXBzIl19LHtuYW1lOiJNUyBTUUwiLG1pbWU6InRleHQveC1tc3NxbCIsbW9kZToic3FsIn0se25hbWU6Im1ib3giLG1pbWU6ImFwcGxpY2F0aW9uL21ib3giLG1vZGU6Im1ib3giLGV4dDpbIm1ib3giXX0se25hbWU6Ik15U1FMIixtaW1lOiJ0ZXh0L3gtbXlzcWwiLG1vZGU6InNxbCJ9LHtuYW1lOiJOZ2lueCIsbWltZToidGV4dC94LW5naW54LWNvbmYiLG1vZGU6Im5naW54IixmaWxlOi9uZ2lueC4qXC5jb25mJC9pfSx7bmFtZToiTlNJUyIsbWltZToidGV4dC94LW5zaXMiLG1vZGU6Im5zaXMiLGV4dDpbIm5zaCIsIm5zaSJdfSx7bmFtZToiTlRyaXBsZXMiLG1pbWVzOlsiYXBwbGljYXRpb24vbi10cmlwbGVzIiwiYXBwbGljYXRpb24vbi1xdWFkcyIsInRleHQvbi10cmlwbGVzIl0sbW9kZToibnRyaXBsZXMiLGV4dDpbIm50IiwibnEiXX0se25hbWU6Ik9iamVjdGl2ZS1DIixtaW1lOiJ0ZXh0L3gtb2JqZWN0aXZlYyIsbW9kZToiY2xpa2UiLGV4dDpbIm0iLCJtbSJdLGFsaWFzOlsib2JqZWN0aXZlLWMiLCJvYmpjIl19LHtuYW1lOiJPQ2FtbCIsbWltZToidGV4dC94LW9jYW1sIixtb2RlOiJtbGxpa2UiLGV4dDpbIm1sIiwibWxpIiwibWxsIiwibWx5Il19LHtuYW1lOiJPY3RhdmUiLG1pbWU6InRleHQveC1vY3RhdmUiLG1vZGU6Im9jdGF2ZSIsZXh0OlsibSJdfSx7bmFtZToiT3oiLG1pbWU6InRleHQveC1veiIsbW9kZToib3oiLGV4dDpbIm96Il19LHtuYW1lOiJQYXNjYWwiLG1pbWU6InRleHQveC1wYXNjYWwiLG1vZGU6InBhc2NhbCIsZXh0OlsicCIsInBhcyJdfSx7bmFtZToiUEVHLmpzIixtaW1lOiJudWxsIixtb2RlOiJwZWdqcyIsZXh0OlsianNvbmxkIl19LHtuYW1lOiJQZXJsIixtaW1lOiJ0ZXh0L3gtcGVybCIsbW9kZToicGVybCIsZXh0OlsicGwiLCJwbSJdfSx7bmFtZToiUEhQIixtaW1lczpbInRleHQveC1waHAiLCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocCIsImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW4iXSxtb2RlOiJwaHAiLGV4dDpbInBocCIsInBocDMiLCJwaHA0IiwicGhwNSIsInBocDciLCJwaHRtbCJdfSx7bmFtZToiUGlnIixtaW1lOiJ0ZXh0L3gtcGlnIixtb2RlOiJwaWciLGV4dDpbInBpZyJdfSx7bmFtZToiUGxhaW4gVGV4dCIsbWltZToidGV4dC9wbGFpbiIsbW9kZToibnVsbCIsZXh0OlsidHh0IiwidGV4dCIsImNvbmYiLCJkZWYiLCJsaXN0IiwibG9nIl19LHtuYW1lOiJQTFNRTCIsbWltZToidGV4dC94LXBsc3FsIixtb2RlOiJzcWwiLGV4dDpbInBscyJdfSx7bmFtZToiUG93ZXJTaGVsbCIsbWltZToiYXBwbGljYXRpb24veC1wb3dlcnNoZWxsIixtb2RlOiJwb3dlcnNoZWxsIixleHQ6WyJwczEiLCJwc2QxIiwicHNtMSJdfSx7bmFtZToiUHJvcGVydGllcyBmaWxlcyIsbWltZToidGV4dC94LXByb3BlcnRpZXMiLG1vZGU6InByb3BlcnRpZXMiLGV4dDpbInByb3BlcnRpZXMiLCJpbmkiLCJpbiJdLGFsaWFzOlsiaW5pIiwicHJvcGVydGllcyJdfSx7bmFtZToiUHJvdG9CdWYiLG1pbWU6InRleHQveC1wcm90b2J1ZiIsbW9kZToicHJvdG9idWYiLGV4dDpbInByb3RvIl19LHtuYW1lOiJQeXRob24iLG1pbWU6InRleHQveC1weXRob24iLG1vZGU6InB5dGhvbiIsZXh0OlsiQlVJTEQiLCJiemwiLCJweSIsInB5dyJdLGZpbGU6L14oQlVDS3xCVUlMRCkkL30se25hbWU6IlB1cHBldCIsbWltZToidGV4dC94LXB1cHBldCIsbW9kZToicHVwcGV0IixleHQ6WyJwcCJdfSx7bmFtZToiUSIsbWltZToidGV4dC94LXEiLG1vZGU6InEiLGV4dDpbInEiXX0se25hbWU6IlIiLG1pbWU6InRleHQveC1yc3JjIixtb2RlOiJyIixleHQ6WyJyIiwiUiJdLGFsaWFzOlsicnNjcmlwdCJdfSx7bmFtZToicmVTdHJ1Y3R1cmVkVGV4dCIsbWltZToidGV4dC94LXJzdCIsbW9kZToicnN0IixleHQ6WyJyc3QiXSxhbGlhczpbInJzdCJdfSx7bmFtZToiUlBNIENoYW5nZXMiLG1pbWU6InRleHQveC1ycG0tY2hhbmdlcyIsbW9kZToicnBtIn0se25hbWU6IlJQTSBTcGVjIixtaW1lOiJ0ZXh0L3gtcnBtLXNwZWMiLG1vZGU6InJwbSIsZXh0Olsic3BlYyJdfSx7bmFtZToiUnVieSIsbWltZToidGV4dC94LXJ1YnkiLG1vZGU6InJ1YnkiLGV4dDpbInJiIl0sYWxpYXM6WyJqcnVieSIsIm1hY3J1YnkiLCJyYWtlIiwicmIiLCJyYngiXX0se25hbWU6IlJ1c3QiLG1pbWU6InRleHQveC1ydXN0c3JjIixtb2RlOiJydXN0IixleHQ6WyJycyJdfSx7bmFtZToiU0FTIixtaW1lOiJ0ZXh0L3gtc2FzIixtb2RlOiJzYXMiLGV4dDpbInNhcyJdfSx7bmFtZToiU2FzcyIsbWltZToidGV4dC94LXNhc3MiLG1vZGU6InNhc3MiLGV4dDpbInNhc3MiXX0se25hbWU6IlNjYWxhIixtaW1lOiJ0ZXh0L3gtc2NhbGEiLG1vZGU6ImNsaWtlIixleHQ6WyJzY2FsYSJdfSx7bmFtZToiU2NoZW1lIixtaW1lOiJ0ZXh0L3gtc2NoZW1lIixtb2RlOiJzY2hlbWUiLGV4dDpbInNjbSIsInNzIl19LHtuYW1lOiJTQ1NTIixtaW1lOiJ0ZXh0L3gtc2NzcyIsbW9kZToiY3NzIixleHQ6WyJzY3NzIl19LHtuYW1lOiJTaGVsbCIsbWltZXM6WyJ0ZXh0L3gtc2giLCJhcHBsaWNhdGlvbi94LXNoIl0sbW9kZToic2hlbGwiLGV4dDpbInNoIiwia3NoIiwiYmFzaCJdLGFsaWFzOlsiYmFzaCIsInNoIiwienNoIl0sZmlsZTovXlBLR0JVSUxEJC99LHtuYW1lOiJTaWV2ZSIsbWltZToiYXBwbGljYXRpb24vc2lldmUiLG1vZGU6InNpZXZlIixleHQ6WyJzaXYiLCJzaWV2ZSJdfSx7bmFtZToiU2xpbSIsbWltZXM6WyJ0ZXh0L3gtc2xpbSIsImFwcGxpY2F0aW9uL3gtc2xpbSJdLG1vZGU6InNsaW0iLGV4dDpbInNsaW0iXX0se25hbWU6IlNtYWxsdGFsayIsbWltZToidGV4dC94LXN0c3JjIixtb2RlOiJzbWFsbHRhbGsiLGV4dDpbInN0Il19LHtuYW1lOiJTbWFydHkiLG1pbWU6InRleHQveC1zbWFydHkiLG1vZGU6InNtYXJ0eSIsZXh0OlsidHBsIl19LHtuYW1lOiJTb2xyIixtaW1lOiJ0ZXh0L3gtc29sciIsbW9kZToic29sciJ9LHtuYW1lOiJTTUwiLG1pbWU6InRleHQveC1zbWwiLG1vZGU6Im1sbGlrZSIsZXh0Olsic21sIiwic2lnIiwiZnVuIiwic21hY2tzcGVjIl19LHtuYW1lOiJTb3kiLG1pbWU6InRleHQveC1zb3kiLG1vZGU6InNveSIsZXh0Olsic295Il0sYWxpYXM6WyJjbG9zdXJlIHRlbXBsYXRlIl19LHtuYW1lOiJTUEFSUUwiLG1pbWU6ImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeSIsbW9kZToic3BhcnFsIixleHQ6WyJycSIsInNwYXJxbCJdLGFsaWFzOlsic3BhcnVsIl19LHtuYW1lOiJTcHJlYWRzaGVldCIsbWltZToidGV4dC94LXNwcmVhZHNoZWV0Iixtb2RlOiJzcHJlYWRzaGVldCIsYWxpYXM6WyJleGNlbCIsImZvcm11bGEiXX0se25hbWU6IlNRTCIsbWltZToidGV4dC94LXNxbCIsbW9kZToic3FsIixleHQ6WyJzcWwiXX0se25hbWU6IlNRTGl0ZSIsbWltZToidGV4dC94LXNxbGl0ZSIsbW9kZToic3FsIn0se25hbWU6IlNxdWlycmVsIixtaW1lOiJ0ZXh0L3gtc3F1aXJyZWwiLG1vZGU6ImNsaWtlIixleHQ6WyJudXQiXX0se25hbWU6IlN0eWx1cyIsbWltZToidGV4dC94LXN0eWwiLG1vZGU6InN0eWx1cyIsZXh0Olsic3R5bCJdfSx7bmFtZToiU3dpZnQiLG1pbWU6InRleHQveC1zd2lmdCIsbW9kZToic3dpZnQiLGV4dDpbInN3aWZ0Il19LHtuYW1lOiJzVGVYIixtaW1lOiJ0ZXh0L3gtc3RleCIsbW9kZToic3RleCJ9LHtuYW1lOiJMYVRlWCIsbWltZToidGV4dC94LWxhdGV4Iixtb2RlOiJzdGV4IixleHQ6WyJ0ZXh0IiwibHR4IiwidGV4Il0sYWxpYXM6WyJ0ZXgiXX0se25hbWU6IlN5c3RlbVZlcmlsb2ciLG1pbWU6InRleHQveC1zeXN0ZW12ZXJpbG9nIixtb2RlOiJ2ZXJpbG9nIixleHQ6WyJ2Iiwic3YiLCJzdmgiXX0se25hbWU6IlRjbCIsbWltZToidGV4dC94LXRjbCIsbW9kZToidGNsIixleHQ6WyJ0Y2wiXX0se25hbWU6IlRleHRpbGUiLG1pbWU6InRleHQveC10ZXh0aWxlIixtb2RlOiJ0ZXh0aWxlIixleHQ6WyJ0ZXh0aWxlIl19LHtuYW1lOiJUaWRkbHlXaWtpICIsbWltZToidGV4dC94LXRpZGRseXdpa2kiLG1vZGU6InRpZGRseXdpa2kifSx7bmFtZToiVGlraSB3aWtpIixtaW1lOiJ0ZXh0L3Rpa2kiLG1vZGU6InRpa2kifSx7bmFtZToiVE9NTCIsbWltZToidGV4dC94LXRvbWwiLG1vZGU6InRvbWwiLGV4dDpbInRvbWwiXX0se25hbWU6IlRvcm5hZG8iLG1pbWU6InRleHQveC10b3JuYWRvIixtb2RlOiJ0b3JuYWRvIn0se25hbWU6InRyb2ZmIixtaW1lOiJ0ZXh0L3Ryb2ZmIixtb2RlOiJ0cm9mZiIsZXh0OlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Il19LHtuYW1lOiJUVENOIixtaW1lOiJ0ZXh0L3gtdHRjbiIsbW9kZToidHRjbiIsZXh0OlsidHRjbiIsInR0Y24zIiwidHRjbnBwIl19LHtuYW1lOiJUVENOX0NGRyIsbWltZToidGV4dC94LXR0Y24tY2ZnIixtb2RlOiJ0dGNuLWNmZyIsZXh0OlsiY2ZnIl19LHtuYW1lOiJUdXJ0bGUiLG1pbWU6InRleHQvdHVydGxlIixtb2RlOiJ0dXJ0bGUiLGV4dDpbInR0bCJdfSx7bmFtZToiVHlwZVNjcmlwdCIsbWltZToiYXBwbGljYXRpb24vdHlwZXNjcmlwdCIsbW9kZToiamF2YXNjcmlwdCIsZXh0OlsidHMiXSxhbGlhczpbInRzIl19LHtuYW1lOiJUeXBlU2NyaXB0LUpTWCIsbWltZToidGV4dC90eXBlc2NyaXB0LWpzeCIsbW9kZToianN4IixleHQ6WyJ0c3giXSxhbGlhczpbInRzeCJdfSx7bmFtZToiVHdpZyIsbWltZToidGV4dC94LXR3aWciLG1vZGU6InR3aWcifSx7bmFtZToiV2ViIElETCIsbWltZToidGV4dC94LXdlYmlkbCIsbW9kZToid2ViaWRsIixleHQ6WyJ3ZWJpZGwiXX0se25hbWU6IlZCLk5FVCIsbWltZToidGV4dC94LXZiIixtb2RlOiJ2YiIsZXh0OlsidmIiXX0se25hbWU6IlZCU2NyaXB0IixtaW1lOiJ0ZXh0L3Zic2NyaXB0Iixtb2RlOiJ2YnNjcmlwdCIsZXh0OlsidmJzIl19LHtuYW1lOiJWZWxvY2l0eSIsbWltZToidGV4dC92ZWxvY2l0eSIsbW9kZToidmVsb2NpdHkiLGV4dDpbInZ0bCJdfSx7bmFtZToiVmVyaWxvZyIsbWltZToidGV4dC94LXZlcmlsb2ciLG1vZGU6InZlcmlsb2ciLGV4dDpbInYiXX0se25hbWU6IlZIREwiLG1pbWU6InRleHQveC12aGRsIixtb2RlOiJ2aGRsIixleHQ6WyJ2aGQiLCJ2aGRsIl19LHtuYW1lOiJWdWUuanMgQ29tcG9uZW50IixtaW1lczpbInNjcmlwdC94LXZ1ZSIsInRleHQveC12dWUiXSxtb2RlOiJ2dWUiLGV4dDpbInZ1ZSJdfSx7bmFtZToiWE1MIixtaW1lczpbImFwcGxpY2F0aW9uL3htbCIsInRleHQveG1sIl0sbW9kZToieG1sIixleHQ6WyJ4bWwiLCJ4c2wiLCJ4c2QiLCJzdmciXSxhbGlhczpbInJzcyIsIndzZGwiLCJ4c2QiXX0se25hbWU6IlhRdWVyeSIsbWltZToiYXBwbGljYXRpb24veHF1ZXJ5Iixtb2RlOiJ4cXVlcnkiLGV4dDpbInh5IiwieHF1ZXJ5Il19LHtuYW1lOiJZYWNhcyIsbWltZToidGV4dC94LXlhY2FzIixtb2RlOiJ5YWNhcyIsZXh0OlsieXMiXX0se25hbWU6IllBTUwiLG1pbWVzOlsidGV4dC94LXlhbWwiLCJ0ZXh0L3lhbWwiXSxtb2RlOiJ5YW1sIixleHQ6WyJ5YW1sIiwieW1sIl0sYWxpYXM6WyJ5bWwiXX0se25hbWU6Ilo4MCIsbWltZToidGV4dC94LXo4MCIsbW9kZToiejgwIixleHQ6WyJ6ODAiXX0se25hbWU6Im1zY2dlbiIsbWltZToidGV4dC94LW1zY2dlbiIsbW9kZToibXNjZ2VuIixleHQ6WyJtc2NnZW4iLCJtc2NpbiIsIm1zYyJdfSx7bmFtZToieHUiLG1pbWU6InRleHQveC14dSIsbW9kZToibXNjZ2VuIixleHQ6WyJ4dSJdfSx7bmFtZToibXNnZW5ueSIsbWltZToidGV4dC94LW1zZ2VubnkiLG1vZGU6Im1zY2dlbiIsZXh0OlsibXNnZW5ueSJdfV07Zm9yKHZhciB0PTA7dDxlLm1vZGVJbmZvLmxlbmd0aDt0Kyspe3ZhciBuPWUubW9kZUluZm9bdF07bi5taW1lcyYmKG4ubWltZT1uLm1pbWVzWzBdKX1lLmZpbmRNb2RlQnlNSU1FPWZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2Zvcih2YXIgbj0wO248ZS5tb2RlSW5mby5sZW5ndGg7bisrKXt2YXIgcj1lLm1vZGVJbmZvW25dO2lmKHIubWltZT09dClyZXR1cm4gcjtpZihyLm1pbWVzKWZvcih2YXIgbz0wO288ci5taW1lcy5sZW5ndGg7bysrKWlmKHIubWltZXNbb109PXQpcmV0dXJuIHJ9cmV0dXJuL1wreG1sJC8udGVzdCh0KT9lLmZpbmRNb2RlQnlNSU1FKCJhcHBsaWNhdGlvbi94bWwiKTovXCtqc29uJC8udGVzdCh0KT9lLmZpbmRNb2RlQnlNSU1FKCJhcHBsaWNhdGlvbi9qc29uIik6dm9pZCAwfSxlLmZpbmRNb2RlQnlFeHRlbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLm1vZGVJbmZvLmxlbmd0aDtuKyspe3ZhciByPWUubW9kZUluZm9bbl07aWYoci5leHQpZm9yKHZhciBvPTA7bzxyLmV4dC5sZW5ndGg7bysrKWlmKHIuZXh0W29dPT10KXJldHVybiByfX0sZS5maW5kTW9kZUJ5RmlsZU5hbWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLm1vZGVJbmZvLmxlbmd0aDtuKyspe3ZhciByPWUubW9kZUluZm9bbl07aWYoci5maWxlJiZyLmZpbGUudGVzdCh0KSlyZXR1cm4gcn12YXIgbz10Lmxhc3RJbmRleE9mKCIuIikscz1vPi0xJiZ0LnN1YnN0cmluZyhvKzEsdC5sZW5ndGgpO2lmKHMpcmV0dXJuIGUuZmluZE1vZGVCeUV4dGVuc2lvbihzKX0sZS5maW5kTW9kZUJ5TmFtZT1mdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTtmb3IodmFyIG49MDtuPGUubW9kZUluZm8ubGVuZ3RoO24rKyl7dmFyIHI9ZS5tb2RlSW5mb1tuXTtpZihyLm5hbWUudG9Mb3dlckNhc2UoKT09dClyZXR1cm4gcjtpZihyLmFsaWFzKWZvcih2YXIgbz0wO288ci5hbGlhcy5sZW5ndGg7bysrKWlmKHIuYWxpYXNbb10udG9Mb3dlckNhc2UoKT09dClyZXR1cm4gcn19fSl9LCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUveG1sL3htbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXtlKG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiKSl9KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17YXV0b1NlbGZDbG9zZXJzOnthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGNvbW1hbmQ6ITAsZW1iZWQ6ITAsZnJhbWU6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMCxtZW51aXRlbTohMH0saW1wbGljaXRseUNsb3NlZDp7ZGQ6ITAsbGk6ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHA6ITAscnA6ITAscnQ6ITAsdGJvZHk6ITAsdGQ6ITAsdGZvb3Q6ITAsdGg6ITAsdHI6ITB9LGNvbnRleHRHcmFiYmVyczp7ZGQ6e2RkOiEwLGR0OiEwfSxkdDp7ZGQ6ITAsZHQ6ITB9LGxpOntsaTohMH0sb3B0aW9uOntvcHRpb246ITAsb3B0Z3JvdXA6ITB9LG9wdGdyb3VwOntvcHRncm91cDohMH0scDp7YWRkcmVzczohMCxhcnRpY2xlOiEwLGFzaWRlOiEwLGJsb2NrcXVvdGU6ITAsZGlyOiEwLGRpdjohMCxkbDohMCxmaWVsZHNldDohMCxmb290ZXI6ITAsZm9ybTohMCxoMTohMCxoMjohMCxoMzohMCxoNDohMCxoNTohMCxoNjohMCxoZWFkZXI6ITAsaGdyb3VwOiEwLGhyOiEwLG1lbnU6ITAsbmF2OiEwLG9sOiEwLHA6ITAscHJlOiEwLHNlY3Rpb246ITAsdGFibGU6ITAsdWw6ITB9LHJwOntycDohMCxydDohMH0scnQ6e3JwOiEwLHJ0OiEwfSx0Ym9keTp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRkOnt0ZDohMCx0aDohMH0sdGZvb3Q6e3Rib2R5OiEwfSx0aDp7dGQ6ITAsdGg6ITB9LHRoZWFkOnt0Ym9keTohMCx0Zm9vdDohMH0sdHI6e3RyOiEwfX0sZG9Ob3RJbmRlbnQ6e3ByZTohMH0sYWxsb3dVbnF1b3RlZDohMCxhbGxvd01pc3Npbmc6ITAsY2FzZUZvbGQ6ITB9LG49e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMSxhbGxvd01pc3NpbmdUYWdOYW1lOiExLGNhc2VGb2xkOiExfTtlLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24ocixvKXtmdW5jdGlvbiBzKGUsdCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gdC50b2tlbml6ZT1uLG4oZSx0KX12YXIgcj1lLm5leHQoKTtpZigiPCI9PXIpcmV0dXJuIGUuZWF0KCIhIik/ZS5lYXQoIlsiKT9lLm1hdGNoKCJDREFUQVsiKT9uKGwoImF0b20iLCJdXT4iKSk6bnVsbDplLm1hdGNoKCItLSIpP24obCgiY29tbWVudCIsIi0tXHgzZSIpKTplLm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KGUuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLG4odSgxKSkpOm51bGw6ZS5lYXQoIj8iKT8oZS5lYXRXaGlsZSgvW1x3XC5fXC1dLyksdC50b2tlbml6ZT1sKCJtZXRhIiwiPz4iKSwibWV0YSIpOihTPWUuZWF0KCIvIik/ImNsb3NlVGFnIjoib3BlblRhZyIsdC50b2tlbml6ZT1pLCJ0YWcgYnJhY2tldCIpO2lmKCImIj09cil7dmFyIG87cmV0dXJuIG89ZS5lYXQoIiMiKT9lLmVhdCgieCIpP2UuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmZS5lYXQoIjsiKTplLmVhdFdoaWxlKC9bXGRdLykmJmUuZWF0KCI7Iik6ZS5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJmUuZWF0KCI7Iiksbz8iYXRvbSI6ImVycm9yIn1yZXR1cm4gZS5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1lLm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmZS5lYXQoIj4iKSlyZXR1cm4gdC50b2tlbml6ZT1zLFM9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWcgYnJhY2tldCI7aWYoIj0iPT1uKXJldHVybiBTPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXt0LnRva2VuaXplPXMsdC5zdGF0ZT1wLHQudGFnTmFtZT10LnRhZ1N0YXJ0PW51bGw7dmFyIHI9dC50b2tlbml6ZShlLHQpO3JldHVybiByP3IrIiB0YWcgZXJyb3IiOiJ0YWcgZXJyb3IifXJldHVybi9bXCdcIl0vLnRlc3Qobik/KHQudG9rZW5pemU9YShuKSx0LnN0cmluZ1N0YXJ0Q29sPWUuY29sdW1uKCksdC50b2tlbml6ZShlLHQpKTooZS5tYXRjaCgvXlteXHNcdTAwYTA9PD5cIlwnXSpbXlxzXHUwMGEwPTw+XCJcJ1wvXS8pLCJ3b3JkIil9ZnVuY3Rpb24gYShlKXt2YXIgdD1mdW5jdGlvbih0LG4pe2Zvcig7IXQuZW9sKCk7KWlmKHQubmV4dCgpPT1lKXtuLnRva2VuaXplPWk7YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiB0LmlzSW5BdHRyaWJ1dGU9ITAsdH1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2godCkpe3IudG9rZW5pemU9czticmVha31uLm5leHQoKX1yZXR1cm4gZX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtmb3IodmFyIHI7bnVsbCE9KHI9dC5uZXh0KCkpOyl7aWYoIjwiPT1yKXJldHVybiBuLnRva2VuaXplPXUoZSsxKSxuLnRva2VuaXplKHQsbik7aWYoIj4iPT1yKXtpZigxPT1lKXtuLnRva2VuaXplPXM7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9dShlLTEpLG4udG9rZW5pemUodCxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBjKGUsdCxuKXt0aGlzLnByZXY9ZS5jb250ZXh0LHRoaXMudGFnTmFtZT10LHRoaXMuaW5kZW50PWUuaW5kZW50ZWQsdGhpcy5zdGFydE9mTGluZT1uLChBLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxlLmNvbnRleHQmJmUuY29udGV4dC5ub0luZGVudCkmJih0aGlzLm5vSW5kZW50PSEwKX1mdW5jdGlvbiBkKGUpe2UuY29udGV4dCYmKGUuY29udGV4dD1lLmNvbnRleHQucHJldil9ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgbjs7KXtpZighZS5jb250ZXh0KXJldHVybjtpZihuPWUuY29udGV4dC50YWdOYW1lLCFBLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShuKXx8IUEuY29udGV4dEdyYWJiZXJzW25dLmhhc093blByb3BlcnR5KHQpKXJldHVybjtkKGUpfX1mdW5jdGlvbiBwKGUsdCxuKXtyZXR1cm4ib3BlblRhZyI9PWU/KG4udGFnU3RhcnQ9dC5jb2x1bW4oKSxmKToiY2xvc2VUYWciPT1lP206cH1mdW5jdGlvbiBmKGUsdCxuKXtyZXR1cm4id29yZCI9PWU/KG4udGFnTmFtZT10LmN1cnJlbnQoKSxSPSJ0YWciLGIpOkEuYWxsb3dNaXNzaW5nVGFnTmFtZSYmImVuZFRhZyI9PWU/KFI9InRhZyBicmFja2V0IixiKGUsdCxuKSk6KFI9ImVycm9yIixmKX1mdW5jdGlvbiBtKGUsdCxuKXtpZigid29yZCI9PWUpe3ZhciByPXQuY3VycmVudCgpO3JldHVybiBuLmNvbnRleHQmJm4uY29udGV4dC50YWdOYW1lIT1yJiZBLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkobi5jb250ZXh0LnRhZ05hbWUpJiZkKG4pLG4uY29udGV4dCYmbi5jb250ZXh0LnRhZ05hbWU9PXJ8fCExPT09QS5tYXRjaENsb3Npbmc/KFI9InRhZyIsaCk6KFI9InRhZyBlcnJvciIsZyl9cmV0dXJuIEEuYWxsb3dNaXNzaW5nVGFnTmFtZSYmImVuZFRhZyI9PWU/KFI9InRhZyBicmFja2V0IixoKGUsdCxuKSk6KFI9ImVycm9yIixnKX1mdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4iZW5kVGFnIiE9ZT8oUj0iZXJyb3IiLGgpOihkKG4pLHApfWZ1bmN0aW9uIGcoZSx0LG4pe3JldHVybiBSPSJlcnJvciIsaChlLHQsbil9ZnVuY3Rpb24gYihlLHQsbil7aWYoIndvcmQiPT1lKXJldHVybiBSPSJhdHRyaWJ1dGUiLEU7aWYoImVuZFRhZyI9PWV8fCJzZWxmY2xvc2VUYWciPT1lKXt2YXIgcj1uLnRhZ05hbWUsbz1uLnRhZ1N0YXJ0O3JldHVybiBuLnRhZ05hbWU9bi50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHxBLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyKT9fKG4scik6KF8obixyKSxuLmNvbnRleHQ9bmV3IGMobixyLG89PW4uaW5kZW50ZWQpKSxwfXJldHVybiBSPSJlcnJvciIsYn1mdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4iZXF1YWxzIj09ZT95OihBLmFsbG93TWlzc2luZ3x8KFI9ImVycm9yIiksYihlLHQsbikpfWZ1bmN0aW9uIHkoZSx0LG4pe3JldHVybiJzdHJpbmciPT1lP3Y6IndvcmQiPT1lJiZBLmFsbG93VW5xdW90ZWQ/KFI9InN0cmluZyIsYik6KFI9ImVycm9yIixiKGUsdCxuKSl9ZnVuY3Rpb24gdihlLHQsbil7cmV0dXJuInN0cmluZyI9PWU/djpiKGUsdCxuKX12YXIgVD1yLmluZGVudFVuaXQsQT17fSxDPW8uaHRtbE1vZGU/dDpuO2Zvcih2YXIgTyBpbiBDKUFbT109Q1tPXTtmb3IodmFyIE8gaW4gbylBW09dPW9bT107dmFyIFMsUjtyZXR1cm4gcy5pc0luVGV4dD0hMCx7c3RhcnRTdGF0ZTpmdW5jdGlvbihlKXt2YXIgdD17dG9rZW5pemU6cyxzdGF0ZTpwLGluZGVudGVkOmV8fDAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfTtyZXR1cm4gbnVsbCE9ZSYmKHQuYmFzZUluZGVudD1lKSx0fSx0b2tlbjpmdW5jdGlvbihlLHQpe2lmKCF0LnRhZ05hbWUmJmUuc29sKCkmJih0LmluZGVudGVkPWUuaW5kZW50YXRpb24oKSksZS5lYXRTcGFjZSgpKXJldHVybiBudWxsO1M9bnVsbDt2YXIgbj10LnRva2VuaXplKGUsdCk7cmV0dXJuKG58fFMpJiYiY29tbWVudCIhPW4mJihSPW51bGwsdC5zdGF0ZT10LnN0YXRlKFN8fG4sZSx0KSxSJiYobj0iZXJyb3IiPT1SP24rIiBlcnJvciI6UikpLG59LGluZGVudDpmdW5jdGlvbih0LG4scil7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC50YWdTdGFydD09dC5pbmRlbnRlZD90LnN0cmluZ1N0YXJ0Q29sKzE6dC5pbmRlbnRlZCtUO2lmKG8mJm8ubm9JbmRlbnQpcmV0dXJuIGUuUGFzcztpZih0LnRva2VuaXplIT1pJiZ0LnRva2VuaXplIT1zKXJldHVybiByP3IubWF0Y2goL14oXHMqKS8pWzBdLmxlbmd0aDowO2lmKHQudGFnTmFtZSlyZXR1cm4hMSE9PUEubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZz90LnRhZ1N0YXJ0K3QudGFnTmFtZS5sZW5ndGgrMjp0LnRhZ1N0YXJ0K1QqKEEubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxKTtpZihBLmFsaWduQ0RBVEEmJi88IVxbQ0RBVEFcWy8udGVzdChuKSlyZXR1cm4gMDt2YXIgYT1uJiYvXjwoXC8pPyhbXHdfOlwuLV0qKS8uZXhlYyhuKTtpZihhJiZhWzFdKWZvcig7bzspe2lmKG8udGFnTmFtZT09YVsyXSl7bz1vLnByZXY7YnJlYWt9aWYoIUEuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShvLnRhZ05hbWUpKWJyZWFrO289by5wcmV2fWVsc2UgaWYoYSlmb3IoO287KXt2YXIgbD1BLmNvbnRleHRHcmFiYmVyc1tvLnRhZ05hbWVdO2lmKCFsfHwhbC5oYXNPd25Qcm9wZXJ0eShhWzJdKSlicmVhaztvPW8ucHJldn1mb3IoO28mJm8ucHJldiYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K1Q6dC5iYXNlSW5kZW50fHwwfSxlbGVjdHJpY0lucHV0Oi88XC9bXHNcdzpdKz4kLyxibG9ja0NvbW1lbnRTdGFydDoiXHgzYyEtLSIsYmxvY2tDb21tZW50RW5kOiItLVx4M2UiLGNvbmZpZ3VyYXRpb246QS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTpBLmh0bWxNb2RlPyJodG1sIjoieG1sIixza2lwQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2Uuc3RhdGU9PXkmJihlLnN0YXRlPWIpfX19KSxlLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksZS5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxlLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fGUuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pfSl9LCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrLXJlYWN0LXJlbmRlcmVyL3NyYy9jb21tb25tYXJrLXJlYWN0LXJlbmRlcmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJue2tleTplLm5vZGVLZXksY2xhc3NOYW1lOmUuY2xhc3NOYW1lLCJkYXRhLXNvdXJjZXBvcyI6ZVsiZGF0YS1zb3VyY2Vwb3MiXX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLnRvTG93ZXJDYXNlKCksbj1UW3RdfHx0O3JldHVybiB2b2lkIDAhPT1BW25dP246ZX1mdW5jdGlvbiBzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbyhuKV09ZVtuXSx0fSx7fSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1yKGUpLG49ZS5lc2NhcGVIdG1sP3t9OntkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUubGl0ZXJhbH19LG89ZS5lc2NhcGVIdG1sP1tlLmxpdGVyYWxdOm51bGw7aWYoZS5lc2NhcGVIdG1sfHwhZS5za2lwSHRtbCl7dmFyIHM9Yih0LG4pO3JldHVybiB1KGUuaXNCbG9jaz8iZGl2Ijoic3BhbiIscyxvKX19ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnBhcmVudC5wYXJlbnQ7cmV0dXJuIHQmJiJsaXN0Ij09PXQudHlwZS50b0xvd2VyQ2FzZSgpJiZ0Lmxpc3RUaWdodH1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZTtkb3tuPW4ucGFyZW50fXdoaWxlKCFuLnJlYWN0KTtuLnJlYWN0LmNoaWxkcmVuLnB1c2godCl9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKSYmbi5yZWR1Y2UoYyxbXSksbz1bZSx0XS5jb25jYXQocnx8bik7cmV0dXJuIGcuY3JlYXRlRWxlbWVudC5hcHBseShnLG8pfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1lLmxlbmd0aC0xO3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmInN0cmluZyI9PXR5cGVvZiBlW25dP2Vbbl0rPXQ6ZS5wdXNoKHQpLGV9ZnVuY3Rpb24gZChlKXtyZXR1cm5bZVswXVswXSwiOiIsZVswXVsxXSwiLSIsZVsxXVswXSwiOiIsZVsxXVsxXV0ubWFwKFN0cmluZykuam9pbigiIil9ZnVuY3Rpb24gXyhlLHQsbixyKXt2YXIgcz17a2V5OnR9O24uc291cmNlUG9zJiZlLnNvdXJjZXBvcyYmKHNbImRhdGEtc291cmNlcG9zIl09ZChlLnNvdXJjZXBvcykpO3ZhciBpPW8oZS50eXBlKTtzd2l0Y2goaSl7Y2FzZSJodG1sX2lubGluZSI6Y2FzZSJodG1sX2Jsb2NrIjpzLmlzQmxvY2s9Imh0bWxfYmxvY2siPT09aSxzLmVzY2FwZUh0bWw9bi5lc2NhcGVIdG1sLHMuc2tpcEh0bWw9bi5za2lwSHRtbDticmVhaztjYXNlImNvZGVfYmxvY2siOnZhciBhPWUuaW5mbz9lLmluZm8uc3BsaXQoLyArLyk6W107YS5sZW5ndGg+MCYmYVswXS5sZW5ndGg+MCYmKHMubGFuZ3VhZ2U9YVswXSxzLmNvZGVpbmZvPWEpO2JyZWFrO2Nhc2UiY29kZSI6cy5jaGlsZHJlbj1lLmxpdGVyYWwscy5pbmxpbmU9ITA7YnJlYWs7Y2FzZSJoZWFkaW5nIjpzLmxldmVsPWUubGV2ZWw7YnJlYWs7Y2FzZSJzb2Z0YnJlYWsiOnMuc29mdEJyZWFrPW4uc29mdEJyZWFrO2JyZWFrO2Nhc2UibGluayI6cy5ocmVmPW4udHJhbnNmb3JtTGlua1VyaT9uLnRyYW5zZm9ybUxpbmtVcmkoZS5kZXN0aW5hdGlvbik6ZS5kZXN0aW5hdGlvbixzLnRpdGxlPWUudGl0bGV8fHZvaWQgMCxuLmxpbmtUYXJnZXQmJihzLnRhcmdldD1uLmxpbmtUYXJnZXQpO2JyZWFrO2Nhc2UiaW1hZ2UiOnMuc3JjPW4udHJhbnNmb3JtSW1hZ2VVcmk/bi50cmFuc2Zvcm1JbWFnZVVyaShlLmRlc3RpbmF0aW9uKTplLmRlc3RpbmF0aW9uLHMudGl0bGU9ZS50aXRsZXx8dm9pZCAwLHMuYWx0PWUucmVhY3QuY2hpbGRyZW4uam9pbigiIiksZS5yZWFjdC5jaGlsZHJlbj12b2lkIDA7YnJlYWs7Y2FzZSJsaXN0IjpzLnN0YXJ0PWUubGlzdFN0YXJ0LHMudHlwZT1lLmxpc3RUeXBlLHMudGlnaHQ9ZS5saXN0VGlnaHR9InN0cmluZyIhPXR5cGVvZiByJiYocy5saXRlcmFsPWUubGl0ZXJhbCk7dmFyIGw9cy5jaGlsZHJlbnx8ZS5yZWFjdCYmZS5yZWFjdC5jaGlsZHJlbjtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmKHMuY2hpbGRyZW49bC5yZWR1Y2UoYyxbXSl8fG51bGwpLHN9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZT9lLnNvdXJjZXBvcz9kKGUuc291cmNlcG9zKTpwKGUucGFyZW50KTpudWxsfWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0LG4scixzLGksdSxjLGQsZixtPWUud2Fsa2VyKCksaD17c291cmNlUG9zOnRoaXMuc291cmNlUG9zLGVzY2FwZUh0bWw6dGhpcy5lc2NhcGVIdG1sLHNraXBIdG1sOnRoaXMuc2tpcEh0bWwsdHJhbnNmb3JtTGlua1VyaTp0aGlzLnRyYW5zZm9ybUxpbmtVcmksdHJhbnNmb3JtSW1hZ2VVcmk6dGhpcy50cmFuc2Zvcm1JbWFnZVVyaSxzb2Z0QnJlYWs6dGhpcy5zb2Z0QnJlYWssbGlua1RhcmdldDp0aGlzLmxpbmtUYXJnZXR9LEU9MDt0PW0ubmV4dCgpOyl7dmFyIHk9cCh0Lm5vZGUuc291cmNlcG9zP3Qubm9kZTp0Lm5vZGUucGFyZW50KTtpZihmPT09eT8oYz15K0UsRSsrKTooYz15LEU9MCksZj15LHI9dC5lbnRlcmluZyxzPSFyLG49dC5ub2RlLGk9byhuLnR5cGUpLGQ9bnVsbCx1KXtpZihuIT09dSYmISgicGFyYWdyYXBoIj09PWkmJmEobil8fHRoaXMuc2tpcEh0bWwmJigiaHRtbF9ibG9jayI9PT1pfHwiaHRtbF9pbmxpbmUiPT09aSkpKXt2YXIgVD1uPT09dSxBPS0xPT09dGhpcy5hbGxvd2VkVHlwZXMuaW5kZXhPZihpKSxDPSExLE89bi5pc0NvbnRhaW5lciYmcyxTPXRoaXMucmVuZGVyZXJzW2ldO2lmKHRoaXMuYWxsb3dOb2RlJiYoT3x8IW4uaXNDb250YWluZXIpKXt2YXIgUj1PP24ucmVhY3QuY2hpbGRyZW46W107ZD1fKG4sYyxoLFMpLEM9IXRoaXMuYWxsb3dOb2RlKHt0eXBlOnYoaSkscmVuZGVyZXI6dGhpcy5yZW5kZXJlcnNbaV0scHJvcHM6ZCxjaGlsZHJlbjpSfSl9aWYoVHx8IUMmJiFBKXt2YXIgaj0idGV4dCI9PT1pfHwic29mdGJyZWFrIj09PWk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFMmJiFqJiYic3RyaW5nIiE9dHlwZW9mIFMpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlciBmb3IgdHlwZSBgIit2KG4udHlwZSkrImAgbm90IGRlZmluZWQgb3IgaXMgbm90IHJlbmRlcmFibGUiKTtpZihuLmlzQ29udGFpbmVyJiZyKW4ucmVhY3Q9e2NvbXBvbmVudDpTLHByb3BzOnt9LGNoaWxkcmVuOltdfTtlbHNle3ZhciB4PWR8fF8obixjLGgsUyk7aWYoUyl4PSJzdHJpbmciPT10eXBlb2YgUz94OmIoeCx7bm9kZUtleTp4LmtleX0pLGwobixnLmNyZWF0ZUVsZW1lbnQoUyx4KSk7ZWxzZSBpZigidGV4dCI9PT1pKWwobixuLmxpdGVyYWwpO2Vsc2UgaWYoInNvZnRicmVhayI9PT1pKXt2YXIgTD0iYnIiPT09dGhpcy5zb2Z0QnJlYWs/Zy5jcmVhdGVFbGVtZW50KCJiciIse2tleTpjfSk6dGhpcy5zb2Z0QnJlYWs7bChuLEwpfX19ZWxzZSF0aGlzLnVud3JhcERpc2FsbG93ZWQmJnImJm4uaXNDb250YWluZXImJm0ucmVzdW1lQXQobiwhMSl9fWVsc2UgdT1uLG4ucmVhY3Q9e2NoaWxkcmVuOltdfX1yZXR1cm4gdS5yZWFjdC5jaGlsZHJlbn1mdW5jdGlvbiBtKGUpe3ZhciB0PWUucmVwbGFjZSgvZmlsZTpcL1wvL2csIngtZmlsZTovLyIpO3JldHVybiBkZWNvZGVVUkkoeS51cmlJbkRvdWJsZVF1b3RlZEF0dHIodCkpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZXx8e307aWYodC5hbGxvd2VkVHlwZXMmJnQuZGlzYWxsb3dlZFR5cGVzKXRocm93IG5ldyBFcnJvcigiT25seSBvbmUgb2YgYGFsbG93ZWRUeXBlc2AgYW5kIGBkaXNhbGxvd2VkVHlwZXNgIHNob3VsZCBiZSBkZWZpbmVkIik7aWYodC5hbGxvd2VkVHlwZXMmJiFBcnJheS5pc0FycmF5KHQuYWxsb3dlZFR5cGVzKSl0aHJvdyBuZXcgRXJyb3IoImBhbGxvd2VkVHlwZXNgIG11c3QgYmUgYW4gYXJyYXkiKTtpZih0LmRpc2FsbG93ZWRUeXBlcyYmIUFycmF5LmlzQXJyYXkodC5kaXNhbGxvd2VkVHlwZXMpKXRocm93IG5ldyBFcnJvcigiYGRpc2FsbG93ZWRUeXBlc2AgbXVzdCBiZSBhbiBhcnJheSIpO2lmKHQuYWxsb3dOb2RlJiYiZnVuY3Rpb24iIT10eXBlb2YgdC5hbGxvd05vZGUpdGhyb3cgbmV3IEVycm9yKCJgYWxsb3dOb2RlYCBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj10LnRyYW5zZm9ybUxpbmtVcmk7aWYodm9pZCAwPT09biluPW07ZWxzZSBpZihuJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImB0cmFuc2Zvcm1MaW5rVXJpYCBtdXN0IGVpdGhlciBiZSBhIGZ1bmN0aW9uLCBvciBgbnVsbGAgdG8gZGlzYWJsZSIpO3ZhciByPXQudHJhbnNmb3JtSW1hZ2VVcmk7aWYodm9pZCAwIT09ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJgdHJhbnNmb3JtSW1hZ2VVcmlgIG11c3QgYmUgYSBmdW5jdGlvbiIpO2lmKHQucmVuZGVyZXJzJiYhRSh0LnJlbmRlcmVycykpdGhyb3cgbmV3IEVycm9yKCJgcmVuZGVyZXJzYCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IG9mIGBUeXBlYDogYFJlbmRlcmVyYCBwYWlycyIpO3ZhciBpPXQuYWxsb3dlZFR5cGVzJiZ0LmFsbG93ZWRUeXBlcy5tYXAobyl8fEM7aWYodC5kaXNhbGxvd2VkVHlwZXMpe3ZhciBhPXQuZGlzYWxsb3dlZFR5cGVzLm1hcChvKTtpPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09YS5pbmRleE9mKGUpfSl9cmV0dXJue3NvdXJjZVBvczpCb29sZWFuKHQuc291cmNlUG9zKSxzb2Z0QnJlYWs6dC5zb2Z0QnJlYWt8fCJcbiIscmVuZGVyZXJzOmIoe30sQSxzKHQucmVuZGVyZXJzKSksZXNjYXBlSHRtbDpCb29sZWFuKHQuZXNjYXBlSHRtbCksc2tpcEh0bWw6Qm9vbGVhbih0LnNraXBIdG1sKSx0cmFuc2Zvcm1MaW5rVXJpOm4sdHJhbnNmb3JtSW1hZ2VVcmk6cixhbGxvd05vZGU6dC5hbGxvd05vZGUsYWxsb3dlZFR5cGVzOmksdW53cmFwRGlzYWxsb3dlZDpCb29sZWFuKHQudW53cmFwRGlzYWxsb3dlZCkscmVuZGVyOmYsbGlua1RhcmdldDp0LmxpbmtUYXJnZXR8fCExfX12YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmFzc2lnbi9pbmRleC5qcyIpLEU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmlzcGxhaW5vYmplY3QvaW5kZXguanMiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3hzcy1maWx0ZXJzL3NyYy94c3MtZmlsdGVycy5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvcGFzY2FsY2FzZS9pbmRleC5qcyIpLFQ9e2Jsb2NrcXVvdGU6ImJsb2NrX3F1b3RlIix0aGVtYXRpY2JyZWFrOiJ0aGVtYXRpY19icmVhayIsaHRtbGJsb2NrOiJodG1sX2Jsb2NrIixodG1saW5saW5lOiJodG1sX2lubGluZSIsY29kZWJsb2NrOiJjb2RlX2Jsb2NrIixoYXJkYnJlYWs6ImxpbmVicmVhayJ9LEE9e2Jsb2NrX3F1b3RlOiJibG9ja3F1b3RlIixlbXBoOiJlbSIsbGluZWJyZWFrOiJiciIsaW1hZ2U6ImltZyIsaXRlbToibGkiLGxpbms6ImEiLHBhcmFncmFwaDoicCIsc3Ryb25nOiJzdHJvbmciLHRoZW1hdGljX2JyZWFrOiJociIsaHRtbF9ibG9jazppLGh0bWxfaW5saW5lOmksbGlzdDpmdW5jdGlvbihlKXt2YXIgdD0iYnVsbGV0Ij09PWUudHlwZS50b0xvd2VyQ2FzZSgpPyJ1bCI6Im9sIixuPXIoZSk7cmV0dXJuIG51bGwhPT1lLnN0YXJ0JiYxIT09ZS5zdGFydCYmKG4uc3RhcnQ9ZS5zdGFydC50b1N0cmluZygpKSx1KHQsbixlLmNoaWxkcmVuKX0sY29kZV9ibG9jazpmdW5jdGlvbihlKXt2YXIgdD1lLmxhbmd1YWdlJiYibGFuZ3VhZ2UtIitlLmxhbmd1YWdlLG49dSgiY29kZSIse2NsYXNzTmFtZTp0fSxlLmxpdGVyYWwpO3JldHVybiB1KCJwcmUiLHIoZSksbil9LGNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUoImNvZGUiLHIoZSksZS5jaGlsZHJlbil9LGhlYWRpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHUoImgiK2UubGV2ZWwscihlKSxlLmNoaWxkcmVuKX0sdGV4dDpudWxsLHNvZnRicmVhazpudWxsfSxDPU9iamVjdC5rZXlzKEEpO2gudXJpVHJhbnNmb3JtZXI9bSxoLnR5cGVzPUMubWFwKHYpLGgucmVuZGVyZXJzPUMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdih0KV09QVt0XSxlfSx7fSksZS5leHBvcnRzPWh9LCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ibG9ja3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57ZG9jOm5ldyBILGJsb2NrczpMLGJsb2NrU3RhcnRzOkQsdGlwOnRoaXMuZG9jLG9sZHRpcDp0aGlzLmRvYyxjdXJyZW50TGluZToiIixsaW5lTnVtYmVyOjAsb2Zmc2V0OjAsY29sdW1uOjAsbmV4dE5vbnNwYWNlOjAsbmV4dE5vbnNwYWNlQ29sdW1uOjAsaW5kZW50OjAsaW5kZW50ZWQ6ITEsYmxhbms6ITEscGFydGlhbGx5Q29uc3VtZWRUYWI6ITEsYWxsQ2xvc2VkOiEwLGxhc3RNYXRjaGVkQ29udGFpbmVyOnRoaXMuZG9jLHJlZm1hcDp7fSxsYXN0TGluZUxlbmd0aDowLGlubGluZVBhcnNlcjpuZXcgbChlKSxmaW5kTmV4dE5vbnNwYWNlOmssYWR2YW5jZU9mZnNldDp3LGFkdmFuY2VOZXh0Tm9uc3BhY2U6TSxhZGRMaW5lOk8sYWRkQ2hpbGQ6UyxpbmNvcnBvcmF0ZUxpbmU6SSxmaW5hbGl6ZTpQLHByb2Nlc3NJbmxpbmVzOk4sY2xvc2VVbm1hdGNoZWRCbG9ja3M6eCxwYXJzZTpGLG9wdGlvbnM6ZXx8e319fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL25vZGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLnVuZXNjYXBlU3RyaW5nLGk9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvY29tbW9uLmpzIikuT1BFTlRBRyxhPW4oIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLkNMT1NFVEFHLGw9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaW5saW5lcy5qcyIpLHU9Wy8uLywvXjwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/OlxzfD58JCkvaSwvXjwhLS0vLC9ePFs/XS8sL148IVtBLVpdLywvXjwhXFtDREFUQVxbLywvXjxbXC9dPyg/OmFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEyMzQ1Nl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHRpdGxlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwpKD86XHN8W1wvXT9bPl18JCkvaSxuZXcgUmVnRXhwKCJeKD86IitpKyJ8IithKyIpXFxzKiQiLCJpIildLGM9Wy8uLywvPFwvKD86c2NyaXB0fHByZXxzdHlsZSk+L2ksLy0tPi8sL1w/Pi8sLz4vLC9cXVxdPi9dLGQ9L14oPzooPzpcKlsgXHRdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzotWyBcdF0qKXszLH0pWyBcdF0qJC8sXz0vXlsjYH4qK189PD4wLTktXS8scD0vW14gXHRcZlx2XHJcbl0vLGY9L15bKistXS8sbT0vXihcZHsxLDl9KShbLildKS8saD0vXiN7MSw2fSg/OlsgXHRdK3wkKS8sZz0vXmB7Myx9KD8hLipgKXxefnszLH0oPyEuKn4pLyxiPS9eKD86YHszLH18fnszLH0pKD89ICokKS8sRT0vXig/Oj0rfC0rKVsgXHRdKiQvLHk9L1xyXG58XG58XHIvLHY9ZnVuY3Rpb24oZSl7cmV0dXJuIXAudGVzdChlKX0sVD1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZX0sQT1mdW5jdGlvbihlLHQpe3JldHVybiB0PGUubGVuZ3RoP2UuY2hhckNvZGVBdCh0KTotMX0sQz1mdW5jdGlvbihlKXtmb3IoO2U7KXtpZihlLl9sYXN0TGluZUJsYW5rKXJldHVybiEwO3ZhciB0PWUudHlwZTtpZigibGlzdCIhPT10JiYiaXRlbSIhPT10KWJyZWFrO2U9ZS5fbGFzdENoaWxkfXJldHVybiExfSxPPWZ1bmN0aW9uKCl7aWYodGhpcy5wYXJ0aWFsbHlDb25zdW1lZFRhYil7dGhpcy5vZmZzZXQrPTE7dmFyIGU9NC10aGlzLmNvbHVtbiU0O3RoaXMudGlwLl9zdHJpbmdfY29udGVudCs9IiAiLnJlcGVhdChlKX10aGlzLnRpcC5fc3RyaW5nX2NvbnRlbnQrPXRoaXMuY3VycmVudExpbmUuc2xpY2UodGhpcy5vZmZzZXQpKyJcbiJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IoOyF0aGlzLmJsb2Nrc1t0aGlzLnRpcC50eXBlXS5jYW5Db250YWluKGUpOyl0aGlzLmZpbmFsaXplKHRoaXMudGlwLHRoaXMubGluZU51bWJlci0xKTt2YXIgbj10KzEscj1uZXcgbyhlLFtbdGhpcy5saW5lTnVtYmVyLG5dLFswLDBdXSk7cmV0dXJuIHIuX3N0cmluZ19jb250ZW50PSIiLHRoaXMudGlwLmFwcGVuZENoaWxkKHIpLHRoaXMudGlwPXIscn0sUj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzLGk9ZS5jdXJyZW50TGluZS5zbGljZShlLm5leHROb25zcGFjZSksYT17dHlwZTpudWxsLHRpZ2h0OiEwLGJ1bGxldENoYXI6bnVsbCxzdGFydDpudWxsLGRlbGltaXRlcjpudWxsLHBhZGRpbmc6bnVsbCxtYXJrZXJPZmZzZXQ6ZS5pbmRlbnR9O2lmKG49aS5tYXRjaChmKSlhLnR5cGU9ImJ1bGxldCIsYS5idWxsZXRDaGFyPW5bMF1bMF07ZWxzZXtpZighKG49aS5tYXRjaChtKSl8fCJwYXJhZ3JhcGgiPT09dC50eXBlJiYiMSIhPT1uWzFdKXJldHVybiBudWxsO2EudHlwZT0ib3JkZXJlZCIsYS5zdGFydD1wYXJzZUludChuWzFdKSxhLmRlbGltaXRlcj1uWzJdfWlmKC0xIT09KHI9QShlLmN1cnJlbnRMaW5lLGUubmV4dE5vbnNwYWNlK25bMF0ubGVuZ3RoKSkmJjkhPT1yJiYzMiE9PXIpcmV0dXJuIG51bGw7aWYoInBhcmFncmFwaCI9PT10LnR5cGUmJiFlLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlK25bMF0ubGVuZ3RoKS5tYXRjaChwKSlyZXR1cm4gbnVsbDtlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQoblswXS5sZW5ndGgsITApLG89ZS5jb2x1bW4scz1lLm9mZnNldDtkb3tlLmFkdmFuY2VPZmZzZXQoMSwhMCkscj1BKGUuY3VycmVudExpbmUsZS5vZmZzZXQpfXdoaWxlKGUuY29sdW1uLW88NSYmVChyKSk7dmFyIGw9LTE9PT1BKGUuY3VycmVudExpbmUsZS5vZmZzZXQpLHU9ZS5jb2x1bW4tbztyZXR1cm4gdT49NXx8dTwxfHxsPyhhLnBhZGRpbmc9blswXS5sZW5ndGgrMSxlLmNvbHVtbj1vLGUub2Zmc2V0PXMsVChBKGUuY3VycmVudExpbmUsZS5vZmZzZXQpKSYmZS5hZHZhbmNlT2Zmc2V0KDEsITApKTphLnBhZGRpbmc9blswXS5sZW5ndGgrdSxhfSxqPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudHlwZT09PXQudHlwZSYmZS5kZWxpbWl0ZXI9PT10LmRlbGltaXRlciYmZS5idWxsZXRDaGFyPT09dC5idWxsZXRDaGFyfSx4PWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWxsQ2xvc2VkKXtmb3IoO3RoaXMub2xkdGlwIT09dGhpcy5sYXN0TWF0Y2hlZENvbnRhaW5lcjspe3ZhciBlPXRoaXMub2xkdGlwLl9wYXJlbnQ7dGhpcy5maW5hbGl6ZSh0aGlzLm9sZHRpcCx0aGlzLmxpbmVOdW1iZXItMSksdGhpcy5vbGR0aXA9ZX10aGlzLmFsbENsb3NlZD0hMH19LEw9e2RvY3VtZW50Ontjb250aW51ZTpmdW5jdGlvbigpe3JldHVybiAwfSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2FuQ29udGFpbjpmdW5jdGlvbihlKXtyZXR1cm4iaXRlbSIhPT1lfSxhY2NlcHRzTGluZXM6ITF9LGxpc3Q6e2NvbnRpbnVlOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZpbmFsaXplOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuX2ZpcnN0Q2hpbGQ7bjspe2lmKEMobikmJm4uX25leHQpe3QuX2xpc3REYXRhLnRpZ2h0PSExO2JyZWFrfWZvcih2YXIgcj1uLl9maXJzdENoaWxkO3I7KXtpZihDKHIpJiYobi5fbmV4dHx8ci5fbmV4dCkpe3QuX2xpc3REYXRhLnRpZ2h0PSExO2JyZWFrfXI9ci5fbmV4dH1uPW4uX25leHR9fSxjYW5Db250YWluOmZ1bmN0aW9uKGUpe3JldHVybiJpdGVtIj09PWV9LGFjY2VwdHNMaW5lczohMX0sYmxvY2tfcXVvdGU6e2NvbnRpbnVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VycmVudExpbmU7cmV0dXJuIGUuaW5kZW50ZWR8fDYyIT09QSh0LGUubmV4dE5vbnNwYWNlKT8xOihlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQoMSwhMSksVChBKHQsZS5vZmZzZXQpKSYmZS5hZHZhbmNlT2Zmc2V0KDEsITApLDApfSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2FuQ29udGFpbjpmdW5jdGlvbihlKXtyZXR1cm4iaXRlbSIhPT1lfSxhY2NlcHRzTGluZXM6ITF9LGl0ZW06e2NvbnRpbnVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5ibGFuayl7aWYobnVsbD09dC5fZmlyc3RDaGlsZClyZXR1cm4gMTtlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKX1lbHNle2lmKCEoZS5pbmRlbnQ+PXQuX2xpc3REYXRhLm1hcmtlck9mZnNldCt0Ll9saXN0RGF0YS5wYWRkaW5nKSlyZXR1cm4gMTtlLmFkdmFuY2VPZmZzZXQodC5fbGlzdERhdGEubWFya2VyT2Zmc2V0K3QuX2xpc3REYXRhLnBhZGRpbmcsITApfXJldHVybiAwfSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2FuQ29udGFpbjpmdW5jdGlvbihlKXtyZXR1cm4iaXRlbSIhPT1lfSxhY2NlcHRzTGluZXM6ITF9LGhlYWRpbmc6e2NvbnRpbnVlOmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGZpbmFsaXplOmZ1bmN0aW9uKCl7fSxjYW5Db250YWluOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGFjY2VwdHNMaW5lczohMX0sdGhlbWF0aWNfYnJlYWs6e2NvbnRpbnVlOmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGZpbmFsaXplOmZ1bmN0aW9uKCl7fSxjYW5Db250YWluOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGFjY2VwdHNMaW5lczohMX0sY29kZV9ibG9jazp7Y29udGludWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmN1cnJlbnRMaW5lLHI9ZS5pbmRlbnQ7aWYodC5faXNGZW5jZWQpe3ZhciBvPXI8PTMmJm4uY2hhckF0KGUubmV4dE5vbnNwYWNlKT09PXQuX2ZlbmNlQ2hhciYmbi5zbGljZShlLm5leHROb25zcGFjZSkubWF0Y2goYik7aWYobyYmb1swXS5sZW5ndGg+PXQuX2ZlbmNlTGVuZ3RoKXJldHVybiBlLmZpbmFsaXplKHQsZS5saW5lTnVtYmVyKSwyO2Zvcih2YXIgcz10Ll9mZW5jZU9mZnNldDtzPjAmJlQoQShuLGUub2Zmc2V0KSk7KWUuYWR2YW5jZU9mZnNldCgxLCEwKSxzLS19ZWxzZSBpZihyPj00KWUuYWR2YW5jZU9mZnNldCg0LCEwKTtlbHNle2lmKCFlLmJsYW5rKXJldHVybiAxO2UuYWR2YW5jZU5leHROb25zcGFjZSgpfXJldHVybiAwfSxmaW5hbGl6ZTpmdW5jdGlvbihlLHQpe2lmKHQuX2lzRmVuY2VkKXt2YXIgbj10Ll9zdHJpbmdfY29udGVudCxyPW4uaW5kZXhPZigiXG4iKSxvPW4uc2xpY2UoMCxyKSxpPW4uc2xpY2UocisxKTt0LmluZm89cyhvLnRyaW0oKSksdC5fbGl0ZXJhbD1pfWVsc2UgdC5fbGl0ZXJhbD10Ll9zdHJpbmdfY29udGVudC5yZXBsYWNlKC8oXG4gKikrJC8sIlxuIik7dC5fc3RyaW5nX2NvbnRlbnQ9bnVsbH0sY2FuQ29udGFpbjpmdW5jdGlvbigpe3JldHVybiExfSxhY2NlcHRzTGluZXM6ITB9LGh0bWxfYmxvY2s6e2NvbnRpbnVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuYmxhbmt8fDYhPT10Ll9odG1sQmxvY2tUeXBlJiY3IT09dC5faHRtbEJsb2NrVHlwZT8wOjF9LGZpbmFsaXplOmZ1bmN0aW9uKGUsdCl7dC5fbGl0ZXJhbD10Ll9zdHJpbmdfY29udGVudC5yZXBsYWNlKC8oXG4gKikrJC8sIiIpLHQuX3N0cmluZ19jb250ZW50PW51bGx9LGNhbkNvbnRhaW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYWNjZXB0c0xpbmVzOiEwfSxwYXJhZ3JhcGg6e2NvbnRpbnVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJsYW5rPzE6MH0sZmluYWxpemU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj0hMTs5MT09PUEodC5fc3RyaW5nX2NvbnRlbnQsMCkmJihuPWUuaW5saW5lUGFyc2VyLnBhcnNlUmVmZXJlbmNlKHQuX3N0cmluZ19jb250ZW50LGUucmVmbWFwKSk7KXQuX3N0cmluZ19jb250ZW50PXQuX3N0cmluZ19jb250ZW50LnNsaWNlKG4pLHI9ITA7ciYmdih0Ll9zdHJpbmdfY29udGVudCkmJnQudW5saW5rKCl9LGNhbkNvbnRhaW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYWNjZXB0c0xpbmVzOiEwfX0sRD1bZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZW50ZWR8fDYyIT09QShlLmN1cnJlbnRMaW5lLGUubmV4dE5vbnNwYWNlKT8wOihlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQoMSwhMSksVChBKGUuY3VycmVudExpbmUsZS5vZmZzZXQpKSYmZS5hZHZhbmNlT2Zmc2V0KDEsITApLGUuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKSxlLmFkZENoaWxkKCJibG9ja19xdW90ZSIsZS5uZXh0Tm9uc3BhY2UpLDEpfSxmdW5jdGlvbihlKXt2YXIgdDtpZighZS5pbmRlbnRlZCYmKHQ9ZS5jdXJyZW50TGluZS5zbGljZShlLm5leHROb25zcGFjZSkubWF0Y2goaCkpKXtlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQodFswXS5sZW5ndGgsITEpLGUuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKTt2YXIgbj1lLmFkZENoaWxkKCJoZWFkaW5nIixlLm5leHROb25zcGFjZSk7cmV0dXJuIG4ubGV2ZWw9dFswXS50cmltKCkubGVuZ3RoLG4uX3N0cmluZ19jb250ZW50PWUuY3VycmVudExpbmUuc2xpY2UoZS5vZmZzZXQpLnJlcGxhY2UoL15bIFx0XSojK1sgXHRdKiQvLCIiKS5yZXBsYWNlKC9bIFx0XSsjK1sgXHRdKiQvLCIiKSxlLmFkdmFuY2VPZmZzZXQoZS5jdXJyZW50TGluZS5sZW5ndGgtZS5vZmZzZXQpLDJ9cmV0dXJuIDB9LGZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlLmluZGVudGVkJiYodD1lLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlKS5tYXRjaChnKSkpe3ZhciBuPXRbMF0ubGVuZ3RoO2UuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKTt2YXIgcj1lLmFkZENoaWxkKCJjb2RlX2Jsb2NrIixlLm5leHROb25zcGFjZSk7cmV0dXJuIHIuX2lzRmVuY2VkPSEwLHIuX2ZlbmNlTGVuZ3RoPW4sci5fZmVuY2VDaGFyPXRbMF1bMF0sci5fZmVuY2VPZmZzZXQ9ZS5pbmRlbnQsZS5hZHZhbmNlTmV4dE5vbnNwYWNlKCksZS5hZHZhbmNlT2Zmc2V0KG4sITEpLDJ9cmV0dXJuIDB9LGZ1bmN0aW9uKGUsdCl7aWYoIWUuaW5kZW50ZWQmJjYwPT09QShlLmN1cnJlbnRMaW5lLGUubmV4dE5vbnNwYWNlKSl7dmFyIG4scj1lLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlKTtmb3Iobj0xO248PTc7bisrKWlmKHVbbl0udGVzdChyKSYmKG48N3x8InBhcmFncmFwaCIhPT10LnR5cGUpKXtlLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCk7dmFyIG89ZS5hZGRDaGlsZCgiaHRtbF9ibG9jayIsZS5vZmZzZXQpO3JldHVybiBvLl9odG1sQmxvY2tUeXBlPW4sMn19cmV0dXJuIDB9LGZ1bmN0aW9uKGUsdCl7dmFyIG47aWYoIWUuaW5kZW50ZWQmJiJwYXJhZ3JhcGgiPT09dC50eXBlJiYobj1lLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlKS5tYXRjaChFKSkpe2UuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKTt2YXIgcj1uZXcgbygiaGVhZGluZyIsdC5zb3VyY2Vwb3MpO3JldHVybiByLmxldmVsPSI9Ij09PW5bMF1bMF0/MToyLHIuX3N0cmluZ19jb250ZW50PXQuX3N0cmluZ19jb250ZW50LHQuaW5zZXJ0QWZ0ZXIociksdC51bmxpbmsoKSxlLnRpcD1yLGUuYWR2YW5jZU9mZnNldChlLmN1cnJlbnRMaW5lLmxlbmd0aC1lLm9mZnNldCwhMSksMn1yZXR1cm4gMH0sZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW5kZW50ZWQmJmQudGVzdChlLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlKSk/KGUuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKSxlLmFkZENoaWxkKCJ0aGVtYXRpY19icmVhayIsZS5uZXh0Tm9uc3BhY2UpLGUuYWR2YW5jZU9mZnNldChlLmN1cnJlbnRMaW5lLmxlbmd0aC1lLm9mZnNldCwhMSksMik6MH0sZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gZS5pbmRlbnRlZCYmImxpc3QiIT09dC50eXBlfHwhKG49UihlLHQpKT8wOihlLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCksImxpc3QiPT09ZS50aXAudHlwZSYmaih0Ll9saXN0RGF0YSxuKXx8KHQ9ZS5hZGRDaGlsZCgibGlzdCIsZS5uZXh0Tm9uc3BhY2UpLHQuX2xpc3REYXRhPW4pLHQ9ZS5hZGRDaGlsZCgiaXRlbSIsZS5uZXh0Tm9uc3BhY2UpLHQuX2xpc3REYXRhPW4sMSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGVudGVkJiYicGFyYWdyYXBoIiE9PWUudGlwLnR5cGUmJiFlLmJsYW5rPyhlLmFkdmFuY2VPZmZzZXQoNCwhMCksZS5jbG9zZVVubWF0Y2hlZEJsb2NrcygpLGUuYWRkQ2hpbGQoImNvZGVfYmxvY2siLGUub2Zmc2V0KSwyKTowfV0sdz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG8scz10aGlzLmN1cnJlbnRMaW5lO2U+MCYmKG89c1t0aGlzLm9mZnNldF0pOykiXHQiPT09bz8obj00LXRoaXMuY29sdW1uJTQsdD8odGhpcy5wYXJ0aWFsbHlDb25zdW1lZFRhYj1uPmUscj1uPmU/ZTpuLHRoaXMuY29sdW1uKz1yLHRoaXMub2Zmc2V0Kz10aGlzLnBhcnRpYWxseUNvbnN1bWVkVGFiPzA6MSxlLT1yKToodGhpcy5wYXJ0aWFsbHlDb25zdW1lZFRhYj0hMSx0aGlzLmNvbHVtbis9bix0aGlzLm9mZnNldCs9MSxlLT0xKSk6KHRoaXMucGFydGlhbGx5Q29uc3VtZWRUYWI9ITEsdGhpcy5vZmZzZXQrPTEsdGhpcy5jb2x1bW4rPTEsZS09MSl9LE09ZnVuY3Rpb24oKXt0aGlzLm9mZnNldD10aGlzLm5leHROb25zcGFjZSx0aGlzLmNvbHVtbj10aGlzLm5leHROb25zcGFjZUNvbHVtbix0aGlzLnBhcnRpYWxseUNvbnN1bWVkVGFiPSExfSxrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5jdXJyZW50TGluZSxuPXRoaXMub2Zmc2V0LHI9dGhpcy5jb2x1bW47IiIhPT0oZT10LmNoYXJBdChuKSk7KWlmKCIgIj09PWUpbisrLHIrKztlbHNle2lmKCJcdCIhPT1lKWJyZWFrO24rKyxyKz00LXIlNH10aGlzLmJsYW5rPSJcbiI9PT1lfHwiXHIiPT09ZXx8IiI9PT1lLHRoaXMubmV4dE5vbnNwYWNlPW4sdGhpcy5uZXh0Tm9uc3BhY2VDb2x1bW49cix0aGlzLmluZGVudD10aGlzLm5leHROb25zcGFjZUNvbHVtbi10aGlzLmNvbHVtbix0aGlzLmluZGVudGVkPXRoaXMuaW5kZW50Pj00fSxJPWZ1bmN0aW9uKGUpe3ZhciB0LG49ITAscj10aGlzLmRvYzt0aGlzLm9sZHRpcD10aGlzLnRpcCx0aGlzLm9mZnNldD0wLHRoaXMuY29sdW1uPTAsdGhpcy5ibGFuaz0hMSx0aGlzLnBhcnRpYWxseUNvbnN1bWVkVGFiPSExLHRoaXMubGluZU51bWJlcis9MSwtMSE9PWUuaW5kZXhPZigiXDAiKSYmKGU9ZS5yZXBsYWNlKC9cMC9nLCLvv70iKSksdGhpcy5jdXJyZW50TGluZT1lO2Zvcih2YXIgbzsobz1yLl9sYXN0Q2hpbGQpJiZvLl9vcGVuOyl7c3dpdGNoKHI9byx0aGlzLmZpbmROZXh0Tm9uc3BhY2UoKSx0aGlzLmJsb2Nrc1tyLnR5cGVdLmNvbnRpbnVlKHRoaXMscikpe2Nhc2UgMDpicmVhaztjYXNlIDE6bj0hMTticmVhaztjYXNlIDI6cmV0dXJuIHZvaWQodGhpcy5sYXN0TGluZUxlbmd0aD1lLmxlbmd0aCk7ZGVmYXVsdDp0aHJvdyJjb250aW51ZSByZXR1cm5lZCBpbGxlZ2FsIHZhbHVlLCBtdXN0IGJlIDAsIDEsIG9yIDIifWlmKCFuKXtyPXIuX3BhcmVudDticmVha319dGhpcy5hbGxDbG9zZWQ9cj09PXRoaXMub2xkdGlwLHRoaXMubGFzdE1hdGNoZWRDb250YWluZXI9cjtmb3IodmFyIHM9InBhcmFncmFwaCIhPT1yLnR5cGUmJkxbci50eXBlXS5hY2NlcHRzTGluZXMsaT10aGlzLmJsb2NrU3RhcnRzLGE9aS5sZW5ndGg7IXM7KXtpZih0aGlzLmZpbmROZXh0Tm9uc3BhY2UoKSwhdGhpcy5pbmRlbnRlZCYmIV8udGVzdChlLnNsaWNlKHRoaXMubmV4dE5vbnNwYWNlKSkpe3RoaXMuYWR2YW5jZU5leHROb25zcGFjZSgpO2JyZWFrfWZvcih2YXIgbD0wO2w8YTspe3ZhciB1PWlbbF0odGhpcyxyKTtpZigxPT09dSl7cj10aGlzLnRpcDticmVha31pZigyPT09dSl7cj10aGlzLnRpcCxzPSEwO2JyZWFrfWwrK31pZihsPT09YSl7dGhpcy5hZHZhbmNlTmV4dE5vbnNwYWNlKCk7YnJlYWt9fWlmKHRoaXMuYWxsQ2xvc2VkfHx0aGlzLmJsYW5rfHwicGFyYWdyYXBoIiE9PXRoaXMudGlwLnR5cGUpe3RoaXMuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKSx0aGlzLmJsYW5rJiZyLmxhc3RDaGlsZCYmKHIubGFzdENoaWxkLl9sYXN0TGluZUJsYW5rPSEwKSx0PXIudHlwZTtmb3IodmFyIGQ9dGhpcy5ibGFuayYmISgiYmxvY2tfcXVvdGUiPT09dHx8ImNvZGVfYmxvY2siPT09dCYmci5faXNGZW5jZWR8fCJpdGVtIj09PXQmJiFyLl9maXJzdENoaWxkJiZyLnNvdXJjZXBvc1swXVswXT09PXRoaXMubGluZU51bWJlcikscD1yO3A7KXAuX2xhc3RMaW5lQmxhbms9ZCxwPXAuX3BhcmVudDt0aGlzLmJsb2Nrc1t0XS5hY2NlcHRzTGluZXM/KHRoaXMuYWRkTGluZSgpLCJodG1sX2Jsb2NrIj09PXQmJnIuX2h0bWxCbG9ja1R5cGU+PTEmJnIuX2h0bWxCbG9ja1R5cGU8PTUmJmNbci5faHRtbEJsb2NrVHlwZV0udGVzdCh0aGlzLmN1cnJlbnRMaW5lLnNsaWNlKHRoaXMub2Zmc2V0KSkmJnRoaXMuZmluYWxpemUocix0aGlzLmxpbmVOdW1iZXIpKTp0aGlzLm9mZnNldDxlLmxlbmd0aCYmIXRoaXMuYmxhbmsmJihyPXRoaXMuYWRkQ2hpbGQoInBhcmFncmFwaCIsdGhpcy5vZmZzZXQpLHRoaXMuYWR2YW5jZU5leHROb25zcGFjZSgpLHRoaXMuYWRkTGluZSgpKX1lbHNlIHRoaXMuYWRkTGluZSgpO3RoaXMubGFzdExpbmVMZW5ndGg9ZS5sZW5ndGh9LFA9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9wYXJlbnQ7ZS5fb3Blbj0hMSxlLnNvdXJjZXBvc1sxXT1bdCx0aGlzLmxhc3RMaW5lTGVuZ3RoXSx0aGlzLmJsb2Nrc1tlLnR5cGVdLmZpbmFsaXplKHRoaXMsZSksdGhpcy50aXA9bn0sTj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz1lLndhbGtlcigpO2Zvcih0aGlzLmlubGluZVBhcnNlci5yZWZtYXA9dGhpcy5yZWZtYXAsdGhpcy5pbmxpbmVQYXJzZXIub3B0aW9ucz10aGlzLm9wdGlvbnM7bj1vLm5leHQoKTspdD1uLm5vZGUscj10LnR5cGUsbi5lbnRlcmluZ3x8InBhcmFncmFwaCIhPT1yJiYiaGVhZGluZyIhPT1yfHx0aGlzLmlubGluZVBhcnNlci5wYXJzZSh0KX0sSD1mdW5jdGlvbigpe3JldHVybiBuZXcgbygiZG9jdW1lbnQiLFtbMSwxXSxbMCwwXV0pfSxGPWZ1bmN0aW9uKGUpe3RoaXMuZG9jPW5ldyBILHRoaXMudGlwPXRoaXMuZG9jLHRoaXMucmVmbWFwPXt9LHRoaXMubGluZU51bWJlcj0wLHRoaXMubGFzdExpbmVMZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuY29sdW1uPTAsdGhpcy5sYXN0TWF0Y2hlZENvbnRhaW5lcj10aGlzLmRvYyx0aGlzLmN1cnJlbnRMaW5lPSIiLHRoaXMub3B0aW9ucy50aW1lJiZjb25zb2xlLnRpbWUoInByZXBhcmluZyBpbnB1dCIpO3ZhciB0PWUuc3BsaXQoeSksbj10Lmxlbmd0aDsxMD09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSYmKG4tPTEpLHRoaXMub3B0aW9ucy50aW1lJiZjb25zb2xlLnRpbWVFbmQoInByZXBhcmluZyBpbnB1dCIpLHRoaXMub3B0aW9ucy50aW1lJiZjb25zb2xlLnRpbWUoImJsb2NrIHBhcnNpbmciKTtmb3IodmFyIHI9MDtyPG47cisrKXRoaXMuaW5jb3Jwb3JhdGVMaW5lKHRbcl0pO2Zvcig7dGhpcy50aXA7KXRoaXMuZmluYWxpemUodGhpcy50aXAsbik7cmV0dXJuIHRoaXMub3B0aW9ucy50aW1lJiZjb25zb2xlLnRpbWVFbmQoImJsb2NrIHBhcnNpbmciKSx0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lKCJpbmxpbmUgcGFyc2luZyIpLHRoaXMucHJvY2Vzc0lubGluZXModGhpcy5kb2MpLHRoaXMub3B0aW9ucy50aW1lJiZjb25zb2xlLnRpbWVFbmQoImlubGluZSBwYXJzaW5nIiksdGhpcy5kb2N9O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvY29tbW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL21kdXJsL2VuY29kZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbWR1cmwvZGVjb2RlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9pbmRleC5qcyIpLmRlY29kZUhUTUwsaT0iJig/OiN4W2EtZjAtOV17MSw4fXwjWzAtOV17MSw4fXxbYS16XVthLXowLTldezEsMzF9KTsiLGE9IjxbQS1aYS16XVtBLVphLXowLTktXSooPzpcXHMrW2EtekEtWl86XVthLXpBLVowLTk6Ll8tXSooPzpcXHMqPVxccyooPzpbXlwiJz08PmBcXHgwMC1cXHgyMF0rfCdbXiddKid8XCJbXlwiXSpcIikpPykqXFxzKi8/PiIsbD0iPC9bQS1aYS16XVtBLVphLXowLTktXSpcXHMqWz5dIix1PW5ldyBSZWdFeHAoIl4oPzo8W0EtWmEtel1bQS1aYS16MC05LV0qKD86XFxzK1thLXpBLVpfOl1bYS16QS1aMC05Oi5fLV0qKD86XFxzKj1cXHMqKD86W15cIic9PD5gXFx4MDAtXFx4MjBdK3wnW14nXSonfFwiW15cIl0qXCIpKT8pKlxccyovPz58PC9bQS1aYS16XVtBLVphLXowLTktXSpcXHMqWz5dfFx4M2MhLS0tLVx4M2V8XHgzYyEtLSg/Oi0/W14+LV0pKD86LT9bXi1dKSotLVx4M2V8WzxdWz9dLio/Wz9dWz5dfDwhW0EtWl0rXFxzK1tePl0qPnw8IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4pIiwiaSIpLGM9L1tcXCZdLyxkPSJbIVwiIyQlJicoKSorLC4vOjs8PT4/QFtcXFxcXFxdXl9ge3x9fi1dIixfPW5ldyBSZWdFeHAoIlxcXFwiK2QrInwiK2ksImdpIikscD1uZXcgUmVnRXhwKCdbJjw+Il0nLCJnIiksZj1uZXcgUmVnRXhwKGkrJ3xbJjw+Il0nLCJnaSIpLG09ZnVuY3Rpb24oZSl7cmV0dXJuIDkyPT09ZS5jaGFyQ29kZUF0KDApP2UuY2hhckF0KDEpOnMoZSl9LGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGMudGVzdChlKT9lLnJlcGxhY2UoXyxtKTplfSxnPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcihvKGUpKX1jYXRjaCh0KXtyZXR1cm4gZX19LGI9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiJiI6cmV0dXJuIiZhbXA7IjtjYXNlIjwiOnJldHVybiImbHQ7IjtjYXNlIj4iOnJldHVybiImZ3Q7IjtjYXNlJyInOnJldHVybiImcXVvdDsiO2RlZmF1bHQ6cmV0dXJuIGV9fSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAudGVzdChlKT90P2UucmVwbGFjZShmLGIpOmUucmVwbGFjZShwLGIpOmV9O2UuZXhwb3J0cz17dW5lc2NhcGVTdHJpbmc6aCxub3JtYWxpemVVUkk6Zyxlc2NhcGVYbWw6RSxyZUh0bWxUYWc6dSxPUEVOVEFHOmEsQ0xPU0VUQUc6bCxFTlRJVFk6aSxFU0NBUEFCTEU6ZH19LCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9mcm9tLWNvZGUtcG9pbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7LyohIGh0dHA6Ly9tdGhzLmJlL2Zyb21jb2RlcG9pbnQgdjAuMi4xIGJ5IEBtYXRoaWFzICovCmlmKFN0cmluZy5mcm9tQ29kZVBvaW50KWUuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMzKTt0aHJvdyBlfX07ZWxzZXt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlLG89TWF0aC5mbG9vcixzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPVtdLHM9LTEsaT1hcmd1bWVudHMubGVuZ3RoO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT0iIjsrK3M8aTspe3ZhciBsPU51bWJlcihhcmd1bWVudHNbc10pO2lmKCFpc0Zpbml0ZShsKXx8bDwwfHxsPjExMTQxMTF8fG8obCkhPT1sKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMzKTtsPD02NTUzNT9uLnB1c2gobCk6KGwtPTY1NTM2LGU9NTUyOTYrKGw+PjEwKSx0PWwlMTAyNCs1NjMyMCxuLnB1c2goZSx0KSksKHMrMT09PWl8fG4ubGVuZ3RoPjE2Mzg0KSYmKGErPXIuYXBwbHkobnVsbCxuKSxuLmxlbmd0aD0wKX1yZXR1cm4gYX07ZS5leHBvcnRzPXN9fSwiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzLk5vZGU9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvbm9kZS5qcyIpLGUuZXhwb3J0cy5QYXJzZXI9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvYmxvY2tzLmpzIiksZS5leHBvcnRzLkh0bWxSZW5kZXJlcj1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9yZW5kZXIvaHRtbC5qcyIpLGUuZXhwb3J0cy5YbWxSZW5kZXJlcj1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9yZW5kZXIveG1sLmpzIil9LCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9pbmxpbmVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJue3N1YmplY3Q6IiIsZGVsaW1pdGVyczpudWxsLGJyYWNrZXRzOm51bGwscG9zOjAscmVmbWFwOnt9LG1hdGNoOlAscGVlazpOLHNwbmw6SCxwYXJzZUJhY2t0aWNrczpGLHBhcnNlQmFja3NsYXNoOkIscGFyc2VBdXRvbGluazpVLHBhcnNlSHRtbFRhZzpHLHNjYW5EZWxpbXM6eixoYW5kbGVEZWxpbTpWLHBhcnNlTGlua1RpdGxlOksscGFyc2VMaW5rRGVzdGluYXRpb246WCxwYXJzZUxpbmtMYWJlbDokLHBhcnNlT3BlbkJyYWNrZXQ6USxwYXJzZUJhbmc6SixwYXJzZUNsb3NlQnJhY2tldDpaLGFkZEJyYWNrZXQ6ZWUscmVtb3ZlQnJhY2tldDp0ZSxwYXJzZUVudGl0eTpuZSxwYXJzZVN0cmluZzpyZSxwYXJzZU5ld2xpbmU6b2UscGFyc2VSZWZlcmVuY2U6c2UscGFyc2VJbmxpbmU6aWUscHJvY2Vzc0VtcGhhc2lzOnEscmVtb3ZlRGVsaW1pdGVyOlcsb3B0aW9uczplfHx7fSxwYXJzZTphZX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvbm9kZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvY29tbW9uLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ub3JtYWxpemUtcmVmZXJlbmNlLmpzIiksYT1zLm5vcm1hbGl6ZVVSSSxsPXMudW5lc2NhcGVTdHJpbmcsdT1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9mcm9tLWNvZGUtcG9pbnQuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2luZGV4LmpzIikuZGVjb2RlSFRNTDtuKCIuL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnJlcGVhdC9yZXBlYXQuanMiKTt2YXIgZD1zLkVTQ0FQQUJMRSxfPSJcXFxcIitkLHA9cy5FTlRJVFksZj1zLnJlSHRtbFRhZyxtPW5ldyBSZWdFeHAoL1shIiMkJSYnKCkqKyxcLS5cLzo7PD0+P0BcW1xdXl9ge3x9flx4QTFceEE3XHhBQlx4QjZceEI3XHhCQlx4QkZcdTAzN0VcdTAzODdcdTA1NUEtXHUwNTVGXHUwNTg5XHUwNThBXHUwNUJFXHUwNUMwXHUwNUMzXHUwNUM2XHUwNUYzXHUwNUY0XHUwNjA5XHUwNjBBXHUwNjBDXHUwNjBEXHUwNjFCXHUwNjFFXHUwNjFGXHUwNjZBLVx1MDY2RFx1MDZENFx1MDcwMC1cdTA3MERcdTA3RjctXHUwN0Y5XHUwODMwLVx1MDgzRVx1MDg1RVx1MDk2NFx1MDk2NVx1MDk3MFx1MEFGMFx1MERGNFx1MEU0Rlx1MEU1QVx1MEU1Qlx1MEYwNC1cdTBGMTJcdTBGMTRcdTBGM0EtXHUwRjNEXHUwRjg1XHUwRkQwLVx1MEZENFx1MEZEOVx1MEZEQVx1MTA0QS1cdTEwNEZcdTEwRkJcdTEzNjAtXHUxMzY4XHUxNDAwXHUxNjZEXHUxNjZFXHUxNjlCXHUxNjlDXHUxNkVCLVx1MTZFRFx1MTczNVx1MTczNlx1MTdENC1cdTE3RDZcdTE3RDgtXHUxN0RBXHUxODAwLVx1MTgwQVx1MTk0NFx1MTk0NVx1MUExRVx1MUExRlx1MUFBMC1cdTFBQTZcdTFBQTgtXHUxQUFEXHUxQjVBLVx1MUI2MFx1MUJGQy1cdTFCRkZcdTFDM0ItXHUxQzNGXHUxQzdFXHUxQzdGXHUxQ0MwLVx1MUNDN1x1MUNEM1x1MjAxMC1cdTIwMjdcdTIwMzAtXHUyMDQzXHUyMDQ1LVx1MjA1MVx1MjA1My1cdTIwNUVcdTIwN0RcdTIwN0VcdTIwOERcdTIwOEVcdTIzMDgtXHUyMzBCXHUyMzI5XHUyMzJBXHUyNzY4LVx1Mjc3NVx1MjdDNVx1MjdDNlx1MjdFNi1cdTI3RUZcdTI5ODMtXHUyOTk4XHUyOUQ4LVx1MjlEQlx1MjlGQ1x1MjlGRFx1MkNGOS1cdTJDRkNcdTJDRkVcdTJDRkZcdTJENzBcdTJFMDAtXHUyRTJFXHUyRTMwLVx1MkU0Mlx1MzAwMS1cdTMwMDNcdTMwMDgtXHUzMDExXHUzMDE0LVx1MzAxRlx1MzAzMFx1MzAzRFx1MzBBMFx1MzBGQlx1QTRGRVx1QTRGRlx1QTYwRC1cdUE2MEZcdUE2NzNcdUE2N0VcdUE2RjItXHVBNkY3XHVBODc0LVx1QTg3N1x1QThDRVx1QThDRlx1QThGOC1cdUE4RkFcdUE4RkNcdUE5MkVcdUE5MkZcdUE5NUZcdUE5QzEtXHVBOUNEXHVBOURFXHVBOURGXHVBQTVDLVx1QUE1Rlx1QUFERVx1QUFERlx1QUFGMFx1QUFGMVx1QUJFQlx1RkQzRVx1RkQzRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2MVx1RkU2M1x1RkU2OFx1RkU2QVx1RkU2Qlx1RkYwMS1cdUZGMDNcdUZGMDUtXHVGRjBBXHVGRjBDLVx1RkYwRlx1RkYxQVx1RkYxQlx1RkYxRlx1RkYyMFx1RkYzQi1cdUZGM0RcdUZGM0ZcdUZGNUJcdUZGNURcdUZGNUYtXHVGRjY1XXxcdUQ4MDBbXHVERDAwLVx1REQwMlx1REY5Rlx1REZEMF18XHVEODAxXHVERDZGfFx1RDgwMltcdURDNTdcdUREMUZcdUREM0ZcdURFNTAtXHVERTU4XHVERTdGXHVERUYwLVx1REVGNlx1REYzOS1cdURGM0ZcdURGOTktXHVERjlDXXxcdUQ4MDRbXHVEQzQ3LVx1REM0RFx1RENCQlx1RENCQ1x1RENCRS1cdURDQzFcdURENDAtXHVERDQzXHVERDc0XHVERDc1XHVEREM1LVx1RERDOVx1RERDRFx1REREQlx1RERERC1cdUREREZcdURFMzgtXHVERTNEXHVERUE5XXxcdUQ4MDVbXHVEQ0M2XHVEREMxLVx1REREN1x1REU0MS1cdURFNDNcdURGM0MtXHVERjNFXXxcdUQ4MDlbXHVEQzcwLVx1REM3NF18XHVEODFBW1x1REU2RVx1REU2Rlx1REVGNVx1REYzNy1cdURGM0JcdURGNDRdfFx1RDgyRlx1REM5RnxcdUQ4MzZbXHVERTg3LVx1REU4Ql0vKSxoPW5ldyBSZWdFeHAoJ14oPzoiKCcrXysnfFteIlxceDAwXSkqInxcJygnK18rInxbXidcXHgwMF0pKid8XFwoKCIrXysifFteKVxceDAwXSkqXFwpKSIpLGc9bmV3IFJlZ0V4cCgiXig/Ols8XSg/OlteIDw+XFx0XFxuXFxcXFxceDAwXXwiK18rInxcXFxcKSpbPl0pIiksYj1uZXcgUmVnRXhwKCJeIitkKSxFPW5ldyBSZWdFeHAoIl4iK3AsImkiKSx5PS9gKy8sdj0vXmArLyxUPS9cLlwuXC4vZyxBPS8tLSsvZyxDPS9ePChbYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKik+LyxPPS9ePFtBLVphLXpdW0EtWmEtejAtOS4rLV17MSwzMX06W148Plx4MDAtXHgyMF0qPi9pLFM9L14gKig/OlxuICopPy8sUj0vXlsgXHRcblx4MGJceDBjXHgwZF0vLGo9L1sgXHRcblx4MGJceDBjXHgwZF0rL2cseD0vXlxzLyxMPS8gKiQvLEQ9L14gKi8sdz0vXiAqKD86XG58JCkvLE09bmV3IFJlZ0V4cCgiXlxcWyg/OlteXFxcXFxcW1xcXV18IitfKyJ8XFxcXCl7MCwxMDAwfVxcXSIpLGs9L15bXlxuYFxbXF1cXCE8JipfJyJdKy9tLEk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG8oInRleHQiKTtyZXR1cm4gdC5fbGl0ZXJhbD1lLHR9LFA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5leGVjKHRoaXMuc3ViamVjdC5zbGljZSh0aGlzLnBvcykpO3JldHVybiBudWxsPT09dD9udWxsOih0aGlzLnBvcys9dC5pbmRleCt0WzBdLmxlbmd0aCx0WzBdKX0sTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN1YmplY3QubGVuZ3RoP3RoaXMuc3ViamVjdC5jaGFyQ29kZUF0KHRoaXMucG9zKTotMX0sSD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoKFMpLCEwfSxGPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWF0Y2godik7aWYobnVsbD09PXQpcmV0dXJuITE7Zm9yKHZhciBuLHIscz10aGlzLnBvcztudWxsIT09KG49dGhpcy5tYXRjaCh5KSk7KWlmKG49PT10KXJldHVybiByPW5ldyBvKCJjb2RlIiksci5fbGl0ZXJhbD10aGlzLnN1YmplY3Quc2xpY2Uocyx0aGlzLnBvcy10Lmxlbmd0aCkudHJpbSgpLnJlcGxhY2UoaiwiICIpLGUuYXBwZW5kQ2hpbGQociksITA7cmV0dXJuIHRoaXMucG9zPXMsZS5hcHBlbmRDaGlsZChJKHQpKSwhMH0sQj1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuc3ViamVjdDtyZXR1cm4gdGhpcy5wb3MrPTEsMTA9PT10aGlzLnBlZWsoKT8odGhpcy5wb3MrPTEsdD1uZXcgbygibGluZWJyZWFrIiksZS5hcHBlbmRDaGlsZCh0KSk6Yi50ZXN0KG4uY2hhckF0KHRoaXMucG9zKSk/KGUuYXBwZW5kQ2hpbGQoSShuLmNoYXJBdCh0aGlzLnBvcykpKSx0aGlzLnBvcys9MSk6ZS5hcHBlbmRDaGlsZChJKCJcXCIpKSwhMH0sVT1mdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuKHQ9dGhpcy5tYXRjaChDKSk/KG49dC5zbGljZSgxLHQubGVuZ3RoLTEpLHI9bmV3IG8oImxpbmsiKSxyLl9kZXN0aW5hdGlvbj1hKCJtYWlsdG86IituKSxyLl90aXRsZT0iIixyLmFwcGVuZENoaWxkKEkobikpLGUuYXBwZW5kQ2hpbGQociksITApOiEhKHQ9dGhpcy5tYXRjaChPKSkmJihuPXQuc2xpY2UoMSx0Lmxlbmd0aC0xKSxyPW5ldyBvKCJsaW5rIiksci5fZGVzdGluYXRpb249YShuKSxyLl90aXRsZT0iIixyLmFwcGVuZENoaWxkKEkobikpLGUuYXBwZW5kQ2hpbGQociksITApfSxHPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWF0Y2goZik7aWYobnVsbD09PXQpcmV0dXJuITE7dmFyIG49bmV3IG8oImh0bWxfaW5saW5lIik7cmV0dXJuIG4uX2xpdGVyYWw9dCxlLmFwcGVuZENoaWxkKG4pLCEwfSx6PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhLGwsYyxkLF8scD0wLGY9dGhpcy5wb3M7aWYoMzk9PT1lfHwzND09PWUpcCsrLHRoaXMucG9zKys7ZWxzZSBmb3IoO3RoaXMucGVlaygpPT09ZTspcCsrLHRoaXMucG9zKys7cmV0dXJuIDA9PT1wP251bGw6KHQ9MD09PWY/IlxuIjp0aGlzLnN1YmplY3QuY2hhckF0KGYtMSkscj10aGlzLnBlZWsoKSxuPS0xPT09cj8iXG4iOnUociksbD14LnRlc3QobiksYz1tLnRlc3QobiksZD14LnRlc3QodCksXz1tLnRlc3QodCksbz0hbCYmKCFjfHxkfHxfKSxzPSFkJiYoIV98fGx8fGMpLDk1PT09ZT8oaT1vJiYoIXN8fF8pLGE9cyYmKCFvfHxjKSk6Mzk9PT1lfHwzND09PWU/KGk9byYmIXMsYT1zKTooaT1vLGE9cyksdGhpcy5wb3M9Zix7bnVtZGVsaW1zOnAsY2FuX29wZW46aSxjYW5fY2xvc2U6YX0pfSxWPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zY2FuRGVsaW1zKGUpO2lmKCFuKXJldHVybiExO3ZhciByLG89bi5udW1kZWxpbXMscz10aGlzLnBvczt0aGlzLnBvcys9byxyPTM5PT09ZT8i4oCZIjozND09PWU/IuKAnCI6dGhpcy5zdWJqZWN0LnNsaWNlKHMsdGhpcy5wb3MpO3ZhciBpPUkocik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoaSksdGhpcy5kZWxpbWl0ZXJzPXtjYzplLG51bWRlbGltczpvLG9yaWdkZWxpbXM6byxub2RlOmkscHJldmlvdXM6dGhpcy5kZWxpbWl0ZXJzLG5leHQ6bnVsbCxjYW5fb3BlbjpuLmNhbl9vcGVuLGNhbl9jbG9zZTpuLmNhbl9jbG9zZX0sbnVsbCE9PXRoaXMuZGVsaW1pdGVycy5wcmV2aW91cyYmKHRoaXMuZGVsaW1pdGVycy5wcmV2aW91cy5uZXh0PXRoaXMuZGVsaW1pdGVycyksITB9LFc9ZnVuY3Rpb24oZSl7bnVsbCE9PWUucHJldmlvdXMmJihlLnByZXZpb3VzLm5leHQ9ZS5uZXh0KSxudWxsPT09ZS5uZXh0P3RoaXMuZGVsaW1pdGVycz1lLnByZXZpb3VzOmUubmV4dC5wcmV2aW91cz1lLnByZXZpb3VzfSxZPWZ1bmN0aW9uKGUsdCl7ZS5uZXh0IT09dCYmKGUubmV4dD10LHQucHJldmlvdXM9ZSl9LHE9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLHMsaSxhLGwsdSxjLGQsXz1bXSxwPSExO2ZvcihfWzk1XT1lLF9bNDJdPWUsX1szOV09ZSxfWzM0XT1lLG49dGhpcy5kZWxpbWl0ZXJzO251bGwhPT1uJiZuLnByZXZpb3VzIT09ZTspbj1uLnByZXZpb3VzO2Zvcig7bnVsbCE9PW47KXt2YXIgZj1uLmNjO2lmKG4uY2FuX2Nsb3NlKXtmb3IodD1uLnByZXZpb3VzLGQ9ITE7bnVsbCE9PXQmJnQhPT1lJiZ0IT09X1tmXTspe2lmKHA9KG4uY2FuX29wZW58fHQuY2FuX2Nsb3NlKSYmKHQub3JpZ2RlbGltcytuLm9yaWdkZWxpbXMpJTM9PTAsdC5jYz09PW4uY2MmJnQuY2FuX29wZW4mJiFwKXtkPSEwO2JyZWFrfXQ9dC5wcmV2aW91c31pZihyPW4sNDI9PT1mfHw5NT09PWYpaWYoZCl7bD1uLm51bWRlbGltcz49MiYmdC5udW1kZWxpbXM+PTI/MjoxLHM9dC5ub2RlLGk9bi5ub2RlLHQubnVtZGVsaW1zLT1sLG4ubnVtZGVsaW1zLT1sLHMuX2xpdGVyYWw9cy5fbGl0ZXJhbC5zbGljZSgwLHMuX2xpdGVyYWwubGVuZ3RoLWwpLGkuX2xpdGVyYWw9aS5fbGl0ZXJhbC5zbGljZSgwLGkuX2xpdGVyYWwubGVuZ3RoLWwpO3ZhciBtPW5ldyBvKDE9PT1sPyJlbXBoIjoic3Ryb25nIik7Zm9yKHU9cy5fbmV4dDt1JiZ1IT09aTspYz11Ll9uZXh0LHUudW5saW5rKCksbS5hcHBlbmRDaGlsZCh1KSx1PWM7cy5pbnNlcnRBZnRlcihtKSxZKHQsbiksMD09PXQubnVtZGVsaW1zJiYocy51bmxpbmsoKSx0aGlzLnJlbW92ZURlbGltaXRlcih0KSksMD09PW4ubnVtZGVsaW1zJiYoaS51bmxpbmsoKSxhPW4ubmV4dCx0aGlzLnJlbW92ZURlbGltaXRlcihuKSxuPWEpfWVsc2Ugbj1uLm5leHQ7ZWxzZSAzOT09PWY/KG4ubm9kZS5fbGl0ZXJhbD0i4oCZIixkJiYodC5ub2RlLl9saXRlcmFsPSLigJgiKSxuPW4ubmV4dCk6MzQ9PT1mJiYobi5ub2RlLl9saXRlcmFsPSLigJ0iLGQmJih0Lm5vZGUubGl0ZXJhbD0i4oCcIiksbj1uLm5leHQpO2R8fHB8fChfW2ZdPXIucHJldmlvdXMsci5jYW5fb3Blbnx8dGhpcy5yZW1vdmVEZWxpbWl0ZXIocikpfWVsc2Ugbj1uLm5leHR9Zm9yKDtudWxsIT09dGhpcy5kZWxpbWl0ZXJzJiZ0aGlzLmRlbGltaXRlcnMhPT1lOyl0aGlzLnJlbW92ZURlbGltaXRlcih0aGlzLmRlbGltaXRlcnMpfSxLPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tYXRjaChoKTtyZXR1cm4gbnVsbD09PWU/bnVsbDpsKGUuc3Vic3RyKDEsZS5sZW5ndGgtMikpfSxYPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tYXRjaChnKTtpZihudWxsPT09ZSl7Zm9yKHZhciB0LG49dGhpcy5wb3Mscj0wOy0xIT09KHQ9dGhpcy5wZWVrKCkpOylpZig5Mj09PXQpdGhpcy5wb3MrPTEsLTEhPT10aGlzLnBlZWsoKSYmKHRoaXMucG9zKz0xKTtlbHNlIGlmKDQwPT09dCl0aGlzLnBvcys9MSxyKz0xO2Vsc2UgaWYoNDE9PT10KXtpZihyPDEpYnJlYWs7dGhpcy5wb3MrPTEsci09MX1lbHNle2lmKG51bGwhPT1SLmV4ZWModSh0KSkpYnJlYWs7dGhpcy5wb3MrPTF9cmV0dXJuIGU9dGhpcy5zdWJqZWN0LnN1YnN0cihuLHRoaXMucG9zLW4pLGEobChlKSl9cmV0dXJuIGEobChlLnN1YnN0cigxLGUubGVuZ3RoLTIpKSl9LCQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hdGNoKE0pO3JldHVybiBudWxsPT09ZXx8ZS5sZW5ndGg+MTAwMXx8L1teXFxdXFxcXSQvLmV4ZWMoZSk/MDplLmxlbmd0aH0sUT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvczt0aGlzLnBvcys9MTt2YXIgbj1JKCJbIik7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobiksdGhpcy5hZGRCcmFja2V0KG4sdCwhMSksITB9LEo9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3M7aWYodGhpcy5wb3MrPTEsOTE9PT10aGlzLnBlZWsoKSl7dGhpcy5wb3MrPTE7dmFyIG49SSgiIVsiKTtlLmFwcGVuZENoaWxkKG4pLHRoaXMuYWRkQnJhY2tldChuLHQrMSwhMCl9ZWxzZSBlLmFwcGVuZENoaWxkKEkoIiEiKSk7cmV0dXJuITB9LFo9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLHMsYSxsLHU9ITE7aWYodGhpcy5wb3MrPTEsdD10aGlzLnBvcyxudWxsPT09KGw9dGhpcy5icmFja2V0cykpcmV0dXJuIGUuYXBwZW5kQ2hpbGQoSSgiXSIpKSwhMDtpZighbC5hY3RpdmUpcmV0dXJuIGUuYXBwZW5kQ2hpbGQoSSgiXSIpKSx0aGlzLnJlbW92ZUJyYWNrZXQoKSwhMDtuPWwuaW1hZ2U7dmFyIGM9dGhpcy5wb3M7aWYoNDA9PT10aGlzLnBlZWsoKSYmKHRoaXMucG9zKyssdGhpcy5zcG5sKCkmJm51bGwhPT0ocj10aGlzLnBhcnNlTGlua0Rlc3RpbmF0aW9uKCkpJiZ0aGlzLnNwbmwoKSYmKFIudGVzdCh0aGlzLnN1YmplY3QuY2hhckF0KHRoaXMucG9zLTEpKSYmKHM9dGhpcy5wYXJzZUxpbmtUaXRsZSgpKSwhMCkmJnRoaXMuc3BubCgpJiY0MT09PXRoaXMucGVlaygpPyh0aGlzLnBvcys9MSx1PSEwKTp0aGlzLnBvcz1jKSwhdSl7dmFyIGQ9dGhpcy5wb3MsXz10aGlzLnBhcnNlTGlua0xhYmVsKCk7aWYoXz4yP2E9dGhpcy5zdWJqZWN0LnNsaWNlKGQsZCtfKTpsLmJyYWNrZXRBZnRlcnx8KGE9dGhpcy5zdWJqZWN0LnNsaWNlKGwuaW5kZXgsdCkpLDA9PT1fJiYodGhpcy5wb3M9YyksYSl7dmFyIHA9dGhpcy5yZWZtYXBbaShhKV07cCYmKHI9cC5kZXN0aW5hdGlvbixzPXAudGl0bGUsdT0hMCl9fWlmKHUpe3ZhciBmPW5ldyBvKG4/ImltYWdlIjoibGluayIpO2YuX2Rlc3RpbmF0aW9uPXIsZi5fdGl0bGU9c3x8IiI7dmFyIG0saDtmb3IobT1sLm5vZGUuX25leHQ7bTspaD1tLl9uZXh0LG0udW5saW5rKCksZi5hcHBlbmRDaGlsZChtKSxtPWg7aWYoZS5hcHBlbmRDaGlsZChmKSx0aGlzLnByb2Nlc3NFbXBoYXNpcyhsLnByZXZpb3VzRGVsaW1pdGVyKSx0aGlzLnJlbW92ZUJyYWNrZXQoKSxsLm5vZGUudW5saW5rKCksIW4pZm9yKGw9dGhpcy5icmFja2V0cztudWxsIT09bDspbC5pbWFnZXx8KGwuYWN0aXZlPSExKSxsPWwucHJldmlvdXM7cmV0dXJuITB9cmV0dXJuIHRoaXMucmVtb3ZlQnJhY2tldCgpLHRoaXMucG9zPXQsZS5hcHBlbmRDaGlsZChJKCJdIikpLCEwfSxlZT1mdW5jdGlvbihlLHQsbil7bnVsbCE9PXRoaXMuYnJhY2tldHMmJih0aGlzLmJyYWNrZXRzLmJyYWNrZXRBZnRlcj0hMCksdGhpcy5icmFja2V0cz17bm9kZTplLHByZXZpb3VzOnRoaXMuYnJhY2tldHMscHJldmlvdXNEZWxpbWl0ZXI6dGhpcy5kZWxpbWl0ZXJzLGluZGV4OnQsaW1hZ2U6bixhY3RpdmU6ITB9fSx0ZT1mdW5jdGlvbigpe3RoaXMuYnJhY2tldHM9dGhpcy5icmFja2V0cy5wcmV2aW91c30sbmU9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISEodD10aGlzLm1hdGNoKEUpKSYmKGUuYXBwZW5kQ2hpbGQoSShjKHQpKSksITApfSxyZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hISh0PXRoaXMubWF0Y2goaykpJiYodGhpcy5vcHRpb25zLnNtYXJ0P2UuYXBwZW5kQ2hpbGQoSSh0LnJlcGxhY2UoVCwi4oCmIikucmVwbGFjZShBLGZ1bmN0aW9uKGUpe3ZhciB0PTAsbj0wO3JldHVybiBlLmxlbmd0aCUzPT0wP249ZS5sZW5ndGgvMzplLmxlbmd0aCUyPT0wP3Q9ZS5sZW5ndGgvMjplLmxlbmd0aCUzPT0yPyh0PTEsbj0oZS5sZW5ndGgtMikvMyk6KHQ9MixuPShlLmxlbmd0aC00KS8zKSwi4oCUIi5yZXBlYXQobikrIuKAkyIucmVwZWF0KHQpfSkpKTplLmFwcGVuZENoaWxkKEkodCkpLCEwKX0sb2U9ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPTE7dmFyIHQ9ZS5fbGFzdENoaWxkO2lmKHQmJiJ0ZXh0Ij09PXQudHlwZSYmIiAiPT09dC5fbGl0ZXJhbFt0Ll9saXRlcmFsLmxlbmd0aC0xXSl7dmFyIG49IiAiPT09dC5fbGl0ZXJhbFt0Ll9saXRlcmFsLmxlbmd0aC0yXTt0Ll9saXRlcmFsPXQuX2xpdGVyYWwucmVwbGFjZShMLCIiKSxlLmFwcGVuZENoaWxkKG5ldyBvKG4/ImxpbmVicmVhayI6InNvZnRicmVhayIpKX1lbHNlIGUuYXBwZW5kQ2hpbGQobmV3IG8oInNvZnRicmVhayIpKTtyZXR1cm4gdGhpcy5tYXRjaChEKSwhMH0sc2U9ZnVuY3Rpb24oZSx0KXt0aGlzLnN1YmplY3Q9ZSx0aGlzLnBvcz0wO3ZhciBuLHIsbyxzLGE9dGhpcy5wb3M7aWYoMD09PShzPXRoaXMucGFyc2VMaW5rTGFiZWwoKSkpcmV0dXJuIDA7aWYobj10aGlzLnN1YmplY3Quc3Vic3RyKDAscyksNTghPT10aGlzLnBlZWsoKSlyZXR1cm4gdGhpcy5wb3M9YSwwO2lmKHRoaXMucG9zKyssdGhpcy5zcG5sKCksbnVsbD09PShyPXRoaXMucGFyc2VMaW5rRGVzdGluYXRpb24oKSl8fDA9PT1yLmxlbmd0aClyZXR1cm4gdGhpcy5wb3M9YSwwO3ZhciBsPXRoaXMucG9zO3RoaXMuc3BubCgpLG51bGw9PT0obz10aGlzLnBhcnNlTGlua1RpdGxlKCkpJiYobz0iIix0aGlzLnBvcz1sKTt2YXIgdT0hMDtpZihudWxsPT09dGhpcy5tYXRjaCh3KSYmKCIiPT09bz91PSExOihvPSIiLHRoaXMucG9zPWwsdT1udWxsIT09dGhpcy5tYXRjaCh3KSkpLCF1KXJldHVybiB0aGlzLnBvcz1hLDA7dmFyIGM9aShuKTtyZXR1cm4iIj09PWM/KHRoaXMucG9zPWEsMCk6KHRbY118fCh0W2NdPXtkZXN0aW5hdGlvbjpyLHRpdGxlOm99KSx0aGlzLnBvcy1hKX0saWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ITEsbj10aGlzLnBlZWsoKTtpZigtMT09PW4pcmV0dXJuITE7c3dpdGNoKG4pe2Nhc2UgMTA6dD10aGlzLnBhcnNlTmV3bGluZShlKTticmVhaztjYXNlIDkyOnQ9dGhpcy5wYXJzZUJhY2tzbGFzaChlKTticmVhaztjYXNlIDk2OnQ9dGhpcy5wYXJzZUJhY2t0aWNrcyhlKTticmVhaztjYXNlIDQyOmNhc2UgOTU6dD10aGlzLmhhbmRsZURlbGltKG4sZSk7YnJlYWs7Y2FzZSAzOTpjYXNlIDM0OnQ9dGhpcy5vcHRpb25zLnNtYXJ0JiZ0aGlzLmhhbmRsZURlbGltKG4sZSk7YnJlYWs7Y2FzZSA5MTp0PXRoaXMucGFyc2VPcGVuQnJhY2tldChlKTticmVhaztjYXNlIDMzOnQ9dGhpcy5wYXJzZUJhbmcoZSk7YnJlYWs7Y2FzZSA5Mzp0PXRoaXMucGFyc2VDbG9zZUJyYWNrZXQoZSk7YnJlYWs7Y2FzZSA2MDp0PXRoaXMucGFyc2VBdXRvbGluayhlKXx8dGhpcy5wYXJzZUh0bWxUYWcoZSk7YnJlYWs7Y2FzZSAzODp0PXRoaXMucGFyc2VFbnRpdHkoZSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMucGFyc2VTdHJpbmcoZSl9cmV0dXJuIHR8fCh0aGlzLnBvcys9MSxlLmFwcGVuZENoaWxkKEkodShuKSkpKSwhMH0sYWU9ZnVuY3Rpb24oZSl7Zm9yKHRoaXMuc3ViamVjdD1lLl9zdHJpbmdfY29udGVudC50cmltKCksdGhpcy5wb3M9MCx0aGlzLmRlbGltaXRlcnM9bnVsbCx0aGlzLmJyYWNrZXRzPW51bGw7dGhpcy5wYXJzZUlubGluZShlKTspO2UuX3N0cmluZ19jb250ZW50PW51bGwsdGhpcy5wcm9jZXNzRW1waGFzaXMobnVsbCl9O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvbm9kZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3N3aXRjaChlLl90eXBlKXtjYXNlImRvY3VtZW50IjpjYXNlImJsb2NrX3F1b3RlIjpjYXNlImxpc3QiOmNhc2UiaXRlbSI6Y2FzZSJwYXJhZ3JhcGgiOmNhc2UiaGVhZGluZyI6Y2FzZSJlbXBoIjpjYXNlInN0cm9uZyI6Y2FzZSJsaW5rIjpjYXNlImltYWdlIjpjYXNlImN1c3RvbV9pbmxpbmUiOmNhc2UiY3VzdG9tX2Jsb2NrIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgbz1mdW5jdGlvbihlLHQpe3RoaXMuY3VycmVudD1lLHRoaXMuZW50ZXJpbmc9ITA9PT10fSxzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LHQ9dGhpcy5lbnRlcmluZztpZihudWxsPT09ZSlyZXR1cm4gbnVsbDt2YXIgbj1yKGUpO3JldHVybiB0JiZuP2UuX2ZpcnN0Q2hpbGQ/KHRoaXMuY3VycmVudD1lLl9maXJzdENoaWxkLHRoaXMuZW50ZXJpbmc9ITApOnRoaXMuZW50ZXJpbmc9ITE6ZT09PXRoaXMucm9vdD90aGlzLmN1cnJlbnQ9bnVsbDpudWxsPT09ZS5fbmV4dD8odGhpcy5jdXJyZW50PWUuX3BhcmVudCx0aGlzLmVudGVyaW5nPSExKToodGhpcy5jdXJyZW50PWUuX25leHQsdGhpcy5lbnRlcmluZz0hMCkse2VudGVyaW5nOnQsbm9kZTplfX0saT1mdW5jdGlvbihlKXtyZXR1cm57Y3VycmVudDplLHJvb3Q6ZSxlbnRlcmluZzohMCxuZXh0OnMscmVzdW1lQXQ6b319LGE9ZnVuY3Rpb24oZSx0KXt0aGlzLl90eXBlPWUsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fZmlyc3RDaGlsZD1udWxsLHRoaXMuX2xhc3RDaGlsZD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fc291cmNlcG9zPXQsdGhpcy5fbGFzdExpbmVCbGFuaz0hMSx0aGlzLl9vcGVuPSEwLHRoaXMuX3N0cmluZ19jb250ZW50PW51bGwsdGhpcy5fbGl0ZXJhbD1udWxsLHRoaXMuX2xpc3REYXRhPXt9LHRoaXMuX2luZm89bnVsbCx0aGlzLl9kZXN0aW5hdGlvbj1udWxsLHRoaXMuX3RpdGxlPW51bGwsdGhpcy5faXNGZW5jZWQ9ITEsdGhpcy5fZmVuY2VDaGFyPW51bGwsdGhpcy5fZmVuY2VMZW5ndGg9MCx0aGlzLl9mZW5jZU9mZnNldD1udWxsLHRoaXMuX2xldmVsPW51bGwsdGhpcy5fb25FbnRlcj1udWxsLHRoaXMuX29uRXhpdD1udWxsfSxsPWEucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJpc0NvbnRhaW5lciIse2dldDpmdW5jdGlvbigpe3JldHVybiByKHRoaXMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ0eXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlyc3RDaGlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibGFzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RDaGlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibmV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZXZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInNvdXJjZXBvcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Vwb3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxpdGVyYWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGl0ZXJhbH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2xpdGVyYWw9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiZGVzdGluYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdGluYXRpb259LHNldDpmdW5jdGlvbihlKXt0aGlzLl9kZXN0aW5hdGlvbj1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ0aXRsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aXRsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImluZm8iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5mb30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2luZm89ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibGV2ZWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGV2ZWx9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9sZXZlbD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsaXN0VHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0RGF0YS50eXBlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGlzdERhdGEudHlwZT1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsaXN0VGlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGlzdERhdGEudGlnaHR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9saXN0RGF0YS50aWdodD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsaXN0U3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGlzdERhdGEuc3RhcnR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9saXN0RGF0YS5zdGFydD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsaXN0RGVsaW1pdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xpc3REYXRhLmRlbGltaXRlcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2xpc3REYXRhLmRlbGltaXRlcj1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJvbkVudGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRW50ZXJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vbkVudGVyPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIm9uRXhpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkV4aXR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vbkV4aXQ9ZX19KSxhLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihlKXtlLnVubGluaygpLGUuX3BhcmVudD10aGlzLHRoaXMuX2xhc3RDaGlsZD8odGhpcy5fbGFzdENoaWxkLl9uZXh0PWUsZS5fcHJldj10aGlzLl9sYXN0Q2hpbGQsdGhpcy5fbGFzdENoaWxkPWUpOih0aGlzLl9maXJzdENoaWxkPWUsdGhpcy5fbGFzdENoaWxkPWUpfSxhLnByb3RvdHlwZS5wcmVwZW5kQ2hpbGQ9ZnVuY3Rpb24oZSl7ZS51bmxpbmsoKSxlLl9wYXJlbnQ9dGhpcyx0aGlzLl9maXJzdENoaWxkPyh0aGlzLl9maXJzdENoaWxkLl9wcmV2PWUsZS5fbmV4dD10aGlzLl9maXJzdENoaWxkLHRoaXMuX2ZpcnN0Q2hpbGQ9ZSk6KHRoaXMuX2ZpcnN0Q2hpbGQ9ZSx0aGlzLl9sYXN0Q2hpbGQ9ZSl9LGEucHJvdG90eXBlLnVubGluaz1mdW5jdGlvbigpe3RoaXMuX3ByZXY/dGhpcy5fcHJldi5fbmV4dD10aGlzLl9uZXh0OnRoaXMuX3BhcmVudCYmKHRoaXMuX3BhcmVudC5fZmlyc3RDaGlsZD10aGlzLl9uZXh0KSx0aGlzLl9uZXh0P3RoaXMuX25leHQuX3ByZXY9dGhpcy5fcHJldjp0aGlzLl9wYXJlbnQmJih0aGlzLl9wYXJlbnQuX2xhc3RDaGlsZD10aGlzLl9wcmV2KSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsfSxhLnByb3RvdHlwZS5pbnNlcnRBZnRlcj1mdW5jdGlvbihlKXtlLnVubGluaygpLGUuX25leHQ9dGhpcy5fbmV4dCxlLl9uZXh0JiYoZS5fbmV4dC5fcHJldj1lKSxlLl9wcmV2PXRoaXMsdGhpcy5fbmV4dD1lLGUuX3BhcmVudD10aGlzLl9wYXJlbnQsZS5fbmV4dHx8KGUuX3BhcmVudC5fbGFzdENoaWxkPWUpfSxhLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSl7ZS51bmxpbmsoKSxlLl9wcmV2PXRoaXMuX3ByZXYsZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9ZSksZS5fbmV4dD10aGlzLHRoaXMuX3ByZXY9ZSxlLl9wYXJlbnQ9dGhpcy5fcGFyZW50LGUuX3ByZXZ8fChlLl9wYXJlbnQuX2ZpcnN0Q2hpbGQ9ZSl9LGEucHJvdG90eXBlLndhbGtlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzKX0sZS5leHBvcnRzPWF9LCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ub3JtYWxpemUtcmVmZXJlbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS9bIFx0XHJcbl0rfFtBLVpceEI1XHhDMC1ceEQ2XHhEOC1ceERGXHUwMTAwXHUwMTAyXHUwMTA0XHUwMTA2XHUwMTA4XHUwMTBBXHUwMTBDXHUwMTBFXHUwMTEwXHUwMTEyXHUwMTE0XHUwMTE2XHUwMTE4XHUwMTFBXHUwMTFDXHUwMTFFXHUwMTIwXHUwMTIyXHUwMTI0XHUwMTI2XHUwMTI4XHUwMTJBXHUwMTJDXHUwMTJFXHUwMTMwXHUwMTMyXHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNCXHUwMTNEXHUwMTNGXHUwMTQxXHUwMTQzXHUwMTQ1XHUwMTQ3XHUwMTQ5XHUwMTRBXHUwMTRDXHUwMTRFXHUwMTUwXHUwMTUyXHUwMTU0XHUwMTU2XHUwMTU4XHUwMTVBXHUwMTVDXHUwMTVFXHUwMTYwXHUwMTYyXHUwMTY0XHUwMTY2XHUwMTY4XHUwMTZBXHUwMTZDXHUwMTZFXHUwMTcwXHUwMTcyXHUwMTc0XHUwMTc2XHUwMTc4XHUwMTc5XHUwMTdCXHUwMTdEXHUwMTdGXHUwMTgxXHUwMTgyXHUwMTg0XHUwMTg2XHUwMTg3XHUwMTg5LVx1MDE4Qlx1MDE4RS1cdTAxOTFcdTAxOTNcdTAxOTRcdTAxOTYtXHUwMTk4XHUwMTlDXHUwMTlEXHUwMTlGXHUwMUEwXHUwMUEyXHUwMUE0XHUwMUE2XHUwMUE3XHUwMUE5XHUwMUFDXHUwMUFFXHUwMUFGXHUwMUIxLVx1MDFCM1x1MDFCNVx1MDFCN1x1MDFCOFx1MDFCQ1x1MDFDNFx1MDFDNVx1MDFDN1x1MDFDOFx1MDFDQVx1MDFDQlx1MDFDRFx1MDFDRlx1MDFEMVx1MDFEM1x1MDFENVx1MDFEN1x1MDFEOVx1MDFEQlx1MDFERVx1MDFFMFx1MDFFMlx1MDFFNFx1MDFFNlx1MDFFOFx1MDFFQVx1MDFFQ1x1MDFFRVx1MDFGMC1cdTAxRjJcdTAxRjRcdTAxRjYtXHUwMUY4XHUwMUZBXHUwMUZDXHUwMUZFXHUwMjAwXHUwMjAyXHUwMjA0XHUwMjA2XHUwMjA4XHUwMjBBXHUwMjBDXHUwMjBFXHUwMjEwXHUwMjEyXHUwMjE0XHUwMjE2XHUwMjE4XHUwMjFBXHUwMjFDXHUwMjFFXHUwMjIwXHUwMjIyXHUwMjI0XHUwMjI2XHUwMjI4XHUwMjJBXHUwMjJDXHUwMjJFXHUwMjMwXHUwMjMyXHUwMjNBXHUwMjNCXHUwMjNEXHUwMjNFXHUwMjQxXHUwMjQzLVx1MDI0Nlx1MDI0OFx1MDI0QVx1MDI0Q1x1MDI0RVx1MDM0NVx1MDM3MFx1MDM3Mlx1MDM3Nlx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNBQlx1MDNCMFx1MDNDMlx1MDNDRi1cdTAzRDFcdTAzRDVcdTAzRDZcdTAzRDhcdTAzREFcdTAzRENcdTAzREVcdTAzRTBcdTAzRTJcdTAzRTRcdTAzRTZcdTAzRThcdTAzRUFcdTAzRUNcdTAzRUVcdTAzRjBcdTAzRjFcdTAzRjRcdTAzRjVcdTAzRjdcdTAzRjlcdTAzRkFcdTAzRkQtXHUwNDJGXHUwNDYwXHUwNDYyXHUwNDY0XHUwNDY2XHUwNDY4XHUwNDZBXHUwNDZDXHUwNDZFXHUwNDcwXHUwNDcyXHUwNDc0XHUwNDc2XHUwNDc4XHUwNDdBXHUwNDdDXHUwNDdFXHUwNDgwXHUwNDhBXHUwNDhDXHUwNDhFXHUwNDkwXHUwNDkyXHUwNDk0XHUwNDk2XHUwNDk4XHUwNDlBXHUwNDlDXHUwNDlFXHUwNEEwXHUwNEEyXHUwNEE0XHUwNEE2XHUwNEE4XHUwNEFBXHUwNEFDXHUwNEFFXHUwNEIwXHUwNEIyXHUwNEI0XHUwNEI2XHUwNEI4XHUwNEJBXHUwNEJDXHUwNEJFXHUwNEMwXHUwNEMxXHUwNEMzXHUwNEM1XHUwNEM3XHUwNEM5XHUwNENCXHUwNENEXHUwNEQwXHUwNEQyXHUwNEQ0XHUwNEQ2XHUwNEQ4XHUwNERBXHUwNERDXHUwNERFXHUwNEUwXHUwNEUyXHUwNEU0XHUwNEU2XHUwNEU4XHUwNEVBXHUwNEVDXHUwNEVFXHUwNEYwXHUwNEYyXHUwNEY0XHUwNEY2XHUwNEY4XHUwNEZBXHUwNEZDXHUwNEZFXHUwNTAwXHUwNTAyXHUwNTA0XHUwNTA2XHUwNTA4XHUwNTBBXHUwNTBDXHUwNTBFXHUwNTEwXHUwNTEyXHUwNTE0XHUwNTE2XHUwNTE4XHUwNTFBXHUwNTFDXHUwNTFFXHUwNTIwXHUwNTIyXHUwNTI0XHUwNTI2XHUwNTI4XHUwNTJBXHUwNTJDXHUwNTJFXHUwNTMxLVx1MDU1Nlx1MDU4N1x1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTFFMDBcdTFFMDJcdTFFMDRcdTFFMDZcdTFFMDhcdTFFMEFcdTFFMENcdTFFMEVcdTFFMTBcdTFFMTJcdTFFMTRcdTFFMTZcdTFFMThcdTFFMUFcdTFFMUNcdTFFMUVcdTFFMjBcdTFFMjJcdTFFMjRcdTFFMjZcdTFFMjhcdTFFMkFcdTFFMkNcdTFFMkVcdTFFMzBcdTFFMzJcdTFFMzRcdTFFMzZcdTFFMzhcdTFFM0FcdTFFM0NcdTFFM0VcdTFFNDBcdTFFNDJcdTFFNDRcdTFFNDZcdTFFNDhcdTFFNEFcdTFFNENcdTFFNEVcdTFFNTBcdTFFNTJcdTFFNTRcdTFFNTZcdTFFNThcdTFFNUFcdTFFNUNcdTFFNUVcdTFFNjBcdTFFNjJcdTFFNjRcdTFFNjZcdTFFNjhcdTFFNkFcdTFFNkNcdTFFNkVcdTFFNzBcdTFFNzJcdTFFNzRcdTFFNzZcdTFFNzhcdTFFN0FcdTFFN0NcdTFFN0VcdTFFODBcdTFFODJcdTFFODRcdTFFODZcdTFFODhcdTFFOEFcdTFFOENcdTFFOEVcdTFFOTBcdTFFOTJcdTFFOTRcdTFFOTYtXHUxRTlCXHUxRTlFXHUxRUEwXHUxRUEyXHUxRUE0XHUxRUE2XHUxRUE4XHUxRUFBXHUxRUFDXHUxRUFFXHUxRUIwXHUxRUIyXHUxRUI0XHUxRUI2XHUxRUI4XHUxRUJBXHUxRUJDXHUxRUJFXHUxRUMwXHUxRUMyXHUxRUM0XHUxRUM2XHUxRUM4XHUxRUNBXHUxRUNDXHUxRUNFXHUxRUQwXHUxRUQyXHUxRUQ0XHUxRUQ2XHUxRUQ4XHUxRURBXHUxRURDXHUxRURFXHUxRUUwXHUxRUUyXHUxRUU0XHUxRUU2XHUxRUU4XHUxRUVBXHUxRUVDXHUxRUVFXHUxRUYwXHUxRUYyXHUxRUY0XHUxRUY2XHUxRUY4XHUxRUZBXHUxRUZDXHUxRUZFXHUxRjA4LVx1MUYwRlx1MUYxOC1cdTFGMURcdTFGMjgtXHUxRjJGXHUxRjM4LVx1MUYzRlx1MUY0OC1cdTFGNERcdTFGNTBcdTFGNTJcdTFGNTRcdTFGNTZcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjgtXHUxRjZGXHUxRjgwLVx1MUZBRlx1MUZCMi1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDJcdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUyLVx1MUZFNFx1MUZFNi1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjEyNlx1MjEyQVx1MjEyQlx1MjEzMlx1MjE2MC1cdTIxNkZcdTIxODNcdTI0QjYtXHUyNENGXHUyQzAwLVx1MkMyRVx1MkM2MFx1MkM2Mi1cdTJDNjRcdTJDNjdcdTJDNjlcdTJDNkJcdTJDNkQtXHUyQzcwXHUyQzcyXHUyQzc1XHUyQzdFLVx1MkM4MFx1MkM4Mlx1MkM4NFx1MkM4Nlx1MkM4OFx1MkM4QVx1MkM4Q1x1MkM4RVx1MkM5MFx1MkM5Mlx1MkM5NFx1MkM5Nlx1MkM5OFx1MkM5QVx1MkM5Q1x1MkM5RVx1MkNBMFx1MkNBMlx1MkNBNFx1MkNBNlx1MkNBOFx1MkNBQVx1MkNBQ1x1MkNBRVx1MkNCMFx1MkNCMlx1MkNCNFx1MkNCNlx1MkNCOFx1MkNCQVx1MkNCQ1x1MkNCRVx1MkNDMFx1MkNDMlx1MkNDNFx1MkNDNlx1MkNDOFx1MkNDQVx1MkNDQ1x1MkNDRVx1MkNEMFx1MkNEMlx1MkNENFx1MkNENlx1MkNEOFx1MkNEQVx1MkNEQ1x1MkNERVx1MkNFMFx1MkNFMlx1MkNFQlx1MkNFRFx1MkNGMlx1QTY0MFx1QTY0Mlx1QTY0NFx1QTY0Nlx1QTY0OFx1QTY0QVx1QTY0Q1x1QTY0RVx1QTY1MFx1QTY1Mlx1QTY1NFx1QTY1Nlx1QTY1OFx1QTY1QVx1QTY1Q1x1QTY1RVx1QTY2MFx1QTY2Mlx1QTY2NFx1QTY2Nlx1QTY2OFx1QTY2QVx1QTY2Q1x1QTY4MFx1QTY4Mlx1QTY4NFx1QTY4Nlx1QTY4OFx1QTY4QVx1QTY4Q1x1QTY4RVx1QTY5MFx1QTY5Mlx1QTY5NFx1QTY5Nlx1QTY5OFx1QTY5QVx1QTcyMlx1QTcyNFx1QTcyNlx1QTcyOFx1QTcyQVx1QTcyQ1x1QTcyRVx1QTczMlx1QTczNFx1QTczNlx1QTczOFx1QTczQVx1QTczQ1x1QTczRVx1QTc0MFx1QTc0Mlx1QTc0NFx1QTc0Nlx1QTc0OFx1QTc0QVx1QTc0Q1x1QTc0RVx1QTc1MFx1QTc1Mlx1QTc1NFx1QTc1Nlx1QTc1OFx1QTc1QVx1QTc1Q1x1QTc1RVx1QTc2MFx1QTc2Mlx1QTc2NFx1QTc2Nlx1QTc2OFx1QTc2QVx1QTc2Q1x1QTc2RVx1QTc3OVx1QTc3Qlx1QTc3RFx1QTc3RVx1QTc4MFx1QTc4Mlx1QTc4NFx1QTc4Nlx1QTc4Qlx1QTc4RFx1QTc5MFx1QTc5Mlx1QTc5Nlx1QTc5OFx1QTc5QVx1QTc5Q1x1QTc5RVx1QTdBMFx1QTdBMlx1QTdBNFx1QTdBNlx1QTdBOFx1QTdBQS1cdUE3QURcdUE3QjBcdUE3QjFcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkYyMS1cdUZGM0FdfFx1RDgwMVtcdURDMDAtXHVEQzI3XXxcdUQ4MDZbXHVEQ0EwLVx1RENCRl0vZyxvPXtBOiJhIixCOiJiIixDOiJjIixEOiJkIixFOiJlIixGOiJmIixHOiJnIixIOiJoIixJOiJpIixKOiJqIixLOiJrIixMOiJsIixNOiJtIixOOiJuIixPOiJvIixQOiJwIixROiJxIixSOiJyIixTOiJzIixUOiJ0IixVOiJ1IixWOiJ2IixXOiJ3IixYOiJ4IixZOiJ5IixaOiJ6IiwiwrUiOiLOvCIsIsOAIjoiw6AiLCLDgSI6IsOhIiwiw4IiOiLDoiIsIsODIjoiw6MiLCLDhCI6IsOkIiwiw4UiOiLDpSIsIsOGIjoiw6YiLCLDhyI6IsOnIiwiw4giOiLDqCIsIsOJIjoiw6kiLCLDiiI6IsOqIiwiw4siOiLDqyIsIsOMIjoiw6wiLCLDjSI6IsOtIiwiw44iOiLDriIsIsOPIjoiw68iLCLDkCI6IsOwIiwiw5EiOiLDsSIsIsOSIjoiw7IiLCLDkyI6IsOzIiwiw5QiOiLDtCIsIsOVIjoiw7UiLCLDliI6IsO2Iiwiw5giOiLDuCIsIsOZIjoiw7kiLCLDmiI6IsO6Iiwiw5siOiLDuyIsIsOcIjoiw7wiLCLDnSI6IsO9Iiwiw54iOiLDviIsIsSAIjoixIEiLCLEgiI6IsSDIiwixIQiOiLEhSIsIsSGIjoixIciLCLEiCI6IsSJIiwixIoiOiLEiyIsIsSMIjoixI0iLCLEjiI6IsSPIiwixJAiOiLEkSIsIsSSIjoixJMiLCLElCI6IsSVIiwixJYiOiLElyIsIsSYIjoixJkiLCLEmiI6IsSbIiwixJwiOiLEnSIsIsSeIjoixJ8iLCLEoCI6IsShIiwixKIiOiLEoyIsIsSkIjoixKUiLCLEpiI6IsSnIiwixKgiOiLEqSIsIsSqIjoixKsiLCLErCI6IsStIiwixK4iOiLEryIsIsSyIjoixLMiLCLEtCI6IsS1IiwixLYiOiLEtyIsIsS5IjoixLoiLCLEuyI6IsS8IiwixL0iOiLEviIsIsS/IjoixYAiLCLFgSI6IsWCIiwixYMiOiLFhCIsIsWFIjoixYYiLCLFhyI6IsWIIiwixYoiOiLFiyIsIsWMIjoixY0iLCLFjiI6IsWPIiwixZAiOiLFkSIsIsWSIjoixZMiLCLFlCI6IsWVIiwixZYiOiLFlyIsIsWYIjoixZkiLCLFmiI6IsWbIiwixZwiOiLFnSIsIsWeIjoixZ8iLCLFoCI6IsWhIiwixaIiOiLFoyIsIsWkIjoixaUiLCLFpiI6IsWnIiwixagiOiLFqSIsIsWqIjoixasiLCLFrCI6IsWtIiwixa4iOiLFryIsIsWwIjoixbEiLCLFsiI6IsWzIiwixbQiOiLFtSIsIsW2IjoixbciLCLFuCI6IsO/IiwixbkiOiLFuiIsIsW7IjoixbwiLCLFvSI6IsW+Iiwixb8iOiJzIiwixoEiOiLJkyIsIsaCIjoixoMiLCLGhCI6IsaFIiwixoYiOiLJlCIsIsaHIjoixogiLCLGiSI6IsmWIiwixooiOiLJlyIsIsaLIjoixowiLCLGjiI6IsedIiwixo8iOiLJmSIsIsaQIjoiyZsiLCLGkSI6IsaSIiwixpMiOiLJoCIsIsaUIjoiyaMiLCLGliI6IsmpIiwixpciOiLJqCIsIsaYIjoixpkiLCLGnCI6IsmvIiwixp0iOiLJsiIsIsafIjoiybUiLCLGoCI6IsahIiwixqIiOiLGoyIsIsakIjoixqUiLCLGpiI6IsqAIiwixqciOiLGqCIsIsapIjoiyoMiLCLGrCI6IsatIiwixq4iOiLKiCIsIsavIjoixrAiLCLGsSI6IsqKIiwixrIiOiLKiyIsIsazIjoixrQiLCLGtSI6Isa2IiwixrciOiLKkiIsIsa4IjoixrkiLCLGvCI6Isa9Iiwix4QiOiLHhiIsIseFIjoix4YiLCLHhyI6IseJIiwix4giOiLHiSIsIseKIjoix4wiLCLHiyI6IseMIiwix40iOiLHjiIsIsePIjoix5AiLCLHkSI6IseSIiwix5MiOiLHlCIsIseVIjoix5YiLCLHlyI6IseYIiwix5kiOiLHmiIsIsebIjoix5wiLCLHniI6IsefIiwix6AiOiLHoSIsIseiIjoix6MiLCLHpCI6IselIiwix6YiOiLHpyIsIseoIjoix6kiLCLHqiI6IserIiwix6wiOiLHrSIsIseuIjoix68iLCLHsSI6IsezIiwix7IiOiLHsyIsIse0Ijoix7UiLCLHtiI6IsaVIiwix7ciOiLGvyIsIse4Ijoix7kiLCLHuiI6Ise7Iiwix7wiOiLHvSIsIse+Ijoix78iLCLIgCI6IsiBIiwiyIIiOiLIgyIsIsiEIjoiyIUiLCLIhiI6IsiHIiwiyIgiOiLIiSIsIsiKIjoiyIsiLCLIjCI6IsiNIiwiyI4iOiLIjyIsIsiQIjoiyJEiLCLIkiI6IsiTIiwiyJQiOiLIlSIsIsiWIjoiyJciLCLImCI6IsiZIiwiyJoiOiLImyIsIsicIjoiyJ0iLCLIniI6IsifIiwiyKAiOiLGniIsIsiiIjoiyKMiLCLIpCI6IsilIiwiyKYiOiLIpyIsIsioIjoiyKkiLCLIqiI6IsirIiwiyKwiOiLIrSIsIsiuIjoiyK8iLCLIsCI6IsixIiwiyLIiOiLIsyIsIsi6Ijoi4rGlIiwiyLsiOiLIvCIsIsi9IjoixpoiLCLIviI6IuKxpiIsIsmBIjoiyYIiLCLJgyI6IsaAIiwiyYQiOiLKiSIsIsmFIjoiyowiLCLJhiI6IsmHIiwiyYgiOiLJiSIsIsmKIjoiyYsiLCLJjCI6IsmNIiwiyY4iOiLJjyIsIs2FIjoizrkiLCLNsCI6Is2xIiwizbIiOiLNsyIsIs22IjoizbciLCLNvyI6Is+zIiwizoYiOiLOrCIsIs6IIjoizq0iLCLOiSI6Is6uIiwizooiOiLOryIsIs6MIjoiz4wiLCLOjiI6Is+NIiwizo8iOiLPjiIsIs6RIjoizrEiLCLOkiI6Is6yIiwizpMiOiLOsyIsIs6UIjoizrQiLCLOlSI6Is61IiwizpYiOiLOtiIsIs6XIjoizrciLCLOmCI6Is64IiwizpkiOiLOuSIsIs6aIjoizroiLCLOmyI6Is67IiwizpwiOiLOvCIsIs6dIjoizr0iLCLOniI6Is6+Iiwizp8iOiLOvyIsIs6gIjoiz4AiLCLOoSI6Is+BIiwizqMiOiLPgyIsIs6kIjoiz4QiLCLOpSI6Is+FIiwizqYiOiLPhiIsIs6nIjoiz4ciLCLOqCI6Is+IIiwizqkiOiLPiSIsIs6qIjoiz4oiLCLOqyI6Is+LIiwiz4IiOiLPgyIsIs+PIjoiz5ciLCLPkCI6Is6yIiwiz5EiOiLOuCIsIs+VIjoiz4YiLCLPliI6Is+AIiwiz5giOiLPmSIsIs+aIjoiz5siLCLPnCI6Is+dIiwiz54iOiLPnyIsIs+gIjoiz6EiLCLPoiI6Is+jIiwiz6QiOiLPpSIsIs+mIjoiz6ciLCLPqCI6Is+pIiwiz6oiOiLPqyIsIs+sIjoiz60iLCLPriI6Is+vIiwiz7AiOiLOuiIsIs+xIjoiz4EiLCLPtCI6Is64Iiwiz7UiOiLOtSIsIs+3Ijoiz7giLCLPuSI6Is+yIiwiz7oiOiLPuyIsIs+9IjoizbsiLCLPviI6Is28Iiwiz78iOiLNvSIsItCAIjoi0ZAiLCLQgSI6ItGRIiwi0IIiOiLRkiIsItCDIjoi0ZMiLCLQhCI6ItGUIiwi0IUiOiLRlSIsItCGIjoi0ZYiLCLQhyI6ItGXIiwi0IgiOiLRmCIsItCJIjoi0ZkiLCLQiiI6ItGaIiwi0IsiOiLRmyIsItCMIjoi0ZwiLCLQjSI6ItGdIiwi0I4iOiLRniIsItCPIjoi0Z8iLCLQkCI6ItCwIiwi0JEiOiLQsSIsItCSIjoi0LIiLCLQkyI6ItCzIiwi0JQiOiLQtCIsItCVIjoi0LUiLCLQliI6ItC2Iiwi0JciOiLQtyIsItCYIjoi0LgiLCLQmSI6ItC5Iiwi0JoiOiLQuiIsItCbIjoi0LsiLCLQnCI6ItC8Iiwi0J0iOiLQvSIsItCeIjoi0L4iLCLQnyI6ItC/Iiwi0KAiOiLRgCIsItChIjoi0YEiLCLQoiI6ItGCIiwi0KMiOiLRgyIsItCkIjoi0YQiLCLQpSI6ItGFIiwi0KYiOiLRhiIsItCnIjoi0YciLCLQqCI6ItGIIiwi0KkiOiLRiSIsItCqIjoi0YoiLCLQqyI6ItGLIiwi0KwiOiLRjCIsItCtIjoi0Y0iLCLQriI6ItGOIiwi0K8iOiLRjyIsItGgIjoi0aEiLCLRoiI6ItGjIiwi0aQiOiLRpSIsItGmIjoi0aciLCLRqCI6ItGpIiwi0aoiOiLRqyIsItGsIjoi0a0iLCLRriI6ItGvIiwi0bAiOiLRsSIsItGyIjoi0bMiLCLRtCI6ItG1Iiwi0bYiOiLRtyIsItG4Ijoi0bkiLCLRuiI6ItG7Iiwi0bwiOiLRvSIsItG+Ijoi0b8iLCLSgCI6ItKBIiwi0ooiOiLSiyIsItKMIjoi0o0iLCLSjiI6ItKPIiwi0pAiOiLSkSIsItKSIjoi0pMiLCLSlCI6ItKVIiwi0pYiOiLSlyIsItKYIjoi0pkiLCLSmiI6ItKbIiwi0pwiOiLSnSIsItKeIjoi0p8iLCLSoCI6ItKhIiwi0qIiOiLSoyIsItKkIjoi0qUiLCLSpiI6ItKnIiwi0qgiOiLSqSIsItKqIjoi0qsiLCLSrCI6ItKtIiwi0q4iOiLSryIsItKwIjoi0rEiLCLSsiI6ItKzIiwi0rQiOiLStSIsItK2Ijoi0rciLCLSuCI6ItK5Iiwi0roiOiLSuyIsItK8Ijoi0r0iLCLSviI6ItK/Iiwi04AiOiLTjyIsItOBIjoi04IiLCLTgyI6ItOEIiwi04UiOiLThiIsItOHIjoi04giLCLTiSI6ItOKIiwi04siOiLTjCIsItONIjoi044iLCLTkCI6ItORIiwi05IiOiLTkyIsItOUIjoi05UiLCLTliI6ItOXIiwi05giOiLTmSIsItOaIjoi05siLCLTnCI6ItOdIiwi054iOiLTnyIsItOgIjoi06EiLCLToiI6ItOjIiwi06QiOiLTpSIsItOmIjoi06ciLCLTqCI6ItOpIiwi06oiOiLTqyIsItOsIjoi060iLCLTriI6ItOvIiwi07AiOiLTsSIsItOyIjoi07MiLCLTtCI6ItO1Iiwi07YiOiLTtyIsItO4Ijoi07kiLCLTuiI6ItO7Iiwi07wiOiLTvSIsItO+Ijoi078iLCLUgCI6ItSBIiwi1IIiOiLUgyIsItSEIjoi1IUiLCLUhiI6ItSHIiwi1IgiOiLUiSIsItSKIjoi1IsiLCLUjCI6ItSNIiwi1I4iOiLUjyIsItSQIjoi1JEiLCLUkiI6ItSTIiwi1JQiOiLUlSIsItSWIjoi1JciLCLUmCI6ItSZIiwi1JoiOiLUmyIsItScIjoi1J0iLCLUniI6ItSfIiwi1KAiOiLUoSIsItSiIjoi1KMiLCLUpCI6ItSlIiwi1KYiOiLUpyIsItSoIjoi1KkiLCLUqiI6ItSrIiwi1KwiOiLUrSIsItSuIjoi1K8iLCLUsSI6ItWhIiwi1LIiOiLVoiIsItSzIjoi1aMiLCLUtCI6ItWkIiwi1LUiOiLVpSIsItS2Ijoi1aYiLCLUtyI6ItWnIiwi1LgiOiLVqCIsItS5Ijoi1akiLCLUuiI6ItWqIiwi1LsiOiLVqyIsItS8Ijoi1awiLCLUvSI6ItWtIiwi1L4iOiLVriIsItS/Ijoi1a8iLCLVgCI6ItWwIiwi1YEiOiLVsSIsItWCIjoi1bIiLCLVgyI6ItWzIiwi1YQiOiLVtCIsItWFIjoi1bUiLCLVhiI6ItW2Iiwi1YciOiLVtyIsItWIIjoi1bgiLCLViSI6ItW5Iiwi1YoiOiLVuiIsItWLIjoi1bsiLCLVjCI6ItW8Iiwi1Y0iOiLVvSIsItWOIjoi1b4iLCLVjyI6ItW/Iiwi1ZAiOiLWgCIsItWRIjoi1oEiLCLVkiI6ItaCIiwi1ZMiOiLWgyIsItWUIjoi1oQiLCLVlSI6ItaFIiwi1ZYiOiLWhiIsIuGCoCI6IuK0gCIsIuGCoSI6IuK0gSIsIuGCoiI6IuK0giIsIuGCoyI6IuK0gyIsIuGCpCI6IuK0hCIsIuGCpSI6IuK0hSIsIuGCpiI6IuK0hiIsIuGCpyI6IuK0hyIsIuGCqCI6IuK0iCIsIuGCqSI6IuK0iSIsIuGCqiI6IuK0iiIsIuGCqyI6IuK0iyIsIuGCrCI6IuK0jCIsIuGCrSI6IuK0jSIsIuGCriI6IuK0jiIsIuGCryI6IuK0jyIsIuGCsCI6IuK0kCIsIuGCsSI6IuK0kSIsIuGCsiI6IuK0kiIsIuGCsyI6IuK0kyIsIuGCtCI6IuK0lCIsIuGCtSI6IuK0lSIsIuGCtiI6IuK0liIsIuGCtyI6IuK0lyIsIuGCuCI6IuK0mCIsIuGCuSI6IuK0mSIsIuGCuiI6IuK0miIsIuGCuyI6IuK0myIsIuGCvCI6IuK0nCIsIuGCvSI6IuK0nSIsIuGCviI6IuK0niIsIuGCvyI6IuK0nyIsIuGDgCI6IuK0oCIsIuGDgSI6IuK0oSIsIuGDgiI6IuK0oiIsIuGDgyI6IuK0oyIsIuGDhCI6IuK0pCIsIuGDhSI6IuK0pSIsIuGDhyI6IuK0pyIsIuGDjSI6IuK0rSIsIuG4gCI6IuG4gSIsIuG4giI6IuG4gyIsIuG4hCI6IuG4hSIsIuG4hiI6IuG4hyIsIuG4iCI6IuG4iSIsIuG4iiI6IuG4iyIsIuG4jCI6IuG4jSIsIuG4jiI6IuG4jyIsIuG4kCI6IuG4kSIsIuG4kiI6IuG4kyIsIuG4lCI6IuG4lSIsIuG4liI6IuG4lyIsIuG4mCI6IuG4mSIsIuG4miI6IuG4myIsIuG4nCI6IuG4nSIsIuG4niI6IuG4nyIsIuG4oCI6IuG4oSIsIuG4oiI6IuG4oyIsIuG4pCI6IuG4pSIsIuG4piI6IuG4pyIsIuG4qCI6IuG4qSIsIuG4qiI6IuG4qyIsIuG4rCI6IuG4rSIsIuG4riI6IuG4ryIsIuG4sCI6IuG4sSIsIuG4siI6IuG4syIsIuG4tCI6IuG4tSIsIuG4tiI6IuG4tyIsIuG4uCI6IuG4uSIsIuG4uiI6IuG4uyIsIuG4vCI6IuG4vSIsIuG4viI6IuG4vyIsIuG5gCI6IuG5gSIsIuG5giI6IuG5gyIsIuG5hCI6IuG5hSIsIuG5hiI6IuG5hyIsIuG5iCI6IuG5iSIsIuG5iiI6IuG5iyIsIuG5jCI6IuG5jSIsIuG5jiI6IuG5jyIsIuG5kCI6IuG5kSIsIuG5kiI6IuG5kyIsIuG5lCI6IuG5lSIsIuG5liI6IuG5lyIsIuG5mCI6IuG5mSIsIuG5miI6IuG5myIsIuG5nCI6IuG5nSIsIuG5niI6IuG5nyIsIuG5oCI6IuG5oSIsIuG5oiI6IuG5oyIsIuG5pCI6IuG5pSIsIuG5piI6IuG5pyIsIuG5qCI6IuG5qSIsIuG5qiI6IuG5qyIsIuG5rCI6IuG5rSIsIuG5riI6IuG5ryIsIuG5sCI6IuG5sSIsIuG5siI6IuG5syIsIuG5tCI6IuG5tSIsIuG5tiI6IuG5tyIsIuG5uCI6IuG5uSIsIuG5uiI6IuG5uyIsIuG5vCI6IuG5vSIsIuG5viI6IuG5vyIsIuG6gCI6IuG6gSIsIuG6giI6IuG6gyIsIuG6hCI6IuG6hSIsIuG6hiI6IuG6hyIsIuG6iCI6IuG6iSIsIuG6iiI6IuG6iyIsIuG6jCI6IuG6jSIsIuG6jiI6IuG6jyIsIuG6kCI6IuG6kSIsIuG6kiI6IuG6kyIsIuG6lCI6IuG6lSIsIuG6myI6IuG5oSIsIuG6oCI6IuG6oSIsIuG6oiI6IuG6oyIsIuG6pCI6IuG6pSIsIuG6piI6IuG6pyIsIuG6qCI6IuG6qSIsIuG6qiI6IuG6qyIsIuG6rCI6IuG6rSIsIuG6riI6IuG6ryIsIuG6sCI6IuG6sSIsIuG6siI6IuG6syIsIuG6tCI6IuG6tSIsIuG6tiI6IuG6tyIsIuG6uCI6IuG6uSIsIuG6uiI6IuG6uyIsIuG6vCI6IuG6vSIsIuG6viI6IuG6vyIsIuG7gCI6IuG7gSIsIuG7giI6IuG7gyIsIuG7hCI6IuG7hSIsIuG7hiI6IuG7hyIsIuG7iCI6IuG7iSIsIuG7iiI6IuG7iyIsIuG7jCI6IuG7jSIsIuG7jiI6IuG7jyIsIuG7kCI6IuG7kSIsIuG7kiI6IuG7kyIsIuG7lCI6IuG7lSIsIuG7liI6IuG7lyIsIuG7mCI6IuG7mSIsIuG7miI6IuG7myIsIuG7nCI6IuG7nSIsIuG7niI6IuG7nyIsIuG7oCI6IuG7oSIsIuG7oiI6IuG7oyIsIuG7pCI6IuG7pSIsIuG7piI6IuG7pyIsIuG7qCI6IuG7qSIsIuG7qiI6IuG7qyIsIuG7rCI6IuG7rSIsIuG7riI6IuG7ryIsIuG7sCI6IuG7sSIsIuG7siI6IuG7syIsIuG7tCI6IuG7tSIsIuG7tiI6IuG7tyIsIuG7uCI6IuG7uSIsIuG7uiI6IuG7uyIsIuG7vCI6IuG7vSIsIuG7viI6IuG7vyIsIuG8iCI6IuG8gCIsIuG8iSI6IuG8gSIsIuG8iiI6IuG8giIsIuG8iyI6IuG8gyIsIuG8jCI6IuG8hCIsIuG8jSI6IuG8hSIsIuG8jiI6IuG8hiIsIuG8jyI6IuG8hyIsIuG8mCI6IuG8kCIsIuG8mSI6IuG8kSIsIuG8miI6IuG8kiIsIuG8myI6IuG8kyIsIuG8nCI6IuG8lCIsIuG8nSI6IuG8lSIsIuG8qCI6IuG8oCIsIuG8qSI6IuG8oSIsIuG8qiI6IuG8oiIsIuG8qyI6IuG8oyIsIuG8rCI6IuG8pCIsIuG8rSI6IuG8pSIsIuG8riI6IuG8piIsIuG8ryI6IuG8pyIsIuG8uCI6IuG8sCIsIuG8uSI6IuG8sSIsIuG8uiI6IuG8siIsIuG8uyI6IuG8syIsIuG8vCI6IuG8tCIsIuG8vSI6IuG8tSIsIuG8viI6IuG8tiIsIuG8vyI6IuG8tyIsIuG9iCI6IuG9gCIsIuG9iSI6IuG9gSIsIuG9iiI6IuG9giIsIuG9iyI6IuG9gyIsIuG9jCI6IuG9hCIsIuG9jSI6IuG9hSIsIuG9mSI6IuG9kSIsIuG9myI6IuG9kyIsIuG9nSI6IuG9lSIsIuG9nyI6IuG9lyIsIuG9qCI6IuG9oCIsIuG9qSI6IuG9oSIsIuG9qiI6IuG9oiIsIuG9qyI6IuG9oyIsIuG9rCI6IuG9pCIsIuG9rSI6IuG9pSIsIuG9riI6IuG9piIsIuG9ryI6IuG9pyIsIuG+uCI6IuG+sCIsIuG+uSI6IuG+sSIsIuG+uiI6IuG9sCIsIuG+uyI6IuG9sSIsIuG+viI6Is65Iiwi4b+IIjoi4b2yIiwi4b+JIjoi4b2zIiwi4b+KIjoi4b20Iiwi4b+LIjoi4b21Iiwi4b+YIjoi4b+QIiwi4b+ZIjoi4b+RIiwi4b+aIjoi4b22Iiwi4b+bIjoi4b23Iiwi4b+oIjoi4b+gIiwi4b+pIjoi4b+hIiwi4b+qIjoi4b26Iiwi4b+rIjoi4b27Iiwi4b+sIjoi4b+lIiwi4b+4Ijoi4b24Iiwi4b+5Ijoi4b25Iiwi4b+6Ijoi4b28Iiwi4b+7Ijoi4b29Iiwi4oSmIjoiz4kiLCLihKoiOiJrIiwi4oSrIjoiw6UiLCLihLIiOiLihY4iLCLihaAiOiLihbAiLCLihaEiOiLihbEiLCLihaIiOiLihbIiLCLihaMiOiLihbMiLCLihaQiOiLihbQiLCLihaUiOiLihbUiLCLihaYiOiLihbYiLCLihaciOiLihbciLCLihagiOiLihbgiLCLihakiOiLihbkiLCLihaoiOiLihboiLCLihasiOiLihbsiLCLihawiOiLihbwiLCLiha0iOiLihb0iLCLiha4iOiLihb4iLCLiha8iOiLihb8iLCLihoMiOiLihoQiLCLikrYiOiLik5AiLCLikrciOiLik5EiLCLikrgiOiLik5IiLCLikrkiOiLik5MiLCLikroiOiLik5QiLCLikrsiOiLik5UiLCLikrwiOiLik5YiLCLikr0iOiLik5ciLCLikr4iOiLik5giLCLikr8iOiLik5kiLCLik4AiOiLik5oiLCLik4EiOiLik5siLCLik4IiOiLik5wiLCLik4MiOiLik50iLCLik4QiOiLik54iLCLik4UiOiLik58iLCLik4YiOiLik6AiLCLik4ciOiLik6EiLCLik4giOiLik6IiLCLik4kiOiLik6MiLCLik4oiOiLik6QiLCLik4siOiLik6UiLCLik4wiOiLik6YiLCLik40iOiLik6ciLCLik44iOiLik6giLCLik48iOiLik6kiLCLisIAiOiLisLAiLCLisIEiOiLisLEiLCLisIIiOiLisLIiLCLisIMiOiLisLMiLCLisIQiOiLisLQiLCLisIUiOiLisLUiLCLisIYiOiLisLYiLCLisIciOiLisLciLCLisIgiOiLisLgiLCLisIkiOiLisLkiLCLisIoiOiLisLoiLCLisIsiOiLisLsiLCLisIwiOiLisLwiLCLisI0iOiLisL0iLCLisI4iOiLisL4iLCLisI8iOiLisL8iLCLisJAiOiLisYAiLCLisJEiOiLisYEiLCLisJIiOiLisYIiLCLisJMiOiLisYMiLCLisJQiOiLisYQiLCLisJUiOiLisYUiLCLisJYiOiLisYYiLCLisJciOiLisYciLCLisJgiOiLisYgiLCLisJkiOiLisYkiLCLisJoiOiLisYoiLCLisJsiOiLisYsiLCLisJwiOiLisYwiLCLisJ0iOiLisY0iLCLisJ4iOiLisY4iLCLisJ8iOiLisY8iLCLisKAiOiLisZAiLCLisKEiOiLisZEiLCLisKIiOiLisZIiLCLisKMiOiLisZMiLCLisKQiOiLisZQiLCLisKUiOiLisZUiLCLisKYiOiLisZYiLCLisKciOiLisZciLCLisKgiOiLisZgiLCLisKkiOiLisZkiLCLisKoiOiLisZoiLCLisKsiOiLisZsiLCLisKwiOiLisZwiLCLisK0iOiLisZ0iLCLisK4iOiLisZ4iLCLisaAiOiLisaEiLCLisaIiOiLJqyIsIuKxoyI6IuG1vSIsIuKxpCI6Ism9Iiwi4rGnIjoi4rGoIiwi4rGpIjoi4rGqIiwi4rGrIjoi4rGsIiwi4rGtIjoiyZEiLCLisa4iOiLJsSIsIuKxryI6IsmQIiwi4rGwIjoiyZIiLCLisbIiOiLisbMiLCLisbUiOiLisbYiLCLisb4iOiLIvyIsIuKxvyI6IsmAIiwi4rKAIjoi4rKBIiwi4rKCIjoi4rKDIiwi4rKEIjoi4rKFIiwi4rKGIjoi4rKHIiwi4rKIIjoi4rKJIiwi4rKKIjoi4rKLIiwi4rKMIjoi4rKNIiwi4rKOIjoi4rKPIiwi4rKQIjoi4rKRIiwi4rKSIjoi4rKTIiwi4rKUIjoi4rKVIiwi4rKWIjoi4rKXIiwi4rKYIjoi4rKZIiwi4rKaIjoi4rKbIiwi4rKcIjoi4rKdIiwi4rKeIjoi4rKfIiwi4rKgIjoi4rKhIiwi4rKiIjoi4rKjIiwi4rKkIjoi4rKlIiwi4rKmIjoi4rKnIiwi4rKoIjoi4rKpIiwi4rKqIjoi4rKrIiwi4rKsIjoi4rKtIiwi4rKuIjoi4rKvIiwi4rKwIjoi4rKxIiwi4rKyIjoi4rKzIiwi4rK0Ijoi4rK1Iiwi4rK2Ijoi4rK3Iiwi4rK4Ijoi4rK5Iiwi4rK6Ijoi4rK7Iiwi4rK8Ijoi4rK9Iiwi4rK+Ijoi4rK/Iiwi4rOAIjoi4rOBIiwi4rOCIjoi4rODIiwi4rOEIjoi4rOFIiwi4rOGIjoi4rOHIiwi4rOIIjoi4rOJIiwi4rOKIjoi4rOLIiwi4rOMIjoi4rONIiwi4rOOIjoi4rOPIiwi4rOQIjoi4rORIiwi4rOSIjoi4rOTIiwi4rOUIjoi4rOVIiwi4rOWIjoi4rOXIiwi4rOYIjoi4rOZIiwi4rOaIjoi4rObIiwi4rOcIjoi4rOdIiwi4rOeIjoi4rOfIiwi4rOgIjoi4rOhIiwi4rOiIjoi4rOjIiwi4rOrIjoi4rOsIiwi4rOtIjoi4rOuIiwi4rOyIjoi4rOzIiwi6pmAIjoi6pmBIiwi6pmCIjoi6pmDIiwi6pmEIjoi6pmFIiwi6pmGIjoi6pmHIiwi6pmIIjoi6pmJIiwi6pmKIjoi6pmLIiwi6pmMIjoi6pmNIiwi6pmOIjoi6pmPIiwi6pmQIjoi6pmRIiwi6pmSIjoi6pmTIiwi6pmUIjoi6pmVIiwi6pmWIjoi6pmXIiwi6pmYIjoi6pmZIiwi6pmaIjoi6pmbIiwi6pmcIjoi6pmdIiwi6pmeIjoi6pmfIiwi6pmgIjoi6pmhIiwi6pmiIjoi6pmjIiwi6pmkIjoi6pmlIiwi6pmmIjoi6pmnIiwi6pmoIjoi6pmpIiwi6pmqIjoi6pmrIiwi6pmsIjoi6pmtIiwi6pqAIjoi6pqBIiwi6pqCIjoi6pqDIiwi6pqEIjoi6pqFIiwi6pqGIjoi6pqHIiwi6pqIIjoi6pqJIiwi6pqKIjoi6pqLIiwi6pqMIjoi6pqNIiwi6pqOIjoi6pqPIiwi6pqQIjoi6pqRIiwi6pqSIjoi6pqTIiwi6pqUIjoi6pqVIiwi6pqWIjoi6pqXIiwi6pqYIjoi6pqZIiwi6pqaIjoi6pqbIiwi6pyiIjoi6pyjIiwi6pykIjoi6pylIiwi6pymIjoi6pynIiwi6pyoIjoi6pypIiwi6pyqIjoi6pyrIiwi6pysIjoi6pytIiwi6pyuIjoi6pyvIiwi6pyyIjoi6pyzIiwi6py0Ijoi6py1Iiwi6py2Ijoi6py3Iiwi6py4Ijoi6py5Iiwi6py6Ijoi6py7Iiwi6py8Ijoi6py9Iiwi6py+Ijoi6py/Iiwi6p2AIjoi6p2BIiwi6p2CIjoi6p2DIiwi6p2EIjoi6p2FIiwi6p2GIjoi6p2HIiwi6p2IIjoi6p2JIiwi6p2KIjoi6p2LIiwi6p2MIjoi6p2NIiwi6p2OIjoi6p2PIiwi6p2QIjoi6p2RIiwi6p2SIjoi6p2TIiwi6p2UIjoi6p2VIiwi6p2WIjoi6p2XIiwi6p2YIjoi6p2ZIiwi6p2aIjoi6p2bIiwi6p2cIjoi6p2dIiwi6p2eIjoi6p2fIiwi6p2gIjoi6p2hIiwi6p2iIjoi6p2jIiwi6p2kIjoi6p2lIiwi6p2mIjoi6p2nIiwi6p2oIjoi6p2pIiwi6p2qIjoi6p2rIiwi6p2sIjoi6p2tIiwi6p2uIjoi6p2vIiwi6p25Ijoi6p26Iiwi6p27Ijoi6p28Iiwi6p29Ijoi4bW5Iiwi6p2+Ijoi6p2/Iiwi6p6AIjoi6p6BIiwi6p6CIjoi6p6DIiwi6p6EIjoi6p6FIiwi6p6GIjoi6p6HIiwi6p6LIjoi6p6MIiwi6p6NIjoiyaUiLCLqnpAiOiLqnpEiLCLqnpIiOiLqnpMiLCLqnpYiOiLqnpciLCLqnpgiOiLqnpkiLCLqnpoiOiLqnpsiLCLqnpwiOiLqnp0iLCLqnp4iOiLqnp8iLCLqnqAiOiLqnqEiLCLqnqIiOiLqnqMiLCLqnqQiOiLqnqUiLCLqnqYiOiLqnqciLCLqnqgiOiLqnqkiLCLqnqoiOiLJpiIsIuqeqyI6IsmcIiwi6p6sIjoiyaEiLCLqnq0iOiLJrCIsIuqesCI6IsqeIiwi6p6xIjoiyociLCLvvKEiOiLvvYEiLCLvvKIiOiLvvYIiLCLvvKMiOiLvvYMiLCLvvKQiOiLvvYQiLCLvvKUiOiLvvYUiLCLvvKYiOiLvvYYiLCLvvKciOiLvvYciLCLvvKgiOiLvvYgiLCLvvKkiOiLvvYkiLCLvvKoiOiLvvYoiLCLvvKsiOiLvvYsiLCLvvKwiOiLvvYwiLCLvvK0iOiLvvY0iLCLvvK4iOiLvvY4iLCLvvK8iOiLvvY8iLCLvvLAiOiLvvZAiLCLvvLEiOiLvvZEiLCLvvLIiOiLvvZIiLCLvvLMiOiLvvZMiLCLvvLQiOiLvvZQiLCLvvLUiOiLvvZUiLCLvvLYiOiLvvZYiLCLvvLciOiLvvZciLCLvvLgiOiLvvZgiLCLvvLkiOiLvvZkiLCLvvLoiOiLvvZoiLCLwkJCAIjoi8JCQqCIsIvCQkIEiOiLwkJCpIiwi8JCQgiI6IvCQkKoiLCLwkJCDIjoi8JCQqyIsIvCQkIQiOiLwkJCsIiwi8JCQhSI6IvCQkK0iLCLwkJCGIjoi8JCQriIsIvCQkIciOiLwkJCvIiwi8JCQiCI6IvCQkLAiLCLwkJCJIjoi8JCQsSIsIvCQkIoiOiLwkJCyIiwi8JCQiyI6IvCQkLMiLCLwkJCMIjoi8JCQtCIsIvCQkI0iOiLwkJC1Iiwi8JCQjiI6IvCQkLYiLCLwkJCPIjoi8JCQtyIsIvCQkJAiOiLwkJC4Iiwi8JCQkSI6IvCQkLkiLCLwkJCSIjoi8JCQuiIsIvCQkJMiOiLwkJC7Iiwi8JCQlCI6IvCQkLwiLCLwkJCVIjoi8JCQvSIsIvCQkJYiOiLwkJC+Iiwi8JCQlyI6IvCQkL8iLCLwkJCYIjoi8JCRgCIsIvCQkJkiOiLwkJGBIiwi8JCQmiI6IvCQkYIiLCLwkJCbIjoi8JCRgyIsIvCQkJwiOiLwkJGEIiwi8JCQnSI6IvCQkYUiLCLwkJCeIjoi8JCRhiIsIvCQkJ8iOiLwkJGHIiwi8JCQoCI6IvCQkYgiLCLwkJChIjoi8JCRiSIsIvCQkKIiOiLwkJGKIiwi8JCQoyI6IvCQkYsiLCLwkJCkIjoi8JCRjCIsIvCQkKUiOiLwkJGNIiwi8JCQpiI6IvCQkY4iLCLwkJCnIjoi8JCRjyIsIvCRoqAiOiLwkaOAIiwi8JGioSI6IvCRo4EiLCLwkaKiIjoi8JGjgiIsIvCRoqMiOiLwkaODIiwi8JGipCI6IvCRo4QiLCLwkaKlIjoi8JGjhSIsIvCRoqYiOiLwkaOGIiwi8JGipyI6IvCRo4ciLCLwkaKoIjoi8JGjiCIsIvCRoqkiOiLwkaOJIiwi8JGiqiI6IvCRo4oiLCLwkaKrIjoi8JGjiyIsIvCRoqwiOiLwkaOMIiwi8JGirSI6IvCRo40iLCLwkaKuIjoi8JGjjiIsIvCRoq8iOiLwkaOPIiwi8JGisCI6IvCRo5AiLCLwkaKxIjoi8JGjkSIsIvCRorIiOiLwkaOSIiwi8JGisyI6IvCRo5MiLCLwkaK0Ijoi8JGjlCIsIvCRorUiOiLwkaOVIiwi8JGitiI6IvCRo5YiLCLwkaK3Ijoi8JGjlyIsIvCRorgiOiLwkaOYIiwi8JGiuSI6IvCRo5kiLCLwkaK6Ijoi8JGjmiIsIvCRorsiOiLwkaObIiwi8JGivCI6IvCRo5wiLCLwkaK9Ijoi8JGjnSIsIvCRor4iOiLwkaOeIiwi8JGivyI6IvCRo58iLCLDnyI6InNzIiwixLAiOiJpzIciLCLFiSI6Isq8biIsIsewIjoiasyMIiwizpAiOiLOucyIzIEiLCLOsCI6Is+FzIjMgSIsItaHIjoi1aXWgiIsIuG6liI6ImjMsSIsIuG6lyI6InTMiCIsIuG6mCI6InfMiiIsIuG6mSI6InnMiiIsIuG6miI6ImHKviIsIuG6niI6InNzIiwi4b2QIjoiz4XMkyIsIuG9kiI6Is+FzJPMgCIsIuG9lCI6Is+FzJPMgSIsIuG9liI6Is+FzJPNgiIsIuG+gCI6IuG8gM65Iiwi4b6BIjoi4byBzrkiLCLhvoIiOiLhvILOuSIsIuG+gyI6IuG8g865Iiwi4b6EIjoi4byEzrkiLCLhvoUiOiLhvIXOuSIsIuG+hiI6IuG8hs65Iiwi4b6HIjoi4byHzrkiLCLhvogiOiLhvIDOuSIsIuG+iSI6IuG8gc65Iiwi4b6KIjoi4byCzrkiLCLhvosiOiLhvIPOuSIsIuG+jCI6IuG8hM65Iiwi4b6NIjoi4byFzrkiLCLhvo4iOiLhvIbOuSIsIuG+jyI6IuG8h865Iiwi4b6QIjoi4bygzrkiLCLhvpEiOiLhvKHOuSIsIuG+kiI6IuG8os65Iiwi4b6TIjoi4byjzrkiLCLhvpQiOiLhvKTOuSIsIuG+lSI6IuG8pc65Iiwi4b6WIjoi4bymzrkiLCLhvpciOiLhvKfOuSIsIuG+mCI6IuG8oM65Iiwi4b6ZIjoi4byhzrkiLCLhvpoiOiLhvKLOuSIsIuG+myI6IuG8o865Iiwi4b6cIjoi4bykzrkiLCLhvp0iOiLhvKXOuSIsIuG+niI6IuG8ps65Iiwi4b6fIjoi4bynzrkiLCLhvqAiOiLhvaDOuSIsIuG+oSI6IuG9oc65Iiwi4b6iIjoi4b2izrkiLCLhvqMiOiLhvaPOuSIsIuG+pCI6IuG9pM65Iiwi4b6lIjoi4b2lzrkiLCLhvqYiOiLhvabOuSIsIuG+pyI6IuG9p865Iiwi4b6oIjoi4b2gzrkiLCLhvqkiOiLhvaHOuSIsIuG+qiI6IuG9os65Iiwi4b6rIjoi4b2jzrkiLCLhvqwiOiLhvaTOuSIsIuG+rSI6IuG9pc65Iiwi4b6uIjoi4b2mzrkiLCLhvq8iOiLhvafOuSIsIuG+siI6IuG9sM65Iiwi4b6zIjoizrHOuSIsIuG+tCI6Is6szrkiLCLhvrYiOiLOsc2CIiwi4b63IjoizrHNgs65Iiwi4b68IjoizrHOuSIsIuG/giI6IuG9tM65Iiwi4b+DIjoizrfOuSIsIuG/hCI6Is6uzrkiLCLhv4YiOiLOt82CIiwi4b+HIjoizrfNgs65Iiwi4b+MIjoizrfOuSIsIuG/kiI6Is65zIjMgCIsIuG/kyI6Is65zIjMgSIsIuG/liI6Is65zYIiLCLhv5ciOiLOucyIzYIiLCLhv6IiOiLPhcyIzIAiLCLhv6MiOiLPhcyIzIEiLCLhv6QiOiLPgcyTIiwi4b+mIjoiz4XNgiIsIuG/pyI6Is+FzIjNgiIsIuG/siI6IuG9vM65Iiwi4b+zIjoiz4nOuSIsIuG/tCI6Is+OzrkiLCLhv7YiOiLPic2CIiwi4b+3Ijoiz4nNgs65Iiwi4b+8Ijoiz4nOuSIsIu+sgCI6ImZmIiwi76yBIjoiZmkiLCLvrIIiOiJmbCIsIu+sgyI6ImZmaSIsIu+shCI6ImZmbCIsIu+shSI6InN0Iiwi76yGIjoic3QiLCLvrJMiOiLVtNW2Iiwi76yUIjoi1bTVpSIsIu+slSI6ItW01asiLCLvrJYiOiLVvtW2Iiwi76yXIjoi1bTVrSJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgxLGUubGVuZ3RoLTEpLnRyaW0oKS5yZXBsYWNlKHIsZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV18fCIgIn0pfX0sIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL3JlbmRlci9odG1sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2lmKCEodGhpcy5kaXNhYmxlVGFncz4wKSl7aWYodGhpcy5idWZmZXIrPSI8IitlLHQmJnQubGVuZ3RoPjApZm9yKHZhciByLG89MDt2b2lkIDAhPT0ocj10W29dKTspdGhpcy5idWZmZXIrPSIgIityWzBdKyc9IicrclsxXSsnIicsbysrO24mJih0aGlzLmJ1ZmZlcis9IiAvIiksdGhpcy5idWZmZXIrPSI+Iix0aGlzLmxhc3RPdXQ9Ij4ifX1mdW5jdGlvbiBvKGUpe2U9ZXx8e30sZS5zb2Z0YnJlYWs9ZS5zb2Z0YnJlYWt8fCJcbiIsdGhpcy5kaXNhYmxlVGFncz0wLHRoaXMubGFzdE91dD0iXG4iLHRoaXMub3B0aW9ucz1lfWZ1bmN0aW9uIHMoZSl7dGhpcy5vdXQoZS5saXRlcmFsKX1mdW5jdGlvbiBpKCl7dGhpcy5saXQodGhpcy5vcHRpb25zLnNvZnRicmVhayl9ZnVuY3Rpb24gYSgpe3RoaXMudGFnKCJiciIsW10sITApLHRoaXMuY3IoKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49dGhpcy5hdHRycyhlKTt0Pyh0aGlzLm9wdGlvbnMuc2FmZSYmeChlLmRlc3RpbmF0aW9uKXx8bi5wdXNoKFsiaHJlZiIsdGhpcy5lc2MoZS5kZXN0aW5hdGlvbiwhMCldKSxlLnRpdGxlJiZuLnB1c2goWyJ0aXRsZSIsdGhpcy5lc2MoZS50aXRsZSwhMCldKSx0aGlzLnRhZygiYSIsbikpOnRoaXMudGFnKCIvYSIpfWZ1bmN0aW9uIHUoZSx0KXt0PygwPT09dGhpcy5kaXNhYmxlVGFncyYmKHRoaXMub3B0aW9ucy5zYWZlJiZ4KGUuZGVzdGluYXRpb24pP3RoaXMubGl0KCc8aW1nIHNyYz0iIiBhbHQ9IicpOnRoaXMubGl0KCc8aW1nIHNyYz0iJyt0aGlzLmVzYyhlLmRlc3RpbmF0aW9uLCEwKSsnIiBhbHQ9IicpKSx0aGlzLmRpc2FibGVUYWdzKz0xKToodGhpcy5kaXNhYmxlVGFncy09MSwwPT09dGhpcy5kaXNhYmxlVGFncyYmKGUudGl0bGUmJnRoaXMubGl0KCciIHRpdGxlPSInK3RoaXMuZXNjKGUudGl0bGUsITApKSx0aGlzLmxpdCgnIiAvPicpKSl9ZnVuY3Rpb24gYyhlLHQpe3RoaXMudGFnKHQ/ImVtIjoiL2VtIil9ZnVuY3Rpb24gZChlLHQpe3RoaXMudGFnKHQ/InN0cm9uZyI6Ii9zdHJvbmciKX1mdW5jdGlvbiBfKGUsdCl7dmFyIG49ZS5wYXJlbnQucGFyZW50LHI9dGhpcy5hdHRycyhlKTtudWxsIT09biYmImxpc3QiPT09bi50eXBlJiZuLmxpc3RUaWdodHx8KHQ/KHRoaXMuY3IoKSx0aGlzLnRhZygicCIscikpOih0aGlzLnRhZygiL3AiKSx0aGlzLmNyKCkpKX1mdW5jdGlvbiBwKGUsdCl7dmFyIG49ImgiK2UubGV2ZWwscj10aGlzLmF0dHJzKGUpO3Q/KHRoaXMuY3IoKSx0aGlzLnRhZyhuLHIpKToodGhpcy50YWcoIi8iK24pLHRoaXMuY3IoKSl9ZnVuY3Rpb24gZihlKXt0aGlzLnRhZygiY29kZSIpLHRoaXMub3V0KGUubGl0ZXJhbCksdGhpcy50YWcoIi9jb2RlIil9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmluZm8/ZS5pbmZvLnNwbGl0KC9ccysvKTpbXSxuPXRoaXMuYXR0cnMoZSk7dC5sZW5ndGg+MCYmdFswXS5sZW5ndGg+MCYmbi5wdXNoKFsiY2xhc3MiLCJsYW5ndWFnZS0iK3RoaXMuZXNjKHRbMF0sITApXSksdGhpcy5jcigpLHRoaXMudGFnKCJwcmUiKSx0aGlzLnRhZygiY29kZSIsbiksdGhpcy5vdXQoZS5saXRlcmFsKSx0aGlzLnRhZygiL2NvZGUiKSx0aGlzLnRhZygiL3ByZSIpLHRoaXMuY3IoKX1mdW5jdGlvbiBoKGUpe3ZhciB0PXRoaXMuYXR0cnMoZSk7dGhpcy5jcigpLHRoaXMudGFnKCJociIsdCwhMCksdGhpcy5jcigpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbj10aGlzLmF0dHJzKGUpO3Q/KHRoaXMuY3IoKSx0aGlzLnRhZygiYmxvY2txdW90ZSIsbiksdGhpcy5jcigpKToodGhpcy5jcigpLHRoaXMudGFnKCIvYmxvY2txdW90ZSIpLHRoaXMuY3IoKSl9ZnVuY3Rpb24gYihlLHQpe3ZhciBuPSJidWxsZXQiPT09ZS5saXN0VHlwZT8idWwiOiJvbCIscj10aGlzLmF0dHJzKGUpO2lmKHQpe3ZhciBvPWUubGlzdFN0YXJ0O251bGwhPT1vJiYxIT09byYmci5wdXNoKFsic3RhcnQiLG8udG9TdHJpbmcoKV0pLHRoaXMuY3IoKSx0aGlzLnRhZyhuLHIpLHRoaXMuY3IoKX1lbHNlIHRoaXMuY3IoKSx0aGlzLnRhZygiLyIrbiksdGhpcy5jcigpfWZ1bmN0aW9uIEUoZSx0KXt2YXIgbj10aGlzLmF0dHJzKGUpO3Q/dGhpcy50YWcoImxpIixuKToodGhpcy50YWcoIi9saSIpLHRoaXMuY3IoKSl9ZnVuY3Rpb24geShlKXt0aGlzLm9wdGlvbnMuc2FmZT90aGlzLmxpdCgiXHgzYyEtLSByYXcgSFRNTCBvbWl0dGVkIC0tXHgzZSIpOnRoaXMubGl0KGUubGl0ZXJhbCl9ZnVuY3Rpb24gdihlKXt0aGlzLmNyKCksdGhpcy5vcHRpb25zLnNhZmU/dGhpcy5saXQoIlx4M2MhLS0gcmF3IEhUTUwgb21pdHRlZCAtLVx4M2UiKTp0aGlzLmxpdChlLmxpdGVyYWwpLHRoaXMuY3IoKX1mdW5jdGlvbiBUKGUsdCl7dCYmZS5vbkVudGVyP3RoaXMubGl0KGUub25FbnRlcik6IXQmJmUub25FeGl0JiZ0aGlzLmxpdChlLm9uRXhpdCl9ZnVuY3Rpb24gQShlLHQpe3RoaXMuY3IoKSx0JiZlLm9uRW50ZXI/dGhpcy5saXQoZS5vbkVudGVyKTohdCYmZS5vbkV4aXQmJnRoaXMubGl0KGUub25FeGl0KSx0aGlzLmNyKCl9ZnVuY3Rpb24gQyhlKXt0aGlzLmxpdCh0aGlzLmVzYyhlLCExKSl9ZnVuY3Rpb24gTyhlKXt2YXIgdD1bXTtpZih0aGlzLm9wdGlvbnMuc291cmNlcG9zKXt2YXIgbj1lLnNvdXJjZXBvcztuJiZ0LnB1c2goWyJkYXRhLXNvdXJjZXBvcyIsU3RyaW5nKG5bMF1bMF0pKyI6IitTdHJpbmcoblswXVsxXSkrIi0iK1N0cmluZyhuWzFdWzBdKSsiOiIrU3RyaW5nKG5bMV1bMV0pXSl9cmV0dXJuIHR9dmFyIFM9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvcmVuZGVyL3JlbmRlcmVyLmpzIiksUj0vXmphdmFzY3JpcHQ6fHZic2NyaXB0OnxmaWxlOnxkYXRhOi9pLGo9L15kYXRhOmltYWdlXC8oPzpwbmd8Z2lmfGpwZWd8d2VicCkvaSx4PWZ1bmN0aW9uKGUpe3JldHVybiBSLnRlc3QoZSkmJiFqLnRlc3QoZSl9O28ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLG8ucHJvdG90eXBlLnRleHQ9cyxvLnByb3RvdHlwZS5odG1sX2lubGluZT15LG8ucHJvdG90eXBlLmh0bWxfYmxvY2s9dixvLnByb3RvdHlwZS5zb2Z0YnJlYWs9aSxvLnByb3RvdHlwZS5saW5lYnJlYWs9YSxvLnByb3RvdHlwZS5saW5rPWwsby5wcm90b3R5cGUuaW1hZ2U9dSxvLnByb3RvdHlwZS5lbXBoPWMsby5wcm90b3R5cGUuc3Ryb25nPWQsby5wcm90b3R5cGUucGFyYWdyYXBoPV8sby5wcm90b3R5cGUuaGVhZGluZz1wLG8ucHJvdG90eXBlLmNvZGU9ZixvLnByb3RvdHlwZS5jb2RlX2Jsb2NrPW0sby5wcm90b3R5cGUudGhlbWF0aWNfYnJlYWs9aCxvLnByb3RvdHlwZS5ibG9ja19xdW90ZT1nLG8ucHJvdG90eXBlLmxpc3Q9YixvLnByb3RvdHlwZS5pdGVtPUUsby5wcm90b3R5cGUuY3VzdG9tX2lubGluZT1ULG8ucHJvdG90eXBlLmN1c3RvbV9ibG9jaz1BLG8ucHJvdG90eXBlLmVzYz1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9jb21tb24uanMiKS5lc2NhcGVYbWwsby5wcm90b3R5cGUub3V0PUMsby5wcm90b3R5cGUudGFnPXIsby5wcm90b3R5cGUuYXR0cnM9TyxlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL3JlbmRlci9yZW5kZXJlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyPWUud2Fsa2VyKCk7Zm9yKHRoaXMuYnVmZmVyPSIiLHRoaXMubGFzdE91dD0iXG4iO3Q9ci5uZXh0KCk7KW49dC5ub2RlLnR5cGUsdGhpc1tuXSYmdGhpc1tuXSh0Lm5vZGUsdC5lbnRlcmluZyk7cmV0dXJuIHRoaXMuYnVmZmVyfWZ1bmN0aW9uIHMoZSl7dGhpcy5idWZmZXIrPWUsdGhpcy5sYXN0T3V0PWV9ZnVuY3Rpb24gaSgpeyJcbiIhPT10aGlzLmxhc3RPdXQmJnRoaXMubGl0KCJcbiIpfWZ1bmN0aW9uIGEoZSl7dGhpcy5saXQoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZX1yLnByb3RvdHlwZS5yZW5kZXI9byxyLnByb3RvdHlwZS5vdXQ9YSxyLnByb3RvdHlwZS5saXQ9cyxyLnByb3RvdHlwZS5jcj1pLHIucHJvdG90eXBlLmVzYz1sLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvcmVuZGVyL3htbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxXyQyIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBvKGUpe2U9ZXx8e30sdGhpcy5kaXNhYmxlVGFncz0wLHRoaXMubGFzdE91dD0iXG4iLHRoaXMuaW5kZW50TGV2ZWw9MCx0aGlzLmluZGVudD0iICAiLHRoaXMub3B0aW9ucz1lfWZ1bmN0aW9uIHMoZSl7dGhpcy5idWZmZXI9IiI7dmFyIHQsbixvLHMsaSxhLGwsdSxjPWUud2Fsa2VyKCksZD10aGlzLm9wdGlvbnM7Zm9yKGQudGltZSYmY29uc29sZS50aW1lKCJyZW5kZXJpbmciKSx0aGlzLmJ1ZmZlcis9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+XG4nLHRoaXMuYnVmZmVyKz0nPCFET0NUWVBFIGRvY3VtZW50IFNZU1RFTSAiQ29tbW9uTWFyay5kdGQiPlxuJztvPWMubmV4dCgpOylpZihpPW8uZW50ZXJpbmcscz1vLm5vZGUsdT1zLnR5cGUsYT1zLmlzQ29udGFpbmVyLGw9InRoZW1hdGljX2JyZWFrIj09PXV8fCJsaW5lYnJlYWsiPT09dXx8InNvZnRicmVhayI9PT11LG49cih1KSxpKXtzd2l0Y2godD1bXSx1KXtjYXNlImRvY3VtZW50Ijp0LnB1c2goWyJ4bWxucyIsImh0dHA6Ly9jb21tb25tYXJrLm9yZy94bWwvMS4wIl0pO2JyZWFrO2Nhc2UibGlzdCI6bnVsbCE9PXMubGlzdFR5cGUmJnQucHVzaChbInR5cGUiLHMubGlzdFR5cGUudG9Mb3dlckNhc2UoKV0pLG51bGwhPT1zLmxpc3RTdGFydCYmdC5wdXNoKFsic3RhcnQiLFN0cmluZyhzLmxpc3RTdGFydCldKSxudWxsIT09cy5saXN0VGlnaHQmJnQucHVzaChbInRpZ2h0IixzLmxpc3RUaWdodD8idHJ1ZSI6ImZhbHNlIl0pO3ZhciBfPXMubGlzdERlbGltaXRlcjtpZihudWxsIT09Xyl7dmFyIHA9IiI7cD0iLiI9PT1fPyJwZXJpb2QiOiJwYXJlbiIsdC5wdXNoKFsiZGVsaW1pdGVyIixwXSl9YnJlYWs7Y2FzZSJjb2RlX2Jsb2NrIjpzLmluZm8mJnQucHVzaChbImluZm8iLHMuaW5mb10pO2JyZWFrO2Nhc2UiaGVhZGluZyI6dC5wdXNoKFsibGV2ZWwiLFN0cmluZyhzLmxldmVsKV0pO2JyZWFrO2Nhc2UibGluayI6Y2FzZSJpbWFnZSI6dC5wdXNoKFsiZGVzdGluYXRpb24iLHMuZGVzdGluYXRpb25dKSx0LnB1c2goWyJ0aXRsZSIscy50aXRsZV0pO2JyZWFrO2Nhc2UiY3VzdG9tX2lubGluZSI6Y2FzZSJjdXN0b21fYmxvY2siOnQucHVzaChbIm9uX2VudGVyIixzLm9uRW50ZXJdKSx0LnB1c2goWyJvbl9leGl0IixzLm9uRXhpdF0pfWlmKGQuc291cmNlcG9zKXt2YXIgZj1zLnNvdXJjZXBvcztmJiZ0LnB1c2goWyJzb3VyY2Vwb3MiLFN0cmluZyhmWzBdWzBdKSsiOiIrU3RyaW5nKGZbMF1bMV0pKyItIitTdHJpbmcoZlsxXVswXSkrIjoiK1N0cmluZyhmWzFdWzFdKV0pfWlmKHRoaXMuY3IoKSx0aGlzLm91dCh0aGlzLnRhZyhuLHQsbCkpLGEpdGhpcy5pbmRlbnRMZXZlbCs9MTtlbHNlIGlmKCFhJiYhbCl7dmFyIG09cy5saXRlcmFsO20mJnRoaXMub3V0KHRoaXMuZXNjKG0pKSx0aGlzLm91dCh0aGlzLnRhZygiLyIrbikpfX1lbHNlIHRoaXMuaW5kZW50TGV2ZWwtPTEsdGhpcy5jcigpLHRoaXMub3V0KHRoaXMudGFnKCIvIituKSk7cmV0dXJuIGQudGltZSYmY29uc29sZS50aW1lRW5kKCJyZW5kZXJpbmciKSx0aGlzLmJ1ZmZlcis9IlxuIix0aGlzLmJ1ZmZlcn1mdW5jdGlvbiBpKGUpe3RoaXMuZGlzYWJsZVRhZ3M+MD90aGlzLmJ1ZmZlcis9ZS5yZXBsYWNlKGMsIiIpOnRoaXMuYnVmZmVyKz1lLHRoaXMubGFzdE91dD1lfWZ1bmN0aW9uIGEoKXtpZigiXG4iIT09dGhpcy5sYXN0T3V0KXt0aGlzLmJ1ZmZlcis9IlxuIix0aGlzLmxhc3RPdXQ9IlxuIjtmb3IodmFyIGU9dGhpcy5pbmRlbnRMZXZlbDtlPjA7ZS0tKXRoaXMuYnVmZmVyKz10aGlzLmluZGVudH19ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9IjwiK2U7aWYodCYmdC5sZW5ndGg+MClmb3IodmFyIG8scz0wO3ZvaWQgMCE9PShvPXRbc10pOylyKz0iICIrb1swXSsnPSInK3RoaXMuZXNjKG9bMV0pKyciJyxzKys7cmV0dXJuIG4mJihyKz0iIC8iKSxyKz0iPiJ9dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvcmVuZGVyL3JlbmRlcmVyLmpzIiksYz0vXDxbXj5dKlw+LztvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHUucHJvdG90eXBlKSxvLnByb3RvdHlwZS5yZW5kZXI9cyxvLnByb3RvdHlwZS5vdXQ9aSxvLnByb3RvdHlwZS5jcj1hLG8ucHJvdG90eXBlLnRhZz1sLG8ucHJvdG90eXBlLmVzYz1uKCIuL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9jb21tb24uanMiKS5lc2NhcGVYbWwsZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9jb21wb25lbnQtY2xhc3Nlcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIWV8fCFlLm5vZGVUeXBlKXRocm93IG5ldyBFcnJvcigiQSBET00gZWxlbWVudCByZWZlcmVuY2UgaXMgcmVxdWlyZWQiKTt0aGlzLmVsPWUsdGhpcy5saXN0PWUuY2xhc3NMaXN0fXRyeXt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9jb21wb25lbnQtaW5kZXhvZi9pbmRleC5qcyIpfWNhdGNoKGUpe3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1pbmRleG9mL2luZGV4LmpzIil9dmFyIHM9L1xzKy8saT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9LHIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmxpc3QpcmV0dXJuIHRoaXMubGlzdC5hZGQoZSksdGhpczt2YXIgdD10aGlzLmFycmF5KCk7cmV0dXJufm8odCxlKXx8dC5wdXNoKGUpLHRoaXMuZWwuY2xhc3NOYW1lPXQuam9pbigiICIpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtpZigiW29iamVjdCBSZWdFeHBdIj09aS5jYWxsKGUpKXJldHVybiB0aGlzLnJlbW92ZU1hdGNoaW5nKGUpO2lmKHRoaXMubGlzdClyZXR1cm4gdGhpcy5saXN0LnJlbW92ZShlKSx0aGlzO3ZhciB0PXRoaXMuYXJyYXkoKSxuPW8odCxlKTtyZXR1cm5+biYmdC5zcGxpY2UobiwxKSx0aGlzLmVsLmNsYXNzTmFtZT10LmpvaW4oIiAiKSx0aGlzfSxyLnByb3RvdHlwZS5yZW1vdmVNYXRjaGluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5hcnJheSgpLG49MDtuPHQubGVuZ3RoO24rKyllLnRlc3QodFtuXSkmJnRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfSxyLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5saXN0Pyh2b2lkIDAhPT10P3QhPT10aGlzLmxpc3QudG9nZ2xlKGUsdCkmJnRoaXMubGlzdC50b2dnbGUoZSk6dGhpcy5saXN0LnRvZ2dsZShlKSx0aGlzKToodm9pZCAwIT09dD90P3RoaXMuYWRkKGUpOnRoaXMucmVtb3ZlKGUpOnRoaXMuaGFzKGUpP3RoaXMucmVtb3ZlKGUpOnRoaXMuYWRkKGUpLHRoaXMpfSxyLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWwuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIix0PWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpLG49dC5zcGxpdChzKTtyZXR1cm4iIj09PW5bMF0mJm4uc2hpZnQoKSxufSxyLnByb3RvdHlwZS5oYXM9ci5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGlzdD90aGlzLmxpc3QuY29udGFpbnMoZSk6ISF+byh0aGlzLmFycmF5KCksZSl9fSwiLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWluZGV4b2YvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZS5pbmRleE9mKXJldHVybiBlLmluZGV4T2YodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9fSwiLi9ub2RlX21vZHVsZXMvY29va2llL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc3RyIG11c3QgYmUgYSBzdHJpbmciKTtmb3IodmFyIG49e30scj10fHx7fSxvPWUuc3BsaXQobCksYT1yLmRlY29kZXx8aSx1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBjPW9bdV0sZD1jLmluZGV4T2YoIj0iKTtpZighKGQ8MCkpe3ZhciBfPWMuc3Vic3RyKDAsZCkudHJpbSgpLHA9Yy5zdWJzdHIoKytkLGMubGVuZ3RoKS50cmltKCk7JyInPT1wWzBdJiYocD1wLnNsaWNlKDEsLTEpKSx2b2lkIDA9PW5bX10mJihuW19dPXMocCxhKSl9fXJldHVybiBufWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPW58fHt9LG89ci5lbmNvZGV8fGE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uIGVuY29kZSBpcyBpbnZhbGlkIik7aWYoIXUudGVzdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBuYW1lIGlzIGludmFsaWQiKTt2YXIgcz1vKHQpO2lmKHMmJiF1LnRlc3QocykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgdmFsIGlzIGludmFsaWQiKTt2YXIgaT1lKyI9IitzO2lmKG51bGwhPXIubWF4QWdlKXt2YXIgbD1yLm1heEFnZS0wO2lmKGlzTmFOKGwpKXRocm93IG5ldyBFcnJvcigibWF4QWdlIHNob3VsZCBiZSBhIE51bWJlciIpO2krPSI7IE1heC1BZ2U9IitNYXRoLmZsb29yKGwpfWlmKHIuZG9tYWluKXtpZighdS50ZXN0KHIuZG9tYWluKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gZG9tYWluIGlzIGludmFsaWQiKTtpKz0iOyBEb21haW49IityLmRvbWFpbn1pZihyLnBhdGgpe2lmKCF1LnRlc3Qoci5wYXRoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gcGF0aCBpcyBpbnZhbGlkIik7aSs9IjsgUGF0aD0iK3IucGF0aH1pZihyLmV4cGlyZXMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByLmV4cGlyZXMudG9VVENTdHJpbmcpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZCIpO2krPSI7IEV4cGlyZXM9IityLmV4cGlyZXMudG9VVENTdHJpbmcoKX1pZihyLmh0dHBPbmx5JiYoaSs9IjsgSHR0cE9ubHkiKSxyLnNlY3VyZSYmKGkrPSI7IFNlY3VyZSIpLHIuc2FtZVNpdGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHIuc2FtZVNpdGU/ci5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpOnIuc2FtZVNpdGUpe2Nhc2UhMDppKz0iOyBTYW1lU2l0ZT1TdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjppKz0iOyBTYW1lU2l0ZT1MYXgiO2JyZWFrO2Nhc2Uic3RyaWN0IjppKz0iOyBTYW1lU2l0ZT1TdHJpY3QiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uIHNhbWVTaXRlIGlzIGludmFsaWQiKX19cmV0dXJuIGl9ZnVuY3Rpb24gcyhlLHQpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtyZXR1cm4gZX19LyohCiAqIGNvb2tpZQogKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IFJvbWFuIFNodHlsbWFuCiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uCiAqIE1JVCBMaWNlbnNlZAogKi8KdC5wYXJzZT1yLHQuc2VyaWFsaXplPW87dmFyIGk9ZGVjb2RlVVJJQ29tcG9uZW50LGE9ZW5jb2RlVVJJQ29tcG9uZW50LGw9LzsgKi8sdT0vXltcdTAwMDlcdTAwMjAtXHUwMDdlXHUwMDgwLVx1MDBmZl0rJC99LCIuL25vZGVfbW9kdWxlcy9jb3B5LXRvLWNsaXBib2FyZC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PSgvbWFjIG9zIHgvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyLijJgiOiJDdHJsIikrIitDIjtyZXR1cm4gZS5yZXBsYWNlKC8je1xzKmtleVxzKn0vZyx0KX1mdW5jdGlvbiBvKGUsdCl7dmFyIG4sbyxhLGwsdSxjLGQ9ITE7dHx8KHQ9e30pLG49dC5kZWJ1Z3x8ITE7dHJ5e2E9cygpLGw9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSx1PWRvY3VtZW50LmdldFNlbGVjdGlvbigpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLGMudGV4dENvbnRlbnQ9ZSxjLnN0eWxlLmFsbD0idW5zZXQiLGMuc3R5bGUucG9zaXRpb249ImZpeGVkIixjLnN0eWxlLnRvcD0wLGMuc3R5bGUuY2xpcD0icmVjdCgwLCAwLCAwLCAwKSIsYy5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGMuc3R5bGUud2Via2l0VXNlclNlbGVjdD0idGV4dCIsYy5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJ0ZXh0IixjLnN0eWxlLm1zVXNlclNlbGVjdD0idGV4dCIsYy5zdHlsZS51c2VyU2VsZWN0PSJ0ZXh0Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLGwuc2VsZWN0Tm9kZShjKSx1LmFkZFJhbmdlKGwpO2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXRocm93IG5ldyBFcnJvcigiY29weSBjb21tYW5kIHdhcyB1bnN1Y2Nlc3NmdWwiKTtkPSEwfWNhdGNoKHMpe24mJmNvbnNvbGUuZXJyb3IoInVuYWJsZSB0byBjb3B5IHVzaW5nIGV4ZWNDb21tYW5kOiAiLHMpLG4mJmNvbnNvbGUud2FybigidHJ5aW5nIElFIHNwZWNpZmljIHN0dWZmIik7dHJ5e3dpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQiLGUpLGQ9ITB9Y2F0Y2gocyl7biYmY29uc29sZS5lcnJvcigidW5hYmxlIHRvIGNvcHkgdXNpbmcgY2xpcGJvYXJkRGF0YTogIixzKSxuJiZjb25zb2xlLmVycm9yKCJmYWxsaW5nIGJhY2sgdG8gcHJvbXB0Iiksbz1yKCJtZXNzYWdlImluIHQ/dC5tZXNzYWdlOmkpLHdpbmRvdy5wcm9tcHQobyxlKX19ZmluYWxseXt1JiYoImZ1bmN0aW9uIj09dHlwZW9mIHUucmVtb3ZlUmFuZ2U/dS5yZW1vdmVSYW5nZShsKTp1LnJlbW92ZUFsbFJhbmdlcygpKSxjJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGMpLGEoKX1yZXR1cm4gZH12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy90b2dnbGUtc2VsZWN0aW9uL2luZGV4LmpzIiksaT0iQ29weSB0byBjbGlwYm9hcmQ6ICN7a2V5fSwgRW50ZXIiO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb20uanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5BcnJheS5mcm9tfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L21hcC5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5BcnJheS5tYXB9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanMiKX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiksZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUuanMiKX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiksbz1yLkpTT058fChyLkpTT049e3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeX0pO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gby5zdHJpbmdpZnkuYXBwbHkobyxhcmd1bWVudHMpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9tYXRoL3RydW5jLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5NYXRoLnRydW5jfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIpLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLk9iamVjdC5hc3NpZ259LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIik7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5PYmplY3Q7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuY3JlYXRlKGUsdCl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIpO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikuT2JqZWN0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZGVmaW5lUHJvcGVydHkoZSx0LG4pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiKTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLk9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5PYmplY3QuZ2V0UHJvdG90eXBlT2Z9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5PYmplY3Qua2V5c30sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIpLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLk9iamVjdC5zZXRQcm90b3R5cGVPZn0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeS5qcyIpLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLlByb21pc2V9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vcmVmbGVjdC9hcHBseS5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiksZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikuUmVmbGVjdC5hcHBseX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9yZWZsZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIpLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLlJlZmxlY3QuZGVmaW5lUHJvcGVydHl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc2V0LmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiksZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikuU2V0fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5TeW1ib2x9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiKS5mKCJpdGVyYXRvciIpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3dlYWstbWFwLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiKSxlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5XZWFrTWFwfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09ciYmciBpbiBlKXRocm93IFR5cGVFcnJvcihuKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3ZhciBhLGw9cih0KSx1PW8obC5sZW5ndGgpLGM9cyhpLHUpO2lmKGUmJm4hPW4pe2Zvcig7dT5jOylpZigoYT1sW2MrK10pIT1hKXJldHVybiEwfWVsc2UgZm9yKDt1PmM7YysrKWlmKChlfHxjIGluIGwpJiZsW2NdPT09bilyZXR1cm4gZXx8Y3x8MDtyZXR1cm4hZSYmLTF9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PWUsbD0yPT1lLHU9Mz09ZSxjPTQ9PWUsZD02PT1lLF89NT09ZXx8ZCxwPXR8fGE7cmV0dXJuIGZ1bmN0aW9uKHQsYSxmKXtmb3IodmFyIG0saCxnPXModCksYj1vKGcpLEU9cihhLGYsMykseT1pKGIubGVuZ3RoKSx2PTAsVD1uP3AodCx5KTpsP3AodCwwKTp2b2lkIDA7eT52O3YrKylpZigoX3x8diBpbiBiKSYmKG09Ylt2XSxoPUUobSx2LGcpLGUpKWlmKG4pVFt2XT1oO2Vsc2UgaWYoaClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gbTtjYXNlIDY6cmV0dXJuIHY7Y2FzZSAyOlQucHVzaChtKX1lbHNlIGlmKGMpcmV0dXJuITE7cmV0dXJuIGQ/LTE6dXx8Yz9jOlR9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG8oZSkmJih0PWUuY29uc3RydWN0b3IsImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQhPT1BcnJheSYmIW8odC5wcm90b3R5cGUpfHwodD12b2lkIDApLHIodCkmJm51bGw9PT0odD10W3NdKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhyKGUpKSh0KX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiKSgidG9TdHJpbmdUYWciKSxzPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksaT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixhO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49aSh0PU9iamVjdChlKSxvKSk/bjpzP3IodCk6Ik9iamVjdCI9PShhPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFyZ3VtZW50cyI6YX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIikuZixvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzIikuZmFzdEtleSxmPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiksbT1fPyJfcyI6InNpemUiLGg9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXAodCk7aWYoIkYiIT09cilyZXR1cm4gZS5faVtyXTtmb3Iobj1lLl9mO247bj1uLm4paWYobi5rPT10KXJldHVybiBufTtlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHUpe3ZhciBjPWUoZnVuY3Rpb24oZSxyKXthKGUsYyx0LCJfaSIpLGUuX3Q9dCxlLl9pPW8obnVsbCksZS5fZj12b2lkIDAsZS5fbD12b2lkIDAsZVttXT0wLHZvaWQgMCE9ciYmbChyLG4sZVt1XSxlKX0pO3JldHVybiBzKGMucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT1mKHRoaXMsdCksbj1lLl9pLHI9ZS5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgbltyLmldO2UuX2Y9ZS5fbD12b2lkIDAsZVttXT0wfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIG49Zih0aGlzLHQpLHI9aChuLGUpO2lmKHIpe3ZhciBvPXIubixzPXIucDtkZWxldGUgbi5faVtyLmldLHIucj0hMCxzJiYocy5uPW8pLG8mJihvLnA9cyksbi5fZj09ciYmKG4uX2Y9byksbi5fbD09ciYmKG4uX2w9cyksblttXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbihlKXtmKHRoaXMsdCk7Zm9yKHZhciBuLHI9aShlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO249bj9uLm46dGhpcy5fZjspZm9yKHIobi52LG4uayx0aGlzKTtuJiZuLnI7KW49bi5wfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFoKGYodGhpcyx0KSxlKX19KSxfJiZyKGMucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcyx0KVttXX19KSxjfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scz1oKGUsdCk7cmV0dXJuIHM/cy52PW46KGUuX2w9cz17aTpvPXAodCwhMCksazp0LHY6bixwOnI9ZS5fbCxuOnZvaWQgMCxyOiExfSxlLl9mfHwoZS5fZj1zKSxyJiYoci5uPXMpLGVbbV0rKywiRiIhPT1vJiYoZS5faVtvXT1zKSksZX0sZ2V0RW50cnk6aCxzZXRTdHJvbmc6ZnVuY3Rpb24oZSx0LG4pe3UoZSx0LGZ1bmN0aW9uKGUsbil7dGhpcy5fdD1mKGUsdCksdGhpcy5faz1uLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9ZS5fayxuPWUuX2w7biYmbi5yOyluPW4ucDtyZXR1cm4gZS5fdCYmKGUuX2w9bj1uP24ubjplLl90Ll9mKT8ia2V5cyI9PXQ/YygwLG4uayk6InZhbHVlcyI9PXQ/YygwLG4udik6YygwLFtuLmssbi52XSk6KGUuX3Q9dm9pZCAwLGMoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZCh0KX19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihyKHRoaXMpIT1lKXRocm93IFR5cGVFcnJvcihlKyIjdG9KU09OIGlzbid0IGdlbmVyaWMiKTtyZXR1cm4gbyh0aGlzKX19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIpLmdldFdlYWsscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIpLF89dSg1KSxwPXUoNiksZj0wLG09ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2x8fChlLl9sPW5ldyBoKX0saD1mdW5jdGlvbigpe3RoaXMuYT1bXX0sZz1mdW5jdGlvbihlLHQpe3JldHVybiBfKGUuYSxmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KX07aC5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1nKHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhZyh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1nKHRoaXMsZSk7bj9uWzFdPXQ6dGhpcy5hLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9cCh0aGlzLmEsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSk7cmV0dXJufnQmJnRoaXMuYS5zcGxpY2UodCwxKSwhIX50fX0sZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixzKXt2YXIgdT1lKGZ1bmN0aW9uKGUscil7YShlLHUsdCwiX2kiKSxlLl90PXQsZS5faT1mKyssZS5fbD12b2lkIDAsdm9pZCAwIT1yJiZsKHIsbixlW3NdLGUpfSk7cmV0dXJuIHIodS5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbihlKXtpZighaShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9tKGQodGhpcyx0KSkuZGVsZXRlKGUpOm4mJmMobix0aGlzLl9pKSYmZGVsZXRlIG5bdGhpcy5faV19LGhhczpmdW5jdGlvbihlKXtpZighaShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9tKGQodGhpcyx0KSkuaGFzKGUpOm4mJmMobix0aGlzLl9pKX19KSx1fSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW8ocyh0KSwhMCk7cmV0dXJuITA9PT1yP20oZSkuc2V0KHQsbik6cltlLl9pXT1uLGV9LHVmc3RvcmU6bX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Zvci1vZi5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiKS5mLGY9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiKSgwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixoLGcsYil7dmFyIEU9cltlXSx5PUUsdj1nPyJzZXQiOiJhZGQiLFQ9eSYmeS5wcm90b3R5cGUsQT17fTtyZXR1cm4gbSYmImZ1bmN0aW9uIj09dHlwZW9mIHkmJihifHxULmZvckVhY2gmJiFpKGZ1bmN0aW9uKCl7KG5ldyB5KS5lbnRyaWVzKCkubmV4dCgpfSkpPyh5PXQoZnVuY3Rpb24odCxuKXtjKHQseSxlLCJfYyIpLHQuX2M9bmV3IEUsdm9pZCAwIT1uJiZ1KG4sZyx0W3ZdLHQpfSksZigiYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMsdG9KU09OIi5zcGxpdCgiLCIpLGZ1bmN0aW9uKGUpe3ZhciB0PSJhZGQiPT1lfHwic2V0Ij09ZTtlIGluIFQmJighYnx8ImNsZWFyIiE9ZSkmJmEoeS5wcm90b3R5cGUsZSxmdW5jdGlvbihuLHIpe2lmKGModGhpcyx5LGUpLCF0JiZiJiYhZChuKSlyZXR1cm4iZ2V0Ij09ZSYmdm9pZCAwO3ZhciBvPXRoaXMuX2NbZV0oMD09PW4/MDpuLHIpO3JldHVybiB0P3RoaXM6b30pfSksYnx8cCh5LnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jLnNpemV9fSkpOih5PWguZ2V0Q29uc3RydWN0b3IodCxlLGcsdiksbCh5LnByb3RvdHlwZSxuKSxzLk5FRUQ9ITApLF8oeSxlKSxBW2VdPXksbyhvLkcrby5XK28uRixBKSxifHxoLnNldFN0cm9uZyh5LGUsZykseX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS43In07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt0IGluIGU/ci5mKGUsdCxvKDAsbikpOmVbdF09bn19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdm9pZCAwPT09dClyZXR1cm4gZTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKS5kb2N1bWVudCxzPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM/by5jcmVhdGVFbGVtZW50KGUpOnt9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yKGUpLG49by5mO2lmKG4pZm9yKHZhciBpLGE9bihlKSxsPXMuZix1PTA7YS5sZW5ndGg+dTspbC5jYWxsKGUsaT1hW3UrK10pJiZ0LnB1c2goaSk7cmV0dXJuIHR9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciB1LGMsZCxfPWUmbC5GLHA9ZSZsLkcsZj1lJmwuUyxtPWUmbC5QLGg9ZSZsLkIsZz1lJmwuVyxiPXA/bzpvW3RdfHwob1t0XT17fSksRT1iLnByb3RvdHlwZSx5PXA/cjpmP3JbdF06KHJbdF18fHt9KS5wcm90b3R5cGU7cCYmKG49dCk7Zm9yKHUgaW4gbikoYz0hXyYmeSYmdm9pZCAwIT09eVt1XSkmJmEoYix1KXx8KGQ9Yz95W3VdOm5bdV0sYlt1XT1wJiYiZnVuY3Rpb24iIT10eXBlb2YgeVt1XT9uW3VdOmgmJmM/cyhkLHIpOmcmJnlbdV09PWQ/ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCxuLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHQpO2Nhc2UgMjpyZXR1cm4gbmV3IGUodCxuKX1yZXR1cm4gbmV3IGUodCxuLHIpfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIHQucHJvdG90eXBlPWUucHJvdG90eXBlLHR9KGQpOm0mJiJmdW5jdGlvbiI9PXR5cGVvZiBkP3MoRnVuY3Rpb24uY2FsbCxkKTpkLG0mJigoYi52aXJ0dWFsfHwoYi52aXJ0dWFsPXt9KSlbdV09ZCxlJmwuUiYmRSYmIUVbdV0mJmkoRSx1LGQpKSl9O2wuRj0xLGwuRz0yLGwuUz00LGwuUD04LGwuQj0xNixsLlc9MzIsbC5VPTY0LGwuUj0xMjgsZS5leHBvcnRzPWx9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Zvci1vZi5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiKSx1PXt9LGM9e30sdD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZCxfKXt2YXIgcCxmLG0saCxnPV8/ZnVuY3Rpb24oKXtyZXR1cm4gZX06bChlKSxiPXIobixkLHQ/MjoxKSxFPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYocyhnKSl7Zm9yKHA9YShlLmxlbmd0aCk7cD5FO0UrKylpZigoaD10P2IoaShmPWVbRV0pWzBdLGZbMV0pOmIoZVtFXSkpPT09dXx8aD09PWMpcmV0dXJuIGh9ZWxzZSBmb3IobT1nLmNhbGwoZSk7IShmPW0ubmV4dCgpKS5kb25lOylpZigoaD1vKG0sYixmLnZhbHVlLHQpKT09PXV8fGg9PT1jKXJldHVybiBofTt0LkJSRUFLPXUsdC5SRVRVUk49Y30sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIpO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKS5kb2N1bWVudDtlLmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIpJiYhbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMD09PW47c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHI/ZSgpOmUuY2FsbChuKTtjYXNlIDE6cmV0dXJuIHI/ZSh0WzBdKTplLmNhbGwobix0WzBdKTtjYXNlIDI6cmV0dXJuIHI/ZSh0WzBdLHRbMV0pOmUuY2FsbChuLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiByP2UodFswXSx0WzFdLHRbMl0pOmUuY2FsbChuLHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIHI/ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTplLmNhbGwobix0WzBdLHRbMV0sdFsyXSx0WzNdKX1yZXR1cm4gZS5hcHBseShuLHQpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIpKCJpdGVyYXRvciIpLHM9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxzW29dPT09ZSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt0cnl7cmV0dXJuIG8/dChyKG4pWzBdLG5bMV0pOnQobil9Y2F0Y2godCl7dmFyIHM9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09cyYmcihzLmNhbGwoZSkpLHR9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIpLGk9e307bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiKShpLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiKSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1yKGkse25leHQ6bygxLG4pfSkscyhlLHQrIiBJdGVyYXRvciIpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoIml0ZXJhdG9yIiksXz0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLG0saCxnKXtsKG4sdCxmKTt2YXIgYixFLHksdj1mdW5jdGlvbihlKXtpZighXyYmZSBpbiBPKXJldHVybiBPW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsQT0idmFsdWVzIj09bSxDPSExLE89ZS5wcm90b3R5cGUsUz1PW2RdfHxPWyJAQGl0ZXJhdG9yIl18fG0mJk9bbV0sUj1TfHx2KG0pLGo9bT9BP3YoImVudHJpZXMiKTpSOnZvaWQgMCx4PSJBcnJheSI9PXQ/Ty5lbnRyaWVzfHxTOlM7aWYoeCYmKHk9Yyh4LmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ5Lm5leHQmJih1KHksVCwhMCkscnx8ImZ1bmN0aW9uIj09dHlwZW9mIHlbZF18fGkoeSxkLHApKSxBJiZTJiYidmFsdWVzIiE9PVMubmFtZSYmKEM9ITAsUj1mdW5jdGlvbigpe3JldHVybiBTLmNhbGwodGhpcyl9KSxyJiYhZ3x8IV8mJiFDJiZPW2RdfHxpKE8sZCxSKSxhW3RdPVIsYVtUXT1wLG0paWYoYj17dmFsdWVzOkE/Ujp2KCJ2YWx1ZXMiKSxrZXlzOmg/Ujp2KCJrZXlzIiksZW50cmllczpqfSxnKWZvcihFIGluIGIpRSBpbiBPfHxzKE8sRSxiW0VdKTtlbHNlIG8oby5QK28uRiooX3x8QyksdCxiKTtyZXR1cm4gYn19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIHM9WzddW3JdKCk7cy5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKHMsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIHM9WzddLGk9c1tyXSgpO2kubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxzW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUocyl9Y2F0Y2goZSl7fXJldHVybiBufX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSEwfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIikoIm1ldGEiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiKS5mLGE9MCxsPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHU9IW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpKGZ1bmN0aW9uKCl7cmV0dXJuIGwoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxjPWZ1bmN0aW9uKGUpe2koZSxyLHt2YWx1ZTp7aToiTyIrICsrYSx3Ont9fX0pfSxkPWZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUscikpe2lmKCFsKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7YyhlKX1yZXR1cm4gZVtyXS5pfSxfPWZ1bmN0aW9uKGUsdCl7aWYoIXMoZSxyKSl7aWYoIWwoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7YyhlKX1yZXR1cm4gZVtyXS53fSxwPWZ1bmN0aW9uKGUpe3JldHVybiB1JiZmLk5FRUQmJmwoZSkmJiFzKGUscikmJmMoZSksZX0sZj1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpkLGdldFdlYWs6XyxvbkZyZWV6ZTpwfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIpLnNldCxzPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGk9ci5wcm9jZXNzLGE9ci5Qcm9taXNlLGw9InByb2Nlc3MiPT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIikoaSk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHU9ZnVuY3Rpb24oKXt2YXIgcixvO2ZvcihsJiYocj1pLmRvbWFpbikmJnIuZXhpdCgpO2U7KXtvPWUuZm4sZT1lLm5leHQ7dHJ5e28oKX1jYXRjaChyKXt0aHJvdyBlP24oKTp0PXZvaWQgMCxyfX10PXZvaWQgMCxyJiZyLmVudGVyKCl9O2lmKGwpbj1mdW5jdGlvbigpe2kubmV4dFRpY2sodSl9O2Vsc2UgaWYoIXN8fHIubmF2aWdhdG9yJiZyLm5hdmlnYXRvci5zdGFuZGFsb25lKWlmKGEmJmEucmVzb2x2ZSl7dmFyIGM9YS5yZXNvbHZlKHZvaWQgMCk7bj1mdW5jdGlvbigpe2MudGhlbih1KX19ZWxzZSBuPWZ1bmN0aW9uKCl7by5jYWxsKHIsdSl9O2Vsc2V7dmFyIGQ9ITAsXz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IHModSkub2JzZXJ2ZShfLHtjaGFyYWN0ZXJEYXRhOiEwfSksbj1mdW5jdGlvbigpe18uZGF0YT1kPSFkfX1yZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89e2ZuOnIsbmV4dDp2b2lkIDB9O3QmJih0Lm5leHQ9byksZXx8KGU9byxuKCkpLHQ9b319fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgZShmdW5jdGlvbihlLHIpe2lmKHZvaWQgMCE9PXR8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO3Q9ZSxuPXJ9KSx0aGlzLnJlc29sdmU9byh0KSx0aGlzLnJlamVjdD1vKG4pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIik7ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiKSxsPU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSFsfHxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiKShmdW5jdGlvbigpe3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxyPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIGVbbl09NyxyLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZX0pLDchPWwoe30sZSlbbl18fE9iamVjdC5rZXlzKGwoe30sdCkpLmpvaW4oIiIpIT1yfSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49aShlKSxsPWFyZ3VtZW50cy5sZW5ndGgsdT0xLGM9by5mLGQ9cy5mO2w+dTspZm9yKHZhciBfLHA9YShhcmd1bWVudHNbdSsrXSksZj1jP3IocCkuY29uY2F0KGMocCkpOnIocCksbT1mLmxlbmd0aCxoPTA7bT5oOylkLmNhbGwocCxfPWZbaCsrXSkmJihuW19dPXBbX10pO3JldHVybiBufTpsfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIikoIklFX1BST1RPIiksYT1mdW5jdGlvbigpe30sbD1mdW5jdGlvbigpe3ZhciBlLHQ9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiKSgiaWZyYW1lIikscj1zLmxlbmd0aDtmb3IodC5zdHlsZS5kaXNwbGF5PSJub25lIixuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsZS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksbD1lLkY7ci0tOylkZWxldGUgbC5wcm90b3R5cGVbc1tyXV07cmV0dXJuIGwoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhhLnByb3RvdHlwZT1yKGUpLG49bmV3IGEsYS5wcm90b3R5cGU9bnVsbCxuW2ldPWUpOm49bCgpLHZvaWQgMD09PXQ/bjpvKG4sdCl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1zKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGkoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIik7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7byhlKTtmb3IodmFyIG4saT1zKHQpLGE9aS5sZW5ndGgsbD0wO2E+bDspci5mKGUsbj1pW2wrK10sdFtuXSk7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiKT91OmZ1bmN0aW9uKGUsdCl7aWYoZT1zKGUpLHQ9aSh0LCEwKSxsKXRyeXtyZXR1cm4gdShlLHQpfWNhdGNoKGUpe31pZihhKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiKS5mLHM9e30udG9TdHJpbmcsaT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLGE9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBvKGUpfWNhdGNoKGUpe3JldHVybiBpLnNsaWNlKCl9fTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gaSYmIltvYmplY3QgV2luZG93XSI9PXMuY2FsbChlKT9hKGUpOm8ocihlKSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyI6ZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiKSgiSUVfUFJPVE8iKSxpPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9byhlKSxyKGUscyk/ZVtzXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9pOm51bGx9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIpKCExKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIikoIklFX1BST1RPIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYT1vKGUpLGw9MCx1PVtdO2ZvcihuIGluIGEpbiE9aSYmcihhLG4pJiZ1LnB1c2gobik7Zm9yKDt0Lmxlbmd0aD5sOylyKGEsbj10W2wrK10pJiYofnModSxuKXx8dS5wdXNoKG4pKTtyZXR1cm4gdX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIik7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPShvLk9iamVjdHx8e30pW2VdfHxPYmplY3RbZV0saT17fTtpW2VdPXQobikscihyLlMrci5GKnMoZnVuY3Rpb24oKXtuKDEpfSksIk9iamVjdCIsaSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3BlcmZvcm0uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZTohMSx2OmUoKX19Y2F0Y2goZSl7cmV0dXJue2U6ITAsdjplfX19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocihlKSxvKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1zLmYoZSk7cmV0dXJuKDAsbi5yZXNvbHZlKSh0KSxuLnByb21pc2V9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpbiYmZVtvXT9lW29dPXRbb106cihlLG8sdFtvXSk7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Zvci1vZi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyKHIuUyxlLHtmcm9tOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixhLGw9YXJndW1lbnRzWzFdO3JldHVybiBvKHRoaXMpLHQ9dm9pZCAwIT09bCx0JiZvKGwpLHZvaWQgMD09ZT9uZXcgdGhpczoobj1bXSx0PyhyPTAsYT1zKGwsYXJndW1lbnRzWzJdLDIpLGkoZSwhMSxmdW5jdGlvbihlKXtuLnB1c2goYShlLHIrKykpfSkpOmkoZSwhMSxuLnB1c2gsbiksbmV3IHRoaXMobikpfX0pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Ioci5TLGUse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSk7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbmV3IHRoaXModCl9fSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1wcm90by5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiKSxzPWZ1bmN0aW9uKGUsdCl7aWYobyhlKSwhcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxyKXt0cnl7cj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIikoRnVuY3Rpb24uY2FsbCxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSxyKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHMoZSxuKSx0P2UuX19wcm90b19fPW46cihlLG4pLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG9bZV0/b1tlXTpyW2VdO2kmJnQmJiF0W2FdJiZzLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIpLmYsbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhlPW4/ZTplLnByb3RvdHlwZSxzKSYmcihlLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIikoImtleXMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIpLHM9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBzW2VdfHwoc1tlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTggRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpPXIoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWl8fHZvaWQgMD09KG49cihpKVtzXSk/dDpvKG4pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiEhZSYmcihmdW5jdGlvbigpe3Q/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChudWxsKX0pfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHMsaSxhPVN0cmluZyhvKHQpKSxsPXIobiksdT1hLmxlbmd0aDtyZXR1cm4gbDwwfHxsPj11P2U/IiI6dm9pZCAwOihzPWEuY2hhckNvZGVBdChsKSxzPDU1Mjk2fHxzPjU2MzE5fHxsKzE9PT11fHwoaT1hLmNoYXJDb2RlQXQobCsxKSk8NTYzMjB8fGk+NTczNDM/ZT9hLmNoYXJBdChsKTpzOmU/YS5zbGljZShsLGwrMik6aS01NjMyMCsocy01NTI5Njw8MTApKzY1NTM2KX19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW52b2tlLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKSxkPWMucHJvY2VzcyxfPWMuc2V0SW1tZWRpYXRlLHA9Yy5jbGVhckltbWVkaWF0ZSxmPWMuTWVzc2FnZUNoYW5uZWwsbT1jLkRpc3BhdGNoLGg9MCxnPXt9LGI9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZihnLmhhc093blByb3BlcnR5KGUpKXt2YXIgdD1nW2VdO2RlbGV0ZSBnW2VdLHQoKX19LEU9ZnVuY3Rpb24oZSl7Yi5jYWxsKGUuZGF0YSl9O18mJnB8fChfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyl0LnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBnWysraF09ZnVuY3Rpb24oKXthKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LHIoaCksaH0scD1mdW5jdGlvbihlKXtkZWxldGUgZ1tlXX0sInByb2Nlc3MiPT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIikoZCk/cj1mdW5jdGlvbihlKXtkLm5leHRUaWNrKGkoYixlLDEpKX06bSYmbS5ub3c/cj1mdW5jdGlvbihlKXttLm5vdyhpKGIsZSwxKSl9OmY/KG89bmV3IGYscz1vLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPUUscj1pKHMucG9zdE1lc3NhZ2UscywxKSk6Yy5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgcG9zdE1lc3NhZ2UmJiFjLmltcG9ydFNjcmlwdHM/KHI9ZnVuY3Rpb24oZSl7Yy5wb3N0TWVzc2FnZShlKyIiLCIqIil9LGMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsRSwhMSkpOnI9Im9ucmVhZHlzdGF0ZWNoYW5nZSJpbiB1KCJzY3JpcHQiKT9mdW5jdGlvbihlKXtsLmFwcGVuZENoaWxkKHUoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtsLnJlbW92ZUNoaWxkKHRoaXMpLGIuY2FsbChlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoaShiLGUsMSksMCl9KSxlLmV4cG9ydHM9e3NldDpfLGNsZWFyOnB9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiKSxvPU1hdGgubWF4LHM9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9cihlKSxlPDA/byhlK3QsMCk6cyhlLHQpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/cjpuKShlKX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiKSxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP28ocihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIoZSkpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIpLG89ci5uYXZpZ2F0b3I7ZS5leHBvcnRzPW8mJm8udXNlckFnZW50fHwiIn0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIikuZjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9by5TeW1ib2x8fChvLlN5bWJvbD1zP3t9OnIuU3ltYm9sfHx7fSk7Il8iPT1lLmNoYXJBdCgwKXx8ZSBpbiB0fHxhKHQsZSx7dmFsdWU6aS5mKGUpfSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiOmZ1bmN0aW9uKGUsdCxuKXt0LmY9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiKSgid2tzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIikuU3ltYm9sLGk9ImZ1bmN0aW9uIj09dHlwZW9mIHM7KGUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcltlXXx8KHJbZV09aSYmc1tlXXx8KGk/czpvKSgiU3ltYm9sLiIrZSkpfSkuc3RvcmU9cn0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoIml0ZXJhdG9yIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIik7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT1lKXJldHVybiBlW29dfHxlWyJAQGl0ZXJhdG9yIl18fHNbcihlKV19fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiKTtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5nZXRJdGVyYXRvcj1mdW5jdGlvbihlKXt2YXIgdD1vKGUpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO3JldHVybiByKHQuY2FsbChlKSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoIml0ZXJhdG9yIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIik7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIikuaXNJdGVyYWJsZT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSk7cmV0dXJuIHZvaWQgMCE9PXRbb118fCJAQGl0ZXJhdG9yImluIHR8fHMuaGFzT3duUHJvcGVydHkocih0KSl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY2FsbC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIpO28oby5TK28uRiohbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIikoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pLCJBcnJheSIse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGQsXz1zKGUpLHA9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSxmPWFyZ3VtZW50cy5sZW5ndGgsbT1mPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxoPXZvaWQgMCE9PW0sZz0wLGI9YyhfKTtpZihoJiYobT1yKG0sZj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLHZvaWQgMD09Ynx8cD09QXJyYXkmJmEoYikpZm9yKHQ9bChfLmxlbmd0aCksbj1uZXcgcCh0KTt0Pmc7ZysrKXUobixnLGg/bShfW2ddLGcpOl9bZ10pO2Vsc2UgZm9yKGQ9Yi5jYWxsKF8pLG49bmV3IHA7IShvPWQubmV4dCgpKS5kb25lO2crKyl1KG4sZyxoP2koZCxtLFtvLnZhbHVlLGddLCEwKTpvLnZhbHVlKTtyZXR1cm4gbi5sZW5ndGg9ZyxufX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIik7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24oZSx0KXt0aGlzLl90PWkoZSksdGhpcy5faT0wLHRoaXMuX2s9dH0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hZXx8bj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLG8oMSkpOiJrZXlzIj09dD9vKDAsbik6InZhbHVlcyI9PXQ/bygwLGVbbl0pOm8oMCxbbixlW25dXSl9LCJ2YWx1ZXMiKSxzLkFyZ3VtZW50cz1zLkFycmF5LHIoImtleXMiKSxyKCJ2YWx1ZXMiKSxyKCJlbnRyaWVzIil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIikoMSk7cihyLlArci5GKiFuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMsZSxhcmd1bWVudHNbMV0pfX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIik7cihyLlMsIk1hdGgiLHt0cnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oZT4wP01hdGguZmxvb3I6TWF0aC5jZWlsKShlKX19KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpO3Ioci5TK3IuRiwiT2JqZWN0Iix7YXNzaWduOm4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIil9KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpO3Ioci5TLCJPYmplY3QiLHtjcmVhdGU6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiKX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIik7cihyLlMrci5GKiFuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiKSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIpLmZ9KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIpLmY7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiKSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBvKHIoZSksdCl9fSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIikoImdldFByb3RvdHlwZU9mIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyhyKGUpKX19KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIikoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKHIoZSkpfX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpO3Ioci5TLCJPYmplY3QiLHtzZXRQcm90b3R5cGVPZjpuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXByb3RvLmpzIikuc2V0fSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Zvci1vZi5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190YXNrLmpzIikuc2V0LGI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIpKCksRT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3BlcmZvcm0uanMiKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzIiksVD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiksQT1sLlR5cGVFcnJvcixDPWwucHJvY2VzcyxPPUMmJkMudmVyc2lvbnMsUz1PJiZPLnY4fHwiIixSPWwuUHJvbWlzZSxqPSJwcm9jZXNzIj09YyhDKSx4PWZ1bmN0aW9uKCl7fSxMPW89RS5mLEQ9ISFmdW5jdGlvbigpe3RyeXt2YXIgZT1SLnJlc29sdmUoMSksdD0oZS5jb25zdHJ1Y3Rvcj17fSlbbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIpKCJzcGVjaWVzIildPWZ1bmN0aW9uKGUpe2UoeCx4KX07cmV0dXJuKGp8fCJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZlLnRoZW4oeClpbnN0YW5jZW9mIHQmJjAhPT1TLmluZGV4T2YoIjYuNiIpJiYtMT09PXYuaW5kZXhPZigiQ2hyb21lLzY2Iil9Y2F0Y2goZSl7fX0oKSx3PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIV8oZSl8fCJmdW5jdGlvbiIhPXR5cGVvZih0PWUudGhlbikpJiZ0fSxNPWZ1bmN0aW9uKGUsdCl7aWYoIWUuX24pe2UuX249ITA7dmFyIG49ZS5fYztiKGZ1bmN0aW9uKCl7Zm9yKHZhciByPWUuX3Ysbz0xPT1lLl9zLHM9MDtuLmxlbmd0aD5zOykhZnVuY3Rpb24odCl7dmFyIG4scyxpLGE9bz90Lm9rOnQuZmFpbCxsPXQucmVzb2x2ZSx1PXQucmVqZWN0LGM9dC5kb21haW47dHJ5e2E/KG98fCgyPT1lLl9oJiZQKGUpLGUuX2g9MSksITA9PT1hP249cjooYyYmYy5lbnRlcigpLG49YShyKSxjJiYoYy5leGl0KCksaT0hMCkpLG49PT10LnByb21pc2U/dShBKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPXcobikpP3MuY2FsbChuLGwsdSk6bChuKSk6dShyKX1jYXRjaChlKXtjJiYhaSYmYy5leGl0KCksdShlKX19KG5bcysrXSk7ZS5fYz1bXSxlLl9uPSExLHQmJiFlLl9oJiZrKGUpfSl9fSxrPWZ1bmN0aW9uKGUpe2cuY2FsbChsLGZ1bmN0aW9uKCl7dmFyIHQsbixyLG89ZS5fdixzPUkoZSk7aWYocyYmKHQ9eShmdW5jdGlvbigpe2o/Qy5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG8sZSk6KG49bC5vbnVuaGFuZGxlZHJlamVjdGlvbik/bih7cHJvbWlzZTplLHJlYXNvbjpvfSk6KHI9bC5jb25zb2xlKSYmci5lcnJvciYmci5lcnJvcigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixvKX0pLGUuX2g9anx8SShlKT8yOjEpLGUuX2E9dm9pZCAwLHMmJnQuZSl0aHJvdyB0LnZ9KX0sST1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUuX2gmJjA9PT0oZS5fYXx8ZS5fYykubGVuZ3RofSxQPWZ1bmN0aW9uKGUpe2cuY2FsbChsLGZ1bmN0aW9uKCl7dmFyIHQ7aj9DLmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLGUpOih0PWwub25yZWplY3Rpb25oYW5kbGVkKSYmdCh7cHJvbWlzZTplLHJlYXNvbjplLl92fSl9KX0sTj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3QuX2R8fCh0Ll9kPSEwLHQ9dC5fd3x8dCx0Ll92PWUsdC5fcz0yLHQuX2F8fCh0Ll9hPXQuX2Muc2xpY2UoKSksTSh0LCEwKSl9LEg9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO2lmKCFuLl9kKXtuLl9kPSEwLG49bi5fd3x8bjt0cnl7aWYobj09PWUpdGhyb3cgQSgiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTsodD13KGUpKT9iKGZ1bmN0aW9uKCl7dmFyIHI9e193Om4sX2Q6ITF9O3RyeXt0LmNhbGwoZSx1KEgsciwxKSx1KE4sciwxKSl9Y2F0Y2goZSl7Ti5jYWxsKHIsZSl9fSk6KG4uX3Y9ZSxuLl9zPTEsTShuLCExKSl9Y2F0Y2goZSl7Ti5jYWxsKHtfdzpuLF9kOiExfSxlKX19fTtEfHwoUj1mdW5jdGlvbihlKXtmKHRoaXMsUiwiUHJvbWlzZSIsIl9oIikscChlKSxyLmNhbGwodGhpcyk7dHJ5e2UodShILHRoaXMsMSksdShOLHRoaXMsMSkpfWNhdGNoKGUpe04uY2FsbCh0aGlzLGUpfX0scj1mdW5jdGlvbihlKXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSxyLnByb3RvdHlwZT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIikoUi5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1MKGgodGhpcyxSKSk7cmV0dXJuIG4ub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUsbi5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LG4uZG9tYWluPWo/Qy5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChuKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2gobiksdGhpcy5fcyYmTSh0aGlzLCExKSxuLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLHM9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcjt0aGlzLnByb21pc2U9ZSx0aGlzLnJlc29sdmU9dShILGUsMSksdGhpcy5yZWplY3Q9dShOLGUsMSl9LEUuZj1MPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09Unx8ZT09PWk/bmV3IHMoZSk6byhlKX0pLGQoZC5HK2QuVytkLkYqIUQse1Byb21pc2U6Un0pLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIpKFIsIlByb21pc2UiKSxuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiKSgiUHJvbWlzZSIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiKS5Qcm9taXNlLGQoZC5TK2QuRiohRCwiUHJvbWlzZSIse3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1MKHRoaXMpO3JldHVybigwLHQucmVqZWN0KShlKSx0LnByb21pc2V9fSksZChkLlMrZC5GKihhfHwhRCksIlByb21pc2UiLHtyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBUKGEmJnRoaXM9PT1pP1I6dGhpcyxlKX19KSxkKGQuUytkLkYqIShEJiZuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiKShmdW5jdGlvbihlKXtSLmFsbChlKS5jYXRjaCh4KX0pKSwiUHJvbWlzZSIse2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49TCh0KSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LHM9eShmdW5jdGlvbigpe3ZhciBuPVtdLHM9MCxpPTE7bShlLCExLGZ1bmN0aW9uKGUpe3ZhciBhPXMrKyxsPSExO24ucHVzaCh2b2lkIDApLGkrKyx0LnJlc29sdmUoZSkudGhlbihmdW5jdGlvbihlKXtsfHwobD0hMCxuW2FdPWUsLS1pfHxyKG4pKX0sbyl9KSwtLWl8fHIobil9KTtyZXR1cm4gcy5lJiZvKHMudiksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1MKHQpLHI9bi5yZWplY3Qsbz15KGZ1bmN0aW9uKCl7bShlLCExLGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKS50aGVuKG4ucmVzb2x2ZSxyKX0pfSk7cmV0dXJuIG8uZSYmcihvLnYpLG4ucHJvbWlzZX19KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiKSxpPShuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIikuUmVmbGVjdHx8e30pLmFwcGx5LGE9RnVuY3Rpb24uYXBwbHk7cihyLlMrci5GKiFuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiKShmdW5jdGlvbigpe2koZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW8oZSksbD1zKG4pO3JldHVybiBpP2kocix0LGwpOmEuY2FsbChyLHQsbCl9fSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIik7byhvLlMrby5GKm4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe3MoZSksdD1pKHQsITApLHMobik7dHJ5e3JldHVybiByLmYoZSx0LG4pLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIpO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIpKCJTZXQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gci5kZWYobyh0aGlzLCJTZXQiKSxlPTA9PT1lPzA6ZSxlKX19LHIpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIikoITApO24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl90LG49dGhpcy5faTtyZXR1cm4gbj49dC5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1yKHQsbiksdGhpcy5faSs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIpLktFWSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIpLGI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIpLEU9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiKSxUPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIpLEM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIpLE89bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiksUz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiKSxqPU8uZix4PVMuZixMPUMuZixEPXIuU3ltYm9sLHc9ci5KU09OLE09dyYmdy5zdHJpbmdpZnksaz1wKCJfaGlkZGVuIiksST1wKCJ0b1ByaW1pdGl2ZSIpLFA9e30ucHJvcGVydHlJc0VudW1lcmFibGUsTj1jKCJzeW1ib2wtcmVnaXN0cnkiKSxIPWMoInN5bWJvbHMiKSxGPWMoIm9wLXN5bWJvbHMiKSxCPU9iamVjdC5wcm90b3R5cGUsVT0iZnVuY3Rpb24iPT10eXBlb2YgRCxHPXIuUU9iamVjdCx6PSFHfHwhRy5wcm90b3R5cGV8fCFHLnByb3RvdHlwZS5maW5kQ2hpbGQsVj1zJiZ1KGZ1bmN0aW9uKCl7cmV0dXJuIDchPUEoeCh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1qKEIsdCk7ciYmZGVsZXRlIEJbdF0seChlLHQsbiksciYmZSE9PUImJngoQix0LHIpfTp4LFc9ZnVuY3Rpb24oZSl7dmFyIHQ9SFtlXT1BKEQucHJvdG90eXBlKTtyZXR1cm4gdC5faz1lLHR9LFk9VSYmInN5bWJvbCI9PXR5cGVvZiBELml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEfSxxPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUImJnEoRix0LG4pLGIoZSksdD12KHQsITApLGIobiksbyhILHQpPyhuLmVudW1lcmFibGU/KG8oZSxrKSYmZVtrXVt0XSYmKGVba11bdF09ITEpLG49QShuLHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KG8oZSxrKXx8eChlLGssVCgxLHt9KSksZVtrXVt0XT0hMCksVihlLHQsbikpOngoZSx0LG4pfSxLPWZ1bmN0aW9uKGUsdCl7YihlKTtmb3IodmFyIG4scj1oKHQ9eSh0KSksbz0wLHM9ci5sZW5ndGg7cz5vOylxKGUsbj1yW28rK10sdFtuXSk7cmV0dXJuIGV9LFg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9BKGUpOksoQShlKSx0KX0sJD1mdW5jdGlvbihlKXt2YXIgdD1QLmNhbGwodGhpcyxlPXYoZSwhMCkpO3JldHVybiEodGhpcz09PUImJm8oSCxlKSYmIW8oRixlKSkmJighKHR8fCFvKHRoaXMsZSl8fCFvKEgsZSl8fG8odGhpcyxrKSYmdGhpc1trXVtlXSl8fHQpfSxRPWZ1bmN0aW9uKGUsdCl7aWYoZT15KGUpLHQ9dih0LCEwKSxlIT09Qnx8IW8oSCx0KXx8byhGLHQpKXt2YXIgbj1qKGUsdCk7cmV0dXJuIW58fCFvKEgsdCl8fG8oZSxrKSYmZVtrXVt0XXx8KG4uZW51bWVyYWJsZT0hMCksbn19LEo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49TCh5KGUpKSxyPVtdLHM9MDtuLmxlbmd0aD5zOylvKEgsdD1uW3MrK10pfHx0PT1rfHx0PT1sfHxyLnB1c2godCk7cmV0dXJuIHJ9LFo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ZT09PUIscj1MKG4/Rjp5KGUpKSxzPVtdLGk9MDtyLmxlbmd0aD5pOykhbyhILHQ9cltpKytdKXx8biYmIW8oQix0KXx8cy5wdXNoKEhbdF0pO3JldHVybiBzfTtVfHwoRD1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBEKXRocm93IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yISIpO3ZhciBlPV8oYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLHQ9ZnVuY3Rpb24obil7dGhpcz09PUImJnQuY2FsbChGLG4pLG8odGhpcyxrKSYmbyh0aGlzW2tdLGUpJiYodGhpc1trXVtlXT0hMSksVih0aGlzLGUsVCgxLG4pKX07cmV0dXJuIHMmJnomJlYoQixlLHtjb25maWd1cmFibGU6ITAsc2V0OnR9KSxXKGUpfSxhKEQucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLE8uZj1RLFMuZj1xLG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIpLmY9Qy5mPUosbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiKS5mPSQsbigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIikuZj1aLHMmJiFuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIpJiZhKEIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwkLCEwKSxmLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFcocChlKSl9KSxpKGkuRytpLlcraS5GKiFVLHtTeW1ib2w6RH0pO2Zvcih2YXIgZWU9Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIpLHRlPTA7ZWUubGVuZ3RoPnRlOylwKGVlW3RlKytdKTtmb3IodmFyIG5lPVIocC5zdG9yZSkscmU9MDtuZS5sZW5ndGg+cmU7KW0obmVbcmUrK10pO2koaS5TK2kuRiohVSwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKGUpe3JldHVybiBvKE4sZSs9IiIpP05bZV06TltlXT1EKGUpfSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIVkoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciB0IGluIE4paWYoTlt0XT09PWUpcmV0dXJuIHR9LHVzZVNldHRlcjpmdW5jdGlvbigpe3o9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3o9ITF9fSksaShpLlMraS5GKiFVLCJPYmplY3QiLHtjcmVhdGU6WCxkZWZpbmVQcm9wZXJ0eTpxLGRlZmluZVByb3BlcnRpZXM6SyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6USxnZXRPd25Qcm9wZXJ0eU5hbWVzOkosZ2V0T3duUHJvcGVydHlTeW1ib2xzOlp9KSx3JiZpKGkuUytpLkYqKCFVfHx1KGZ1bmN0aW9uKCl7dmFyIGU9RCgpO3JldHVybiJbbnVsbF0iIT1NKFtlXSl8fCJ7fSIhPU0oe2E6ZX0pfHwie30iIT1NKE9iamVjdChlKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scj1bZV0sbz0xO2FyZ3VtZW50cy5sZW5ndGg+bzspci5wdXNoKGFyZ3VtZW50c1tvKytdKTtpZihuPXQ9clsxXSwoRSh0KXx8dm9pZCAwIT09ZSkmJiFZKGUpKXJldHVybiBnKHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYodD1uLmNhbGwodGhpcyxlLHQpKSwhWSh0KSlyZXR1cm4gdH0pLHJbMV09dCxNLmFwcGx5KHcscil9fSksRC5wcm90b3R5cGVbSV18fG4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIikoRC5wcm90b3R5cGUsSSxELnByb3RvdHlwZS52YWx1ZU9mKSxkKEQsIlN5bWJvbCIpLGQoTWF0aCwiTWF0aCIsITApLGQoci5KU09OLCJKU09OIiwhMCl9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIpKDApLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3ZhbGlkYXRlLWNvbGxlY3Rpb24uanMiKSxfPWkuZ2V0V2VhayxwPU9iamVjdC5pc0V4dGVuc2libGUsZj1sLnVmc3RvcmUsbT17fSxoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sZz17Z2V0OmZ1bmN0aW9uKGUpe2lmKHUoZSkpe3ZhciB0PV8oZSk7cmV0dXJuITA9PT10P2YoZCh0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuZGVmKGQodGhpcywiV2Vha01hcCIpLGUsdCl9fSxiPWUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIpKCJXZWFrTWFwIixoLGcsbCwhMCwhMCk7YyhmdW5jdGlvbigpe3JldHVybiA3IT0obmV3IGIpLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KShtKSw3KS5nZXQobSl9KSYmKHI9bC5nZXRDb25zdHJ1Y3RvcihoLCJXZWFrTWFwIiksYShyLnByb3RvdHlwZSxnKSxpLk5FRUQ9ITAsbyhbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLGZ1bmN0aW9uKGUpe3ZhciB0PWIucHJvdG90eXBlLG49dFtlXTtzKHQsZSxmdW5jdGlvbih0LG8pe2lmKHUodCkmJiFwKHQpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgcik7dmFyIHM9dGhpcy5fZltlXSh0LG8pO3JldHVybiJzZXQiPT1lP3RoaXM6c31yZXR1cm4gbi5jYWxsKHRoaXMsdCxvKX0pfSkpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiKTtyKHIuUCtyLlIsIlByb21pc2UiLHtmaW5hbGx5OmZ1bmN0aW9uKGUpe3ZhciB0PWkodGhpcyxvLlByb21pc2V8fHMuUHJvbWlzZSksbj0iZnVuY3Rpb24iPT10eXBlb2YgZTtyZXR1cm4gdGhpcy50aGVuKG4/ZnVuY3Rpb24obil7cmV0dXJuIGEodCxlKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfTplLG4/ZnVuY3Rpb24obil7cmV0dXJuIGEodCxlKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBufSl9OmUpfX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcGVyZm9ybS5qcyIpO3Ioci5TLCJQcm9taXNlIix7dHJ5OmZ1bmN0aW9uKGUpe3ZhciB0PW8uZih0aGlzKSxuPXMoZSk7cmV0dXJuKG4uZT90LnJlamVjdDp0LnJlc29sdmUpKG4udiksdC5wcm9taXNlfX0pfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiKSgiU2V0Iil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLW9mLmpzIikoIlNldCIpfSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIpO3Ioci5QK3IuUiwiU2V0Iix7dG9KU09OOm4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiKSgiU2V0Iil9KX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIpKCJhc3luY0l0ZXJhdG9yIil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtuKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIpKCJvYnNlcnZhYmxlIil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIikoIldlYWtNYXAiKX0sIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyI6ZnVuY3Rpb24oZSx0LG4pe24oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIpKCJXZWFrTWFwIil9LCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7bigiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIik7Zm9yKHZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIikoInRvU3RyaW5nVGFnIiksYT0iQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCxET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LE1lZGlhTGlzdCxNaW1lVHlwZUFycmF5LE5hbWVkTm9kZU1hcCxOb2RlTGlzdCxQYWludFJlcXVlc3RMaXN0LFBsdWdpbixQbHVnaW5BcnJheSxTVkdMZW5ndGhMaXN0LFNWR051bWJlckxpc3QsU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QiLnNwbGl0KCIsIiksbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1hW2xdLGM9clt1XSxkPWMmJmMucHJvdG90eXBlO2QmJiFkW2ldJiZvKGQsaSx1KSxzW3VdPXMuQXJyYXl9fSwiLi9ub2RlX21vZHVsZXMvY29yZS11dGlsLWlzL2xpYi91dGlsLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKToiW29iamVjdCBBcnJheV0iPT09aChlKX1mdW5jdGlvbiByKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbD09PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbD09ZX1mdW5jdGlvbiBpKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBhKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX1mdW5jdGlvbiBsKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX1mdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1oKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZX1mdW5jdGlvbiBfKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PWgoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09aChlKXx8ZSBpbnN0YW5jZW9mIEVycm9yfWZ1bmN0aW9uIGYoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gbnVsbD09PWV8fCJib29sZWFuIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZXx8InN0cmluZyI9PXR5cGVvZiBlfHwic3ltYm9sIj09dHlwZW9mIGV8fHZvaWQgMD09PWV9ZnVuY3Rpb24gaChlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXQuaXNBcnJheT1uLHQuaXNCb29sZWFuPXIsdC5pc051bGw9byx0LmlzTnVsbE9yVW5kZWZpbmVkPXMsdC5pc051bWJlcj1pLHQuaXNTdHJpbmc9YSx0LmlzU3ltYm9sPWwsdC5pc1VuZGVmaW5lZD11LHQuaXNSZWdFeHA9Yyx0LmlzT2JqZWN0PWQsdC5pc0RhdGU9Xyx0LmlzRXJyb3I9cCx0LmlzRnVuY3Rpb249Zix0LmlzUHJpbWl0aXZlPW0sdC5pc0J1ZmZlcj1lLmlzQnVmZmVyfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIpfSwiLi9ub2RlX21vZHVsZXMvY3JlYXRlLXJlYWN0LWNsYXNzL2ZhY3RvcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZX1mdW5jdGlvbiBvKGUsdCxuKXtmdW5jdGlvbiBvKGUsdCl7dmFyIG49Yi5oYXNPd25Qcm9wZXJ0eSh0KT9iW3RdOm51bGw7QS5oYXNPd25Qcm9wZXJ0eSh0KSYmYSgiT1ZFUlJJREVfQkFTRSI9PT1uLCJSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgZG8gbm90IG92ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLiIsdCksZSYmYSgiREVGSU5FX01BTlkiPT09bnx8IkRFRklORV9NQU5ZX01FUkdFRCI9PT1uLCJSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluLiIsdCl9ZnVuY3Rpb24gdShlLG4pe2lmKG4pe2EoImZ1bmN0aW9uIiE9dHlwZW9mIG4sIlJlYWN0Q2xhc3M6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LiIpLGEoIXQobiksIlJlYWN0Q2xhc3M6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LiIpO3ZhciByPWUucHJvdG90eXBlLHM9ci5fX3JlYWN0QXV0b0JpbmRQYWlycztuLmhhc093blByb3BlcnR5KGwpJiZ5Lm1peGlucyhlLG4ubWl4aW5zKTtmb3IodmFyIGkgaW4gbilpZihuLmhhc093blByb3BlcnR5KGkpJiZpIT09bCl7dmFyIHU9bltpXSxjPXIuaGFzT3duUHJvcGVydHkoaSk7aWYobyhjLGkpLHkuaGFzT3duUHJvcGVydHkoaSkpeVtpXShlLHUpO2Vsc2V7dmFyIGQ9Yi5oYXNPd25Qcm9wZXJ0eShpKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiB1LG09ZiYmIWQmJiFjJiYhMSE9PW4uYXV0b2JpbmQ7aWYobSlzLnB1c2goaSx1KSxyW2ldPXU7ZWxzZSBpZihjKXt2YXIgaD1iW2ldO2EoZCYmKCJERUZJTkVfTUFOWV9NRVJHRUQiPT09aHx8IkRFRklORV9NQU5ZIj09PWgpLCJSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNzLiIsaCxpKSwiREVGSU5FX01BTllfTUVSR0VEIj09PWg/cltpXT1fKHJbaV0sdSk6IkRFRklORV9NQU5ZIj09PWgmJihyW2ldPXAocltpXSx1KSl9ZWxzZSByW2ldPXV9fX1lbHNlO31mdW5jdGlvbiBjKGUsdCl7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgbz1uIGluIHk7YSghbywnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBhIHJlc2VydmVkIHByb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cJ3QgYmUgb24gdGhlICJzdGF0aWNzIiBrZXkuIERlZmluZSBpdCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yLicsbik7dmFyIHM9biBpbiBlO2lmKHMpe3ZhciBpPUUuaGFzT3duUHJvcGVydHkobik/RVtuXTpudWxsO3JldHVybiBhKCJERUZJTkVfTUFOWV9NRVJHRUQiPT09aSwiUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbi4iLG4pLHZvaWQoZVtuXT1fKGVbbl0scikpfWVbbl09cn19fWZ1bmN0aW9uIGQoZSx0KXthKGUmJnQmJiJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiB0LCJtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6IENhbm5vdCBtZXJnZSBub24tb2JqZWN0cy4iKTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoYSh2b2lkIDA9PT1lW25dLCJtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6IFRyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byBnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzIHdpdGggY2xhc2hpbmcga2V5cy4iLG4pLGVbbl09dFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobnVsbD09bilyZXR1cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3ZhciBvPXt9O3JldHVybiBkKG8sbiksZChvLHIpLG99fWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZihlLHQpe3ZhciBuPXQuYmluZChlKTtyZXR1cm4gbn1mdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1lLl9fcmVhY3RBdXRvQmluZFBhaXJzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0sbz10W24rMV07ZVtyXT1mKGUsbyl9fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9cihmdW5jdGlvbihlLHIsbyl7dGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgmJm0odGhpcyksdGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1yLHRoaXMucmVmcz1pLHRoaXMudXBkYXRlcj1vfHxuLHRoaXMuc3RhdGU9bnVsbDt2YXIgcz10aGlzLmdldEluaXRpYWxTdGF0ZT90aGlzLmdldEluaXRpYWxTdGF0ZSgpOm51bGw7YSgib2JqZWN0Ij09dHlwZW9mIHMmJiFBcnJheS5pc0FycmF5KHMpLCIlcy5nZXRJbml0aWFsU3RhdGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwiLHQuZGlzcGxheU5hbWV8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuc3RhdGU9c30pO3QucHJvdG90eXBlPW5ldyBDLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuX19yZWFjdEF1dG9CaW5kUGFpcnM9W10sZy5mb3JFYWNoKHUuYmluZChudWxsLHQpKSx1KHQsdiksdSh0LGUpLHUodCxUKSx0LmdldERlZmF1bHRQcm9wcyYmKHQuZGVmYXVsdFByb3BzPXQuZ2V0RGVmYXVsdFByb3BzKCkpLGEodC5wcm90b3R5cGUucmVuZGVyLCJjcmVhdGVDbGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLiIpO2Zvcih2YXIgbyBpbiBiKXQucHJvdG90eXBlW29dfHwodC5wcm90b3R5cGVbb109bnVsbCk7cmV0dXJuIHR9dmFyIGc9W10sYj17bWl4aW5zOiJERUZJTkVfTUFOWSIsc3RhdGljczoiREVGSU5FX01BTlkiLHByb3BUeXBlczoiREVGSU5FX01BTlkiLGNvbnRleHRUeXBlczoiREVGSU5FX01BTlkiLGNoaWxkQ29udGV4dFR5cGVzOiJERUZJTkVfTUFOWSIsZ2V0RGVmYXVsdFByb3BzOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdldEluaXRpYWxTdGF0ZToiREVGSU5FX01BTllfTUVSR0VEIixnZXRDaGlsZENvbnRleHQ6IkRFRklORV9NQU5ZX01FUkdFRCIscmVuZGVyOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50RGlkTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiJERUZJTkVfTUFOWSIsc2hvdWxkQ29tcG9uZW50VXBkYXRlOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudFdpbGxVbm1vdW50OiJERUZJTkVfTUFOWSIsVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudDoiREVGSU5FX01BTlkiLFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiJERUZJTkVfTUFOWSIsVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGU6IkRFRklORV9NQU5ZIix1cGRhdGVDb21wb25lbnQ6Ik9WRVJSSURFX0JBU0UifSxFPXtnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IkRFRklORV9NQU5ZX01FUkdFRCJ9LHk9e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUsdCl7ZS5kaXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXUoZSx0W25dKX0sY2hpbGRDb250ZXh0VHlwZXM6ZnVuY3Rpb24oZSx0KXtlLmNoaWxkQ29udGV4dFR5cGVzPXMoe30sZS5jaGlsZENvbnRleHRUeXBlcyx0KX0sY29udGV4dFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5jb250ZXh0VHlwZXM9cyh7fSxlLmNvbnRleHRUeXBlcyx0KX0sZ2V0RGVmYXVsdFByb3BzOmZ1bmN0aW9uKGUsdCl7ZS5nZXREZWZhdWx0UHJvcHM/ZS5nZXREZWZhdWx0UHJvcHM9XyhlLmdldERlZmF1bHRQcm9wcyx0KTplLmdldERlZmF1bHRQcm9wcz10fSxwcm9wVHlwZXM6ZnVuY3Rpb24oZSx0KXtlLnByb3BUeXBlcz1zKHt9LGUucHJvcFR5cGVzLHQpfSxzdGF0aWNzOmZ1bmN0aW9uKGUsdCl7YyhlLHQpfSxhdXRvYmluZDpmdW5jdGlvbigpe319LHY9e2NvbXBvbmVudERpZE1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX2lzTW91bnRlZD0hMH19LFQ9e2NvbXBvbmVudFdpbGxVbm1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX2lzTW91bnRlZD0hMX19LEE9e3JlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsZSx0KX0saXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9faXNNb3VudGVkfX0sQz1mdW5jdGlvbigpe307cmV0dXJuIHMoQy5wcm90b3R5cGUsZS5wcm90b3R5cGUsQSksaH12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3Mvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5T2JqZWN0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3Mvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLGw9Im1peGlucyI7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3Mvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5T2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvY3JlYXRlLXJlYWN0LWNsYXNzL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLHMsaSxhLGwpe2lmKG8odCksIWUpe3ZhciB1O2lmKHZvaWQgMD09PXQpdT1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYz1bbixyLHMsaSxhLGxdLGQ9MDt1PW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gY1tkKytdfSkpLHUubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgdS5mcmFtZXNUb1BvcD0xLHV9fXZhciBvPWZ1bmN0aW9uKGUpe307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L2ZldGNoLWJyb3dzZXItcG9seWZpbGwuanMiOmZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwvW15hLXowLTlcLSMkJSYnKisuXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYoZT1TdHJpbmcoZSkpLGV9ZnVuY3Rpb24gcihlKXt2YXIgdD17bmV4dDpmdW5jdGlvbigpe3ZhciB0PWUuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT10LHZhbHVlOnR9fX07cmV0dXJuIGcuaXRlcmFibGUmJih0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdH0pLHR9ZnVuY3Rpb24gbyhlKXt0aGlzLm1hcD17fSxlIGluc3RhbmNlb2Ygbz9lLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0aGlzLmFwcGVuZCh0LGUpfSx0aGlzKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLmFwcGVuZChlWzBdLGVbMV0pfSx0aGlzKTplJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuYXBwZW5kKHQsZVt0XSl9LHRoaXMpfWZ1bmN0aW9uIHMoZSl7aWYoZS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO2UuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxuKXtlLm9ubG9hZD1mdW5jdGlvbigpe3QoZS5yZXN1bHQpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKGUuZXJyb3IpfX0pfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9bmV3IEZpbGVSZWFkZXIsbj1pKHQpO3JldHVybiB0LnJlYWRBc0FycmF5QnVmZmVyKGUpLG59ZnVuY3Rpb24gbChlKXt2YXIgdD1uZXcgRmlsZVJlYWRlcixuPWkodCk7cmV0dXJuIHQucmVhZEFzVGV4dChlKSxufWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGUpLG49bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspbltyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3JldHVybiBuLmpvaW4oIiIpfWZ1bmN0aW9uIGMoZSl7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSgwKTt2YXIgdD1uZXcgVWludDhBcnJheShlLmJ5dGVMZW5ndGgpO3JldHVybiB0LnNldChuZXcgVWludDhBcnJheShlKSksdC5idWZmZXJ9ZnVuY3Rpb24gZCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2JvZHlJbml0PWUsZSlpZigic3RyaW5nIj09dHlwZW9mIGUpdGhpcy5fYm9keVRleHQ9ZTtlbHNlIGlmKGcuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSl0aGlzLl9ib2R5QmxvYj1lO2Vsc2UgaWYoZy5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpdGhpcy5fYm9keUZvcm1EYXRhPWU7ZWxzZSBpZihnLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKXRoaXMuX2JvZHlUZXh0PWUudG9TdHJpbmcoKTtlbHNlIGlmKGcuYXJyYXlCdWZmZXImJmcuYmxvYiYmRShlKSl0aGlzLl9ib2R5QXJyYXlCdWZmZXI9YyhlLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO2Vsc2V7aWYoIWcuYXJyYXlCdWZmZXJ8fCFBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSYmIXkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPWMoZSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD0iIjt0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KCJzdHJpbmciPT10eXBlb2YgZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOmcuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxnLmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgZT1zKHRoaXMpO2lmKGUpcmV0dXJuIGU7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/cyh0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihhKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBlPXModGhpcyk7aWYoZSlyZXR1cm4gZTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gbCh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUodSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sZy5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihmKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZS50b1VwcGVyQ2FzZSgpO3JldHVybiB2LmluZGV4T2YodCk+LTE/dDplfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj0odD10fHx7fSkuYm9keTtpZihlIGluc3RhbmNlb2YgcCl7aWYoZS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD1lLnVybCx0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHMsdC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBvKGUuaGVhZGVycykpLHRoaXMubWV0aG9kPWUubWV0aG9kLHRoaXMubW9kZT1lLm1vZGUsbnx8bnVsbD09ZS5fYm9keUluaXR8fChuPWUuX2JvZHlJbml0LGUuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGUpO2lmKHRoaXMuY3JlZGVudGlhbHM9dC5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8Im9taXQiLCF0LmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbyh0LmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1fKHQubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIpLHRoaXMubW9kZT10Lm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKCJHRVQiPT09dGhpcy5tZXRob2R8fCJIRUFEIj09PXRoaXMubWV0aG9kKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KG4pfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9bmV3IEZvcm1EYXRhO3JldHVybiBlLnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIG49ZS5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTt0LmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSx0fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9bmV3IG87cmV0dXJuIGUuc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1lLnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9pbigiOiIpLnRyaW0oKTt0LmFwcGVuZChyLG8pfX0pLHR9ZnVuY3Rpb24gaChlLHQpe3R8fCh0PXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPSJzdGF0dXMiaW4gdD90LnN0YXR1czoyMDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIHQ/dC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBvKHQuaGVhZGVycyksdGhpcy51cmw9dC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGUpfWlmKCFlLmZldGNoKXt2YXIgZz17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gZSxpdGVyYWJsZToiU3ltYm9sImluIGUmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBlJiYiQmxvYiJpbiBlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBlLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZlciJpbiBlfTtpZihnLmFycmF5QnVmZmVyKXZhciBiPVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sRT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSl9LHk9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmYi5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSk+LTF9O28ucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHIpe2U9dChlKSxyPW4ocik7dmFyIG89dGhpcy5tYXBbZV07dGhpcy5tYXBbZV09bz9vKyIsIityOnJ9LG8ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5tYXBbdChlKV19LG8ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gZT10KGUpLHRoaXMuaGFzKGUpP3RoaXMubWFwW2VdOm51bGx9LG8ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkodChlKSl9LG8ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHIpe3RoaXMubWFwW3QoZSldPW4ocil9LG8ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobikmJmUuY2FsbCh0LHRoaXMubWFwW25dLG4sdGhpcyl9LG8ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfSkscihlKX0sby5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxyKGUpfSxvLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LG4pe2UucHVzaChbbix0XSl9KSxyKGUpfSxnLml0ZXJhYmxlJiYoby5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1vLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgdj1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO3AucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sZC5jYWxsKHAucHJvdG90eXBlKSxkLmNhbGwoaC5wcm90b3R5cGUpLGgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgbyh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxoLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGgobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiBlLnR5cGU9ImVycm9yIixlfTt2YXIgVD1bMzAxLDMwMiwzMDMsMzA3LDMwOF07aC5yZWRpcmVjdD1mdW5jdGlvbihlLHQpe2lmKC0xPT09VC5pbmRleE9mKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBoKG51bGwse3N0YXR1czp0LGhlYWRlcnM6e2xvY2F0aW9uOmV9fSl9LGUuSGVhZGVycz1vLGUuUmVxdWVzdD1wLGUuUmVzcG9uc2U9aCxlLmZldGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4scil7dmFyIG89bmV3IHAoZSx0KSxzPW5ldyBYTUxIdHRwUmVxdWVzdDtzLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPXtzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczptKHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07ZS51cmw9InJlc3BvbnNlVVJMImluIHM/cy5yZXNwb25zZVVSTDplLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIHQ9InJlc3BvbnNlImluIHM/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dDtuKG5ldyBoKHQsZSkpfSxzLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LHMub250aW1lb3V0PWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxzLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJpbmNsdWRlIj09PW8uY3JlZGVudGlhbHMmJihzLndpdGhDcmVkZW50aWFscz0hMCksInJlc3BvbnNlVHlwZSJpbiBzJiZnLmJsb2ImJihzLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7cy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSxzLnNlbmQodm9pZCAwPT09by5fYm9keUluaXQ/bnVsbDpvLl9ib2R5SW5pdCl9KX0sZS5mZXRjaC5wb2x5ZmlsbD0hMH19KCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSwiLi9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9mZXRjaC1icm93c2VyLmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XC0jJCUmJyorLlxeX2B8fl0vaS50ZXN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBuKGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9e25leHQ6ZnVuY3Rpb24oKXt2YXIgdD1lLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09dCx2YWx1ZTp0fX19O3JldHVybiBnLml0ZXJhYmxlJiYodFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9KSx0fWZ1bmN0aW9uIG8oZSl7dGhpcy5tYXA9e30sZSBpbnN0YW5jZW9mIG8/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dGhpcy5hcHBlbmQodCxlKX0sdGhpcyk6QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5hcHBlbmQoZVswXSxlWzFdKX0sdGhpcyk6ZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0LGVbdF0pfSx0aGlzKX1mdW5jdGlvbiBzKGUpe2lmKGUuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTtlLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5vbmxvYWQ9ZnVuY3Rpb24oKXt0KGUucmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7bihlLmVycm9yKX19KX1mdW5jdGlvbiBhKGUpe3ZhciB0PW5ldyBGaWxlUmVhZGVyLG49aSh0KTtyZXR1cm4gdC5yZWFkQXNBcnJheUJ1ZmZlcihlKSxufWZ1bmN0aW9uIGwoZSl7dmFyIHQ9bmV3IEZpbGVSZWFkZXIsbj1pKHQpO3JldHVybiB0LnJlYWRBc1RleHQoZSksbn1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlKSxuPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKTtyZXR1cm4gbi5qb2luKCIiKX1mdW5jdGlvbiBjKGUpe2lmKGUuc2xpY2UpcmV0dXJuIGUuc2xpY2UoMCk7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gdC5zZXQobmV3IFVpbnQ4QXJyYXkoZSkpLHQuYnVmZmVyfWZ1bmN0aW9uIGQoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihlKXtpZih0aGlzLl9ib2R5SW5pdD1lLGUpaWYoInN0cmluZyI9PXR5cGVvZiBlKXRoaXMuX2JvZHlUZXh0PWU7ZWxzZSBpZihnLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpdGhpcy5fYm9keUJsb2I9ZTtlbHNlIGlmKGcuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKXRoaXMuX2JvZHlGb3JtRGF0YT1lO2Vsc2UgaWYoZy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSl0aGlzLl9ib2R5VGV4dD1lLnRvU3RyaW5nKCk7ZWxzZSBpZihnLmFycmF5QnVmZmVyJiZnLmJsb2ImJkUoZSkpdGhpcy5fYm9keUFycmF5QnVmZmVyPWMoZS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFnLmFycmF5QnVmZmVyfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkmJiF5KGUpKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZSIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1jKGUpfWVsc2UgdGhpcy5fYm9keVRleHQ9IiI7dGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCgic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpnLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sZy5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGU9cyh0aGlzKTtpZihlKXJldHVybiBlO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP3ModGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oYSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgZT1zKHRoaXMpO2lmKGUpcmV0dXJuIGU7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIGwodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHUodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGcuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZil9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31mdW5jdGlvbiBfKGUpe3ZhciB0PWUudG9VcHBlckNhc2UoKTtyZXR1cm4gdi5pbmRleE9mKHQpPi0xP3Q6ZX1mdW5jdGlvbiBwKGUsdCl7dmFyIG49KHQ9dHx8e30pLmJvZHk7aWYoZSBpbnN0YW5jZW9mIHApe2lmKGUuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9ZS51cmwsdGhpcy5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzLHQuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbyhlLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1lLm1ldGhvZCx0aGlzLm1vZGU9ZS5tb2RlLG58fG51bGw9PWUuX2JvZHlJbml0fHwobj1lLl9ib2R5SW5pdCxlLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhlKTtpZih0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJvbWl0IiwhdC5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG8odC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9Xyh0Lm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiKSx0aGlzLm1vZGU9dC5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShuKX1mdW5jdGlvbiBmKGUpe3ZhciB0PW5ldyBGb3JtRGF0YTtyZXR1cm4gZS50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciBuPWUuc3BsaXQoIj0iKSxyPW4uc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIiksbz1uLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7dC5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KHIpLGRlY29kZVVSSUNvbXBvbmVudChvKSl9fSksdH1mdW5jdGlvbiBtKGUpe3ZhciB0PW5ldyBvO3JldHVybiBlLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdCgiOiIpLHI9bi5zaGlmdCgpLnRyaW0oKTtpZihyKXt2YXIgbz1uLmpvaW4oIjoiKS50cmltKCk7dC5hcHBlbmQocixvKX19KSx0fWZ1bmN0aW9uIGgoZSx0KXt0fHwodD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz0ic3RhdHVzImluIHQ/dC5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD0ic3RhdHVzVGV4dCJpbiB0P3Quc3RhdHVzVGV4dDoiT0siLHRoaXMuaGVhZGVycz1uZXcgbyh0LmhlYWRlcnMpLHRoaXMudXJsPXQudXJsfHwiIix0aGlzLl9pbml0Qm9keShlKX1pZighZS5mZXRjaCl7dmFyIGc9e3NlYXJjaFBhcmFtczoiVVJMU2VhcmNoUGFyYW1zImluIGUsaXRlcmFibGU6IlN5bWJvbCJpbiBlJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGJsb2I6IkZpbGVSZWFkZXIiaW4gZSYmIkJsb2IiaW4gZSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmb3JtRGF0YToiRm9ybURhdGEiaW4gZSxhcnJheUJ1ZmZlcjoiQXJyYXlCdWZmZXIiaW4gZX07aWYoZy5hcnJheUJ1ZmZlcil2YXIgYj1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpfSx5PUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmIuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpPi0xfTtvLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSxyKXtlPXQoZSkscj1uKHIpO3ZhciBvPXRoaXMubWFwW2VdO3RoaXMubWFwW2VdPW8/bysiLCIrcjpyfSxvLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMubWFwW3QoZSldfSxvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dChlKSx0aGlzLmhhcyhlKT90aGlzLm1hcFtlXTpudWxsfSxvLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KHQoZSkpfSxvLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSxyKXt0aGlzLm1hcFt0KGUpXT1uKHIpfSxvLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KG4pJiZlLmNhbGwodCx0aGlzLm1hcFtuXSxuLHRoaXMpfSxvLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LG4pe2UucHVzaChuKX0pLHIoZSl9LG8ucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSkscihlKX0sby5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxuKXtlLnB1c2goW24sdF0pfSkscihlKX0sZy5pdGVyYWJsZSYmKG8ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09by5wcm90b3R5cGUuZW50cmllcyk7dmFyIHY9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtwLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcCh0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGQuY2FsbChwLnByb3RvdHlwZSksZC5jYWxsKGgucHJvdG90eXBlKSxoLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaCh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IG8odGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0saC5lcnJvcj1mdW5jdGlvbigpe3ZhciBlPW5ldyBoKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gZS50eXBlPSJlcnJvciIsZX07dmFyIFQ9WzMwMSwzMDIsMzAzLDMwNywzMDhdO2gucmVkaXJlY3Q9ZnVuY3Rpb24oZSx0KXtpZigtMT09PVQuaW5kZXhPZih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgaChudWxsLHtzdGF0dXM6dCxoZWFkZXJzOntsb2NhdGlvbjplfX0pfSxlLkhlYWRlcnM9byxlLlJlcXVlc3Q9cCxlLlJlc3BvbnNlPWgsZS5mZXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyBwKGUsdCkscz1uZXcgWE1MSHR0cFJlcXVlc3Q7cy5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT17c3RhdHVzOnMuc3RhdHVzLHN0YXR1c1RleHQ6cy5zdGF0dXNUZXh0LGhlYWRlcnM6bShzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O2UudXJsPSJyZXNwb25zZVVSTCJpbiBzP3MucmVzcG9uc2VVUkw6ZS5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciB0PSJyZXNwb25zZSJpbiBzP3MucmVzcG9uc2U6cy5yZXNwb25zZVRleHQ7bihuZXcgaCh0LGUpKX0scy5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0scy5vcGVuKG8ubWV0aG9kLG8udXJsLCEwKSwiaW5jbHVkZSI9PT1vLmNyZWRlbnRpYWxzJiYocy53aXRoQ3JlZGVudGlhbHM9ITApLCJyZXNwb25zZVR5cGUiaW4gcyYmZy5ibG9iJiYocy5yZXNwb25zZVR5cGU9ImJsb2IiKSxvLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3Muc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkscy5zZW5kKHZvaWQgMD09PW8uX2JvZHlJbml0P251bGw6by5fYm9keUluaXQpfSl9LGUuZmV0Y2gucG9seWZpbGw9ITB9fSh2b2lkIDAhPT1uP246dGhpcyksZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9jc3MtYW5pbWF0aW9uL2VzL0V2ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0aW9uIG8oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfXZhciBzPXt0cmFuc2l0aW9uc3RhcnQ6e3RyYW5zaXRpb246InRyYW5zaXRpb25zdGFydCIsV2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvblN0YXJ0IixNb3pUcmFuc2l0aW9uOiJtb3pUcmFuc2l0aW9uU3RhcnQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvblN0YXJ0Iixtc1RyYW5zaXRpb246Ik1TVHJhbnNpdGlvblN0YXJ0In0sYW5pbWF0aW9uc3RhcnQ6e2FuaW1hdGlvbjoiYW5pbWF0aW9uc3RhcnQiLFdlYmtpdEFuaW1hdGlvbjoid2Via2l0QW5pbWF0aW9uU3RhcnQiLE1vekFuaW1hdGlvbjoibW96QW5pbWF0aW9uU3RhcnQiLE9BbmltYXRpb246Im9BbmltYXRpb25TdGFydCIsbXNBbmltYXRpb246Ik1TQW5pbWF0aW9uU3RhcnQifX0saT17dHJhbnNpdGlvbmVuZDp7dHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsV2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoibW96VHJhbnNpdGlvbkVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIixtc1RyYW5zaXRpb246Ik1TVHJhbnNpdGlvbkVuZCJ9LGFuaW1hdGlvbmVuZDp7YW5pbWF0aW9uOiJhbmltYXRpb25lbmQiLFdlYmtpdEFuaW1hdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pBbmltYXRpb246Im1vekFuaW1hdGlvbkVuZCIsT0FuaW1hdGlvbjoib0FuaW1hdGlvbkVuZCIsbXNBbmltYXRpb246Ik1TQW5pbWF0aW9uRW5kIn19LGE9W10sbD1bXTsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG89ZVtyXTtmb3IodmFyIHMgaW4gbylpZihzIGluIG4pe3QucHVzaChvW3NdKTticmVha319fXZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5zdHlsZTsiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIHMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uLGRlbGV0ZSBpLmFuaW1hdGlvbmVuZC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIHMudHJhbnNpdGlvbnN0YXJ0LnRyYW5zaXRpb24sZGVsZXRlIGkudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKSxlKHMsYSksZShpLGwpfSgpO3ZhciB1PXtzdGFydEV2ZW50czphLGFkZFN0YXJ0RXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cuc2V0VGltZW91dCh0LDApO2EuZm9yRWFjaChmdW5jdGlvbihuKXtyKGUsbix0KX0pfSxyZW1vdmVTdGFydEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXswIT09YS5sZW5ndGgmJmEuZm9yRWFjaChmdW5jdGlvbihuKXtvKGUsbix0KX0pfSxlbmRFdmVudHM6bCxhZGRFbmRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoMD09PWwubGVuZ3RoKXJldHVybiB2b2lkIHdpbmRvdy5zZXRUaW1lb3V0KHQsMCk7bC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3IoZSxuLHQpfSl9LHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXswIT09bC5sZW5ndGgmJmwuZm9yRWFjaChmdW5jdGlvbihuKXtvKGUsbix0KX0pfX07dC5hPXV9LCIuL25vZGVfbW9kdWxlcy9jc3MtYW5pbWF0aW9uL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKSxyPSIiLG89MDtvPHAubGVuZ3RoJiYhKHI9bi5nZXRQcm9wZXJ0eVZhbHVlKHBbb10rdCkpO28rKyk7cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXtpZihkKXt2YXIgdD1wYXJzZUZsb2F0KHIoZSwidHJhbnNpdGlvbi1kZWxheSIpKXx8MCxuPXBhcnNlRmxvYXQocihlLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIikpfHwwLG89cGFyc2VGbG9hdChyKGUsImFuaW1hdGlvbi1kZWxheSIpKXx8MCxzPXBhcnNlRmxvYXQocihlLCJhbmltYXRpb24tZHVyYXRpb24iKSl8fDAsaT1NYXRoLm1heChuK3QscytvKTtlLnJjRW5kQW5pbVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UucmNFbmRBbmltVGltZW91dD1udWxsLGUucmNFbmRMaXN0ZW5lciYmZS5yY0VuZExpc3RlbmVyKCl9LDFlMyppKzIwMCl9fWZ1bmN0aW9uIHMoZSl7ZS5yY0VuZEFuaW1UaW1lb3V0JiYoY2xlYXJUaW1lb3V0KGUucmNFbmRBbmltVGltZW91dCksZS5yY0VuZEFuaW1UaW1lb3V0PW51bGwpfW4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIpLGE9bi5uKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY3NzLWFuaW1hdGlvbi9lcy9FdmVudC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWNsYXNzZXMvaW5kZXguanMiKSxjPW4ubih1KSxkPTAhPT1sLmEuZW5kRXZlbnRzLmxlbmd0aCxfPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0scD1bIi13ZWJraXQtIiwiLW1vei0iLCItby0iLCJtcy0iLCIiXSxmPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOmEoKSh0KSksaT1yP3QubmFtZTp0LHU9cj90LmFjdGl2ZTp0KyItYWN0aXZlIixkPW4sXz12b2lkIDAscD12b2lkIDAsZj1jKCkoZSk7cmV0dXJuIG4mJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pJiYoZD1uLmVuZCxfPW4uc3RhcnQscD1uLmFjdGl2ZSksZS5yY0VuZExpc3RlbmVyJiZlLnJjRW5kTGlzdGVuZXIoKSxlLnJjRW5kTGlzdGVuZXI9ZnVuY3Rpb24odCl7dCYmdC50YXJnZXQhPT1lfHwoZS5yY0FuaW1UaW1lb3V0JiYoY2xlYXJUaW1lb3V0KGUucmNBbmltVGltZW91dCksZS5yY0FuaW1UaW1lb3V0PW51bGwpLHMoZSksZi5yZW1vdmUoaSksZi5yZW1vdmUodSksbC5hLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIoZSxlLnJjRW5kTGlzdGVuZXIpLGUucmNFbmRMaXN0ZW5lcj1udWxsLGQmJmQoKSl9LGwuYS5hZGRFbmRFdmVudExpc3RlbmVyKGUsZS5yY0VuZExpc3RlbmVyKSxfJiZfKCksZi5hZGQoaSksZS5yY0FuaW1UaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnJjQW5pbVRpbWVvdXQ9bnVsbCxmLmFkZCh1KSxwJiZzZXRUaW1lb3V0KHAsMCksbyhlKX0sMzApLHtzdG9wOmZ1bmN0aW9uKCl7ZS5yY0VuZExpc3RlbmVyJiZlLnJjRW5kTGlzdGVuZXIoKX19fTtmLnN0eWxlPWZ1bmN0aW9uKGUsdCxuKXtlLnJjRW5kTGlzdGVuZXImJmUucmNFbmRMaXN0ZW5lcigpLGUucmNFbmRMaXN0ZW5lcj1mdW5jdGlvbih0KXt0JiZ0LnRhcmdldCE9PWV8fChlLnJjQW5pbVRpbWVvdXQmJihjbGVhclRpbWVvdXQoZS5yY0FuaW1UaW1lb3V0KSxlLnJjQW5pbVRpbWVvdXQ9bnVsbCkscyhlKSxsLmEucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihlLGUucmNFbmRMaXN0ZW5lciksZS5yY0VuZExpc3RlbmVyPW51bGwsbiYmbigpKX0sbC5hLmFkZEVuZEV2ZW50TGlzdGVuZXIoZSxlLnJjRW5kTGlzdGVuZXIpLGUucmNBbmltVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGUuc3R5bGVbbl09dFtuXSk7ZS5yY0FuaW1UaW1lb3V0PW51bGwsbyhlKX0sMCl9LGYuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dCxvPW47dm9pZCAwPT09biYmKG89cixyPSIiKSxyPXJ8fCIiLF8uZm9yRWFjaChmdW5jdGlvbih0KXtlLnN0eWxlW3QrIlRyYW5zaXRpb24iK3JdPW99KX0sZi5pc0Nzc0FuaW1hdGlvblN1cHBvcnRlZD1kLHQuYT1mfSwiLi9ub2RlX21vZHVsZXMvY3NzLWluLWpzLXV0aWxzL2xpYi9oeXBoZW5hdGVQcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigwLHMuZGVmYXVsdCkoZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2h5cGhlbmF0ZS1zdHlsZS1uYW1lL2luZGV4LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9jc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmby50ZXN0KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz0vLXdlYmtpdC18LW1vei18LW1zLS87ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2Nzcy5lc2NhcGUvY3NzLmVzY2FwZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bih0KX0odm9pZCAwIT09dD90OnRoaXMsZnVuY3Rpb24oZSl7aWYoZS5DU1MmJmUuQ1NTLmVzY2FwZSlyZXR1cm4gZS5DU1MuZXNjYXBlO3ZhciB0PWZ1bmN0aW9uKGUpe2lmKDA9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiYENTUy5lc2NhcGVgIHJlcXVpcmVzIGFuIGFyZ3VtZW50LiIpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxyPW4ubGVuZ3RoLG89LTEscz0iIixpPW4uY2hhckNvZGVBdCgwKTsrK288cjspdD1uLmNoYXJDb2RlQXQobykscys9MCE9dD90Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT1vJiZ0Pj00OCYmdDw9NTd8fDE9PW8mJnQ+PTQ4JiZ0PD01NyYmNDU9PWk/IlxcIit0LnRvU3RyaW5nKDE2KSsiICI6KDAhPW98fDEhPXJ8fDQ1IT10KSYmKHQ+PTEyOHx8NDU9PXR8fDk1PT10fHx0Pj00OCYmdDw9NTd8fHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMik/bi5jaGFyQXQobyk6IlxcIituLmNoYXJBdChvKToi77+9IjtyZXR1cm4gc307cmV0dXJuIGUuQ1NTfHwoZS5DU1M9e30pLGUuQ1NTLmVzY2FwZT10LHR9KX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvY3NzL2xpYi9wYXJzZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBlP2UucmVwbGFjZSgvXlxzK3xccyskL2csIiIpOiIifWZ1bmN0aW9uIHIoZSx0KXt2YXIgbj1lJiYic3RyaW5nIj09dHlwZW9mIGUudHlwZSxvPW4/ZTp0O2Zvcih2YXIgcyBpbiBlKXt2YXIgaT1lW3NdO0FycmF5LmlzQXJyYXkoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IoZSxvKX0pOmkmJiJvYmplY3QiPT10eXBlb2YgaSYmcihpLG8pfXJldHVybiBuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicGFyZW50Iix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dHx8bnVsbH0pLGV9dmFyIG89L1wvXCpbXipdKlwqKyhbXlwvKl1bXipdKlwqKykqXC8vZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBzKGUpe3ZhciB0PWUubWF0Y2goL1xuL2cpO3QmJihEKz10Lmxlbmd0aCk7dmFyIG49ZS5sYXN0SW5kZXhPZigiXG4iKTt3PX5uP2UubGVuZ3RoLW46dytlLmxlbmd0aH1mdW5jdGlvbiBpKCl7dmFyIGU9e2xpbmU6RCxjb2x1bW46d307cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc2l0aW9uPW5ldyBhKGUpLHAoKSx0fX1mdW5jdGlvbiBhKGUpe3RoaXMuc3RhcnQ9ZSx0aGlzLmVuZD17bGluZTpELGNvbHVtbjp3fSx0aGlzLnNvdXJjZT10LnNvdXJjZX1mdW5jdGlvbiBsKG4pe3ZhciByPW5ldyBFcnJvcih0LnNvdXJjZSsiOiIrRCsiOiIrdysiOiAiK24pO2lmKHIucmVhc29uPW4sci5maWxlbmFtZT10LnNvdXJjZSxyLmxpbmU9RCxyLmNvbHVtbj13LHIuc291cmNlPWUsIXQuc2lsZW50KXRocm93IHI7TS5wdXNoKHIpfWZ1bmN0aW9uIHUoKXtyZXR1cm4gXygvXntccyovKX1mdW5jdGlvbiBjKCl7cmV0dXJuIF8oL159Lyl9ZnVuY3Rpb24gZCgpe3ZhciB0LG49W107Zm9yKHAoKSxmKG4pO2UubGVuZ3RoJiYifSIhPWUuY2hhckF0KDApJiYodD14KCl8fEwoKSk7KSExIT09dCYmKG4ucHVzaCh0KSxmKG4pKTtyZXR1cm4gbn1mdW5jdGlvbiBfKHQpe3ZhciBuPXQuZXhlYyhlKTtpZihuKXt2YXIgcj1uWzBdO3JldHVybiBzKHIpLGU9ZS5zbGljZShyLmxlbmd0aCksbn19ZnVuY3Rpb24gcCgpe18oL15ccyovKX1mdW5jdGlvbiBmKGUpe3ZhciB0O2ZvcihlPWV8fFtdO3Q9bSgpOykhMSE9PXQmJmUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBtKCl7dmFyIHQ9aSgpO2lmKCIvIj09ZS5jaGFyQXQoMCkmJiIqIj09ZS5jaGFyQXQoMSkpe2Zvcih2YXIgbj0yOyIiIT1lLmNoYXJBdChuKSYmKCIqIiE9ZS5jaGFyQXQobil8fCIvIiE9ZS5jaGFyQXQobisxKSk7KSsrbjtpZihuKz0yLCIiPT09ZS5jaGFyQXQobi0xKSlyZXR1cm4gbCgiRW5kIG9mIGNvbW1lbnQgbWlzc2luZyIpO3ZhciByPWUuc2xpY2UoMixuLTIpO3JldHVybiB3Kz0yLHMociksZT1lLnNsaWNlKG4pLHcrPTIsdCh7dHlwZToiY29tbWVudCIsY29tbWVudDpyfSl9fWZ1bmN0aW9uIGgoKXt2YXIgZT1fKC9eKFtee10rKS8pO2lmKGUpcmV0dXJuIG4oZVswXSkucmVwbGFjZSgvXC9cKihbXipdfFtcclxuXXwoXCorKFteKlwvXXxbXHJcbl0pKSkqXCpcLysvZywiIikucmVwbGFjZSgvIig/OlxcInxbXiJdKSoifCcoPzpcXCd8W14nXSkqJy9nLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywi4oCMIil9KS5zcGxpdCgvXHMqKD8hW14oXSpcKSksXHMqLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1x1MjAwQy9nLCIsIil9KX1mdW5jdGlvbiBnKCl7dmFyIGU9aSgpLHQ9XygvXihcKj9bLSNcL1wqXFxcd10rKFxbWzAtOWEtel8tXStcXSk/KVxzKi8pO2lmKHQpe2lmKHQ9bih0WzBdKSwhXygvXjpccyovKSlyZXR1cm4gbCgicHJvcGVydHkgbWlzc2luZyAnOiciKTt2YXIgcj1fKC9eKCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteXCldKj9cKXxbXn07XSkrKS8pLHM9ZSh7dHlwZToiZGVjbGFyYXRpb24iLHByb3BlcnR5OnQucmVwbGFjZShvLCIiKSx2YWx1ZTpyP24oclswXSkucmVwbGFjZShvLCIiKToiIn0pO3JldHVybiBfKC9eWztcc10qLyksc319ZnVuY3Rpb24gYigpe3ZhciBlPVtdO2lmKCF1KCkpcmV0dXJuIGwoIm1pc3NpbmcgJ3snIik7ZihlKTtmb3IodmFyIHQ7dD1nKCk7KSExIT09dCYmKGUucHVzaCh0KSxmKGUpKTtyZXR1cm4gYygpP2U6bCgibWlzc2luZyAnfSciKX1mdW5jdGlvbiBFKCl7Zm9yKHZhciBlLHQ9W10sbj1pKCk7ZT1fKC9eKChcZCtcLlxkK3xcLlxkK3xcZCspJT98W2Etel0rKVxzKi8pOyl0LnB1c2goZVsxXSksXygvXixccyovKTtpZih0Lmxlbmd0aClyZXR1cm4gbih7dHlwZToia2V5ZnJhbWUiLHZhbHVlczp0LGRlY2xhcmF0aW9uczpiKCl9KX1mdW5jdGlvbiB5KCl7dmFyIGU9aSgpLHQ9XygvXkAoWy1cd10rKT9rZXlmcmFtZXNccyovKTtpZih0KXt2YXIgbj10WzFdLHQ9XygvXihbLVx3XSspXHMqLyk7aWYoIXQpcmV0dXJuIGwoIkBrZXlmcmFtZXMgbWlzc2luZyBuYW1lIik7dmFyIHI9dFsxXTtpZighdSgpKXJldHVybiBsKCJAa2V5ZnJhbWVzIG1pc3NpbmcgJ3snIik7Zm9yKHZhciBvLHM9ZigpO289RSgpOylzLnB1c2gobykscz1zLmNvbmNhdChmKCkpO3JldHVybiBjKCk/ZSh7dHlwZToia2V5ZnJhbWVzIixuYW1lOnIsdmVuZG9yOm4sa2V5ZnJhbWVzOnN9KTpsKCJAa2V5ZnJhbWVzIG1pc3NpbmcgJ30nIil9fWZ1bmN0aW9uIHYoKXt2YXIgZT1pKCksdD1fKC9eQHN1cHBvcnRzICooW157XSspLyk7aWYodCl7dmFyIHI9bih0WzFdKTtpZighdSgpKXJldHVybiBsKCJAc3VwcG9ydHMgbWlzc2luZyAneyciKTt2YXIgbz1mKCkuY29uY2F0KGQoKSk7cmV0dXJuIGMoKT9lKHt0eXBlOiJzdXBwb3J0cyIsc3VwcG9ydHM6cixydWxlczpvfSk6bCgiQHN1cHBvcnRzIG1pc3NpbmcgJ30nIil9fWZ1bmN0aW9uIFQoKXt2YXIgZT1pKCk7aWYoXygvXkBob3N0XHMqLykpe2lmKCF1KCkpcmV0dXJuIGwoIkBob3N0IG1pc3NpbmcgJ3snIik7dmFyIHQ9ZigpLmNvbmNhdChkKCkpO3JldHVybiBjKCk/ZSh7dHlwZToiaG9zdCIscnVsZXM6dH0pOmwoIkBob3N0IG1pc3NpbmcgJ30nIil9fWZ1bmN0aW9uIEEoKXt2YXIgZT1pKCksdD1fKC9eQG1lZGlhICooW157XSspLyk7aWYodCl7dmFyIHI9bih0WzFdKTtpZighdSgpKXJldHVybiBsKCJAbWVkaWEgbWlzc2luZyAneyciKTt2YXIgbz1mKCkuY29uY2F0KGQoKSk7cmV0dXJuIGMoKT9lKHt0eXBlOiJtZWRpYSIsbWVkaWE6cixydWxlczpvfSk6bCgiQG1lZGlhIG1pc3NpbmcgJ30nIil9fWZ1bmN0aW9uIEMoKXt2YXIgZT1pKCksdD1fKC9eQGN1c3RvbS1tZWRpYVxzKygtLVteXHNdKylccyooW157O10rKTsvKTtpZih0KXJldHVybiBlKHt0eXBlOiJjdXN0b20tbWVkaWEiLG5hbWU6bih0WzFdKSxtZWRpYTpuKHRbMl0pfSl9ZnVuY3Rpb24gTygpe3ZhciBlPWkoKTtpZihfKC9eQHBhZ2UgKi8pKXt2YXIgdD1oKCl8fFtdO2lmKCF1KCkpcmV0dXJuIGwoIkBwYWdlIG1pc3NpbmcgJ3snIik7Zm9yKHZhciBuLHI9ZigpO249ZygpOylyLnB1c2gobikscj1yLmNvbmNhdChmKCkpO3JldHVybiBjKCk/ZSh7dHlwZToicGFnZSIsc2VsZWN0b3JzOnQsZGVjbGFyYXRpb25zOnJ9KTpsKCJAcGFnZSBtaXNzaW5nICd9JyIpfX1mdW5jdGlvbiBTKCl7dmFyIGU9aSgpLHQ9XygvXkAoWy1cd10rKT9kb2N1bWVudCAqKFtee10rKS8pO2lmKHQpe3ZhciByPW4odFsxXSksbz1uKHRbMl0pO2lmKCF1KCkpcmV0dXJuIGwoIkBkb2N1bWVudCBtaXNzaW5nICd7JyIpO3ZhciBzPWYoKS5jb25jYXQoZCgpKTtyZXR1cm4gYygpP2Uoe3R5cGU6ImRvY3VtZW50Iixkb2N1bWVudDpvLHZlbmRvcjpyLHJ1bGVzOnN9KTpsKCJAZG9jdW1lbnQgbWlzc2luZyAnfSciKX19ZnVuY3Rpb24gUigpe3ZhciBlPWkoKTtpZihfKC9eQGZvbnQtZmFjZVxzKi8pKXtpZighdSgpKXJldHVybiBsKCJAZm9udC1mYWNlIG1pc3NpbmcgJ3snIik7Zm9yKHZhciB0LG49ZigpO3Q9ZygpOyluLnB1c2godCksbj1uLmNvbmNhdChmKCkpO3JldHVybiBjKCk/ZSh7dHlwZToiZm9udC1mYWNlIixkZWNsYXJhdGlvbnM6bn0pOmwoIkBmb250LWZhY2UgbWlzc2luZyAnfSciKX19ZnVuY3Rpb24gaihlKXt2YXIgdD1uZXcgUmVnRXhwKCJeQCIrZSsiXFxzKihbXjtdKyk7Iik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49aSgpLHI9Xyh0KTtpZihyKXt2YXIgbz17dHlwZTplfTtyZXR1cm4gb1tlXT1yWzFdLnRyaW0oKSxuKG8pfX19ZnVuY3Rpb24geCgpe2lmKCJAIj09ZVswXSlyZXR1cm4geSgpfHxBKCl8fEMoKXx8digpfHxrKCl8fEkoKXx8UCgpfHxTKCl8fE8oKXx8VCgpfHxSKCl9ZnVuY3Rpb24gTCgpe3ZhciBlPWkoKSx0PWgoKTtyZXR1cm4gdD8oZigpLGUoe3R5cGU6InJ1bGUiLHNlbGVjdG9yczp0LGRlY2xhcmF0aW9uczpiKCl9KSk6bCgic2VsZWN0b3IgbWlzc2luZyIpfXQ9dHx8e307dmFyIEQ9MSx3PTE7YS5wcm90b3R5cGUuY29udGVudD1lO3ZhciBNPVtdLGs9aigiaW1wb3J0IiksST1qKCJjaGFyc2V0IiksUD1qKCJuYW1lc3BhY2UiKTtyZXR1cm4gcihmdW5jdGlvbigpe3ZhciBlPWQoKTtyZXR1cm57dHlwZToic3R5bGVzaGVldCIsc3R5bGVzaGVldDp7c291cmNlOnQuc291cmNlLHJ1bGVzOmUscGFyc2luZ0Vycm9yczpNfX19KCkpfX0sIi4vbm9kZV9tb2R1bGVzL2QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9hc3NpZ24vaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9pcy1jYWxsYWJsZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucy9pbmRleC5qcyIpO3I9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLGwsdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIGU/KGw9dCx0PWUsZT1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT1lPyhuPWk9ITAscj0hMSk6KG49YS5jYWxsKGUsImMiKSxyPWEuY2FsbChlLCJlIiksaT1hLmNhbGwoZSwidyIpKSx1PXt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTpuLGVudW1lcmFibGU6cix3cml0YWJsZTppfSxsP28ocyhsKSx1KTp1fSxyLmdzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixsLHUsYztyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/KHU9bixuPXQsdD1lLGU9bnVsbCk6dT1hcmd1bWVudHNbM10sbnVsbD09dD90PXZvaWQgMDppKHQpP251bGw9PW4/bj12b2lkIDA6aShuKXx8KHU9bixuPXZvaWQgMCk6KHU9dCx0PW49dm9pZCAwKSxudWxsPT1lPyhyPSEwLGw9ITEpOihyPWEuY2FsbChlLCJjIiksbD1hLmNhbGwoZSwiZSIpKSxjPXtnZXQ6dCxzZXQ6bixjb25maWd1cmFibGU6cixlbnVtZXJhYmxlOmx9LHU/byhzKHUpLGMpOmN9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1BcnJheS5wcm90b3R5cGUsbz1yLnNsaWNlLHM9ci5tYXB9LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMiKSxzPU9iamVjdChvLmEpKHIuYSksaT1zLnJpZ2h0LGE9cy5sZWZ0O3QuYz1pfSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdChvLmEpKGUodCksbil9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanMiKTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLmxlbmd0aCYmKGU9cihlKSkse2xlZnQ6ZnVuY3Rpb24odCxuLHIsbyl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PW8mJihvPXQubGVuZ3RoKTtyPG87KXt2YXIgcz1yK28+Pj4xO2UodFtzXSxuKTwwP3I9cysxOm89c31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxuLHIsbyl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PW8mJihvPXQubGVuZ3RoKTtyPG87KXt2YXIgcz1yK28+Pj4xO2UodFtzXSxuKT4wP289czpyPXMrMX1yZXR1cm4gcn19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jb25zdGFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanMiKTt0LmE9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHMsaSxhLGw9ZS5sZW5ndGgsdT10Lmxlbmd0aCxjPW5ldyBBcnJheShsKnUpO2ZvcihudWxsPT1uJiYobj1yLmIpLG89aT0wO288bDsrK28pZm9yKGE9ZVtvXSxzPTA7czx1OysrcywrK2kpY1tpXT1uKGEsdFtzXSk7cmV0dXJuIGN9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzIik7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0KHIuYSkoZSx0KTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzPWUubGVuZ3RoLGk9LTE7aWYobnVsbD09dCl7Zm9yKDsrK2k8czspaWYobnVsbCE9KG49ZVtpXSkmJm4+PW4pZm9yKHI9bz1uOysraTxzOyludWxsIT0obj1lW2ldKSYmKHI+biYmKHI9biksbzxuJiYobz1uKSl9ZWxzZSBmb3IoOysraTxzOylpZihudWxsIT0obj10KGVbaV0saSxlKSkmJm4+PW4pZm9yKHI9bz1uOysraTxzOyludWxsIT0obj10KGVbaV0saSxlKSkmJihyPm4mJihyPW4pLG88biYmKG89bikpO3JldHVybltyLG9dfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9oaXN0b2dyYW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FycmF5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvY29uc3RhbnQuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pZGVudGl0eS5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHIscyxpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpO2ZvcihyPTA7cjxpOysrcilhW3JdPXQoZVtyXSxyLGUpO3ZhciBjPW4oYSksXz1jWzBdLHA9Y1sxXSxmPWQoYSxfLHApO0FycmF5LmlzQXJyYXkoZil8fChmPU9iamVjdCh1LmMpKF8scCxmKSxmPU9iamVjdChsLmEpKE1hdGguY2VpbChfL2YpKmYscCxmKSk7Zm9yKHZhciBtPWYubGVuZ3RoO2ZbMF08PV87KWYuc2hpZnQoKSwtLW07Zm9yKDtmW20tMV0+cDspZi5wb3AoKSwtLW07dmFyIGgsZz1uZXcgQXJyYXkobSsxKTtmb3Iocj0wO3I8PW07KytyKWg9Z1tyXT1bXSxoLngwPXI+MD9mW3ItMV06XyxoLngxPXI8bT9mW3JdOnA7Zm9yKHI9MDtyPGk7KytyKXM9YVtyXSxfPD1zJiZzPD1wJiZnW09iamVjdChvLmMpKGYscywwLG0pXS5wdXNoKGVbcl0pO3JldHVybiBnfXZhciB0PWEuYSxuPWkuYSxkPWMuYTtyZXR1cm4gZS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9iamVjdChzLmEpKG4pLGUpOnR9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KHMuYSkoW3RbMF0sdFsxXV0pLGUpOm59LGUudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/T2JqZWN0KHMuYSkoci5iLmNhbGwodCkpOk9iamVjdChzLmEpKHQpLGUpOmR9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2lkZW50aXR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIpO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiByLmN9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gci5ifSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIik7bi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGVzY2VuZGluZy5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBhLmF9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzIik7bi5kKHQsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiKTtuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSk7dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2hpc3RvZ3JhbS5qcyIpO24uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBjLmF9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL2ZyZWVkbWFuRGlhY29uaXMuanMiKTtuLmQodCwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hfSk7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zY290dC5qcyIpO24uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBfLmF9KTt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL3N0dXJnZXMuanMiKTtuLmQodCwieSIsZnVuY3Rpb24oKXtyZXR1cm4gcC5hfSk7dmFyIGY9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIpO24uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBmLmF9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIpO24uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiBtLmF9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIik7bi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGguYX0pO3ZhciBnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZXJnZS5qcyIpO24uZCh0LCJuIixmdW5jdGlvbigpe3JldHVybiBnLmF9KTt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIik7bi5kKHQsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGIuYX0pO3ZhciBFPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wYWlycy5qcyIpO24uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiBFLmF9KTt2YXIgeT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGVybXV0ZS5qcyIpO24uZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiKTtuLmQodCwiciIsZnVuY3Rpb24oKXtyZXR1cm4gdi5hfSk7dmFyIFQ9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIik7bi5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIFQuYX0pO3ZhciBBPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zY2FuLmpzIik7bi5kKHQsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIEEuYX0pO3ZhciBDPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zaHVmZmxlLmpzIik7bi5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIEMuYX0pO3ZhciBPPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zdW0uanMiKTtuLmQodCwidiIsZnVuY3Rpb24oKXtyZXR1cm4gTy5hfSk7dmFyIFM9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIik7bi5kKHQsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuYX0pLG4uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiBTLmJ9KSxuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5jfSk7dmFyIFI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RyYW5zcG9zZS5qcyIpO24uZCh0LCJDIixmdW5jdGlvbigpe3JldHVybiBSLmF9KTt2YXIgaj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdmFyaWFuY2UuanMiKTtuLmQodCwiRCIsZnVuY3Rpb24oKXtyZXR1cm4gai5hfSk7dmFyIHg9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ppcC5qcyIpO24uZCh0LCJFIixmdW5jdGlvbigpe3JldHVybiB4LmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPWUubGVuZ3RoLHM9LTE7aWYobnVsbD09dCl7Zm9yKDsrK3M8bzspaWYobnVsbCE9KG49ZVtzXSkmJm4+PW4pZm9yKHI9bjsrK3M8bzspbnVsbCE9KG49ZVtzXSkmJm4+ciYmKHI9bil9ZWxzZSBmb3IoOysrczxvOylpZihudWxsIT0obj10KGVbc10scyxlKSkmJm4+PW4pZm9yKHI9bjsrK3M8bzspbnVsbCE9KG49dChlW3NdLHMsZSkpJiZuPnImJihyPW4pO3JldHVybiByfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWFuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPWUubGVuZ3RoLHM9byxpPS0xLGE9MDtpZihudWxsPT10KWZvcig7KytpPG87KWlzTmFOKG49T2JqZWN0KHIuYSkoZVtpXSkpPy0tczphKz1uO2Vsc2UgZm9yKDsrK2k8bzspaXNOYU4obj1PYmplY3Qoci5hKSh0KGVbaV0saSxlKSkpPy0tczphKz1uO2lmKHMpcmV0dXJuIGEvc319LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9ZS5sZW5ndGgsYT0tMSxsPVtdO2lmKG51bGw9PXQpZm9yKDsrK2E8aTspaXNOYU4obj1PYmplY3Qoby5hKShlW2FdKSl8fGwucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49T2JqZWN0KG8uYSkodChlW2FdLGEsZSkpKXx8bC5wdXNoKG4pO3JldHVybiBPYmplY3Qocy5hKShsLnNvcnQoci5hKSwuNSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lcmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG89ZS5sZW5ndGgscz0tMSxpPTA7KytzPG87KWkrPWVbc10ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShpKTstLW8+PTA7KWZvcihyPWVbb10sdD1yLmxlbmd0aDstLXQ+PTA7KW5bLS1pXT1yW3RdO3JldHVybiBufX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPWUubGVuZ3RoLHM9LTE7aWYobnVsbD09dCl7Zm9yKDsrK3M8bzspaWYobnVsbCE9KG49ZVtzXSkmJm4+PW4pZm9yKHI9bjsrK3M8bzspbnVsbCE9KG49ZVtzXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrczxvOylpZihudWxsIT0obj10KGVbc10scyxlKSkmJm4+PW4pZm9yKHI9bjsrK3M8bzspbnVsbCE9KG49dChlW3NdLHMsZSkpJiZyPm4mJihyPW4pO3JldHVybiByfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9OYU46K2V9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3BhaXJzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm5bZSx0XX10LmI9cix0LmE9ZnVuY3Rpb24oZSx0KXtudWxsPT10JiYodD1yKTtmb3IodmFyIG49MCxvPWUubGVuZ3RoLTEscz1lWzBdLGk9bmV3IEFycmF5KG88MD8wOm8pO248bzspaVtuXT10KHMscz1lWysrbl0pO3JldHVybiBpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wZXJtdXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09ZVt0W25dXTtyZXR1cm4gcn19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbil7aWYobnVsbD09biYmKG49ci5hKSxvPWUubGVuZ3RoKXtpZigodD0rdCk8PTB8fG88MilyZXR1cm4rbihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rbihlW28tMV0sby0xLGUpO3ZhciBvLHM9KG8tMSkqdCxpPU1hdGguZmxvb3IocyksYT0rbihlW2ldLGksZSk7cmV0dXJuIGErKCtuKGVbaSsxXSxpKzEsZSktYSkqKHMtaSl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0LG4pe2U9K2UsdD0rdCxuPShvPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6bzwzPzE6K247Zm9yKHZhciByPS0xLG89MHxNYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9uKSkscz1uZXcgQXJyYXkobyk7KytyPG87KXNbcl09ZStyKm47cmV0dXJuIHN9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NjYW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe2lmKG49ZS5sZW5ndGgpe3ZhciBuLG8scz0wLGk9MCxhPWVbaV07Zm9yKG51bGw9PXQmJih0PXIuYSk7KytzPG47KSh0KG89ZVtzXSxhKTwwfHwwIT09dChhLGEpKSYmKGE9byxpPXMpO3JldHVybiAwPT09dChhLGEpP2k6dm9pZCAwfX19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc2h1ZmZsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixvLHM9KG51bGw9PW4/ZS5sZW5ndGg6biktKHQ9bnVsbD09dD8wOit0KTtzOylvPU1hdGgucmFuZG9tKCkqcy0tfDAscj1lW3MrdF0sZVtzK3RdPWVbbyt0XSxlW28rdF09cjtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9ZS5sZW5ndGgsbz0tMSxzPTA7aWYobnVsbD09dClmb3IoOysrbzxyOykobj0rZVtvXSkmJihzKz1uKTtlbHNlIGZvcig7KytvPHI7KShuPSt0KGVbb10sbyxlKSkmJihzKz1uKTtyZXR1cm4gc319LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL2ZyZWVkbWFuRGlhY29uaXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FycmF5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiKTt0LmE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPXIuYS5jYWxsKGUscy5hKS5zb3J0KG8uYSksTWF0aC5jZWlsKChuLXQpLygyKihPYmplY3QoaS5hKShlLC43NSktT2JqZWN0KGkuYSkoZSwuMjUpKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc2NvdHQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2RldmlhdGlvbi5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGguY2VpbCgobi10KS8oMy41Kk9iamVjdChyLmEpKGUpKk1hdGgucG93KGUubGVuZ3RoLC0xLzMpKSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zdHVyZ2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9KHQtZSkvTWF0aC5tYXgoMCxuKSxvPU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSxsPXIvTWF0aC5wb3coMTAsbyk7cmV0dXJuIG8+PTA/KGw+PXM/MTA6bD49aT81Omw+PWE/MjoxKSpNYXRoLnBvdygxMCxvKTotTWF0aC5wb3coMTAsLW8pLyhsPj1zPzEwOmw+PWk/NTpsPj1hPzI6MSl9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9TWF0aC5hYnModC1lKS9NYXRoLm1heCgwLG4pLG89TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxsPXIvbztyZXR1cm4gbD49cz9vKj0xMDpsPj1pP28qPTU6bD49YSYmKG8qPTIpLHQ8ZT8tbzpvfXQuYj1yLHQuYz1vO3ZhciBzPU1hdGguc3FydCg1MCksaT1NYXRoLnNxcnQoMTApLGE9TWF0aC5zcXJ0KDIpO3QuYT1mdW5jdGlvbihlLHQsbil7dmFyIG8scyxpLGEsbD0tMTtpZih0PSt0LGU9K2Usbj0rbixlPT09dCYmbj4wKXJldHVybltlXTtpZigobz10PGUpJiYocz1lLGU9dCx0PXMpLDA9PT0oYT1yKGUsdCxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKGU9TWF0aC5jZWlsKGUvYSksdD1NYXRoLmZsb29yKHQvYSksaT1uZXcgQXJyYXkocz1NYXRoLmNlaWwodC1lKzEpKTsrK2w8czspaVtsXT0oZStsKSphO2Vsc2UgZm9yKGU9TWF0aC5mbG9vcihlKmEpLHQ9TWF0aC5jZWlsKHQqYSksaT1uZXcgQXJyYXkocz1NYXRoLmNlaWwoZS10KzEpKTsrK2w8czspaVtsXT0oZS1sKS9hO3JldHVybiBvJiZpLnJldmVyc2UoKSxpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90cmFuc3Bvc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5sZW5ndGh9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIpO3QuYT1mdW5jdGlvbihlKXtpZighKGk9ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgdD0tMSxuPU9iamVjdChvLmEpKGUscikscz1uZXcgQXJyYXkobik7Kyt0PG47KWZvcih2YXIgaSxhPS0xLGw9c1t0XT1uZXcgQXJyYXkoaSk7KythPGk7KWxbYV09ZVthXVt0XTtyZXR1cm4gc319LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdmFyaWFuY2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLG8scz1lLmxlbmd0aCxpPTAsYT0tMSxsPTAsdT0wO2lmKG51bGw9PXQpZm9yKDsrK2E8czspaXNOYU4obj1PYmplY3Qoci5hKShlW2FdKSl8fChvPW4tbCxsKz1vLysraSx1Kz1vKihuLWwpKTtlbHNlIGZvcig7KythPHM7KWlzTmFOKG49T2JqZWN0KHIuYSkodChlW2FdLGEsZSkpKXx8KG89bi1sLGwrPW8vKytpLHUrPW8qKG4tbCkpO2lmKGk+MSlyZXR1cm4gdS8oaS0xKX19LCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvemlwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90cmFuc3Bvc2UuanMiKTt0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuYSkoYXJndW1lbnRzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9hcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZX0sIi4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2F4aXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rZSh0KX19ZnVuY3Rpb24gaShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihuKXtyZXR1cm4rZShuKSt0fX1mdW5jdGlvbiBhKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGwoZSx0KXtmdW5jdGlvbiBuKG4pe3ZhciByPW51bGw9PXU/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQsbCk6dC5kb21haW4oKTp1LG89bnVsbD09Yz90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQsbCk6Zi5hOmMscD1NYXRoLm1heChkLDApK3ksQz10LnJhbmdlKCksTz0rQ1swXSsuNSxTPStDW0MubGVuZ3RoLTFdKy41LFI9KHQuYmFuZHdpZHRoP2k6cykodC5jb3B5KCkpLGo9bi5zZWxlY3Rpb24/bi5zZWxlY3Rpb24oKTpuLHg9ai5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksTD1qLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHIsdCkub3JkZXIoKSxEPUwuZXhpdCgpLHc9TC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLE09TC5zZWxlY3QoImxpbmUiKSxrPUwuc2VsZWN0KCJ0ZXh0Iik7eD14Lm1lcmdlKHguZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLEw9TC5tZXJnZSh3KSxNPU0ubWVyZ2Uody5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKFQrIjIiLHYqZCkpLGs9ay5tZXJnZSh3LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKFQsdipwKS5hdHRyKCJkeSIsZT09PW0/IjBlbSI6ZT09PWc/IjAuNzFlbSI6IjAuMzJlbSIpKSxuIT09aiYmKHg9eC50cmFuc2l0aW9uKG4pLEw9TC50cmFuc2l0aW9uKG4pLE09TS50cmFuc2l0aW9uKG4pLGs9ay50cmFuc2l0aW9uKG4pLEQ9RC50cmFuc2l0aW9uKG4pLmF0dHIoIm9wYWNpdHkiLEUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGU9UihlKSk/QShlKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSx3LmF0dHIoIm9wYWNpdHkiLEUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gQSh0JiZpc0Zpbml0ZSh0PXQoZSkpP3Q6UihlKSl9KSksRC5yZW1vdmUoKSx4LmF0dHIoImQiLGU9PT1ifHxlPT1oP18/Ik0iK3YqXysiLCIrTysiSDAuNVYiK1MrIkgiK3YqXzoiTTAuNSwiK08rIlYiK1M6Xz8iTSIrTysiLCIrdipfKyJWMC41SCIrUysiViIrdipfOiJNIitPKyIsMC41SCIrUyksTC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiBBKFIoZSkpfSksTS5hdHRyKFQrIjIiLHYqZCksay5hdHRyKFQsdipwKS50ZXh0KG8pLGouZmlsdGVyKGEpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLGU9PT1oPyJzdGFydCI6ZT09PWI/ImVuZCI6Im1pZGRsZSIpLGouZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVJ9KX12YXIgbD1bXSx1PW51bGwsYz1udWxsLGQ9NixfPTYseT0zLHY9ZT09PW18fGU9PT1iPy0xOjEsVD1lPT09Ynx8ZT09PWg/IngiOiJ5IixBPWU9PT1tfHxlPT09Zz9yOm87cmV0dXJuIG4uc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGw9cC5hLmNhbGwoYXJndW1lbnRzKSxufSxuLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bnVsbD09ZT9bXTpwLmEuY2FsbChlKSxuKTpsLnNsaWNlKCl9LG4udGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT1lP251bGw6cC5hLmNhbGwoZSksbik6dSYmdS5zbGljZSgpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSxuKTpjfSxuLnRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPV89K2Usbik6ZH0sbi50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPStlLG4pOmR9LG4udGlja1NpemVPdXRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rZSxuKTpffSxuLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStlLG4pOnl9LG59ZnVuY3Rpb24gdShlKXtyZXR1cm4gbChtLGUpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGwoaCxlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBsKGcsZSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gbChiLGUpfXQuZD11LHQuYz1jLHQuYT1kLHQuYj1fO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2FycmF5LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIpLG09MSxoPTIsZz0zLGI9NCxFPTFlLTZ9LCIuL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiByLmR9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiByLmJ9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybnt0eXBlOmV9fWZ1bmN0aW9uIG8oKXtyZXR1cm4hbS5ldmVudC5idXR0b259ZnVuY3Rpb24gcygpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBpKGUpe2Zvcig7IWUuX19icnVzaDspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlLl9fYnJ1c2h9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5fX2JydXNoO3JldHVybiB0P3QuZGltLm91dHB1dCh0LnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIGQoQyl9ZnVuY3Rpb24gYygpe3JldHVybiBkKE8pfWZ1bmN0aW9uIGQoZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbz10LnByb3BlcnR5KCJfX2JydXNoIixkKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbcigib3ZlcmxheSIpXSk7by5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixSLm92ZXJsYXkpLm1lcmdlKG8pLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMpLmV4dGVudDtPYmplY3QobS5zZWxlY3QpKHRoaXMpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbcigic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixSLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBzPXQuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZX0pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrZS50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihlKXtyZXR1cm4gUltlLnR5cGVdfSksdC5lYWNoKG4pLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsYyl9ZnVuY3Rpb24gbigpe3ZhciBlPU9iamVjdChtLnNlbGVjdCkodGhpcyksdD1pKHRoaXMpLnNlbGVjdGlvbjt0PyhlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSksZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZSl7cmV0dXJuImUiPT09ZS50eXBlW2UudHlwZS5sZW5ndGgtMV0/dFsxXVswXS1JLzI6dFswXVswXS1JLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihlKXtyZXR1cm4icyI9PT1lLnR5cGVbMF0/dFsxXVsxXS1JLzI6dFswXVsxXS1JLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oZSl7cmV0dXJuIm4iPT09ZS50eXBlfHwicyI9PT1lLnR5cGU/dFsxXVswXS10WzBdWzBdK0k6SX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuImUiPT09ZS50eXBlfHwidyI9PT1lLnR5cGU/dFsxXVsxXS10WzBdWzFdK0k6SX0pKTplLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlLl9fYnJ1c2guZW1pdHRlcnx8bmV3IHUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7dGhpcy50aGF0PWUsdGhpcy5hcmdzPXQsdGhpcy5zdGF0ZT1lLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MH1mdW5jdGlvbiBjKCl7ZnVuY3Rpb24gdCgpe3ZhciBlPU9iamVjdChtLm1vdXNlKShCKTshSnx8SHx8Rnx8KE1hdGguYWJzKGVbMF0tZWVbMF0pPk1hdGguYWJzKGVbMV0tZWVbMV0pP0Y9ITA6SD0hMCksZWU9ZSxOPSEwLE9iamVjdChFLmEpKCkscigpfWZ1bmN0aW9uIHIoKXt2YXIgZTtzd2l0Y2goST1lZVswXS1aWzBdLFA9ZWVbMV0tWlsxXSxHKXtjYXNlIHY6Y2FzZSB5OnomJihJPU1hdGgubWF4KEstYyxNYXRoLm1pbigkLWcsSSkpLGQ9YytJLGI9ZytJKSxWJiYoUD1NYXRoLm1heChYLV8sTWF0aC5taW4oUS13LFApKSxmPV8rUCxrPXcrUCk7YnJlYWs7Y2FzZSBUOno8MD8oST1NYXRoLm1heChLLWMsTWF0aC5taW4oJC1jLEkpKSxkPWMrSSxiPWcpOno+MCYmKEk9TWF0aC5tYXgoSy1nLE1hdGgubWluKCQtZyxJKSksZD1jLGI9ZytJKSxWPDA/KFA9TWF0aC5tYXgoWC1fLE1hdGgubWluKFEtXyxQKSksZj1fK1Asaz13KTpWPjAmJihQPU1hdGgubWF4KFgtdyxNYXRoLm1pbihRLXcsUCkpLGY9XyxrPXcrUCk7YnJlYWs7Y2FzZSBBOnomJihkPU1hdGgubWF4KEssTWF0aC5taW4oJCxjLUkqeikpLGI9TWF0aC5tYXgoSyxNYXRoLm1pbigkLGcrSSp6KSkpLFYmJihmPU1hdGgubWF4KFgsTWF0aC5taW4oUSxfLVAqVikpLGs9TWF0aC5tYXgoWCxNYXRoLm1pbihRLHcrUCpWKSkpfWI8ZCYmKHoqPS0xLGU9YyxjPWcsZz1lLGU9ZCxkPWIsYj1lLFUgaW4gaiYmcmUuYXR0cigiY3Vyc29yIixSW1U9altVXV0pKSxrPGYmJihWKj0tMSxlPV8sXz13LHc9ZSxlPWYsZj1rLGs9ZSxVIGluIHgmJnJlLmF0dHIoImN1cnNvciIsUltVPXhbVV1dKSksVy5zZWxlY3Rpb24mJihxPVcuc2VsZWN0aW9uKSxIJiYoZD1xWzBdWzBdLGI9cVsxXVswXSksRiYmKGY9cVswXVsxXSxrPXFbMV1bMV0pLHFbMF1bMF09PT1kJiZxWzBdWzFdPT09ZiYmcVsxXVswXT09PWImJnFbMV1bMV09PT1rfHwoVy5zZWxlY3Rpb249W1tkLGZdLFtiLGtdXSxuLmNhbGwoQiksdGUuYnJ1c2goKSl9ZnVuY3Rpb24gbygpe2lmKE9iamVjdChFLmIpKCksbS5ldmVudC50b3VjaGVzKXtpZihtLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtTJiZjbGVhclRpbWVvdXQoUyksUz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Uz1udWxsfSw1MDApLG5lLm9uKCJ0b3VjaG1vdmUuYnJ1c2ggdG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLG51bGwpfWVsc2UgT2JqZWN0KHAuYykobS5ldmVudC52aWV3LE4pLG9lLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtuZS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHJlLmF0dHIoImN1cnNvciIsUi5vdmVybGF5KSxXLnNlbGVjdGlvbiYmKHE9Vy5zZWxlY3Rpb24pLGEocSkmJihXLnNlbGVjdGlvbj1udWxsLG4uY2FsbChCKSksdGUuZW5kKCl9ZnVuY3Rpb24gcygpe3N3aXRjaChtLmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6Sj16JiZWO2JyZWFrO2Nhc2UgMTg6Rz09PVQmJih6JiYoZz1iLUkqeixjPWQrSSp6KSxWJiYodz1rLVAqVixfPWYrUCpWKSxHPUEscigpKTticmVhaztjYXNlIDMyOkchPT1UJiZHIT09QXx8KHo8MD9nPWItSTp6PjAmJihjPWQtSSksVjwwP3c9ay1QOlY+MCYmKF89Zi1QKSxHPXYscmUuYXR0cigiY3Vyc29yIixSLnNlbGVjdGlvbikscigpKTticmVhaztkZWZhdWx0OnJldHVybn1PYmplY3QoRS5hKSgpfWZ1bmN0aW9uIHUoKXtzd2l0Y2gobS5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OkomJihIPUY9Sj0hMSxyKCkpO2JyZWFrO2Nhc2UgMTg6Rz09PUEmJih6PDA/Zz1iOno+MCYmKGM9ZCksVjwwP3c9azpWPjAmJihfPWYpLEc9VCxyKCkpO2JyZWFrO2Nhc2UgMzI6Rz09PXYmJihtLmV2ZW50LmFsdEtleT8oeiYmKGc9Yi1JKnosYz1kK0kqeiksViYmKHc9ay1QKlYsXz1mK1AqViksRz1BKTooejwwP2c9Yjp6PjAmJihjPWQpLFY8MD93PWs6Vj4wJiYoXz1mKSxHPVQpLHJlLmF0dHIoImN1cnNvciIsUltVXSkscigpKTticmVhaztkZWZhdWx0OnJldHVybn1PYmplY3QoRS5hKSgpfWlmKG0uZXZlbnQudG91Y2hlcyl7aWYobS5ldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8bS5ldmVudC50b3VjaGVzLmxlbmd0aClyZXR1cm4gT2JqZWN0KEUuYSkoKX1lbHNlIGlmKFMpcmV0dXJuO2lmKE0uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYyxkLF8sZixnLGIsdyxrLEksUCxOLEgsRixCPXRoaXMsVT1tLmV2ZW50LnRhcmdldC5fX2RhdGFfXy50eXBlLEc9InNlbGVjdGlvbiI9PT0obS5ldmVudC5tZXRhS2V5P1U9Im92ZXJsYXkiOlUpP3k6bS5ldmVudC5hbHRLZXk/QTpULHo9ZT09PU8/bnVsbDpMW1VdLFY9ZT09PUM/bnVsbDpEW1VdLFc9aShCKSxZPVcuZXh0ZW50LHE9Vy5zZWxlY3Rpb24sSz1ZWzBdWzBdLFg9WVswXVsxXSwkPVlbMV1bMF0sUT1ZWzFdWzFdLEo9eiYmViYmbS5ldmVudC5zaGlmdEtleSxaPU9iamVjdChtLm1vdXNlKShCKSxlZT1aLHRlPWwoQixhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09VT9XLnNlbGVjdGlvbj1xPVtbYz1lPT09Tz9LOlpbMF0sXz1lPT09Qz9YOlpbMV1dLFtnPWU9PT1PPyQ6Yyx3PWU9PT1DP1E6X11dOihjPXFbMF1bMF0sXz1xWzBdWzFdLGc9cVsxXVswXSx3PXFbMV1bMV0pLGQ9YyxmPV8sYj1nLGs9dzt2YXIgbmU9T2JqZWN0KG0uc2VsZWN0KShCKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxyZT1uZS5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixSW1VdKTtpZihtLmV2ZW50LnRvdWNoZXMpbmUub24oInRvdWNobW92ZS5icnVzaCIsdCwhMCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixvLCEwKTtlbHNle3ZhciBvZT1PYmplY3QobS5zZWxlY3QpKG0uZXZlbnQudmlldykub24oImtleWRvd24uYnJ1c2giLHMsITApLm9uKCJrZXl1cC5icnVzaCIsdSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLG8sITApO09iamVjdChwLmIpKG0uZXZlbnQudmlldyl9T2JqZWN0KEUuYikoKSxPYmplY3QoaC5iKShCKSxuLmNhbGwoQiksdGUuc3RhcnQoKX19ZnVuY3Rpb24gZCgpe3ZhciB0PXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gdC5leHRlbnQ9dy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5kaW09ZSx0fXZhciBTLHc9cyxNPW8saz1PYmplY3QoXy5hKSh0LCJzdGFydCIsImJydXNoIiwiZW5kIiksST02O3JldHVybiB0Lm1vdmU9ZnVuY3Rpb24odCxyKXt0LnNlbGVjdGlvbj90Lm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3Muc2VsZWN0aW9uPTE9PT1lJiZhKGMpP251bGw6ZChlKSxuLmNhbGwobyksaS5icnVzaCgpfXZhciBvPXRoaXMscz1vLl9fYnJ1c2gsaT1sKG8sYXJndW1lbnRzKSx1PXMuc2VsZWN0aW9uLGM9ZS5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLHMuZXh0ZW50KSxkPU9iamVjdChmLmEpKHUsYyk7cmV0dXJuIHUmJmM/dDp0KDEpfSk6dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyxzPXQuX19icnVzaCxpPWUuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0LG8pOnIscy5leHRlbnQpLHU9bCh0LG8pLmJlZm9yZXN0YXJ0KCk7T2JqZWN0KGguYikodCkscy5zZWxlY3Rpb249bnVsbD09aXx8YShpKT9udWxsOmksbi5jYWxsKHQpLHUuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9LHUucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZyYmKHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24obil7T2JqZWN0KG0uY3VzdG9tRXZlbnQpKG5ldyBiLmEodCxuLGUub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksay5hcHBseSxrLFtuLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHQuZXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6T2JqZWN0KGcuYSkoW1srZVswXVswXSwrZVswXVsxXV0sWytlWzFdWzBdLCtlWzFdWzFdXV0pLHQpOnd9LHQuZmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6T2JqZWN0KGcuYSkoISFlKSx0KTpNfSx0LmhhbmRsZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9K2UsdCk6SX0sdC5vbj1mdW5jdGlvbigpe3ZhciBlPWsub24uYXBwbHkoayxhcmd1bWVudHMpO3JldHVybiBlPT09az90OmV9LHR9dC5hPWwsdC5iPXUsdC5jPWM7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9pbmRleC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2luZGV4LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcyIpLGc9bigiLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiksYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvZXZlbnQuanMiKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ub2V2ZW50LmpzIikseT17bmFtZToiZHJhZyJ9LHY9e25hbWU6InNwYWNlIn0sVD17bmFtZToiaGFuZGxlIn0sQT17bmFtZToiY2VudGVyIn0sQz17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKHIpLGlucHV0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJltbZVswXSx0WzBdWzFdXSxbZVsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZSYmW2VbMF1bMF0sZVsxXVswXV19fSxPPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAociksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LFM9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKHIpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxSPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxqPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSx4PXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxMPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LEQ9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07dC5kPWZ1bmN0aW9uKCl7cmV0dXJuIGQoUyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2V2ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQsbil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1ufX0sIi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gci5kfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiByLmN9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvbm9ldmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7by5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKCl7by5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLG8uZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlfSwiLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2Nob3JkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9tYXRoLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgcixsLHUsYyxkLF8scD1lLmxlbmd0aCxmPVtdLG09T2JqZWN0KG8ucykocCksaD1bXSxnPVtdLGI9Zy5ncm91cHM9bmV3IEFycmF5KHApLEU9bmV3IEFycmF5KHAqcCk7Zm9yKHI9MCxkPS0xOysrZDxwOyl7Zm9yKGw9MCxfPS0xOysrXzxwOylsKz1lW2RdW19dO2YucHVzaChsKSxoLnB1c2goT2JqZWN0KG8ucykocCkpLHIrPWx9Zm9yKG4mJm0uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBuKGZbZV0sZlt0XSl9KSxpJiZoLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gaShlW25dW3RdLGVbbl1bcl0pfSl9KSxyPU9iamVjdChzLmMpKDAscy5lLXQqcCkvcixjPXI/dDpzLmUvcCxsPTAsZD0tMTsrK2Q8cDspe2Zvcih1PWwsXz0tMTsrK188cDspe3ZhciB5PW1bZF0sdj1oW3ldW19dLFQ9ZVt5XVt2XSxBPWwsQz1sKz1UKnI7RVt2KnAreV09e2luZGV4Onksc3ViaW5kZXg6dixzdGFydEFuZ2xlOkEsZW5kQW5nbGU6Qyx2YWx1ZTpUfX1iW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTpsLHZhbHVlOmZbeV19LGwrPWN9Zm9yKGQ9LTE7KytkPHA7KWZvcihfPWQtMTsrK188cDspe3ZhciBPPUVbXypwK2RdLFM9RVtkKnArX107KE8udmFsdWV8fFMudmFsdWUpJiZnLnB1c2goTy52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpTfSl9cmV0dXJuIGE/Zy5zb3J0KGEpOmd9dmFyIHQ9MCxuPW51bGwsaT1udWxsLGE9bnVsbDtyZXR1cm4gZS5wYWRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1PYmplY3Qocy5jKSgwLG4pLGUpOnR9LGUuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPW51bGw6KGE9cih0KSkuXz10LGUpOmEmJmEuX30sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvY29uc3RhbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX19LCIuL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2Nob3JkLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9yaWJib24uanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvbWF0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9TWF0aC5jb3Msbz1NYXRoLnNpbixzPU1hdGguUEksaT1zLzIsYT0yKnMsbD1NYXRoLm1heH0sIi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9yaWJib24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5yYWRpdXN9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUuZW5kQW5nbGV9dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2FycmF5LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvY29uc3RhbnQuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9tYXRoLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9pbmRleC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZSxyPWwuYS5jYWxsKGFyZ3VtZW50cyksbz10LmFwcGx5KHRoaXMscikscz1uLmFwcGx5KHRoaXMsciksaT0rXy5hcHBseSh0aGlzLChyWzBdPW8scikpLGE9cC5hcHBseSh0aGlzLHIpLWMuYix1PWYuYXBwbHkodGhpcyxyKS1jLmIsaD1pKk9iamVjdChjLmEpKGEpLGc9aSpPYmplY3QoYy5kKShhKSxiPStfLmFwcGx5KHRoaXMsKHJbMF09cyxyKSksRT1wLmFwcGx5KHRoaXMsciktYy5iLHk9Zi5hcHBseSh0aGlzLHIpLWMuYjtpZihtfHwobT1lPU9iamVjdChkLmEpKCkpLG0ubW92ZVRvKGgsZyksbS5hcmMoMCwwLGksYSx1KSxhPT09RSYmdT09PXl8fChtLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGIqT2JqZWN0KGMuYSkoRSksYipPYmplY3QoYy5kKShFKSksbS5hcmMoMCwwLGIsRSx5KSksbS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxoLGcpLG0uY2xvc2VQYXRoKCksZSlyZXR1cm4gbT1udWxsLGUrIiJ8fG51bGx9dmFyIHQ9cixuPW8sXz1zLHA9aSxmPWEsbT1udWxsO3JldHVybiBlLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdCh1LmEpKCt0KSxlKTpffSxlLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QodS5hKSgrdCksZSk6cH0sZS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdCh1LmEpKCt0KSxlKTpmfSxlLnNvdXJjZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUpOnR9LGUudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPW51bGw9PXQ/bnVsbDp0LGUpOm19LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvZW50cmllcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKHtrZXk6bix2YWx1ZTplW25dfSk7cmV0dXJuIHR9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9zZXQuanMiKTtuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbWFwLmpzIik7bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2tleXMuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvdmFsdWVzLmpzIik7bi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2VudHJpZXMuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9rZXlzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHR9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbWFwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPW5ldyByO2lmKGUgaW5zdGFuY2VvZiByKWUuZWFjaChmdW5jdGlvbihlLHQpe24uc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvLHM9LTEsaT1lLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytzPGk7KW4uc2V0KHMsZVtzXSk7ZWxzZSBmb3IoOysrczxpOyluLnNldCh0KG89ZVtzXSxzLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSluLnNldChhLGVbYV0pO3JldHVybiBufW4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHM9IiQiO3IucHJvdG90eXBlPW8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gcytlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tzK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tzK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXMrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09cyYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cyYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cyYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXMmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cyYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1zKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1zJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19LHQuYT1vfSwiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJue319ZnVuY3Rpb24gbyhlLHQsbil7ZVt0XT1ufWZ1bmN0aW9uIHMoKXtyZXR1cm4gT2JqZWN0KGEuYSkoKX1mdW5jdGlvbiBpKGUsdCxuKXtlLnNldCh0LG4pfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL21hcC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG8scyl7aWYocj49Yy5sZW5ndGgpcmV0dXJuIG51bGwhPW4mJnQuc29ydChuKSxudWxsIT1sP2wodCk6dDtmb3IodmFyIGksdSxkLF89LTEscD10Lmxlbmd0aCxmPWNbcisrXSxtPU9iamVjdChhLmEpKCksaD1vKCk7KytfPHA7KShkPW0uZ2V0KGk9Zih1PXRbX10pKyIiKSk/ZC5wdXNoKHUpOm0uc2V0KGksW3VdKTtyZXR1cm4gbS5lYWNoKGZ1bmN0aW9uKHQsbil7cyhoLG4sZSh0LHIsbyxzKSl9KSxofWZ1bmN0aW9uIHQoZSxuKXtpZigrK24+Yy5sZW5ndGgpcmV0dXJuIGU7dmFyIHIsbz1kW24tMV07cmV0dXJuIG51bGwhPWwmJm4+PWMubGVuZ3RoP3I9ZS5lbnRyaWVzKCk6KHI9W10sZS5lYWNoKGZ1bmN0aW9uKGUsbyl7ci5wdXNoKHtrZXk6byx2YWx1ZXM6dChlLG4pfSl9KSksbnVsbCE9bz9yLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLmtleSx0LmtleSl9KTpyfXZhciBuLGwsdSxjPVtdLGQ9W107cmV0dXJuIHU9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscixvKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQsMCxzLGkpfSxlbnRyaWVzOmZ1bmN0aW9uKG4pe3JldHVybiB0KGUobiwwLHMsaSksMCl9LGtleTpmdW5jdGlvbihlKXtyZXR1cm4gYy5wdXNoKGUpLHV9LHNvcnRLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBkW2MubGVuZ3RoLTFdPWUsdX0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gbj1lLHV9LHJvbGx1cDpmdW5jdGlvbihlKXtyZXR1cm4gbD1lLHV9fX19LCIuL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9zZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBvKGUsdCl7dmFyIG49bmV3IHI7aWYoZSBpbnN0YW5jZW9mIHIpZS5lYWNoKGZ1bmN0aW9uKGUpe24uYWRkKGUpfSk7ZWxzZSBpZihlKXt2YXIgbz0tMSxzPWUubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK288czspbi5hZGQoZVtvXSk7ZWxzZSBmb3IoOysrbzxzOyluLmFkZCh0KGVbb10sbyxlKSl9cmV0dXJuIG59dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbWFwLmpzIiksaT1zLmEucHJvdG90eXBlO3IucHJvdG90eXBlPW8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLGhhczppLmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbcy5iK2VdPWUsdGhpc30scmVtb3ZlOmkucmVtb3ZlLGNsZWFyOmkuY2xlYXIsdmFsdWVzOmkua2V5cyxzaXplOmkuc2l6ZSxlbXB0eTppLmVtcHR5LGVhY2g6aS5lYWNofSx0LmE9b30sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3ZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKGVbbl0pO3JldHVybiB0fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8oZSl7dmFyIHQ7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVQuZXhlYyhlKSk/KHQ9cGFyc2VJbnQodFsxXSwxNiksbmV3IHUodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgxNSZ0KTw8NHwxNSZ0LDEpKToodD1BLmV4ZWMoZSkpP3MocGFyc2VJbnQodFsxXSwxNikpOih0PUMuZXhlYyhlKSk/bmV3IHUodFsxXSx0WzJdLHRbM10sMSk6KHQ9Ty5leGVjKGUpKT9uZXcgdSgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCwxKToodD1TLmV4ZWMoZSkpP2kodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9Ui5leGVjKGUpKT9pKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLHRbNF0pOih0PWouZXhlYyhlKSk/ZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXguZXhlYyhlKSk/ZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkwuaGFzT3duUHJvcGVydHkoZSk/cyhMW2VdKToidHJhbnNwYXJlbnQiPT09ZT9uZXcgdShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG5ldyB1KGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSwxKX1mdW5jdGlvbiBpKGUsdCxuLHIpe3JldHVybiByPD0wJiYoZT10PW49TmFOKSxuZXcgdShlLHQsbixyKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygcnx8KGU9byhlKSksZT8oZT1lLnJnYigpLG5ldyB1KGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB1fWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2EoZSk6bmV3IHUoZSx0LG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHUoZSx0LG4scil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gZChlLHQsbixyKXtyZXR1cm4gcjw9MD9lPXQ9bj1OYU46bjw9MHx8bj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IGYoZSx0LG4scil9ZnVuY3Rpb24gXyhlKXtpZihlIGluc3RhbmNlb2YgZilyZXR1cm4gbmV3IGYoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2Ygcnx8KGU9byhlKSksIWUpcmV0dXJuIG5ldyBmO2lmKGUgaW5zdGFuY2VvZiBmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LG49ZS5nLzI1NSxzPWUuYi8yNTUsaT1NYXRoLm1pbih0LG4scyksYT1NYXRoLm1heCh0LG4scyksbD1OYU4sdT1hLWksYz0oYStpKS8yO3JldHVybiB1PyhsPXQ9PT1hPyhuLXMpL3UrNioobjxzKTpuPT09YT8ocy10KS91KzI6KHQtbikvdSs0LHUvPWM8LjU/YStpOjItYS1pLGwqPTYwKTp1PWM+MCYmYzwxPzA6bCxuZXcgZihsLHUsYyxlLm9wYWNpdHkpfWZ1bmN0aW9uIHAoZSx0LG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP18oZSk6bmV3IGYoZSx0LG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGYoZSx0LG4scil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG0oZSx0LG4pe3JldHVybiAyNTUqKGU8NjA/dCsobi10KSplLzYwOmU8MTgwP246ZTwyNDA/dCsobi10KSooMjQwLWUpLzYwOnQpfXQuYT1yLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSx0LmU9byx0Lmg9YSx0Lmc9bCx0LmI9dSx0LmY9cDt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzIiksZz0uNyxiPTEvZyxFPSJcXHMqKFsrLV0/XFxkKylcXHMqIix5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFQ9L14jKFswLTlhLWZdezN9KSQvLEE9L14jKFswLTlhLWZdezZ9KSQvLEM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0UsRSxFXSsiXFwpJCIpLE89bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3Ysdix2XSsiXFwpJCIpLFM9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tFLEUsRSx5XSsiXFwpJCIpLFI9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2LHYsdix5XSsiXFwpJCIpLGo9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3ksdix2XSsiXFwpJCIpLHg9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1t5LHYsdix5XSsiXFwpJCIpLEw9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07T2JqZWN0KGguYSkocixvLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLE9iamVjdChoLmEpKHUsbCxPYmplY3QoaC5iKShyLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1udWxsPT1lP2I6TWF0aC5wb3coYixlKSxuZXcgdSh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bnVsbD09ZT9nOk1hdGgucG93KGcsZSksbmV3IHUodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrYyh0aGlzLnIpK2ModGhpcy5nKStjKHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoMT09PWU/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PWU/IikiOiIsICIrZSsiKSIpfX0pKSxPYmplY3QoaC5hKShmLHAsT2JqZWN0KGguYikocix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bnVsbD09ZT9iOk1hdGgucG93KGIsZSksbmV3IGYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bnVsbD09ZT9nOk1hdGgucG93KGcsZSksbmV3IGYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSp0LG89MipuLXI7cmV0dXJuIG5ldyB1KG0oZT49MjQwP2UtMjQwOmUrMTIwLG8sciksbShlLG8sciksbShlPDEyMD9lKzI0MDplLTEyMCxvLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlIGluc3RhbmNlb2YgcylyZXR1cm4gbmV3IHMoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgYS5ifHwoZT1PYmplY3QoYS5oKShlKSk7dmFyIHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LG89KGgqcitmKnQtbSpuKS8oaCtmLW0pLGk9ci1vLHU9KHAqKG4tbyktZCppKS9fLGM9TWF0aC5zcXJ0KHUqdStpKmkpLyhwKm8qKDEtbykpLGc9Yz9NYXRoLmF0YW4yKHUsaSkqbC5iLTEyMDpOYU47cmV0dXJuIG5ldyBzKGc8MD9nKzM2MDpnLGMsbyxlLm9wYWNpdHkpfWZ1bmN0aW9uIG8oZSx0LG4sbyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3IoZSk6bmV3IHMoZSx0LG4sbnVsbD09bz8xOm8pfWZ1bmN0aW9uIHMoZSx0LG4scil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfXQuYT1vO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiKSx1PS0uMTQ4NjEsYz0xLjc4Mjc3LGQ9LS4yOTIyNyxfPS0uOTA2NDkscD0xLjk3Mjk0LGY9cCpfLG09cCpjLGg9YypkLV8qdTtPYmplY3QoaS5hKShzLG8sT2JqZWN0KGkuYikoYS5hLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1udWxsPT1lP2EuYzpNYXRoLnBvdyhhLmMsZSksbmV3IHModGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bnVsbD09ZT9hLmQ6TWF0aC5wb3coYS5kLGUpLG5ldyBzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpsLmEsdD0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLHI9TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IGEuYigyNTUqKHQrbioodSpyK2MqbykpLDI1NSoodCtuKihkKnIrXypvKSksMjU1Kih0K24qKHAqcikpLHRoaXMub3BhY2l0eSl9fSkpfSwiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciByIGluIHQpbltyXT10W3JdO3JldHVybiBufXQuYj1yLHQuYT1mdW5jdGlvbihlLHQsbil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPWV9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmV9KSxuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gci5nfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZn0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiKTtuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uY30pLG4uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBvLmR9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2N1YmVoZWxpeC5qcyIpO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlIGluc3RhbmNlb2YgaSlyZXR1cm4gbmV3IGkoZS5sLGUuYSxlLmIsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZil7aWYoaXNOYU4oZS5oKSlyZXR1cm4gbmV3IGkoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpnLmE7cmV0dXJuIG5ldyBpKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9ZSBpbnN0YW5jZW9mIGguYnx8KGU9T2JqZWN0KGguaCkoZSkpO3ZhciBuLHIsbz1jKGUucikscz1jKGUuZyksbD1jKGUuYiksdT1hKCguMjIyNTA0NSpvKy43MTY4Nzg2KnMrLjA2MDYxNjkqbCkvRSk7cmV0dXJuIG89PT1zJiZzPT09bD9uPXI9dToobj1hKCguNDM2MDc0NypvKy4zODUwNjQ5KnMrLjE0MzA4MDQqbCkvYikscj1hKCguMDEzOTMyMipvKy4wOTcxMDQ1KnMrLjcxNDE3MzMqbCkveSkpLG5ldyBpKDExNip1LTE2LDUwMCoobi11KSwyMDAqKHUtciksZS5vcGFjaXR5KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG5ldyBpKGUsMCwwLG51bGw9PXQ/MTp0KX1mdW5jdGlvbiBzKGUsdCxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9yKGUpOm5ldyBpKGUsdCxuLG51bGw9PW8/MTpvKX1mdW5jdGlvbiBpKGUsdCxuLHIpe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBhKGUpe3JldHVybiBlPkM/TWF0aC5wb3coZSwxLzMpOmUvQSt2fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGU+VD9lKmUqZTpBKihlLXYpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBjKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGQoZSl7aWYoZSBpbnN0YW5jZW9mIGYpcmV0dXJuIG5ldyBmKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGl8fChlPXIoZSkpLDA9PT1lLmEmJjA9PT1lLmIpcmV0dXJuIG5ldyBmKE5hTiwwLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqZy5iO3JldHVybiBuZXcgZih0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBfKGUsdCxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9kKGUpOm5ldyBmKG4sdCxlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBwKGUsdCxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9kKGUpOm5ldyBmKGUsdCxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBmKGUsdCxuLHIpe3RoaXMuaD0rZSx0aGlzLmM9K3QsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn10LmI9byx0LmE9cyx0LmQ9Xyx0LmM9cDt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzIiksYj0uOTY0MjIsRT0xLHk9LjgyNTIxLHY9NC8yOSxUPTYvMjksQT0zKlQqVCxDPVQqVCpUO09iamVjdChtLmEpKGkscyxPYmplY3QobS5iKShoLmEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaSh0aGlzLmwrMTgqKG51bGw9PWU/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkodGhpcy5sLTE4KihudWxsPT1lPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1iKmwodCksZT1FKmwoZSksbj15KmwobiksbmV3IGguYih1KDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2Km4pLHUoLS45Nzg3Njg0KnQrMS45MTYxNDE1KmUrLjAzMzQ1NCpuKSx1KC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksT2JqZWN0KG0uYSkoZixwLE9iamVjdChtLmIpKGguYSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT1lPzE6ZSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09ZT8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiByKHRoaXMpLnJnYigpfX0pKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1NYXRoLlBJLzE4MCxvPTE4MC9NYXRoLlBJfSwiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvYXJlYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPWVbbi0xXVsxXSplWzBdWzBdLWVbbi0xXVswXSplWzBdWzFdOysrdDxuOylyKz1lW3QtMV1bMV0qZVt0XVswXS1lW3QtMV1bMF0qZVt0XVsxXTtyZXR1cm4gcn19LCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPUFycmF5LnByb3RvdHlwZSxvPXIuc2xpY2V9LCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hc2NlbmRpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH19LCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9ibHVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgcj1lLndpZHRoLG89ZS5oZWlnaHQscz0xKyhuPDwxKSxpPTA7aTxvOysraSlmb3IodmFyIGE9MCxsPTA7YTxyK247KythKWE8ciYmKGwrPWUuZGF0YVthK2kqcl0pLGE+PW4mJihhPj1zJiYobC09ZS5kYXRhW2EtcytpKnJdKSx0LmRhdGFbYS1uK2kqcl09bC9NYXRoLm1pbihhKzEsci0xK3MtYSxzKSl9ZnVuY3Rpb24gbyhlLHQsbil7Zm9yKHZhciByPWUud2lkdGgsbz1lLmhlaWdodCxzPTErKG48PDEpLGk9MDtpPHI7KytpKWZvcih2YXIgYT0wLGw9MDthPG8rbjsrK2EpYTxvJiYobCs9ZS5kYXRhW2krYSpyXSksYT49biYmKGE+PXMmJihsLT1lLmRhdGFbaSsoYS1zKSpyXSksdC5kYXRhW2krKGEtbikqcl09bC9NYXRoLm1pbihhKzEsby0xK3MtYSxzKSl9dC5hPXIsdC5iPW99LCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9jb25zdGFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRhaW5zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49dFswXSxyPXRbMV0scz0tMSxpPTAsYT1lLmxlbmd0aCxsPWEtMTtpPGE7bD1pKyspe3ZhciB1PWVbaV0sYz11WzBdLGQ9dVsxXSxfPWVbbF0scD1fWzBdLGY9X1sxXTtpZihvKHUsXyx0KSlyZXR1cm4gMDtkPnIhPWY+ciYmbjwocC1jKSooci1kKS8oZi1kKStjJiYocz0tcyl9cmV0dXJuIHN9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI7cmV0dXJuIHMoZSx0LG4pJiZpKGVbcj0rKGVbMF09PT10WzBdKV0sbltyXSx0W3JdKX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4odFswXS1lWzBdKSooblsxXS1lWzFdKT09KG5bMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGU8PXQmJnQ8PW58fG48PXQmJnQ8PWV9dC5hPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLG89LTEscz10Lmxlbmd0aDsrK288czspaWYobj1yKGUsdFtvXSkpcmV0dXJuIG47cmV0dXJuIDB9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcnJheS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvYXNjZW5kaW5nLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcmVhLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9jb25zdGFudC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udGFpbnMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL25vb3AuanMiKSxjPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgbj1tKGUpO2lmKEFycmF5LmlzQXJyYXkobikpbj1uLnNsaWNlKCkuc29ydChzLmEpO2Vsc2V7dmFyIG89T2JqZWN0KHIuaSkoZSksaT1vWzBdLGE9b1sxXTtuPU9iamVjdChyLkEpKGksYSxuKSxuPU9iamVjdChyLnMpKE1hdGguZmxvb3IoaS9uKSpuLE1hdGguZmxvb3IoYS9uKSpuLG4pfXJldHVybiBuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSl9ZnVuY3Rpb24gdChlLHQpe3ZhciByPVtdLG89W107cmV0dXJuIG4oZSx0LGZ1bmN0aW9uKG4pe2gobixlLHQpLE9iamVjdChpLmEpKG4pPjA/ci5wdXNoKFtuXSk6by5wdXNoKG4pfSksby5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTAsbz1yLmxlbmd0aDtuPG87KytuKWlmKC0xIT09T2JqZWN0KGwuYSkoKHQ9cltuXSlbMF0sZSkpcmV0dXJuIHZvaWQgdC5wdXNoKGUpfSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6dCxjb29yZGluYXRlczpyfX1mdW5jdGlvbiBuKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0LHIsaT1bZVswXVswXStvLGVbMF1bMV0rc10sYT1bZVsxXVswXStvLGVbMV1bMV0rc10sbD1kKGkpLHU9ZChhKTsodD1tW2xdKT8ocj1fW3VdKT8oZGVsZXRlIG1bdC5lbmRdLGRlbGV0ZSBfW3Iuc3RhcnRdLHQ9PT1yPyh0LnJpbmcucHVzaChhKSxuKHQucmluZykpOl9bdC5zdGFydF09bVtyLmVuZF09e3N0YXJ0OnQuc3RhcnQsZW5kOnIuZW5kLHJpbmc6dC5yaW5nLmNvbmNhdChyLnJpbmcpfSk6KGRlbGV0ZSBtW3QuZW5kXSx0LnJpbmcucHVzaChhKSxtW3QuZW5kPXVdPXQpOih0PV9bdV0pPyhyPW1bbF0pPyhkZWxldGUgX1t0LnN0YXJ0XSxkZWxldGUgbVtyLmVuZF0sdD09PXI/KHQucmluZy5wdXNoKGEpLG4odC5yaW5nKSk6X1tyLnN0YXJ0XT1tW3QuZW5kXT17c3RhcnQ6ci5zdGFydCxlbmQ6dC5lbmQscmluZzpyLnJpbmcuY29uY2F0KHQucmluZyl9KTooZGVsZXRlIF9bdC5zdGFydF0sdC5yaW5nLnVuc2hpZnQoaSksX1t0LnN0YXJ0PWxdPXQpOl9bbF09bVt1XT17c3RhcnQ6bCxlbmQ6dSxyaW5nOltpLGFdfX12YXIgbyxzLGksYSxsLHUsXz1uZXcgQXJyYXksbT1uZXcgQXJyYXk7Zm9yKG89cz0tMSxhPWVbMF0+PXQsY1thPDwxXS5mb3JFYWNoKHIpOysrbzxwLTE7KWk9YSxhPWVbbysxXT49dCxjW2l8YTw8MV0uZm9yRWFjaChyKTtmb3IoY1thPDwwXS5mb3JFYWNoKHIpOysrczxmLTE7KXtmb3Iobz0tMSxhPWVbcypwK3BdPj10LGw9ZVtzKnBdPj10LGNbYTw8MXxsPDwyXS5mb3JFYWNoKHIpOysrbzxwLTE7KWk9YSxhPWVbcypwK3ArbysxXT49dCx1PWwsbD1lW3MqcCtvKzFdPj10LGNbaXxhPDwxfGw8PDJ8dTw8M10uZm9yRWFjaChyKTtjW2F8bDw8M10uZm9yRWFjaChyKX1mb3Iobz0tMSxsPWVbcypwXT49dCxjW2w8PDJdLmZvckVhY2gocik7KytvPHAtMTspdT1sLGw9ZVtzKnArbysxXT49dCxjW2w8PDJ8dTw8M10uZm9yRWFjaChyKTtjW2w8PDNdLmZvckVhY2gocil9ZnVuY3Rpb24gZChlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHArMSkqNH1mdW5jdGlvbiBfKGUsdCxuKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsbz1lWzBdLHM9ZVsxXSxpPTB8byxhPTB8cyxsPXRbYSpwK2ldO28+MCYmbzxwJiZpPT09byYmKHI9dFthKnAraS0xXSxlWzBdPW8rKG4tcikvKGwtciktLjUpLHM+MCYmczxmJiZhPT09cyYmKHI9dFsoYS0xKSpwK2ldLGVbMV09cysobi1yKS8obC1yKS0uNSl9KX12YXIgcD0xLGY9MSxtPXIueSxoPV87cmV0dXJuIGUuY29udG91cj10LGUuc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bcCxmXTt2YXIgbj1NYXRoLmNlaWwodFswXSkscj1NYXRoLmNlaWwodFsxXSk7aWYoIShuPjAmJnI+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcD1uLGY9cixlfSxlLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP09iamVjdChhLmEpKG8uYS5jYWxsKHQpKTpPYmplY3QoYS5hKSh0KSxlKTptfSxlLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10P186dS5hLGUpOmg9PT1ffSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2RlbnNpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBvKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHMoKXtyZXR1cm4gMX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FycmF5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9ibHVyLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9jb25zdGFudC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanMiKTt0LmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoVCpBKSxyPW5ldyBGbG9hdDMyQXJyYXkoVCpBKTtlLmZvckVhY2goZnVuY3Rpb24oZSx0LHIpe3ZhciBvPStmKGUsdCxyKSt2Pj55LHM9K20oZSx0LHIpK3Y+PnksaT0raChlLHQscik7bz49MCYmbzxUJiZzPj0wJiZzPEEmJihuW28rcypUXSs9aSl9KSxPYmplY3QobC5hKSh7d2lkdGg6VCxoZWlnaHQ6QSxkYXRhOm59LHt3aWR0aDpULGhlaWdodDpBLGRhdGE6cn0sRT4+eSksT2JqZWN0KGwuYikoe3dpZHRoOlQsaGVpZ2h0OkEsZGF0YTpyfSx7d2lkdGg6VCxoZWlnaHQ6QSxkYXRhOm59LEU+PnkpLE9iamVjdChsLmEpKHt3aWR0aDpULGhlaWdodDpBLGRhdGE6bn0se3dpZHRoOlQsaGVpZ2h0OkEsZGF0YTpyfSxFPj55KSxPYmplY3QobC5iKSh7d2lkdGg6VCxoZWlnaHQ6QSxkYXRhOnJ9LHt3aWR0aDpULGhlaWdodDpBLGRhdGE6bn0sRT4+eSksT2JqZWN0KGwuYSkoe3dpZHRoOlQsaGVpZ2h0OkEsZGF0YTpufSx7d2lkdGg6VCxoZWlnaHQ6QSxkYXRhOnJ9LEU+PnkpLE9iamVjdChsLmIpKHt3aWR0aDpULGhlaWdodDpBLGRhdGE6cn0se3dpZHRoOlQsaGVpZ2h0OkEsZGF0YTpufSxFPj55KTt2YXIgbz1DKG4pO2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgcz1PYmplY3QoaS5rKShuKTtvPU9iamVjdChpLkEpKDAscyxvKSxvPU9iamVjdChpLnMpKDAsTWF0aC5mbG9vcihzL28pKm8sbyksby5zaGlmdCgpfXJldHVybiBPYmplY3QoYy5hKSgpLnRocmVzaG9sZHMobykuc2l6ZShbVCxBXSkobikubWFwKHQpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUudmFsdWUqPU1hdGgucG93KDIsLTIqeSksZS5jb29yZGluYXRlcy5mb3JFYWNoKG4pLGV9ZnVuY3Rpb24gbihlKXtlLmZvckVhY2goZCl9ZnVuY3Rpb24gZChlKXtlLmZvckVhY2goXyl9ZnVuY3Rpb24gXyhlKXtlWzBdPWVbMF0qTWF0aC5wb3coMix5KS12LGVbMV09ZVsxXSpNYXRoLnBvdygyLHkpLXZ9ZnVuY3Rpb24gcCgpe3JldHVybiB2PTMqRSxUPWcrMip2Pj55LEE9YisyKnY+PnksZX12YXIgZj1yLG09byxoPXMsZz05NjAsYj01MDAsRT0yMCx5PTIsdj0zKkUsVD1nKzIqdj4+eSxBPWIrMip2Pj55LEM9T2JqZWN0KHUuYSkoMjApO3JldHVybiBlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QodS5hKSgrdCksZSk6Zn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KHUuYSkoK3QpLGUpOm19LGUud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KHUuYSkoK3QpLGUpOmh9LGUuc2l6ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bZyxiXTt2YXIgdD1NYXRoLmNlaWwoZVswXSksbj1NYXRoLmNlaWwoZVsxXSk7aWYoISh0Pj0wfHx0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiBnPXQsYj1uLHAoKX0sZS5jZWxsU2l6ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8eTtpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiB5PU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLHAoKX0sZS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9PYmplY3QodS5hKShhLmEuY2FsbCh0KSk6T2JqZWN0KHUuYSkodCksZSk6Q30sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChFKihFKzEpKTtpZighKChlPStlKT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBFPU1hdGgucm91bmQoKE1hdGguc3FydCg0KmUqZSsxKS0xKS8yKSxwKCl9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvZGVuc2l0eS5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBvLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL25vb3AuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7Zm9yKHZhciBlLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTt0PG47Kyt0KXtpZighKGU9YXJndW1lbnRzW3RdKyIiKXx8ZSBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2UpO3JbZV09W119cmV0dXJuIG5ldyBvKHIpfWZ1bmN0aW9uIG8oZSl7dGhpcy5fPWV9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYobj1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTpufX0pfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4scj0wLG89ZS5sZW5ndGg7cjxvOysrcilpZigobj1lW3JdKS5uYW1lPT09dClyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIHI9MCxvPWUubGVuZ3RoO3I8bzsrK3IpaWYoZVtyXS5uYW1lPT09dCl7ZVtyXT1sLGU9ZS5zbGljZSgwLHIpLmNvbmNhdChlLnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpufSksZX12YXIgbD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtvLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6byxvbjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5fLG89cyhlKyIiLHIpLGw9LTEsdT1vLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK2w8dTspaWYobj0oZT1vW2xdKS50eXBlKXJbbl09YShyW25dLGUubmFtZSx0KTtlbHNlIGlmKG51bGw9PXQpZm9yKG4gaW4gcilyW25dPWEocltuXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2w8dTspaWYoKG49KGU9b1tsXSkudHlwZSkmJihuPWkocltuXSxlLm5hbWUpKSlyZXR1cm4gbn19LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIG4gaW4gdCllW25dPXRbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IG8oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3Mpb1tzXT1hcmd1bWVudHNbcysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihyPXRoaXMuX1tlXSxzPTAsbj1yLmxlbmd0aDtzPG47KytzKXJbc10udmFsdWUuYXBwbHkodCxvKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciByPXRoaXMuX1tlXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKXJbb10udmFsdWUuYXBwbHkodCxuKX19LHQuYT1yfSwiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZHJhZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIWwuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIG8oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG51bGw9PWU/e3g6bC5ldmVudC54LHk6bC5ldmVudC55fTplfWZ1bmN0aW9uIGkoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZXZlbnQuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2NvbnN0YW50LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ldmVudC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZS5vbigibW91c2Vkb3duLmRyYWciLHQpLmZpbHRlcihPKS5vbigidG91Y2hzdGFydC5kcmFnIixmKS5vbigidG91Y2htb3ZlLmRyYWciLG0pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB0KCl7aWYoIXYmJlQuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZT1nKCJtb3VzZSIsQS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbC5tb3VzZSx0aGlzLGFyZ3VtZW50cyk7ZSYmKE9iamVjdChsLnNlbGVjdCkobC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLG4sITApLm9uKCJtb3VzZXVwLmRyYWciLHAsITApLE9iamVjdCh1LmEpKGwuZXZlbnQudmlldyksT2JqZWN0KGMuYikoKSx5PSExLGI9bC5ldmVudC5jbGllbnRYLEU9bC5ldmVudC5jbGllbnRZLGUoInN0YXJ0IikpfX1mdW5jdGlvbiBuKCl7aWYoT2JqZWN0KGMuYSkoKSwheSl7dmFyIGU9bC5ldmVudC5jbGllbnRYLWIsdD1sLmV2ZW50LmNsaWVudFktRTt5PWUqZSt0KnQ+eH1TLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gcCgpe09iamVjdChsLnNlbGVjdCkobC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxPYmplY3QodS5iKShsLmV2ZW50LnZpZXcseSksT2JqZWN0KGMuYSkoKSxTLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBmKCl7aWYoVC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLHQsbj1sLmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9QS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1uLmxlbmd0aDtmb3IoZT0wO2U8bzsrK2UpKHQ9ZyhuW2VdLmlkZW50aWZpZXIscixsLnRvdWNoLHRoaXMsYXJndW1lbnRzKSkmJihPYmplY3QoYy5iKSgpLHQoInN0YXJ0IikpfX1mdW5jdGlvbiBtKCl7dmFyIGUsdCxuPWwuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoZT0wO2U8cjsrK2UpKHQ9U1tuW2VdLmlkZW50aWZpZXJdKSYmKE9iamVjdChjLmEpKCksdCgiZHJhZyIpKX1mdW5jdGlvbiBoKCl7dmFyIGUsdCxuPWwuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IodiYmY2xlYXJUaW1lb3V0KHYpLHY9c2V0VGltZW91dChmdW5jdGlvbigpe3Y9bnVsbH0sNTAwKSxlPTA7ZTxyOysrZSkodD1TW25bZV0uaWRlbnRpZmllcl0pJiYoT2JqZWN0KGMuYikoKSx0KCJlbmQiKSl9ZnVuY3Rpb24gZyh0LG4scixvLHMpe3ZhciBpLGEsdSxjPXIobix0KSxkPVIuY29weSgpO2lmKE9iamVjdChsLmN1c3RvbUV2ZW50KShuZXcgXy5hKGUsImJlZm9yZXN0YXJ0IixpLHQsaixjWzBdLGNbMV0sMCwwLGQpLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShsLmV2ZW50LnN1YmplY3Q9aT1DLmFwcGx5KG8scykpJiYoYT1pLngtY1swXXx8MCx1PWkueS1jWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiBwKGYpe3ZhciBtLGg9Yztzd2l0Y2goZil7Y2FzZSJzdGFydCI6U1t0XT1wLG09aisrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgU1t0XSwtLWo7Y2FzZSJkcmFnIjpjPXIobix0KSxtPWp9T2JqZWN0KGwuY3VzdG9tRXZlbnQpKG5ldyBfLmEoZSxmLGksdCxtLGNbMF0rYSxjWzFdK3UsY1swXS1oWzBdLGNbMV0taFsxXSxkKSxkLmFwcGx5LGQsW2YsbyxzXSl9fXZhciBiLEUseSx2LFQ9cixBPW8sQz1zLE89aSxTPXt9LFI9T2JqZWN0KGEuYSkoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGo9MCx4PTA7cmV0dXJuIGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGQuYSkoISF0KSxlKTpUfSxlLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChkLmEpKHQpLGUpOkF9LGUuc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChkLmEpKHQpLGUpOkN9LGUudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhPPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGQuYSkoISF0KSxlKTpPfSxlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Ui5vbi5hcHBseShSLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1SP2U6dH0sZS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSh0PSt0KSp0LGUpOk1hdGguc3FydCh4KX0sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ldmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyxzLGksYSxsLHUpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PW4sdGhpcy5pZGVudGlmaWVyPXIsdGhpcy5hY3RpdmU9byx0aGlzLng9cyx0aGlzLnk9aSx0aGlzLmR4PWEsdGhpcy5keT1sLHRoaXMuXz11fXQuYT1yLHIucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiBlPT09dGhpcy5fP3RoaXM6ZX19LCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9kcmFnLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZHJhZy5qcyIpO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSl9LCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9T2JqZWN0KG8uc2VsZWN0KShlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihyLm9uKCJjbGljay5kcmFnIixzLmEsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9dC5iPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPU9iamVjdChvLnNlbGVjdCkoZSkub24oImRyYWdzdGFydC5kcmFnIixzLmEsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIscy5hLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX19LCIuL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2V2ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtvLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oKXtvLmV2ZW50LnByZXZlbnREZWZhdWx0KCksby5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19LCIuL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2F1dG9UeXBlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuLHI9ZVt0XS50cmltKCk7aWYocilpZigidHJ1ZSI9PT1yKXI9ITA7ZWxzZSBpZigiZmFsc2UiPT09cilyPSExO2Vsc2UgaWYoIk5hTiI9PT1yKXI9TmFOO2Vsc2UgaWYoaXNOYU4obj0rcikpe2lmKCEvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8udGVzdChyKSljb250aW51ZTtyPW5ldyBEYXRlKHIpfWVsc2Ugcj1uO2Vsc2Ugcj1udWxsO2VbdF09cn1yZXR1cm4gZX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvY3N2LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2Rzdi5qcyIpLG89T2JqZWN0KHIuYSkoIiwiKSxzPW8ucGFyc2UsaT1vLnBhcnNlUm93cyxhPW8uZm9ybWF0LGw9by5mb3JtYXRCb2R5LHU9by5mb3JtYXRSb3dzfSwiLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1yKGUpO3JldHVybiBmdW5jdGlvbihyLG8pe3JldHVybiB0KG4ociksbyxlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHIgaW4gZSlyIGluIHR8fG4ucHVzaCh0W3JdPXIpfSksbn1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZSsiIixyPW4ubGVuZ3RoO3JldHVybiByPHQ/bmV3IEFycmF5KHQtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBhKGUpe3JldHVybiBlPDA/Ii0iK2koLWUsNik6ZT45OTk5PyIrIitpKGUsNik6aShlLDQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5nZXRVVENIb3VycygpLG49ZS5nZXRVVENNaW51dGVzKCkscj1lLmdldFVUQ1NlY29uZHMoKSxvPWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKGUpPyJJbnZhbGlkIERhdGUiOmEoZS5nZXRVVENGdWxsWWVhcigpLDQpKyItIitpKGUuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitpKGUuZ2V0VVRDRGF0ZSgpLDIpKyhvPyJUIitpKHQsMikrIjoiK2kobiwyKSsiOiIraShyLDIpKyIuIitpKG8sMykrIloiOnI/IlQiK2kodCwyKSsiOiIraShuLDIpKyI6IitpKHIsMikrIloiOm58fHQ/IlQiK2kodCwyKSsiOiIraShuLDIpKyJaIjoiIil9dmFyIHU9e30sYz17fSxkPTM0LF89MTAscD0xMzt0LmE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3ZhciBzLGksYT1uKGUsZnVuY3Rpb24oZSxuKXtpZihzKXJldHVybiBzKGUsbi0xKTtpPWUscz10P28oZSx0KTpyKGUpfSk7cmV0dXJuIGEuY29sdW1ucz1pfHxbXSxhfWZ1bmN0aW9uIG4oZSx0KXtmdW5jdGlvbiBuKCl7aWYobClyZXR1cm4gYztpZihmKXJldHVybiBmPSExLHU7dmFyIHQsbixyPWk7aWYoZS5jaGFyQ29kZUF0KHIpPT09ZCl7Zm9yKDtpKys8cyYmZS5jaGFyQ29kZUF0KGkpIT09ZHx8ZS5jaGFyQ29kZUF0KCsraSk9PT1kOyk7cmV0dXJuKHQ9aSk+PXM/bD0hMDoobj1lLmNoYXJDb2RlQXQoaSsrKSk9PT1fP2Y9ITA6bj09PXAmJihmPSEwLGUuY2hhckNvZGVBdChpKT09PV8mJisraSksZS5zbGljZShyKzEsdC0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtpPHM7KXtpZigobj1lLmNoYXJDb2RlQXQodD1pKyspKT09PV8pZj0hMDtlbHNlIGlmKG49PT1wKWY9ITAsZS5jaGFyQ29kZUF0KGkpPT09XyYmKytpO2Vsc2UgaWYobiE9PUUpY29udGludWU7cmV0dXJuIGUuc2xpY2Uocix0KX1yZXR1cm4gbD0hMCxlLnNsaWNlKHIscyl9dmFyIHIsbz1bXSxzPWUubGVuZ3RoLGk9MCxhPTAsbD1zPD0wLGY9ITE7Zm9yKGUuY2hhckNvZGVBdChzLTEpPT09XyYmLS1zLGUuY2hhckNvZGVBdChzLTEpPT09cCYmLS1zOyhyPW4oKSkhPT1jOyl7Zm9yKHZhciBtPVtdO3IhPT11JiZyIT09YzspbS5wdXNoKHIpLHI9bigpO3QmJm51bGw9PShtPXQobSxhKyspKXx8by5wdXNoKG0pfXJldHVybiBvfWZ1bmN0aW9uIGkodCxuKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKHRbZV0pfSkuam9pbihlKX0pfWZ1bmN0aW9uIGEodCxuKXtyZXR1cm4gbnVsbD09biYmKG49cyh0KSksW24ubWFwKGcpLmpvaW4oZSldLmNvbmNhdChpKHQsbikpLmpvaW4oIlxuIil9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBudWxsPT10JiYodD1zKGUpKSxpKGUsdCkuam9pbigiXG4iKX1mdW5jdGlvbiBtKGUpe3JldHVybiBlLm1hcChoKS5qb2luKCJcbiIpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQubWFwKGcpLmpvaW4oZSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbnVsbD09ZT8iIjplIGluc3RhbmNlb2YgRGF0ZT9sKGUpOmIudGVzdChlKz0iIik/JyInK2UucmVwbGFjZSgvIi9nLCciIicpKyciJzplfXZhciBiPW5ldyBSZWdFeHAoJ1siJytlKyJcblxyXSIpLEU9ZS5jaGFyQ29kZUF0KDApO3JldHVybntwYXJzZTp0LHBhcnNlUm93czpuLGZvcm1hdDphLGZvcm1hdEJvZHk6Zixmb3JtYXRSb3dzOm19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanMiKTtuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9jc3YuanMiKTtuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5kfSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uY30pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvdHN2LmpzIik7bi5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZH0pLG4uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiBzLmV9KSxuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYn0pLG4uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBzLmN9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2F1dG9UeXBlLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy90c3YuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvZHN2LmpzIiksbz1PYmplY3Qoci5hKSgiXHQiKSxzPW8ucGFyc2UsaT1vLnBhcnNlUm93cyxhPW8uZm9ybWF0LGw9by5mb3JtYXRCb2R5LHU9by5mb3JtYXRSb3dzfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvYmFjay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX1yZXR1cm4gdD0rdCxuLm92ZXJzaG9vdD1lLG59KDEuNzAxNTgpLG89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUpe3JldHVybi0tZSplKigodCsxKSplK3QpKzF9cmV0dXJuIHQ9K3Qsbi5vdmVyc2hvb3Q9ZSxufSgxLjcwMTU4KSxzPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4oKGUqPTIpPDE/ZSplKigodCsxKSplLXQpOihlLT0yKSplKigodCsxKSplK3QpKzIpLzJ9cmV0dXJuIHQ9K3Qsbi5vdmVyc2hvb3Q9ZSxufSgxLjcwMTU4KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2JvdW5jZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiAxLW8oMS1lKX1mdW5jdGlvbiBvKGUpe3JldHVybihlPStlKTxpP20qZSplOmU8bD9tKihlLT1hKSplK3U6ZTxkP20qKGUtPWMpKmUrXzptKihlLT1wKSplK2Z9ZnVuY3Rpb24gcyhlKXtyZXR1cm4oKGUqPTIpPD0xPzEtbygxLWUpOm8oZS0xKSsxKS8yfXQuYT1yLHQuYz1vLHQuYj1zO3ZhciBpPTQvMTEsYT02LzExLGw9OC8xMSx1PS43NSxjPTkvMTEsZD0xMC8xMSxfPS45Mzc1LHA9MjEvMjIsZj02My82NCxtPTEvaS9pfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY2lyY2xlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBvKGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuKChlKj0yKTw9MT8xLU1hdGguc3FydCgxLWUqZSk6TWF0aC5zcXJ0KDEtKGUtPTIpKmUpKzEpLzJ9dC5hPXIsdC5jPW8sdC5iPXN9LCIuL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlKmUqZX1mdW5jdGlvbiBvKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBzKGUpe3JldHVybigoZSo9Mik8PTE/ZSplKmU6KGUtPTIpKmUqZSsyKS8yfXQuYT1yLHQuYz1vLHQuYj1zfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvZWxhc3RpYy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0yKk1hdGguUEksbz1mdW5jdGlvbiBlKHQsbil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdCpNYXRoLnBvdygyLDEwKi0tZSkqTWF0aC5zaW4oKHMtZSkvbil9dmFyIHM9TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihuLz1yKTtyZXR1cm4gby5hbXBsaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxuKnIpfSxvLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gZSh0LG4pfSxvfSgxLC4zKSxzPWZ1bmN0aW9uIGUodCxuKXtmdW5jdGlvbiBvKGUpe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKGU9K2UpKSpNYXRoLnNpbigoZStzKS9uKX12YXIgcz1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKG4vPXIpO3JldHVybiBvLmFtcGxpdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LG4qcil9LG8ucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiBlKHQsbil9LG99KDEsLjMpLGk9ZnVuY3Rpb24gZSh0LG4pe2Z1bmN0aW9uIG8oZSl7cmV0dXJuKChlPTIqZS0xKTwwP3QqTWF0aC5wb3coMiwxMCplKSpNYXRoLnNpbigocy1lKS9uKToyLXQqTWF0aC5wb3coMiwtMTAqZSkqTWF0aC5zaW4oKHMrZSkvbikpLzJ9dmFyIHM9TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihuLz1yKTtyZXR1cm4gby5hbXBsaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxuKnIpfSxvLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gZSh0LG4pfSxvfSgxLC4zKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2V4cC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBNYXRoLnBvdygyLDEwKmUtMTApfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4oKGUqPTIpPD0xP01hdGgucG93KDIsMTAqZS0xMCk6Mi1NYXRoLnBvdygyLDEwLTEwKmUpKS8yfXQuYT1yLHQuYz1vLHQuYj1zfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvbGluZWFyLmpzIik7bi5kKHQsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3F1YWQuanMiKTtuLmQodCwiRCIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSksbi5kKHQsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJHIixmdW5jdGlvbigpe3JldHVybiBvLmN9KSxuLmQodCwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiKTtuLmQodCwibSIsZnVuY3Rpb24oKXtyZXR1cm4gcy5ifSksbi5kKHQsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pLG4uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiBzLmN9KSxuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gcy5ifSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcG9seS5qcyIpO24uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiBpLmJ9KSxuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSksbi5kKHQsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY30pLG4uZCh0LCJCIixmdW5jdGlvbigpe3JldHVybiBpLmJ9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9zaW4uanMiKTtuLmQodCwiSCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5ifSksbi5kKHQsIkkiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pLG4uZCh0LCJLIixmdW5jdGlvbigpe3JldHVybiBhLmN9KSxuLmQodCwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gYS5ifSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvZXhwLmpzIik7bi5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYn0pLG4uZCh0LCJ2IixmdW5jdGlvbigpe3JldHVybiBsLmF9KSxuLmQodCwieCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5jfSksbi5kKHQsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYn0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2NpcmNsZS5qcyIpO24uZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiB1LmJ9KSxuLmQodCwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSksbi5kKHQsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuY30pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiB1LmJ9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9ib3VuY2UuanMiKTtuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYy5jfSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGMuYX0pLG4uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBjLmN9KSxuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYy5ifSk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvYmFjay5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBkLmJ9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY30pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBkLmJ9KTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9lbGFzdGljLmpzIik7bi5kKHQsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uY30pLG4uZCh0LCJyIixmdW5jdGlvbigpe3JldHVybiBfLmF9KSxuLmQodCwidCIsZnVuY3Rpb24oKXtyZXR1cm4gXy5jfSksbi5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYn0pfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvbGluZWFyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuK2V9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9wb2x5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX1yZXR1cm4gdD0rdCxuLmV4cG9uZW50PWUsbn0oMyksbz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIDEtTWF0aC5wb3coMS1lLHQpfXJldHVybiB0PSt0LG4uZXhwb25lbnQ9ZSxufSgzKSxzPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4oKGUqPTIpPD0xP01hdGgucG93KGUsdCk6Mi1NYXRoLnBvdygyLWUsdCkpLzJ9cmV0dXJuIHQ9K3Qsbi5leHBvbmVudD1lLG59KDMpfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcXVhZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSooMi1lKX1mdW5jdGlvbiBzKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXQuYT1yLHQuYz1vLHQuYj1zfSwiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvc2luLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSphKX1mdW5jdGlvbiBvKGUpe3JldHVybiBNYXRoLnNpbihlKmEpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuKDEtTWF0aC5jb3MoaSplKSkvMn10LmE9cix0LmM9byx0LmI9czt2YXIgaT1NYXRoLlBJLGE9aS8yfSwiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2Jsb2IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfXQuYT1mdW5jdGlvbihlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4ocil9fSwiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2J1ZmZlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS5hcnJheUJ1ZmZlcigpfXQuYT1mdW5jdGlvbihlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4ocil9fSwiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2Rzdi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCksT2JqZWN0KGkuYSkodCxuKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19ZnVuY3Rpb24gbyhlLHQsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBvPU9iamVjdChzLmcpKGUpO3JldHVybiBPYmplY3QoaS5hKSh0LG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIG8ucGFyc2UoZSxyKX0pfXQuYj1vLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvdGV4dC5qcyIpLGE9cihzLmUpLGw9cihzLmspfSwiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2ltYWdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyBJbWFnZTtmb3IodmFyIHMgaW4gdClvW3NdPXRbc107by5vbmVycm9yPXIsby5vbmxvYWQ9ZnVuY3Rpb24oKXtuKG8pfSxvLnNyYz1lfSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9ibG9iLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9idWZmZXIuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2Rzdi5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBzLmJ9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuY30pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9pbWFnZS5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvanNvbi5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBhLmF9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvdGV4dC5qcyIpO24uZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMveG1sLmpzIik7bi5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiB1LmJ9KSxuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gdS5jfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvanNvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS5qc29uKCl9dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihyKX19LCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvdGV4dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihyKX19LCIuL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMveG1sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdChvLmEpKHQsbikudGhlbihmdW5jdGlvbih0KXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsZSl9KX19bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy90ZXh0LmpzIik7dC5hPXIoImFwcGxpY2F0aW9uL3htbCIpO3ZhciBzPXIoInRleHQvaHRtbCIpLGk9cigiaW1hZ2Uvc3ZnK3htbCIpfSwiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NlbnRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIG4sbyxzPXIubGVuZ3RoLGk9MCxhPTA7Zm9yKG49MDtuPHM7KytuKW89cltuXSxpKz1vLngsYSs9by55O2ZvcihpPWkvcy1lLGE9YS9zLXQsbj0wO248czsrK24pbz1yW25dLG8ueC09aSxvLnktPWF9dmFyIHI7cmV0dXJuIG51bGw9PWUmJihlPTApLG51bGw9PXQmJih0PTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXtyPWV9LG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxuLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbn19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29sbGlkZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLngrZS52eH1mdW5jdGlvbiBvKGUpe3JldHVybiBlLnkrZS52eX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29uc3RhbnQuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9pbmRleC5qcyIpO3QuYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7ZnVuY3Rpb24gZShlLHQsbixyLG8pe3ZhciBzPWUuZGF0YSxhPWUucix1PW0rYTt7aWYoIXMpcmV0dXJuIHQ+cCt1fHxyPHAtdXx8bj5mK3V8fG88Zi11O2lmKHMuaW5kZXg+bC5pbmRleCl7dmFyIGM9cC1zLngtcy52eCxfPWYtcy55LXMudnksZz1jKmMrXypfO2c8dSp1JiYoMD09PWMmJihjPU9iamVjdChpLmEpKCksZys9YypjKSwwPT09XyYmKF89T2JqZWN0KGkuYSkoKSxnKz1fKl8pLGc9KHUtKGc9TWF0aC5zcXJ0KGcpKSkvZypkLGwudngrPShjKj1nKSoodT0oYSo9YSkvKGgrYSkpLGwudnkrPShfKj1nKSp1LHMudngtPWMqKHU9MS11KSxzLnZ5LT1fKnUpfX19Zm9yKHZhciB0LHMsbCxwLGYsbSxoLGc9dS5sZW5ndGgsYj0wO2I8XzsrK2IpZm9yKHM9T2JqZWN0KGEuYSkodSxyLG8pLnZpc2l0QWZ0ZXIobiksdD0wO3Q8ZzsrK3QpbD11W3RdLG09Y1tsLmluZGV4XSxoPW0qbSxwPWwueCtsLnZ4LGY9bC55K2wudnkscy52aXNpdChlKX1mdW5jdGlvbiBuKGUpe2lmKGUuZGF0YSlyZXR1cm4gZS5yPWNbZS5kYXRhLmluZGV4XTtmb3IodmFyIHQ9ZS5yPTA7dDw0OysrdCllW3RdJiZlW3RdLnI+ZS5yJiYoZS5yPWVbdF0ucil9ZnVuY3Rpb24gbCgpe2lmKHUpe3ZhciB0LG4scj11Lmxlbmd0aDtmb3IoYz1uZXcgQXJyYXkociksdD0wO3Q8cjsrK3Qpbj11W3RdLGNbbi5pbmRleF09K2Uobix0LHUpfX12YXIgdSxjLGQ9MSxfPTE7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChzLmEpKG51bGw9PWU/MTorZSkpLHQuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt1PWUsbCgpfSx0Lml0ZXJhdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K2UsdCk6X30sdC5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rZSx0KTpkfSx0LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9iamVjdChzLmEpKCtuKSxsKCksdCk6ZX0sdH19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29uc3RhbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NlbnRlci5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29sbGlkZS5qcyIpO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcyIpO24uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbWFueUJvZHkuanMiKTtuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3JhZGlhbC5qcyIpO24uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBhLmF9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvc2ltdWxhdGlvbi5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveC5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiB1LmF9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveS5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBjLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9saW5rLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuaW5kZXh9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUuZ2V0KHQpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gbn12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29uc3RhbnQuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIDEvTWF0aC5taW4oZltlLnNvdXJjZS5pbmRleF0sZltlLnRhcmdldC5pbmRleF0pfWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPEU7KytuKWZvcih2YXIgbyxzLGEsbCx1LGMscCxmPTA7ZjxyOysrZilvPWVbZl0scz1vLnNvdXJjZSxhPW8udGFyZ2V0LGw9YS54K2Eudngtcy54LXMudnh8fE9iamVjdChpLmEpKCksdT1hLnkrYS52eS1zLnktcy52eXx8T2JqZWN0KGkuYSkoKSxjPU1hdGguc3FydChsKmwrdSp1KSxjPShjLV9bZl0pL2MqdCpkW2ZdLGwqPWMsdSo9YyxhLnZ4LT1sKihwPW1bZl0pLGEudnktPXUqcCxzLnZ4Kz1sKihwPTEtcCkscy52eSs9dSpwfWZ1bmN0aW9uIGwoKXtpZihwKXt2YXIgdCxuLHI9cC5sZW5ndGgscz1lLmxlbmd0aCxpPU9iamVjdChhLmMpKHAsaCk7Zm9yKHQ9MCxmPW5ldyBBcnJheShyKTt0PHM7Kyt0KW49ZVt0XSxuLmluZGV4PXQsIm9iamVjdCIhPXR5cGVvZiBuLnNvdXJjZSYmKG4uc291cmNlPW8oaSxuLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygbi50YXJnZXQmJihuLnRhcmdldD1vKGksbi50YXJnZXQpKSxmW24uc291cmNlLmluZGV4XT0oZltuLnNvdXJjZS5pbmRleF18fDApKzEsZltuLnRhcmdldC5pbmRleF09KGZbbi50YXJnZXQuaW5kZXhdfHwwKSsxO2Zvcih0PTAsbT1uZXcgQXJyYXkocyk7dDxzOysrdCluPWVbdF0sbVt0XT1mW24uc291cmNlLmluZGV4XS8oZltuLnNvdXJjZS5pbmRleF0rZltuLnRhcmdldC5pbmRleF0pO2Q9bmV3IEFycmF5KHMpLHUoKSxfPW5ldyBBcnJheShzKSxjKCl9fWZ1bmN0aW9uIHUoKXtpZihwKWZvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuOysrdClkW3RdPStnKGVbdF0sdCxlKX1mdW5jdGlvbiBjKCl7aWYocClmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpX1t0XT0rYihlW3RdLHQsZSl9dmFyIGQsXyxwLGYsbSxoPXIsZz10LGI9T2JqZWN0KHMuYSkoMzApLEU9MTtyZXR1cm4gbnVsbD09ZSYmKGU9W10pLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXtwPWUsbCgpfSxuLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbCgpLG4pOmV9LG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxuKTpofSxuLml0ZXJhdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9K2Usbik6RX0sbi5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChzLmEpKCtlKSx1KCksbik6Z30sbi5kaXN0YW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChzLmEpKCtlKSxjKCksbik6Yn0sbn19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbWFueUJvZHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbnN0YW50LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvamlnZ2xlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9zaW11bGF0aW9uLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxyPWwubGVuZ3RoLG89T2JqZWN0KHMuYSkobCxpLmIsaS5jKS52aXNpdEFmdGVyKG4pO2ZvcihjPWUsdD0wO3Q8cjsrK3QpdT1sW3RdLG8udmlzaXQoYSl9ZnVuY3Rpb24gdCgpe2lmKGwpe3ZhciBlLHQsbj1sLmxlbmd0aDtmb3IoZD1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2UpdD1sW2VdLGRbdC5pbmRleF09K18odCxlLGwpfX1mdW5jdGlvbiBuKGUpe3ZhciB0LG4scixvLHMsaT0wLGE9MDtpZihlLmxlbmd0aCl7Zm9yKHI9bz1zPTA7czw0OysrcykodD1lW3NdKSYmKG49TWF0aC5hYnModC52YWx1ZSkpJiYoaSs9dC52YWx1ZSxhKz1uLHIrPW4qdC54LG8rPW4qdC55KTtlLng9ci9hLGUueT1vL2F9ZWxzZXt0PWUsdC54PXQuZGF0YS54LHQueT10LmRhdGEueTtkb3tpKz1kW3QuZGF0YS5pbmRleF19d2hpbGUodD10Lm5leHQpfWUudmFsdWU9aX1mdW5jdGlvbiBhKGUsdCxuLHIpe2lmKCFlLnZhbHVlKXJldHVybiEwO3ZhciBzPWUueC11LngsaT1lLnktdS55LGE9ci10LGw9cypzK2kqaTtpZihhKmEvbTxsKXJldHVybiBsPGYmJigwPT09cyYmKHM9T2JqZWN0KG8uYSkoKSxsKz1zKnMpLDA9PT1pJiYoaT1PYmplY3Qoby5hKSgpLGwrPWkqaSksbDxwJiYobD1NYXRoLnNxcnQocCpsKSksdS52eCs9cyplLnZhbHVlKmMvbCx1LnZ5Kz1pKmUudmFsdWUqYy9sKSwhMDtpZighKGUubGVuZ3RofHxsPj1mKSl7KGUuZGF0YSE9PXV8fGUubmV4dCkmJigwPT09cyYmKHM9T2JqZWN0KG8uYSkoKSxsKz1zKnMpLDA9PT1pJiYoaT1PYmplY3Qoby5hKSgpLGwrPWkqaSksbDxwJiYobD1NYXRoLnNxcnQocCpsKSkpO2Rve2UuZGF0YSE9PXUmJihhPWRbZS5kYXRhLmluZGV4XSpjL2wsdS52eCs9cyphLHUudnkrPWkqYSl9d2hpbGUoZT1lLm5leHQpfX12YXIgbCx1LGMsZCxfPU9iamVjdChyLmEpKC0zMCkscD0xLGY9MS8wLG09LjgxO3JldHVybiBlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7bD1lLHQoKX0sZS5zdHJlbmd0aD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9iamVjdChyLmEpKCtuKSx0KCksZSk6X30sZS5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10KnQsZSk6TWF0aC5zcXJ0KHApfSxlLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQqdCxlKTpNYXRoLnNxcnQoZil9LGUudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LGUpOk1hdGguc3FydChtKX0sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvcmFkaWFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBzPWlbcl0sdT1zLngtdHx8MWUtNixjPXMueS1ufHwxZS02LGQ9TWF0aC5zcXJ0KHUqdStjKmMpLF89KGxbcl0tZCkqYVtyXSplL2Q7cy52eCs9dSpfLHMudnkrPWMqX319ZnVuY3Rpb24gcygpe2lmKGkpe3ZhciB0LG49aS5sZW5ndGg7Zm9yKGE9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLHQ9MDt0PG47Kyt0KWxbdF09K2UoaVt0XSx0LGkpLGFbdF09aXNOYU4obFt0XSk/MDordShpW3RdLHQsaSl9fXZhciBpLGEsbCx1PU9iamVjdChyLmEpKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9T2JqZWN0KHIuYSkoK2UpKSxudWxsPT10JiYodD0wKSxudWxsPT1uJiYobj0wKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7aT1lLHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChyLmEpKCtlKSxzKCksbyk6dX0sby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoci5hKSgrdCkscygpLG8pOmV9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxvKTp0fSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2Usbyk6bn0sb319LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvc2ltdWxhdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnh9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS55fXQuYj1yLHQuYz1vO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9pbmRleC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbmRleC5qcyIpLGw9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7bigpLGcuY2FsbCgidGljayIsdSksYzxkJiYoaC5zdG9wKCksZy5jYWxsKCJlbmQiLHUpKX1mdW5jdGlvbiBuKHQpe3ZhciBuLHIsbz1lLmxlbmd0aDt2b2lkIDA9PT10JiYodD0xKTtmb3IodmFyIHM9MDtzPHQ7KytzKWZvcihjKz0ocC1jKSpfLG0uZWFjaChmdW5jdGlvbihlKXtlKGMpfSksbj0wO248bzsrK24pcj1lW25dLG51bGw9PXIuZng/ci54Kz1yLnZ4Kj1mOihyLng9ci5meCxyLnZ4PTApLG51bGw9PXIuZnk/ci55Kz1yLnZ5Kj1mOihyLnk9ci5meSxyLnZ5PTApO3JldHVybiB1fWZ1bmN0aW9uIHIoKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbil7aWYodD1lW25dLHQuaW5kZXg9bixudWxsIT10LmZ4JiYodC54PXQuZngpLG51bGwhPXQuZnkmJih0Lnk9dC5meSksaXNOYU4odC54KXx8aXNOYU4odC55KSl7dmFyIG89MTAqTWF0aC5zcXJ0KG4pLHM9bipsO3QueD1vKk1hdGguY29zKHMpLHQueT1vKk1hdGguc2luKHMpfShpc05hTih0LnZ4KXx8aXNOYU4odC52eSkpJiYodC52eD10LnZ5PTApfX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmluaXRpYWxpemUmJnQuaW5pdGlhbGl6ZShlKSx0fXZhciB1LGM9MSxkPS4wMDEsXz0xLU1hdGgucG93KGQsMS8zMDApLHA9MCxmPS42LG09T2JqZWN0KGkuYykoKSxoPU9iamVjdChhLmQpKHQpLGc9T2JqZWN0KHMuYSkoInRpY2siLCJlbmQiKTtyZXR1cm4gbnVsbD09ZSYmKGU9W10pLHIoKSx1PXt0aWNrOm4scmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBoLnJlc3RhcnQodCksdX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBoLnN0b3AoKSx1fSxub2RlczpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIoKSxtLmVhY2gobyksdSk6ZX0sYWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K2UsdSk6Y30sYWxwaGFNaW46ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K2UsdSk6ZH0sYWxwaGFEZWNheTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rZSx1KTorX30sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K2UsdSk6cH0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0xLWUsdSk6MS1mfSxmb3JjZTpmdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PXQ/bS5yZW1vdmUoZSk6bS5zZXQoZSxvKHQpKSx1KTptLmdldChlKX0sZmluZDpmdW5jdGlvbih0LG4scil7dmFyIG8scyxpLGEsbCx1PTAsYz1lLmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHU9MDt1PGM7Kyt1KWE9ZVt1XSxvPXQtYS54LHM9bi1hLnksKGk9bypvK3Mqcyk8ciYmKGw9YSxyPWkpO3JldHVybiBsfSxvbjpmdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGcub24oZSx0KSx1KTpnLm9uKGUpfX19fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbnN0YW50LmpzIik7dC5hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7Zm9yKHZhciB0LG49MCxyPW8ubGVuZ3RoO248cjsrK24pdD1vW25dLHQudngrPShpW25dLXQueCkqc1tuXSplfWZ1bmN0aW9uIG4oKXtpZihvKXt2YXIgdCxuPW8ubGVuZ3RoO2ZvcihzPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKSx0PTA7dDxuOysrdClzW3RdPWlzTmFOKGlbdF09K2Uob1t0XSx0LG8pKT8wOithKG9bdF0sdCxvKX19dmFyIG8scyxpLGE9T2JqZWN0KHIuYSkoLjEpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT1PYmplY3Qoci5hKShudWxsPT1lPzA6K2UpKSx0LmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7bz1lLG4oKX0sdC5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChyLmEpKCtlKSxuKCksdCk6YX0sdC54PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286T2JqZWN0KHIuYSkoK28pLG4oKSx0KTplfSx0fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy95LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcyIpO3QuYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2Zvcih2YXIgdCxuPTAscj1vLmxlbmd0aDtuPHI7KytuKXQ9b1tuXSx0LnZ5Kz0oaVtuXS10LnkpKnNbbl0qZX1mdW5jdGlvbiBuKCl7aWYobyl7dmFyIHQsbj1vLmxlbmd0aDtmb3Iocz1uZXcgQXJyYXkobiksaT1uZXcgQXJyYXkobiksdD0wO3Q8bjsrK3Qpc1t0XT1pc05hTihpW3RdPStlKG9bdF0sdCxvKSk/MDorYShvW3RdLHQsbyl9fXZhciBvLHMsaSxhPU9iamVjdChyLmEpKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9T2JqZWN0KHIuYSkobnVsbD09ZT8wOitlKSksdC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe289ZSxuKCl9LHQuc3RyZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpPYmplY3Qoci5hKSgrZSksbigpLHQpOmF9LHQueT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbz9vOk9iamVjdChyLmEpKCtvKSxuKCksdCk6ZX0sdH19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbz1PYmplY3QoYS5hKShlKSxzPW8uZm9ybWF0LGk9by5mb3JtYXRQcmVmaXgsb31uLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBpfSksdC5hPXI7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiKTtyKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiKTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9T2JqZWN0KHIuYSkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe2lmKChuPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixyPWUuc2xpY2UoMCxuKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrZS5zbGljZShuKzEpXX19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2Zvcih2YXIgbz1uLmxlbmd0aCxzPVtdLGk9MCxhPWVbMF0sbD0wO28+MCYmYT4wJiYobCthKzE+ciYmKGE9TWF0aC5tYXgoMSxyLWwpKSxzLnB1c2gobi5zdWJzdHJpbmcoby09YSxvK2EpKSwhKChsKz1hKzEpPnIpKTspYT1lW2k9KGkrMSklZS5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih0KXtyZXR1cm4gZVsrdF19KX19fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qoby5hKShlLHQpO2lmKCFuKXJldHVybiBlKyIiO3ZhciBzPW5bMF0saT1uWzFdLGE9aS0ocj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsbD1zLmxlbmd0aDtyZXR1cm4gYT09PWw/czphPmw/cytuZXcgQXJyYXkoYS1sKzEpLmpvaW4oIjAiKTphPjA/cy5zbGljZSgwLGEpKyIuIitzLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK09iamVjdChvLmEpKGUsTWF0aC5tYXgoMCx0K2EtMSkpWzBdfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qoci5hKShlLHQpO2lmKCFuKXJldHVybiBlKyIiO3ZhciBvPW5bMF0scz1uWzFdO3JldHVybiBzPDA/IjAuIituZXcgQXJyYXkoLXMpLmpvaW4oIjAiKStvOm8ubGVuZ3RoPnMrMT9vLnNsaWNlKDAscysxKSsiLiIrby5zbGljZShzKzEpOm8rbmV3IEFycmF5KHMtby5sZW5ndGgrMikuam9pbigiMCIpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG5ldyBvKGUpfWZ1bmN0aW9uIG8oZSl7aWYoISh0PXMuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDt0aGlzLmZpbGw9dFsxXXx8IiAiLHRoaXMuYWxpZ249dFsyXXx8Ij4iLHRoaXMuc2lnbj10WzNdfHwiLSIsdGhpcy5zeW1ib2w9dFs0XXx8IiIsdGhpcy56ZXJvPSEhdFs1XSx0aGlzLndpZHRoPXRbNl0mJit0WzZdLHRoaXMuY29tbWE9ISF0WzddLHRoaXMucHJlY2lzaW9uPXRbOF0mJit0WzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIXRbOV0sdGhpcy50eXBlPXRbMTBdfHwiIn10LmE9cjt2YXIgcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtyLnByb3RvdHlwZT1vLnByb3RvdHlwZSxvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtlOmZvcih2YXIgdCxuPWUubGVuZ3RoLHI9MSxvPS0xO3I8bjsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bz10PXI7YnJlYWs7Y2FzZSIwIjowPT09byYmKG89ciksdD1yO2JyZWFrO2RlZmF1bHQ6aWYobz4wKXtpZighK2Vbcl0pYnJlYWsgZTtvPTB9fXJldHVybiBvPjA/ZS5zbGljZSgwLG8pK2Uuc2xpY2UodCsxKTplfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanMiKTt0LmE9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybigxMDAqZSkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChvLmEpKDEwMCplLHQpfSxyOm8uYSxzOnIuYSxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiByLmN9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIpO24uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIpO24uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIik7bi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIik7bi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiKTtuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiKSxkPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTt0LmE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiB0KGUpe3ZhciB0LHMsaSxsPVQscD1BO2lmKCJjIj09PXYpcD1DKGUpK3AsZT0iIjtlbHNle2U9K2U7dmFyIGg9ZTwwO2lmKGU9QyhNYXRoLmFicyhlKSxFKSx5JiYoZT1PYmplY3QoYS5hKShlKSksaCYmMD09K2UmJihoPSExKSxsPShoPyIoIj09PW8/bzoiLSI6Ii0iPT09b3x8IigiPT09bz8iIjpvKStsLHA9KCJzIj09PXY/ZFs4K3UuYi8zXToiIikrcCsoaCYmIigiPT09bz8iKSI6IiIpLE8pZm9yKHQ9LTEscz1lLmxlbmd0aDsrK3Q8czspaWYoNDg+KGk9ZS5jaGFyQ29kZUF0KHQpKXx8aT41Nyl7cD0oNDY9PT1pP2YrZS5zbGljZSh0KzEpOmUuc2xpY2UodCkpK3AsZT1lLnNsaWNlKDAsdCk7YnJlYWt9fWImJiFjJiYoZT1fKGUsMS8wKSk7dmFyIFM9bC5sZW5ndGgrZS5sZW5ndGgrcC5sZW5ndGgsUj1TPGc/bmV3IEFycmF5KGctUysxKS5qb2luKG4pOiIiO3N3aXRjaChiJiZjJiYoZT1fKFIrZSxSLmxlbmd0aD9nLXAubGVuZ3RoOjEvMCksUj0iIikscil7Y2FzZSI8IjplPWwrZStwK1I7YnJlYWs7Y2FzZSI9IjplPWwrUitlK3A7YnJlYWs7Y2FzZSJeIjplPVIuc2xpY2UoMCxTPVIubGVuZ3RoPj4xKStsK2UrcCtSLnNsaWNlKFMpO2JyZWFrO2RlZmF1bHQ6ZT1SK2wrZStwfXJldHVybiBtKGUpfWU9T2JqZWN0KGkuYSkoZSk7dmFyIG49ZS5maWxsLHI9ZS5hbGlnbixvPWUuc2lnbixzPWUuc3ltYm9sLGM9ZS56ZXJvLGc9ZS53aWR0aCxiPWUuY29tbWEsRT1lLnByZWNpc2lvbix5PWUudHJpbSx2PWUudHlwZTsibiI9PT12PyhiPSEwLHY9ImciKTpsLmFbdl18fChudWxsPT1FJiYoRT0xMikseT0hMCx2PSJnIiksKGN8fCIwIj09PW4mJiI9Ij09PXIpJiYoYz0hMCxuPSIwIixyPSI9Iik7dmFyIFQ9IiQiPT09cz9wWzBdOiIjIj09PXMmJi9bYm94WF0vLnRlc3Qodik/IjAiK3YudG9Mb3dlckNhc2UoKToiIixBPSIkIj09PXM/cFsxXTovWyVwXS8udGVzdCh2KT9oOiIiLEM9bC5hW3ZdLE89L1tkZWZncHJzJV0vLnRlc3Qodik7cmV0dXJuIEU9bnVsbD09RT82Oi9bZ3Byc10vLnRlc3Qodik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxFKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxFKSksdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlKyIifSx0fWZ1bmN0aW9uIG4oZSxuKXt2YXIgbz10KChlPU9iamVjdChpLmEpKGUpLGUudHlwZT0iZiIsZSkpLHM9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoT2JqZWN0KHIuYSkobikvMykpKSxhPU1hdGgucG93KDEwLC1zKSxsPWRbOCtzLzNdO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyhhKmUpK2x9fXZhciBfPWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP09iamVjdChvLmEpKGUuZ3JvdXBpbmcsZS50aG91c2FuZHMpOmMuYSxwPWUuY3VycmVuY3ksZj1lLmRlY2ltYWwsbT1lLm51bWVyYWxzP09iamVjdChzLmEpKGUubnVtZXJhbHMpOmMuYSxoPWUucGVyY2VudHx8IiUiO3JldHVybntmb3JtYXQ6dCxmb3JtYXRQcmVmaXg6bn19fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLC1PYmplY3Qoci5hKShNYXRoLmFicyhlKSkpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihPYmplY3Qoci5hKSh0KS8zKSkpLU9iamVjdChyLmEpKE1hdGguYWJzKGUpKSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIik7dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsT2JqZWN0KHIuYSkodCktT2JqZWN0KHIuYSkoZSkpKzF9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5yZXNldCgpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPWUucz10K24sbz1yLXQscz1yLW87ZS50PXQtcysobi1vKX10LmE9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ9LHIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7byhzLGUsdGhpcy50KSxvKHRoaXMscy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9cy50OnRoaXMucz1zLnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIHM9bmV3IHJ9LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2FyZWEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2IucG9pbnQ9c31mdW5jdGlvbiBvKCl7aShhLGwpfWZ1bmN0aW9uIHMoZSx0KXtiLnBvaW50PWksYT1lLGw9dCxlKj1wLnIsdCo9cC5yLHU9ZSxjPU9iamVjdChwLmcpKHQ9dC8yK3AucSksZD1PYmplY3QocC50KSh0KX1mdW5jdGlvbiBpKGUsdCl7ZSo9cC5yLHQqPXAucix0PXQvMitwLnE7dmFyIG49ZS11LHI9bj49MD8xOi0xLG89cipuLHM9T2JqZWN0KHAuZykodCksaT1PYmplY3QocC50KSh0KSxhPWQqaSxsPWMqcythKk9iamVjdChwLmcpKG8pLF89YSpyKk9iamVjdChwLnQpKG8pO2guYWRkKE9iamVjdChwLmUpKF8sbCkpLHU9ZSxjPXMsZD1pfW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KTt2YXIgYSxsLHUsYyxkLF89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL25vb3AuanMiKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvc3RyZWFtLmpzIiksaD1PYmplY3QoXy5hKSgpLGc9T2JqZWN0KF8uYSkoKSxiPXtwb2ludDpmLmEsbGluZVN0YXJ0OmYuYSxsaW5lRW5kOmYuYSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnJlc2V0KCksYi5saW5lU3RhcnQ9cixiLmxpbmVFbmQ9b30scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBlPStoO2cuYWRkKGU8MD9wLncrZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1mLmF9LHNwaGVyZTpmdW5jdGlvbigpe2cuYWRkKHAudyl9fTt0LmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGcucmVzZXQoKSxPYmplY3QobS5hKShlLGIpLDIqZ319LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2JvdW5kcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7di5wdXNoKFQ9W3A9ZSxtPWVdKSx0PGYmJihmPXQpLHQ+aCYmKGg9dCl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU9iamVjdChPLmEpKFtlKlMucix0KlMucl0pO2lmKHkpe3ZhciByPU9iamVjdChPLmMpKHksbiksbz1bclsxXSwtclswXSwwXSxzPU9iamVjdChPLmMpKG8scik7T2JqZWN0KE8uZSkocykscz1PYmplY3QoTy5nKShzKTt2YXIgaSxhPWUtZyxsPWE+MD8xOi0xLHU9c1swXSpTLmgqbCxkPU9iamVjdChTLmEpKGEpPjE4MDtkXihsKmc8dSYmdTxsKmUpPyhpPXNbMV0qUy5oKT5oJiYoaD1pKToodT0odSszNjApJTM2MC0xODAsZF4obCpnPHUmJnU8bCplKT8oaT0tc1sxXSpTLmgpPGYmJihmPWkpOih0PGYmJihmPXQpLHQ+aCYmKGg9dCkpKSxkP2U8Zz9jKHAsZSk+YyhwLG0pJiYobT1lKTpjKGUsbSk+YyhwLG0pJiYocD1lKTptPj1wPyhlPHAmJihwPWUpLGU+bSYmKG09ZSkpOmU+Zz9jKHAsZSk+YyhwLG0pJiYobT1lKTpjKGUsbSk+YyhwLG0pJiYocD1lKX1lbHNlIHYucHVzaChUPVtwPWUsbT1lXSk7dDxmJiYoZj10KSx0PmgmJihoPXQpLHk9bixnPWV9ZnVuY3Rpb24gcygpe3gucG9pbnQ9b31mdW5jdGlvbiBpKCl7VFswXT1wLFRbMV09bSx4LnBvaW50PXIseT1udWxsfWZ1bmN0aW9uIGEoZSx0KXtpZih5KXt2YXIgbj1lLWc7ai5hZGQoT2JqZWN0KFMuYSkobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBiPWUsRT10O0MuYi5wb2ludChlLHQpLG8oZSx0KX1mdW5jdGlvbiBsKCl7Qy5iLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHUoKXthKGIsRSksQy5iLmxpbmVFbmQoKSxPYmplY3QoUy5hKShqKT5TLmkmJihwPS0obT0xODApKSxUWzBdPXAsVFsxXT1tLHk9bnVsbH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuKHQtPWUpPDA/dCszNjA6dH1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGVbMF0tdFswXX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH12YXIgcCxmLG0saCxnLGIsRSx5LHYsVCxBPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanMiKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYXJlYS5qcyIpLE89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jYXJ0ZXNpYW4uanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLFI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9zdHJlYW0uanMiKSxqPU9iamVjdChBLmEpKCkseD17cG9pbnQ6cixsaW5lU3RhcnQ6cyxsaW5lRW5kOmkscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1hLHgubGluZVN0YXJ0PWwseC5saW5lRW5kPXUsai5yZXNldCgpLEMuYi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0MuYi5wb2x5Z29uRW5kKCkseC5wb2ludD1yLHgubGluZVN0YXJ0PXMseC5saW5lRW5kPWksQy5hPDA/KHA9LShtPTE4MCksZj0tKGg9OTApKTpqPlMuaT9oPTkwOmo8LVMuaSYmKGY9LTkwKSxUWzBdPXAsVFsxXT1tfX07dC5hPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhO2lmKGg9bT0tKHA9Zj0xLzApLHY9W10sT2JqZWN0KFIuYSkoZSx4KSxuPXYubGVuZ3RoKXtmb3Iodi5zb3J0KGQpLHQ9MSxyPXZbMF0scz1bcl07dDxuOysrdClvPXZbdF0sXyhyLG9bMF0pfHxfKHIsb1sxXSk/KGMoclswXSxvWzFdKT5jKHJbMF0sclsxXSkmJihyWzFdPW9bMV0pLGMob1swXSxyWzFdKT5jKHJbMF0sclsxXSkmJihyWzBdPW9bMF0pKTpzLnB1c2gocj1vKTtmb3IoaT0tMS8wLG49cy5sZW5ndGgtMSx0PTAscj1zW25dO3Q8PW47cj1vLCsrdClvPXNbdF0sKGE9YyhyWzFdLG9bMF0pKT5pJiYoaT1hLHA9b1swXSxtPXJbMV0pfXJldHVybiB2PVQ9bnVsbCxwPT09MS8wfHxmPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3AsZl0sW20saF1dfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2FydGVzaWFuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuW09iamVjdChjLmUpKGVbMV0sZVswXSksT2JqZWN0KGMuYykoZVsyXSldfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZVswXSxuPWVbMV0scj1PYmplY3QoYy5nKShuKTtyZXR1cm5bcipPYmplY3QoYy5nKSh0KSxyKk9iamVjdChjLnQpKHQpLE9iamVjdChjLnQpKG4pXX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGVbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGEoZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuW2VbMF0qdCxlWzFdKnQsZVsyXSp0XX1mdW5jdGlvbiB1KGUpe3ZhciB0PU9iamVjdChjLnUpKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH10Lmc9cix0LmE9byx0LmQ9cyx0LmM9aSx0LmI9YSx0LmY9bCx0LmU9dTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2VudHJvaWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2UqPXgucix0Kj14LnI7dmFyIG49T2JqZWN0KHguZykodCk7byhuKk9iamVjdCh4LmcpKGUpLG4qT2JqZWN0KHgudCkoZSksT2JqZWN0KHgudCkodCkpfWZ1bmN0aW9uIG8oZSx0LG4peysrcCxtKz0oZS1tKS9wLGgrPSh0LWgpL3AsZys9KG4tZykvcH1mdW5jdGlvbiBzKCl7dy5wb2ludD1pfWZ1bmN0aW9uIGkoZSx0KXtlKj14LnIsdCo9eC5yO3ZhciBuPU9iamVjdCh4LmcpKHQpO1M9bipPYmplY3QoeC5nKShlKSxSPW4qT2JqZWN0KHgudCkoZSksaj1PYmplY3QoeC50KSh0KSx3LnBvaW50PWEsbyhTLFIsail9ZnVuY3Rpb24gYShlLHQpe2UqPXgucix0Kj14LnI7dmFyIG49T2JqZWN0KHguZykodCkscj1uKk9iamVjdCh4LmcpKGUpLHM9bipPYmplY3QoeC50KShlKSxpPU9iamVjdCh4LnQpKHQpLGE9T2JqZWN0KHguZSkoT2JqZWN0KHgudSkoKGE9UippLWoqcykqYSsoYT1qKnItUyppKSphKyhhPVMqcy1SKnIpKmEpLFMqcitSKnMraippKTtmKz1hLGIrPWEqKFMrKFM9cikpLEUrPWEqKFIrKFI9cykpLHkrPWEqKGorKGo9aSkpLG8oUyxSLGopfWZ1bmN0aW9uIGwoKXt3LnBvaW50PXJ9ZnVuY3Rpb24gdSgpe3cucG9pbnQ9ZH1mdW5jdGlvbiBjKCl7XyhDLE8pLHcucG9pbnQ9cn1mdW5jdGlvbiBkKGUsdCl7Qz1lLE89dCxlKj14LnIsdCo9eC5yLHcucG9pbnQ9Xzt2YXIgbj1PYmplY3QoeC5nKSh0KTtTPW4qT2JqZWN0KHguZykoZSksUj1uKk9iamVjdCh4LnQpKGUpLGo9T2JqZWN0KHgudCkodCksbyhTLFIsail9ZnVuY3Rpb24gXyhlLHQpe2UqPXgucix0Kj14LnI7dmFyIG49T2JqZWN0KHguZykodCkscj1uKk9iamVjdCh4LmcpKGUpLHM9bipPYmplY3QoeC50KShlKSxpPU9iamVjdCh4LnQpKHQpLGE9UippLWoqcyxsPWoqci1TKmksdT1TKnMtUipyLGM9T2JqZWN0KHgudSkoYSphK2wqbCt1KnUpLGQ9T2JqZWN0KHguYykoYyksXz1jJiYtZC9jO3YrPV8qYSxUKz1fKmwsQSs9Xyp1LGYrPWQsYis9ZCooUysoUz1yKSksRSs9ZCooUisoUj1zKSkseSs9ZCooaisoaj1pKSksbyhTLFIsail9dmFyIHAsZixtLGgsZyxiLEUseSx2LFQsQSxDLE8sUyxSLGoseD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbm9vcC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9zdHJlYW0uanMiKSx3PXtzcGhlcmU6TC5hLHBvaW50OnIsbGluZVN0YXJ0OnMsbGluZUVuZDpsLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3cubGluZVN0YXJ0PXUsdy5saW5lRW5kPWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt3LmxpbmVTdGFydD1zLHcubGluZUVuZD1sfX07dC5hPWZ1bmN0aW9uKGUpe3A9Zj1tPWg9Zz1iPUU9eT12PVQ9QT0wLE9iamVjdChELmEpKGUsdyk7dmFyIHQ9dixuPVQscj1BLG89dCp0K24qbityKnI7cmV0dXJuIG88eC5qJiYodD1iLG49RSxyPXksZjx4LmkmJih0PW0sbj1oLHI9ZyksKG89dCp0K24qbityKnIpPHguaik/W05hTixOYU5dOltPYmplY3QoeC5lKShuLHQpKnguaCxPYmplY3QoeC5jKShyL09iamVjdCh4LnUpKG8pKSp4LmhdfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixpLGwpe2lmKG4pe3ZhciB1PU9iamVjdChhLmcpKHQpLGM9T2JqZWN0KGEudCkodCksZD1yKm47bnVsbD09aT8oaT10K3IqYS53LGw9dC1kLzIpOihpPW8odSxpKSxsPW8odSxsKSwocj4wP2k8bDppPmwpJiYoaSs9ciphLncpKTtmb3IodmFyIF8scD1pO3I+MD9wPmw6cDxsO3AtPWQpXz1PYmplY3Qocy5nKShbdSwtYypPYmplY3QoYS5nKShwKSwtYypPYmplY3QoYS50KShwKV0pLGUucG9pbnQoX1swXSxfWzFdKX19ZnVuY3Rpb24gbyhlLHQpe3Q9T2JqZWN0KHMuYSkodCksdFswXS09ZSxPYmplY3Qocy5lKSh0KTt2YXIgbj1PYmplY3QoYS5iKSgtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1uOm4pK2Eudy1hLmkpJWEud310LmE9cjt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NhcnRlc2lhbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jb25zdGFudC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3JvdGF0aW9uLmpzIik7dC5iPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe24ucHVzaChlPW8oZSx0KSksZVswXSo9YS5oLGVbMV0qPWEuaH1mdW5jdGlvbiB0KCl7dmFyIGU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdD11LmFwcGx5KHRoaXMsYXJndW1lbnRzKSphLnIsaT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKSphLnI7cmV0dXJuIG49W10sbz1PYmplY3QobC5iKSgtZVswXSphLnIsLWVbMV0qYS5yLDApLmludmVydCxyKGQsdCxpLDEpLGU9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1vPW51bGwsZX12YXIgbixvLHM9T2JqZWN0KGkuYSkoWzAsMF0pLHU9T2JqZWN0KGkuYSkoOTApLGM9T2JqZWN0KGkuYSkoNiksZD17cG9pbnQ6ZX07cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6T2JqZWN0KGkuYSkoWytlWzBdLCtlWzFdXSksdCk6c30sdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpPYmplY3QoaS5hKSgrZSksdCk6dX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpPYmplY3QoaS5hKSgrZSksdCk6Y30sdH19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYW50aW1lcmlkaWFuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbj1OYU4scj1OYU4scz1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksdD0xfSxwb2ludDpmdW5jdGlvbihpLGwpe3ZhciB1PWk+MD9hLm86LWEubyxjPU9iamVjdChhLmEpKGktbik7T2JqZWN0KGEuYSkoYy1hLm8pPGEuaT8oZS5wb2ludChuLHI9KHIrbCkvMj4wP2EubDotYS5sKSxlLnBvaW50KHMsciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHUsciksZS5wb2ludChpLHIpLHQ9MCk6cyE9PXUmJmM+PWEubyYmKE9iamVjdChhLmEpKG4tcyk8YS5pJiYobi09cyphLmkpLE9iamVjdChhLmEpKGktdSk8YS5pJiYoaS09dSphLmkpLHI9byhuLHIsaSxsKSxlLnBvaW50KHMsciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHUsciksdD0wKSxlLnBvaW50KG49aSxyPWwpLHM9dX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLG49cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIG8oZSx0LG4scil7dmFyIG8scyxpPU9iamVjdChhLnQpKGUtbik7cmV0dXJuIE9iamVjdChhLmEpKGkpPmEuaT9PYmplY3QoYS5kKSgoT2JqZWN0KGEudCkodCkqKHM9T2JqZWN0KGEuZykocikpKk9iamVjdChhLnQpKG4pLU9iamVjdChhLnQpKHIpKihvPU9iamVjdChhLmcpKHQpKSpPYmplY3QoYS50KShlKSkvKG8qcyppKSk6KHQrcikvMn1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBvO2lmKG51bGw9PWUpbz1uKmEubCxyLnBvaW50KC1hLm8sbyksci5wb2ludCgwLG8pLHIucG9pbnQoYS5vLG8pLHIucG9pbnQoYS5vLDApLHIucG9pbnQoYS5vLC1vKSxyLnBvaW50KDAsLW8pLHIucG9pbnQoLWEubywtbyksci5wb2ludCgtYS5vLDApLHIucG9pbnQoLWEubyxvKTtlbHNlIGlmKE9iamVjdChhLmEpKGVbMF0tdFswXSk+YS5pKXt2YXIgcz1lWzBdPHRbMF0/YS5vOi1hLm87bz1uKnMvMixyLnBvaW50KC1zLG8pLHIucG9pbnQoMCxvKSxyLnBvaW50KHMsbyl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKTt0LmE9T2JqZWN0KGkuYSkoZnVuY3Rpb24oKXtyZXR1cm4hMH0scixzLFstYS5vLC1hLmxdKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9idWZmZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ub29wLmpzIik7dC5hPWZ1bmN0aW9uKCl7dmFyIGUsdD1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxuKXtlLnB1c2goW3Qsbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LnB1c2goZT1bXSl9LGxpbmVFbmQ6ci5hLHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEmJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49dDtyZXR1cm4gdD1bXSxlPW51bGwsbn19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9jaXJjbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jYXJ0ZXNpYW4uanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9pbnRFcXVhbC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIscyl7T2JqZWN0KG8uYSkocyxlLF8scix0LG4pfWZ1bmN0aW9uIG4oZSx0KXtyZXR1cm4gT2JqZWN0KHMuZykoZSkqT2JqZWN0KHMuZykodCk+ZH1mdW5jdGlvbiBsKGUpe3ZhciB0LHIsbyxhLGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2E9bz0hMSxsPTF9LHBvaW50OmZ1bmN0aW9uKGQsXyl7dmFyIG0saD1bZCxfXSxnPW4oZCxfKSxiPXA/Zz8wOmMoZCxfKTpnP2MoZCsoZDwwP3Mubzotcy5vKSxfKTowO2lmKCF0JiYoYT1vPWcpJiZlLmxpbmVTdGFydCgpLGchPT1vJiYoIShtPXUodCxoKSl8fE9iamVjdChpLmEpKHQsbSl8fE9iamVjdChpLmEpKGgsbSkpJiYoaFswXSs9cy5pLGhbMV0rPXMuaSxnPW4oaFswXSxoWzFdKSksZyE9PW8pbD0wLGc/KGUubGluZVN0YXJ0KCksbT11KGgsdCksZS5wb2ludChtWzBdLG1bMV0pKToobT11KHQsaCksZS5wb2ludChtWzBdLG1bMV0pLGUubGluZUVuZCgpKSx0PW07ZWxzZSBpZihmJiZ0JiZwXmcpe3ZhciBFO2Imcnx8IShFPXUoaCx0LCEwKSl8fChsPTAscD8oZS5saW5lU3RhcnQoKSxlLnBvaW50KEVbMF1bMF0sRVswXVsxXSksZS5wb2ludChFWzFdWzBdLEVbMV1bMV0pLGUubGluZUVuZCgpKTooZS5wb2ludChFWzFdWzBdLEVbMV1bMV0pLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChFWzBdWzBdLEVbMF1bMV0pKSl9IWd8fHQmJk9iamVjdChpLmEpKHQsaCl8fGUucG9pbnQoaFswXSxoWzFdKSx0PWgsbz1nLHI9Yn0sbGluZUVuZDpmdW5jdGlvbigpe28mJmUubGluZUVuZCgpLHQ9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gbHwoYSYmbyk8PDF9fX1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgbz1PYmplY3Qoci5hKShlKSxpPU9iamVjdChyLmEpKHQpLGE9WzEsMCwwXSxsPU9iamVjdChyLmMpKG8saSksdT1PYmplY3Qoci5kKShsLGwpLGM9bFswXSxfPXUtYypjO2lmKCFfKXJldHVybiFuJiZlO3ZhciBwPWQqdS9fLGY9LWQqYy9fLG09T2JqZWN0KHIuYykoYSxsKSxoPU9iamVjdChyLmYpKGEscCksZz1PYmplY3Qoci5mKShsLGYpO09iamVjdChyLmIpKGgsZyk7dmFyIGI9bSxFPU9iamVjdChyLmQpKGgsYikseT1PYmplY3Qoci5kKShiLGIpLHY9RSpFLXkqKE9iamVjdChyLmQpKGgsaCktMSk7aWYoISh2PDApKXt2YXIgVD1PYmplY3Qocy51KSh2KSxBPU9iamVjdChyLmYpKGIsKC1FLVQpL3kpO2lmKE9iamVjdChyLmIpKEEsaCksQT1PYmplY3Qoci5nKShBKSwhbilyZXR1cm4gQTt2YXIgQyxPPWVbMF0sUz10WzBdLFI9ZVsxXSxqPXRbMV07UzxPJiYoQz1PLE89UyxTPUMpO3ZhciB4PVMtTyxMPU9iamVjdChzLmEpKHgtcy5vKTxzLmksRD1MfHx4PHMuaTtpZighTCYmajxSJiYoQz1SLFI9aixqPUMpLEQ/TD9SK2o+MF5BWzFdPChPYmplY3Qocy5hKShBWzBdLU8pPHMuaT9SOmopOlI8PUFbMV0mJkFbMV08PWo6eD5zLm9eKE88PUFbMF0mJkFbMF08PVMpKXt2YXIgdz1PYmplY3Qoci5mKShiLCgtRStUKS95KTtyZXR1cm4gT2JqZWN0KHIuYikodyxoKSxbQSxPYmplY3Qoci5nKSh3KV19fX1mdW5jdGlvbiBjKHQsbil7dmFyIHI9cD9lOnMuby1lLG89MDtyZXR1cm4gdDwtcj9vfD0xOnQ+ciYmKG98PTIpLG48LXI/b3w9NDpuPnImJihvfD04KSxvfXZhciBkPU9iamVjdChzLmcpKGUpLF89NipzLnIscD1kPjAsZj1PYmplY3Qocy5hKShkKT5zLmk7cmV0dXJuIE9iamVjdChhLmEpKG4sbCx0LHA/WzAsLWVdOlstcy5vLGUtcy5vXSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2V4dGVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVjdGFuZ2xlLmpzIik7dC5hPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLG89MCxzPTAsaT05NjAsYT01MDA7cmV0dXJuIG49e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gZSYmdD09PW4/ZTplPU9iamVjdChyLmEpKG8scyxpLGEpKHQ9bil9LGV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rclswXVswXSxzPStyWzBdWzFdLGk9K3JbMV1bMF0sYT0rclsxXVsxXSxlPXQ9bnVsbCxuKTpbW28sc10sW2ksYV1dfX19fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gbyhlLHQpe3JldHVybigoZT1lLngpWzBdPDA/ZVsxXS1hLmwtYS5pOmEubC1lWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tYS5sLWEuaTphLmwtdFsxXSl9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2J1ZmZlci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL3Jlam9pbi5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvbHlnb25Db250YWlucy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiBmdW5jdGlvbihjKXtmdW5jdGlvbiBkKHQsbil7ZSh0LG4pJiZjLnBvaW50KHQsbil9ZnVuY3Rpb24gXyhlLHQpe3YucG9pbnQoZSx0KX1mdW5jdGlvbiBwKCl7Ty5wb2ludD1fLHYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZigpe08ucG9pbnQ9ZCx2LmxpbmVFbmQoKX1mdW5jdGlvbiBtKGUsdCl7eS5wdXNoKFtlLHRdKSxBLnBvaW50KGUsdCl9ZnVuY3Rpb24gaCgpe0EubGluZVN0YXJ0KCkseT1bXX1mdW5jdGlvbiBnKCl7bSh5WzBdWzBdLHlbMF1bMV0pLEEubGluZUVuZCgpO3ZhciBlLHQsbixvLHM9QS5jbGVhbigpLGk9VC5yZXN1bHQoKSxhPWkubGVuZ3RoO2lmKHkucG9wKCksYi5wdXNoKHkpLHk9bnVsbCxhKWlmKDEmcyl7aWYobj1pWzBdLCh0PW4ubGVuZ3RoLTEpPjApe2ZvcihDfHwoYy5wb2x5Z29uU3RhcnQoKSxDPSEwKSxjLmxpbmVTdGFydCgpLGU9MDtlPHQ7KytlKWMucG9pbnQoKG89bltlXSlbMF0sb1sxXSk7Yy5saW5lRW5kKCl9fWVsc2UgYT4xJiYyJnMmJmkucHVzaChpLnBvcCgpLmNvbmNhdChpLnNoaWZ0KCkpKSxFLnB1c2goaS5maWx0ZXIocikpfXZhciBiLEUseSx2PXQoYyksVD1PYmplY3Qocy5hKSgpLEE9dChUKSxDPSExLE89e3BvaW50OmQsbGluZVN0YXJ0OnAsbGluZUVuZDpmLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe08ucG9pbnQ9bSxPLmxpbmVTdGFydD1oLE8ubGluZUVuZD1nLEU9W10sYj1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe08ucG9pbnQ9ZCxPLmxpbmVTdGFydD1wLE8ubGluZUVuZD1mLEU9T2JqZWN0KHUubikoRSk7dmFyIGU9T2JqZWN0KGwuYSkoYixhKTtFLmxlbmd0aD8oQ3x8KGMucG9seWdvblN0YXJ0KCksQz0hMCksT2JqZWN0KGkuYSkoRSxvLGUsbixjKSk6ZSYmKEN8fChjLnBvbHlnb25TdGFydCgpLEM9ITApLGMubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxjKSxjLmxpbmVFbmQoKSksQyYmKGMucG9seWdvbkVuZCgpLEM9ITEpLEU9Yj1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtjLnBvbHlnb25TdGFydCgpLGMubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxjKSxjLmxpbmVFbmQoKSxjLnBvbHlnb25FbmQoKX19O3JldHVybiBPfX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvbGluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0LG4scixvLHMpe3ZhciBpLGE9ZVswXSxsPWVbMV0sdT10WzBdLGM9dFsxXSxkPTAsXz0xLHA9dS1hLGY9Yy1sO2lmKGk9bi1hLHB8fCEoaT4wKSl7aWYoaS89cCxwPDApe2lmKGk8ZClyZXR1cm47aTxfJiYoXz1pKX1lbHNlIGlmKHA+MCl7aWYoaT5fKXJldHVybjtpPmQmJihkPWkpfWlmKGk9by1hLHB8fCEoaTwwKSl7aWYoaS89cCxwPDApe2lmKGk+XylyZXR1cm47aT5kJiYoZD1pKX1lbHNlIGlmKHA+MCl7aWYoaTxkKXJldHVybjtpPF8mJihfPWkpfWlmKGk9ci1sLGZ8fCEoaT4wKSl7aWYoaS89ZixmPDApe2lmKGk8ZClyZXR1cm47aTxfJiYoXz1pKX1lbHNlIGlmKGY+MCl7aWYoaT5fKXJldHVybjtpPmQmJihkPWkpfWlmKGk9cy1sLGZ8fCEoaTwwKSl7aWYoaS89ZixmPDApe2lmKGk+XylyZXR1cm47aT5kJiYoZD1pKX1lbHNlIGlmKGY+MCl7aWYoaTxkKXJldHVybjtpPF8mJihfPWkpfXJldHVybiBkPjAmJihlWzBdPWErZCpwLGVbMV09bCtkKmYpLF88MSYmKHRbMF09YStfKnAsdFsxXT1sK18qZiksITB9fX19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWN0YW5nbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtmdW5jdGlvbiBkKG8scyl7cmV0dXJuIGU8PW8mJm88PW4mJnQ8PXMmJnM8PXJ9ZnVuY3Rpb24gXyhvLHMsaSxhKXt2YXIgbD0wLHU9MDtpZihudWxsPT1vfHwobD1wKG8saSkpIT09KHU9cChzLGkpKXx8bShvLHMpPDBeaT4wKWRve2EucG9pbnQoMD09PWx8fDM9PT1sP2U6bixsPjE/cjp0KX13aGlsZSgobD0obCtpKzQpJTQpIT09dSk7ZWxzZSBhLnBvaW50KHNbMF0sc1sxXSl9ZnVuY3Rpb24gcChyLHMpe3JldHVybiBPYmplY3Qoby5hKShyWzBdLWUpPG8uaT9zPjA/MDozOk9iamVjdChvLmEpKHJbMF0tbik8by5pP3M+MD8yOjE6T2JqZWN0KG8uYSkoclsxXS10KTxvLmk/cz4wPzE6MDpzPjA/MzoyfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbShlLngsdC54KX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49cChlLDEpLHI9cCh0LDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/dFsxXS1lWzFdOjE9PT1uP2VbMF0tdFswXToyPT09bj9lWzFdLXRbMV06dFswXS1lWzBdfXJldHVybiBmdW5jdGlvbihvKXtmdW5jdGlvbiBwKGUsdCl7ZChlLHQpJiZ3LnBvaW50KGUsdCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgdD0wLG49MCxvPVQubGVuZ3RoO248bzsrK24pZm9yKHZhciBzLGksYT1UW25dLGw9MSx1PWEubGVuZ3RoLGM9YVswXSxkPWNbMF0sXz1jWzFdO2w8dTsrK2wpcz1kLGk9XyxjPWFbbF0sZD1jWzBdLF89Y1sxXSxpPD1yP18+ciYmKGQtcykqKHItaSk+KF8taSkqKGUtcykmJisrdDpfPD1yJiYoZC1zKSooci1pKTwoXy1pKSooZS1zKSYmLS10O3JldHVybiB0fWZ1bmN0aW9uIGgoKXt3PU0sdj1bXSxUPVtdLEQ9ITB9ZnVuY3Rpb24gZygpe3ZhciBlPW0oKSx0PUQmJmUsbj0odj1PYmplY3QobC5uKSh2KSkubGVuZ3RoOyh0fHxuKSYmKG8ucG9seWdvblN0YXJ0KCksdCYmKG8ubGluZVN0YXJ0KCksXyhudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSksbiYmT2JqZWN0KGEuYSkodixmLGUsXyxvKSxvLnBvbHlnb25FbmQoKSksdz1vLHY9VD1BPW51bGx9ZnVuY3Rpb24gYigpe2sucG9pbnQ9eSxUJiZULnB1c2goQT1bXSksTD0hMCx4PSExLFI9aj1OYU59ZnVuY3Rpb24gRSgpe3YmJih5KEMsTyksUyYmeCYmTS5yZWpvaW4oKSx2LnB1c2goTS5yZXN1bHQoKSkpLGsucG9pbnQ9cCx4JiZ3LmxpbmVFbmQoKX1mdW5jdGlvbiB5KG8scyl7dmFyIGE9ZChvLHMpO2lmKFQmJkEucHVzaChbbyxzXSksTClDPW8sTz1zLFM9YSxMPSExLGEmJih3LmxpbmVTdGFydCgpLHcucG9pbnQobyxzKSk7ZWxzZSBpZihhJiZ4KXcucG9pbnQobyxzKTtlbHNle3ZhciBsPVtSPU1hdGgubWF4KGMsTWF0aC5taW4odSxSKSksaj1NYXRoLm1heChjLE1hdGgubWluKHUsaikpXSxfPVtvPU1hdGgubWF4KGMsTWF0aC5taW4odSxvKSkscz1NYXRoLm1heChjLE1hdGgubWluKHUscykpXTtPYmplY3QoaS5hKShsLF8sZSx0LG4scik/KHh8fCh3LmxpbmVTdGFydCgpLHcucG9pbnQobFswXSxsWzFdKSksdy5wb2ludChfWzBdLF9bMV0pLGF8fHcubGluZUVuZCgpLEQ9ITEpOmEmJih3LmxpbmVTdGFydCgpLHcucG9pbnQobyxzKSxEPSExKX1SPW8saj1zLHg9YX12YXIgdixULEEsQyxPLFMsUixqLHgsTCxELHc9byxNPU9iamVjdChzLmEpKCksaz17cG9pbnQ6cCxsaW5lU3RhcnQ6YixsaW5lRW5kOkUscG9seWdvblN0YXJ0OmgscG9seWdvbkVuZDpnfTtyZXR1cm4ga319dC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYnVmZmVyLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvbGluZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL3Jlam9pbi5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIiksdT0xZTksYz0tdX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWpvaW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt0aGlzLng9ZSx0aGlzLno9dCx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIG8oZSl7aWYodD1lLmxlbmd0aCl7Zm9yKHZhciB0LG4scj0wLG89ZVswXTsrK3I8dDspby5uPW49ZVtyXSxuLnA9byxvPW47by5uPW49ZVswXSxuLnA9b319dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wb2ludEVxdWFsLmpzIik7dC5hPWZ1bmN0aW9uKGUsdCxuLGksYSl7dmFyIGwsdSxjPVtdLGQ9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCEoKHQ9ZS5sZW5ndGgtMSk8PTApKXt2YXIgdCxuLG89ZVswXSxpPWVbdF07aWYoT2JqZWN0KHMuYSkobyxpKSl7Zm9yKGEubGluZVN0YXJ0KCksbD0wO2w8dDsrK2wpYS5wb2ludCgobz1lW2xdKVswXSxvWzFdKTtyZXR1cm4gdm9pZCBhLmxpbmVFbmQoKX1jLnB1c2gobj1uZXcgcihvLGUsbnVsbCwhMCkpLGQucHVzaChuLm89bmV3IHIobyxudWxsLG4sITEpKSxjLnB1c2gobj1uZXcgcihpLGUsbnVsbCwhMSkpLGQucHVzaChuLm89bmV3IHIoaSxudWxsLG4sITApKX19KSxjLmxlbmd0aCl7Zm9yKGQuc29ydCh0KSxvKGMpLG8oZCksbD0wLHU9ZC5sZW5ndGg7bDx1OysrbClkW2xdLmU9bj0hbjtmb3IodmFyIF8scCxmPWNbMF07Oyl7Zm9yKHZhciBtPWYsaD0hMDttLnY7KWlmKChtPW0ubik9PT1mKXJldHVybjtfPW0ueixhLmxpbmVTdGFydCgpO2Rve2lmKG0udj1tLm8udj0hMCxtLmUpe2lmKGgpZm9yKGw9MCx1PV8ubGVuZ3RoO2w8dTsrK2wpYS5wb2ludCgocD1fW2xdKVswXSxwWzFdKTtlbHNlIGkobS54LG0ubi54LDEsYSk7bT1tLm59ZWxzZXtpZihoKWZvcihfPW0ucC56LGw9Xy5sZW5ndGgtMTtsPj0wOy0tbClhLnBvaW50KChwPV9bbF0pWzBdLHBbMV0pO2Vsc2UgaShtLngsbS5wLngsLTEsYSk7bT1tLnB9bT1tLm8sXz1tLnosaD0haH13aGlsZSghbS52KTthLmxpbmVFbmQoKX19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29tcG9zZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIG49ZShuLHIpLHQoblswXSxuWzFdKX1yZXR1cm4gZS5pbnZlcnQmJnQuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4obj10LmludmVydChuLHIpKSYmZS5pbnZlcnQoblswXSxuWzFdKX0pLG59fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jb25zdGFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29udGFpbnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiEoIWV8fCFwLmhhc093blByb3BlcnR5KGUudHlwZSkpJiZwW2UudHlwZV0oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIDA9PT1PYmplY3QoYy5hKShlLHQpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1PYmplY3QoYy5hKShlWzBdLGVbMV0pO3JldHVybiBPYmplY3QoYy5hKShlWzBdLHQpK09iamVjdChjLmEpKHQsZVsxXSk8PW4rZC5pfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4hIU9iamVjdCh1LmEpKGUubWFwKGEpLGwodCkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU9ZS5tYXAobCksZS5wb3AoKSxlfWZ1bmN0aW9uIGwoZSl7cmV0dXJuW2VbMF0qZC5yLGVbMV0qZC5yXX12YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvbHlnb25Db250YWlucy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9kaXN0YW5jZS5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksXz17RmVhdHVyZTpmdW5jdGlvbihlLHQpe3JldHVybiByKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuZmVhdHVyZXMsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOylpZihyKG5bb10uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSxwPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuY29vcmRpbmF0ZXMscj0tMSxzPW4ubGVuZ3RoOysrcjxzOylpZihvKG5bcl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKHMobltyXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmNvb3JkaW5hdGVzLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoaShuW3JdLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5nZW9tZXRyaWVzLG89LTEscz1uLmxlbmd0aDsrK288czspaWYocihuW29dLHQpKXJldHVybiEwO3JldHVybiExfX07dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUmJl8uaGFzT3duUHJvcGVydHkoZS50eXBlKT9fW2UudHlwZV06cikoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2Rpc3RhbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIiksbz1bbnVsbCxudWxsXSxzPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpvfTt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb1swXT1lLG9bMV09dCxPYmplY3Qoci5hKShzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2dyYXRpY3VsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1PYmplY3QoYS5zKShlLHQtbC5pLG4pLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPU9iamVjdChhLnMpKGUsdC1sLmksbikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3QsZV19KX19ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIGUoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0KCl9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gT2JqZWN0KGEucykoT2JqZWN0KGwuZikodS95KSp5LGkseSkubWFwKGgpLmNvbmNhdChPYmplY3QoYS5zKShPYmplY3QobC5mKShwL3YpKnYsXyx2KS5tYXAoZykpLmNvbmNhdChPYmplY3QoYS5zKShPYmplY3QobC5mKShzL2IpKmIsbixiKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChsLmEpKGUleSk+bC5pfSkubWFwKGYpKS5jb25jYXQoT2JqZWN0KGEucykoT2JqZWN0KGwuZikoZC9FKSpFLGMsRSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobC5hKShlJXYpPmwuaX0pLm1hcChtKSl9dmFyIG4scyxpLHUsYyxkLF8scCxmLG0saCxnLGI9MTAsRT1iLHk9OTAsdj0zNjAsVD0yLjU7cmV0dXJuIGUubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZX19KX0sZS5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKHUpLmNvbmNhdChnKF8pLnNsaWNlKDEpLGgoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLGcocCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxlLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lLmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOmUuZXh0ZW50TWlub3IoKX0sZS5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXVswXSxpPSt0WzFdWzBdLHA9K3RbMF1bMV0sXz0rdFsxXVsxXSx1PmkmJih0PXUsdT1pLGk9dCkscD5fJiYodD1wLHA9XyxfPXQpLGUucHJlY2lzaW9uKFQpKTpbW3UscF0sW2ksX11dfSxlLmV4dGVudE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0WzBdWzBdLG49K3RbMV1bMF0sZD0rdFswXVsxXSxjPSt0WzFdWzFdLHM+biYmKHQ9cyxzPW4sbj10KSxkPmMmJih0PWQsZD1jLGM9dCksZS5wcmVjaXNpb24oVCkpOltbcyxkXSxbbixjXV19LGUuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lLnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6ZS5zdGVwTWlub3IoKX0sZS5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3RbMF0sdj0rdFsxXSxlKTpbeSx2XX0sZS5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K3RbMF0sRT0rdFsxXSxlKTpbYixFXX0sZS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9K3QsZj1yKGQsYyw5MCksbT1vKHMsbixUKSxoPXIocCxfLDkwKSxnPW8odSxpLFQpLGUpOlR9LGUuZXh0ZW50TWFqb3IoW1stMTgwLC05MCtsLmldLFsxODAsOTAtbC5pXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtbC5pXSxbMTgwLDgwK2wuaV1dKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHMoKSgpfXQuYT1zLHQuYj1pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2lkZW50aXR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYXJlYS5qcyIpO24uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiByLmN9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2JvdW5kcy5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NlbnRyb2lkLmpzIik7bi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIik7bi5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYn0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9hbnRpbWVyaWRpYW4uanMiKTtuLmQodCwiayIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2NpcmNsZS5qcyIpO24uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvZXh0ZW50LmpzIik7bi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWN0YW5nbGUuanMiKTtuLmQodCwibiIsZnVuY3Rpb24oKXtyZXR1cm4gYy5hfSk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jb250YWlucy5qcyIpO24uZCh0LCJ1IixmdW5jdGlvbigpe3JldHVybiBkLmF9KTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2Rpc3RhbmNlLmpzIik7bi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYX0pO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZ3JhdGljdWxlLmpzIik7bi5kKHQsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYX0pLG4uZCh0LCJEIixmdW5jdGlvbigpe3JldHVybiBwLmJ9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2ludGVycG9sYXRlLmpzIik7bi5kKHQsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuYX0pO3ZhciBtPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIik7bi5kKHQsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIG0uYX0pO3ZhciBoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9pbmRleC5qcyIpO24uZCh0LCJOIixmdW5jdGlvbigpe3JldHVybiBoLmF9KTt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pO3ZhciBiPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnNVc2EuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYi5hfSk7dmFyIEU9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWFsQXJlYS5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBFLmJ9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5hfSk7dmFyIHk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWlkaXN0YW50LmpzIik7bi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHkuYn0pLG4uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNDb25mb3JtYWwuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gdi5ifSksbi5kKHQsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIHYuYX0pO3ZhciBUPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWFsQXJlYS5qcyIpO24uZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiBULmJ9KSxuLmQodCwiciIsZnVuY3Rpb24oKXtyZXR1cm4gVC5hfSk7dmFyIEE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljRXF1aWRpc3RhbnQuanMiKTtuLmQodCwicyIsZnVuY3Rpb24oKXtyZXR1cm4gQS5ifSksbi5kKHQsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIEEuYX0pO3ZhciBDPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzIik7bi5kKHQsInciLGZ1bmN0aW9uKCl7cmV0dXJuIEMuYX0pLG4uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBDLmJ9KTt2YXIgTz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzIik7bi5kKHQsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYX0pLG4uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiBPLmJ9KTt2YXIgUz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZ25vbW9uaWMuanMiKTtuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5hfSksbi5kKHQsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuYn0pO3ZhciBSPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pZGVudGl0eS5qcyIpO24uZCh0LCJFIixmdW5jdGlvbigpe3JldHVybiBSLmF9KTt2YXIgaj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiKTtuLmQodCwiTyIsZnVuY3Rpb24oKXtyZXR1cm4gai5hfSksbi5kKHQsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIGouYn0pO3ZhciB4PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9tZXJjYXRvci5qcyIpO24uZCh0LCJIIixmdW5jdGlvbigpe3JldHVybiB4LmF9KSxuLmQodCwiSSIsZnVuY3Rpb24oKXtyZXR1cm4geC5jfSk7dmFyIEw9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanMiKTtuLmQodCwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gTC5hfSksbi5kKHQsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuYn0pO3ZhciBEPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9vcnRob2dyYXBoaWMuanMiKTtuLmQodCwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gRC5hfSksbi5kKHQsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuIEQuYn0pO3ZhciB3PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzIik7bi5kKHQsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHcuYX0pLG4uZCh0LCJTIixmdW5jdGlvbigpe3JldHVybiB3LmJ9KTt2YXIgTT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzIik7bi5kKHQsIlYiLGZ1bmN0aW9uKCl7cmV0dXJuIE0uYX0pLG4uZCh0LCJXIixmdW5jdGlvbigpe3JldHVybiBNLmJ9KTt2YXIgaz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3JvdGF0aW9uLmpzIik7bi5kKHQsIlEiLGZ1bmN0aW9uKCl7cmV0dXJuIGsuYX0pO3ZhciBJPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvc3RyZWFtLmpzIik7bi5kKHQsIlQiLGZ1bmN0aW9uKCl7cmV0dXJuIEkuYX0pO3ZhciBQPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvdHJhbnNmb3JtLmpzIik7bi5kKHQsIlUiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9pbnRlcnBvbGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdKnIucixvPWVbMV0qci5yLHM9dFswXSpyLnIsaT10WzFdKnIucixhPU9iamVjdChyLmcpKG8pLGw9T2JqZWN0KHIudCkobyksdT1PYmplY3Qoci5nKShpKSxjPU9iamVjdChyLnQpKGkpLGQ9YSpPYmplY3Qoci5nKShuKSxfPWEqT2JqZWN0KHIudCkobikscD11Kk9iamVjdChyLmcpKHMpLGY9dSpPYmplY3Qoci50KShzKSxtPTIqT2JqZWN0KHIuYykoT2JqZWN0KHIudSkoT2JqZWN0KHIubSkoaS1vKSthKnUqT2JqZWN0KHIubSkocy1uKSkpLGg9T2JqZWN0KHIudCkobSksZz1tP2Z1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChyLnQpKGUqPW0pL2gsbj1PYmplY3Qoci50KShtLWUpL2gsbz1uKmQrdCpwLHM9bipfK3QqZixpPW4qbCt0KmM7cmV0dXJuW09iamVjdChyLmUpKHMsbykqci5oLE9iamVjdChyLmUpKGksT2JqZWN0KHIudSkobypvK3MqcykpKnIuaF19OmZ1bmN0aW9uKCl7cmV0dXJuW24qci5oLG8qci5oXX07cmV0dXJuIGcuZGlzdGFuY2U9bSxnfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXttLnBvaW50PXMsbS5saW5lRW5kPW99ZnVuY3Rpb24gbygpe20ucG9pbnQ9bS5saW5lRW5kPV8uYX1mdW5jdGlvbiBzKGUsdCl7ZSo9ZC5yLHQqPWQucixhPWUsbD1PYmplY3QoZC50KSh0KSx1PU9iamVjdChkLmcpKHQpLG0ucG9pbnQ9aX1mdW5jdGlvbiBpKGUsdCl7ZSo9ZC5yLHQqPWQucjt2YXIgbj1PYmplY3QoZC50KSh0KSxyPU9iamVjdChkLmcpKHQpLG89T2JqZWN0KGQuYSkoZS1hKSxzPU9iamVjdChkLmcpKG8pLGk9T2JqZWN0KGQudCkobyksYz1yKmksXz11Km4tbCpyKnMscD1sKm4rdSpyKnM7Zi5hZGQoT2JqZWN0KGQuZSkoT2JqZWN0KGQudSkoYypjK18qXykscCkpLGE9ZSxsPW4sdT1yfXZhciBhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ub29wLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3N0cmVhbS5qcyIpLGY9T2JqZWN0KGMuYSkoKSxtPXtzcGhlcmU6Xy5hLHBvaW50Ol8uYSxsaW5lU3RhcnQ6cixsaW5lRW5kOl8uYSxwb2x5Z29uU3RhcnQ6Xy5hLHBvbHlnb25FbmQ6Xy5hfTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGYucmVzZXQoKSxPYmplY3QocC5hKShlLG0pLCtmfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlPjE/MDplPC0xP2w6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU+MT91OmU8LTE/LXU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuKGU9VChlLzIpKSplfW4uZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKHQsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQodCwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKHQsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQodCwibiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKHQsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQodCwicyIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZCh0LCJ1IixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSx0LmI9cix0LmM9byx0Lm09czt2YXIgaT0xZS02LGE9MWUtMTIsbD1NYXRoLlBJLHU9bC8yLGM9bC80LGQ9MipsLF89MTgwL2wscD1sLzE4MCxmPU1hdGguYWJzLG09TWF0aC5hdGFuLGg9TWF0aC5hdGFuMixnPU1hdGguY29zLGI9TWF0aC5jZWlsLEU9TWF0aC5leHAseT0oTWF0aC5mbG9vcixNYXRoLmxvZyksdj1NYXRoLnBvdyxUPU1hdGguc2luLEE9TWF0aC5zaWdufHxmdW5jdGlvbihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9LEM9TWF0aC5zcXJ0LE89TWF0aC50YW59LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL25vb3AuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe310LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9hcmVhLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtoLnBvaW50PW99ZnVuY3Rpb24gbyhlLHQpe2gucG9pbnQ9cyxhPXU9ZSxsPWM9dH1mdW5jdGlvbiBzKGUsdCl7bS5hZGQoYyplLXUqdCksdT1lLGM9dH1mdW5jdGlvbiBpKCl7cyhhLGwpfXZhciBhLGwsdSxjLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL25vb3AuanMiKSxmPU9iamVjdChkLmEpKCksbT1PYmplY3QoZC5hKSgpLGg9e3BvaW50OnAuYSxsaW5lU3RhcnQ6cC5hLGxpbmVFbmQ6cC5hLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2gubGluZVN0YXJ0PXIsaC5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLmxpbmVTdGFydD1oLmxpbmVFbmQ9aC5wb2ludD1wLmEsZi5hZGQoT2JqZWN0KF8uYSkobSkpLG0ucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9Zi8yO3JldHVybiBmLnJlc2V0KCksZX19O3QuYT1ofSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2JvdW5kcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7ZTxzJiYocz1lKSxlPmEmJihhPWUpLHQ8aSYmKGk9dCksdD5sJiYobD10KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL25vb3AuanMiKSxzPTEvMCxpPXMsYT0tcyxsPWEsdT17cG9pbnQ6cixsaW5lU3RhcnQ6by5hLGxpbmVFbmQ6by5hLHBvbHlnb25TdGFydDpvLmEscG9seWdvbkVuZDpvLmEscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tzLGldLFthLGxdXTtyZXR1cm4gYT1sPS0oaT1zPTEvMCksZX19O3QuYT11fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NlbnRyb2lkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtnKz1lLGIrPXQsKytFfWZ1bmN0aW9uIG8oKXtTLnBvaW50PXN9ZnVuY3Rpb24gcyhlLHQpe1MucG9pbnQ9aSxyKGY9ZSxtPXQpfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1lLWYsbz10LW0scz1PYmplY3QoaC51KShuKm4rbypvKTt5Kz1zKihmK2UpLzIsdis9cyoobSt0KS8yLFQrPXMscihmPWUsbT10KX1mdW5jdGlvbiBhKCl7Uy5wb2ludD1yfWZ1bmN0aW9uIGwoKXtTLnBvaW50PWN9ZnVuY3Rpb24gdSgpe2QoXyxwKX1mdW5jdGlvbiBjKGUsdCl7Uy5wb2ludD1kLHIoXz1mPWUscD1tPXQpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbj1lLWYsbz10LW0scz1PYmplY3QoaC51KShuKm4rbypvKTt5Kz1zKihmK2UpLzIsdis9cyoobSt0KS8yLFQrPXMscz1tKmUtZip0LEErPXMqKGYrZSksQys9cyoobSt0KSxPKz0zKnMscihmPWUsbT10KX12YXIgXyxwLGYsbSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLGc9MCxiPTAsRT0wLHk9MCx2PTAsVD0wLEE9MCxDPTAsTz0wLFM9e3BvaW50OnIsbGluZVN0YXJ0Om8sbGluZUVuZDphLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1MubGluZVN0YXJ0PWwsUy5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtTLnBvaW50PXIsUy5saW5lU3RhcnQ9byxTLmxpbmVFbmQ9YX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9Tz9bQS9PLEMvT106VD9beS9ULHYvVF06RT9bZy9FLGIvRV06W05hTixOYU5dO3JldHVybiBnPWI9RT15PXY9VD1BPUM9Tz0wLGV9fTt0LmE9U30sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jb250ZXh0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5fY29udGV4dD1lfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ub29wLmpzIik7ci5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsby53KX19LHJlc3VsdDpzLmF9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaWRlbnRpdHkuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvc3RyZWFtLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYXJlYS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2JvdW5kcy5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NlbnRyb2lkLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvY29udGV4dC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL21lYXN1cmUuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9zdHJpbmcuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHAmJl8ucG9pbnRSYWRpdXMoK3AuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxPYmplY3Qoby5hKShlLGQoXykpKSxfLnJlc3VsdCgpfXZhciBkLF8scD00LjU7cmV0dXJuIG4uYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSxkKHMuYSkpLHMuYS5yZXN1bHQoKX0sbi5tZWFzdXJlPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qoby5hKShlLGQodS5hKSksdS5hLnJlc3VsdCgpfSxuLmJvdW5kcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSxkKGkuYSkpLGkuYS5yZXN1bHQoKX0sbi5jZW50cm9pZD1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSxkKGEuYSkpLGEuYS5yZXN1bHQoKX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/KGU9bnVsbCxyLmEpOihlPXQpLnN0cmVhbSxuKTplfSxuLmNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89bnVsbD09ZT8odD1udWxsLG5ldyBjLmEpOm5ldyBsLmEodD1lKSwiZnVuY3Rpb24iIT10eXBlb2YgcCYmXy5wb2ludFJhZGl1cyhwKSxuKTp0fSxuLnBvaW50UmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6KF8ucG9pbnRSYWRpdXMoK2UpLCtlKSxuKTpwfSxuLnByb2plY3Rpb24oZSkuY29udGV4dCh0KX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvbWVhc3VyZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zi5wb2ludD1vLGk9bD1lLGE9dT10fWZ1bmN0aW9uIG8oZSx0KXtsLT1lLHUtPXQscC5hZGQoT2JqZWN0KGQudSkobCpsK3UqdSkpLGw9ZSx1PXR9dmFyIHMsaSxhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ub29wLmpzIikscD1PYmplY3QoYy5hKSgpLGY9e3BvaW50Ol8uYSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXJ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzJiZvKGksYSksZi5wb2ludD1fLmF9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3M9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStwO3JldHVybiBwLnJlc2V0KCksZX19O3QuYT1mfSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL3N0cmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dC5hPXIsci5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6byg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrO2RlZmF1bHQ6bnVsbD09dGhpcy5fY2lyY2xlJiYodGhpcy5fY2lyY2xlPW8odGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9cmV0dXJuIG51bGx9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9pbnRFcXVhbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0KHIuYSkoZVswXS10WzBdKTxyLmkmJk9iamVjdChyLmEpKGVbMV0tdFsxXSk8ci5pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2FydGVzaWFuLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxpPU9iamVjdChyLmEpKCk7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49dFswXSxyPXRbMV0sYT1PYmplY3Qocy50KShyKSxsPVtPYmplY3Qocy50KShuKSwtT2JqZWN0KHMuZykobiksMF0sdT0wLGM9MDtpLnJlc2V0KCksMT09PWE/cj1zLmwrcy5pOi0xPT09YSYmKHI9LXMubC1zLmkpO2Zvcih2YXIgZD0wLF89ZS5sZW5ndGg7ZDxfOysrZClpZihmPShwPWVbZF0pLmxlbmd0aClmb3IodmFyIHAsZixtPXBbZi0xXSxoPW1bMF0sZz1tWzFdLzIrcy5xLGI9T2JqZWN0KHMudCkoZyksRT1PYmplY3Qocy5nKShnKSx5PTA7eTxmOysreSxoPVQsYj1DLEU9TyxtPXYpe3ZhciB2PXBbeV0sVD12WzBdLEE9dlsxXS8yK3MucSxDPU9iamVjdChzLnQpKEEpLE89T2JqZWN0KHMuZykoQSksUz1ULWgsUj1TPj0wPzE6LTEsaj1SKlMseD1qPnMubyxMPWIqQztpZihpLmFkZChPYmplY3Qocy5lKShMKlIqT2JqZWN0KHMudCkoaiksRSpPK0wqT2JqZWN0KHMuZykoaikpKSx1Kz14P1MrUipzLnc6Uyx4Xmg+PW5eVD49bil7dmFyIEQ9T2JqZWN0KG8uYykoT2JqZWN0KG8uYSkobSksT2JqZWN0KG8uYSkodikpO09iamVjdChvLmUpKEQpO3ZhciB3PU9iamVjdChvLmMpKGwsRCk7T2JqZWN0KG8uZSkodyk7dmFyIE09KHheUz49MD8tMToxKSpPYmplY3Qocy5jKSh3WzJdKTsocj5NfHxyPT09TSYmKERbMF18fERbMV0pKSYmKGMrPXheUz49MD8xOi0xKX19cmV0dXJuKHU8LXMuaXx8dTxzLmkmJmk8LXMuaSleMSZjfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljRXF1YWxBcmVhLmpzIik7dC5hPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyLmIpKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2FsYmVyc1VzYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihuLHIpe2Zvcih2YXIgbz0tMTsrK288dDspZVtvXS5wb2ludChuLHIpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHQ7KWVbbl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248dDspZVtuXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248dDspZVtuXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248dDspZVtuXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248dDspZVtuXS5wb2x5Z29uRW5kKCl9fX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWFsQXJlYS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2ZpdC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZVswXSxuPWVbMV07cmV0dXJuIF89bnVsbCx1LnBvaW50KHQsbiksX3x8KGMucG9pbnQodCxuKSxfKXx8KGQucG9pbnQodCxuKSxfKX1mdW5jdGlvbiB0KCl7cmV0dXJuIG49bD1udWxsLGV9dmFyIG4sbCx1LGMsZCxfLHA9T2JqZWN0KHMuYSkoKSxmPU9iamVjdChpLmIpKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxtPU9iamVjdChpLmIpKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGg9e3BvaW50OmZ1bmN0aW9uKGUsdCl7Xz1bZSx0XX19O3JldHVybiBlLmludmVydD1mdW5jdGlvbihlKXt2YXIgdD1wLnNjYWxlKCksbj1wLnRyYW5zbGF0ZSgpLHI9KGVbMF0tblswXSkvdCxvPShlWzFdLW5bMV0pL3Q7cmV0dXJuKG8+PS4xMiYmbzwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9mOm8+PS4xNjYmJm88LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/bTpwKS5pbnZlcnQoZSl9LGUuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiBuJiZsPT09ZT9uOm49cihbcC5zdHJlYW0obD1lKSxmLnN0cmVhbShlKSxtLnN0cmVhbShlKV0pfSxlLnByZWNpc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocC5wcmVjaXNpb24oZSksZi5wcmVjaXNpb24oZSksbS5wcmVjaXNpb24oZSksdCgpKTpwLnByZWNpc2lvbigpfSxlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwLnNjYWxlKHQpLGYuc2NhbGUoLjM1KnQpLG0uc2NhbGUodCksZS50cmFuc2xhdGUocC50cmFuc2xhdGUoKSkpOnAuc2NhbGUoKX0sZS50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHAudHJhbnNsYXRlKCk7dmFyIG49cC5zY2FsZSgpLHI9K2VbMF0scz0rZVsxXTtyZXR1cm4gdT1wLnRyYW5zbGF0ZShlKS5jbGlwRXh0ZW50KFtbci0uNDU1Km4scy0uMjM4Km5dLFtyKy40NTUqbixzKy4yMzgqbl1dKS5zdHJlYW0oaCksYz1mLnRyYW5zbGF0ZShbci0uMzA3Km4scysuMjAxKm5dKS5jbGlwRXh0ZW50KFtbci0uNDI1Km4rby5pLHMrLjEyKm4rby5pXSxbci0uMjE0Km4tby5pLHMrLjIzNCpuLW8uaV1dKS5zdHJlYW0oaCksZD1tLnRyYW5zbGF0ZShbci0uMjA1Km4scysuMjEyKm5dKS5jbGlwRXh0ZW50KFtbci0uMjE0Km4rby5pLHMrLjE2NipuK28uaV0sW3ItLjExNSpuLW8uaSxzKy4yMzQqbi1vLmldXSkuc3RyZWFtKGgpLHQoKX0sZS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0KGEuYSkoZSx0LG4pfSxlLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0KGEuYykoZSx0LG4pfSxlLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdChhLmQpKGUsdCxuKX0sZS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0KGEuYikoZSx0LG4pfSxlLnNjYWxlKDEwNzApfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1PYmplY3Qocy5nKSh0KSxvPU9iamVjdChzLmcpKG4pLGk9ZShyKm8pO3JldHVybltpKm8qT2JqZWN0KHMudCkodCksaSpPYmplY3Qocy50KShuKV19fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9T2JqZWN0KHMudSkodCp0K24qbiksbz1lKHIpLGk9T2JqZWN0KHMudCkobyksYT1PYmplY3Qocy5nKShvKTtyZXR1cm5bT2JqZWN0KHMuZSkodCppLHIqYSksT2JqZWN0KHMuYykociYmbippL3IpXX19dC5iPXIsdC5hPW87dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiKSxpPU9iamVjdChvLmIpKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qoci51KSgyLygxK2UpKX0pO2kuaW52ZXJ0PU9iamVjdChvLmEpKGZ1bmN0aW9uKGUpe3JldHVybiAyKk9iamVjdChyLmMpKGUvMil9KSx0LmI9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHMuYSkoaSkuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWlkaXN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiKSxpPU9iamVjdChvLmIpKGZ1bmN0aW9uKGUpe3JldHVybihlPU9iamVjdChyLmIpKGUpKSYmZS9PYmplY3Qoci50KShlKX0pO2kuaW52ZXJ0PU9iamVjdChvLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdC5iPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChzLmEpKGkpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0wLG49by5vLzMscj1PYmplY3Qocy5iKShlKSxpPXIodCxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PWVbMF0qby5yLG49ZVsxXSpvLnIpOlt0Km8uaCxuKm8uaF19LGl9dC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0NvbmZvcm1hbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qocy52KSgocy5sK2UpLzIpfWZ1bmN0aW9uIG8oZSx0KXtmdW5jdGlvbiBuKGUsdCl7bD4wP3Q8LXMubCtzLmkmJih0PS1zLmwrcy5pKTp0PnMubC1zLmkmJih0PXMubC1zLmkpO3ZhciBuPWwvT2JqZWN0KHMucCkocih0KSxpKTtyZXR1cm5bbipPYmplY3Qocy50KShpKmUpLGwtbipPYmplY3Qocy5nKShpKmUpXX12YXIgbz1PYmplY3Qocy5nKShlKSxpPWU9PT10P09iamVjdChzLnQpKGUpOk9iamVjdChzLm4pKG8vT2JqZWN0KHMuZykodCkpL09iamVjdChzLm4pKHIodCkvcihlKSksbD1vKk9iamVjdChzLnApKHIoZSksaSkvaTtyZXR1cm4gaT8obi5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1sLXQscj1PYmplY3Qocy5zKShpKSpPYmplY3Qocy51KShlKmUrbipuKTtyZXR1cm5bT2JqZWN0KHMuZSkoZSxPYmplY3Qocy5hKShuKSkvaSpPYmplY3Qocy5zKShuKSwyKk9iamVjdChzLmQpKE9iamVjdChzLnApKGwvciwxL2kpKS1zLmxdfSxuKTphLmN9dC5hPW87dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWMuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9tZXJjYXRvci5qcyIpO3QuYj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoaS5hKShvKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWFsQXJlYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPU9iamVjdChvLnUpKGEtMipzKk9iamVjdChvLnQpKHQpKS9zO3JldHVybltuKk9iamVjdChvLnQpKGUqPXMpLGwtbipPYmplY3Qoby5nKShlKV19dmFyIHI9T2JqZWN0KG8udCkoZSkscz0ocitPYmplY3Qoby50KSh0KSkvMjtpZihPYmplY3Qoby5hKShzKTxvLmkpcmV0dXJuIE9iamVjdChpLmEpKGUpO3ZhciBhPTErciooMipzLXIpLGw9T2JqZWN0KG8udSkoYSkvcztyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1sLXQ7cmV0dXJuW09iamVjdChvLmUpKGUsT2JqZWN0KG8uYSkobikpL3MqT2JqZWN0KG8ucykobiksT2JqZWN0KG8uYykoKGEtKGUqZStuKm4pKnMqcykvKDIqcykpXX0sbn10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pYy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2N5bGluZHJpY2FsRXF1YWxBcmVhLmpzIik7dC5iPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChzLmEpKHIpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljRXF1aWRpc3RhbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1hLXQscj1zKmU7cmV0dXJuW24qT2JqZWN0KG8udCkociksYS1uKk9iamVjdChvLmcpKHIpXX12YXIgcj1PYmplY3Qoby5nKShlKSxzPWU9PT10P09iamVjdChvLnQpKGUpOihyLU9iamVjdChvLmcpKHQpKS8odC1lKSxhPXIvcytlO3JldHVybiBPYmplY3Qoby5hKShzKTxvLmk/aS5iOihuLmludmVydD1mdW5jdGlvbihlLHQpe3ZhciBuPWEtdDtyZXR1cm5bT2JqZWN0KG8uZSkoZSxPYmplY3Qoby5hKShuKSkvcypPYmplY3Qoby5zKShuKSxhLU9iamVjdChvLnMpKHMpKk9iamVjdChvLnUpKGUqZStuKm4pXX0sbil9dC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVpcmVjdGFuZ3VsYXIuanMiKTt0LmI9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHMuYSkocikuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY3lsaW5kcmljYWxFcXVhbEFyZWEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuW2UqbixPYmplY3Qoby50KSh0KS9uXX12YXIgbj1PYmplY3Qoby5nKShlKTtyZXR1cm4gdC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZS9uLE9iamVjdChvLmMpKHQqbildfSx0fXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2VxdWFsRWFydGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPU9iamVjdChzLmMpKGMqT2JqZWN0KHMudCkodCkpLHI9bipuLG89cipyKnI7cmV0dXJuW2UqT2JqZWN0KHMuZykobikvKGMqKGkrMyphKnIrbyooNypsKzkqdSpyKSkpLG4qKGkrYSpyK28qKGwrdSpyKSldfXQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksaT0xLjM0MDI2NCxhPS0uMDgxMTA2LGw9ODkzZS02LHU9LjAwMzc5NixjPU9iamVjdChzLnUpKDMpLzI7ci5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixvLGQ9dCxfPWQqZCxwPV8qXypfLGY9MDtmPDEyJiYocj1kKihpK2EqXytwKihsK3UqXykpLXQsbz1pKzMqYSpfK3AqKDcqbCs5KnUqXyksZC09bj1yL28sXz1kKmQscD1fKl8qXywhKE9iamVjdChzLmEpKG4pPHMuaikpOysrZik7cmV0dXJuW2MqZSooaSszKmEqXytwKig3KmwrOSp1Kl8pKS9PYmplY3Qocy5nKShkKSxPYmplY3Qocy5jKShPYmplY3Qocy50KShkKS9jKV19LHQuYT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qoby5hKShyKS5zY2FsZSgxNzcuMTU4KX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm5bZSx0XX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiKTtyLmludmVydD1yLHQuYT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qoby5hKShyKS5zY2FsZSgxNTIuNjMpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9maXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9ZS5jbGlwRXh0ZW50JiZlLmNsaXBFeHRlbnQoKTtyZXR1cm4gZS5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmZS5jbGlwRXh0ZW50KG51bGwpLE9iamVjdChsLmEpKG4sZS5zdHJlYW0odS5hKSksdCh1LmEucmVzdWx0KCkpLG51bGwhPXImJmUuY2xpcEV4dGVudChyKSxlfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiByKGUsZnVuY3Rpb24obil7dmFyIHI9dFsxXVswXS10WzBdWzBdLG89dFsxXVsxXS10WzBdWzFdLHM9TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxvLyhuWzFdWzFdLW5bMF1bMV0pKSxpPSt0WzBdWzBdKyhyLXMqKG5bMV1bMF0rblswXVswXSkpLzIsYT0rdFswXVsxXSsoby1zKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKnMpLnRyYW5zbGF0ZShbaSxhXSl9LG4pfWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBvKGUsW1swLDBdLHRdLG4pfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiByKGUsZnVuY3Rpb24obil7dmFyIHI9K3Qsbz1yLyhuWzFdWzBdLW5bMF1bMF0pLHM9KHItbyooblsxXVswXStuWzBdWzBdKSkvMixpPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFtzLGldKX0sbil9ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIHIoZSxmdW5jdGlvbihuKXt2YXIgcj0rdCxvPXIvKG5bMV1bMV0tblswXVsxXSkscz0tbypuWzBdWzBdLGk9KHItbyooblsxXVsxXStuWzBdWzFdKSkvMjtlLnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW3MsaV0pfSxuKX10LmE9byx0LmM9cyx0LmQ9aSx0LmI9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3N0cmVhbS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2JvdW5kcy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2dub21vbmljLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1PYmplY3Qoby5nKSh0KSxyPU9iamVjdChvLmcpKGUpKm47cmV0dXJuW24qT2JqZWN0KG8udCkoZSkvcixPYmplY3Qoby50KSh0KS9yXX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcyIpO3IuaW52ZXJ0PU9iamVjdChzLmEpKG8uZCksdC5hPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLmEpKHIpLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2lkZW50aXR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIDE9PT1lJiYxPT09dCYmMD09PW4mJjA9PT1yP3MuYTpPYmplY3QoaS5iKSh7cG9pbnQ6ZnVuY3Rpb24obyxzKXt0aGlzLnN0cmVhbS5wb2ludChvKmUrbixzKnQrcil9fSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL3JlY3RhbmdsZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9pZGVudGl0eS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy90cmFuc2Zvcm0uanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9maXQuanMiKTt0LmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cmV0dXJuIGw9dT1udWxsLGN9dmFyIHQsbixpLGwsdSxjLGQ9MSxfPTAscD0wLGY9MSxtPTEsaD1zLmEsZz1udWxsLGI9cy5hO3JldHVybiBjPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGwmJnU9PT1lP2w6bD1oKGIodT1lKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXIsZz10PW49aT1udWxsLGUoKSk6Yn0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1udWxsPT1yPyhnPXQ9bj1pPW51bGwscy5hKTpPYmplY3Qoby5hKShnPStyWzBdWzBdLHQ9K3JbMF1bMV0sbj0rclsxXVswXSxpPStyWzFdWzFdKSxlKCkpOm51bGw9PWc/bnVsbDpbW2csdF0sW24saV1dfSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1yKChkPSt0KSpmLGQqbSxfLHApLGUoKSk6ZH0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXIoZCpmLGQqbSxfPSt0WzBdLHA9K3RbMV0pLGUoKSk6W18scF19LHJlZmxlY3RYOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXIoZCooZj10Py0xOjEpLGQqbSxfLHApLGUoKSk6ZjwwfSxyZWZsZWN0WTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1yKGQqZixkKihtPXQ/LTE6MSksXyxwKSxlKCkpOm08MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChhLmEpKGMsZSx0KX0sZml0U2l6ZTpmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QoYS5jKShjLGUsdCl9LGZpdFdpZHRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChhLmQpKGMsZSx0KX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChhLmIpKGMsZSx0KX19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QobS5iKSh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHQsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9ZnVuY3Rpb24gbyhlLHQsbil7ZnVuY3Rpb24gcihyLG8pe3JldHVyblt0K2UqcixuLWUqb119cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbyl7cmV0dXJuWyhyLXQpL2UsKG4tbykvZV19LHJ9ZnVuY3Rpb24gcyhlLHQsbixyKXtmdW5jdGlvbiBvKGUscil7cmV0dXJuW2EqZS1sKnIrdCxuLWwqZS1hKnJdfXZhciBzPU9iamVjdChwLmcpKHIpLGk9T2JqZWN0KHAudCkociksYT1zKmUsbD1pKmUsdT1zL2UsYz1pL2UsZD0oaSpuLXMqdCkvZSxfPShpKnQrcypuKS9lO3JldHVybiBvLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblt1KmUtYyp0K2QsXy1jKmUtdSp0XX0sb31mdW5jdGlvbiBpKGUpe3JldHVybiBhKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSgpfWZ1bmN0aW9uIGEoZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gTyhlWzBdKnAucixlWzFdKnAucil9ZnVuY3Rpb24gbihlKXtyZXR1cm4oZT1PLmludmVydChlWzBdLGVbMV0pKSYmW2VbMF0qcC5oLGVbMV0qcC5oXX1mdW5jdGlvbiBpKCl7dmFyIGU9cyhqLDAsMCxQKS5hcHBseShudWxsLG0oRCx3KSksdD0oUD9zOm8pKGoseC1lWzBdLEwtZVsxXSxQKTtyZXR1cm4gRT1PYmplY3QoZi5iKShNLGssSSksQz1PYmplY3QoZC5hKShtLHQpLE89T2JqZWN0KGQuYSkoRSxDKSxBPU9iamVjdChnLmEpKEMsVSksYSgpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gUz1SPW51bGwsdH12YXIgbSxFLHksdixULEEsQyxPLFMsUixqPTE1MCx4PTQ4MCxMPTI1MCxEPTAsdz0wLE09MCxrPTAsST0wLFA9MCxOPW51bGwsSD1sLmEsRj1udWxsLEI9Xy5hLFU9LjU7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiBTJiZSPT09ZT9TOlM9YihyKEUpKEgoQShCKFI9ZSkpKSkpfSx0LnByZWNsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEg9ZSxOPXZvaWQgMCxhKCkpOkh9LHQucG9zdGNsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEI9ZSxGPXk9dj1UPW51bGwsYSgpKTpCfSx0LmNsaXBBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oSD0rZT9PYmplY3QodS5hKShOPWUqcC5yKTooTj1udWxsLGwuYSksYSgpKTpOKnAuaH0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhCPW51bGw9PWU/KEY9eT12PVQ9bnVsbCxfLmEpOk9iamVjdChjLmEpKEY9K2VbMF1bMF0seT0rZVswXVsxXSx2PStlWzFdWzBdLFQ9K2VbMV1bMV0pLGEoKSk6bnVsbD09Rj9udWxsOltbRix5XSxbdixUXV19LHQuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGo9K2UsaSgpKTpqfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rZVswXSxMPStlWzFdLGkoKSk6W3gsTF19LHQuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPWVbMF0lMzYwKnAucix3PWVbMV0lMzYwKnAucixpKCkpOltEKnAuaCx3KnAuaF19LHQucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPWVbMF0lMzYwKnAucixrPWVbMV0lMzYwKnAucixJPWUubGVuZ3RoPjI/ZVsyXSUzNjAqcC5yOjAsaSgpKTpbTSpwLmgsaypwLmgsSSpwLmhdfSx0LmFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPWUlMzYwKnAucixpKCkpOlAqcC5ofSx0LnByZWNpc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1PYmplY3QoZy5hKShDLFU9ZSplKSxhKCkpOk9iamVjdChwLnUpKFUpfSx0LmZpdEV4dGVudD1mdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QoaC5hKSh0LGUsbil9LHQuZml0U2l6ZT1mdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QoaC5jKSh0LGUsbil9LHQuZml0V2lkdGg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT2JqZWN0KGguZCkodCxlLG4pfSx0LmZpdEhlaWdodD1mdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QoaC5iKSh0LGUsbil9LGZ1bmN0aW9uKCl7cmV0dXJuIG09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5pbnZlcnQ9bS5pbnZlcnQmJm4saSgpfX10LmE9aSx0LmI9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYW50aW1lcmlkaWFuLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvY2lyY2xlLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVjdGFuZ2xlLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbXBvc2UuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaWRlbnRpdHkuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9yb3RhdGlvbi5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy90cmFuc2Zvcm0uanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9maXQuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9yZXNhbXBsZS5qcyIpLGI9T2JqZWN0KG0uYikoe3BvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSpwLnIsdCpwLnIpfX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL21lcmNhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm5bZSxPYmplY3Qocy5uKShPYmplY3Qocy52KSgocy5sK3QpLzIpKV19ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9cy5vKmQoKSxhPXUoT2JqZWN0KGkuYSkodS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIHAobnVsbD09Zj9bW2FbMF0tdCxhWzFdLXRdLFthWzBdK3QsYVsxXSt0XV06ZT09PXI/W1tNYXRoLm1heChhWzBdLXQsZiksbl0sW01hdGgubWluKGFbMF0rdCxvKSxsXV06W1tmLE1hdGgubWF4KGFbMV0tdCxuKV0sW28sTWF0aC5taW4oYVsxXSt0LGwpXV0pfXZhciBuLG8sbCx1PU9iamVjdChhLmEpKGUpLGM9dS5jZW50ZXIsZD11LnNjYWxlLF89dS50cmFuc2xhdGUscD11LmNsaXBFeHRlbnQsZj1udWxsO3JldHVybiB1LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkKGUpLHQoKSk6ZCgpfSx1LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXyhlKSx0KCkpOl8oKX0sdS5jZW50ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMoZSksdCgpKTpjKCl9LHUuY2xpcEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09ZT9mPW49bz1sPW51bGw6KGY9K2VbMF1bMF0sbj0rZVswXVsxXSxvPStlWzFdWzBdLGw9K2VbMV1bMV0pLHQoKSk6bnVsbD09Zj9udWxsOltbZixuXSxbbyxsXV19LHQoKX10LmM9cix0LmI9bzt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcm90YXRpb24uanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcyIpO3IuaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsMipPYmplY3Qocy5kKShPYmplY3Qocy5rKSh0KSktcy5sXX0sdC5hPWZ1bmN0aW9uKCl7cmV0dXJuIG8ocikuc2NhbGUoOTYxL3Mudyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQqdCxyPW4qbjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSx0KigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19dC5iPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKTtyLmludmVydD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dCxvPTI1O2Rve3ZhciBpPXIqcixhPWkqaTtyLT1uPShyKigxLjAwNzIyNitpKiguMDE1MDg1K2EqKC4wMjg4NzQqaS0uMDQ0NDc1LS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYraSooLjA0NTI1NSthKiguMjU5ODY2KmktLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoT2JqZWN0KHMuYSkobik+cy5pJiYtLW8+MCk7cmV0dXJuW2UvKC44NzA3KyhpPXIqcikqKGkqKGkqaSppKiguMDAzOTcxLS4wMDE1MjkqaSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSx0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KG8uYSkocikuc2NhbGUoMTc1LjI5NSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL29ydGhvZ3JhcGhpYy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuW09iamVjdChvLmcpKHQpKk9iamVjdChvLnQpKGUpLE9iamVjdChvLnQpKHQpXX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcyIpO3IuaW52ZXJ0PU9iamVjdChzLmEpKG8uYyksdC5hPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLmEpKHIpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArby5pKX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vcmVzYW1wbGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KGEuYikoe3BvaW50OmZ1bmN0aW9uKHQsbil7dD1lKHQsbiksdGhpcy5zdHJlYW0ucG9pbnQodFswXSx0WzFdKX19KX1mdW5jdGlvbiBvKGUsdCl7ZnVuY3Rpb24gbihyLG8scyxhLGwsYyxkLF8scCxmLG0saCxnLGIpe3ZhciBFPWQtcix5PV8tbyx2PUUqRSt5Knk7aWYodj40KnQmJmctLSl7dmFyIFQ9YStmLEE9bCttLEM9YytoLE89T2JqZWN0KGkudSkoVCpUK0EqQStDKkMpLFM9T2JqZWN0KGkuYykoQy89TyksUj1PYmplY3QoaS5hKShPYmplY3QoaS5hKShDKS0xKTxpLml8fE9iamVjdChpLmEpKHMtcCk8aS5pPyhzK3ApLzI6T2JqZWN0KGkuZSkoQSxUKSxqPWUoUixTKSx4PWpbMF0sTD1qWzFdLEQ9eC1yLHc9TC1vLE09eSpELUUqdzsoTSpNL3Y+dHx8T2JqZWN0KGkuYSkoKEUqRCt5KncpL3YtLjUpPi4zfHxhKmYrbCptK2MqaDx1KSYmKG4ocixvLHMsYSxsLGMseCxMLFIsVC89TyxBLz1PLEMsZyxiKSxiLnBvaW50KHgsTCksbih4LEwsUixULEEsQyxkLF8scCxmLG0saCxnLGIpKX19cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIobixyKXtuPWUobixyKSx0LnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gbygpe0U9TmFOLEMucG9pbnQ9aSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkocixvKXt2YXIgaT1PYmplY3Qocy5hKShbcixvXSksYT1lKHIsbyk7bihFLHksYix2LFQsQSxFPWFbMF0seT1hWzFdLGI9cix2PWlbMF0sVD1pWzFdLEE9aVsyXSxsLHQpLHQucG9pbnQoRSx5KX1mdW5jdGlvbiBhKCl7Qy5wb2ludD1yLHQubGluZUVuZCgpfWZ1bmN0aW9uIHUoKXtvKCksQy5wb2ludD1jLEMubGluZUVuZD1kfWZ1bmN0aW9uIGMoZSx0KXtpKF89ZSx0KSxwPUUsZj15LG09dixoPVQsZz1BLEMucG9pbnQ9aX1mdW5jdGlvbiBkKCl7bihFLHksYix2LFQsQSxwLGYsXyxtLGgsZyxsLHQpLEMubGluZUVuZD1hLGEoKX12YXIgXyxwLGYsbSxoLGcsYixFLHksdixULEEsQz17cG9pbnQ6cixsaW5lU3RhcnQ6byxsaW5lRW5kOmEscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxDLmxpbmVTdGFydD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCksQy5saW5lU3RhcnQ9b319O3JldHVybiBDfX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NhcnRlc2lhbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3RyYW5zZm9ybS5qcyIpLGw9MTYsdT1PYmplY3QoaS5nKSgzMCppLnIpO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybit0P28oZSx0KTpyKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1PYmplY3Qoby5nKSh0KSxyPTErT2JqZWN0KG8uZykoZSkqbjtyZXR1cm5bbipPYmplY3Qoby50KShlKS9yLE9iamVjdChvLnQpKHQpL3JdfXQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2luZGV4LmpzIik7ci5pbnZlcnQ9T2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIDIqT2JqZWN0KG8uZCkoZSl9KSx0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGkuYSkocikuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX19LCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm5bT2JqZWN0KG8ubikoT2JqZWN0KG8udikoKG8ubCt0KS8yKSksLWVdfXQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL21lcmNhdG9yLmpzIik7ci5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bLXQsMipPYmplY3Qoby5kKShPYmplY3Qoby5rKShlKSktby5sXX0sdC5hPWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0KHMuYikociksdD1lLmNlbnRlcixuPWUucm90YXRlO3JldHVybiBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KFstZVsxXSxlWzBdXSk6KGU9dCgpLFtlWzFdLC1lWzBdXSl9LGUucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW2VbMF0sZVsxXSxlLmxlbmd0aD4yP2VbMl0rOTA6OTBdKTooZT1uKCksW2VbMF0sZVsxXSxlWzJdLTkwXSl9LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcm90YXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybltPYmplY3QodS5hKShlKT51Lm8/ZStNYXRoLnJvdW5kKC1lL3UudykqdS53OmUsdF19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuKGUlPXUudyk/dHx8bj9PYmplY3QobC5hKShpKGUpLGEodCxuKSk6aShlKTp0fHxuP2EodCxuKTpyfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrPWUsW3Q+dS5vP3QtdS53OnQ8LXUubz90K3Uudzp0LG5dfX1mdW5jdGlvbiBpKGUpe3ZhciB0PXMoZSk7cmV0dXJuIHQuaW52ZXJ0PXMoLWUpLHR9ZnVuY3Rpb24gYShlLHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1PYmplY3QodS5nKSh0KSxhPU9iamVjdCh1LmcpKGUpKm4sbD1PYmplY3QodS50KShlKSpuLGM9T2JqZWN0KHUudCkodCksZD1jKnIrYSpvO3JldHVybltPYmplY3QodS5lKShsKnMtZCppLGEqci1jKm8pLE9iamVjdCh1LmMpKGQqcytsKmkpXX12YXIgcj1PYmplY3QodS5nKShlKSxvPU9iamVjdCh1LnQpKGUpLHM9T2JqZWN0KHUuZykodCksaT1PYmplY3QodS50KSh0KTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QodS5nKSh0KSxhPU9iamVjdCh1LmcpKGUpKm4sbD1PYmplY3QodS50KShlKSpuLGM9T2JqZWN0KHUudCkodCksZD1jKnMtbCppO3JldHVybltPYmplY3QodS5lKShsKnMrYyppLGEqcitkKm8pLE9iamVjdCh1LmMpKGQqci1hKm8pXX0sbn10LmI9bzt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbXBvc2UuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcyIpO3IuaW52ZXJ0PXIsdC5hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQ9ZSh0WzBdKnUucix0WzFdKnUuciksdFswXSo9dS5oLHRbMV0qPXUuaCx0fXJldHVybiBlPW8oZVswXSp1LnIsZVsxXSp1LnIsZS5sZW5ndGg+Mj9lWzJdKnUucjowKSx0LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1lLmludmVydCh0WzBdKnUucix0WzFdKnUuciksdFswXSo9dS5oLHRbMV0qPXUuaCx0fSx0fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvc3RyZWFtLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtlJiZhLmhhc093blByb3BlcnR5KGUudHlwZSkmJmFbZS50eXBlXShlLHQpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByLG89LTEscz1lLmxlbmd0aC1uO2Zvcih0LmxpbmVTdGFydCgpOysrbzxzOylyPWVbb10sdC5wb2ludChyWzBdLHJbMV0sclsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytuPHI7KW8oZVtuXSx0LDEpO3QucG9seWdvbkVuZCgpfXZhciBpPXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmZlYXR1cmVzLG89LTEscz1uLmxlbmd0aDsrK288czspcihuW29dLmdlb21ldHJ5LHQpfX0sYT17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KWU9bltyXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe28oZS5jb29yZGluYXRlcyx0LDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLHM9bi5sZW5ndGg7KytyPHM7KW8obltyXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cyhlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KXMobltyXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuZ2VvbWV0cmllcyxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXIobltvXSx0KX19O3QuYT1mdW5jdGlvbihlLHQpe2UmJmkuaGFzT3duUHJvcGVydHkoZS50eXBlKT9pW2UudHlwZV0oZSx0KTpyKGUsdCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy90cmFuc2Zvcm0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49bmV3IG87Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBuLnN0cmVhbT10LG59fWZ1bmN0aW9uIG8oKXt9dC5iPXIsdC5hPWZ1bmN0aW9uKGUpe3JldHVybntzdHJlYW06cihlKX19LG8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9hY2Nlc3NvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT9udWxsOm8oZSl9ZnVuY3Rpb24gbyhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGV9dC5hPXIsdC5iPW99LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0LG4scj1lLmxlbmd0aDtyOyluPU1hdGgucmFuZG9tKCkqci0tfDAsdD1lW3JdLGVbcl09ZVtuXSxlW25dPXQ7cmV0dXJuIGV9bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSx0LmE9cjt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2V9LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NsdXN0ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBvKGUpe3JldHVybiBlLnJlZHVjZShzLDApL2UubGVuZ3RofWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZSt0Lnh9ZnVuY3Rpb24gaShlKXtyZXR1cm4gMStlLnJlZHVjZShhLDApfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0LnkpfWZ1bmN0aW9uIGwoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfXQuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHIsYz0wO2UuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PW8obiksZS55PWkobikpOihlLng9cj9jKz10KGUscik6MCxlLnk9MCxyPWUpfSk7dmFyIGQ9bChlKSxfPXUoZSkscD1kLngtdChkLF8pLzIsZj1fLngrdChfLGQpLzI7cmV0dXJuIGUuZWFjaEFmdGVyKGE/ZnVuY3Rpb24odCl7dC54PSh0LngtZS54KSpuLHQueT0oZS55LXQueSkqc306ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGYtcCkqbix0Lnk9KDEtKGUueT90LnkvZS55OjEpKSpzfSl9dmFyIHQ9cixuPTEscz0xLGE9ITE7cmV0dXJuIGUuc2VwYXJhdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUpOnR9LGUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hMSxuPSt0WzBdLHM9K3RbMV0sZSk6YT9udWxsOltuLHNdfSxlLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEwLG49K3RbMF0scz0rdFsxXSxlKTphP1tuLHNdOm51bGx9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9jb25zdGFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIDB9dC5hPXIsdC5iPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2NvdW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9MCxuPWUuY2hpbGRyZW4scj1uJiZuLmxlbmd0aDtpZihyKWZvcig7LS1yPj0wOyl0Kz1uW3JdLnZhbHVlO2Vsc2UgdD0xO2UudmFsdWU9dH10LmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIocil9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZGVzY2VuZGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHM9dGhpcyxpPVtzXTtkb3tmb3IodD1pLnJldmVyc2UoKSxpPVtdO3M9dC5wb3AoKTspaWYoZShzKSxuPXMuY2hpbGRyZW4pZm9yKHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpaS5wdXNoKG5bcl0pfXdoaWxlKGkubGVuZ3RoKTtyZXR1cm4gdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQWZ0ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsbz10aGlzLHM9W29dLGk9W107bz1zLnBvcCgpOylpZihpLnB1c2gobyksdD1vLmNoaWxkcmVuKWZvcihuPTAscj10Lmxlbmd0aDtuPHI7KytuKXMucHVzaCh0W25dKTtmb3IoO289aS5wb3AoKTspZShvKTtyZXR1cm4gdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQmVmb3JlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPXRoaXMsbz1bcl07cj1vLnBvcCgpOylpZihlKHIpLHQ9ci5jaGlsZHJlbilmb3Iobj10Lmxlbmd0aC0xO24+PTA7LS1uKW8ucHVzaCh0W25dKTtyZXR1cm4gdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG4scixvLGksdSxjPW5ldyBsKGUpLGQ9K2UudmFsdWUmJihjLnZhbHVlPWUudmFsdWUpLF89W2NdO2ZvcihudWxsPT10JiYodD1zKTtuPV8ucG9wKCk7KWlmKGQmJihuLnZhbHVlPStuLmRhdGEudmFsdWUpLChvPXQobi5kYXRhKSkmJih1PW8ubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkodSksaT11LTE7aT49MDstLWkpXy5wdXNoKHI9bi5jaGlsZHJlbltpXT1uZXcgbChvW2ldKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gYy5lYWNoQmVmb3JlKGEpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gcih0aGlzKS5lYWNoQmVmb3JlKGkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gaShlKXtlLmRhdGE9ZS5kYXRhLmRhdGF9ZnVuY3Rpb24gYShlKXt2YXIgdD0wO2Rve2UuaGVpZ2h0PXR9d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIGwoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dC5jPXIsdC5iPWEsdC5hPWw7dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2guanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc3VtLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzIiksYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzIik7bC5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmwsY291bnQ6dS5hLGVhY2g6Yy5hLGVhY2hBZnRlcjpfLmEsZWFjaEJlZm9yZTpkLmEsc3VtOnAuYSxzb3J0OmYuYSxwYXRoOm0uYSxhbmNlc3RvcnM6aC5hLGRlc2NlbmRhbnRzOmcuYSxsZWF2ZXM6Yi5hLGxpbmtzOkUuYSxjb3B5Om99fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGVhdmVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9saW5rcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihuKXtuIT09ZSYmdC5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pLHR9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvcGF0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIG49ZS5hbmNlc3RvcnMoKSxyPXQuYW5jZXN0b3JzKCksbz1udWxsO2ZvcihlPW4ucG9wKCksdD1yLnBvcCgpO2U9PT10OylvPWUsZT1uLnBvcCgpLHQ9ci5wb3AoKTtyZXR1cm4gb310LmE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMsbj1yKHQsZSksbz1bdF07dCE9PW47KXQ9dC5wYXJlbnQsby5wdXNoKHQpO2Zvcih2YXIgcz1vLmxlbmd0aDtlIT09bjspby5zcGxpY2UocywwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG99fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLnNvcnQoZSl9KX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIG49K2UodC5kYXRhKXx8MCxyPXQuY2hpbGRyZW4sbz1yJiZyLmxlbmd0aDstLW8+PTA7KW4rPXJbb10udmFsdWU7dC52YWx1ZT1ufSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NsdXN0ZXIuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gby5jfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYWNrL2luZGV4LmpzIik7bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9zaWJsaW5ncy5qcyIpO24uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svZW5jbG9zZS5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBhLmF9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhcnRpdGlvbi5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3N0cmF0aWZ5LmpzIik7bi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBjLmF9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvaW5kZXguanMiKTtuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hfSk7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2JpbmFyeS5qcyIpO24uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBfLmF9KTt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvZGljZS5qcyIpO24uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBwLmF9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc2xpY2UuanMiKTtuLmQodCwibSIsZnVuY3Rpb24oKXtyZXR1cm4gZi5hfSk7dmFyIG09bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlRGljZS5qcyIpO24uZCh0LCJuIixmdW5jdGlvbigpe3JldHVybiBtLmF9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gaC5hfSk7dmFyIGc9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3Jlc3F1YXJpZnkuanMiKTtuLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svZW5jbG9zZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG4scjtpZihpKHQsZSkpcmV0dXJuW3RdO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24paWYobyh0LGVbbl0pJiZpKHUoZVtuXSx0KSxlKSlyZXR1cm5bZVtuXSx0XTtmb3Iobj0wO248ZS5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8ZS5sZW5ndGg7KytyKWlmKG8odShlW25dLGVbcl0pLHQpJiZvKHUoZVtuXSx0KSxlW3JdKSYmbyh1KGVbcl0sdCksZVtuXSkmJmkoYyhlW25dLGVbcl0sdCksZSkpcmV0dXJuW2Vbbl0sZVtyXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUuci10LnIscj10LngtZS54LG89dC55LWUueTtyZXR1cm4gbjwwfHxuKm48cipyK28qb31mdW5jdGlvbiBzKGUsdCl7dmFyIG49ZS5yLXQucisxZS02LHI9dC54LWUueCxvPXQueS1lLnk7cmV0dXJuIG4+MCYmbipuPnIqcitvKm99ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCFzKGUsdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbChlWzBdKTtjYXNlIDI6cmV0dXJuIHUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIGMoZVswXSxlWzFdLGVbMl0pfX1mdW5jdGlvbiBsKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWUueCxyPWUueSxvPWUucixzPXQueCxpPXQueSxhPXQucixsPXMtbix1PWktcixjPWEtbyxkPU1hdGguc3FydChsKmwrdSp1KTtyZXR1cm57eDoobitzK2wvZCpjKS8yLHk6KHIraSt1L2QqYykvMixyOihkK28rYSkvMn19ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHI9ZS54LG89ZS55LHM9ZS5yLGk9dC54LGE9dC55LGw9dC5yLHU9bi54LGM9bi55LGQ9bi5yLF89ci1pLHA9ci11LGY9by1hLG09by1jLGg9bC1zLGc9ZC1zLGI9cipyK28qby1zKnMsRT1iLWkqaS1hKmErbCpsLHk9Yi11KnUtYypjK2QqZCx2PXAqZi1fKm0sVD0oZip5LW0qRSkvKDIqdiktcixBPShtKmgtZipnKS92LEM9KHAqRS1fKnkpLygyKnYpLW8sTz0oXypnLXAqaCkvdixTPUEqQStPKk8tMSxSPTIqKHMrVCpBK0MqTyksaj1UKlQrQypDLXMqcyx4PS0oUz8oUitNYXRoLnNxcnQoUipSLTQqUypqKSkvKDIqUyk6ai9SKTtyZXR1cm57eDpyK1QrQSp4LHk6bytDK08qeCxyOnh9fXZhciBkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYXJyYXkuanMiKTt0LmE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4sbz0wLGk9KGU9T2JqZWN0KGQuYSkoZC5iLmNhbGwoZSkpKS5sZW5ndGgsbD1bXTtvPGk7KXQ9ZVtvXSxuJiZzKG4sdCk/KytvOihuPWEobD1yKGwsdCkpLG89MCk7cmV0dXJuIG59fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYWNrL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXt0LmNoaWxkcmVufHwodC5yPU1hdGgubWF4KDAsK2UodCl8fDApKX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLG8scyxpPXIubGVuZ3RoLGw9ZShuKSp0fHwwO2lmKGwpZm9yKG89MDtvPGk7KytvKXJbb10ucis9bDtpZihzPU9iamVjdChhLmIpKHIpLGwpZm9yKG89MDtvPGk7KytvKXJbb10uci09bDtuLnI9cytsfX19ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5wYXJlbnQ7dC5yKj1lLG4mJih0Lng9bi54K2UqdC54LHQueT1uLnkrZSp0LnkpfX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svc2libGluZ3MuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYWNjZXNzb3JzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NvbnN0YW50LmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZS54PW4vMixlLnk9YS8yLHQ/ZS5lYWNoQmVmb3JlKG8odCkpLmVhY2hBZnRlcihzKGMsLjUpKS5lYWNoQmVmb3JlKGkoMSkpOmUuZWFjaEJlZm9yZShvKHIpKS5lYWNoQWZ0ZXIocyh1LmEsMSkpLmVhY2hBZnRlcihzKGMsZS5yL01hdGgubWluKG4sYSkpKS5lYWNoQmVmb3JlKGkoTWF0aC5taW4obixhKS8oMiplLnIpKSksZX12YXIgdD1udWxsLG49MSxhPTEsYz11LmE7cmV0dXJuIGUucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU9iamVjdChsLmEpKG4pLGUpOnR9LGUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxhPSt0WzFdLGUpOltuLGFdfSxlLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QodS5iKSgrdCksZSk6Y30sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svc2libGluZ3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHIsbyxzLGksYT1lLngtdC54LGw9ZS55LXQueSx1PWEqYStsKmw7dT8obz10LnIrbi5yLG8qPW8saT1lLnIrbi5yLGkqPWksbz5pPyhyPSh1K2ktbykvKDIqdSkscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL3UtcipyKSksbi54PWUueC1yKmEtcypsLG4ueT1lLnktcipsK3MqYSk6KHI9KHUrby1pKS8oMip1KSxzPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54K3IqYS1zKmwsbi55PXQueStyKmwrcyphKSk6KG4ueD10Lngrbi5yLG4ueT10LnkpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLnIrdC5yLTFlLTYscj10LngtZS54LG89dC55LWUueTtyZXR1cm4gbj4wJiZuKm4+cipyK28qb31mdW5jdGlvbiBzKGUpe3ZhciB0PWUuXyxuPWUubmV4dC5fLHI9dC5yK24ucixvPSh0Lngqbi5yK24ueCp0LnIpL3Iscz0odC55Km4ucituLnkqdC5yKS9yO3JldHVybiBvKm8rcypzfWZ1bmN0aW9uIGkoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIGEoZSl7aWYoISh1PWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxuLGEsdSxjLGQsXyxwLGYsbSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKHU+MSkpcmV0dXJuIHQucjtpZihuPWVbMV0sdC54PS1uLnIsbi54PXQucixuLnk9MCwhKHU+MikpcmV0dXJuIHQucituLnI7cihuLHQsYT1lWzJdKSx0PW5ldyBpKHQpLG49bmV3IGkobiksYT1uZXcgaShhKSx0Lm5leHQ9YS5wcmV2aW91cz1uLG4ubmV4dD10LnByZXZpb3VzPWEsYS5uZXh0PW4ucHJldmlvdXM9dDtlOmZvcihfPTM7Xzx1OysrXyl7cih0Ll8sbi5fLGE9ZVtfXSksYT1uZXcgaShhKSxwPW4ubmV4dCxmPXQucHJldmlvdXMsbT1uLl8ucixoPXQuXy5yO2Rve2lmKG08PWgpe2lmKG8ocC5fLGEuXykpe249cCx0Lm5leHQ9bixuLnByZXZpb3VzPXQsLS1fO2NvbnRpbnVlIGV9bSs9cC5fLnIscD1wLm5leHR9ZWxzZXtpZihvKGYuXyxhLl8pKXt0PWYsdC5uZXh0PW4sbi5wcmV2aW91cz10LC0tXztjb250aW51ZSBlfWgrPWYuXy5yLGY9Zi5wcmV2aW91c319d2hpbGUocCE9PWYubmV4dCk7Zm9yKGEucHJldmlvdXM9dCxhLm5leHQ9bix0Lm5leHQ9bi5wcmV2aW91cz1uPWEsYz1zKHQpOyhhPWEubmV4dCkhPT1uOykoZD1zKGEpKTxjJiYodD1hLGM9ZCk7bj10Lm5leHR9Zm9yKHQ9W24uX10sYT1uOyhhPWEubmV4dCkhPT1uOyl0LnB1c2goYS5fKTtmb3IoYT1PYmplY3QobC5hKSh0KSxfPTA7Xzx1OysrXyl0PWVbX10sdC54LT1hLngsdC55LT1hLnk7cmV0dXJuIGEucn10LmI9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svZW5jbG9zZS5qcyIpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gYShlKSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFydGl0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yb3VuZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2RpY2UuanMiKTt0LmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBvPWUuaGVpZ2h0KzE7cmV0dXJuIGUueDA9ZS55MD1pLGUueDE9bixlLnkxPXMvbyxlLmVhY2hCZWZvcmUodChzLG8pKSxhJiZlLmVhY2hCZWZvcmUoci5hKSxlfWZ1bmN0aW9uIHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmT2JqZWN0KG8uYSkobixuLngwLGUqKG4uZGVwdGgrMSkvdCxuLngxLGUqKG4uZGVwdGgrMikvdCk7dmFyIHI9bi54MCxzPW4ueTAsYT1uLngxLWksbD1uLnkxLWk7YTxyJiYocj1hPShyK2EpLzIpLGw8cyYmKHM9bD0ocytsKS8yKSxuLngwPXIsbi55MD1zLG4ueDE9YSxuLnkxPWx9fXZhciBuPTEscz0xLGk9MCxhPSExO3JldHVybiBlLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxlKTphfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0scz0rdFsxXSxlKTpbbixzXX0sZS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOml9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9zdHJhdGlmeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUucGFyZW50SWR9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9hY2Nlc3NvcnMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzIiksYT0iJCIsbD17ZGVwdGg6LTF9LHU9e307dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgcixvLHMsYyxkLF8scCxmPWUubGVuZ3RoLG09bmV3IEFycmF5KGYpLGg9e307Zm9yKG89MDtvPGY7KytvKXI9ZVtvXSxkPW1bb109bmV3IGkuYShyKSxudWxsIT0oXz10KHIsbyxlKSkmJihfKz0iIikmJihwPWErKGQuaWQ9XyksaFtwXT1wIGluIGg/dTpkKTtmb3Iobz0wO288ZjsrK28paWYoZD1tW29dLG51bGwhPShfPW4oZVtvXSxvLGUpKSYmKF8rPSIiKSl7aWYoIShjPWhbYStfXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK18pO2lmKGM9PT11KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK18pO2MuY2hpbGRyZW4/Yy5jaGlsZHJlbi5wdXNoKGQpOmMuY2hpbGRyZW49W2RdLGQucGFyZW50PWN9ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWR9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9bCxzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5kZXB0aD1lLnBhcmVudC5kZXB0aCsxLC0tZn0pLmVhY2hCZWZvcmUoaS5iKSxzLnBhcmVudD1udWxsLGY+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9dmFyIHQ9cixuPW87cmV0dXJuIGUuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2JqZWN0KHMuYikobiksZSk6dH0sZS5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1PYmplY3Qocy5iKSh0KSxlKTpufSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9bi8odC5pLWUuaSk7dC5jLT1yLHQucys9bixlLmMrPXIsdC56Kz1uLHQubSs9bn1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdCxuPTAscj0wLG89ZS5jaGlsZHJlbixzPW8ubGVuZ3RoOy0tcz49MDspdD1vW3NdLHQueis9bix0Lm0rPW4sbis9dC5zKyhyKz10LmMpfWZ1bmN0aW9uIGwoZSx0LG4pe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOm59ZnVuY3Rpb24gdShlLHQpe3RoaXMuXz1lLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT10fWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0LG4scixvLHMsaT1uZXcgdShlLDApLGE9W2ldO3Q9YS5wb3AoKTspaWYocj10Ll8uY2hpbGRyZW4pZm9yKHQuY2hpbGRyZW49bmV3IEFycmF5KHM9ci5sZW5ndGgpLG89cy0xO28+PTA7LS1vKWEucHVzaChuPXQuY2hpbGRyZW5bb109bmV3IHUocltvXSxvKSksbi5wYXJlbnQ9dDtyZXR1cm4oaS5wYXJlbnQ9bmV3IHUobnVsbCwwKSkuY2hpbGRyZW49W2ldLGl9dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiKTt1LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuYS5wcm90b3R5cGUpLHQuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9YyhlKTtpZihyLmVhY2hBZnRlcih0KSxyLnBhcmVudC5tPS1yLnosci5lYWNoQmVmb3JlKG4pLG0pZS5lYWNoQmVmb3JlKGQpO2Vsc2V7dmFyIG89ZSxzPWUsaT1lO2UuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLng8by54JiYobz1lKSxlLng+cy54JiYocz1lKSxlLmRlcHRoPmkuZGVwdGgmJihpPWUpfSk7dmFyIGE9bz09PXM/MTpfKG8scykvMixsPWEtby54LHU9cC8ocy54K2ErbCksaD1mLyhpLmRlcHRofHwxKTtlLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS54PShlLngrbCkqdSxlLnk9ZS5kZXB0aCpofSl9cmV0dXJuIGV9ZnVuY3Rpb24gdChlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5wYXJlbnQuY2hpbGRyZW4scj1lLmk/bltlLmktMV06bnVsbDtpZih0KXthKGUpO3ZhciBvPSh0WzBdLnordFt0Lmxlbmd0aC0xXS56KS8yO3I/KGUuej1yLnorXyhlLl8sci5fKSxlLm09ZS56LW8pOmUuej1vfWVsc2UgciYmKGUuej1yLnorXyhlLl8sci5fKSk7ZS5wYXJlbnQuQT11KGUscixlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBuKGUpe2UuXy54PWUueitlLnBhcmVudC5tLGUubSs9ZS5wYXJlbnQubX1mdW5jdGlvbiB1KGUsdCxuKXtpZih0KXtmb3IodmFyIHIsYT1lLHU9ZSxjPXQsZD1hLnBhcmVudC5jaGlsZHJlblswXSxwPWEubSxmPXUubSxtPWMubSxoPWQubTtjPXMoYyksYT1vKGEpLGMmJmE7KWQ9byhkKSx1PXModSksdS5hPWUscj1jLnorbS1hLnotcCtfKGMuXyxhLl8pLHI+MCYmKGkobChjLGUsbiksZSxyKSxwKz1yLGYrPXIpLG0rPWMubSxwKz1hLm0saCs9ZC5tLGYrPXUubTtjJiYhcyh1KSYmKHUudD1jLHUubSs9bS1mKSxhJiYhbyhkKSYmKGQudD1hLGQubSs9cC1oLG49ZSl9cmV0dXJuIG59ZnVuY3Rpb24gZChlKXtlLngqPXAsZS55PWUuZGVwdGgqZn12YXIgXz1yLHA9MSxmPTEsbT1udWxsO3JldHVybiBlLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCxlKTpffSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ITEscD0rdFswXSxmPSt0WzFdLGUpOm0/bnVsbDpbcCxmXX0sZS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0hMCxwPSt0WzBdLGY9K3RbMV0sZSk6bT9bcCxmXTpudWxsfSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9iaW5hcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCxuLHIsbyl7ZnVuY3Rpb24gcyhlLHQsbixyLG8saSxhKXtpZihlPj10LTEpe3ZhciB1PWxbZV07cmV0dXJuIHUueDA9cix1LnkwPW8sdS54MT1pLHUueTE9YSx2b2lkIDB9Zm9yKHZhciBkPWNbZV0sXz1uLzIrZCxwPWUrMSxmPXQtMTtwPGY7KXt2YXIgbT1wK2Y+Pj4xO2NbbV08Xz9wPW0rMTpmPW19Xy1jW3AtMV08Y1twXS1fJiZlKzE8cCYmLS1wO3ZhciBoPWNbcF0tZCxnPW4taDtpZihpLXI+YS1vKXt2YXIgYj0ocipnK2kqaCkvbjtzKGUscCxoLHIsbyxiLGEpLHMocCx0LGcsYixvLGksYSl9ZWxzZXt2YXIgRT0obypnK2EqaCkvbjtzKGUscCxoLHIsbyxpLEUpLHMocCx0LGcscixFLGksYSl9fXZhciBpLGEsbD1lLmNoaWxkcmVuLHU9bC5sZW5ndGgsYz1uZXcgQXJyYXkodSsxKTtmb3IoY1swXT1hPWk9MDtpPHU7KytpKWNbaSsxXT1hKz1sW2ldLnZhbHVlO3MoMCx1LGUudmFsdWUsdCxuLHIsbyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2RpY2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCxuLHIsbyl7Zm9yKHZhciBzLGk9ZS5jaGlsZHJlbixhPS0xLGw9aS5sZW5ndGgsdT1lLnZhbHVlJiYoci10KS9lLnZhbHVlOysrYTxsOylzPWlbYV0scy55MD1uLHMueTE9byxzLngwPXQscy54MT10Kz1zLnZhbHVlKnV9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yb3VuZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NxdWFyaWZ5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FjY2Vzc29ycy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9jb25zdGFudC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGUueDA9ZS55MD0wLGUueDE9bCxlLnkxPXUsZS5lYWNoQmVmb3JlKHQpLGM9WzBdLGEmJmUuZWFjaEJlZm9yZShyLmEpLGV9ZnVuY3Rpb24gdChlKXt2YXIgdD1jW2UuZGVwdGhdLHI9ZS54MCt0LG89ZS55MCt0LHM9ZS54MS10LGk9ZS55MS10O3M8ciYmKHI9cz0ocitzKS8yKSxpPG8mJihvPWk9KG8raSkvMiksZS54MD1yLGUueTA9byxlLngxPXMsZS55MT1pLGUuY2hpbGRyZW4mJih0PWNbZS5kZXB0aCsxXT1kKGUpLzIscis9bShlKS10LG8rPV8oZSktdCxzLT1wKGUpLXQsaS09ZihlKS10LHM8ciYmKHI9cz0ocitzKS8yKSxpPG8mJihvPWk9KG8raSkvMiksbihlLHIsbyxzLGkpKX12YXIgbj1vLmEsYT0hMSxsPTEsdT0xLGM9WzBdLGQ9aS5hLF89aS5hLHA9aS5hLGY9aS5hLG09aS5hO3JldHVybiBlLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxlKTphfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3RbMF0sdT0rdFsxXSxlKTpbbCx1XX0sZS50aWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPU9iamVjdChzLmIpKHQpLGUpOm59LGUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6ZS5wYWRkaW5nSW5uZXIoKX0sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoaS5iKSgrdCksZSk6ZH0sZS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmUucGFkZGluZ1RvcCgpfSxlLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoaS5iKSgrdCksZSk6X30sZS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoaS5iKSgrdCksZSk6cH0sZS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGkuYikoK3QpLGUpOmZ9LGUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoaS5iKSgrdCksZSk6bX0sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvcmVzcXVhcmlmeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvZGljZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanMiKTt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUsbixpLGEsbCl7aWYoKHU9ZS5fc3F1YXJpZnkpJiZ1LnJhdGlvPT09dClmb3IodmFyIHUsYyxkLF8scCxmPS0xLG09dS5sZW5ndGgsaD1lLnZhbHVlOysrZjxtOyl7Zm9yKGM9dVtmXSxkPWMuY2hpbGRyZW4sXz1jLnZhbHVlPTAscD1kLmxlbmd0aDtfPHA7KytfKWMudmFsdWUrPWRbX10udmFsdWU7Yy5kaWNlP09iamVjdChyLmEpKGMsbixpLGEsaSs9KGwtaSkqYy52YWx1ZS9oKTpPYmplY3Qoby5hKShjLG4saSxuKz0oYS1uKSpjLnZhbHVlL2gsbCksaC09Yy52YWx1ZX1lbHNlIGUuX3NxdWFyaWZ5PXU9T2JqZWN0KHMuYykodCxlLG4saSxhLGwpLHUucmF0aW89dH1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gZSgodD0rdCk+MT90OjEpfSxufShzLmIpfSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3JvdW5kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQsbixyLG8pe2Zvcih2YXIgcyxpPWUuY2hpbGRyZW4sYT0tMSxsPWkubGVuZ3RoLHU9ZS52YWx1ZSYmKG8tbikvZS52YWx1ZTsrK2E8bDspcz1pW2FdLHMueDA9dCxzLngxPXIscy55MD1uLHMueTE9bis9cy52YWx1ZSp1fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZURpY2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2RpY2UuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbixzLGkpeygxJmUuZGVwdGg/by5hOnIuYSkoZSx0LG4scyxpKX19LCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLGksYSl7Zm9yKHZhciBsLHUsYyxkLF8scCxmLG0saCxnLGIsRT1bXSx5PXQuY2hpbGRyZW4sdj0wLFQ9MCxBPXkubGVuZ3RoLEM9dC52YWx1ZTt2PEE7KXtjPWktbixkPWEtcjtkb3tfPXlbVCsrXS52YWx1ZX13aGlsZSghXyYmVDxBKTtmb3IocD1mPV8sZz1NYXRoLm1heChkL2MsYy9kKS8oQyplKSxiPV8qXypnLGg9TWF0aC5tYXgoZi9iLGIvcCk7VDxBOysrVCl7aWYoXys9dT15W1RdLnZhbHVlLHU8cCYmKHA9dSksdT5mJiYoZj11KSxiPV8qXypnLChtPU1hdGgubWF4KGYvYixiL3ApKT5oKXtfLT11O2JyZWFrfWg9bX1FLnB1c2gobD17dmFsdWU6XyxkaWNlOmM8ZCxjaGlsZHJlbjp5LnNsaWNlKHYsVCl9KSxsLmRpY2U/T2JqZWN0KG8uYSkobCxuLHIsaSxDP3IrPWQqXy9DOmEpOk9iamVjdChzLmEpKGwsbixyLEM/bis9YypfL0M6aSxhKSxDLT1fLHY9VH1yZXR1cm4gRX1uLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLHQuYz1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9kaWNlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc2xpY2UuanMiKSxpPSgxK01hdGguc3FydCg1KSkvMjt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUsbixvLHMsaSl7cih0LGUsbixvLHMsaSl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGUoKHQ9K3QpPjE/dDoxKX0sbn0oaSl9LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzIik7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbz10P3QubGVuZ3RoOjAscz1lP01hdGgubWluKG8sZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkocyksYT1uZXcgQXJyYXkobyk7Zm9yKG49MDtuPHM7KytuKWlbbl09T2JqZWN0KHIuYSkoZVtuXSx0W25dKTtmb3IoO248bzsrK24pYVtuXT10W25dO3JldHVybiBmdW5jdGlvbihlKXtmb3Iobj0wO248czsrK24pYVtuXT1pW25dKGUpO3JldHVybiBhfX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLG8pe3ZhciBzPWUqZSxpPXMqZTtyZXR1cm4oKDEtMyplKzMqcy1pKSp0Kyg0LTYqcyszKmkpKm4rKDErMyplKzMqcy0zKmkpKnIraSpvKS82fXQuYT1yLHQuYj1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgbz1uPD0wP249MDpuPj0xPyhuPTEsdC0xKTpNYXRoLmZsb29yKG4qdCkscz1lW29dLGk9ZVtvKzFdLGE9bz4wP2Vbby0xXToyKnMtaSxsPW88dC0xP2VbbysyXToyKmktcztyZXR1cm4gcigobi1vL3QpKnQsYSxzLGksbCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpc0Nsb3NlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSp0KSxzPWVbKG8rdC0xKSV0XSxpPWVbbyV0XSxhPWVbKG8rMSkldF0sbD1lWyhvKzIpJXRdO3JldHVybiBPYmplY3Qoci5hKSgobi1vL3QpKnQscyxpLGEsbCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlK24qdH19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIGU9TWF0aC5wb3coZSxuKSx0PU1hdGgucG93KHQsbiktZSxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3coZStyKnQsbil9fWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj10LWU7cmV0dXJuIG4/cihlLG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6T2JqZWN0KGwuYSkoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBpKGUpe3JldHVybiAxPT0oZT0rZSk/YTpmdW5jdGlvbih0LG4pe3JldHVybiBuLXQ/byh0LG4sZSk6T2JqZWN0KGwuYSkoaXNOYU4odCk/bjp0KX19ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXQtZTtyZXR1cm4gbj9yKGUsbik6T2JqZWN0KGwuYSkoaXNOYU4oZSk/dDplKX10LmM9cyx0LmI9aSx0LmE9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jdWJlaGVsaXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24gdChuKXtmdW5jdGlvbiByKHQscil7dmFyIGk9ZSgodD1PYmplY3Qoby5iKSh0KSkuaCwocj1PYmplY3Qoby5iKShyKSkuaCksYT1PYmplY3Qocy5hKSh0LnMsci5zKSxsPU9iamVjdChzLmEpKHQubCxyLmwpLHU9T2JqZWN0KHMuYSkodC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmg9aShlKSx0LnM9YShlKSx0Lmw9bChNYXRoLnBvdyhlLG4pKSx0Lm9wYWNpdHk9dShlKSx0KyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPXQscn0oMSl9bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIpO3QuYj1yKHMuYyk7dmFyIGk9cihzLmEpfSwiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IERhdGU7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKGUrdCpyKSxufX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGlzY3JldGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKG4qdCkpKV19fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oY2wuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1lKCh0PU9iamVjdChvLmQpKHQpKS5oLChuPU9iamVjdChvLmQpKG4pKS5oKSxpPU9iamVjdChzLmEpKHQuYyxuLmMpLGE9T2JqZWN0KHMuYSkodC5sLG4ubCksbD1PYmplY3Qocy5hKSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuaD1yKGUpLHQuYz1pKGUpLHQubD1hKGUpLHQub3BhY2l0eT1sKGUpLHQrIiJ9fX1uLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIik7dC5hPXIocy5jKTt2YXIgaT1yKHMuYSl9LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHNsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgodD1PYmplY3Qoby5lKSh0KSkuaCwobj1PYmplY3Qoby5lKShuKSkuaCksaT1PYmplY3Qocy5hKSh0LnMsbi5zKSxhPU9iamVjdChzLmEpKHQubCxuLmwpLGw9T2JqZWN0KHMuYSkodC5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmg9cihlKSx0LnM9aShlKSx0Lmw9YShlKSx0Lm9wYWNpdHk9bChlKSx0KyIifX19bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIpO3QuYT1yKHMuYyk7dmFyIGk9cihzLmEpfSwiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2h1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qoci5jKSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW4oZSk7cmV0dXJuIHQtMzYwKk1hdGguZmxvb3IodC8zNjApfX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIpO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gcy5ifSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzIik7bi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzIik7bi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kaXNjcmV0ZS5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHVlLmpzIik7bi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gYy5hfSk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcyIpO24uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiBkLmF9KTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcm91bmQuanMiKTtuLmQodCwidCIsZnVuY3Rpb24oKXtyZXR1cm4gXy5hfSk7dmFyIHA9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIpO24uZCh0LCJ1IixmdW5jdGlvbigpe3JldHVybiBwLmF9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2luZGV4LmpzIik7bi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuYX0pLG4uZCh0LCJ3IixmdW5jdGlvbigpe3JldHVybiBmLmJ9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcyIpO24uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBtLmF9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIik7bi5kKHQsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIGguYX0pLG4uZCh0LCJyIixmdW5jdGlvbigpe3JldHVybiBoLmJ9KSxuLmQodCwicyIsZnVuY3Rpb24oKXtyZXR1cm4gaC5jfSk7dmFyIGc9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hzbC5qcyIpO24uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBnLmF9KSxuLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5ifSk7dmFyIGI9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2xhYi5qcyIpO24uZCh0LCJuIixmdW5jdGlvbigpe3JldHVybiBiLmF9KTt2YXIgRT1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaGNsLmpzIik7bi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEUuYX0pLG4uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBFLmJ9KTt2YXIgeT1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIik7bi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHkuYn0pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzIik7bi5kKHQsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIHYuYX0pO3ZhciBUPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9xdWFudGl6ZS5qcyIpO24uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiBULmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPU9iamVjdChzLmEpKChlPU9iamVjdChvLmYpKGUpKS5sLCh0PU9iamVjdChvLmYpKHQpKS5sKSxyPU9iamVjdChzLmEpKGUuYSx0LmEpLGk9T2JqZWN0KHMuYSkoZS5iLHQuYiksYT1PYmplY3Qocy5hKShlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUubD1uKHQpLGUuYT1yKHQpLGUuYj1pKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBlPStlLHQtPWUsZnVuY3Rpb24obil7cmV0dXJuIGUrdCpufX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLG89e30scz17fTtudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pO2ZvcihuIGluIHQpbiBpbiBlP29bbl09T2JqZWN0KHIuYSkoZVtuXSx0W25dKTpzW25dPXRbbl07cmV0dXJuIGZ1bmN0aW9uKGUpe2ZvcihuIGluIG8pc1tuXT1vW25dKGUpO3JldHVybiBzfX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTEsbz10WzBdLHM9bmV3IEFycmF5KHI8MD8wOnIpO248cjspc1tuXT1lKG8sbz10Wysrbl0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKGUqPXIpKSk7cmV0dXJuIHNbdF0oZS10KX19dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcXVhbnRpemUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrciluW3JdPWUoci8odC0xKSk7cmV0dXJuIG59fSwiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbixyLHM9dC5sZW5ndGgsaT1uZXcgQXJyYXkocyksYT1uZXcgQXJyYXkocyksbD1uZXcgQXJyYXkocyk7Zm9yKG49MDtuPHM7KytuKXI9T2JqZWN0KG8uaCkodFtuXSksaVtuXT1yLnJ8fDAsYVtuXT1yLmd8fDAsbFtuXT1yLmJ8fDA7cmV0dXJuIGk9ZShpKSxhPWUoYSksbD1lKGwpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKGUpe3JldHVybiByLnI9aShlKSxyLmc9YShlKSxyLmI9bChlKSxyKyIifX19bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIpO3QuYT1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1yKChlPU9iamVjdChvLmgpKGUpKS5yLCh0PU9iamVjdChvLmgpKHQpKS5yKSxzPXIoZS5nLHQuZyksaT1yKGUuYix0LmIpLGw9T2JqZWN0KGEuYSkoZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnI9bih0KSxlLmc9cyh0KSxlLmI9aSh0KSxlLm9wYWNpdHk9bCh0KSxlKyIifX12YXIgcj1PYmplY3QoYS5iKSh0KTtyZXR1cm4gbi5nYW1tYT1lLG59KDEpO3ZhciBsPXIocy5iKSx1PXIoaS5hKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKGUrdCpuKX19fSwiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcyIpLGk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGE9bmV3IFJlZ0V4cChpLnNvdXJjZSwiZyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLGwsdSxjPWkubGFzdEluZGV4PWEubGFzdEluZGV4PTAsZD0tMSxfPVtdLHA9W107Zm9yKGUrPSIiLHQrPSIiOyhuPWkuZXhlYyhlKSkmJihsPWEuZXhlYyh0KSk7KSh1PWwuaW5kZXgpPmMmJih1PXQuc2xpY2UoYyx1KSxfW2RdP19bZF0rPXU6X1srK2RdPXUpLChuPW5bMF0pPT09KGw9bFswXSk/X1tkXT9fW2RdKz1sOl9bKytkXT1sOihfWysrZF09bnVsbCxwLnB1c2goe2k6ZCx4Ok9iamVjdChzLmEpKG4sbCl9KSksYz1hLmxhc3RJbmRleDtyZXR1cm4gYzx0Lmxlbmd0aCYmKHU9dC5zbGljZShjKSxfW2RdP19bZF0rPXU6X1srK2RdPXUpLF8ubGVuZ3RoPDI/cFswXT9vKHBbMF0ueCk6cih0KToodD1wLmxlbmd0aCxmdW5jdGlvbihlKXtmb3IodmFyIG4scj0wO3I8dDsrK3IpX1sobj1wW3JdKS5pXT1uLngoZSk7cmV0dXJuIF8uam9pbigiIil9KX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPTE4MC9NYXRoLlBJLG89e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07dC5hPWZ1bmN0aW9uKGUsdCxuLG8scyxpKXt2YXIgYSxsLHU7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKHU9ZSpuK3QqbykmJihuLT1lKnUsby09dCp1KSwobD1NYXRoLnNxcnQobipuK28qbykpJiYobi89bCxvLz1sLHUvPWwpLGUqbzx0Km4mJihlPS1lLHQ9LXQsdT0tdSxhPS1hKSx7dHJhbnNsYXRlWDpzLHRyYW5zbGF0ZVk6aSxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnIsc2tld1g6TWF0aC5hdGFuKHUpKnIsc2NhbGVYOmEsc2NhbGVZOmx9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtmdW5jdGlvbiBzKGUpe3JldHVybiBlLmxlbmd0aD9lLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBpKGUscixzLGksYSxsKXtpZihlIT09c3x8ciE9PWkpe3ZhciB1PWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwsbik7bC5wdXNoKHtpOnUtNCx4Ok9iamVjdChvLmEpKGUscyl9LHtpOnUtMix4Ok9iamVjdChvLmEpKHIsaSl9KX1lbHNlKHN8fGkpJiZhLnB1c2goInRyYW5zbGF0ZSgiK3MrdCtpK24pfWZ1bmN0aW9uIGEoZSx0LG4saSl7ZSE9PXQ/KGUtdD4xODA/dCs9MzYwOnQtZT4xODAmJihlKz0zNjApLGkucHVzaCh7aTpuLnB1c2gocyhuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6T2JqZWN0KG8uYSkoZSx0KX0pKTp0JiZuLnB1c2gocyhuKSsicm90YXRlKCIrdCtyKX1mdW5jdGlvbiBsKGUsdCxuLGkpe2UhPT10P2kucHVzaCh7aTpuLnB1c2gocyhuKSsic2tld1goIixudWxsLHIpLTIseDpPYmplY3Qoby5hKShlLHQpfSk6dCYmbi5wdXNoKHMobikrInNrZXdYKCIrdCtyKX1mdW5jdGlvbiB1KGUsdCxuLHIsaSxhKXtpZihlIT09bnx8dCE9PXIpe3ZhciBsPWkucHVzaChzKGkpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6bC00LHg6T2JqZWN0KG8uYSkoZSxuKX0se2k6bC0yLHg6T2JqZWN0KG8uYSkodCxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxpLnB1c2gocyhpKSsic2NhbGUoIituKyIsIityKyIpIil9cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9W10sbz1bXTtyZXR1cm4gdD1lKHQpLG49ZShuKSxpKHQudHJhbnNsYXRlWCx0LnRyYW5zbGF0ZVksbi50cmFuc2xhdGVYLG4udHJhbnNsYXRlWSxyLG8pLGEodC5yb3RhdGUsbi5yb3RhdGUscixvKSxsKHQuc2tld1gsbi5za2V3WCxyLG8pLHUodC5zY2FsZVgsdC5zY2FsZVksbi5zY2FsZVgsbi5zY2FsZVkscixvKSx0PW49bnVsbCxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0tMSxzPW8ubGVuZ3RoOysrbjxzOylyWyh0PW9bbl0pLmldPXQueChlKTtyZXR1cm4gci5qb2luKCIiKX19fW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiksaT1yKHMuYSwicHgsICIsInB4KSIsImRlZykiKSxhPXIocy5iLCIsICIsIikiLCIpIil9LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIm5vbmUiPT09ZT91LmI6KHN8fChzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHMuc3R5bGUudHJhbnNmb3JtPWUsZT1hLmdldENvbXB1dGVkU3R5bGUoaS5hcHBlbmRDaGlsZChzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxpLnJlbW92ZUNoaWxkKHMpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLE9iamVjdCh1LmEpKCtlWzBdLCtlWzFdLCtlWzJdLCtlWzNdLCtlWzRdLCtlWzVdKSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbD09ZT91LmI6KGx8fChsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGwuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWwudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsT2JqZWN0KHUuYSkoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp1LmIpfXQuYT1yLHQuYj1vO3ZhciBzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLGQ9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWQ/T2JqZWN0KGMuYSkodCk6KCJudW1iZXIiPT09ZD9hLmE6InN0cmluZyI9PT1kPyhuPU9iamVjdChyLmEpKHQpKT8odD1uLG8uYSk6dS5hOnQgaW5zdGFuY2VvZiByLmE/by5hOnQgaW5zdGFuY2VvZiBEYXRlP2kuYTpBcnJheS5pc0FycmF5KHQpP3MuYToiZnVuY3Rpb24iIT10eXBlb2YgdC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgdC50b1N0cmluZ3x8aXNOYU4odCk/bC5hOmEuYSkoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKS0xL2UpLzJ9ZnVuY3Rpb24gcyhlKXtyZXR1cm4oKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSl9dmFyIGk9TWF0aC5TUVJUMjt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbixhLGw9ZVswXSx1PWVbMV0sYz1lWzJdLGQ9dFswXSxfPXRbMV0scD10WzJdLGY9ZC1sLG09Xy11LGg9ZipmK20qbTtpZihoPDFlLTEyKWE9TWF0aC5sb2cocC9jKS9pLG49ZnVuY3Rpb24oZSl7cmV0dXJuW2wrZSpmLHUrZSptLGMqTWF0aC5leHAoaSplKmEpXX07ZWxzZXt2YXIgZz1NYXRoLnNxcnQoaCksYj0ocCpwLWMqYys0KmgpLygyKmMqMipnKSxFPShwKnAtYypjLTQqaCkvKDIqcCoyKmcpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGIqYisxKS1iKSx2PU1hdGgubG9nKE1hdGguc3FydChFKkUrMSktRSk7YT0odi15KS9pLG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSphLG49cih5KSxkPWMvKDIqZykqKG4qcyhpKnQreSktbyh5KSk7cmV0dXJuW2wrZCpmLHUrZCptLGMqbi9yKGkqdCt5KV19fXJldHVybiBuLmR1cmF0aW9uPTFlMyphLG59fSwiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IHJ9dmFyIHM9TWF0aC5QSSxpPTIqcyxhPWktMWUtNjtyLnByb3RvdHlwZT1vLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LG4scixvLHMpe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStvKSsiLCIrKHRoaXMuX3kxPStzKX0sYXJjVG86ZnVuY3Rpb24oZSx0LG4scixvKXtlPStlLHQ9K3Qsbj0rbixyPStyLG89K287dmFyIGk9dGhpcy5feDEsYT10aGlzLl95MSxsPW4tZSx1PXItdCxjPWktZSxkPWEtdCxfPWMqYytkKmQ7aWYobzwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK28pO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKF8+MWUtNilpZihNYXRoLmFicyhkKmwtdSpjKT4xZS02JiZvKXt2YXIgcD1uLWksZj1yLWEsbT1sKmwrdSp1LGg9cCpwK2YqZixnPU1hdGguc3FydChtKSxiPU1hdGguc3FydChfKSxFPW8qTWF0aC50YW4oKHMtTWF0aC5hY29zKChtK18taCkvKDIqZypiKSkpLzIpLHk9RS9iLHY9RS9nO01hdGguYWJzKHktMSk+MWUtNiYmKHRoaXMuXys9IkwiKyhlK3kqYykrIiwiKyh0K3kqZCkpLHRoaXMuXys9IkEiK28rIiwiK28rIiwwLDAsIisgKyhkKnA+YypmKSsiLCIrKHRoaXMuX3gxPWUrdipsKSsiLCIrKHRoaXMuX3kxPXQrdip1KX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2U7fSxhcmM6ZnVuY3Rpb24oZSx0LG4scixvLGwpe2U9K2UsdD0rdCxuPStuO3ZhciB1PW4qTWF0aC5jb3MociksYz1uKk1hdGguc2luKHIpLGQ9ZSt1LF89dCtjLHA9MV5sLGY9bD9yLW86by1yO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrZCsiLCIrXzooTWF0aC5hYnModGhpcy5feDEtZCk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtXyk+MWUtNikmJih0aGlzLl8rPSJMIitkKyIsIitfKSxuJiYoZjwwJiYoZj1mJWkraSksZj5hP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitwKyIsIisoZS11KSsiLCIrKHQtYykrIkEiK24rIiwiK24rIiwwLDEsIitwKyIsIisodGhpcy5feDE9ZCkrIiwiKyh0aGlzLl95MT1fKTpmPjFlLTYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGY+PXMpKyIsIitwKyIsIisodGhpcy5feDE9ZStuKk1hdGguY29zKG8pKSsiLCIrKHRoaXMuX3kxPXQrbipNYXRoLnNpbihvKSkpKX0scmVjdDpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSx0LmE9b30sIi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2FyZWEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPS0xLHI9ZS5sZW5ndGgsbz1lW3ItMV0scz0wOysrbjxyOyl0PW8sbz1lW25dLHMrPXRbMV0qb1swXS10WzBdKm9bMV07cmV0dXJuIHMvMn19LCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jZW50cm9pZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scj0tMSxvPWUubGVuZ3RoLHM9MCxpPTAsYT1lW28tMV0sbD0wOysrcjxvOyl0PWEsYT1lW3JdLGwrPW49dFswXSphWzFdLWFbMF0qdFsxXSxzKz0odFswXSthWzBdKSpuLGkrPSh0WzFdK2FbMV0pKm47cmV0dXJuIGwqPTMsW3MvbCxpL2xdfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2NvbnRhaW5zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG89ZS5sZW5ndGgscz1lW28tMV0saT10WzBdLGE9dFsxXSxsPXNbMF0sdT1zWzFdLGM9ITEsZD0wO2Q8bzsrK2Qpcz1lW2RdLG49c1swXSxyPXNbMV0scj5hIT11PmEmJmk8KGwtbikqKGEtcikvKHUtcikrbiYmKGM9IWMpLGw9bix1PXI7cmV0dXJuIGN9fSwiLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvY3Jvc3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4odFswXS1lWzBdKSooblsxXS1lWzFdKS0odFsxXS1lWzFdKSooblswXS1lWzBdKX19LCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9odWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1bMCwxXSxyPTIsbz0yO288dDsrK28pe2Zvcig7cj4xJiZPYmplY3Qocy5hKShlW25bci0yXV0sZVtuW3ItMV1dLGVbb10pPD0wOyktLXI7bltyKytdPW99cmV0dXJuIG4uc2xpY2UoMCxyKX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jcm9zcy5qcyIpO3QuYT1mdW5jdGlvbihlKXtpZigobj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxuLHM9bmV3IEFycmF5KG4pLGk9bmV3IEFycmF5KG4pO2Zvcih0PTA7dDxuOysrdClzW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iocy5zb3J0KHIpLHQ9MDt0PG47Kyt0KWlbdF09W3NbdF1bMF0sLXNbdF1bMV1dO3ZhciBhPW8ocyksbD1vKGkpLHU9bFswXT09PWFbMF0sYz1sW2wubGVuZ3RoLTFdPT09YVthLmxlbmd0aC0xXSxkPVtdO2Zvcih0PWEubGVuZ3RoLTE7dD49MDstLXQpZC5wdXNoKGVbc1thW3RdXVsyXV0pO2Zvcih0PSt1O3Q8bC5sZW5ndGgtYzsrK3QpZC5wdXNoKGVbc1tsW3RdXVsyXV0pO3JldHVybiBkfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2FyZWEuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvY2VudHJvaWQuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaHVsbC5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jb250YWlucy5qcyIpO24uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9sZW5ndGguanMiKTtuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9sZW5ndGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9LTEsbz1lLmxlbmd0aCxzPWVbby0xXSxpPXNbMF0sYT1zWzFdLGw9MDsrK3I8bzspdD1pLG49YSxzPWVbcl0saT1zWzBdLGE9c1sxXSx0LT1pLG4tPWEsbCs9TWF0aC5zcXJ0KHQqdCtuKm4pO3JldHVybiBsfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9hZGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtpZihpc05hTih0KXx8aXNOYU4obikpcmV0dXJuIGU7dmFyIG8scyxpLGEsbCx1LGMsZCxfLHA9ZS5fcm9vdCxmPXtkYXRhOnJ9LG09ZS5feDAsaD1lLl95MCxnPWUuX3gxLGI9ZS5feTE7aWYoIXApcmV0dXJuIGUuX3Jvb3Q9ZixlO2Zvcig7cC5sZW5ndGg7KWlmKCh1PXQ+PShzPShtK2cpLzIpKT9tPXM6Zz1zLChjPW4+PShpPShoK2IpLzIpKT9oPWk6Yj1pLG89cCwhKHA9cFtkPWM8PDF8dV0pKXJldHVybiBvW2RdPWYsZTtpZihhPStlLl94LmNhbGwobnVsbCxwLmRhdGEpLGw9K2UuX3kuY2FsbChudWxsLHAuZGF0YSksdD09PWEmJm49PT1sKXJldHVybiBmLm5leHQ9cCxvP29bZF09ZjplLl9yb290PWYsZTtkb3tvPW8/b1tkXT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKHU9dD49KHM9KG0rZykvMikpP209czpnPXMsKGM9bj49KGk9KGgrYikvMikpP2g9aTpiPWl9d2hpbGUoKGQ9Yzw8MXx1KT09KF89KGw+PWkpPDwxfGE+PXMpKTtyZXR1cm4gb1tfXT1wLG9bZF09ZixlfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixvLHMsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShpKSx1PTEvMCxjPTEvMCxkPS0xLzAsXz0tMS8wO2ZvcihuPTA7bjxpOysrbilpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbbl0pKXx8aXNOYU4ocz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtuXT1vLGxbbl09cyxvPHUmJih1PW8pLG8+ZCYmKGQ9byksczxjJiYoYz1zKSxzPl8mJihfPXMpKTtpZih1PmR8fGM+XylyZXR1cm4gdGhpcztmb3IodGhpcy5jb3Zlcih1LGMpLmNvdmVyKGQsXyksbj0wO248aTsrK24pcih0aGlzLGFbbl0sbFtuXSxlW25dKTtyZXR1cm4gdGhpc310LmE9byx0LmI9ZnVuY3Rpb24oZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLG49K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiByKHRoaXMuY292ZXIodCxuKSx0LG4sZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2NvdmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLG89dGhpcy5feDEscz10aGlzLl95MTtpZihpc05hTihuKSlvPShuPU1hdGguZmxvb3IoZSkpKzEscz0ocj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBpLGEsbD1vLW4sdT10aGlzLl9yb290O24+ZXx8ZT49b3x8cj50fHx0Pj1zOylzd2l0Y2goYT0odDxyKTw8MXxlPG4saT1uZXcgQXJyYXkoNCksaVthXT11LHU9aSxsKj0yLGEpe2Nhc2UgMDpvPW4rbCxzPXIrbDticmVhaztjYXNlIDE6bj1vLWwscz1yK2w7YnJlYWs7Y2FzZSAyOm89bitsLHI9cy1sO2JyZWFrO2Nhc2UgMzpuPW8tbCxyPXMtbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9dSl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1vLHRoaXMuX3kxPXMsdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG97ZS5wdXNoKHQuZGF0YSl9d2hpbGUodD10Lm5leHQpfSksZX19LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX19LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZmluZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZC5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbil7dmFyIG8scyxpLGEsbCx1LGMsZD10aGlzLl94MCxfPXRoaXMuX3kwLHA9dGhpcy5feDEsZj10aGlzLl95MSxtPVtdLGg9dGhpcy5fcm9vdDtmb3IoaCYmbS5wdXNoKG5ldyByLmEoaCxkLF8scCxmKSksbnVsbD09bj9uPTEvMDooZD1lLW4sXz10LW4scD1lK24sZj10K24sbio9bik7dT1tLnBvcCgpOylpZighKCEoaD11Lm5vZGUpfHwocz11LngwKT5wfHwoaT11LnkwKT5mfHwoYT11LngxKTxkfHwobD11LnkxKTxfKSlpZihoLmxlbmd0aCl7dmFyIGc9KHMrYSkvMixiPShpK2wpLzI7bS5wdXNoKG5ldyByLmEoaFszXSxnLGIsYSxsKSxuZXcgci5hKGhbMl0scyxiLGcsbCksbmV3IHIuYShoWzFdLGcsaSxhLGIpLG5ldyByLmEoaFswXSxzLGksZyxiKSksKGM9KHQ+PWIpPDwxfGU+PWcpJiYodT1tW20ubGVuZ3RoLTFdLG1bbS5sZW5ndGgtMV09bVttLmxlbmd0aC0xLWNdLG1bbS5sZW5ndGgtMS1jXT11KX1lbHNle3ZhciBFPWUtK3RoaXMuX3guY2FsbChudWxsLGguZGF0YSkseT10LSt0aGlzLl95LmNhbGwobnVsbCxoLmRhdGEpLHY9RSpFK3kqeTtpZih2PG4pe3ZhciBUPU1hdGguc3FydChuPXYpO2Q9ZS1ULF89dC1ULHA9ZStULGY9dCtULG89aC5kYXRhfX1yZXR1cm4gb319LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWR0cmVlLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhpcy5ub2RlPWUsdGhpcy54MD10LHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1vfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkdHJlZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1uZXcgbyhudWxsPT10P2guYjp0LG51bGw9PW4/Zy5iOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09ZT9yOnIuYWRkQWxsKGUpfWZ1bmN0aW9uIG8oZSx0LG4scixvLHMpe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPW8sdGhpcy5feTE9cyx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LG49dDtlPWUubmV4dDspbj1uLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH10LmE9cjt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvYWRkLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvY292ZXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9kYXRhLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZmluZC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3JlbW92ZS5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Jvb3QuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXQuanMiKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdEFmdGVyLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcyIpLGc9bigiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3kuanMiKSxiPXIucHJvdG90eXBlPW8ucHJvdG90eXBlO2IuY29weT1mdW5jdGlvbigpe3ZhciBlLHQsbj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gbjtpZighci5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9cyhyKSxuO2ZvcihlPVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj1lLnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKSh0PXIuc291cmNlW2ldKSYmKHQubGVuZ3RoP2UucHVzaCh7c291cmNlOnQsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPXModCkpO3JldHVybiBufSxiLmFkZD1pLmIsYi5hZGRBbGw9aS5hLGIuY292ZXI9YS5hLGIuZGF0YT1sLmEsYi5leHRlbnQ9dS5hLGIuZmluZD1jLmEsYi5yZW1vdmU9ZC5hLGIucmVtb3ZlQWxsPWQuYixiLnJvb3Q9Xy5hLGIuc2l6ZT1wLmEsYi52aXNpdD1mLmEsYi52aXNpdEFmdGVyPW0uYSxiLng9aC5hLGIueT1nLmF9LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXQuYj1yLHQuYT1mdW5jdGlvbihlKXtpZihpc05hTihzPSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxuLHIsbyxzLGksYSxsLHUsYyxkLF8scD10aGlzLl9yb290LGY9dGhpcy5feDAsbT10aGlzLl95MCxoPXRoaXMuX3gxLGc9dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigodT1zPj0oYT0oZitoKS8yKSk/Zj1hOmg9YSwoYz1pPj0obD0obStnKS8yKSk/bT1sOmc9bCx0PXAsIShwPXBbZD1jPDwxfHVdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KHRbZCsxJjNdfHx0W2QrMiYzXXx8dFtkKzMmM10pJiYobj10LF89ZCl9Zm9yKDtwLmRhdGEhPT1lOylpZihyPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxyPyhvP3IubmV4dD1vOmRlbGV0ZSByLm5leHQsdGhpcyk6dD8obz90W2RdPW86ZGVsZXRlIHRbZF0sKHA9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnA9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFwLmxlbmd0aCYmKG4/bltfXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcm9vdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH19LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvc2l6ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkb3srK2V9d2hpbGUodD10Lm5leHQpfSksZX19LCIuL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWQuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQsbixvLHMsaSxhLGw9W10sdT10aGlzLl9yb290O2Zvcih1JiZsLnB1c2gobmV3IHIuYSh1LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7dD1sLnBvcCgpOylpZighZSh1PXQubm9kZSxvPXQueDAscz10LnkwLGk9dC54MSxhPXQueTEpJiZ1Lmxlbmd0aCl7dmFyIGM9KG8raSkvMixkPShzK2EpLzI7KG49dVszXSkmJmwucHVzaChuZXcgci5hKG4sYyxkLGksYSkpLChuPXVbMl0pJiZsLnB1c2gobmV3IHIuYShuLG8sZCxjLGEpKSwobj11WzFdKSYmbC5wdXNoKG5ldyByLmEobixjLHMsaSxkKSksKG49dVswXSkmJmwucHVzaChuZXcgci5hKG4sbyxzLGMsZCkpfXJldHVybiB0aGlzfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdEFmdGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIik7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0LG49W10sbz1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyByLmEodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3Q9bi5wb3AoKTspe3ZhciBzPXQubm9kZTtpZihzLmxlbmd0aCl7dmFyIGksYT10LngwLGw9dC55MCx1PXQueDEsYz10LnkxLGQ9KGErdSkvMixfPShsK2MpLzI7KGk9c1swXSkmJm4ucHVzaChuZXcgci5hKGksYSxsLGQsXykpLChpPXNbMV0pJiZuLnB1c2gobmV3IHIuYShpLGQsbCx1LF8pKSwoaT1zWzJdKSYmbi5wdXNoKG5ldyByLmEoaSxhLF8sZCxjKSksKGk9c1szXSkmJm4ucHVzaChuZXcgci5hKGksZCxfLHUsYykpfW8ucHVzaCh0KX1mb3IoO3Q9by5wb3AoKTspZSh0Lm5vZGUsdC54MCx0LnkwLHQueDEsdC55MSk7cmV0dXJuIHRoaXN9fSwiLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVswXX10LmI9cix0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9ZSx0aGlzKTp0aGlzLl94fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy95LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGVbMV19dC5iPXIsdC5hPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX19LCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2JhdGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9pcndpbkhhbGwuanMiKTt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUpe3ZhciBuPW8uYS5zb3VyY2UodCkoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS9lfX1yZXR1cm4gbi5zb3VyY2U9ZSxufShyLmEpfSwiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9kZWZhdWx0U291cmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9kZWZhdWx0U291cmNlLmpzIik7dC5hPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2V9fXJldHVybiBuLnNvdXJjZT1lLG59KHIuYSl9LCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvdW5pZm9ybS5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIpO24uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2xvZ05vcm1hbC5qcyIpO24uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2JhdGVzLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzIik7bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2lyd2luSGFsbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanMiKTt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLHI9MDtyPGU7KytyKW4rPXQoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPWUsbn0oci5hKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9nTm9ybWFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9ub3JtYWwuanMiKTt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKCl7dmFyIGU9by5hLnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fXJldHVybiBuLnNvdXJjZT1lLG59KHIuYSl9LCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanMiKTt0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUsbil7dmFyIHIsbztyZXR1cm4gZT1udWxsPT1lPzA6K2Usbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgcztpZihudWxsIT1yKXM9cixyPW51bGw7ZWxzZSBkb3tyPTIqdCgpLTEscz0yKnQoKS0xLG89cipyK3Mqc313aGlsZSghb3x8bz4xKTtyZXR1cm4gZStuKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKG8pL28pfX1yZXR1cm4gbi5zb3VyY2U9ZSxufShyLmEpfSwiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy91bmlmb3JtLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIpO3QuYT1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gZT1udWxsPT1lPzA6K2Usbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49ZSxlPTApOm4tPWUsZnVuY3Rpb24oKXtyZXR1cm4gdCgpKm4rZX19cmV0dXJuIG4uc291cmNlPWUsbn0oci5hKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvQWNjZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIik7dC5hPU9iamVjdChyLmEpKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvRGFyazIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKTt0LmE9T2JqZWN0KHIuYSkoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYWlyZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKTt0LmE9T2JqZWN0KHIuYSkoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYXN0ZWwxLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIik7dC5hPU9iamVjdChyLmEpKCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpO3QuYT1PYmplY3Qoci5hKSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKTt0LmE9T2JqZWN0KHIuYSkoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIik7dC5hPU9iamVjdChyLmEpKCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0My5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpO3QuYT1PYmplY3Qoci5hKSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKTt0LmE9T2JqZWN0KHIuYSkoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAsbj1uZXcgQXJyYXkodCkscj0wO3I8dDspbltyXT0iIyIrZS5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QUkduLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUGlZRy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEJ1LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRHeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxHbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1NwZWN0cmFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanMiKTtuLmQodCwiUCIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9BY2NlbnQuanMiKTtuLmQodCwiSyIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9EYXJrMi5qcyIpO24uZCh0LCJRIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1BhaXJlZC5qcyIpO24uZCh0LCJYIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDEuanMiKTtuLmQodCwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYXN0ZWwyLmpzIik7bi5kKHQsIloiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0MS5qcyIpO24uZCh0LCJfMTIiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcyIpO24uZCh0LCJfMTMiLGZ1bmN0aW9uKCl7cmV0dXJuIGMuYX0pO3ZhciBkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0My5qcyIpO24uZCh0LCJfMTQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYX0pO3ZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gXy5hfSksbi5kKHQsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYn0pO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1BSR24uanMiKTtuLmQodCwibiIsZnVuY3Rpb24oKXtyZXR1cm4gcC5hfSksbi5kKHQsIlciLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYn0pO3ZhciBmPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1BpWUcuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gZi5hfSksbi5kKHQsIl8wIixmdW5jdGlvbigpe3JldHVybiBmLmJ9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QdU9yLmpzIik7bi5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uYX0pLG4uZCh0LCJfMyIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ifSk7dmFyIGg9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIpO24uZCh0LCJ3IixmdW5jdGlvbigpe3JldHVybiBoLmF9KSxuLmQodCwiXzYiLGZ1bmN0aW9uKCl7cmV0dXJuIGguYn0pO3ZhciBnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkR3kuanMiKTtuLmQodCwieCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5hfSksbi5kKHQsIl83IixmdW5jdGlvbigpe3JldHVybiBnLmJ9KTt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsQnUuanMiKTtuLmQodCwieiIsZnVuY3Rpb24oKXtyZXR1cm4gYi5hfSksbi5kKHQsIl85IixmdW5jdGlvbigpe3JldHVybiBiLmJ9KTt2YXIgRT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiKTtuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5hfSksbi5kKHQsIl8xMCIsZnVuY3Rpb24oKXtyZXR1cm4gRS5ifSk7dmFyIHk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiKTtuLmQodCwiRCIsZnVuY3Rpb24oKXtyZXR1cm4geS5hfSksbi5kKHQsIl8xNSIsZnVuY3Rpb24oKXtyZXR1cm4geS5ifSk7dmFyIHY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdi5hfSksbi5kKHQsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIHYuYn0pO3ZhciBUPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzIik7bi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFQuYX0pLG4uZCh0LCJPIixmdW5jdGlvbigpe3JldHVybiBULmJ9KTt2YXIgQT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvR25CdS5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBBLmF9KSxuLmQodCwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gQS5ifSk7dmFyIEM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiKTtuLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4gQy5hfSksbi5kKHQsIlUiLGZ1bmN0aW9uKCl7cmV0dXJuIEMuYn0pO3ZhciBPPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanMiKTtuLmQodCwiciIsZnVuY3Rpb24oKXtyZXR1cm4gTy5hfSksbi5kKHQsIl8yIixmdW5jdGlvbigpe3JldHVybiBPLmJ9KTt2YXIgUz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIpO24uZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiBTLmF9KSxuLmQodCwiXzEiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuYn0pO3ZhciBSPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdVJkLmpzIik7bi5kKHQsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuYX0pLG4uZCh0LCJfNCIsZnVuY3Rpb24oKXtyZXR1cm4gUi5ifSk7dmFyIGo9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1JkUHUuanMiKTtuLmQodCwieSIsZnVuY3Rpb24oKXtyZXR1cm4gai5hfSksbi5kKHQsIl84IixmdW5jdGlvbigpe3JldHVybiBqLmJ9KTt2YXIgeD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIik7bi5kKHQsIkgiLGZ1bmN0aW9uKCl7cmV0dXJuIHguYX0pLG4uZCh0LCJfMTciLGZ1bmN0aW9uKCl7cmV0dXJuIHguYn0pO3ZhciBMPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIik7bi5kKHQsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIEwuYX0pLG4uZCh0LCJfMTYiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuYn0pO3ZhciBEPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiKTtuLmQodCwiSSIsZnVuY3Rpb24oKXtyZXR1cm4gRC5hfSksbi5kKHQsIl8xOCIsZnVuY3Rpb24oKXtyZXR1cm4gRC5ifSk7dmFyIHc9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIpO24uZCh0LCJKIixmdW5jdGlvbigpe3JldHVybiB3LmF9KSxuLmQodCwiXzE5IixmdW5jdGlvbigpe3JldHVybiB3LmJ9KTt2YXIgTT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE0uYX0pLG4uZCh0LCJMIixmdW5jdGlvbigpe3JldHVybiBNLmJ9KTt2YXIgaz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBrLmF9KSxuLmQodCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gay5ifSk7dmFyIEk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9HcmV5cy5qcyIpO24uZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBJLmF9KSxuLmQodCwiVCIsZnVuY3Rpb24oKXtyZXR1cm4gSS5ifSk7dmFyIFA9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIik7bi5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYX0pLG4uZCh0LCJfNSIsZnVuY3Rpb24oKXtyZXR1cm4gUC5ifSk7dmFyIE49bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9SZWRzLmpzIik7bi5kKHQsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIE4uYX0pLG4uZCh0LCJfMTEiLGZ1bmN0aW9uKCl7cmV0dXJuIE4uYn0pO3ZhciBIPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qcyIpO24uZCh0LCJtIixmdW5jdGlvbigpe3JldHVybiBILmF9KSxuLmQodCwiViIsZnVuY3Rpb24oKXtyZXR1cm4gSC5ifSk7dmFyIEY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBGLmF9KTt2YXIgQj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcyIpO24uZCh0LCJ2IixmdW5jdGlvbigpe3JldHVybiBCLmJ9KSxuLmQodCwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gQi5jfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEIuYX0pO3ZhciBVPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzIik7bi5kKHQsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIFUuYX0pO3ZhciBHPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzIik7bi5kKHQsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIEcuYX0pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBHLmN9KSxuLmQodCwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gRy5ifSksbi5kKHQsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIEcuZH0pfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcyIpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIucikoZVtlLmxlbmd0aC0xXSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvQnVQdS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsR24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIpLHM9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHIuYSk7dC5hPU9iamVjdChvLmEpKHMpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JCci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvY3ViZWhlbGl4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2luZGV4LmpzIik7dC5hPU9iamVjdChvLmYpKE9iamVjdChyLmIpKDMwMCwuNSwwKSxPYmplY3Qoci5iKSgtMjQwLC41LDEpKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9yYWluYm93LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcyIpLHM9T2JqZWN0KG8uZikoT2JqZWN0KHIuYikoLTEwMCwuNzUsLjM1KSxPYmplY3Qoci5iKSg4MCwxLjUsLjgpKSxpPU9iamVjdChvLmYpKE9iamVjdChyLmIpKDI2MCwuNzUsLjM1KSxPYmplY3Qoci5iKSg4MCwxLjUsLjgpKSxhPU9iamVjdChyLmIpKCk7dC5iPWZ1bmN0aW9uKGUpeyhlPDB8fGU+MSkmJihlLT1NYXRoLmZsb29yKGUpKTt2YXIgdD1NYXRoLmFicyhlLS41KTtyZXR1cm4gYS5oPTM2MCplLTEwMCxhLnM9MS41LTEuNSp0LGEubD0uOC0uOSp0LGErIiJ9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3cuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2luZGV4LmpzIiksbz1PYmplY3Qoci5oKSgpLHM9TWF0aC5QSS8zLGk9MipNYXRoLlBJLzM7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlPSguNS1lKSpNYXRoLlBJLG8ucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsby5nPTI1NSoodD1NYXRoLnNpbihlK3MpKSp0LG8uYj0yNTUqKHQ9TWF0aC5zaW4oZStpKSkqdCxvKyIifX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iobip0KSkpXX19bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiKTt0LmE9cihPYmplY3Qoby5hKSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpO3ZhciBzPXIoT2JqZWN0KG8uYSkoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxpPXIoT2JqZWN0KG8uYSkoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxhPXIoT2JqZWN0KG8uYSkoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiKSxzPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChyLmEpO3QuYT1PYmplY3Qoby5hKShzKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL1B1cnBsZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIikscz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoci5hKTt0LmE9T2JqZWN0KG8uYSkocyl9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPUFycmF5LnByb3RvdHlwZSxvPXIubWFwLHM9ci5zbGljZX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKCl7dmFyIGU9cygpLmxlbmd0aCxyPWNbMV08Y1swXSxvPWNbci0wXSxhPWNbMS1yXTt0PShhLW8pL01hdGgubWF4KDEsZS1fKzIqcCksZCYmKHQ9TWF0aC5mbG9vcih0KSksbys9KGEtby10KihlLV8pKSpmLG49dCooMS1fKSxkJiYobz1NYXRoLnJvdW5kKG8pLG49TWF0aC5yb3VuZChuKSk7dmFyIGw9T2JqZWN0KGkucykoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvK3QqZX0pO3JldHVybiB1KHI/bC5yZXZlcnNlKCk6bCl9dmFyIHQsbixvPU9iamVjdChsLmEpKCkudW5rbm93bih2b2lkIDApLHM9by5kb21haW4sdT1vLnJhbmdlLGM9WzAsMV0sZD0hMSxfPTAscD0wLGY9LjU7cmV0dXJuIGRlbGV0ZSBvLnVua25vd24sby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksZSgpKTpzKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9Wyt0WzBdLCt0WzFdXSxlKCkpOmMuc2xpY2UoKX0sby5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjPVsrdFswXSwrdFsxXV0sZD0hMCxlKCl9LG8uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxvLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSEhdCxlKCkpOmR9LG8ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1NYXRoLm1pbigxLHA9K3QpLGUoKSk6X30sby5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89TWF0aC5taW4oMSx0KSxlKCkpOl99LG8ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LGUoKSk6cH0sby5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGUoKSk6Zn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHIocygpLGMpLnJvdW5kKGQpLnBhZGRpbmdJbm5lcihfKS5wYWRkaW5nT3V0ZXIocCkuYWxpZ24oZil9LGEuYi5hcHBseShlKCksYXJndW1lbnRzKX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG8odCgpKX0sZX1mdW5jdGlvbiBzKCl7cmV0dXJuIG8oci5hcHBseShudWxsLGFyZ3VtZW50cykucGFkZGluZ0lubmVyKDEpKX10LmE9cix0LmI9czt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvb3JkaW5hbC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuKHQtPWU9K2UpP2Z1bmN0aW9uKG4pe3JldHVybihuLWUpL3R9Ok9iamVjdChmLmEpKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuPWVbMF0scj1lW2UubGVuZ3RoLTFdO3JldHVybiBuPnImJih0PW4sbj1yLHI9dCksZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KG4sTWF0aC5taW4ocixlKSl9fWZ1bmN0aW9uIGkoZSx0LG4pe3ZhciByPWVbMF0scz1lWzFdLGk9dFswXSxhPXRbMV07cmV0dXJuIHM8cj8ocj1vKHMsciksaT1uKGEsaSkpOihyPW8ocixzKSxpPW4oaSxhKSksZnVuY3Rpb24oZSl7cmV0dXJuIGkocihlKSl9fWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLHM9bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLGE9LTE7Zm9yKGVbcl08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxyOylzW2FdPW8oZVthXSxlW2ErMV0pLGlbYV09bih0W2FdLHRbYSsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdChkLmIpKGUsdCwxLHIpLTE7cmV0dXJuIGlbbl0oc1tuXSh0KSl9fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdT1NYXRoLm1pbihmLmxlbmd0aCxnLmxlbmd0aCk+Mj9hOmksYz1kPW51bGwsdH1mdW5jdGlvbiB0KGUpe3JldHVybiBpc05hTihlPStlKT9sOihjfHwoYz11KGYubWFwKG4pLGcsYikpKShuKEUoZSkpKX12YXIgbixvLGwsdSxjLGQsZj1oLGc9aCxiPV8uYSxFPXI7cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBFKG8oKGR8fChkPXUoZyxmLm1hcChuKSxfLm8pKSkoZSkpKX0sdC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9cC5hLmNhbGwodCxtLmEpLEU9PT1yfHwoRT1zKGYpKSxlKCkpOmYuc2xpY2UoKX0sdC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1wLmIuY2FsbCh0KSxlKCkpOmcuc2xpY2UoKX0sdC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBnPXAuYi5jYWxsKHQpLGI9Xy50LGUoKX0sdC5jbGFtcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lP3MoZik6cix0KTpFIT09cn0sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10LGUoKSk6Yn0sdC51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdCk6bH0sZnVuY3Rpb24odCxyKXtyZXR1cm4gbj10LG89cixlKCl9fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdSgpKGUsdCl9dC5jPXIsdC5hPWwsdC5kPXUsdC5iPWM7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiksaD1bMCwxXX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9kaXZlcmdpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP2E6KGU9LjUrKChlPStpKGUpKS1uKSooZTxuP286cyksXyhwP01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSkpfXZhciB0LG4scixvLHMsaSxhLGw9MCxjPS41LGQ9MSxfPXUuYyxwPSExO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1pKGw9K2FbMF0pLG49aShjPSthWzFdKSxyPWkoZD0rYVsyXSksbz10PT09bj8wOi41LyhuLXQpLHM9bj09PXI/MDouNS8oci1uKSxlKTpbbCxjLGRdfSxlLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSEhdCxlKTpwfSxlLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LGUpOl99LGUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGUpOmF9LGZ1bmN0aW9uKGEpe3JldHVybiBpPWEsdD1hKGwpLG49YShjKSxyPWEoZCksbz10PT09bj8wOi41LyhuLXQpLHM9bj09PXI/MDouNS8oci1uKSxlfX1mdW5jdGlvbiBvKCl7dmFyIGU9T2JqZWN0KGQuYikocigpKHUuYykpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHAuYSkoZSxvKCkpfSxjLmEuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHMoKXt2YXIgZT1PYmplY3QoXy5iKShyKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHAuYSkoZSxzKCkpLmJhc2UoZS5iYXNlKCkpfSxjLmEuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIGkoKXt2YXIgZT1PYmplY3QoZi5iKShyKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHAuYSkoZSxpKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGMuYS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSgpe3ZhciBlPU9iamVjdChtLmIpKHIoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QocC5hKShlLGEoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sYy5hLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX10LmE9byx0LmI9cyx0LmU9aSx0LmM9YSx0LmQ9bDt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29udGludW91cy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9sb2cuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc3ltbG9nLmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaWRlbnRpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBpc05hTihlPStlKT9uOmV9dmFyIG47cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLmEuY2FsbChuLGkuYSksdCk6ZS5zbGljZSgpfSx0LnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcihlKS51bmtub3duKG4pfSxlPWFyZ3VtZW50cy5sZW5ndGg/by5hLmNhbGwoZSxpLmEpOlswLDFdLE9iamVjdChzLmIpKHQpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiByLmJ9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaWRlbnRpdHkuanMiKTtuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIpO24uZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbG9nLmpzIik7bi5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zeW1sb2cuanMiKTtuLmQodCwidyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiKTtuLmQodCwiayIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSksbi5kKHQsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYn0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9wb3cuanMiKTtuLmQodCwibSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSksbi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuY30pO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGlsZS5qcyIpO24uZCh0LCJuIixmdW5jdGlvbigpe3JldHVybiBjLmF9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpemUuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hfSk7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RocmVzaG9sZC5qcyIpO24uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBfLmF9KTt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIpO24uZCh0LCJ5IixmdW5jdGlvbigpe3JldHVybiBwLmJ9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdXRjVGltZS5qcyIpO24uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiBmLmF9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcyIpO24uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiBtLmJ9KSxuLmQodCwicSIsZnVuY3Rpb24oKXtyZXR1cm4gbS5jfSksbi5kKHQsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uZH0pLG4uZCh0LCJ0IixmdW5jdGlvbigpe3JldHVybiBtLmV9KSxuLmQodCwidSIsZnVuY3Rpb24oKXtyZXR1cm4gbS5mfSk7dmFyIGg9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWxRdWFudGlsZS5qcyIpO24uZCh0LCJzIixmdW5jdGlvbigpe3JldHVybiBoLmF9KTt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvZGl2ZXJnaW5nLmpzIik7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBnLmJ9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5jfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuZH0pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBnLmV9KTt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIpO24uZCh0LCJBIixmdW5jdGlvbigpe3JldHVybiBiLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZSh0KS5kb21haW4oZSl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gbyhlLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IodCkuZG9tYWluKGUpfXJldHVybiB0aGlzfXQuYj1yLHQuYT1vfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuZG9tYWluO3JldHVybiBlLnRpY2tzPWZ1bmN0aW9uKGUpe3ZhciBuPXQoKTtyZXR1cm4gT2JqZWN0KHMuQikoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PWU/MTA6ZSl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihlLG4pe3ZhciByPXQoKTtyZXR1cm4gT2JqZWN0KGwuYSkoclswXSxyW3IubGVuZ3RoLTFdLG51bGw9PWU/MTA6ZSxuKX0sZS5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgcixvPXQoKSxpPTAsYT1vLmxlbmd0aC0xLGw9b1tpXSx1PW9bYV07cmV0dXJuIHU8bCYmKHI9bCxsPXUsdT1yLHI9aSxpPWEsYT1yKSxyPU9iamVjdChzLnopKGwsdSxuKSxyPjA/KGw9TWF0aC5mbG9vcihsL3IpKnIsdT1NYXRoLmNlaWwodS9yKSpyLHI9T2JqZWN0KHMueikobCx1LG4pKTpyPDAmJihsPU1hdGguY2VpbChsKnIpL3IsdT1NYXRoLmZsb29yKHUqcikvcixyPU9iamVjdChzLnopKGwsdSxuKSkscj4wPyhvW2ldPU1hdGguZmxvb3IobC9yKSpyLG9bYV09TWF0aC5jZWlsKHUvcikqcix0KG8pKTpyPDAmJihvW2ldPU1hdGguY2VpbChsKnIpL3Isb1thXT1NYXRoLmZsb29yKHUqcikvcix0KG8pKSxlfSxlfWZ1bmN0aW9uIG8oKXt2YXIgZT1PYmplY3QoaS5iKShpLmMsaS5jKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLmEpKGUsbygpKX0sYS5iLmFwcGx5KGUsYXJndW1lbnRzKSxyKGUpfXQuYj1yLHQuYT1vO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xvZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiBvKGUpe3JldHVybiBNYXRoLmV4cChlKX1mdW5jdGlvbiBzKGUpe3JldHVybi1NYXRoLmxvZygtZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGlzRmluaXRlKGUpPysoIjFlIitlKTplPDA/MDplfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDEwPT09ZT9hOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT1lJiZNYXRoLmxvZzEwfHwyPT09ZSYmTWF0aC5sb2cyfHwoZT1NYXRoLmxvZyhlKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvZX0pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1lKC10KX19ZnVuY3Rpb24gZChlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG49dShoKSxhPWwoaCksXygpWzBdPDA/KG49YyhuKSxhPWMoYSksZShzLGkpKTplKHIsbyksZH12YXIgbixhLGQ9ZShyLG8pLF89ZC5kb21haW4saD0xMDtyZXR1cm4gZC5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStlLHQoKSk6aH0sZC5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF8oZSksdCgpKTpfKCl9LGQudGlja3M9ZnVuY3Rpb24oZSl7dmFyIHQscj1fKCksbz1yWzBdLHM9cltyLmxlbmd0aC0xXTsodD1zPG8pJiYoYz1vLG89cyxzPWMpO3ZhciBpLGwsdSxjPW4obyksZD1uKHMpLGY9bnVsbD09ZT8xMDorZSxtPVtdO2lmKCEoaCUxKSYmZC1jPGYpe2lmKGM9TWF0aC5yb3VuZChjKS0xLGQ9TWF0aC5yb3VuZChkKSsxLG8+MCl7Zm9yKDtjPGQ7KytjKWZvcihsPTEsaT1hKGMpO2w8aDsrK2wpaWYoISgodT1pKmwpPG8pKXtpZih1PnMpYnJlYWs7bS5wdXNoKHUpfX1lbHNlIGZvcig7YzxkOysrYylmb3IobD1oLTEsaT1hKGMpO2w+PTE7LS1sKWlmKCEoKHU9aSpsKTxvKSl7aWYodT5zKWJyZWFrO20ucHVzaCh1KX19ZWxzZSBtPU9iamVjdChwLkIpKGMsZCxNYXRoLm1pbihkLWMsZikpLm1hcChhKTtyZXR1cm4gdD9tLnJldmVyc2UoKTptfSxkLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT10JiYodD0xMD09PWg/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9T2JqZWN0KGYuYSkodCkpLGU9PT0xLzApcmV0dXJuIHQ7bnVsbD09ZSYmKGU9MTApO3ZhciByPU1hdGgubWF4KDEsaCplL2QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbz1lL2EoTWF0aC5yb3VuZChuKGUpKSk7cmV0dXJuIG8qaDxoLS41JiYobyo9aCksbzw9cj90KGUpOiIifX0sZC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIF8oT2JqZWN0KG0uYSkoXygpLHtmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gYShNYXRoLmZsb29yKG4oZSkpKX0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4gYShNYXRoLmNlaWwobihlKSkpfX0pKX0sZH1mdW5jdGlvbiBfKCl7dmFyIGU9ZChPYmplY3QoaC5kKSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChoLmEpKGUsXygpKS5iYXNlKGUuYmFzZSgpKX0sZy5iLmFwcGx5KGUsYXJndW1lbnRzKSxlfXQuYj1kLHQuYT1fO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7ZT1lLnNsaWNlKCk7dmFyIG4scj0wLG89ZS5sZW5ndGgtMSxzPWVbcl0saT1lW29dO3JldHVybiBpPHMmJihuPXIscj1vLG89bixuPXMscz1pLGk9biksZVtyXT10LmZsb29yKHMpLGVbb109dC5jZWlsKGkpLGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuK2V9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9ZSsiIixvPXQuZ2V0KHIpO2lmKCFvKXtpZih1IT09YSlyZXR1cm4gdTt0LnNldChyLG89bi5wdXNoKGUpKX1yZXR1cm4gbFsoby0xKSVsLmxlbmd0aF19dmFyIHQ9T2JqZWN0KG8uYykoKSxuPVtdLGw9W10sdT1hO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbihyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5zbGljZSgpO249W10sdD1PYmplY3Qoby5jKSgpO2Zvcih2YXIgcyxpLGE9LTEsbD1yLmxlbmd0aDsrK2E8bDspdC5oYXMoaT0ocz1yW2FdKSsiIil8fHQuc2V0KGksbi5wdXNoKHMpKTtyZXR1cm4gZX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1zLmIuY2FsbCh0KSxlKTpsLnNsaWNlKCl9LGUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGUpOnV9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiByKG4sbCkudW5rbm93bih1KX0saS5iLmFwcGx5KGUsYXJndW1lbnRzKSxlfW4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksdC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiKSxhPXtuYW1lOiJpbXBsaWNpdCJ9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3Bvdy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBvKGUpe3JldHVybiBlPDA/LU1hdGguc3FydCgtZSk6TWF0aC5zcXJ0KGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGU8MD8tZSplOmUqZX1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gMT09PWk/ZShjLmMsYy5jKTouNT09PWk/ZShvLHMpOmUocihpKSxyKDEvaSkpfXZhciBuPWUoYy5jLGMuYyksaT0xO3JldHVybiBuLmV4cG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStlLHQoKSk6aX0sT2JqZWN0KHUuYikobil9ZnVuY3Rpb24gYSgpe3ZhciBlPWkoT2JqZWN0KGMuZCkoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoYy5hKShlLGEoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sZC5iLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYS5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfXQuYj1pLHQuYT1hLHQuYz1sO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKCl7dmFyIGU9MCxuPU1hdGgubWF4KDEsbC5sZW5ndGgpO2Zvcih1PW5ldyBBcnJheShuLTEpOysrZTxuOyl1W2UtMV09T2JqZWN0KG8ucikoYSxlL24pO3JldHVybiB0fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246bFtPYmplY3Qoby5iKSh1LGUpXX12YXIgbixhPVtdLGw9W10sdT1bXTtyZXR1cm4gdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bC5pbmRleE9mKGUpO3JldHVybiB0PDA/W05hTixOYU5dOlt0PjA/dVt0LTFdOmFbMF0sdDx1Lmxlbmd0aD91W3RdOmFbYS5sZW5ndGgtMV1dfSx0LmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS5zbGljZSgpO2E9W107Zm9yKHZhciBuLHI9MCxzPXQubGVuZ3RoO3I8czsrK3IpbnVsbD09KG49dFtyXSl8fGlzTmFOKG49K24pfHxhLnB1c2gobik7cmV0dXJuIGEuc29ydChvLmEpLGUoKX0sdC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1zLmIuY2FsbCh0KSxlKCkpOmwuc2xpY2UoKX0sdC51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdS5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcigpLmRvbWFpbihhKS5yYW5nZShsKS51bmtub3duKG4pfSxpLmIuYXBwbHkodCxhcmd1bWVudHMpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2FycmF5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aXplLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPD1lP19bT2JqZWN0KG8uYikoZCxlLDAsYyldOm59ZnVuY3Rpb24gdCgpe3ZhciB0PS0xO2ZvcihkPW5ldyBBcnJheShjKTsrK3Q8YzspZFt0XT0oKHQrMSkqdS0odC1jKSpsKS8oYysxKTtyZXR1cm4gZX12YXIgbixsPTAsdT0xLGM9MSxkPVsuNV0sXz1bMCwxXTtyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K2VbMF0sdT0rZVsxXSx0KCkpOltsLHVdfSxlLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPShfPXMuYi5jYWxsKGUpKS5sZW5ndGgtMSx0KCkpOl8uc2xpY2UoKX0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Xy5pbmRleE9mKGUpO3JldHVybiB0PDA/W05hTixOYU5dOnQ8MT9bbCxkWzBdXTp0Pj1jP1tkW2MtMV0sdV06W2RbdC0xXSxkW3RdXX0sZS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6ZX0sZS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGQuc2xpY2UoKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHIoKS5kb21haW4oW2wsdV0pLnJhbmdlKF8pLnVua25vd24obil9LGEuYi5hcHBseShPYmplY3QoaS5iKShlKSxhcmd1bWVudHMpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2FycmF5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP3M6bCgwPT09cj8uNTooZT0obyhlKS10KSpyLHU/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9dmFyIHQsbixyLG8scyxpPTAsYT0xLGw9Yy5jLHU9ITE7cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8oaT0rc1swXSksbj1vKGE9K3NbMV0pLHI9dD09PW4/MDoxLyhuLXQpLGUpOltpLGFdfSxlLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEhdCxlKTp1fSxlLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGUpOmx9LGUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGZ1bmN0aW9uKHMpe3JldHVybiBvPXMsdD1zKGkpLG49cyhhKSxyPXQ9PT1uPzA6MS8obi10KSxlfX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLmludGVycG9sYXRvcihlLmludGVycG9sYXRvcigpKS5jbGFtcChlLmNsYW1wKCkpLnVua25vd24oZS51bmtub3duKCkpfWZ1bmN0aW9uIHMoKXt2YXIgZT1PYmplY3QoXy5iKShyKCkoYy5jKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBvKGUscygpKX0sZC5hLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBpKCl7dmFyIGU9T2JqZWN0KHAuYikocigpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG8oZSxpKCkpLmJhc2UoZS5iYXNlKCkpfSxkLmEuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIGEoKXt2YXIgZT1PYmplY3QoZi5iKShyKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbyhlLGEoKSkuY29uc3RhbnQoZS5jb25zdGFudCgpKX0sZC5hLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBsKCl7dmFyIGU9T2JqZWN0KG0uYikocigpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG8oZSxsKCkpLmV4cG9uZW50KGUuZXhwb25lbnQoKSl9LGQuYS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdSgpe3JldHVybiBsLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9dC5hPW8sdC5iPXMsdC5jPWksdC5mPWEsdC5kPWwsdC5lPXU7dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbG9nLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc3ltbG9nLmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbFF1YW50aWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gbigoT2JqZWN0KG8uYikodCxlKS0xKS8odC5sZW5ndGgtMSkpfXZhciB0PVtdLG49cy5jO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKHZhciByLHM9MCxpPW4ubGVuZ3RoO3M8aTsrK3MpbnVsbD09KHI9bltzXSl8fGlzTmFOKHI9K3IpfHx0LnB1c2gocik7cmV0dXJuIHQuc29ydChvLmEpLGV9LGUuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHIobikuZG9tYWluKHQpfSxpLmEuYXBwbHkoZSxhcmd1bWVudHMpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc3ltbG9nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5sb2cxcChNYXRoLmFicyh0L2UpKX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmV4cG0xKE1hdGguYWJzKHQpKSplfX1mdW5jdGlvbiBzKGUpe3ZhciB0PTEsbj1lKHIodCksbyh0KSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShyKHQ9K24pLG8odCkpOnR9LE9iamVjdChhLmIpKG4pfWZ1bmN0aW9uIGkoKXt2YXIgZT1zKE9iamVjdChsLmQpKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGwuYSkoZSxpKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LHUuYi5hcHBseShlLGFyZ3VtZW50cyl9dC5iPXMsdC5hPWk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGhyZXNob2xkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPD1lP2FbT2JqZWN0KG8uYikobixlLDAsbCldOnR9dmFyIHQsbj1bLjVdLGE9WzAsMV0sbD0xO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1zLmIuY2FsbCh0KSxsPU1hdGgubWluKG4ubGVuZ3RoLGEubGVuZ3RoLTEpLGUpOm4uc2xpY2UoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zLmIuY2FsbCh0KSxsPU1hdGgubWluKG4ubGVuZ3RoLGEubGVuZ3RoLTEpLGUpOmEuc2xpY2UoKX0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5pbmRleE9mKGUpO3JldHVybltuW3QtMV0sblt0XV19LGUudW5rbm93bj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUpOnR9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiByKCkuZG9tYWluKG4pLnJhbmdlKGEpLnVua25vd24odCl9LGkuYi5hcHBseShlLGFyZ3VtZW50cyl9dC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIil9LCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGksYT1PYmplY3Qoci5BKShlLHQsbik7c3dpdGNoKHM9T2JqZWN0KG8uZSkobnVsbD09cz8iLGYiOnMpLHMudHlwZSl7Y2FzZSJzIjp2YXIgbD1NYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSk7cmV0dXJuIG51bGwhPXMucHJlY2lzaW9ufHxpc05hTihpPU9iamVjdChvLmcpKGEsbCkpfHwocy5wcmVjaXNpb249aSksT2JqZWN0KG8uZCkocyxsKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1zLnByZWNpc2lvbnx8aXNOYU4oaT1PYmplY3Qoby5oKShhLE1hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSkpfHwocy5wcmVjaXNpb249aS0oImUiPT09cy50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPXMucHJlY2lzaW9ufHxpc05hTihpPU9iamVjdChvLmYpKGEpKXx8KHMucHJlY2lzaW9uPWktMiooIiUiPT09cy50eXBlKSl9cmV0dXJuIE9iamVjdChvLmEpKHMpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gcyhlLHQsbixhLGwsZCx5LHYsVCl7ZnVuY3Rpb24gQShyKXtyZXR1cm4oeShyKTxyP2o6ZChyKTxyP3g6bChyKTxyP0w6YShyKTxyP0Q6dChyKTxyP24ocik8cj93Ok06ZShyKTxyP2s6SSkocil9ZnVuY3Rpb24gQyh0LG4scixvKXtpZihudWxsPT10JiYodD0xMCksIm51bWJlciI9PXR5cGVvZiB0KXt2YXIgcz1NYXRoLmFicyhyLW4pL3QsYT1PYmplY3QoaS5lKShmdW5jdGlvbihlKXtyZXR1cm4gZVsyXX0pLnJpZ2h0KFAscyk7YT09PVAubGVuZ3RoPyhvPU9iamVjdChpLkEpKG4vRSxyL0UsdCksdD1lKTphPyhhPVBbcy9QW2EtMV1bMl08UFthXVsyXS9zP2EtMTphXSxvPWFbMV0sdD1hWzBdKToobz1NYXRoLm1heChPYmplY3QoaS5BKShuLHIsdCksMSksdD12KX1yZXR1cm4gbnVsbD09bz90OnQuZXZlcnkobyl9dmFyIE89T2JqZWN0KGMuYikoYy5jLGMuYyksUz1PLmludmVydCxSPU8uZG9tYWluLGo9VCgiLiVMIikseD1UKCI6JVMiKSxMPVQoIiVJOiVNIiksRD1UKCIlSSAlcCIpLHc9VCgiJWEgJWQiKSxNPVQoIiViICVkIiksaz1UKCIlQiIpLEk9VCgiJVkiKSxQPVtbeSwxLHBdLFt5LDUsNSpwXSxbeSwxNSwxNSpwXSxbeSwzMCwzMCpwXSxbZCwxLGZdLFtkLDUsNSpmXSxbZCwxNSwxNSpmXSxbZCwzMCwzMCpmXSxbbCwxLG1dLFtsLDMsMyptXSxbbCw2LDYqbV0sW2wsMTIsMTIqbV0sW2EsMSxoXSxbYSwyLDIqaF0sW24sMSxnXSxbdCwxLGJdLFt0LDMsMypiXSxbZSwxLEVdXTtyZXR1cm4gTy5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEYXRlKFMoZSkpfSxPLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9SKHUuYS5jYWxsKGUsbykpOlIoKS5tYXAocil9LE8udGlja3M9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVIoKSxvPXJbMF0scz1yW3IubGVuZ3RoLTFdLGk9czxvO3JldHVybiBpJiYobj1vLG89cyxzPW4pLG49QyhlLG8scyx0KSxuPW4/bi5yYW5nZShvLHMrMSk6W10saT9uLnJldmVyc2UoKTpufSxPLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09dD9BOlQodCl9LE8ubmljZT1mdW5jdGlvbihlLHQpe3ZhciBuPVIoKTtyZXR1cm4oZT1DKGUsblswXSxuW24ubGVuZ3RoLTFdLHQpKT9SKE9iamVjdChfLmEpKG4sZSkpOk99LE8uY29weT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoYy5hKShPLHMoZSx0LG4sYSxsLGQseSx2LFQpKX0sT310LmE9czt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaW5kZXguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIpLHA9MWUzLGY9NjAqcCxtPTYwKmYsaD0yNCptLGc9NypoLGI9MzAqaCxFPTM2NSpoO3QuYj1mdW5jdGlvbigpe3JldHVybiBkLmIuYXBwbHkocyhhLkQsYS5uLGEuQixhLmEsYS5lLGEuaixhLnIsYS5oLGwuYykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3V0Y1RpbWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpbWUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIik7dC5hPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYi5hcHBseShPYmplY3Qoci5hKShzLl83LHMuUixzLl81LHMuRixzLkoscy5OLHMuVixzLkwsby5nKS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSksYXJndW1lbnRzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdC5qcyIpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoT2JqZWN0KHIuYSkoZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PWkuYiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09aS5iP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhuLGUpfX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KHMuYSkoZSk7cmV0dXJuKHQubG9jYWw/bzpyKSh0KX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0ZS5qcyIpO24uZCh0LCJjcmVhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcyIpO24uZCh0LCJjcmVhdG9yIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2xvY2FsLmpzIik7bi5kKHQsImxvY2FsIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiKTtuLmQodCwibWF0Y2hlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tb3VzZS5qcyIpO24uZCh0LCJtb3VzZSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiKTtuLmQodCwibmFtZXNwYWNlIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiKTtuLmQodCwibmFtZXNwYWNlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSk7dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludC5qcyIpO24uZCh0LCJjbGllbnRQb2ludCIsZnVuY3Rpb24oKXtyZXR1cm4gYy5hfSk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiKTtuLmQodCwic2VsZWN0IixmdW5jdGlvbigpe3JldHVybiBkLmF9KTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdEFsbC5qcyIpO24uZCh0LCJzZWxlY3RBbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYX0pO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIik7bi5kKHQsInNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gcC5ifSk7dmFyIGY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIpO24uZCh0LCJzZWxlY3RvciIsZnVuY3Rpb24oKXtyZXR1cm4gZi5hfSk7dmFyIG09bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIpO24uZCh0LCJzZWxlY3RvckFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gbS5hfSk7dmFyIGg9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMiKTtuLmQodCwic3R5bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGguYn0pO3ZhciBnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvdG91Y2guanMiKTtuLmQodCwidG91Y2giLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pO3ZhciBiPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvdG91Y2hlcy5qcyIpO24uZCh0LCJ0b3VjaGVzIixmdW5jdGlvbigpe3JldHVybiBiLmF9KTt2YXIgRT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIpO24uZCh0LCJ3aW5kb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIEUuYX0pO3ZhciB5PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIik7bi5kKHQsImV2ZW50IixmdW5jdGlvbigpe3JldHVybiB5LmN9KSxuLmQodCwiY3VzdG9tRXZlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIHkuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9sb2NhbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBvfWZ1bmN0aW9uIG8oKXt0aGlzLl89IkAiKygrK3MpLnRvU3RyaW5nKDM2KX10LmE9cjt2YXIgcz0wO28ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvLGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fOyEodCBpbiBlKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0aGlzLl9dPXR9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fIGluIGUmJmRlbGV0ZSBlW3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgbz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIW8ubWF0Y2hlcyl7dmFyIHM9by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3I7cj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMsZSl9fX19dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnQuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KHIuYSkoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksT2JqZWN0KG8uYSkoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSs9IiIsbj10LmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PSh0PWUuc2xpY2UoMCxuKSkmJihlPWUuc2xpY2UobisxKSksci5hLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpyLmFbdF0sbG9jYWw6ZX06ZX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7dC5hPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpyLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZLHI9ci5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtyLngsci55XX12YXIgbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtby5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktby50b3AtZS5jbGllbnRUb3BdfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9uZXcgci5hKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgci5hKFtbZV1dLHIuYyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP25ldyByLmEoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgci5hKFtudWxsPT1lP1tdOmVdLHIuYyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChyLmEpKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsbil9fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxuKX19dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QodS5hKShlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBjPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2MuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpjLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P24ubG9jYWw/bzpyOiJmdW5jdGlvbiI9PXR5cGVvZiB0P24ubG9jYWw/bDphOm4ubG9jYWw/aTpzKShuLHQpKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgcyhlKX1mdW5jdGlvbiBzKGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1yKGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj1vKGUpLHI9LTEscz10Lmxlbmd0aDsrK3I8czspbi5hZGQodFtyXSl9ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgbj1vKGUpLHI9LTEscz10Lmxlbmd0aDsrK3I8czspbi5yZW1vdmUodFtyXSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXtpKHRoaXMsZSl9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7YSh0aGlzLGUpfX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP2k6YSkodGhpcyxlKX19cy5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt0aGlzLl9uYW1lcy5pbmRleE9mKGUpPDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19LHQuYT1mdW5jdGlvbihlLHQpe3ZhciBuPXIoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHM9byh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighcy5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9jOnQ/bDp1KShuLHQpKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbG9uZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9dC5hPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNlbGVjdChlP286cil9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyxzKXtmb3IodmFyIGEsbD0wLHU9dC5sZW5ndGgsYz1zLmxlbmd0aDtsPGM7KytsKShhPXRbbF0pPyhhLl9fZGF0YV9fPXNbbF0scltsXT1hKTpuW2xdPW5ldyBpLmEoZSxzW2xdKTtmb3IoO2w8dTsrK2wpKGE9dFtsXSkmJihvW2xdPWEpfWZ1bmN0aW9uIG8oZSx0LG4scixvLHMsYSl7dmFyIHUsYyxkLF89e30scD10Lmxlbmd0aCxmPXMubGVuZ3RoLG09bmV3IEFycmF5KHApO2Zvcih1PTA7dTxwOysrdSkoYz10W3VdKSYmKG1bdV09ZD1sK2EuY2FsbChjLGMuX19kYXRhX18sdSx0KSxkIGluIF8/b1t1XT1jOl9bZF09Yyk7Zm9yKHU9MDt1PGY7Kyt1KWQ9bCthLmNhbGwoZSxzW3VdLHUscyksKGM9X1tkXSk/KHJbdV09YyxjLl9fZGF0YV9fPXNbdV0sX1tkXT1udWxsKTpuW3VdPW5ldyBpLmEoZSxzW3VdKTtmb3IodT0wO3U8cDsrK3UpKGM9dFt1XSkmJl9bbVt1XV09PT1jJiYob1t1XT1jKX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY29uc3RhbnQuanMiKSxsPSIkIjt0LmE9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gZz1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHA9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2dbKytwXT1lfSksZzt2YXIgbj10P286cixpPXRoaXMuX3BhcmVudHMsbD10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChhLmEpKGUpKTtmb3IodmFyIHU9bC5sZW5ndGgsYz1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkodSksXz1uZXcgQXJyYXkodSkscD0wO3A8dTsrK3Ape3ZhciBmPWlbcF0sbT1sW3BdLGg9bS5sZW5ndGgsZz1lLmNhbGwoZixmJiZmLl9fZGF0YV9fLHAsaSksYj1nLmxlbmd0aCxFPWRbcF09bmV3IEFycmF5KGIpLHk9Y1twXT1uZXcgQXJyYXkoYik7bihmLG0sRSx5LF9bcF09bmV3IEFycmF5KGgpLGcsdCk7Zm9yKHZhciB2LFQsQT0wLEM9MDtBPGI7KytBKWlmKHY9RVtBXSl7Zm9yKEE+PUMmJihDPUErMSk7IShUPXlbQ10pJiYrK0M8YjspO3YuX25leHQ9VHx8bnVsbH19cmV0dXJuIGM9bmV3IHMuYShjLGkpLGMuX2VudGVyPWQsYy5fZXhpdD1fLGN9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX319LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kaXNwYXRjaC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1PYmplY3QoaS5hKShlKSxvPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIG8/bz1uZXcgbyh0LG4pOihvPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oby5pbml0RXZlbnQodCxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxvLmRldGFpbD1uLmRldGFpbCk6by5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChvKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcyxlLHQpfX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9zOm8pKGUsdCkpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0wLHI9dC5sZW5ndGg7bjxyOysrbilmb3IodmFyIG8scz10W25dLGk9MCxhPXMubGVuZ3RoO2k8YTsrK2kpKG89c1tpXSkmJmUuY2FsbChvLG8uX19kYXRhX18saSxzKTtyZXR1cm4gdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIik7dC5iPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzLmEodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoby5hKSx0aGlzLl9wYXJlbnRzKX0sci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnIsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uYSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHIuYSksdGhpcy5fcGFyZW50cyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiKTt0LmE9ZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChvLmEpKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49dC5sZW5ndGgscz1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLGw9dFtpXSx1PWwubGVuZ3RoLGM9c1tpXT1bXSxkPTA7ZDx1OysrZCkoYT1sW2RdKSYmZS5jYWxsKGEsYS5fX2RhdGFfXyxkLGwpJiZjLnB1c2goYSk7cmV0dXJuIG5ldyByLmEocyx0aGlzLl9wYXJlbnRzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09dD8iIjp0fX10LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWU/cjooImZ1bmN0aW9uIj09dHlwZW9mIGU/czpvKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgcihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEkpfW4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBJfSksdC5hPXI7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiksRT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIikseT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiksdj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIpLFQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiKSxBPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiKSxPPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIikseD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiKSxJPVtudWxsXTtyLnByb3RvdHlwZT1vLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cixzZWxlY3Q6cy5hLHNlbGVjdEFsbDppLmEsZmlsdGVyOmEuYSxkYXRhOmwuYSxlbnRlcjp1LmIsZXhpdDpjLmEsbWVyZ2U6ZC5hLG9yZGVyOl8uYSxzb3J0OnAuYSxjYWxsOmYuYSxub2RlczptLmEsbm9kZTpoLmEsc2l6ZTpnLmEsZW1wdHk6Yi5hLGVhY2g6RS5hLGF0dHI6eS5hLHN0eWxlOnYuYSxwcm9wZXJ0eTpULmEsY2xhc3NlZDpBLmEsdGV4dDpDLmEsaHRtbDpPLmEscmFpc2U6Uy5hLGxvd2VyOlIuYSxhcHBlbmQ6ai5hLGluc2VydDp4LmEscmVtb3ZlOkwuYSxjbG9uZTpELmEsZGF0dW06dy5hLG9uOk0uYixkaXNwYXRjaDprLmF9LHQuYj1vfSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbnVsbH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChvLmEpKGUpLGk9bnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KHMuYSkodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX10LmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHIpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj1lLl9ncm91cHMsbz10Lmxlbmd0aCxzPW4ubGVuZ3RoLGk9TWF0aC5taW4obyxzKSxhPW5ldyBBcnJheShvKSxsPTA7bDxpOysrbClmb3IodmFyIHUsYz10W2xdLGQ9bltsXSxfPWMubGVuZ3RoLHA9YVtsXT1uZXcgQXJyYXkoXyksZj0wO2Y8XzsrK2YpKHU9Y1tmXXx8ZFtmXSkmJihwW2ZdPXUpO2Zvcig7bDxvOysrbClhW2xdPXRbbF07cmV0dXJuIG5ldyByLmEoYSx0aGlzLl9wYXJlbnRzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClmb3IodmFyIHI9ZVt0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKXt2YXIgaT1yW29dO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlWysrdF09dGhpc30pLGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIGU9byhlLHQsbiksZnVuY3Rpb24odCl7dmFyIG49dC5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1jO2M9cjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LG4pfWZpbmFsbHl7Yz1vfX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PSIiLG49ZS5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJih0PWUuc2xpY2UobisxKSxlPWUuc2xpY2UoMCxuKSkse3R5cGU6ZSxuYW1lOnR9fSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBuLHI9MCxvPS0xLHM9dC5sZW5ndGg7cjxzOysrciluPXRbcl0sZS50eXBlJiZuLnR5cGUhPT1lLnR5cGV8fG4ubmFtZSE9PWUubmFtZT90Wysrb109bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK28/dC5sZW5ndGg9bzpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gYShlLHQsbil7dmFyIHM9dS5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP3I6bztyZXR1cm4gZnVuY3Rpb24ocixvLGkpe3ZhciBhLGw9dGhpcy5fX29uLHU9cyh0LG8saSk7aWYobClmb3IodmFyIGM9MCxkPWwubGVuZ3RoO2M8ZDsrK2MpaWYoKGE9bFtjXSkudHlwZT09PWUudHlwZSYmYS5uYW1lPT09ZS5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXIsYS5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXI9dSxhLmNhcHR1cmU9biksdm9pZChhLnZhbHVlPXQpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsdSxuKSxhPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOnUsY2FwdHVyZTpufSxsP2wucHVzaChhKTp0aGlzLl9fb249W2FdfX1mdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBvPWM7ZS5zb3VyY2VFdmVudD1jLGM9ZTt0cnl7cmV0dXJuIHQuYXBwbHkobixyKX1maW5hbGx5e2M9b319bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSx0LmE9bDt2YXIgdT17fSxjPW51bGw7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7Im9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh1PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pfXQuYj1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxsPXMoZSsiIiksdT1sLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYz10P2E6aSxudWxsPT1uJiYobj0hMSkscj0wO3I8dTsrK3IpdGhpcy5lYWNoKGMobFtyXSx0LG4pKTtyZXR1cm4gdGhpc312YXIgYz10aGlzLm5vZGUoKS5fX29uO2lmKGMpZm9yKHZhciBkLF89MCxwPWMubGVuZ3RoO188cDsrK18pZm9yKHI9MCxkPWNbX107cjx1OysrcilpZigobz1sW3JdKS50eXBlPT09ZC50eXBlJiZvLm5hbWU9PT1kLm5hbWUpcmV0dXJuIGQudmFsdWV9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0tMSxuPWUubGVuZ3RoOysrdDxuOylmb3IodmFyIHIsbz1lW3RdLHM9by5sZW5ndGgtMSxpPW9bc107LS1zPj0wOykocj1vW3NdKSYmKGkmJmkhPT1yLm5leHRTaWJsaW5nJiZpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsaSksaT1yKTtyZXR1cm4gdGhpc319LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPW59fXQuYT1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT10P3I6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/czpvKShlLHQpKTp0aGlzLm5vZGUoKVtlXX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfXQuYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gocil9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX10LmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHIpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIpO3QuYT1mdW5jdGlvbihlKXsiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9T2JqZWN0KG8uYSkoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj10Lmxlbmd0aCxzPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbCx1PXRbaV0sYz11Lmxlbmd0aCxkPXNbaV09bmV3IEFycmF5KGMpLF89MDtfPGM7KytfKShhPXVbX10pJiYobD1lLmNhbGwoYSxhLl9fZGF0YV9fLF8sdSkpJiYoIl9fZGF0YV9fImluIGEmJihsLl9fZGF0YV9fPWEuX19kYXRhX18pLGRbX109bCk7cmV0dXJuIG5ldyByLmEocyx0aGlzLl9wYXJlbnRzKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiKTt0LmE9ZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChvLmEpKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49dC5sZW5ndGgscz1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgbCx1PXRbYV0sYz11Lmxlbmd0aCxkPTA7ZDxjOysrZCkobD11W2RdKSYmKHMucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGQsdSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyByLmEocyxpKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zaXplLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4gdCYmbj9lKHQuX19kYXRhX18sbi5fX2RhdGFfXyk6IXQtIW59ZXx8KGU9cik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxzPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHMpLGE9MDthPHM7KythKXtmb3IodmFyIGwsdT1uW2FdLGM9dS5sZW5ndGgsZD1pW2FdPW5ldyBBcnJheShjKSxfPTA7XzxjOysrXykobD11W19dKSYmKGRbX109bCk7ZC5zb3J0KHQpfXJldHVybiBuZXcgby5hKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQsbil9fWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUscixuKX19ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fE9iamVjdChhLmEpKGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXQuYj1pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIik7dC5hPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3M6bykoZSx0LG51bGw9PW4/IiI6bikpOmkodGhpcy5ub2RlKCksZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PXQ/IiI6dH19dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1lP3I6KCJmdW5jdGlvbiI9PXR5cGVvZiBlP3M6bykoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe310LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/cjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybltdfXQuYT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIpO3QuYT1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PXIuYztlPXQuc291cmNlRXZlbnQ7KXQ9ZTtyZXR1cm4gdH19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3RvdWNoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnQuanMiKTt0LmE9ZnVuY3Rpb24oZSx0LG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49dCx0PU9iamVjdChyLmEpKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgcyxpPTAsYT10P3QubGVuZ3RoOjA7aTxhOysraSlpZigocz10W2ldKS5pZGVudGlmaWVyPT09bilyZXR1cm4gT2JqZWN0KG8uYSkoZSxzKTtyZXR1cm4gbnVsbH19LCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3RvdWNoZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludC5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe251bGw9PXQmJih0PU9iamVjdChyLmEpKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscz10P3QubGVuZ3RoOjAsaT1uZXcgQXJyYXkocyk7bjxzOysrbilpW25dPU9iamVjdChvLmEpKGUsdFtuXSk7cmV0dXJuIGl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld319LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJjLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5vdXRlclJhZGl1c31mdW5jdGlvbiBzKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLnBhZEFuZ2xlfWZ1bmN0aW9uIGwoZSx0LG4scixvLHMsaSxhKXt2YXIgbD1uLWUsdT1yLXQsYz1pLW8sZD1hLXMscD1kKmwtYyp1O2lmKCEocCpwPF8uZikpcmV0dXJuIHA9KGMqKHQtcyktZCooZS1vKSkvcCxbZStwKmwsdCtwKnVdfWZ1bmN0aW9uIHUoZSx0LG4scixvLHMsaSl7dmFyIGE9ZS1uLGw9dC1yLHU9KGk/czotcykvT2JqZWN0KF8ubCkoYSphK2wqbCksYz11KmwsZD0tdSphLHA9ZStjLGY9dCtkLG09bitjLGg9citkLGc9KHArbSkvMixiPShmK2gpLzIsRT1tLXAseT1oLWYsdj1FKkUreSp5LFQ9by1zLEE9cCpoLW0qZixDPSh5PDA/LTE6MSkqT2JqZWN0KF8ubCkoT2JqZWN0KF8uaCkoMCxUKlQqdi1BKkEpKSxPPShBKnktRSpDKS92LFM9KC1BKkUteSpDKS92LFI9KEEqeStFKkMpL3Ysaj0oLUEqRSt5KkMpL3YseD1PLWcsTD1TLWIsRD1SLWcsdz1qLWI7cmV0dXJuIHgqeCtMKkw+RCpEK3cqdyYmKE89UixTPWopLHtjeDpPLGN5OlMseDAxOi1jLHkwMTotZCx4MTE6Tyooby9ULTEpLHkxMTpTKihvL1QtMSl9fXZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL2luZGV4LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY29uc3RhbnQuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlLHIsbz0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscz0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1tLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1fLmcsYT1oLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1fLmcsZD1PYmplY3QoXy5hKShhLWkpLEU9YT5pO2lmKGJ8fChiPWU9T2JqZWN0KGMuYSkoKSksczxvJiYocj1zLHM9byxvPXIpLHM+Xy5mKWlmKGQ+Xy5tLV8uZiliLm1vdmVUbyhzKk9iamVjdChfLmUpKGkpLHMqT2JqZWN0KF8uaykoaSkpLGIuYXJjKDAsMCxzLGksYSwhRSksbz5fLmYmJihiLm1vdmVUbyhvKk9iamVjdChfLmUpKGEpLG8qT2JqZWN0KF8uaykoYSkpLGIuYXJjKDAsMCxvLGEsaSxFKSk7ZWxzZXt2YXIgeSx2LFQ9aSxBPWEsQz1pLE89YSxTPWQsUj1kLGo9Zy5hcHBseSh0aGlzLGFyZ3VtZW50cykvMix4PWo+Xy5mJiYoZj8rZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6T2JqZWN0KF8ubCkobypvK3MqcykpLEw9T2JqZWN0KF8uaSkoT2JqZWN0KF8uYSkocy1vKS8yLCtwLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksRD1MLHc9TDtpZih4Pl8uZil7dmFyIE09T2JqZWN0KF8uYykoeC9vKk9iamVjdChfLmspKGopKSxrPU9iamVjdChfLmMpKHgvcypPYmplY3QoXy5rKShqKSk7KFMtPTIqTSk+Xy5mPyhNKj1FPzE6LTEsQys9TSxPLT1NKTooUz0wLEM9Tz0oaSthKS8yKSwoUi09MiprKT5fLmY/KGsqPUU/MTotMSxUKz1rLEEtPWspOihSPTAsVD1BPShpK2EpLzIpfXZhciBJPXMqT2JqZWN0KF8uZSkoVCksUD1zKk9iamVjdChfLmspKFQpLE49bypPYmplY3QoXy5lKShPKSxIPW8qT2JqZWN0KF8uaykoTyk7aWYoTD5fLmYpe3ZhciBGLEI9cypPYmplY3QoXy5lKShBKSxVPXMqT2JqZWN0KF8uaykoQSksRz1vKk9iamVjdChfLmUpKEMpLHo9bypPYmplY3QoXy5rKShDKTtpZihkPF8uaiYmKEY9bChJLFAsRyx6LEIsVSxOLEgpKSl7dmFyIFY9SS1GWzBdLFc9UC1GWzFdLFk9Qi1GWzBdLHE9VS1GWzFdLEs9MS9PYmplY3QoXy5rKShPYmplY3QoXy5iKSgoVipZK1cqcSkvKE9iamVjdChfLmwpKFYqVitXKlcpKk9iamVjdChfLmwpKFkqWStxKnEpKSkvMiksWD1PYmplY3QoXy5sKShGWzBdKkZbMF0rRlsxXSpGWzFdKTtEPU9iamVjdChfLmkpKEwsKG8tWCkvKEstMSkpLHc9T2JqZWN0KF8uaSkoTCwocy1YKS8oSysxKSl9fVI+Xy5mP3c+Xy5mPyh5PXUoRyx6LEksUCxzLHcsRSksdj11KEIsVSxOLEgscyx3LEUpLGIubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksdzxMP2IuYXJjKHkuY3gseS5jeSx3LE9iamVjdChfLmQpKHkueTAxLHkueDAxKSxPYmplY3QoXy5kKSh2LnkwMSx2LngwMSksIUUpOihiLmFyYyh5LmN4LHkuY3ksdyxPYmplY3QoXy5kKSh5LnkwMSx5LngwMSksT2JqZWN0KF8uZCkoeS55MTEseS54MTEpLCFFKSxiLmFyYygwLDAscyxPYmplY3QoXy5kKSh5LmN5K3kueTExLHkuY3greS54MTEpLE9iamVjdChfLmQpKHYuY3krdi55MTEsdi5jeCt2LngxMSksIUUpLGIuYXJjKHYuY3gsdi5jeSx3LE9iamVjdChfLmQpKHYueTExLHYueDExKSxPYmplY3QoXy5kKSh2LnkwMSx2LngwMSksIUUpKSk6KGIubW92ZVRvKEksUCksYi5hcmMoMCwwLHMsVCxBLCFFKSk6Yi5tb3ZlVG8oSSxQKSxvPl8uZiYmUz5fLmY/RD5fLmY/KHk9dShOLEgsQixVLG8sLUQsRSksdj11KEksUCxHLHosbywtRCxFKSxiLmxpbmVUbyh5LmN4K3kueDAxLHkuY3kreS55MDEpLEQ8TD9iLmFyYyh5LmN4LHkuY3ksRCxPYmplY3QoXy5kKSh5LnkwMSx5LngwMSksT2JqZWN0KF8uZCkodi55MDEsdi54MDEpLCFFKTooYi5hcmMoeS5jeCx5LmN5LEQsT2JqZWN0KF8uZCkoeS55MDEseS54MDEpLE9iamVjdChfLmQpKHkueTExLHkueDExKSwhRSksYi5hcmMoMCwwLG8sT2JqZWN0KF8uZCkoeS5jeSt5LnkxMSx5LmN4K3kueDExKSxPYmplY3QoXy5kKSh2LmN5K3YueTExLHYuY3grdi54MTEpLEUpLGIuYXJjKHYuY3gsdi5jeSxELE9iamVjdChfLmQpKHYueTExLHYueDExKSxPYmplY3QoXy5kKSh2LnkwMSx2LngwMSksIUUpKSk6Yi5hcmMoMCwwLG8sTyxDLEUpOmIubGluZVRvKE4sSCl9ZWxzZSBiLm1vdmVUbygwLDApO2lmKGIuY2xvc2VQYXRoKCksZSlyZXR1cm4gYj1udWxsLGUrIiJ8fG51bGx9dmFyIHQ9cixuPW8scD1PYmplY3QoZC5hKSgwKSxmPW51bGwsbT1zLGg9aSxnPWEsYj1udWxsO3JldHVybiBlLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCttLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2guYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLV8uai8yO3JldHVybltPYmplY3QoXy5lKShyKSplLE9iamVjdChfLmspKHIpKmVdfSxlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T2JqZWN0KGQuYSkoK24pLGUpOnR9LGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoZC5hKSgrdCksZSk6bn0sZS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoZC5hKSgrdCksZSk6cH0sZS5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGQuYSkoK3QpLGUpOmZ9LGUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChkLmEpKCt0KSxlKTptfSxlLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGQuYSkoK3QpLGUpOmh9LGUucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoZC5hKSgrdCksZSk6Z30sZS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PXQ/bnVsbDp0LGUpOmJ9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyZWEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQsbyxzLGksYSxtPWUubGVuZ3RoLGg9ITEsZz1uZXcgQXJyYXkobSksYj1uZXcgQXJyYXkobSk7Zm9yKG51bGw9PV8mJihmPXAoYT1PYmplY3Qoci5hKSgpKSksdD0wO3Q8PW07Kyt0KXtpZighKHQ8bSYmZChpPWVbdF0sdCxlKSk9PT1oKWlmKGg9IWgpbz10LGYuYXJlYVN0YXJ0KCksZi5saW5lU3RhcnQoKTtlbHNle2ZvcihmLmxpbmVFbmQoKSxmLmxpbmVTdGFydCgpLHM9dC0xO3M+PW87LS1zKWYucG9pbnQoZ1tzXSxiW3NdKTtmLmxpbmVFbmQoKSxmLmFyZWFFbmQoKX1oJiYoZ1t0XT0rbihpLHQsZSksYlt0XT0rdShpLHQsZSksZi5wb2ludChsPytsKGksdCxlKTpnW3RdLGM/K2MoaSx0LGUpOmJbdF0pKX1pZihhKXJldHVybiBmPW51bGwsYSsiInx8bnVsbH1mdW5jdGlvbiB0KCl7cmV0dXJuIE9iamVjdChpLmEpKCkuZGVmaW5lZChkKS5jdXJ2ZShwKS5jb250ZXh0KF8pfXZhciBuPWEuYSxsPW51bGwsdT1PYmplY3Qoby5hKSgwKSxjPWEuYixkPU9iamVjdChvLmEpKCEwKSxfPW51bGwscD1zLmEsZj1udWxsO3JldHVybiBlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoby5hKSgrdCksbD1udWxsLGUpOm59LGUueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoby5hKSgrdCksZSk6bn0sZS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoby5hKSgrdCksZSk6bH0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KG8uYSkoK3QpLGM9bnVsbCxlKTp1fSxlLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KG8uYSkoK3QpLGUpOnV9LGUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KG8uYSkoK3QpLGUpOmN9LGUubGluZVgwPWUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS54KG4pLnkodSl9LGUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS54KG4pLnkoYyl9LGUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS54KGwpLnkodSl9LGUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChvLmEpKCEhdCksZSk6ZH0sZS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LG51bGwhPV8mJihmPXAoXykpLGUpOnB9LGUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9fPWY9bnVsbDpmPXAoXz10KSxlKTpffSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhUmFkaWFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9yYWRpYWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZVJhZGlhbC5qcyIpO3QuYT1mdW5jdGlvbigpe3ZhciBlPU9iamVjdChvLmEpKCkuY3VydmUoci5hKSx0PWUuY3VydmUsbj1lLmxpbmVYMCxpPWUubGluZVgxLGE9ZS5saW5lWTAsbD1lLmxpbmVZMTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnN0YXJ0QW5nbGU9ZS54MCxkZWxldGUgZS54MCxlLmVuZEFuZ2xlPWUueDEsZGVsZXRlIGUueDEsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5pbm5lclJhZGl1cz1lLnkwLGRlbGV0ZSBlLnkwLGUub3V0ZXJSYWRpdXM9ZS55MSxkZWxldGUgZS55MSxlLmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChzLmIpKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMCxlLmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy5iKShpKCkpfSxkZWxldGUgZS5saW5lWDEsZS5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHMuYikoYSgpKX0sZGVsZXRlIGUubGluZVkwLGUubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChzLmIpKGwoKSl9LGRlbGV0ZSBlLmxpbmVZMSxlLmN1cnZlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoT2JqZWN0KHIuYikoZSkpOnQoKS5fY3VydmV9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMiplLl94MCtlLl94MSkvMywoMiplLl95MCtlLl95MSkvMywoZS5feDArMiplLl94MSkvMywoZS5feTArMiplLl95MSkvMywoZS5feDArNCplLl94MSt0KS82LChlLl95MCs0KmUuX3kxK24pLzYpfWZ1bmN0aW9uIG8oZSl7dGhpcy5fY29udGV4dD1lfXQuYz1yLHQuYT1vLG8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpyKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OnIodGhpcyxlLHQpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19LHQuYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG8oZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzQ2xvc2VkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5fY29udGV4dD1lfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiKTtyLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8uYSxhcmVhRW5kOm8uYSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj1lLHRoaXMuX3kyPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PWUsdGhpcy5feTQ9dCx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MStlKS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzYpO2JyZWFrO2RlZmF1bHQ6T2JqZWN0KHMuYykodGhpcyxlLHQpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19LHQuYT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzT3Blbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX2NvbnRleHQ9ZX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiKTtyLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYscj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T2JqZWN0KG8uYykodGhpcyxlLHQpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19LHQuYT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhpcy5fYmFzaXM9bmV3IG8uYShlKSx0aGlzLl9iZXRhPXR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzLmpzIik7ci5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LG49ZS5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLG89ZVswXSxzPXRbMF0saT1lW25dLW8sYT10W25dLXMsbD0tMTsrK2w8PW47KXI9bC9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSoobytyKmkpLHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSoocytyKmEpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX0sdC5hPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gMT09PXQ/bmV3IG8uYShlKTpuZXcgcihlLHQpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGUoK3QpfSxufSguODUpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLl94MStlLl9rKihlLl94Mi1lLl94MCksZS5feTErZS5fayooZS5feTItZS5feTApLGUuX3gyK2UuX2sqKGUuX3gxLXQpLGUuX3kyK2UuX2sqKGUuX3kxLW4pLGUuX3gyLGUuX3kyKX1mdW5jdGlvbiBvKGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn10LmM9cix0LmE9byxvLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpyKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1lLHRoaXMuX3kxPXQ7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpyKHRoaXMsZSx0KX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fSx0LmI9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBuZXcgbyhlLHQpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGUoK3QpfSxufSgwKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbENsb3NlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbm9vcC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsLmpzIik7ci5wcm90b3R5cGU9e2FyZWFTdGFydDpvLmEsYXJlYUVuZDpvLmEsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpPYmplY3Qocy5jKSh0aGlzLGUsdCl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX0sdC5iPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gbmV3IHIoZSx0KX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBlKCt0KX0sbn0oMCl9LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxPcGVuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIpO3IucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T2JqZWN0KG8uYykodGhpcyxlLHQpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19LHQuYj1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG5ldyByKGUsdCl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gZSgrdCl9LG59KDApfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb20uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9ZS5feDEsbz1lLl95MSxpPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+cy5mKXt2YXIgbD0yKmUuX2wwMV8yYSszKmUuX2wwMV9hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDAxX2EqKGUuX2wwMV9hK2UuX2wxMl9hKTtyPShyKmwtZS5feDAqZS5fbDEyXzJhK2UuX3gyKmUuX2wwMV8yYSkvdSxvPShvKmwtZS5feTAqZS5fbDEyXzJhK2UuX3kyKmUuX2wwMV8yYSkvdX1pZihlLl9sMjNfYT5zLmYpe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGQ9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO2k9KGkqYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL2QsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1uKmUuX2wxMl8yYSkvZH1lLl9jb250ZXh0LmJlemllckN1cnZlVG8ocixvLGksYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gbyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXQuYj1yO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWwuanMiKTtvLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi1lLG89dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitvKm8sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6cih0aGlzLGUsdCl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19LHQuYT1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQ/bmV3IG8oZSx0KTpuZXcgaS5hKGUsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGUoK3QpfSxufSguNSl9LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbUNsb3NlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbm9vcC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb20uanMiKTtyLnByb3RvdHlwZT17YXJlYVN0YXJ0OnMuYSxhcmVhRW5kOnMuYSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItZSxyPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpPYmplY3QoaS5iKSh0aGlzLGUsdCl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19LHQuYT1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQ/bmV3IHIoZSx0KTpuZXcgby5hKGUsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGUoK3QpfSxufSguNSl9LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbU9wZW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzIik7ci5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLWUscj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T2JqZWN0KHMuYikodGhpcyxlLHQpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fSx0LmE9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0P25ldyByKGUsdCk6bmV3IG8uYShlLDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKHQpe3JldHVybiBlKCt0KX0sbn0oLjUpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX2NvbnRleHQ9ZX1yLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfX19LHQuYT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhckNsb3NlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX2NvbnRleHQ9ZX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbm9vcC5qcyIpO3IucHJvdG90eXBlPXthcmVhU3RhcnQ6by5hLGFyZWFFbmQ6by5hLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPStlLHQ9K3QsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpKX19LHQuYT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL21vbm90b25lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU8MD8tMToxfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBvPWUuX3gxLWUuX3gwLHM9dC1lLl94MSxpPShlLl95MS1lLl95MCkvKG98fHM8MCYmLTApLGE9KG4tZS5feTEpLyhzfHxvPDAmJi0wKSxsPShpKnMrYSpvKS8obytzKTtyZXR1cm4ocihpKStyKGEpKSpNYXRoLm1pbihNYXRoLmFicyhpKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhsKSl8fDB9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWUuX3gxLWUuX3gwO3JldHVybiBuPygzKihlLl95MS1lLl95MCkvbi10KS8yOnR9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9ZS5feDAsbz1lLl95MCxzPWUuX3gxLGk9ZS5feTEsYT0ocy1yKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsbythKnQscy1hLGktYSpuLHMsaSl9ZnVuY3Rpb24gYShlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gbChlKXt0aGlzLl9jb250ZXh0PW5ldyB1KGUpfWZ1bmN0aW9uIHUoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG5ldyBhKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIG5ldyBsKGUpfXQuYT1jLHQuYj1kLGEucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmkodGhpcyx0aGlzLl90MCxzKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49TmFOO2lmKGU9K2UsdD0rdCxlIT09dGhpcy5feDF8fHQhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxpKHRoaXMscyh0aGlzLG49byh0aGlzLGUsdCkpLG4pO2JyZWFrO2RlZmF1bHQ6aSh0aGlzLHRoaXMuX3QwLG49byh0aGlzLGUsdCkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dCx0aGlzLl90MD1ufX19LChsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24oZSx0KXthLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX0sdS5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LG4scixvLHMpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUscixuLHMsbyl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyPWUubGVuZ3RoLTEsbz1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKG9bMF09MCxzWzBdPTIsaVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KW9bdF09MSxzW3RdPTQsaVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKG9bci0xXT0yLHNbci0xXT03LGlbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49b1t0XS9zW3QtMV0sc1t0XS09bixpW3RdLT1uKmlbdC0xXTtmb3Iob1tyLTFdPWlbci0xXS9zW3ItMV0sdD1yLTI7dD49MDstLXQpb1t0XT0oaVt0XS1vW3QrMV0pL3NbdF07Zm9yKHNbci0xXT0oZVtyXStvW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClzW3RdPTIqZVt0KzFdLW9bdCsxXTtyZXR1cm5bbyxzXX1yLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LG49ZS5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciByPW8oZSkscz1vKHQpLGk9MCxhPTE7YTxuOysraSwrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1baV0sc1swXVtpXSxyWzFdW2ldLHNbMV1baV0sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fSx0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9yYWRpYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0aGlzLl9jdXJ2ZT1lfWZ1bmN0aW9uIG8oZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gbmV3IHIoZSh0KSl9cmV0dXJuIHQuX2N1cnZlPWUsdH1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLHQuYj1vO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiKSxpPW8ocy5hKTtyLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvc3RlcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX3Q9dH1mdW5jdGlvbiBvKGUpe3JldHVybiBuZXcgcihlLDApfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG5ldyByKGUsMSl9dC5jPW8sdC5iPXMsci5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sdCl9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fSx0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUsLjUpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaWRlbnRpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJjLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIik7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIik7bi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9waWUuanMiKTtuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyZWFSYWRpYWwuanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSksbi5kKHQsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lUmFkaWFsLmpzIik7bi5kKHQsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pLG4uZCh0LCJEIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnRSYWRpYWwuanMiKTtuLmQodCwiQiIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSk7dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanMiKTtuLmQodCwieCIsZnVuY3Rpb24oKXtyZXR1cm4gYy5hfSksbi5kKHQsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIGMuY30pLG4uZCh0LCJ5IixmdW5jdGlvbigpe3JldHVybiBjLmJ9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sLmpzIik7bi5kKHQsIlEiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYX0pLG4uZCh0LCJZIixmdW5jdGlvbigpe3JldHVybiBkLmJ9KTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2NpcmNsZS5qcyIpO24uZCh0LCJSIixmdW5jdGlvbigpe3JldHVybiBfLmF9KTt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2Nyb3NzLmpzIik7bi5kKHQsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYX0pO3ZhciBmPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZC5qcyIpO24uZCh0LCJUIixmdW5jdGlvbigpe3JldHVybiBmLmF9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3NxdWFyZS5qcyIpO24uZCh0LCJVIixmdW5jdGlvbigpe3JldHVybiBtLmF9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3N0YXIuanMiKTtuLmQodCwiViIsZnVuY3Rpb24oKXtyZXR1cm4gaC5hfSk7dmFyIGc9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC90cmlhbmdsZS5qcyIpO24uZCh0LCJXIixmdW5jdGlvbigpe3JldHVybiBnLmF9KTt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3d5ZS5qcyIpO24uZCh0LCJYIixmdW5jdGlvbigpe3JldHVybiBiLmF9KTt2YXIgRT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXNDbG9zZWQuanMiKTtuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5hfSk7dmFyIHk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzT3Blbi5qcyIpO24uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiKTtuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdi5ifSk7dmFyIFQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBULmF9KTt2YXIgQT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxDbG9zZWQuanMiKTtuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gQS5ifSk7dmFyIEM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsT3Blbi5qcyIpO24uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBDLmJ9KTt2YXIgTz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWwuanMiKTtuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gTy5ifSk7dmFyIFM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanMiKTtuLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4gUy5hfSk7dmFyIFI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzIik7bi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFIuYX0pO3ZhciBqPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzIik7bi5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGouYX0pO3ZhciB4PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXJDbG9zZWQuanMiKTtuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4geC5hfSk7dmFyIEw9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyIpO24uZCh0LCJuIixmdW5jdGlvbigpe3JldHVybiBMLmF9KTt2YXIgRD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiKTtuLmQodCwicCIsZnVuY3Rpb24oKXtyZXR1cm4gRC5hfSksbi5kKHQsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEQuYn0pO3ZhciB3PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIik7bi5kKHQsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIHcuYX0pO3ZhciBNPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9zdGVwLmpzIik7bi5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIE0uYX0pLG4uZCh0LCJ0IixmdW5jdGlvbigpe3JldHVybiBNLmJ9KSxuLmQodCwidSIsZnVuY3Rpb24oKXtyZXR1cm4gTS5jfSk7dmFyIGs9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N0YWNrLmpzIik7bi5kKHQsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIGsuYX0pO3ZhciBJPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvZXhwYW5kLmpzIik7bi5kKHQsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIEkuYX0pO3ZhciBQPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvZGl2ZXJnaW5nLmpzIik7bi5kKHQsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYX0pO3ZhciBOPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcyIpO24uZCh0LCJIIixmdW5jdGlvbigpe3JldHVybiBOLmF9KTt2YXIgSD1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L3NpbGhvdWV0dGUuanMiKTtuLmQodCwiSSIsZnVuY3Rpb24oKXtyZXR1cm4gSC5hfSk7dmFyIEY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC93aWdnbGUuanMiKTtuLmQodCwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gRi5hfSk7dmFyIEI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2FwcGVhcmFuY2UuanMiKTtuLmQodCwiSyIsZnVuY3Rpb24oKXtyZXR1cm4gQi5hfSk7dmFyIFU9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2FzY2VuZGluZy5qcyIpO24uZCh0LCJMIixmdW5jdGlvbigpe3JldHVybiBVLmF9KTt2YXIgRz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvZGVzY2VuZGluZy5qcyIpO24uZCh0LCJNIixmdW5jdGlvbigpe3JldHVybiBHLmF9KTt2YXIgej1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvaW5zaWRlT3V0LmpzIik7bi5kKHQsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIHouYX0pO3ZhciBWPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9ub25lLmpzIik7bi5kKHQsIk8iLGZ1bmN0aW9uKCl7cmV0dXJuIFYuYX0pO3ZhciBXPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9yZXZlcnNlLmpzIik7bi5kKHQsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgbyxzLGksZD1lLmxlbmd0aCxfPSExO2ZvcihudWxsPT1sJiYoYz11KGk9T2JqZWN0KHIuYSkoKSkpLG89MDtvPD1kOysrbykhKG88ZCYmYShzPWVbb10sbyxlKSk9PT1fJiYoKF89IV8pP2MubGluZVN0YXJ0KCk6Yy5saW5lRW5kKCkpLF8mJmMucG9pbnQoK3QocyxvLGUpLCtuKHMsbyxlKSk7aWYoaSlyZXR1cm4gYz1udWxsLGkrIiJ8fG51bGx9dmFyIHQ9aS5hLG49aS5iLGE9T2JqZWN0KG8uYSkoITApLGw9bnVsbCx1PXMuYSxjPW51bGw7cmV0dXJuIGUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9iamVjdChvLmEpKCtuKSxlKTp0fSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoby5hKSgrdCksZSk6bn0sZS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KG8uYSkoISF0KSxlKTphfSxlLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbnVsbCE9bCYmKGM9dShsKSksZSk6dX0sZS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2w9Yz1udWxsOmM9dShsPXQpLGUpOmx9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmVSYWRpYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmN1cnZlO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuY3VydmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChPYmplY3Qoby5iKShlKSk6dCgpLl9jdXJ2ZX0sZX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvcmFkaWFsLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZS5qcyIpO3QuYT1mdW5jdGlvbigpe3JldHVybiByKE9iamVjdChzLmEpKCkuY3VydmUoby5hKSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gcyhlKXtmdW5jdGlvbiB0KCl7dmFyIHQscj1wLmEuY2FsbChhcmd1bWVudHMpLG89bi5hcHBseSh0aGlzLHIpLHU9cy5hcHBseSh0aGlzLHIpO2lmKGx8fChsPXQ9T2JqZWN0KF8uYSkoKSksZShsLCtpLmFwcGx5KHRoaXMsKHJbMF09byxyKSksK2EuYXBwbHkodGhpcyxyKSwraS5hcHBseSh0aGlzLChyWzBdPXUscikpLCthLmFwcGx5KHRoaXMscikpLHQpcmV0dXJuIGw9bnVsbCx0KyIifHxudWxsfXZhciBuPXIscz1vLGk9bS5hLGE9bS5iLGw9bnVsbDtyZXR1cm4gdC5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLHQpOnN9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9iamVjdChmLmEpKCtlKSx0KTppfSx0Lnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpPYmplY3QoZi5hKSgrZSksdCk6YX0sdC5jb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PWU/bnVsbDplLHQpOmx9LHR9ZnVuY3Rpb24gaShlLHQsbixyLG8pe2UubW92ZVRvKHQsbiksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrcikvMixuLHQsbyxyLG8pfWZ1bmN0aW9uIGEoZSx0LG4scixvKXtlLm1vdmVUbyh0LG4pLGUuYmV6aWVyQ3VydmVUbyh0LG49KG4rbykvMixyLG4scixvKX1mdW5jdGlvbiBsKGUsdCxuLHIsbyl7dmFyIHM9T2JqZWN0KGguYSkodCxuKSxpPU9iamVjdChoLmEpKHQsbj0obitvKS8yKSxhPU9iamVjdChoLmEpKHIsbiksbD1PYmplY3QoaC5hKShyLG8pO2UubW92ZVRvKHNbMF0sc1sxXSksZS5iZXppZXJDdXJ2ZVRvKGlbMF0saVsxXSxhWzBdLGFbMV0sbFswXSxsWzFdKX1mdW5jdGlvbiB1KCl7cmV0dXJuIHMoaSl9ZnVuY3Rpb24gYygpe3JldHVybiBzKGEpfWZ1bmN0aW9uIGQoKXt2YXIgZT1zKGwpO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUucmFkaXVzPWUueSxkZWxldGUgZS55LGV9dC5hPXUsdC5jPWMsdC5iPWQ7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludFJhZGlhbC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL21hdGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT4xPzA6ZTwtMT9wOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlPj0xP2Y6ZTw9LTE/LWY6TWF0aC5hc2luKGUpfW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiayIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQodCwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSx0LmI9cix0LmM9bzt2YXIgcz1NYXRoLmFicyxpPU1hdGguYXRhbjIsYT1NYXRoLmNvcyxsPU1hdGgubWF4LHU9TWF0aC5taW4sYz1NYXRoLnNpbixkPU1hdGguc3FydCxfPTFlLTEyLHA9TWF0aC5QSSxmPXAvMixtPTIqcH0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbigpe319LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L2RpdmVyZ2luZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtpZigoYT1lLmxlbmd0aCk+MClmb3IodmFyIG4scixvLHMsaSxhLGw9MCx1PWVbdFswXV0ubGVuZ3RoO2w8dTsrK2wpZm9yKHM9aT0wLG49MDtuPGE7KytuKShvPShyPWVbdFtuXV1bbF0pWzFdLXJbMF0pPj0wPyhyWzBdPXMsclsxXT1zKz1vKTpvPDA/KHJbMV09aSxyWzBdPWkrPW8pOnJbMF09c319LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L2V4cGFuZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L25vbmUuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXtpZigobz1lLmxlbmd0aCk+MCl7Zm9yKHZhciBuLG8scyxpPTAsYT1lWzBdLmxlbmd0aDtpPGE7KytpKXtmb3Iocz1uPTA7bjxvOysrbilzKz1lW25dW2ldWzFdfHwwO2lmKHMpZm9yKG49MDtuPG87KytuKWVbbl1baV1bMV0vPXN9T2JqZWN0KHIuYSkoZSx0KX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9ub25lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe2lmKChvPWUubGVuZ3RoKT4xKWZvcih2YXIgbixyLG8scz0xLGk9ZVt0WzBdXSxhPWkubGVuZ3RoO3M8bzsrK3MpZm9yKHI9aSxpPWVbdFtzXV0sbj0wO248YTsrK24paVtuXVsxXSs9aVtuXVswXT1pc05hTihyW25dWzFdKT9yW25dWzBdOnJbbl1bMV19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9zaWxob3VldHRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIG4sbz0wLHM9ZVt0WzBdXSxpPXMubGVuZ3RoO288aTsrK28pe2Zvcih2YXIgYT0wLGw9MDthPG47KythKWwrPWVbYV1bb11bMV18fDA7c1tvXVsxXSs9c1tvXVswXT0tbC8yfU9iamVjdChyLmEpKGUsdCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvd2lnZ2xlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe2lmKChzPWUubGVuZ3RoKT4wJiYobz0obj1lW3RbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixvLHMsaT0wLGE9MTthPG87KythKXtmb3IodmFyIGw9MCx1PTAsYz0wO2w8czsrK2wpe2Zvcih2YXIgZD1lW3RbbF1dLF89ZFthXVsxXXx8MCxwPWRbYS0xXVsxXXx8MCxmPShfLXApLzIsbT0wO208bDsrK20pe3ZhciBoPWVbdFttXV07Zis9KGhbYV1bMV18fDApLShoW2EtMV1bMV18fDApfXUrPV8sYys9ZipffW5bYS0xXVsxXSs9blthLTFdWzBdPWksdSYmKGktPWMvdSl9blthLTFdWzFdKz1uW2EtMV1bMF09aSxPYmplY3Qoci5hKShlLHQpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXBwZWFyYW5jZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdCxuPS0xLHI9MCxvPWUubGVuZ3RoLHM9LTEvMDsrK248bzspKHQ9K2Vbbl1bMV0pPnMmJihzPXQscj1uKTtyZXR1cm4gcn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvbm9uZS5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD1lLm1hcChyKTtyZXR1cm4gT2JqZWN0KG8uYSkoZSkuc29ydChmdW5jdGlvbihlLG4pe3JldHVybiB0W2VdLXRbbl19KX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXNjZW5kaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0LG49MCxyPS0xLG89ZS5sZW5ndGg7KytyPG87KSh0PStlW3JdWzFdKSYmKG4rPXQpO3JldHVybiBufXQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9ub25lLmpzIik7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWFwKHIpO3JldHVybiBPYmplY3Qoby5hKShlKS5zb3J0KGZ1bmN0aW9uKGUsbil7cmV0dXJuIHRbZV0tdFtuXX0pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9kZXNjZW5kaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hc2NlbmRpbmcuanMiKTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyLmEpKGUpLnJldmVyc2UoKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvaW5zaWRlT3V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hcHBlYXJhbmNlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXNjZW5kaW5nLmpzIik7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0LG4scz1lLmxlbmd0aCxpPWUubWFwKG8uYiksYT1PYmplY3Qoci5hKShlKSxsPTAsdT0wLGM9W10sZD1bXTtmb3IodD0wO3Q8czsrK3Qpbj1hW3RdLGw8dT8obCs9aVtuXSxjLnB1c2gobikpOih1Kz1pW25dLGQucHVzaChuKSk7cmV0dXJuIGQucmV2ZXJzZSgpLmNvbmNhdChjKX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvbm9uZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49bmV3IEFycmF5KHQpOy0tdD49MDspblt0XT10O3JldHVybiBufX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9yZXZlcnNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9ub25lLmpzIik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qoci5hKShlKS5yZXZlcnNlKCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY29uc3RhbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaWRlbnRpdHkuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgcixvLHMsZCxfLHA9ZS5sZW5ndGgsZj0wLG09bmV3IEFycmF5KHApLGg9bmV3IEFycmF5KHApLGc9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpLGI9TWF0aC5taW4oaS5tLE1hdGgubWF4KC1pLm0sdS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLEU9TWF0aC5taW4oTWF0aC5hYnMoYikvcCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkseT1FKihiPDA/LTE6MSk7Zm9yKHI9MDtyPHA7KytyKShfPWhbbVtyXT1yXT0rdChlW3JdLHIsZSkpPjAmJihmKz1fKTtmb3IobnVsbCE9bj9tLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihoW2VdLGhbdF0pfSk6bnVsbCE9YSYmbS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGEoZVt0XSxlW25dKX0pLHI9MCxzPWY/KGItcCp5KS9mOjA7cjxwOysrcixnPWQpbz1tW3JdLF89aFtvXSxkPWcrKF8+MD9fKnM6MCkreSxoW29dPXtkYXRhOmVbb10saW5kZXg6cix2YWx1ZTpfLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHBhZEFuZ2xlOkV9O3JldHVybiBofXZhciB0PXMuYSxuPW8uYSxhPW51bGwsbD1PYmplY3Qoci5hKSgwKSx1PU9iamVjdChyLmEpKGkubSksYz1PYmplY3Qoci5hKSgwKTtyZXR1cm4gZS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9iamVjdChyLmEpKCtuKSxlKTp0fSxlLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhPW51bGwsZSk6bn0sZS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbj1udWxsLGUpOmF9LGUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChyLmEpKCt0KSxlKTpsfSxlLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KHIuYSkoK3QpLGUpOnV9LGUucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qoci5hKSgrdCksZSk6Y30sZX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBvKGUpe3JldHVybiBlWzFdfXQuYT1yLHQuYj1vfSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50UmFkaWFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3RhY2suanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlW3RdfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L25vbmUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9ub25lLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgcixvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1lLmxlbmd0aCxhPXMubGVuZ3RoLGM9bmV3IEFycmF5KGEpO2ZvcihyPTA7cjxhOysrcil7Zm9yKHZhciBkLF89c1tyXSxwPWNbcl09bmV3IEFycmF5KGkpLGY9MDtmPGk7KytmKXBbZl09ZD1bMCwrdShlW2ZdLF8sZixlKV0sZC5kYXRhPWVbZl07cC5rZXk9X31mb3Iocj0wLG89bihjKTtyPGE7KytyKWNbb1tyXV0uaW5kZXg9cjtyZXR1cm4gbChjLG8pLGN9dmFyIHQ9T2JqZWN0KHMuYSkoW10pLG49YS5hLGw9aS5hLHU9cjtyZXR1cm4gZS5rZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T2JqZWN0KHMuYSkoby5hLmNhbGwobikpLGUpOnR9LGUudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3Qocy5hKSgrdCksZSk6dX0sZS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2EuYToiZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChzLmEpKG8uYS5jYWxsKHQpKSxlKTpufSxlLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1udWxsPT10P2kuYTp0LGUpOmx9LGV9fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gX30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2NpcmNsZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jcm9zcy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9kaWFtb25kLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3N0YXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3RyaWFuZ2xlLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3d5ZS5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiksXz1bby5hLHMuYSxpLmEsbC5hLGEuYSx1LmEsYy5hXTt0LmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU7aWYoc3x8KHM9ZT1PYmplY3Qoci5hKSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHMsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlKXJldHVybiBzPW51bGwsZSsiInx8bnVsbH12YXIgdD1PYmplY3QoZC5hKShvLmEpLG49T2JqZWN0KGQuYSkoNjQpLHM9bnVsbDtyZXR1cm4gZS50eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T2JqZWN0KGQuYSkobiksZSk6dH0sZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGQuYSkoK3QpLGUpOm59LGUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxlKTpzfSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY2lyY2xlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIik7dC5hPXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5zcXJ0KHQvci5qKTtlLm1vdmVUbyhuLDApLGUuYXJjKDAsMCxuLDAsci5tKX19fSwiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jcm9zcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLnNxcnQodC81KS8yO2UubW92ZVRvKC0zKm4sLW4pLGUubGluZVRvKC1uLC1uKSxlLmxpbmVUbygtbiwtMypuKSxlLmxpbmVUbyhuLC0zKm4pLGUubGluZVRvKG4sLW4pLGUubGluZVRvKDMqbiwtbiksZS5saW5lVG8oMypuLG4pLGUubGluZVRvKG4sbiksZS5saW5lVG8obiwzKm4pLGUubGluZVRvKC1uLDMqbiksZS5saW5lVG8oLW4sbiksZS5saW5lVG8oLTMqbixuKSxlLmNsb3NlUGF0aCgpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2RpYW1vbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9TWF0aC5zcXJ0KDEvMyksbz0yKnI7dC5hPXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5zcXJ0KHQvbykscz1uKnI7ZS5tb3ZlVG8oMCwtbiksZS5saW5lVG8ocywwKSxlLmxpbmVUbygwLG4pLGUubGluZVRvKC1zLDApLGUuY2xvc2VQYXRoKCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguc3FydCh0KSxyPS1uLzI7ZS5yZWN0KHIscixuLG4pfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3N0YXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL21hdGguanMiKSxvPU1hdGguc2luKHIuai8xMCkvTWF0aC5zaW4oNypyLmovMTApLHM9TWF0aC5zaW4oci5tLzEwKSpvLGk9LU1hdGguY29zKHIubS8xMCkqbzt0LmE9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqdCksbz1zKm4sYT1pKm47ZS5tb3ZlVG8oMCwtbiksZS5saW5lVG8obyxhKTtmb3IodmFyIGw9MTtsPDU7KytsKXt2YXIgdT1yLm0qbC81LGM9TWF0aC5jb3ModSksZD1NYXRoLnNpbih1KTtlLmxpbmVUbyhkKm4sLWMqbiksZS5saW5lVG8oYypvLWQqYSxkKm8rYyphKX1lLmNsb3NlUGF0aCgpfX19LCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3RyaWFuZ2xlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPU1hdGguc3FydCgzKTt0LmE9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgbj0tTWF0aC5zcXJ0KHQvKDMqcikpO2UubW92ZVRvKDAsMipuKSxlLmxpbmVUbygtcipuLC1uKSxlLmxpbmVUbyhyKm4sLW4pLGUuY2xvc2VQYXRoKCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS0uNSxvPU1hdGguc3FydCgzKS8yLHM9MS9NYXRoLnNxcnQoMTIpLGk9Myoocy8yKzEpO3QuYT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguc3FydCh0L2kpLGE9bi8yLGw9bipzLHU9YSxjPW4qcytuLGQ9LXUsXz1jO2UubW92ZVRvKGEsbCksZS5saW5lVG8odSxjKSxlLmxpbmVUbyhkLF8pLGUubGluZVRvKHIqYS1vKmwsbyphK3IqbCksZS5saW5lVG8ocip1LW8qYyxvKnUrcipjKSxlLmxpbmVUbyhyKmQtbypfLG8qZCtyKl8pLGUubGluZVRvKHIqYStvKmwscipsLW8qYSksZS5saW5lVG8ocip1K28qYyxyKmMtbyp1KSxlLmxpbmVUbyhyKmQrbypfLHIqXy1vKmQpLGUuY2xvc2VQYXRoKCl9fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG89T2JqZWN0KHUuYSkoZSkscz1vLmZvcm1hdCxpPW8ucGFyc2UsYT1vLnV0Y0Zvcm1hdCxsPW8udXRjUGFyc2Usb31uLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLHQuYT1yO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzIik7cih7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIik7bi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiByLmJ9KSxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSksbi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZH0pLG4uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiByLmV9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzIik7bi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29Gb3JtYXQuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb1BhcnNlLmpzIik7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb0Zvcm1hdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIpLHM9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsaT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9yOk9iamVjdChvLmQpKHMpO3QuYT1pfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb1BhcnNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIpLGk9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9yOk9iamVjdChzLmUpKG8uYik7dC5hPWl9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIG8oZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm57eTplLG06MCxkOjEsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsbyxzLGk9W10sYT0tMSxsPTAsdT1lLmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KythPHU7KTM3PT09ZS5jaGFyQ29kZUF0KGEpJiYoaS5wdXNoKGUuc2xpY2UobCxhKSksbnVsbCE9KG89ZmVbcj1lLmNoYXJBdCgrK2EpXSk/cj1lLmNoYXJBdCgrK2EpOm89ImUiPT09cj8iICI6IjAiLChzPXRbcl0pJiYocj1zKG4sbykpLGkucHVzaChyKSxsPWErMSk7cmV0dXJuIGkucHVzaChlLnNsaWNlKGwsYSkpLGkuam9pbigiIil9fWZ1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsYSxsPXMoMTkwMCksdT1pKGwsZSxuKz0iIiwwKTtpZih1IT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBsKXJldHVybiBuZXcgRGF0ZShsLlEpO2lmKCJwImluIGwmJihsLkg9bC5IJTEyKzEyKmwucCksIlYiaW4gbCl7aWYobC5WPDF8fGwuVj41MylyZXR1cm4gbnVsbDsidyJpbiBsfHwobC53PTEpLCJaImluIGw/KHI9byhzKGwueSkpLGE9ci5nZXRVVENEYXkoKSxyPWE+NHx8MD09PWE/cGUuUC5jZWlsKHIpOk9iamVjdChwZS5QKShyKSxyPXBlLkYub2Zmc2V0KHIsNyoobC5WLTEpKSxsLnk9ci5nZXRVVENGdWxsWWVhcigpLGwubT1yLmdldFVUQ01vbnRoKCksbC5kPXIuZ2V0VVRDRGF0ZSgpKyhsLncrNiklNyk6KHI9dChzKGwueSkpLGE9ci5nZXREYXkoKSxyPWE+NHx8MD09PWE/cGUubC5jZWlsKHIpOk9iamVjdChwZS5sKShyKSxyPXBlLmEub2Zmc2V0KHIsNyoobC5WLTEpKSxsLnk9ci5nZXRGdWxsWWVhcigpLGwubT1yLmdldE1vbnRoKCksbC5kPXIuZ2V0RGF0ZSgpKyhsLncrNiklNyl9ZWxzZSgiVyJpbiBsfHwiVSJpbiBsKSYmKCJ3ImluIGx8fChsLnc9InUiaW4gbD9sLnUlNzoiVyJpbiBsPzE6MCksYT0iWiJpbiBsP28ocyhsLnkpKS5nZXRVVENEYXkoKTp0KHMobC55KSkuZ2V0RGF5KCksbC5tPTAsbC5kPSJXImluIGw/KGwudys2KSU3KzcqbC5XLShhKzUpJTc6bC53KzcqbC5VLShhKzYpJTcpO3JldHVybiJaImluIGw/KGwuSCs9bC5aLzEwMHwwLGwuTSs9bC5aJTEwMCxvKGwpKTp0KGwpfX1mdW5jdGlvbiBpKGUsdCxuLHIpe2Zvcih2YXIgbyxzLGk9MCxhPXQubGVuZ3RoLGw9bi5sZW5ndGg7aTxhOyl7aWYocj49bClyZXR1cm4tMTtpZigzNz09PShvPXQuY2hhckNvZGVBdChpKyspKSl7aWYobz10LmNoYXJBdChpKyspLCEocz1RZVtvIGluIGZlP3QuY2hhckF0KGkrKyk6b10pfHwocj1zKGUsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKG8hPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPUZlLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUucD1CZVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPXplLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUudz1WZVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1lKGUsdCxuKXt2YXIgcj1VZS5leGVjKHQuc2xpY2UobikpO3JldHVybiByPyhlLnc9R2VbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIHI9cWUuZXhlYyh0LnNsaWNlKG4pKTtyZXR1cm4gcj8oZS5tPUtlW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2UoZSx0LG4pe3ZhciByPVdlLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUubT1ZZVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJlKGUsdCxuKXtyZXR1cm4gaShlLERlLHQsbil9ZnVuY3Rpb24gRWUoZSx0LG4pe3JldHVybiBpKGUsd2UsdCxuKX1mdW5jdGlvbiB5ZShlLHQsbil7cmV0dXJuIGkoZSxNZSx0LG4pfWZ1bmN0aW9uIHZlKGUpe3JldHVybiBQZVtlLmdldERheSgpXX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gSWVbZS5nZXREYXkoKV19ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIEhlW2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIE5lW2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIGtlWysoZS5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFNlKGUpe3JldHVybiBQZVtlLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gSWVbZS5nZXRVVENEYXkoKV19ZnVuY3Rpb24gamUoZSl7cmV0dXJuIEhlW2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24geGUoZSl7cmV0dXJuIE5lW2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGtlWysoZS5nZXRVVENIb3VycygpPj0xMildfXZhciBEZT1lLmRhdGVUaW1lLHdlPWUuZGF0ZSxNZT1lLnRpbWUsa2U9ZS5wZXJpb2RzLEllPWUuZGF5cyxQZT1lLnNob3J0RGF5cyxOZT1lLm1vbnRocyxIZT1lLnNob3J0TW9udGhzLEZlPXUoa2UpLEJlPWMoa2UpLFVlPXUoSWUpLEdlPWMoSWUpLHplPXUoUGUpLFZlPWMoUGUpLFdlPXUoTmUpLFllPWMoTmUpLHFlPXUoSGUpLEtlPWMoSGUpLFhlPXthOnZlLEE6VGUsYjpBZSxCOkNlLGM6bnVsbCxkOkwsZTpMLGY6SSxIOkQsSTp3LGo6TSxMOmssbTpQLE06TixwOk9lLFE6ZGUsczpfZSxTOkgsdTpGLFU6QixWOlUsdzpHLFc6eix4Om51bGwsWDpudWxsLHk6VixZOlcsWjpZLCIlIjpjZX0sJGU9e2E6U2UsQTpSZSxiOmplLEI6eGUsYzpudWxsLGQ6cSxlOnEsZjpKLEg6SyxJOlgsajokLEw6USxtOlosTTplZSxwOkxlLFE6ZGUsczpfZSxTOnRlLHU6bmUsVTpyZSxWOm9lLHc6c2UsVzppZSx4Om51bGwsWDpudWxsLHk6YWUsWTpsZSxaOnVlLCIlIjpjZX0sUWU9e2E6bCxBOm1lLGI6aGUsQjpnZSxjOmJlLGQ6eSxlOnksZjpTLEg6VCxJOlQsajp2LEw6TyxtOkUsTTpBLHA6YSxROmosczp4LFM6Qyx1Ol8sVTpwLFY6Zix3OmQsVzptLHg6RWUsWDp5ZSx5OmcsWTpoLFo6YiwiJSI6Un07cmV0dXJuIFhlLng9dCh3ZSxYZSksWGUuWD10KE1lLFhlKSxYZS5jPXQoRGUsWGUpLCRlLng9dCh3ZSwkZSksJGUuWD10KE1lLCRlKSwkZS5jPXQoRGUsJGUpLHtmb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIG49dChlKz0iIixYZSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbn0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKz0iIixyKTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIG49dChlKz0iIiwkZSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbn0sdXRjUGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLG8pO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHR9fX1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj1lPDA/Ii0iOiIiLG89KHI/LWU6ZSkrIiIscz1vLmxlbmd0aDtyZXR1cm4gcisoczxuP25ldyBBcnJheShuLXMrMSkuam9pbih0KStvOm8pfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUucmVwbGFjZShnZSwiXFwkJiIpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKGwpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgdD17fSxuPS0xLHI9ZS5sZW5ndGg7KytuPHI7KXRbZVtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiB0fWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuLG4rMSkpO3JldHVybiByPyhlLnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gXyhlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KGUudT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj1tZS5leGVjKHQuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8oZS5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuLG4rMikpO3JldHVybiByPyhlLlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbShlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoKGUsdCxuKXt2YXIgcj1tZS5leGVjKHQuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8oZS55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGcoZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuLG4rMikpO3JldHVybiByPyhlLnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiKGUsdCxuKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KGUuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRShlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geShlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj1tZS5leGVjKHQuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8oZS5tPTAsZS5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuLG4rMikpO3JldHVybiByPyhlLkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDKGUsdCxuKXt2YXIgcj1tZS5leGVjKHQuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8oZS5TPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE8oZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuLG4rMykpO3JldHVybiByPyhlLkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUyhlLHQsbil7dmFyIHI9bWUuZXhlYyh0LnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KGUuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKGUsdCxuKXt2YXIgcj1oZS5leGVjKHQuc2xpY2UobixuKzEpKTtyZXR1cm4gcj9uK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGooZSx0LG4pe3ZhciByPW1lLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4KGUsdCxuKXt2YXIgcj1tZS5leGVjKHQuc2xpY2UobikpO3JldHVybiByPyhlLlE9MWUzKityWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gYShlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gYShlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGEoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIE0oZSx0KXtyZXR1cm4gYSgxK3BlLmEuY291bnQoT2JqZWN0KHBlLkQpKGUpLGUpLHQsMyl9ZnVuY3Rpb24gayhlLHQpe3JldHVybiBhKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBJKGUsdCl7cmV0dXJuIGsoZSx0KSsiMDAwIn1mdW5jdGlvbiBQKGUsdCl7cmV0dXJuIGEoZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGEoZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIGEoZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBGKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuIGEocGUudC5jb3VudChPYmplY3QocGUuRCkoZSksZSksdCwyKX1mdW5jdGlvbiBVKGUsdCl7dmFyIG49ZS5nZXREYXkoKTtyZXR1cm4gZT1uPj00fHwwPT09bj9PYmplY3QocGUudikoZSk6cGUudi5jZWlsKGUpLGEocGUudi5jb3VudChPYmplY3QocGUuRCkoZSksZSkrKDQ9PT1PYmplY3QocGUuRCkoZSkuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiB6KGUsdCl7cmV0dXJuIGEocGUubC5jb3VudChPYmplY3QocGUuRCkoZSksZSksdCwyKX1mdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGEoZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFcoZSx0KXtyZXR1cm4gYShlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gWShlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK2EodC82MHwwLCIwIiwyKSthKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIHEoZSx0KXtyZXR1cm4gYShlLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIEsoZSx0KXtyZXR1cm4gYShlLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBYKGUsdCl7cmV0dXJuIGEoZS5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uICQoZSx0KXtyZXR1cm4gYSgxK3BlLkYuY291bnQoT2JqZWN0KHBlLl83KShlKSxlKSx0LDMpfWZ1bmN0aW9uIFEoZSx0KXtyZXR1cm4gYShlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gSihlLHQpe3JldHVybiBRKGUsdCkrIjAwMCJ9ZnVuY3Rpb24gWihlLHQpe3JldHVybiBhKGUuZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gZWUoZSx0KXtyZXR1cm4gYShlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHRlKGUsdCl7cmV0dXJuIGEoZS5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBuZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiAwPT09dD83OnR9ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gYShwZS5YLmNvdW50KE9iamVjdChwZS5fNykoZSksZSksdCwyKX1mdW5jdGlvbiBvZShlLHQpe3ZhciBuPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9bj49NHx8MD09PW4/T2JqZWN0KHBlLlopKGUpOnBlLlouY2VpbChlKSxhKHBlLlouY291bnQoT2JqZWN0KHBlLl83KShlKSxlKSsoND09PU9iamVjdChwZS5fNykoZSkuZ2V0VVRDRGF5KCkpLHQsMil9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gaWUoZSx0KXtyZXR1cm4gYShwZS5QLmNvdW50KE9iamVjdChwZS5fNykoZSksZSksdCwyKX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBhKGUuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiBhKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB1ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gY2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX10LmE9aTt2YXIgcGU9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanMiKSxmZT17Ii0iOiIiLF86IiAiLDA6IjAifSxtZT0vXlxzKlxkKy8saGU9L14lLyxnZT0vW1xcXiQqKz98W1xdKCkue31dL2d9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiKSxzPU9iamVjdChyLmEpKGZ1bmN0aW9uKGUpe2Uuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKm8uYykvby5hfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pO3QuYj1zO3ZhciBpPXMucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9MWUzLG89NmU0LHM9MzZlNSxpPTg2NGU1LGE9NjA0OGU1fSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIpLHM9T2JqZWN0KHIuYSkoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvLmQtZS5nZXRNaW51dGVzKCkqby5jKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpvLmIpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL28uYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pO3QuYT1zO3ZhciBpPXMucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIpO24uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taWxsaXNlY29uZC5qcyIpO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSksbi5kKHQsIkwiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJNIixmdW5jdGlvbigpe3JldHVybiBvLmJ9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiKTtuLmQodCwiciIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYn0pLG4uZCh0LCJWIixmdW5jdGlvbigpe3JldHVybiBzLmF9KSxuLmQodCwiVyIsZnVuY3Rpb24oKXtyZXR1cm4gcy5ifSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIik7bi5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBpLmJ9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIik7bi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBhLmJ9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5ifSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3dlZWsuanMiKTtuLmQodCwiQiIsZnVuY3Rpb24oKXtyZXR1cm4gdS5nfSksbi5kKHQsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuaH0pLG4uZCh0LCJ0IixmdW5jdGlvbigpe3JldHVybiB1Lmd9KSxuLmQodCwidSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5ofSksbi5kKHQsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuY30pLG4uZCh0LCJtIixmdW5jdGlvbigpe3JldHVybiB1LmR9KSxuLmQodCwieCIsZnVuY3Rpb24oKXtyZXR1cm4gdS5rfSksbi5kKHQsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIHUubH0pLG4uZCh0LCJ6IixmdW5jdGlvbigpe3JldHVybiB1Lm19KSxuLmQodCwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5ufSksbi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuaX0pLG4uZCh0LCJ3IixmdW5jdGlvbigpe3JldHVybiB1Lmp9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdS5hfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYn0pLG4uZCh0LCJwIixmdW5jdGlvbigpe3JldHVybiB1LmV9KSxuLmQodCwicSIsZnVuY3Rpb24oKXtyZXR1cm4gdS5mfSk7dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbW9udGguanMiKTtuLmQodCwibiIsZnVuY3Rpb24oKXtyZXR1cm4gYy5hfSksbi5kKHQsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGMuYn0pO3ZhciBkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiKTtuLmQodCwiRCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hfSksbi5kKHQsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYn0pO3ZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIpO24uZCh0LCJOIixmdW5jdGlvbigpe3JldHVybiBfLmF9KSxuLmQodCwiTyIsZnVuY3Rpb24oKXtyZXR1cm4gXy5ifSk7dmFyIHA9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjSG91ci5qcyIpO24uZCh0LCJKIixmdW5jdGlvbigpe3JldHVybiBwLmF9KSxuLmQodCwiSyIsZnVuY3Rpb24oKXtyZXR1cm4gcC5ifSk7dmFyIGY9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzIik7bi5kKHQsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuYX0pLG4uZCh0LCJHIixmdW5jdGlvbigpe3JldHVybiBmLmJ9KTt2YXIgbT1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIik7bi5kKHQsIl81IixmdW5jdGlvbigpe3JldHVybiBtLmd9KSxuLmQodCwiXzYiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uaH0pLG4uZCh0LCJYIixmdW5jdGlvbigpe3JldHVybiBtLmd9KSxuLmQodCwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ofSksbi5kKHQsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uY30pLG4uZCh0LCJRIixmdW5jdGlvbigpe3JldHVybiBtLmR9KSxuLmQodCwiXzEiLGZ1bmN0aW9uKCl7cmV0dXJuIG0ua30pLG4uZCh0LCJfMiIsZnVuY3Rpb24oKXtyZXR1cm4gbS5sfSksbi5kKHQsIl8zIixmdW5jdGlvbigpe3JldHVybiBtLm19KSxuLmQodCwiXzQiLGZ1bmN0aW9uKCl7cmV0dXJuIG0ubn0pLG4uZCh0LCJaIixmdW5jdGlvbigpe3JldHVybiBtLml9KSxuLmQodCwiXzAiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uan0pLG4uZCh0LCJIIixmdW5jdGlvbigpe3JldHVybiBtLmF9KSxuLmQodCwiSSIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ifSksbi5kKHQsIlQiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uZX0pLG4uZCh0LCJVIixmdW5jdGlvbigpe3JldHVybiBtLmZ9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNb250aC5qcyIpO24uZCh0LCJSIixmdW5jdGlvbigpe3JldHVybiBoLmF9KSxuLmQodCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gaC5ifSk7dmFyIGc9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjWWVhci5qcyIpO24uZCh0LCJfNyIsZnVuY3Rpb24oKXtyZXR1cm4gZy5hfSksbi5kKHQsIl84IixmdW5jdGlvbigpe3JldHVybiBnLmJ9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4saSl7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSksdH1yZXR1cm4gYS5mbG9vcj1hLGEuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gZShuPW5ldyBEYXRlKG4tMSkpLHQobiwxKSxlKG4pLG59LGEucm91bmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YShlKSxuPWEuY2VpbChlKTtyZXR1cm4gZS10PG4tZT90Om59LGEub2Zmc2V0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLGV9LGEucmFuZ2U9ZnVuY3Rpb24obixyLG8pe3ZhciBzLGk9W107aWYobj1hLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48ciYmbz4wKSlyZXR1cm4gaTtkb3tpLnB1c2gocz1uZXcgRGF0ZSgrbikpLHQobixvKSxlKG4pfXdoaWxlKHM8biYmbjxyKTtyZXR1cm4gaX0sYS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHIoZnVuY3Rpb24odCl7aWYodD49dClmb3IoO2UodCksIW4odCk7KXQuc2V0VGltZSh0LTEpfSxmdW5jdGlvbihlLHIpe2lmKGU+PWUpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO3QoZSwtMSksIW4oZSk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO3QoZSwxKSwhbihlKTspO30pfSxuJiYoYS5jb3VudD1mdW5jdGlvbih0LHIpe3JldHVybiBvLnNldFRpbWUoK3QpLHMuc2V0VGltZSgrciksZShvKSxlKHMpLE1hdGguZmxvb3IobihvLHMpKX0sYS5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLGlzRmluaXRlKGUpJiZlPjA/ZT4xP2EuZmlsdGVyKGk/ZnVuY3Rpb24odCl7cmV0dXJuIGkodCklZT09MH06ZnVuY3Rpb24odCl7cmV0dXJuIGEuY291bnQoMCx0KSVlPT0wfSk6YTpudWxsfSksYX10LmE9cjt2YXIgbz1uZXcgRGF0ZSxzPW5ldyBEYXRlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIpLG89T2JqZWN0KHIuYSkoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTtvLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksaXNGaW5pdGUoZSkmJmU+MD9lPjE/T2JqZWN0KHIuYSkoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9lKSplKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbiplKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9lfSk6bzpudWxsfSx0LmE9bzt2YXIgcz1vLnJhbmdlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIikscz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKm8uZCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqby5jKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9vLmN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pO3QuYT1zO3ZhciBpPXMucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldERhdGUoMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRNb250aCgpLWUuZ2V0TW9udGgoKSsxMioodC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KTt0LmE9bzt2YXIgcz1vLnJhbmdlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIikscz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpvLmQpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL28uZH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDU2Vjb25kcygpfSk7dC5hPXM7dmFyIGk9cy5yYW5nZX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIpLHM9T2JqZWN0KHIuYSkoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvby5hfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pO3QuYT1zO3ZhciBpPXMucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIikscz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Km8uYil9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvby5ifSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSk7dC5hPXM7dmFyIGk9cy5yYW5nZX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIpLHM9T2JqZWN0KHIuYSkoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqby5jKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9vLmN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX0pO3QuYT1zO3ZhciBpPXMucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNb250aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsxMioodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KTt0LmE9bzt2YXIgcz1vLnJhbmdlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjV2Vlay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qoby5hKShmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSs3KnQpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3MuZX0pfW4uZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQodCwiayIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZCh0LCJtIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKHQsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZCh0LCJsIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQodCwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiKSxpPXIoMCksYT1yKDEpLGw9cigyKSx1PXIoMyksYz1yKDQpLGQ9cig1KSxfPXIoNikscD1pLnJhbmdlLGY9YS5yYW5nZSxtPWwucmFuZ2UsaD11LnJhbmdlLGc9Yy5yYW5nZSxiPWQucmFuZ2UsRT1fLnJhbmdlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjWWVhci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiksbz1PYmplY3Qoci5hKShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO28uZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSkmJmU+MD9PYmplY3Qoci5hKShmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24qZSl9KTpudWxsfSx0LmE9bzt2YXIgcz1vLnJhbmdlfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qoby5hKShmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSs3KnQpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKnMuYykvcy5lfSl9bi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKHQsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQodCwibiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIpLGk9cigwKSxhPXIoMSksbD1yKDIpLHU9cigzKSxjPXIoNCksZD1yKDUpLF89cig2KSxwPWkucmFuZ2UsZj1hLnJhbmdlLG09bC5yYW5nZSxoPXUucmFuZ2UsZz1jLnJhbmdlLGI9ZC5yYW5nZSxFPV8ucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiKSxvPU9iamVjdChyLmEpKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7by5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKSYmZT4wP09iamVjdChyLmEpKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbiplKX0pOm51bGx9LHQuYT1vO3ZhciBzPW8ucmFuZ2V9LCIuL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIik7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiByLmN9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5kfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2ludGVydmFsLmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pfSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2ludGVydmFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIpO3QuYT1mdW5jdGlvbihlLHQsbil7dmFyIG89bmV3IHIuYSxzPXQ7cmV0dXJuIG51bGw9PXQ/KG8ucmVzdGFydChlLHQsbiksbyk6KHQ9K3Qsbj1udWxsPT1uP09iamVjdChyLmIpKCk6K24sby5yZXN0YXJ0KGZ1bmN0aW9uIHIoaSl7aSs9cyxvLnJlc3RhcnQocixzKz10LG4pLGUoaSl9LHQsbiksbyl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIik7dC5hPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1uZXcgci5hO3JldHVybiB0PW51bGw9PXQ/MDordCxvLnJlc3RhcnQoZnVuY3Rpb24obil7by5zdG9wKCksZShuK3QpfSx0LG4pLG99fSwiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gRXx8KFQobyksRT12Lm5vdygpK3kpfWZ1bmN0aW9uIG8oKXtFPTB9ZnVuY3Rpb24gcygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9bmV3IHM7cmV0dXJuIHIucmVzdGFydChlLHQsbikscn1mdW5jdGlvbiBhKCl7cigpLCsrZjtmb3IodmFyIGUsdD1fO3Q7KShlPUUtdC5fdGltZSk+PTAmJnQuX2NhbGwuY2FsbChudWxsLGUpLHQ9dC5fbmV4dDstLWZ9ZnVuY3Rpb24gbCgpe0U9KGI9di5ub3coKSkreSxmPW09MDt0cnl7YSgpfWZpbmFsbHl7Zj0wLGMoKSxFPTB9fWZ1bmN0aW9uIHUoKXt2YXIgZT12Lm5vdygpLHQ9ZS1iO3Q+ZyYmKHktPXQsYj1lKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciBlLHQsbj1fLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksZT1uLG49bi5fbmV4dCk6KHQ9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj1lP2UuX25leHQ9dDpfPXQpO3A9ZSxkKHIpfWZ1bmN0aW9uIGQoZSl7aWYoIWYpe20mJihtPWNsZWFyVGltZW91dChtKSk7ZS1FPjI0PyhlPDEvMCYmKG09c2V0VGltZW91dChsLGUtdi5ub3coKS15KSksaCYmKGg9Y2xlYXJJbnRlcnZhbChoKSkpOihofHwoYj12Lm5vdygpLGg9c2V0SW50ZXJ2YWwodSxnKSksZj0xLFQobCkpfX10LmI9cix0LmE9cyx0LmM9aSx0LmQ9YTt2YXIgXyxwLGY9MCxtPTAsaD0wLGc9MWUzLGI9MCxFPTAseT0wLHY9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsVD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzLnByb3RvdHlwZT1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/cigpOituKSsobnVsbD09dD8wOit0KSx0aGlzLl9uZXh0fHxwPT09dGhpc3x8KHA/cC5fbmV4dD10aGlzOl89dGhpcyxwPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPW4sZCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxkKCkpfX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9hY3RpdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpLHM9W251bGxdO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLGksYT1lLl9fdHJhbnNpdGlvbjtpZihhKXt0PW51bGw9PXQ/bnVsbDp0KyIiO2ZvcihpIGluIGEpaWYoKG49YVtpXSkuc3RhdGU+by5jJiZuLm5hbWU9PT10KXJldHVybiBuZXcgci5hKFtbZV1dLHMsdCwraSl9cmV0dXJuIG51bGx9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KG4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiKSk7bi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2FjdGl2ZS5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSl9LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuLG8scyxpPWUuX190cmFuc2l0aW9uLGE9ITA7aWYoaSl7dD1udWxsPT10P251bGw6dCsiIjtmb3IocyBpbiBpKShuPWlbc10pLm5hbWU9PT10PyhvPW4uc3RhdGU+ci5kJiZuLnN0YXRlPHIuYixuLnN0YXRlPXIuYSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwobz8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgaVtzXSk6YT0hMTthJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW50ZXJydXB0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIpO3Iuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQ9by5hLHIuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uPXMuYX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtPYmplY3Qoci5hKSh0aGlzLGUpfSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbjshKG49ZS5fX3RyYW5zaXRpb24pfHwhKG49blt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBsLnRpbWU9T2JqZWN0KGEuYikoKSxsO3JldHVybiBufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanMiKSxsPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTppLm99O3QuYT1mdW5jdGlvbihlKXt2YXIgdCxuO2UgaW5zdGFuY2VvZiBvLmE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1PYmplY3Qoby5jKSgpLChuPWwpLnRpbWU9T2JqZWN0KGEuYikoKSxlPW51bGw9PWU/bnVsbDplKyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHU9aS5sZW5ndGgsYz0wO2M8dTsrK2MpZm9yKHZhciBkLF89aVtjXSxwPV8ubGVuZ3RoLGY9MDtmPHA7KytmKShkPV9bZl0pJiZPYmplY3Qocy5lKShkLGUsdCxmLF8sbnx8cihkLHQpKTtyZXR1cm4gbmV3IG8uYShpLHRoaXMuX3BhcmVudHMsZSx0KX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByLG8scz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBpPT09cz9udWxsOmk9PT1yP286bz10KHI9aSxuKX19ZnVuY3Rpb24gaShlLHQsbil7dmFyIHIsbyxzPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBpPT09cz9udWxsOmk9PT1yP286bz10KHI9aSxuKX19ZnVuY3Rpb24gYShlLHQsbil7dmFyIHIsbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBpLGEsbD1uKHRoaXMpO3JldHVybiBudWxsPT1sP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGk9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT1sKyIiLGk9PT1hP251bGw6aT09PXImJmE9PT1vP3M6KG89YSxzPXQocj1pLGwpKSl9fWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByLG8scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaSxhLGw9bih0aGlzKTtyZXR1cm4gbnVsbD09bD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooaT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksYT1sKyIiLGk9PT1hP251bGw6aT09PXImJmE9PT1vP3M6KG89YSxzPXQocj1pLGwpKSl9fXZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdChjLm5hbWVzcGFjZSkoZSkscD0idHJhbnNmb3JtIj09PW4/dS53Ol8uYTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSwiZnVuY3Rpb24iPT10eXBlb2YgdD8obi5sb2NhbD9sOmEpKG4scCxPYmplY3QoZC5iKSh0aGlzLCJhdHRyLiIrZSx0KSk6bnVsbD09dD8obi5sb2NhbD9vOnIpKG4pOihuLmxvY2FsP2k6cykobixwLHQpKX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKGUsdChuKSl9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdChuKSl9fWZ1bmN0aW9uIHMoZSx0KXtmdW5jdGlvbiBuKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4hPT1zJiYocj0ocz1uKSYmbyhlLG4pKSxyfXZhciByLHM7cmV0dXJuIG4uX3ZhbHVlPXQsbn1mdW5jdGlvbiBpKGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuIT09cyYmKG89KHM9bikmJnIoZSxuKSksb312YXIgbyxzO3JldHVybiBuLl92YWx1ZT10LG59dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpO3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9T2JqZWN0KGEubmFtZXNwYWNlKShlKTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP3M6aSkocix0KSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7T2JqZWN0KHMuZykodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09iamVjdChzLmcpKHRoaXMsZSkuZGVsYXk9dH19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3I6bykodCxlKSk6T2JqZWN0KHMuZikodGhpcy5ub2RlKCksdCkuZGVsYXl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7T2JqZWN0KHMuaCkodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09iamVjdChzLmgpKHRoaXMsZSkuZHVyYXRpb249dH19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3I6bykodCxlKSk6T2JqZWN0KHMuZikodGhpcy5ub2RlKCksdCkuZHVyYXRpb259fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7T2JqZWN0KG8uaCkodGhpcyxlKS5lYXNlPXR9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiKTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHIodCxlKSk6T2JqZWN0KG8uZikodGhpcy5ub2RlKCksdCkuZWFzZX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIik7dC5hPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPXRoaXMsbz1uLl9pZCxzPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihpLGEpe3ZhciBsPXt2YWx1ZTphfSx1PXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tcyYmaSgpfX07bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49T2JqZWN0KHIuaCkodGhpcyxvKSxzPW4ub247cyE9PWUmJih0PShlPXMpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gobCksdC5fLmludGVycnVwdC5wdXNoKGwpLHQuXy5lbmQucHVzaCh1KSksbi5vbj10fSl9KX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKGUpeyJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT1PYmplY3Qoci5tYXRjaGVyKShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPXQubGVuZ3RoLHM9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxsPXRbaV0sdT1sLmxlbmd0aCxjPXNbaV09W10sZD0wO2Q8dTsrK2QpKGE9bFtkXSkmJmUuY2FsbChhLGEuX19kYXRhX18sZCxsKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgby5hKHMsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIE9iamVjdChpLnNlbGVjdGlvbikoKS50cmFuc2l0aW9uKGUpfWZ1bmN0aW9uIHMoKXtyZXR1cm4rK099dC5hPXIsdC5iPW8sdC5jPXM7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIpLGI9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzIiksVD1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiKSxBPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzIiksTz0wLFM9aS5zZWxlY3Rpb24ucHJvdG90eXBlO3IucHJvdG90eXBlPW8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLHNlbGVjdDpoLmEsc2VsZWN0QWxsOmcuYSxmaWx0ZXI6Xy5hLG1lcmdlOnAuYSxzZWxlY3Rpb246Yi5hLHRyYW5zaXRpb246VC5hLGNhbGw6Uy5jYWxsLG5vZGVzOlMubm9kZXMsbm9kZTpTLm5vZGUsc2l6ZTpTLnNpemUsZW1wdHk6Uy5lbXB0eSxlYWNoOlMuZWFjaCxvbjpmLmEsYXR0cjphLmEsYXR0clR3ZWVuOmwuYSxzdHlsZTpFLmEsc3R5bGVUd2Vlbjp5LmEsdGV4dDp2LmEscmVtb3ZlOm0uYSx0d2VlbjpBLmEsZGVsYXk6dS5hLGR1cmF0aW9uOmMuYSxlYXNlOmQuYSxlbmQ6Qy5hfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiB0P28ubzp0IGluc3RhbmNlb2Ygci5hP28ucToobj1PYmplY3Qoci5hKSh0KSk/KHQ9bixvLnEpOm8udSkoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiKTt0LmE9ZnVuY3Rpb24oZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPWUuX2dyb3VwcyxvPXQubGVuZ3RoLHM9bi5sZW5ndGgsaT1NYXRoLm1pbihvLHMpLGE9bmV3IEFycmF5KG8pLGw9MDtsPGk7KytsKWZvcih2YXIgdSxjPXRbbF0sZD1uW2xdLF89Yy5sZW5ndGgscD1hW2xdPW5ldyBBcnJheShfKSxmPTA7ZjxfOysrZikodT1jW2ZdfHxkW2ZdKSYmKHBbZl09dSk7Zm9yKDtsPG87KytsKWFbbF09dFtsXTtyZXR1cm4gbmV3IHIuYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybihlKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHQ+PTAmJihlPWUuc2xpY2UoMCx0KSksIWV8fCJzdGFydCI9PT1lfSl9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIG8saSxhPXIodCk/cy5nOnMuaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1hKHRoaXMsZSkscz1yLm9uO3MhPT1vJiYoaT0obz1zKS5jb3B5KCkpLm9uKHQsbiksci5vbj1pfX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIik7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9PYmplY3Qocy5mKSh0aGlzLm5vZGUoKSxuKS5vbi5vbihlKTp0aGlzLmVhY2gobyhuLGUsdCkpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vcmVtb3ZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fXQuYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixyKHRoaXMuX2lkKSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49cyhlLHQpO2lmKG4uc3RhdGU+ZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1zKGUsdCk7aWYobi5zdGF0ZT5mKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1lLl9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBpKGUsdCxuKXtmdW5jdGlvbiByKGUpe24uc3RhdGU9XyxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9ZSYmbyhlLW4uZGVsYXkpfWZ1bmN0aW9uIG8ocil7dmFyIGMsZCxoLGI7aWYobi5zdGF0ZSE9PV8pcmV0dXJuIGkoKTtmb3IoYyBpbiB1KWlmKGI9dVtjXSxiLm5hbWU9PT1uLm5hbWUpe2lmKGIuc3RhdGU9PT1mKXJldHVybiBPYmplY3QobC5jKShvKTtiLnN0YXRlPT09bT8oYi5zdGF0ZT1nLGIudGltZXIuc3RvcCgpLGIub24uY2FsbCgiaW50ZXJydXB0IixlLGUuX19kYXRhX18sYi5pbmRleCxiLmdyb3VwKSxkZWxldGUgdVtjXSk6K2M8dCYmKGIuc3RhdGU9ZyxiLnRpbWVyLnN0b3AoKSxiLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLGIuaW5kZXgsYi5ncm91cCksZGVsZXRlIHVbY10pfWlmKE9iamVjdChsLmMpKGZ1bmN0aW9uKCl7bi5zdGF0ZT09PWYmJihuLnN0YXRlPW0sbi50aW1lci5yZXN0YXJ0KHMsbi5kZWxheSxuLnRpbWUpLHMocikpfSksbi5zdGF0ZT1wLG4ub24uY2FsbCgic3RhcnQiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLG4uc3RhdGU9PT1wKXtmb3Iobi5zdGF0ZT1mLGE9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGM9MCxkPS0xO2M8aDsrK2MpKGI9bi50d2VlbltjXS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGFbKytkXT1iKTthLmxlbmd0aD1kKzF9fWZ1bmN0aW9uIHModCl7Zm9yKHZhciByPXQ8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLHQvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChpKSxuLnN0YXRlPWgsMSksbz0tMSxzPWEubGVuZ3RoOysrbzxzOylhW29dLmNhbGwoZSxyKTtuLnN0YXRlPT09aCYmKG4ub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxpKCkpfWZ1bmN0aW9uIGkoKXtuLnN0YXRlPWcsbi50aW1lci5zdG9wKCksZGVsZXRlIHVbdF07Zm9yKHZhciByIGluIHUpcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn12YXIgYSx1PWUuX190cmFuc2l0aW9uO3VbdF09bixuLnRpbWVyPU9iamVjdChsLmQpKHIsMCxuLnRpbWUpfW4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBnfSksdC5nPXIsdC5oPW8sdC5mPXM7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanMiKSx1PU9iamVjdChhLmEpKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGM9W10sZD0wLF89MSxwPTIsZj0zLG09NCxoPTUsZz02O3QuZT1mdW5jdGlvbihlLHQsbixyLG8scyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIGUuX190cmFuc2l0aW9uPXt9O2koZSxuLHtuYW1lOnQsaW5kZXg6cixncm91cDpvLG9uOnUsdHdlZW46Yyx0aW1lOnMudGltZSxkZWxheTpzLmRlbGF5LGR1cmF0aW9uOnMuZHVyYXRpb24sZWFzZTpzLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpkfSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChyLnNlbGVjdG9yKShlKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPWkubGVuZ3RoLGw9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KWZvcih2YXIgYyxkLF89aVt1XSxwPV8ubGVuZ3RoLGY9bFt1XT1uZXcgQXJyYXkocCksbT0wO208cDsrK20pKGM9X1ttXSkmJihkPWUuY2FsbChjLGMuX19kYXRhX18sbSxfKSkmJigiX19kYXRhX18iaW4gYyYmKGQuX19kYXRhX189Yy5fX2RhdGFfXyksZlttXT1kLE9iamVjdChzLmUpKGZbbV0sdCxuLG0sZixPYmplY3Qocy5mKShjLG4pKSk7cmV0dXJuIG5ldyBvLmEobCx0aGlzLl9wYXJlbnRzLHQsbil9fSwiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3RBbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIpO3QuYT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPU9iamVjdChyLnNlbGVjdG9yQWxsKShlKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPWkubGVuZ3RoLGw9W10sdT1bXSxjPTA7YzxhOysrYylmb3IodmFyIGQsXz1pW2NdLHA9Xy5sZW5ndGgsZj0wO2Y8cDsrK2YpaWYoZD1fW2ZdKXtmb3IodmFyIG0saD1lLmNhbGwoZCxkLl9fZGF0YV9fLGYsXyksZz1PYmplY3Qocy5mKShkLG4pLGI9MCxFPWgubGVuZ3RoO2I8RTsrK2IpKG09aFtiXSkmJk9iamVjdChzLmUpKG0sdCxuLGIsaCxnKTtsLnB1c2goaCksdS5wdXNoKGQpfXJldHVybiBuZXcgby5hKGwsdSx0LG4pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxvPXIuc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcjt0LmE9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8odGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1PYmplY3QodS5zdHlsZSkodGhpcyxlKSxpPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLE9iamVjdCh1LnN0eWxlKSh0aGlzLGUpKTtyZXR1cm4gcz09PWk/bnVsbDpzPT09biYmaT09PXI/bzpvPXQobj1zLHI9aSl9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHIsbyxzPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2JqZWN0KHUuc3R5bGUpKHRoaXMsZSk7cmV0dXJuIGk9PT1zP251bGw6aT09PXI/bzpvPXQocj1pLG4pfX1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgcixvLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2JqZWN0KHUuc3R5bGUpKHRoaXMsZSksYT1uKHRoaXMpLGw9YSsiIjtyZXR1cm4gbnVsbD09YSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksbD1hPU9iamVjdCh1LnN0eWxlKSh0aGlzLGUpKSxpPT09bD9udWxsOmk9PT1yJiZsPT09bz9zOihvPWwscz10KHI9aSxhKSl9fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbixyLHMsaSxhPSJzdHlsZS4iK3QsbD0iZW5kLiIrYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1PYmplY3QoYy5oKSh0aGlzLGUpLGQ9dS5vbixfPW51bGw9PXUudmFsdWVbYV0/aXx8KGk9byh0KSk6dm9pZCAwO2Q9PT1uJiZzPT09X3x8KHI9KG49ZCkuY29weSgpKS5vbihsLHM9XyksdS5vbj1yfX12YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiKTt0LmE9ZnVuY3Rpb24oZSx0LG4pe3ZhciB1PSJ0cmFuc2Zvcm0iPT0oZSs9IiIpP2wudjpfLmE7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKGUscihlLHUpKS5vbigiZW5kLnN0eWxlLiIrZSxvKGUpKToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLnN0eWxlVHdlZW4oZSxpKGUsdSxPYmplY3QoZC5iKSh0aGlzLCJzdHlsZS4iK2UsdCkpKS5lYWNoKGEodGhpcy5faWQsZSkpOnRoaXMuc3R5bGVUd2VlbihlLHMoZSx1LHQpLG4pLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQociksbil9fWZ1bmN0aW9uIG8oZSx0LG4pe2Z1bmN0aW9uIG8oKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihzPShpPW8pJiZyKGUsbyxuKSksc312YXIgcyxpO3JldHVybiBvLl92YWx1ZT10LG99dC5hPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLG8oZSx0LG51bGw9PW4/IiI6bikpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3R3ZWVuLmpzIik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgZT9vKE9iamVjdChzLmIpKHRoaXMsInRleHQiLGUpKTpyKG51bGw9PWU/IiI6ZSsiIikpfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIik7dC5hPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxuPU9iamVjdChyLmMpKCkscz10aGlzLl9ncm91cHMsaT1zLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIGwsdT1zW2FdLGM9dS5sZW5ndGgsZD0wO2Q8YzsrK2QpaWYobD11W2RdKXt2YXIgXz1PYmplY3Qoby5mKShsLHQpO09iamVjdChvLmUpKGwsZSxuLGQsdSx7dGltZTpfLnRpbWUrXy5kZWxheStfLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Xy5kdXJhdGlvbixlYXNlOl8uZWFzZX0pfXJldHVybiBuZXcgci5hKHMsdGhpcy5fcGFyZW50cyxlLG4pfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2JqZWN0KGkuaCkodGhpcyxlKSxzPW8udHdlZW47aWYocyE9PW4pe3I9bj1zO2Zvcih2YXIgYT0wLGw9ci5sZW5ndGg7YTxsOysrYSlpZihyW2FdLm5hbWU9PT10KXtyPXIuc2xpY2UoKSxyLnNwbGljZShhLDEpO2JyZWFrfX1vLnR3ZWVuPXJ9fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByLG87aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPU9iamVjdChpLmgpKHRoaXMsZSksYT1zLnR3ZWVuO2lmKGEhPT1yKXtvPShyPWEpLnNsaWNlKCk7Zm9yKHZhciBsPXtuYW1lOnQsdmFsdWU6bn0sdT0wLGM9by5sZW5ndGg7dTxjOysrdSlpZihvW3VdLm5hbWU9PT10KXtvW3VdPWw7YnJlYWt9dT09PWMmJm8ucHVzaChsKX1zLnR3ZWVuPW99fWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QoaS5oKSh0aGlzLHIpOyhlLnZhbHVlfHwoZS52YWx1ZT17fSkpW3RdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpLmYpKGUscikudmFsdWVbdF19fXQuYj1zO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiKTt0LmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcyxhPU9iamVjdChpLmYpKHRoaXMubm9kZSgpLG4pLnR3ZWVuLGw9MCx1PWEubGVuZ3RoO2w8dTsrK2wpaWYoKHM9YVtsXSkubmFtZT09PWUpcmV0dXJuIHMudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9yOm8pKG4sZSx0KSl9fSwiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvQmVhY2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe09iamVjdChjLmEpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBvKGUpe3ZhciB0PW0ucG9wKCl8fG5ldyByO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIHMoZSl7T2JqZWN0KF8uYikoZSksZi5hLnJlbW92ZShlKSxtLnB1c2goZSksT2JqZWN0KGMuYSkoZSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLmNpcmNsZSxuPXQueCxyPXQuY3ksbz1bbixyXSxpPWUuUCxhPWUuTixsPVtlXTtzKGUpO2Zvcih2YXIgdT1pO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPGYuZiYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Zi5mOylpPXUuUCxsLnVuc2hpZnQodSkscyh1KSx1PWk7bC51bnNoaWZ0KHUpLE9iamVjdChfLmIpKHUpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhuLWMuY2lyY2xlLngpPGYuZiYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8Zi5mOylhPWMuTixsLnB1c2goYykscyhjKSxjPWE7bC5wdXNoKGMpLE9iamVjdChfLmIpKGMpO3ZhciBkLG09bC5sZW5ndGg7Zm9yKGQ9MTtkPG07KytkKWM9bFtkXSx1PWxbZC0xXSxPYmplY3QocC5kKShjLmVkZ2UsdS5zaXRlLGMuc2l0ZSxvKTt1PWxbMF0sYz1sW20tMV0sYy5lZGdlPU9iamVjdChwLmMpKHUuc2l0ZSxjLnNpdGUsbnVsbCxvKSxPYmplY3QoXy5hKSh1KSxPYmplY3QoXy5hKShjKX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdCxuLHIscyxpPWVbMF0sYT1lWzFdLGM9Zi5hLl87YzspaWYoKHI9bChjLGEpLWkpPmYuZiljPWMuTDtlbHNle2lmKCEoKHM9aS11KGMsYSkpPmYuZikpe3I+LWYuZj8odD1jLlAsbj1jKTpzPi1mLmY/KHQ9YyxuPWMuTik6dD1uPWM7YnJlYWt9aWYoIWMuUil7dD1jO2JyZWFrfWM9Yy5SfU9iamVjdChkLmMpKGUpO3ZhciBtPW8oZSk7aWYoZi5hLmluc2VydCh0LG0pLHR8fG4pe2lmKHQ9PT1uKXJldHVybiBPYmplY3QoXy5iKSh0KSxuPW8odC5zaXRlKSxmLmEuaW5zZXJ0KG0sbiksbS5lZGdlPW4uZWRnZT1PYmplY3QocC5jKSh0LnNpdGUsbS5zaXRlKSxPYmplY3QoXy5hKSh0KSx2b2lkIE9iamVjdChfLmEpKG4pO2lmKCFuKXJldHVybiB2b2lkKG0uZWRnZT1PYmplY3QocC5jKSh0LnNpdGUsbS5zaXRlKSk7T2JqZWN0KF8uYikodCksT2JqZWN0KF8uYikobik7dmFyIGg9dC5zaXRlLGc9aFswXSxiPWhbMV0sRT1lWzBdLWcseT1lWzFdLWIsdj1uLnNpdGUsVD12WzBdLWcsQT12WzFdLWIsQz0yKihFKkEteSpUKSxPPUUqRSt5KnksUz1UKlQrQSpBLFI9WyhBKk8teSpTKS9DK2csKEUqUy1UKk8pL0MrYl07T2JqZWN0KHAuZCkobi5lZGdlLGgsdixSKSxtLmVkZ2U9T2JqZWN0KHAuYykoaCxlLG51bGwsUiksbi5lZGdlPU9iamVjdChwLmMpKGUsdixudWxsLFIpLE9iamVjdChfLmEpKHQpLE9iamVjdChfLmEpKG4pfX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZS5zaXRlLHI9blswXSxvPW5bMV0scz1vLXQ7aWYoIXMpcmV0dXJuIHI7dmFyIGk9ZS5QO2lmKCFpKXJldHVybi0xLzA7bj1pLnNpdGU7dmFyIGE9blswXSxsPW5bMV0sdT1sLXQ7aWYoIXUpcmV0dXJuIGE7dmFyIGM9YS1yLGQ9MS9zLTEvdSxfPWMvdTtyZXR1cm4gZD8oLV8rTWF0aC5zcXJ0KF8qXy0yKmQqKGMqYy8oLTIqdSktbCt1LzIrby1zLzIpKSkvZCtyOihyK2EpLzJ9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWUuTjtpZihuKXJldHVybiBsKG4sdCk7dmFyIHI9ZS5zaXRlO3JldHVybiByWzFdPT09dD9yWzBdOjEvMH10LmI9aSx0LmE9YTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9SZWRCbGFja1RyZWUuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0NlbGwuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0NpcmNsZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRWRnZS5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRGlhZ3JhbS5qcyIpLG09W119LCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DZWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGMuYltlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUuc2l0ZSxyPXQubGVmdCxvPXQucmlnaHQ7cmV0dXJuIG49PT1vJiYobz1yLHI9biksbz9NYXRoLmF0YW4yKG9bMV0tclsxXSxvWzBdLXJbMF0pOihuPT09cj8ocj10WzFdLG89dFswXSk6KHI9dFswXSxvPXRbMV0pLE1hdGguYXRhbjIoclswXS1vWzBdLG9bMV0tclsxXSkpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gdFsrKHQubGVmdD09PWUuc2l0ZSldfWZ1bmN0aW9uIGEoKXtmb3IodmFyIGUsdCxuLHIscz0wLGk9Yy5iLmxlbmd0aDtzPGk7KytzKWlmKChlPWMuYltzXSkmJihyPSh0PWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkociksbD1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWFbbl09bixsW25dPW8oZSxjLmVbdFtuXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbFt0XS1sW2VdfSksbj0wO248cjsrK24pbFtuXT10W2Fbbl1dO2ZvcihuPTA7bjxyOysrbil0W25dPWxbbl19fWZ1bmN0aW9uIGwoZSx0LG4scil7dmFyIG8sYSxsLGQsXyxwLGYsbSxoLGcsYixFLHk9Yy5iLmxlbmd0aCx2PSEwO2ZvcihvPTA7bzx5OysrbylpZihhPWMuYltvXSl7Zm9yKGw9YS5zaXRlLF89YS5oYWxmZWRnZXMsZD1fLmxlbmd0aDtkLS07KWMuZVtfW2RdXXx8Xy5zcGxpY2UoZCwxKTtmb3IoZD0wLHA9Xy5sZW5ndGg7ZDxwOylnPWkoYSxjLmVbX1tkXV0pLGI9Z1swXSxFPWdbMV0sZj1zKGEsYy5lW19bKytkJXBdXSksbT1mWzBdLGg9ZlsxXSwoTWF0aC5hYnMoYi1tKT5jLmZ8fE1hdGguYWJzKEUtaCk+Yy5mKSYmKF8uc3BsaWNlKGQsMCxjLmUucHVzaChPYmplY3QodS5iKShsLGcsTWF0aC5hYnMoYi1lKTxjLmYmJnItRT5jLmY/W2UsTWF0aC5hYnMobS1lKTxjLmY/aDpyXTpNYXRoLmFicyhFLXIpPGMuZiYmbi1iPmMuZj9bTWF0aC5hYnMoaC1yKTxjLmY/bTpuLHJdOk1hdGguYWJzKGItbik8Yy5mJiZFLXQ+Yy5mP1tuLE1hdGguYWJzKG0tbik8Yy5mP2g6dF06TWF0aC5hYnMoRS10KTxjLmYmJmItZT5jLmY/W01hdGguYWJzKGgtdCk8Yy5mP206ZSx0XTpudWxsKSktMSksKytwKTtwJiYodj0hMSl9aWYodil7dmFyIFQsQSxDLE89MS8wO2ZvcihvPTAsdj1udWxsO288eTsrK28pKGE9Yy5iW29dKSYmKGw9YS5zaXRlLFQ9bFswXS1lLEE9bFsxXS10LChDPVQqVCtBKkEpPE8mJihPPUMsdj1hKSk7aWYodil7dmFyIFM9W2UsdF0sUj1bZSxyXSxqPVtuLHJdLHg9W24sdF07di5oYWxmZWRnZXMucHVzaChjLmUucHVzaChPYmplY3QodS5iKShsPXYuc2l0ZSxTLFIpKS0xLGMuZS5wdXNoKE9iamVjdCh1LmIpKGwsUixqKSktMSxjLmUucHVzaChPYmplY3QodS5iKShsLGoseCkpLTEsYy5lLnB1c2goT2JqZWN0KHUuYikobCx4LFMpKS0xKX19Zm9yKG89MDtvPHk7KytvKShhPWMuYltvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBjLmJbb10pfXQuYz1yLHQuYT1zLHQuZD1hLHQuYj1sO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0VkZ2UuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0RpYWdyYW0uanMiKX0sIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0NpcmNsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7T2JqZWN0KGEuYSkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5QLG49ZS5OO2lmKHQmJm4pe3ZhciBvPXQuc2l0ZSxzPWUuc2l0ZSxhPW4uc2l0ZTtpZihvIT09YSl7dmFyIGM9c1swXSxkPXNbMV0sXz1vWzBdLWMscD1vWzFdLWQsZj1hWzBdLWMsbT1hWzFdLWQsaD0yKihfKm0tcCpmKTtpZighKGg+PS1sLmcpKXt2YXIgZz1fKl8rcCpwLGI9ZipmK20qbSxFPShtKmctcCpiKS9oLHk9KF8qYi1mKmcpL2gsdj11LnBvcCgpfHxuZXcgcjt2LmFyYz1lLHYuc2l0ZT1zLHYueD1FK2Msdi55PSh2LmN5PXkrZCkrTWF0aC5zcXJ0KEUqRSt5KnkpLGUuY2lyY2xlPXY7Zm9yKHZhciBUPW51bGwsQT1sLmMuXztBOylpZih2Lnk8QS55fHx2Lnk9PT1BLnkmJnYueDw9QS54KXtpZighQS5MKXtUPUEuUDticmVha31BPUEuTH1lbHNle2lmKCFBLlIpe1Q9QTticmVha31BPUEuUn1sLmMuaW5zZXJ0KFQsdiksVHx8KGk9dil9fX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoaT10Lk4pLGwuYy5yZW1vdmUodCksdS5wdXNoKHQpLE9iamVjdChhLmEpKHQpLGUuY2lyY2xlPW51bGwpfW4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBpfSksdC5hPW8sdC5iPXM7dmFyIGksYT1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9SZWRCbGFja1RyZWUuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0RpYWdyYW0uanMiKSx1PVtdfSwiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRGlhZ3JhbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4oZVswXS1uWzBdKSoodFsxXS1lWzFdKS0oZVswXS10WzBdKSooblsxXS1lWzFdKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbixyLHMsbT1lLnNvcnQobykucG9wKCk7Zm9yKHU9W10sYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9bmV3IGYuYixsPW5ldyBmLmI7OylpZihzPV8uYyxtJiYoIXN8fG1bMV08cy55fHxtWzFdPT09cy55JiZtWzBdPHMueCkpbVswXT09PW4mJm1bMV09PT1yfHwoT2JqZWN0KGMuYSkobSksbj1tWzBdLHI9bVsxXSksbT1lLnBvcCgpO2Vsc2V7aWYoIXMpYnJlYWs7T2JqZWN0KGMuYikocy5hcmMpfWlmKE9iamVjdChkLmQpKCksdCl7dmFyIGg9K3RbMF1bMF0sZz0rdFswXVsxXSxiPSt0WzFdWzBdLEU9K3RbMV1bMV07T2JqZWN0KHAuYSkoaCxnLGIsRSksT2JqZWN0KGQuYikoaCxnLGIsRSl9dGhpcy5lZGdlcz11LHRoaXMuY2VsbHM9YSxpPWw9dT1hPW51bGx9bi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiB1fSksdC5kPXM7dmFyIGksYSxsLHUsYz1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9CZWFjaC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvQ2VsbC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvQ2lyY2xlLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9FZGdlLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9SZWRCbGFja1RyZWUuanMiKSxtPTFlLTYsaD0xZS0xMjtzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0KGQuYSkodCxlW25dKX0pO3JldHVybiBuLmRhdGE9dC5zaXRlLmRhdGEsbn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihuLG8pe2lmKGk9KHM9bi5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIHMsaSxhLGw9bi5zaXRlLHU9LTEsYz10W3NbaS0xXV0sZD1jLmxlZnQ9PT1sP2MucmlnaHQ6Yy5sZWZ0OysrdTxpOylhPWQsYz10W3NbdV1dLGQ9Yy5sZWZ0PT09bD9jLnJpZ2h0OmMubGVmdCxhJiZkJiZvPGEuaW5kZXgmJm88ZC5pbmRleCYmcihsLGEsZCk8MCYmZS5wdXNoKFtsLmRhdGEsYS5kYXRhLGQuZGF0YV0pfSksZX0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmlnaHR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTplLmxlZnQuZGF0YSx0YXJnZXQ6ZS5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbyxzPXRoaXMsaT1zLl9mb3VuZHx8MCxhPXMuY2VsbHMubGVuZ3RoOyEobz1zLmNlbGxzW2ldKTspaWYoKytpPj1hKXJldHVybiBudWxsO3ZhciBsPWUtby5zaXRlWzBdLHU9dC1vLnNpdGVbMV0sYz1sKmwrdSp1O2Rve289cy5jZWxsc1tyPWldLGk9bnVsbCxvLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXMuZWRnZXNbbl0sYT1yLmxlZnQ7aWYoYSE9PW8uc2l0ZSYmYXx8KGE9ci5yaWdodCkpe3ZhciBsPWUtYVswXSx1PXQtYVsxXSxkPWwqbCt1KnU7ZDxjJiYoYz1kLGk9YS5pbmRleCl9fSl9d2hpbGUobnVsbCE9PWkpO3JldHVybiBzLl9mb3VuZD1yLG51bGw9PW58fGM8PW4qbj9vLnNpdGU6bnVsbH19fSwiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRWRnZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPVtudWxsLG51bGxdLGk9dS5lLnB1c2gobyktMTtyZXR1cm4gby5sZWZ0PWUsby5yaWdodD10LG4mJnMobyxlLHQsbiksciYmcyhvLHQsZSxyKSx1LmJbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2goaSksdS5iW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGkpLG99ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9W3Qsbl07cmV0dXJuIHIubGVmdD1lLHJ9ZnVuY3Rpb24gcyhlLHQsbixyKXtlWzBdfHxlWzFdP2UubGVmdD09PW4/ZVsxXT1yOmVbMF09cjooZVswXT1yLGUubGVmdD10LGUucmlnaHQ9bil9ZnVuY3Rpb24gaShlLHQsbixyLG8pe3ZhciBzLGk9ZVswXSxhPWVbMV0sbD1pWzBdLHU9aVsxXSxjPWFbMF0sZD1hWzFdLF89MCxwPTEsZj1jLWwsbT1kLXU7aWYocz10LWwsZnx8IShzPjApKXtpZihzLz1mLGY8MCl7aWYoczxfKXJldHVybjtzPHAmJihwPXMpfWVsc2UgaWYoZj4wKXtpZihzPnApcmV0dXJuO3M+XyYmKF89cyl9aWYocz1yLWwsZnx8IShzPDApKXtpZihzLz1mLGY8MCl7aWYocz5wKXJldHVybjtzPl8mJihfPXMpfWVsc2UgaWYoZj4wKXtpZihzPF8pcmV0dXJuO3M8cCYmKHA9cyl9aWYocz1uLXUsbXx8IShzPjApKXtpZihzLz1tLG08MCl7aWYoczxfKXJldHVybjtzPHAmJihwPXMpfWVsc2UgaWYobT4wKXtpZihzPnApcmV0dXJuO3M+XyYmKF89cyl9aWYocz1vLXUsbXx8IShzPDApKXtpZihzLz1tLG08MCl7aWYocz5wKXJldHVybjtzPl8mJihfPXMpfWVsc2UgaWYobT4wKXtpZihzPF8pcmV0dXJuO3M8cCYmKHA9cyl9cmV0dXJuIShfPjB8fHA8MSl8fChfPjAmJihlWzBdPVtsK18qZix1K18qbV0pLHA8MSYmKGVbMV09W2wrcCpmLHUrcCptXSksITApfX19fX1mdW5jdGlvbiBhKGUsdCxuLHIsbyl7dmFyIHM9ZVsxXTtpZihzKXJldHVybiEwO3ZhciBpLGEsbD1lWzBdLHU9ZS5sZWZ0LGM9ZS5yaWdodCxkPXVbMF0sXz11WzFdLHA9Y1swXSxmPWNbMV0sbT0oZCtwKS8yLGg9KF8rZikvMjtpZihmPT09Xyl7aWYobTx0fHxtPj1yKXJldHVybjtpZihkPnApe2lmKGwpe2lmKGxbMV0+PW8pcmV0dXJufWVsc2UgbD1bbSxuXTtzPVttLG9dfWVsc2V7aWYobCl7aWYobFsxXTxuKXJldHVybn1lbHNlIGw9W20sb107cz1bbSxuXX19ZWxzZSBpZihpPShkLXApLyhmLV8pLGE9aC1pKm0saTwtMXx8aT4xKWlmKGQ+cCl7aWYobCl7aWYobFsxXT49bylyZXR1cm59ZWxzZSBsPVsobi1hKS9pLG5dO3M9WyhvLWEpL2ksb119ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bKG8tYSkvaSxvXTtzPVsobi1hKS9pLG5dfWVsc2UgaWYoXzxmKXtpZihsKXtpZihsWzBdPj1yKXJldHVybn1lbHNlIGw9W3QsaSp0K2FdO3M9W3IsaSpyK2FdfWVsc2V7aWYobCl7aWYobFswXTx0KXJldHVybn1lbHNlIGw9W3IsaSpyK2FdO3M9W3QsaSp0K2FdfXJldHVybiBlWzBdPWwsZVsxXT1zLCEwfWZ1bmN0aW9uIGwoZSx0LG4scil7Zm9yKHZhciBvLHM9dS5lLmxlbmd0aDtzLS07KWEobz11LmVbc10sZSx0LG4scikmJmkobyxlLHQsbixyKSYmKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+dS5mfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPnUuZil8fGRlbGV0ZSB1LmVbc119dC5jPXIsdC5iPW8sdC5kPXMsdC5hPWw7dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRGlhZ3JhbS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvUmVkQmxhY2tUcmVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBvKGUpe2UuVT1lLkM9ZS5MPWUuUj1lLlA9ZS5OPW51bGx9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXQscj10LlIsbz1uLlU7bz9vLkw9PT1uP28uTD1yOm8uUj1yOmUuXz1yLHIuVT1vLG4uVT1yLG4uUj1yLkwsbi5SJiYobi5SLlU9biksci5MPW59ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXQscj10Lkwsbz1uLlU7bz9vLkw9PT1uP28uTD1yOm8uUj1yOmUuXz1yLHIuVT1vLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gYShlKXtmb3IoO2UuTDspZT1lLkw7cmV0dXJuIGV9dC5hPW8sci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnIsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O249ZX1lbHNlIHRoaXMuXz8oZT1hKHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LG49ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxuPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPW4sdC5DPSEwLGU9dDtuJiZuLkM7KXI9bi5VLG49PT1yLkw/KG89ci5SLG8mJm8uQz8obi5DPW8uQz0hMSxyLkM9ITAsZT1yKTooZT09PW4uUiYmKHModGhpcyxuKSxlPW4sbj1lLlUpLG4uQz0hMSxyLkM9ITAsaSh0aGlzLHIpKSk6KG89ci5MLG8mJm8uQz8obi5DPW8uQz0hMSxyLkM9ITAsZT1yKTooZT09PW4uTCYmKGkodGhpcyxuKSxlPW4sbj1lLlUpLG4uQz0hMSxyLkM9ITAscyh0aGlzLHIpKSksbj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0LG4scixvPWUuVSxsPWUuTCx1PWUuUjtpZihuPWw/dT9hKHUpOmw6dSxvP28uTD09PWU/by5MPW46by5SPW46dGhpcy5fPW4sbCYmdT8ocj1uLkMsbi5DPWUuQyxuLkw9bCxsLlU9bixuIT09dT8obz1uLlUsbi5VPWUuVSxlPW4uUixvLkw9ZSxuLlI9dSx1LlU9bik6KG4uVT1vLG89bixlPW4uUikpOihyPWUuQyxlPW4pLGUmJihlLlU9byksIXIpe2lmKGUmJmUuQylyZXR1cm4gdm9pZChlLkM9ITEpO2Rve2lmKGU9PT10aGlzLl8pYnJlYWs7aWYoZT09PW8uTCl7aWYodD1vLlIsdC5DJiYodC5DPSExLG8uQz0hMCxzKHRoaXMsbyksdD1vLlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsaSh0aGlzLHQpLHQ9by5SKSx0LkM9by5DLG8uQz10LlIuQz0hMSxzKHRoaXMsbyksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYodD1vLkwsdC5DJiYodC5DPSExLG8uQz0hMCxpKHRoaXMsbyksdD1vLkwpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAscyh0aGlzLHQpLHQ9by5MKSx0LkM9by5DLG8uQz10LkwuQz0hMSxpKHRoaXMsbyksZT10aGlzLl87YnJlYWt9dC5DPSEwLGU9byxvPW8uVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fSx0LmI9cn0sIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvdm9yb25vaS5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmF9KX0sIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL3BvaW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZVsxXX10LmE9cix0LmI9b30sIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL3Zvcm9ub2kuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvY29uc3RhbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL3BvaW50LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9EaWFncmFtLmpzIik7dC5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IHMuZChlLm1hcChmdW5jdGlvbihyLG8pe3ZhciBpPVtNYXRoLnJvdW5kKHQocixvLGUpL3MuZikqcy5mLE1hdGgucm91bmQobihyLG8sZSkvcy5mKSpzLmZdO3JldHVybiBpLmluZGV4PW8saS5kYXRhPXIsaX0pLGkpfXZhciB0PW8uYSxuPW8uYixpPW51bGw7cmV0dXJuIGUucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCkucG9seWdvbnMoKX0sZS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gZSh0KS5saW5rcygpfSxlLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gZSh0KS50cmlhbmdsZXMoKX0sZS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T2JqZWN0KHIuYSkoK24pLGUpOnR9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChyLmEpKCt0KSxlKTpufSxlLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0sZSk6aSYmW1tpWzBdWzBdLGlbMF1bMV1dLFtpWzFdWzBdLGlbMV1bMV1dXX0sZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0sZSk6aSYmW2lbMV1bMF0taVswXVswXSxpWzFdWzFdLWlbMF1bMV1dfSxlfX0sIi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19fSwiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvZXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1ufXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvem9vbS5qcyIpO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5ifSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uY30pfSwiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvbm9ldmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7by5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX10LmI9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIik7dC5hPWZ1bmN0aW9uKCl7by5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLG8uZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fSwiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvdHJhbnNmb3JtLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMuaz1lLHRoaXMueD10LHRoaXMueT1ufWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUuX196b29tfHxzfXQuYT1yLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksdC5iPW8sci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnIsc2NhbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lP3RoaXM6bmV3IHIodGhpcy5rKmUsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiAwPT09ZSYwPT09dD90aGlzOm5ldyByKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHM9bmV3IHIoMSwwLDApO28ucHJvdG90eXBlPXIucHJvdG90eXBlfSwiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvem9vbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIV8uZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIG8oKXt2YXIgZSx0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KG49bi5vd25lclNWR0VsZW1lbnR8fG4sZT1uLndpZHRoLmJhc2VWYWwudmFsdWUsdD1uLmhlaWdodC5iYXNlVmFsLnZhbHVlKTooZT1uLmNsaWVudFdpZHRoLHQ9bi5jbGllbnRIZWlnaHQpLFtbMCwwXSxbZSx0XV19ZnVuY3Rpb24gcygpe3JldHVybiB0aGlzLl9fem9vbXx8aC5jfWZ1bmN0aW9uIGkoKXtyZXR1cm4tXy5ldmVudC5kZWx0YVkqKF8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gYSgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBsKGUsdCxuKXt2YXIgcj1lLmludmVydFgodFswXVswXSktblswXVswXSxvPWUuaW52ZXJ0WCh0WzFdWzBdKS1uWzFdWzBdLHM9ZS5pbnZlcnRZKHRbMF1bMV0pLW5bMF1bMV0saT1lLmludmVydFkodFsxXVsxXSktblsxXVsxXTtyZXR1cm4gZS50cmFuc2xhdGUobz5yPyhyK28pLzI6TWF0aC5taW4oMCxyKXx8TWF0aC5tYXgoMCxvKSxpPnM/KHMraSkvMjpNYXRoLm1pbigwLHMpfHxNYXRoLm1heCgwLGkpKX12YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvaW5kZXguanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2luZGV4LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2luZGV4LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9jb25zdGFudC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvZXZlbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3RyYW5zZm9ybS5qcyIpLGc9bigiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvbm9ldmVudC5qcyIpO3QuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZS5wcm9wZXJ0eSgiX196b29tIixzKS5vbigid2hlZWwuem9vbSIsVCkub24oIm1vdXNlZG93bi56b29tIixBKS5vbigiZGJsY2xpY2suem9vbSIsQykuZmlsdGVyKGspLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLE8pLm9uKCJ0b3VjaG1vdmUuem9vbSIsUykub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsUikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHQoZSx0KXtyZXR1cm4gdD1NYXRoLm1heChJWzBdLE1hdGgubWluKElbMV0sdCkpLHQ9PT1lLms/ZTpuZXcgaC5hKHQsZS54LGUueSl9ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9dFswXS1uWzBdKmUuayxvPXRbMV0tblsxXSplLms7cmV0dXJuIHI9PT1lLngmJm89PT1lLnk/ZTpuZXcgaC5hKGUuayxyLG8pfWZ1bmN0aW9uIGIoZSl7cmV0dXJuWygrZVswXVswXSsgK2VbMV1bMF0pLzIsKCtlWzBdWzFdKyArZVsxXVsxXSkvMl19ZnVuY3Rpb24gRShlLHQsbil7ZS5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt5KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3kodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cyxvPXkoZSxyKSxzPUQuYXBwbHkoZSxyKSxpPW58fGIocyksYT1NYXRoLm1heChzWzFdWzBdLXNbMF1bMF0sc1sxXVsxXS1zWzBdWzFdKSxsPWUuX196b29tLHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5hcHBseShlLHIpOnQsYz1IKGwuaW52ZXJ0KGkpLmNvbmNhdChhL2wuayksdS5pbnZlcnQoaSkuY29uY2F0KGEvdS5rKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDE9PT1lKWU9dTtlbHNle3ZhciB0PWMoZSksbj1hL3RbMl07ZT1uZXcgaC5hKG4saVswXS10WzBdKm4saVsxXS10WzFdKm4pfW8uem9vbShudWxsLGUpfX0pfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG4scj0wLG89Ri5sZW5ndGg7cjxvOysrcilpZigobj1GW3JdKS50aGF0PT09ZSlyZXR1cm4gbjtyZXR1cm4gbmV3IHYoZSx0KX1mdW5jdGlvbiB2KGUsdCl7dGhpcy50aGF0PWUsdGhpcy5hcmdzPXQsdGhpcy5pbmRleD0tMSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PUQuYXBwbHkoZSx0KX1mdW5jdGlvbiBUKCl7ZnVuY3Rpb24gZSgpe3Iud2hlZWw9bnVsbCxyLmVuZCgpfWlmKEwuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgcj15KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9TWF0aC5tYXgoSVswXSxNYXRoLm1pbihJWzFdLG8uaypNYXRoLnBvdygyLE0uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGk9T2JqZWN0KF8ubW91c2UpKHRoaXMpO2lmKHIud2hlZWwpci5tb3VzZVswXVswXT09PWlbMF0mJnIubW91c2VbMF1bMV09PT1pWzFdfHwoci5tb3VzZVsxXT1vLmludmVydChyLm1vdXNlWzBdPWkpKSxjbGVhclRpbWVvdXQoci53aGVlbCk7ZWxzZXtpZihvLms9PT1zKXJldHVybjtyLm1vdXNlPVtpLG8uaW52ZXJ0KGkpXSxPYmplY3QocC5iKSh0aGlzKSxyLnN0YXJ0KCl9T2JqZWN0KGcuYSkoKSxyLndoZWVsPXNldFRpbWVvdXQoZSxHKSxyLnpvb20oIm1vdXNlIix3KG4odChvLHMpLHIubW91c2VbMF0sci5tb3VzZVsxXSksci5leHRlbnQsUCkpfX1mdW5jdGlvbiBBKCl7ZnVuY3Rpb24gZSgpe2lmKE9iamVjdChnLmEpKCksIXIubW92ZWQpe3ZhciBlPV8uZXZlbnQuY2xpZW50WC1pLHQ9Xy5ldmVudC5jbGllbnRZLWE7ci5tb3ZlZD1lKmUrdCp0Pnp9ci56b29tKCJtb3VzZSIsdyhuKHIudGhhdC5fX3pvb20sci5tb3VzZVswXT1PYmplY3QoXy5tb3VzZSkoci50aGF0KSxyLm1vdXNlWzFdKSxyLmV4dGVudCxQKSl9ZnVuY3Rpb24gdCgpe28ub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksT2JqZWN0KGMuYykoXy5ldmVudC52aWV3LHIubW92ZWQpLE9iamVjdChnLmEpKCksci5lbmQoKX1pZigheCYmTC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciByPXkodGhpcyxhcmd1bWVudHMpLG89T2JqZWN0KF8uc2VsZWN0KShfLmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZSwhMCkub24oIm1vdXNldXAuem9vbSIsdCwhMCkscz1PYmplY3QoXy5tb3VzZSkodGhpcyksaT1fLmV2ZW50LmNsaWVudFgsYT1fLmV2ZW50LmNsaWVudFk7T2JqZWN0KGMuYikoXy5ldmVudC52aWV3KSxPYmplY3QoZy5iKSgpLHIubW91c2U9W3MsdGhpcy5fX3pvb20uaW52ZXJ0KHMpXSxPYmplY3QocC5iKSh0aGlzKSxyLnN0YXJ0KCl9fWZ1bmN0aW9uIEMoKXtpZihMLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHI9dGhpcy5fX3pvb20sbz1PYmplY3QoXy5tb3VzZSkodGhpcykscz1yLmludmVydChvKSxpPXIuayooXy5ldmVudC5zaGlmdEtleT8uNToyKSxhPXcobih0KHIsaSksbyxzKSxELmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQKTtPYmplY3QoZy5hKSgpLE4+MD9PYmplY3QoXy5zZWxlY3QpKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihOKS5jYWxsKEUsYSxvKTpPYmplY3QoXy5zZWxlY3QpKHRoaXMpLmNhbGwoZS50cmFuc2Zvcm0sYSl9fWZ1bmN0aW9uIE8oKXtpZihMLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUsdCxuLHIsbz15KHRoaXMsYXJndW1lbnRzKSxzPV8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1zLmxlbmd0aDtmb3IoT2JqZWN0KGcuYikoKSx0PTA7dDxpOysrdCluPXNbdF0scj1PYmplY3QoXy50b3VjaCkodGhpcyxzLG4uaWRlbnRpZmllcikscj1bcix0aGlzLl9fem9vbS5pbnZlcnQociksbi5pZGVudGlmaWVyXSxvLnRvdWNoMD9vLnRvdWNoMXx8KG8udG91Y2gxPXIpOihvLnRvdWNoMD1yLGU9ITApO2lmKGomJihqPWNsZWFyVGltZW91dChqKSwhby50b3VjaDEpKXJldHVybiBvLmVuZCgpLHZvaWQoKHI9T2JqZWN0KF8uc2VsZWN0KSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpO2UmJihqPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqPW51bGx9LFUpLE9iamVjdChwLmIpKHRoaXMpLG8uc3RhcnQoKSl9fWZ1bmN0aW9uIFMoKXt2YXIgZSxyLG8scyxpPXkodGhpcyxhcmd1bWVudHMpLGE9Xy5ldmVudC5jaGFuZ2VkVG91Y2hlcyxsPWEubGVuZ3RoO2ZvcihPYmplY3QoZy5hKSgpLGomJihqPWNsZWFyVGltZW91dChqKSksZT0wO2U8bDsrK2Upcj1hW2VdLG89T2JqZWN0KF8udG91Y2gpKHRoaXMsYSxyLmlkZW50aWZpZXIpLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj9pLnRvdWNoMFswXT1vOmkudG91Y2gxJiZpLnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKGkudG91Y2gxWzBdPW8pO2lmKHI9aS50aGF0Ll9fem9vbSxpLnRvdWNoMSl7dmFyIHU9aS50b3VjaDBbMF0sYz1pLnRvdWNoMFsxXSxkPWkudG91Y2gxWzBdLHA9aS50b3VjaDFbMV0sZj0oZj1kWzBdLXVbMF0pKmYrKGY9ZFsxXS11WzFdKSpmLG09KG09cFswXS1jWzBdKSptKyhtPXBbMV0tY1sxXSkqbTtyPXQocixNYXRoLnNxcnQoZi9tKSksbz1bKHVbMF0rZFswXSkvMiwodVsxXStkWzFdKS8yXSxzPVsoY1swXStwWzBdKS8yLChjWzFdK3BbMV0pLzJdfWVsc2V7aWYoIWkudG91Y2gwKXJldHVybjtvPWkudG91Y2gwWzBdLHM9aS50b3VjaDBbMV19aS56b29tKCJ0b3VjaCIsdyhuKHIsbyxzKSxpLmV4dGVudCxQKSl9ZnVuY3Rpb24gUigpe3ZhciBlLHQsbj15KHRoaXMsYXJndW1lbnRzKSxyPV8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz1yLmxlbmd0aDtmb3IoT2JqZWN0KGcuYikoKSx4JiZjbGVhclRpbWVvdXQoeCkseD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eD1udWxsfSxVKSxlPTA7ZTxvOysrZSl0PXJbZV0sbi50b3VjaDAmJm4udG91Y2gwWzJdPT09dC5pZGVudGlmaWVyP2RlbGV0ZSBuLnRvdWNoMDpuLnRvdWNoMSYmbi50b3VjaDFbMl09PT10LmlkZW50aWZpZXImJmRlbGV0ZSBuLnRvdWNoMTtuLnRvdWNoMSYmIW4udG91Y2gwJiYobi50b3VjaDA9bi50b3VjaDEsZGVsZXRlIG4udG91Y2gxKSxuLnRvdWNoMD9uLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQobi50b3VjaDBbMF0pOm4uZW5kKCl9dmFyIGoseCxMPXIsRD1vLHc9bCxNPWksaz1hLEk9WzAsMS8wXSxQPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE49MjUwLEg9ZC54LEY9W10sQj1PYmplY3QodS5hKSgic3RhcnQiLCJ6b29tIiwiZW5kIiksVT01MDAsRz0xNTAsej0wO3JldHVybiBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuc2VsZWN0aW9uP2Uuc2VsZWN0aW9uKCk6ZTtuLnByb3BlcnR5KCJfX3pvb20iLHMpLGUhPT1uP0UoZSx0KTpuLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt5KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgdD90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0KS5lbmQoKX0pfSxlLnNjYWxlQnk9ZnVuY3Rpb24odCxuKXtlLnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKX0pfSxlLnNjYWxlVG89ZnVuY3Rpb24ocixvKXtlLnRyYW5zZm9ybShyLGZ1bmN0aW9uKCl7dmFyIGU9RC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10aGlzLl9fem9vbSxzPWIoZSksaT1yLmludmVydChzKSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBvP28uYXBwbHkodGhpcyxhcmd1bWVudHMpOm87cmV0dXJuIHcobih0KHIsYSkscyxpKSxlLFApfSl9LGUudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxuLHIpe2UudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyKSxELmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQKX0pfSxlLnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsbixyKXtlLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIGU9RC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdD10aGlzLl9fem9vbSxvPWIoZSk7cmV0dXJuIHcoaC5jLnRyYW5zbGF0ZShvWzBdLG9bMV0pLnNjYWxlKHQuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiwiZnVuY3Rpb24iPT10eXBlb2Ygcj8tci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXIpLGUsUCl9KX0sdi5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLmluZGV4PUYucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09ZSYmKHRoaXMubW91c2VbMV09dC5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09ZSYmKHRoaXMudG91Y2gwWzFdPXQuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1lJiYodGhpcy50b3VjaDFbMV09dC5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPXQsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihGLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtPYmplY3QoXy5jdXN0b21FdmVudCkobmV3IG0uYShlLHQsdGhpcy50aGF0Ll9fem9vbSksQi5hcHBseSxCLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGUud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChmLmEpKCt0KSxlKTpNfSxlLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9iamVjdChmLmEpKCEhdCksZSk6TH0sZS50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPYmplY3QoZi5hKSghIXQpLGUpOmt9LGUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T2JqZWN0KGYuYSkoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGUpOkR9LGUuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KElbMF09K3RbMF0sSVsxXT0rdFsxXSxlKTpbSVswXSxJWzFdXX0sZS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFBbMF1bMF09K3RbMF1bMF0sUFsxXVswXT0rdFsxXVswXSxQWzBdWzFdPSt0WzBdWzFdLFBbMV1bMV09K3RbMV1bMV0sZSk6W1tQWzBdWzBdLFBbMF1bMV1dLFtQWzFdWzBdLFBbMV1bMV1dXX0sZS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxlKTp3fSxlLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPSt0LGUpOk59LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEg9dCxlKTpIfSxlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Qi5vbi5hcHBseShCLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1CP2U6dH0sZS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh6PSh0PSt0KSp0LGUpOk1hdGguc3FydCh6KX0sZX19LCIuL25vZGVfbW9kdWxlcy9kMy9kaXN0L3BhY2thZ2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iNS43LjAifSwiLi9ub2RlX21vZHVsZXMvZDMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2QzL2Rpc3QvcGFja2FnZS5qcyIpO24uZCh0LCJ2ZXJzaW9uIixmdW5jdGlvbigpe3JldHVybiByLmF9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiKTtuLmQodCwiYmlzZWN0IixmdW5jdGlvbigpe3JldHVybiBvLmJ9KSxuLmQodCwiYmlzZWN0UmlnaHQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZH0pLG4uZCh0LCJiaXNlY3RMZWZ0IixmdW5jdGlvbigpe3JldHVybiBvLmN9KSxuLmQodCwiYXNjZW5kaW5nIixmdW5jdGlvbigpe3JldHVybiBvLmF9KSxuLmQodCwiYmlzZWN0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZX0pLG4uZCh0LCJjcm9zcyIsZnVuY3Rpb24oKXtyZXR1cm4gby5mfSksbi5kKHQsImRlc2NlbmRpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZ30pLG4uZCh0LCJkZXZpYXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIG8uaH0pLG4uZCh0LCJleHRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uaX0pLG4uZCh0LCJoaXN0b2dyYW0iLGZ1bmN0aW9uKCl7cmV0dXJuIG8uan0pLG4uZCh0LCJ0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzIixmdW5jdGlvbigpe3JldHVybiBvLnd9KSxuLmQodCwidGhyZXNob2xkU2NvdHQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8ueH0pLG4uZCh0LCJ0aHJlc2hvbGRTdHVyZ2VzIixmdW5jdGlvbigpe3JldHVybiBvLnl9KSxuLmQodCwibWF4IixmdW5jdGlvbigpe3JldHVybiBvLmt9KSxuLmQodCwibWVhbiIsZnVuY3Rpb24oKXtyZXR1cm4gby5sfSksbi5kKHQsIm1lZGlhbiIsZnVuY3Rpb24oKXtyZXR1cm4gby5tfSksbi5kKHQsIm1lcmdlIixmdW5jdGlvbigpe3JldHVybiBvLm59KSxuLmQodCwibWluIixmdW5jdGlvbigpe3JldHVybiBvLm99KSxuLmQodCwicGFpcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIG8ucH0pLG4uZCh0LCJwZXJtdXRlIixmdW5jdGlvbigpe3JldHVybiBvLnF9KSxuLmQodCwicXVhbnRpbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIG8ucn0pLG4uZCh0LCJyYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5zfSksbi5kKHQsInNjYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIG8udH0pLG4uZCh0LCJzaHVmZmxlIixmdW5jdGlvbigpe3JldHVybiBvLnV9KSxuLmQodCwic3VtIixmdW5jdGlvbigpe3JldHVybiBvLnZ9KSxuLmQodCwidGlja3MiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uQn0pLG4uZCh0LCJ0aWNrSW5jcmVtZW50IixmdW5jdGlvbigpe3JldHVybiBvLnp9KSxuLmQodCwidGlja1N0ZXAiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uQX0pLG4uZCh0LCJ0cmFuc3Bvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uQ30pLG4uZCh0LCJ2YXJpYW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5EfSksbi5kKHQsInppcCIsZnVuY3Rpb24oKXtyZXR1cm4gby5FfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaW5kZXguanMiKTtuLmQodCwiYXhpc1RvcCIsZnVuY3Rpb24oKXtyZXR1cm4gcy5kfSksbi5kKHQsImF4aXNSaWdodCIsZnVuY3Rpb24oKXtyZXR1cm4gcy5jfSksbi5kKHQsImF4aXNCb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pLG4uZCh0LCJheGlzTGVmdCIsZnVuY3Rpb24oKXtyZXR1cm4gcy5ifSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2luZGV4LmpzIik7bi5kKHQsImJydXNoIixmdW5jdGlvbigpe3JldHVybiBpLmF9KSxuLmQodCwiYnJ1c2hYIixmdW5jdGlvbigpe3JldHVybiBpLmN9KSxuLmQodCwiYnJ1c2hZIixmdW5jdGlvbigpe3JldHVybiBpLmR9KSxuLmQodCwiYnJ1c2hTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYn0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9pbmRleC5qcyIpO24uZCh0LCJjaG9yZCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSksbi5kKHQsInJpYmJvbiIsZnVuY3Rpb24oKXtyZXR1cm4gYS5ifSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvaW5kZXguanMiKTtuLmQodCwibmVzdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5kfSksbi5kKHQsInNldCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5lfSksbi5kKHQsIm1hcCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5jfSksbi5kKHQsImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYn0pLG4uZCh0LCJ2YWx1ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuZn0pLG4uZCh0LCJlbnRyaWVzIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiKTtuLmQodCwiY29sb3IiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pLG4uZCh0LCJyZ2IiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuaH0pLG4uZCh0LCJoc2wiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuZX0pLG4uZCh0LCJsYWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuZn0pLG4uZCh0LCJoY2wiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuZH0pLG4uZCh0LCJsY2giLGZ1bmN0aW9uKCl7cmV0dXJuIHUuZ30pLG4uZCh0LCJncmF5IixmdW5jdGlvbigpe3JldHVybiB1LmN9KSxuLmQodCwiY3ViZWhlbGl4IixmdW5jdGlvbigpe3JldHVybiB1LmJ9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9pbmRleC5qcyIpO24uZCh0LCJjb250b3VycyIsZnVuY3Rpb24oKXtyZXR1cm4gYy5ifSksbi5kKHQsImNvbnRvdXJEZW5zaXR5IixmdW5jdGlvbigpe3JldHVybiBjLmF9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvaW5kZXguanMiKTtuLmQodCwiZGlzcGF0Y2giLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYX0pO3ZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2luZGV4LmpzIik7bi5kKHQsImRyYWciLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYX0pLG4uZCh0LCJkcmFnRGlzYWJsZSIsZnVuY3Rpb24oKXtyZXR1cm4gXy5ifSksbi5kKHQsImRyYWdFbmFibGUiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uY30pO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvaW5kZXguanMiKTtuLmQodCwiZHN2Rm9ybWF0IixmdW5jdGlvbigpe3JldHVybiBwLmd9KSxuLmQodCwiY3N2UGFyc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuZX0pLG4uZCh0LCJjc3ZQYXJzZVJvd3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuZn0pLG4uZCh0LCJjc3ZGb3JtYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYn0pLG4uZCh0LCJjc3ZGb3JtYXRCb2R5IixmdW5jdGlvbigpe3JldHVybiBwLmN9KSxuLmQodCwiY3N2Rm9ybWF0Um93cyIsZnVuY3Rpb24oKXtyZXR1cm4gcC5kfSksbi5kKHQsInRzdlBhcnNlIixmdW5jdGlvbigpe3JldHVybiBwLmt9KSxuLmQodCwidHN2UGFyc2VSb3dzIixmdW5jdGlvbigpe3JldHVybiBwLmx9KSxuLmQodCwidHN2Rm9ybWF0IixmdW5jdGlvbigpe3JldHVybiBwLmh9KSxuLmQodCwidHN2Rm9ybWF0Qm9keSIsZnVuY3Rpb24oKXtyZXR1cm4gcC5pfSksbi5kKHQsInRzdkZvcm1hdFJvd3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHAuan0pLG4uZCh0LCJhdXRvVHlwZSIsZnVuY3Rpb24oKXtyZXR1cm4gcC5hfSk7dmFyIGY9bigiLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvaW5kZXguanMiKTtuLmQodCwiZWFzZUxpbmVhciIsZnVuY3Rpb24oKXtyZXR1cm4gZi55fSksbi5kKHQsImVhc2VRdWFkIixmdW5jdGlvbigpe3JldHVybiBmLkR9KSxuLmQodCwiZWFzZVF1YWRJbiIsZnVuY3Rpb24oKXtyZXR1cm4gZi5FfSksbi5kKHQsImVhc2VRdWFkT3V0IixmdW5jdGlvbigpe3JldHVybiBmLkd9KSxuLmQodCwiZWFzZVF1YWRJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5GfSksbi5kKHQsImVhc2VDdWJpYyIsZnVuY3Rpb24oKXtyZXR1cm4gZi5tfSksbi5kKHQsImVhc2VDdWJpY0luIixmdW5jdGlvbigpe3JldHVybiBmLm59KSxuLmQodCwiZWFzZUN1YmljT3V0IixmdW5jdGlvbigpe3JldHVybiBmLnB9KSxuLmQodCwiZWFzZUN1YmljSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub30pLG4uZCh0LCJlYXNlUG9seSIsZnVuY3Rpb24oKXtyZXR1cm4gZi56fSksbi5kKHQsImVhc2VQb2x5SW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGYuQX0pLG4uZCh0LCJlYXNlUG9seU91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5DfSksbi5kKHQsImVhc2VQb2x5SW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuQn0pLG4uZCh0LCJlYXNlU2luIixmdW5jdGlvbigpe3JldHVybiBmLkh9KSxuLmQodCwiZWFzZVNpbkluIixmdW5jdGlvbigpe3JldHVybiBmLkl9KSxuLmQodCwiZWFzZVNpbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5LfSksbi5kKHQsImVhc2VTaW5Jbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5KfSksbi5kKHQsImVhc2VFeHAiLGZ1bmN0aW9uKCl7cmV0dXJuIGYudX0pLG4uZCh0LCJlYXNlRXhwSW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGYudn0pLG4uZCh0LCJlYXNlRXhwT3V0IixmdW5jdGlvbigpe3JldHVybiBmLnh9KSxuLmQodCwiZWFzZUV4cEluT3V0IixmdW5jdGlvbigpe3JldHVybiBmLnd9KSxuLmQodCwiZWFzZUNpcmNsZSIsZnVuY3Rpb24oKXtyZXR1cm4gZi5pfSksbi5kKHQsImVhc2VDaXJjbGVJbiIsZnVuY3Rpb24oKXtyZXR1cm4gZi5qfSksbi5kKHQsImVhc2VDaXJjbGVPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGYubH0pLG4uZCh0LCJlYXNlQ2lyY2xlSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGYua30pLG4uZCh0LCJlYXNlQm91bmNlIixmdW5jdGlvbigpe3JldHVybiBmLmV9KSxuLmQodCwiZWFzZUJvdW5jZUluIixmdW5jdGlvbigpe3JldHVybiBmLmZ9KSxuLmQodCwiZWFzZUJvdW5jZU91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5ofSksbi5kKHQsImVhc2VCb3VuY2VJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5nfSksbi5kKHQsImVhc2VCYWNrIixmdW5jdGlvbigpe3JldHVybiBmLmF9KSxuLmQodCwiZWFzZUJhY2tJbiIsZnVuY3Rpb24oKXtyZXR1cm4gZi5ifSksbi5kKHQsImVhc2VCYWNrT3V0IixmdW5jdGlvbigpe3JldHVybiBmLmR9KSxuLmQodCwiZWFzZUJhY2tJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5jfSksbi5kKHQsImVhc2VFbGFzdGljIixmdW5jdGlvbigpe3JldHVybiBmLnF9KSxuLmQodCwiZWFzZUVsYXN0aWNJbiIsZnVuY3Rpb24oKXtyZXR1cm4gZi5yfSksbi5kKHQsImVhc2VFbGFzdGljT3V0IixmdW5jdGlvbigpe3JldHVybiBmLnR9KSxuLmQodCwiZWFzZUVsYXN0aWNJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5zfSk7dmFyIG09bigiLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2luZGV4LmpzIik7bi5kKHQsImJsb2IiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uYX0pLG4uZCh0LCJidWZmZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uYn0pLG4uZCh0LCJkc3YiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uZH0pLG4uZCh0LCJjc3YiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uY30pLG4uZCh0LCJ0c3YiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uan0pLG4uZCh0LCJpbWFnZSIsZnVuY3Rpb24oKXtyZXR1cm4gbS5mfSksbi5kKHQsImpzb24iLGZ1bmN0aW9uKCl7cmV0dXJuIG0uZ30pLG4uZCh0LCJ0ZXh0IixmdW5jdGlvbigpe3JldHVybiBtLml9KSxuLmQodCwieG1sIixmdW5jdGlvbigpe3JldHVybiBtLmt9KSxuLmQodCwiaHRtbCIsZnVuY3Rpb24oKXtyZXR1cm4gbS5lfSksbi5kKHQsInN2ZyIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ofSk7dmFyIGg9bigiLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2luZGV4LmpzIik7bi5kKHQsImZvcmNlQ2VudGVyIixmdW5jdGlvbigpe3JldHVybiBoLmF9KSxuLmQodCwiZm9yY2VDb2xsaWRlIixmdW5jdGlvbigpe3JldHVybiBoLmJ9KSxuLmQodCwiZm9yY2VMaW5rIixmdW5jdGlvbigpe3JldHVybiBoLmN9KSxuLmQodCwiZm9yY2VNYW55Qm9keSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kfSksbi5kKHQsImZvcmNlUmFkaWFsIixmdW5jdGlvbigpe3JldHVybiBoLmV9KSxuLmQodCwiZm9yY2VTaW11bGF0aW9uIixmdW5jdGlvbigpe3JldHVybiBoLmZ9KSxuLmQodCwiZm9yY2VYIixmdW5jdGlvbigpe3JldHVybiBoLmd9KSxuLmQodCwiZm9yY2VZIixmdW5jdGlvbigpe3JldHVybiBoLmh9KTt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2luZGV4LmpzIik7bi5kKHQsImZvcm1hdERlZmF1bHRMb2NhbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYn0pLG4uZCh0LCJmb3JtYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pLG4uZCh0LCJmb3JtYXRQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuZH0pLG4uZCh0LCJmb3JtYXRMb2NhbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuY30pLG4uZCh0LCJmb3JtYXRTcGVjaWZpZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuZX0pLG4uZCh0LCJwcmVjaXNpb25GaXhlZCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5mfSksbi5kKHQsInByZWNpc2lvblByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gZy5nfSksbi5kKHQsInByZWNpc2lvblJvdW5kIixmdW5jdGlvbigpe3JldHVybiBnLmh9KTt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2luZGV4LmpzIik7bi5kKHQsImdlb0FyZWEiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuY30pLG4uZCh0LCJnZW9Cb3VuZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuaH0pLG4uZCh0LCJnZW9DZW50cm9pZCIsZnVuY3Rpb24oKXtyZXR1cm4gYi5pfSksbi5kKHQsImdlb0NpcmNsZSIsZnVuY3Rpb24oKXtyZXR1cm4gYi5qfSksbi5kKHQsImdlb0NsaXBBbnRpbWVyaWRpYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGIua30pLG4uZCh0LCJnZW9DbGlwQ2lyY2xlIixmdW5jdGlvbigpe3JldHVybiBiLmx9KSxuLmQodCwiZ2VvQ2xpcEV4dGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gYi5tfSksbi5kKHQsImdlb0NsaXBSZWN0YW5nbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGIubn0pLG4uZCh0LCJnZW9Db250YWlucyIsZnVuY3Rpb24oKXtyZXR1cm4gYi51fSksbi5kKHQsImdlb0Rpc3RhbmNlIixmdW5jdGlvbigpe3JldHVybiBiLnZ9KSxuLmQodCwiZ2VvR3JhdGljdWxlIixmdW5jdGlvbigpe3JldHVybiBiLkN9KSxuLmQodCwiZ2VvR3JhdGljdWxlMTAiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuRH0pLG4uZCh0LCJnZW9JbnRlcnBvbGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gYi5GfSksbi5kKHQsImdlb0xlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gYi5HfSksbi5kKHQsImdlb1BhdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuTn0pLG4uZCh0LCJnZW9BbGJlcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuYX0pLG4uZCh0LCJnZW9BbGJlcnNVc2EiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuYn0pLG4uZCh0LCJnZW9BemltdXRoYWxFcXVhbEFyZWEiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuZH0pLG4uZCh0LCJnZW9BemltdXRoYWxFcXVhbEFyZWFSYXciLGZ1bmN0aW9uKCl7cmV0dXJuIGIuZX0pLG4uZCh0LCJnZW9BemltdXRoYWxFcXVpZGlzdGFudCIsZnVuY3Rpb24oKXtyZXR1cm4gYi5mfSksbi5kKHQsImdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3IixmdW5jdGlvbigpe3JldHVybiBiLmd9KSxuLmQodCwiZ2VvQ29uaWNDb25mb3JtYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIGIub30pLG4uZCh0LCJnZW9Db25pY0NvbmZvcm1hbFJhdyIsZnVuY3Rpb24oKXtyZXR1cm4gYi5wfSksbi5kKHQsImdlb0NvbmljRXF1YWxBcmVhIixmdW5jdGlvbigpe3JldHVybiBiLnF9KSxuLmQodCwiZ2VvQ29uaWNFcXVhbEFyZWFSYXciLGZ1bmN0aW9uKCl7cmV0dXJuIGIucn0pLG4uZCh0LCJnZW9Db25pY0VxdWlkaXN0YW50IixmdW5jdGlvbigpe3JldHVybiBiLnN9KSxuLmQodCwiZ2VvQ29uaWNFcXVpZGlzdGFudFJhdyIsZnVuY3Rpb24oKXtyZXR1cm4gYi50fSksbi5kKHQsImdlb0VxdWFsRWFydGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGIud30pLG4uZCh0LCJnZW9FcXVhbEVhcnRoUmF3IixmdW5jdGlvbigpe3JldHVybiBiLnh9KSxuLmQodCwiZ2VvRXF1aXJlY3Rhbmd1bGFyIixmdW5jdGlvbigpe3JldHVybiBiLnl9KSxuLmQodCwiZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3IixmdW5jdGlvbigpe3JldHVybiBiLnp9KSxuLmQodCwiZ2VvR25vbW9uaWMiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuQX0pLG4uZCh0LCJnZW9Hbm9tb25pY1JhdyIsZnVuY3Rpb24oKXtyZXR1cm4gYi5CfSksbi5kKHQsImdlb0lkZW50aXR5IixmdW5jdGlvbigpe3JldHVybiBiLkV9KSxuLmQodCwiZ2VvUHJvamVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gYi5PfSksbi5kKHQsImdlb1Byb2plY3Rpb25NdXRhdG9yIixmdW5jdGlvbigpe3JldHVybiBiLlB9KSxuLmQodCwiZ2VvTWVyY2F0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuSH0pLG4uZCh0LCJnZW9NZXJjYXRvclJhdyIsZnVuY3Rpb24oKXtyZXR1cm4gYi5JfSksbi5kKHQsImdlb05hdHVyYWxFYXJ0aDEiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuSn0pLG4uZCh0LCJnZW9OYXR1cmFsRWFydGgxUmF3IixmdW5jdGlvbigpe3JldHVybiBiLkt9KSxuLmQodCwiZ2VvT3J0aG9ncmFwaGljIixmdW5jdGlvbigpe3JldHVybiBiLkx9KSxuLmQodCwiZ2VvT3J0aG9ncmFwaGljUmF3IixmdW5jdGlvbigpe3JldHVybiBiLk19KSxuLmQodCwiZ2VvU3RlcmVvZ3JhcGhpYyIsZnVuY3Rpb24oKXtyZXR1cm4gYi5SfSksbi5kKHQsImdlb1N0ZXJlb2dyYXBoaWNSYXciLGZ1bmN0aW9uKCl7cmV0dXJuIGIuU30pLG4uZCh0LCJnZW9UcmFuc3ZlcnNlTWVyY2F0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuVn0pLG4uZCh0LCJnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXciLGZ1bmN0aW9uKCl7cmV0dXJuIGIuV30pLG4uZCh0LCJnZW9Sb3RhdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gYi5RfSksbi5kKHQsImdlb1N0cmVhbSIsZnVuY3Rpb24oKXtyZXR1cm4gYi5UfSksbi5kKHQsImdlb1RyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gYi5VfSk7dmFyIEU9bigiLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9pbmRleC5qcyIpO24uZCh0LCJjbHVzdGVyIixmdW5jdGlvbigpe3JldHVybiBFLmF9KSxuLmQodCwiaGllcmFyY2h5IixmdW5jdGlvbigpe3JldHVybiBFLmJ9KSxuLmQodCwicGFjayIsZnVuY3Rpb24oKXtyZXR1cm4gRS5jfSksbi5kKHQsInBhY2tTaWJsaW5ncyIsZnVuY3Rpb24oKXtyZXR1cm4gRS5lfSksbi5kKHQsInBhY2tFbmNsb3NlIixmdW5jdGlvbigpe3JldHVybiBFLmR9KSxuLmQodCwicGFydGl0aW9uIixmdW5jdGlvbigpe3JldHVybiBFLmZ9KSxuLmQodCwic3RyYXRpZnkiLGZ1bmN0aW9uKCl7cmV0dXJuIEUuZ30pLG4uZCh0LCJ0cmVlIixmdW5jdGlvbigpe3JldHVybiBFLmh9KSxuLmQodCwidHJlZW1hcCIsZnVuY3Rpb24oKXtyZXR1cm4gRS5pfSksbi5kKHQsInRyZWVtYXBCaW5hcnkiLGZ1bmN0aW9uKCl7cmV0dXJuIEUuan0pLG4uZCh0LCJ0cmVlbWFwRGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5rfSksbi5kKHQsInRyZWVtYXBTbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5tfSksbi5kKHQsInRyZWVtYXBTbGljZURpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEUubn0pLG4uZCh0LCJ0cmVlbWFwU3F1YXJpZnkiLGZ1bmN0aW9uKCl7cmV0dXJuIEUub30pLG4uZCh0LCJ0cmVlbWFwUmVzcXVhcmlmeSIsZnVuY3Rpb24oKXtyZXR1cm4gRS5sfSk7dmFyIHk9bigiLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2luZGV4LmpzIik7bi5kKHQsImludGVycG9sYXRlIixmdW5jdGlvbigpe3JldHVybiB5LmF9KSxuLmQodCwiaW50ZXJwb2xhdGVBcnJheSIsZnVuY3Rpb24oKXtyZXR1cm4geS5ifSksbi5kKHQsImludGVycG9sYXRlQmFzaXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHkuY30pLG4uZCh0LCJpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiB5LmR9KSxuLmQodCwiaW50ZXJwb2xhdGVEYXRlIixmdW5jdGlvbigpe3JldHVybiB5Lmd9KSxuLmQodCwiaW50ZXJwb2xhdGVEaXNjcmV0ZSIsZnVuY3Rpb24oKXtyZXR1cm4geS5ofSksbi5kKHQsImludGVycG9sYXRlSHVlIixmdW5jdGlvbigpe3JldHVybiB5Lm19KSxuLmQodCwiaW50ZXJwb2xhdGVOdW1iZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHkub30pLG4uZCh0LCJpbnRlcnBvbGF0ZU9iamVjdCIsZnVuY3Rpb24oKXtyZXR1cm4geS5wfSksbi5kKHQsImludGVycG9sYXRlUm91bmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHkudH0pLG4uZCh0LCJpbnRlcnBvbGF0ZVN0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4geS51fSksbi5kKHQsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIixmdW5jdGlvbigpe3JldHVybiB5LnZ9KSxuLmQodCwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLGZ1bmN0aW9uKCl7cmV0dXJuIHkud30pLG4uZCh0LCJpbnRlcnBvbGF0ZVpvb20iLGZ1bmN0aW9uKCl7cmV0dXJuIHkueH0pLG4uZCh0LCJpbnRlcnBvbGF0ZVJnYiIsZnVuY3Rpb24oKXtyZXR1cm4geS5xfSksbi5kKHQsImludGVycG9sYXRlUmdiQmFzaXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHkucn0pLG4uZCh0LCJpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiB5LnN9KSxuLmQodCwiaW50ZXJwb2xhdGVIc2wiLGZ1bmN0aW9uKCl7cmV0dXJuIHkua30pLG4uZCh0LCJpbnRlcnBvbGF0ZUhzbExvbmciLGZ1bmN0aW9uKCl7cmV0dXJuIHkubH0pLG4uZCh0LCJpbnRlcnBvbGF0ZUxhYiIsZnVuY3Rpb24oKXtyZXR1cm4geS5ufSksbi5kKHQsImludGVycG9sYXRlSGNsIixmdW5jdGlvbigpe3JldHVybiB5Lml9KSxuLmQodCwiaW50ZXJwb2xhdGVIY2xMb25nIixmdW5jdGlvbigpe3JldHVybiB5Lmp9KSxuLmQodCwiaW50ZXJwb2xhdGVDdWJlaGVsaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHkuZX0pLG4uZCh0LCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLGZ1bmN0aW9uKCl7cmV0dXJuIHkuZn0pLG4uZCh0LCJwaWVjZXdpc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHkueX0pLG4uZCh0LCJxdWFudGl6ZSIsZnVuY3Rpb24oKXtyZXR1cm4geS56fSk7dmFyIHY9bigiLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiKTtuLmQodCwicGF0aCIsZnVuY3Rpb24oKXtyZXR1cm4gdi5hfSk7dmFyIFQ9bigiLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaW5kZXguanMiKTtuLmQodCwicG9seWdvbkFyZWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFQuYX0pLG4uZCh0LCJwb2x5Z29uQ2VudHJvaWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFQuYn0pLG4uZCh0LCJwb2x5Z29uSHVsbCIsZnVuY3Rpb24oKXtyZXR1cm4gVC5kfSksbi5kKHQsInBvbHlnb25Db250YWlucyIsZnVuY3Rpb24oKXtyZXR1cm4gVC5jfSksbi5kKHQsInBvbHlnb25MZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIFQuZX0pO3ZhciBBPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9pbmRleC5qcyIpO24uZCh0LCJxdWFkdHJlZSIsZnVuY3Rpb24oKXtyZXR1cm4gQS5hfSk7dmFyIEM9bigiLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9pbmRleC5qcyIpO24uZCh0LCJyYW5kb21Vbmlmb3JtIixmdW5jdGlvbigpe3JldHVybiBDLmZ9KSxuLmQodCwicmFuZG9tTm9ybWFsIixmdW5jdGlvbigpe3JldHVybiBDLmV9KSxuLmQodCwicmFuZG9tTG9nTm9ybWFsIixmdW5jdGlvbigpe3JldHVybiBDLmR9KSxuLmQodCwicmFuZG9tQmF0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEMuYX0pLG4uZCh0LCJyYW5kb21JcndpbkhhbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIEMuY30pLG4uZCh0LCJyYW5kb21FeHBvbmVudGlhbCIsZnVuY3Rpb24oKXtyZXR1cm4gQy5ifSk7dmFyIE89bigiLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzIik7bi5kKHQsInNjYWxlQmFuZCIsZnVuY3Rpb24oKXtyZXR1cm4gTy5hfSksbi5kKHQsInNjYWxlUG9pbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIE8ubH0pLG4uZCh0LCJzY2FsZUlkZW50aXR5IixmdW5jdGlvbigpe3JldHVybiBPLmd9KSxuLmQodCwic2NhbGVMaW5lYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIE8uaX0pLG4uZCh0LCJzY2FsZUxvZyIsZnVuY3Rpb24oKXtyZXR1cm4gTy5qfSksbi5kKHQsInNjYWxlU3ltbG9nIixmdW5jdGlvbigpe3JldHVybiBPLnd9KSxuLmQodCwic2NhbGVPcmRpbmFsIixmdW5jdGlvbigpe3JldHVybiBPLmt9KSxuLmQodCwic2NhbGVJbXBsaWNpdCIsZnVuY3Rpb24oKXtyZXR1cm4gTy5ofSksbi5kKHQsInNjYWxlUG93IixmdW5jdGlvbigpe3JldHVybiBPLm19KSxuLmQodCwic2NhbGVTcXJ0IixmdW5jdGlvbigpe3JldHVybiBPLnZ9KSxuLmQodCwic2NhbGVRdWFudGlsZSIsZnVuY3Rpb24oKXtyZXR1cm4gTy5ufSksbi5kKHQsInNjYWxlUXVhbnRpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIE8ub30pLG4uZCh0LCJzY2FsZVRocmVzaG9sZCIsZnVuY3Rpb24oKXtyZXR1cm4gTy54fSksbi5kKHQsInNjYWxlVGltZSIsZnVuY3Rpb24oKXtyZXR1cm4gTy55fSksbi5kKHQsInNjYWxlVXRjIixmdW5jdGlvbigpe3JldHVybiBPLnp9KSxuLmQodCwic2NhbGVTZXF1ZW50aWFsIixmdW5jdGlvbigpe3JldHVybiBPLnB9KSxuLmQodCwic2NhbGVTZXF1ZW50aWFsTG9nIixmdW5jdGlvbigpe3JldHVybiBPLnF9KSxuLmQodCwic2NhbGVTZXF1ZW50aWFsUG93IixmdW5jdGlvbigpe3JldHVybiBPLnJ9KSxuLmQodCwic2NhbGVTZXF1ZW50aWFsU3FydCIsZnVuY3Rpb24oKXtyZXR1cm4gTy50fSksbi5kKHQsInNjYWxlU2VxdWVudGlhbFN5bWxvZyIsZnVuY3Rpb24oKXtyZXR1cm4gTy51fSksbi5kKHQsInNjYWxlU2VxdWVudGlhbFF1YW50aWxlIixmdW5jdGlvbigpe3JldHVybiBPLnN9KSxuLmQodCwic2NhbGVEaXZlcmdpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYn0pLG4uZCh0LCJzY2FsZURpdmVyZ2luZ0xvZyIsZnVuY3Rpb24oKXtyZXR1cm4gTy5jfSksbi5kKHQsInNjYWxlRGl2ZXJnaW5nUG93IixmdW5jdGlvbigpe3JldHVybiBPLmR9KSxuLmQodCwic2NhbGVEaXZlcmdpbmdTcXJ0IixmdW5jdGlvbigpe3JldHVybiBPLmV9KSxuLmQodCwic2NhbGVEaXZlcmdpbmdTeW1sb2ciLGZ1bmN0aW9uKCl7cmV0dXJuIE8uZn0pLG4uZCh0LCJ0aWNrRm9ybWF0IixmdW5jdGlvbigpe3JldHVybiBPLkF9KTt2YXIgUz1uKCIuL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2luZGV4LmpzIik7bi5kKHQsInNjaGVtZUNhdGVnb3J5MTAiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuUH0pLG4uZCh0LCJzY2hlbWVBY2NlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuS30pLG4uZCh0LCJzY2hlbWVEYXJrMiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5RfSksbi5kKHQsInNjaGVtZVBhaXJlZCIsZnVuY3Rpb24oKXtyZXR1cm4gUy5YfSksbi5kKHQsInNjaGVtZVBhc3RlbDEiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuWX0pLG4uZCh0LCJzY2hlbWVQYXN0ZWwyIixmdW5jdGlvbigpe3JldHVybiBTLlp9KSxuLmQodCwic2NoZW1lU2V0MSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTJ9KSxuLmQodCwic2NoZW1lU2V0MiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTN9KSxuLmQodCwic2NoZW1lU2V0MyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTR9KSxuLmQodCwiaW50ZXJwb2xhdGVCckJHIixmdW5jdGlvbigpe3JldHVybiBTLmJ9KSxuLmQodCwic2NoZW1lQnJCRyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5NfSksbi5kKHQsImludGVycG9sYXRlUFJHbiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5ufSksbi5kKHQsInNjaGVtZVBSR24iLGZ1bmN0aW9uKCl7cmV0dXJuIFMuV30pLG4uZCh0LCJpbnRlcnBvbGF0ZVBpWUciLGZ1bmN0aW9uKCl7cmV0dXJuIFMub30pLG4uZCh0LCJzY2hlbWVQaVlHIixmdW5jdGlvbigpe3JldHVybiBTLl8wfSksbi5kKHQsImludGVycG9sYXRlUHVPciIsZnVuY3Rpb24oKXtyZXR1cm4gUy5zfSksbi5kKHQsInNjaGVtZVB1T3IiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuXzN9KSxuLmQodCwiaW50ZXJwb2xhdGVSZEJ1IixmdW5jdGlvbigpe3JldHVybiBTLnd9KSxuLmQodCwic2NoZW1lUmRCdSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fNn0pLG4uZCh0LCJpbnRlcnBvbGF0ZVJkR3kiLGZ1bmN0aW9uKCl7cmV0dXJuIFMueH0pLG4uZCh0LCJzY2hlbWVSZEd5IixmdW5jdGlvbigpe3JldHVybiBTLl83fSksbi5kKHQsImludGVycG9sYXRlUmRZbEJ1IixmdW5jdGlvbigpe3JldHVybiBTLnp9KSxuLmQodCwic2NoZW1lUmRZbEJ1IixmdW5jdGlvbigpe3JldHVybiBTLl85fSksbi5kKHQsImludGVycG9sYXRlUmRZbEduIixmdW5jdGlvbigpe3JldHVybiBTLkF9KSxuLmQodCwic2NoZW1lUmRZbEduIixmdW5jdGlvbigpe3JldHVybiBTLl8xMH0pLG4uZCh0LCJpbnRlcnBvbGF0ZVNwZWN0cmFsIixmdW5jdGlvbigpe3JldHVybiBTLkR9KSxuLmQodCwic2NoZW1lU3BlY3RyYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuXzE1fSksbi5kKHQsImludGVycG9sYXRlQnVHbiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5jfSksbi5kKHQsInNjaGVtZUJ1R24iLGZ1bmN0aW9uKCl7cmV0dXJuIFMuTn0pLG4uZCh0LCJpbnRlcnBvbGF0ZUJ1UHUiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuZH0pLG4uZCh0LCJzY2hlbWVCdVB1IixmdW5jdGlvbigpe3JldHVybiBTLk99KSxuLmQodCwiaW50ZXJwb2xhdGVHbkJ1IixmdW5jdGlvbigpe3JldHVybiBTLmd9KSxuLmQodCwic2NoZW1lR25CdSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5SfSksbi5kKHQsImludGVycG9sYXRlT3JSZCIsZnVuY3Rpb24oKXtyZXR1cm4gUy5sfSksbi5kKHQsInNjaGVtZU9yUmQiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuVX0pLG4uZCh0LCJpbnRlcnBvbGF0ZVB1QnVHbiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5yfSksbi5kKHQsInNjaGVtZVB1QnVHbiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMn0pLG4uZCh0LCJpbnRlcnBvbGF0ZVB1QnUiLGZ1bmN0aW9uKCl7cmV0dXJuIFMucX0pLG4uZCh0LCJzY2hlbWVQdUJ1IixmdW5jdGlvbigpe3JldHVybiBTLl8xfSksbi5kKHQsImludGVycG9sYXRlUHVSZCIsZnVuY3Rpb24oKXtyZXR1cm4gUy50fSksbi5kKHQsInNjaGVtZVB1UmQiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuXzR9KSxuLmQodCwiaW50ZXJwb2xhdGVSZFB1IixmdW5jdGlvbigpe3JldHVybiBTLnl9KSxuLmQodCwic2NoZW1lUmRQdSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fOH0pLG4uZCh0LCJpbnRlcnBvbGF0ZVlsR25CdSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5IfSksbi5kKHQsInNjaGVtZVlsR25CdSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTd9KSxuLmQodCwiaW50ZXJwb2xhdGVZbEduIixmdW5jdGlvbigpe3JldHVybiBTLkd9KSxuLmQodCwic2NoZW1lWWxHbiIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTZ9KSxuLmQodCwiaW50ZXJwb2xhdGVZbE9yQnIiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuSX0pLG4uZCh0LCJzY2hlbWVZbE9yQnIiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuXzE4fSksbi5kKHQsImludGVycG9sYXRlWWxPclJkIixmdW5jdGlvbigpe3JldHVybiBTLkp9KSxuLmQodCwic2NoZW1lWWxPclJkIixmdW5jdGlvbigpe3JldHVybiBTLl8xOX0pLG4uZCh0LCJpbnRlcnBvbGF0ZUJsdWVzIixmdW5jdGlvbigpe3JldHVybiBTLmF9KSxuLmQodCwic2NoZW1lQmx1ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuTH0pLG4uZCh0LCJpbnRlcnBvbGF0ZUdyZWVucyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5ofSksbi5kKHQsInNjaGVtZUdyZWVucyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5TfSksbi5kKHQsImludGVycG9sYXRlR3JleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuaX0pLG4uZCh0LCJzY2hlbWVHcmV5cyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5UfSksbi5kKHQsImludGVycG9sYXRlUHVycGxlcyIsZnVuY3Rpb24oKXtyZXR1cm4gUy51fSksbi5kKHQsInNjaGVtZVB1cnBsZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFMuXzV9KSxuLmQodCwiaW50ZXJwb2xhdGVSZWRzIixmdW5jdGlvbigpe3JldHVybiBTLkJ9KSxuLmQodCwic2NoZW1lUmVkcyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5fMTF9KSxuLmQodCwiaW50ZXJwb2xhdGVPcmFuZ2VzIixmdW5jdGlvbigpe3JldHVybiBTLm19KSxuLmQodCwic2NoZW1lT3JhbmdlcyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5WfSksbi5kKHQsImludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdCIsZnVuY3Rpb24oKXtyZXR1cm4gUy5mfSksbi5kKHQsImludGVycG9sYXRlUmFpbmJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gUy52fSksbi5kKHQsImludGVycG9sYXRlV2FybSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5GfSksbi5kKHQsImludGVycG9sYXRlQ29vbCIsZnVuY3Rpb24oKXtyZXR1cm4gUy5lfSksbi5kKHQsImludGVycG9sYXRlU2luZWJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5DfSksbi5kKHQsImludGVycG9sYXRlVmlyaWRpcyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5FfSksbi5kKHQsImludGVycG9sYXRlTWFnbWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFMua30pLG4uZCh0LCJpbnRlcnBvbGF0ZUluZmVybm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFMuan0pLG4uZCh0LCJpbnRlcnBvbGF0ZVBsYXNtYSIsZnVuY3Rpb24oKXtyZXR1cm4gUy5wfSk7dmFyIFI9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpO24uZCh0LCJjcmVhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuY3JlYXRlfSksbi5kKHQsImNyZWF0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuY3JlYXRvcn0pLG4uZCh0LCJsb2NhbCIsZnVuY3Rpb24oKXtyZXR1cm4gUi5sb2NhbH0pLG4uZCh0LCJtYXRjaGVyIixmdW5jdGlvbigpe3JldHVybiBSLm1hdGNoZXJ9KSxuLmQodCwibW91c2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFIubW91c2V9KSxuLmQodCwibmFtZXNwYWNlIixmdW5jdGlvbigpe3JldHVybiBSLm5hbWVzcGFjZX0pLG4uZCh0LCJuYW1lc3BhY2VzIixmdW5jdGlvbigpe3JldHVybiBSLm5hbWVzcGFjZXN9KSxuLmQodCwiY2xpZW50UG9pbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuY2xpZW50UG9pbnR9KSxuLmQodCwic2VsZWN0IixmdW5jdGlvbigpe3JldHVybiBSLnNlbGVjdH0pLG4uZCh0LCJzZWxlY3RBbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuc2VsZWN0QWxsfSksbi5kKHQsInNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gUi5zZWxlY3Rpb259KSxuLmQodCwic2VsZWN0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuc2VsZWN0b3J9KSxuLmQodCwic2VsZWN0b3JBbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuc2VsZWN0b3JBbGx9KSxuLmQodCwic3R5bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuc3R5bGV9KSxuLmQodCwidG91Y2giLGZ1bmN0aW9uKCl7cmV0dXJuIFIudG91Y2h9KSxuLmQodCwidG91Y2hlcyIsZnVuY3Rpb24oKXtyZXR1cm4gUi50b3VjaGVzfSksbi5kKHQsIndpbmRvdyIsZnVuY3Rpb24oKXtyZXR1cm4gUi53aW5kb3d9KSxuLmQodCwiZXZlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuZXZlbnR9KSxuLmQodCwiY3VzdG9tRXZlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuY3VzdG9tRXZlbnR9KTt2YXIgaj1uKCIuL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanMiKTtuLmQodCwiYXJjIixmdW5jdGlvbigpe3JldHVybiBqLmF9KSxuLmQodCwiYXJlYSIsZnVuY3Rpb24oKXtyZXR1cm4gai5ifSksbi5kKHQsImxpbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGoudn0pLG4uZCh0LCJwaWUiLGZ1bmN0aW9uKCl7cmV0dXJuIGouQX0pLG4uZCh0LCJhcmVhUmFkaWFsIixmdW5jdGlvbigpe3JldHVybiBqLmN9KSxuLmQodCwicmFkaWFsQXJlYSIsZnVuY3Rpb24oKXtyZXR1cm4gai5DfSksbi5kKHQsImxpbmVSYWRpYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIGoud30pLG4uZCh0LCJyYWRpYWxMaW5lIixmdW5jdGlvbigpe3JldHVybiBqLkR9KSxuLmQodCwicG9pbnRSYWRpYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIGouQn0pLG4uZCh0LCJsaW5rSG9yaXpvbnRhbCIsZnVuY3Rpb24oKXtyZXR1cm4gai54fSksbi5kKHQsImxpbmtWZXJ0aWNhbCIsZnVuY3Rpb24oKXtyZXR1cm4gai56fSksbi5kKHQsImxpbmtSYWRpYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIGoueX0pLG4uZCh0LCJzeW1ib2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGouUX0pLG4uZCh0LCJzeW1ib2xzIixmdW5jdGlvbigpe3JldHVybiBqLll9KSxuLmQodCwic3ltYm9sQ2lyY2xlIixmdW5jdGlvbigpe3JldHVybiBqLlJ9KSxuLmQodCwic3ltYm9sQ3Jvc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIGouU30pLG4uZCh0LCJzeW1ib2xEaWFtb25kIixmdW5jdGlvbigpe3JldHVybiBqLlR9KSxuLmQodCwic3ltYm9sU3F1YXJlIixmdW5jdGlvbigpe3JldHVybiBqLlV9KSxuLmQodCwic3ltYm9sU3RhciIsZnVuY3Rpb24oKXtyZXR1cm4gai5WfSksbi5kKHQsInN5bWJvbFRyaWFuZ2xlIixmdW5jdGlvbigpe3JldHVybiBqLld9KSxuLmQodCwic3ltYm9sV3llIixmdW5jdGlvbigpe3JldHVybiBqLlh9KSxuLmQodCwiY3VydmVCYXNpc0Nsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5lfSksbi5kKHQsImN1cnZlQmFzaXNPcGVuIixmdW5jdGlvbigpe3JldHVybiBqLmZ9KSxuLmQodCwiY3VydmVCYXNpcyIsZnVuY3Rpb24oKXtyZXR1cm4gai5kfSksbi5kKHQsImN1cnZlQnVuZGxlIixmdW5jdGlvbigpe3JldHVybiBqLmd9KSxuLmQodCwiY3VydmVDYXJkaW5hbENsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5pfSksbi5kKHQsImN1cnZlQ2FyZGluYWxPcGVuIixmdW5jdGlvbigpe3JldHVybiBqLmp9KSxuLmQodCwiY3VydmVDYXJkaW5hbCIsZnVuY3Rpb24oKXtyZXR1cm4gai5ofSksbi5kKHQsImN1cnZlQ2F0bXVsbFJvbUNsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5sfSksbi5kKHQsImN1cnZlQ2F0bXVsbFJvbU9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGoubX0pLG4uZCh0LCJjdXJ2ZUNhdG11bGxSb20iLGZ1bmN0aW9uKCl7cmV0dXJuIGoua30pLG4uZCh0LCJjdXJ2ZUxpbmVhckNsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5vfSksbi5kKHQsImN1cnZlTGluZWFyIixmdW5jdGlvbigpe3JldHVybiBqLm59KSxuLmQodCwiY3VydmVNb25vdG9uZVgiLGZ1bmN0aW9uKCl7cmV0dXJuIGoucH0pLG4uZCh0LCJjdXJ2ZU1vbm90b25lWSIsZnVuY3Rpb24oKXtyZXR1cm4gai5xfSksbi5kKHQsImN1cnZlTmF0dXJhbCIsZnVuY3Rpb24oKXtyZXR1cm4gai5yfSksbi5kKHQsImN1cnZlU3RlcCIsZnVuY3Rpb24oKXtyZXR1cm4gai5zfSksbi5kKHQsImN1cnZlU3RlcEFmdGVyIixmdW5jdGlvbigpe3JldHVybiBqLnR9KSxuLmQodCwiY3VydmVTdGVwQmVmb3JlIixmdW5jdGlvbigpe3JldHVybiBqLnV9KSxuLmQodCwic3RhY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGouRX0pLG4uZCh0LCJzdGFja09mZnNldEV4cGFuZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5HfSksbi5kKHQsInN0YWNrT2Zmc2V0RGl2ZXJnaW5nIixmdW5jdGlvbigpe3JldHVybiBqLkZ9KSxuLmQodCwic3RhY2tPZmZzZXROb25lIixmdW5jdGlvbigpe3JldHVybiBqLkh9KSxuLmQodCwic3RhY2tPZmZzZXRTaWxob3VldHRlIixmdW5jdGlvbigpe3JldHVybiBqLkl9KSxuLmQodCwic3RhY2tPZmZzZXRXaWdnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGouSn0pLG4uZCh0LCJzdGFja09yZGVyQXBwZWFyYW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gai5LfSksbi5kKHQsInN0YWNrT3JkZXJBc2NlbmRpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIGouTH0pLG4uZCh0LCJzdGFja09yZGVyRGVzY2VuZGluZyIsZnVuY3Rpb24oKXtyZXR1cm4gai5NfSksbi5kKHQsInN0YWNrT3JkZXJJbnNpZGVPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGouTn0pLG4uZCh0LCJzdGFja09yZGVyTm9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gai5PfSksbi5kKHQsInN0YWNrT3JkZXJSZXZlcnNlIixmdW5jdGlvbigpe3JldHVybiBqLlB9KTt2YXIgeD1uKCIuL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbmRleC5qcyIpO24uZCh0LCJ0aW1lSW50ZXJ2YWwiLGZ1bmN0aW9uKCl7cmV0dXJuIHguZ30pLG4uZCh0LCJ0aW1lTWlsbGlzZWNvbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHguaH0pLG4uZCh0LCJ0aW1lTWlsbGlzZWNvbmRzIixmdW5jdGlvbigpe3JldHVybiB4Lml9KSxuLmQodCwidXRjTWlsbGlzZWNvbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHguTH0pLG4uZCh0LCJ1dGNNaWxsaXNlY29uZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguTX0pLG4uZCh0LCJ0aW1lU2Vjb25kIixmdW5jdGlvbigpe3JldHVybiB4LnJ9KSxuLmQodCwidGltZVNlY29uZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguc30pLG4uZCh0LCJ1dGNTZWNvbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHguVn0pLG4uZCh0LCJ1dGNTZWNvbmRzIixmdW5jdGlvbigpe3JldHVybiB4Lld9KSxuLmQodCwidGltZU1pbnV0ZSIsZnVuY3Rpb24oKXtyZXR1cm4geC5qfSksbi5kKHQsInRpbWVNaW51dGVzIixmdW5jdGlvbigpe3JldHVybiB4Lmt9KSxuLmQodCwidGltZUhvdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHguZX0pLG4uZCh0LCJ0aW1lSG91cnMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguZn0pLG4uZCh0LCJ0aW1lRGF5IixmdW5jdGlvbigpe3JldHVybiB4LmF9KSxuLmQodCwidGltZURheXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguYn0pLG4uZCh0LCJ0aW1lV2VlayIsZnVuY3Rpb24oKXtyZXR1cm4geC5CfSksbi5kKHQsInRpbWVXZWVrcyIsZnVuY3Rpb24oKXtyZXR1cm4geC5DfSksbi5kKHQsInRpbWVTdW5kYXkiLGZ1bmN0aW9uKCl7cmV0dXJuIHgudH0pLG4uZCh0LCJ0aW1lU3VuZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC51fSksbi5kKHQsInRpbWVNb25kYXkiLGZ1bmN0aW9uKCl7cmV0dXJuIHgubH0pLG4uZCh0LCJ0aW1lTW9uZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC5tfSksbi5kKHQsInRpbWVUdWVzZGF5IixmdW5jdGlvbigpe3JldHVybiB4Lnh9KSxuLmQodCwidGltZVR1ZXNkYXlzIixmdW5jdGlvbigpe3JldHVybiB4Lnl9KSxuLmQodCwidGltZVdlZG5lc2RheSIsZnVuY3Rpb24oKXtyZXR1cm4geC56fSksbi5kKHQsInRpbWVXZWRuZXNkYXlzIixmdW5jdGlvbigpe3JldHVybiB4LkF9KSxuLmQodCwidGltZVRodXJzZGF5IixmdW5jdGlvbigpe3JldHVybiB4LnZ9KSxuLmQodCwidGltZVRodXJzZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC53fSksbi5kKHQsInRpbWVGcmlkYXkiLGZ1bmN0aW9uKCl7cmV0dXJuIHguY30pLG4uZCh0LCJ0aW1lRnJpZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC5kfSksbi5kKHQsInRpbWVTYXR1cmRheSIsZnVuY3Rpb24oKXtyZXR1cm4geC5wfSksbi5kKHQsInRpbWVTYXR1cmRheXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHgucX0pLG4uZCh0LCJ0aW1lTW9udGgiLGZ1bmN0aW9uKCl7cmV0dXJuIHgubn0pLG4uZCh0LCJ0aW1lTW9udGhzIixmdW5jdGlvbigpe3JldHVybiB4Lm99KSxuLmQodCwidGltZVllYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHguRH0pLG4uZCh0LCJ0aW1lWWVhcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguRX0pLG4uZCh0LCJ1dGNNaW51dGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHguTn0pLG4uZCh0LCJ1dGNNaW51dGVzIixmdW5jdGlvbigpe3JldHVybiB4Lk99KSxuLmQodCwidXRjSG91ciIsZnVuY3Rpb24oKXtyZXR1cm4geC5KfSksbi5kKHQsInV0Y0hvdXJzIixmdW5jdGlvbigpe3JldHVybiB4Lkt9KSxuLmQodCwidXRjRGF5IixmdW5jdGlvbigpe3JldHVybiB4LkZ9KSxuLmQodCwidXRjRGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC5HfSksbi5kKHQsInV0Y1dlZWsiLGZ1bmN0aW9uKCl7cmV0dXJuIHguXzV9KSxuLmQodCwidXRjV2Vla3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHguXzZ9KSxuLmQodCwidXRjU3VuZGF5IixmdW5jdGlvbigpe3JldHVybiB4Llh9KSxuLmQodCwidXRjU3VuZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC5ZfSksbi5kKHQsInV0Y01vbmRheSIsZnVuY3Rpb24oKXtyZXR1cm4geC5QfSksbi5kKHQsInV0Y01vbmRheXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguUX0pLG4uZCh0LCJ1dGNUdWVzZGF5IixmdW5jdGlvbigpe3JldHVybiB4Ll8xfSksbi5kKHQsInV0Y1R1ZXNkYXlzIixmdW5jdGlvbigpe3JldHVybiB4Ll8yfSksbi5kKHQsInV0Y1dlZG5lc2RheSIsZnVuY3Rpb24oKXtyZXR1cm4geC5fM30pLG4uZCh0LCJ1dGNXZWRuZXNkYXlzIixmdW5jdGlvbigpe3JldHVybiB4Ll80fSksbi5kKHQsInV0Y1RodXJzZGF5IixmdW5jdGlvbigpe3JldHVybiB4Llp9KSxuLmQodCwidXRjVGh1cnNkYXlzIixmdW5jdGlvbigpe3JldHVybiB4Ll8wfSksbi5kKHQsInV0Y0ZyaWRheSIsZnVuY3Rpb24oKXtyZXR1cm4geC5IfSksbi5kKHQsInV0Y0ZyaWRheXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHguSX0pLG4uZCh0LCJ1dGNTYXR1cmRheSIsZnVuY3Rpb24oKXtyZXR1cm4geC5UfSksbi5kKHQsInV0Y1NhdHVyZGF5cyIsZnVuY3Rpb24oKXtyZXR1cm4geC5VfSksbi5kKHQsInV0Y01vbnRoIixmdW5jdGlvbigpe3JldHVybiB4LlJ9KSxuLmQodCwidXRjTW9udGhzIixmdW5jdGlvbigpe3JldHVybiB4LlN9KSxuLmQodCwidXRjWWVhciIsZnVuY3Rpb24oKXtyZXR1cm4geC5fN30pLG4uZCh0LCJ1dGNZZWFycyIsZnVuY3Rpb24oKXtyZXR1cm4geC5fOH0pO3ZhciBMPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pbmRleC5qcyIpO24uZCh0LCJ0aW1lRm9ybWF0RGVmYXVsdExvY2FsZSIsZnVuY3Rpb24oKXtyZXR1cm4gTC5kfSksbi5kKHQsInRpbWVGb3JtYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuY30pLG4uZCh0LCJ0aW1lUGFyc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuZn0pLG4uZCh0LCJ1dGNGb3JtYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuZ30pLG4uZCh0LCJ1dGNQYXJzZSIsZnVuY3Rpb24oKXtyZXR1cm4gTC5ofSksbi5kKHQsInRpbWVGb3JtYXRMb2NhbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuZX0pLG4uZCh0LCJpc29Gb3JtYXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEwuYX0pLG4uZCh0LCJpc29QYXJzZSIsZnVuY3Rpb24oKXtyZXR1cm4gTC5ifSk7dmFyIEQ9bigiLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2luZGV4LmpzIik7bi5kKHQsIm5vdyIsZnVuY3Rpb24oKXtyZXR1cm4gRC5ifSksbi5kKHQsInRpbWVyIixmdW5jdGlvbigpe3JldHVybiBELmR9KSxuLmQodCwidGltZXJGbHVzaCIsZnVuY3Rpb24oKXtyZXR1cm4gRC5lfSksbi5kKHQsInRpbWVvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEQuY30pLG4uZCh0LCJpbnRlcnZhbCIsZnVuY3Rpb24oKXtyZXR1cm4gRC5hfSk7dmFyIHc9bigiLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW5kZXguanMiKTtuLmQodCwidHJhbnNpdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gdy5jfSksbi5kKHQsImFjdGl2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gdy5hfSksbi5kKHQsImludGVycnVwdCIsZnVuY3Rpb24oKXtyZXR1cm4gdy5ifSk7dmFyIE09bigiLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvaW5kZXguanMiKTtuLmQodCwidm9yb25vaSIsZnVuY3Rpb24oKXtyZXR1cm4gTS5hfSk7dmFyIGs9bigiLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanMiKTtuLmQodCwiem9vbSIsZnVuY3Rpb24oKXtyZXR1cm4gay5hfSksbi5kKHQsInpvb21UcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGsuY30pLG4uZCh0LCJ6b29tSWRlbnRpdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGsuYn0pfSwiLi9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPXR5cGVvZiBlfHwibnVtYmVyIiE9dHlwZW9mIGUubGVuZ3RoKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiYhKGUubGVuZ3RoPjAmJiJudW1iZXIiIT10eXBlb2YgZVswXSkpfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciBzLGM7aWYocihlKXx8cih0KSlyZXR1cm4hMTtpZihlLnByb3RvdHlwZSE9PXQucHJvdG90eXBlKXJldHVybiExO2lmKGwoZSkpcmV0dXJuISFsKHQpJiYoZT1pLmNhbGwoZSksdD1pLmNhbGwodCksdShlLHQsbikpO2lmKG8oZSkpe2lmKCFvKHQpKXJldHVybiExO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKylpZihlW3NdIT09dFtzXSlyZXR1cm4hMTtyZXR1cm4hMH10cnl7dmFyIGQ9YShlKSxfPWEodCl9Y2F0Y2goZSl7cmV0dXJuITF9aWYoZC5sZW5ndGghPV8ubGVuZ3RoKXJldHVybiExO2ZvcihkLnNvcnQoKSxfLnNvcnQoKSxzPWQubGVuZ3RoLTE7cz49MDtzLS0paWYoZFtzXSE9X1tzXSlyZXR1cm4hMTtmb3Iocz1kLmxlbmd0aC0xO3M+PTA7cy0tKWlmKGM9ZFtzXSwhdShlW2NdLHRbY10sbikpcmV0dXJuITE7cmV0dXJuIHR5cGVvZiBlPT10eXBlb2YgdH12YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UsYT1uKCIuL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9rZXlzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiKSx1PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fChuPXt9KSxlPT09dHx8KGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpOiFlfHwhdHx8Im9iamVjdCIhPXR5cGVvZiBlJiYib2JqZWN0IiE9dHlwZW9mIHQ/bi5zdHJpY3Q/ZT09PXQ6ZT09dDpzKGUsdCxuKSl9fSwiLi9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIvaXNfYXJndW1lbnRzLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiByKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJjYWxsZWUiKSYmIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCJjYWxsZWUiKXx8ITF9dmFyIG89IltvYmplY3QgQXJndW1lbnRzXSI9PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpfSgpO3Q9ZS5leHBvcnRzPW8/bjpyLHQuc3VwcG9ydGVkPW4sdC51bnN1cHBvcnRlZD1yfSwiLi9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXQucHVzaChuKTtyZXR1cm4gdH10PWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXM/T2JqZWN0LmtleXM6bix0LnNoaW09bn0sIi4vbm9kZV9tb2R1bGVzL2RlZXAtZXh0ZW5kL2xpYi9kZWVwLWV4dGVuZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7LyohCiAqIEBkZXNjcmlwdGlvbiBSZWN1cnNpdmUgb2JqZWN0IGV4dGVuZGluZwogKiBAYXV0aG9yIFZpYWNoZXNsYXYgTG90c21hbm92IDxsb3RzbWFub3Y4OUBnbWFpbC5jb20+CiAqIEBsaWNlbnNlIE1JVAogKgogKiBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKICoKICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgVmlhY2hlc2xhdiBMb3RzbWFub3YKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgogKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgogKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCiAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAogKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCiAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCiAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwpmdW5jdGlvbiBuKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8ZSBpbnN0YW5jZW9mIERhdGV8fGUgaW5zdGFuY2VvZiBSZWdFeHB9ZnVuY3Rpb24gcihlKXtpZihlIGluc3RhbmNlb2YgdCl7dmFyIG49bmV3IHQoZS5sZW5ndGgpO3JldHVybiBlLmNvcHkobiksbn1pZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZS5nZXRUaW1lKCkpO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG5ldyBSZWdFeHAoZSk7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHNpdHVhdGlvbiIpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWU/QXJyYXkuaXNBcnJheShlKT90W2ldPW8oZSk6bihlKT90W2ldPXIoZSk6dFtpXT1zKHt9LGUpOnRbaV09ZX0pLHR9dmFyIHM9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxfHwib2JqZWN0IiE9dHlwZW9mIGFyZ3VtZW50c1swXSlyZXR1cm4hMTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuIGFyZ3VtZW50c1swXTt2YXIgZSx0LGk9YXJndW1lbnRzWzBdLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oYSl7Im9iamVjdCIhPXR5cGVvZiBhfHxBcnJheS5pc0FycmF5KGEpfHxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3JldHVybiB0PWlbbF0sZT1hW2xdLGU9PT1pP3ZvaWQgMDoib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lP3ZvaWQoaVtsXT1lKTpBcnJheS5pc0FycmF5KGUpP3ZvaWQoaVtsXT1vKGUpKTpuKGUpP3ZvaWQoaVtsXT1yKGUpKToib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10fHxBcnJheS5pc0FycmF5KHQpP3ZvaWQoaVtsXT1zKHt9LGUpKTp2b2lkKGlbbF09cyh0LGUpKX0pfSksaX19KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcil9LCIuL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEhZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09dHx8IltvYmplY3QgRGF0ZV0iPT09dHx8cyhlKX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLiQkdHlwZW9mPT09cH1mdW5jdGlvbiBpKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOnt9fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4hMSE9PXQuY2xvbmUmJnQuaXNNZXJnZWFibGVPYmplY3QoZSk/YyhpKGUpLGUsdCk6ZX1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gZS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUsbil9KX1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj17fTtyZXR1cm4gbi5pc01lcmdlYWJsZU9iamVjdChlKSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWEoZVt0XSxuKX0pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obyl7bi5pc01lcmdlYWJsZU9iamVjdCh0W29dKSYmZVtvXT9yW29dPWMoZVtvXSx0W29dLG4pOnJbb109YSh0W29dLG4pfSkscn1mdW5jdGlvbiBjKGUsdCxuKXtuPW58fHt9LG4uYXJyYXlNZXJnZT1uLmFycmF5TWVyZ2V8fGwsbi5pc01lcmdlYWJsZU9iamVjdD1uLmlzTWVyZ2VhYmxlT2JqZWN0fHxkO3ZhciByPUFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHI9PT1BcnJheS5pc0FycmF5KGUpP3I/bi5hcnJheU1lcmdlKGUsdCxuKTp1KGUsdCxuKTphKHQsbil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpJiYhbyhlKX0sXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHA9Xz9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDM7Yy5hbGw9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBjKGUsbix0KX0se30pfTt2YXIgZj1jO3QuZGVmYXVsdD1mfSwiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2FkanVzdEZvclZpZXdwb3J0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIHM9by5hLmNsb25lKGUpLGk9e3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fTtyZXR1cm4gci5hZGp1c3RYJiZzLmxlZnQ8bi5sZWZ0JiYocy5sZWZ0PW4ubGVmdCksci5yZXNpemVXaWR0aCYmcy5sZWZ0Pj1uLmxlZnQmJnMubGVmdCtpLndpZHRoPm4ucmlnaHQmJihpLndpZHRoLT1zLmxlZnQraS53aWR0aC1uLnJpZ2h0KSxyLmFkanVzdFgmJnMubGVmdCtpLndpZHRoPm4ucmlnaHQmJihzLmxlZnQ9TWF0aC5tYXgobi5yaWdodC1pLndpZHRoLG4ubGVmdCkpLHIuYWRqdXN0WSYmcy50b3A8bi50b3AmJihzLnRvcD1uLnRvcCksci5yZXNpemVIZWlnaHQmJnMudG9wPj1uLnRvcCYmcy50b3AraS5oZWlnaHQ+bi5ib3R0b20mJihpLmhlaWdodC09cy50b3AraS5oZWlnaHQtbi5ib3R0b20pLHIuYWRqdXN0WSYmcy50b3AraS5oZWlnaHQ+bi5ib3R0b20mJihzLnRvcD1NYXRoLm1heChuLmJvdHRvbS1pLmhlaWdodCxuLnRvcCkpLG8uYS5taXgocyxpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvdXRpbHMuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9hbGlnbi9hbGlnbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gZS5sZWZ0PG4ubGVmdHx8ZS5sZWZ0K3Qud2lkdGg+bi5yaWdodH1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gZS50b3A8bi50b3B8fGUudG9wK3QuaGVpZ2h0Pm4uYm90dG9tfWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBlLmxlZnQ+bi5yaWdodHx8ZS5sZWZ0K3Qud2lkdGg8bi5sZWZ0fWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBlLnRvcD5uLmJvdHRvbXx8ZS50b3ArdC5oZWlnaHQ8bi50b3B9ZnVuY3Rpb24gYShlLHQsbil7dmFyIHI9W107cmV0dXJuIF8uYS5lYWNoKGUsZnVuY3Rpb24oZSl7ci5wdXNoKGUucmVwbGFjZSh0LGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSkpfSkscn1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGVbdF09LWVbdF0sZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKC8lJC8udGVzdChlKT9wYXJzZUludChlLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpLDEwKS8xMDAqdDpwYXJzZUludChlLDEwKSl8fDB9ZnVuY3Rpb24gYyhlLHQpe2VbMF09dShlWzBdLHQud2lkdGgpLGVbMV09dShlWzFdLHQuaGVpZ2h0KX1mdW5jdGlvbiBkKGUsdCxuLHUpe3ZhciBkPW4ucG9pbnRzLGc9bi5vZmZzZXR8fFswLDBdLGI9bi50YXJnZXRPZmZzZXR8fFswLDBdLEU9bi5vdmVyZmxvdyx5PW4uc291cmNlfHxlO2c9W10uY29uY2F0KGcpLGI9W10uY29uY2F0KGIpLEU9RXx8e307dmFyIHY9e30sVD0wLEE9T2JqZWN0KHAuYSkoeSksQz1PYmplY3QobS5hKSh5KTtjKGcsQyksYyhiLHQpO3ZhciBPPU9iamVjdChoLmEpKEMsdCxkLGcsYiksUz1fLmEubWVyZ2UoQyxPKTtpZihBJiYoRS5hZGp1c3RYfHxFLmFkanVzdFkpJiZ1KXtpZihFLmFkanVzdFgmJnIoTyxDLEEpKXt2YXIgUj1hKGQsL1tscl0vZ2kse2w6InIiLHI6ImwifSksaj1sKGcsMCkseD1sKGIsMCk7cyhPYmplY3QoaC5hKShDLHQsUixqLHgpLEMsQSl8fChUPTEsZD1SLGc9aixiPXgpfWlmKEUuYWRqdXN0WSYmbyhPLEMsQSkpe3ZhciBMPWEoZCwvW3RiXS9naSx7dDoiYiIsYjoidCJ9KSxEPWwoZywxKSx3PWwoYiwxKTtpKE9iamVjdChoLmEpKEMsdCxMLEQsdyksQyxBKXx8KFQ9MSxkPUwsZz1ELGI9dyl9VCYmKE89T2JqZWN0KGguYSkoQyx0LGQsZyxiKSxfLmEubWl4KFMsTykpO3ZhciBNPXIoTyxDLEEpLGs9byhPLEMsQSk7KE18fGspJiYoZD1uLnBvaW50cyxnPW4ub2Zmc2V0fHxbMCwwXSxiPW4udGFyZ2V0T2Zmc2V0fHxbMCwwXSksdi5hZGp1c3RYPUUuYWRqdXN0WCYmTSx2LmFkanVzdFk9RS5hZGp1c3RZJiZrLCh2LmFkanVzdFh8fHYuYWRqdXN0WSkmJihTPU9iamVjdChmLmEpKE8sQyxBLHYpKX1yZXR1cm4gUy53aWR0aCE9PUMud2lkdGgmJl8uYS5jc3MoeSwid2lkdGgiLF8uYS53aWR0aCh5KStTLndpZHRoLUMud2lkdGgpLFMuaGVpZ2h0IT09Qy5oZWlnaHQmJl8uYS5jc3MoeSwiaGVpZ2h0IixfLmEuaGVpZ2h0KHkpK1MuaGVpZ2h0LUMuaGVpZ2h0KSxfLmEub2Zmc2V0KHkse2xlZnQ6Uy5sZWZ0LHRvcDpTLnRvcH0se3VzZUNzc1JpZ2h0Om4udXNlQ3NzUmlnaHQsdXNlQ3NzQm90dG9tOm4udXNlQ3NzQm90dG9tLHVzZUNzc1RyYW5zZm9ybTpuLnVzZUNzc1RyYW5zZm9ybSxpZ25vcmVTaGFrZTpuLmlnbm9yZVNoYWtlfSkse3BvaW50czpkLG9mZnNldDpnLHRhcmdldE9mZnNldDpiLG92ZXJmbG93OnZ9fXZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy91dGlscy5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2dldFZpc2libGVSZWN0Rm9yRWxlbWVudC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2FkanVzdEZvclZpZXdwb3J0LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0UmVnaW9uLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0RWxGdXR1cmVQb3MuanMiKTt0LmE9ZH0sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9hbGlnbi9hbGlnbkVsZW1lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3QoYS5hKShlKSxuPU9iamVjdChsLmEpKGUpO3JldHVybiF0fHxuLmxlZnQrbi53aWR0aDw9dC5sZWZ0fHxuLnRvcCtuLmhlaWdodDw9dC50b3B8fG4ubGVmdD49dC5yaWdodHx8bi50b3A+PXQuYm90dG9tfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBvPW4udGFyZ2V0fHx0LGk9T2JqZWN0KGwuYSkobyksYT0hcihvKTtyZXR1cm4gT2JqZWN0KHMuYSkoZSxpLG4sYSl9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2FsaWduL2FsaWduLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0T2Zmc2V0UGFyZW50LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0VmlzaWJsZVJlY3RGb3JFbGVtZW50LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0UmVnaW9uLmpzIik7by5fX2dldE9mZnNldFBhcmVudD1pLmEsby5fX2dldFZpc2libGVSZWN0Rm9yRWxlbWVudD1hLmEsdC5hPW99LCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvYWxpZ24vYWxpZ25Qb2ludC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj12b2lkIDAsYT12b2lkIDAsbD1vLmEuZ2V0RG9jdW1lbnQoZSksdT1sLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvdyxjPW8uYS5nZXRXaW5kb3dTY3JvbGxMZWZ0KHUpLGQ9by5hLmdldFdpbmRvd1Njcm9sbFRvcCh1KSxfPW8uYS52aWV3cG9ydFdpZHRoKHUpLHA9by5hLnZpZXdwb3J0SGVpZ2h0KHUpO3I9InBhZ2VYImluIHQ/dC5wYWdlWDpjK3QuY2xpZW50WCxhPSJwYWdlWSJpbiB0P3QucGFnZVk6ZCt0LmNsaWVudFk7dmFyIGY9e2xlZnQ6cix0b3A6YSx3aWR0aDowLGhlaWdodDowfSxtPXI+PTAmJnI8PWMrXyYmYT49MCYmYTw9ZCtwLGg9W24ucG9pbnRzWzBdLCJjYyJdO3JldHVybiBPYmplY3Qocy5hKShlLGYsaSh7fSxuLHtwb2ludHM6aH0pLG0pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy91dGlscy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2FsaWduL2FsaWduLmpzIiksaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9nZXRBbGlnbk9mZnNldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49dC5jaGFyQXQoMCkscj10LmNoYXJBdCgxKSxvPWUud2lkdGgscz1lLmhlaWdodCxpPWUubGVmdCxhPWUudG9wO3JldHVybiJjIj09PW4/YSs9cy8yOiJiIj09PW4mJihhKz1zKSwiYyI9PT1yP2krPW8vMjoiciI9PT1yJiYoaSs9bykse2xlZnQ6aSx0b3A6YX19dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0RWxGdXR1cmVQb3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLHMpe3ZhciBpPU9iamVjdChvLmEpKHQsblsxXSksYT1PYmplY3Qoby5hKShlLG5bMF0pLGw9W2EubGVmdC1pLmxlZnQsYS50b3AtaS50b3BdO3JldHVybntsZWZ0OmUubGVmdC1sWzBdK3JbMF0tc1swXSx0b3A6ZS50b3AtbFsxXStyWzFdLXNbMV19fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9nZXRBbGlnbk9mZnNldC5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2dldE9mZnNldFBhcmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG8uYS5pc1dpbmRvdyhlKXx8OT09PWUubm9kZVR5cGUpcmV0dXJuIG51bGw7dmFyIHQ9by5hLmdldERvY3VtZW50KGUpLG49dC5ib2R5LHI9dm9pZCAwLHM9by5hLmNzcyhlLCJwb3NpdGlvbiIpO2lmKCJmaXhlZCIhPT1zJiYiYWJzb2x1dGUiIT09cylyZXR1cm4iaHRtbCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDplLnBhcmVudE5vZGU7Zm9yKHI9ZS5wYXJlbnROb2RlO3ImJnIhPT1uO3I9ci5wYXJlbnROb2RlKWlmKCJzdGF0aWMiIT09KHM9by5hLmNzcyhyLCJwb3NpdGlvbiIpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvdXRpbHMuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9nZXRSZWdpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD12b2lkIDAsbj12b2lkIDAscj12b2lkIDA7aWYoby5hLmlzV2luZG93KGUpfHw5PT09ZS5ub2RlVHlwZSl7dmFyIHM9by5hLmdldFdpbmRvdyhlKTt0PXtsZWZ0Om8uYS5nZXRXaW5kb3dTY3JvbGxMZWZ0KHMpLHRvcDpvLmEuZ2V0V2luZG93U2Nyb2xsVG9wKHMpfSxuPW8uYS52aWV3cG9ydFdpZHRoKHMpLHI9by5hLnZpZXdwb3J0SGVpZ2h0KHMpfWVsc2UgdD1vLmEub2Zmc2V0KGUpLG49by5hLm91dGVyV2lkdGgoZSkscj1vLmEub3V0ZXJIZWlnaHQoZSk7cmV0dXJuIHQud2lkdGg9bix0LmhlaWdodD1yLHR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL3V0aWxzLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvZ2V0VmlzaWJsZVJlY3RGb3JFbGVtZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PXtsZWZ0OjAscmlnaHQ6MS8wLHRvcDowLGJvdHRvbToxLzB9LG49T2JqZWN0KHMuYSkoZSkscj1vLmEuZ2V0RG9jdW1lbnQoZSksYT1yLmRlZmF1bHRWaWV3fHxyLnBhcmVudFdpbmRvdyxsPXIuYm9keSx1PXIuZG9jdW1lbnRFbGVtZW50O247KXtpZigtMSE9PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpJiYwPT09bi5jbGllbnRXaWR0aHx8bj09PWx8fG49PT11fHwidmlzaWJsZSI9PT1vLmEuY3NzKG4sIm92ZXJmbG93Iikpe2lmKG49PT1sfHxuPT09dSlicmVha31lbHNle3ZhciBjPW8uYS5vZmZzZXQobik7Yy5sZWZ0Kz1uLmNsaWVudExlZnQsYy50b3ArPW4uY2xpZW50VG9wLHQudG9wPU1hdGgubWF4KHQudG9wLGMudG9wKSx0LnJpZ2h0PU1hdGgubWluKHQucmlnaHQsYy5sZWZ0K24uY2xpZW50V2lkdGgpLHQuYm90dG9tPU1hdGgubWluKHQuYm90dG9tLGMudG9wK24uY2xpZW50SGVpZ2h0KSx0LmxlZnQ9TWF0aC5tYXgodC5sZWZ0LGMubGVmdCl9bj1PYmplY3Qocy5hKShuKX12YXIgZD1udWxsO2lmKCFvLmEuaXNXaW5kb3coZSkmJjkhPT1lLm5vZGVUeXBlKXtkPWUuc3R5bGUucG9zaXRpb247ImFic29sdXRlIj09PW8uYS5jc3MoZSwicG9zaXRpb24iKSYmKGUuc3R5bGUucG9zaXRpb249ImZpeGVkIil9dmFyIF89by5hLmdldFdpbmRvd1Njcm9sbExlZnQoYSkscD1vLmEuZ2V0V2luZG93U2Nyb2xsVG9wKGEpLGY9by5hLnZpZXdwb3J0V2lkdGgoYSksbT1vLmEudmlld3BvcnRIZWlnaHQoYSksaD11LnNjcm9sbFdpZHRoLGc9dS5zY3JvbGxIZWlnaHQsYj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsKTtpZigiaGlkZGVuIj09PWIub3ZlcmZsb3dYJiYoaD1hLmlubmVyV2lkdGgpLCJoaWRkZW4iPT09Yi5vdmVyZmxvd1kmJihnPWEuaW5uZXJIZWlnaHQpLGUuc3R5bGUmJihlLnN0eWxlLnBvc2l0aW9uPWQpLE9iamVjdChpLmEpKGUpKXQubGVmdD1NYXRoLm1heCh0LmxlZnQsXyksdC50b3A9TWF0aC5tYXgodC50b3AscCksdC5yaWdodD1NYXRoLm1pbih0LnJpZ2h0LF8rZiksdC5ib3R0b209TWF0aC5taW4odC5ib3R0b20scCttKTtlbHNle3ZhciBFPU1hdGgubWF4KGgsXytmKTt0LnJpZ2h0PU1hdGgubWluKHQucmlnaHQsRSk7dmFyIHk9TWF0aC5tYXgoZyxwK20pO3QuYm90dG9tPU1hdGgubWluKHQuYm90dG9tLHkpfXJldHVybiB0LnRvcD49MCYmdC5sZWZ0Pj0wJiZ0LmJvdHRvbT50LnRvcCYmdC5yaWdodD50LmxlZnQ/dDpudWxsfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy91dGlscy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2dldE9mZnNldFBhcmVudC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2lzQW5jZXN0b3JGaXhlZC5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9hbGlnbi9hbGlnbkVsZW1lbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9hbGlnbi9hbGlnblBvaW50LmpzIik7bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBvLmF9KTtyLmF9LCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvaXNBbmNlc3RvckZpeGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoby5hLmlzV2luZG93KGUpfHw5PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTt2YXIgdD1vLmEuZ2V0RG9jdW1lbnQoZSksbj10LmJvZHkscj1udWxsO2ZvcihyPWUucGFyZW50Tm9kZTtyJiZyIT09bjtyPXIucGFyZW50Tm9kZSl7aWYoImZpeGVkIj09PW8uYS5jc3MociwicG9zaXRpb24iKSlyZXR1cm4hMH1yZXR1cm4hMX10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9kb20tYWxpZ24vZXMvdXRpbHMuanMiKX0sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9wcm9wZXJ0eVV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZih2b2lkIDAhPT1kKXJldHVybiBkO2Q9IiI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpLnN0eWxlO2Zvcih2YXIgdCBpbiBfKXQrIlRyYW5zZm9ybSJpbiBlJiYoZD10KTtyZXR1cm4gZH1mdW5jdGlvbiBvKCl7cmV0dXJuIHIoKT9yKCkrIlRyYW5zaXRpb25Qcm9wZXJ0eSI6InRyYW5zaXRpb25Qcm9wZXJ0eSJ9ZnVuY3Rpb24gcygpe3JldHVybiByKCk/cigpKyJUcmFuc2Zvcm0iOiJ0cmFuc2Zvcm0ifWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1vKCk7biYmKGUuc3R5bGVbbl09dCwidHJhbnNpdGlvblByb3BlcnR5IiE9PW4mJihlLnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eT10KSl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXMoKTtuJiYoZS5zdHlsZVtuXT10LCJ0cmFuc2Zvcm0iIT09biYmKGUuc3R5bGUudHJhbnNmb3JtPXQpKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eXx8ZS5zdHlsZVtvKCldfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKSxuPXQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZShzKCkpO2lmKG4mJiJub25lIiE9PW4pe3ZhciByPW4ucmVwbGFjZSgvW14wLTlcLS4sXS9nLCIiKS5zcGxpdCgiLCIpO3JldHVybnt4OnBhcnNlRmxvYXQoclsxMl18fHJbNF0sMCkseTpwYXJzZUZsb2F0KHJbMTNdfHxyWzVdLDApfX1yZXR1cm57eDowLHk6MH19ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj1uLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpfHxuLmdldFByb3BlcnR5VmFsdWUocygpKTtpZihyJiYibm9uZSIhPT1yKXt2YXIgbz12b2lkIDAsaT1yLm1hdGNoKHApO2lmKGkpaT1pWzFdLG89aS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VGbG9hdChlLDEwKX0pLG9bNF09dC54LG9bNV09dC55LGEoZSwibWF0cml4KCIrby5qb2luKCIsIikrIikiKTtlbHNle289ci5tYXRjaChmKVsxXS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VGbG9hdChlLDEwKX0pLG9bMTJdPXQueCxvWzEzXT10LnksYShlLCJtYXRyaXgzZCgiK28uam9pbigiLCIpKyIpIil9fWVsc2UgYShlLCJ0cmFuc2xhdGVYKCIrdC54KyJweCkgdHJhbnNsYXRlWSgiK3QueSsicHgpIHRyYW5zbGF0ZVooMCkiKX10LmE9cyx0LmU9aSx0LmM9bCx0LmI9dSx0LmQ9Yzt2YXIgZD12b2lkIDAsXz17V2Via2l0OiItd2Via2l0LSIsTW96OiItbW96LSIsbXM6Ii1tcy0iLE86Ii1vLSJ9LHA9L21hdHJpeFwoKC4qKVwpLyxmPS9tYXRyaXgzZFwoKC4qKVwpL30sIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuc3R5bGUuZGlzcGxheTtlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUub2Zmc2V0SGVpZ2h0LGUuc3R5bGUuZGlzcGxheT10fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPW47e2lmKCJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6Uih0KSkpcmV0dXJuIHZvaWQgMCE9PXI/KCJudW1iZXIiPT10eXBlb2YgciYmKHIrPSJweCIpLHZvaWQoZS5zdHlsZVt0XT1yKSk6eChlLHQpO2Zvcih2YXIgcyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJm8oZSxzLHRbc10pfX1mdW5jdGlvbiBzKGUpe3ZhciB0PXZvaWQgMCxuPXZvaWQgMCxyPXZvaWQgMCxvPWUub3duZXJEb2N1bWVudCxzPW8uYm9keSxpPW8mJm8uZG9jdW1lbnRFbGVtZW50O3JldHVybiB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LmxlZnQscj10LnRvcCxuLT1pLmNsaWVudExlZnR8fHMuY2xpZW50TGVmdHx8MCxyLT1pLmNsaWVudFRvcHx8cy5jbGllbnRUb3B8fDAse2xlZnQ6bix0b3A6cn19ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWVbInBhZ2UiKyh0PyJZIjoiWCIpKyJPZmZzZXQiXSxyPSJzY3JvbGwiKyh0PyJUb3AiOiJMZWZ0Iik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXt2YXIgbz1lLmRvY3VtZW50O249by5kb2N1bWVudEVsZW1lbnRbcl0sIm51bWJlciIhPXR5cGVvZiBuJiYobj1vLmJvZHlbcl0pfXJldHVybiBufWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGkoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gaShlLCEwKX1mdW5jdGlvbiB1KGUpe3ZhciB0PXMoZSksbj1lLm93bmVyRG9jdW1lbnQscj1uLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvdztyZXR1cm4gdC5sZWZ0Kz1hKHIpLHQudG9wKz1sKHIpLHR9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbnVsbCE9PWUmJnZvaWQgMCE9PWUmJmU9PWUud2luZG93fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGMoZSk/ZS5kb2N1bWVudDo5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH1mdW5jdGlvbiBfKGUsdCxuKXt2YXIgcj1uLG89IiIscz1kKGUpO3JldHVybiByPXJ8fHMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLHImJihvPXIuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8clt0XSksb31mdW5jdGlvbiBwKGUsdCl7dmFyIG49ZVt3XSYmZVt3XVt0XTtpZihMLnRlc3QobikmJiFELnRlc3QodCkpe3ZhciByPWUuc3R5bGUsbz1yW2tdLHM9ZVtNXVtrXTtlW01dW2tdPWVbd11ba10scltrXT0iZm9udFNpemUiPT09dD8iMWVtIjpufHwwLG49ci5waXhlbExlZnQrSSxyW2tdPW8sZVtNXVtrXT1zfXJldHVybiIiPT09bj8iYXV0byI6bn1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuImxlZnQiPT09ZT90LnVzZUNzc1JpZ2h0PyJyaWdodCI6ZTp0LnVzZUNzc0JvdHRvbT8iYm90dG9tIjplfWZ1bmN0aW9uIG0oZSl7cmV0dXJuImxlZnQiPT09ZT8icmlnaHQiOiJyaWdodCI9PT1lPyJsZWZ0IjoidG9wIj09PWU/ImJvdHRvbSI6ImJvdHRvbSI9PT1lPyJ0b3AiOnZvaWQgMH1mdW5jdGlvbiBoKGUsdCxuKXsic3RhdGljIj09PW8oZSwicG9zaXRpb24iKSYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIHM9LTk5OSxpPS05OTksYT1mKCJsZWZ0IixuKSxsPWYoInRvcCIsbiksYz1tKGEpLGQ9bShsKTsibGVmdCIhPT1hJiYocz05OTkpLCJ0b3AiIT09bCYmKGk9OTk5KTt2YXIgXz0iIixwPXUoZSk7KCJsZWZ0ImluIHR8fCJ0b3AiaW4gdCkmJihfPU9iamVjdChTLmMpKGUpfHwiIixPYmplY3QoUy5lKShlLCJub25lIikpLCJsZWZ0ImluIHQmJihlLnN0eWxlW2NdPSIiLGUuc3R5bGVbYV09cysicHgiKSwidG9wImluIHQmJihlLnN0eWxlW2RdPSIiLGUuc3R5bGVbbF09aSsicHgiKSxyKGUpO3ZhciBoPXUoZSksZz17fTtmb3IodmFyIGIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGIpKXt2YXIgRT1mKGIsbikseT0ibGVmdCI9PT1iP3M6aSx2PXBbYl0taFtiXTtnW0VdPUU9PT1iP3krdjp5LXZ9byhlLGcpLHIoZSksKCJsZWZ0ImluIHR8fCJ0b3AiaW4gdCkmJk9iamVjdChTLmUpKGUsXyk7dmFyIFQ9e307Zm9yKHZhciBBIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShBKSl7dmFyIEM9ZihBLG4pLE89dFtBXS1wW0FdO1RbQ109QT09PUM/Z1tDXStPOmdbQ10tT31vKGUsVCl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPXUoZSkscj1PYmplY3QoUy5iKShlKSxvPXt4OnIueCx5OnIueX07ImxlZnQiaW4gdCYmKG8ueD1yLngrdC5sZWZ0LW4ubGVmdCksInRvcCJpbiB0JiYoby55PXIueSt0LnRvcC1uLnRvcCksT2JqZWN0KFMuZCkoZSxvKX1mdW5jdGlvbiBiKGUsdCxuKXtpZihuLmlnbm9yZVNoYWtlKXt2YXIgcj11KGUpLG89ci5sZWZ0LnRvRml4ZWQoMCkscz1yLnRvcC50b0ZpeGVkKDApLGk9dC5sZWZ0LnRvRml4ZWQoMCksYT10LnRvcC50b0ZpeGVkKDApO2lmKG89PT1pJiZzPT09YSlyZXR1cm59bi51c2VDc3NSaWdodHx8bi51c2VDc3NCb3R0b20/aChlLHQsbik6bi51c2VDc3NUcmFuc2Zvcm0mJk9iamVjdChTLmEpKClpbiBkb2N1bWVudC5ib2R5LnN0eWxlP2coZSx0LG4pOmgoZSx0LG4pfWZ1bmN0aW9uIEUoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0KGVbbl0pfWZ1bmN0aW9uIHkoZSl7cmV0dXJuImJvcmRlci1ib3giPT09eChlLCJib3hTaXppbmciKX1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj17fSxvPWUuc3R5bGUscz12b2lkIDA7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYocltzXT1vW3NdLG9bc109dFtzXSk7bi5jYWxsKGUpO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKG9bc109cltzXSl9ZnVuY3Rpb24gVChlLHQsbil7dmFyIHI9MCxvPXZvaWQgMCxzPXZvaWQgMCxpPXZvaWQgMDtmb3Iocz0wO3M8dC5sZW5ndGg7cysrKWlmKG89dFtzXSlmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT12b2lkIDA7YT0iYm9yZGVyIj09PW8/IiIrbytuW2ldKyJXaWR0aCI6bytuW2ldLHIrPXBhcnNlRmxvYXQoeChlLGEpKXx8MH1yZXR1cm4gcn1mdW5jdGlvbiBBKGUsdCxuKXt2YXIgcj1uO2lmKGMoZSkpcmV0dXJuIndpZHRoIj09PXQ/Qi52aWV3cG9ydFdpZHRoKGUpOkIudmlld3BvcnRIZWlnaHQoZSk7aWYoOT09PWUubm9kZVR5cGUpcmV0dXJuIndpZHRoIj09PXQ/Qi5kb2NXaWR0aChlKTpCLmRvY0hlaWdodChlKTt2YXIgbz0id2lkdGgiPT09dD9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0scz0id2lkdGgiPT09dD9lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoOmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LGk9eChlKSxhPXkoZSxpKSxsPTA7KG51bGw9PT1zfHx2b2lkIDA9PT1zfHxzPD0wKSYmKHM9dm9pZCAwLGw9eChlLHQpLChudWxsPT09bHx8dm9pZCAwPT09bHx8TnVtYmVyKGwpPDApJiYobD1lLnN0eWxlW3RdfHwwKSxsPXBhcnNlRmxvYXQobCl8fDApLHZvaWQgMD09PXImJihyPWE/RjpOKTt2YXIgdT12b2lkIDAhPT1zfHxhLGQ9c3x8bDtyZXR1cm4gcj09PU4/dT9kLVQoZSxbImJvcmRlciIsInBhZGRpbmciXSxvLGkpOmw6dT9yPT09Rj9kOmQrKHI9PT1IPy1UKGUsWyJib3JkZXIiXSxvLGkpOlQoZSxbIm1hcmdpbiJdLG8saSkpOmwrVChlLFAuc2xpY2UociksbyxpKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt2YXIgcj12b2lkIDAsbz10WzBdO3JldHVybiAwIT09by5vZmZzZXRXaWR0aD9yPUEuYXBwbHkodm9pZCAwLHQpOnYobyxVLGZ1bmN0aW9uKCl7cj1BLmFwcGx5KHZvaWQgMCx0KX0pLHJ9ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pO3JldHVybiBlfXZhciBTPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1hbGlnbi9lcy9wcm9wZXJ0eVV0aWxzLmpzIiksUj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saj0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLHg9dm9pZCAwLEw9bmV3IFJlZ0V4cCgiXigiK2orIikoPyFweClbYS16JV0rJCIsImkiKSxEPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyx3PSJjdXJyZW50U3R5bGUiLE09InJ1bnRpbWVTdHlsZSIsaz0ibGVmdCIsST0icHgiOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYoeD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT9fOnApO3ZhciBQPVsibWFyZ2luIiwiYm9yZGVyIiwicGFkZGluZyJdLE49LTEsSD0yLEY9MSxCPXt9O0UoWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKGUpe0JbImRvYyIrZV09ZnVuY3Rpb24odCl7dmFyIG49dC5kb2N1bWVudDtyZXR1cm4gTWF0aC5tYXgobi5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrZV0sbi5ib2R5WyJzY3JvbGwiK2VdLEJbInZpZXdwb3J0IitlXShuKSl9LEJbInZpZXdwb3J0IitlXT1mdW5jdGlvbih0KXt2YXIgbj0iY2xpZW50IitlLHI9dC5kb2N1bWVudCxvPXIuYm9keSxzPXIuZG9jdW1lbnRFbGVtZW50LGk9c1tuXTtyZXR1cm4iQ1NTMUNvbXBhdCI9PT1yLmNvbXBhdE1vZGUmJml8fG8mJm9bbl18fGl9fSk7dmFyIFU9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9O0UoWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtCWyJvdXRlciIrdF09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmQyh0LGUsbj8wOkYpfTt2YXIgbj0id2lkdGgiPT09ZT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl07QltlXT1mdW5jdGlvbih0LHIpe3ZhciBzPXI7aWYodm9pZCAwPT09cylyZXR1cm4gdCYmQyh0LGUsTik7aWYodCl7dmFyIGk9eCh0KTtyZXR1cm4geSh0KSYmKHMrPVQodCxbInBhZGRpbmciLCJib3JkZXIiXSxuLGkpKSxvKHQsZSxzKX19fSk7dmFyIEc9e2dldFdpbmRvdzpmdW5jdGlvbihlKXtpZihlJiZlLmRvY3VtZW50JiZlLnNldFRpbWVvdXQpcmV0dXJuIGU7dmFyIHQ9ZS5vd25lckRvY3VtZW50fHxlO3JldHVybiB0LmRlZmF1bHRWaWV3fHx0LnBhcmVudFdpbmRvd30sZ2V0RG9jdW1lbnQ6ZCxvZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PXQpcmV0dXJuIHUoZSk7YihlLHQsbnx8e30pfSxpc1dpbmRvdzpjLGVhY2g6RSxjc3M6byxjbG9uZTpmdW5jdGlvbihlKXt2YXIgdD12b2lkIDAsbj17fTtmb3IodCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJihuW3RdPWVbdF0pO2lmKGUub3ZlcmZsb3cpZm9yKHQgaW4gZSllLmhhc093blByb3BlcnR5KHQpJiYobi5vdmVyZmxvd1t0XT1lLm92ZXJmbG93W3RdKTtyZXR1cm4gbn0sbWl4Ok8sZ2V0V2luZG93U2Nyb2xsTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0sZ2V0V2luZG93U2Nyb2xsVG9wOmZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSxtZXJnZTpmdW5jdGlvbigpe2Zvcih2YXIgZT17fSx0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylHLm1peChlLG5bb10pO3JldHVybiBlfSx2aWV3cG9ydFdpZHRoOjAsdmlld3BvcnRIZWlnaHQ6MH07TyhHLEIpLHQuYT1HfSwiLi9ub2RlX21vZHVsZXMvZG9tLWNzcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXVbdF07aWYodm9pZCAwPT09ciYmKHI9cyh0KSkscil7aWYodm9pZCAwPT09bilyZXR1cm4gZS5zdHlsZVtyXTtlLnN0eWxlW3JdPWMocixuKX19ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJnIoZSxuLHRbbl0pfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9bChlKSxuPWEodCk7cmV0dXJuIHVbdF09dVtlXT11W25dPW4sbn1mdW5jdGlvbiBpKCl7Mj09PWFyZ3VtZW50cy5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMV0/YXJndW1lbnRzWzBdLnN0eWxlLmNzc1RleHQ9YXJndW1lbnRzWzFdOm8oYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6cihhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSl9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcHJlZml4LXN0eWxlL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy90by1jYW1lbC1jYXNlL2luZGV4LmpzIiksdT17ZmxvYXQ6ImNzc0Zsb2F0In0sYz1uKCIuL25vZGVfbW9kdWxlcy9hZGQtcHgtdG8tc3R5bGUvaW5kZXguanMiKTtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuc2V0PWksZS5leHBvcnRzLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbl09cihlLG58fCIiKSx0fSx7fSk6cihlLHR8fCIiKX19LCIuL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9jbGFzcy9hZGRDbGFzcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7ZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QuYWRkKHQpOigwLHMuZGVmYXVsdCkoZSx0KXx8KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWU/ZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUrIiAiK3Q6ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwoZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lLmJhc2VWYWx8fCIiKSsiICIrdCkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIik7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yO3ZhciBzPW8obigiLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvY2xhc3MvaGFzQ2xhc3MuanMiKSk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2hhc0NsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5jbGFzc0xpc3Q/ISF0JiZlLmNsYXNzTGlzdC5jb250YWlucyh0KTotMSE9PSgiICIrKGUuY2xhc3NOYW1lLmJhc2VWYWx8fGUuY2xhc3NOYW1lKSsiICIpLmluZGV4T2YoIiAiK3QrIiAiKX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihefFxccykiK3QrIig/Olxcc3wkKSIsImciKSwiJDEiKS5yZXBsYWNlKC9ccysvZywiICIpLnJlcGxhY2UoL15ccyp8XHMqJC9nLCIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5yZW1vdmUodCk6InN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZT9lLmNsYXNzTmFtZT1yKGUuY2xhc3NOYW1lLHQpOmUuc2V0QXR0cmlidXRlKCJjbGFzcyIscihlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWUuYmFzZVZhbHx8IiIsdCkpfX0sIi4vbm9kZV9tb2R1bGVzL2RvbS1zZXJpYWxpemVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2lmKGUpe3ZhciBuLHI9IiI7Zm9yKHZhciBvIGluIGUpbj1lW29dLHImJihyKz0iICIpLHIrPW8sKG51bGwhPT1uJiYiIiE9PW58fHQueG1sTW9kZSkmJihyKz0nPSInKyh0LmRlY29kZUVudGl0aWVzP2MuZW5jb2RlWE1MKG4pOm4pKyciJyk7cmV0dXJuIHJ9fWZ1bmN0aW9uIG8oZSx0KXsic3ZnIj09PWUubmFtZSYmKHQ9e2RlY29kZUVudGl0aWVzOnQuZGVjb2RlRW50aXRpZXMseG1sTW9kZTohMH0pO3ZhciBuPSI8IitlLm5hbWUsbz1yKGUuYXR0cmlicyx0KTtyZXR1cm4gbyYmKG4rPSIgIitvKSwhdC54bWxNb2RlfHxlLmNoaWxkcmVuJiYwIT09ZS5jaGlsZHJlbi5sZW5ndGg/KG4rPSI+IixlLmNoaWxkcmVuJiYobis9cChlLmNoaWxkcmVuLHQpKSxfW2UubmFtZV0mJiF0LnhtbE1vZGV8fChuKz0iPC8iK2UubmFtZSsiPiIpKTpuKz0iLz4iLG59ZnVuY3Rpb24gcyhlKXtyZXR1cm4iPCIrZS5kYXRhKyI+In1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5kYXRhfHwiIjtyZXR1cm4hdC5kZWNvZGVFbnRpdGllc3x8ZS5wYXJlbnQmJmUucGFyZW50Lm5hbWUgaW4gZHx8KG49Yy5lbmNvZGVYTUwobikpLG59ZnVuY3Rpb24gYShlKXtyZXR1cm4iPCFbQ0RBVEFbIitlLmNoaWxkcmVuWzBdLmRhdGErIl1dPiJ9ZnVuY3Rpb24gbChlKXtyZXR1cm4iXHgzYyEtLSIrZS5kYXRhKyItLVx4M2UifXZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2RvbWVsZW1lbnR0eXBlL2luZGV4LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9pbmRleC5qcyIpLGQ9e19fcHJvdG9fXzpudWxsLHN0eWxlOiEwLHNjcmlwdDohMCx4bXA6ITAsaWZyYW1lOiEwLG5vZW1iZWQ6ITAsbm9mcmFtZXM6ITAscGxhaW50ZXh0OiEwLG5vc2NyaXB0OiEwfSxfPXtfX3Byb3RvX186bnVsbCxhcmVhOiEwLGJhc2U6ITAsYmFzZWZvbnQ6ITAsYnI6ITAsY29sOiEwLGNvbW1hbmQ6ITAsZW1iZWQ6ITAsZnJhbWU6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGlzaW5kZXg6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxwPWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZSl8fGUuY2hlZXJpb3x8KGU9W2VdKSx0PXR8fHt9O2Zvcih2YXIgbj0iIixyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBjPWVbcl07InJvb3QiPT09Yy50eXBlP24rPXAoYy5jaGlsZHJlbix0KTp1LmlzVGFnKGMpP24rPW8oYyx0KTpjLnR5cGU9PT11LkRpcmVjdGl2ZT9uKz1zKGMpOmMudHlwZT09PXUuQ29tbWVudD9uKz1sKGMpOmMudHlwZT09PXUuQ0RBVEE/bis9YShjKTpuKz1pKGMsdCl9cmV0dXJuIG59fSwiLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtUZXh0OiJ0ZXh0IixEaXJlY3RpdmU6ImRpcmVjdGl2ZSIsQ29tbWVudDoiY29tbWVudCIsU2NyaXB0OiJzY3JpcHQiLFN0eWxlOiJzdHlsZSIsVGFnOiJ0YWciLENEQVRBOiJjZGF0YSIsRG9jdHlwZToiZG9jdHlwZSIsaXNUYWc6ZnVuY3Rpb24oZSl7cmV0dXJuInRhZyI9PT1lLnR5cGV8fCJzY3JpcHQiPT09ZS50eXBlfHwic3R5bGUiPT09ZS50eXBlfX19LCIuL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7Im9iamVjdCI9PXR5cGVvZiBlPyhuPXQsdD1lLGU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihuPXQsdD1sKSx0aGlzLl9jYWxsYmFjaz1lLHRoaXMuX29wdGlvbnM9dHx8bCx0aGlzLl9lbGVtZW50Q0I9bix0aGlzLmRvbT1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3RhZ1N0YWNrPVtdLHRoaXMuX3BhcnNlcj10aGlzLl9wYXJzZXJ8fG51bGx9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvaW5kZXguanMiKSxzPS9ccysvZyxpPW4oIi4vbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvbGliL25vZGUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvbGliL2VsZW1lbnQuanMiKSxsPXtub3JtYWxpemVXaGl0ZXNwYWNlOiExLHdpdGhTdGFydEluZGljZXM6ITF9O3IucHJvdG90eXBlLm9ucGFyc2VyaW5pdD1mdW5jdGlvbihlKXt0aGlzLl9wYXJzZXI9ZX0sci5wcm90b3R5cGUub25yZXNldD1mdW5jdGlvbigpe3IuY2FsbCh0aGlzLHRoaXMuX2NhbGxiYWNrLHRoaXMuX29wdGlvbnMsdGhpcy5fZWxlbWVudENCKX0sci5wcm90b3R5cGUub25lbmQ9ZnVuY3Rpb24oKXt0aGlzLl9kb25lfHwodGhpcy5fZG9uZT0hMCx0aGlzLl9wYXJzZXI9bnVsbCx0aGlzLl9oYW5kbGVDYWxsYmFjayhudWxsKSl9LHIucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1yLnByb3RvdHlwZS5vbmVycm9yPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jYWxsYmFjayl0aGlzLl9jYWxsYmFjayhlLHRoaXMuZG9tKTtlbHNlIGlmKGUpdGhyb3cgZX0sci5wcm90b3R5cGUub25jbG9zZXRhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RhZ1N0YWNrLnBvcCgpO3RoaXMuX2VsZW1lbnRDQiYmdGhpcy5fZWxlbWVudENCKGUpfSxyLnByb3RvdHlwZS5fYWRkRG9tRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl90YWdTdGFja1t0aGlzLl90YWdTdGFjay5sZW5ndGgtMV0sbj10P3QuY2hpbGRyZW46dGhpcy5kb20scj1uW24ubGVuZ3RoLTFdO2UubmV4dD1udWxsLHRoaXMuX29wdGlvbnMud2l0aFN0YXJ0SW5kaWNlcyYmKGUuc3RhcnRJbmRleD10aGlzLl9wYXJzZXIuc3RhcnRJbmRleCksdGhpcy5fb3B0aW9ucy53aXRoRG9tTHZsMSYmKGUuX19wcm90b19fPSJ0YWciPT09ZS50eXBlP2E6aSkscj8oZS5wcmV2PXIsci5uZXh0PWUpOmUucHJldj1udWxsLG4ucHVzaChlKSxlLnBhcmVudD10fHxudWxsfSxyLnByb3RvdHlwZS5vbm9wZW50YWc9ZnVuY3Rpb24oZSx0KXt2YXIgbj17dHlwZToic2NyaXB0Ij09PWU/by5TY3JpcHQ6InN0eWxlIj09PWU/by5TdHlsZTpvLlRhZyxuYW1lOmUsYXR0cmliczp0LGNoaWxkcmVuOltdfTt0aGlzLl9hZGREb21FbGVtZW50KG4pLHRoaXMuX3RhZ1N0YWNrLnB1c2gobil9LHIucHJvdG90eXBlLm9udGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX29wdGlvbnMubm9ybWFsaXplV2hpdGVzcGFjZXx8dGhpcy5fb3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlOyF0aGlzLl90YWdTdGFjay5sZW5ndGgmJnRoaXMuZG9tLmxlbmd0aCYmKHQ9dGhpcy5kb21bdGhpcy5kb20ubGVuZ3RoLTFdKS50eXBlPT09by5UZXh0P24/dC5kYXRhPSh0LmRhdGErZSkucmVwbGFjZShzLCIgIik6dC5kYXRhKz1lOnRoaXMuX3RhZ1N0YWNrLmxlbmd0aCYmKHQ9dGhpcy5fdGFnU3RhY2tbdGhpcy5fdGFnU3RhY2subGVuZ3RoLTFdKSYmKHQ9dC5jaGlsZHJlblt0LmNoaWxkcmVuLmxlbmd0aC0xXSkmJnQudHlwZT09PW8uVGV4dD9uP3QuZGF0YT0odC5kYXRhK2UpLnJlcGxhY2UocywiICIpOnQuZGF0YSs9ZToobiYmKGU9ZS5yZXBsYWNlKHMsIiAiKSksdGhpcy5fYWRkRG9tRWxlbWVudCh7ZGF0YTplLHR5cGU6by5UZXh0fSkpfSxyLnByb3RvdHlwZS5vbmNvbW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdGFnU3RhY2tbdGhpcy5fdGFnU3RhY2subGVuZ3RoLTFdO2lmKHQmJnQudHlwZT09PW8uQ29tbWVudClyZXR1cm4gdm9pZCh0LmRhdGErPWUpO3ZhciBuPXtkYXRhOmUsdHlwZTpvLkNvbW1lbnR9O3RoaXMuX2FkZERvbUVsZW1lbnQobiksdGhpcy5fdGFnU3RhY2sucHVzaChuKX0sci5wcm90b3R5cGUub25jZGF0YXN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9e2NoaWxkcmVuOlt7ZGF0YToiIix0eXBlOm8uVGV4dH1dLHR5cGU6by5DREFUQX07dGhpcy5fYWRkRG9tRWxlbWVudChlKSx0aGlzLl90YWdTdGFjay5wdXNoKGUpfSxyLnByb3RvdHlwZS5vbmNvbW1lbnRlbmQ9ci5wcm90b3R5cGUub25jZGF0YWVuZD1mdW5jdGlvbigpe3RoaXMuX3RhZ1N0YWNrLnBvcCgpfSxyLnByb3RvdHlwZS5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuX2FkZERvbUVsZW1lbnQoe25hbWU6ZSxkYXRhOnQsdHlwZTpvLkRpcmVjdGl2ZX0pfSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvbGliL2VsZW1lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2xpYi9ub2RlLmpzIiksbz1lLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZShyKSxzPXt0YWdOYW1lOiJuYW1lIn07T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1zW2VdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLGUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3RdfHxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbdF09ZSxlfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2xpYi9ub2RlLmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17Z2V0IGZpcnN0Q2hpbGQoKXt2YXIgZT10aGlzLmNoaWxkcmVuO3JldHVybiBlJiZlWzBdfHxudWxsfSxnZXQgbGFzdENoaWxkKCl7dmFyIGU9dGhpcy5jaGlsZHJlbjtyZXR1cm4gZSYmZVtlLmxlbmd0aC0xXXx8bnVsbH0sZ2V0IG5vZGVUeXBlKCl7cmV0dXJuIG9bdGhpcy50eXBlXXx8by5lbGVtZW50fX0scj17dGFnTmFtZToibmFtZSIsY2hpbGROb2RlczoiY2hpbGRyZW4iLHBhcmVudE5vZGU6InBhcmVudCIscHJldmlvdXNTaWJsaW5nOiJwcmV2IixuZXh0U2libGluZzoibmV4dCIsbm9kZVZhbHVlOiJkYXRhIn0sbz17ZWxlbWVudDoxLHRleHQ6MyxjZGF0YTo0LGNvbW1lbnQ6OH07T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1yW2VdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3RdfHxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbdF09ZSxlfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZXhwb3J0cztbbigiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL3N0cmluZ2lmeS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2RvbXV0aWxzL2xpYi90cmF2ZXJzYWwuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvbWFuaXB1bGF0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL3F1ZXJ5aW5nLmpzIiksbigiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL2xlZ2FjeS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2RvbXV0aWxzL2xpYi9oZWxwZXJzLmpzIildLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWVbdF0uYmluZChyKX0pfSl9LCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvaGVscGVycy5qcyI6ZnVuY3Rpb24oZSx0KXt0LnJlbW92ZVN1YnNldHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixvPWUubGVuZ3RoOy0tbz4tMTspe2Zvcih0PW49ZVtvXSxlW29dPW51bGwscj0hMDtuOyl7aWYoZS5pbmRleE9mKG4pPi0xKXtyPSExLGUuc3BsaWNlKG8sMSk7YnJlYWt9bj1uLnBhcmVudH1yJiYoZVtvXT10KX1yZXR1cm4gZX07dmFyIG49e0RJU0NPTk5FQ1RFRDoxLFBSRUNFRElORzoyLEZPTExPV0lORzo0LENPTlRBSU5TOjgsQ09OVEFJTkVEX0JZOjE2fSxyPXQuY29tcGFyZURvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgcixvLHMsaSxhLGwsdT1bXSxjPVtdO2lmKGU9PT10KXJldHVybiAwO2ZvcihyPWU7cjspdS51bnNoaWZ0KHIpLHI9ci5wYXJlbnQ7Zm9yKHI9dDtyOyljLnVuc2hpZnQocikscj1yLnBhcmVudDtmb3IobD0wO3VbbF09PT1jW2xdOylsKys7cmV0dXJuIDA9PT1sP24uRElTQ09OTkVDVEVEOihvPXVbbC0xXSxzPW8uY2hpbGRyZW4saT11W2xdLGE9Y1tsXSxzLmluZGV4T2YoaSk+cy5pbmRleE9mKGEpP289PT10P24uRk9MTE9XSU5HfG4uQ09OVEFJTkVEX0JZOm4uRk9MTE9XSU5HOm89PT1lP24uUFJFQ0VESU5HfG4uQ09OVEFJTlM6bi5QUkVDRURJTkcpfTt0LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbyxzPWUubGVuZ3RoO2ZvcihlPWUuc2xpY2UoKTstLXM+LTE7KXQ9ZVtzXSwobz1lLmluZGV4T2YodCkpPi0xJiZvPHMmJmUuc3BsaWNlKHMsMSk7cmV0dXJuIGUuc29ydChmdW5jdGlvbihlLHQpe3ZhciBvPXIoZSx0KTtyZXR1cm4gbyZuLlBSRUNFRElORz8tMTpvJm4uRk9MTE9XSU5HPzE6MH0pLGV9fSwiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL2xlZ2FjeS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gbi5hdHRyaWJzJiZ0KG4uYXR0cmlic1tlXSl9OmZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dHJpYnMmJm4uYXR0cmlic1tlXT09PXR9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUobil8fHQobil9fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2RvbWVsZW1lbnR0eXBlL2luZGV4LmpzIiksaT10LmlzVGFnPXMuaXNUYWc7dC50ZXN0RWxlbWVudD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe2lmKCJ0YWdfbmFtZSI9PT1uKXtpZighaSh0KXx8IWUudGFnX25hbWUodC5uYW1lKSlyZXR1cm4hMX1lbHNlIGlmKCJ0YWdfdHlwZSI9PT1uKXtpZighZS50YWdfdHlwZSh0LnR5cGUpKXJldHVybiExfWVsc2UgaWYoInRhZ19jb250YWlucyI9PT1uKXtpZihpKHQpfHwhZS50YWdfY29udGFpbnModC5kYXRhKSlyZXR1cm4hMX1lbHNlIGlmKCF0LmF0dHJpYnN8fCFlW25dKHQuYXR0cmlic1tuXSkpcmV0dXJuITF9ZWxzZTtyZXR1cm4hMH07dmFyIGE9e3RhZ19uYW1lOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZlKHQubmFtZSl9OiIqIj09PWU/aTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmdC5uYW1lPT09ZX19LHRhZ190eXBlOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQpe3JldHVybiBlKHQudHlwZSl9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1lfX0sdGFnX2NvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQpe3JldHVybiFpKHQpJiZlKHQuZGF0YSl9OmZ1bmN0aW9uKHQpe3JldHVybiFpKHQpJiZ0LmRhdGE9PT1lfX19O3QuZ2V0RWxlbWVudHM9ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGk9T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIHQgaW4gYT9hW3RdKG4pOnIodCxuKX0pO3JldHVybiAwPT09aS5sZW5ndGg/W106dGhpcy5maWx0ZXIoaS5yZWR1Y2UobyksdCxuLHMpfSx0LmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSx0aGlzLmZpbmRPbmUocigiaWQiLGUpLHQsITEhPT1uKX0sdC5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoYS50YWdfbmFtZShlKSx0LG4scil9LHQuZ2V0RWxlbWVudHNCeVRhZ1R5cGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGEudGFnX3R5cGUoZSksdCxuLHIpfX0sIi4vbm9kZV9tb2R1bGVzL2RvbXV0aWxzL2xpYi9tYW5pcHVsYXRpb24uanMiOmZ1bmN0aW9uKGUsdCl7dC5yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKGUucHJldiYmKGUucHJldi5uZXh0PWUubmV4dCksZS5uZXh0JiYoZS5uZXh0LnByZXY9ZS5wcmV2KSxlLnBhcmVudCl7dmFyIHQ9ZS5wYXJlbnQuY2hpbGRyZW47dC5zcGxpY2UodC5sYXN0SW5kZXhPZihlKSwxKX19LHQucmVwbGFjZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnByZXY9ZS5wcmV2O24mJihuLm5leHQ9dCk7dmFyIHI9dC5uZXh0PWUubmV4dDtyJiYoci5wcmV2PXQpO3ZhciBvPXQucGFyZW50PWUucGFyZW50O2lmKG8pe3ZhciBzPW8uY2hpbGRyZW47c1tzLmxhc3RJbmRleE9mKGUpXT10fX0sdC5hcHBlbmRDaGlsZD1mdW5jdGlvbihlLHQpe2lmKHQucGFyZW50PWUsMSE9PWUuY2hpbGRyZW4ucHVzaCh0KSl7dmFyIG49ZS5jaGlsZHJlbltlLmNoaWxkcmVuLmxlbmd0aC0yXTtuLm5leHQ9dCx0LnByZXY9bix0Lm5leHQ9bnVsbH19LHQuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5wYXJlbnQscj1lLm5leHQ7aWYodC5uZXh0PXIsdC5wcmV2PWUsZS5uZXh0PXQsdC5wYXJlbnQ9bixyKXtpZihyLnByZXY9dCxuKXt2YXIgbz1uLmNoaWxkcmVuO28uc3BsaWNlKG8ubGFzdEluZGV4T2YociksMCx0KX19ZWxzZSBuJiZuLmNoaWxkcmVuLnB1c2godCl9LHQucHJlcGVuZD1mdW5jdGlvbihlLHQpe3ZhciBuPWUucGFyZW50O2lmKG4pe3ZhciByPW4uY2hpbGRyZW47ci5zcGxpY2Uoci5sYXN0SW5kZXhPZihlKSwwLHQpfWUucHJldiYmKGUucHJldi5uZXh0PXQpLHQucGFyZW50PW4sdC5wcmV2PWUucHJldix0Lm5leHQ9ZSxlLnByZXY9dH19LCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvcXVlcnlpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pLCJudW1iZXIiPT10eXBlb2YgciYmaXNGaW5pdGUocil8fChyPTEvMCksbyhlLHQsITEhPT1uLHIpfWZ1bmN0aW9uIG8oZSx0LG4scil7Zm9yKHZhciBzLGk9W10sYT0wLGw9dC5sZW5ndGg7YTxsJiYhKGUodFthXSkmJihpLnB1c2godFthXSksLS1yPD0wKSkmJihzPXRbYV0uY2hpbGRyZW4sIShuJiZzJiZzLmxlbmd0aD4wJiYocz1vKGUscyxuLHIpLGk9aS5jb25jYXQocyksKHItPXMubGVuZ3RoKTw9MCkpKTthKyspO3JldHVybiBpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoZSh0W25dKSlyZXR1cm4gdFtuXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuPW51bGwscj0wLG89dC5sZW5ndGg7cjxvJiYhbjtyKyspdSh0W3JdKSYmKGUodFtyXSk/bj10W3JdOnRbcl0uY2hpbGRyZW4ubGVuZ3RoPjAmJihuPWkoZSx0W3JdLmNoaWxkcmVuKSkpO3JldHVybiBufWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodSh0W25dKSYmKGUodFtuXSl8fHRbbl0uY2hpbGRyZW4ubGVuZ3RoPjAmJmEoZSx0W25dLmNoaWxkcmVuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1bXSxyPXQuc2xpY2UoKTtyLmxlbmd0aDspe3ZhciBvPXIuc2hpZnQoKTt1KG8pJiYoby5jaGlsZHJlbiYmby5jaGlsZHJlbi5sZW5ndGg+MCYmci51bnNoaWZ0LmFwcGx5KHIsby5jaGlsZHJlbiksZShvKSYmbi5wdXNoKG8pKX1yZXR1cm4gbn12YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9kb21lbGVtZW50dHlwZS9pbmRleC5qcyIpLmlzVGFnO2UuZXhwb3J0cz17ZmlsdGVyOnIsZmluZDpvLGZpbmRPbmVDaGlsZDpzLGZpbmRPbmU6aSxleGlzdHNPbmU6YSxmaW5kQWxsOmx9fSwiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvbGliL3N0cmluZ2lmeS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5jaGlsZHJlbj9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaShlLHQpfSkuam9pbigiIik6IiJ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcChvKS5qb2luKCIiKTphKGUpPyJiciI9PT1lLm5hbWU/IlxuIjpvKGUuY2hpbGRyZW4pOmUudHlwZT09PXMuQ0RBVEE/byhlLmNoaWxkcmVuKTplLnR5cGU9PT1zLlRleHQ/ZS5kYXRhOiIifXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2RvbWVsZW1lbnR0eXBlL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9kb20tc2VyaWFsaXplci9pbmRleC5qcyIpLGE9cy5pc1RhZztlLmV4cG9ydHM9e2dldElubmVySFRNTDpyLGdldE91dGVySFRNTDppLGdldFRleHQ6b319LCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9saWIvdHJhdmVyc2FsLmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hpbGRyZW59LHI9dC5nZXRQYXJlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50fTt0LmdldFNpYmxpbmdzPWZ1bmN0aW9uKGUpe3ZhciB0PXIoZSk7cmV0dXJuIHQ/bih0KTpbZV19LHQuZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hdHRyaWJzJiZlLmF0dHJpYnNbdF19LHQuaGFzQXR0cmliPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFlLmF0dHJpYnMmJmhhc093blByb3BlcnR5LmNhbGwoZS5hdHRyaWJzLHQpfSx0LmdldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX19LCIuL25vZGVfbW9kdWxlcy9lbmNvZGUtMzk4Ni9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpKl0vZyxmdW5jdGlvbihlKXtyZXR1cm4iJSIrZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSl9O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvZW50aXRpZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZW5jb2RlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZGVjb2RlLmpzIik7dC5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oIXR8fHQ8PTA/by5YTUw6by5IVE1MKShlKX0sdC5kZWNvZGVTdHJpY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oIXR8fHQ8PTA/by5YTUw6by5IVE1MU3RyaWN0KShlKX0sdC5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oIXR8fHQ8PTA/ci5YTUw6ci5IVE1MKShlKX0sdC5lbmNvZGVYTUw9ci5YTUwsdC5lbmNvZGVIVE1MND10LmVuY29kZUhUTUw1PXQuZW5jb2RlSFRNTD1yLkhUTUwsdC5kZWNvZGVYTUw9dC5kZWNvZGVYTUxTdHJpY3Q9by5YTUwsdC5kZWNvZGVIVE1MND10LmRlY29kZUhUTUw1PXQuZGVjb2RlSFRNTD1vLkhUTUwsdC5kZWNvZGVIVE1MNFN0cmljdD10LmRlY29kZUhUTUw1U3RyaWN0PXQuZGVjb2RlSFRNTFN0cmljdD1vLkhUTUxTdHJpY3QsdC5lc2NhcGU9ci5lc2NhcGV9LCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZGVjb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3Qua2V5cyhlKS5qb2luKCJ8Iiksbj1zKGUpO3QrPSJ8I1t4WF1bXFxkYS1mQS1GXSt8I1xcZCsiO3ZhciByPW5ldyBSZWdFeHAoIiYoPzoiK3QrIik7IiwiZyIpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UocixuKX19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPHQ/MTotMX1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iIyI9PT10LmNoYXJBdCgxKT91KCJYIj09PXQuY2hhckF0KDIpfHwieCI9PT10LmNoYXJBdCgyKT9wYXJzZUludCh0LnN1YnN0cigzKSwxNik6cGFyc2VJbnQodC5zdWJzdHIoMiksMTApKTplW3Quc2xpY2UoMSwtMSldfX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL2VudGl0aWVzLmpzb24iKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL21hcHMvbGVnYWN5Lmpzb24iKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL21hcHMveG1sLmpzb24iKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9kZWNvZGVfY29kZXBvaW50LmpzIiksYz1yKGwpLGQ9cihpKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4iOyIhPT1lLnN1YnN0cigtMSkmJihlKz0iOyIpLGMoZSl9Zm9yKHZhciB0PU9iamVjdC5rZXlzKGEpLnNvcnQobyksbj1PYmplY3Qua2V5cyhpKS5zb3J0KG8pLHI9MCxsPTA7cjxuLmxlbmd0aDtyKyspdFtsXT09PW5bcl0/KG5bcl0rPSI7PyIsbCsrKTpuW3JdKz0iOyI7dmFyIHU9bmV3IFJlZ0V4cCgiJig/OiIrbi5qb2luKCJ8IikrInwjW3hYXVtcXGRhLWZBLUZdKzs/fCNcXGQrOz8pIiwiZyIpLGM9cyhpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKHUsZSl9fSgpO2UuZXhwb3J0cz17WE1MOmMsSFRNTDpfLEhUTUxTdHJpY3Q6ZH19LCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZGVjb2RlX2NvZGVwb2ludC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoZT49NTUyOTYmJmU8PTU3MzQzfHxlPjExMTQxMTEpcmV0dXJuIu+/vSI7ZSBpbiBvJiYoZT1vW2VdKTt2YXIgdD0iIjtyZXR1cm4gZT42NTUzNSYmKGUtPTY1NTM2LHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZT4+PjEwJjEwMjN8NTUyOTYpLGU9NTYzMjB8MTAyMyZlKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL21hcHMvZGVjb2RlLmpzb24iKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9lbmNvZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbZVtuXV09IiYiK24rIjsiLHR9LHt9KX1mdW5jdGlvbiBvKGUpe3ZhciB0PVtdLG49W107cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7MT09PWUubGVuZ3RoP3QucHVzaCgiXFwiK2UpOm4ucHVzaChlKX0pLG4udW5zaGlmdCgiWyIrdC5qb2luKCIiKSsiXSIpLG5ldyBSZWdFeHAobi5qb2luKCJ8IiksImciKX1mdW5jdGlvbiBzKGUpe3JldHVybiImI3giK2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4iJiN4IisoMTAyNCooZS5jaGFyQ29kZUF0KDApLTU1Mjk2KStlLmNoYXJDb2RlQXQoMSktNTYzMjArNjU1MzYpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In1mdW5jdGlvbiBhKGUsdCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZVt0XX1yZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSh0LG4pLnJlcGxhY2UoZixpKS5yZXBsYWNlKHAscyl9fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUucmVwbGFjZShtLHMpLnJlcGxhY2UoZixpKS5yZXBsYWNlKHAscyl9dmFyIHU9cihuKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL3htbC5qc29uIikpLGM9byh1KTt0LlhNTD1hKHUsYyk7dmFyIGQ9cihuKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL2VudGl0aWVzLmpzb24iKSksXz1vKGQpO3QuSFRNTD1hKGQsXyk7dmFyIHA9L1teXDAtXHg3Rl0vZyxmPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxtPW8odSk7dC5lc2NhcGU9bH0sIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL21hcHMvZGVjb2RlLmpzb24iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXswOjY1NTMzLDEyODo4MzY0LDEzMDo4MjE4LDEzMTo0MDIsMTMyOjgyMjIsMTMzOjgyMzAsMTM0OjgyMjQsMTM1OjgyMjUsMTM2OjcxMCwxMzc6ODI0MCwxMzg6MzUyLDEzOTo4MjQ5LDE0MDozMzgsMTQyOjM4MSwxNDU6ODIxNiwxNDY6ODIxNywxNDc6ODIyMCwxNDg6ODIyMSwxNDk6ODIyNiwxNTA6ODIxMSwxNTE6ODIxMiwxNTI6NzMyLDE1Mzo4NDgyLDE1NDozNTMsMTU1OjgyNTAsMTU2OjMzOSwxNTg6MzgyLDE1OTozNzZ9fSwiLi9ub2RlX21vZHVsZXMvZW50aXRpZXMvbWFwcy9lbnRpdGllcy5qc29uIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17QWFjdXRlOiLDgSIsYWFjdXRlOiLDoSIsQWJyZXZlOiLEgiIsYWJyZXZlOiLEgyIsYWM6IuKIviIsYWNkOiLiiL8iLGFjRToi4oi+zLMiLEFjaXJjOiLDgiIsYWNpcmM6IsOiIixhY3V0ZToiwrQiLEFjeToi0JAiLGFjeToi0LAiLEFFbGlnOiLDhiIsYWVsaWc6IsOmIixhZjoi4oGhIixBZnI6IvCdlIQiLGFmcjoi8J2UniIsQWdyYXZlOiLDgCIsYWdyYXZlOiLDoCIsYWxlZnN5bToi4oS1IixhbGVwaDoi4oS1IixBbHBoYToizpEiLGFscGhhOiLOsSIsQW1hY3I6IsSAIixhbWFjcjoixIEiLGFtYWxnOiLiqL8iLGFtcDoiJiIsQU1QOiImIixhbmRhbmQ6IuKplSIsQW5kOiLiqZMiLGFuZDoi4oinIixhbmRkOiLiqZwiLGFuZHNsb3BlOiLiqZgiLGFuZHY6IuKpmiIsYW5nOiLiiKAiLGFuZ2U6IuKmpCIsYW5nbGU6IuKIoCIsYW5nbXNkYWE6IuKmqCIsYW5nbXNkYWI6IuKmqSIsYW5nbXNkYWM6IuKmqiIsYW5nbXNkYWQ6IuKmqyIsYW5nbXNkYWU6IuKmrCIsYW5nbXNkYWY6IuKmrSIsYW5nbXNkYWc6IuKmriIsYW5nbXNkYWg6IuKmryIsYW5nbXNkOiLiiKEiLGFuZ3J0OiLiiJ8iLGFuZ3J0dmI6IuKKviIsYW5ncnR2YmQ6IuKmnSIsYW5nc3BoOiLiiKIiLGFuZ3N0OiLDhSIsYW5nemFycjoi4o28IixBb2dvbjoixIQiLGFvZ29uOiLEhSIsQW9wZjoi8J2UuCIsYW9wZjoi8J2VkiIsYXBhY2lyOiLiqa8iLGFwOiLiiYgiLGFwRToi4qmwIixhcGU6IuKJiiIsYXBpZDoi4omLIixhcG9zOiInIixBcHBseUZ1bmN0aW9uOiLigaEiLGFwcHJveDoi4omIIixhcHByb3hlcToi4omKIixBcmluZzoiw4UiLGFyaW5nOiLDpSIsQXNjcjoi8J2SnCIsYXNjcjoi8J2StiIsQXNzaWduOiLiiZQiLGFzdDoiKiIsYXN5bXA6IuKJiCIsYXN5bXBlcToi4omNIixBdGlsZGU6IsODIixhdGlsZGU6IsOjIixBdW1sOiLDhCIsYXVtbDoiw6QiLGF3Y29uaW50OiLiiLMiLGF3aW50OiLiqJEiLGJhY2tjb25nOiLiiYwiLGJhY2tlcHNpbG9uOiLPtiIsYmFja3ByaW1lOiLigLUiLGJhY2tzaW06IuKIvSIsYmFja3NpbWVxOiLii40iLEJhY2tzbGFzaDoi4oiWIixCYXJ2OiLiq6ciLGJhcnZlZToi4oq9IixiYXJ3ZWQ6IuKMhSIsQmFyd2VkOiLijIYiLGJhcndlZGdlOiLijIUiLGJicms6IuKOtSIsYmJya3Ricms6IuKOtiIsYmNvbmc6IuKJjCIsQmN5OiLQkSIsYmN5OiLQsSIsYmRxdW86IuKAniIsYmVjYXVzOiLiiLUiLGJlY2F1c2U6IuKItSIsQmVjYXVzZToi4oi1IixiZW1wdHl2OiLiprAiLGJlcHNpOiLPtiIsYmVybm91OiLihKwiLEJlcm5vdWxsaXM6IuKErCIsQmV0YToizpIiLGJldGE6Is6yIixiZXRoOiLihLYiLGJldHdlZW46IuKJrCIsQmZyOiLwnZSFIixiZnI6IvCdlJ8iLGJpZ2NhcDoi4ouCIixiaWdjaXJjOiLil68iLGJpZ2N1cDoi4ouDIixiaWdvZG90OiLiqIAiLGJpZ29wbHVzOiLiqIEiLGJpZ290aW1lczoi4qiCIixiaWdzcWN1cDoi4qiGIixiaWdzdGFyOiLimIUiLGJpZ3RyaWFuZ2xlZG93bjoi4pa9IixiaWd0cmlhbmdsZXVwOiLilrMiLGJpZ3VwbHVzOiLiqIQiLGJpZ3ZlZToi4ouBIixiaWd3ZWRnZToi4ouAIixia2Fyb3c6IuKkjSIsYmxhY2tsb3plbmdlOiLip6siLGJsYWNrc3F1YXJlOiLilqoiLGJsYWNrdHJpYW5nbGU6IuKWtCIsYmxhY2t0cmlhbmdsZWRvd246IuKWviIsYmxhY2t0cmlhbmdsZWxlZnQ6IuKXgiIsYmxhY2t0cmlhbmdsZXJpZ2h0OiLilrgiLGJsYW5rOiLikKMiLGJsazEyOiLilpIiLGJsazE0OiLilpEiLGJsazM0OiLilpMiLGJsb2NrOiLilogiLGJuZToiPeKDpSIsYm5lcXVpdjoi4omh4oOlIixiTm90OiLiq60iLGJub3Q6IuKMkCIsQm9wZjoi8J2UuSIsYm9wZjoi8J2VkyIsYm90OiLiiqUiLGJvdHRvbToi4oqlIixib3d0aWU6IuKLiCIsYm94Ym94OiLip4kiLGJveGRsOiLilJAiLGJveGRMOiLilZUiLGJveERsOiLilZYiLGJveERMOiLilZciLGJveGRyOiLilIwiLGJveGRSOiLilZIiLGJveERyOiLilZMiLGJveERSOiLilZQiLGJveGg6IuKUgCIsYm94SDoi4pWQIixib3hoZDoi4pSsIixib3hIZDoi4pWkIixib3hoRDoi4pWlIixib3hIRDoi4pWmIixib3hodToi4pS0Iixib3hIdToi4pWnIixib3hoVToi4pWoIixib3hIVToi4pWpIixib3htaW51czoi4oqfIixib3hwbHVzOiLiip4iLGJveHRpbWVzOiLiiqAiLGJveHVsOiLilJgiLGJveHVMOiLilZsiLGJveFVsOiLilZwiLGJveFVMOiLilZ0iLGJveHVyOiLilJQiLGJveHVSOiLilZgiLGJveFVyOiLilZkiLGJveFVSOiLilZoiLGJveHY6IuKUgiIsYm94Vjoi4pWRIixib3h2aDoi4pS8Iixib3h2SDoi4pWqIixib3hWaDoi4pWrIixib3hWSDoi4pWsIixib3h2bDoi4pSkIixib3h2TDoi4pWhIixib3hWbDoi4pWiIixib3hWTDoi4pWjIixib3h2cjoi4pScIixib3h2Ujoi4pWeIixib3hWcjoi4pWfIixib3hWUjoi4pWgIixicHJpbWU6IuKAtSIsYnJldmU6IsuYIixCcmV2ZToiy5giLGJydmJhcjoiwqYiLGJzY3I6IvCdkrciLEJzY3I6IuKErCIsYnNlbWk6IuKBjyIsYnNpbToi4oi9Iixic2ltZToi4ouNIixic29sYjoi4qeFIixic29sOiJcXCIsYnNvbGhzdWI6IuKfiCIsYnVsbDoi4oCiIixidWxsZXQ6IuKAoiIsYnVtcDoi4omOIixidW1wRToi4qquIixidW1wZToi4omPIixCdW1wZXE6IuKJjiIsYnVtcGVxOiLiiY8iLENhY3V0ZToixIYiLGNhY3V0ZToixIciLGNhcGFuZDoi4qmEIixjYXBicmN1cDoi4qmJIixjYXBjYXA6IuKpiyIsY2FwOiLiiKkiLENhcDoi4ouSIixjYXBjdXA6IuKphyIsY2FwZG90OiLiqYAiLENhcGl0YWxEaWZmZXJlbnRpYWxEOiLihYUiLGNhcHM6IuKIqe+4gCIsY2FyZXQ6IuKBgSIsY2Fyb246IsuHIixDYXlsZXlzOiLihK0iLGNjYXBzOiLiqY0iLENjYXJvbjoixIwiLGNjYXJvbjoixI0iLENjZWRpbDoiw4ciLGNjZWRpbDoiw6ciLENjaXJjOiLEiCIsY2NpcmM6IsSJIixDY29uaW50OiLiiLAiLGNjdXBzOiLiqYwiLGNjdXBzc206IuKpkCIsQ2RvdDoixIoiLGNkb3Q6IsSLIixjZWRpbDoiwrgiLENlZGlsbGE6IsK4IixjZW1wdHl2OiLiprIiLGNlbnQ6IsKiIixjZW50ZXJkb3Q6IsK3IixDZW50ZXJEb3Q6IsK3IixjZnI6IvCdlKAiLENmcjoi4oStIixDSGN5OiLQpyIsY2hjeToi0YciLGNoZWNrOiLinJMiLGNoZWNrbWFyazoi4pyTIixDaGk6Is6nIixjaGk6Is+HIixjaXJjOiLLhiIsY2lyY2VxOiLiiZciLGNpcmNsZWFycm93bGVmdDoi4oa6IixjaXJjbGVhcnJvd3JpZ2h0OiLihrsiLGNpcmNsZWRhc3Q6IuKKmyIsY2lyY2xlZGNpcmM6IuKKmiIsY2lyY2xlZGRhc2g6IuKKnSIsQ2lyY2xlRG90OiLiipkiLGNpcmNsZWRSOiLCriIsY2lyY2xlZFM6IuKTiCIsQ2lyY2xlTWludXM6IuKKliIsQ2lyY2xlUGx1czoi4oqVIixDaXJjbGVUaW1lczoi4oqXIixjaXI6IuKXiyIsY2lyRToi4qeDIixjaXJlOiLiiZciLGNpcmZuaW50OiLiqJAiLGNpcm1pZDoi4quvIixjaXJzY2lyOiLip4IiLENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoi4oiyIixDbG9zZUN1cmx5RG91YmxlUXVvdGU6IuKAnSIsQ2xvc2VDdXJseVF1b3RlOiLigJkiLGNsdWJzOiLimaMiLGNsdWJzdWl0OiLimaMiLGNvbG9uOiI6IixDb2xvbjoi4oi3IixDb2xvbmU6IuKptCIsY29sb25lOiLiiZQiLGNvbG9uZXE6IuKJlCIsY29tbWE6IiwiLGNvbW1hdDoiQCIsY29tcDoi4oiBIixjb21wZm46IuKImCIsY29tcGxlbWVudDoi4oiBIixjb21wbGV4ZXM6IuKEgiIsY29uZzoi4omFIixjb25nZG90OiLiqa0iLENvbmdydWVudDoi4omhIixjb25pbnQ6IuKIriIsQ29uaW50OiLiiK8iLENvbnRvdXJJbnRlZ3JhbDoi4oiuIixjb3BmOiLwnZWUIixDb3BmOiLihIIiLGNvcHJvZDoi4oiQIixDb3Byb2R1Y3Q6IuKIkCIsY29weToiwqkiLENPUFk6IsKpIixjb3B5c3I6IuKElyIsQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoi4oizIixjcmFycjoi4oa1Iixjcm9zczoi4pyXIixDcm9zczoi4qivIixDc2NyOiLwnZKeIixjc2NyOiLwnZK4Iixjc3ViOiLiq48iLGNzdWJlOiLiq5EiLGNzdXA6IuKrkCIsY3N1cGU6IuKrkiIsY3Rkb3Q6IuKLryIsY3VkYXJybDoi4qS4IixjdWRhcnJyOiLipLUiLGN1ZXByOiLii54iLGN1ZXNjOiLii58iLGN1bGFycjoi4oa2IixjdWxhcnJwOiLipL0iLGN1cGJyY2FwOiLiqYgiLGN1cGNhcDoi4qmGIixDdXBDYXA6IuKJjSIsY3VwOiLiiKoiLEN1cDoi4ouTIixjdXBjdXA6IuKpiiIsY3VwZG90OiLiio0iLGN1cG9yOiLiqYUiLGN1cHM6IuKIqu+4gCIsY3VyYXJyOiLihrciLGN1cmFycm06IuKkvCIsY3VybHllcXByZWM6IuKLniIsY3VybHllcXN1Y2M6IuKLnyIsY3VybHl2ZWU6IuKLjiIsY3VybHl3ZWRnZToi4ouPIixjdXJyZW46IsKkIixjdXJ2ZWFycm93bGVmdDoi4oa2IixjdXJ2ZWFycm93cmlnaHQ6IuKGtyIsY3V2ZWU6IuKLjiIsY3V3ZWQ6IuKLjyIsY3djb25pbnQ6IuKIsiIsY3dpbnQ6IuKIsSIsY3lsY3R5OiLijK0iLGRhZ2dlcjoi4oCgIixEYWdnZXI6IuKAoSIsZGFsZXRoOiLihLgiLGRhcnI6IuKGkyIsRGFycjoi4oahIixkQXJyOiLih5MiLGRhc2g6IuKAkCIsRGFzaHY6IuKrpCIsZGFzaHY6IuKKoyIsZGJrYXJvdzoi4qSPIixkYmxhYzoiy50iLERjYXJvbjoixI4iLGRjYXJvbjoixI8iLERjeToi0JQiLGRjeToi0LQiLGRkYWdnZXI6IuKAoSIsZGRhcnI6IuKHiiIsREQ6IuKFhSIsZGQ6IuKFhiIsRERvdHJhaGQ6IuKkkSIsZGRvdHNlcToi4qm3IixkZWc6IsKwIixEZWw6IuKIhyIsRGVsdGE6Is6UIixkZWx0YToizrQiLGRlbXB0eXY6IuKmsSIsZGZpc2h0OiLipb8iLERmcjoi8J2UhyIsZGZyOiLwnZShIixkSGFyOiLipaUiLGRoYXJsOiLih4MiLGRoYXJyOiLih4IiLERpYWNyaXRpY2FsQWN1dGU6IsK0IixEaWFjcml0aWNhbERvdDoiy5kiLERpYWNyaXRpY2FsRG91YmxlQWN1dGU6IsudIixEaWFjcml0aWNhbEdyYXZlOiJgIixEaWFjcml0aWNhbFRpbGRlOiLLnCIsZGlhbToi4ouEIixkaWFtb25kOiLii4QiLERpYW1vbmQ6IuKLhCIsZGlhbW9uZHN1aXQ6IuKZpiIsZGlhbXM6IuKZpiIsZGllOiLCqCIsRGlmZmVyZW50aWFsRDoi4oWGIixkaWdhbW1hOiLPnSIsZGlzaW46IuKLsiIsZGl2OiLDtyIsZGl2aWRlOiLDtyIsZGl2aWRlb250aW1lczoi4ouHIixkaXZvbng6IuKLhyIsREpjeToi0IIiLGRqY3k6ItGSIixkbGNvcm46IuKMniIsZGxjcm9wOiLijI0iLGRvbGxhcjoiJCIsRG9wZjoi8J2UuyIsZG9wZjoi8J2VlSIsRG90OiLCqCIsZG90OiLLmSIsRG90RG90OiLig5wiLGRvdGVxOiLiiZAiLGRvdGVxZG90OiLiiZEiLERvdEVxdWFsOiLiiZAiLGRvdG1pbnVzOiLiiLgiLGRvdHBsdXM6IuKIlCIsZG90c3F1YXJlOiLiiqEiLGRvdWJsZWJhcndlZGdlOiLijIYiLERvdWJsZUNvbnRvdXJJbnRlZ3JhbDoi4oivIixEb3VibGVEb3Q6IsKoIixEb3VibGVEb3duQXJyb3c6IuKHkyIsRG91YmxlTGVmdEFycm93OiLih5AiLERvdWJsZUxlZnRSaWdodEFycm93OiLih5QiLERvdWJsZUxlZnRUZWU6IuKrpCIsRG91YmxlTG9uZ0xlZnRBcnJvdzoi4p+4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6IuKfuiIsRG91YmxlTG9uZ1JpZ2h0QXJyb3c6IuKfuSIsRG91YmxlUmlnaHRBcnJvdzoi4oeSIixEb3VibGVSaWdodFRlZToi4oqoIixEb3VibGVVcEFycm93OiLih5EiLERvdWJsZVVwRG93bkFycm93OiLih5UiLERvdWJsZVZlcnRpY2FsQmFyOiLiiKUiLERvd25BcnJvd0Jhcjoi4qSTIixkb3duYXJyb3c6IuKGkyIsRG93bkFycm93OiLihpMiLERvd25hcnJvdzoi4oeTIixEb3duQXJyb3dVcEFycm93OiLih7UiLERvd25CcmV2ZToizJEiLGRvd25kb3duYXJyb3dzOiLih4oiLGRvd25oYXJwb29ubGVmdDoi4oeDIixkb3duaGFycG9vbnJpZ2h0OiLih4IiLERvd25MZWZ0UmlnaHRWZWN0b3I6IuKlkCIsRG93bkxlZnRUZWVWZWN0b3I6IuKlniIsRG93bkxlZnRWZWN0b3JCYXI6IuKlliIsRG93bkxlZnRWZWN0b3I6IuKGvSIsRG93blJpZ2h0VGVlVmVjdG9yOiLipZ8iLERvd25SaWdodFZlY3RvckJhcjoi4qWXIixEb3duUmlnaHRWZWN0b3I6IuKHgSIsRG93blRlZUFycm93OiLihqciLERvd25UZWU6IuKKpCIsZHJia2Fyb3c6IuKkkCIsZHJjb3JuOiLijJ8iLGRyY3JvcDoi4oyMIixEc2NyOiLwnZKfIixkc2NyOiLwnZK5IixEU2N5OiLQhSIsZHNjeToi0ZUiLGRzb2w6IuKntiIsRHN0cm9rOiLEkCIsZHN0cm9rOiLEkSIsZHRkb3Q6IuKLsSIsZHRyaToi4pa/IixkdHJpZjoi4pa+IixkdWFycjoi4oe1IixkdWhhcjoi4qWvIixkd2FuZ2xlOiLipqYiLERaY3k6ItCPIixkemN5OiLRnyIsZHppZ3JhcnI6IuKfvyIsRWFjdXRlOiLDiSIsZWFjdXRlOiLDqSIsZWFzdGVyOiLiqa4iLEVjYXJvbjoixJoiLGVjYXJvbjoixJsiLEVjaXJjOiLDiiIsZWNpcmM6IsOqIixlY2lyOiLiiZYiLGVjb2xvbjoi4omVIixFY3k6ItCtIixlY3k6ItGNIixlRERvdDoi4qm3IixFZG90OiLEliIsZWRvdDoixJciLGVEb3Q6IuKJkSIsZWU6IuKFhyIsZWZEb3Q6IuKJkiIsRWZyOiLwnZSIIixlZnI6IvCdlKIiLGVnOiLiqpoiLEVncmF2ZToiw4giLGVncmF2ZToiw6giLGVnczoi4qqWIixlZ3Nkb3Q6IuKqmCIsZWw6IuKqmSIsRWxlbWVudDoi4oiIIixlbGludGVyczoi4o+nIixlbGw6IuKEkyIsZWxzOiLiqpUiLGVsc2RvdDoi4qqXIixFbWFjcjoixJIiLGVtYWNyOiLEkyIsZW1wdHk6IuKIhSIsZW1wdHlzZXQ6IuKIhSIsRW1wdHlTbWFsbFNxdWFyZToi4pe7IixlbXB0eXY6IuKIhSIsRW1wdHlWZXJ5U21hbGxTcXVhcmU6IuKWqyIsZW1zcDEzOiLigIQiLGVtc3AxNDoi4oCFIixlbXNwOiLigIMiLEVORzoixYoiLGVuZzoixYsiLGVuc3A6IuKAgiIsRW9nb246IsSYIixlb2dvbjoixJkiLEVvcGY6IvCdlLwiLGVvcGY6IvCdlZYiLGVwYXI6IuKLlSIsZXBhcnNsOiLip6MiLGVwbHVzOiLiqbEiLGVwc2k6Is61IixFcHNpbG9uOiLOlSIsZXBzaWxvbjoizrUiLGVwc2l2OiLPtSIsZXFjaXJjOiLiiZYiLGVxY29sb246IuKJlSIsZXFzaW06IuKJgiIsZXFzbGFudGd0cjoi4qqWIixlcXNsYW50bGVzczoi4qqVIixFcXVhbDoi4qm1IixlcXVhbHM6Ij0iLEVxdWFsVGlsZGU6IuKJgiIsZXF1ZXN0OiLiiZ8iLEVxdWlsaWJyaXVtOiLih4wiLGVxdWl2OiLiiaEiLGVxdWl2REQ6IuKpuCIsZXF2cGFyc2w6IuKnpSIsZXJhcnI6IuKlsSIsZXJEb3Q6IuKJkyIsZXNjcjoi4oSvIixFc2NyOiLihLAiLGVzZG90OiLiiZAiLEVzaW06IuKpsyIsZXNpbToi4omCIixFdGE6Is6XIixldGE6Is63IixFVEg6IsOQIixldGg6IsOwIixFdW1sOiLDiyIsZXVtbDoiw6siLGV1cm86IuKCrCIsZXhjbDoiISIsZXhpc3Q6IuKIgyIsRXhpc3RzOiLiiIMiLGV4cGVjdGF0aW9uOiLihLAiLGV4cG9uZW50aWFsZToi4oWHIixFeHBvbmVudGlhbEU6IuKFhyIsZmFsbGluZ2RvdHNlcToi4omSIixGY3k6ItCkIixmY3k6ItGEIixmZW1hbGU6IuKZgCIsZmZpbGlnOiLvrIMiLGZmbGlnOiLvrIAiLGZmbGxpZzoi76yEIixGZnI6IvCdlIkiLGZmcjoi8J2UoyIsZmlsaWc6Iu+sgSIsRmlsbGVkU21hbGxTcXVhcmU6IuKXvCIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiLilqoiLGZqbGlnOiJmaiIsZmxhdDoi4pmtIixmbGxpZzoi76yCIixmbHRuczoi4paxIixmbm9mOiLGkiIsRm9wZjoi8J2UvSIsZm9wZjoi8J2VlyIsZm9yYWxsOiLiiIAiLEZvckFsbDoi4oiAIixmb3JrOiLii5QiLGZvcmt2OiLiq5kiLEZvdXJpZXJ0cmY6IuKEsSIsZnBhcnRpbnQ6IuKojSIsZnJhYzEyOiLCvSIsZnJhYzEzOiLihZMiLGZyYWMxNDoiwrwiLGZyYWMxNToi4oWVIixmcmFjMTY6IuKFmSIsZnJhYzE4OiLihZsiLGZyYWMyMzoi4oWUIixmcmFjMjU6IuKFliIsZnJhYzM0OiLCviIsZnJhYzM1OiLihZciLGZyYWMzODoi4oWcIixmcmFjNDU6IuKFmCIsZnJhYzU2OiLihZoiLGZyYWM1ODoi4oWdIixmcmFjNzg6IuKFniIsZnJhc2w6IuKBhCIsZnJvd246IuKMoiIsZnNjcjoi8J2SuyIsRnNjcjoi4oSxIixnYWN1dGU6Ise1IixHYW1tYToizpMiLGdhbW1hOiLOsyIsR2FtbWFkOiLPnCIsZ2FtbWFkOiLPnSIsZ2FwOiLiqoYiLEdicmV2ZToixJ4iLGdicmV2ZToixJ8iLEdjZWRpbDoixKIiLEdjaXJjOiLEnCIsZ2NpcmM6IsSdIixHY3k6ItCTIixnY3k6ItCzIixHZG90OiLEoCIsZ2RvdDoixKEiLGdlOiLiiaUiLGdFOiLiiaciLGdFbDoi4qqMIixnZWw6IuKLmyIsZ2VxOiLiiaUiLGdlcXE6IuKJpyIsZ2Vxc2xhbnQ6IuKpviIsZ2VzY2M6IuKqqSIsZ2VzOiLiqb4iLGdlc2RvdDoi4qqAIixnZXNkb3RvOiLiqoIiLGdlc2RvdG9sOiLiqoQiLGdlc2w6IuKLm++4gCIsZ2VzbGVzOiLiqpQiLEdmcjoi8J2UiiIsZ2ZyOiLwnZSkIixnZzoi4omrIixHZzoi4ouZIixnZ2c6IuKLmSIsZ2ltZWw6IuKEtyIsR0pjeToi0IMiLGdqY3k6ItGTIixnbGE6IuKqpSIsZ2w6IuKJtyIsZ2xFOiLiqpIiLGdsajoi4qqkIixnbmFwOiLiqooiLGduYXBwcm94OiLiqooiLGduZToi4qqIIixnbkU6IuKJqSIsZ25lcToi4qqIIixnbmVxcToi4ompIixnbnNpbToi4ounIixHb3BmOiLwnZS+Iixnb3BmOiLwnZWYIixncmF2ZToiYCIsR3JlYXRlckVxdWFsOiLiiaUiLEdyZWF0ZXJFcXVhbExlc3M6IuKLmyIsR3JlYXRlckZ1bGxFcXVhbDoi4omnIixHcmVhdGVyR3JlYXRlcjoi4qqiIixHcmVhdGVyTGVzczoi4om3IixHcmVhdGVyU2xhbnRFcXVhbDoi4qm+IixHcmVhdGVyVGlsZGU6IuKJsyIsR3Njcjoi8J2SoiIsZ3Njcjoi4oSKIixnc2ltOiLiibMiLGdzaW1lOiLiqo4iLGdzaW1sOiLiqpAiLGd0Y2M6IuKqpyIsZ3RjaXI6IuKpuiIsZ3Q6Ij4iLEdUOiI+IixHdDoi4omrIixndGRvdDoi4ouXIixndGxQYXI6IuKmlSIsZ3RxdWVzdDoi4qm8IixndHJhcHByb3g6IuKqhiIsZ3RyYXJyOiLipbgiLGd0cmRvdDoi4ouXIixndHJlcWxlc3M6IuKLmyIsZ3RyZXFxbGVzczoi4qqMIixndHJsZXNzOiLiibciLGd0cnNpbToi4omzIixndmVydG5lcXE6IuKJqe+4gCIsZ3ZuRToi4omp77iAIixIYWNlazoiy4ciLGhhaXJzcDoi4oCKIixoYWxmOiLCvSIsaGFtaWx0OiLihIsiLEhBUkRjeToi0KoiLGhhcmRjeToi0YoiLGhhcnJjaXI6IuKliCIsaGFycjoi4oaUIixoQXJyOiLih5QiLGhhcnJ3OiLihq0iLEhhdDoiXiIsaGJhcjoi4oSPIixIY2lyYzoixKQiLGhjaXJjOiLEpSIsaGVhcnRzOiLimaUiLGhlYXJ0c3VpdDoi4pmlIixoZWxsaXA6IuKApiIsaGVyY29uOiLiirkiLGhmcjoi8J2UpSIsSGZyOiLihIwiLEhpbGJlcnRTcGFjZToi4oSLIixoa3NlYXJvdzoi4qSlIixoa3N3YXJvdzoi4qSmIixob2Fycjoi4oe/Iixob210aHQ6IuKIuyIsaG9va2xlZnRhcnJvdzoi4oapIixob29rcmlnaHRhcnJvdzoi4oaqIixob3BmOiLwnZWZIixIb3BmOiLihI0iLGhvcmJhcjoi4oCVIixIb3Jpem9udGFsTGluZToi4pSAIixoc2NyOiLwnZK9IixIc2NyOiLihIsiLGhzbGFzaDoi4oSPIixIc3Ryb2s6IsSmIixoc3Ryb2s6IsSnIixIdW1wRG93bkh1bXA6IuKJjiIsSHVtcEVxdWFsOiLiiY8iLGh5YnVsbDoi4oGDIixoeXBoZW46IuKAkCIsSWFjdXRlOiLDjSIsaWFjdXRlOiLDrSIsaWM6IuKBoyIsSWNpcmM6IsOOIixpY2lyYzoiw64iLEljeToi0JgiLGljeToi0LgiLElkb3Q6IsSwIixJRWN5OiLQlSIsaWVjeToi0LUiLGlleGNsOiLCoSIsaWZmOiLih5QiLGlmcjoi8J2UpiIsSWZyOiLihJEiLElncmF2ZToiw4wiLGlncmF2ZToiw6wiLGlpOiLihYgiLGlpaWludDoi4qiMIixpaWludDoi4oitIixpaW5maW46IuKnnCIsaWlvdGE6IuKEqSIsSUpsaWc6IsSyIixpamxpZzoixLMiLEltYWNyOiLEqiIsaW1hY3I6IsSrIixpbWFnZToi4oSRIixJbWFnaW5hcnlJOiLihYgiLGltYWdsaW5lOiLihJAiLGltYWdwYXJ0OiLihJEiLGltYXRoOiLEsSIsSW06IuKEkSIsaW1vZjoi4oq3IixpbXBlZDoixrUiLEltcGxpZXM6IuKHkiIsaW5jYXJlOiLihIUiLGluOiLiiIgiLGluZmluOiLiiJ4iLGluZmludGllOiLip50iLGlub2RvdDoixLEiLGludGNhbDoi4oq6IixpbnQ6IuKIqyIsSW50OiLiiKwiLGludGVnZXJzOiLihKQiLEludGVncmFsOiLiiKsiLGludGVyY2FsOiLiiroiLEludGVyc2VjdGlvbjoi4ouCIixpbnRsYXJoazoi4qiXIixpbnRwcm9kOiLiqLwiLEludmlzaWJsZUNvbW1hOiLigaMiLEludmlzaWJsZVRpbWVzOiLigaIiLElPY3k6ItCBIixpb2N5OiLRkSIsSW9nb246IsSuIixpb2dvbjoixK8iLElvcGY6IvCdlYAiLGlvcGY6IvCdlZoiLElvdGE6Is6ZIixpb3RhOiLOuSIsaXByb2Q6IuKovCIsaXF1ZXN0OiLCvyIsaXNjcjoi8J2SviIsSXNjcjoi4oSQIixpc2luOiLiiIgiLGlzaW5kb3Q6IuKLtSIsaXNpbkU6IuKLuSIsaXNpbnM6IuKLtCIsaXNpbnN2OiLii7MiLGlzaW52OiLiiIgiLGl0OiLigaIiLEl0aWxkZToixKgiLGl0aWxkZToixKkiLEl1a2N5OiLQhiIsaXVrY3k6ItGWIixJdW1sOiLDjyIsaXVtbDoiw68iLEpjaXJjOiLEtCIsamNpcmM6IsS1IixKY3k6ItCZIixqY3k6ItC5IixKZnI6IvCdlI0iLGpmcjoi8J2UpyIsam1hdGg6Isi3IixKb3BmOiLwnZWBIixqb3BmOiLwnZWbIixKc2NyOiLwnZKlIixqc2NyOiLwnZK/IixKc2VyY3k6ItCIIixqc2VyY3k6ItGYIixKdWtjeToi0IQiLGp1a2N5OiLRlCIsS2FwcGE6Is6aIixrYXBwYToizroiLGthcHBhdjoiz7AiLEtjZWRpbDoixLYiLGtjZWRpbDoixLciLEtjeToi0JoiLGtjeToi0LoiLEtmcjoi8J2UjiIsa2ZyOiLwnZSoIixrZ3JlZW46IsS4IixLSGN5OiLQpSIsa2hjeToi0YUiLEtKY3k6ItCMIixramN5OiLRnCIsS29wZjoi8J2VgiIsa29wZjoi8J2VnCIsS3Njcjoi8J2SpiIsa3Njcjoi8J2TgCIsbEFhcnI6IuKHmiIsTGFjdXRlOiLEuSIsbGFjdXRlOiLEuiIsbGFlbXB0eXY6IuKmtCIsbGFncmFuOiLihJIiLExhbWJkYToizpsiLGxhbWJkYToizrsiLGxhbmc6IuKfqCIsTGFuZzoi4p+qIixsYW5nZDoi4qaRIixsYW5nbGU6IuKfqCIsbGFwOiLiqoUiLExhcGxhY2V0cmY6IuKEkiIsbGFxdW86IsKrIixsYXJyYjoi4oekIixsYXJyYmZzOiLipJ8iLGxhcnI6IuKGkCIsTGFycjoi4oaeIixsQXJyOiLih5AiLGxhcnJmczoi4qSdIixsYXJyaGs6IuKGqSIsbGFycmxwOiLihqsiLGxhcnJwbDoi4qS5IixsYXJyc2ltOiLipbMiLGxhcnJ0bDoi4oaiIixsYXRhaWw6IuKkmSIsbEF0YWlsOiLipJsiLGxhdDoi4qqrIixsYXRlOiLiqq0iLGxhdGVzOiLiqq3vuIAiLGxiYXJyOiLipIwiLGxCYXJyOiLipI4iLGxiYnJrOiLinbIiLGxicmFjZToieyIsbGJyYWNrOiJbIixsYnJrZToi4qaLIixsYnJrc2xkOiLipo8iLGxicmtzbHU6IuKmjSIsTGNhcm9uOiLEvSIsbGNhcm9uOiLEviIsTGNlZGlsOiLEuyIsbGNlZGlsOiLEvCIsbGNlaWw6IuKMiCIsbGN1YjoieyIsTGN5OiLQmyIsbGN5OiLQuyIsbGRjYToi4qS2IixsZHF1bzoi4oCcIixsZHF1b3I6IuKAniIsbGRyZGhhcjoi4qWnIixsZHJ1c2hhcjoi4qWLIixsZHNoOiLihrIiLGxlOiLiiaQiLGxFOiLiiaYiLExlZnRBbmdsZUJyYWNrZXQ6IuKfqCIsTGVmdEFycm93QmFyOiLih6QiLGxlZnRhcnJvdzoi4oaQIixMZWZ0QXJyb3c6IuKGkCIsTGVmdGFycm93OiLih5AiLExlZnRBcnJvd1JpZ2h0QXJyb3c6IuKHhiIsbGVmdGFycm93dGFpbDoi4oaiIixMZWZ0Q2VpbGluZzoi4oyIIixMZWZ0RG91YmxlQnJhY2tldDoi4p+mIixMZWZ0RG93blRlZVZlY3Rvcjoi4qWhIixMZWZ0RG93blZlY3RvckJhcjoi4qWZIixMZWZ0RG93blZlY3Rvcjoi4oeDIixMZWZ0Rmxvb3I6IuKMiiIsbGVmdGhhcnBvb25kb3duOiLihr0iLGxlZnRoYXJwb29udXA6IuKGvCIsbGVmdGxlZnRhcnJvd3M6IuKHhyIsbGVmdHJpZ2h0YXJyb3c6IuKGlCIsTGVmdFJpZ2h0QXJyb3c6IuKGlCIsTGVmdHJpZ2h0YXJyb3c6IuKHlCIsbGVmdHJpZ2h0YXJyb3dzOiLih4YiLGxlZnRyaWdodGhhcnBvb25zOiLih4siLGxlZnRyaWdodHNxdWlnYXJyb3c6IuKGrSIsTGVmdFJpZ2h0VmVjdG9yOiLipY4iLExlZnRUZWVBcnJvdzoi4oakIixMZWZ0VGVlOiLiiqMiLExlZnRUZWVWZWN0b3I6IuKlmiIsbGVmdHRocmVldGltZXM6IuKLiyIsTGVmdFRyaWFuZ2xlQmFyOiLip48iLExlZnRUcmlhbmdsZToi4oqyIixMZWZ0VHJpYW5nbGVFcXVhbDoi4oq0IixMZWZ0VXBEb3duVmVjdG9yOiLipZEiLExlZnRVcFRlZVZlY3Rvcjoi4qWgIixMZWZ0VXBWZWN0b3JCYXI6IuKlmCIsTGVmdFVwVmVjdG9yOiLihr8iLExlZnRWZWN0b3JCYXI6IuKlkiIsTGVmdFZlY3Rvcjoi4oa8IixsRWc6IuKqiyIsbGVnOiLii5oiLGxlcToi4omkIixsZXFxOiLiiaYiLGxlcXNsYW50OiLiqb0iLGxlc2NjOiLiqqgiLGxlczoi4qm9IixsZXNkb3Q6IuKpvyIsbGVzZG90bzoi4qqBIixsZXNkb3Rvcjoi4qqDIixsZXNnOiLii5rvuIAiLGxlc2dlczoi4qqTIixsZXNzYXBwcm94OiLiqoUiLGxlc3Nkb3Q6IuKLliIsbGVzc2VxZ3RyOiLii5oiLGxlc3NlcXFndHI6IuKqiyIsTGVzc0VxdWFsR3JlYXRlcjoi4ouaIixMZXNzRnVsbEVxdWFsOiLiiaYiLExlc3NHcmVhdGVyOiLiibYiLGxlc3NndHI6IuKJtiIsTGVzc0xlc3M6IuKqoSIsbGVzc3NpbToi4omyIixMZXNzU2xhbnRFcXVhbDoi4qm9IixMZXNzVGlsZGU6IuKJsiIsbGZpc2h0OiLipbwiLGxmbG9vcjoi4oyKIixMZnI6IvCdlI8iLGxmcjoi8J2UqSIsbGc6IuKJtiIsbGdFOiLiqpEiLGxIYXI6IuKloiIsbGhhcmQ6IuKGvSIsbGhhcnU6IuKGvCIsbGhhcnVsOiLipaoiLGxoYmxrOiLiloQiLExKY3k6ItCJIixsamN5OiLRmSIsbGxhcnI6IuKHhyIsbGw6IuKJqiIsTGw6IuKLmCIsbGxjb3JuZXI6IuKMniIsTGxlZnRhcnJvdzoi4oeaIixsbGhhcmQ6IuKlqyIsbGx0cmk6IuKXuiIsTG1pZG90OiLEvyIsbG1pZG90OiLFgCIsbG1vdXN0YWNoZToi4o6wIixsbW91c3Q6IuKOsCIsbG5hcDoi4qqJIixsbmFwcHJveDoi4qqJIixsbmU6IuKqhyIsbG5FOiLiiagiLGxuZXE6IuKqhyIsbG5lcXE6IuKJqCIsbG5zaW06IuKLpiIsbG9hbmc6IuKfrCIsbG9hcnI6IuKHvSIsbG9icms6IuKfpiIsbG9uZ2xlZnRhcnJvdzoi4p+1IixMb25nTGVmdEFycm93OiLin7UiLExvbmdsZWZ0YXJyb3c6IuKfuCIsbG9uZ2xlZnRyaWdodGFycm93OiLin7ciLExvbmdMZWZ0UmlnaHRBcnJvdzoi4p+3IixMb25nbGVmdHJpZ2h0YXJyb3c6IuKfuiIsbG9uZ21hcHN0bzoi4p+8Iixsb25ncmlnaHRhcnJvdzoi4p+2IixMb25nUmlnaHRBcnJvdzoi4p+2IixMb25ncmlnaHRhcnJvdzoi4p+5Iixsb29wYXJyb3dsZWZ0OiLihqsiLGxvb3BhcnJvd3JpZ2h0OiLihqwiLGxvcGFyOiLipoUiLExvcGY6IvCdlYMiLGxvcGY6IvCdlZ0iLGxvcGx1czoi4qitIixsb3RpbWVzOiLiqLQiLGxvd2FzdDoi4oiXIixsb3diYXI6Il8iLExvd2VyTGVmdEFycm93OiLihpkiLExvd2VyUmlnaHRBcnJvdzoi4oaYIixsb3o6IuKXiiIsbG96ZW5nZToi4peKIixsb3pmOiLip6siLGxwYXI6IigiLGxwYXJsdDoi4qaTIixscmFycjoi4oeGIixscmNvcm5lcjoi4oyfIixscmhhcjoi4oeLIixscmhhcmQ6IuKlrSIsbHJtOiLigI4iLGxydHJpOiLiir8iLGxzYXF1bzoi4oC5Iixsc2NyOiLwnZOBIixMc2NyOiLihJIiLGxzaDoi4oawIixMc2g6IuKGsCIsbHNpbToi4omyIixsc2ltZToi4qqNIixsc2ltZzoi4qqPIixsc3FiOiJbIixsc3F1bzoi4oCYIixsc3F1b3I6IuKAmiIsTHN0cm9rOiLFgSIsbHN0cm9rOiLFgiIsbHRjYzoi4qqmIixsdGNpcjoi4qm5IixsdDoiPCIsTFQ6IjwiLEx0OiLiiaoiLGx0ZG90OiLii5YiLGx0aHJlZToi4ouLIixsdGltZXM6IuKLiSIsbHRsYXJyOiLipbYiLGx0cXVlc3Q6IuKpuyIsbHRyaToi4peDIixsdHJpZToi4oq0IixsdHJpZjoi4peCIixsdHJQYXI6IuKmliIsbHVyZHNoYXI6IuKliiIsbHVydWhhcjoi4qWmIixsdmVydG5lcXE6IuKJqO+4gCIsbHZuRToi4omo77iAIixtYWNyOiLCryIsbWFsZToi4pmCIixtYWx0OiLinKAiLG1hbHRlc2U6IuKcoCIsTWFwOiLipIUiLG1hcDoi4oamIixtYXBzdG86IuKGpiIsbWFwc3RvZG93bjoi4oanIixtYXBzdG9sZWZ0OiLihqQiLG1hcHN0b3VwOiLihqUiLG1hcmtlcjoi4pauIixtY29tbWE6IuKoqSIsTWN5OiLQnCIsbWN5OiLQvCIsbWRhc2g6IuKAlCIsbUREb3Q6IuKIuiIsbWVhc3VyZWRhbmdsZToi4oihIixNZWRpdW1TcGFjZToi4oGfIixNZWxsaW50cmY6IuKEsyIsTWZyOiLwnZSQIixtZnI6IvCdlKoiLG1obzoi4oSnIixtaWNybzoiwrUiLG1pZGFzdDoiKiIsbWlkY2lyOiLiq7AiLG1pZDoi4oijIixtaWRkb3Q6IsK3IixtaW51c2I6IuKKnyIsbWludXM6IuKIkiIsbWludXNkOiLiiLgiLG1pbnVzZHU6IuKoqiIsTWludXNQbHVzOiLiiJMiLG1sY3A6IuKrmyIsbWxkcjoi4oCmIixtbnBsdXM6IuKIkyIsbW9kZWxzOiLiiqciLE1vcGY6IvCdlYQiLG1vcGY6IvCdlZ4iLG1wOiLiiJMiLG1zY3I6IvCdk4IiLE1zY3I6IuKEsyIsbXN0cG9zOiLiiL4iLE11OiLOnCIsbXU6Is68IixtdWx0aW1hcDoi4oq4IixtdW1hcDoi4oq4IixuYWJsYToi4oiHIixOYWN1dGU6IsWDIixuYWN1dGU6IsWEIixuYW5nOiLiiKDig5IiLG5hcDoi4omJIixuYXBFOiLiqbDMuCIsbmFwaWQ6IuKJi8y4IixuYXBvczoixYkiLG5hcHByb3g6IuKJiSIsbmF0dXJhbDoi4pmuIixuYXR1cmFsczoi4oSVIixuYXR1cjoi4pmuIixuYnNwOiLCoCIsbmJ1bXA6IuKJjsy4IixuYnVtcGU6IuKJj8y4IixuY2FwOiLiqYMiLE5jYXJvbjoixYciLG5jYXJvbjoixYgiLE5jZWRpbDoixYUiLG5jZWRpbDoixYYiLG5jb25nOiLiiYciLG5jb25nZG90OiLiqa3MuCIsbmN1cDoi4qmCIixOY3k6ItCdIixuY3k6ItC9IixuZGFzaDoi4oCTIixuZWFyaGs6IuKkpCIsbmVhcnI6IuKGlyIsbmVBcnI6IuKHlyIsbmVhcnJvdzoi4oaXIixuZToi4omgIixuZWRvdDoi4omQzLgiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6IuKAiyIsTmVnYXRpdmVUaGlja1NwYWNlOiLigIsiLE5lZ2F0aXZlVGhpblNwYWNlOiLigIsiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToi4oCLIixuZXF1aXY6IuKJoiIsbmVzZWFyOiLipKgiLG5lc2ltOiLiiYLMuCIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6IuKJqyIsTmVzdGVkTGVzc0xlc3M6IuKJqiIsTmV3TGluZToiXG4iLG5leGlzdDoi4oiEIixuZXhpc3RzOiLiiIQiLE5mcjoi8J2UkSIsbmZyOiLwnZSrIixuZ0U6IuKJp8y4IixuZ2U6IuKJsSIsbmdlcToi4omxIixuZ2VxcToi4omnzLgiLG5nZXFzbGFudDoi4qm+zLgiLG5nZXM6IuKpvsy4IixuR2c6IuKLmcy4IixuZ3NpbToi4om1IixuR3Q6IuKJq+KDkiIsbmd0OiLiia8iLG5ndHI6IuKJryIsbkd0djoi4omrzLgiLG5oYXJyOiLihq4iLG5oQXJyOiLih44iLG5ocGFyOiLiq7IiLG5pOiLiiIsiLG5pczoi4ou8IixuaXNkOiLii7oiLG5pdjoi4oiLIixOSmN5OiLQiiIsbmpjeToi0ZoiLG5sYXJyOiLihpoiLG5sQXJyOiLih40iLG5sZHI6IuKApSIsbmxFOiLiiabMuCIsbmxlOiLiibAiLG5sZWZ0YXJyb3c6IuKGmiIsbkxlZnRhcnJvdzoi4oeNIixubGVmdHJpZ2h0YXJyb3c6IuKGriIsbkxlZnRyaWdodGFycm93OiLih44iLG5sZXE6IuKJsCIsbmxlcXE6IuKJpsy4IixubGVxc2xhbnQ6IuKpvcy4IixubGVzOiLiqb3MuCIsbmxlc3M6IuKJriIsbkxsOiLii5jMuCIsbmxzaW06IuKJtCIsbkx0OiLiiarig5IiLG5sdDoi4omuIixubHRyaToi4ouqIixubHRyaWU6IuKLrCIsbkx0djoi4omqzLgiLG5taWQ6IuKIpCIsTm9CcmVhazoi4oGgIixOb25CcmVha2luZ1NwYWNlOiLCoCIsbm9wZjoi8J2VnyIsTm9wZjoi4oSVIixOb3Q6IuKrrCIsbm90OiLCrCIsTm90Q29uZ3J1ZW50OiLiiaIiLE5vdEN1cENhcDoi4omtIixOb3REb3VibGVWZXJ0aWNhbEJhcjoi4oimIixOb3RFbGVtZW50OiLiiIkiLE5vdEVxdWFsOiLiiaAiLE5vdEVxdWFsVGlsZGU6IuKJgsy4IixOb3RFeGlzdHM6IuKIhCIsTm90R3JlYXRlcjoi4omvIixOb3RHcmVhdGVyRXF1YWw6IuKJsSIsTm90R3JlYXRlckZ1bGxFcXVhbDoi4omnzLgiLE5vdEdyZWF0ZXJHcmVhdGVyOiLiiavMuCIsTm90R3JlYXRlckxlc3M6IuKJuSIsTm90R3JlYXRlclNsYW50RXF1YWw6IuKpvsy4IixOb3RHcmVhdGVyVGlsZGU6IuKJtSIsTm90SHVtcERvd25IdW1wOiLiiY7MuCIsTm90SHVtcEVxdWFsOiLiiY/MuCIsbm90aW46IuKIiSIsbm90aW5kb3Q6IuKLtcy4Iixub3RpbkU6IuKLucy4Iixub3RpbnZhOiLiiIkiLG5vdGludmI6IuKLtyIsbm90aW52Yzoi4ou2IixOb3RMZWZ0VHJpYW5nbGVCYXI6IuKnj8y4IixOb3RMZWZ0VHJpYW5nbGU6IuKLqiIsTm90TGVmdFRyaWFuZ2xlRXF1YWw6IuKLrCIsTm90TGVzczoi4omuIixOb3RMZXNzRXF1YWw6IuKJsCIsTm90TGVzc0dyZWF0ZXI6IuKJuCIsTm90TGVzc0xlc3M6IuKJqsy4IixOb3RMZXNzU2xhbnRFcXVhbDoi4qm9zLgiLE5vdExlc3NUaWxkZToi4om0IixOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcjoi4qqizLgiLE5vdE5lc3RlZExlc3NMZXNzOiLiqqHMuCIsbm90bmk6IuKIjCIsbm90bml2YToi4oiMIixub3RuaXZiOiLii74iLG5vdG5pdmM6IuKLvSIsTm90UHJlY2VkZXM6IuKKgCIsTm90UHJlY2VkZXNFcXVhbDoi4qqvzLgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoi4ougIixOb3RSZXZlcnNlRWxlbWVudDoi4oiMIixOb3RSaWdodFRyaWFuZ2xlQmFyOiLip5DMuCIsTm90UmlnaHRUcmlhbmdsZToi4ourIixOb3RSaWdodFRyaWFuZ2xlRXF1YWw6IuKLrSIsTm90U3F1YXJlU3Vic2V0OiLiio/MuCIsTm90U3F1YXJlU3Vic2V0RXF1YWw6IuKLoiIsTm90U3F1YXJlU3VwZXJzZXQ6IuKKkMy4IixOb3RTcXVhcmVTdXBlcnNldEVxdWFsOiLii6MiLE5vdFN1YnNldDoi4oqC4oOSIixOb3RTdWJzZXRFcXVhbDoi4oqIIixOb3RTdWNjZWVkczoi4oqBIixOb3RTdWNjZWVkc0VxdWFsOiLiqrDMuCIsTm90U3VjY2VlZHNTbGFudEVxdWFsOiLii6EiLE5vdFN1Y2NlZWRzVGlsZGU6IuKJv8y4IixOb3RTdXBlcnNldDoi4oqD4oOSIixOb3RTdXBlcnNldEVxdWFsOiLiiokiLE5vdFRpbGRlOiLiiYEiLE5vdFRpbGRlRXF1YWw6IuKJhCIsTm90VGlsZGVGdWxsRXF1YWw6IuKJhyIsTm90VGlsZGVUaWxkZToi4omJIixOb3RWZXJ0aWNhbEJhcjoi4oikIixucGFyYWxsZWw6IuKIpiIsbnBhcjoi4oimIixucGFyc2w6IuKrveKDpSIsbnBhcnQ6IuKIgsy4IixucG9saW50OiLiqJQiLG5wcjoi4oqAIixucHJjdWU6IuKLoCIsbnByZWM6IuKKgCIsbnByZWNlcToi4qqvzLgiLG5wcmU6IuKqr8y4IixucmFycmM6IuKks8y4IixucmFycjoi4oabIixuckFycjoi4oePIixucmFycnc6IuKGncy4IixucmlnaHRhcnJvdzoi4oabIixuUmlnaHRhcnJvdzoi4oePIixucnRyaToi4ourIixucnRyaWU6IuKLrSIsbnNjOiLiioEiLG5zY2N1ZToi4ouhIixuc2NlOiLiqrDMuCIsTnNjcjoi8J2SqSIsbnNjcjoi8J2TgyIsbnNob3J0bWlkOiLiiKQiLG5zaG9ydHBhcmFsbGVsOiLiiKYiLG5zaW06IuKJgSIsbnNpbWU6IuKJhCIsbnNpbWVxOiLiiYQiLG5zbWlkOiLiiKQiLG5zcGFyOiLiiKYiLG5zcXN1YmU6IuKLoiIsbnNxc3VwZToi4oujIixuc3ViOiLiioQiLG5zdWJFOiLiq4XMuCIsbnN1YmU6IuKKiCIsbnN1YnNldDoi4oqC4oOSIixuc3Vic2V0ZXE6IuKKiCIsbnN1YnNldGVxcToi4quFzLgiLG5zdWNjOiLiioEiLG5zdWNjZXE6IuKqsMy4Iixuc3VwOiLiioUiLG5zdXBFOiLiq4bMuCIsbnN1cGU6IuKKiSIsbnN1cHNldDoi4oqD4oOSIixuc3Vwc2V0ZXE6IuKKiSIsbnN1cHNldGVxcToi4quGzLgiLG50Z2w6IuKJuSIsTnRpbGRlOiLDkSIsbnRpbGRlOiLDsSIsbnRsZzoi4om4IixudHJpYW5nbGVsZWZ0OiLii6oiLG50cmlhbmdsZWxlZnRlcToi4ousIixudHJpYW5nbGVyaWdodDoi4ourIixudHJpYW5nbGVyaWdodGVxOiLii60iLE51OiLOnSIsbnU6Is69IixudW06IiMiLG51bWVybzoi4oSWIixudW1zcDoi4oCHIixudmFwOiLiiY3ig5IiLG52ZGFzaDoi4oqsIixudkRhc2g6IuKKrSIsblZkYXNoOiLiiq4iLG5WRGFzaDoi4oqvIixudmdlOiLiiaXig5IiLG52Z3Q6Ij7ig5IiLG52SGFycjoi4qSEIixudmluZmluOiLip54iLG52bEFycjoi4qSCIixudmxlOiLiiaTig5IiLG52bHQ6Ijzig5IiLG52bHRyaWU6IuKKtOKDkiIsbnZyQXJyOiLipIMiLG52cnRyaWU6IuKKteKDkiIsbnZzaW06IuKIvOKDkiIsbndhcmhrOiLipKMiLG53YXJyOiLihpYiLG53QXJyOiLih5YiLG53YXJyb3c6IuKGliIsbnduZWFyOiLipKciLE9hY3V0ZToiw5MiLG9hY3V0ZToiw7MiLG9hc3Q6IuKKmyIsT2NpcmM6IsOUIixvY2lyYzoiw7QiLG9jaXI6IuKKmiIsT2N5OiLQniIsb2N5OiLQviIsb2Rhc2g6IuKKnSIsT2RibGFjOiLFkCIsb2RibGFjOiLFkSIsb2Rpdjoi4qi4IixvZG90OiLiipkiLG9kc29sZDoi4qa8IixPRWxpZzoixZIiLG9lbGlnOiLFkyIsb2ZjaXI6IuKmvyIsT2ZyOiLwnZSSIixvZnI6IvCdlKwiLG9nb246IsubIixPZ3JhdmU6IsOSIixvZ3JhdmU6IsOyIixvZ3Q6IuKngSIsb2hiYXI6IuKmtSIsb2htOiLOqSIsb2ludDoi4oiuIixvbGFycjoi4oa6IixvbGNpcjoi4qa+IixvbGNyb3NzOiLiprsiLG9saW5lOiLigL4iLG9sdDoi4qeAIixPbWFjcjoixYwiLG9tYWNyOiLFjSIsT21lZ2E6Is6pIixvbWVnYToiz4kiLE9taWNyb246Is6fIixvbWljcm9uOiLOvyIsb21pZDoi4qa2IixvbWludXM6IuKKliIsT29wZjoi8J2VhiIsb29wZjoi8J2VoCIsb3Bhcjoi4qa3IixPcGVuQ3VybHlEb3VibGVRdW90ZToi4oCcIixPcGVuQ3VybHlRdW90ZToi4oCYIixvcGVycDoi4qa5IixvcGx1czoi4oqVIixvcmFycjoi4oa7IixPcjoi4qmUIixvcjoi4oioIixvcmQ6IuKpnSIsb3JkZXI6IuKEtCIsb3JkZXJvZjoi4oS0IixvcmRmOiLCqiIsb3JkbToiwroiLG9yaWdvZjoi4oq2Iixvcm9yOiLiqZYiLG9yc2xvcGU6IuKplyIsb3J2OiLiqZsiLG9TOiLik4giLE9zY3I6IvCdkqoiLG9zY3I6IuKEtCIsT3NsYXNoOiLDmCIsb3NsYXNoOiLDuCIsb3NvbDoi4oqYIixPdGlsZGU6IsOVIixvdGlsZGU6IsO1IixvdGltZXNhczoi4qi2IixPdGltZXM6IuKotyIsb3RpbWVzOiLiipciLE91bWw6IsOWIixvdW1sOiLDtiIsb3ZiYXI6IuKMvSIsT3ZlckJhcjoi4oC+IixPdmVyQnJhY2U6IuKPniIsT3ZlckJyYWNrZXQ6IuKOtCIsT3ZlclBhcmVudGhlc2lzOiLij5wiLHBhcmE6IsK2IixwYXJhbGxlbDoi4oilIixwYXI6IuKIpSIscGFyc2ltOiLiq7MiLHBhcnNsOiLiq70iLHBhcnQ6IuKIgiIsUGFydGlhbEQ6IuKIgiIsUGN5OiLQnyIscGN5OiLQvyIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoi4oCwIixwZXJwOiLiiqUiLHBlcnRlbms6IuKAsSIsUGZyOiLwnZSTIixwZnI6IvCdlK0iLFBoaToizqYiLHBoaToiz4YiLHBoaXY6Is+VIixwaG1tYXQ6IuKEsyIscGhvbmU6IuKYjiIsUGk6Is6gIixwaToiz4AiLHBpdGNoZm9yazoi4ouUIixwaXY6Is+WIixwbGFuY2s6IuKEjyIscGxhbmNraDoi4oSOIixwbGFua3Y6IuKEjyIscGx1c2FjaXI6IuKooyIscGx1c2I6IuKKniIscGx1c2Npcjoi4qiiIixwbHVzOiIrIixwbHVzZG86IuKIlCIscGx1c2R1OiLiqKUiLHBsdXNlOiLiqbIiLFBsdXNNaW51czoiwrEiLHBsdXNtbjoiwrEiLHBsdXNzaW06IuKopiIscGx1c3R3bzoi4qinIixwbToiwrEiLFBvaW5jYXJlcGxhbmU6IuKEjCIscG9pbnRpbnQ6IuKolSIscG9wZjoi8J2VoSIsUG9wZjoi4oSZIixwb3VuZDoiwqMiLHByYXA6IuKqtyIsUHI6IuKquyIscHI6IuKJuiIscHJjdWU6IuKJvCIscHJlY2FwcHJveDoi4qq3IixwcmVjOiLiiboiLHByZWNjdXJseWVxOiLiibwiLFByZWNlZGVzOiLiiboiLFByZWNlZGVzRXF1YWw6IuKqryIsUHJlY2VkZXNTbGFudEVxdWFsOiLiibwiLFByZWNlZGVzVGlsZGU6IuKJviIscHJlY2VxOiLiqq8iLHByZWNuYXBwcm94OiLiqrkiLHByZWNuZXFxOiLiqrUiLHByZWNuc2ltOiLii6giLHByZToi4qqvIixwckU6IuKqsyIscHJlY3NpbToi4om+IixwcmltZToi4oCyIixQcmltZToi4oCzIixwcmltZXM6IuKEmSIscHJuYXA6IuKquSIscHJuRToi4qq1Iixwcm5zaW06IuKLqCIscHJvZDoi4oiPIixQcm9kdWN0OiLiiI8iLHByb2ZhbGFyOiLijK4iLHByb2ZsaW5lOiLijJIiLHByb2ZzdXJmOiLijJMiLHByb3A6IuKInSIsUHJvcG9ydGlvbmFsOiLiiJ0iLFByb3BvcnRpb246IuKItyIscHJvcHRvOiLiiJ0iLHByc2ltOiLiib4iLHBydXJlbDoi4oqwIixQc2NyOiLwnZKrIixwc2NyOiLwnZOFIixQc2k6Is6oIixwc2k6Is+IIixwdW5jc3A6IuKAiCIsUWZyOiLwnZSUIixxZnI6IvCdlK4iLHFpbnQ6IuKojCIscW9wZjoi8J2VoiIsUW9wZjoi4oSaIixxcHJpbWU6IuKBlyIsUXNjcjoi8J2SrCIscXNjcjoi8J2ThiIscXVhdGVybmlvbnM6IuKEjSIscXVhdGludDoi4qiWIixxdWVzdDoiPyIscXVlc3RlcToi4omfIixxdW90OiciJyxRVU9UOiciJyxyQWFycjoi4oebIixyYWNlOiLiiL3MsSIsUmFjdXRlOiLFlCIscmFjdXRlOiLFlSIscmFkaWM6IuKImiIscmFlbXB0eXY6IuKmsyIscmFuZzoi4p+pIixSYW5nOiLin6siLHJhbmdkOiLippIiLHJhbmdlOiLipqUiLHJhbmdsZToi4p+pIixyYXF1bzoiwrsiLHJhcnJhcDoi4qW1IixyYXJyYjoi4oelIixyYXJyYmZzOiLipKAiLHJhcnJjOiLipLMiLHJhcnI6IuKGkiIsUmFycjoi4oagIixyQXJyOiLih5IiLHJhcnJmczoi4qSeIixyYXJyaGs6IuKGqiIscmFycmxwOiLihqwiLHJhcnJwbDoi4qWFIixyYXJyc2ltOiLipbQiLFJhcnJ0bDoi4qSWIixyYXJydGw6IuKGoyIscmFycnc6IuKGnSIscmF0YWlsOiLipJoiLHJBdGFpbDoi4qScIixyYXRpbzoi4oi2IixyYXRpb25hbHM6IuKEmiIscmJhcnI6IuKkjSIsckJhcnI6IuKkjyIsUkJhcnI6IuKkkCIscmJicms6IuKdsyIscmJyYWNlOiJ9IixyYnJhY2s6Il0iLHJicmtlOiLipowiLHJicmtzbGQ6IuKmjiIscmJya3NsdToi4qaQIixSY2Fyb246IsWYIixyY2Fyb246IsWZIixSY2VkaWw6IsWWIixyY2VkaWw6IsWXIixyY2VpbDoi4oyJIixyY3ViOiJ9IixSY3k6ItCgIixyY3k6ItGAIixyZGNhOiLipLciLHJkbGRoYXI6IuKlqSIscmRxdW86IuKAnSIscmRxdW9yOiLigJ0iLHJkc2g6IuKGsyIscmVhbDoi4oScIixyZWFsaW5lOiLihJsiLHJlYWxwYXJ0OiLihJwiLHJlYWxzOiLihJ0iLFJlOiLihJwiLHJlY3Q6IuKWrSIscmVnOiLCriIsUkVHOiLCriIsUmV2ZXJzZUVsZW1lbnQ6IuKIiyIsUmV2ZXJzZUVxdWlsaWJyaXVtOiLih4siLFJldmVyc2VVcEVxdWlsaWJyaXVtOiLipa8iLHJmaXNodDoi4qW9IixyZmxvb3I6IuKMiyIscmZyOiLwnZSvIixSZnI6IuKEnCIsckhhcjoi4qWkIixyaGFyZDoi4oeBIixyaGFydToi4oeAIixyaGFydWw6IuKlrCIsUmhvOiLOoSIscmhvOiLPgSIscmhvdjoiz7EiLFJpZ2h0QW5nbGVCcmFja2V0OiLin6kiLFJpZ2h0QXJyb3dCYXI6IuKHpSIscmlnaHRhcnJvdzoi4oaSIixSaWdodEFycm93OiLihpIiLFJpZ2h0YXJyb3c6IuKHkiIsUmlnaHRBcnJvd0xlZnRBcnJvdzoi4oeEIixyaWdodGFycm93dGFpbDoi4oajIixSaWdodENlaWxpbmc6IuKMiSIsUmlnaHREb3VibGVCcmFja2V0OiLin6ciLFJpZ2h0RG93blRlZVZlY3Rvcjoi4qWdIixSaWdodERvd25WZWN0b3JCYXI6IuKllSIsUmlnaHREb3duVmVjdG9yOiLih4IiLFJpZ2h0Rmxvb3I6IuKMiyIscmlnaHRoYXJwb29uZG93bjoi4oeBIixyaWdodGhhcnBvb251cDoi4oeAIixyaWdodGxlZnRhcnJvd3M6IuKHhCIscmlnaHRsZWZ0aGFycG9vbnM6IuKHjCIscmlnaHRyaWdodGFycm93czoi4oeJIixyaWdodHNxdWlnYXJyb3c6IuKGnSIsUmlnaHRUZWVBcnJvdzoi4oamIixSaWdodFRlZToi4oqiIixSaWdodFRlZVZlY3Rvcjoi4qWbIixyaWdodHRocmVldGltZXM6IuKLjCIsUmlnaHRUcmlhbmdsZUJhcjoi4qeQIixSaWdodFRyaWFuZ2xlOiLiirMiLFJpZ2h0VHJpYW5nbGVFcXVhbDoi4oq1IixSaWdodFVwRG93blZlY3Rvcjoi4qWPIixSaWdodFVwVGVlVmVjdG9yOiLipZwiLFJpZ2h0VXBWZWN0b3JCYXI6IuKllCIsUmlnaHRVcFZlY3Rvcjoi4oa+IixSaWdodFZlY3RvckJhcjoi4qWTIixSaWdodFZlY3Rvcjoi4oeAIixyaW5nOiLLmiIscmlzaW5nZG90c2VxOiLiiZMiLHJsYXJyOiLih4QiLHJsaGFyOiLih4wiLHJsbToi4oCPIixybW91c3RhY2hlOiLijrEiLHJtb3VzdDoi4o6xIixybm1pZDoi4quuIixyb2FuZzoi4p+tIixyb2Fycjoi4oe+Iixyb2Jyazoi4p+nIixyb3Bhcjoi4qaGIixyb3BmOiLwnZWjIixSb3BmOiLihJ0iLHJvcGx1czoi4qiuIixyb3RpbWVzOiLiqLUiLFJvdW5kSW1wbGllczoi4qWwIixycGFyOiIpIixycGFyZ3Q6IuKmlCIscnBwb2xpbnQ6IuKokiIscnJhcnI6IuKHiSIsUnJpZ2h0YXJyb3c6IuKHmyIscnNhcXVvOiLigLoiLHJzY3I6IvCdk4ciLFJzY3I6IuKEmyIscnNoOiLihrEiLFJzaDoi4oaxIixyc3FiOiJdIixyc3F1bzoi4oCZIixyc3F1b3I6IuKAmSIscnRocmVlOiLii4wiLHJ0aW1lczoi4ouKIixydHJpOiLilrkiLHJ0cmllOiLiirUiLHJ0cmlmOiLilrgiLHJ0cmlsdHJpOiLip44iLFJ1bGVEZWxheWVkOiLip7QiLHJ1bHVoYXI6IuKlqCIscng6IuKEniIsU2FjdXRlOiLFmiIsc2FjdXRlOiLFmyIsc2JxdW86IuKAmiIsc2NhcDoi4qq4IixTY2Fyb246IsWgIixzY2Fyb246IsWhIixTYzoi4qq8IixzYzoi4om7IixzY2N1ZToi4om9IixzY2U6IuKqsCIsc2NFOiLiqrQiLFNjZWRpbDoixZ4iLHNjZWRpbDoixZ8iLFNjaXJjOiLFnCIsc2NpcmM6IsWdIixzY25hcDoi4qq6IixzY25FOiLiqrYiLHNjbnNpbToi4oupIixzY3BvbGludDoi4qiTIixzY3NpbToi4om/IixTY3k6ItChIixzY3k6ItGBIixzZG90Yjoi4oqhIixzZG90OiLii4UiLHNkb3RlOiLiqaYiLHNlYXJoazoi4qSlIixzZWFycjoi4oaYIixzZUFycjoi4oeYIixzZWFycm93OiLihpgiLHNlY3Q6IsKnIixzZW1pOiI7IixzZXN3YXI6IuKkqSIsc2V0bWludXM6IuKIliIsc2V0bW46IuKIliIsc2V4dDoi4py2IixTZnI6IvCdlJYiLHNmcjoi8J2UsCIsc2Zyb3duOiLijKIiLHNoYXJwOiLima8iLFNIQ0hjeToi0KkiLHNoY2hjeToi0YkiLFNIY3k6ItCoIixzaGN5OiLRiCIsU2hvcnREb3duQXJyb3c6IuKGkyIsU2hvcnRMZWZ0QXJyb3c6IuKGkCIsc2hvcnRtaWQ6IuKIoyIsc2hvcnRwYXJhbGxlbDoi4oilIixTaG9ydFJpZ2h0QXJyb3c6IuKGkiIsU2hvcnRVcEFycm93OiLihpEiLHNoeToiwq0iLFNpZ21hOiLOoyIsc2lnbWE6Is+DIixzaWdtYWY6Is+CIixzaWdtYXY6Is+CIixzaW06IuKIvCIsc2ltZG90OiLiqaoiLHNpbWU6IuKJgyIsc2ltZXE6IuKJgyIsc2ltZzoi4qqeIixzaW1nRToi4qqgIixzaW1sOiLiqp0iLHNpbWxFOiLiqp8iLHNpbW5lOiLiiYYiLHNpbXBsdXM6IuKopCIsc2ltcmFycjoi4qWyIixzbGFycjoi4oaQIixTbWFsbENpcmNsZToi4oiYIixzbWFsbHNldG1pbnVzOiLiiJYiLHNtYXNocDoi4qizIixzbWVwYXJzbDoi4qekIixzbWlkOiLiiKMiLHNtaWxlOiLijKMiLHNtdDoi4qqqIixzbXRlOiLiqqwiLHNtdGVzOiLiqqzvuIAiLFNPRlRjeToi0KwiLHNvZnRjeToi0YwiLHNvbGJhcjoi4oy/Iixzb2xiOiLip4QiLHNvbDoiLyIsU29wZjoi8J2ViiIsc29wZjoi8J2VpCIsc3BhZGVzOiLimaAiLHNwYWRlc3VpdDoi4pmgIixzcGFyOiLiiKUiLHNxY2FwOiLiipMiLHNxY2Fwczoi4oqT77iAIixzcWN1cDoi4oqUIixzcWN1cHM6IuKKlO+4gCIsU3FydDoi4oiaIixzcXN1Yjoi4oqPIixzcXN1YmU6IuKKkSIsc3FzdWJzZXQ6IuKKjyIsc3FzdWJzZXRlcToi4oqRIixzcXN1cDoi4oqQIixzcXN1cGU6IuKKkiIsc3FzdXBzZXQ6IuKKkCIsc3FzdXBzZXRlcToi4oqSIixzcXVhcmU6IuKWoSIsU3F1YXJlOiLilqEiLFNxdWFyZUludGVyc2VjdGlvbjoi4oqTIixTcXVhcmVTdWJzZXQ6IuKKjyIsU3F1YXJlU3Vic2V0RXF1YWw6IuKKkSIsU3F1YXJlU3VwZXJzZXQ6IuKKkCIsU3F1YXJlU3VwZXJzZXRFcXVhbDoi4oqSIixTcXVhcmVVbmlvbjoi4oqUIixzcXVhcmY6IuKWqiIsc3F1OiLilqEiLHNxdWY6IuKWqiIsc3JhcnI6IuKGkiIsU3Njcjoi8J2SriIsc3Njcjoi8J2TiCIsc3NldG1uOiLiiJYiLHNzbWlsZToi4oyjIixzc3RhcmY6IuKLhiIsU3Rhcjoi4ouGIixzdGFyOiLimIYiLHN0YXJmOiLimIUiLHN0cmFpZ2h0ZXBzaWxvbjoiz7UiLHN0cmFpZ2h0cGhpOiLPlSIsc3RybnM6IsKvIixzdWI6IuKKgiIsU3ViOiLii5AiLHN1YmRvdDoi4qq9IixzdWJFOiLiq4UiLHN1YmU6IuKKhiIsc3ViZWRvdDoi4quDIixzdWJtdWx0OiLiq4EiLHN1Ym5FOiLiq4siLHN1Ym5lOiLiiooiLHN1YnBsdXM6IuKqvyIsc3VicmFycjoi4qW5IixzdWJzZXQ6IuKKgiIsU3Vic2V0OiLii5AiLHN1YnNldGVxOiLiioYiLHN1YnNldGVxcToi4quFIixTdWJzZXRFcXVhbDoi4oqGIixzdWJzZXRuZXE6IuKKiiIsc3Vic2V0bmVxcToi4quLIixzdWJzaW06IuKrhyIsc3Vic3ViOiLiq5UiLHN1YnN1cDoi4quTIixzdWNjYXBwcm94OiLiqrgiLHN1Y2M6IuKJuyIsc3VjY2N1cmx5ZXE6IuKJvSIsU3VjY2VlZHM6IuKJuyIsU3VjY2VlZHNFcXVhbDoi4qqwIixTdWNjZWVkc1NsYW50RXF1YWw6IuKJvSIsU3VjY2VlZHNUaWxkZToi4om/IixzdWNjZXE6IuKqsCIsc3VjY25hcHByb3g6IuKquiIsc3VjY25lcXE6IuKqtiIsc3VjY25zaW06IuKLqSIsc3VjY3NpbToi4om/IixTdWNoVGhhdDoi4oiLIixzdW06IuKIkSIsU3VtOiLiiJEiLHN1bmc6IuKZqiIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3VwOiLiioMiLFN1cDoi4ouRIixzdXBkb3Q6IuKqviIsc3VwZHN1Yjoi4quYIixzdXBFOiLiq4YiLHN1cGU6IuKKhyIsc3VwZWRvdDoi4quEIixTdXBlcnNldDoi4oqDIixTdXBlcnNldEVxdWFsOiLiiociLHN1cGhzb2w6IuKfiSIsc3VwaHN1Yjoi4quXIixzdXBsYXJyOiLipbsiLHN1cG11bHQ6IuKrgiIsc3VwbkU6IuKrjCIsc3VwbmU6IuKKiyIsc3VwcGx1czoi4quAIixzdXBzZXQ6IuKKgyIsU3Vwc2V0OiLii5EiLHN1cHNldGVxOiLiiociLHN1cHNldGVxcToi4quGIixzdXBzZXRuZXE6IuKKiyIsc3Vwc2V0bmVxcToi4quMIixzdXBzaW06IuKriCIsc3Vwc3ViOiLiq5QiLHN1cHN1cDoi4quWIixzd2FyaGs6IuKkpiIsc3dhcnI6IuKGmSIsc3dBcnI6IuKHmSIsc3dhcnJvdzoi4oaZIixzd253YXI6IuKkqiIsc3psaWc6IsOfIixUYWI6Ilx0Iix0YXJnZXQ6IuKMliIsVGF1OiLOpCIsdGF1OiLPhCIsdGJyazoi4o60IixUY2Fyb246IsWkIix0Y2Fyb246IsWlIixUY2VkaWw6IsWiIix0Y2VkaWw6IsWjIixUY3k6ItCiIix0Y3k6ItGCIix0ZG90OiLig5siLHRlbHJlYzoi4oyVIixUZnI6IvCdlJciLHRmcjoi8J2UsSIsdGhlcmU0OiLiiLQiLHRoZXJlZm9yZToi4oi0IixUaGVyZWZvcmU6IuKItCIsVGhldGE6Is6YIix0aGV0YToizrgiLHRoZXRhc3ltOiLPkSIsdGhldGF2OiLPkSIsdGhpY2thcHByb3g6IuKJiCIsdGhpY2tzaW06IuKIvCIsVGhpY2tTcGFjZToi4oGf4oCKIixUaGluU3BhY2U6IuKAiSIsdGhpbnNwOiLigIkiLHRoa2FwOiLiiYgiLHRoa3NpbToi4oi8IixUSE9STjoiw54iLHRob3JuOiLDviIsdGlsZGU6IsucIixUaWxkZToi4oi8IixUaWxkZUVxdWFsOiLiiYMiLFRpbGRlRnVsbEVxdWFsOiLiiYUiLFRpbGRlVGlsZGU6IuKJiCIsdGltZXNiYXI6IuKosSIsdGltZXNiOiLiiqAiLHRpbWVzOiLDlyIsdGltZXNkOiLiqLAiLHRpbnQ6IuKIrSIsdG9lYToi4qSoIix0b3Bib3Q6IuKMtiIsdG9wY2lyOiLiq7EiLHRvcDoi4oqkIixUb3BmOiLwnZWLIix0b3BmOiLwnZWlIix0b3Bmb3JrOiLiq5oiLHRvc2E6IuKkqSIsdHByaW1lOiLigLQiLHRyYWRlOiLihKIiLFRSQURFOiLihKIiLHRyaWFuZ2xlOiLilrUiLHRyaWFuZ2xlZG93bjoi4pa/Iix0cmlhbmdsZWxlZnQ6IuKXgyIsdHJpYW5nbGVsZWZ0ZXE6IuKKtCIsdHJpYW5nbGVxOiLiiZwiLHRyaWFuZ2xlcmlnaHQ6IuKWuSIsdHJpYW5nbGVyaWdodGVxOiLiirUiLHRyaWRvdDoi4pesIix0cmllOiLiiZwiLHRyaW1pbnVzOiLiqLoiLFRyaXBsZURvdDoi4oObIix0cmlwbHVzOiLiqLkiLHRyaXNiOiLip40iLHRyaXRpbWU6IuKouyIsdHJwZXppdW06IuKPoiIsVHNjcjoi8J2SryIsdHNjcjoi8J2TiSIsVFNjeToi0KYiLHRzY3k6ItGGIixUU0hjeToi0IsiLHRzaGN5OiLRmyIsVHN0cm9rOiLFpiIsdHN0cm9rOiLFpyIsdHdpeHQ6IuKJrCIsdHdvaGVhZGxlZnRhcnJvdzoi4oaeIix0d29oZWFkcmlnaHRhcnJvdzoi4oagIixVYWN1dGU6IsOaIix1YWN1dGU6IsO6Iix1YXJyOiLihpEiLFVhcnI6IuKGnyIsdUFycjoi4oeRIixVYXJyb2Npcjoi4qWJIixVYnJjeToi0I4iLHVicmN5OiLRniIsVWJyZXZlOiLFrCIsdWJyZXZlOiLFrSIsVWNpcmM6IsObIix1Y2lyYzoiw7siLFVjeToi0KMiLHVjeToi0YMiLHVkYXJyOiLih4UiLFVkYmxhYzoixbAiLHVkYmxhYzoixbEiLHVkaGFyOiLipa4iLHVmaXNodDoi4qW+IixVZnI6IvCdlJgiLHVmcjoi8J2UsiIsVWdyYXZlOiLDmSIsdWdyYXZlOiLDuSIsdUhhcjoi4qWjIix1aGFybDoi4oa/Iix1aGFycjoi4oa+Iix1aGJsazoi4paAIix1bGNvcm46IuKMnCIsdWxjb3JuZXI6IuKMnCIsdWxjcm9wOiLijI8iLHVsdHJpOiLil7giLFVtYWNyOiLFqiIsdW1hY3I6IsWrIix1bWw6IsKoIixVbmRlckJhcjoiXyIsVW5kZXJCcmFjZToi4o+fIixVbmRlckJyYWNrZXQ6IuKOtSIsVW5kZXJQYXJlbnRoZXNpczoi4o+dIixVbmlvbjoi4ouDIixVbmlvblBsdXM6IuKKjiIsVW9nb246IsWyIix1b2dvbjoixbMiLFVvcGY6IvCdlYwiLHVvcGY6IvCdlaYiLFVwQXJyb3dCYXI6IuKkkiIsdXBhcnJvdzoi4oaRIixVcEFycm93OiLihpEiLFVwYXJyb3c6IuKHkSIsVXBBcnJvd0Rvd25BcnJvdzoi4oeFIix1cGRvd25hcnJvdzoi4oaVIixVcERvd25BcnJvdzoi4oaVIixVcGRvd25hcnJvdzoi4oeVIixVcEVxdWlsaWJyaXVtOiLipa4iLHVwaGFycG9vbmxlZnQ6IuKGvyIsdXBoYXJwb29ucmlnaHQ6IuKGviIsdXBsdXM6IuKKjiIsVXBwZXJMZWZ0QXJyb3c6IuKGliIsVXBwZXJSaWdodEFycm93OiLihpciLHVwc2k6Is+FIixVcHNpOiLPkiIsdXBzaWg6Is+SIixVcHNpbG9uOiLOpSIsdXBzaWxvbjoiz4UiLFVwVGVlQXJyb3c6IuKGpSIsVXBUZWU6IuKKpSIsdXB1cGFycm93czoi4oeIIix1cmNvcm46IuKMnSIsdXJjb3JuZXI6IuKMnSIsdXJjcm9wOiLijI4iLFVyaW5nOiLFriIsdXJpbmc6IsWvIix1cnRyaToi4pe5IixVc2NyOiLwnZKwIix1c2NyOiLwnZOKIix1dGRvdDoi4ouwIixVdGlsZGU6IsWoIix1dGlsZGU6IsWpIix1dHJpOiLilrUiLHV0cmlmOiLilrQiLHV1YXJyOiLih4giLFV1bWw6IsOcIix1dW1sOiLDvCIsdXdhbmdsZToi4qanIix2YW5ncnQ6IuKmnCIsdmFyZXBzaWxvbjoiz7UiLHZhcmthcHBhOiLPsCIsdmFybm90aGluZzoi4oiFIix2YXJwaGk6Is+VIix2YXJwaToiz5YiLHZhcnByb3B0bzoi4oidIix2YXJyOiLihpUiLHZBcnI6IuKHlSIsdmFycmhvOiLPsSIsdmFyc2lnbWE6Is+CIix2YXJzdWJzZXRuZXE6IuKKiu+4gCIsdmFyc3Vic2V0bmVxcToi4quL77iAIix2YXJzdXBzZXRuZXE6IuKKi++4gCIsdmFyc3Vwc2V0bmVxcToi4quM77iAIix2YXJ0aGV0YToiz5EiLHZhcnRyaWFuZ2xlbGVmdDoi4oqyIix2YXJ0cmlhbmdsZXJpZ2h0OiLiirMiLHZCYXI6IuKrqCIsVmJhcjoi4qurIix2QmFydjoi4qupIixWY3k6ItCSIix2Y3k6ItCyIix2ZGFzaDoi4oqiIix2RGFzaDoi4oqoIixWZGFzaDoi4oqpIixWRGFzaDoi4oqrIixWZGFzaGw6IuKrpiIsdmVlYmFyOiLiirsiLHZlZToi4oioIixWZWU6IuKLgSIsdmVlZXE6IuKJmiIsdmVsbGlwOiLii64iLHZlcmJhcjoifCIsVmVyYmFyOiLigJYiLHZlcnQ6InwiLFZlcnQ6IuKAliIsVmVydGljYWxCYXI6IuKIoyIsVmVydGljYWxMaW5lOiJ8IixWZXJ0aWNhbFNlcGFyYXRvcjoi4p2YIixWZXJ0aWNhbFRpbGRlOiLiiYAiLFZlcnlUaGluU3BhY2U6IuKAiiIsVmZyOiLwnZSZIix2ZnI6IvCdlLMiLHZsdHJpOiLiirIiLHZuc3ViOiLiioLig5IiLHZuc3VwOiLiioPig5IiLFZvcGY6IvCdlY0iLHZvcGY6IvCdlaciLHZwcm9wOiLiiJ0iLHZydHJpOiLiirMiLFZzY3I6IvCdkrEiLHZzY3I6IvCdk4siLHZzdWJuRToi4quL77iAIix2c3VibmU6IuKKiu+4gCIsdnN1cG5FOiLiq4zvuIAiLHZzdXBuZToi4oqL77iAIixWdmRhc2g6IuKKqiIsdnppZ3phZzoi4qaaIixXY2lyYzoixbQiLHdjaXJjOiLFtSIsd2VkYmFyOiLiqZ8iLHdlZGdlOiLiiKciLFdlZGdlOiLii4AiLHdlZGdlcToi4omZIix3ZWllcnA6IuKEmCIsV2ZyOiLwnZSaIix3ZnI6IvCdlLQiLFdvcGY6IvCdlY4iLHdvcGY6IvCdlagiLHdwOiLihJgiLHdyOiLiiYAiLHdyZWF0aDoi4omAIixXc2NyOiLwnZKyIix3c2NyOiLwnZOMIix4Y2FwOiLii4IiLHhjaXJjOiLil68iLHhjdXA6IuKLgyIseGR0cmk6IuKWvSIsWGZyOiLwnZSbIix4ZnI6IvCdlLUiLHhoYXJyOiLin7ciLHhoQXJyOiLin7oiLFhpOiLOniIseGk6Is6+Iix4bGFycjoi4p+1Iix4bEFycjoi4p+4Iix4bWFwOiLin7wiLHhuaXM6IuKLuyIseG9kb3Q6IuKogCIsWG9wZjoi8J2VjyIseG9wZjoi8J2VqSIseG9wbHVzOiLiqIEiLHhvdGltZToi4qiCIix4cmFycjoi4p+2Iix4ckFycjoi4p+5IixYc2NyOiLwnZKzIix4c2NyOiLwnZONIix4c3FjdXA6IuKohiIseHVwbHVzOiLiqIQiLHh1dHJpOiLilrMiLHh2ZWU6IuKLgSIseHdlZGdlOiLii4AiLFlhY3V0ZToiw50iLHlhY3V0ZToiw70iLFlBY3k6ItCvIix5YWN5OiLRjyIsWWNpcmM6IsW2Iix5Y2lyYzoixbciLFljeToi0KsiLHljeToi0YsiLHllbjoiwqUiLFlmcjoi8J2UnCIseWZyOiLwnZS2IixZSWN5OiLQhyIseWljeToi0ZciLFlvcGY6IvCdlZAiLHlvcGY6IvCdlaoiLFlzY3I6IvCdkrQiLHlzY3I6IvCdk44iLFlVY3k6ItCuIix5dWN5OiLRjiIseXVtbDoiw78iLFl1bWw6IsW4IixaYWN1dGU6IsW5Iix6YWN1dGU6IsW6IixaY2Fyb246IsW9Iix6Y2Fyb246IsW+IixaY3k6ItCXIix6Y3k6ItC3IixaZG90OiLFuyIsemRvdDoixbwiLHplZXRyZjoi4oSoIixaZXJvV2lkdGhTcGFjZToi4oCLIixaZXRhOiLOliIsemV0YToizrYiLHpmcjoi8J2UtyIsWmZyOiLihKgiLFpIY3k6ItCWIix6aGN5OiLQtiIsemlncmFycjoi4oedIix6b3BmOiLwnZWrIixab3BmOiLihKQiLFpzY3I6IvCdkrUiLHpzY3I6IvCdk48iLHp3ajoi4oCNIix6d25qOiLigIwifX0sIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL21hcHMvbGVnYWN5Lmpzb24iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtBYWN1dGU6IsOBIixhYWN1dGU6IsOhIixBY2lyYzoiw4IiLGFjaXJjOiLDoiIsYWN1dGU6IsK0IixBRWxpZzoiw4YiLGFlbGlnOiLDpiIsQWdyYXZlOiLDgCIsYWdyYXZlOiLDoCIsYW1wOiImIixBTVA6IiYiLEFyaW5nOiLDhSIsYXJpbmc6IsOlIixBdGlsZGU6IsODIixhdGlsZGU6IsOjIixBdW1sOiLDhCIsYXVtbDoiw6QiLGJydmJhcjoiwqYiLENjZWRpbDoiw4ciLGNjZWRpbDoiw6ciLGNlZGlsOiLCuCIsY2VudDoiwqIiLGNvcHk6IsKpIixDT1BZOiLCqSIsY3VycmVuOiLCpCIsZGVnOiLCsCIsZGl2aWRlOiLDtyIsRWFjdXRlOiLDiSIsZWFjdXRlOiLDqSIsRWNpcmM6IsOKIixlY2lyYzoiw6oiLEVncmF2ZToiw4giLGVncmF2ZToiw6giLEVUSDoiw5AiLGV0aDoiw7AiLEV1bWw6IsOLIixldW1sOiLDqyIsZnJhYzEyOiLCvSIsZnJhYzE0OiLCvCIsZnJhYzM0OiLCviIsZ3Q6Ij4iLEdUOiI+IixJYWN1dGU6IsONIixpYWN1dGU6IsOtIixJY2lyYzoiw44iLGljaXJjOiLDriIsaWV4Y2w6IsKhIixJZ3JhdmU6IsOMIixpZ3JhdmU6IsOsIixpcXVlc3Q6IsK/IixJdW1sOiLDjyIsaXVtbDoiw68iLGxhcXVvOiLCqyIsbHQ6IjwiLExUOiI8IixtYWNyOiLCryIsbWljcm86IsK1IixtaWRkb3Q6IsK3IixuYnNwOiLCoCIsbm90OiLCrCIsTnRpbGRlOiLDkSIsbnRpbGRlOiLDsSIsT2FjdXRlOiLDkyIsb2FjdXRlOiLDsyIsT2NpcmM6IsOUIixvY2lyYzoiw7QiLE9ncmF2ZToiw5IiLG9ncmF2ZToiw7IiLG9yZGY6IsKqIixvcmRtOiLCuiIsT3NsYXNoOiLDmCIsb3NsYXNoOiLDuCIsT3RpbGRlOiLDlSIsb3RpbGRlOiLDtSIsT3VtbDoiw5YiLG91bWw6IsO2IixwYXJhOiLCtiIscGx1c21uOiLCsSIscG91bmQ6IsKjIixxdW90OiciJyxRVU9UOiciJyxyYXF1bzoiwrsiLHJlZzoiwq4iLFJFRzoiwq4iLHNlY3Q6IsKnIixzaHk6IsKtIixzdXAxOiLCuSIsc3VwMjoiwrIiLHN1cDM6IsKzIixzemxpZzoiw58iLFRIT1JOOiLDniIsdGhvcm46IsO+Iix0aW1lczoiw5ciLFVhY3V0ZToiw5oiLHVhY3V0ZToiw7oiLFVjaXJjOiLDmyIsdWNpcmM6IsO7IixVZ3JhdmU6IsOZIix1Z3JhdmU6IsO5Iix1bWw6IsKoIixVdW1sOiLDnCIsdXVtbDoiw7wiLFlhY3V0ZToiw50iLHlhY3V0ZToiw70iLHllbjoiwqUiLHl1bWw6IsO/In19LCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL3htbC5qc29uIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17YW1wOiImIixhcG9zOiInIixndDoiPiIsbHQ6IjwiLHF1b3Q6JyInfX0sIi4vbm9kZV9tb2R1bGVzL2Vycm9yLXN0YWNrLXBhcnNlci9lcnJvci1zdGFjay1wYXJzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHM7IWZ1bmN0aW9uKGksYSl7InVzZSBzdHJpY3QiO289W24oIi4vbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIpXSxyPWEsdm9pZCAwIT09KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0LG8pOnIpJiYoZS5leHBvcnRzPXMpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkucHJvdG90eXBlLm1hcClyZXR1cm4gZS5tYXAodCxuKTtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDtvKyspcltvXT10LmNhbGwobixlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBuKGUsdCxuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkucHJvdG90eXBlLmZpbHRlcilyZXR1cm4gZS5maWx0ZXIodCxuKTtmb3IodmFyIHI9W10sbz0wO288ZS5sZW5ndGg7bysrKXQuY2FsbChuLGVbb10pJiZyLnB1c2goZVtvXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZilyZXR1cm4gZS5pbmRleE9mKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXZhciBvPS8oXnxAKVxTK1w6XGQrLyxzPS9eXHMqYXQgLiooXFMrXDpcZCt8XChuYXRpdmVcKSkvbSxpPS9eKGV2YWxAKT8oXFtuYXRpdmUgY29kZVxdKT8kLztyZXR1cm57cGFyc2U6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09ZS5zdGFja3RyYWNlfHx2b2lkIDAhPT1lWyJvcGVyYSNzb3VyY2Vsb2MiXSlyZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGUpO2lmKGUuc3RhY2smJmUuc3RhY2subWF0Y2gocykpcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZSk7aWYoZS5zdGFjaylyZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZSk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Iil9LGV4dHJhY3RMb2NhdGlvbjpmdW5jdGlvbihlKXtpZigtMT09PWUuaW5kZXhPZigiOiIpKXJldHVybltlXTt2YXIgdD0vKC4rPykoPzpcOihcZCspKT8oPzpcOihcZCspKT8kLyxuPXQuZXhlYyhlLnJlcGxhY2UoL1tcKFwpXS9nLCIiKSk7cmV0dXJuW25bMV0sblsyXXx8dm9pZCAwLG5bM118fHZvaWQgMF19LHBhcnNlVjhPcklFOmZ1bmN0aW9uKG8pe3JldHVybiB0KG4oby5zdGFjay5zcGxpdCgiXG4iKSxmdW5jdGlvbihlKXtyZXR1cm4hIWUubWF0Y2gocyl9LHRoaXMpLGZ1bmN0aW9uKHQpe3QuaW5kZXhPZigiKGV2YWwgIik+LTEmJih0PXQucmVwbGFjZSgvZXZhbCBjb2RlL2csImV2YWwiKS5yZXBsYWNlKC8oXChldmFsIGF0IFteXCgpXSopfChcKVwsLiokKS9nLCIiKSk7dmFyIG49dC5yZXBsYWNlKC9eXHMrLywiIikucmVwbGFjZSgvXChldmFsIGNvZGUvZywiKCIpLnNwbGl0KC9ccysvKS5zbGljZSgxKSxvPXRoaXMuZXh0cmFjdExvY2F0aW9uKG4ucG9wKCkpLHM9bi5qb2luKCIgIil8fHZvaWQgMCxpPXIoWyJldmFsIiwiPGFub255bW91cz4iXSxvWzBdKT4tMT92b2lkIDA6b1swXTtyZXR1cm4gbmV3IGUocyx2b2lkIDAsaSxvWzFdLG9bMl0sdCl9LHRoaXMpfSxwYXJzZUZGT3JTYWZhcmk6ZnVuY3Rpb24ocil7cmV0dXJuIHQobihyLnN0YWNrLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoKGkpfSx0aGlzKSxmdW5jdGlvbih0KXtpZih0LmluZGV4T2YoIiA+IGV2YWwiKT4tMSYmKHQ9dC5yZXBsYWNlKC8gbGluZSAoXGQrKSg/OiA+IGV2YWwgbGluZSBcZCspKiA+IGV2YWxcOlxkK1w6XGQrL2csIjokMSIpKSwtMT09PXQuaW5kZXhPZigiQCIpJiYtMT09PXQuaW5kZXhPZigiOiIpKXJldHVybiBuZXcgZSh0KTt2YXIgbj10LnNwbGl0KCJAIikscj10aGlzLmV4dHJhY3RMb2NhdGlvbihuLnBvcCgpKSxvPW4uam9pbigiQCIpfHx2b2lkIDA7cmV0dXJuIG5ldyBlKG8sdm9pZCAwLHJbMF0sclsxXSxyWzJdLHQpfSx0aGlzKX0scGFyc2VPcGVyYTpmdW5jdGlvbihlKXtyZXR1cm4hZS5zdGFja3RyYWNlfHxlLm1lc3NhZ2UuaW5kZXhPZigiXG4iKT4tMSYmZS5tZXNzYWdlLnNwbGl0KCJcbiIpLmxlbmd0aD5lLnN0YWNrdHJhY2Uuc3BsaXQoIlxuIikubGVuZ3RoP3RoaXMucGFyc2VPcGVyYTkoZSk6ZS5zdGFjaz90aGlzLnBhcnNlT3BlcmExMShlKTp0aGlzLnBhcnNlT3BlcmExMChlKX0scGFyc2VPcGVyYTk6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPS9MaW5lIChcZCspLipzY3JpcHQgKD86aW4gKT8oXFMrKS9pLHI9dC5tZXNzYWdlLnNwbGl0KCJcbiIpLG89W10scz0yLGk9ci5sZW5ndGg7czxpO3MrPTIpe3ZhciBhPW4uZXhlYyhyW3NdKTthJiZvLnB1c2gobmV3IGUodm9pZCAwLHZvaWQgMCxhWzJdLGFbMV0sdm9pZCAwLHJbc10pKX1yZXR1cm4gb30scGFyc2VPcGVyYTEwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0vTGluZSAoXGQrKS4qc2NyaXB0ICg/OmluICk/KFxTKykoPzo6IEluIGZ1bmN0aW9uIChcUyspKT8kL2kscj10LnN0YWNrdHJhY2Uuc3BsaXQoIlxuIiksbz1bXSxzPTAsaT1yLmxlbmd0aDtzPGk7cys9Mil7dmFyIGE9bi5leGVjKHJbc10pO2EmJm8ucHVzaChuZXcgZShhWzNdfHx2b2lkIDAsdm9pZCAwLGFbMl0sYVsxXSx2b2lkIDAscltzXSkpfXJldHVybiBvfSxwYXJzZU9wZXJhMTE6ZnVuY3Rpb24ocil7cmV0dXJuIHQobihyLnN0YWNrLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKGUpe3JldHVybiEhZS5tYXRjaChvKSYmIWUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyl9LHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciBuLHI9dC5zcGxpdCgiQCIpLG89dGhpcy5leHRyYWN0TG9jYXRpb24oci5wb3AoKSkscz1yLnNoaWZ0KCl8fCIiLGk9cy5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFx3KykpPz4vLCIkMiIpLnJlcGxhY2UoL1woW15cKV0qXCkvZywiIil8fHZvaWQgMDtzLm1hdGNoKC9cKChbXlwpXSopXCkvKSYmKG49cy5yZXBsYWNlKC9eW15cKF0rXCgoW15cKV0qKVwpJC8sIiQxIikpO3ZhciBhPXZvaWQgMD09PW58fCJbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdIj09PW4/dm9pZCAwOm4uc3BsaXQoIiwiKTtyZXR1cm4gbmV3IGUoaSxhLG9bMF0sb1sxXSxvWzJdLHQpfSx0aGlzKX19fSl9LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2FycmF5LyMvZS1pbmRleC1vZi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L251bWJlci9pcy1uYW4vaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbnVtYmVyL3RvLXBvcy1pbnRlZ2VyLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC92YWxpZC12YWx1ZS5qcyIpLGk9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGw9TWF0aC5hYnMsdT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGMsZDtpZighcihlKSlyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKG49byhzKHRoaXMpLmxlbmd0aCksYz1hcmd1bWVudHNbMV0sYz1pc05hTihjKT8wOmM+PTA/dShjKTpvKHRoaXMubGVuZ3RoKS11KGwoYykpLHQ9Yzt0PG47Kyt0KWlmKGEuY2FsbCh0aGlzLHQpJiYoZD10aGlzW3RdLHIoZCkpKXJldHVybiB0O3JldHVybi0xfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvZnJvbS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9hcnJheS9mcm9tL2lzLWltcGxlbWVudGVkLmpzIikoKT9BcnJheS5mcm9tOm4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvZnJvbS9zaGltLmpzIil9LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2FycmF5L2Zyb20vaXMtaW1wbGVtZW50ZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPUFycmF5LmZyb207cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJihlPVsicmF6IiwiZHdhIl0sdD1uKGUpLEJvb2xlYW4odCYmdCE9PWUmJiJkd2EiPT09dFsxXSkpfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvZnJvbS9zaGltLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNi1zeW1ib2wvaW5kZXguanMiKS5pdGVyYXRvcixvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2Z1bmN0aW9uL2lzLWZ1bmN0aW9uLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L251bWJlci90by1wb3MtaW50ZWdlci5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9pcy12YWx1ZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nLmpzIiksZD1BcnJheS5pc0FycmF5LF89RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0sZj1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbSxoLGcsYixFLHksdixULEE9YXJndW1lbnRzWzFdLEM9YXJndW1lbnRzWzJdO2lmKGU9T2JqZWN0KGwoZSkpLHUoQSkmJmEoQSksdGhpcyYmdGhpcyE9PUFycmF5JiZzKHRoaXMpKXQ9dGhpcztlbHNle2lmKCFBKXtpZihvKGUpKXJldHVybiAxIT09KGc9ZS5sZW5ndGgpP0FycmF5LmFwcGx5KG51bGwsZSk6KGg9bmV3IEFycmF5KDEpLGhbMF09ZVswXSxoKTtpZihkKGUpKXtmb3IoaD1uZXcgQXJyYXkoZz1lLmxlbmd0aCksbj0wO248ZzsrK24paFtuXT1lW25dO3JldHVybiBofX1oPVtdfWlmKCFkKGUpKWlmKHZvaWQgMCE9PSh2PWVbcl0pKXtmb3IoRT1hKHYpLmNhbGwoZSksdCYmKGg9bmV3IHQpLHk9RS5uZXh0KCksbj0wOyF5LmRvbmU7KVQ9QT9fLmNhbGwoQSxDLHkudmFsdWUsbik6eS52YWx1ZSx0PyhwLnZhbHVlPVQsZihoLG4scCkpOmhbbl09VCx5PUUubmV4dCgpLCsrbjtnPW59ZWxzZSBpZihjKGUpKXtmb3IoZz1lLmxlbmd0aCx0JiYoaD1uZXcgdCksbj0wLG09MDtuPGc7KytuKVQ9ZVtuXSxuKzE8ZyYmKGI9VC5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmI8PTU2MzE5JiYoVCs9ZVsrK25dKSxUPUE/Xy5jYWxsKEEsQyxULG0pOlQsdD8ocC52YWx1ZT1ULGYoaCxtLHApKTpoW21dPVQsKyttO2c9bX1pZih2b2lkIDA9PT1nKWZvcihnPWkoZS5sZW5ndGgpLHQmJihoPW5ldyB0KGcpKSxuPTA7bjxnOysrbilUPUE/Xy5jYWxsKEEsQyxlW25dLG4pOmVbbl0sdD8ocC52YWx1ZT1ULGYoaCxuLHApKTpoW25dPVQ7cmV0dXJuIHQmJihwLnZhbHVlPW51bGwsaC5sZW5ndGg9ZyksaH19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2FycmF5L3RvLWFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvZnJvbS9pbmRleC5qcyIpLG89QXJyYXkuaXNBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSk/ZTpyKGUpfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZXJyb3IvY3VzdG9tLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Fzc2lnbi9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvaXMtb2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9pcy12YWx1ZS5qcyIpLGk9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7dD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IEVycm9yKGUpLGE9YXJndW1lbnRzWzFdLGw9YXJndW1lbnRzWzJdO3JldHVybiBzKGwpfHxvKGEpJiYobD1hLGE9bnVsbCkscyhsKSYmcihuLGwpLHMoYSkmJihuLmNvZGU9YSksaSYmaShuLHQpLG59fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9mdW5jdGlvbi9fZGVmaW5lLWxlbmd0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbnVtYmVyL3RvLXBvcy1pbnRlZ2VyLmpzIiksbD1mdW5jdGlvbihlLHQpe3JldHVybiB0fTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxlbmd0aCIse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLHZhbHVlOjF9KX1jYXRjaChlKXt9MT09PWwubGVuZ3RoPyhyPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0sbz1PYmplY3QuZGVmaW5lUHJvcGVydHksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9YSh0KSxlLmxlbmd0aD09PXQ/ZTooci52YWx1ZT10LG8oZSwibGVuZ3RoIixyKSl9KTooaT1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9taXhpbi5qcyIpLHM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG4scj0wO2lmKGVbdF0pcmV0dXJuIGVbdF07Zm9yKG49W107dC0tOyluLnB1c2goImEiKygrK3IpLnRvU3RyaW5nKDM2KSk7cmV0dXJuIG5ldyBGdW5jdGlvbigiZm4iLCJyZXR1cm4gZnVuY3Rpb24gKCIrbi5qb2luKCIsICIpKyIpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07Iil9fSgpLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHQ9YSh0KSxlLmxlbmd0aD09PXQpcmV0dXJuIGU7bj1zKHQpKGUpO3RyeXtpKG4sZSl9Y2F0Y2goZSl7fXJldHVybiBufSl9LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG89ci5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLmNhbGwoZSk9PT1vfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZnVuY3Rpb24vaXMtZnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvPXIuY2FsbChuKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2Z1bmN0aW9uL25vb3AuanMiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZyLmNhbGwoZSk9PT1vfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZnVuY3Rpb24vbm9vcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9tYXRoL3NpZ24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbWF0aC9zaWduL2lzLWltcGxlbWVudGVkLmpzIikoKT9NYXRoLnNpZ246bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9tYXRoL3NpZ24vc2hpbS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9tYXRoL3NpZ24vaXMtaW1wbGVtZW50ZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9TWF0aC5zaWduO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoMT09PWUoMTApJiYtMT09PWUoLTIwKSl9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9tYXRoL3NpZ24vc2hpbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TnVtYmVyKGUpLGlzTmFOKGUpfHwwPT09ZT9lOmU+MD8xOi0xfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbnVtYmVyL2lzLW5hbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvaXMtbmFuL2lzLWltcGxlbWVudGVkLmpzIikoKT9OdW1iZXIuaXNOYU46bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvaXMtbmFuL3NoaW0uanMiKX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbnVtYmVyL2lzLW5hbi9pcy1pbXBsZW1lbnRlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1OdW1iZXIuaXNOYU47cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJighZSh7fSkmJmUoTmFOKSYmIWUoMzQpKX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L251bWJlci9pcy1uYW4vc2hpbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1lfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvbnVtYmVyL3RvLWludGVnZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9tYXRoL3NpZ24vaW5kZXguanMiKSxvPU1hdGguYWJzLHM9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6KGU9TnVtYmVyKGUpLDAhPT1lJiZpc0Zpbml0ZShlKT9yKGUpKnMobyhlKSk6ZSl9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvdG8tcG9zLWludGVnZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvdG8taW50ZWdlci5qcyIpLG89TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvKDAscihlKSl9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvX2l0ZXJhdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlLmpzIikscz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxpPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGE9T2JqZWN0LmtleXMsbD1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHUpe3ZhciBjLGQ9YXJndW1lbnRzWzJdLF89YXJndW1lbnRzWzNdO3JldHVybiBuPU9iamVjdChvKG4pKSxyKHUpLGM9YShuKSxfJiZjLnNvcnQoImZ1bmN0aW9uIj09dHlwZW9mIF8/cy5jYWxsKF8sbik6dm9pZCAwKSwiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9Y1tlXSksaS5jYWxsKGUsYyxmdW5jdGlvbihlLHIpe3JldHVybiBsLmNhbGwobixlKT9pLmNhbGwodSxkLG5bZV0sZSxuLHIpOnR9KX19fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvYXNzaWduL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9hc3NpZ24vaXMtaW1wbGVtZW50ZWQuanMiKSgpP09iamVjdC5hc3NpZ246bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvYXNzaWduL3NoaW0uanMiKX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Fzc2lnbi9pcy1pbXBsZW1lbnRlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSx0PU9iamVjdC5hc3NpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJihlPXtmb286InJheiJ9LHQoZSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSxlLmZvbytlLmJhcitlLnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Fzc2lnbi9zaGltLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2tleXMvaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlLmpzIikscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpLGEsbD1zKGFyZ3VtZW50cy5sZW5ndGgsMik7Zm9yKGU9T2JqZWN0KG8oZSkpLGE9ZnVuY3Rpb24ocil7dHJ5e2Vbcl09dFtyXX1jYXRjaChlKXtufHwobj1lKX19LGk9MTtpPGw7KytpKXQ9YXJndW1lbnRzW2ldLHIodCkuZm9yRWFjaChhKTtpZih2b2lkIDAhPT1uKXRocm93IG47cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvZm9yLWVhY2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L19pdGVyYXRlLmpzIikoImZvckVhY2giKX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9pcy1vYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUuanMiKSxvPXtmdW5jdGlvbjohMCxvYmplY3Q6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlKSYmb1t0eXBlb2YgZV18fCExfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2lzLXZhbHVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZnVuY3Rpb24vbm9vcC5qcyIpKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09ciYmbnVsbCE9PWV9fSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3Qva2V5cy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3Qva2V5cy9pcy1pbXBsZW1lbnRlZC5qcyIpKCk/T2JqZWN0LmtleXM6bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3Qva2V5cy9zaGltLmpzIil9LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9rZXlzL2lzLWltcGxlbWVudGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmtleXMoInByaW1pdGl2ZSIpLCEwfWNhdGNoKGUpe3JldHVybiExfX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9rZXlzL3NoaW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUuanMiKSxvPU9iamVjdC5rZXlzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbyhyKGUpP09iamVjdChlKTplKX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9tYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Zvci1lYWNoLmpzIikscz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fSxpPWFyZ3VtZW50c1syXTtyZXR1cm4gcih0KSxvKGUsZnVuY3Rpb24oZSxyLG8sYSl7bltyXT1zLmNhbGwodCxpLGUscixvLGEpfSksbn19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9taXhpbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC92YWxpZC12YWx1ZS5qcyIpLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixsPU9iamVjdChyKHQpKTtpZihlPU9iamVjdChyKGUpKSxpKGwpLmZvckVhY2goZnVuY3Rpb24ocil7dHJ5e28oZSxyLHModCxyKSl9Y2F0Y2goZSl7bj1lfX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKGwpLmZvckVhY2goZnVuY3Rpb24ocil7dHJ5e28oZSxyLHModCxyKSl9Y2F0Y2goZSl7bj1lfX0pLHZvaWQgMCE9PW4pdGhyb3cgbjtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9pcy12YWx1ZS5qcyIpLG89QXJyYXkucHJvdG90eXBlLmZvckVhY2gscz1PYmplY3QuY3JlYXRlLGk9ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IobiBpbiBlKXRbbl09ZVtuXX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXMobnVsbCk7cmV0dXJuIG8uY2FsbChhcmd1bWVudHMsZnVuY3Rpb24oZSl7cihlKSYmaShPYmplY3QoZSksdCl9KSx0fX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBlfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2lzLXZhbHVlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zL2lzLWltcGxlbWVudGVkLmpzIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOm4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvc3RyaW5nLyMvY29udGFpbnMvc2hpbS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucy9pcy1pbXBsZW1lbnRlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHIuY29udGFpbnMmJighMD09PXIuY29udGFpbnMoImR3YSIpJiYhMT09PXIuY29udGFpbnMoImZvbyIpKX19LCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zL3NoaW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gci5jYWxsKHRoaXMsZSxhcmd1bWVudHNbMV0pPi0xfX0sIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvc3RyaW5nL2lzLXN0cmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG89ci5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxlJiYib2JqZWN0Ij09dHlwZW9mIGUmJihlIGluc3RhbmNlb2YgU3RyaW5nfHxyLmNhbGwoZSk9PT1vKXx8ITF9fSwiLi9ub2RlX21vZHVsZXMvZXM2LWVycm9yL2VzNi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7cih0aGlzLHQpO3ZhciBuPW8odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIm1lc3NhZ2UiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTplLHdyaXRhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIm5hbWUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpuLmNvbnN0cnVjdG9yLm5hbWUsd3JpdGFibGU6ITB9KSxFcnJvci5oYXNPd25Qcm9wZXJ0eSgiY2FwdHVyZVN0YWNrVHJhY2UiKT8oRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UobixuLmNvbnN0cnVjdG9yKSxvKG4pKTooT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInN0YWNrIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6bmV3IEVycm9yKGUpLnN0YWNrLHdyaXRhYmxlOiEwfSksbil9cmV0dXJuIHModCxlKSx0fShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lLHR9KEVycm9yKSk7dC5hPWl9LCIuL25vZGVfbW9kdWxlcy9lczYtc3ltYm9sL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9lczYtc3ltYm9sL2lzLWltcGxlbWVudGVkLmpzIikoKT9TeW1ib2w6bigiLi9ub2RlX21vZHVsZXMvZXM2LXN5bWJvbC9wb2x5ZmlsbC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvZXM2LXN5bWJvbC9pcy1pbXBsZW1lbnRlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbClyZXR1cm4hMTtlPVN5bWJvbCgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKGUpfWNhdGNoKGUpe3JldHVybiExfXJldHVybiEhclt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhclt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFyW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LCIuL25vZGVfbW9kdWxlcy9lczYtc3ltYm9sL2lzLXN5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYoInN5bWJvbCI9PXR5cGVvZiBlfHwhIWUuY29uc3RydWN0b3ImJigiU3ltYm9sIj09PWUuY29uc3RydWN0b3IubmFtZSYmIlN5bWJvbCI9PT1lW2UuY29uc3RydWN0b3IudG9TdHJpbmdUYWddKSl9fSwiLi9ub2RlX21vZHVsZXMvZXM2LXN5bWJvbC9wb2x5ZmlsbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2QvaW5kZXguanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2VzNi1zeW1ib2wvdmFsaWRhdGUtc3ltYm9sLmpzIiksdT1PYmplY3QuY3JlYXRlLGM9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsZD1PYmplY3QuZGVmaW5lUHJvcGVydHksXz1PYmplY3QucHJvdG90eXBlLHA9dShudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sKXtyPVN5bWJvbDt0cnl7U3RyaW5nKHIoKSksaT0hMH1jYXRjaChlKXt9fXZhciBmPWZ1bmN0aW9uKCl7dmFyIGU9dShudWxsKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBuLHIsbz0wO2VbdCsob3x8IiIpXTspKytvO3JldHVybiB0Kz1vfHwiIixlW3RdPSEwLG49IkBAIit0LGQoXyxuLGEuZ3MobnVsbCxmdW5jdGlvbihlKXtyfHwocj0hMCxkKHRoaXMsbixhKGUpKSxyPSExKX0pKSxufX0oKTtzPWZ1bmN0aW9uKGUpe2lmKHRoaXMgaW5zdGFuY2VvZiBzKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBvKGUpfSxlLmV4cG9ydHM9bz1mdW5jdGlvbiBlKHQpe3ZhciBuO2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBpP3IodCk6KG49dShzLnByb3RvdHlwZSksdD12b2lkIDA9PT10PyIiOlN0cmluZyh0KSxjKG4se19fZGVzY3JpcHRpb25fXzphKCIiLHQpLF9fbmFtZV9fOmEoIiIsZih0KSl9KSl9LGMobyx7Zm9yOmEoZnVuY3Rpb24oZSl7cmV0dXJuIHBbZV0/cFtlXTpwW2VdPW8oU3RyaW5nKGUpKX0pLGtleUZvcjphKGZ1bmN0aW9uKGUpe3ZhciB0O2woZSk7Zm9yKHQgaW4gcClpZihwW3RdPT09ZSlyZXR1cm4gdH0pLGhhc0luc3RhbmNlOmEoIiIsciYmci5oYXNJbnN0YW5jZXx8bygiaGFzSW5zdGFuY2UiKSksaXNDb25jYXRTcHJlYWRhYmxlOmEoIiIsciYmci5pc0NvbmNhdFNwcmVhZGFibGV8fG8oImlzQ29uY2F0U3ByZWFkYWJsZSIpKSxpdGVyYXRvcjphKCIiLHImJnIuaXRlcmF0b3J8fG8oIml0ZXJhdG9yIikpLG1hdGNoOmEoIiIsciYmci5tYXRjaHx8bygibWF0Y2giKSkscmVwbGFjZTphKCIiLHImJnIucmVwbGFjZXx8bygicmVwbGFjZSIpKSxzZWFyY2g6YSgiIixyJiZyLnNlYXJjaHx8bygic2VhcmNoIikpLHNwZWNpZXM6YSgiIixyJiZyLnNwZWNpZXN8fG8oInNwZWNpZXMiKSksc3BsaXQ6YSgiIixyJiZyLnNwbGl0fHxvKCJzcGxpdCIpKSx0b1ByaW1pdGl2ZTphKCIiLHImJnIudG9QcmltaXRpdmV8fG8oInRvUHJpbWl0aXZlIikpLHRvU3RyaW5nVGFnOmEoIiIsciYmci50b1N0cmluZ1RhZ3x8bygidG9TdHJpbmdUYWciKSksdW5zY29wYWJsZXM6YSgiIixyJiZyLnVuc2NvcGFibGVzfHxvKCJ1bnNjb3BhYmxlcyIpKX0pLGMocy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOmEobyksdG9TdHJpbmc6YSgiIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbmFtZV9ffSl9KSxjKG8ucHJvdG90eXBlLHt0b1N0cmluZzphKGZ1bmN0aW9uKCl7cmV0dXJuIlN5bWJvbCAoIitsKHRoaXMpLl9fZGVzY3JpcHRpb25fXysiKSJ9KSx2YWx1ZU9mOmEoZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzKX0pfSksZChvLnByb3RvdHlwZSxvLnRvUHJpbWl0aXZlLGEoIiIsZnVuY3Rpb24oKXt2YXIgZT1sKHRoaXMpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOmUudG9TdHJpbmcoKX0pKSxkKG8ucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYSgiYyIsIlN5bWJvbCIpKSxkKHMucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYSgiYyIsby5wcm90b3R5cGVbby50b1N0cmluZ1RhZ10pKSxkKHMucHJvdG90eXBlLG8udG9QcmltaXRpdmUsYSgiYyIsby5wcm90b3R5cGVbby50b1ByaW1pdGl2ZV0pKX0sIi4vbm9kZV9tb2R1bGVzL2VzNi1zeW1ib2wvdmFsaWRhdGUtc3ltYm9sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNi1zeW1ib2wvaXMtc3ltYm9sLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIHN5bWJvbCIpO3JldHVybiBlfX0sIi4vbm9kZV9tb2R1bGVzL2VzcHJpbWEvZGlzdC9lc3ByaW1hLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQsbil7ZS5leHBvcnRzPW4oKX0oMCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgbz1uW3JdPXtleHBvcnRzOnt9LGlkOnIsbG9hZGVkOiExfTtyZXR1cm4gZVtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyx0KSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIG49e307cmV0dXJuIHQubT1lLHQuYz1uLHQucD0iIix0KDApfShbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1udWxsLG89ZnVuY3Rpb24oZSx0KXtuJiZuKGUsdCksciYmci52aXNpdChlLHQpfSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBuP286bnVsbCxpPSExO2lmKHQpe2k9ImJvb2xlYW4iPT10eXBlb2YgdC5jb21tZW50JiZ0LmNvbW1lbnQ7dmFyIGM9ImJvb2xlYW4iPT10eXBlb2YgdC5hdHRhY2hDb21tZW50JiZ0LmF0dGFjaENvbW1lbnQ7KGl8fGMpJiYocj1uZXcgYS5Db21tZW50SGFuZGxlcixyLmF0dGFjaD1jLHQuY29tbWVudD0hMCxzPW8pfXZhciBkPSExO3QmJiJzdHJpbmciPT10eXBlb2YgdC5zb3VyY2VUeXBlJiYoZD0ibW9kdWxlIj09PXQuc291cmNlVHlwZSk7dmFyIF87Xz10JiYiYm9vbGVhbiI9PXR5cGVvZiB0LmpzeCYmdC5qc3g/bmV3IGwuSlNYUGFyc2VyKGUsdCxzKTpuZXcgdS5QYXJzZXIoZSx0LHMpO3ZhciBwPWQ/Xy5wYXJzZU1vZHVsZSgpOl8ucGFyc2VTY3JpcHQoKSxmPXA7cmV0dXJuIGkmJnImJihmLmNvbW1lbnRzPXIuY29tbWVudHMpLF8uY29uZmlnLnRva2VucyYmKGYudG9rZW5zPV8udG9rZW5zKSxfLmNvbmZpZy50b2xlcmFudCYmKGYuZXJyb3JzPV8uZXJyb3JIYW5kbGVyLmVycm9ycyksZn1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgbz10fHx7fTtyZXR1cm4gby5zb3VyY2VUeXBlPSJtb2R1bGUiLHIoZSxvLG4pfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciBvPXR8fHt9O3JldHVybiBvLnNvdXJjZVR5cGU9InNjcmlwdCIscihlLG8sbil9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHIsbz1uZXcgYy5Ub2tlbml6ZXIoZSx0KTtyPVtdO3RyeXtmb3IoOzspe3ZhciBzPW8uZ2V0TmV4dFRva2VuKCk7aWYoIXMpYnJlYWs7biYmKHM9bihzKSksci5wdXNoKHMpfX1jYXRjaChlKXtvLmVycm9ySGFuZGxlci50b2xlcmF0ZShlKX1yZXR1cm4gby5lcnJvckhhbmRsZXIudG9sZXJhbnQmJihyLmVycm9ycz1vLmVycm9ycygpKSxyfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1uKDEpLGw9bigzKSx1PW4oOCksYz1uKDE1KTt0LnBhcnNlPXIsdC5wYXJzZU1vZHVsZT1vLHQucGFyc2VTY3JpcHQ9cyx0LnRva2VuaXplPWk7dmFyIGQ9bigyKTt0LlN5bnRheD1kLlN5bnRheCx0LnZlcnNpb249IjQuMC4xIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYXR0YWNoPSExLHRoaXMuY29tbWVudHM9W10sdGhpcy5zdGFjaz1bXSx0aGlzLmxlYWRpbmc9W10sdGhpcy50cmFpbGluZz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0SW5uZXJDb21tZW50cz1mdW5jdGlvbihlLHQpe2lmKGUudHlwZT09PXIuU3ludGF4LkJsb2NrU3RhdGVtZW50JiYwPT09ZS5ib2R5Lmxlbmd0aCl7Zm9yKHZhciBuPVtdLG89dGhpcy5sZWFkaW5nLmxlbmd0aC0xO28+PTA7LS1vKXt2YXIgcz10aGlzLmxlYWRpbmdbb107dC5lbmQub2Zmc2V0Pj1zLnN0YXJ0JiYobi51bnNoaWZ0KHMuY29tbWVudCksdGhpcy5sZWFkaW5nLnNwbGljZShvLDEpLHRoaXMudHJhaWxpbmcuc3BsaWNlKG8sMSkpfW4ubGVuZ3RoJiYoZS5pbm5lckNvbW1lbnRzPW4pfX0sZS5wcm90b3R5cGUuZmluZFRyYWlsaW5nQ29tbWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpcy50cmFpbGluZy5sZW5ndGg+MCl7Zm9yKHZhciBuPXRoaXMudHJhaWxpbmcubGVuZ3RoLTE7bj49MDstLW4pe3ZhciByPXRoaXMudHJhaWxpbmdbbl07ci5zdGFydD49ZS5lbmQub2Zmc2V0JiZ0LnVuc2hpZnQoci5jb21tZW50KX1yZXR1cm4gdGhpcy50cmFpbGluZy5sZW5ndGg9MCx0fXZhciBvPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYobyYmby5ub2RlLnRyYWlsaW5nQ29tbWVudHMpe3ZhciBzPW8ubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdO3MmJnMucmFuZ2VbMF0+PWUuZW5kLm9mZnNldCYmKHQ9by5ub2RlLnRyYWlsaW5nQ29tbWVudHMsZGVsZXRlIG8ubm9kZS50cmFpbGluZ0NvbW1lbnRzKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZmluZExlYWRpbmdDb21tZW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTt0aGlzLnN0YWNrLmxlbmd0aD4wOyl7dmFyIHI9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZighKHImJnIuc3RhcnQ+PWUuc3RhcnQub2Zmc2V0KSlicmVhazt0PXIubm9kZSx0aGlzLnN0YWNrLnBvcCgpfWlmKHQpe2Zvcih2YXIgbz10LmxlYWRpbmdDb21tZW50cz90LmxlYWRpbmdDb21tZW50cy5sZW5ndGg6MCxzPW8tMTtzPj0wOy0tcyl7dmFyIGk9dC5sZWFkaW5nQ29tbWVudHNbc107aS5yYW5nZVsxXTw9ZS5zdGFydC5vZmZzZXQmJihuLnVuc2hpZnQoaSksdC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKHMsMSkpfXJldHVybiB0LmxlYWRpbmdDb21tZW50cyYmMD09PXQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCYmZGVsZXRlIHQubGVhZGluZ0NvbW1lbnRzLG59Zm9yKHZhciBzPXRoaXMubGVhZGluZy5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIHI9dGhpcy5sZWFkaW5nW3NdO3Iuc3RhcnQ8PWUuc3RhcnQub2Zmc2V0JiYobi51bnNoaWZ0KHIuY29tbWVudCksdGhpcy5sZWFkaW5nLnNwbGljZShzLDEpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUudmlzaXROb2RlPWZ1bmN0aW9uKGUsdCl7aWYoIShlLnR5cGU9PT1yLlN5bnRheC5Qcm9ncmFtJiZlLmJvZHkubGVuZ3RoPjApKXt0aGlzLmluc2VydElubmVyQ29tbWVudHMoZSx0KTt2YXIgbj10aGlzLmZpbmRUcmFpbGluZ0NvbW1lbnRzKHQpLG89dGhpcy5maW5kTGVhZGluZ0NvbW1lbnRzKHQpO28ubGVuZ3RoPjAmJihlLmxlYWRpbmdDb21tZW50cz1vKSxuLmxlbmd0aD4wJiYoZS50cmFpbGluZ0NvbW1lbnRzPW4pLHRoaXMuc3RhY2sucHVzaCh7bm9kZTplLHN0YXJ0OnQuc3RhcnQub2Zmc2V0fSl9fSxlLnByb3RvdHlwZS52aXNpdENvbW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iTCI9PT1lLnR5cGVbMF0/IkxpbmUiOiJCbG9jayIscj17dHlwZTpuLHZhbHVlOmUudmFsdWV9O2lmKGUucmFuZ2UmJihyLnJhbmdlPWUucmFuZ2UpLGUubG9jJiYoci5sb2M9ZS5sb2MpLHRoaXMuY29tbWVudHMucHVzaChyKSx0aGlzLmF0dGFjaCl7dmFyIG89e2NvbW1lbnQ6e3R5cGU6bix2YWx1ZTplLnZhbHVlLHJhbmdlOlt0LnN0YXJ0Lm9mZnNldCx0LmVuZC5vZmZzZXRdfSxzdGFydDp0LnN0YXJ0Lm9mZnNldH07ZS5sb2MmJihvLmNvbW1lbnQubG9jPWUubG9jKSxlLnR5cGU9bix0aGlzLmxlYWRpbmcucHVzaChvKSx0aGlzLnRyYWlsaW5nLnB1c2gobyl9fSxlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlLHQpeyJMaW5lQ29tbWVudCI9PT1lLnR5cGU/dGhpcy52aXNpdENvbW1lbnQoZSx0KToiQmxvY2tDb21tZW50Ij09PWUudHlwZT90aGlzLnZpc2l0Q29tbWVudChlLHQpOnRoaXMuYXR0YWNoJiZ0aGlzLnZpc2l0Tm9kZShlLHQpfSxlfSgpO3QuQ29tbWVudEhhbmRsZXI9b30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3ludGF4PXtBc3NpZ25tZW50RXhwcmVzc2lvbjoiQXNzaWdubWVudEV4cHJlc3Npb24iLEFzc2lnbm1lbnRQYXR0ZXJuOiJBc3NpZ25tZW50UGF0dGVybiIsQXJyYXlFeHByZXNzaW9uOiJBcnJheUV4cHJlc3Npb24iLEFycmF5UGF0dGVybjoiQXJyYXlQYXR0ZXJuIixBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjoiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLEF3YWl0RXhwcmVzc2lvbjoiQXdhaXRFeHByZXNzaW9uIixCbG9ja1N0YXRlbWVudDoiQmxvY2tTdGF0ZW1lbnQiLEJpbmFyeUV4cHJlc3Npb246IkJpbmFyeUV4cHJlc3Npb24iLEJyZWFrU3RhdGVtZW50OiJCcmVha1N0YXRlbWVudCIsQ2FsbEV4cHJlc3Npb246IkNhbGxFeHByZXNzaW9uIixDYXRjaENsYXVzZToiQ2F0Y2hDbGF1c2UiLENsYXNzQm9keToiQ2xhc3NCb2R5IixDbGFzc0RlY2xhcmF0aW9uOiJDbGFzc0RlY2xhcmF0aW9uIixDbGFzc0V4cHJlc3Npb246IkNsYXNzRXhwcmVzc2lvbiIsQ29uZGl0aW9uYWxFeHByZXNzaW9uOiJDb25kaXRpb25hbEV4cHJlc3Npb24iLENvbnRpbnVlU3RhdGVtZW50OiJDb250aW51ZVN0YXRlbWVudCIsRG9XaGlsZVN0YXRlbWVudDoiRG9XaGlsZVN0YXRlbWVudCIsRGVidWdnZXJTdGF0ZW1lbnQ6IkRlYnVnZ2VyU3RhdGVtZW50IixFbXB0eVN0YXRlbWVudDoiRW1wdHlTdGF0ZW1lbnQiLEV4cG9ydEFsbERlY2xhcmF0aW9uOiJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLEV4cG9ydFNwZWNpZmllcjoiRXhwb3J0U3BlY2lmaWVyIixFeHByZXNzaW9uU3RhdGVtZW50OiJFeHByZXNzaW9uU3RhdGVtZW50IixGb3JTdGF0ZW1lbnQ6IkZvclN0YXRlbWVudCIsRm9yT2ZTdGF0ZW1lbnQ6IkZvck9mU3RhdGVtZW50IixGb3JJblN0YXRlbWVudDoiRm9ySW5TdGF0ZW1lbnQiLEZ1bmN0aW9uRGVjbGFyYXRpb246IkZ1bmN0aW9uRGVjbGFyYXRpb24iLEZ1bmN0aW9uRXhwcmVzc2lvbjoiRnVuY3Rpb25FeHByZXNzaW9uIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixJZlN0YXRlbWVudDoiSWZTdGF0ZW1lbnQiLEltcG9ydERlY2xhcmF0aW9uOiJJbXBvcnREZWNsYXJhdGlvbiIsSW1wb3J0RGVmYXVsdFNwZWNpZmllcjoiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIsSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLEltcG9ydFNwZWNpZmllcjoiSW1wb3J0U3BlY2lmaWVyIixMaXRlcmFsOiJMaXRlcmFsIixMYWJlbGVkU3RhdGVtZW50OiJMYWJlbGVkU3RhdGVtZW50IixMb2dpY2FsRXhwcmVzc2lvbjoiTG9naWNhbEV4cHJlc3Npb24iLE1lbWJlckV4cHJlc3Npb246Ik1lbWJlckV4cHJlc3Npb24iLE1ldGFQcm9wZXJ0eToiTWV0YVByb3BlcnR5IixNZXRob2REZWZpbml0aW9uOiJNZXRob2REZWZpbml0aW9uIixOZXdFeHByZXNzaW9uOiJOZXdFeHByZXNzaW9uIixPYmplY3RFeHByZXNzaW9uOiJPYmplY3RFeHByZXNzaW9uIixPYmplY3RQYXR0ZXJuOiJPYmplY3RQYXR0ZXJuIixQcm9ncmFtOiJQcm9ncmFtIixQcm9wZXJ0eToiUHJvcGVydHkiLFJlc3RFbGVtZW50OiJSZXN0RWxlbWVudCIsUmV0dXJuU3RhdGVtZW50OiJSZXR1cm5TdGF0ZW1lbnQiLFNlcXVlbmNlRXhwcmVzc2lvbjoiU2VxdWVuY2VFeHByZXNzaW9uIixTcHJlYWRFbGVtZW50OiJTcHJlYWRFbGVtZW50IixTdXBlcjoiU3VwZXIiLFN3aXRjaENhc2U6IlN3aXRjaENhc2UiLFN3aXRjaFN0YXRlbWVudDoiU3dpdGNoU3RhdGVtZW50IixUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiIsVGVtcGxhdGVFbGVtZW50OiJUZW1wbGF0ZUVsZW1lbnQiLFRlbXBsYXRlTGl0ZXJhbDoiVGVtcGxhdGVMaXRlcmFsIixUaGlzRXhwcmVzc2lvbjoiVGhpc0V4cHJlc3Npb24iLFRocm93U3RhdGVtZW50OiJUaHJvd1N0YXRlbWVudCIsVHJ5U3RhdGVtZW50OiJUcnlTdGF0ZW1lbnQiLFVuYXJ5RXhwcmVzc2lvbjoiVW5hcnlFeHByZXNzaW9uIixVcGRhdGVFeHByZXNzaW9uOiJVcGRhdGVFeHByZXNzaW9uIixWYXJpYWJsZURlY2xhcmF0aW9uOiJWYXJpYWJsZURlY2xhcmF0aW9uIixWYXJpYWJsZURlY2xhcmF0b3I6IlZhcmlhYmxlRGVjbGFyYXRvciIsV2hpbGVTdGF0ZW1lbnQ6IldoaWxlU3RhdGVtZW50IixXaXRoU3RhdGVtZW50OiJXaXRoU3RhdGVtZW50IixZaWVsZEV4cHJlc3Npb246IllpZWxkRXhwcmVzc2lvbiJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ7c3dpdGNoKGUudHlwZSl7Y2FzZSBhLkpTWFN5bnRheC5KU1hJZGVudGlmaWVyOnQ9ZS5uYW1lO2JyZWFrO2Nhc2UgYS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU6dmFyIG49ZTt0PXIobi5uYW1lc3BhY2UpKyI6IityKG4ubmFtZSk7YnJlYWs7Y2FzZSBhLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOnZhciBvPWU7dD1yKG8ub2JqZWN0KSsiLiIrcihvLnByb3BlcnR5KX1yZXR1cm4gdH12YXIgbz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9big0KSxpPW4oNSksYT1uKDYpLGw9big3KSx1PW4oOCksYz1uKDEzKSxkPW4oMTQpO2MuVG9rZW5OYW1lWzEwMF09IkpTWElkZW50aWZpZXIiLGMuVG9rZW5OYW1lWzEwMV09IkpTWFRleHQiO3ZhciBfPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3JldHVybiBlLmNhbGwodGhpcyx0LG4scil8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goIjwiKT90aGlzLnBhcnNlSlNYUm9vdCgpOmUucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24uY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuc3RhcnRKU1g9ZnVuY3Rpb24oKXt0aGlzLnNjYW5uZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleCx0aGlzLnNjYW5uZXIubGluZU51bWJlcj10aGlzLnN0YXJ0TWFya2VyLmxpbmUsdGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnN0YXJ0TWFya2VyLmluZGV4LXRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufSx0LnByb3RvdHlwZS5maW5pc2hKU1g9ZnVuY3Rpb24oKXt0aGlzLm5leHRUb2tlbigpfSx0LnByb3RvdHlwZS5yZWVudGVySlNYPWZ1bmN0aW9uKCl7dGhpcy5zdGFydEpTWCgpLHRoaXMuZXhwZWN0SlNYKCJ9IiksdGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wb3AoKX0sdC5wcm90b3R5cGUuY3JlYXRlSlNYTm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxlY3RDb21tZW50cygpLHtpbmRleDp0aGlzLnNjYW5uZXIuaW5kZXgsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9fSx0LnByb3RvdHlwZS5jcmVhdGVKU1hDaGlsZE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm57aW5kZXg6dGhpcy5zY2FubmVyLmluZGV4LGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fX0sdC5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iJiIsbj0hMCxyPSExLG89ITEsaT0hMTshdGhpcy5zY2FubmVyLmVvZigpJiZuJiYhcjspe3ZhciBhPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtpZihhPT09ZSlicmVhaztpZihyPSI7Ij09PWEsdCs9YSwrK3RoaXMuc2Nhbm5lci5pbmRleCwhcilzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMjpvPSIjIj09PWE7YnJlYWs7Y2FzZSAzOm8mJihpPSJ4Ij09PWEsbj1pfHxzLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChhLmNoYXJDb2RlQXQoMCkpLG89byYmIWkpO2JyZWFrO2RlZmF1bHQ6bj1uJiYhKG8mJiFzLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChhLmNoYXJDb2RlQXQoMCkpKSxuPW4mJiEoaSYmIXMuQ2hhcmFjdGVyLmlzSGV4RGlnaXQoYS5jaGFyQ29kZUF0KDApKSl9fWlmKG4mJnImJnQubGVuZ3RoPjIpe3ZhciBsPXQuc3Vic3RyKDEsdC5sZW5ndGgtMik7byYmbC5sZW5ndGg+MT90PVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobC5zdWJzdHIoMSksMTApKTppJiZsLmxlbmd0aD4yP3Q9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgiMCIrbC5zdWJzdHIoMSksMTYpKTpvfHxpfHwhZC5YSFRNTEVudGl0aWVzW2xdfHwodD1kLlhIVE1MRW50aXRpZXNbbF0pfXJldHVybiB0fSx0LnByb3RvdHlwZS5sZXhKU1g9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTtpZig2MD09PWV8fDYyPT09ZXx8NDc9PT1lfHw1OD09PWV8fDYxPT09ZXx8MTIzPT09ZXx8MTI1PT09ZSl7dmFyIHQ9dGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107cmV0dXJue3R5cGU6Nyx2YWx1ZTp0LGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6dGhpcy5zY2FubmVyLmluZGV4LTEsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH19aWYoMzQ9PT1lfHwzOT09PWUpe2Zvcih2YXIgbj10aGlzLnNjYW5uZXIuaW5kZXgscj10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXSxvPSIiOyF0aGlzLnNjYW5uZXIuZW9mKCk7KXt2YXIgaT10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTtpZihpPT09cilicmVhaztvKz0iJiI9PT1pP3RoaXMuc2NhblhIVE1MRW50aXR5KHIpOml9cmV0dXJue3R5cGU6OCx2YWx1ZTpvLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6bixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1pZig0Nj09PWUpe3ZhciBhPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgrMSksbD10aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KzIpLHQ9NDY9PT1hJiY0Nj09PWw/Ii4uLiI6Ii4iLG49dGhpcy5zY2FubmVyLmluZGV4O3JldHVybiB0aGlzLnNjYW5uZXIuaW5kZXgrPXQubGVuZ3RoLHt0eXBlOjcsdmFsdWU6dCxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0Om4sZW5kOnRoaXMuc2Nhbm5lci5pbmRleH19aWYoOTY9PT1lKXJldHVybnt0eXBlOjEwLHZhbHVlOiIiLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6dGhpcy5zY2FubmVyLmluZGV4LGVuZDp0aGlzLnNjYW5uZXIuaW5kZXh9O2lmKHMuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGUpJiY5MiE9PWUpe3ZhciBuPXRoaXMuc2Nhbm5lci5pbmRleDtmb3IoKyt0aGlzLnNjYW5uZXIuaW5kZXg7IXRoaXMuc2Nhbm5lci5lb2YoKTspe3ZhciBpPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpO2lmKHMuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoaSkmJjkyIT09aSkrK3RoaXMuc2Nhbm5lci5pbmRleDtlbHNle2lmKDQ1IT09aSlicmVhazsrK3RoaXMuc2Nhbm5lci5pbmRleH19cmV0dXJue3R5cGU6MTAwLHZhbHVlOnRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uobix0aGlzLnNjYW5uZXIuaW5kZXgpLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6bixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1yZXR1cm4gdGhpcy5zY2FubmVyLmxleCgpfSx0LnByb3RvdHlwZS5uZXh0SlNYVG9rZW49ZnVuY3Rpb24oKXt0aGlzLmNvbGxlY3RDb21tZW50cygpLHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDt2YXIgZT10aGlzLmxleEpTWCgpO3JldHVybiB0aGlzLmxhc3RNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMubGFzdE1hcmtlci5saW5lPXRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLHRoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQsdGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKGUpKSxlfSx0LnByb3RvdHlwZS5uZXh0SlNYVGV4dD1mdW5jdGlvbigpe3RoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDtmb3IodmFyIGU9dGhpcy5zY2FubmVyLmluZGV4LHQ9IiI7IXRoaXMuc2Nhbm5lci5lb2YoKTspe3ZhciBuPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtpZigieyI9PT1ufHwiPCI9PT1uKWJyZWFrOysrdGhpcy5zY2FubmVyLmluZGV4LHQrPW4scy5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihuLmNoYXJDb2RlQXQoMCkpJiYoKyt0aGlzLnNjYW5uZXIubGluZU51bWJlciwiXHIiPT09biYmIlxuIj09PXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSYmKyt0aGlzLnNjYW5uZXIuaW5kZXgsdGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnNjYW5uZXIuaW5kZXgpfXRoaXMubGFzdE1hcmtlci5pbmRleD10aGlzLnNjYW5uZXIuaW5kZXgsdGhpcy5sYXN0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsdGhpcy5sYXN0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDt2YXIgcj17dHlwZToxMDEsdmFsdWU6dCxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH07cmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMuY29uZmlnLnRva2VucyYmdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbihyKSkscn0sdC5wcm90b3R5cGUucGVla0pTWFRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpO3RoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTt2YXIgdD10aGlzLmxleEpTWCgpO3JldHVybiB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKGUpLHR9LHQucHJvdG90eXBlLmV4cGVjdEpTWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRKU1hUb2tlbigpOzc9PT10LnR5cGUmJnQudmFsdWU9PT1lfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfSx0LnByb3RvdHlwZS5tYXRjaEpTWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBlZWtKU1hUb2tlbigpO3JldHVybiA3PT09dC50eXBlJiZ0LnZhbHVlPT09ZX0sdC5wcm90b3R5cGUucGFyc2VKU1hJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCksdD10aGlzLm5leHRKU1hUb2tlbigpO3JldHVybiAxMDAhPT10LnR5cGUmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCksdGhpcy5maW5hbGl6ZShlLG5ldyBpLkpTWElkZW50aWZpZXIodC52YWx1ZSkpfSx0LnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCksdD10aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO2lmKHRoaXMubWF0Y2hKU1goIjoiKSl7dmFyIG49dDt0aGlzLmV4cGVjdEpTWCgiOiIpO3ZhciByPXRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGkuSlNYTmFtZXNwYWNlZE5hbWUobixyKSl9ZWxzZSBpZih0aGlzLm1hdGNoSlNYKCIuIikpZm9yKDt0aGlzLm1hdGNoSlNYKCIuIik7KXt2YXIgbz10O3RoaXMuZXhwZWN0SlNYKCIuIik7dmFyIHM9dGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgaS5KU1hNZW1iZXJFeHByZXNzaW9uKG8scykpfXJldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZU5hbWU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlSlNYTm9kZSgpLG49dGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTtpZih0aGlzLm1hdGNoSlNYKCI6Iikpe3ZhciByPW47dGhpcy5leHBlY3RKU1goIjoiKTt2YXIgbz10aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO2U9dGhpcy5maW5hbGl6ZSh0LG5ldyBpLkpTWE5hbWVzcGFjZWROYW1lKHIsbykpfWVsc2UgZT1uO3JldHVybiBlfSx0LnByb3RvdHlwZS5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKSx0PXRoaXMubmV4dEpTWFRva2VuKCk7OCE9PXQudHlwZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0KTt2YXIgbj10aGlzLmdldFRva2VuUmF3KHQpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGwuTGl0ZXJhbCh0LnZhbHVlLG4pKX0sdC5wcm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goInsiKSx0aGlzLmZpbmlzaEpTWCgpLHRoaXMubWF0Y2goIn0iKSYmdGhpcy50b2xlcmF0ZUVycm9yKCJKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbiIpO3ZhciB0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3JldHVybiB0aGlzLnJlZW50ZXJKU1goKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcih0KSl9LHQucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaEpTWCgieyIpP3RoaXMucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlKCk6dGhpcy5tYXRjaEpTWCgiPCIpP3RoaXMucGFyc2VKU1hFbGVtZW50KCk6dGhpcy5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGUoKX0sdC5wcm90b3R5cGUucGFyc2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKSx0PXRoaXMucGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCksbj1udWxsO3JldHVybiB0aGlzLm1hdGNoSlNYKCI9IikmJih0aGlzLmV4cGVjdEpTWCgiPSIpLG49dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCkpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5KU1hBdHRyaWJ1dGUodCxuKSl9LHQucHJvdG90eXBlLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goInsiKSx0aGlzLmV4cGVjdEpTWCgiLi4uIiksdGhpcy5maW5pc2hKU1goKTt2YXIgdD10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5yZWVudGVySlNYKCksdGhpcy5maW5hbGl6ZShlLG5ldyBpLkpTWFNwcmVhZEF0dHJpYnV0ZSh0KSl9LHQucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXTshdGhpcy5tYXRjaEpTWCgiLyIpJiYhdGhpcy5tYXRjaEpTWCgiPiIpOyl7dmFyIHQ9dGhpcy5tYXRjaEpTWCgieyIpP3RoaXMucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTp0aGlzLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlKCk7ZS5wdXNoKHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goIjwiKTt2YXIgdD10aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKSxuPXRoaXMucGFyc2VKU1hBdHRyaWJ1dGVzKCkscj10aGlzLm1hdGNoSlNYKCIvIik7cmV0dXJuIHImJnRoaXMuZXhwZWN0SlNYKCIvIiksdGhpcy5leHBlY3RKU1goIj4iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuSlNYT3BlbmluZ0VsZW1lbnQodCxyLG4pKX0sdC5wcm90b3R5cGUucGFyc2VKU1hCb3VuZGFyeUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTtpZih0aGlzLmV4cGVjdEpTWCgiPCIpLHRoaXMubWF0Y2hKU1goIi8iKSl7dGhpcy5leHBlY3RKU1goIi8iKTt2YXIgdD10aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RKU1goIj4iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuSlNYQ2xvc2luZ0VsZW1lbnQodCkpfXZhciBuPXRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpLHI9dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKSxvPXRoaXMubWF0Y2hKU1goIi8iKTtyZXR1cm4gbyYmdGhpcy5leHBlY3RKU1goIi8iKSx0aGlzLmV4cGVjdEpTWCgiPiIpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5KU1hPcGVuaW5nRWxlbWVudChuLG8scikpfSx0LnByb3RvdHlwZS5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7cmV0dXJuIHRoaXMuY29sbGVjdENvbW1lbnRzKCksdGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleCx0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLmxhc3RNYXJrZXIuY29sdW1uPXRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0LHRoaXMuZmluYWxpemUoZSxuZXcgaS5KU1hFbXB0eUV4cHJlc3Npb24pfSx0LnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt0aGlzLmV4cGVjdEpTWCgieyIpO3ZhciB0O3JldHVybiB0aGlzLm1hdGNoSlNYKCJ9Iik/KHQ9dGhpcy5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpLHRoaXMuZXhwZWN0SlNYKCJ9IikpOih0aGlzLmZpbmlzaEpTWCgpLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksdGhpcy5yZWVudGVySlNYKCkpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKHQpKX0sdC5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXTshdGhpcy5zY2FubmVyLmVvZigpOyl7dmFyIHQ9dGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKSxuPXRoaXMubmV4dEpTWFRleHQoKTtpZihuLnN0YXJ0PG4uZW5kKXt2YXIgcj10aGlzLmdldFRva2VuUmF3KG4pLG89dGhpcy5maW5hbGl6ZSh0LG5ldyBpLkpTWFRleHQobi52YWx1ZSxyKSk7ZS5wdXNoKG8pfWlmKCJ7IiE9PXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSlicmVhazt2YXIgcz10aGlzLnBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO2UucHVzaChzKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGFyc2VDb21wbGV4SlNYRWxlbWVudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107IXRoaXMuc2Nhbm5lci5lb2YoKTspe2UuY2hpbGRyZW49ZS5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENoaWxkcmVuKCkpO3ZhciBuPXRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCksbz10aGlzLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50KCk7aWYoby50eXBlPT09YS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQpe3ZhciBzPW87aWYocy5zZWxmQ2xvc2luZyl7dmFyIGw9dGhpcy5maW5hbGl6ZShuLG5ldyBpLkpTWEVsZW1lbnQocyxbXSxudWxsKSk7ZS5jaGlsZHJlbi5wdXNoKGwpfWVsc2UgdC5wdXNoKGUpLGU9e25vZGU6bixvcGVuaW5nOnMsY2xvc2luZzpudWxsLGNoaWxkcmVuOltdfX1pZihvLnR5cGU9PT1hLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudCl7ZS5jbG9zaW5nPW87dmFyIHU9cihlLm9wZW5pbmcubmFtZSk7aWYodSE9PXIoZS5jbG9zaW5nLm5hbWUpJiZ0aGlzLnRvbGVyYXRlRXJyb3IoIkV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciAlMCIsdSksISh0Lmxlbmd0aD4wKSlicmVhazt2YXIgbD10aGlzLmZpbmFsaXplKGUubm9kZSxuZXcgaS5KU1hFbGVtZW50KGUub3BlbmluZyxlLmNoaWxkcmVuLGUuY2xvc2luZykpO2U9dFt0Lmxlbmd0aC0xXSxlLmNoaWxkcmVuLnB1c2gobCksdC5wb3AoKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnBhcnNlSlNYRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpLHQ9dGhpcy5wYXJzZUpTWE9wZW5pbmdFbGVtZW50KCksbj1bXSxyPW51bGw7aWYoIXQuc2VsZkNsb3Npbmcpe3ZhciBvPXRoaXMucGFyc2VDb21wbGV4SlNYRWxlbWVudCh7bm9kZTplLG9wZW5pbmc6dCxjbG9zaW5nOnIsY2hpbGRyZW46bn0pO249by5jaGlsZHJlbixyPW8uY2xvc2luZ31yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBpLkpTWEVsZW1lbnQodCxuLHIpKX0sdC5wcm90b3R5cGUucGFyc2VKU1hSb290PWZ1bmN0aW9uKCl7dGhpcy5jb25maWcudG9rZW5zJiZ0aGlzLnRva2Vucy5wb3AoKSx0aGlzLnN0YXJ0SlNYKCk7dmFyIGU9dGhpcy5wYXJzZUpTWEVsZW1lbnQoKTtyZXR1cm4gdGhpcy5maW5pc2hKU1goKSxlfSx0LnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb24uY2FsbCh0aGlzKXx8dGhpcy5tYXRjaCgiPCIpfSx0fSh1LlBhcnNlcik7dC5KU1hQYXJzZXI9X30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtOb25Bc2NpaUlkZW50aWZpZXJTdGFydDovW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwLVx1MDhCNFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5Qi1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNcdURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVEQzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURDNjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1REQwMy1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdUREREFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REU4MC1cdURFODZcdURFODhcdURFOEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURFQThcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVEODZGLVx1RDg3Ml1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0vLE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6L1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4QjRcdTA4RTMtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OC1cdTBDNUFcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAxLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ1Ri1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxQ0Y4XHUxQ0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE4RkRcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjVcdUFCNzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJGXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUwMC1cdURFMDNcdURFMDVcdURFMDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFMzgtXHVERTNBXHVERTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURDRDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdUREQ0EtXHVERENDXHVEREQwLVx1REREQVx1REREQ1x1REUwMC1cdURFMTFcdURFMTMtXHVERTM3XHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAwLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1REY1MFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdUREQzBcdURERDgtXHVEREREXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUI3XHVERUMwLVx1REVDOVx1REYwMC1cdURGMTlcdURGMUQtXHVERjJCXHVERjMwLVx1REYzOV18XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVEODBDXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1REVGNFx1REYwMC1cdURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1cdURENjlcdURENkQtXHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFEXHVERTQyLVx1REU0NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4MzZbXHVERTAwLVx1REUzNlx1REUzQi1cdURFNkNcdURFNzVcdURFODRcdURFOUItXHVERTlGXHVERUExLVx1REVBRl18XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdL307dC5DaGFyYWN0ZXI9e2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8NjU1MzY/U3RyaW5nLmZyb21DaGFyQ29kZShlKTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4xMCkpK1N0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKGUtNjU1MzYmMTAyMykpfSxpc1doaXRlU3BhY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDExPT09ZXx8MTI9PT1lfHwxNjA9PT1lfHxlPj01NzYwJiZbNTc2MCw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIzOSw4Mjg3LDEyMjg4LDY1Mjc5XS5pbmRleE9mKGUpPj0wfSxpc0xpbmVUZXJtaW5hdG9yOmZ1bmN0aW9uKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfSxpc0lkZW50aWZpZXJTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gMzY9PT1lfHw5NT09PWV8fGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMnx8OTI9PT1lfHxlPj0xMjgmJm4uTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdCh0LkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGUpKX0saXNJZGVudGlmaWVyUGFydDpmdW5jdGlvbihlKXtyZXR1cm4gMzY9PT1lfHw5NT09PWV8fGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMnx8ZT49NDgmJmU8PTU3fHw5Mj09PWV8fGU+PTEyOCYmbi5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QodC5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChlKSl9LGlzRGVjaW1hbERpZ2l0OmZ1bmN0aW9uKGUpe3JldHVybiBlPj00OCYmZTw9NTd9LGlzSGV4RGlnaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfSxpc09jdGFsRGlnaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTQ4JiZlPD01NX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudCx0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWENsb3NpbmdFbGVtZW50PW87dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYRWxlbWVudCx0aGlzLm9wZW5pbmdFbGVtZW50PWUsdGhpcy5jaGlsZHJlbj10LHRoaXMuY2xvc2luZ0VsZW1lbnQ9bn1yZXR1cm4gZX0oKTt0LkpTWEVsZW1lbnQ9czt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYRW1wdHlFeHByZXNzaW9ufXJldHVybiBlfSgpO3QuSlNYRW1wdHlFeHByZXNzaW9uPWk7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hFeHByZXNzaW9uQ29udGFpbmVyLHRoaXMuZXhwcmVzc2lvbj1lfXJldHVybiBlfSgpO3QuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcj1hO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYSWRlbnRpZmllcix0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWElkZW50aWZpZXI9bDt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYTWVtYmVyRXhwcmVzc2lvbix0aGlzLm9iamVjdD1lLHRoaXMucHJvcGVydHk9dH1yZXR1cm4gZX0oKTt0LkpTWE1lbWJlckV4cHJlc3Npb249dTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYQXR0cmlidXRlLHRoaXMubmFtZT1lLHRoaXMudmFsdWU9dH1yZXR1cm4gZX0oKTt0LkpTWEF0dHJpYnV0ZT1jO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZSx0aGlzLm5hbWVzcGFjZT1lLHRoaXMubmFtZT10fXJldHVybiBlfSgpO3QuSlNYTmFtZXNwYWNlZE5hbWU9ZDt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudCx0aGlzLm5hbWU9ZSx0aGlzLnNlbGZDbG9zaW5nPXQsdGhpcy5hdHRyaWJ1dGVzPW59cmV0dXJuIGV9KCk7dC5KU1hPcGVuaW5nRWxlbWVudD1fO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5KU1hTeW50YXguSlNYU3ByZWFkQXR0cmlidXRlLHRoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LkpTWFNwcmVhZEF0dHJpYnV0ZT1wO3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLkpTWFN5bnRheC5KU1hUZXh0LHRoaXMudmFsdWU9ZSx0aGlzLnJhdz10fXJldHVybiBlfSgpO3QuSlNYVGV4dD1mfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KU1hTeW50YXg9e0pTWEF0dHJpYnV0ZToiSlNYQXR0cmlidXRlIixKU1hDbG9zaW5nRWxlbWVudDoiSlNYQ2xvc2luZ0VsZW1lbnQiLEpTWEVsZW1lbnQ6IkpTWEVsZW1lbnQiLEpTWEVtcHR5RXhwcmVzc2lvbjoiSlNYRW1wdHlFeHByZXNzaW9uIixKU1hFeHByZXNzaW9uQ29udGFpbmVyOiJKU1hFeHByZXNzaW9uQ29udGFpbmVyIixKU1hJZGVudGlmaWVyOiJKU1hJZGVudGlmaWVyIixKU1hNZW1iZXJFeHByZXNzaW9uOiJKU1hNZW1iZXJFeHByZXNzaW9uIixKU1hOYW1lc3BhY2VkTmFtZToiSlNYTmFtZXNwYWNlZE5hbWUiLEpTWE9wZW5pbmdFbGVtZW50OiJKU1hPcGVuaW5nRWxlbWVudCIsSlNYU3ByZWFkQXR0cmlidXRlOiJKU1hTcHJlYWRBdHRyaWJ1dGUiLEpTWFRleHQ6IkpTWFRleHQifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQXJyYXlFeHByZXNzaW9uLHRoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5RXhwcmVzc2lvbj1vO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQXJyYXlQYXR0ZXJuLHRoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5UGF0dGVybj1zO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9bnVsbCx0aGlzLnBhcmFtcz1lLHRoaXMuYm9keT10LHRoaXMuZ2VuZXJhdG9yPSExLHRoaXMuZXhwcmVzc2lvbj1uLHRoaXMuYXN5bmM9ITF9cmV0dXJuIGV9KCk7dC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbj1pO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uLHRoaXMub3BlcmF0b3I9ZSx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PW59cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50RXhwcmVzc2lvbj1hO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybix0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXR9cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50UGF0dGVybj1sO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9bnVsbCx0aGlzLnBhcmFtcz1lLHRoaXMuYm9keT10LHRoaXMuZ2VuZXJhdG9yPSExLHRoaXMuZXhwcmVzc2lvbj1uLHRoaXMuYXN5bmM9ITB9cmV0dXJuIGV9KCk7dC5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uPXU7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249ITEsdGhpcy5hc3luYz0hMH1yZXR1cm4gZX0oKTt0LkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbj1jO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249ITEsdGhpcy5hc3luYz0hMH1yZXR1cm4gZX0oKTt0LkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uPWQ7dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5Bd2FpdEV4cHJlc3Npb24sdGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuQXdhaXRFeHByZXNzaW9uPV87dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz0ifHwiPT09ZXx8IiYmIj09PWU7dGhpcy50eXBlPW8/ci5TeW50YXguTG9naWNhbEV4cHJlc3Npb246ci5TeW50YXguQmluYXJ5RXhwcmVzc2lvbix0aGlzLm9wZXJhdG9yPWUsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1ufXJldHVybiBlfSgpO3QuQmluYXJ5RXhwcmVzc2lvbj1wO3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQmxvY2tTdGF0ZW1lbnQsdGhpcy5ib2R5PWV9cmV0dXJuIGV9KCk7dC5CbG9ja1N0YXRlbWVudD1mO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguQnJlYWtTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lfXJldHVybiBlfSgpO3QuQnJlYWtTdGF0ZW1lbnQ9bTt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguQ2FsbEV4cHJlc3Npb24sdGhpcy5jYWxsZWU9ZSx0aGlzLmFyZ3VtZW50cz10fXJldHVybiBlfSgpO3QuQ2FsbEV4cHJlc3Npb249aDt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguQ2F0Y2hDbGF1c2UsdGhpcy5wYXJhbT1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuQ2F0Y2hDbGF1c2U9Zzt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzQm9keSx0aGlzLmJvZHk9ZX1yZXR1cm4gZX0oKTt0LkNsYXNzQm9keT1iO3ZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzRGVjbGFyYXRpb24sdGhpcy5pZD1lLHRoaXMuc3VwZXJDbGFzcz10LHRoaXMuYm9keT1ufXJldHVybiBlfSgpO3QuQ2xhc3NEZWNsYXJhdGlvbj1FO3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkNsYXNzRXhwcmVzc2lvbix0aGlzLmlkPWUsdGhpcy5zdXBlckNsYXNzPXQsdGhpcy5ib2R5PW59cmV0dXJuIGV9KCk7dC5DbGFzc0V4cHJlc3Npb249eTt2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguTWVtYmVyRXhwcmVzc2lvbix0aGlzLmNvbXB1dGVkPSEwLHRoaXMub2JqZWN0PWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uPXY7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uLHRoaXMudGVzdD1lLHRoaXMuY29uc2VxdWVudD10LHRoaXMuYWx0ZXJuYXRlPW59cmV0dXJuIGV9KCk7dC5Db25kaXRpb25hbEV4cHJlc3Npb249VDt2YXIgQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LHRoaXMubGFiZWw9ZX1yZXR1cm4gZX0oKTt0LkNvbnRpbnVlU3RhdGVtZW50PUE7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50fXJldHVybiBlfSgpO3QuRGVidWdnZXJTdGF0ZW1lbnQ9Qzt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCx0aGlzLmV4cHJlc3Npb249ZSx0aGlzLmRpcmVjdGl2ZT10fXJldHVybiBlfSgpO3QuRGlyZWN0aXZlPU87dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsdGhpcy5ib2R5PWUsdGhpcy50ZXN0PXR9cmV0dXJuIGV9KCk7dC5Eb1doaWxlU3RhdGVtZW50PVM7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LkVtcHR5U3RhdGVtZW50fXJldHVybiBlfSgpO3QuRW1wdHlTdGF0ZW1lbnQ9Ujt2YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydEFsbERlY2xhcmF0aW9uLHRoaXMuc291cmNlPWV9cmV0dXJuIGV9KCk7dC5FeHBvcnRBbGxEZWNsYXJhdGlvbj1qO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uLHRoaXMuZGVjbGFyYXRpb249ZX1yZXR1cm4gZX0oKTt0LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbj14O3ZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sdGhpcy5kZWNsYXJhdGlvbj1lLHRoaXMuc3BlY2lmaWVycz10LHRoaXMuc291cmNlPW59cmV0dXJuIGV9KCk7dC5FeHBvcnROYW1lZERlY2xhcmF0aW9uPUw7dmFyIEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkV4cG9ydFNwZWNpZmllcix0aGlzLmV4cG9ydGVkPXQsdGhpcy5sb2NhbD1lfXJldHVybiBlfSgpO3QuRXhwb3J0U3BlY2lmaWVyPUQ7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50LHRoaXMuZXhwcmVzc2lvbj1lfXJldHVybiBlfSgpO3QuRXhwcmVzc2lvblN0YXRlbWVudD13O3ZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZvckluU3RhdGVtZW50LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9dCx0aGlzLmJvZHk9bix0aGlzLmVhY2g9ITF9cmV0dXJuIGV9KCk7dC5Gb3JJblN0YXRlbWVudD1NO3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50eXBlPXIuU3ludGF4LkZvck9mU3RhdGVtZW50LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9dCx0aGlzLmJvZHk9bn1yZXR1cm4gZX0oKTt0LkZvck9mU3RhdGVtZW50PWs7dmFyIEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8pe3RoaXMudHlwZT1yLlN5bnRheC5Gb3JTdGF0ZW1lbnQsdGhpcy5pbml0PWUsdGhpcy50ZXN0PXQsdGhpcy51cGRhdGU9bix0aGlzLmJvZHk9b31yZXR1cm4gZX0oKTt0LkZvclN0YXRlbWVudD1JO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbix0aGlzLmlkPWUsdGhpcy5wYXJhbXM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj1vLHRoaXMuZXhwcmVzc2lvbj0hMSx0aGlzLmFzeW5jPSExfXJldHVybiBlfSgpO3QuRnVuY3Rpb25EZWNsYXJhdGlvbj1QO3ZhciBOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvKXt0aGlzLnR5cGU9ci5TeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9ZSx0aGlzLnBhcmFtcz10LHRoaXMuYm9keT1uLHRoaXMuZ2VuZXJhdG9yPW8sdGhpcy5leHByZXNzaW9uPSExLHRoaXMuYXN5bmM9ITF9cmV0dXJuIGV9KCk7dC5GdW5jdGlvbkV4cHJlc3Npb249Tjt2YXIgSD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LklkZW50aWZpZXIsdGhpcy5uYW1lPWV9cmV0dXJuIGV9KCk7dC5JZGVudGlmaWVyPUg7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguSWZTdGF0ZW1lbnQsdGhpcy50ZXN0PWUsdGhpcy5jb25zZXF1ZW50PXQsdGhpcy5hbHRlcm5hdGU9bn1yZXR1cm4gZX0oKTt0LklmU3RhdGVtZW50PUY7dmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkltcG9ydERlY2xhcmF0aW9uLHRoaXMuc3BlY2lmaWVycz1lLHRoaXMuc291cmNlPXR9cmV0dXJuIGV9KCk7dC5JbXBvcnREZWNsYXJhdGlvbj1CO3ZhciBVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguSW1wb3J0RGVmYXVsdFNwZWNpZmllcix0aGlzLmxvY2FsPWV9cmV0dXJuIGV9KCk7dC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyPVU7dmFyIEc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsdGhpcy5sb2NhbD1lfXJldHVybiBlfSgpO3QuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkltcG9ydFNwZWNpZmllcix0aGlzLmxvY2FsPWUsdGhpcy5pbXBvcnRlZD10fXJldHVybiBlfSgpO3QuSW1wb3J0U3BlY2lmaWVyPXo7dmFyIFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuTGFiZWxlZFN0YXRlbWVudD1WO3ZhciBXPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5MaXRlcmFsLHRoaXMudmFsdWU9ZSx0aGlzLnJhdz10fXJldHVybiBlfSgpO3QuTGl0ZXJhbD1XO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5NZXRhUHJvcGVydHksdGhpcy5tZXRhPWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuTWV0YVByb3BlcnR5PVk7dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8scyl7dGhpcy50eXBlPXIuU3ludGF4Lk1ldGhvZERlZmluaXRpb24sdGhpcy5rZXk9ZSx0aGlzLmNvbXB1dGVkPXQsdGhpcy52YWx1ZT1uLHRoaXMua2luZD1vLHRoaXMuc3RhdGljPXN9cmV0dXJuIGV9KCk7dC5NZXRob2REZWZpbml0aW9uPXE7dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5Qcm9ncmFtLHRoaXMuYm9keT1lLHRoaXMuc291cmNlVHlwZT0ibW9kdWxlIn1yZXR1cm4gZX0oKTt0Lk1vZHVsZT1LO3ZhciBYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5OZXdFeHByZXNzaW9uLHRoaXMuY2FsbGVlPWUsdGhpcy5hcmd1bWVudHM9dH1yZXR1cm4gZX0oKTt0Lk5ld0V4cHJlc3Npb249WDt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sdGhpcy5wcm9wZXJ0aWVzPWV9cmV0dXJuIGV9KCk7dC5PYmplY3RFeHByZXNzaW9uPSQ7dmFyIFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5PYmplY3RQYXR0ZXJuLHRoaXMucHJvcGVydGllcz1lfXJldHVybiBlfSgpO3QuT2JqZWN0UGF0dGVybj1RO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvLHMsaSl7dGhpcy50eXBlPXIuU3ludGF4LlByb3BlcnR5LHRoaXMua2V5PXQsdGhpcy5jb21wdXRlZD1uLHRoaXMudmFsdWU9byx0aGlzLmtpbmQ9ZSx0aGlzLm1ldGhvZD1zLHRoaXMuc2hvcnRoYW5kPWl9cmV0dXJuIGV9KCk7dC5Qcm9wZXJ0eT1KO3ZhciBaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvKXt0aGlzLnR5cGU9ci5TeW50YXguTGl0ZXJhbCx0aGlzLnZhbHVlPWUsdGhpcy5yYXc9dCx0aGlzLnJlZ2V4PXtwYXR0ZXJuOm4sZmxhZ3M6b319cmV0dXJuIGV9KCk7dC5SZWdleExpdGVyYWw9Wjt2YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5SZXN0RWxlbWVudCx0aGlzLmFyZ3VtZW50PWV9cmV0dXJuIGV9KCk7dC5SZXN0RWxlbWVudD1lZTt2YXIgdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1yLlN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsdGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuUmV0dXJuU3RhdGVtZW50PXRlO3ZhciBuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlByb2dyYW0sdGhpcy5ib2R5PWUsdGhpcy5zb3VyY2VUeXBlPSJzY3JpcHQifXJldHVybiBlfSgpO3QuU2NyaXB0PW5lO3ZhciByZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbix0aGlzLmV4cHJlc3Npb25zPWV9cmV0dXJuIGV9KCk7dC5TZXF1ZW5jZUV4cHJlc3Npb249cmU7dmFyIG9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9ci5TeW50YXguU3ByZWFkRWxlbWVudCx0aGlzLmFyZ3VtZW50PWV9cmV0dXJuIGV9KCk7dC5TcHJlYWRFbGVtZW50PW9lO3ZhciBzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguTWVtYmVyRXhwcmVzc2lvbix0aGlzLmNvbXB1dGVkPSExLHRoaXMub2JqZWN0PWUsdGhpcy5wcm9wZXJ0eT10fXJldHVybiBlfSgpO3QuU3RhdGljTWVtYmVyRXhwcmVzc2lvbj1zZTt2YXIgaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXIuU3ludGF4LlN1cGVyfXJldHVybiBlfSgpO3QuU3VwZXI9aWU7dmFyIGFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5Td2l0Y2hDYXNlLHRoaXMudGVzdD1lLHRoaXMuY29uc2VxdWVudD10fXJldHVybiBlfSgpO3QuU3dpdGNoQ2FzZT1hZTt2YXIgbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlN3aXRjaFN0YXRlbWVudCx0aGlzLmRpc2NyaW1pbmFudD1lLHRoaXMuY2FzZXM9dH1yZXR1cm4gZX0oKTt0LlN3aXRjaFN0YXRlbWVudD1sZTt2YXIgdWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbix0aGlzLnRhZz1lLHRoaXMucXVhc2k9dH1yZXR1cm4gZX0oKTt0LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbj11ZTt2YXIgY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlRlbXBsYXRlRWxlbWVudCx0aGlzLnZhbHVlPWUsdGhpcy50YWlsPXR9cmV0dXJuIGV9KCk7dC5UZW1wbGF0ZUVsZW1lbnQ9Y2U7dmFyIGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5UZW1wbGF0ZUxpdGVyYWwsdGhpcy5xdWFzaXM9ZSx0aGlzLmV4cHJlc3Npb25zPXR9cmV0dXJuIGV9KCk7dC5UZW1wbGF0ZUxpdGVyYWw9ZGU7dmFyIF9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudHlwZT1yLlN5bnRheC5UaGlzRXhwcmVzc2lvbn1yZXR1cm4gZX0oKTt0LlRoaXNFeHByZXNzaW9uPV9lO3ZhciBwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXIuU3ludGF4LlRocm93U3RhdGVtZW50LHRoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LlRocm93U3RhdGVtZW50PXBlO3ZhciBmZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudHlwZT1yLlN5bnRheC5UcnlTdGF0ZW1lbnQsdGhpcy5ibG9jaz1lLHRoaXMuaGFuZGxlcj10LHRoaXMuZmluYWxpemVyPW59cmV0dXJuIGV9KCk7dC5UcnlTdGF0ZW1lbnQ9ZmU7dmFyIG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5VbmFyeUV4cHJlc3Npb24sdGhpcy5vcGVyYXRvcj1lLHRoaXMuYXJndW1lbnQ9dCx0aGlzLnByZWZpeD0hMH1yZXR1cm4gZX0oKTt0LlVuYXJ5RXhwcmVzc2lvbj1tZTt2YXIgaGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnR5cGU9ci5TeW50YXguVXBkYXRlRXhwcmVzc2lvbix0aGlzLm9wZXJhdG9yPWUsdGhpcy5hcmd1bWVudD10LHRoaXMucHJlZml4PW59cmV0dXJuIGV9KCk7dC5VcGRhdGVFeHByZXNzaW9uPWhlO3ZhciBnZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbix0aGlzLmRlY2xhcmF0aW9ucz1lLHRoaXMua2luZD10fXJldHVybiBlfSgpO3QuVmFyaWFibGVEZWNsYXJhdGlvbj1nZTt2YXIgYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcix0aGlzLmlkPWUsdGhpcy5pbml0PXR9cmV0dXJuIGV9KCk7dC5WYXJpYWJsZURlY2xhcmF0b3I9YmU7dmFyIEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1yLlN5bnRheC5XaGlsZVN0YXRlbWVudCx0aGlzLnRlc3Q9ZSx0aGlzLmJvZHk9dH1yZXR1cm4gZX0oKTt0LldoaWxlU3RhdGVtZW50PUVlO3ZhciB5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ci5TeW50YXguV2l0aFN0YXRlbWVudCx0aGlzLm9iamVjdD1lLHRoaXMuYm9keT10fXJldHVybiBlfSgpO3QuV2l0aFN0YXRlbWVudD15ZTt2YXIgdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXIuU3ludGF4LllpZWxkRXhwcmVzc2lvbix0aGlzLmFyZ3VtZW50PWUsdGhpcy5kZWxlZ2F0ZT10fXJldHVybiBlfSgpO3QuWWllbGRFeHByZXNzaW9uPXZlfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLG89bigxMCkscz1uKDExKSxpPW4oNyksYT1uKDEyKSxsPW4oMiksdT1uKDEzKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuY29uZmlnPXtyYW5nZToiYm9vbGVhbiI9PXR5cGVvZiB0LnJhbmdlJiZ0LnJhbmdlLGxvYzoiYm9vbGVhbiI9PXR5cGVvZiB0LmxvYyYmdC5sb2Msc291cmNlOm51bGwsdG9rZW5zOiJib29sZWFuIj09dHlwZW9mIHQudG9rZW5zJiZ0LnRva2Vucyxjb21tZW50OiJib29sZWFuIj09dHlwZW9mIHQuY29tbWVudCYmdC5jb21tZW50LHRvbGVyYW50OiJib29sZWFuIj09dHlwZW9mIHQudG9sZXJhbnQmJnQudG9sZXJhbnR9LHRoaXMuY29uZmlnLmxvYyYmdC5zb3VyY2UmJm51bGwhPT10LnNvdXJjZSYmKHRoaXMuY29uZmlnLnNvdXJjZT1TdHJpbmcodC5zb3VyY2UpKSx0aGlzLmRlbGVnYXRlPW4sdGhpcy5lcnJvckhhbmRsZXI9bmV3IG8uRXJyb3JIYW5kbGVyLHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50PXRoaXMuY29uZmlnLnRvbGVyYW50LHRoaXMuc2Nhbm5lcj1uZXcgYS5TY2FubmVyKGUsdGhpcy5lcnJvckhhbmRsZXIpLHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQ9dGhpcy5jb25maWcuY29tbWVudCx0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZT17IikiOjAsIjsiOjAsIiwiOjAsIj0iOjAsIl0iOjAsInx8IjoxLCImJiI6MiwifCI6MywiXiI6NCwiJiI6NSwiPT0iOjYsIiE9Ijo2LCI9PT0iOjYsIiE9PSI6NiwiPCI6NywiPiI6NywiPD0iOjcsIj49Ijo3LCI8PCI6OCwiPj4iOjgsIj4+PiI6OCwiKyI6OSwiLSI6OSwiKiI6MTEsIi8iOjExLCIlIjoxMX0sdGhpcy5sb29rYWhlYWQ9e3R5cGU6Mix2YWx1ZToiIixsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDowLHN0YXJ0OjAsZW5kOjB9LHRoaXMuaGFzTGluZVRlcm1pbmF0b3I9ITEsdGhpcy5jb250ZXh0PXtpc01vZHVsZTohMSxhd2FpdDohMSxhbGxvd0luOiEwLGFsbG93U3RyaWN0RGlyZWN0aXZlOiEwLGFsbG93WWllbGQ6ITAsZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOm51bGwsaXNBc3NpZ25tZW50VGFyZ2V0OiExLGlzQmluZGluZ0VsZW1lbnQ6ITEsaW5GdW5jdGlvbkJvZHk6ITEsaW5JdGVyYXRpb246ITEsaW5Td2l0Y2g6ITEsbGFiZWxTZXQ6e30sc3RyaWN0OiExfSx0aGlzLnRva2Vucz1bXSx0aGlzLnN0YXJ0TWFya2VyPXtpbmRleDowLGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOjB9LHRoaXMubGFzdE1hcmtlcj17aW5kZXg6MCxsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjowfSx0aGlzLm5leHRUb2tlbigpLHRoaXMubGFzdE1hcmtlcj17aW5kZXg6dGhpcy5zY2FubmVyLmluZGV4LGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fX1yZXR1cm4gZS5wcm90b3R5cGUudGhyb3dFcnJvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscz1lLnJlcGxhY2UoLyUoXGQpL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5hc3NlcnQodDxvLmxlbmd0aCwiTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZSIpLG9bdF19KSxpPXRoaXMubGFzdE1hcmtlci5pbmRleCxhPXRoaXMubGFzdE1hcmtlci5saW5lLGw9dGhpcy5sYXN0TWFya2VyLmNvbHVtbisxO3Rocm93IHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGksYSxsLHMpfSxlLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxzPWUucmVwbGFjZSgvJShcZCkvZyxmdW5jdGlvbihlLHQpe3JldHVybiByLmFzc2VydCh0PG8ubGVuZ3RoLCJNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlIiksb1t0XX0pLGk9dGhpcy5sYXN0TWFya2VyLmluZGV4LGE9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbD10aGlzLmxhc3RNYXJrZXIuY29sdW1uKzE7dGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGVFcnJvcihpLGEsbCxzKX0sZS5wcm90b3R5cGUudW5leHBlY3RlZFRva2VuRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXR8fHMuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuO2lmKGU/KHR8fChyPTI9PT1lLnR5cGU/cy5NZXNzYWdlcy5VbmV4cGVjdGVkRU9TOjM9PT1lLnR5cGU/cy5NZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcjo2PT09ZS50eXBlP3MuTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcjo4PT09ZS50eXBlP3MuTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZzoxMD09PWUudHlwZT9zLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZTpzLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiw0PT09ZS50eXBlJiYodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKGUudmFsdWUpP3I9cy5NZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQ6dGhpcy5jb250ZXh0LnN0cmljdCYmdGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChlLnZhbHVlKSYmKHI9cy5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpKSksbj1lLnZhbHVlKTpuPSJJTExFR0FMIixyPXIucmVwbGFjZSgiJTAiLG4pLGUmJiJudW1iZXIiPT10eXBlb2YgZS5saW5lTnVtYmVyKXt2YXIgbz1lLnN0YXJ0LGk9ZS5saW5lTnVtYmVyLGE9dGhpcy5sYXN0TWFya2VyLmluZGV4LXRoaXMubGFzdE1hcmtlci5jb2x1bW4sbD1lLnN0YXJ0LWErMTtyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IobyxpLGwscil9dmFyIG89dGhpcy5sYXN0TWFya2VyLmluZGV4LGk9dGhpcy5sYXN0TWFya2VyLmxpbmUsbD10aGlzLmxhc3RNYXJrZXIuY29sdW1uKzE7cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKG8saSxsLHIpfSxlLnByb3RvdHlwZS50aHJvd1VuZXhwZWN0ZWRUb2tlbj1mdW5jdGlvbihlLHQpe3Rocm93IHRoaXMudW5leHBlY3RlZFRva2VuRXJyb3IoZSx0KX0sZS5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW49ZnVuY3Rpb24oZSx0KXt0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZSh0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKGUsdCkpfSxlLnByb3RvdHlwZS5jb2xsZWN0Q29tbWVudHM9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbmZpZy5jb21tZW50KXt2YXIgZT10aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7aWYoZS5sZW5ndGg+MCYmdGhpcy5kZWxlZ2F0ZSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XSxyPXZvaWQgMDtyPXt0eXBlOm4ubXVsdGlMaW5lPyJCbG9ja0NvbW1lbnQiOiJMaW5lQ29tbWVudCIsdmFsdWU6dGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShuLnNsaWNlWzBdLG4uc2xpY2VbMV0pfSx0aGlzLmNvbmZpZy5yYW5nZSYmKHIucmFuZ2U9bi5yYW5nZSksdGhpcy5jb25maWcubG9jJiYoci5sb2M9bi5sb2MpO3ZhciBvPXtzdGFydDp7bGluZTpuLmxvYy5zdGFydC5saW5lLGNvbHVtbjpuLmxvYy5zdGFydC5jb2x1bW4sb2Zmc2V0Om4ucmFuZ2VbMF19LGVuZDp7bGluZTpuLmxvYy5lbmQubGluZSxjb2x1bW46bi5sb2MuZW5kLmNvbHVtbixvZmZzZXQ6bi5yYW5nZVsxXX19O3RoaXMuZGVsZWdhdGUocixvKX19ZWxzZSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCl9LGUucHJvdG90eXBlLmdldFRva2VuUmF3PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKGUuc3RhcnQsZS5lbmQpfSxlLnByb3RvdHlwZS5jb252ZXJ0VG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQ9e3R5cGU6dS5Ub2tlbk5hbWVbZS50eXBlXSx2YWx1ZTp0aGlzLmdldFRva2VuUmF3KGUpfTtpZih0aGlzLmNvbmZpZy5yYW5nZSYmKHQucmFuZ2U9W2Uuc3RhcnQsZS5lbmRdKSx0aGlzLmNvbmZpZy5sb2MmJih0LmxvYz17c3RhcnQ6e2xpbmU6dGhpcy5zdGFydE1hcmtlci5saW5lLGNvbHVtbjp0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbn0sZW5kOntsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydH19KSw5PT09ZS50eXBlKXt2YXIgbj1lLnBhdHRlcm4scj1lLmZsYWdzO3QucmVnZXg9e3BhdHRlcm46bixmbGFnczpyfX1yZXR1cm4gdH0sZS5wcm90b3R5cGUubmV4dFRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQ7dGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleCx0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLmxhc3RNYXJrZXIuY29sdW1uPXRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0LHRoaXMuY29sbGVjdENvbW1lbnRzKCksdGhpcy5zY2FubmVyLmluZGV4IT09dGhpcy5zdGFydE1hcmtlci5pbmRleCYmKHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4LHRoaXMuc3RhcnRNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcix0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydCk7dmFyIHQ9dGhpcy5zY2FubmVyLmxleCgpO3JldHVybiB0aGlzLmhhc0xpbmVUZXJtaW5hdG9yPWUubGluZU51bWJlciE9PXQubGluZU51bWJlcix0JiZ0aGlzLmNvbnRleHQuc3RyaWN0JiYzPT09dC50eXBlJiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHQudmFsdWUpJiYodC50eXBlPTQpLHRoaXMubG9va2FoZWFkPXQsdGhpcy5jb25maWcudG9rZW5zJiYyIT09dC50eXBlJiZ0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHQpKSxlfSxlLnByb3RvdHlwZS5uZXh0UmVnZXhUb2tlbj1mdW5jdGlvbigpe3RoaXMuY29sbGVjdENvbW1lbnRzKCk7dmFyIGU9dGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTtyZXR1cm4gdGhpcy5jb25maWcudG9rZW5zJiYodGhpcy50b2tlbnMucG9wKCksdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbihlKSkpLHRoaXMubG9va2FoZWFkPWUsdGhpcy5uZXh0VG9rZW4oKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVOb2RlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsbGluZTp0aGlzLnN0YXJ0TWFya2VyLmxpbmUsY29sdW1uOnRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufX0sZS5wcm90b3R5cGUuc3RhcnROb2RlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG49ZS5zdGFydC1lLmxpbmVTdGFydCxyPWUubGluZU51bWJlcjtyZXR1cm4gbjwwJiYobis9dCxyLS0pLHtpbmRleDplLnN0YXJ0LGxpbmU6cixjb2x1bW46bn19LGUucHJvdG90eXBlLmZpbmFsaXplPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5jb25maWcucmFuZ2UmJih0LnJhbmdlPVtlLmluZGV4LHRoaXMubGFzdE1hcmtlci5pbmRleF0pLHRoaXMuY29uZmlnLmxvYyYmKHQubG9jPXtzdGFydDp7bGluZTplLmxpbmUsY29sdW1uOmUuY29sdW1ufSxlbmQ6e2xpbmU6dGhpcy5sYXN0TWFya2VyLmxpbmUsY29sdW1uOnRoaXMubGFzdE1hcmtlci5jb2x1bW59fSx0aGlzLmNvbmZpZy5zb3VyY2UmJih0LmxvYy5zb3VyY2U9dGhpcy5jb25maWcuc291cmNlKSksdGhpcy5kZWxlZ2F0ZSl7dmFyIG49e3N0YXJ0OntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW4sb2Zmc2V0OmUuaW5kZXh9LGVuZDp7bGluZTp0aGlzLmxhc3RNYXJrZXIubGluZSxjb2x1bW46dGhpcy5sYXN0TWFya2VyLmNvbHVtbixvZmZzZXQ6dGhpcy5sYXN0TWFya2VyLmluZGV4fX07dGhpcy5kZWxlZ2F0ZSh0LG4pfXJldHVybiB0fSxlLnByb3RvdHlwZS5leHBlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTs3PT09dC50eXBlJiZ0LnZhbHVlPT09ZXx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0KX0sZS5wcm90b3R5cGUuZXhwZWN0Q29tbWFTZXBhcmF0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbmZpZy50b2xlcmFudCl7dmFyIGU9dGhpcy5sb29rYWhlYWQ7Nz09PWUudHlwZSYmIiwiPT09ZS52YWx1ZT90aGlzLm5leHRUb2tlbigpOjc9PT1lLnR5cGUmJiI7Ij09PWUudmFsdWU/KHRoaXMubmV4dFRva2VuKCksdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihlKSk6dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihlLHMuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuKX1lbHNlIHRoaXMuZXhwZWN0KCIsIil9LGUucHJvdG90eXBlLmV4cGVjdEtleXdvcmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTs0PT09dC50eXBlJiZ0LnZhbHVlPT09ZXx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0KX0sZS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIDc9PT10aGlzLmxvb2thaGVhZC50eXBlJiZ0aGlzLmxvb2thaGVhZC52YWx1ZT09PWV9LGUucHJvdG90eXBlLm1hdGNoS2V5d29yZD1mdW5jdGlvbihlKXtyZXR1cm4gND09PXRoaXMubG9va2FoZWFkLnR5cGUmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ZX0sZS5wcm90b3R5cGUubWF0Y2hDb250ZXh0dWFsS2V5d29yZD1mdW5jdGlvbihlKXtyZXR1cm4gMz09PXRoaXMubG9va2FoZWFkLnR5cGUmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ZX0sZS5wcm90b3R5cGUubWF0Y2hBc3NpZ249ZnVuY3Rpb24oKXtpZig3IT09dGhpcy5sb29rYWhlYWQudHlwZSlyZXR1cm4hMTt2YXIgZT10aGlzLmxvb2thaGVhZC52YWx1ZTtyZXR1cm4iPSI9PT1lfHwiKj0iPT09ZXx8IioqPSI9PT1lfHwiLz0iPT09ZXx8IiU9Ij09PWV8fCIrPSI9PT1lfHwiLT0iPT09ZXx8Ijw8PSI9PT1lfHwiPj49Ij09PWV8fCI+Pj49Ij09PWV8fCImPSI9PT1lfHwiXj0iPT09ZXx8Inw9Ij09PWV9LGUucHJvdG90eXBlLmlzb2xhdGVDb3ZlckdyYW1tYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQsbj10aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0LHI9dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMCx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbDt2YXIgbz1lLmNhbGwodGhpcyk7cmV0dXJuIG51bGwhPT10aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PXQsdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1uLHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9cixvfSxlLnByb3RvdHlwZS5pbmhlcml0Q292ZXJHcmFtbWFyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50LG49dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCxyPXRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITAsdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMCx0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPW51bGw7dmFyIG89ZS5jYWxsKHRoaXMpO3JldHVybiB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD10aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCYmdCx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQmJm4sdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1yfHx0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLG99LGUucHJvdG90eXBlLmNvbnN1bWVTZW1pY29sb249ZnVuY3Rpb24oKXt0aGlzLm1hdGNoKCI7Iik/dGhpcy5uZXh0VG9rZW4oKTp0aGlzLmhhc0xpbmVUZXJtaW5hdG9yfHwoMj09PXRoaXMubG9va2FoZWFkLnR5cGV8fHRoaXMubWF0Y2goIn0iKXx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksdGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsdGhpcy5sYXN0TWFya2VyLmxpbmU9dGhpcy5zdGFydE1hcmtlci5saW5lLHRoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zdGFydE1hcmtlci5jb2x1bW4pfSxlLnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dGhpcy5jcmVhdGVOb2RlKCk7c3dpdGNoKHRoaXMubG9va2FoZWFkLnR5cGUpe2Nhc2UgMzoodGhpcy5jb250ZXh0LmlzTW9kdWxlfHx0aGlzLmNvbnRleHQuYXdhaXQpJiYiYXdhaXQiPT09dGhpcy5sb29rYWhlYWQudmFsdWUmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLGU9dGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKT90aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk6dGhpcy5maW5hbGl6ZShyLG5ldyBpLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkpO2JyZWFrO2Nhc2UgNjpjYXNlIDg6dGhpcy5jb250ZXh0LnN0cmljdCYmdGhpcy5sb29rYWhlYWQub2N0YWwmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQscy5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdD10aGlzLm5leHRUb2tlbigpLG49dGhpcy5nZXRUb2tlblJhdyh0KSxlPXRoaXMuZmluYWxpemUocixuZXcgaS5MaXRlcmFsKHQudmFsdWUsbikpO2JyZWFrO2Nhc2UgMTp0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHQ9dGhpcy5uZXh0VG9rZW4oKSxuPXRoaXMuZ2V0VG9rZW5SYXcodCksZT10aGlzLmZpbmFsaXplKHIsbmV3IGkuTGl0ZXJhbCgidHJ1ZSI9PT10LnZhbHVlLG4pKTticmVhaztjYXNlIDU6dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0PXRoaXMubmV4dFRva2VuKCksbj10aGlzLmdldFRva2VuUmF3KHQpLGU9dGhpcy5maW5hbGl6ZShyLG5ldyBpLkxpdGVyYWwobnVsbCxuKSk7YnJlYWs7Y2FzZSAxMDplPXRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTticmVhaztjYXNlIDc6c3dpdGNoKHRoaXMubG9va2FoZWFkLnZhbHVlKXtjYXNlIigiOnRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLGU9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VHcm91cEV4cHJlc3Npb24pO2JyZWFrO2Nhc2UiWyI6ZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIpO2JyZWFrO2Nhc2UieyI6ZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKTticmVhaztjYXNlIi8iOmNhc2UiLz0iOnRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5zY2FubmVyLmluZGV4PXRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsdD10aGlzLm5leHRSZWdleFRva2VuKCksbj10aGlzLmdldFRva2VuUmF3KHQpLGU9dGhpcy5maW5hbGl6ZShyLG5ldyBpLlJlZ2V4TGl0ZXJhbCh0LnJlZ2V4LG4sdC5wYXR0ZXJuLHQuZmxhZ3MpKTticmVhaztkZWZhdWx0OmU9dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKX1icmVhaztjYXNlIDQ6IXRoaXMuY29udGV4dC5zdHJpY3QmJnRoaXMuY29udGV4dC5hbGxvd1lpZWxkJiZ0aGlzLm1hdGNoS2V5d29yZCgieWllbGQiKT9lPXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOiF0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLm1hdGNoS2V5d29yZCgibGV0Iik/ZT10aGlzLmZpbmFsaXplKHIsbmV3IGkuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk6KHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5tYXRjaEtleXdvcmQoImZ1bmN0aW9uIik/ZT10aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk6dGhpcy5tYXRjaEtleXdvcmQoInRoaXMiKT8odGhpcy5uZXh0VG9rZW4oKSxlPXRoaXMuZmluYWxpemUocixuZXcgaS5UaGlzRXhwcmVzc2lvbikpOmU9dGhpcy5tYXRjaEtleXdvcmQoImNsYXNzIik/dGhpcy5wYXJzZUNsYXNzRXhwcmVzc2lvbigpOnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSkpO2JyZWFrO2RlZmF1bHQ6ZT10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfXJldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZVNwcmVhZEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgiLi4uIik7dmFyIHQ9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgaS5TcHJlYWRFbGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VBcnJheUluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD1bXTtmb3IodGhpcy5leHBlY3QoIlsiKTshdGhpcy5tYXRjaCgiXSIpOylpZih0aGlzLm1hdGNoKCIsIikpdGhpcy5uZXh0VG9rZW4oKSx0LnB1c2gobnVsbCk7ZWxzZSBpZih0aGlzLm1hdGNoKCIuLi4iKSl7dmFyIG49dGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKTt0aGlzLm1hdGNoKCJdIil8fCh0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHRoaXMuZXhwZWN0KCIsIikpLHQucHVzaChuKX1lbHNlIHQucHVzaCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSksdGhpcy5tYXRjaCgiXSIpfHx0aGlzLmV4cGVjdCgiLCIpO3JldHVybiB0aGlzLmV4cGVjdCgiXSIpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5BcnJheUV4cHJlc3Npb24odCkpfSxlLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kPWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITE7dmFyIHQ9dGhpcy5jb250ZXh0LnN0cmljdCxuPXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9ZS5zaW1wbGU7dmFyIHI9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTtyZXR1cm4gdGhpcy5jb250ZXh0LnN0cmljdCYmZS5maXJzdFJlc3RyaWN0ZWQmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZS5maXJzdFJlc3RyaWN0ZWQsZS5tZXNzYWdlKSx0aGlzLmNvbnRleHQuc3RyaWN0JiZlLnN0cmljdGVkJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUuc3RyaWN0ZWQsZS5tZXNzYWdlKSx0aGlzLmNvbnRleHQuc3RyaWN0PXQsdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPW4scn0sZS5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMDt2YXIgbj10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpLHI9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKG4pO3JldHVybiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10LHRoaXMuZmluYWxpemUoZSxuZXcgaS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCxuLnBhcmFtcyxyLCExKSl9LGUucHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZCxuPXRoaXMuY29udGV4dC5hd2FpdDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMSx0aGlzLmNvbnRleHQuYXdhaXQ9ITA7dmFyIHI9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKSxvPXRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChyKTtyZXR1cm4gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9dCx0aGlzLmNvbnRleHQuYXdhaXQ9bix0aGlzLmZpbmFsaXplKGUsbmV3IGkuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24obnVsbCxyLnBhcmFtcyxvKSl9LGUucHJvdG90eXBlLnBhcnNlT2JqZWN0UHJvcGVydHlLZXk9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5uZXh0VG9rZW4oKTtzd2l0Y2gobi50eXBlKXtjYXNlIDg6Y2FzZSA2OnRoaXMuY29udGV4dC5zdHJpY3QmJm4ub2N0YWwmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obixzLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7dmFyIHI9dGhpcy5nZXRUb2tlblJhdyhuKTtlPXRoaXMuZmluYWxpemUodCxuZXcgaS5MaXRlcmFsKG4udmFsdWUscikpO2JyZWFrO2Nhc2UgMzpjYXNlIDE6Y2FzZSA1OmNhc2UgNDplPXRoaXMuZmluYWxpemUodCxuZXcgaS5JZGVudGlmaWVyKG4udmFsdWUpKTticmVhaztjYXNlIDc6IlsiPT09bi52YWx1ZT8oZT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSx0aGlzLmV4cGVjdCgiXSIpKTplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obik7YnJlYWs7ZGVmYXVsdDplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obil9cmV0dXJuIGV9LGUucHJvdG90eXBlLmlzUHJvcGVydHlLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50eXBlPT09bC5TeW50YXguSWRlbnRpZmllciYmZS5uYW1lPT09dHx8ZS50eXBlPT09bC5TeW50YXguTGl0ZXJhbCYmZS52YWx1ZT09PXR9LGUucHJvdG90eXBlLnBhcnNlT2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmNyZWF0ZU5vZGUoKSxyPXRoaXMubG9va2FoZWFkLG89bnVsbCxhPW51bGwsbD0hMSx1PSExLGM9ITEsZD0hMTtpZigzPT09ci50eXBlKXt2YXIgXz1yLnZhbHVlO3RoaXMubmV4dFRva2VuKCksbD10aGlzLm1hdGNoKCJbIiksZD0hKHRoaXMuaGFzTGluZVRlcm1pbmF0b3J8fCJhc3luYyIhPT1ffHx0aGlzLm1hdGNoKCI6Iil8fHRoaXMubWF0Y2goIigiKXx8dGhpcy5tYXRjaCgiKiIpfHx0aGlzLm1hdGNoKCIsIikpLG89ZD90aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTp0aGlzLmZpbmFsaXplKG4sbmV3IGkuSWRlbnRpZmllcihfKSl9ZWxzZSB0aGlzLm1hdGNoKCIqIik/dGhpcy5uZXh0VG9rZW4oKToobD10aGlzLm1hdGNoKCJbIiksbz10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSk7dmFyIHA9dGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO2lmKDM9PT1yLnR5cGUmJiFkJiYiZ2V0Ij09PXIudmFsdWUmJnApdD0iZ2V0IixsPXRoaXMubWF0Y2goIlsiKSxvPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExLGE9dGhpcy5wYXJzZUdldHRlck1ldGhvZCgpO2Vsc2UgaWYoMz09PXIudHlwZSYmIWQmJiJzZXQiPT09ci52YWx1ZSYmcCl0PSJzZXQiLGw9dGhpcy5tYXRjaCgiWyIpLG89dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCksYT10aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7ZWxzZSBpZig3PT09ci50eXBlJiYiKiI9PT1yLnZhbHVlJiZwKXQ9ImluaXQiLGw9dGhpcy5tYXRjaCgiWyIpLG89dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCksYT10aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCksdT0hMDtlbHNlIGlmKG98fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLHQ9ImluaXQiLHRoaXMubWF0Y2goIjoiKSYmIWQpIWwmJnRoaXMuaXNQcm9wZXJ0eUtleShvLCJfX3Byb3RvX18iKSYmKGUudmFsdWUmJnRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvUHJvcGVydHkpLGUudmFsdWU9ITApLHRoaXMubmV4dFRva2VuKCksYT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtlbHNlIGlmKHRoaXMubWF0Y2goIigiKSlhPWQ/dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigpOnRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksdT0hMDtlbHNlIGlmKDM9PT1yLnR5cGUpe3ZhciBfPXRoaXMuZmluYWxpemUobixuZXcgaS5JZGVudGlmaWVyKHIudmFsdWUpKTtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9dGhpcy5sb29rYWhlYWQsdGhpcy5uZXh0VG9rZW4oKSxjPSEwO3ZhciBmPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO2E9dGhpcy5maW5hbGl6ZShuLG5ldyBpLkFzc2lnbm1lbnRQYXR0ZXJuKF8sZikpfWVsc2UgYz0hMCxhPV99ZWxzZSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO3JldHVybiB0aGlzLmZpbmFsaXplKG4sbmV3IGkuUHJvcGVydHkodCxvLGwsYSx1LGMpKX0sZS5wcm90b3R5cGUucGFyc2VPYmplY3RJbml0aWFsaXplcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCJ7Iik7Zm9yKHZhciB0PVtdLG49e3ZhbHVlOiExfTshdGhpcy5tYXRjaCgifSIpOyl0LnB1c2godGhpcy5wYXJzZU9iamVjdFByb3BlcnR5KG4pKSx0aGlzLm1hdGNoKCJ9Iil8fHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuT2JqZWN0RXhwcmVzc2lvbih0KSl9LGUucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVIZWFkPWZ1bmN0aW9uKCl7ci5hc3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwiVGVtcGxhdGUgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSB0ZW1wbGF0ZSBoZWFkIik7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLm5leHRUb2tlbigpLG49dC52YWx1ZSxvPXQuY29va2VkO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGkuVGVtcGxhdGVFbGVtZW50KHtyYXc6bixjb29rZWQ6b30sdC50YWlsKSl9LGUucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKCl7MTAhPT10aGlzLmxvb2thaGVhZC50eXBlJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLm5leHRUb2tlbigpLG49dC52YWx1ZSxyPXQuY29va2VkO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGkuVGVtcGxhdGVFbGVtZW50KHtyYXc6bixjb29rZWQ6cn0sdC50YWlsKSl9LGUucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD1bXSxuPVtdLHI9dGhpcy5wYXJzZVRlbXBsYXRlSGVhZCgpO2ZvcihuLnB1c2gocik7IXIudGFpbDspdC5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpLHI9dGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpLG4ucHVzaChyKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBpLlRlbXBsYXRlTGl0ZXJhbChuLHQpKX0sZS5wcm90b3R5cGUucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgbC5TeW50YXguSWRlbnRpZmllcjpjYXNlIGwuU3ludGF4Lk1lbWJlckV4cHJlc3Npb246Y2FzZSBsLlN5bnRheC5SZXN0RWxlbWVudDpjYXNlIGwuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOmJyZWFrO2Nhc2UgbC5TeW50YXguU3ByZWFkRWxlbWVudDplLnR5cGU9bC5TeW50YXguUmVzdEVsZW1lbnQsdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZS5hcmd1bWVudCk7YnJlYWs7Y2FzZSBsLlN5bnRheC5BcnJheUV4cHJlc3Npb246ZS50eXBlPWwuU3ludGF4LkFycmF5UGF0dGVybjtmb3IodmFyIHQ9MDt0PGUuZWxlbWVudHMubGVuZ3RoO3QrKyludWxsIT09ZS5lbGVtZW50c1t0XSYmdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZS5lbGVtZW50c1t0XSk7YnJlYWs7Y2FzZSBsLlN5bnRheC5PYmplY3RFeHByZXNzaW9uOmUudHlwZT1sLlN5bnRheC5PYmplY3RQYXR0ZXJuO2Zvcih2YXIgdD0wO3Q8ZS5wcm9wZXJ0aWVzLmxlbmd0aDt0KyspdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZS5wcm9wZXJ0aWVzW3RdLnZhbHVlKTticmVhaztjYXNlIGwuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOmUudHlwZT1sLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybixkZWxldGUgZS5vcGVyYXRvcix0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihlLmxlZnQpfX0sZS5wcm90b3R5cGUucGFyc2VHcm91cEV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmV4cGVjdCgiKCIpLHRoaXMubWF0Y2goIikiKSl0aGlzLm5leHRUb2tlbigpLHRoaXMubWF0Y2goIj0+Iil8fHRoaXMuZXhwZWN0KCI9PiIpLGU9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczpbXSxhc3luYzohMX07ZWxzZXt2YXIgdD10aGlzLmxvb2thaGVhZCxuPVtdO2lmKHRoaXMubWF0Y2goIi4uLiIpKWU9dGhpcy5wYXJzZVJlc3RFbGVtZW50KG4pLHRoaXMuZXhwZWN0KCIpIiksdGhpcy5tYXRjaCgiPT4iKXx8dGhpcy5leHBlY3QoIj0+IiksZT17dHlwZToiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciIscGFyYW1zOltlXSxhc3luYzohMX07ZWxzZXt2YXIgcj0hMTtpZih0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMCxlPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pLHRoaXMubWF0Y2goIiwiKSl7dmFyIG89W107Zm9yKHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsby5wdXNoKGUpOzIhPT10aGlzLmxvb2thaGVhZC50eXBlJiZ0aGlzLm1hdGNoKCIsIik7KXtpZih0aGlzLm5leHRUb2tlbigpLHRoaXMubWF0Y2goIikiKSl7dGhpcy5uZXh0VG9rZW4oKTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKyl0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihvW3NdKTtyPSEwLGU9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczpvLGFzeW5jOiExfX1lbHNlIGlmKHRoaXMubWF0Y2goIi4uLiIpKXt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudHx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksby5wdXNoKHRoaXMucGFyc2VSZXN0RWxlbWVudChuKSksdGhpcy5leHBlY3QoIikiKSx0aGlzLm1hdGNoKCI9PiIpfHx0aGlzLmV4cGVjdCgiPT4iKSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKyl0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihvW3NdKTtyPSEwLGU9e3R5cGU6IkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiLHBhcmFtczpvLGFzeW5jOiExfX1lbHNlIG8ucHVzaCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7aWYocilicmVha31yfHwoZT10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHQpLG5ldyBpLlNlcXVlbmNlRXhwcmVzc2lvbihvKSkpfWlmKCFyKXtpZih0aGlzLmV4cGVjdCgiKSIpLHRoaXMubWF0Y2goIj0+IikmJihlLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiYieWllbGQiPT09ZS5uYW1lJiYocj0hMCxlPXt0eXBlOiJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIixwYXJhbXM6W2VdLGFzeW5jOiExfSksIXIpKXtpZih0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudHx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksZS50eXBlPT09bC5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uKWZvcih2YXIgcz0wO3M8ZS5leHByZXNzaW9ucy5sZW5ndGg7cysrKXRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUuZXhwcmVzc2lvbnNbc10pO2Vsc2UgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZSk7ZT17dHlwZToiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciIscGFyYW1zOmUudHlwZT09PWwuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbj9lLmV4cHJlc3Npb25zOltlXSxhc3luYzohMX19dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITF9fX1yZXR1cm4gZX0sZS5wcm90b3R5cGUucGFyc2VBcmd1bWVudHM9ZnVuY3Rpb24oKXt0aGlzLmV4cGVjdCgiKCIpO3ZhciBlPVtdO2lmKCF0aGlzLm1hdGNoKCIpIikpZm9yKDs7KXt2YXIgdD10aGlzLm1hdGNoKCIuLi4iKT90aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpOnRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO2lmKGUucHVzaCh0KSx0aGlzLm1hdGNoKCIpIikpYnJlYWs7aWYodGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpLHRoaXMubWF0Y2goIikiKSlicmVha31yZXR1cm4gdGhpcy5leHBlY3QoIikiKSxlfSxlLnByb3RvdHlwZS5pc0lkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiAzPT09ZS50eXBlfHw0PT09ZS50eXBlfHwxPT09ZS50eXBlfHw1PT09ZS50eXBlfSxlLnByb3RvdHlwZS5wYXJzZUlkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLm5leHRUb2tlbigpO3JldHVybiB0aGlzLmlzSWRlbnRpZmllck5hbWUodCl8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCksdGhpcy5maW5hbGl6ZShlLG5ldyBpLklkZW50aWZpZXIodC52YWx1ZSkpfSxlLnByb3RvdHlwZS5wYXJzZU5ld0V4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO3IuYXNzZXJ0KCJuZXciPT09dC5uYW1lLCJOZXcgZXhwcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYG5ld2AiKTt2YXIgbjtpZih0aGlzLm1hdGNoKCIuIikpaWYodGhpcy5uZXh0VG9rZW4oKSwzPT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5JiYidGFyZ2V0Ij09PXRoaXMubG9va2FoZWFkLnZhbHVlKXt2YXIgbz10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtuPW5ldyBpLk1ldGFQcm9wZXJ0eSh0LG8pfWVsc2UgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7ZWxzZXt2YXIgcz10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24pLGE9dGhpcy5tYXRjaCgiKCIpP3RoaXMucGFyc2VBcmd1bWVudHMoKTpbXTtuPW5ldyBpLk5ld0V4cHJlc3Npb24ocyxhKSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbil9LGUucHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3JldHVybiB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPW51bGwsZX0sZS5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50cz1mdW5jdGlvbigpe3RoaXMuZXhwZWN0KCIoIik7dmFyIGU9W107aWYoIXRoaXMubWF0Y2goIikiKSlmb3IoOzspe3ZhciB0PXRoaXMubWF0Y2goIi4uLiIpP3RoaXMucGFyc2VTcHJlYWRFbGVtZW50KCk6dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3luY0FyZ3VtZW50KTtpZihlLnB1c2godCksdGhpcy5tYXRjaCgiKSIpKWJyZWFrO2lmKHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKSx0aGlzLm1hdGNoKCIpIikpYnJlYWt9cmV0dXJuIHRoaXMuZXhwZWN0KCIpIiksZX0sZS5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQsdD10aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzeW5jIiksbj10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj0hMDt2YXIgcjtmb3IodGhpcy5tYXRjaEtleXdvcmQoInN1cGVyIikmJnRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keT8ocj10aGlzLmNyZWF0ZU5vZGUoKSx0aGlzLm5leHRUb2tlbigpLHI9dGhpcy5maW5hbGl6ZShyLG5ldyBpLlN1cGVyKSx0aGlzLm1hdGNoKCIoIil8fHRoaXMubWF0Y2goIi4iKXx8dGhpcy5tYXRjaCgiWyIpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSk6cj10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoIm5ldyIpP3RoaXMucGFyc2VOZXdFeHByZXNzaW9uOnRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7OylpZih0aGlzLm1hdGNoKCIuIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITAsdGhpcy5leHBlY3QoIi4iKTt2YXIgbz10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtyPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGkuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihyLG8pKX1lbHNlIGlmKHRoaXMubWF0Y2goIigiKSl7dmFyIHM9dCYmZS5saW5lTnVtYmVyPT09dGhpcy5sb29rYWhlYWQubGluZU51bWJlcjt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExO3ZhciBhPXM/dGhpcy5wYXJzZUFzeW5jQXJndW1lbnRzKCk6dGhpcy5wYXJzZUFyZ3VtZW50cygpO2lmKHI9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShlKSxuZXcgaS5DYWxsRXhwcmVzc2lvbihyLGEpKSxzJiZ0aGlzLm1hdGNoKCI9PiIpKXtmb3IodmFyIGw9MDtsPGEubGVuZ3RoOysrbCl0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihhW2xdKTtyPXt0eXBlOiJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIixwYXJhbXM6YSxhc3luYzohMH19fWVsc2UgaWYodGhpcy5tYXRjaCgiWyIpKXt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSEwLHRoaXMuZXhwZWN0KCJbIik7dmFyIG89dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTt0aGlzLmV4cGVjdCgiXSIpLHI9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShlKSxuZXcgaS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24ocixvKSl9ZWxzZXtpZigxMCE9PXRoaXMubG9va2FoZWFkLnR5cGV8fCF0aGlzLmxvb2thaGVhZC5oZWFkKWJyZWFrO3ZhciB1PXRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtyPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGkuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKHIsdSkpfXJldHVybiB0aGlzLmNvbnRleHQuYWxsb3dJbj1uLHJ9LGUucHJvdG90eXBlLnBhcnNlU3VwZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJzdXBlciIpLHRoaXMubWF0Y2goIlsiKXx8dGhpcy5tYXRjaCgiLiIpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuU3VwZXIpfSxlLnByb3RvdHlwZS5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb249ZnVuY3Rpb24oKXtyLmFzc2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwiY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uIGFsd2F5cyBhbGxvdyBpbiBrZXl3b3JkLiIpO2Zvcih2YXIgZT10aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCksdD10aGlzLm1hdGNoS2V5d29yZCgic3VwZXIiKSYmdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5P3RoaXMucGFyc2VTdXBlcigpOnRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLm1hdGNoS2V5d29yZCgibmV3Iik/dGhpcy5wYXJzZU5ld0V4cHJlc3Npb246dGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKTs7KWlmKHRoaXMubWF0Y2goIlsiKSl7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITEsdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMCx0aGlzLmV4cGVjdCgiWyIpO3ZhciBuPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7dGhpcy5leHBlY3QoIl0iKSx0PXRoaXMuZmluYWxpemUoZSxuZXcgaS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24odCxuKSl9ZWxzZSBpZih0aGlzLm1hdGNoKCIuIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITAsdGhpcy5leHBlY3QoIi4iKTt2YXIgbj10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgaS5TdGF0aWNNZW1iZXJFeHByZXNzaW9uKHQsbikpfWVsc2V7aWYoMTAhPT10aGlzLmxvb2thaGVhZC50eXBlfHwhdGhpcy5sb29rYWhlYWQuaGVhZClicmVhazt2YXIgbz10aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGkuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKHQsbykpfXJldHVybiB0fSxlLnByb3RvdHlwZS5wYXJzZVVwZGF0ZUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMubG9va2FoZWFkO2lmKHRoaXMubWF0Y2goIisrIil8fHRoaXMubWF0Y2goIi0tIikpe3ZhciBuPXRoaXMuc3RhcnROb2RlKHQpLHI9dGhpcy5uZXh0VG9rZW4oKTtlPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKSx0aGlzLmNvbnRleHQuc3RyaWN0JiZlLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChlLm5hbWUpJiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXR8fHRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO3ZhciBvPSEwO2U9dGhpcy5maW5hbGl6ZShuLG5ldyBpLlVwZGF0ZUV4cHJlc3Npb24oci52YWx1ZSxlLG8pKSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExfWVsc2UgaWYoZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpLCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiY3PT09dGhpcy5sb29rYWhlYWQudHlwZSYmKHRoaXMubWF0Y2goIisrIil8fHRoaXMubWF0Y2goIi0tIikpKXt0aGlzLmNvbnRleHQuc3RyaWN0JiZlLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChlLm5hbWUpJiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0fHx0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExO3ZhciBhPXRoaXMubmV4dFRva2VuKCkudmFsdWUsbz0hMTtlPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUodCksbmV3IGkuVXBkYXRlRXhwcmVzc2lvbihhLGUsbykpfXJldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZUF3YWl0RXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMubmV4dFRva2VuKCk7dmFyIHQ9dGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbigpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGkuQXdhaXRFeHByZXNzaW9uKHQpKX0sZS5wcm90b3R5cGUucGFyc2VVbmFyeUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLm1hdGNoKCIrIil8fHRoaXMubWF0Y2goIi0iKXx8dGhpcy5tYXRjaCgifiIpfHx0aGlzLm1hdGNoKCIhIil8fHRoaXMubWF0Y2hLZXl3b3JkKCJkZWxldGUiKXx8dGhpcy5tYXRjaEtleXdvcmQoInZvaWQiKXx8dGhpcy5tYXRjaEtleXdvcmQoInR5cGVvZiIpKXt2YXIgdD10aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCksbj10aGlzLm5leHRUb2tlbigpO2U9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pLGU9dGhpcy5maW5hbGl6ZSh0LG5ldyBpLlVuYXJ5RXhwcmVzc2lvbihuLnZhbHVlLGUpKSx0aGlzLmNvbnRleHQuc3RyaWN0JiYiZGVsZXRlIj09PWUub3BlcmF0b3ImJmUuYXJndW1lbnQudHlwZT09PWwuU3ludGF4LklkZW50aWZpZXImJnRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLlN0cmljdERlbGV0ZSksdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD0hMSx0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD0hMX1lbHNlIGU9dGhpcy5jb250ZXh0LmF3YWl0JiZ0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImF3YWl0Iik/dGhpcy5wYXJzZUF3YWl0RXhwcmVzc2lvbigpOnRoaXMucGFyc2VVcGRhdGVFeHByZXNzaW9uKCk7cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQsdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7aWYodC50eXBlIT09bC5TeW50YXguVW5hcnlFeHByZXNzaW9uJiZ0aGlzLm1hdGNoKCIqKiIpKXt0aGlzLm5leHRUb2tlbigpLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITE7dmFyIG49dCxyPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTt0PXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGkuQmluYXJ5RXhwcmVzc2lvbigiKioiLG4scikpfXJldHVybiB0fSxlLnByb3RvdHlwZS5iaW5hcnlQcmVjZWRlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIDc9PT1lLnR5cGU/dGhpcy5vcGVyYXRvclByZWNlZGVuY2VbdF18fDA6ND09PWUudHlwZSYmKCJpbnN0YW5jZW9mIj09PXR8fHRoaXMuY29udGV4dC5hbGxvd0luJiYiaW4iPT09dCk/NzowfSxlLnByb3RvdHlwZS5wYXJzZUJpbmFyeUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZCx0PXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSxuPXRoaXMubG9va2FoZWFkLHI9dGhpcy5iaW5hcnlQcmVjZWRlbmNlKG4pO2lmKHI+MCl7dGhpcy5uZXh0VG9rZW4oKSx0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExO2Zvcih2YXIgbz1bZSx0aGlzLmxvb2thaGVhZF0scz10LGE9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24pLGw9W3Msbi52YWx1ZSxhXSx1PVtyXTs7KXtpZigocj10aGlzLmJpbmFyeVByZWNlZGVuY2UodGhpcy5sb29rYWhlYWQpKTw9MClicmVhaztmb3IoO2wubGVuZ3RoPjImJnI8PXVbdS5sZW5ndGgtMV07KXthPWwucG9wKCk7dmFyIGM9bC5wb3AoKTt1LnBvcCgpLHM9bC5wb3AoKSxvLnBvcCgpO3ZhciBkPXRoaXMuc3RhcnROb2RlKG9bby5sZW5ndGgtMV0pO2wucHVzaCh0aGlzLmZpbmFsaXplKGQsbmV3IGkuQmluYXJ5RXhwcmVzc2lvbihjLHMsYSkpKX1sLnB1c2godGhpcy5uZXh0VG9rZW4oKS52YWx1ZSksdS5wdXNoKHIpLG8ucHVzaCh0aGlzLmxvb2thaGVhZCksbC5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSl9dmFyIF89bC5sZW5ndGgtMTt0PWxbX107Zm9yKHZhciBwPW8ucG9wKCk7Xz4xOyl7dmFyIGY9by5wb3AoKSxtPXAmJnAubGluZVN0YXJ0LGQ9dGhpcy5zdGFydE5vZGUoZixtKSxjPWxbXy0xXTt0PXRoaXMuZmluYWxpemUoZCxuZXcgaS5CaW5hcnlFeHByZXNzaW9uKGMsbFtfLTJdLHQpKSxfLT0yLHA9Zn19cmV0dXJuIHR9LGUucHJvdG90eXBlLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQsdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUJpbmFyeUV4cHJlc3Npb24pO2lmKHRoaXMubWF0Y2goIj8iKSl7dGhpcy5uZXh0VG9rZW4oKTt2YXIgbj10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj0hMDt2YXIgcj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0aGlzLmNvbnRleHQuYWxsb3dJbj1uLHRoaXMuZXhwZWN0KCI6Iik7dmFyIG89dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7dD10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBpLkNvbmRpdGlvbmFsRXhwcmVzc2lvbih0LHIsbykpLHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITEsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITF9cmV0dXJuIHR9LGUucHJvdG90eXBlLmNoZWNrUGF0dGVyblBhcmFtPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBsLlN5bnRheC5JZGVudGlmaWVyOnRoaXMudmFsaWRhdGVQYXJhbShlLHQsdC5uYW1lKTticmVhaztjYXNlIGwuU3ludGF4LlJlc3RFbGVtZW50OnRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0oZSx0LmFyZ3VtZW50KTticmVhaztjYXNlIGwuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOnRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0oZSx0LmxlZnQpO2JyZWFrO2Nhc2UgbC5TeW50YXguQXJyYXlQYXR0ZXJuOmZvcih2YXIgbj0wO248dC5lbGVtZW50cy5sZW5ndGg7bisrKW51bGwhPT10LmVsZW1lbnRzW25dJiZ0aGlzLmNoZWNrUGF0dGVyblBhcmFtKGUsdC5lbGVtZW50c1tuXSk7YnJlYWs7Y2FzZSBsLlN5bnRheC5PYmplY3RQYXR0ZXJuOmZvcih2YXIgbj0wO248dC5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspdGhpcy5jaGVja1BhdHRlcm5QYXJhbShlLHQucHJvcGVydGllc1tuXS52YWx1ZSl9ZS5zaW1wbGU9ZS5zaW1wbGUmJnQgaW5zdGFuY2VvZiBpLklkZW50aWZpZXJ9LGUucHJvdG90eXBlLnJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0PWZ1bmN0aW9uKGUpe3ZhciB0LG49W2VdLHI9ITE7c3dpdGNoKGUudHlwZSl7Y2FzZSBsLlN5bnRheC5JZGVudGlmaWVyOmJyZWFrO2Nhc2UiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciI6bj1lLnBhcmFtcyxyPWUuYXN5bmM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH10PXtzaW1wbGU6ITAscGFyYW1TZXQ6e319O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7KytvKXt2YXIgaT1uW29dO2kudHlwZT09PWwuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuP2kucmlnaHQudHlwZT09PWwuU3ludGF4LllpZWxkRXhwcmVzc2lvbiYmKGkucmlnaHQuYXJndW1lbnQmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLGkucmlnaHQudHlwZT1sLlN5bnRheC5JZGVudGlmaWVyLGkucmlnaHQubmFtZT0ieWllbGQiLGRlbGV0ZSBpLnJpZ2h0LmFyZ3VtZW50LGRlbGV0ZSBpLnJpZ2h0LmRlbGVnYXRlKTpyJiZpLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiYiYXdhaXQiPT09aS5uYW1lJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSx0aGlzLmNoZWNrUGF0dGVyblBhcmFtKHQsaSksbltvXT1pfWlmKHRoaXMuY29udGV4dC5zdHJpY3R8fCF0aGlzLmNvbnRleHQuYWxsb3dZaWVsZClmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbyl7dmFyIGk9bltvXTtpLnR5cGU9PT1sLlN5bnRheC5ZaWVsZEV4cHJlc3Npb24mJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfWlmKHQubWVzc2FnZT09PXMuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKXt2YXIgYT10aGlzLmNvbnRleHQuc3RyaWN0P3Quc3RyaWN0ZWQ6dC5maXJzdFJlc3RyaWN0ZWQ7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihhLHQubWVzc2FnZSl9cmV0dXJue3NpbXBsZTp0LnNpbXBsZSxwYXJhbXM6bixzdHJpY3RlZDp0LnN0cmljdGVkLGZpcnN0UmVzdHJpY3RlZDp0LmZpcnN0UmVzdHJpY3RlZCxtZXNzYWdlOnQubWVzc2FnZX19LGUucHJvdG90eXBlLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZTtpZighdGhpcy5jb250ZXh0LmFsbG93WWllbGQmJnRoaXMubWF0Y2hLZXl3b3JkKCJ5aWVsZCIpKWU9dGhpcy5wYXJzZVlpZWxkRXhwcmVzc2lvbigpO2Vsc2V7dmFyIHQ9dGhpcy5sb29rYWhlYWQsbj10O2lmKGU9dGhpcy5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpLDM9PT1uLnR5cGUmJm4ubGluZU51bWJlcj09PXRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXImJiJhc3luYyI9PT1uLnZhbHVlJiYoMz09PXRoaXMubG9va2FoZWFkLnR5cGV8fHRoaXMubWF0Y2hLZXl3b3JkKCJ5aWVsZCIpKSl7dmFyIHI9dGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7dGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4ociksZT17dHlwZToiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciIscGFyYW1zOltyXSxhc3luYzohMH19aWYoIkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIiPT09ZS50eXBlfHx0aGlzLm1hdGNoKCI9PiIpKXt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExO3ZhciBvPWUuYXN5bmMsYT10aGlzLnJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGUpO2lmKGEpe3RoaXMuaGFzTGluZVRlcm1pbmF0b3ImJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpLHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbDt2YXIgdT10aGlzLmNvbnRleHQuc3RyaWN0LGM9dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1hLnNpbXBsZTt2YXIgZD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZCxfPXRoaXMuY29udGV4dC5hd2FpdDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMCx0aGlzLmNvbnRleHQuYXdhaXQ9bzt2YXIgcD10aGlzLnN0YXJ0Tm9kZSh0KTt0aGlzLmV4cGVjdCgiPT4iKTt2YXIgZj12b2lkIDA7aWYodGhpcy5tYXRjaCgieyIpKXt2YXIgbT10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj0hMCxmPXRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCksdGhpcy5jb250ZXh0LmFsbG93SW49bX1lbHNlIGY9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7dmFyIGg9Zi50eXBlIT09bC5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7dGhpcy5jb250ZXh0LnN0cmljdCYmYS5maXJzdFJlc3RyaWN0ZWQmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oYS5maXJzdFJlc3RyaWN0ZWQsYS5tZXNzYWdlKSx0aGlzLmNvbnRleHQuc3RyaWN0JiZhLnN0cmljdGVkJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGEuc3RyaWN0ZWQsYS5tZXNzYWdlKSxlPW8/dGhpcy5maW5hbGl6ZShwLG5ldyBpLkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oYS5wYXJhbXMsZixoKSk6dGhpcy5maW5hbGl6ZShwLG5ldyBpLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKGEucGFyYW1zLGYsaCkpLHRoaXMuY29udGV4dC5zdHJpY3Q9dSx0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9Yyx0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1kLHRoaXMuY29udGV4dC5hd2FpdD1ffX1lbHNlIGlmKHRoaXMubWF0Y2hBc3NpZ24oKSl7aWYodGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldHx8dGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCksdGhpcy5jb250ZXh0LnN0cmljdCYmZS50eXBlPT09bC5TeW50YXguSWRlbnRpZmllcil7dmFyIGc9ZTt0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChnLm5hbWUpJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG4scy5NZXNzYWdlcy5TdHJpY3RMSFNBc3NpZ25tZW50KSx0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGcubmFtZSkmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obixzLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCl9dGhpcy5tYXRjaCgiPSIpP3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUpOih0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PSExLHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PSExKSxuPXRoaXMubmV4dFRva2VuKCk7dmFyIGI9bi52YWx1ZSxFPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO2U9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZSh0KSxuZXcgaS5Bc3NpZ25tZW50RXhwcmVzc2lvbihiLGUsRSkpLHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbH19cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va2FoZWFkLHQ9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7aWYodGhpcy5tYXRjaCgiLCIpKXt2YXIgbj1bXTtmb3Iobi5wdXNoKHQpOzIhPT10aGlzLmxvb2thaGVhZC50eXBlJiZ0aGlzLm1hdGNoKCIsIik7KXRoaXMubmV4dFRva2VuKCksbi5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTt0PXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGkuU2VxdWVuY2VFeHByZXNzaW9uKG4pKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbT1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ITAsdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ITAsND09PXRoaXMubG9va2FoZWFkLnR5cGUpc3dpdGNoKHRoaXMubG9va2FoZWFkLnZhbHVlKXtjYXNlImV4cG9ydCI6dGhpcy5jb250ZXh0LmlzTW9kdWxlfHx0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLHMuTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKSxlPXRoaXMucGFyc2VFeHBvcnREZWNsYXJhdGlvbigpO2JyZWFrO2Nhc2UiaW1wb3J0Ijp0aGlzLmNvbnRleHQuaXNNb2R1bGV8fHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQscy5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pLGU9dGhpcy5wYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJjb25zdCI6ZT10aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjohMX0pO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmU9dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTticmVhaztjYXNlImNsYXNzIjplPXRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJsZXQiOmU9dGhpcy5pc0xleGljYWxEZWNsYXJhdGlvbigpP3RoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOiExfSk6dGhpcy5wYXJzZVN0YXRlbWVudCgpO2JyZWFrO2RlZmF1bHQ6ZT10aGlzLnBhcnNlU3RhdGVtZW50KCl9ZWxzZSBlPXRoaXMucGFyc2VTdGF0ZW1lbnQoKTtyZXR1cm4gZX0sZS5wcm90b3R5cGUucGFyc2VCbG9jaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCJ7Iik7Zm9yKHZhciB0PVtdOzspe2lmKHRoaXMubWF0Y2goIn0iKSlicmVhazt0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpfXJldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5CbG9ja1N0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnBhcnNlTGV4aWNhbEJpbmRpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZU5vZGUoKSxyPVtdLG89dGhpcy5wYXJzZVBhdHRlcm4ocixlKTt0aGlzLmNvbnRleHQuc3RyaWN0JiZvLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChvLm5hbWUpJiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTt2YXIgYT1udWxsO3JldHVybiJjb25zdCI9PT1lP3RoaXMubWF0Y2hLZXl3b3JkKCJpbiIpfHx0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoIm9mIil8fCh0aGlzLm1hdGNoKCI9Iik/KHRoaXMubmV4dFRva2VuKCksYT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk6dGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuRGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXIsImNvbnN0IikpOighdC5pbkZvciYmby50eXBlIT09bC5TeW50YXguSWRlbnRpZmllcnx8dGhpcy5tYXRjaCgiPSIpKSYmKHRoaXMuZXhwZWN0KCI9IiksYT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSksdGhpcy5maW5hbGl6ZShuLG5ldyBpLlZhcmlhYmxlRGVjbGFyYXRvcihvLGEpKX0sZS5wcm90b3R5cGUucGFyc2VCaW5kaW5nTGlzdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bdGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGUsdCldO3RoaXMubWF0Y2goIiwiKTspdGhpcy5uZXh0VG9rZW4oKSxuLnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGUsdCkpO3JldHVybiBufSxlLnByb3RvdHlwZS5pc0xleGljYWxEZWNsYXJhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTt0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7dmFyIHQ9dGhpcy5zY2FubmVyLmxleCgpO3JldHVybiB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKGUpLDM9PT10LnR5cGV8fDc9PT10LnR5cGUmJiJbIj09PXQudmFsdWV8fDc9PT10LnR5cGUmJiJ7Ij09PXQudmFsdWV8fDQ9PT10LnR5cGUmJiJsZXQiPT09dC52YWx1ZXx8ND09PXQudHlwZSYmInlpZWxkIj09PXQudmFsdWV9LGUucHJvdG90eXBlLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5uZXh0VG9rZW4oKS52YWx1ZTtyLmFzc2VydCgibGV0Ij09PW58fCJjb25zdCI9PT1uLCJMZXhpY2FsIGRlY2xhcmF0aW9uIG11c3QgYmUgZWl0aGVyIGxldCBvciBjb25zdCIpO3ZhciBvPXRoaXMucGFyc2VCaW5kaW5nTGlzdChuLGUpO3JldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKHQsbmV3IGkuVmFyaWFibGVEZWNsYXJhdGlvbihvLG4pKX0sZS5wcm90b3R5cGUucGFyc2VCaW5kaW5nUmVzdEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgiLi4uIik7dmFyIHI9dGhpcy5wYXJzZVBhdHRlcm4oZSx0KTtyZXR1cm4gdGhpcy5maW5hbGl6ZShuLG5ldyBpLlJlc3RFbGVtZW50KHIpKX0sZS5wcm90b3R5cGUucGFyc2VBcnJheVBhdHRlcm49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgiWyIpO2Zvcih2YXIgcj1bXTshdGhpcy5tYXRjaCgiXSIpOylpZih0aGlzLm1hdGNoKCIsIikpdGhpcy5uZXh0VG9rZW4oKSxyLnB1c2gobnVsbCk7ZWxzZXtpZih0aGlzLm1hdGNoKCIuLi4iKSl7ci5wdXNoKHRoaXMucGFyc2VCaW5kaW5nUmVzdEVsZW1lbnQoZSx0KSk7YnJlYWt9ci5wdXNoKHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQoZSx0KSksdGhpcy5tYXRjaCgiXSIpfHx0aGlzLmV4cGVjdCgiLCIpfXJldHVybiB0aGlzLmV4cGVjdCgiXSIpLHRoaXMuZmluYWxpemUobixuZXcgaS5BcnJheVBhdHRlcm4ocikpfSxlLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5UGF0dGVybj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz10aGlzLmNyZWF0ZU5vZGUoKSxzPSExLGE9ITE7aWYoMz09PXRoaXMubG9va2FoZWFkLnR5cGUpe3ZhciBsPXRoaXMubG9va2FoZWFkO249dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO3ZhciB1PXRoaXMuZmluYWxpemUobyxuZXcgaS5JZGVudGlmaWVyKGwudmFsdWUpKTtpZih0aGlzLm1hdGNoKCI9Iikpe2UucHVzaChsKSxhPSEwLHRoaXMubmV4dFRva2VuKCk7dmFyIGM9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7cj10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGwpLG5ldyBpLkFzc2lnbm1lbnRQYXR0ZXJuKHUsYykpfWVsc2UgdGhpcy5tYXRjaCgiOiIpPyh0aGlzLmV4cGVjdCgiOiIpLHI9dGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChlLHQpKTooZS5wdXNoKGwpLGE9ITAscj11KX1lbHNlIHM9dGhpcy5tYXRjaCgiWyIpLG49dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCksdGhpcy5leHBlY3QoIjoiKSxyPXRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQoZSx0KTtyZXR1cm4gdGhpcy5maW5hbGl6ZShvLG5ldyBpLlByb3BlcnR5KCJpbml0IixuLHMsciwhMSxhKSl9LGUucHJvdG90eXBlLnBhcnNlT2JqZWN0UGF0dGVybj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlTm9kZSgpLHI9W107Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7IXRoaXMubWF0Y2goIn0iKTspci5wdXNoKHRoaXMucGFyc2VQcm9wZXJ0eVBhdHRlcm4oZSx0KSksdGhpcy5tYXRjaCgifSIpfHx0aGlzLmV4cGVjdCgiLCIpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuZmluYWxpemUobixuZXcgaS5PYmplY3RQYXR0ZXJuKHIpKX0sZS5wcm90b3R5cGUucGFyc2VQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIHRoaXMubWF0Y2goIlsiKT9uPXRoaXMucGFyc2VBcnJheVBhdHRlcm4oZSx0KTp0aGlzLm1hdGNoKCJ7Iik/bj10aGlzLnBhcnNlT2JqZWN0UGF0dGVybihlLHQpOighdGhpcy5tYXRjaEtleXdvcmQoImxldCIpfHwiY29uc3QiIT09dCYmImxldCIhPT10fHx0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLHMuTWVzc2FnZXMuTGV0SW5MZXhpY2FsQmluZGluZyksZS5wdXNoKHRoaXMubG9va2FoZWFkKSxuPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIodCkpLG59LGUucHJvdG90eXBlLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sb29rYWhlYWQscj10aGlzLnBhcnNlUGF0dGVybihlLHQpO2lmKHRoaXMubWF0Y2goIj0iKSl7dGhpcy5uZXh0VG9rZW4oKTt2YXIgbz10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMDt2YXIgcz10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1vLHI9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShuKSxuZXcgaS5Bc3NpZ25tZW50UGF0dGVybihyLHMpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucGFyc2VWYXJpYWJsZUlkZW50aWZpZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCksbj10aGlzLm5leHRUb2tlbigpO3JldHVybiA0PT09bi50eXBlJiYieWllbGQiPT09bi52YWx1ZT90aGlzLmNvbnRleHQuc3RyaWN0P3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obixzLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk6dGhpcy5jb250ZXh0LmFsbG93WWllbGR8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obik6MyE9PW4udHlwZT90aGlzLmNvbnRleHQuc3RyaWN0JiY0PT09bi50eXBlJiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG4udmFsdWUpP3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obixzLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk6KHRoaXMuY29udGV4dC5zdHJpY3R8fCJsZXQiIT09bi52YWx1ZXx8InZhciIhPT1lKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuKToodGhpcy5jb250ZXh0LmlzTW9kdWxlfHx0aGlzLmNvbnRleHQuYXdhaXQpJiYzPT09bi50eXBlJiYiYXdhaXQiPT09bi52YWx1ZSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihuKSx0aGlzLmZpbmFsaXplKHQsbmV3IGkuSWRlbnRpZmllcihuLnZhbHVlKSl9LGUucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKSxuPVtdLHI9dGhpcy5wYXJzZVBhdHRlcm4obiwidmFyIik7dGhpcy5jb250ZXh0LnN0cmljdCYmci50eXBlPT09bC5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoci5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5tYXRjaCgiPSIpPyh0aGlzLm5leHRUb2tlbigpLG89dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOnIudHlwZT09PWwuU3ludGF4LklkZW50aWZpZXJ8fGUuaW5Gb3J8fHRoaXMuZXhwZWN0KCI9IiksdGhpcy5maW5hbGl6ZSh0LG5ldyBpLlZhcmlhYmxlRGVjbGFyYXRvcihyLG8pKX0sZS5wcm90b3R5cGUucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdD1mdW5jdGlvbihlKXt2YXIgdD17aW5Gb3I6ZS5pbkZvcn0sbj1bXTtmb3Iobi5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHQpKTt0aGlzLm1hdGNoKCIsIik7KXRoaXMubmV4dFRva2VuKCksbi5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHQpKTtyZXR1cm4gbn0sZS5wcm90b3R5cGUucGFyc2VWYXJpYWJsZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgidmFyIik7dmFyIHQ9dGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHtpbkZvcjohMX0pO3JldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuVmFyaWFibGVEZWNsYXJhdGlvbih0LCJ2YXIiKSl9LGUucHJvdG90eXBlLnBhcnNlRW1wdHlTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTtyZXR1cm4gdGhpcy5leHBlY3QoIjsiKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuRW1wdHlTdGF0ZW1lbnQpfSxlLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7cmV0dXJuIHRoaXMuY29uc3VtZVNlbWljb2xvbigpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5FeHByZXNzaW9uU3RhdGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VJZkNsYXVzZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLm1hdGNoS2V5d29yZCgiZnVuY3Rpb24iKSYmdGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pLHRoaXMucGFyc2VTdGF0ZW1lbnQoKX0sZS5wcm90b3R5cGUucGFyc2VJZlN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jcmVhdGVOb2RlKCksbj1udWxsO3RoaXMuZXhwZWN0S2V5d29yZCgiaWYiKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciByPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7cmV0dXJuIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQ/KHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSksZT10aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLG5ldyBpLkVtcHR5U3RhdGVtZW50KSk6KHRoaXMuZXhwZWN0KCIpIiksZT10aGlzLnBhcnNlSWZDbGF1c2UoKSx0aGlzLm1hdGNoS2V5d29yZCgiZWxzZSIpJiYodGhpcy5uZXh0VG9rZW4oKSxuPXRoaXMucGFyc2VJZkNsYXVzZSgpKSksdGhpcy5maW5hbGl6ZSh0LG5ldyBpLklmU3RhdGVtZW50KHIsZSxuKSl9LGUucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiZG8iKTt2YXIgdD10aGlzLmNvbnRleHQuaW5JdGVyYXRpb247dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPSEwO3ZhciBuPXRoaXMucGFyc2VTdGF0ZW1lbnQoKTt0aGlzLmNvbnRleHQuaW5JdGVyYXRpb249dCx0aGlzLmV4cGVjdEtleXdvcmQoIndoaWxlIiksdGhpcy5leHBlY3QoIigiKTt2YXIgcj10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3JldHVybiF0aGlzLm1hdGNoKCIpIikmJnRoaXMuY29uZmlnLnRvbGVyYW50P3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk6KHRoaXMuZXhwZWN0KCIpIiksdGhpcy5tYXRjaCgiOyIpJiZ0aGlzLm5leHRUb2tlbigpKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuRG9XaGlsZVN0YXRlbWVudChuLHIpKX0sZS5wcm90b3R5cGUucGFyc2VXaGlsZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ3aGlsZSIpLHRoaXMuZXhwZWN0KCIoIik7dmFyIG49dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtpZighdGhpcy5tYXRjaCgiKSIpJiZ0aGlzLmNvbmZpZy50b2xlcmFudCl0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpLGU9dGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSxuZXcgaS5FbXB0eVN0YXRlbWVudCk7ZWxzZXt0aGlzLmV4cGVjdCgiKSIpO3ZhciByPXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjt0aGlzLmNvbnRleHQuaW5JdGVyYXRpb249ITAsZT10aGlzLnBhcnNlU3RhdGVtZW50KCksdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPXJ9cmV0dXJuIHRoaXMuZmluYWxpemUodCxuZXcgaS5XaGlsZVN0YXRlbWVudChuLGUpKX0sZS5wcm90b3R5cGUucGFyc2VGb3JTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG49bnVsbCxyPW51bGwsbz1udWxsLGE9ITAsdT10aGlzLmNyZWF0ZU5vZGUoKTtpZih0aGlzLmV4cGVjdEtleXdvcmQoImZvciIpLHRoaXMuZXhwZWN0KCIoIiksdGhpcy5tYXRjaCgiOyIpKXRoaXMubmV4dFRva2VuKCk7ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgidmFyIikpe249dGhpcy5jcmVhdGVOb2RlKCksdGhpcy5uZXh0VG9rZW4oKTt2YXIgYz10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj0hMTt2YXIgZD10aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoe2luRm9yOiEwfSk7aWYodGhpcy5jb250ZXh0LmFsbG93SW49YywxPT09ZC5sZW5ndGgmJnRoaXMubWF0Y2hLZXl3b3JkKCJpbiIpKXt2YXIgXz1kWzBdO18uaW5pdCYmKF8uaWQudHlwZT09PWwuU3ludGF4LkFycmF5UGF0dGVybnx8Xy5pZC50eXBlPT09bC5TeW50YXguT2JqZWN0UGF0dGVybnx8dGhpcy5jb250ZXh0LnN0cmljdCkmJnRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLkZvckluT2ZMb29wSW5pdGlhbGl6ZXIsImZvci1pbiIpLG49dGhpcy5maW5hbGl6ZShuLG5ldyBpLlZhcmlhYmxlRGVjbGFyYXRpb24oZCwidmFyIikpLHRoaXMubmV4dFRva2VuKCksZT1uLHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKSxuPW51bGx9ZWxzZSAxPT09ZC5sZW5ndGgmJm51bGw9PT1kWzBdLmluaXQmJnRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgib2YiKT8obj10aGlzLmZpbmFsaXplKG4sbmV3IGkuVmFyaWFibGVEZWNsYXJhdGlvbihkLCJ2YXIiKSksdGhpcy5uZXh0VG9rZW4oKSxlPW4sdD10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxuPW51bGwsYT0hMSk6KG49dGhpcy5maW5hbGl6ZShuLG5ldyBpLlZhcmlhYmxlRGVjbGFyYXRpb24oZCwidmFyIikpLHRoaXMuZXhwZWN0KCI7IikpfWVsc2UgaWYodGhpcy5tYXRjaEtleXdvcmQoImNvbnN0Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJsZXQiKSl7bj10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgcD10aGlzLm5leHRUb2tlbigpLnZhbHVlO2lmKHRoaXMuY29udGV4dC5zdHJpY3R8fCJpbiIhPT10aGlzLmxvb2thaGVhZC52YWx1ZSl7dmFyIGM9dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ITE7dmFyIGQ9dGhpcy5wYXJzZUJpbmRpbmdMaXN0KHAse2luRm9yOiEwfSk7dGhpcy5jb250ZXh0LmFsbG93SW49YywxPT09ZC5sZW5ndGgmJm51bGw9PT1kWzBdLmluaXQmJnRoaXMubWF0Y2hLZXl3b3JkKCJpbiIpPyhuPXRoaXMuZmluYWxpemUobixuZXcgaS5WYXJpYWJsZURlY2xhcmF0aW9uKGQscCkpLHRoaXMubmV4dFRva2VuKCksZT1uLHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKSxuPW51bGwpOjE9PT1kLmxlbmd0aCYmbnVsbD09PWRbMF0uaW5pdCYmdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpPyhuPXRoaXMuZmluYWxpemUobixuZXcgaS5WYXJpYWJsZURlY2xhcmF0aW9uKGQscCkpLHRoaXMubmV4dFRva2VuKCksZT1uLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksbj1udWxsLGE9ITEpOih0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxuPXRoaXMuZmluYWxpemUobixuZXcgaS5WYXJpYWJsZURlY2xhcmF0aW9uKGQscCkpKX1lbHNlIG49dGhpcy5maW5hbGl6ZShuLG5ldyBpLklkZW50aWZpZXIocCkpLHRoaXMubmV4dFRva2VuKCksZT1uLHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKSxuPW51bGx9ZWxzZXt2YXIgZj10aGlzLmxvb2thaGVhZCxjPXRoaXMuY29udGV4dC5hbGxvd0luO2lmKHRoaXMuY29udGV4dC5hbGxvd0luPSExLG49dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbiksdGhpcy5jb250ZXh0LmFsbG93SW49Yyx0aGlzLm1hdGNoS2V5d29yZCgiaW4iKSl0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0JiZuLnR5cGUhPT1sLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbnx8dGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pLHRoaXMubmV4dFRva2VuKCksdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4obiksZT1uLHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKSxuPW51bGw7ZWxzZSBpZih0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoIm9mIikpdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCYmbi50eXBlIT09bC5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb258fHRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApLHRoaXMubmV4dFRva2VuKCksdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4obiksZT1uLHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksbj1udWxsLGE9ITE7ZWxzZXtpZih0aGlzLm1hdGNoKCIsIikpe2Zvcih2YXIgbT1bbl07dGhpcy5tYXRjaCgiLCIpOyl0aGlzLm5leHRUb2tlbigpLG0ucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7bj10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGYpLG5ldyBpLlNlcXVlbmNlRXhwcmVzc2lvbihtKSl9dGhpcy5leHBlY3QoIjsiKX19dm9pZCAwPT09ZSYmKHRoaXMubWF0Y2goIjsiKXx8KHI9dGhpcy5wYXJzZUV4cHJlc3Npb24oKSksdGhpcy5leHBlY3QoIjsiKSx0aGlzLm1hdGNoKCIpIil8fChvPXRoaXMucGFyc2VFeHByZXNzaW9uKCkpKTt2YXIgaDtpZighdGhpcy5tYXRjaCgiKSIpJiZ0aGlzLmNvbmZpZy50b2xlcmFudCl0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpLGg9dGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSxuZXcgaS5FbXB0eVN0YXRlbWVudCk7ZWxzZXt0aGlzLmV4cGVjdCgiKSIpO3ZhciBnPXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjt0aGlzLmNvbnRleHQuaW5JdGVyYXRpb249ITAsaD10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVN0YXRlbWVudCksdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPWd9cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5maW5hbGl6ZSh1LG5ldyBpLkZvclN0YXRlbWVudChuLHIsbyxoKSk6YT90aGlzLmZpbmFsaXplKHUsbmV3IGkuRm9ySW5TdGF0ZW1lbnQoZSx0LGgpKTp0aGlzLmZpbmFsaXplKHUsbmV3IGkuRm9yT2ZTdGF0ZW1lbnQoZSx0LGgpKX0sZS5wcm90b3R5cGUucGFyc2VDb250aW51ZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiY29udGludWUiKTt2YXIgdD1udWxsO2lmKDM9PT10aGlzLmxvb2thaGVhZC50eXBlJiYhdGhpcy5oYXNMaW5lVGVybWluYXRvcil7dmFyIG49dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO3Q9bjt2YXIgcj0iJCIrbi5uYW1lO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQscil8fHRoaXMudGhyb3dFcnJvcihzLk1lc3NhZ2VzLlVua25vd25MYWJlbCxuLm5hbWUpfXJldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxudWxsIT09dHx8dGhpcy5jb250ZXh0LmluSXRlcmF0aW9ufHx0aGlzLnRocm93RXJyb3Iocy5NZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5Db250aW51ZVN0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnBhcnNlQnJlYWtTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImJyZWFrIik7dmFyIHQ9bnVsbDtpZigzPT09dGhpcy5sb29rYWhlYWQudHlwZSYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3Ipe3ZhciBuPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSxyPSIkIituLm5hbWU7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCxyKXx8dGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuVW5rbm93bkxhYmVsLG4ubmFtZSksdD1ufXJldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxudWxsIT09dHx8dGhpcy5jb250ZXh0LmluSXRlcmF0aW9ufHx0aGlzLmNvbnRleHQuaW5Td2l0Y2h8fHRoaXMudGhyb3dFcnJvcihzLk1lc3NhZ2VzLklsbGVnYWxCcmVhayksdGhpcy5maW5hbGl6ZShlLG5ldyBpLkJyZWFrU3RhdGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHl8fHRoaXMudG9sZXJhdGVFcnJvcihzLk1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgicmV0dXJuIik7dmFyIHQ9IXRoaXMubWF0Y2goIjsiKSYmIXRoaXMubWF0Y2goIn0iKSYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3ImJjIhPT10aGlzLmxvb2thaGVhZC50eXBlfHw4PT09dGhpcy5sb29rYWhlYWQudHlwZXx8MTA9PT10aGlzLmxvb2thaGVhZC50eXBlLG49dD90aGlzLnBhcnNlRXhwcmVzc2lvbigpOm51bGw7cmV0dXJuIHRoaXMuY29uc3VtZVNlbWljb2xvbigpLHRoaXMuZmluYWxpemUoZSxuZXcgaS5SZXR1cm5TdGF0ZW1lbnQobikpfSxlLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7dmFyIGUsdD10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoIndpdGgiKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7cmV0dXJuIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQ/KHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSksZT10aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLG5ldyBpLkVtcHR5U3RhdGVtZW50KSk6KHRoaXMuZXhwZWN0KCIpIiksZT10aGlzLnBhcnNlU3RhdGVtZW50KCkpLHRoaXMuZmluYWxpemUodCxuZXcgaS5XaXRoU3RhdGVtZW50KG4sZSkpfSxlLnByb3RvdHlwZS5wYXJzZVN3aXRjaENhc2U9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iik/KHRoaXMubmV4dFRva2VuKCksZT1udWxsKToodGhpcy5leHBlY3RLZXl3b3JkKCJjYXNlIiksZT10aGlzLnBhcnNlRXhwcmVzc2lvbigpKSx0aGlzLmV4cGVjdCgiOiIpO2Zvcih2YXIgbj1bXTs7KXtpZih0aGlzLm1hdGNoKCJ9Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJjYXNlIikpYnJlYWs7bi5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX1yZXR1cm4gdGhpcy5maW5hbGl6ZSh0LG5ldyBpLlN3aXRjaENhc2UoZSxuKSl9LGUucHJvdG90eXBlLnBhcnNlU3dpdGNoU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzd2l0Y2giKSx0aGlzLmV4cGVjdCgiKCIpO3ZhciB0PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7dGhpcy5leHBlY3QoIikiKTt2YXIgbj10aGlzLmNvbnRleHQuaW5Td2l0Y2g7dGhpcy5jb250ZXh0LmluU3dpdGNoPSEwO3ZhciByPVtdLG89ITE7Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7Oyl7aWYodGhpcy5tYXRjaCgifSIpKWJyZWFrO3ZhciBhPXRoaXMucGFyc2VTd2l0Y2hDYXNlKCk7bnVsbD09PWEudGVzdCYmKG8mJnRoaXMudGhyb3dFcnJvcihzLk1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCksbz0hMCksci5wdXNoKGEpfXJldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuY29udGV4dC5pblN3aXRjaD1uLHRoaXMuZmluYWxpemUoZSxuZXcgaS5Td2l0Y2hTdGF0ZW1lbnQodCxyKSl9LGUucHJvdG90eXBlLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtpZihuLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLm1hdGNoKCI6Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIHI9bixvPSIkIityLm5hbWU7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCxvKSYmdGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwiTGFiZWwiLHIubmFtZSksdGhpcy5jb250ZXh0LmxhYmVsU2V0W29dPSEwO3ZhciBhPXZvaWQgMDtpZih0aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKSl0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSxhPXRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgiZnVuY3Rpb24iKSl7dmFyIHU9dGhpcy5sb29rYWhlYWQsYz10aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO3RoaXMuY29udGV4dC5zdHJpY3Q/dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih1LHMuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pOmMuZ2VuZXJhdG9yJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHUscy5NZXNzYWdlcy5HZW5lcmF0b3JJbkxlZ2FjeUNvbnRleHQpLGE9Y31lbHNlIGE9dGhpcy5wYXJzZVN0YXRlbWVudCgpO2RlbGV0ZSB0aGlzLmNvbnRleHQubGFiZWxTZXRbb10sZT1uZXcgaS5MYWJlbGVkU3RhdGVtZW50KHIsYSl9ZWxzZSB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSxlPW5ldyBpLkV4cHJlc3Npb25TdGF0ZW1lbnQobik7cmV0dXJuIHRoaXMuZmluYWxpemUodCxlKX0sZS5wcm90b3R5cGUucGFyc2VUaHJvd1N0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgidGhyb3ciKSx0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiZ0aGlzLnRocm93RXJyb3Iocy5NZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7dmFyIHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtyZXR1cm4gdGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdGhpcy5maW5hbGl6ZShlLG5ldyBpLlRocm93U3RhdGVtZW50KHQpKX0sZS5wcm90b3R5cGUucGFyc2VDYXRjaENsYXVzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiY2F0Y2giKSx0aGlzLmV4cGVjdCgiKCIpLHRoaXMubWF0Y2goIikiKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Zm9yKHZhciB0PVtdLG49dGhpcy5wYXJzZVBhdHRlcm4odCkscj17fSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPSIkIit0W29dLnZhbHVlO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLHRbb10udmFsdWUpLHJbYV09ITB9dGhpcy5jb250ZXh0LnN0cmljdCYmbi50eXBlPT09bC5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQobi5uYW1lKSYmdGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSksdGhpcy5leHBlY3QoIikiKTt2YXIgdT10aGlzLnBhcnNlQmxvY2soKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBpLkNhdGNoQ2xhdXNlKG4sdSkpfSxlLnByb3RvdHlwZS5wYXJzZUZpbmFsbHlDbGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJmaW5hbGx5IiksdGhpcy5wYXJzZUJsb2NrKCl9LGUucHJvdG90eXBlLnBhcnNlVHJ5U3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0cnkiKTt2YXIgdD10aGlzLnBhcnNlQmxvY2soKSxuPXRoaXMubWF0Y2hLZXl3b3JkKCJjYXRjaCIpP3RoaXMucGFyc2VDYXRjaENsYXVzZSgpOm51bGwscj10aGlzLm1hdGNoS2V5d29yZCgiZmluYWxseSIpP3RoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCk6bnVsbDtyZXR1cm4gbnx8cnx8dGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSksdGhpcy5maW5hbGl6ZShlLG5ldyBpLlRyeVN0YXRlbWVudCh0LG4scikpfSxlLnByb3RvdHlwZS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgiZGVidWdnZXIiKSx0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuRGVidWdnZXJTdGF0ZW1lbnQpfSxlLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlO3N3aXRjaCh0aGlzLmxvb2thaGVhZC50eXBlKXtjYXNlIDE6Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSAxMDpjYXNlIDk6ZT10aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpO2JyZWFrO2Nhc2UgNzp2YXIgdD10aGlzLmxvb2thaGVhZC52YWx1ZTtlPSJ7Ij09PXQ/dGhpcy5wYXJzZUJsb2NrKCk6IigiPT09dD90aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOiI7Ij09PXQ/dGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KCk6dGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTticmVhaztjYXNlIDM6ZT10aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpP3RoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk6dGhpcy5wYXJzZUxhYmVsbGVkU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSA0OnN3aXRjaCh0aGlzLmxvb2thaGVhZC52YWx1ZSl7Y2FzZSJicmVhayI6ZT10aGlzLnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTticmVhaztjYXNlImNvbnRpbnVlIjplPXRoaXMucGFyc2VDb250aW51ZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZGVidWdnZXIiOmU9dGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJkbyI6ZT10aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZm9yIjplPXRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTticmVhaztjYXNlImZ1bmN0aW9uIjplPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJpZiI6ZT10aGlzLnBhcnNlSWZTdGF0ZW1lbnQoKTticmVhaztjYXNlInJldHVybiI6ZT10aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJzd2l0Y2giOmU9dGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidGhyb3ciOmU9dGhpcy5wYXJzZVRocm93U3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ0cnkiOmU9dGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidmFyIjplPXRoaXMucGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2Uid2hpbGUiOmU9dGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ3aXRoIjplPXRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7YnJlYWs7ZGVmYXVsdDplPXRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCl9YnJlYWs7ZGVmYXVsdDplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfXJldHVybiBlfSxlLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO3ZhciB0PXRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKSxuPXRoaXMuY29udGV4dC5sYWJlbFNldCxyPXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbixvPXRoaXMuY29udGV4dC5pblN3aXRjaCxzPXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTtmb3IodGhpcy5jb250ZXh0LmxhYmVsU2V0PXt9LHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj0hMSx0aGlzLmNvbnRleHQuaW5Td2l0Y2g9ITEsdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5PSEwOzIhPT10aGlzLmxvb2thaGVhZC50eXBlJiYhdGhpcy5tYXRjaCgifSIpOyl0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMuY29udGV4dC5sYWJlbFNldD1uLHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1yLHRoaXMuY29udGV4dC5pblN3aXRjaD1vLHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keT1zLHRoaXMuZmluYWxpemUoZSxuZXcgaS5CbG9ja1N0YXRlbWVudCh0KSl9LGUucHJvdG90eXBlLnZhbGlkYXRlUGFyYW09ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIkIituO3RoaXMuY29udGV4dC5zdHJpY3Q/KHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKG4pJiYoZS5zdHJpY3RlZD10LGUubWVzc2FnZT1zLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUucGFyYW1TZXQscikmJihlLnN0cmljdGVkPXQsZS5tZXNzYWdlPXMuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSk6ZS5maXJzdFJlc3RyaWN0ZWR8fCh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChuKT8oZS5maXJzdFJlc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9cy5NZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOnRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobik/KGUuZmlyc3RSZXN0cmljdGVkPXQsZS5tZXNzYWdlPXMuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5wYXJhbVNldCxyKSYmKGUuc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9cy5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnBhcmFtU2V0LHIse3ZhbHVlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZS5wYXJhbVNldFtyXT0hMH0sZS5wcm90b3R5cGUucGFyc2VSZXN0RWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgiLi4uIik7dmFyIG49dGhpcy5wYXJzZVBhdHRlcm4oZSk7cmV0dXJuIHRoaXMubWF0Y2goIj0iKSYmdGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpLHRoaXMubWF0Y2goIikiKXx8dGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKSx0aGlzLmZpbmFsaXplKHQsbmV3IGkuUmVzdEVsZW1lbnQobikpfSxlLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj10aGlzLm1hdGNoKCIuLi4iKT90aGlzLnBhcnNlUmVzdEVsZW1lbnQodCk6dGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdGhpcy52YWxpZGF0ZVBhcmFtKGUsdFtyXSx0W3JdLnZhbHVlKTtlLnNpbXBsZT1lLnNpbXBsZSYmbiBpbnN0YW5jZW9mIGkuSWRlbnRpZmllcixlLnBhcmFtcy5wdXNoKG4pfSxlLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYodD17c2ltcGxlOiEwLHBhcmFtczpbXSxmaXJzdFJlc3RyaWN0ZWQ6ZX0sdGhpcy5leHBlY3QoIigiKSwhdGhpcy5tYXRjaCgiKSIpKWZvcih0LnBhcmFtU2V0PXt9OzIhPT10aGlzLmxvb2thaGVhZC50eXBlJiYodGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcih0KSwhdGhpcy5tYXRjaCgiKSIpKSYmKHRoaXMuZXhwZWN0KCIsIiksIXRoaXMubWF0Y2goIikiKSk7KTtyZXR1cm4gdGhpcy5leHBlY3QoIikiKSx7c2ltcGxlOnQuc2ltcGxlLHBhcmFtczp0LnBhcmFtcyxzdHJpY3RlZDp0LnN0cmljdGVkLGZpcnN0UmVzdHJpY3RlZDp0LmZpcnN0UmVzdHJpY3RlZCxtZXNzYWdlOnQubWVzc2FnZX19LGUucHJvdG90eXBlLm1hdGNoQXN5bmNGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXN5bmMiKTtpZihlKXt2YXIgdD10aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7dGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpO3ZhciBuPXRoaXMuc2Nhbm5lci5sZXgoKTt0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHQpLGU9dC5saW5lTnVtYmVyPT09bi5saW5lTnVtYmVyJiY0PT09bi50eXBlJiYiZnVuY3Rpb24iPT09bi52YWx1ZX1yZXR1cm4gZX0sZS5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhc3luYyIpO24mJnRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3RLZXl3b3JkKCJmdW5jdGlvbiIpO3ZhciByPSFuJiZ0aGlzLm1hdGNoKCIqIik7ciYmdGhpcy5uZXh0VG9rZW4oKTt2YXIgbyxhPW51bGwsbD1udWxsO2lmKCFlfHwhdGhpcy5tYXRjaCgiKCIpKXt2YXIgdT10aGlzLmxvb2thaGVhZDthPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSx0aGlzLmNvbnRleHQuc3RyaWN0P3RoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHUudmFsdWUpJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHUscy5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOnRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHUudmFsdWUpPyhsPXUsbz1zLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk6dGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh1LnZhbHVlKSYmKGw9dSxvPXMuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKX12YXIgYz10aGlzLmNvbnRleHQuYXdhaXQsZD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYXdhaXQ9bix0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hcjt2YXIgXz10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhsKSxwPV8ucGFyYW1zLGY9Xy5zdHJpY3RlZDtsPV8uZmlyc3RSZXN0cmljdGVkLF8ubWVzc2FnZSYmKG89Xy5tZXNzYWdlKTt2YXIgbT10aGlzLmNvbnRleHQuc3RyaWN0LGg9dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1fLnNpbXBsZTt2YXIgZz10aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO3JldHVybiB0aGlzLmNvbnRleHQuc3RyaWN0JiZsJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGwsbyksdGhpcy5jb250ZXh0LnN0cmljdCYmZiYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihmLG8pLHRoaXMuY29udGV4dC5zdHJpY3Q9bSx0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9aCx0aGlzLmNvbnRleHQuYXdhaXQ9Yyx0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1kLG4/dGhpcy5maW5hbGl6ZSh0LG5ldyBpLkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbihhLHAsZykpOnRoaXMuZmluYWxpemUodCxuZXcgaS5GdW5jdGlvbkRlY2xhcmF0aW9uKGEscCxnLHIpKX0sZS5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXN5bmMiKTt0JiZ0aGlzLm5leHRUb2tlbigpLHRoaXMuZXhwZWN0S2V5d29yZCgiZnVuY3Rpb24iKTt2YXIgbj0hdCYmdGhpcy5tYXRjaCgiKiIpO24mJnRoaXMubmV4dFRva2VuKCk7dmFyIHIsbyxhPW51bGwsbD10aGlzLmNvbnRleHQuYXdhaXQsdT10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDtpZih0aGlzLmNvbnRleHQuYXdhaXQ9dCx0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hbiwhdGhpcy5tYXRjaCgiKCIpKXt2YXIgYz10aGlzLmxvb2thaGVhZDthPXRoaXMuY29udGV4dC5zdHJpY3R8fG58fCF0aGlzLm1hdGNoS2V5d29yZCgieWllbGQiKT90aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk6dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCksdGhpcy5jb250ZXh0LnN0cmljdD90aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKSYmdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihjLHMuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTp0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKT8obz1jLHI9cy5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOnRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoYy52YWx1ZSkmJihvPWMscj1zLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCl9dmFyIGQ9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMobyksXz1kLnBhcmFtcyxwPWQuc3RyaWN0ZWQ7bz1kLmZpcnN0UmVzdHJpY3RlZCxkLm1lc3NhZ2UmJihyPWQubWVzc2FnZSk7dmFyIGY9dGhpcy5jb250ZXh0LnN0cmljdCxtPXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9ZC5zaW1wbGU7dmFyIGg9dGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtyZXR1cm4gdGhpcy5jb250ZXh0LnN0cmljdCYmbyYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihvLHIpLHRoaXMuY29udGV4dC5zdHJpY3QmJnAmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocCxyKSx0aGlzLmNvbnRleHQuc3RyaWN0PWYsdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPW0sdGhpcy5jb250ZXh0LmF3YWl0PWwsdGhpcy5jb250ZXh0LmFsbG93WWllbGQ9dSx0P3RoaXMuZmluYWxpemUoZSxuZXcgaS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihhLF8saCkpOnRoaXMuZmluYWxpemUoZSxuZXcgaS5GdW5jdGlvbkV4cHJlc3Npb24oYSxfLGgsbikpfSxlLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9va2FoZWFkLHQ9dGhpcy5jcmVhdGVOb2RlKCksbj10aGlzLnBhcnNlRXhwcmVzc2lvbigpLHI9bi50eXBlPT09bC5TeW50YXguTGl0ZXJhbD90aGlzLmdldFRva2VuUmF3KGUpLnNsaWNlKDEsLTEpOm51bGw7cmV0dXJuIHRoaXMuY29uc3VtZVNlbWljb2xvbigpLHRoaXMuZmluYWxpemUodCxyP25ldyBpLkRpcmVjdGl2ZShuLHIpOm5ldyBpLkV4cHJlc3Npb25TdGF0ZW1lbnQobikpfSxlLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xvZ3Vlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1udWxsLHQ9W107Oyl7dmFyIG49dGhpcy5sb29rYWhlYWQ7aWYoOCE9PW4udHlwZSlicmVhazt2YXIgcj10aGlzLnBhcnNlRGlyZWN0aXZlKCk7dC5wdXNoKHIpO3ZhciBvPXIuZGlyZWN0aXZlO2lmKCJzdHJpbmciIT10eXBlb2YgbylicmVhazsidXNlIHN0cmljdCI9PT1vPyh0aGlzLmNvbnRleHQuc3RyaWN0PSEwLGUmJnRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZSxzLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCksdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlfHx0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG4scy5NZXNzYWdlcy5JbGxlZ2FsTGFuZ3VhZ2VNb2RlRGlyZWN0aXZlKSk6IWUmJm4ub2N0YWwmJihlPW4pfXJldHVybiB0fSxlLnByb3RvdHlwZS5xdWFsaWZpZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAzOmNhc2UgODpjYXNlIDE6Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6cmV0dXJuITA7Y2FzZSA3OnJldHVybiJbIj09PWUudmFsdWV9cmV0dXJuITF9LGUucHJvdG90eXBlLnBhcnNlR2V0dGVyTWV0aG9kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMDt2YXIgbj10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpO24ucGFyYW1zLmxlbmd0aD4wJiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5CYWRHZXR0ZXJBcml0eSk7dmFyIHI9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKG4pO3JldHVybiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10LHRoaXMuZmluYWxpemUoZSxuZXcgaS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCxuLnBhcmFtcyxyLCExKSl9LGUucHJvdG90eXBlLnBhcnNlU2V0dGVyTWV0aG9kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hMDt2YXIgbj10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOzEhPT1uLnBhcmFtcy5sZW5ndGg/dGhpcy50b2xlcmF0ZUVycm9yKHMuTWVzc2FnZXMuQmFkU2V0dGVyQXJpdHkpOm4ucGFyYW1zWzBdaW5zdGFuY2VvZiBpLlJlc3RFbGVtZW50JiZ0aGlzLnRvbGVyYXRlRXJyb3Iocy5NZXNzYWdlcy5CYWRTZXR0ZXJSZXN0UGFyYW1ldGVyKTt2YXIgcj10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qobik7cmV0dXJuIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPXQsdGhpcy5maW5hbGl6ZShlLG5ldyBpLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLG4ucGFyYW1zLHIsITEpKX0sZS5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPSEwO3ZhciBuPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ITE7dmFyIHI9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKG4pO3JldHVybiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10LHRoaXMuZmluYWxpemUoZSxuZXcgaS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCxuLnBhcmFtcyxyLCEwKSl9LGUucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT0hMCx0PXRoaXMubG9va2FoZWFkLnZhbHVlO3N3aXRjaCh0aGlzLmxvb2thaGVhZC50eXBlKXtjYXNlIDc6ZT0iWyI9PT10fHwiKCI9PT10fHwieyI9PT10fHwiKyI9PT10fHwiLSI9PT10fHwiISI9PT10fHwifiI9PT10fHwiKysiPT09dHx8Ii0tIj09PXR8fCIvIj09PXR8fCIvPSI9PT10O2JyZWFrO2Nhc2UgNDplPSJjbGFzcyI9PT10fHwiZGVsZXRlIj09PXR8fCJmdW5jdGlvbiI9PT10fHwibGV0Ij09PXR8fCJuZXciPT09dHx8InN1cGVyIj09PXR8fCJ0aGlzIj09PXR8fCJ0eXBlb2YiPT09dHx8InZvaWQiPT09dHx8InlpZWxkIj09PXR9cmV0dXJuIGV9LGUucHJvdG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ5aWVsZCIpO3ZhciB0PW51bGwsbj0hMTtpZighdGhpcy5oYXNMaW5lVGVybWluYXRvcil7dmFyIHI9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ITEsbj10aGlzLm1hdGNoKCIqIiksbj8odGhpcy5uZXh0VG9rZW4oKSx0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTp0aGlzLmlzU3RhcnRPZkV4cHJlc3Npb24oKSYmKHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpLHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPXJ9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgaS5ZaWVsZEV4cHJlc3Npb24odCxuKSl9LGUucHJvdG90eXBlLnBhcnNlQ2xhc3NFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubG9va2FoZWFkLG49dGhpcy5jcmVhdGVOb2RlKCkscj0iIixvPW51bGwsYT1udWxsLGw9ITEsdT0hMSxjPSExLGQ9ITE7aWYodGhpcy5tYXRjaCgiKiIpKXRoaXMubmV4dFRva2VuKCk7ZWxzZXtsPXRoaXMubWF0Y2goIlsiKSxvPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO2lmKCJzdGF0aWMiPT09by5uYW1lJiYodGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpfHx0aGlzLm1hdGNoKCIqIikpJiYodD10aGlzLmxvb2thaGVhZCxjPSEwLGw9dGhpcy5tYXRjaCgiWyIpLHRoaXMubWF0Y2goIioiKT90aGlzLm5leHRUb2tlbigpOm89dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCkpLDM9PT10LnR5cGUmJiF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yJiYiYXN5bmMiPT09dC52YWx1ZSl7dmFyIF89dGhpcy5sb29rYWhlYWQudmFsdWU7IjoiIT09XyYmIigiIT09XyYmIioiIT09XyYmKGQ9ITAsdD10aGlzLmxvb2thaGVhZCxvPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLDM9PT10LnR5cGUmJiJjb25zdHJ1Y3RvciI9PT10LnZhbHVlJiZ0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHQscy5NZXNzYWdlcy5Db25zdHJ1Y3RvcklzQXN5bmMpKX19dmFyIHA9dGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO3JldHVybiAzPT09dC50eXBlPyJnZXQiPT09dC52YWx1ZSYmcD8ocj0iZ2V0IixsPXRoaXMubWF0Y2goIlsiKSxvPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLHRoaXMuY29udGV4dC5hbGxvd1lpZWxkPSExLGE9dGhpcy5wYXJzZUdldHRlck1ldGhvZCgpKToic2V0Ij09PXQudmFsdWUmJnAmJihyPSJzZXQiLGw9dGhpcy5tYXRjaCgiWyIpLG89dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCksYT10aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCkpOjc9PT10LnR5cGUmJiIqIj09PXQudmFsdWUmJnAmJihyPSJpbml0IixsPXRoaXMubWF0Y2goIlsiKSxvPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpLGE9dGhpcy5wYXJzZUdlbmVyYXRvck1ldGhvZCgpLHU9ITApLCFyJiZvJiZ0aGlzLm1hdGNoKCIoIikmJihyPSJpbml0IixhPWQ/dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigpOnRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksdT0hMCkscnx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCksImluaXQiPT09ciYmKHI9Im1ldGhvZCIpLGx8fChjJiZ0aGlzLmlzUHJvcGVydHlLZXkobywicHJvdG90eXBlIikmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCxzLk1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSksIWMmJnRoaXMuaXNQcm9wZXJ0eUtleShvLCJjb25zdHJ1Y3RvciIpJiYoKCJtZXRob2QiIT09cnx8IXV8fGEmJmEuZ2VuZXJhdG9yKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0LHMuTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKSxlLnZhbHVlP3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCxzLk1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTplLnZhbHVlPSEwLHI9ImNvbnN0cnVjdG9yIikpLHRoaXMuZmluYWxpemUobixuZXcgaS5NZXRob2REZWZpbml0aW9uKG8sbCxhLHIsYykpfSxlLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudExpc3Q9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXt2YWx1ZTohMX07Zm9yKHRoaXMuZXhwZWN0KCJ7Iik7IXRoaXMubWF0Y2goIn0iKTspdGhpcy5tYXRjaCgiOyIpP3RoaXMubmV4dFRva2VuKCk6ZS5wdXNoKHRoaXMucGFyc2VDbGFzc0VsZW1lbnQodCkpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLGV9LGUucHJvdG90eXBlLnBhcnNlQ2xhc3NCb2R5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGkuQ2xhc3NCb2R5KHQpKX0sZS5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpLG49dGhpcy5jb250ZXh0LnN0cmljdDt0aGlzLmNvbnRleHQuc3RyaWN0PSEwLHRoaXMuZXhwZWN0S2V5d29yZCgiY2xhc3MiKTt2YXIgcj1lJiYzIT09dGhpcy5sb29rYWhlYWQudHlwZT9udWxsOnRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSxvPW51bGw7dGhpcy5tYXRjaEtleXdvcmQoImV4dGVuZHMiKSYmKHRoaXMubmV4dFRva2VuKCksbz10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpKTt2YXIgcz10aGlzLnBhcnNlQ2xhc3NCb2R5KCk7cmV0dXJuIHRoaXMuY29udGV4dC5zdHJpY3Q9bix0aGlzLmZpbmFsaXplKHQsbmV3IGkuQ2xhc3NEZWNsYXJhdGlvbihyLG8scykpfSxlLnByb3RvdHlwZS5wYXJzZUNsYXNzRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5jb250ZXh0LnN0cmljdDt0aGlzLmNvbnRleHQuc3RyaWN0PSEwLHRoaXMuZXhwZWN0S2V5d29yZCgiY2xhc3MiKTt2YXIgbj0zPT09dGhpcy5sb29rYWhlYWQudHlwZT90aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk6bnVsbCxyPW51bGw7dGhpcy5tYXRjaEtleXdvcmQoImV4dGVuZHMiKSYmKHRoaXMubmV4dFRva2VuKCkscj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpKTt2YXIgbz10aGlzLnBhcnNlQ2xhc3NCb2R5KCk7cmV0dXJuIHRoaXMuY29udGV4dC5zdHJpY3Q9dCx0aGlzLmZpbmFsaXplKGUsbmV3IGkuQ2xhc3NFeHByZXNzaW9uKG4scixvKSl9LGUucHJvdG90eXBlLnBhcnNlTW9kdWxlPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnN0cmljdD0hMCx0aGlzLmNvbnRleHQuaXNNb2R1bGU9ITAsdGhpcy5zY2FubmVyLmlzTW9kdWxlPSEwO2Zvcih2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKSx0PXRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsyIT09dGhpcy5sb29rYWhlYWQudHlwZTspdC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBpLk1vZHVsZSh0KSl9LGUucHJvdG90eXBlLnBhcnNlU2NyaXB0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY3JlYXRlTm9kZSgpLHQ9dGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOzIhPT10aGlzLmxvb2thaGVhZC50eXBlOyl0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGkuU2NyaXB0KHQpKX0sZS5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTs4IT09dGhpcy5sb29rYWhlYWQudHlwZSYmdGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuSW52YWxpZE1vZHVsZVNwZWNpZmllcik7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKSxuPXRoaXMuZ2V0VG9rZW5SYXcodCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgaS5MaXRlcmFsKHQudmFsdWUsbikpfSxlLnByb3RvdHlwZS5wYXJzZUltcG9ydFNwZWNpZmllcj1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLmNyZWF0ZU5vZGUoKTtyZXR1cm4gMz09PXRoaXMubG9va2FoZWFkLnR5cGU/KGU9dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpLHQ9ZSx0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzIikmJih0aGlzLm5leHRUb2tlbigpLHQ9dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpKSk6KGU9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCksdD1lLHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXMiKT8odGhpcy5uZXh0VG9rZW4oKSx0PXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSk6dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKSksdGhpcy5maW5hbGl6ZShuLG5ldyBpLkltcG9ydFNwZWNpZmllcih0LGUpKX0sZS5wcm90b3R5cGUucGFyc2VOYW1lZEltcG9ydHM9ZnVuY3Rpb24oKXt0aGlzLmV4cGVjdCgieyIpO2Zvcih2YXIgZT1bXTshdGhpcy5tYXRjaCgifSIpOyllLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcigpKSx0aGlzLm1hdGNoKCJ9Iil8fHRoaXMuZXhwZWN0KCIsIik7cmV0dXJuIHRoaXMuZXhwZWN0KCJ9IiksZX0sZS5wcm90b3R5cGUucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBpLkltcG9ydERlZmF1bHRTcGVjaWZpZXIodCkpfSxlLnByb3RvdHlwZS5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCIqIiksdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhcyIpfHx0aGlzLnRocm93RXJyb3Iocy5NZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpLHRoaXMubmV4dFRva2VuKCk7dmFyIHQ9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgaS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIodCkpfSxlLnByb3RvdHlwZS5wYXJzZUltcG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5JiZ0aGlzLnRocm93RXJyb3Iocy5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW1wb3J0Iik7dmFyIHQsbj1bXTtpZig4PT09dGhpcy5sb29rYWhlYWQudHlwZSl0PXRoaXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtlbHNle2lmKHRoaXMubWF0Y2goInsiKT9uPW4uY29uY2F0KHRoaXMucGFyc2VOYW1lZEltcG9ydHMoKSk6dGhpcy5tYXRjaCgiKiIpP24ucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpOnRoaXMuaXNJZGVudGlmaWVyTmFtZSh0aGlzLmxvb2thaGVhZCkmJiF0aGlzLm1hdGNoS2V5d29yZCgiZGVmYXVsdCIpPyhuLnB1c2godGhpcy5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSksdGhpcy5tYXRjaCgiLCIpJiYodGhpcy5uZXh0VG9rZW4oKSx0aGlzLm1hdGNoKCIqIik/bi5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk6dGhpcy5tYXRjaCgieyIpP249bi5jb25jYXQodGhpcy5wYXJzZU5hbWVkSW1wb3J0cygpKTp0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKSkpOnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSksIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZnJvbSIpKXt2YXIgcj10aGlzLmxvb2thaGVhZC52YWx1ZT9zLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjpzLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlO3RoaXMudGhyb3dFcnJvcihyLHRoaXMubG9va2FoZWFkLnZhbHVlKX10aGlzLm5leHRUb2tlbigpLHQ9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpfXJldHVybiB0aGlzLmNvbnN1bWVTZW1pY29sb24oKSx0aGlzLmZpbmFsaXplKGUsbmV3IGkuSW1wb3J0RGVjbGFyYXRpb24obix0KSl9LGUucHJvdG90eXBlLnBhcnNlRXhwb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCksdD10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSxuPXQ7cmV0dXJuIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXMiKSYmKHRoaXMubmV4dFRva2VuKCksbj10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSksdGhpcy5maW5hbGl6ZShlLG5ldyBpLkV4cG9ydFNwZWNpZmllcih0LG4pKX0sZS5wcm90b3R5cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSYmdGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImV4cG9ydCIpO3ZhciB0O2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0IikpaWYodGhpcy5uZXh0VG9rZW4oKSx0aGlzLm1hdGNoS2V5d29yZCgiZnVuY3Rpb24iKSl7dmFyIG49dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oITApO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBpLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihuKSl9ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKSl7dmFyIG49dGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24oITApO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBpLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihuKSl9ZWxzZSBpZih0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzeW5jIikpe3ZhciBuPXRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCk/dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oITApOnRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBpLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihuKSl9ZWxzZXt0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImZyb20iKSYmdGhpcy50aHJvd0Vycm9yKHMuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLHRoaXMubG9va2FoZWFkLnZhbHVlKTt2YXIgbj10aGlzLm1hdGNoKCJ7Iik/dGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKCk6dGhpcy5tYXRjaCgiWyIpP3RoaXMucGFyc2VBcnJheUluaXRpYWxpemVyKCk6dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCksdD10aGlzLmZpbmFsaXplKGUsbmV3IGkuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG4pKX1lbHNlIGlmKHRoaXMubWF0Y2goIioiKSl7aWYodGhpcy5uZXh0VG9rZW4oKSwhdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJmcm9tIikpe3ZhciByPXRoaXMubG9va2FoZWFkLnZhbHVlP3MuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOnMuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7dGhpcy50aHJvd0Vycm9yKHIsdGhpcy5sb29rYWhlYWQudmFsdWUpfXRoaXMubmV4dFRva2VuKCk7dmFyIG89dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpO3RoaXMuY29uc3VtZVNlbWljb2xvbigpLHQ9dGhpcy5maW5hbGl6ZShlLG5ldyBpLkV4cG9ydEFsbERlY2xhcmF0aW9uKG8pKX1lbHNlIGlmKDQ9PT10aGlzLmxvb2thaGVhZC50eXBlKXt2YXIgbj12b2lkIDA7c3dpdGNoKHRoaXMubG9va2FoZWFkLnZhbHVlKXtjYXNlImxldCI6Y2FzZSJjb25zdCI6bj10aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjohMX0pO2JyZWFrO2Nhc2UidmFyIjpjYXNlImNsYXNzIjpjYXNlImZ1bmN0aW9uIjpuPXRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpO2JyZWFrO2RlZmF1bHQ6dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9dD10aGlzLmZpbmFsaXplKGUsbmV3IGkuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuLFtdLG51bGwpKX1lbHNlIGlmKHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpe3ZhciBuPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGkuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuLFtdLG51bGwpKX1lbHNle3ZhciBhPVtdLGw9bnVsbCx1PSExO2Zvcih0aGlzLmV4cGVjdCgieyIpOyF0aGlzLm1hdGNoKCJ9Iik7KXU9dXx8dGhpcy5tYXRjaEtleXdvcmQoImRlZmF1bHQiKSxhLnB1c2godGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKSx0aGlzLm1hdGNoKCJ9Iil8fHRoaXMuZXhwZWN0KCIsIik7aWYodGhpcy5leHBlY3QoIn0iKSx0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImZyb20iKSl0aGlzLm5leHRUb2tlbigpLGw9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpLHRoaXMuY29uc3VtZVNlbWljb2xvbigpO2Vsc2UgaWYodSl7dmFyIHI9dGhpcy5sb29rYWhlYWQudmFsdWU/cy5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW46cy5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTt0aGlzLnRocm93RXJyb3Iocix0aGlzLmxvb2thaGVhZC52YWx1ZSl9ZWxzZSB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgaS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG51bGwsYSxsKSl9cmV0dXJuIHR9LGV9KCk7dC5QYXJzZXI9Y30sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQVNTRVJUOiAiK3QpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFzc2VydD1ufSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5lcnJvcnM9W10sdGhpcy50b2xlcmFudD0hMX1yZXR1cm4gZS5wcm90b3R5cGUucmVjb3JkRXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5lcnJvcnMucHVzaChlKX0sZS5wcm90b3R5cGUudG9sZXJhdGU9ZnVuY3Rpb24oZSl7aWYoIXRoaXMudG9sZXJhbnQpdGhyb3cgZTt0aGlzLnJlY29yZEVycm9yKGUpfSxlLnByb3RvdHlwZS5jb25zdHJ1Y3RFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBFcnJvcihlKTt0cnl7dGhyb3cgbn1jYXRjaChlKXtPYmplY3QuY3JlYXRlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJihuPU9iamVjdC5jcmVhdGUoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImNvbHVtbiIse3ZhbHVlOnR9KSl9cmV0dXJuIG59LGUucHJvdG90eXBlLmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPSJMaW5lICIrdCsiOiAiK3Iscz10aGlzLmNvbnN0cnVjdEVycm9yKG8sbik7cmV0dXJuIHMuaW5kZXg9ZSxzLmxpbmVOdW1iZXI9dCxzLmRlc2NyaXB0aW9uPXIsc30sZS5wcm90b3R5cGUudGhyb3dFcnJvcj1mdW5jdGlvbihlLHQsbixyKXt0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGUsdCxuLHIpfSxlLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMuY3JlYXRlRXJyb3IoZSx0LG4scik7aWYoIXRoaXMudG9sZXJhbnQpdGhyb3cgbzt0aGlzLnJlY29yZEVycm9yKG8pfSxlfSgpO3QuRXJyb3JIYW5kbGVyPW59LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VzPXtCYWRHZXR0ZXJBcml0eToiR2V0dGVyIG11c3Qgbm90IGhhdmUgYW55IGZvcm1hbCBwYXJhbWV0ZXJzIixCYWRTZXR0ZXJBcml0eToiU2V0dGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyIixCYWRTZXR0ZXJSZXN0UGFyYW1ldGVyOiJTZXR0ZXIgZnVuY3Rpb24gYXJndW1lbnQgbXVzdCBub3QgYmUgYSByZXN0IHBhcmFtZXRlciIsQ29uc3RydWN0b3JJc0FzeW5jOiJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFzeW5jIG1ldGhvZCIsQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kOiJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yIixEZWNsYXJhdGlvbk1pc3NpbmdJbml0aWFsaXplcjoiTWlzc2luZyBpbml0aWFsaXplciBpbiAlMCBkZWNsYXJhdGlvbiIsRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IlVuZXhwZWN0ZWQgdG9rZW4gPSIsRHVwbGljYXRlQmluZGluZzoiRHVwbGljYXRlIGJpbmRpbmcgJTAiLER1cGxpY2F0ZUNvbnN0cnVjdG9yOiJBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVjdG9yIixEdXBsaWNhdGVQcm90b1Byb3BlcnR5OiJEdXBsaWNhdGUgX19wcm90b19fIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzIixGb3JJbk9mTG9vcEluaXRpYWxpemVyOiIlMCBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplciIsR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0OiJHZW5lcmF0b3IgZGVjbGFyYXRpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBsZWdhY3kgY29udGV4dHMiLElsbGVnYWxCcmVhazoiSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQiLElsbGVnYWxDb250aW51ZToiSWxsZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQiLElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjoiVW5leHBlY3RlZCB0b2tlbiIsSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiJVbmV4cGVjdGVkIHRva2VuIixJbGxlZ2FsTGFuZ3VhZ2VNb2RlRGlyZWN0aXZlOiJJbGxlZ2FsICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0IixJbGxlZ2FsUmV0dXJuOiJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQiLEludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkOiJLZXl3b3JkIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzIixJbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2U6IkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIixJbnZhbGlkTEhTSW5Bc3NpZ25tZW50OiJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQiLEludmFsaWRMSFNJbkZvckluOiJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbiIsSW52YWxpZExIU0luRm9yTG9vcDoiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCIsSW52YWxpZE1vZHVsZVNwZWNpZmllcjoiVW5leHBlY3RlZCB0b2tlbiIsSW52YWxpZFJlZ0V4cDoiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iLExldEluTGV4aWNhbEJpbmRpbmc6ImxldCBpcyBkaXNhbGxvd2VkIGFzIGEgbGV4aWNhbGx5IGJvdW5kIG5hbWUiLE1pc3NpbmdGcm9tQ2xhdXNlOiJVbmV4cGVjdGVkIHRva2VuIixNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6Ik1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCIsTmV3bGluZUFmdGVyVGhyb3c6IklsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdyIsTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlOiJVbmV4cGVjdGVkIHRva2VuIixOb0NhdGNoT3JGaW5hbGx5OiJNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5IixQYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXI6IlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyIixSZWRlY2xhcmF0aW9uOiIlMCAnJTEnIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQiLFN0YXRpY1Byb3RvdHlwZToiQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZSIsU3RyaWN0Q2F0Y2hWYXJpYWJsZToiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0RGVsZXRlOiJEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4iLFN0cmljdEZ1bmN0aW9uOiJJbiBzdHJpY3QgbW9kZSBjb2RlLCBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgYXQgdG9wIGxldmVsIG9yIGluc2lkZSBhIGJsb2NrIixTdHJpY3RGdW5jdGlvbk5hbWU6IkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0TEhTQXNzaWdubWVudDoiQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0TEhTUG9zdGZpeDoiUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlIixTdHJpY3RMSFNQcmVmaXg6IlByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlIixTdHJpY3RNb2RlV2l0aDoiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCIsU3RyaWN0T2N0YWxMaXRlcmFsOiJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuIixTdHJpY3RQYXJhbUR1cGU6IlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIixTdHJpY3RQYXJhbU5hbWU6IlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIixTdHJpY3RSZXNlcnZlZFdvcmQ6IlVzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0VmFyTmFtZToiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixUZW1wbGF0ZU9jdGFsTGl0ZXJhbDoiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuIixVbmV4cGVjdGVkRU9TOiJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIsVW5leHBlY3RlZElkZW50aWZpZXI6IlVuZXhwZWN0ZWQgaWRlbnRpZmllciIsVW5leHBlY3RlZE51bWJlcjoiVW5leHBlY3RlZCBudW1iZXIiLFVuZXhwZWN0ZWRSZXNlcnZlZDoiVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkIixVbmV4cGVjdGVkU3RyaW5nOiJVbmV4cGVjdGVkIHN0cmluZyIsVW5leHBlY3RlZFRlbXBsYXRlOiJVbmV4cGVjdGVkIHF1YXNpICUwIixVbmV4cGVjdGVkVG9rZW46IlVuZXhwZWN0ZWQgdG9rZW4gJTAiLFVuZXhwZWN0ZWRUb2tlbklsbGVnYWw6IlVuZXhwZWN0ZWQgdG9rZW4gSUxMRUdBTCIsVW5rbm93bkxhYmVsOiJVbmRlZmluZWQgbGFiZWwgJyUwJyIsVW50ZXJtaW5hdGVkUmVnRXhwOiJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvIn19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iMDEyMzQ1Njc4OWFiY2RlZiIuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIjAxMjM0NTY3Ii5pbmRleE9mKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1uKDkpLGk9big0KSxhPW4oMTEpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zb3VyY2U9ZSx0aGlzLmVycm9ySGFuZGxlcj10LHRoaXMudHJhY2tDb21tZW50PSExLHRoaXMuaXNNb2R1bGU9ITEsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5pbmRleD0wLHRoaXMubGluZU51bWJlcj1lLmxlbmd0aD4wPzE6MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMuY3VybHlTdGFjaz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuaW5kZXgsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0fX0sZS5wcm90b3R5cGUucmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuaW5kZXg9ZS5pbmRleCx0aGlzLmxpbmVOdW1iZXI9ZS5saW5lTnVtYmVyLHRoaXMubGluZVN0YXJ0PWUubGluZVN0YXJ0fSxlLnByb3RvdHlwZS5lb2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy5sZW5ndGh9LGUucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1hLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWwpLHRoaXMuZXJyb3JIYW5kbGVyLnRocm93RXJyb3IodGhpcy5pbmRleCx0aGlzLmxpbmVOdW1iZXIsdGhpcy5pbmRleC10aGlzLmxpbmVTdGFydCsxLGUpfSxlLnByb3RvdHlwZS50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1hLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWwpLHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IodGhpcy5pbmRleCx0aGlzLmxpbmVOdW1iZXIsdGhpcy5pbmRleC10aGlzLmxpbmVTdGFydCsxLGUpfSxlLnByb3RvdHlwZS5za2lwU2luZ2xlTGluZUNvbW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVtdO2Zvcih0aGlzLnRyYWNrQ29tbWVudCYmKHI9W10sdD10aGlzLmluZGV4LWUsbj17c3RhcnQ6e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0LWV9LGVuZDp7fX0pOyF0aGlzLmVvZigpOyl7dmFyIG89dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtpZigrK3RoaXMuaW5kZXgsaS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihvKSl7aWYodGhpcy50cmFja0NvbW1lbnQpe24uZW5kPXtsaW5lOnRoaXMubGluZU51bWJlcixjb2x1bW46dGhpcy5pbmRleC10aGlzLmxpbmVTdGFydC0xfTt2YXIgcz17bXVsdGlMaW5lOiExLHNsaWNlOlt0K2UsdGhpcy5pbmRleC0xXSxyYW5nZTpbdCx0aGlzLmluZGV4LTFdLGxvYzpufTtyLnB1c2gocyl9cmV0dXJuIDEzPT09byYmMTA9PT10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpJiYrK3RoaXMuaW5kZXgsKyt0aGlzLmxpbmVOdW1iZXIsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleCxyfX1pZih0aGlzLnRyYWNrQ29tbWVudCl7bi5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgcz17bXVsdGlMaW5lOiExLHNsaWNlOlt0K2UsdGhpcy5pbmRleF0scmFuZ2U6W3QsdGhpcy5pbmRleF0sbG9jOm59O3IucHVzaChzKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUuc2tpcE11bHRpTGluZUNvbW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG49W107Zm9yKHRoaXMudHJhY2tDb21tZW50JiYobj1bXSxlPXRoaXMuaW5kZXgtMix0PXtzdGFydDp7bGluZTp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnQtMn0sZW5kOnt9fSk7IXRoaXMuZW9mKCk7KXt2YXIgcj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKGkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IocikpMTM9PT1yJiYxMD09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSYmKyt0aGlzLmluZGV4LCsrdGhpcy5saW5lTnVtYmVyLCsrdGhpcy5pbmRleCx0aGlzLmxpbmVTdGFydD10aGlzLmluZGV4O2Vsc2UgaWYoNDI9PT1yKXtpZig0Nz09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSl7aWYodGhpcy5pbmRleCs9Mix0aGlzLnRyYWNrQ29tbWVudCl7dC5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgbz17bXVsdGlMaW5lOiEwLHNsaWNlOltlKzIsdGhpcy5pbmRleC0yXSxyYW5nZTpbZSx0aGlzLmluZGV4XSxsb2M6dH07bi5wdXNoKG8pfXJldHVybiBufSsrdGhpcy5pbmRleH1lbHNlKyt0aGlzLmluZGV4fWlmKHRoaXMudHJhY2tDb21tZW50KXt0LmVuZD17bGluZTp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnR9O3ZhciBvPXttdWx0aUxpbmU6ITAsc2xpY2U6W2UrMix0aGlzLmluZGV4XSxyYW5nZTpbZSx0aGlzLmluZGV4XSxsb2M6dH07bi5wdXNoKG8pfXJldHVybiB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCksbn0sZS5wcm90b3R5cGUuc2NhbkNvbW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy50cmFja0NvbW1lbnQmJihlPVtdKTtmb3IodmFyIHQ9MD09PXRoaXMuaW5kZXg7IXRoaXMuZW9mKCk7KXt2YXIgbj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKGkuQ2hhcmFjdGVyLmlzV2hpdGVTcGFjZShuKSkrK3RoaXMuaW5kZXg7ZWxzZSBpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKG4pKSsrdGhpcy5pbmRleCwxMz09PW4mJjEwPT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSYmKyt0aGlzLmluZGV4LCsrdGhpcy5saW5lTnVtYmVyLHRoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXgsdD0hMDtlbHNlIGlmKDQ3PT09bilpZig0Nz09PShuPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpe3RoaXMuaW5kZXgrPTI7dmFyIHI9dGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMik7dGhpcy50cmFja0NvbW1lbnQmJihlPWUuY29uY2F0KHIpKSx0PSEwfWVsc2V7aWYoNDIhPT1uKWJyZWFrO3RoaXMuaW5kZXgrPTI7dmFyIHI9dGhpcy5za2lwTXVsdGlMaW5lQ29tbWVudCgpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9ZWxzZSBpZih0JiY0NT09PW4pe2lmKDQ1IT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KzEpfHw2MiE9PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsyKSlicmVhazt0aGlzLmluZGV4Kz0zO3ZhciByPXRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9ZWxzZXtpZig2MCE9PW58fHRoaXMuaXNNb2R1bGUpYnJlYWs7aWYoIiEtLSIhPT10aGlzLnNvdXJjZS5zbGljZSh0aGlzLmluZGV4KzEsdGhpcy5pbmRleCs0KSlicmVhazt0aGlzLmluZGV4Kz00O3ZhciByPXRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDQpO3RoaXMudHJhY2tDb21tZW50JiYoZT1lLmNvbmNhdChyKSl9fXJldHVybiBlfSxlLnByb3RvdHlwZS5pc0Z1dHVyZVJlc2VydmVkV29yZD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJlbnVtIjpjYXNlImV4cG9ydCI6Y2FzZSJpbXBvcnQiOmNhc2Uic3VwZXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxlLnByb3RvdHlwZS5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiaW1wbGVtZW50cyI6Y2FzZSJpbnRlcmZhY2UiOmNhc2UicGFja2FnZSI6Y2FzZSJwcml2YXRlIjpjYXNlInByb3RlY3RlZCI6Y2FzZSJwdWJsaWMiOmNhc2Uic3RhdGljIjpjYXNlInlpZWxkIjpjYXNlImxldCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGUucHJvdG90eXBlLmlzUmVzdHJpY3RlZFdvcmQ9ZnVuY3Rpb24oZSl7cmV0dXJuImV2YWwiPT09ZXx8ImFyZ3VtZW50cyI9PT1lfSxlLnByb3RvdHlwZS5pc0tleXdvcmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDI6cmV0dXJuImlmIj09PWV8fCJpbiI9PT1lfHwiZG8iPT09ZTtjYXNlIDM6cmV0dXJuInZhciI9PT1lfHwiZm9yIj09PWV8fCJuZXciPT09ZXx8InRyeSI9PT1lfHwibGV0Ij09PWU7Y2FzZSA0OnJldHVybiJ0aGlzIj09PWV8fCJlbHNlIj09PWV8fCJjYXNlIj09PWV8fCJ2b2lkIj09PWV8fCJ3aXRoIj09PWV8fCJlbnVtIj09PWU7Y2FzZSA1OnJldHVybiJ3aGlsZSI9PT1lfHwiYnJlYWsiPT09ZXx8ImNhdGNoIj09PWV8fCJ0aHJvdyI9PT1lfHwiY29uc3QiPT09ZXx8InlpZWxkIj09PWV8fCJjbGFzcyI9PT1lfHwic3VwZXIiPT09ZTtjYXNlIDY6cmV0dXJuInJldHVybiI9PT1lfHwidHlwZW9mIj09PWV8fCJkZWxldGUiPT09ZXx8InN3aXRjaCI9PT1lfHwiZXhwb3J0Ij09PWV8fCJpbXBvcnQiPT09ZTtjYXNlIDc6cmV0dXJuImRlZmF1bHQiPT09ZXx8ImZpbmFsbHkiPT09ZXx8ImV4dGVuZHMiPT09ZTtjYXNlIDg6cmV0dXJuImZ1bmN0aW9uIj09PWV8fCJjb250aW51ZSI9PT1lfHwiZGVidWdnZXIiPT09ZTtjYXNlIDEwOnJldHVybiJpbnN0YW5jZW9mIj09PWU7ZGVmYXVsdDpyZXR1cm4hMX19LGUucHJvdG90eXBlLmNvZGVQb2ludEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc291cmNlLmNoYXJDb2RlQXQoZSk7aWYodD49NTUyOTYmJnQ8PTU2MzE5KXt2YXIgbj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGUrMSk7aWYobj49NTYzMjAmJm48PTU3MzQzKXt0PTEwMjQqKHQtNTUyOTYpK24tNTYzMjArNjU1MzZ9fXJldHVybiB0fSxlLnByb3RvdHlwZS5zY2FuSGV4RXNjYXBlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0idSI9PT1lPzQ6MixuPTAsbz0wO288dDsrK28pe2lmKHRoaXMuZW9mKCl8fCFpLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXJldHVybiBudWxsO249MTYqbityKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pfXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSxlLnByb3RvdHlwZS5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLHQ9MDtmb3IoIn0iPT09ZSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOyF0aGlzLmVvZigpJiYoZT10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdLGkuQ2hhcmFjdGVyLmlzSGV4RGlnaXQoZS5jaGFyQ29kZUF0KDApKSk7KXQ9MTYqdCtyKGUpO3JldHVybih0PjExMTQxMTF8fCJ9IiE9PWUpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksaS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludCh0KX0sZS5wcm90b3R5cGUuZ2V0SWRlbnRpZmllcj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmluZGV4Kys7IXRoaXMuZW9mKCk7KXt2YXIgdD10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKDkyPT09dClyZXR1cm4gdGhpcy5pbmRleD1lLHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTtpZih0Pj01NTI5NiYmdDw1NzM0MylyZXR1cm4gdGhpcy5pbmRleD1lLHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTtpZighaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydCh0KSlicmVhazsrK3RoaXMuaW5kZXh9cmV0dXJuIHRoaXMuc291cmNlLnNsaWNlKGUsdGhpcy5pbmRleCl9LGUucHJvdG90eXBlLmdldENvbXBsZXhJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KSx0PWkuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoZSk7dGhpcy5pbmRleCs9dC5sZW5ndGg7dmFyIG47Zm9yKDkyPT09ZSYmKDExNyE9PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSwrK3RoaXMuaW5kZXgsInsiPT09dGhpcy5zb3VyY2VbdGhpcy5pbmRleF0/KCsrdGhpcy5pbmRleCxuPXRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKSk6bnVsbCE9PShuPXRoaXMuc2NhbkhleEVzY2FwZSgidSIpKSYmIlxcIiE9PW4mJmkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KG4uY2hhckNvZGVBdCgwKSl8fHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx0PW4pOyF0aGlzLmVvZigpJiYoZT10aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpLGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoZSkpOyluPWkuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoZSksdCs9bix0aGlzLmluZGV4Kz1uLmxlbmd0aCw5Mj09PWUmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSksMTE3IT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLCsrdGhpcy5pbmRleCwieyI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XT8oKyt0aGlzLmluZGV4LG49dGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpKTpudWxsIT09KG49dGhpcy5zY2FuSGV4RXNjYXBlKCJ1IikpJiYiXFwiIT09biYmaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChuLmNoYXJDb2RlQXQoMCkpfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksdCs9bik7cmV0dXJuIHR9LGUucHJvdG90eXBlLm9jdGFsVG9EZWNpbWFsPWZ1bmN0aW9uKGUpe3ZhciB0PSIwIiE9PWUsbj1vKGUpO3JldHVybiF0aGlzLmVvZigpJiZpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkmJih0PSEwLG49OCpuK28odGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSksIjAxMjMiLmluZGV4T2YoZSk+PTAmJiF0aGlzLmVvZigpJiZpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkmJihuPTgqbitvKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pKSkse2NvZGU6bixvY3RhbDp0fX0sZS5wcm90b3R5cGUuc2NhbklkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuaW5kZXgsbj05Mj09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodCk/dGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpOnRoaXMuZ2V0SWRlbnRpZmllcigpO2lmKDMhPT0oZT0xPT09bi5sZW5ndGg/Mzp0aGlzLmlzS2V5d29yZChuKT80OiJudWxsIj09PW4/NToidHJ1ZSI9PT1ufHwiZmFsc2UiPT09bj8xOjMpJiZ0K24ubGVuZ3RoIT09dGhpcy5pbmRleCl7dmFyIHI9dGhpcy5pbmRleDt0aGlzLmluZGV4PXQsdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihhLk1lc3NhZ2VzLkludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkKSx0aGlzLmluZGV4PXJ9cmV0dXJue3R5cGU6ZSx2YWx1ZTpuLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDp0LGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhblB1bmN0dWF0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluZGV4LHQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleF07c3dpdGNoKHQpe2Nhc2UiKCI6Y2FzZSJ7IjoieyI9PT10JiZ0aGlzLmN1cmx5U3RhY2sucHVzaCgieyIpLCsrdGhpcy5pbmRleDticmVhaztjYXNlIi4iOisrdGhpcy5pbmRleCwiLiI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSYmIi4iPT09dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsxXSYmKHRoaXMuaW5kZXgrPTIsdD0iLi4uIik7YnJlYWs7Y2FzZSJ9IjorK3RoaXMuaW5kZXgsdGhpcy5jdXJseVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UiKSI6Y2FzZSI7IjpjYXNlIiwiOmNhc2UiWyI6Y2FzZSJdIjpjYXNlIjoiOmNhc2UiPyI6Y2FzZSJ+IjorK3RoaXMuaW5kZXg7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuc291cmNlLnN1YnN0cih0aGlzLmluZGV4LDQpLCI+Pj49Ij09PXQ/dGhpcy5pbmRleCs9NDoodD10LnN1YnN0cigwLDMpLCI9PT0iPT09dHx8IiE9PSI9PT10fHwiPj4+Ij09PXR8fCI8PD0iPT09dHx8Ij4+PSI9PT10fHwiKio9Ij09PXQ/dGhpcy5pbmRleCs9MzoodD10LnN1YnN0cigwLDIpLCImJiI9PT10fHwifHwiPT09dHx8Ij09Ij09PXR8fCIhPSI9PT10fHwiKz0iPT09dHx8Ii09Ij09PXR8fCIqPSI9PT10fHwiLz0iPT09dHx8IisrIj09PXR8fCItLSI9PT10fHwiPDwiPT09dHx8Ij4+Ij09PXR8fCImPSI9PT10fHwifD0iPT09dHx8Il49Ij09PXR8fCIlPSI9PT10fHwiPD0iPT09dHx8Ij49Ij09PXR8fCI9PiI9PT10fHwiKioiPT09dD90aGlzLmluZGV4Kz0yOih0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCI8Pj0hKy0qJSZ8Xi8iLmluZGV4T2YodCk+PTAmJisrdGhpcy5pbmRleCkpKX1yZXR1cm4gdGhpcy5pbmRleD09PWUmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx7dHlwZTo3LHZhbHVlOnQsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fSxlLnByb3RvdHlwZS5zY2FuSGV4TGl0ZXJhbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IiI7IXRoaXMuZW9mKCkmJmkuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSk7KXQrPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107cmV0dXJuIDA9PT10Lmxlbmd0aCYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkse3R5cGU6Nix2YWx1ZTpwYXJzZUludCgiMHgiK3QsMTYpLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhbkJpbmFyeUxpdGVyYWw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiI7IXRoaXMuZW9mKCkmJigiMCI9PT0odD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSl8fCIxIj09PXQpOyluKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO3JldHVybiAwPT09bi5sZW5ndGgmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx0aGlzLmVvZigpfHwodD10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpLChpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0KXx8aS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkpLHt0eXBlOjYsdmFsdWU6cGFyc2VJbnQobiwyKSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iIixyPSExO2ZvcihpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoZS5jaGFyQ29kZUF0KDApKT8ocj0hMCxuPSIwIit0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTorK3RoaXMuaW5kZXg7IXRoaXMuZW9mKCkmJmkuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKTspbis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtyZXR1cm4gcnx8MCE9PW4ubGVuZ3RofHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCksKGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpfHxpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSx7dHlwZTo2LHZhbHVlOnBhcnNlSW50KG4sOCksb2N0YWw6cixsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6dCxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLmlzSW1wbGljaXRPY3RhbExpdGVyYWw9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5pbmRleCsxO2U8dGhpcy5sZW5ndGg7KytlKXt2YXIgdD10aGlzLnNvdXJjZVtlXTtpZigiOCI9PT10fHwiOSI9PT10KXJldHVybiExO2lmKCFpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodC5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMH1yZXR1cm4hMH0sZS5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleCx0PXRoaXMuc291cmNlW2VdO3MuYXNzZXJ0KGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHQuY2hhckNvZGVBdCgwKSl8fCIuIj09PXQsIk51bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCIpO3ZhciBuPSIiO2lmKCIuIiE9PXQpe2lmKG49dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCIwIj09PW4pe2lmKCJ4Ij09PXR8fCJYIj09PXQpcmV0dXJuKyt0aGlzLmluZGV4LHRoaXMuc2NhbkhleExpdGVyYWwoZSk7aWYoImIiPT09dHx8IkIiPT09dClyZXR1cm4rK3RoaXMuaW5kZXgsdGhpcy5zY2FuQmluYXJ5TGl0ZXJhbChlKTtpZigibyI9PT10fHwiTyI9PT10KXJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwodCxlKTtpZih0JiZpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodC5jaGFyQ29kZUF0KDApKSYmdGhpcy5pc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkpcmV0dXJuIHRoaXMuc2Nhbk9jdGFsTGl0ZXJhbCh0LGUpfWZvcig7aS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSk7KW4rPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107dD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XX1pZigiLiI9PT10KXtmb3Iobis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKTspbis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTt0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdfWlmKCJlIj09PXR8fCJFIj09PXQpaWYobis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdLCIrIiE9PXQmJiItIiE9PXR8fChuKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKSxpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSlmb3IoO2kuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpOyluKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO2Vsc2UgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO3JldHVybiBpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLHt0eXBlOjYsdmFsdWU6cGFyc2VGbG9hdChuKSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19LGUucHJvdG90eXBlLnNjYW5TdHJpbmdMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleCx0PXRoaXMuc291cmNlW2VdO3MuYXNzZXJ0KCInIj09PXR8fCciJz09PXQsIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZSIpLCsrdGhpcy5pbmRleDtmb3IodmFyIG49ITEscj0iIjshdGhpcy5lb2YoKTspe3ZhciBvPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107aWYobz09PXQpe3Q9IiI7YnJlYWt9aWYoIlxcIj09PW8paWYoKG89dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSkmJmkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3Ioby5jaGFyQ29kZUF0KDApKSkrK3RoaXMubGluZU51bWJlciwiXHIiPT09byYmIlxuIj09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdJiYrK3RoaXMuaW5kZXgsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleDtlbHNlIHN3aXRjaChvKXtjYXNlInUiOmlmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSsrdGhpcy5pbmRleCxyKz10aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7ZWxzZXt2YXIgbD10aGlzLnNjYW5IZXhFc2NhcGUobyk7bnVsbD09PWwmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKSxyKz1sfWJyZWFrO2Nhc2UieCI6dmFyIHU9dGhpcy5zY2FuSGV4RXNjYXBlKG8pO251bGw9PT11JiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGEuTWVzc2FnZXMuSW52YWxpZEhleEVzY2FwZVNlcXVlbmNlKSxyKz11O2JyZWFrO2Nhc2UibiI6cis9IlxuIjticmVhaztjYXNlInIiOnIrPSJcciI7YnJlYWs7Y2FzZSJ0IjpyKz0iXHQiO2JyZWFrO2Nhc2UiYiI6cis9IlxiIjticmVhaztjYXNlImYiOnIrPSJcZiI7YnJlYWs7Y2FzZSJ2IjpyKz0iXHYiO2JyZWFrO2Nhc2UiOCI6Y2FzZSI5IjpyKz1vLHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTticmVhaztkZWZhdWx0OmlmKG8mJmkuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChvLmNoYXJDb2RlQXQoMCkpKXt2YXIgYz10aGlzLm9jdGFsVG9EZWNpbWFsKG8pO249Yy5vY3RhbHx8bixyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMuY29kZSl9ZWxzZSByKz1vfWVsc2V7aWYoaS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihvLmNoYXJDb2RlQXQoMCkpKWJyZWFrO3IrPW99fXJldHVybiIiIT09dCYmKHRoaXMuaW5kZXg9ZSx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCkpLHt0eXBlOjgsdmFsdWU6cixvY3RhbDpuLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUuc2NhblRlbXBsYXRlPWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD0hMSxuPXRoaXMuaW5kZXgscj0iYCI9PT10aGlzLnNvdXJjZVtuXSxvPSExLHM9Mjtmb3IoKyt0aGlzLmluZGV4OyF0aGlzLmVvZigpOyl7dmFyIGw9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpZigiYCI9PT1sKXtzPTEsbz0hMCx0PSEwO2JyZWFrfWlmKCIkIj09PWwpe2lmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKXt0aGlzLmN1cmx5U3RhY2sucHVzaCgiJHsiKSwrK3RoaXMuaW5kZXgsdD0hMDticmVha31lKz1sfWVsc2UgaWYoIlxcIj09PWwpaWYobD10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdLGkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IobC5jaGFyQ29kZUF0KDApKSkrK3RoaXMubGluZU51bWJlciwiXHIiPT09bCYmIlxuIj09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdJiYrK3RoaXMuaW5kZXgsdGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleDtlbHNlIHN3aXRjaChsKXtjYXNlIm4iOmUrPSJcbiI7YnJlYWs7Y2FzZSJyIjplKz0iXHIiO2JyZWFrO2Nhc2UidCI6ZSs9Ilx0IjticmVhaztjYXNlInUiOmlmKCJ7Ij09PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSsrdGhpcy5pbmRleCxlKz10aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7ZWxzZXt2YXIgdT10aGlzLmluZGV4LGM9dGhpcy5zY2FuSGV4RXNjYXBlKGwpO251bGwhPT1jP2UrPWM6KHRoaXMuaW5kZXg9dSxlKz1sKX1icmVhaztjYXNlIngiOnZhciBkPXRoaXMuc2NhbkhleEVzY2FwZShsKTtudWxsPT09ZCYmdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihhLk1lc3NhZ2VzLkludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZSksZSs9ZDticmVhaztjYXNlImIiOmUrPSJcYiI7YnJlYWs7Y2FzZSJmIjplKz0iXGYiO2JyZWFrO2Nhc2UidiI6ZSs9Ilx2IjticmVhaztkZWZhdWx0OiIwIj09PWw/KGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpJiZ0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGEuTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpLGUrPSJcMCIpOmkuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChsLmNoYXJDb2RlQXQoMCkpP3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oYS5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk6ZSs9bH1lbHNlIGkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IobC5jaGFyQ29kZUF0KDApKT8oKyt0aGlzLmxpbmVOdW1iZXIsIlxyIj09PWwmJiJcbiI9PT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XSYmKyt0aGlzLmluZGV4LHRoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXgsZSs9IlxuIik6ZSs9bH1yZXR1cm4gdHx8dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpLHJ8fHRoaXMuY3VybHlTdGFjay5wb3AoKSx7dHlwZToxMCx2YWx1ZTp0aGlzLnNvdXJjZS5zbGljZShuKzEsdGhpcy5pbmRleC1zKSxjb29rZWQ6ZSxoZWFkOnIsdGFpbDpvLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDpuLGVuZDp0aGlzLmluZGV4fX0sZS5wcm90b3R5cGUudGVzdFJlZ0V4cD1mdW5jdGlvbihlLHQpe3ZhciBuPWUscj10aGlzO3QuaW5kZXhPZigidSIpPj0wJiYobj1uLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXBhcnNlSW50KHR8fG4sMTYpO3JldHVybiBvPjExMTQxMTEmJnIudGhyb3dVbmV4cGVjdGVkVG9rZW4oYS5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKSxvPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKG8pOiLvv78ifSkucmVwbGFjZSgvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csIu+/vyIpKTt0cnl7UmVnRXhwKG4pfWNhdGNoKGUpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oYS5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKX10cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGUucHJvdG90eXBlLnNjYW5SZWdFeHBCb2R5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleF07cy5hc3NlcnQoIi8iPT09ZSwiUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2giKTtmb3IodmFyIHQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSxuPSExLHI9ITE7IXRoaXMuZW9mKCk7KWlmKGU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSx0Kz1lLCJcXCI9PT1lKWU9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSxpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkmJnRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oYS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApLHQrPWU7ZWxzZSBpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkpdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihhLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7ZWxzZSBpZihuKSJdIj09PWUmJihuPSExKTtlbHNle2lmKCIvIj09PWUpe3I9ITA7YnJlYWt9IlsiPT09ZSYmKG49ITApfXJldHVybiByfHx0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGEuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKSx0LnN1YnN0cigxLHQubGVuZ3RoLTIpfSxlLnByb3RvdHlwZS5zY2FuUmVnRXhwRmxhZ3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD0iIjshdGhpcy5lb2YoKTspe3ZhciBuPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdO2lmKCFpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KG4uY2hhckNvZGVBdCgwKSkpYnJlYWs7aWYoKyt0aGlzLmluZGV4LCJcXCIhPT1ufHx0aGlzLmVvZigpKXQrPW4sZSs9bjtlbHNlIGlmKCJ1Ij09PShuPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdKSl7Kyt0aGlzLmluZGV4O3ZhciByPXRoaXMuaW5kZXgsbz10aGlzLnNjYW5IZXhFc2NhcGUoInUiKTtpZihudWxsIT09bylmb3IodCs9byxlKz0iXFx1IjtyPHRoaXMuaW5kZXg7KytyKWUrPXRoaXMuc291cmNlW3JdO2Vsc2UgdGhpcy5pbmRleD1yLHQrPSJ1IixlKz0iXFx1Ijt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCl9ZWxzZSBlKz0iXFwiLHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuc2NhblJlZ0V4cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW5kZXgsdD10aGlzLnNjYW5SZWdFeHBCb2R5KCksbj10aGlzLnNjYW5SZWdFeHBGbGFncygpO3JldHVybnt0eXBlOjksdmFsdWU6IiIscGF0dGVybjp0LGZsYWdzOm4scmVnZXg6dGhpcy50ZXN0UmVnRXhwKHQsbiksbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmVvZigpKXJldHVybnt0eXBlOjIsdmFsdWU6IiIsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OnRoaXMuaW5kZXgsZW5kOnRoaXMuaW5kZXh9O3ZhciBlPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7cmV0dXJuIGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGUpP3RoaXMuc2NhbklkZW50aWZpZXIoKTo0MD09PWV8fDQxPT09ZXx8NTk9PT1lP3RoaXMuc2NhblB1bmN0dWF0b3IoKTozOT09PWV8fDM0PT09ZT90aGlzLnNjYW5TdHJpbmdMaXRlcmFsKCk6NDY9PT1lP2kuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSk/dGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTp0aGlzLnNjYW5QdW5jdHVhdG9yKCk6aS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoZSk/dGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTo5Nj09PWV8fDEyNT09PWUmJiIkeyI9PT10aGlzLmN1cmx5U3RhY2tbdGhpcy5jdXJseVN0YWNrLmxlbmd0aC0xXT90aGlzLnNjYW5UZW1wbGF0ZSgpOmU+PTU1Mjk2JiZlPDU3MzQzJiZpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKT90aGlzLnNjYW5JZGVudGlmaWVyKCk6dGhpcy5zY2FuUHVuY3R1YXRvcigpfSxlfSgpO3QuU2Nhbm5lcj1sfSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ub2tlbk5hbWU9e30sdC5Ub2tlbk5hbWVbMV09IkJvb2xlYW4iLHQuVG9rZW5OYW1lWzJdPSI8ZW5kPiIsdC5Ub2tlbk5hbWVbM109IklkZW50aWZpZXIiLHQuVG9rZW5OYW1lWzRdPSJLZXl3b3JkIix0LlRva2VuTmFtZVs1XT0iTnVsbCIsdC5Ub2tlbk5hbWVbNl09Ik51bWVyaWMiLHQuVG9rZW5OYW1lWzddPSJQdW5jdHVhdG9yIix0LlRva2VuTmFtZVs4XT0iU3RyaW5nIix0LlRva2VuTmFtZVs5XT0iUmVndWxhckV4cHJlc3Npb24iLHQuVG9rZW5OYW1lWzEwXT0iVGVtcGxhdGUifSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YSFRNTEVudGl0aWVzPXtxdW90OiciJyxhbXA6IiYiLGFwb3M6IiciLGd0OiI+IixuYnNwOiLCoCIsaWV4Y2w6IsKhIixjZW50OiLCoiIscG91bmQ6IsKjIixjdXJyZW46IsKkIix5ZW46IsKlIixicnZiYXI6IsKmIixzZWN0OiLCpyIsdW1sOiLCqCIsY29weToiwqkiLG9yZGY6IsKqIixsYXF1bzoiwqsiLG5vdDoiwqwiLHNoeToiwq0iLHJlZzoiwq4iLG1hY3I6IsKvIixkZWc6IsKwIixwbHVzbW46IsKxIixzdXAyOiLCsiIsc3VwMzoiwrMiLGFjdXRlOiLCtCIsbWljcm86IsK1IixwYXJhOiLCtiIsbWlkZG90OiLCtyIsY2VkaWw6IsK4IixzdXAxOiLCuSIsb3JkbToiwroiLHJhcXVvOiLCuyIsZnJhYzE0OiLCvCIsZnJhYzEyOiLCvSIsZnJhYzM0OiLCviIsaXF1ZXN0OiLCvyIsQWdyYXZlOiLDgCIsQWFjdXRlOiLDgSIsQWNpcmM6IsOCIixBdGlsZGU6IsODIixBdW1sOiLDhCIsQXJpbmc6IsOFIixBRWxpZzoiw4YiLENjZWRpbDoiw4ciLEVncmF2ZToiw4giLEVhY3V0ZToiw4kiLEVjaXJjOiLDiiIsRXVtbDoiw4siLElncmF2ZToiw4wiLElhY3V0ZToiw40iLEljaXJjOiLDjiIsSXVtbDoiw48iLEVUSDoiw5AiLE50aWxkZToiw5EiLE9ncmF2ZToiw5IiLE9hY3V0ZToiw5MiLE9jaXJjOiLDlCIsT3RpbGRlOiLDlSIsT3VtbDoiw5YiLHRpbWVzOiLDlyIsT3NsYXNoOiLDmCIsVWdyYXZlOiLDmSIsVWFjdXRlOiLDmiIsVWNpcmM6IsObIixVdW1sOiLDnCIsWWFjdXRlOiLDnSIsVEhPUk46IsOeIixzemxpZzoiw58iLGFncmF2ZToiw6AiLGFhY3V0ZToiw6EiLGFjaXJjOiLDoiIsYXRpbGRlOiLDoyIsYXVtbDoiw6QiLGFyaW5nOiLDpSIsYWVsaWc6IsOmIixjY2VkaWw6IsOnIixlZ3JhdmU6IsOoIixlYWN1dGU6IsOpIixlY2lyYzoiw6oiLGV1bWw6IsOrIixpZ3JhdmU6IsOsIixpYWN1dGU6IsOtIixpY2lyYzoiw64iLGl1bWw6IsOvIixldGg6IsOwIixudGlsZGU6IsOxIixvZ3JhdmU6IsOyIixvYWN1dGU6IsOzIixvY2lyYzoiw7QiLG90aWxkZToiw7UiLG91bWw6IsO2IixkaXZpZGU6IsO3Iixvc2xhc2g6IsO4Iix1Z3JhdmU6IsO5Iix1YWN1dGU6IsO6Iix1Y2lyYzoiw7siLHV1bWw6IsO8Iix5YWN1dGU6IsO9Iix0aG9ybjoiw74iLHl1bWw6IsO/IixPRWxpZzoixZIiLG9lbGlnOiLFkyIsU2Nhcm9uOiLFoCIsc2Nhcm9uOiLFoSIsWXVtbDoixbgiLGZub2Y6IsaSIixjaXJjOiLLhiIsdGlsZGU6IsucIixBbHBoYToizpEiLEJldGE6Is6SIixHYW1tYToizpMiLERlbHRhOiLOlCIsRXBzaWxvbjoizpUiLFpldGE6Is6WIixFdGE6Is6XIixUaGV0YToizpgiLElvdGE6Is6ZIixLYXBwYToizpoiLExhbWJkYToizpsiLE11OiLOnCIsTnU6Is6dIixYaToizp4iLE9taWNyb246Is6fIixQaToizqAiLFJobzoizqEiLFNpZ21hOiLOoyIsVGF1OiLOpCIsVXBzaWxvbjoizqUiLFBoaToizqYiLENoaToizqciLFBzaToizqgiLE9tZWdhOiLOqSIsYWxwaGE6Is6xIixiZXRhOiLOsiIsZ2FtbWE6Is6zIixkZWx0YToizrQiLGVwc2lsb246Is61Iix6ZXRhOiLOtiIsZXRhOiLOtyIsdGhldGE6Is64Iixpb3RhOiLOuSIsa2FwcGE6Is66IixsYW1iZGE6Is67IixtdToizrwiLG51OiLOvSIseGk6Is6+IixvbWljcm9uOiLOvyIscGk6Is+AIixyaG86Is+BIixzaWdtYWY6Is+CIixzaWdtYToiz4MiLHRhdToiz4QiLHVwc2lsb246Is+FIixwaGk6Is+GIixjaGk6Is+HIixwc2k6Is+IIixvbWVnYToiz4kiLHRoZXRhc3ltOiLPkSIsdXBzaWg6Is+SIixwaXY6Is+WIixlbnNwOiLigIIiLGVtc3A6IuKAgyIsdGhpbnNwOiLigIkiLHp3bmo6IuKAjCIsendqOiLigI0iLGxybToi4oCOIixybG06IuKAjyIsbmRhc2g6IuKAkyIsbWRhc2g6IuKAlCIsbHNxdW86IuKAmCIscnNxdW86IuKAmSIsc2JxdW86IuKAmiIsbGRxdW86IuKAnCIscmRxdW86IuKAnSIsYmRxdW86IuKAniIsZGFnZ2VyOiLigKAiLERhZ2dlcjoi4oChIixidWxsOiLigKIiLGhlbGxpcDoi4oCmIixwZXJtaWw6IuKAsCIscHJpbWU6IuKAsiIsUHJpbWU6IuKAsyIsbHNhcXVvOiLigLkiLHJzYXF1bzoi4oC6IixvbGluZToi4oC+IixmcmFzbDoi4oGEIixldXJvOiLigqwiLGltYWdlOiLihJEiLHdlaWVycDoi4oSYIixyZWFsOiLihJwiLHRyYWRlOiLihKIiLGFsZWZzeW06IuKEtSIsbGFycjoi4oaQIix1YXJyOiLihpEiLHJhcnI6IuKGkiIsZGFycjoi4oaTIixoYXJyOiLihpQiLGNyYXJyOiLihrUiLGxBcnI6IuKHkCIsdUFycjoi4oeRIixyQXJyOiLih5IiLGRBcnI6IuKHkyIsaEFycjoi4oeUIixmb3JhbGw6IuKIgCIscGFydDoi4oiCIixleGlzdDoi4oiDIixlbXB0eToi4oiFIixuYWJsYToi4oiHIixpc2luOiLiiIgiLG5vdGluOiLiiIkiLG5pOiLiiIsiLHByb2Q6IuKIjyIsc3VtOiLiiJEiLG1pbnVzOiLiiJIiLGxvd2FzdDoi4oiXIixyYWRpYzoi4oiaIixwcm9wOiLiiJ0iLGluZmluOiLiiJ4iLGFuZzoi4oigIixhbmQ6IuKIpyIsb3I6IuKIqCIsY2FwOiLiiKkiLGN1cDoi4oiqIixpbnQ6IuKIqyIsdGhlcmU0OiLiiLQiLHNpbToi4oi8Iixjb25nOiLiiYUiLGFzeW1wOiLiiYgiLG5lOiLiiaAiLGVxdWl2OiLiiaEiLGxlOiLiiaQiLGdlOiLiiaUiLHN1Yjoi4oqCIixzdXA6IuKKgyIsbnN1Yjoi4oqEIixzdWJlOiLiioYiLHN1cGU6IuKKhyIsb3BsdXM6IuKKlSIsb3RpbWVzOiLiipciLHBlcnA6IuKKpSIsc2RvdDoi4ouFIixsY2VpbDoi4oyIIixyY2VpbDoi4oyJIixsZmxvb3I6IuKMiiIscmZsb29yOiLijIsiLGxvejoi4peKIixzcGFkZXM6IuKZoCIsY2x1YnM6IuKZoyIsaGVhcnRzOiLimaUiLGRpYW1zOiLimaYiLGxhbmc6IuKfqCIscmFuZzoi4p+pIn19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLG89bigxMikscz1uKDEzKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudmFsdWVzPVtdLHRoaXMuY3VybHk9dGhpcy5wYXJlbj0tMX1yZXR1cm4gZS5wcm90b3R5cGUuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVyblsiKCIsInsiLCJbIiwiaW4iLCJ0eXBlb2YiLCJpbnN0YW5jZW9mIiwibmV3IiwicmV0dXJuIiwiY2FzZSIsImRlbGV0ZSIsInRocm93Iiwidm9pZCIsIj0iLCIrPSIsIi09IiwiKj0iLCIqKj0iLCIvPSIsIiU9IiwiPDw9IiwiPj49IiwiPj4+PSIsIiY9IiwifD0iLCJePSIsIiwiLCIrIiwiLSIsIioiLCIqKiIsIi8iLCIlIiwiKysiLCItLSIsIjw8IiwiPj4iLCI+Pj4iLCImIiwifCIsIl4iLCIhIiwifiIsIiYmIiwifHwiLCI/IiwiOiIsIj09PSIsIj09IiwiPj0iLCI8PSIsIjwiLCI+IiwiIT0iLCIhPT0iXS5pbmRleE9mKGUpPj0wfSxlLnByb3RvdHlwZS5pc1JlZ2V4U3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlc1t0aGlzLnZhbHVlcy5sZW5ndGgtMV0sdD1udWxsIT09ZTtzd2l0Y2goZSl7Y2FzZSJ0aGlzIjpjYXNlIl0iOnQ9ITE7YnJlYWs7Y2FzZSIpIjp2YXIgbj10aGlzLnZhbHVlc1t0aGlzLnBhcmVuLTFdO3Q9ImlmIj09PW58fCJ3aGlsZSI9PT1ufHwiZm9yIj09PW58fCJ3aXRoIj09PW47YnJlYWs7Y2FzZSJ9IjppZih0PSExLCJmdW5jdGlvbiI9PT10aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTNdKXt2YXIgcj10aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTRdO3Q9ISFyJiYhdGhpcy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24ocil9ZWxzZSBpZigiZnVuY3Rpb24iPT09dGhpcy52YWx1ZXNbdGhpcy5jdXJseS00XSl7dmFyIHI9dGhpcy52YWx1ZXNbdGhpcy5jdXJseS01XTt0PSFyfHwhdGhpcy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24ocil9fXJldHVybiB0fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpezc9PT1lLnR5cGV8fDQ9PT1lLnR5cGU/KCJ7Ij09PWUudmFsdWU/dGhpcy5jdXJseT10aGlzLnZhbHVlcy5sZW5ndGg6IigiPT09ZS52YWx1ZSYmKHRoaXMucGFyZW49dGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnZhbHVlcy5wdXNoKGUudmFsdWUpKTp0aGlzLnZhbHVlcy5wdXNoKG51bGwpfSxlfSgpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5lcnJvckhhbmRsZXI9bmV3IHIuRXJyb3JIYW5kbGVyLHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50PSEhdCYmKCJib29sZWFuIj09dHlwZW9mIHQudG9sZXJhbnQmJnQudG9sZXJhbnQpLHRoaXMuc2Nhbm5lcj1uZXcgby5TY2FubmVyKGUsdGhpcy5lcnJvckhhbmRsZXIpLHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQ9ISF0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5jb21tZW50JiZ0LmNvbW1lbnQpLHRoaXMudHJhY2tSYW5nZT0hIXQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LnJhbmdlJiZ0LnJhbmdlKSx0aGlzLnRyYWNrTG9jPSEhdCYmKCJib29sZWFuIj09dHlwZW9mIHQubG9jJiZ0LmxvYyksdGhpcy5idWZmZXI9W10sdGhpcy5yZWFkZXI9bmV3IGl9cmV0dXJuIGUucHJvdG90eXBlLmVycm9ycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9ySGFuZGxlci5lcnJvcnN9LGUucHJvdG90eXBlLmdldE5leHRUb2tlbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmJ1ZmZlci5sZW5ndGgpe3ZhciBlPXRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTtpZih0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50KWZvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXt2YXIgbj1lW3RdLHI9dGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShuLnNsaWNlWzBdLG4uc2xpY2VbMV0pLG89e3R5cGU6bi5tdWx0aUxpbmU/IkJsb2NrQ29tbWVudCI6IkxpbmVDb21tZW50Iix2YWx1ZTpyfTt0aGlzLnRyYWNrUmFuZ2UmJihvLnJhbmdlPW4ucmFuZ2UpLHRoaXMudHJhY2tMb2MmJihvLmxvYz1uLmxvYyksdGhpcy5idWZmZXIucHVzaChvKX1pZighdGhpcy5zY2FubmVyLmVvZigpKXt2YXIgaT12b2lkIDA7dGhpcy50cmFja0xvYyYmKGk9e3N0YXJ0OntsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydH0sZW5kOnt9fSk7dmFyIGE9Ii8iPT09dGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdJiZ0aGlzLnJlYWRlci5pc1JlZ2V4U3RhcnQoKSxsPWE/dGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTp0aGlzLnNjYW5uZXIubGV4KCk7dGhpcy5yZWFkZXIucHVzaChsKTt2YXIgdT17dHlwZTpzLlRva2VuTmFtZVtsLnR5cGVdLHZhbHVlOnRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UobC5zdGFydCxsLmVuZCl9O2lmKHRoaXMudHJhY2tSYW5nZSYmKHUucmFuZ2U9W2wuc3RhcnQsbC5lbmRdKSx0aGlzLnRyYWNrTG9jJiYoaS5lbmQ9e2xpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fSx1LmxvYz1pKSw5PT09bC50eXBlKXt2YXIgYz1sLnBhdHRlcm4sZD1sLmZsYWdzO3UucmVnZXg9e3BhdHRlcm46YyxmbGFnczpkfX10aGlzLmJ1ZmZlci5wdXNoKHUpfX1yZXR1cm4gdGhpcy5idWZmZXIuc2hpZnQoKX0sZX0oKTt0LlRva2VuaXplcj1hfV0pfSl9LCIuL25vZGVfbW9kdWxlcy9ldmVudC1lbWl0dGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG8scyxpLGEsbCx1LGM9bigiLi9ub2RlX21vZHVsZXMvZC9pbmRleC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKSxfPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSxwPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGY9T2JqZWN0LmNyZWF0ZSxtPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxiPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH07cj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBkKHQpLGcuY2FsbCh0aGlzLCJfX2VlX18iKT9uPXRoaXMuX19lZV9fOihuPWIudmFsdWU9ZihudWxsKSxtKHRoaXMsIl9fZWVfXyIsYiksYi52YWx1ZT1udWxsKSxuW2VdPyJvYmplY3QiPT10eXBlb2YgbltlXT9uW2VdLnB1c2godCk6bltlXT1bbltlXSx0XTpuW2VdPXQsdGhpc30sbz1mdW5jdGlvbihlLHQpe3ZhciBuLG87cmV0dXJuIGQodCksbz10aGlzLHIuY2FsbCh0aGlzLGUsbj1mdW5jdGlvbigpe3MuY2FsbChvLGUsbiksXy5jYWxsKHQsdGhpcyxhcmd1bWVudHMpfSksbi5fX2VlT25jZUxpc3RlbmVyX189dCx0aGlzfSxzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHM7aWYoZCh0KSwhZy5jYWxsKHRoaXMsIl9fZWVfXyIpKXJldHVybiB0aGlzO2lmKG49dGhpcy5fX2VlX18sIW5bZV0pcmV0dXJuIHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZihyPW5bZV0pKWZvcihzPTA7bz1yW3NdOysrcylvIT09dCYmby5fX2VlT25jZUxpc3RlbmVyX18hPT10fHwoMj09PXIubGVuZ3RoP25bZV09cltzPzA6MV06ci5zcGxpY2UocywxKSk7ZWxzZSByIT09dCYmci5fX2VlT25jZUxpc3RlbmVyX18hPT10fHxkZWxldGUgbltlXTtyZXR1cm4gdGhpc30saT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzO2lmKGcuY2FsbCh0aGlzLCJfX2VlX18iKSYmKG89dGhpcy5fX2VlX19bZV0pKWlmKCJvYmplY3QiPT10eXBlb2Ygbyl7Zm9yKG49YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheShuLTEpLHQ9MTt0PG47Kyt0KXNbdC0xXT1hcmd1bWVudHNbdF07Zm9yKG89by5zbGljZSgpLHQ9MDtyPW9bdF07Kyt0KV8uY2FsbChyLHRoaXMscyl9ZWxzZSBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnAuY2FsbChvLHRoaXMpO2JyZWFrO2Nhc2UgMjpwLmNhbGwobyx0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOnAuY2FsbChvLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDpmb3Iobj1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KG4tMSksdD0xO3Q8bjsrK3Qpc1t0LTFdPWFyZ3VtZW50c1t0XTtfLmNhbGwobyx0aGlzLHMpfX0sYT17b246cixvbmNlOm8sb2ZmOnMsZW1pdDppfSxsPXtvbjpjKHIpLG9uY2U6YyhvKSxvZmY6YyhzKSxlbWl0OmMoaSl9LHU9aCh7fSxsKSxlLmV4cG9ydHM9dD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9mKHUpOmgoT2JqZWN0KGUpLGwpfSx0Lm1ldGhvZHM9YX0sIi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1BcnJheS5pc0FycmF5LG89T2JqZWN0LmtleXMscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbiBlKHQsbil7aWYodD09PW4pcmV0dXJuITA7aWYodCYmbiYmIm9iamVjdCI9PXR5cGVvZiB0JiYib2JqZWN0Ij09dHlwZW9mIG4pe3ZhciBpLGEsbCx1PXIodCksYz1yKG4pO2lmKHUmJmMpe2lmKChhPXQubGVuZ3RoKSE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGk9YTswIT1pLS07KWlmKCFlKHRbaV0sbltpXSkpcmV0dXJuITE7cmV0dXJuITB9aWYodSE9YylyZXR1cm4hMTt2YXIgZD10IGluc3RhbmNlb2YgRGF0ZSxfPW4gaW5zdGFuY2VvZiBEYXRlO2lmKGQhPV8pcmV0dXJuITE7aWYoZCYmXylyZXR1cm4gdC5nZXRUaW1lKCk9PW4uZ2V0VGltZSgpO3ZhciBwPXQgaW5zdGFuY2VvZiBSZWdFeHAsZj1uIGluc3RhbmNlb2YgUmVnRXhwO2lmKHAhPWYpcmV0dXJuITE7aWYocCYmZilyZXR1cm4gdC50b1N0cmluZygpPT1uLnRvU3RyaW5nKCk7dmFyIG09byh0KTtpZigoYT1tLmxlbmd0aCkhPT1vKG4pLmxlbmd0aClyZXR1cm4hMTtmb3IoaT1hOzAhPWktLTspaWYoIXMuY2FsbChuLG1baV0pKXJldHVybiExO2ZvcihpPWE7MCE9aS0tOylpZihsPW1baV0sIWUodFtsXSxuW2xdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdCE9PXQmJm4hPT1ufX0sIi4vbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1wYXRjaC9saWIvY29yZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtpZigiIj09dClyZXR1cm4gZTt2YXIgbj17b3A6Il9nZXQiLHBhdGg6dH07cmV0dXJuIG8oZSxuKSxuLnZhbHVlfWZ1bmN0aW9uIG8oZSxuLG8scyl7aWYodm9pZCAwPT09byYmKG89ITEpLHZvaWQgMD09PXMmJihzPSEwKSxvJiYoImZ1bmN0aW9uIj09dHlwZW9mIG8/byhuLDAsZSxuLnBhdGgpOmEobiwwKSksIiI9PT1uLnBhdGgpe3ZhciBpPXtuZXdEb2N1bWVudDplfTtpZigiYWRkIj09PW4ub3ApcmV0dXJuIGkubmV3RG9jdW1lbnQ9bi52YWx1ZSxpO2lmKCJyZXBsYWNlIj09PW4ub3ApcmV0dXJuIGkubmV3RG9jdW1lbnQ9bi52YWx1ZSxpLnJlbW92ZWQ9ZSxpO2lmKCJtb3ZlIj09PW4ub3B8fCJjb3B5Ij09PW4ub3ApcmV0dXJuIGkubmV3RG9jdW1lbnQ9cihlLG4uZnJvbSksIm1vdmUiPT09bi5vcCYmKGkucmVtb3ZlZD1lKSxpO2lmKCJ0ZXN0Ij09PW4ub3Ape2lmKGkudGVzdD1kKGUsbi52YWx1ZSksITE9PT1pLnRlc3QpdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIlRlc3Qgb3BlcmF0aW9uIGZhaWxlZCIsIlRFU1RfT1BFUkFUSU9OX0ZBSUxFRCIsMCxuLGUpO3JldHVybiBpLm5ld0RvY3VtZW50PWUsaX1pZigicmVtb3ZlIj09PW4ub3ApcmV0dXJuIGkucmVtb3ZlZD1lLGkubmV3RG9jdW1lbnQ9bnVsbCxpO2lmKCJfZ2V0Ij09PW4ub3ApcmV0dXJuIG4udmFsdWU9ZSxpO2lmKG8pdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIk9wZXJhdGlvbiBgb3BgIHByb3BlcnR5IGlzIG5vdCBvbmUgb2Ygb3BlcmF0aW9ucyBkZWZpbmVkIGluIFJGQy02OTAyIiwiT1BFUkFUSU9OX09QX0lOVkFMSUQiLDAsbixlKTtyZXR1cm4gaX1zfHwoZT1fLl9kZWVwQ2xvbmUoZSkpO3ZhciBsPW4ucGF0aHx8IiIsdT1sLnNwbGl0KCIvIiksYz1lLG09MSxoPXUubGVuZ3RoLGc9dm9pZCAwLGI9dm9pZCAwLEU9dm9pZCAwO2ZvcihFPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286YTs7KXtpZihiPXVbbV0sbyYmdm9pZCAwPT09ZyYmKHZvaWQgMD09PWNbYl0/Zz11LnNsaWNlKDAsbSkuam9pbigiLyIpOm09PWgtMSYmKGc9bi5wYXRoKSx2b2lkIDAhPT1nJiZFKG4sMCxlLGcpKSxtKyssQXJyYXkuaXNBcnJheShjKSl7aWYoIi0iPT09YiliPWMubGVuZ3RoO2Vsc2V7aWYobyYmIV8uaXNJbnRlZ2VyKGIpKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJFeHBlY3RlZCBhbiB1bnNpZ25lZCBiYXNlLTEwIGludGVnZXIgdmFsdWUsIG1ha2luZyB0aGUgbmV3IHJlZmVyZW5jZWQgdmFsdWUgdGhlIGFycmF5IGVsZW1lbnQgd2l0aCB0aGUgemVyby1iYXNlZCBpbmRleCIsIk9QRVJBVElPTl9QQVRIX0lMTEVHQUxfQVJSQVlfSU5ERVgiLDAsbi5wYXRoLG4pO18uaXNJbnRlZ2VyKGIpJiYoYj1+fmIpfWlmKG0+PWgpe2lmKG8mJiJhZGQiPT09bi5vcCYmYj5jLmxlbmd0aCl0aHJvdyBuZXcgdC5Kc29uUGF0Y2hFcnJvcigiVGhlIHNwZWNpZmllZCBpbmRleCBNVVNUIE5PVCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkiLCJPUEVSQVRJT05fVkFMVUVfT1VUX09GX0JPVU5EUyIsMCxuLnBhdGgsbik7dmFyIGk9ZltuLm9wXS5jYWxsKG4sYyxiLGUpO2lmKCExPT09aS50ZXN0KXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJUZXN0IG9wZXJhdGlvbiBmYWlsZWQiLCJURVNUX09QRVJBVElPTl9GQUlMRUQiLDAsbixlKTtyZXR1cm4gaX19ZWxzZSBpZihiJiYtMSE9Yi5pbmRleE9mKCJ+IikmJihiPV8udW5lc2NhcGVQYXRoQ29tcG9uZW50KGIpKSxtPj1oKXt2YXIgaT1wW24ub3BdLmNhbGwobixjLGIsZSk7aWYoITE9PT1pLnRlc3QpdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIlRlc3Qgb3BlcmF0aW9uIGZhaWxlZCIsIlRFU1RfT1BFUkFUSU9OX0ZBSUxFRCIsMCxuLGUpO3JldHVybiBpfWM9Y1tiXX19ZnVuY3Rpb24gcyhlLG4scixzKXtpZih2b2lkIDA9PT1zJiYocz0hMCksciYmIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIlBhdGNoIHNlcXVlbmNlIG11c3QgYmUgYW4gYXJyYXkiLCJTRVFVRU5DRV9OT1RfQU5fQVJSQVkiKTtzfHwoZT1fLl9kZWVwQ2xvbmUoZSkpO2Zvcih2YXIgaT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MCxsPW4ubGVuZ3RoO2E8bDthKyspaVthXT1vKGUsblthXSxyKSxlPWlbYV0ubmV3RG9jdW1lbnQ7cmV0dXJuIGkubmV3RG9jdW1lbnQ9ZSxpfWZ1bmN0aW9uIGkoZSxuKXt2YXIgcj1vKGUsbik7aWYoITE9PT1yLnRlc3QpdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIlRlc3Qgb3BlcmF0aW9uIGZhaWxlZCIsIlRFU1RfT1BFUkFUSU9OX0ZBSUxFRCIsMCxuLGUpO3JldHVybiByLm5ld0RvY3VtZW50fWZ1bmN0aW9uIGEoZSxuLHIsbyl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8QXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgdC5Kc29uUGF0Y2hFcnJvcigiT3BlcmF0aW9uIGlzIG5vdCBhbiBvYmplY3QiLCJPUEVSQVRJT05fTk9UX0FOX09CSkVDVCIsbixlLHIpO2lmKCFwW2Uub3BdKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJPcGVyYXRpb24gYG9wYCBwcm9wZXJ0eSBpcyBub3Qgb25lIG9mIG9wZXJhdGlvbnMgZGVmaW5lZCBpbiBSRkMtNjkwMiIsIk9QRVJBVElPTl9PUF9JTlZBTElEIixuLGUscik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBhdGgpdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIk9wZXJhdGlvbiBgcGF0aGAgcHJvcGVydHkgaXMgbm90IGEgc3RyaW5nIiwiT1BFUkFUSU9OX1BBVEhfSU5WQUxJRCIsbixlLHIpO2lmKDAhPT1lLnBhdGguaW5kZXhPZigiLyIpJiZlLnBhdGgubGVuZ3RoPjApdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoJ09wZXJhdGlvbiBgcGF0aGAgcHJvcGVydHkgbXVzdCBzdGFydCB3aXRoICIvIicsIk9QRVJBVElPTl9QQVRIX0lOVkFMSUQiLG4sZSxyKTtpZigoIm1vdmUiPT09ZS5vcHx8ImNvcHkiPT09ZS5vcCkmJiJzdHJpbmciIT10eXBlb2YgZS5mcm9tKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJPcGVyYXRpb24gYGZyb21gIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50IChhcHBsaWNhYmxlIGluIGBtb3ZlYCBhbmQgYGNvcHlgIG9wZXJhdGlvbnMpIiwiT1BFUkFUSU9OX0ZST01fUkVRVUlSRUQiLG4sZSxyKTtpZigoImFkZCI9PT1lLm9wfHwicmVwbGFjZSI9PT1lLm9wfHwidGVzdCI9PT1lLm9wKSYmdm9pZCAwPT09ZS52YWx1ZSl0aHJvdyBuZXcgdC5Kc29uUGF0Y2hFcnJvcigiT3BlcmF0aW9uIGB2YWx1ZWAgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgKGFwcGxpY2FibGUgaW4gYGFkZGAsIGByZXBsYWNlYCBhbmQgYHRlc3RgIG9wZXJhdGlvbnMpIiwiT1BFUkFUSU9OX1ZBTFVFX1JFUVVJUkVEIixuLGUscik7aWYoKCJhZGQiPT09ZS5vcHx8InJlcGxhY2UiPT09ZS5vcHx8InRlc3QiPT09ZS5vcCkmJl8uaGFzVW5kZWZpbmVkKGUudmFsdWUpKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJPcGVyYXRpb24gYHZhbHVlYCBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCAoYXBwbGljYWJsZSBpbiBgYWRkYCwgYHJlcGxhY2VgIGFuZCBgdGVzdGAgb3BlcmF0aW9ucykiLCJPUEVSQVRJT05fVkFMVUVfQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEIixuLGUscik7aWYocilpZigiYWRkIj09ZS5vcCl7dmFyIHM9ZS5wYXRoLnNwbGl0KCIvIikubGVuZ3RoLGk9by5zcGxpdCgiLyIpLmxlbmd0aDtpZihzIT09aSsxJiZzIT09aSl0aHJvdyBuZXcgdC5Kc29uUGF0Y2hFcnJvcigiQ2Fubm90IHBlcmZvcm0gYW4gYGFkZGAgb3BlcmF0aW9uIGF0IHRoZSBkZXNpcmVkIHBhdGgiLCJPUEVSQVRJT05fUEFUSF9DQU5OT1RfQUREIixuLGUscil9ZWxzZSBpZigicmVwbGFjZSI9PT1lLm9wfHwicmVtb3ZlIj09PWUub3B8fCJfZ2V0Ij09PWUub3Ape2lmKGUucGF0aCE9PW8pdGhyb3cgbmV3IHQuSnNvblBhdGNoRXJyb3IoIkNhbm5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYXQgYSBwYXRoIHRoYXQgZG9lcyBub3QgZXhpc3QiLCJPUEVSQVRJT05fUEFUSF9VTlJFU09MVkFCTEUiLG4sZSxyKX1lbHNlIGlmKCJtb3ZlIj09PWUub3B8fCJjb3B5Ij09PWUub3Ape3ZhciBhPXtvcDoiX2dldCIscGF0aDplLmZyb20sdmFsdWU6dm9pZCAwfSx1PWwoW2FdLHIpO2lmKHUmJiJPUEVSQVRJT05fUEFUSF9VTlJFU09MVkFCTEUiPT09dS5uYW1lKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJDYW5ub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGZyb20gYSBwYXRoIHRoYXQgZG9lcyBub3QgZXhpc3QiLCJPUEVSQVRJT05fRlJPTV9VTlJFU09MVkFCTEUiLG4sZSxyKX19ZnVuY3Rpb24gbChlLG4scil7dHJ5e2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyB0Lkpzb25QYXRjaEVycm9yKCJQYXRjaCBzZXF1ZW5jZSBtdXN0IGJlIGFuIGFycmF5IiwiU0VRVUVOQ0VfTk9UX0FOX0FSUkFZIik7aWYobilzKF8uX2RlZXBDbG9uZShuKSxfLl9kZWVwQ2xvbmUoZSkscnx8ITApO2Vsc2V7cj1yfHxhO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXIoZVtvXSxvLG4sdm9pZCAwKX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHQuSnNvblBhdGNoRXJyb3IpcmV0dXJuIGU7dGhyb3cgZX19dmFyIHU9e3N0cmljdDohMH0sYz1uKCIuL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiksZD1mdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCx1KX0sXz1uKCIuL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tcGF0Y2gvbGliL2hlbHBlcnMuanMiKTt0Lkpzb25QYXRjaEVycm9yPV8uUGF0Y2hFcnJvcix0LmRlZXBDbG9uZT1fLl9kZWVwQ2xvbmU7dmFyIHA9e2FkZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09dGhpcy52YWx1ZSx7bmV3RG9jdW1lbnQ6bn19LHJlbW92ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtyZXR1cm4gZGVsZXRlIGVbdF0se25ld0RvY3VtZW50Om4scmVtb3ZlZDpyfX0scmVwbGFjZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtyZXR1cm4gZVt0XT10aGlzLnZhbHVlLHtuZXdEb2N1bWVudDpuLHJlbW92ZWQ6cn19LG1vdmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXIobix0aGlzLnBhdGgpO3MmJihzPV8uX2RlZXBDbG9uZShzKSk7dmFyIGk9byhuLHtvcDoicmVtb3ZlIixwYXRoOnRoaXMuZnJvbX0pLnJlbW92ZWQ7cmV0dXJuIG8obix7b3A6ImFkZCIscGF0aDp0aGlzLnBhdGgsdmFsdWU6aX0pLHtuZXdEb2N1bWVudDpuLHJlbW92ZWQ6c319LGNvcHk6ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXIobix0aGlzLmZyb20pO3JldHVybiBvKG4se29wOiJhZGQiLHBhdGg6dGhpcy5wYXRoLHZhbHVlOl8uX2RlZXBDbG9uZShzKX0pLHtuZXdEb2N1bWVudDpufX0sdGVzdDpmdW5jdGlvbihlLHQsbil7cmV0dXJue25ld0RvY3VtZW50Om4sdGVzdDpkKGVbdF0sdGhpcy52YWx1ZSl9fSxfZ2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy52YWx1ZT1lW3RdLHtuZXdEb2N1bWVudDpufX19LGY9e2FkZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIF8uaXNJbnRlZ2VyKHQpP2Uuc3BsaWNlKHQsMCx0aGlzLnZhbHVlKTplW3RdPXRoaXMudmFsdWUse25ld0RvY3VtZW50Om4saW5kZXg6dH19LHJlbW92ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJue25ld0RvY3VtZW50Om4scmVtb3ZlZDplLnNwbGljZSh0LDEpWzBdfX0scmVwbGFjZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtyZXR1cm4gZVt0XT10aGlzLnZhbHVlLHtuZXdEb2N1bWVudDpuLHJlbW92ZWQ6cn19LG1vdmU6cC5tb3ZlLGNvcHk6cC5jb3B5LHRlc3Q6cC50ZXN0LF9nZXQ6cC5fZ2V0fTt0LmdldFZhbHVlQnlQb2ludGVyPXIsdC5hcHBseU9wZXJhdGlvbj1vLHQuYXBwbHlQYXRjaD1zLHQuYXBwbHlSZWR1Y2VyPWksdC52YWxpZGF0b3I9YSx0LnZhbGlkYXRlPWx9LCIuL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tcGF0Y2gvbGliL2R1cGxleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG0uZ2V0KGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZS5vYnNlcnZlcnMuZ2V0KHQpfWZ1bmN0aW9uIHMoZSx0KXtlLm9ic2VydmVycy5kZWxldGUodC5jYWxsYmFjayl9ZnVuY3Rpb24gaShlLHQpe3QudW5vYnNlcnZlKCl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuLGk9W10sYT1yKGUpO2lmKGEpe3ZhciB1PW8oYSx0KTtuPXUmJnUub2JzZXJ2ZXJ9ZWxzZSBhPW5ldyBoKGUpLG0uc2V0KGUsYSk7aWYobilyZXR1cm4gbjtpZihuPXt9LGEudmFsdWU9ZC5fZGVlcENsb25lKGUpLHQpe24uY2FsbGJhY2s9dCxuLm5leHQ9bnVsbDt2YXIgYz1mdW5jdGlvbigpe2wobil9LF89ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobi5uZXh0KSxuLm5leHQ9c2V0VGltZW91dChjKX07InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8od2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLF8pKTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaEV2ZW50KCJvbm1vdXNldXAiLF8pLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hFdmVudCgib25rZXl1cCIsXyksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaEV2ZW50KCJvbm1vdXNlZG93biIsXyksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaEV2ZW50KCJvbmtleWRvd24iLF8pLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hFdmVudCgib25jaGFuZ2UiLF8pKSl9cmV0dXJuIG4ucGF0Y2hlcz1pLG4ub2JqZWN0PWUsbi51bm9ic2VydmU9ZnVuY3Rpb24oKXtsKG4pLGNsZWFyVGltZW91dChuLm5leHQpLHMoYSxuKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyPyh3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsXyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsXykpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGV0YWNoRXZlbnQoIm9ubW91c2V1cCIsXyksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRldGFjaEV2ZW50KCJvbmtleXVwIixfKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGV0YWNoRXZlbnQoIm9ubW91c2Vkb3duIixfKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGV0YWNoRXZlbnQoIm9ua2V5ZG93biIsXykpKX0sYS5vYnNlcnZlcnMuc2V0KHQsbmV3IGcodCxuKSksbn1mdW5jdGlvbiBsKGUpe3ZhciB0PW0uZ2V0KGUub2JqZWN0KTt1KHQudmFsdWUsZS5vYmplY3QsZS5wYXRjaGVzLCIiKSxlLnBhdGNoZXMubGVuZ3RoJiZfLmFwcGx5UGF0Y2godC52YWx1ZSxlLnBhdGNoZXMpO3ZhciBuPWUucGF0Y2hlcztyZXR1cm4gbi5sZW5ndGg+MCYmKGUucGF0Y2hlcz1bXSxlLmNhbGxiYWNrJiZlLmNhbGxiYWNrKG4pKSxufWZ1bmN0aW9uIHUoZSx0LG4scil7aWYodCE9PWUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvSlNPTiYmKHQ9dC50b0pTT04oKSk7Zm9yKHZhciBvPWQuX29iamVjdEtleXModCkscz1kLl9vYmplY3RLZXlzKGUpLGk9ITEsYT1zLmxlbmd0aC0xO2E+PTA7YS0tKXt2YXIgbD1zW2FdLGM9ZVtsXTtpZighZC5oYXNPd25Qcm9wZXJ0eSh0LGwpfHx2b2lkIDA9PT10W2xdJiZ2b2lkIDAhPT1jJiYhMT09PUFycmF5LmlzQXJyYXkodCkpbi5wdXNoKHtvcDoicmVtb3ZlIixwYXRoOnIrIi8iK2QuZXNjYXBlUGF0aENvbXBvbmVudChsKX0pLGk9ITA7ZWxzZXt2YXIgXz10W2xdOyJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIm9iamVjdCI9PXR5cGVvZiBfJiZudWxsIT1fP3UoYyxfLG4scisiLyIrZC5lc2NhcGVQYXRoQ29tcG9uZW50KGwpKTpjIT09XyYmKCEwLG4ucHVzaCh7b3A6InJlcGxhY2UiLHBhdGg6cisiLyIrZC5lc2NhcGVQYXRoQ29tcG9uZW50KGwpLHZhbHVlOmQuX2RlZXBDbG9uZShfKX0pKX19aWYoaXx8by5sZW5ndGghPXMubGVuZ3RoKWZvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO2QuaGFzT3duUHJvcGVydHkoZSxsKXx8dm9pZCAwPT09dFtsXXx8bi5wdXNoKHtvcDoiYWRkIixwYXRoOnIrIi8iK2QuZXNjYXBlUGF0aENvbXBvbmVudChsKSx2YWx1ZTpkLl9kZWVwQ2xvbmUodFtsXSl9KX19fWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1bXTtyZXR1cm4gdShlLHQsbiwiIiksbn12YXIgZD0obigiLi9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1wYXRjaC9saWIvaGVscGVycy5qcyIpKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1wYXRjaC9saWIvY29yZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXBhdGNoL2xpYi9jb3JlLmpzIik7dC5hcHBseU9wZXJhdGlvbj1wLmFwcGx5T3BlcmF0aW9uLHQuYXBwbHlQYXRjaD1wLmFwcGx5UGF0Y2gsdC5hcHBseVJlZHVjZXI9cC5hcHBseVJlZHVjZXIsdC5nZXRWYWx1ZUJ5UG9pbnRlcj1wLmdldFZhbHVlQnlQb2ludGVyLHQudmFsaWRhdGU9cC52YWxpZGF0ZSx0LnZhbGlkYXRvcj1wLnZhbGlkYXRvcjt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tcGF0Y2gvbGliL2hlbHBlcnMuanMiKTt0Lkpzb25QYXRjaEVycm9yPWYuUGF0Y2hFcnJvcix0LmRlZXBDbG9uZT1mLl9kZWVwQ2xvbmUsdC5lc2NhcGVQYXRoQ29tcG9uZW50PWYuZXNjYXBlUGF0aENvbXBvbmVudCx0LnVuZXNjYXBlUGF0aENvbXBvbmVudD1mLnVuZXNjYXBlUGF0aENvbXBvbmVudDt2YXIgbT1uZXcgV2Vha01hcCxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm9ic2VydmVycz1uZXcgTWFwLHRoaXMub2JqPWV9cmV0dXJuIGV9KCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmNhbGxiYWNrPWUsdGhpcy5vYnNlcnZlcj10fXJldHVybiBlfSgpO3QudW5vYnNlcnZlPWksdC5vYnNlcnZlPWEsdC5nZW5lcmF0ZT1sLHQuY29tcGFyZT1jfSwiLi9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXBhdGNoL2xpYi9oZWxwZXJzLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gXy5jYWxsKGUsdCl9ZnVuY3Rpb24gcihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0iIityO3JldHVybiB0fWlmKE9iamVjdC5rZXlzKXJldHVybiBPYmplY3Qua2V5cyhlKTt2YXIgdD1bXTtmb3IodmFyIG8gaW4gZSluKGUsbykmJnQucHVzaChvKTtyZXR1cm4gdH1mdW5jdGlvbiBvKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyOyl7dD1lLmNoYXJDb2RlQXQobik7e2lmKCEodD49NDgmJnQ8PTU3KSlyZXR1cm4hMTtuKyt9fXJldHVybiEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuLTE9PT1lLmluZGV4T2YoIi8iKSYmLTE9PT1lLmluZGV4T2YoIn4iKT9lOmUucmVwbGFjZSgvfi9nLCJ+MCIpLnJlcGxhY2UoL1wvL2csIn4xIil9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcjtmb3IodmFyIG8gaW4gZSlpZihuKGUsbykpe2lmKGVbb109PT10KXJldHVybiBpKG8pKyIvIjtpZigib2JqZWN0Ij09dHlwZW9mIGVbb10mJiIiIT0ocj1sKGVbb10sdCkpKXJldHVybiBpKG8pKyIvIityfXJldHVybiIifWZ1bmN0aW9uIHUoZSx0KXtpZihlPT09dClyZXR1cm4iLyI7dmFyIG49bChlLHQpO2lmKCIiPT09bil0aHJvdyBuZXcgRXJyb3IoIk9iamVjdCBub3QgZm91bmQgaW4gcm9vdCIpO3JldHVybiIvIitufWZ1bmN0aW9uIGMoZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4hMDtpZihlKWlmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZihjKGVbdF0pKXJldHVybiEwfWVsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbz1yKGUpLHM9by5sZW5ndGgsdD0wO3Q8czt0KyspaWYoYyhlW29bdF1dKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO2UucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0sXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuaGFzT3duUHJvcGVydHk9bix0Ll9vYmplY3RLZXlzPXIsdC5fZGVlcENsb25lPW8sdC5pc0ludGVnZXI9cyx0LmVzY2FwZVBhdGhDb21wb25lbnQ9aSx0LnVuZXNjYXBlUGF0aENvbXBvbmVudD1hLHQuX2dldFBhdGhSZWN1cnNpdmU9bCx0LmdldFBhdGg9dSx0Lmhhc1VuZGVmaW5lZD1jO3ZhciBwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxzKXtlLmNhbGwodGhpcyx0KSx0aGlzLm1lc3NhZ2U9dCx0aGlzLm5hbWU9bix0aGlzLmluZGV4PXIsdGhpcy5vcGVyYXRpb249byx0aGlzLnRyZWU9c31yZXR1cm4gZCh0LGUpLHR9KEVycm9yKTt0LlBhdGNoRXJyb3I9cH0sIi4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxzPTI7czxuO3MrKylyW3MtMl09YXJndW1lbnRzW3NdO2lmKG8odCksIWUpe3ZhciBpO2lmKHZvaWQgMD09PXQpaT1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYT0wO2k9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBTdHJpbmcoclthKytdKX0pKSxpLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IGkuZnJhbWVzVG9Qb3A9MSxpfX12YXIgbz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiaW52YXJpYW50KC4uLik6IFNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2ZldGNoLWpzb25wL2J1aWxkL2ZldGNoLWpzb25wLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzOyFmdW5jdGlvbihuLGkpe289W3QsZV0scj1pLHZvaWQgMCE9PShzPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodCxvKTpyKSYmKGUuZXhwb3J0cz1zKX0oMCxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7cmV0dXJuImpzb25wXyIrRGF0ZS5ub3coKSsiXyIrTWF0aC5jZWlsKDFlNSpNYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiByKGUpe3RyeXtkZWxldGUgd2luZG93W2VdfWNhdGNoKHQpe3dpbmRvd1tlXT12b2lkIDB9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dCYmZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0scz1lLGE9dC50aW1lb3V0fHxpLnRpbWVvdXQsbD10Lmpzb25wQ2FsbGJhY2t8fGkuanNvbnBDYWxsYmFjayx1PXZvaWQgMDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxjKXt2YXIgZD10Lmpzb25wQ2FsbGJhY2tGdW5jdGlvbnx8bigpLF89bCsiXyIrZDt3aW5kb3dbZF09ZnVuY3Rpb24oZSl7aSh7b2s6ITAsanNvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9fSksdSYmY2xlYXJUaW1lb3V0KHUpLG8oXykscihkKX0scys9LTE9PT1zLmluZGV4T2YoIj8iKT8iPyI6IiYiO3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Auc2V0QXR0cmlidXRlKCJzcmMiLCIiK3MrbCsiPSIrZCksdC5jaGFyc2V0JiZwLnNldEF0dHJpYnV0ZSgiY2hhcnNldCIsdC5jaGFyc2V0KSxwLmlkPV8sZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChwKSx1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjKG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdCB0byAiK2UrIiB0aW1lZCBvdXQiKSkscihkKSxvKF8pLHdpbmRvd1tkXT1mdW5jdGlvbigpe3IoZCl9fSxhKSxwLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdCB0byAiK2UrIiBmYWlsZWQiKSkscihkKSxvKF8pLHUmJmNsZWFyVGltZW91dCh1KX19KX12YXIgaT17dGltZW91dDo1ZTMsanNvbnBDYWxsYmFjazoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2tGdW5jdGlvbjpudWxsfTt0LmV4cG9ydHM9c30pfSwiLi9ub2RlX21vZHVsZXMvZnNjcmVlbi9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXtmdWxsc2NyZWVuRW5hYmxlZDowLGZ1bGxzY3JlZW5FbGVtZW50OjEscmVxdWVzdEZ1bGxzY3JlZW46MixleGl0RnVsbHNjcmVlbjozLGZ1bGxzY3JlZW5jaGFuZ2U6NCxmdWxsc2NyZWVuZXJyb3I6NX0sbz1bIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciJdLHM9WyJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibW96UmVxdWVzdEZ1bGxTY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5lcnJvciJdLGk9WyJtc0Z1bGxzY3JlZW5FbmFibGVkIiwibXNGdWxsc2NyZWVuRWxlbWVudCIsIm1zUmVxdWVzdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwiTVNGdWxsc2NyZWVuQ2hhbmdlIiwiTVNGdWxsc2NyZWVuRXJyb3IiXSxhPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQ/d2luZG93LmRvY3VtZW50Ont9LGw9ImZ1bGxzY3JlZW5FbmFibGVkImluIGEmJk9iamVjdC5rZXlzKHIpfHxvWzBdaW4gYSYmb3x8c1swXWluIGEmJnN8fGlbMF1pbiBhJiZpfHxbXTt0LmRlZmF1bHQ9e3JlcXVlc3RGdWxsc2NyZWVuOmZ1bmN0aW9uKGUpe3JldHVybiBlW2xbci5yZXF1ZXN0RnVsbHNjcmVlbl1dKCl9LHJlcXVlc3RGdWxsc2NyZWVuRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbFtyLnJlcXVlc3RGdWxsc2NyZWVuXV19LGdldCBleGl0RnVsbHNjcmVlbigpe3JldHVybiBhW2xbci5leGl0RnVsbHNjcmVlbl1dLmJpbmQoYSl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIobFtyW2VdXSx0LG4pfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGxbcltlXV0sdCxuKX0sZ2V0IGZ1bGxzY3JlZW5FbmFibGVkKCl7cmV0dXJuIEJvb2xlYW4oYVtsW3IuZnVsbHNjcmVlbkVuYWJsZWRdXSl9LHNldCBmdWxsc2NyZWVuRW5hYmxlZChlKXt9LGdldCBmdWxsc2NyZWVuRWxlbWVudCgpe3JldHVybiBhW2xbci5mdWxsc2NyZWVuRWxlbWVudF1dfSxzZXQgZnVsbHNjcmVlbkVsZW1lbnQoZSl7fSxnZXQgb25mdWxsc2NyZWVuY2hhbmdlKCl7cmV0dXJuIGFbKCJvbiIrbFtyLmZ1bGxzY3JlZW5jaGFuZ2VdKS50b0xvd2VyQ2FzZSgpXX0sc2V0IG9uZnVsbHNjcmVlbmNoYW5nZShlKXtyZXR1cm4gYVsoIm9uIitsW3IuZnVsbHNjcmVlbmNoYW5nZV0pLnRvTG93ZXJDYXNlKCldPWV9LGdldCBvbmZ1bGxzY3JlZW5lcnJvcigpe3JldHVybiBhWygib24iK2xbci5mdWxsc2NyZWVuZXJyb3JdKS50b0xvd2VyQ2FzZSgpXX0sc2V0IG9uZnVsbHNjcmVlbmVycm9yKGUpe3JldHVybiBhWygib24iK2xbci5mdWxsc2NyZWVuZXJyb3JdKS50b0xvd2VyQ2FzZSgpXT1lfX19LCIuL25vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe3ZhciBuO249InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSxlLmV4cG9ydHM9bn0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9oaWdobGlnaHQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmO2UodCl9KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiByKGUsdCl7dmFyIG49ZSYmZS5leGVjKHQpO3JldHVybiBuJiYwPT09bi5pbmRleH1mdW5jdGlvbiBvKGUpe3JldHVybiB4LnRlc3QoZSl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHIscyxpPWUuY2xhc3NOYW1lKyIgIjtpZihpKz1lLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIixuPUwuZXhlYyhpKSlyZXR1cm4gVChuWzFdKT9uWzFdOiJuby1oaWdobGlnaHQiO2ZvcihpPWkuc3BsaXQoL1xzKy8pLHQ9MCxyPWkubGVuZ3RoO3Q8cjt0KyspaWYocz1pW3RdLG8ocyl8fFQocykpcmV0dXJuIHN9ZnVuY3Rpb24gaShlKXt2YXIgdCxuPXt9LHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2Zvcih0IGluIGUpblt0XT1lW3RdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24oZSl7Zm9yKHQgaW4gZSluW3RdPWVbdF19KSxufWZ1bmN0aW9uIGEoZSl7dmFyIHQ9W107cmV0dXJuIGZ1bmN0aW9uIGUocixvKXtmb3IodmFyIHM9ci5maXJzdENoaWxkO3M7cz1zLm5leHRTaWJsaW5nKTM9PT1zLm5vZGVUeXBlP28rPXMubm9kZVZhbHVlLmxlbmd0aDoxPT09cy5ub2RlVHlwZSYmKHQucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6byxub2RlOnN9KSxvPWUocyxvKSxuKHMpLm1hdGNoKC9icnxocnxpbWd8aW5wdXQvKXx8dC5wdXNoKHtldmVudDoic3RvcCIsb2Zmc2V0Om8sbm9kZTpzfSkpO3JldHVybiBvfShlLDApLHR9ZnVuY3Rpb24gbChlLHIsbyl7ZnVuY3Rpb24gcygpe3JldHVybiBlLmxlbmd0aCYmci5sZW5ndGg/ZVswXS5vZmZzZXQhPT1yWzBdLm9mZnNldD9lWzBdLm9mZnNldDxyWzBdLm9mZnNldD9lOnI6InN0YXJ0Ij09PXJbMF0uZXZlbnQ/ZTpyOmUubGVuZ3RoP2U6cn1mdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIiAiK2Uubm9kZU5hbWUrJz0iJyt0KGUudmFsdWUpLnJlcGxhY2UoJyInLCImcXVvdDsiKSsnIid9Yys9IjwiK24oZSkrTy5tYXAuY2FsbChlLmF0dHJpYnV0ZXMscikuam9pbigiIikrIj4ifWZ1bmN0aW9uIGEoZSl7Yys9IjwvIituKGUpKyI+In1mdW5jdGlvbiBsKGUpeygic3RhcnQiPT09ZS5ldmVudD9pOmEpKGUubm9kZSl9Zm9yKHZhciB1PTAsYz0iIixkPVtdO2UubGVuZ3RofHxyLmxlbmd0aDspe3ZhciBfPXMoKTtpZihjKz10KG8uc3Vic3RyaW5nKHUsX1swXS5vZmZzZXQpKSx1PV9bMF0ub2Zmc2V0LF89PT1lKXtkLnJldmVyc2UoKS5mb3JFYWNoKGEpO2Rve2woXy5zcGxpY2UoMCwxKVswXSksXz1zKCl9d2hpbGUoXz09PWUmJl8ubGVuZ3RoJiZfWzBdLm9mZnNldD09PXUpO2QucmV2ZXJzZSgpLmZvckVhY2goaSl9ZWxzZSJzdGFydCI9PT1fWzBdLmV2ZW50P2QucHVzaChfWzBdLm5vZGUpOmQucG9wKCksbChfLnNwbGljZSgwLDEpWzBdKX1yZXR1cm4gYyt0KG8uc3Vic3RyKHUpKX1mdW5jdGlvbiB1KGUpe3JldHVybiBlLnZhcmlhbnRzJiYhZS5jYWNoZWRfdmFyaWFudHMmJihlLmNhY2hlZF92YXJpYW50cz1lLnZhcmlhbnRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaShlLHt2YXJpYW50czpudWxsfSx0KX0pKSxlLmNhY2hlZF92YXJpYW50c3x8ZS5lbmRzV2l0aFBhcmVudCYmW2koZSldfHxbZV19ZnVuY3Rpb24gYyhlKXtpZihDJiYhZS5sYW5nQXBpUmVzdG9yZWQpe2UubGFuZ0FwaVJlc3RvcmVkPSEwO2Zvcih2YXIgdCBpbiBDKWVbdF0mJihlW0NbdF1dPWVbdF0pOyhlLmNvbnRhaW5zfHxbXSkuY29uY2F0KGUudmFyaWFudHN8fFtdKS5mb3JFYWNoKGMpfX1mdW5jdGlvbiBkKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJmUuc291cmNlfHxlfWZ1bmN0aW9uIG4obixyKXtyZXR1cm4gbmV3IFJlZ0V4cCh0KG4pLCJtIisoZS5jYXNlX2luc2Vuc2l0aXZlPyJpIjoiIikrKHI/ImciOiIiKSl9ZnVuY3Rpb24gcihlLG4pe2Zvcih2YXIgcj0vXFsoPzpbXlxcXF1dfFxcLikqXF18XChcPz98XFwoWzEtOV1bMC05XSopfFxcLi8sbz0wLHM9IiIsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1vLGw9dChlW2ldKTtmb3IoaT4wJiYocys9bik7bC5sZW5ndGg+MDspe3ZhciB1PXIuZXhlYyhsKTtpZihudWxsPT11KXtzKz1sO2JyZWFrfXMrPWwuc3Vic3RyaW5nKDAsdS5pbmRleCksbD1sLnN1YnN0cmluZyh1LmluZGV4K3VbMF0ubGVuZ3RoKSwiXFwiPT11WzBdWzBdJiZ1WzFdP3MrPSJcXCIrU3RyaW5nKE51bWJlcih1WzFdKSthKToocys9dVswXSwiKCI9PXVbMF0mJm8rKyl9fXJldHVybiBzfWZ1bmN0aW9uIG8ocyxpKXtpZighcy5jb21waWxlZCl7aWYocy5jb21waWxlZD0hMCxzLmtleXdvcmRzPXMua2V5d29yZHN8fHMuYmVnaW5LZXl3b3JkcyxzLmtleXdvcmRzKXt2YXIgYT17fSxsPWZ1bmN0aW9uKHQsbil7ZS5jYXNlX2luc2Vuc2l0aXZlJiYobj1uLnRvTG93ZXJDYXNlKCkpLG4uc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuc3BsaXQoInwiKTthW25bMF1dPVt0LG5bMV0/TnVtYmVyKG5bMV0pOjFdfSl9OyJzdHJpbmciPT10eXBlb2Ygcy5rZXl3b3Jkcz9sKCJrZXl3b3JkIixzLmtleXdvcmRzKTpTKHMua2V5d29yZHMpLmZvckVhY2goZnVuY3Rpb24oZSl7bChlLHMua2V5d29yZHNbZV0pfSkscy5rZXl3b3Jkcz1hfXMubGV4ZW1lc1JlPW4ocy5sZXhlbWVzfHwvXHcrLywhMCksaSYmKHMuYmVnaW5LZXl3b3JkcyYmKHMuYmVnaW49IlxcYigiK3MuYmVnaW5LZXl3b3Jkcy5zcGxpdCgiICIpLmpvaW4oInwiKSsiKVxcYiIpLHMuYmVnaW58fChzLmJlZ2luPS9cQnxcYi8pLHMuYmVnaW5SZT1uKHMuYmVnaW4pLHMuZW5kU2FtZUFzQmVnaW4mJihzLmVuZD1zLmJlZ2luKSxzLmVuZHx8cy5lbmRzV2l0aFBhcmVudHx8KHMuZW5kPS9cQnxcYi8pLHMuZW5kJiYocy5lbmRSZT1uKHMuZW5kKSkscy50ZXJtaW5hdG9yX2VuZD10KHMuZW5kKXx8IiIscy5lbmRzV2l0aFBhcmVudCYmaS50ZXJtaW5hdG9yX2VuZCYmKHMudGVybWluYXRvcl9lbmQrPShzLmVuZD8ifCI6IiIpK2kudGVybWluYXRvcl9lbmQpKSxzLmlsbGVnYWwmJihzLmlsbGVnYWxSZT1uKHMuaWxsZWdhbCkpLG51bGw9PXMucmVsZXZhbmNlJiYocy5yZWxldmFuY2U9MSkscy5jb250YWluc3x8KHMuY29udGFpbnM9W10pLHMuY29udGFpbnM9QXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxzLmNvbnRhaW5zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdSgic2VsZiI9PT1lP3M6ZSl9KSkscy5jb250YWlucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe28oZSxzKX0pLHMuc3RhcnRzJiZvKHMuc3RhcnRzLGkpO3ZhciBjPXMuY29udGFpbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJlZ2luS2V5d29yZHM/IlxcLj8oPzoiK2UuYmVnaW4rIilcXC4/IjplLmJlZ2lufSkuY29uY2F0KFtzLnRlcm1pbmF0b3JfZW5kLHMuaWxsZWdhbF0pLm1hcCh0KS5maWx0ZXIoQm9vbGVhbik7cy50ZXJtaW5hdG9ycz1jLmxlbmd0aD9uKHIoYywifCIpLCEwKTp7ZXhlYzpmdW5jdGlvbigpe3JldHVybiBudWxsfX19fW8oZSl9ZnVuY3Rpb24gXyhlLG4sbyxzKXtmdW5jdGlvbiBpKGUpe3JldHVybiBuZXcgUmVnRXhwKGUucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKSwibSIpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbixvO2ZvcihuPTAsbz10LmNvbnRhaW5zLmxlbmd0aDtuPG87bisrKWlmKHIodC5jb250YWluc1tuXS5iZWdpblJlLGUpKXJldHVybiB0LmNvbnRhaW5zW25dLmVuZFNhbWVBc0JlZ2luJiYodC5jb250YWluc1tuXS5lbmRSZT1pKHQuY29udGFpbnNbbl0uYmVnaW5SZS5leGVjKGUpWzBdKSksdC5jb250YWluc1tuXX1mdW5jdGlvbiBsKGUsdCl7aWYocihlLmVuZFJlLHQpKXtmb3IoO2UuZW5kc1BhcmVudCYmZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9aWYoZS5lbmRzV2l0aFBhcmVudClyZXR1cm4gbChlLnBhcmVudCx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIW8mJnIodC5pbGxlZ2FsUmUsZSl9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXkuY2FzZV9pbnNlbnNpdGl2ZT90WzBdLnRvTG93ZXJDYXNlKCk6dFswXTtyZXR1cm4gZS5rZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eShuKSYmZS5rZXl3b3Jkc1tuXX1mdW5jdGlvbiBmKGUsdCxuLHIpe3ZhciBvPXI/IiI6TS5jbGFzc1ByZWZpeCxzPSc8c3BhbiBjbGFzcz0iJytvLGk9bj8iIjp3O3JldHVybihzKz1lKyciPicpK3QraX1mdW5jdGlvbiBtKCl7dmFyIGUsbixyLG87aWYoIUEua2V5d29yZHMpcmV0dXJuIHQoUyk7Zm9yKG89IiIsbj0wLEEubGV4ZW1lc1JlLmxhc3RJbmRleD0wLHI9QS5sZXhlbWVzUmUuZXhlYyhTKTtyOylvKz10KFMuc3Vic3RyaW5nKG4sci5pbmRleCkpLGU9YyhBLHIpLGU/KGorPWVbMV0sbys9ZihlWzBdLHQoclswXSkpKTpvKz10KHJbMF0pLG49QS5sZXhlbWVzUmUubGFzdEluZGV4LHI9QS5sZXhlbWVzUmUuZXhlYyhTKTtyZXR1cm4gbyt0KFMuc3Vic3RyKG4pKX1mdW5jdGlvbiBoKCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiBBLnN1Ykxhbmd1YWdlO2lmKGUmJiFSW0Euc3ViTGFuZ3VhZ2VdKXJldHVybiB0KFMpO3ZhciBuPWU/XyhBLnN1Ykxhbmd1YWdlLFMsITAsQ1tBLnN1Ykxhbmd1YWdlXSk6cChTLEEuc3ViTGFuZ3VhZ2UubGVuZ3RoP0Euc3ViTGFuZ3VhZ2U6dm9pZCAwKTtyZXR1cm4gQS5yZWxldmFuY2U+MCYmKGorPW4ucmVsZXZhbmNlKSxlJiYoQ1tBLnN1Ykxhbmd1YWdlXT1uLnRvcCksZihuLmxhbmd1YWdlLG4udmFsdWUsITEsITApfWZ1bmN0aW9uIGcoKXtPKz1udWxsIT1BLnN1Ykxhbmd1YWdlP2goKTptKCksUz0iIn1mdW5jdGlvbiBiKGUpe08rPWUuY2xhc3NOYW1lP2YoZS5jbGFzc05hbWUsIiIsITApOiIiLEE9T2JqZWN0LmNyZWF0ZShlLHtwYXJlbnQ6e3ZhbHVlOkF9fSl9ZnVuY3Rpb24gRShlLHQpe2lmKFMrPWUsbnVsbD09dClyZXR1cm4gZygpLDA7dmFyIG49YSh0LEEpO2lmKG4pcmV0dXJuIG4uc2tpcD9TKz10OihuLmV4Y2x1ZGVCZWdpbiYmKFMrPXQpLGcoKSxuLnJldHVybkJlZ2lufHxuLmV4Y2x1ZGVCZWdpbnx8KFM9dCkpLGIobix0KSxuLnJldHVybkJlZ2luPzA6dC5sZW5ndGg7dmFyIHI9bChBLHQpO2lmKHIpe3ZhciBvPUE7by5za2lwP1MrPXQ6KG8ucmV0dXJuRW5kfHxvLmV4Y2x1ZGVFbmR8fChTKz10KSxnKCksby5leGNsdWRlRW5kJiYoUz10KSk7ZG97QS5jbGFzc05hbWUmJihPKz13KSxBLnNraXB8fEEuc3ViTGFuZ3VhZ2V8fChqKz1BLnJlbGV2YW5jZSksQT1BLnBhcmVudH13aGlsZShBIT09ci5wYXJlbnQpO3JldHVybiByLnN0YXJ0cyYmKHIuZW5kU2FtZUFzQmVnaW4mJihyLnN0YXJ0cy5lbmRSZT1yLmVuZFJlKSxiKHIuc3RhcnRzLCIiKSksby5yZXR1cm5FbmQ/MDp0Lmxlbmd0aH1pZih1KHQsQSkpdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtZSAiJyt0KyciIGZvciBtb2RlICInKyhBLmNsYXNzTmFtZXx8Ijx1bm5hbWVkPiIpKyciJyk7cmV0dXJuIFMrPXQsdC5sZW5ndGh8fDF9dmFyIHk9VChlKTtpZigheSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6ICInK2UrJyInKTtkKHkpO3ZhciB2LEE9c3x8eSxDPXt9LE89IiI7Zm9yKHY9QTt2IT09eTt2PXYucGFyZW50KXYuY2xhc3NOYW1lJiYoTz1mKHYuY2xhc3NOYW1lLCIiLCEwKStPKTt2YXIgUz0iIixqPTA7dHJ5e2Zvcih2YXIgeCxMLEQ9MDs7KXtpZihBLnRlcm1pbmF0b3JzLmxhc3RJbmRleD1ELCEoeD1BLnRlcm1pbmF0b3JzLmV4ZWMobikpKWJyZWFrO0w9RShuLnN1YnN0cmluZyhELHguaW5kZXgpLHhbMF0pLEQ9eC5pbmRleCtMfWZvcihFKG4uc3Vic3RyKEQpKSx2PUE7di5wYXJlbnQ7dj12LnBhcmVudCl2LmNsYXNzTmFtZSYmKE8rPXcpO3JldHVybntyZWxldmFuY2U6aix2YWx1ZTpPLGxhbmd1YWdlOmUsdG9wOkF9fWNhdGNoKGUpe2lmKGUubWVzc2FnZSYmLTEhPT1lLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpKXJldHVybntyZWxldmFuY2U6MCx2YWx1ZTp0KG4pfTt0aHJvdyBlfX1mdW5jdGlvbiBwKGUsbil7bj1ufHxNLmxhbmd1YWdlc3x8UyhSKTt2YXIgcj17cmVsZXZhbmNlOjAsdmFsdWU6dChlKX0sbz1yO3JldHVybiBuLmZpbHRlcihUKS5maWx0ZXIoQSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1fKHQsZSwhMSk7bi5sYW5ndWFnZT10LG4ucmVsZXZhbmNlPm8ucmVsZXZhbmNlJiYobz1uKSxuLnJlbGV2YW5jZT5yLnJlbGV2YW5jZSYmKG89cixyPW4pfSksby5sYW5ndWFnZSYmKHIuc2Vjb25kX2Jlc3Q9bykscn1mdW5jdGlvbiBmKGUpe3JldHVybiBNLnRhYlJlcGxhY2V8fE0udXNlQlI/ZS5yZXBsYWNlKEQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTS51c2VCUiYmIlxuIj09PWU/Ijxicj4iOk0udGFiUmVwbGFjZT90LnJlcGxhY2UoL1x0L2csTS50YWJSZXBsYWNlKToiIn0pOmV9ZnVuY3Rpb24gbShlLHQsbil7dmFyIHI9dD9qW3RdOm4sbz1bZS50cmltKCldO3JldHVybiBlLm1hdGNoKC9cYmhsanNcYi8pfHxvLnB1c2goImhsanMiKSwtMT09PWUuaW5kZXhPZihyKSYmby5wdXNoKHIpLG8uam9pbigiICIpLnRyaW0oKX1mdW5jdGlvbiBoKGUpe3ZhciB0LG4scixpLHUsYz1zKGUpO28oYyl8fChNLnVzZUJSPyh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLHQuaW5uZXJIVE1MPWUuaW5uZXJIVE1MLnJlcGxhY2UoL1xuL2csIiIpLnJlcGxhY2UoLzxiclsgXC9dKj4vZywiXG4iKSk6dD1lLHU9dC50ZXh0Q29udGVudCxyPWM/XyhjLHUsITApOnAodSksbj1hKHQpLG4ubGVuZ3RoJiYoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSxpLmlubmVySFRNTD1yLnZhbHVlLHIudmFsdWU9bChuLGEoaSksdSkpLHIudmFsdWU9ZihyLnZhbHVlKSxlLmlubmVySFRNTD1yLnZhbHVlLGUuY2xhc3NOYW1lPW0oZS5jbGFzc05hbWUsYyxyLmxhbmd1YWdlKSxlLnJlc3VsdD17bGFuZ3VhZ2U6ci5sYW5ndWFnZSxyZTpyLnJlbGV2YW5jZX0sci5zZWNvbmRfYmVzdCYmKGUuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOnIuc2Vjb25kX2Jlc3QubGFuZ3VhZ2UscmU6ci5zZWNvbmRfYmVzdC5yZWxldmFuY2V9KSl9ZnVuY3Rpb24gZyhlKXtNPWkoTSxlKX1mdW5jdGlvbiBiKCl7aWYoIWIuY2FsbGVkKXtiLmNhbGxlZD0hMDt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJwcmUgY29kZSIpO08uZm9yRWFjaC5jYWxsKGUsaCl9fWZ1bmN0aW9uIEUoKXthZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixiLCExKSxhZGRFdmVudExpc3RlbmVyKCJsb2FkIixiLCExKX1mdW5jdGlvbiB5KHQsbil7dmFyIHI9Ult0XT1uKGUpO2Mociksci5hbGlhc2VzJiZyLmFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtqW2VdPXR9KX1mdW5jdGlvbiB2KCl7cmV0dXJuIFMoUil9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCksUltlXXx8UltqW2VdXX1mdW5jdGlvbiBBKGUpe3ZhciB0PVQoZSk7cmV0dXJuIHQmJiF0LmRpc2FibGVBdXRvZGV0ZWN0fXZhciBDLE89W10sUz1PYmplY3Qua2V5cyxSPXt9LGo9e30seD0vXihuby0/aGlnaGxpZ2h0fHBsYWlufHRleHQpJC9pLEw9L1xibGFuZyg/OnVhZ2UpPy0oW1x3LV0rKVxiL2ksRD0vKCheKDxbXj5dKz58XHR8KSt8KD86XG4pKSkvZ20sdz0iPC9zcGFuPiIsTT17Y2xhc3NQcmVmaXg6ImhsanMtIix0YWJSZXBsYWNlOm51bGwsdXNlQlI6ITEsbGFuZ3VhZ2VzOnZvaWQgMH07cmV0dXJuIGUuaGlnaGxpZ2h0PV8sZS5oaWdobGlnaHRBdXRvPXAsZS5maXhNYXJrdXA9ZixlLmhpZ2hsaWdodEJsb2NrPWgsZS5jb25maWd1cmU9ZyxlLmluaXRIaWdobGlnaHRpbmc9YixlLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9RSxlLnJlZ2lzdGVyTGFuZ3VhZ2U9eSxlLmxpc3RMYW5ndWFnZXM9dixlLmdldExhbmd1YWdlPVQsZS5hdXRvRGV0ZWN0aW9uPUEsZS5pbmhlcml0PWksZS5JREVOVF9SRT0iW2EtekEtWl1cXHcqIixlLlVOREVSU0NPUkVfSURFTlRfUkU9IlthLXpBLVpfXVxcdyoiLGUuTlVNQkVSX1JFPSJcXGJcXGQrKFxcLlxcZCspPyIsZS5DX05VTUJFUl9SRT0iKC0/KShcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSIsZS5CSU5BUllfTlVNQkVSX1JFPSJcXGIoMGJbMDFdKykiLGUuUkVfU1RBUlRFUlNfUkU9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+IixlLkJBQ0tTTEFTSF9FU0NBUEU9e2JlZ2luOiJcXFxcW1xcc1xcU10iLHJlbGV2YW5jZTowfSxlLkFQT1NfU1RSSU5HX01PREU9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxlLlFVT1RFX1NUUklOR19NT0RFPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0sZS5QSFJBU0FMX1dPUkRTX01PREU9e2JlZ2luOi9cYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXGIvfSxlLkNPTU1FTlQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBvPWUuaW5oZXJpdCh7Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjp0LGVuZDpuLGNvbnRhaW5zOltdfSxyfHx7fSk7cmV0dXJuIG8uY29udGFpbnMucHVzaChlLlBIUkFTQUxfV09SRFNfTU9ERSksby5jb250YWlucy5wdXNoKHtjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46Iig/OlRPRE98RklYTUV8Tk9URXxCVUd8WFhYKToiLHJlbGV2YW5jZTowfSksb30sZS5DX0xJTkVfQ09NTUVOVF9NT0RFPWUuQ09NTUVOVCgiLy8iLCIkIiksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERT1lLkNPTU1FTlQoIi9cXCoiLCJcXCovIiksZS5IQVNIX0NPTU1FTlRfTU9ERT1lLkNPTU1FTlQoIiMiLCIkIiksZS5OVU1CRVJfTU9ERT17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuTlVNQkVSX1JFLHJlbGV2YW5jZTowfSxlLkNfTlVNQkVSX01PREU9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjplLkNfTlVNQkVSX1JFLHJlbGV2YW5jZTowfSxlLkJJTkFSWV9OVU1CRVJfTU9ERT17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuQklOQVJZX05VTUJFUl9SRSxyZWxldmFuY2U6MH0sZS5DU1NfTlVNQkVSX01PREU9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjplLk5VTUJFUl9SRSsiKCV8ZW18ZXh8Y2h8cmVtfHZ3fHZofHZtaW58dm1heHxjbXxtbXxpbnxwdHxwY3xweHxkZWd8Z3JhZHxyYWR8dHVybnxzfG1zfEh6fGtIenxkcGl8ZHBjbXxkcHB4KT8iLHJlbGV2YW5jZTowfSxlLlJFR0VYUF9NT0RFPXtjbGFzc05hbWU6InJlZ2V4cCIsYmVnaW46L1wvLyxlbmQ6L1wvW2dpbXV5XSovLGlsbGVnYWw6L1xuLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHtiZWdpbjovXFsvLGVuZDovXF0vLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfV19LGUuVElUTEVfTU9ERT17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46ZS5JREVOVF9SRSxyZWxldmFuY2U6MH0sZS5VTkRFUlNDT1JFX1RJVExFX01PREU9e2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSxyZWxldmFuY2U6MH0sZS5NRVRIT0RfR1VBUkQ9e2JlZ2luOiJcXC5cXHMqIitlLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9LGV9KX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2hpZ2hsaWdodC5qcyIpO3IucmVnaXN0ZXJMYW5ndWFnZSgiMWMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzLzFjLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYWJuZiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWJuZi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImFjY2Vzc2xvZyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWNjZXNzbG9nLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYWN0aW9uc2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hY3Rpb25zY3JpcHQuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJhZGEiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FkYS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImFuZ2Vsc2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hbmdlbHNjcmlwdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImFwYWNoZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXBhY2hlLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYXBwbGVzY3JpcHQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwcGxlc2NyaXB0LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYXJjYWRlIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmNhZGUuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJjcHAiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NwcC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImFyZHVpbm8iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FyZHVpbm8uanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJhcm1hc20iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FybWFzbS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInhtbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveG1sLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYXNjaWlkb2MiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzY2lpZG9jLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYXNwZWN0aiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXNwZWN0ai5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImF1dG9ob3RrZXkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9ob3RrZXkuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJhdXRvaXQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9pdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImF2cmFzbSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXZyYXNtLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiYXdrIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hd2suanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJheGFwdGEiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F4YXB0YS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImJhc2giLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2guanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJiYXNpYyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaWMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJibmYiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JuZi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImJyYWluZnVjayIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYnJhaW5mdWNrLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY2FsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jYWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJjYXBucHJvdG8iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NhcG5wcm90by5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImNleWxvbiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2V5bG9uLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY2xlYW4iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NsZWFuLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY2xvanVyZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2xvanVyZS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImNsb2p1cmUtcmVwbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2xvanVyZS1yZXBsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY21ha2UiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NtYWtlLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY29mZmVlc2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb2ZmZWVzY3JpcHQuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJjb3EiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NvcS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImNvcyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29zLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY3Jtc2giLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NybXNoLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY3J5c3RhbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3J5c3RhbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImNzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImNzcCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NwLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiY3NzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc3MuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJkIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibWFya2Rvd24iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hcmtkb3duLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZGFydCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGFydC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImRlbHBoaSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGVscGhpLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZGlmZiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGlmZi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImRqYW5nbyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGphbmdvLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZG5zIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kbnMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJkb2NrZXJmaWxlIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb2NrZXJmaWxlLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZG9zIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb3MuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJkc2NvbmZpZyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZHNjb25maWcuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJkdHMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R0cy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImR1c3QiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R1c3QuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJlYm5mIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lYm5mLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZWxpeGlyIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lbGl4aXIuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJlbG0iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsbS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInJ1YnkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3J1YnkuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJlcmIiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VyYi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImVybGFuZy1yZXBsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmctcmVwbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImVybGFuZyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZXJsYW5nLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZXhjZWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZml4IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9maXguanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJmbGl4IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9mbGl4LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZm9ydHJhbiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZm9ydHJhbi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImZzaGFycCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZnNoYXJwLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZ2FtcyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2Ftcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImdhdXNzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nYXVzcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImdjb2RlIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nY29kZS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImdoZXJraW4iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2doZXJraW4uanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJnbHNsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbHNsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZ21sIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJnbyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ28uanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJnb2xvIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nb2xvLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiZ3JhZGxlIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncmFkbGUuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJncm9vdnkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyb292eS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImhhbWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJoYW5kbGViYXJzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9oYW5kbGViYXJzLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiaGFza2VsbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFza2VsbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImhheGUiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hheGUuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJoc3AiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hzcC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImh0bWxiYXJzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9odG1sYmFycy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImh0dHAiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h0dHAuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJoeSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHkuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJpbmZvcm03IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmZvcm03LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiaW5pIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmkuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJpcnBmOTAiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2lycGY5MC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImlzYmwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2lzYmwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJqYXZhIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYXZhLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgiamF2YXNjcmlwdCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YXNjcmlwdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImpib3NzLWNsaSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamJvc3MtY2xpLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgianNvbiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvanNvbi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImp1bGlhIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImp1bGlhLXJlcGwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2p1bGlhLXJlcGwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJrb3RsaW4iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2tvdGxpbi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImxhc3NvIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sYXNzby5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImxkaWYiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xkaWYuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJsZWFmIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZWFmLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibGVzcyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGVzcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImxpc3AiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xpc3AuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJsaXZlY29kZXNlcnZlciIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZWNvZGVzZXJ2ZXIuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJsaXZlc2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXZlc2NyaXB0LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibGx2bSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGx2bS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoImxzbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHNsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibHVhIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sdWEuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtYWtlZmlsZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWFrZWZpbGUuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtYXRoZW1hdGljYSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF0aGVtYXRpY2EuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtYXRsYWIiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGxhYi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1heGltYSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF4aW1hLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibWVsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tZWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtZXJjdXJ5IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tZXJjdXJ5LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibWlwc2FzbSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWlwc2FzbS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1pemFyIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9taXphci5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInBlcmwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BlcmwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtb2pvbGljaW91cyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9qb2xpY2lvdXMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJtb25rZXkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vbmtleS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1vb25zY3JpcHQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vb25zY3JpcHQuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJuMXFsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uMXFsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibmdpbngiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25naW54LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgibmltcm9kIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uaW1yb2QuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJuaXgiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25peC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoIm5zaXMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25zaXMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJvYmplY3RpdmVjIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9vYmplY3RpdmVjLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgib2NhbWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29jYW1sLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgib3BlbnNjYWQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29wZW5zY2FkLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgib3h5Z2VuZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb3h5Z2VuZS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInBhcnNlcjMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BhcnNlcjMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJwZiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGYuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJwZ3NxbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGdzcWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJwaHAiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInBsYWludGV4dCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGxhaW50ZXh0LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgicG9ueSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcG9ueS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInBvd2Vyc2hlbGwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Bvd2Vyc2hlbGwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJwcm9jZXNzaW5nIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9jZXNzaW5nLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgicHJvZmlsZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvZmlsZS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInByb2xvZyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvbG9nLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgicHJvcGVydGllcyIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvcGVydGllcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInByb3RvYnVmIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm90b2J1Zi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInB1cHBldCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHVwcGV0LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgicHVyZWJhc2ljIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wdXJlYmFzaWMuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJweXRob24iLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInEiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3EuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJxbWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3FtbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInIiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3IuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJyZWFzb25tbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcmVhc29ubWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJyaWIiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JpYi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInJvYm9jb25mIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb2JvY29uZi5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInJvdXRlcm9zIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb3V0ZXJvcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInJzbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnNsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgicnVsZXNsYW5ndWFnZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVsZXNsYW5ndWFnZS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInJ1c3QiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3J1c3QuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzYXMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Nhcy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInNjYWxhIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2FsYS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInNjaGVtZSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2NoZW1lLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic2NpbGFiIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2lsYWIuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzY3NzIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY3NzLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic2hlbGwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NoZWxsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic21hbGkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtYWxpLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic21hbGx0YWxrIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsbHRhbGsuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzbWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInNxZiIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FmLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic3FsIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zcWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzdGFuIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGFuLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic3RhdGEiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YXRhLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgic3RlcDIxIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGVwMjEuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzdHlsdXMiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0eWx1cy5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInN1YnVuaXQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N1YnVuaXQuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJzd2lmdCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3dpZnQuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ0YWdnZXJzY3JpcHQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RhZ2dlcnNjcmlwdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInlhbWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3lhbWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ0YXAiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RhcC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInRjbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGNsLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgidGV4IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90ZXguanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ0aHJpZnQiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RocmlmdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInRwIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90cC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInR3aWciLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R3aWcuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ0eXBlc2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90eXBlc2NyaXB0LmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgidmFsYSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmFsYS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInZibmV0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92Ym5ldC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInZic2NyaXB0IixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInZic2NyaXB0LWh0bWwiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Zic2NyaXB0LWh0bWwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ2ZXJpbG9nIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92ZXJpbG9nLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgidmhkbCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmhkbC5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInZpbSIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmltLmpzIikpLHIucmVnaXN0ZXJMYW5ndWFnZSgieDg2YXNtIixuKCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94ODZhc20uanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ4bCIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveGwuanMiKSksci5yZWdpc3Rlckxhbmd1YWdlKCJ4cXVlcnkiLG4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3hxdWVyeS5qcyIpKSxyLnJlZ2lzdGVyTGFuZ3VhZ2UoInplcGhpciIsbigiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvemVwaGlyLmpzIikpLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvMWMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbQS1aYS160JAt0K/QsC3Rj9GR0IFfXVtBLVphLXrQkC3Qr9CwLdGP0ZHQgV8wLTldKyIsbj0i0LTQsNC70LXQtSDQstC+0LfQstGA0LDRgiDQstGL0LfQstCw0YLRjNC40YHQutC70Y7Rh9C10L3QuNC1INCy0YvQv9C+0LvQvdC40YLRjCDQtNC70Y8g0LXRgdC70Lgg0Lgg0LjQtyDQuNC70Lgg0LjQvdCw0YfQtSDQuNC90LDRh9C10LXRgdC70Lgg0LjRgdC60LvRjtGH0LXQvdC40LUg0LrQsNC20LTQvtCz0L4g0LrQvtC90LXRhtC10YHQu9C4INC60L7QvdC10YbQv9C+0L/Ri9GC0LrQuCDQutC+0L3QtdGG0YbQuNC60LvQsCDQvdC1INC90L7QstGL0Lkg0L/QtdGA0LXQudGC0Lgg0L/QtdGA0LXQvCDQv9C+INC/0L7QutCwINC/0L7Qv9GL0YLQutCwINC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YLQvtCz0LTQsCDRhtC40LrQuyDRjdC60YHQv9C+0YDRgiAiLHI9Im51bGwg0LjRgdGC0LjQvdCwINC70L7QttGMINC90LXQvtC/0YDQtdC00LXQu9C10L3QviIsbz1lLmluaGVyaXQoZS5OVU1CRVJfTU9ERSkscz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOicifFxcfCcsZW5kOicifCQnLGNvbnRhaW5zOlt7YmVnaW46JyIiJ31dfSxpPXtiZWdpbjoiJyIsZW5kOiInIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxjb250YWluczpbe2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkezR9KFtcXC5cXFxcLzotXT9cXGR7Mn0pezAsNX0ifV19LGE9ZS5pbmhlcml0KGUuQ19MSU5FX0NPTU1FTlRfTU9ERSksbD17Y2xhc3NOYW1lOiJtZXRhIixsZXhlbWVzOnQsYmVnaW46IiN8JiIsZW5kOiIkIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6bisi0LfQsNCz0YDRg9C30LjRgtGM0LjQt9GE0LDQudC70LAg0LLQtdCx0LrQu9C40LXQvdGCINCy0LzQtdGB0YLQviDQstC90LXRiNC90LXQtdGB0L7QtdC00LjQvdC10L3QuNC1INC60LvQuNC10L3RgiDQutC+0L3QtdGG0L7QsdC70LDRgdGC0Lgg0LzQvtCx0LjQu9GM0L3QvtC10L/RgNC40LvQvtC20LXQvdC40LXQutC70LjQtdC90YIg0LzQvtCx0LjQu9GM0L3QvtC10L/RgNC40LvQvtC20LXQvdC40LXRgdC10YDQstC10YAg0L3QsNC60LvQuNC10L3RgtC1INC90LDQutC70LjQtdC90YLQtdC90LDRgdC10YDQstC10YDQtSDQvdCw0LrQu9C40LXQvdGC0LXQvdCw0YHQtdGA0LLQtdGA0LXQsdC10LfQutC+0L3RgtC10LrRgdGC0LAg0L3QsNGB0LXRgNCy0LXRgNC1INC90LDRgdC10YDQstC10YDQtdCx0LXQt9C60L7QvdGC0LXQutGB0YLQsCDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC0INC/0L7RgdC70LUg0YHQtdGA0LLQtdGAINGC0L7Qu9GB0YLRi9C50LrQu9C40LXQvdGC0L7QsdGL0YfQvdC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtSDRgtC+0LvRgdGC0YvQudC60LvQuNC10L3RgtGD0L/RgNCw0LLQu9GP0LXQvNC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtSDRgtC+0L3QutC40LnQutC70LjQtdC90YIgIn0sY29udGFpbnM6W2FdfSx1PXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46In4iLGVuZDoiO3w6IixleGNsdWRlRW5kOiEwfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxsZXhlbWVzOnQsa2V5d29yZHM6e2tleXdvcmQ6bixidWlsdF9pbjoi0YDQsNC30LTQtdC70LjRgtC10LvRjNGB0YLRgNCw0L3QuNGGINGA0LDQt9C00LXQu9C40YLQtdC70YzRgdGC0YDQvtC6INGB0LjQvNCy0L7Qu9GC0LDQsdGD0LvRj9GG0LjQuCBhbnNpdG9vZW0gb2VtdG9hbnNpINCy0LLQtdGB0YLQuNCy0LjQtNGB0YPQsdC60L7QvdGC0L4g0LLQstC10YHRgtC40L/QtdGA0LXRh9C40YHQu9C10L3QuNC1INCy0LLQtdGB0YLQuNC/0LXRgNC40L7QtCDQstCy0LXRgdGC0LjQv9C70LDQvdGB0YfQtdGC0L7QsiDQstGL0LHRgNCw0L3QvdGL0LnQv9C70LDQvdGB0YfQtdGC0L7QsiDQtNCw0YLQsNCz0L7QtCDQtNCw0YLQsNC80LXRgdGP0YYg0LTQsNGC0LDRh9C40YHQu9C+INC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC30L3QsNGH0LXQvdC40LXQstGB0YLRgNC+0LrRgyDQt9C90LDRh9C10L3QuNC10LjQt9GB0YLRgNC+0LrQuCDQutCw0YLQsNC70L7Qs9C40LEg0LrQsNGC0LDQu9C+0LPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LrQvtC00YHQuNC80LIg0LrQvtC90LPQvtC00LAg0LrQvtC90LXRhtC/0LXRgNC40L7QtNCw0LHQuCDQutC+0L3QtdGG0YDQsNGB0YHRh9C40YLQsNC90L3QvtCz0L7Qv9C10YDQuNC+0LTQsNCx0Lgg0LrQvtC90LXRhtGB0YLQsNC90LTQsNGA0YLQvdC+0LPQvtC40L3RgtC10YDQstCw0LvQsCDQutC+0L3QutCy0LDRgNGC0LDQu9CwINC60L7QvdC80LXRgdGP0YbQsCDQutC+0L3QvdC10LTQtdC70Lgg0LvQvtCzINC70L7QszEwINC80LDQutGB0LjQvNCw0LvRjNC90L7QtdC60L7Qu9C40YfQtdGB0YLQstC+0YHRg9Cx0LrQvtC90YLQviDQvdCw0LfQstCw0L3QuNC10LjQvdGC0LXRgNGE0LXQudGB0LAg0L3QsNC30LLQsNC90LjQtdC90LDQsdC+0YDQsNC/0YDQsNCyINC90LDQt9C90LDRh9C40YLRjNCy0LjQtCDQvdCw0LfQvdCw0YfQuNGC0YzRgdGH0LXRgiDQvdCw0LnRgtC40YHRgdGL0LvQutC4INC90LDRh9Cw0LvQvtC/0LXRgNC40L7QtNCw0LHQuCDQvdCw0YfQsNC70L7RgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0LLQsNC70LAg0L3QsNGH0LPQvtC00LAg0L3QsNGH0LrQstCw0YDRgtCw0LvQsCDQvdCw0YfQvNC10YHRj9GG0LAg0L3QsNGH0L3QtdC00LXQu9C4INC90L7QvNC10YDQtNC90Y/Qs9C+0LTQsCDQvdC+0LzQtdGA0LTQvdGP0L3QtdC00LXQu9C4INC90L7QvNC10YDQvdC10LTQtdC70LjQs9C+0LTQsCDQvtCx0YDQsNCx0L7RgtC60LDQvtC20LjQtNCw0L3QuNGPINC+0YHQvdC+0LLQvdC+0LnQttGD0YDQvdCw0LvRgNCw0YHRh9C10YLQvtCyINC+0YHQvdC+0LLQvdC+0LnQv9C70LDQvdGB0YfQtdGC0L7QsiDQvtGB0L3QvtCy0L3QvtC50Y/Qt9GL0Log0L7Rh9C40YHRgtC40YLRjNC+0LrQvdC+0YHQvtC+0LHRidC10L3QuNC5INC/0LXRgNC40L7QtNGB0YLRgCDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9GC0LAg0L/QvtC70YPRh9C40YLRjNC00LDRgtGD0YLQsCDQv9C+0LvRg9GH0LjRgtGM0LTQvtC60YPQvNC10L3RgtGC0LAg0L/QvtC70YPRh9C40YLRjNC30L3QsNGH0LXQvdC40Y/QvtGC0LHQvtGA0LAg0L/QvtC70YPRh9C40YLRjNC/0L7Qt9C40YbQuNGO0YLQsCDQv9C+0LvRg9GH0LjRgtGM0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDQv9C+0LvRg9GH0LjRgtGM0YLQsCDQv9GA0LXRhNC40LrRgdCw0LLRgtC+0L3Rg9C80LXRgNCw0YbQuNC4INC/0YDQvtC/0LjRgdGMINC/0YPRgdGC0L7QtdC30L3QsNGH0LXQvdC40LUg0YDQsNC30Lwg0YDQsNC30L7QsdGA0LDRgtGM0L/QvtC30LjRhtC40Y7QtNC+0LrRg9C80LXQvdGC0LAg0YDQsNGB0YHRh9C40YLQsNGC0YzRgNC10LPQuNGB0YLRgNGL0L3QsCDRgNCw0YHRgdGH0LjRgtCw0YLRjNGA0LXQs9C40YHRgtGA0YvQv9C+INGB0LjQvNCyINGB0L7Qt9C00LDRgtGM0L7QsdGK0LXQutGCINGB0YLQsNGC0YPRgdCy0L7Qt9Cy0YDQsNGC0LAg0YHRgtGA0LrQvtC70LjRh9C10YHRgtCy0L7RgdGC0YDQvtC6INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjNC/0L7Qt9C40YbQuNGO0LTQvtC60YPQvNC10L3RgtCwINGB0YfQtdGC0L/QvtC60L7QtNGDINGC0LXQutGD0YnQtdC10LLRgNC10LzRjyDRgtC40L/Qt9C90LDRh9C10L3QuNGPINGC0LjQv9C30L3QsNGH0LXQvdC40Y/RgdGC0YAg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgtCw0L3QsCDRg9GB0YLQsNC90L7QstC40YLRjNGC0LDQv9C+INGE0LjQutGB0YjQsNCx0LvQvtC9INGI0LDQsdC70L7QvSBhY29zIGFzaW4gYXRhbiBiYXNlNjTQt9C90LDRh9C10L3QuNC1IGJhc2U2NNGB0YLRgNC+0LrQsCBjb3MgZXhwIGxvZyBsb2cxMCBwb3cgc2luIHNxcnQgdGFuIHhtbNC30L3QsNGH0LXQvdC40LUgeG1s0YHRgtGA0L7QutCwIHhtbNGC0LjQvyB4bWzRgtC40L/Qt9C90Ycg0LDQutGC0LjQstC90L7QtdC+0LrQvdC+INCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvCDQsdC10LfQvtC/0LDRgdC90YvQudGA0LXQttC40LzRgNCw0LfQtNC10LvQtdC90LjRj9C00LDQvdC90YvRhSDQsdGD0LvQtdCy0L4g0LLQstC10YHRgtC40LTQsNGC0YMg0LLQstC10YHRgtC40LfQvdCw0YfQtdC90LjQtSDQstCy0LXRgdGC0LjRgdGC0YDQvtC60YMg0LLQstC10YHRgtC40YfQuNGB0LvQviDQstC+0LfQvNC+0LbQvdC+0YHRgtGM0YfRgtC10L3QuNGPeG1sINCy0L7Qv9GA0L7RgSDQstC+0YHRgdGC0LDQvdC+0LLQuNGC0YzQt9C90LDRh9C10L3QuNC1INCy0YDQtdCzINCy0YvQs9GA0YPQt9C40YLRjNC20YPRgNC90LDQu9GA0LXQs9C40YHRgtGA0LDRhtC40Lgg0LLRi9C/0L7Qu9C90LjRgtGM0L7QsdGA0LDQsdC+0YLQutGD0L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0LLRi9C/0L7Qu9C90LjRgtGM0L/RgNC+0LLQtdGA0LrRg9C/0YDQsNCy0LTQvtGB0YLRg9C/0LAg0LLRi9GH0LjRgdC70LjRgtGMINCz0L7QtCDQtNCw0L3QvdGL0LXRhNC+0YDQvNGL0LLQt9C90LDRh9C10L3QuNC1INC00LDRgtCwINC00LXQvdGMINC00LXQvdGM0LPQvtC00LAg0LTQtdC90YzQvdC10LTQtdC70Lgg0LTQvtCx0LDQstC40YLRjNC80LXRgdGP0YYg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YzQtNCw0L3QvdGL0LXQtNC70Y/RgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC30LDQsdC70L7QutC40YDQvtCy0LDRgtGM0YDQsNCx0L7RgtGD0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC30LDQstC10YDRiNC40YLRjNGA0LDQsdC+0YLRg9GB0LjRgdGC0LXQvNGLINC30LDQs9GA0YPQt9C40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMg0LfQsNC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQt9Cw0L/QuNGB0LDRgtGManNvbiDQt9Cw0L/QuNGB0LDRgtGMeG1sINC30LDQv9C40YHQsNGC0YzQtNCw0YLRg2pzb24g0LfQsNC/0LjRgdGM0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INC30LDQv9C+0LvQvdC40YLRjNC30L3QsNGH0LXQvdC40Y/RgdCy0L7QudGB0YLQsiDQt9Cw0L/RgNC+0YHQuNGC0YzRgNCw0LfRgNC10YjQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQt9Cw0L/Rg9GB0YLQuNGC0YzQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GB0YLQuNGC0YzRgdC40YHRgtC10LzRgyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOINC30L3QsNGH0LXQvdC40LXQstC00LDQvdC90YvQtdGE0L7RgNC80Ysg0LfQvdCw0YfQtdC90LjQtdCy0YHRgtGA0L7QutGD0LLQvdGD0YLRgCDQt9C90LDRh9C10L3QuNC10LLRhNCw0LnQuyDQt9C90LDRh9C10L3QuNC10LfQsNC/0L7Qu9C90LXQvdC+INC30L3QsNGH0LXQvdC40LXQuNC30YHRgtGA0L7QutC40LLQvdGD0YLRgCDQt9C90LDRh9C10L3QuNC10LjQt9GE0LDQudC70LAg0LjQt3htbNGC0LjQv9CwINC40LzQv9C+0YDRgtC80L7QtNC10LvQuHhkdG8g0LjQvNGP0LrQvtC80L/RjNGO0YLQtdGA0LAg0LjQvNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGM0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0LXQtNCw0L3QvdGL0LUg0LjQvdGE0L7RgNC80LDRhtC40Y/QvtCx0L7RiNC40LHQutC1INC60LDRgtCw0LvQvtCz0LHQuNCx0LvQuNC+0YLQtdC60LjQvNC+0LHQuNC70YzQvdC+0LPQvtGD0YHRgtGA0L7QudGB0YLQstCwINC60LDRgtCw0LvQvtCz0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC60LDRgtCw0LvQvtCz0LTQvtC60YPQvNC10L3RgtC+0LIg0LrQsNGC0LDQu9C+0LPQv9GA0L7Qs9GA0LDQvNC80Ysg0LrQvtC00LjRgNC+0LLQsNGC0YzRgdGC0YDQvtC60YMg0LrQvtC00LvQvtC60LDQu9C40LfQsNGG0LjQuNC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQutC+0LTRgdC40LzQstC+0LvQsCDQutC+0LzQsNC90LTQsNGB0LjRgdGC0LXQvNGLINC60L7QvdC10YbQs9C+0LTQsCDQutC+0L3QtdGG0LTQvdGPINC60L7QvdC10YbQutCy0LDRgNGC0LDQu9CwINC60L7QvdC10YbQvNC10YHRj9GG0LAg0LrQvtC90LXRhtC80LjQvdGD0YLRiyDQutC+0L3QtdGG0L3QtdC00LXQu9C4INC60L7QvdC10YbRh9Cw0YHQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/QsdCw0LfRi9C00LDQvdC90YvRhdC40LfQvNC10L3QtdC90LDQtNC40L3QsNC80LjRh9C10YHQutC4INC60L7QvdGE0LjQs9GD0YDQsNGG0LjRj9C40LfQvNC10L3QtdC90LAg0LrQvtC/0LjRgNC+0LLQsNGC0YzQtNCw0L3QvdGL0LXRhNC+0YDQvNGLINC60L7Qv9C40YDQvtCy0LDRgtGM0YTQsNC50Lsg0LrRgNCw0YLQutC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCDQu9C10LIg0LzQsNC60YEg0LzQtdGB0YLQvdC+0LXQstGA0LXQvNGPINC80LXRgdGP0YYg0LzQuNC9INC80LjQvdGD0YLQsCDQvNC+0L3QvtC/0L7Qu9GM0L3Ri9C50YDQtdC20LjQvCDQvdCw0LnRgtC4INC90LDQudGC0LjQvdC10LTQvtC/0YPRgdGC0LjQvNGL0LXRgdC40LzQstC+0LvRi3htbCDQvdCw0LnRgtC40L7QutC90L7Qv9C+0L3QsNCy0LjQs9Cw0YbQuNC+0L3QvdC+0LnRgdGB0YvQu9C60LUg0L3QsNC50YLQuNC/0L7QvNC10YfQtdC90L3Ri9C10L3QsNGD0LTQsNC70LXQvdC40LUg0L3QsNC50YLQuNC/0L7RgdGB0YvQu9C60LDQvCDQvdCw0LnRgtC40YTQsNC50LvRiyDQvdCw0YfQsNC70L7Qs9C+0LTQsCDQvdCw0YfQsNC70L7QtNC90Y8g0L3QsNGH0LDQu9C+0LrQstCw0YDRgtCw0LvQsCDQvdCw0YfQsNC70L7QvNC10YHRj9GG0LAg0L3QsNGH0LDQu9C+0LzQuNC90YPRgtGLINC90LDRh9Cw0LvQvtC90LXQtNC10LvQuCDQvdCw0YfQsNC70L7Rh9Cw0YHQsCDQvdCw0YfQsNGC0YzQt9Cw0L/RgNC+0YHRgNCw0LfRgNC10YjQtdC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvdCw0YfQsNGC0YzQt9Cw0L/Rg9GB0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0YfQsNGC0YzQutC+0L/QuNGA0L7QstCw0L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C10YDQtdC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10YDQsNGB0YjQuNGA0LXQvdC40Y/RgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5INC90LDRh9Cw0YLRjNC/0L7QtNC60LvRjtGH0LXQvdC40LXRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L3QsNGH0LDRgtGM0L/QvtC40YHQutGE0LDQudC70L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXQutCw0YLQsNC70L7Qs9Cw0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC90LDRh9Cw0YLRjNC/0L7Qu9GD0YfQtdC90LjQtdC60LDRgtCw0LvQvtCz0LDQtNC+0LrRg9C80LXQvdGC0L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRgNCw0LHQvtGH0LXQs9C+0LrQsNGC0LDQu9C+0LPQsNC00LDQvdC90YvRhdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0L/QvtC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LzQtdGJ0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YHQvtC30LTQsNC90LjQtdC00LLQvtC40YfQvdGL0YXQtNCw0L3QvdGL0YXQuNC30YTQsNC50LvQsCDQvdCw0YfQsNGC0YzRgdC+0LfQtNCw0L3QuNC10LrQsNGC0LDQu9C+0LPQsCDQvdCw0YfQsNGC0YzRgtGA0LDQvdC30LDQutGG0LjRjiDQvdCw0YfQsNGC0YzRg9C00LDQu9C10L3QuNC10YTQsNC50LvQvtCyINC90LDRh9Cw0YLRjNGD0YHRgtCw0L3QvtCy0LrRg9Cy0L3QtdGI0L3QtdC50LrQvtC80L/QvtC90LXQvdGC0Ysg0L3QsNGH0LDRgtGM0YPRgdGC0LDQvdC+0LLQutGD0YDQsNGB0YjQuNGA0LXQvdC40Y/RgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5INC90LDRh9Cw0YLRjNGD0YHRgtCw0L3QvtCy0LrRg9GA0LDRgdGI0LjRgNC10L3QuNGP0YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQvdC10LTQtdC70Y/Qs9C+0LTQsCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLRjNC30LDQstC10YDRiNC10L3QuNGP0YHQvtC10LTQuNC90LXQvdC40Y8g0L3QvtC80LXRgNGB0LXQsNC90YHQsNC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQvdC+0LzQtdGA0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L3RgNC10LMg0L3RgdGC0YAg0L7QsdC90L7QstC40YLRjNC40L3RgtC10YDRhNC10LnRgSDQvtCx0L3QvtCy0LjRgtGM0L3Rg9C80LXRgNCw0YbQuNGO0L7QsdGK0LXQutGC0L7QsiDQvtCx0L3QvtCy0LjRgtGM0L/QvtCy0YLQvtGA0L3QvtC40YHQv9C+0LvRjNC30YPQtdC80YvQtdC30L3QsNGH0LXQvdC40Y8g0L7QsdGA0LDQsdC+0YLQutCw0L/RgNC10YDRi9Cy0LDQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0L7QsdGK0LXQtNC40L3QuNGC0YzRhNCw0LnQu9GLINC+0LrRgCDQvtC/0LjRgdCw0L3QuNC10L7RiNC40LHQutC4INC+0L/QvtCy0LXRgdGC0LjRgtGMINC+0L/QvtCy0LXRgdGC0LjRgtGM0L7QsdC40LfQvNC10L3QtdC90LjQuCDQvtGC0LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQvtGC0LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC+0LbQuNC00LDQvdC40Y8g0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQvtC/0L7QstC10YnQtdC90LjRjyDQvtGC0LrRgNGL0YLRjNC30L3QsNGH0LXQvdC40LUg0L7RgtC60YDRi9GC0YzQuNC90LTQtdC60YHRgdC/0YDQsNCy0LrQuCDQvtGC0LrRgNGL0YLRjNGB0L7QtNC10YDQttCw0L3QuNC10YHQv9GA0LDQstC60Lgg0L7RgtC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQvtGC0LrRgNGL0YLRjNGE0L7RgNC80YMg0L7RgtC60YDRi9GC0YzRhNC+0YDQvNGD0LzQvtC00LDQu9GM0L3QviDQvtGC0LzQtdC90LjRgtGM0YLRgNCw0L3Qt9Cw0LrRhtC40Y4g0L7Rh9C40YHRgtC40YLRjNC20YPRgNC90LDQu9GA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Rh9C40YHRgtC40YLRjNC90LDRgdGC0YDQvtC50LrQuNC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvtGH0LjRgdGC0LjRgtGM0YHQvtC+0LHRidC10L3QuNGPINC/0LDRgNCw0LzQtdGC0YDRi9C00L7RgdGC0YPQv9CwINC/0LXRgNC10LnRgtC40L/QvtC90LDQstC40LPQsNGG0LjQvtC90L3QvtC50YHRgdGL0LvQutC1INC/0LXRgNC10LzQtdGB0YLQuNGC0YzRhNCw0LnQuyDQv9C+0LTQutC70Y7Rh9C40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMg0L/QvtC00LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7QttC40LTQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0L/QvtC00LrQu9GO0YfQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10Lkg0L/QvtC00LrQu9GO0YfQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L/QvtC00YDQvtCx0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQvtGI0LjQsdC60Lgg0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00LTQsNGC0Ysg0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00LfQvdCw0YfQtdC90LjRjyDQv9C+0LrQsNC30LDRgtGM0LLQstC+0LTRgdGC0YDQvtC60Lgg0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00YfQuNGB0LvQsCDQv9C+0LrQsNC30LDRgtGM0LLQvtC/0YDQvtGBINC/0L7QutCw0LfQsNGC0YzQt9C90LDRh9C10L3QuNC1INC/0L7QutCw0LfQsNGC0YzQuNC90YTQvtGA0LzQsNGG0LjRjtC+0LHQvtGI0LjQsdC60LUg0L/QvtC60LDQt9Cw0YLRjNC90LDQutCw0YDRgtC1INC/0L7QutCw0LfQsNGC0YzQvtC/0L7QstC10YnQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+0LrQsNC30LDRgtGM0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQv9C+0LvQvdC+0LXQuNC80Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0L/QvtC70YPRh9C40YLRjGNvbdC+0LHRitC10LrRgiDQv9C+0LvRg9GH0LjRgtGMeG1s0YLQuNC/INC/0L7Qu9GD0YfQuNGC0YzQsNC00YDQtdGB0L/QvtC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40Y4g0L/QvtC70YPRh9C40YLRjNCx0LvQvtC60LjRgNC+0LLQutGD0YHQtdCw0L3RgdC+0LIg0L/QvtC70YPRh9C40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINC/0L7Qu9GD0YfQuNGC0YzQstGA0LXQvNGP0LfQsNGB0YvQv9Cw0L3QuNGP0L/QsNGB0YHQuNCy0L3QvtCz0L7RgdC10LDQvdGB0LAg0L/QvtC70YPRh9C40YLRjNCy0YDQtdC80Y/QvtC20LjQtNCw0L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60LjQtNCw0L3QvdGL0YUg0L/QvtC70YPRh9C40YLRjNC00LDQvdC90YvQtdCy0YvQsdC+0YDQsCDQv9C+0LvRg9GH0LjRgtGM0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQudC/0LDRgNCw0LzQtdGC0YDQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC00L7Qv9GD0YHRgtC40LzRi9C10LrQvtC00YvQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQtNC+0L/Rg9GB0YLQuNC80YvQtdGH0LDRgdC+0LLRi9C10L/QvtGP0YHQsCDQv9C+0LvRg9GH0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzQt9Cw0LPQvtC70L7QstC+0LrRgdC40YHRgtC10LzRiyDQv9C+0LvRg9GH0LjRgtGM0LfQvdCw0YfQtdC90LjRj9C+0YLQsdC+0YDQsNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LvRg9GH0LjRgtGM0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0L/QvtC70YPRh9C40YLRjNC40LfQstGA0LXQvNC10L3QvdC+0LPQvtGF0YDQsNC90LjQu9C40YnQsCDQv9C+0LvRg9GH0LjRgtGM0LjQvNGP0LLRgNC10LzQtdC90L3QvtCz0L7RhNCw0LnQu9CwINC/0L7Qu9GD0YfQuNGC0YzQuNC80Y/QutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC40L3RhNC+0YDQvNCw0YbQuNGO0Y3QutGA0LDQvdC+0LLQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/QvtC70YPRh9C40YLRjNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YHQvtCx0YvRgtC40Y/QttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/QvtC70YPRh9C40YLRjNC60YDQsNGC0LrQuNC50LfQsNCz0L7Qu9C+0LLQvtC60L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRjyDQv9C+0LvRg9GH0LjRgtGM0LzQsNGB0LrRg9Cy0YHQtdGE0LDQudC70Ysg0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GL0LrQu9C40LXQvdGC0LAg0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GL0YHQtdGA0LLQtdGA0LAg0L/QvtC70YPRh9C40YLRjNC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LXQv9C+0LDQtNGA0LXRgdGDINC/0L7Qu9GD0YfQuNGC0YzQvNC40L3QuNC80LDQu9GM0L3Rg9GO0LTQu9C40L3Rg9C/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNC90LDQstC40LPQsNGG0LjQvtC90L3Rg9GO0YHRgdGL0LvQutGDINC/0L7Qu9GD0YfQuNGC0YzQvdCw0LLQuNCz0LDRhtC40L7QvdC90YPRjtGB0YHRi9C70LrRg9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0L7QsdC90L7QstC70LXQvdC40LXQutC+0L3RhNC40LPRg9GA0LDRhtC40LjQsdCw0LfRi9C00LDQvdC90YvRhSDQv9C+0LvRg9GH0LjRgtGM0L7QsdC90L7QstC70LXQvdC40LXQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90YvRhdC00LDQvdC90YvRhdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0L7QsdGJ0LjQudC80LDQutC10YIg0L/QvtC70YPRh9C40YLRjNC+0LHRidGD0Y7RhNC+0YDQvNGDINC/0L7Qu9GD0YfQuNGC0YzQvtC60L3QsCDQv9C+0LvRg9GH0LjRgtGM0L7Qv9C10YDQsNGC0LjQstC90YPRjtC+0YLQvNC10YLQutGD0LLRgNC10LzQtdC90Lgg0L/QvtC70YPRh9C40YLRjNC+0YLQutC70Y7Rh9C10L3QuNC10LHQtdC30L7Qv9Cw0YHQvdC+0LPQvtGA0LXQttC40LzQsCDQv9C+0LvRg9GH0LjRgtGM0L/QsNGA0LDQvNC10YLRgNGL0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhdC+0L/RhtC40LnQuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC70L3QvtC10LjQvNGP0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGP0L3QsNCy0LjQs9Cw0YbQuNC+0L3QvdGL0YXRgdGB0YvQu9C+0Log0L/QvtC70YPRh9C40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INC/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0Lgg0L/QvtC70YPRh9C40YLRjNGA0LDQt9C00LXQu9C40YLQtdC70YzQv9GD0YLQuNC60LvQuNC10L3RgtCwINC/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0LjRgdC10YDQstC10YDQsCDQv9C+0LvRg9GH0LjRgtGM0YHQtdCw0L3RgdGL0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzRgdC60L7RgNC+0YHRgtGM0LrQu9C40LXQvdGC0YHQutC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjRj9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtC+0LHRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOINC/0L7Qu9GD0YfQuNGC0YzRgdC+0L7RgtCy0LXRgtGB0YLQstC40LXQvtCx0YrQtdC60YLQsNC40YTQvtGA0LzRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtGB0YLQsNCy0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0LjQvdGC0LXRgNGE0LXQudGB0LBvZGF0YSDQv9C+0LvRg9GH0LjRgtGM0YHRgtGA0YPQutGC0YPRgNGD0YXRgNCw0L3QtdC90LjRj9Cx0LDQt9GL0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzRgtC10LrRg9GJ0LjQudGB0LXQsNC90YHQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L/QvtC70YPRh9C40YLRjNGE0LDQudC7INC/0L7Qu9GD0YfQuNGC0YzRhNCw0LnQu9GLINC/0L7Qu9GD0YfQuNGC0YzRhNC+0YDQvNGDINC/0L7Qu9GD0YfQuNGC0YzRhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Rg9GO0L7Qv9GG0LjRjiDQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y7QuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQvtGBINC/0L7QvNC10YHRgtC40YLRjNCy0L7QstGA0LXQvNC10L3QvdC+0LXRhdGA0LDQvdC40LvQuNGJ0LUg0L/QvtC80LXRgdGC0LjRgtGM0YTQsNC50Lsg0L/QvtC80LXRgdGC0LjRgtGM0YTQsNC50LvRiyDQv9GA0LDQsiDQv9GA0LDQstC+0LTQvtGB0YLRg9C/0LAg0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LXQt9C90LDRh9C10L3QuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LrQvtC00LDQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/QtdGA0LjQvtC00LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9GA0LDQstCwINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/RgNC40LvQvtC20LXQvdC40Y8g0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGH0LDRgdC+0LLQvtCz0L7Qv9C+0Y/RgdCwINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUg0L/RgNC10LrRgNCw0YLQuNGC0YzRgNCw0LHQvtGC0YPRgdC40YHRgtC10LzRiyDQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDQv9GA0L7QtNC+0LvQttC40YLRjNCy0YvQt9C+0LIg0L/RgNC+0YfQuNGC0LDRgtGManNvbiDQv9GA0L7Rh9C40YLQsNGC0Yx4bWwg0L/RgNC+0YfQuNGC0LDRgtGM0LTQsNGC0YNqc29uINC/0YPRgdGC0LDRj9GB0YLRgNC+0LrQsCDRgNCw0LHQvtGH0LjQudC60LDRgtCw0LvQvtCz0LTQsNC90L3Ri9GF0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YzQtNCw0L3QvdGL0LXQtNC70Y/RgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGA0LDQt9C00LXQu9C40YLRjNGE0LDQudC7INGA0LDQt9C+0YDQstCw0YLRjNGB0L7QtdC00LjQvdC10L3QuNC10YHQstC90LXRiNC90LjQvNC40YHRgtC+0YfQvdC40LrQvtC80LTQsNC90L3Ri9GFINGA0LDRgdC60L7QtNC40YDQvtCy0LDRgtGM0YHRgtGA0L7QutGDINGA0L7Qu9GM0LTQvtGB0YLRg9C/0L3QsCDRgdC10LrRg9C90LTQsCDRgdC40LPQvdCw0Lsg0YHQuNC80LLQvtC7INGB0LrQvtC/0LjRgNC+0LLQsNGC0YzQttGD0YDQvdCw0LvRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGB0LzQtdGJ0LXQvdC40LXQu9C10YLQvdC10LPQvtCy0YDQtdC80LXQvdC4INGB0LzQtdGJ0LXQvdC40LXRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QstGA0LXQvNC10L3QuCDRgdC+0LXQtNC40L3QuNGC0YzQsdGD0YTQtdGA0YvQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINGB0L7Qt9C00LDRgtGM0LrQsNGC0LDQu9C+0LMg0YHQvtC30LTQsNGC0YzRhNCw0LHRgNC40LrRg3hkdG8g0YHQvtC60YDQuyDRgdC+0LrRgNC70L8g0YHQvtC60YDQvyDRgdC+0L7QsdGJ0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDRgdC+0YXRgNCw0L3QuNGC0YzQt9C90LDRh9C10L3QuNC1INGB0L7RhdGA0LDQvdC40YLRjNC90LDRgdGC0YDQvtC50LrQuNC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDRgdGA0LXQtCDRgdGC0YDQtNC70LjQvdCwINGB0YLRgNC30LDQutCw0L3Rh9C40LLQsNC10YLRgdGP0L3QsCDRgdGC0YDQt9Cw0LzQtdC90LjRgtGMINGB0YLRgNC90LDQudGC0Lgg0YHRgtGA0L3QsNGH0LjQvdCw0LXRgtGB0Y/RgSDRgdGC0YDQvtC60LAg0YHRgtGA0L7QutCw0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0YHRgtGA0L/QvtC70YPRh9C40YLRjNGB0YLRgNC+0LrRgyDRgdGC0YDRgNCw0LfQtNC10LvQuNGC0Ywg0YHRgtGA0YHQvtC10LTQuNC90LjRgtGMINGB0YLRgNGB0YDQsNCy0L3QuNGC0Ywg0YHRgtGA0YfQuNGB0LvQvtCy0YXQvtC20LTQtdC90LjQuSDRgdGC0YDRh9C40YHQu9C+0YHRgtGA0L7QuiDRgdGC0YDRiNCw0LHQu9C+0L0g0YLQtdC60YPRidCw0Y/QtNCw0YLQsCDRgtC10LrRg9GJ0LDRj9C00LDRgtCw0YHQtdCw0L3RgdCwINGC0LXQutGD0YnQsNGP0YPQvdC40LLQtdGA0YHQsNC70YzQvdCw0Y/QtNCw0YLQsCDRgtC10LrRg9GJ0LDRj9GD0L3QuNCy0LXRgNGB0LDQu9GM0L3QsNGP0LTQsNGC0LDQstC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFINGC0LXQutGD0YnQuNC50LLQsNGA0LjQsNC90YLQuNC90YLQtdGA0YTQtdC50YHQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgtC10LrRg9GJ0LjQudCy0LDRgNC40LDQvdGC0L7RgdC90L7QstC90L7Qs9C+0YjRgNC40YTRgtCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGC0LXQutGD0YnQuNC50LrQvtC00LvQvtC60LDQu9C40LfQsNGG0LjQuCDRgtC10LrRg9GJ0LjQudGA0LXQttC40LzQt9Cw0L/Rg9GB0LrQsCDRgtC10LrRg9GJ0LjQudGP0LfRi9C6INGC0LXQutGD0YnQuNC50Y/Qt9GL0LrRgdC40YHRgtC10LzRiyDRgtC40L8g0YLQuNC/0LfQvdGHINGC0YDQsNC90LfQsNC60YbQuNGP0LDQutGC0LjQstC90LAg0YLRgNC10LMg0YPQtNCw0LvQuNGC0YzQtNCw0L3QvdGL0LXQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0YPQtNCw0LvQuNGC0YzQuNC30LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAg0YPQtNCw0LvQuNGC0YzQvtCx0YrQtdC60YLRiyDRg9C00LDQu9C40YLRjNGE0LDQudC70Ysg0YPQvdC40LLQtdGA0YHQsNC70YzQvdC+0LXQstGA0LXQvNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC80YDQsNC30LTQtdC70LXQvdC40Y/QtNCw0L3QvdGL0YUg0YPRgdGC0LDQvdC+0LLQuNGC0YzQsdC70L7QutC40YDQvtCy0LrRg9GB0LXQsNC90YHQvtCyINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLQvdC10YjQvdGO0Y7QutC+0LzQv9C+0L3QtdC90YLRgyDRg9GB0YLQsNC90L7QstC40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C+0LbQuNC00LDQvdC40Y/QsdC70L7QutC40YDQvtCy0LrQuNC00LDQvdC90YvRhSDRg9GB0YLQsNC90L7QstC40YLRjNC30LDQs9C+0LvQvtCy0L7QutC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRg9GB0YLQsNC90L7QstC40YLRjNC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINGD0YHRgtCw0L3QvtCy0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0YPRgdGC0LDQvdC+0LLQuNGC0YzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGB0L7QsdGL0YLQuNGP0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGD0YHRgtCw0L3QvtCy0LjRgtGM0LrRgNCw0YLQutC40LnQt9Cw0LPQvtC70L7QstC+0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDRg9GB0YLQsNC90L7QstC40YLRjNC80LjQvdC40LzQsNC70YzQvdGD0Y7QtNC70LjQvdGD0L/QsNGA0L7Qu9C10LnQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDRg9GB0YLQsNC90L7QstC40YLRjNC80L7QvdC+0L/QvtC70YzQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40LrQu9C40LXQvdGC0LDQu9C40YbQtdC90LfQuNGA0L7QstCw0L3QuNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0L7QsdC90L7QstC70LXQvdC40LXQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90YvRhdC00LDQvdC90YvRhdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDRg9GB0YLQsNC90L7QstC40YLRjNC+0YLQutC70Y7Rh9C10L3QuNC10LHQtdC30L7Qv9Cw0YHQvdC+0LPQvtGA0LXQttC40LzQsCDRg9GB0YLQsNC90L7QstC40YLRjNC/0LDRgNCw0LzQtdGC0YDRi9GE0YPQvdC60YbQuNC+0L3QsNC70YzQvdGL0YXQvtC/0YbQuNC50LjQvdGC0LXRgNGE0LXQudGB0LAg0YPRgdGC0LDQvdC+0LLQuNGC0YzQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDRg9GB0YLQsNC90L7QstC40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdGE0LDQudC70LDQvNC4INGD0YHRgtCw0L3QvtCy0LjRgtGM0YHQvtC10LTQuNC90LXQvdC40LXRgdCy0L3QtdGI0L3QuNC80LjRgdGC0L7Rh9C90LjQutC+0LzQtNCw0L3QvdGL0YUg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0L7RgtCy0LXRgtGB0YLQstC40LXQvtCx0YrQtdC60YLQsNC40YTQvtGA0LzRiyDRg9GB0YLQsNC90L7QstC40YLRjNGB0L7RgdGC0LDQstGB0YLQsNC90LTQsNGA0YLQvdC+0LPQvtC40L3RgtC10YDRhNC10LnRgdCwb2RhdGEg0YPRgdGC0LDQvdC+0LLQuNGC0YzRh9Cw0YHQvtCy0L7QudC/0L7Rj9GB0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGD0YHRgtCw0L3QvtCy0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdGB0LXQsNC90YHQsCDRhNC+0YDQvNCw0YIg0YbQtdC7INGH0LDRgSDRh9Cw0YHQvtCy0L7QudC/0L7Rj9GBINGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAg0YfQuNGB0LvQviDRh9C40YHQu9C+0L/RgNC+0L/QuNGB0YzRjiDRjdGC0L7QsNC00YDQtdGB0LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAgd3PRgdGB0YvQu9C60Lgg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INCx0LjQsdC70LjQvtGC0LXQutCw0LzQsNC60LXRgtC+0LLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCx0LjQsdC70LjQvtGC0LXQutCw0YHRgtC40LvQtdC5INCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0Ysg0LLQvdC10YjQvdC40LXQuNGB0YLQvtGH0L3QuNC60LjQtNCw0L3QvdGL0YUg0LLQvdC10YjQvdC40LXQvtCx0YDQsNCx0L7RgtC60Lgg0LLQvdC10YjQvdC40LXQvtGC0YfQtdGC0Ysg0LLRgdGC0YDQvtC10L3QvdGL0LXQv9C+0LrRg9C/0LrQuCDQs9C70LDQstC90YvQudC40L3RgtC10YDRhNC10LnRgSDQs9C70LDQstC90YvQudGB0YLQuNC70Ywg0LTQvtC60YPQvNC10L3RgtGLINC00L7RgdGC0LDQstC70Y/QtdC80YvQtdGD0LLQtdC00L7QvNC70LXQvdC40Y8g0LbRg9GA0L3QsNC70YvQtNC+0LrRg9C80LXQvdGC0L7QsiDQt9Cw0LTQsNGH0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y/QvtCx0LjQvdGC0LXRgNC90LXRgtGB0L7QtdC00LjQvdC10L3QuNC4INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNCx0L7Rh9C10LnQtNCw0YLRiyDQuNGB0YLQvtGA0LjRj9GA0LDQsdC+0YLRi9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0LrRgNC40YLQtdGA0LjQuNC+0YLQsdC+0YDQsCDQvNC10YLQsNC00LDQvdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGA0LXQutC70LDQvNGLINC+0YLQv9GA0LDQstC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC+0YLRh9C10YLRiyDQv9Cw0L3QtdC70YzQt9Cw0LTQsNGH0L7RgSDQv9Cw0YDQsNC80LXRgtGA0LfQsNC/0YPRgdC60LAg0L/QsNGA0LDQvNC10YLRgNGL0YHQtdCw0L3RgdCwINC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyDQv9C70LDQvdGL0LLQuNC00L7QstGA0LDRgdGH0LXRgtCwINC/0LvQsNC90YvQstC40LTQvtCy0YXQsNGA0LDQutGC0LXRgNC40YHRgtC40Log0L/Qu9Cw0L3Ri9C+0LHQvNC10L3QsCDQv9C70LDQvdGL0YHRh9C10YLQvtCyINC/0L7Qu9C90L7RgtC10LrRgdGC0L7QstGL0LnQv9C+0LjRgdC6INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuNC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0L/RgNC+0LLQtdGA0LrQsNCy0YHRgtGA0L7QtdC90L3Ri9GF0L/QvtC60YPQv9C+0Log0YDQsNCx0L7Rh9Cw0Y/QtNCw0YLQsCDRgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgNC10LPQuNGB0YLRgNGL0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDRgNC10LPQuNGB0YLRgNGL0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdCz0LjRgdGC0YDRi9GA0LDRgdGH0LXRgtCwINGA0LXQs9C40YHRgtGA0YvRgdCy0LXQtNC10L3QuNC5INGA0LXQs9C70LDQvNC10L3RgtC90YvQtdC30LDQtNCw0L3QuNGPINGB0LXRgNC40LDQu9C40LfQsNGC0L7RgHhkdG8g0YHQv9GA0LDQstC+0YfQvdC40LrQuCDRgdGA0LXQtNGB0YLQstCw0LPQtdC+0L/QvtC30LjRhtC40L7QvdC40YDQvtCy0LDQvdC40Y8g0YHRgNC10LTRgdGC0LLQsNC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgdGA0LXQtNGB0YLQstCw0LzRg9C70YzRgtC40LzQtdC00LjQsCDRgdGA0LXQtNGB0YLQstCw0L7RgtC+0LHRgNCw0LbQtdC90LjRj9GA0LXQutC70LDQvNGLINGB0YDQtdC00YHRgtCy0LDQv9C+0YfRgtGLINGB0YDQtdC00YHRgtCy0LDRgtC10LvQtdGE0L7QvdC40Lgg0YTQsNCx0YDQuNC60LB4ZHRvINGE0LDQudC70L7QstGL0LXQv9C+0YLQvtC60Lgg0YTQvtC90L7QstGL0LXQt9Cw0LTQsNC90LjRjyDRhdGA0LDQvdC40LvQuNGJ0LDQvdCw0YHRgtGA0L7QtdC6INGF0YDQsNC90LjQu9C40YnQtdCy0LDRgNC40LDQvdGC0L7QstC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdC90LDRgdGC0YDQvtC10LrQtNCw0L3QvdGL0YXRhNC+0YDQvCDRhdGA0LDQvdC40LvQuNGJ0LXQvtCx0YnQuNGF0L3QsNGB0YLRgNC+0LXQuiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQtNC40L3QsNC80LjRh9C10YHQutC40YXRgdC/0LjRgdC60L7QsiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQvtGC0YfQtdGC0L7QsiDRhdGA0LDQvdC40LvQuNGJ0LXRgdC40YHRgtC10LzQvdGL0YXQvdCw0YHRgtGA0L7QtdC6ICIsY2xhc3M6IndlYtGG0LLQtdGC0LAgd2luZG93c9GG0LLQtdGC0LAgd2luZG93c9GI0YDQuNGE0YLRiyDQsdC40LHQu9C40L7RgtC10LrQsNC60LDRgNGC0LjQvdC+0Log0YDQsNC80LrQuNGB0YLQuNC70Y8g0YHQuNC80LLQvtC70Ysg0YbQstC10YLQsNGB0YLQuNC70Y8g0YjRgNC40YTRgtGL0YHRgtC40LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC10YHQvtGF0YDQsNC90LXQvdC40LXQtNCw0L3QvdGL0YXRhNC+0YDQvNGL0LLQvdCw0YHRgtGA0L7QudC60LDRhSDQsNCy0YLQvtC90YPQvNC10YDQsNGG0LjRj9Cy0YTQvtGA0LzQtSDQsNCy0YLQvtGA0LDQt9C00LLQuNC20LXQvdC40LXRgdC10YDQuNC5INCw0L3QuNC80LDRhtC40Y/QtNC40LDQs9GA0LDQvNC80Ysg0LLQsNGA0LjQsNC90YLQstGL0YDQsNCy0L3QuNCy0LDQvdC40Y/RjdC70LXQvNC10L3RgtC+0LLQuNC30LDQs9C+0LvQvtCy0LrQvtCyINCy0LDRgNC40LDQvdGC0YPQv9GA0LDQstC70LXQvdC40Y/QstGL0YHQvtGC0L7QudGC0LDQsdC70LjRhtGLINCy0LXRgNGC0LjQutCw0LvRjNC90LDRj9C/0YDQvtC60YDRg9GC0LrQsNGE0L7RgNC80Ysg0LLQtdGA0YLQuNC60LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC1INCy0LXRgNGC0LjQutCw0LvRjNC90L7QtdC/0L7Qu9C+0LbQtdC90LjQtdGN0LvQtdC80LXQvdGC0LAg0LLQuNC00LPRgNGD0L/Qv9GL0YTQvtGA0LzRiyDQstC40LTQtNC10LrQvtGA0LDRhtC40LjRhNC+0YDQvNGLINCy0LjQtNC00L7Qv9C+0LvQvdC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0LLQuNC00LjQt9C80LXQvdC10L3QuNGP0LTQsNC90L3Ri9GFINCy0LjQtNC60L3QvtC/0LrQuNGE0L7RgNC80Ysg0LLQuNC00L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Y8g0LLQuNC00L/QvtC00L/QuNGB0LXQudC60LTQuNCw0LPRgNCw0LzQvNC1INCy0LjQtNC/0L7Qu9GP0YTQvtGA0LzRiyDQstC40LTRhNC70LDQttC60LAg0LLQu9C40Y/QvdC40LXRgNCw0LfQvNC10YDQsNC90LDQv9GD0LfRi9GA0LXQutC00LjQsNCz0YDQsNC80LzRiyDQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC1INCz0L7RgNC40LfQvtC90YLQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LXRjdC70LXQvNC10L3RgtCwINCz0YDRg9C/0L/QuNGA0L7QstC60LDQutC+0LvQvtC90L7QuiDQs9GA0YPQv9C/0LjRgNC+0LLQutCw0L/QvtC00YfQuNC90LXQvdC90YvRhdGN0LvQtdC80LXQvdGC0L7QstGE0L7RgNC80Ysg0LPRgNGD0L/Qv9GL0LjRjdC70LXQvNC10L3RgtGLINC00LXQudGB0YLQstC40LXQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LnRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQtNC+0L/Rg9GB0YLQuNC80YvQtdC00LXQudGB0YLQstC40Y/Qv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPINC40L3RgtC10YDQstCw0LvQvNC10LbQtNGD0Y3Qu9C10LzQtdC90YLQsNC80LjRhNC+0YDQvNGLINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLRi9Cy0L7QtNCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L7RgdGL0L/RgNC+0LrRgNGD0YLQutC4INC40YHQv9C+0LvRjNC30YPQtdC80L7QtdC30L3QsNGH0LXQvdC40LXRgtC+0YfQutC40LHQuNGA0LbQtdCy0L7QudC00LjQsNCz0YDQsNC80LzRiyDQuNGB0YLQvtGA0LjRj9Cy0YvQsdC+0YDQsNC/0YDQuNCy0LLQvtC00LUg0LjRgdGC0L7Rh9C90LjQutC30L3QsNGH0LXQvdC40LnQvtGB0LjRgtC+0YfQtdC60LTQuNCw0LPRgNCw0LzQvNGLINC40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNGP0YDQsNC30LzQtdGA0LDQv9GD0LfRi9GA0YzQutCw0LTQuNCw0LPRgNCw0LzQvNGLINC60LDRgtC10LPQvtGA0LjRj9Cz0YDRg9C/0L/Ri9C60L7QvNCw0L3QtCDQvNCw0LrRgdC40LzRg9C80YHQtdGA0LjQuSDQvdCw0YfQsNC70YzQvdC+0LXQvtGC0L7QsdGA0LDQttC10L3QuNC10LTQtdGA0LXQstCwINC90LDRh9Cw0LvRjNC90L7QtdC+0YLQvtCx0YDQsNC20LXQvdC40LXRgdC/0LjRgdC60LAg0L7QsdC90L7QstC70LXQvdC40LXRgtC10LrRgdGC0LDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC+0YDQuNC10L3RgtCw0YbQuNGP0LTQtdC90LTRgNC+0LPRgNCw0LzQvNGLINC+0YDQuNC10L3RgtCw0YbQuNGP0LTQuNCw0LPRgNCw0LzQvNGLINC+0YDQuNC10L3RgtCw0YbQuNGP0LzQtdGC0L7QutC00LjQsNCz0YDQsNC80LzRiyDQvtGA0LjQtdC90YLQsNGG0LjRj9C80LXRgtC+0LrRgdCy0L7QtNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQvtGA0LjQtdC90YLQsNGG0LjRj9GN0LvQtdC80LXQvdGC0LDRhNC+0YDQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXQstC00LjQsNCz0YDQsNC80LzQtSDQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQu9C10LPQtdC90LTQtdC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LPRgNGD0L/Qv9GL0LrQvdC+0L/QvtC6INC+0YLQvtCx0YDQsNC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXQt9C90LDRh9C10L3QuNC50YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC30L3QsNGH0LXQvdC40Y/QuNC30LzQtdGA0LjRgtC10LvRjNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LjQvdGC0LXRgNCy0LDQu9Cw0LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDQvtGC0L7QsdGA0LDQttC10L3QuNC10LrQvdC+0L/QutC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXQutC90L7Qv9C60LjQstGL0LHQvtGA0LAg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0LHRgdGD0LbQtNC10L3QuNC50YTQvtGA0LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10L7QsdGL0YfQvdC+0LnQs9GA0YPQv9C/0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9GF0LfQvdCw0YfQtdC90LjQudC/0YPQt9GL0YDRjNC60L7QstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNC/0L7QuNGB0LrQsCDQvtGC0L7QsdGA0LDQttC10L3QuNC10L/QvtC00YHQutCw0LfQutC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGP0L/RgNC40YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC10YDQsNC30LzQtdGC0LrQuNC/0L7Qu9C+0YHRi9GA0LXQs9GD0LvQuNGA0L7QstCw0L3QuNGPINC+0YLQvtCx0YDQsNC20LXQvdC40LXRgdGC0YDQsNC90LjRhtGE0L7RgNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGC0LDQsdC70LjRhtGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXRgtC10LrRgdGC0LDQt9C90LDRh9C10L3QuNGP0LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDQvtGC0L7QsdGA0LDQttC10L3QuNC10YPQv9GA0LDQstC70LXQvdC40Y/QvtCx0YvRh9C90L7QudCz0YDRg9C/0L/RiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YTQuNCz0YPRgNGL0LrQvdC+0L/QutC4INC/0LDQu9C40YLRgNCw0YbQstC10YLQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINC/0L7QstC10LTQtdC90LjQtdC+0LHRi9GH0L3QvtC50LPRgNGD0L/Qv9GLINC/0L7QtNC00LXRgNC20LrQsNC80LDRgdGI0YLQsNCx0LDQtNC10L3QtNGA0L7Qs9GA0LDQvNC80Ysg0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNGB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLINC/0L7QuNGB0LrQstGC0LDQsdC70LjRhtC10L/RgNC40LLQstC+0LTQtSDQv9C+0LvQvtC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRjdC70LXQvNC10L3RgtCw0YTQvtGA0LzRiyDQv9C+0LvQvtC20LXQvdC40LXQutCw0YDRgtC40L3QutC40LrQvdC+0L/QutC40YTQvtGA0LzRiyDQv9C+0LvQvtC20LXQvdC40LXQutCw0YDRgtC40L3QutC40Y3Qu9C10LzQtdC90YLQsNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60L7QvNCw0L3QtNC90L7QudC/0LDQvdC10LvQuNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQvtC80LDQvdC00L3QvtC50L/QsNC90LXQu9C40Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10L7Qv9C+0YDQvdC+0LnRgtC+0YfQutC40L7RgtGA0LjRgdC+0LLQutC4INC/0L7Qu9C+0LbQtdC90LjQtdC/0L7QtNC/0LjRgdC10LnQutC00LjQsNCz0YDQsNC80LzQtSDQv9C+0LvQvtC20LXQvdC40LXQv9C+0LTQv9C40YHQtdC50YjQutCw0LvRi9C30L3QsNGH0LXQvdC40LnQuNC30LzQtdGA0LjRgtC10LvRjNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQv9C+0LvQvtC20LXQvdC40LXRgdC+0YHRgtC+0Y/QvdC40Y/Qv9GA0L7RgdC80L7RgtGA0LAg0L/QvtC70L7QttC10L3QuNC10YHRgtGA0L7QutC40L/QvtC40YHQutCwINC/0L7Qu9C+0LbQtdC90LjQtdGC0LXQutGB0YLQsNGB0L7QtdC00LjQvdC40YLQtdC70YzQvdC+0LnQu9C40L3QuNC4INC/0L7Qu9C+0LbQtdC90LjQtdGD0L/RgNCw0LLQu9C10L3QuNGP0L/QvtC40YHQutC+0Lwg0L/QvtC70L7QttC10L3QuNC10YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4INC/0L7RgNGP0LTQvtC60L7RgtC+0LHRgNCw0LbQtdC90LjRj9GC0L7Rh9C10LrQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC50LPQuNGB0YLQvtCz0YDQsNC80LzRiyDQv9C+0YDRj9C00L7QutGB0LXRgNC40LnQstC70LXQs9C10L3QtNC10LTQuNCw0LPRgNCw0LzQvNGLINGA0LDQt9C80LXRgNC60LDRgNGC0LjQvdC60Lgg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyDRgNCw0YHRgtGP0LPQuNCy0LDQvdC40LXQv9C+0LLQtdGA0YLQuNC60LDQu9C40LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDRgNC10LbQuNC80LDQstGC0L7QvtGC0L7QsdGA0LDQttC10L3QuNGP0YHQvtGB0YLQvtGP0L3QuNGPINGA0LXQttC40LzQstCy0L7QtNCw0YHRgtGA0L7QutGC0LDQsdC70LjRhtGLINGA0LXQttC40LzQstGL0LHQvtGA0LDQvdC10LfQsNC/0L7Qu9C90LXQvdC90L7Qs9C+INGA0LXQttC40LzQstGL0LTQtdC70LXQvdC40Y/QtNCw0YLRiyDRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0YHRgtGA0L7QutC40YLQsNCx0LvQuNGG0Ysg0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRhtGLINGA0LXQttC40LzQuNC30LzQtdC90LXQvdC40Y/RgNCw0LfQvNC10YDQsCDRgNC10LbQuNC80LjQt9C80LXQvdC10L3QuNGP0YHQstGP0LfQsNC90L3QvtCz0L7Qt9C90LDRh9C10L3QuNGPINGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C00LjQsNC70L7Qs9Cw0L/QtdGH0LDRgtC4INGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C/0LDRgNCw0LzQtdGC0YDQsNC60L7QvNCw0L3QtNGLINGA0LXQttC40LzQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDQvdC40Y/Qv9GA0L7RgdC80L7RgtGA0LAg0YDQtdC20LjQvNC+0YHQvdC+0LLQvdC+0LPQvtC+0LrQvdCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0L7QutC90LDRhNC+0YDQvNGLINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LLRi9C00LXQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50YHQtdGA0LjQuCDRgNC10LbQuNC80L7RgtGA0LjRgdC+0LLQutC40YHQtdGC0LrQuNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGA0LXQttC40LzQv9C+0LvRg9C/0YDQvtC30YDQsNGH0L3QvtGB0YLQuNC00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80L/RgNC+0LHQtdC70L7QstC00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80YDQsNC30LzQtdGJ0LXQvdC40Y/QvdCw0YHRgtGA0LDQvdC40YbQtSDRgNC10LbQuNC80YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRj9C60L7Qu9C+0L3QutC4INGA0LXQttC40LzRgdCz0LvQsNC20LjQstCw0L3QuNGP0LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzRgdCz0LvQsNC20LjQstCw0L3QuNGP0LjQvdC00LjQutCw0YLQvtGA0LAg0YDQtdC20LjQvNGB0L/QuNGB0LrQsNC30LDQtNCw0Ycg0YHQutCy0L7Qt9C90L7QtdCy0YvRgNCw0LLQvdC40LLQsNC90LjQtSDRgdC+0YXRgNCw0L3QtdC90LjQtdC00LDQvdC90YvRhdGE0L7RgNC80YvQstC90LDRgdGC0YDQvtC50LrQsNGFINGB0L/QvtGB0L7QsdC30LDQv9C+0LvQvdC10L3QuNGP0YLQtdC60YHRgtCw0LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyDRgdC/0L7RgdC+0LHQvtC/0YDQtdC00LXQu9C10L3QuNGP0L7Qs9GA0LDQvdC40YfQuNCy0LDRjtGJ0LXQs9C+0LfQvdCw0YfQtdC90LjRj9C00LjQsNCz0YDQsNC80LzRiyDRgdGC0LDQvdC00LDRgNGC0L3QsNGP0LPRgNGD0L/Qv9Cw0LrQvtC80LDQvdC0INGB0YLQsNC90LTQsNGA0YLQvdC+0LXQvtGE0L7RgNC80LvQtdC90LjQtSDRgdGC0LDRgtGD0YHQvtC/0L7QstC10YnQtdC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDRgdGC0LjQu9GM0YHRgtGA0LXQu9C60Lgg0YLQuNC/0LDQv9C/0YDQvtC60YHQuNC80LDRhtC40LjQu9C40L3QuNC40YLRgNC10L3QtNCw0LTQuNCw0LPRgNCw0LzQvNGLINGC0LjQv9C00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QtdC00LjQvdC40YbRi9GI0LrQsNC70YvQstGA0LXQvNC10L3QuCDRgtC40L/QuNC80L/QvtGA0YLQsNGB0LXRgNC40LnRgdC70L7Rj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C70LjQvdC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/Qu9C40L3QuNC40LTQuNCw0LPRgNCw0LzQvNGLINGC0LjQv9C80LDRgNC60LXRgNCw0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0LzQsNGA0LrQtdGA0LDQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0L7QsdC70LDRgdGC0LjQvtGE0L7RgNC80LvQtdC90LjRjyDRgtC40L/QvtGA0LPQsNC90LjQt9Cw0YbQuNC40LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GF0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0L7RgtC+0LHRgNCw0LbQtdC90LjRj9GB0LXRgNC40LjRgdC70L7Rj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgtC+0YfQtdGH0L3QvtCz0L7QvtCx0YrQtdC60YLQsNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RiNC60LDQu9GL0Y3Qu9C10LzQtdC90YLQsNC70LXQs9C10L3QtNGL0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0L/QvtC40YHQutCw0L7QsdGK0LXQutGC0L7QstCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C/0YDQvtC10LrRhtC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9C40LfQvNC10YDQtdC90LjQuSDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9GA0LXQutCy0LjQt9C40YLQvtCy0LjQt9C80LXRgNC10L3QuNC5INGC0LjQv9GA0LDQvNC60LjRjdC70LXQvNC10L3RgtCw0YPQv9GA0LDQstC70LXQvdC40Y8g0YLQuNC/0YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0YHQstGP0LfQuNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50L/QvtGB0LXRgNC40Y/QvNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GC0L7Rh9C10LrQtNC40LDQs9GA0LDQvNC80Ysg0YLQuNC/0YHQvtC10LTQuNC90LjRgtC10LvRjNC90L7QudC70LjQvdC40Lgg0YLQuNC/0YHRgtC+0YDQvtC90YvRjdC70LXQvNC10L3RgtCw0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0YTQvtGA0LzRi9C+0YLRh9C10YLQsCDRgtC40L/RiNC60LDQu9GL0YDQsNC00LDRgNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDRhNCw0LrRgtC+0YDQu9C40L3QuNC40YLRgNC10L3QtNCw0LTQuNCw0LPRgNCw0LzQvNGLINGE0LjQs9GD0YDQsNC60L3QvtC/0LrQuCDRhNC40LPRg9GA0YvQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRhNC40LrRgdCw0YbQuNGP0LLRgtCw0LHQu9C40YbQtSDRhNC+0YDQvNCw0YLQtNC90Y/RiNC60LDQu9GL0LLRgNC10LzQtdC90Lgg0YTQvtGA0LzQsNGC0LrQsNGA0YLQuNC90LrQuCDRiNC40YDQuNC90LDQv9C+0LTRh9C40L3QtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YTQvtGA0LzRiyDQstC40LTQtNCy0LjQttC10L3QuNGP0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDQstC40LTQtNCy0LjQttC10L3QuNGP0L3QsNC60L7Qv9C70LXQvdC40Y8g0LLQuNC00L/QtdGA0LjQvtC00LDRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0LLQuNC00YHRh9C10YLQsCDQstC40LTRgtC+0YfQutC40LzQsNGA0YjRgNGD0YLQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsNCz0YDQtdCz0LDRgtCw0YDQtdCz0LjRgdGC0YDQsNC90LDQutC+0L/Qu9C10L3QuNGPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LPRgNGD0L/Qv9C40Y3Qu9C10LzQtdC90YLQvtCyINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQtdC20LjQvNCw0L/RgNC+0LLQtdC00LXQvdC40Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdGA0LXQt9CwINC/0LXRgNC40L7QtNC40YfQvdC+0YHRgtGM0LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDRgNC10LbQuNC80LDQstGC0L7QstGA0LXQvNGPINGA0LXQttC40LzQt9Cw0L/QuNGB0LjQtNC+0LrRg9C80LXQvdGC0LAg0YDQtdC20LjQvNC/0YDQvtCy0LXQtNC10L3QuNGP0LTQvtC60YPQvNC10L3RgtCwINCw0LLRgtC+0YDQtdCz0LjRgdGC0YDQsNGG0LjRj9C40LfQvNC10L3QtdC90LjQuSDQtNC+0L/Rg9GB0YLQuNC80YvQudC90L7QvNC10YDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7RgtC/0YDQsNCy0LrQsNGN0LvQtdC80LXQvdGC0LDQtNCw0L3QvdGL0YUg0L/QvtC70YPRh9C10L3QuNC10Y3Qu9C10LzQtdC90YLQsNC00LDQvdC90YvRhSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDRgdGI0LjRhNGA0L7QstC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDQvtGA0LjQtdC90YLQsNGG0LjRj9GB0YLRgNCw0L3QuNGG0Ysg0L/QvtC70L7QttC10L3QuNC10LjRgtC+0LPQvtCy0LrQvtC70L7QvdC+0LrRgdCy0L7QtNC90L7QudGC0LDQsdC70LjRhtGLINC/0L7Qu9C+0LbQtdC90LjQtdC40YLQvtCz0L7QstGB0YLRgNC+0LrRgdCy0L7QtNC90L7QudGC0LDQsdC70LjRhtGLINC/0L7Qu9C+0LbQtdC90LjQtdGC0LXQutGB0YLQsNC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QvtC60LDRgNGC0LjQvdC60Lgg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGB0L/QvtGB0L7QsdGH0YLQtdC90LjRj9C30L3QsNGH0LXQvdC40LnRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QtNCy0YPRgdGC0L7RgNC+0L3QvdC10LnQv9C10YfQsNGC0Lgg0YLQuNC/0LfQsNC/0L7Qu9C90LXQvdC40Y/QvtCx0LvQsNGB0YLQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C60YPRgNGB0L7RgNC+0LLRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/Qu9C40L3QuNC40YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/Qu9C40L3QuNC40Y/Rh9C10LnQutC40YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0L3QsNC/0YDQsNCy0LvQtdC90LjRj9C/0LXRgNC10YXQvtC00LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QvtGC0L7QsdGA0LDQttC10L3QuNGP0LLRi9C00LXQu9C10L3QuNGP0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0L7RgtC+0LHRgNCw0LbQtdC90LjRj9C70LjQvdC40LnRgdCy0L7QtNC90L7QudGC0LDQsdC70LjRhtGLINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0YLQtdC60YHRgtCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/RgdC80LXRidC10L3QuNGP0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YPQt9C+0YDQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9GE0LDQudC70LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC+0YfQvdC+0YHRgtGM0L/QtdGH0LDRgtC4INGH0LXRgNC10LTQvtCy0LDQvdC40LXRgNCw0YHQv9C+0LvQvtC20LXQvdC40Y/RgdGC0YDQsNC90LjRhiDQvtGC0L7QsdGA0LDQttC10L3QuNC10LLRgNC10LzQtdC90LjRjdC70LXQvNC10L3RgtC+0LLQv9C70LDQvdC40YDQvtCy0YnQuNC60LAg0YLQuNC/0YTQsNC50LvQsNGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINC+0LHRhdC+0LTRgNC10LfRg9C70YzRgtCw0YLQsNC30LDQv9GA0L7RgdCwINGC0LjQv9C30LDQv9C40YHQuNC30LDQv9GA0L7RgdCwINCy0LjQtNC30LDQv9C+0LvQvdC10L3QuNGP0YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC/0L7RgdGC0YDQvtC40YLQtdC70Y/QvtGC0YfQtdGC0LAg0YLQuNC/0LTQvtCx0LDQstC70LXQvdC40Y/Qv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0L7RgtGH0LXRgtCwINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjRgtC+0LPQvtCyINC00L7RgdGC0YPQv9C60YTQsNC50LvRgyDRgNC10LbQuNC80LTQuNCw0LvQvtCz0LDQstGL0LHQvtGA0LDRhNCw0LnQu9CwINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQsNC50LvQsCDRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0LfQsNC/0YDQvtGB0LAg0LLQuNC00LTQsNC90L3Ri9GF0LDQvdCw0LvQuNC30LAg0LzQtdGC0L7QtNC60LvQsNGB0YLQtdGA0LjQt9Cw0YbQuNC4INGC0LjQv9C10LTQuNC90LjRhtGL0LjQvdGC0LXRgNCy0LDQu9Cw0LLRgNC10LzQtdC90LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/Qt9Cw0L/QvtC70L3QtdC90LjRj9GC0LDQsdC70LjRhtGL0YDQtdC30YPQu9GM0YLQsNGC0LDQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/QuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GH0LjRgdC70L7QstGL0YXQt9C90LDRh9C10L3QuNC50LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GF0L/QvtC40YHQutCw0LDRgdGB0L7RhtC40LDRhtC40Lkg0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC00LXRgNC10LLQvtGA0LXRiNC10L3QuNC5INGC0LjQv9C60L7Qu9C+0L3QutC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YXQutC70LDRgdGC0LXRgNC40LfQsNGG0LjRjyDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0L7QsdGJ0LDRj9GB0YLQsNGC0LjRgdGC0LjQutCwINGC0LjQv9C60L7Qu9C+0L3QutC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YXQv9C+0LjRgdC60LDRgdGB0L7RhtC40LDRhtC40Lkg0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC/0L7QuNGB0LrQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQuSDRgtC40L/QutC+0LvQvtC90LrQuNC80L7QtNC10LvQuNC/0YDQvtCz0L3QvtC30LAg0YLQuNC/0LzQtdGA0YvRgNCw0YHRgdGC0L7Rj9C90LjRj9Cw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINGC0LjQv9C+0YLRgdC10YfQtdC90LjRj9C/0YDQsNCy0LjQu9Cw0YHRgdC+0YbQuNCw0YbQuNC4INGC0LjQv9C/0L7Qu9GP0LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YHRgtCw0L3QtNCw0YDRgtC40LfQsNGG0LjQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINGC0LjQv9GD0L/QvtGA0Y/QtNC+0YfQuNCy0LDQvdC40Y/Qv9GA0LDQstC40LvQsNGB0YHQvtGG0LjQsNGG0LjQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINGC0LjQv9GD0L/QvtGA0Y/QtNC+0YfQuNCy0LDQvdC40Y/RiNCw0LHQu9C+0L3QvtCy0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC10LnQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/Rg9C/0YDQvtGJ0LXQvdC40Y/QtNC10YDQtdCy0LDRgNC10YjQtdC90LjQuSB3c9C90LDQv9GA0LDQstC70LXQvdC40LXQv9Cw0YDQsNC80LXRgtGA0LAg0LLQsNGA0LjQsNC90YJ4cGF0aHhzINCy0LDRgNC40LDQvdGC0LfQsNC/0LjRgdC40LTQsNGC0Ytqc29uINCy0LDRgNC40LDQvdGC0L/RgNC+0YHRgtC+0LPQvtGC0LjQv9CweHMg0LLQuNC00LPRgNGD0L/Qv9GL0LzQvtC00LXQu9C4eHMg0LLQuNC00YTQsNGB0LXRgtCweGR0byDQtNC10LnRgdGC0LLQuNC10L/QvtGB0YLRgNC+0LjRgtC10LvRj2RvbSDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHQvtGB0YLQsNCy0L3QvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHRhdC10LzRi3hzINC30LDQv9GA0LXRidC10L3QvdGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0LjRgdC60LvRjtGH0LXQvdC40Y/Qs9GA0YPQv9C/0L/QvtC00YHRgtCw0L3QvtCy0LrQuHhzINC60LDRgtC10LPQvtGA0LjRj9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LDRgtGA0LjQsdGD0YLQsHhzINC60LDRgtC10LPQvtGA0LjRj9C+0LPRgNCw0L3QuNGH0LXQvdC40Y/QuNC00LXQvdGC0LjRh9C90L7RgdGC0Lh4cyDQutCw0YLQtdCz0L7RgNC40Y/QvtCz0YDQsNC90LjRh9C10L3QuNGP0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC40LzQtdC9eHMg0LzQtdGC0L7QtNC90LDRgdC70LXQtNC+0LLQsNC90LjRj3hzINC80L7QtNC10LvRjNGB0L7QtNC10YDQttC40LzQvtCz0L54cyDQvdCw0LfQvdCw0YfQtdC90LjQtdGC0LjQv9CweG1sINC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtdC/0L7QtNGB0YLQsNC90L7QstC60Lh4cyDQvtCx0YDQsNCx0L7RgtC60LDQv9GA0L7QsdC10LvRjNC90YvRhdGB0LjQvNCy0L7Qu9C+0LJ4cyDQvtCx0YDQsNCx0L7RgtC60LDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+eHMg0L7Qs9GA0LDQvdC40YfQtdC90LjQtdC30L3QsNGH0LXQvdC40Y94cyDQv9Cw0YDQsNC80LXRgtGA0YvQvtGC0LHQvtGA0LDRg9C30LvQvtCyZG9tINC/0LXRgNC10L3QvtGB0YHRgtGA0L7Qumpzb24g0L/QvtC30LjRhtC40Y/QstC00L7QutGD0LzQtdC90YLQtWRvbSDQv9GA0L7QsdC10LvRjNC90YvQtdGB0LjQvNCy0L7Qu9GLeG1sINGC0LjQv9Cw0YLRgNC40LHRg9GC0LB4bWwg0YLQuNC/0LfQvdCw0YfQtdC90LjRj2pzb24g0YLQuNC/0LrQsNC90L7QvdC40YfQtdGB0LrQvtCz0L54bWwg0YLQuNC/0LrQvtC80L/QvtC90LXQvdGC0Yt4cyDRgtC40L/Qv9GA0L7QstC10YDQutC4eG1sINGC0LjQv9GA0LXQt9GD0LvRjNGC0LDRgtCwZG9teHBhdGgg0YLQuNC/0YPQt9C70LBkb20g0YLQuNC/0YPQt9C70LB4bWwg0YTQvtGA0LzQsHhtbCDRhNC+0YDQvNCw0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y94cyDRhNC+0YDQvNCw0YLQtNCw0YLRi2pzb24g0Y3QutGA0LDQvdC40YDQvtCy0LDQvdC40LXRgdC40LzQstC+0LvQvtCyanNvbiDQstC40LTRgdGA0LDQstC90LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQtNC10LnRgdGC0LLQuNC10L7QsdGA0LDQsdC+0YLQutC40YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdCy0LvQvtC20LXQvdC90YvRhdGN0LvQtdC80LXQvdGC0L7QstGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LjRgtC+0LPQvtCy0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC/0L7Qu9C10LnQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10L/QvtC70Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXRgNC10LrQstC40LfQuNGC0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdGA0LXRgdGD0YDRgdC+0LLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QsdGD0YXQs9Cw0LvRgtC10YDRgdC60L7Qs9C+0L7RgdGC0LDRgtC60LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QstGL0LLQvtC00LDRgtC10LrRgdGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/Qs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LPRgNGD0L/Qv9GL0Y3Qu9C10LzQtdC90YLQvtCy0L7RgtCx0L7RgNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LTQvtC/0L7Qu9C90LXQvdC40Y/Qv9C10YDQuNC+0LTQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C30LDQs9C+0LvQvtCy0LrQsNC/0L7Qu9C10LnQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvNCw0LrQtdGC0LDQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LzQsNC60LXRgtCw0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C/0LXRgNC40L7QtNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0YDQsNC30LzQtdGJ0LXQvdC40Y/RgtC10LrRgdGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RgdCy0Y/Qt9C40L3QsNCx0L7RgNC+0LLQtNCw0L3QvdGL0YXQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RjdC70LXQvNC10L3RgtCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQu9C10LPQtdC90LTRi9C00LjQsNCz0YDQsNC80LzRi9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C/0YDQuNC80LXQvdC10L3QuNGP0L7RgtCx0L7RgNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/RjdC70LXQvNC10L3RgtCw0L3QsNGB0YLRgNC+0LnQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQvtGB0YLQvtGP0L3QuNC10Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGB0L/QvtGB0L7QsdCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNC60L7QvNC/0L7QvdC+0LLQutC40YDQtdC30YPQu9GM0YLQsNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9Cw0YDQsNC80LXRgtGA0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQsNCy0YLQvtC/0L7Qt9C40YbQuNGP0YDQtdGB0YPRgNGB0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCy0LDRgNC40LDQvdGC0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstCy0LTQuNCw0LPRgNCw0LzQvNC10LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YTQuNC60YHQsNGG0LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YPRgdC70L7QstC90L7Qs9C+0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQstCw0LbQvdC+0YHRgtGM0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDQvtCx0YDQsNCx0L7RgtC60LDRgtC10LrRgdGC0LDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINGB0L/QvtGB0L7QsdC60L7QtNC40YDQvtCy0LDQvdC40Y/QuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0L7Qs9C+0LLQu9C+0LbQtdC90LjRjyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0L3QtWFzY2lp0YHQuNC80LLQvtC70L7QstC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0YLQuNC/0YLQtdC60YHRgtCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINC/0YDQvtGC0L7QutC+0LvQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLRiyDRgdGC0LDRgtGD0YHRgNCw0LfQsdC+0YDQsNC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDRgNC10LbQuNC80YLRgNCw0L3Qt9Cw0LrRhtC40LjQt9Cw0L/QuNGB0LjQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0YHRgtCw0YLRg9GB0YLRgNCw0L3Qt9Cw0LrRhtC40LjQt9Cw0L/QuNGB0LjQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0YPRgNC+0LLQtdC90YzQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGA0LXQttC40LzQstC60LvRjtGH0LXQvdC40Y/RgdC10YDRgtC40YTQuNC60LDRgtC+0LLQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Lgg0YDQtdC20LjQvNC/0YDQvtCy0LXRgNC60LjRgdC10YDRgtC40YTQuNC60LDRgtCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGC0LjQv9GF0YDQsNC90LjQu9C40YnQsNGB0LXRgNGC0LjRhNC40LrQsNGC0L7QstC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDQutC+0LTQuNGA0L7QstC60LDQuNC80LXQvdGE0LDQudC70L7QstCyemlw0YTQsNC50LvQtSDQvNC10YLQvtC00YHQttCw0YLQuNGPemlwINC80LXRgtC+0LTRiNC40YTRgNC+0LLQsNC90LjRj3ppcCDRgNC10LbQuNC80LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRj9C/0YPRgtC10LnRhNCw0LnQu9C+0LJ6aXAg0YDQtdC20LjQvNC+0LHRgNCw0LHQvtGC0LrQuNC/0L7QtNC60LDRgtCw0LvQvtCz0L7QsnppcCDRgNC10LbQuNC80YHQvtGF0YDQsNC90LXQvdC40Y/Qv9GD0YLQtdC5emlwINGD0YDQvtCy0LXQvdGM0YHQttCw0YLQuNGPemlwINC30LLRg9C60L7QstC+0LXQvtC/0L7QstC10YnQtdC90LjQtSDQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QtdGA0LXRhdC+0LTQsNC60YHRgtGA0L7QutC1INC/0L7Qt9C40YbQuNGP0LLQv9C+0YLQvtC60LUg0L/QvtGA0Y/QtNC+0LrQsdCw0LnRgtC+0LIg0YDQtdC20LjQvNCx0LvQvtC60LjRgNC+0LLQutC40LTQsNC90L3Ri9GFINGA0LXQttC40LzRg9C/0YDQsNCy0LvQtdC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC+0LnQtNCw0L3QvdGL0YUg0YHQtdGA0LLQuNGB0LLRgdGC0YDQvtC10L3QvdGL0YXQv9C+0LrRg9C/0L7QuiDRgdC+0YHRgtC+0Y/QvdC40LXRhNC+0L3QvtCy0L7Qs9C+0LfQsNC00LDQvdC40Y8g0YLQuNC/0L/QvtC00L/QuNGB0YfQuNC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INGD0YDQvtCy0LXQvdGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qt9Cw0YnQuNGJ0LXQvdC90L7Qs9C+0YHQvtC10LTQuNC90LXQvdC40Y9mdHAg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0L7RgNGP0LTQutCw0YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQvNC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C60L7QvdGC0YDQvtC70YzQvdC+0LnRgtC+0YfQutC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C+0LHRitC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAg0YLQuNC/0L/QsNGA0LDQvNC10YLRgNCw0LTQvtGB0YLRg9C/0L3QvtC50YLQsNCx0LvQuNGG0YvRgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAgaHR0cNC80LXRgtC+0LQg0LDQstGC0L7QuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDQsNCy0YLQvtC/0YDQtdGE0LjQutGB0L3QvtC80LXRgNCw0LfQsNC00LDRh9C4INCy0LDRgNC40LDQvdGC0LLRgdGC0YDQvtC10L3QvdC+0LPQvtGP0LfRi9C60LAg0LLQuNC00LjQtdGA0LDRgNGF0LjQuCDQstC40LTRgNC10LPQuNGB0YLRgNCw0L3QsNC60L7Qv9C70LXQvdC40Y8g0LLQuNC00YLQsNCx0LvQuNGG0YvQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNC00LLQuNC20LXQvdC40LnQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQt9Cw0L/QvtC70L3QtdC90LjQtdC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsdCw0LfRi9C/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsdGL0YHRgtGA0L7Qs9C+0LLRi9Cx0L7RgNCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC00YfQuNC90LXQvdC40Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgNCw0LfQtNC10LvRj9C10LzRi9GF0LTQsNC90L3Ri9GF0L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQtdC60LLQuNC30LjRgtCwINC90LDQt9C90LDRh9C10L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0LfQvdCw0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdC00LDRh9C4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUg0L7Qv9C10YDQsNGC0LjQstC90L7QtdC/0YDQvtCy0LXQtNC10L3QuNC1INC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdCy0LjQtNCw0YDQsNGB0YfQtdGC0LAg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LLQuNC00LDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC4INC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC30LDQtNCw0YfQuCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9C70LDQvdCw0L7QsdC80LXQvdCwINC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGB0L/RgNCw0LLQvtGH0L3QuNC60LAg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10YHRh9C10YLQsCDQv9C10YDQtdC80LXRidC10L3QuNC10LPRgNCw0L3QuNGG0YvQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNC90L7QvNC10YDQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzQvdC+0LzQtdGA0LDQtNC+0LrRg9C80LXQvdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YHQstC10LTQtdC90LjQuSDQv9C+0LLRgtC+0YDQvdC+0LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCy0L7Qt9Cy0YDQsNGJ0LDQtdC80YvRhdC30L3QsNGH0LXQvdC40Lkg0L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0YvQudC/0L7QuNGB0LrQv9GA0LjQstCy0L7QtNC10L/QvtGB0YLRgNC+0LrQtSDQv9GA0LjQvdCw0LTQu9C10LbQvdC+0YHRgtGM0L7QsdGK0LXQutGC0LAg0L/RgNC+0LLQtdC00LXQvdC40LUg0YDQsNC30LTQtdC70LXQvdC40LXQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC40L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwINGA0LDQt9C00LXQu9C10L3QuNC10LTQsNC90L3Ri9GF0L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwINGA0LDQt9C00LXQu9C10L3QuNC10YDQsNGB0YjQuNGA0LXQvdC40LnQutC+0L3RhNC40LPRg9GA0LDRhtC40LjQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0YDQtdC20LjQvNCw0LLRgtC+0L3Rg9C80LXRgNCw0YbQuNC40L7QsdGK0LXQutGC0L7QsiDRgNC10LbQuNC80LfQsNC/0LjRgdC40YDQtdCz0LjRgdGC0YDQsCDRgNC10LbQuNC80LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/QvNC+0LTQsNC70YzQvdC+0YHRgtC4INGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0LjQvdGF0YDQvtC90L3Ri9GF0LLRi9C30L7QstC+0LLRgNCw0YHRiNC40YDQtdC90LjQudC/0LvQsNGC0YTQvtGA0LzRi9C40LLQvdC10YjQvdC40YXQutC+0LzQv9C+0L3QtdC90YIg0YDQtdC20LjQvNC/0L7QstGC0L7RgNC90L7Qs9C+0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC10LDQvdGB0L7QsiDRgNC10LbQuNC80L/QvtC70YPRh9C10L3QuNGP0LTQsNC90L3Ri9GF0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YDQtdC20LjQvNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LXQttC40LzRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuNC40L3RgtC10YDRhNC10LnRgdCwINGA0LXQttC40LzRg9C/0YDQsNCy0LvQtdC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC+0LnQtNCw0L3QvdGL0YXQv9C+0YPQvNC+0LvRh9Cw0L3QuNGOINGB0LXRgNC40LjQutC+0LTQvtCy0L/Qu9Cw0L3QsNCy0LjQtNC+0LLRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiDRgdC10YDQuNC40LrQvtC00L7QstC/0LvQsNC90LDRgdGH0LXRgtC+0LIg0YHQtdGA0LjQuNC60L7QtNC+0LLRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGB0L7Qt9C00LDQvdC40LXQv9GA0LjQstCy0L7QtNC1INGB0L/QvtGB0L7QsdCy0YvQsdC+0YDQsCDRgdC/0L7RgdC+0LHQv9C+0LjRgdC60LDRgdGC0YDQvtC60LjQv9GA0LjQstCy0L7QtNC10L/QvtGB0YLRgNC+0LrQtSDRgdC/0L7RgdC+0LHRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGC0LjQv9C00LDQvdC90YvRhdGC0LDQsdC70LjRhtGL0LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgtC40L/QutC+0LTQsNC/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0YLQuNC/0LrQvtC00LDRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGC0LjQv9C80LDQutC10YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQsdC40LfQvdC10YHQv9GA0L7RhtC10YHRgdCwINGC0LjQv9C90L7QvNC10YDQsNC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQt9Cw0LTQsNGH0Lgg0YLQuNC/0YTQvtGA0LzRiyDRg9C00LDQu9C10L3QuNC10LTQstC40LbQtdC90LjQuSDQstCw0LbQvdC+0YHRgtGM0L/RgNC+0LHQu9C10LzRi9C/0YDQuNC80LXQvdC10L3QuNGP0YDQsNGB0YjQuNGA0LXQvdC40Y/QutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0LLQsNGA0LjQsNC90YLQuNC90YLQtdGA0YTQtdC50YHQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDQstCw0YDQuNCw0L3RgtC80LDRgdGI0YLQsNCx0LDRhNC+0YDQvNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDQstCw0YDQuNCw0L3RgtC+0YHQvdC+0LLQvdC+0LPQvtGI0YDQuNGE0YLQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDQstCw0YDQuNCw0L3RgtGB0YLQsNC90LTQsNGA0YLQvdC+0LPQvtC/0LXRgNC40L7QtNCwINCy0LDRgNC40LDQvdGC0YHRgtCw0L3QtNCw0YDRgtC90L7QudC00LDRgtGL0L3QsNGH0LDQu9CwINCy0LjQtNCz0YDQsNC90LjRhtGLINCy0LjQtNC60LDRgNGC0LjQvdC60Lgg0LLQuNC00L7RgtC+0LHRgNCw0LbQtdC90LjRj9C/0L7Qu9C90L7RgtC10LrRgdGC0L7QstC+0LPQvtC/0L7QuNGB0LrQsCDQstC40LTRgNCw0LzQutC4INCy0LjQtNGB0YDQsNCy0L3QtdC90LjRjyDQstC40LTRhtCy0LXRgtCwINCy0LjQtNGH0LjRgdC70L7QstC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0LLQuNC00YjRgNC40YTRgtCwINC00L7Qv9GD0YHRgtC40LzQsNGP0LTQu9C40L3QsCDQtNC+0L/Rg9GB0YLQuNC80YvQudC30L3QsNC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1Ynl0ZW9yZGVybWFyayDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC80LXRgtCw0LTQsNC90L3Ri9GF0L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINC40YHRgtC+0YfQvdC40LrRgNCw0YHRiNC40YDQtdC90LjQudC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQutC70LDQstC40YjQsCDQutC+0LTQstC+0LfQstGA0LDRgtCw0LTQuNCw0LvQvtCz0LAg0LrQvtC00LjRgNC+0LLQutCweGJhc2Ug0LrQvtC00LjRgNC+0LLQutCw0YLQtdC60YHRgtCwINC90LDQv9GA0LDQstC70LXQvdC40LXQv9C+0LjRgdC60LAg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdGB0L7RgNGC0LjRgNC+0LLQutC4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUg0L7QsdC90L7QstC70LXQvdC40LXQv9GA0LjQuNC30LzQtdC90LXQvdC40LjQtNCw0L3QvdGL0YUg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNGA0LDQt9C00LXQu9C+0LIg0L/RgNC+0LLQtdGA0LrQsNC30LDQv9C+0LvQvdC10L3QuNGPINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0L7Qv9GA0L7RgSDRgNC10LbQuNC80LfQsNC/0YPRgdC60LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0LrRgNGD0LPQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQvtGA0LzQv9GA0LjQu9C+0LbQtdC90LjRjyDRgNC10LbQuNC80L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINGB0LrQvtGA0L7RgdGC0YzQutC70LjQtdC90YLRgdC60L7Qs9C+0YHQvtC10LTQuNC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNC10LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgdC+0YHRgtC+0Y/QvdC40LXQvtCx0L3QvtCy0LvQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuNCx0LDQt9GL0LTQsNC90L3Ri9GFINGB0L/QvtGB0L7QsdCy0YvQsdC+0YDQsNGB0LXRgNGC0LjRhNC40LrQsNGC0LB3aW5kb3dzINGB0L/QvtGB0L7QsdC60L7QtNC40YDQvtCy0LDQvdC40Y/RgdGC0YDQvtC60Lgg0YHRgtCw0YLRg9GB0YHQvtC+0LHRidC10L3QuNGPINGC0LjQv9Cy0L3QtdGI0L3QtdC50LrQvtC80L/QvtC90LXQvdGC0Ysg0YLQuNC/0L/Qu9Cw0YLRhNC+0YDQvNGLINGC0LjQv9C/0L7QstC10LTQtdC90LjRj9C60LvQsNCy0LjRiNC4ZW50ZXIg0YLQuNC/0Y3Qu9C10LzQtdC90YLQsNC40L3RhNC+0YDQvNCw0YbQuNC40L7QstGL0L/QvtC70L3QtdC90LjQuNC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUg0YPRgNC+0LLQtdC90YzQuNC30L7Qu9GP0YbQuNC40YLRgNCw0L3Qt9Cw0LrRhtC40Lkg0YXQtdGI0YTRg9C90LrRhtC40Y8g0YfQsNGB0YLQuNC00LDRgtGLIix0eXBlOiJjb23QvtCx0YrQtdC60YIgZnRw0YHQvtC10LTQuNC90LXQvdC40LUgaHR0cNC30LDQv9GA0L7RgSBodHRw0YHQtdGA0LLQuNGB0L7RgtCy0LXRgiBodHRw0YHQvtC10LTQuNC90LXQvdC40LUgd3PQvtC/0YDQtdC00LXQu9C10L3QuNGPIHdz0L/RgNC+0LrRgdC4IHhiYXNlINCw0L3QsNC70LjQt9C00LDQvdC90YvRhSDQsNC90L3QvtGC0LDRhtC40Y94cyDQsdC70L7QutC40YDQvtCy0LrQsNC00LDQvdC90YvRhSDQsdGD0YTQtdGA0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQstC60LvRjtGH0LXQvdC40LV4cyDQstGL0YDQsNC20LXQvdC40LXQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQs9C10L3QtdGA0LDRgtC+0YDRgdC70YPRh9Cw0LnQvdGL0YXRh9C40YHQtdC7INCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutCw0Y/RgdGF0LXQvNCwINCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC40LXQutC+0L7RgNC00LjQvdCw0YLRiyDQs9GA0LDRhNC40YfQtdGB0LrQsNGP0YHRhdC10LzQsCDQs9GA0YPQv9C/0LDQvNC+0LTQtdC70Lh4cyDQtNCw0L3QvdGL0LXRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LTQstC+0LjRh9C90YvQtdC00LDQvdC90YvQtSDQtNC10L3QtNGA0L7Qs9GA0LDQvNC80LAg0LTQuNCw0LPRgNCw0LzQvNCwINC00LjQsNCz0YDQsNC80LzQsNCz0LDQvdGC0LAg0LTQuNCw0LvQvtCz0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDQtNC40LDQu9C+0LPQstGL0LHQvtGA0LDRhtCy0LXRgtCwINC00LjQsNC70L7Qs9Cy0YvQsdC+0YDQsNGI0YDQuNGE0YLQsCDQtNC40LDQu9C+0LPRgNCw0YHQv9C40YHQsNC90LjRj9GA0LXQs9C70LDQvNC10L3RgtC90L7Qs9C+0LfQsNC00LDQvdC40Y8g0LTQuNCw0LvQvtCz0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRj9GB0YLQsNC90LTQsNGA0YLQvdC+0LPQvtC/0LXRgNC40L7QtNCwINC00LjQsNC/0LDQt9C+0L0g0LTQvtC60YPQvNC10L3RgmRvbSDQtNC+0LrRg9C80LXQvdGCaHRtbCDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Y94cyDQtNC+0YHRgtCw0LLQu9GP0LXQvNC+0LXRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC30LDQv9C40YHRjGRvbSDQt9Cw0L/QuNGB0YxmYXN0aW5mb3NldCDQt9Cw0L/QuNGB0YxodG1sINC30LDQv9C40YHRjGpzb24g0LfQsNC/0LjRgdGMeG1sINC30LDQv9C40YHRjHppcNGE0LDQudC70LAg0LfQsNC/0LjRgdGM0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNGC0LXQutGB0YLQsCDQt9Cw0L/QuNGB0YzRg9C30LvQvtCyZG9tINC30LDQv9GA0L7RgSDQt9Cw0YnQuNGJ0LXQvdC90L7QtdGB0L7QtdC00LjQvdC10L3QuNC1b3BlbnNzbCDQt9C90LDRh9C10L3QuNGP0L/QvtC70LXQudGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQuNC30LLQu9C10YfQtdC90LjQtdGC0LXQutGB0YLQsCDQuNC80L/QvtGA0YJ4cyDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQsCDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQvtCy0YvQudC/0YDQvtGE0LjQu9GMINC40L3RgtC10YDQvdC10YLQv9GA0L7QutGB0Lgg0LjQvdGC0LXRgNC90LXRgtGB0L7QtdC00LjQvdC10L3QuNC1INC40L3RhNC+0YDQvNCw0YbQuNGP0LTQu9GP0L/RgNC40LvQvtC20LXQvdC40Y94cyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCw0YLRgNC40LHRg9GC0LB4cyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGB0L7QsdGL0YLQuNGP0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INC40YHRgtC+0YfQvdC40LrQtNC+0YHRgtGD0L/QvdGL0YXQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LjRgtC10YDQsNGC0L7RgNGD0LfQu9C+0LJkb20g0LrQsNGA0YLQuNC90LrQsCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9C00LDRgtGLINC60LLQsNC70LjRhNC40LrQsNGC0L7RgNGL0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GB0YLRgNC+0LrQuCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GH0LjRgdC70LAg0LrQvtC80L/QvtC90L7QstGJ0LjQutC80LDQutC10YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC60L7QvNC/0L7QvdC+0LLRidC40LrQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC80LDQutC10YLQsNC+0YTQvtGA0LzQu9C10L3QuNGP0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC90LDRgdGC0YDQvtC10LrQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQutC+0L3RgdGC0YDRg9C60YLQvtGA0YTQvtGA0LzQsNGC0L3QvtC50YHRgtGA0L7QutC4INC70LjQvdC40Y8g0LzQsNC60LXRgtC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDQutC10YLQvtCx0LvQsNGB0YLQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDRgdC60LB4cyDQvNC10L3QtdC00LbQtdGA0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INC90LDQsdC+0YDRgdGF0LXQvHhtbCDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvdCw0YHRgtGA0L7QudC60LjRgdC10YDQuNCw0LvQuNC30LDRhtC40Lhqc29uINC+0LHRgNCw0LHQvtGC0LrQsNC60LDRgNGC0LjQvdC+0Log0L7QsdGA0LDQsdC+0YLQutCw0YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC+0LHRhdC+0LTQtNC10YDQtdCy0LBkb20g0L7QsdGK0Y/QstC70LXQvdC40LXQsNGC0YDQuNCx0YPRgtCweHMg0L7QsdGK0Y/QstC70LXQvdC40LXQvdC+0YLQsNGG0LjQuHhzINC+0LHRitGP0LLQu9C10L3QuNC10Y3Qu9C10LzQtdC90YLQsHhzINC+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0LTQvtGB0YLRg9C/0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INC+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0L7RgtC60LDQt9Cy0LTQvtGB0YLRg9C/0LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Qv9C40YHQsNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuNGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvtC/0LjRgdCw0L3QuNC10L/QtdGA0LXQtNCw0LLQsNC10LzQvtCz0L7RhNCw0LnQu9CwINC+0L/QuNGB0LDQvdC40LXRgtC40L/QvtCyINC+0L/RgNC10LTQtdC70LXQvdC40LXQs9GA0YPQv9C/0YvQsNGC0YDQuNCx0YPRgtC+0LJ4cyDQvtC/0YDQtdC00LXQu9C10L3QuNC10LPRgNGD0L/Qv9GL0LzQvtC00LXQu9C4eHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC+0LPRgNCw0L3QuNGH0LXQvdC40Y/QuNC00LXQvdGC0LjRh9C90L7RgdGC0Lh4cyDQvtC/0YDQtdC00LXQu9C10L3QuNC10L/RgNC+0YHRgtC+0LPQvtGC0LjQv9CweHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdGB0L7RgdGC0LDQstC90L7Qs9C+0YLQuNC/0LB4cyDQvtC/0YDQtdC00LXQu9C10L3QuNC10YLQuNC/0LDQtNC+0LrRg9C80LXQvdGC0LBkb20g0L7Qv9GA0LXQtNC10LvQtdC90LjRj3hwYXRoeHMg0L7RgtCx0L7RgNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0LDQutC10YLQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YXQtNC+0LrRg9C80LXQvdGC0L7QsiDQv9Cw0YDQsNC80LXRgtGA0LLRi9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQv9Cw0YDQsNC80LXRgtGA0YvQt9Cw0L/QuNGB0Lhqc29uINC/0LDRgNCw0LzQtdGC0YDRi9C30LDQv9C40YHQuHhtbCDQv9Cw0YDQsNC80LXRgtGA0YvRh9GC0LXQvdC40Y94bWwg0L/QtdGA0LXQvtC/0YDQtdC00LXQu9C10L3QuNC1eHMg0L/Qu9Cw0L3QuNGA0L7QstGJ0LjQuiDQv9C+0LvQtdCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFINC/0L7Qu9C10LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L/QvtGB0YLRgNC+0LjRgtC10LvRjGRvbSDQv9C+0YHRgtGA0L7QuNGC0LXQu9GM0LfQsNC/0YDQvtGB0LAg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC+0YLRh9C10YLQsCDQv9C+0YHRgtGA0L7QuNGC0LXQu9GM0L7RgtGH0LXRgtCw0LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNGB0YXQtdC8eG1sINC/0L7RgtC+0Log0L/QvtGC0L7QutCy0L/QsNC80Y/RgtC4INC/0L7Rh9GC0LAg0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1eHNsINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LXQutC60LDQvdC+0L3QuNGH0LXRgdC60L7QvNGDeG1sINC/0YDQvtGG0LXRgdGB0L7RgNCy0YvQstC+0LTQsNGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YXQstC60L7Qu9C70LXQutGG0LjRjtC30L3QsNGH0LXQvdC40Lkg0L/RgNC+0YbQtdGB0YHQvtGA0LLRi9Cy0L7QtNCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhdCy0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiDQv9GA0L7RhtC10YHRgdC+0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0LfRi9C80LXQvdC+0LLQsNGC0LXQu9GM0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC40LzQtdC9ZG9tINGA0LDQvNC60LAg0YDQsNGB0L/QuNGB0LDQvdC40LXRgNC10LPQu9Cw0LzQtdC90YLQvdC+0LPQvtC30LDQtNCw0L3QuNGPINGA0LDRgdGI0LjRgNC10L3QvdC+0LXQuNC80Y94bWwg0YDQtdC30YPQu9GM0YLQsNGC0YfRgtC10L3QuNGP0LTQsNC90L3Ri9GFINGB0LLQvtC00L3QsNGP0LTQuNCw0LPRgNCw0LzQvNCwINGB0LLRj9C30YzQv9Cw0YDQsNC80LXRgtGA0LDQstGL0LHQvtGA0LAg0YHQstGP0LfRjNC/0L7RgtC40L/RgyDRgdCy0Y/Qt9GM0L/QvtGC0LjQv9GD0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byDRgdC10YDRgtC40YTQuNC60LDRgtC60LvQuNC10L3RgtCwd2luZG93cyDRgdC10YDRgtC40YTQuNC60LDRgtC60LvQuNC10L3RgtCw0YTQsNC50Lsg0YHQtdGA0YLQuNGE0LjQutCw0YLQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Lgg0YHQtdGA0YLQuNGE0LjQutCw0YLRi9GD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40YXRhtC10L3RgtGA0L7QsndpbmRvd3Mg0YHQtdGA0YLQuNGE0LjQutCw0YLRi9GD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40YXRhtC10L3RgtGA0L7QstGE0LDQudC7INGB0LbQsNGC0LjQtdC00LDQvdC90YvRhSDRgdC40YHRgtC10LzQvdCw0Y/QuNC90YTQvtGA0LzQsNGG0LjRjyDRgdC+0L7QsdGJ0LXQvdC40LXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y4g0YHQvtGH0LXRgtCw0L3QuNC10LrQu9Cw0LLQuNGIINGB0YDQsNCy0L3QtdC90LjQtdC30L3QsNGH0LXQvdC40Lkg0YHRgtCw0L3QtNCw0YDRgtC90LDRj9C00LDRgtCw0L3QsNGH0LDQu9CwINGB0YLQsNC90LTQsNGA0YLQvdGL0LnQv9C10YDQuNC+0LQg0YHRhdC10LzQsHhtbCDRgdGF0LXQvNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiDRgtC10LrRgdGC0L7QstGL0LnQtNC+0LrRg9C80LXQvdGCINGC0LXRgdGC0LjRgNGD0LXQvNC+0LXQv9GA0LjQu9C+0LbQtdC90LjQtSDRgtC40L/QtNCw0L3QvdGL0YV4bWwg0YPQvdC40LrQsNC70YzQvdGL0LnQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRhNCw0LHRgNC40LrQsHhkdG8g0YTQsNC50Lsg0YTQsNC50LvQvtCy0YvQudC/0L7RgtC+0Log0YTQsNGB0LXRgtC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LrQvtC70LjRh9C10YHRgtCy0LDRgNCw0LfRgNGP0LTQvtCy0LTRgNC+0LHQvdC+0LnRh9Cw0YHRgtC4eHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyDRhNCw0YHQtdGC0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7QudC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LjRgdC60LvRjtGH0LDRjtGJ0LXQs9C+0LfQvdCw0YfQtdC90LjRj3hzINGE0LDRgdC10YLQvNC40L3QuNC80LDQu9GM0L3QvtC50LTQu9C40L3Ri3hzINGE0LDRgdC10YLQvtCx0YDQsNC30YbQsHhzINGE0LDRgdC10YLQvtCx0YnQtdCz0L7QutC+0LvQuNGH0LXRgdGC0LLQsNGA0LDQt9GA0Y/QtNC+0LJ4cyDRhNCw0YHQtdGC0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPeHMg0YTQsNGB0LXRgtC/0YDQvtCx0LXQu9GM0L3Ri9GF0YHQuNC80LLQvtC70L7QsnhzINGE0LjQu9GM0YLRgNGD0LfQu9C+0LJkb20g0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QsNGP0YHRgtGA0L7QutCwINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQudC00L7QutGD0LzQtdC90YIg0YTRgNCw0LPQvNC10L3RgnhzINGF0LXRiNC40YDQvtCy0LDQvdC40LXQtNCw0L3QvdGL0YUg0YXRgNCw0L3QuNC70LjRidC10LfQvdCw0YfQtdC90LjRjyDRhtCy0LXRgiDRh9GC0LXQvdC40LVmYXN0aW5mb3NldCDRh9GC0LXQvdC40LVodG1sINGH0YLQtdC90LjQtWpzb24g0YfRgtC10L3QuNC1eG1sINGH0YLQtdC90LjQtXppcNGE0LDQudC70LAg0YfRgtC10L3QuNC10LTQsNC90L3Ri9GFINGH0YLQtdC90LjQtdGC0LXQutGB0YLQsCDRh9GC0LXQvdC40LXRg9C30LvQvtCyZG9tINGI0YDQuNGE0YIg0Y3Qu9C10LzQtdC90YLRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFIGNvbXNhZmVhcnJheSDQtNC10YDQtdCy0L7Qt9C90LDRh9C10L3QuNC5INC80LDRgdGB0LjQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YHQv9C40YHQvtC60LfQvdCw0YfQtdC90LjQuSDRgdGC0YDRg9C60YLRg9GA0LAg0YLQsNCx0LvQuNGG0LDQt9C90LDRh9C10L3QuNC5INGE0LjQutGB0LjRgNC+0LLQsNC90L3QsNGP0YHRgtGA0YPQutGC0YPRgNCwINGE0LjQutGB0LjRgNC+0LLQsNC90L3QvtC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGE0LjQutGB0LjRgNC+0LLQsNC90L3Ri9C50LzQsNGB0YHQuNCyICIsbGl0ZXJhbDpyfSxjb250YWluczpbbCx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsbGV4ZW1lczp0LHZhcmlhbnRzOlt7YmVnaW46ItC/0YDQvtGG0LXQtNGD0YDQsHzRhNGD0L3QutGG0LjRjyIsZW5kOiJcXCkiLGtleXdvcmRzOiLQv9GA0L7RhtC10LTRg9GA0LAg0YTRg9C90LrRhtC40Y8ifSx7YmVnaW46ItC60L7QvdC10YbQv9GA0L7RhtC10LTRg9GA0Yt80LrQvtC90LXRhtGE0YPQvdC60YbQuNC4IixrZXl3b3Jkczoi0LrQvtC90LXRhtC/0YDQvtGG0LXQtNGD0YDRiyDQutC+0L3QtdGG0YTRg9C90LrRhtC40LgifV0sY29udGFpbnM6W3tiZWdpbjoiXFwoIixlbmQ6IlxcKSIsZW5kc1BhcmVudDohMCxjb250YWluczpbe2NsYXNzTmFtZToicGFyYW1zIixsZXhlbWVzOnQsYmVnaW46dCxlbmQ6IiwiLGV4Y2x1ZGVFbmQ6ITAsZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6e2tleXdvcmQ6ItC30L3QsNGHIixsaXRlcmFsOnJ9LGNvbnRhaW5zOltvLHMsaV19LGFdfSxlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjp0fSldfSxhLHUsbyxzLGldfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hYm5mLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17cnVsZURlY2xhcmF0aW9uOiJeW2EtekEtWl1bYS16QS1aMC05LV0qIix1bmV4cGVjdGVkQ2hhcnM6IlshQCMkXiYnLD8rfmB8Ol0ifSxuPVsiQUxQSEEiLCJCSVQiLCJDSEFSIiwiQ1IiLCJDUkxGIiwiQ1RMIiwiRElHSVQiLCJEUVVPVEUiLCJIRVhESUciLCJIVEFCIiwiTEYiLCJMV1NQIiwiT0NURVQiLCJTUCIsIlZDSEFSIiwiV1NQIl0scj1lLkNPTU1FTlQoIjsiLCIkIiksbz17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi8lYlswLTFdKygtWzAtMV0rfChcLlswLTFdKykrKXswLDF9L30scz17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi8lZFswLTldKygtWzAtOV0rfChcLlswLTldKykrKXswLDF9L30saT17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi8leFswLTlBLUZdKygtWzAtOUEtRl0rfChcLlswLTlBLUZdKykrKXswLDF9L30sYT17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi8lW3NpXS99LGw9e2JlZ2luOnQucnVsZURlY2xhcmF0aW9uKyJcXHMqPSIscmV0dXJuQmVnaW46ITAsZW5kOi89LyxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjp0LnJ1bGVEZWNsYXJhdGlvbn1dfTtyZXR1cm57aWxsZWdhbDp0LnVuZXhwZWN0ZWRDaGFycyxrZXl3b3JkczpuLmpvaW4oIiAiKSxjb250YWluczpbbCxyLG8scyxpLGEsZS5RVU9URV9TVFJJTkdfTU9ERSxlLk5VTUJFUl9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWNjZXNzbG9nLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGFpbnM6W3tjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9KDpcXGR7MSw1fSk/XFxiIn0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiXFxkK1xcYiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyIoR0VUfFBPU1R8SEVBRHxQVVR8REVMRVRFfENPTk5FQ1R8T1BUSU9OU3xQQVRDSHxUUkFDRSknLGVuZDonIicsa2V5d29yZHM6IkdFVCBQT1NUIEhFQUQgUFVUIERFTEVURSBDT05ORUNUIE9QVElPTlMgUEFUQ0ggVFJBQ0UiLGlsbGVnYWw6IlxcbiIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi9cWy8sZW5kOi9cXS8saWxsZWdhbDoiXFxuIn0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4ifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FjdGlvbnNjcmlwdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToicmVzdF9hcmciLGJlZ2luOiJbLl17M30iLGVuZDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIixyZWxldmFuY2U6MTB9O3JldHVybnthbGlhc2VzOlsiYXMiXSxrZXl3b3Jkczp7a2V5d29yZDoiYXMgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRlbGV0ZSBkbyBkeW5hbWljIGVhY2ggZWxzZSBleHRlbmRzIGZpbmFsIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGdldCBpZiBpbXBsZW1lbnRzIGltcG9ydCBpbiBpbmNsdWRlIGluc3RhbmNlb2YgaW50ZXJmYWNlIGludGVybmFsIGlzIG5hbWVzcGFjZSBuYXRpdmUgbmV3IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJldHVybiBzZXQgc3RhdGljIHN1cGVyIHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdXNlIHZhciB2b2lkIHdoaWxlIHdpdGgiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQifSxjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJwYWNrYWdlIixlbmQ6InsiLGNvbnRhaW5zOltlLlRJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixlbmQ6InsiLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlRJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbktleXdvcmRzOiJpbXBvcnQgaW5jbHVkZSIsZW5kOiI7IixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImltcG9ydCBpbmNsdWRlIn19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOiJbeztdIixleGNsdWRlRW5kOiEwLGlsbGVnYWw6IlxcUyIsY29udGFpbnM6W2UuVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsdF19LHtiZWdpbjoiOlxccyooWypdfFthLXpBLVpfJF1bYS16QS1aMC05XyRdKikifV19LGUuTUVUSE9EX0dVQVJEXSxpbGxlZ2FsOi8jL319fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWRhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iW0EtWmEtel0oXz9bQS1aYS16MC05Ll0pKiIsbj1lLkNPTU1FTlQoIi0tIiwiJCIpLHI9e2JlZ2luOiJcXHMrOlxccysiLGVuZDoiXFxzKig6PXw7fFxcKXw9PnwkKSIsaWxsZWdhbDoiW117fSUjJ1wiIixjb250YWluczpbe2JlZ2luS2V5d29yZHM6Imxvb3AgZm9yIGRlY2xhcmUgb3RoZXJzIixlbmRzUGFyZW50OiEwfSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbktleXdvcmRzOiJub3QgbnVsbCBjb25zdGFudCBhY2Nlc3MgZnVuY3Rpb24gcHJvY2VkdXJlIGluIG91dCBhbGlhc2VkIGV4Y2VwdGlvbiJ9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOnQsZW5kc1BhcmVudDohMCxyZWxldmFuY2U6MH1dfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3Jkczp7a2V5d29yZDoiYWJvcnQgZWxzZSBuZXcgcmV0dXJuIGFicyBlbHNpZiBub3QgcmV2ZXJzZSBhYnN0cmFjdCBlbmQgYWNjZXB0IGVudHJ5IHNlbGVjdCBhY2Nlc3MgZXhjZXB0aW9uIG9mIHNlcGFyYXRlIGFsaWFzZWQgZXhpdCBvciBzb21lIGFsbCBvdGhlcnMgc3VidHlwZSBhbmQgZm9yIG91dCBzeW5jaHJvbml6ZWQgYXJyYXkgZnVuY3Rpb24gb3ZlcnJpZGluZyBhdCB0YWdnZWQgZ2VuZXJpYyBwYWNrYWdlIHRhc2sgYmVnaW4gZ290byBwcmFnbWEgdGVybWluYXRlIGJvZHkgcHJpdmF0ZSB0aGVuIGlmIHByb2NlZHVyZSB0eXBlIGNhc2UgaW4gcHJvdGVjdGVkIGNvbnN0YW50IGludGVyZmFjZSBpcyByYWlzZSB1c2UgZGVjbGFyZSByYW5nZSBkZWxheSBsaW1pdGVkIHJlY29yZCB3aGVuIGRlbHRhIGxvb3AgcmVtIHdoaWxlIGRpZ2l0cyByZW5hbWVzIHdpdGggZG8gbW9kIHJlcXVldWUgeG9yIixsaXRlcmFsOiJUcnVlIEZhbHNlIn0sY29udGFpbnM6W24se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovIi8sZW5kOi8iLyxjb250YWluczpbe2JlZ2luOi8iIi8scmVsZXZhbmNlOjB9XX0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJy4nL30se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKFxcZChffFxcZCkqI1xcdysoXFwuXFx3Kyk/IyhbZUVdWy0rXT9cXGQoX3xcXGQpKik/fFxcZChffFxcZCkqKFxcLlxcZChffFxcZCkqKT8oW2VFXVstK10/XFxkKF98XFxkKSopPykiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInIit0fSx7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46IihcXGJ3aXRoXFxzKyk/KFxcYnByaXZhdGVcXHMrKT9cXGJwYWNrYWdlXFxzKyhcXGJib2R5XFxzKyk/IixlbmQ6Iihpc3wkKSIsa2V5d29yZHM6InBhY2thZ2UgYm9keSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiW117fSUjJ1wiIn0se2JlZ2luOiIoXFxiKHdpdGh8b3ZlcnJpZGluZylcXHMrKT9cXGIoZnVuY3Rpb258cHJvY2VkdXJlKVxccysiLGVuZDoiKFxcYmlzfFxcYndpdGh8XFxicmVuYW1lc3xcXClcXHMqOykiLGtleXdvcmRzOiJvdmVycmlkaW5nIGZ1bmN0aW9uIHByb2NlZHVyZSB3aXRoIGlzIHJlbmFtZXMgcmV0dXJuIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbbix7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46IihcXGJ3aXRoXFxzKyk/XFxiKGZ1bmN0aW9ufHByb2NlZHVyZSlcXHMrIixlbmQ6IihcXCh8XFxzK3wkKSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiW117fSUjJ1wiIn0scix7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxicmV0dXJuXFxzKyIsZW5kOiIoXFxzK3w7fCQpIixrZXl3b3JkczoicmV0dXJuIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxlbmRzUGFyZW50OiEwLGlsbGVnYWw6Iltde30lIydcIiJ9XX0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYihzdWIpP3R5cGVcXHMrIixlbmQ6IlxccysiLGtleXdvcmRzOiJ0eXBlIixleGNsdWRlQmVnaW46ITAsaWxsZWdhbDoiW117fSUjJ1wiIn0scl19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FuZ2Vsc2NyaXB0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IlxcYih2b2lkfGJvb2x8aW50fGludDh8aW50MTZ8aW50MzJ8aW50NjR8dWludHx1aW50OHx1aW50MTZ8dWludDMyfHVpbnQ2NHxzdHJpbmd8cmVmfGFycmF5fGRvdWJsZXxmbG9hdHxhdXRvfGRpY3Rpb25hcnkpIn0sbj17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJbYS16QS1aMC05X10rQCJ9LHI9e2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IjwiLGVuZDoiPiIsY29udGFpbnM6W3Qsbl19O3JldHVybiB0LmNvbnRhaW5zPVtyXSxuLmNvbnRhaW5zPVtyXSx7YWxpYXNlczpbImFzYyJdLGtleXdvcmRzOiJmb3IgaW58MCBicmVhayBjb250aW51ZSB3aGlsZSBkb3wwIHJldHVybiBpZiBlbHNlIGNhc2Ugc3dpdGNoIG5hbWVzcGFjZSBpcyBjYXN0IG9yIGFuZCB4b3Igbm90IGdldHwwIGluIGlub3V0fDEwIG91dCBvdmVycmlkZSBzZXR8MCBwcml2YXRlIHB1YmxpYyBjb25zdCBkZWZhdWx0fDAgZmluYWwgc2hhcmVkIGV4dGVybmFsIG1peGlufDEwIGVudW0gdHlwZWRlZiBmdW5jZGVmIHRoaXMgc3VwZXIgaW1wb3J0IGZyb20gaW50ZXJmYWNlIGFic3RyYWN0fDAgdHJ5IGNhdGNoIHByb3RlY3RlZCBleHBsaWNpdCIsaWxsZWdhbDoiKF51c2luZ1xccytbQS1aYS16MC05X1xcLl0rOyR8XFxiZnVuY3Rpb25zKlteXFwoXSkiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLGlsbGVnYWw6IlxcbiIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIiIiJyxlbmQ6JyIiIid9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtiZWdpbktleXdvcmRzOiJpbnRlcmZhY2UgbmFtZXNwYWNlIixlbmQ6InsiLGlsbGVnYWw6Ils7LlxcLV0iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJbYS16QS1aMC05X10rIn1dfSx7YmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoieyIsaWxsZWdhbDoiWzsuXFwtXSIsY29udGFpbnM6W3tjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IlthLXpBLVowLTlfXSsiLGNvbnRhaW5zOlt7YmVnaW46Ils6LF1cXHMqIixjb250YWluczpbe2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiW2EtekEtWjAtOV9dKyJ9XX1dfV19LHQsbix7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXFxiKG51bGx8dHJ1ZXxmYWxzZSkifSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoLT8pKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP2Y/fFxcLlxcZCtmPykoW2VFXVstK10/XFxkK2Y/KT8pIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcGFjaGUuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IltcXCQlXVxcZCsifTtyZXR1cm57YWxpYXNlczpbImFwYWNoZWNvbmYiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InNlY3Rpb24iLGJlZ2luOiI8Lz8iLGVuZDoiPiJ9LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46L1x3Ky8scmVsZXZhbmNlOjAsa2V5d29yZHM6e25vbWFya3VwOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlbmQ6LyQvLHJlbGV2YW5jZTowLGtleXdvcmRzOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXHNcXFsiLGVuZDoiXFxdJCJ9LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiW1xcJCVdXFx7IixlbmQ6IlxcfSIsY29udGFpbnM6WyJzZWxmIix0XX0sdCxlLlFVT1RFX1NUUklOR19NT0RFXX19XSxpbGxlZ2FsOi9cUy99fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwcGxlc2NyaXB0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDoiIn0pLG49e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoIixlbmQ6IlxcKSIsY29udGFpbnM6WyJzZWxmIixlLkNfTlVNQkVSX01PREUsdF19LHI9ZS5DT01NRU5UKCItLSIsIiQiKSxvPWUuQ09NTUVOVCgiXFwoXFwqIiwiXFwqXFwpIix7Y29udGFpbnM6WyJzZWxmIixyXX0pLHM9W3IsbyxlLkhBU0hfQ09NTUVOVF9NT0RFXTtyZXR1cm57YWxpYXNlczpbIm9zYXNjcmlwdCJdLGtleXdvcmRzOntrZXl3b3JkOiJhYm91dCBhYm92ZSBhZnRlciBhZ2FpbnN0IGFuZCBhcm91bmQgYXMgYXQgYmFjayBiZWZvcmUgYmVnaW5uaW5nIGJlaGluZCBiZWxvdyBiZW5lYXRoIGJlc2lkZSBiZXR3ZWVuIGJ1dCBieSBjb25zaWRlcmluZyBjb250YWluIGNvbnRhaW5zIGNvbnRpbnVlIGNvcHkgZGl2IGRvZXMgZWlnaHRoIGVsc2UgZW5kIGVxdWFsIGVxdWFscyBlcnJvciBldmVyeSBleGl0IGZpZnRoIGZpcnN0IGZvciBmb3VydGggZnJvbSBmcm9udCBnZXQgZ2l2ZW4gZ2xvYmFsIGlmIGlnbm9yaW5nIGluIGludG8gaXMgaXQgaXRzIGxhc3QgbG9jYWwgbWUgbWlkZGxlIG1vZCBteSBuaW50aCBub3Qgb2Ygb24gb250byBvciBvdmVyIHByb3AgcHJvcGVydHkgcHV0IHJlZiByZWZlcmVuY2UgcmVwZWF0IHJldHVybmluZyBzY3JpcHQgc2Vjb25kIHNldCBzZXZlbnRoIHNpbmNlIHNpeHRoIHNvbWUgdGVsbCB0ZW50aCB0aGF0IHRoZXwwIHRoZW4gdGhpcmQgdGhyb3VnaCB0aHJ1IHRpbWVvdXQgdGltZXMgdG8gdHJhbnNhY3Rpb24gdHJ5IHVudGlsIHdoZXJlIHdoaWxlIHdob3NlIHdpdGggd2l0aG91dCIsbGl0ZXJhbDoiQXBwbGVTY3JpcHQgZmFsc2UgbGluZWZlZWQgcmV0dXJuIHBpIHF1b3RlIHJlc3VsdCBzcGFjZSB0YWIgdHJ1ZSIsYnVpbHRfaW46ImFsaWFzIGFwcGxpY2F0aW9uIGJvb2xlYW4gY2xhc3MgY29uc3RhbnQgZGF0ZSBmaWxlIGludGVnZXIgbGlzdCBudW1iZXIgcmVhbCByZWNvcmQgc3RyaW5nIHRleHQgYWN0aXZhdGUgYmVlcCBjb3VudCBkZWxheSBsYXVuY2ggbG9nIG9mZnNldCByZWFkIHJvdW5kIHJ1biBzYXkgc3VtbWFyaXplIHdyaXRlIGNoYXJhY3RlciBjaGFyYWN0ZXJzIGNvbnRlbnRzIGRheSBmcm9udG1vc3QgaWQgaXRlbSBsZW5ndGggbW9udGggbmFtZSBwYXJhZ3JhcGggcGFyYWdyYXBocyByZXN0IHJldmVyc2UgcnVubmluZyB0aW1lIHZlcnNpb24gd2Vla2RheSB3b3JkIHdvcmRzIHllYXIifSxjb250YWluczpbdCxlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOiJcXGIoY2xpcGJvYXJkIGluZm98dGhlIGNsaXBib2FyZHxpbmZvIGZvcnxsaXN0IChkaXNrc3xmb2xkZXIpfG1vdW50IHZvbHVtZXxwYXRoIHRvfChjbG9zZXxvcGVuIGZvcikgYWNjZXNzfChnZXR8c2V0KSBlb2Z8Y3VycmVudCBkYXRlfGRvIHNoZWxsIHNjcmlwdHxnZXQgdm9sdW1lIHNldHRpbmdzfHJhbmRvbSBudW1iZXJ8c2V0IHZvbHVtZXxzeXN0ZW0gYXR0cmlidXRlfHN5c3RlbSBpbmZvfHRpbWUgdG8gR01UfChsb2FkfHJ1bnxzdG9yZSkgc2NyaXB0fHNjcmlwdGluZyBjb21wb25lbnRzfEFTQ0lJIChjaGFyYWN0ZXJ8bnVtYmVyKXxsb2NhbGl6ZWQgc3RyaW5nfGNob29zZSAoYXBwbGljYXRpb258Y29sb3J8ZmlsZXxmaWxlIG5hbWV8Zm9sZGVyfGZyb20gbGlzdHxyZW1vdGUgYXBwbGljYXRpb258VVJMKXxkaXNwbGF5IChhbGVydHxkaWFsb2cpKVxcYnxeXFxzKnJldHVyblxcYiJ9LHtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiJcXGIodGV4dCBpdGVtIGRlbGltaXRlcnN8Y3VycmVudCBhcHBsaWNhdGlvbnxtaXNzaW5nIHZhbHVlKVxcYiJ9LHtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXGIoYXBhcnQgZnJvbXxhc2lkZSBmcm9tfGluc3RlYWQgb2Z8b3V0IG9mfGdyZWF0ZXIgdGhhbnxpc24ndHwoZG9lc24ndHxkb2VzIG5vdCkgKGVxdWFsfGNvbWUgYmVmb3JlfGNvbWUgYWZ0ZXJ8Y29udGFpbil8KGdyZWF0ZXJ8bGVzcykgdGhhbiggb3IgZXF1YWwpP3woc3RhcnRzP3xlbmRzfGJlZ2lucz8pIHdpdGh8Y29udGFpbmVkIGJ5fGNvbWVzIChiZWZvcmV8YWZ0ZXIpfGEgKHJlZnxyZWZlcmVuY2UpfFBPU0lYIGZpbGV8UE9TSVggcGF0aHwoZGF0ZXx0aW1lKSBzdHJpbmd8cXVvdGVkIGZvcm0pXFxiIn0se2JlZ2luS2V5d29yZHM6Im9uIixpbGxlZ2FsOiJbJHs9O1xcbl0iLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERSxuXX1dLmNvbmNhdChzKSxpbGxlZ2FsOiIvL3wtPnw9PnxcXFtcXFsifX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmNhZGUuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbQS1aYS16X11bMC05QS1aYS16X10qIixuPXtrZXl3b3JkOiJpZiBmb3Igd2hpbGUgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eSBQSSBCYWNrU2xhc2ggRG91YmxlUXVvdGUgRm9yd2FyZFNsYXNoIE5ld0xpbmUgU2luZ2xlUXVvdGUgVGFiIixidWlsdF9pbjoiQWJzIEFjb3MgQXJlYSBBcmVhR2VvZGV0aWMgQXNpbiBBdGFuIEF0YW4yIEF2ZXJhZ2UgQm9vbGVhbiBCdWZmZXIgQnVmZmVyR2VvZGV0aWMgQ2VpbCBDZW50cm9pZCBDbGlwIENvbnNvbGUgQ29uc3RyYWluIENvbnRhaW5zIENvcyBDb3VudCBDcm9zc2VzIEN1dCBEYXRlIERhdGVBZGQgRGF0ZURpZmYgRGF5IERlY29kZSBEZWZhdWx0VmFsdWUgRGljdGlvbmFyeSBEaWZmZXJlbmNlIERpc2pvaW50IERpc3RhbmNlIERpc3RpbmN0IERvbWFpbkNvZGUgRG9tYWluTmFtZSBFcXVhbHMgRXhwIEV4dGVudCBGZWF0dXJlIEZlYXR1cmVTZXQgRmVhdHVyZVNldEJ5SWQgRmVhdHVyZVNldEJ5VGl0bGUgRmVhdHVyZVNldEJ5VXJsIEZpbHRlciBGaXJzdCBGbG9vciBHZW9tZXRyeSBHdWlkIEhhc0tleSBIb3VyIElJZiBJbmRleE9mIEludGVyc2VjdGlvbiBJbnRlcnNlY3RzIElzRW1wdHkgTGVuZ3RoIExlbmd0aEdlb2RldGljIExvZyBNYXggTWVhbiBNaWxsaXNlY29uZCBNaW4gTWludXRlIE1vbnRoIE11bHRpUGFydFRvU2luZ2xlUGFydCBNdWx0aXBvaW50IE5leHRTZXF1ZW5jZVZhbHVlIE5vdyBOdW1iZXIgT3JkZXJCeSBPdmVybGFwcyBQb2ludCBQb2x5Z29uIFBvbHlsaW5lIFBvdyBSYW5kb20gUmVsYXRlIFJldmVyc2UgUm91bmQgU2Vjb25kIFNldEdlb21ldHJ5IFNpbiBTb3J0IFNxcnQgU3RkZXYgU3VtIFN5bW1ldHJpY0RpZmZlcmVuY2UgVGFuIFRleHQgVGltZXN0YW1wIFRvZGF5IFRvTG9jYWwgVG9wIFRvdWNoZXMgVG9VVEMgVHlwZU9mIFVuaW9uIFZhcmlhbmNlIFdlZWtkYXkgV2hlbiBXaXRoaW4gWWVhciAifSxyPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IlxcJFtmZWF0dXJlfGxheWVyfG1hcHx2YWx1ZXx2aWV3XSsifSxvPXtjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKDBbYkJdWzAxXSspIn0se2JlZ2luOiJcXGIoMFtvT11bMC03XSspIn0se2JlZ2luOmUuQ19OVU1CRVJfUkV9XSxyZWxldmFuY2U6MH0scz17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IlxcJFxceyIsZW5kOiJcXH0iLGtleXdvcmRzOm4sY29udGFpbnM6W119LGk9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiYCIsZW5kOiJgIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHNdfTtzLmNvbnRhaW5zPVtlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxpLG8sZS5SRUdFWFBfTU9ERV07dmFyIGE9cy5jb250YWlucy5jb25jYXQoW2UuQ19CTE9DS19DT01NRU5UX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFXSk7cmV0dXJue2FsaWFzZXM6WyJhcmNhZGUiXSxrZXl3b3JkczpuLGNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxpLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHIsbyx7YmVnaW46L1t7LF1ccyovLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46dCsiXFxzKjoiLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjp0LHJlbGV2YW5jZTowfV19XX0se2JlZ2luOiIoIitlLlJFX1NUQVJURVJTX1JFKyJ8XFxiKHJldHVybilcXGIpXFxzKiIsa2V5d29yZHM6InJldHVybiIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUkVHRVhQX01PREUse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoXFwoLio/XFwpfCIrdCsiKVxccyo9PiIscmV0dXJuQmVnaW46ITAsZW5kOiJcXHMqPT4iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46dH0se2JlZ2luOi9cKFxzKlwpL30se2JlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6bixjb250YWluczphfV19XX1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDovXHsvLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOnR9KSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6YX1dLGlsbGVnYWw6L1xbfCUvfSx7YmVnaW46L1wkWyguXS99XSxpbGxlZ2FsOi8jKD8hISkvfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmR1aW5vLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldExhbmd1YWdlKCJjcHAiKS5leHBvcnRzO3JldHVybntrZXl3b3Jkczp7a2V5d29yZDoiYm9vbGVhbiBieXRlIHdvcmQgc3RyaW5nIFN0cmluZyBhcnJheSAiK3Qua2V5d29yZHMua2V5d29yZCxidWlsdF9pbjoic2V0dXAgbG9vcCB3aGlsZSBjYXRjaCBmb3IgaWYgZG8gZ290byB0cnkgc3dpdGNoIGNhc2UgZWxzZSBkZWZhdWx0IGJyZWFrIGNvbnRpbnVlIHJldHVybiBLZXlib2FyZENvbnRyb2xsZXIgTW91c2VDb250cm9sbGVyIFNvZnR3YXJlU2VyaWFsIEV0aGVybmV0U2VydmVyIEV0aGVybmV0Q2xpZW50IExpcXVpZENyeXN0YWwgUm9ib3RDb250cm9sIEdTTVZvaWNlQ2FsbCBFdGhlcm5ldFVEUCBFc3Bsb3JhVEZUIEh0dHBDbGllbnQgUm9ib3RNb3RvciBXaUZpQ2xpZW50IEdTTVNjYW5uZXIgRmlsZVN5c3RlbSBTY2hlZHVsZXIgR1NNU2VydmVyIFl1bkNsaWVudCBZdW5TZXJ2ZXIgSVBBZGRyZXNzIEdTTUNsaWVudCBHU01Nb2RlbSBLZXlib2FyZCBFdGhlcm5ldCBDb25zb2xlIEdTTUJhbmQgRXNwbG9yYSBTdGVwcGVyIFByb2Nlc3MgV2lGaVVEUCBHU01fU01TIE1haWxib3ggVVNCSG9zdCBGaXJtYXRhIFBJbWFnZSBDbGllbnQgU2VydmVyIEdTTVBJTiBGaWxlSU8gQnJpZGdlIFNlcmlhbCBFRVBST00gU3RyZWFtIE1vdXNlIEF1ZGlvIFNlcnZvIEZpbGUgVGFzayBHUFJTIFdpRmkgV2lyZSBURlQgR1NNIFNQSSBTRCBydW5TaGVsbENvbW1hbmRBc3luY2hyb25vdXNseSBhbmFsb2dXcml0ZVJlc29sdXRpb24gcmV0cmlldmVDYWxsaW5nTnVtYmVyIHByaW50RmlybXdhcmVWZXJzaW9uIGFuYWxvZ1JlYWRSZXNvbHV0aW9uIHNlbmREaWdpdGFsUG9ydFBhaXIgbm9MaXN0ZW5PbkxvY2FsaG9zdCByZWFkSm95c3RpY2tCdXR0b24gc2V0RmlybXdhcmVWZXJzaW9uIHJlYWRKb3lzdGlja1N3aXRjaCBzY3JvbGxEaXNwbGF5UmlnaHQgZ2V0Vm9pY2VDYWxsU3RhdHVzIHNjcm9sbERpc3BsYXlMZWZ0IHdyaXRlTWljcm9zZWNvbmRzIGRlbGF5TWljcm9zZWNvbmRzIGJlZ2luVHJhbnNtaXNzaW9uIGdldFNpZ25hbFN0cmVuZ3RoIHJ1bkFzeW5jaHJvbm91c2x5IGdldEFzeW5jaHJvbm91c2x5IGxpc3Rlbk9uTG9jYWxob3N0IGdldEN1cnJlbnRDYXJyaWVyIHJlYWRBY2NlbGVyb21ldGVyIG1lc3NhZ2VBdmFpbGFibGUgc2VuZERpZ2l0YWxQb3J0cyBsaW5lRm9sbG93Q29uZmlnIGNvdW50cnlOYW1lV3JpdGUgcnVuU2hlbGxDb21tYW5kIHJlYWRTdHJpbmdVbnRpbCByZXdpbmREaXJlY3RvcnkgcmVhZFRlbXBlcmF0dXJlIHNldENsb2NrRGl2aWRlciByZWFkTGlnaHRTZW5zb3IgZW5kVHJhbnNtaXNzaW9uIGFuYWxvZ1JlZmVyZW5jZSBkZXRhY2hJbnRlcnJ1cHQgY291bnRyeU5hbWVSZWFkIGF0dGFjaEludGVycnVwdCBlbmNyeXB0aW9uVHlwZSByZWFkQnl0ZXNVbnRpbCByb2JvdE5hbWVXcml0ZSByZWFkTWljcm9waG9uZSByb2JvdE5hbWVSZWFkIGNpdHlOYW1lV3JpdGUgdXNlck5hbWVXcml0ZSByZWFkSm95c3RpY2tZIHJlYWRKb3lzdGlja1ggbW91c2VSZWxlYXNlZCBvcGVuTmV4dEZpbGUgc2Nhbk5ldHdvcmtzIG5vSW50ZXJydXB0cyBkaWdpdGFsV3JpdGUgYmVnaW5TcGVha2VyIG1vdXNlUHJlc3NlZCBpc0FjdGlvbkRvbmUgbW91c2VEcmFnZ2VkIGRpc3BsYXlMb2dvcyBub0F1dG9zY3JvbGwgYWRkUGFyYW1ldGVyIHJlbW90ZU51bWJlciBnZXRNb2RpZmllcnMga2V5Ym9hcmRSZWFkIHVzZXJOYW1lUmVhZCB3YWl0Q29udGludWUgcHJvY2Vzc0lucHV0IHBhcnNlQ29tbWFuZCBwcmludFZlcnNpb24gcmVhZE5ldHdvcmtzIHdyaXRlTWVzc2FnZSBibGlua1ZlcnNpb24gY2l0eU5hbWVSZWFkIHJlYWRNZXNzYWdlIHNldERhdGFNb2RlIHBhcnNlUGFja2V0IGlzTGlzdGVuaW5nIHNldEJpdE9yZGVyIGJlZ2luUGFja2V0IGlzRGlyZWN0b3J5IG1vdG9yc1dyaXRlIGRyYXdDb21wYXNzIGRpZ2l0YWxSZWFkIGNsZWFyU2NyZWVuIHNlcmlhbEV2ZW50IHJpZ2h0VG9MZWZ0IHNldFRleHRTaXplIGxlZnRUb1JpZ2h0IHJlcXVlc3RGcm9tIGtleVJlbGVhc2VkIGNvbXBhc3NSZWFkIGFuYWxvZ1dyaXRlIGludGVycnVwdHMgV2lGaVNlcnZlciBkaXNjb25uZWN0IHBsYXlNZWxvZHkgcGFyc2VGbG9hdCBhdXRvc2Nyb2xsIGdldFBJTlVzZWQgc2V0UElOVXNlZCBzZXRUaW1lb3V0IHNlbmRBbmFsb2cgcmVhZFNsaWRlciBhbmFsb2dSZWFkIGJlZ2luV3JpdGUgY3JlYXRlQ2hhciBtb3RvcnNTdG9wIGtleVByZXNzZWQgdGVtcG9Xcml0ZSByZWFkQnV0dG9uIHN1Ym5ldE1hc2sgZGVidWdQcmludCBtYWNBZGRyZXNzIHdyaXRlR3JlZW4gcmFuZG9tU2VlZCBhdHRhY2hHUFJTIHJlYWRTdHJpbmcgc2VuZFN0cmluZyByZW1vdGVQb3J0IHJlbGVhc2VBbGwgbW91c2VNb3ZlZCBiYWNrZ3JvdW5kIGdldFhDaGFuZ2UgZ2V0WUNoYW5nZSBhbnN3ZXJDYWxsIGdldFJlc3VsdCB2b2ljZUNhbGwgZW5kUGFja2V0IGNvbnN0cmFpbiBnZXRTb2NrZXQgd3JpdGVKU09OIGdldEJ1dHRvbiBhdmFpbGFibGUgY29ubmVjdGVkIGZpbmRVbnRpbCByZWFkQnl0ZXMgZXhpdFZhbHVlIHJlYWRHcmVlbiB3cml0ZUJsdWUgc3RhcnRMb29wIElQQWRkcmVzcyBpc1ByZXNzZWQgc2VuZFN5c2V4IHBhdXNlTW9kZSBnYXRld2F5SVAgc2V0Q3Vyc29yIGdldE9lbUtleSB0dW5lV3JpdGUgbm9EaXNwbGF5IGxvYWRJbWFnZSBzd2l0Y2hQSU4gb25SZXF1ZXN0IG9uUmVjZWl2ZSBjaGFuZ2VQSU4gcGxheUZpbGUgbm9CdWZmZXIgcGFyc2VJbnQgb3ZlcmZsb3cgY2hlY2tQSU4ga25vYlJlYWQgYmVnaW5URlQgYml0Q2xlYXIgdXBkYXRlSVIgYml0V3JpdGUgcG9zaXRpb24gd3JpdGVSR0IgaGlnaEJ5dGUgd3JpdGVSZWQgc2V0U3BlZWQgcmVhZEJsdWUgbm9TdHJva2UgcmVtb3RlSVAgdHJhbnNmZXIgc2h1dGRvd24gaGFuZ0NhbGwgYmVnaW5TTVMgZW5kV3JpdGUgYXR0YWNoZWQgbWFpbnRhaW4gbm9DdXJzb3IgY2hlY2tSZWcgY2hlY2tQVUsgc2hpZnRPdXQgaXNWYWxpZCBzaGlmdEluIHB1bHNlSW4gY29ubmVjdCBwcmludGxuIGxvY2FsSVAgcGluTW9kZSBnZXRJTUVJIGRpc3BsYXkgbm9CbGluayBwcm9jZXNzIGdldEJhbmQgcnVubmluZyBiZWdpblNEIGRyYXdCTVAgbG93Qnl0ZSBzZXRCYW5kIHJlbGVhc2UgYml0UmVhZCBwcmVwYXJlIHBvaW50VG8gcmVhZFJlZCBzZXRNb2RlIG5vRmlsbCByZW1vdmUgbGlzdGVuIHN0cm9rZSBkZXRhY2ggYXR0YWNoIG5vVG9uZSBleGlzdHMgYnVmZmVyIGhlaWdodCBiaXRTZXQgY2lyY2xlIGNvbmZpZyBjdXJzb3IgcmFuZG9tIElScmVhZCBzZXRETlMgZW5kU01TIGdldEtleSBtaWNyb3MgbWlsbGlzIGJlZ2luIHByaW50IHdyaXRlIHJlYWR5IGZsdXNoIHdpZHRoIGlzUElOIGJsaW5rIGNsZWFyIHByZXNzIG1rZGlyIHJtZGlyIGNsb3NlIHBvaW50IHlpZWxkIGltYWdlIEJTU0lEIGNsaWNrIGRlbGF5IHJlYWQgdGV4dCBtb3ZlIHBlZWsgYmVlcCByZWN0IGxpbmUgb3BlbiBzZWVrIGZpbGwgc2l6ZSB0dXJuIHN0b3AgaG9tZSBmaW5kIHN0ZXAgdG9uZSBzcXJ0IFJTU0kgU1NJRCBlbmQgYml0IHRhbiBjb3Mgc2luIHBvdyBtYXAgYWJzIG1heCBtaW4gZ2V0IHJ1biBwdXQiLGxpdGVyYWw6IkRJR0lUQUxfTUVTU0FHRSBGSVJNQVRBX1NUUklORyBBTkFMT0dfTUVTU0FHRSBSRVBPUlRfRElHSVRBTCBSRVBPUlRfQU5BTE9HIElOUFVUX1BVTExVUCBTRVRfUElOX01PREUgSU5URVJOQUwyVjU2IFNZU1RFTV9SRVNFVCBMRURfQlVJTFRJTiBJTlRFUk5BTDFWMSBTWVNFWF9TVEFSVCBJTlRFUk5BTCBFWFRFUk5BTCBERUZBVUxUIE9VVFBVVCBJTlBVVCBISUdIIExPVyJ9LGNvbnRhaW5zOlt0LnByZXByb2Nlc3NvcixlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcm1hc20uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGFsaWFzZXM6WyJhcm0iXSxsZXhlbWVzOiJcXC4/IitlLklERU5UX1JFLGtleXdvcmRzOnttZXRhOiIuMmJ5dGUgLjRieXRlIC5hbGlnbiAuYXNjaWkgLmFzY2l6IC5iYWxpZ24gLmJ5dGUgLmNvZGUgLmRhdGEgLmVsc2UgLmVuZCAuZW5kaWYgLmVuZG0gLmVuZHIgLmVxdSAuZXJyIC5leGl0bSAuZXh0ZXJuIC5nbG9iYWwgLmh3b3JkIC5pZiAuaWZkZWYgLmlmbmRlZiAuaW5jbHVkZSAuaXJwIC5sb25nIC5tYWNybyAucmVwdCAucmVxIC5zZWN0aW9uIC5zZXQgLnNraXAgLnNwYWNlIC50ZXh0IC53b3JkIC5hcm0gLnRodW1iIC5jb2RlMTYgLmNvZGUzMiAuZm9yY2VfdGh1bWIgLnRodW1iX2Z1bmMgLmx0b3JnIEFMSUFTIEFMSUdOIEFSTSBBUkVBIEFTU0VSVCBBVFRSIENOIENPREUgQ09ERTE2IENPREUzMiBDT01NT04gQ1AgREFUQSBEQ0IgRENEIERDRFUgRENETyBEQ0ZEIERDRkRVIERDSSBEQ1EgRENRVSBEQ1cgRENXVSBETiBFTElGIEVMU0UgRU5EIEVOREZVTkMgRU5ESUYgRU5EUCBFTlRSWSBFUVUgRVhQT1JUIEVYUE9SVEFTIEVYVEVSTiBGSUVMRCBGSUxMIEZVTkNUSU9OIEdCTEEgR0JMTCBHQkxTIEdFVCBHTE9CQUwgSUYgSU1QT1JUIElOQ0JJTiBJTkNMVURFIElORk8gS0VFUCBMQ0xBIExDTEwgTENMUyBMVE9SRyBNQUNSTyBNQVAgTUVORCBNRVhJVCBOT0ZQIE9QVCBQUkVTRVJWRTggUFJPQyBRTiBSRUFET05MWSBSRUxPQyBSRVFVSVJFIFJFUVVJUkU4IFJMSVNUIEZOIFJPVVQgU0VUQSBTRVRMIFNFVFMgU04gU1BBQ0UgU1VCVCBUSFVNQiBUSFVNQlggVFRMIFdISUxFIFdFTkQgIixidWlsdF9pbjoicjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgcGMgbHIgc3AgaXAgc2wgc2IgZnAgYTEgYTIgYTMgYTQgdjEgdjIgdjMgdjQgdjUgdjYgdjcgdjggZjAgZjEgZjIgZjMgZjQgZjUgZjYgZjcgcDAgcDEgcDIgcDMgcDQgcDUgcDYgcDcgcDggcDkgcDEwIHAxMSBwMTIgcDEzIHAxNCBwMTUgYzAgYzEgYzIgYzMgYzQgYzUgYzYgYzcgYzggYzkgYzEwIGMxMSBjMTIgYzEzIGMxNCBjMTUgcTAgcTEgcTIgcTMgcTQgcTUgcTYgcTcgcTggcTkgcTEwIHExMSBxMTIgcTEzIHExNCBxMTUgY3Bzcl9jIGNwc3JfeCBjcHNyX3MgY3Bzcl9mIGNwc3JfY3ggY3Bzcl9jeHMgY3Bzcl94cyBjcHNyX3hzZiBjcHNyX3NmIGNwc3JfY3hzZiBzcHNyX2Mgc3Bzcl94IHNwc3JfcyBzcHNyX2Ygc3Bzcl9jeCBzcHNyX2N4cyBzcHNyX3hzIHNwc3JfeHNmIHNwc3Jfc2Ygc3Bzcl9jeHNmIHMwIHMxIHMyIHMzIHM0IHM1IHM2IHM3IHM4IHM5IHMxMCBzMTEgczEyIHMxMyBzMTQgczE1IHMxNiBzMTcgczE4IHMxOSBzMjAgczIxIHMyMiBzMjMgczI0IHMyNSBzMjYgczI3IHMyOCBzMjkgczMwIHMzMSBkMCBkMSBkMiBkMyBkNCBkNSBkNiBkNyBkOCBkOSBkMTAgZDExIGQxMiBkMTMgZDE0IGQxNSBkMTYgZDE3IGQxOCBkMTkgZDIwIGQyMSBkMjIgZDIzIGQyNCBkMjUgZDI2IGQyNyBkMjggZDI5IGQzMCBkMzEge1BDfSB7VkFSfSB7VFJVRX0ge0ZBTFNFfSB7T1BUfSB7Q09ORklHfSB7RU5ESUFOfSB7Q09ERVNJWkV9IHtDUFV9IHtGUFV9IHtBUkNISVRFQ1RVUkV9IHtQQ1NUT1JFT0ZGU0VUfSB7QVJNQVNNX1ZFUlNJT059IHtJTlRFUn0ge1JPUEl9IHtSV1BJfSB7U1dTVH0ge05PU1dTVH0gLiBAIn0sY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXGIoYWRjfChxZD98c2g/fHVbcWhdPyk/YWRkKDh8MTYpP3x1c2FkYT84fChxfHNoP3x1W3FoXT8pPyhhc3xzYSl4fGFuZHxhZHJsP3xzYmN8cnNbYmNdfGFzcnxiW2x4XT98Ymx4fGJ4anxjYm4/enx0YltiaF18YmljfGJmY3xiZml8W3N1XWJmeHxia3B0fGNkcDI/fGNsenxjbHJleHxjbXB8Y21ufGNwc2lbZWRdfGNwc3xzZXRlbmR8ZGJnfGRtYnxkc2J8ZW9yfGlzYnxpdFt0ZV17MCwzfXxsc2x8bHNyfHJvcnxycnh8bGRtKChbaWRdW2FiXSl8Zltkc10pP3xsZHIoKHN8ZXgpP1tiaGRdKT98bW92dD98bXZufG1yYXxtYXJ8bXVsfFt1c11tdWxsfHNtdWxbYnd0XVtidF18c211W2FzXWR8c21tdWx8c21tbGF8bWxhfHVtbGFhbHxzbWxhbD8oW3didF1bYnRdfGQpfG1sc3xzbWxzbD9bZHNdfHNtY3xzdmN8c2V2fG1pYShbYnRdezJ9fHBoKT98bXJyP2MyP3xtY3JyMj98bXJzfG1zcnxvcnJ8b3JufHBraCh0YnxidCl8cmJpdHxyZXYoMTZ8c2gpP3xzZWx8W3N1XXNhdCgxNik/fG5vcHxwb3B8cHVzaHxyZmUoW2lkXVthYl0pP3xzdG0oW2lkXVthYl0pP3xzdHIoZXgpP1tiaGRdP3wocWQ/KT9zdWJ8KHNoP3xxfHVbcWhdPyk/c3ViKDh8MTYpfFtzdV14dChhP2h8YT9iKDE2KT8pfHNycyhbaWRdW2FiXSk/fHN3cGI/fHN3aXxzbWl8dHN0fHRlcXx3ZmV8d2ZpfHlpZWxkKShlcXxuZXxjc3xjY3xtaXxwbHx2c3x2Y3xoaXxsc3xnZXxsdHxndHxsZXxhbHxoc3xsbyk/W3NwdHJ4XT8iLGVuZDoiXFxzIn0sZS5DT01NRU5UKCJbO0BdIiwiJCIse3JlbGV2YW5jZTowfSksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiW15cXFxcXSciLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46IlxcfCIsZW5kOiJcXHwiLGlsbGVnYWw6IlxcbiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiWyMkPV0/MHhbMC05YS1mXSsifSx7YmVnaW46IlsjJD1dPzBiWzAxXSsifSx7YmVnaW46IlsjJD1dXFxkKyJ9LHtiZWdpbjoiXFxiXFxkKyJ9XSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3ltYm9sIix2YXJpYW50czpbe2JlZ2luOiJeW2Etel9cXC5cXCRdW2EtejAtOV9cXC5cXCRdKyJ9LHtiZWdpbjoiXlxccypbYS16X1xcLlxcJF1bYS16MC05X1xcLlxcJF0rOiJ9LHtiZWdpbjoiWz0jXVxcdysifV0scmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXNjaWlkb2MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsiYWRvYyJdLGNvbnRhaW5zOltlLkNPTU1FTlQoIl4vezQsfVxcbiIsIlxcbi97NCx9JCIse3JlbGV2YW5jZToxMH0pLGUuQ09NTUVOVCgiXi8vIiwiJCIse3JlbGV2YW5jZTowfSkse2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOiJeXFwuXFx3LiokIn0se2JlZ2luOiJeWz1cXCpdezQsfVxcbiIsZW5kOiJcXG5eWz1cXCpdezQsfSQiLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToic2VjdGlvbiIscmVsZXZhbmNlOjEwLHZhcmlhbnRzOlt7YmVnaW46Il4oPXsxLDV9KSAuKz8oIFxcMSk/JCJ9LHtiZWdpbjoiXlteXFxbXFxdXFxuXSs/XFxuWz1cXC1+XFxeXFwrXXsyLH0kIn1dfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXjouKz86IixlbmQ6IlxccyIsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeXFxbLis/XFxdJCIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InF1b3RlIixiZWdpbjoiXl97NCx9XFxuIixlbmQ6Ilxcbl97NCx9JCIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJjb2RlIixiZWdpbjoiXltcXC1cXC5dezQsfVxcbiIsZW5kOiJcXG5bXFwtXFwuXXs0LH0kIixyZWxldmFuY2U6MTB9LHtiZWdpbjoiXlxcK3s0LH1cXG4iLGVuZDoiXFxuXFwrezQsfSQiLGNvbnRhaW5zOlt7YmVnaW46IjwiLGVuZDoiPiIsc3ViTGFuZ3VhZ2U6InhtbCIscmVsZXZhbmNlOjB9XSxyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6ImJ1bGxldCIsYmVnaW46Il4oXFwqK3xcXC0rfFxcLit8W15cXG5dKz86OilcXHMrIn0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiXihOT1RFfFRJUHxJTVBPUlRBTlR8V0FSTklOR3xDQVVUSU9OKTpcXHMrIixyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6InN0cm9uZyIsYmVnaW46IlxcQlxcKig/IVtcXCpcXHNdKSIsZW5kOiIoXFxuezJ9fFxcKikiLGNvbnRhaW5zOlt7YmVnaW46IlxcXFwqXFx3IixyZWxldmFuY2U6MH1dfSx7Y2xhc3NOYW1lOiJlbXBoYXNpcyIsYmVnaW46IlxcQicoPyFbJ1xcc10pIixlbmQ6IihcXG57Mn18JykiLGNvbnRhaW5zOlt7YmVnaW46IlxcXFwnXFx3IixyZWxldmFuY2U6MH1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJlbXBoYXNpcyIsYmVnaW46Il8oPyFbX1xcc10pIixlbmQ6IihcXG57Mn18XykiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46ImBgLis/JycifSx7YmVnaW46ImAuKz8nIn1dfSx7Y2xhc3NOYW1lOiJjb2RlIixiZWdpbjoiKGAuKz9gfFxcKy4rP1xcKykiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJjb2RlIixiZWdpbjoiXlsgXFx0XSIsZW5kOiIkIixyZWxldmFuY2U6MH0se2JlZ2luOiJeJ3szLH1bIFxcdF0qJCIscmVsZXZhbmNlOjEwfSx7YmVnaW46IihsaW5rOik/KGh0dHB8aHR0cHN8ZnRwfGZpbGV8aXJjfGltYWdlOj8pOlxcUytcXFsuKj9cXF0iLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7YmVnaW46IihsaW5rfGltYWdlOj8pOiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImxpbmsiLGJlZ2luOiJcXHciLGVuZDoiW15cXFtdKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IlxcWyIsZW5kOiJcXF0iLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfV0scmVsZXZhbmNlOjEwfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzcGVjdGouanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgZXh0ZW5kcyBpbXBsZW1lbnRzIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0IHBhY2thZ2UgZGVmYXVsdCBkb3VibGUgcHVibGljIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0aHJvd3MgcHJpdmlsZWdlZCBhc3BlY3RPZiBhZHZpY2VleGVjdXRpb24gcHJvY2VlZCBjZmxvd2JlbG93IGNmbG93IGluaXRpYWxpemF0aW9uIHByZWluaXRpYWxpemF0aW9uIHN0YXRpY2luaXRpYWxpemF0aW9uIHdpdGhpbmNvZGUgdGFyZ2V0IHdpdGhpbiBleGVjdXRpb24gZ2V0V2l0aGluVHlwZU5hbWUgaGFuZGxlciB0aGlzSm9pblBvaW50IHRoaXNKb2luUG9pbnRTdGF0aWNQYXJ0IHRoaXNFbmNsb3NpbmdKb2luUG9pbnRTdGF0aWNQYXJ0IGRlY2xhcmUgcGFyZW50cyB3YXJuaW5nIGVycm9yIHNvZnQgcHJlY2VkZW5jZSB0aGlzQXNwZWN0SW5zdGFuY2UiO3JldHVybntrZXl3b3Jkczp0LGlsbGVnYWw6LzxcL3wjLyxjb250YWluczpbZS5DT01NRU5UKCIvXFwqXFwqIiwiXFwqLyIse3JlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46L1x3K0AvLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImFzcGVjdCIsZW5kOi9bezs9XS8sZXhjbHVkZUVuZDohMCxpbGxlZ2FsOi9bOjsiXFtcXV0vLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIHBlcnR5cGV3aXRoaW4gcGVydGhpcyBwZXJ0YXJnZXQgcGVyY2Zsb3diZWxvdyBwZXJjZmxvdyBpc3NpbmdsZXRvbiJ9LGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtiZWdpbjovXChbXlwpXSovLGVuZDovWyldKy8sa2V5d29yZHM6dCsiIGdldCBzZXQgYXJncyBjYWxsIixleGNsdWRlRW5kOiExfV19LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjAsa2V5d29yZHM6ImNsYXNzIGludGVyZmFjZSIsaWxsZWdhbDovWzoiXFtcXV0vLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7YmVnaW5LZXl3b3JkczoicG9pbnRjdXQgYWZ0ZXIgYmVmb3JlIGFyb3VuZCB0aHJvd2luZyByZXR1cm5pbmciLGVuZDovWyldLyxleGNsdWRlRW5kOiExLGlsbGVnYWw6L1siXFtcXV0vLGNvbnRhaW5zOlt7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMqXFwoIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfV19LHtiZWdpbjovWzpdLyxyZXR1cm5CZWdpbjohMCxlbmQ6L1t7O10vLHJlbGV2YW5jZTowLGV4Y2x1ZGVFbmQ6ITEsa2V5d29yZHM6dCxpbGxlZ2FsOi9bIlxbXF1dLyxjb250YWluczpbe2JlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIsa2V5d29yZHM6dCsiIGdldCBzZXQgYXJncyBjYWxsIixyZWxldmFuY2U6MH0sZS5RVU9URV9TVFJJTkdfTU9ERV19LHtiZWdpbktleXdvcmRzOiJuZXcgdGhyb3ciLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46L1x3KyArXHcrKFwuKT9cdytccypcKFteXCldKlwpXHMqKCh0aHJvd3MpW1x3XHMsXSspP1tceztdLyxyZXR1cm5CZWdpbjohMCxlbmQ6L1t7Oz1dLyxrZXl3b3Jkczp0LGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3tiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUrIlxccypcXCgiLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxyZWxldmFuY2U6MCxrZXl3b3Jkczp0LGNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0sZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJAW0EtWmEtel0rIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaG90a2V5LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17YmVnaW46ImBbXFxzXFxTXSJ9O3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGFsaWFzZXM6WyJhaGsiXSxrZXl3b3Jkczp7a2V5d29yZDoiQnJlYWsgQ29udGludWUgQ3JpdGljYWwgRXhpdCBFeGl0QXBwIEdvc3ViIEdvdG8gTmV3IE9uRXhpdCBQYXVzZSByZXR1cm4gU2V0QmF0Y2hMaW5lcyBTZXRUaW1lciBTdXNwZW5kIFRocmVhZCBUaHJvdyBVbnRpbCBhaGtfaWQgYWhrX2NsYXNzIGFoa19waWQgYWhrX2V4ZSBhaGtfZ3JvdXAiLGxpdGVyYWw6IkF8MCB0cnVlIGZhbHNlIE5PVCBBTkQgT1IiLGJ1aWx0X2luOiJDb21TcGVjIENsaXBib2FyZCBDbGlwYm9hcmRBbGwgRXJyb3JMZXZlbCJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IkFfW2EtekEtWjAtOV0rIn0sdCxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7Y29udGFpbnM6W3RdfSksZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuTlVNQkVSX1JFLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IiUoPz1bYS16QS1aMC05I18kQF0pIixlbmQ6IiUiLGlsbGVnYWw6IlteYS16QS1aMC05I18kQF0ifSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46Il5cXHMqXFx3K1xccyosIn0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il5cXHMqI3crIixlbmQ6IiQiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGNvbnRhaW5zOlt0XSx2YXJpYW50czpbe2JlZ2luOideW15cXG4iO10rOjooPyE9KSd9LHtiZWdpbjonXlteXFxuIjtdKzooPyE9KScscmVsZXZhbmNlOjB9XX0se2JlZ2luOiIsXFxzKiwifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9pdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e3ZhcmlhbnRzOltlLkNPTU1FTlQoIjsiLCIkIix7cmVsZXZhbmNlOjB9KSxlLkNPTU1FTlQoIiNjcyIsIiNjZSIpLGUuQ09NTUVOVCgiI2NvbW1lbnRzLXN0YXJ0IiwiI2NvbW1lbnRzLWVuZCIpXX0sbj17YmVnaW46IlxcJFtBLXowLTlfXSsifSxyPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iLyxjb250YWluczpbe2JlZ2luOi8iIi8scmVsZXZhbmNlOjB9XX0se2JlZ2luOi8nLyxlbmQ6LycvLGNvbnRhaW5zOlt7YmVnaW46LycnLyxyZWxldmFuY2U6MH1dfV19LG89e3ZhcmlhbnRzOltlLkJJTkFSWV9OVU1CRVJfTU9ERSxlLkNfTlVNQkVSX01PREVdfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9cL1wqLyxrZXl3b3Jkczp7a2V5d29yZDoiQnlSZWYgQ2FzZSBDb25zdCBDb250aW51ZUNhc2UgQ29udGludWVMb29wIERlZmF1bHQgRGltIERvIEVsc2UgRWxzZUlmIEVuZEZ1bmMgRW5kSWYgRW5kU2VsZWN0IEVuZFN3aXRjaCBFbmRXaXRoIEVudW0gRXhpdCBFeGl0TG9vcCBGb3IgRnVuYyBHbG9iYWwgSWYgSW4gTG9jYWwgTmV4dCBSZURpbSBSZXR1cm4gU2VsZWN0IFN0YXRpYyBTdGVwIFN3aXRjaCBUaGVuIFRvIFVudGlsIFZvbGF0aWxlIFdFbmQgV2hpbGUgV2l0aCIsYnVpbHRfaW46IkFicyBBQ29zIEFkbGliUmVnaXN0ZXIgQWRsaWJVblJlZ2lzdGVyIEFzYyBBc2NXIEFTaW4gQXNzaWduIEFUYW4gQXV0b0l0U2V0T3B0aW9uIEF1dG9JdFdpbkdldFRpdGxlIEF1dG9JdFdpblNldFRpdGxlIEJlZXAgQmluYXJ5IEJpbmFyeUxlbiBCaW5hcnlNaWQgQmluYXJ5VG9TdHJpbmcgQml0QU5EIEJpdE5PVCBCaXRPUiBCaXRSb3RhdGUgQml0U2hpZnQgQml0WE9SIEJsb2NrSW5wdXQgQnJlYWsgQ2FsbCBDRFRyYXkgQ2VpbGluZyBDaHIgQ2hyVyBDbGlwR2V0IENsaXBQdXQgQ29uc29sZVJlYWQgQ29uc29sZVdyaXRlIENvbnNvbGVXcml0ZUVycm9yIENvbnRyb2xDbGljayBDb250cm9sQ29tbWFuZCBDb250cm9sRGlzYWJsZSBDb250cm9sRW5hYmxlIENvbnRyb2xGb2N1cyBDb250cm9sR2V0Rm9jdXMgQ29udHJvbEdldEhhbmRsZSBDb250cm9sR2V0UG9zIENvbnRyb2xHZXRUZXh0IENvbnRyb2xIaWRlIENvbnRyb2xMaXN0VmlldyBDb250cm9sTW92ZSBDb250cm9sU2VuZCBDb250cm9sU2V0VGV4dCBDb250cm9sU2hvdyBDb250cm9sVHJlZVZpZXcgQ29zIERlYyBEaXJDb3B5IERpckNyZWF0ZSBEaXJHZXRTaXplIERpck1vdmUgRGlyUmVtb3ZlIERsbENhbGwgRGxsQ2FsbEFkZHJlc3MgRGxsQ2FsbGJhY2tGcmVlIERsbENhbGxiYWNrR2V0UHRyIERsbENhbGxiYWNrUmVnaXN0ZXIgRGxsQ2xvc2UgRGxsT3BlbiBEbGxTdHJ1Y3RDcmVhdGUgRGxsU3RydWN0R2V0RGF0YSBEbGxTdHJ1Y3RHZXRQdHIgRGxsU3RydWN0R2V0U2l6ZSBEbGxTdHJ1Y3RTZXREYXRhIERyaXZlR2V0RHJpdmUgRHJpdmVHZXRGaWxlU3lzdGVtIERyaXZlR2V0TGFiZWwgRHJpdmVHZXRTZXJpYWwgRHJpdmVHZXRUeXBlIERyaXZlTWFwQWRkIERyaXZlTWFwRGVsIERyaXZlTWFwR2V0IERyaXZlU2V0TGFiZWwgRHJpdmVTcGFjZUZyZWUgRHJpdmVTcGFjZVRvdGFsIERyaXZlU3RhdHVzIEVudkdldCBFbnZTZXQgRW52VXBkYXRlIEV2YWwgRXhlY3V0ZSBFeHAgRmlsZUNoYW5nZURpciBGaWxlQ2xvc2UgRmlsZUNvcHkgRmlsZUNyZWF0ZU5URlNMaW5rIEZpbGVDcmVhdGVTaG9ydGN1dCBGaWxlRGVsZXRlIEZpbGVFeGlzdHMgRmlsZUZpbmRGaXJzdEZpbGUgRmlsZUZpbmROZXh0RmlsZSBGaWxlRmx1c2ggRmlsZUdldEF0dHJpYiBGaWxlR2V0RW5jb2RpbmcgRmlsZUdldExvbmdOYW1lIEZpbGVHZXRQb3MgRmlsZUdldFNob3J0Y3V0IEZpbGVHZXRTaG9ydE5hbWUgRmlsZUdldFNpemUgRmlsZUdldFRpbWUgRmlsZUdldFZlcnNpb24gRmlsZUluc3RhbGwgRmlsZU1vdmUgRmlsZU9wZW4gRmlsZU9wZW5EaWFsb2cgRmlsZVJlYWQgRmlsZVJlYWRMaW5lIEZpbGVSZWFkVG9BcnJheSBGaWxlUmVjeWNsZSBGaWxlUmVjeWNsZUVtcHR5IEZpbGVTYXZlRGlhbG9nIEZpbGVTZWxlY3RGb2xkZXIgRmlsZVNldEF0dHJpYiBGaWxlU2V0RW5kIEZpbGVTZXRQb3MgRmlsZVNldFRpbWUgRmlsZVdyaXRlIEZpbGVXcml0ZUxpbmUgRmxvb3IgRnRwU2V0UHJveHkgRnVuY05hbWUgR1VJQ3JlYXRlIEdVSUN0cmxDcmVhdGVBdmkgR1VJQ3RybENyZWF0ZUJ1dHRvbiBHVUlDdHJsQ3JlYXRlQ2hlY2tib3ggR1VJQ3RybENyZWF0ZUNvbWJvIEdVSUN0cmxDcmVhdGVDb250ZXh0TWVudSBHVUlDdHJsQ3JlYXRlRGF0ZSBHVUlDdHJsQ3JlYXRlRHVtbXkgR1VJQ3RybENyZWF0ZUVkaXQgR1VJQ3RybENyZWF0ZUdyYXBoaWMgR1VJQ3RybENyZWF0ZUdyb3VwIEdVSUN0cmxDcmVhdGVJY29uIEdVSUN0cmxDcmVhdGVJbnB1dCBHVUlDdHJsQ3JlYXRlTGFiZWwgR1VJQ3RybENyZWF0ZUxpc3QgR1VJQ3RybENyZWF0ZUxpc3RWaWV3IEdVSUN0cmxDcmVhdGVMaXN0Vmlld0l0ZW0gR1VJQ3RybENyZWF0ZU1lbnUgR1VJQ3RybENyZWF0ZU1lbnVJdGVtIEdVSUN0cmxDcmVhdGVNb250aENhbCBHVUlDdHJsQ3JlYXRlT2JqIEdVSUN0cmxDcmVhdGVQaWMgR1VJQ3RybENyZWF0ZVByb2dyZXNzIEdVSUN0cmxDcmVhdGVSYWRpbyBHVUlDdHJsQ3JlYXRlU2xpZGVyIEdVSUN0cmxDcmVhdGVUYWIgR1VJQ3RybENyZWF0ZVRhYkl0ZW0gR1VJQ3RybENyZWF0ZVRyZWVWaWV3IEdVSUN0cmxDcmVhdGVUcmVlVmlld0l0ZW0gR1VJQ3RybENyZWF0ZVVwZG93biBHVUlDdHJsRGVsZXRlIEdVSUN0cmxHZXRIYW5kbGUgR1VJQ3RybEdldFN0YXRlIEdVSUN0cmxSZWFkIEdVSUN0cmxSZWN2TXNnIEdVSUN0cmxSZWdpc3Rlckxpc3RWaWV3U29ydCBHVUlDdHJsU2VuZE1zZyBHVUlDdHJsU2VuZFRvRHVtbXkgR1VJQ3RybFNldEJrQ29sb3IgR1VJQ3RybFNldENvbG9yIEdVSUN0cmxTZXRDdXJzb3IgR1VJQ3RybFNldERhdGEgR1VJQ3RybFNldERlZkJrQ29sb3IgR1VJQ3RybFNldERlZkNvbG9yIEdVSUN0cmxTZXRGb250IEdVSUN0cmxTZXRHcmFwaGljIEdVSUN0cmxTZXRJbWFnZSBHVUlDdHJsU2V0TGltaXQgR1VJQ3RybFNldE9uRXZlbnQgR1VJQ3RybFNldFBvcyBHVUlDdHJsU2V0UmVzaXppbmcgR1VJQ3RybFNldFN0YXRlIEdVSUN0cmxTZXRTdHlsZSBHVUlDdHJsU2V0VGlwIEdVSURlbGV0ZSBHVUlHZXRDdXJzb3JJbmZvIEdVSUdldE1zZyBHVUlHZXRTdHlsZSBHVUlSZWdpc3Rlck1zZyBHVUlTZXRBY2NlbGVyYXRvcnMgR1VJU2V0QmtDb2xvciBHVUlTZXRDb29yZCBHVUlTZXRDdXJzb3IgR1VJU2V0Rm9udCBHVUlTZXRIZWxwIEdVSVNldEljb24gR1VJU2V0T25FdmVudCBHVUlTZXRTdGF0ZSBHVUlTZXRTdHlsZSBHVUlTdGFydEdyb3VwIEdVSVN3aXRjaCBIZXggSG90S2V5U2V0IEh0dHBTZXRQcm94eSBIdHRwU2V0VXNlckFnZW50IEhXbmQgSW5ldENsb3NlIEluZXRHZXQgSW5ldEdldEluZm8gSW5ldEdldFNpemUgSW5ldFJlYWQgSW5pRGVsZXRlIEluaVJlYWQgSW5pUmVhZFNlY3Rpb24gSW5pUmVhZFNlY3Rpb25OYW1lcyBJbmlSZW5hbWVTZWN0aW9uIEluaVdyaXRlIEluaVdyaXRlU2VjdGlvbiBJbnB1dEJveCBJbnQgSXNBZG1pbiBJc0FycmF5IElzQmluYXJ5IElzQm9vbCBJc0RlY2xhcmVkIElzRGxsU3RydWN0IElzRmxvYXQgSXNGdW5jIElzSFduZCBJc0ludCBJc0tleXdvcmQgSXNOdW1iZXIgSXNPYmogSXNQdHIgSXNTdHJpbmcgTG9nIE1lbUdldFN0YXRzIE1vZCBNb3VzZUNsaWNrIE1vdXNlQ2xpY2tEcmFnIE1vdXNlRG93biBNb3VzZUdldEN1cnNvciBNb3VzZUdldFBvcyBNb3VzZU1vdmUgTW91c2VVcCBNb3VzZVdoZWVsIE1zZ0JveCBOdW1iZXIgT2JqQ3JlYXRlIE9iakNyZWF0ZUludGVyZmFjZSBPYmpFdmVudCBPYmpHZXQgT2JqTmFtZSBPbkF1dG9JdEV4aXRSZWdpc3RlciBPbkF1dG9JdEV4aXRVblJlZ2lzdGVyIFBpbmcgUGl4ZWxDaGVja3N1bSBQaXhlbEdldENvbG9yIFBpeGVsU2VhcmNoIFByb2Nlc3NDbG9zZSBQcm9jZXNzRXhpc3RzIFByb2Nlc3NHZXRTdGF0cyBQcm9jZXNzTGlzdCBQcm9jZXNzU2V0UHJpb3JpdHkgUHJvY2Vzc1dhaXQgUHJvY2Vzc1dhaXRDbG9zZSBQcm9ncmVzc09mZiBQcm9ncmVzc09uIFByb2dyZXNzU2V0IFB0ciBSYW5kb20gUmVnRGVsZXRlIFJlZ0VudW1LZXkgUmVnRW51bVZhbCBSZWdSZWFkIFJlZ1dyaXRlIFJvdW5kIFJ1biBSdW5BcyBSdW5Bc1dhaXQgUnVuV2FpdCBTZW5kIFNlbmRLZWVwQWN0aXZlIFNldEVycm9yIFNldEV4dGVuZGVkIFNoZWxsRXhlY3V0ZSBTaGVsbEV4ZWN1dGVXYWl0IFNodXRkb3duIFNpbiBTbGVlcCBTb3VuZFBsYXkgU291bmRTZXRXYXZlVm9sdW1lIFNwbGFzaEltYWdlT24gU3BsYXNoT2ZmIFNwbGFzaFRleHRPbiBTcXJ0IFNSYW5kb20gU3RhdHVzYmFyR2V0VGV4dCBTdGRlcnJSZWFkIFN0ZGluV3JpdGUgU3RkaW9DbG9zZSBTdGRvdXRSZWFkIFN0cmluZyBTdHJpbmdBZGRDUiBTdHJpbmdDb21wYXJlIFN0cmluZ0Zvcm1hdCBTdHJpbmdGcm9tQVNDSUlBcnJheSBTdHJpbmdJblN0ciBTdHJpbmdJc0FsTnVtIFN0cmluZ0lzQWxwaGEgU3RyaW5nSXNBU0NJSSBTdHJpbmdJc0RpZ2l0IFN0cmluZ0lzRmxvYXQgU3RyaW5nSXNJbnQgU3RyaW5nSXNMb3dlciBTdHJpbmdJc1NwYWNlIFN0cmluZ0lzVXBwZXIgU3RyaW5nSXNYRGlnaXQgU3RyaW5nTGVmdCBTdHJpbmdMZW4gU3RyaW5nTG93ZXIgU3RyaW5nTWlkIFN0cmluZ1JlZ0V4cCBTdHJpbmdSZWdFeHBSZXBsYWNlIFN0cmluZ1JlcGxhY2UgU3RyaW5nUmV2ZXJzZSBTdHJpbmdSaWdodCBTdHJpbmdTcGxpdCBTdHJpbmdTdHJpcENSIFN0cmluZ1N0cmlwV1MgU3RyaW5nVG9BU0NJSUFycmF5IFN0cmluZ1RvQmluYXJ5IFN0cmluZ1RyaW1MZWZ0IFN0cmluZ1RyaW1SaWdodCBTdHJpbmdVcHBlciBUYW4gVENQQWNjZXB0IFRDUENsb3NlU29ja2V0IFRDUENvbm5lY3QgVENQTGlzdGVuIFRDUE5hbWVUb0lQIFRDUFJlY3YgVENQU2VuZCBUQ1BTaHV0ZG93biwgVURQU2h1dGRvd24gVENQU3RhcnR1cCwgVURQU3RhcnR1cCBUaW1lckRpZmYgVGltZXJJbml0IFRvb2xUaXAgVHJheUNyZWF0ZUl0ZW0gVHJheUNyZWF0ZU1lbnUgVHJheUdldE1zZyBUcmF5SXRlbURlbGV0ZSBUcmF5SXRlbUdldEhhbmRsZSBUcmF5SXRlbUdldFN0YXRlIFRyYXlJdGVtR2V0VGV4dCBUcmF5SXRlbVNldE9uRXZlbnQgVHJheUl0ZW1TZXRTdGF0ZSBUcmF5SXRlbVNldFRleHQgVHJheVNldENsaWNrIFRyYXlTZXRJY29uIFRyYXlTZXRPbkV2ZW50IFRyYXlTZXRQYXVzZUljb24gVHJheVNldFN0YXRlIFRyYXlTZXRUb29sVGlwIFRyYXlUaXAgVUJvdW5kIFVEUEJpbmQgVURQQ2xvc2VTb2NrZXQgVURQT3BlbiBVRFBSZWN2IFVEUFNlbmQgVmFyR2V0VHlwZSBXaW5BY3RpdmF0ZSBXaW5BY3RpdmUgV2luQ2xvc2UgV2luRXhpc3RzIFdpbkZsYXNoIFdpbkdldENhcmV0UG9zIFdpbkdldENsYXNzTGlzdCBXaW5HZXRDbGllbnRTaXplIFdpbkdldEhhbmRsZSBXaW5HZXRQb3MgV2luR2V0UHJvY2VzcyBXaW5HZXRTdGF0ZSBXaW5HZXRUZXh0IFdpbkdldFRpdGxlIFdpbktpbGwgV2luTGlzdCBXaW5NZW51U2VsZWN0SXRlbSBXaW5NaW5pbWl6ZUFsbCBXaW5NaW5pbWl6ZUFsbFVuZG8gV2luTW92ZSBXaW5TZXRPblRvcCBXaW5TZXRTdGF0ZSBXaW5TZXRUaXRsZSBXaW5TZXRUcmFucyBXaW5XYWl0IixsaXRlcmFsOiJUcnVlIEZhbHNlIEFuZCBOdWxsIE5vdCBPciJ9LGNvbnRhaW5zOlt0LG4scixvLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQiLGtleXdvcmRzOnsibWV0YS1rZXl3b3JkIjoiY29tbWVudHMgaW5jbHVkZSBpbmNsdWRlLW9uY2UgTm9UcmF5SWNvbiBPbkF1dG9JdFN0YXJ0UmVnaXN0ZXIgcHJhZ21hIGNvbXBpbGUgUmVxdWlyZUFkbWluIn0sY29udGFpbnM6W3tiZWdpbjovXFxcbi8scmVsZXZhbmNlOjB9LHtiZWdpbktleXdvcmRzOiJpbmNsdWRlIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImluY2x1ZGUifSxlbmQ6IiQiLGNvbnRhaW5zOltyLHtjbGFzc05hbWU6Im1ldGEtc3RyaW5nIix2YXJpYW50czpbe2JlZ2luOiI8IixlbmQ6Ij4ifSx7YmVnaW46LyIvLGVuZDovIi8sY29udGFpbnM6W3tiZWdpbjovIiIvLHJlbGV2YW5jZTowfV19LHtiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbe2JlZ2luOi8nJy8scmVsZXZhbmNlOjB9XX1dfV19LHIsdF19LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IkBbQS16MC05X10rIn0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6IkZ1bmMiLGVuZDoiJCIsaWxsZWdhbDoiXFwkfFxcW3wlIixjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREUse2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoIixlbmQ6IlxcKSIsY29udGFpbnM6W24scixvXX1dfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F2cmFzbS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsbGV4ZW1lczoiXFwuPyIrZS5JREVOVF9SRSxrZXl3b3Jkczp7a2V5d29yZDoiYWRjIGFkZCBhZGl3IGFuZCBhbmRpIGFzciBiY2xyIGJsZCBicmJjIGJyYnMgYnJjYyBicmNzIGJyZWFrIGJyZXEgYnJnZSBicmhjIGJyaHMgYnJpZCBicmllIGJybG8gYnJsdCBicm1pIGJybmUgYnJwbCBicnNoIGJydGMgYnJ0cyBicnZjIGJydnMgYnNldCBic3QgY2FsbCBjYmkgY2JyIGNsYyBjbGggY2xpIGNsbiBjbHIgY2xzIGNsdCBjbHYgY2x6IGNvbSBjcCBjcGMgY3BpIGNwc2UgZGVjIGVpY2FsbCBlaWptcCBlbHBtIGVvciBmbXVsIGZtdWxzIGZtdWxzdSBpY2FsbCBpam1wIGluIGluYyBqbXAgbGQgbGRkIGxkaSBsZHMgbHBtIGxzbCBsc3IgbW92IG1vdncgbXVsIG11bHMgbXVsc3UgbmVnIG5vcCBvciBvcmkgb3V0IHBvcCBwdXNoIHJjYWxsIHJldCByZXRpIHJqbXAgcm9sIHJvciBzYmMgc2JyIHNicmMgc2JycyBzZWMgc2VoIHNiaSBzYmNpIHNiaWMgc2JpcyBzYml3IHNlaSBzZW4gc2VyIHNlcyBzZXQgc2V2IHNleiBzbGVlcCBzcG0gc3Qgc3RkIHN0cyBzdWIgc3ViaSBzd2FwIHRzdCB3ZHIiLGJ1aWx0X2luOiJyMCByMSByMiByMyByNCByNSByNiByNyByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSByMTYgcjE3IHIxOCByMTkgcjIwIHIyMSByMjIgcjIzIHIyNCByMjUgcjI2IHIyNyByMjggcjI5IHIzMCByMzEgeHwwIHhoIHhsIHl8MCB5aCB5bCB6fDAgemggemwgdWNzcjFjIHVkcjEgdWNzcjFhIHVjc3IxYiB1YnJyMWwgdWJycjFoIHVjc3IwYyB1YnJyMGggdGNjcjNjIHRjY3IzYSB0Y2NyM2IgdGNudDNoIHRjbnQzbCBvY3IzYWggb2NyM2FsIG9jcjNiaCBvY3IzYmwgb2NyM2NoIG9jcjNjbCBpY3IzaCBpY3IzbCBldGltc2sgZXRpZnIgdGNjcjFjIG9jcjFjaCBvY3IxY2wgdHdjciB0d2RyIHR3YXIgdHdzciB0d2JyIG9zY2NhbCB4bWNyYSB4bWNyYiBlaWNyYSBzcG1jc3Igc3BtY3IgcG9ydGcgZGRyZyBwaW5nIHBvcnRmIGRkcmYgc3JlZyBzcGggc3BsIHhkaXYgcmFtcHogZWljcmIgZWltc2sgZ2ltc2sgZ2ljciBlaWZyIGdpZnIgdGltc2sgdGlmciBtY3VjciBtY3Vjc3IgdGNjcjAgdGNudDAgb2NyMCBhc3NyIHRjY3IxYSB0Y2NyMWIgdGNudDFoIHRjbnQxbCBvY3IxYWggb2NyMWFsIG9jcjFiaCBvY3IxYmwgaWNyMWggaWNyMWwgdGNjcjIgdGNudDIgb2NyMiBvY2RyIHdkdGNyIHNmaW9yIGVlYXJoIGVlYXJsIGVlZHIgZWVjciBwb3J0YSBkZHJhIHBpbmEgcG9ydGIgZGRyYiBwaW5iIHBvcnRjIGRkcmMgcGluYyBwb3J0ZCBkZHJkIHBpbmQgc3BkciBzcHNyIHNwY3IgdWRyMCB1Y3NyMGEgdWNzcjBiIHVicnIwbCBhY3NyIGFkbXV4IGFkY3NyIGFkY2ggYWRjbCBwb3J0ZSBkZHJlIHBpbmUgcGluZiIsbWV0YToiLmJ5dGUgLmNzZWcgLmRiIC5kZWYgLmRldmljZSAuZHNlZyAuZHcgLmVuZG1hY3JvIC5lcXUgLmVzZWcgLmV4aXQgLmluY2x1ZGUgLmxpc3QgLmxpc3RtYWMgLm1hY3JvIC5ub2xpc3QgLm9yZyAuc2V0In0sY29udGFpbnM6W2UuQ19CTE9DS19DT01NRU5UX01PREUsZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSksZS5DX05VTUJFUl9NT0RFLGUuQklOQVJZX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYihcXCRbYS16QS1aMC05XSt8MG9bMC03XSspIn0sZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IlteXFxcXF0nIixpbGxlZ2FsOiJbXlxcXFxdW14nXSJ9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46Il5bQS1aYS16MC05Xy4kXSs6In0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMiLGVuZDoiJCJ9LHtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiQFswLTldKyJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXdrLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6IkJFR0lOIEVORCBpZiBlbHNlIHdoaWxlIGRvIGZvciBpbiBicmVhayBjb250aW51ZSBkZWxldGUgbmV4dCBuZXh0ZmlsZSBmdW5jdGlvbiBmdW5jIGV4aXR8MTAifSxjb250YWluczpbe2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiZWdpbjovXCRceyguKj8pfS99XX0se2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbe2JlZ2luOi8odXxiKT9yPycnJy8sZW5kOi8nJycvLHJlbGV2YW5jZToxMH0se2JlZ2luOi8odXxiKT9yPyIiIi8sZW5kOi8iIiIvLHJlbGV2YW5jZToxMH0se2JlZ2luOi8odXxyfHVyKScvLGVuZDovJy8scmVsZXZhbmNlOjEwfSx7YmVnaW46Lyh1fHJ8dXIpIi8sZW5kOi8iLyxyZWxldmFuY2U6MTB9LHtiZWdpbjovKGJ8YnIpJy8sZW5kOi8nL30se2JlZ2luOi8oYnxicikiLyxlbmQ6LyIvfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV19LGUuUkVHRVhQX01PREUsZS5IQVNIX0NPTU1FTlRfTU9ERSxlLk5VTUJFUl9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXhhcHRhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6ImZhbHNlIGludCBhYnN0cmFjdCBwcml2YXRlIGNoYXIgYm9vbGVhbiBzdGF0aWMgbnVsbCBpZiBmb3IgdHJ1ZSB3aGlsZSBsb25nIHRocm93IGZpbmFsbHkgcHJvdGVjdGVkIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgY2F0Y2ggYnl0ZSBzdXBlciBjYXNlIHNob3J0IGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgcmV2ZXJzZSBmaXJzdGZhc3QgZmlyc3Rvbmx5IGZvcnVwZGF0ZSBub2ZldGNoIHN1bSBhdmcgbWlub2YgbWF4b2YgY291bnQgb3JkZXIgZ3JvdXAgYnkgYXNjIGRlc2MgaW5kZXggaGludCBsaWtlIGRpc3BhbHkgZWRpdCBjbGllbnQgc2VydmVyIHR0c2JlZ2luIHR0c2NvbW1pdCBzdHIgcmVhbCBkYXRlIGNvbnRhaW5lciBhbnl0eXBlIGNvbW1vbiBkaXYgbW9kIixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQifSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixlbmQ6InsiLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiOiIsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiZWdpbjovXCRceyguKj8pfS99XX0sbj17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdCx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46L1wkXCgvLGVuZDovXCkvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfV19LHI9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJy8sZW5kOi8nL307cmV0dXJue2FsaWFzZXM6WyJzaCIsInpzaCJdLGxleGVtZXM6L1xiLT9bYS16XC5fXStcYi8sa2V5d29yZHM6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciB3aGlsZSBpbiBkbyBkb25lIGNhc2UgZXNhYyBmdW5jdGlvbiIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46ImJyZWFrIGNkIGNvbnRpbnVlIGV2YWwgZXhlYyBleGl0IGV4cG9ydCBnZXRvcHRzIGhhc2ggcHdkIHJlYWRvbmx5IHJldHVybiBzaGlmdCB0ZXN0IHRpbWVzIHRyYXAgdW1hc2sgdW5zZXQgYWxpYXMgYmluZCBidWlsdGluIGNhbGxlciBjb21tYW5kIGRlY2xhcmUgZWNobyBlbmFibGUgaGVscCBsZXQgbG9jYWwgbG9nb3V0IG1hcGZpbGUgcHJpbnRmIHJlYWQgcmVhZGFycmF5IHNvdXJjZSB0eXBlIHR5cGVzZXQgdWxpbWl0IHVuYWxpYXMgc2V0IHNob3B0IGF1dG9sb2FkIGJnIGJpbmRrZXkgYnllIGNhcCBjaGRpciBjbG9uZSBjb21wYXJndW1lbnRzIGNvbXBjYWxsIGNvbXBjdGwgY29tcGRlc2NyaWJlIGNvbXBmaWxlcyBjb21wZ3JvdXBzIGNvbXBxdW90ZSBjb21wdGFncyBjb21wdHJ5IGNvbXB2YWx1ZXMgZGlycyBkaXNhYmxlIGRpc293biBlY2hvdGMgZWNob3RpIGVtdWxhdGUgZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCBwdXNoZCBwdXNobG4gcmVoYXNoIHNjaGVkIHNldGNhcCBzZXRvcHQgc3RhdCBzdXNwZW5kIHR0eWN0bCB1bmZ1bmN0aW9uIHVuaGFzaCB1bmxpbWl0IHVuc2V0b3B0IHZhcmVkIHdhaXQgd2hlbmNlIHdoZXJlIHdoaWNoIHpjb21waWxlIHpmb3JtYXQgemZ0cCB6bGUgem1vZGxvYWQgenBhcnNlb3B0cyB6cHJvZiB6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AiLF86Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovXiMhW15cbl0rc2hccyokLyxyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOi9cd1tcd1xkX10qL30pXSxyZWxldmFuY2U6MH0sZS5IQVNIX0NPTU1FTlRfTU9ERSxuLHIsdF19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2ljLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOiJeLiIsbGV4ZW1lczoiW2EtekEtWl1bYS16QS1aMC05XyQlISNdKiIsa2V5d29yZHM6e2tleXdvcmQ6IkFCUyBBU0MgQU5EIEFUTiBBVVRPfDAgQkVFUCBCTE9BRHwxMCBCU0FWRXwxMCBDQUxMIENBTExTIENEQkwgQ0hBSU4gQ0hESVIgQ0hSJHwxMCBDSU5UIENJUkNMRSBDTEVBUiBDTE9TRSBDTFMgQ09MT1IgQ09NIENPTU1PTiBDT05UIENPUyBDU05HIENTUkxJTiBDVkQgQ1ZJIENWUyBEQVRBIERBVEUkIERFRkRCTCBERUZJTlQgREVGU05HIERFRlNUUiBERUZ8MCBTRUcgVVNSIERFTEVURSBESU0gRFJBVyBFRElUIEVORCBFTlZJUk9OIEVOVklST04kIEVPRiBFUVYgRVJBU0UgRVJERVYgRVJERVYkIEVSTCBFUlIgRVJST1IgRVhQIEZJRUxEIEZJTEVTIEZJWCBGT1J8MCBGUkUgR0VUIEdPU1VCfDEwIEdPVE8gSEVYJCBJRnwwIFRIRU4gRUxTRXwwIElOS0VZJCBJTlAgSU5QVVQgSU5QVVQjIElOUFVUJCBJTlNUUiBJTVAgSU5UIElPQ1RMIElPQ1RMJCBLRVkgT04gT0ZGIExJU1QgS0lMTCBMRUZUJCBMRU4gTEVUIExJTkUgTExJU1QgTE9BRCBMT0MgTE9DQVRFIExPRiBMT0cgTFBSSU5UIFVTSU5HIExTRVQgTUVSR0UgTUlEJCBNS0RJUiBNS0QkIE1LSSQgTUtTJCBNT0QgTkFNRSBORVcgTkVYVCBOT0lTRSBOT1QgT0NUJCBPTiBPUiBQRU4gUExBWSBTVFJJRyBPUEVOIE9QVElPTiBCQVNFIE9VVCBQQUlOVCBQQUxFVFRFIFBDT1BZIFBFRUsgUE1BUCBQT0lOVCBQT0tFIFBPUyBQUklOVCBQUklOVF0gUFNFVCBQUkVTRVQgUFVUIFJBTkRPTUlaRSBSRUFEIFJFTSBSRU5VTSBSRVNFVHwwIFJFU1RPUkUgUkVTVU1FIFJFVFVSTnwwIFJJR0hUJCBSTURJUiBSTkQgUlNFVCBSVU4gU0FWRSBTQ1JFRU4gU0dOIFNIRUxMIFNJTiBTT1VORCBTUEFDRSQgU1BDIFNRUiBTVEVQIFNUSUNLIFNUT1AgU1RSJCBTVFJJTkckIFNXQVAgU1lTVEVNIFRBQiBUQU4gVElNRSQgVElNRVIgVFJPRkYgVFJPTiBUTyBVU1IgVkFMIFZBUlBUUiBWQVJQVFIkIFZJRVcgV0FJVCBXSElMRSBXRU5EIFdJRFRIIFdJTkRPVyBXUklURSBYT1IifSxjb250YWluczpbZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNPTU1FTlQoIlJFTSIsIiQiLHtyZWxldmFuY2U6MTB9KSxlLkNPTU1FTlQoIiciLCIkIix7cmVsZXZhbmNlOjB9KSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJeWzAtOV0rICIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGIoWzAtOV0rWzAtOWVkRUQuXSpbIyFdPykiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoJltoSF1bMC05YS1mQS1GXXsxLDR9KSJ9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IigmW29PXVswLTddezEsNn0pIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ibmYuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjb250YWluczpbe2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjovPC8sZW5kOi8+L30se2JlZ2luOi86Oj0vLHN0YXJ0czp7ZW5kOi8kLyxjb250YWluczpbe2JlZ2luOi88LyxlbmQ6Lz4vfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV19fV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JyYWluZnVjay5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46IltcXCtcXC1dIixyZWxldmFuY2U6MH07cmV0dXJue2FsaWFzZXM6WyJiZiJdLGNvbnRhaW5zOltlLkNPTU1FTlQoIlteXFxbXFxdXFwuLFxcK1xcLTw+IFxyXG5dIiwiW1xcW1xcXVxcLixcXCtcXC08PiBcclxuXSIse3JldHVybkVuZDohMCxyZWxldmFuY2U6MH0pLHtjbGFzc05hbWU6InRpdGxlIixiZWdpbjoiW1xcW1xcXV0iLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJbXFwuLF0iLHJlbGV2YW5jZTowfSx7YmVnaW46L1wrXCt8XC1cLS8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3RdfSx0XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iZGl2IG1vZCBpbiBhbmQgb3Igbm90IHhvciBhc3NlcnRlcnJvciBiZWdpbiBjYXNlIGRvIGRvd250byBlbHNlIGVuZCBleGl0IGZvciBpZiBvZiByZXBlYXQgdGhlbiB0byB1bnRpbCB3aGlsZSB3aXRoIHZhciIsbj1bZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgvXHsvLC9cfS8se3JlbGV2YW5jZTowfSksZS5DT01NRU5UKC9cKFwqLywvXCpcKS8se3JlbGV2YW5jZToxMH0pXSxyPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W3tiZWdpbjovJycvfV19LG89e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovKCNcZCspKy99LHM9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiXFxkKyhcXC5cXGQrKT8oRFR8RHxUKSIscmVsZXZhbmNlOjB9LGk9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJ30sYT17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoicHJvY2VkdXJlIixlbmQ6L1s6O10vLGtleXdvcmRzOiJwcm9jZWR1cmV8MTAiLGNvbnRhaW5zOltlLlRJVExFX01PREUse2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLGtleXdvcmRzOnQsY29udGFpbnM6W3Isb119XS5jb25jYXQobil9LGw9e2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiJPQkpFQ1QgKFRhYmxlfEZvcm18UmVwb3J0fERhdGFwb3J0fENvZGV1bml0fFhNTHBvcnR8TWVudVN1aXRlfFBhZ2V8UXVlcnkpIChcXGQrKSAoW15cXHJcXG5dKykiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltlLlRJVExFX01PREUsYV19O3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOnQsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSJ9LGlsbGVnYWw6L1wvXCovLGNvbnRhaW5zOltyLG8scyxpLGUuTlVNQkVSX01PREUsbCxhXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FwbnByb3RvLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbImNhcG5wIl0sa2V5d29yZHM6e2tleXdvcmQ6InN0cnVjdCBlbnVtIGludGVyZmFjZSB1bmlvbiBncm91cCBpbXBvcnQgdXNpbmcgY29uc3QgYW5ub3RhdGlvbiBleHRlbmRzIGluIG9mIG9uIGFzIHdpdGggZnJvbSBmaXhlZCIsYnVpbHRfaW46IlZvaWQgQm9vbCBJbnQ4IEludDE2IEludDMyIEludDY0IFVJbnQ4IFVJbnQxNiBVSW50MzIgVUludDY0IEZsb2F0MzIgRmxvYXQ2NCBUZXh0IERhdGEgQW55UG9pbnRlciBBbnlTdHJ1Y3QgQ2FwYWJpbGl0eSBMaXN0IixsaXRlcmFsOiJ0cnVlIGZhbHNlIn0sY29udGFpbnM6W2UuUVVPVEVfU1RSSU5HX01PREUsZS5OVU1CRVJfTU9ERSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9AMHhbXHdcZF17MTZ9Oy8saWxsZWdhbDovXG4vfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9AXGQrXGIvfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3Jkczoic3RydWN0IGVudW0iLGVuZDovXHsvLGlsbGVnYWw6L1xuLyxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7c3RhcnRzOntlbmRzV2l0aFBhcmVudDohMCxleGNsdWRlRW5kOiEwfX0pXX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImludGVyZmFjZSIsZW5kOi9cey8saWxsZWdhbDovXG4vLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtzdGFydHM6e2VuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITB9fSldfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NleWxvbi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ImFzc2VtYmx5IG1vZHVsZSBwYWNrYWdlIGltcG9ydCBhbGlhcyBjbGFzcyBpbnRlcmZhY2Ugb2JqZWN0IGdpdmVuIHZhbHVlIGFzc2lnbiB2b2lkIGZ1bmN0aW9uIG5ldyBvZiBleHRlbmRzIHNhdGlzZmllcyBhYnN0cmFjdHMgaW4gb3V0IHJldHVybiBicmVhayBjb250aW51ZSB0aHJvdyBhc3NlcnQgZHluYW1pYyBpZiBlbHNlIHN3aXRjaCBjYXNlIGZvciB3aGlsZSB0cnkgY2F0Y2ggZmluYWxseSB0aGVuIGxldCB0aGlzIG91dGVyIHN1cGVyIGlzIGV4aXN0cyBub25lbXB0eSIsbj17Y2xhc3NOYW1lOiJzdWJzdCIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsYmVnaW46L2BgLyxlbmQ6L2BgLyxrZXl3b3Jkczp0LHJlbGV2YW5jZToxMH0scj1be2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIiIiJyxlbmQ6JyIiIicscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLGNvbnRhaW5zOltuXX0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIn0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiI1swLTlhLWZBLUZfXSt8XFwkWzAxX10rfFswLTlfXSsoPzpcXC5bMC05X10oPzpbZUVdWystXT9cXGQrKT8pP1trTUdUUG11bnBmXT8iLHJlbGV2YW5jZTowfV07cmV0dXJuIG4uY29udGFpbnM9cix7a2V5d29yZHM6e2tleXdvcmQ6dCsiIHNoYXJlZCBhYnN0cmFjdCBmb3JtYWwgZGVmYXVsdCBhY3R1YWwgdmFyaWFibGUgbGF0ZSBuYXRpdmUgZGVwcmVjYXRlZGZpbmFsIHNlYWxlZCBhbm5vdGF0aW9uIHN1cHByZXNzV2FybmluZ3Mgc21hbGwiLG1ldGE6ImRvYyBieSBsaWNlbnNlIHNlZSB0aHJvd3MgdGFnZ2VkIn0saWxsZWdhbDoiXFwkW14wMV18I1teMC05YS1mQS1GXSIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoIi9cXCoiLCJcXCovIix7Y29udGFpbnM6WyJzZWxmIl19KSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjonQFthLXpdXFx3Kig/OlxcOiJbXiJdKiIpPyd9XS5jb25jYXQocil9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NsZWFuLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbImNsZWFuIiwiaWNsIiwiZGNsIl0sa2V5d29yZHM6e2tleXdvcmQ6ImlmIGxldCBpbiB3aXRoIHdoZXJlIGNhc2Ugb2YgY2xhc3MgaW5zdGFuY2Ugb3RoZXJ3aXNlIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gc3lzdGVtIG1vZHVsZSBmcm9tIGltcG9ydCBxdWFsaWZpZWQgYXMgc3BlY2lhbCBjb2RlIGlubGluZSBmb3JlaWduIGV4cG9ydCBjY2FsbCBzdGRjYWxsIGdlbmVyaWMgZGVyaXZlIGluZml4IGluZml4bCBpbmZpeHIiLGJ1aWx0X2luOiJJbnQgUmVhbCBDaGFyIEJvb2wiLGxpdGVyYWw6IlRydWUgRmFsc2UifSxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLHtiZWdpbjoiLT58PC1bfDpdP3wjIT98Pj49fFxce1xcfHxcXHxcXH18Oj09fD06fDw+In1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbG9qdXJlLXJlcGwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46L14oW1x3Li1dK3xccyojXyk/PT4vLHN0YXJ0czp7ZW5kOi8kLyxzdWJMYW5ndWFnZToiY2xvanVyZSJ9fV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXsiYnVpbHRpbi1uYW1lIjoiZGVmIGRlZm9uY2UgY29uZCBhcHBseSBpZi1ub3QgaWYtbGV0IGlmIG5vdCBub3Q9ID0gPCA+IDw9ID49ID09ICsgLyAqIC0gcmVtIHF1b3QgbmVnPyBwb3M/IGRlbGF5PyBzeW1ib2w/IGtleXdvcmQ/IHRydWU/IGZhbHNlPyBpbnRlZ2VyPyBlbXB0eT8gY29sbD8gbGlzdD8gc2V0PyBpZm4/IGZuPyBhc3NvY2lhdGl2ZT8gc2VxdWVudGlhbD8gc29ydGVkPyBjb3VudGVkPyByZXZlcnNpYmxlPyBudW1iZXI/IGRlY2ltYWw/IGNsYXNzPyBkaXN0aW5jdD8gaXNhPyBmbG9hdD8gcmF0aW9uYWw/IHJlZHVjZWQ/IHJhdGlvPyBvZGQ/IGV2ZW4/IGNoYXI/IHNlcT8gdmVjdG9yPyBzdHJpbmc/IG1hcD8gbmlsPyBjb250YWlucz8gemVybz8gaW5zdGFuY2U/IG5vdC1ldmVyeT8gbm90LWFueT8gbGlic3BlYz8gLT4gLT4+IC4uIC4gaW5jIGNvbXBhcmUgZG8gZG90aW1lcyBtYXBjYXQgdGFrZSByZW1vdmUgdGFrZS13aGlsZSBkcm9wIGxldGZuIGRyb3AtbGFzdCB0YWtlLWxhc3QgZHJvcC13aGlsZSB3aGlsZSBpbnRlcm4gY29uZHAgY2FzZSByZWR1Y2VkIGN5Y2xlIHNwbGl0LWF0IHNwbGl0LXdpdGggcmVwZWF0IHJlcGxpY2F0ZSBpdGVyYXRlIHJhbmdlIG1lcmdlIHppcG1hcCBkZWNsYXJlIGxpbmUtc2VxIHNvcnQgY29tcGFyYXRvciBzb3J0LWJ5IGRvcnVuIGRvYWxsIG50aG5leHQgbnRocmVzdCBwYXJ0aXRpb24gZXZhbCBkb3NlcSBhd2FpdCBhd2FpdC1mb3IgbGV0IGFnZW50IGF0b20gc2VuZCBzZW5kLW9mZiByZWxlYXNlLXBlbmRpbmctc2VuZHMgYWRkLXdhdGNoIG1hcHYgZmlsdGVydiByZW1vdmUtd2F0Y2ggYWdlbnQtZXJyb3IgcmVzdGFydC1hZ2VudCBzZXQtZXJyb3ItaGFuZGxlciBlcnJvci1oYW5kbGVyIHNldC1lcnJvci1tb2RlISBlcnJvci1tb2RlIHNodXRkb3duLWFnZW50cyBxdW90ZSB2YXIgZm4gbG9vcCByZWN1ciB0aHJvdyB0cnkgbW9uaXRvci1lbnRlciBtb25pdG9yLWV4aXQgZGVmbWFjcm8gZGVmbiBkZWZuLSBtYWNyb2V4cGFuZCBtYWNyb2V4cGFuZC0xIGZvciBkb3N5bmMgYW5kIG9yIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgY29tcCBqdXh0IHBhcnRpYWwgc2VxdWVuY2UgbWVtb2l6ZSBjb25zdGFudGx5IGNvbXBsZW1lbnQgaWRlbnRpdHkgYXNzZXJ0IHBlZWsgcG9wIGRvdG8gcHJveHkgZGVmc3RydWN0IGZpcnN0IHJlc3QgY29ucyBkZWZwcm90b2NvbCBjYXN0IGNvbGwgZGVmdHlwZSBkZWZyZWNvcmQgbGFzdCBidXRsYXN0IHNpZ3MgcmVpZnkgc2Vjb25kIGZmaXJzdCBmbmV4dCBuZmlyc3Qgbm5leHQgZGVmbXVsdGkgZGVmbWV0aG9kIG1ldGEgd2l0aC1tZXRhIG5zIGluLW5zIGNyZWF0ZS1ucyBpbXBvcnQgcmVmZXIga2V5cyBzZWxlY3Qta2V5cyB2YWxzIGtleSB2YWwgcnNlcSBuYW1lIG5hbWVzcGFjZSBwcm9taXNlIGludG8gdHJhbnNpZW50IHBlcnNpc3RlbnQhIGNvbmohIGFzc29jISBkaXNzb2MhIHBvcCEgZGlzaiEgdXNlIGNsYXNzIHR5cGUgbnVtIGZsb2F0IGRvdWJsZSBzaG9ydCBieXRlIGJvb2xlYW4gYmlnaW50IGJpZ2ludGVnZXIgYmlnZGVjIHByaW50LW1ldGhvZCBwcmludC1kdXAgdGhyb3ctaWYgcHJpbnRmIGZvcm1hdCBsb2FkIGNvbXBpbGUgZ2V0LWluIHVwZGF0ZS1pbiBwciBwci1vbiBuZXdsaW5lIGZsdXNoIHJlYWQgc2x1cnAgcmVhZC1saW5lIHN1YnZlYyB3aXRoLW9wZW4gbWVtZm4gdGltZSByZS1maW5kIHJlLWdyb3VwcyByYW5kLWludCByYW5kIG1vZCBsb2NraW5nIGFzc2VydC12YWxpZC1mZGVjbCBhbGlhcyByZXNvbHZlIHJlZiBkZXJlZiByZWZzZXQgc3dhcCEgcmVzZXQhIHNldC12YWxpZGF0b3IhIGNvbXBhcmUtYW5kLXNldCEgYWx0ZXItbWV0YSEgcmVzZXQtbWV0YSEgY29tbXV0ZSBnZXQtdmFsaWRhdG9yIGFsdGVyIHJlZi1zZXQgcmVmLWhpc3RvcnktY291bnQgcmVmLW1pbi1oaXN0b3J5IHJlZi1tYXgtaGlzdG9yeSBlbnN1cmUgc3luYyBpbyEgbmV3IG5leHQgY29uaiBzZXQhIHRvLWFycmF5IGZ1dHVyZSBmdXR1cmUtY2FsbCBpbnRvLWFycmF5IGFzZXQgZ2VuLWNsYXNzIHJlZHVjZSBtYXAgZmlsdGVyIGZpbmQgZW1wdHkgaGFzaC1tYXAgaGFzaC1zZXQgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSB2ZWMgdmVjdG9yIHNlcSBmbGF0dGVuIHJldmVyc2UgYXNzb2MgZGlzc29jIGxpc3QgZGlzaiBnZXQgdW5pb24gZGlmZmVyZW5jZSBpbnRlcnNlY3Rpb24gZXh0ZW5kIGV4dGVuZC10eXBlIGV4dGVuZC1wcm90b2NvbCBpbnQgbnRoIGRlbGF5IGNvdW50IGNvbmNhdCBjaHVuayBjaHVuay1idWZmZXIgY2h1bmstYXBwZW5kIGNodW5rLWZpcnN0IGNodW5rLXJlc3QgbWF4IG1pbiBkZWMgdW5jaGVja2VkLWluYy1pbnQgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtZGVjLWluYyB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1uZWdhdGUgdW5jaGVja2VkLWFkZC1pbnQgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtc3VidHJhY3QtaW50IHVuY2hlY2tlZC1zdWJ0cmFjdCBjaHVuay1uZXh0IGNodW5rLWNvbnMgY2h1bmtlZC1zZXE/IHBybiB2YXJ5LW1ldGEgbGF6eS1zZXEgc3ByZWFkIGxpc3QqIHN0ciBmaW5kLWtleXdvcmQga2V5d29yZCBzeW1ib2wgZ2Vuc3ltIGZvcmNlIHJhdGlvbmFsaXplIn0sbj0iW2EtekEtWl9cXC0hLj8rKj08PiYjJ11bYS16QS1aX1xcLSEuPysqPTw+JiMnMC05Lzs6XSoiLHI9e2JlZ2luOm4scmVsZXZhbmNlOjB9LG89e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiWy0rXT9cXGQrKFxcLlxcZCspPyIscmVsZXZhbmNlOjB9LHM9ZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pLGk9ZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSksYT17Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjovXGIodHJ1ZXxmYWxzZXxuaWwpXGIvfSxsPXtiZWdpbjoiW1xcW1xce10iLGVuZDoiW1xcXVxcfV0ifSx1PXtjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOiJcXF4iK259LGM9ZS5DT01NRU5UKCJcXF5cXHsiLCJcXH0iKSxkPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46Ils6XXsxLDJ9IitufSxfPXtiZWdpbjoiXFwoIixlbmQ6IlxcKSJ9LHA9e2VuZHNXaXRoUGFyZW50OiEwLHJlbGV2YW5jZTowfSxmPXtrZXl3b3Jkczp0LGxleGVtZXM6bixjbGFzc05hbWU6Im5hbWUiLGJlZ2luOm4sc3RhcnRzOnB9LG09W18scyx1LGMsaSxkLGwsbyxhLHJdO3JldHVybiBfLmNvbnRhaW5zPVtlLkNPTU1FTlQoImNvbW1lbnQiLCIiKSxmLHBdLHAuY29udGFpbnM9bSxsLmNvbnRhaW5zPW0sYy5jb250YWlucz1bbF0se2FsaWFzZXM6WyJjbGoiXSxpbGxlZ2FsOi9cUy8sY29udGFpbnM6W18scyx1LGMsaSxkLGwsbyxhXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY21ha2UuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsiY21ha2UuaW4iXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOiJicmVhayBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyBjbWFrZV9wb2xpY3kgY29uZmlndXJlX2ZpbGUgY29udGludWUgZWxzZWlmIGVsc2UgZW5kZm9yZWFjaCBlbmRmdW5jdGlvbiBlbmRpZiBlbmRtYWNybyBlbmR3aGlsZSBleGVjdXRlX3Byb2Nlc3MgZmlsZSBmaW5kX2ZpbGUgZmluZF9saWJyYXJ5IGZpbmRfcGFja2FnZSBmaW5kX3BhdGggZmluZF9wcm9ncmFtIGZvcmVhY2ggZnVuY3Rpb24gZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCBnZXRfcHJvcGVydHkgaWYgaW5jbHVkZSBpbmNsdWRlX2d1YXJkIGxpc3QgbWFjcm8gbWFya19hc19hZHZhbmNlZCBtYXRoIG1lc3NhZ2Ugb3B0aW9uIHJldHVybiBzZXBhcmF0ZV9hcmd1bWVudHMgc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzIHNldF9wcm9wZXJ0eSBzZXQgc2l0ZV9uYW1lIHN0cmluZyB1bnNldCB2YXJpYWJsZV93YXRjaCB3aGlsZSBhZGRfY29tcGlsZV9kZWZpbml0aW9ucyBhZGRfY29tcGlsZV9vcHRpb25zIGFkZF9jdXN0b21fY29tbWFuZCBhZGRfY3VzdG9tX3RhcmdldCBhZGRfZGVmaW5pdGlvbnMgYWRkX2RlcGVuZGVuY2llcyBhZGRfZXhlY3V0YWJsZSBhZGRfbGlicmFyeSBhZGRfbGlua19vcHRpb25zIGFkZF9zdWJkaXJlY3RvcnkgYWRkX3Rlc3QgYXV4X3NvdXJjZV9kaXJlY3RvcnkgYnVpbGRfY29tbWFuZCBjcmVhdGVfdGVzdF9zb3VyY2VsaXN0IGRlZmluZV9wcm9wZXJ0eSBlbmFibGVfbGFuZ3VhZ2UgZW5hYmxlX3Rlc3RpbmcgZXhwb3J0IGZsdGtfd3JhcF91aSBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpbmNsdWRlX2RpcmVjdG9yaWVzIGluY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0IGluY2x1ZGVfcmVndWxhcl9leHByZXNzaW9uIGluc3RhbGwgbGlua19kaXJlY3RvcmllcyBsaW5rX2xpYnJhcmllcyBsb2FkX2NhY2hlIHByb2plY3QgcXRfd3JhcF9jcHAgcXRfd3JhcF91aSByZW1vdmVfZGVmaW5pdGlvbnMgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzb3VyY2VfZ3JvdXAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyB0YXJnZXRfbGlua19kaXJlY3RvcmllcyB0YXJnZXRfbGlua19saWJyYXJpZXMgdGFyZ2V0X2xpbmtfb3B0aW9ucyB0YXJnZXRfc291cmNlcyB0cnlfY29tcGlsZSB0cnlfcnVuIGN0ZXN0X2J1aWxkIGN0ZXN0X2NvbmZpZ3VyZSBjdGVzdF9jb3ZlcmFnZSBjdGVzdF9lbXB0eV9iaW5hcnlfZGlyZWN0b3J5IGN0ZXN0X21lbWNoZWNrIGN0ZXN0X3JlYWRfY3VzdG9tX2ZpbGVzIGN0ZXN0X3J1bl9zY3JpcHQgY3Rlc3Rfc2xlZXAgY3Rlc3Rfc3RhcnQgY3Rlc3Rfc3VibWl0IGN0ZXN0X3Rlc3QgY3Rlc3RfdXBkYXRlIGN0ZXN0X3VwbG9hZCBidWlsZF9uYW1lIGV4ZWNfcHJvZ3JhbSBleHBvcnRfbGlicmFyeV9kZXBlbmRlbmNpZXMgaW5zdGFsbF9maWxlcyBpbnN0YWxsX3Byb2dyYW1zIGluc3RhbGxfdGFyZ2V0cyBsb2FkX2NvbW1hbmQgbWFrZV9kaXJlY3Rvcnkgb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHJlbW92ZSBzdWJkaXJfZGVwZW5kcyBzdWJkaXJzIHVzZV9tYW5nbGVkX21lc2EgdXRpbGl0eV9zb3VyY2UgdmFyaWFibGVfcmVxdWlyZXMgd3JpdGVfZmlsZSBxdDVfdXNlX21vZHVsZXMgcXQ1X3VzZV9wYWNrYWdlIHF0NV93cmFwX2NwcCBvbiBvZmYgdHJ1ZSBmYWxzZSBhbmQgb3Igbm90IGNvbW1hbmQgcG9saWN5IHRhcmdldCB0ZXN0IGV4aXN0cyBpc19uZXdlcl90aGFuIGlzX2RpcmVjdG9yeSBpc19zeW1saW5rIGlzX2Fic29sdXRlIG1hdGNoZXMgbGVzcyBncmVhdGVyIGVxdWFsIGxlc3NfZXF1YWwgZ3JlYXRlcl9lcXVhbCBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgc3RybGVzc19lcXVhbCBzdHJncmVhdGVyX2VxdWFsIHZlcnNpb25fbGVzcyB2ZXJzaW9uX2dyZWF0ZXIgdmVyc2lvbl9lcXVhbCB2ZXJzaW9uX2xlc3NfZXF1YWwgdmVyc2lvbl9ncmVhdGVyX2VxdWFsIGluX2xpc3QgZGVmaW5lZCJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46IlxcJHsiLGVuZDoifSJ9LGUuSEFTSF9DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLk5VTUJFUl9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29mZmVlc2NyaXB0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17a2V5d29yZDoiaW4gaWYgZm9yIHdoaWxlIGZpbmFsbHkgbmV3IGRvIHJldHVybiBlbHNlIGJyZWFrIGNhdGNoIGluc3RhbmNlb2YgdGhyb3cgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgZGVidWdnZXIgc3VwZXIgeWllbGQgaW1wb3J0IGV4cG9ydCBmcm9tIGFzIGRlZmF1bHQgYXdhaXQgdGhlbiB1bmxlc3MgdW50aWwgbG9vcCBvZiBieSB3aGVuIGFuZCBvciBpcyBpc250IG5vdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCB5ZXMgbm8gb24gb2ZmIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9LG49IltBLVphLXokX11bMC05QS1aYS16JF9dKiIscj17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46LyNcey8sZW5kOi99LyxrZXl3b3Jkczp0fSxvPVtlLkJJTkFSWV9OVU1CRVJfTU9ERSxlLmluaGVyaXQoZS5DX05VTUJFUl9NT0RFLHtzdGFydHM6e2VuZDoiKFxccyovKT8iLHJlbGV2YW5jZTowfX0pLHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovJycnLyxlbmQ6LycnJy8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOi8iIiIvLGVuZDovIiIiLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHJdfSx7YmVnaW46LyIvLGVuZDovIi8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxyXX1dfSx7Y2xhc3NOYW1lOiJyZWdleHAiLHZhcmlhbnRzOlt7YmVnaW46Ii8vLyIsZW5kOiIvLy8iLGNvbnRhaW5zOltyLGUuSEFTSF9DT01NRU5UX01PREVdfSx7YmVnaW46Ii8vW2dpbV0qIixyZWxldmFuY2U6MH0se2JlZ2luOi9cLyg/IVsgKl0pKFxcXC98LikqP1wvW2dpbV0qKD89XFd8JCkvfV19LHtiZWdpbjoiQCIrbn0se3N1Ykxhbmd1YWdlOiJqYXZhc2NyaXB0IixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCx2YXJpYW50czpbe2JlZ2luOiJgYGAiLGVuZDoiYGBgIn0se2JlZ2luOiJgIixlbmQ6ImAifV19XTtyLmNvbnRhaW5zPW87dmFyIHM9ZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46bn0pLGk9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoW15cXChdIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dCxjb250YWluczpbInNlbGYiXS5jb25jYXQobyl9XX07cmV0dXJue2FsaWFzZXM6WyJjb2ZmZWUiLCJjc29uIiwiaWNlZCJdLGtleXdvcmRzOnQsaWxsZWdhbDovXC9cKi8sY29udGFpbnM6by5jb25jYXQoW2UuQ09NTUVOVCgiIyMjIiwiIyMjIiksZS5IQVNIX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46Il5cXHMqIituKyJcXHMqPVxccyooXFwoLipcXCkpP1xccypcXEJbLT1dPiIsZW5kOiJbLT1dPiIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3MsaV19LHtiZWdpbjovWzpcKCw9XVxzKi8scmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiKFxcKC4qXFwpKT9cXHMqXFxCWy09XT4iLGVuZDoiWy09XT4iLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltpXX1dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoiJCIsaWxsZWdhbDovWzo9IlxbXF1dLyxjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImV4dGVuZHMiLGVuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6L1s6PSJcW1xdXS8sY29udGFpbnM6W3NdfSxzXX0se2JlZ2luOm4rIjoiLGVuZDoiOiIscmV0dXJuQmVnaW46ITAscmV0dXJuRW5kOiEwLHJlbGV2YW5jZTowfV0pfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb3EuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntrZXl3b3Jkczp7a2V5d29yZDoiXyBhcyBhdCBjb2ZpeCBlbHNlIGVuZCBleGlzdHMgZXhpc3RzMiBmaXggZm9yIGZvcmFsbCBmdW4gaWYgSUYgaW4gbGV0IG1hdGNoIG1vZCBQcm9wIHJldHVybiBTZXQgdGhlbiBUeXBlIHVzaW5nIHdoZXJlIHdpdGggQWJvcnQgQWJvdXQgQWRkIEFkbWl0IEFkbWl0dGVkIEFsbCBBcmd1bWVudHMgQXNzdW1wdGlvbnMgQXhpb20gQmFjayBCYWNrVG8gQmFja3RyYWNrIEJpbmQgQmxhY2tsaXN0IENhbm9uaWNhbCBDZCBDaGVjayBDbGFzcyBDbGFzc2VzIENsb3NlIENvZXJjaW9uIENvZXJjaW9ucyBDb0ZpeHBvaW50IENvSW5kdWN0aXZlIENvbGxlY3Rpb24gQ29tYmluZWQgQ29tcHV0ZSBDb25qZWN0dXJlIENvbmplY3R1cmVzIENvbnN0YW50IGNvbnN0ciBDb25zdHJhaW50IENvbnN0cnVjdG9ycyBDb250ZXh0IENvcm9sbGFyeSBDcmVhdGVIaW50RGIgQ3V0IERlY2xhcmUgRGVmaW5lZCBEZWZpbml0aW9uIERlbGltaXQgRGVwZW5kZW5jaWVzIERlcGVuZGVudERlcml2ZSBEcm9wIGVhdXRvIEVuZCBFcXVhbGl0eSBFdmFsIEV4YW1wbGUgRXhpc3RlbnRpYWwgRXhpc3RlbnRpYWxzIEV4aXN0aW5nIEV4cG9ydCBleHBvcnRpbmcgRXh0ZXJuIEV4dHJhY3QgRXh0cmFjdGlvbiBGYWN0IEZpZWxkIEZpZWxkcyBGaWxlIEZpeHBvaW50IEZvY3VzIGZvciBGcm9tIEZ1bmN0aW9uIEZ1bmN0aW9uYWwgR2VuZXJhbGl6YWJsZSBHbG9iYWwgR29hbCBHcmFiIEdyYW1tYXIgR3JhcGggR3VhcmRlZCBIZWFwIEhpbnQgSGludERiIEhpbnRzIEh5cG90aGVzZXMgSHlwb3RoZXNpcyBpZGVudCBJZGVudGl0eSBJZiBJbW1lZGlhdGUgSW1wbGljaXQgSW1wb3J0IEluY2x1ZGUgSW5kdWN0aXZlIEluZml4IEluZm8gSW5pdGlhbCBJbmxpbmUgSW5zcGVjdCBJbnN0YW5jZSBJbnN0YW5jZXMgSW50cm8gSW50cm9zIEludmVyc2lvbiBJbnZlcnNpb25fY2xlYXIgTGFuZ3VhZ2UgTGVmdCBMZW1tYSBMZXQgTGlicmFyaWVzIExpYnJhcnkgTG9hZCBMb2FkUGF0aCBMb2NhbCBMb2NhdGUgTHRhYyBNTCBNb2RlIE1vZHVsZSBNb2R1bGVzIE1vbm9tb3JwaGljIE1vcnBoaXNtIE5leHQgTm9JbmxpbmUgTm90YXRpb24gT2JsaWdhdGlvbiBPYmxpZ2F0aW9ucyBPcGFxdWUgT3BlbiBPcHRpbWl6ZSBPcHRpb25zIFBhcmFtZXRlciBQYXJhbWV0ZXJzIFBhcmFtZXRyaWMgUGF0aCBQYXRocyBwYXR0ZXJuIFBvbHltb3JwaGljIFByZXRlcm0gUHJpbnQgUHJpbnRpbmcgUHJvZ3JhbSBQcm9qZWN0aW9ucyBQcm9vZiBQcm9wb3NpdGlvbiBQd2QgUWVkIFF1aXQgUmVjIFJlY29yZCBSZWN1cnNpdmUgUmVkaXJlY3QgUmVsYXRpb24gUmVtYXJrIFJlbW92ZSBSZXF1aXJlIFJlc2VydmVkIFJlc2V0IFJlc29sdmUgUmVzdGFydCBSZXdyaXRlIFJpZ2h0IFJpbmcgUmluZ3MgU2F2ZSBTY2hlbWUgU2NvcGUgU2NvcGVzIFNjcmlwdCBTZWFyY2ggU2VhcmNoQWJvdXQgU2VhcmNoSGVhZCBTZWFyY2hQYXR0ZXJuIFNlYXJjaFJld3JpdGUgU2VjdGlvbiBTZXBhcmF0ZSBTZXQgU2V0b2lkIFNob3cgU29sdmUgU29ydGVkIFN0ZXAgU3RyYXRlZ2llcyBTdHJhdGVneSBTdHJ1Y3R1cmUgU3ViQ2xhc3MgVGFibGUgVGFibGVzIFRhY3RpYyBUZXJtIFRlc3QgVGhlb3JlbSBUaW1lIFRpbWVvdXQgVHJhbnNwYXJlbnQgVHlwZSBUeXBlY2xhc3NlcyBUeXBlcyBVbmRlbGltaXQgVW5kbyBVbmZvY3VzIFVuZm9jdXNlZCBVbmZvbGQgVW5pdmVyc2UgVW5pdmVyc2VzIFVuc2V0IFVuc2hlbHZlIHVzaW5nIFZhcmlhYmxlIFZhcmlhYmxlcyBWYXJpYW50IFZlcmJvc2UgVmlzaWJpbGl0eSB3aGVyZSB3aXRoIixidWlsdF9pbjoiYWJzdHJhY3QgYWJzdXJkIGFkbWl0IGFmdGVyIGFwcGx5IGFzIGFzc2VydCBhc3N1bXB0aW9uIGF0IGF1dG8gYXV0b3Jld3JpdGUgYXV0b3VuZm9sZCBiZWZvcmUgYm90dG9tIGJ0YXV0byBieSBjYXNlIGNhc2VfZXEgY2JuIGNidiBjaGFuZ2UgY2xhc3NpY2FsX2xlZnQgY2xhc3NpY2FsX3JpZ2h0IGNsZWFyIGNsZWFyYm9keSBjb2ZpeCBjb21wYXJlIGNvbXB1dGUgY29uZ3J1ZW5jZSBjb25zdHJfZXEgY29uc3RydWN0b3IgY29udHJhZGljdCBjb250cmFkaWN0aW9uIGN1dCBjdXRyZXdyaXRlIGN5Y2xlIGRlY2lkZSBkZWNvbXBvc2UgZGVwZW5kZW50IGRlc3RydWN0IGRlc3RydWN0aW9uIGRpbnR1aXRpb24gZGlzY3JpbWluYXRlIGRpc2NyUiBkbyBkb3VibGUgZHRhdXRvIGVhcHBseSBlYXNzdW1wdGlvbiBlYXV0byBlY2FzZSBlY29uc3RydWN0b3IgZWRlc3RydWN0IGVkaXNjcmltaW5hdGUgZWVsaW0gZWV4YWN0IGVleGlzdHMgZWluZHVjdGlvbiBlaW5qZWN0aW9uIGVsZWZ0IGVsaW0gZWxpbXR5cGUgZW5vdWdoIGVxdWFsaXR5IGVyZXdyaXRlIGVyaWdodCBlc2ltcGxpZnlfZXEgZXNwbGl0IGV2YXIgZXhhY3QgZXhhY3RseV9vbmNlIGV4ZmFsc28gZXhpc3RzIGZfZXF1YWwgZmFpbCBmaWVsZCBmaWVsZF9zaW1wbGlmeSBmaWVsZF9zaW1wbGlmeV9lcSBmaXJzdCBmaXJzdG9yZGVyIGZpeCBmb2xkIGZvdXJpZXIgZnVuY3Rpb25hbCBnZW5lcmFsaXplIGdlbmVyYWxpemluZyBnZmFpbCBnaXZlX3VwIGhhc19ldmFyIGhuZiBpZHRhYyBpbiBpbmR1Y3Rpb24gaW5qZWN0aW9uIGluc3RhbnRpYXRlIGludHJvIGludHJvX3BhdHRlcm4gaW50cm9zIGludHVpdGlvbiBpbnZlcnNpb24gaW52ZXJzaW9uX2NsZWFyIGlzX2V2YXIgaXNfdmFyIGxhcHBseSBsYXp5IGxlZnQgbGlhIGxyYSBtb3ZlIG5hdGl2ZV9jb21wdXRlIG5pYSBuc2F0eiBvbWVnYSBvbmNlIHBhdHRlcm4gcG9zZSBwcm9ncmVzcyBwcm9vZiBwc2F0eiBxdW90ZSByZWNvcmQgcmVkIHJlZmluZSByZWZsZXhpdml0eSByZW1lbWJlciByZW5hbWUgcmVwZWF0IHJlcGxhY2UgcmV2ZXJ0IHJldmdvYWxzIHJld3JpdGUgcmV3cml0ZV9zdHJhdCByaWdodCByaW5nIHJpbmdfc2ltcGxpZnkgcnRhdXRvIHNldCBzZXRvaWRfcmVmbGV4aXZpdHkgc2V0b2lkX3JlcGxhY2Ugc2V0b2lkX3Jld3JpdGUgc2V0b2lkX3N5bW1ldHJ5IHNldG9pZF90cmFuc2l0aXZpdHkgc2hlbHZlIHNoZWx2ZV91bmlmaWFibGUgc2ltcGwgc2ltcGxlIHNpbXBsaWZ5X2VxIHNvbHZlIHNwZWNpYWxpemUgc3BsaXQgc3BsaXRfUmFicyBzcGxpdF9SbXVsdCBzdGVwbCBzdGVwciBzdWJzdCBzdW0gc3dhcCBzeW1tZXRyeSB0YWN0aWMgdGF1dG8gdGltZSB0aW1lb3V0IHRvcCB0cmFuc2l0aXZpdHkgdHJpdmlhbCB0cnkgdHJ5aWYgdW5mb2xkIHVuaWZ5IHVudGlsIHVzaW5nIHZtX2NvbXB1dGUgd2l0aCJ9LGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFLGUuQ09NTUVOVCgiXFwoXFwqIiwiXFwqXFwpIiksZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6InR5cGUiLGV4Y2x1ZGVCZWdpbjohMCxiZWdpbjoiXFx8XFxzKiIsZW5kOiJcXHcrIn0se2JlZ2luOi9bLT1dPi99XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29zLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxhbGlhc2VzOlsiY29zIiwiY2xzIl0sa2V5d29yZHM6InByb3BlcnR5IHBhcmFtZXRlciBjbGFzcyBjbGFzc21ldGhvZCBjbGllbnRtZXRob2QgZXh0ZW5kcyBhcyBicmVhayBjYXRjaCBjbG9zZSBjb250aW51ZSBkbyBkfDAgZWxzZSBlbHNlaWYgZm9yIGdvdG8gaGFsdCBoYW5nIGh8MCBpZiBqb2IganwwIGtpbGwga3wwIGxvY2sgbHwwIG1lcmdlIG5ldyBvcGVuIHF1aXQgcXwwIHJlYWQgcnwwIHJldHVybiBzZXQgc3wwIHRjb21taXQgdGhyb3cgdHJvbGxiYWNrIHRyeSB0c3RhcnQgdXNlIHZpZXcgd2hpbGUgd3JpdGUgd3wwIHhlY3V0ZSB4fDAgemtpbGwgem5zcGFjZSB6biB6dHJhcCB6d3JpdGUgencgenpkdW1wIHp6d3JpdGUgcHJpbnQgemJyZWFrIHppbnNlcnQgemxvYWQgenByaW50IHpyZW1vdmUgenNhdmUgenpwcmludCBtdiBtdmNhbGwgbXZjcnQgbXZkaW0gbXZwcmludCB6cXVpdCB6c3luYyBhc2NpaSIsY29udGFpbnM6W3tjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIicscmVsZXZhbmNlOjB9XX1dfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjovOy8sZW5kOiIkIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOi8oPzpcJFwkP3xcLlwuKVxeP1thLXpBLVpdKy99LHtjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjovXCRcJFwkW2EtekEtWl0rL30se2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOi8lW2Etel0rKD86XC5bYS16XSspKi99LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46L1xeJT9bYS16QS1aXVtcd10qL30se2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46LyMjY2xhc3N8IyNzdXBlcnwjZGVmaW5lfCNkaW0vfSx7YmVnaW46LyZzcWxcKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsc3ViTGFuZ3VhZ2U6InNxbCJ9LHtiZWdpbjovJihqc3xqc2NyaXB0fGphdmFzY3JpcHQpPC8sZW5kOi8+LyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxzdWJMYW5ndWFnZToiamF2YXNjcmlwdCJ9LHtiZWdpbjovJmh0bWw8XHMqPC8sZW5kOi8+XHMqPi8sc3ViTGFuZ3VhZ2U6InhtbCJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3BwLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiXFxiW2EtelxcZF9dKl90XFxiIn0sbj17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46Jyh1OD98VXxMKT8iJyxlbmQ6JyInLGlsbGVnYWw6IlxcbiIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjovKD86dTg/fFV8TCk/UiIoW14oKVxcIF17MCwxNn0pXCgoPzoufFxuKSo/XClcMSIvfSx7YmVnaW46IidcXFxcPy4iLGVuZDoiJyIsaWxsZWdhbDoiLiJ9XX0scj17Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwYlswMSddKykifSx7YmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHtiZWdpbjoiKC0/KShcXGIwW3hYXVthLWZBLUYwLTknXSt8KFxcYltcXGQnXSsoXFwuW1xcZCddKik/fFxcLltcXGQnXSspKFtlRV1bLStdP1tcXGQnXSspPykifV0scmVsZXZhbmNlOjB9LG89e2NsYXNzTmFtZToibWV0YSIsYmVnaW46LyNccypbYS16XStcYi8sZW5kOi8kLyxrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSJ9LGNvbnRhaW5zOlt7YmVnaW46L1xcXG4vLHJlbGV2YW5jZTowfSxlLmluaGVyaXQobix7Y2xhc3NOYW1lOiJtZXRhLXN0cmluZyJ9KSx7Y2xhc3NOYW1lOiJtZXRhLXN0cmluZyIsYmVnaW46LzxbXlxuPl0qPi8sZW5kOi8kLyxpbGxlZ2FsOiJcXG4ifSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHM9ZS5JREVOVF9SRSsiXFxzKlxcKCIsaT17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBpbXBvcnQgbW9kdWxlIGV4cG9ydCB2aXJ0dWFsIG9wZXJhdG9yIHNpemVvZiBkeW5hbWljX2Nhc3R8MTAgdHlwZWRlZiBjb25zdF9jYXN0fDEwIGNvbnN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gdXNpbmcgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IHN0YXRpY19hc3NlcnQgdGhyZWFkX2xvY2FsIHJlc3RyaWN0IF9Cb29sIGNvbXBsZXggX0NvbXBsZXggX0ltYWdpbmFyeSBhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyBhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gYW5kIG9yIG5vdCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0ZGluIHN0ZG91dCBzdGRlcnIgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIGFib3J0IGFicyBhY29zIGFzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwIGZzY2FuZiBpc2FsbnVtIGlzYWxwaGEgaXNjbnRybCBpc2RpZ2l0IGlzZ3JhcGggaXNsb3dlciBpc3ByaW50IGlzcHVuY3QgaXNzcGFjZSBpc3VwcGVyIGlzeGRpZ2l0IHRvbG93ZXIgdG91cHBlciBsYWJzIGxkZXhwIGxvZzEwIGxvZyBtYWxsb2MgcmVhbGxvYyBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1zZXQgbW9kZiBwb3cgcHJpbnRmIHB1dGNoYXIgcHV0cyBzY2FuZiBzaW5oIHNpbiBzbnByaW50ZiBzcHJpbnRmIHNxcnQgc3NjYW5mIHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNweSBzdHJjc3BuIHN0cmxlbiBzdHJuY2F0IHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciB0YW5oIHRhbiB2ZnByaW50ZiB2cHJpbnRmIHZzcHJpbnRmIGVuZGwgaW5pdGlhbGl6ZXJfbGlzdCB1bmlxdWVfcHRyIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGxwdHIgTlVMTCJ9LGE9W3QsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUscixuXTtyZXR1cm57YWxpYXNlczpbImMiLCJjYyIsImgiLCJjKysiLCJoKysiLCJocHAiXSxrZXl3b3JkczppLGlsbGVnYWw6IjwvIixjb250YWluczphLmNvbmNhdChbbyx7YmVnaW46IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZW5kOiI+IixrZXl3b3JkczppLGNvbnRhaW5zOlsic2VsZiIsdF19LHtiZWdpbjplLklERU5UX1JFKyI6OiIsa2V5d29yZHM6aX0se3ZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHtiZWdpbjovXCgvLGVuZDovXCkvfSx7YmVnaW5LZXl3b3JkczoibmV3IHRocm93IHJldHVybiBlbHNlIixlbmQ6LzsvfV0sa2V5d29yZHM6aSxjb250YWluczphLmNvbmNhdChbe2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6aSxjb250YWluczphLmNvbmNhdChbInNlbGYiXSkscmVsZXZhbmNlOjB9XSkscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiKCIrZS5JREVOVF9SRSsiW1xcKiZcXHNdKykrIitzLHJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6aSxpbGxlZ2FsOi9bXlx3XHNcKiZdLyxjb250YWluczpbe2JlZ2luOnMscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2UuVElUTEVfTU9ERV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczppLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxuLHIsdCx7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczppLHJlbGV2YW5jZTowLGNvbnRhaW5zOlsic2VsZiIsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbixyLHRdfV19LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG9dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3Mgc3RydWN0IixlbmQ6L1t7OzpdLyxjb250YWluczpbe2JlZ2luOi88LyxlbmQ6Lz4vLGNvbnRhaW5zOlsic2VsZiJdfSxlLlRJVExFX01PREVdfV0pLGV4cG9ydHM6e3ByZXByb2Nlc3NvcjpvLHN0cmluZ3M6bixrZXl3b3JkczppfX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3Jtc2guanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJncm91cCBjbG9uZSBtcyBtYXN0ZXIgbG9jYXRpb24gY29sb2NhdGlvbiBvcmRlciBmZW5jaW5nX3RvcG9sb2d5IHJzY190aWNrZXQgYWNsX3RhcmdldCBhY2xfZ3JvdXAgdXNlciByb2xlIHRhZyB4bWwiO3JldHVybnthbGlhc2VzOlsiY3JtIiwicGNtayJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6e2tleXdvcmQ6InBhcmFtcyBtZXRhIG9wZXJhdGlvbnMgb3AgcnVsZSBhdHRyaWJ1dGVzIHV0aWxpemF0aW9uIHJlYWQgd3JpdGUgZGVueSBkZWZpbmVkIG5vdF9kZWZpbmVkIGluX3JhbmdlIGRhdGUgc3BlYyBpbiByZWYgcmVmZXJlbmNlIGF0dHJpYnV0ZSB0eXBlIHhwYXRoIHZlcnNpb24gYW5kIG9yIGx0IGd0IHRhZyBsdGUgZ3RlIGVxIG5lIFxcIG51bWJlciBzdHJpbmciLGxpdGVyYWw6Ik1hc3RlciBTdGFydGVkIFNsYXZlIFN0b3BwZWQgc3RhcnQgcHJvbW90ZSBkZW1vdGUgc3RvcCBtb25pdG9yIHRydWUgZmFsc2UifSxjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSx7YmVnaW5LZXl3b3Jkczoibm9kZSIsc3RhcnRzOntlbmQ6IlxccyooW1xcd18tXSs6KT8iLHN0YXJ0czp7Y2xhc3NOYW1lOiJ0aXRsZSIsZW5kOiJcXHMqW1xcJFxcd19dW1xcd18tXSoifX19LHtiZWdpbktleXdvcmRzOiJwcmltaXRpdmUgcnNjX3RlbXBsYXRlIixzdGFydHM6e2NsYXNzTmFtZToidGl0bGUiLGVuZDoiXFxzKltcXCRcXHdfXVtcXHdfLV0qIixzdGFydHM6e2VuZDoiXFxzKkA/W1xcd19dW1xcd19cXC46LV0qIn19fSx7YmVnaW46IlxcYigiK3Quc3BsaXQoIiAiKS5qb2luKCJ8IikrIilcXHMrIixrZXl3b3Jkczp0LHN0YXJ0czp7Y2xhc3NOYW1lOiJ0aXRsZSIsZW5kOiJbXFwkXFx3X11bXFx3Xy1dKiJ9fSx7YmVnaW5LZXl3b3JkczoicHJvcGVydHkgcnNjX2RlZmF1bHRzIG9wX2RlZmF1bHRzIixzdGFydHM6e2NsYXNzTmFtZToidGl0bGUiLGVuZDoiXFxzKihbXFx3Xy1dKzopPyJ9fSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIob2NmfHN5c3RlbWR8c2VydmljZXxsc2IpOltcXHdfOi1dKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYlxcZCsoXFwuXFxkKyk/KG1zfHN8aHxtKT8iLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiWy1dPyhpbmZpbml0eXxpbmYpIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiYXR0ciIsYmVnaW46LyhbQS1aYS16XCRfXCNdW1x3Xy1dKyk9LyxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToidGFnIixiZWdpbjoiPC8/IixlbmQ6Ii8/PiIscmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3J5c3RhbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3ZhciBuPVt7YmVnaW46ZSxlbmQ6dH1dO3JldHVybiBuWzBdLmNvbnRhaW5zPW4sbn12YXIgbj0iKF8qW3VpXSg4fDE2fDMyfDY0fDEyOCkpPyIscj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfnxdfC8vfC8vPXwmWy0rKl09P3wmXFwqXFwqfFxcW1xcXVs9P10/IixvPSJbQS1aYS16X11cXHcqKDo6XFx3KykqKFxcP3xcXCEpPyIscz17a2V5d29yZDoiYWJzdHJhY3QgYWxpYXMgYW5ub3RhdGlvbiBhcyBhcz8gYXNtIGJlZ2luIGJyZWFrIGNhc2UgY2xhc3MgZGVmIGRvIGVsc2UgZWxzaWYgZW5kIGVuc3VyZSBlbnVtIGV4dGVuZCBmb3IgZnVuIGlmIGluY2x1ZGUgaW5zdGFuY2Vfc2l6ZW9mIGlzX2E/IGxpYiBtYWNybyBtb2R1bGUgbmV4dCBuaWw/IG9mIG91dCBwb2ludGVyb2YgcHJpdmF0ZSBwcm90ZWN0ZWQgcmVzY3VlIHJlc3BvbmRzX3RvPyByZXR1cm4gcmVxdWlyZSBzZWxlY3Qgc2VsZiBzaXplb2Ygc3RydWN0IHN1cGVyIHRoZW4gdHlwZSB0eXBlb2YgdW5pb24gdW5pbml0aWFsaXplZCB1bmxlc3MgdW50aWwgdmVyYmF0aW0gd2hlbiB3aGlsZSB3aXRoIHlpZWxkIF9fRElSX18gX19FTkRfTElORV9fIF9fRklMRV9fIF9fTElORV9fIixsaXRlcmFsOiJmYWxzZSBuaWwgdHJ1ZSJ9LGk9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiIjeyIsZW5kOiJ9IixrZXl3b3JkczpzfSxhPXtjbGFzc05hbWU6InRlbXBsYXRlLXZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOiJcXHtcXHsiLGVuZDoiXFx9XFx9In0se2JlZ2luOiJcXHslIixlbmQ6IiVcXH0ifV0sa2V5d29yZHM6c30sbD17Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsaV0sdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi8iLyxlbmQ6LyIvfSx7YmVnaW46L2AvLGVuZDovYC99LHtiZWdpbjoiJVtRd2ldP1xcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOnQoIlxcKCIsIlxcKSIpfSx7YmVnaW46IiVbUXdpXT9cXFsiLGVuZDoiXFxdIixjb250YWluczp0KCJcXFsiLCJcXF0iKX0se2JlZ2luOiIlW1F3aV0/eyIsZW5kOiJ9Iixjb250YWluczp0KCJ7IiwifSIpfSx7YmVnaW46IiVbUXdpXT88IixlbmQ6Ij4iLGNvbnRhaW5zOnQoIjwiLCI+Iil9LHtiZWdpbjoiJVtRd2ldP1xcfCIsZW5kOiJcXHwifSx7YmVnaW46Lzw8LVx3KyQvLGVuZDovXlxzKlx3KyQvfV0scmVsZXZhbmNlOjB9LHU9e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOiIlcVxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOnQoIlxcKCIsIlxcKSIpfSx7YmVnaW46IiVxXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6dCgiXFxbIiwiXFxdIil9LHtiZWdpbjoiJXF7IixlbmQ6In0iLGNvbnRhaW5zOnQoInsiLCJ9Iil9LHtiZWdpbjoiJXE8IixlbmQ6Ij4iLGNvbnRhaW5zOnQoIjwiLCI+Iil9LHtiZWdpbjoiJXFcXHwiLGVuZDoiXFx8In0se2JlZ2luOi88PC0nXHcrJyQvLGVuZDovXlxzKlx3KyQvfV0scmVsZXZhbmNlOjB9LGM9e2JlZ2luOiIoPyElfSkoIitlLlJFX1NUQVJURVJTX1JFKyJ8XFxufFxcYihjYXNlfGlmfHNlbGVjdHx1bmxlc3N8dW50aWx8d2hlbnx3aGlsZSlcXGIpXFxzKiIsa2V5d29yZHM6ImNhc2UgaWYgc2VsZWN0IHVubGVzcyB1bnRpbCB3aGVuIHdoaWxlIixjb250YWluczpbe2NsYXNzTmFtZToicmVnZXhwIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGldLHZhcmlhbnRzOlt7YmVnaW46Ii8vW2Etel0qIixyZWxldmFuY2U6MH0se2JlZ2luOiIvKD8hXFwvKSIsZW5kOiIvW2Etel0qIn1dfV0scmVsZXZhbmNlOjB9LGQ9e2NsYXNzTmFtZToicmVnZXhwIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGldLHZhcmlhbnRzOlt7YmVnaW46IiVyXFwoIixlbmQ6IlxcKSIsY29udGFpbnM6dCgiXFwoIiwiXFwpIil9LHtiZWdpbjoiJXJcXFsiLGVuZDoiXFxdIixjb250YWluczp0KCJcXFsiLCJcXF0iKX0se2JlZ2luOiIlcnsiLGVuZDoifSIsY29udGFpbnM6dCgieyIsIn0iKX0se2JlZ2luOiIlcjwiLGVuZDoiPiIsY29udGFpbnM6dCgiPCIsIj4iKX0se2JlZ2luOiIlclxcfCIsZW5kOiJcXHwifV0scmVsZXZhbmNlOjB9LF89e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkBcXFsiLGVuZDoiXFxdIixjb250YWluczpbZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToibWV0YS1zdHJpbmcifSldfSxwPVthLGwsdSxkLGMsXyxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBtb2R1bGUgc3RydWN0IixlbmQ6IiR8OyIsaWxsZWdhbDovPS8sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46b30pLHtiZWdpbjoiPCJ9XX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImxpYiBlbnVtIHVuaW9uIixlbmQ6IiR8OyIsaWxsZWdhbDovPS8sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46b30pXSxyZWxldmFuY2U6MTB9LHtiZWdpbktleXdvcmRzOiJhbm5vdGF0aW9uIixlbmQ6IiR8OyIsaWxsZWdhbDovPS8sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46b30pXSxyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJkZWYiLGVuZDovXEJcYi8sY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOnIsZW5kc1BhcmVudDohMH0pXX0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1biBtYWNybyIsZW5kOi9cQlxiLyxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46cixlbmRzUGFyZW50OiEwfSldLHJlbGV2YW5jZTo1fSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiKFxcIXxcXD8pPzoiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiI6Iixjb250YWluczpbbCx7YmVnaW46cn1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYjBiKFswMV9dKykiK259LHtiZWdpbjoiXFxiMG8oWzAtN19dKykiK259LHtiZWdpbjoiXFxiMHgoW0EtRmEtZjAtOV9dKykiK259LHtiZWdpbjoiXFxiKFsxLTldWzAtOV9dKlswLTldfFswLTldKShcXC5bMC05XVswLTlfXSopPyhbZUVdXypbLStdP1swLTlfXSopPyhfKmYoMzJ8NjQpKT8oPyFfKSJ9LHtiZWdpbjoiXFxiKFsxLTldWzAtOV9dKnwwKSIrbn1dLHJlbGV2YW5jZTowfV07cmV0dXJuIGkuY29udGFpbnM9cCxhLmNvbnRhaW5zPXAuc2xpY2UoMSkse2FsaWFzZXM6WyJjciJdLGxleGVtZXM6IlthLXpBLVpfXVxcdypbIT89XT8iLGtleXdvcmRzOnMsY29udGFpbnM6cH19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVudW0gZXZlbnQgZXhwbGljaXQgZXh0ZXJuIGZpbmFsbHkgZml4ZWQgZmxvYXQgZm9yIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnQgaW50ZXJmYWNlIGludGVybmFsIGlzIGxvY2sgbG9uZyBuYW1lb2Ygb2JqZWN0IG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdHJ5IHR5cGVvZiB1aW50IHVsb25nIHVuY2hlY2tlZCB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGFzeW5jIGF3YWl0IGJ5IGRlc2NlbmRpbmcgZHluYW1pYyBlcXVhbHMgZnJvbSBnZXQgZ2xvYmFsIGdyb3VwIGludG8gam9pbiBsZXQgb24gb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHZhbHVlIHZhciB3aGVyZSB5aWVsZCIsbGl0ZXJhbDoibnVsbCBmYWxzZSB0cnVlIn0sbj17Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwYlswMSddKykifSx7YmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHtiZWdpbjoiKC0/KShcXGIwW3hYXVthLWZBLUYwLTknXSt8KFxcYltcXGQnXSsoXFwuW1xcZCddKik/fFxcLltcXGQnXSspKFtlRV1bLStdP1tcXGQnXSspPykifV0scmVsZXZhbmNlOjB9LHI9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonQCInLGVuZDonIicsY29udGFpbnM6W3tiZWdpbjonIiInfV19LG89ZS5pbmhlcml0KHIse2lsbGVnYWw6L1xuL30pLHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJ7IixlbmQ6In0iLGtleXdvcmRzOnR9LGk9ZS5pbmhlcml0KHMse2lsbGVnYWw6L1xuL30pLGE9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCQiLyxlbmQ6JyInLGlsbGVnYWw6L1xuLyxjb250YWluczpbe2JlZ2luOiJ7eyJ9LHtiZWdpbjoifX0ifSxlLkJBQ0tTTEFTSF9FU0NBUEUsaV19LGw9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCRAIi8sZW5kOiciJyxjb250YWluczpbe2JlZ2luOiJ7eyJ9LHtiZWdpbjoifX0ifSx7YmVnaW46JyIiJ30sc119LHU9ZS5pbmhlcml0KGwse2lsbGVnYWw6L1xuLyxjb250YWluczpbe2JlZ2luOiJ7eyJ9LHtiZWdpbjoifX0ifSx7YmVnaW46JyIiJ30saV19KTtzLmNvbnRhaW5zPVtsLGEscixlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxuLGUuQ19CTE9DS19DT01NRU5UX01PREVdLGkuY29udGFpbnM9W3UsYSxvLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLG4sZS5pbmhlcml0KGUuQ19CTE9DS19DT01NRU5UX01PREUse2lsbGVnYWw6L1xuL30pXTt2YXIgYz17dmFyaWFudHM6W2wsYSxyLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFXX0sZD1lLklERU5UX1JFKyIoPCIrZS5JREVOVF9SRSsiKFxccyosXFxzKiIrZS5JREVOVF9SRSsiKSo+KT8oXFxbXFxdKT8iO3JldHVybnthbGlhc2VzOlsiY3NoYXJwIiwiYyMiXSxrZXl3b3Jkczp0LGlsbGVnYWw6Lzo6Lyxjb250YWluczpbZS5DT01NRU5UKCIvLy8iLCIkIix7cmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsdmFyaWFudHM6W3tiZWdpbjoiLy8vIixyZWxldmFuY2U6MH0se2JlZ2luOiJceDNjIS0tfC0tXHgzZSJ9LHtiZWdpbjoiPC8/IixlbmQ6Ij4ifV19XX0pLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQiLGtleXdvcmRzOnsibWV0YS1rZXl3b3JkIjoiaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcmVnaW9uIGVuZHJlZ2lvbiBwcmFnbWEgY2hlY2tzdW0ifX0sYyxuLHtiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDovW3s7PV0vLGlsbGVnYWw6L1teXHM6LF0vLGNvbnRhaW5zOltlLlRJVExFX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSx7YmVnaW5LZXl3b3JkczoibmFtZXNwYWNlIixlbmQ6L1t7Oz1dLyxpbGxlZ2FsOi9bXlxzOl0vLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiW2EtekEtWl0oXFwuP1xcdykqIn0pLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il5cXHMqXFxbIixleGNsdWRlQmVnaW46ITAsZW5kOiJcXF0iLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEtc3RyaW5nIixiZWdpbjovIi8sZW5kOi8iL31dfSx7YmVnaW5LZXl3b3JkczoibmV3IHJldHVybiB0aHJvdyBhd2FpdCBlbHNlIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoIitkKyJcXHMrKSsiK2UuSURFTlRfUkUrIlxccypcXCgiLHJldHVybkJlZ2luOiEwLGVuZDovXHMqW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6dCxjb250YWluczpbe2JlZ2luOmUuSURFTlRfUkUrIlxccypcXCgiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltlLlRJVExFX01PREVdLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6dCxyZWxldmFuY2U6MCxjb250YWluczpbYyxuLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NwLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMSxsZXhlbWVzOiJbYS16QS1aXVthLXpBLVowLTlfLV0qIixrZXl3b3Jkczp7a2V5d29yZDoiYmFzZS11cmkgY2hpbGQtc3JjIGNvbm5lY3Qtc3JjIGRlZmF1bHQtc3JjIGZvbnQtc3JjIGZvcm0tYWN0aW9uIGZyYW1lLWFuY2VzdG9ycyBmcmFtZS1zcmMgaW1nLXNyYyBtZWRpYS1zcmMgb2JqZWN0LXNyYyBwbHVnaW4tdHlwZXMgcmVwb3J0LXVyaSBzYW5kYm94IHNjcmlwdC1zcmMgc3R5bGUtc3JjIn0sY29udGFpbnM6W3tjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyJ9LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46Il5Db250ZW50IixlbmQ6IjoiLGV4Y2x1ZGVFbmQ6ITB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17YmVnaW46L1tBLVpcX1wuXC1dK1xzKjovLHJldHVybkJlZ2luOiEwLGVuZDoiOyIsZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46L1xTLyxlbmQ6IjoiLGV4Y2x1ZGVFbmQ6ITAsc3RhcnRzOntlbmRzV2l0aFBhcmVudDohMCxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7YmVnaW46L1tcdy1dK1woLyxyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOi9bXHctXSsvfSx7YmVnaW46L1woLyxlbmQ6L1wpLyxjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfV19LGUuQ1NTX05VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiI1swLTlBLUZhLWZdKyJ9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In1dfX1dfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9bPVwvfCdcJF0vLGNvbnRhaW5zOltlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InNlbGVjdG9yLWlkIixiZWdpbjovI1tBLVphLXowLTlfLV0rL30se2NsYXNzTmFtZToic2VsZWN0b3ItY2xhc3MiLGJlZ2luOi9cLltBLVphLXowLTlfLV0rL30se2NsYXNzTmFtZToic2VsZWN0b3ItYXR0ciIsYmVnaW46L1xbLyxlbmQ6L1xdLyxpbGxlZ2FsOiIkIn0se2NsYXNzTmFtZToic2VsZWN0b3ItcHNldWRvIixiZWdpbjovOig6KT9bYS16QS1aMC05XF9cLVwrXChcKSInLl0rL30se2JlZ2luOiJAKGZvbnQtZmFjZXxwYWdlKSIsbGV4ZW1lczoiW2Etei1dKyIsa2V5d29yZHM6ImZvbnQtZmFjZSBwYWdlIn0se2JlZ2luOiJAIixlbmQ6Ilt7O10iLGlsbGVnYWw6LzovLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjovXHcrL30se2JlZ2luOi9ccy8sZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MCxjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DU1NfTlVNQkVSX01PREVdfV19LHtjbGFzc05hbWU6InNlbGVjdG9yLXRhZyIsYmVnaW46IlthLXpBLVotXVthLXpBLVowLTlfLV0qIixyZWxldmFuY2U6MH0se2JlZ2luOiJ7IixlbmQ6In0iLGlsbGVnYWw6L1xTLyxjb250YWluczpbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx0XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17a2V5d29yZDoiYWJzdHJhY3QgYWxpYXMgYWxpZ24gYXNtIGFzc2VydCBhdXRvIGJvZHkgYnJlYWsgYnl0ZSBjYXNlIGNhc3QgY2F0Y2ggY2xhc3MgY29uc3QgY29udGludWUgZGVidWcgZGVmYXVsdCBkZWxldGUgZGVwcmVjYXRlZCBkbyBlbHNlIGVudW0gZXhwb3J0IGV4dGVybiBmaW5hbCBmaW5hbGx5IGZvciBmb3JlYWNoIGZvcmVhY2hfcmV2ZXJzZXwxMCBnb3RvIGlmIGltbXV0YWJsZSBpbXBvcnQgaW4gaW5vdXQgaW50IGludGVyZmFjZSBpbnZhcmlhbnQgaXMgbGF6eSBtYWNybyBtaXhpbiBtb2R1bGUgbmV3IG5vdGhyb3cgb3V0IG92ZXJyaWRlIHBhY2thZ2UgcHJhZ21hIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBwdXJlIHJlZiByZXR1cm4gc2NvcGUgc2hhcmVkIHN0YXRpYyBzdHJ1Y3Qgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0ZW1wbGF0ZSB0aGlzIHRocm93IHRyeSB0eXBlZGVmIHR5cGVpZCB0eXBlb2YgdW5pb24gdW5pdHRlc3QgdmVyc2lvbiB2b2lkIHZvbGF0aWxlIHdoaWxlIHdpdGggX19GSUxFX18gX19MSU5FX18gX19nc2hhcmVkfDEwIF9fdGhyZWFkIF9fdHJhaXRzIF9fREFURV9fIF9fRU9GX18gX19USU1FX18gX19USU1FU1RBTVBfXyBfX1ZFTkRPUl9fIF9fVkVSU0lPTl9fIixidWlsdF9pbjoiYm9vbCBjZG91YmxlIGNlbnQgY2Zsb2F0IGNoYXIgY3JlYWwgZGNoYXIgZGVsZWdhdGUgZG91YmxlIGRzdHJpbmcgZmxvYXQgZnVuY3Rpb24gaWRvdWJsZSBpZmxvYXQgaXJlYWwgbG9uZyByZWFsIHNob3J0IHN0cmluZyB1Ynl0ZSB1Y2VudCB1aW50IHVsb25nIHVzaG9ydCB3Y2hhciB3c3RyaW5nIixsaXRlcmFsOiJmYWxzZSBudWxsIHRydWUifSxuPSIoKDB8WzEtOV1bXFxkX10qKXwwW2JCXVswMV9dK3wwW3hYXShbXFxkYS1mQS1GXVtcXGRhLWZBLUZfXSp8X1tcXGRhLWZBLUZdW1xcZGEtZkEtRl9dKikpIixyPSJcXFxcKFsnXCJcXD9cXFxcYWJmbnJ0dl18dVtcXGRBLUZhLWZdezR9fFswLTddezEsM318eFtcXGRBLUZhLWZdezJ9fFVbXFxkQS1GYS1mXXs4fSl8JlthLXpBLVpcXGRdezIsfTsiLG89e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiIituKyIoTHx1fFV8THV8TFV8dUx8VUwpPyIscmVsZXZhbmNlOjB9LHM9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKCgoMFt4WF0oKFtcXGRhLWZBLUZdW1xcZGEtZkEtRl9dKnxfW1xcZGEtZkEtRl1bXFxkYS1mQS1GX10qKVxcLihbXFxkYS1mQS1GXVtcXGRhLWZBLUZfXSp8X1tcXGRhLWZBLUZdW1xcZGEtZkEtRl9dKil8XFwuPyhbXFxkYS1mQS1GXVtcXGRhLWZBLUZfXSp8X1tcXGRhLWZBLUZdW1xcZGEtZkEtRl9dKikpW3BQXVsrLV0/KDB8WzEtOV1bXFxkX10qfFxcZFtcXGRfXSp8W1xcZF9dKz9cXGQpKXwoKDB8WzEtOV1bXFxkX10qfFxcZFtcXGRfXSp8W1xcZF9dKz9cXGQpKFxcLlxcZCp8KFtlRV1bKy1dPygwfFsxLTldW1xcZF9dKnxcXGRbXFxkX10qfFtcXGRfXSs/XFxkKSkpfFxcZCtcXC4oMHxbMS05XVtcXGRfXSp8XFxkW1xcZF9dKnxbXFxkX10rP1xcZCkoMHxbMS05XVtcXGRfXSp8XFxkW1xcZF9dKnxbXFxkX10rP1xcZCl8XFwuKDB8WzEtOV1bXFxkX10qKShbZUVdWystXT8oMHxbMS05XVtcXGRfXSp8XFxkW1xcZF9dKnxbXFxkX10rP1xcZCkpPykpKFtmRl18THxpfFtmRl1pfExpKT98IituKyIoaXxbZkZdaXxMaSkpIixyZWxldmFuY2U6MH0saT17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInKCIrcisifC4pIixlbmQ6IiciLGlsbGVnYWw6Ii4ifSxhPXtiZWdpbjpyLHJlbGV2YW5jZTowfSxsPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGNvbnRhaW5zOlthXSxlbmQ6JyJbY3dkXT8nfSx1PXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46J1tycV0iJyxlbmQ6JyJbY3dkXT8nLHJlbGV2YW5jZTo1fSxjPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46ImAiLGVuZDoiYFtjd2RdPyJ9LGQ9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoneCJbXFxkYS1mQS1GXFxzXFxuXFxyXSoiW2N3ZF0/JyxyZWxldmFuY2U6MTB9LF89e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoncSJcXHsnLGVuZDonXFx9Iid9LHA9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4jISIsZW5kOiIkIixyZWxldmFuY2U6NX0sZj17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIyhsaW5lKSIsZW5kOiIkIixyZWxldmFuY2U6NX0sbT17Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiQFthLXpBLVpfXVthLXpBLVpfXFxkXSoifSxoPWUuQ09NTUVOVCgiXFwvXFwrIiwiXFwrXFwvIix7Y29udGFpbnM6WyJzZWxmIl0scmVsZXZhbmNlOjEwfSk7cmV0dXJue2xleGVtZXM6ZS5VTkRFUlNDT1JFX0lERU5UX1JFLGtleXdvcmRzOnQsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGgsZCxsLHUsYyxfLHMsbyxpLHAsZixtXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZGFydC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToic3Vic3QiLHZhcmlhbnRzOlt7YmVnaW46IlxcJFtBLVphLXowLTlfXSsifV19LG49e2NsYXNzTmFtZToic3Vic3QiLHZhcmlhbnRzOlt7YmVnaW46IlxcJHsiLGVuZDoifSJ9XSxrZXl3b3JkczoidHJ1ZSBmYWxzZSBudWxsIHRoaXMgaXMgbmV3IHN1cGVyIn0scj17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46InInJyciLGVuZDoiJycnIn0se2JlZ2luOidyIiIiJyxlbmQ6JyIiIid9LHtiZWdpbjoiciciLGVuZDoiJyIsaWxsZWdhbDoiXFxuIn0se2JlZ2luOidyIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4ifSx7YmVnaW46IicnJyIsZW5kOiInJyciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdCxuXX0se2JlZ2luOiciIiInLGVuZDonIiIiJyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHQsbl19LHtiZWdpbjoiJyIsZW5kOiInIixpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdCxuXX0se2JlZ2luOiciJyxlbmQ6JyInLGlsbGVnYWw6IlxcbiIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx0LG5dfV19O3JldHVybiBuLmNvbnRhaW5zPVtlLkNfTlVNQkVSX01PREUscl0se2tleXdvcmRzOntrZXl3b3JkOiJhc3NlcnQgYXN5bmMgYXdhaXQgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGVsc2UgZW51bSBleHRlbmRzIGZhbHNlIGZpbmFsIGZpbmFsbHkgZm9yIGlmIGluIGlzIG5ldyBudWxsIHJldGhyb3cgcmV0dXJuIHN1cGVyIHN3aXRjaCBzeW5jIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCBhYnN0cmFjdCBhcyBkeW5hbWljIGV4cG9ydCBleHRlcm5hbCBmYWN0b3J5IGdldCBpbXBsZW1lbnRzIGltcG9ydCBsaWJyYXJ5IG9wZXJhdG9yIHBhcnQgc2V0IHN0YXRpYyB0eXBlZGVmIixidWlsdF9pbjoicHJpbnQgQ29tcGFyYWJsZSBEYXRlVGltZSBEdXJhdGlvbiBGdW5jdGlvbiBJdGVyYWJsZSBJdGVyYXRvciBMaXN0IE1hcCBNYXRjaCBOdWxsIE9iamVjdCBQYXR0ZXJuIFJlZ0V4cCBTZXQgU3RvcHdhdGNoIFN0cmluZyBTdHJpbmdCdWZmZXIgU3RyaW5nU2luayBTeW1ib2wgVHlwZSBVcmkgYm9vbCBkb3VibGUgaW50IG51bSBkb2N1bWVudCB3aW5kb3cgcXVlcnlTZWxlY3RvciBxdWVyeVNlbGVjdG9yQWxsIEVsZW1lbnQgRWxlbWVudExpc3QifSxjb250YWluczpbcixlLkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7c3ViTGFuZ3VhZ2U6Im1hcmtkb3duIn0pLGUuQ09NTUVOVCgiLy8vIiwiJCIse3N1Ykxhbmd1YWdlOiJtYXJrZG93biJ9KSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixlbmQ6InsiLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LGUuQ19OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQFtBLVphLXpdKyJ9LHtiZWdpbjoiPT4ifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RlbHBoaS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ImV4cG9ydHMgcmVnaXN0ZXIgZmlsZSBzaGwgYXJyYXkgcmVjb3JkIHByb3BlcnR5IGZvciBtb2Qgd2hpbGUgc2V0IGFsbHkgbGFiZWwgdXNlcyByYWlzZSBub3Qgc3RvcmVkIGNsYXNzIHNhZmVjYWxsIHZhciBpbnRlcmZhY2Ugb3IgcHJpdmF0ZSBzdGF0aWMgZXhpdCBpbmRleCBpbmhlcml0ZWQgdG8gZWxzZSBzdGRjYWxsIG92ZXJyaWRlIHNociBhc20gZmFyIHJlc291cmNlc3RyaW5nIGZpbmFsaXphdGlvbiBwYWNrZWQgdmlydHVhbCBvdXQgYW5kIHByb3RlY3RlZCBsaWJyYXJ5IGRvIHhvcndyaXRlIGdvdG8gbmVhciBmdW5jdGlvbiBlbmQgZGl2IG92ZXJsb2FkIG9iamVjdCB1bml0IGJlZ2luIHN0cmluZyBvbiBpbmxpbmUgcmVwZWF0IHVudGlsIGRlc3RydWN0b3Igd3JpdGUgbWVzc2FnZSBwcm9ncmFtIHdpdGggcmVhZCBpbml0aWFsaXphdGlvbiBleGNlcHQgZGVmYXVsdCBuaWwgaWYgY2FzZSBjZGVjbCBpbiBkb3dudG8gdGhyZWFkdmFyIG9mIHRyeSBwYXNjYWwgY29uc3QgZXh0ZXJuYWwgY29uc3RydWN0b3IgdHlwZSBwdWJsaWMgdGhlbiBpbXBsZW1lbnRhdGlvbiBmaW5hbGx5IHB1Ymxpc2hlZCBwcm9jZWR1cmUgYWJzb2x1dGUgcmVpbnRyb2R1Y2Ugb3BlcmF0b3IgYXMgaXMgYWJzdHJhY3QgYWxpYXMgYXNzZW1ibGVyIGJpdHBhY2tlZCBicmVhayBjb250aW51ZSBjcHBkZWNsIGN2YXIgZW51bWVyYXRvciBleHBlcmltZW50YWwgcGxhdGZvcm0gZGVwcmVjYXRlZCB1bmltcGxlbWVudGVkIGR5bmFtaWMgZXhwb3J0IGZhcjE2IGZvcndhcmQgZ2VuZXJpYyBoZWxwZXIgaW1wbGVtZW50cyBpbnRlcnJ1cHQgaW9jaGVja3MgbG9jYWwgbmFtZSBub2RlZmF1bHQgbm9yZXR1cm4gbm9zdGFja2ZyYW1lIG9sZGZwY2NhbGwgb3RoZXJ3aXNlIHNhdmVyZWdpc3RlcnMgc29mdGZsb2F0IHNwZWNpYWxpemUgc3RyaWN0IHVuYWxpZ25lZCB2YXJhcmdzICIsbj1bZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgvXHsvLC9cfS8se3JlbGV2YW5jZTowfSksZS5DT01NRU5UKC9cKFwqLywvXCpcKS8se3JlbGV2YW5jZToxMH0pXSxyPXtjbGFzc05hbWU6Im1ldGEiLHZhcmlhbnRzOlt7YmVnaW46L1x7XCQvLGVuZDovXH0vfSx7YmVnaW46L1woXCpcJC8sZW5kOi9cKlwpL31dfSxvPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W3tiZWdpbjovJycvfV19LHM9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovKCNcZCspKy99LGk9e2JlZ2luOmUuSURFTlRfUkUrIlxccyo9XFxzKmNsYXNzXFxzKlxcKCIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2UuVElUTEVfTU9ERV19LGE9e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmN0aW9uIGNvbnN0cnVjdG9yIGRlc3RydWN0b3IgcHJvY2VkdXJlIixlbmQ6L1s6O10vLGtleXdvcmRzOiJmdW5jdGlvbiBjb25zdHJ1Y3RvcnwxMCBkZXN0cnVjdG9yfDEwIHByb2NlZHVyZXwxMCIsY29udGFpbnM6W2UuVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dCxjb250YWluczpbbyxzLHJdLmNvbmNhdChuKX0scl0uY29uY2F0KG4pfTtyZXR1cm57YWxpYXNlczpbImRwciIsImRmbSIsInBhcyIsInBhc2NhbCIsImZyZWVwYXNjYWwiLCJsYXphcnVzIiwibHByIiwibGZtIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3Jkczp0LGlsbGVnYWw6LyJ8XCRbRy1aZy16XXxcL1wqfDxcL3xcfC8sY29udGFpbnM6W28scyxlLk5VTUJFUl9NT0RFLGksYSxyXS5jb25jYXQobil9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RpZmYuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsicGF0Y2giXSxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIscmVsZXZhbmNlOjEwLHZhcmlhbnRzOlt7YmVnaW46L15AQCArXC1cZCssXGQrICtcK1xkKyxcZCsgK0BAJC99LHtiZWdpbjovXlwqXCpcKiArXGQrLFxkKyArXCpcKlwqXCokL30se2JlZ2luOi9eXC1cLVwtICtcZCssXGQrICtcLVwtXC1cLSQvfV19LHtjbGFzc05hbWU6ImNvbW1lbnQiLHZhcmlhbnRzOlt7YmVnaW46L0luZGV4OiAvLGVuZDovJC99LHtiZWdpbjovPXszLH0vLGVuZDovJC99LHtiZWdpbjovXlwtezN9LyxlbmQ6LyQvfSx7YmVnaW46L15cKnszfSAvLGVuZDovJC99LHtiZWdpbjovXlwrezN9LyxlbmQ6LyQvfSx7YmVnaW46L1wqezV9LyxlbmQ6L1wqezV9JC99XX0se2NsYXNzTmFtZToiYWRkaXRpb24iLGJlZ2luOiJeXFwrIixlbmQ6IiQifSx7Y2xhc3NOYW1lOiJkZWxldGlvbiIsYmVnaW46Il5cXC0iLGVuZDoiJCJ9LHtjbGFzc05hbWU6ImFkZGl0aW9uIixiZWdpbjoiXlxcISIsZW5kOiIkIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kamFuZ28uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtiZWdpbjovXHxbQS1aYS16XSs6Py8sa2V5d29yZHM6e25hbWU6InRydW5jYXRld29yZHMgcmVtb3ZldGFncyBsaW5lYnJlYWtzYnIgeWVzbm8gZ2V0X2RpZ2l0IHRpbWVzaW5jZSByYW5kb20gc3RyaXB0YWdzIGZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzIHRpdGxlIGZsb2F0Zm9ybWF0IGNhcGZpcnN0IHBwcmludCBkaXZpc2libGVieSBhZGQgbWFrZV9saXN0IHVub3JkZXJlZF9saXN0IHVybGVuY29kZSB0aW1ldW50aWwgdXJsaXpldHJ1bmMgd29yZGNvdW50IHN0cmluZ2Zvcm1hdCBsaW5lbnVtYmVycyBzbGljZSBkYXRlIGRpY3Rzb3J0IGRpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0IHRydW5jYXRld29yZHNfaHRtbCB1cHBlciBsZW5ndGggcGhvbmUybnVtZXJpYyB3b3Jkd3JhcCB0aW1lIGFkZHNsYXNoZXMgc2x1Z2lmeSBmaXJzdCBlc2NhcGVqcyBmb3JjZV9lc2NhcGUgaXJpZW5jb2RlIGxhc3Qgc2FmZSBzYWZlc2VxIHRydW5jYXRlY2hhcnMgbG9jYWxpemUgdW5sb2NhbGl6ZSBsb2NhbHRpbWUgdXRjIHRpbWV6b25lIn0sY29udGFpbnM6W2UuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFXX07cmV0dXJue2FsaWFzZXM6WyJqaW5qYSJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W2UuQ09NTUVOVCgvXHslXHMqY29tbWVudFxzKiV9LywvXHslXHMqZW5kY29tbWVudFxzKiV9LyksZS5DT01NRU5UKC9ceyMvLC8jfS8pLHtjbGFzc05hbWU6InRlbXBsYXRlLXRhZyIsYmVnaW46L1x7JS8sZW5kOi8lfS8sY29udGFpbnM6W3tjbGFzc05hbWU6Im5hbWUiLGJlZ2luOi9cdysvLGtleXdvcmRzOntuYW1lOiJjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yIGVuZGZvciBpZm5vdGVxdWFsIGVuZGlmbm90ZXF1YWwgd2lkdGhyYXRpbyBleHRlbmRzIGluY2x1ZGUgc3BhY2VsZXNzIGVuZHNwYWNlbGVzcyByZWdyb3VwIGlmZXF1YWwgZW5kaWZlcXVhbCBzc2kgbm93IHdpdGggY3ljbGUgdXJsIGZpbHRlciBlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmIGVuZHdpdGggc3RhdGljIHRyYW5zIGJsb2NrdHJhbnMgZW5kYmxvY2t0cmFucyBnZXRfc3RhdGljX3ByZWZpeCBnZXRfbWVkaWFfcHJlZml4IHBsdXJhbCBnZXRfY3VycmVudF9sYW5ndWFnZSBsYW5ndWFnZSBnZXRfYXZhaWxhYmxlX2xhbmd1YWdlcyBnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgZW5kbG9jYWxpemUgbG9jYWx0aW1lIGVuZGxvY2FsdGltZSB0aW1lem9uZSBlbmR0aW1lem9uZSBnZXRfY3VycmVudF90aW1lem9uZSB2ZXJiYXRpbSJ9LHN0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6ImluIGJ5IGFzIixjb250YWluczpbdF0scmVsZXZhbmNlOjB9fV19LHtjbGFzc05hbWU6InRlbXBsYXRlLXZhcmlhYmxlIixiZWdpbjovXHtcey8sZW5kOi99fS8sY29udGFpbnM6W3RdfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Rucy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJiaW5kIiwiem9uZSJdLGtleXdvcmRzOntrZXl3b3JkOiJJTiBBIEFBQUEgQUZTREIgQVBMIENBQSBDRE5TS0VZIENEUyBDRVJUIENOQU1FIERIQ0lEIERMViBETkFNRSBETlNLRVkgRFMgSElQIElQU0VDS0VZIEtFWSBLWCBMT0MgTVggTkFQVFIgTlMgTlNFQyBOU0VDMyBOU0VDM1BBUkFNIFBUUiBSUlNJRyBSUCBTSUcgU09BIFNSViBTU0hGUCBUQSBUS0VZIFRMU0EgVFNJRyBUWFQifSxjb250YWluczpbZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSkse2NsYXNzTmFtZToibWV0YSIsYmVnaW46L15cJChUVEx8R0VORVJBVEV8SU5DTFVERXxPUklHSU4pXGIvfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSlcXGIifSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKS4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxiIn0sZS5pbmhlcml0KGUuTlVNQkVSX01PREUse2JlZ2luOi9cYlxkK1tkaHdtXT8vfSldfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb2NrZXJmaWxlLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbImRvY2tlciJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6ImZyb20gbWFpbnRhaW5lciBleHBvc2UgZW52IGFyZyB1c2VyIG9uYnVpbGQgc3RvcHNpZ25hbCIsY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5OVU1CRVJfTU9ERSx7YmVnaW5LZXl3b3JkczoicnVuIGNtZCBlbnRyeXBvaW50IHZvbHVtZSBhZGQgY29weSB3b3JrZGlyIGxhYmVsIGhlYWx0aGNoZWNrIHNoZWxsIixzdGFydHM6e2VuZDovW15cXF0kLyxzdWJMYW5ndWFnZToiYmFzaCJ9fV0saWxsZWdhbDoiPC8ifX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb3MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuQ09NTUVOVCgvXlxzKkA/cmVtXGIvLC8kLyx7cmVsZXZhbmNlOjEwfSk7cmV0dXJue2FsaWFzZXM6WyJiYXQiLCJjbWQiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGlsbGVnYWw6L1wvXCovLGtleXdvcmRzOntrZXl3b3JkOiJpZiBlbHNlIGdvdG8gZm9yIGluIGRvIGNhbGwgZXhpdCBub3QgZXhpc3QgZXJyb3JsZXZlbCBkZWZpbmVkIGVxdSBuZXEgbHNzIGxlcSBndHIgZ2VxIixidWlsdF9pbjoicHJuIG51bCBscHQzIGxwdDIgbHB0MSBjb24gY29tNCBjb20zIGNvbTIgY29tMSBhdXggc2hpZnQgY2QgZGlyIGVjaG8gc2V0bG9jYWwgZW5kbG9jYWwgc2V0IHBhdXNlIGNvcHkgYXBwZW5kIGFzc29jIGF0IGF0dHJpYiBicmVhayBjYWNscyBjZCBjaGNwIGNoZGlyIGNoa2RzayBjaGtudGZzIGNscyBjbWQgY29sb3IgY29tcCBjb21wYWN0IGNvbnZlcnQgZGF0ZSBkaXIgZGlza2NvbXAgZGlza2NvcHkgZG9za2V5IGVyYXNlIGZzIGZpbmQgZmluZHN0ciBmb3JtYXQgZnR5cGUgZ3JhZnRhYmwgaGVscCBrZXliIGxhYmVsIG1kIG1rZGlyIG1vZGUgbW9yZSBtb3ZlIHBhdGggcGF1c2UgcHJpbnQgcG9wZCBwdXNoZCBwcm9tdCByZCByZWNvdmVyIHJlbSByZW5hbWUgcmVwbGFjZSByZXN0b3JlIHJtZGlyIHNoaWZ0c29ydCBzdGFydCBzdWJzdCB0aW1lIHRpdGxlIHRyZWUgdHlwZSB2ZXIgdmVyaWZ5IHZvbCBwaW5nIG5ldCBpcGNvbmZpZyB0YXNra2lsbCB4Y29weSByZW4gZGVsIn0sY29udGFpbnM6W3tjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovJSVbXiBdfCVbXiBdKz8lfCFbXiBdKz8hL30se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOntjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46Il5cXHMqW0EtWmEtei5fP11bQS1aYS16MC05XyQjQH4uP10qKDp8XFxzK2xhYmVsKSIscmVsZXZhbmNlOjB9LmJlZ2luLGVuZDoiZ290bzplb2YiLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiKFtfYS16QS1aXVxcdypcXC4pKihbX2EtekEtWl1cXHcqOik/W19hLXpBLVpdXFx3KiJ9KSx0XX0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiXFxkKyIscmVsZXZhbmNlOjB9LHRdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kc2NvbmZpZy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOiJkc2NvbmZpZyIsY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJeZHNjb25maWciLGVuZDoiXFxzIixleGNsdWRlRW5kOiEwLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOiIobGlzdHxjcmVhdGV8Z2V0fHNldHxkZWxldGUpLShcXHcrKSIsZW5kOiJcXHMiLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiIUAjJCVeJiooKSIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46Ii0tKFxcdyspIixlbmQ6IlxccyIsZXhjbHVkZUVuZDohMH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovIi8sZW5kOi8iL30se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJy8sZW5kOi8nL30se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiW1xcdy0/XSs6XFx3KyIsZW5kOiJcXFciLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJcXHcrLT9cXHcrIixlbmQ6IlxcVyIscmVsZXZhbmNlOjB9LGUuSEFTSF9DT01NRU5UX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kdHMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W2UuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtiZWdpbjonKCh1OD98VSl8TCk/Iid9KSx7YmVnaW46Jyh1OD98VSk/UiInLGVuZDonIicsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjoiJ1xcXFw/LiIsZW5kOiInIixpbGxlZ2FsOiIuIn1dfSxuPXtjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKSJ9LHtiZWdpbjplLkNfTlVNQkVSX1JFfV0scmVsZXZhbmNlOjB9LHI9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMiLGVuZDoiJCIsa2V5d29yZHM6eyJtZXRhLWtleXdvcmQiOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIGlmZGVmIGlmbmRlZiJ9LGNvbnRhaW5zOlt7YmVnaW46L1xcXG4vLHJlbGV2YW5jZTowfSx7YmVnaW5LZXl3b3JkczoiaW5jbHVkZSIsZW5kOiIkIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImluY2x1ZGUifSxjb250YWluczpbZS5pbmhlcml0KHQse2NsYXNzTmFtZToibWV0YS1zdHJpbmcifSkse2NsYXNzTmFtZToibWV0YS1zdHJpbmciLGJlZ2luOiI8IixlbmQ6Ij4iLGlsbGVnYWw6IlxcbiJ9XX0sdCxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LG89e2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiJcXCZbYS16XFxkX10qXFxiIn0scz17Y2xhc3NOYW1lOiJtZXRhLWtleXdvcmQiLGJlZ2luOiIvW2Etel1bYS16XFxkLV0qLyJ9LGk9e2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiXlxccypbYS16QS1aX11bYS16QS1aXFxkX10qOiJ9LGE9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiPCIsZW5kOiI+Iixjb250YWluczpbbixvXX0sbD17Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW46L1thLXpBLVpfXVthLXpBLVpcZF9AXSpcc3svLGVuZDovW3s7PV0vLHJldHVybkJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9O3JldHVybntrZXl3b3JkczoiIixjb250YWluczpbe2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiIvXFxzKnsiLGVuZDoifTsiLHJlbGV2YW5jZToxMCxjb250YWluczpbbyxzLGksbCxhLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4sdF19LG8scyxpLGwsYSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxuLHQscix7YmVnaW46ZS5JREVOVF9SRSsiOjoiLGtleXdvcmRzOiIifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R1c3QuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsiZHN0Il0sY2FzZV9pbnNlbnNpdGl2ZTohMCxzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2NsYXNzTmFtZToidGVtcGxhdGUtdGFnIixiZWdpbjovXHtbI1wvXS8sZW5kOi9cfS8saWxsZWdhbDovOy8sY29udGFpbnM6W3tjbGFzc05hbWU6Im5hbWUiLGJlZ2luOi9bYS16QS1aXC4tXSsvLHN0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W2UuUVVPVEVfU1RSSU5HX01PREVdfX1dfSx7Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS12YXJpYWJsZSIsYmVnaW46L1x7LyxlbmQ6L1x9LyxpbGxlZ2FsOi87LyxrZXl3b3JkczoiaWYgZXEgbmUgbHQgbHRlIGd0IGd0ZSBzZWxlY3QgZGVmYXVsdCBtYXRoIHNlcCJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWJuZi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5DT01NRU5UKC9cKFwqLywvXCpcKS8pO3JldHVybntpbGxlZ2FsOi9cUy8sY29udGFpbnM6W3Qse2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjovXlsgXSpbYS16QS1aXVthLXpBLVotXSooW1xzLV0rW2EtekEtWl1bYS16QS1aXSopKi99LHtiZWdpbjovPS8sZW5kOi87Lyxjb250YWluczpbdCx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovXD8uKlw/L30sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsaXhpci5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IlthLXpBLVpfXVthLXpBLVowLTlfLl0qKFxcIXxcXD8pPyIsbj0iYW5kIGZhbHNlIHRoZW4gZGVmaW5lZCBtb2R1bGUgaW4gcmV0dXJuIHJlZG8gcmV0cnkgZW5kIGZvciB0cnVlIHNlbGYgd2hlbiBuZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBuaWwgYnJlYWsgbm90IGNhc2UgY29uZCBhbGlhcyB3aGlsZSBlbnN1cmUgb3IgaW5jbHVkZSB1c2UgYWxpYXMgZm4gcXVvdGUgcmVxdWlyZSBpbXBvcnQgd2l0aHwwIixyPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiI1xceyIsZW5kOiJ9IixsZXhlbWVzOnQsa2V5d29yZHM6bn0sbz17Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscl0sdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi8iLyxlbmQ6LyIvfV19LHM9e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImRlZiBkZWZwIGRlZm1hY3JvIixlbmQ6L1xCXGIvLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjp0LGVuZHNQYXJlbnQ6ITB9KV19LGk9ZS5pbmhlcml0KHMse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImRlZmltcGwgZGVmbW9kdWxlIGRlZnByb3RvY29sIGRlZnJlY29yZCIsZW5kOi9cYmRvXGJ8JHw7L30pLGE9W28sZS5IQVNIX0NPTU1FTlRfTU9ERSxpLHMse2JlZ2luOiI6OiJ9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IjooPyFbXFxzOl0pIixjb250YWluczpbbyx7YmVnaW46IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8ifV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46dCsiOig/ITopIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2JlZ2luOiItPiJ9LHtiZWdpbjoiKCIrZS5SRV9TVEFSVEVSU19SRSsiKVxccyoiLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InJlZ2V4cCIsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHJdLHZhcmlhbnRzOlt7YmVnaW46Ii8iLGVuZDoiL1thLXpdKiJ9LHtiZWdpbjoiJXJcXFsiLGVuZDoiXFxdW2Etel0qIn1dfV0scmVsZXZhbmNlOjB9XTtyZXR1cm4gci5jb250YWlucz1hLHtsZXhlbWVzOnQsa2V5d29yZHM6bixjb250YWluczphfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lbG0uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt2YXJpYW50czpbZS5DT01NRU5UKCItLSIsIiQiKSxlLkNPTU1FTlQoInstIiwiLX0iLHtjb250YWluczpbInNlbGYiXX0pXX0sbj17Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3J10qIixyZWxldmFuY2U6MH0scj17YmVnaW46IlxcKCIsZW5kOiJcXCkiLGlsbGVnYWw6JyInLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3XSooXFwoKFxcLlxcLnwsfFxcdyspXFwpKT8ifSx0XX0sbz17YmVnaW46InsiLGVuZDoifSIsY29udGFpbnM6ci5jb250YWluc30scz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInXFxcXD8uIixlbmQ6IiciLGlsbGVnYWw6Ii4ifTtyZXR1cm57a2V5d29yZHM6ImxldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBtb2R1bGUgaW1wb3J0IGV4cG9zaW5nIHR5cGUgYWxpYXMgYXMgaW5maXggaW5maXhsIGluZml4ciBwb3J0IGVmZmVjdCBjb21tYW5kIHN1YnNjcmlwdGlvbiIsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJwb3J0IGVmZmVjdCBtb2R1bGUiLGVuZDoiZXhwb3NpbmciLGtleXdvcmRzOiJwb3J0IGVmZmVjdCBtb2R1bGUgd2hlcmUgY29tbWFuZCBzdWJzY3JpcHRpb24gZXhwb3NpbmciLGNvbnRhaW5zOltyLHRdLGlsbGVnYWw6IlxcV1xcLnw7In0se2JlZ2luOiJpbXBvcnQiLGVuZDoiJCIsa2V5d29yZHM6ImltcG9ydCBhcyBleHBvc2luZyIsY29udGFpbnM6W3IsdF0saWxsZWdhbDoiXFxXXFwufDsifSx7YmVnaW46InR5cGUiLGVuZDoiJCIsa2V5d29yZHM6InR5cGUgYWxpYXMiLGNvbnRhaW5zOltuLHIsbyx0XX0se2JlZ2luS2V5d29yZHM6ImluZml4IGluZml4bCBpbmZpeHIiLGVuZDoiJCIsY29udGFpbnM6W2UuQ19OVU1CRVJfTU9ERSx0XX0se2JlZ2luOiJwb3J0IixlbmQ6IiQiLGtleXdvcmRzOiJwb3J0Iixjb250YWluczpbdF19LHMsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREUsbixlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiXltfYS16XVtcXHcnXSoifSksdCx7YmVnaW46Ii0+fDwtIn1dLGlsbGVnYWw6LzsvfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmIuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbZS5DT01NRU5UKCI8JSMiLCIlPiIpLHtiZWdpbjoiPCVbJT0tXT8iLGVuZDoiWyUtXT8lPiIsc3ViTGFuZ3VhZ2U6InJ1YnkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VybGFuZy1yZXBsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2J1aWx0X2luOiJzcGF3biBzcGF3bl9saW5rIHNlbGYiLGtleXdvcmQ6ImFmdGVyIGFuZCBhbmRhbHNvfDEwIGJhbmQgYmVnaW4gYm5vdCBib3IgYnNsIGJzciBieG9yIGNhc2UgY2F0Y2ggY29uZCBkaXYgZW5kIGZ1biBpZiBsZXQgbm90IG9mIG9yIG9yZWxzZXwxMCBxdWVyeSByZWNlaXZlIHJlbSB0cnkgd2hlbiB4b3IifSxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il5bMC05XSs+ICIscmVsZXZhbmNlOjEwfSxlLkNPTU1FTlQoIiUiLCIkIikse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKFxcZCsjW2EtZkEtRjAtOV0rfFxcZCsoXFwuXFxkKyk/KFtlRV1bLStdP1xcZCspPykiLHJlbGV2YW5jZTowfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx7YmVnaW46IlxcPyg6Oik/KFtBLVpdXFx3Kig6Oik/KSsifSx7YmVnaW46Ii0+In0se2JlZ2luOiJvayJ9LHtiZWdpbjoiISJ9LHtiZWdpbjoiKFxcYlthLXonXVthLXpBLVowLTlfJ10qOlthLXonXVthLXpBLVowLTlfJ10qKXwoXFxiW2EteiddW2EtekEtWjAtOV8nXSopIixyZWxldmFuY2U6MH0se2JlZ2luOiJbQS1aXVthLXpBLVowLTlfJ10qIixyZWxldmFuY2U6MH1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmcuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbYS16J11bYS16QS1aMC05XyddKiIsbj0iKCIrdCsiOiIrdCsifCIrdCsiKSIscj17a2V5d29yZDoiYWZ0ZXIgYW5kIGFuZGFsc298MTAgYmFuZCBiZWdpbiBibm90IGJvciBic2wgYnpyIGJ4b3IgY2FzZSBjYXRjaCBjb25kIGRpdiBlbmQgZnVuIGlmIGxldCBub3Qgb2Ygb3JlbHNlfDEwIHF1ZXJ5IHJlY2VpdmUgcmVtIHRyeSB3aGVuIHhvciIsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSJ9LG89ZS5DT01NRU5UKCIlIiwiJCIpLHM9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKFxcZCsjW2EtZkEtRjAtOV0rfFxcZCsoXFwuXFxkKyk/KFtlRV1bLStdP1xcZCspPykiLHJlbGV2YW5jZTowfSxpPXtiZWdpbjoiZnVuXFxzKyIrdCsiL1xcZCsifSxhPXtiZWdpbjpuKyJcXCgiLGVuZDoiXFwpIixyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCxjb250YWluczpbe2JlZ2luOm4scmVsZXZhbmNlOjB9LHtiZWdpbjoiXFwoIixlbmQ6IlxcKSIsZW5kc1dpdGhQYXJlbnQ6ITAscmV0dXJuRW5kOiEwLHJlbGV2YW5jZTowfV19LGw9e2JlZ2luOiJ7IixlbmQ6In0iLHJlbGV2YW5jZTowfSx1PXtiZWdpbjoiXFxiXyhbQS1aXVtBLVphLXowLTlfXSopPyIscmVsZXZhbmNlOjB9LGM9e2JlZ2luOiJbQS1aXVthLXpBLVowLTlfXSoiLHJlbGV2YW5jZTowfSxkPXtiZWdpbjoiIyIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLHJlbGV2YW5jZTowLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7YmVnaW46IiMiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSxyZWxldmFuY2U6MH0se2JlZ2luOiJ7IixlbmQ6In0iLHJlbGV2YW5jZTowfV19LF89e2JlZ2luS2V5d29yZHM6ImZ1biByZWNlaXZlIGlmIHRyeSBjYXNlIixlbmQ6ImVuZCIsa2V5d29yZHM6cn07Xy5jb250YWlucz1bbyxpLGUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToiIn0pLF8sYSxlLlFVT1RFX1NUUklOR19NT0RFLHMsbCx1LGMsZF07dmFyIHA9W28saSxfLGEsZS5RVU9URV9TVFJJTkdfTU9ERSxzLGwsdSxjLGRdO2EuY29udGFpbnNbMV0uY29udGFpbnM9cCxsLmNvbnRhaW5zPXAsZC5jb250YWluc1sxXS5jb250YWlucz1wO3ZhciBmPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOnB9O3JldHVybnthbGlhc2VzOlsiZXJsIl0sa2V5d29yZHM6cixpbGxlZ2FsOiIoPC98XFwqPXxcXCs9fC09fC9cXCp8XFwqL3xcXChcXCp8XFwqXFwpKSIsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiXiIrdCsiXFxzKlxcKCIsZW5kOiItPiIscmV0dXJuQmVnaW46ITAsaWxsZWdhbDoiXFwofCN8Ly98L1xcKnxcXFxcfDp8OyIsY29udGFpbnM6W2YsZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46dH0pXSxzdGFydHM6e2VuZDoiO3xcXC4iLGtleXdvcmRzOnIsY29udGFpbnM6cH19LG8se2JlZ2luOiJeLSIsZW5kOiJcXC4iLHJlbGV2YW5jZTowLGV4Y2x1ZGVFbmQ6ITAscmV0dXJuQmVnaW46ITAsbGV4ZW1lczoiLSIrZS5JREVOVF9SRSxrZXl3b3JkczoiLW1vZHVsZSAtcmVjb3JkIC11bmRlZiAtZXhwb3J0IC1pZmRlZiAtaWZuZGVmIC1hdXRob3IgLWNvcHlyaWdodCAtZG9jIC12c24gLWltcG9ydCAtaW5jbHVkZSAtaW5jbHVkZV9saWIgLWNvbXBpbGUgLWRlZmluZSAtZWxzZSAtZW5kaWYgLWZpbGUgLWJlaGF2aW91ciAtYmVoYXZpb3IgLXNwZWMiLGNvbnRhaW5zOltmXX0scyxlLlFVT1RFX1NUUklOR19NT0RFLGQsdSxjLGwse2JlZ2luOi9cLiQvfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInhsc3giLCJ4bHMiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGxleGVtZXM6L1thLXpBLVpdW1x3XC5dKi8sa2V5d29yZHM6e2J1aWx0X2luOiJBQlMgQUNDUklOVCBBQ0NSSU5UTSBBQ09TIEFDT1NIIEFDT1QgQUNPVEggQUdHUkVHQVRFIEFERFJFU1MgQU1PUkRFR1JDIEFNT1JMSU5DIEFORCBBUkFCSUMgQVJFQVMgQVNDIEFTSU4gQVNJTkggQVRBTiBBVEFOMiBBVEFOSCBBVkVERVYgQVZFUkFHRSBBVkVSQUdFQSBBVkVSQUdFSUYgQVZFUkFHRUlGUyBCQUhUVEVYVCBCQVNFIEJFU1NFTEkgQkVTU0VMSiBCRVNTRUxLIEJFU1NFTFkgQkVUQURJU1QgQkVUQS5ESVNUIEJFVEFJTlYgQkVUQS5JTlYgQklOMkRFQyBCSU4ySEVYIEJJTjJPQ1QgQklOT01ESVNUIEJJTk9NLkRJU1QgQklOT00uRElTVC5SQU5HRSBCSU5PTS5JTlYgQklUQU5EIEJJVExTSElGVCBCSVRPUiBCSVRSU0hJRlQgQklUWE9SIENBTEwgQ0VJTElORyBDRUlMSU5HLk1BVEggQ0VJTElORy5QUkVDSVNFIENFTEwgQ0hBUiBDSElESVNUIENISUlOViBDSElURVNUIENISVNRLkRJU1QgQ0hJU1EuRElTVC5SVCBDSElTUS5JTlYgQ0hJU1EuSU5WLlJUIENISVNRLlRFU1QgQ0hPT1NFIENMRUFOIENPREUgQ09MVU1OIENPTFVNTlMgQ09NQklOIENPTUJJTkEgQ09NUExFWCBDT05DQVQgQ09OQ0FURU5BVEUgQ09ORklERU5DRSBDT05GSURFTkNFLk5PUk0gQ09ORklERU5DRS5UIENPTlZFUlQgQ09SUkVMIENPUyBDT1NIIENPVCBDT1RIIENPVU5UIENPVU5UQSBDT1VOVEJMQU5LIENPVU5USUYgQ09VTlRJRlMgQ09VUERBWUJTIENPVVBEQVlTIENPVVBEQVlTTkMgQ09VUE5DRCBDT1VQTlVNIENPVVBQQ0QgQ09WQVIgQ09WQVJJQU5DRS5QIENPVkFSSUFOQ0UuUyBDUklUQklOT00gQ1NDIENTQ0ggQ1VCRUtQSU1FTUJFUiBDVUJFTUVNQkVSIENVQkVNRU1CRVJQUk9QRVJUWSBDVUJFUkFOS0VETUVNQkVSIENVQkVTRVQgQ1VCRVNFVENPVU5UIENVQkVWQUxVRSBDVU1JUE1UIENVTVBSSU5DIERBVEUgREFURURJRiBEQVRFVkFMVUUgREFWRVJBR0UgREFZIERBWVMgREFZUzM2MCBEQiBEQkNTIERDT1VOVCBEQ09VTlRBIEREQiBERUMyQklOIERFQzJIRVggREVDMk9DVCBERUNJTUFMIERFR1JFRVMgREVMVEEgREVWU1EgREdFVCBESVNDIERNQVggRE1JTiBET0xMQVIgRE9MTEFSREUgRE9MTEFSRlIgRFBST0RVQ1QgRFNUREVWIERTVERFVlAgRFNVTSBEVVJBVElPTiBEVkFSIERWQVJQIEVEQVRFIEVGRkVDVCBFTkNPREVVUkwgRU9NT05USCBFUkYgRVJGLlBSRUNJU0UgRVJGQyBFUkZDLlBSRUNJU0UgRVJST1IuVFlQRSBFVVJPQ09OVkVSVCBFVkVOIEVYQUNUIEVYUCBFWFBPTi5ESVNUIEVYUE9ORElTVCBGQUNUIEZBQ1RET1VCTEUgRkFMU0V8MCBGLkRJU1QgRkRJU1QgRi5ESVNULlJUIEZJTFRFUlhNTCBGSU5EIEZJTkRCIEYuSU5WIEYuSU5WLlJUIEZJTlYgRklTSEVSIEZJU0hFUklOViBGSVhFRCBGTE9PUiBGTE9PUi5NQVRIIEZMT09SLlBSRUNJU0UgRk9SRUNBU1QgRk9SRUNBU1QuRVRTIEZPUkVDQVNULkVUUy5DT05GSU5UIEZPUkVDQVNULkVUUy5TRUFTT05BTElUWSBGT1JFQ0FTVC5FVFMuU1RBVCBGT1JFQ0FTVC5MSU5FQVIgRk9STVVMQVRFWFQgRlJFUVVFTkNZIEYuVEVTVCBGVEVTVCBGViBGVlNDSEVEVUxFIEdBTU1BIEdBTU1BLkRJU1QgR0FNTUFESVNUIEdBTU1BLklOViBHQU1NQUlOViBHQU1NQUxOIEdBTU1BTE4uUFJFQ0lTRSBHQVVTUyBHQ0QgR0VPTUVBTiBHRVNURVAgR0VUUElWT1REQVRBIEdST1dUSCBIQVJNRUFOIEhFWDJCSU4gSEVYMkRFQyBIRVgyT0NUIEhMT09LVVAgSE9VUiBIWVBFUkxJTksgSFlQR0VPTS5ESVNUIEhZUEdFT01ESVNUIElGfDAgSUZFUlJPUiBJRk5BIElGUyBJTUFCUyBJTUFHSU5BUlkgSU1BUkdVTUVOVCBJTUNPTkpVR0FURSBJTUNPUyBJTUNPU0ggSU1DT1QgSU1DU0MgSU1DU0NIIElNRElWIElNRVhQIElNTE4gSU1MT0cxMCBJTUxPRzIgSU1QT1dFUiBJTVBST0RVQ1QgSU1SRUFMIElNU0VDIElNU0VDSCBJTVNJTiBJTVNJTkggSU1TUVJUIElNU1VCIElNU1VNIElNVEFOIElOREVYIElORElSRUNUIElORk8gSU5UIElOVEVSQ0VQVCBJTlRSQVRFIElQTVQgSVJSIElTQkxBTksgSVNFUlIgSVNFUlJPUiBJU0VWRU4gSVNGT1JNVUxBIElTTE9HSUNBTCBJU05BIElTTk9OVEVYVCBJU05VTUJFUiBJU09ERCBJU1JFRiBJU1RFWFQgSVNPLkNFSUxJTkcgSVNPV0VFS05VTSBJU1BNVCBKSVMgS1VSVCBMQVJHRSBMQ00gTEVGVCBMRUZUQiBMRU4gTEVOQiBMSU5FU1QgTE4gTE9HIExPRzEwIExPR0VTVCBMT0dJTlYgTE9HTk9STS5ESVNUIExPR05PUk1ESVNUIExPR05PUk0uSU5WIExPT0tVUCBMT1dFUiBNQVRDSCBNQVggTUFYQSBNQVhJRlMgTURFVEVSTSBNRFVSQVRJT04gTUVESUFOIE1JRCBNSURCcyBNSU4gTUlOSUZTIE1JTkEgTUlOVVRFIE1JTlZFUlNFIE1JUlIgTU1VTFQgTU9EIE1PREUgTU9ERS5NVUxUIE1PREUuU05HTCBNT05USCBNUk9VTkQgTVVMVElOT01JQUwgTVVOSVQgTiBOQSBORUdCSU5PTS5ESVNUIE5FR0JJTk9NRElTVCBORVRXT1JLREFZUyBORVRXT1JLREFZUy5JTlRMIE5PTUlOQUwgTk9STS5ESVNUIE5PUk1ESVNUIE5PUk1JTlYgTk9STS5JTlYgTk9STS5TLkRJU1QgTk9STVNESVNUIE5PUk0uUy5JTlYgTk9STVNJTlYgTk9UIE5PVyBOUEVSIE5QViBOVU1CRVJWQUxVRSBPQ1QyQklOIE9DVDJERUMgT0NUMkhFWCBPREQgT0RERlBSSUNFIE9EREZZSUVMRCBPRERMUFJJQ0UgT0RETFlJRUxEIE9GRlNFVCBPUiBQRFVSQVRJT04gUEVBUlNPTiBQRVJDRU5USUxFLkVYQyBQRVJDRU5USUxFLklOQyBQRVJDRU5USUxFIFBFUkNFTlRSQU5LLkVYQyBQRVJDRU5UUkFOSy5JTkMgUEVSQ0VOVFJBTksgUEVSTVVUIFBFUk1VVEFUSU9OQSBQSEkgUEhPTkVUSUMgUEkgUE1UIFBPSVNTT04uRElTVCBQT0lTU09OIFBPV0VSIFBQTVQgUFJJQ0UgUFJJQ0VESVNDIFBSSUNFTUFUIFBST0IgUFJPRFVDVCBQUk9QRVIgUFYgUVVBUlRJTEUgUVVBUlRJTEUuRVhDIFFVQVJUSUxFLklOQyBRVU9USUVOVCBSQURJQU5TIFJBTkQgUkFOREJFVFdFRU4gUkFOSy5BVkcgUkFOSy5FUSBSQU5LIFJBVEUgUkVDRUlWRUQgUkVHSVNURVIuSUQgUkVQTEFDRSBSRVBMQUNFQiBSRVBUIFJJR0hUIFJJR0hUQiBST01BTiBST1VORCBST1VORERPV04gUk9VTkRVUCBST1cgUk9XUyBSUkkgUlNRIFJURCBTRUFSQ0ggU0VBUkNIQiBTRUMgU0VDSCBTRUNPTkQgU0VSSUVTU1VNIFNIRUVUIFNIRUVUUyBTSUdOIFNJTiBTSU5IIFNLRVcgU0tFVy5QIFNMTiBTTE9QRSBTTUFMTCBTUUwuUkVRVUVTVCBTUVJUIFNRUlRQSSBTVEFOREFSRElaRSBTVERFViBTVERFVi5QIFNUREVWLlMgU1RERVZBIFNUREVWUCBTVERFVlBBIFNURVlYIFNVQlNUSVRVVEUgU1VCVE9UQUwgU1VNIFNVTUlGIFNVTUlGUyBTVU1QUk9EVUNUIFNVTVNRIFNVTVgyTVkyIFNVTVgyUFkyIFNVTVhNWTIgU1dJVENIIFNZRCBUIFRBTiBUQU5IIFRCSUxMRVEgVEJJTExQUklDRSBUQklMTFlJRUxEIFQuRElTVCBULkRJU1QuMlQgVC5ESVNULlJUIFRESVNUIFRFWFQgVEVYVEpPSU4gVElNRSBUSU1FVkFMVUUgVC5JTlYgVC5JTlYuMlQgVElOViBUT0RBWSBUUkFOU1BPU0UgVFJFTkQgVFJJTSBUUklNTUVBTiBUUlVFfDAgVFJVTkMgVC5URVNUIFRURVNUIFRZUEUgVU5JQ0hBUiBVTklDT0RFIFVQUEVSIFZBTFVFIFZBUiBWQVIuUCBWQVIuUyBWQVJBIFZBUlAgVkFSUEEgVkRCIFZMT09LVVAgV0VCU0VSVklDRSBXRUVLREFZIFdFRUtOVU0gV0VJQlVMTCBXRUlCVUxMLkRJU1QgV09SS0RBWSBXT1JLREFZLklOVEwgWElSUiBYTlBWIFhPUiBZRUFSIFlFQVJGUkFDIFlJRUxEIFlJRUxERElTQyBZSUVMRE1BVCBaLlRFU1QgWlRFU1QifSxjb250YWluczpbe2JlZ2luOi9ePS8sZW5kOi9bXj1dLyxyZXR1cm5FbmQ6ITAsaWxsZWdhbDovPS8scmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9cYltBLVpdezEsMn1cZCtcYi8sZW5kOi9bXlxkXS8sZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjovW0EtWl17MCwyfVxkKjpbQS1aXXswLDJ9XGQqLyxyZWxldmFuY2U6MH0sZS5CQUNLU0xBU0hfRVNDQVBFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjplLk5VTUJFUl9SRSsiKCUpPyIscmVsZXZhbmNlOjB9LGUuQ09NTUVOVCgvXGJOXCgvLC9cKS8se2V4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGlsbGVnYWw6L1xuL30pXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZml4LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGFpbnM6W3tiZWdpbjovW15cdTI0MDFcdTAwMDFdKy8sZW5kOi9bXHUyNDAxXHUwMDAxXS8sZXhjbHVkZUVuZDohMCxyZXR1cm5CZWdpbjohMCxyZXR1cm5FbmQ6ITEsY29udGFpbnM6W3tiZWdpbjovKFteXHUyNDAxXHUwMDAxPV0rKS8sZW5kOi89KFteXHUyNDAxXHUwMDAxPV0rKS8scmV0dXJuRW5kOiEwLHJldHVybkJlZ2luOiExLGNsYXNzTmFtZToiYXR0ciJ9LHtiZWdpbjovPS8sZW5kOi8oW1x1MjQwMVx1MDAwMV0pLyxleGNsdWRlRW5kOiEwLGV4Y2x1ZGVCZWdpbjohMCxjbGFzc05hbWU6InN0cmluZyJ9XX1dLGNhc2VfaW5zZW5zaXRpdmU6ITB9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZsaXguanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LycoLnxcXFt4WHVVXVthLXpBLVowLTldKyknL30sbj17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46JyInLGVuZDonIid9XX0scj17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46L1teMC05XG5cdCAiJygpLC5ge31cW1xdOjtdW15cblx0ICInKCksLmB7fVxbXF06O10rfFteMC05XG5cdCAiJygpLC5ge31cW1xdOjs9XS99LG89e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImRlZiIsZW5kOi9bOj17XFsoXG47XS8sZXhjbHVkZUVuZDohMCxjb250YWluczpbcl19O3JldHVybntrZXl3b3Jkczp7bGl0ZXJhbDoidHJ1ZSBmYWxzZSIsa2V5d29yZDoiY2FzZSBjbGFzcyBkZWYgZWxzZSBlbnVtIGlmIGltcGwgaW1wb3J0IGluIGxhdCByZWwgaW5kZXggbGV0IG1hdGNoIG5hbWVzcGFjZSBzd2l0Y2ggdHlwZSB5aWVsZCB3aXRoIn0sY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHQsbixvLGUuQ19OVU1CRVJfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZvcnRyYW4uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkifTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxhbGlhc2VzOlsiZjkwIiwiZjk1Il0sa2V5d29yZHM6e2xpdGVyYWw6Ii5GYWxzZS4gLlRydWUuIixrZXl3b3JkOiJraW5kIGRvIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlIHR5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiBwdWJsaWMgc3Vicm91dGluZXwxMCBmdW5jdGlvbiBwcm9ncmFtIC5hbmQuIC5vci4gLm5vdC4gLmxlLiAuZXEuIC5nZS4gLmd0LiAubHQuIGdvdG8gc2F2ZSBlbHNlIHVzZSBtb2R1bGUgc2VsZWN0IGNhc2UgYWNjZXNzIGJsYW5rIGRpcmVjdCBleGlzdCBmaWxlIGZtdCBmb3JtIGZvcm1hdHRlZCBpb3N0YXQgbmFtZSBuYW1lZCBuZXh0cmVjIG51bWJlciBvcGVuZWQgcmVjIHJlY2wgc2VxdWVudGlhbCBzdGF0dXMgdW5mb3JtYXR0ZWQgdW5pdCBjb250aW51ZSBmb3JtYXQgcGF1c2UgY3ljbGUgZXhpdCBjX251bGxfY2hhciBjX2FsZXJ0IGNfYmFja3NwYWNlIGNfZm9ybV9mZWVkIGZsdXNoIHdhaXQgZGVjaW1hbCByb3VuZCBpb21zZyBzeW5jaHJvbm91cyBub3Bhc3Mgbm9uX292ZXJyaWRhYmxlIHBhc3MgcHJvdGVjdGVkIHZvbGF0aWxlIGFic3RyYWN0IGV4dGVuZHMgaW1wb3J0IG5vbl9pbnRyaW5zaWMgdmFsdWUgZGVmZXJyZWQgZ2VuZXJpYyBmaW5hbCBlbnVtZXJhdG9yIGNsYXNzIGFzc29jaWF0ZSBiaW5kIGVudW0gY19pbnQgY19zaG9ydCBjX2xvbmcgY19sb25nX2xvbmcgY19zaWduZWRfY2hhciBjX3NpemVfdCBjX2ludDhfdCBjX2ludDE2X3QgY19pbnQzMl90IGNfaW50NjRfdCBjX2ludF9sZWFzdDhfdCBjX2ludF9sZWFzdDE2X3QgY19pbnRfbGVhc3QzMl90IGNfaW50X2xlYXN0NjRfdCBjX2ludF9mYXN0OF90IGNfaW50X2Zhc3QxNl90IGNfaW50X2Zhc3QzMl90IGNfaW50X2Zhc3Q2NF90IGNfaW50bWF4X3QgQ19pbnRwdHJfdCBjX2Zsb2F0IGNfZG91YmxlIGNfbG9uZ19kb3VibGUgY19mbG9hdF9jb21wbGV4IGNfZG91YmxlX2NvbXBsZXggY19sb25nX2RvdWJsZV9jb21wbGV4IGNfYm9vbCBjX2NoYXIgY19udWxsX3B0ciBjX251bGxfZnVucHRyIGNfbmV3X2xpbmUgY19jYXJyaWFnZV9yZXR1cm4gY19ob3Jpem9udGFsX3RhYiBjX3ZlcnRpY2FsX3RhYiBpc29fY19iaW5kaW5nIGNfbG9jIGNfZnVubG9jIGNfYXNzb2NpYXRlZCAgY19mX3BvaW50ZXIgY19wdHIgY19mdW5wdHIgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciBudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdCBjX2ZfcHJvY3BvaW50ZXIgaWVlZV9hcml0aG1ldGljIGllZWVfc3VwcG9ydF91bmRlcmZsb3dfY29udHJvbCBpZWVlX2dldF91bmRlcmZsb3dfbW9kZSBpZWVlX3NldF91bmRlcmZsb3dfbW9kZSBuZXd1bml0IGNvbnRpZ3VvdXMgcmVjdXJzaXZlIHBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlIGVvciBhZHZhbmNlIG5tbCBpbnRlcmZhY2UgcHJvY2VkdXJlIG5hbWVsaXN0IGluY2x1ZGUgc2VxdWVuY2UgZWxlbWVudGFsIHB1cmUgaW50ZWdlciByZWFsIGNoYXJhY3RlciBjb21wbGV4IGxvZ2ljYWwgZGltZW5zaW9uIGFsbG9jYXRhYmxlfDEwIHBhcmFtZXRlciBleHRlcm5hbCBpbXBsaWNpdHwxMCBub25lIGRvdWJsZSBwcmVjaXNpb24gYXNzaWduIGludGVudCBvcHRpb25hbCBwb2ludGVyIHRhcmdldCBpbiBvdXQgY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEiLGJ1aWx0X2luOiJhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50IGRsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hIGlxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgcW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCBtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0IHJhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kIHNldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mYWNvc2ggYXNpbmggYXRhbmggYmVzc2VsX2owIGJlc3NlbF9qMSBiZXNzZWxfam4gYmVzc2VsX3kwIGJlc3NlbF95MSBiZXNzZWxfeW4gZXJmIGVyZmMgZXJmY19zY2FsZWQgZ2FtbWEgbG9nX2dhbW1hIGh5cG90IG5vcm0yIGF0b21pY19kZWZpbmUgYXRvbWljX3JlZiBleGVjdXRlX2NvbW1hbmRfbGluZSBsZWFkeiB0cmFpbHogc3RvcmFnZV9zaXplIG1lcmdlX2JpdHMgYmdlIGJndCBibGUgYmx0IGRzaGlmdGwgZHNoaWZ0ciBmaW5kbG9jIGlhbGwgaWFueSBpcGFyaXR5IGltYWdlX2luZGV4IGxjb2JvdW5kIHVjb2JvdW5kIG1hc2tsIG1hc2tyIG51bV9pbWFnZXMgcGFyaXR5IHBvcGNudCBwb3BwYXIgc2hpZnRhIHNoaWZ0bCBzaGlmdHIgdGhpc19pbWFnZSJ9LGlsbGVnYWw6L1wvXCovLGNvbnRhaW5zOltlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjB9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLHJlbGV2YW5jZTowfSkse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6InN1YnJvdXRpbmUgZnVuY3Rpb24gcHJvZ3JhbSIsaWxsZWdhbDoiWyR7PVxcbl0iLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx0XX0sZS5DT01NRU5UKCIhIiwiJCIse3JlbGV2YW5jZTowfSkse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiKD89XFxifFxcK3xcXC18XFwuKSg/PVxcLlxcZHxcXGQpKD86XFxkKyk/KD86XFwuP1xcZCopKD86W2RlXVsrLV0/XFxkKyk/XFxiXFwuPyIscmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZnNoYXJwLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17YmVnaW46IjwiLGVuZDoiPiIsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOi8nW2EtekEtWjAtOV9dKy99KV19O3JldHVybnthbGlhc2VzOlsiZnMiXSxrZXl3b3JkczoiYWJzdHJhY3QgYW5kIGFzIGFzc2VydCBiYXNlIGJlZ2luIGNsYXNzIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG9uZSBkb3duY2FzdCBkb3dudG8gZWxpZiBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuIGZhbHNlIGZpbmFsbHkgZm9yIGZ1biBmdW5jdGlvbiBnbG9iYWwgaWYgaW4gaW5oZXJpdCBpbmxpbmUgaW50ZXJmYWNlIGludGVybmFsIGxhenkgbGV0IG1hdGNoIG1lbWJlciBtb2R1bGUgbXV0YWJsZSBuYW1lc3BhY2UgbmV3IG51bGwgb2Ygb3BlbiBvciBvdmVycmlkZSBwcml2YXRlIHB1YmxpYyByZWMgcmV0dXJuIHNpZyBzdGF0aWMgc3RydWN0IHRoZW4gdG8gdHJ1ZSB0cnkgdHlwZSB1cGNhc3QgdXNlIHZhbCB2b2lkIHdoZW4gd2hpbGUgd2l0aCB5aWVsZCIsaWxsZWdhbDovXC9cKi8sY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9cYih5aWVsZHxyZXR1cm58bGV0fGRvKSEvfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOidAIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIid9XX0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIiIiJyxlbmQ6JyIiIid9LGUuQ09NTUVOVCgiXFwoXFwqIiwiXFwqXFwpIikse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6InR5cGUiLGVuZDoiXFwofD18JCIsZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREUsdF19LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXFs8IixlbmQ6Ij5cXF0iLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiXFxCKCdbQS1aYS16XSlcXGIiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pLGUuQ19OVU1CRVJfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dhbXMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJhYm9ydCBhY3JvbnltIGFjcm9ueW1zIGFsaWFzIGFsbCBhbmQgYXNzaWduIGJpbmFyeSBjYXJkIGRpYWcgZGlzcGxheSBlbHNlIGVxIGZpbGUgZmlsZXMgZm9yIGZyZWUgZ2UgZ3QgaWYgaW50ZWdlciBsZSBsb29wIGx0IG1heGltaXppbmcgbWluaW1pemluZyBtb2RlbCBtb2RlbHMgbmUgbmVnYXRpdmUgbm8gbm90IG9wdGlvbiBvcHRpb25zIG9yIG9yZCBwb3NpdGl2ZSBwcm9kIHB1dCBwdXRwYWdlIHB1dHRsIHJlcGVhdCBzYW1lYXMgc2VtaWNvbnQgc2VtaWludCBzbWF4IHNtaW4gc29sdmUgc29zMSBzb3MyIHN1bSBzeXN0ZW0gdGFibGUgdGhlbiB1bnRpbCB1c2luZyB3aGlsZSB4b3IgeWVzIixsaXRlcmFsOiJlcHMgaW5mIG5hIiwiYnVpbHQtaW4iOiJhYnMgYXJjY29zIGFyY3NpbiBhcmN0YW4gYXJjdGFuMiBCZXRhIGJldGFSZWcgYmlub21pYWwgY2VpbCBjZW50cm9weSBjb3MgY29zaCBjdlBvd2VyIGRpdiBkaXYwIGVEaXN0IGVudHJvcHkgZXJyb3JmIGV4ZWNTZWVkIGV4cCBmYWN0IGZsb29yIGZyYWMgZ2FtbWEgZ2FtbWFSZWcgbG9nIGxvZ0JldGEgbG9nR2FtbWEgbG9nMTAgbG9nMiBtYXBWYWwgbWF4IG1pbiBtb2QgbmNwQ00gbmNwRiBuY3BWVXBvdyBuY3BWVXNpbiBub3JtYWwgcGkgcG9seSBwb3dlciByYW5kQmlub21pYWwgcmFuZExpbmVhciByYW5kVHJpYW5nbGUgcm91bmQgclBvd2VyIHNpZ21vaWQgc2lnbiBzaWduUG93ZXIgc2luIHNpbmggc2xleHAgc2xsb2cxMCBzbHJlYyBzcWV4cCBzcWxvZzEwIHNxciBzcXJlYyBzcXJ0IHRhbiB0YW5oIHRydW5jIHVuaWZvcm0gdW5pZm9ybUludCB2Y1Bvd2VyIGJvb2xfYW5kIGJvb2xfZXF2IGJvb2xfaW1wIGJvb2xfbm90IGJvb2xfb3IgYm9vbF94b3IgaWZUaGVuIHJlbF9lcSByZWxfZ2UgcmVsX2d0IHJlbF9sZSByZWxfbHQgcmVsX25lIGdkYXkgZ2RvdyBnaG91ciBnbGVhcCBnbWlsbGlzZWMgZ21pbnV0ZSBnbW9udGggZ3NlY29uZCBneWVhciBqZGF0ZSBqbm93IGpzdGFydCBqdGltZSBlcnJvckxldmVsIGV4ZWNFcnJvciBnYW1zUmVsZWFzZSBnYW1zVmVyc2lvbiBoYW5kbGVDb2xsZWN0IGhhbmRsZURlbGV0ZSBoYW5kbGVTdGF0dXMgaGFuZGxlU3VibWl0IGhlYXBGcmVlIGhlYXBMaW1pdCBoZWFwU2l6ZSBqb2JIYW5kbGUgam9iS2lsbCBqb2JTdGF0dXMgam9iVGVybWluYXRlIGxpY2Vuc2VMZXZlbCBsaWNlbnNlU3RhdHVzIG1heEV4ZWNFcnJvciBzbGVlcCB0aW1lQ2xvc2UgdGltZUNvbXAgdGltZUVsYXBzZWQgdGltZUV4ZWMgdGltZVN0YXJ0In0sbj17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHI9e2NsYXNzTmFtZToic3ltYm9sIix2YXJpYW50czpbe2JlZ2luOi9cPVtsZ2VueGNdPS99LHtiZWdpbjovXCQvfV19LG89e2NsYXNzTmFtZToiY29tbWVudCIsdmFyaWFudHM6W3tiZWdpbjoiJyIsZW5kOiInIn0se2JlZ2luOiciJyxlbmQ6JyInfV0saWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0scz17YmVnaW46Ii8iLGVuZDoiLyIsa2V5d29yZHM6dCxjb250YWluczpbbyxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREVdfSxpPXtiZWdpbjovW2Etel1bYS16MC05X10qKFwoW2EtejAtOV8sIF0qXCkpP1sgXHRdKy8sZXhjbHVkZUJlZ2luOiEwLGVuZDoiJCIsZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W28scyx7Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjovKFsgXSpbYS16MC05JiMqPT9APlxcPDpcLSwoKSRcW1xdXy57fSErJV5dKykrLyxyZWxldmFuY2U6MH1dfTtyZXR1cm57YWxpYXNlczpbImdtcyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6dCxjb250YWluczpbZS5DT01NRU5UKC9eXCRvbnRleHQvLC9eXCRvZmZ0ZXh0Lykse2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il5cXCRbYS16MC05XSsiLGVuZDoiJCIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEta2V5d29yZCIsYmVnaW46Il5cXCRbYS16MC05XSsifV19LGUuQ09NTUVOVCgiXlxcKiIsIiQiKSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSx7YmVnaW5LZXl3b3Jkczoic2V0IHNldHMgcGFyYW1ldGVyIHBhcmFtZXRlcnMgdmFyaWFibGUgdmFyaWFibGVzIHNjYWxhciBzY2FsYXJzIGVxdWF0aW9uIGVxdWF0aW9ucyIsZW5kOiI7Iixjb250YWluczpbZS5DT01NRU5UKCJeXFwqIiwiJCIpLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHMsaV19LHtiZWdpbktleXdvcmRzOiJ0YWJsZSIsZW5kOiI7IixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2JlZ2luS2V5d29yZHM6InRhYmxlIixlbmQ6IiQiLGNvbnRhaW5zOltpXX0sZS5DT01NRU5UKCJeXFwqIiwiJCIpLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuQ19OVU1CRVJfTU9ERV19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjovXlthLXpdW2EtejAtOV8sXC0rJyAoKSRdK1wuezJ9LyxyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOi9eW2EtejAtOV9dKy99LG4scl19LGUuQ19OVU1CRVJfTU9ERSxyXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2F1c3MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJib29sIGJyZWFrIGNhbGwgY2FsbGV4ZSBjaGVja2ludGVycnVwdCBjbGVhciBjbGVhcmcgY2xvc2VhbGwgY2xzIGNvbWxvZyBjb21waWxlIGNvbnRpbnVlIGNyZWF0ZSBkZWJ1ZyBkZWNsYXJlIGRlbGV0ZSBkaXNhYmxlIGRsaWJyYXJ5IGRsbGNhbGwgZG8gZG9zIGVkIGVkaXQgZWxzZSBlbHNlaWYgZW5hYmxlIGVuZCBlbmRmb3IgZW5kaWYgZW5kcCBlbmRvIGVycm9ybG9nIGVycm9ybG9nYXQgZXhwciBleHRlcm5hbCBmbiBmb3IgZm9ybWF0IGdvdG8gZ29zdWIgZ3JhcGggaWYga2V5d29yZCBsZXQgbGliIGxpYnJhcnkgbGluZSBsb2FkIGxvYWRhcnJheSBsb2FkZXhlIGxvYWRmIGxvYWRrIGxvYWRtIGxvYWRwIGxvYWRzIGxvYWR4IGxvY2FsIGxvY2F0ZSBsb29wbmV4dGluZGV4IGxwcmludCBscHdpZHRoIGxzaG93IG1hdHJpeCBtc3ltIG5kcGNsZXggbmV3IG9wZW4gb3V0cHV0IG91dHdpZHRoIHBsb3QgcGxvdHN5bSBwb3AgcHJjc24gcHJpbnQgcHJpbnRkb3MgcHJvYyBwdXNoIHJldHAgcmV0dXJuIHJuZGNvbiBybmRtb2Qgcm5kbXVsdCBybmRzZWVkIHJ1biBzYXZlIHNhdmVhbGwgc2NyZWVuIHNjcm9sbCBzZXRhcnJheSBzaG93IHNwYXJzZSBzdG9wIHN0cmluZyBzdHJ1Y3Qgc3lzdGVtIHRyYWNlIHRyYXAgdGhyZWFkZm9yIHRocmVhZGVuZGZvciB0aHJlYWRiZWdpbiB0aHJlYWRqb2luIHRocmVhZHN0YXQgdGhyZWFkZW5kIHVudGlsIHVzZSB3aGlsZSB3aW5wcmludCBuZSBnZSBsZSBndCBsdCBhbmQgeG9yIG9yIG5vdCBlcSBlcXYiLGJ1aWx0X2luOiJhYnMgYWNmIGFjb25jYXQgYWV5ZSBhbWF4IGFtZWFuIEFtZXJpY2FuQmlub21DYWxsIEFtZXJpY2FuQmlub21DYWxsX0dyZWVrcyBBbWVyaWNhbkJpbm9tQ2FsbF9JbXBWb2wgQW1lcmljYW5CaW5vbVB1dCBBbWVyaWNhbkJpbm9tUHV0X0dyZWVrcyBBbWVyaWNhbkJpbm9tUHV0X0ltcFZvbCBBbWVyaWNhbkJTQ2FsbCBBbWVyaWNhbkJTQ2FsbF9HcmVla3MgQW1lcmljYW5CU0NhbGxfSW1wVm9sIEFtZXJpY2FuQlNQdXQgQW1lcmljYW5CU1B1dF9HcmVla3MgQW1lcmljYW5CU1B1dF9JbXBWb2wgYW1pbiBhbXVsdCBhbm5vdGF0aW9uR2V0RGVmYXVsdHMgYW5ub3RhdGlvblNldEJrZCBhbm5vdGF0aW9uU2V0Rm9udCBhbm5vdGF0aW9uU2V0TGluZUNvbG9yIGFubm90YXRpb25TZXRMaW5lU3R5bGUgYW5ub3RhdGlvblNldExpbmVUaGlja25lc3MgYW5udWFsVHJhZGluZ0RheXMgYXJjY29zIGFyY3NpbiBhcmVzaGFwZSBhcnJheWFsbG9jIGFycmF5aW5kZXggYXJyYXlpbml0IGFycmF5dG9tYXQgYXNjaWlsb2FkIGFzY2xhYmVsIGFzdGQgYXN0ZHMgYXN1bSBhdGFuIGF0YW4yIGF0cmFuc3Bvc2UgYXhtYXJnaW4gYmFsYW5jZSBiYW5kIGJhbmRjaG9sIGJhbmRjaG9sc29sIGJhbmRsdHNvbCBiYW5kcnYgYmFuZHNvbHBkIGJhciBiYXNlMTAgYmVnd2luZCBiZXNzZWxqIGJlc3NlbHkgYmV0YSBib3ggYm94Y294IGNkZkJldGEgY2RmQmV0YUludiBjZGZCaW5vbWlhbCBjZGZCaW5vbWlhbEludiBjZGZCdm4gY2RmQnZuMiBjZGZCdm4yZSBjZGZDYXVjaHkgY2RmQ2F1Y2h5SW52IGNkZkNoaWMgY2RmQ2hpaSBjZGZDaGluYyBjZGZDaGluY0ludiBjZGZFeHAgY2RmRXhwSW52IGNkZkZjIGNkZkZuYyBjZGZGbmNJbnYgY2RmR2FtIGNkZkdlblBhcmV0byBjZGZIeXBlckdlbyBjZGZMYXBsYWNlIGNkZkxhcGxhY2VJbnYgY2RmTG9naXN0aWMgY2RmTG9naXN0aWNJbnYgY2RmbUNvbnRyb2xDcmVhdGUgY2RmTXZuIGNkZk12bjJlIGNkZk12bmNlIGNkZk12bmUgY2RmTXZ0MmUgY2RmTXZ0Y2UgY2RmTXZ0ZSBjZGZOIGNkZk4yIGNkZk5jIGNkZk5lZ0Jpbm9taWFsIGNkZk5lZ0Jpbm9taWFsSW52IGNkZk5pIGNkZlBvaXNzb24gY2RmUG9pc3NvbkludiBjZGZSYXlsZWlnaCBjZGZSYXlsZWlnaEludiBjZGZUYyBjZGZUY2kgY2RmVG5jIGNkZlR2biBjZGZXZWlidWxsIGNkZldlaWJ1bGxJbnYgY2RpciBjZWlsIENoYW5nZURpciBjaGRpciBjaGlCYXJTcXVhcmUgY2hvbCBjaG9sZG4gY2hvbHNvbCBjaG9sdXAgY2hycyBjbG9zZSBjb2RlIGNvbHMgY29sc2YgY29tYmluYXRlIGNvbWJpbmF0ZWQgY29tcGxleCBjb24gY29uZCBjb25qIGNvbnMgQ29uU2NvcmUgY29udG91ciBjb252IGNvbnZlcnRzYXRvc3RyIGNvbnZlcnRzdHJ0b3NhIGNvcnJtIGNvcnJtcyBjb3JydmMgY29ycnggY29ycnhzIGNvcyBjb3NoIGNvdW50cyBjb3VudHd0cyBjcm9zc3ByZCBjcm91dCBjcm91dHAgY3NyY29sIGNzcmxpbiBjc3ZSZWFkTSBjc3ZSZWFkU0EgY3VtcHJvZGMgY3Vtc3VtYyBjdXJ2ZSBjdnRvcyBkYXRhY3JlYXRlIGRhdGFjcmVhdGVjb21wbGV4IGRhdGFsaXN0IGRhdGFsb2FkIGRhdGFsb29wIGRhdGFvcGVuIGRhdGFzYXZlIGRhdGUgZGF0ZXN0ciBkYXRlc3RyaW5nIGRhdGVzdHJ5bWQgZGF5aW55ciBkYXlvZndlZWsgZGJBZGREYXRhYmFzZSBkYkNsb3NlIGRiQ29tbWl0IGRiQ3JlYXRlUXVlcnkgZGJFeGVjUXVlcnkgZGJHZXRDb25uZWN0T3B0aW9ucyBkYkdldERhdGFiYXNlTmFtZSBkYkdldERyaXZlck5hbWUgZGJHZXREcml2ZXJzIGRiR2V0SG9zdE5hbWUgZGJHZXRMYXN0RXJyb3JOdW0gZGJHZXRMYXN0RXJyb3JUZXh0IGRiR2V0TnVtZXJpY2FsUHJlY1BvbGljeSBkYkdldFBhc3N3b3JkIGRiR2V0UG9ydCBkYkdldFRhYmxlSGVhZGVycyBkYkdldFRhYmxlcyBkYkdldFVzZXJOYW1lIGRiSGFzRmVhdHVyZSBkYklzRHJpdmVyQXZhaWxhYmxlIGRiSXNPcGVuIGRiSXNPcGVuRXJyb3IgZGJPcGVuIGRiUXVlcnlCaW5kVmFsdWUgZGJRdWVyeUNsZWFyIGRiUXVlcnlDb2xzIGRiUXVlcnlFeGVjUHJlcGFyZWQgZGJRdWVyeUZldGNoQWxsTSBkYlF1ZXJ5RmV0Y2hBbGxTQSBkYlF1ZXJ5RmV0Y2hPbmVNIGRiUXVlcnlGZXRjaE9uZVNBIGRiUXVlcnlGaW5pc2ggZGJRdWVyeUdldEJvdW5kVmFsdWUgZGJRdWVyeUdldEJvdW5kVmFsdWVzIGRiUXVlcnlHZXRGaWVsZCBkYlF1ZXJ5R2V0TGFzdEVycm9yTnVtIGRiUXVlcnlHZXRMYXN0RXJyb3JUZXh0IGRiUXVlcnlHZXRMYXN0SW5zZXJ0SUQgZGJRdWVyeUdldExhc3RRdWVyeSBkYlF1ZXJ5R2V0UG9zaXRpb24gZGJRdWVyeUlzQWN0aXZlIGRiUXVlcnlJc0ZvcndhcmRPbmx5IGRiUXVlcnlJc051bGwgZGJRdWVyeUlzU2VsZWN0IGRiUXVlcnlJc1ZhbGlkIGRiUXVlcnlQcmVwYXJlIGRiUXVlcnlSb3dzIGRiUXVlcnlTZWVrIGRiUXVlcnlTZWVrRmlyc3QgZGJRdWVyeVNlZWtMYXN0IGRiUXVlcnlTZWVrTmV4dCBkYlF1ZXJ5U2Vla1ByZXZpb3VzIGRiUXVlcnlTZXRGb3J3YXJkT25seSBkYlJlbW92ZURhdGFiYXNlIGRiUm9sbGJhY2sgZGJTZXRDb25uZWN0T3B0aW9ucyBkYlNldERhdGFiYXNlTmFtZSBkYlNldEhvc3ROYW1lIGRiU2V0TnVtZXJpY2FsUHJlY1BvbGljeSBkYlNldFBvcnQgZGJTZXRVc2VyTmFtZSBkYlRyYW5zYWN0aW9uIERlbGV0ZUZpbGUgZGVsaWYgZGVscm93cyBkZW5zZVRvU3AgZGVuc2VUb1NwUkUgZGVuVG9aZXJvIGRlc2lnbiBkZXQgZGV0bCBkZmZ0IGRmZnRpIGRpYWcgZGlhZ3J2IGRpZ2FtbWEgZG9zd2luIERPU1dpbkNsb3NlYWxsIERPU1dpbk9wZW4gZG90ZmVxIGRvdGZlcW10IGRvdGZnZSBkb3RmZ2VtdCBkb3RmZ3QgZG90Zmd0bXQgZG90ZmxlIGRvdGZsZW10IGRvdGZsdCBkb3RmbHRtdCBkb3RmbmUgZG90Zm5lbXQgZHJhdyBkcm9wIGRzQ3JlYXRlIGRzdGF0IGRzdGF0bXQgZHN0YXRtdENvbnRyb2xDcmVhdGUgZHRkYXRlIGR0ZGF5IGR0dGltZSBkdHRvZHR2IGR0dG9zdHIgZHR0b3V0YyBkdHZub3JtYWwgZHR2dG9kdCBkdHZ0b3V0YyBkdW1teSBkdW1teWJyIGR1bW15ZG4gZWlnIGVpZ2ggZWlnaHYgZWlndiBlbGFwc2VkVHJhZGluZ0RheXMgZW5kd2luZCBlbnZnZXQgZW9mIGVxU29sdmUgZXFTb2x2ZW10IGVxU29sdmVtdENvbnRyb2xDcmVhdGUgZXFTb2x2ZW10T3V0Q3JlYXRlIGVxU29sdmVzZXQgZXJmIGVyZmMgZXJmY2NwbHggZXJmY3BseCBlcnJvciBldGRheXMgZXRoc2VjIGV0c3RyIEV1cm9wZWFuQmlub21DYWxsIEV1cm9wZWFuQmlub21DYWxsX0dyZWVrcyBFdXJvcGVhbkJpbm9tQ2FsbF9JbXBWb2wgRXVyb3BlYW5CaW5vbVB1dCBFdXJvcGVhbkJpbm9tUHV0X0dyZWVrcyBFdXJvcGVhbkJpbm9tUHV0X0ltcFZvbCBFdXJvcGVhbkJTQ2FsbCBFdXJvcGVhbkJTQ2FsbF9HcmVla3MgRXVyb3BlYW5CU0NhbGxfSW1wVm9sIEV1cm9wZWFuQlNQdXQgRXVyb3BlYW5CU1B1dF9HcmVla3MgRXVyb3BlYW5CU1B1dF9JbXBWb2wgZXhjdHNtcGwgZXhlYyBleGVjYmcgZXhwIGV4dGVybiBleWUgZmNoZWNrZXJyIGZjbGVhcmVyciBmZXEgZmVxbXQgZmZsdXNoIGZmdCBmZnRpIGZmdG0gZmZ0bWkgZmZ0biBmZ2UgZmdlbXQgZmdldHMgZmdldHNhIGZnZXRzYXQgZmdldHN0IGZndCBmZ3RtdCBmaWxlaW5mbyBmaWxlc2EgZmxlIGZsZW10IGZsb29yIGZsdCBmbHRtdCBmbW9kIGZuZSBmbmVtdCBmb250cyBmb3BlbiBmb3JtYXRjdiBmb3JtYXRudiBmcHV0cyBmcHV0c3QgZnNlZWsgZnN0cmVycm9yIGZ0ZWxsIGZ0b2N2IGZ0b3MgZnRvc3RyQyBnYW1tYSBnYW1tYWNwbHggZ2FtbWFpaSBnYXVzc2V0IGdkYUFwcGVuZCBnZGFDcmVhdGUgZ2RhRFN0YXQgZ2RhRFN0YXRNYXQgZ2RhR2V0SW5kZXggZ2RhR2V0TmFtZSBnZGFHZXROYW1lcyBnZGFHZXRPcmRlcnMgZ2RhR2V0VHlwZSBnZGFHZXRUeXBlcyBnZGFHZXRWYXJJbmZvIGdkYUlzQ3BseCBnZGFMb2FkIGdkYVBhY2sgZ2RhUmVhZCBnZGFSZWFkQnlJbmRleCBnZGFSZWFkU29tZSBnZGFSZWFkU3BhcnNlIGdkYVJlYWRTdHJ1Y3QgZ2RhUmVwb3J0VmFySW5mbyBnZGFTYXZlIGdkYVVwZGF0ZSBnZGFVcGRhdGVBbmRQYWNrIGdkYVZhcnMgZ2RhV3JpdGUgZ2RhV3JpdGUzMiBnZGFXcml0ZVNvbWUgZ2V0YXJyYXkgZ2V0ZGltcyBnZXRmIGdldEdBVVNTaG9tZSBnZXRtYXRyaXggZ2V0bWF0cml4NEQgZ2V0bmFtZSBnZXRuYW1lZiBnZXROZXh0VHJhZGluZ0RheSBnZXROZXh0V2Vla0RheSBnZXRuciBnZXRvcmRlcnMgZ2V0cGF0aCBnZXRQcmV2aW91c1RyYWRpbmdEYXkgZ2V0UHJldmlvdXNXZWVrRGF5IGdldFJvdyBnZXRzY2FsYXIzRCBnZXRzY2FsYXI0RCBnZXRUclJvdyBnZXR3aW5kIGdsbSBncmFkY3BseCBncmFkTVQgZ3JhZE1UbSBncmFkTVRUIGdyYWRNVFRtIGdyYWRwIGdyYXBocHJ0IGdyYXBoc2V0IGhhc2ltYWcgaGVhZGVyIGhlYWRlcm10IGhlc3MgaGVzc01UIGhlc3NNVGcgaGVzc01UZ3cgaGVzc01UbSBoZXNzTVRtdyBoZXNzTVRUIGhlc3NNVFRnIGhlc3NNVFRndyBoZXNzTVRUbSBoZXNzTVR3IGhlc3NwIGhpc3QgaGlzdGYgaGlzdHAgaHNlYyBpbWFnIGluZGN2IGluZGV4Y2F0IGluZGljZXMgaW5kaWNlczIgaW5kaWNlc2YgaW5kaWNlc2ZuIGluZG52IGluZHNhdiBpbnRlZ3JhdGUxZCBpbnRlZ3JhdGVDb250cm9sQ3JlYXRlIGludGdyYXQyIGludGdyYXQzIGludGhwMSBpbnRocDIgaW50aHAzIGludGhwNCBpbnRocENvbnRyb2xDcmVhdGUgaW50cXVhZDEgaW50cXVhZDIgaW50cXVhZDMgaW50cmxlYXYgaW50cmxlYXZzYSBpbnRyc2VjdCBpbnRzaW1wIGludiBpbnZwZCBpbnZzd3AgaXNjcGx4IGlzY3BseGYgaXNkZW4gaXNpbmZuYW5taXNzIGlzbWlzcyBrZXkga2V5YXYga2V5dyBsYWcgbGFnMSBsYWduIGxhcEVpZ2hiIGxhcEVpZ2hpIGxhcEVpZ2h2YiBsYXBFaWdodmkgbGFwZ0VpZyBsYXBnRWlnaCBsYXBnRWlnaHYgbGFwZ0VpZ3YgbGFwZ1NjaHVyIGxhcGdTdmRjc3QgbGFwZ1N2ZHMgbGFwZ1N2ZHN0IGxhcFN2ZGN1c3YgbGFwU3ZkcyBsYXBTdmR1c3YgbGRscCBsZGxzb2wgbGluU29sdmUgbGlzdHdpc2UgbG4gbG5jZGZidm4gbG5jZGZidm4yIGxuY2RmbXZuIGxuY2RmbiBsbmNkZm4yIGxuY2RmbmMgbG5mYWN0IGxuZ2FtbWFjcGx4IGxucGRmbXZuIGxucGRmbXZ0IGxucGRmbiBsbnBkZnQgbG9hZGQgbG9hZHN0cnVjdCBsb2Fkd2luZCBsb2VzcyBsb2Vzc210IGxvZXNzbXRDb250cm9sQ3JlYXRlIGxvZyBsb2dsb2cgbG9neCBsb2d5IGxvd2VyIGxvd21hdCBsb3dtYXQxIGx0cmlzb2wgbHUgbHVzb2wgbWFjaEVwc2lsb24gbWFrZSBtYWtldmFycyBtYWtld2luZCBtYXJnaW4gbWF0YWxsb2MgbWF0aW5pdCBtYXR0b2FycmF5IG1heGJ5dGVzIG1heGMgbWF4aW5kYyBtYXh2IG1heHZlYyBtYmVzc2VsZWkgbWJlc3NlbGVpMCBtYmVzc2VsZWkxIG1iZXNzZWxpIG1iZXNzZWxpMCBtYmVzc2VsaTEgbWVhbmMgbWVkaWFuIG1lcmdlYnkgbWVyZ2V2YXIgbWluYyBtaW5pbmRjIG1pbnYgbWlzcyBtaXNzZXggbWlzc3J2IG1vbWVudCBtb21lbnRkIG1vdmluZ2F2ZSBtb3ZpbmdhdmVFeHB3Z3QgbW92aW5nYXZlV2d0IG5leHRpbmRleCBuZXh0biBuZXh0bmV2biBuZXh0d2luZCBudG9zIG51bGwgbnVsbDEgbnVtQ29tYmluYXRpb25zIG9scyBvbHNtdCBvbHNtdENvbnRyb2xDcmVhdGUgb2xzcXIgb2xzcXIyIG9sc3FybXQgb25lcyBvcHRuIG9wdG5ldm4gb3J0aCBvdXR0eXAgcGFjZiBwYWNrZWRUb1NwIHBhY2tyIHBhcnNlIHBhdXNlIHBkZkNhdWNoeSBwZGZDaGkgcGRmRXhwIHBkZkdlblBhcmV0byBwZGZIeXBlckdlbyBwZGZMYXBsYWNlIHBkZkxvZ2lzdGljIHBkZm4gcGRmUG9pc3NvbiBwZGZSYXlsZWlnaCBwZGZXZWlidWxsIHBpIHBpbnYgcGludm10IHBsb3RBZGRBcnJvdyBwbG90QWRkQmFyIHBsb3RBZGRCb3ggcGxvdEFkZEhpc3QgcGxvdEFkZEhpc3RGIHBsb3RBZGRIaXN0UCBwbG90QWRkUG9sYXIgcGxvdEFkZFNjYXR0ZXIgcGxvdEFkZFNoYXBlIHBsb3RBZGRUZXh0Ym94IHBsb3RBZGRUUyBwbG90QWRkWFkgcGxvdEFyZWEgcGxvdEJhciBwbG90Qm94IHBsb3RDbGVhckxheW91dCBwbG90Q29udG91ciBwbG90Q3VzdG9tTGF5b3V0IHBsb3RHZXREZWZhdWx0cyBwbG90SGlzdCBwbG90SGlzdEYgcGxvdEhpc3RQIHBsb3RMYXlvdXQgcGxvdExvZ0xvZyBwbG90TG9nWCBwbG90TG9nWSBwbG90T3BlbldpbmRvdyBwbG90UG9sYXIgcGxvdFNhdmUgcGxvdFNjYXR0ZXIgcGxvdFNldEF4ZXNQZW4gcGxvdFNldEJhciBwbG90U2V0QmFyRmlsbCBwbG90U2V0QmFyU3RhY2tlZCBwbG90U2V0QmtkQ29sb3IgcGxvdFNldEZpbGwgcGxvdFNldEdyaWQgcGxvdFNldExlZ2VuZCBwbG90U2V0TGluZUNvbG9yIHBsb3RTZXRMaW5lU3R5bGUgcGxvdFNldExpbmVTeW1ib2wgcGxvdFNldExpbmVUaGlja25lc3MgcGxvdFNldE5ld1dpbmRvdyBwbG90U2V0VGl0bGUgcGxvdFNldFdoaWNoWUF4aXMgcGxvdFNldFhBeGlzU2hvdyBwbG90U2V0WExhYmVsIHBsb3RTZXRYUmFuZ2UgcGxvdFNldFhUaWNJbnRlcnZhbCBwbG90U2V0WFRpY0xhYmVsIHBsb3RTZXRZQXhpc1Nob3cgcGxvdFNldFlMYWJlbCBwbG90U2V0WVJhbmdlIHBsb3RTZXRaQXhpc1Nob3cgcGxvdFNldFpMYWJlbCBwbG90U3VyZmFjZSBwbG90VFMgcGxvdFhZIHBvbGFyIHBvbHljaGFyIHBvbHlldmFsIHBvbHlnYW1tYSBwb2x5aW50IHBvbHltYWtlIHBvbHltYXQgcG9seW1yb290IHBvbHltdWx0IHBvbHlyb290IHBxZ3dpbiBwcmV2aW91c2luZGV4IHByaW5jb21wIHByaW50Zm0gcHJpbnRmbXQgcHJvZGMgcHNpIHB1dGFycmF5IHB1dGYgcHV0dmFscyBwdkNyZWF0ZSBwdkdldEluZGV4IHB2R2V0UGFyTmFtZXMgcHZHZXRQYXJWZWN0b3IgcHZMZW5ndGggcHZMaXN0IHB2UGFjayBwdlBhY2tpIHB2UGFja20gcHZQYWNrbWkgcHZQYWNrcyBwdlBhY2tzaSBwdlBhY2tzbSBwdlBhY2tzbWkgcHZQdXRQYXJWZWN0b3IgcHZUZXN0IHB2VW5wYWNrIFFOZXd0b24gUU5ld3Rvbm10IFFOZXd0b25tdENvbnRyb2xDcmVhdGUgUU5ld3Rvbm10T3V0Q3JlYXRlIFFOZXd0b25TZXQgUVByb2cgUVByb2dtdCBRUHJvZ210SW5DcmVhdGUgcXFyIHFxcmUgcXFyZXAgcXIgcXJlIHFyZXAgcXJzb2wgcXJ0c29sIHF0eXIgcXR5cmUgcXR5cmVwIHF1YW50aWxlIHF1YW50aWxlZCBxeXIgcXlyZSBxeXJlcCBxeiByYW5rIHJhbmtpbmR4IHJlYWRyIHJlYWwgcmVjbGFzc2lmeSByZWNsYXNzaWZ5Q3V0cyByZWNvZGUgcmVjc2VyYXIgcmVjc2VyY3AgcmVjc2VycmMgcmVydW4gcmVzY2FsZSByZXNoYXBlIHJldHMgcmV2IHJmZnQgcmZmdGkgcmZmdGlwIHJmZnRuIHJmZnRucCByZmZ0cCBybmRCZXJub3VsbGkgcm5kQmV0YSBybmRCaW5vbWlhbCBybmRDYXVjaHkgcm5kQ2hpU3F1YXJlIHJuZENvbiBybmRDcmVhdGVTdGF0ZSBybmRFeHAgcm5kR2FtbWEgcm5kR2VvIHJuZEd1bWJlbCBybmRIeXBlckdlbyBybmRpIHJuZEtNYmV0YSBybmRLTWdhbSBybmRLTWkgcm5kS01uIHJuZEtNbmIgcm5kS01wIHJuZEtNdSBybmRLTXZtIHJuZExhcGxhY2Ugcm5kTENiZXRhIHJuZExDZ2FtIHJuZExDaSBybmRMQ24gcm5kTENuYiBybmRMQ3Agcm5kTEN1IHJuZExDdm0gcm5kTG9nTm9ybSBybmRNVHUgcm5kTVZuIHJuZE1WdCBybmRuIHJuZG5iIHJuZE5lZ0Jpbm9taWFsIHJuZHAgcm5kUG9pc3NvbiBybmRSYXlsZWlnaCBybmRTdGF0ZVNraXAgcm5kdSBybmR2bSBybmRXZWlidWxsIHJuZFdpc2hhcnQgcm90YXRlciByb3VuZCByb3dzIHJvd3NmIHJyZWYgc2FtcGxlRGF0YSBzYXRvc3RyQyBzYXZlZCBzYXZlU3RydWN0IHNhdmV3aW5kIHNjYWxlIHNjYWxlM2Qgc2NhbGVyciBzY2FsaW5mbmFubWlzcyBzY2FsbWlzcyBzY2h0b2Mgc2NodXIgc2VhcmNoc291cmNlcGF0aCBzZWVrciBzZWxlY3Qgc2VsaWYgc2VxYSBzZXFtIHNldGRpZiBzZXRkaWZzYSBzZXR2YXJzIHNldHZ3cm1vZGUgc2V0d2luZCBzaGVsbCBzaGlmdHIgc2luIHNpbmdsZWluZGV4IHNpbmggc2xlZXAgc29scGQgc29ydGMgc29ydGNjIHNvcnRkIHNvcnRoYyBzb3J0aGNjIHNvcnRpbmQgc29ydGluZGMgc29ydG1jIHNvcnRyIHNvcnRyYyBzcEJpY29uakdyYWRTb2wgc3BDaG9sIHNwQ29uakdyYWRTb2wgc3BDcmVhdGUgc3BEZW5zZVN1Ym1hdCBzcERpYWdSdk1hdCBzcEVpZ3Ygc3BFeWUgc3BMREwgc3BsaW5lIHNwTFUgc3BOdW1OWkUgc3BPbmVzIHNwcmVhZFNoZWV0UmVhZE0gc3ByZWFkU2hlZXRSZWFkU0Egc3ByZWFkU2hlZXRXcml0ZSBzcFNjYWxlIHNwU3VibWF0IHNwVG9EZW5zZSBzcFRyVERlbnNlIHNwVFNjYWxhciBzcFplcm9zIHNxcFNvbHZlIHNxcFNvbHZlTVQgc3FwU29sdmVNVENvbnRyb2xDcmVhdGUgc3FwU29sdmVNVGxhZ3JhbmdlQ3JlYXRlIHNxcFNvbHZlTVRvdXRDcmVhdGUgc3FwU29sdmVTZXQgc3FydCBzdGF0ZW1lbnRzIHN0ZGMgc3Rkc2Mgc3RvY3Ygc3RvZiBzdHJjb21iaW5lIHN0cmluZHggc3RybGVuIHN0cnB1dCBzdHJyaW5keCBzdHJzZWN0IHN0cnNwbGl0IHN0cnNwbGl0UGFkIHN0cnRvZHQgc3RydG9mIHN0cnRvZmNwbHggc3RydHJpbWwgc3RydHJpbXIgc3RydHJ1bmMgc3RydHJ1bmNsIHN0cnRydW5jcGFkIHN0cnRydW5jciBzdWJtYXQgc3Vic2NhdCBzdWJzdHV0ZSBzdWJ2ZWMgc3VtYyBzdW1yIHN1cmZhY2Ugc3ZkIHN2ZDEgc3ZkMiBzdmRjdXN2IHN2ZHMgc3ZkdXN2IHN5c3N0YXRlIHRhYiB0YW4gdGFuaCB0ZW1wbmFtZSB0aW1lIHRpbWVkdCB0aW1lc3RyIHRpbWV1dGMgdGl0bGUgdGtmMmVwcyB0a2YycHMgdG9jYXJ0IHRvZGF5ZHQgdG9lcGxpdHogdG9rZW4gdG9wb2xhciB0cmFwY2hrIHRyaWdhbW1hIHRyaW1yIHRydW5jIHR5cGUgdHlwZWN2IHR5cGVmIHVuaW9uIHVuaW9uc2EgdW5pcWluZHggdW5pcWluZHhzYSB1bmlxdWUgdW5pcXVlc2EgdXBtYXQgdXBtYXQxIHVwcGVyIHV0Y3RvZHQgdXRjdG9kdHYgdXRyaXNvbCB2YWxzIHZhckNvdk1TIHZhckNvdlhTIHZhcmdldCB2YXJnZXRsIHZhcm1hbGwgdmFybWFyZXMgdmFycHV0IHZhcnB1dGwgdmFydHlwZWYgdmNtIHZjbXMgdmN4IHZjeHMgdmVjIHZlY2ggdmVjciB2ZWN0b3IgdmdldCB2aWV3IHZpZXd4eXogdmxpc3Qgdm5hbWVjdiB2b2x1bWUgdnB1dCB2cmVhZCB2dHlwZWN2IHdhaXQgd2FpdGMgd2Fsa2luZGV4IHdoZXJlIHdpbmRvdyB3cml0ZXIgeGxhYmVsIHhsc0dldFNoZWV0Q291bnQgeGxzR2V0U2hlZXRTaXplIHhsc0dldFNoZWV0VHlwZXMgeGxzTWFrZVJhbmdlIHhsc1JlYWRNIHhsc1JlYWRTQSB4bHNXcml0ZSB4bHNXcml0ZU0geGxzV3JpdGVTQSB4cG5kIHh0aWNzIHh5IHh5eiB5bGFiZWwgeXRpY3MgemVyb3MgemV0YSB6bGFiZWwgenRpY3MgY2RmRW1waXJpY2FsIGRvdCBoNWNyZWF0ZSBoNW9wZW4gaDVyZWFkIGg1cmVhZEF0dHJpYnV0ZSBoNXdyaXRlIGg1d3JpdGVBdHRyaWJ1dGUgbGRsIHBsb3RBZGRFcnJvckJhciBwbG90QWRkU3VyZmFjZSBwbG90Q0RGRW1waXJpY2FsIHBsb3RTZXRDb2xvcm1hcCBwbG90U2V0Q29udG91ckxhYmVscyBwbG90U2V0TGVnZW5kRm9udCBwbG90U2V0VGV4dEludGVycHJldGVyIHBsb3RTZXRYVGljQ291bnQgcGxvdFNldFlUaWNDb3VudCBwbG90U2V0WkxldmVscyBwb3dlcm0gc3Ryam9pbiBzeWx2ZXN0ZXIgc3RydHJpbSIsbGl0ZXJhbDoiREJfQUZURVJfTEFTVF9ST1cgREJfQUxMX1RBQkxFUyBEQl9CQVRDSF9PUEVSQVRJT05TIERCX0JFRk9SRV9GSVJTVF9ST1cgREJfQkxPQiBEQl9FVkVOVF9OT1RJRklDQVRJT05TIERCX0ZJTklTSF9RVUVSWSBEQl9ISUdIX1BSRUNJU0lPTiBEQl9MQVNUX0lOU0VSVF9JRCBEQl9MT1dfUFJFQ0lTSU9OX0RPVUJMRSBEQl9MT1dfUFJFQ0lTSU9OX0lOVDMyIERCX0xPV19QUkVDSVNJT05fSU5UNjQgREJfTE9XX1BSRUNJU0lPTl9OVU1CRVJTIERCX01VTFRJUExFX1JFU1VMVF9TRVRTIERCX05BTUVEX1BMQUNFSE9MREVSUyBEQl9QT1NJVElPTkFMX1BMQUNFSE9MREVSUyBEQl9QUkVQQVJFRF9RVUVSSUVTIERCX1FVRVJZX1NJWkUgREJfU0lNUExFX0xPQ0tJTkcgREJfU1lTVEVNX1RBQkxFUyBEQl9UQUJMRVMgREJfVFJBTlNBQ1RJT05TIERCX1VOSUNPREUgREJfVklFV1MgX19TVERJTiBfX1NURE9VVCBfX1NUREVSUiBfX0ZJTEVfRElSIn0sbj1lLkNPTU1FTlQoIkAiLCJAIikscj17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIyIsZW5kOiIkIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImRlZmluZSBkZWZpbmVjc3wxMCB1bmRlZiBpZmRlZiBpZm5kZWYgaWZsaWdodCBpZmRsbGNhbGwgaWZtYWMgaWZvczJ3aW4gaWZ1bml4IGVsc2UgZW5kaWYgbGluZXNvbiBsaW5lc29mZiBzcmNmaWxlIHNyY2xpbmUifSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0se2JlZ2luS2V5d29yZHM6ImluY2x1ZGUiLGVuZDoiJCIsa2V5d29yZHM6eyJtZXRhLWtleXdvcmQiOiJpbmNsdWRlIn0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEtc3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4ifV19LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG5dfSxvPXtiZWdpbjovXGJzdHJ1Y3RccysvLGVuZDovXHMvLGtleXdvcmRzOiJzdHJ1Y3QiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9XX0scz1be2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGVuZHNXaXRoUGFyZW50OiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjovXC5cLlwuL30sZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbixvXX1dLGk9e2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSxyZWxldmFuY2U6MH0sYT1mdW5jdGlvbih0LHIsbyl7dmFyIGE9ZS5pbmhlcml0KHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOnQsZW5kOnIsZXhjbHVkZUVuZDohMCxjb250YWluczpbXS5jb25jYXQocyl9LG98fHt9KTtyZXR1cm4gYS5jb250YWlucy5wdXNoKGkpLGEuY29udGFpbnMucHVzaChlLkNfTlVNQkVSX01PREUpLGEuY29udGFpbnMucHVzaChlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFKSxhLmNvbnRhaW5zLnB1c2gobiksYX0sbD17Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IlxcYigiK3QuYnVpbHRfaW4uc3BsaXQoIiAiKS5qb2luKCJ8IikrIilcXGIifSx1PXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0scmVsZXZhbmNlOjB9LGM9e2JlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAsa2V5d29yZHM6dCxyZWxldmFuY2U6MCxjb250YWluczpbe2JlZ2luS2V5d29yZHM6dC5rZXl3b3JkfSxsLHtjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9XX0sZD17YmVnaW46L1woLyxlbmQ6L1wpLyxyZWxldmFuY2U6MCxrZXl3b3Jkczp7YnVpbHRfaW46dC5idWlsdF9pbixsaXRlcmFsOnQubGl0ZXJhbH0sY29udGFpbnM6W2UuQ19OVU1CRVJfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4sbCxjLHUsInNlbGYiXX07cmV0dXJuIGMuY29udGFpbnMucHVzaChkKSx7YWxpYXNlczpbImdzcyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6dCxpbGxlZ2FsOi8oXHtbJSNdfFslI11cfXwgPC0gKS8sY29udGFpbnM6W2UuQ19OVU1CRVJfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxuLHUscix7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjovXGJleHRlcm5hbCAobWF0cml4fHN0cmluZ3xhcnJheXxzcGFyc2UgbWF0cml4fHN0cnVjdHxwcm9jfGtleXdvcmR8Zm4pL30sYSgicHJvYyBrZXl3b3JkIiwiOyIpLGEoImZuIiwiPSIpLHtiZWdpbktleXdvcmRzOiJmb3IgdGhyZWFkZm9yIixlbmQ6LzsvLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4sZF19LHt2YXJpYW50czpbe2JlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFwuIitlLlVOREVSU0NPUkVfSURFTlRfUkV9LHtiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUrIlxccyo9In1dLHJlbGV2YW5jZTowfSxjLG9dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nY29kZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJuYyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsbGV4ZW1lczoiW0EtWl9dW0EtWjAtOV8uXSoiLGtleXdvcmRzOiJJRiBETyBXSElMRSBFTkRXSElMRSBDQUxMIEVORElGIFNVQiBFTkRTVUIgR09UTyBSRVBFQVQgRU5EUkVQRUFUIEVRIExUIEdUIE5FIEdFIExFIE9SIFhPUiIsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXCUifSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiKFtPXSkoWzAtOV0rKSJ9XS5jb25jYXQoW2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgvXCgvLC9cKS8pLGUuaW5oZXJpdChlLkNfTlVNQkVSX01PREUse2JlZ2luOiIoWy0rXT8oWzAtOV0qXFwuP1swLTldK1xcLj8pKXwiK2UuQ19OVU1CRVJfUkV9KSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSkse2NsYXNzTmFtZToibmFtZSIsYmVnaW46IihbR10pKFswLTldK1xcLj9bMC05XT8pIn0se2NsYXNzTmFtZToibmFtZSIsYmVnaW46IihbTV0pKFswLTldK1xcLj9bMC05XT8pIn0se2NsYXNzTmFtZToiYXR0ciIsYmVnaW46IihWQ3xWU3wjKSIsZW5kOiIoXFxkKykifSx7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjoiKFZaT0ZYfFZaT0ZZfFZaT0ZaKSJ9LHtjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjoiKEFUQU58QUJTfEFDT1N8QVNJTnxTSU58Q09TfEVYUHxGSVh8RlVQfFJPVU5EfExOfFRBTikoXFxbKSIsZW5kOiIoWy0rXT8oWzAtOV0qXFwuP1swLTldK1xcLj8pKShcXF0pIn0se2NsYXNzTmFtZToic3ltYm9sIix2YXJpYW50czpbe2JlZ2luOiJOIixlbmQ6IlxcZCsiLGlsbGVnYWw6IlxcVyJ9XX1dKX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2hlcmtpbi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJmZWF0dXJlIl0sa2V5d29yZHM6IkZlYXR1cmUgQmFja2dyb3VuZCBBYmlsaXR5IEJ1c2luZXNzIE5lZWQgU2NlbmFyaW8gU2NlbmFyaW9zIFNjZW5hcmlvIE91dGxpbmUgU2NlbmFyaW8gVGVtcGxhdGUgRXhhbXBsZXMgR2l2ZW4gQW5kIFRoZW4gQnV0IFdoZW4iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJcXCoiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQFteQFxcc10rIn0se2JlZ2luOiJcXHwiLGVuZDoiXFx8XFx3KiQiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJbXnxdKyJ9XX0se2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiI8IixlbmQ6Ij4ifSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyIiIicsZW5kOiciIiInfSxlLlFVT1RFX1NUUklOR19NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2xzbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOntrZXl3b3JkOiJicmVhayBjb250aW51ZSBkaXNjYXJkIGRvIGVsc2UgZm9yIGlmIHJldHVybiB3aGlsZSBzd2l0Y2ggY2FzZSBkZWZhdWx0IGF0dHJpYnV0ZSBiaW5kaW5nIGJ1ZmZlciBjY3cgY2VudHJvaWQgY2VudHJvaWQgdmFyeWluZyBjb2hlcmVudCBjb2x1bW5fbWFqb3IgY29uc3QgY3cgZGVwdGhfYW55IGRlcHRoX2dyZWF0ZXIgZGVwdGhfbGVzcyBkZXB0aF91bmNoYW5nZWQgZWFybHlfZnJhZ21lbnRfdGVzdHMgZXF1YWxfc3BhY2luZyBmbGF0IGZyYWN0aW9uYWxfZXZlbl9zcGFjaW5nIGZyYWN0aW9uYWxfb2RkX3NwYWNpbmcgaGlnaHAgaW4gaW5kZXggaW5vdXQgaW52YXJpYW50IGludm9jYXRpb25zIGlzb2xpbmVzIGxheW91dCBsaW5lX3N0cmlwIGxpbmVzIGxpbmVzX2FkamFjZW5jeSBsb2NhbF9zaXplX3ggbG9jYWxfc2l6ZV95IGxvY2FsX3NpemVfeiBsb2NhdGlvbiBsb3dwIG1heF92ZXJ0aWNlcyBtZWRpdW1wIG5vcGVyc3BlY3RpdmUgb2Zmc2V0IG9yaWdpbl91cHBlcl9sZWZ0IG91dCBwYWNrZWQgcGF0Y2ggcGl4ZWxfY2VudGVyX2ludGVnZXIgcG9pbnRfbW9kZSBwb2ludHMgcHJlY2lzZSBwcmVjaXNpb24gcXVhZHMgcjExZl9nMTFmX2IxMGYgcjE2IHIxNl9zbm9ybSByMTZmIHIxNmkgcjE2dWkgcjMyZiByMzJpIHIzMnVpIHI4IHI4X3Nub3JtIHI4aSByOHVpIHJlYWRvbmx5IHJlc3RyaWN0IHJnMTYgcmcxNl9zbm9ybSByZzE2ZiByZzE2aSByZzE2dWkgcmczMmYgcmczMmkgcmczMnVpIHJnOCByZzhfc25vcm0gcmc4aSByZzh1aSByZ2IxMF9hMiByZ2IxMF9hMnVpIHJnYmExNiByZ2JhMTZfc25vcm0gcmdiYTE2ZiByZ2JhMTZpIHJnYmExNnVpIHJnYmEzMmYgcmdiYTMyaSByZ2JhMzJ1aSByZ2JhOCByZ2JhOF9zbm9ybSByZ2JhOGkgcmdiYTh1aSByb3dfbWFqb3Igc2FtcGxlIHNoYXJlZCBzbW9vdGggc3RkMTQwIHN0ZDQzMCBzdHJlYW0gdHJpYW5nbGVfc3RyaXAgdHJpYW5nbGVzIHRyaWFuZ2xlc19hZGphY2VuY3kgdW5pZm9ybSB2YXJ5aW5nIHZlcnRpY2VzIHZvbGF0aWxlIHdyaXRlb25seSIsdHlwZToiYXRvbWljX3VpbnQgYm9vbCBidmVjMiBidmVjMyBidmVjNCBkbWF0MiBkbWF0MngyIGRtYXQyeDMgZG1hdDJ4NCBkbWF0MyBkbWF0M3gyIGRtYXQzeDMgZG1hdDN4NCBkbWF0NCBkbWF0NHgyIGRtYXQ0eDMgZG1hdDR4NCBkb3VibGUgZHZlYzIgZHZlYzMgZHZlYzQgZmxvYXQgaWltYWdlMUQgaWltYWdlMURBcnJheSBpaW1hZ2UyRCBpaW1hZ2UyREFycmF5IGlpbWFnZTJETVMgaWltYWdlMkRNU0FycmF5IGlpbWFnZTJEUmVjdCBpaW1hZ2UzRCBpaW1hZ2VCdWZmZXJpaW1hZ2VDdWJlIGlpbWFnZUN1YmVBcnJheSBpbWFnZTFEIGltYWdlMURBcnJheSBpbWFnZTJEIGltYWdlMkRBcnJheSBpbWFnZTJETVMgaW1hZ2UyRE1TQXJyYXkgaW1hZ2UyRFJlY3QgaW1hZ2UzRCBpbWFnZUJ1ZmZlciBpbWFnZUN1YmUgaW1hZ2VDdWJlQXJyYXkgaW50IGlzYW1wbGVyMUQgaXNhbXBsZXIxREFycmF5IGlzYW1wbGVyMkQgaXNhbXBsZXIyREFycmF5IGlzYW1wbGVyMkRNUyBpc2FtcGxlcjJETVNBcnJheSBpc2FtcGxlcjJEUmVjdCBpc2FtcGxlcjNEIGlzYW1wbGVyQnVmZmVyIGlzYW1wbGVyQ3ViZSBpc2FtcGxlckN1YmVBcnJheSBpdmVjMiBpdmVjMyBpdmVjNCBtYXQyIG1hdDJ4MiBtYXQyeDMgbWF0Mng0IG1hdDMgbWF0M3gyIG1hdDN4MyBtYXQzeDQgbWF0NCBtYXQ0eDIgbWF0NHgzIG1hdDR4NCBzYW1wbGVyMUQgc2FtcGxlcjFEQXJyYXkgc2FtcGxlcjFEQXJyYXlTaGFkb3cgc2FtcGxlcjFEU2hhZG93IHNhbXBsZXIyRCBzYW1wbGVyMkRBcnJheSBzYW1wbGVyMkRBcnJheVNoYWRvdyBzYW1wbGVyMkRNUyBzYW1wbGVyMkRNU0FycmF5IHNhbXBsZXIyRFJlY3Qgc2FtcGxlcjJEUmVjdFNoYWRvdyBzYW1wbGVyMkRTaGFkb3cgc2FtcGxlcjNEIHNhbXBsZXJCdWZmZXIgc2FtcGxlckN1YmUgc2FtcGxlckN1YmVBcnJheSBzYW1wbGVyQ3ViZUFycmF5U2hhZG93IHNhbXBsZXJDdWJlU2hhZG93IGltYWdlMUQgdWltYWdlMURBcnJheSB1aW1hZ2UyRCB1aW1hZ2UyREFycmF5IHVpbWFnZTJETVMgdWltYWdlMkRNU0FycmF5IHVpbWFnZTJEUmVjdCB1aW1hZ2UzRCB1aW1hZ2VCdWZmZXIgdWltYWdlQ3ViZSB1aW1hZ2VDdWJlQXJyYXkgdWludCB1c2FtcGxlcjFEIHVzYW1wbGVyMURBcnJheSB1c2FtcGxlcjJEIHVzYW1wbGVyMkRBcnJheSB1c2FtcGxlcjJETVMgdXNhbXBsZXIyRE1TQXJyYXkgdXNhbXBsZXIyRFJlY3QgdXNhbXBsZXIzRCBzYW1wbGVyQnVmZmVyIHVzYW1wbGVyQ3ViZSB1c2FtcGxlckN1YmVBcnJheSB1dmVjMiB1dmVjMyB1dmVjNCB2ZWMyIHZlYzMgdmVjNCB2b2lkIixidWlsdF9pbjoiZ2xfTWF4QXRvbWljQ291bnRlckJpbmRpbmdzIGdsX01heEF0b21pY0NvdW50ZXJCdWZmZXJTaXplIGdsX01heENsaXBEaXN0YW5jZXMgZ2xfTWF4Q2xpcFBsYW5lcyBnbF9NYXhDb21iaW5lZEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heENvbWJpbmVkQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tYmluZWRJbWFnZVVuaWZvcm1zIGdsX01heENvbWJpbmVkSW1hZ2VVbml0c0FuZEZyYWdtZW50T3V0cHV0cyBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIGdsX01heENvbXB1dGVBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhDb21wdXRlQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tcHV0ZUltYWdlVW5pZm9ybXMgZ2xfTWF4Q29tcHV0ZVRleHR1cmVJbWFnZVVuaXRzIGdsX01heENvbXB1dGVVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhDb21wdXRlV29ya0dyb3VwQ291bnQgZ2xfTWF4Q29tcHV0ZVdvcmtHcm91cFNpemUgZ2xfTWF4RHJhd0J1ZmZlcnMgZ2xfTWF4RnJhZ21lbnRBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhGcmFnbWVudEF0b21pY0NvdW50ZXJzIGdsX01heEZyYWdtZW50SW1hZ2VVbmlmb3JtcyBnbF9NYXhGcmFnbWVudElucHV0Q29tcG9uZW50cyBnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyBnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgZ2xfTWF4R2VvbWV0cnlBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhHZW9tZXRyeUF0b21pY0NvdW50ZXJzIGdsX01heEdlb21ldHJ5SW1hZ2VVbmlmb3JtcyBnbF9NYXhHZW9tZXRyeUlucHV0Q29tcG9uZW50cyBnbF9NYXhHZW9tZXRyeU91dHB1dENvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlPdXRwdXRWZXJ0aWNlcyBnbF9NYXhHZW9tZXRyeVRleHR1cmVJbWFnZVVuaXRzIGdsX01heEdlb21ldHJ5VG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlWYXJ5aW5nQ29tcG9uZW50cyBnbF9NYXhJbWFnZVNhbXBsZXMgZ2xfTWF4SW1hZ2VVbml0cyBnbF9NYXhMaWdodHMgZ2xfTWF4UGF0Y2hWZXJ0aWNlcyBnbF9NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgZ2xfTWF4VGVzc0NvbnRyb2xBdG9taWNDb3VudGVyQnVmZmVycyBnbF9NYXhUZXNzQ29udHJvbEF0b21pY0NvdW50ZXJzIGdsX01heFRlc3NDb250cm9sSW1hZ2VVbmlmb3JtcyBnbF9NYXhUZXNzQ29udHJvbElucHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0NvbnRyb2xUZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhUZXNzQ29udHJvbFRvdGFsT3V0cHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbFVuaWZvcm1Db21wb25lbnRzIGdsX01heFRlc3NFdmFsdWF0aW9uQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VGVzc0V2YWx1YXRpb25BdG9taWNDb3VudGVycyBnbF9NYXhUZXNzRXZhbHVhdGlvbkltYWdlVW5pZm9ybXMgZ2xfTWF4VGVzc0V2YWx1YXRpb25JbnB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0V2YWx1YXRpb25PdXRwdXRDb21wb25lbnRzIGdsX01heFRlc3NFdmFsdWF0aW9uVGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4VGVzc0V2YWx1YXRpb25Vbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhUZXNzR2VuTGV2ZWwgZ2xfTWF4VGVzc1BhdGNoQ29tcG9uZW50cyBnbF9NYXhUZXh0dXJlQ29vcmRzIGdsX01heFRleHR1cmVJbWFnZVVuaXRzIGdsX01heFRleHR1cmVVbml0cyBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cyBnbF9NYXhWYXJ5aW5nRmxvYXRzIGdsX01heFZhcnlpbmdWZWN0b3JzIGdsX01heFZlcnRleEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heFZlcnRleEF0b21pY0NvdW50ZXJzIGdsX01heFZlcnRleEF0dHJpYnMgZ2xfTWF4VmVydGV4SW1hZ2VVbmlmb3JtcyBnbF9NYXhWZXJ0ZXhPdXRwdXRDb21wb25lbnRzIGdsX01heFZlcnRleE91dHB1dFZlY3RvcnMgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgZ2xfTWF4Vmlld3BvcnRzIGdsX01pblByb2dyYW1UZXhlbE9mZnNldCBnbF9CYWNrQ29sb3IgZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IGdsX0JhY2tMaWdodFByb2R1Y3QgZ2xfQmFja01hdGVyaWFsIGdsX0JhY2tTZWNvbmRhcnlDb2xvciBnbF9DbGlwRGlzdGFuY2UgZ2xfQ2xpcFBsYW5lIGdsX0NsaXBWZXJ0ZXggZ2xfQ29sb3IgZ2xfRGVwdGhSYW5nZSBnbF9FeWVQbGFuZVEgZ2xfRXllUGxhbmVSIGdsX0V5ZVBsYW5lUyBnbF9FeWVQbGFuZVQgZ2xfRm9nIGdsX0ZvZ0Nvb3JkIGdsX0ZvZ0ZyYWdDb29yZCBnbF9GcmFnQ29sb3IgZ2xfRnJhZ0Nvb3JkIGdsX0ZyYWdEYXRhIGdsX0ZyYWdEZXB0aCBnbF9Gcm9udENvbG9yIGdsX0Zyb250RmFjaW5nIGdsX0Zyb250TGlnaHRNb2RlbFByb2R1Y3QgZ2xfRnJvbnRMaWdodFByb2R1Y3QgZ2xfRnJvbnRNYXRlcmlhbCBnbF9Gcm9udFNlY29uZGFyeUNvbG9yIGdsX0dsb2JhbEludm9jYXRpb25JRCBnbF9JbnN0YW5jZUlEIGdsX0ludm9jYXRpb25JRCBnbF9MYXllciBnbF9MaWdodE1vZGVsIGdsX0xpZ2h0U291cmNlIGdsX0xvY2FsSW52b2NhdGlvbklEIGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IGdsX01vZGVsVmlld01hdHJpeCBnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlIGdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2UgZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UgZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UgZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9NdWx0aVRleENvb3JkMCBnbF9NdWx0aVRleENvb3JkMSBnbF9NdWx0aVRleENvb3JkMiBnbF9NdWx0aVRleENvb3JkMyBnbF9NdWx0aVRleENvb3JkNCBnbF9NdWx0aVRleENvb3JkNSBnbF9NdWx0aVRleENvb3JkNiBnbF9NdWx0aVRleENvb3JkNyBnbF9Ob3JtYWwgZ2xfTm9ybWFsTWF0cml4IGdsX05vcm1hbFNjYWxlIGdsX051bVNhbXBsZXMgZ2xfTnVtV29ya0dyb3VwcyBnbF9PYmplY3RQbGFuZVEgZ2xfT2JqZWN0UGxhbmVSIGdsX09iamVjdFBsYW5lUyBnbF9PYmplY3RQbGFuZVQgZ2xfUGF0Y2hWZXJ0aWNlc0luIGdsX1BvaW50IGdsX1BvaW50Q29vcmQgZ2xfUG9pbnRTaXplIGdsX1Bvc2l0aW9uIGdsX1ByaW1pdGl2ZUlEIGdsX1ByaW1pdGl2ZUlESW4gZ2xfUHJvamVjdGlvbk1hdHJpeCBnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSBnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9Qcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIGdsX1NhbXBsZUlEIGdsX1NhbXBsZU1hc2sgZ2xfU2FtcGxlTWFza0luIGdsX1NhbXBsZVBvc2l0aW9uIGdsX1NlY29uZGFyeUNvbG9yIGdsX1Rlc3NDb29yZCBnbF9UZXNzTGV2ZWxJbm5lciBnbF9UZXNzTGV2ZWxPdXRlciBnbF9UZXhDb29yZCBnbF9UZXh0dXJlRW52Q29sb3IgZ2xfVGV4dHVyZU1hdHJpeCBnbF9UZXh0dXJlTWF0cml4SW52ZXJzZSBnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIGdsX1ZlcnRleCBnbF9WZXJ0ZXhJRCBnbF9WaWV3cG9ydEluZGV4IGdsX1dvcmtHcm91cElEIGdsX1dvcmtHcm91cFNpemUgZ2xfaW4gZ2xfb3V0IEVtaXRTdHJlYW1WZXJ0ZXggRW1pdFZlcnRleCBFbmRQcmltaXRpdmUgRW5kU3RyZWFtUHJpbWl0aXZlIGFicyBhY29zIGFjb3NoIGFsbCBhbnkgYXNpbiBhc2luaCBhdGFuIGF0YW5oIGF0b21pY0FkZCBhdG9taWNBbmQgYXRvbWljQ29tcFN3YXAgYXRvbWljQ291bnRlciBhdG9taWNDb3VudGVyRGVjcmVtZW50IGF0b21pY0NvdW50ZXJJbmNyZW1lbnQgYXRvbWljRXhjaGFuZ2UgYXRvbWljTWF4IGF0b21pY01pbiBhdG9taWNPciBhdG9taWNYb3IgYmFycmllciBiaXRDb3VudCBiaXRmaWVsZEV4dHJhY3QgYml0ZmllbGRJbnNlcnQgYml0ZmllbGRSZXZlcnNlIGNlaWwgY2xhbXAgY29zIGNvc2ggY3Jvc3MgZEZkeCBkRmR5IGRlZ3JlZXMgZGV0ZXJtaW5hbnQgZGlzdGFuY2UgZG90IGVxdWFsIGV4cCBleHAyIGZhY2Vmb3J3YXJkIGZpbmRMU0IgZmluZE1TQiBmbG9hdEJpdHNUb0ludCBmbG9hdEJpdHNUb1VpbnQgZmxvb3IgZm1hIGZyYWN0IGZyZXhwIGZ0cmFuc2Zvcm0gZndpZHRoIGdyZWF0ZXJUaGFuIGdyZWF0ZXJUaGFuRXF1YWwgZ3JvdXBNZW1vcnlCYXJyaWVyIGltYWdlQXRvbWljQWRkIGltYWdlQXRvbWljQW5kIGltYWdlQXRvbWljQ29tcFN3YXAgaW1hZ2VBdG9taWNFeGNoYW5nZSBpbWFnZUF0b21pY01heCBpbWFnZUF0b21pY01pbiBpbWFnZUF0b21pY09yIGltYWdlQXRvbWljWG9yIGltYWdlTG9hZCBpbWFnZVNpemUgaW1hZ2VTdG9yZSBpbXVsRXh0ZW5kZWQgaW50Qml0c1RvRmxvYXQgaW50ZXJwb2xhdGVBdENlbnRyb2lkIGludGVycG9sYXRlQXRPZmZzZXQgaW50ZXJwb2xhdGVBdFNhbXBsZSBpbnZlcnNlIGludmVyc2VzcXJ0IGlzaW5mIGlzbmFuIGxkZXhwIGxlbmd0aCBsZXNzVGhhbiBsZXNzVGhhbkVxdWFsIGxvZyBsb2cyIG1hdHJpeENvbXBNdWx0IG1heCBtZW1vcnlCYXJyaWVyIG1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyIG1lbW9yeUJhcnJpZXJCdWZmZXIgbWVtb3J5QmFycmllckltYWdlIG1lbW9yeUJhcnJpZXJTaGFyZWQgbWluIG1peCBtb2QgbW9kZiBub2lzZTEgbm9pc2UyIG5vaXNlMyBub2lzZTQgbm9ybWFsaXplIG5vdCBub3RFcXVhbCBvdXRlclByb2R1Y3QgcGFja0RvdWJsZTJ4MzIgcGFja0hhbGYyeDE2IHBhY2tTbm9ybTJ4MTYgcGFja1Nub3JtNHg4IHBhY2tVbm9ybTJ4MTYgcGFja1Vub3JtNHg4IHBvdyByYWRpYW5zIHJlZmxlY3QgcmVmcmFjdCByb3VuZCByb3VuZEV2ZW4gc2hhZG93MUQgc2hhZG93MURMb2Qgc2hhZG93MURQcm9qIHNoYWRvdzFEUHJvakxvZCBzaGFkb3cyRCBzaGFkb3cyRExvZCBzaGFkb3cyRFByb2ogc2hhZG93MkRQcm9qTG9kIHNpZ24gc2luIHNpbmggc21vb3Roc3RlcCBzcXJ0IHN0ZXAgdGFuIHRhbmggdGV4ZWxGZXRjaCB0ZXhlbEZldGNoT2Zmc2V0IHRleHR1cmUgdGV4dHVyZTFEIHRleHR1cmUxRExvZCB0ZXh0dXJlMURQcm9qIHRleHR1cmUxRFByb2pMb2QgdGV4dHVyZTJEIHRleHR1cmUyRExvZCB0ZXh0dXJlMkRQcm9qIHRleHR1cmUyRFByb2pMb2QgdGV4dHVyZTNEIHRleHR1cmUzRExvZCB0ZXh0dXJlM0RQcm9qIHRleHR1cmUzRFByb2pMb2QgdGV4dHVyZUN1YmUgdGV4dHVyZUN1YmVMb2QgdGV4dHVyZUdhdGhlciB0ZXh0dXJlR2F0aGVyT2Zmc2V0IHRleHR1cmVHYXRoZXJPZmZzZXRzIHRleHR1cmVHcmFkIHRleHR1cmVHcmFkT2Zmc2V0IHRleHR1cmVMb2QgdGV4dHVyZUxvZE9mZnNldCB0ZXh0dXJlT2Zmc2V0IHRleHR1cmVQcm9qIHRleHR1cmVQcm9qR3JhZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQgdGV4dHVyZVByb2pMb2QgdGV4dHVyZVByb2pMb2RPZmZzZXQgdGV4dHVyZVByb2pPZmZzZXQgdGV4dHVyZVF1ZXJ5TGV2ZWxzIHRleHR1cmVRdWVyeUxvZCB0ZXh0dXJlU2l6ZSB0cmFuc3Bvc2UgdHJ1bmMgdWFkZENhcnJ5IHVpbnRCaXRzVG9GbG9hdCB1bXVsRXh0ZW5kZWQgdW5wYWNrRG91YmxlMngzMiB1bnBhY2tIYWxmMngxNiB1bnBhY2tTbm9ybTJ4MTYgdW5wYWNrU25vcm00eDggdW5wYWNrVW5vcm0yeDE2IHVucGFja1Vub3JtNHg4IHVzdWJCb3Jyb3ciLGxpdGVyYWw6InRydWUgZmFsc2UifSxpbGxlZ2FsOiciJyxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dtbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJnbWwiLCJHTUwiXSxjYXNlX2luc2Vuc2l0aXZlOiExLGtleXdvcmRzOntrZXl3b3JkczoiYmVnaW4gZW5kIGlmIHRoZW4gZWxzZSB3aGlsZSBkbyBmb3IgYnJlYWsgY29udGludWUgd2l0aCB1bnRpbCByZXBlYXQgZXhpdCBhbmQgb3IgeG9yIG5vdCByZXR1cm4gbW9kIGRpdiBzd2l0Y2ggY2FzZSBkZWZhdWx0IHZhciBnbG9iYWx2YXIgZW51bSAjbWFjcm8gI3JlZ2lvbiAjZW5kcmVnaW9uIixidWlsdF9pbjoiaXNfcmVhbCBpc19zdHJpbmcgaXNfYXJyYXkgaXNfdW5kZWZpbmVkIGlzX2ludDMyIGlzX2ludDY0IGlzX3B0ciBpc192ZWMzIGlzX3ZlYzQgaXNfbWF0cml4IGlzX2Jvb2wgdHlwZW9mIHZhcmlhYmxlX2dsb2JhbF9leGlzdHMgdmFyaWFibGVfZ2xvYmFsX2dldCB2YXJpYWJsZV9nbG9iYWxfc2V0IHZhcmlhYmxlX2luc3RhbmNlX2V4aXN0cyB2YXJpYWJsZV9pbnN0YW5jZV9nZXQgdmFyaWFibGVfaW5zdGFuY2Vfc2V0IHZhcmlhYmxlX2luc3RhbmNlX2dldF9uYW1lcyBhcnJheV9sZW5ndGhfMWQgYXJyYXlfbGVuZ3RoXzJkIGFycmF5X2hlaWdodF8yZCBhcnJheV9lcXVhbHMgYXJyYXlfY3JlYXRlIGFycmF5X2NvcHkgcmFuZG9tIHJhbmRvbV9yYW5nZSBpcmFuZG9tIGlyYW5kb21fcmFuZ2UgcmFuZG9tX3NldF9zZWVkIHJhbmRvbV9nZXRfc2VlZCByYW5kb21pemUgcmFuZG9taXNlIGNob29zZSBhYnMgcm91bmQgZmxvb3IgY2VpbCBzaWduIGZyYWMgc3FydCBzcXIgZXhwIGxuIGxvZzIgbG9nMTAgc2luIGNvcyB0YW4gYXJjc2luIGFyY2NvcyBhcmN0YW4gYXJjdGFuMiBkc2luIGRjb3MgZHRhbiBkYXJjc2luIGRhcmNjb3MgZGFyY3RhbiBkYXJjdGFuMiBkZWd0b3JhZCByYWR0b2RlZyBwb3dlciBsb2duIG1pbiBtYXggbWVhbiBtZWRpYW4gY2xhbXAgbGVycCBkb3RfcHJvZHVjdCBkb3RfcHJvZHVjdF8zZCBkb3RfcHJvZHVjdF9ub3JtYWxpc2VkIGRvdF9wcm9kdWN0XzNkX25vcm1hbGlzZWQgZG90X3Byb2R1Y3Rfbm9ybWFsaXplZCBkb3RfcHJvZHVjdF8zZF9ub3JtYWxpemVkIG1hdGhfc2V0X2Vwc2lsb24gbWF0aF9nZXRfZXBzaWxvbiBhbmdsZV9kaWZmZXJlbmNlIHBvaW50X2Rpc3RhbmNlXzNkIHBvaW50X2Rpc3RhbmNlIHBvaW50X2RpcmVjdGlvbiBsZW5ndGhkaXJfeCBsZW5ndGhkaXJfeSByZWFsIHN0cmluZyBpbnQ2NCBwdHIgc3RyaW5nX2Zvcm1hdCBjaHIgYW5zaV9jaGFyIG9yZCBzdHJpbmdfbGVuZ3RoIHN0cmluZ19ieXRlX2xlbmd0aCBzdHJpbmdfcG9zIHN0cmluZ19jb3B5IHN0cmluZ19jaGFyX2F0IHN0cmluZ19vcmRfYXQgc3RyaW5nX2J5dGVfYXQgc3RyaW5nX3NldF9ieXRlX2F0IHN0cmluZ19kZWxldGUgc3RyaW5nX2luc2VydCBzdHJpbmdfbG93ZXIgc3RyaW5nX3VwcGVyIHN0cmluZ19yZXBlYXQgc3RyaW5nX2xldHRlcnMgc3RyaW5nX2RpZ2l0cyBzdHJpbmdfbGV0dGVyc2RpZ2l0cyBzdHJpbmdfcmVwbGFjZSBzdHJpbmdfcmVwbGFjZV9hbGwgc3RyaW5nX2NvdW50IHN0cmluZ19oYXNoX3RvX25ld2xpbmUgY2xpcGJvYXJkX2hhc190ZXh0IGNsaXBib2FyZF9zZXRfdGV4dCBjbGlwYm9hcmRfZ2V0X3RleHQgZGF0ZV9jdXJyZW50X2RhdGV0aW1lIGRhdGVfY3JlYXRlX2RhdGV0aW1lIGRhdGVfdmFsaWRfZGF0ZXRpbWUgZGF0ZV9pbmNfeWVhciBkYXRlX2luY19tb250aCBkYXRlX2luY193ZWVrIGRhdGVfaW5jX2RheSBkYXRlX2luY19ob3VyIGRhdGVfaW5jX21pbnV0ZSBkYXRlX2luY19zZWNvbmQgZGF0ZV9nZXRfeWVhciBkYXRlX2dldF9tb250aCBkYXRlX2dldF93ZWVrIGRhdGVfZ2V0X2RheSBkYXRlX2dldF9ob3VyIGRhdGVfZ2V0X21pbnV0ZSBkYXRlX2dldF9zZWNvbmQgZGF0ZV9nZXRfd2Vla2RheSBkYXRlX2dldF9kYXlfb2ZfeWVhciBkYXRlX2dldF9ob3VyX29mX3llYXIgZGF0ZV9nZXRfbWludXRlX29mX3llYXIgZGF0ZV9nZXRfc2Vjb25kX29mX3llYXIgZGF0ZV95ZWFyX3NwYW4gZGF0ZV9tb250aF9zcGFuIGRhdGVfd2Vla19zcGFuIGRhdGVfZGF5X3NwYW4gZGF0ZV9ob3VyX3NwYW4gZGF0ZV9taW51dGVfc3BhbiBkYXRlX3NlY29uZF9zcGFuIGRhdGVfY29tcGFyZV9kYXRldGltZSBkYXRlX2NvbXBhcmVfZGF0ZSBkYXRlX2NvbXBhcmVfdGltZSBkYXRlX2RhdGVfb2YgZGF0ZV90aW1lX29mIGRhdGVfZGF0ZXRpbWVfc3RyaW5nIGRhdGVfZGF0ZV9zdHJpbmcgZGF0ZV90aW1lX3N0cmluZyBkYXRlX2RheXNfaW5fbW9udGggZGF0ZV9kYXlzX2luX3llYXIgZGF0ZV9sZWFwX3llYXIgZGF0ZV9pc190b2RheSBkYXRlX3NldF90aW1lem9uZSBkYXRlX2dldF90aW1lem9uZSBnYW1lX3NldF9zcGVlZCBnYW1lX2dldF9zcGVlZCBtb3Rpb25fc2V0IG1vdGlvbl9hZGQgcGxhY2VfZnJlZSBwbGFjZV9lbXB0eSBwbGFjZV9tZWV0aW5nIHBsYWNlX3NuYXBwZWQgbW92ZV9yYW5kb20gbW92ZV9zbmFwIG1vdmVfdG93YXJkc19wb2ludCBtb3ZlX2NvbnRhY3Rfc29saWQgbW92ZV9jb250YWN0X2FsbCBtb3ZlX291dHNpZGVfc29saWQgbW92ZV9vdXRzaWRlX2FsbCBtb3ZlX2JvdW5jZV9zb2xpZCBtb3ZlX2JvdW5jZV9hbGwgbW92ZV93cmFwIGRpc3RhbmNlX3RvX3BvaW50IGRpc3RhbmNlX3RvX29iamVjdCBwb3NpdGlvbl9lbXB0eSBwb3NpdGlvbl9tZWV0aW5nIHBhdGhfc3RhcnQgcGF0aF9lbmQgbXBfbGluZWFyX3N0ZXAgbXBfcG90ZW50aWFsX3N0ZXAgbXBfbGluZWFyX3N0ZXBfb2JqZWN0IG1wX3BvdGVudGlhbF9zdGVwX29iamVjdCBtcF9wb3RlbnRpYWxfc2V0dGluZ3MgbXBfbGluZWFyX3BhdGggbXBfcG90ZW50aWFsX3BhdGggbXBfbGluZWFyX3BhdGhfb2JqZWN0IG1wX3BvdGVudGlhbF9wYXRoX29iamVjdCBtcF9ncmlkX2NyZWF0ZSBtcF9ncmlkX2Rlc3Ryb3kgbXBfZ3JpZF9jbGVhcl9hbGwgbXBfZ3JpZF9jbGVhcl9jZWxsIG1wX2dyaWRfY2xlYXJfcmVjdGFuZ2xlIG1wX2dyaWRfYWRkX2NlbGwgbXBfZ3JpZF9nZXRfY2VsbCBtcF9ncmlkX2FkZF9yZWN0YW5nbGUgbXBfZ3JpZF9hZGRfaW5zdGFuY2VzIG1wX2dyaWRfcGF0aCBtcF9ncmlkX2RyYXcgbXBfZ3JpZF90b19kc19ncmlkIGNvbGxpc2lvbl9wb2ludCBjb2xsaXNpb25fcmVjdGFuZ2xlIGNvbGxpc2lvbl9jaXJjbGUgY29sbGlzaW9uX2VsbGlwc2UgY29sbGlzaW9uX2xpbmUgY29sbGlzaW9uX3BvaW50X2xpc3QgY29sbGlzaW9uX3JlY3RhbmdsZV9saXN0IGNvbGxpc2lvbl9jaXJjbGVfbGlzdCBjb2xsaXNpb25fZWxsaXBzZV9saXN0IGNvbGxpc2lvbl9saW5lX2xpc3QgaW5zdGFuY2VfcG9zaXRpb25fbGlzdCBpbnN0YW5jZV9wbGFjZV9saXN0IHBvaW50X2luX3JlY3RhbmdsZSBwb2ludF9pbl90cmlhbmdsZSBwb2ludF9pbl9jaXJjbGUgcmVjdGFuZ2xlX2luX3JlY3RhbmdsZSByZWN0YW5nbGVfaW5fdHJpYW5nbGUgcmVjdGFuZ2xlX2luX2NpcmNsZSBpbnN0YW5jZV9maW5kIGluc3RhbmNlX2V4aXN0cyBpbnN0YW5jZV9udW1iZXIgaW5zdGFuY2VfcG9zaXRpb24gaW5zdGFuY2VfbmVhcmVzdCBpbnN0YW5jZV9mdXJ0aGVzdCBpbnN0YW5jZV9wbGFjZSBpbnN0YW5jZV9jcmVhdGVfZGVwdGggaW5zdGFuY2VfY3JlYXRlX2xheWVyIGluc3RhbmNlX2NvcHkgaW5zdGFuY2VfY2hhbmdlIGluc3RhbmNlX2Rlc3Ryb3kgcG9zaXRpb25fZGVzdHJveSBwb3NpdGlvbl9jaGFuZ2UgaW5zdGFuY2VfaWRfZ2V0IGluc3RhbmNlX2RlYWN0aXZhdGVfYWxsIGluc3RhbmNlX2RlYWN0aXZhdGVfb2JqZWN0IGluc3RhbmNlX2RlYWN0aXZhdGVfcmVnaW9uIGluc3RhbmNlX2FjdGl2YXRlX2FsbCBpbnN0YW5jZV9hY3RpdmF0ZV9vYmplY3QgaW5zdGFuY2VfYWN0aXZhdGVfcmVnaW9uIHJvb21fZ290byByb29tX2dvdG9fcHJldmlvdXMgcm9vbV9nb3RvX25leHQgcm9vbV9wcmV2aW91cyByb29tX25leHQgcm9vbV9yZXN0YXJ0IGdhbWVfZW5kIGdhbWVfcmVzdGFydCBnYW1lX2xvYWQgZ2FtZV9zYXZlIGdhbWVfc2F2ZV9idWZmZXIgZ2FtZV9sb2FkX2J1ZmZlciBldmVudF9wZXJmb3JtIGV2ZW50X3VzZXIgZXZlbnRfcGVyZm9ybV9vYmplY3QgZXZlbnRfaW5oZXJpdGVkIHNob3dfZGVidWdfbWVzc2FnZSBzaG93X2RlYnVnX292ZXJsYXkgZGVidWdfZXZlbnQgZGVidWdfZ2V0X2NhbGxzdGFjayBhbGFybV9nZXQgYWxhcm1fc2V0IGZvbnRfdGV4dHVyZV9wYWdlX3NpemUga2V5Ym9hcmRfc2V0X21hcCBrZXlib2FyZF9nZXRfbWFwIGtleWJvYXJkX3Vuc2V0X21hcCBrZXlib2FyZF9jaGVjayBrZXlib2FyZF9jaGVja19wcmVzc2VkIGtleWJvYXJkX2NoZWNrX3JlbGVhc2VkIGtleWJvYXJkX2NoZWNrX2RpcmVjdCBrZXlib2FyZF9nZXRfbnVtbG9jayBrZXlib2FyZF9zZXRfbnVtbG9jayBrZXlib2FyZF9rZXlfcHJlc3Mga2V5Ym9hcmRfa2V5X3JlbGVhc2Uga2V5Ym9hcmRfY2xlYXIgaW9fY2xlYXIgbW91c2VfY2hlY2tfYnV0dG9uIG1vdXNlX2NoZWNrX2J1dHRvbl9wcmVzc2VkIG1vdXNlX2NoZWNrX2J1dHRvbl9yZWxlYXNlZCBtb3VzZV93aGVlbF91cCBtb3VzZV93aGVlbF9kb3duIG1vdXNlX2NsZWFyIGRyYXdfc2VsZiBkcmF3X3Nwcml0ZSBkcmF3X3Nwcml0ZV9wb3MgZHJhd19zcHJpdGVfZXh0IGRyYXdfc3ByaXRlX3N0cmV0Y2hlZCBkcmF3X3Nwcml0ZV9zdHJldGNoZWRfZXh0IGRyYXdfc3ByaXRlX3RpbGVkIGRyYXdfc3ByaXRlX3RpbGVkX2V4dCBkcmF3X3Nwcml0ZV9wYXJ0IGRyYXdfc3ByaXRlX3BhcnRfZXh0IGRyYXdfc3ByaXRlX2dlbmVyYWwgZHJhd19jbGVhciBkcmF3X2NsZWFyX2FscGhhIGRyYXdfcG9pbnQgZHJhd19saW5lIGRyYXdfbGluZV93aWR0aCBkcmF3X3JlY3RhbmdsZSBkcmF3X3JvdW5kcmVjdCBkcmF3X3JvdW5kcmVjdF9leHQgZHJhd190cmlhbmdsZSBkcmF3X2NpcmNsZSBkcmF3X2VsbGlwc2UgZHJhd19zZXRfY2lyY2xlX3ByZWNpc2lvbiBkcmF3X2Fycm93IGRyYXdfYnV0dG9uIGRyYXdfcGF0aCBkcmF3X2hlYWx0aGJhciBkcmF3X2dldHBpeGVsIGRyYXdfZ2V0cGl4ZWxfZXh0IGRyYXdfc2V0X2NvbG91ciBkcmF3X3NldF9jb2xvciBkcmF3X3NldF9hbHBoYSBkcmF3X2dldF9jb2xvdXIgZHJhd19nZXRfY29sb3IgZHJhd19nZXRfYWxwaGEgbWVyZ2VfY29sb3VyIG1ha2VfY29sb3VyX3JnYiBtYWtlX2NvbG91cl9oc3YgY29sb3VyX2dldF9yZWQgY29sb3VyX2dldF9ncmVlbiBjb2xvdXJfZ2V0X2JsdWUgY29sb3VyX2dldF9odWUgY29sb3VyX2dldF9zYXR1cmF0aW9uIGNvbG91cl9nZXRfdmFsdWUgbWVyZ2VfY29sb3IgbWFrZV9jb2xvcl9yZ2IgbWFrZV9jb2xvcl9oc3YgY29sb3JfZ2V0X3JlZCBjb2xvcl9nZXRfZ3JlZW4gY29sb3JfZ2V0X2JsdWUgY29sb3JfZ2V0X2h1ZSBjb2xvcl9nZXRfc2F0dXJhdGlvbiBjb2xvcl9nZXRfdmFsdWUgbWVyZ2VfY29sb3Igc2NyZWVuX3NhdmUgc2NyZWVuX3NhdmVfcGFydCBkcmF3X3NldF9mb250IGRyYXdfc2V0X2hhbGlnbiBkcmF3X3NldF92YWxpZ24gZHJhd190ZXh0IGRyYXdfdGV4dF9leHQgc3RyaW5nX3dpZHRoIHN0cmluZ19oZWlnaHQgc3RyaW5nX3dpZHRoX2V4dCBzdHJpbmdfaGVpZ2h0X2V4dCBkcmF3X3RleHRfdHJhbnNmb3JtZWQgZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZCBkcmF3X3RleHRfY29sb3VyIGRyYXdfdGV4dF9leHRfY29sb3VyIGRyYXdfdGV4dF90cmFuc2Zvcm1lZF9jb2xvdXIgZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZF9jb2xvdXIgZHJhd190ZXh0X2NvbG9yIGRyYXdfdGV4dF9leHRfY29sb3IgZHJhd190ZXh0X3RyYW5zZm9ybWVkX2NvbG9yIGRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3IgZHJhd19wb2ludF9jb2xvdXIgZHJhd19saW5lX2NvbG91ciBkcmF3X2xpbmVfd2lkdGhfY29sb3VyIGRyYXdfcmVjdGFuZ2xlX2NvbG91ciBkcmF3X3JvdW5kcmVjdF9jb2xvdXIgZHJhd19yb3VuZHJlY3RfY29sb3VyX2V4dCBkcmF3X3RyaWFuZ2xlX2NvbG91ciBkcmF3X2NpcmNsZV9jb2xvdXIgZHJhd19lbGxpcHNlX2NvbG91ciBkcmF3X3BvaW50X2NvbG9yIGRyYXdfbGluZV9jb2xvciBkcmF3X2xpbmVfd2lkdGhfY29sb3IgZHJhd19yZWN0YW5nbGVfY29sb3IgZHJhd19yb3VuZHJlY3RfY29sb3IgZHJhd19yb3VuZHJlY3RfY29sb3JfZXh0IGRyYXdfdHJpYW5nbGVfY29sb3IgZHJhd19jaXJjbGVfY29sb3IgZHJhd19lbGxpcHNlX2NvbG9yIGRyYXdfcHJpbWl0aXZlX2JlZ2luIGRyYXdfdmVydGV4IGRyYXdfdmVydGV4X2NvbG91ciBkcmF3X3ZlcnRleF9jb2xvciBkcmF3X3ByaW1pdGl2ZV9lbmQgc3ByaXRlX2dldF91dnMgZm9udF9nZXRfdXZzIHNwcml0ZV9nZXRfdGV4dHVyZSBmb250X2dldF90ZXh0dXJlIHRleHR1cmVfZ2V0X3dpZHRoIHRleHR1cmVfZ2V0X2hlaWdodCB0ZXh0dXJlX2dldF91dnMgZHJhd19wcmltaXRpdmVfYmVnaW5fdGV4dHVyZSBkcmF3X3ZlcnRleF90ZXh0dXJlIGRyYXdfdmVydGV4X3RleHR1cmVfY29sb3VyIGRyYXdfdmVydGV4X3RleHR1cmVfY29sb3IgdGV4dHVyZV9nbG9iYWxfc2NhbGUgc3VyZmFjZV9jcmVhdGUgc3VyZmFjZV9jcmVhdGVfZXh0IHN1cmZhY2VfcmVzaXplIHN1cmZhY2VfZnJlZSBzdXJmYWNlX2V4aXN0cyBzdXJmYWNlX2dldF93aWR0aCBzdXJmYWNlX2dldF9oZWlnaHQgc3VyZmFjZV9nZXRfdGV4dHVyZSBzdXJmYWNlX3NldF90YXJnZXQgc3VyZmFjZV9zZXRfdGFyZ2V0X2V4dCBzdXJmYWNlX3Jlc2V0X3RhcmdldCBzdXJmYWNlX2RlcHRoX2Rpc2FibGUgc3VyZmFjZV9nZXRfZGVwdGhfZGlzYWJsZSBkcmF3X3N1cmZhY2UgZHJhd19zdXJmYWNlX3N0cmV0Y2hlZCBkcmF3X3N1cmZhY2VfdGlsZWQgZHJhd19zdXJmYWNlX3BhcnQgZHJhd19zdXJmYWNlX2V4dCBkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkX2V4dCBkcmF3X3N1cmZhY2VfdGlsZWRfZXh0IGRyYXdfc3VyZmFjZV9wYXJ0X2V4dCBkcmF3X3N1cmZhY2VfZ2VuZXJhbCBzdXJmYWNlX2dldHBpeGVsIHN1cmZhY2VfZ2V0cGl4ZWxfZXh0IHN1cmZhY2Vfc2F2ZSBzdXJmYWNlX3NhdmVfcGFydCBzdXJmYWNlX2NvcHkgc3VyZmFjZV9jb3B5X3BhcnQgYXBwbGljYXRpb25fc3VyZmFjZV9kcmF3X2VuYWJsZSBhcHBsaWNhdGlvbl9nZXRfcG9zaXRpb24gYXBwbGljYXRpb25fc3VyZmFjZV9lbmFibGUgYXBwbGljYXRpb25fc3VyZmFjZV9pc19lbmFibGVkIGRpc3BsYXlfZ2V0X3dpZHRoIGRpc3BsYXlfZ2V0X2hlaWdodCBkaXNwbGF5X2dldF9vcmllbnRhdGlvbiBkaXNwbGF5X2dldF9ndWlfd2lkdGggZGlzcGxheV9nZXRfZ3VpX2hlaWdodCBkaXNwbGF5X3Jlc2V0IGRpc3BsYXlfbW91c2VfZ2V0X3ggZGlzcGxheV9tb3VzZV9nZXRfeSBkaXNwbGF5X21vdXNlX3NldCBkaXNwbGF5X3NldF91aV92aXNpYmlsaXR5IHdpbmRvd19zZXRfZnVsbHNjcmVlbiB3aW5kb3dfZ2V0X2Z1bGxzY3JlZW4gd2luZG93X3NldF9jYXB0aW9uIHdpbmRvd19zZXRfbWluX3dpZHRoIHdpbmRvd19zZXRfbWF4X3dpZHRoIHdpbmRvd19zZXRfbWluX2hlaWdodCB3aW5kb3dfc2V0X21heF9oZWlnaHQgd2luZG93X2dldF92aXNpYmxlX3JlY3RzIHdpbmRvd19nZXRfY2FwdGlvbiB3aW5kb3dfc2V0X2N1cnNvciB3aW5kb3dfZ2V0X2N1cnNvciB3aW5kb3dfc2V0X2NvbG91ciB3aW5kb3dfZ2V0X2NvbG91ciB3aW5kb3dfc2V0X2NvbG9yIHdpbmRvd19nZXRfY29sb3Igd2luZG93X3NldF9wb3NpdGlvbiB3aW5kb3dfc2V0X3NpemUgd2luZG93X3NldF9yZWN0YW5nbGUgd2luZG93X2NlbnRlciB3aW5kb3dfZ2V0X3ggd2luZG93X2dldF95IHdpbmRvd19nZXRfd2lkdGggd2luZG93X2dldF9oZWlnaHQgd2luZG93X21vdXNlX2dldF94IHdpbmRvd19tb3VzZV9nZXRfeSB3aW5kb3dfbW91c2Vfc2V0IHdpbmRvd192aWV3X21vdXNlX2dldF94IHdpbmRvd192aWV3X21vdXNlX2dldF95IHdpbmRvd192aWV3c19tb3VzZV9nZXRfeCB3aW5kb3dfdmlld3NfbW91c2VfZ2V0X3kgYXVkaW9fbGlzdGVuZXJfcG9zaXRpb24gYXVkaW9fbGlzdGVuZXJfdmVsb2NpdHkgYXVkaW9fbGlzdGVuZXJfb3JpZW50YXRpb24gYXVkaW9fZW1pdHRlcl9wb3NpdGlvbiBhdWRpb19lbWl0dGVyX2NyZWF0ZSBhdWRpb19lbWl0dGVyX2ZyZWUgYXVkaW9fZW1pdHRlcl9leGlzdHMgYXVkaW9fZW1pdHRlcl9waXRjaCBhdWRpb19lbWl0dGVyX3ZlbG9jaXR5IGF1ZGlvX2VtaXR0ZXJfZmFsbG9mZiBhdWRpb19lbWl0dGVyX2dhaW4gYXVkaW9fcGxheV9zb3VuZCBhdWRpb19wbGF5X3NvdW5kX29uIGF1ZGlvX3BsYXlfc291bmRfYXQgYXVkaW9fc3RvcF9zb3VuZCBhdWRpb19yZXN1bWVfbXVzaWMgYXVkaW9fbXVzaWNfaXNfcGxheWluZyBhdWRpb19yZXN1bWVfc291bmQgYXVkaW9fcGF1c2Vfc291bmQgYXVkaW9fcGF1c2VfbXVzaWMgYXVkaW9fY2hhbm5lbF9udW0gYXVkaW9fc291bmRfbGVuZ3RoIGF1ZGlvX2dldF90eXBlIGF1ZGlvX2ZhbGxvZmZfc2V0X21vZGVsIGF1ZGlvX3BsYXlfbXVzaWMgYXVkaW9fc3RvcF9tdXNpYyBhdWRpb19tYXN0ZXJfZ2FpbiBhdWRpb19tdXNpY19nYWluIGF1ZGlvX3NvdW5kX2dhaW4gYXVkaW9fc291bmRfcGl0Y2ggYXVkaW9fc3RvcF9hbGwgYXVkaW9fcmVzdW1lX2FsbCBhdWRpb19wYXVzZV9hbGwgYXVkaW9faXNfcGxheWluZyBhdWRpb19pc19wYXVzZWQgYXVkaW9fZXhpc3RzIGF1ZGlvX3NvdW5kX3NldF90cmFja19wb3NpdGlvbiBhdWRpb19zb3VuZF9nZXRfdHJhY2tfcG9zaXRpb24gYXVkaW9fZW1pdHRlcl9nZXRfZ2FpbiBhdWRpb19lbWl0dGVyX2dldF9waXRjaCBhdWRpb19lbWl0dGVyX2dldF94IGF1ZGlvX2VtaXR0ZXJfZ2V0X3kgYXVkaW9fZW1pdHRlcl9nZXRfeiBhdWRpb19lbWl0dGVyX2dldF92eCBhdWRpb19lbWl0dGVyX2dldF92eSBhdWRpb19lbWl0dGVyX2dldF92eiBhdWRpb19saXN0ZW5lcl9zZXRfcG9zaXRpb24gYXVkaW9fbGlzdGVuZXJfc2V0X3ZlbG9jaXR5IGF1ZGlvX2xpc3RlbmVyX3NldF9vcmllbnRhdGlvbiBhdWRpb19saXN0ZW5lcl9nZXRfZGF0YSBhdWRpb19zZXRfbWFzdGVyX2dhaW4gYXVkaW9fZ2V0X21hc3Rlcl9nYWluIGF1ZGlvX3NvdW5kX2dldF9nYWluIGF1ZGlvX3NvdW5kX2dldF9waXRjaCBhdWRpb19nZXRfbmFtZSBhdWRpb19zb3VuZF9zZXRfdHJhY2tfcG9zaXRpb24gYXVkaW9fc291bmRfZ2V0X3RyYWNrX3Bvc2l0aW9uIGF1ZGlvX2NyZWF0ZV9zdHJlYW0gYXVkaW9fZGVzdHJveV9zdHJlYW0gYXVkaW9fY3JlYXRlX3N5bmNfZ3JvdXAgYXVkaW9fZGVzdHJveV9zeW5jX2dyb3VwIGF1ZGlvX3BsYXlfaW5fc3luY19ncm91cCBhdWRpb19zdGFydF9zeW5jX2dyb3VwIGF1ZGlvX3N0b3Bfc3luY19ncm91cCBhdWRpb19wYXVzZV9zeW5jX2dyb3VwIGF1ZGlvX3Jlc3VtZV9zeW5jX2dyb3VwIGF1ZGlvX3N5bmNfZ3JvdXBfZ2V0X3RyYWNrX3BvcyBhdWRpb19zeW5jX2dyb3VwX2RlYnVnIGF1ZGlvX3N5bmNfZ3JvdXBfaXNfcGxheWluZyBhdWRpb19kZWJ1ZyBhdWRpb19ncm91cF9sb2FkIGF1ZGlvX2dyb3VwX3VubG9hZCBhdWRpb19ncm91cF9pc19sb2FkZWQgYXVkaW9fZ3JvdXBfbG9hZF9wcm9ncmVzcyBhdWRpb19ncm91cF9uYW1lIGF1ZGlvX2dyb3VwX3N0b3BfYWxsIGF1ZGlvX2dyb3VwX3NldF9nYWluIGF1ZGlvX2NyZWF0ZV9idWZmZXJfc291bmQgYXVkaW9fZnJlZV9idWZmZXJfc291bmQgYXVkaW9fY3JlYXRlX3BsYXlfcXVldWUgYXVkaW9fZnJlZV9wbGF5X3F1ZXVlIGF1ZGlvX3F1ZXVlX3NvdW5kIGF1ZGlvX2dldF9yZWNvcmRlcl9jb3VudCBhdWRpb19nZXRfcmVjb3JkZXJfaW5mbyBhdWRpb19zdGFydF9yZWNvcmRpbmcgYXVkaW9fc3RvcF9yZWNvcmRpbmcgYXVkaW9fc291bmRfZ2V0X2xpc3RlbmVyX21hc2sgYXVkaW9fZW1pdHRlcl9nZXRfbGlzdGVuZXJfbWFzayBhdWRpb19nZXRfbGlzdGVuZXJfbWFzayBhdWRpb19zb3VuZF9zZXRfbGlzdGVuZXJfbWFzayBhdWRpb19lbWl0dGVyX3NldF9saXN0ZW5lcl9tYXNrIGF1ZGlvX3NldF9saXN0ZW5lcl9tYXNrIGF1ZGlvX2dldF9saXN0ZW5lcl9jb3VudCBhdWRpb19nZXRfbGlzdGVuZXJfaW5mbyBhdWRpb19zeXN0ZW0gc2hvd19tZXNzYWdlIHNob3dfbWVzc2FnZV9hc3luYyBjbGlja2FibGVfYWRkIGNsaWNrYWJsZV9hZGRfZXh0IGNsaWNrYWJsZV9jaGFuZ2UgY2xpY2thYmxlX2NoYW5nZV9leHQgY2xpY2thYmxlX2RlbGV0ZSBjbGlja2FibGVfZXhpc3RzIGNsaWNrYWJsZV9zZXRfc3R5bGUgc2hvd19xdWVzdGlvbiBzaG93X3F1ZXN0aW9uX2FzeW5jIGdldF9pbnRlZ2VyIGdldF9zdHJpbmcgZ2V0X2ludGVnZXJfYXN5bmMgZ2V0X3N0cmluZ19hc3luYyBnZXRfbG9naW5fYXN5bmMgZ2V0X29wZW5fZmlsZW5hbWUgZ2V0X3NhdmVfZmlsZW5hbWUgZ2V0X29wZW5fZmlsZW5hbWVfZXh0IGdldF9zYXZlX2ZpbGVuYW1lX2V4dCBzaG93X2Vycm9yIGhpZ2hzY29yZV9jbGVhciBoaWdoc2NvcmVfYWRkIGhpZ2hzY29yZV92YWx1ZSBoaWdoc2NvcmVfbmFtZSBkcmF3X2hpZ2hzY29yZSBzcHJpdGVfZXhpc3RzIHNwcml0ZV9nZXRfbmFtZSBzcHJpdGVfZ2V0X251bWJlciBzcHJpdGVfZ2V0X3dpZHRoIHNwcml0ZV9nZXRfaGVpZ2h0IHNwcml0ZV9nZXRfeG9mZnNldCBzcHJpdGVfZ2V0X3lvZmZzZXQgc3ByaXRlX2dldF9iYm94X2xlZnQgc3ByaXRlX2dldF9iYm94X3JpZ2h0IHNwcml0ZV9nZXRfYmJveF90b3Agc3ByaXRlX2dldF9iYm94X2JvdHRvbSBzcHJpdGVfc2F2ZSBzcHJpdGVfc2F2ZV9zdHJpcCBzcHJpdGVfc2V0X2NhY2hlX3NpemUgc3ByaXRlX3NldF9jYWNoZV9zaXplX2V4dCBzcHJpdGVfZ2V0X3RwZSBzcHJpdGVfcHJlZmV0Y2ggc3ByaXRlX3ByZWZldGNoX211bHRpIHNwcml0ZV9mbHVzaCBzcHJpdGVfZmx1c2hfbXVsdGkgc3ByaXRlX3NldF9zcGVlZCBzcHJpdGVfZ2V0X3NwZWVkX3R5cGUgc3ByaXRlX2dldF9zcGVlZCBmb250X2V4aXN0cyBmb250X2dldF9uYW1lIGZvbnRfZ2V0X2ZvbnRuYW1lIGZvbnRfZ2V0X2JvbGQgZm9udF9nZXRfaXRhbGljIGZvbnRfZ2V0X2ZpcnN0IGZvbnRfZ2V0X2xhc3QgZm9udF9nZXRfc2l6ZSBmb250X3NldF9jYWNoZV9zaXplIHBhdGhfZXhpc3RzIHBhdGhfZ2V0X25hbWUgcGF0aF9nZXRfbGVuZ3RoIHBhdGhfZ2V0X3RpbWUgcGF0aF9nZXRfa2luZCBwYXRoX2dldF9jbG9zZWQgcGF0aF9nZXRfcHJlY2lzaW9uIHBhdGhfZ2V0X251bWJlciBwYXRoX2dldF9wb2ludF94IHBhdGhfZ2V0X3BvaW50X3kgcGF0aF9nZXRfcG9pbnRfc3BlZWQgcGF0aF9nZXRfeCBwYXRoX2dldF95IHBhdGhfZ2V0X3NwZWVkIHNjcmlwdF9leGlzdHMgc2NyaXB0X2dldF9uYW1lIHRpbWVsaW5lX2FkZCB0aW1lbGluZV9kZWxldGUgdGltZWxpbmVfY2xlYXIgdGltZWxpbmVfZXhpc3RzIHRpbWVsaW5lX2dldF9uYW1lIHRpbWVsaW5lX21vbWVudF9jbGVhciB0aW1lbGluZV9tb21lbnRfYWRkX3NjcmlwdCB0aW1lbGluZV9zaXplIHRpbWVsaW5lX21heF9tb21lbnQgb2JqZWN0X2V4aXN0cyBvYmplY3RfZ2V0X25hbWUgb2JqZWN0X2dldF9zcHJpdGUgb2JqZWN0X2dldF9zb2xpZCBvYmplY3RfZ2V0X3Zpc2libGUgb2JqZWN0X2dldF9wZXJzaXN0ZW50IG9iamVjdF9nZXRfbWFzayBvYmplY3RfZ2V0X3BhcmVudCBvYmplY3RfZ2V0X3BoeXNpY3Mgb2JqZWN0X2lzX2FuY2VzdG9yIHJvb21fZXhpc3RzIHJvb21fZ2V0X25hbWUgc3ByaXRlX3NldF9vZmZzZXQgc3ByaXRlX2R1cGxpY2F0ZSBzcHJpdGVfYXNzaWduIHNwcml0ZV9tZXJnZSBzcHJpdGVfYWRkIHNwcml0ZV9yZXBsYWNlIHNwcml0ZV9jcmVhdGVfZnJvbV9zdXJmYWNlIHNwcml0ZV9hZGRfZnJvbV9zdXJmYWNlIHNwcml0ZV9kZWxldGUgc3ByaXRlX3NldF9hbHBoYV9mcm9tX3Nwcml0ZSBzcHJpdGVfY29sbGlzaW9uX21hc2sgZm9udF9hZGRfZW5hYmxlX2FhIGZvbnRfYWRkX2dldF9lbmFibGVfYWEgZm9udF9hZGQgZm9udF9hZGRfc3ByaXRlIGZvbnRfYWRkX3Nwcml0ZV9leHQgZm9udF9yZXBsYWNlIGZvbnRfcmVwbGFjZV9zcHJpdGUgZm9udF9yZXBsYWNlX3Nwcml0ZV9leHQgZm9udF9kZWxldGUgcGF0aF9zZXRfa2luZCBwYXRoX3NldF9jbG9zZWQgcGF0aF9zZXRfcHJlY2lzaW9uIHBhdGhfYWRkIHBhdGhfYXNzaWduIHBhdGhfZHVwbGljYXRlIHBhdGhfYXBwZW5kIHBhdGhfZGVsZXRlIHBhdGhfYWRkX3BvaW50IHBhdGhfaW5zZXJ0X3BvaW50IHBhdGhfY2hhbmdlX3BvaW50IHBhdGhfZGVsZXRlX3BvaW50IHBhdGhfY2xlYXJfcG9pbnRzIHBhdGhfcmV2ZXJzZSBwYXRoX21pcnJvciBwYXRoX2ZsaXAgcGF0aF9yb3RhdGUgcGF0aF9yZXNjYWxlIHBhdGhfc2hpZnQgc2NyaXB0X2V4ZWN1dGUgb2JqZWN0X3NldF9zcHJpdGUgb2JqZWN0X3NldF9zb2xpZCBvYmplY3Rfc2V0X3Zpc2libGUgb2JqZWN0X3NldF9wZXJzaXN0ZW50IG9iamVjdF9zZXRfbWFzayByb29tX3NldF93aWR0aCByb29tX3NldF9oZWlnaHQgcm9vbV9zZXRfcGVyc2lzdGVudCByb29tX3NldF9iYWNrZ3JvdW5kX2NvbG91ciByb29tX3NldF9iYWNrZ3JvdW5kX2NvbG9yIHJvb21fc2V0X3ZpZXcgcm9vbV9zZXRfdmlld3BvcnQgcm9vbV9nZXRfdmlld3BvcnQgcm9vbV9zZXRfdmlld19lbmFibGVkIHJvb21fYWRkIHJvb21fZHVwbGljYXRlIHJvb21fYXNzaWduIHJvb21faW5zdGFuY2VfYWRkIHJvb21faW5zdGFuY2VfY2xlYXIgcm9vbV9nZXRfY2FtZXJhIHJvb21fc2V0X2NhbWVyYSBhc3NldF9nZXRfaW5kZXggYXNzZXRfZ2V0X3R5cGUgZmlsZV90ZXh0X29wZW5fZnJvbV9zdHJpbmcgZmlsZV90ZXh0X29wZW5fcmVhZCBmaWxlX3RleHRfb3Blbl93cml0ZSBmaWxlX3RleHRfb3Blbl9hcHBlbmQgZmlsZV90ZXh0X2Nsb3NlIGZpbGVfdGV4dF93cml0ZV9zdHJpbmcgZmlsZV90ZXh0X3dyaXRlX3JlYWwgZmlsZV90ZXh0X3dyaXRlbG4gZmlsZV90ZXh0X3JlYWRfc3RyaW5nIGZpbGVfdGV4dF9yZWFkX3JlYWwgZmlsZV90ZXh0X3JlYWRsbiBmaWxlX3RleHRfZW9mIGZpbGVfdGV4dF9lb2xuIGZpbGVfZXhpc3RzIGZpbGVfZGVsZXRlIGZpbGVfcmVuYW1lIGZpbGVfY29weSBkaXJlY3RvcnlfZXhpc3RzIGRpcmVjdG9yeV9jcmVhdGUgZGlyZWN0b3J5X2Rlc3Ryb3kgZmlsZV9maW5kX2ZpcnN0IGZpbGVfZmluZF9uZXh0IGZpbGVfZmluZF9jbG9zZSBmaWxlX2F0dHJpYnV0ZXMgZmlsZW5hbWVfbmFtZSBmaWxlbmFtZV9wYXRoIGZpbGVuYW1lX2RpciBmaWxlbmFtZV9kcml2ZSBmaWxlbmFtZV9leHQgZmlsZW5hbWVfY2hhbmdlX2V4dCBmaWxlX2Jpbl9vcGVuIGZpbGVfYmluX3Jld3JpdGUgZmlsZV9iaW5fY2xvc2UgZmlsZV9iaW5fcG9zaXRpb24gZmlsZV9iaW5fc2l6ZSBmaWxlX2Jpbl9zZWVrIGZpbGVfYmluX3dyaXRlX2J5dGUgZmlsZV9iaW5fcmVhZF9ieXRlIHBhcmFtZXRlcl9jb3VudCBwYXJhbWV0ZXJfc3RyaW5nIGVudmlyb25tZW50X2dldF92YXJpYWJsZSBpbmlfb3Blbl9mcm9tX3N0cmluZyBpbmlfb3BlbiBpbmlfY2xvc2UgaW5pX3JlYWRfc3RyaW5nIGluaV9yZWFkX3JlYWwgaW5pX3dyaXRlX3N0cmluZyBpbmlfd3JpdGVfcmVhbCBpbmlfa2V5X2V4aXN0cyBpbmlfc2VjdGlvbl9leGlzdHMgaW5pX2tleV9kZWxldGUgaW5pX3NlY3Rpb25fZGVsZXRlIGRzX3NldF9wcmVjaXNpb24gZHNfZXhpc3RzIGRzX3N0YWNrX2NyZWF0ZSBkc19zdGFja19kZXN0cm95IGRzX3N0YWNrX2NsZWFyIGRzX3N0YWNrX2NvcHkgZHNfc3RhY2tfc2l6ZSBkc19zdGFja19lbXB0eSBkc19zdGFja19wdXNoIGRzX3N0YWNrX3BvcCBkc19zdGFja190b3AgZHNfc3RhY2tfd3JpdGUgZHNfc3RhY2tfcmVhZCBkc19xdWV1ZV9jcmVhdGUgZHNfcXVldWVfZGVzdHJveSBkc19xdWV1ZV9jbGVhciBkc19xdWV1ZV9jb3B5IGRzX3F1ZXVlX3NpemUgZHNfcXVldWVfZW1wdHkgZHNfcXVldWVfZW5xdWV1ZSBkc19xdWV1ZV9kZXF1ZXVlIGRzX3F1ZXVlX2hlYWQgZHNfcXVldWVfdGFpbCBkc19xdWV1ZV93cml0ZSBkc19xdWV1ZV9yZWFkIGRzX2xpc3RfY3JlYXRlIGRzX2xpc3RfZGVzdHJveSBkc19saXN0X2NsZWFyIGRzX2xpc3RfY29weSBkc19saXN0X3NpemUgZHNfbGlzdF9lbXB0eSBkc19saXN0X2FkZCBkc19saXN0X2luc2VydCBkc19saXN0X3JlcGxhY2UgZHNfbGlzdF9kZWxldGUgZHNfbGlzdF9maW5kX2luZGV4IGRzX2xpc3RfZmluZF92YWx1ZSBkc19saXN0X21hcmtfYXNfbGlzdCBkc19saXN0X21hcmtfYXNfbWFwIGRzX2xpc3Rfc29ydCBkc19saXN0X3NodWZmbGUgZHNfbGlzdF93cml0ZSBkc19saXN0X3JlYWQgZHNfbGlzdF9zZXQgZHNfbWFwX2NyZWF0ZSBkc19tYXBfZGVzdHJveSBkc19tYXBfY2xlYXIgZHNfbWFwX2NvcHkgZHNfbWFwX3NpemUgZHNfbWFwX2VtcHR5IGRzX21hcF9hZGQgZHNfbWFwX2FkZF9saXN0IGRzX21hcF9hZGRfbWFwIGRzX21hcF9yZXBsYWNlIGRzX21hcF9yZXBsYWNlX21hcCBkc19tYXBfcmVwbGFjZV9saXN0IGRzX21hcF9kZWxldGUgZHNfbWFwX2V4aXN0cyBkc19tYXBfZmluZF92YWx1ZSBkc19tYXBfZmluZF9wcmV2aW91cyBkc19tYXBfZmluZF9uZXh0IGRzX21hcF9maW5kX2ZpcnN0IGRzX21hcF9maW5kX2xhc3QgZHNfbWFwX3dyaXRlIGRzX21hcF9yZWFkIGRzX21hcF9zZWN1cmVfc2F2ZSBkc19tYXBfc2VjdXJlX2xvYWQgZHNfbWFwX3NlY3VyZV9sb2FkX2J1ZmZlciBkc19tYXBfc2VjdXJlX3NhdmVfYnVmZmVyIGRzX21hcF9zZXQgZHNfcHJpb3JpdHlfY3JlYXRlIGRzX3ByaW9yaXR5X2Rlc3Ryb3kgZHNfcHJpb3JpdHlfY2xlYXIgZHNfcHJpb3JpdHlfY29weSBkc19wcmlvcml0eV9zaXplIGRzX3ByaW9yaXR5X2VtcHR5IGRzX3ByaW9yaXR5X2FkZCBkc19wcmlvcml0eV9jaGFuZ2VfcHJpb3JpdHkgZHNfcHJpb3JpdHlfZmluZF9wcmlvcml0eSBkc19wcmlvcml0eV9kZWxldGVfdmFsdWUgZHNfcHJpb3JpdHlfZGVsZXRlX21pbiBkc19wcmlvcml0eV9maW5kX21pbiBkc19wcmlvcml0eV9kZWxldGVfbWF4IGRzX3ByaW9yaXR5X2ZpbmRfbWF4IGRzX3ByaW9yaXR5X3dyaXRlIGRzX3ByaW9yaXR5X3JlYWQgZHNfZ3JpZF9jcmVhdGUgZHNfZ3JpZF9kZXN0cm95IGRzX2dyaWRfY29weSBkc19ncmlkX3Jlc2l6ZSBkc19ncmlkX3dpZHRoIGRzX2dyaWRfaGVpZ2h0IGRzX2dyaWRfY2xlYXIgZHNfZ3JpZF9zZXQgZHNfZ3JpZF9hZGQgZHNfZ3JpZF9tdWx0aXBseSBkc19ncmlkX3NldF9yZWdpb24gZHNfZ3JpZF9hZGRfcmVnaW9uIGRzX2dyaWRfbXVsdGlwbHlfcmVnaW9uIGRzX2dyaWRfc2V0X2Rpc2sgZHNfZ3JpZF9hZGRfZGlzayBkc19ncmlkX211bHRpcGx5X2Rpc2sgZHNfZ3JpZF9zZXRfZ3JpZF9yZWdpb24gZHNfZ3JpZF9hZGRfZ3JpZF9yZWdpb24gZHNfZ3JpZF9tdWx0aXBseV9ncmlkX3JlZ2lvbiBkc19ncmlkX2dldCBkc19ncmlkX2dldF9zdW0gZHNfZ3JpZF9nZXRfbWF4IGRzX2dyaWRfZ2V0X21pbiBkc19ncmlkX2dldF9tZWFuIGRzX2dyaWRfZ2V0X2Rpc2tfc3VtIGRzX2dyaWRfZ2V0X2Rpc2tfbWluIGRzX2dyaWRfZ2V0X2Rpc2tfbWF4IGRzX2dyaWRfZ2V0X2Rpc2tfbWVhbiBkc19ncmlkX3ZhbHVlX2V4aXN0cyBkc19ncmlkX3ZhbHVlX3ggZHNfZ3JpZF92YWx1ZV95IGRzX2dyaWRfdmFsdWVfZGlza19leGlzdHMgZHNfZ3JpZF92YWx1ZV9kaXNrX3ggZHNfZ3JpZF92YWx1ZV9kaXNrX3kgZHNfZ3JpZF9zaHVmZmxlIGRzX2dyaWRfd3JpdGUgZHNfZ3JpZF9yZWFkIGRzX2dyaWRfc29ydCBkc19ncmlkX3NldCBkc19ncmlkX2dldCBlZmZlY3RfY3JlYXRlX2JlbG93IGVmZmVjdF9jcmVhdGVfYWJvdmUgZWZmZWN0X2NsZWFyIHBhcnRfdHlwZV9jcmVhdGUgcGFydF90eXBlX2Rlc3Ryb3kgcGFydF90eXBlX2V4aXN0cyBwYXJ0X3R5cGVfY2xlYXIgcGFydF90eXBlX3NoYXBlIHBhcnRfdHlwZV9zcHJpdGUgcGFydF90eXBlX3NpemUgcGFydF90eXBlX3NjYWxlIHBhcnRfdHlwZV9vcmllbnRhdGlvbiBwYXJ0X3R5cGVfbGlmZSBwYXJ0X3R5cGVfc3RlcCBwYXJ0X3R5cGVfZGVhdGggcGFydF90eXBlX3NwZWVkIHBhcnRfdHlwZV9kaXJlY3Rpb24gcGFydF90eXBlX2dyYXZpdHkgcGFydF90eXBlX2NvbG91cjEgcGFydF90eXBlX2NvbG91cjIgcGFydF90eXBlX2NvbG91cjMgcGFydF90eXBlX2NvbG91cl9taXggcGFydF90eXBlX2NvbG91cl9yZ2IgcGFydF90eXBlX2NvbG91cl9oc3YgcGFydF90eXBlX2NvbG9yMSBwYXJ0X3R5cGVfY29sb3IyIHBhcnRfdHlwZV9jb2xvcjMgcGFydF90eXBlX2NvbG9yX21peCBwYXJ0X3R5cGVfY29sb3JfcmdiIHBhcnRfdHlwZV9jb2xvcl9oc3YgcGFydF90eXBlX2FscGhhMSBwYXJ0X3R5cGVfYWxwaGEyIHBhcnRfdHlwZV9hbHBoYTMgcGFydF90eXBlX2JsZW5kIHBhcnRfc3lzdGVtX2NyZWF0ZSBwYXJ0X3N5c3RlbV9jcmVhdGVfbGF5ZXIgcGFydF9zeXN0ZW1fZGVzdHJveSBwYXJ0X3N5c3RlbV9leGlzdHMgcGFydF9zeXN0ZW1fY2xlYXIgcGFydF9zeXN0ZW1fZHJhd19vcmRlciBwYXJ0X3N5c3RlbV9kZXB0aCBwYXJ0X3N5c3RlbV9wb3NpdGlvbiBwYXJ0X3N5c3RlbV9hdXRvbWF0aWNfdXBkYXRlIHBhcnRfc3lzdGVtX2F1dG9tYXRpY19kcmF3IHBhcnRfc3lzdGVtX3VwZGF0ZSBwYXJ0X3N5c3RlbV9kcmF3aXQgcGFydF9zeXN0ZW1fZ2V0X2xheWVyIHBhcnRfc3lzdGVtX2xheWVyIHBhcnRfcGFydGljbGVzX2NyZWF0ZSBwYXJ0X3BhcnRpY2xlc19jcmVhdGVfY29sb3VyIHBhcnRfcGFydGljbGVzX2NyZWF0ZV9jb2xvciBwYXJ0X3BhcnRpY2xlc19jbGVhciBwYXJ0X3BhcnRpY2xlc19jb3VudCBwYXJ0X2VtaXR0ZXJfY3JlYXRlIHBhcnRfZW1pdHRlcl9kZXN0cm95IHBhcnRfZW1pdHRlcl9kZXN0cm95X2FsbCBwYXJ0X2VtaXR0ZXJfZXhpc3RzIHBhcnRfZW1pdHRlcl9jbGVhciBwYXJ0X2VtaXR0ZXJfcmVnaW9uIHBhcnRfZW1pdHRlcl9idXJzdCBwYXJ0X2VtaXR0ZXJfc3RyZWFtIGV4dGVybmFsX2NhbGwgZXh0ZXJuYWxfZGVmaW5lIGV4dGVybmFsX2ZyZWUgd2luZG93X2hhbmRsZSB3aW5kb3dfZGV2aWNlIG1hdHJpeF9nZXQgbWF0cml4X3NldCBtYXRyaXhfYnVpbGRfaWRlbnRpdHkgbWF0cml4X2J1aWxkIG1hdHJpeF9idWlsZF9sb29rYXQgbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fb3J0aG8gbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmUgbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmVfZm92IG1hdHJpeF9tdWx0aXBseSBtYXRyaXhfdHJhbnNmb3JtX3ZlcnRleCBtYXRyaXhfc3RhY2tfcHVzaCBtYXRyaXhfc3RhY2tfcG9wIG1hdHJpeF9zdGFja19tdWx0aXBseSBtYXRyaXhfc3RhY2tfc2V0IG1hdHJpeF9zdGFja19jbGVhciBtYXRyaXhfc3RhY2tfdG9wIG1hdHJpeF9zdGFja19pc19lbXB0eSBicm93c2VyX2lucHV0X2NhcHR1cmUgb3NfZ2V0X2NvbmZpZyBvc19nZXRfaW5mbyBvc19nZXRfbGFuZ3VhZ2Ugb3NfZ2V0X3JlZ2lvbiBvc19sb2NrX29yaWVudGF0aW9uIGRpc3BsYXlfZ2V0X2RwaV94IGRpc3BsYXlfZ2V0X2RwaV95IGRpc3BsYXlfc2V0X2d1aV9zaXplIGRpc3BsYXlfc2V0X2d1aV9tYXhpbWlzZSBkaXNwbGF5X3NldF9ndWlfbWF4aW1pemUgZGV2aWNlX21vdXNlX2RiY2xpY2tfZW5hYmxlIGRpc3BsYXlfc2V0X3RpbWluZ19tZXRob2QgZGlzcGxheV9nZXRfdGltaW5nX21ldGhvZCBkaXNwbGF5X3NldF9zbGVlcF9tYXJnaW4gZGlzcGxheV9nZXRfc2xlZXBfbWFyZ2luIHZpcnR1YWxfa2V5X2FkZCB2aXJ0dWFsX2tleV9oaWRlIHZpcnR1YWxfa2V5X2RlbGV0ZSB2aXJ0dWFsX2tleV9zaG93IGRyYXdfZW5hYmxlX2RyYXdldmVudCBkcmF3X2VuYWJsZV9zd2ZfYWEgZHJhd19zZXRfc3dmX2FhX2xldmVsIGRyYXdfZ2V0X3N3Zl9hYV9sZXZlbCBkcmF3X3RleHR1cmVfZmx1c2ggZHJhd19mbHVzaCBncHVfc2V0X2JsZW5kZW5hYmxlIGdwdV9zZXRfenRlc3RlbmFibGUgZ3B1X3NldF96ZnVuYyBncHVfc2V0X3p3cml0ZWVuYWJsZSBncHVfc2V0X2xpZ2h0aW5nZW5hYmxlIGdwdV9zZXRfZm9nIGdwdV9zZXRfY3VsbG1vZGUgZ3B1X3NldF9ibGVuZG1vZGUgZ3B1X3NldF9ibGVuZG1vZGVfZXh0IGdwdV9zZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfc2V0X2NvbG9yd3JpdGVlbmFibGUgZ3B1X3NldF9jb2xvdXJ3cml0ZWVuYWJsZSBncHVfc2V0X2FscGhhdGVzdGVuYWJsZSBncHVfc2V0X2FscGhhdGVzdHJlZiBncHVfc2V0X2FscGhhdGVzdGZ1bmMgZ3B1X3NldF90ZXhmaWx0ZXIgZ3B1X3NldF90ZXhmaWx0ZXJfZXh0IGdwdV9zZXRfdGV4cmVwZWF0IGdwdV9zZXRfdGV4cmVwZWF0X2V4dCBncHVfc2V0X3RleF9maWx0ZXIgZ3B1X3NldF90ZXhfZmlsdGVyX2V4dCBncHVfc2V0X3RleF9yZXBlYXQgZ3B1X3NldF90ZXhfcmVwZWF0X2V4dCBncHVfc2V0X3RleF9taXBfZmlsdGVyIGdwdV9zZXRfdGV4X21pcF9maWx0ZXJfZXh0IGdwdV9zZXRfdGV4X21pcF9iaWFzIGdwdV9zZXRfdGV4X21pcF9iaWFzX2V4dCBncHVfc2V0X3RleF9taW5fbWlwIGdwdV9zZXRfdGV4X21pbl9taXBfZXh0IGdwdV9zZXRfdGV4X21heF9taXAgZ3B1X3NldF90ZXhfbWF4X21pcF9leHQgZ3B1X3NldF90ZXhfbWF4X2FuaXNvIGdwdV9zZXRfdGV4X21heF9hbmlzb19leHQgZ3B1X3NldF90ZXhfbWlwX2VuYWJsZSBncHVfc2V0X3RleF9taXBfZW5hYmxlX2V4dCBncHVfZ2V0X2JsZW5kZW5hYmxlIGdwdV9nZXRfenRlc3RlbmFibGUgZ3B1X2dldF96ZnVuYyBncHVfZ2V0X3p3cml0ZWVuYWJsZSBncHVfZ2V0X2xpZ2h0aW5nZW5hYmxlIGdwdV9nZXRfZm9nIGdwdV9nZXRfY3VsbG1vZGUgZ3B1X2dldF9ibGVuZG1vZGUgZ3B1X2dldF9ibGVuZG1vZGVfZXh0IGdwdV9nZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfZ2V0X2JsZW5kbW9kZV9zcmMgZ3B1X2dldF9ibGVuZG1vZGVfZGVzdCBncHVfZ2V0X2JsZW5kbW9kZV9zcmNhbHBoYSBncHVfZ2V0X2JsZW5kbW9kZV9kZXN0YWxwaGEgZ3B1X2dldF9jb2xvcndyaXRlZW5hYmxlIGdwdV9nZXRfY29sb3Vyd3JpdGVlbmFibGUgZ3B1X2dldF9hbHBoYXRlc3RlbmFibGUgZ3B1X2dldF9hbHBoYXRlc3RyZWYgZ3B1X2dldF9hbHBoYXRlc3RmdW5jIGdwdV9nZXRfdGV4ZmlsdGVyIGdwdV9nZXRfdGV4ZmlsdGVyX2V4dCBncHVfZ2V0X3RleHJlcGVhdCBncHVfZ2V0X3RleHJlcGVhdF9leHQgZ3B1X2dldF90ZXhfZmlsdGVyIGdwdV9nZXRfdGV4X2ZpbHRlcl9leHQgZ3B1X2dldF90ZXhfcmVwZWF0IGdwdV9nZXRfdGV4X3JlcGVhdF9leHQgZ3B1X2dldF90ZXhfbWlwX2ZpbHRlciBncHVfZ2V0X3RleF9taXBfZmlsdGVyX2V4dCBncHVfZ2V0X3RleF9taXBfYmlhcyBncHVfZ2V0X3RleF9taXBfYmlhc19leHQgZ3B1X2dldF90ZXhfbWluX21pcCBncHVfZ2V0X3RleF9taW5fbWlwX2V4dCBncHVfZ2V0X3RleF9tYXhfbWlwIGdwdV9nZXRfdGV4X21heF9taXBfZXh0IGdwdV9nZXRfdGV4X21heF9hbmlzbyBncHVfZ2V0X3RleF9tYXhfYW5pc29fZXh0IGdwdV9nZXRfdGV4X21pcF9lbmFibGUgZ3B1X2dldF90ZXhfbWlwX2VuYWJsZV9leHQgZ3B1X3B1c2hfc3RhdGUgZ3B1X3BvcF9zdGF0ZSBncHVfZ2V0X3N0YXRlIGdwdV9zZXRfc3RhdGUgZHJhd19saWdodF9kZWZpbmVfYW1iaWVudCBkcmF3X2xpZ2h0X2RlZmluZV9kaXJlY3Rpb24gZHJhd19saWdodF9kZWZpbmVfcG9pbnQgZHJhd19saWdodF9lbmFibGUgZHJhd19zZXRfbGlnaHRpbmcgZHJhd19saWdodF9nZXRfYW1iaWVudCBkcmF3X2xpZ2h0X2dldCBkcmF3X2dldF9saWdodGluZyBzaG9wX2xlYXZlX3JhdGluZyB1cmxfZ2V0X2RvbWFpbiB1cmxfb3BlbiB1cmxfb3Blbl9leHQgdXJsX29wZW5fZnVsbCBnZXRfdGltZXIgYWNoaWV2ZW1lbnRfbG9naW4gYWNoaWV2ZW1lbnRfbG9nb3V0IGFjaGlldmVtZW50X3Bvc3QgYWNoaWV2ZW1lbnRfaW5jcmVtZW50IGFjaGlldmVtZW50X3Bvc3Rfc2NvcmUgYWNoaWV2ZW1lbnRfYXZhaWxhYmxlIGFjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnRzIGFjaGlldmVtZW50X3Nob3dfbGVhZGVyYm9hcmRzIGFjaGlldmVtZW50X2xvYWRfZnJpZW5kcyBhY2hpZXZlbWVudF9sb2FkX2xlYWRlcmJvYXJkIGFjaGlldmVtZW50X3NlbmRfY2hhbGxlbmdlIGFjaGlldmVtZW50X2xvYWRfcHJvZ3Jlc3MgYWNoaWV2ZW1lbnRfcmVzZXQgYWNoaWV2ZW1lbnRfbG9naW5fc3RhdHVzIGFjaGlldmVtZW50X2dldF9waWMgYWNoaWV2ZW1lbnRfc2hvd19jaGFsbGVuZ2Vfbm90aWZpY2F0aW9ucyBhY2hpZXZlbWVudF9nZXRfY2hhbGxlbmdlcyBhY2hpZXZlbWVudF9ldmVudCBhY2hpZXZlbWVudF9zaG93IGFjaGlldmVtZW50X2dldF9pbmZvIGNsb3VkX2ZpbGVfc2F2ZSBjbG91ZF9zdHJpbmdfc2F2ZSBjbG91ZF9zeW5jaHJvbmlzZSBhZHNfZW5hYmxlIGFkc19kaXNhYmxlIGFkc19zZXR1cCBhZHNfZW5nYWdlbWVudF9sYXVuY2ggYWRzX2VuZ2FnZW1lbnRfYXZhaWxhYmxlIGFkc19lbmdhZ2VtZW50X2FjdGl2ZSBhZHNfZXZlbnQgYWRzX2V2ZW50X3ByZWxvYWQgYWRzX3NldF9yZXdhcmRfY2FsbGJhY2sgYWRzX2dldF9kaXNwbGF5X2hlaWdodCBhZHNfZ2V0X2Rpc3BsYXlfd2lkdGggYWRzX21vdmUgYWRzX2ludGVyc3RpdGlhbF9hdmFpbGFibGUgYWRzX2ludGVyc3RpdGlhbF9kaXNwbGF5IGRldmljZV9nZXRfdGlsdF94IGRldmljZV9nZXRfdGlsdF95IGRldmljZV9nZXRfdGlsdF96IGRldmljZV9pc19rZXlwYWRfb3BlbiBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uIGRldmljZV9tb3VzZV9jaGVja19idXR0b25fcHJlc3NlZCBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uX3JlbGVhc2VkIGRldmljZV9tb3VzZV94IGRldmljZV9tb3VzZV95IGRldmljZV9tb3VzZV9yYXdfeCBkZXZpY2VfbW91c2VfcmF3X3kgZGV2aWNlX21vdXNlX3hfdG9fZ3VpIGRldmljZV9tb3VzZV95X3RvX2d1aSBpYXBfYWN0aXZhdGUgaWFwX3N0YXR1cyBpYXBfZW51bWVyYXRlX3Byb2R1Y3RzIGlhcF9yZXN0b3JlX2FsbCBpYXBfYWNxdWlyZSBpYXBfY29uc3VtZSBpYXBfcHJvZHVjdF9kZXRhaWxzIGlhcF9wdXJjaGFzZV9kZXRhaWxzIGZhY2Vib29rX2luaXQgZmFjZWJvb2tfbG9naW4gZmFjZWJvb2tfc3RhdHVzIGZhY2Vib29rX2dyYXBoX3JlcXVlc3QgZmFjZWJvb2tfZGlhbG9nIGZhY2Vib29rX2xvZ291dCBmYWNlYm9va19sYXVuY2hfb2ZmZXJ3YWxsIGZhY2Vib29rX3Bvc3RfbWVzc2FnZSBmYWNlYm9va19zZW5kX2ludml0ZSBmYWNlYm9va191c2VyX2lkIGZhY2Vib29rX2FjY2Vzc3Rva2VuIGZhY2Vib29rX2NoZWNrX3Blcm1pc3Npb24gZmFjZWJvb2tfcmVxdWVzdF9yZWFkX3Blcm1pc3Npb25zIGZhY2Vib29rX3JlcXVlc3RfcHVibGlzaF9wZXJtaXNzaW9ucyBnYW1lcGFkX2lzX3N1cHBvcnRlZCBnYW1lcGFkX2dldF9kZXZpY2VfY291bnQgZ2FtZXBhZF9pc19jb25uZWN0ZWQgZ2FtZXBhZF9nZXRfZGVzY3JpcHRpb24gZ2FtZXBhZF9nZXRfYnV0dG9uX3RocmVzaG9sZCBnYW1lcGFkX3NldF9idXR0b25fdGhyZXNob2xkIGdhbWVwYWRfZ2V0X2F4aXNfZGVhZHpvbmUgZ2FtZXBhZF9zZXRfYXhpc19kZWFkem9uZSBnYW1lcGFkX2J1dHRvbl9jb3VudCBnYW1lcGFkX2J1dHRvbl9jaGVjayBnYW1lcGFkX2J1dHRvbl9jaGVja19wcmVzc2VkIGdhbWVwYWRfYnV0dG9uX2NoZWNrX3JlbGVhc2VkIGdhbWVwYWRfYnV0dG9uX3ZhbHVlIGdhbWVwYWRfYXhpc19jb3VudCBnYW1lcGFkX2F4aXNfdmFsdWUgZ2FtZXBhZF9zZXRfdmlicmF0aW9uIGdhbWVwYWRfc2V0X2NvbG91ciBnYW1lcGFkX3NldF9jb2xvciBvc19pc19wYXVzZWQgd2luZG93X2hhc19mb2N1cyBjb2RlX2lzX2NvbXBpbGVkIGh0dHBfZ2V0IGh0dHBfZ2V0X2ZpbGUgaHR0cF9wb3N0X3N0cmluZyBodHRwX3JlcXVlc3QganNvbl9lbmNvZGUganNvbl9kZWNvZGUgemlwX3VuemlwIGxvYWRfY3N2IGJhc2U2NF9lbmNvZGUgYmFzZTY0X2RlY29kZSBtZDVfc3RyaW5nX3VuaWNvZGUgbWQ1X3N0cmluZ191dGY4IG1kNV9maWxlIG9zX2lzX25ldHdvcmtfY29ubmVjdGVkIHNoYTFfc3RyaW5nX3VuaWNvZGUgc2hhMV9zdHJpbmdfdXRmOCBzaGExX2ZpbGUgb3NfcG93ZXJzYXZlX2VuYWJsZSBhbmFseXRpY3NfZXZlbnQgYW5hbHl0aWNzX2V2ZW50X2V4dCB3aW44X2xpdmV0aWxlX3RpbGVfbm90aWZpY2F0aW9uIHdpbjhfbGl2ZXRpbGVfdGlsZV9jbGVhciB3aW44X2xpdmV0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiB3aW44X2xpdmV0aWxlX2JhZGdlX2NsZWFyIHdpbjhfbGl2ZXRpbGVfcXVldWVfZW5hYmxlIHdpbjhfc2Vjb25kYXJ5dGlsZV9waW4gd2luOF9zZWNvbmRhcnl0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiB3aW44X3NlY29uZGFyeXRpbGVfZGVsZXRlIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2JlZ2luIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3NlY29uZGFyeV9iZWdpbiB3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9leHBpcnkgd2luOF9saXZldGlsZV9ub3RpZmljYXRpb25fdGFnIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3RleHRfYWRkIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2ltYWdlX2FkZCB3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9lbmQgd2luOF9hcHBiYXJfZW5hYmxlIHdpbjhfYXBwYmFyX2FkZF9lbGVtZW50IHdpbjhfYXBwYmFyX3JlbW92ZV9lbGVtZW50IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfZW50cnkgd2luOF9zZXR0aW5nc2NoYXJtX2FkZF9odG1sX2VudHJ5IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfeGFtbF9lbnRyeSB3aW44X3NldHRpbmdzY2hhcm1fc2V0X3hhbWxfcHJvcGVydHkgd2luOF9zZXR0aW5nc2NoYXJtX2dldF94YW1sX3Byb3BlcnR5IHdpbjhfc2V0dGluZ3NjaGFybV9yZW1vdmVfZW50cnkgd2luOF9zaGFyZV9pbWFnZSB3aW44X3NoYXJlX3NjcmVlbnNob3Qgd2luOF9zaGFyZV9maWxlIHdpbjhfc2hhcmVfdXJsIHdpbjhfc2hhcmVfdGV4dCB3aW44X3NlYXJjaF9lbmFibGUgd2luOF9zZWFyY2hfZGlzYWJsZSB3aW44X3NlYXJjaF9hZGRfc3VnZ2VzdGlvbnMgd2luOF9kZXZpY2VfdG91Y2hzY3JlZW5fYXZhaWxhYmxlIHdpbjhfbGljZW5zZV9pbml0aWFsaXplX3NhbmRib3ggd2luOF9saWNlbnNlX3RyaWFsX3ZlcnNpb24gd2lucGhvbmVfbGljZW5zZV90cmlhbF92ZXJzaW9uIHdpbnBob25lX3RpbGVfdGl0bGUgd2lucGhvbmVfdGlsZV9jb3VudCB3aW5waG9uZV90aWxlX2JhY2tfdGl0bGUgd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnQgd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnRfd2lkZSB3aW5waG9uZV90aWxlX2Zyb250X2ltYWdlIHdpbnBob25lX3RpbGVfZnJvbnRfaW1hZ2Vfc21hbGwgd2lucGhvbmVfdGlsZV9mcm9udF9pbWFnZV93aWRlIHdpbnBob25lX3RpbGVfYmFja19pbWFnZSB3aW5waG9uZV90aWxlX2JhY2tfaW1hZ2Vfd2lkZSB3aW5waG9uZV90aWxlX2JhY2tncm91bmRfY29sb3VyIHdpbnBob25lX3RpbGVfYmFja2dyb3VuZF9jb2xvciB3aW5waG9uZV90aWxlX2ljb25faW1hZ2Ugd2lucGhvbmVfdGlsZV9zbWFsbF9pY29uX2ltYWdlIHdpbnBob25lX3RpbGVfd2lkZV9jb250ZW50IHdpbnBob25lX3RpbGVfY3ljbGVfaW1hZ2VzIHdpbnBob25lX3RpbGVfc21hbGxfYmFja2dyb3VuZF9pbWFnZSBwaHlzaWNzX3dvcmxkX2NyZWF0ZSBwaHlzaWNzX3dvcmxkX2dyYXZpdHkgcGh5c2ljc193b3JsZF91cGRhdGVfc3BlZWQgcGh5c2ljc193b3JsZF91cGRhdGVfaXRlcmF0aW9ucyBwaHlzaWNzX3dvcmxkX2RyYXdfZGVidWcgcGh5c2ljc19wYXVzZV9lbmFibGUgcGh5c2ljc19maXh0dXJlX2NyZWF0ZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2tpbmVtYXRpYyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2RlbnNpdHkgcGh5c2ljc19maXh0dXJlX3NldF9hd2FrZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X3Jlc3RpdHV0aW9uIHBoeXNpY3NfZml4dHVyZV9zZXRfZnJpY3Rpb24gcGh5c2ljc19maXh0dXJlX3NldF9jb2xsaXNpb25fZ3JvdXAgcGh5c2ljc19maXh0dXJlX3NldF9zZW5zb3IgcGh5c2ljc19maXh0dXJlX3NldF9saW5lYXJfZGFtcGluZyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2FuZ3VsYXJfZGFtcGluZyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2NpcmNsZV9zaGFwZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2JveF9zaGFwZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2VkZ2Vfc2hhcGUgcGh5c2ljc19maXh0dXJlX3NldF9wb2x5Z29uX3NoYXBlIHBoeXNpY3NfZml4dHVyZV9zZXRfY2hhaW5fc2hhcGUgcGh5c2ljc19maXh0dXJlX2FkZF9wb2ludCBwaHlzaWNzX2ZpeHR1cmVfYmluZCBwaHlzaWNzX2ZpeHR1cmVfYmluZF9leHQgcGh5c2ljc19maXh0dXJlX2RlbGV0ZSBwaHlzaWNzX2FwcGx5X2ZvcmNlIHBoeXNpY3NfYXBwbHlfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X2FuZ3VsYXJfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X2xvY2FsX2ZvcmNlIHBoeXNpY3NfYXBwbHlfbG9jYWxfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X3RvcnF1ZSBwaHlzaWNzX21hc3NfcHJvcGVydGllcyBwaHlzaWNzX2RyYXdfZGVidWcgcGh5c2ljc190ZXN0X292ZXJsYXAgcGh5c2ljc19yZW1vdmVfZml4dHVyZSBwaHlzaWNzX3NldF9mcmljdGlvbiBwaHlzaWNzX3NldF9kZW5zaXR5IHBoeXNpY3Nfc2V0X3Jlc3RpdHV0aW9uIHBoeXNpY3NfZ2V0X2ZyaWN0aW9uIHBoeXNpY3NfZ2V0X2RlbnNpdHkgcGh5c2ljc19nZXRfcmVzdGl0dXRpb24gcGh5c2ljc19qb2ludF9kaXN0YW5jZV9jcmVhdGUgcGh5c2ljc19qb2ludF9yb3BlX2NyZWF0ZSBwaHlzaWNzX2pvaW50X3Jldm9sdXRlX2NyZWF0ZSBwaHlzaWNzX2pvaW50X3ByaXNtYXRpY19jcmVhdGUgcGh5c2ljc19qb2ludF9wdWxsZXlfY3JlYXRlIHBoeXNpY3Nfam9pbnRfd2hlZWxfY3JlYXRlIHBoeXNpY3Nfam9pbnRfd2VsZF9jcmVhdGUgcGh5c2ljc19qb2ludF9mcmljdGlvbl9jcmVhdGUgcGh5c2ljc19qb2ludF9nZWFyX2NyZWF0ZSBwaHlzaWNzX2pvaW50X2VuYWJsZV9tb3RvciBwaHlzaWNzX2pvaW50X2dldF92YWx1ZSBwaHlzaWNzX2pvaW50X3NldF92YWx1ZSBwaHlzaWNzX2pvaW50X2RlbGV0ZSBwaHlzaWNzX3BhcnRpY2xlX2NyZWF0ZSBwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZSBwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZV9yZWdpb25fY2lyY2xlIHBoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9ib3ggcGh5c2ljc19wYXJ0aWNsZV9kZWxldGVfcmVnaW9uX3BvbHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9zZXRfY2F0ZWdvcnlfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9kcmF3IHBoeXNpY3NfcGFydGljbGVfZHJhd19leHQgcGh5c2ljc19wYXJ0aWNsZV9jb3VudCBwaHlzaWNzX3BhcnRpY2xlX2dldF9kYXRhIHBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFfcGFydGljbGUgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9iZWdpbiBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2NpcmNsZSBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2JveCBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX3BvbHlnb24gcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9hZGRfcG9pbnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9lbmQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9qb2luIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZGVsZXRlIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfZGF0YSBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9tYXNzIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X2luZXJ0aWEgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3ggcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3ggcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nX3ZlbCBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF94IHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nbGUgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZ3JvdXBfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3JvdXBfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9nZXRfbWF4X2NvdW50IHBoeXNpY3NfcGFydGljbGVfZ2V0X3JhZGl1cyBwaHlzaWNzX3BhcnRpY2xlX2dldF9kZW5zaXR5IHBoeXNpY3NfcGFydGljbGVfZ2V0X2RhbXBpbmcgcGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3Jhdml0eV9zY2FsZSBwaHlzaWNzX3BhcnRpY2xlX3NldF9tYXhfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9zZXRfcmFkaXVzIHBoeXNpY3NfcGFydGljbGVfc2V0X2RlbnNpdHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZGFtcGluZyBwaHlzaWNzX3BhcnRpY2xlX3NldF9ncmF2aXR5X3NjYWxlIG5ldHdvcmtfY3JlYXRlX3NvY2tldCBuZXR3b3JrX2NyZWF0ZV9zb2NrZXRfZXh0IG5ldHdvcmtfY3JlYXRlX3NlcnZlciBuZXR3b3JrX2NyZWF0ZV9zZXJ2ZXJfcmF3IG5ldHdvcmtfY29ubmVjdCBuZXR3b3JrX2Nvbm5lY3RfcmF3IG5ldHdvcmtfc2VuZF9wYWNrZXQgbmV0d29ya19zZW5kX3JhdyBuZXR3b3JrX3NlbmRfYnJvYWRjYXN0IG5ldHdvcmtfc2VuZF91ZHAgbmV0d29ya19zZW5kX3VkcF9yYXcgbmV0d29ya19zZXRfdGltZW91dCBuZXR3b3JrX3NldF9jb25maWcgbmV0d29ya19yZXNvbHZlIG5ldHdvcmtfZGVzdHJveSBidWZmZXJfY3JlYXRlIGJ1ZmZlcl93cml0ZSBidWZmZXJfcmVhZCBidWZmZXJfc2VlayBidWZmZXJfZ2V0X3N1cmZhY2UgYnVmZmVyX3NldF9zdXJmYWNlIGJ1ZmZlcl9kZWxldGUgYnVmZmVyX2V4aXN0cyBidWZmZXJfZ2V0X3R5cGUgYnVmZmVyX2dldF9hbGlnbm1lbnQgYnVmZmVyX3Bva2UgYnVmZmVyX3BlZWsgYnVmZmVyX3NhdmUgYnVmZmVyX3NhdmVfZXh0IGJ1ZmZlcl9sb2FkIGJ1ZmZlcl9sb2FkX2V4dCBidWZmZXJfbG9hZF9wYXJ0aWFsIGJ1ZmZlcl9jb3B5IGJ1ZmZlcl9maWxsIGJ1ZmZlcl9nZXRfc2l6ZSBidWZmZXJfdGVsbCBidWZmZXJfcmVzaXplIGJ1ZmZlcl9tZDUgYnVmZmVyX3NoYTEgYnVmZmVyX2Jhc2U2NF9lbmNvZGUgYnVmZmVyX2Jhc2U2NF9kZWNvZGUgYnVmZmVyX2Jhc2U2NF9kZWNvZGVfZXh0IGJ1ZmZlcl9zaXplb2YgYnVmZmVyX2dldF9hZGRyZXNzIGJ1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyIGJ1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyX2V4dCBidWZmZXJfY29weV9mcm9tX3ZlcnRleF9idWZmZXIgYnVmZmVyX2FzeW5jX2dyb3VwX2JlZ2luIGJ1ZmZlcl9hc3luY19ncm91cF9vcHRpb24gYnVmZmVyX2FzeW5jX2dyb3VwX2VuZCBidWZmZXJfbG9hZF9hc3luYyBidWZmZXJfc2F2ZV9hc3luYyBnbWxfcmVsZWFzZV9tb2RlIGdtbF9wcmFnbWEgc3RlYW1fYWN0aXZhdGVfb3ZlcmxheSBzdGVhbV9pc19vdmVybGF5X2VuYWJsZWQgc3RlYW1faXNfb3ZlcmxheV9hY3RpdmF0ZWQgc3RlYW1fZ2V0X3BlcnNvbmFfbmFtZSBzdGVhbV9pbml0aWFsaXNlZCBzdGVhbV9pc19jbG91ZF9lbmFibGVkX2Zvcl9hcHAgc3RlYW1faXNfY2xvdWRfZW5hYmxlZF9mb3JfYWNjb3VudCBzdGVhbV9maWxlX3BlcnNpc3RlZCBzdGVhbV9nZXRfcXVvdGFfdG90YWwgc3RlYW1fZ2V0X3F1b3RhX2ZyZWUgc3RlYW1fZmlsZV93cml0ZSBzdGVhbV9maWxlX3dyaXRlX2ZpbGUgc3RlYW1fZmlsZV9yZWFkIHN0ZWFtX2ZpbGVfZGVsZXRlIHN0ZWFtX2ZpbGVfZXhpc3RzIHN0ZWFtX2ZpbGVfc2l6ZSBzdGVhbV9maWxlX3NoYXJlIHN0ZWFtX2lzX3NjcmVlbnNob3RfcmVxdWVzdGVkIHN0ZWFtX3NlbmRfc2NyZWVuc2hvdCBzdGVhbV9pc191c2VyX2xvZ2dlZF9vbiBzdGVhbV9nZXRfdXNlcl9zdGVhbV9pZCBzdGVhbV91c2VyX293bnNfZGxjIHN0ZWFtX3VzZXJfaW5zdGFsbGVkX2RsYyBzdGVhbV9zZXRfYWNoaWV2ZW1lbnQgc3RlYW1fZ2V0X2FjaGlldmVtZW50IHN0ZWFtX2NsZWFyX2FjaGlldmVtZW50IHN0ZWFtX3NldF9zdGF0X2ludCBzdGVhbV9zZXRfc3RhdF9mbG9hdCBzdGVhbV9zZXRfc3RhdF9hdmdfcmF0ZSBzdGVhbV9nZXRfc3RhdF9pbnQgc3RlYW1fZ2V0X3N0YXRfZmxvYXQgc3RlYW1fZ2V0X3N0YXRfYXZnX3JhdGUgc3RlYW1fcmVzZXRfYWxsX3N0YXRzIHN0ZWFtX3Jlc2V0X2FsbF9zdGF0c19hY2hpZXZlbWVudHMgc3RlYW1fc3RhdHNfcmVhZHkgc3RlYW1fY3JlYXRlX2xlYWRlcmJvYXJkIHN0ZWFtX3VwbG9hZF9zY29yZSBzdGVhbV91cGxvYWRfc2NvcmVfZXh0IHN0ZWFtX2Rvd25sb2FkX3Njb3Jlc19hcm91bmRfdXNlciBzdGVhbV9kb3dubG9hZF9zY29yZXMgc3RlYW1fZG93bmxvYWRfZnJpZW5kc19zY29yZXMgc3RlYW1fdXBsb2FkX3Njb3JlX2J1ZmZlciBzdGVhbV91cGxvYWRfc2NvcmVfYnVmZmVyX2V4dCBzdGVhbV9jdXJyZW50X2dhbWVfbGFuZ3VhZ2Ugc3RlYW1fYXZhaWxhYmxlX2xhbmd1YWdlcyBzdGVhbV9hY3RpdmF0ZV9vdmVybGF5X2Jyb3dzZXIgc3RlYW1fYWN0aXZhdGVfb3ZlcmxheV91c2VyIHN0ZWFtX2FjdGl2YXRlX292ZXJsYXlfc3RvcmUgc3RlYW1fZ2V0X3VzZXJfcGVyc29uYV9uYW1lIHN0ZWFtX2dldF9hcHBfaWQgc3RlYW1fZ2V0X3VzZXJfYWNjb3VudF9pZCBzdGVhbV91Z2NfZG93bmxvYWQgc3RlYW1fdWdjX2NyZWF0ZV9pdGVtIHN0ZWFtX3VnY19zdGFydF9pdGVtX3VwZGF0ZSBzdGVhbV91Z2Nfc2V0X2l0ZW1fdGl0bGUgc3RlYW1fdWdjX3NldF9pdGVtX2Rlc2NyaXB0aW9uIHN0ZWFtX3VnY19zZXRfaXRlbV92aXNpYmlsaXR5IHN0ZWFtX3VnY19zZXRfaXRlbV90YWdzIHN0ZWFtX3VnY19zZXRfaXRlbV9jb250ZW50IHN0ZWFtX3VnY19zZXRfaXRlbV9wcmV2aWV3IHN0ZWFtX3VnY19zdWJtaXRfaXRlbV91cGRhdGUgc3RlYW1fdWdjX2dldF9pdGVtX3VwZGF0ZV9wcm9ncmVzcyBzdGVhbV91Z2Nfc3Vic2NyaWJlX2l0ZW0gc3RlYW1fdWdjX3Vuc3Vic2NyaWJlX2l0ZW0gc3RlYW1fdWdjX251bV9zdWJzY3JpYmVkX2l0ZW1zIHN0ZWFtX3VnY19nZXRfc3Vic2NyaWJlZF9pdGVtcyBzdGVhbV91Z2NfZ2V0X2l0ZW1faW5zdGFsbF9pbmZvIHN0ZWFtX3VnY19nZXRfaXRlbV91cGRhdGVfaW5mbyBzdGVhbV91Z2NfcmVxdWVzdF9pdGVtX2RldGFpbHMgc3RlYW1fdWdjX2NyZWF0ZV9xdWVyeV91c2VyIHN0ZWFtX3VnY19jcmVhdGVfcXVlcnlfdXNlcl9leCBzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbCBzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbF9leCBzdGVhbV91Z2NfcXVlcnlfc2V0X2Nsb3VkX2ZpbGVuYW1lX2ZpbHRlciBzdGVhbV91Z2NfcXVlcnlfc2V0X21hdGNoX2FueV90YWcgc3RlYW1fdWdjX3F1ZXJ5X3NldF9zZWFyY2hfdGV4dCBzdGVhbV91Z2NfcXVlcnlfc2V0X3JhbmtlZF9ieV90cmVuZF9kYXlzIHN0ZWFtX3VnY19xdWVyeV9hZGRfcmVxdWlyZWRfdGFnIHN0ZWFtX3VnY19xdWVyeV9hZGRfZXhjbHVkZWRfdGFnIHN0ZWFtX3VnY19xdWVyeV9zZXRfcmV0dXJuX2xvbmdfZGVzY3JpcHRpb24gc3RlYW1fdWdjX3F1ZXJ5X3NldF9yZXR1cm5fdG90YWxfb25seSBzdGVhbV91Z2NfcXVlcnlfc2V0X2FsbG93X2NhY2hlZF9yZXNwb25zZSBzdGVhbV91Z2Nfc2VuZF9xdWVyeSBzaGFkZXJfc2V0IHNoYWRlcl9nZXRfbmFtZSBzaGFkZXJfcmVzZXQgc2hhZGVyX2N1cnJlbnQgc2hhZGVyX2lzX2NvbXBpbGVkIHNoYWRlcl9nZXRfc2FtcGxlcl9pbmRleCBzaGFkZXJfZ2V0X3VuaWZvcm0gc2hhZGVyX3NldF91bmlmb3JtX2kgc2hhZGVyX3NldF91bmlmb3JtX2lfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX2Ygc2hhZGVyX3NldF91bmlmb3JtX2ZfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX21hdHJpeCBzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4X2FycmF5IHNoYWRlcl9lbmFibGVfY29ybmVyX2lkIHRleHR1cmVfc2V0X3N0YWdlIHRleHR1cmVfZ2V0X3RleGVsX3dpZHRoIHRleHR1cmVfZ2V0X3RleGVsX2hlaWdodCBzaGFkZXJzX2FyZV9zdXBwb3J0ZWQgdmVydGV4X2Zvcm1hdF9iZWdpbiB2ZXJ0ZXhfZm9ybWF0X2VuZCB2ZXJ0ZXhfZm9ybWF0X2RlbGV0ZSB2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbiB2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbl8zZCB2ZXJ0ZXhfZm9ybWF0X2FkZF9jb2xvdXIgdmVydGV4X2Zvcm1hdF9hZGRfY29sb3IgdmVydGV4X2Zvcm1hdF9hZGRfbm9ybWFsIHZlcnRleF9mb3JtYXRfYWRkX3RleGNvb3JkIHZlcnRleF9mb3JtYXRfYWRkX3RleHRjb29yZCB2ZXJ0ZXhfZm9ybWF0X2FkZF9jdXN0b20gdmVydGV4X2NyZWF0ZV9idWZmZXIgdmVydGV4X2NyZWF0ZV9idWZmZXJfZXh0IHZlcnRleF9kZWxldGVfYnVmZmVyIHZlcnRleF9iZWdpbiB2ZXJ0ZXhfZW5kIHZlcnRleF9wb3NpdGlvbiB2ZXJ0ZXhfcG9zaXRpb25fM2QgdmVydGV4X2NvbG91ciB2ZXJ0ZXhfY29sb3IgdmVydGV4X2FyZ2IgdmVydGV4X3RleGNvb3JkIHZlcnRleF9ub3JtYWwgdmVydGV4X2Zsb2F0MSB2ZXJ0ZXhfZmxvYXQyIHZlcnRleF9mbG9hdDMgdmVydGV4X2Zsb2F0NCB2ZXJ0ZXhfdWJ5dGU0IHZlcnRleF9zdWJtaXQgdmVydGV4X2ZyZWV6ZSB2ZXJ0ZXhfZ2V0X251bWJlciB2ZXJ0ZXhfZ2V0X2J1ZmZlcl9zaXplIHZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyIHZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyX2V4dCBwdXNoX2xvY2FsX25vdGlmaWNhdGlvbiBwdXNoX2dldF9maXJzdF9sb2NhbF9ub3RpZmljYXRpb24gcHVzaF9nZXRfbmV4dF9sb2NhbF9ub3RpZmljYXRpb24gcHVzaF9jYW5jZWxfbG9jYWxfbm90aWZpY2F0aW9uIHNrZWxldG9uX2FuaW1hdGlvbl9zZXQgc2tlbGV0b25fYW5pbWF0aW9uX2dldCBza2VsZXRvbl9hbmltYXRpb25fbWl4IHNrZWxldG9uX2FuaW1hdGlvbl9zZXRfZXh0IHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZXh0IHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZHVyYXRpb24gc2tlbGV0b25fYW5pbWF0aW9uX2dldF9mcmFtZXMgc2tlbGV0b25fYW5pbWF0aW9uX2NsZWFyIHNrZWxldG9uX3NraW5fc2V0IHNrZWxldG9uX3NraW5fZ2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfc2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfZ2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfY3JlYXRlIHNrZWxldG9uX2NvbGxpc2lvbl9kcmF3X3NldCBza2VsZXRvbl9ib25lX2RhdGFfZ2V0IHNrZWxldG9uX2JvbmVfZGF0YV9zZXQgc2tlbGV0b25fYm9uZV9zdGF0ZV9nZXQgc2tlbGV0b25fYm9uZV9zdGF0ZV9zZXQgc2tlbGV0b25fZ2V0X21pbm1heCBza2VsZXRvbl9nZXRfbnVtX2JvdW5kcyBza2VsZXRvbl9nZXRfYm91bmRzIHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWUgc2tlbGV0b25fYW5pbWF0aW9uX3NldF9mcmFtZSBkcmF3X3NrZWxldG9uIGRyYXdfc2tlbGV0b25fdGltZSBkcmF3X3NrZWxldG9uX2luc3RhbmNlIGRyYXdfc2tlbGV0b25fY29sbGlzaW9uIHNrZWxldG9uX2FuaW1hdGlvbl9saXN0IHNrZWxldG9uX3NraW5fbGlzdCBza2VsZXRvbl9zbG90X2RhdGEgbGF5ZXJfZ2V0X2lkIGxheWVyX2dldF9pZF9hdF9kZXB0aCBsYXllcl9nZXRfZGVwdGggbGF5ZXJfY3JlYXRlIGxheWVyX2Rlc3Ryb3kgbGF5ZXJfZGVzdHJveV9pbnN0YW5jZXMgbGF5ZXJfYWRkX2luc3RhbmNlIGxheWVyX2hhc19pbnN0YW5jZSBsYXllcl9zZXRfdmlzaWJsZSBsYXllcl9nZXRfdmlzaWJsZSBsYXllcl9leGlzdHMgbGF5ZXJfeCBsYXllcl95IGxheWVyX2dldF94IGxheWVyX2dldF95IGxheWVyX2hzcGVlZCBsYXllcl92c3BlZWQgbGF5ZXJfZ2V0X2hzcGVlZCBsYXllcl9nZXRfdnNwZWVkIGxheWVyX3NjcmlwdF9iZWdpbiBsYXllcl9zY3JpcHRfZW5kIGxheWVyX3NoYWRlciBsYXllcl9nZXRfc2NyaXB0X2JlZ2luIGxheWVyX2dldF9zY3JpcHRfZW5kIGxheWVyX2dldF9zaGFkZXIgbGF5ZXJfc2V0X3RhcmdldF9yb29tIGxheWVyX2dldF90YXJnZXRfcm9vbSBsYXllcl9yZXNldF90YXJnZXRfcm9vbSBsYXllcl9nZXRfYWxsIGxheWVyX2dldF9hbGxfZWxlbWVudHMgbGF5ZXJfZ2V0X25hbWUgbGF5ZXJfZGVwdGggbGF5ZXJfZ2V0X2VsZW1lbnRfbGF5ZXIgbGF5ZXJfZ2V0X2VsZW1lbnRfdHlwZSBsYXllcl9lbGVtZW50X21vdmUgbGF5ZXJfZm9yY2VfZHJhd19kZXB0aCBsYXllcl9pc19kcmF3X2RlcHRoX2ZvcmNlZCBsYXllcl9nZXRfZm9yY2VkX2RlcHRoIGxheWVyX2JhY2tncm91bmRfZ2V0X2lkIGxheWVyX2JhY2tncm91bmRfZXhpc3RzIGxheWVyX2JhY2tncm91bmRfY3JlYXRlIGxheWVyX2JhY2tncm91bmRfZGVzdHJveSBsYXllcl9iYWNrZ3JvdW5kX3Zpc2libGUgbGF5ZXJfYmFja2dyb3VuZF9jaGFuZ2UgbGF5ZXJfYmFja2dyb3VuZF9zcHJpdGUgbGF5ZXJfYmFja2dyb3VuZF9odGlsZWQgbGF5ZXJfYmFja2dyb3VuZF92dGlsZWQgbGF5ZXJfYmFja2dyb3VuZF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfeXNjYWxlIGxheWVyX2JhY2tncm91bmRfeHNjYWxlIGxheWVyX2JhY2tncm91bmRfYmxlbmQgbGF5ZXJfYmFja2dyb3VuZF9hbHBoYSBsYXllcl9iYWNrZ3JvdW5kX2luZGV4IGxheWVyX2JhY2tncm91bmRfc3BlZWQgbGF5ZXJfYmFja2dyb3VuZF9nZXRfdmlzaWJsZSBsYXllcl9iYWNrZ3JvdW5kX2dldF9zcHJpdGUgbGF5ZXJfYmFja2dyb3VuZF9nZXRfaHRpbGVkIGxheWVyX2JhY2tncm91bmRfZ2V0X3Z0aWxlZCBsYXllcl9iYWNrZ3JvdW5kX2dldF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfZ2V0X3lzY2FsZSBsYXllcl9iYWNrZ3JvdW5kX2dldF94c2NhbGUgbGF5ZXJfYmFja2dyb3VuZF9nZXRfYmxlbmQgbGF5ZXJfYmFja2dyb3VuZF9nZXRfYWxwaGEgbGF5ZXJfYmFja2dyb3VuZF9nZXRfaW5kZXggbGF5ZXJfYmFja2dyb3VuZF9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF9pZCBsYXllcl9zcHJpdGVfZXhpc3RzIGxheWVyX3Nwcml0ZV9jcmVhdGUgbGF5ZXJfc3ByaXRlX2Rlc3Ryb3kgbGF5ZXJfc3ByaXRlX2NoYW5nZSBsYXllcl9zcHJpdGVfaW5kZXggbGF5ZXJfc3ByaXRlX3NwZWVkIGxheWVyX3Nwcml0ZV94c2NhbGUgbGF5ZXJfc3ByaXRlX3lzY2FsZSBsYXllcl9zcHJpdGVfYW5nbGUgbGF5ZXJfc3ByaXRlX2JsZW5kIGxheWVyX3Nwcml0ZV9hbHBoYSBsYXllcl9zcHJpdGVfeCBsYXllcl9zcHJpdGVfeSBsYXllcl9zcHJpdGVfZ2V0X3Nwcml0ZSBsYXllcl9zcHJpdGVfZ2V0X2luZGV4IGxheWVyX3Nwcml0ZV9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF94c2NhbGUgbGF5ZXJfc3ByaXRlX2dldF95c2NhbGUgbGF5ZXJfc3ByaXRlX2dldF9hbmdsZSBsYXllcl9zcHJpdGVfZ2V0X2JsZW5kIGxheWVyX3Nwcml0ZV9nZXRfYWxwaGEgbGF5ZXJfc3ByaXRlX2dldF94IGxheWVyX3Nwcml0ZV9nZXRfeSBsYXllcl90aWxlbWFwX2dldF9pZCBsYXllcl90aWxlbWFwX2V4aXN0cyBsYXllcl90aWxlbWFwX2NyZWF0ZSBsYXllcl90aWxlbWFwX2Rlc3Ryb3kgdGlsZW1hcF90aWxlc2V0IHRpbGVtYXBfeCB0aWxlbWFwX3kgdGlsZW1hcF9zZXQgdGlsZW1hcF9zZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfdGlsZXNldCB0aWxlbWFwX2dldF90aWxlX3dpZHRoIHRpbGVtYXBfZ2V0X3RpbGVfaGVpZ2h0IHRpbGVtYXBfZ2V0X3dpZHRoIHRpbGVtYXBfZ2V0X2hlaWdodCB0aWxlbWFwX2dldF94IHRpbGVtYXBfZ2V0X3kgdGlsZW1hcF9nZXQgdGlsZW1hcF9nZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfY2VsbF94X2F0X3BpeGVsIHRpbGVtYXBfZ2V0X2NlbGxfeV9hdF9waXhlbCB0aWxlbWFwX2NsZWFyIGRyYXdfdGlsZW1hcCBkcmF3X3RpbGUgdGlsZW1hcF9zZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9nZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9zZXRfbWFzayB0aWxlbWFwX2dldF9tYXNrIHRpbGVtYXBfZ2V0X2ZyYW1lIHRpbGVfc2V0X2VtcHR5IHRpbGVfc2V0X2luZGV4IHRpbGVfc2V0X2ZsaXAgdGlsZV9zZXRfbWlycm9yIHRpbGVfc2V0X3JvdGF0ZSB0aWxlX2dldF9lbXB0eSB0aWxlX2dldF9pbmRleCB0aWxlX2dldF9mbGlwIHRpbGVfZ2V0X21pcnJvciB0aWxlX2dldF9yb3RhdGUgbGF5ZXJfdGlsZV9leGlzdHMgbGF5ZXJfdGlsZV9jcmVhdGUgbGF5ZXJfdGlsZV9kZXN0cm95IGxheWVyX3RpbGVfY2hhbmdlIGxheWVyX3RpbGVfeHNjYWxlIGxheWVyX3RpbGVfeXNjYWxlIGxheWVyX3RpbGVfYmxlbmQgbGF5ZXJfdGlsZV9hbHBoYSBsYXllcl90aWxlX3ggbGF5ZXJfdGlsZV95IGxheWVyX3RpbGVfcmVnaW9uIGxheWVyX3RpbGVfdmlzaWJsZSBsYXllcl90aWxlX2dldF9zcHJpdGUgbGF5ZXJfdGlsZV9nZXRfeHNjYWxlIGxheWVyX3RpbGVfZ2V0X3lzY2FsZSBsYXllcl90aWxlX2dldF9ibGVuZCBsYXllcl90aWxlX2dldF9hbHBoYSBsYXllcl90aWxlX2dldF94IGxheWVyX3RpbGVfZ2V0X3kgbGF5ZXJfdGlsZV9nZXRfcmVnaW9uIGxheWVyX3RpbGVfZ2V0X3Zpc2libGUgbGF5ZXJfaW5zdGFuY2VfZ2V0X2luc3RhbmNlIGluc3RhbmNlX2FjdGl2YXRlX2xheWVyIGluc3RhbmNlX2RlYWN0aXZhdGVfbGF5ZXIgY2FtZXJhX2NyZWF0ZSBjYW1lcmFfY3JlYXRlX3ZpZXcgY2FtZXJhX2Rlc3Ryb3kgY2FtZXJhX2FwcGx5IGNhbWVyYV9nZXRfYWN0aXZlIGNhbWVyYV9nZXRfZGVmYXVsdCBjYW1lcmFfc2V0X2RlZmF1bHQgY2FtZXJhX3NldF92aWV3X21hdCBjYW1lcmFfc2V0X3Byb2pfbWF0IGNhbWVyYV9zZXRfdXBkYXRlX3NjcmlwdCBjYW1lcmFfc2V0X2JlZ2luX3NjcmlwdCBjYW1lcmFfc2V0X2VuZF9zY3JpcHQgY2FtZXJhX3NldF92aWV3X3BvcyBjYW1lcmFfc2V0X3ZpZXdfc2l6ZSBjYW1lcmFfc2V0X3ZpZXdfc3BlZWQgY2FtZXJhX3NldF92aWV3X2JvcmRlciBjYW1lcmFfc2V0X3ZpZXdfYW5nbGUgY2FtZXJhX3NldF92aWV3X3RhcmdldCBjYW1lcmFfZ2V0X3ZpZXdfbWF0IGNhbWVyYV9nZXRfcHJval9tYXQgY2FtZXJhX2dldF91cGRhdGVfc2NyaXB0IGNhbWVyYV9nZXRfYmVnaW5fc2NyaXB0IGNhbWVyYV9nZXRfZW5kX3NjcmlwdCBjYW1lcmFfZ2V0X3ZpZXdfeCBjYW1lcmFfZ2V0X3ZpZXdfeSBjYW1lcmFfZ2V0X3ZpZXdfd2lkdGggY2FtZXJhX2dldF92aWV3X2hlaWdodCBjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeCBjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeSBjYW1lcmFfZ2V0X3ZpZXdfYm9yZGVyX3ggY2FtZXJhX2dldF92aWV3X2JvcmRlcl95IGNhbWVyYV9nZXRfdmlld19hbmdsZSBjYW1lcmFfZ2V0X3ZpZXdfdGFyZ2V0IHZpZXdfZ2V0X2NhbWVyYSB2aWV3X2dldF92aXNpYmxlIHZpZXdfZ2V0X3hwb3J0IHZpZXdfZ2V0X3lwb3J0IHZpZXdfZ2V0X3dwb3J0IHZpZXdfZ2V0X2hwb3J0IHZpZXdfZ2V0X3N1cmZhY2VfaWQgdmlld19zZXRfY2FtZXJhIHZpZXdfc2V0X3Zpc2libGUgdmlld19zZXRfeHBvcnQgdmlld19zZXRfeXBvcnQgdmlld19zZXRfd3BvcnQgdmlld19zZXRfaHBvcnQgdmlld19zZXRfc3VyZmFjZV9pZCBnZXN0dXJlX2RyYWdfdGltZSBnZXN0dXJlX2RyYWdfZGlzdGFuY2UgZ2VzdHVyZV9mbGlja19zcGVlZCBnZXN0dXJlX2RvdWJsZV90YXBfdGltZSBnZXN0dXJlX2RvdWJsZV90YXBfZGlzdGFuY2UgZ2VzdHVyZV9waW5jaF9kaXN0YW5jZSBnZXN0dXJlX3BpbmNoX2FuZ2xlX3Rvd2FyZHMgZ2VzdHVyZV9waW5jaF9hbmdsZV9hd2F5IGdlc3R1cmVfcm90YXRlX3RpbWUgZ2VzdHVyZV9yb3RhdGVfYW5nbGUgZ2VzdHVyZV90YXBfY291bnQgZ2VzdHVyZV9nZXRfZHJhZ190aW1lIGdlc3R1cmVfZ2V0X2RyYWdfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfZmxpY2tfc3BlZWQgZ2VzdHVyZV9nZXRfZG91YmxlX3RhcF90aW1lIGdlc3R1cmVfZ2V0X2RvdWJsZV90YXBfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfcGluY2hfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfcGluY2hfYW5nbGVfdG93YXJkcyBnZXN0dXJlX2dldF9waW5jaF9hbmdsZV9hd2F5IGdlc3R1cmVfZ2V0X3JvdGF0ZV90aW1lIGdlc3R1cmVfZ2V0X3JvdGF0ZV9hbmdsZSBnZXN0dXJlX2dldF90YXBfY291bnQga2V5Ym9hcmRfdmlydHVhbF9zaG93IGtleWJvYXJkX3ZpcnR1YWxfaGlkZSBrZXlib2FyZF92aXJ0dWFsX3N0YXR1cyBrZXlib2FyZF92aXJ0dWFsX2hlaWdodCIsbGl0ZXJhbDoic2VsZiBvdGhlciBhbGwgbm9vbmUgZ2xvYmFsIGxvY2FsIHVuZGVmaW5lZCBwb2ludGVyX2ludmFsaWQgcG9pbnRlcl9udWxsIHBhdGhfYWN0aW9uX3N0b3AgcGF0aF9hY3Rpb25fcmVzdGFydCBwYXRoX2FjdGlvbl9jb250aW51ZSBwYXRoX2FjdGlvbl9yZXZlcnNlIHRydWUgZmFsc2UgcGkgR01fYnVpbGRfZGF0ZSBHTV92ZXJzaW9uIEdNX3J1bnRpbWVfdmVyc2lvbiAgdGltZXpvbmVfbG9jYWwgdGltZXpvbmVfdXRjIGdhbWVzcGVlZF9mcHMgZ2FtZXNwZWVkX21pY3Jvc2Vjb25kcyAgZXZfY3JlYXRlIGV2X2Rlc3Ryb3kgZXZfc3RlcCBldl9hbGFybSBldl9rZXlib2FyZCBldl9tb3VzZSBldl9jb2xsaXNpb24gZXZfb3RoZXIgZXZfZHJhdyBldl9kcmF3X2JlZ2luIGV2X2RyYXdfZW5kIGV2X2RyYXdfcHJlIGV2X2RyYXdfcG9zdCBldl9rZXlwcmVzcyBldl9rZXlyZWxlYXNlIGV2X3RyaWdnZXIgZXZfbGVmdF9idXR0b24gZXZfcmlnaHRfYnV0dG9uIGV2X21pZGRsZV9idXR0b24gZXZfbm9fYnV0dG9uIGV2X2xlZnRfcHJlc3MgZXZfcmlnaHRfcHJlc3MgZXZfbWlkZGxlX3ByZXNzIGV2X2xlZnRfcmVsZWFzZSBldl9yaWdodF9yZWxlYXNlIGV2X21pZGRsZV9yZWxlYXNlIGV2X21vdXNlX2VudGVyIGV2X21vdXNlX2xlYXZlIGV2X21vdXNlX3doZWVsX3VwIGV2X21vdXNlX3doZWVsX2Rvd24gZXZfZ2xvYmFsX2xlZnRfYnV0dG9uIGV2X2dsb2JhbF9yaWdodF9idXR0b24gZXZfZ2xvYmFsX21pZGRsZV9idXR0b24gZXZfZ2xvYmFsX2xlZnRfcHJlc3MgZXZfZ2xvYmFsX3JpZ2h0X3ByZXNzIGV2X2dsb2JhbF9taWRkbGVfcHJlc3MgZXZfZ2xvYmFsX2xlZnRfcmVsZWFzZSBldl9nbG9iYWxfcmlnaHRfcmVsZWFzZSBldl9nbG9iYWxfbWlkZGxlX3JlbGVhc2UgZXZfam95c3RpY2sxX2xlZnQgZXZfam95c3RpY2sxX3JpZ2h0IGV2X2pveXN0aWNrMV91cCBldl9qb3lzdGljazFfZG93biBldl9qb3lzdGljazFfYnV0dG9uMSBldl9qb3lzdGljazFfYnV0dG9uMiBldl9qb3lzdGljazFfYnV0dG9uMyBldl9qb3lzdGljazFfYnV0dG9uNCBldl9qb3lzdGljazFfYnV0dG9uNSBldl9qb3lzdGljazFfYnV0dG9uNiBldl9qb3lzdGljazFfYnV0dG9uNyBldl9qb3lzdGljazFfYnV0dG9uOCBldl9qb3lzdGljazJfbGVmdCBldl9qb3lzdGljazJfcmlnaHQgZXZfam95c3RpY2syX3VwIGV2X2pveXN0aWNrMl9kb3duIGV2X2pveXN0aWNrMl9idXR0b24xIGV2X2pveXN0aWNrMl9idXR0b24yIGV2X2pveXN0aWNrMl9idXR0b24zIGV2X2pveXN0aWNrMl9idXR0b240IGV2X2pveXN0aWNrMl9idXR0b241IGV2X2pveXN0aWNrMl9idXR0b242IGV2X2pveXN0aWNrMl9idXR0b243IGV2X2pveXN0aWNrMl9idXR0b244IGV2X291dHNpZGUgZXZfYm91bmRhcnkgZXZfZ2FtZV9zdGFydCBldl9nYW1lX2VuZCBldl9yb29tX3N0YXJ0IGV2X3Jvb21fZW5kIGV2X25vX21vcmVfbGl2ZXMgZXZfYW5pbWF0aW9uX2VuZCBldl9lbmRfb2ZfcGF0aCBldl9ub19tb3JlX2hlYWx0aCBldl9jbG9zZV9idXR0b24gZXZfdXNlcjAgZXZfdXNlcjEgZXZfdXNlcjIgZXZfdXNlcjMgZXZfdXNlcjQgZXZfdXNlcjUgZXZfdXNlcjYgZXZfdXNlcjcgZXZfdXNlcjggZXZfdXNlcjkgZXZfdXNlcjEwIGV2X3VzZXIxMSBldl91c2VyMTIgZXZfdXNlcjEzIGV2X3VzZXIxNCBldl91c2VyMTUgZXZfc3RlcF9ub3JtYWwgZXZfc3RlcF9iZWdpbiBldl9zdGVwX2VuZCBldl9ndWkgZXZfZ3VpX2JlZ2luIGV2X2d1aV9lbmQgZXZfY2xlYW51cCBldl9nZXN0dXJlIGV2X2dlc3R1cmVfdGFwIGV2X2dlc3R1cmVfZG91YmxlX3RhcCBldl9nZXN0dXJlX2RyYWdfc3RhcnQgZXZfZ2VzdHVyZV9kcmFnZ2luZyBldl9nZXN0dXJlX2RyYWdfZW5kIGV2X2dlc3R1cmVfZmxpY2sgZXZfZ2VzdHVyZV9waW5jaF9zdGFydCBldl9nZXN0dXJlX3BpbmNoX2luIGV2X2dlc3R1cmVfcGluY2hfb3V0IGV2X2dlc3R1cmVfcGluY2hfZW5kIGV2X2dlc3R1cmVfcm90YXRlX3N0YXJ0IGV2X2dlc3R1cmVfcm90YXRpbmcgZXZfZ2VzdHVyZV9yb3RhdGVfZW5kIGV2X2dsb2JhbF9nZXN0dXJlX3RhcCBldl9nbG9iYWxfZ2VzdHVyZV9kb3VibGVfdGFwIGV2X2dsb2JhbF9nZXN0dXJlX2RyYWdfc3RhcnQgZXZfZ2xvYmFsX2dlc3R1cmVfZHJhZ2dpbmcgZXZfZ2xvYmFsX2dlc3R1cmVfZHJhZ19lbmQgZXZfZ2xvYmFsX2dlc3R1cmVfZmxpY2sgZXZfZ2xvYmFsX2dlc3R1cmVfcGluY2hfc3RhcnQgZXZfZ2xvYmFsX2dlc3R1cmVfcGluY2hfaW4gZXZfZ2xvYmFsX2dlc3R1cmVfcGluY2hfb3V0IGV2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX2VuZCBldl9nbG9iYWxfZ2VzdHVyZV9yb3RhdGVfc3RhcnQgZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRpbmcgZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX2VuZCB2a19ub2tleSB2a19hbnlrZXkgdmtfZW50ZXIgdmtfcmV0dXJuIHZrX3NoaWZ0IHZrX2NvbnRyb2wgdmtfYWx0IHZrX2VzY2FwZSB2a19zcGFjZSB2a19iYWNrc3BhY2UgdmtfdGFiIHZrX3BhdXNlIHZrX3ByaW50c2NyZWVuIHZrX2xlZnQgdmtfcmlnaHQgdmtfdXAgdmtfZG93biB2a19ob21lIHZrX2VuZCB2a19kZWxldGUgdmtfaW5zZXJ0IHZrX3BhZ2V1cCB2a19wYWdlZG93biB2a19mMSB2a19mMiB2a19mMyB2a19mNCB2a19mNSB2a19mNiB2a19mNyB2a19mOCB2a19mOSB2a19mMTAgdmtfZjExIHZrX2YxMiB2a19udW1wYWQwIHZrX251bXBhZDEgdmtfbnVtcGFkMiB2a19udW1wYWQzIHZrX251bXBhZDQgdmtfbnVtcGFkNSB2a19udW1wYWQ2IHZrX251bXBhZDcgdmtfbnVtcGFkOCB2a19udW1wYWQ5IHZrX2RpdmlkZSB2a19tdWx0aXBseSB2a19zdWJ0cmFjdCB2a19hZGQgdmtfZGVjaW1hbCB2a19sc2hpZnQgdmtfbGNvbnRyb2wgdmtfbGFsdCB2a19yc2hpZnQgdmtfcmNvbnRyb2wgdmtfcmFsdCAgbWJfYW55IG1iX25vbmUgbWJfbGVmdCBtYl9yaWdodCBtYl9taWRkbGUgY19hcXVhIGNfYmxhY2sgY19ibHVlIGNfZGtncmF5IGNfZnVjaHNpYSBjX2dyYXkgY19ncmVlbiBjX2xpbWUgY19sdGdyYXkgY19tYXJvb24gY19uYXZ5IGNfb2xpdmUgY19wdXJwbGUgY19yZWQgY19zaWx2ZXIgY190ZWFsIGNfd2hpdGUgY195ZWxsb3cgY19vcmFuZ2UgZmFfbGVmdCBmYV9jZW50ZXIgZmFfcmlnaHQgZmFfdG9wIGZhX21pZGRsZSBmYV9ib3R0b20gcHJfcG9pbnRsaXN0IHByX2xpbmVsaXN0IHByX2xpbmVzdHJpcCBwcl90cmlhbmdsZWxpc3QgcHJfdHJpYW5nbGVzdHJpcCBwcl90cmlhbmdsZWZhbiBibV9jb21wbGV4IGJtX25vcm1hbCBibV9hZGQgYm1fbWF4IGJtX3N1YnRyYWN0IGJtX3plcm8gYm1fb25lIGJtX3NyY19jb2xvdXIgYm1faW52X3NyY19jb2xvdXIgYm1fc3JjX2NvbG9yIGJtX2ludl9zcmNfY29sb3IgYm1fc3JjX2FscGhhIGJtX2ludl9zcmNfYWxwaGEgYm1fZGVzdF9hbHBoYSBibV9pbnZfZGVzdF9hbHBoYSBibV9kZXN0X2NvbG91ciBibV9pbnZfZGVzdF9jb2xvdXIgYm1fZGVzdF9jb2xvciBibV9pbnZfZGVzdF9jb2xvciBibV9zcmNfYWxwaGFfc2F0IHRmX3BvaW50IHRmX2xpbmVhciB0Zl9hbmlzb3Ryb3BpYyBtaXBfb2ZmIG1pcF9vbiBtaXBfbWFya2Vkb25seSBhdWRpb19mYWxsb2ZmX25vbmUgYXVkaW9fZmFsbG9mZl9pbnZlcnNlX2Rpc3RhbmNlIGF1ZGlvX2ZhbGxvZmZfaW52ZXJzZV9kaXN0YW5jZV9jbGFtcGVkIGF1ZGlvX2ZhbGxvZmZfbGluZWFyX2Rpc3RhbmNlIGF1ZGlvX2ZhbGxvZmZfbGluZWFyX2Rpc3RhbmNlX2NsYW1wZWQgYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZSBhdWRpb19mYWxsb2ZmX2V4cG9uZW50X2Rpc3RhbmNlX2NsYW1wZWQgYXVkaW9fb2xkX3N5c3RlbSBhdWRpb19uZXdfc3lzdGVtIGF1ZGlvX21vbm8gYXVkaW9fc3RlcmVvIGF1ZGlvXzNkIGNyX2RlZmF1bHQgY3Jfbm9uZSBjcl9hcnJvdyBjcl9jcm9zcyBjcl9iZWFtIGNyX3NpemVfbmVzdyBjcl9zaXplX25zIGNyX3NpemVfbndzZSBjcl9zaXplX3dlIGNyX3VwYXJyb3cgY3JfaG91cmdsYXNzIGNyX2RyYWcgY3JfYXBwc3RhcnQgY3JfaGFuZHBvaW50IGNyX3NpemVfYWxsIHNwcml0ZXNwZWVkX2ZyYW1lc3BlcnNlY29uZCBzcHJpdGVzcGVlZF9mcmFtZXNwZXJnYW1lZnJhbWUgYXNzZXRfb2JqZWN0IGFzc2V0X3Vua25vd24gYXNzZXRfc3ByaXRlIGFzc2V0X3NvdW5kIGFzc2V0X3Jvb20gYXNzZXRfcGF0aCBhc3NldF9zY3JpcHQgYXNzZXRfZm9udCBhc3NldF90aW1lbGluZSBhc3NldF90aWxlcyBhc3NldF9zaGFkZXIgZmFfcmVhZG9ubHkgZmFfaGlkZGVuIGZhX3N5c2ZpbGUgZmFfdm9sdW1laWQgZmFfZGlyZWN0b3J5IGZhX2FyY2hpdmUgIGRzX3R5cGVfbWFwIGRzX3R5cGVfbGlzdCBkc190eXBlX3N0YWNrIGRzX3R5cGVfcXVldWUgZHNfdHlwZV9ncmlkIGRzX3R5cGVfcHJpb3JpdHkgZWZfZXhwbG9zaW9uIGVmX3JpbmcgZWZfZWxsaXBzZSBlZl9maXJld29yayBlZl9zbW9rZSBlZl9zbW9rZXVwIGVmX3N0YXIgZWZfc3BhcmsgZWZfZmxhcmUgZWZfY2xvdWQgZWZfcmFpbiBlZl9zbm93IHB0X3NoYXBlX3BpeGVsIHB0X3NoYXBlX2Rpc2sgcHRfc2hhcGVfc3F1YXJlIHB0X3NoYXBlX2xpbmUgcHRfc2hhcGVfc3RhciBwdF9zaGFwZV9jaXJjbGUgcHRfc2hhcGVfcmluZyBwdF9zaGFwZV9zcGhlcmUgcHRfc2hhcGVfZmxhcmUgcHRfc2hhcGVfc3BhcmsgcHRfc2hhcGVfZXhwbG9zaW9uIHB0X3NoYXBlX2Nsb3VkIHB0X3NoYXBlX3Ntb2tlIHB0X3NoYXBlX3Nub3cgcHNfZGlzdHJfbGluZWFyIHBzX2Rpc3RyX2dhdXNzaWFuIHBzX2Rpc3RyX2ludmdhdXNzaWFuIHBzX3NoYXBlX3JlY3RhbmdsZSBwc19zaGFwZV9lbGxpcHNlIHBzX3NoYXBlX2RpYW1vbmQgcHNfc2hhcGVfbGluZSB0eV9yZWFsIHR5X3N0cmluZyBkbGxfY2RlY2wgZGxsX3N0ZGNhbGwgbWF0cml4X3ZpZXcgbWF0cml4X3Byb2plY3Rpb24gbWF0cml4X3dvcmxkIG9zX3dpbjMyIG9zX3dpbmRvd3Mgb3NfbWFjb3N4IG9zX2lvcyBvc19hbmRyb2lkIG9zX3N5bWJpYW4gb3NfbGludXggb3NfdW5rbm93biBvc193aW5waG9uZSBvc190aXplbiBvc193aW44bmF0aXZlIG9zX3dpaXUgb3NfM2RzICBvc19wc3ZpdGEgb3NfYmIxMCBvc19wczQgb3NfeGJveG9uZSBvc19wczMgb3NfeGJveDM2MCBvc191d3Agb3NfdHZvcyBvc19zd2l0Y2ggYnJvd3Nlcl9ub3RfYV9icm93c2VyIGJyb3dzZXJfdW5rbm93biBicm93c2VyX2llIGJyb3dzZXJfZmlyZWZveCBicm93c2VyX2Nocm9tZSBicm93c2VyX3NhZmFyaSBicm93c2VyX3NhZmFyaV9tb2JpbGUgYnJvd3Nlcl9vcGVyYSBicm93c2VyX3RpemVuIGJyb3dzZXJfZWRnZSBicm93c2VyX3dpbmRvd3Nfc3RvcmUgYnJvd3Nlcl9pZV9tb2JpbGUgIGRldmljZV9pb3NfdW5rbm93biBkZXZpY2VfaW9zX2lwaG9uZSBkZXZpY2VfaW9zX2lwaG9uZV9yZXRpbmEgZGV2aWNlX2lvc19pcGFkIGRldmljZV9pb3NfaXBhZF9yZXRpbmEgZGV2aWNlX2lvc19pcGhvbmU1IGRldmljZV9pb3NfaXBob25lNiBkZXZpY2VfaW9zX2lwaG9uZTZwbHVzIGRldmljZV9lbXVsYXRvciBkZXZpY2VfdGFibGV0IGRpc3BsYXlfbGFuZHNjYXBlIGRpc3BsYXlfbGFuZHNjYXBlX2ZsaXBwZWQgZGlzcGxheV9wb3J0cmFpdCBkaXNwbGF5X3BvcnRyYWl0X2ZsaXBwZWQgdG1fc2xlZXAgdG1fY291bnR2c3luY3Mgb2ZfY2hhbGxlbmdlX3dpbiBvZl9jaGFsbGVuIGdlX2xvc2Ugb2ZfY2hhbGxlbmdlX3RpZSBsZWFkZXJib2FyZF90eXBlX251bWJlciBsZWFkZXJib2FyZF90eXBlX3RpbWVfbWluc19zZWNzIGNtcGZ1bmNfbmV2ZXIgY21wZnVuY19sZXNzIGNtcGZ1bmNfZXF1YWwgY21wZnVuY19sZXNzZXF1YWwgY21wZnVuY19ncmVhdGVyIGNtcGZ1bmNfbm90ZXF1YWwgY21wZnVuY19ncmVhdGVyZXF1YWwgY21wZnVuY19hbHdheXMgY3VsbF9ub2N1bGxpbmcgY3VsbF9jbG9ja3dpc2UgY3VsbF9jb3VudGVyY2xvY2t3aXNlIGxpZ2h0dHlwZV9kaXIgbGlnaHR0eXBlX3BvaW50IGlhcF9ldl9zdG9yZWxvYWQgaWFwX2V2X3Byb2R1Y3QgaWFwX2V2X3B1cmNoYXNlIGlhcF9ldl9jb25zdW1lIGlhcF9ldl9yZXN0b3JlIGlhcF9zdG9yZWxvYWRfb2sgaWFwX3N0b3JlbG9hZF9mYWlsZWQgaWFwX3N0YXR1c191bmluaXRpYWxpc2VkIGlhcF9zdGF0dXNfdW5hdmFpbGFibGUgaWFwX3N0YXR1c19sb2FkaW5nIGlhcF9zdGF0dXNfYXZhaWxhYmxlIGlhcF9zdGF0dXNfcHJvY2Vzc2luZyBpYXBfc3RhdHVzX3Jlc3RvcmluZyBpYXBfZmFpbGVkIGlhcF91bmF2YWlsYWJsZSBpYXBfYXZhaWxhYmxlIGlhcF9wdXJjaGFzZWQgaWFwX2NhbmNlbGVkIGlhcF9yZWZ1bmRlZCBmYl9sb2dpbl9kZWZhdWx0IGZiX2xvZ2luX2ZhbGxiYWNrX3RvX3dlYnZpZXcgZmJfbG9naW5fbm9fZmFsbGJhY2tfdG9fd2VidmlldyBmYl9sb2dpbl9mb3JjaW5nX3dlYnZpZXcgZmJfbG9naW5fdXNlX3N5c3RlbV9hY2NvdW50IGZiX2xvZ2luX2ZvcmNpbmdfc2FmYXJpICBwaHlfam9pbnRfYW5jaG9yXzFfeCBwaHlfam9pbnRfYW5jaG9yXzFfeSBwaHlfam9pbnRfYW5jaG9yXzJfeCBwaHlfam9pbnRfYW5jaG9yXzJfeSBwaHlfam9pbnRfcmVhY3Rpb25fZm9yY2VfeCBwaHlfam9pbnRfcmVhY3Rpb25fZm9yY2VfeSBwaHlfam9pbnRfcmVhY3Rpb25fdG9ycXVlIHBoeV9qb2ludF9tb3Rvcl9zcGVlZCBwaHlfam9pbnRfYW5nbGUgcGh5X2pvaW50X21vdG9yX3RvcnF1ZSBwaHlfam9pbnRfbWF4X21vdG9yX3RvcnF1ZSBwaHlfam9pbnRfdHJhbnNsYXRpb24gcGh5X2pvaW50X3NwZWVkIHBoeV9qb2ludF9tb3Rvcl9mb3JjZSBwaHlfam9pbnRfbWF4X21vdG9yX2ZvcmNlIHBoeV9qb2ludF9sZW5ndGhfMSBwaHlfam9pbnRfbGVuZ3RoXzIgcGh5X2pvaW50X2RhbXBpbmdfcmF0aW8gcGh5X2pvaW50X2ZyZXF1ZW5jeSBwaHlfam9pbnRfbG93ZXJfYW5nbGVfbGltaXQgcGh5X2pvaW50X3VwcGVyX2FuZ2xlX2xpbWl0IHBoeV9qb2ludF9hbmdsZV9saW1pdHMgcGh5X2pvaW50X21heF9sZW5ndGggcGh5X2pvaW50X21heF90b3JxdWUgcGh5X2pvaW50X21heF9mb3JjZSBwaHlfZGVidWdfcmVuZGVyX2FhYmIgcGh5X2RlYnVnX3JlbmRlcl9jb2xsaXNpb25fcGFpcnMgcGh5X2RlYnVnX3JlbmRlcl9jb21zIHBoeV9kZWJ1Z19yZW5kZXJfY29yZV9zaGFwZXMgcGh5X2RlYnVnX3JlbmRlcl9qb2ludHMgcGh5X2RlYnVnX3JlbmRlcl9vYmIgcGh5X2RlYnVnX3JlbmRlcl9zaGFwZXMgIHBoeV9wYXJ0aWNsZV9mbGFnX3dhdGVyIHBoeV9wYXJ0aWNsZV9mbGFnX3pvbWJpZSBwaHlfcGFydGljbGVfZmxhZ193YWxsIHBoeV9wYXJ0aWNsZV9mbGFnX3NwcmluZyBwaHlfcGFydGljbGVfZmxhZ19lbGFzdGljIHBoeV9wYXJ0aWNsZV9mbGFnX3Zpc2NvdXMgcGh5X3BhcnRpY2xlX2ZsYWdfcG93ZGVyIHBoeV9wYXJ0aWNsZV9mbGFnX3RlbnNpbGUgcGh5X3BhcnRpY2xlX2ZsYWdfY29sb3VybWl4aW5nIHBoeV9wYXJ0aWNsZV9mbGFnX2NvbG9ybWl4aW5nIHBoeV9wYXJ0aWNsZV9ncm91cF9mbGFnX3NvbGlkIHBoeV9wYXJ0aWNsZV9ncm91cF9mbGFnX3JpZ2lkIHBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfdHlwZWZsYWdzIHBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfcG9zaXRpb24gcGh5X3BhcnRpY2xlX2RhdGFfZmxhZ192ZWxvY2l0eSBwaHlfcGFydGljbGVfZGF0YV9mbGFnX2NvbG91ciBwaHlfcGFydGljbGVfZGF0YV9mbGFnX2NvbG9yIHBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfY2F0ZWdvcnkgIGFjaGlldmVtZW50X291cl9pbmZvIGFjaGlldmVtZW50X2ZyaWVuZHNfaW5mbyBhY2hpZXZlbWVudF9sZWFkZXJib2FyZF9pbmZvIGFjaGlldmVtZW50X2FjaGlldmVtZW50X2luZm8gYWNoaWV2ZW1lbnRfZmlsdGVyX2FsbF9wbGF5ZXJzIGFjaGlldmVtZW50X2ZpbHRlcl9mcmllbmRzX29ubHkgYWNoaWV2ZW1lbnRfZmlsdGVyX2Zhdm9yaXRlc19vbmx5IGFjaGlldmVtZW50X3R5cGVfYWNoaWV2ZW1lbnRfY2hhbGxlbmdlIGFjaGlldmVtZW50X3R5cGVfc2NvcmVfY2hhbGxlbmdlIGFjaGlldmVtZW50X3BpY19sb2FkZWQgIGFjaGlldmVtZW50X3Nob3dfdWkgYWNoaWV2ZW1lbnRfc2hvd19wcm9maWxlIGFjaGlldmVtZW50X3Nob3dfbGVhZGVyYm9hcmQgYWNoaWV2ZW1lbnRfc2hvd19hY2hpZXZlbWVudCBhY2hpZXZlbWVudF9zaG93X2JhbmsgYWNoaWV2ZW1lbnRfc2hvd19mcmllbmRfcGlja2VyIGFjaGlldmVtZW50X3Nob3dfcHVyY2hhc2VfcHJvbXB0IG5ldHdvcmtfc29ja2V0X3RjcCBuZXR3b3JrX3NvY2tldF91ZHAgbmV0d29ya19zb2NrZXRfYmx1ZXRvb3RoIG5ldHdvcmtfdHlwZV9jb25uZWN0IG5ldHdvcmtfdHlwZV9kaXNjb25uZWN0IG5ldHdvcmtfdHlwZV9kYXRhIG5ldHdvcmtfdHlwZV9ub25fYmxvY2tpbmdfY29ubmVjdCBuZXR3b3JrX2NvbmZpZ19jb25uZWN0X3RpbWVvdXQgbmV0d29ya19jb25maWdfdXNlX25vbl9ibG9ja2luZ19zb2NrZXQgbmV0d29ya19jb25maWdfZW5hYmxlX3JlbGlhYmxlX3VkcCBuZXR3b3JrX2NvbmZpZ19kaXNhYmxlX3JlbGlhYmxlX3VkcCBidWZmZXJfZml4ZWQgYnVmZmVyX2dyb3cgYnVmZmVyX3dyYXAgYnVmZmVyX2Zhc3QgYnVmZmVyX3ZidWZmZXIgYnVmZmVyX25ldHdvcmsgYnVmZmVyX3U4IGJ1ZmZlcl9zOCBidWZmZXJfdTE2IGJ1ZmZlcl9zMTYgYnVmZmVyX3UzMiBidWZmZXJfczMyIGJ1ZmZlcl91NjQgYnVmZmVyX2YxNiBidWZmZXJfZjMyIGJ1ZmZlcl9mNjQgYnVmZmVyX2Jvb2wgYnVmZmVyX3RleHQgYnVmZmVyX3N0cmluZyBidWZmZXJfc3VyZmFjZV9jb3B5IGJ1ZmZlcl9zZWVrX3N0YXJ0IGJ1ZmZlcl9zZWVrX3JlbGF0aXZlIGJ1ZmZlcl9zZWVrX2VuZCBidWZmZXJfZ2VuZXJhbGVycm9yIGJ1ZmZlcl9vdXRvZnNwYWNlIGJ1ZmZlcl9vdXRvZmJvdW5kcyBidWZmZXJfaW52YWxpZHR5cGUgIHRleHRfdHlwZSBidXR0b25fdHlwZSBpbnB1dF90eXBlIEFOU0lfQ0hBUlNFVCBERUZBVUxUX0NIQVJTRVQgRUFTVEVVUk9QRV9DSEFSU0VUIFJVU1NJQU5fQ0hBUlNFVCBTWU1CT0xfQ0hBUlNFVCBTSElGVEpJU19DSEFSU0VUIEhBTkdFVUxfQ0hBUlNFVCBHQjIzMTJfQ0hBUlNFVCBDSElORVNFQklHNV9DSEFSU0VUIEpPSEFCX0NIQVJTRVQgSEVCUkVXX0NIQVJTRVQgQVJBQklDX0NIQVJTRVQgR1JFRUtfQ0hBUlNFVCBUVVJLSVNIX0NIQVJTRVQgVklFVE5BTUVTRV9DSEFSU0VUIFRIQUlfQ0hBUlNFVCBNQUNfQ0hBUlNFVCBCQUxUSUNfQ0hBUlNFVCBPRU1fQ0hBUlNFVCAgZ3BfZmFjZTEgZ3BfZmFjZTIgZ3BfZmFjZTMgZ3BfZmFjZTQgZ3Bfc2hvdWxkZXJsIGdwX3Nob3VsZGVyciBncF9zaG91bGRlcmxiIGdwX3Nob3VsZGVycmIgZ3Bfc2VsZWN0IGdwX3N0YXJ0IGdwX3N0aWNrbCBncF9zdGlja3IgZ3BfcGFkdSBncF9wYWRkIGdwX3BhZGwgZ3BfcGFkciBncF9heGlzbGggZ3BfYXhpc2x2IGdwX2F4aXNyaCBncF9heGlzcnYgb3ZfZnJpZW5kcyBvdl9jb21tdW5pdHkgb3ZfcGxheWVycyBvdl9zZXR0aW5ncyBvdl9nYW1lZ3JvdXAgb3ZfYWNoaWV2ZW1lbnRzIGxiX3NvcnRfbm9uZSBsYl9zb3J0X2FzY2VuZGluZyBsYl9zb3J0X2Rlc2NlbmRpbmcgbGJfZGlzcF9ub25lIGxiX2Rpc3BfbnVtZXJpYyBsYl9kaXNwX3RpbWVfc2VjIGxiX2Rpc3BfdGltZV9tcyB1Z2NfcmVzdWx0X3N1Y2Nlc3MgdWdjX2ZpbGV0eXBlX2NvbW11bml0eSB1Z2NfZmlsZXR5cGVfbWljcm90cmFucyB1Z2NfdmlzaWJpbGl0eV9wdWJsaWMgdWdjX3Zpc2liaWxpdHlfZnJpZW5kc19vbmx5IHVnY192aXNpYmlsaXR5X3ByaXZhdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5Vm90ZSB1Z2NfcXVlcnlfUmFua2VkQnlQdWJsaWNhdGlvbkRhdGUgdWdjX3F1ZXJ5X0FjY2VwdGVkRm9yR2FtZVJhbmtlZEJ5QWNjZXB0YW5jZURhdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5VHJlbmQgdWdjX3F1ZXJ5X0Zhdm9yaXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlIHVnY19xdWVyeV9DcmVhdGVkQnlGcmllbmRzUmFua2VkQnlQdWJsaWNhdGlvbkRhdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5TnVtVGltZXNSZXBvcnRlZCB1Z2NfcXVlcnlfQ3JlYXRlZEJ5Rm9sbG93ZWRVc2Vyc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlIHVnY19xdWVyeV9Ob3RZZXRSYXRlZCB1Z2NfcXVlcnlfUmFua2VkQnlUb3RhbFZvdGVzQXNjIHVnY19xdWVyeV9SYW5rZWRCeVZvdGVzVXAgdWdjX3F1ZXJ5X1JhbmtlZEJ5VGV4dFNlYXJjaCB1Z2Nfc29ydG9yZGVyX0NyZWF0aW9uT3JkZXJEZXNjIHVnY19zb3J0b3JkZXJfQ3JlYXRpb25PcmRlckFzYyB1Z2Nfc29ydG9yZGVyX1RpdGxlQXNjIHVnY19zb3J0b3JkZXJfTGFzdFVwZGF0ZWREZXNjIHVnY19zb3J0b3JkZXJfU3Vic2NyaXB0aW9uRGF0ZURlc2MgdWdjX3NvcnRvcmRlcl9Wb3RlU2NvcmVEZXNjIHVnY19zb3J0b3JkZXJfRm9yTW9kZXJhdGlvbiB1Z2NfbGlzdF9QdWJsaXNoZWQgdWdjX2xpc3RfVm90ZWRPbiB1Z2NfbGlzdF9Wb3RlZFVwIHVnY19saXN0X1ZvdGVkRG93biB1Z2NfbGlzdF9XaWxsVm90ZUxhdGVyIHVnY19saXN0X0Zhdm9yaXRlZCB1Z2NfbGlzdF9TdWJzY3JpYmVkIHVnY19saXN0X1VzZWRPclBsYXllZCB1Z2NfbGlzdF9Gb2xsb3dlZCB1Z2NfbWF0Y2hfSXRlbXMgdWdjX21hdGNoX0l0ZW1zX010eCB1Z2NfbWF0Y2hfSXRlbXNfUmVhZHlUb1VzZSB1Z2NfbWF0Y2hfQ29sbGVjdGlvbnMgdWdjX21hdGNoX0FydHdvcmsgdWdjX21hdGNoX1ZpZGVvcyB1Z2NfbWF0Y2hfU2NyZWVuc2hvdHMgdWdjX21hdGNoX0FsbEd1aWRlcyB1Z2NfbWF0Y2hfV2ViR3VpZGVzIHVnY19tYXRjaF9JbnRlZ3JhdGVkR3VpZGVzIHVnY19tYXRjaF9Vc2FibGVJbkdhbWUgdWdjX21hdGNoX0NvbnRyb2xsZXJCaW5kaW5ncyAgdmVydGV4X3VzYWdlX3Bvc2l0aW9uIHZlcnRleF91c2FnZV9jb2xvdXIgdmVydGV4X3VzYWdlX2NvbG9yIHZlcnRleF91c2FnZV9ub3JtYWwgdmVydGV4X3VzYWdlX3RleGNvb3JkIHZlcnRleF91c2FnZV90ZXh0Y29vcmQgdmVydGV4X3VzYWdlX2JsZW5kd2VpZ2h0IHZlcnRleF91c2FnZV9ibGVuZGluZGljZXMgdmVydGV4X3VzYWdlX3BzaXplIHZlcnRleF91c2FnZV90YW5nZW50IHZlcnRleF91c2FnZV9iaW5vcm1hbCB2ZXJ0ZXhfdXNhZ2VfZm9nIHZlcnRleF91c2FnZV9kZXB0aCB2ZXJ0ZXhfdXNhZ2Vfc2FtcGxlIHZlcnRleF90eXBlX2Zsb2F0MSB2ZXJ0ZXhfdHlwZV9mbG9hdDIgdmVydGV4X3R5cGVfZmxvYXQzIHZlcnRleF90eXBlX2Zsb2F0NCB2ZXJ0ZXhfdHlwZV9jb2xvdXIgdmVydGV4X3R5cGVfY29sb3IgdmVydGV4X3R5cGVfdWJ5dGU0IGxheWVyZWxlbWVudHR5cGVfdW5kZWZpbmVkIGxheWVyZWxlbWVudHR5cGVfYmFja2dyb3VuZCBsYXllcmVsZW1lbnR0eXBlX2luc3RhbmNlIGxheWVyZWxlbWVudHR5cGVfb2xkdGlsZW1hcCBsYXllcmVsZW1lbnR0eXBlX3Nwcml0ZSBsYXllcmVsZW1lbnR0eXBlX3RpbGVtYXAgbGF5ZXJlbGVtZW50dHlwZV9wYXJ0aWNsZXN5c3RlbSBsYXllcmVsZW1lbnR0eXBlX3RpbGUgdGlsZV9yb3RhdGUgdGlsZV9mbGlwIHRpbGVfbWlycm9yIHRpbGVfaW5kZXhfbWFzayBrYnZfdHlwZV9kZWZhdWx0IGtidl90eXBlX2FzY2lpIGtidl90eXBlX3VybCBrYnZfdHlwZV9lbWFpbCBrYnZfdHlwZV9udW1iZXJzIGtidl90eXBlX3Bob25lIGtidl90eXBlX3Bob25lX25hbWUga2J2X3JldHVybmtleV9kZWZhdWx0IGtidl9yZXR1cm5rZXlfZ28ga2J2X3JldHVybmtleV9nb29nbGUga2J2X3JldHVybmtleV9qb2luIGtidl9yZXR1cm5rZXlfbmV4dCBrYnZfcmV0dXJua2V5X3JvdXRlIGtidl9yZXR1cm5rZXlfc2VhcmNoIGtidl9yZXR1cm5rZXlfc2VuZCBrYnZfcmV0dXJua2V5X3lhaG9vIGtidl9yZXR1cm5rZXlfZG9uZSBrYnZfcmV0dXJua2V5X2NvbnRpbnVlIGtidl9yZXR1cm5rZXlfZW1lcmdlbmN5IGtidl9hdXRvY2FwaXRhbGl6ZV9ub25lIGtidl9hdXRvY2FwaXRhbGl6ZV93b3JkcyBrYnZfYXV0b2NhcGl0YWxpemVfc2VudGVuY2VzIGtidl9hdXRvY2FwaXRhbGl6ZV9jaGFyYWN0ZXJzIixzeW1ib2w6ImFyZ3VtZW50X3JlbGF0aXZlIGFyZ3VtZW50IGFyZ3VtZW50MCBhcmd1bWVudDEgYXJndW1lbnQyIGFyZ3VtZW50MyBhcmd1bWVudDQgYXJndW1lbnQ1IGFyZ3VtZW50NiBhcmd1bWVudDcgYXJndW1lbnQ4IGFyZ3VtZW50OSBhcmd1bWVudDEwIGFyZ3VtZW50MTEgYXJndW1lbnQxMiBhcmd1bWVudDEzIGFyZ3VtZW50MTQgYXJndW1lbnQxNSBhcmd1bWVudF9jb3VudCB4IHkgeHByZXZpb3VzIHlwcmV2aW91cyB4c3RhcnQgeXN0YXJ0IGhzcGVlZCB2c3BlZWQgZGlyZWN0aW9uIHNwZWVkIGZyaWN0aW9uIGdyYXZpdHkgZ3Jhdml0eV9kaXJlY3Rpb24gcGF0aF9pbmRleCBwYXRoX3Bvc2l0aW9uIHBhdGhfcG9zaXRpb25wcmV2aW91cyBwYXRoX3NwZWVkIHBhdGhfc2NhbGUgcGF0aF9vcmllbnRhdGlvbiBwYXRoX2VuZGFjdGlvbiBvYmplY3RfaW5kZXggaWQgc29saWQgcGVyc2lzdGVudCBtYXNrX2luZGV4IGluc3RhbmNlX2NvdW50IGluc3RhbmNlX2lkIHJvb21fc3BlZWQgZnBzIGZwc19yZWFsIGN1cnJlbnRfdGltZSBjdXJyZW50X3llYXIgY3VycmVudF9tb250aCBjdXJyZW50X2RheSBjdXJyZW50X3dlZWtkYXkgY3VycmVudF9ob3VyIGN1cnJlbnRfbWludXRlIGN1cnJlbnRfc2Vjb25kIGFsYXJtIHRpbWVsaW5lX2luZGV4IHRpbWVsaW5lX3Bvc2l0aW9uIHRpbWVsaW5lX3NwZWVkIHRpbWVsaW5lX3J1bm5pbmcgdGltZWxpbmVfbG9vcCByb29tIHJvb21fZmlyc3Qgcm9vbV9sYXN0IHJvb21fd2lkdGggcm9vbV9oZWlnaHQgcm9vbV9jYXB0aW9uIHJvb21fcGVyc2lzdGVudCBzY29yZSBsaXZlcyBoZWFsdGggc2hvd19zY29yZSBzaG93X2xpdmVzIHNob3dfaGVhbHRoIGNhcHRpb25fc2NvcmUgY2FwdGlvbl9saXZlcyBjYXB0aW9uX2hlYWx0aCBldmVudF90eXBlIGV2ZW50X251bWJlciBldmVudF9vYmplY3QgZXZlbnRfYWN0aW9uIGFwcGxpY2F0aW9uX3N1cmZhY2UgZ2FtZW1ha2VyX3BybyBnYW1lbWFrZXJfcmVnaXN0ZXJlZCBnYW1lbWFrZXJfdmVyc2lvbiBlcnJvcl9vY2N1cnJlZCBlcnJvcl9sYXN0IGRlYnVnX21vZGUga2V5Ym9hcmRfa2V5IGtleWJvYXJkX2xhc3RrZXkga2V5Ym9hcmRfbGFzdGNoYXIga2V5Ym9hcmRfc3RyaW5nIG1vdXNlX3ggbW91c2VfeSBtb3VzZV9idXR0b24gbW91c2VfbGFzdGJ1dHRvbiBjdXJzb3Jfc3ByaXRlIHZpc2libGUgc3ByaXRlX2luZGV4IHNwcml0ZV93aWR0aCBzcHJpdGVfaGVpZ2h0IHNwcml0ZV94b2Zmc2V0IHNwcml0ZV95b2Zmc2V0IGltYWdlX251bWJlciBpbWFnZV9pbmRleCBpbWFnZV9zcGVlZCBkZXB0aCBpbWFnZV94c2NhbGUgaW1hZ2VfeXNjYWxlIGltYWdlX2FuZ2xlIGltYWdlX2FscGhhIGltYWdlX2JsZW5kIGJib3hfbGVmdCBiYm94X3JpZ2h0IGJib3hfdG9wIGJib3hfYm90dG9tIGxheWVyIGJhY2tncm91bmRfY29sb3VyICBiYWNrZ3JvdW5kX3Nob3djb2xvdXIgYmFja2dyb3VuZF9jb2xvciBiYWNrZ3JvdW5kX3Nob3djb2xvciB2aWV3X2VuYWJsZWQgdmlld19jdXJyZW50IHZpZXdfdmlzaWJsZSB2aWV3X3h2aWV3IHZpZXdfeXZpZXcgdmlld193dmlldyB2aWV3X2h2aWV3IHZpZXdfeHBvcnQgdmlld195cG9ydCB2aWV3X3dwb3J0IHZpZXdfaHBvcnQgdmlld19hbmdsZSB2aWV3X2hib3JkZXIgdmlld192Ym9yZGVyIHZpZXdfaHNwZWVkIHZpZXdfdnNwZWVkIHZpZXdfb2JqZWN0IHZpZXdfc3VyZmFjZV9pZCB2aWV3X2NhbWVyYSBnYW1lX2lkIGdhbWVfZGlzcGxheV9uYW1lIGdhbWVfcHJvamVjdF9uYW1lIGdhbWVfc2F2ZV9pZCB3b3JraW5nX2RpcmVjdG9yeSB0ZW1wX2RpcmVjdG9yeSBwcm9ncmFtX2RpcmVjdG9yeSBicm93c2VyX3dpZHRoIGJyb3dzZXJfaGVpZ2h0IG9zX3R5cGUgb3NfZGV2aWNlIG9zX2Jyb3dzZXIgb3NfdmVyc2lvbiBkaXNwbGF5X2FhIGFzeW5jX2xvYWQgZGVsdGFfdGltZSB3ZWJnbF9lbmFibGVkIGV2ZW50X2RhdGEgaWFwX2RhdGEgcGh5X3JvdGF0aW9uIHBoeV9wb3NpdGlvbl94IHBoeV9wb3NpdGlvbl95IHBoeV9hbmd1bGFyX3ZlbG9jaXR5IHBoeV9saW5lYXJfdmVsb2NpdHlfeCBwaHlfbGluZWFyX3ZlbG9jaXR5X3kgcGh5X3NwZWVkX3ggcGh5X3NwZWVkX3kgcGh5X3NwZWVkIHBoeV9hbmd1bGFyX2RhbXBpbmcgcGh5X2xpbmVhcl9kYW1waW5nIHBoeV9idWxsZXQgcGh5X2ZpeGVkX3JvdGF0aW9uIHBoeV9hY3RpdmUgcGh5X21hc3MgcGh5X2luZXJ0aWEgcGh5X2NvbV94IHBoeV9jb21feSBwaHlfZHluYW1pYyBwaHlfa2luZW1hdGljIHBoeV9zbGVlcGluZyBwaHlfY29sbGlzaW9uX3BvaW50cyBwaHlfY29sbGlzaW9uX3ggcGh5X2NvbGxpc2lvbl95IHBoeV9jb2xfbm9ybWFsX3ggcGh5X2NvbF9ub3JtYWxfeSBwaHlfcG9zaXRpb25feHByZXZpb3VzIHBoeV9wb3NpdGlvbl95cHJldmlvdXMifSxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ28uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIgYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGxpdGVyYWw6InRydWUgZmFsc2UgaW90YSBuaWwiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57YWxpYXNlczpbImdvbGFuZyJdLGtleXdvcmRzOnQsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOltlLlFVT1RFX1NUUklOR19NT0RFLHtiZWdpbjoiJyIsZW5kOiJbXlxcXFxdJyJ9LHtiZWdpbjoiYCIsZW5kOiJgIn1dfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46ZS5DX05VTUJFUl9SRSsiW2RmbHNpXSIscmVsZXZhbmNlOjF9LGUuQ19OVU1CRVJfTU9ERV19LHtiZWdpbjovOj0vfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuYyIsZW5kOi9ccypcey8sZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5USVRMRV9NT0RFLHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3Jkczp0LGlsbGVnYWw6L1siJ10vfV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ29sby5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOntrZXl3b3JkOiJwcmludGxuIHJlYWRsbiBwcmludCBpbXBvcnQgbW9kdWxlIGZ1bmN0aW9uIGxvY2FsIHJldHVybiBsZXQgdmFyIHdoaWxlIGZvciBmb3JlYWNoIHRpbWVzIGluIGNhc2Ugd2hlbiBtYXRjaCB3aXRoIGJyZWFrIGNvbnRpbnVlIGF1Z21lbnQgYXVnbWVudGF0aW9uIGVhY2ggZmluZCBmaWx0ZXIgcmVkdWNlIGlmIHRoZW4gZWxzZSBvdGhlcndpc2UgdHJ5IGNhdGNoIGZpbmFsbHkgcmFpc2UgdGhyb3cgb3JJZk51bGwgRHluYW1pY09iamVjdHwxMCBEeW5hbWljVmFyaWFibGUgc3RydWN0IE9ic2VydmFibGUgbWFwIHNldCB2ZWN0b3IgbGlzdCBhcnJheSIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn0sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkBbQS1aYS16XSsifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyYWRsZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6e2tleXdvcmQ6InRhc2sgcHJvamVjdCBhbGxwcm9qZWN0cyBzdWJwcm9qZWN0cyBhcnRpZmFjdHMgYnVpbGRzY3JpcHQgY29uZmlndXJhdGlvbnMgZGVwZW5kZW5jaWVzIHJlcG9zaXRvcmllcyBzb3VyY2VTZXRzIGRlc2NyaXB0aW9uIGRlbGV0ZSBmcm9tIGludG8gaW5jbHVkZSBleGNsdWRlIHNvdXJjZSBjbGFzc3BhdGggZGVzdGluYXRpb25EaXIgaW5jbHVkZXMgb3B0aW9ucyBzb3VyY2VDb21wYXRpYmlsaXR5IHRhcmdldENvbXBhdGliaWxpdHkgZ3JvdXAgZmxhdERpciBkb0xhc3QgZG9GaXJzdCBmbGF0dGVuIHRvZGlyIGZyb21kaXIgYW50IGRlZiBhYnN0cmFjdCBicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlZmF1bHQgZG8gZWxzZSBleHRlbmRzIGZpbmFsIGZpbmFsbHkgZm9yIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBuYXRpdmUgbmV3IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZXR1cm4gc3RhdGljIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCB0cnkgdm9sYXRpbGUgd2hpbGUgc3RyaWN0ZnAgcGFja2FnZSBpbXBvcnQgZmFsc2UgbnVsbCBzdXBlciB0aGlzIHRydWUgYW50bHJ0YXNrIGNoZWNrc3R5bGUgY29kZW5hcmMgY29weSBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZmxvYXQgaW50IGludGVyZmFjZSBsb25nIHNob3J0IHZvaWQgY29tcGlsZSBydW5UaW1lIGZpbGUgZmlsZVRyZWUgYWJzIGFueSBhcHBlbmQgYXNMaXN0IGFzV3JpdGFibGUgY2FsbCBjb2xsZWN0IGNvbXBhcmVUbyBjb3VudCBkaXYgZHVtcCBlYWNoIGVhY2hCeXRlIGVhY2hGaWxlIGVhY2hMaW5lIGV2ZXJ5IGZpbmQgZmluZEFsbCBmbGF0dGVuIGdldEF0IGdldEVyciBnZXRJbiBnZXRPdXQgZ2V0VGV4dCBncmVwIGltbXV0YWJsZSBpbmplY3QgaW5zcGVjdCBpbnRlcnNlY3QgaW52b2tlTWV0aG9kcyBpc0Nhc2Ugam9pbiBsZWZ0U2hpZnQgbWludXMgbXVsdGlwbHkgbmV3SW5wdXRTdHJlYW0gbmV3T3V0cHV0U3RyZWFtIG5ld1ByaW50V3JpdGVyIG5ld1JlYWRlciBuZXdXcml0ZXIgbmV4dCBwbHVzIHBvcCBwb3dlciBwcmV2aW91cyBwcmludCBwcmludGxuIHB1c2ggcHV0QXQgcmVhZCByZWFkQnl0ZXMgcmVhZExpbmVzIHJldmVyc2UgcmV2ZXJzZUVhY2ggcm91bmQgc2l6ZSBzb3J0IHNwbGl0RWFjaExpbmUgc3RlcCBzdWJNYXAgdGltZXMgdG9JbnRlZ2VyIHRvTGlzdCB0b2tlbml6ZSB1cHRvIHdhaXRGb3JPcktpbGwgd2l0aFByaW50V3JpdGVyIHdpdGhSZWFkZXIgd2l0aFN0cmVhbSB3aXRoV3JpdGVyIHdpdGhXcml0ZXJBcHBlbmQgd3JpdGUgd3JpdGVMaW5lIn0sY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuTlVNQkVSX01PREUsZS5SRUdFWFBfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyb292eS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOntsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwiLGtleXdvcmQ6ImJ5dGUgc2hvcnQgY2hhciBpbnQgbG9uZyBib29sZWFuIGZsb2F0IGRvdWJsZSB2b2lkIGRlZiBhcyBpbiBhc3NlcnQgdHJhaXQgc3VwZXIgdGhpcyBhYnN0cmFjdCBzdGF0aWMgdm9sYXRpbGUgdHJhbnNpZW50IHB1YmxpYyBwcml2YXRlIHByb3RlY3RlZCBzeW5jaHJvbml6ZWQgZmluYWwgY2xhc3MgaW50ZXJmYWNlIGVudW0gaWYgZWxzZSBmb3Igd2hpbGUgc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCBjb250aW51ZSB0aHJvdyB0aHJvd3MgdHJ5IGNhdGNoIGZpbmFsbHkgaW1wbGVtZW50cyBleHRlbmRzIG5ldyBpbXBvcnQgcGFja2FnZSByZXR1cm4gaW5zdGFuY2VvZiJ9LGNvbnRhaW5zOltlLkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjovXHcrQC8scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46IkBbQS1aYS16XSsifV19KSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciIiInLGVuZDonIiIiJ30se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJycnIixlbmQ6IicnJyJ9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IlxcJC8iLGVuZDoiL1xcJCIscmVsZXZhbmNlOjEwfSxlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToicmVnZXhwIixiZWdpbjovfj9cL1teXC9cbl0rXC8vLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeIyEvdXNyL2Jpbi9lbnYiLGVuZDoiJCIsaWxsZWdhbDoiXG4ifSxlLkJJTkFSWV9OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIHRyYWl0IGVudW0iLGVuZDoieyIsaWxsZWdhbDoiOiIsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LGUuQ19OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQFtBLVphLXpdKyJ9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46L1teXD9dezB9W0EtWmEtejAtOV8kXSsgKjovfSx7YmVnaW46L1w/LyxlbmQ6L1w6L30se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiXlxccypbQS1aYS16MC05XyRdKzoiLHJlbGV2YW5jZTowfV0saWxsZWdhbDovI3w8XC8vfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9oYW1sLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4hISEoICg1fDFcXC4xfFN0cmljdHxGcmFtZXNldHxCYXNpY3xNb2JpbGV8UkRGYXxYTUxcXGIuKikpPyQiLHJlbGV2YW5jZToxMH0sZS5DT01NRU5UKCJeXFxzKighPSN8PSN8LSN8LykuKiQiLCExLHtyZWxldmFuY2U6MH0pLHtiZWdpbjoiXlxccyooLXw9fCE9KSg/ISMpIixzdGFydHM6e2VuZDoiXFxuIixzdWJMYW5ndWFnZToicnVieSJ9fSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOiJeXFxzKiUiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzZWxlY3Rvci10YWciLGJlZ2luOiJcXHcrIn0se2NsYXNzTmFtZToic2VsZWN0b3ItaWQiLGJlZ2luOiIjW1xcdy1dKyJ9LHtjbGFzc05hbWU6InNlbGVjdG9yLWNsYXNzIixiZWdpbjoiXFwuW1xcdy1dKyJ9LHtiZWdpbjoie1xccyoiLGVuZDoiXFxzKn0iLGNvbnRhaW5zOlt7YmVnaW46IjpcXHcrXFxzKj0+IixlbmQ6IixcXHMrIixyZXR1cm5CZWdpbjohMCxlbmRzV2l0aFBhcmVudDohMCxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46IjpcXHcrIn0sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2JlZ2luOiJcXHcrIixyZWxldmFuY2U6MH1dfV19LHtiZWdpbjoiXFwoXFxzKiIsZW5kOiJcXHMqXFwpIixleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7YmVnaW46IlxcdytcXHMqPSIsZW5kOiJcXHMrIixyZXR1cm5CZWdpbjohMCxlbmRzV2l0aFBhcmVudDohMCxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46IlxcdysiLHJlbGV2YW5jZTowfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx7YmVnaW46IlxcdysiLHJlbGV2YW5jZTowfV19XX1dfSx7YmVnaW46Il5cXHMqWz1+XVxccyoifSx7YmVnaW46IiN7IixzdGFydHM6e2VuZDoifSIsc3ViTGFuZ3VhZ2U6InJ1YnkifX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9oYW5kbGViYXJzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17ImJ1aWx0aW4tbmFtZSI6ImVhY2ggaW4gd2l0aCBpZiBlbHNlIHVubGVzcyBiaW5kYXR0ciBhY3Rpb24gY29sbGVjdGlvbiBkZWJ1Z2dlciBsb2cgb3V0bGV0IHRlbXBsYXRlIHVuYm91bmQgdmlldyB5aWVsZCJ9O3JldHVybnthbGlhc2VzOlsiaGJzIiwiaHRtbC5oYnMiLCJodG1sLmhhbmRsZWJhcnMiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLHN1Ykxhbmd1YWdlOiJ4bWwiLGNvbnRhaW5zOltlLkNPTU1FTlQoInt7ISgtLSk/IiwiKC0tKT99fSIpLHtjbGFzc05hbWU6InRlbXBsYXRlLXRhZyIsYmVnaW46L1x7XHtbI1wvXS8sZW5kOi9cfVx9Lyxjb250YWluczpbe2NsYXNzTmFtZToibmFtZSIsYmVnaW46L1thLXpBLVpcLi1dKy8sa2V5d29yZHM6dCxzdGFydHM6e2VuZHNXaXRoUGFyZW50OiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFXX19XX0se2NsYXNzTmFtZToidGVtcGxhdGUtdmFyaWFibGUiLGJlZ2luOi9ce1x7LyxlbmQ6L1x9XH0vLGtleXdvcmRzOnR9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFza2VsbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e3ZhcmlhbnRzOltlLkNPTU1FTlQoIi0tIiwiJCIpLGUuQ09NTUVOVCgiey0iLCItfSIse2NvbnRhaW5zOlsic2VsZiJdfSldfSxuPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJ7LSMiLGVuZDoiIy19In0scj17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXiMiLGVuZDoiJCJ9LG89e2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYltBLVpdW1xcdyddKiIscmVsZXZhbmNlOjB9LHM9e2JlZ2luOiJcXCgiLGVuZDoiXFwpIixpbGxlZ2FsOiciJyxjb250YWluczpbbixyLHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJcXGJbQS1aXVtcXHddKihcXCgoXFwuXFwufCx8XFx3KylcXCkpPyJ9LGUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOiJbX2Etel1bXFx3J10qIn0pLHRdfTtyZXR1cm57YWxpYXNlczpbImhzIl0sa2V5d29yZHM6ImxldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBkbyBtb2R1bGUgaW1wb3J0IGhpZGluZyBxdWFsaWZpZWQgdHlwZSBkYXRhIG5ld3R5cGUgZGVyaXZpbmcgY2xhc3MgaW5zdGFuY2UgYXMgZGVmYXVsdCBpbmZpeCBpbmZpeGwgaW5maXhyIGZvcmVpZ24gZXhwb3J0IGNjYWxsIHN0ZGNhbGwgY3BsdXNwbHVzIGp2bSBkb3RuZXQgc2FmZSB1bnNhZmUgZmFtaWx5IGZvcmFsbCBtZG8gcHJvYyByZWMiLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoibW9kdWxlIixlbmQ6IndoZXJlIixrZXl3b3JkczoibW9kdWxlIHdoZXJlIixjb250YWluczpbcyx0XSxpbGxlZ2FsOiJcXFdcXC58OyJ9LHtiZWdpbjoiXFxiaW1wb3J0XFxiIixlbmQ6IiQiLGtleXdvcmRzOiJpbXBvcnQgcXVhbGlmaWVkIGFzIGhpZGluZyIsY29udGFpbnM6W3MsdF0saWxsZWdhbDoiXFxXXFwufDsifSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW46Il4oXFxzKik/KGNsYXNzfGluc3RhbmNlKVxcYiIsZW5kOiJ3aGVyZSIsa2V5d29yZHM6ImNsYXNzIGZhbWlseSBpbnN0YW5jZSB3aGVyZSIsY29udGFpbnM6W28scyx0XX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiJcXGIoZGF0YXwobmV3KT90eXBlKVxcYiIsZW5kOiIkIixrZXl3b3JkczoiZGF0YSBmYW1pbHkgdHlwZSBuZXd0eXBlIGRlcml2aW5nIixjb250YWluczpbbixvLHMse2JlZ2luOiJ7IixlbmQ6In0iLGNvbnRhaW5zOnMuY29udGFpbnN9LHRdfSx7YmVnaW5LZXl3b3JkczoiZGVmYXVsdCIsZW5kOiIkIixjb250YWluczpbbyxzLHRdfSx7YmVnaW5LZXl3b3JkczoiaW5maXggaW5maXhsIGluZml4ciIsZW5kOiIkIixjb250YWluczpbZS5DX05VTUJFUl9NT0RFLHRdfSx7YmVnaW46IlxcYmZvcmVpZ25cXGIiLGVuZDoiJCIsa2V5d29yZHM6ImZvcmVpZ24gaW1wb3J0IGV4cG9ydCBjY2FsbCBzdGRjYWxsIGNwbHVzcGx1cyBqdm0gZG90bmV0IHNhZmUgdW5zYWZlIixjb250YWluczpbbyxlLlFVT1RFX1NUUklOR19NT0RFLHRdfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIyFcXC91c3JcXC9iaW5cXC9lbnYgcnVuaGFza2VsbCIsZW5kOiIkIn0sbixyLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLG8sZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46Il5bX2Etel1bXFx3J10qIn0pLHQse2JlZ2luOiItPnw8LSJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGF4ZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJoeCJdLGtleXdvcmRzOntrZXl3b3JkOiJicmVhayBjYXNlIGNhc3QgY2F0Y2ggY29udGludWUgZGVmYXVsdCBkbyBkeW5hbWljIGVsc2UgZW51bSBleHRlcm4gZm9yIGZ1bmN0aW9uIGhlcmUgaWYgaW1wb3J0IGluIGlubGluZSBuZXZlciBuZXcgb3ZlcnJpZGUgcGFja2FnZSBwcml2YXRlIGdldCBzZXQgcHVibGljIHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJhY2UgdHJ5IHR5cGVkZWYgdW50eXBlZCB1c2luZyB2YXIgd2hpbGUgSW50IEZsb2F0IFN0cmluZyBCb29sIER5bmFtaWMgVm9pZCBBcnJheSAiLGJ1aWx0X2luOiJ0cmFjZSB0aGlzIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgXyJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUse2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLGVuZDoiXFx9In0se2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCQiLGVuZDoiXFxXfSJ9XX0sZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkA6IixlbmQ6IiQifSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIyIsZW5kOiIkIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxzZWlmIGVuZCBlcnJvciJ9fSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiOlsgXHRdKiIsZW5kOiJbXkEtWmEtejAtOV8gXHRcXC0+XSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiI6WyBcdF0qIixlbmQ6IlxcVyIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJuZXcgKiIsZW5kOiJcXFciLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiZW51bSIsZW5kOiJcXHsiLGNvbnRhaW5zOltlLlRJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiYWJzdHJhY3QiLGVuZDoiW1xceyRdIixjb250YWluczpbe2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcKCIsZW5kOiJcXCkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiZnJvbSArIixlbmQ6IlxcVyIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJ0byArIixlbmQ6IlxcVyIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LGUuVElUTEVfTU9ERV0sa2V5d29yZHM6e2tleXdvcmQ6ImFic3RyYWN0IGZyb20gdG8ifX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiJcXGIoY2xhc3N8aW50ZXJmYWNlKSArIixlbmQ6IltcXHskXSIsZXhjbHVkZUVuZDohMCxrZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixjb250YWluczpbe2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IlxcYihleHRlbmRzfGltcGxlbWVudHMpICsiLGtleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjplLklERU5UX1JFLHJlbGV2YW5jZTowfV19LGUuVElUTEVfTU9ERV19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOiJcXCgiLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiXFxTIixjb250YWluczpbZS5USVRMRV9NT0RFXX1dLGlsbGVnYWw6LzxcLy99fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hzcC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsbGV4ZW1lczovW1x3XC5fXSsvLGtleXdvcmRzOiJnb3RvIGdvc3ViIHJldHVybiBicmVhayByZXBlYXQgbG9vcCBjb250aW51ZSB3YWl0IGF3YWl0IGRpbSBzZGltIGZvcmVhY2ggZGltdHlwZSBkdXAgZHVwcHRyIGVuZCBzdG9wIG5ld21vZCBkZWxtb2QgbXJlZiBydW4gZXhnb3RvIG9uIG1jYWxsIGFzc2VydCBsb2dtZXMgbmV3bGFiIHJlc3VtZSB5aWVsZCBvbmV4aXQgb25lcnJvciBvbmtleSBvbmNsaWNrIG9uY21kIGV4aXN0IGRlbGV0ZSBta2RpciBjaGRpciBkaXJsaXN0IGJsb2FkIGJzYXZlIGJjb3B5IG1lbWZpbGUgaWYgZWxzZSBwb2tlIHdwb2tlIGxwb2tlIGdldHN0ciBjaGRwbSBtZW1leHBhbmQgbWVtY3B5IG1lbXNldCBub3Rlc2VsIG5vdGVhZGQgbm90ZWRlbCBub3RlbG9hZCBub3Rlc2F2ZSByYW5kb21pemUgbm90ZXVuc2VsIG5vdGVnZXQgc3BsaXQgc3RycmVwIHNldGVhc2UgYnV0dG9uIGNoZ2Rpc3AgZXhlYyBkaWFsb2cgbW1sb2FkIG1tcGxheSBtbXN0b3AgbWNpIHBzZXQgcGdldCBzeXNjb2xvciBtZXMgcHJpbnQgdGl0bGUgcG9zIGNpcmNsZSBjbHMgZm9udCBzeXNmb250IG9ianNpemUgcGljbG9hZCBjb2xvciBwYWxjb2xvciBwYWxldHRlIHJlZHJhdyB3aWR0aCBnc2VsIGdjb3B5IGd6b29tIGdtb2RlIGJtcHNhdmUgaHN2Y29sb3IgZ2V0a2V5IGxpc3Rib3ggY2hrYm94IGNvbWJveCBpbnB1dCBtZXNib3ggYnVmZmVyIHNjcmVlbiBiZ3NjciBtb3VzZSBvYmpzZWwgZ3JvbGwgbGluZSBjbHJvYmogYm94ZiBvYmpwcm0gb2JqbW9kZSBzdGljayBncmVjdCBncm90YXRlIGdzcXVhcmUgZ3JhZGYgb2JqaW1hZ2Ugb2Jqc2tpcCBvYmplbmFibGUgY2VsbG9hZCBjZWxkaXYgY2VscHV0IG5ld2NvbSBxdWVyeWNvbSBkZWxjb20gY252c3RvdyBjb21yZXMgYXhvYmogd2lub2JqIHNlbmRtc2cgY29tZXZlbnQgY29tZXZhcmcgc2FycmF5Y29udiBjYWxsZnVuYyBjbnZ3dG9zIGNvbWV2ZGlzcCBsaWJwdHIgc3lzdGVtIGhzcHN0YXQgaHNwdmVyIHN0YXQgY250IGVyciBzdHJzaXplIGxvb3BsZXYgc3VibGV2IGlwYXJhbSB3cGFyYW0gbHBhcmFtIHJlZnN0ciByZWZkdmFsIGludCBybmQgc3RybGVuIGxlbmd0aCBsZW5ndGgyIGxlbmd0aDMgbGVuZ3RoNCB2YXJ0eXBlIGdldHRpbWUgcGVlayB3cGVlayBscGVlayB2YXJwdHIgdmFydXNlIG5vdGVpbmZvIGluc3RyIGFicyBsaW1pdCBnZXRlYXNlIHN0ciBzdHJtaWQgc3RyZiBnZXRwYXRoIHN0cnRyaW0gc2luIGNvcyB0YW4gYXRhbiBzcXJ0IGRvdWJsZSBhYnNmIGV4cGYgbG9nZiBsaW1pdGYgcG93ZiBnZXRlYXNlZiBtb3VzZXggbW91c2V5IG1vdXNldyBod25kIGhpbnN0YW5jZSBoZGMgZ2luZm8gb2JqaW5mbyBkaXJpbmZvIHN5c2luZm8gdGhpc21vZCBfX2hzcHZlcl9fIF9faHNwMzBfXyBfX2RhdGVfXyBfX3RpbWVfXyBfX2xpbmVfXyBfX2ZpbGVfXyBfZGVidWcgX19oc3BkZWZfXyBhbmQgb3IgeG9yIG5vdCBzY3JlZW5fbm9ybWFsIHNjcmVlbl9wYWxldHRlIHNjcmVlbl9oaWRlIHNjcmVlbl9maXhlZHNpemUgc2NyZWVuX3Rvb2wgc2NyZWVuX2ZyYW1lIGdtb2RlX2dkaSBnbW9kZV9tZW0gZ21vZGVfcmdiMCBnbW9kZV9hbHBoYSBnbW9kZV9yZ2IwYWxwaGEgZ21vZGVfYWRkIGdtb2RlX3N1YiBnbW9kZV9waXhlbGEgZ2luZm9fbXggZ2luZm9fbXkgZ2luZm9fYWN0IGdpbmZvX3NlbCBnaW5mb193eDEgZ2luZm9fd3kxIGdpbmZvX3d4MiBnaW5mb193eTIgZ2luZm9fdnggZ2luZm9fdnkgZ2luZm9fc2l6ZXggZ2luZm9fc2l6ZXkgZ2luZm9fd2lueCBnaW5mb193aW55IGdpbmZvX21lc3ggZ2luZm9fbWVzeSBnaW5mb19yIGdpbmZvX2cgZ2luZm9fYiBnaW5mb19wYWx1c2UgZ2luZm9fZGlzcHggZ2luZm9fZGlzcHkgZ2luZm9fY3ggZ2luZm9fY3kgZ2luZm9faW50aWQgZ2luZm9fbmV3aWQgZ2luZm9fc3ggZ2luZm9fc3kgb2JqaW5mb19tb2RlIG9iamluZm9fYm1zY3Igb2JqaW5mb19od25kIG5vdGVtYXggbm90ZXNpemUgZGlyX2N1ciBkaXJfZXhlIGRpcl93aW4gZGlyX3N5cyBkaXJfY21kbGluZSBkaXJfZGVza3RvcCBkaXJfbXlkb2MgZGlyX3R2IGZvbnRfbm9ybWFsIGZvbnRfYm9sZCBmb250X2l0YWxpYyBmb250X3VuZGVybGluZSBmb250X3N0cmlrZW91dCBmb250X2FudGlhbGlhcyBvYmptb2RlX25vcm1hbCBvYmptb2RlX2d1aWZvbnQgb2JqbW9kZV91c2Vmb250IGdzcXVhcmVfZ3JhZCBtc2dvdGhpYyBtc21pbmNobyBkbyB1bnRpbCB3aGlsZSB3ZW5kIGZvciBuZXh0IF9icmVhayBfY29udGludWUgc3dpdGNoIGNhc2UgZGVmYXVsdCBzd2JyZWFrIHN3ZW5kIGRkaW0gbGRpbSBhbGxvYyBtX3BpIHJhZDJkZWcgZGVnMnJhZCBlYXNlX2xpbmVhciBlYXNlX3F1YWRfaW4gZWFzZV9xdWFkX291dCBlYXNlX3F1YWRfaW5vdXQgZWFzZV9jdWJpY19pbiBlYXNlX2N1YmljX291dCBlYXNlX2N1YmljX2lub3V0IGVhc2VfcXVhcnRpY19pbiBlYXNlX3F1YXJ0aWNfb3V0IGVhc2VfcXVhcnRpY19pbm91dCBlYXNlX2JvdW5jZV9pbiBlYXNlX2JvdW5jZV9vdXQgZWFzZV9ib3VuY2VfaW5vdXQgZWFzZV9zaGFrZV9pbiBlYXNlX3NoYWtlX291dCBlYXNlX3NoYWtlX2lub3V0IGVhc2VfbG9vcCIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46J3siJyxlbmQ6JyJ9Jyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0sZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSkse2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMiLGVuZDoiJCIsa2V5d29yZHM6eyJtZXRhLWtleXdvcmQiOiJhZGRpb24gY2Z1bmMgY21kIGNtcG9wdCBjb21mdW5jIGNvbnN0IGRlZmNmdW5jIGRlZmZ1bmMgZGVmaW5lIGVsc2UgZW5kaWYgZW51bSBlcGFjayBmdW5jIGdsb2JhbCBpZiBpZmRlZiBpZm5kZWYgaW5jbHVkZSBtb2RjZnVuYyBtb2RmdW5jIG1vZGluaXQgbW9kdGVybSBtb2R1bGUgcGFjayBwYWNrb3B0IHJlZ2NtZCBydW50aW1lIHVuZGVmIHVzZWNvbSB1c2VsaWIifSxjb250YWluczpbZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToibWV0YS1zdHJpbmcifSksZS5OVU1CRVJfTU9ERSxlLkNfTlVNQkVSX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJeXFwqKFxcdyt8QCkifSxlLk5VTUJFUl9NT0RFLGUuQ19OVU1CRVJfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h0bWxiYXJzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iYWN0aW9uIGNvbGxlY3Rpb24gY29tcG9uZW50IGNvbmNhdCBkZWJ1Z2dlciBlYWNoIGVhY2gtaW4gZWxzZSBnZXQgaGFzaCBpZiBpbnB1dCBsaW5rLXRvIGxvYyBsb2cgbXV0IG91dGxldCBwYXJ0aWFsIHF1ZXJ5LXBhcmFtcyByZW5kZXIgdGV4dGFyZWEgdW5ib3VuZCB1bmxlc3Mgd2l0aCB5aWVsZCB2aWV3IixuPXtpbGxlZ2FsOi9cfVx9LyxiZWdpbjovW2EtekEtWjAtOV9dKz0vLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjovW2EtekEtWjAtOV9dKy99XX0scj0oZS5RVU9URV9TVFJJTkdfTU9ERSx7ZW5kc1dpdGhQYXJlbnQ6ITAscmVsZXZhbmNlOjAsa2V5d29yZHM6e2tleXdvcmQ6ImFzIixidWlsdF9pbjp0fSxjb250YWluczpbZS5RVU9URV9TVFJJTkdfTU9ERSxuLGUuTlVNQkVSX01PREVdfSk7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W2UuQ09NTUVOVCgie3shKC0tKT8iLCIoLS0pP319Iikse2NsYXNzTmFtZToidGVtcGxhdGUtdGFnIixiZWdpbjovXHtce1sjXC9dLyxlbmQ6L1x9XH0vLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJuYW1lIixiZWdpbjovW2EtekEtWlwuXC1dKy8sa2V5d29yZHM6eyJidWlsdGluLW5hbWUiOnR9LHN0YXJ0czpyfV19LHtjbGFzc05hbWU6InRlbXBsYXRlLXZhcmlhYmxlIixiZWdpbjovXHtce1thLXpBLVpdW2EtekEtWlwtXSsvLGVuZDovXH1cfS8sa2V5d29yZHM6e2tleXdvcmQ6ImFzIixidWlsdF9pbjp0fSxjb250YWluczpbZS5RVU9URV9TVFJJTkdfTU9ERV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHR0cC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IkhUVFAvWzAtOVxcLl0rIjtyZXR1cm57YWxpYXNlczpbImh0dHBzIl0saWxsZWdhbDoiXFxTIixjb250YWluczpbe2JlZ2luOiJeIit0LGVuZDoiJCIsY29udGFpbnM6W3tjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYlxcZHszfVxcYiJ9XX0se2JlZ2luOiJeW0EtWl0rICguKj8pICIrdCsiJCIscmV0dXJuQmVnaW46ITAsZW5kOiIkIixjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiICIsZW5kOiIgIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMH0se2JlZ2luOnR9LHtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJbQS1aXSsifV19LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46Il5cXHciLGVuZDoiOiAiLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiXFxufFxcc3w9IixzdGFydHM6e2VuZDoiJCIscmVsZXZhbmNlOjB9fSx7YmVnaW46IlxcblxcbiIsc3RhcnRzOntzdWJMYW5ndWFnZTpbXSxlbmRzV2l0aFBhcmVudDohMH19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHkuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXsiYnVpbHRpbi1uYW1lIjoiIT0gJSAlPSAmICY9ICogKiogKio9ICo9ICptYXAgKyArPSAsIC0tYnVpbGQtY2xhc3MtLSAtLWltcG9ydC0tIC09IC4gLyAvLyAvLz0gLz0gPCA8PCA8PD0gPD0gPSA+ID49ID4+ID4+PSBAIEA9IF4gXj0gYWJzIGFjY3VtdWxhdGUgYWxsIGFuZCBhbnkgYXAtY29tcG9zZSBhcC1kb3RpbWVzIGFwLWVhY2ggYXAtZWFjaC13aGlsZSBhcC1maWx0ZXIgYXAtZmlyc3QgYXAtaWYgYXAtbGFzdCBhcC1tYXAgYXAtbWFwLXdoZW4gYXAtcGlwZSBhcC1yZWR1Y2UgYXAtcmVqZWN0IGFwcGx5IGFzLT4gYXNjaWkgYXNzZXJ0IGFzc29jIGJpbiBicmVhayBidXRsYXN0IGNhbGxhYmxlIGNhbGxpbmctbW9kdWxlLW5hbWUgY2FyIGNhc2UgY2RyIGNoYWluIGNociBjb2xsPyBjb21iaW5hdGlvbnMgY29tcGlsZSBjb21wcmVzcyBjb25kIGNvbnMgY29ucz8gY29udGludWUgY291bnQgY3VycnkgY3V0IGN5Y2xlIGRlYyBkZWYgZGVmYXVsdC1tZXRob2QgZGVmY2xhc3MgZGVmbWFjcm8gZGVmbWFjcm8tYWxpYXMgZGVmbWFjcm8vZyEgZGVmbWFpbiBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiBkZWZuLWFsaWFzIGRlZm5jIGRlZm5yIGRlZnJlYWRlciBkZWZzZXEgZGVsIGRlbGF0dHIgZGVsZXRlLXJvdXRlIGRpY3QtY29tcCBkaXIgZGlzYXNzZW1ibGUgZGlzcGF0Y2gtcmVhZGVyLW1hY3JvIGRpc3RpbmN0IGRpdm1vZCBkbyBkb3RvIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHk/IGVuZC1zZXF1ZW5jZSBldmFsIGV2YWwtYW5kLWNvbXBpbGUgZXZhbC13aGVuLWNvbXBpbGUgZXZlbj8gZXZlcnk/IGV4Y2VwdCBleGVjIGZpbHRlciBmaXJzdCBmbGF0dGVuIGZsb2F0PyBmbiBmbmMgZm5yIGZvciBmb3IqIGZvcm1hdCBmcmFjdGlvbiBnZW5leHByIGdlbnN5bSBnZXQgZ2V0YXR0ciBnbG9iYWwgZ2xvYmFscyBncm91cC1ieSBoYXNhdHRyIGhhc2ggaGV4IGlkIGlkZW50aXR5IGlmIGlmKiBpZi1ub3QgaWYtcHl0aG9uMiBpbXBvcnQgaW4gaW5jIGlucHV0IGluc3RhbmNlPyBpbnRlZ2VyIGludGVnZXItY2hhcj8gaW50ZWdlcj8gaW50ZXJsZWF2ZSBpbnRlcnBvc2UgaXMgaXMtY29sbCBpcy1jb25zIGlzLWVtcHR5IGlzLWV2ZW4gaXMtZXZlcnkgaXMtZmxvYXQgaXMtaW5zdGFuY2UgaXMtaW50ZWdlciBpcy1pbnRlZ2VyLWNoYXIgaXMtaXRlcmFibGUgaXMtaXRlcmF0b3IgaXMta2V5d29yZCBpcy1uZWcgaXMtbm9uZSBpcy1ub3QgaXMtbnVtZXJpYyBpcy1vZGQgaXMtcG9zIGlzLXN0cmluZyBpcy1zeW1ib2wgaXMtemVybyBpc2luc3RhbmNlIGlzbGljZSBpc3N1YmNsYXNzIGl0ZXIgaXRlcmFibGU/IGl0ZXJhdGUgaXRlcmF0b3I/IGtleXdvcmQga2V5d29yZD8gbGFtYmRhIGxhc3QgbGVuIGxldCBsaWYgbGlmLW5vdCBsaXN0KiBsaXN0LWNvbXAgbG9jYWxzIGxvb3AgbWFjcm8tZXJyb3IgbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBtYWNyb2V4cGFuZC1hbGwgbWFwIG1heCBtZXJnZS13aXRoIG1ldGhvZC1kZWNvcmF0b3IgbWluIG11bHRpLWRlY29yYXRvciBtdWx0aWNvbWJpbmF0aW9ucyBuYW1lIG5lZz8gbmV4dCBub25lPyBub25sb2NhbCBub3Qgbm90LWluIG5vdD8gbnRoIG51bWVyaWM/IG9jdCBvZGQ/IG9wZW4gb3Igb3JkIHBhcnRpdGlvbiBwZXJtdXRhdGlvbnMgcG9zPyBwb3N0LXJvdXRlIHBvc3R3YWxrIHBvdyBwcmV3YWxrIHByaW50IHByb2R1Y3QgcHJvZmlsZS9jYWxscyBwcm9maWxlL2NwdSBwdXQtcm91dGUgcXVhc2lxdW90ZSBxdW90ZSByYWlzZSByYW5nZSByZWFkIHJlYWQtc3RyIHJlY3Vyc2l2ZS1yZXBsYWNlIHJlZHVjZSByZW1vdmUgcmVwZWF0IHJlcGVhdGVkbHkgcmVwciByZXF1aXJlIHJlc3Qgcm91bmQgcm91dGUgcm91dGUtd2l0aC1tZXRob2RzIHJ3bSBzZWNvbmQgc2VxIHNldC1jb21wIHNldGF0dHIgc2V0diBzb21lIHNvcnRlZCBzdHJpbmcgc3RyaW5nPyBzdW0gc3dpdGNoIHN5bWJvbD8gdGFrZSB0YWtlLW50aCB0YWtlLXdoaWxlIHRlZSB0cnkgdW5sZXNzIHVucXVvdGUgdW5xdW90ZS1zcGxpY2luZyB2YXJzIHdhbGsgd2hlbiB3aGlsZSB3aXRoIHdpdGgqIHdpdGgtZGVjb3JhdG9yIHdpdGgtZ2Vuc3ltcyB4aSB4b3IgeWllbGQgeWllbGQtZnJvbSB6ZXJvPyB6aXAgemlwLWxvbmdlc3QgfCB8PSB+In0sbj0iW2EtekEtWl9cXC0hLj8rKj08PiYjJ11bYS16QS1aX1xcLSEuPysqPTw+JiMnMC05Lzs6XSoiLHI9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4jISIsZW5kOiIkIn0sbz17YmVnaW46bixyZWxldmFuY2U6MH0scz17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJbLStdP1xcZCsoXFwuXFxkKyk/IixyZWxldmFuY2U6MH0saT1lLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSksYT1lLkNPTU1FTlQoIjsiLCIkIix7cmVsZXZhbmNlOjB9KSxsPXtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOi9cYihbVHRdcnVlfFtGZl1hbHNlfG5pbHxOb25lKVxiL30sdT17YmVnaW46IltcXFtcXHtdIixlbmQ6IltcXF1cXH1dIn0sYz17Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjoiXFxeIitufSxkPWUuQ09NTUVOVCgiXFxeXFx7IiwiXFx9IiksXz17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJbOl17MSwyfSIrbn0scD17YmVnaW46IlxcKCIsZW5kOiJcXCkifSxmPXtlbmRzV2l0aFBhcmVudDohMCxyZWxldmFuY2U6MH0sbT17a2V5d29yZHM6dCxsZXhlbWVzOm4sY2xhc3NOYW1lOiJuYW1lIixiZWdpbjpuLHN0YXJ0czpmfSxoPVtwLGksYyxkLGEsXyx1LHMsbCxvXTtyZXR1cm4gcC5jb250YWlucz1bZS5DT01NRU5UKCJjb21tZW50IiwiIiksbSxmXSxmLmNvbnRhaW5zPWgsdS5jb250YWlucz1oLHthbGlhc2VzOlsiaHlsYW5nIl0saWxsZWdhbDovXFMvLGNvbnRhaW5zOltyLHAsaSxjLGQsYSxfLHUscyxsXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaW5mb3JtNy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJpNyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6e2tleXdvcmQ6InRoaW5nIHJvb20gcGVyc29uIG1hbiB3b21hbiBhbmltYWwgY29udGFpbmVyIHN1cHBvcnRlciBiYWNrZHJvcCBkb29yIHNjZW5lcnkgb3BlbiBjbG9zZWQgbG9ja2VkIGluc2lkZSBnZW5kZXIgaXMgYXJlIHNheSB1bmRlcnN0YW5kIGtpbmQgb2YgcnVsZSJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IlxcWyIsZW5kOiJcXF0ifV19LHtjbGFzc05hbWU6InNlY3Rpb24iLGJlZ2luOi9eKFZvbHVtZXxCb29rfFBhcnR8Q2hhcHRlcnxTZWN0aW9ufFRhYmxlKVxiLyxlbmQ6IiQifSx7YmVnaW46L14oQ2hlY2t8Q2Fycnkgb3V0fFJlcG9ydHxJbnN0ZWFkIG9mfFRvfFJ1bGV8V2hlbnxCZWZvcmV8QWZ0ZXIpXGIvLGVuZDoiOiIsY29udGFpbnM6W3tiZWdpbjoiXFwoVGhpcyIsZW5kOiJcXCkifV19LHtjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOiJcXFsiLGVuZDoiXFxdIixjb250YWluczpbInNlbGYiXX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmkuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0sdmFyaWFudHM6W3tiZWdpbjoiJycnIixlbmQ6IicnJyIscmVsZXZhbmNlOjEwfSx7YmVnaW46JyIiIicsZW5kOiciIiInLHJlbGV2YW5jZToxMH0se2JlZ2luOiciJyxlbmQ6JyInfSx7YmVnaW46IiciLGVuZDoiJyJ9XX07cmV0dXJue2FsaWFzZXM6WyJ0b21sIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9cUy8sY29udGFpbnM6W2UuQ09NTUVOVCgiOyIsIiQiKSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InNlY3Rpb24iLGJlZ2luOi9eXHMqXFsrLyxlbmQ6L1xdKy99LHtiZWdpbjovXlthLXowLTlcW1xdX1wuLV0rXHMqPVxzKi8sZW5kOiIkIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46L1thLXowLTlcW1xdX1wuLV0rL30se2JlZ2luOi89LyxlbmRzV2l0aFBhcmVudDohMCxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46L1xib258b2ZmfHRydWV8ZmFsc2V8eWVzfG5vXGIvfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjovXCRbXHdcZCJdW1x3XGRfXSovfSx7YmVnaW46L1wkXHsoLio/KX0vfV19LHQse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjovKFtcK1wtXSspP1tcZF0rX1tcZF9dKy99LGUuTlVNQkVSX01PREVdfV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaXJwZjkwLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIn07cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6e2xpdGVyYWw6Ii5GYWxzZS4gLlRydWUuIixrZXl3b3JkOiJraW5kIGRvIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlIHR5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiBwdWJsaWMgc3Vicm91dGluZXwxMCBmdW5jdGlvbiBwcm9ncmFtIC5hbmQuIC5vci4gLm5vdC4gLmxlLiAuZXEuIC5nZS4gLmd0LiAubHQuIGdvdG8gc2F2ZSBlbHNlIHVzZSBtb2R1bGUgc2VsZWN0IGNhc2UgYWNjZXNzIGJsYW5rIGRpcmVjdCBleGlzdCBmaWxlIGZtdCBmb3JtIGZvcm1hdHRlZCBpb3N0YXQgbmFtZSBuYW1lZCBuZXh0cmVjIG51bWJlciBvcGVuZWQgcmVjIHJlY2wgc2VxdWVudGlhbCBzdGF0dXMgdW5mb3JtYXR0ZWQgdW5pdCBjb250aW51ZSBmb3JtYXQgcGF1c2UgY3ljbGUgZXhpdCBjX251bGxfY2hhciBjX2FsZXJ0IGNfYmFja3NwYWNlIGNfZm9ybV9mZWVkIGZsdXNoIHdhaXQgZGVjaW1hbCByb3VuZCBpb21zZyBzeW5jaHJvbm91cyBub3Bhc3Mgbm9uX292ZXJyaWRhYmxlIHBhc3MgcHJvdGVjdGVkIHZvbGF0aWxlIGFic3RyYWN0IGV4dGVuZHMgaW1wb3J0IG5vbl9pbnRyaW5zaWMgdmFsdWUgZGVmZXJyZWQgZ2VuZXJpYyBmaW5hbCBlbnVtZXJhdG9yIGNsYXNzIGFzc29jaWF0ZSBiaW5kIGVudW0gY19pbnQgY19zaG9ydCBjX2xvbmcgY19sb25nX2xvbmcgY19zaWduZWRfY2hhciBjX3NpemVfdCBjX2ludDhfdCBjX2ludDE2X3QgY19pbnQzMl90IGNfaW50NjRfdCBjX2ludF9sZWFzdDhfdCBjX2ludF9sZWFzdDE2X3QgY19pbnRfbGVhc3QzMl90IGNfaW50X2xlYXN0NjRfdCBjX2ludF9mYXN0OF90IGNfaW50X2Zhc3QxNl90IGNfaW50X2Zhc3QzMl90IGNfaW50X2Zhc3Q2NF90IGNfaW50bWF4X3QgQ19pbnRwdHJfdCBjX2Zsb2F0IGNfZG91YmxlIGNfbG9uZ19kb3VibGUgY19mbG9hdF9jb21wbGV4IGNfZG91YmxlX2NvbXBsZXggY19sb25nX2RvdWJsZV9jb21wbGV4IGNfYm9vbCBjX2NoYXIgY19udWxsX3B0ciBjX251bGxfZnVucHRyIGNfbmV3X2xpbmUgY19jYXJyaWFnZV9yZXR1cm4gY19ob3Jpem9udGFsX3RhYiBjX3ZlcnRpY2FsX3RhYiBpc29fY19iaW5kaW5nIGNfbG9jIGNfZnVubG9jIGNfYXNzb2NpYXRlZCAgY19mX3BvaW50ZXIgY19wdHIgY19mdW5wdHIgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciBudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdCBjX2ZfcHJvY3BvaW50ZXIgaWVlZV9hcml0aG1ldGljIGllZWVfc3VwcG9ydF91bmRlcmZsb3dfY29udHJvbCBpZWVlX2dldF91bmRlcmZsb3dfbW9kZSBpZWVlX3NldF91bmRlcmZsb3dfbW9kZSBuZXd1bml0IGNvbnRpZ3VvdXMgcmVjdXJzaXZlIHBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlIGVvciBhZHZhbmNlIG5tbCBpbnRlcmZhY2UgcHJvY2VkdXJlIG5hbWVsaXN0IGluY2x1ZGUgc2VxdWVuY2UgZWxlbWVudGFsIHB1cmUgaW50ZWdlciByZWFsIGNoYXJhY3RlciBjb21wbGV4IGxvZ2ljYWwgZGltZW5zaW9uIGFsbG9jYXRhYmxlfDEwIHBhcmFtZXRlciBleHRlcm5hbCBpbXBsaWNpdHwxMCBub25lIGRvdWJsZSBwcmVjaXNpb24gYXNzaWduIGludGVudCBvcHRpb25hbCBwb2ludGVyIHRhcmdldCBpbiBvdXQgY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEgYmVnaW5fcHJvdmlkZXIgJmJlZ2luX3Byb3ZpZGVyIGVuZF9wcm92aWRlciBiZWdpbl9zaGVsbCBlbmRfc2hlbGwgYmVnaW5fdGVtcGxhdGUgZW5kX3RlbXBsYXRlIHN1YnN0IGFzc2VydCB0b3VjaCBzb2Z0X3RvdWNoIHByb3ZpZGUgbm9fZGVwIGZyZWUgaXJwX2lmIGlycF9lbHNlIGlycF9lbmRpZiBpcnBfd3JpdGUgaXJwX3JlYWQiLGJ1aWx0X2luOiJhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50IGRsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hIGlxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgcW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCBtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0IHJhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kIHNldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mYWNvc2ggYXNpbmggYXRhbmggYmVzc2VsX2owIGJlc3NlbF9qMSBiZXNzZWxfam4gYmVzc2VsX3kwIGJlc3NlbF95MSBiZXNzZWxfeW4gZXJmIGVyZmMgZXJmY19zY2FsZWQgZ2FtbWEgbG9nX2dhbW1hIGh5cG90IG5vcm0yIGF0b21pY19kZWZpbmUgYXRvbWljX3JlZiBleGVjdXRlX2NvbW1hbmRfbGluZSBsZWFkeiB0cmFpbHogc3RvcmFnZV9zaXplIG1lcmdlX2JpdHMgYmdlIGJndCBibGUgYmx0IGRzaGlmdGwgZHNoaWZ0ciBmaW5kbG9jIGlhbGwgaWFueSBpcGFyaXR5IGltYWdlX2luZGV4IGxjb2JvdW5kIHVjb2JvdW5kIG1hc2tsIG1hc2tyIG51bV9pbWFnZXMgcGFyaXR5IHBvcGNudCBwb3BwYXIgc2hpZnRhIHNoaWZ0bCBzaGlmdHIgdGhpc19pbWFnZSBJUlBfQUxJR04gaXJwX2hlcmUifSxpbGxlZ2FsOi9cL1wqLyxjb250YWluczpbZS5pbmhlcml0KGUuQVBPU19TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLHJlbGV2YW5jZTowfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIixyZWxldmFuY2U6MH0pLHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJzdWJyb3V0aW5lIGZ1bmN0aW9uIHByb2dyYW0iLGlsbGVnYWw6Ilskez1cXG5dIixjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREUsdF19LGUuQ09NTUVOVCgiISIsIiQiLHtyZWxldmFuY2U6MH0pLGUuQ09NTUVOVCgiYmVnaW5fZG9jIiwiZW5kX2RvYyIse3JlbGV2YW5jZToxMH0pLHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46Iig/PVxcYnxcXCt8XFwtfFxcLikoPz1cXC5cXGR8XFxkKSg/OlxcZCspPyg/OlxcLj9cXGQqKSg/OltkZV1bKy1dP1xcZCspP1xcYlxcLj8iLHJlbGV2YW5jZTowfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2lzYmwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbQS1aYS160JAt0K/QsC3Rj9GR0IFfIV1bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSoiLG49IklBcHBsaWNhdGlvbiBJQWNjZXNzUmlnaHRzIElBY2NvdW50UmVwb3NpdG9yeSBJQWNjb3VudFNlbGVjdGlvblJlc3RyaWN0aW9ucyBJQWN0aW9uIElBY3Rpb25MaXN0IElBZG1pbmlzdHJhdGlvbkhpc3RvcnlEZXNjcmlwdGlvbiBJQW5jaG9ycyBJQXBwbGljYXRpb24gSUFyY2hpdmVJbmZvIElBdHRhY2htZW50IElBdHRhY2htZW50TGlzdCBJQ2hlY2tMaXN0Qm94IElDaGVja1BvaW50ZWRMaXN0IElDb2x1bW4gSUNvbXBvbmVudCBJQ29tcG9uZW50RGVzY3JpcHRpb24gSUNvbXBvbmVudFRva2VuIElDb21wb25lbnRUb2tlbkZhY3RvcnkgSUNvbXBvbmVudFRva2VuSW5mbyBJQ29tcFJlY29yZEluZm8gSUNvbm5lY3Rpb24gSUNvbnRlbnRzIElDb250cm9sIElDb250cm9sSm9iIElDb250cm9sSm9iSW5mbyBJQ29udHJvbExpc3QgSUNyeXB0byBJQ3J5cHRvMiBJQ3VzdG9tSm9iIElDdXN0b21Kb2JJbmZvIElDdXN0b21MaXN0Qm94IElDdXN0b21PYmplY3RXaXphcmRTdGVwIElDdXN0b21Xb3JrIElDdXN0b21Xb3JrSW5mbyBJRGF0YVNldCBJRGF0YVNldEFjY2Vzc0luZm8gSURhdGFTaWduZXIgSURhdGVDcml0ZXJpb24gSURhdGVSZXF1aXNpdGUgSURhdGVSZXF1aXNpdGVEZXNjcmlwdGlvbiBJRGF0ZVZhbHVlIElEZWFBY2Nlc3NSaWdodHMgSURlYU9iamVjdEluZm8gSURldmVsb3BtZW50Q29tcG9uZW50TG9jayBJRGlhbG9nIElEaWFsb2dGYWN0b3J5IElEaWFsb2dQaWNrUmVxdWlzaXRlSXRlbXMgSURpYWxvZ3NGYWN0b3J5IElESUNTRmFjdG9yeSBJRG9jUmVxdWlzaXRlIElEb2N1bWVudEluZm8gSUR1YWxMaXN0RGlhbG9nIElFQ2VydGlmaWNhdGUgSUVDZXJ0aWZpY2F0ZUluZm8gSUVDZXJ0aWZpY2F0ZXMgSUVkaXRDb250cm9sIElFZGl0b3JGb3JtIElFZG1zRXhwbG9yZXIgSUVkbXNPYmplY3QgSUVkbXNPYmplY3REZXNjcmlwdGlvbiBJRWRtc09iamVjdEZhY3RvcnkgSUVkbXNPYmplY3RJbmZvIElFRG9jdW1lbnQgSUVEb2N1bWVudEFjY2Vzc1JpZ2h0cyBJRURvY3VtZW50RGVzY3JpcHRpb24gSUVEb2N1bWVudEVkaXRvciBJRURvY3VtZW50RmFjdG9yeSBJRURvY3VtZW50SW5mbyBJRURvY3VtZW50U3RvcmFnZSBJRURvY3VtZW50VmVyc2lvbiBJRURvY3VtZW50VmVyc2lvbkxpc3REaWFsb2cgSUVEb2N1bWVudFZlcnNpb25Tb3VyY2UgSUVEb2N1bWVudFdpemFyZFN0ZXAgSUVEb2NWZXJTaWduYXR1cmUgSUVEb2NWZXJzaW9uU3RhdGUgSUVuYWJsZWRNb2RlIElFbmNvZGVQcm92aWRlciBJRW5jcnlwdGVyIElFdmVudCBJRXZlbnRMaXN0IElFeGNlcHRpb24gSUV4dGVybmFsRXZlbnRzIElFeHRlcm5hbEhhbmRsZXIgSUZhY3RvcnkgSUZpZWxkIElGaWxlRGlhbG9nIElGb2xkZXIgSUZvbGRlckRlc2NyaXB0aW9uIElGb2xkZXJEaWFsb2cgSUZvbGRlckZhY3RvcnkgSUZvbGRlckluZm8gSUZvckVhY2ggSUZvcm0gSUZvcm1UaXRsZSBJRm9ybVdpemFyZFN0ZXAgSUdsb2JhbElERmFjdG9yeSBJR2xvYmFsSURJbmZvIElHcmlkIElIYXNoZXIgSUhpc3RvcnlEZXNjcmlwdGlvbiBJSHlwZXJMaW5rQ29udHJvbCBJSW1hZ2VCdXR0b24gSUltYWdlQ29udHJvbCBJSW5uZXJQYW5lbCBJSW5wbGFjZUhpbnQgSUludGVnZXJDcml0ZXJpb24gSUludGVnZXJMaXN0IElJbnRlZ2VyUmVxdWlzaXRlIElJbnRlZ2VyVmFsdWUgSUlTQkxFZGl0b3JGb3JtIElKb2IgSUpvYkRlc2NyaXB0aW9uIElKb2JGYWN0b3J5IElKb2JGb3JtIElKb2JJbmZvIElMYWJlbENvbnRyb2wgSUxhcmdlSW50ZWdlckNyaXRlcmlvbiBJTGFyZ2VJbnRlZ2VyUmVxdWlzaXRlIElMYXJnZUludGVnZXJWYWx1ZSBJTGljZW5zZUluZm8gSUxpZmVDeWNsZVN0YWdlIElMaXN0IElMaXN0Qm94IElMb2NhbElESW5mbyBJTG9jYWxpemF0aW9uIElMb2NrIElNZW1vcnlEYXRhU2V0IElNZXNzYWdpbmdGYWN0b3J5IElNZXRhZGF0YVJlcG9zaXRvcnkgSU5vdGljZSBJTm90aWNlSW5mbyBJTnVtZXJpY0NyaXRlcmlvbiBJTnVtZXJpY1JlcXVpc2l0ZSBJTnVtZXJpY1ZhbHVlIElPYmplY3QgSU9iamVjdERlc2NyaXB0aW9uIElPYmplY3RJbXBvcnRlciBJT2JqZWN0SW5mbyBJT2JzZXJ2ZXIgSVBhbmVsR3JvdXAgSVBpY2tDcml0ZXJpb24gSVBpY2tQcm9wZXJ0eSBJUGlja1JlcXVpc2l0ZSBJUGlja1JlcXVpc2l0ZURlc2NyaXB0aW9uIElQaWNrUmVxdWlzaXRlSXRlbSBJUGlja1JlcXVpc2l0ZUl0ZW1zIElQaWNrVmFsdWUgSVByaXZpbGVnZSBJUHJpdmlsZWdlTGlzdCBJUHJvY2VzcyBJUHJvY2Vzc0ZhY3RvcnkgSVByb2Nlc3NNZXNzYWdlIElQcm9ncmVzcyBJUHJvcGVydHkgSVByb3BlcnR5Q2hhbmdlRXZlbnQgSVF1ZXJ5IElSZWZlcmVuY2UgSVJlZmVyZW5jZUNyaXRlcmlvbiBJUmVmZXJlbmNlRW5hYmxlZE1vZGUgSVJlZmVyZW5jZUZhY3RvcnkgSVJlZmVyZW5jZUhpc3RvcnlEZXNjcmlwdGlvbiBJUmVmZXJlbmNlSW5mbyBJUmVmZXJlbmNlUmVjb3JkQ2FyZFdpemFyZFN0ZXAgSVJlZmVyZW5jZVJlcXVpc2l0ZURlc2NyaXB0aW9uIElSZWZlcmVuY2VzRmFjdG9yeSBJUmVmZXJlbmNlVmFsdWUgSVJlZlJlcXVpc2l0ZSBJUmVwb3J0IElSZXBvcnRGYWN0b3J5IElSZXF1aXNpdGUgSVJlcXVpc2l0ZURlc2NyaXB0aW9uIElSZXF1aXNpdGVEZXNjcmlwdGlvbkxpc3QgSVJlcXVpc2l0ZUZhY3RvcnkgSVJpY2hFZGl0IElSb3V0ZVN0ZXAgSVJ1bGUgSVJ1bGVMaXN0IElTY2hlbWVCbG9jayBJU2NyaXB0IElTY3JpcHRGYWN0b3J5IElTZWFyY2hDcml0ZXJpYSBJU2VhcmNoQ3JpdGVyaW9uIElTZWFyY2hEZXNjcmlwdGlvbiBJU2VhcmNoRmFjdG9yeSBJU2VhcmNoRm9sZGVySW5mbyBJU2VhcmNoRm9yT2JqZWN0RGVzY3JpcHRpb24gSVNlYXJjaFJlc3VsdFJlc3RyaWN0aW9ucyBJU2VjdXJlZENvbnRleHQgSVNlbGVjdERpYWxvZyBJU2VydmVyRXZlbnQgSVNlcnZlckV2ZW50RmFjdG9yeSBJU2VydmljZURpYWxvZyBJU2VydmljZUZhY3RvcnkgSVNpZ25hdHVyZSBJU2lnblByb3ZpZGVyIElTaWduUHJvdmlkZXIyIElTaWduUHJvdmlkZXIzIElTaW1wbGVDcml0ZXJpb24gSVN0cmluZ0NyaXRlcmlvbiBJU3RyaW5nTGlzdCBJU3RyaW5nUmVxdWlzaXRlIElTdHJpbmdSZXF1aXNpdGVEZXNjcmlwdGlvbiBJU3RyaW5nVmFsdWUgSVN5c3RlbURpYWxvZ3NGYWN0b3J5IElTeXN0ZW1JbmZvIElUYWJTaGVldCBJVGFzayBJVGFza0Fib3J0UmVhc29uSW5mbyBJVGFza0NhcmRXaXphcmRTdGVwIElUYXNrRGVzY3JpcHRpb24gSVRhc2tGYWN0b3J5IElUYXNrSW5mbyBJVGFza1JvdXRlIElUZXh0Q3JpdGVyaW9uIElUZXh0UmVxdWlzaXRlIElUZXh0VmFsdWUgSVRyZWVMaXN0U2VsZWN0RGlhbG9nIElVc2VyIElVc2VyTGlzdCBJVmFsdWUgSVZpZXcgSVdlYkJyb3dzZXJDb250cm9sIElXaXphcmQgSVdpemFyZEFjdGlvbiBJV2l6YXJkRmFjdG9yeSBJV2l6YXJkRm9ybUVsZW1lbnQgSVdpemFyZFBhcmFtIElXaXphcmRQaWNrUGFyYW0gSVdpemFyZFJlZmVyZW5jZVBhcmFtIElXaXphcmRTdGVwIElXb3JrQWNjZXNzUmlnaHRzIElXb3JrRGVzY3JpcHRpb24gSVdvcmtmbG93QXNrYWJsZVBhcmFtIElXb3JrZmxvd0Fza2FibGVQYXJhbXMgSVdvcmtmbG93QmxvY2sgSVdvcmtmbG93QmxvY2tSZXN1bHQgSVdvcmtmbG93RW5hYmxlZE1vZGUgSVdvcmtmbG93UGFyYW0gSVdvcmtmbG93UGlja1BhcmFtIElXb3JrZmxvd1JlZmVyZW5jZVBhcmFtIElXb3JrU3RhdGUgSVdvcmtUcmVlQ3VzdG9tTm9kZSBJV29ya1RyZWVKb2JOb2RlIElXb3JrVHJlZVRhc2tOb2RlIElYTUxFZGl0b3JGb3JtIFNCQ3J5cHRvICIscj17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuTlVNQkVSX1JFLHJlbGV2YW5jZTowfSxvPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonIicsZW5kOiciJ30se2JlZ2luOiInIixlbmQ6IicifV19LHM9e2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiXFxiKD86VE9ET3xET05FfEJFR0lOfEVORHxTVFVCfENIR3xGSVhNRXxOT1RFfEJVR3xYWFgpXFxiIixyZWxldmFuY2U6MH0saT17Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjoiLy8iLGVuZDoiJCIscmVsZXZhbmNlOjAsY29udGFpbnM6W2UuUEhSQVNBTF9XT1JEU19NT0RFLHNdfSxhPXtjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOiIvXFwqIixlbmQ6IlxcKi8iLHJlbGV2YW5jZTowLGNvbnRhaW5zOltlLlBIUkFTQUxfV09SRFNfTU9ERSxzXX0sbD17dmFyaWFudHM6W2ksYV19LHU9e2tleXdvcmQ6ImFuZCDQuCBlbHNlINC40L3QsNGH0LUgZW5kZXhjZXB0IGVuZGZpbmFsbHkgZW5kZm9yZWFjaCDQutC+0L3QtdGG0LLRgdC1IGVuZGlmINC60L7QvdC10YbQtdGB0LvQuCBlbmR3aGlsZSDQutC+0L3QtdGG0L/QvtC60LAgZXhjZXB0IGV4aXRmb3IgZmluYWxseSBmb3JlYWNoINCy0YHQtSBpZiDQtdGB0LvQuCBpbiDQsiBub3Qg0L3QtSBvciDQuNC70LggdHJ5IHdoaWxlINC/0L7QutCwICIsYnVpbHRfaW46IlNZU1JFU19DT05TVF9BQ0NFU19SSUdIVF9UWVBFX0VESVQgU1lTUkVTX0NPTlNUX0FDQ0VTX1JJR0hUX1RZUEVfRlVMTCBTWVNSRVNfQ09OU1RfQUNDRVNfUklHSFRfVFlQRV9WSUVXIFNZU1JFU19DT05TVF9BQ0NFU1NfTU9ERV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX05PX0FDQ0VTU19WSUVXIFNZU1JFU19DT05TVF9BQ0NFU1NfTk9fQUNDRVNTX1ZJRVdfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19BRERfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfQUREX1JFUVVJU0lURV9ZRVNfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19DSEFOR0VfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfQ0hBTkdFX1JFUVVJU0lURV9ZRVNfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19ERUxFVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfREVMRVRFX1JFUVVJU0lURV9ZRVNfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19FWEVDVVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0VYRUNVVEVfUkVRVUlTSVRFX1lFU19DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX05PX0FDQ0VTU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19OT19BQ0NFU1NfUkVRVUlTSVRFX1lFU19DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1JBVElGWV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19SQVRJRllfUkVRVUlTSVRFX1lFU19DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1ZJRVcgU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFV19DT0RFIFNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1ZJRVdfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFV19SRVFVSVNJVEVfWUVTX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0NIQU5HRSBTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfQ0hBTkdFX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0VYSVNUUyBTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRVhJU1RTX0NPREUgU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0ZVTEwgU1lTUkVTX0NPTlNUX0FDQ0VTU19UWVBFX0ZVTExfQ09ERSBTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfVklFVyBTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfVklFV19DT0RFIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9BQk9SVCBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQUNDRVBUIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9BQ0NFU1NfUklHSFRTIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9BRERfQVRUQUNITUVOVCBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ0hBTkdFX0NBUkQgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NIQU5HRV9LSU5EIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DSEFOR0VfU1RPUkFHRSBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ09OVElOVUUgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NPUFkgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NSRUFURSBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ1JFQVRFX1ZFUlNJT04gU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0RFTEVURSBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfREVMRVRFX0FUVEFDSE1FTlQgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0RFTEVURV9WRVJTSU9OIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9ESVNBQkxFX0RFTEVHQVRFX0FDQ0VTU19SSUdIVFMgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQUJMRV9ERUxFR0FURV9BQ0NFU1NfUklHSFRTIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FTkNSWVBUSU9OX0JZX0NFUlRJRklDQVRFIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FTkNSWVBUSU9OX0JZX0NFUlRJRklDQVRFX0FORF9QQVNTV09SRCBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRU5DUllQVElPTl9CWV9QQVNTV09SRCBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRVhQT1JUX1dJVEhfTE9DSyBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRVhQT1JUX1dJVEhPVVRfTE9DSyBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfSU1QT1JUX1dJVEhfVU5MT0NLIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9JTVBPUlRfV0lUSE9VVF9VTkxPQ0sgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0xJRkVfQ1lDTEVfU1RBR0UgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0xPQ0sgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0xPQ0tfRk9SX1NFUlZFUiBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTE9DS19NT0RJRlkgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01BUktfQVNfUkVBREVEIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9NQVJLX0FTX1VOUkVBREVEIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9NT0RJRlkgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01PRElGWV9DQVJEIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9NT1ZFX1RPX0FSQ0hJVkUgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX09GRl9FTkNSWVBUSU9OIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9QQVNTV09SRF9DSEFOR0UgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1BFUkZPUk0gU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFQ09WRVJfRlJPTV9MT0NBTF9DT1BZIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9SRVNUQVJUIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9SRVNUT1JFX0ZST01fQVJDSElWRSBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUkVWSVNJT04gU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1NFTkRfQllfTUFJTCBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfU0lHTiBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfU1RBUlQgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1VOTE9DSyBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVU5MT0NLX0ZST01fU0VSVkVSIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9WRVJTSU9OX1NUQVRFIFNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9WRVJTSU9OX1ZJU0lCSUxJVFkgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZJRVcgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZJRVdfU0hBRE9XX0NPUFkgU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1dPUktGTE9XX0RFU0NSSVBUSU9OX01PRElGWSBTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfV1JJVEVfSElTVE9SWSBTWVNSRVNfQ09OU1RfQUNUSVZFX1ZFUlNJT05fU1RBVEVfUElDS19WQUxVRSBTWVNSRVNfQ09OU1RfQUREX1JFRkVSRU5DRV9NT0RFX05BTUUgU1lTUkVTX0NPTlNUX0FERElUSU9OX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BRERJVElPTkFMX1BBUkFNU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQURJVElPTkFMX0pPQl9FTkRfREFURV9SRVFVSVNJVEVfTkFNRSBTWVNSRVNfQ09OU1RfQURJVElPTkFMX0pPQl9SRUFEX1JFUVVJU0lURV9OQU1FIFNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX1NUQVJUX0RBVEVfUkVRVUlTSVRFX05BTUUgU1lTUkVTX0NPTlNUX0FESVRJT05BTF9KT0JfU1RBVEVfUkVRVUlTSVRFX05BTUUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQURESU5HX1VTRVJfVE9fR1JPVVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0FERElOR19VU0VSX1RPX0dST1VQX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX0NPTVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX0NPTVBfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fR1JPVVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX0dST1VQX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX1VTRVJfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0NSRUFUSU9OX1VTRVJfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREFUQUJBU0VfVVNFUl9DUkVBVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9EQVRBQkFTRV9VU0VSX0NSRUFUSU9OX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9EQVRBQkFTRV9VU0VSX0RFTEVUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfREVMRVRJT05fQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX0NPTVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX0NPTVBfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fR1JPVVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX0dST1VQX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX1VTRVJfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX1VTRVJfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9GUk9NX0dST1VQX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9VU0VSX0ZST01fR1JPVVBfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX0ZJTFRFUkVSX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX0ZJTFRFUkVSX1JFU1RSSUNUSU9OX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19GSUxURVJFUl9SRVNUUklDVElPTl9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19QUklWSUxFR0VfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1BSSVZJTEVHRV9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19SSUdIVFNfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1JJR0hUU19BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9JU19NQUlOX1NFUlZFUl9DSEFOR0VEX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9JU19NQUlOX1NFUlZFUl9DSEFOR0VEX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX1BVQkxJQ19DSEFOR0VEX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9JU19QVUJMSUNfQ0hBTkdFRF9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfRklMVEVSRVJfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX0ZJTFRFUkVSX1JFU1RSSUNUSU9OX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX1BSSVZJTEVHRV9BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUFJJVklMRUdFX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX1JJR0hUU19BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUklHSFRTX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9DUkVBVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9TRVJWRVJfTE9HSU5fQ1JFQVRJT05fQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9ERUxFVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9TRVJWRVJfTE9HSU5fREVMRVRJT05fQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NBVEVHT1JZX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19DQVRFR09SWV9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19DT01QX1RJVExFX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19DT01QX1RJVExFX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0ZVTExfTkFNRV9BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfRlVMTF9OQU1FX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0dST1VQX0FDVElPTiBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19HUk9VUF9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19QQVJFTlRfR1JPVVBfQUNUSU9OIFNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1BBUkVOVF9HUk9VUF9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0FVVEhfVFlQRV9BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9BVVRIX1RZUEVfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9MT0dJTl9BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9MT0dJTl9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX1NUQVRVU19BQ1RJT04gU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfVVNFUl9TVEFUVVNfQUNUSU9OX0NPREUgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVNFUl9QQVNTV09SRF9DSEFOR0UgU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVNFUl9QQVNTV09SRF9DSEFOR0VfQUNUSU9OIFNZU1JFU19DT05TVF9BTExfQUNDRVBUX0NPTkRJVElPTl9SVVMgU1lTUkVTX0NPTlNUX0FMTF9VU0VSU19HUk9VUCBTWVNSRVNfQ09OU1RfQUxMX1VTRVJTX0dST1VQX05BTUUgU1lTUkVTX0NPTlNUX0FMTF9VU0VSU19TRVJWRVJfR1JPVVBfTkFNRSBTWVNSRVNfQ09OU1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9BTExPV0VEX0FDQ0VTU19UWVBFX05BTUUgU1lTUkVTX0NPTlNUX0FQUF9WSUVXRVJfVFlQRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQVBQUk9WSU5HX1NJR05BVFVSRV9OQU1FIFNZU1JFU19DT05TVF9BUFBST1ZJTkdfU0lHTkFUVVJFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BU1NJU1RBTlRfU1VCU1RJVFVFX1RZUEUgU1lTUkVTX0NPTlNUX0FTU0lTVEFOVF9TVUJTVElUVUVfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9DT01QT05FTlRfVE9LRU4gU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0RPQyBTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfRURPQyBTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfRk9MREVSIFNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9KT0IgU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX1JFRkVSRU5DRSBTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfVEFTSyBTWVNSRVNfQ09OU1RfQVVUSF9FTkNPREVEX1BBU1NXT1JEIFNZU1JFU19DT05TVF9BVVRIX0VOQ09ERURfUEFTU1dPUkRfQ09ERSBTWVNSRVNfQ09OU1RfQVVUSF9OT1ZFTEwgU1lTUkVTX0NPTlNUX0FVVEhfUEFTU1dPUkQgU1lTUkVTX0NPTlNUX0FVVEhfUEFTU1dPUkRfQ09ERSBTWVNSRVNfQ09OU1RfQVVUSF9XSU5ET1dTIFNZU1JFU19DT05TVF9BVVRIRU5USUNBVElOR19TSUdOQVRVUkVfTkFNRSBTWVNSRVNfQ09OU1RfQVVUSEVOVElDQVRJTkdfU0lHTkFUVVJFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BVVRPX0VOVU1fTUVUSE9EX0ZMQUcgU1lTUkVTX0NPTlNUX0FVVE9fTlVNRVJBVElPTl9DT0RFIFNZU1JFU19DT05TVF9BVVRPX1NUUk9OR19FTlVNX01FVEhPRF9GTEFHIFNZU1JFU19DT05TVF9BVVRPVEVYVF9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BVVRPVEVYVF9URVhUX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9BTEwgU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX0FMTF9DT0RFIFNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9TSUdOIFNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0FHRV9TSUdOX0NPREUgU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1dPUksgU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1dPUktfQ09ERSBTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNFX0FOWVdIRVJFX0NPREUgU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTRV9PTl9TSUdOSU5HX0NPREUgU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTRV9PTl9XT1JLX0NPREUgU1lTUkVTX0NPTlNUX0JFR0lOX0RBVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0JMQUNLX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBTWVNSRVNfQ09OU1RfQkxVRV9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgU1lTUkVTX0NPTlNUX0JUTl9QQVJUIFNZU1JFU19DT05TVF9DQUxDVUxBVEVEX1JPTEVfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9DQUxMX1RZUEVfVkFSSUFCTEVfQlVUVE9OX1ZBTFVFIFNZU1JFU19DT05TVF9DQUxMX1RZUEVfVkFSSUFCTEVfUFJPR1JBTV9WQUxVRSBTWVNSRVNfQ09OU1RfQ0FOQ0VMX01FU1NBR0VfRlVOQ1RJT05fUkVTVUxUIFNZU1JFU19DT05TVF9DQVJEX1BBUlQgU1lTUkVTX0NPTlNUX0NBUkRfUkVGRVJFTkNFX01PREVfTkFNRSBTWVNSRVNfQ09OU1RfQ0VSVElGSUNBVEVfVFlQRV9SRVFVSVNJVEVfRU5DUllQVF9WQUxVRSBTWVNSRVNfQ09OU1RfQ0VSVElGSUNBVEVfVFlQRV9SRVFVSVNJVEVfU0lHTl9BTkRfRU5DUllQVF9WQUxVRSBTWVNSRVNfQ09OU1RfQ0VSVElGSUNBVEVfVFlQRV9SRVFVSVNJVEVfU0lHTl9WQUxVRSBTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfREFURV9QQVJBTV9UWVBFIFNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9GTE9BVF9QQVJBTV9UWVBFIFNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9JTlRFR0VSX1BBUkFNX1RZUEUgU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX1BJQ0tfUEFSQU1fVFlQRSBTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfUkVFRlJFTkNFX1BBUkFNX1RZUEUgU1lTUkVTX0NPTlNUX0NMT1NFRF9SRUNPUkRfRkxBR19WQUxVRV9GRU1JTklORSBTWVNSRVNfQ09OU1RfQ0xPU0VEX1JFQ09SRF9GTEFHX1ZBTFVFX01BU0NVTElORSBTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9BRE1JTiBTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9ERVZFTE9QRVIgU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfRE9DUyBTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9FRE9DX0NBUkRTIFNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0VYVEVSTkFMX0VYRUNVVEFCTEUgU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfT1RIRVIgU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfUkVGRVJFTkNFIFNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX1JFUE9SVCBTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9TQ1JJUFQgU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfVVJMIFNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9BQ0NFU1MgU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0NPTVBPTkVOVCBTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfREVTQ1JJUFRJT04gU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0VYQ0xVREVfQ09NUE9ORU5UIFNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9SRUNPUkQgU1lTUkVTX0NPTlNUX0NPTU1FTlRfUkVRX0NPREUgU1lTUkVTX0NPTlNUX0NPTU1PTl9TRVRUSU5HU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfQ09NUF9DT0RFX0dSRCBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX0dST1VQX1RZUEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0FETUlOX0NPTVBPTkVOVFMgU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0RFVkVMT1BFUl9DT01QT05FTlRTIFNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9ET0NTIFNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9FRE9DX0NBUkRTIFNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9FRE9DUyBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfRVhURVJOQUxfRVhFQ1VUQUJMRSBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfT1RIRVIgU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX1JFRkVSRU5DRV9UWVBFUyBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfUkVGRVJFTkNFUyBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfUkVQT1JUUyBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfU0NSSVBUUyBTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfVVJMIFNZU1JFU19DT05TVF9DT01QT05FTlRTX1JFTU9URV9TRVJWRVJTX1ZJRVdfQ09ERSBTWVNSRVNfQ09OU1RfQ09ORElUSU9OX0JMT0NLX0RFU0NSSVBUSU9OIFNZU1JFU19DT05TVF9DT05TVF9GSVJNX1NUQVRVU19DT01NT04gU1lTUkVTX0NPTlNUX0NPTlNUX0ZJUk1fU1RBVFVTX0lORElWSURVQUwgU1lTUkVTX0NPTlNUX0NPTlNUX05FR0FUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9DT05TVF9QT1NJVElWRV9WQUxVRSBTWVNSRVNfQ09OU1RfQ09OU1RfU0VSVkVSX1NUQVRVU19ET05UX1JFUExJQ0FURSBTWVNSRVNfQ09OU1RfQ09OU1RfU0VSVkVSX1NUQVRVU19SRVBMSUNBVEUgU1lTUkVTX0NPTlNUX0NPTlRFTlRTX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9EQVRBX1RZUEVfQk9PTEVBTiBTWVNSRVNfQ09OU1RfREFUQV9UWVBFX0RBVEUgU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9GTE9BVCBTWVNSRVNfQ09OU1RfREFUQV9UWVBFX0lOVEVHRVIgU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9QSUNLIFNZU1JFU19DT05TVF9EQVRBX1RZUEVfUkVGRVJFTkNFIFNZU1JFU19DT05TVF9EQVRBX1RZUEVfU1RSSU5HIFNZU1JFU19DT05TVF9EQVRBX1RZUEVfVEVYVCBTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1ZBUklBTlQgU1lTUkVTX0NPTlNUX0RBVEVfQ0xPU0VfUkVRX0NPREUgU1lTUkVTX0NPTlNUX0RBVEVfRk9STUFUX0RBVEVfT05MWV9DSEFSIFNZU1JFU19DT05TVF9EQVRFX09QRU5fUkVRX0NPREUgU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFIFNZU1JFU19DT05TVF9EQVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9EQVRFX1JFUVVJU0lURV9OQU1FIFNZU1JFU19DT05TVF9EQVRFX1JFUVVJU0lURV9UWVBFIFNZU1JFU19DT05TVF9EQVRFX1RZUEVfQ0hBUiBTWVNSRVNfQ09OU1RfREFURVRJTUVfRk9STUFUX1ZBTFVFIFNZU1JFU19DT05TVF9ERUFfQUNDRVNTX1JJR0hUU19BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfREVTQ1JJUFRJT05fTE9DQUxJWkVfSURfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0RFU0NSSVBUSU9OX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9ERVQxX1BBUlQgU1lTUkVTX0NPTlNUX0RFVDJfUEFSVCBTWVNSRVNfQ09OU1RfREVUM19QQVJUIFNZU1JFU19DT05TVF9ERVQ0X1BBUlQgU1lTUkVTX0NPTlNUX0RFVDVfUEFSVCBTWVNSRVNfQ09OU1RfREVUNl9QQVJUIFNZU1JFU19DT05TVF9ERVRBSUxfREFUQVNFVF9LRVlfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0RFVEFJTF9QSUNLX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9ERVRBSUxfUkVRX0NPREUgU1lTUkVTX0NPTlNUX0RPX05PVF9VU0VfQUNDRVNTX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfRE9fTk9UX1VTRV9BQ0NFU1NfVFlQRV9OQU1FIFNZU1JFU19DT05TVF9ET19OT1RfVVNFX09OX1ZJRVdfQUNDRVNTX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfRE9fTk9UX1VTRV9PTl9WSUVXX0FDQ0VTU19UWVBFX05BTUUgU1lTUkVTX0NPTlNUX0RPQ1VNRU5UX1NUT1JBR0VTX0NPREUgU1lTUkVTX0NPTlNUX0RPQ1VNRU5UX1RFTVBMQVRFU19UWVBFX05BTUUgU1lTUkVTX0NPTlNUX0RPVUJMRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURJVE9SX0NMT1NFX0ZJTEVfT0JTRVJWX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfRURJVE9SX0NMT1NFX1BST0NFU1NfT0JTRVJWX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfRURJVE9SX1RZUEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VESVRPUlNfQVBQTElDQVRJT05fTkFNRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURJVE9SU19DUkVBVEVfU0VWRVJBTF9QUk9DRVNTRVNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VESVRPUlNfRVhURU5TSU9OX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9FRElUT1JTX09CU0VSVkVSX0JZX1BST0NFU1NfVFlQRSBTWVNSRVNfQ09OU1RfRURJVE9SU19SRUZFUkVOQ0VfQ09ERSBTWVNSRVNfQ09OU1RfRURJVE9SU19SRVBMQUNFX1NQRUNfQ0hBUlNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VESVRPUlNfVVNFX1BMVUdJTlNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VESVRPUlNfVklFV19ET0NVTUVOVF9PUEVORURfVE9fRURJVF9DT0RFIFNZU1JFU19DT05TVF9FRE9DX0NBUkRfVFlQRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19DQVJEX1RZUEVTX0xJTktfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfQ0VSVElGSUNBVEVfQU5EX1BBU1NXT1JEX0VOQ09ERV9DT0RFIFNZU1JFU19DT05TVF9FRE9DX0NFUlRJRklDQVRFX0VOQ09ERV9DT0RFIFNZU1JFU19DT05TVF9FRE9DX0RBVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfS0lORF9SRUZFUkVOQ0VfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19LSU5EU19CWV9URU1QTEFURV9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19NQU5BR0VfQUNDRVNTX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfTk9ORV9FTkNPREVfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19OVU1CRVJfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfUEFTU1dPUkRfRU5DT0RFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfUkVBRE9OTFlfQUNDRVNTX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfU0hFTExfTElGRV9UWVBFX1ZJRVdfVkFMVUUgU1lTUkVTX0NPTlNUX0VET0NfU0laRV9SRVNUUklDVElPTl9QUklPUklUWV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0NIRUNLX0FDQ0VTU19SSUdIVFNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9DT01QVVRFUl9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfREFUQUJBU0VfTkFNRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0VESVRfSU5fU1RPUkFHRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0xPQ0FMX1BBVEhfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9TSEFSRURfU09VUkNFX05BTUVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfVEVNUExBVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfVFlQRVNfUkVGRVJFTkNFX0NPREUgU1lTUkVTX0NPTlNUX0VET0NfVkVSU0lPTl9BQ1RJVkVfU1RBR0VfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19WRVJTSU9OX0RFU0lHTl9TVEFHRV9DT0RFIFNZU1JFU19DT05TVF9FRE9DX1ZFUlNJT05fT0JTT0xFVEVfU1RBR0VfQ09ERSBTWVNSRVNfQ09OU1RfRURPQ19XUklURV9BQ0NFU19DT0RFIFNZU1JFU19DT05TVF9FRE9DVU1FTlRfQ0FSRF9SRVFVSVNJVEVTX1JFRkVSRU5DRV9DT0RFX1NFTEVDVEVEX1JFUVVJU0lURSBTWVNSRVNfQ09OU1RfRU5DT0RFX0NFUlRJRklDQVRFX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfRU5EX0RBVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VOVU1FUkFUSU9OX1RZUEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0VYRUNVVEVfQUNDRVNTX1JJR0hUU19UWVBFX0NPREUgU1lTUkVTX0NPTlNUX0VYRUNVVElWRV9GSUxFX1NUT1JBR0VfVFlQRSBTWVNSRVNfQ09OU1RfRVhJU1RfQ09OU1QgU1lTUkVTX0NPTlNUX0VYSVNUX1ZBTFVFIFNZU1JFU19DT05TVF9FWFBPUlRfTE9DS19UWVBFX0FTSyBTWVNSRVNfQ09OU1RfRVhQT1JUX0xPQ0tfVFlQRV9XSVRIX0xPQ0sgU1lTUkVTX0NPTlNUX0VYUE9SVF9MT0NLX1RZUEVfV0lUSE9VVF9MT0NLIFNZU1JFU19DT05TVF9FWFBPUlRfVkVSU0lPTl9UWVBFX0FTSyBTWVNSRVNfQ09OU1RfRVhQT1JUX1ZFUlNJT05fVFlQRV9MQVNUIFNZU1JFU19DT05TVF9FWFBPUlRfVkVSU0lPTl9UWVBFX0xBU1RfQUNUSVZFIFNZU1JFU19DT05TVF9FWFRFTlNJT05fUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0ZJTFRFUl9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9GSUxURVJfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX0NPTU1PTl9DT0RFIFNZU1JFU19DT05TVF9GSUxURVJfVFlQRV9DT01NT05fTkFNRSBTWVNSRVNfQ09OU1RfRklMVEVSX1RZUEVfVVNFUl9DT0RFIFNZU1JFU19DT05TVF9GSUxURVJfVFlQRV9VU0VSX05BTUUgU1lTUkVTX0NPTlNUX0ZJTFRFUl9WQUxVRV9SRVFVSVNJVEVfTkFNRSBTWVNSRVNfQ09OU1RfRkxPQVRfTlVNQkVSX0ZPUk1BVF9DSEFSIFNZU1JFU19DT05TVF9GTE9BVF9SRVFVSVNJVEVfVFlQRSBTWVNSRVNfQ09OU1RfRk9MREVSX0FVVEhPUl9WQUxVRSBTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfQU5ZX09CSkVDVFMgU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX0NPTVBPTkVOVFMgU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX0VET0NTIFNZU1JFU19DT05TVF9GT0xERVJfS0lORF9KT0JTIFNZU1JFU19DT05TVF9GT0xERVJfS0lORF9UQVNLUyBTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfQ09NTU9OIFNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9DT01QT05FTlQgU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX0ZBVk9SSVRFUyBTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfSU5CT1ggU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX09VVEJPWCBTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfUVVJQ0tfTEFVTkNIIFNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9TRUFSQ0ggU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX1NIT1JUQ1VUUyBTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfVVNFUiBTWVNSRVNfQ09OU1RfRlJPTV9ESUNUSU9OQVJZX0VOVU1fTUVUSE9EX0ZMQUcgU1lTUkVTX0NPTlNUX0ZVTExfU1VCU1RJVFVURV9UWVBFIFNZU1JFU19DT05TVF9GVUxMX1NVQlNUSVRVVEVfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9GVU5DVElPTl9DQU5DRUxfUkVTVUxUIFNZU1JFU19DT05TVF9GVU5DVElPTl9DQVRFR09SWV9TWVNURU0gU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0NBVEVHT1JZX1VTRVIgU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0ZBSUxVUkVfUkVTVUxUIFNZU1JFU19DT05TVF9GVU5DVElPTl9TQVZFX1JFU1VMVCBTWVNSRVNfQ09OU1RfR0VORVJBVEVEX1JFUVVJU0lURSBTWVNSRVNfQ09OU1RfR1JFRU5fTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFNZU1JFU19DT05TVF9HUk9VUF9BQ0NPVU5UX1RZUEVfVkFMVUVfQ09ERSBTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfTk9STUFMX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQX0NBVEVHT1JZX05PUk1BTF9OQU1FIFNZU1JFU19DT05TVF9HUk9VUF9DQVRFR09SWV9TRVJWSUNFX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQX0NBVEVHT1JZX1NFUlZJQ0VfTkFNRSBTWVNSRVNfQ09OU1RfR1JPVVBfQ09NTU9OX0NBVEVHT1JZX0ZJRUxEX1ZBTFVFIFNZU1JFU19DT05TVF9HUk9VUF9GVUxMX05BTUVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQX05BTUVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQX1JJR0hUU19UX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9HUk9VUF9TRVJWRVJfQ09ERVNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQX1NFUlZFUl9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9HUk9VUF9TRVJWSUNFX0NBVEVHT1JZX0ZJRUxEX1ZBTFVFIFNZU1JFU19DT05TVF9HUk9VUF9VU0VSX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9HUk9VUFNfUkVGRVJFTkNFX0NPREUgU1lTUkVTX0NPTlNUX0dST1VQU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfSElEREVOX01PREVfTkFNRSBTWVNSRVNfQ09OU1RfSElHSF9MVkxfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0hJU1RPUllfQUNUSU9OX0NSRUFURV9DT0RFIFNZU1JFU19DT05TVF9ISVNUT1JZX0FDVElPTl9ERUxFVEVfQ09ERSBTWVNSRVNfQ09OU1RfSElTVE9SWV9BQ1RJT05fRURJVF9DT0RFIFNZU1JFU19DT05TVF9IT1VSX0NIQVIgU1lTUkVTX0NPTlNUX0lEX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9JRFNQU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfSU1BR0VfTU9ERV9DT0xPUiBTWVNSRVNfQ09OU1RfSU1BR0VfTU9ERV9HUkVZU0NBTEUgU1lTUkVTX0NPTlNUX0lNQUdFX01PREVfTU9OT0NIUk9NRSBTWVNSRVNfQ09OU1RfSU1QT1JUQU5DRV9ISUdIIFNZU1JFU19DT05TVF9JTVBPUlRBTkNFX0xPVyBTWVNSRVNfQ09OU1RfSU1QT1JUQU5DRV9OT1JNQUwgU1lTUkVTX0NPTlNUX0lOX0RFU0lHTl9WRVJTSU9OX1NUQVRFX1BJQ0tfVkFMVUUgU1lTUkVTX0NPTlNUX0lOQ09NSU5HX1dPUktfUlVMRV9UWVBFX0NPREUgU1lTUkVTX0NPTlNUX0lOVF9SRVFVSVNJVEUgU1lTUkVTX0NPTlNUX0lOVF9SRVFVSVNJVEVfVFlQRSBTWVNSRVNfQ09OU1RfSU5URUdFUl9OVU1CRVJfRk9STUFUX0NIQVIgU1lTUkVTX0NPTlNUX0lOVEVHRVJfVFlQRV9DSEFSIFNZU1JFU19DT05TVF9JU19HRU5FUkFURURfUkVRVUlTSVRFX05FR0FUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9JU19QVUJMSUNfUk9MRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfSVNfUkVNT1RFX1VTRVJfTkVHQVRJVkVfVkFMVUUgU1lTUkVTX0NPTlNUX0lTX1JFTU9URV9VU0VSX1BPU0lUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9JU19TVE9SRURfUkVRVUlTSVRFX05FR0FUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9JU19TVE9SRURfUkVRVUlTSVRFX1NUT1JFRF9WQUxVRSBTWVNSRVNfQ09OU1RfSVRBTElDX0xJRkVfQ1lDTEVfU1RBR0VfRFJBV19TVFlMRSBTWVNSRVNfQ09OU1RfSk9CX0JMT0NLX0RFU0NSSVBUSU9OIFNZU1JFU19DT05TVF9KT0JfS0lORF9DT05UUk9MX0pPQiBTWVNSRVNfQ09OU1RfSk9CX0tJTkRfSk9CIFNZU1JFU19DT05TVF9KT0JfS0lORF9OT1RJQ0UgU1lTUkVTX0NPTlNUX0pPQl9TVEFURV9BQk9SVEVEIFNZU1JFU19DT05TVF9KT0JfU1RBVEVfQ09NUExFVEUgU1lTUkVTX0NPTlNUX0pPQl9TVEFURV9XT1JLSU5HIFNZU1JFU19DT05TVF9LSU5EX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9LSU5EX1JFUVVJU0lURV9OQU1FIFNZU1JFU19DT05TVF9LSU5EU19DUkVBVEVfU0hBRE9XX0NPUElFU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfS0lORFNfREVGQVVMVF9FRE9DX0xJRkVfU1RBR0VfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfQUxMX1RFUExBVEVTX0FMTE9XRURfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfQUxMT1dfTElGRV9DWUNMRV9TVEFHRV9DSEFOR0lOR19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19BTExPV19NVUxUSVBMRV9BQ1RJVkVfVkVSU0lPTlNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0tJTkRTX0VET0NfU0hBUkVfQUNDRVNfUklHSFRTX0JZX0RFRkFVTFRfQ09ERSBTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19URU1QTEFURV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19UWVBFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9LSU5EU19TSUdORVJTX1JFUVVJU0lURVNfQ09ERSBTWVNSRVNfQ09OU1RfS09EX0lOUFVUX1RZUEUgU1lTUkVTX0NPTlNUX0xBU1RfVVBEQVRFX0RBVEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0xJRkVfQ1lDTEVfU1RBUlRfU1RBR0VfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX0xJTEFDX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9DT01QT05FTlQgU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfRE9DVU1FTlQgU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfRURPQyBTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9GT0xERVIgU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfSk9CIFNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX1JFRkVSRU5DRSBTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9UQVNLIFNZU1JFU19DT05TVF9MSU5LX1JFRl9UWVBFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9MSVNUX1JFRkVSRU5DRV9NT0RFX05BTUUgU1lTUkVTX0NPTlNUX0xPQ0FMSVpBVElPTl9ESUNUSU9OQVJZX01BSU5fVklFV19DT0RFIFNZU1JFU19DT05TVF9NQUlOX1ZJRVdfQ09ERSBTWVNSRVNfQ09OU1RfTUFOVUFMX0VOVU1fTUVUSE9EX0ZMQUcgU1lTUkVTX0NPTlNUX01BU1RFUl9DT01QX1RZUEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX01BU1RFUl9UQUJMRV9SRUNfSURfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX01BWElNSVpFRF9NT0RFX05BTUUgU1lTUkVTX0NPTlNUX01FX1ZBTFVFIFNZU1JFU19DT05TVF9NRVNTQUdFX0FUVEVOVElPTl9DQVBUSU9OIFNZU1JFU19DT05TVF9NRVNTQUdFX0NPTkZJUk1BVElPTl9DQVBUSU9OIFNZU1JFU19DT05TVF9NRVNTQUdFX0VSUk9SX0NBUFRJT04gU1lTUkVTX0NPTlNUX01FU1NBR0VfSU5GT1JNQVRJT05fQ0FQVElPTiBTWVNSRVNfQ09OU1RfTUlOSU1JWkVEX01PREVfTkFNRSBTWVNSRVNfQ09OU1RfTUlOVVRFX0NIQVIgU1lTUkVTX0NPTlNUX01PRFVMRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfTU9OSVRPUklOR19CTE9DS19ERVNDUklQVElPTiBTWVNSRVNfQ09OU1RfTU9OVEhfRk9STUFUX1ZBTFVFIFNZU1JFU19DT05TVF9OQU1FX0xPQ0FMSVpFX0lEX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9OQU1FX1NJTkdVTEFSX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9OQU1FQU5fSU5QVVRfVFlQRSBTWVNSRVNfQ09OU1RfTkVHQVRJVkVfUElDS19WQUxVRSBTWVNSRVNfQ09OU1RfTkVHQVRJVkVfVkFMVUUgU1lTUkVTX0NPTlNUX05PIFNZU1JFU19DT05TVF9OT19QSUNLX1ZBTFVFIFNZU1JFU19DT05TVF9OT19TSUdOQVRVUkVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX05PX1ZBTFVFIFNZU1JFU19DT05TVF9OT05FX0FDQ0VTU19SSUdIVFNfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9OT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUUgU1lTUkVTX0NPTlNUX05PTk9QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9NQVNDVUxJTkUgU1lTUkVTX0NPTlNUX05PUk1BTF9BQ0NFU1NfUklHSFRTX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfTk9STUFMX0xJRkVfQ1lDTEVfU1RBR0VfRFJBV19TVFlMRSBTWVNSRVNfQ09OU1RfTk9STUFMX01PREVfTkFNRSBTWVNSRVNfQ09OU1RfTk9UX0FMTE9XRURfQUNDRVNTX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfTk9UX0FMTE9XRURfQUNDRVNTX1RZUEVfTkFNRSBTWVNSRVNfQ09OU1RfTk9URV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfTk9USUNFX0JMT0NLX0RFU0NSSVBUSU9OIFNZU1JFU19DT05TVF9OVU1fUkVRVUlTSVRFIFNZU1JFU19DT05TVF9OVU1fU1RSX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9OVU1FUkFUSU9OX0FVVE9fTk9UX1NUUk9ORyBTWVNSRVNfQ09OU1RfTlVNRVJBVElPTl9BVVRPX1NUUk9ORyBTWVNSRVNfQ09OU1RfTlVNRVJBVElPTl9GUk9NX0RJQ1RPTkFSWSBTWVNSRVNfQ09OU1RfTlVNRVJBVElPTl9NQU5VQUwgU1lTUkVTX0NPTlNUX05VTUVSSUNfVFlQRV9DSEFSIFNZU1JFU19DT05TVF9OVU1SRVFfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX09CU09MRVRFX1ZFUlNJT05fU1RBVEVfUElDS19WQUxVRSBTWVNSRVNfQ09OU1RfT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFIFNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfQ09ERSBTWVNSRVNfQ09OU1RfT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX0ZFTUlOSU5FIFNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfTUFTQ1VMSU5FIFNZU1JFU19DT05TVF9PUFRJT05BTF9GT1JNX0NPTVBfUkVRQ09ERV9QUkVGSVggU1lTUkVTX0NPTlNUX09SQU5HRV9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgU1lTUkVTX0NPTlNUX09SSUdJTkFMUkVGX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9PVVJGSVJNX1JFRl9DT0RFIFNZU1JFU19DT05TVF9PVVJGSVJNX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9PVVJGSVJNX1ZBUiBTWVNSRVNfQ09OU1RfT1VUR09JTkdfV09SS19SVUxFX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfUElDS19ORUdBVElWRV9SRVNVTFQgU1lTUkVTX0NPTlNUX1BJQ0tfUE9TSVRJVkVfUkVTVUxUIFNZU1JFU19DT05TVF9QSUNLX1JFUVVJU0lURSBTWVNSRVNfQ09OU1RfUElDS19SRVFVSVNJVEVfVFlQRSBTWVNSRVNfQ09OU1RfUElDS19UWVBFX0NIQVIgU1lTUkVTX0NPTlNUX1BMQU5fU1RBVFVTX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9QTEFURk9STV9WRVJTSU9OX0NPTU1FTlQgU1lTUkVTX0NPTlNUX1BMVUdJTlNfU0VUVElOR1NfREVTQ1JJUFRJT05fUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1BPU0lUSVZFX1BJQ0tfVkFMVUUgU1lTUkVTX0NPTlNUX1BPV0VSX1RPX0NSRUFURV9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfUE9XRVJfVE9fU0lHTl9BQ1RJT05fQ09ERSBTWVNSRVNfQ09OU1RfUFJJT1JJVFlfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1FVQUxJRklFRF9UQVNLX1RZUEUgU1lTUkVTX0NPTlNUX1FVQUxJRklFRF9UQVNLX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfUkVDU1RBVF9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfUkVEX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBTWVNSRVNfQ09OU1RfUkVGX0lEX1RfUkVGX1RZUEVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1JFRl9SRVFVSVNJVEUgU1lTUkVTX0NPTlNUX1JFRl9SRVFVSVNJVEVfVFlQRSBTWVNSRVNfQ09OU1RfUkVGX1JFUVVJU0lURVNfUkVGRVJFTkNFX0NPREVfU0VMRUNURURfUkVRVUlTSVRFIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VfUkVDT1JEX0hJU1RPUllfQ1JFQVRFX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VfUkVDT1JEX0hJU1RPUllfREVMRVRFX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VfUkVDT1JEX0hJU1RPUllfTU9ESUZZX0FDVElPTl9DT0RFIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VfVFlQRV9DSEFSIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VfVFlQRV9SRVFVSVNJVEVfTkFNRSBTWVNSRVNfQ09OU1RfUkVGRVJFTkNFU19BRERfUEFSQU1TX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRUZFUkVOQ0VTX0RJU1BMQVlfUkVRVUlTSVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRU1PVEVfU0VSVkVSX1NUQVRVU19XT1JLSU5HIFNZU1JFU19DT05TVF9SRU1PVEVfU0VSVkVSX1RZUEVfTUFJTiBTWVNSRVNfQ09OU1RfUkVNT1RFX1NFUlZFUl9UWVBFX1NFQ09OREFSWSBTWVNSRVNfQ09OU1RfUkVNT1RFX1VTRVJfRkxBR19WQUxVRV9DT0RFIFNZU1JFU19DT05TVF9SRVBPUlRfQVBQX0VESVRPUl9JTlRFUk5BTCBTWVNSRVNfQ09OU1RfUkVQT1JUX0JBU0VfUkVQT1JUX0lEX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRVBPUlRfQkFTRV9SRVBPUlRfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1JFUE9SVF9TQ1JJUFRfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1JFUE9SVF9URU1QTEFURV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfUkVQT1JUX1ZJRVdFUl9DT0RFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRVFfQUxMT1dfQ09NUE9ORU5UX0RFRkFVTFRfVkFMVUUgU1lTUkVTX0NPTlNUX1JFUV9BTExPV19SRUNPUkRfREVGQVVMVF9WQUxVRSBTWVNSRVNfQ09OU1RfUkVRX0FMTE9XX1NFUlZFUl9DT01QT05FTlRfREVGQVVMVF9WQUxVRSBTWVNSRVNfQ09OU1RfUkVRX01PREVfQVZBSUxBQkxFX0NPREUgU1lTUkVTX0NPTlNUX1JFUV9NT0RFX0VESVRfQ09ERSBTWVNSRVNfQ09OU1RfUkVRX01PREVfSElEREVOX0NPREUgU1lTUkVTX0NPTlNUX1JFUV9NT0RFX05PVF9BVkFJTEFCTEVfQ09ERSBTWVNSRVNfQ09OU1RfUkVRX01PREVfVklFV19DT0RFIFNZU1JFU19DT05TVF9SRVFfTlVNQkVSX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRVFfU0VDVElPTl9WQUxVRSBTWVNSRVNfQ09OU1RfUkVRX1RZUEVfVkFMVUUgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfQllfVU5JVCBTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9EQVRFX0ZVTEwgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfREFURV9USU1FIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX0xFRlQgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfUklHSFQgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfV0lUSE9VVF9VTklUIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfTlVNQkVSX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9BQ1RJT05TIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9CVVRUT04gU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0JVVFRPTlMgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0NBUkQgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTEwIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTExIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTEyIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTEzIFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE0IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE1IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE2IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE3IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE4IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTE5IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTIgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMjAgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMjEgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMjIgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMjMgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMjQgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMyBTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU0IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTUgU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFNiBTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU3IFNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTggU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFOSBTWVNSRVNfQ09OU1RfUkVRVUlTSVRFU19QU0VVRE9SRUZFUkVOQ0VfUkVRVUlTSVRFX05VTUJFUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfUklHSFRfQUxJR05NRU5UX0NPREUgU1lTUkVTX0NPTlNUX1JPTEVTX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9ST1VURV9TVEVQX0FGVEVSX1JVUyBTWVNSRVNfQ09OU1RfUk9VVEVfU1RFUF9BTkRfQ09ORElUSU9OX1JVUyBTWVNSRVNfQ09OU1RfUk9VVEVfU1RFUF9PUl9DT05ESVRJT05fUlVTIFNZU1JFU19DT05TVF9ST1VURV9UWVBFX0NPTVBMRVggU1lTUkVTX0NPTlNUX1JPVVRFX1RZUEVfUEFSQUxMRUwgU1lTUkVTX0NPTlNUX1JPVVRFX1RZUEVfU0VSSUFMIFNZU1JFU19DT05TVF9TQkRBVEFTRVRERVNDX05FR0FUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9TQkRBVEFTRVRERVNDX1BPU0lUSVZFX1ZBTFVFIFNZU1JFU19DT05TVF9TQlZJRVdTREVTQ19QT1NJVElWRV9WQUxVRSBTWVNSRVNfQ09OU1RfU0NSSVBUX0JMT0NLX0RFU0NSSVBUSU9OIFNZU1JFU19DT05TVF9TRUFSQ0hfQllfVEVYVF9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfU0VBUkNIRVNfQ09NUE9ORU5UX0NPTlRFTlQgU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0NSSVRFUklBX0FDVElPTl9OQU1FIFNZU1JFU19DT05TVF9TRUFSQ0hFU19FRE9DX0NPTlRFTlQgU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0ZPTERFUl9DT05URU5UIFNZU1JFU19DT05TVF9TRUFSQ0hFU19KT0JfQ09OVEVOVCBTWVNSRVNfQ09OU1RfU0VBUkNIRVNfUkVGRVJFTkNFX0NPREUgU1lTUkVTX0NPTlNUX1NFQVJDSEVTX1RBU0tfQ09OVEVOVCBTWVNSRVNfQ09OU1RfU0VDT05EX0NIQVIgU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0FDVElPTlNfVkFMVUUgU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0NBUkRfVkFMVUUgU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF8xX1ZBTFVFIFNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfMl9WQUxVRSBTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzNfVkFMVUUgU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF80X1ZBTFVFIFNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfNV9WQUxVRSBTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzZfVkFMVUUgU1lTUkVTX0NPTlNUX1NFTEVDVF9SRUZFUkVOQ0VfTU9ERV9OQU1FIFNZU1JFU19DT05TVF9TRUxFQ1RfVFlQRV9TRUxFQ1RBQkxFIFNZU1JFU19DT05TVF9TRUxFQ1RfVFlQRV9TRUxFQ1RBQkxFX09OTFlfQ0hJTEQgU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1NFTEVDVEFCTEVfV0lUSF9DSElMRCBTWVNSRVNfQ09OU1RfU0VMRUNUX1RZUEVfVU5TTEVDVEFCTEUgU1lTUkVTX0NPTlNUX1NFUlZFUl9UWVBFX01BSU4gU1lTUkVTX0NPTlNUX1NFUlZJQ0VfVVNFUl9DQVRFR09SWV9GSUVMRF9WQUxVRSBTWVNSRVNfQ09OU1RfU0VUVElOR1NfVVNFUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfU0lHTkFUVVJFX0FORF9FTkNPREVfQ0VSVElGSUNBVEVfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9TSUdOQVRVUkVfQ0VSVElGSUNBVEVfVFlQRV9DT0RFIFNZU1JFU19DT05TVF9TSU5HVUxBUl9USVRMRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfU1FMX1NFUlZFUl9BVVRIRU5USUZJQ0FUSU9OX0ZMQUdfVkFMVUVfQ09ERSBTWVNSRVNfQ09OU1RfU1FMX1NFUlZFUl9FTkNPREVfQVVUSEVOVElGSUNBVElPTl9GTEFHX1ZBTFVFX0NPREUgU1lTUkVTX0NPTlNUX1NUQU5EQVJUX1JPVVRFX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9TVEFOREFSVF9ST1VURV9SRUZFUkVOQ0VfQ09NTUVOVF9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfU1RBTkRBUlRfUk9VVEVTX0dST1VQU19SRUZFUkVOQ0VfQ09ERSBTWVNSRVNfQ09OU1RfU1RBVEVfUkVRX05BTUUgU1lTUkVTX0NPTlNUX1NUQVRFX1JFUVVJU0lURV9BQ1RJVkVfVkFMVUUgU1lTUkVTX0NPTlNUX1NUQVRFX1JFUVVJU0lURV9DTE9TRURfVkFMVUUgU1lTUkVTX0NPTlNUX1NUQVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9TVEFUSUNfUk9MRV9UWVBFX0NPREUgU1lTUkVTX0NPTlNUX1NUQVRVU19QTEFOX0RFRkFVTFRfVkFMVUUgU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9BVVRPQ0xFQU5JTkcgU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9CTFVFX1NRVUFSRSBTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0NPTVBMRVRFIFNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfR1JFRU5fU1FVQVJFIFNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfT1JBTkdFX1NRVUFSRSBTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX1BVUlBMRV9TUVVBUkUgU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9SRURfU1FVQVJFIFNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfU1VTUEVORCBTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX1lFTExPV19TUVVBUkUgU1lTUkVTX0NPTlNUX1NURFJPVVRFX1NIT1dfVE9fVVNFUlNfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1NUT1JBR0VfVFlQRV9GSUxFIFNZU1JFU19DT05TVF9TVE9SQUdFX1RZUEVfU1FMX1NFUlZFUiBTWVNSRVNfQ09OU1RfU1RSX1JFUVVJU0lURSBTWVNSRVNfQ09OU1RfU1RSSUtFT1VUX0xJRkVfQ1lDTEVfU1RBR0VfRFJBV19TVFlMRSBTWVNSRVNfQ09OU1RfU1RSSU5HX0ZPUk1BVF9MRUZUX0FMSUdOX0NIQVIgU1lTUkVTX0NPTlNUX1NUUklOR19GT1JNQVRfUklHSFRfQUxJR05fQ0hBUiBTWVNSRVNfQ09OU1RfU1RSSU5HX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9TVFJJTkdfUkVRVUlTSVRFX1RZUEUgU1lTUkVTX0NPTlNUX1NUUklOR19UWVBFX0NIQVIgU1lTUkVTX0NPTlNUX1NVQlNUSVRVVEVTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9TVUJUQVNLX0JMT0NLX0RFU0NSSVBUSU9OIFNZU1JFU19DT05TVF9TWVNURU1fU0VUVElOR19DVVJSRU5UX1VTRVJfUEFSQU1fVkFMVUUgU1lTUkVTX0NPTlNUX1NZU1RFTV9TRVRUSU5HX0VNUFRZX1ZBTFVFX1BBUkFNX1ZBTFVFIFNZU1JFU19DT05TVF9TWVNURU1fVkVSU0lPTl9DT01NRU5UIFNZU1JFU19DT05TVF9UQVNLX0FDQ0VTU19UWVBFX0FMTCBTWVNSRVNfQ09OU1RfVEFTS19BQ0NFU1NfVFlQRV9BTExfTUVNQkVSUyBTWVNSRVNfQ09OU1RfVEFTS19BQ0NFU1NfVFlQRV9NQU5VQUwgU1lTUkVTX0NPTlNUX1RBU0tfRU5DT0RFX1RZUEVfQ0VSVElGSUNBVElPTiBTWVNSRVNfQ09OU1RfVEFTS19FTkNPREVfVFlQRV9DRVJUSUZJQ0FUSU9OX0FORF9QQVNTV09SRCBTWVNSRVNfQ09OU1RfVEFTS19FTkNPREVfVFlQRV9OT05FIFNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX1BBU1NXT1JEIFNZU1JFU19DT05TVF9UQVNLX1JPVVRFX0FMTF9DT05ESVRJT04gU1lTUkVTX0NPTlNUX1RBU0tfUk9VVEVfQU5EX0NPTkRJVElPTiBTWVNSRVNfQ09OU1RfVEFTS19ST1VURV9PUl9DT05ESVRJT04gU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfQUJPUlRFRCBTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9DT01QTEVURSBTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9DT05USU5VRUQgU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfQ09OVFJPTCBTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9JTklUIFNZU1JFU19DT05TVF9UQVNLX1NUQVRFX1dPUktJTkcgU1lTUkVTX0NPTlNUX1RBU0tfVElUTEUgU1lTUkVTX0NPTlNUX1RBU0tfVFlQRVNfR1JPVVBTX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9UQVNLX1RZUEVTX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9URU1QTEFURVNfUkVGRVJFTkNFX0NPREUgU1lTUkVTX0NPTlNUX1RFU1RfREFURV9SRVFVSVNJVEVfTkFNRSBTWVNSRVNfQ09OU1RfVEVTVF9ERVZfREFUQUJBU0VfTkFNRSBTWVNSRVNfQ09OU1RfVEVTVF9ERVZfU1lTVEVNX0NPREUgU1lTUkVTX0NPTlNUX1RFU1RfRURNU19EQVRBQkFTRV9OQU1FIFNZU1JFU19DT05TVF9URVNUX0VETVNfTUFJTl9DT0RFIFNZU1JFU19DT05TVF9URVNUX0VETVNfTUFJTl9EQl9OQU1FIFNZU1JFU19DT05TVF9URVNUX0VETVNfU0VDT05EX0NPREUgU1lTUkVTX0NPTlNUX1RFU1RfRURNU19TRUNPTkRfREJfTkFNRSBTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX1NZU1RFTV9DT0RFIFNZU1JFU19DT05TVF9URVNUX05VTUVSSUNfUkVRVUlTSVRFX05BTUUgU1lTUkVTX0NPTlNUX1RFWFRfUkVRVUlTSVRFIFNZU1JFU19DT05TVF9URVhUX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9URVhUX1JFUVVJU0lURV9UWVBFIFNZU1JFU19DT05TVF9URVhUX1RZUEVfQ0hBUiBTWVNSRVNfQ09OU1RfVFlQRV9DT0RFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9UWVBFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VTkRFRklORURfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFNZU1JFU19DT05TVF9VTklUU19TRUNUSU9OX0lEX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VTklUU19TRUNUSU9OX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VTk9QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9DT0RFIFNZU1JFU19DT05TVF9VTlNUT1JFRF9EQVRBX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VTlNUT1JFRF9EQVRBX1JFUVVJU0lURV9OQU1FIFNZU1JFU19DT05TVF9VU0VfQUNDRVNTX1RZUEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFX0FDQ0VTU19UWVBFX05BTUUgU1lTUkVTX0NPTlNUX1VTRVJfQUNDT1VOVF9UWVBFX1ZBTFVFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfQURESVRJT05BTF9JTkZPUk1BVElPTl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9BTkRfR1JPVVBfSURfRlJPTV9QU0VVRE9SRUZFUkVOQ0VfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfQ0FURUdPUllfTk9STUFMIFNZU1JFU19DT05TVF9VU0VSX0NFUlRJRklDQVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX0NFUlRJRklDQVRFX1NUQVRFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX0NFUlRJRklDQVRFX1NVQkpFQ1RfTkFNRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9DRVJUSUZJQ0FURV9USFVNQlBSSU5UX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX0NPTU1PTl9DQVRFR09SWSBTWVNSRVNfQ09OU1RfVVNFUl9DT01NT05fQ0FURUdPUllfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9GVUxMX05BTUVfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfR1JPVVBfVFlQRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9MT0dJTl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9SRU1PVEVfQ09OVFJPTExFUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9SRU1PVEVfU1lTVEVNX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX1JJR0hUU19UX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX1NFUlZFUl9OQU1FX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX1NFUlZJQ0VfQ0FURUdPUlkgU1lTUkVTX0NPTlNUX1VTRVJfU0VSVklDRV9DQVRFR09SWV9DT0RFIFNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19BRE1JTklTVFJBVE9SX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0FETUlOSVNUUkFUT1JfTkFNRSBTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfREVWRUxPUEVSX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RFVkVMT1BFUl9OQU1FIFNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19ESVNBQkxFRF9DT0RFIFNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19ESVNBQkxFRF9OQU1FIFNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19TWVNURU1fREVWRUxPUEVSX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1VTRVJfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfVVNFUl9OQU1FIFNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19VU0VSX05BTUVfREVQUkVDQVRFRCBTWVNSRVNfQ09OU1RfVVNFUl9UWVBFX0ZJRUxEX1ZBTFVFX1VTRVIgU1lTUkVTX0NPTlNUX1VTRVJfVFlQRV9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUlNfQ09OVFJPTExFUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUlNfSVNfTUFJTl9TRVJWRVJfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJTX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9VU0VSU19SRUdJU1RSQVRJT05fQ0VSVElGSUNBVEVTX0FDVElPTl9OQU1FIFNZU1JFU19DT05TVF9VU0VSU19SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUlNfU1lTVEVNX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9VU0VSU19VU0VSX0FDQ0VTU19SSUdIVFNfVFlQUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUlNfVVNFUl9BVVRIRU5USUNBVElPTl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfVVNFUlNfVVNFUl9DT01QT05FTlRfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJTX1VTRVJfR1JPVVBfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1VTRVJTX1ZJRVdfQ0VSVElGSUNBVEVTX0FDVElPTl9OQU1FIFNZU1JFU19DT05TVF9WSUVXX0RFRkFVTFRfQ09ERSBTWVNSRVNfQ09OU1RfVklFV19ERUZBVUxUX05BTUUgU1lTUkVTX0NPTlNUX1ZJRVdFUl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfV0FJVElOR19CTE9DS19ERVNDUklQVElPTiBTWVNSRVNfQ09OU1RfV0laQVJEX0ZPUk1fTEFCRUxfVEVTVF9TVFJJTkcgIFNZU1JFU19DT05TVF9XSVpBUkRfUVVFUllfUEFSQU1fSEVJR0hUX0VUQUxPTl9TVFJJTkcgU1lTUkVTX0NPTlNUX1dJWkFSRF9SRUZFUkVOQ0VfQ09NTUVOVF9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfV09SS19SVUxFU19ERVNDUklQVElPTl9SRVFVSVNJVEVfQ09ERSBTWVNSRVNfQ09OU1RfV09SS19USU1FX0NBTEVOREFSX1JFRkVSRU5DRV9DT0RFIFNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX0hBUkRfUk9VVEVfVFlQRV9WQUxVRSBTWVNSRVNfQ09OU1RfV09SS19XT1JLRkxPV19IQVJEX1JPVVRFX1RZUEVfVkFMVUVfQ09ERSBTWVNSRVNfQ09OU1RfV09SS19XT1JLRkxPV19IQVJEX1JPVVRFX1RZUEVfVkFMVUVfQ09ERV9SVVMgU1lTUkVTX0NPTlNUX1dPUktfV09SS0ZMT1dfU09GVF9ST1VURV9UWVBFX1ZBTFVFX0NPREVfUlVTIFNZU1JFU19DT05TVF9XT1JLRkxPV19ST1VURV9UWVBSX0hBUkQgU1lTUkVTX0NPTlNUX1dPUktGTE9XX1JPVVRFX1RZUFJfU09GVCBTWVNSRVNfQ09OU1RfWE1MX0VOQ09ESU5HIFNZU1JFU19DT05TVF9YUkVDX1NUQVRfUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1hSRUNJRF9GSUVMRF9OQU1FIFNZU1JFU19DT05TVF9ZRVMgU1lTUkVTX0NPTlNUX1lFU19OT18yX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9ZRVNfTk9fUkVRVUlTSVRFX0NPREUgU1lTUkVTX0NPTlNUX1lFU19OT19UX1JFRl9UWVBFX1JFUVVJU0lURV9DT0RFIFNZU1JFU19DT05TVF9ZRVNfUElDS19WQUxVRSBTWVNSRVNfQ09OU1RfWUVTX1ZBTFVFIENSIEZBTFNFIG5pbCBOT19WQUxVRSBOVUxMIFRBQiBUUlVFIFlFU19WQUxVRSBBRE1JTklTVFJBVE9SU19HUk9VUF9OQU1FIENVU1RPTUlaRVJTX0dST1VQX05BTUUgREVWRUxPUEVSU19HUk9VUF9OQU1FIFNFUlZJQ0VfVVNFUlNfR1JPVVBfTkFNRSBERUNJU0lPTl9CTE9DS19GSVJTVF9PUEVSQU5EX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX05BTUVfUFJPUEVSVFkgREVDSVNJT05fQkxPQ0tfT1BFUkFUSU9OX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX1JFU1VMVF9UWVBFX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX1NFQ09ORF9PUEVSQU5EX1BST1BFUlRZIEFOWV9GSUxFX0VYVEVOVElPTiBDT01QUkVTU0VEX0RPQ1VNRU5UX0VYVEVOU0lPTiBFWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT04gU0hPUlRfQ09NUFJFU1NFRF9ET0NVTUVOVF9FWFRFTlNJT04gU0hPUlRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OIEpPQl9CTE9DS19BQk9SVF9ERUFETElORV9QUk9QRVJUWSBKT0JfQkxPQ0tfQUZURVJfRklOSVNIX0VWRU5UIEpPQl9CTE9DS19BRlRFUl9RVUVSWV9QQVJBTUVURVJTX0VWRU5UIEpPQl9CTE9DS19BVFRBQ0hNRU5UX1BST1BFUlRZIEpPQl9CTE9DS19BVFRBQ0hNRU5UU19SSUdIVFNfR1JPVVBfUFJPUEVSVFkgSk9CX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19UWVBFX1BST1BFUlRZIEpPQl9CTE9DS19CRUZPUkVfUVVFUllfUEFSQU1FVEVSU19FVkVOVCBKT0JfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIEpPQl9CTE9DS19DUkVBVEVEX0pPQlNfUFJPUEVSVFkgSk9CX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIEpPQl9CTE9DS19FWEVDVVRJT05fUkVTVUxUU19QUk9QRVJUWSBKT0JfQkxPQ0tfSVNfUEFSQUxMRUxfUFJPUEVSVFkgSk9CX0JMT0NLX0lTX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIEpPQl9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBKT0JfQkxPQ0tfSk9CX1RFWFRfUFJPUEVSVFkgSk9CX0JMT0NLX05BTUVfUFJPUEVSVFkgSk9CX0JMT0NLX05FRURfU0lHTl9PTl9QRVJGT1JNX1BST1BFUlRZIEpPQl9CTE9DS19QRVJGT1JNRVJfUFJPUEVSVFkgSk9CX0JMT0NLX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgSk9CX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgSk9CX0JMT0NLX1NVQkpFQ1RfUFJPUEVSVFkgRU5HTElTSF9MQU5HVUFHRV9DT0RFIFJVU1NJQU5fTEFOR1VBR0VfQ09ERSBzbUhpZGRlbiBzbU1heGltaXplZCBzbU1pbmltaXplZCBzbU5vcm1hbCB3bU5vIHdtWWVzIENPTVBPTkVOVF9UT0tFTl9MSU5LX0tJTkQgRE9DVU1FTlRfTElOS19LSU5EIEVET0NVTUVOVF9MSU5LX0tJTkQgRk9MREVSX0xJTktfS0lORCBKT0JfTElOS19LSU5EIFJFRkVSRU5DRV9MSU5LX0tJTkQgVEFTS19MSU5LX0tJTkQgQ09NUE9ORU5UX1RPS0VOX0xPQ0tfVFlQRSBFRE9DVU1FTlRfVkVSU0lPTl9MT0NLX1RZUEUgTU9OSVRPUl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgTU9OSVRPUl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgTU9OSVRPUl9CTE9DS19ERUFETElORV9QUk9QRVJUWSBNT05JVE9SX0JMT0NLX0lOVEVSVkFMX1BST1BFUlRZIE1PTklUT1JfQkxPQ0tfSU5URVJWQUxfVFlQRV9QUk9QRVJUWSBNT05JVE9SX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIE1PTklUT1JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBNT05JVE9SX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgTU9OSVRPUl9CTE9DS19TRUFSQ0hfU0NSSVBUX1BST1BFUlRZIE5PVElDRV9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgTk9USUNFX0JMT0NLX0FUVEFDSE1FTlRfUFJPUEVSVFkgTk9USUNFX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgTk9USUNFX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBOT1RJQ0VfQkxPQ0tfQ1JFQVRFRF9OT1RJQ0VTX1BST1BFUlRZIE5PVElDRV9CTE9DS19ERUFETElORV9QUk9QRVJUWSBOT1RJQ0VfQkxPQ0tfSVNfUkVMQVRJVkVfREVBRExJTkVfUFJPUEVSVFkgTk9USUNFX0JMT0NLX05BTUVfUFJPUEVSVFkgTk9USUNFX0JMT0NLX05PVElDRV9URVhUX1BST1BFUlRZIE5PVElDRV9CTE9DS19QRVJGT1JNRVJfUFJPUEVSVFkgTk9USUNFX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgTk9USUNFX0JMT0NLX1NVQkpFQ1RfUFJPUEVSVFkgZHNlQWZ0ZXJDYW5jZWwgZHNlQWZ0ZXJDbG9zZSBkc2VBZnRlckRlbGV0ZSBkc2VBZnRlckRlbGV0ZU91dE9mVHJhbnNhY3Rpb24gZHNlQWZ0ZXJJbnNlcnQgZHNlQWZ0ZXJPcGVuIGRzZUFmdGVyU2Nyb2xsIGRzZUFmdGVyVXBkYXRlIGRzZUFmdGVyVXBkYXRlT3V0T2ZUcmFuc2FjdGlvbiBkc2VCZWZvcmVDYW5jZWwgZHNlQmVmb3JlQ2xvc2UgZHNlQmVmb3JlRGVsZXRlIGRzZUJlZm9yZURldGFpbFVwZGF0ZSBkc2VCZWZvcmVJbnNlcnQgZHNlQmVmb3JlT3BlbiBkc2VCZWZvcmVVcGRhdGUgZHNlT25BbnlSZXF1aXNpdGVDaGFuZ2UgZHNlT25DbG9zZVJlY29yZCBkc2VPbkRlbGV0ZUVycm9yIGRzZU9uT3BlblJlY29yZCBkc2VPblByZXBhcmVVcGRhdGUgZHNlT25VcGRhdGVFcnJvciBkc2VPblVwZGF0ZVJhdGlmaWVkUmVjb3JkIGRzZU9uVmFsaWREZWxldGUgZHNlT25WYWxpZFVwZGF0ZSByZU9uQ2hhbmdlIHJlT25DaGFuZ2VWYWx1ZXMgU0VMRUNUSU9OX0JFR0lOX1JPVVRFX0VWRU5UIFNFTEVDVElPTl9FTkRfUk9VVEVfRVZFTlQgQ1VSUkVOVF9QRVJJT0RfSVNfUkVRVUlSRUQgUFJFVklPVVNfQ0FSRF9UWVBFX05BTUUgU0hPV19SRUNPUkRfUFJPUEVSVElFU19GT1JNIEFDQ0VTU19SSUdIVFNfU0VUVElOR19ESUFMT0dfQ09ERSBBRE1JTklTVFJBVE9SX1VTRVJfQ09ERSBBTkFMWVRJQ19SRVBPUlRfVFlQRSBhc3J0SGlkZUxvY2FsIGFzcnRIaWRlUmVtb3RlIENBTENVTEFURURfUk9MRV9UWVBFX0NPREUgQ09NUE9ORU5UU19SRUZFUkVOQ0VfREVWRUxPUEVSX1ZJRVdfQ09ERSBEQ1RTX1RFU1RfUFJPVE9DT0xTX0ZPTERFUl9QQVRIIEVfRURPQ19WRVJTSU9OX0FMUkVBRFlfQVBQUk9WSU5HTFlfU0lHTkVEIEVfRURPQ19WRVJTSU9OX0FMUkVBRFlfQVBQUk9WSU5HTFlfU0lHTkVEX0JZX1VTRVIgRV9FRE9DX1ZFUlNJT05fQUxSRURZX1NJR05FRCBFX0VET0NfVkVSU0lPTl9BTFJFRFlfU0lHTkVEX0JZX1VTRVIgRURPQ19UWVBFU19DT0RFX1JFUVVJU0lURV9GSUVMRF9OQU1FIEVET0NVTUVOVFNfQUxJQVNfTkFNRSBGSUxFU19GT0xERVJfUEFUSCBGSUxURVJfT1BFUkFORFNfREVMSU1JVEVSIEZJTFRFUl9PUEVSQVRJT05TX0RFTElNSVRFUiBGT1JNQ0FSRF9OQU1FIEZPUk1MSVNUX05BTUUgR0VUX0VYVEVOREVEX0RPQ1VNRU5UX0VYVEVOU0lPTl9DUkVBVElPTl9NT0RFIEdFVF9FWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT05fSU1QT1JUX01PREUgSU5URUdSQVRFRF9SRVBPUlRfVFlQRSBJU19CVUlMREVSX0FQUExJQ0FUSU9OX1JPTEUgSVNfQlVJTERFUl9BUFBMSUNBVElPTl9ST0xFMiBJU19CVUlMREVSX1VTRVJTIElTQlNZU0RFViBMT0dfRk9MREVSX1BBVEggbWJDYW5jZWwgbWJObyBtYk5vVG9BbGwgbWJPSyBtYlllcyBtYlllc1RvQWxsIE1FTU9SWV9EQVRBU0VUX0RFU1JJUFRJT05TX0ZJTEVOQU1FIG1yTm8gbXJOb1RvQWxsIG1yWWVzIG1yWWVzVG9BbGwgTVVMVElQTEVfU0VMRUNUX0RJQUxPR19DT0RFIE5PTk9QRVJBVElOR19SRUNPUkRfRkxBR19GRU1JTklORSBOT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfTUFTQ1VMSU5FIE9QRVJBVElOR19SRUNPUkRfRkxBR19GRU1JTklORSBPUEVSQVRJTkdfUkVDT1JEX0ZMQUdfTUFTQ1VMSU5FIFBST0ZJTElOR19TRVRUSU5HU19DT01NT05fU0VUVElOR1NfQ09ERV9WQUxVRSBQUk9HUkFNX0lOSVRJQVRFRF9MT09LVVBfQUNUSU9OIHJhdERlbGV0ZSByYXRFZGl0IHJhdEluc2VydCBSRVBPUlRfVFlQRSBSRVFVSVJFRF9QSUNLX1ZBTFVFU19WQVJJQUJMRSBybUNhcmQgcm1MaXN0IFNCUlRFX1BST0dJRF9ERVYgU0JSVEVfUFJPR0lEX1JFTEVBU0UgU1RBVElDX1JPTEVfVFlQRV9DT0RFIFNVUFBSRVNTX0VNUFRZX1RFTVBMQVRFX0NSRUFUSU9OIFNZU1RFTV9VU0VSX0NPREUgVVBEQVRFX0RJQUxPR19EQVRBU0VUIFVTRURfSU5fT0JKRUNUX0hJTlRfUEFSQU0gVVNFUl9JTklUSUFURURfTE9PS1VQX0FDVElPTiBVU0VSX05BTUVfRk9STUFUIFVTRVJfU0VMRUNUSU9OX1JFU1RSSUNUSU9OUyBXT1JLRkxPV19URVNUX1BST1RPQ09MU19GT0xERVJfUEFUSCBFTFNfU1VCVFlQRV9DT05UUk9MX05BTUUgRUxTX0ZPTERFUl9LSU5EX0NPTlRST0xfTkFNRSBSRVBFQVRfUFJPQ0VTU19DVVJSRU5UX09CSkVDVF9FWENFUFRJT05fTkFNRSBQUklWSUxFR0VfQ09NUE9ORU5UX0ZVTExfQUNDRVNTIFBSSVZJTEVHRV9ERVZFTE9QTUVOVF9FWFBPUlQgUFJJVklMRUdFX0RFVkVMT1BNRU5UX0lNUE9SVCBQUklWSUxFR0VfRE9DVU1FTlRfREVMRVRFIFBSSVZJTEVHRV9FU0QgUFJJVklMRUdFX0ZPTERFUl9ERUxFVEUgUFJJVklMRUdFX01BTkFHRV9BQ0NFU1NfUklHSFRTIFBSSVZJTEVHRV9NQU5BR0VfUkVQTElDQVRJT04gUFJJVklMRUdFX01BTkFHRV9TRVNTSU9OX1NFUlZFUiBQUklWSUxFR0VfT0JKRUNUX0ZVTExfQUNDRVNTIFBSSVZJTEVHRV9PQkpFQ1RfVklFVyBQUklWSUxFR0VfUkVTRVJWRV9MSUNFTlNFIFBSSVZJTEVHRV9TWVNURU1fQ1VTVE9NSVpFIFBSSVZJTEVHRV9TWVNURU1fREVWRUxPUCBQUklWSUxFR0VfU1lTVEVNX0lOU1RBTEwgUFJJVklMRUdFX1RBU0tfREVMRVRFIFBSSVZJTEVHRV9VU0VSX1BMVUdJTl9TRVRUSU5HU19DVVNUT01JWkUgUFJJVklMRUdFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBBQ0NFU1NfVFlQRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIEFMTF9BVkFJTEFCTEVfUFJJVklMRUdFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBBTExfUkVQTElDQVRFX0NPTVBPTkVOVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgQVZBSUxBQkxFX0RFVkVMT1BFUlNfQ09NUE9ORU5UU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBDT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIEZJTFRSQVRFUl9TRVRUSU5HU19DT05GTElDVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgR1JPVVBTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFJFQ0VJVkVfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgUkVGRVJFTkNFX1JFUVVJU0lURV9QU0VVRE9SRUZFUkVOQ0VfQ09ERSBSRUZFUkVOQ0VfUkVRVUlTSVRFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBSRUZUWVBFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBSRVBMSUNBVElPTl9TRUFOQ0VTX0RJQVJZX1BTRVVET1JFRkVSRU5DRV9DT0RFIFNFTkRfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgU1VCU1RJVFVURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgU1lTVEVNX1NFVFRJTkdTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFVOSVRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFVTRVJTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFZJRVdFUlNfUFNFVURPUkVGRVJFTkNFX0NPREUgQ0VSVElGSUNBVEVfVFlQRV9FTkNSWVBUIENFUlRJRklDQVRFX1RZUEVfU0lHTiBDRVJUSUZJQ0FURV9UWVBFX1NJR05fQU5EX0VOQ1JZUFQgU1RPUkFHRV9UWVBFX0ZJTEUgU1RPUkFHRV9UWVBFX05BU19DSUZTIFNUT1JBR0VfVFlQRV9TQVBFUklPTiBTVE9SQUdFX1RZUEVfU1FMX1NFUlZFUiBDT01QVFlQRTJfUkVRVUlTSVRFX0RPQ1VNRU5UU19WQUxVRSBDT01QVFlQRTJfUkVRVUlTSVRFX1RBU0tTX1ZBTFVFIENPTVBUWVBFMl9SRVFVSVNJVEVfRk9MREVSU19WQUxVRSBDT01QVFlQRTJfUkVRVUlTSVRFX1JFRkVSRU5DRVNfVkFMVUUgU1lTUkVRX0NPREUgU1lTUkVRX0NPTVBUWVBFMiBTWVNSRVFfQ09OU1RfQVZBSUxBQkxFX0ZPUl9XRUIgU1lTUkVRX0NPTlNUX0NPTU1PTl9DT0RFIFNZU1JFUV9DT05TVF9DT01NT05fVkFMVUUgU1lTUkVRX0NPTlNUX0ZJUk1fQ09ERSBTWVNSRVFfQ09OU1RfRklSTV9TVEFUVVMgU1lTUkVRX0NPTlNUX0ZJUk1fVkFMVUUgU1lTUkVRX0NPTlNUX1NFUlZFUl9TVEFUVVMgU1lTUkVRX0NPTlRFTlRTIFNZU1JFUV9EQVRFX09QRU4gU1lTUkVRX0RBVEVfQ0xPU0UgU1lTUkVRX0RFU0NSSVBUSU9OIFNZU1JFUV9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBTWVNSRVFfRE9VQkxFIFNZU1JFUV9FRE9DX0FDQ0VTU19UWVBFIFNZU1JFUV9FRE9DX0FVVEhPUiBTWVNSRVFfRURPQ19DUkVBVEVEIFNZU1JFUV9FRE9DX0RFTEVHQVRFX1JJR0hUU19SRVFVSVNJVEVfQ09ERSBTWVNSRVFfRURPQ19FRElUT1IgU1lTUkVRX0VET0NfRU5DT0RFX1RZUEUgU1lTUkVRX0VET0NfRU5DUllQVElPTl9QTFVHSU5fTkFNRSBTWVNSRVFfRURPQ19FTkNSWVBUSU9OX1BMVUdJTl9WRVJTSU9OIFNZU1JFUV9FRE9DX0VYUE9SVF9EQVRFIFNZU1JFUV9FRE9DX0VYUE9SVEVSIFNZU1JFUV9FRE9DX0tJTkQgU1lTUkVRX0VET0NfTElGRV9TVEFHRV9OQU1FIFNZU1JFUV9FRE9DX0xPQ0tFRF9GT1JfU0VSVkVSX0NPREUgU1lTUkVRX0VET0NfTU9ESUZJRUQgU1lTUkVRX0VET0NfTkFNRSBTWVNSRVFfRURPQ19OT1RFIFNZU1JFUV9FRE9DX1FVQUxJRklFRF9JRCBTWVNSRVFfRURPQ19TRVNTSU9OX0tFWSBTWVNSRVFfRURPQ19TRVNTSU9OX0tFWV9FTkNSWVBUSU9OX1BMVUdJTl9OQU1FIFNZU1JFUV9FRE9DX1NFU1NJT05fS0VZX0VOQ1JZUFRJT05fUExVR0lOX1ZFUlNJT04gU1lTUkVRX0VET0NfU0lHTkFUVVJFX1RZUEUgU1lTUkVRX0VET0NfU0lHTkVEIFNZU1JFUV9FRE9DX1NUT1JBR0UgU1lTUkVRX0VET0NfU1RPUkFHRVNfQVJDSElWRV9TVE9SQUdFIFNZU1JFUV9FRE9DX1NUT1JBR0VTX0NIRUNLX1JJR0hUUyBTWVNSRVFfRURPQ19TVE9SQUdFU19DT01QVVRFUl9OQU1FIFNZU1JFUV9FRE9DX1NUT1JBR0VTX0VESVRfSU5fU1RPUkFHRSBTWVNSRVFfRURPQ19TVE9SQUdFU19FWEVDVVRJVkVfU1RPUkFHRSBTWVNSRVFfRURPQ19TVE9SQUdFU19GVU5DVElPTiBTWVNSRVFfRURPQ19TVE9SQUdFU19JTklUSUFMSVpFRCBTWVNSRVFfRURPQ19TVE9SQUdFU19MT0NBTF9QQVRIIFNZU1JFUV9FRE9DX1NUT1JBR0VTX1NBUEVSSU9OX0RBVEFCQVNFX05BTUUgU1lTUkVRX0VET0NfU1RPUkFHRVNfU0VBUkNIX0JZX1RFWFQgU1lTUkVRX0VET0NfU1RPUkFHRVNfU0VSVkVSX05BTUUgU1lTUkVRX0VET0NfU1RPUkFHRVNfU0hBUkVEX1NPVVJDRV9OQU1FIFNZU1JFUV9FRE9DX1NUT1JBR0VTX1RZUEUgU1lTUkVRX0VET0NfVEVYVF9NT0RJRklFRCBTWVNSRVFfRURPQ19UWVBFX0FDVF9DT0RFIFNZU1JFUV9FRE9DX1RZUEVfQUNUX0RFU0NSSVBUSU9OIFNZU1JFUV9FRE9DX1RZUEVfQUNUX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFNZU1JFUV9FRE9DX1RZUEVfQUNUX09OX0VYRUNVVEUgU1lTUkVRX0VET0NfVFlQRV9BQ1RfT05fRVhFQ1VURV9FWElTVFMgU1lTUkVRX0VET0NfVFlQRV9BQ1RfU0VDVElPTiBTWVNSRVFfRURPQ19UWVBFX0FERF9QQVJBTVMgU1lTUkVRX0VET0NfVFlQRV9DT01NRU5UIFNZU1JFUV9FRE9DX1RZUEVfRVZFTlRfVEVYVCBTWVNSRVFfRURPQ19UWVBFX05BTUVfSU5fU0lOR1VMQVIgU1lTUkVRX0VET0NfVFlQRV9OQU1FX0lOX1NJTkdVTEFSX0xPQ0FMSVpFX0lEIFNZU1JFUV9FRE9DX1RZUEVfTkFNRV9MT0NBTElaRV9JRCBTWVNSRVFfRURPQ19UWVBFX05VTUVSQVRJT05fTUVUSE9EIFNZU1JFUV9FRE9DX1RZUEVfUFNFVURPX1JFUVVJU0lURV9DT0RFIFNZU1JFUV9FRE9DX1RZUEVfUkVRX0NPREUgU1lTUkVRX0VET0NfVFlQRV9SRVFfREVTQ1JJUFRJT04gU1lTUkVRX0VET0NfVFlQRV9SRVFfREVTQ1JJUFRJT05fTE9DQUxJWkVfSUQgU1lTUkVRX0VET0NfVFlQRV9SRVFfSVNfTEVBRElORyBTWVNSRVFfRURPQ19UWVBFX1JFUV9JU19SRVFVSVJFRCBTWVNSRVFfRURPQ19UWVBFX1JFUV9OVU1CRVIgU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fQ0hBTkdFIFNZU1JFUV9FRE9DX1RZUEVfUkVRX09OX0NIQU5HRV9FWElTVFMgU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fU0VMRUNUIFNZU1JFUV9FRE9DX1RZUEVfUkVRX09OX1NFTEVDVF9LSU5EIFNZU1JFUV9FRE9DX1RZUEVfUkVRX1NFQ1RJT04gU1lTUkVRX0VET0NfVFlQRV9WSUVXX0NBUkQgU1lTUkVRX0VET0NfVFlQRV9WSUVXX0NPREUgU1lTUkVRX0VET0NfVFlQRV9WSUVXX0NPTU1FTlQgU1lTUkVRX0VET0NfVFlQRV9WSUVXX0lTX01BSU4gU1lTUkVRX0VET0NfVFlQRV9WSUVXX05BTUUgU1lTUkVRX0VET0NfVFlQRV9WSUVXX05BTUVfTE9DQUxJWkVfSUQgU1lTUkVRX0VET0NfVkVSU0lPTl9BVVRIT1IgU1lTUkVRX0VET0NfVkVSU0lPTl9DUkMgU1lTUkVRX0VET0NfVkVSU0lPTl9EQVRBIFNZU1JFUV9FRE9DX1ZFUlNJT05fRURJVE9SIFNZU1JFUV9FRE9DX1ZFUlNJT05fRVhQT1JUX0RBVEUgU1lTUkVRX0VET0NfVkVSU0lPTl9FWFBPUlRFUiBTWVNSRVFfRURPQ19WRVJTSU9OX0hJRERFTiBTWVNSRVFfRURPQ19WRVJTSU9OX0xJRkVfU1RBR0UgU1lTUkVRX0VET0NfVkVSU0lPTl9NT0RJRklFRCBTWVNSRVFfRURPQ19WRVJTSU9OX05PVEUgU1lTUkVRX0VET0NfVkVSU0lPTl9TSUdOQVRVUkVfVFlQRSBTWVNSRVFfRURPQ19WRVJTSU9OX1NJR05FRCBTWVNSRVFfRURPQ19WRVJTSU9OX1NJWkUgU1lTUkVRX0VET0NfVkVSU0lPTl9TT1VSQ0UgU1lTUkVRX0VET0NfVkVSU0lPTl9URVhUX01PRElGSUVEIFNZU1JFUV9FRE9DS0lORF9ERUZBVUxUX1ZFUlNJT05fU1RBVEVfQ09ERSBTWVNSRVFfRk9MREVSX0tJTkQgU1lTUkVRX0ZVTkNfQ0FURUdPUlkgU1lTUkVRX0ZVTkNfQ09NTUVOVCBTWVNSRVFfRlVOQ19HUk9VUCBTWVNSRVFfRlVOQ19HUk9VUF9DT01NRU5UIFNZU1JFUV9GVU5DX0dST1VQX05VTUJFUiBTWVNSRVFfRlVOQ19IRUxQIFNZU1JFUV9GVU5DX1BBUkFNX0RFRl9WQUxVRSBTWVNSRVFfRlVOQ19QQVJBTV9JREVOVCBTWVNSRVFfRlVOQ19QQVJBTV9OVU1CRVIgU1lTUkVRX0ZVTkNfUEFSQU1fVFlQRSBTWVNSRVFfRlVOQ19URVhUIFNZU1JFUV9HUk9VUF9DQVRFR09SWSBTWVNSRVFfSUQgU1lTUkVRX0xBU1RfVVBEQVRFIFNZU1JFUV9MRUFERVJfUkVGRVJFTkNFIFNZU1JFUV9MSU5FX05VTUJFUiBTWVNSRVFfTUFJTl9SRUNPUkRfSUQgU1lTUkVRX05BTUUgU1lTUkVRX05BTUVfTE9DQUxJWkVfSUQgU1lTUkVRX05PVEUgU1lTUkVRX09SSUdJTkFMX1JFQ09SRCBTWVNSRVFfT1VSX0ZJUk0gU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19CQVRDSF9MT0dJTkcgU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19CQVRDSF9TSVpFIFNZU1JFUV9QUk9GSUxJTkdfU0VUVElOR1NfUFJPRklMSU5HX0VOQUJMRUQgU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19TUUxfUFJPRklMSU5HX0VOQUJMRUQgU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19TVEFSVF9MT0dHRUQgU1lTUkVRX1JFQ09SRF9TVEFUVVMgU1lTUkVRX1JFRl9SRVFfRklFTERfTkFNRSBTWVNSRVFfUkVGX1JFUV9GT1JNQVQgU1lTUkVRX1JFRl9SRVFfR0VORVJBVEVEIFNZU1JFUV9SRUZfUkVRX0xFTkdUSCBTWVNSRVFfUkVGX1JFUV9QUkVDSVNJT04gU1lTUkVRX1JFRl9SRVFfUkVGRVJFTkNFIFNZU1JFUV9SRUZfUkVRX1NFQ1RJT04gU1lTUkVRX1JFRl9SRVFfU1RPUkVEIFNZU1JFUV9SRUZfUkVRX1RPS0VOUyBTWVNSRVFfUkVGX1JFUV9UWVBFIFNZU1JFUV9SRUZfUkVRX1ZJRVcgU1lTUkVRX1JFRl9UWVBFX0FDVF9DT0RFIFNZU1JFUV9SRUZfVFlQRV9BQ1RfREVTQ1JJUFRJT04gU1lTUkVRX1JFRl9UWVBFX0FDVF9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBTWVNSRVFfUkVGX1RZUEVfQUNUX09OX0VYRUNVVEUgU1lTUkVRX1JFRl9UWVBFX0FDVF9PTl9FWEVDVVRFX0VYSVNUUyBTWVNSRVFfUkVGX1RZUEVfQUNUX1NFQ1RJT04gU1lTUkVRX1JFRl9UWVBFX0FERF9QQVJBTVMgU1lTUkVRX1JFRl9UWVBFX0NPTU1FTlQgU1lTUkVRX1JFRl9UWVBFX0NPTU1PTl9TRVRUSU5HUyBTWVNSRVFfUkVGX1RZUEVfRElTUExBWV9SRVFVSVNJVEVfTkFNRSBTWVNSRVFfUkVGX1RZUEVfRVZFTlRfVEVYVCBTWVNSRVFfUkVGX1RZUEVfTUFJTl9MRUFESU5HX1JFRiBTWVNSRVFfUkVGX1RZUEVfTkFNRV9JTl9TSU5HVUxBUiBTWVNSRVFfUkVGX1RZUEVfTkFNRV9JTl9TSU5HVUxBUl9MT0NBTElaRV9JRCBTWVNSRVFfUkVGX1RZUEVfTkFNRV9MT0NBTElaRV9JRCBTWVNSRVFfUkVGX1RZUEVfTlVNRVJBVElPTl9NRVRIT0QgU1lTUkVRX1JFRl9UWVBFX1JFUV9DT0RFIFNZU1JFUV9SRUZfVFlQRV9SRVFfREVTQ1JJUFRJT04gU1lTUkVRX1JFRl9UWVBFX1JFUV9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0NPTlRST0wgU1lTUkVRX1JFRl9UWVBFX1JFUV9JU19GSUxURVIgU1lTUkVRX1JFRl9UWVBFX1JFUV9JU19MRUFESU5HIFNZU1JFUV9SRUZfVFlQRV9SRVFfSVNfUkVRVUlSRUQgU1lTUkVRX1JFRl9UWVBFX1JFUV9OVU1CRVIgU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9DSEFOR0UgU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9DSEFOR0VfRVhJU1RTIFNZU1JFUV9SRUZfVFlQRV9SRVFfT05fU0VMRUNUIFNZU1JFUV9SRUZfVFlQRV9SRVFfT05fU0VMRUNUX0tJTkQgU1lTUkVRX1JFRl9UWVBFX1JFUV9TRUNUSU9OIFNZU1JFUV9SRUZfVFlQRV9WSUVXX0NBUkQgU1lTUkVRX1JFRl9UWVBFX1ZJRVdfQ09ERSBTWVNSRVFfUkVGX1RZUEVfVklFV19DT01NRU5UIFNZU1JFUV9SRUZfVFlQRV9WSUVXX0lTX01BSU4gU1lTUkVRX1JFRl9UWVBFX1ZJRVdfTkFNRSBTWVNSRVFfUkVGX1RZUEVfVklFV19OQU1FX0xPQ0FMSVpFX0lEIFNZU1JFUV9SRUZFUkVOQ0VfVFlQRV9JRCBTWVNSRVFfU1RBVEUgU1lTUkVRX1NUQVTQlSBTWVNSRVFfU1lTVEVNX1NFVFRJTkdTX1ZBTFVFIFNZU1JFUV9UWVBFIFNZU1JFUV9VTklUIFNZU1JFUV9VTklUX0lEIFNZU1JFUV9VU0VSX0dST1VQU19HUk9VUF9GVUxMX05BTUUgU1lTUkVRX1VTRVJfR1JPVVBTX0dST1VQX05BTUUgU1lTUkVRX1VTRVJfR1JPVVBTX0dST1VQX1NFUlZFUl9OQU1FIFNZU1JFUV9VU0VSU19BQ0NFU1NfUklHSFRTIFNZU1JFUV9VU0VSU19BVVRIRU5USUNBVElPTiBTWVNSRVFfVVNFUlNfQ0FURUdPUlkgU1lTUkVRX1VTRVJTX0NPTVBPTkVOVCBTWVNSRVFfVVNFUlNfQ09NUE9ORU5UX1VTRVJfSVNfUFVCTElDIFNZU1JFUV9VU0VSU19ET01BSU4gU1lTUkVRX1VTRVJTX0ZVTExfVVNFUl9OQU1FIFNZU1JFUV9VU0VSU19HUk9VUCBTWVNSRVFfVVNFUlNfSVNfTUFJTl9TRVJWRVIgU1lTUkVRX1VTRVJTX0xPR0lOIFNZU1JFUV9VU0VSU19SRUZFUkVOQ0VfVVNFUl9JU19QVUJMSUMgU1lTUkVRX1VTRVJTX1NUQVRVUyBTWVNSRVFfVVNFUlNfVVNFUl9DRVJUSUZJQ0FURSBTWVNSRVFfVVNFUlNfVVNFUl9DRVJUSUZJQ0FURV9JTkZPIFNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1BMVUdJTl9OQU1FIFNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1BMVUdJTl9WRVJTSU9OIFNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1NUQVRFIFNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1NVQkpFQ1RfTkFNRSBTWVNSRVFfVVNFUlNfVVNFUl9DRVJUSUZJQ0FURV9USFVNQlBSSU5UIFNZU1JFUV9VU0VSU19VU0VSX0RFRkFVTFRfQ0VSVElGSUNBVEUgU1lTUkVRX1VTRVJTX1VTRVJfREVTQ1JJUFRJT04gU1lTUkVRX1VTRVJTX1VTRVJfR0xPQkFMX05BTUUgU1lTUkVRX1VTRVJTX1VTRVJfTE9HSU4gU1lTUkVRX1VTRVJTX1VTRVJfTUFJTl9TRVJWRVIgU1lTUkVRX1VTRVJTX1VTRVJfVFlQRSBTWVNSRVFfV09SS19SVUxFU19GT0xERVJfSUQgUkVTVUxUX1ZBUl9OQU1FIFJFU1VMVF9WQVJfTkFNRV9FTkcgQVVUT19OVU1FUkFUSU9OX1JVTEVfSUQgQ0FOVF9DSEFOR0VfSURfUkVRVUlTSVRFX1JVTEVfSUQgQ0FOVF9DSEFOR0VfT1VSRklSTV9SRVFVSVNJVEVfUlVMRV9JRCBDSEVDS19DSEFOR0lOR19SRUZFUkVOQ0VfUkVDT1JEX1VTRV9SVUxFX0lEIENIRUNLX0NPREVfUkVRVUlTSVRFX1JVTEVfSUQgQ0hFQ0tfREVMRVRJTkdfUkVGRVJFTkNFX1JFQ09SRF9VU0VfUlVMRV9JRCBDSEVDS19GSUxUUkFURVJfQ0hBTkdFU19SVUxFX0lEIENIRUNLX1JFQ09SRF9JTlRFUlZBTF9SVUxFX0lEIENIRUNLX1JFRkVSRU5DRV9JTlRFUlZBTF9SVUxFX0lEIENIRUNLX1JFUVVJUkVEX0RBVEFfRlVMTE5FU1NfUlVMRV9JRCBDSEVDS19SRVFVSVJFRF9SRVFVSVNJVEVTX0ZVTExORVNTX1JVTEVfSUQgTUFLRV9SRUNPUkRfVU5SQVRJRklFRF9SVUxFX0lEIFJFU1RPUkVfQVVUT19OVU1FUkFUSU9OX1JVTEVfSUQgU0VUX0ZJUk1fQ09OVEVYVF9GUk9NX1JFQ09SRF9SVUxFX0lEIFNFVF9GSVJTVF9SRUNPUkRfSU5fTElTVF9GT1JNX1JVTEVfSUQgU0VUX0lEU1BTX1ZBTFVFX1JVTEVfSUQgU0VUX05FWFRfQ09ERV9WQUxVRV9SVUxFX0lEIFNFVF9PVVJGSVJNX0JPVU5EU19SVUxFX0lEIFNFVF9PVVJGSVJNX1JFUVVJU0lURV9SVUxFX0lEIFNDUklQVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgU0NSSVBUX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBTQ1JJUFRfQkxPQ0tfRVhFQ1VUSU9OX1JFU1VMVFNfUFJPUEVSVFkgU0NSSVBUX0JMT0NLX05BTUVfUFJPUEVSVFkgU0NSSVBUX0JMT0NLX1NDUklQVF9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfQUZURVJfRklOSVNIX0VWRU5UIFNVQlRBU0tfQkxPQ0tfQVNTSUdOX1BBUkFNU19FVkVOVCBTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX0dST1VQX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgU1VCVEFTS19CTE9DS19DUkVBVEVEX1RBU0tfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19DUkVBVElPTl9FVkVOVCBTVUJUQVNLX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfSU1QT1JUQU5DRV9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX0lOSVRJQVRPUl9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX0lTX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfSVNfUkVMQVRJVkVfREVBRExJTkVfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19KT0JTX1RZUEVfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19OQU1FX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfUEFSQUxMRUxfUk9VVEVfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19QRVJGT1JNRVJTX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19SRVFVSVJFX1NJR05fUFJPUEVSVFkgU1VCVEFTS19CTE9DS19TVEFOREFSRF9ST1VURV9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1NUQVJUX0VWRU5UIFNVQlRBU0tfQkxPQ0tfU1RFUF9DT05UUk9MX1BST1BFUlRZIFNVQlRBU0tfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1RBU0tfQ09OVFJPTF9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1RFWFRfUFJPUEVSVFkgU1VCVEFTS19CTE9DS19VTkxPQ0tfQVRUQUNITUVOVFNfT05fU1RPUF9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1VTRV9TVEFOREFSRF9ST1VURV9QUk9QRVJUWSBTVUJUQVNLX0JMT0NLX1dBSVRfRk9SX1RBU0tfQ09NUExFVEVfUFJPUEVSVFkgU1lTQ09NUF9DT05UUk9MX0pPQlMgU1lTQ09NUF9GT0xERVJTIFNZU0NPTVBfSk9CUyBTWVNDT01QX05PVElDRVMgU1lTQ09NUF9UQVNLUyBTWVNETEdfQ1JFQVRFX0VET0NVTUVOVCBTWVNETEdfQ1JFQVRFX0VET0NVTUVOVF9WRVJTSU9OIFNZU0RMR19DVVJSRU5UX1BFUklPRCBTWVNETEdfRURJVF9GVU5DVElPTl9IRUxQIFNZU0RMR19FRE9DVU1FTlRfS0lORFNfRk9SX1RFTVBMQVRFIFNZU0RMR19FWFBPUlRfTVVMVElQTEVfRURPQ1VNRU5UUyBTWVNETEdfRVhQT1JUX1NJTkdMRV9FRE9DVU1FTlQgU1lTRExHX0lNUE9SVF9FRE9DVU1FTlQgU1lTRExHX01VTFRJUExFX1NFTEVDVCBTWVNETEdfU0VUVVBfQUNDRVNTX1JJR0hUUyBTWVNETEdfU0VUVVBfREVGQVVMVF9SSUdIVFMgU1lTRExHX1NFVFVQX0ZJTFRFUl9DT05ESVRJT04gU1lTRExHX1NFVFVQX1NJR05fUklHSFRTIFNZU0RMR19TRVRVUF9UQVNLX09CU0VSVkVSUyBTWVNETEdfU0VUVVBfVEFTS19ST1VURSBTWVNETEdfU0VUVVBfVVNFUlNfTElTVCBTWVNETEdfU0lHTl9FRE9DVU1FTlQgU1lTRExHX1NJR05fTVVMVElQTEVfRURPQ1VNRU5UUyBTWVNSRUZfQUNDRVNTX1JJR0hUU19UWVBFUyBTWVNSRUZfQURNSU5JU1RSQVRJT05fSElTVE9SWSBTWVNSRUZfQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTIFNZU1JFRl9BTExfQVZBSUxBQkxFX1BSSVZJTEVHRVMgU1lTUkVGX0FMTF9SRVBMSUNBVElOR19DT01QT05FTlRTIFNZU1JFRl9BVkFJTEFCTEVfREVWRUxPUEVSU19DT01QT05FTlRTIFNZU1JFRl9DQUxFTkRBUl9FVkVOVFMgU1lTUkVGX0NPTVBPTkVOVF9UT0tFTl9ISVNUT1JZIFNZU1JFRl9DT01QT05FTlRfVE9LRU5TIFNZU1JFRl9DT01QT05FTlRTIFNZU1JFRl9DT05TVEFOVFMgU1lTUkVGX0RBVEFfUkVDRUlWRV9QUk9UT0NPTCBTWVNSRUZfREFUQV9TRU5EX1BST1RPQ09MIFNZU1JFRl9ESUFMT0dTIFNZU1JFRl9ESUFMT0dTX1JFUVVJU0lURVMgU1lTUkVGX0VESVRPUlMgU1lTUkVGX0VET0NfQ0FSRFMgU1lTUkVGX0VET0NfVFlQRVMgU1lTUkVGX0VET0NVTUVOVF9DQVJEX1JFUVVJU0lURVMgU1lTUkVGX0VET0NVTUVOVF9DQVJEX1RZUEVTIFNZU1JFRl9FRE9DVU1FTlRfQ0FSRF9UWVBFU19SRUZFUkVOQ0UgU1lTUkVGX0VET0NVTUVOVF9DQVJEUyBTWVNSRUZfRURPQ1VNRU5UX0hJU1RPUlkgU1lTUkVGX0VET0NVTUVOVF9LSU5EUyBTWVNSRUZfRURPQ1VNRU5UX1JFUVVJU0lURVMgU1lTUkVGX0VET0NVTUVOVF9TSUdOQVRVUkVTIFNZU1JFRl9FRE9DVU1FTlRfVEVNUExBVEVTIFNZU1JFRl9FRE9DVU1FTlRfVEVYVF9TVE9SQUdFUyBTWVNSRUZfRURPQ1VNRU5UX1ZJRVdTIFNZU1JFRl9GSUxURVJFUl9TRVRVUF9DT05GTElDVFMgU1lTUkVGX0ZJTFRSQVRFUl9TRVRUSU5HX0NPTkZMSUNUUyBTWVNSRUZfRk9MREVSX0hJU1RPUlkgU1lTUkVGX0ZPTERFUlMgU1lTUkVGX0ZVTkNUSU9OX0dST1VQUyBTWVNSRUZfRlVOQ1RJT05fUEFSQU1TIFNZU1JFRl9GVU5DVElPTlMgU1lTUkVGX0pPQl9ISVNUT1JZIFNZU1JFRl9MSU5LUyBTWVNSRUZfTE9DQUxJWkFUSU9OX0RJQ1RJT05BUlkgU1lTUkVGX0xPQ0FMSVpBVElPTl9MQU5HVUFHRVMgU1lTUkVGX01PRFVMRVMgU1lTUkVGX1BSSVZJTEVHRVMgU1lTUkVGX1JFQ09SRF9ISVNUT1JZIFNZU1JFRl9SRUZFUkVOQ0VfUkVRVUlTSVRFUyBTWVNSRUZfUkVGRVJFTkNFX1RZUEVfVklFV1MgU1lTUkVGX1JFRkVSRU5DRV9UWVBFUyBTWVNSRUZfUkVGRVJFTkNFUyBTWVNSRUZfUkVGRVJFTkNFU19SRVFVSVNJVEVTIFNZU1JFRl9SRU1PVEVfU0VSVkVSUyBTWVNSRUZfUkVQTElDQVRJT05fU0VTU0lPTlNfTE9HIFNZU1JFRl9SRVBMSUNBVElPTl9TRVNTSU9OU19QUk9UT0NPTCBTWVNSRUZfUkVQT1JUUyBTWVNSRUZfUk9MRVMgU1lTUkVGX1JPVVRFX0JMT0NLX0dST1VQUyBTWVNSRUZfUk9VVEVfQkxPQ0tTIFNZU1JFRl9TQ1JJUFRTIFNZU1JFRl9TRUFSQ0hFUyBTWVNSRUZfU0VSVkVSX0VWRU5UUyBTWVNSRUZfU0VSVkVSX0VWRU5UU19ISVNUT1JZIFNZU1JFRl9TVEFOREFSRF9ST1VURV9HUk9VUFMgU1lTUkVGX1NUQU5EQVJEX1JPVVRFUyBTWVNSRUZfU1RBVFVTRVMgU1lTUkVGX1NZU1RFTV9TRVRUSU5HUyBTWVNSRUZfVEFTS19ISVNUT1JZIFNZU1JFRl9UQVNLX0tJTkRfR1JPVVBTIFNZU1JFRl9UQVNLX0tJTkRTIFNZU1JFRl9UQVNLX1JJR0hUUyBTWVNSRUZfVEFTS19TSUdOQVRVUkVTIFNZU1JFRl9UQVNLUyBTWVNSRUZfVU5JVFMgU1lTUkVGX1VTRVJfR1JPVVBTIFNZU1JFRl9VU0VSX0dST1VQU19SRUZFUkVOQ0UgU1lTUkVGX1VTRVJfU1VCU1RJVFVUSU9OIFNZU1JFRl9VU0VSUyBTWVNSRUZfVVNFUlNfUkVGRVJFTkNFIFNZU1JFRl9WSUVXRVJTIFNZU1JFRl9XT1JLSU5HX1RJTUVfQ0FMRU5EQVJTIEFDQ0VTU19SSUdIVFNfVEFCTEVfTkFNRSBFRE1TX0FDQ0VTU19UQUJMRV9OQU1FIEVET0NfVFlQRVNfVEFCTEVfTkFNRSBURVNUX0RFVl9EQl9OQU1FIFRFU1RfREVWX1NZU1RFTV9DT0RFIFRFU1RfRURNU19EQl9OQU1FIFRFU1RfRURNU19NQUlOX0NPREUgVEVTVF9FRE1TX01BSU5fREJfTkFNRSBURVNUX0VETVNfU0VDT05EX0NPREUgVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFRFU1RfRURNU19TWVNURU1fQ09ERSBURVNUX0lTQjVfTUFJTl9DT0RFIFRFU1RfSVNCNV9TRUNPTkRfQ09ERSBURVNUX1NRTF9TRVJWRVJfMjAwNV9OQU1FIFRFU1RfU1FMX1NFUlZFUl9OQU1FIEFUVEVOVElPTl9DQVBUSU9OIGNic0NvbW1hbmRMaW5rcyBjYnNEZWZhdWx0IENPTkZJUk1BVElPTl9DQVBUSU9OIEVSUk9SX0NBUFRJT04gSU5GT1JNQVRJT05fQ0FQVElPTiBtckNhbmNlbCBtck9rIEVET0NfVkVSU0lPTl9BQ1RJVkVfU1RBR0VfQ09ERSBFRE9DX1ZFUlNJT05fREVTSUdOX1NUQUdFX0NPREUgRURPQ19WRVJTSU9OX09CU09MRVRFX1NUQUdFX0NPREUgY3BEYXRhRW5jaXBoZXJtZW50RW5hYmxlZCBjcERpZ2l0YWxTaWduYXR1cmVFbmFibGVkIGNwSUQgY3BJc3N1ZXIgY3BQbHVnaW5WZXJzaW9uIGNwU2VyaWFsIGNwU3ViamVjdE5hbWUgY3BTdWJqU2ltcGxlTmFtZSBjcFZhbGlkRnJvbURhdGUgY3BWYWxpZFRvRGF0ZSBJU0JMX1NZTlRBWCBOT19TWU5UQVggWE1MX1NZTlRBWCBXQUlUX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBXQUlUX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBXQUlUX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFdBSVRfQkxPQ0tfSVNfUkVMQVRJVkVfREVBRExJTkVfUFJPUEVSVFkgV0FJVF9CTE9DS19OQU1FX1BST1BFUlRZIFdBSVRfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBTWVNSRVNfQ09NTU9OIFNZU1JFU19DT05TVCBTWVNSRVNfTUJGVU5DIFNZU1JFU19TQkRBVEEgU1lTUkVTX1NCR1VJIFNZU1JFU19TQklOVEYgU1lTUkVTX1NCUkVGRFNDIFNZU1JFU19TUUxFUlJPUlMgU1lTUkVTX1NZU0NPTVAgYXRVc2VyIGF0R3JvdXAgYXRSb2xlIGFlbUVuYWJsZWRBbHdheXMgYWVtRGlzYWJsZWRBbHdheXMgYWVtRW5hYmxlZE9uQnJvd3NlIGFlbUVuYWJsZWRPbkVkaXQgYWVtRGlzYWJsZWRPbkJyb3dzZUVtcHR5IGFwQmVnaW4gYXBFbmQgYWxMZWZ0IGFsUmlnaHQgYXNtTmV2ZXIgYXNtTm9CdXRDdXN0b21pemUgYXNtQXNMYXN0VGltZSBhc21ZZXNCdXRDdXN0b21pemUgYXNtQWx3YXlzIGNpckNvbW1vbiBjaXJSZXZva2VkIGN0U2lnbmF0dXJlIGN0RW5jb2RlIGN0U2lnbmF0dXJlRW5jb2RlIGNsYlVuY2hlY2tlZCBjbGJDaGVja2VkIGNsYkdyYXllZCBjZUlTQiBjZUFsd2F5cyBjZU5ldmVyIGN0RG9jdW1lbnQgY3RSZWZlcmVuY2UgY3RTY3JpcHQgY3RVbmtub3duIGN0UmVwb3J0IGN0RGlhbG9nIGN0RnVuY3Rpb24gY3RGb2xkZXIgY3RFRG9jdW1lbnQgY3RUYXNrIGN0Sm9iIGN0Tm90aWNlIGN0Q29udHJvbEpvYiBjZkludGVybmFsIGNmRGlzcGxheSBjaVVuc3BlY2lmaWVkIGNpV3JpdGUgY2lSZWFkIGNrRm9sZGVyIGNrRURvY3VtZW50IGNrVGFzayBja0pvYiBja0NvbXBvbmVudFRva2VuIGNrQW55IGNrUmVmZXJlbmNlIGNrU2NyaXB0IGNrUmVwb3J0IGNrRGlhbG9nIGN0SVNCTEVkaXRvciBjdEJldmVsIGN0QnV0dG9uIGN0Q2hlY2tMaXN0Qm94IGN0Q29tYm9Cb3ggY3RDb21ib0VkaXQgY3RHcmlkIGN0REJDaGVja0JveCBjdERCQ29tYm9Cb3ggY3REQkVkaXQgY3REQkVsbGlwc2lzIGN0REJNZW1vIGN0REJOYXZpZ2F0b3IgY3REQlJhZGlvR3JvdXAgY3REQlN0YXR1c0xhYmVsIGN0RWRpdCBjdEdyb3VwQm94IGN0SW5wbGFjZUhpbnQgY3RNZW1vIGN0UGFuZWwgY3RMaXN0Qm94IGN0UmFkaW9CdXR0b24gY3RSaWNoRWRpdCBjdFRhYlNoZWV0IGN0V2ViQnJvd3NlciBjdEltYWdlIGN0SHlwZXJMaW5rIGN0TGFiZWwgY3REQk11bHRpRWxsaXBzaXMgY3RSaWJib24gY3RSaWNoVmlldyBjdElubmVyUGFuZWwgY3RQYW5lbEdyb3VwIGN0Qml0QnV0dG9uIGNjdERhdGUgY2N0SW50ZWdlciBjY3ROdW1lcmljIGNjdFBpY2sgY2N0UmVmZXJlbmNlIGNjdFN0cmluZyBjY3RUZXh0IGNsdEludGVybmFsIGNsdFByaW1hcnkgY2x0R1VJIGRzZUJlZm9yZU9wZW4gZHNlQWZ0ZXJPcGVuIGRzZUJlZm9yZUNsb3NlIGRzZUFmdGVyQ2xvc2UgZHNlT25WYWxpZERlbGV0ZSBkc2VCZWZvcmVEZWxldGUgZHNlQWZ0ZXJEZWxldGUgZHNlQWZ0ZXJEZWxldGVPdXRPZlRyYW5zYWN0aW9uIGRzZU9uRGVsZXRlRXJyb3IgZHNlQmVmb3JlSW5zZXJ0IGRzZUFmdGVySW5zZXJ0IGRzZU9uVmFsaWRVcGRhdGUgZHNlQmVmb3JlVXBkYXRlIGRzZU9uVXBkYXRlUmF0aWZpZWRSZWNvcmQgZHNlQWZ0ZXJVcGRhdGUgZHNlQWZ0ZXJVcGRhdGVPdXRPZlRyYW5zYWN0aW9uIGRzZU9uVXBkYXRlRXJyb3IgZHNlQWZ0ZXJTY3JvbGwgZHNlT25PcGVuUmVjb3JkIGRzZU9uQ2xvc2VSZWNvcmQgZHNlQmVmb3JlQ2FuY2VsIGRzZUFmdGVyQ2FuY2VsIGRzZU9uVXBkYXRlRGVhZGxvY2tFcnJvciBkc2VCZWZvcmVEZXRhaWxVcGRhdGUgZHNlT25QcmVwYXJlVXBkYXRlIGRzZU9uQW55UmVxdWlzaXRlQ2hhbmdlIGRzc0VkaXQgZHNzSW5zZXJ0IGRzc0Jyb3dzZSBkc3NJbkFjdGl2ZSBkZnREYXRlIGRmdFNob3J0RGF0ZSBkZnREYXRlVGltZSBkZnRUaW1lU3RhbXAgZG90RGF5cyBkb3RIb3VycyBkb3RNaW51dGVzIGRvdFNlY29uZHMgZHRrbmRMb2NhbCBkdGtuZFVUQyBhck5vbmUgYXJWaWV3IGFyRWRpdCBhckZ1bGwgZGRhVmlldyBkZGFFZGl0IGVtTG9jayBlbUVkaXQgZW1TaWduIGVtRXhwb3J0V2l0aExvY2sgZW1JbXBvcnRXaXRoVW5sb2NrIGVtQ2hhbmdlVmVyc2lvbk5vdGUgZW1PcGVuRm9yTW9kaWZ5IGVtQ2hhbmdlTGlmZVN0YWdlIGVtRGVsZXRlIGVtQ3JlYXRlVmVyc2lvbiBlbUltcG9ydCBlbVVubG9ja0V4cG9ydGVkV2l0aExvY2sgZW1TdGFydCBlbUFib3J0IGVtUmVJbml0IGVtTWFya0FzUmVhZGVkIGVtTWFya0FzVW5yZWFkZWQgZW1QZXJmb3JtIGVtQWNjZXB0IGVtUmVzdW1lIGVtQ2hhbmdlUmlnaHRzIGVtRWRpdFJvdXRlIGVtRWRpdE9ic2VydmVyIGVtUmVjb3ZlcnlGcm9tTG9jYWxDb3B5IGVtQ2hhbmdlV29ya0FjY2Vzc1R5cGUgZW1DaGFuZ2VFbmNvZGVUeXBlVG9DZXJ0aWZpY2F0ZSBlbUNoYW5nZUVuY29kZVR5cGVUb1Bhc3N3b3JkIGVtQ2hhbmdlRW5jb2RlVHlwZVRvTm9uZSBlbUNoYW5nZUVuY29kZVR5cGVUb0NlcnRpZmljYXRlUGFzc3dvcmQgZW1DaGFuZ2VTdGFuZGFyZFJvdXRlIGVtR2V0VGV4dCBlbU9wZW5Gb3JWaWV3IGVtTW92ZVRvU3RvcmFnZSBlbUNyZWF0ZU9iamVjdCBlbUNoYW5nZVZlcnNpb25IaWRkZW4gZW1EZWxldGVWZXJzaW9uIGVtQ2hhbmdlTGlmZUN5Y2xlU3RhZ2UgZW1BcHByb3ZpbmdTaWduIGVtRXhwb3J0IGVtQ29udGludWUgZW1Mb2NrRnJvbUVkaXQgZW1VbkxvY2tGb3JFZGl0IGVtTG9ja0ZvclNlcnZlciBlbVVubG9ja0Zyb21TZXJ2ZXIgZW1EZWxlZ2F0ZUFjY2Vzc1JpZ2h0cyBlbVJlRW5jb2RlIGVjb3RGaWxlIGVjb3RQcm9jZXNzIGVhR2V0IGVhQ29weSBlYUNyZWF0ZSBlYUNyZWF0ZVN0YW5kYXJkUm91dGUgZWRsdEFsbCBlZGx0Tm90aGluZyBlZGx0UXVlcnkgZXNzbVRleHQgZXNzbUNhcmQgZXN2dExhc3QgZXN2dExhc3RBY3RpdmUgZXN2dFNwZWNpZmllZCBlZHNmRXhlY3V0aXZlIGVkc2ZBcmNoaXZlIGVkc3RTUUxTZXJ2ZXIgZWRzdEZpbGUgZWR2c3ROb25lIGVkdnN0RURvY3VtZW50VmVyc2lvbkNvcHkgZWR2c3RGaWxlIGVkdnN0VGVtcGxhdGUgZWR2c3RTY2FubmVkRmlsZSB2c0RlZmF1bHQgdnNEZXNpZ24gdnNBY3RpdmUgdnNPYnNvbGV0ZSBldE5vbmUgZXRDZXJ0aWZpY2F0ZSBldFBhc3N3b3JkIGV0Q2VydGlmaWNhdGVQYXNzd29yZCBlY0V4Y2VwdGlvbiBlY1dhcm5pbmcgZWNJbmZvcm1hdGlvbiBlc3RBbGwgZXN0QXBwcm92aW5nT25seSBldnRMYXN0IGV2dExhc3RBY3RpdmUgZXZ0UXVlcnkgZmR0U3RyaW5nIGZkdE51bWVyaWMgZmR0SW50ZWdlciBmZHREYXRlIGZkdFRleHQgZmR0VW5rbm93biBmZHRXaWRlU3RyaW5nIGZkdExhcmdlSW50ZWdlciBmdEluYm94IGZ0T3V0Ym94IGZ0RmF2b3JpdGVzIGZ0Q29tbW9uRm9sZGVyIGZ0VXNlckZvbGRlciBmdENvbXBvbmVudHMgZnRRdWlja0xhdW5jaCBmdFNob3J0Y3V0cyBmdFNlYXJjaCBncmhBdXRvIGdyaFgxIGdyaFgyIGdyaFgzIGhsdFRleHQgaGx0UlRGIGhsdEhUTUwgaWZmQk1QIGlmZkpQRUcgaWZmTXVsdGlQYWdlVElGRiBpZmZTaW5nbGVQYWdlVElGRiBpZmZUSUZGIGlmZlBORyBpbThiR3JheXNjYWxlIGltMjRiUkdCIGltMWJNb25vY2hyb21lIGl0Qk1QIGl0SlBFRyBpdFdNRiBpdFBORyBpa2hJbmZvcm1hdGlvbiBpa2hXYXJuaW5nIGlraEVycm9yIGlraE5vSWNvbiBpY1Vua25vd24gaWNTY3JpcHQgaWNGdW5jdGlvbiBpY0ludGVncmF0ZWRSZXBvcnQgaWNBbmFseXRpY1JlcG9ydCBpY0RhdGFTZXRFdmVudEhhbmRsZXIgaWNBY3Rpb25IYW5kbGVyIGljRm9ybUV2ZW50SGFuZGxlciBpY0xvb2tVcEV2ZW50SGFuZGxlciBpY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBpY0JlZm9yZVNlYXJjaEV2ZW50SGFuZGxlciBpY1JvbGVDYWxjdWxhdGlvbiBpY1NlbGVjdFJvdXRlRXZlbnRIYW5kbGVyIGljQmxvY2tQcm9wZXJ0eUNhbGN1bGF0aW9uIGljQmxvY2tRdWVyeVBhcmFtc0V2ZW50SGFuZGxlciBpY0NoYW5nZVNlYXJjaFJlc3VsdEV2ZW50SGFuZGxlciBpY0Jsb2NrRXZlbnRIYW5kbGVyIGljU3ViVGFza0luaXRFdmVudEhhbmRsZXIgaWNFRG9jRGF0YVNldEV2ZW50SGFuZGxlciBpY0VEb2NMb29rVXBFdmVudEhhbmRsZXIgaWNFRG9jQWN0aW9uSGFuZGxlciBpY0VEb2NGb3JtRXZlbnRIYW5kbGVyIGljRURvY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBpY1N0cnVjdHVyZWRDb252ZXJzaW9uUnVsZSBpY1N0cnVjdHVyZWRDb252ZXJzaW9uRXZlbnRCZWZvcmUgaWNTdHJ1Y3R1cmVkQ29udmVyc2lvbkV2ZW50QWZ0ZXIgaWNXaXphcmRFdmVudEhhbmRsZXIgaWNXaXphcmRGaW5pc2hFdmVudEhhbmRsZXIgaWNXaXphcmRTdGVwRXZlbnRIYW5kbGVyIGljV2l6YXJkU3RlcEZpbmlzaEV2ZW50SGFuZGxlciBpY1dpemFyZEFjdGlvbkVuYWJsZUV2ZW50SGFuZGxlciBpY1dpemFyZEFjdGlvbkV4ZWN1dGVFdmVudEhhbmRsZXIgaWNDcmVhdGVKb2JzSGFuZGxlciBpY0NyZWF0ZU5vdGljZXNIYW5kbGVyIGljQmVmb3JlTG9va1VwRXZlbnRIYW5kbGVyIGljQWZ0ZXJMb29rVXBFdmVudEhhbmRsZXIgaWNUYXNrQWJvcnRFdmVudEhhbmRsZXIgaWNXb3JrZmxvd0Jsb2NrQWN0aW9uSGFuZGxlciBpY0RpYWxvZ0RhdGFTZXRFdmVudEhhbmRsZXIgaWNEaWFsb2dBY3Rpb25IYW5kbGVyIGljRGlhbG9nTG9va1VwRXZlbnRIYW5kbGVyIGljRGlhbG9nUmVxdWlzaXRlQ2hhbmdlRXZlbnRIYW5kbGVyIGljRGlhbG9nRm9ybUV2ZW50SGFuZGxlciBpY0RpYWxvZ1ZhbGlkQ2xvc2VFdmVudEhhbmRsZXIgaWNCbG9ja0Zvcm1FdmVudEhhbmRsZXIgaWNUYXNrRm9ybUV2ZW50SGFuZGxlciBpY1JlZmVyZW5jZU1ldGhvZCBpY0VEb2NNZXRob2QgaWNEaWFsb2dNZXRob2QgaWNQcm9jZXNzTWVzc2FnZUhhbmRsZXIgaXNTaG93IGlzSGlkZSBpc0J5VXNlclNldHRpbmdzIGprSm9iIGprTm90aWNlIGprQ29udHJvbEpvYiBqdElubmVyIGp0TGVmdCBqdFJpZ2h0IGp0RnVsbCBqdENyb3NzIGxicEFib3ZlIGxicEJlbG93IGxicExlZnQgbGJwUmlnaHQgZWx0UGVyQ29ubmVjdGlvbiBlbHRQZXJVc2VyIHNmY1VuZGVmaW5lZCBzZmNCbGFjayBzZmNHcmVlbiBzZmNSZWQgc2ZjQmx1ZSBzZmNPcmFuZ2Ugc2ZjTGlsYWMgc2ZzSXRhbGljIHNmc1N0cmlrZW91dCBzZnNOb3JtYWwgbGRjdFN0YW5kYXJkUm91dGUgbGRjdFdpemFyZCBsZGN0U2NyaXB0IGxkY3RGdW5jdGlvbiBsZGN0Um91dGVCbG9jayBsZGN0SW50ZWdyYXRlZFJlcG9ydCBsZGN0QW5hbHl0aWNSZXBvcnQgbGRjdFJlZmVyZW5jZVR5cGUgbGRjdEVEb2N1bWVudFR5cGUgbGRjdERpYWxvZyBsZGN0U2VydmVyRXZlbnRzIG1yY3J0Tm9uZSBtcmNydFVzZXIgbXJjcnRNYXhpbWFsIG1yY3J0Q3VzdG9tIHZ0RXF1YWwgdnRHcmVhdGVyT3JFcXVhbCB2dExlc3NPckVxdWFsIHZ0UmFuZ2UgcmRZZXN0ZXJkYXkgcmRUb2RheSByZFRvbW9ycm93IHJkVGhpc1dlZWsgcmRUaGlzTW9udGggcmRUaGlzWWVhciByZE5leHRNb250aCByZE5leHRXZWVrIHJkTGFzdFdlZWsgcmRMYXN0TW9udGggcmRXaW5kb3cgcmRGaWxlIHJkUHJpbnRlciByZHRTdHJpbmcgcmR0TnVtZXJpYyByZHRJbnRlZ2VyIHJkdERhdGUgcmR0UmVmZXJlbmNlIHJkdEFjY291bnQgcmR0VGV4dCByZHRQaWNrIHJkdFVua25vd24gcmR0TGFyZ2VJbnRlZ2VyIHJkdERvY3VtZW50IHJlT25DaGFuZ2UgcmVPbkNoYW5nZVZhbHVlcyB0dEdsb2JhbCB0dExvY2FsIHR0VXNlciB0dFN5c3RlbSBzc21Ccm93c2Ugc3NtU2VsZWN0IHNzbU11bHRpU2VsZWN0IHNzbUJyb3dzZU1vZGFsIHNtU2VsZWN0IHNtTGlrZSBzbUNhcmQgc3ROb25lIHN0QXV0aGVudGljYXRpbmcgc3RBcHByb3Zpbmcgc2N0U3RyaW5nIHNjdFN0cmVhbSBzc3RBbnNpU29ydCBzc3ROYXR1cmFsU29ydCBzdnRFcXVhbCBzdnRDb250YWluIHNvYXRTdHJpbmcgc29hdE51bWVyaWMgc29hdEludGVnZXIgc29hdERhdGV0aW1lIHNvYXRSZWZlcmVuY2VSZWNvcmQgc29hdFRleHQgc29hdFBpY2sgc29hdEJvb2xlYW4gc29hdEVEb2N1bWVudCBzb2F0QWNjb3VudCBzb2F0SW50ZWdlckNvbGxlY3Rpb24gc29hdE51bWVyaWNDb2xsZWN0aW9uIHNvYXRTdHJpbmdDb2xsZWN0aW9uIHNvYXRQaWNrQ29sbGVjdGlvbiBzb2F0RGF0ZXRpbWVDb2xsZWN0aW9uIHNvYXRCb29sZWFuQ29sbGVjdGlvbiBzb2F0UmVmZXJlbmNlUmVjb3JkQ29sbGVjdGlvbiBzb2F0RURvY3VtZW50Q29sbGVjdGlvbiBzb2F0QWNjb3VudENvbGxlY3Rpb24gc29hdENvbnRlbnRzIHNvYXRVbmtub3duIHRhckFib3J0QnlVc2VyIHRhckFib3J0QnlXb3JrZmxvd0V4Y2VwdGlvbiB0dnRBbGxXb3JkcyB0dnRFeGFjdFBocmFzZSB0dnRBbnlXb3JkIHVzTm9uZSB1c0NvbXBsZXRlZCB1c1JlZFNxdWFyZSB1c0JsdWVTcXVhcmUgdXNZZWxsb3dTcXVhcmUgdXNHcmVlblNxdWFyZSB1c09yYW5nZVNxdWFyZSB1c1B1cnBsZVNxdWFyZSB1c0ZvbGxvd1VwIHV0VW5rbm93biB1dFVzZXIgdXREZXZlbG9wZXIgdXRBZG1pbmlzdHJhdG9yIHV0U3lzdGVtRGV2ZWxvcGVyIHV0RGlzY29ubmVjdGVkIGJ0QW5kIGJ0RGV0YWlsQW5kIGJ0T3IgYnROb3RPciBidE9ubHkgdm1WaWV3IHZtU2VsZWN0IHZtTmF2aWdhdGlvbiB2c21TaW5nbGUgdnNtTXVsdGlwbGUgdnNtTXVsdGlwbGVDaGVjayB2c21Ob1NlbGVjdGlvbiB3ZmF0UHJldmlvdXMgd2ZhdE5leHQgd2ZhdENhbmNlbCB3ZmF0RmluaXNoIHdmZXBVbmRlZmluZWQgd2ZlcFRleHQzIHdmZXBUZXh0NiB3ZmVwVGV4dDkgd2ZlcFNwaW5FZGl0IHdmZXBEcm9wRG93biB3ZmVwUmFkaW9Hcm91cCB3ZmVwRmxhZyB3ZmVwVGV4dDEyIHdmZXBUZXh0MTUgd2ZlcFRleHQxOCB3ZmVwVGV4dDIxIHdmZXBUZXh0MjQgd2ZlcFRleHQyNyB3ZmVwVGV4dDMwIHdmZXBSYWRpb0dyb3VwQ29sdW1uMSB3ZmVwUmFkaW9Hcm91cENvbHVtbjIgd2ZlcFJhZGlvR3JvdXBDb2x1bW4zIHdmZXRRdWVyeVBhcmFtZXRlciB3ZmV0VGV4dCB3ZmV0RGVsaW1pdGVyIHdmZXRMYWJlbCB3cHRTdHJpbmcgd3B0SW50ZWdlciB3cHROdW1lcmljIHdwdEJvb2xlYW4gd3B0RGF0ZVRpbWUgd3B0UGljayB3cHRUZXh0IHdwdFVzZXIgd3B0VXNlckxpc3Qgd3B0RURvY3VtZW50SW5mbyB3cHRFRG9jdW1lbnRJbmZvTGlzdCB3cHRSZWZlcmVuY2VSZWNvcmRJbmZvIHdwdFJlZmVyZW5jZVJlY29yZEluZm9MaXN0IHdwdEZvbGRlckluZm8gd3B0VGFza0luZm8gd3B0Q29udGVudHMgd3B0RmlsZU5hbWUgd3B0RGF0ZSB3c3JDb21wbGV0ZSB3c3JHb05leHQgd3NyR29QcmV2aW91cyB3c3JDdXN0b20gd3NyQ2FuY2VsIHdzckdvRmluYWwgd3N0Rm9ybSB3c3RFRG9jdW1lbnQgd3N0VGFza0NhcmQgd3N0UmVmZXJlbmNlUmVjb3JkQ2FyZCB3c3RGaW5hbCB3YUFsbCB3YVBlcmZvcm1lcnMgd2FNYW51YWwgd3NiU3RhcnQgd3NiRmluaXNoIHdzYk5vdGljZSB3c2JTdGVwIHdzYkRlY2lzaW9uIHdzYldhaXQgd3NiTW9uaXRvciB3c2JTY3JpcHQgd3NiQ29ubmVjdG9yIHdzYlN1YlRhc2sgd3NiTGlmZUN5Y2xlU3RhZ2Ugd3NiUGF1c2Ugd2R0SW50ZWdlciB3ZHRGbG9hdCB3ZHRTdHJpbmcgd2R0UGljayB3ZHREYXRlVGltZSB3ZHRCb29sZWFuIHdkdFRhc2sgd2R0Sm9iIHdkdEZvbGRlciB3ZHRFRG9jdW1lbnQgd2R0UmVmZXJlbmNlUmVjb3JkIHdkdFVzZXIgd2R0R3JvdXAgd2R0Um9sZSB3ZHRJbnRlZ2VyQ29sbGVjdGlvbiB3ZHRGbG9hdENvbGxlY3Rpb24gd2R0U3RyaW5nQ29sbGVjdGlvbiB3ZHRQaWNrQ29sbGVjdGlvbiB3ZHREYXRlVGltZUNvbGxlY3Rpb24gd2R0Qm9vbGVhbkNvbGxlY3Rpb24gd2R0VGFza0NvbGxlY3Rpb24gd2R0Sm9iQ29sbGVjdGlvbiB3ZHRGb2xkZXJDb2xsZWN0aW9uIHdkdEVEb2N1bWVudENvbGxlY3Rpb24gd2R0UmVmZXJlbmNlUmVjb3JkQ29sbGVjdGlvbiB3ZHRVc2VyQ29sbGVjdGlvbiB3ZHRHcm91cENvbGxlY3Rpb24gd2R0Um9sZUNvbGxlY3Rpb24gd2R0Q29udGVudHMgd2R0VXNlckxpc3Qgd2R0U2VhcmNoRGVzY3JpcHRpb24gd2R0RGVhZExpbmUgd2R0UGlja1NldCB3ZHRBY2NvdW50Q29sbGVjdGlvbiB3aUxvdyB3aU5vcm1hbCB3aUhpZ2ggd3J0U29mdCB3cnRIYXJkIHdzSW5pdCB3c1J1bm5pbmcgd3NEb25lIHdzQ29udHJvbGxlZCB3c0Fib3J0ZWQgd3NDb250aW51ZWQgd3RtRnVsbCB3dG1Gcm9tQ3VycmVudCB3dG1Pbmx5Q3VycmVudCAiLGNsYXNzOiJBbHRTdGF0ZSBBcHBsaWNhdGlvbiBDYWxsVHlwZSBDb21wb25lbnRUb2tlbnMgQ3JlYXRlZEpvYnMgQ3JlYXRlZE5vdGljZXMgQ29udHJvbFN0YXRlIERpYWxvZ1Jlc3VsdCBEaWFsb2dzIEVEb2N1bWVudHMgRURvY3VtZW50VmVyc2lvblNvdXJjZSBGb2xkZXJzIEdsb2JhbElEcyBKb2IgSm9icyBJbnB1dFZhbHVlIExvb2tVcFJlZmVyZW5jZSBMb29rVXBSZXF1aXNpdGVOYW1lcyBMb29rVXBTZWFyY2ggT2JqZWN0IFBhcmVudENvbXBvbmVudCBQcm9jZXNzZXMgUmVmZXJlbmNlcyBSZXF1aXNpdGUgUmVwb3J0TmFtZSBSZXBvcnRzIFJlc3VsdCBTY3JpcHRzIFNlYXJjaGVzIFNlbGVjdGVkQXR0YWNobWVudHMgU2VsZWN0ZWRJdGVtcyBTZWxlY3RNb2RlIFNlbmRlciBTZXJ2ZXJFdmVudHMgU2VydmljZUZhY3RvcnkgU2hpZnRTdGF0ZSBTdWJUYXNrIFN5c3RlbURpYWxvZ3MgVGFza3MgV2l6YXJkIFdpemFyZHMgV29yayDQktGL0LfQvtCy0KHQv9C+0YHQvtCxINCY0LzRj9Ce0YLRh9C10YLQsCDQoNC10LrQstCX0L3QsNGHICIsbGl0ZXJhbDoibnVsbCB0cnVlIGZhbHNlIG5pbCAifSxjPXtiZWdpbjoiXFwuXFxzKiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLGtleXdvcmRzOnUscmVsZXZhbmNlOjB9LGQ9e2NsYXNzTmFtZToidHlwZSIsYmVnaW46IjpbIFxcdF0qKCIrbi50cmltKCkucmVwbGFjZSgvXHMvZywifCIpKyIpIixlbmQ6IlsgXFx0XSo9IixleGNsdWRlRW5kOiEwfSxfPXtjbGFzc05hbWU6InZhcmlhYmxlIixsZXhlbWVzOnQsa2V5d29yZHM6dSxiZWdpbjp0LHJlbGV2YW5jZTowLGNvbnRhaW50czpbZCxjXX07cmV0dXJue2FsaWFzZXM6WyJpc2JsIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxsZXhlbWVzOnQsa2V5d29yZHM6dSxpbGxlZ2FsOiJcXCR8XFw/fCV8LHw7JHx+fCN8QHw8LyIsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSpcXCgiLGVuZDoiXFwpJCIscmV0dXJuQmVnaW46ITAsbGV4ZW1lczp0LGtleXdvcmRzOnUsaWxsZWdhbDoiW1xcW1xcXVxcfFxcJFxcPyUsfiNAXSIsY29udGFpbnM6W3tjbGFzc05hbWU6InRpdGxlIixsZXhlbWVzOnQsa2V5d29yZHM6e2J1aWx0X2luOiJBZGRTdWJTdHJpbmcgQWRqdXN0TGluZUJyZWFrcyBBbW91bnRJbldvcmRzIEFuYWx5c2lzIEFycmF5RGltQ291bnQgQXJyYXlIaWdoQm91bmQgQXJyYXlMb3dCb3VuZCBBcnJheU9mIEFycmF5UmVEaW0gQXNzZXJ0IEFzc2lnbmVkIEJlZ2luT2ZNb250aCBCZWdpbk9mUGVyaW9kIEJ1aWxkUHJvZmlsaW5nT3BlcmF0aW9uQW5hbHlzaXMgQ2FsbFByb2NlZHVyZSBDYW5SZWFkRmlsZSBDQXJyYXlFbGVtZW50IENEYXRhU2V0UmVxdWlzaXRlIENoYW5nZURhdGUgQ2hhbmdlUmVmZXJlbmNlRGF0YXNldCBDaGFyIENoYXJQb3MgQ2hlY2tQYXJhbSBDaGVja1BhcmFtVmFsdWUgQ29tcGFyZVN0cmluZ3MgQ29uc3RhbnRFeGlzdHMgQ29udHJvbFN0YXRlIENvbnZlcnREYXRlU3RyIENvcHkgQ29weUZpbGUgQ3JlYXRlQXJyYXkgQ3JlYXRlQ2FjaGVkUmVmZXJlbmNlIENyZWF0ZUNvbm5lY3Rpb24gQ3JlYXRlRGlhbG9nIENyZWF0ZUR1YWxMaXN0RGlhbG9nIENyZWF0ZUVkaXRvciBDcmVhdGVFeGNlcHRpb24gQ3JlYXRlRmlsZSBDcmVhdGVGb2xkZXJEaWFsb2cgQ3JlYXRlSW5wdXREaWFsb2cgQ3JlYXRlTGlua0ZpbGUgQ3JlYXRlTGlzdCBDcmVhdGVMb2NrIENyZWF0ZU1lbW9yeURhdGFTZXQgQ3JlYXRlT2JqZWN0IENyZWF0ZU9wZW5EaWFsb2cgQ3JlYXRlUHJvZ3Jlc3MgQ3JlYXRlUXVlcnkgQ3JlYXRlUmVmZXJlbmNlIENyZWF0ZVJlcG9ydCBDcmVhdGVTYXZlRGlhbG9nIENyZWF0ZVNjcmlwdCBDcmVhdGVTUUxQaXZvdEZ1bmN0aW9uIENyZWF0ZVN0cmluZ0xpc3QgQ3JlYXRlVHJlZUxpc3RTZWxlY3REaWFsb2cgQ1NlbGVjdFNRTCBDU1FMIENTdWJTdHJpbmcgQ3VycmVudFVzZXJJRCBDdXJyZW50VXNlck5hbWUgQ3VycmVudFZlcnNpb24gRGF0YVNldExvY2F0ZUV4IERhdGVEaWZmIERhdGVUaW1lRGlmZiBEYXRlVG9TdHIgRGF5T2ZXZWVrIERlbGV0ZUZpbGUgRGlyZWN0b3J5RXhpc3RzIERpc2FibGVDaGVja0FjY2Vzc1JpZ2h0cyBEaXNhYmxlQ2hlY2tGdWxsU2hvd2luZ1Jlc3RyaWN0aW9uIERpc2FibGVNYXNzVGFza1NlbmRpbmdSZXN0cmljdGlvbnMgRHJvcFRhYmxlIER1cGVTdHJpbmcgRWRpdFRleHQgRW5hYmxlQ2hlY2tBY2Nlc3NSaWdodHMgRW5hYmxlQ2hlY2tGdWxsU2hvd2luZ1Jlc3RyaWN0aW9uIEVuYWJsZU1hc3NUYXNrU2VuZGluZ1Jlc3RyaWN0aW9ucyBFbmRPZk1vbnRoIEVuZE9mUGVyaW9kIEV4Y2VwdGlvbkV4aXN0cyBFeGNlcHRpb25zT2ZmIEV4Y2VwdGlvbnNPbiBFeGVjdXRlIEV4ZWN1dGVQcm9jZXNzIEV4aXQgRXhwYW5kRW52aXJvbm1lbnRWYXJpYWJsZXMgRXh0cmFjdEZpbGVEcml2ZSBFeHRyYWN0RmlsZUV4dCBFeHRyYWN0RmlsZU5hbWUgRXh0cmFjdEZpbGVQYXRoIEV4dHJhY3RQYXJhbXMgRmlsZUV4aXN0cyBGaWxlU2l6ZSBGaW5kRmlsZSBGaW5kU3ViU3RyaW5nIEZpcm1Db250ZXh0IEZvcmNlRGlyZWN0b3JpZXMgRm9ybWF0IEZvcm1hdERhdGUgRm9ybWF0TnVtZXJpYyBGb3JtYXRTUUxEYXRlIEZvcm1hdFN0cmluZyBGcmVlRXhjZXB0aW9uIEdldENvbXBvbmVudCBHZXRDb21wb25lbnRMYXVuY2hQYXJhbSBHZXRDb25zdGFudCBHZXRMYXN0RXhjZXB0aW9uIEdldFJlZmVyZW5jZVJlY29yZCBHZXRSZWZUeXBlQnlSZWZJRCBHZXRUYWJsZUlEIEdldFRlbXBGb2xkZXIgSWZUaGVuIEluIEluZGV4T2YgSW5wdXREaWFsb2cgSW5wdXREaWFsb2dFeCBJbnRlcmFjdGl2ZU1vZGUgSXNGaWxlTG9ja2VkIElzR3JhcGhpY0ZpbGUgSXNOdW1lcmljIExlbmd0aCBMb2FkU3RyaW5nIExvYWRTdHJpbmdGbXQgTG9jYWxUaW1lVG9VVEMgTG93ZXJDYXNlIE1heCBNZXNzYWdlQm94IE1lc3NhZ2VCb3hFeCBNaW1lRGVjb2RlQmluYXJ5IE1pbWVEZWNvZGVTdHJpbmcgTWltZUVuY29kZUJpbmFyeSBNaW1lRW5jb2RlU3RyaW5nIE1pbiBNb25leUluV29yZHMgTW92ZUZpbGUgTmV3SUQgTm93IE9wZW5GaWxlIE9yZCBQcmVjaXNpb24gUmFpc2UgUmVhZENlcnRpZmljYXRlRnJvbUZpbGUgUmVhZEZpbGUgUmVmZXJlbmNlQ29kZUJ5SUQgUmVmZXJlbmNlTnVtYmVyIFJlZmVyZW5jZVJlcXVpc2l0ZU1vZGUgUmVmZXJlbmNlUmVxdWlzaXRlVmFsdWUgUmVnaW9uRGF0ZVNldHRpbmdzIFJlZ2lvbk51bWJlclNldHRpbmdzIFJlZ2lvblRpbWVTZXR0aW5ncyBSZWdSZWFkIFJlZ1dyaXRlIFJlbmFtZUZpbGUgUmVwbGFjZSBSb3VuZCBTZWxlY3RTZXJ2ZXJDb2RlIFNlbGVjdFNRTCBTZXJ2ZXJEYXRlVGltZSBTZXRDb25zdGFudCBTZXRNYW5hZ2VkRm9sZGVyRmllbGRzU3RhdGUgU2hvd0NvbnN0YW50c0lucHV0RGlhbG9nIFNob3dNZXNzYWdlIFNsZWVwIFNwbGl0IFNRTCBTUUwyWExTVEFCIFNRTFByb2ZpbGluZ1NlbmRSZXBvcnQgU3RyVG9EYXRlIFN1YlN0cmluZyBTdWJTdHJpbmdDb3VudCBTeXN0ZW1TZXR0aW5nIFRpbWUgVGltZURpZmYgVG9kYXkgVHJhbnNsaXRlcmF0ZSBUcmltIFVwcGVyQ2FzZSBVc2VyU3RhdHVzIFVUQ1RvTG9jYWxUaW1lIFZhbGlkYXRlWE1MIFZhcklzQ2xlYXIgVmFySXNFbXB0eSBWYXJJc051bGwgV29ya1RpbWVEaWZmIFdyaXRlRmlsZSBXcml0ZUZpbGVFeCBXcml0ZU9iamVjdEhpc3Rvcnkg0JDQvdCw0LvQuNC3INCR0LDQt9Cw0JTQsNC90L3Ri9GFINCR0LvQvtC60JXRgdGC0Ywg0JHQu9C+0LrQldGB0YLRjNCg0LDRgdGIINCR0LvQvtC60JjQvdGE0L4g0JHQu9C+0LrQodC90Y/RgtGMINCR0LvQvtC60KHQvdGP0YLRjNCg0LDRgdGIINCR0LvQvtC60KPRgdGC0LDQvdC+0LLQuNGC0Ywg0JLQstC+0LQg0JLQstC+0LTQnNC10L3RjiDQktC10LTQoSDQktC10LTQodC/0YAg0JLQtdGA0YXQvdGP0Y/Qk9GA0LDQvdC40YbQsNCc0LDRgdGB0LjQstCwINCS0L3QtdGI0J/RgNC+0LPRgCDQktC+0YHRgdGCINCS0YDQtdC80LXQvdC90LDRj9Cf0LDQv9C60LAg0JLRgNC10LzRjyDQktGL0LHQvtGAU1FMINCS0YvQsdGA0LDRgtGM0JfQsNC/0LjRgdGMINCS0YvQtNC10LvQuNGC0YzQodGC0YAg0JLRi9C30LLQsNGC0Ywg0JLRi9C/0L7Qu9C90LjRgtGMINCS0YvQv9Cf0YDQvtCz0YAg0JPRgNCw0YTQuNGH0LXRgdC60LjQudCk0LDQudC7INCT0YDRg9C/0L/QsNCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+INCU0LDRgtCw0JLRgNC10LzRj9Ch0LXRgNCyINCU0LXQvdGM0J3QtdC00LXQu9C4INCU0LjQsNC70L7Qs9CU0LDQndC10YIg0JTQu9C40L3QsNCh0YLRgCDQlNC+0LHQn9C+0LTRgdGC0YAg0JXQn9GD0YHRgtC+INCV0YHQu9C40KLQviDQldCn0LjRgdC70L4g0JfQsNC80J/QvtC00YHRgtGAINCX0LDQv9C40YHRjNCh0L/RgNCw0LLQvtGH0L3QuNC60LAg0JfQvdCw0YfQn9C+0LvRj9Ch0L/RgCDQmNCU0KLQuNC/0KHQv9GAINCY0LfQstC70LXRh9GM0JTQuNGB0Log0JjQt9Cy0LvQtdGH0YzQmNC80Y/QpNCw0LnQu9CwINCY0LfQstC70LXRh9GM0J/Rg9GC0Ywg0JjQt9Cy0LvQtdGH0YzQoNCw0YHRiNC40YDQtdC90LjQtSDQmNC30LzQlNCw0YIg0JjQt9C80LXQvdC40YLRjNCg0LDQt9C80LXRgNCc0LDRgdGB0LjQstCwINCY0LfQvNC10YDQtdC90LjQudCc0LDRgdGB0LjQstCwINCY0LzRj9Ce0YDQsyDQmNC80Y/Qn9C+0LvRj9Ch0L/RgCDQmNC90LTQtdC60YEg0JjQvdC00LjQutCw0YLQvtGA0JfQsNC60YDRi9GC0Ywg0JjQvdC00LjQutCw0YLQvtGA0J7RgtC60YDRi9GC0Ywg0JjQvdC00LjQutCw0YLQvtGA0KjQsNCzINCY0L3RgtC10YDQsNC60YLQuNCy0L3Ri9C50KDQtdC20LjQvCDQmNGC0L7Qs9Ci0LHQu9Ch0L/RgCDQmtC+0LTQktC40LTQktC10LTQodC/0YAg0JrQvtC00JLQuNC00KHQv9GA0J/QvtCY0JQg0JrQvtC00J/QvkFuYWxpdCDQmtC+0LTQodC40LzQstC+0LvQsCDQmtC+0LTQodC/0YAg0JrQvtC70J/QvtC00YHRgtGAINCa0L7Qu9Cf0YDQvtC/INCa0L7QvdCc0LXRgSDQmtC+0L3RgdGCINCa0L7QvdGB0YLQldGB0YLRjCDQmtC+0L3RgdGC0JfQvdCw0Ycg0JrQvtC90KLRgNCw0L0g0JrQvtC/0LjRgNC+0LLQsNGC0YzQpNCw0LnQuyDQmtC+0L/QuNGP0KHRgtGAINCa0J/QtdGA0LjQvtC0INCa0KHRgtGA0KLQsdC70KHQv9GAINCc0LDQutGBINCc0LDQutGB0KHRgtGA0KLQsdC70KHQv9GAINCc0LDRgdGB0LjQsiDQnNC10L3RjiDQnNC10L3RjtCg0LDRgdGIINCc0LjQvSDQndCw0LHQvtGA0JTQsNC90L3Ri9GF0J3QsNC50YLQuNCg0LDRgdGIINCd0LDQuNC80JLQuNC00KHQv9GAINCd0LDQuNC80J/QvkFuYWxpdCDQndCw0LjQvNCh0L/RgCDQndCw0YHRgtGA0L7QuNGC0YzQn9C10YDQtdCy0L7QtNGL0KHRgtGA0L7QuiDQndCw0YfQnNC10YEg0J3QsNGH0KLRgNCw0L0g0J3QuNC20L3Rj9GP0JPRgNCw0L3QuNGG0LDQnNCw0YHRgdC40LLQsCDQndC+0LzQtdGA0KHQv9GAINCd0J/QtdGA0LjQvtC0INCe0LrQvdC+INCe0LrRgCDQntC60YDRg9C20LXQvdC40LUg0J7RgtC70JjQvdGE0JTQvtCx0LDQstC40YLRjCDQntGC0LvQmNC90YTQo9C00LDQu9C40YLRjCDQntGC0YfQtdGCINCe0YLRh9C10YLQkNC90LDQuyDQntGC0YfQtdGC0JjQvdGCINCf0LDQv9C60LDQodGD0YnQtdGB0YLQstGD0LXRgiDQn9Cw0YPQt9CwINCf0JLRi9Cx0L7RgFNRTCDQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjNCk0LDQudC7INCf0LXRgNC10LzQtdC90L3Ri9C1INCf0LXRgNC10LzQtdGB0YLQuNGC0YzQpNCw0LnQuyDQn9C+0LTRgdGC0YAg0J/QvtC40YHQutCf0L7QtNGB0YLRgCDQn9C+0LjRgdC60KHRgtGAINCf0L7Qu9GD0YfQuNGC0YzQmNCU0KLQsNCx0LvQuNGG0Ysg0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L4g0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JjQlCDQn9C+0LvRjNC30L7QstCw0YLQtdC70YzQmNC80Y8g0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0KHRgtCw0YLRg9GBINCf0YDQtdGA0LLQsNGC0Ywg0J/RgNC+0LLQtdGA0LjRgtGM0J/QsNGA0LDQvNC10YLRgCDQn9GA0L7QstC10YDQuNGC0YzQn9Cw0YDQsNC80LXRgtGA0JfQvdCw0Ycg0J/RgNC+0LLQtdGA0LjRgtGM0KPRgdC70L7QstC40LUg0KDQsNC30LHQodGC0YAg0KDQsNC30L3QktGA0LXQvNGPINCg0LDQt9C90JTQsNGCINCg0LDQt9C90JTQsNGC0LDQktGA0LXQvNGPINCg0LDQt9C90KDQsNCx0JLRgNC10LzRjyDQoNC10LPQo9GB0YLQktGA0LXQvCDQoNC10LPQo9GB0YLQlNCw0YIg0KDQtdCz0KPRgdGC0KfRgdC7INCg0LXQtNCi0LXQutGB0YIg0KDQtdC10YHRgtGA0JfQsNC/0LjRgdGMINCg0LXQtdGB0YLRgNCh0L/QuNGB0L7QutCY0LzQtdC90J/QsNGA0LDQvCDQoNC10LXRgdGC0YDQp9GC0LXQvdC40LUg0KDQtdC60LLQodC/0YAg0KDQtdC60LLQodC/0YDQn9GAINCh0LXQs9C+0LTQvdGPINCh0LXQudGH0LDRgSDQodC10YDQstC10YAg0KHQtdGA0LLQtdGA0J/RgNC+0YbQtdGB0YHQmNCUINCh0LXRgNGC0LjRhNC40LrQsNGC0KTQsNC50LvQodGH0LjRgtCw0YLRjCDQodC20J/RgNC+0LEg0KHQuNC80LLQvtC7INCh0LjRgdGC0LXQvNCw0JTQuNGA0LXQutGC0YPQvNCa0L7QtCDQodC40YHRgtC10LzQsNCY0L3RhNC+0YDQvNCw0YbQuNGPINCh0LjRgdGC0LXQvNCw0JrQvtC0INCh0L7QtNC10YDQttC40YIg0KHQvtC10LTQuNC90LXQvdC40LXQl9Cw0LrRgNGL0YLRjCDQodC+0LXQtNC40L3QtdC90LjQtdCe0YLQutGA0YvRgtGMINCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCzINCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0JLRi9Cx0L7RgNCw0JjQt9CU0LLRg9GF0KHQv9C40YHQutC+0LIg0KHQvtC30LTQsNGC0YzQlNC40LDQu9C+0LPQktGL0LHQvtGA0LDQn9Cw0L/QutC4INCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0J7RgtC60YDRi9GC0LjRj9Ck0LDQudC70LAg0KHQvtC30LTQsNGC0YzQlNC40LDQu9C+0LPQodC+0YXRgNCw0L3QtdC90LjRj9Ck0LDQudC70LAg0KHQvtC30LTQsNGC0YzQl9Cw0L/RgNC+0YEg0KHQvtC30LTQsNGC0YzQmNC90LTQuNC60LDRgtC+0YAg0KHQvtC30LTQsNGC0YzQmNGB0LrQu9GO0YfQtdC90LjQtSDQodC+0LfQtNCw0YLRjNCa0Y3RiNC40YDQvtCy0LDQvdC90YvQudCh0L/RgNCw0LLQvtGH0L3QuNC6INCh0L7Qt9C00LDRgtGM0JzQsNGB0YHQuNCyINCh0L7Qt9C00LDRgtGM0J3QsNCx0L7RgNCU0LDQvdC90YvRhSDQodC+0LfQtNCw0YLRjNCe0LHRitC10LrRgiDQodC+0LfQtNCw0YLRjNCe0YLRh9C10YIg0KHQvtC30LTQsNGC0YzQn9Cw0L/QutGDINCh0L7Qt9C00LDRgtGM0KDQtdC00LDQutGC0L7RgCDQodC+0LfQtNCw0YLRjNCh0L7QtdC00LjQvdC10L3QuNC1INCh0L7Qt9C00LDRgtGM0KHQv9C40YHQvtC6INCh0L7Qt9C00LDRgtGM0KHQv9C40YHQvtC60KHRgtGA0L7QuiDQodC+0LfQtNCw0YLRjNCh0L/RgNCw0LLQvtGH0L3QuNC6INCh0L7Qt9C00LDRgtGM0KHRhtC10L3QsNGA0LjQuSDQodC+0LfQtNCh0L/RgCDQodC+0YHRgtCh0L/RgCDQodC+0YXRgCDQodC+0YXRgNCh0L/RgCDQodC/0LjRgdC+0LrQodC40YHRgtC10Lwg0KHQv9GAINCh0L/RgNCw0LLQvtGH0L3QuNC6INCh0L/RgNCR0LvQvtC60JXRgdGC0Ywg0KHQv9GA0JHQu9C+0LrQodC90Y/RgtGMINCh0L/RgNCR0LvQvtC60KHQvdGP0YLRjNCg0LDRgdGIINCh0L/RgNCR0LvQvtC60KPRgdGC0LDQvdC+0LLQuNGC0Ywg0KHQv9GA0JjQt9C80J3QsNCx0JTQsNC9INCh0L/RgNCa0L7QtCDQodC/0YDQndC+0LzQtdGAINCh0L/RgNCe0LHQvdC+0LLQuNGC0Ywg0KHQv9GA0J7RgtC60YDRi9GC0Ywg0KHQv9GA0J7RgtC80LXQvdC40YLRjCDQodC/0YDQn9Cw0YDQsNC8INCh0L/RgNCf0L7Qu9C10JfQvdCw0Ycg0KHQv9GA0J/QvtC70LXQmNC80Y8g0KHQv9GA0KDQtdC60LIg0KHQv9GA0KDQtdC60LLQktCy0LXQtNCX0L0g0KHQv9GA0KDQtdC60LLQndC+0LLRi9C1INCh0L/RgNCg0LXQutCy0J/RgCDQodC/0YDQoNC10LrQstCf0YDQtdC00JfQvSDQodC/0YDQoNC10LrQstCg0LXQttC40Lwg0KHQv9GA0KDQtdC60LLQotC40L/QotC10LrRgdGCINCh0L/RgNCh0L7Qt9C00LDRgtGMINCh0L/RgNCh0L7RgdGCINCh0L/RgNCh0L7RhdGA0LDQvdC40YLRjCDQodC/0YDQotCx0LvQmNGC0L7QsyDQodC/0YDQotCx0LvQodGC0YAg0KHQv9GA0KLQsdC70KHRgtGA0JrQvtC7INCh0L/RgNCi0LHQu9Ch0YLRgNCc0LDQutGBINCh0L/RgNCi0LHQu9Ch0YLRgNCc0LjQvSDQodC/0YDQotCx0LvQodGC0YDQn9GA0LXQtCDQodC/0YDQotCx0LvQodGC0YDQodC70LXQtCDQodC/0YDQotCx0LvQodGC0YDQodC+0LfQtCDQodC/0YDQotCx0LvQodGC0YDQo9C0INCh0L/RgNCi0LXQutCf0YDQtdC00YHRgiDQodC/0YDQo9C00LDQu9C40YLRjCDQodGA0LDQstC90LjRgtGM0KHRgtGAINCh0YLRgNCS0LXRgNGF0KDQtdCz0LjRgdGC0YAg0KHRgtGA0J3QuNC20L3QoNC10LPQuNGB0YLRgCDQodGC0YDQotCx0LvQodC/0YAg0KHRg9C80J/RgNC+0L8g0KHRhtC10L3QsNGA0LjQuSDQodGG0LXQvdCw0YDQuNC50J/QsNGA0LDQvCDQotC10LrQktC10YDRgdC40Y8g0KLQtdC60J7RgNCzINCi0L7Rh9C9INCi0YDQsNC9INCi0YDQsNC90YHQu9C40YLQtdGA0LDRhtC40Y8g0KPQtNCw0LvQuNGC0YzQotCw0LHQu9C40YbRgyDQo9C00LDQu9C40YLRjNCk0LDQudC7INCj0LTQodC/0YAg0KPQtNCh0YLRgNCi0LHQu9Ch0L/RgCDQo9GB0YIg0KPRgdGC0LDQvdC+0LLQutC40JrQvtC90YHRgtCw0L3RgiDQpNCw0LnQu9CQ0YLRgNC40LHRg9GC0KHRh9C40YLQsNGC0Ywg0KTQsNC50LvQkNGC0YDQuNCx0YPRgtCj0YHRgtCw0L3QvtCy0LjRgtGMINCk0LDQudC70JLRgNC10LzRjyDQpNCw0LnQu9CS0YDQtdC80Y/Qo9GB0YLQsNC90L7QstC40YLRjCDQpNCw0LnQu9CS0YvQsdGA0LDRgtGMINCk0LDQudC70JfQsNC90Y/RgiDQpNCw0LnQu9CX0LDQv9C40YHQsNGC0Ywg0KTQsNC50LvQmNGB0LrQsNGC0Ywg0KTQsNC50LvQmtC+0L/QuNGA0L7QstCw0YLRjCDQpNCw0LnQu9Cc0L7QttC90L7Qp9C40YLQsNGC0Ywg0KTQsNC50LvQntGC0LrRgNGL0YLRjCDQpNCw0LnQu9Cf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINCk0LDQudC70J/QtdGA0LXQutC+0LTQuNGA0L7QstCw0YLRjCDQpNCw0LnQu9Cf0LXRgNC10LzQtdGB0YLQuNGC0Ywg0KTQsNC50LvQn9GA0L7RgdC80L7RgtGA0LXRgtGMINCk0LDQudC70KDQsNC30LzQtdGAINCk0LDQudC70KHQvtC30LTQsNGC0Ywg0KTQsNC50LvQodGB0YvQu9C60LDQodC+0LfQtNCw0YLRjCDQpNCw0LnQu9Ch0YPRidC10YHRgtCy0YPQtdGCINCk0LDQudC70KHRh9C40YLQsNGC0Ywg0KTQsNC50LvQo9C00LDQu9C40YLRjCDQpNC80YJTUUzQlNCw0YIg0KTQvNGC0JTQsNGCINCk0LzRgtCh0YLRgCDQpNC80YLQp9GB0Lsg0KTQvtGA0LzQsNGCINCm0JzQsNGB0YHQuNCy0K3Qu9C10LzQtdC90YIg0KbQndCw0LHQvtGA0JTQsNC90L3Ri9GF0KDQtdC60LLQuNC30LjRgiDQptCf0L7QtNGB0YLRgCAifSxiZWdpbjoiW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSpcXCgiLGVuZDoiXFwoIixyZXR1cm5CZWdpbjohMCxleGNsdWRlRW5kOiEwfSxjLF8sbyxyLGxdfSxkLGMsXyxvLHIsbF19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2phdmEuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHZhciBzdGF0aWMgbnVsbCBpZiBjb25zdCBmb3IgdHJ1ZSB3aGlsZSBsb25nIHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByb3RlY3RlZCBwdWJsaWMgcHJpdmF0ZSBtb2R1bGUgcmVxdWlyZXMgZXhwb3J0cyBkbyIsbj17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGIoMFtiQl0oWzAxXStbMDFfXStbMDFdK3xbMDFdKyl8MFt4WF0oW2EtZkEtRjAtOV0rW2EtZkEtRjAtOV9dK1thLWZBLUYwLTldK3xbYS1mQS1GMC05XSspfCgoW1xcZF0rW1xcZF9dK1tcXGRdK3xbXFxkXSspKFxcLihbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykpP3xcXC4oW1xcZF0rW1xcZF9dK1tcXGRdK3xbXFxkXSspKShbZUVdWy0rXT9cXGQrKT8pW2xMZkZdPyIscmVsZXZhbmNlOjB9O3JldHVybnthbGlhc2VzOlsianNwIl0sa2V5d29yZHM6dCxpbGxlZ2FsOi88XC98Iy8sY29udGFpbnM6W2UuQ09NTUVOVCgiL1xcKlxcKiIsIlxcKi8iLHtyZWxldmFuY2U6MCxjb250YWluczpbe2JlZ2luOi9cdytALyxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiQFtBLVphLXpdKyJ9XX0pLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6ImNsYXNzIGludGVyZmFjZSIsaWxsZWdhbDovWzoiXFtcXV0vLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7YmVnaW5LZXl3b3JkczoibmV3IHRocm93IHJldHVybiBlbHNlIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoW8OALcq4YS16QS1aXyRdW8OALcq4YS16QS1aXyQwLTldKig8W8OALcq4YS16QS1aXyRdW8OALcq4YS16QS1aXyQwLTldKihcXHMqLFxccypbw4AtyrhhLXpBLVpfJF1bw4AtyrhhLXpBLVpfJDAtOV0qKSo+KT9cXHMrKSsiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAsZW5kOi9bezs9XS8sZXhjbHVkZUVuZDohMCxrZXl3b3Jkczp0LGNvbnRhaW5zOlt7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMqXFwoIixyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dCxyZWxldmFuY2U6MCxjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LG4se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkBbQS1aYS16XSsifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2phdmFzY3JpcHQuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLG49e2tleXdvcmQ6ImluIG9mIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCBleHBvcnQgc3VwZXIgZGVidWdnZXIgYXMgYXN5bmMgYXdhaXQgc3RhdGljIGltcG9ydCBmcm9tIGFzIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eSIsYnVpbHRfaW46ImV2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50IGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yIEV2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciBUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSBtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgUHJvbWlzZSJ9LHI9e2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbe2JlZ2luOiJcXGIoMFtiQl1bMDFdKykifSx7YmVnaW46IlxcYigwW29PXVswLTddKykifSx7YmVnaW46ZS5DX05VTUJFUl9SRX1dLHJlbGV2YW5jZTowfSxvPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiXFwkXFx7IixlbmQ6IlxcfSIsa2V5d29yZHM6bixjb250YWluczpbXX0scz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsb119O28uY29udGFpbnM9W2UuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHMscixlLlJFR0VYUF9NT0RFXTt2YXIgaT1vLmNvbnRhaW5zLmNvbmNhdChbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREVdKTtyZXR1cm57YWxpYXNlczpbImpzIiwianN4Il0sa2V5d29yZHM6bixjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIscmVsZXZhbmNlOjEwLGJlZ2luOi9eXHMqWyciXXVzZSAoc3RyaWN0fGFzbSlbJyJdL30se2NsYXNzTmFtZToibWV0YSIsYmVnaW46L14jIS8sZW5kOi8kL30sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUscyxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxyLHtiZWdpbjovW3ssXVxzKi8scmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjp0KyJcXHMqOiIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHIiLGJlZ2luOnQscmVsZXZhbmNlOjB9XX1dfSx7YmVnaW46IigiK2UuUkVfU1RBUlRFUlNfUkUrInxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxiKVxccyoiLGtleXdvcmRzOiJyZXR1cm4gdGhyb3cgY2FzZSIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUkVHRVhQX01PREUse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoXFwoLio/XFwpfCIrdCsiKVxccyo9PiIscmV0dXJuQmVnaW46ITAsZW5kOiJcXHMqPT4iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46dH0se2JlZ2luOi9cKFxzKlwpL30se2JlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6bixjb250YWluczppfV19XX0se2JlZ2luOi88LyxlbmQ6LyhcL1x3K3xcdytcLyk+LyxzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2JlZ2luOi88XHcrXHMqXC8+Lyxza2lwOiEwfSx7YmVnaW46LzxcdysvLGVuZDovKFwvXHcrfFx3K1wvKT4vLHNraXA6ITAsY29udGFpbnM6W3tiZWdpbjovPFx3K1xzKlwvPi8sc2tpcDohMH0sInNlbGYiXX1dfV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOi9cey8sZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46dH0pLHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxjb250YWluczppfV0saWxsZWdhbDovXFt8JS99LHtiZWdpbjovXCRbKC5dL30sZS5NRVRIT0RfR1VBUkQse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIixlbmQ6L1t7Oz1dLyxleGNsdWRlRW5kOiEwLGlsbGVnYWw6L1s6IlxbXF1dLyxjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImV4dGVuZHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbktleXdvcmRzOiJjb25zdHJ1Y3RvciBnZXQgc2V0IixlbmQ6L1x7LyxleGNsdWRlRW5kOiEwfV0saWxsZWdhbDovIyg/ISEpL319fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamJvc3MtY2xpLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17YmVnaW46L1tcdy1dKyAqPS8scmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHIiLGJlZ2luOi9bXHctXSsvfV19LG49e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLGNvbnRhaW5zOlt0XSxyZWxldmFuY2U6MH0scj17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46LzpbXHdcLS5dKy8scmVsZXZhbmNlOjB9LG89e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXEIoKFtcLy5dKVtcd1wtLlwvPV0rKSsvfSxzPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46Ly0tW1x3XC09XC9dKy99O3JldHVybnthbGlhc2VzOlsid2lsZGZseS1jbGkiXSxsZXhlbWVzOiJbYS16LV0rIixrZXl3b3Jkczp7a2V5d29yZDoiYWxpYXMgYmF0Y2ggY2QgY2xlYXIgY29tbWFuZCBjb25uZWN0IGNvbm5lY3Rpb24tZmFjdG9yeSBjb25uZWN0aW9uLWluZm8gZGF0YS1zb3VyY2UgZGVwbG95IGRlcGxveW1lbnQtaW5mbyBkZXBsb3ltZW50LW92ZXJsYXkgZWNobyBlY2hvLWRtciBoZWxwIGhpc3RvcnkgaWYgamRiYy1kcml2ZXItaW5mbyBqbXMtcXVldWV8MjAgam1zLXRvcGljfDIwIGxzIHBhdGNoIHB3ZCBxdWl0IHJlYWQtYXR0cmlidXRlIHJlYWQtb3BlcmF0aW9uIHJlbG9hZCByb2xsb3V0LXBsYW4gcnVuLWJhdGNoIHNldCBzaHV0ZG93biB0cnkgdW5hbGlhcyB1bmRlcGxveSB1bnNldCB2ZXJzaW9uIHhhLWRhdGEtc291cmNlIixsaXRlcmFsOiJ0cnVlIGZhbHNlIn0sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxzLHIsbyxuXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvanNvbi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2xpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9LG49W2UuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFXSxyPXtlbmQ6IiwiLGVuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6bixrZXl3b3Jkczp0fSxvPXtiZWdpbjoieyIsZW5kOiJ9Iixjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46LyIvLGVuZDovIi8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0saWxsZWdhbDoiXFxuIn0sZS5pbmhlcml0KHIse2JlZ2luOi86L30pXSxpbGxlZ2FsOiJcXFMifSxzPXtiZWdpbjoiXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6W2UuaW5oZXJpdChyKV0saWxsZWdhbDoiXFxTIn07cmV0dXJuIG4uc3BsaWNlKG4ubGVuZ3RoLDAsbyxzKSx7Y29udGFpbnM6bixrZXl3b3Jkczp0LGlsbGVnYWw6IlxcUyJ9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2p1bGlhLXJlcGwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46L15qdWxpYT4vLHJlbGV2YW5jZToxMCxzdGFydHM6e2VuZDovXig/IVsgXXs2fSkvLHN1Ykxhbmd1YWdlOiJqdWxpYSJ9LGFsaWFzZXM6WyJqbGRvY3Rlc3QiXX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6ImluIGlzYSB3aGVyZSBiYXJlbW9kdWxlIGJlZ2luIGJyZWFrIGNhdGNoIGNjYWxsIGNvbnN0IGNvbnRpbnVlIGRvIGVsc2UgZWxzZWlmIGVuZCBleHBvcnQgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gZ2xvYmFsIGlmIGltcG9ydCBpbXBvcnRhbGwgbGV0IGxvY2FsIG1hY3JvIG1vZHVsZSBxdW90ZSByZXR1cm4gdHJ1ZSB0cnkgdXNpbmcgd2hpbGUgdHlwZSBpbW11dGFibGUgYWJzdHJhY3QgYml0c3R5cGUgdHlwZWFsaWFzICIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBBUkdTIENfTlVMTCBEZXZOdWxsIEVORElBTl9CT00gRU5WIEkgSW5mIEluZjE2IEluZjMyIEluZjY0IEluc2VydGlvblNvcnQgSlVMSUFfSE9NRSBMT0FEX1BBVEggTWVyZ2VTb3J0IE5hTiBOYU4xNiBOYU4zMiBOYU42NCBQUk9HUkFNX0ZJTEUgUXVpY2tTb3J0IFJvdW5kRG93biBSb3VuZEZyb21aZXJvIFJvdW5kTmVhcmVzdCBSb3VuZE5lYXJlc3RUaWVzQXdheSBSb3VuZE5lYXJlc3RUaWVzVXAgUm91bmRUb1plcm8gUm91bmRVcCBTVERFUlIgU1RESU4gU1RET1VUIFZFUlNJT04gY2F0YWxhbiBlfDAgZXV8MCBldWxlcmdhbW1hIGdvbGRlbiBpbSBub3RoaW5nIHBpIM6zIM+AIM+GICIsYnVpbHRfaW46IkFOWSBBYnN0cmFjdEFycmF5IEFic3RyYWN0Q2hhbm5lbCBBYnN0cmFjdEZsb2F0IEFic3RyYWN0TWF0cml4IEFic3RyYWN0Uk5HIEFic3RyYWN0U2VyaWFsaXplciBBYnN0cmFjdFNldCBBYnN0cmFjdFNwYXJzZUFycmF5IEFic3RyYWN0U3BhcnNlTWF0cml4IEFic3RyYWN0U3BhcnNlVmVjdG9yIEFic3RyYWN0U3RyaW5nIEFic3RyYWN0VW5pdFJhbmdlIEFic3RyYWN0VmVjT3JNYXQgQWJzdHJhY3RWZWN0b3IgQW55IEFyZ3VtZW50RXJyb3IgQXJyYXkgQXNzZXJ0aW9uRXJyb3IgQXNzb2NpYXRpdmUgQmFzZTY0RGVjb2RlUGlwZSBCYXNlNjRFbmNvZGVQaXBlIEJpZGlhZ29uYWwgQmlnRmxvYXQgQmlnSW50IEJpdEFycmF5IEJpdE1hdHJpeCBCaXRWZWN0b3IgQm9vbCBCb3VuZHNFcnJvciBCdWZmZXJTdHJlYW0gQ2FjaGluZ1Bvb2wgQ2FwdHVyZWRFeGNlcHRpb24gQ2FydGVzaWFuSW5kZXggQ2FydGVzaWFuUmFuZ2UgQ2NoYXIgQ2RvdWJsZSBDZmxvYXQgQ2hhbm5lbCBDaGFyIENpbnQgQ2ludG1heF90IENsb25nIENsb25nbG9uZyBDbHVzdGVyTWFuYWdlciBDbWQgQ29kZUluZm8gQ29sb24gQ29tcGxleCBDb21wbGV4MTI4IENvbXBsZXgzMiBDb21wbGV4NjQgQ29tcG9zaXRlRXhjZXB0aW9uIENvbmRpdGlvbiBDb25qQXJyYXkgQ29uak1hdHJpeCBDb25qVmVjdG9yIENwdHJkaWZmX3QgQ3Nob3J0IENzaXplX3QgQ3NzaXplX3QgQ3N0cmluZyBDdWNoYXIgQ3VpbnQgQ3VpbnRtYXhfdCBDdWxvbmcgQ3Vsb25nbG9uZyBDdXNob3J0IEN3Y2hhcl90IEN3c3RyaW5nIERhdGFUeXBlIERhdGUgRGF0ZUZvcm1hdCBEYXRlVGltZSBEZW5zZUFycmF5IERlbnNlTWF0cml4IERlbnNlVmVjT3JNYXQgRGVuc2VWZWN0b3IgRGlhZ29uYWwgRGljdCBEaW1lbnNpb25NaXNtYXRjaCBEaW1zIERpcmVjdEluZGV4U3RyaW5nIERpc3BsYXkgRGl2aWRlRXJyb3IgRG9tYWluRXJyb3IgRU9GRXJyb3IgRWFjaExpbmUgRW51bSBFbnVtZXJhdGUgRXJyb3JFeGNlcHRpb24gRXhjZXB0aW9uIEV4cG9uZW50aWFsQmFja09mZiBFeHByIEZhY3Rvcml6YXRpb24gRmlsZU1vbml0b3IgRmxvYXQxNiBGbG9hdDMyIEZsb2F0NjQgRnVuY3Rpb24gRnV0dXJlIEdsb2JhbFJlZiBHb3RvTm9kZSBIVE1MIEhlcm1pdGlhbiBJTyBJT0J1ZmZlciBJT0NvbnRleHQgSU9TdHJlYW0gSVBBZGRyIElQdjQgSVB2NiBJbmRleENhcnRlc2lhbiBJbmRleExpbmVhciBJbmRleFN0eWxlIEluZXhhY3RFcnJvciBJbml0RXJyb3IgSW50IEludDEyOCBJbnQxNiBJbnQzMiBJbnQ2NCBJbnQ4IEludFNldCBJbnRlZ2VyIEludGVycnVwdEV4Y2VwdGlvbiBJbnZhbGlkU3RhdGVFeGNlcHRpb24gSXJyYXRpb25hbCBLZXlFcnJvciBMYWJlbE5vZGUgTGluU3BhY2UgTGluZU51bWJlck5vZGUgTG9hZEVycm9yIExvd2VyVHJpYW5ndWxhciBNSU1FIE1hdHJpeCBNZXJzZW5uZVR3aXN0ZXIgTWV0aG9kIE1ldGhvZEVycm9yIE1ldGhvZFRhYmxlIE1vZHVsZSBOVHVwbGUgTmV3dmFyTm9kZSBOdWxsRXhjZXB0aW9uIE51bGxhYmxlIE51bWJlciBPYmplY3RJZERpY3QgT3JkaW5hbFJhbmdlIE91dE9mTWVtb3J5RXJyb3IgT3ZlcmZsb3dFcnJvciBQYWlyIFBhcnNlRXJyb3IgUGFydGlhbFF1aWNrU29ydCBQZXJtdXRlZERpbXNBcnJheSBQaXBlIFBvbGxpbmdGaWxlV2F0Y2hlciBQcm9jZXNzRXhpdGVkRXhjZXB0aW9uIFB0ciBRdW90ZU5vZGUgUmFuZG9tRGV2aWNlIFJhbmdlIFJhbmdlSW5kZXggUmF0aW9uYWwgUmF3RkQgUmVhZE9ubHlNZW1vcnlFcnJvciBSZWFsIFJlZW50cmFudExvY2sgUmVmIFJlZ2V4IFJlZ2V4TWF0Y2ggUmVtb3RlQ2hhbm5lbCBSZW1vdGVFeGNlcHRpb24gUmV2U3RyaW5nIFJvdW5kaW5nTW9kZSBSb3dWZWN0b3IgU1NBVmFsdWUgU2VnbWVudGF0aW9uRmF1bHQgU2VyaWFsaXphdGlvblN0YXRlIFNldCBTaGFyZWRBcnJheSBTaGFyZWRNYXRyaXggU2hhcmVkVmVjdG9yIFNpZ25lZCBTaW1wbGVWZWN0b3IgU2xvdCBTbG90TnVtYmVyIFNwYXJzZU1hdHJpeENTQyBTcGFyc2VWZWN0b3IgU3RhY2tGcmFtZSBTdGFja092ZXJmbG93RXJyb3IgU3RhY2tUcmFjZSBTdGVwUmFuZ2UgU3RlcFJhbmdlTGVuIFN0cmlkZWRBcnJheSBTdHJpZGVkTWF0cml4IFN0cmlkZWRWZWNPck1hdCBTdHJpZGVkVmVjdG9yIFN0cmluZyBTdWJBcnJheSBTdWJTdHJpbmcgU3ltVHJpZGlhZ29uYWwgU3ltYm9sIFN5bW1ldHJpYyBTeXN0ZW1FcnJvciBUQ1BTb2NrZXQgVGFzayBUZXh0IFRleHREaXNwbGF5IFRpbWVyIFRyaWRpYWdvbmFsIFR1cGxlIFR5cGUgVHlwZUVycm9yIFR5cGVNYXBFbnRyeSBUeXBlTWFwTGV2ZWwgVHlwZU5hbWUgVHlwZVZhciBUeXBlZFNsb3QgVURQU29ja2V0IFVJbnQgVUludDEyOCBVSW50MTYgVUludDMyIFVJbnQ2NCBVSW50OCBVbmRlZlJlZkVycm9yIFVuZGVmVmFyRXJyb3IgVW5pY29kZUVycm9yIFVuaWZvcm1TY2FsaW5nIFVuaW9uIFVuaW9uQWxsIFVuaXRSYW5nZSBVbnNpZ25lZCBVcHBlclRyaWFuZ3VsYXIgVmFsIFZhcmFyZyBWZWNFbGVtZW50IFZlY09yTWF0IFZlY3RvciBWZXJzaW9uTnVtYmVyIFZvaWQgV2Vha0tleURpY3QgV2Vha1JlZiBXb3JrZXJDb25maWcgV29ya2VyUG9vbCAifSxuPSJbQS1aYS16X1xcdTAwQTEtXFx1RkZGRl1bQS1aYS16XzAtOVxcdTAwQTEtXFx1RkZGRl0qIixyPXtsZXhlbWVzOm4sa2V5d29yZHM6dCxpbGxlZ2FsOi88XC8vfSxvPXtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46LyhcYjB4W1xkX10qKFwuW1xkX10qKT98MHhcLlxkW1xkX10qKXBbLStdP1xkK3xcYjBbYm94XVthLWZBLUYwLTldW2EtZkEtRjAtOV9dKnwoXGJcZFtcZF9dKihcLltcZF9dKik/fFwuXGRbXGRfXSopKFtlRWZGXVstK10/XGQrKT8vLHJlbGV2YW5jZTowfSxzPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LycoLnxcXFt4WHVVXVthLXpBLVowLTldKyknL30saT17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46L1wkXCgvLGVuZDovXCkvLGtleXdvcmRzOnR9LGE9e2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiJcXCQiK259LGw9e2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGksYV0sdmFyaWFudHM6W3tiZWdpbjovXHcqIiIiLyxlbmQ6LyIiIlx3Ki8scmVsZXZhbmNlOjEwfSx7YmVnaW46L1x3KiIvLGVuZDovIlx3Ki99XX0sdT17Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsaSxhXSxiZWdpbjoiYCIsZW5kOiJgIn0sYz17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQCIrbn0sZD17Y2xhc3NOYW1lOiJjb21tZW50Iix2YXJpYW50czpbe2JlZ2luOiIjPSIsZW5kOiI9IyIscmVsZXZhbmNlOjEwfSx7YmVnaW46IiMiLGVuZDoiJCJ9XX07cmV0dXJuIHIuY29udGFpbnM9W28scyxsLHUsYyxkLGUuSEFTSF9DT01NRU5UX01PREUse2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IlxcYigoKGFic3RyYWN0fHByaW1pdGl2ZSlcXHMrKXR5cGV8KG11dGFibGVcXHMrKT9zdHJ1Y3QpXFxiIn0se2JlZ2luOi88Oi99XSxpLmNvbnRhaW5zPXIuY29udGFpbnMscn19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9rb3RsaW4uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJhYnN0cmFjdCBhcyB2YWwgdmFyIHZhcmFyZyBnZXQgc2V0IGNsYXNzIG9iamVjdCBvcGVuIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBub2lubGluZSBjcm9zc2lubGluZSBkeW5hbWljIGZpbmFsIGVudW0gaWYgZWxzZSBkbyB3aGlsZSBmb3Igd2hlbiB0aHJvdyB0cnkgY2F0Y2ggZmluYWxseSBpbXBvcnQgcGFja2FnZSBpcyBpbiBmdW4gb3ZlcnJpZGUgY29tcGFuaW9uIHJlaWZpZWQgaW5saW5lIGxhdGVpbml0IGluaXQgaW50ZXJmYWNlIGFubm90YXRpb24gZGF0YSBzZWFsZWQgaW50ZXJuYWwgaW5maXggb3BlcmF0b3Igb3V0IGJ5IGNvbnN0cnVjdG9yIHN1cGVyIHRhaWxyZWMgd2hlcmUgY29uc3QgaW5uZXIgc3VzcGVuZCB0eXBlYWxpYXMgZXh0ZXJuYWwgZXhwZWN0IGFjdHVhbCB0cmFpdCB2b2xhdGlsZSB0cmFuc2llbnQgbmF0aXZlIGRlZmF1bHQiLGJ1aWx0X2luOiJCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmciLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9LG49e2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46L1xiKGJyZWFrfGNvbnRpbnVlfHJldHVybnx0aGlzKVxiLyxzdGFydHM6e2NvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9AXHcrL31dfX0scj17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiQCJ9LG89e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCR7IixlbmQ6In0iLGNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFXX0scz17Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46IlxcJCIrZS5VTkRFUlNDT1JFX0lERU5UX1JFfSxpPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonIiIiJyxlbmQ6JyIiIicsY29udGFpbnM6W3Msb119LHtiZWdpbjoiJyIsZW5kOiInIixpbGxlZ2FsOi9cbi8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOi9cbi8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxzLG9dfV19LGE9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkAoPzpmaWxlfHByb3BlcnR5fGZpZWxkfGdldHxzZXR8cmVjZWl2ZXJ8cGFyYW18c2V0cGFyYW18ZGVsZWdhdGUpXFxzKjooPzpcXHMqIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIik/In0sbD17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQCIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLGNvbnRhaW5zOlt7YmVnaW46L1woLyxlbmQ6L1wpLyxjb250YWluczpbZS5pbmhlcml0KGkse2NsYXNzTmFtZToibWV0YS1zdHJpbmcifSldfV19LHU9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKDBbYkJdKFswMV0rWzAxX10rWzAxXSt8WzAxXSspfDBbeFhdKFthLWZBLUYwLTldK1thLWZBLUYwLTlfXStbYS1mQS1GMC05XSt8W2EtZkEtRjAtOV0rKXwoKFtcXGRdK1tcXGRfXStbXFxkXSt8W1xcZF0rKShcXC4oW1xcZF0rW1xcZF9dK1tcXGRdK3xbXFxkXSspKT98XFwuKFtcXGRdK1tcXGRfXStbXFxkXSt8W1xcZF0rKSkoW2VFXVstK10/XFxkKyk/KVtsTGZGXT8iLHJlbGV2YW5jZTowfTtyZXR1cm57YWxpYXNlczpbImt0Il0sa2V5d29yZHM6dCxjb250YWluczpbZS5DT01NRU5UKCIvXFwqXFwqIiwiXFwqLyIse3JlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbixyLGEsbCx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuIixlbmQ6IlsoXXwkIixyZXR1cm5CZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOnQsaWxsZWdhbDovZnVuXHMrKDwuKj4pP1teXHNcKF0rKFxzK1teXHNcKF0rKVxzKj0vLHJlbGV2YW5jZTo1LGNvbnRhaW5zOlt7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMqXFwoIixyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjovPC8sZW5kOi8+LyxrZXl3b3JkczoicmVpZmllZCIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxlbmRzUGFyZW50OiEwLGtleXdvcmRzOnQscmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjovOi8sZW5kOi9bPSxcL10vLGVuZHNXaXRoUGFyZW50OiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkV9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXSxyZWxldmFuY2U6MH0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsYSxsLGksZS5DX05VTUJFUl9NT0RFXX0sZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UgdHJhaXQiLGVuZDovWzpceyhdfCQvLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiZXh0ZW5kcyBpbXBsZW1lbnRzIixjb250YWluczpbe2JlZ2luS2V5d29yZHM6InB1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3RvciJ9LGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi88LyxlbmQ6Lz4vLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjovWyw6XVxzKi8sZW5kOi9bPFwoLF18JC8sZXhjbHVkZUJlZ2luOiEwLHJldHVybkVuZDohMH0sYSxsXX0saSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXiMhL3Vzci9iaW4vZW52IixlbmQ6IiQiLGlsbGVnYWw6IlxuIn0sdV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xhc3NvLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBub25lIG1pbmltYWwgZnVsbCBhbGwgdm9pZCBhbmQgb3Igbm90IGJ3IG5idyBldyBuZXcgY24gbmNuIGx0IGx0ZSBndCBndGUgZXEgbmVxIHJ4IG5yeCBmdCIsYnVpbHRfaW46ImFycmF5IGRhdGUgZGVjaW1hbCBkdXJhdGlvbiBpbnRlZ2VyIG1hcCBwYWlyIHN0cmluZyB0YWcgeG1sIG51bGwgYm9vbGVhbiBieXRlcyBrZXl3b3JkIGxpc3QgbG9jYWxlIHF1ZXVlIHNldCBzdGFjayBzdGF0aWNhcnJheSBsb2NhbCB2YXIgdmFyaWFibGUgZ2xvYmFsIGRhdGEgc2VsZiBpbmhlcml0ZWQgY3VycmVudGNhcHR1cmUgZ2l2ZW5ibG9jayIsa2V5d29yZDoiY2FjaGUgZGF0YWJhc2VfbmFtZXMgZGF0YWJhc2Vfc2NoZW1hbmFtZXMgZGF0YWJhc2VfdGFibGVuYW1lcyBkZWZpbmVfdGFnIGRlZmluZV90eXBlIGVtYWlsX2JhdGNoIGVuY29kZV9zZXQgaHRtbF9jb21tZW50IGhhbmRsZSBoYW5kbGVfZXJyb3IgaGVhZGVyIGlmIGlubGluZSBpdGVyYXRlIGxqYXhfdGFyZ2V0IGxpbmsgbGlua19jdXJyZW50YWN0aW9uIGxpbmtfY3VycmVudGdyb3VwIGxpbmtfY3VycmVudHJlY29yZCBsaW5rX2RldGFpbCBsaW5rX2ZpcnN0Z3JvdXAgbGlua19maXJzdHJlY29yZCBsaW5rX2xhc3Rncm91cCBsaW5rX2xhc3RyZWNvcmQgbGlua19uZXh0Z3JvdXAgbGlua19uZXh0cmVjb3JkIGxpbmtfcHJldmdyb3VwIGxpbmtfcHJldnJlY29yZCBsb2cgbG9vcCBuYW1lc3BhY2VfdXNpbmcgb3V0cHV0X25vbmUgcG9ydGFsIHByaXZhdGUgcHJvdGVjdCByZWNvcmRzIHJlZmVyZXIgcmVmZXJyZXIgcmVwZWF0aW5nIHJlc3VsdHNldCByb3dzIHNlYXJjaF9hcmdzIHNlYXJjaF9hcmd1bWVudHMgc2VsZWN0IHNvcnRfYXJncyBzb3J0X2FyZ3VtZW50cyB0aHJlYWRfYXRvbWljIHZhbHVlX2xpc3Qgd2hpbGUgYWJvcnQgY2FzZSBlbHNlIGZhaWxfaWYgZmFpbF9pZm5vdCBmYWlsIGlmX2VtcHR5IGlmX2ZhbHNlIGlmX251bGwgaWZfdHJ1ZSBsb29wX2Fib3J0IGxvb3BfY29udGludWUgbG9vcF9jb3VudCBwYXJhbXMgcGFyYW1zX3VwIHJldHVybiByZXR1cm5fdmFsdWUgcnVuX2NoaWxkcmVuIHNvYXBfZGVmaW5ldGFnIHNvYXBfbGFzdHJlcXVlc3Qgc29hcF9sYXN0cmVzcG9uc2UgdGFnX25hbWUgYXNjZW5kaW5nIGF2ZXJhZ2UgYnkgZGVmaW5lIGRlc2NlbmRpbmcgZG8gZXF1YWxzIGZyb3plbiBncm91cCBoYW5kbGVfZmFpbHVyZSBpbXBvcnQgaW4gaW50byBqb2luIGxldCBtYXRjaCBtYXggbWluIG9uIG9yZGVyIHBhcmVudCBwcm90ZWN0ZWQgcHJvdmlkZSBwdWJsaWMgcmVxdWlyZSByZXR1cm5ob21lIHNraXAgc3BsaXRfdGhyZWFkIHN1bSB0YWtlIHRocmVhZCB0byB0cmFpdCB0eXBlIHdoZXJlIHdpdGggeWllbGQgeWllbGRob21lIn0sbj1lLkNPTU1FTlQoIlx4M2MhLS0iLCItLVx4M2UiLHtyZWxldmFuY2U6MH0pLHI9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IlxcW25vcHJvY2Vzc1xcXSIsc3RhcnRzOntlbmQ6IlxcWy9ub3Byb2Nlc3NcXF0iLHJldHVybkVuZDohMCxjb250YWluczpbbl19fSxvPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXFsvbm9wcm9jZXNzfDxcXD8obGFzc28oc2NyaXB0KT98PSkifSxzPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IidbYS16QS1aX11bXFx3Ll0qJyJ9LGk9W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuaW5oZXJpdChlLkNfTlVNQkVSX01PREUse2JlZ2luOmUuQ19OVU1CRVJfUkUrInwoLT9pbmZpbml0eXxOYU4pXFxiIn0pLGUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pLGUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAifSx7dmFyaWFudHM6W3tiZWdpbjoiWyMkXVthLXpBLVpfXVtcXHcuXSoifSx7YmVnaW46IiMiLGVuZDoiXFxkKyIsaWxsZWdhbDoiXFxXIn1dfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiOjpcXHMqIixlbmQ6IlthLXpBLVpfXVtcXHcuXSoiLGlsbGVnYWw6IlxcVyJ9LHtjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3tiZWdpbjoiLSg/IWluZmluaXR5KVthLXpBLVpfXVtcXHcuXSoiLHJlbGV2YW5jZTowfSx7YmVnaW46IihcXC5cXC5cXC4pIn1dfSx7YmVnaW46LygtPnxcLilccyovLHJlbGV2YW5jZTowLGNvbnRhaW5zOltzXX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImRlZmluZSIscmV0dXJuRW5kOiEwLGVuZDoiXFwofD0+Iixjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46IlthLXpBLVpfXVtcXHcuXSooPSg/IT4pKT98Wy0rKi8lXSg/IT4pIn0pXX1dO3JldHVybnthbGlhc2VzOlsibHMiLCJsYXNzb3NjcmlwdCJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsbGV4ZW1lczoiW2EtekEtWl9dW1xcdy5dKnwmW2xnXXQ7IixrZXl3b3Jkczp0LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXFxdfFxcPz4iLHJlbGV2YW5jZTowLHN0YXJ0czp7ZW5kOiJcXFt8PFxcPyhsYXNzbyhzY3JpcHQpP3w9KSIscmV0dXJuRW5kOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOltuXX19LHIsbyx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXFxbbm9fc3F1YXJlX2JyYWNrZXRzIixzdGFydHM6e2VuZDoiXFxbL25vX3NxdWFyZV9icmFja2V0c1xcXSIsbGV4ZW1lczoiW2EtekEtWl9dW1xcdy5dKnwmW2xnXXQ7IixrZXl3b3Jkczp0LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXFxdfFxcPz4iLHJlbGV2YW5jZTowLHN0YXJ0czp7ZW5kOiJcXFtub3Byb2Nlc3NcXF18PFxcPyhsYXNzbyhzY3JpcHQpP3w9KSIscmV0dXJuRW5kOiEwLGNvbnRhaW5zOltuXX19LHIsb10uY29uY2F0KGkpfX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IlxcWyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeIyEiLGVuZDoibGFzc285JCIscmVsZXZhbmNlOjEwfV0uY29uY2F0KGkpfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZGlmLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46Il5kbiIsZW5kOiI6ICIsZXhjbHVkZUVuZDohMCxzdGFydHM6e2VuZDoiJCIscmVsZXZhbmNlOjB9LHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiXlxcdyIsZW5kOiI6ICIsZXhjbHVkZUVuZDohMCxzdGFydHM6e2VuZDoiJCIscmVsZXZhbmNlOjB9fSx7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXi0iLGVuZDoiJCJ9LGUuSEFTSF9DT01NRU5UX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZWFmLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiIytbQS1aYS16XzAtOV0qXFwoIixlbmQ6IiB7IixyZXR1cm5CZWdpbjohMCxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiIysifSx7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46IltBLVphLXpfXVtBLVphLXpfMC05XSoifSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixlbmRzUGFyZW50OiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46IltBLVphLXpfXVtBLVphLXpfMC05XSoifV19XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZXNzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iKFtcXHctXSt8QHtbXFx3LV0rfSkiLG49W10scj1bXSxvPWZ1bmN0aW9uKGUpe3JldHVybntjbGFzc05hbWU6InN0cmluZyIsYmVnaW46In4/IitlKyIuKj8iK2V9fSxzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57Y2xhc3NOYW1lOmUsYmVnaW46dCxyZWxldmFuY2U6bn19LGk9e2JlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpyLHJlbGV2YW5jZTowfTtyLnB1c2goZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbygiJyIpLG8oJyInKSxlLkNTU19OVU1CRVJfTU9ERSx7YmVnaW46Iih1cmx8ZGF0YS11cmkpXFwoIixzdGFydHM6e2NsYXNzTmFtZToic3RyaW5nIixlbmQ6IltcXClcXG5dIixleGNsdWRlRW5kOiEwfX0scygibnVtYmVyIiwiI1swLTlBLUZhLWZdK1xcYiIpLGkscygidmFyaWFibGUiLCJAQD9bXFx3LV0rIiwxMCkscygidmFyaWFibGUiLCJAe1tcXHctXSt9IikscygiYnVpbHRfaW4iLCJ+P2BbXmBdKj9gIikse2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiW1xcdy1dK1xccyo6IixlbmQ6IjoiLHJldHVybkJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In0pO3ZhciBhPXIuY29uY2F0KHtiZWdpbjoieyIsZW5kOiJ9Iixjb250YWluczpufSksbD17YmVnaW5LZXl3b3Jkczoid2hlbiIsZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJhbmQgbm90In1dLmNvbmNhdChyKX0sdT17YmVnaW46dCsiXFxzKjoiLHJldHVybkJlZ2luOiEwLGVuZDoiWzt9XSIscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46dCxlbmQ6IjoiLGV4Y2x1ZGVFbmQ6ITAsc3RhcnRzOntlbmRzV2l0aFBhcmVudDohMCxpbGxlZ2FsOiJbPD0kXSIscmVsZXZhbmNlOjAsY29udGFpbnM6cn19XX0sYz17Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiQChpbXBvcnR8bWVkaWF8Y2hhcnNldHxmb250LWZhY2V8KC1bYS16XSstKT9rZXlmcmFtZXN8c3VwcG9ydHN8ZG9jdW1lbnR8bmFtZXNwYWNlfHBhZ2V8dmlld3BvcnR8aG9zdClcXGIiLHN0YXJ0czp7ZW5kOiJbO3t9XSIscmV0dXJuRW5kOiEwLGNvbnRhaW5zOnIscmVsZXZhbmNlOjB9fSxkPXtjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOiJAW1xcdy1dK1xccyo6IixyZWxldmFuY2U6MTV9LHtiZWdpbjoiQFtcXHctXSsifV0sc3RhcnRzOntlbmQ6Ils7fV0iLHJldHVybkVuZDohMCxjb250YWluczphfX0sXz17dmFyaWFudHM6W3tiZWdpbjoiW1xcLiM6JlxcWz5dIixlbmQ6Ils7e31dIn0se2JlZ2luOnQsZW5kOiJ7In1dLHJldHVybkJlZ2luOiEwLHJldHVybkVuZDohMCxpbGxlZ2FsOiJbPD0nJFwiXSIscmVsZXZhbmNlOjAsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGwscygia2V5d29yZCIsImFsbFxcYiIpLHMoInZhcmlhYmxlIiwiQHtbXFx3LV0rfSIpLHMoInNlbGVjdG9yLXRhZyIsdCsiJT8iLDApLHMoInNlbGVjdG9yLWlkIiwiIyIrdCkscygic2VsZWN0b3ItY2xhc3MiLCJcXC4iK3QsMCkscygic2VsZWN0b3ItdGFnIiwiJiIsMCkse2NsYXNzTmFtZToic2VsZWN0b3ItYXR0ciIsYmVnaW46IlxcWyIsZW5kOiJcXF0ifSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLGJlZ2luOi86KDopP1thLXpBLVowLTlcX1wtXCtcKFwpIicuXSsvfSx7YmVnaW46IlxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOmF9LHtiZWdpbjoiIWltcG9ydGFudCJ9XX07cmV0dXJuIG4ucHVzaChlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjLGQsdSxfKSx7Y2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOiJbPT4nLzwoJFwiXSIsY29udGFpbnM6bn19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGlzcC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IlthLXpBLVpfXFwtXFwrXFwqXFwvXFw8XFw9XFw+XFwmXFwjXVthLXpBLVowLTlfXFwtXFwrXFwqXFwvXFw8XFw9XFw+XFwmXFwjIV0qIixuPSIoXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzfER8RXxGfEx8UykoXFwrfFxcLSk/XFxkKyk/IixyPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeIyEiLGVuZDoiJCJ9LG89e2NsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46IlxcYih0ezF9fG5pbClcXGIifSxzPXtjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjpuLHJlbGV2YW5jZTowfSx7YmVnaW46IiMoYnxCKVswLTFdKygvWzAtMV0rKT8ifSx7YmVnaW46IiMob3xPKVswLTddKygvWzAtN10rKT8ifSx7YmVnaW46IiMoeHxYKVswLTlhLWZBLUZdKygvWzAtOWEtZkEtRl0rKT8ifSx7YmVnaW46IiMoY3xDKVxcKCIrbisiICsiK24sZW5kOiJcXCkifV19LGk9ZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pLGE9ZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSksbD17YmVnaW46IlxcKiIsZW5kOiJcXCoifSx1PXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46Ils6Jl0iK3R9LGM9e2JlZ2luOnQscmVsZXZhbmNlOjB9LGQ9e2JlZ2luOiJcXHxbXl0qP1xcfCJ9LF89e2JlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbInNlbGYiLG8saSxzLGNdfSxwPXtjb250YWluczpbcyxpLGwsdSxfLGNdLHZhcmlhbnRzOlt7YmVnaW46IlsnYF1cXCgiLGVuZDoiXFwpIn0se2JlZ2luOiJcXChxdW90ZSAiLGVuZDoiXFwpIixrZXl3b3Jkczp7bmFtZToicXVvdGUifX0se2JlZ2luOiInXFx8W15dKj9cXHwifV19LGY9e3ZhcmlhbnRzOlt7YmVnaW46IiciK3R9LHtiZWdpbjoiIyciK3QrIig6OiIrdCsiKSoifV19LG09e2JlZ2luOiJcXChcXHMqIixlbmQ6IlxcKSJ9LGg9e2VuZHNXaXRoUGFyZW50OiEwLHJlbGV2YW5jZTowfTtyZXR1cm4gbS5jb250YWlucz1be2NsYXNzTmFtZToibmFtZSIsdmFyaWFudHM6W3tiZWdpbjp0fSx7YmVnaW46IlxcfFteXSo/XFx8In1dfSxoXSxoLmNvbnRhaW5zPVtwLGYsbSxvLHMsaSxhLGwsdSxkLGNdLHtpbGxlZ2FsOi9cUy8sY29udGFpbnM6W3MscixvLGksYSxwLGYsbSxjXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZWNvZGVzZXJ2ZXIuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtiZWdpbjoiXFxiW2d0cHNdW0EtWl0rW0EtWmEtejAtOV9cXC1dKlxcYnxcXCRfW0EtWl0rIixyZWxldmFuY2U6MH0sbj1bZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkhBU0hfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiLS0iLCIkIiksZS5DT01NRU5UKCJbXjpdLy8iLCIkIildLHI9ZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7dmFyaWFudHM6W3tiZWdpbjoiXFxiXypyaWdbQS1aXStbQS1aYS16MC05X1xcLV0qIn0se2JlZ2luOiJcXGJfW2EtejAtOVxcLV0rIn1dfSksbz1lLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiXFxiKFtBLVphLXowLTlfXFwtXSspXFxiIn0pO3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiExLGtleXdvcmRzOntrZXl3b3JkOiIkX0NPT0tJRSAkX0ZJTEVTICRfR0VUICRfR0VUX0JJTkFSWSAkX0dFVF9SQVcgJF9QT1NUICRfUE9TVF9CSU5BUlkgJF9QT1NUX1JBVyAkX1NFU1NJT04gJF9TRVJWRVIgY29kZXBvaW50IGNvZGVwb2ludHMgc2VnbWVudCBzZWdtZW50cyBjb2RldW5pdCBjb2RldW5pdHMgc2VudGVuY2Ugc2VudGVuY2VzIHRydWVXb3JkIHRydWVXb3JkcyBwYXJhZ3JhcGggYWZ0ZXIgYnl0ZSBieXRlcyBlbmdsaXNoIHRoZSB1bnRpbCBodHRwIGZvcmV2ZXIgZGVzY2VuZGluZyB1c2luZyBsaW5lIHJlYWw4IHdpdGggc2V2ZW50aCBmb3Igc3Rkb3V0IGZpbmFsbHkgZWxlbWVudCB3b3JkIHdvcmRzIGZvdXJ0aCBiZWZvcmUgYmxhY2sgbmludGggc2l4dGggY2hhcmFjdGVycyBjaGFycyBzdGRlcnIgdUludDEgdUludDFzIHVJbnQyIHVJbnQycyBzdGRpbiBzdHJpbmcgbGluZXMgcmVsYXRpdmUgcmVsIGFueSBmaWZ0aCBpdGVtcyBmcm9tIG1pZGRsZSBtaWQgYXQgZWxzZSBvZiBjYXRjaCB0aGVuIHRoaXJkIGl0IGZpbGUgbWlsbGlzZWNvbmRzIHNlY29uZHMgc2Vjb25kIHNlY3Mgc2VjIGludDEgaW50MXMgaW50NCBpbnQ0cyBpbnRlcm5ldCBpbnQyIGludDJzIG5vcm1hbCB0ZXh0IGl0ZW0gbGFzdCBsb25nIGRldGFpbGVkIGVmZmVjdGl2ZSB1SW50NCB1SW50NHMgcmVwZWF0IGVuZCByZXBlYXQgVVJMIGluIHRyeSBpbnRvIHN3aXRjaCB0byB3b3JkcyBodHRwcyB0b2tlbiBiaW5maWxlIGVhY2ggdGVudGggYXMgdGlja3MgdGljayBzeXN0ZW0gcmVhbDQgYnkgZGF0ZUl0ZW1zIHdpdGhvdXQgY2hhciBjaGFyYWN0ZXIgYXNjZW5kaW5nIGVpZ2h0aCB3aG9sZSBkYXRlVGltZSBudW1lcmljIHNob3J0IGZpcnN0IGZ0cCBpbnRlZ2VyIGFiYnJldmlhdGVkIGFiYnIgYWJicmV2IHByaXZhdGUgY2FzZSB3aGlsZSBpZiBkaXYgbW9kIHdyYXAgYW5kIG9yIGJpdEFuZCBiaXROb3QgYml0T3IgYml0WG9yIGFtb25nIG5vdCBpbiBhIGFuIHdpdGhpbiBjb250YWlucyBlbmRzIHdpdGggYmVnaW5zIHRoZSBrZXlzIG9mIGtleXMiLGxpdGVyYWw6IlNJWCBURU4gRk9STUZFRUQgTklORSBaRVJPIE5PTkUgU1BBQ0UgRk9VUiBGQUxTRSBDT0xPTiBDUkxGIFBJIENPTU1BIEVORE9GRklMRSBFT0YgRUlHSFQgRklWRSBRVU9URSBFTVBUWSBPTkUgVFJVRSBSRVRVUk4gQ1IgTElORUZFRUQgUklHSFQgQkFDS1NMQVNIIE5VTEwgU0VWRU4gVEFCIFRIUkVFIFRXTyBzaXggdGVuIGZvcm1mZWVkIG5pbmUgemVybyBub25lIHNwYWNlIGZvdXIgZmFsc2UgY29sb24gY3JsZiBwaSBjb21tYSBlbmRvZmZpbGUgZW9mIGVpZ2h0IGZpdmUgcXVvdGUgZW1wdHkgb25lIHRydWUgcmV0dXJuIGNyIGxpbmVmZWVkIHJpZ2h0IGJhY2tzbGFzaCBudWxsIHNldmVuIHRhYiB0aHJlZSB0d28gUklWRVJTSU9OIFJJU1RBVEUgRklMRV9SRUFEX01PREUgRklMRV9XUklURV9NT0RFIEZJTEVfV1JJVEVfTU9ERSBESVJfV1JJVEVfTU9ERSBGSUxFX1JFQURfVU1BU0sgRklMRV9XUklURV9VTUFTSyBESVJfUkVBRF9VTUFTSyBESVJfV1JJVEVfVU1BU0siLGJ1aWx0X2luOiJwdXQgYWJzIGFjb3MgYWxpYXNSZWZlcmVuY2UgYW5udWl0eSBhcnJheURlY29kZSBhcnJheUVuY29kZSBhc2luIGF0YW4gYXRhbjIgYXZlcmFnZSBhdmcgYXZnRGV2IGJhc2U2NERlY29kZSBiYXNlNjRFbmNvZGUgYmFzZUNvbnZlcnQgYmluYXJ5RGVjb2RlIGJpbmFyeUVuY29kZSBieXRlT2Zmc2V0IGJ5dGVUb051bSBjYWNoZWRVUkwgY2FjaGVkVVJMcyBjaGFyVG9OdW0gY2lwaGVyTmFtZXMgY29kZXBvaW50T2Zmc2V0IGNvZGVwb2ludFByb3BlcnR5IGNvZGVwb2ludFRvTnVtIGNvZGV1bml0T2Zmc2V0IGNvbW1hbmROYW1lcyBjb21wb3VuZCBjb21wcmVzcyBjb25zdGFudE5hbWVzIGNvcyBkYXRlIGRhdGVGb3JtYXQgZGVjb21wcmVzcyBkaXJlY3RvcmllcyBkaXNrU3BhY2UgRE5TU2VydmVycyBleHAgZXhwMSBleHAyIGV4cDEwIGV4dGVudHMgZmlsZXMgZmx1c2hFdmVudHMgZm9sZGVycyBmb3JtYXQgZnVuY3Rpb25OYW1lcyBnZW9tZXRyaWNNZWFuIGdsb2JhbCBnbG9iYWxzIGhhc01lbW9yeSBoYXJtb25pY01lYW4gaG9zdEFkZHJlc3MgaG9zdEFkZHJlc3NUb05hbWUgaG9zdE5hbWUgaG9zdE5hbWVUb0FkZHJlc3MgaXNOdW1iZXIgSVNPVG9NYWMgaXRlbU9mZnNldCBrZXlzIGxlbiBsZW5ndGggbGliVVJMRXJyb3JEYXRhIGxpYlVybEZvcm1EYXRhIGxpYlVSTGZ0cENvbW1hbmQgbGliVVJMTGFzdEhUVFBIZWFkZXJzIGxpYlVSTExhc3RSSEhlYWRlcnMgbGliVXJsTXVsdGlwYXJ0Rm9ybUFkZFBhcnQgbGliVXJsTXVsdGlwYXJ0Rm9ybURhdGEgbGliVVJMVmVyc2lvbiBsaW5lT2Zmc2V0IGxuIGxuMSBsb2NhbE5hbWVzIGxvZyBsb2cyIGxvZzEwIGxvbmdGaWxlUGF0aCBsb3dlciBtYWNUb0lTTyBtYXRjaENodW5rIG1hdGNoVGV4dCBtYXRyaXhNdWx0aXBseSBtYXggbWQ1RGlnZXN0IG1lZGlhbiBtZXJnZSBtaWxsaXNlYyBtaWxsaXNlY3MgbWlsbGlzZWNvbmQgbWlsbGlzZWNvbmRzIG1pbiBtb250aE5hbWVzIG5hdGl2ZUNoYXJUb051bSBub3JtYWxpemVUZXh0IG51bSBudW1iZXIgbnVtVG9CeXRlIG51bVRvQ2hhciBudW1Ub0NvZGVwb2ludCBudW1Ub05hdGl2ZUNoYXIgb2Zmc2V0IG9wZW4gb3BlbmZpbGVzIG9wZW5Qcm9jZXNzZXMgb3BlblByb2Nlc3NJRHMgb3BlblNvY2tldHMgcGFyYWdyYXBoT2Zmc2V0IHBhcmFtQ291bnQgcGFyYW0gcGFyYW1zIHBlZXJBZGRyZXNzIHBlbmRpbmdNZXNzYWdlcyBwbGF0Zm9ybSBwb3BTdGREZXYgcG9wdWxhdGlvblN0YW5kYXJkRGV2aWF0aW9uIHBvcHVsYXRpb25WYXJpYW5jZSBwb3BWYXJpYW5jZSBwcm9jZXNzSUQgcmFuZG9tIHJhbmRvbUJ5dGVzIHJlcGxhY2VUZXh0IHJlc3VsdCByZXZDcmVhdGVYTUxUcmVlIHJldkNyZWF0ZVhNTFRyZWVGcm9tRmlsZSByZXZDdXJyZW50UmVjb3JkIHJldkN1cnJlbnRSZWNvcmRJc0ZpcnN0IHJldkN1cnJlbnRSZWNvcmRJc0xhc3QgcmV2RGF0YWJhc2VDb2x1bW5Db3VudCByZXZEYXRhYmFzZUNvbHVtbklzTnVsbCByZXZEYXRhYmFzZUNvbHVtbkxlbmd0aHMgcmV2RGF0YWJhc2VDb2x1bW5OYW1lcyByZXZEYXRhYmFzZUNvbHVtbk5hbWVkIHJldkRhdGFiYXNlQ29sdW1uTnVtYmVyZWQgcmV2RGF0YWJhc2VDb2x1bW5UeXBlcyByZXZEYXRhYmFzZUNvbm5lY3RSZXN1bHQgcmV2RGF0YWJhc2VDdXJzb3JzIHJldkRhdGFiYXNlSUQgcmV2RGF0YWJhc2VUYWJsZU5hbWVzIHJldkRhdGFiYXNlVHlwZSByZXZEYXRhRnJvbVF1ZXJ5IHJldmRiX2Nsb3NlQ3Vyc29yIHJldmRiX2NvbHVtbmJ5bnVtYmVyIHJldmRiX2NvbHVtbmNvdW50IHJldmRiX2NvbHVtbmlzbnVsbCByZXZkYl9jb2x1bW5sZW5ndGhzIHJldmRiX2NvbHVtbm5hbWVzIHJldmRiX2NvbHVtbnR5cGVzIHJldmRiX2NvbW1pdCByZXZkYl9jb25uZWN0IHJldmRiX2Nvbm5lY3Rpb25zIHJldmRiX2Nvbm5lY3Rpb25lcnIgcmV2ZGJfY3VycmVudHJlY29yZCByZXZkYl9jdXJzb3Jjb25uZWN0aW9uIHJldmRiX2N1cnNvcmVyciByZXZkYl9jdXJzb3JzIHJldmRiX2RidHlwZSByZXZkYl9kaXNjb25uZWN0IHJldmRiX2V4ZWN1dGUgcmV2ZGJfaXNlb2YgcmV2ZGJfaXNib2YgcmV2ZGJfbW92ZWZpcnN0IHJldmRiX21vdmVsYXN0IHJldmRiX21vdmVuZXh0IHJldmRiX21vdmVwcmV2IHJldmRiX3F1ZXJ5IHJldmRiX3F1ZXJ5bGlzdCByZXZkYl9yZWNvcmRjb3VudCByZXZkYl9yb2xsYmFjayByZXZkYl90YWJsZW5hbWVzIHJldkdldERhdGFiYXNlRHJpdmVyUGF0aCByZXZOdW1iZXJPZlJlY29yZHMgcmV2T3BlbkRhdGFiYXNlIHJldk9wZW5EYXRhYmFzZXMgcmV2UXVlcnlEYXRhYmFzZSByZXZRdWVyeURhdGFiYXNlQmxvYiByZXZRdWVyeVJlc3VsdCByZXZRdWVyeUlzQXRTdGFydCByZXZRdWVyeUlzQXRFbmQgcmV2VW5peEZyb21NYWNQYXRoIHJldlhNTEF0dHJpYnV0ZSByZXZYTUxBdHRyaWJ1dGVzIHJldlhNTEF0dHJpYnV0ZVZhbHVlcyByZXZYTUxDaGlsZENvbnRlbnRzIHJldlhNTENoaWxkTmFtZXMgcmV2WE1MQ3JlYXRlVHJlZUZyb21GaWxlV2l0aE5hbWVzcGFjZXMgcmV2WE1MQ3JlYXRlVHJlZVdpdGhOYW1lc3BhY2VzIHJldlhNTERhdGFGcm9tWFBhdGhRdWVyeSByZXZYTUxFdmFsdWF0ZVhQYXRoIHJldlhNTEZpcnN0Q2hpbGQgcmV2WE1MTWF0Y2hpbmdOb2RlIHJldlhNTE5leHRTaWJsaW5nIHJldlhNTE5vZGVDb250ZW50cyByZXZYTUxOdW1iZXJPZkNoaWxkcmVuIHJldlhNTFBhcmVudCByZXZYTUxQcmV2aW91c1NpYmxpbmcgcmV2WE1MUm9vdE5vZGUgcmV2WE1MUlBDX0NyZWF0ZVJlcXVlc3QgcmV2WE1MUlBDX0RvY3VtZW50cyByZXZYTUxSUENfRXJyb3IgcmV2WE1MUlBDX0dldEhvc3QgcmV2WE1MUlBDX0dldE1ldGhvZCByZXZYTUxSUENfR2V0UGFyYW0gcmV2WE1MVGV4dCByZXZYTUxSUENfRXhlY3V0ZSByZXZYTUxSUENfR2V0UGFyYW1Db3VudCByZXZYTUxSUENfR2V0UGFyYW1Ob2RlIHJldlhNTFJQQ19HZXRQYXJhbVR5cGUgcmV2WE1MUlBDX0dldFBhdGggcmV2WE1MUlBDX0dldFBvcnQgcmV2WE1MUlBDX0dldFByb3RvY29sIHJldlhNTFJQQ19HZXRSZXF1ZXN0IHJldlhNTFJQQ19HZXRSZXNwb25zZSByZXZYTUxSUENfR2V0U29ja2V0IHJldlhNTFRyZWUgcmV2WE1MVHJlZXMgcmV2WE1MVmFsaWRhdGVEVEQgcmV2WmlwRGVzY3JpYmVJdGVtIHJldlppcEVudW1lcmF0ZUl0ZW1zIHJldlppcE9wZW5BcmNoaXZlcyByb3VuZCBzYW1wVmFyaWFuY2Ugc2VjIHNlY3Mgc2Vjb25kcyBzZW50ZW5jZU9mZnNldCBzaGExRGlnZXN0IHNoZWxsIHNob3J0RmlsZVBhdGggc2luIHNwZWNpYWxGb2xkZXJQYXRoIHNxcnQgc3RhbmRhcmREZXZpYXRpb24gc3RhdFJvdW5kIHN0ZERldiBzdW0gc3lzRXJyb3Igc3lzdGVtVmVyc2lvbiB0YW4gdGVtcE5hbWUgdGV4dERlY29kZSB0ZXh0RW5jb2RlIHRpY2sgdGlja3MgdGltZSB0byB0b2tlbk9mZnNldCB0b0xvd2VyIHRvVXBwZXIgdHJhbnNwb3NlIHRydWV3b3JkT2Zmc2V0IHRydW5jIHVuaURlY29kZSB1bmlFbmNvZGUgdXBwZXIgVVJMRGVjb2RlIFVSTEVuY29kZSBVUkxTdGF0dXMgdXVpZCB2YWx1ZSB2YXJpYWJsZU5hbWVzIHZhcmlhbmNlIHZlcnNpb24gd2FpdERlcHRoIHdlZWtkYXlOYW1lcyB3b3JkT2Zmc2V0IHhzbHRBcHBseVN0eWxlc2hlZXQgeHNsdEFwcGx5U3R5bGVzaGVldEZyb21GaWxlIHhzbHRMb2FkU3R5bGVzaGVldCB4c2x0TG9hZFN0eWxlc2hlZXRGcm9tRmlsZSBhZGQgYnJlYWtwb2ludCBjYW5jZWwgY2xlYXIgbG9jYWwgdmFyaWFibGUgZmlsZSB3b3JkIGxpbmUgZm9sZGVyIGRpcmVjdG9yeSBVUkwgY2xvc2Ugc29ja2V0IHByb2Nlc3MgY29tYmluZSBjb25zdGFudCBjb252ZXJ0IGNyZWF0ZSBuZXcgYWxpYXMgZm9sZGVyIGRpcmVjdG9yeSBkZWNyeXB0IGRlbGV0ZSB2YXJpYWJsZSB3b3JkIGxpbmUgZm9sZGVyIGRpcmVjdG9yeSBVUkwgZGlzcGF0Y2ggZGl2aWRlIGRvIGVuY3J5cHQgZmlsdGVyIGdldCBpbmNsdWRlIGludGVyc2VjdCBraWxsIGxpYlVSTERvd25sb2FkVG9GaWxlIGxpYlVSTEZvbGxvd0h0dHBSZWRpcmVjdHMgbGliVVJMZnRwVXBsb2FkIGxpYlVSTGZ0cFVwbG9hZEZpbGUgbGliVVJMcmVzZXRBbGwgbGliVXJsU2V0QXV0aENhbGxiYWNrIGxpYlVSTFNldEN1c3RvbUhUVFBIZWFkZXJzIGxpYlVybFNldEV4cGVjdDEwMCBsaWJVUkxTZXRGVFBMaXN0Q29tbWFuZCBsaWJVUkxTZXRGVFBNb2RlIGxpYlVSTFNldEZUUFN0b3BUaW1lIGxpYlVSTFNldFN0YXR1c0NhbGxiYWNrIGxvYWQgbXVsdGlwbHkgc29ja2V0IHByZXBhcmUgcHJvY2VzcyBwb3N0IHNlZWsgcmVsIHJlbGF0aXZlIHJlYWQgZnJvbSBwcm9jZXNzIHJlbmFtZSByZXBsYWNlIHJlcXVpcmUgcmVzZXRBbGwgcmVzb2x2ZSByZXZBZGRYTUxOb2RlIHJldkFwcGVuZFhNTCByZXZDbG9zZUN1cnNvciByZXZDbG9zZURhdGFiYXNlIHJldkNvbW1pdERhdGFiYXNlIHJldkNvcHlGaWxlIHJldkNvcHlGb2xkZXIgcmV2Q29weVhNTE5vZGUgcmV2RGVsZXRlRm9sZGVyIHJldkRlbGV0ZVhNTE5vZGUgcmV2RGVsZXRlQWxsWE1MVHJlZXMgcmV2RGVsZXRlWE1MVHJlZSByZXZFeGVjdXRlU1FMIHJldkdvVVJMIHJldkluc2VydFhNTE5vZGUgcmV2TW92ZUZvbGRlciByZXZNb3ZlVG9GaXJzdFJlY29yZCByZXZNb3ZlVG9MYXN0UmVjb3JkIHJldk1vdmVUb05leHRSZWNvcmQgcmV2TW92ZVRvUHJldmlvdXNSZWNvcmQgcmV2TW92ZVRvUmVjb3JkIHJldk1vdmVYTUxOb2RlIHJldlB1dEludG9YTUxOb2RlIHJldlJvbGxCYWNrRGF0YWJhc2UgcmV2U2V0RGF0YWJhc2VEcml2ZXJQYXRoIHJldlNldFhNTEF0dHJpYnV0ZSByZXZYTUxSUENfQWRkUGFyYW0gcmV2WE1MUlBDX0RlbGV0ZUFsbERvY3VtZW50cyByZXZYTUxBZGREVEQgcmV2WE1MUlBDX0ZyZWUgcmV2WE1MUlBDX0ZyZWVBbGwgcmV2WE1MUlBDX0RlbGV0ZURvY3VtZW50IHJldlhNTFJQQ19EZWxldGVQYXJhbSByZXZYTUxSUENfU2V0SG9zdCByZXZYTUxSUENfU2V0TWV0aG9kIHJldlhNTFJQQ19TZXRQb3J0IHJldlhNTFJQQ19TZXRQcm90b2NvbCByZXZYTUxSUENfU2V0U29ja2V0IHJldlppcEFkZEl0ZW1XaXRoRGF0YSByZXZaaXBBZGRJdGVtV2l0aEZpbGUgcmV2WmlwQWRkVW5jb21wcmVzc2VkSXRlbVdpdGhEYXRhIHJldlppcEFkZFVuY29tcHJlc3NlZEl0ZW1XaXRoRmlsZSByZXZaaXBDYW5jZWwgcmV2WmlwQ2xvc2VBcmNoaXZlIHJldlppcERlbGV0ZUl0ZW0gcmV2WmlwRXh0cmFjdEl0ZW1Ub0ZpbGUgcmV2WmlwRXh0cmFjdEl0ZW1Ub1ZhcmlhYmxlIHJldlppcFNldFByb2dyZXNzQ2FsbGJhY2sgcmV2WmlwUmVuYW1lSXRlbSByZXZaaXBSZXBsYWNlSXRlbVdpdGhEYXRhIHJldlppcFJlcGxhY2VJdGVtV2l0aEZpbGUgcmV2WmlwT3BlbkFyY2hpdmUgc2VuZCBzZXQgc29ydCBzcGxpdCBzdGFydCBzdG9wIHN1YnRyYWN0IHVuaW9uIHVubG9hZCB3YWl0IHdyaXRlIn0sY29udGFpbnM6W3Qse2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IlxcYmVuZFxcc2lmXFxiIn0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmN0aW9uIixlbmQ6IiQiLGNvbnRhaW5zOlt0LG8sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5CSU5BUllfTlVNQkVSX01PREUsZS5DX05VTUJFUl9NT0RFLHJdfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46IlxcYmVuZFxccysiLGVuZDoiJCIsa2V5d29yZHM6ImVuZCIsY29udGFpbnM6W28scl0scmVsZXZhbmNlOjB9LHtiZWdpbktleXdvcmRzOiJjb21tYW5kIG9uIixlbmQ6IiQiLGNvbnRhaW5zOlt0LG8sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5CSU5BUllfTlVNQkVSX01PREUsZS5DX05VTUJFUl9NT0RFLHJdfSx7Y2xhc3NOYW1lOiJtZXRhIix2YXJpYW50czpbe2JlZ2luOiI8XFw/KHJldnxsY3xsaXZlY29kZSkiLHJlbGV2YW5jZToxMH0se2JlZ2luOiI8XFw/In0se2JlZ2luOiJcXD8+In1dfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkJJTkFSWV9OVU1CRVJfTU9ERSxlLkNfTlVNQkVSX01PREUscl0uY29uY2F0KG4pLGlsbGVnYWw6IjskfF5cXFt8Xj18Jnx7In19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZXNjcmlwdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIGNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgd2l0aCB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IGl0IHRoYXQgb3RoZXJ3aXNlIGZyb20gdG8gdGlsIGZhbGx0aHJvdWdoIHN1cGVyIGNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCB5ZXMgbm8gb24gb2ZmIGl0IHRoYXQgdm9pZCIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQifSxuPSJbQS1aYS16JF9dKD86LVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqIixyPWUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOm59KSxvPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovI1x7LyxlbmQ6L30vLGtleXdvcmRzOnR9LHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi8jW0EtWmEteiRfXS8sZW5kOi8oPzpcLVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqLyxrZXl3b3Jkczp0fSxpPVtlLkJJTkFSWV9OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoXFxiMFt4WF1bYS1mQS1GMC05X10rKXwoXFxiXFxkKFxcZHxfXFxkKSooXFwuKFxcZChcXGR8X1xcZCkqKT8pPyhfKltlRV0oWy0rXVxcZChfXFxkfFxcZCkqKT8pP1tfYS16XSopIixyZWxldmFuY2U6MCxzdGFydHM6e2VuZDoiKFxccyovKT8iLHJlbGV2YW5jZTowfX0se2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8nJycvLGVuZDovJycnLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOi8nLyxlbmQ6LycvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46LyIiIi8sZW5kOi8iIiIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbyxzXX0se2JlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbyxzXX0se2JlZ2luOi9cXC8sZW5kOi8oXHN8JCkvLGV4Y2x1ZGVFbmQ6ITB9XX0se2NsYXNzTmFtZToicmVnZXhwIix2YXJpYW50czpbe2JlZ2luOiIvLyIsZW5kOiIvL1tnaW1dKiIsY29udGFpbnM6W28sZS5IQVNIX0NPTU1FTlRfTU9ERV19LHtiZWdpbjovXC8oPyFbICpdKShcXFwvfC4pKj9cL1tnaW1dKig/PVxXfCQpL31dfSx7YmVnaW46IkAiK259LHtiZWdpbjoiYGAiLGVuZDoiYGAiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHN1Ykxhbmd1YWdlOiJqYXZhc2NyaXB0In1dO28uY29udGFpbnM9aTt2YXIgYT17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3Jkczp0LGNvbnRhaW5zOlsic2VsZiJdLmNvbmNhdChpKX1dfTtyZXR1cm57YWxpYXNlczpbImxzIl0sa2V5d29yZHM6dCxpbGxlZ2FsOi9cL1wqLyxjb250YWluczppLmNvbmNhdChbZS5DT01NRU5UKCJcXC9cXCoiLCJcXCpcXC8iKSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6ImZ1bmN0aW9uIixjb250YWluczpbcixhXSxyZXR1cm5CZWdpbjohMCx2YXJpYW50czpbe2JlZ2luOiIoIituKyJcXHMqKD86PXw6PSlcXHMqKT8oXFwoLipcXCkpP1xccypcXEJcXC0+XFwqPyIsZW5kOiJcXC0+XFwqPyJ9LHtiZWdpbjoiKCIrbisiXFxzKig/Oj18Oj0pXFxzKik/IT8oXFwoLipcXCkpP1xccypcXEJbLX5dezEsMn0+XFwqPyIsZW5kOiJbLX5dezEsMn0+XFwqPyJ9LHtiZWdpbjoiKCIrbisiXFxzKig/Oj18Oj0pXFxzKik/KFxcKC4qXFwpKT9cXHMqXFxCIT9bLX5dezEsMn0+XFwqPyIsZW5kOiIhP1stfl17MSwyfT5cXCo/In1dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoiJCIsaWxsZWdhbDovWzo9IlxbXF1dLyxjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImV4dGVuZHMiLGVuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6L1s6PSJcW1xdXS8sY29udGFpbnM6W3JdfSxyXX0se2JlZ2luOm4rIjoiLGVuZDoiOiIscmV0dXJuQmVnaW46ITAscmV0dXJuRW5kOiEwLHJlbGV2YW5jZTowfV0pfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sbHZtLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iKFstYS16QS1aJC5fXVtcXHdcXC0kLl0qKSI7cmV0dXJue2tleXdvcmRzOiJiZWdpbiBlbmQgdHJ1ZSBmYWxzZSBkZWNsYXJlIGRlZmluZSBnbG9iYWwgY29uc3RhbnQgcHJpdmF0ZSBsaW5rZXJfcHJpdmF0ZSBpbnRlcm5hbCBhdmFpbGFibGVfZXh0ZXJuYWxseSBsaW5rb25jZSBsaW5rb25jZV9vZHIgd2VhayB3ZWFrX29kciBhcHBlbmRpbmcgZGxsaW1wb3J0IGRsbGV4cG9ydCBjb21tb24gZGVmYXVsdCBoaWRkZW4gcHJvdGVjdGVkIGV4dGVybl93ZWFrIGV4dGVybmFsIHRocmVhZF9sb2NhbCB6ZXJvaW5pdGlhbGl6ZXIgdW5kZWYgbnVsbCB0byB0YWlsIHRhcmdldCB0cmlwbGUgZGF0YWxheW91dCB2b2xhdGlsZSBudXcgbnN3IG5uYW4gbmluZiBuc3ogYXJjcCBmYXN0IGV4YWN0IGluYm91bmRzIGFsaWduIGFkZHJzcGFjZSBzZWN0aW9uIGFsaWFzIG1vZHVsZSBhc20gc2lkZWVmZmVjdCBnYyBkYmcgbGlua2VyX3ByaXZhdGVfd2VhayBhdHRyaWJ1dGVzIGJsb2NrYWRkcmVzcyBpbml0aWFsZXhlYyBsb2NhbGR5bmFtaWMgbG9jYWxleGVjIHByZWZpeCB1bm5hbWVkX2FkZHIgY2NjIGZhc3RjYyBjb2xkY2MgeDg2X3N0ZGNhbGxjYyB4ODZfZmFzdGNhbGxjYyBhcm1fYXBjc2NjIGFybV9hYXBjc2NjIGFybV9hYXBjc192ZnBjYyBwdHhfZGV2aWNlIHB0eF9rZXJuZWwgaW50ZWxfb2NsX2JpY2MgbXNwNDMwX2ludHJjYyBzcGlyX2Z1bmMgc3Bpcl9rZXJuZWwgeDg2XzY0X3N5c3ZjYyB4ODZfNjRfd2luNjRjYyB4ODZfdGhpc2NhbGxjYyBjYyBjIHNpZ25leHQgemVyb2V4dCBpbnJlZyBzcmV0IG5vdW53aW5kIG5vcmV0dXJuIG5vYWxpYXMgbm9jYXB0dXJlIGJ5dmFsIG5lc3QgcmVhZG5vbmUgcmVhZG9ubHkgaW5saW5laGludCBub2lubGluZSBhbHdheXNpbmxpbmUgb3B0c2l6ZSBzc3Agc3NwcmVxIG5vcmVkem9uZSBub2ltcGxpY2l0ZmxvYXQgbmFrZWQgYnVpbHRpbiBjb2xkIG5vYnVpbHRpbiBub2R1cGxpY2F0ZSBub25sYXp5YmluZCBvcHRub25lIHJldHVybnNfdHdpY2Ugc2FuaXRpemVfYWRkcmVzcyBzYW5pdGl6ZV9tZW1vcnkgc2FuaXRpemVfdGhyZWFkIHNzcHN0cm9uZyB1d3RhYmxlIHJldHVybmVkIHR5cGUgb3BhcXVlIGVxIG5lIHNsdCBzZ3Qgc2xlIHNnZSB1bHQgdWd0IHVsZSB1Z2Ugb2VxIG9uZSBvbHQgb2d0IG9sZSBvZ2Ugb3JkIHVubyB1ZXEgdW5lIHggYWNxX3JlbCBhY3F1aXJlIGFsaWduc3RhY2sgYXRvbWljIGNhdGNoIGNsZWFudXAgZmlsdGVyIGludGVsZGlhbGVjdCBtYXggbWluIG1vbm90b25pYyBuYW5kIHBlcnNvbmFsaXR5IHJlbGVhc2Ugc2VxX2NzdCBzaW5nbGV0aHJlYWQgdW1heCB1bWluIHVub3JkZXJlZCB4Y2hnIGFkZCBmYWRkIHN1YiBmc3ViIG11bCBmbXVsIHVkaXYgc2RpdiBmZGl2IHVyZW0gc3JlbSBmcmVtIHNobCBsc2hyIGFzaHIgYW5kIG9yIHhvciBpY21wIGZjbXAgcGhpIGNhbGwgdHJ1bmMgemV4dCBzZXh0IGZwdHJ1bmMgZnBleHQgdWl0b2ZwIHNpdG9mcCBmcHRvdWkgZnB0b3NpIGludHRvcHRyIHB0cnRvaW50IGJpdGNhc3QgYWRkcnNwYWNlY2FzdCBzZWxlY3QgdmFfYXJnIHJldCBiciBzd2l0Y2ggaW52b2tlIHVud2luZCB1bnJlYWNoYWJsZSBpbmRpcmVjdGJyIGxhbmRpbmdwYWQgcmVzdW1lIG1hbGxvYyBhbGxvY2EgZnJlZSBsb2FkIHN0b3JlIGdldGVsZW1lbnRwdHIgZXh0cmFjdGVsZW1lbnQgaW5zZXJ0ZWxlbWVudCBzaHVmZmxldmVjdG9yIGdldHJlc3VsdCBleHRyYWN0dmFsdWUgaW5zZXJ0dmFsdWUgYXRvbWljcm13IGNtcHhjaGcgZmVuY2UgYXJnbWVtb25seSBkb3VibGUiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiaVxcZCsifSxlLkNPTU1FTlQoIjsiLCJcXG4iLHtyZWxldmFuY2U6MH0pLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOiciJyxlbmQ6J1teXFxcXF0iJ31dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0aXRsZSIsdmFyaWFudHM6W3tiZWdpbjoiQCIrdH0se2JlZ2luOiJAXFxkKyJ9LHtiZWdpbjoiISIrdH0se2JlZ2luOiIhXFxkKyIrdH1dfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLHZhcmlhbnRzOlt7YmVnaW46IiUiK3R9LHtiZWdpbjoiJVxcZCsifSx7YmVnaW46IiNcXGQrIn1dfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IjBbeFhdW2EtZkEtRjAtOV0rIn0se2JlZ2luOiItP1xcZCsoPzpbLl1cXGQrKT8oPzpbZUVdWy0rXT9cXGQrKD86Wy5dXFxkKyk/KT8ifV0scmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHNsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46L1xcW3RuIlxcXS99LG49e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxjb250YWluczpbdF19LHI9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjplLkNfTlVNQkVSX1JFfSxvPXtjbGFzc05hbWU6ImxpdGVyYWwiLHZhcmlhbnRzOlt7YmVnaW46IlxcYig/OlBJfFRXT19QSXxQSV9CWV9UV098REVHX1RPX1JBRHxSQURfVE9fREVHfFNRUlQyKVxcYiJ9LHtiZWdpbjoiXFxiKD86WFBfRVJST1JfKD86RVhQRVJJRU5DRVNfRElTQUJMRUR8RVhQRVJJRU5DRV8oPzpESVNBQkxFRHxTVVNQRU5ERUQpfElOVkFMSURfKD86RVhQRVJJRU5DRXxQQVJBTUVURVJTKXxLRVlfTk9UX0ZPVU5EfE1BVFVSSVRZX0VYQ0VFREVEfE5PTkV8Tk9UXyg/OkZPVU5EfFBFUk1JVFRFRCg/Ol9MQU5EKT8pfE5PX0VYUEVSSUVOQ0V8UVVPVEFfRVhDRUVERUR8UkVUUllfVVBEQVRFfFNUT1JBR0VfRVhDRVBUSU9OfFNUT1JFX0RJU0FCTEVEfFRIUk9UVExFRHxVTktOT1dOX0VSUk9SKXxKU09OX0FQUEVORHxTVEFUVVNfKD86UEhZU0lDU3xST1RBVEVfW1hZWl18UEhBTlRPTXxTQU5EQk9YfEJMT0NLX0dSQUIoPzpfT0JKRUNUKT98KD86RElFfFJFVFVSTilfQVRfRURHRXxDQVNUX1NIQURPV1N8T0t8TUFMRk9STUVEX1BBUkFNU3xUWVBFX01JU01BVENIfEJPVU5EU19FUlJPUnxOT1RfKD86Rk9VTkR8U1VQUE9SVEVEKXxJTlRFUk5BTF9FUlJPUnxXSElURUxJU1RfRkFJTEVEKXxBR0VOVCg/Ol8oPzpCWV8oPzpMRUdBQ1lffFVTRVIpTkFNRXxGTFlJTkd8QVRUQUNITUVOVFN8U0NSSVBURUR8TU9VU0VMT09LfFNJVFRJTkd8T05fT0JKRUNUfEFXQVl8V0FMS0lOR3xJTl9BSVJ8VFlQSU5HfENST1VDSElOR3xCVVNZfEFMV0FZU19SVU58QVVUT1BJTE9UfExJU1RfKD86UEFSQ0VMKD86X09XTkVSKT98UkVHSU9OKSkpP3xDQU1FUkFfKD86UElUQ0h8RElTVEFOQ0V8QkVISU5ETkVTU18oPzpBTkdMRXxMQUcpfCg/OkZPQ1VTfFBPU0lUSU9OKSg/Ol8oPzpUSFJFU0hPTER8TE9DS0VEfExBRykpP3xGT0NVU19PRkZTRVR8QUNUSVZFKXxBTklNX09OfExPT1B8UkVWRVJTRXxQSU5HX1BPTkd8U01PT1RIfFJPVEFURXxTQ0FMRXxBTExfU0lERVN8TElOS18oPzpST09UfFNFVHxBTExfKD86T1RIRVJTfENISUxEUkVOKXxUSElTKXxBQ1RJVkV8UEFTUyg/OklWRXxfKD86QUxXQVlTfElGX05PVF9IQU5ETEVEfE5FVkVSKSl8U0NSSVBURUR8Q09OVFJPTF8oPzpGV0R8QkFDS3woPzpST1RfKT8oPzpMRUZUfFJJR0hUKXxVUHxET1dOfCg/Ok1MXyk/TEJVVFRPTil8UEVSTUlTU0lPTl8oPzpSRVRVUk5fT0JKRUNUU3xERUJJVHxPVkVSUklERV9BTklNQVRJT05TfFNJTEVOVF9FU1RBVEVfTUFOQUdFTUVOVHxUQUtFX0NPTlRST0xTfFRSSUdHRVJfQU5JTUFUSU9OfEFUVEFDSHxDSEFOR0VfTElOS1N8KD86Q09OVFJPTHxUUkFDSylfQ0FNRVJBfFRFTEVQT1JUKXxJTlZFTlRPUllfKD86VEVYVFVSRXxTT1VORHxPQkpFQ1R8U0NSSVBUfExBTkRNQVJLfENMT1RISU5HfE5PVEVDQVJEfEJPRFlQQVJUfEFOSU1BVElPTnxHRVNUVVJFfEFMTHxOT05FKXxDSEFOR0VEXyg/OklOVkVOVE9SWXxDT0xPUnxTSEFQRXxTQ0FMRXxURVhUVVJFfExJTkt8QUxMT1dFRF9EUk9QfE9XTkVSfFJFR0lPTig/Ol9TVEFSVCk/fFRFTEVQT1JUfE1FRElBKXxPQkpFQ1RfKD86Q0xJQ0tfQUNUSU9OfEhPVkVSX0hFSUdIVHxMQVNUX09XTkVSX0lEfCg/OlBIWVNJQ1N8U0VSVkVSfFNUUkVBTUlORylfQ09TVHxVTktOT1dOX0RFVEFJTHxDSEFSQUNURVJfVElNRXxQSEFOVE9NfFBIWVNJQ1N8VEVNUF9PTl9SRVp8TkFNRXxERVNDfFBPU3xQUklNXyg/OkNPVU5UfEVRVUlWQUxFTkNFKXxSRVRVUk5fKD86UEFSQ0VMKD86X09XTkVSKT98UkVHSU9OKXxSRVpaRVJfS0VZfFJPTz9UfFZFTE9DSVRZfE9NRUdBfE9XTkVSfEdST1VQfENSRUFUT1J8QVRUQUNIRURfUE9JTlR8UkVOREVSX1dFSUdIVHwoPzpCT0RZX1NIQVBFfFBBVEhGSU5ESU5HKV9UWVBFfCg/OlJVTk5JTkd8VE9UQUwpX1NDUklQVF9DT1VOVHxUT1RBTF9JTlZFTlRPUllfQ09VTlR8U0NSSVBUXyg/Ok1FTU9SWXxUSU1FKSl8VFlQRV8oPzpJTlRFR0VSfEZMT0FUfFNUUklOR3xLRVl8VkVDVE9SfFJPVEFUSU9OfElOVkFMSUQpfCg/OkRFQlVHfFBVQkxJQylfQ0hBTk5FTHxBVFRBQ0hfKD86QVZBVEFSX0NFTlRFUnxDSEVTVHxIRUFEfEJBQ0t8UEVMVklTfE1PVVRIfENISU58TkVDS3xOT1NFfEJFTExZfFtMUl0oPzpTSE9VTERFUnxIQU5EfEZPT1R8RUFSfEVZRXxbVUxdKD86QVJNfExFRyl8SElQKXwoPzpMRUZUfFJJR0hUKV9QRUN8SFVEXyg/OkNFTlRFUl9bMTJdfFRPUF8oPzpSSUdIVHxDRU5URVJ8TEVGVCl8Qk9UVE9NKD86Xyg/OlJJR0hUfExFRlQpKT8pfFtMUl1IQU5EX1JJTkcxfFRBSUxfKD86QkFTRXxUSVApfFtMUl1XSU5HfEZBQ0VfKD86SkFXfFtMUl1FQVJ8W0xSXUVZRXxUT1VOR0UpfEdST0lOfEhJTkRfW0xSXUZPT1QpfExBTkRfKD86TEVWRUx8UkFJU0V8TE9XRVJ8U01PT1RIfE5PSVNFfFJFVkVSVCl8REFUQV8oPzpPTkxJTkV8TkFNRXxCT1JOfFNJTV8oPzpQT1N8U1RBVFVTfFJBVElORyl8UEFZSU5GTyl8UEFZTUVOVF9JTkZPXyg/Ok9OX0ZJTEV8VVNFRCl8UkVNT1RFX0RBVEFfKD86Q0hBTk5FTHxSRVFVRVNUfFJFUExZKXxQU1lTXyg/OlBBUlRfKD86QkZfKD86WkVST3xPTkUoPzpfTUlOVVNfKD86REVTVF9DT0xPUnxTT1VSQ0VfKEFMUEhBfENPTE9SKSkpP3xERVNUX0NPTE9SfFNPVVJDRV8oQUxQSEF8Q09MT1IpKXxCTEVORF9GVU5DXyhERVNUfFNPVVJDRSl8RkxBR1N8KD86U1RBUlR8RU5EKV8oPzpDT0xPUnxBTFBIQXxTQ0FMRXxHTE9XKXxNQVhfQUdFfCg/OlJJQkJPTnxXSU5EfElOVEVSUF8oPzpDT0xPUnxTQ0FMRSl8Qk9VTkNFfEZPTExPV18oPzpTUkN8VkVMT0NJVFkpfFRBUkdFVF8oPzpQT1N8TElORUFSKXxFTUlTU0lWRSlfTUFTSyl8U1JDXyg/Ok1BWF9BR0V8UEFUVEVSTnxBTkdMRV8oPzpCRUdJTnxFTkQpfEJVUlNUXyg/OlJBVEV8UEFSVF9DT1VOVHxSQURJVVN8U1BFRURfKD86TUlOfE1BWCkpfEFDQ0VMfFRFWFRVUkV8VEFSR0VUX0tFWXxPTUVHQXxQQVRURVJOXyg/OkRST1B8RVhQTE9ERXxBTkdMRSg/Ol9DT05FKD86X0VNUFRZKT8pPykpKXxWRUhJQ0xFXyg/OlJFRkVSRU5DRV9GUkFNRXxUWVBFXyg/Ok5PTkV8U0xFRHxDQVJ8Qk9BVHxBSVJQTEFORXxCQUxMT09OKXwoPzpMSU5FQVJ8QU5HVUxBUilfKD86RlJJQ1RJT05fVElNRVNDQUxFfE1PVE9SX0RJUkVDVElPTil8TElORUFSX01PVE9SX09GRlNFVHxIT1ZFUl8oPzpIRUlHSFR8RUZGSUNJRU5DWXxUSU1FU0NBTEUpfEJVT1lBTkNZfCg/OkxJTkVBUnxBTkdVTEFSKV8oPzpERUZMRUNUSU9OXyg/OkVGRklDSUVOQ1l8VElNRVNDQUxFKXxNT1RPUl8oPzpERUNBWV8pP1RJTUVTQ0FMRSl8VkVSVElDQUxfQVRUUkFDVElPTl8oPzpFRkZJQ0lFTkNZfFRJTUVTQ0FMRSl8QkFOS0lOR18oPzpFRkZJQ0lFTkNZfE1JWHxUSU1FU0NBTEUpfEZMQUdfKD86Tk9fREVGTEVDVElPTl9VUHxMSU1JVF8oPzpST0xMX09OTFl8TU9UT1JfVVApfEhPVkVSXyg/Oig/OldBVEVSfFRFUlJBSU58VVApX09OTFl8R0xPQkFMX0hFSUdIVCl8TU9VU0VMT09LXyg/OlNURUVSfEJBTkspfENBTUVSQV9ERUNPVVBMRUQpKXxQUklNXyg/OkFMUEhBX01PREUoPzpfKD86QkxFTkR8RU1JU1NJVkV8TUFTS3xOT05FKSk/fE5PUk1BTHxTUEVDVUxBUnxUWVBFKD86Xyg/OkJPWHxDWUxJTkRFUnxQUklTTXxTUEhFUkV8VE9SVVN8VFVCRXxSSU5HfFNDVUxQVCkpP3xIT0xFXyg/OkRFRkFVTFR8Q0lSQ0xFfFNRVUFSRXxUUklBTkdMRSl8TUFURVJJQUwoPzpfKD86U1RPTkV8TUVUQUx8R0xBU1N8V09PRHxGTEVTSHxQTEFTVElDfFJVQkJFUikpP3xTSElOWV8oPzpOT05FfExPV3xNRURJVU18SElHSCl8QlVNUF8oPzpOT05FfEJSSUdIVHxEQVJLfFdPT0R8QkFSS3xCUklDS1N8Q0hFQ0tFUnxDT05DUkVURXxUSUxFfFNUT05FfERJU0tTfEdSQVZFTHxCTE9CU3xTSURJTkd8TEFSR0VUSUxFfFNUVUNDT3xTVUNUSU9OfFdFQVZFKXxURVhHRU5fKD86REVGQVVMVHxQTEFOQVIpfFNDVUxQVF8oPzpUWVBFXyg/OlNQSEVSRXxUT1JVU3xQTEFORXxDWUxJTkRFUnxNQVNLKXxGTEFHXyg/Ok1JUlJPUnxJTlZFUlQpKXxQSFlTSUNTKD86Xyg/OlNIQVBFXyg/OkNPTlZFWHxOT05FfFBSSU18VFlQRSkpKT98KD86UE9TfFJPVClfTE9DQUx8U0xJQ0V8VEVYVHxGTEVYSUJMRXxQT0lOVF9MSUdIVHxURU1QX09OX1JFWnxQSEFOVE9NfFBPU0lUSU9OfFNJWkV8Uk9UQVRJT058VEVYVFVSRXxOQU1FfE9NRUdBfERFU0N8TElOS19UQVJHRVR8Q09MT1J8QlVNUF9TSElOWXxGVUxMQlJJR0hUfFRFWEdFTnxHTE9XfE1FRElBXyg/OkFMVF9JTUFHRV9FTkFCTEV8Q09OVFJPTFN8KD86Q1VSUkVOVHxIT01FKV9VUkx8QVVUT18oPzpMT09QfFBMQVl8U0NBTEV8Wk9PTSl8RklSU1RfQ0xJQ0tfSU5URVJBQ1R8KD86V0lEVEh8SEVJR0hUKV9QSVhFTFN8V0hJVEVMSVNUKD86X0VOQUJMRSk/fFBFUk1TXyg/OklOVEVSQUNUfENPTlRST0wpfFBBUkFNX01BWHxDT05UUk9MU18oPzpTVEFOREFSRHxNSU5JKXxQRVJNXyg/Ok5PTkV8T1dORVJ8R1JPVVB8QU5ZT05FKXxNQVhfKD86VVJMX0xFTkdUSHxXSElURUxJU1RfKD86U0laRXxDT1VOVCl8KD86V0lEVEh8SEVJR0hUKV9QSVhFTFMpKSl8TUFTS18oPzpCQVNFfE9XTkVSfEdST1VQfEVWRVJZT05FfE5FWFQpfFBFUk1fKD86VFJBTlNGRVJ8TU9ESUZZfENPUFl8TU9WRXxBTEwpfFBBUkNFTF8oPzpNRURJQV9DT01NQU5EXyg/OlNUT1B8UEFVU0V8UExBWXxMT09QfFRFWFRVUkV8VVJMfFRJTUV8QUdFTlR8VU5MT0FEfEFVVE9fQUxJR058VFlQRXxTSVpFfERFU0N8TE9PUF9TRVQpfEZMQUdfKD86QUxMT1dfKD86RkxZfCg/OkdST1VQXyk/U0NSSVBUU3xMQU5ETUFSS3xURVJSQUZPUk18REFNQUdFfENSRUFURV8oPzpHUk9VUF8pP09CSkVDVFMpfFVTRV8oPzpBQ0NFU1NfKD86R1JPVVB8TElTVCl8QkFOX0xJU1R8TEFORF9QQVNTX0xJU1QpfExPQ0FMX1NPVU5EX09OTFl8UkVTVFJJQ1RfUFVTSE9CSkVDVHxBTExPV18oPzpHUk9VUHxBTEwpX09CSkVDVF9FTlRSWSl8Q09VTlRfKD86VE9UQUx8T1dORVJ8R1JPVVB8T1RIRVJ8U0VMRUNURUR8VEVNUCl8REVUQUlMU18oPzpOQU1FfERFU0N8T1dORVJ8R1JPVVB8QVJFQXxJRHxTRUVfQVZBVEFSUykpfExJU1RfU1RBVF8oPzpNQVh8TUlOfE1FQU58TUVESUFOfFNURF9ERVZ8U1VNKD86X1NRVUFSRVMpP3xOVU1fQ09VTlR8R0VPTUVUUklDX01FQU58UkFOR0UpfFBBWV8oPzpISURFfERFRkFVTFQpfFJFR0lPTl9GTEFHXyg/OkFMTE9XX0RBTUFHRXxGSVhFRF9TVU58QkxPQ0tfVEVSUkFGT1JNfFNBTkRCT1h8RElTQUJMRV8oPzpDT0xMSVNJT05TfFBIWVNJQ1MpfEJMT0NLX0ZMWXxBTExPV19ESVJFQ1RfVEVMRVBPUlR8UkVTVFJJQ1RfUFVTSE9CSkVDVCl8SFRUUF8oPzpNRVRIT0R8TUlNRVRZUEV8Qk9EWV8oPzpNQVhMRU5HVEh8VFJVTkNBVEVEKXxDVVNUT01fSEVBREVSfFBSQUdNQV9OT19DQUNIRXxWRVJCT1NFX1RIUk9UVExFfFZFUklGWV9DRVJUKXxTVFJJTkdfKD86VFJJTSg/Ol8oPzpIRUFEfFRBSUwpKT8pfENMSUNLX0FDVElPTl8oPzpOT05FfFRPVUNIfFNJVHxCVVl8UEFZfE9QRU4oPzpfTUVESUEpP3xQTEFZfFpPT00pfFRPVUNIX0lOVkFMSURfRkFDRXxQUk9GSUxFXyg/Ok5PTkV8U0NSSVBUX01FTU9SWSl8UkNfKD86REFUQV9GTEFHU3xERVRFQ1RfUEhBTlRPTXxHRVRfKD86TElOS19OVU18Tk9STUFMfFJPT1RfS0VZKXxNQVhfSElUU3xSRUpFQ1RfKD86VFlQRVN8QUdFTlRTfCg/Ok5PTik/UEhZU0lDQUx8TEFORCkpfFJDRVJSXyg/OkNBU1RfVElNRV9FWENFRURFRHxTSU1fUEVSRl9MT1d8VU5LTk9XTil8RVNUQVRFX0FDQ0VTU18oPzpBTExPV0VEXyg/OkFHRU5UfEdST1VQKV8oPzpBRER8UkVNT1ZFKXxCQU5ORURfQUdFTlRfKD86QUREfFJFTU9WRSkpfERFTlNJVFl8RlJJQ1RJT058UkVTVElUVVRJT058R1JBVklUWV9NVUxUSVBMSUVSfEtGTV8oPzpDT01NQU5EfENNRF8oPzpQTEFZfFNUT1B8UEFVU0UpfE1PREV8Rk9SV0FSRHxMT09QfFBJTkdfUE9OR3xSRVZFUlNFfERBVEF8Uk9UQVRJT058VFJBTlNMQVRJT04pfEVSUl8oPzpHRU5FUklDfFBBUkNFTF9QRVJNSVNTSU9OU3xNQUxGT1JNRURfUEFSQU1TfFJVTlRJTUVfUEVSTUlTU0lPTlN8VEhST1RUTEVEKXxDSEFSQUNURVJfKD86Q01EXyg/Oig/OlNNT09USF8pP1NUT1B8SlVNUCl8REVTSVJFRF8oPzpUVVJOXyk/U1BFRUR8UkFESVVTfFNUQVlfV0lUSElOX1BBUkNFTHxMRU5HVEh8T1JJRU5UQVRJT058QUNDT1VOVF9GT1JfU0tJUFBFRF9GUkFNRVN8QVZPSURBTkNFX01PREV8VFlQRSg/Ol8oPzpbQUJDRF18Tk9ORSkpP3xNQVhfKD86REVDRUx8VFVSTl9SQURJVVN8KD86QUNDRUx8U1BFRUQpKSl8UFVSU1VJVF8oPzpPRkZTRVR8RlVaWl9GQUNUT1J8R09BTF9UT0xFUkFOQ0V8SU5URVJDRVBUKXxSRVFVSVJFX0xJTkVfT0ZfU0lHSFR8Rk9SQ0VfRElSRUNUX1BBVEh8VkVSVElDQUx8SE9SSVpPTlRBTHxBVk9JRF8oPzpDSEFSQUNURVJTfERZTkFNSUNfT0JTVEFDTEVTfE5PTkUpfFBVXyg/OkVWQURFXyg/OkhJRERFTnxTUE9UVEVEKXxGQUlMVVJFXyg/OkRZTkFNSUNfUEFUSEZJTkRJTkdfRElTQUJMRUR8SU5WQUxJRF8oPzpHT0FMfFNUQVJUKXxOT18oPzpOQVZNRVNIfFZBTElEX0RFU1RJTkFUSU9OKXxPVEhFUnxUQVJHRVRfR09ORXwoPzpQQVJDRUxfKT9VTlJFQUNIQUJMRSl8KD86R09BTHxTTE9XRE9XTl9ESVNUQU5DRSlfUkVBQ0hFRCl8VFJBVkVSU0FMX1RZUEUoPzpfKD86RkFTVHxOT05FfFNMT1cpKT98Q09OVEVOVF9UWVBFXyg/OkFUT018Rk9STXxIVE1MfEpTT058TExTRHxSU1N8VEVYVHxYSFRNTHxYTUwpfEdDTlBfKD86UkFESVVTfFNUQVRJQyl8KD86UEFUUk9MfFdBTkRFUilfUEFVU0VfQVRfV0FZUE9JTlRTfE9QVF8oPzpBVkFUQVJ8Q0hBUkFDVEVSfEVYQ0xVU0lPTl9WT0xVTUV8TEVHQUNZX0xJTktTRVR8TUFURVJJQUxfVk9MVU1FfE9USEVSfFNUQVRJQ19PQlNUQUNMRXxXQUxLQUJMRSl8U0lNX1NUQVRfUENUX0NIQVJTX1NURVBQRUQpXFxiIn0se2JlZ2luOiJcXGIoPzpGQUxTRXxUUlVFKVxcYiJ9LHtiZWdpbjoiXFxiKD86WkVST19ST1RBVElPTilcXGIifSx7YmVnaW46IlxcYig/OkVPRnxKU09OXyg/OkFSUkFZfERFTEVURXxGQUxTRXxJTlZBTElEfE5VTEx8TlVNQkVSfE9CSkVDVHxTVFJJTkd8VFJVRSl8TlVMTF9LRVl8VEVYVFVSRV8oPzpCTEFOS3xERUZBVUxUfE1FRElBfFBMWVdPT0R8VFJBTlNQQVJFTlQpfFVSTF9SRVFVRVNUXyg/OkdSQU5URUR8REVOSUVEKSlcXGIifSx7YmVnaW46IlxcYig/OlpFUk9fVkVDVE9SfFRPVUNIX0lOVkFMSURfKD86VEVYQ09PUkR8VkVDVE9SKSlcXGIifV19LHM9e2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOiJcXGIoPzpsbCg/OkFnZW50SW5FeHBlcmllbmNlfCg/OkNyZWF0ZXxEYXRhU2l6ZXxEZWxldGV8S2V5Q291bnR8S2V5c3xSZWFkfFVwZGF0ZSlLZXlWYWx1ZXxHZXRFeHBlcmllbmNlKD86RGV0YWlsc3xFcnJvck1lc3NhZ2UpfFJldHVybk9iamVjdHNCeSg/OklEfE93bmVyKXxKc29uKD86Mkxpc3R8W0dTXWV0VmFsdWV8VmFsdWVUeXBlKXxTaW58Q29zfFRhbnxBdGFuMnxTcXJ0fFBvd3xBYnN8RmFic3xGcmFuZHxGbG9vcnxDZWlsfFJvdW5kfFZlYyg/Ok1hZ3xOb3JtfERpc3QpfFJvdCg/OkJldHdlZW58Mig/OkV1bGVyfEZ3ZHxMZWZ0fFVwKSl8KD86RXVsZXJ8QXhlcykyUm90fFdoaXNwZXJ8KD86UmVnaW9ufE93bmVyKT9TYXl8U2hvdXR8TGlzdGVuKD86Q29udHJvbHxSZW1vdmUpP3xTZW5zb3IoPzpSZXBlYXR8UmVtb3ZlKT98RGV0ZWN0ZWQoPzpOYW1lfEtleXxPd25lcnxUeXBlfFBvc3xWZWx8R3JhYnxSb3R8R3JvdXB8TGlua051bWJlcil8RGllfEdyb3VuZHxXaW5kfCg/OltHU11ldCkoPzpBbmltYXRpb25PdmVycmlkZXxNZW1vcnlMaW1pdHxQcmltTWVkaWFQYXJhbXN8UGFyY2VsTXVzaWNVUkx8T2JqZWN0KD86RGVzY3xOYW1lKXxQaHlzaWNzTWF0ZXJpYWx8U3RhdHVzfFNjYWxlfENvbG9yfEFscGhhfFRleHR1cmV8UG9zfFJvdHxGb3JjZXxUb3JxdWUpfFJlc2V0QW5pbWF0aW9uT3ZlcnJpZGV8KD86U2NhbGV8T2Zmc2V0fFJvdGF0ZSlUZXh0dXJlfCg/OlJvdCk/VGFyZ2V0KD86UmVtb3ZlKT98KD86U3RvcCk/TW92ZVRvVGFyZ2V0fEFwcGx5KD86Um90YXRpb25hbCk/SW1wdWxzZXxTZXQoPzpLZXlmcmFtZWRNb3Rpb258Q29udGVudFR5cGV8UmVnaW9uUG9zfCg/OkFuZ3VsYXIpP1ZlbG9jaXR5fEJ1b3lhbmN5fEhvdmVySGVpZ2h0fEZvcmNlQW5kVG9ycXVlfFRpbWVyRXZlbnR8U2NyaXB0U3RhdGV8RGFtYWdlfFRleHR1cmVBbmltfFNvdW5kKD86UXVldWVpbmd8UmFkaXVzKXxWZWhpY2xlKD86VHlwZXwoPzpGbG9hdHxWZWN0b3J8Um90YXRpb24pUGFyYW0pfCg/OlRvdWNofFNpdCk/VGV4dHxDYW1lcmEoPzpFeWV8QXQpT2Zmc2V0fFByaW1pdGl2ZVBhcmFtc3xDbGlja0FjdGlvbnxMaW5rKD86QWxwaGF8Q29sb3J8UHJpbWl0aXZlUGFyYW1zKD86RmFzdCk/fFRleHR1cmUoPzpBbmltKT98Q2FtZXJhfE1lZGlhKXxSZW1vdGVTY3JpcHRBY2Nlc3NQaW58UGF5UHJpY2V8TG9jYWxSb3QpfFNjYWxlQnlGYWN0b3J8R2V0KD86KD86TWF4fE1pbilTY2FsZUZhY3RvcnxDbG9zZXN0TmF2UG9pbnR8U3RhdGljUGF0aHxTaW1TdGF0c3xFbnZ8UHJpbWl0aXZlUGFyYW1zfExpbmsoPzpQcmltaXRpdmVQYXJhbXN8TnVtYmVyKD86T2ZTaWRlcyk/fEtleXxOYW1lfE1lZGlhKXxIVFRQSGVhZGVyfEZyZWVVUkxzfE9iamVjdCg/OkRldGFpbHN8UGVybU1hc2t8UHJpbUNvdW50KXxQYXJjZWwoPzpNYXhQcmltc3xEZXRhaWxzfFByaW0oPzpDb3VudHxPd25lcnMpKXxBdHRhY2hlZCg/Okxpc3QpP3woPzpTUE1heHxGcmVlfFVzZWQpTWVtb3J5fFJlZ2lvbig/Ok5hbWV8VGltZURpbGF0aW9ufEZQU3xDb3JuZXJ8QWdlbnRDb3VudCl8Um9vdCg/OlBvc2l0aW9ufFJvdGF0aW9uKXxVbml4VGltZXwoPzpQYXJjZWx8UmVnaW9uKUZsYWdzfCg/OldhbGx8R01UKWNsb2NrfFNpbXVsYXRvckhvc3RuYW1lfEJvdW5kaW5nQm94fEdlb21ldHJpY0NlbnRlcnxDcmVhdG9yfE51bWJlck9mKD86UHJpbXN8Tm90ZWNhcmRMaW5lc3xTaWRlcyl8QW5pbWF0aW9uKD86TGlzdCk/fCg/OkNhbWVyYXxMb2NhbCkoPzpQb3N8Um90KXxWZWx8QWNjZWx8T21lZ2F8VGltZSg/OnN0YW1wfE9mRGF5KXwoPzpPYmplY3R8Q2VudGVyT2YpP01hc3N8TWFzc01LU3xFbmVyZ3l8T3duZXJ8KD86T3duZXIpP0tleXxTdW5EaXJlY3Rpb258VGV4dHVyZSg/Ok9mZnNldHxTY2FsZXxSb3QpfEludmVudG9yeSg/Ok51bWJlcnxOYW1lfEtleXxUeXBlfENyZWF0b3J8UGVybU1hc2spfFBlcm1pc3Npb25zKD86S2V5KT98U3RhcnRQYXJhbWV0ZXJ8TGlzdCg/Okxlbmd0aHxFbnRyeVR5cGUpfERhdGV8QWdlbnQoPzpTaXplfEluZm98TGFuZ3VhZ2V8TGlzdCl8TGFuZE93bmVyQXR8Tm90ZWNhcmRMaW5lfFNjcmlwdCg/Ok5hbWV8U3RhdGUpKXwoPzpHZXR8UmVzZXR8R2V0QW5kUmVzZXQpVGltZXxQbGF5U291bmQoPzpTbGF2ZSk/fExvb3BTb3VuZCg/Ok1hc3RlcnxTbGF2ZSk/fCg/OlRyaWdnZXJ8U3RvcHxQcmVsb2FkKVNvdW5kfCg/Oig/OkdldHxEZWxldGUpU3VifEluc2VydClTdHJpbmd8VG8oPzpVcHBlcnxMb3dlcil8R2l2ZSg/OkludmVudG9yeUxpc3R8TW9uZXkpfFJlek9iamVjdHwoPzpTdG9wKT9Mb29rQXR8U2xlZXB8Q29sbGlzaW9uRmlsdGVyfCg/OlRha2V8UmVsZWFzZSlDb250cm9sc3xEZXRhY2hGcm9tQXZhdGFyfEF0dGFjaFRvQXZhdGFyKD86VGVtcCk/fEluc3RhbnRNZXNzYWdlfCg/OkdldE5leHQpP0VtYWlsfFN0b3BIb3ZlcnxNaW5FdmVudERlbGF5fFJvdExvb2tBdHxTdHJpbmcoPzpMZW5ndGh8VHJpbSl8KD86U3RhcnR8U3RvcClBbmltYXRpb258VGFyZ2V0T21lZ2F8UmVxdWVzdCg/OkV4cGVyaWVuY2UpP1Blcm1pc3Npb25zfCg/OkNyZWF0ZXxCcmVhaylMaW5rfEJyZWFrQWxsTGlua3N8KD86R2l2ZXxSZW1vdmUpSW52ZW50b3J5fFdhdGVyfFBhc3NUb3VjaGVzfFJlcXVlc3QoPzpBZ2VudHxJbnZlbnRvcnkpRGF0YXxUZWxlcG9ydEFnZW50KD86SG9tZXxHbG9iYWxDb29yZHMpP3xNb2RpZnlMYW5kfENvbGxpc2lvblNvdW5kfFJlc2V0U2NyaXB0fE1lc3NhZ2VMaW5rZWR8UHVzaE9iamVjdHxQYXNzQ29sbGlzaW9uc3xBeGlzQW5nbGUyUm90fFJvdDIoPzpBeGlzfEFuZ2xlKXxBKD86Y29zfHNpbil8QW5nbGVCZXR3ZWVufEFsbG93SW52ZW50b3J5RHJvcHxTdWJTdHJpbmdJbmRleHxMaXN0Mig/OkNTVnxJbnRlZ2VyfEpzb258RmxvYXR8U3RyaW5nfEtleXxWZWN0b3J8Um90fExpc3QoPzpTdHJpZGVkKT8pfERlbGV0ZVN1Ykxpc3R8TGlzdCg/OlN0YXRpc3RpY3N8U29ydHxSYW5kb21pemV8KD86SW5zZXJ0fEZpbmR8UmVwbGFjZSlMaXN0KXxFZGdlT2ZXb3JsZHxBZGp1c3RTb3VuZFZvbHVtZXxLZXkyTmFtZXxUcmlnZ2VyU291bmRMaW1pdGVkfEVqZWN0RnJvbUxhbmR8KD86Q1NWfFBhcnNlU3RyaW5nKTJMaXN0fE92ZXJNeUxhbmR8U2FtZUdyb3VwfFVuU2l0fEdyb3VuZCg/OlNsb3BlfE5vcm1hbHxDb250b3VyKXxHcm91bmRSZXBlbHwoPzpTZXR8UmVtb3ZlKVZlaGljbGVGbGFnc3woPzpBdmF0YXJPbik/KD86TGluayk/U2l0VGFyZ2V0fFNjcmlwdCg/OkRhbmdlcnxQcm9maWxlcil8RGlhbG9nfFZvbHVtZURldGVjdHxSZXNldE90aGVyU2NyaXB0fFJlbW90ZUxvYWRTY3JpcHRQaW58KD86T3BlbnxDbG9zZSlSZW1vdGVEYXRhQ2hhbm5lbHxTZW5kUmVtb3RlRGF0YXxSZW1vdGVEYXRhUmVwbHl8KD86SW50ZWdlcnxTdHJpbmcpVG9CYXNlNjR8WG9yQmFzZTY0fExvZyg/OjEwKT98QmFzZTY0VG8oPzpTdHJpbmd8SW50ZWdlcil8UGFyc2VTdHJpbmdLZWVwTnVsbHN8UmV6QXRSb290fFJlcXVlc3RTaW11bGF0b3JEYXRhfEZvcmNlTW91c2Vsb29rfCg/OkxvYWR8UmVsZWFzZXwoPzpFfFVuZSlzY2FwZSlVUkx8UGFyY2VsTWVkaWEoPzpDb21tYW5kTGlzdHxRdWVyeSl8TW9kUG93fE1hcERlc3RpbmF0aW9ufCg/OlJlbW92ZUZyb218QWRkVG98UmVzZXQpTGFuZCg/OlBhc3N8QmFuKUxpc3R8KD86U2V0fENsZWFyKUNhbWVyYVBhcmFtc3xIVFRQKD86UmVxdWVzdHxSZXNwb25zZSl8VGV4dEJveHxEZXRlY3RlZFRvdWNoKD86VVZ8RmFjZXxQb3N8KD86TnxCaW4pb3JtYWx8U1QpfCg/Ok1ENXxTSEExfER1bXBMaXN0MilTdHJpbmd8UmVxdWVzdCg/OlNlY3VyZSk/VVJMfENsZWFyKD86UHJpbXxMaW5rKU1lZGlhfCg/OkxpbmspP1BhcnRpY2xlU3lzdGVtfCg/OkdldHxSZXF1ZXN0KSg/OlVzZXJuYW1lfERpc3BsYXlOYW1lKXxSZWdpb25TYXlUb3xDYXN0UmF5fEdlbmVyYXRlS2V5fFRyYW5zZmVyTGluZGVuRG9sbGFyc3xNYW5hZ2VFc3RhdGVBY2Nlc3N8KD86Q3JlYXRlfERlbGV0ZSlDaGFyYWN0ZXJ8RXhlY0NoYXJhY3RlckNtZHxFdmFkZXxGbGVlRnJvbXxOYXZpZ2F0ZVRvfFBhdHJvbFBvaW50c3xQdXJzdWV8VXBkYXRlQ2hhcmFjdGVyfFdhbmRlcldpdGhpbikpXFxiIn07cmV0dXJue2lsbGVnYWw6IjoiLGNvbnRhaW5zOltuLHtjbGFzc05hbWU6ImNvbW1lbnQiLHZhcmlhbnRzOltlLkNPTU1FTlQoIi8vIiwiJCIpLGUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iKV19LHIse2NsYXNzTmFtZToic2VjdGlvbiIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKD86c3RhdGV8ZGVmYXVsdClcXGIifSx7YmVnaW46IlxcYig/OnN0YXRlXyg/OmVudHJ5fGV4aXQpfHRvdWNoKD86Xyg/OnN0YXJ0fGVuZCkpP3woPzpsYW5kXyk/Y29sbGlzaW9uKD86Xyg/OnN0YXJ0fGVuZCkpP3x0aW1lcnxsaXN0ZW58KD86bm9fKT9zZW5zb3J8Y29udHJvbHwoPzpub3RfKT9hdF8oPzpyb3RfKT90YXJnZXR8bW9uZXl8ZW1haWx8ZXhwZXJpZW5jZV9wZXJtaXNzaW9ucyg/Ol9kZW5pZWQpP3xydW5fdGltZV9wZXJtaXNzaW9uc3xjaGFuZ2VkfGF0dGFjaHxkYXRhc2VydmVyfG1vdmluZ18oPzpzdGFydHxlbmQpfGxpbmtfbWVzc2FnZXwoPzpvbnxvYmplY3QpX3JlenxyZW1vdGVfZGF0YXxodHRwX3JlKD86c3BvbnNlfHF1ZXN0KXxwYXRoX3VwZGF0ZXx0cmFuc2FjdGlvbl9yZXN1bHQpXFxiIn1dfSxzLG8se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYig/OmludGVnZXJ8ZmxvYXR8c3RyaW5nfGtleXx2ZWN0b3J8cXVhdGVybmlvbnxyb3RhdGlvbnxsaXN0KVxcYiJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHVhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17YmVnaW46IlxcWz0qXFxbIixlbmQ6IlxcXT0qXFxdIixjb250YWluczpbInNlbGYiXX0sbj1bZS5DT01NRU5UKCItLSg/IVxcWz0qXFxbKSIsIiQiKSxlLkNPTU1FTlQoIi0tXFxbPSpcXFsiLCJcXF09KlxcXSIse2NvbnRhaW5zOlt0XSxyZWxldmFuY2U6MTB9KV07cmV0dXJue2xleGVtZXM6ZS5VTkRFUlNDT1JFX0lERU5UX1JFLGtleXdvcmRzOntsaXRlcmFsOiJ0cnVlIGZhbHNlIG5pbCIsa2V5d29yZDoiYW5kIGJyZWFrIGRvIGVsc2UgZWxzZWlmIGVuZCBmb3IgZ290byBpZiBpbiBsb2NhbCBub3Qgb3IgcmVwZWF0IHJldHVybiB0aGVuIHVudGlsIHdoaWxlIixidWlsdF9pbjoiX0cgX0VOViBfVkVSU0lPTiBfX2luZGV4IF9fbmV3aW5kZXggX19tb2RlIF9fY2FsbCBfX21ldGF0YWJsZSBfX3Rvc3RyaW5nIF9fbGVuIF9fZ2MgX19hZGQgX19zdWIgX19tdWwgX19kaXYgX19tb2QgX19wb3cgX19jb25jYXQgX191bm0gX19lcSBfX2x0IF9fbGUgYXNzZXJ0IGNvbGxlY3RnYXJiYWdlIGRvZmlsZSBlcnJvciBnZXRmZW52IGdldG1ldGF0YWJsZSBpcGFpcnMgbG9hZCBsb2FkZmlsZSBsb2Fkc3RyaW5nbW9kdWxlIG5leHQgcGFpcnMgcGNhbGwgcHJpbnQgcmF3ZXF1YWwgcmF3Z2V0IHJhd3NldCByZXF1aXJlIHNlbGVjdCBzZXRmZW52c2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZmNvcm91dGluZSByZXN1bWUgeWllbGQgc3RhdHVzIHdyYXAgY3JlYXRlIHJ1bm5pbmcgZGVidWcgZ2V0dXB2YWx1ZSBkZWJ1ZyBzZXRob29rIGdldG1ldGF0YWJsZSBnZXRob29rIHNldG1ldGF0YWJsZSBzZXRsb2NhbCB0cmFjZWJhY2sgc2V0ZmVudiBnZXRpbmZvIHNldHVwdmFsdWUgZ2V0bG9jYWwgZ2V0cmVnaXN0cnkgZ2V0ZmVudiBpbyBsaW5lcyB3cml0ZSBjbG9zZSBmbHVzaCBvcGVuIG91dHB1dCB0eXBlIHJlYWQgc3RkZXJyIHN0ZGluIGlucHV0IHN0ZG91dCBwb3BlbiB0bXBmaWxlIG1hdGggbG9nIG1heCBhY29zIGh1Z2UgbGRleHAgcGkgY29zIHRhbmggcG93IGRlZyB0YW4gY29zaCBzaW5oIHJhbmRvbSByYW5kb21zZWVkIGZyZXhwIGNlaWwgZmxvb3IgcmFkIGFicyBzcXJ0IG1vZGYgYXNpbiBtaW4gbW9kIGZtb2QgbG9nMTAgYXRhbjIgZXhwIHNpbiBhdGFuIG9zIGV4aXQgc2V0bG9jYWxlIGRhdGUgZ2V0ZW52IGRpZmZ0aW1lIHJlbW92ZSB0aW1lIGNsb2NrIHRtcG5hbWUgcmVuYW1lIGV4ZWN1dGUgcGFja2FnZSBwcmVsb2FkIGxvYWRsaWIgbG9hZGVkIGxvYWRlcnMgY3BhdGggY29uZmlnIHBhdGggc2VlYWxsIHN0cmluZyBzdWIgdXBwZXIgbGVuIGdmaW5kIHJlcCBmaW5kIG1hdGNoIGNoYXIgZHVtcCBnbWF0Y2ggcmV2ZXJzZSBieXRlIGZvcm1hdCBnc3ViIGxvd2VyIHRhYmxlIHNldG4gaW5zZXJ0IGdldG4gZm9yZWFjaGkgbWF4biBmb3JlYWNoIGNvbmNhdCBzb3J0IHJlbW92ZSJ9LGNvbnRhaW5zOm4uY29uY2F0KFt7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDoiXFwpIixjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46IihbX2EtekEtWl1cXHcqXFwuKSooW19hLXpBLVpdXFx3KjopP1tfYS16QS1aXVxcdyoifSkse2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoIixlbmRzV2l0aFBhcmVudDohMCxjb250YWluczpufV0uY29uY2F0KG4pfSxlLkNfTlVNQkVSX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiXFxbPSpcXFsiLGVuZDoiXFxdPSpcXF0iLGNvbnRhaW5zOlt0XSxyZWxldmFuY2U6NX1dKX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWFrZWZpbGUuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOiJcXCRcXCgiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFwpIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOi9cJFtAJTw/XF5cK1wqXS99XX0sbj17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdF19LHI9e2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9cJFwoW1x3LV0rXHMvLGVuZDovXCkvLGtleXdvcmRzOntidWlsdF9pbjoic3Vic3QgcGF0c3Vic3Qgc3RyaXAgZmluZHN0cmluZyBmaWx0ZXIgZmlsdGVyLW91dCBzb3J0IHdvcmQgd29yZGxpc3QgZmlyc3R3b3JkIGxhc3R3b3JkIGRpciBub3RkaXIgc3VmZml4IGJhc2VuYW1lIGFkZHN1ZmZpeCBhZGRwcmVmaXggam9pbiB3aWxkY2FyZCByZWFscGF0aCBhYnNwYXRoIGVycm9yIHdhcm5pbmcgc2hlbGwgb3JpZ2luIGZsYXZvciBmb3JlYWNoIGlmIG9yIGFuZCBjYWxsIGV2YWwgZmlsZSB2YWx1ZSJ9LGNvbnRhaW5zOlt0XX0sbz17YmVnaW46Il4iK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKls6Kz9dPz0iLGlsbGVnYWw6IlxcbiIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tiZWdpbjoiXiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLGVuZDoiWzorP10/PSIsZXhjbHVkZUVuZDohMH1dfSxzPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eXC5QSE9OWTovLGVuZDovJC8sa2V5d29yZHM6eyJtZXRhLWtleXdvcmQiOiIuUEhPTlkifSxsZXhlbWVzOi9bXC5cd10rL30saT17Y2xhc3NOYW1lOiJzZWN0aW9uIixiZWdpbjovXlteXHNdKzovLGVuZDovJC8sY29udGFpbnM6W3RdfTtyZXR1cm57YWxpYXNlczpbIm1rIiwibWFrIl0sa2V5d29yZHM6ImRlZmluZSBlbmRlZiB1bmRlZmluZSBpZmRlZiBpZm5kZWYgaWZlcSBpZm5lcSBlbHNlIGVuZGlmIGluY2x1ZGUgLWluY2x1ZGUgc2luY2x1ZGUgb3ZlcnJpZGUgZXhwb3J0IHVuZXhwb3J0IHByaXZhdGUgdnBhdGgiLGxleGVtZXM6L1tcdy1dKy8sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsdCxuLHIsbyxzLGldfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXJrZG93bi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJtZCIsIm1rZG93biIsIm1rZCJdLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzZWN0aW9uIix2YXJpYW50czpbe2JlZ2luOiJeI3sxLDZ9IixlbmQ6IiQifSx7YmVnaW46Il4uKz9cXG5bPS1dezIsfSQifV19LHtiZWdpbjoiPCIsZW5kOiI+IixzdWJMYW5ndWFnZToieG1sIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiYnVsbGV0IixiZWdpbjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjbGFzc05hbWU6InN0cm9uZyIsYmVnaW46IlsqX117Mn0uKz9bKl9dezJ9In0se2NsYXNzTmFtZToiZW1waGFzaXMiLHZhcmlhbnRzOlt7YmVnaW46IlxcKi4rP1xcKiJ9LHtiZWdpbjoiXy4rP18iLHJlbGV2YW5jZTowfV19LHtjbGFzc05hbWU6InF1b3RlIixiZWdpbjoiXj5cXHMrIixlbmQ6IiQifSx7Y2xhc3NOYW1lOiJjb2RlIix2YXJpYW50czpbe2JlZ2luOiJeYGBgdypzKiQiLGVuZDoiXmBgYHMqJCJ9LHtiZWdpbjoiYC4rP2AifSx7YmVnaW46Il4oIHs0fXxcdCkiLGVuZDoiJCIscmVsZXZhbmNlOjB9XX0se2JlZ2luOiJeWy1cXCpdezMsfSIsZW5kOiIkIn0se2JlZ2luOiJcXFsuKz9cXF1bXFwoXFxbXS4qP1tcXClcXF1dIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiXFxbIixlbmQ6IlxcXSIsZXhjbHVkZUJlZ2luOiEwLHJldHVybkVuZDohMCxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibGluayIsYmVnaW46IlxcXVxcKCIsZW5kOiJcXCkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJcXF1cXFsiLGVuZDoiXFxdIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMH1dLHJlbGV2YW5jZToxMH0se2JlZ2luOi9eXFtbXlxuXStcXTovLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9cWy8sZW5kOi9cXS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHtjbGFzc05hbWU6ImxpbmsiLGJlZ2luOi86XHMqLyxlbmQ6LyQvLGV4Y2x1ZGVCZWdpbjohMH1dfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGhlbWF0aWNhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbIm1tYSJdLGxleGVtZXM6IihcXCR8XFxiKSIrZS5JREVOVF9SRSsiXFxiIixrZXl3b3JkczoiQWJlbGlhbkdyb3VwIEFib3J0IEFib3J0S2VybmVscyBBYm9ydFByb3RlY3QgQWJvdmUgQWJzIEFic29sdXRlIEFic29sdXRlQ29ycmVsYXRpb24gQWJzb2x1dGVDb3JyZWxhdGlvbkZ1bmN0aW9uIEFic29sdXRlQ3VycmVudFZhbHVlIEFic29sdXRlRGFzaGluZyBBYnNvbHV0ZUZpbGVOYW1lIEFic29sdXRlT3B0aW9ucyBBYnNvbHV0ZVBvaW50U2l6ZSBBYnNvbHV0ZVRoaWNrbmVzcyBBYnNvbHV0ZVRpbWUgQWJzb2x1dGVUaW1pbmcgQWNjb3VudGluZ0Zvcm0gQWNjdW11bGF0ZSBBY2N1cmFjeSBBY2N1cmFjeUdvYWwgQWN0aW9uRGVsYXkgQWN0aW9uTWVudSBBY3Rpb25NZW51Qm94IEFjdGlvbk1lbnVCb3hPcHRpb25zIEFjdGl2ZSBBY3RpdmVJdGVtIEFjdGl2ZVN0eWxlIEFjeWNsaWNHcmFwaFEgQWRkT25IZWxwUGF0aCBBZGRUbyBBZGphY2VuY3lHcmFwaCBBZGphY2VuY3lMaXN0IEFkamFjZW5jeU1hdHJpeCBBZGp1c3RtZW50Qm94IEFkanVzdG1lbnRCb3hPcHRpb25zIEFkanVzdFRpbWVTZXJpZXNGb3JlY2FzdCBBZmZpbmVUcmFuc2Zvcm0gQWZ0ZXIgQWlyeUFpIEFpcnlBaVByaW1lIEFpcnlBaVplcm8gQWlyeUJpIEFpcnlCaVByaW1lIEFpcnlCaVplcm8gQWxnZWJyYWljSW50ZWdlclEgQWxnZWJyYWljTnVtYmVyIEFsZ2VicmFpY051bWJlckRlbm9taW5hdG9yIEFsZ2VicmFpY051bWJlck5vcm0gQWxnZWJyYWljTnVtYmVyUG9seW5vbWlhbCBBbGdlYnJhaWNOdW1iZXJUcmFjZSBBbGdlYnJhaWNSdWxlcyBBbGdlYnJhaWNSdWxlc0RhdGEgQWxnZWJyYWljcyBBbGdlYnJhaWNVbml0USBBbGlnbm1lbnQgQWxpZ25tZW50TWFya2VyIEFsaWdubWVudFBvaW50IEFsbCBBbGxvd2VkRGltZW5zaW9ucyBBbGxvd0dyb3VwQ2xvc2UgQWxsb3dJbmxpbmVDZWxscyBBbGxvd0tlcm5lbEluaXRpYWxpemF0aW9uIEFsbG93UmV2ZXJzZUdyb3VwQ2xvc2UgQWxsb3dTY3JpcHRMZXZlbENoYW5nZSBBbHBoYUNoYW5uZWwgQWx0ZXJuYXRpbmdHcm91cCBBbHRlcm5hdGl2ZUh5cG90aGVzaXMgQWx0ZXJuYXRpdmVzIEFtYmllbnRMaWdodCBBbmFseXRpYyBBbmNob3JlZFNlYXJjaCBBbmQgQW5kZXJzb25EYXJsaW5nVGVzdCBBbmdlckogQW5nbGVCcmFja2V0IEFuZ3VsYXJHYXVnZSBBbmltYXRlIEFuaW1hdGlvbkN5Y2xlT2Zmc2V0IEFuaW1hdGlvbkN5Y2xlUmVwZXRpdGlvbnMgQW5pbWF0aW9uRGlyZWN0aW9uIEFuaW1hdGlvbkRpc3BsYXlUaW1lIEFuaW1hdGlvblJhdGUgQW5pbWF0aW9uUmVwZXRpdGlvbnMgQW5pbWF0aW9uUnVubmluZyBBbmltYXRvciBBbmltYXRvckJveCBBbmltYXRvckJveE9wdGlvbnMgQW5pbWF0b3JFbGVtZW50cyBBbm5vdGF0aW9uIEFubnVpdHkgQW5udWl0eUR1ZSBBbnRpYWxpYXNpbmcgQW50aXN5bW1ldHJpYyBBcGFydCBBcGFydFNxdWFyZUZyZWUgQXBwZWFyYW5jZSBBcHBlYXJhbmNlRWxlbWVudHMgQXBwZWxsRjEgQXBwZW5kIEFwcGVuZFRvIEFwcGx5IEFyY0NvcyBBcmNDb3NoIEFyY0NvdCBBcmNDb3RoIEFyY0NzYyBBcmNDc2NoIEFyY1NlYyBBcmNTZWNoIEFyY1NpbiBBcmNTaW5EaXN0cmlidXRpb24gQXJjU2luaCBBcmNUYW4gQXJjVGFuaCBBcmcgQXJnTWF4IEFyZ01pbiBBcmd1bWVudENvdW50USBBUklNQVByb2Nlc3MgQXJpdGhtZXRpY0dlb21ldHJpY01lYW4gQVJNQVByb2Nlc3MgQVJQcm9jZXNzIEFycmF5IEFycmF5Q29tcG9uZW50cyBBcnJheURlcHRoIEFycmF5RmxhdHRlbiBBcnJheVBhZCBBcnJheVBsb3QgQXJyYXlRIEFycmF5UmVzaGFwZSBBcnJheVJ1bGVzIEFycmF5cyBBcnJvdyBBcnJvdzNEQm94IEFycm93Qm94IEFycm93aGVhZHMgQXNwZWN0UmF0aW8gQXNwZWN0UmF0aW9GaXhlZCBBc3NlcnQgQXNzdW1pbmcgQXNzdW1wdGlvbnMgQXN0cm9ub21pY2FsRGF0YSBBc3luY2hyb25vdXMgQXN5bmNocm9ub3VzVGFza09iamVjdCBBc3luY2hyb25vdXNUYXNrcyBBdG9tUSBBdHRyaWJ1dGVzIEF1Z21lbnRlZFN5bW1ldHJpY1BvbHlub21pYWwgQXV0b0FjdGlvbiBBdXRvRGVsZXRlIEF1dG9FdmFsdWF0ZUV2ZW50cyBBdXRvR2VuZXJhdGVkUGFja2FnZSBBdXRvSW5kZW50IEF1dG9JbmRlbnRTcGFjaW5ncyBBdXRvSXRhbGljV29yZHMgQXV0b2xvYWRQYXRoIEF1dG9NYXRjaCBBdXRvbWF0aWMgQXV0b21hdGljSW1hZ2VTaXplIEF1dG9NdWx0aXBsaWNhdGlvblN5bWJvbCBBdXRvTnVtYmVyRm9ybWF0dGluZyBBdXRvT3Blbk5vdGVib29rcyBBdXRvT3BlblBhbGV0dGVzIEF1dG9ydW5TZXF1ZW5jaW5nIEF1dG9TY2FsaW5nIEF1dG9TY3JvbGwgQXV0b1NwYWNpbmcgQXV0b1N0eWxlT3B0aW9ucyBBdXRvU3R5bGVXb3JkcyBBeGVzIEF4ZXNFZGdlIEF4ZXNMYWJlbCBBeGVzT3JpZ2luIEF4ZXNTdHlsZSBBeGlzIEJhYnlNb25zdGVyR3JvdXBCIEJhY2sgQmFja2dyb3VuZCBCYWNrZ3JvdW5kVGFza3NTZXR0aW5ncyBCYWNrc2xhc2ggQmFja3N1YnN0aXR1dGlvbiBCYWNrd2FyZCBCYW5kIEJhbmRwYXNzRmlsdGVyIEJhbmRzdG9wRmlsdGVyIEJhcmFiYXNpQWxiZXJ0R3JhcGhEaXN0cmlidXRpb24gQmFyQ2hhcnQgQmFyQ2hhcnQzRCBCYXJMZWdlbmQgQmFybG93UHJvc2NoYW5JbXBvcnRhbmNlIEJhcm5lc0cgQmFyT3JpZ2luIEJhclNwYWNpbmcgQmFydGxldHRIYW5uV2luZG93IEJhcnRsZXR0V2luZG93IEJhc2VGb3JtIEJhc2VsaW5lIEJhc2VsaW5lUG9zaXRpb24gQmFzZVN0eWxlIEJhdGVzRGlzdHJpYnV0aW9uIEJhdHRsZUxlbWFyaWVXYXZlbGV0IEJlY2F1c2UgQmVja21hbm5EaXN0cmlidXRpb24gQmVlcCBCZWZvcmUgQmVnaW4gQmVnaW5EaWFsb2dQYWNrZXQgQmVnaW5Gcm9udEVuZEludGVyYWN0aW9uUGFja2V0IEJlZ2luUGFja2FnZSBCZWxsQiBCZWxsWSBCZWxvdyBCZW5mb3JkRGlzdHJpYnV0aW9uIEJlbmluaURpc3RyaWJ1dGlvbiBCZW5rdGFuZGVyR2licmF0RGlzdHJpYnV0aW9uIEJlbmt0YW5kZXJXZWlidWxsRGlzdHJpYnV0aW9uIEJlcm5vdWxsaUIgQmVybm91bGxpRGlzdHJpYnV0aW9uIEJlcm5vdWxsaUdyYXBoRGlzdHJpYnV0aW9uIEJlcm5vdWxsaVByb2Nlc3MgQmVybnN0ZWluQmFzaXMgQmVzc2VsRmlsdGVyTW9kZWwgQmVzc2VsSSBCZXNzZWxKIEJlc3NlbEpaZXJvIEJlc3NlbEsgQmVzc2VsWSBCZXNzZWxZWmVybyBCZXRhIEJldGFCaW5vbWlhbERpc3RyaWJ1dGlvbiBCZXRhRGlzdHJpYnV0aW9uIEJldGFOZWdhdGl2ZUJpbm9taWFsRGlzdHJpYnV0aW9uIEJldGFQcmltZURpc3RyaWJ1dGlvbiBCZXRhUmVndWxhcml6ZWQgQmV0d2Vlbm5lc3NDZW50cmFsaXR5IEJlemllckN1cnZlIEJlemllckN1cnZlM0RCb3ggQmV6aWVyQ3VydmUzREJveE9wdGlvbnMgQmV6aWVyQ3VydmVCb3ggQmV6aWVyQ3VydmVCb3hPcHRpb25zIEJlemllckZ1bmN0aW9uIEJpbGF0ZXJhbEZpbHRlciBCaW5hcml6ZSBCaW5hcnlGb3JtYXQgQmluYXJ5SW1hZ2VRIEJpbmFyeVJlYWQgQmluYXJ5UmVhZExpc3QgQmluYXJ5V3JpdGUgQmluQ291bnRzIEJpbkxpc3RzIEJpbm9taWFsIEJpbm9taWFsRGlzdHJpYnV0aW9uIEJpbm9taWFsUHJvY2VzcyBCaW5vcm1hbERpc3RyaWJ1dGlvbiBCaW9ydGhvZ29uYWxTcGxpbmVXYXZlbGV0IEJpcGFydGl0ZUdyYXBoUSBCaXJuYmF1bUltcG9ydGFuY2UgQmlybmJhdW1TYXVuZGVyc0Rpc3RyaWJ1dGlvbiBCaXRBbmQgQml0Q2xlYXIgQml0R2V0IEJpdExlbmd0aCBCaXROb3QgQml0T3IgQml0U2V0IEJpdFNoaWZ0TGVmdCBCaXRTaGlmdFJpZ2h0IEJpdFhvciBCbGFjayBCbGFja21hbkhhcnJpc1dpbmRvdyBCbGFja21hbk51dHRhbGxXaW5kb3cgQmxhY2ttYW5XaW5kb3cgQmxhbmsgQmxhbmtGb3JtIEJsYW5rTnVsbFNlcXVlbmNlIEJsYW5rU2VxdWVuY2UgQmxlbmQgQmxvY2sgQmxvY2tSYW5kb20gQmxvbXF2aXN0QmV0YSBCbG9tcXZpc3RCZXRhVGVzdCBCbHVlIEJsdXIgQm9kZVBsb3QgQm9obWFuV2luZG93IEJvbGQgQm9va21hcmtzIEJvb2xlIEJvb2xlYW5Db25zZWN1dGl2ZUZ1bmN0aW9uIEJvb2xlYW5Db252ZXJ0IEJvb2xlYW5Db3VudGluZ0Z1bmN0aW9uIEJvb2xlYW5GdW5jdGlvbiBCb29sZWFuR3JhcGggQm9vbGVhbk1heHRlcm1zIEJvb2xlYW5NaW5pbWl6ZSBCb29sZWFuTWludGVybXMgQm9vbGVhbnMgQm9vbGVhblRhYmxlIEJvb2xlYW5WYXJpYWJsZXMgQm9yZGVyRGltZW5zaW9ucyBCb3JlbFRhbm5lckRpc3RyaWJ1dGlvbiBCb3R0b20gQm90dG9tSGF0VHJhbnNmb3JtIEJvdW5kYXJ5U3R5bGUgQm91bmRzIEJveCBCb3hCYXNlbGluZVNoaWZ0IEJveERhdGEgQm94RGltZW5zaW9ucyBCb3hlZCBCb3hlcyBCb3hGb3JtIEJveEZvcm1Gb3JtYXRUeXBlcyBCb3hGcmFtZSBCb3hJRCBCb3hNYXJnaW5zIEJveE1hdHJpeCBCb3hSYXRpb3MgQm94Um90YXRpb24gQm94Um90YXRpb25Qb2ludCBCb3hTdHlsZSBCb3hXaGlza2VyQ2hhcnQgQnJhIEJyYWNrZXRpbmdCYXIgQnJhS2V0IEJyYXlDdXJ0aXNEaXN0YW5jZSBCcmVhZHRoRmlyc3RTY2FuIEJyZWFrIEJyb3duIEJyb3duRm9yc3l0aGVUZXN0IEJyb3duaWFuQnJpZGdlUHJvY2VzcyBCcm93c2VyQ2F0ZWdvcnkgQlNwbGluZUJhc2lzIEJTcGxpbmVDdXJ2ZSBCU3BsaW5lQ3VydmUzREJveCBCU3BsaW5lQ3VydmVCb3ggQlNwbGluZUN1cnZlQm94T3B0aW9ucyBCU3BsaW5lRnVuY3Rpb24gQlNwbGluZVN1cmZhY2UgQlNwbGluZVN1cmZhY2UzREJveCBCdWJibGVDaGFydCBCdWJibGVDaGFydDNEIEJ1YmJsZVNjYWxlIEJ1YmJsZVNpemVzIEJ1bGxldEdhdWdlIEJ1c2luZXNzRGF5USBCdXR0ZXJmbHlHcmFwaCBCdXR0ZXJ3b3J0aEZpbHRlck1vZGVsIEJ1dHRvbiBCdXR0b25CYXIgQnV0dG9uQm94IEJ1dHRvbkJveE9wdGlvbnMgQnV0dG9uQ2VsbCBCdXR0b25Db250ZW50cyBCdXR0b25EYXRhIEJ1dHRvbkV2YWx1YXRvciBCdXR0b25FeHBhbmRhYmxlIEJ1dHRvbkZyYW1lIEJ1dHRvbkZ1bmN0aW9uIEJ1dHRvbk1hcmdpbnMgQnV0dG9uTWluSGVpZ2h0IEJ1dHRvbk5vdGUgQnV0dG9uTm90ZWJvb2sgQnV0dG9uU291cmNlIEJ1dHRvblN0eWxlIEJ1dHRvblN0eWxlTWVudUxpc3RpbmcgQnl0ZSBCeXRlQ291bnQgQnl0ZU9yZGVyaW5nIEMgQ2FjaGVkVmFsdWUgQ2FjaGVHcmFwaGljcyBDYWxlbmRhckRhdGEgQ2FsZW5kYXJUeXBlIENhbGxQYWNrZXQgQ2FuYmVycmFEaXN0YW5jZSBDYW5jZWwgQ2FuY2VsQnV0dG9uIENhbmRsZXN0aWNrQ2hhcnQgQ2FwIENhcEZvcm0gQ2FwaXRhbERpZmZlcmVudGlhbEQgQ2FyZGluYWxCU3BsaW5lQmFzaXMgQ2FybWljaGFlbExhbWJkYSBDYXNlcyBDYXNoZmxvdyBDYXNvcmF0aWFuIENhdGFsYW4gQ2F0YWxhbk51bWJlciBDYXRjaCBDYXVjaHlEaXN0cmlidXRpb24gQ2F1Y2h5V2luZG93IENheWxleUdyYXBoIENERiBDREZEZXBsb3kgQ0RGSW5mb3JtYXRpb24gQ0RGV2F2ZWxldCBDZWlsaW5nIENlbGwgQ2VsbEF1dG9PdmVyd3JpdGUgQ2VsbEJhc2VsaW5lIENlbGxCb3VuZGluZ0JveCBDZWxsQnJhY2tldE9wdGlvbnMgQ2VsbENoYW5nZVRpbWVzIENlbGxDb250ZW50cyBDZWxsQ29udGV4dCBDZWxsRGluZ2JhdCBDZWxsRHluYW1pY0V4cHJlc3Npb24gQ2VsbEVkaXREdXBsaWNhdGUgQ2VsbEVsZW1lbnRzQm91bmRpbmdCb3ggQ2VsbEVsZW1lbnRTcGFjaW5ncyBDZWxsRXBpbG9nIENlbGxFdmFsdWF0aW9uRHVwbGljYXRlIENlbGxFdmFsdWF0aW9uRnVuY3Rpb24gQ2VsbEV2ZW50QWN0aW9ucyBDZWxsRnJhbWUgQ2VsbEZyYW1lQ29sb3IgQ2VsbEZyYW1lTGFiZWxNYXJnaW5zIENlbGxGcmFtZUxhYmVscyBDZWxsRnJhbWVNYXJnaW5zIENlbGxHcm91cCBDZWxsR3JvdXBEYXRhIENlbGxHcm91cGluZyBDZWxsR3JvdXBpbmdSdWxlcyBDZWxsSG9yaXpvbnRhbFNjcm9sbGluZyBDZWxsSUQgQ2VsbExhYmVsIENlbGxMYWJlbEF1dG9EZWxldGUgQ2VsbExhYmVsTWFyZ2lucyBDZWxsTGFiZWxQb3NpdGlvbmluZyBDZWxsTWFyZ2lucyBDZWxsT2JqZWN0IENlbGxPcGVuIENlbGxQcmludCBDZWxsUHJvbG9nIENlbGxzIENlbGxTaXplIENlbGxTdHlsZSBDZWxsVGFncyBDZWxsdWxhckF1dG9tYXRvbiBDZW5zb3JlZERpc3RyaWJ1dGlvbiBDZW5zb3JpbmcgQ2VudGVyIENlbnRlckRvdCBDZW50cmFsTW9tZW50IENlbnRyYWxNb21lbnRHZW5lcmF0aW5nRnVuY3Rpb24gQ0Zvcm0gQ2hhbXBlcm5vd25lTnVtYmVyIENoYW5WZXNlQmluYXJpemUgQ2hhcmFjdGVyIENoYXJhY3RlckVuY29kaW5nIENoYXJhY3RlckVuY29kaW5nc1BhdGggQ2hhcmFjdGVyaXN0aWNGdW5jdGlvbiBDaGFyYWN0ZXJpc3RpY1BvbHlub21pYWwgQ2hhcmFjdGVyUmFuZ2UgQ2hhcmFjdGVycyBDaGFydEJhc2VTdHlsZSBDaGFydEVsZW1lbnREYXRhIENoYXJ0RWxlbWVudERhdGFGdW5jdGlvbiBDaGFydEVsZW1lbnRGdW5jdGlvbiBDaGFydEVsZW1lbnRzIENoYXJ0TGFiZWxzIENoYXJ0TGF5b3V0IENoYXJ0TGVnZW5kcyBDaGFydFN0eWxlIENoZWJ5c2hldjFGaWx0ZXJNb2RlbCBDaGVieXNoZXYyRmlsdGVyTW9kZWwgQ2hlYnlzaGV2RGlzdGFuY2UgQ2hlYnlzaGV2VCBDaGVieXNoZXZVIENoZWNrIENoZWNrQWJvcnQgQ2hlY2tBbGwgQ2hlY2tib3ggQ2hlY2tib3hCYXIgQ2hlY2tib3hCb3ggQ2hlY2tib3hCb3hPcHRpb25zIENoZW1pY2FsRGF0YSBDaGVzc2JvYXJkRGlzdGFuY2UgQ2hpRGlzdHJpYnV0aW9uIENoaW5lc2VSZW1haW5kZXIgQ2hpU3F1YXJlRGlzdHJpYnV0aW9uIENob2ljZUJ1dHRvbnMgQ2hvaWNlRGlhbG9nIENob2xlc2t5RGVjb21wb3NpdGlvbiBDaG9wIENpcmNsZSBDaXJjbGVCb3ggQ2lyY2xlRG90IENpcmNsZU1pbnVzIENpcmNsZVBsdXMgQ2lyY2xlVGltZXMgQ2lyY3VsYW50R3JhcGggQ2l0eURhdGEgQ2xlYXIgQ2xlYXJBbGwgQ2xlYXJBdHRyaWJ1dGVzIENsZWFyU3lzdGVtQ2FjaGUgQ2xlYnNjaEdvcmRhbiBDbGlja1BhbmUgQ2xpcCBDbGlwYm9hcmROb3RlYm9vayBDbGlwRmlsbCBDbGlwcGluZ1N0eWxlIENsaXBQbGFuZXMgQ2xpcFJhbmdlIENsb2NrIENsb2NrR2F1Z2UgQ2xvY2t3aXNlQ29udG91ckludGVncmFsIENsb3NlIENsb3NlZCBDbG9zZUtlcm5lbHMgQ2xvc2VuZXNzQ2VudHJhbGl0eSBDbG9zaW5nIENsb3NpbmdBdXRvU2F2ZSBDbG9zaW5nRXZlbnQgQ2x1c3RlcmluZ0NvbXBvbmVudHMgQ01ZS0NvbG9yIENvYXJzZSBDb2VmZmljaWVudCBDb2VmZmljaWVudEFycmF5cyBDb2VmZmljaWVudERvbWFpbiBDb2VmZmljaWVudExpc3QgQ29lZmZpY2llbnRSdWxlcyBDb2lmbGV0V2F2ZWxldCBDb2xsZWN0IENvbG9uIENvbG9uRm9ybSBDb2xvckNvbWJpbmUgQ29sb3JDb252ZXJ0IENvbG9yRGF0YSBDb2xvckRhdGFGdW5jdGlvbiBDb2xvckZ1bmN0aW9uIENvbG9yRnVuY3Rpb25TY2FsaW5nIENvbG9yaXplIENvbG9yTmVnYXRlIENvbG9yT3V0cHV0IENvbG9yUHJvZmlsZURhdGEgQ29sb3JRdWFudGl6ZSBDb2xvclJlcGxhY2UgQ29sb3JSdWxlcyBDb2xvclNlbGVjdG9yU2V0dGluZ3MgQ29sb3JTZXBhcmF0ZSBDb2xvclNldHRlciBDb2xvclNldHRlckJveCBDb2xvclNldHRlckJveE9wdGlvbnMgQ29sb3JTbGlkZXIgQ29sb3JTcGFjZSBDb2x1bW4gQ29sdW1uQWxpZ25tZW50cyBDb2x1bW5CYWNrZ3JvdW5kcyBDb2x1bW5Gb3JtIENvbHVtbkxpbmVzIENvbHVtbnNFcXVhbCBDb2x1bW5TcGFjaW5ncyBDb2x1bW5XaWR0aHMgQ29tbW9uRGVmYXVsdEZvcm1hdFR5cGVzIENvbW1vbmVzdCBDb21tb25lc3RGaWx0ZXIgQ29tbW9uVW5pdHMgQ29tbXVuaXR5Qm91bmRhcnlTdHlsZSBDb21tdW5pdHlHcmFwaFBsb3QgQ29tbXVuaXR5TGFiZWxzIENvbW11bml0eVJlZ2lvblN0eWxlIENvbXBhdGlibGVVbml0USBDb21waWxhdGlvbk9wdGlvbnMgQ29tcGlsYXRpb25UYXJnZXQgQ29tcGlsZSBDb21waWxlZCBDb21waWxlZEZ1bmN0aW9uIENvbXBsZW1lbnQgQ29tcGxldGVHcmFwaCBDb21wbGV0ZUdyYXBoUSBDb21wbGV0ZUthcnlUcmVlIENvbXBsZXRpb25zTGlzdFBhY2tldCBDb21wbGV4IENvbXBsZXhlcyBDb21wbGV4RXhwYW5kIENvbXBsZXhJbmZpbml0eSBDb21wbGV4aXR5RnVuY3Rpb24gQ29tcG9uZW50TWVhc3VyZW1lbnRzIENvbXBvbmVudHdpc2VDb250ZXh0TWVudSBDb21wb3NlIENvbXBvc2VMaXN0IENvbXBvc2VTZXJpZXMgQ29tcG9zaXRpb24gQ29tcG91bmRFeHByZXNzaW9uIENvbXBvdW5kUG9pc3NvbkRpc3RyaWJ1dGlvbiBDb21wb3VuZFBvaXNzb25Qcm9jZXNzIENvbXBvdW5kUmVuZXdhbFByb2Nlc3MgQ29tcHJlc3MgQ29tcHJlc3NlZERhdGEgQ29uZGl0aW9uIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBDb25kaXRpb25lZCBDb25lIENvbmVCb3ggQ29uZmlkZW5jZUxldmVsIENvbmZpZGVuY2VSYW5nZSBDb25maWRlbmNlVHJhbnNmb3JtIENvbmZpZ3VyYXRpb25QYXRoIENvbmdydWVudCBDb25qdWdhdGUgQ29uanVnYXRlVHJhbnNwb3NlIENvbmp1bmN0aW9uIENvbm5lY3QgQ29ubmVjdGVkQ29tcG9uZW50cyBDb25uZWN0ZWRHcmFwaFEgQ29ubmVzV2luZG93IENvbm92ZXJUZXN0IENvbnNvbGVNZXNzYWdlIENvbnNvbGVNZXNzYWdlUGFja2V0IENvbnNvbGVQcmludCBDb25zdGFudCBDb25zdGFudEFycmF5IENvbnN0YW50cyBDb25zdHJhaW5lZE1heCBDb25zdHJhaW5lZE1pbiBDb250ZW50UGFkZGluZyBDb250ZW50c0JvdW5kaW5nQm94IENvbnRlbnRTZWxlY3RhYmxlIENvbnRlbnRTaXplIENvbnRleHQgQ29udGV4dE1lbnUgQ29udGV4dHMgQ29udGV4dFRvRmlsZW5hbWUgQ29udGV4dFRvRmlsZU5hbWUgQ29udGludWF0aW9uIENvbnRpbnVlIENvbnRpbnVlZEZyYWN0aW9uIENvbnRpbnVlZEZyYWN0aW9uSyBDb250aW51b3VzQWN0aW9uIENvbnRpbnVvdXNNYXJrb3ZQcm9jZXNzIENvbnRpbnVvdXNUaW1lTW9kZWxRIENvbnRpbnVvdXNXYXZlbGV0RGF0YSBDb250aW51b3VzV2F2ZWxldFRyYW5zZm9ybSBDb250b3VyRGV0ZWN0IENvbnRvdXJHcmFwaGljcyBDb250b3VySW50ZWdyYWwgQ29udG91ckxhYmVscyBDb250b3VyTGluZXMgQ29udG91clBsb3QgQ29udG91clBsb3QzRCBDb250b3VycyBDb250b3VyU2hhZGluZyBDb250b3VyU21vb3RoaW5nIENvbnRvdXJTdHlsZSBDb250cmFoYXJtb25pY01lYW4gQ29udHJvbCBDb250cm9sQWN0aXZlIENvbnRyb2xBbGlnbm1lbnQgQ29udHJvbGxhYmlsaXR5R3JhbWlhbiBDb250cm9sbGFiaWxpdHlNYXRyaXggQ29udHJvbGxhYmxlRGVjb21wb3NpdGlvbiBDb250cm9sbGFibGVNb2RlbFEgQ29udHJvbGxlckR1cmF0aW9uIENvbnRyb2xsZXJJbmZvcm1hdGlvbiBDb250cm9sbGVySW5mb3JtYXRpb25EYXRhIENvbnRyb2xsZXJMaW5raW5nIENvbnRyb2xsZXJNYW5pcHVsYXRlIENvbnRyb2xsZXJNZXRob2QgQ29udHJvbGxlclBhdGggQ29udHJvbGxlclN0YXRlIENvbnRyb2xQbGFjZW1lbnQgQ29udHJvbHNSZW5kZXJpbmcgQ29udHJvbFR5cGUgQ29udmVyZ2VudHMgQ29udmVyc2lvbk9wdGlvbnMgQ29udmVyc2lvblJ1bGVzIENvbnZlcnRUb0JpdG1hcFBhY2tldCBDb252ZXJ0VG9Qb3N0U2NyaXB0IENvbnZlcnRUb1Bvc3RTY3JpcHRQYWNrZXQgQ29udm9sdmUgQ29ud2F5R3JvdXBDbzEgQ29ud2F5R3JvdXBDbzIgQ29ud2F5R3JvdXBDbzMgQ29vcmRpbmF0ZUNoYXJ0RGF0YSBDb29yZGluYXRlc1Rvb2xPcHRpb25zIENvb3JkaW5hdGVUcmFuc2Zvcm0gQ29vcmRpbmF0ZVRyYW5zZm9ybURhdGEgQ29wcmltZVEgQ29wcm9kdWN0IENvcHVsYURpc3RyaWJ1dGlvbiBDb3B5YWJsZSBDb3B5RGlyZWN0b3J5IENvcHlGaWxlIENvcHlUYWcgQ29weVRvQ2xpcGJvYXJkIENvcm5lckZpbHRlciBDb3JuZXJOZWlnaGJvcnMgQ29ycmVsYXRpb24gQ29ycmVsYXRpb25EaXN0YW5jZSBDb3JyZWxhdGlvbkZ1bmN0aW9uIENvcnJlbGF0aW9uVGVzdCBDb3MgQ29zaCBDb3NoSW50ZWdyYWwgQ29zaW5lRGlzdGFuY2UgQ29zaW5lV2luZG93IENvc0ludGVncmFsIENvdCBDb3RoIENvdW50IENvdW50ZXJBc3NpZ25tZW50cyBDb3VudGVyQm94IENvdW50ZXJCb3hPcHRpb25zIENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwgQ291bnRlckV2YWx1YXRvciBDb3VudGVyRnVuY3Rpb24gQ291bnRlckluY3JlbWVudHMgQ291bnRlclN0eWxlIENvdW50ZXJTdHlsZU1lbnVMaXN0aW5nIENvdW50Um9vdHMgQ291bnRyeURhdGEgQ292YXJpYW5jZSBDb3ZhcmlhbmNlRXN0aW1hdG9yRnVuY3Rpb24gQ292YXJpYW5jZUZ1bmN0aW9uIENveGlhbkRpc3RyaWJ1dGlvbiBDb3hJbmdlcnNvbGxSb3NzUHJvY2VzcyBDb3hNb2RlbCBDb3hNb2RlbEZpdCBDcmFtZXJWb25NaXNlc1Rlc3QgQ3JlYXRlQXJjaGl2ZSBDcmVhdGVEaWFsb2cgQ3JlYXRlRGlyZWN0b3J5IENyZWF0ZURvY3VtZW50IENyZWF0ZUludGVybWVkaWF0ZURpcmVjdG9yaWVzIENyZWF0ZVBhbGV0dGUgQ3JlYXRlUGFsZXR0ZVBhY2tldCBDcmVhdGVTY2hlZHVsZWRUYXNrIENyZWF0ZVRlbXBvcmFyeSBDcmVhdGVXaW5kb3cgQ3JpdGljYWxpdHlGYWlsdXJlSW1wb3J0YW5jZSBDcml0aWNhbGl0eVN1Y2Nlc3NJbXBvcnRhbmNlIENyaXRpY2FsU2VjdGlvbiBDcm9zcyBDcm9zc2luZ0RldGVjdCBDcm9zc01hdHJpeCBDc2MgQ3NjaCBDdWJlUm9vdCBDdWJpY3MgQ3Vib2lkIEN1Ym9pZEJveCBDdW11bGFudCBDdW11bGFudEdlbmVyYXRpbmdGdW5jdGlvbiBDdXAgQ3VwQ2FwIEN1cmwgQ3VybHlEb3VibGVRdW90ZSBDdXJseVF1b3RlIEN1cnJlbnRJbWFnZSBDdXJyZW50bHlTcGVha2luZ1BhY2tldCBDdXJyZW50VmFsdWUgQ3VydmF0dXJlRmxvd0ZpbHRlciBDdXJ2ZUNsb3NlZCBDeWFuIEN5Y2xlR3JhcGggQ3ljbGVJbmRleFBvbHlub21pYWwgQ3ljbGVzIEN5Y2xpY0dyb3VwIEN5Y2xvdG9taWMgQ3lsaW5kZXIgQ3lsaW5kZXJCb3ggQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uIEQgRGFndW1EaXN0cmlidXRpb24gRGFtZXJhdUxldmVuc2h0ZWluRGlzdGFuY2UgRGFtcGluZ0ZhY3RvciBEYXJrZXIgRGFzaGVkIERhc2hpbmcgRGF0YUNvbXByZXNzaW9uIERhdGFEaXN0cmlidXRpb24gRGF0YVJhbmdlIERhdGFSZXZlcnNlZCBEYXRlIERhdGVEZWxpbWl0ZXJzIERhdGVEaWZmZXJlbmNlIERhdGVGdW5jdGlvbiBEYXRlTGlzdCBEYXRlTGlzdExvZ1Bsb3QgRGF0ZUxpc3RQbG90IERhdGVQYXR0ZXJuIERhdGVQbHVzIERhdGVSYW5nZSBEYXRlU3RyaW5nIERhdGVUaWNrc0Zvcm1hdCBEYXViZWNoaWVzV2F2ZWxldCBEYXZpc0Rpc3RyaWJ1dGlvbiBEYXdzb25GIERheUNvdW50IERheUNvdW50Q29udmVudGlvbiBEYXlNYXRjaFEgRGF5TmFtZSBEYXlQbHVzIERheVJhbmdlIERheVJvdW5kIERlQnJ1aWpuR3JhcGggRGVidWcgRGVidWdUYWcgRGVjaW1hbCBEZWNsYXJlS25vd25TeW1ib2xzIERlY2xhcmVQYWNrYWdlIERlY29tcG9zZSBEZWNyZW1lbnQgRGVkZWtpbmRFdGEgRGVmYXVsdCBEZWZhdWx0QXhlc1N0eWxlIERlZmF1bHRCYXNlU3R5bGUgRGVmYXVsdEJveFN0eWxlIERlZmF1bHRCdXR0b24gRGVmYXVsdENvbG9yIERlZmF1bHRDb250cm9sUGxhY2VtZW50IERlZmF1bHREdXBsaWNhdGVDZWxsU3R5bGUgRGVmYXVsdER1cmF0aW9uIERlZmF1bHRFbGVtZW50IERlZmF1bHRGYWNlR3JpZHNTdHlsZSBEZWZhdWx0RmllbGRIaW50U3R5bGUgRGVmYXVsdEZvbnQgRGVmYXVsdEZvbnRQcm9wZXJ0aWVzIERlZmF1bHRGb3JtYXRUeXBlIERlZmF1bHRGb3JtYXRUeXBlRm9yU3R5bGUgRGVmYXVsdEZyYW1lU3R5bGUgRGVmYXVsdEZyYW1lVGlja3NTdHlsZSBEZWZhdWx0R3JpZExpbmVzU3R5bGUgRGVmYXVsdElubGluZUZvcm1hdFR5cGUgRGVmYXVsdElucHV0Rm9ybWF0VHlwZSBEZWZhdWx0TGFiZWxTdHlsZSBEZWZhdWx0TWVudVN0eWxlIERlZmF1bHROYXR1cmFsTGFuZ3VhZ2UgRGVmYXVsdE5ld0NlbGxTdHlsZSBEZWZhdWx0TmV3SW5saW5lQ2VsbFN0eWxlIERlZmF1bHROb3RlYm9vayBEZWZhdWx0T3B0aW9ucyBEZWZhdWx0T3V0cHV0Rm9ybWF0VHlwZSBEZWZhdWx0U3R5bGUgRGVmYXVsdFN0eWxlRGVmaW5pdGlvbnMgRGVmYXVsdFRleHRGb3JtYXRUeXBlIERlZmF1bHRUZXh0SW5saW5lRm9ybWF0VHlwZSBEZWZhdWx0VGlja3NTdHlsZSBEZWZhdWx0VG9vbHRpcFN0eWxlIERlZmF1bHRWYWx1ZXMgRGVmZXIgRGVmaW5lRXh0ZXJuYWwgRGVmaW5lSW5wdXRTdHJlYW1NZXRob2QgRGVmaW5lT3V0cHV0U3RyZWFtTWV0aG9kIERlZmluaXRpb24gRGVncmVlIERlZ3JlZUNlbnRyYWxpdHkgRGVncmVlR3JhcGhEaXN0cmlidXRpb24gRGVncmVlTGV4aWNvZ3JhcGhpYyBEZWdyZWVSZXZlcnNlTGV4aWNvZ3JhcGhpYyBEZWluaXRpYWxpemF0aW9uIERlbCBEZWxldGFibGUgRGVsZXRlIERlbGV0ZUJvcmRlckNvbXBvbmVudHMgRGVsZXRlQ2FzZXMgRGVsZXRlQ29udGVudHMgRGVsZXRlRGlyZWN0b3J5IERlbGV0ZUR1cGxpY2F0ZXMgRGVsZXRlRmlsZSBEZWxldGVTbWFsbENvbXBvbmVudHMgRGVsZXRlV2l0aENvbnRlbnRzIERlbGV0aW9uV2FybmluZyBEZWxpbWl0ZXIgRGVsaW1pdGVyRmxhc2hUaW1lIERlbGltaXRlck1hdGNoaW5nIERlbGltaXRlcnMgRGVub21pbmF0b3IgRGVuc2l0eUdyYXBoaWNzIERlbnNpdHlIaXN0b2dyYW0gRGVuc2l0eVBsb3QgRGVwZW5kZW50VmFyaWFibGVzIERlcGxveSBEZXBsb3llZCBEZXB0aCBEZXB0aEZpcnN0U2NhbiBEZXJpdmF0aXZlIERlcml2YXRpdmVGaWx0ZXIgRGVzY3JpcHRvclN0YXRlU3BhY2UgRGVzaWduTWF0cml4IERldCBER2F1c3NpYW5XYXZlbGV0IERpYWNyaXRpY2FsUG9zaXRpb25pbmcgRGlhZ29uYWwgRGlhZ29uYWxNYXRyaXggRGlhbG9nIERpYWxvZ0luZGVudCBEaWFsb2dJbnB1dCBEaWFsb2dMZXZlbCBEaWFsb2dOb3RlYm9vayBEaWFsb2dQcm9sb2cgRGlhbG9nUmV0dXJuIERpYWxvZ1N5bWJvbHMgRGlhbW9uZCBEaWFtb25kTWF0cml4IERpY2VEaXNzaW1pbGFyaXR5IERpY3Rpb25hcnlMb29rdXAgRGlmZmVyZW5jZURlbHRhIERpZmZlcmVuY2VPcmRlciBEaWZmZXJlbmNlUm9vdCBEaWZmZXJlbmNlUm9vdFJlZHVjZSBEaWZmZXJlbmNlcyBEaWZmZXJlbnRpYWxEIERpZmZlcmVudGlhbFJvb3QgRGlmZmVyZW50aWFsUm9vdFJlZHVjZSBEaWZmZXJlbnRpYXRvckZpbHRlciBEaWdpdEJsb2NrIERpZ2l0QmxvY2tNaW5pbXVtIERpZ2l0Q2hhcmFjdGVyIERpZ2l0Q291bnQgRGlnaXRRIERpaGVkcmFsR3JvdXAgRGlsYXRpb24gRGltZW5zaW9ucyBEaXJhY0NvbWIgRGlyYWNEZWx0YSBEaXJlY3RlZEVkZ2UgRGlyZWN0ZWRFZGdlcyBEaXJlY3RlZEdyYXBoIERpcmVjdGVkR3JhcGhRIERpcmVjdGVkSW5maW5pdHkgRGlyZWN0aW9uIERpcmVjdGl2ZSBEaXJlY3RvcnkgRGlyZWN0b3J5TmFtZSBEaXJlY3RvcnlRIERpcmVjdG9yeVN0YWNrIERpcmljaGxldENoYXJhY3RlciBEaXJpY2hsZXRDb252b2x2ZSBEaXJpY2hsZXREaXN0cmlidXRpb24gRGlyaWNobGV0TCBEaXJpY2hsZXRUcmFuc2Zvcm0gRGlyaWNobGV0V2luZG93IERpc2FibGVDb25zb2xlUHJpbnRQYWNrZXQgRGlzY3JldGVDaGlycFpUcmFuc2Zvcm0gRGlzY3JldGVDb252b2x2ZSBEaXNjcmV0ZURlbHRhIERpc2NyZXRlSGFkYW1hcmRUcmFuc2Zvcm0gRGlzY3JldGVJbmRpY2F0b3IgRGlzY3JldGVMUUVzdGltYXRvckdhaW5zIERpc2NyZXRlTFFSZWd1bGF0b3JHYWlucyBEaXNjcmV0ZUx5YXB1bm92U29sdmUgRGlzY3JldGVNYXJrb3ZQcm9jZXNzIERpc2NyZXRlUGxvdCBEaXNjcmV0ZVBsb3QzRCBEaXNjcmV0ZVJhdGlvIERpc2NyZXRlUmljY2F0aVNvbHZlIERpc2NyZXRlU2hpZnQgRGlzY3JldGVUaW1lTW9kZWxRIERpc2NyZXRlVW5pZm9ybURpc3RyaWJ1dGlvbiBEaXNjcmV0ZVZhcmlhYmxlcyBEaXNjcmV0ZVdhdmVsZXREYXRhIERpc2NyZXRlV2F2ZWxldFBhY2tldFRyYW5zZm9ybSBEaXNjcmV0ZVdhdmVsZXRUcmFuc2Zvcm0gRGlzY3JpbWluYW50IERpc2p1bmN0aW9uIERpc2sgRGlza0JveCBEaXNrTWF0cml4IERpc3BhdGNoIERpc3BlcnNpb25Fc3RpbWF0b3JGdW5jdGlvbiBEaXNwbGF5IERpc3BsYXlBbGxTdGVwcyBEaXNwbGF5RW5kUGFja2V0IERpc3BsYXlGbHVzaEltYWdlUGFja2V0IERpc3BsYXlGb3JtIERpc3BsYXlGdW5jdGlvbiBEaXNwbGF5UGFja2V0IERpc3BsYXlSdWxlcyBEaXNwbGF5U2V0U2l6ZVBhY2tldCBEaXNwbGF5U3RyaW5nIERpc3BsYXlUZW1wb3JhcnkgRGlzcGxheVdpdGggRGlzcGxheVdpdGhSZWYgRGlzcGxheVdpdGhWYXJpYWJsZSBEaXN0YW5jZUZ1bmN0aW9uIERpc3RhbmNlVHJhbnNmb3JtIERpc3RyaWJ1dGUgRGlzdHJpYnV0ZWQgRGlzdHJpYnV0ZWRDb250ZXh0cyBEaXN0cmlidXRlRGVmaW5pdGlvbnMgRGlzdHJpYnV0aW9uQ2hhcnQgRGlzdHJpYnV0aW9uRG9tYWluIERpc3RyaWJ1dGlvbkZpdFRlc3QgRGlzdHJpYnV0aW9uUGFyYW1ldGVyQXNzdW1wdGlvbnMgRGlzdHJpYnV0aW9uUGFyYW1ldGVyUSBEaXRoZXJpbmcgRGl2IERpdmVyZ2VuY2UgRGl2aWRlIERpdmlkZUJ5IERpdmlkZXJzIERpdmlzaWJsZSBEaXZpc29ycyBEaXZpc29yU2lnbWEgRGl2aXNvclN1bSBETVNMaXN0IERNU1N0cmluZyBEbyBEb2NrZWRDZWxscyBEb2N1bWVudE5vdGVib29rIERvbWluYW50Q29sb3JzIERPU1RleHRGb3JtYXQgRG90IERvdERhc2hlZCBEb3RFcXVhbCBEb3R0ZWQgRG91YmxlQnJhY2tldGluZ0JhciBEb3VibGVDb250b3VySW50ZWdyYWwgRG91YmxlRG93bkFycm93IERvdWJsZUxlZnRBcnJvdyBEb3VibGVMZWZ0UmlnaHRBcnJvdyBEb3VibGVMZWZ0VGVlIERvdWJsZUxvbmdMZWZ0QXJyb3cgRG91YmxlTG9uZ0xlZnRSaWdodEFycm93IERvdWJsZUxvbmdSaWdodEFycm93IERvdWJsZVJpZ2h0QXJyb3cgRG91YmxlUmlnaHRUZWUgRG91YmxlVXBBcnJvdyBEb3VibGVVcERvd25BcnJvdyBEb3VibGVWZXJ0aWNhbEJhciBEb3VibHlJbmZpbml0ZSBEb3duIERvd25BcnJvdyBEb3duQXJyb3dCYXIgRG93bkFycm93VXBBcnJvdyBEb3duTGVmdFJpZ2h0VmVjdG9yIERvd25MZWZ0VGVlVmVjdG9yIERvd25MZWZ0VmVjdG9yIERvd25MZWZ0VmVjdG9yQmFyIERvd25SaWdodFRlZVZlY3RvciBEb3duUmlnaHRWZWN0b3IgRG93blJpZ2h0VmVjdG9yQmFyIERvd25zYW1wbGUgRG93blRlZSBEb3duVGVlQXJyb3cgRG93blZhbHVlcyBEcmFnQW5kRHJvcCBEcmF3RWRnZXMgRHJhd0Zyb250RmFjZXMgRHJhd0hpZ2hsaWdodGVkIERyb3AgRFNvbHZlIER0IER1YWxMaW5lYXJQcm9ncmFtbWluZyBEdWFsU3lzdGVtc01vZGVsIER1bXBHZXQgRHVtcFNhdmUgRHVwbGljYXRlRnJlZVEgRHluYW1pYyBEeW5hbWljQm94IER5bmFtaWNCb3hPcHRpb25zIER5bmFtaWNFdmFsdWF0aW9uVGltZW91dCBEeW5hbWljTG9jYXRpb24gRHluYW1pY01vZHVsZSBEeW5hbWljTW9kdWxlQm94IER5bmFtaWNNb2R1bGVCb3hPcHRpb25zIER5bmFtaWNNb2R1bGVQYXJlbnQgRHluYW1pY01vZHVsZVZhbHVlcyBEeW5hbWljTmFtZSBEeW5hbWljTmFtZXNwYWNlIER5bmFtaWNSZWZlcmVuY2UgRHluYW1pY1NldHRpbmcgRHluYW1pY1VwZGF0aW5nIER5bmFtaWNXcmFwcGVyIER5bmFtaWNXcmFwcGVyQm94IER5bmFtaWNXcmFwcGVyQm94T3B0aW9ucyBFIEVjY2VudHJpY2l0eUNlbnRyYWxpdHkgRWRnZUFkZCBFZGdlQmV0d2Vlbm5lc3NDZW50cmFsaXR5IEVkZ2VDYXBhY2l0eSBFZGdlQ2FwRm9ybSBFZGdlQ29sb3IgRWRnZUNvbm5lY3Rpdml0eSBFZGdlQ29zdCBFZGdlQ291bnQgRWRnZUNvdmVyUSBFZGdlRGFzaGluZyBFZGdlRGVsZXRlIEVkZ2VEZXRlY3QgRWRnZUZvcm0gRWRnZUluZGV4IEVkZ2VKb2luRm9ybSBFZGdlTGFiZWxpbmcgRWRnZUxhYmVscyBFZGdlTGFiZWxTdHlsZSBFZGdlTGlzdCBFZGdlT3BhY2l0eSBFZGdlUSBFZGdlUmVuZGVyaW5nRnVuY3Rpb24gRWRnZVJ1bGVzIEVkZ2VTaGFwZUZ1bmN0aW9uIEVkZ2VTdHlsZSBFZGdlVGhpY2tuZXNzIEVkZ2VXZWlnaHQgRWRpdGFibGUgRWRpdEJ1dHRvblNldHRpbmdzIEVkaXRDZWxsVGFnc1NldHRpbmdzIEVkaXREaXN0YW5jZSBFZmZlY3RpdmVJbnRlcmVzdCBFaWdlbnN5c3RlbSBFaWdlbnZhbHVlcyBFaWdlbnZlY3RvckNlbnRyYWxpdHkgRWlnZW52ZWN0b3JzIEVsZW1lbnQgRWxlbWVudERhdGEgRWxpbWluYXRlIEVsaW1pbmF0aW9uT3JkZXIgRWxsaXB0aWNFIEVsbGlwdGljRXhwIEVsbGlwdGljRXhwUHJpbWUgRWxsaXB0aWNGIEVsbGlwdGljRmlsdGVyTW9kZWwgRWxsaXB0aWNLIEVsbGlwdGljTG9nIEVsbGlwdGljTm9tZVEgRWxsaXB0aWNQaSBFbGxpcHRpY1JlZHVjZWRIYWxmUGVyaW9kcyBFbGxpcHRpY1RoZXRhIEVsbGlwdGljVGhldGFQcmltZSBFbWl0U291bmQgRW1waGFzaXplU3ludGF4RXJyb3JzIEVtcGlyaWNhbERpc3RyaWJ1dGlvbiBFbXB0eSBFbXB0eUdyYXBoUSBFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQgRW5hYmxlZCBFbmNvZGUgRW5kIEVuZEFkZCBFbmREaWFsb2dQYWNrZXQgRW5kRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCBFbmRPZkZpbGUgRW5kT2ZMaW5lIEVuZE9mU3RyaW5nIEVuZFBhY2thZ2UgRW5naW5lZXJpbmdGb3JtIEVudGVyIEVudGVyRXhwcmVzc2lvblBhY2tldCBFbnRlclRleHRQYWNrZXQgRW50cm9weSBFbnRyb3B5RmlsdGVyIEVudmlyb25tZW50IEVwaWxvZyBFcXVhbCBFcXVhbENvbHVtbnMgRXF1YWxSb3dzIEVxdWFsVGlsZGUgRXF1YXRlZFRvIEVxdWlsaWJyaXVtIEVxdWlyaXBwbGVGaWx0ZXJLZXJuZWwgRXF1aXZhbGVudCBFcmYgRXJmYyBFcmZpIEVybGFuZ0IgRXJsYW5nQyBFcmxhbmdEaXN0cmlidXRpb24gRXJvc2lvbiBFcnJvckJveCBFcnJvckJveE9wdGlvbnMgRXJyb3JOb3JtIEVycm9yUGFja2V0IEVycm9yc0RpYWxvZ1NldHRpbmdzIEVzdGltYXRlZERpc3RyaWJ1dGlvbiBFc3RpbWF0ZWRQcm9jZXNzIEVzdGltYXRvckdhaW5zIEVzdGltYXRvclJlZ3VsYXRvciBFdWNsaWRlYW5EaXN0YW5jZSBFdWxlckUgRXVsZXJHYW1tYSBFdWxlcmlhbkdyYXBoUSBFdWxlclBoaSBFdmFsdWF0YWJsZSBFdmFsdWF0ZSBFdmFsdWF0ZWQgRXZhbHVhdGVQYWNrZXQgRXZhbHVhdGlvbkNlbGwgRXZhbHVhdGlvbkNvbXBsZXRpb25BY3Rpb24gRXZhbHVhdGlvbkVsZW1lbnRzIEV2YWx1YXRpb25Nb2RlIEV2YWx1YXRpb25Nb25pdG9yIEV2YWx1YXRpb25Ob3RlYm9vayBFdmFsdWF0aW9uT2JqZWN0IEV2YWx1YXRpb25PcmRlciBFdmFsdWF0b3IgRXZhbHVhdG9yTmFtZXMgRXZlblEgRXZlbnREYXRhIEV2ZW50RXZhbHVhdG9yIEV2ZW50SGFuZGxlciBFdmVudEhhbmRsZXJUYWcgRXZlbnRMYWJlbHMgRXhhY3RCbGFja21hbldpbmRvdyBFeGFjdE51bWJlclEgRXhhY3RSb290SXNvbGF0aW9uIEV4YW1wbGVEYXRhIEV4Y2VwdCBFeGNsdWRlZEZvcm1zIEV4Y2x1ZGVQb2RzIEV4Y2x1c2lvbnMgRXhjbHVzaW9uc1N0eWxlIEV4aXN0cyBFeGl0IEV4aXREaWFsb2cgRXhwIEV4cGFuZCBFeHBhbmRBbGwgRXhwYW5kRGVub21pbmF0b3IgRXhwYW5kRmlsZU5hbWUgRXhwYW5kTnVtZXJhdG9yIEV4cGVjdGF0aW9uIEV4cGVjdGF0aW9uRSBFeHBlY3RlZFZhbHVlIEV4cEdhbW1hRGlzdHJpYnV0aW9uIEV4cEludGVncmFsRSBFeHBJbnRlZ3JhbEVpIEV4cG9uZW50IEV4cG9uZW50RnVuY3Rpb24gRXhwb25lbnRpYWxEaXN0cmlidXRpb24gRXhwb25lbnRpYWxGYW1pbHkgRXhwb25lbnRpYWxHZW5lcmF0aW5nRnVuY3Rpb24gRXhwb25lbnRpYWxNb3ZpbmdBdmVyYWdlIEV4cG9uZW50aWFsUG93ZXJEaXN0cmlidXRpb24gRXhwb25lbnRQb3NpdGlvbiBFeHBvbmVudFN0ZXAgRXhwb3J0IEV4cG9ydEF1dG9SZXBsYWNlbWVudHMgRXhwb3J0UGFja2V0IEV4cG9ydFN0cmluZyBFeHByZXNzaW9uIEV4cHJlc3Npb25DZWxsIEV4cHJlc3Npb25QYWNrZXQgRXhwVG9UcmlnIEV4dGVuZGVkR0NEIEV4dGVuc2lvbiBFeHRlbnRFbGVtZW50RnVuY3Rpb24gRXh0ZW50TWFya2VycyBFeHRlbnRTaXplIEV4dGVybmFsQ2FsbCBFeHRlcm5hbERhdGFDaGFyYWN0ZXJFbmNvZGluZyBFeHRyYWN0IEV4dHJhY3RBcmNoaXZlIEV4dHJlbWVWYWx1ZURpc3RyaWJ1dGlvbiBGYWNlRm9ybSBGYWNlR3JpZHMgRmFjZUdyaWRzU3R5bGUgRmFjdG9yIEZhY3RvckNvbXBsZXRlIEZhY3RvcmlhbCBGYWN0b3JpYWwyIEZhY3RvcmlhbE1vbWVudCBGYWN0b3JpYWxNb21lbnRHZW5lcmF0aW5nRnVuY3Rpb24gRmFjdG9yaWFsUG93ZXIgRmFjdG9ySW50ZWdlciBGYWN0b3JMaXN0IEZhY3RvclNxdWFyZUZyZWUgRmFjdG9yU3F1YXJlRnJlZUxpc3QgRmFjdG9yVGVybXMgRmFjdG9yVGVybXNMaXN0IEZhaWwgRmFpbHVyZURpc3RyaWJ1dGlvbiBGYWxzZSBGQVJJTUFQcm9jZXNzIEZFRGlzYWJsZUNvbnNvbGVQcmludFBhY2tldCBGZWVkYmFja1NlY3RvciBGZWVkYmFja1NlY3RvclN0eWxlIEZlZWRiYWNrVHlwZSBGRUVuYWJsZUNvbnNvbGVQcmludFBhY2tldCBGaWJvbmFjY2kgRmllbGRIaW50IEZpZWxkSGludFN0eWxlIEZpZWxkTWFza2VkIEZpZWxkU2l6ZSBGaWxlIEZpbGVCYXNlTmFtZSBGaWxlQnl0ZUNvdW50IEZpbGVEYXRlIEZpbGVFeGlzdHNRIEZpbGVFeHRlbnNpb24gRmlsZUZvcm1hdCBGaWxlSGFzaCBGaWxlSW5mb3JtYXRpb24gRmlsZU5hbWUgRmlsZU5hbWVEZXB0aCBGaWxlTmFtZURpYWxvZ1NldHRpbmdzIEZpbGVOYW1lRHJvcCBGaWxlTmFtZUpvaW4gRmlsZU5hbWVzIEZpbGVOYW1lU2V0dGVyIEZpbGVOYW1lU3BsaXQgRmlsZU5hbWVUYWtlIEZpbGVQcmludCBGaWxlVHlwZSBGaWxsZWRDdXJ2ZSBGaWxsZWRDdXJ2ZUJveCBGaWxsaW5nIEZpbGxpbmdTdHlsZSBGaWxsaW5nVHJhbnNmb3JtIEZpbHRlclJ1bGVzIEZpbmFuY2lhbEJvbmQgRmluYW5jaWFsRGF0YSBGaW5hbmNpYWxEZXJpdmF0aXZlIEZpbmFuY2lhbEluZGljYXRvciBGaW5kIEZpbmRBcmdNYXggRmluZEFyZ01pbiBGaW5kQ2xpcXVlIEZpbmRDbHVzdGVycyBGaW5kQ3VydmVQYXRoIEZpbmREaXN0cmlidXRpb25QYXJhbWV0ZXJzIEZpbmREaXZpc2lvbnMgRmluZEVkZ2VDb3ZlciBGaW5kRWRnZUN1dCBGaW5kRXVsZXJpYW5DeWNsZSBGaW5kRmFjZXMgRmluZEZpbGUgRmluZEZpdCBGaW5kR2VuZXJhdGluZ0Z1bmN0aW9uIEZpbmRHZW9Mb2NhdGlvbiBGaW5kR2VvbWV0cmljVHJhbnNmb3JtIEZpbmRHcmFwaENvbW11bml0aWVzIEZpbmRHcmFwaElzb21vcnBoaXNtIEZpbmRHcmFwaFBhcnRpdGlvbiBGaW5kSGFtaWx0b25pYW5DeWNsZSBGaW5kSW5kZXBlbmRlbnRFZGdlU2V0IEZpbmRJbmRlcGVuZGVudFZlcnRleFNldCBGaW5kSW5zdGFuY2UgRmluZEludGVnZXJOdWxsVmVjdG9yIEZpbmRLQ2xhbiBGaW5kS0NsaXF1ZSBGaW5kS0NsdWIgRmluZEtQbGV4IEZpbmRMaWJyYXJ5IEZpbmRMaW5lYXJSZWN1cnJlbmNlIEZpbmRMaXN0IEZpbmRNYXhpbXVtIEZpbmRNYXhpbXVtRmxvdyBGaW5kTWF4VmFsdWUgRmluZE1pbmltdW0gRmluZE1pbmltdW1Db3N0RmxvdyBGaW5kTWluaW11bUN1dCBGaW5kTWluVmFsdWUgRmluZFBlcm11dGF0aW9uIEZpbmRQb3N0bWFuVG91ciBGaW5kUHJvY2Vzc1BhcmFtZXRlcnMgRmluZFJvb3QgRmluZFNlcXVlbmNlRnVuY3Rpb24gRmluZFNldHRpbmdzIEZpbmRTaG9ydGVzdFBhdGggRmluZFNob3J0ZXN0VG91ciBGaW5kVGhyZXNob2xkIEZpbmRWZXJ0ZXhDb3ZlciBGaW5kVmVydGV4Q3V0IEZpbmUgRmluaXNoRHluYW1pYyBGaW5pdGVBYmVsaWFuR3JvdXBDb3VudCBGaW5pdGVHcm91cENvdW50IEZpbml0ZUdyb3VwRGF0YSBGaXJzdCBGaXJzdFBhc3NhZ2VUaW1lRGlzdHJpYnV0aW9uIEZpc2NoZXJHcm91cEZpMjIgRmlzY2hlckdyb3VwRmkyMyBGaXNjaGVyR3JvdXBGaTI0UHJpbWUgRmlzaGVySHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gRmlzaGVyUmF0aW9UZXN0IEZpc2hlclpEaXN0cmlidXRpb24gRml0IEZpdEFsbCBGaXR0ZWRNb2RlbCBGaXhlZFBvaW50IEZpeGVkUG9pbnRMaXN0IEZsYXNoU2VsZWN0aW9uIEZsYXQgRmxhdHRlbiBGbGF0dGVuQXQgRmxhdFRvcFdpbmRvdyBGbGlwVmlldyBGbG9vciBGbHVzaFByaW50T3V0cHV0UGFja2V0IEZvbGQgRm9sZExpc3QgRm9udCBGb250Q29sb3IgRm9udEZhbWlseSBGb250Rm9ybSBGb250TmFtZSBGb250T3BhY2l0eSBGb250UG9zdFNjcmlwdE5hbWUgRm9udFByb3BlcnRpZXMgRm9udFJlZW5jb2RpbmcgRm9udFNpemUgRm9udFNsYW50IEZvbnRTdWJzdGl0dXRpb25zIEZvbnRUcmFja2luZyBGb250VmFyaWF0aW9ucyBGb250V2VpZ2h0IEZvciBGb3JBbGwgRm9ybWF0IEZvcm1hdFJ1bGVzIEZvcm1hdFR5cGUgRm9ybWF0VHlwZUF1dG9Db252ZXJ0IEZvcm1hdFZhbHVlcyBGb3JtQm94IEZvcm1Cb3hPcHRpb25zIEZvcnRyYW5Gb3JtIEZvcndhcmQgRm9yd2FyZEJhY2t3YXJkIEZvdXJpZXIgRm91cmllckNvZWZmaWNpZW50IEZvdXJpZXJDb3NDb2VmZmljaWVudCBGb3VyaWVyQ29zU2VyaWVzIEZvdXJpZXJDb3NUcmFuc2Zvcm0gRm91cmllckRDVCBGb3VyaWVyRENURmlsdGVyIEZvdXJpZXJEQ1RNYXRyaXggRm91cmllckRTVCBGb3VyaWVyRFNUTWF0cml4IEZvdXJpZXJNYXRyaXggRm91cmllclBhcmFtZXRlcnMgRm91cmllclNlcXVlbmNlVHJhbnNmb3JtIEZvdXJpZXJTZXJpZXMgRm91cmllclNpbkNvZWZmaWNpZW50IEZvdXJpZXJTaW5TZXJpZXMgRm91cmllclNpblRyYW5zZm9ybSBGb3VyaWVyVHJhbnNmb3JtIEZvdXJpZXJUcmlnU2VyaWVzIEZyYWN0aW9uYWxCcm93bmlhbk1vdGlvblByb2Nlc3MgRnJhY3Rpb25hbFBhcnQgRnJhY3Rpb25Cb3ggRnJhY3Rpb25Cb3hPcHRpb25zIEZyYWN0aW9uTGluZSBGcmFtZSBGcmFtZUJveCBGcmFtZUJveE9wdGlvbnMgRnJhbWVkIEZyYW1lSW5zZXQgRnJhbWVMYWJlbCBGcmFtZWxlc3MgRnJhbWVNYXJnaW5zIEZyYW1lU3R5bGUgRnJhbWVUaWNrcyBGcmFtZVRpY2tzU3R5bGUgRlJhdGlvRGlzdHJpYnV0aW9uIEZyZWNoZXREaXN0cmlidXRpb24gRnJlZVEgRnJlcXVlbmN5U2FtcGxpbmdGaWx0ZXJLZXJuZWwgRnJlc25lbEMgRnJlc25lbFMgRnJpZGF5IEZyb2Jlbml1c051bWJlciBGcm9iZW5pdXNTb2x2ZSBGcm9tQ2hhcmFjdGVyQ29kZSBGcm9tQ29lZmZpY2llbnRSdWxlcyBGcm9tQ29udGludWVkRnJhY3Rpb24gRnJvbURhdGUgRnJvbURpZ2l0cyBGcm9tRE1TIEZyb250IEZyb250RW5kRHluYW1pY0V4cHJlc3Npb24gRnJvbnRFbmRFdmVudEFjdGlvbnMgRnJvbnRFbmRFeGVjdXRlIEZyb250RW5kT2JqZWN0IEZyb250RW5kUmVzb3VyY2UgRnJvbnRFbmRSZXNvdXJjZVN0cmluZyBGcm9udEVuZFN0YWNrU2l6ZSBGcm9udEVuZFRva2VuIEZyb250RW5kVG9rZW5FeGVjdXRlIEZyb250RW5kVmFsdWVDYWNoZSBGcm9udEVuZFZlcnNpb24gRnJvbnRGYWNlQ29sb3IgRnJvbnRGYWNlT3BhY2l0eSBGdWxsIEZ1bGxBeGVzIEZ1bGxEZWZpbml0aW9uIEZ1bGxGb3JtIEZ1bGxHcmFwaGljcyBGdWxsT3B0aW9ucyBGdWxsU2ltcGxpZnkgRnVuY3Rpb24gRnVuY3Rpb25FeHBhbmQgRnVuY3Rpb25JbnRlcnBvbGF0aW9uIEZ1bmN0aW9uU3BhY2UgRnVzc2VsbFZlc2VseUltcG9ydGFuY2UgR2Fib3JGaWx0ZXIgR2Fib3JNYXRyaXggR2Fib3JXYXZlbGV0IEdhaW5NYXJnaW5zIEdhaW5QaGFzZU1hcmdpbnMgR2FtbWEgR2FtbWFEaXN0cmlidXRpb24gR2FtbWFSZWd1bGFyaXplZCBHYXBQZW5hbHR5IEdhdGhlciBHYXRoZXJCeSBHYXVnZUZhY2VFbGVtZW50RnVuY3Rpb24gR2F1Z2VGYWNlU3R5bGUgR2F1Z2VGcmFtZUVsZW1lbnRGdW5jdGlvbiBHYXVnZUZyYW1lU2l6ZSBHYXVnZUZyYW1lU3R5bGUgR2F1Z2VMYWJlbHMgR2F1Z2VNYXJrZXJzIEdhdWdlU3R5bGUgR2F1c3NpYW5GaWx0ZXIgR2F1c3NpYW5JbnRlZ2VycyBHYXVzc2lhbk1hdHJpeCBHYXVzc2lhbldpbmRvdyBHQ0QgR2VnZW5iYXVlckMgR2VuZXJhbCBHZW5lcmFsaXplZExpbmVhck1vZGVsRml0IEdlbmVyYXRlQ29uZGl0aW9ucyBHZW5lcmF0ZWRDZWxsIEdlbmVyYXRlZFBhcmFtZXRlcnMgR2VuZXJhdGluZ0Z1bmN0aW9uIEdlbmVyaWMgR2VuZXJpY0N5bGluZHJpY2FsRGVjb21wb3NpdGlvbiBHZW5vbWVEYXRhIEdlbm9tZUxvb2t1cCBHZW9kZXNpY0Nsb3NpbmcgR2VvZGVzaWNEaWxhdGlvbiBHZW9kZXNpY0Vyb3Npb24gR2VvZGVzaWNPcGVuaW5nIEdlb0Rlc3RpbmF0aW9uIEdlb2Rlc3lEYXRhIEdlb0RpcmVjdGlvbiBHZW9EaXN0YW5jZSBHZW9HcmlkUG9zaXRpb24gR2VvbWV0cmljQnJvd25pYW5Nb3Rpb25Qcm9jZXNzIEdlb21ldHJpY0Rpc3RyaWJ1dGlvbiBHZW9tZXRyaWNNZWFuIEdlb21ldHJpY01lYW5GaWx0ZXIgR2VvbWV0cmljVHJhbnNmb3JtYXRpb24gR2VvbWV0cmljVHJhbnNmb3JtYXRpb24zREJveCBHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbjNEQm94T3B0aW9ucyBHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbkJveCBHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbkJveE9wdGlvbnMgR2VvUG9zaXRpb24gR2VvUG9zaXRpb25FTlUgR2VvUG9zaXRpb25YWVogR2VvUHJvamVjdGlvbkRhdGEgR2VzdHVyZUhhbmRsZXIgR2VzdHVyZUhhbmRsZXJUYWcgR2V0IEdldEJvdW5kaW5nQm94U2l6ZVBhY2tldCBHZXRDb250ZXh0IEdldEVudmlyb25tZW50IEdldEZpbGVOYW1lIEdldEZyb250RW5kT3B0aW9uc0RhdGFQYWNrZXQgR2V0TGluZWJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2V0TWVudXNQYWNrZXQgR2V0UGFnZUJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2xhaXNoZXIgR2xvYmFsQ2x1c3RlcmluZ0NvZWZmaWNpZW50IEdsb2JhbFByZWZlcmVuY2VzIEdsb2JhbFNlc3Npb24gR2xvdyBHb2xkZW5SYXRpbyBHb21wZXJ0ek1ha2VoYW1EaXN0cmlidXRpb24gR29vZG1hbktydXNrYWxHYW1tYSBHb29kbWFuS3J1c2thbEdhbW1hVGVzdCBHb3RvIEdyYWQgR3JhZGllbnQgR3JhZGllbnRGaWx0ZXIgR3JhZGllbnRPcmllbnRhdGlvbkZpbHRlciBHcmFwaCBHcmFwaEFzc29ydGF0aXZpdHkgR3JhcGhDZW50ZXIgR3JhcGhDb21wbGVtZW50IEdyYXBoRGF0YSBHcmFwaERlbnNpdHkgR3JhcGhEaWFtZXRlciBHcmFwaERpZmZlcmVuY2UgR3JhcGhEaXNqb2ludFVuaW9uIEdyYXBoRGlzdGFuY2UgR3JhcGhEaXN0YW5jZU1hdHJpeCBHcmFwaEVsZW1lbnREYXRhIEdyYXBoRW1iZWRkaW5nIEdyYXBoSGlnaGxpZ2h0IEdyYXBoSGlnaGxpZ2h0U3R5bGUgR3JhcGhIdWIgR3JhcGhpY3MgR3JhcGhpY3MzRCBHcmFwaGljczNEQm94IEdyYXBoaWNzM0RCb3hPcHRpb25zIEdyYXBoaWNzQXJyYXkgR3JhcGhpY3NCYXNlbGluZSBHcmFwaGljc0JveCBHcmFwaGljc0JveE9wdGlvbnMgR3JhcGhpY3NDb2xvciBHcmFwaGljc0NvbHVtbiBHcmFwaGljc0NvbXBsZXggR3JhcGhpY3NDb21wbGV4M0RCb3ggR3JhcGhpY3NDb21wbGV4M0RCb3hPcHRpb25zIEdyYXBoaWNzQ29tcGxleEJveCBHcmFwaGljc0NvbXBsZXhCb3hPcHRpb25zIEdyYXBoaWNzQ29udGVudHMgR3JhcGhpY3NEYXRhIEdyYXBoaWNzR3JpZCBHcmFwaGljc0dyaWRCb3ggR3JhcGhpY3NHcm91cCBHcmFwaGljc0dyb3VwM0RCb3ggR3JhcGhpY3NHcm91cDNEQm94T3B0aW9ucyBHcmFwaGljc0dyb3VwQm94IEdyYXBoaWNzR3JvdXBCb3hPcHRpb25zIEdyYXBoaWNzR3JvdXBpbmcgR3JhcGhpY3NIaWdobGlnaHRDb2xvciBHcmFwaGljc1JvdyBHcmFwaGljc1NwYWNpbmcgR3JhcGhpY3NTdHlsZSBHcmFwaEludGVyc2VjdGlvbiBHcmFwaExheW91dCBHcmFwaExpbmtFZmZpY2llbmN5IEdyYXBoUGVyaXBoZXJ5IEdyYXBoUGxvdCBHcmFwaFBsb3QzRCBHcmFwaFBvd2VyIEdyYXBoUHJvcGVydHlEaXN0cmlidXRpb24gR3JhcGhRIEdyYXBoUmFkaXVzIEdyYXBoUmVjaXByb2NpdHkgR3JhcGhSb290IEdyYXBoU3R5bGUgR3JhcGhVbmlvbiBHcmF5IEdyYXlMZXZlbCBHcmVhdENpcmNsZURpc3RhbmNlIEdyZWF0ZXIgR3JlYXRlckVxdWFsIEdyZWF0ZXJFcXVhbExlc3MgR3JlYXRlckZ1bGxFcXVhbCBHcmVhdGVyR3JlYXRlciBHcmVhdGVyTGVzcyBHcmVhdGVyU2xhbnRFcXVhbCBHcmVhdGVyVGlsZGUgR3JlZW4gR3JpZCBHcmlkQmFzZWxpbmUgR3JpZEJveCBHcmlkQm94QWxpZ25tZW50IEdyaWRCb3hCYWNrZ3JvdW5kIEdyaWRCb3hEaXZpZGVycyBHcmlkQm94RnJhbWUgR3JpZEJveEl0ZW1TaXplIEdyaWRCb3hJdGVtU3R5bGUgR3JpZEJveE9wdGlvbnMgR3JpZEJveFNwYWNpbmdzIEdyaWRDcmVhdGlvblNldHRpbmdzIEdyaWREZWZhdWx0RWxlbWVudCBHcmlkRWxlbWVudFN0eWxlT3B0aW9ucyBHcmlkRnJhbWUgR3JpZEZyYW1lTWFyZ2lucyBHcmlkR3JhcGggR3JpZExpbmVzIEdyaWRMaW5lc1N0eWxlIEdyb2VibmVyQmFzaXMgR3JvdXBBY3Rpb25CYXNlIEdyb3VwQ2VudHJhbGl6ZXIgR3JvdXBFbGVtZW50RnJvbVdvcmQgR3JvdXBFbGVtZW50UG9zaXRpb24gR3JvdXBFbGVtZW50USBHcm91cEVsZW1lbnRzIEdyb3VwRWxlbWVudFRvV29yZCBHcm91cEdlbmVyYXRvcnMgR3JvdXBNdWx0aXBsaWNhdGlvblRhYmxlIEdyb3VwT3JiaXRzIEdyb3VwT3JkZXIgR3JvdXBQYWdlQnJlYWtXaXRoaW4gR3JvdXBTZXR3aXNlU3RhYmlsaXplciBHcm91cFN0YWJpbGl6ZXIgR3JvdXBTdGFiaWxpemVyQ2hhaW4gR3VkZXJtYW5uaWFuIEd1bWJlbERpc3RyaWJ1dGlvbiBIYWFyV2F2ZWxldCBIYWRhbWFyZE1hdHJpeCBIYWxmTm9ybWFsRGlzdHJpYnV0aW9uIEhhbWlsdG9uaWFuR3JhcGhRIEhhbW1pbmdEaXN0YW5jZSBIYW1taW5nV2luZG93IEhhbmtlbEgxIEhhbmtlbEgyIEhhbmtlbE1hdHJpeCBIYW5uUG9pc3NvbldpbmRvdyBIYW5uV2luZG93IEhhcmFkYU5vcnRvbkdyb3VwSE4gSGFyYXJ5R3JhcGggSGFybW9uaWNNZWFuIEhhcm1vbmljTWVhbkZpbHRlciBIYXJtb25pY051bWJlciBIYXNoIEhhc2hUYWJsZSBIYXZlcnNpbmUgSGF6YXJkRnVuY3Rpb24gSGVhZCBIZWFkQ29tcG9zZSBIZWFkcyBIZWF2aXNpZGVMYW1iZGEgSGVhdmlzaWRlUGkgSGVhdmlzaWRlVGhldGEgSGVsZEdyb3VwSGUgSGVsZFBhcnQgSGVscEJyb3dzZXJMb29rdXAgSGVscEJyb3dzZXJOb3RlYm9vayBIZWxwQnJvd3NlclNldHRpbmdzIEhlcm1pdGVEZWNvbXBvc2l0aW9uIEhlcm1pdGVIIEhlcm1pdGlhbk1hdHJpeFEgSGVzc2VuYmVyZ0RlY29tcG9zaXRpb24gSGVzc2lhbiBIZXhhZGVjaW1hbENoYXJhY3RlciBIZXhhaGVkcm9uIEhleGFoZWRyb25Cb3ggSGV4YWhlZHJvbkJveE9wdGlvbnMgSGlkZGVuU3VyZmFjZSBIaWdobGlnaHRHcmFwaCBIaWdobGlnaHRJbWFnZSBIaWdocGFzc0ZpbHRlciBIaWdtYW5TaW1zR3JvdXBIUyBIaWxiZXJ0RmlsdGVyIEhpbGJlcnRNYXRyaXggSGlzdG9ncmFtIEhpc3RvZ3JhbTNEIEhpc3RvZ3JhbURpc3RyaWJ1dGlvbiBIaXN0b2dyYW1MaXN0IEhpc3RvZ3JhbVRyYW5zZm9ybSBIaXN0b2dyYW1UcmFuc2Zvcm1JbnRlcnBvbGF0aW9uIEhpdE1pc3NUcmFuc2Zvcm0gSElUU0NlbnRyYWxpdHkgSG9kZ2VEdWFsIEhvZWZmZGluZ0QgSG9lZmZkaW5nRFRlc3QgSG9sZCBIb2xkQWxsIEhvbGRBbGxDb21wbGV0ZSBIb2xkQ29tcGxldGUgSG9sZEZpcnN0IEhvbGRGb3JtIEhvbGRQYXR0ZXJuIEhvbGRSZXN0IEhvbGlkYXlDYWxlbmRhciBIb21lRGlyZWN0b3J5IEhvbWVQYWdlIEhvcml6b250YWwgSG9yaXpvbnRhbEZvcm0gSG9yaXpvbnRhbEdhdWdlIEhvcml6b250YWxTY3JvbGxQb3NpdGlvbiBIb3JuZXJGb3JtIEhvdGVsbGluZ1RTcXVhcmVEaXN0cmlidXRpb24gSG95dERpc3RyaWJ1dGlvbiBIVE1MU2F2ZSBIdWUgSHVtcERvd25IdW1wIEh1bXBFcXVhbCBIdXJ3aXR6TGVyY2hQaGkgSHVyd2l0elpldGEgSHlwZXJib2xpY0Rpc3RyaWJ1dGlvbiBIeXBlcmN1YmVHcmFwaCBIeXBlcmV4cG9uZW50aWFsRGlzdHJpYnV0aW9uIEh5cGVyZmFjdG9yaWFsIEh5cGVyZ2VvbWV0cmljMEYxIEh5cGVyZ2VvbWV0cmljMEYxUmVndWxhcml6ZWQgSHlwZXJnZW9tZXRyaWMxRjEgSHlwZXJnZW9tZXRyaWMxRjFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpYzJGMSBIeXBlcmdlb21ldHJpYzJGMVJlZ3VsYXJpemVkIEh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIEh5cGVyZ2VvbWV0cmljUEZRIEh5cGVyZ2VvbWV0cmljUEZRUmVndWxhcml6ZWQgSHlwZXJnZW9tZXRyaWNVIEh5cGVybGluayBIeXBlcmxpbmtDcmVhdGlvblNldHRpbmdzIEh5cGhlbmF0aW9uIEh5cGhlbmF0aW9uT3B0aW9ucyBIeXBvZXhwb25lbnRpYWxEaXN0cmlidXRpb24gSHlwb3RoZXNpc1Rlc3REYXRhIEkgSWRlbnRpdHkgSWRlbnRpdHlNYXRyaXggSWYgSWdub3JlQ2FzZSBJbSBJbWFnZSBJbWFnZTNEIEltYWdlM0RTbGljZXMgSW1hZ2VBY2N1bXVsYXRlIEltYWdlQWRkIEltYWdlQWRqdXN0IEltYWdlQWxpZ24gSW1hZ2VBcHBseSBJbWFnZUFzcGVjdFJhdGlvIEltYWdlQXNzZW1ibGUgSW1hZ2VDYWNoZSBJbWFnZUNhY2hlVmFsaWQgSW1hZ2VDYXB0dXJlIEltYWdlQ2hhbm5lbHMgSW1hZ2VDbGlwIEltYWdlQ29sb3JTcGFjZSBJbWFnZUNvbXBvc2UgSW1hZ2VDb252b2x2ZSBJbWFnZUNvb2NjdXJyZW5jZSBJbWFnZUNvcm5lcnMgSW1hZ2VDb3JyZWxhdGUgSW1hZ2VDb3JyZXNwb25kaW5nUG9pbnRzIEltYWdlQ3JvcCBJbWFnZURhdGEgSW1hZ2VEYXRhUGFja2V0IEltYWdlRGVjb252b2x2ZSBJbWFnZURlbW9zYWljIEltYWdlRGlmZmVyZW5jZSBJbWFnZURpbWVuc2lvbnMgSW1hZ2VEaXN0YW5jZSBJbWFnZUVmZmVjdCBJbWFnZUZlYXR1cmVUcmFjayBJbWFnZUZpbGVBcHBseSBJbWFnZUZpbGVGaWx0ZXIgSW1hZ2VGaWxlU2NhbiBJbWFnZUZpbHRlciBJbWFnZUZvcmVzdGluZ0NvbXBvbmVudHMgSW1hZ2VGb3J3YXJkVHJhbnNmb3JtYXRpb24gSW1hZ2VIaXN0b2dyYW0gSW1hZ2VLZXlwb2ludHMgSW1hZ2VMZXZlbHMgSW1hZ2VMaW5lcyBJbWFnZU1hcmdpbnMgSW1hZ2VNYXJrZXJzIEltYWdlTWVhc3VyZW1lbnRzIEltYWdlTXVsdGlwbHkgSW1hZ2VPZmZzZXQgSW1hZ2VQYWQgSW1hZ2VQYWRkaW5nIEltYWdlUGFydGl0aW9uIEltYWdlUGVyaW9kb2dyYW0gSW1hZ2VQZXJzcGVjdGl2ZVRyYW5zZm9ybWF0aW9uIEltYWdlUSBJbWFnZVJhbmdlQ2FjaGUgSW1hZ2VSZWZsZWN0IEltYWdlUmVnaW9uIEltYWdlUmVzaXplIEltYWdlUmVzb2x1dGlvbiBJbWFnZVJvdGF0ZSBJbWFnZVJvdGF0ZWQgSW1hZ2VTY2FsZWQgSW1hZ2VTY2FuIEltYWdlU2l6ZSBJbWFnZVNpemVBY3Rpb24gSW1hZ2VTaXplQ2FjaGUgSW1hZ2VTaXplTXVsdGlwbGllcnMgSW1hZ2VTaXplUmF3IEltYWdlU3VidHJhY3QgSW1hZ2VUYWtlIEltYWdlVHJhbnNmb3JtYXRpb24gSW1hZ2VUcmltIEltYWdlVHlwZSBJbWFnZVZhbHVlIEltYWdlVmFsdWVQb3NpdGlvbnMgSW1wbGllcyBJbXBvcnQgSW1wb3J0QXV0b1JlcGxhY2VtZW50cyBJbXBvcnRTdHJpbmcgSW1wcm92ZW1lbnRJbXBvcnRhbmNlIEluIEluY2lkZW5jZUdyYXBoIEluY2lkZW5jZUxpc3QgSW5jaWRlbmNlTWF0cml4IEluY2x1ZGVDb25zdGFudEJhc2lzIEluY2x1ZGVGaWxlRXh0ZW5zaW9uIEluY2x1ZGVQb2RzIEluY2x1ZGVTaW5ndWxhclRlcm0gSW5jcmVtZW50IEluZGVudCBJbmRlbnRpbmdOZXdsaW5lU3BhY2luZ3MgSW5kZW50TWF4RnJhY3Rpb24gSW5kZXBlbmRlbmNlVGVzdCBJbmRlcGVuZGVudEVkZ2VTZXRRIEluZGVwZW5kZW50VW5pdCBJbmRlcGVuZGVudFZlcnRleFNldFEgSW5kZXRlcm1pbmF0ZSBJbmRleENyZWF0aW9uT3B0aW9ucyBJbmRleGVkIEluZGV4R3JhcGggSW5kZXhUYWcgSW5lcXVhbGl0eSBJbmV4YWN0TnVtYmVyUSBJbmV4YWN0TnVtYmVycyBJbmZpbml0eSBJbmZpeCBJbmZvcm1hdGlvbiBJbmhlcml0ZWQgSW5oZXJpdFNjb3BlIEluaXRpYWxpemF0aW9uIEluaXRpYWxpemF0aW9uQ2VsbCBJbml0aWFsaXphdGlvbkNlbGxFdmFsdWF0aW9uIEluaXRpYWxpemF0aW9uQ2VsbFdhcm5pbmcgSW5saW5lQ291bnRlckFzc2lnbm1lbnRzIElubGluZUNvdW50ZXJJbmNyZW1lbnRzIElubGluZVJ1bGVzIElubmVyIElucGFpbnQgSW5wdXQgSW5wdXRBbGlhc2VzIElucHV0QXNzdW1wdGlvbnMgSW5wdXRBdXRvUmVwbGFjZW1lbnRzIElucHV0RmllbGQgSW5wdXRGaWVsZEJveCBJbnB1dEZpZWxkQm94T3B0aW9ucyBJbnB1dEZvcm0gSW5wdXRHcm91cGluZyBJbnB1dE5hbWVQYWNrZXQgSW5wdXROb3RlYm9vayBJbnB1dFBhY2tldCBJbnB1dFNldHRpbmdzIElucHV0U3RyZWFtIElucHV0U3RyaW5nIElucHV0U3RyaW5nUGFja2V0IElucHV0VG9Cb3hGb3JtUGFja2V0IEluc2VydCBJbnNlcnRpb25Qb2ludE9iamVjdCBJbnNlcnRSZXN1bHRzIEluc2V0IEluc2V0M0RCb3ggSW5zZXQzREJveE9wdGlvbnMgSW5zZXRCb3ggSW5zZXRCb3hPcHRpb25zIEluc3RhbGwgSW5zdGFsbFNlcnZpY2UgSW5TdHJpbmcgSW50ZWdlciBJbnRlZ2VyRGlnaXRzIEludGVnZXJFeHBvbmVudCBJbnRlZ2VyTGVuZ3RoIEludGVnZXJQYXJ0IEludGVnZXJQYXJ0aXRpb25zIEludGVnZXJRIEludGVnZXJzIEludGVnZXJTdHJpbmcgSW50ZWdyYWwgSW50ZWdyYXRlIEludGVyYWN0aXZlIEludGVyYWN0aXZlVHJhZGluZ0NoYXJ0IEludGVybGFjZWQgSW50ZXJsZWF2aW5nIEludGVybmFsbHlCYWxhbmNlZERlY29tcG9zaXRpb24gSW50ZXJwb2xhdGluZ0Z1bmN0aW9uIEludGVycG9sYXRpbmdQb2x5bm9taWFsIEludGVycG9sYXRpb24gSW50ZXJwb2xhdGlvbk9yZGVyIEludGVycG9sYXRpb25Qb2ludHMgSW50ZXJwb2xhdGlvblByZWNpc2lvbiBJbnRlcnByZXRhdGlvbiBJbnRlcnByZXRhdGlvbkJveCBJbnRlcnByZXRhdGlvbkJveE9wdGlvbnMgSW50ZXJwcmV0YXRpb25GdW5jdGlvbiBJbnRlcnByZXRUZW1wbGF0ZSBJbnRlcnF1YXJ0aWxlUmFuZ2UgSW50ZXJydXB0IEludGVycnVwdFNldHRpbmdzIEludGVyc2VjdGlvbiBJbnRlcnZhbCBJbnRlcnZhbEludGVyc2VjdGlvbiBJbnRlcnZhbE1lbWJlclEgSW50ZXJ2YWxVbmlvbiBJbnZlcnNlIEludmVyc2VCZXRhUmVndWxhcml6ZWQgSW52ZXJzZUNERiBJbnZlcnNlQ2hpU3F1YXJlRGlzdHJpYnV0aW9uIEludmVyc2VDb250aW51b3VzV2F2ZWxldFRyYW5zZm9ybSBJbnZlcnNlRGlzdGFuY2VUcmFuc2Zvcm0gSW52ZXJzZUVsbGlwdGljTm9tZVEgSW52ZXJzZUVyZiBJbnZlcnNlRXJmYyBJbnZlcnNlRm91cmllciBJbnZlcnNlRm91cmllckNvc1RyYW5zZm9ybSBJbnZlcnNlRm91cmllclNlcXVlbmNlVHJhbnNmb3JtIEludmVyc2VGb3VyaWVyU2luVHJhbnNmb3JtIEludmVyc2VGb3VyaWVyVHJhbnNmb3JtIEludmVyc2VGdW5jdGlvbiBJbnZlcnNlRnVuY3Rpb25zIEludmVyc2VHYW1tYURpc3RyaWJ1dGlvbiBJbnZlcnNlR2FtbWFSZWd1bGFyaXplZCBJbnZlcnNlR2F1c3NpYW5EaXN0cmlidXRpb24gSW52ZXJzZUd1ZGVybWFubmlhbiBJbnZlcnNlSGF2ZXJzaW5lIEludmVyc2VKYWNvYmlDRCBJbnZlcnNlSmFjb2JpQ04gSW52ZXJzZUphY29iaUNTIEludmVyc2VKYWNvYmlEQyBJbnZlcnNlSmFjb2JpRE4gSW52ZXJzZUphY29iaURTIEludmVyc2VKYWNvYmlOQyBJbnZlcnNlSmFjb2JpTkQgSW52ZXJzZUphY29iaU5TIEludmVyc2VKYWNvYmlTQyBJbnZlcnNlSmFjb2JpU0QgSW52ZXJzZUphY29iaVNOIEludmVyc2VMYXBsYWNlVHJhbnNmb3JtIEludmVyc2VQZXJtdXRhdGlvbiBJbnZlcnNlUmFkb24gSW52ZXJzZVNlcmllcyBJbnZlcnNlU3Vydml2YWxGdW5jdGlvbiBJbnZlcnNlV2F2ZWxldFRyYW5zZm9ybSBJbnZlcnNlV2VpZXJzdHJhc3NQIEludmVyc2VaVHJhbnNmb3JtIEludmlzaWJsZSBJbnZpc2libGVBcHBsaWNhdGlvbiBJbnZpc2libGVUaW1lcyBJcnJlZHVjaWJsZVBvbHlub21pYWxRIElzb2xhdGluZ0ludGVydmFsIElzb21vcnBoaWNHcmFwaFEgSXNvdG9wZURhdGEgSXRhbGljIEl0ZW0gSXRlbUJveCBJdGVtQm94T3B0aW9ucyBJdGVtU2l6ZSBJdGVtU3R5bGUgSXRvUHJvY2VzcyBKYWNjYXJkRGlzc2ltaWxhcml0eSBKYWNvYmlBbXBsaXR1ZGUgSmFjb2JpYW4gSmFjb2JpQ0QgSmFjb2JpQ04gSmFjb2JpQ1MgSmFjb2JpREMgSmFjb2JpRE4gSmFjb2JpRFMgSmFjb2JpTkMgSmFjb2JpTkQgSmFjb2JpTlMgSmFjb2JpUCBKYWNvYmlTQyBKYWNvYmlTRCBKYWNvYmlTTiBKYWNvYmlTeW1ib2wgSmFjb2JpWmV0YSBKYW5rb0dyb3VwSjEgSmFua29Hcm91cEoyIEphbmtvR3JvdXBKMyBKYW5rb0dyb3VwSjQgSmFycXVlQmVyYUFMTVRlc3QgSm9obnNvbkRpc3RyaWJ1dGlvbiBKb2luIEpvaW5lZCBKb2luZWRDdXJ2ZSBKb2luZWRDdXJ2ZUJveCBKb2luRm9ybSBKb3JkYW5EZWNvbXBvc2l0aW9uIEpvcmRhbk1vZGVsRGVjb21wb3NpdGlvbiBLIEthZ2lDaGFydCBLYWlzZXJCZXNzZWxXaW5kb3cgS2Fpc2VyV2luZG93IEthbG1hbkVzdGltYXRvciBLYWxtYW5GaWx0ZXIgS2FyaHVuZW5Mb2V2ZURlY29tcG9zaXRpb24gS2FyeVRyZWUgS2F0ekNlbnRyYWxpdHkgS0NvcmVDb21wb25lbnRzIEtEaXN0cmlidXRpb24gS2VsdmluQmVpIEtlbHZpbkJlciBLZWx2aW5LZWkgS2VsdmluS2VyIEtlbmRhbGxUYXUgS2VuZGFsbFRhdVRlc3QgS2VybmVsRXhlY3V0ZSBLZXJuZWxNaXh0dXJlRGlzdHJpYnV0aW9uIEtlcm5lbE9iamVjdCBLZXJuZWxzIEtldCBLaGluY2hpbiBLaXJjaGhvZmZHcmFwaCBLaXJjaGhvZmZNYXRyaXggS2xlaW5JbnZhcmlhbnRKIEtuaWdodFRvdXJHcmFwaCBLbm90RGF0YSBLbm93blVuaXRRIEtvbG1vZ29yb3ZTbWlybm92VGVzdCBLcm9uZWNrZXJEZWx0YSBLcm9uZWNrZXJNb2RlbERlY29tcG9zaXRpb24gS3JvbmVja2VyUHJvZHVjdCBLcm9uZWNrZXJTeW1ib2wgS3VpcGVyVGVzdCBLdW1hcmFzd2FteURpc3RyaWJ1dGlvbiBLdXJ0b3NpcyBLdXdhaGFyYUZpbHRlciBMYWJlbCBMYWJlbGVkIExhYmVsZWRTbGlkZXIgTGFiZWxpbmdGdW5jdGlvbiBMYWJlbFN0eWxlIExhZ3VlcnJlTCBMYW1iZGFDb21wb25lbnRzIExhbWJlcnRXIExhbmN6b3NXaW5kb3cgTGFuZGF1RGlzdHJpYnV0aW9uIExhbmd1YWdlIExhbmd1YWdlQ2F0ZWdvcnkgTGFwbGFjZURpc3RyaWJ1dGlvbiBMYXBsYWNlVHJhbnNmb3JtIExhcGxhY2lhbiBMYXBsYWNpYW5GaWx0ZXIgTGFwbGFjaWFuR2F1c3NpYW5GaWx0ZXIgTGFyZ2UgTGFyZ2VyIExhc3QgTGF0aXR1ZGUgTGF0aXR1ZGVMb25naXR1ZGUgTGF0dGljZURhdGEgTGF0dGljZVJlZHVjZSBMYXVuY2ggTGF1bmNoS2VybmVscyBMYXllcmVkR3JhcGhQbG90IExheWVyU2l6ZUZ1bmN0aW9uIExheW91dEluZm9ybWF0aW9uIExDTSBMZWFmQ291bnQgTGVhcFllYXJRIExlYXN0U3F1YXJlcyBMZWFzdFNxdWFyZXNGaWx0ZXJLZXJuZWwgTGVmdCBMZWZ0QXJyb3cgTGVmdEFycm93QmFyIExlZnRBcnJvd1JpZ2h0QXJyb3cgTGVmdERvd25UZWVWZWN0b3IgTGVmdERvd25WZWN0b3IgTGVmdERvd25WZWN0b3JCYXIgTGVmdFJpZ2h0QXJyb3cgTGVmdFJpZ2h0VmVjdG9yIExlZnRUZWUgTGVmdFRlZUFycm93IExlZnRUZWVWZWN0b3IgTGVmdFRyaWFuZ2xlIExlZnRUcmlhbmdsZUJhciBMZWZ0VHJpYW5nbGVFcXVhbCBMZWZ0VXBEb3duVmVjdG9yIExlZnRVcFRlZVZlY3RvciBMZWZ0VXBWZWN0b3IgTGVmdFVwVmVjdG9yQmFyIExlZnRWZWN0b3IgTGVmdFZlY3RvckJhciBMZWdlbmRBcHBlYXJhbmNlIExlZ2VuZGVkIExlZ2VuZEZ1bmN0aW9uIExlZ2VuZExhYmVsIExlZ2VuZExheW91dCBMZWdlbmRNYXJnaW5zIExlZ2VuZE1hcmtlcnMgTGVnZW5kTWFya2VyU2l6ZSBMZWdlbmRyZVAgTGVnZW5kcmVRIExlZ2VuZHJlVHlwZSBMZW5ndGggTGVuZ3RoV2hpbGUgTGVyY2hQaGkgTGVzcyBMZXNzRXF1YWwgTGVzc0VxdWFsR3JlYXRlciBMZXNzRnVsbEVxdWFsIExlc3NHcmVhdGVyIExlc3NMZXNzIExlc3NTbGFudEVxdWFsIExlc3NUaWxkZSBMZXR0ZXJDaGFyYWN0ZXIgTGV0dGVyUSBMZXZlbCBMZXZlbmVUZXN0IExldmlDaXZpdGFUZW5zb3IgTGV2eURpc3RyaWJ1dGlvbiBMZXhpY29ncmFwaGljIExpYnJhcnlGdW5jdGlvbiBMaWJyYXJ5RnVuY3Rpb25FcnJvciBMaWJyYXJ5RnVuY3Rpb25JbmZvcm1hdGlvbiBMaWJyYXJ5RnVuY3Rpb25Mb2FkIExpYnJhcnlGdW5jdGlvblVubG9hZCBMaWJyYXJ5TG9hZCBMaWJyYXJ5VW5sb2FkIExpY2Vuc2VJRCBMaWZ0aW5nRmlsdGVyRGF0YSBMaWZ0aW5nV2F2ZWxldFRyYW5zZm9ybSBMaWdodEJsdWUgTGlnaHRCcm93biBMaWdodEN5YW4gTGlnaHRlciBMaWdodEdyYXkgTGlnaHRHcmVlbiBMaWdodGluZyBMaWdodGluZ0FuZ2xlIExpZ2h0TWFnZW50YSBMaWdodE9yYW5nZSBMaWdodFBpbmsgTGlnaHRQdXJwbGUgTGlnaHRSZWQgTGlnaHRTb3VyY2VzIExpZ2h0WWVsbG93IExpa2VsaWhvb2QgTGltaXQgTGltaXRzUG9zaXRpb25pbmcgTGltaXRzUG9zaXRpb25pbmdUb2tlbnMgTGluZGxleURpc3RyaWJ1dGlvbiBMaW5lIExpbmUzREJveCBMaW5lYXJGaWx0ZXIgTGluZWFyRnJhY3Rpb25hbFRyYW5zZm9ybSBMaW5lYXJNb2RlbEZpdCBMaW5lYXJPZmZzZXRGdW5jdGlvbiBMaW5lYXJQcm9ncmFtbWluZyBMaW5lYXJSZWN1cnJlbmNlIExpbmVhclNvbHZlIExpbmVhclNvbHZlRnVuY3Rpb24gTGluZUJveCBMaW5lQnJlYWsgTGluZWJyZWFrQWRqdXN0bWVudHMgTGluZUJyZWFrQ2hhcnQgTGluZUJyZWFrV2l0aGluIExpbmVDb2xvciBMaW5lRm9ybSBMaW5lR3JhcGggTGluZUluZGVudCBMaW5lSW5kZW50TWF4RnJhY3Rpb24gTGluZUludGVncmFsQ29udm9sdXRpb25QbG90IExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uU2NhbGUgTGluZUxlZ2VuZCBMaW5lT3BhY2l0eSBMaW5lU3BhY2luZyBMaW5lV3JhcFBhcnRzIExpbmtBY3RpdmF0ZSBMaW5rQ2xvc2UgTGlua0Nvbm5lY3QgTGlua0Nvbm5lY3RlZFEgTGlua0NyZWF0ZSBMaW5rRXJyb3IgTGlua0ZsdXNoIExpbmtGdW5jdGlvbiBMaW5rSG9zdCBMaW5rSW50ZXJydXB0IExpbmtMYXVuY2ggTGlua01vZGUgTGlua09iamVjdCBMaW5rT3BlbiBMaW5rT3B0aW9ucyBMaW5rUGF0dGVybnMgTGlua1Byb3RvY29sIExpbmtSZWFkIExpbmtSZWFkSGVsZCBMaW5rUmVhZHlRIExpbmtzIExpbmtXcml0ZSBMaW5rV3JpdGVIZWxkIExpb3V2aWxsZUxhbWJkYSBMaXN0IExpc3RhYmxlIExpc3RBbmltYXRlIExpc3RDb250b3VyUGxvdCBMaXN0Q29udG91clBsb3QzRCBMaXN0Q29udm9sdmUgTGlzdENvcnJlbGF0ZSBMaXN0Q3VydmVQYXRoUGxvdCBMaXN0RGVjb252b2x2ZSBMaXN0RGVuc2l0eVBsb3QgTGlzdGVuIExpc3RGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gTGlzdEludGVycG9sYXRpb24gTGlzdExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uUGxvdCBMaXN0TGluZVBsb3QgTGlzdExvZ0xpbmVhclBsb3QgTGlzdExvZ0xvZ1Bsb3QgTGlzdExvZ1Bsb3QgTGlzdFBpY2tlciBMaXN0UGlja2VyQm94IExpc3RQaWNrZXJCb3hCYWNrZ3JvdW5kIExpc3RQaWNrZXJCb3hPcHRpb25zIExpc3RQbGF5IExpc3RQbG90IExpc3RQbG90M0QgTGlzdFBvaW50UGxvdDNEIExpc3RQb2xhclBsb3QgTGlzdFEgTGlzdFN0cmVhbURlbnNpdHlQbG90IExpc3RTdHJlYW1QbG90IExpc3RTdXJmYWNlUGxvdDNEIExpc3RWZWN0b3JEZW5zaXR5UGxvdCBMaXN0VmVjdG9yUGxvdCBMaXN0VmVjdG9yUGxvdDNEIExpc3RaVHJhbnNmb3JtIExpdGVyYWwgTGl0ZXJhbFNlYXJjaCBMb2NhbENsdXN0ZXJpbmdDb2VmZmljaWVudCBMb2NhbGl6ZVZhcmlhYmxlcyBMb2NhdGlvbkVxdWl2YWxlbmNlVGVzdCBMb2NhdGlvblRlc3QgTG9jYXRvciBMb2NhdG9yQXV0b0NyZWF0ZSBMb2NhdG9yQm94IExvY2F0b3JCb3hPcHRpb25zIExvY2F0b3JDZW50ZXJpbmcgTG9jYXRvclBhbmUgTG9jYXRvclBhbmVCb3ggTG9jYXRvclBhbmVCb3hPcHRpb25zIExvY2F0b3JSZWdpb24gTG9ja2VkIExvZyBMb2cxMCBMb2cyIExvZ0Jhcm5lc0cgTG9nR2FtbWEgTG9nR2FtbWFEaXN0cmlidXRpb24gTG9naWNhbEV4cGFuZCBMb2dJbnRlZ3JhbCBMb2dpc3RpY0Rpc3RyaWJ1dGlvbiBMb2dpdE1vZGVsRml0IExvZ0xpa2VsaWhvb2QgTG9nTGluZWFyUGxvdCBMb2dMb2dpc3RpY0Rpc3RyaWJ1dGlvbiBMb2dMb2dQbG90IExvZ011bHRpbm9ybWFsRGlzdHJpYnV0aW9uIExvZ05vcm1hbERpc3RyaWJ1dGlvbiBMb2dQbG90IExvZ1JhbmtUZXN0IExvZ1Nlcmllc0Rpc3RyaWJ1dGlvbiBMb25nRXF1YWwgTG9uZ2VzdCBMb25nZXN0QXNjZW5kaW5nU2VxdWVuY2UgTG9uZ2VzdENvbW1vblNlcXVlbmNlIExvbmdlc3RDb21tb25TZXF1ZW5jZVBvc2l0aW9ucyBMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2UgTG9uZ2VzdENvbW1vblN1YnNlcXVlbmNlUG9zaXRpb25zIExvbmdlc3RNYXRjaCBMb25nRm9ybSBMb25naXR1ZGUgTG9uZ0xlZnRBcnJvdyBMb25nTGVmdFJpZ2h0QXJyb3cgTG9uZ1JpZ2h0QXJyb3cgTG9vcGJhY2sgTG9vcEZyZWVHcmFwaFEgTG93ZXJDYXNlUSBMb3dlckxlZnRBcnJvdyBMb3dlclJpZ2h0QXJyb3cgTG93ZXJUcmlhbmd1bGFyaXplIExvd3Bhc3NGaWx0ZXIgTFFFc3RpbWF0b3JHYWlucyBMUUdSZWd1bGF0b3IgTFFPdXRwdXRSZWd1bGF0b3JHYWlucyBMUVJlZ3VsYXRvckdhaW5zIExVQmFja1N1YnN0aXR1dGlvbiBMdWNhc0wgTHVjY2lvU2FtaUNvbXBvbmVudHMgTFVEZWNvbXBvc2l0aW9uIEx5YXB1bm92U29sdmUgTHlvbnNHcm91cEx5IE1hY2hpbmVJRCBNYWNoaW5lTmFtZSBNYWNoaW5lTnVtYmVyUSBNYWNoaW5lUHJlY2lzaW9uIE1hY2ludG9zaFN5c3RlbVBhZ2VTZXR1cCBNYWdlbnRhIE1hZ25pZmljYXRpb24gTWFnbmlmeSBNYWluU29sdmUgTWFpbnRhaW5EeW5hbWljQ2FjaGVzIE1ham9yaXR5IE1ha2VCb3hlcyBNYWtlRXhwcmVzc2lvbiBNYWtlUnVsZXMgTWFuZ29sZHRMYW1iZGEgTWFuaGF0dGFuRGlzdGFuY2UgTWFuaXB1bGF0ZSBNYW5pcHVsYXRvciBNYW5uV2hpdG5leVRlc3QgTWFudGlzc2FFeHBvbmVudCBNYW51YWwgTWFwIE1hcEFsbCBNYXBBdCBNYXBJbmRleGVkIE1BUHJvY2VzcyBNYXBUaHJlYWQgTWFyY3VtUSBNYXJkaWFDb21iaW5lZFRlc3QgTWFyZGlhS3VydG9zaXNUZXN0IE1hcmRpYVNrZXduZXNzVGVzdCBNYXJnaW5hbERpc3RyaWJ1dGlvbiBNYXJrb3ZQcm9jZXNzUHJvcGVydGllcyBNYXNraW5nIE1hdGNoaW5nRGlzc2ltaWxhcml0eSBNYXRjaExvY2FsTmFtZVEgTWF0Y2hMb2NhbE5hbWVzIE1hdGNoUSBNYXRlcmlhbCBNYXRoZW1hdGljYU5vdGF0aW9uIE1hdGhpZXVDIE1hdGhpZXVDaGFyYWN0ZXJpc3RpY0EgTWF0aGlldUNoYXJhY3RlcmlzdGljQiBNYXRoaWV1Q2hhcmFjdGVyaXN0aWNFeHBvbmVudCBNYXRoaWV1Q1ByaW1lIE1hdGhpZXVHcm91cE0xMSBNYXRoaWV1R3JvdXBNMTIgTWF0aGlldUdyb3VwTTIyIE1hdGhpZXVHcm91cE0yMyBNYXRoaWV1R3JvdXBNMjQgTWF0aGlldVMgTWF0aGlldVNQcmltZSBNYXRoTUxGb3JtIE1hdGhNTFRleHQgTWF0cmljZXMgTWF0cml4RXhwIE1hdHJpeEZvcm0gTWF0cml4RnVuY3Rpb24gTWF0cml4TG9nIE1hdHJpeFBsb3QgTWF0cml4UG93ZXIgTWF0cml4USBNYXRyaXhSYW5rIE1heCBNYXhCZW5kIE1heERldGVjdCBNYXhFeHRyYUJhbmR3aWR0aHMgTWF4RXh0cmFDb25kaXRpb25zIE1heEZlYXR1cmVzIE1heEZpbHRlciBNYXhpbWl6ZSBNYXhJdGVyYXRpb25zIE1heE1lbW9yeVVzZWQgTWF4TWl4dHVyZUtlcm5lbHMgTWF4UGxvdFBvaW50cyBNYXhQb2ludHMgTWF4UmVjdXJzaW9uIE1heFN0YWJsZURpc3RyaWJ1dGlvbiBNYXhTdGVwRnJhY3Rpb24gTWF4U3RlcHMgTWF4U3RlcFNpemUgTWF4VmFsdWUgTWF4d2VsbERpc3RyaWJ1dGlvbiBNY0xhdWdobGluR3JvdXBNY0wgTWVhbiBNZWFuQ2x1c3RlcmluZ0NvZWZmaWNpZW50IE1lYW5EZWdyZWVDb25uZWN0aXZpdHkgTWVhbkRldmlhdGlvbiBNZWFuRmlsdGVyIE1lYW5HcmFwaERpc3RhbmNlIE1lYW5OZWlnaGJvckRlZ3JlZSBNZWFuU2hpZnQgTWVhblNoaWZ0RmlsdGVyIE1lZGlhbiBNZWRpYW5EZXZpYXRpb24gTWVkaWFuRmlsdGVyIE1lZGl1bSBNZWlqZXJHIE1laXhuZXJEaXN0cmlidXRpb24gTWVtYmVyUSBNZW1vcnlDb25zdHJhaW5lZCBNZW1vcnlJblVzZSBNZW51IE1lbnVBcHBlYXJhbmNlIE1lbnVDb21tYW5kS2V5IE1lbnVFdmFsdWF0b3IgTWVudUl0ZW0gTWVudVBhY2tldCBNZW51U29ydGluZ1ZhbHVlIE1lbnVTdHlsZSBNZW51VmlldyBNZXJnZURpZmZlcmVuY2VzIE1lc2ggTWVzaEZ1bmN0aW9ucyBNZXNoUmFuZ2UgTWVzaFNoYWRpbmcgTWVzaFN0eWxlIE1lc3NhZ2UgTWVzc2FnZURpYWxvZyBNZXNzYWdlTGlzdCBNZXNzYWdlTmFtZSBNZXNzYWdlT3B0aW9ucyBNZXNzYWdlUGFja2V0IE1lc3NhZ2VzIE1lc3NhZ2VzTm90ZWJvb2sgTWV0YUNoYXJhY3RlcnMgTWV0YUluZm9ybWF0aW9uIE1ldGhvZCBNZXRob2RPcHRpb25zIE1leGljYW5IYXRXYXZlbGV0IE1leWVyV2F2ZWxldCBNaW4gTWluRGV0ZWN0IE1pbkZpbHRlciBNaW5pbWFsUG9seW5vbWlhbCBNaW5pbWFsU3RhdGVTcGFjZU1vZGVsIE1pbmltaXplIE1pbm9ycyBNaW5SZWN1cnNpb24gTWluU2l6ZSBNaW5TdGFibGVEaXN0cmlidXRpb24gTWludXMgTWludXNQbHVzIE1pblZhbHVlIE1pc3NpbmcgTWlzc2luZ0RhdGFNZXRob2QgTWl0dGFnTGVmZmxlckUgTWl4ZWRSYWRpeCBNaXhlZFJhZGl4UXVhbnRpdHkgTWl4dHVyZURpc3RyaWJ1dGlvbiBNb2QgTW9kYWwgTW9kZSBNb2R1bGFyIE1vZHVsYXJMYW1iZGEgTW9kdWxlIE1vZHVsdXMgTW9lYml1c011IE1vbWVudCBNb21lbnRhcnkgTW9tZW50Q29udmVydCBNb21lbnRFdmFsdWF0ZSBNb21lbnRHZW5lcmF0aW5nRnVuY3Rpb24gTW9uZGF5IE1vbml0b3IgTW9ub21pYWxMaXN0IE1vbm9taWFsT3JkZXIgTW9uc3Rlckdyb3VwTSBNb3JsZXRXYXZlbGV0IE1vcnBob2xvZ2ljYWxCaW5hcml6ZSBNb3JwaG9sb2dpY2FsQnJhbmNoUG9pbnRzIE1vcnBob2xvZ2ljYWxDb21wb25lbnRzIE1vcnBob2xvZ2ljYWxFdWxlck51bWJlciBNb3JwaG9sb2dpY2FsR3JhcGggTW9ycGhvbG9naWNhbFBlcmltZXRlciBNb3JwaG9sb2dpY2FsVHJhbnNmb3JtIE1vc3QgTW91c2VBbm5vdGF0aW9uIE1vdXNlQXBwZWFyYW5jZSBNb3VzZUFwcGVhcmFuY2VUYWcgTW91c2VCdXR0b25zIE1vdXNlb3ZlciBNb3VzZVBvaW50ZXJOb3RlIE1vdXNlUG9zaXRpb24gTW92aW5nQXZlcmFnZSBNb3ZpbmdNZWRpYW4gTW95YWxEaXN0cmlidXRpb24gTXVsdGllZGdlU3R5bGUgTXVsdGlsYXVuY2hXYXJuaW5nIE11bHRpTGV0dGVySXRhbGljcyBNdWx0aUxldHRlclN0eWxlIE11bHRpbGluZUZ1bmN0aW9uIE11bHRpbm9taWFsIE11bHRpbm9taWFsRGlzdHJpYnV0aW9uIE11bHRpbm9ybWFsRGlzdHJpYnV0aW9uIE11bHRpcGxpY2F0aXZlT3JkZXIgTXVsdGlwbGljaXR5IE11bHRpc2VsZWN0aW9uIE11bHRpdmFyaWF0ZUh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIE11bHRpdmFyaWF0ZVBvaXNzb25EaXN0cmlidXRpb24gTXVsdGl2YXJpYXRlVERpc3RyaWJ1dGlvbiBOIE5ha2FnYW1pRGlzdHJpYnV0aW9uIE5hbWVRIE5hbWVzIE5hbWVzcGFjZUJveCBOYW5kIE5BcmdNYXggTkFyZ01pbiBOQmVybm91bGxpQiBOQ2FjaGUgTkRTb2x2ZSBORFNvbHZlVmFsdWUgTmVhcmVzdCBOZWFyZXN0RnVuY3Rpb24gTmVlZEN1cnJlbnRGcm9udEVuZFBhY2thZ2VQYWNrZXQgTmVlZEN1cnJlbnRGcm9udEVuZFN5bWJvbHNQYWNrZXQgTmVlZGxlbWFuV3Vuc2NoU2ltaWxhcml0eSBOZWVkcyBOZWdhdGl2ZSBOZWdhdGl2ZUJpbm9taWFsRGlzdHJpYnV0aW9uIE5lZ2F0aXZlTXVsdGlub21pYWxEaXN0cmlidXRpb24gTmVpZ2hib3Job29kR3JhcGggTmVzdCBOZXN0ZWRHcmVhdGVyR3JlYXRlciBOZXN0ZWRMZXNzTGVzcyBOZXN0ZWRTY3JpcHRSdWxlcyBOZXN0TGlzdCBOZXN0V2hpbGUgTmVzdFdoaWxlTGlzdCBOZXZpbGxlVGhldGFDIE5ldmlsbGVUaGV0YUQgTmV2aWxsZVRoZXRhTiBOZXZpbGxlVGhldGFTIE5ld1ByaW1pdGl2ZVN0eWxlIE5FeHBlY3RhdGlvbiBOZXh0IE5leHRQcmltZSBOSG9sZEFsbCBOSG9sZEZpcnN0IE5Ib2xkUmVzdCBOaWNob2xzR3JpZExpbmVzIE5pY2hvbHNQbG90IE5JbnRlZ3JhdGUgTk1heGltaXplIE5NYXhWYWx1ZSBOTWluaW1pemUgTk1pblZhbHVlIE5vbWluYWxWYXJpYWJsZXMgTm9uQXNzb2NpYXRpdmUgTm9uY2VudHJhbEJldGFEaXN0cmlidXRpb24gTm9uY2VudHJhbENoaVNxdWFyZURpc3RyaWJ1dGlvbiBOb25jZW50cmFsRlJhdGlvRGlzdHJpYnV0aW9uIE5vbmNlbnRyYWxTdHVkZW50VERpc3RyaWJ1dGlvbiBOb25Db21tdXRhdGl2ZU11bHRpcGx5IE5vbkNvbnN0YW50cyBOb25lIE5vbmxpbmVhck1vZGVsRml0IE5vbmxvY2FsTWVhbnNGaWx0ZXIgTm9uTmVnYXRpdmUgTm9uUG9zaXRpdmUgTm9yIE5vcmx1bmRCIE5vcm0gTm9ybWFsIE5vcm1hbERpc3RyaWJ1dGlvbiBOb3JtYWxHcm91cGluZyBOb3JtYWxpemUgTm9ybWFsaXplZFNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZSBOb3JtYWxzRnVuY3Rpb24gTm9ybUZ1bmN0aW9uIE5vdCBOb3RDb25ncnVlbnQgTm90Q3VwQ2FwIE5vdERvdWJsZVZlcnRpY2FsQmFyIE5vdGVib29rIE5vdGVib29rQXBwbHkgTm90ZWJvb2tBdXRvU2F2ZSBOb3RlYm9va0Nsb3NlIE5vdGVib29rQ29udmVydFNldHRpbmdzIE5vdGVib29rQ3JlYXRlIE5vdGVib29rQ3JlYXRlUmV0dXJuT2JqZWN0IE5vdGVib29rRGVmYXVsdCBOb3RlYm9va0RlbGV0ZSBOb3RlYm9va0RpcmVjdG9yeSBOb3RlYm9va0R5bmFtaWNFeHByZXNzaW9uIE5vdGVib29rRXZhbHVhdGUgTm90ZWJvb2tFdmVudEFjdGlvbnMgTm90ZWJvb2tGaWxlTmFtZSBOb3RlYm9va0ZpbmQgTm90ZWJvb2tGaW5kUmV0dXJuT2JqZWN0IE5vdGVib29rR2V0IE5vdGVib29rR2V0TGF5b3V0SW5mb3JtYXRpb25QYWNrZXQgTm90ZWJvb2tHZXRNaXNzcGVsbGluZ3NQYWNrZXQgTm90ZWJvb2tJbmZvcm1hdGlvbiBOb3RlYm9va0ludGVyZmFjZU9iamVjdCBOb3RlYm9va0xvY2F0ZSBOb3RlYm9va09iamVjdCBOb3RlYm9va09wZW4gTm90ZWJvb2tPcGVuUmV0dXJuT2JqZWN0IE5vdGVib29rUGF0aCBOb3RlYm9va1ByaW50IE5vdGVib29rUHV0IE5vdGVib29rUHV0UmV0dXJuT2JqZWN0IE5vdGVib29rUmVhZCBOb3RlYm9va1Jlc2V0R2VuZXJhdGVkQ2VsbHMgTm90ZWJvb2tzIE5vdGVib29rU2F2ZSBOb3RlYm9va1NhdmVBcyBOb3RlYm9va1NlbGVjdGlvbiBOb3RlYm9va1NldHVwTGF5b3V0SW5mb3JtYXRpb25QYWNrZXQgTm90ZWJvb2tzTWVudSBOb3RlYm9va1dyaXRlIE5vdEVsZW1lbnQgTm90RXF1YWxUaWxkZSBOb3RFeGlzdHMgTm90R3JlYXRlciBOb3RHcmVhdGVyRXF1YWwgTm90R3JlYXRlckZ1bGxFcXVhbCBOb3RHcmVhdGVyR3JlYXRlciBOb3RHcmVhdGVyTGVzcyBOb3RHcmVhdGVyU2xhbnRFcXVhbCBOb3RHcmVhdGVyVGlsZGUgTm90SHVtcERvd25IdW1wIE5vdEh1bXBFcXVhbCBOb3RMZWZ0VHJpYW5nbGUgTm90TGVmdFRyaWFuZ2xlQmFyIE5vdExlZnRUcmlhbmdsZUVxdWFsIE5vdExlc3MgTm90TGVzc0VxdWFsIE5vdExlc3NGdWxsRXF1YWwgTm90TGVzc0dyZWF0ZXIgTm90TGVzc0xlc3MgTm90TGVzc1NsYW50RXF1YWwgTm90TGVzc1RpbGRlIE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyIE5vdE5lc3RlZExlc3NMZXNzIE5vdFByZWNlZGVzIE5vdFByZWNlZGVzRXF1YWwgTm90UHJlY2VkZXNTbGFudEVxdWFsIE5vdFByZWNlZGVzVGlsZGUgTm90UmV2ZXJzZUVsZW1lbnQgTm90UmlnaHRUcmlhbmdsZSBOb3RSaWdodFRyaWFuZ2xlQmFyIE5vdFJpZ2h0VHJpYW5nbGVFcXVhbCBOb3RTcXVhcmVTdWJzZXQgTm90U3F1YXJlU3Vic2V0RXF1YWwgTm90U3F1YXJlU3VwZXJzZXQgTm90U3F1YXJlU3VwZXJzZXRFcXVhbCBOb3RTdWJzZXQgTm90U3Vic2V0RXF1YWwgTm90U3VjY2VlZHMgTm90U3VjY2VlZHNFcXVhbCBOb3RTdWNjZWVkc1NsYW50RXF1YWwgTm90U3VjY2VlZHNUaWxkZSBOb3RTdXBlcnNldCBOb3RTdXBlcnNldEVxdWFsIE5vdFRpbGRlIE5vdFRpbGRlRXF1YWwgTm90VGlsZGVGdWxsRXF1YWwgTm90VGlsZGVUaWxkZSBOb3RWZXJ0aWNhbEJhciBOUHJvYmFiaWxpdHkgTlByb2R1Y3QgTlByb2R1Y3RGYWN0b3JzIE5Sb290cyBOU29sdmUgTlN1bSBOU3VtVGVybXMgTnVsbCBOdWxsUmVjb3JkcyBOdWxsU3BhY2UgTnVsbFdvcmRzIE51bWJlciBOdW1iZXJGaWVsZENsYXNzTnVtYmVyIE51bWJlckZpZWxkRGlzY3JpbWluYW50IE51bWJlckZpZWxkRnVuZGFtZW50YWxVbml0cyBOdW1iZXJGaWVsZEludGVncmFsQmFzaXMgTnVtYmVyRmllbGROb3JtUmVwcmVzZW50YXRpdmVzIE51bWJlckZpZWxkUmVndWxhdG9yIE51bWJlckZpZWxkUm9vdHNPZlVuaXR5IE51bWJlckZpZWxkU2lnbmF0dXJlIE51bWJlckZvcm0gTnVtYmVyRm9ybWF0IE51bWJlck1hcmtzIE51bWJlck11bHRpcGxpZXIgTnVtYmVyUGFkZGluZyBOdW1iZXJQb2ludCBOdW1iZXJRIE51bWJlclNlcGFyYXRvciBOdW1iZXJTaWducyBOdW1iZXJTdHJpbmcgTnVtZXJhdG9yIE51bWVyaWNGdW5jdGlvbiBOdW1lcmljUSBOdXR0YWxsV2luZG93IE5WYWx1ZXMgTnlxdWlzdEdyaWRMaW5lcyBOeXF1aXN0UGxvdCBPIE9ic2VydmFiaWxpdHlHcmFtaWFuIE9ic2VydmFiaWxpdHlNYXRyaXggT2JzZXJ2YWJsZURlY29tcG9zaXRpb24gT2JzZXJ2YWJsZU1vZGVsUSBPZGRRIE9mZiBPZmZzZXQgT0xFRGF0YSBPbiBPTmFuR3JvdXBPTiBPbmVJZGVudGl0eSBPcGFjaXR5IE9wZW4gT3BlbkFwcGVuZCBPcGVuZXIgT3BlbmVyQm94IE9wZW5lckJveE9wdGlvbnMgT3BlbmVyVmlldyBPcGVuRnVuY3Rpb25JbnNwZWN0b3JQYWNrZXQgT3BlbmluZyBPcGVuUmVhZCBPcGVuU3BlY2lhbE9wdGlvbnMgT3BlblRlbXBvcmFyeSBPcGVuV3JpdGUgT3BlcmF0ZSBPcGVyYXRpbmdTeXN0ZW0gT3B0aW11bUZsb3dEYXRhIE9wdGlvbmFsIE9wdGlvbkluc3BlY3RvclNldHRpbmdzIE9wdGlvblEgT3B0aW9ucyBPcHRpb25zUGFja2V0IE9wdGlvbnNQYXR0ZXJuIE9wdGlvblZhbHVlIE9wdGlvblZhbHVlQm94IE9wdGlvblZhbHVlQm94T3B0aW9ucyBPciBPcmFuZ2UgT3JkZXIgT3JkZXJEaXN0cmlidXRpb24gT3JkZXJlZFEgT3JkZXJpbmcgT3JkZXJsZXNzIE9ybnN0ZWluVWhsZW5iZWNrUHJvY2VzcyBPcnRob2dvbmFsaXplIE91dCBPdXRlciBPdXRwdXRBdXRvT3ZlcndyaXRlIE91dHB1dENvbnRyb2xsYWJpbGl0eU1hdHJpeCBPdXRwdXRDb250cm9sbGFibGVNb2RlbFEgT3V0cHV0Rm9ybSBPdXRwdXRGb3JtRGF0YSBPdXRwdXRHcm91cGluZyBPdXRwdXRNYXRoRWRpdEV4cHJlc3Npb24gT3V0cHV0TmFtZVBhY2tldCBPdXRwdXRSZXNwb25zZSBPdXRwdXRTaXplTGltaXQgT3V0cHV0U3RyZWFtIE92ZXIgT3ZlckJhciBPdmVyRG90IE92ZXJmbG93IE92ZXJIYXQgT3ZlcmxhcHMgT3ZlcmxheSBPdmVybGF5Qm94IE92ZXJsYXlCb3hPcHRpb25zIE92ZXJzY3JpcHQgT3ZlcnNjcmlwdEJveCBPdmVyc2NyaXB0Qm94T3B0aW9ucyBPdmVyVGlsZGUgT3ZlclZlY3RvciBPd2VuVCBPd25WYWx1ZXMgUGFja2luZ01ldGhvZCBQYWRkZWRGb3JtIFBhZGRpbmcgUGFkZUFwcHJveGltYW50IFBhZExlZnQgUGFkUmlnaHQgUGFnZUJyZWFrQWJvdmUgUGFnZUJyZWFrQmVsb3cgUGFnZUJyZWFrV2l0aGluIFBhZ2VGb290ZXJMaW5lcyBQYWdlRm9vdGVycyBQYWdlSGVhZGVyTGluZXMgUGFnZUhlYWRlcnMgUGFnZUhlaWdodCBQYWdlUmFua0NlbnRyYWxpdHkgUGFnZVdpZHRoIFBhaXJlZEJhckNoYXJ0IFBhaXJlZEhpc3RvZ3JhbSBQYWlyZWRTbW9vdGhIaXN0b2dyYW0gUGFpcmVkVFRlc3QgUGFpcmVkWlRlc3QgUGFsZXR0ZU5vdGVib29rIFBhbGV0dGVQYXRoIFBhbmUgUGFuZUJveCBQYW5lQm94T3B0aW9ucyBQYW5lbCBQYW5lbEJveCBQYW5lbEJveE9wdGlvbnMgUGFuZWxlZCBQYW5lU2VsZWN0b3IgUGFuZVNlbGVjdG9yQm94IFBhbmVTZWxlY3RvckJveE9wdGlvbnMgUGFwZXJXaWR0aCBQYXJhYm9saWNDeWxpbmRlckQgUGFyYWdyYXBoSW5kZW50IFBhcmFncmFwaFNwYWNpbmcgUGFyYWxsZWxBcnJheSBQYXJhbGxlbENvbWJpbmUgUGFyYWxsZWxEbyBQYXJhbGxlbEV2YWx1YXRlIFBhcmFsbGVsaXphdGlvbiBQYXJhbGxlbGl6ZSBQYXJhbGxlbE1hcCBQYXJhbGxlbE5lZWRzIFBhcmFsbGVsUHJvZHVjdCBQYXJhbGxlbFN1Ym1pdCBQYXJhbGxlbFN1bSBQYXJhbGxlbFRhYmxlIFBhcmFsbGVsVHJ5IFBhcmFtZXRlciBQYXJhbWV0ZXJFc3RpbWF0b3IgUGFyYW1ldGVyTWl4dHVyZURpc3RyaWJ1dGlvbiBQYXJhbWV0ZXJWYXJpYWJsZXMgUGFyYW1ldHJpY0Z1bmN0aW9uIFBhcmFtZXRyaWNORFNvbHZlIFBhcmFtZXRyaWNORFNvbHZlVmFsdWUgUGFyYW1ldHJpY1Bsb3QgUGFyYW1ldHJpY1Bsb3QzRCBQYXJlbnRDb25uZWN0IFBhcmVudERpcmVjdG9yeSBQYXJlbnRGb3JtIFBhcmVudGhlc2l6ZSBQYXJlbnRMaXN0IFBhcmV0b0Rpc3RyaWJ1dGlvbiBQYXJ0IFBhcnRpYWxDb3JyZWxhdGlvbkZ1bmN0aW9uIFBhcnRpYWxEIFBhcnRpY2xlRGF0YSBQYXJ0aXRpb24gUGFydGl0aW9uc1AgUGFydGl0aW9uc1EgUGFyemVuV2luZG93IFBhc2NhbERpc3RyaWJ1dGlvbiBQYXNzRXZlbnRzRG93biBQYXNzRXZlbnRzVXAgUGFzdGUgUGFzdGVCb3hGb3JtSW5saW5lQ2VsbHMgUGFzdGVCdXR0b24gUGF0aCBQYXRoR3JhcGggUGF0aEdyYXBoUSBQYXR0ZXJuIFBhdHRlcm5TZXF1ZW5jZSBQYXR0ZXJuVGVzdCBQYXVsaU1hdHJpeCBQYXVsV2F2ZWxldCBQYXVzZSBQYXVzZWRUaW1lIFBERiBQZWFyc29uQ2hpU3F1YXJlVGVzdCBQZWFyc29uQ29ycmVsYXRpb25UZXN0IFBlYXJzb25EaXN0cmlidXRpb24gUGVyZm9ybWFuY2VHb2FsIFBlcmlvZGljSW50ZXJwb2xhdGlvbiBQZXJpb2RvZ3JhbSBQZXJpb2RvZ3JhbUFycmF5IFBlcm11dGF0aW9uQ3ljbGVzIFBlcm11dGF0aW9uQ3ljbGVzUSBQZXJtdXRhdGlvbkdyb3VwIFBlcm11dGF0aW9uTGVuZ3RoIFBlcm11dGF0aW9uTGlzdCBQZXJtdXRhdGlvbkxpc3RRIFBlcm11dGF0aW9uTWF4IFBlcm11dGF0aW9uTWluIFBlcm11dGF0aW9uT3JkZXIgUGVybXV0YXRpb25Qb3dlciBQZXJtdXRhdGlvblByb2R1Y3QgUGVybXV0YXRpb25SZXBsYWNlIFBlcm11dGF0aW9ucyBQZXJtdXRhdGlvblN1cHBvcnQgUGVybXV0ZSBQZXJvbmFNYWxpa0ZpbHRlciBQZXJwZW5kaWN1bGFyIFBFUlREaXN0cmlidXRpb24gUGV0ZXJzZW5HcmFwaCBQaGFzZU1hcmdpbnMgUGkgUGljayBQSUREYXRhIFBJRERlcml2YXRpdmVGaWx0ZXIgUElERmVlZGZvcndhcmQgUElEVHVuZSBQaWVjZXdpc2UgUGllY2V3aXNlRXhwYW5kIFBpZUNoYXJ0IFBpZUNoYXJ0M0QgUGlsbGFpVHJhY2UgUGlsbGFpVHJhY2VUZXN0IFBpbmsgUGl2b3RpbmcgUGl4ZWxDb25zdHJhaW5lZCBQaXhlbFZhbHVlIFBpeGVsVmFsdWVQb3NpdGlvbnMgUGxhY2VkIFBsYWNlaG9sZGVyIFBsYWNlaG9sZGVyUmVwbGFjZSBQbGFpbiBQbGFuYXJHcmFwaFEgUGxheSBQbGF5UmFuZ2UgUGxvdCBQbG90M0QgUGxvdDNNYXRyaXggUGxvdERpdmlzaW9uIFBsb3RKb2luZWQgUGxvdExhYmVsIFBsb3RMYXlvdXQgUGxvdExlZ2VuZHMgUGxvdE1hcmtlcnMgUGxvdFBvaW50cyBQbG90UmFuZ2UgUGxvdFJhbmdlQ2xpcHBpbmcgUGxvdFJhbmdlUGFkZGluZyBQbG90UmVnaW9uIFBsb3RTdHlsZSBQbHVzIFBsdXNNaW51cyBQb2NoaGFtbWVyIFBvZFN0YXRlcyBQb2RXaWR0aCBQb2ludCBQb2ludDNEQm94IFBvaW50Qm94IFBvaW50RmlndXJlQ2hhcnQgUG9pbnRGb3JtIFBvaW50TGVnZW5kIFBvaW50U2l6ZSBQb2lzc29uQ29uc3VsRGlzdHJpYnV0aW9uIFBvaXNzb25EaXN0cmlidXRpb24gUG9pc3NvblByb2Nlc3MgUG9pc3NvbldpbmRvdyBQb2xhckF4ZXMgUG9sYXJBeGVzT3JpZ2luIFBvbGFyR3JpZExpbmVzIFBvbGFyUGxvdCBQb2xhclRpY2tzIFBvbGVaZXJvTWFya2VycyBQb2x5YUFlcHBsaURpc3RyaWJ1dGlvbiBQb2x5R2FtbWEgUG9seWdvbiBQb2x5Z29uM0RCb3ggUG9seWdvbjNEQm94T3B0aW9ucyBQb2x5Z29uQm94IFBvbHlnb25Cb3hPcHRpb25zIFBvbHlnb25Ib2xlU2NhbGUgUG9seWdvbkludGVyc2VjdGlvbnMgUG9seWdvblNjYWxlIFBvbHloZWRyb25EYXRhIFBvbHlMb2cgUG9seW5vbWlhbEV4dGVuZGVkR0NEIFBvbHlub21pYWxGb3JtIFBvbHlub21pYWxHQ0QgUG9seW5vbWlhbExDTSBQb2x5bm9taWFsTW9kIFBvbHlub21pYWxRIFBvbHlub21pYWxRdW90aWVudCBQb2x5bm9taWFsUXVvdGllbnRSZW1haW5kZXIgUG9seW5vbWlhbFJlZHVjZSBQb2x5bm9taWFsUmVtYWluZGVyIFBvbHlub21pYWxzIFBvcHVwTWVudSBQb3B1cE1lbnVCb3ggUG9wdXBNZW51Qm94T3B0aW9ucyBQb3B1cFZpZXcgUG9wdXBXaW5kb3cgUG9zaXRpb24gUG9zaXRpdmUgUG9zaXRpdmVEZWZpbml0ZU1hdHJpeFEgUG9zc2libGVaZXJvUSBQb3N0Zml4IFBvc3RTY3JpcHQgUG93ZXIgUG93ZXJEaXN0cmlidXRpb24gUG93ZXJFeHBhbmQgUG93ZXJNb2QgUG93ZXJNb2RMaXN0IFBvd2VyU3BlY3RyYWxEZW5zaXR5IFBvd2Vyc1JlcHJlc2VudGF0aW9ucyBQb3dlclN5bW1ldHJpY1BvbHlub21pYWwgUHJlY2VkZW5jZSBQcmVjZWRlbmNlRm9ybSBQcmVjZWRlcyBQcmVjZWRlc0VxdWFsIFByZWNlZGVzU2xhbnRFcXVhbCBQcmVjZWRlc1RpbGRlIFByZWNpc2lvbiBQcmVjaXNpb25Hb2FsIFByZURlY3JlbWVudCBQcmVkaWN0aW9uUm9vdCBQcmVlbXB0UHJvdGVjdCBQcmVmZXJlbmNlc1BhdGggUHJlZml4IFByZUluY3JlbWVudCBQcmVwZW5kIFByZXBlbmRUbyBQcmVzZXJ2ZUltYWdlT3B0aW9ucyBQcmV2aW91cyBQcmljZUdyYXBoRGlzdHJpYnV0aW9uIFByaW1hcnlQbGFjZWhvbGRlciBQcmltZSBQcmltZU51IFByaW1lT21lZ2EgUHJpbWVQaSBQcmltZVBvd2VyUSBQcmltZVEgUHJpbWVzIFByaW1lWmV0YVAgUHJpbWl0aXZlUm9vdCBQcmluY2lwYWxDb21wb25lbnRzIFByaW5jaXBhbFZhbHVlIFByaW50IFByaW50QWN0aW9uIFByaW50Rm9ybSBQcmludGluZ0NvcGllcyBQcmludGluZ09wdGlvbnMgUHJpbnRpbmdQYWdlUmFuZ2UgUHJpbnRpbmdTdGFydGluZ1BhZ2VOdW1iZXIgUHJpbnRpbmdTdHlsZUVudmlyb25tZW50IFByaW50UHJlY2lzaW9uIFByaW50VGVtcG9yYXJ5IFByaXNtIFByaXNtQm94IFByaXNtQm94T3B0aW9ucyBQcml2YXRlQ2VsbE9wdGlvbnMgUHJpdmF0ZUV2YWx1YXRpb25PcHRpb25zIFByaXZhdGVGb250T3B0aW9ucyBQcml2YXRlRnJvbnRFbmRPcHRpb25zIFByaXZhdGVOb3RlYm9va09wdGlvbnMgUHJpdmF0ZVBhdGhzIFByb2JhYmlsaXR5IFByb2JhYmlsaXR5RGlzdHJpYnV0aW9uIFByb2JhYmlsaXR5UGxvdCBQcm9iYWJpbGl0eVByIFByb2JhYmlsaXR5U2NhbGVQbG90IFByb2JpdE1vZGVsRml0IFByb2Nlc3NFc3RpbWF0b3IgUHJvY2Vzc1BhcmFtZXRlckFzc3VtcHRpb25zIFByb2Nlc3NQYXJhbWV0ZXJRIFByb2Nlc3NTdGF0ZURvbWFpbiBQcm9jZXNzVGltZURvbWFpbiBQcm9kdWN0IFByb2R1Y3REaXN0cmlidXRpb24gUHJvZHVjdExvZyBQcm9ncmVzc0luZGljYXRvciBQcm9ncmVzc0luZGljYXRvckJveCBQcm9ncmVzc0luZGljYXRvckJveE9wdGlvbnMgUHJvamVjdGlvbiBQcm9sb2cgUHJvbXB0Rm9ybSBQcm9wZXJ0aWVzIFByb3BlcnR5IFByb3BlcnR5TGlzdCBQcm9wZXJ0eVZhbHVlIFByb3BvcnRpb24gUHJvcG9ydGlvbmFsIFByb3RlY3QgUHJvdGVjdGVkIFByb3RlaW5EYXRhIFBydW5pbmcgUHNldWRvSW52ZXJzZSBQdXJwbGUgUHV0IFB1dEFwcGVuZCBQeXJhbWlkIFB5cmFtaWRCb3ggUHlyYW1pZEJveE9wdGlvbnMgUUJpbm9taWFsIFFGYWN0b3JpYWwgUUdhbW1hIFFIeXBlcmdlb21ldHJpY1BGUSBRUG9jaGhhbW1lciBRUG9seUdhbW1hIFFSRGVjb21wb3NpdGlvbiBRdWFkcmF0aWNJcnJhdGlvbmFsUSBRdWFudGlsZSBRdWFudGlsZVBsb3QgUXVhbnRpdHkgUXVhbnRpdHlGb3JtIFF1YW50aXR5TWFnbml0dWRlIFF1YW50aXR5USBRdWFudGl0eVVuaXQgUXVhcnRpY3MgUXVhcnRpbGVEZXZpYXRpb24gUXVhcnRpbGVzIFF1YXJ0aWxlU2tld25lc3MgUXVldWVpbmdOZXR3b3JrUHJvY2VzcyBRdWV1ZWluZ1Byb2Nlc3MgUXVldWVQcm9wZXJ0aWVzIFF1aWV0IFF1aXQgUXVvdGllbnQgUXVvdGllbnRSZW1haW5kZXIgUmFkaWFsaXR5Q2VudHJhbGl0eSBSYWRpY2FsQm94IFJhZGljYWxCb3hPcHRpb25zIFJhZGlvQnV0dG9uIFJhZGlvQnV0dG9uQmFyIFJhZGlvQnV0dG9uQm94IFJhZGlvQnV0dG9uQm94T3B0aW9ucyBSYWRvbiBSYW1hbnVqYW5UYXUgUmFtYW51amFuVGF1TCBSYW1hbnVqYW5UYXVUaGV0YSBSYW1hbnVqYW5UYXVaIFJhbmRvbSBSYW5kb21DaG9pY2UgUmFuZG9tQ29tcGxleCBSYW5kb21GdW5jdGlvbiBSYW5kb21HcmFwaCBSYW5kb21JbWFnZSBSYW5kb21JbnRlZ2VyIFJhbmRvbVBlcm11dGF0aW9uIFJhbmRvbVByaW1lIFJhbmRvbVJlYWwgUmFuZG9tU2FtcGxlIFJhbmRvbVNlZWQgUmFuZG9tVmFyaWF0ZSBSYW5kb21XYWxrUHJvY2VzcyBSYW5nZSBSYW5nZUZpbHRlciBSYW5nZVNwZWNpZmljYXRpb24gUmFua2VkTWF4IFJhbmtlZE1pbiBSYXN0ZXIgUmFzdGVyM0QgUmFzdGVyM0RCb3ggUmFzdGVyM0RCb3hPcHRpb25zIFJhc3RlckFycmF5IFJhc3RlckJveCBSYXN0ZXJCb3hPcHRpb25zIFJhc3Rlcml6ZSBSYXN0ZXJTaXplIFJhdGlvbmFsIFJhdGlvbmFsRnVuY3Rpb25zIFJhdGlvbmFsaXplIFJhdGlvbmFscyBSYXRpb3MgUmF3IFJhd0FycmF5IFJhd0JveGVzIFJhd0RhdGEgUmF3TWVkaXVtIFJheWxlaWdoRGlzdHJpYnV0aW9uIFJlIFJlYWQgUmVhZExpc3QgUmVhZFByb3RlY3RlZCBSZWFsIFJlYWxCbG9ja0RpYWdvbmFsRm9ybSBSZWFsRGlnaXRzIFJlYWxFeHBvbmVudCBSZWFscyBSZWFwIFJlY29yZCBSZWNvcmRMaXN0cyBSZWNvcmRTZXBhcmF0b3JzIFJlY3RhbmdsZSBSZWN0YW5nbGVCb3ggUmVjdGFuZ2xlQm94T3B0aW9ucyBSZWN0YW5nbGVDaGFydCBSZWN0YW5nbGVDaGFydDNEIFJlY3VycmVuY2VGaWx0ZXIgUmVjdXJyZW5jZVRhYmxlIFJlY3VycmluZ0RpZ2l0c0Zvcm0gUmVkIFJlZHVjZSBSZWZCb3ggUmVmZXJlbmNlTGluZVN0eWxlIFJlZmVyZW5jZU1hcmtlcnMgUmVmZXJlbmNlTWFya2VyU3R5bGUgUmVmaW5lIFJlZmxlY3Rpb25NYXRyaXggUmVmbGVjdGlvblRyYW5zZm9ybSBSZWZyZXNoIFJlZnJlc2hSYXRlIFJlZ2lvbkJpbmFyaXplIFJlZ2lvbkZ1bmN0aW9uIFJlZ2lvblBsb3QgUmVnaW9uUGxvdDNEIFJlZ3VsYXJFeHByZXNzaW9uIFJlZ3VsYXJpemF0aW9uIFJlaW5zdGFsbCBSZWxlYXNlIFJlbGVhc2VIb2xkIFJlbGlhYmlsaXR5RGlzdHJpYnV0aW9uIFJlbGllZkltYWdlIFJlbGllZlBsb3QgUmVtb3ZlIFJlbW92ZUFscGhhQ2hhbm5lbCBSZW1vdmVBc3luY2hyb25vdXNUYXNrIFJlbW92ZWQgUmVtb3ZlSW5wdXRTdHJlYW1NZXRob2QgUmVtb3ZlT3V0cHV0U3RyZWFtTWV0aG9kIFJlbW92ZVByb3BlcnR5IFJlbW92ZVNjaGVkdWxlZFRhc2sgUmVuYW1lRGlyZWN0b3J5IFJlbmFtZUZpbGUgUmVuZGVyQWxsIFJlbmRlcmluZ09wdGlvbnMgUmVuZXdhbFByb2Nlc3MgUmVua29DaGFydCBSZXBlYXRlZCBSZXBlYXRlZE51bGwgUmVwZWF0ZWRTdHJpbmcgUmVwbGFjZSBSZXBsYWNlQWxsIFJlcGxhY2VIZWxkUGFydCBSZXBsYWNlSW1hZ2VWYWx1ZSBSZXBsYWNlTGlzdCBSZXBsYWNlUGFydCBSZXBsYWNlUGl4ZWxWYWx1ZSBSZXBsYWNlUmVwZWF0ZWQgUmVzYW1wbGluZyBSZXNjYWxlIFJlc2NhbGluZ1RyYW5zZm9ybSBSZXNldERpcmVjdG9yeSBSZXNldE1lbnVzUGFja2V0IFJlc2V0U2NoZWR1bGVkVGFzayBSZXNpZHVlIFJlc29sdmUgUmVzdCBSZXN1bHRhbnQgUmVzdW1lUGFja2V0IFJldHVybiBSZXR1cm5FeHByZXNzaW9uUGFja2V0IFJldHVybklucHV0Rm9ybVBhY2tldCBSZXR1cm5QYWNrZXQgUmV0dXJuVGV4dFBhY2tldCBSZXZlcnNlIFJldmVyc2VCaW9ydGhvZ29uYWxTcGxpbmVXYXZlbGV0IFJldmVyc2VFbGVtZW50IFJldmVyc2VFcXVpbGlicml1bSBSZXZlcnNlR3JhcGggUmV2ZXJzZVVwRXF1aWxpYnJpdW0gUmV2b2x1dGlvbkF4aXMgUmV2b2x1dGlvblBsb3QzRCBSR0JDb2xvciBSaWNjYXRpU29sdmUgUmljZURpc3RyaWJ1dGlvbiBSaWRnZUZpbHRlciBSaWVtYW5uUiBSaWVtYW5uU2llZ2VsVGhldGEgUmllbWFublNpZWdlbFogUmlmZmxlIFJpZ2h0IFJpZ2h0QXJyb3cgUmlnaHRBcnJvd0JhciBSaWdodEFycm93TGVmdEFycm93IFJpZ2h0Q29zZXRSZXByZXNlbnRhdGl2ZSBSaWdodERvd25UZWVWZWN0b3IgUmlnaHREb3duVmVjdG9yIFJpZ2h0RG93blZlY3RvckJhciBSaWdodFRlZSBSaWdodFRlZUFycm93IFJpZ2h0VGVlVmVjdG9yIFJpZ2h0VHJpYW5nbGUgUmlnaHRUcmlhbmdsZUJhciBSaWdodFRyaWFuZ2xlRXF1YWwgUmlnaHRVcERvd25WZWN0b3IgUmlnaHRVcFRlZVZlY3RvciBSaWdodFVwVmVjdG9yIFJpZ2h0VXBWZWN0b3JCYXIgUmlnaHRWZWN0b3IgUmlnaHRWZWN0b3JCYXIgUmlza0FjaGlldmVtZW50SW1wb3J0YW5jZSBSaXNrUmVkdWN0aW9uSW1wb3J0YW5jZSBSb2dlcnNUYW5pbW90b0Rpc3NpbWlsYXJpdHkgUm9vdCBSb290QXBwcm94aW1hbnQgUm9vdEludGVydmFscyBSb290TG9jdXNQbG90IFJvb3RNZWFuU3F1YXJlIFJvb3RPZlVuaXR5USBSb290UmVkdWNlIFJvb3RzIFJvb3RTdW0gUm90YXRlIFJvdGF0ZUxhYmVsIFJvdGF0ZUxlZnQgUm90YXRlUmlnaHQgUm90YXRpb25BY3Rpb24gUm90YXRpb25Cb3ggUm90YXRpb25Cb3hPcHRpb25zIFJvdGF0aW9uTWF0cml4IFJvdGF0aW9uVHJhbnNmb3JtIFJvdW5kIFJvdW5kSW1wbGllcyBSb3VuZGluZ1JhZGl1cyBSb3cgUm93QWxpZ25tZW50cyBSb3dCYWNrZ3JvdW5kcyBSb3dCb3ggUm93SGVpZ2h0cyBSb3dMaW5lcyBSb3dNaW5IZWlnaHQgUm93UmVkdWNlIFJvd3NFcXVhbCBSb3dTcGFjaW5ncyBSU29sdmUgUnVkdmFsaXNHcm91cFJ1IFJ1bGUgUnVsZUNvbmRpdGlvbiBSdWxlRGVsYXllZCBSdWxlRm9ybSBSdWxlclVuaXRzIFJ1biBSdW5TY2hlZHVsZWRUYXNrIFJ1blRocm91Z2ggUnVudGltZUF0dHJpYnV0ZXMgUnVudGltZU9wdGlvbnMgUnVzc2VsbFJhb0Rpc3NpbWlsYXJpdHkgU2FtZVEgU2FtZVRlc3QgU2FtcGxlRGVwdGggU2FtcGxlZFNvdW5kRnVuY3Rpb24gU2FtcGxlZFNvdW5kTGlzdCBTYW1wbGVSYXRlIFNhbXBsaW5nUGVyaW9kIFNBUklNQVByb2Nlc3MgU0FSTUFQcm9jZXNzIFNhdGlzZmlhYmlsaXR5Q291bnQgU2F0aXNmaWFiaWxpdHlJbnN0YW5jZXMgU2F0aXNmaWFibGVRIFNhdHVyZGF5IFNhdmUgU2F2ZWFibGUgU2F2ZUF1dG9EZWxldGUgU2F2ZURlZmluaXRpb25zIFNhd3Rvb3RoV2F2ZSBTY2FsZSBTY2FsZWQgU2NhbGVEaXZpc2lvbnMgU2NhbGVkTW91c2VQb3NpdGlvbiBTY2FsZU9yaWdpbiBTY2FsZVBhZGRpbmcgU2NhbGVSYW5nZXMgU2NhbGVSYW5nZVN0eWxlIFNjYWxpbmdGdW5jdGlvbnMgU2NhbGluZ01hdHJpeCBTY2FsaW5nVHJhbnNmb3JtIFNjYW4gU2NoZWR1bGVkVGFza0FjdGl2ZVEgU2NoZWR1bGVkVGFza0RhdGEgU2NoZWR1bGVkVGFza09iamVjdCBTY2hlZHVsZWRUYXNrcyBTY2h1ckRlY29tcG9zaXRpb24gU2NpZW50aWZpY0Zvcm0gU2NyZWVuUmVjdGFuZ2xlIFNjcmVlblN0eWxlRW52aXJvbm1lbnQgU2NyaXB0QmFzZWxpbmVTaGlmdHMgU2NyaXB0TGV2ZWwgU2NyaXB0TWluU2l6ZSBTY3JpcHRSdWxlcyBTY3JpcHRTaXplTXVsdGlwbGllcnMgU2Nyb2xsYmFycyBTY3JvbGxpbmdPcHRpb25zIFNjcm9sbFBvc2l0aW9uIFNlYyBTZWNoIFNlY2hEaXN0cmlidXRpb24gU2VjdGlvbkdyb3VwaW5nIFNlY3RvckNoYXJ0IFNlY3RvckNoYXJ0M0QgU2VjdG9yT3JpZ2luIFNlY3RvclNwYWNpbmcgU2VlZFJhbmRvbSBTZWxlY3QgU2VsZWN0YWJsZSBTZWxlY3RDb21wb25lbnRzIFNlbGVjdGVkQ2VsbHMgU2VsZWN0ZWROb3RlYm9vayBTZWxlY3Rpb24gU2VsZWN0aW9uQW5pbWF0ZSBTZWxlY3Rpb25DZWxsIFNlbGVjdGlvbkNlbGxDcmVhdGVDZWxsIFNlbGVjdGlvbkNlbGxEZWZhdWx0U3R5bGUgU2VsZWN0aW9uQ2VsbFBhcmVudFN0eWxlIFNlbGVjdGlvbkNyZWF0ZUNlbGwgU2VsZWN0aW9uRGVidWdnZXJUYWcgU2VsZWN0aW9uRHVwbGljYXRlQ2VsbCBTZWxlY3Rpb25FdmFsdWF0ZSBTZWxlY3Rpb25FdmFsdWF0ZUNyZWF0ZUNlbGwgU2VsZWN0aW9uTW92ZSBTZWxlY3Rpb25QbGFjZWhvbGRlciBTZWxlY3Rpb25TZXRTdHlsZSBTZWxlY3RXaXRoQ29udGVudHMgU2VsZkxvb3BzIFNlbGZMb29wU3R5bGUgU2VtaWFsZ2VicmFpY0NvbXBvbmVudEluc3RhbmNlcyBTZW5kTWFpbCBTZXF1ZW5jZSBTZXF1ZW5jZUFsaWdubWVudCBTZXF1ZW5jZUZvcm0gU2VxdWVuY2VIb2xkIFNlcXVlbmNlTGltaXQgU2VyaWVzIFNlcmllc0NvZWZmaWNpZW50IFNlcmllc0RhdGEgU2Vzc2lvblRpbWUgU2V0IFNldEFjY3VyYWN5IFNldEFscGhhQ2hhbm5lbCBTZXRBdHRyaWJ1dGVzIFNldGJhY2tzIFNldEJveEZvcm1OYW1lc1BhY2tldCBTZXREZWxheWVkIFNldERpcmVjdG9yeSBTZXRFbnZpcm9ubWVudCBTZXRFdmFsdWF0aW9uTm90ZWJvb2sgU2V0RmlsZURhdGUgU2V0RmlsZUxvYWRpbmdDb250ZXh0IFNldE5vdGVib29rU3RhdHVzTGluZSBTZXRPcHRpb25zIFNldE9wdGlvbnNQYWNrZXQgU2V0UHJlY2lzaW9uIFNldFByb3BlcnR5IFNldFNlbGVjdGVkTm90ZWJvb2sgU2V0U2hhcmVkRnVuY3Rpb24gU2V0U2hhcmVkVmFyaWFibGUgU2V0U3BlZWNoUGFyYW1ldGVyc1BhY2tldCBTZXRTdHJlYW1Qb3NpdGlvbiBTZXRTeXN0ZW1PcHRpb25zIFNldHRlciBTZXR0ZXJCYXIgU2V0dGVyQm94IFNldHRlckJveE9wdGlvbnMgU2V0dGluZyBTZXRWYWx1ZSBTaGFkaW5nIFNoYWxsb3cgU2hhbm5vbldhdmVsZXQgU2hhcGlyb1dpbGtUZXN0IFNoYXJlIFNoYXJwZW4gU2hlYXJpbmdNYXRyaXggU2hlYXJpbmdUcmFuc2Zvcm0gU2hlbkNhc3Rhbk1hdHJpeCBTaG9ydCBTaG9ydERvd25BcnJvdyBTaG9ydGVzdCBTaG9ydGVzdE1hdGNoIFNob3J0ZXN0UGF0aEZ1bmN0aW9uIFNob3J0TGVmdEFycm93IFNob3J0UmlnaHRBcnJvdyBTaG9ydFVwQXJyb3cgU2hvdyBTaG93QXV0b1N0eWxlcyBTaG93Q2VsbEJyYWNrZXQgU2hvd0NlbGxMYWJlbCBTaG93Q2VsbFRhZ3MgU2hvd0Nsb3NlZENlbGxBcmVhIFNob3dDb250ZW50cyBTaG93Q29udHJvbHMgU2hvd0N1cnNvclRyYWNrZXIgU2hvd0dyb3VwT3BlbkNsb3NlSWNvbiBTaG93R3JvdXBPcGVuZXIgU2hvd0ludmlzaWJsZUNoYXJhY3RlcnMgU2hvd1BhZ2VCcmVha3MgU2hvd1ByZWRpY3RpdmVJbnRlcmZhY2UgU2hvd1NlbGVjdGlvbiBTaG93U2hvcnRCb3hGb3JtIFNob3dTcGVjaWFsQ2hhcmFjdGVycyBTaG93U3RyaW5nQ2hhcmFjdGVycyBTaG93U3ludGF4U3R5bGVzIFNocmlua2luZ0RlbGF5IFNocmlua1dyYXBCb3VuZGluZ0JveCBTaWVnZWxUaGV0YSBTaWVnZWxUdWtleVRlc3QgU2lnbiBTaWduYXR1cmUgU2lnbmVkUmFua1Rlc3QgU2lnbmlmaWNhbmNlTGV2ZWwgU2lnblBhZGRpbmcgU2lnblRlc3QgU2ltaWxhcml0eVJ1bGVzIFNpbXBsZUdyYXBoIFNpbXBsZUdyYXBoUSBTaW1wbGlmeSBTaW4gU2luYyBTaW5naE1hZGRhbGFEaXN0cmlidXRpb24gU2luZ2xlRXZhbHVhdGlvbiBTaW5nbGVMZXR0ZXJJdGFsaWNzIFNpbmdsZUxldHRlclN0eWxlIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIFNpbmd1bGFyVmFsdWVMaXN0IFNpbmd1bGFyVmFsdWVQbG90IFNpbmd1bGFyVmFsdWVzIFNpbmggU2luaEludGVncmFsIFNpbkludGVncmFsIFNpeEpTeW1ib2wgU2tlbGV0b24gU2tlbGV0b25UcmFuc2Zvcm0gU2tlbGxhbURpc3RyaWJ1dGlvbiBTa2V3bmVzcyBTa2V3Tm9ybWFsRGlzdHJpYnV0aW9uIFNraXAgU2xpY2VEaXN0cmlidXRpb24gU2xpZGVyIFNsaWRlcjJEIFNsaWRlcjJEQm94IFNsaWRlcjJEQm94T3B0aW9ucyBTbGlkZXJCb3ggU2xpZGVyQm94T3B0aW9ucyBTbGlkZVZpZXcgU2xvdCBTbG90U2VxdWVuY2UgU21hbGwgU21hbGxDaXJjbGUgU21hbGxlciBTbWl0aERlbGF5Q29tcGVuc2F0b3IgU21pdGhXYXRlcm1hblNpbWlsYXJpdHkgU21vb3RoRGVuc2l0eUhpc3RvZ3JhbSBTbW9vdGhIaXN0b2dyYW0gU21vb3RoSGlzdG9ncmFtM0QgU21vb3RoS2VybmVsRGlzdHJpYnV0aW9uIFNvY2lhbE1lZGlhRGF0YSBTb2NrZXQgU29rYWxTbmVhdGhEaXNzaW1pbGFyaXR5IFNvbHZlIFNvbHZlQWx3YXlzIFNvbHZlRGVsYXllZCBTb3J0IFNvcnRCeSBTb3VuZCBTb3VuZEFuZEdyYXBoaWNzIFNvdW5kTm90ZSBTb3VuZFZvbHVtZSBTb3cgU3BhY2UgU3BhY2VGb3JtIFNwYWNlciBTcGFjaW5ncyBTcGFuIFNwYW5BZGp1c3RtZW50cyBTcGFuQ2hhcmFjdGVyUm91bmRpbmcgU3BhbkZyb21BYm92ZSBTcGFuRnJvbUJvdGggU3BhbkZyb21MZWZ0IFNwYW5MaW5lVGhpY2tuZXNzIFNwYW5NYXhTaXplIFNwYW5NaW5TaXplIFNwYW5uaW5nQ2hhcmFjdGVycyBTcGFuU3ltbWV0cmljIFNwYXJzZUFycmF5IFNwYXRpYWxHcmFwaERpc3RyaWJ1dGlvbiBTcGVhayBTcGVha1RleHRQYWNrZXQgU3BlYXJtYW5SYW5rVGVzdCBTcGVhcm1hblJobyBTcGVjdHJvZ3JhbSBTcGVjdHJvZ3JhbUFycmF5IFNwZWN1bGFyaXR5IFNwZWxsaW5nQ29ycmVjdGlvbiBTcGVsbGluZ0RpY3Rpb25hcmllcyBTcGVsbGluZ0RpY3Rpb25hcmllc1BhdGggU3BlbGxpbmdPcHRpb25zIFNwZWxsaW5nU3VnZ2VzdGlvbnNQYWNrZXQgU3BoZXJlIFNwaGVyZUJveCBTcGhlcmljYWxCZXNzZWxKIFNwaGVyaWNhbEJlc3NlbFkgU3BoZXJpY2FsSGFua2VsSDEgU3BoZXJpY2FsSGFua2VsSDIgU3BoZXJpY2FsSGFybW9uaWNZIFNwaGVyaWNhbFBsb3QzRCBTcGhlcmljYWxSZWdpb24gU3BoZXJvaWRhbEVpZ2VudmFsdWUgU3BoZXJvaWRhbEpvaW5pbmdGYWN0b3IgU3BoZXJvaWRhbFBTIFNwaGVyb2lkYWxQU1ByaW1lIFNwaGVyb2lkYWxRUyBTcGhlcm9pZGFsUVNQcmltZSBTcGhlcm9pZGFsUmFkaWFsRmFjdG9yIFNwaGVyb2lkYWxTMSBTcGhlcm9pZGFsUzFQcmltZSBTcGhlcm9pZGFsUzIgU3BoZXJvaWRhbFMyUHJpbWUgU3BsaWNlIFNwbGljZWREaXN0cmlidXRpb24gU3BsaW5lQ2xvc2VkIFNwbGluZURlZ3JlZSBTcGxpbmVLbm90cyBTcGxpbmVXZWlnaHRzIFNwbGl0IFNwbGl0QnkgU3Bva2VuU3RyaW5nIFNxcnQgU3FydEJveCBTcXJ0Qm94T3B0aW9ucyBTcXVhcmUgU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIFNxdWFyZUZyZWVRIFNxdWFyZUludGVyc2VjdGlvbiBTcXVhcmVzUiBTcXVhcmVTdWJzZXQgU3F1YXJlU3Vic2V0RXF1YWwgU3F1YXJlU3VwZXJzZXQgU3F1YXJlU3VwZXJzZXRFcXVhbCBTcXVhcmVVbmlvbiBTcXVhcmVXYXZlIFN0YWJpbGl0eU1hcmdpbnMgU3RhYmlsaXR5TWFyZ2luc1N0eWxlIFN0YWJsZURpc3RyaWJ1dGlvbiBTdGFjayBTdGFja0JlZ2luIFN0YWNrQ29tcGxldGUgU3RhY2tJbmhpYml0IFN0YW5kYXJkRGV2aWF0aW9uIFN0YW5kYXJkRGV2aWF0aW9uRmlsdGVyIFN0YW5kYXJkRm9ybSBTdGFuZGFyZGl6ZSBTdGFuZGJ5RGlzdHJpYnV0aW9uIFN0YXIgU3RhckdyYXBoIFN0YXJ0QXN5bmNocm9ub3VzVGFzayBTdGFydGluZ1N0ZXBTaXplIFN0YXJ0T2ZMaW5lIFN0YXJ0T2ZTdHJpbmcgU3RhcnRTY2hlZHVsZWRUYXNrIFN0YXJ0dXBTb3VuZCBTdGF0ZURpbWVuc2lvbnMgU3RhdGVGZWVkYmFja0dhaW5zIFN0YXRlT3V0cHV0RXN0aW1hdG9yIFN0YXRlUmVzcG9uc2UgU3RhdGVTcGFjZU1vZGVsIFN0YXRlU3BhY2VSZWFsaXphdGlvbiBTdGF0ZVNwYWNlVHJhbnNmb3JtIFN0YXRpb25hcnlEaXN0cmlidXRpb24gU3RhdGlvbmFyeVdhdmVsZXRQYWNrZXRUcmFuc2Zvcm0gU3RhdGlvbmFyeVdhdmVsZXRUcmFuc2Zvcm0gU3RhdHVzQXJlYSBTdGF0dXNDZW50cmFsaXR5IFN0ZXBNb25pdG9yIFN0aWVsdGplc0dhbW1hIFN0aXJsaW5nUzEgU3RpcmxpbmdTMiBTdG9wQXN5bmNocm9ub3VzVGFzayBTdG9wU2NoZWR1bGVkVGFzayBTdHJhdGFWYXJpYWJsZXMgU3RyYXRvbm92aWNoUHJvY2VzcyBTdHJlYW1Db2xvckZ1bmN0aW9uIFN0cmVhbUNvbG9yRnVuY3Rpb25TY2FsaW5nIFN0cmVhbURlbnNpdHlQbG90IFN0cmVhbVBsb3QgU3RyZWFtUG9pbnRzIFN0cmVhbVBvc2l0aW9uIFN0cmVhbXMgU3RyZWFtU2NhbGUgU3RyZWFtU3R5bGUgU3RyaW5nIFN0cmluZ0JyZWFrIFN0cmluZ0J5dGVDb3VudCBTdHJpbmdDYXNlcyBTdHJpbmdDb3VudCBTdHJpbmdEcm9wIFN0cmluZ0V4cHJlc3Npb24gU3RyaW5nRm9ybSBTdHJpbmdGb3JtYXQgU3RyaW5nRnJlZVEgU3RyaW5nSW5zZXJ0IFN0cmluZ0pvaW4gU3RyaW5nTGVuZ3RoIFN0cmluZ01hdGNoUSBTdHJpbmdQb3NpdGlvbiBTdHJpbmdRIFN0cmluZ1JlcGxhY2UgU3RyaW5nUmVwbGFjZUxpc3QgU3RyaW5nUmVwbGFjZVBhcnQgU3RyaW5nUmV2ZXJzZSBTdHJpbmdSb3RhdGVMZWZ0IFN0cmluZ1JvdGF0ZVJpZ2h0IFN0cmluZ1NrZWxldG9uIFN0cmluZ1NwbGl0IFN0cmluZ1Rha2UgU3RyaW5nVG9TdHJlYW0gU3RyaW5nVHJpbSBTdHJpcEJveGVzIFN0cmlwT25JbnB1dCBTdHJpcFdyYXBwZXJCb3hlcyBTdHJva2VGb3JtIFN0cnVjdHVyYWxJbXBvcnRhbmNlIFN0cnVjdHVyZWRBcnJheSBTdHJ1Y3R1cmVkU2VsZWN0aW9uIFN0cnV2ZUggU3RydXZlTCBTdHViIFN0dWRlbnRURGlzdHJpYnV0aW9uIFN0eWxlIFN0eWxlQm94IFN0eWxlQm94QXV0b0RlbGV0ZSBTdHlsZUJveE9wdGlvbnMgU3R5bGVEYXRhIFN0eWxlRGVmaW5pdGlvbnMgU3R5bGVGb3JtIFN0eWxlS2V5TWFwcGluZyBTdHlsZU1lbnVMaXN0aW5nIFN0eWxlTmFtZURpYWxvZ1NldHRpbmdzIFN0eWxlTmFtZXMgU3R5bGVQcmludCBTdHlsZVNoZWV0UGF0aCBTdWJmYWN0b3JpYWwgU3ViZ3JhcGggU3ViTWludXMgU3ViUGx1cyBTdWJyZXN1bHRhbnRQb2x5bm9taWFsUmVtYWluZGVycyBTdWJyZXN1bHRhbnRQb2x5bm9taWFscyBTdWJyZXN1bHRhbnRzIFN1YnNjcmlwdCBTdWJzY3JpcHRCb3ggU3Vic2NyaXB0Qm94T3B0aW9ucyBTdWJzY3JpcHRlZCBTdWJzZXQgU3Vic2V0RXF1YWwgU3Vic2V0cyBTdWJTdGFyIFN1YnN1cGVyc2NyaXB0IFN1YnN1cGVyc2NyaXB0Qm94IFN1YnN1cGVyc2NyaXB0Qm94T3B0aW9ucyBTdWJ0cmFjdCBTdWJ0cmFjdEZyb20gU3ViVmFsdWVzIFN1Y2NlZWRzIFN1Y2NlZWRzRXF1YWwgU3VjY2VlZHNTbGFudEVxdWFsIFN1Y2NlZWRzVGlsZGUgU3VjaFRoYXQgU3VtIFN1bUNvbnZlcmdlbmNlIFN1bmRheSBTdXBlckRhZ2dlciBTdXBlck1pbnVzIFN1cGVyUGx1cyBTdXBlcnNjcmlwdCBTdXBlcnNjcmlwdEJveCBTdXBlcnNjcmlwdEJveE9wdGlvbnMgU3VwZXJzZXQgU3VwZXJzZXRFcXVhbCBTdXBlclN0YXIgU3VyZCBTdXJkRm9ybSBTdXJmYWNlQ29sb3IgU3VyZmFjZUdyYXBoaWNzIFN1cnZpdmFsRGlzdHJpYnV0aW9uIFN1cnZpdmFsRnVuY3Rpb24gU3Vydml2YWxNb2RlbCBTdXJ2aXZhbE1vZGVsRml0IFN1c3BlbmRQYWNrZXQgU3V6dWtpRGlzdHJpYnV0aW9uIFN1enVraUdyb3VwU3V6IFN3YXRjaExlZ2VuZCBTd2l0Y2ggU3ltYm9sIFN5bWJvbE5hbWUgU3ltbGV0V2F2ZWxldCBTeW1tZXRyaWMgU3ltbWV0cmljR3JvdXAgU3ltbWV0cmljTWF0cml4USBTeW1tZXRyaWNQb2x5bm9taWFsIFN5bW1ldHJpY1JlZHVjdGlvbiBTeW1tZXRyaXplIFN5bW1ldHJpemVkQXJyYXkgU3ltbWV0cml6ZWRBcnJheVJ1bGVzIFN5bW1ldHJpemVkRGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZEluZGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZFJlcGxhY2VQYXJ0IFN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24gU3luY2hyb25vdXNVcGRhdGluZyBTeW50YXggU3ludGF4Rm9ybSBTeW50YXhJbmZvcm1hdGlvbiBTeW50YXhMZW5ndGggU3ludGF4UGFja2V0IFN5bnRheFEgU3lzdGVtRGlhbG9nSW5wdXQgU3lzdGVtRXhjZXB0aW9uIFN5c3RlbUhlbHBQYXRoIFN5c3RlbUluZm9ybWF0aW9uIFN5c3RlbUluZm9ybWF0aW9uRGF0YSBTeXN0ZW1PcGVuIFN5c3RlbU9wdGlvbnMgU3lzdGVtc01vZGVsRGVsYXkgU3lzdGVtc01vZGVsRGVsYXlBcHByb3hpbWF0ZSBTeXN0ZW1zTW9kZWxEZWxldGUgU3lzdGVtc01vZGVsRGltZW5zaW9ucyBTeXN0ZW1zTW9kZWxFeHRyYWN0IFN5c3RlbXNNb2RlbEZlZWRiYWNrQ29ubmVjdCBTeXN0ZW1zTW9kZWxMYWJlbHMgU3lzdGVtc01vZGVsT3JkZXIgU3lzdGVtc01vZGVsUGFyYWxsZWxDb25uZWN0IFN5c3RlbXNNb2RlbFNlcmllc0Nvbm5lY3QgU3lzdGVtc01vZGVsU3RhdGVGZWVkYmFja0Nvbm5lY3QgU3lzdGVtU3R1YiBUYWIgVGFiRmlsbGluZyBUYWJsZSBUYWJsZUFsaWdubWVudHMgVGFibGVEZXB0aCBUYWJsZURpcmVjdGlvbnMgVGFibGVGb3JtIFRhYmxlSGVhZGluZ3MgVGFibGVTcGFjaW5nIFRhYmxlVmlldyBUYWJsZVZpZXdCb3ggVGFiU3BhY2luZ3MgVGFiVmlldyBUYWJWaWV3Qm94IFRhYlZpZXdCb3hPcHRpb25zIFRhZ0JveCBUYWdCb3hOb3RlIFRhZ0JveE9wdGlvbnMgVGFnZ2luZ1J1bGVzIFRhZ1NldCBUYWdTZXREZWxheWVkIFRhZ1N0eWxlIFRhZ1Vuc2V0IFRha2UgVGFrZVdoaWxlIFRhbGx5IFRhbiBUYW5oIFRhcmdldEZ1bmN0aW9ucyBUYXJnZXRVbml0cyBUYXV0b2xvZ3lRIFRlbGVncmFwaFByb2Nlc3MgVGVtcGxhdGVCb3ggVGVtcGxhdGVCb3hPcHRpb25zIFRlbXBsYXRlU2xvdFNlcXVlbmNlIFRlbXBvcmFsRGF0YSBUZW1wb3JhcnkgVGVtcG9yYXJ5VmFyaWFibGUgVGVuc29yQ29udHJhY3QgVGVuc29yRGltZW5zaW9ucyBUZW5zb3JFeHBhbmQgVGVuc29yUHJvZHVjdCBUZW5zb3JRIFRlbnNvclJhbmsgVGVuc29yUmVkdWNlIFRlbnNvclN5bW1ldHJ5IFRlbnNvclRyYW5zcG9zZSBUZW5zb3JXZWRnZSBUZXRyYWhlZHJvbiBUZXRyYWhlZHJvbkJveCBUZXRyYWhlZHJvbkJveE9wdGlvbnMgVGVYRm9ybSBUZVhTYXZlIFRleHQgVGV4dDNEQm94IFRleHQzREJveE9wdGlvbnMgVGV4dEFsaWdubWVudCBUZXh0QmFuZCBUZXh0Qm91bmRpbmdCb3ggVGV4dEJveCBUZXh0Q2VsbCBUZXh0Q2xpcGJvYXJkVHlwZSBUZXh0RGF0YSBUZXh0Rm9ybSBUZXh0SnVzdGlmaWNhdGlvbiBUZXh0TGluZSBUZXh0UGFja2V0IFRleHRQYXJhZ3JhcGggVGV4dFJlY29nbml6ZSBUZXh0UmVuZGVyaW5nIFRleHRTdHlsZSBUZXh0dXJlIFRleHR1cmVDb29yZGluYXRlRnVuY3Rpb24gVGV4dHVyZUNvb3JkaW5hdGVTY2FsaW5nIFRoZXJlZm9yZSBUaGVybW9tZXRlckdhdWdlIFRoaWNrIFRoaWNrbmVzcyBUaGluIFRoaW5uaW5nIFRoaXNMaW5rIFRob21wc29uR3JvdXBUaCBUaHJlYWQgVGhyZWVKU3ltYm9sIFRocmVzaG9sZCBUaHJvdWdoIFRocm93IFRodW1ibmFpbCBUaHVyc2RheSBUaWNrcyBUaWNrc1N0eWxlIFRpbGRlIFRpbGRlRXF1YWwgVGlsZGVGdWxsRXF1YWwgVGlsZGVUaWxkZSBUaW1lQ29uc3RyYWluZWQgVGltZUNvbnN0cmFpbnQgVGltZXMgVGltZXNCeSBUaW1lU2VyaWVzRm9yZWNhc3QgVGltZVNlcmllc0ludmVydGliaWxpdHkgVGltZVVzZWQgVGltZVZhbHVlIFRpbWVab25lIFRpbWluZyBUaW55IFRpdGxlR3JvdXBpbmcgVGl0c0dyb3VwVCBUb0JveGVzIFRvQ2hhcmFjdGVyQ29kZSBUb0NvbG9yIFRvQ29udGludW91c1RpbWVNb2RlbCBUb0RhdGUgVG9EaXNjcmV0ZVRpbWVNb2RlbCBUb2VwbGl0ek1hdHJpeCBUb0V4cHJlc3Npb24gVG9GaWxlTmFtZSBUb2dldGhlciBUb2dnbGUgVG9nZ2xlRmFsc2UgVG9nZ2xlciBUb2dnbGVyQmFyIFRvZ2dsZXJCb3ggVG9nZ2xlckJveE9wdGlvbnMgVG9IZWxkRXhwcmVzc2lvbiBUb0ludmVydGlibGVUaW1lU2VyaWVzIFRva2VuV29yZHMgVG9sZXJhbmNlIFRvTG93ZXJDYXNlIFRvTnVtYmVyRmllbGQgVG9vQmlnIFRvb2x0aXAgVG9vbHRpcEJveCBUb29sdGlwQm94T3B0aW9ucyBUb29sdGlwRGVsYXkgVG9vbHRpcFN0eWxlIFRvcCBUb3BIYXRUcmFuc2Zvcm0gVG9wb2xvZ2ljYWxTb3J0IFRvUmFkaWNhbHMgVG9SdWxlcyBUb1N0cmluZyBUb3RhbCBUb3RhbEhlaWdodCBUb3RhbFZhcmlhdGlvbkZpbHRlciBUb3RhbFdpZHRoIFRvdWNoc2NyZWVuQXV0b1pvb20gVG91Y2hzY3JlZW5Db250cm9sUGxhY2VtZW50IFRvVXBwZXJDYXNlIFRyIFRyYWNlIFRyYWNlQWJvdmUgVHJhY2VBY3Rpb24gVHJhY2VCYWNrd2FyZCBUcmFjZURlcHRoIFRyYWNlRGlhbG9nIFRyYWNlRm9yd2FyZCBUcmFjZUludGVybmFsIFRyYWNlTGV2ZWwgVHJhY2VPZmYgVHJhY2VPbiBUcmFjZU9yaWdpbmFsIFRyYWNlUHJpbnQgVHJhY2VTY2FuIFRyYWNrZWRTeW1ib2xzIFRyYWRpbmdDaGFydCBUcmFkaXRpb25hbEZvcm0gVHJhZGl0aW9uYWxGdW5jdGlvbk5vdGF0aW9uIFRyYWRpdGlvbmFsTm90YXRpb24gVHJhZGl0aW9uYWxPcmRlciBUcmFuc2ZlckZ1bmN0aW9uQ2FuY2VsIFRyYW5zZmVyRnVuY3Rpb25FeHBhbmQgVHJhbnNmZXJGdW5jdGlvbkZhY3RvciBUcmFuc2ZlckZ1bmN0aW9uTW9kZWwgVHJhbnNmZXJGdW5jdGlvblBvbGVzIFRyYW5zZmVyRnVuY3Rpb25UcmFuc2Zvcm0gVHJhbnNmZXJGdW5jdGlvblplcm9zIFRyYW5zZm9ybWF0aW9uRnVuY3Rpb24gVHJhbnNmb3JtYXRpb25GdW5jdGlvbnMgVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtZWREaXN0cmlidXRpb24gVHJhbnNmb3JtZWRGaWVsZCBUcmFuc2xhdGUgVHJhbnNsYXRpb25UcmFuc2Zvcm0gVHJhbnNwYXJlbnRDb2xvciBUcmFuc3Bvc2UgVHJlZUZvcm0gVHJlZUdyYXBoIFRyZWVHcmFwaFEgVHJlZVBsb3QgVHJlbmRTdHlsZSBUcmlhbmdsZVdhdmUgVHJpYW5ndWxhckRpc3RyaWJ1dGlvbiBUcmlnIFRyaWdFeHBhbmQgVHJpZ0ZhY3RvciBUcmlnRmFjdG9yTGlzdCBUcmlnZ2VyIFRyaWdSZWR1Y2UgVHJpZ1RvRXhwIFRyaW1tZWRNZWFuIFRydWUgVHJ1ZVEgVHJ1bmNhdGVkRGlzdHJpYnV0aW9uIFRzYWxsaXNRRXhwb25lbnRpYWxEaXN0cmlidXRpb24gVHNhbGxpc1FHYXVzc2lhbkRpc3RyaWJ1dGlvbiBUVGVzdCBUdWJlIFR1YmVCZXppZXJDdXJ2ZUJveCBUdWJlQmV6aWVyQ3VydmVCb3hPcHRpb25zIFR1YmVCb3ggVHViZUJTcGxpbmVDdXJ2ZUJveCBUdWJlQlNwbGluZUN1cnZlQm94T3B0aW9ucyBUdWVzZGF5IFR1a2V5TGFtYmRhRGlzdHJpYnV0aW9uIFR1a2V5V2luZG93IFR1cGxlcyBUdXJhbkdyYXBoIFR1cmluZ01hY2hpbmUgVHJhbnNwYXJlbnQgVW5hdGVRIFVuY29tcHJlc3MgVW5kZWZpbmVkIFVuZGVyQmFyIFVuZGVyZmxvdyBVbmRlcmxpbmVkIFVuZGVyb3ZlcnNjcmlwdCBVbmRlcm92ZXJzY3JpcHRCb3ggVW5kZXJvdmVyc2NyaXB0Qm94T3B0aW9ucyBVbmRlcnNjcmlwdCBVbmRlcnNjcmlwdEJveCBVbmRlcnNjcmlwdEJveE9wdGlvbnMgVW5kaXJlY3RlZEVkZ2UgVW5kaXJlY3RlZEdyYXBoIFVuZGlyZWN0ZWRHcmFwaFEgVW5kb2N1bWVudGVkVGVzdEZFUGFyc2VyUGFja2V0IFVuZG9jdW1lbnRlZFRlc3RHZXRTZWxlY3Rpb25QYWNrZXQgVW5lcXVhbCBVbmV2YWx1YXRlZCBVbmlmb3JtRGlzdHJpYnV0aW9uIFVuaWZvcm1HcmFwaERpc3RyaWJ1dGlvbiBVbmlmb3JtU3VtRGlzdHJpYnV0aW9uIFVuaW5zdGFsbCBVbmlvbiBVbmlvblBsdXMgVW5pcXVlIFVuaXRCb3ggVW5pdENvbnZlcnQgVW5pdERpbWVuc2lvbnMgVW5pdGl6ZSBVbml0Um9vdFRlc3QgVW5pdFNpbXBsaWZ5IFVuaXRTdGVwIFVuaXRUcmlhbmdsZSBVbml0VmVjdG9yIFVucHJvdGVjdCBVbnNhbWVRIFVuc2F2ZWRWYXJpYWJsZXMgVW5zZXQgVW5zZXRTaGFyZWQgVW50cmFja2VkVmFyaWFibGVzIFVwIFVwQXJyb3cgVXBBcnJvd0JhciBVcEFycm93RG93bkFycm93IFVwZGF0ZSBVcGRhdGVEeW5hbWljT2JqZWN0cyBVcGRhdGVEeW5hbWljT2JqZWN0c1N5bmNocm9ub3VzIFVwZGF0ZUludGVydmFsIFVwRG93bkFycm93IFVwRXF1aWxpYnJpdW0gVXBwZXJDYXNlUSBVcHBlckxlZnRBcnJvdyBVcHBlclJpZ2h0QXJyb3cgVXBwZXJUcmlhbmd1bGFyaXplIFVwc2FtcGxlIFVwU2V0IFVwU2V0RGVsYXllZCBVcFRlZSBVcFRlZUFycm93IFVwVmFsdWVzIFVSTCBVUkxGZXRjaCBVUkxGZXRjaEFzeW5jaHJvbm91cyBVUkxTYXZlIFVSTFNhdmVBc3luY2hyb25vdXMgVXNlR3JhcGhpY3NSYW5nZSBVc2luZyBVc2luZ0Zyb250RW5kIFYyR2V0IFZhbGlkYXRpb25MZW5ndGggVmFsdWUgVmFsdWVCb3ggVmFsdWVCb3hPcHRpb25zIFZhbHVlRm9ybSBWYWx1ZVEgVmFsdWVzRGF0YSBWYXJpYWJsZXMgVmFyaWFuY2UgVmFyaWFuY2VFcXVpdmFsZW5jZVRlc3QgVmFyaWFuY2VFc3RpbWF0b3JGdW5jdGlvbiBWYXJpYW5jZUdhbW1hRGlzdHJpYnV0aW9uIFZhcmlhbmNlVGVzdCBWZWN0b3JBbmdsZSBWZWN0b3JDb2xvckZ1bmN0aW9uIFZlY3RvckNvbG9yRnVuY3Rpb25TY2FsaW5nIFZlY3RvckRlbnNpdHlQbG90IFZlY3RvckdseXBoRGF0YSBWZWN0b3JQbG90IFZlY3RvclBsb3QzRCBWZWN0b3JQb2ludHMgVmVjdG9yUSBWZWN0b3JzIFZlY3RvclNjYWxlIFZlY3RvclN0eWxlIFZlZSBWZXJiYXRpbSBWZXJib3NlIFZlcmJvc2VDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0IFZlcmlmeUNvbnZlcmdlbmNlIFZlcmlmeVNvbHV0aW9ucyBWZXJpZnlUZXN0QXNzdW1wdGlvbnMgVmVyc2lvbiBWZXJzaW9uTnVtYmVyIFZlcnRleEFkZCBWZXJ0ZXhDYXBhY2l0eSBWZXJ0ZXhDb2xvcnMgVmVydGV4Q29tcG9uZW50IFZlcnRleENvbm5lY3Rpdml0eSBWZXJ0ZXhDb29yZGluYXRlUnVsZXMgVmVydGV4Q29vcmRpbmF0ZXMgVmVydGV4Q29ycmVsYXRpb25TaW1pbGFyaXR5IFZlcnRleENvc2luZVNpbWlsYXJpdHkgVmVydGV4Q291bnQgVmVydGV4Q292ZXJRIFZlcnRleERhdGFDb29yZGluYXRlcyBWZXJ0ZXhEZWdyZWUgVmVydGV4RGVsZXRlIFZlcnRleERpY2VTaW1pbGFyaXR5IFZlcnRleEVjY2VudHJpY2l0eSBWZXJ0ZXhJbkNvbXBvbmVudCBWZXJ0ZXhJbkRlZ3JlZSBWZXJ0ZXhJbmRleCBWZXJ0ZXhKYWNjYXJkU2ltaWxhcml0eSBWZXJ0ZXhMYWJlbGluZyBWZXJ0ZXhMYWJlbHMgVmVydGV4TGFiZWxTdHlsZSBWZXJ0ZXhMaXN0IFZlcnRleE5vcm1hbHMgVmVydGV4T3V0Q29tcG9uZW50IFZlcnRleE91dERlZ3JlZSBWZXJ0ZXhRIFZlcnRleFJlbmRlcmluZ0Z1bmN0aW9uIFZlcnRleFJlcGxhY2UgVmVydGV4U2hhcGUgVmVydGV4U2hhcGVGdW5jdGlvbiBWZXJ0ZXhTaXplIFZlcnRleFN0eWxlIFZlcnRleFRleHR1cmVDb29yZGluYXRlcyBWZXJ0ZXhXZWlnaHQgVmVydGljYWwgVmVydGljYWxCYXIgVmVydGljYWxGb3JtIFZlcnRpY2FsR2F1Z2UgVmVydGljYWxTZXBhcmF0b3IgVmVydGljYWxTbGlkZXIgVmVydGljYWxUaWxkZSBWaWV3QW5nbGUgVmlld0NlbnRlciBWaWV3TWF0cml4IFZpZXdQb2ludCBWaWV3UG9pbnRTZWxlY3RvclNldHRpbmdzIFZpZXdQb3J0IFZpZXdSYW5nZSBWaWV3VmVjdG9yIFZpZXdWZXJ0aWNhbCBWaXJ0dWFsR3JvdXBEYXRhIFZpc2libGUgVmlzaWJsZUNlbGwgVm9pZ3REaXN0cmlidXRpb24gVm9uTWlzZXNEaXN0cmlidXRpb24gV2FpdEFsbCBXYWl0QXN5bmNocm9ub3VzVGFzayBXYWl0TmV4dCBXYWl0VW50aWwgV2FrZWJ5RGlzdHJpYnV0aW9uIFdhbGxlbml1c0h5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIFdhcmluZ1l1bGVEaXN0cmlidXRpb24gV2F0ZXJzaGVkQ29tcG9uZW50cyBXYXRzb25VU3F1YXJlVGVzdCBXYXR0c1N0cm9nYXR6R3JhcGhEaXN0cmlidXRpb24gV2F2ZWxldEJlc3RCYXNpcyBXYXZlbGV0RmlsdGVyQ29lZmZpY2llbnRzIFdhdmVsZXRJbWFnZVBsb3QgV2F2ZWxldExpc3RQbG90IFdhdmVsZXRNYXBJbmRleGVkIFdhdmVsZXRNYXRyaXhQbG90IFdhdmVsZXRQaGkgV2F2ZWxldFBzaSBXYXZlbGV0U2NhbGUgV2F2ZWxldFNjYWxvZ3JhbSBXYXZlbGV0VGhyZXNob2xkIFdlYWtseUNvbm5lY3RlZENvbXBvbmVudHMgV2Vha2x5Q29ubmVjdGVkR3JhcGhRIFdlYWtTdGF0aW9uYXJpdHkgV2VhdGhlckRhdGEgV2ViZXJFIFdlZGdlIFdlZG5lc2RheSBXZWlidWxsRGlzdHJpYnV0aW9uIFdlaWVyc3RyYXNzSGFsZlBlcmlvZHMgV2VpZXJzdHJhc3NJbnZhcmlhbnRzIFdlaWVyc3RyYXNzUCBXZWllcnN0cmFzc1BQcmltZSBXZWllcnN0cmFzc1NpZ21hIFdlaWVyc3RyYXNzWmV0YSBXZWlnaHRlZEFkamFjZW5jeUdyYXBoIFdlaWdodGVkQWRqYWNlbmN5TWF0cml4IFdlaWdodGVkRGF0YSBXZWlnaHRlZEdyYXBoUSBXZWlnaHRzIFdlbGNoV2luZG93IFdoZWVsR3JhcGggV2hlbkV2ZW50IFdoaWNoIFdoaWxlIFdoaXRlIFdoaXRlc3BhY2UgV2hpdGVzcGFjZUNoYXJhY3RlciBXaGl0dGFrZXJNIFdoaXR0YWtlclcgV2llbmVyRmlsdGVyIFdpZW5lclByb2Nlc3MgV2lnbmVyRCBXaWduZXJTZW1pY2lyY2xlRGlzdHJpYnV0aW9uIFdpbGtzVyBXaWxrc1dUZXN0IFdpbmRvd0NsaWNrU2VsZWN0IFdpbmRvd0VsZW1lbnRzIFdpbmRvd0Zsb2F0aW5nIFdpbmRvd0ZyYW1lIFdpbmRvd0ZyYW1lRWxlbWVudHMgV2luZG93TWFyZ2lucyBXaW5kb3dNb3ZhYmxlIFdpbmRvd09wYWNpdHkgV2luZG93U2VsZWN0ZWQgV2luZG93U2l6ZSBXaW5kb3dTdGF0dXNBcmVhIFdpbmRvd1RpdGxlIFdpbmRvd1Rvb2xiYXJzIFdpbmRvd1dpZHRoIFdpdGggV29sZnJhbUFscGhhIFdvbGZyYW1BbHBoYURhdGUgV29sZnJhbUFscGhhUXVhbnRpdHkgV29sZnJhbUFscGhhUmVzdWx0IFdvcmQgV29yZEJvdW5kYXJ5IFdvcmRDaGFyYWN0ZXIgV29yZERhdGEgV29yZFNlYXJjaCBXb3JkU2VwYXJhdG9ycyBXb3JraW5nUHJlY2lzaW9uIFdyaXRlIFdyaXRlU3RyaW5nIFdyb25za2lhbiBYTUxFbGVtZW50IFhNTE9iamVjdCBYbm9yIFhvciBZZWxsb3cgWXVsZURpc3NpbWlsYXJpdHkgWmVybmlrZVIgWmVyb1N5bW1ldHJpYyBaZXJvVGVzdCBaZXJvV2lkdGhUaW1lcyBaZXRhIFpldGFaZXJvIFppcGZEaXN0cmlidXRpb24gWlRlc3QgWlRyYW5zZm9ybSAkQWJvcnRlZCAkQWN0aXZhdGlvbkdyb3VwSUQgJEFjdGl2YXRpb25LZXkgJEFjdGl2YXRpb25Vc2VyUmVnaXN0ZXJlZCAkQWRkT25zRGlyZWN0b3J5ICRBc3NlcnRGdW5jdGlvbiAkQXNzdW1wdGlvbnMgJEFzeW5jaHJvbm91c1Rhc2sgJEJhc2VEaXJlY3RvcnkgJEJhdGNoSW5wdXQgJEJhdGNoT3V0cHV0ICRCb3hGb3JtcyAkQnl0ZU9yZGVyaW5nICRDYW5jZWxlZCAkQ2hhcmFjdGVyRW5jb2RpbmcgJENoYXJhY3RlckVuY29kaW5ncyAkQ29tbWFuZExpbmUgJENvbXBpbGF0aW9uVGFyZ2V0ICRDb25kaXRpb25Ib2xkICRDb25maWd1cmVkS2VybmVscyAkQ29udGV4dCAkQ29udGV4dFBhdGggJENvbnRyb2xBY3RpdmVTZXR0aW5nICRDcmVhdGlvbkRhdGUgJEN1cnJlbnRMaW5rICREYXRlU3RyaW5nRm9ybWF0ICREZWZhdWx0Rm9udCAkRGVmYXVsdEZyb250RW5kICREZWZhdWx0SW1hZ2luZ0RldmljZSAkRGVmYXVsdFBhdGggJERpc3BsYXkgJERpc3BsYXlGdW5jdGlvbiAkRGlzdHJpYnV0ZWRDb250ZXh0cyAkRHluYW1pY0V2YWx1YXRpb24gJEVjaG8gJEVwaWxvZyAkRXhwb3J0Rm9ybWF0cyAkRmFpbGVkICRGaW5hbmNpYWxEYXRhU291cmNlICRGb3JtYXRUeXBlICRGcm9udEVuZCAkRnJvbnRFbmRTZXNzaW9uICRHZW9Mb2NhdGlvbiAkSGlzdG9yeUxlbmd0aCAkSG9tZURpcmVjdG9yeSAkSFRUUENvb2tpZXMgJElnbm9yZUVPRiAkSW1hZ2luZ0RldmljZXMgJEltcG9ydEZvcm1hdHMgJEluaXRpYWxEaXJlY3RvcnkgJElucHV0ICRJbnB1dEZpbGVOYW1lICRJbnB1dFN0cmVhbU1ldGhvZHMgJEluc3BlY3RvciAkSW5zdGFsbGF0aW9uRGF0ZSAkSW5zdGFsbGF0aW9uRGlyZWN0b3J5ICRJbnRlcmZhY2VFbnZpcm9ubWVudCAkSXRlcmF0aW9uTGltaXQgJEtlcm5lbENvdW50ICRLZXJuZWxJRCAkTGFuZ3VhZ2UgJExhdW5jaERpcmVjdG9yeSAkTGlicmFyeVBhdGggJExpY2Vuc2VFeHBpcmF0aW9uRGF0ZSAkTGljZW5zZUlEICRMaWNlbnNlUHJvY2Vzc2VzICRMaWNlbnNlU2VydmVyICRMaWNlbnNlU3VicHJvY2Vzc2VzICRMaWNlbnNlVHlwZSAkTGluZSAkTGlua2VkICRMaW5rU3VwcG9ydGVkICRMb2FkZWRGaWxlcyAkTWFjaGluZUFkZHJlc3NlcyAkTWFjaGluZURvbWFpbiAkTWFjaGluZURvbWFpbnMgJE1hY2hpbmVFcHNpbG9uICRNYWNoaW5lSUQgJE1hY2hpbmVOYW1lICRNYWNoaW5lUHJlY2lzaW9uICRNYWNoaW5lVHlwZSAkTWF4RXh0cmFQcmVjaXNpb24gJE1heExpY2Vuc2VQcm9jZXNzZXMgJE1heExpY2Vuc2VTdWJwcm9jZXNzZXMgJE1heE1hY2hpbmVOdW1iZXIgJE1heE51bWJlciAkTWF4UGllY2V3aXNlQ2FzZXMgJE1heFByZWNpc2lvbiAkTWF4Um9vdERlZ3JlZSAkTWVzc2FnZUdyb3VwcyAkTWVzc2FnZUxpc3QgJE1lc3NhZ2VQcmVQcmludCAkTWVzc2FnZXMgJE1pbk1hY2hpbmVOdW1iZXIgJE1pbk51bWJlciAkTWlub3JSZWxlYXNlTnVtYmVyICRNaW5QcmVjaXNpb24gJE1vZHVsZU51bWJlciAkTmV0d29ya0xpY2Vuc2UgJE5ld01lc3NhZ2UgJE5ld1N5bWJvbCAkTm90ZWJvb2tzICROdW1iZXJNYXJrcyAkT2ZmICRPcGVyYXRpbmdTeXN0ZW0gJE91dHB1dCAkT3V0cHV0Rm9ybXMgJE91dHB1dFNpemVMaW1pdCAkT3V0cHV0U3RyZWFtTWV0aG9kcyAkUGFja2FnZXMgJFBhcmVudExpbmsgJFBhcmVudFByb2Nlc3NJRCAkUGFzc3dvcmRGaWxlICRQYXRjaExldmVsSUQgJFBhdGggJFBhdGhuYW1lU2VwYXJhdG9yICRQZXJmb3JtYW5jZUdvYWwgJFBpcGVTdXBwb3J0ZWQgJFBvc3QgJFByZSAkUHJlZmVyZW5jZXNEaXJlY3RvcnkgJFByZVByaW50ICRQcmVSZWFkICRQcmludEZvcm1zICRQcmludExpdGVyYWwgJFByb2Nlc3NJRCAkUHJvY2Vzc29yQ291bnQgJFByb2Nlc3NvclR5cGUgJFByb2R1Y3RJbmZvcm1hdGlvbiAkUHJvZ3JhbU5hbWUgJFJhbmRvbVN0YXRlICRSZWN1cnNpb25MaW1pdCAkUmVsZWFzZU51bWJlciAkUm9vdERpcmVjdG9yeSAkU2NoZWR1bGVkVGFzayAkU2NyaXB0Q29tbWFuZExpbmUgJFNlc3Npb25JRCAkU2V0UGFyZW50TGluayAkU2hhcmVkRnVuY3Rpb25zICRTaGFyZWRWYXJpYWJsZXMgJFNvdW5kRGlzcGxheSAkU291bmREaXNwbGF5RnVuY3Rpb24gJFN1cHByZXNzSW5wdXRGb3JtSGVhZHMgJFN5bmNocm9ub3VzRXZhbHVhdGlvbiAkU3ludGF4SGFuZGxlciAkU3lzdGVtICRTeXN0ZW1DaGFyYWN0ZXJFbmNvZGluZyAkU3lzdGVtSUQgJFN5c3RlbVdvcmRMZW5ndGggJFRlbXBvcmFyeURpcmVjdG9yeSAkVGVtcG9yYXJ5UHJlZml4ICRUZXh0U3R5bGUgJFRpbWVkT3V0ICRUaW1lVW5pdCAkVGltZVpvbmUgJFRvcERpcmVjdG9yeSAkVHJhY2VPZmYgJFRyYWNlT24gJFRyYWNlUGF0dGVybiAkVHJhY2VQb3N0QWN0aW9uICRUcmFjZVByZUFjdGlvbiAkVXJnZW50ICRVc2VyQWRkT25zRGlyZWN0b3J5ICRVc2VyQmFzZURpcmVjdG9yeSAkVXNlckRvY3VtZW50c0RpcmVjdG9yeSAkVXNlck5hbWUgJFZlcnNpb24gJFZlcnNpb25OdW1iZXIiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjovXChcKi8sZW5kOi9cKlwpL30sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLHtiZWdpbjovXHsvLGVuZDovXH0vLGlsbGVnYWw6LzovfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGxhYi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e3JlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46IignfFxcLicpKyJ9XX07cmV0dXJue2tleXdvcmRzOntrZXl3b3JkOiJicmVhayBjYXNlIGNhdGNoIGNsYXNzZGVmIGNvbnRpbnVlIGVsc2UgZWxzZWlmIGVuZCBlbnVtZXJhdGVkIGV2ZW50cyBmb3IgZnVuY3Rpb24gZ2xvYmFsIGlmIG1ldGhvZHMgb3RoZXJ3aXNlIHBhcmZvciBwZXJzaXN0ZW50IHByb3BlcnRpZXMgcmV0dXJuIHNwbWQgc3dpdGNoIHRyeSB3aGlsZSIsYnVpbHRfaW46InNpbiBzaW5kIHNpbmggYXNpbiBhc2luZCBhc2luaCBjb3MgY29zZCBjb3NoIGFjb3MgYWNvc2QgYWNvc2ggdGFuIHRhbmQgdGFuaCBhdGFuIGF0YW5kIGF0YW4yIGF0YW5oIHNlYyBzZWNkIHNlY2ggYXNlYyBhc2VjZCBhc2VjaCBjc2MgY3NjZCBjc2NoIGFjc2MgYWNzY2QgYWNzY2ggY290IGNvdGQgY290aCBhY290IGFjb3RkIGFjb3RoIGh5cG90IGV4cCBleHBtMSBsb2cgbG9nMXAgbG9nMTAgbG9nMiBwb3cyIHJlYWxwb3cgcmVhbGxvZyByZWFsc3FydCBzcXJ0IG50aHJvb3QgbmV4dHBvdzIgYWJzIGFuZ2xlIGNvbXBsZXggY29uaiBpbWFnIHJlYWwgdW53cmFwIGlzcmVhbCBjcGx4cGFpciBmaXggZmxvb3IgY2VpbCByb3VuZCBtb2QgcmVtIHNpZ24gYWlyeSBiZXNzZWxqIGJlc3NlbHkgYmVzc2VsaCBiZXNzZWxpIGJlc3NlbGsgYmV0YSBiZXRhaW5jIGJldGFsbiBlbGxpcGogZWxsaXBrZSBlcmYgZXJmYyBlcmZjeCBlcmZpbnYgZXhwaW50IGdhbW1hIGdhbW1haW5jIGdhbW1hbG4gcHNpIGxlZ2VuZHJlIGNyb3NzIGRvdCBmYWN0b3IgaXNwcmltZSBwcmltZXMgZ2NkIGxjbSByYXQgcmF0cyBwZXJtcyBuY2hvb3NlayBmYWN0b3JpYWwgY2FydDJzcGggY2FydDJwb2wgcG9sMmNhcnQgc3BoMmNhcnQgaHN2MnJnYiByZ2IyaHN2IHplcm9zIG9uZXMgZXllIHJlcG1hdCByYW5kIHJhbmRuIGxpbnNwYWNlIGxvZ3NwYWNlIGZyZXFzcGFjZSBtZXNoZ3JpZCBhY2N1bWFycmF5IHNpemUgbGVuZ3RoIG5kaW1zIG51bWVsIGRpc3AgaXNlbXB0eSBpc2VxdWFsIGlzZXF1YWx3aXRoZXF1YWxuYW5zIGNhdCByZXNoYXBlIGRpYWcgYmxrZGlhZyB0cmlsIHRyaXUgZmxpcGxyIGZsaXB1ZCBmbGlwZGltIHJvdDkwIGZpbmQgc3ViMmluZCBpbmQyc3ViIGJzeGZ1biBuZGdyaWQgcGVybXV0ZSBpcGVybXV0ZSBzaGlmdGRpbSBjaXJjc2hpZnQgc3F1ZWV6ZSBpc3NjYWxhciBpc3ZlY3RvciBhbnMgZXBzIHJlYWxtYXggcmVhbG1pbiBwaSBpIGluZiBuYW4gaXNuYW4gaXNpbmYgaXNmaW5pdGUgaiB3aHkgY29tcGFuIGdhbGxlcnkgaGFkYW1hcmQgaGFua2VsIGhpbGIgaW52aGlsYiBtYWdpYyBwYXNjYWwgcm9zc2VyIHRvZXBsaXR6IHZhbmRlciB3aWxraW5zb24gbWF4IG1pbiBuYW5tYXggbmFubWluIG1lYW4gbmFubWVhbiB0eXBlIHRhYmxlIHJlYWR0YWJsZSB3cml0ZXRhYmxlIHNvcnRyb3dzIHNvcnQgZmlndXJlIHBsb3QgcGxvdDMgc2NhdHRlciBzY2F0dGVyMyBjZWxsZnVuIGxlZ2VuZCBpbnRlcnNlY3QgaXNtZW1iZXIgcHJvY3J1c3RlcyBob2xkIG51bTJjZWxsICJ9LGlsbGVnYWw6JygvL3wifCN8L1xcKnxcXHMrL1xcdyspJyxjb250YWluczpbe2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmN0aW9uIixlbmQ6IiQiLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46IlxcKCIsZW5kOiJcXCkifSx7YmVnaW46IlxcWyIsZW5kOiJcXF0ifV19XX0se2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOi90cnVlfGZhbHNlLyxyZWxldmFuY2U6MCxzdGFydHM6dH0se2JlZ2luOiJbYS16QS1aXVthLXpBLVpfMC05XSooJ3xcXC4nKSsiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuQ19OVU1CRVJfUkUscmVsZXZhbmNlOjAsc3RhcnRzOnR9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx7YmVnaW46IicnIn1dfSx7YmVnaW46L1xdfH18XCkvLHJlbGV2YW5jZTowLHN0YXJ0czp0fSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUse2JlZ2luOiciIid9XSxzdGFydHM6dH0sZS5DT01NRU5UKCJeXFxzKlxcJVxce1xccyokIiwiXlxccypcXCVcXH1cXHMqJCIpLGUuQ09NTUVOVCgiXFwlIiwiJCIpXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF4aW1hLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57bGV4ZW1lczoiW0EtWmEtel8lXVswLTlBLVphLXpfJV0qIixrZXl3b3Jkczp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsc2VpZiBmb3IgdGhydSBkbyB3aGlsZSB1bmxlc3Mgc3RlcCBpbiBhbmQgb3Igbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIHVua25vd24gaW5mIG1pbmYgaW5kIHVuZCAlZSAlaSAlcGkgJXBoaSAlZ2FtbWEiLGJ1aWx0X2luOiIgYWJhc2VwIGFicyBhYnNpbnQgYWJzb2x1dGVfcmVhbF90aW1lIGFjb3MgYWNvc2ggYWNvdCBhY290aCBhY3NjIGFjc2NoIGFjdGl2YXRlIGFkZGNvbCBhZGRfZWRnZSBhZGRfZWRnZXMgYWRkbWF0cmljZXMgYWRkcm93IGFkZF92ZXJ0ZXggYWRkX3ZlcnRpY2VzIGFkamFjZW5jeV9tYXRyaXggYWRqb2luIGFkam9pbnQgYWYgYWdkIGFpcnkgYWlyeV9haSBhaXJ5X2JpIGFpcnlfZGFpIGFpcnlfZGJpIGFsZ3N5cyBhbGdfdHlwZSBhbGlhcyBhbGxyb290cyBhbHBoYWNoYXJwIGFscGhhbnVtZXJpY3AgYW1vcnRpemF0aW9uICVhbmQgYW5udWl0eV9mdiBhbm51aXR5X3B2IGFudGlkIGFudGlkaWZmIEFudGlEaWZmZXJlbmNlIGFwcGVuZCBhcHBlbmRmaWxlIGFwcGx5IGFwcGx5MSBhcHBseTIgYXBwbHliMSBhcHJvcG9zIGFyZ3MgYXJpdF9hbW9ydGl6YXRpb24gYXJpdGhtZXRpYyBhcml0aHN1bSBhcnJheSBhcnJheWFwcGx5IGFycmF5aW5mbyBhcnJheW1ha2UgYXJyYXlzZXRhcHBseSBhc2NpaSBhc2VjIGFzZWNoIGFzaW4gYXNpbmggYXNraW50ZWdlciBhc2tzaWduIGFzc29jIGFzc29jX2xlZ2VuZHJlX3AgYXNzb2NfbGVnZW5kcmVfcSBhc3N1bWUgYXNzdW1lX2V4dGVybmFsX2J5dGVfb3JkZXIgYXN5bXBhIGF0IGF0YW4gYXRhbjIgYXRhbmggYXRlbnNpbXAgYXRvbSBhdHZhbHVlIGF1Z2NvZWZtYXRyaXggYXVnbWVudGVkX2xhZ3JhbmdpYW5fbWV0aG9kIGF2IGF2ZXJhZ2VfZGVncmVlIGJhY2t0cmFjZSBiYXJzIGJhcnNwbG90IGJhcnNwbG90X2Rlc2NyaXB0aW9uIGJhc2U2NCBiYXNlNjRfZGVjb2RlIGJhc2hpbmRpY2VzIGJhdGNoIGJhdGNobG9hZCBiYzIgYmR2YWMgYmVsbG4gYmVuZWZpdF9jb3N0IGJlcm4gYmVybnBvbHkgYmVybnN0ZWluX2FwcHJveCBiZXJuc3RlaW5fZXhwYW5kIGJlcm5zdGVpbl9wb2x5IGJlc3NlbCBiZXNzZWxfaSBiZXNzZWxfaiBiZXNzZWxfayBiZXNzZWxfc2ltcGxpZnkgYmVzc2VsX3kgYmV0YSBiZXRhX2luY29tcGxldGUgYmV0YV9pbmNvbXBsZXRlX2dlbmVyYWxpemVkIGJldGFfaW5jb21wbGV0ZV9yZWd1bGFyaXplZCBiZXpvdXQgYmZhbGxyb290cyBiZmZhYyBiZl9maW5kX3Jvb3QgYmZfZm1pbl9jb2J5bGEgYmZoemV0YSBiZmxvYXQgYmZsb2F0cCBiZnBzaSBiZnBzaTAgYmZ6ZXRhIGJpY29ubmVjdGVkX2NvbXBvbmVudHMgYmltZXRyaWMgYmlub21pYWwgYmlwYXJ0aXRpb24gYmxvY2sgYmxvY2ttYXRyaXhwIGJvZGVfZ2FpbiBib2RlX3BoYXNlIGJvdGhjb2VmIGJveCBib3hwbG90IGJveHBsb3RfZGVzY3JpcHRpb24gYnJlYWsgYnVnX3JlcG9ydCBidWlsZF9pbmZvfDEwIGJ1aWxkcSBidWlsZF9zYW1wbGUgYnVybiBjYWJzIGNhbmZvcm0gY2FudGVuIGNhcmRpbmFsaXR5IGNhcmcgY2FydGFuIGNhcnRlc2lhbl9wcm9kdWN0IGNhdGNoIGNhdWNoeV9tYXRyaXggY2JmZmFjIGNkZl9iZXJub3VsbGkgY2RmX2JldGEgY2RmX2Jpbm9taWFsIGNkZl9jYXVjaHkgY2RmX2NoaTIgY2RmX2NvbnRpbnVvdXNfdW5pZm9ybSBjZGZfZGlzY3JldGVfdW5pZm9ybSBjZGZfZXhwIGNkZl9mIGNkZl9nYW1tYSBjZGZfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgY2RmX2dlb21ldHJpYyBjZGZfZ3VtYmVsIGNkZl9oeXBlcmdlb21ldHJpYyBjZGZfbGFwbGFjZSBjZGZfbG9naXN0aWMgY2RmX2xvZ25vcm1hbCBjZGZfbmVnYXRpdmVfYmlub21pYWwgY2RmX25vbmNlbnRyYWxfY2hpMiBjZGZfbm9uY2VudHJhbF9zdHVkZW50X3QgY2RmX25vcm1hbCBjZGZfcGFyZXRvIGNkZl9wb2lzc29uIGNkZl9yYW5rX3N1bSBjZGZfcmF5bGVpZ2ggY2RmX3NpZ25lZF9yYW5rIGNkZl9zdHVkZW50X3QgY2RmX3dlaWJ1bGwgY2Rpc3BsYXkgY2VpbGluZyBjZW50cmFsX21vbWVudCBjZXF1YWwgY2VxdWFsaWdub3JlIGNmIGNmZGlzcmVwIGNmZXhwYW5kIGNnZW9kZXNpYyBjZ3JlYXRlcnAgY2dyZWF0ZXJwaWdub3JlIGNoYW5nZW5hbWUgY2hhbmdldmFyIGNoYW9zZ2FtZSBjaGFyYXQgY2hhcmZ1biBjaGFyZnVuMiBjaGFybGlzdCBjaGFycCBjaGFycG9seSBjaGRpciBjaGVieXNoZXZfdCBjaGVieXNoZXZfdSBjaGVja2RpdiBjaGVja19vdmVybGFwcyBjaGluZXNlIGNob2xlc2t5IGNocmlzdG9mIGNocm9tYXRpY19pbmRleCBjaHJvbWF0aWNfbnVtYmVyIGNpbnQgY2lyY3VsYW50X2dyYXBoIGNsZWFyX2VkZ2Vfd2VpZ2h0IGNsZWFyX3J1bGVzIGNsZWFyX3ZlcnRleF9sYWJlbCBjbGVic2NoX2dvcmRhbiBjbGVic2NoX2dyYXBoIGNsZXNzcCBjbGVzc3BpZ25vcmUgY2xvc2UgY2xvc2VmaWxlIGNtZXRyaWMgY29lZmYgY29lZm1hdHJpeCBjb2dyYWQgY29sIGNvbGxhcHNlIGNvbGxlY3R0ZXJtcyBjb2x1bW5vcCBjb2x1bW5zcGFjZSBjb2x1bW5zd2FwIGNvbHVtbnZlY3RvciBjb21iaW5hdGlvbiBjb21iaW5lIGNvbXAycHVpIGNvbXBhcmUgY29tcGZpbGUgY29tcGlsZSBjb21waWxlX2ZpbGUgY29tcGxlbWVudF9ncmFwaCBjb21wbGV0ZV9iaXBhcnRpdGVfZ3JhcGggY29tcGxldGVfZ3JhcGggY29tcGxleF9udW1iZXJfcCBjb21wb25lbnRzIGNvbXBvc2VfZnVuY3Rpb25zIGNvbmNhbiBjb25jYXQgY29uanVnYXRlIGNvbm1ldGRlcml2IGNvbm5lY3RlZF9jb21wb25lbnRzIGNvbm5lY3RfdmVydGljZXMgY29ucyBjb25zdGFudCBjb25zdGFudHAgY29uc3RpdHVlbnQgY29uc3R2YWx1ZSBjb250MnBhcnQgY29udGVudCBjb250aW51b3VzX2ZyZXEgY29udG9ydGlvbiBjb250b3VyX3Bsb3QgY29udHJhY3QgY29udHJhY3RfZWRnZSBjb250cmFncmFkIGNvbnRyaWJfb2RlIGNvbnZlcnQgY29vcmQgY29weSBjb3B5X2ZpbGUgY29weV9ncmFwaCBjb3B5bGlzdCBjb3B5bWF0cml4IGNvciBjb3MgY29zaCBjb3QgY290aCBjb3YgY292MSBjb3ZkaWZmIGNvdmVjdCBjb3ZlcnMgY3JjMjRzdW0gY3JlYXRlX2dyYXBoIGNyZWF0ZV9saXN0IGNzYyBjc2NoIGNzZXR1cCBjc3BsaW5lIGN0YXlsb3IgY3RfY29vcmRzeXMgY3RyYW5zZm9ybSBjdHJhbnNwb3NlIGN1YmVfZ3JhcGggY3Vib2N0YWhlZHJvbl9ncmFwaCBjdW5saXNwIGN2IGN5Y2xlX2RpZ3JhcGggY3ljbGVfZ3JhcGggY3lsaW5kcmljYWwgZGF5czM2MCBkYmxpbnQgZGVhY3RpdmF0ZSBkZWNsYXJlIGRlY2xhcmVfY29uc3R2YWx1ZSBkZWNsYXJlX2RpbWVuc2lvbnMgZGVjbGFyZV9mdW5kYW1lbnRhbF9kaW1lbnNpb25zIGRlY2xhcmVfZnVuZGFtZW50YWxfdW5pdHMgZGVjbGFyZV9xdHkgZGVjbGFyZV90cmFuc2xhdGVkIGRlY2xhcmVfdW5pdF9jb252ZXJzaW9uIGRlY2xhcmVfdW5pdHMgZGVjbGFyZV93ZWlnaHRzIGRlY3N5bSBkZWZjb24gZGVmaW5lIGRlZmluZV9hbHRfZGlzcGxheSBkZWZpbmVfdmFyaWFibGUgZGVmaW50IGRlZm1hdGNoIGRlZnJ1bGUgZGVmc3RydWN0IGRlZnRheWxvciBkZWdyZWVfc2VxdWVuY2UgZGVsIGRlbGV0ZSBkZWxldGVuIGRlbHRhIGRlbW8gZGVtb2l2cmUgZGVub20gZGVwZW5kcyBkZXJpdmRlZ3JlZSBkZXJpdmxpc3QgZGVzY3JpYmUgZGVzb2x2ZSBkZXRlcm1pbmFudCBkZmxvYXQgZGdhdXNzX2EgZGdhdXNzX2IgZGdlZXYgZGdlbW0gZGdlcXJmIGRnZXN2IGRnZXN2ZCBkaWFnIGRpYWdtYXRyaXggZGlhZ19tYXRyaXggZGlhZ21hdHJpeHAgZGlhbWV0ZXIgZGlmZiBkaWdpdGNoYXJwIGRpbWFjc19leHBvcnQgZGltYWNzX2ltcG9ydCBkaW1lbnNpb24gZGltZW5zaW9ubGVzcyBkaW1lbnNpb25zIGRpbWVuc2lvbnNfYXNfbGlzdCBkaXJlY3QgZGlyZWN0b3J5IGRpc2NyZXRlX2ZyZXEgZGlzam9pbiBkaXNqb2ludHAgZGlzb2xhdGUgZGlzcCBkaXNwY29uIGRpc3Bmb3JtIGRpc3BmdW4gZGlzcEpvcmRhbiBkaXNwbGF5IGRpc3BydWxlIGRpc3B0ZXJtcyBkaXN0cmliIGRpdmlkZSBkaXZpc29ycyBkaXZzdW0gZGt1bW1lcl9tIGRrdW1tZXJfdSBkbGFuZ2UgZG9kZWNhaGVkcm9uX2dyYXBoIGRvdHByb2R1Y3QgZG90c2ltcCBkcGFydCBkcmF3IGRyYXcyZCBkcmF3M2QgZHJhd2RmIGRyYXdfZmlsZSBkcmF3X2dyYXBoIGRzY2FsYXIgZWNoZWxvbiBlZGdlX2NvbG9yaW5nIGVkZ2VfY29ubmVjdGl2aXR5IGVkZ2VzIGVpZ2Vuc19ieV9qYWNvYmkgZWlnZW52YWx1ZXMgZWlnZW52ZWN0b3JzIGVpZ2h0aCBlaW5zdGVpbiBlaXZhbHMgZWl2ZWN0cyBlbGFwc2VkX3JlYWxfdGltZSBlbGFwc2VkX3J1bl90aW1lIGVsZTJjb21wIGVsZTJwb2x5bm9tZSBlbGUycHVpIGVsZW0gZWxlbWVudHAgZWxldmF0aW9uX2dyaWQgZWxpbSBlbGltX2FsbGJ1dCBlbGltaW5hdGUgZWxpbWluYXRlX3VzaW5nIGVsbGlwc2UgZWxsaXB0aWNfZSBlbGxpcHRpY19lYyBlbGxpcHRpY19ldSBlbGxpcHRpY19mIGVsbGlwdGljX2tjIGVsbGlwdGljX3BpIGVtYXRyaXggZW1wdHlfZ3JhcGggZW1wdHlwIGVuZGNvbnMgZW50ZXJtYXRyaXggZW50ZXJ0ZW5zb3IgZW50aWVyIGVxdWFsIGVxdWFscCBlcXVpdl9jbGFzc2VzIGVyZiBlcmZjIGVyZl9nZW5lcmFsaXplZCBlcmZpIGVycmNhdGNoIGVycm9yIGVycm9ybXNnIGVycm9ycyBldWxlciBldiBldmFsX3N0cmluZyBldmVucCBldmVyeSBldm9sdXRpb24gZXZvbHV0aW9uMmQgZXZ1bmRpZmYgZXhhbXBsZSBleHAgZXhwYW5kIGV4cGFuZHdydCBleHBhbmR3cnRfZmFjdG9yZWQgZXhwaW50IGV4cGludGVncmFsX2NoaSBleHBpbnRlZ3JhbF9jaSBleHBpbnRlZ3JhbF9lIGV4cGludGVncmFsX2UxIGV4cGludGVncmFsX2VpIGV4cGludGVncmFsX2Vfc2ltcGxpZnkgZXhwaW50ZWdyYWxfbGkgZXhwaW50ZWdyYWxfc2hpIGV4cGludGVncmFsX3NpIGV4cGxpY2l0IGV4cGxvc2UgZXhwb25lbnRpYWxpemUgZXhwcmVzcyBleHB0IGV4c2VjIGV4dGRpZmYgZXh0cmFjdF9saW5lYXJfZXF1YXRpb25zIGV4dHJlbWFsX3N1YnNldCBlemdjZCAlZiBmOTAgZmFjc3VtIGZhY3Rjb21iIGZhY3RvciBmYWN0b3JmYWNzdW0gZmFjdG9yaWFsIGZhY3Rvcm91dCBmYWN0b3JzdW0gZmFjdHMgZmFzdF9jZW50cmFsX2VsZW1lbnRzIGZhc3RfbGluc29sdmUgZmFzdHRpbWVzIGZlYXR1cmVwIGZlcm5mYWxlIGZmdCBmaWIgZmlidG9waGkgZmlmdGggZmlsZW5hbWVfbWVyZ2UgZmlsZV9zZWFyY2ggZmlsZV90eXBlIGZpbGxhcnJheSBmaW5kZGUgZmluZF9yb290IGZpbmRfcm9vdF9hYnMgZmluZF9yb290X2Vycm9yIGZpbmRfcm9vdF9yZWwgZmlyc3QgZml4IGZsYXR0ZW4gZmxlbmd0aCBmbG9hdCBmbG9hdG51bXAgZmxvb3IgZmxvd2VyX3NuYXJrIGZsdXNoIGZsdXNoMWRlcml2IGZsdXNoZCBmbHVzaG5kIGZsdXNoX291dHB1dCBmbWluX2NvYnlsYSBmb3JnZXQgZm9ydHJhbiBmb3VyY29zIGZvdXJleHBhbmQgZm91cmllciBmb3VyaWVyX2VsaW0gZm91cmludCBmb3VyaW50Y29zIGZvdXJpbnRzaW4gZm91cnNpbXAgZm91cnNpbiBmb3VydGggZnBvc2l0aW9uIGZyYW1lX2JyYWNrZXQgZnJlZW9mIGZyZXNobGluZSBmcmVzbmVsX2MgZnJlc25lbF9zIGZyb21fYWRqYWNlbmN5X21hdHJpeCBmcnVjaHRfZ3JhcGggZnVsbF9saXN0aWZ5IGZ1bGxtYXAgZnVsbG1hcGwgZnVsbHJhdHNpbXAgZnVsbHJhdHN1YnN0IGZ1bGxzZXRpZnkgZnVuY3NvbHZlIGZ1bmRhbWVudGFsX2RpbWVuc2lvbnMgZnVuZGFtZW50YWxfdW5pdHMgZnVuZGVmIGZ1bm1ha2UgZnVucCBmdiBnMCBnMSBnYW1tYSBnYW1tYV9ncmVlayBnYW1tYV9pbmNvbXBsZXRlIGdhbW1hX2luY29tcGxldGVfZ2VuZXJhbGl6ZWQgZ2FtbWFfaW5jb21wbGV0ZV9yZWd1bGFyaXplZCBnYXVzcyBnYXVzc19hIGdhdXNzX2IgZ2F1c3Nwcm9iIGdjZCBnY2RleCBnY2RpdmlkZSBnY2ZhYyBnY2ZhY3RvciBnZCBnZW5lcmFsaXplZF9sYW1iZXJ0X3cgZ2VuZmFjdCBnZW5fbGFndWVycmUgZ2VubWF0cml4IGdlbnN5bSBnZW9fYW1vcnRpemF0aW9uIGdlb19hbm51aXR5X2Z2IGdlb19hbm51aXR5X3B2IGdlb21hcCBnZW9tZXRyaWMgZ2VvbWV0cmljX21lYW4gZ2Vvc3VtIGdldCBnZXRjdXJyZW50ZGlyZWN0b3J5IGdldF9lZGdlX3dlaWdodCBnZXRlbnYgZ2V0X2x1X2ZhY3RvcnMgZ2V0X291dHB1dF9zdHJlYW1fc3RyaW5nIGdldF9waXhlbCBnZXRfcGxvdF9vcHRpb24gZ2V0X3RleF9lbnZpcm9ubWVudCBnZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQgZ2V0X3ZlcnRleF9sYWJlbCBnZmFjdG9yIGdmYWN0b3JzdW0gZ2dmIGdpcnRoIGdsb2JhbF92YXJpYW5jZXMgZ24gZ251cGxvdF9jbG9zZSBnbnVwbG90X3JlcGxvdCBnbnVwbG90X3Jlc2V0IGdudXBsb3RfcmVzdGFydCBnbnVwbG90X3N0YXJ0IGdvIEdvc3BlciBHb3NwZXJTdW0gZ3IyZCBncjNkIGdyYWRlZiBncmFtc2NobWlkdCBncmFwaDZfZGVjb2RlIGdyYXBoNl9lbmNvZGUgZ3JhcGg2X2V4cG9ydCBncmFwaDZfaW1wb3J0IGdyYXBoX2NlbnRlciBncmFwaF9jaGFycG9seSBncmFwaF9laWdlbnZhbHVlcyBncmFwaF9mbG93IGdyYXBoX29yZGVyIGdyYXBoX3BlcmlwaGVyeSBncmFwaF9wcm9kdWN0IGdyYXBoX3NpemUgZ3JhcGhfdW5pb24gZ3JlYXRfcmhvbWJpY29zaWRvZGVjYWhlZHJvbl9ncmFwaCBncmVhdF9yaG9tYmljdWJvY3RhaGVkcm9uX2dyYXBoIGdyaWRfZ3JhcGggZ3JpbmQgZ3JvYm5lcl9iYXNpcyBncm90emNoX2dyYXBoIGhhbWlsdG9uX2N5Y2xlIGhhbWlsdG9uX3BhdGggaGFua2VsIGhhbmtlbF8xIGhhbmtlbF8yIGhhcm1vbmljIGhhcm1vbmljX21lYW4gaGF2IGhlYXdvb2RfZ3JhcGggaGVybWl0ZSBoZXNzaWFuIGhnZnJlZCBoaWxiZXJ0bWFwIGhpbGJlcnRfbWF0cml4IGhpcG93IGhpc3RvZ3JhbSBoaXN0b2dyYW1fZGVzY3JpcHRpb24gaG9kZ2UgaG9ybmVyIGh5cGVyZ2VvbWV0cmljIGkwIGkxICVpYmVzIGljMSBpYzIgaWNfY29udmVydCBpY2hyMSBpY2hyMiBpY29zYWhlZHJvbl9ncmFwaCBpY29zaWRvZGVjYWhlZHJvbl9ncmFwaCBpY3VydmF0dXJlIGlkZW50IGlkZW50Zm9yIGlkZW50aXR5IGlkaWZmIGlkaW0gaWR1bW15IGllcW4gJWlmIGlmYWN0b3JzIGlmcmFtZXMgaWZzIGlnY2RleCBpZ2VvZGVzaWNfY29vcmRzIGlsdCBpbWFnZSBpbWFncGFydCBpbWV0cmljIGltcGxpY2l0IGltcGxpY2l0X2Rlcml2YXRpdmUgaW1wbGljaXRfcGxvdCBpbmRleGVkX3RlbnNvciBpbmRpY2VzIGluZHVjZWRfc3ViZ3JhcGggaW5mZXJlbmNlcCBpbmZlcmVuY2VfcmVzdWx0IGluZml4IGluZm9fZGlzcGxheSBpbml0X2F0ZW5zb3IgaW5pdF9jdGVuc29yIGluX25laWdoYm9ycyBpbm5lcnByb2R1Y3QgaW5wYXJ0IGlucHJvZCBpbnJ0IGludGVnZXJwIGludGVnZXJfcGFydGl0aW9ucyBpbnRlZ3JhdGUgaW50ZXJzZWN0IGludGVyc2VjdGlvbiBpbnRlcnZhbHAgaW50b3BvaXMgaW50b3N1bSBpbnZhcmlhbnQxIGludmFyaWFudDIgaW52ZXJzZV9mZnQgaW52ZXJzZV9qYWNvYmlfY2QgaW52ZXJzZV9qYWNvYmlfY24gaW52ZXJzZV9qYWNvYmlfY3MgaW52ZXJzZV9qYWNvYmlfZGMgaW52ZXJzZV9qYWNvYmlfZG4gaW52ZXJzZV9qYWNvYmlfZHMgaW52ZXJzZV9qYWNvYmlfbmMgaW52ZXJzZV9qYWNvYmlfbmQgaW52ZXJzZV9qYWNvYmlfbnMgaW52ZXJzZV9qYWNvYmlfc2MgaW52ZXJzZV9qYWNvYmlfc2QgaW52ZXJzZV9qYWNvYmlfc24gaW52ZXJ0IGludmVydF9ieV9hZGpvaW50IGludmVydF9ieV9sdSBpbnZfbW9kIGlyciBpcyBpc19iaWNvbm5lY3RlZCBpc19iaXBhcnRpdGUgaXNfY29ubmVjdGVkIGlzX2RpZ3JhcGggaXNfZWRnZV9pbl9ncmFwaCBpc19ncmFwaCBpc19ncmFwaF9vcl9kaWdyYXBoIGlzaG93IGlzX2lzb21vcnBoaWMgaXNvbGF0ZSBpc29tb3JwaGlzbSBpc19wbGFuYXIgaXNxcnQgaXNyZWFsX3AgaXNfc2Nvbm5lY3RlZCBpc190cmVlIGlzX3ZlcnRleF9pbl9ncmFwaCBpdGVtc19pbmZlcmVuY2UgJWogajAgajEgamFjb2JpIGphY29iaWFuIGphY29iaV9jZCBqYWNvYmlfY24gamFjb2JpX2NzIGphY29iaV9kYyBqYWNvYmlfZG4gamFjb2JpX2RzIGphY29iaV9uYyBqYWNvYmlfbmQgamFjb2JpX25zIGphY29iaV9wIGphY29iaV9zYyBqYWNvYmlfc2QgamFjb2JpX3NuIEpGIGpuIGpvaW4gam9yZGFuIGp1bGlhIGp1bGlhX3NldCBqdWxpYV9zaW4gJWsga2RlbHMga2RlbHRhIGtpbGwga2lsbGNvbnRleHQga29zdGthIGtyb25fZGVsdGEga3JvbmVja2VyX3Byb2R1Y3Qga3VtbWVyX20ga3VtbWVyX3Uga3VydG9zaXMga3VydG9zaXNfYmVybm91bGxpIGt1cnRvc2lzX2JldGEga3VydG9zaXNfYmlub21pYWwga3VydG9zaXNfY2hpMiBrdXJ0b3Npc19jb250aW51b3VzX3VuaWZvcm0ga3VydG9zaXNfZGlzY3JldGVfdW5pZm9ybSBrdXJ0b3Npc19leHAga3VydG9zaXNfZiBrdXJ0b3Npc19nYW1tYSBrdXJ0b3Npc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBrdXJ0b3Npc19nZW9tZXRyaWMga3VydG9zaXNfZ3VtYmVsIGt1cnRvc2lzX2h5cGVyZ2VvbWV0cmljIGt1cnRvc2lzX2xhcGxhY2Uga3VydG9zaXNfbG9naXN0aWMga3VydG9zaXNfbG9nbm9ybWFsIGt1cnRvc2lzX25lZ2F0aXZlX2Jpbm9taWFsIGt1cnRvc2lzX25vbmNlbnRyYWxfY2hpMiBrdXJ0b3Npc19ub25jZW50cmFsX3N0dWRlbnRfdCBrdXJ0b3Npc19ub3JtYWwga3VydG9zaXNfcGFyZXRvIGt1cnRvc2lzX3BvaXNzb24ga3VydG9zaXNfcmF5bGVpZ2gga3VydG9zaXNfc3R1ZGVudF90IGt1cnRvc2lzX3dlaWJ1bGwgbGFiZWwgbGFiZWxzIGxhZ3JhbmdlIGxhZ3VlcnJlIGxhbWJkYSBsYW1iZXJ0X3cgbGFwbGFjZSBsYXBsYWNpYW5fbWF0cml4IGxhc3QgbGJmZ3MgbGMya2R0IGxjaGFycCBsY19sIGxjbSBsY191IGxkZWZpbnQgbGRpc3AgbGRpc3BsYXkgbGVnZW5kcmVfcCBsZWdlbmRyZV9xIGxlaW5zdGVpbiBsZW5ndGggbGV0IGxldHJ1bGVzIGxldHNpbXAgbGV2aV9jaXZpdGEgbGZyZWVvZiBsZ3RyZWlsbGlzIGxocyBsaSBsaWVkaWZmIGxpbWl0IExpbmRzdGVkdCBsaW5lYXIgbGluZWFyaW50ZXJwb2wgbGluZWFyX3Byb2dyYW0gbGluZWFyX3JlZ3Jlc3Npb24gbGluZV9ncmFwaCBsaW5zb2x2ZSBsaXN0YXJyYXkgbGlzdF9jb3JyZWxhdGlvbnMgbGlzdGlmeSBsaXN0X21hdHJpeF9lbnRyaWVzIGxpc3RfbmNfbW9ub21pYWxzIGxpc3RvZnRlbnMgbGlzdG9mdmFycyBsaXN0cCBsbWF4IGxtaW4gbG9hZCBsb2FkZmlsZSBsb2NhbCBsb2NhdGVfbWF0cml4X2VudHJ5IGxvZyBsb2djb250cmFjdCBsb2dfZ2FtbWEgbG9wb3cgbG9yZW50el9nYXVnZSBsb3dlcmNhc2VwIGxwYXJ0IGxyYXRzdWJzdCBscmVkdWNlIGxyaWVtYW5uIGxzcXVhcmVzX2VzdGltYXRlcyBsc3F1YXJlc19lc3RpbWF0ZXNfYXBwcm94aW1hdGUgbHNxdWFyZXNfZXN0aW1hdGVzX2V4YWN0IGxzcXVhcmVzX21zZSBsc3F1YXJlc19yZXNpZHVhbF9tc2UgbHNxdWFyZXNfcmVzaWR1YWxzIGxzdW0gbHRyZWlsbGlzIGx1X2JhY2tzdWIgbHVjYXMgbHVfZmFjdG9yICVtIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kMSBtYWtlX2FycmF5IG1ha2Vib3ggbWFrZWZhY3QgbWFrZWdhbW1hIG1ha2VfZ3JhcGggbWFrZV9sZXZlbF9waWN0dXJlIG1ha2VsaXN0IG1ha2VPcmRlcnMgbWFrZV9wb2x5X2NvbnRpbmVudCBtYWtlX3BvbHlfY291bnRyeSBtYWtlX3BvbHlnb24gbWFrZV9yYW5kb21fc3RhdGUgbWFrZV9yZ2JfcGljdHVyZSBtYWtlc2V0IG1ha2Vfc3RyaW5nX2lucHV0X3N0cmVhbSBtYWtlX3N0cmluZ19vdXRwdXRfc3RyZWFtIG1ha2VfdHJhbnNmb3JtIG1hbmRlbGJyb3QgbWFuZGVsYnJvdF9zZXQgbWFwIG1hcGF0b20gbWFwbGlzdCBtYXRjaGRlY2xhcmUgbWF0Y2hmaXggbWF0X2NvbmQgbWF0X2Z1bGx1bmJsb2NrZXIgbWF0X2Z1bmN0aW9uIG1hdGhtbF9kaXNwbGF5IG1hdF9ub3JtIG1hdHJpeCBtYXRyaXhtYXAgbWF0cml4cCBtYXRyaXhfc2l6ZSBtYXR0cmFjZSBtYXRfdHJhY2UgbWF0X3VuYmxvY2tlciBtYXggbWF4X2NsaXF1ZSBtYXhfZGVncmVlIG1heF9mbG93IG1heGltaXplX2xwIG1heF9pbmRlcGVuZGVudF9zZXQgbWF4X21hdGNoaW5nIG1heWJlIG1kNXN1bSBtZWFuIG1lYW5fYmVybm91bGxpIG1lYW5fYmV0YSBtZWFuX2Jpbm9taWFsIG1lYW5fY2hpMiBtZWFuX2NvbnRpbnVvdXNfdW5pZm9ybSBtZWFuX2RldmlhdGlvbiBtZWFuX2Rpc2NyZXRlX3VuaWZvcm0gbWVhbl9leHAgbWVhbl9mIG1lYW5fZ2FtbWEgbWVhbl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBtZWFuX2dlb21ldHJpYyBtZWFuX2d1bWJlbCBtZWFuX2h5cGVyZ2VvbWV0cmljIG1lYW5fbGFwbGFjZSBtZWFuX2xvZ2lzdGljIG1lYW5fbG9nbm9ybWFsIG1lYW5fbmVnYXRpdmVfYmlub21pYWwgbWVhbl9ub25jZW50cmFsX2NoaTIgbWVhbl9ub25jZW50cmFsX3N0dWRlbnRfdCBtZWFuX25vcm1hbCBtZWFuX3BhcmV0byBtZWFuX3BvaXNzb24gbWVhbl9yYXlsZWlnaCBtZWFuX3N0dWRlbnRfdCBtZWFuX3dlaWJ1bGwgbWVkaWFuIG1lZGlhbl9kZXZpYXRpb24gbWVtYmVyIG1lc2ggbWV0cmljZXhwYW5kYWxsIG1nZjFfc2hhMSBtaW4gbWluX2RlZ3JlZSBtaW5fZWRnZV9jdXQgbWluZmFjdG9yaWFsIG1pbmltYWxQb2x5IG1pbmltaXplX2xwIG1pbmltdW1fc3Bhbm5pbmdfdHJlZSBtaW5vciBtaW5wYWNrX2xzcXVhcmVzIG1pbnBhY2tfc29sdmUgbWluX3ZlcnRleF9jb3ZlciBtaW5fdmVydGV4X2N1dCBta2RpciBtbmV3dG9uIG1vZCBtb2RlX2RlY2xhcmUgbW9kZV9pZGVudGl0eSBNb2RlTWF0cml4IG1vZWJpdXMgbW9uMnNjaHVyIG1vbm8gbW9ub21pYWxfZGltZW5zaW9ucyBtdWx0aWJlcm5zdGVpbl9wb2x5IG11bHRpX2Rpc3BsYXlfZm9yX3RleGluZm8gbXVsdGlfZWxlbSBtdWx0aW5vbWlhbCBtdWx0aW5vbWlhbF9jb2VmZiBtdWx0aV9vcmJpdCBtdWx0aXBsb3RfbW9kZSBtdWx0aV9wdWkgbXVsdHN5bSBtdWx0dGhydSBteWNpZWxza2lfZ3JhcGggbmFyeSBuYXR1cmFsX3VuaXQgbmNfZGVncmVlIG5jZXhwdCBuY2hhcnBvbHkgbmVnYXRpdmVfcGljdHVyZSBuZWlnaGJvcnMgbmV3IG5ld2NvbnRleHQgbmV3ZGV0IG5ld19ncmFwaCBuZXdsaW5lIG5ld3RvbiBuZXdfdmFyaWFibGUgbmV4dF9wcmltZSBuaWNlZHVtbWllcyBuaWNlaW5kaWNlcyBuaW50aCBub2ZpeCBub25hcnJheSBub25jZW50cmFsX21vbWVudCBub25tZXRyaWNpdHkgbm9ubmVnaW50ZWdlcnAgbm9uc2NhbGFycCBub256ZXJvYW5kZnJlZW9mIG5vdGVxdWFsIG5vdW5pZnkgbnB0ZXRyYWQgbnB2IG5yb290cyBudGVybXMgbnRlcm1zdCBudGhyb290IG51bGxpdHkgbnVsbHNwYWNlIG51bSBudW1iZXJlZF9ib3VuZGFyaWVzIG51bWJlcnAgbnVtYmVyX3RvX29jdGV0cyBudW1fZGlzdGluY3RfcGFydGl0aW9ucyBudW1lcnZhbCBudW1mYWN0b3IgbnVtX3BhcnRpdGlvbnMgbnVzdW0gbnpldGEgbnpldGFpIG56ZXRhciBvY3RldHNfdG9fbnVtYmVyIG9jdGV0c190b19vaWQgb2RkX2dpcnRoIG9kZHAgb2RlMiBvZGVfY2hlY2sgb2RlbGluIG9pZF90b19vY3RldHMgb3Agb3BlbmEgb3BlbmFfYmluYXJ5IG9wZW5yIG9wZW5yX2JpbmFyeSBvcGVudyBvcGVud19iaW5hcnkgb3BlcmF0b3JwIG9wc3Vic3Qgb3B0aW1pemUgJW9yIG9yYml0IG9yYml0cyBvcmRlcmdyZWF0IG9yZGVyZ3JlYXRwIG9yZGVybGVzcyBvcmRlcmxlc3NwIG9ydGhvZ29uYWxfY29tcGxlbWVudCBvcnRob3BvbHlfcmVjdXIgb3J0aG9wb2x5X3dlaWdodCBvdXRlcm1hcCBvdXRfbmVpZ2hib3JzIG91dG9mcG9pcyBwYWRlIHBhcmFib2xpY19jeWxpbmRlcl9kIHBhcmFtZXRyaWMgcGFyYW1ldHJpY19zdXJmYWNlIHBhcmcgcGFyR29zcGVyIHBhcnNlX3N0cmluZyBwYXJzZV90aW1lZGF0ZSBwYXJ0IHBhcnQyY29udCBwYXJ0ZnJhYyBwYXJ0aXRpb24gcGFydGl0aW9uX3NldCBwYXJ0cG9sIHBhdGhfZGlncmFwaCBwYXRoX2dyYXBoIHBhdGhuYW1lX2RpcmVjdG9yeSBwYXRobmFtZV9uYW1lIHBhdGhuYW1lX3R5cGUgcGRmX2Jlcm5vdWxsaSBwZGZfYmV0YSBwZGZfYmlub21pYWwgcGRmX2NhdWNoeSBwZGZfY2hpMiBwZGZfY29udGludW91c191bmlmb3JtIHBkZl9kaXNjcmV0ZV91bmlmb3JtIHBkZl9leHAgcGRmX2YgcGRmX2dhbW1hIHBkZl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBwZGZfZ2VvbWV0cmljIHBkZl9ndW1iZWwgcGRmX2h5cGVyZ2VvbWV0cmljIHBkZl9sYXBsYWNlIHBkZl9sb2dpc3RpYyBwZGZfbG9nbm9ybWFsIHBkZl9uZWdhdGl2ZV9iaW5vbWlhbCBwZGZfbm9uY2VudHJhbF9jaGkyIHBkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBwZGZfbm9ybWFsIHBkZl9wYXJldG8gcGRmX3BvaXNzb24gcGRmX3Jhbmtfc3VtIHBkZl9yYXlsZWlnaCBwZGZfc2lnbmVkX3JhbmsgcGRmX3N0dWRlbnRfdCBwZGZfd2VpYnVsbCBwZWFyc29uX3NrZXduZXNzIHBlcm1hbmVudCBwZXJtdXQgcGVybXV0YXRpb24gcGVybXV0YXRpb25zIHBldGVyc2VuX2dyYXBoIHBldHJvdiBwaWNrYXBhcnQgcGljdHVyZV9lcXVhbHAgcGljdHVyZXAgcGllY2hhcnQgcGllY2hhcnRfZGVzY3JpcHRpb24gcGxhbmFyX2VtYmVkZGluZyBwbGF5YmFjayBwbG9nIHBsb3QyZCBwbG90M2QgcGxvdGRmIHBsb3RlcSBwbHNxdWFyZXMgcG9jaGhhbW1lciBwb2ludHMgcG9pc2RpZmYgcG9pc2V4cHQgcG9pc2ludCBwb2lzbWFwIHBvaXNwbHVzIHBvaXNzaW1wIHBvaXNzdWJzdCBwb2lzdGltZXMgcG9pc3RyaW0gcG9sYXIgcG9sYXJmb3JtIHBvbGFydG9yZWN0IHBvbGFyX3RvX3h5IHBvbHlfYWRkIHBvbHlfYnVjaGJlcmdlciBwb2x5X2J1Y2hiZXJnZXJfY3JpdGVyaW9uIHBvbHlfY29sb25faWRlYWwgcG9seV9jb250ZW50IHBvbHlkZWNvbXAgcG9seV9kZXBlbmRzX3AgcG9seV9lbGltaW5hdGlvbl9pZGVhbCBwb2x5X2V4YWN0X2RpdmlkZSBwb2x5X2V4cGFuZCBwb2x5X2V4cHQgcG9seV9nY2QgcG9seWdvbiBwb2x5X2dyb2JuZXIgcG9seV9ncm9ibmVyX2VxdWFsIHBvbHlfZ3JvYm5lcl9tZW1iZXIgcG9seV9ncm9ibmVyX3N1YnNldHAgcG9seV9pZGVhbF9pbnRlcnNlY3Rpb24gcG9seV9pZGVhbF9wb2x5c2F0dXJhdGlvbiBwb2x5X2lkZWFsX3BvbHlzYXR1cmF0aW9uMSBwb2x5X2lkZWFsX3NhdHVyYXRpb24gcG9seV9pZGVhbF9zYXR1cmF0aW9uMSBwb2x5X2xjbSBwb2x5X21pbmltaXphdGlvbiBwb2x5bW9kIHBvbHlfbXVsdGlwbHkgcG9seW5vbWUyZWxlIHBvbHlub21pYWxwIHBvbHlfbm9ybWFsX2Zvcm0gcG9seV9ub3JtYWxpemUgcG9seV9ub3JtYWxpemVfbGlzdCBwb2x5X3BvbHlzYXR1cmF0aW9uX2V4dGVuc2lvbiBwb2x5X3ByaW1pdGl2ZV9wYXJ0IHBvbHlfcHNldWRvX2RpdmlkZSBwb2x5X3JlZHVjZWRfZ3JvYm5lciBwb2x5X3JlZHVjdGlvbiBwb2x5X3NhdHVyYXRpb25fZXh0ZW5zaW9uIHBvbHlfc19wb2x5bm9taWFsIHBvbHlfc3VidHJhY3QgcG9seXRvY29tcGFuaW9uIHBvcCBwb3N0Zml4IHBvdGVudGlhbCBwb3dlcl9tb2QgcG93ZXJzZXJpZXMgcG93ZXJzZXQgcHJlZml4IHByZXZfcHJpbWUgcHJpbWVwIHByaW1lcyBwcmluY2lwYWxfY29tcG9uZW50cyBwcmludCBwcmludGYgcHJpbnRmaWxlIHByaW50X2dyYXBoIHByaW50cG9pcyBwcmludHByb3BzIHByb2RyYWMgcHJvZHVjdCBwcm9wZXJ0aWVzIHByb3B2YXJzIHBzaSBwc3Vic3QgcHRyaWFuZ3VsYXJpemUgcHVpIHB1aTJjb21wIHB1aTJlbGUgcHVpMnBvbHlub21lIHB1aV9kaXJlY3QgcHVpcmVkdWMgcHVzaCBwdXQgcHYgcXB1dCBxcmFuZ2UgcXR5IHF1YWRfY29udHJvbCBxdWFkX3FhZyBxdWFkX3FhZ2kgcXVhZF9xYWdwIHF1YWRfcWFncyBxdWFkX3Fhd2MgcXVhZF9xYXdmIHF1YWRfcWF3byBxdWFkX3Fhd3MgcXVhZHJpbGF0ZXJhbCBxdWFudGlsZSBxdWFudGlsZV9iZXJub3VsbGkgcXVhbnRpbGVfYmV0YSBxdWFudGlsZV9iaW5vbWlhbCBxdWFudGlsZV9jYXVjaHkgcXVhbnRpbGVfY2hpMiBxdWFudGlsZV9jb250aW51b3VzX3VuaWZvcm0gcXVhbnRpbGVfZGlzY3JldGVfdW5pZm9ybSBxdWFudGlsZV9leHAgcXVhbnRpbGVfZiBxdWFudGlsZV9nYW1tYSBxdWFudGlsZV9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBxdWFudGlsZV9nZW9tZXRyaWMgcXVhbnRpbGVfZ3VtYmVsIHF1YW50aWxlX2h5cGVyZ2VvbWV0cmljIHF1YW50aWxlX2xhcGxhY2UgcXVhbnRpbGVfbG9naXN0aWMgcXVhbnRpbGVfbG9nbm9ybWFsIHF1YW50aWxlX25lZ2F0aXZlX2Jpbm9taWFsIHF1YW50aWxlX25vbmNlbnRyYWxfY2hpMiBxdWFudGlsZV9ub25jZW50cmFsX3N0dWRlbnRfdCBxdWFudGlsZV9ub3JtYWwgcXVhbnRpbGVfcGFyZXRvIHF1YW50aWxlX3BvaXNzb24gcXVhbnRpbGVfcmF5bGVpZ2ggcXVhbnRpbGVfc3R1ZGVudF90IHF1YW50aWxlX3dlaWJ1bGwgcXVhcnRpbGVfc2tld25lc3MgcXVpdCBxdW5pdCBxdW90aWVudCByYWNhaF92IHJhY2FoX3cgcmFkY2FuIHJhZGl1cyByYW5kb20gcmFuZG9tX2Jlcm5vdWxsaSByYW5kb21fYmV0YSByYW5kb21fYmlub21pYWwgcmFuZG9tX2JpcGFydGl0ZV9ncmFwaCByYW5kb21fY2F1Y2h5IHJhbmRvbV9jaGkyIHJhbmRvbV9jb250aW51b3VzX3VuaWZvcm0gcmFuZG9tX2RpZ3JhcGggcmFuZG9tX2Rpc2NyZXRlX3VuaWZvcm0gcmFuZG9tX2V4cCByYW5kb21fZiByYW5kb21fZ2FtbWEgcmFuZG9tX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHJhbmRvbV9nZW9tZXRyaWMgcmFuZG9tX2dyYXBoIHJhbmRvbV9ncmFwaDEgcmFuZG9tX2d1bWJlbCByYW5kb21faHlwZXJnZW9tZXRyaWMgcmFuZG9tX2xhcGxhY2UgcmFuZG9tX2xvZ2lzdGljIHJhbmRvbV9sb2dub3JtYWwgcmFuZG9tX25lZ2F0aXZlX2Jpbm9taWFsIHJhbmRvbV9uZXR3b3JrIHJhbmRvbV9ub25jZW50cmFsX2NoaTIgcmFuZG9tX25vbmNlbnRyYWxfc3R1ZGVudF90IHJhbmRvbV9ub3JtYWwgcmFuZG9tX3BhcmV0byByYW5kb21fcGVybXV0YXRpb24gcmFuZG9tX3BvaXNzb24gcmFuZG9tX3JheWxlaWdoIHJhbmRvbV9yZWd1bGFyX2dyYXBoIHJhbmRvbV9zdHVkZW50X3QgcmFuZG9tX3RvdXJuYW1lbnQgcmFuZG9tX3RyZWUgcmFuZG9tX3dlaWJ1bGwgcmFuZ2UgcmFuayByYXQgcmF0Y29lZiByYXRkZW5vbSByYXRkaWZmIHJhdGRpc3JlcCByYXRleHBhbmQgcmF0aW50ZXJwb2wgcmF0aW9uYWwgcmF0aW9uYWxpemUgcmF0bnVtZXIgcmF0bnVtcCByYXRwIHJhdHNpbXAgcmF0c3Vic3QgcmF0dmFycyByYXR3ZWlnaHQgcmVhZCByZWFkX2FycmF5IHJlYWRfYmluYXJ5X2FycmF5IHJlYWRfYmluYXJ5X2xpc3QgcmVhZF9iaW5hcnlfbWF0cml4IHJlYWRieXRlIHJlYWRjaGFyIHJlYWRfaGFzaGVkX2FycmF5IHJlYWRsaW5lIHJlYWRfbGlzdCByZWFkX21hdHJpeCByZWFkX25lc3RlZF9saXN0IHJlYWRvbmx5IHJlYWRfeHBtIHJlYWxfaW1hZ3BhcnRfdG9fY29uanVnYXRlIHJlYWxwYXJ0IHJlYWxyb290cyByZWFycmF5IHJlY3RhbmdsZSByZWN0Zm9ybSByZWN0Zm9ybV9sb2dfaWZfY29uc3RhbnQgcmVjdHRvcG9sYXIgcmVkaWZmIHJlZHVjZV9jb25zdHMgcmVkdWNlX29yZGVyIHJlZ2lvbiByZWdpb25fYm91bmRhcmllcyByZWdpb25fYm91bmRhcmllc19wbHVzIHJlbSByZW1haW5kZXIgcmVtYXJyYXkgcmVtYm94IHJlbWNvbXBzIHJlbWNvbiByZW1jb29yZCByZW1mdW4gcmVtZnVuY3Rpb24gcmVtbGV0IHJlbW92ZSByZW1vdmVfY29uc3R2YWx1ZSByZW1vdmVfZGltZW5zaW9ucyByZW1vdmVfZWRnZSByZW1vdmVfZnVuZGFtZW50YWxfZGltZW5zaW9ucyByZW1vdmVfZnVuZGFtZW50YWxfdW5pdHMgcmVtb3ZlX3Bsb3Rfb3B0aW9uIHJlbW92ZV92ZXJ0ZXggcmVtcGFydCByZW1ydWxlIHJlbXN5bSByZW12YWx1ZSByZW5hbWUgcmVuYW1lX2ZpbGUgcmVzZXQgcmVzZXRfZGlzcGxheXMgcmVzaWR1ZSByZXNvbHZhbnRlIHJlc29sdmFudGVfYWx0ZXJuZWUxIHJlc29sdmFudGVfYmlwYXJ0aXRlIHJlc29sdmFudGVfZGllZHJhbGUgcmVzb2x2YW50ZV9rbGVpbiByZXNvbHZhbnRlX2tsZWluMyByZXNvbHZhbnRlX3Byb2R1aXRfc3ltIHJlc29sdmFudGVfdW5pdGFpcmUgcmVzb2x2YW50ZV92aWVyZXIgcmVzdCByZXN1bHRhbnQgcmV0dXJuIHJldmVhbCByZXZlcnNlIHJldmVydCByZXZlcnQyIHJnYjJsZXZlbCByaHMgcmljY2kgcmllbWFubiByaW52YXJpYW50IHJpc2NoIHJrIHJtZGlyIHJuY29tYmluZSByb21iZXJnIHJvb20gcm9vdHNjb250cmFjdCByb3VuZCByb3cgcm93b3Agcm93c3dhcCBycmVkdWNlIHJ1bl90ZXN0c3VpdGUgJXMgc2F2ZSBzYXZpbmcgc2NhbGFycCBzY2FsZWRfYmVzc2VsX2kgc2NhbGVkX2Jlc3NlbF9pMCBzY2FsZWRfYmVzc2VsX2kxIHNjYWxlZmFjdG9ycyBzY2FubWFwIHNjYXR0ZXJwbG90IHNjYXR0ZXJwbG90X2Rlc2NyaXB0aW9uIHNjZW5lIHNjaHVyMmNvbXAgc2NvbmNhdCBzY29weSBzY3NpbXAgc2N1cnZhdHVyZSBzZG93bmNhc2Ugc2VjIHNlY2ggc2Vjb25kIHNlcXVhbCBzZXF1YWxpZ25vcmUgc2V0X2FsdF9kaXNwbGF5IHNldGRpZmZlcmVuY2Ugc2V0X2RyYXdfZGVmYXVsdHMgc2V0X2VkZ2Vfd2VpZ2h0IHNldGVsbXggc2V0ZXF1YWxwIHNldGlmeSBzZXRwIHNldF9wYXJ0aXRpb25zIHNldF9wbG90X29wdGlvbiBzZXRfcHJvbXB0IHNldF9yYW5kb21fc3RhdGUgc2V0X3RleF9lbnZpcm9ubWVudCBzZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQgc2V0dW5pdHMgc2V0dXBfYXV0b2xvYWQgc2V0X3VwX2RvdF9zaW1wbGlmaWNhdGlvbnMgc2V0X3ZlcnRleF9sYWJlbCBzZXZlbnRoIHNleHBsb2RlIHNmIHNoYTFzdW0gc2hhMjU2c3VtIHNob3J0ZXN0X3BhdGggc2hvcnRlc3Rfd2VpZ2h0ZWRfcGF0aCBzaG93IHNob3djb21wcyBzaG93cmF0dmFycyBzaWVycGluc2tpYWxlIHNpZXJwaW5za2ltYXAgc2lnbiBzaWdudW0gc2ltaWxhcml0eXRyYW5zZm9ybSBzaW1wX2luZXF1YWxpdHkgc2ltcGxpZnlfc3VtIHNpbXBsb2RlIHNpbXBtZXRkZXJpdiBzaW10cmFuIHNpbiBzaW5oIHNpbnNlcnQgc2ludmVydGNhc2Ugc2l4dGggc2tld25lc3Mgc2tld25lc3NfYmVybm91bGxpIHNrZXduZXNzX2JldGEgc2tld25lc3NfYmlub21pYWwgc2tld25lc3NfY2hpMiBza2V3bmVzc19jb250aW51b3VzX3VuaWZvcm0gc2tld25lc3NfZGlzY3JldGVfdW5pZm9ybSBza2V3bmVzc19leHAgc2tld25lc3NfZiBza2V3bmVzc19nYW1tYSBza2V3bmVzc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBza2V3bmVzc19nZW9tZXRyaWMgc2tld25lc3NfZ3VtYmVsIHNrZXduZXNzX2h5cGVyZ2VvbWV0cmljIHNrZXduZXNzX2xhcGxhY2Ugc2tld25lc3NfbG9naXN0aWMgc2tld25lc3NfbG9nbm9ybWFsIHNrZXduZXNzX25lZ2F0aXZlX2Jpbm9taWFsIHNrZXduZXNzX25vbmNlbnRyYWxfY2hpMiBza2V3bmVzc19ub25jZW50cmFsX3N0dWRlbnRfdCBza2V3bmVzc19ub3JtYWwgc2tld25lc3NfcGFyZXRvIHNrZXduZXNzX3BvaXNzb24gc2tld25lc3NfcmF5bGVpZ2ggc2tld25lc3Nfc3R1ZGVudF90IHNrZXduZXNzX3dlaWJ1bGwgc2xlbmd0aCBzbWFrZSBzbWFsbF9yaG9tYmljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIHNtYWxsX3Job21iaWN1Ym9jdGFoZWRyb25fZ3JhcGggc21heCBzbWluIHNtaXNtYXRjaCBzbm93bWFwIHNudWJfY3ViZV9ncmFwaCBzbnViX2RvZGVjYWhlZHJvbl9ncmFwaCBzb2x2ZSBzb2x2ZV9yZWMgc29sdmVfcmVjX3JhdCBzb21lIHNvbXJhYyBzb3J0IHNwYXJzZTZfZGVjb2RlIHNwYXJzZTZfZW5jb2RlIHNwYXJzZTZfZXhwb3J0IHNwYXJzZTZfaW1wb3J0IHNwZWNpbnQgc3BoZXJpY2FsIHNwaGVyaWNhbF9iZXNzZWxfaiBzcGhlcmljYWxfYmVzc2VsX3kgc3BoZXJpY2FsX2hhbmtlbDEgc3BoZXJpY2FsX2hhbmtlbDIgc3BoZXJpY2FsX2hhcm1vbmljIHNwaGVyaWNhbF90b194eXogc3BsaWNlIHNwbGl0IHNwb3NpdGlvbiBzcHJpbnQgc3FmciBzcXJ0IHNxcnRkZW5lc3Qgc3JlbW92ZSBzcmVtb3ZlZmlyc3Qgc3JldmVyc2Ugc3NlYXJjaCBzc29ydCBzc3RhdHVzIHNzdWJzdCBzc3Vic3RmaXJzdCBzdGFpcmNhc2Ugc3RhbmRhcmRpemUgc3RhbmRhcmRpemVfaW52ZXJzZV90cmlnIHN0YXJwbG90IHN0YXJwbG90X2Rlc2NyaXB0aW9uIHN0YXR1cyBzdGQgc3RkMSBzdGRfYmVybm91bGxpIHN0ZF9iZXRhIHN0ZF9iaW5vbWlhbCBzdGRfY2hpMiBzdGRfY29udGludW91c191bmlmb3JtIHN0ZF9kaXNjcmV0ZV91bmlmb3JtIHN0ZF9leHAgc3RkX2Ygc3RkX2dhbW1hIHN0ZF9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBzdGRfZ2VvbWV0cmljIHN0ZF9ndW1iZWwgc3RkX2h5cGVyZ2VvbWV0cmljIHN0ZF9sYXBsYWNlIHN0ZF9sb2dpc3RpYyBzdGRfbG9nbm9ybWFsIHN0ZF9uZWdhdGl2ZV9iaW5vbWlhbCBzdGRfbm9uY2VudHJhbF9jaGkyIHN0ZF9ub25jZW50cmFsX3N0dWRlbnRfdCBzdGRfbm9ybWFsIHN0ZF9wYXJldG8gc3RkX3BvaXNzb24gc3RkX3JheWxlaWdoIHN0ZF9zdHVkZW50X3Qgc3RkX3dlaWJ1bGwgc3RlbXBsb3Qgc3Rpcmxpbmcgc3RpcmxpbmcxIHN0aXJsaW5nMiBzdHJpbSBzdHJpbWwgc3RyaW1yIHN0cmluZyBzdHJpbmdvdXQgc3RyaW5ncCBzdHJvbmdfY29tcG9uZW50cyBzdHJ1dmVfaCBzdHJ1dmVfbCBzdWJsaXMgc3VibGlzdCBzdWJsaXN0X2luZGljZXMgc3VibWF0cml4IHN1YnNhbXBsZSBzdWJzZXQgc3Vic2V0cCBzdWJzdCBzdWJzdGlucGFydCBzdWJzdF9wYXJhbGxlbCBzdWJzdHBhcnQgc3Vic3RyaW5nIHN1YnZhciBzdWJ2YXJwIHN1bSBzdW1jb250cmFjdCBzdW1tYW5kX3RvX3JlYyBzdXBjYXNlIHN1cGNvbnRleHQgc3ltYm9scCBzeW1tZGlmZmVyZW5jZSBzeW1tZXRyaWNwIHN5c3RlbSB0YWtlX2NoYW5uZWwgdGFrZV9pbmZlcmVuY2UgdGFuIHRhbmggdGF5bG9yIHRheWxvcmluZm8gdGF5bG9ycCB0YXlsb3Jfc2ltcGxpZmllciB0YXl0b3JhdCB0Y2xfb3V0cHV0IHRjb250cmFjdCB0ZWxscmF0IHRlbGxzaW1wIHRlbGxzaW1wYWZ0ZXIgdGVudGV4IHRlbnRoIHRlc3RfbWVhbiB0ZXN0X21lYW5zX2RpZmZlcmVuY2UgdGVzdF9ub3JtYWxpdHkgdGVzdF9wcm9wb3J0aW9uIHRlc3RfcHJvcG9ydGlvbnNfZGlmZmVyZW5jZSB0ZXN0X3Jhbmtfc3VtIHRlc3Rfc2lnbiB0ZXN0X3NpZ25lZF9yYW5rIHRlc3RfdmFyaWFuY2UgdGVzdF92YXJpYW5jZV9yYXRpbyB0ZXggdGV4MSB0ZXhfZGlzcGxheSB0ZXhwdXQgJXRoIHRoaXJkIHRocm93IHRpbWUgdGltZWRhdGUgdGltZXIgdGltZXJfaW5mbyB0bGRlZmludCB0bGltaXQgdG9kZF9jb3hldGVyIHRvZXBsaXR6IHRva2VucyB0b19saXNwIHRvcG9sb2dpY2FsX3NvcnQgdG9fcG9seSB0b19wb2x5X3NvbHZlIHRvdGFsZGlzcmVwIHRvdGFsZm91cmllciB0b3RpZW50IHRwYXJ0cG9sIHRyYWNlIHRyYWNlbWF0cml4IHRyYWNlX29wdGlvbnMgdHJhbnNmb3JtX3NhbXBsZSB0cmFuc2xhdGUgdHJhbnNsYXRlX2ZpbGUgdHJhbnNwb3NlIHRyZWVmYWxlIHRyZWVfcmVkdWNlIHRyZWlsbGlzIHRyZWluYXQgdHJpYW5nbGUgdHJpYW5ndWxhcml6ZSB0cmlnZXhwYW5kIHRyaWdyYXQgdHJpZ3JlZHVjZSB0cmlnc2ltcCB0cnVuYyB0cnVuY2F0ZSB0cnVuY2F0ZWRfY3ViZV9ncmFwaCB0cnVuY2F0ZWRfZG9kZWNhaGVkcm9uX2dyYXBoIHRydW5jYXRlZF9pY29zYWhlZHJvbl9ncmFwaCB0cnVuY2F0ZWRfdGV0cmFoZWRyb25fZ3JhcGggdHJfd2FybmluZ3NfZ2V0IHR1YmUgdHV0dGVfZ3JhcGggdWVpdmVjdHMgdWZvcmdldCB1bHRyYXNwaGVyaWNhbCB1bmRlcmx5aW5nX2dyYXBoIHVuZGlmZiB1bmlvbiB1bmlxdWUgdW5pdGVpZ2VudmVjdG9ycyB1bml0cCB1bml0cyB1bml0X3N0ZXAgdW5pdHZlY3RvciB1bm9yZGVyIHVuc3VtIHVudGVsbHJhdCB1bnRpbWVyIHVudHJhY2UgdXBwZXJjYXNlcCB1cmljY2kgdXJpZW1hbm4gdXZlY3QgdmFuZGVybW9uZGVfbWF0cml4IHZhciB2YXIxIHZhcl9iZXJub3VsbGkgdmFyX2JldGEgdmFyX2Jpbm9taWFsIHZhcl9jaGkyIHZhcl9jb250aW51b3VzX3VuaWZvcm0gdmFyX2Rpc2NyZXRlX3VuaWZvcm0gdmFyX2V4cCB2YXJfZiB2YXJfZ2FtbWEgdmFyX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHZhcl9nZW9tZXRyaWMgdmFyX2d1bWJlbCB2YXJfaHlwZXJnZW9tZXRyaWMgdmFyX2xhcGxhY2UgdmFyX2xvZ2lzdGljIHZhcl9sb2dub3JtYWwgdmFyX25lZ2F0aXZlX2Jpbm9taWFsIHZhcl9ub25jZW50cmFsX2NoaTIgdmFyX25vbmNlbnRyYWxfc3R1ZGVudF90IHZhcl9ub3JtYWwgdmFyX3BhcmV0byB2YXJfcG9pc3NvbiB2YXJfcmF5bGVpZ2ggdmFyX3N0dWRlbnRfdCB2YXJfd2VpYnVsbCB2ZWN0b3IgdmVjdG9ycG90ZW50aWFsIHZlY3RvcnNpbXAgdmVyYmlmeSB2ZXJzIHZlcnRleF9jb2xvcmluZyB2ZXJ0ZXhfY29ubmVjdGl2aXR5IHZlcnRleF9kZWdyZWUgdmVydGV4X2Rpc3RhbmNlIHZlcnRleF9lY2NlbnRyaWNpdHkgdmVydGV4X2luX2RlZ3JlZSB2ZXJ0ZXhfb3V0X2RlZ3JlZSB2ZXJ0aWNlcyB2ZXJ0aWNlc190b19jeWNsZSB2ZXJ0aWNlc190b19wYXRoICV3IHdleWwgd2hlZWxfZ3JhcGggd2llbmVyX2luZGV4IHdpZ25lcl8zaiB3aWduZXJfNmogd2lnbmVyXzlqIHdpdGhfc3Rkb3V0IHdyaXRlX2JpbmFyeV9kYXRhIHdyaXRlYnl0ZSB3cml0ZV9kYXRhIHdyaXRlZmlsZSB3cm9uc2tpYW4geHJlZHVjZSB4dGhydSAleSBaZWlsYmVyZ2VyIHplcm9lcXVpdiB6ZXJvZm9yIHplcm9tYXRyaXggemVyb21hdHJpeHAgemV0YSB6Z2VldiB6aGVldiB6bGFuZ2Ugem5fYWRkX3RhYmxlIHpuX2Nhcm1pY2hhZWxfbGFtYmRhIHpuX2NoYXJhY3RlcmlzdGljX2ZhY3RvcnMgem5fZGV0ZXJtaW5hbnQgem5fZmFjdG9yX2dlbmVyYXRvcnMgem5faW52ZXJ0X2J5X2x1IHpuX2xvZyB6bl9tdWx0X3RhYmxlIGFic2JveGNoYXIgYWN0aXZlY29udGV4dHMgYWRhcHRfZGVwdGggYWRkaXRpdmUgYWRpbSBhZm9ybSBhbGdlYnJhaWMgYWxnZXBzaWxvbiBhbGdleGFjdCBhbGlhc2VzIGFsbGJ1dCBhbGxfZG90c2ltcF9kZW5vbXMgYWxsb2NhdGlvbiBhbGxzeW0gYWxwaGFiZXRpYyBhbmltYXRpb24gYW50aXN5bW1ldHJpYyBhcnJheXMgYXNrZXhwIGFzc3VtZV9wb3MgYXNzdW1lX3Bvc19wcmVkIGFzc3VtZXNjYWxhciBhc3ltYm9sIGF0b21ncmFkIGF0cmlnMSBheGVzIGF4aXNfM2QgYXhpc19ib3R0b20gYXhpc19sZWZ0IGF4aXNfcmlnaHQgYXhpc190b3AgYXppbXV0aCBiYWNrZ3JvdW5kIGJhY2tncm91bmRfY29sb3IgYmFja3N1YnN0IGJlcmxlZmFjdCBiZXJuc3RlaW5fZXhwbGljaXQgYmVzc2VsZXhwYW5kIGJldGFfYXJnc19zdW1fdG9faW50ZWdlciBiZXRhX2V4cGFuZCBiZnRvcmF0IGJmdHJ1bmMgYmluZHRlc3QgYm9yZGVyIGJvdW5kYXJpZXNfYXJyYXkgYm94IGJveGNoYXIgYnJlYWt1cCAlYyBjYXBwaW5nIGNhdWNoeXN1bSBjYnJhbmdlIGNidGljcyBjZW50ZXIgY2ZsZW5ndGggY2ZyYW1lX2ZsYWcgY25vbm1ldF9mbGFnIGNvbG9yIGNvbG9yX2JhciBjb2xvcl9iYXJfdGljcyBjb2xvcmJveCBjb2x1bW5zIGNvbW11dGF0aXZlIGNvbXBsZXggY29uZSBjb250ZXh0IGNvbnRleHRzIGNvbnRvdXIgY29udG91cl9sZXZlbHMgY29zbnBpZmxhZyBjdGF5cG92IGN0YXlwdCBjdGF5c3dpdGNoIGN0YXl2YXIgY3RfY29vcmRzIGN0b3JzaW9uX2ZsYWcgY3RyZ3NpbXAgY3ViZSBjdXJyZW50X2xldF9ydWxlX3BhY2thZ2UgY3lsaW5kZXIgZGF0YV9maWxlX25hbWUgZGVidWdtb2RlIGRlY3JlYXNpbmcgZGVmYXVsdF9sZXRfcnVsZV9wYWNrYWdlIGRlbGF5IGRlcGVuZGVuY2llcyBkZXJpdmFiYnJldiBkZXJpdnN1YnN0IGRldG91dCBkaWFnbWV0cmljIGRpZmYgZGltIGRpbWVuc2lvbnMgZGlzcGZsYWcgZGlzcGxheTJkfDEwIGRpc3BsYXlfZm9ybWF0X2ludGVybmFsIGRpc3RyaWJ1dGVfb3ZlciBkb2FsbG14b3BzIGRvbWFpbiBkb214ZXhwdCBkb214bXhvcHMgZG9teG5jdGltZXMgZG9udGZhY3RvciBkb3NjbXhvcHMgZG9zY214cGx1cyBkb3QwbnNjc2ltcCBkb3Qwc2ltcCBkb3Qxc2ltcCBkb3Rhc3NvYyBkb3Rjb25zdHJ1bGVzIGRvdGRpc3RyaWIgZG90ZXhwdHNpbXAgZG90aWRlbnQgZG90c2NydWxlcyBkcmF3X2dyYXBoX3Byb2dyYW0gZHJhd19yZWFscGFydCBlZGdlX2NvbG9yIGVkZ2VfY29sb3JpbmcgZWRnZV9wYXJ0aXRpb24gZWRnZV90eXBlIGVkZ2Vfd2lkdGggJWVkaXNwZmxhZyBlbGV2YXRpb24gJWVtb2RlIGVuZHBoaSBlbmR0aGV0YSBlbmdpbmVlcmluZ19mb3JtYXRfZmxvYXRzIGVuaGFuY2VkM2QgJWVudW1lciBlcHNpbG9uX2xwIGVyZmZsYWcgZXJmX3JlcHJlc2VudGF0aW9uIGVycm9ybXNnIGVycm9yX3NpemUgZXJyb3Jfc3ltcyBlcnJvcl90eXBlICVlX3RvX251bWxvZyBldmFsIGV2ZW4gZXZlbmZ1biBldmZsYWcgZXZmdW4gZXZfcG9pbnQgZXhwYW5kd3J0X2Rlbm9tIGV4cGludGV4cGFuZCBleHBpbnRyZXAgZXhwb24gZXhwb3AgZXhwdGRpc3BmbGFnIGV4cHRpc29sYXRlIGV4cHRzdWJzdCBmYWNleHBhbmQgZmFjc3VtX2NvbWJpbmUgZmFjdGxpbSBmYWN0b3JmbGFnIGZhY3RvcmlhbF9leHBhbmQgZmFjdG9yc19vbmx5IGZiIGZlYXR1cmUgZmVhdHVyZXMgZmlsZV9uYW1lIGZpbGVfb3V0cHV0X2FwcGVuZCBmaWxlX3NlYXJjaF9kZW1vIGZpbGVfc2VhcmNoX2xpc3AgZmlsZV9zZWFyY2hfbWF4aW1hfDEwIGZpbGVfc2VhcmNoX3Rlc3RzIGZpbGVfc2VhcmNoX3VzYWdlIGZpbGVfdHlwZV9saXNwIGZpbGVfdHlwZV9tYXhpbWF8MTAgZmlsbF9jb2xvciBmaWxsX2RlbnNpdHkgZmlsbGVkX2Z1bmMgZml4ZWRfdmVydGljZXMgZmxpcGZsYWcgZmxvYXQyYmYgZm9udCBmb250X3NpemUgZm9ydGluZGVudCBmb3J0c3BhY2VzIGZwcHJlYyBmcHByaW50cHJlYyBmdW5jdGlvbnMgZ2FtbWFfZXhwYW5kIGdhbW1hbGltIGdkZXQgZ2VuaW5kZXggZ2Vuc3VtbnVtIEdHRkNGTUFYIEdHRklORklOSVRZIGdsb2JhbHNvbHZlIGdudXBsb3RfY29tbWFuZCBnbnVwbG90X2N1cnZlX3N0eWxlcyBnbnVwbG90X2N1cnZlX3RpdGxlcyBnbnVwbG90X2RlZmF1bHRfdGVybV9jb21tYW5kIGdudXBsb3RfZHVtYl90ZXJtX2NvbW1hbmQgZ251cGxvdF9maWxlX2FyZ3MgZ251cGxvdF9maWxlX25hbWUgZ251cGxvdF9vdXRfZmlsZSBnbnVwbG90X3BkZl90ZXJtX2NvbW1hbmQgZ251cGxvdF9wbTNkIGdudXBsb3RfcG5nX3Rlcm1fY29tbWFuZCBnbnVwbG90X3Bvc3RhbWJsZSBnbnVwbG90X3ByZWFtYmxlIGdudXBsb3RfcHNfdGVybV9jb21tYW5kIGdudXBsb3Rfc3ZnX3Rlcm1fY29tbWFuZCBnbnVwbG90X3Rlcm0gZ251cGxvdF92aWV3X2FyZ3MgR29zcGVyX2luX1plaWxiZXJnZXIgZ3JhZGVmcyBncmlkIGdyaWQyZCBncmluZCBoYWxmYW5nbGVzIGhlYWRfYW5nbGUgaGVhZF9ib3RoIGhlYWRfbGVuZ3RoIGhlYWRfdHlwZSBoZWlnaHQgaHlwZXJnZW9tZXRyaWNfcmVwcmVzZW50YXRpb24gJWlhcmdzIGliYXNlIGljYzEgaWNjMiBpY291bnRlciBpZHVtbXl4IGllcW5wcmludCBpZmIgaWZjMSBpZmMyIGlmZyBpZmdpIGlmciBpZnJhbWVfYnJhY2tldF9mb3JtIGlmcmkgaWdlb3dlZGdlX2ZsYWcgaWt0MSBpa3QyIGltYWdpbmFyeSBpbmNoYXIgaW5jcmVhc2luZyBpbmZldmFsIGluZmluaXR5IGluZmxhZyBpbmZvbGlzdHMgaW5tIGlubWMxIGlubWMyIGludGFuYWx5c2lzIGludGVnZXIgaW50ZWdlcnZhbHVlZCBpbnRlZ3JhdGVfdXNlX3Jvb3Rzb2YgaW50ZWdyYXRpb25fY29uc3RhbnQgaW50ZWdyYXRpb25fY29uc3RhbnRfY291bnRlciBpbnRlcnBvbGF0ZV9jb2xvciBpbnRmYWNsaW0gaXBfZ3JpZCBpcF9ncmlkX2luIGlycmF0aW9uYWwgaXNvbGF0ZV93cnRfdGltZXMgaXRlcmF0aW9ucyBpdHIganVsaWFfcGFyYW1ldGVyICVrMSAlazIga2VlcGZsb2F0IGtleSBrZXlfcG9zIGtpbnZhcmlhbnQga3QgbGFiZWwgbGFiZWxfYWxpZ25tZW50IGxhYmVsX29yaWVudGF0aW9uIGxhYmVscyBsYXNzb2NpYXRpdmUgbGJmZ3NfbmNvcnJlY3Rpb25zIGxiZmdzX25mZXZhbF9tYXggbGVmdGp1c3QgbGVnZW5kIGxldHJhdCBsZXRfcnVsZV9wYWNrYWdlcyBsZmcgbGcgbGhvc3BpdGFsbGltIGxpbXN1YnN0IGxpbmVhciBsaW5lYXJfc29sdmVyIGxpbmVjaGFyIGxpbmVsfDEwIGxpbmVudW0gbGluZV90eXBlIGxpbmV3aWR0aCBsaW5lX3dpZHRoIGxpbnNvbHZlX3BhcmFtcyBsaW5zb2x2ZXdhcm4gbGlzcGRpc3AgbGlzdGFyaXRoIGxpc3Rjb25zdHZhcnMgbGlzdGR1bW15dmFycyBsbXhjaGFyIGxvYWRfcGF0aG5hbWUgbG9hZHByaW50IGxvZ2FicyBsb2dhcmMgbG9nY2IgbG9nY29uY29lZmZwIGxvZ2V4cGFuZCBsb2duZWdpbnQgbG9nc2ltcCBsb2d4IGxvZ3hfc2Vjb25kYXJ5IGxvZ3kgbG9neV9zZWNvbmRhcnkgbG9neiBscmllbSBtMXBicmFuY2ggbWFjcm9leHBhbnNpb24gbWFjcm9zIG1haW52YXIgbWFudWFsX2RlbW8gbWFwZXJyb3IgbWFwcHJpbnQgbWF0cml4X2VsZW1lbnRfYWRkIG1hdHJpeF9lbGVtZW50X211bHQgbWF0cml4X2VsZW1lbnRfdHJhbnNwb3NlIG1heGFwcGx5ZGVwdGggbWF4YXBwbHloZWlnaHQgbWF4aW1hX3RlbXBkaXJ8MTAgbWF4aW1hX3VzZXJkaXJ8MTAgbWF4bmVnZXggTUFYX09SRCBtYXhwb3NleCBtYXhwc2lmcmFjZGVub20gbWF4cHNpZnJhY251bSBtYXhwc2luZWdpbnQgbWF4cHNpcG9zaW50IG1heHRheW9yZGVyIG1lc2hfbGluZXNfY29sb3IgbWV0aG9kIG1vZF9iaWdfcHJpbWUgbW9kZV9jaGVja19lcnJvcnAgbW9kZV9jaGVja3AgbW9kZV9jaGVja193YXJucCBtb2RfdGVzdCBtb2RfdGhyZXNob2xkIG1vZHVsYXJfbGluZWFyX3NvbHZlciBtb2R1bHVzIG11bHRpcGxpY2F0aXZlIG11bHRpcGxpY2l0aWVzIG15b3B0aW9ucyBuYXJ5IG5lZ2Rpc3RyaWIgbmVnc3VtZGlzcGZsYWcgbmV3bGluZSBuZXd0b25lcHNpbG9uIG5ld3Rvbm1heGl0ZXIgbmV4dGxheWVyZmFjdG9yIG5pY2VpbmRpY2VzcHJlZiBubSBubWMgbm9ldmFsIG5vbGFiZWxzIG5vbmVnYXRpdmVfbHAgbm9uaW50ZWdlciBub25zY2FsYXIgbm91biBub3VuZGlzcCBub3VucyBucCBucGkgbnRpY2tzIG50cmlnIG51bWVyIG51bWVyX3BicmFuY2ggb2Jhc2Ugb2RkIG9kZGZ1biBvcGFjaXR5IG9wcHJvcGVydGllcyBvcHN1YnN0IG9wdGltcHJlZml4IG9wdGlvbnNldCBvcmllbnRhdGlvbiBvcmlnaW4gb3J0aG9wb2x5X3JldHVybnNfaW50ZXJ2YWxzIG91dGF0aXZlIG91dGNoYXIgcGFja2FnZWZpbGUgcGFsZXR0ZSBwYXJ0c3dpdGNoIHBkZl9maWxlIHBmZWZvcm1hdCBwaGlyZXNvbHV0aW9uICVwaWFyZ3MgcGllY2UgcGl2b3RfY291bnRfc3ggcGl2b3RfbWF4X3N4IHBsb3RfZm9ybWF0IHBsb3Rfb3B0aW9ucyBwbG90X3JlYWxwYXJ0IHBuZ19maWxlIHBvY2hoYW1tZXJfbWF4X2luZGV4IHBvaW50cyBwb2ludHNpemUgcG9pbnRfc2l6ZSBwb2ludHNfam9pbmVkIHBvaW50X3R5cGUgcG9pc2xpbSBwb2lzc29uIHBvbHlfY29lZmZpY2llbnRfcmluZyBwb2x5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlmYWN0b3IgcG9seV9ncm9ibmVyX2FsZ29yaXRobSBwb2x5X2dyb2JuZXJfZGVidWcgcG9seV9tb25vbWlhbF9vcmRlciBwb2x5X3ByaW1hcnlfZWxpbWluYXRpb25fb3JkZXIgcG9seV9yZXR1cm5fdGVybV9saXN0IHBvbHlfc2Vjb25kYXJ5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlfdG9wX3JlZHVjdGlvbl9vbmx5IHBvc2Z1biBwb3NpdGlvbiBwb3dlcmRpc3AgcHJlZCBwcmVkZXJyb3IgcHJpbWVwX251bWJlcl9vZl90ZXN0cyBwcm9kdWN0X3VzZV9nYW1tYSBwcm9ncmFtIHByb2dyYW1tb2RlIHByb21vdGVfZmxvYXRfdG9fYmlnZmxvYXQgcHJvbXB0IHByb3BvcnRpb25hbF9heGVzIHByb3BzIHBzZXhwYW5kIHBzX2ZpbGUgcmFkZXhwYW5kIHJhZGl1cyByYWRzdWJzdGZsYWcgcmFzc29jaWF0aXZlIHJhdGFsZ2Rlbm9tIHJhdGNocmlzdG9mIHJhdGRlbm9tZGl2aWRlIHJhdGVpbnN0ZWluIHJhdGVwc2lsb24gcmF0ZmFjIHJhdGlvbmFsIHJhdG14IHJhdHByaW50IHJhdHJpZW1hbm4gcmF0c2ltcGV4cG9ucyByYXR2YXJzd2l0Y2ggcmF0d2VpZ2h0cyByYXR3ZXlsIHJhdHd0bHZsIHJlYWwgcmVhbG9ubHkgcmVkcmF3IHJlZmNoZWNrIHJlc29sdXRpb24gcmVzdGFydCByZXN1bHRhbnQgcmljIHJpZW0gcm14Y2hhciAlcm51bV9saXN0IHJvbWJlcmdhYnMgcm9tYmVyZ2l0IHJvbWJlcmdtaW4gcm9tYmVyZ3RvbCByb290c2Nvbm1vZGUgcm9vdHNlcHNpbG9uIHJ1bl92aWV3ZXIgc2FtZV94eSBzYW1lX3h5eiBzYXZlZGVmIHNhdmVmYWN0b3JzIHNjYWxhciBzY2FsYXJtYXRyaXhwIHNjYWxlIHNjYWxlX2xwIHNldGNoZWNrIHNldGNoZWNrYnJlYWsgc2V0dmFsIHNob3dfZWRnZV9jb2xvciBzaG93X2VkZ2VzIHNob3dfZWRnZV90eXBlIHNob3dfZWRnZV93aWR0aCBzaG93X2lkIHNob3dfbGFiZWwgc2hvd3RpbWUgc2hvd192ZXJ0ZXhfY29sb3Igc2hvd192ZXJ0ZXhfc2l6ZSBzaG93X3ZlcnRleF90eXBlIHNob3dfdmVydGljZXMgc2hvd193ZWlnaHQgc2ltcCBzaW1wbGlmaWVkX291dHB1dCBzaW1wbGlmeV9wcm9kdWN0cyBzaW1wcHJvZHVjdCBzaW1wc3VtIHNpbm5waWZsYWcgc29sdmVkZWNvbXBvc2VzIHNvbHZlZXhwbGljaXQgc29sdmVmYWN0b3JzIHNvbHZlbnVsbHdhcm4gc29sdmVyYWRjYW4gc29sdmV0cmlnd2FybiBzcGFjZSBzcGFyc2Ugc3BoZXJlIHNwcmluZ19lbWJlZGRpbmdfZGVwdGggc3FydGRpc3BmbGFnIHN0YXJkaXNwIHN0YXJ0cGhpIHN0YXJ0dGhldGEgc3RhdHNfbnVtZXIgc3RyaW5nZGlzcCBzdHJ1Y3R1cmVzIHN0eWxlIHN1Ymxpc19hcHBseV9sYW1iZGEgc3VibnVtc2ltcCBzdW1leHBhbmQgc3Vtc3BsaXRmYWN0IHN1cmZhY2Ugc3VyZmFjZV9oaWRlIHN2Z19maWxlIHN5bW1ldHJpYyB0YWIgdGF5bG9yZGVwdGggdGF5bG9yX2xvZ2V4cGFuZCB0YXlsb3Jfb3JkZXJfY29lZmZpY2llbnRzIHRheWxvcl90cnVuY2F0ZV9wb2x5bm9taWFscyB0ZW5zb3JraWxsIHRlcm1pbmFsIHRlc3RzdWl0ZV9maWxlcyB0aGV0YXJlc29sdXRpb24gdGltZXJfZGV2YWx1ZSB0aXRsZSB0bGltc3dpdGNoIHRyIHRyYWNrIHRyYW5zY29tcGlsZSB0cmFuc2Zvcm0gdHJhbnNmb3JtX3h5IHRyYW5zbGF0ZV9mYXN0X2FycmF5cyB0cmFuc3BhcmVudCB0cmFuc3J1biB0cl9hcnJheV9hc19yZWYgdHJfYm91bmRfZnVuY3Rpb25fYXBwbHlwIHRyX2ZpbGVfdHR5X21lc3NhZ2VzcCB0cl9mbG9hdF9jYW5fYnJhbmNoX2NvbXBsZXggdHJfZnVuY3Rpb25fY2FsbF9kZWZhdWx0IHRyaWdleHBhbmRwbHVzIHRyaWdleHBhbmR0aW1lcyB0cmlnaW52ZXJzZXMgdHJpZ3NpZ24gdHJpdmlhbF9zb2x1dGlvbnMgdHJfbnVtZXIgdHJfb3B0aW1pemVfbWF4X2xvb3AgdHJfc2VtaWNvbXBpbGUgdHJfc3RhdGVfdmFycyB0cl93YXJuX2JhZF9mdW5jdGlvbl9jYWxscyB0cl93YXJuX2ZleHByIHRyX3dhcm5fbWV2YWwgdHJfd2Fybl9tb2RlIHRyX3dhcm5fdW5kZWNsYXJlZCB0cl93YXJuX3VuZGVmaW5lZF92YXJpYWJsZSB0c3RlcCB0dHlvZmYgdHViZV9leHRyZW1lcyB1ZmcgdWcgJXVuaXRleHBhbmQgdW5pdF92ZWN0b3JzIHVyaWMgdXJpZW0gdXNlX2Zhc3RfYXJyYXlzIHVzZXJfcHJlYW1ibGUgdXNlcnNldHVuaXRzIHZhbHVlcyB2ZWN0X2Nyb3NzIHZlcmJvc2UgdmVydGV4X2NvbG9yIHZlcnRleF9jb2xvcmluZyB2ZXJ0ZXhfcGFydGl0aW9uIHZlcnRleF9zaXplIHZlcnRleF90eXBlIHZpZXcgd2FybmluZ3Mgd2V5bCB3aWR0aCB3aW5kb3duYW1lIHdpbmRvd3RpdGxlIHdpcmVkX3N1cmZhY2Ugd2lyZWZyYW1lIHhheGlzIHhheGlzX2NvbG9yIHhheGlzX3NlY29uZGFyeSB4YXhpc190eXBlIHhheGlzX3dpZHRoIHhsYWJlbCB4bGFiZWxfc2Vjb25kYXJ5IHhsZW5ndGggeHJhbmdlIHhyYW5nZV9zZWNvbmRhcnkgeHRpY3MgeHRpY3NfYXhpcyB4dGljc19yb3RhdGUgeHRpY3Nfcm90YXRlX3NlY29uZGFyeSB4dGljc19zZWNvbmRhcnkgeHRpY3Nfc2Vjb25kYXJ5X2F4aXMgeHVfZ3JpZCB4X3ZveGVsIHh5X2ZpbGUgeHlwbGFuZSB4eV9zY2FsZSB5YXhpcyB5YXhpc19jb2xvciB5YXhpc19zZWNvbmRhcnkgeWF4aXNfdHlwZSB5YXhpc193aWR0aCB5bGFiZWwgeWxhYmVsX3NlY29uZGFyeSB5bGVuZ3RoIHlyYW5nZSB5cmFuZ2Vfc2Vjb25kYXJ5IHl0aWNzIHl0aWNzX2F4aXMgeXRpY3Nfcm90YXRlIHl0aWNzX3JvdGF0ZV9zZWNvbmRhcnkgeXRpY3Nfc2Vjb25kYXJ5IHl0aWNzX3NlY29uZGFyeV9heGlzIHl2X2dyaWQgeV92b3hlbCB5eF9yYXRpbyB6YXhpcyB6YXhpc19jb2xvciB6YXhpc190eXBlIHpheGlzX3dpZHRoIHplcm9hIHplcm9iIHplcm9iZXJuIHpldGElcGkgemxhYmVsIHpsYWJlbF9yb3RhdGUgemxlbmd0aCB6bWluIHpuX3ByaW1yb290X2xpbWl0IHpuX3ByaW1yb290X3ByZXRlc3QiLHN5bWJvbDoiXyBfXyAlfDAgJSV8MCJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjoiL1xcKiIsZW5kOiJcXCovIixjb250YWluczpbInNlbGYiXX0sZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7YmVnaW46IlxcYihcXGQrfFxcZCtcXC58XFwuXFxkK3xcXGQrXFwuXFxkKylbRWVdWy0rXT9cXGQrXFxiIn0se2JlZ2luOiJcXGIoXFxkK3xcXGQrXFwufFxcLlxcZCt8XFxkK1xcLlxcZCspW0JiXVstK10/XFxkK1xcYiIscmVsZXZhbmNlOjEwfSx7YmVnaW46IlxcYihcXC5cXGQrfFxcZCtcXC5cXGQrKVxcYiJ9LHtiZWdpbjoiXFxiKFxcZCt8MFswLTlBLVphLXpdKylcXC4/XFxiIn1dfV0saWxsZWdhbDovQC99fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOiJpbnQgZmxvYXQgc3RyaW5nIHZlY3RvciBtYXRyaXggaWYgZWxzZSBzd2l0Y2ggY2FzZSBkZWZhdWx0IHdoaWxlIGRvIGZvciBpbiBicmVhayBjb250aW51ZSBnbG9iYWwgcHJvYyByZXR1cm4gYWJvdXQgYWJzIGFkZEF0dHIgYWRkQXR0cmlidXRlRWRpdG9yTm9kZUhlbHAgYWRkRHluYW1pYyBhZGROZXdTaGVsZlRhYiBhZGRQUCBhZGRQYW5lbENhdGVnb3J5IGFkZFByZWZpeFRvTmFtZSBhZHZhbmNlVG9OZXh0RHJpdmVuS2V5IGFmZmVjdGVkTmV0IGFmZmVjdHMgYWltQ29uc3RyYWludCBhaXIgYWxpYXMgYWxpYXNBdHRyIGFsaWduIGFsaWduQ3R4IGFsaWduQ3VydmUgYWxpZ25TdXJmYWNlIGFsbFZpZXdGaXQgYW1iaWVudExpZ2h0IGFuZ2xlIGFuZ2xlQmV0d2VlbiBhbmltQ29uZSBhbmltQ3VydmVFZGl0b3IgYW5pbURpc3BsYXkgYW5pbVZpZXcgYW5ub3RhdGUgYXBwZW5kU3RyaW5nQXJyYXkgYXBwbGljYXRpb25OYW1lIGFwcGx5QXR0clByZXNldCBhcHBseVRha2UgYXJjTGVuRGltQ29udGV4dCBhcmNMZW5ndGhEaW1lbnNpb24gYXJjbGVuIGFycmF5TWFwcGVyIGFydDNkUGFpbnRDdHggYXJ0QXR0ckN0eCBhcnRBdHRyUGFpbnRWZXJ0ZXhDdHggYXJ0QXR0clNraW5QYWludEN0eCBhcnRBdHRyVG9vbCBhcnRCdWlsZFBhaW50TWVudSBhcnRGbHVpZEF0dHJDdHggYXJ0UHV0dHlDdHggYXJ0U2VsZWN0Q3R4IGFydFNldFBhaW50Q3R4IGFydFVzZXJQYWludEN0eCBhc3NpZ25Db21tYW5kIGFzc2lnbklucHV0RGV2aWNlIGFzc2lnblZpZXdwb3J0RmFjdG9yaWVzIGF0dGFjaEN1cnZlIGF0dGFjaERldmljZUF0dHIgYXR0YWNoU3VyZmFjZSBhdHRyQ29sb3JTbGlkZXJHcnAgYXR0ckNvbXBhdGliaWxpdHkgYXR0ckNvbnRyb2xHcnAgYXR0ckVudW1PcHRpb25NZW51IGF0dHJFbnVtT3B0aW9uTWVudUdycCBhdHRyRmllbGRHcnAgYXR0ckZpZWxkU2xpZGVyR3JwIGF0dHJOYXZpZ2F0aW9uQ29udHJvbEdycCBhdHRyUHJlc2V0RWRpdFdpbiBhdHRyaWJ1dGVFeGlzdHMgYXR0cmlidXRlSW5mbyBhdHRyaWJ1dGVNZW51IGF0dHJpYnV0ZVF1ZXJ5IGF1dG9LZXlmcmFtZSBhdXRvUGxhY2UgYmFrZUNsaXAgYmFrZUZsdWlkU2hhZGluZyBiYWtlUGFydGlhbEhpc3RvcnkgYmFrZVJlc3VsdHMgYmFrZVNpbXVsYXRpb24gYmFzZW5hbWUgYmFzZW5hbWVFeCBiYXRjaFJlbmRlciBiZXNzZWwgYmV2ZWwgYmV2ZWxQbHVzIGJpbk1lbWJlcnNoaXAgYmluZFNraW4gYmxlbmQyIGJsZW5kU2hhcGUgYmxlbmRTaGFwZUVkaXRvciBibGVuZFNoYXBlUGFuZWwgYmxlbmRUd29BdHRyIGJsaW5kRGF0YVR5cGUgYm9uZUxhdHRpY2UgYm91bmRhcnkgYm94RG9sbHlDdHggYm94Wm9vbUN0eCBidWZmZXJDdXJ2ZSBidWlsZEJvb2ttYXJrTWVudSBidWlsZEtleWZyYW1lTWVudSBidXR0b24gYnV0dG9uTWFuaXAgQ0JHIGNhY2hlRmlsZSBjYWNoZUZpbGVDb21iaW5lIGNhY2hlRmlsZU1lcmdlIGNhY2hlRmlsZVRyYWNrIGNhbWVyYSBjYW1lcmFWaWV3IGNhbkNyZWF0ZU1hbmlwIGNhbnZhcyBjYXBpdGFsaXplU3RyaW5nIGNhdGNoIGNhdGNoUXVpZXQgY2VpbCBjaGFuZ2VTdWJkaXZDb21wb25lbnREaXNwbGF5TGV2ZWwgY2hhbmdlU3ViZGl2UmVnaW9uIGNoYW5uZWxCb3ggY2hhcmFjdGVyIGNoYXJhY3Rlck1hcCBjaGFyYWN0ZXJPdXRsaW5lRWRpdG9yIGNoYXJhY3Rlcml6ZSBjaGRpciBjaGVja0JveCBjaGVja0JveEdycCBjaGVja0RlZmF1bHRSZW5kZXJHbG9iYWxzIGNob2ljZSBjaXJjbGUgY2lyY3VsYXJGaWxsZXQgY2xhbXAgY2xlYXIgY2xlYXJDYWNoZSBjbGlwIGNsaXBFZGl0b3IgY2xpcEVkaXRvckN1cnJlbnRUaW1lQ3R4IGNsaXBTY2hlZHVsZSBjbGlwU2NoZWR1bGVyT3V0bGluZXIgY2xpcFRyaW1CZWZvcmUgY2xvc2VDdXJ2ZSBjbG9zZVN1cmZhY2UgY2x1c3RlciBjbWRGaWxlT3V0cHV0IGNtZFNjcm9sbEZpZWxkRXhlY3V0ZXIgY21kU2Nyb2xsRmllbGRSZXBvcnRlciBjbWRTaGVsbCBjb2Fyc2VuU3ViZGl2U2VsZWN0aW9uTGlzdCBjb2xsaXNpb24gY29sb3IgY29sb3JBdFBvaW50IGNvbG9yRWRpdG9yIGNvbG9ySW5kZXggY29sb3JJbmRleFNsaWRlckdycCBjb2xvclNsaWRlckJ1dHRvbkdycCBjb2xvclNsaWRlckdycCBjb2x1bW5MYXlvdXQgY29tbWFuZEVjaG8gY29tbWFuZExpbmUgY29tbWFuZFBvcnQgY29tcGFjdEhhaXJTeXN0ZW0gY29tcG9uZW50RWRpdG9yIGNvbXBvc2l0aW5nSW50ZXJvcCBjb21wdXRlUG9seXNldFZvbHVtZSBjb25kaXRpb24gY29uZSBjb25maXJtRGlhbG9nIGNvbm5lY3RBdHRyIGNvbm5lY3RDb250cm9sIGNvbm5lY3REeW5hbWljIGNvbm5lY3RKb2ludCBjb25uZWN0aW9uSW5mbyBjb25zdHJhaW4gY29uc3RyYWluVmFsdWUgY29uc3RydWN0aW9uSGlzdG9yeSBjb250YWluZXIgY29udGFpbnNNdWx0aWJ5dGUgY29udGV4dEluZm8gY29udHJvbCBjb252ZXJ0RnJvbU9sZExheWVycyBjb252ZXJ0SWZmVG9Qc2QgY29udmVydExpZ2h0bWFwIGNvbnZlcnRTb2xpZFR4IGNvbnZlcnRUZXNzZWxsYXRpb24gY29udmVydFVuaXQgY29weUFycmF5IGNvcHlGbGV4b3IgY29weUtleSBjb3B5U2tpbldlaWdodHMgY29zIGNwQnV0dG9uIGNwQ2FjaGUgY3BDbG90aFNldCBjcENvbGxpc2lvbiBjcENvbnN0cmFpbnQgY3BDb252Q2xvdGhUb01lc2ggY3BGb3JjZXMgY3BHZXRTb2x2ZXJBdHRyIGNwUGFuZWwgY3BQcm9wZXJ0eSBjcFJpZ2lkQ29sbGlzaW9uRmlsdGVyIGNwU2VhbSBjcFNldEVkaXQgY3BTZXRTb2x2ZXJBdHRyIGNwU29sdmVyIGNwU29sdmVyVHlwZXMgY3BUb29sIGNwVXBkYXRlQ2xvdGhVVnMgY3JlYXRlRGlzcGxheUxheWVyIGNyZWF0ZURyYXdDdHggY3JlYXRlRWRpdG9yIGNyZWF0ZUxheWVyZWRQc2RGaWxlIGNyZWF0ZU1vdGlvbkZpZWxkIGNyZWF0ZU5ld1NoZWxmIGNyZWF0ZU5vZGUgY3JlYXRlUmVuZGVyTGF5ZXIgY3JlYXRlU3ViZGl2UmVnaW9uIGNyb3NzIGNyb3NzUHJvZHVjdCBjdHhBYm9ydCBjdHhDb21wbGV0aW9uIGN0eEVkaXRNb2RlIGN0eFRyYXZlcnNlIGN1cnJlbnRDdHggY3VycmVudFRpbWUgY3VycmVudFRpbWVDdHggY3VycmVudFVuaXQgY3VydmUgY3VydmVBZGRQdEN0eCBjdXJ2ZUNWQ3R4IGN1cnZlRVBDdHggY3VydmVFZGl0b3JDdHggY3VydmVJbnRlcnNlY3QgY3VydmVNb3ZlRVBDdHggY3VydmVPblN1cmZhY2UgY3VydmVTa2V0Y2hDdHggY3V0S2V5IGN5Y2xlQ2hlY2sgY3lsaW5kZXIgZGFnUG9zZSBkYXRlIGRlZmF1bHRMaWdodExpc3RDaGVja0JveCBkZWZhdWx0TmF2aWdhdGlvbiBkZWZpbmVEYXRhU2VydmVyIGRlZmluZVZpcnR1YWxEZXZpY2UgZGVmb3JtZXIgZGVnX3RvX3JhZCBkZWxldGUgZGVsZXRlQXR0ciBkZWxldGVTaGFkaW5nR3JvdXBzQW5kTWF0ZXJpYWxzIGRlbGV0ZVNoZWxmVGFiIGRlbGV0ZVVJIGRlbGV0ZVVudXNlZEJydXNoZXMgZGVscmFuZHN0ciBkZXRhY2hDdXJ2ZSBkZXRhY2hEZXZpY2VBdHRyIGRldGFjaFN1cmZhY2UgZGV2aWNlRWRpdG9yIGRldmljZVBhbmVsIGRnSW5mbyBkZ2RpcnR5IGRnZXZhbCBkZ3RpbWVyIGRpbVdoZW4gZGlyZWN0S2V5Q3R4IGRpcmVjdGlvbmFsTGlnaHQgZGlybWFwIGRpcm5hbWUgZGlzYWJsZSBkaXNjb25uZWN0QXR0ciBkaXNjb25uZWN0Sm9pbnQgZGlza0NhY2hlIGRpc3BsYWNlbWVudFRvUG9seSBkaXNwbGF5QWZmZWN0ZWQgZGlzcGxheUNvbG9yIGRpc3BsYXlDdWxsIGRpc3BsYXlMZXZlbE9mRGV0YWlsIGRpc3BsYXlQcmVmIGRpc3BsYXlSR0JDb2xvciBkaXNwbGF5U21vb3RobmVzcyBkaXNwbGF5U3RhdHMgZGlzcGxheVN0cmluZyBkaXNwbGF5U3VyZmFjZSBkaXN0YW5jZURpbUNvbnRleHQgZGlzdGFuY2VEaW1lbnNpb24gZG9CbHVyIGRvbGx5IGRvbGx5Q3R4IGRvcGVTaGVldEVkaXRvciBkb3QgZG90UHJvZHVjdCBkb3VibGVQcm9maWxlQmlyYWlsU3VyZmFjZSBkcmFnIGRyYWdBdHRyQ29udGV4dCBkcmFnZ2VyQ29udGV4dCBkcm9wb2ZmTG9jYXRvciBkdXBsaWNhdGUgZHVwbGljYXRlQ3VydmUgZHVwbGljYXRlU3VyZmFjZSBkeW5DYWNoZSBkeW5Db250cm9sIGR5bkV4cG9ydCBkeW5FeHByZXNzaW9uIGR5bkdsb2JhbHMgZHluUGFpbnRFZGl0b3IgZHluUGFydGljbGVDdHggZHluUHJlZiBkeW5SZWxFZFBhbmVsIGR5blJlbEVkaXRvciBkeW5hbWljTG9hZCBlZGl0QXR0ckxpbWl0cyBlZGl0RGlzcGxheUxheWVyR2xvYmFscyBlZGl0RGlzcGxheUxheWVyTWVtYmVycyBlZGl0UmVuZGVyTGF5ZXJBZGp1c3RtZW50IGVkaXRSZW5kZXJMYXllckdsb2JhbHMgZWRpdFJlbmRlckxheWVyTWVtYmVycyBlZGl0b3IgZWRpdG9yVGVtcGxhdGUgZWZmZWN0b3IgZW1pdCBlbWl0dGVyIGVuYWJsZURldmljZSBlbmNvZGVTdHJpbmcgZW5kU3RyaW5nIGVuZHNXaXRoIGVudiBlcXVpdmFsZW50IGVxdWl2YWxlbnRUb2wgZXJmIGVycm9yIGV2YWwgZXZhbERlZmVycmVkIGV2YWxFY2hvIGV2ZW50IGV4YWN0V29ybGRCb3VuZGluZ0JveCBleGNsdXNpdmVMaWdodENoZWNrQm94IGV4ZWMgZXhlY3V0ZUZvckVhY2hPYmplY3QgZXhpc3RzIGV4cCBleHByZXNzaW9uIGV4cHJlc3Npb25FZGl0b3JMaXN0ZW4gZXh0ZW5kQ3VydmUgZXh0ZW5kU3VyZmFjZSBleHRydWRlIGZjaGVjayBmY2xvc2UgZmVvZiBmZmx1c2ggZmdldGxpbmUgZmdldHdvcmQgZmlsZSBmaWxlQnJvd3NlckRpYWxvZyBmaWxlRGlhbG9nIGZpbGVFeHRlbnNpb24gZmlsZUluZm8gZmlsZXRlc3QgZmlsbGV0Q3VydmUgZmlsdGVyIGZpbHRlckN1cnZlIGZpbHRlckV4cGFuZCBmaWx0ZXJTdHVkaW9JbXBvcnQgZmluZEFsbEludGVyc2VjdGlvbnMgZmluZEFuaW1DdXJ2ZXMgZmluZEtleWZyYW1lIGZpbmRNZW51SXRlbSBmaW5kUmVsYXRlZFNraW5DbHVzdGVyIGZpbmRlciBmaXJzdFBhcmVudE9mIGZpdEJzcGxpbmUgZmxleG9yIGZsb2F0RXEgZmxvYXRGaWVsZCBmbG9hdEZpZWxkR3JwIGZsb2F0U2Nyb2xsQmFyIGZsb2F0U2xpZGVyIGZsb2F0U2xpZGVyMiBmbG9hdFNsaWRlckJ1dHRvbkdycCBmbG9hdFNsaWRlckdycCBmbG9vciBmbG93IGZsdWlkQ2FjaGVJbmZvIGZsdWlkRW1pdHRlciBmbHVpZFZveGVsSW5mbyBmbHVzaFVuZG8gZm1vZCBmb250RGlhbG9nIGZvcGVuIGZvcm1MYXlvdXQgZm9ybWF0IGZwcmludCBmcmFtZUxheW91dCBmcmVhZCBmcmVlRm9ybUZpbGxldCBmcmV3aW5kIGZyb21OYXRpdmVQYXRoIGZ3cml0ZSBnYW1tYSBnYXVzcyBnZW9tZXRyeUNvbnN0cmFpbnQgZ2V0QXBwbGljYXRpb25WZXJzaW9uQXNGbG9hdCBnZXRBdHRyIGdldENsYXNzaWZpY2F0aW9uIGdldERlZmF1bHRCcnVzaCBnZXRGaWxlTGlzdCBnZXRGbHVpZEF0dHIgZ2V0SW5wdXREZXZpY2VSYW5nZSBnZXRNYXlhUGFuZWxUeXBlcyBnZXRNb2RpZmllcnMgZ2V0UGFuZWwgZ2V0UGFydGljbGVBdHRyIGdldFBsdWdpblJlc291cmNlIGdldGVudiBnZXRwaWQgZ2xSZW5kZXIgZ2xSZW5kZXJFZGl0b3IgZ2xvYmFsU3RpdGNoIGdtYXRjaCBnb2FsIGdvdG9CaW5kUG9zZSBncmFiQ29sb3IgZ3JhZGllbnRDb250cm9sIGdyYWRpZW50Q29udHJvbE5vQXR0ciBncmFwaERvbGx5Q3R4IGdyYXBoU2VsZWN0Q29udGV4dCBncmFwaFRyYWNrQ3R4IGdyYXZpdHkgZ3JpZCBncmlkTGF5b3V0IGdyb3VwIGdyb3VwT2JqZWN0c0J5TmFtZSBIZkFkZEF0dHJhY3RvclRvQVMgSGZBc3NpZ25BUyBIZkJ1aWxkRXF1YWxNYXAgSGZCdWlsZEZ1ckZpbGVzIEhmQnVpbGRGdXJJbWFnZXMgSGZDYW5jZWxBRlIgSGZDb25uZWN0QVNUb0hGIEhmQ3JlYXRlQXR0cmFjdG9yIEhmRGVsZXRlQVMgSGZFZGl0QVMgSGZQZXJmb3JtQ3JlYXRlQVMgSGZSZW1vdmVBdHRyYWN0b3JGcm9tQVMgSGZTZWxlY3RBdHRhY2hlZCBIZlNlbGVjdEF0dHJhY3RvcnMgSGZVbkFzc2lnbkFTIGhhcmRlblBvaW50Q3VydmUgaGFyZHdhcmUgaGFyZHdhcmVSZW5kZXJQYW5lbCBoZWFkc1VwRGlzcGxheSBoZWFkc1VwTWVzc2FnZSBoZWxwIGhlbHBMaW5lIGhlcm1pdGUgaGlkZSBoaWxpdGUgaGl0VGVzdCBob3RCb3ggaG90a2V5IGhvdGtleUNoZWNrIGhzdl90b19yZ2IgaHVkQnV0dG9uIGh1ZFNsaWRlciBodWRTbGlkZXJCdXR0b24gaHdSZWZsZWN0aW9uTWFwIGh3UmVuZGVyIGh3UmVuZGVyTG9hZCBoeXBlckdyYXBoIGh5cGVyUGFuZWwgaHlwZXJTaGFkZSBoeXBvdCBpY29uVGV4dEJ1dHRvbiBpY29uVGV4dENoZWNrQm94IGljb25UZXh0UmFkaW9CdXR0b24gaWNvblRleHRSYWRpb0NvbGxlY3Rpb24gaWNvblRleHRTY3JvbGxMaXN0IGljb25UZXh0U3RhdGljTGFiZWwgaWtIYW5kbGUgaWtIYW5kbGVDdHggaWtIYW5kbGVEaXNwbGF5U2NhbGUgaWtTb2x2ZXIgaWtTcGxpbmVIYW5kbGVDdHggaWtTeXN0ZW0gaWtTeXN0ZW1JbmZvIGlrZmtEaXNwbGF5TWV0aG9kIGlsbHVzdHJhdG9yQ3VydmVzIGltYWdlIGltZlBsdWdpbnMgaW5oZXJpdFRyYW5zZm9ybSBpbnNlcnRKb2ludCBpbnNlcnRKb2ludEN0eCBpbnNlcnRLZXlDdHggaW5zZXJ0S25vdEN1cnZlIGluc2VydEtub3RTdXJmYWNlIGluc3RhbmNlIGluc3RhbmNlYWJsZSBpbnN0YW5jZXIgaW50RmllbGQgaW50RmllbGRHcnAgaW50U2Nyb2xsQmFyIGludFNsaWRlciBpbnRTbGlkZXJHcnAgaW50ZXJUb1VJIGludGVybmFsVmFyIGludGVyc2VjdCBpcHJFbmdpbmUgaXNBbmltQ3VydmUgaXNDb25uZWN0ZWQgaXNEaXJ0eSBpc1BhcmVudE9mIGlzU2FtZU9iamVjdCBpc1RydWUgaXNWYWxpZE9iamVjdE5hbWUgaXNWYWxpZFN0cmluZyBpc1ZhbGlkVWlOYW1lIGlzb2xhdGVTZWxlY3QgaXRlbUZpbHRlciBpdGVtRmlsdGVyQXR0ciBpdGVtRmlsdGVyUmVuZGVyIGl0ZW1GaWx0ZXJUeXBlIGpvaW50IGpvaW50Q2x1c3RlciBqb2ludEN0eCBqb2ludERpc3BsYXlTY2FsZSBqb2ludExhdHRpY2Uga2V5VGFuZ2VudCBrZXlmcmFtZSBrZXlmcmFtZU91dGxpbmVyIGtleWZyYW1lUmVnaW9uQ3VycmVudFRpbWVDdHgga2V5ZnJhbWVSZWdpb25EaXJlY3RLZXlDdHgga2V5ZnJhbWVSZWdpb25Eb2xseUN0eCBrZXlmcmFtZVJlZ2lvbkluc2VydEtleUN0eCBrZXlmcmFtZVJlZ2lvbk1vdmVLZXlDdHgga2V5ZnJhbWVSZWdpb25TY2FsZUtleUN0eCBrZXlmcmFtZVJlZ2lvblNlbGVjdEtleUN0eCBrZXlmcmFtZVJlZ2lvblNldEtleUN0eCBrZXlmcmFtZVJlZ2lvblRyYWNrQ3R4IGtleWZyYW1lU3RhdHMgbGFzc29Db250ZXh0IGxhdHRpY2UgbGF0dGljZURlZm9ybUtleUN0eCBsYXVuY2ggbGF1bmNoSW1hZ2VFZGl0b3IgbGF5ZXJCdXR0b24gbGF5ZXJlZFNoYWRlclBvcnQgbGF5ZXJlZFRleHR1cmVQb3J0IGxheW91dCBsYXlvdXREaWFsb2cgbGlnaHRMaXN0IGxpZ2h0TGlzdEVkaXRvciBsaWdodExpc3RQYW5lbCBsaWdodGxpbmsgbGluZUludGVyc2VjdGlvbiBsaW5lYXJQcmVjaXNpb24gbGluc3RlcCBsaXN0QW5pbWF0YWJsZSBsaXN0QXR0ciBsaXN0Q2FtZXJhcyBsaXN0Q29ubmVjdGlvbnMgbGlzdERldmljZUF0dGFjaG1lbnRzIGxpc3RIaXN0b3J5IGxpc3RJbnB1dERldmljZUF4ZXMgbGlzdElucHV0RGV2aWNlQnV0dG9ucyBsaXN0SW5wdXREZXZpY2VzIGxpc3RNZW51QW5ub3RhdGlvbiBsaXN0Tm9kZVR5cGVzIGxpc3RQYW5lbENhdGVnb3JpZXMgbGlzdFJlbGF0aXZlcyBsaXN0U2V0cyBsaXN0VHJhbnNmb3JtcyBsaXN0VW5zZWxlY3RlZCBsaXN0ZXJFZGl0b3IgbG9hZEZsdWlkIGxvYWROZXdTaGVsZiBsb2FkUGx1Z2luIGxvYWRQbHVnaW5MYW5ndWFnZVJlc291cmNlcyBsb2FkUHJlZk9iamVjdHMgbG9jYWxpemVkUGFuZWxMYWJlbCBsb2NrTm9kZSBsb2Z0IGxvZyBsb25nTmFtZU9mIGxvb2tUaHJ1IGxzIGxzVGhyb3VnaEZpbHRlciBsc1R5cGUgbHNVSSBNYXlhdG9tciBtYWcgbWFrZUlkZW50aXR5IG1ha2VMaXZlIG1ha2VQYWludGFibGUgbWFrZVJvbGwgbWFrZVNpbmdsZVN1cmZhY2UgbWFrZVR1YmVPbiBtYWtlYm90IG1hbmlwTW92ZUNvbnRleHQgbWFuaXBNb3ZlTGltaXRzQ3R4IG1hbmlwT3B0aW9ucyBtYW5pcFJvdGF0ZUNvbnRleHQgbWFuaXBSb3RhdGVMaW1pdHNDdHggbWFuaXBTY2FsZUNvbnRleHQgbWFuaXBTY2FsZUxpbWl0c0N0eCBtYXJrZXIgbWF0Y2ggbWF4IG1lbW9yeSBtZW51IG1lbnVCYXJMYXlvdXQgbWVudUVkaXRvciBtZW51SXRlbSBtZW51SXRlbVRvU2hlbGYgbWVudVNldCBtZW51U2V0UHJlZiBtZXNzYWdlTGluZSBtaW4gbWluaW1pemVBcHAgbWlycm9ySm9pbnQgbW9kZWxDdXJyZW50VGltZUN0eCBtb2RlbEVkaXRvciBtb2RlbFBhbmVsIG1vdXNlIG1vdkluIG1vdk91dCBtb3ZlIG1vdmVJS3RvRksgbW92ZUtleUN0eCBtb3ZlVmVydGV4QWxvbmdEaXJlY3Rpb24gbXVsdGlQcm9maWxlQmlyYWlsU3VyZmFjZSBtdXRlIG5QYXJ0aWNsZSBuYW1lQ29tbWFuZCBuYW1lRmllbGQgbmFtZXNwYWNlIG5hbWVzcGFjZUluZm8gbmV3UGFuZWxJdGVtcyBuZXd0b24gbm9kZUNhc3Qgbm9kZUljb25CdXR0b24gbm9kZU91dGxpbmVyIG5vZGVQcmVzZXQgbm9kZVR5cGUgbm9pc2Ugbm9uTGluZWFyIG5vcm1hbENvbnN0cmFpbnQgbm9ybWFsaXplIG51cmJzQm9vbGVhbiBudXJic0NvcHlVVlNldCBudXJic0N1YmUgbnVyYnNFZGl0VVYgbnVyYnNQbGFuZSBudXJic1NlbGVjdCBudXJic1NxdWFyZSBudXJic1RvUG9seSBudXJic1RvUG9seWdvbnNQcmVmIG51cmJzVG9TdWJkaXYgbnVyYnNUb1N1YmRpdlByZWYgbnVyYnNVVlNldCBudXJic1ZpZXdEaXJlY3Rpb25WZWN0b3Igb2JqRXhpc3RzIG9iamVjdENlbnRlciBvYmplY3RMYXllciBvYmplY3RUeXBlIG9iamVjdFR5cGVVSSBvYnNvbGV0ZVByb2Mgb2NlYW5OdXJic1ByZXZpZXdQbGFuZSBvZmZzZXRDdXJ2ZSBvZmZzZXRDdXJ2ZU9uU3VyZmFjZSBvZmZzZXRTdXJmYWNlIG9wZW5HTEV4dGVuc2lvbiBvcGVuTWF5YVByZWYgb3B0aW9uTWVudSBvcHRpb25NZW51R3JwIG9wdGlvblZhciBvcmJpdCBvcmJpdEN0eCBvcmllbnRDb25zdHJhaW50IG91dGxpbmVyRWRpdG9yIG91dGxpbmVyUGFuZWwgb3ZlcnJpZGVNb2RpZmllciBwYWludEVmZmVjdHNEaXNwbGF5IHBhaXJCbGVuZCBwYWxldHRlUG9ydCBwYW5lTGF5b3V0IHBhbmVsIHBhbmVsQ29uZmlndXJhdGlvbiBwYW5lbEhpc3RvcnkgcGFyYW1EaW1Db250ZXh0IHBhcmFtRGltZW5zaW9uIHBhcmFtTG9jYXRvciBwYXJlbnQgcGFyZW50Q29uc3RyYWludCBwYXJ0aWNsZSBwYXJ0aWNsZUV4aXN0cyBwYXJ0aWNsZUluc3RhbmNlciBwYXJ0aWNsZVJlbmRlckluZm8gcGFydGl0aW9uIHBhc3RlS2V5IHBhdGhBbmltYXRpb24gcGF1c2UgcGNsb3NlIHBlcmNlbnQgcGVyZm9ybWFuY2VPcHRpb25zIHBmeHN0cm9rZXMgcGlja1dhbGsgcGljdHVyZSBwaXhlbE1vdmUgcGxhbmFyU3JmIHBsYW5lIHBsYXkgcGxheWJhY2tPcHRpb25zIHBsYXlibGFzdCBwbHVnQXR0ciBwbHVnTm9kZSBwbHVnaW5JbmZvIHBsdWdpblJlc291cmNlVXRpbCBwb2ludENvbnN0cmFpbnQgcG9pbnRDdXJ2ZUNvbnN0cmFpbnQgcG9pbnRMaWdodCBwb2ludE1hdHJpeE11bHQgcG9pbnRPbkN1cnZlIHBvaW50T25TdXJmYWNlIHBvaW50UG9zaXRpb24gcG9sZVZlY3RvckNvbnN0cmFpbnQgcG9seUFwcGVuZCBwb2x5QXBwZW5kRmFjZXRDdHggcG9seUFwcGVuZFZlcnRleCBwb2x5QXV0b1Byb2plY3Rpb24gcG9seUF2ZXJhZ2VOb3JtYWwgcG9seUF2ZXJhZ2VWZXJ0ZXggcG9seUJldmVsIHBvbHlCbGVuZENvbG9yIHBvbHlCbGluZERhdGEgcG9seUJvb2xPcCBwb2x5QnJpZGdlRWRnZSBwb2x5Q2FjaGVNb25pdG9yIHBvbHlDaGVjayBwb2x5Q2hpcE9mZiBwb2x5Q2xpcGJvYXJkIHBvbHlDbG9zZUJvcmRlciBwb2x5Q29sbGFwc2VFZGdlIHBvbHlDb2xsYXBzZUZhY2V0IHBvbHlDb2xvckJsaW5kRGF0YSBwb2x5Q29sb3JEZWwgcG9seUNvbG9yUGVyVmVydGV4IHBvbHlDb2xvclNldCBwb2x5Q29tcGFyZSBwb2x5Q29uZSBwb2x5Q29weVVWIHBvbHlDcmVhc2UgcG9seUNyZWFzZUN0eCBwb2x5Q3JlYXRlRmFjZXQgcG9seUNyZWF0ZUZhY2V0Q3R4IHBvbHlDdWJlIHBvbHlDdXQgcG9seUN1dEN0eCBwb2x5Q3lsaW5kZXIgcG9seUN5bGluZHJpY2FsUHJvamVjdGlvbiBwb2x5RGVsRWRnZSBwb2x5RGVsRmFjZXQgcG9seURlbFZlcnRleCBwb2x5RHVwbGljYXRlQW5kQ29ubmVjdCBwb2x5RHVwbGljYXRlRWRnZSBwb2x5RWRpdFVWIHBvbHlFZGl0VVZTaGVsbCBwb2x5RXZhbHVhdGUgcG9seUV4dHJ1ZGVFZGdlIHBvbHlFeHRydWRlRmFjZXQgcG9seUV4dHJ1ZGVWZXJ0ZXggcG9seUZsaXBFZGdlIHBvbHlGbGlwVVYgcG9seUZvcmNlVVYgcG9seUdlb1NhbXBsZXIgcG9seUhlbGl4IHBvbHlJbmZvIHBvbHlJbnN0YWxsQWN0aW9uIHBvbHlMYXlvdXRVViBwb2x5TGlzdENvbXBvbmVudENvbnZlcnNpb24gcG9seU1hcEN1dCBwb2x5TWFwRGVsIHBvbHlNYXBTZXcgcG9seU1hcFNld01vdmUgcG9seU1lcmdlRWRnZSBwb2x5TWVyZ2VFZGdlQ3R4IHBvbHlNZXJnZUZhY2V0IHBvbHlNZXJnZUZhY2V0Q3R4IHBvbHlNZXJnZVVWIHBvbHlNZXJnZVZlcnRleCBwb2x5TWlycm9yRmFjZSBwb2x5TW92ZUVkZ2UgcG9seU1vdmVGYWNldCBwb2x5TW92ZUZhY2V0VVYgcG9seU1vdmVVViBwb2x5TW92ZVZlcnRleCBwb2x5Tm9ybWFsIHBvbHlOb3JtYWxQZXJWZXJ0ZXggcG9seU5vcm1hbGl6ZVVWIHBvbHlPcHRVdnMgcG9seU9wdGlvbnMgcG9seU91dHB1dCBwb2x5UGlwZSBwb2x5UGxhbmFyUHJvamVjdGlvbiBwb2x5UGxhbmUgcG9seVBsYXRvbmljU29saWQgcG9seVBva2UgcG9seVByaW1pdGl2ZSBwb2x5UHJpc20gcG9seVByb2plY3Rpb24gcG9seVB5cmFtaWQgcG9seVF1YWQgcG9seVF1ZXJ5QmxpbmREYXRhIHBvbHlSZWR1Y2UgcG9seVNlbGVjdCBwb2x5U2VsZWN0Q29uc3RyYWludCBwb2x5U2VsZWN0Q29uc3RyYWludE1vbml0b3IgcG9seVNlbGVjdEN0eCBwb2x5U2VsZWN0RWRpdEN0eCBwb2x5U2VwYXJhdGUgcG9seVNldFRvRmFjZU5vcm1hbCBwb2x5U2V3RWRnZSBwb2x5U2hvcnRlc3RQYXRoQ3R4IHBvbHlTbW9vdGggcG9seVNvZnRFZGdlIHBvbHlTcGhlcmUgcG9seVNwaGVyaWNhbFByb2plY3Rpb24gcG9seVNwbGl0IHBvbHlTcGxpdEN0eCBwb2x5U3BsaXRFZGdlIHBvbHlTcGxpdFJpbmcgcG9seVNwbGl0VmVydGV4IHBvbHlTdHJhaWdodGVuVVZCb3JkZXIgcG9seVN1YmRpdmlkZUVkZ2UgcG9seVN1YmRpdmlkZUZhY2V0IHBvbHlUb1N1YmRpdiBwb2x5VG9ydXMgcG9seVRyYW5zZmVyIHBvbHlUcmlhbmd1bGF0ZSBwb2x5VVZTZXQgcG9seVVuaXRlIHBvbHlXZWRnZUZhY2UgcG9wZW4gcG9wdXBNZW51IHBvc2UgcG93IHByZWxvYWRSZWZFZCBwcmludCBwcm9ncmVzc0JhciBwcm9ncmVzc1dpbmRvdyBwcm9qRmlsZVZpZXdlciBwcm9qZWN0Q3VydmUgcHJvamVjdFRhbmdlbnQgcHJvamVjdGlvbkNvbnRleHQgcHJvamVjdGlvbk1hbmlwIHByb21wdERpYWxvZyBwcm9wTW9kQ3R4IHByb3BNb3ZlIHBzZENoYW5uZWxPdXRsaW5lciBwc2RFZGl0VGV4dHVyZUZpbGUgcHNkRXhwb3J0IHBzZFRleHR1cmVGaWxlIHB1dGVudiBwd2QgcHl0aG9uIHF1ZXJ5U3ViZGl2IHF1aXQgcmFkX3RvX2RlZyByYWRpYWwgcmFkaW9CdXR0b24gcmFkaW9CdXR0b25HcnAgcmFkaW9Db2xsZWN0aW9uIHJhZGlvTWVudUl0ZW1Db2xsZWN0aW9uIHJhbXBDb2xvclBvcnQgcmFuZCByYW5kb21pemVGb2xsaWNsZXMgcmFuZHN0YXRlIHJhbmdlQ29udHJvbCByZWFkVGFrZSByZWJ1aWxkQ3VydmUgcmVidWlsZFN1cmZhY2UgcmVjb3JkQXR0ciByZWNvcmREZXZpY2UgcmVkbyByZWZlcmVuY2UgcmVmZXJlbmNlRWRpdCByZWZlcmVuY2VRdWVyeSByZWZpbmVTdWJkaXZTZWxlY3Rpb25MaXN0IHJlZnJlc2ggcmVmcmVzaEFFIHJlZ2lzdGVyUGx1Z2luUmVzb3VyY2UgcmVoYXNoIHJlbG9hZEltYWdlIHJlbW92ZUpvaW50IHJlbW92ZU11bHRpSW5zdGFuY2UgcmVtb3ZlUGFuZWxDYXRlZ29yeSByZW5hbWUgcmVuYW1lQXR0ciByZW5hbWVTZWxlY3Rpb25MaXN0IHJlbmFtZVVJIHJlbmRlciByZW5kZXJHbG9iYWxzTm9kZSByZW5kZXJJbmZvIHJlbmRlckxheWVyQnV0dG9uIHJlbmRlckxheWVyUGFyZW50IHJlbmRlckxheWVyUG9zdFByb2Nlc3MgcmVuZGVyTGF5ZXJVbnBhcmVudCByZW5kZXJNYW5pcCByZW5kZXJQYXJ0aXRpb24gcmVuZGVyUXVhbGl0eU5vZGUgcmVuZGVyU2V0dGluZ3MgcmVuZGVyVGh1bWJuYWlsVXBkYXRlIHJlbmRlcldpbmRvd0VkaXRvciByZW5kZXJXaW5kb3dTZWxlY3RDb250ZXh0IHJlbmRlcmVyIHJlb3JkZXIgcmVvcmRlckRlZm9ybWVycyByZXF1aXJlcyByZXJvb3QgcmVzYW1wbGVGbHVpZCByZXNldEFFIHJlc2V0UGZ4VG9Qb2x5Q2FtZXJhIHJlc2V0VG9vbCByZXNvbHV0aW9uTm9kZSByZXRhcmdldCByZXZlcnNlQ3VydmUgcmV2ZXJzZVN1cmZhY2UgcmV2b2x2ZSByZ2JfdG9faHN2IHJpZ2lkQm9keSByaWdpZFNvbHZlciByb2xsIHJvbGxDdHggcm9vdE9mIHJvdCByb3RhdGUgcm90YXRpb25JbnRlcnBvbGF0aW9uIHJvdW5kQ29uc3RhbnRSYWRpdXMgcm93Q29sdW1uTGF5b3V0IHJvd0xheW91dCBydW5UaW1lQ29tbWFuZCBydW51cCBzYW1wbGVJbWFnZSBzYXZlQWxsU2hlbHZlcyBzYXZlQXR0clByZXNldCBzYXZlRmx1aWQgc2F2ZUltYWdlIHNhdmVJbml0aWFsU3RhdGUgc2F2ZU1lbnUgc2F2ZVByZWZPYmplY3RzIHNhdmVQcmVmcyBzYXZlU2hlbGYgc2F2ZVRvb2xTZXR0aW5ncyBzY2FsZSBzY2FsZUJydXNoQnJpZ2h0bmVzcyBzY2FsZUNvbXBvbmVudHMgc2NhbGVDb25zdHJhaW50IHNjYWxlS2V5IHNjYWxlS2V5Q3R4IHNjZW5lRWRpdG9yIHNjZW5lVUlSZXBsYWNlbWVudCBzY21oIHNjcmlwdEN0eCBzY3JpcHRFZGl0b3JJbmZvIHNjcmlwdEpvYiBzY3JpcHROb2RlIHNjcmlwdFRhYmxlIHNjcmlwdFRvU2hlbGYgc2NyaXB0ZWRQYW5lbCBzY3JpcHRlZFBhbmVsVHlwZSBzY3JvbGxGaWVsZCBzY3JvbGxMYXlvdXQgc2N1bHB0IHNlYXJjaFBhdGhBcnJheSBzZWVkIHNlbExvYWRTZXR0aW5ncyBzZWxlY3Qgc2VsZWN0Q29udGV4dCBzZWxlY3RDdXJ2ZUNWIHNlbGVjdEtleSBzZWxlY3RLZXlDdHggc2VsZWN0S2V5ZnJhbWVSZWdpb25DdHggc2VsZWN0TW9kZSBzZWxlY3RQcmVmIHNlbGVjdFByaW9yaXR5IHNlbGVjdFR5cGUgc2VsZWN0ZWROb2RlcyBzZWxlY3Rpb25Db25uZWN0aW9uIHNlcGFyYXRvciBzZXRBdHRyIHNldEF0dHJFbnVtUmVzb3VyY2Ugc2V0QXR0ck1hcHBpbmcgc2V0QXR0ck5pY2VOYW1lUmVzb3VyY2Ugc2V0Q29uc3RyYWludFJlc3RQb3NpdGlvbiBzZXREZWZhdWx0U2hhZGluZ0dyb3VwIHNldERyaXZlbktleWZyYW1lIHNldER5bmFtaWMgc2V0RWRpdEN0eCBzZXRFZGl0b3Igc2V0Rmx1aWRBdHRyIHNldEZvY3VzIHNldEluZmluaXR5IHNldElucHV0RGV2aWNlTWFwcGluZyBzZXRLZXlDdHggc2V0S2V5UGF0aCBzZXRLZXlmcmFtZSBzZXRLZXlmcmFtZUJsZW5kc2hhcGVUYXJnZXRXdHMgc2V0TWVudU1vZGUgc2V0Tm9kZU5pY2VOYW1lUmVzb3VyY2Ugc2V0Tm9kZVR5cGVGbGFnIHNldFBhcmVudCBzZXRQYXJ0aWNsZUF0dHIgc2V0UGZ4VG9Qb2x5Q2FtZXJhIHNldFBsdWdpblJlc291cmNlIHNldFByb2plY3Qgc2V0U3RhbXBEZW5zaXR5IHNldFN0YXJ0dXBNZXNzYWdlIHNldFN0YXRlIHNldFRvb2xUbyBzZXRVSVRlbXBsYXRlIHNldFhmb3JtTWFuaXAgc2V0cyBzaGFkaW5nQ29ubmVjdGlvbiBzaGFkaW5nR2VvbWV0cnlSZWxDdHggc2hhZGluZ0xpZ2h0UmVsQ3R4IHNoYWRpbmdOZXR3b3JrQ29tcGFyZSBzaGFkaW5nTm9kZSBzaGFwZUNvbXBhcmUgc2hlbGZCdXR0b24gc2hlbGZMYXlvdXQgc2hlbGZUYWJMYXlvdXQgc2hlbGxGaWVsZCBzaG9ydE5hbWVPZiBzaG93SGVscCBzaG93SGlkZGVuIHNob3dNYW5pcEN0eCBzaG93U2VsZWN0aW9uSW5UaXRsZSBzaG93U2hhZGluZ0dyb3VwQXR0ckVkaXRvciBzaG93V2luZG93IHNpZ24gc2ltcGxpZnkgc2luIHNpbmdsZVByb2ZpbGVCaXJhaWxTdXJmYWNlIHNpemUgc2l6ZUJ5dGVzIHNraW5DbHVzdGVyIHNraW5QZXJjZW50IHNtb290aEN1cnZlIHNtb290aFRhbmdlbnRTdXJmYWNlIHNtb290aHN0ZXAgc25hcDJ0bzIgc25hcEtleSBzbmFwTW9kZSBzbmFwVG9nZXRoZXJDdHggc25hcHNob3Qgc29mdCBzb2Z0TW9kIHNvZnRNb2RDdHggc29ydCBzb3VuZCBzb3VuZENvbnRyb2wgc291cmNlIHNwYWNlTG9jYXRvciBzcGhlcmUgc3BocmFuZCBzcG90TGlnaHQgc3BvdExpZ2h0UHJldmlld1BvcnQgc3ByZWFkU2hlZXRFZGl0b3Igc3ByaW5nIHNxcnQgc3F1YXJlU3VyZmFjZSBzcnRDb250ZXh0IHN0YWNrVHJhY2Ugc3RhcnRTdHJpbmcgc3RhcnRzV2l0aCBzdGl0Y2hBbmRFeHBsb2RlU2hlbGwgc3RpdGNoU3VyZmFjZSBzdGl0Y2hTdXJmYWNlUG9pbnRzIHN0cmNtcCBzdHJpbmdBcnJheUNhdGVuYXRlIHN0cmluZ0FycmF5Q29udGFpbnMgc3RyaW5nQXJyYXlDb3VudCBzdHJpbmdBcnJheUluc2VydEF0SW5kZXggc3RyaW5nQXJyYXlJbnRlcnNlY3RvciBzdHJpbmdBcnJheVJlbW92ZSBzdHJpbmdBcnJheVJlbW92ZUF0SW5kZXggc3RyaW5nQXJyYXlSZW1vdmVEdXBsaWNhdGVzIHN0cmluZ0FycmF5UmVtb3ZlRXhhY3Qgc3RyaW5nQXJyYXlUb1N0cmluZyBzdHJpbmdUb1N0cmluZ0FycmF5IHN0cmlwIHN0cmlwUHJlZml4RnJvbU5hbWUgc3Ryb2tlIHN1YmRBdXRvUHJvamVjdGlvbiBzdWJkQ2xlYW5Ub3BvbG9neSBzdWJkQ29sbGFwc2Ugc3ViZER1cGxpY2F0ZUFuZENvbm5lY3Qgc3ViZEVkaXRVViBzdWJkTGlzdENvbXBvbmVudENvbnZlcnNpb24gc3ViZE1hcEN1dCBzdWJkTWFwU2V3TW92ZSBzdWJkTWF0Y2hUb3BvbG9neSBzdWJkTWlycm9yIHN1YmRUb0JsaW5kIHN1YmRUb1BvbHkgc3ViZFRyYW5zZmVyVVZzVG9DYWNoZSBzdWJkaXYgc3ViZGl2Q3JlYXNlIHN1YmRpdkRpc3BsYXlTbW9vdGhuZXNzIHN1YnN0aXR1dGUgc3Vic3RpdHV0ZUFsbFN0cmluZyBzdWJzdGl0dXRlR2VvbWV0cnkgc3Vic3RyaW5nIHN1cmZhY2Ugc3VyZmFjZVNhbXBsZXIgc3VyZmFjZVNoYWRlckxpc3Qgc3dhdGNoRGlzcGxheVBvcnQgc3dpdGNoVGFibGUgc3ltYm9sQnV0dG9uIHN5bWJvbENoZWNrQm94IHN5c0ZpbGUgc3lzdGVtIHRhYkxheW91dCB0YW4gdGFuZ2VudENvbnN0cmFpbnQgdGV4TGF0dGljZURlZm9ybUNvbnRleHQgdGV4TWFuaXBDb250ZXh0IHRleE1vdmVDb250ZXh0IHRleE1vdmVVVlNoZWxsQ29udGV4dCB0ZXhSb3RhdGVDb250ZXh0IHRleFNjYWxlQ29udGV4dCB0ZXhTZWxlY3RDb250ZXh0IHRleFNlbGVjdFNob3J0ZXN0UGF0aEN0eCB0ZXhTbXVkZ2VVVkNvbnRleHQgdGV4V2luVG9vbEN0eCB0ZXh0IHRleHRDdXJ2ZXMgdGV4dEZpZWxkIHRleHRGaWVsZEJ1dHRvbkdycCB0ZXh0RmllbGRHcnAgdGV4dE1hbmlwIHRleHRTY3JvbGxMaXN0IHRleHRUb1NoZWxmIHRleHR1cmVEaXNwbGFjZVBsYW5lIHRleHR1cmVIYWlyQ29sb3IgdGV4dHVyZVBsYWNlbWVudENvbnRleHQgdGV4dHVyZVdpbmRvdyB0aHJlYWRDb3VudCB0aHJlZVBvaW50QXJjQ3R4IHRpbWVDb250cm9sIHRpbWVQb3J0IHRpbWVyWCB0b05hdGl2ZVBhdGggdG9nZ2xlIHRvZ2dsZUF4aXMgdG9nZ2xlV2luZG93VmlzaWJpbGl0eSB0b2tlbml6ZSB0b2tlbml6ZUxpc3QgdG9sZXJhbmNlIHRvbG93ZXIgdG9vbEJ1dHRvbiB0b29sQ29sbGVjdGlvbiB0b29sRHJvcHBlZCB0b29sSGFzT3B0aW9ucyB0b29sUHJvcGVydHlXaW5kb3cgdG9ydXMgdG91cHBlciB0cmFjZSB0cmFjayB0cmFja0N0eCB0cmFuc2ZlckF0dHJpYnV0ZXMgdHJhbnNmb3JtQ29tcGFyZSB0cmFuc2Zvcm1MaW1pdHMgdHJhbnNsYXRvciB0cmltIHRydW5jIHRydW5jYXRlRmx1aWRDYWNoZSB0cnVuY2F0ZUhhaXJDYWNoZSB0dW1ibGUgdHVtYmxlQ3R4IHR1cmJ1bGVuY2UgdHdvUG9pbnRBcmNDdHggdWlSZXMgdWlUZW1wbGF0ZSB1bmFzc2lnbklucHV0RGV2aWNlIHVuZG8gdW5kb0luZm8gdW5ncm91cCB1bmlmb3JtIHVuaXQgdW5sb2FkUGx1Z2luIHVudGFuZ2xlVVYgdW50aXRsZWRGaWxlTmFtZSB1bnRyaW0gdXBBeGlzIHVwZGF0ZUFFIHVzZXJDdHggdXZMaW5rIHV2U25hcHNob3QgdmFsaWRhdGVTaGVsZk5hbWUgdmVjdG9yaXplIHZpZXcyZFRvb2xDdHggdmlld0NhbWVyYSB2aWV3Q2xpcFBsYW5lIHZpZXdGaXQgdmlld0hlYWRPbiB2aWV3TG9va0F0IHZpZXdNYW5pcCB2aWV3UGxhY2Ugdmlld1NldCB2aXNvciB2b2x1bWVBeGlzIHZvcnRleCB3YWl0Q3Vyc29yIHdhcm5pbmcgd2ViQnJvd3NlciB3ZWJCcm93c2VyUHJlZnMgd2hhdElzIHdpbmRvdyB3aW5kb3dQcmVmIHdpcmUgd2lyZUNvbnRleHQgd29ya3NwYWNlIHdyaW5rbGUgd3JpbmtsZUNvbnRleHQgd3JpdGVUYWtlIHhibUxhbmdQYXRoTGlzdCB4Zm9ybSIsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltlLkNfTlVNQkVSX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiYCIsZW5kOiJgIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiJbXFwkXFwlXFxAXShcXF5cXHdcXGJ8I1xcdyt8W15cXHNcXHd7XXx7XFx3K318XFx3KykifSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lcmN1cnkuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJtb2R1bGUgdXNlX21vZHVsZSBpbXBvcnRfbW9kdWxlIGluY2x1ZGVfbW9kdWxlIGVuZF9tb2R1bGUgaW5pdGlhbGlzZSBtdXRhYmxlIGluaXRpYWxpemUgZmluYWxpemUgZmluYWxpc2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIHByZWQgbW9kZSBmdW5jIHR5cGUgaW5zdCBzb2x2ZXIgYW55X3ByZWQgYW55X2Z1bmMgaXMgc2VtaWRldCBkZXQgbm9uZGV0IG11bHRpIGVycm9uZW91cyBmYWlsdXJlIGNjX25vbmRldCBjY19tdWx0aSB0eXBlY2xhc3MgaW5zdGFuY2Ugd2hlcmUgcHJhZ21hIHByb21pc2UgZXh0ZXJuYWwgdHJhY2UgYXRvbWljIG9yX2Vsc2UgcmVxdWlyZV9jb21wbGV0ZV9zd2l0Y2ggcmVxdWlyZV9kZXQgcmVxdWlyZV9zZW1pZGV0IHJlcXVpcmVfbXVsdGkgcmVxdWlyZV9ub25kZXQgcmVxdWlyZV9jY19tdWx0aSByZXF1aXJlX2NjX25vbmRldCByZXF1aXJlX2Vycm9uZW91cyByZXF1aXJlX2ZhaWx1cmUiLG1ldGE6ImlubGluZSBub19pbmxpbmUgdHlwZV9zcGVjIHNvdXJjZV9maWxlIGZhY3RfdGFibGUgb2Jzb2xldGUgbWVtbyBsb29wX2NoZWNrIG1pbmltYWxfbW9kZWwgdGVybWluYXRlcyBkb2VzX25vdF90ZXJtaW5hdGUgY2hlY2tfdGVybWluYXRpb24gcHJvbWlzZV9lcXVpdmFsZW50X2NsYXVzZXMgZm9yZWlnbl9wcm9jIGZvcmVpZ25fZGVjbCBmb3JlaWduX2NvZGUgZm9yZWlnbl90eXBlIGZvcmVpZ25faW1wb3J0X21vZHVsZSBmb3JlaWduX2V4cG9ydF9lbnVtIGZvcmVpZ25fZXhwb3J0IGZvcmVpZ25fZW51bSBtYXlfY2FsbF9tZXJjdXJ5IHdpbGxfbm90X2NhbGxfbWVyY3VyeSB0aHJlYWRfc2FmZSBub3RfdGhyZWFkX3NhZmUgbWF5YmVfdGhyZWFkX3NhZmUgcHJvbWlzZV9wdXJlIHByb21pc2Vfc2VtaXB1cmUgdGFibGVkX2Zvcl9pbyBsb2NhbCB1bnRyYWlsZWQgdHJhaWxlZCBhdHRhY2hfdG9faW9fc3RhdGUgY2FuX3Bhc3NfYXNfbWVyY3VyeV90eXBlIHN0YWJsZSB3aWxsX25vdF90aHJvd19leGNlcHRpb24gbWF5X21vZGlmeV90cmFpbCB3aWxsX25vdF9tb2RpZnlfdHJhaWwgbWF5X2R1cGxpY2F0ZSBtYXlfbm90X2R1cGxpY2F0ZSBhZmZlY3RzX2xpdmVuZXNzIGRvZXNfbm90X2FmZmVjdF9saXZlbmVzcyBkb2VzbnRfYWZmZWN0X2xpdmVuZXNzIG5vX3NoYXJpbmcgdW5rbm93bl9zaGFyaW5nIHNoYXJpbmciLGJ1aWx0X2luOiJzb21lIGFsbCBub3QgaWYgdGhlbiBlbHNlIHRydWUgZmFpbCBmYWxzZSB0cnkgY2F0Y2ggY2F0Y2hfYW55IHNlbWlkZXRfdHJ1ZSBzZW1pZGV0X2ZhbHNlIHNlbWlkZXRfZmFpbCBpbXB1cmVfdHJ1ZSBpbXB1cmUgc2VtaXB1cmUifSxuPWUuQ09NTUVOVCgiJSIsIiQiKSxyPXtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IjAnLlxcfDBbYm94XVswLTlhLWZBLUZdKiJ9LG89ZS5pbmhlcml0KGUuQVBPU19TVFJJTkdfTU9ERSx7cmVsZXZhbmNlOjB9KSxzPWUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtyZWxldmFuY2U6MH0pLGk9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXFxcW2FiZm5ydHZdXFx8XFxcXHhbMC05YS1mQS1GXSpcXFxcXFx8JVstKyMgKi4wLTldKltkaW94WHVjc2ZlRWdHcF0iLHJlbGV2YW5jZTowfTtyZXR1cm4gcy5jb250YWlucy5wdXNoKGkpLHthbGlhc2VzOlsibSIsIm1vbyJdLGtleXdvcmRzOnQsY29udGFpbnM6W3tjbGFzc05hbWU6ImJ1aWx0X2luIix2YXJpYW50czpbe2JlZ2luOiI8PT4ifSx7YmVnaW46Ijw9IixyZWxldmFuY2U6MH0se2JlZ2luOiI9PiIscmVsZXZhbmNlOjB9LHtiZWdpbjoiL1xcXFwifSx7YmVnaW46IlxcXFwvIn1dfSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsdmFyaWFudHM6W3tiZWdpbjoiOi1cXHwtLVx4M2UifSx7YmVnaW46Ij0iLHJlbGV2YW5jZTowfV19LG4sZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxyLGUuTlVNQkVSX01PREUsbyxzLHtiZWdpbjovOi0vfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21pcHNhc20uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGFsaWFzZXM6WyJtaXBzIl0sbGV4ZW1lczoiXFwuPyIrZS5JREVOVF9SRSxrZXl3b3Jkczp7bWV0YToiLjJieXRlIC40Ynl0ZSAuYWxpZ24gLmFzY2lpIC5hc2NpeiAuYmFsaWduIC5ieXRlIC5jb2RlIC5kYXRhIC5lbHNlIC5lbmQgLmVuZGlmIC5lbmRtIC5lbmRyIC5lcXUgLmVyciAuZXhpdG0gLmV4dGVybiAuZ2xvYmFsIC5od29yZCAuaWYgLmlmZGVmIC5pZm5kZWYgLmluY2x1ZGUgLmlycCAubG9uZyAubWFjcm8gLnJlcHQgLnJlcSAuc2VjdGlvbiAuc2V0IC5za2lwIC5zcGFjZSAudGV4dCAud29yZCAubHRvcmcgIixidWlsdF9pbjoiJDAgJDEgJDIgJDMgJDQgJDUgJDYgJDcgJDggJDkgJDEwICQxMSAkMTIgJDEzICQxNCAkMTUgJDE2ICQxNyAkMTggJDE5ICQyMCAkMjEgJDIyICQyMyAkMjQgJDI1ICQyNiAkMjcgJDI4ICQyOSAkMzAgJDMxIHplcm8gYXQgdjAgdjEgYTAgYTEgYTIgYTMgYTQgYTUgYTYgYTcgdDAgdDEgdDIgdDMgdDQgdDUgdDYgdDcgdDggdDkgczAgczEgczIgczMgczQgczUgczYgczcgczggazAgazEgZ3Agc3AgZnAgcmEgJGYwICRmMSAkZjIgJGYyICRmNCAkZjUgJGY2ICRmNyAkZjggJGY5ICRmMTAgJGYxMSAkZjEyICRmMTMgJGYxNCAkZjE1ICRmMTYgJGYxNyAkZjE4ICRmMTkgJGYyMCAkZjIxICRmMjIgJGYyMyAkZjI0ICRmMjUgJGYyNiAkZjI3ICRmMjggJGYyOSAkZjMwICRmMzEgQ29udGV4dCBSYW5kb20gRW50cnlMbzAgRW50cnlMbzEgQ29udGV4dCBQYWdlTWFzayBXaXJlZCBFbnRyeUhpIEhXUkVuYSBCYWRWQWRkciBDb3VudCBDb21wYXJlIFNSIEludEN0bCBTUlNDdGwgU1JTTWFwIENhdXNlIEVQQyBQUklkIEVCYXNlIENvbmZpZyBDb25maWcxIENvbmZpZzIgQ29uZmlnMyBMTEFkZHIgRGVidWcgREVQQyBERVNBVkUgQ2FjaGVFcnIgRUNDIEVycm9yRVBDIFRhZ0xvIERhdGFMbyBUYWdIaSBEYXRhSGkgV2F0Y2hMbyBXYXRjaEhpIFBlcmZDdGwgUGVyZkNudCAifSxjb250YWluczpbe2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IlxcYihhZGRpP3U/fGFuZGk/fGIoYWwpP3xiZXFsP3xiZ2V6KGFsKT9sP3xiZ3R6bD98Ymxlemw/fGJsdHooYWwpP2w/fGJuZWw/fGNsW296XXxkaXZ1P3xleHR8aW5zfGooYWwpP3xqYWxyKC5oYik/fGpyKC5oYik/fGxidT98bGh1P3xsbHxsdWl8bHdbbHJdP3xtYWRkdT98bWZoaXxtZmxvfG1vdm58bW92enxtb3ZlfG1zdWJ1P3xtdGhpfG10bG98bXVsfG11bHR1P3xub3B8bm9yfG9yaT98cm90cnY/fHNifHNjfHNlW2JoXXxzaHxzbGx2P3xzbHRpP3U/fHNyYXY/fHNybHY/fHN1YnU/fHN3W2xyXT98eG9yaT98d3NiaHxhYnMuW3NkXXxhZGQuW3NkXXxhbG52LnBzfGJjMVtmdF1sP3xjLihzP2Z8dW58dT9lcXxbb3VdbHR8W291XWxlfG5nbGU/fHNlcXxsW2V0XXxuZ1tldF0pLltzZF18KGNlaWx8Zmxvb3J8cm91bmR8dHJ1bmMpLltsd10uW3NkXXxjZmMxfGN2dC5kLltsc3ddfGN2dC5sLltkc3ddfGN2dC5wcy5zfGN2dC5zLltkbHddfGN2dC5zLnBbbHVdfGN2dC53LltkbHNdfGRpdi5bZHNdfGxkeD9jMXxsdXhjMXxsd3g/YzF8bWFkZC5bc2RdfG1mYzF8bW92W2ZudHpdPy5bZHNdfG1zdWIuW3NkXXxtdGg/YzF8bXVsLltkc118bmVnLltkc118bm1hZGQuW2RzXXxubXN1Yi5bZHNdfHBbbHVdW2x1XS5wc3xyZWNpcC5mbXR8cj9zcXJ0Lltkc118c2R4P2MxfHN1Yi5bZHNdfHN1eGMxfHN3eD9jMXxicmVha3xjYWNoZXxkP2VyZXR8W2RlXWl8ZWhifG1mYzB8bXRjMHxwYXVzZXxwcmVmeD98cmRod3J8cmRwZ3ByfHNkYmJwfHNzbm9wfHN5bmNpP3xzeXNjYWxsfHRlcWk/fHRnZWk/dT98dGxiKHB8cnx3W2lyXSl8dGx0aT91P3x0bmVpP3x3YWl0fHdycGdwcikiLGVuZDoiXFxzIn0sZS5DT01NRU5UKCJbOyNdIiwiJCIpLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IlteXFxcXF0nIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOiJcXHwiLGVuZDoiXFx8IixpbGxlZ2FsOiJcXG4iLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IjB4WzAtOWEtZl0rIn0se2JlZ2luOiJcXGItP1xcZCsifV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN5bWJvbCIsdmFyaWFudHM6W3tiZWdpbjoiXlxccypbYS16X1xcLlxcJF1bYS16MC05X1xcLlxcJF0rOiJ9LHtiZWdpbjoiXlxccypbMC05XSs6In0se2JlZ2luOiJbMC05XStbYmZdIn1dLHJlbGV2YW5jZTowfV0saWxsZWdhbDoiLyJ9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21pemFyLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6ImVudmlyb24gdm9jYWJ1bGFyaWVzIG5vdGF0aW9ucyBjb25zdHJ1Y3RvcnMgZGVmaW5pdGlvbnMgcmVnaXN0cmF0aW9ucyB0aGVvcmVtcyBzY2hlbWVzIHJlcXVpcmVtZW50cyBiZWdpbiBlbmQgZGVmaW5pdGlvbiByZWdpc3RyYXRpb24gY2x1c3RlciBleGlzdGVuY2UgcHJlZCBmdW5jIGRlZnByZWQgZGVmZnVuYyB0aGVvcmVtIHByb29mIGxldCB0YWtlIGFzc3VtZSB0aGVuIHRodXMgaGVuY2UgZXggZm9yIHN0IGhvbGRzIGNvbnNpZGVyIHJlY29uc2lkZXIgc3VjaCB0aGF0IGFuZCBpbiBwcm92aWRlZCBvZiBhcyBmcm9tIGJlIGJlaW5nIGJ5IG1lYW5zIGVxdWFscyBpbXBsaWVzIGlmZiByZWRlZmluZSBkZWZpbmUgbm93IG5vdCBvciBhdHRyIGlzIG1vZGUgc3VwcG9zZSBwZXIgY2FzZXMgc2V0IHRoZXNpcyBjb250cmFkaWN0aW9uIHNjaGVtZSByZXNlcnZlIHN0cnVjdCBjb3JyZWN0bmVzcyBjb21wYXRpYmlsaXR5IGNvaGVyZW5jZSBzeW1tZXRyeSBhc3N5bWV0cnkgcmVmbGV4aXZpdHkgaXJyZWZsZXhpdml0eSBjb25uZWN0ZWRuZXNzIHVuaXF1ZW5lc3MgY29tbXV0YXRpdml0eSBpZGVtcG90ZW5jZSBpbnZvbHV0aXZlbmVzcyBwcm9qZWN0aXZpdHkiLGNvbnRhaW5zOltlLkNPTU1FTlQoIjo6IiwiJCIpXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9qb2xpY2lvdXMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il5fXyhFTkR8REFUQSlfXyQifSx7YmVnaW46Il5cXHMqJXsxLDJ9PXswLDJ9IixlbmQ6IiQiLHN1Ykxhbmd1YWdlOiJwZXJsIn0se2JlZ2luOiI8JXsxLDJ9PXswLDJ9IixlbmQ6Ij17MCwxfSU+IixzdWJMYW5ndWFnZToicGVybCIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9ua2V5LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7YmVnaW46IlskXVthLWZBLUYwLTldKyJ9LGUuTlVNQkVSX01PREVdfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3Jkczp7a2V5d29yZDoicHVibGljIHByaXZhdGUgcHJvcGVydHkgY29udGludWUgZXhpdCBleHRlcm4gbmV3IHRyeSBjYXRjaCBlYWNoaW4gbm90IGFic3RyYWN0IGZpbmFsIHNlbGVjdCBjYXNlIGRlZmF1bHQgY29uc3QgbG9jYWwgZ2xvYmFsIGZpZWxkIGVuZCBpZiB0aGVuIGVsc2UgZWxzZWlmIGVuZGlmIHdoaWxlIHdlbmQgcmVwZWF0IHVudGlsIGZvcmV2ZXIgZm9yIHRvIHN0ZXAgbmV4dCByZXR1cm4gbW9kdWxlIGlubGluZSB0aHJvdyBpbXBvcnQiLGJ1aWx0X2luOiJEZWJ1Z0xvZyBEZWJ1Z1N0b3AgRXJyb3IgUHJpbnQgQUNvcyBBQ29zciBBU2luIEFTaW5yIEFUYW4gQVRhbjIgQVRhbjJyIEFUYW5yIEFicyBBYnMgQ2VpbCBDbGFtcCBDbGFtcCBDb3MgQ29zciBFeHAgRmxvb3IgTG9nIE1heCBNYXggTWluIE1pbiBQb3cgU2duIFNnbiBTaW4gU2luciBTcXJ0IFRhbiBUYW5yIFNlZWQgUEkgSEFMRlBJIFRXT1BJIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgYW5kIG9yIHNobCBzaHIgbW9kIn0saWxsZWdhbDovXC9cKi8sY29udGFpbnM6W2UuQ09NTUVOVCgiI3JlbSIsIiNlbmQiKSxlLkNPTU1FTlQoIiciLCIkIix7cmVsZXZhbmNlOjB9KSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24gbWV0aG9kIixlbmQ6IlsoPTpdfCQiLGlsbGVnYWw6L1xuLyxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixlbmQ6IiQiLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IlxcYihzZWxmfHN1cGVyKVxcYiJ9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXHMqIyIsZW5kOiIkIixrZXl3b3Jkczp7Im1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxzZWlmIGVuZGlmIGVuZCB0aGVuIn19LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeXFxzKnN0cmljdFxcYiJ9LHtiZWdpbktleXdvcmRzOiJhbGlhcyIsZW5kOiI9Iixjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSxlLlFVT1RFX1NUUklOR19NT0RFLHRdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tb29uc2NyaXB0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17a2V5d29yZDoiaWYgdGhlbiBub3QgZm9yIGluIHdoaWxlIGRvIHJldHVybiBlbHNlIGVsc2VpZiBicmVhayBjb250aW51ZSBzd2l0Y2ggYW5kIG9yIHVubGVzcyB3aGVuIGNsYXNzIGV4dGVuZHMgc3VwZXIgbG9jYWwgaW1wb3J0IGV4cG9ydCBmcm9tIHVzaW5nIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG5pbCIsYnVpbHRfaW46Il9HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSJ9LG49IltBLVphLXokX11bMC05QS1aYS16JF9dKiIscj17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46LyNcey8sZW5kOi99LyxrZXl3b3Jkczp0fSxvPVtlLmluaGVyaXQoZS5DX05VTUJFUl9NT0RFLHtzdGFydHM6e2VuZDoiKFxccyovKT8iLHJlbGV2YW5jZTowfX0pLHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscl19XX0se2NsYXNzTmFtZToiYnVpbHRfaW4iLGJlZ2luOiJAX18iK2UuSURFTlRfUkV9LHtiZWdpbjoiQCIrZS5JREVOVF9SRX0se2JlZ2luOmUuSURFTlRfUkUrIlxcXFwiK2UuSURFTlRfUkV9XTtyLmNvbnRhaW5zPW87dmFyIHM9ZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46bn0pLGk9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoW15cXChdIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dCxjb250YWluczpbInNlbGYiXS5jb25jYXQobyl9XX07cmV0dXJue2FsaWFzZXM6WyJtb29uIl0sa2V5d29yZHM6dCxpbGxlZ2FsOi9cL1wqLyxjb250YWluczpvLmNvbmNhdChbZS5DT01NRU5UKCItLSIsIiQiKSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46Il5cXHMqIituKyJcXHMqPVxccyooXFwoLipcXCkpP1xccypcXEJbLT1dPiIsZW5kOiJbLT1dPiIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3MsaV19LHtiZWdpbjovW1woLDo9XVxzKi8scmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiKFxcKC4qXFwpKT9cXHMqXFxCWy09XT4iLGVuZDoiWy09XT4iLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltpXX1dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoiJCIsaWxsZWdhbDovWzo9IlxbXF1dLyxjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImV4dGVuZHMiLGVuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6L1s6PSJcW1xdXS8sY29udGFpbnM6W3NdfSxzXX0se2NsYXNzTmFtZToibmFtZSIsYmVnaW46bisiOiIsZW5kOiI6IixyZXR1cm5CZWdpbjohMCxyZXR1cm5FbmQ6ITAscmVsZXZhbmNlOjB9XSl9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL24xcWwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiYnVpbGQgY3JlYXRlIGluZGV4IGRlbGV0ZSBkcm9wIGV4cGxhaW4gaW5mZXJ8MTAgaW5zZXJ0IG1lcmdlIHByZXBhcmUgc2VsZWN0IHVwZGF0ZSB1cHNlcnR8MTAiLGVuZDovOy8sZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6e2tleXdvcmQ6ImFsbCBhbHRlciBhbmFseXplIGFuZCBhbnkgYXJyYXkgYXMgYXNjIGJlZ2luIGJldHdlZW4gYmluYXJ5IGJvb2xlYW4gYnJlYWsgYnVja2V0IGJ1aWxkIGJ5IGNhbGwgY2FzZSBjYXN0IGNsdXN0ZXIgY29sbGF0ZSBjb2xsZWN0aW9uIGNvbW1pdCBjb25uZWN0IGNvbnRpbnVlIGNvcnJlbGF0ZSBjb3ZlciBjcmVhdGUgZGF0YWJhc2UgZGF0YXNldCBkYXRhc3RvcmUgZGVjbGFyZSBkZWNyZW1lbnQgZGVsZXRlIGRlcml2ZWQgZGVzYyBkZXNjcmliZSBkaXN0aW5jdCBkbyBkcm9wIGVhY2ggZWxlbWVudCBlbHNlIGVuZCBldmVyeSBleGNlcHQgZXhjbHVkZSBleGVjdXRlIGV4aXN0cyBleHBsYWluIGZldGNoIGZpcnN0IGZsYXR0ZW4gZm9yIGZvcmNlIGZyb20gZnVuY3Rpb24gZ3JhbnQgZ3JvdXAgZ3NpIGhhdmluZyBpZiBpZ25vcmUgaWxpa2UgaW4gaW5jbHVkZSBpbmNyZW1lbnQgaW5kZXggaW5mZXIgaW5saW5lIGlubmVyIGluc2VydCBpbnRlcnNlY3QgaW50byBpcyBqb2luIGtleSBrZXlzIGtleXNwYWNlIGtub3duIGxhc3QgbGVmdCBsZXQgbGV0dGluZyBsaWtlIGxpbWl0IGxzbSBtYXAgbWFwcGluZyBtYXRjaGVkIG1hdGVyaWFsaXplZCBtZXJnZSBtaW51cyBuYW1lc3BhY2UgbmVzdCBub3QgbnVtYmVyIG9iamVjdCBvZmZzZXQgb24gb3B0aW9uIG9yIG9yZGVyIG91dGVyIG92ZXIgcGFyc2UgcGFydGl0aW9uIHBhc3N3b3JkIHBhdGggcG9vbCBwcmVwYXJlIHByaW1hcnkgcHJpdmF0ZSBwcml2aWxlZ2UgcHJvY2VkdXJlIHB1YmxpYyByYXcgcmVhbG0gcmVkdWNlIHJlbmFtZSByZXR1cm4gcmV0dXJuaW5nIHJldm9rZSByaWdodCByb2xlIHJvbGxiYWNrIHNhdGlzZmllcyBzY2hlbWEgc2VsZWN0IHNlbGYgc2VtaSBzZXQgc2hvdyBzb21lIHN0YXJ0IHN0YXRpc3RpY3Mgc3RyaW5nIHN5c3RlbSB0aGVuIHRvIHRyYW5zYWN0aW9uIHRyaWdnZXIgdHJ1bmNhdGUgdW5kZXIgdW5pb24gdW5pcXVlIHVua25vd24gdW5uZXN0IHVuc2V0IHVwZGF0ZSB1cHNlcnQgdXNlIHVzZXIgdXNpbmcgdmFsaWRhdGUgdmFsdWUgdmFsdWVkIHZhbHVlcyB2aWEgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGggd2l0aGluIHdvcmsgeG9yIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgbWlzc2luZ3w1IixidWlsdF9pbjoiYXJyYXlfYWdnIGFycmF5X2FwcGVuZCBhcnJheV9jb25jYXQgYXJyYXlfY29udGFpbnMgYXJyYXlfY291bnQgYXJyYXlfZGlzdGluY3QgYXJyYXlfaWZudWxsIGFycmF5X2xlbmd0aCBhcnJheV9tYXggYXJyYXlfbWluIGFycmF5X3Bvc2l0aW9uIGFycmF5X3ByZXBlbmQgYXJyYXlfcHV0IGFycmF5X3JhbmdlIGFycmF5X3JlbW92ZSBhcnJheV9yZXBlYXQgYXJyYXlfcmVwbGFjZSBhcnJheV9yZXZlcnNlIGFycmF5X3NvcnQgYXJyYXlfc3VtIGF2ZyBjb3VudCBtYXggbWluIHN1bSBncmVhdGVzdCBsZWFzdCBpZm1pc3NpbmcgaWZtaXNzaW5nb3JudWxsIGlmbnVsbCBtaXNzaW5naWYgbnVsbGlmIGlmaW5mIGlmbmFuIGlmbmFub3JpbmYgbmFuaW5mIG5lZ2luZmlmIHBvc2luZmlmIGNsb2NrX21pbGxpcyBjbG9ja19zdHIgZGF0ZV9hZGRfbWlsbGlzIGRhdGVfYWRkX3N0ciBkYXRlX2RpZmZfbWlsbGlzIGRhdGVfZGlmZl9zdHIgZGF0ZV9wYXJ0X21pbGxpcyBkYXRlX3BhcnRfc3RyIGRhdGVfdHJ1bmNfbWlsbGlzIGRhdGVfdHJ1bmNfc3RyIGR1cmF0aW9uX3RvX3N0ciBtaWxsaXMgc3RyX3RvX21pbGxpcyBtaWxsaXNfdG9fc3RyIG1pbGxpc190b191dGMgbWlsbGlzX3RvX3pvbmVfbmFtZSBub3dfbWlsbGlzIG5vd19zdHIgc3RyX3RvX2R1cmF0aW9uIHN0cl90b191dGMgc3RyX3RvX3pvbmVfbmFtZSBkZWNvZGVfanNvbiBlbmNvZGVfanNvbiBlbmNvZGVkX3NpemUgcG9seV9sZW5ndGggYmFzZTY0IGJhc2U2NF9lbmNvZGUgYmFzZTY0X2RlY29kZSBtZXRhIHV1aWQgYWJzIGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNlaWwgY29zIGRlZ3JlZXMgZSBleHAgbG4gbG9nIGZsb29yIHBpIHBvd2VyIHJhZGlhbnMgcmFuZG9tIHJvdW5kIHNpZ24gc2luIHNxcnQgdGFuIHRydW5jIG9iamVjdF9sZW5ndGggb2JqZWN0X25hbWVzIG9iamVjdF9wYWlycyBvYmplY3RfaW5uZXJfcGFpcnMgb2JqZWN0X3ZhbHVlcyBvYmplY3RfaW5uZXJfdmFsdWVzIG9iamVjdF9hZGQgb2JqZWN0X3B1dCBvYmplY3RfcmVtb3ZlIG9iamVjdF91bndyYXAgcmVnZXhwX2NvbnRhaW5zIHJlZ2V4cF9saWtlIHJlZ2V4cF9wb3NpdGlvbiByZWdleHBfcmVwbGFjZSBjb250YWlucyBpbml0Y2FwIGxlbmd0aCBsb3dlciBsdHJpbSBwb3NpdGlvbiByZXBlYXQgcmVwbGFjZSBydHJpbSBzcGxpdCBzdWJzdHIgdGl0bGUgdHJpbSB1cHBlciBpc2FycmF5IGlzYXRvbSBpc2Jvb2xlYW4gaXNudW1iZXIgaXNvYmplY3QgaXNzdHJpbmcgdHlwZSB0b2FycmF5IHRvYXRvbSB0b2Jvb2xlYW4gdG9udW1iZXIgdG9vYmplY3QgdG9zdHJpbmcifSxjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiYCIsZW5kOiJgIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSxyZWxldmFuY2U6Mn0sZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbmdpbnguanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOi9cJFxkKy99LHtiZWdpbjovXCRcey8sZW5kOi99L30se2JlZ2luOiJbXFwkXFxAXSIrZS5VTkRFUlNDT1JFX0lERU5UX1JFfV19LG49e2VuZHNXaXRoUGFyZW50OiEwLGxleGVtZXM6IlthLXovX10rIixrZXl3b3Jkczp7bGl0ZXJhbDoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHJlbGV2YW5jZTowLGlsbGVnYWw6Ij0+Iixjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdF0sdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi8nLyxlbmQ6LycvfV19LHtiZWdpbjoiKFthLXpdKyk6LyIsZW5kOiJcXHMiLGVuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3RdfSx7Y2xhc3NOYW1lOiJyZWdleHAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdF0sdmFyaWFudHM6W3tiZWdpbjoiXFxzXFxeIixlbmQ6Ilxcc3x7fDsiLHJldHVybkVuZDohMH0se2JlZ2luOiJ+XFwqP1xccysiLGVuZDoiXFxzfHt8OyIscmV0dXJuRW5kOiEwfSx7YmVnaW46IlxcKihcXC5bYS16XFwtXSspKyJ9LHtiZWdpbjoiKFthLXpcXC1dK1xcLikrXFwqIn1dfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYlxcZCtba0ttTWdHZHNoZHd5XSpcXGIiLHJlbGV2YW5jZTowfSx0XX07cmV0dXJue2FsaWFzZXM6WyJuZ2lueGNvbmYiXSxjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSx7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMreyIscmV0dXJuQmVnaW46ITAsZW5kOiJ7Iixjb250YWluczpbe2NsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFfV0scmVsZXZhbmNlOjB9LHtiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUrIlxccyIsZW5kOiI7fHsiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSxzdGFydHM6bn1dLHJlbGV2YW5jZTowfV0saWxsZWdhbDoiW15cXHNcXH1dIn19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbmltcm9kLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbIm5pbSJdLGtleXdvcmRzOntrZXl3b3JkOiJhZGRyIGFuZCBhcyBhc20gYmluZCBibG9jayBicmVhayBjYXNlIGNhc3QgY29uc3QgY29udGludWUgY29udmVydGVyIGRpc2NhcmQgZGlzdGluY3QgZGl2IGRvIGVsaWYgZWxzZSBlbmQgZW51bSBleGNlcHQgZXhwb3J0IGZpbmFsbHkgZm9yIGZyb20gZ2VuZXJpYyBpZiBpbXBvcnQgaW4gaW5jbHVkZSBpbnRlcmZhY2UgaXMgaXNub3QgaXRlcmF0b3IgbGV0IG1hY3JvIG1ldGhvZCBtaXhpbiBtb2QgbmlsIG5vdCBub3RpbiBvYmplY3Qgb2Ygb3Igb3V0IHByb2MgcHRyIHJhaXNlIHJlZiByZXR1cm4gc2hsIHNociBzdGF0aWMgdGVtcGxhdGUgdHJ5IHR1cGxlIHR5cGUgdXNpbmcgdmFyIHdoZW4gd2hpbGUgd2l0aCB3aXRob3V0IHhvciB5aWVsZCIsbGl0ZXJhbDoic2hhcmVkIGd1YXJkZWQgc3RkaW4gc3Rkb3V0IHN0ZGVyciByZXN1bHQgdHJ1ZSBmYWxzZSIsYnVpbHRfaW46ImludCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQgZmxvYXQgZmxvYXQzMiBmbG9hdDY0IGJvb2wgY2hhciBzdHJpbmcgY3N0cmluZyBwb2ludGVyIGV4cHIgc3RtdCB2b2lkIGF1dG8gYW55IHJhbmdlIGFycmF5IG9wZW5hcnJheSB2YXJhcmdzIHNlcSBzZXQgY2xvbmcgY3Vsb25nIGNjaGFyIGNzY2hhciBjc2hvcnQgY2ludCBjc2l6ZSBjbG9uZ2xvbmcgY2Zsb2F0IGNkb3VibGUgY2xvbmdkb3VibGUgY3VjaGFyIGN1c2hvcnQgY3VpbnQgY3Vsb25nbG9uZyBjc3RyaW5nYXJyYXkgc2VtaXN0YXRpYyJ9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjove1wuLyxlbmQ6L1wufS8scmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi9bYS16QS1aXVx3KiIvLGVuZDovIi8sY29udGFpbnM6W3tiZWdpbjovIiIvfV19LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyhbYS16QS1aXVx3Kik/IiIiLyxlbmQ6LyIiIi99LGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToidHlwZSIsYmVnaW46L1xiW0EtWl1cdytcYi8scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIscmVsZXZhbmNlOjAsdmFyaWFudHM6W3tiZWdpbjovXGIoMFt4WF1bMC05YS1mQS1GXVtfMC05YS1mQS1GXSopKCc/W2lJdVVdKDh8MTZ8MzJ8NjQpKT8vfSx7YmVnaW46L1xiKDBvWzAtN11bXzAtN10qKSgnP1tpSXVVZkZdKDh8MTZ8MzJ8NjQpKT8vfSx7YmVnaW46L1xiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LHtiZWdpbjovXGIoXGRbX1xkXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99XX0sZS5IQVNIX0NPTU1FTlRfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25peC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6InJlYyB3aXRoIGxldCBpbiBpbmhlcml0IGFzc2VydCBpZiBlbHNlIHRoZW4iLGxpdGVyYWw6InRydWUgZmFsc2Ugb3IgYW5kIG51bGwiLGJ1aWx0X2luOiJpbXBvcnQgYWJvcnQgYmFzZU5hbWVPZiBkaXJPZiBpc051bGwgYnVpbHRpbnMgbWFwIHJlbW92ZUF0dHJzIHRocm93IHRvU3RyaW5nIGRlcml2YXRpb24ifSxuPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovXCRcey8sZW5kOi99LyxrZXl3b3Jkczp0fSxyPXtiZWdpbjovW2EtekEtWjAtOS1fXSsoXHMqPSkvLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjovXFMrL31dfSxvPXtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W25dLHZhcmlhbnRzOlt7YmVnaW46IicnIixlbmQ6IicnIn0se2JlZ2luOiciJyxlbmQ6JyInfV19LHM9W2UuTlVNQkVSX01PREUsZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG8scl07cmV0dXJuIG4uY29udGFpbnM9cyx7YWxpYXNlczpbIm5peG9zIl0sa2V5d29yZHM6dCxjb250YWluczpzfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uc2lzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46L1wkKEFETUlOVE9PTFN8QVBQREFUQXxDREJVUk5fQVJFQXxDTURMSU5FfENPTU1PTkZJTEVTMzJ8Q09NTU9ORklMRVM2NHxDT01NT05GSUxFU3xDT09LSUVTfERFU0tUT1B8RE9DVU1FTlRTfEVYRURJUnxFWEVGSUxFfEVYRVBBVEh8RkFWT1JJVEVTfEZPTlRTfEhJU1RPUll8SFdORFBBUkVOVHxJTlNURElSfElOVEVSTkVUX0NBQ0hFfExBTkdVQUdFfExPQ0FMQVBQREFUQXxNVVNJQ3xORVRIT09EfE9VVERJUnxQSUNUVVJFU3xQTFVHSU5TRElSfFBSSU5USE9PRHxQUk9GSUxFfFBST0dSQU1GSUxFUzMyfFBST0dSQU1GSUxFUzY0fFBST0dSQU1GSUxFU3xRVUlDS0xBVU5DSHxSRUNFTlR8UkVTT1VSQ0VTX0xPQ0FMSVpFRHxSRVNPVVJDRVN8U0VORFRPfFNNUFJPR1JBTVN8U01TVEFSVFVQfFNUQVJUTUVOVXxTWVNESVJ8VEVNUHxURU1QTEFURVN8VklERU9TfFdJTkRJUikvfSxuPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCQre1tcd1wuOi1dK30vfSxyPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCQrXHcrLyxpbGxlZ2FsOi9cKFwpe30vfSxvPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCQrXChbXHdcXlwuOi1dK1wpL30scz17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiIoQVJDSElWRXxGSUxFX0FUVFJJQlVURV9BUkNISVZFfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SEtDUnxIS0NVfEhLRER8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0RZTl9EQVRBfEhLRVlfTE9DQUxfTUFDSElORXxIS0VZX1BFUkZPUk1BTkNFX0RBVEF8SEtFWV9VU0VSU3xIS0xNfEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SURJR05PUkV8SUROT3xJRE9LfElEUkVUUll8SURZRVN8TUJfQUJPUlRSRVRSWUlHTk9SRXxNQl9ERUZCVVRUT04xfE1CX0RFRkJVVFRPTjJ8TUJfREVGQlVUVE9OM3xNQl9ERUZCVVRUT040fE1CX0lDT05FWENMQU1BVElPTnxNQl9JQ09OSU5GT1JNQVRJT058TUJfSUNPTlFVRVNUSU9OfE1CX0lDT05TVE9QfE1CX09LfE1CX09LQ0FOQ0VMfE1CX1JFVFJZQ0FOQ0VMfE1CX1JJR0hUfE1CX1JUTFJFQURJTkd8TUJfU0VURk9SRUdST1VORHxNQl9UT1BNT1NUfE1CX1VTRVJJQ09OfE1CX1lFU05PfE5PUk1BTHxPRkZMSU5FfFJFQURPTkxZfFNIQ1RYfFNIRUxMX0NPTlRFWFR8U1lTVEVNfFRFTVBPUkFSWSkifSxpPXtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9cIShhZGRpbmNsdWRlZGlyfGFkZHBsdWdpbmRpcnxhcHBlbmRmaWxlfGNkfGRlZmluZXxkZWxmaWxlfGVjaG98ZWxzZXxlbmRpZnxlcnJvcnxleGVjdXRlfGZpbmFsaXplfGdldGRsbHZlcnNpb258Z2V0dGxidmVyc2lvbnxpZnxpZmRlZnxpZm1hY3JvZGVmfGlmbWFjcm9uZGVmfGlmbmRlZnxpbmNsdWRlfGluc2VydG1hY3JvfG1hY3JvfG1hY3JvZW5kfG1ha2Vuc2lzfHBhY2toZHJ8c2VhcmNocGFyc2V8c2VhcmNocmVwbGFjZXxzeXN0ZW18dGVtcGZpbGV8dW5kZWZ8dmVyYm9zZXx3YXJuaW5nKS99LGE9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46L1wkKFxcW25ydF18XCQpL30sbD17Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW46L1x3K1w6XDpcdysvfSx1PXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonIicsZW5kOiciJ30se2JlZ2luOiInIixlbmQ6IicifSx7YmVnaW46ImAiLGVuZDoiYCJ9XSxpbGxlZ2FsOi9cbi8sY29udGFpbnM6W2EsdCxuLHIsb119O3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiExLGtleXdvcmRzOntrZXl3b3JkOiJBYm9ydCBBZGRCcmFuZGluZ0ltYWdlIEFkZFNpemUgQWxsb3dSb290RGlySW5zdGFsbCBBbGxvd1NraXBGaWxlcyBBdXRvQ2xvc2VXaW5kb3cgQkdGb250IEJHR3JhZGllbnQgQnJhbmRpbmdUZXh0IEJyaW5nVG9Gcm9udCBDYWxsIENhbGxJbnN0RExMIENhcHRpb24gQ2hhbmdlVUkgQ2hlY2tCaXRtYXAgQ2xlYXJFcnJvcnMgQ29tcGxldGVkVGV4dCBDb21wb25lbnRUZXh0IENvcHlGaWxlcyBDUkNDaGVjayBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRm9udCBDcmVhdGVTaG9ydEN1dCBEZWxldGUgRGVsZXRlSU5JU2VjIERlbGV0ZUlOSVN0ciBEZWxldGVSZWdLZXkgRGVsZXRlUmVnVmFsdWUgRGV0YWlsUHJpbnQgRGV0YWlsc0J1dHRvblRleHQgRGlyVGV4dCBEaXJWYXIgRGlyVmVyaWZ5IEVuYWJsZVdpbmRvdyBFbnVtUmVnS2V5IEVudW1SZWdWYWx1ZSBFeGNoIEV4ZWMgRXhlY1NoZWxsIEV4ZWNTaGVsbFdhaXQgRXhlY1dhaXQgRXhwYW5kRW52U3RyaW5ncyBGaWxlIEZpbGVCdWZTaXplIEZpbGVDbG9zZSBGaWxlRXJyb3JUZXh0IEZpbGVPcGVuIEZpbGVSZWFkIEZpbGVSZWFkQnl0ZSBGaWxlUmVhZFVURjE2TEUgRmlsZVJlYWRXb3JkIEZpbGVTZWVrIEZpbGVXcml0ZSBGaWxlV3JpdGVCeXRlIEZpbGVXcml0ZVVURjE2TEUgRmlsZVdyaXRlV29yZCBGaW5kQ2xvc2UgRmluZEZpcnN0IEZpbmROZXh0IEZpbmRXaW5kb3cgRmx1c2hJTkkgRnVuY3Rpb25FbmQgR2V0Q3VySW5zdFR5cGUgR2V0Q3VycmVudEFkZHJlc3MgR2V0RGxnSXRlbSBHZXRETExWZXJzaW9uIEdldERMTFZlcnNpb25Mb2NhbCBHZXRFcnJvckxldmVsIEdldEZpbGVUaW1lIEdldEZpbGVUaW1lTG9jYWwgR2V0RnVsbFBhdGhOYW1lIEdldEZ1bmN0aW9uQWRkcmVzcyBHZXRJbnN0RGlyRXJyb3IgR2V0TGFiZWxBZGRyZXNzIEdldFRlbXBGaWxlTmFtZSBHb3RvIEhpZGVXaW5kb3cgSWNvbiBJZkFib3J0IElmRXJyb3JzIElmRmlsZUV4aXN0cyBJZlJlYm9vdEZsYWcgSWZTaWxlbnQgSW5pdFBsdWdpbnNEaXIgSW5zdGFsbEJ1dHRvblRleHQgSW5zdGFsbENvbG9ycyBJbnN0YWxsRGlyIEluc3RhbGxEaXJSZWdLZXkgSW5zdFByb2dyZXNzRmxhZ3MgSW5zdFR5cGUgSW5zdFR5cGVHZXRUZXh0IEluc3RUeXBlU2V0VGV4dCBJbnQ2NENtcCBJbnQ2NENtcFUgSW50NjRGbXQgSW50Q21wIEludENtcFUgSW50Rm10IEludE9wIEludFB0ckNtcCBJbnRQdHJDbXBVIEludFB0ck9wIElzV2luZG93IExhbmdTdHJpbmcgTGljZW5zZUJrQ29sb3IgTGljZW5zZURhdGEgTGljZW5zZUZvcmNlU2VsZWN0aW9uIExpY2Vuc2VMYW5nU3RyaW5nIExpY2Vuc2VUZXh0IExvYWRMYW5ndWFnZUZpbGUgTG9ja1dpbmRvdyBMb2dTZXQgTG9nVGV4dCBNYW5pZmVzdERQSUF3YXJlIE1hbmlmZXN0U3VwcG9ydGVkT1MgTWVzc2FnZUJveCBNaXNjQnV0dG9uVGV4dCBOYW1lIE5vcCBPdXRGaWxlIFBhZ2UgUGFnZUNhbGxiYWNrcyBQYWdlRXhFbmQgUG9wIFB1c2ggUXVpdCBSZWFkRW52U3RyIFJlYWRJTklTdHIgUmVhZFJlZ0RXT1JEIFJlYWRSZWdTdHIgUmVib290IFJlZ0RMTCBSZW5hbWUgUmVxdWVzdEV4ZWN1dGlvbkxldmVsIFJlc2VydmVGaWxlIFJldHVybiBSTURpciBTZWFyY2hQYXRoIFNlY3Rpb25FbmQgU2VjdGlvbkdldEZsYWdzIFNlY3Rpb25HZXRJbnN0VHlwZXMgU2VjdGlvbkdldFNpemUgU2VjdGlvbkdldFRleHQgU2VjdGlvbkdyb3VwRW5kIFNlY3Rpb25JbiBTZWN0aW9uU2V0RmxhZ3MgU2VjdGlvblNldEluc3RUeXBlcyBTZWN0aW9uU2V0U2l6ZSBTZWN0aW9uU2V0VGV4dCBTZW5kTWVzc2FnZSBTZXRBdXRvQ2xvc2UgU2V0QnJhbmRpbmdJbWFnZSBTZXRDb21wcmVzcyBTZXRDb21wcmVzc29yIFNldENvbXByZXNzb3JEaWN0U2l6ZSBTZXRDdGxDb2xvcnMgU2V0Q3VySW5zdFR5cGUgU2V0RGF0YWJsb2NrT3B0aW1pemUgU2V0RGF0ZVNhdmUgU2V0RGV0YWlsc1ByaW50IFNldERldGFpbHNWaWV3IFNldEVycm9yTGV2ZWwgU2V0RXJyb3JzIFNldEZpbGVBdHRyaWJ1dGVzIFNldEZvbnQgU2V0T3V0UGF0aCBTZXRPdmVyd3JpdGUgU2V0UmVib290RmxhZyBTZXRSZWdWaWV3IFNldFNoZWxsVmFyQ29udGV4dCBTZXRTaWxlbnQgU2hvd0luc3REZXRhaWxzIFNob3dVbmluc3REZXRhaWxzIFNob3dXaW5kb3cgU2lsZW50SW5zdGFsbCBTaWxlbnRVbkluc3RhbGwgU2xlZXAgU3BhY2VUZXh0cyBTdHJDbXAgU3RyQ21wUyBTdHJDcHkgU3RyTGVuIFN1YkNhcHRpb24gVW5pY29kZSBVbmluc3RhbGxCdXR0b25UZXh0IFVuaW5zdGFsbENhcHRpb24gVW5pbnN0YWxsSWNvbiBVbmluc3RhbGxTdWJDYXB0aW9uIFVuaW5zdGFsbFRleHQgVW5pbnN0UGFnZSBVblJlZ0RMTCBWYXIgVklBZGRWZXJzaW9uS2V5IFZJRmlsZVZlcnNpb24gVklQcm9kdWN0VmVyc2lvbiBXaW5kb3dJY29uIFdyaXRlSU5JU3RyIFdyaXRlUmVnQmluIFdyaXRlUmVnRFdPUkQgV3JpdGVSZWdFeHBhbmRTdHIgV3JpdGVSZWdNdWx0aVN0ciBXcml0ZVJlZ05vbmUgV3JpdGVSZWdTdHIgV3JpdGVVbmluc3RhbGxlciBYUFN0eWxlIixsaXRlcmFsOiJhZG1pbiBhbGwgYXV0byBib3RoIGJvdHRvbSBiemlwMiBjb2xvcmVkIGNvbXBvbmVudHMgY3VycmVudCBjdXN0b20gZGlyZWN0b3J5IGZhbHNlIGZvcmNlIGhpZGUgaGlnaGVzdCBpZmRpZmYgaWZuZXdlciBpbnN0ZmlsZXMgbGFzdHVzZWQgbGVhdmUgbGVmdCBsaWNlbnNlIGxpc3Rvbmx5IGx6bWEgbmV2ZXJzaG93IG5vbmUgbm9ybWFsIG5vdHNldCBvZmYgb24gb3BlbiBwcmludCByaWdodCBzaG93IHNpbGVudCBzaWxlbnRsb2cgc21vb3RoIHRleHRvbmx5IHRvcCB0cnVlIHRyeSB1bi5jb21wb25lbnRzIHVuLmN1c3RvbSB1bi5kaXJlY3RvcnkgdW4uaW5zdGZpbGVzIHVuLmxpY2Vuc2UgdW5pbnN0Q29uZmlybSB1c2VyIFdpbjEwIFdpbjcgV2luOCBXaW5WaXN0YSB6bGliIn0sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoIjsiLCIkIix7cmVsZXZhbmNlOjB9KSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiRnVuY3Rpb24gUGFnZUV4IFNlY3Rpb24gU2VjdGlvbkdyb3VwIixlbmQ6IiQifSx1LGksbixyLG8scyxsLGUuTlVNQkVSX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9vYmplY3RpdmVjLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IlxcYihBVnxDQXxDRnxDR3xDSXxDTHxDTXxDTnxDVHxNS3xNUHxNVEt8TVRMfE5TfFNDTnxTS3xVSXxXS3xYQylcXHcrIn0sbj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIGNoYXIgZXhwb3J0IHNpemVvZiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBmb3IgdW5pb24gdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgYm9vbCBtdXRhYmxlIGlmIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgcmVhZG9ubHkgYXNzaWduIHJlYWR3cml0ZSBzZWxmIEBzeW5jaHJvbml6ZWQgaWQgdHlwZW9mIG5vbmF0b21pYyBzdXBlciB1bmljaGFyIElCT3V0bGV0IElCQWN0aW9uIHN0cm9uZyB3ZWFrIGNvcHkgaW4gb3V0IGlub3V0IGJ5Y29weSBieXJlZiBvbmV3YXkgX19zdHJvbmcgX193ZWFrIF9fYmxvY2sgX19hdXRvcmVsZWFzaW5nIEBwcml2YXRlIEBwcm90ZWN0ZWQgQHB1YmxpYyBAdHJ5IEBwcm9wZXJ0eSBAZW5kIEB0aHJvdyBAY2F0Y2ggQGZpbmFsbHkgQGF1dG9yZWxlYXNlcG9vbCBAc3ludGhlc2l6ZSBAZHluYW1pYyBAc2VsZWN0b3IgQG9wdGlvbmFsIEByZXF1aXJlZCBAZW5jb2RlIEBwYWNrYWdlIEBpbXBvcnQgQGRlZnMgQGNvbXBhdGliaWxpdHlfYWxpYXMgX19icmlkZ2UgX19icmlkZ2VfdHJhbnNmZXIgX19icmlkZ2VfcmV0YWluZWQgX19icmlkZ2VfcmV0YWluIF9fY292YXJpYW50IF9fY29udHJhdmFyaWFudCBfX2tpbmRvZiBfTm9ubnVsbCBfTnVsbGFibGUgX051bGxfdW5zcGVjaWZpZWQgX19GVU5DVElPTl9fIF9fUFJFVFRZX0ZVTkNUSU9OX18gX19hdHRyaWJ1dGVfXyBnZXR0ZXIgc2V0dGVyIHJldGFpbiB1bnNhZmVfdW5yZXRhaW5lZCBub25udWxsIG51bGxhYmxlIG51bGxfdW5zcGVjaWZpZWQgbnVsbF9yZXNldHRhYmxlIGNsYXNzIGluc3RhbmNldHlwZSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSIE5TX1VOQVZBSUxBQkxFIE5TX1JFUVVJUkVTX1NVUEVSIE5TX1JFVFVSTlNfSU5ORVJfUE9JTlRFUiBOU19JTkxJTkUgTlNfQVZBSUxBQkxFIE5TX0RFUFJFQ0FURUQgTlNfRU5VTSBOU19PUFRJT05TIE5TX1NXSUZUX1VOQVZBSUxBQkxFIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOIE5TX0FTU1VNRV9OT05OVUxMX0VORCBOU19SRUZJTkVEX0ZPUl9TV0lGVCBOU19TV0lGVF9OQU1FIE5TX1NXSUZUX05PVEhST1cgTlNfRFVSSU5HIE5TX0hBTkRMRVIgTlNfRU5ESEFORExFUiBOU19WQUxVRVJFVFVSTiBOU19WT0lEUkVUVVJOIixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiQk9PTCBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifSxyPS9bYS16QS1aQF1bYS16QS1aMC05X10qLyxvPSJAaW50ZXJmYWNlIEBjbGFzcyBAcHJvdG9jb2wgQGltcGxlbWVudGF0aW9uIjtyZXR1cm57YWxpYXNlczpbIm1tIiwib2JqYyIsIm9iai1jIl0sa2V5d29yZHM6bixsZXhlbWVzOnIsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOlt0LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19OVU1CRVJfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonQCInLGVuZDonIicsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiInIixlbmQ6IlteXFxcXF0nIixpbGxlZ2FsOiJbXlxcXFxdW14nXSJ9XX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMiLGVuZDoiJCIsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEtc3RyaW5nIix2YXJpYW50czpbe2JlZ2luOiciJyxlbmQ6JyInfSx7YmVnaW46IjwiLGVuZDoiPiJ9XX1dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW46IigiK28uc3BsaXQoIiAiKS5qb2luKCJ8IikrIilcXGIiLGVuZDoiKHt8JCkiLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6byxsZXhlbWVzOnIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2JlZ2luOiJcXC4iK2UuVU5ERVJTQ09SRV9JREVOVF9SRSxyZWxldmFuY2U6MH1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9vY2FtbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJtbCJdLGtleXdvcmRzOntrZXl3b3JkOiJhbmQgYXMgYXNzZXJ0IGFzciBiZWdpbiBjbGFzcyBjb25zdHJhaW50IGRvIGRvbmUgZG93bnRvIGVsc2UgZW5kIGV4Y2VwdGlvbiBleHRlcm5hbCBmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSBpbmhlcml0ISBpbmhlcml0IGluaXRpYWxpemVyIGxhbmQgbGF6eSBsZXQgbG9yIGxzbCBsc3IgbHhvciBtYXRjaCBtZXRob2QhfDEwIG1ldGhvZCBtb2QgbW9kdWxlIG11dGFibGUgbmV3IG9iamVjdCBvZiBvcGVuISBvcGVuIG9yIHByaXZhdGUgcmVjIHNpZyBzdHJ1Y3QgdGhlbiB0byB0cnkgdHlwZSB2YWwhIHZhbCB2aXJ0dWFsIHdoZW4gd2hpbGUgd2l0aCBwYXJzZXIgdmFsdWUiLGJ1aWx0X2luOiJhcnJheSBib29sIGJ5dGVzIGNoYXIgZXhufDUgZmxvYXQgaW50IGludDMyIGludDY0IGxpc3QgbGF6eV90fDUgbmF0aXZlaW50fDUgc3RyaW5nIHVuaXQgaW5fY2hhbm5lbCBvdXRfY2hhbm5lbCByZWYiLGxpdGVyYWw6InRydWUgZmFsc2UifSxpbGxlZ2FsOi9cL1wvfD4+LyxsZXhlbWVzOiJbYS16X11cXHcqIT8iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXFxbKFxcfFxcfCk/XFxdfFxcKFxcKSIscmVsZXZhbmNlOjB9LGUuQ09NTUVOVCgiXFwoXFwqIiwiXFwqXFwpIix7Y29udGFpbnM6WyJzZWxmIl19KSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInW0EtWmEtel9dKD8hJylbXFx3J10qIn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46ImBbQS1aXVtcXHcnXSoifSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3J10qIixyZWxldmFuY2U6MH0se2JlZ2luOiJbYS16X11cXHcqJ1tcXHcnXSoiLHJlbGV2YW5jZTowfSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjB9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSkse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKDBbeFhdW2EtZkEtRjAtOV9dK1tMbG5dP3wwW29PXVswLTdfXStbTGxuXT98MFtiQl1bMDFfXStbTGxuXT98WzAtOV1bMC05X10qKFtMbG5dfChcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pIixyZWxldmFuY2U6MH0se2JlZ2luOi9bLT1dPi99XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb3BlbnNjYWQuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXCQoZlthc25dfHR8dnBbcnRkXXxjaGlsZHJlbikifSxuPXtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiJmYWxzZXx0cnVlfFBJfHVuZGVmIn0scj17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGJcXGQrKFxcLlxcZCspPyhlLT9cXGQrKT8iLHJlbGV2YW5jZTowfSxvPWUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSxzPXtjbGFzc05hbWU6Im1ldGEiLGtleXdvcmRzOnsibWV0YS1rZXl3b3JkIjoiaW5jbHVkZSB1c2UifSxiZWdpbjoiaW5jbHVkZXx1c2UgPCIsZW5kOiI+In0saT17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbInNlbGYiLHIsbyx0LG5dfSxhPXtiZWdpbjoiWyohIyVdIixyZWxldmFuY2U6MH0sbD17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoibW9kdWxlIGZ1bmN0aW9uIixlbmQ6IlxcPXxcXHsiLGNvbnRhaW5zOltpLGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX07cmV0dXJue2FsaWFzZXM6WyJzY2FkIl0sa2V5d29yZHM6e2tleXdvcmQ6ImZ1bmN0aW9uIG1vZHVsZSBpbmNsdWRlIHVzZSBmb3IgaW50ZXJzZWN0aW9uX2ZvciBpZiBlbHNlIFxcJSIsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSBQSSB1bmRlZiIsYnVpbHRfaW46ImNpcmNsZSBzcXVhcmUgcG9seWdvbiB0ZXh0IHNwaGVyZSBjdWJlIGN5bGluZGVyIHBvbHloZWRyb24gdHJhbnNsYXRlIHJvdGF0ZSBzY2FsZSByZXNpemUgbWlycm9yIG11bHRtYXRyaXggY29sb3Igb2Zmc2V0IGh1bGwgbWlua293c2tpIHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGFicyBzaWduIHNpbiBjb3MgdGFuIGFjb3MgYXNpbiBhdGFuIGF0YW4yIGZsb29yIHJvdW5kIGNlaWwgbG4gbG9nIHBvdyBzcXJ0IGV4cCByYW5kcyBtaW4gbWF4IGNvbmNhdCBsb29rdXAgc3RyIGNociBzZWFyY2ggdmVyc2lvbiB2ZXJzaW9uX251bSBub3JtIGNyb3NzIHBhcmVudF9tb2R1bGUgZWNobyBpbXBvcnQgaW1wb3J0X2R4ZiBkeGZfbGluZWFyX2V4dHJ1ZGUgbGluZWFyX2V4dHJ1ZGUgcm90YXRlX2V4dHJ1ZGUgc3VyZmFjZSBwcm9qZWN0aW9uIHJlbmRlciBjaGlsZHJlbiBkeGZfY3Jvc3MgZHhmX2RpbSBsZXQgYXNzaWduIn0sY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHIscyxvLHQsYSxsXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb3h5Z2VuZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ImFic3RyYWN0IGFkZCBhbmQgYXJyYXkgYXMgYXNjIGFzcGVjdCBhc3NlbWJseSBhc3luYyBiZWdpbiBicmVhayBibG9jayBieSBjYXNlIGNsYXNzIGNvbmNhdCBjb25zdCBjb3B5IGNvbnN0cnVjdG9yIGNvbnRpbnVlIGNyZWF0ZSBkZWZhdWx0IGRlbGVnYXRlIGRlc2MgZGlzdGluY3QgZGl2IGRvIGRvd250byBkeW5hbWljIGVhY2ggZWxzZSBlbXB0eSBlbmQgZW5zdXJlIGVudW0gZXF1YWxzIGV2ZW50IGV4Y2VwdCBleGl0IGV4dGVuc2lvbiBleHRlcm5hbCBmYWxzZSBmaW5hbCBmaW5hbGl6ZSBmaW5hbGl6ZXIgZmluYWxseSBmbGFncyBmb3IgZm9yd2FyZCBmcm9tIGZ1bmN0aW9uIGZ1dHVyZSBnbG9iYWwgZ3JvdXAgaGFzIGlmIGltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgaW1wbGllcyBpbiBpbmRleCBpbmhlcml0ZWQgaW5saW5lIGludGVyZmFjZSBpbnRvIGludmFyaWFudHMgaXMgaXRlcmF0b3Igam9pbiBsb2NrZWQgbG9ja2luZyBsb29wIG1hdGNoaW5nIG1ldGhvZCBtb2QgbW9kdWxlIG5hbWVzcGFjZSBuZXN0ZWQgbmV3IG5pbCBub3Qgbm90aWZ5IG51bGxhYmxlIG9mIG9sZCBvbiBvcGVyYXRvciBvciBvcmRlciBvdXQgb3ZlcnJpZGUgcGFyYWxsZWwgcGFyYW1zIHBhcnRpYWwgcGlubmVkIHByaXZhdGUgcHJvY2VkdXJlIHByb3BlcnR5IHByb3RlY3RlZCBwdWJsaWMgcXVlcnlhYmxlIHJhaXNlIHJlYWQgcmVhZG9ubHkgcmVjb3JkIHJlaW50cm9kdWNlIHJlbW92ZSByZXBlYXQgcmVxdWlyZSByZXN1bHQgcmV2ZXJzZSBzZWFsZWQgc2VsZWN0IHNlbGYgc2VxdWVuY2Ugc2V0IHNobCBzaHIgc2tpcCBzdGF0aWMgc3RlcCBzb2Z0IHRha2UgdGhlbiB0byB0cnVlIHRyeSB0dXBsZSB0eXBlIHVuaW9uIHVuaXQgdW5zYWZlIHVudGlsIHVzZXMgdXNpbmcgdmFyIHZpcnR1YWwgcmFpc2VzIHZvbGF0aWxlIHdoZXJlIHdoaWxlIHdpdGggd3JpdGUgeG9yIHlpZWxkIGF3YWl0IG1hcHBlZCBkZXByZWNhdGVkIHN0ZGNhbGwgY2RlY2wgcGFzY2FsIHJlZ2lzdGVyIHNhZmVjYWxsIG92ZXJsb2FkIGxpYnJhcnkgcGxhdGZvcm0gcmVmZXJlbmNlIHBhY2tlZCBzdHJpY3QgcHVibGlzaGVkIGF1dG9yZWxlYXNlcG9vbCBzZWxlY3RvciBzdHJvbmcgd2VhayB1bnJldGFpbmVkIixuPWUuQ09NTUVOVCgieyIsIn0iLHtyZWxldmFuY2U6MH0pLHI9ZS5DT01NRU5UKCJcXChcXCoiLCJcXCpcXCkiLHtyZWxldmFuY2U6MTB9KSxvPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsY29udGFpbnM6W3tiZWdpbjoiJycifV19LHM9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiKCNcXGQrKSsifSxpPXtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZSBtZXRob2QiLGVuZDoiWzo7XSIsa2V5d29yZHM6ImZ1bmN0aW9uIGNvbnN0cnVjdG9yfDEwIGRlc3RydWN0b3J8MTAgcHJvY2VkdXJlfDEwIG1ldGhvZHwxMCIsY29udGFpbnM6W2UuVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixrZXl3b3Jkczp0LGNvbnRhaW5zOltvLHNdfSxuLHJdfTtyZXR1cm57Y2FzZV9pbnNlbnNpdGl2ZTohMCxsZXhlbWVzOi9cLj9cdysvLGtleXdvcmRzOnQsaWxsZWdhbDonKCJ8XFwkW0ctWmctel18XFwvXFwqfDwvfD0+fC0+KScsY29udGFpbnM6W24scixlLkNfTElORV9DT01NRU5UX01PREUsbyxzLGUuTlVNQkVSX01PREUsaSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW46Ij1cXGJjbGFzc1xcYiIsZW5kOiJlbmQ7IixrZXl3b3Jkczp0LGNvbnRhaW5zOltvLHMsbixyLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxpXX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wYXJzZXIzLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLkNPTU1FTlQoInsiLCJ9Iix7Y29udGFpbnM6WyJzZWxmIl19KTtyZXR1cm57c3ViTGFuZ3VhZ2U6InhtbCIscmVsZXZhbmNlOjAsY29udGFpbnM6W2UuQ09NTUVOVCgiXiMiLCIkIiksZS5DT01NRU5UKCJcXF5yZW17IiwifSIse3JlbGV2YW5jZToxMCxjb250YWluczpbdF19KSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXkAoPzpCQVNFfFVTRXxDTEFTU3xPUFRJT05TKSQiLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOiJAW1xcd1xcLV0rXFxbW1xcd147XFwtXSpcXF0oPzpcXFtbXFx3XjtcXC1dKlxcXSk/KD86LiopJCJ9LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiXFwkXFx7P1tcXHdcXC1cXC5cXDpdK1xcfT8ifSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiXFxeW1xcd1xcLVxcLlxcOl0rIn0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxeI1swLTlhLWZBLUZdKyJ9LGUuQ19OVU1CRVJfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BlcmwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIixuPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiWyRAXVxceyIsZW5kOiJcXH0iLGtleXdvcmRzOnR9LHI9e2JlZ2luOiItPnsiLGVuZDoifSJ9LG89e3ZhcmlhbnRzOlt7YmVnaW46L1wkXGQvfSx7YmVnaW46L1tcJCVAXShcXlx3XGJ8I1x3Kyg6Olx3KykqfHtcdyt9fFx3Kyg6Olx3KikqKS99LHtiZWdpbjovW1wkJUBdW15cc1x3e10vLHJlbGV2YW5jZTowfV19LHM9W2UuQkFDS1NMQVNIX0VTQ0FQRSxuLG9dLGk9W28sZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoIl5cXD1cXHciLCJcXD1jdXQiLHtlbmRzV2l0aFBhcmVudDohMH0pLHIse2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpzLHZhcmlhbnRzOlt7YmVnaW46InFbcXd4cl0/XFxzKlxcKCIsZW5kOiJcXCkiLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxcWyIsZW5kOiJcXF0iLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxceyIsZW5kOiJcXH0iLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxcfCIsZW5kOiJcXHwiLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxcPCIsZW5kOiJcXD4iLHJlbGV2YW5jZTo1fSx7YmVnaW46InF3XFxzK3EiLGVuZDoicSIscmVsZXZhbmNlOjV9LHtiZWdpbjoiJyIsZW5kOiInIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiciJyxlbmQ6JyInfSx7YmVnaW46ImAiLGVuZDoiYCIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjoie1xcdyt9Iixjb250YWluczpbXSxyZWxldmFuY2U6MH0se2JlZ2luOiItP1xcdytcXHMqXFw9XFw+Iixjb250YWluczpbXSxyZWxldmFuY2U6MH1dfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyZWxldmFuY2U6MH0se2JlZ2luOiIoXFwvXFwvfCIrZS5SRV9TVEFSVEVSU19SRSsifFxcYihzcGxpdHxyZXR1cm58cHJpbnR8cmV2ZXJzZXxncmVwKVxcYilcXHMqIixrZXl3b3Jkczoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscmVsZXZhbmNlOjAsY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUse2NsYXNzTmFtZToicmVnZXhwIixiZWdpbjoiKHN8dHJ8eSkvKFxcXFwufFteL10pKi8oXFxcXC58W14vXSkqL1thLXpdKiIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJyZWdleHAiLGJlZ2luOiIobXxxcik/LyIsZW5kOiIvW2Etel0qIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSxyZWxldmFuY2U6MH1dfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3Jkczoic3ViIixlbmQ6IihcXHMqXFwoLio/XFwpKT9bO3tdIixleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTo1LGNvbnRhaW5zOltlLlRJVExFX01PREVdfSx7YmVnaW46Ii1cXHdcXGIiLHJlbGV2YW5jZTowfSx7YmVnaW46Il5fX0RBVEFfXyQiLGVuZDoiXl9fRU5EX18kIixzdWJMYW5ndWFnZToibW9qb2xpY2lvdXMiLGNvbnRhaW5zOlt7YmVnaW46Il5AQC4qIixlbmQ6IiQiLGNsYXNzTmFtZToiY29tbWVudCJ9XX1dO3JldHVybiBuLmNvbnRhaW5zPWksci5jb250YWlucz1pLHthbGlhc2VzOlsicGwiLCJwbSJdLGxleGVtZXM6L1tcd1wuXSsvLGtleXdvcmRzOnQsY29udGFpbnM6aX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGYuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCRbXHdcZCNAXVtcd1xkX10qL30sbj17Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46LzwoPyFcLykvLGVuZDovPi99O3JldHVybnthbGlhc2VzOlsicGYuY29uZiJdLGxleGVtZXM6L1thLXowLTlfPD4tXSsvLGtleXdvcmRzOntidWlsdF9pbjoiYmxvY2sgbWF0Y2ggcGFzcyBsb2FkIGFuY2hvcnw1IGFudGlzcG9vZnwxMCBzZXQgdGFibGUiLGtleXdvcmQ6ImluIG91dCBsb2cgcXVpY2sgb24gcmRvbWFpbiBpbmV0IGluZXQ2IHByb3RvIGZyb20gcG9ydCBvcyB0byByb3V0ZWFsbG93LW9wdHMgZGl2ZXJ0LXBhY2tldCBkaXZlcnQtcmVwbHkgZGl2ZXJ0LXRvIGZsYWdzIGdyb3VwIGljbXAtdHlwZWljbXA2LXR5cGUgbGFiZWwgb25jZSBwcm9iYWJpbGl0eSByZWNpZXZlZC1vbiBydGFibGUgcHJpbyBxdWV1ZXRvcyB0YWcgdGFnZ2VkIHVzZXIga2VlcCBmcmFnbWVudCBmb3Igb3MgZHJvcGFmLXRvfDEwIGJpbmF0LXRvfDEwIG5hdC10b3wxMCByZHItdG98MTAgYml0bWFzayBsZWFzdC1zdGF0cyByYW5kb20gcm91bmQtcm9iaW5zb3VyY2UtaGFzaCBzdGF0aWMtcG9ydGR1cC10byByZXBseS10byByb3V0ZS10b3BhcmVudCBiYW5kd2lkdGggZGVmYXVsdCBtaW4gbWF4IHFsaW1pdGJsb2NrLXBvbGljeSBkZWJ1ZyBmaW5nZXJwcmludHMgaG9zdGlkIGxpbWl0IGxvZ2ludGVyZmFjZSBvcHRpbWl6YXRpb25yZWFzc2VtYmxlIHJ1bGVzZXQtb3B0aW1pemF0aW9uIGJhc2ljIG5vbmUgcHJvZmlsZSBza2lwIHN0YXRlLWRlZmF1bHRzc3RhdGUtcG9saWN5IHRpbWVvdXRjb25zdCBjb3VudGVycyBwZXJzaXN0bm8gbW9kdWxhdGUgc3lucHJveHkgc3RhdGV8NSBmbG9hdGluZyBpZi1ib3VuZCBuby1zeW5jIHBmbG93fDEwIHNsb3BweXNvdXJjZS10cmFjayBnbG9iYWwgcnVsZSBtYXgtc3JjLW5vZGVzIG1heC1zcmMtc3RhdGVzIG1heC1zcmMtY29ubm1heC1zcmMtY29ubi1yYXRlIG92ZXJsb2FkIGZsdXNoc2NydWJ8NSBtYXgtbXNzIG1pbi10dGwgbm8tZGZ8MTAgcmFuZG9tLWlkIixsaXRlcmFsOiJhbGwgYW55IG5vLXJvdXRlIHNlbGYgdXJwZi1mYWlsZWQgZWdyZXNzfDUgdW5rbm93biJ9LGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLGUuTlVNQkVSX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx0LG5dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wZ3NxbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5DT01NRU5UKCItLSIsIiQiKSxuPSJCSUdJTlQgSU5UOCBCSUdTRVJJQUwgU0VSSUFMOCBCSVQgVkFSWUlORyBWQVJCSVQgQk9PTEVBTiBCT09MIEJPWCBCWVRFQSBDSEFSQUNURVIgQ0hBUiBWQVJDSEFSIENJRFIgQ0lSQ0xFIERBVEUgRE9VQkxFIFBSRUNJU0lPTiBGTE9BVDggRkxPQVQgSU5FVCBJTlRFR0VSIElOVCBJTlQ0IElOVEVSVkFMIEpTT04gSlNPTkIgTElORSBMU0VHfDEwIE1BQ0FERFIgTUFDQUREUjggTU9ORVkgTlVNRVJJQyBERUMgREVDSU1BTCBQQVRIIFBPSU5UIFBPTFlHT04gUkVBTCBGTE9BVDQgU01BTExJTlQgSU5UMiBTTUFMTFNFUklBTHwxMCBTRVJJQUwyfDEwIFNFUklBTHwxMCBTRVJJQUw0fDEwIFRFWFQgVElNRSBaT05FIFRJTUVUWnwxMCBUSU1FU1RBTVAgVElNRVNUQU1QVFp8MTAgVFNRVUVSWXwxMCBUU1ZFQ1RPUnwxMCBUWElEX1NOQVBTSE9UfDEwIFVVSUQgWE1MIE5BVElPTkFMIE5DSEFSIElOVDRSQU5HRXwxMCBJTlQ4UkFOR0V8MTAgTlVNUkFOR0V8MTAgVFNSQU5HRXwxMCBUU1RaUkFOR0V8MTAgREFURVJBTkdFfDEwIEFOWUVMRU1FTlQgQU5ZQVJSQVkgQU5ZTk9OQVJSQVkgQU5ZRU5VTSBBTllSQU5HRSBDU1RSSU5HIElOVEVSTkFMIFJFQ09SRCBQR19ERExfQ09NTUFORCBWT0lEIFVOS05PV04gT1BBUVVFIFJFRkNVUlNPUiBOQU1FIE9JRCBSRUdQUk9DfDEwIFJFR1BST0NFRFVSRXwxMCBSRUdPUEVSfDEwIFJFR09QRVJBVE9SfDEwIFJFR0NMQVNTfDEwIFJFR1RZUEV8MTAgUkVHUk9MRXwxMCBSRUdOQU1FU1BBQ0V8MTAgUkVHQ09ORklHfDEwIFJFR0RJQ1RJT05BUll8MTAgIixyPW4udHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCJ8IilbMF19KS5qb2luKCJ8Iiksbz0iQVJSQVlfQUdHIEFWRyBCSVRfQU5EIEJJVF9PUiBCT09MX0FORCBCT09MX09SIENPVU5UIEVWRVJZIEpTT05fQUdHIEpTT05CX0FHRyBKU09OX09CSkVDVF9BR0cgSlNPTkJfT0JKRUNUX0FHRyBNQVggTUlOIE1PREUgU1RSSU5HX0FHRyBTVU0gWE1MQUdHIENPUlIgQ09WQVJfUE9QIENPVkFSX1NBTVAgUkVHUl9BVkdYIFJFR1JfQVZHWSBSRUdSX0NPVU5UIFJFR1JfSU5URVJDRVBUIFJFR1JfUjIgUkVHUl9TTE9QRSBSRUdSX1NYWCBSRUdSX1NYWSBSRUdSX1NZWSBTVERERVYgU1REREVWX1BPUCBTVERERVZfU0FNUCBWQVJJQU5DRSBWQVJfUE9QIFZBUl9TQU1QIFBFUkNFTlRJTEVfQ09OVCBQRVJDRU5USUxFX0RJU0MgUk9XX05VTUJFUiBSQU5LIERFTlNFX1JBTksgUEVSQ0VOVF9SQU5LIENVTUVfRElTVCBOVElMRSBMQUcgTEVBRCBGSVJTVF9WQUxVRSBMQVNUX1ZBTFVFIE5USF9WQUxVRSBOVU1fTk9OTlVMTFMgTlVNX05VTExTIEFCUyBDQlJUIENFSUwgQ0VJTElORyBERUdSRUVTIERJViBFWFAgRkxPT1IgTE4gTE9HIE1PRCBQSSBQT1dFUiBSQURJQU5TIFJPVU5EIFNDQUxFIFNJR04gU1FSVCBUUlVOQyBXSURUSF9CVUNLRVQgUkFORE9NIFNFVFNFRUQgQUNPUyBBQ09TRCBBU0lOIEFTSU5EIEFUQU4gQVRBTkQgQVRBTjIgQVRBTjJEIENPUyBDT1NEIENPVCBDT1REIFNJTiBTSU5EIFRBTiBUQU5EIEJJVF9MRU5HVEggQ0hBUl9MRU5HVEggQ0hBUkFDVEVSX0xFTkdUSCBMT1dFUiBPQ1RFVF9MRU5HVEggT1ZFUkxBWSBQT1NJVElPTiBTVUJTVFJJTkcgVFJFQVQgVFJJTSBVUFBFUiBBU0NJSSBCVFJJTSBDSFIgQ09OQ0FUIENPTkNBVF9XUyBDT05WRVJUIENPTlZFUlRfRlJPTSBDT05WRVJUX1RPIERFQ09ERSBFTkNPREUgSU5JVENBUExFRlQgTEVOR1RIIExQQUQgTFRSSU0gTUQ1IFBBUlNFX0lERU5UIFBHX0NMSUVOVF9FTkNPRElORyBRVU9URV9JREVOVHwxMCBRVU9URV9MSVRFUkFMfDEwIFFVT1RFX05VTExBQkxFfDEwIFJFR0VYUF9NQVRDSCBSRUdFWFBfTUFUQ0hFUyBSRUdFWFBfUkVQTEFDRSBSRUdFWFBfU1BMSVRfVE9fQVJSQVkgUkVHRVhQX1NQTElUX1RPX1RBQkxFIFJFUEVBVCBSRVBMQUNFIFJFVkVSU0UgUklHSFQgUlBBRCBSVFJJTSBTUExJVF9QQVJUIFNUUlBPUyBTVUJTVFIgVE9fQVNDSUkgVE9fSEVYIFRSQU5TTEFURSBPQ1RFVF9MRU5HVEggR0VUX0JJVCBHRVRfQllURSBTRVRfQklUIFNFVF9CWVRFIFRPX0NIQVIgVE9fREFURSBUT19OVU1CRVIgVE9fVElNRVNUQU1QIEFHRSBDTE9DS19USU1FU1RBTVB8MTAgREFURV9QQVJUIERBVEVfVFJVTkMgSVNGSU5JVEUgSlVTVElGWV9EQVlTIEpVU1RJRllfSE9VUlMgSlVTVElGWV9JTlRFUlZBTCBNQUtFX0RBVEUgTUFLRV9JTlRFUlZBTHwxMCBNQUtFX1RJTUUgTUFLRV9USU1FU1RBTVB8MTAgTUFLRV9USU1FU1RBTVBUWnwxMCBOT1cgU1RBVEVNRU5UX1RJTUVTVEFNUHwxMCBUSU1FT0ZEQVkgVFJBTlNBQ1RJT05fVElNRVNUQU1QfDEwIEVOVU1fRklSU1QgRU5VTV9MQVNUIEVOVU1fUkFOR0UgQVJFQSBDRU5URVIgRElBTUVURVIgSEVJR0hUIElTQ0xPU0VEIElTT1BFTiBOUE9JTlRTIFBDTE9TRSBQT1BFTiBSQURJVVMgV0lEVEggQk9YIEJPVU5EX0JPWCBDSVJDTEUgTElORSBMU0VHIFBBVEggUE9MWUdPTiBBQkJSRVYgQlJPQURDQVNUIEhPU1QgSE9TVE1BU0sgTUFTS0xFTiBORVRNQVNLIE5FVFdPUksgU0VUX01BU0tMRU4gVEVYVCBJTkVUX1NBTUVfRkFNSUxZSU5FVF9NRVJHRSBNQUNBRERSOF9TRVQ3QklUIEFSUkFZX1RPX1RTVkVDVE9SIEdFVF9DVVJSRU5UX1RTX0NPTkZJRyBOVU1OT0RFIFBMQUlOVE9fVFNRVUVSWSBQSFJBU0VUT19UU1FVRVJZIFdFQlNFQVJDSF9UT19UU1FVRVJZIFFVRVJZVFJFRSBTRVRXRUlHSFQgU1RSSVAgVE9fVFNRVUVSWSBUT19UU1ZFQ1RPUiBKU09OX1RPX1RTVkVDVE9SIEpTT05CX1RPX1RTVkVDVE9SIFRTX0RFTEVURSBUU19GSUxURVIgVFNfSEVBRExJTkUgVFNfUkFOSyBUU19SQU5LX0NEIFRTX1JFV1JJVEUgVFNRVUVSWV9QSFJBU0UgVFNWRUNUT1JfVE9fQVJSQVkgVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVIgVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVJfQ09MVU1OIFhNTENPTU1FTlQgWE1MQ09OQ0FUIFhNTEVMRU1FTlQgWE1MRk9SRVNUIFhNTFBJIFhNTFJPT1QgWE1MRVhJU1RTIFhNTF9JU19XRUxMX0ZPUk1FRCBYTUxfSVNfV0VMTF9GT1JNRURfRE9DVU1FTlQgWE1MX0lTX1dFTExfRk9STUVEX0NPTlRFTlQgWFBBVEggWFBBVEhfRVhJU1RTIFhNTFRBQkxFIFhNTE5BTUVTUEFDRVMgVEFCTEVfVE9fWE1MIFRBQkxFX1RPX1hNTFNDSEVNQSBUQUJMRV9UT19YTUxfQU5EX1hNTFNDSEVNQSBRVUVSWV9UT19YTUwgUVVFUllfVE9fWE1MU0NIRU1BIFFVRVJZX1RPX1hNTF9BTkRfWE1MU0NIRU1BIENVUlNPUl9UT19YTUwgQ1VSU09SX1RPX1hNTFNDSEVNQSBTQ0hFTUFfVE9fWE1MIFNDSEVNQV9UT19YTUxTQ0hFTUEgU0NIRU1BX1RPX1hNTF9BTkRfWE1MU0NIRU1BIERBVEFCQVNFX1RPX1hNTCBEQVRBQkFTRV9UT19YTUxTQ0hFTUEgREFUQUJBU0VfVE9fWE1MX0FORF9YTUxTQ0hFTUEgWE1MQVRUUklCVVRFUyBUT19KU09OIFRPX0pTT05CIEFSUkFZX1RPX0pTT04gUk9XX1RPX0pTT04gSlNPTl9CVUlMRF9BUlJBWSBKU09OQl9CVUlMRF9BUlJBWSBKU09OX0JVSUxEX09CSkVDVCBKU09OQl9CVUlMRF9PQkpFQ1QgSlNPTl9PQkpFQ1QgSlNPTkJfT0JKRUNUIEpTT05fQVJSQVlfTEVOR1RIIEpTT05CX0FSUkFZX0xFTkdUSCBKU09OX0VBQ0ggSlNPTkJfRUFDSCBKU09OX0VBQ0hfVEVYVCBKU09OQl9FQUNIX1RFWFQgSlNPTl9FWFRSQUNUX1BBVEggSlNPTkJfRVhUUkFDVF9QQVRIIEpTT05fT0JKRUNUX0tFWVMgSlNPTkJfT0JKRUNUX0tFWVMgSlNPTl9QT1BVTEFURV9SRUNPUkQgSlNPTkJfUE9QVUxBVEVfUkVDT1JEIEpTT05fUE9QVUxBVEVfUkVDT1JEU0VUIEpTT05CX1BPUFVMQVRFX1JFQ09SRFNFVCBKU09OX0FSUkFZX0VMRU1FTlRTIEpTT05CX0FSUkFZX0VMRU1FTlRTIEpTT05fQVJSQVlfRUxFTUVOVFNfVEVYVCBKU09OQl9BUlJBWV9FTEVNRU5UU19URVhUIEpTT05fVFlQRU9GIEpTT05CX1RZUEVPRiBKU09OX1RPX1JFQ09SRCBKU09OQl9UT19SRUNPUkQgSlNPTl9UT19SRUNPUkRTRVQgSlNPTkJfVE9fUkVDT1JEU0VUIEpTT05fU1RSSVBfTlVMTFMgSlNPTkJfU1RSSVBfTlVMTFMgSlNPTkJfU0VUIEpTT05CX0lOU0VSVCBKU09OQl9QUkVUVFkgQ1VSUlZBTCBMQVNUVkFMIE5FWFRWQUwgU0VUVkFMIENPQUxFU0NFIE5VTExJRiBHUkVBVEVTVCBMRUFTVCBBUlJBWV9BUFBFTkQgQVJSQVlfQ0FUIEFSUkFZX05ESU1TIEFSUkFZX0RJTVMgQVJSQVlfRklMTCBBUlJBWV9MRU5HVEggQVJSQVlfTE9XRVIgQVJSQVlfUE9TSVRJT04gQVJSQVlfUE9TSVRJT05TIEFSUkFZX1BSRVBFTkQgQVJSQVlfUkVNT1ZFIEFSUkFZX1JFUExBQ0UgQVJSQVlfVE9fU1RSSU5HIEFSUkFZX1VQUEVSIENBUkRJTkFMSVRZIFNUUklOR19UT19BUlJBWSBVTk5FU1QgSVNFTVBUWSBMT1dFUl9JTkMgVVBQRVJfSU5DIExPV0VSX0lORiBVUFBFUl9JTkYgUkFOR0VfTUVSR0UgR0VORVJBVEVfU0VSSUVTIEdFTkVSQVRFX1NVQlNDUklQVFMgQ1VSUkVOVF9EQVRBQkFTRSBDVVJSRU5UX1FVRVJZIENVUlJFTlRfU0NIRU1BfDEwIENVUlJFTlRfU0NIRU1BU3wxMCBJTkVUX0NMSUVOVF9BRERSIElORVRfQ0xJRU5UX1BPUlQgSU5FVF9TRVJWRVJfQUREUiBJTkVUX1NFUlZFUl9QT1JUIFJPV19TRUNVUklUWV9BQ1RJVkUgRk9STUFUX1RZUEUgVE9fUkVHQ0xBU1MgVE9fUkVHUFJPQyBUT19SRUdQUk9DRURVUkUgVE9fUkVHT1BFUiBUT19SRUdPUEVSQVRPUiBUT19SRUdUWVBFIFRPX1JFR05BTUVTUEFDRSBUT19SRUdST0xFIENPTF9ERVNDUklQVElPTiBPQkpfREVTQ1JJUFRJT04gU0hPQkpfREVTQ1JJUFRJT04gVFhJRF9DVVJSRU5UIFRYSURfQ1VSUkVOVF9JRl9BU1NJR05FRCBUWElEX0NVUlJFTlRfU05BUFNIT1QgVFhJRF9TTkFQU0hPVF9YSVAgVFhJRF9TTkFQU0hPVF9YTUFYIFRYSURfU05BUFNIT1RfWE1JTiBUWElEX1ZJU0lCTEVfSU5fU05BUFNIT1QgVFhJRF9TVEFUVVMgQ1VSUkVOVF9TRVRUSU5HIFNFVF9DT05GSUcgQlJJTl9TVU1NQVJJWkVfTkVXX1ZBTFVFUyBCUklOX1NVTU1BUklaRV9SQU5HRSBCUklOX0RFU1VNTUFSSVpFX1JBTkdFIEdJTl9DTEVBTl9QRU5ESU5HX0xJU1QgU1VQUFJFU1NfUkVEVU5EQU5UX1VQREFURVNfVFJJR0dFUiBMT19GUk9NX0JZVEVBIExPX1BVVCBMT19HRVQgTE9fQ1JFQVQgTE9fQ1JFQVRFIExPX1VOTElOSyBMT19JTVBPUlQgTE9fRVhQT1JUIExPUkVBRCBMT1dSSVRFIEdST1VQSU5HIENBU1QgIixzPW8udHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCJ8IilbMF19KS5qb2luKCJ8Iik7cmV0dXJue2FsaWFzZXM6WyJwb3N0Z3JlcyIsInBvc3RncmVzcWwiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOiJBQk9SVCBBTFRFUiBBTkFMWVpFIEJFR0lOIENBTEwgQ0hFQ0tQT0lOVHwxMCBDTE9TRSBDTFVTVEVSIENPTU1FTlQgQ09NTUlUIENPUFkgQ1JFQVRFIERFQUxMT0NBVEUgREVDTEFSRSBERUxFVEUgRElTQ0FSRCBETyBEUk9QIEVORCBFWEVDVVRFIEVYUExBSU4gRkVUQ0ggR1JBTlQgSU1QT1JUIElOU0VSVCBMSVNURU4gTE9BRCBMT0NLIE1PVkUgTk9USUZZIFBSRVBBUkUgUkVBU1NJR058MTAgUkVGUkVTSCBSRUlOREVYIFJFTEVBU0UgUkVTRVQgUkVWT0tFIFJPTExCQUNLIFNBVkVQT0lOVCBTRUNVUklUWSBTRUxFQ1QgU0VUIFNIT1cgU1RBUlQgVFJVTkNBVEUgVU5MSVNURU58MTAgVVBEQVRFIFZBQ1VVTXwxMCBWQUxVRVMgQUdHUkVHQVRFIENPTExBVElPTiBDT05WRVJTSU9OfDEwIERBVEFCQVNFIERFRkFVTFQgUFJJVklMRUdFUyBET01BSU4gVFJJR0dFUiBFWFRFTlNJT04gRk9SRUlHTiBXUkFQUEVSfDEwIFRBQkxFIEZVTkNUSU9OIEdST1VQIExBTkdVQUdFIExBUkdFIE9CSkVDVCBNQVRFUklBTElaRUQgVklFVyBPUEVSQVRPUiBDTEFTUyBGQU1JTFkgUE9MSUNZIFBVQkxJQ0FUSU9OfDEwIFJPTEUgUlVMRSBTQ0hFTUEgU0VRVUVOQ0UgU0VSVkVSIFNUQVRJU1RJQ1MgU1VCU0NSSVBUSU9OIFNZU1RFTSBUQUJMRVNQQUNFIENPTkZJR1VSQVRJT04gRElDVElPTkFSWSBQQVJTRVIgVEVNUExBVEUgVFlQRSBVU0VSIE1BUFBJTkcgUFJFUEFSRUQgQUNDRVNTIE1FVEhPRCBDQVNUIEFTIFRSQU5TRk9STSBUUkFOU0FDVElPTiBPV05FRCBUTyBJTlRPIFNFU1NJT04gQVVUSE9SSVpBVElPTiBJTkRFWCBQUk9DRURVUkUgQVNTRVJUSU9OIEFMTCBBTkFMWVNFIEFORCBBTlkgQVJSQVkgQVNDIEFTWU1NRVRSSUN8MTAgQk9USCBDQVNFIENIRUNLIENPTExBVEUgQ09MVU1OIENPTkNVUlJFTlRMWXwxMCBDT05TVFJBSU5UIENST1NTIERFRkVSUkFCTEUgUkFOR0UgREVTQyBESVNUSU5DVCBFTFNFIEVYQ0VQVCBGT1IgRlJFRVpFfDEwIEZST00gRlVMTCBIQVZJTkcgSUxJS0UgSU4gSU5JVElBTExZIElOTkVSIElOVEVSU0VDVCBJUyBJU05VTEwgSk9JTiBMQVRFUkFMIExFQURJTkcgTElLRSBMSU1JVCBOQVRVUkFMIE5PVCBOT1ROVUxMIE5VTEwgT0ZGU0VUIE9OIE9OTFkgT1IgT1JERVIgT1VURVIgT1ZFUkxBUFMgUExBQ0lORyBQUklNQVJZIFJFRkVSRU5DRVMgUkVUVVJOSU5HIFNJTUlMQVIgU09NRSBTWU1NRVRSSUMgVEFCTEVTQU1QTEUgVEhFTiBUUkFJTElORyBVTklPTiBVTklRVUUgVVNJTkcgVkFSSUFESUN8MTAgVkVSQk9TRSBXSEVOIFdIRVJFIFdJTkRPVyBXSVRIIEJZIFJFVFVSTlMgSU5PVVQgT1VUIFNFVE9GfDEwIElGIFNUUklDVCBDVVJSRU5UIENPTlRJTlVFIE9XTkVSIExPQ0FUSU9OIE9WRVIgUEFSVElUSU9OIFdJVEhJTiBCRVRXRUVOIEVTQ0FQRSBFWFRFUk5BTCBJTlZPS0VSIERFRklORVIgV09SSyBSRU5BTUUgVkVSU0lPTiBDT05ORUNUSU9OIENPTk5FQ1QgVEFCTEVTIFRFTVAgVEVNUE9SQVJZIEZVTkNUSU9OUyBTRVFVRU5DRVMgVFlQRVMgU0NIRU1BUyBPUFRJT04gQ0FTQ0FERSBSRVNUUklDVCBBREQgQURNSU4gRVhJU1RTIFZBTElEIFZBTElEQVRFIEVOQUJMRSBESVNBQkxFIFJFUExJQ0F8MTAgQUxXQVlTIFBBU1NJTkcgQ09MVU1OUyBQQVRIIFJFRiBWQUxVRSBPVkVSUklESU5HIElNTVVUQUJMRSBTVEFCTEUgVk9MQVRJTEUgQkVGT1JFIEFGVEVSIEVBQ0ggUk9XIFBST0NFRFVSQUwgUk9VVElORSBOTyBIQU5ETEVSIFZBTElEQVRPUiBPUFRJT05TIFNUT1JBR0UgT0lEU3wxMCBXSVRIT1VUIElOSEVSSVQgREVQRU5EUyBDQUxMRUQgSU5QVVQgTEVBS1BST09GfDEwIENPU1QgUk9XUyBOT1dBSVQgU0VBUkNIIFVOVElMIEVOQ1JZUFRFRHwxMCBQQVNTV09SRCBDT05GTElDVHwxMCBJTlNURUFEIElOSEVSSVRTIENIQVJBQ1RFUklTVElDUyBXUklURSBDVVJTT1IgQUxTTyBTVEFURU1FTlQgU0hBUkUgRVhDTFVTSVZFIElOTElORSBJU09MQVRJT04gUkVQRUFUQUJMRSBSRUFEIENPTU1JVFRFRCBTRVJJQUxJWkFCTEUgVU5DT01NSVRURUQgTE9DQUwgR0xPQkFMIFNRTCBQUk9DRURVUkVTIFJFQ1VSU0lWRSBTTkFQU0hPVCBST0xMVVAgQ1VCRSBUUlVTVEVEfDEwIElOQ0xVREUgRk9MTE9XSU5HIFBSRUNFRElORyBVTkJPVU5ERUQgUkFOR0UgR1JPVVBTIFVORU5DUllQVEVEfDEwIFNZU0lEIEZPUk1BVCBERUxJTUlURVIgSEVBREVSIFFVT1RFIEVOQ09ESU5HIEZJTFRFUiBPRkYgRk9SQ0VfUVVPVEUgRk9SQ0VfTk9UX05VTEwgRk9SQ0VfTlVMTCBDT1NUUyBCVUZGRVJTIFRJTUlORyBTVU1NQVJZIERJU0FCTEVfUEFHRV9TS0lQUElORyBSRVNUQVJUIENZQ0xFIEdFTkVSQVRFRCBJREVOVElUWSBERUZFUlJFRCBJTU1FRElBVEUgTEVWRUwgTE9HR0VEIFVOTE9HR0VEIE9GIE5PVEhJTkcgTk9ORSBFWENMVURFIEFUVFJJQlVURSBVU0FHRSBST1VUSU5FUyBUUlVFIEZBTFNFIE5BTiBJTkZJTklUWSBBTElBUyBCRUdJTiBDT05TVEFOVCBERUNMQVJFIEVORCBFWENFUFRJT04gUkVUVVJOIFBFUkZPUk18MTAgUkFJU0UgR0VUIERJQUdOT1NUSUNTIFNUQUNLRUR8MTAgRk9SRUFDSCBMT09QIEVMU0lGIEVYSVQgV0hJTEUgUkVWRVJTRSBTTElDRSBERUJVRyBMT0cgSU5GTyBOT1RJQ0UgV0FSTklORyBBU1NFUlQgT1BFTiBTVVBFUlVTRVIgTk9TVVBFUlVTRVIgQ1JFQVRFREIgTk9DUkVBVEVEQiBDUkVBVEVST0xFIE5PQ1JFQVRFUk9MRSBJTkhFUklUIE5PSU5IRVJJVCBMT0dJTiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PUkVQTElDQVRJT04gQllQQVNTUkxTIE5PQllQQVNTUkxTICIsYnVpbHRfaW46IkNVUlJFTlRfVElNRSBDVVJSRU5UX1RJTUVTVEFNUCBDVVJSRU5UX1VTRVIgQ1VSUkVOVF9DQVRBTE9HfDEwIENVUlJFTlRfREFURSBMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgQ1VSUkVOVF9ST0xFfDEwIENVUlJFTlRfU0NIRU1BfDEwIFNFU1NJT05fVVNFUiBQVUJMSUMgRk9VTkQgTkVXIE9MRCBUR19OQU1FfDEwIFRHX1dIRU58MTAgVEdfTEVWRUx8MTAgVEdfT1B8MTAgVEdfUkVMSUR8MTAgVEdfUkVMTkFNRXwxMCBUR19UQUJMRV9OQU1FfDEwIFRHX1RBQkxFX1NDSEVNQXwxMCBUR19OQVJHU3wxMCBUR19BUkdWfDEwIFRHX0VWRU5UfDEwIFRHX1RBR3wxMCBST1dfQ09VTlQgUkVTVUxUX09JRHwxMCBQR19DT05URVhUfDEwIFJFVFVSTkVEX1NRTFNUQVRFIENPTFVNTl9OQU1FIENPTlNUUkFJTlRfTkFNRSBQR19EQVRBVFlQRV9OQU1FfDEwIE1FU1NBR0VfVEVYVCBUQUJMRV9OQU1FIFNDSEVNQV9OQU1FIFBHX0VYQ0VQVElPTl9ERVRBSUx8MTAgUEdfRVhDRVBUSU9OX0hJTlR8MTAgUEdfRVhDRVBUSU9OX0NPTlRFWFR8MTAgU1FMU1RBVEUgU1FMRVJSTXwxMCBTVUNDRVNTRlVMX0NPTVBMRVRJT04gV0FSTklORyBEWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEIElNUExJQ0lUX1pFUk9fQklUX1BBRERJTkcgTlVMTF9WQUxVRV9FTElNSU5BVEVEX0lOX1NFVF9GVU5DVElPTiBQUklWSUxFR0VfTk9UX0dSQU5URUQgUFJJVklMRUdFX05PVF9SRVZPS0VEIFNUUklOR19EQVRBX1JJR0hUX1RSVU5DQVRJT04gREVQUkVDQVRFRF9GRUFUVVJFIE5PX0RBVEEgTk9fQURESVRJT05BTF9EWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEIFNRTF9TVEFURU1FTlRfTk9UX1lFVF9DT01QTEVURSBDT05ORUNUSU9OX0VYQ0VQVElPTiBDT05ORUNUSU9OX0RPRVNfTk9UX0VYSVNUIENPTk5FQ1RJT05fRkFJTFVSRSBTUUxDTElFTlRfVU5BQkxFX1RPX0VTVEFCTElTSF9TUUxDT05ORUNUSU9OIFNRTFNFUlZFUl9SRUpFQ1RFRF9FU1RBQkxJU0hNRU5UX09GX1NRTENPTk5FQ1RJT04gVFJBTlNBQ1RJT05fUkVTT0xVVElPTl9VTktOT1dOIFBST1RPQ09MX1ZJT0xBVElPTiBUUklHR0VSRURfQUNUSU9OX0VYQ0VQVElPTiBGRUFUVVJFX05PVF9TVVBQT1JURUQgSU5WQUxJRF9UUkFOU0FDVElPTl9JTklUSUFUSU9OIExPQ0FUT1JfRVhDRVBUSU9OIElOVkFMSURfTE9DQVRPUl9TUEVDSUZJQ0FUSU9OIElOVkFMSURfR1JBTlRPUiBJTlZBTElEX0dSQU5UX09QRVJBVElPTiBJTlZBTElEX1JPTEVfU1BFQ0lGSUNBVElPTiBESUFHTk9TVElDU19FWENFUFRJT04gU1RBQ0tFRF9ESUFHTk9TVElDU19BQ0NFU1NFRF9XSVRIT1VUX0FDVElWRV9IQU5ETEVSIENBU0VfTk9UX0ZPVU5EIENBUkRJTkFMSVRZX1ZJT0xBVElPTiBEQVRBX0VYQ0VQVElPTiBBUlJBWV9TVUJTQ1JJUFRfRVJST1IgQ0hBUkFDVEVSX05PVF9JTl9SRVBFUlRPSVJFIERBVEVUSU1FX0ZJRUxEX09WRVJGTE9XIERJVklTSU9OX0JZX1pFUk8gRVJST1JfSU5fQVNTSUdOTUVOVCBFU0NBUEVfQ0hBUkFDVEVSX0NPTkZMSUNUIElORElDQVRPUl9PVkVSRkxPVyBJTlRFUlZBTF9GSUVMRF9PVkVSRkxPVyBJTlZBTElEX0FSR1VNRU5UX0ZPUl9MT0dBUklUSE0gSU5WQUxJRF9BUkdVTUVOVF9GT1JfTlRJTEVfRlVOQ1RJT04gSU5WQUxJRF9BUkdVTUVOVF9GT1JfTlRIX1ZBTFVFX0ZVTkNUSU9OIElOVkFMSURfQVJHVU1FTlRfRk9SX1BPV0VSX0ZVTkNUSU9OIElOVkFMSURfQVJHVU1FTlRfRk9SX1dJRFRIX0JVQ0tFVF9GVU5DVElPTiBJTlZBTElEX0NIQVJBQ1RFUl9WQUxVRV9GT1JfQ0FTVCBJTlZBTElEX0RBVEVUSU1FX0ZPUk1BVCBJTlZBTElEX0VTQ0FQRV9DSEFSQUNURVIgSU5WQUxJRF9FU0NBUEVfT0NURVQgSU5WQUxJRF9FU0NBUEVfU0VRVUVOQ0UgTk9OU1RBTkRBUkRfVVNFX09GX0VTQ0FQRV9DSEFSQUNURVIgSU5WQUxJRF9JTkRJQ0FUT1JfUEFSQU1FVEVSX1ZBTFVFIElOVkFMSURfUEFSQU1FVEVSX1ZBTFVFIElOVkFMSURfUkVHVUxBUl9FWFBSRVNTSU9OIElOVkFMSURfUk9XX0NPVU5UX0lOX0xJTUlUX0NMQVVTRSBJTlZBTElEX1JPV19DT1VOVF9JTl9SRVNVTFRfT0ZGU0VUX0NMQVVTRSBJTlZBTElEX1RBQkxFU0FNUExFX0FSR1VNRU5UIElOVkFMSURfVEFCTEVTQU1QTEVfUkVQRUFUIElOVkFMSURfVElNRV9aT05FX0RJU1BMQUNFTUVOVF9WQUxVRSBJTlZBTElEX1VTRV9PRl9FU0NBUEVfQ0hBUkFDVEVSIE1PU1RfU1BFQ0lGSUNfVFlQRV9NSVNNQVRDSCBOVUxMX1ZBTFVFX05PVF9BTExPV0VEIE5VTExfVkFMVUVfTk9fSU5ESUNBVE9SX1BBUkFNRVRFUiBOVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSBTRVFVRU5DRV9HRU5FUkFUT1JfTElNSVRfRVhDRUVERUQgU1RSSU5HX0RBVEFfTEVOR1RIX01JU01BVENIIFNUUklOR19EQVRBX1JJR0hUX1RSVU5DQVRJT04gU1VCU1RSSU5HX0VSUk9SIFRSSU1fRVJST1IgVU5URVJNSU5BVEVEX0NfU1RSSU5HIFpFUk9fTEVOR1RIX0NIQVJBQ1RFUl9TVFJJTkcgRkxPQVRJTkdfUE9JTlRfRVhDRVBUSU9OIElOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiBJTlZBTElEX0JJTkFSWV9SRVBSRVNFTlRBVElPTiBCQURfQ09QWV9GSUxFX0ZPUk1BVCBVTlRSQU5TTEFUQUJMRV9DSEFSQUNURVIgTk9UX0FOX1hNTF9ET0NVTUVOVCBJTlZBTElEX1hNTF9ET0NVTUVOVCBJTlZBTElEX1hNTF9DT05URU5UIElOVkFMSURfWE1MX0NPTU1FTlQgSU5WQUxJRF9YTUxfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBJTlRFR1JJVFlfQ09OU1RSQUlOVF9WSU9MQVRJT04gUkVTVFJJQ1RfVklPTEFUSU9OIE5PVF9OVUxMX1ZJT0xBVElPTiBGT1JFSUdOX0tFWV9WSU9MQVRJT04gVU5JUVVFX1ZJT0xBVElPTiBDSEVDS19WSU9MQVRJT04gRVhDTFVTSU9OX1ZJT0xBVElPTiBJTlZBTElEX0NVUlNPUl9TVEFURSBJTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFIEFDVElWRV9TUUxfVFJBTlNBQ1RJT04gQlJBTkNIX1RSQU5TQUNUSU9OX0FMUkVBRFlfQUNUSVZFIEhFTERfQ1VSU09SX1JFUVVJUkVTX1NBTUVfSVNPTEFUSU9OX0xFVkVMIElOQVBQUk9QUklBVEVfQUNDRVNTX01PREVfRk9SX0JSQU5DSF9UUkFOU0FDVElPTiBJTkFQUFJPUFJJQVRFX0lTT0xBVElPTl9MRVZFTF9GT1JfQlJBTkNIX1RSQU5TQUNUSU9OIE5PX0FDVElWRV9TUUxfVFJBTlNBQ1RJT05fRk9SX0JSQU5DSF9UUkFOU0FDVElPTiBSRUFEX09OTFlfU1FMX1RSQU5TQUNUSU9OIFNDSEVNQV9BTkRfREFUQV9TVEFURU1FTlRfTUlYSU5HX05PVF9TVVBQT1JURUQgTk9fQUNUSVZFX1NRTF9UUkFOU0FDVElPTiBJTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OIElETEVfSU5fVFJBTlNBQ1RJT05fU0VTU0lPTl9USU1FT1VUIElOVkFMSURfU1FMX1NUQVRFTUVOVF9OQU1FIFRSSUdHRVJFRF9EQVRBX0NIQU5HRV9WSU9MQVRJT04gSU5WQUxJRF9BVVRIT1JJWkFUSU9OX1NQRUNJRklDQVRJT04gSU5WQUxJRF9QQVNTV09SRCBERVBFTkRFTlRfUFJJVklMRUdFX0RFU0NSSVBUT1JTX1NUSUxMX0VYSVNUIERFUEVOREVOVF9PQkpFQ1RTX1NUSUxMX0VYSVNUIElOVkFMSURfVFJBTlNBQ1RJT05fVEVSTUlOQVRJT04gU1FMX1JPVVRJTkVfRVhDRVBUSU9OIEZVTkNUSU9OX0VYRUNVVEVEX05PX1JFVFVSTl9TVEFURU1FTlQgTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgUFJPSElCSVRFRF9TUUxfU1RBVEVNRU5UX0FUVEVNUFRFRCBSRUFESU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgSU5WQUxJRF9DVVJTT1JfTkFNRSBFWFRFUk5BTF9ST1VUSU5FX0VYQ0VQVElPTiBDT05UQUlOSU5HX1NRTF9OT1RfUEVSTUlUVEVEIE1PRElGWUlOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEIFBST0hJQklURURfU1FMX1NUQVRFTUVOVF9BVFRFTVBURUQgUkVBRElOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEIEVYVEVSTkFMX1JPVVRJTkVfSU5WT0NBVElPTl9FWENFUFRJT04gSU5WQUxJRF9TUUxTVEFURV9SRVRVUk5FRCBOVUxMX1ZBTFVFX05PVF9BTExPV0VEIFRSSUdHRVJfUFJPVE9DT0xfVklPTEFURUQgU1JGX1BST1RPQ09MX1ZJT0xBVEVEIEVWRU5UX1RSSUdHRVJfUFJPVE9DT0xfVklPTEFURUQgU0FWRVBPSU5UX0VYQ0VQVElPTiBJTlZBTElEX1NBVkVQT0lOVF9TUEVDSUZJQ0FUSU9OIElOVkFMSURfQ0FUQUxPR19OQU1FIElOVkFMSURfU0NIRU1BX05BTUUgVFJBTlNBQ1RJT05fUk9MTEJBQ0sgVFJBTlNBQ1RJT05fSU5URUdSSVRZX0NPTlNUUkFJTlRfVklPTEFUSU9OIFNFUklBTElaQVRJT05fRkFJTFVSRSBTVEFURU1FTlRfQ09NUExFVElPTl9VTktOT1dOIERFQURMT0NLX0RFVEVDVEVEIFNZTlRBWF9FUlJPUl9PUl9BQ0NFU1NfUlVMRV9WSU9MQVRJT04gU1lOVEFYX0VSUk9SIElOU1VGRklDSUVOVF9QUklWSUxFR0UgQ0FOTk9UX0NPRVJDRSBHUk9VUElOR19FUlJPUiBXSU5ET1dJTkdfRVJST1IgSU5WQUxJRF9SRUNVUlNJT04gSU5WQUxJRF9GT1JFSUdOX0tFWSBJTlZBTElEX05BTUUgTkFNRV9UT09fTE9ORyBSRVNFUlZFRF9OQU1FIERBVEFUWVBFX01JU01BVENIIElOREVURVJNSU5BVEVfREFUQVRZUEUgQ09MTEFUSU9OX01JU01BVENIIElOREVURVJNSU5BVEVfQ09MTEFUSU9OIFdST05HX09CSkVDVF9UWVBFIEdFTkVSQVRFRF9BTFdBWVMgVU5ERUZJTkVEX0NPTFVNTiBVTkRFRklORURfRlVOQ1RJT04gVU5ERUZJTkVEX1RBQkxFIFVOREVGSU5FRF9QQVJBTUVURVIgVU5ERUZJTkVEX09CSkVDVCBEVVBMSUNBVEVfQ09MVU1OIERVUExJQ0FURV9DVVJTT1IgRFVQTElDQVRFX0RBVEFCQVNFIERVUExJQ0FURV9GVU5DVElPTiBEVVBMSUNBVEVfUFJFUEFSRURfU1RBVEVNRU5UIERVUExJQ0FURV9TQ0hFTUEgRFVQTElDQVRFX1RBQkxFIERVUExJQ0FURV9BTElBUyBEVVBMSUNBVEVfT0JKRUNUIEFNQklHVU9VU19DT0xVTU4gQU1CSUdVT1VTX0ZVTkNUSU9OIEFNQklHVU9VU19QQVJBTUVURVIgQU1CSUdVT1VTX0FMSUFTIElOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSBJTlZBTElEX0NPTFVNTl9ERUZJTklUSU9OIElOVkFMSURfQ1VSU09SX0RFRklOSVRJT04gSU5WQUxJRF9EQVRBQkFTRV9ERUZJTklUSU9OIElOVkFMSURfRlVOQ1RJT05fREVGSU5JVElPTiBJTlZBTElEX1BSRVBBUkVEX1NUQVRFTUVOVF9ERUZJTklUSU9OIElOVkFMSURfU0NIRU1BX0RFRklOSVRJT04gSU5WQUxJRF9UQUJMRV9ERUZJTklUSU9OIElOVkFMSURfT0JKRUNUX0RFRklOSVRJT04gV0lUSF9DSEVDS19PUFRJT05fVklPTEFUSU9OIElOU1VGRklDSUVOVF9SRVNPVVJDRVMgRElTS19GVUxMIE9VVF9PRl9NRU1PUlkgVE9PX01BTllfQ09OTkVDVElPTlMgQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCBQUk9HUkFNX0xJTUlUX0VYQ0VFREVEIFNUQVRFTUVOVF9UT09fQ09NUExFWCBUT09fTUFOWV9DT0xVTU5TIFRPT19NQU5ZX0FSR1VNRU5UUyBPQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSBPQkpFQ1RfSU5fVVNFIENBTlRfQ0hBTkdFX1JVTlRJTUVfUEFSQU0gTE9DS19OT1RfQVZBSUxBQkxFIE9QRVJBVE9SX0lOVEVSVkVOVElPTiBRVUVSWV9DQU5DRUxFRCBBRE1JTl9TSFVURE9XTiBDUkFTSF9TSFVURE9XTiBDQU5OT1RfQ09OTkVDVF9OT1cgREFUQUJBU0VfRFJPUFBFRCBTWVNURU1fRVJST1IgSU9fRVJST1IgVU5ERUZJTkVEX0ZJTEUgRFVQTElDQVRFX0ZJTEUgU05BUFNIT1RfVE9PX09MRCBDT05GSUdfRklMRV9FUlJPUiBMT0NLX0ZJTEVfRVhJU1RTIEZEV19FUlJPUiBGRFdfQ09MVU1OX05BTUVfTk9UX0ZPVU5EIEZEV19EWU5BTUlDX1BBUkFNRVRFUl9WQUxVRV9ORUVERUQgRkRXX0ZVTkNUSU9OX1NFUVVFTkNFX0VSUk9SIEZEV19JTkNPTlNJU1RFTlRfREVTQ1JJUFRPUl9JTkZPUk1BVElPTiBGRFdfSU5WQUxJRF9BVFRSSUJVVEVfVkFMVUUgRkRXX0lOVkFMSURfQ09MVU1OX05BTUUgRkRXX0lOVkFMSURfQ09MVU1OX05VTUJFUiBGRFdfSU5WQUxJRF9EQVRBX1RZUEUgRkRXX0lOVkFMSURfREFUQV9UWVBFX0RFU0NSSVBUT1JTIEZEV19JTlZBTElEX0RFU0NSSVBUT1JfRklFTERfSURFTlRJRklFUiBGRFdfSU5WQUxJRF9IQU5ETEUgRkRXX0lOVkFMSURfT1BUSU9OX0lOREVYIEZEV19JTlZBTElEX09QVElPTl9OQU1FIEZEV19JTlZBTElEX1NUUklOR19MRU5HVEhfT1JfQlVGRkVSX0xFTkdUSCBGRFdfSU5WQUxJRF9TVFJJTkdfRk9STUFUIEZEV19JTlZBTElEX1VTRV9PRl9OVUxMX1BPSU5URVIgRkRXX1RPT19NQU5ZX0hBTkRMRVMgRkRXX09VVF9PRl9NRU1PUlkgRkRXX05PX1NDSEVNQVMgRkRXX09QVElPTl9OQU1FX05PVF9GT1VORCBGRFdfUkVQTFlfSEFORExFIEZEV19TQ0hFTUFfTk9UX0ZPVU5EIEZEV19UQUJMRV9OT1RfRk9VTkQgRkRXX1VOQUJMRV9UT19DUkVBVEVfRVhFQ1VUSU9OIEZEV19VTkFCTEVfVE9fQ1JFQVRFX1JFUExZIEZEV19VTkFCTEVfVE9fRVNUQUJMSVNIX0NPTk5FQ1RJT04gUExQR1NRTF9FUlJPUiBSQUlTRV9FWENFUFRJT04gTk9fREFUQV9GT1VORCBUT09fTUFOWV9ST1dTIEFTU0VSVF9GQUlMVVJFIElOVEVSTkFMX0VSUk9SIERBVEFfQ09SUlVQVEVEIElOREVYX0NPUlJVUFRFRCAifSxpbGxlZ2FsOi86PT18XFdccypcKFwqfChefFxzKVwkW2Etel18e3t8W2Etel06XHMqJHxcLlwuXC58VE86fERPOi8sY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLHZhcmlhbnRzOlt7YmVnaW46L1xiVEVYVFxzKlNFQVJDSFxiL30se2JlZ2luOi9cYihQUklNQVJZfEZPUkVJR058Rk9SKFxzK05PKT8pXHMrS0VZXGIvfSx7YmVnaW46L1xiUEFSQUxMRUxccysoVU5TQUZFfFJFU1RSSUNURUR8U0FGRSlcYi99LHtiZWdpbjovXGJTVE9SQUdFXHMrKFBMQUlOfEVYVEVSTkFMfEVYVEVOREVEfE1BSU4pXGIvfSx7YmVnaW46L1xiTUFUQ0hccysoRlVMTHxQQVJUSUFMfFNJTVBMRSlcYi99LHtiZWdpbjovXGJOVUxMU1xzKyhGSVJTVHxMQVNUKVxiL30se2JlZ2luOi9cYkVWRU5UXHMrVFJJR0dFUlxiL30se2JlZ2luOi9cYihNQVBQSU5HfE9SKVxzK1JFUExBQ0VcYi99LHtiZWdpbjovXGIoRlJPTXxUTylccysoUFJPR1JBTXxTVERJTnxTVERPVVQpXGIvfSx7YmVnaW46L1xiKFNIQVJFfEVYQ0xVU0lWRSlccytNT0RFXGIvfSx7YmVnaW46L1xiKExFRlR8UklHSFQpXHMrKE9VVEVSXHMrKT9KT0lOXGIvfSx7YmVnaW46L1xiKEZFVENIfE1PVkUpXHMrKE5FWFR8UFJJT1J8RklSU1R8TEFTVHxBQlNPTFVURXxSRUxBVElWRXxGT1JXQVJEfEJBQ0tXQVJEKVxiL30se2JlZ2luOi9cYlBSRVNFUlZFXHMrUk9XU1xiL30se2JlZ2luOi9cYkRJU0NBUkRccytQTEFOU1xiL30se2JlZ2luOi9cYlJFRkVSRU5DSU5HXHMrKE9MRHxORVcpXGIvfSx7YmVnaW46L1xiU0tJUFxzK0xPQ0tFRFxiL30se2JlZ2luOi9cYkdST1VQSU5HXHMrU0VUU1xiL30se2JlZ2luOi9cYihCSU5BUll8SU5TRU5TSVRJVkV8U0NST0xMfE5PXHMrU0NST0xMKVxzKyhDVVJTT1J8Rk9SKVxiL30se2JlZ2luOi9cYihXSVRIfFdJVEhPVVQpXHMrSE9MRFxiL30se2JlZ2luOi9cYldJVEhccysoQ0FTQ0FERUR8TE9DQUwpXHMrQ0hFQ0tccytPUFRJT05cYi99LHtiZWdpbjovXGJFWENMVURFXHMrKFRJRVN8Tk9ccytPVEhFUlMpXGIvfSx7YmVnaW46L1xiRk9STUFUXHMrKFRFWFR8WE1MfEpTT058WUFNTClcYi99LHtiZWdpbjovXGJTRVRccysoKFNFU1NJT058TE9DQUwpXHMrKT9OQU1FU1xiL30se2JlZ2luOi9cYklTXHMrKE5PVFxzKyk/VU5LTk9XTlxiL30se2JlZ2luOi9cYlNFQ1VSSVRZXHMrTEFCRUxcYi99LHtiZWdpbjovXGJTVEFOREFMT05FXHMrKFlFU3xOT3xOT1xzK1ZBTFVFKVxiL30se2JlZ2luOi9cYldJVEhccysoTk9ccyspP0RBVEFcYi99LHtiZWdpbjovXGIoRk9SRUlHTnxTRVQpXHMrREFUQVxiL30se2JlZ2luOi9cYlNFVFxzKyhDQVRBTE9HfENPTlNUUkFJTlRTKVxiL30se2JlZ2luOi9cYihXSVRIfEZPUilccytPUkRJTkFMSVRZXGIvfSx7YmVnaW46L1xiSVNccysoTk9UXHMrKT9ET0NVTUVOVFxiL30se2JlZ2luOi9cYlhNTFxzK09QVElPTlxzKyhET0NVTUVOVHxDT05URU5UKVxiL30se2JlZ2luOi9cYihTVFJJUHxQUkVTRVJWRSlccytXSElURVNQQUNFXGIvfSx7YmVnaW46L1xiTk9ccysoQUNUSU9OfE1BWFZBTFVFfE1JTlZBTFVFKVxiL30se2JlZ2luOi9cYlBBUlRJVElPTlxzK0JZXHMrKFJBTkdFfExJU1R8SEFTSClcYi99LHtiZWdpbjovXGJBVFxzK1RJTUVccytaT05FXGIvfSx7YmVnaW46L1xiR1JBTlRFRFxzK0JZXGIvfSx7YmVnaW46L1xiUkVUVVJOXHMrKFFVRVJZfE5FWFQpXGIvfSx7YmVnaW46L1xiKEFUVEFDSHxERVRBQ0gpXHMrUEFSVElUSU9OXGIvfSx7YmVnaW46L1xiRk9SQ0VccytST1dccytMRVZFTFxzK1NFQ1VSSVRZXGIvfSx7YmVnaW46L1xiKElOQ0xVRElOR3xFWENMVURJTkcpXHMrKENPTU1FTlRTfENPTlNUUkFJTlRTfERFRkFVTFRTfElERU5USVRZfElOREVYRVN8U1RBVElTVElDU3xTVE9SQUdFfEFMTClcYi99LHtiZWdpbjovXGJBU1xzKyhBU1NJR05NRU5UfElNUExJQ0lUfFBFUk1JU1NJVkV8UkVTVFJJQ1RJVkV8RU5VTXxSQU5HRSlcYi99XX0se2JlZ2luOi9cYihGT1JNQVR8RkFNSUxZfFZFUlNJT04pXHMqXCgvfSx7YmVnaW46L1xiSU5DTFVERVxzKlwoLyxrZXl3b3JkczoiSU5DTFVERSJ9LHtiZWdpbjovXGJSQU5HRSg/IVxzKihCRVRXRUVOfFVOQk9VTkRFRHxDVVJSRU5UfFstMC05XSspKS99LHtiZWdpbjovXGIoVkVSU0lPTnxPV05FUnxURU1QTEFURXxUQUJMRVNQQUNFfENPTk5FQ1RJT05ccytMSU1JVHxQUk9DRURVUkV8UkVTVFJJQ1R8Sk9JTnxQQVJTRVJ8Q09QWXxTVEFSVHxFTkR8Q09MTEFUSU9OfElOUFVUfEFOQUxZWkV8U1RPUkFHRXxMSUtFfERFRkFVTFR8REVMSU1JVEVSfEVOQ09ESU5HfENPTFVNTnxDT05TVFJBSU5UfFRBQkxFfFNDSEVNQSlccyo9L30se2JlZ2luOi9cYihQR19cdys/fEhBU19bQS1aX10rX1BSSVZJTEVHRSlcYi8scmVsZXZhbmNlOjEwfSx7YmVnaW46L1xiRVhUUkFDVFxzKlwoLyxlbmQ6L1xiRlJPTVxiLyxyZXR1cm5FbmQ6ITAsa2V5d29yZHM6e3R5cGU6IkNFTlRVUlkgREFZIERFQ0FERSBET1cgRE9ZIEVQT0NIIEhPVVIgSVNPRE9XIElTT1lFQVIgTUlDUk9TRUNPTkRTIE1JTExFTk5JVU0gTUlMTElTRUNPTkRTIE1JTlVURSBNT05USCBRVUFSVEVSIFNFQ09ORCBUSU1FWk9ORSBUSU1FWk9ORV9IT1VSIFRJTUVaT05FX01JTlVURSBXRUVLIFlFQVIifX0se2JlZ2luOi9cYihYTUxFTEVNRU5UfFhNTFBJKVxzKlwoXHMqTkFNRS8sa2V5d29yZHM6e2tleXdvcmQ6Ik5BTUUifX0se2JlZ2luOi9cYihYTUxQQVJTRXxYTUxTRVJJQUxJWkUpXHMqXChccyooRE9DVU1FTlR8Q09OVEVOVCkvLGtleXdvcmRzOntrZXl3b3JkOiJET0NVTUVOVCBDT05URU5UIn19LHtiZWdpbktleXdvcmRzOiJDQUNIRSBJTkNSRU1FTlQgTUFYVkFMVUUgTUlOVkFMVUUiLGVuZDplLkNfTlVNQkVSX1JFLHJldHVybkVuZDohMCxrZXl3b3JkczoiQlkgQ0FDSEUgSU5DUkVNRU5UIE1BWFZBTFVFIE1JTlZBTFVFIn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46L1xiKFdJVEh8V0lUSE9VVClccytUSU1FXHMrWk9ORVxiL30se2NsYXNzTmFtZToidHlwZSIsYmVnaW46L1xiSU5URVJWQUxccysoWUVBUnxNT05USHxEQVl8SE9VUnxNSU5VVEV8U0VDT05EKShccytUT1xzKyhNT05USHxIT1VSfE1JTlVURXxTRUNPTkQpKT9cYi99LHtiZWdpbjovXGJSRVRVUk5TXHMrKExBTkdVQUdFX0hBTkRMRVJ8VFJJR0dFUnxFVkVOVF9UUklHR0VSfEZEV19IQU5ETEVSfElOREVYX0FNX0hBTkRMRVJ8VFNNX0hBTkRMRVIpXGIvLGtleXdvcmRzOntrZXl3b3JkOiJSRVRVUk5TIix0eXBlOiJMQU5HVUFHRV9IQU5ETEVSIFRSSUdHRVIgRVZFTlRfVFJJR0dFUiBGRFdfSEFORExFUiBJTkRFWF9BTV9IQU5ETEVSIFRTTV9IQU5ETEVSIn19LHtiZWdpbjoiXFxiKCIrcysiKVxccypcXCgifSx7YmVnaW46IlxcLigiK3IrIilcXGIifSx7YmVnaW46IlxcYigiK3IrIilcXHMrUEFUSFxcYiIsa2V5d29yZHM6e2tleXdvcmQ6IlBBVEgiLHR5cGU6bi5yZXBsYWNlKCJQQVRIICIsIiIpfX0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYigiK3IrIilcXGIifSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLGNvbnRhaW5zOlt7YmVnaW46IicnIn1dfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiIoZXxFfHUmfFUmKSciLGVuZDoiJyIsY29udGFpbnM6W3tiZWdpbjoiXFxcXC4ifV0scmVsZXZhbmNlOjEwfSx7YmVnaW46IlxcJChbYS16QS1aX10/fFthLXpBLVpfXVthLXpBLVpfMC05XSopXFwkIixlbmRTYW1lQXNCZWdpbjohMCxjb250YWluczpbe3N1Ykxhbmd1YWdlOlsicGdzcWwiLCJwZXJsIiwicHl0aG9uIiwidGNsIiwiciIsImx1YSIsImphdmEiLCJwaHAiLCJydWJ5IiwiYmFzaCIsInNjaGVtZSIsInhtbCIsImpzb24iXSxlbmRzV2l0aFBhcmVudDohMH1dfSx7YmVnaW46JyInLGVuZDonIicsY29udGFpbnM6W3tiZWdpbjonIiInfV19LGUuQ19OVU1CRVJfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHQse2NsYXNzTmFtZToibWV0YSIsdmFyaWFudHM6W3tiZWdpbjoiJShST1cpP1RZUEUiLHJlbGV2YW5jZToxMH0se2JlZ2luOiJcXCRcXGQrIn0se2JlZ2luOiJeI1xcdyIsZW5kOiIkIn1dfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiI8PFxccypbYS16QS1aX11bYS16QS1aXzAtOSRdKlxccyo+PiIscmVsZXZhbmNlOjEwfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2JlZ2luOiJcXCQrW2EtekEtWl9/LcO/XVthLXpBLVowLTlffy3Dv10qIn0sbj17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovPFw/KHBocCk/fFw/Pi99LHI9e2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG5dLHZhcmlhbnRzOlt7YmVnaW46J2IiJyxlbmQ6JyInfSx7YmVnaW46ImInIixlbmQ6IicifSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSldfSxvPXt2YXJpYW50czpbZS5CSU5BUllfTlVNQkVSX01PREUsZS5DX05VTUJFUl9NT0RFXX07cmV0dXJue2FsaWFzZXM6WyJwaHAiLCJwaHAzIiwicGhwNCIsInBocDUiLCJwaHA2IiwicGhwNyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6ImFuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoIGFycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgd2hpbGUgaXNzZXQgcHVibGljIHByb3RlY3RlZCBleGl0IGZvcmVhY2ggdGhyb3cgZWxzZWlmIGluY2x1ZGUgX19GSUxFX18gZW1wdHkgcmVxdWlyZV9vbmNlIGRvIHhvciByZXR1cm4gcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiLy8iLCIkIix7Y29udGFpbnM6W25dfSksZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIse2NvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksZS5DT01NRU5UKCJfX2hhbHRfY29tcGlsZXIuKz87IiwhMSx7ZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6Il9faGFsdF9jb21waWxlciIsbGV4ZW1lczplLlVOREVSU0NPUkVfSURFTlRfUkV9KSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi88PDxbJyJdP1x3K1snIl0/JC8sZW5kOi9eXHcrOz8kLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHtjbGFzc05hbWU6InN1YnN0Iix2YXJpYW50czpbe2JlZ2luOi9cJFx3Ky99LHtiZWdpbjovXHtcJC8sZW5kOi9cfS99XX1dfSxuLHtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9cJHRoaXNcYi99LHQse2JlZ2luOi8oOjp8LT4pK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSovfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDovWzt7XS8sZXhjbHVkZUVuZDohMCxpbGxlZ2FsOiJcXCR8XFxbfCUiLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbInNlbGYiLHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxyLG9dfV19LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDoieyIsZXhjbHVkZUVuZDohMCxpbGxlZ2FsOi9bOlwoXCQiXS8sY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbktleXdvcmRzOiJuYW1lc3BhY2UiLGVuZDoiOyIsaWxsZWdhbDovW1wuJ10vLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbktleXdvcmRzOiJ1c2UiLGVuZDoiOyIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2JlZ2luOiI9PiJ9LHIsb119fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BsYWludGV4dC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Rpc2FibGVBdXRvZGV0ZWN0OiEwfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb255LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6ImFjdG9yIGFkZHJlc3NvZiBhbmQgYXMgYmUgYnJlYWsgY2xhc3MgY29tcGlsZV9lcnJvciBjb21waWxlX2ludHJpbnNpYyBjb25zdW1lIGNvbnRpbnVlIGRlbGVnYXRlIGRpZ2VzdG9mIGRvIGVsc2UgZWxzZWlmIGVtYmVkIGVuZCBlcnJvciBmb3IgZnVuIGlmIGlmZGVmIGluIGludGVyZmFjZSBpcyBpc250IGxhbWJkYSBsZXQgbWF0Y2ggbmV3IG5vdCBvYmplY3Qgb3IgcHJpbWl0aXZlIHJlY292ZXIgcmVwZWF0IHJldHVybiBzdHJ1Y3QgdGhlbiB0cmFpdCB0cnkgdHlwZSB1bnRpbCB1c2UgdmFyIHdoZXJlIHdoaWxlIHdpdGggeG9yIixtZXRhOiJpc28gdmFsIHRhZyB0cm4gYm94IHJlZiIsbGl0ZXJhbDoidGhpcyBmYWxzZSB0cnVlIn0sY29udGFpbnM6W3tjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJcXGJfP1tBLVpdW1xcd10qIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIiIiJyxlbmQ6JyIiIicscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdLHJlbGV2YW5jZTowfSx7YmVnaW46ZS5JREVOVF9SRSsiJyIscmVsZXZhbmNlOjB9LGUuQ19OVU1CRVJfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Bvd2Vyc2hlbGwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtiZWdpbjoiYFtcXHNcXFNdIixyZWxldmFuY2U6MH0sbj17Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjovXCRbXHdcZF1bXHdcZF86XSovfV19LHI9e2NsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46L1wkKG51bGx8dHJ1ZXxmYWxzZSlcYi99LG89e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8iLyxlbmQ6LyIvfSx7YmVnaW46L0AiLyxlbmQ6L14iQC99XSxjb250YWluczpbdCxuLHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCRbQS16XS8sZW5kOi9bXkEtel0vfV19LHM9e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46L0AnLyxlbmQ6L14nQC99XX0saT17Y2xhc3NOYW1lOiJkb2N0YWciLHZhcmlhbnRzOlt7YmVnaW46L1wuKHN5bm9wc2lzfGRlc2NyaXB0aW9ufGV4YW1wbGV8aW5wdXRzfG91dHB1dHN8bm90ZXN8bGlua3xjb21wb25lbnR8cm9sZXxmdW5jdGlvbmFsaXR5KS99LHtiZWdpbjovXC4ocGFyYW1ldGVyfGZvcndhcmRoZWxwdGFyZ2V0bmFtZXxmb3J3YXJkaGVscGNhdGVnb3J5fHJlbW90ZWhlbHBydW5zcGFjZXxleHRlcm5hbGhlbHApXHMrXFMrL31dfSxhPWUuaW5oZXJpdChlLkNPTU1FTlQobnVsbCxudWxsKSx7dmFyaWFudHM6W3tiZWdpbjovIy8sZW5kOi8kL30se2JlZ2luOi88Iy8sZW5kOi8jPi99XSxjb250YWluczpbaV19KTtyZXR1cm57YWxpYXNlczpbInBzIl0sbGV4ZW1lczovLT9bQS16XC5cLV0rLyxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOiJpZiBlbHNlIGZvcmVhY2ggcmV0dXJuIGZ1bmN0aW9uIGRvIHdoaWxlIHVudGlsIGVsc2VpZiBiZWdpbiBmb3IgdHJhcCBkYXRhIGR5bmFtaWNwYXJhbSBlbmQgYnJlYWsgdGhyb3cgcGFyYW0gY29udGludWUgZmluYWxseSBpbiBzd2l0Y2ggZXhpdCBmaWx0ZXIgdHJ5IHByb2Nlc3MgY2F0Y2giLGJ1aWx0X2luOiJBZGQtQ29tcHV0ZXIgQWRkLUNvbnRlbnQgQWRkLUhpc3RvcnkgQWRkLUpvYlRyaWdnZXIgQWRkLU1lbWJlciBBZGQtUFNTbmFwaW4gQWRkLVR5cGUgQ2hlY2twb2ludC1Db21wdXRlciBDbGVhci1Db250ZW50IENsZWFyLUV2ZW50TG9nIENsZWFyLUhpc3RvcnkgQ2xlYXItSG9zdCBDbGVhci1JdGVtIENsZWFyLUl0ZW1Qcm9wZXJ0eSBDbGVhci1WYXJpYWJsZSBDb21wYXJlLU9iamVjdCBDb21wbGV0ZS1UcmFuc2FjdGlvbiBDb25uZWN0LVBTU2Vzc2lvbiBDb25uZWN0LVdTTWFuIENvbnZlcnQtUGF0aCBDb252ZXJ0RnJvbS1Dc3YgQ29udmVydEZyb20tSnNvbiBDb252ZXJ0RnJvbS1TZWN1cmVTdHJpbmcgQ29udmVydEZyb20tU3RyaW5nRGF0YSBDb252ZXJ0VG8tQ3N2IENvbnZlcnRUby1IdG1sIENvbnZlcnRUby1Kc29uIENvbnZlcnRUby1TZWN1cmVTdHJpbmcgQ29udmVydFRvLVhtbCBDb3B5LUl0ZW0gQ29weS1JdGVtUHJvcGVydHkgRGVidWctUHJvY2VzcyBEaXNhYmxlLUNvbXB1dGVyUmVzdG9yZSBEaXNhYmxlLUpvYlRyaWdnZXIgRGlzYWJsZS1QU0JyZWFrcG9pbnQgRGlzYWJsZS1QU1JlbW90aW5nIERpc2FibGUtUFNTZXNzaW9uQ29uZmlndXJhdGlvbiBEaXNhYmxlLVdTTWFuQ3JlZFNTUCBEaXNjb25uZWN0LVBTU2Vzc2lvbiBEaXNjb25uZWN0LVdTTWFuIERpc2FibGUtU2NoZWR1bGVkSm9iIEVuYWJsZS1Db21wdXRlclJlc3RvcmUgRW5hYmxlLUpvYlRyaWdnZXIgRW5hYmxlLVBTQnJlYWtwb2ludCBFbmFibGUtUFNSZW1vdGluZyBFbmFibGUtUFNTZXNzaW9uQ29uZmlndXJhdGlvbiBFbmFibGUtU2NoZWR1bGVkSm9iIEVuYWJsZS1XU01hbkNyZWRTU1AgRW50ZXItUFNTZXNzaW9uIEV4aXQtUFNTZXNzaW9uIEV4cG9ydC1BbGlhcyBFeHBvcnQtQ2xpeG1sIEV4cG9ydC1Db25zb2xlIEV4cG9ydC1Db3VudGVyIEV4cG9ydC1Dc3YgRXhwb3J0LUZvcm1hdERhdGEgRXhwb3J0LU1vZHVsZU1lbWJlciBFeHBvcnQtUFNTZXNzaW9uIEZvckVhY2gtT2JqZWN0IEZvcm1hdC1DdXN0b20gRm9ybWF0LUxpc3QgRm9ybWF0LVRhYmxlIEZvcm1hdC1XaWRlIEdldC1BY2wgR2V0LUFsaWFzIEdldC1BdXRoZW50aWNvZGVTaWduYXR1cmUgR2V0LUNoaWxkSXRlbSBHZXQtQ29tbWFuZCBHZXQtQ29tcHV0ZXJSZXN0b3JlUG9pbnQgR2V0LUNvbnRlbnQgR2V0LUNvbnRyb2xQYW5lbEl0ZW0gR2V0LUNvdW50ZXIgR2V0LUNyZWRlbnRpYWwgR2V0LUN1bHR1cmUgR2V0LURhdGUgR2V0LUV2ZW50IEdldC1FdmVudExvZyBHZXQtRXZlbnRTdWJzY3JpYmVyIEdldC1FeGVjdXRpb25Qb2xpY3kgR2V0LUZvcm1hdERhdGEgR2V0LUhvc3QgR2V0LUhvdEZpeCBHZXQtSGVscCBHZXQtSGlzdG9yeSBHZXQtSXNlU25pcHBldCBHZXQtSXRlbSBHZXQtSXRlbVByb3BlcnR5IEdldC1Kb2IgR2V0LUpvYlRyaWdnZXIgR2V0LUxvY2F0aW9uIEdldC1NZW1iZXIgR2V0LU1vZHVsZSBHZXQtUGZ4Q2VydGlmaWNhdGUgR2V0LVByb2Nlc3MgR2V0LVBTQnJlYWtwb2ludCBHZXQtUFNDYWxsU3RhY2sgR2V0LVBTRHJpdmUgR2V0LVBTUHJvdmlkZXIgR2V0LVBTU2Vzc2lvbiBHZXQtUFNTZXNzaW9uQ29uZmlndXJhdGlvbiBHZXQtUFNTbmFwaW4gR2V0LVJhbmRvbSBHZXQtU2NoZWR1bGVkSm9iIEdldC1TY2hlZHVsZWRKb2JPcHRpb24gR2V0LVNlcnZpY2UgR2V0LVRyYWNlU291cmNlIEdldC1UcmFuc2FjdGlvbiBHZXQtVHlwZURhdGEgR2V0LVVJQ3VsdHVyZSBHZXQtVW5pcXVlIEdldC1WYXJpYWJsZSBHZXQtVmVyYiBHZXQtV2luRXZlbnQgR2V0LVdtaU9iamVjdCBHZXQtV1NNYW5DcmVkU1NQIEdldC1XU01hbkluc3RhbmNlIEdyb3VwLU9iamVjdCBJbXBvcnQtQWxpYXMgSW1wb3J0LUNsaXhtbCBJbXBvcnQtQ291bnRlciBJbXBvcnQtQ3N2IEltcG9ydC1Jc2VTbmlwcGV0IEltcG9ydC1Mb2NhbGl6ZWREYXRhIEltcG9ydC1QU1Nlc3Npb24gSW1wb3J0LU1vZHVsZSBJbnZva2UtQXNXb3JrZmxvdyBJbnZva2UtQ29tbWFuZCBJbnZva2UtRXhwcmVzc2lvbiBJbnZva2UtSGlzdG9yeSBJbnZva2UtSXRlbSBJbnZva2UtUmVzdE1ldGhvZCBJbnZva2UtV2ViUmVxdWVzdCBJbnZva2UtV21pTWV0aG9kIEludm9rZS1XU01hbkFjdGlvbiBKb2luLVBhdGggTGltaXQtRXZlbnRMb2cgTWVhc3VyZS1Db21tYW5kIE1lYXN1cmUtT2JqZWN0IE1vdmUtSXRlbSBNb3ZlLUl0ZW1Qcm9wZXJ0eSBOZXctQWxpYXMgTmV3LUV2ZW50IE5ldy1FdmVudExvZyBOZXctSXNlU25pcHBldCBOZXctSXRlbSBOZXctSXRlbVByb3BlcnR5IE5ldy1Kb2JUcmlnZ2VyIE5ldy1PYmplY3QgTmV3LU1vZHVsZSBOZXctTW9kdWxlTWFuaWZlc3QgTmV3LVBTRHJpdmUgTmV3LVBTU2Vzc2lvbiBOZXctUFNTZXNzaW9uQ29uZmlndXJhdGlvbkZpbGUgTmV3LVBTU2Vzc2lvbk9wdGlvbiBOZXctUFNUcmFuc3BvcnRPcHRpb24gTmV3LVBTV29ya2Zsb3dFeGVjdXRpb25PcHRpb24gTmV3LVBTV29ya2Zsb3dTZXNzaW9uIE5ldy1TY2hlZHVsZWRKb2JPcHRpb24gTmV3LVNlcnZpY2UgTmV3LVRpbWVTcGFuIE5ldy1WYXJpYWJsZSBOZXctV2ViU2VydmljZVByb3h5IE5ldy1XaW5FdmVudCBOZXctV1NNYW5JbnN0YW5jZSBOZXctV1NNYW5TZXNzaW9uT3B0aW9uIE91dC1EZWZhdWx0IE91dC1GaWxlIE91dC1HcmlkVmlldyBPdXQtSG9zdCBPdXQtTnVsbCBPdXQtUHJpbnRlciBPdXQtU3RyaW5nIFBvcC1Mb2NhdGlvbiBQdXNoLUxvY2F0aW9uIFJlYWQtSG9zdCBSZWNlaXZlLUpvYiBSZWdpc3Rlci1FbmdpbmVFdmVudCBSZWdpc3Rlci1PYmplY3RFdmVudCBSZWdpc3Rlci1QU1Nlc3Npb25Db25maWd1cmF0aW9uIFJlZ2lzdGVyLVNjaGVkdWxlZEpvYiBSZWdpc3Rlci1XbWlFdmVudCBSZW1vdmUtQ29tcHV0ZXIgUmVtb3ZlLUV2ZW50IFJlbW92ZS1FdmVudExvZyBSZW1vdmUtSXRlbSBSZW1vdmUtSXRlbVByb3BlcnR5IFJlbW92ZS1Kb2IgUmVtb3ZlLUpvYlRyaWdnZXIgUmVtb3ZlLU1vZHVsZSBSZW1vdmUtUFNCcmVha3BvaW50IFJlbW92ZS1QU0RyaXZlIFJlbW92ZS1QU1Nlc3Npb24gUmVtb3ZlLVBTU25hcGluIFJlbW92ZS1UeXBlRGF0YSBSZW1vdmUtVmFyaWFibGUgUmVtb3ZlLVdtaU9iamVjdCBSZW1vdmUtV1NNYW5JbnN0YW5jZSBSZW5hbWUtQ29tcHV0ZXIgUmVuYW1lLUl0ZW0gUmVuYW1lLUl0ZW1Qcm9wZXJ0eSBSZXNldC1Db21wdXRlck1hY2hpbmVQYXNzd29yZCBSZXNvbHZlLVBhdGggUmVzdGFydC1Db21wdXRlciBSZXN0YXJ0LVNlcnZpY2UgUmVzdG9yZS1Db21wdXRlciBSZXN1bWUtSm9iIFJlc3VtZS1TZXJ2aWNlIFNhdmUtSGVscCBTZWxlY3QtT2JqZWN0IFNlbGVjdC1TdHJpbmcgU2VsZWN0LVhtbCBTZW5kLU1haWxNZXNzYWdlIFNldC1BY2wgU2V0LUFsaWFzIFNldC1BdXRoZW50aWNvZGVTaWduYXR1cmUgU2V0LUNvbnRlbnQgU2V0LURhdGUgU2V0LUV4ZWN1dGlvblBvbGljeSBTZXQtSXRlbSBTZXQtSXRlbVByb3BlcnR5IFNldC1Kb2JUcmlnZ2VyIFNldC1Mb2NhdGlvbiBTZXQtUFNCcmVha3BvaW50IFNldC1QU0RlYnVnIFNldC1QU1Nlc3Npb25Db25maWd1cmF0aW9uIFNldC1TY2hlZHVsZWRKb2IgU2V0LVNjaGVkdWxlZEpvYk9wdGlvbiBTZXQtU2VydmljZSBTZXQtU3RyaWN0TW9kZSBTZXQtVHJhY2VTb3VyY2UgU2V0LVZhcmlhYmxlIFNldC1XbWlJbnN0YW5jZSBTZXQtV1NNYW5JbnN0YW5jZSBTZXQtV1NNYW5RdWlja0NvbmZpZyBTaG93LUNvbW1hbmQgU2hvdy1Db250cm9sUGFuZWxJdGVtIFNob3ctRXZlbnRMb2cgU29ydC1PYmplY3QgU3BsaXQtUGF0aCBTdGFydC1Kb2IgU3RhcnQtUHJvY2VzcyBTdGFydC1TZXJ2aWNlIFN0YXJ0LVNsZWVwIFN0YXJ0LVRyYW5zYWN0aW9uIFN0YXJ0LVRyYW5zY3JpcHQgU3RvcC1Db21wdXRlciBTdG9wLUpvYiBTdG9wLVByb2Nlc3MgU3RvcC1TZXJ2aWNlIFN0b3AtVHJhbnNjcmlwdCBTdXNwZW5kLUpvYiBTdXNwZW5kLVNlcnZpY2UgVGVlLU9iamVjdCBUZXN0LUNvbXB1dGVyU2VjdXJlQ2hhbm5lbCBUZXN0LUNvbm5lY3Rpb24gVGVzdC1Nb2R1bGVNYW5pZmVzdCBUZXN0LVBhdGggVGVzdC1QU1Nlc3Npb25Db25maWd1cmF0aW9uRmlsZSBUcmFjZS1Db21tYW5kIFVuYmxvY2stRmlsZSBVbmRvLVRyYW5zYWN0aW9uIFVucmVnaXN0ZXItRXZlbnQgVW5yZWdpc3Rlci1QU1Nlc3Npb25Db25maWd1cmF0aW9uIFVucmVnaXN0ZXItU2NoZWR1bGVkSm9iIFVwZGF0ZS1Gb3JtYXREYXRhIFVwZGF0ZS1IZWxwIFVwZGF0ZS1MaXN0IFVwZGF0ZS1UeXBlRGF0YSBVc2UtVHJhbnNhY3Rpb24gV2FpdC1FdmVudCBXYWl0LUpvYiBXYWl0LVByb2Nlc3MgV2hlcmUtT2JqZWN0IFdyaXRlLURlYnVnIFdyaXRlLUVycm9yIFdyaXRlLUV2ZW50TG9nIFdyaXRlLUhvc3QgV3JpdGUtT3V0cHV0IFdyaXRlLVByb2dyZXNzIFdyaXRlLVZlcmJvc2UgV3JpdGUtV2FybmluZyBBZGQtTURUUGVyc2lzdGVudERyaXZlIERpc2FibGUtTURUTW9uaXRvclNlcnZpY2UgRW5hYmxlLU1EVE1vbml0b3JTZXJ2aWNlIEdldC1NRFREZXBsb3ltZW50U2hhcmVTdGF0aXN0aWNzIEdldC1NRFRNb25pdG9yRGF0YSBHZXQtTURUT3BlcmF0aW5nU3lzdGVtQ2F0YWxvZyBHZXQtTURUUGVyc2lzdGVudERyaXZlIEltcG9ydC1NRFRBcHBsaWNhdGlvbiBJbXBvcnQtTURURHJpdmVyIEltcG9ydC1NRFRPcGVyYXRpbmdTeXN0ZW0gSW1wb3J0LU1EVFBhY2thZ2UgSW1wb3J0LU1EVFRhc2tTZXF1ZW5jZSBOZXctTURURGF0YWJhc2UgUmVtb3ZlLU1EVE1vbml0b3JEYXRhIFJlbW92ZS1NRFRQZXJzaXN0ZW50RHJpdmUgUmVzdG9yZS1NRFRQZXJzaXN0ZW50RHJpdmUgU2V0LU1EVE1vbml0b3JEYXRhIFRlc3QtTURURGVwbG95bWVudFNoYXJlIFRlc3QtTURUTW9uaXRvckRhdGEgVXBkYXRlLU1EVERhdGFiYXNlU2NoZW1hIFVwZGF0ZS1NRFREZXBsb3ltZW50U2hhcmUgVXBkYXRlLU1EVExpbmtlZERTIFVwZGF0ZS1NRFRNZWRpYSBVcGRhdGUtTURUTWVkaWEgQWRkLVZhbXRQcm9kdWN0S2V5IEV4cG9ydC1WYW10RGF0YSBGaW5kLVZhbXRNYW5hZ2VkTWFjaGluZSBHZXQtVmFtdENvbmZpcm1hdGlvbklkIEdldC1WYW10UHJvZHVjdCBHZXQtVmFtdFByb2R1Y3RLZXkgSW1wb3J0LVZhbXREYXRhIEluaXRpYWxpemUtVmFtdERhdGEgSW5zdGFsbC1WYW10Q29uZmlybWF0aW9uSWQgSW5zdGFsbC1WYW10UHJvZHVjdEFjdGl2YXRpb24gSW5zdGFsbC1WYW10UHJvZHVjdEtleSBVcGRhdGUtVmFtdFByb2R1Y3QiLG5vbWFya3VwOiItbmUgLWVxIC1sdCAtZ3QgLWdlIC1sZSAtbm90IC1saWtlIC1ub3RsaWtlIC1tYXRjaCAtbm90bWF0Y2ggLWNvbnRhaW5zIC1ub3Rjb250YWlucyAtaW4gLW5vdGluIC1yZXBsYWNlIn0sY29udGFpbnM6W3QsZS5OVU1CRVJfTU9ERSxvLHMscixuLGFdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9jZXNzaW5nLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6IkJ1ZmZlcmVkUmVhZGVyIFBWZWN0b3IgUEZvbnQgUEltYWdlIFBHcmFwaGljcyBIYXNoTWFwIGJvb2xlYW4gYnl0ZSBjaGFyIGNvbG9yIGRvdWJsZSBmbG9hdCBpbnQgbG9uZyBTdHJpbmcgQXJyYXkgRmxvYXREaWN0IEZsb2F0TGlzdCBJbnREaWN0IEludExpc3QgSlNPTkFycmF5IEpTT05PYmplY3QgT2JqZWN0IFN0cmluZ0RpY3QgU3RyaW5nTGlzdCBUYWJsZSBUYWJsZVJvdyBYTUwgZmFsc2Ugc3luY2hyb25pemVkIGludCBhYnN0cmFjdCBmbG9hdCBwcml2YXRlIGNoYXIgYm9vbGVhbiBzdGF0aWMgbnVsbCBpZiBjb25zdCBmb3IgdHJ1ZSB3aGlsZSBsb25nIHRocm93IHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgcmV0dXJuIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0IHBhY2thZ2UgZGVmYXVsdCBkb3VibGUgcHVibGljIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0aHJvd3MgcHJvdGVjdGVkIHB1YmxpYyBwcml2YXRlIixsaXRlcmFsOiJQMkQgUDNEIEhBTEZfUEkgUEkgUVVBUlRFUl9QSSBUQVUgVFdPX1BJIix0aXRsZToic2V0dXAgZHJhdyIsYnVpbHRfaW46ImRpc3BsYXlIZWlnaHQgZGlzcGxheVdpZHRoIG1vdXNlWSBtb3VzZVggbW91c2VQcmVzc2VkIHBtb3VzZVggcG1vdXNlWSBrZXkga2V5Q29kZSBwaXhlbHMgZm9jdXNlZCBmcmFtZUNvdW50IGZyYW1lUmF0ZSBoZWlnaHQgd2lkdGggc2l6ZSBjcmVhdGVHcmFwaGljcyBiZWdpbkRyYXcgY3JlYXRlU2hhcGUgbG9hZFNoYXBlIFBTaGFwZSBhcmMgZWxsaXBzZSBsaW5lIHBvaW50IHF1YWQgcmVjdCB0cmlhbmdsZSBiZXppZXIgYmV6aWVyRGV0YWlsIGJlemllclBvaW50IGJlemllclRhbmdlbnQgY3VydmUgY3VydmVEZXRhaWwgY3VydmVQb2ludCBjdXJ2ZVRhbmdlbnQgY3VydmVUaWdodG5lc3Mgc2hhcGUgc2hhcGVNb2RlIGJlZ2luQ29udG91ciBiZWdpblNoYXBlIGJlemllclZlcnRleCBjdXJ2ZVZlcnRleCBlbmRDb250b3VyIGVuZFNoYXBlIHF1YWRyYXRpY1ZlcnRleCB2ZXJ0ZXggZWxsaXBzZU1vZGUgbm9TbW9vdGggcmVjdE1vZGUgc21vb3RoIHN0cm9rZUNhcCBzdHJva2VKb2luIHN0cm9rZVdlaWdodCBtb3VzZUNsaWNrZWQgbW91c2VEcmFnZ2VkIG1vdXNlTW92ZWQgbW91c2VQcmVzc2VkIG1vdXNlUmVsZWFzZWQgbW91c2VXaGVlbCBrZXlQcmVzc2VkIGtleVByZXNzZWRrZXlSZWxlYXNlZCBrZXlUeXBlZCBwcmludCBwcmludGxuIHNhdmUgc2F2ZUZyYW1lIGRheSBob3VyIG1pbGxpcyBtaW51dGUgbW9udGggc2Vjb25kIHllYXIgYmFja2dyb3VuZCBjbGVhciBjb2xvck1vZGUgZmlsbCBub0ZpbGwgbm9TdHJva2Ugc3Ryb2tlIGFscGhhIGJsdWUgYnJpZ2h0bmVzcyBjb2xvciBncmVlbiBodWUgbGVycENvbG9yIHJlZCBzYXR1cmF0aW9uIG1vZGVsWCBtb2RlbFkgbW9kZWxaIHNjcmVlblggc2NyZWVuWSBzY3JlZW5aIGFtYmllbnQgZW1pc3NpdmUgc2hpbmluZXNzIHNwZWN1bGFyIGFkZCBjcmVhdGVJbWFnZSBiZWdpbkNhbWVyYSBjYW1lcmEgZW5kQ2FtZXJhIGZydXN0dW0gb3J0aG8gcGVyc3BlY3RpdmUgcHJpbnRDYW1lcmEgcHJpbnRQcm9qZWN0aW9uIGN1cnNvciBmcmFtZVJhdGUgbm9DdXJzb3IgZXhpdCBsb29wIG5vTG9vcCBwb3BTdHlsZSBwdXNoU3R5bGUgcmVkcmF3IGJpbmFyeSBib29sZWFuIGJ5dGUgY2hhciBmbG9hdCBoZXggaW50IHN0ciB1bmJpbmFyeSB1bmhleCBqb2luIG1hdGNoIG1hdGNoQWxsIG5mIG5mYyBuZnAgbmZzIHNwbGl0IHNwbGl0VG9rZW5zIHRyaW0gYXBwZW5kIGFycmF5Q29weSBjb25jYXQgZXhwYW5kIHJldmVyc2Ugc2hvcnRlbiBzb3J0IHNwbGljZSBzdWJzZXQgYm94IHNwaGVyZSBzcGhlcmVEZXRhaWwgY3JlYXRlSW5wdXQgY3JlYXRlUmVhZGVyIGxvYWRCeXRlcyBsb2FkSlNPTkFycmF5IGxvYWRKU09OT2JqZWN0IGxvYWRTdHJpbmdzIGxvYWRUYWJsZSBsb2FkWE1MIG9wZW4gcGFyc2VYTUwgc2F2ZVRhYmxlIHNlbGVjdEZvbGRlciBzZWxlY3RJbnB1dCBiZWdpblJhdyBiZWdpblJlY29yZCBjcmVhdGVPdXRwdXQgY3JlYXRlV3JpdGVyIGVuZFJhdyBlbmRSZWNvcmQgUHJpbnRXcml0ZXJzYXZlQnl0ZXMgc2F2ZUpTT05BcnJheSBzYXZlSlNPTk9iamVjdCBzYXZlU3RyZWFtIHNhdmVTdHJpbmdzIHNhdmVYTUwgc2VsZWN0T3V0cHV0IHBvcE1hdHJpeCBwcmludE1hdHJpeCBwdXNoTWF0cml4IHJlc2V0TWF0cml4IHJvdGF0ZSByb3RhdGVYIHJvdGF0ZVkgcm90YXRlWiBzY2FsZSBzaGVhclggc2hlYXJZIHRyYW5zbGF0ZSBhbWJpZW50TGlnaHQgZGlyZWN0aW9uYWxMaWdodCBsaWdodEZhbGxvZmYgbGlnaHRzIGxpZ2h0U3BlY3VsYXIgbm9MaWdodHMgbm9ybWFsIHBvaW50TGlnaHQgc3BvdExpZ2h0IGltYWdlIGltYWdlTW9kZSBsb2FkSW1hZ2Ugbm9UaW50IHJlcXVlc3RJbWFnZSB0aW50IHRleHR1cmUgdGV4dHVyZU1vZGUgdGV4dHVyZVdyYXAgYmxlbmQgY29weSBmaWx0ZXIgZ2V0IGxvYWRQaXhlbHMgc2V0IHVwZGF0ZVBpeGVscyBibGVuZE1vZGUgbG9hZFNoYWRlciBQU2hhZGVycmVzZXRTaGFkZXIgc2hhZGVyIGNyZWF0ZUZvbnQgbG9hZEZvbnQgdGV4dCB0ZXh0Rm9udCB0ZXh0QWxpZ24gdGV4dExlYWRpbmcgdGV4dE1vZGUgdGV4dFNpemUgdGV4dFdpZHRoIHRleHRBc2NlbnQgdGV4dERlc2NlbnQgYWJzIGNlaWwgY29uc3RyYWluIGRpc3QgZXhwIGZsb29yIGxlcnAgbG9nIG1hZyBtYXAgbWF4IG1pbiBub3JtIHBvdyByb3VuZCBzcSBzcXJ0IGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNvcyBkZWdyZWVzIHJhZGlhbnMgc2luIHRhbiBub2lzZSBub2lzZURldGFpbCBub2lzZVNlZWQgcmFuZG9tIHJhbmRvbUdhdXNzaWFuIHJhbmRvbVNlZWQifSxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvZmlsZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRhaW5zOltlLkNfTlVNQkVSX01PREUse2JlZ2luOiJbYS16QS1aX11bXFxkYS16QS1aX10rXFwuW1xcZGEtekEtWl9dezEsM30iLGVuZDoiOiIsZXhjbHVkZUVuZDohMH0se2JlZ2luOiIobmNhbGxzfHRvdHRpbWV8Y3VtdGltZSkiLGVuZDoiJCIsa2V5d29yZHM6Im5jYWxscyB0b3R0aW1lfDEwIGN1bXRpbWV8MTAgZmlsZW5hbWUiLHJlbGV2YW5jZToxMH0se2JlZ2luOiJmdW5jdGlvbiBjYWxscyIsZW5kOiIkIixjb250YWluczpbZS5DX05VTUJFUl9NT0RFXSxyZWxldmFuY2U6MTB9LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IlxcKCIsZW5kOiJcXCkkIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MH1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9sb2cuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtiZWdpbjovW2Etel1bQS1aYS16MC05X10qLyxyZWxldmFuY2U6MH0sbj17Y2xhc3NOYW1lOiJzeW1ib2wiLHZhcmlhbnRzOlt7YmVnaW46L1tBLVpdW2EtekEtWjAtOV9dKi99LHtiZWdpbjovX1tBLVphLXowLTlfXSovfV0scmVsZXZhbmNlOjB9LHI9e2JlZ2luOi9cKC8sZW5kOi9cKS8scmVsZXZhbmNlOjB9LG89e2JlZ2luOi9cWy8sZW5kOi9cXS99LHM9e2NsYXNzTmFtZToiY29tbWVudCIsYmVnaW46LyUvLGVuZDovJC8sY29udGFpbnM6W2UuUEhSQVNBTF9XT1JEU19NT0RFXX0saT17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi9gLyxlbmQ6L2AvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxhPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LzBcJyhcXFwnfC4pL30sbD17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8wXCdcXHMvfSx1PXtiZWdpbjovOi0vfSxjPVt0LG4scix1LG8scyxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGksYSxsLGUuQ19OVU1CRVJfTU9ERV07cmV0dXJuIHIuY29udGFpbnM9YyxvLmNvbnRhaW5zPWMse2NvbnRhaW5zOmMuY29uY2F0KFt7YmVnaW46L1wuJC99XSl9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3BlcnRpZXMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJbIFxcdFxcZl0qIixuPSIoIit0KyJbOj1dIit0KyJ8WyBcXHRcXGZdKykiLHI9IihbXlxcXFw6PSBcXHRcXGZcXG5dfFxcXFwuKSsiLG89e2VuZDpuLHJlbGV2YW5jZTowLHN0YXJ0czp7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZDovJC8scmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjoiXFxcXFxcbiJ9XX19O3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGlsbGVnYWw6L1xTLyxjb250YWluczpbZS5DT01NRU5UKCJeXFxzKlshI10iLCIkIikse2JlZ2luOiIoW15cXFxcXFxXOj0gXFx0XFxmXFxuXXxcXFxcLikrIituLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjoiKFteXFxcXFxcVzo9IFxcdFxcZlxcbl18XFxcXC4pKyIsZW5kc1BhcmVudDohMCxyZWxldmFuY2U6MH1dLHN0YXJ0czpvfSx7YmVnaW46cituLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjpyLGVuZHNQYXJlbnQ6ITAscmVsZXZhbmNlOjB9XSxzdGFydHM6b30se2NsYXNzTmFtZToiYXR0ciIscmVsZXZhbmNlOjAsYmVnaW46cit0KyIkIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm90b2J1Zi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2tleXdvcmRzOntrZXl3b3JkOiJwYWNrYWdlIGltcG9ydCBvcHRpb24gb3B0aW9uYWwgcmVxdWlyZWQgcmVwZWF0ZWQgZ3JvdXAgb25lb2YiLGJ1aWx0X2luOiJkb3VibGUgZmxvYXQgaW50MzIgaW50NjQgdWludDMyIHVpbnQ2NCBzaW50MzIgc2ludDY0IGZpeGVkMzIgZml4ZWQ2NCBzZml4ZWQzMiBzZml4ZWQ2NCBib29sIHN0cmluZyBieXRlcyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSJ9LGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFLGUuTlVNQkVSX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJtZXNzYWdlIGVudW0gc2VydmljZSIsZW5kOi9cey8saWxsZWdhbDovXG4vLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtzdGFydHM6e2VuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITB9fSldfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoicnBjIixlbmQ6LzsvLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6InJwYyByZXR1cm5zIn0se2JlZ2luOi9eXHMqW0EtWl9dKy8sZW5kOi9ccyo9LyxleGNsdWRlRW5kOiEwfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B1cHBldC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6ImFuZCBjYXNlIGRlZmF1bHQgZWxzZSBlbHNpZiBmYWxzZSBpZiBpbiBpbXBvcnQgZW5oZXJpdHMgbm9kZSBvciB0cnVlIHVuZGVmIHVubGVzcyBtYWluIHNldHRpbmdzICRzdHJpbmcgIixsaXRlcmFsOiJhbGlhcyBhdWRpdCBiZWZvcmUgbG9nbGV2ZWwgbm9vcCByZXF1aXJlIHN1YnNjcmliZSB0YWcgb3duZXIgZW5zdXJlIGdyb3VwIG1vZGUgbmFtZXwwIGNoYW5nZXMgY29udGV4dCBmb3JjZSBpbmNsIGxlbnMgbG9hZF9wYXRoIG9ubHlpZiBwcm92aWRlciByZXR1cm5zIHJvb3Qgc2hvd19kaWZmIHR5cGVfY2hlY2sgZW5fYWRkcmVzcyBpcF9hZGRyZXNzIHJlYWxuYW1lIGNvbW1hbmQgZW52aXJvbm1lbnQgaG91ciBtb251dGUgbW9udGggbW9udGhkYXkgc3BlY2lhbCB0YXJnZXQgd2Vla2RheSBjcmVhdGVzIGN3ZCBvZ291dHB1dCByZWZyZXNoIHJlZnJlc2hvbmx5IHRyaWVzIHRyeV9zbGVlcCB1bWFzayBiYWNrdXAgY2hlY2tzdW0gY29udGVudCBjdGltZSBmb3JjZSBpZ25vcmUgbGlua3MgbXRpbWUgcHVyZ2UgcmVjdXJzZSByZWN1cnNlbGltaXQgcmVwbGFjZSBzZWxpbnV4X2lnbm9yZV9kZWZhdWx0cyBzZWxyYW5nZSBzZWxyb2xlIHNlbHR5cGUgc2VsdXNlciBzb3VyY2Ugc291aXJjZV9wZXJtaXNzaW9ucyBzb3VyY2VzZWxlY3QgdmFsaWRhdGVfY21kIHZhbGlkYXRlX3JlcGxhY2VtZW50IGFsbG93ZHVwZSBhdHRyaWJ1dGVfbWVtYmVyc2hpcCBhdXRoX21lbWJlcnNoaXAgZm9yY2Vsb2NhbCBnaWQgaWFfbG9hZF9tb2R1bGUgbWVtYmVycyBzeXN0ZW0gaG9zdF9hbGlhc2VzIGlwIGFsbG93ZWRfdHJ1bmtfdmxhbnMgZGVzY3JpcHRpb24gZGV2aWNlX3VybCBkdXBsZXggZW5jYXBzdWxhdGlvbiBldGhlcmNoYW5uZWwgbmF0aXZlX3ZsYW4gc3BlZWQgcHJpbmNpcGFscyBhbGxvd19yb290IGF1dGhfY2xhc3MgYXV0aF90eXBlIGF1dGhlbnRpY2F0ZV91c2VyIGtfb2ZfbiBtZWNoYW5pc21zIHJ1bGUgc2Vzc2lvbl9vd25lciBzaGFyZWQgb3B0aW9ucyBkZXZpY2UgZnN0eXBlIGVuYWJsZSBoYXNyZXN0YXJ0IGRpcmVjdG9yeSBwcmVzZW50IGFic2VudCBsaW5rIGF0Ym9vdCBibG9ja2RldmljZSBkZXZpY2UgZHVtcCBwYXNzIHJlbW91bnRzIHBvbGxlcl90YWcgdXNlIG1lc3NhZ2Ugd2l0aHBhdGggYWRtaW5maWxlIGFsbG93X3ZpcnR1YWwgYWxsb3djZHJvbSBjYXRlZ29yeSBjb25maWdmaWxlcyBmbGF2b3IgaW5zdGFsbF9vcHRpb25zIGluc3RhbmNlIHBhY2thZ2Vfc2V0dGluZ3MgcGxhdGZvcm0gcmVzcG9uc2VmaWxlIHN0YXR1cyB1bmluc3RhbGxfb3B0aW9ucyB2ZW5kb3IgdW5sZXNzX3N5c3RlbV91c2VyIHVubGVzc191aWQgYmluYXJ5IGNvbnRyb2wgZmxhZ3MgaGFzc3RhdHVzIG1hbmlmZXN0IHBhdHRlcm4gcmVzdGFydCBydW5uaW5nIHN0YXJ0IHN0b3AgYWxsb3dkdXBlIGF1dGhzIGV4cGlyeSBnaWQgZ3JvdXBzIGhvbWUgaXRlcmF0aW9ucyBrZXlfbWVtYmVyc2hpcCBrZXlzIG1hbmFnZWhvbWUgbWVtYmVyc2hpcCBwYXNzd29yZCBwYXNzd29yZF9tYXhfYWdlIHBhc3N3b3JkX21pbl9hZ2UgcHJvZmlsZV9tZW1iZXJzaGlwIHByb2ZpbGVzIHByb2plY3QgcHVyZ2Vfc3NoX2tleXMgcm9sZV9tZW1iZXJzaGlwIHJvbGVzIHNhbHQgc2hlbGwgdWlkIGJhc2V1cmwgY29zdCBkZXNjciBlbmFibGVkIGVuYWJsZWdyb3VwcyBleGNsdWRlIGZhaWxvdmVybWV0aG9kIGdwZ2NoZWNrIGdwZ2tleSBodHRwX2NhY2hpbmcgaW5jbHVkZSBpbmNsdWRlcGtncyBrZWVwYWxpdmUgbWV0YWRhdGFfZXhwaXJlIG1ldGFsaW5rIG1pcnJvcmxpc3QgcHJpb3JpdHkgcHJvdGVjdCBwcm94eSBwcm94eV9wYXNzd29yZCBwcm94eV91c2VybmFtZSByZXBvX2dwZ2NoZWNrIHMzX2VuYWJsZWQgc2tpcF9pZl91bmF2YWlsYWJsZSBzc2xjYWNlcnQgc3NsY2xpZW50Y2VydCBzc2xjbGllbnRrZXkgc3NsdmVyaWZ5IG1vdW50ZWQiLGJ1aWx0X2luOiJhcmNoaXRlY3R1cmUgYXVnZWFzdmVyc2lvbiBibG9ja2RldmljZXMgYm9hcmRtYW51ZmFjdHVyZXIgYm9hcmRwcm9kdWN0bmFtZSBib2FyZHNlcmlhbG51bWJlciBjZmtleSBkaGNwX3NlcnZlcnMgZG9tYWluIGVjMl8gZWMyX3VzZXJkYXRhIGZhY3RlcnZlcnNpb24gZmlsZXN5c3RlbXMgbGRvbSBmcWRuIGdpZCBoYXJkd2FyZWlzYSBoYXJkd2FyZW1vZGVsIGhvc3RuYW1lIGlkfDAgaW50ZXJmYWNlcyBpcGFkZHJlc3MgaXBhZGRyZXNzXyBpcGFkZHJlc3M2IGlwYWRkcmVzczZfIGlwaG9zdG51bWJlciBpc192aXJ0dWFsIGtlcm5lbCBrZXJuZWxtYWp2ZXJzaW9uIGtlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiBrZXJuZWxyZWxlYXNlIGtlcm5lbHZlcnNpb24gbHNiZGlzdGNvZGVuYW1lIGxzYmRpc3RkZXNjcmlwdGlvbiBsc2JkaXN0aWQgbHNiZGlzdHJlbGVhc2UgbHNibWFqZGlzdHJlbGVhc2UgbHNibWlub3JkaXN0cmVsZWFzZSBsc2JyZWxlYXNlIG1hY2FkZHJlc3MgbWFjYWRkcmVzc18gbWFjb3N4X2J1aWxkdmVyc2lvbiBtYWNvc3hfcHJvZHVjdG5hbWUgbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uIG1hY29zeF9wcm9kdWN0dmVyc29uX21ham9yIG1hY29zeF9wcm9kdWN0dmVyc2lvbl9taW5vciBtYW51ZmFjdHVyZXIgbWVtb3J5ZnJlZSBtZW1vcnlzaXplIG5ldG1hc2sgbWV0bWFza18gbmV0d29ya18gb3BlcmF0aW5nc3lzdGVtIG9wZXJhdGluZ3N5c3RlbW1hanJlbGVhc2Ugb3BlcmF0aW5nc3lzdGVtcmVsZWFzZSBvc2ZhbWlseSBwYXJ0aXRpb25zIHBhdGggcGh5c2ljYWxwcm9jZXNzb3Jjb3VudCBwcm9jZXNzb3IgcHJvY2Vzc29yY291bnQgcHJvZHVjdG5hbWUgcHMgcHVwcGV0dmVyc2lvbiBydWJ5c2l0ZWRpciBydWJ5dmVyc2lvbiBzZWxpbnV4IHNlbGludXhfY29uZmlnX21vZGUgc2VsaW51eF9jb25maWdfcG9saWN5IHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfZW5mb3JjZWQgc2VsaW51eF9wb2xpY3l2ZXJzaW9uIHNlcmlhbG51bWJlciBzcF8gc3NoZHNha2V5IHNzaGVjZHNha2V5IHNzaHJzYWtleSBzd2FwZW5jcnlwdGVkIHN3YXBmcmVlIHN3YXBzaXplIHRpbWV6b25lIHR5cGUgdW5pcXVlaWQgdXB0aW1lIHVwdGltZV9kYXlzIHVwdGltZV9ob3VycyB1cHRpbWVfc2Vjb25kcyB1dWlkIHZpcnR1YWwgdmxhbnMgeGVuZG9tYWlucyB6ZnNfdmVyc2lvbiB6b25lbmFlIHpvbmVzIHpwb29sX3ZlcnNpb24ifSxuPWUuQ09NTUVOVCgiIyIsIiQiKSxyPWUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOiIoW0EtWmEtel9dfDo6KShcXHd8OjopKiJ9KSxvPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiXFwkKFtBLVphLXpfXXw6OikoXFx3fDo6KSoifSxzPXtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxvXSx2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi99XX07cmV0dXJue2FsaWFzZXM6WyJwcCJdLGNvbnRhaW5zOltuLG8scyx7YmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoiXFx7fDsiLGlsbGVnYWw6Lz0vLGNvbnRhaW5zOltyLG5dfSx7YmVnaW5LZXl3b3JkczoiZGVmaW5lIixlbmQ6L1x7Lyxjb250YWluczpbe2NsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46ZS5JREVOVF9SRSxlbmRzUGFyZW50OiEwfV19LHtiZWdpbjplLklERU5UX1JFKyJcXHMrXFx7IixyZXR1cm5CZWdpbjohMCxlbmQ6L1xTLyxjb250YWluczpbe2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46ZS5JREVOVF9SRX0se2JlZ2luOi9cey8sZW5kOi9cfS8sa2V5d29yZHM6dCxyZWxldmFuY2U6MCxjb250YWluczpbcyxuLHtiZWdpbjoiW2EtekEtWl9dK1xccyo9PiIscmV0dXJuQmVnaW46ITAsZW5kOiI9PiIsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHIiLGJlZ2luOmUuSURFTlRfUkV9XX0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscmVsZXZhbmNlOjB9LG9dfV0scmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHVyZWJhc2ljLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOicofik/IicsZW5kOiciJyxpbGxlZ2FsOiJcXG4ifSxuPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IiNbYS16QS1aX11cXHcqXFwkPyJ9O3JldHVybnthbGlhc2VzOlsicGIiLCJwYmkiXSxrZXl3b3JkczoiQW5kIEFzIEJyZWFrIENhbGxEZWJ1Z2dlciBDYXNlIENvbXBpbGVyQ2FzZSBDb21waWxlckRlZmF1bHQgQ29tcGlsZXJFbHNlIENvbXBpbGVyRW5kSWYgQ29tcGlsZXJFbmRTZWxlY3QgQ29tcGlsZXJFcnJvciBDb21waWxlcklmIENvbXBpbGVyU2VsZWN0IENvbnRpbnVlIERhdGEgRGF0YVNlY3Rpb24gRW5kRGF0YVNlY3Rpb24gRGVidWcgRGVidWdMZXZlbCBEZWZhdWx0IERlZmluZSBEaW0gRGlzYWJsZUFTTSBEaXNhYmxlRGVidWdnZXIgRGlzYWJsZUV4cGxpY2l0IEVsc2UgRWxzZUlmIEVuYWJsZUFTTSBFbmFibGVEZWJ1Z2dlciBFbmFibGVFeHBsaWNpdCBFbmQgRW5kRW51bWVyYXRpb24gRW5kSWYgRW5kSW1wb3J0IEVuZEludGVyZmFjZSBFbmRNYWNybyBFbmRQcm9jZWR1cmUgRW5kU2VsZWN0IEVuZFN0cnVjdHVyZSBFbmRTdHJ1Y3R1cmVVbmlvbiBFbmRXaXRoIEVudW1lcmF0aW9uIEV4dGVuZHMgRmFrZVJldHVybiBGb3IgTmV4dCBGb3JFYWNoIEZvckV2ZXIgR2xvYmFsIEdvc3ViIEdvdG8gSWYgSW1wb3J0IEltcG9ydEMgSW5jbHVkZUJpbmFyeSBJbmNsdWRlRmlsZSBJbmNsdWRlUGF0aCBJbnRlcmZhY2UgTWFjcm8gTmV3TGlzdCBOb3QgT3IgUHJvY2VkdXJlUmV0dXJuIFByb3RlY3RlZCBQcm90b3R5cGUgUHJvdG90eXBlQyBSZWFkIFJlRGltIFJlcGVhdCBVbnRpbCBSZXN0b3JlIFJldHVybiBTZWxlY3QgU2hhcmVkIFN0YXRpYyBTdGVwIFN0cnVjdHVyZSBTdHJ1Y3R1cmVVbmlvbiBTd2FwIFRvIFdlbmQgV2hpbGUgV2l0aCBYSW5jbHVkZUZpbGUgWE9yIFByb2NlZHVyZSBQcm9jZWR1cmVDIFByb2NlZHVyZUNETEwgUHJvY2VkdXJlRExMIERlY2xhcmUgRGVjbGFyZUMgRGVjbGFyZUNETEwgRGVjbGFyZURMTCIsY29udGFpbnM6W2UuQ09NTUVOVCgiOyIsIiQiLHtyZWxldmFuY2U6MH0pLHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiXFxiKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT9cXGIiLGVuZDoiXFwoIixleGNsdWRlRW5kOiEwLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT8iLGV4Y2x1ZGVFbmQ6ITB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJcXC5cXHcqIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx0LG5dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9weXRob24uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIGFzeW5jIGF3YWl0IG5vbmxvY2FsfDEwIixidWlsdF9pbjoiRWxsaXBzaXMgTm90SW1wbGVtZW50ZWQiLGxpdGVyYWw6IkZhbHNlIE5vbmUgVHJ1ZSJ9LG49e2NsYXNzTmFtZToibWV0YSIsYmVnaW46L14oPj4+fFwuXC5cLikgL30scj17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46L1x7LyxlbmQ6L1x9LyxrZXl3b3Jkczp0LGlsbGVnYWw6LyMvfSxvPXtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0sdmFyaWFudHM6W3tiZWdpbjovKHV8Yik/cj8nJycvLGVuZDovJycnLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG5dLHJlbGV2YW5jZToxMH0se2JlZ2luOi8odXxiKT9yPyIiIi8sZW5kOi8iIiIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl0scmVsZXZhbmNlOjEwfSx7YmVnaW46LyhmcnxyZnxmKScnJy8sZW5kOi8nJycvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbixyXX0se2JlZ2luOi8oZnJ8cmZ8ZikiIiIvLGVuZDovIiIiLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG4scl19LHtiZWdpbjovKHV8cnx1ciknLyxlbmQ6LycvLHJlbGV2YW5jZToxMH0se2JlZ2luOi8odXxyfHVyKSIvLGVuZDovIi8scmVsZXZhbmNlOjEwfSx7YmVnaW46LyhifGJyKScvLGVuZDovJy99LHtiZWdpbjovKGJ8YnIpIi8sZW5kOi8iL30se2JlZ2luOi8oZnJ8cmZ8ZiknLyxlbmQ6LycvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscl19LHtiZWdpbjovKGZyfHJmfGYpIi8sZW5kOi8iLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHJdfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV19LHM9e2NsYXNzTmFtZToibnVtYmVyIixyZWxldmFuY2U6MCx2YXJpYW50czpbe2JlZ2luOmUuQklOQVJZX05VTUJFUl9SRSsiW2xMakpdPyJ9LHtiZWdpbjoiXFxiKDBvWzAtN10rKVtsTGpKXT8ifSx7YmVnaW46ZS5DX05VTUJFUl9SRSsiW2xMakpdPyJ9XX0saT17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sY29udGFpbnM6WyJzZWxmIixuLHMsb119O3JldHVybiByLmNvbnRhaW5zPVtvLHMsbl0se2FsaWFzZXM6WyJweSIsImd5cCIsImlweXRob24iXSxrZXl3b3Jkczp0LGlsbGVnYWw6Lyg8XC98LT58XD8pfD0+Lyxjb250YWluczpbbixzLG8sZS5IQVNIX0NPTU1FTlRfTU9ERSx7dmFyaWFudHM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJkZWYifSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MifV0sZW5kOi86LyxpbGxlZ2FsOi9bJHs9O1xuLF0vLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERSxpLHtiZWdpbjovLT4vLGVuZHNXaXRoUGFyZW50OiEwLGtleXdvcmRzOiJOb25lIn1dfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovXltcdCBdKkAvLGVuZDovJC99LHtiZWdpbjovXGIocHJpbnR8ZXhlYylcKC99XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJrIiwia2RiIl0sa2V5d29yZHM6e2tleXdvcmQ6ImRvIHdoaWxlIHNlbGVjdCBkZWxldGUgYnkgdXBkYXRlIGZyb20iLGxpdGVyYWw6IjBiIDFiIixidWlsdF9pbjoibmVnIG5vdCBudWxsIHN0cmluZyByZWNpcHJvY2FsIGZsb29yIGNlaWxpbmcgc2lnbnVtIG1vZCB4YmFyIHhsb2cgYW5kIG9yIGVhY2ggc2NhbiBvdmVyIHByaW9yIG1tdSBsc3EgaW52IG1kNSBsdGltZSBndGltZSBjb3VudCBmaXJzdCB2YXIgZGV2IG1lZCBjb3YgY29yIGFsbCBhbnkgcmFuZCBzdW1zIHByZHMgbWlucyBtYXhzIGZpbGxzIGRlbHRhcyByYXRpb3MgYXZncyBkaWZmZXIgcHJldiBuZXh0IHJhbmsgcmV2ZXJzZSBpYXNjIGlkZXNjIGFzYyBkZXNjIG1zdW0gbWNvdW50IG1hdmcgbWRldiB4cmFuayBtbWluIG1tYXggeHByZXYgcm90YXRlIGRpc3RpbmN0IGdyb3VwIHdoZXJlIGZsaXAgdHlwZSBrZXkgdGlsIGdldCB2YWx1ZSBhdHRyIGN1dCBzZXQgdXBzZXJ0IHJhemUgdW5pb24gaW50ZXIgZXhjZXB0IGNyb3NzIHN2IHZzIHN1Ymxpc3QgZW5saXN0IHJlYWQwIHJlYWQxIGhvcGVuIGhjbG9zZSBoZGVsIGhzeW0gaGNvdW50IHBlYWNoIHN5c3RlbSBsdHJpbSBydHJpbSB0cmltIGxvd2VyIHVwcGVyIHNzciB2aWV3IHRhYmxlcyB2aWV3cyBjb2xzIHhjb2xzIGtleXMgeGtleSB4Y29sIHhhc2MgeGRlc2MgZmtleXMgbWV0YSBsaiBhaiBhajAgaWogcGogYXNvZiB1aiB3dyB3aiB3ajEgZmJ5IHhncm91cCB1bmdyb3VwIGVqIHNhdmUgbG9hZCByc2F2ZSBybG9hZCBzaG93IGNzdiBwYXJzZSBldmFsIG1pbiBtYXggYXZnIHdhdmcgd3N1bSBzaW4gY29zIHRhbiBzdW0iLHR5cGU6ImBmbG9hdCBgZG91YmxlIGludCBgdGltZXN0YW1wIGB0aW1lc3BhbiBgZGF0ZXRpbWUgYHRpbWUgYGJvb2xlYW4gYHN5bWJvbCBgY2hhciBgYnl0ZSBgc2hvcnQgYGxvbmcgYHJlYWwgYG1vbnRoIGBkYXRlIGBtaW51dGUgYHNlY29uZCBgZ3VpZCJ9LGxleGVtZXM6LyhgPylbQS1aYS16MC05X10rXGIvLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xbWwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJpbiBvZiBvbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QgZXhwb3J0IHN1cGVyIGRlYnVnZ2VyIGFzIGFzeW5jIGF3YWl0IGltcG9ydCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkiLGJ1aWx0X2luOiJldmFsIGlzRmluaXRlIGlzTmFOIHBhcnNlRmxvYXQgcGFyc2VJbnQgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCBlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciBFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgVHlwZUVycm9yIFVSSUVycm9yIE51bWJlciBNYXRoIERhdGUgU3RyaW5nIFJlZ0V4cCBBcnJheSBGbG9hdDMyQXJyYXkgRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgbW9kdWxlIGNvbnNvbGUgd2luZG93IGRvY3VtZW50IFN5bWJvbCBTZXQgTWFwIFdlYWtTZXQgV2Vha01hcCBQcm94eSBSZWZsZWN0IEJlaGF2aW9yIGJvb2wgY29sb3IgY29vcmRpbmF0ZSBkYXRlIGRvdWJsZSBlbnVtZXJhdGlvbiBmb250IGdlb2NpcmNsZSBnZW9yZWN0YW5nbGUgZ2Vvc2hhcGUgaW50IGxpc3QgbWF0cml4NHg0IHBhcmVudCBwb2ludCBxdWF0ZXJuaW9uIHJlYWwgcmVjdCBzaXplIHN0cmluZyB1cmwgdmFyaWFudCB2ZWN0b3IyZCB2ZWN0b3IzZCB2ZWN0b3I0ZFByb21pc2UifSxuPSJbYS16QS1aX11bYS16QS1aMC05XFwuX10qIixyPXtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXGJwcm9wZXJ0eVxcYiIsc3RhcnRzOntjbGFzc05hbWU6InN0cmluZyIsZW5kOiIoOnw9fDt8LHwvL3wvXFwqfCQpIixyZXR1cm5FbmQ6ITB9fSxvPXtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXGJzaWduYWxcXGIiLHN0YXJ0czp7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZDoiKFxcKHw6fD18O3wsfC8vfC9cXCp8JCkiLHJldHVybkVuZDohMH19LHM9e2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiXFxiaWRcXHMqOiIsc3RhcnRzOntjbGFzc05hbWU6InN0cmluZyIsZW5kOm4scmV0dXJuRW5kOiExfX0saT17YmVnaW46bisiXFxzKjoiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOm4sZW5kOiJcXHMqOiIsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MH1dLHJlbGV2YW5jZTowfSxhPXtiZWdpbjpuKyJcXHMqeyIsZW5kOiJ7IixyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46bn0pXX07cmV0dXJue2FsaWFzZXM6WyJxdCJdLGNhc2VfaW5zZW5zaXRpdmU6ITEsa2V5d29yZHM6dCxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46L15ccypbJyJddXNlIChzdHJpY3R8YXNtKVsnIl0vfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUse2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLGVuZDoiXFx9In1dfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwW2JCXVswMV0rKSJ9LHtiZWdpbjoiXFxiKDBbb09dWzAtN10rKSJ9LHtiZWdpbjplLkNfTlVNQkVSX1JFfV0scmVsZXZhbmNlOjB9LHtiZWdpbjoiKCIrZS5SRV9TVEFSVEVSU19SRSsifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsa2V5d29yZHM6InJldHVybiB0aHJvdyBjYXNlIixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5SRUdFWFBfTU9ERSx7YmVnaW46LzwvLGVuZDovPlxzKlspO1xdXS8scmVsZXZhbmNlOjAsc3ViTGFuZ3VhZ2U6InhtbCJ9XSxyZWxldmFuY2U6MH0sbyxyLHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOi9cey8sZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX1dLGlsbGVnYWw6L1xbfCUvfSx7YmVnaW46IlxcLiIrZS5JREVOVF9SRSxyZWxldmFuY2U6MH0scyxpLGFdLGlsbGVnYWw6LyMvfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iKFthLXpBLVpdfFxcLlthLXpBLVouXSlbYS16QS1aMC05Ll9dKiI7cmV0dXJue2NvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtiZWdpbjp0LGxleGVtZXM6dCxrZXl3b3Jkczp7a2V5d29yZDoiZnVuY3Rpb24gaWYgaW4gYnJlYWsgbmV4dCByZXBlYXQgZWxzZSBmb3IgcmV0dXJuIHN3aXRjaCB3aGlsZSB0cnkgdHJ5Q2F0Y2ggc3RvcCB3YXJuaW5nIHJlcXVpcmUgbGlicmFyeSBhdHRhY2ggZGV0YWNoIHNvdXJjZSBzZXRNZXRob2Qgc2V0R2VuZXJpYyBzZXRHcm91cEdlbmVyaWMgc2V0Q2xhc3MgLi4uIixsaXRlcmFsOiJOVUxMIE5BIFRSVUUgRkFMU0UgVCBGIEluZiBOYU4gTkFfaW50ZWdlcl98MTAgTkFfcmVhbF98MTAgTkFfY2hhcmFjdGVyX3wxMCBOQV9jb21wbGV4X3wxMCJ9LHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxiIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkKyg/OltlRV1bK1xcLV0/XFxkKik/TFxcYiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcZCtcXC4oPyFcXGQpKD86aVxcYik/IixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXC5cXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIscmVsZXZhbmNlOjB9LHtiZWdpbjoiYCIsZW5kOiJgIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbe2JlZ2luOiciJyxlbmQ6JyInfSx7YmVnaW46IiciLGVuZDoiJyJ9XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yZWFzb25tbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9In4/W2EteiRfXVswLTlhLXpBLVokX10qIixuPSJgP1tBLVokX11bMC05YS16QS1aJF9dKiIscj0iKCIrZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIlxcIitlfSkuam9pbigiIil9KS5qb2luKCJ8Iil9KFsifHwiLCImJiIsIisrIiwiKioiLCIrLiIsIioiLCIvIiwiKi4iLCIvLiIsIi4uLiIsInw+Il0pKyJ8PT18PT09KSIsbz0iXFxzKyIrcisiXFxzKyIscz17a2V5d29yZDoiYW5kIGFzIGFzciBhc3NlcnQgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuYWxmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSBpbmhlcml0IGluaXRpYWxpemVybGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCBtb2QgbW9kdWxlIG11dGFibGUgbmV3IG5vbnJlY29iamVjdCBvZiBvcGVuIG9yIHByaXZhdGUgcmVjIHNpZyBzdHJ1Y3QgdGhlbiB0byB0cnkgdHlwZSB2YWwgdmlydHVhbCB3aGVuIHdoaWxlIHdpdGgiLGJ1aWx0X2luOiJhcnJheSBib29sIGJ5dGVzIGNoYXIgZXhufDUgZmxvYXQgaW50IGludDMyIGludDY0IGxpc3QgbGF6eV90fDUgbmF0aXZlaW50fDUgcmVmIHN0cmluZyB1bml0ICIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSJ9LGk9IlxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98MFtvT11bMC03X10rW0xsbl0/fDBbYkJdWzAxX10rW0xsbl0/fFswLTldWzAtOV9dKihbTGxuXXwoXFwuWzAtOV9dKik/KFtlRV1bLStdP1swLTlfXSspPyk/KSIsYT17Y2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7YmVnaW46aX0se2JlZ2luOiJcXChcXC0iK2krIlxcKSJ9XX0sbD17Y2xhc3NOYW1lOiJvcGVyYXRvciIscmVsZXZhbmNlOjAsYmVnaW46cn0sdT1be2NsYXNzTmFtZToiaWRlbnRpZmllciIscmVsZXZhbmNlOjAsYmVnaW46dH0sbCxhXSxjPVtlLlFVT1RFX1NUUklOR19NT0RFLGwse2NsYXNzTmFtZToibW9kdWxlIixiZWdpbjoiXFxiIituLHJldHVybkJlZ2luOiEwLGVuZDoiLiIsY29udGFpbnM6W3tjbGFzc05hbWU6ImlkZW50aWZpZXIiLGJlZ2luOm4scmVsZXZhbmNlOjB9XX1dLGQ9W3tjbGFzc05hbWU6Im1vZHVsZSIsYmVnaW46IlxcYiIrbixyZXR1cm5CZWdpbjohMCxlbmQ6Ii4iLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJpZGVudGlmaWVyIixiZWdpbjpuLHJlbGV2YW5jZTowfV19XSxfPXtiZWdpbjp0LGVuZDoiKCx8XFxufFxcKSkiLHJlbGV2YW5jZTowLGNvbnRhaW5zOltsLHtjbGFzc05hbWU6InR5cGluZyIsYmVnaW46IjoiLGVuZDoiKCx8XFxuKSIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsY29udGFpbnM6ZH1dfSxwPXtjbGFzc05hbWU6ImZ1bmN0aW9uIixyZWxldmFuY2U6MCxrZXl3b3JkczpzLHZhcmlhbnRzOlt7YmVnaW46IlxccyhcXChcXC4/Lio/XFwpfCIrdCsiKVxccyo9PiIsZW5kOiJcXHMqPT4iLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46dH0se2JlZ2luOiJ+P1thLXokX11bMC05YS16QS1aJF9dKihzKjpzKlthLXokX11bMC05YS16JF9dKigocyooJz9bYS16JF9dWzAtOWEteiRfXSpzKigsJz9bYS16JF9dWzAtOWEteiRfXSopKik/cyopKT8pPyhzKjpzKlthLXokX11bMC05YS16JF9dKigocyooJz9bYS16JF9dWzAtOWEteiRfXSpzKigsJz9bYS16JF9dWzAtOWEteiRfXSopKik/cyopKT8pPyJ9LHtiZWdpbjovXChccypcKS99XX1dfSx7YmVnaW46Ilxcc1xcKFxcLj9bXjtcXHxdKlxcKVxccyo9PiIsZW5kOiJcXHM9PiIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIscmVsZXZhbmNlOjAsdmFyaWFudHM6W19dfV19LHtiZWdpbjoiXFwoXFwuXFxzIit0KyJcXClcXHMqPT4ifV19O2MucHVzaChwKTt2YXIgZj17Y2xhc3NOYW1lOiJjb25zdHJ1Y3RvciIsYmVnaW46bisiXFwoIixlbmQ6IlxcKSIsaWxsZWdhbDoiXFxuIixrZXl3b3JkczpzLGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFLGwse2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFxiIit0fV19LG09e2NsYXNzTmFtZToicGF0dGVybi1tYXRjaCIsYmVnaW46IlxcfCIscmV0dXJuQmVnaW46ITAsa2V5d29yZHM6cyxlbmQ6Ij0+IixyZWxldmFuY2U6MCxjb250YWluczpbZixsLHtyZWxldmFuY2U6MCxjbGFzc05hbWU6ImNvbnN0cnVjdG9yIixiZWdpbjpufV19LGg9e2NsYXNzTmFtZToibW9kdWxlLWFjY2VzcyIsa2V5d29yZHM6cyxyZXR1cm5CZWdpbjohMCx2YXJpYW50czpbe2JlZ2luOiJcXGIoIituKyJcXC4pKyIrdH0se2JlZ2luOiJcXGIoIituKyJcXC4pK1xcKCIsZW5kOiJcXCkiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltwLHtiZWdpbjoiXFwoIixlbmQ6IlxcKSIsc2tpcDohMH1dLmNvbmNhdChjKX0se2JlZ2luOiJcXGIoIituKyJcXC4pK3siLGVuZDoifSJ9XSxjb250YWluczpjfTtyZXR1cm4gZC5wdXNoKGgpLHthbGlhc2VzOlsicmUiXSxrZXl3b3JkczpzLGlsbGVnYWw6Iig6XFwtfDo9fFxcJHt8XFwrPSkiLGNvbnRhaW5zOltlLkNPTU1FTlQoIi9cXCoiLCJcXCovIix7aWxsZWdhbDoiXihcXCMsXFwvXFwvKSJ9KSx7Y2xhc3NOYW1lOiJjaGFyYWN0ZXIiLGJlZ2luOiInKFxcXFxbXiddK3xbXiddKSciLGlsbGVnYWw6IlxcbiIscmVsZXZhbmNlOjB9LGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46IlxcKFxcKSIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiJcXFtcXHwiLGVuZDoiXFx8XFxdIixyZWxldmFuY2U6MCxjb250YWluczp1fSx7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXFxbIixlbmQ6IlxcXSIscmVsZXZhbmNlOjAsY29udGFpbnM6dX0sZix7Y2xhc3NOYW1lOiJvcGVyYXRvciIsYmVnaW46byxpbGxlZ2FsOiJcXC1cXC0+IixyZWxldmFuY2U6MH0sYSxlLkNfTElORV9DT01NRU5UX01PREUsbSxwLHtjbGFzc05hbWU6Im1vZHVsZS1kZWYiLGJlZ2luOiJcXGJtb2R1bGVcXHMrIit0KyJcXHMrIituKyJcXHMrPVxccyt7IixlbmQ6In0iLHJldHVybkJlZ2luOiEwLGtleXdvcmRzOnMscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6Im1vZHVsZSIscmVsZXZhbmNlOjAsYmVnaW46bn0se2JlZ2luOiJ7IixlbmQ6In0iLHNraXA6ITB9XS5jb25jYXQoYyl9LGhdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yaWIuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntrZXl3b3JkczoiQXJjaGl2ZVJlY29yZCBBcmVhTGlnaHRTb3VyY2UgQXRtb3NwaGVyZSBBdHRyaWJ1dGUgQXR0cmlidXRlQmVnaW4gQXR0cmlidXRlRW5kIEJhc2lzIEJlZ2luIEJsb2JieSBCb3VuZCBDbGlwcGluZyBDbGlwcGluZ1BsYW5lIENvbG9yIENvbG9yU2FtcGxlcyBDb25jYXRUcmFuc2Zvcm0gQ29uZSBDb29yZGluYXRlU3lzdGVtIENvb3JkU3lzVHJhbnNmb3JtIENyb3BXaW5kb3cgQ3VydmVzIEN5bGluZGVyIERlcHRoT2ZGaWVsZCBEZXRhaWwgRGV0YWlsUmFuZ2UgRGlzayBEaXNwbGFjZW1lbnQgRGlzcGxheSBFbmQgRXJyb3JIYW5kbGVyIEV4cG9zdXJlIEV4dGVyaW9yIEZvcm1hdCBGcmFtZUFzcGVjdFJhdGlvIEZyYW1lQmVnaW4gRnJhbWVFbmQgR2VuZXJhbFBvbHlnb24gR2VvbWV0cmljQXBwcm94aW1hdGlvbiBHZW9tZXRyeSBIaWRlciBIeXBlcmJvbG9pZCBJZGVudGl0eSBJbGx1bWluYXRlIEltYWdlciBJbnRlcmlvciBMaWdodFNvdXJjZSBNYWtlQ3ViZUZhY2VFbnZpcm9ubWVudCBNYWtlTGF0TG9uZ0Vudmlyb25tZW50IE1ha2VTaGFkb3cgTWFrZVRleHR1cmUgTWF0dGUgTW90aW9uQmVnaW4gTW90aW9uRW5kIE51UGF0Y2ggT2JqZWN0QmVnaW4gT2JqZWN0RW5kIE9iamVjdEluc3RhbmNlIE9wYWNpdHkgT3B0aW9uIE9yaWVudGF0aW9uIFBhcmFib2xvaWQgUGF0Y2ggUGF0Y2hNZXNoIFBlcnNwZWN0aXZlIFBpeGVsRmlsdGVyIFBpeGVsU2FtcGxlcyBQaXhlbFZhcmlhbmNlIFBvaW50cyBQb2ludHNHZW5lcmFsUG9seWdvbnMgUG9pbnRzUG9seWdvbnMgUG9seWdvbiBQcm9jZWR1cmFsIFByb2plY3Rpb24gUXVhbnRpemUgUmVhZEFyY2hpdmUgUmVsYXRpdmVEZXRhaWwgUmV2ZXJzZU9yaWVudGF0aW9uIFJvdGF0ZSBTY2FsZSBTY3JlZW5XaW5kb3cgU2hhZGluZ0ludGVycG9sYXRpb24gU2hhZGluZ1JhdGUgU2h1dHRlciBTaWRlcyBTa2V3IFNvbGlkQmVnaW4gU29saWRFbmQgU3BoZXJlIFN1YmRpdmlzaW9uTWVzaCBTdXJmYWNlIFRleHR1cmVDb29yZGluYXRlcyBUb3J1cyBUcmFuc2Zvcm0gVHJhbnNmb3JtQmVnaW4gVHJhbnNmb3JtRW5kIFRyYW5zZm9ybVBvaW50cyBUcmFuc2xhdGUgVHJpbUN1cnZlIFdvcmxkQmVnaW4gV29ybGRFbmQiLGlsbGVnYWw6IjwvIixjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNfTlVNQkVSX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb2JvY29uZi5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IlthLXpBLVotX11bXlxcbntdK1xceyIsbj17Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOi9bYS16QS1aLV9dKy8sZW5kOi9ccyo6LyxleGNsdWRlRW5kOiEwLHN0YXJ0czp7ZW5kOiI7IixyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9cLlthLXpBLVotX10rL30se2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46L1wob3B0aW9uYWxcKS99XX19O3JldHVybnthbGlhc2VzOlsiZ3JhcGgiLCJpbnN0YW5jZXMiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOiJpbXBvcnQiLGNvbnRhaW5zOlt7YmVnaW46Il5mYWNldCAiK3QsZW5kOiJ9IixrZXl3b3JkczoiZmFjZXQiLGNvbnRhaW5zOltuLGUuSEFTSF9DT01NRU5UX01PREVdfSx7YmVnaW46Il5cXHMqaW5zdGFuY2Ugb2YgIit0LGVuZDoifSIsa2V5d29yZHM6Im5hbWUgY291bnQgY2hhbm5lbHMgaW5zdGFuY2UtZGF0YSBpbnN0YW5jZS1zdGF0ZSBpbnN0YW5jZSBvZiIsaWxsZWdhbDovXFMvLGNvbnRhaW5zOlsic2VsZiIsbixlLkhBU0hfQ09NTUVOVF9NT0RFXX0se2JlZ2luOiJeIit0LGVuZDoifSIsY29udGFpbnM6W24sZS5IQVNIX0NPTU1FTlRfTU9ERV19LGUuSEFTSF9DT01NRU5UX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb3V0ZXJvcy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ImZvcmVhY2ggZG8gd2hpbGUgZm9yIGlmIGZyb20gdG8gc3RlcCBlbHNlIG9uLWVycm9yIGFuZCBvciBub3QgaW4iLG49InRydWUgZmFsc2UgeWVzIG5vIG5vdGhpbmcgbmlsIG51bGwiLHI9e2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiZWdpbjovXCRceyguKj8pfS99XX0sbz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscix7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46L1wkXCgvLGVuZDovXCkvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfV19LHM9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJy8sZW5kOi8nL307cmV0dXJue2FsaWFzZXM6WyJyb3V0ZXJvcyIsIm1pa3JvdGlrIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxsZXhlbWVzOi86P1tcdy1dKy8sa2V5d29yZHM6e2xpdGVyYWw6bixrZXl3b3JkOnQrIiA6Iit0LnNwbGl0KCIgIikuam9pbigiIDoiKSsiIDoiKyJnbG9iYWwgbG9jYWwgYmVlcCBkZWxheSBwdXQgbGVuIHR5cGVvZiBwaWNrIGxvZyB0aW1lIHNldCBmaW5kIGVudmlyb25tZW50IHRlcm1pbmFsIGVycm9yIGV4ZWN1dGUgcGFyc2UgcmVzb2x2ZSB0b2FycmF5IHRvYm9vbCB0b2lkIHRvaXAgdG9pcDYgdG9udW0gdG9zdHIgdG90aW1lIi5zcGxpdCgiICIpLmpvaW4oIiA6Iil9LGNvbnRhaW5zOlt7dmFyaWFudHM6W3tiZWdpbjovXkAvLGVuZDovJC99LHtiZWdpbjovXC9cKi8sZW5kOi9cKlwvL30se2JlZ2luOi8lJS8sZW5kOi8kL30se2JlZ2luOi9eJy8sZW5kOi8kL30se2JlZ2luOi9eXHMqXC9bXHctXSs9LyxlbmQ6LyQvfSx7YmVnaW46L1wvXC8vLGVuZDovJC99LHtiZWdpbjovXlxbXDwvLGVuZDovXD5cXSQvfSx7YmVnaW46LzxcLy8sZW5kOi8+L30se2JlZ2luOi9eZmFjZXQgLyxlbmQ6L1x9L30se2JlZ2luOiJeMVxcLlxcLihcXGQrKSQiLGVuZDovJC99XSxpbGxlZ2FsOi8uL30sZS5DT01NRU5UKCJeIyIsIiQiKSxvLHMscix7YmVnaW46L1tcdy1dK1w9KFteXHNce1x9XFtcXVwoXCldKykvLHJlbGV2YW5jZTowLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOi9bXj1dKy99LHtiZWdpbjovPS8sZW5kc1dpdGhQYXJlbnQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W28scyxyLHtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiJcXGIoIituLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIn0se2JlZ2luOi8oIlteIl0qInxbXlxzXHtcfVxbXF1dKykvfV19XX0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjovXCpbMC05YS1mQS1GXSsvfSx7YmVnaW46IlxcYigiKyJhZGQgcmVtb3ZlIGVuYWJsZSBkaXNhYmxlIHNldCBnZXQgcHJpbnQgZXhwb3J0IGVkaXQgZmluZCBydW4gZGVidWcgZXJyb3IgaW5mbyB3YXJuaW5nIi5zcGxpdCgiICIpLmpvaW4oInwiKSsiKShbXFxzWyhdfF0pIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToiYnVpbHRpbi1uYW1lIixiZWdpbjovXHcrL31dfSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsdmFyaWFudHM6W3tiZWdpbjoiKFxcLlxcLi98L3xcXHMpKCgiKyJ0cmFmZmljLWZsb3cgdHJhZmZpYy1nZW5lcmF0b3IgZmlyZXdhbGwgc2NoZWR1bGVyIGFhYSBhY2NvdW50aW5nIGFkZHJlc3MtbGlzdCBhZGRyZXNzIGFsaWduIGFyZWEgYmFuZHdpZHRoLXNlcnZlciBiZmQgYmdwIGJyaWRnZSBjbGllbnQgY2xvY2sgY29tbXVuaXR5IGNvbmZpZyBjb25uZWN0aW9uIGNvbnNvbGUgY3VzdG9tZXIgZGVmYXVsdCBkaGNwLWNsaWVudCBkaGNwLXNlcnZlciBkaXNjb3ZlcnkgZG5zIGUtbWFpbCBldGhlcm5ldCBmaWx0ZXIgZmlyZXdhbGwgZmlybXdhcmUgZ3BzIGdyYXBoaW5nIGdyb3VwIGhhcmR3YXJlIGhlYWx0aCBob3RzcG90IGlkZW50aXR5IGlnbXAtcHJveHkgaW5jb21pbmcgaW5zdGFuY2UgaW50ZXJmYWNlIGlwIGlwc2VjIGlwdjYgaXJxIGwydHAtc2VydmVyIGxjZCBsZHAgbG9nZ2luZyBtYWMtc2VydmVyIG1hYy13aW5ib3ggbWFuZ2xlIG1hbnVhbCBtaXJyb3IgbW1lIG1wbHMgbmF0IG5kIG5laWdoYm9yIG5ldHdvcmsgbm90ZSBudHAgb3NwZiBvc3BmLXYzIG92cG4tc2VydmVyIHBhZ2UgcGVlciBwaW0gcGluZyBwb2xpY3kgcG9vbCBwb3J0IHBwcCBwcHBvZS1jbGllbnQgcHB0cC1zZXJ2ZXIgcHJlZml4IHByb2ZpbGUgcHJvcG9zYWwgcHJveHkgcXVldWUgcmFkaXVzIHJlc291cmNlIHJpcCByaXBuZyByb3V0ZSByb3V0aW5nIHNjcmVlbiBzY3JpcHQgc2VjdXJpdHktcHJvZmlsZXMgc2VydmVyIHNlcnZpY2Ugc2VydmljZS1wb3J0IHNldHRpbmdzIHNoYXJlcyBzbWIgc21zIHNuaWZmZXIgc25tcCBzbm9vcGVyIHNvY2tzIHNzdHAtc2VydmVyIHN5c3RlbSB0b29sIHRyYWNraW5nIHR5cGUgdXBncmFkZSB1cG5wIHVzZXItbWFuYWdlciB1c2VycyB1c2VyIHZsYW4gc2VjcmV0IHZycnAgd2F0Y2hkb2cgd2ViLWFjY2VzcyB3aXJlbGVzcyBwcHRwIHBwcG9lIGxhbiB3YW4gbGF5ZXI3LXByb3RvY29sIGxlYXNlIHNpbXBsZSByYXciLnNwbGl0KCIgIikuam9pbigifCIpKyIpOz9cXHMpKyIscmVsZXZhbmNlOjEwfSx7YmVnaW46L1wuXC4vfV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnNsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6ImZsb2F0IGNvbG9yIHBvaW50IG5vcm1hbCB2ZWN0b3IgbWF0cml4IHdoaWxlIGZvciBpZiBkbyByZXR1cm4gZWxzZSBicmVhayBleHRlcm4gY29udGludWUiLGJ1aWx0X2luOiJhYnMgYWNvcyBhbWJpZW50IGFyZWEgYXNpbiBhdGFuIGF0bW9zcGhlcmUgYXR0cmlidXRlIGNhbGN1bGF0ZW5vcm1hbCBjZWlsIGNlbGxub2lzZSBjbGFtcCBjb21wIGNvbmNhdCBjb3MgZGVncmVlcyBkZXB0aCBEZXJpdiBkaWZmdXNlIGRpc3RhbmNlIER1IER2IGVudmlyb25tZW50IGV4cCBmYWNlZm9yd2FyZCBmaWx0ZXJzdGVwIGZsb29yIGZvcm1hdCBmcmVzbmVsIGluY2lkZW50IGxlbmd0aCBsaWdodHNvdXJjZSBsb2cgbWF0Y2ggbWF4IG1pbiBtb2Qgbm9pc2Ugbm9ybWFsaXplIG50cmFuc2Zvcm0gb3Bwb3NpdGUgb3B0aW9uIHBob25nIHBub2lzZSBwb3cgcHJpbnRmIHB0bGluZWQgcmFkaWFucyByYW5kb20gcmVmbGVjdCByZWZyYWN0IHJlbmRlcmluZm8gcm91bmQgc2V0Y29tcCBzZXR4Y29tcCBzZXR5Y29tcCBzZXR6Y29tcCBzaGFkb3cgc2lnbiBzaW4gc21vb3Roc3RlcCBzcGVjdWxhciBzcGVjdWxhcmJyZGYgc3BsaW5lIHNxcnQgc3RlcCB0YW4gdGV4dHVyZSB0ZXh0dXJlaW5mbyB0cmFjZSB0cmFuc2Zvcm0gdnRyYW5zZm9ybSB4Y29tcCB5Y29tcCB6Y29tcCJ9LGlsbGVnYWw6IjwvIixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQifSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3Jkczoic3VyZmFjZSBkaXNwbGFjZW1lbnQgbGlnaHQgdm9sdW1lIGltYWdlciIsZW5kOiJcXCgifSx7YmVnaW5LZXl3b3JkczoiaWxsdW1pbmF0ZSBpbGx1bWluYW5jZSBnYXRoZXIiLGVuZDoiXFwoIn1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWJ5LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyIsbj17a2V5d29yZDoiYW5kIHRoZW4gZGVmaW5lZCBtb2R1bGUgaW4gcmV0dXJuIHJlZG8gaWYgQkVHSU4gcmV0cnkgZW5kIGZvciBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBlbHNlIGJyZWFrIHVuZGVmIG5vdCBzdXBlciBjbGFzcyBjYXNlIHJlcXVpcmUgeWllbGQgYWxpYXMgd2hpbGUgZW5zdXJlIGVsc2lmIG9yIGluY2x1ZGUgYXR0cl9yZWFkZXIgYXR0cl93cml0ZXIgYXR0cl9hY2Nlc3NvciIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBuaWwifSxyPXtjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46IkBbQS1aYS16XSsifSxvPXtiZWdpbjoiIzwiLGVuZDoiPiJ9LHM9W2UuQ09NTUVOVCgiIyIsIiQiLHtjb250YWluczpbcl19KSxlLkNPTU1FTlQoIl5cXD1iZWdpbiIsIl5cXD1lbmQiLHtjb250YWluczpbcl0scmVsZXZhbmNlOjEwfSksZS5DT01NRU5UKCJeX19FTkRfXyIsIlxcbiQiKV0saT17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IiNcXHsiLGVuZDoifSIsa2V5d29yZHM6bn0sYT17Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsaV0sdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi8iLyxlbmQ6LyIvfSx7YmVnaW46L2AvLGVuZDovYC99LHtiZWdpbjoiJVtxUXdXeF0/XFwoIixlbmQ6IlxcKSJ9LHtiZWdpbjoiJVtxUXdXeF0/XFxbIixlbmQ6IlxcXSJ9LHtiZWdpbjoiJVtxUXdXeF0/eyIsZW5kOiJ9In0se2JlZ2luOiIlW3FRd1d4XT88IixlbmQ6Ij4ifSx7YmVnaW46IiVbcVF3V3hdPy8iLGVuZDoiLyJ9LHtiZWdpbjoiJVtxUXdXeF0/JSIsZW5kOiIlIn0se2JlZ2luOiIlW3FRd1d4XT8tIixlbmQ6Ii0ifSx7YmVnaW46IiVbcVF3V3hdP1xcfCIsZW5kOiJcXHwifSx7YmVnaW46L1xCXD8oXFxcZHsxLDN9fFxceFtBLUZhLWYwLTldezEsMn18XFx1W0EtRmEtZjAtOV17NH18XFw/XFMpXGIvfSx7YmVnaW46Lzw8KC0/KVx3KyQvLGVuZDovXlxzKlx3KyQvfV19LGw9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoIixlbmQ6IlxcKSIsZW5kc1BhcmVudDohMCxrZXl3b3JkczpufSx1PVthLG8se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIG1vZHVsZSIsZW5kOiIkfDsiLGlsbGVnYWw6Lz0vLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8ifSkse2JlZ2luOiI8XFxzKiIsY29udGFpbnM6W3tiZWdpbjoiKCIrZS5JREVOVF9SRSsiOjopPyIrZS5JREVOVF9SRX1dfV0uY29uY2F0KHMpfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZGVmIixlbmQ6IiR8OyIsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOnR9KSxsXS5jb25jYXQocyl9LHtiZWdpbjplLklERU5UX1JFKyI6OiJ9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyIoXFwhfFxcPyk/OiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IjooPyFcXHMpIixjb250YWluczpbYSx7YmVnaW46dH1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyZWxldmFuY2U6MH0se2JlZ2luOiIoXFwkXFxXKXwoKFxcJHxcXEBcXEA/KShcXHcrKSkifSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cfC8sZW5kOi9cfC8sa2V5d29yZHM6bn0se2JlZ2luOiIoIitlLlJFX1NUQVJURVJTX1JFKyJ8dW5sZXNzKVxccyoiLGtleXdvcmRzOiJ1bmxlc3MiLGNvbnRhaW5zOltvLHtjbGFzc05hbWU6InJlZ2V4cCIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxpXSxpbGxlZ2FsOi9cbi8sdmFyaWFudHM6W3tiZWdpbjoiLyIsZW5kOiIvW2Etel0qIn0se2JlZ2luOiIlcnsiLGVuZDoifVthLXpdKiJ9LHtiZWdpbjoiJXJcXCgiLGVuZDoiXFwpW2Etel0qIn0se2JlZ2luOiIlciEiLGVuZDoiIVthLXpdKiJ9LHtiZWdpbjoiJXJcXFsiLGVuZDoiXFxdW2Etel0qIn1dfV0uY29uY2F0KHMpLHJlbGV2YW5jZTowfV0uY29uY2F0KHMpO2kuY29udGFpbnM9dSxsLmNvbnRhaW5zPXU7dmFyIGM9W3tiZWdpbjovXlxzKj0+LyxzdGFydHM6e2VuZDoiJCIsY29udGFpbnM6dX19LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeKFs+P10+fFtcXHcjXStcXChcXHcrXFwpOlxcZCs6XFxkKz58KFxcdystKT9cXGQrXFwuXFxkK1xcLlxcZChwXFxkKyk/W14+XSs+KSIsc3RhcnRzOntlbmQ6IiQiLGNvbnRhaW5zOnV9fV07cmV0dXJue2FsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGtleXdvcmRzOm4saWxsZWdhbDovXC9cKi8sY29udGFpbnM6cy5jb25jYXQoYykuY29uY2F0KHUpfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWxlc2xhbmd1YWdlLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6IkJJTExfUEVSSU9EIEJJTExfU1RBUlQgQklMTF9TVE9QIFJTX0VGRkVDVElWRV9TVEFSVCBSU19FRkZFQ1RJVkVfU1RPUCBSU19KVVJJU19DT0RFIFJTX09QQ09fQ09ERSBJTlREQUREQVRUUklCVVRFfDUgSU5UREFERFZNU0d8NSBJTlREQkxPQ0tPUHw1IElOVERCTE9DS09QTkF8NSBJTlREQ0xPU0V8NSBJTlREQ09VTlR8NSBJTlREQ09VTlRTVEFUVVNDT0RFfDUgSU5URENSRUFURU1BU0t8NSBJTlREQ1JFQVRFREFZTUFTS3w1IElOVERDUkVBVEVGQUNUT1JNQVNLfDUgSU5URENSRUFURUhBTkRMRXw1IElOVERDUkVBVEVPVkVSUklERURBWU1BU0t8NSBJTlREQ1JFQVRFT1ZFUlJJREVNQVNLfDUgSU5URENSRUFURVNUQVRVU0NPREVNQVNLfDUgSU5URENSRUFURVRPVVBFUklPRHw1IElOVERERUxFVEV8NSBJTlRERElQVEVTVHw1IElOVERFWFBPUlR8NSBJTlRER0VURVJST1JDT0RFfDUgSU5UREdFVEVSUk9STUVTU0FHRXw1IElOVERJU0VRVUFMfDUgSU5UREpPSU58NSBJTlRETE9BRHw1IElOVERMT0FEQUNUVUFMQ1VUfDUgSU5URExPQUREQVRFU3w1IElOVERMT0FESElTVHw1IElOVERMT0FETElTVHw1IElOVERMT0FETElTVERBVEVTfDUgSU5URExPQURMSVNURU5FUkdZfDUgSU5URExPQURMSVNUSElTVHw1IElOVERMT0FEUkVMQVRFRENIQU5ORUx8NSBJTlRETE9BRFNQfDUgSU5URExPQURTVEFHSU5HfDUgSU5URExPQURVT018NSBJTlRETE9BRFVPTURBVEVTfDUgSU5URExPQURVT01ISVNUfDUgSU5URExPQURWRVJTSU9OfDUgSU5URE9QRU58NSBJTlREUkVBREZJUlNUfDUgSU5URFJFQURORVhUfDUgSU5URFJFQ0NPVU5UfDUgSU5URFJFTEVBU0V8NSBJTlREUkVQTEFDRXw1IElOVERST0xMQVZHfDUgSU5URFJPTExQRUFLfDUgSU5URFNDQUxBUk9QfDUgSU5URFNDQUxFfDUgSU5URFNFVEFUVFJJQlVURXw1IElOVERTRVREU1RQQVJUSUNJUEFOVHw1IElOVERTRVRTVFJJTkd8NSBJTlREU0VUVkFMVUV8NSBJTlREU0VUVkFMVUVTVEFUVVN8NSBJTlREU0hJRlRTVEFSVFRJTUV8NSBJTlREU01PT1RIfDUgSU5URFNPUlR8NSBJTlREU1BJS0VURVNUfDUgSU5URFNVQlNFVHw1IElOVERUT1V8NSBJTlREVE9VUkVMRUFTRXw1IElOVERUT1VWQUxVRXw1IElOVERVUERBVEVTVEFUU3w1IElOVERWQUxVRXw1IFNUREVWIElOVERERUxFVEVFWHw1IElOVERMT0FERVhBQ1RVQUx8NSBJTlRETE9BREVYQ1VUfDUgSU5URExPQURFWERBVEVTfDUgSU5URExPQURFWHw1IElOVERMT0FERVhSRUxBVEVEQ0hBTk5FTHw1IElOVERTQVZFRVh8NSBNVkxPQUR8NSBNVkxPQURBQ0NUfDUgTVZMT0FEQUNDVERBVEVTfDUgTVZMT0FEQUNDVEhJU1R8NSBNVkxPQUREQVRFU3w1IE1WTE9BREhJU1R8NSBNVkxPQURMSVNUfDUgTVZMT0FETElTVERBVEVTfDUgTVZMT0FETElTVEhJU1R8NSBJRiBGT1IgTkVYVCBET05FIFNFTEVDVCBFTkQgQ0FMTCBBQk9SVCBDTEVBUiBDSEFOTkVMIEZBQ1RPUiBMSVNUIE5VTUJFUiBPVkVSUklERSBTRVQgV0VFSyBESVNUUklCVVRJT05OT0RFIEVMU0UgV0hFTiBUSEVOIE9USEVSV0lTRSBJRU5VTSBDU1YgSU5DTFVERSBMRUFWRSBSSURFUiBTQVZFIERFTEVURSBOT1ZBTFVFIFNFQ1RJT04gV0FSTiBTQVZFX1VQREFURSBERVRFUk1JTkFOVCBMQUJFTCBSRVBPUlQgUkVWRU5VRSBFQUNIIElOIEZST00gVE9UQUwgQ0hBUkdFIEJMT0NLIEFORCBPUiBDU1ZfRklMRSBSQVRFX0NPREUgQVVYSUxJQVJZX0RFTUFORCBVSURBQ0NPVU5UIFJTIEJJTExfUEVSSU9EX1NFTEVDVCBIT1VSU19QRVJfTU9OVEggSU5URF9FUlJPUl9TVE9QIFNFQVNPTl9TQ0hFRFVMRV9OQU1FIEFDQ09VTlRGQUNUT1IgQVJSQVlVUFBFUkJPVU5EIENBTExTVE9SRURQUk9DIEdFVEFET0NPTk5FQ1RJT04gR0VUQ09OTkVDVCBHRVREQVRBU09VUkNFIEdFVFFVQUxJRklFUiBHRVRVU0VSSUQgSEFTVkFMVUUgTElTVENPVU5UIExJU1RPUCBMSVNUVVBEQVRFIExJU1RWQUxVRSBQUk9SQVRFRkFDVE9SIFJTUFJPUkFURSBTRVRCSU5QQVRIIFNFVERCTU9OSVRPUiBXUV9PUEVOIEJJTExJTkdIT1VSUyBEQVRFIERBVEVGUk9NRkxPQVQgREFURVRJTUVGUk9NU1RSSU5HIERBVEVUSU1FVE9TVFJJTkcgREFURVRPRkxPQVQgREFZIERBWURJRkYgREFZTkFNRSBEQkRBVEVUSU1FIEhPVVIgTUlOVVRFIE1PTlRIIE1PTlRIRElGRiBNT05USEhPVVJTIE1PTlRITkFNRSBST1VORERBVEUgU0FNRVdFRUtEQVlMQVNUWUVBUiBTRUNPTkQgV0VFS0RBWSBXRUVLRElGRiBZRUFSIFlFQVJEQVkgWUVBUlNUUiBDT01QU1VNIEhJU1RDT1VOVCBISVNUTUFYIEhJU1RNSU4gSElTVE1JTk5aIEhJU1RWQUxVRSBNQVhOUkFOR0UgTUFYUkFOR0UgTUlOUkFOR0UgQ09NUElLVkEgQ09NUEtWQSBDT01QS1ZBUkZST01LUUtXIENPTVBMRiBJREFUVFIgRkxBRyBMRjJLVyBMRjJLV0ggTUFYS1cgUE9XRVJGQUNUT1IgUkVBRElORzJVU0FHRSBBVkdTRUFTT04gTUFYU0VBU09OIE1PTlRITFlNRVJHRSBTRUFTT05WQUxVRSBTVU1TRUFTT04gQUNDVFJFQUREQVRFUyBBQ0NUVEFCTEVMT0FEIENPTkZJR0FERCBDT05GSUdHRVQgQ1JFQVRFT0JKRUNUIENSRUFURVJFUE9SVCBFTUFJTENMSUVOVCBFWFBCTEtNRE1VU0FHRSBFWFBNRE1VU0FHRSBFWFBPUlRfVVNBR0UgRkFDVE9SSU5FRkZFQ1QgR0VUVVNFUlNQRUNJRklFRFNUT1AgSU5FRkZFQ1QgSVNIT0xJREFZIFJVTlJBVEUgU0FWRV9QUk9GSUxFIFNFVFJFUE9SVFRJVExFIFVTRVJFWElUIFdBVEZPUlJVTlJBVEUgVE8gVEFCTEUgQUNPUyBBU0lOIEFUQU4gQVRBTjIgQklUQU5EIENFSUwgQ09TIENPU0VDQU5UIENPU0ggQ09UQU5HRU5UIERJVlFVT1QgRElWUkVNIEVYUCBGQUJTIEZMT09SIEZNT0QgRlJFUE0gRlJFWFBOIExPRyBMT0cxMCBNQVggTUFYTiBNSU4gTUlOTlogTU9ERiBQT1cgUk9VTkQgUk9VTkQyVkFMVUUgUk9VTkRJTlQgU0VDQU5UIFNJTiBTSU5IIFNRUk9PVCBUQU4gVEFOSCBGTE9BVDJTVFJJTkcgRkxPQVQyU1RSSU5HTkMgSU5TVFIgTEVGVCBMRU4gTFRSSU0gTUlEIFJJR0hUIFJUUklNIFNUUklORyBTVFJJTkdOQyBUT0xPV0VSIFRPVVBQRVIgVFJJTSBOVU1EQVlTIFJFQURfREFURSBTVEFHSU5HIixidWlsdF9pbjoiSURFTlRJRklFUiBPUFRJT05TIFhNTF9FTEVNRU5UIFhNTF9PUCBYTUxfRUxFTUVOVF9PRiBET01ET0NDUkVBVEUgRE9NRE9DTE9BREZJTEUgRE9NRE9DTE9BRFhNTCBET01ET0NTQVZFRklMRSBET01ET0NHRVRST09UIERPTURPQ0FERFBJIERPTU5PREVHRVROQU1FIERPTU5PREVHRVRUWVBFIERPTU5PREVHRVRWQUxVRSBET01OT0RFR0VUQ0hJTERDVCBET01OT0RFR0VURklSU1RDSElMRCBET01OT0RFR0VUU0lCTElORyBET01OT0RFQ1JFQVRFQ0hJTERFTEVNRU5UIERPTU5PREVTRVRBVFRSSUJVVEUgRE9NTk9ERUdFVENISUxERUxFTUVOVENUIERPTU5PREVHRVRGSVJTVENISUxERUxFTUVOVCBET01OT0RFR0VUU0lCTElOR0VMRU1FTlQgRE9NTk9ERUdFVEFUVFJJQlVURUNUIERPTU5PREVHRVRBVFRSSUJVVEVJIERPTU5PREVHRVRBVFRSSUJVVEVCWU5BTUUgRE9NTk9ERUdFVEJZTkFNRSJ9LGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToibGl0ZXJhbCIsdmFyaWFudHM6W3tiZWdpbjoiI1xccytbYS16QS1aXFwgXFwuXSoiLHJlbGV2YW5jZTowfSx7YmVnaW46IiNbYS16QS1aXFwgXFwuXSsifV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnVzdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IihbdWldKDh8MTZ8MzJ8NjR8MTI4fHNpemUpfGYoMzJ8NjQpKT8iLG49ImRyb3AgaTggaTE2IGkzMiBpNjQgaTEyOCBpc2l6ZSB1OCB1MTYgdTMyIHU2NCB1MTI4IHVzaXplIGYzMiBmNjQgc3RyIGNoYXIgYm9vbCBCb3ggT3B0aW9uIFJlc3VsdCBTdHJpbmcgVmVjIENvcHkgU2VuZCBTaXplZCBTeW5jIERyb3AgRm4gRm5NdXQgRm5PbmNlIFRvT3duZWQgQ2xvbmUgRGVidWcgUGFydGlhbEVxIFBhcnRpYWxPcmQgRXEgT3JkIEFzUmVmIEFzTXV0IEludG8gRnJvbSBEZWZhdWx0IEl0ZXJhdG9yIEV4dGVuZCBJbnRvSXRlcmF0b3IgRG91YmxlRW5kZWRJdGVyYXRvciBFeGFjdFNpemVJdGVyYXRvciBTbGljZUNvbmNhdEV4dCBUb1N0cmluZyBhc3NlcnQhIGFzc2VydF9lcSEgYml0ZmxhZ3MhIGJ5dGVzISBjZmchIGNvbCEgY29uY2F0ISBjb25jYXRfaWRlbnRzISBkZWJ1Z19hc3NlcnQhIGRlYnVnX2Fzc2VydF9lcSEgZW52ISBwYW5pYyEgZmlsZSEgZm9ybWF0ISBmb3JtYXRfYXJncyEgaW5jbHVkZV9iaW4hIGluY2x1ZGVfc3RyISBsaW5lISBsb2NhbF9kYXRhX2tleSEgbW9kdWxlX3BhdGghIG9wdGlvbl9lbnYhIHByaW50ISBwcmludGxuISBzZWxlY3QhIHN0cmluZ2lmeSEgdHJ5ISB1bmltcGxlbWVudGVkISB1bnJlYWNoYWJsZSEgdmVjISB3cml0ZSEgd3JpdGVsbiEgbWFjcm9fcnVsZXMhIGFzc2VydF9uZSEgZGVidWdfYXNzZXJ0X25lISI7cmV0dXJue2FsaWFzZXM6WyJycyJdLGtleXdvcmRzOntrZXl3b3JkOiJhbGlnbm9mIGFzIGJlIGJveCBicmVhayBjb25zdCBjb250aW51ZSBjcmF0ZSBkbyBlbHNlIGVudW0gZXh0ZXJuIGZhbHNlIGZuIGZvciBpZiBpbXBsIGluIGxldCBsb29wIG1hdGNoIG1vZCBtdXQgb2Zmc2V0b2Ygb25jZSBwcml2IHByb2MgcHViIHB1cmUgcmVmIHJldHVybiBzZWxmIFNlbGYgc2l6ZW9mIHN0YXRpYyBzdHJ1Y3Qgc3VwZXIgdHJhaXQgdHJ1ZSB0eXBlIHR5cGVvZiB1bnNhZmUgdW5zaXplZCB1c2UgdmlydHVhbCB3aGlsZSB3aGVyZSB5aWVsZCBtb3ZlIGRlZmF1bHQiLGxpdGVyYWw6InRydWUgZmFsc2UgU29tZSBOb25lIE9rIEVyciIsYnVpbHRfaW46bn0sbGV4ZW1lczplLklERU5UX1JFKyIhPyIsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIse2NvbnRhaW5zOlsic2VsZiJdfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2JlZ2luOi9iPyIvLGlsbGVnYWw6bnVsbH0pLHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovcigjKikiKC58XG4pKj8iXDEoPyEjKS99LHtiZWdpbjovYj8nXFw/KHhcd3syfXx1XHd7NH18VVx3ezh9fC4pJy99XX0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjovJ1thLXpBLVpfXVthLXpBLVowLTlfXSovfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYjBiKFswMV9dKykiK3R9LHtiZWdpbjoiXFxiMG8oWzAtN19dKykiK3R9LHtiZWdpbjoiXFxiMHgoW0EtRmEtZjAtOV9dKykiK3R9LHtiZWdpbjoiXFxiKFxcZFtcXGRfXSooXFwuWzAtOV9dKyk/KFtlRV1bKy1dP1swLTlfXSspPykiK3R9XSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZuIixlbmQ6IihcXCh8PCkiLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiNcXCE/XFxbIixlbmQ6IlxcXSIsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEtc3RyaW5nIixiZWdpbjovIi8sZW5kOi8iL31dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoidHlwZSIsZW5kOiI7Iixjb250YWluczpbZS5pbmhlcml0KGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtlbmRzUGFyZW50OiEwfSldLGlsbGVnYWw6IlxcUyJ9LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJ0cmFpdCBlbnVtIHN0cnVjdCB1bmlvbiIsZW5kOiJ7Iixjb250YWluczpbZS5pbmhlcml0KGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtlbmRzUGFyZW50OiEwfSldLGlsbGVnYWw6IltcXHdcXGRdIn0se2JlZ2luOmUuSURFTlRfUkUrIjo6IixrZXl3b3Jkczp7YnVpbHRfaW46bn19LHtiZWdpbjoiLT4ifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Nhcy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJzYXMiLCJTQVMiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntsaXRlcmFsOiJudWxsIG1pc3NpbmcgX2FsbF8gX2F1dG9tYXRpY18gX2NoYXJhY3Rlcl8gX2luZmlsZV8gX25fIF9uYW1lXyBfbnVsbF8gX251bWVyaWNfIF91c2VyXyBfd2Vib3V0XyIsbWV0YToiZG8gaWYgdGhlbiBlbHNlIGVuZCB1bnRpbCB3aGlsZSBhYm9ydCBhcnJheSBhdHRyaWIgYnkgY2FsbCBjYXJkcyBjYXJkczQgY2F0bmFtZSBjb250aW51ZSBkYXRhbGluZXMgZGF0YWxpbmVzNCBkZWxldGUgZGVsaW0gZGVsaW1pdGVyIGRpc3BsYXkgZG0gZHJvcCBlbmRzYXMgZXJyb3IgZmlsZSBmaWxlbmFtZSBmb290bm90ZSBmb3JtYXQgZ290byBpbiBpbmZpbGUgaW5mb3JtYXQgaW5wdXQga2VlcCBsYWJlbCBsZWF2ZSBsZW5ndGggbGlibmFtZSBsaW5rIGxpc3QgbG9zdGNhcmQgbWVyZ2UgbWlzc2luZyBtb2RpZnkgb3B0aW9ucyBvdXRwdXQgb3V0IHBhZ2UgcHV0IHJlZGlyZWN0IHJlbW92ZSByZW5hbWUgcmVwbGFjZSByZXRhaW4gcmV0dXJuIHNlbGVjdCBzZXQgc2tpcCBzdGFydHNhcyBzdG9wIHRpdGxlIHVwZGF0ZSB3YWl0c2FzIHdoZXJlIHdpbmRvdyB4IHN5c3Rhc2sgYWRkIGFuZCBhbHRlciBhcyBjYXNjYWRlIGNoZWNrIGNyZWF0ZSBkZWxldGUgZGVzY3JpYmUgZGlzdGluY3QgZHJvcCBmb3JlaWduIGZyb20gZ3JvdXAgaGF2aW5nIGluZGV4IGluc2VydCBpbnRvIGluIGtleSBsaWtlIG1lc3NhZ2UgbW9kaWZ5IG1zZ3R5cGUgbm90IG51bGwgb24gb3Igb3JkZXIgcHJpbWFyeSByZWZlcmVuY2VzIHJlc2V0IHJlc3RyaWN0IHNlbGVjdCBzZXQgdGFibGUgdW5pcXVlIHVwZGF0ZSB2YWxpZGF0ZSB2aWV3IHdoZXJlIn0sY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9eXHMqKHByb2MgW1x3XGRfXSt8ZGF0YXxydW58cXVpdClbXHNcO10vfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46L1wmW2EtekEtWl9cJl1bYS16QS1aMC05X10qXC4/L30se2NsYXNzTmFtZToiZW1waGFzaXMiLGJlZ2luOi9eXHMqZGF0YWxpbmVzfGNhcmRzLio7LyxlbmQ6L15ccyo7XHMqJC99LHtjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjoiJShicXVvdGV8bnJicXVvdGV8Y21wcmVzfHFjbXByZXN8Y29tcHN0b3J8ZGF0YXR5cHxkaXNwbGF5fGRvfGVsc2V8ZW5kfGV2YWx8Z2xvYmFsfGdvdG98aWZ8aW5kZXh8aW5wdXR8a2V5ZGVmfGxhYmVsfGxlZnR8bGVuZ3RofGxldHxsb2NhbHxsb3djYXNlfG1hY3JvfG1lbmR8bnJicXVvdGV8bnJxdW90ZXxucnN0cnxwdXR8cWNtcHJlc3xxbGVmdHxxbG93Y2FzZXxxc2Nhbnxxc3Vic3RyfHFzeXNmdW5jfHF0cmltfHF1b3RlfHF1cGNhc2V8c2NhbnxzdHJ8c3Vic3RyfHN1cGVycXxzeXNjYWxsfHN5c2V2YWxmfHN5c2V4ZWN8c3lzZnVuY3xzeXNnZXR8c3lzbHB1dHxzeXNwcm9kfHN5c3JjfHN5c3JwdXR8dGhlbnx0b3x0cmltfHVucXVvdGV8dW50aWx8dXBjYXNlfHZlcmlmeXx3aGlsZXx3aW5kb3cpIn0se2NsYXNzTmFtZToibmFtZSIsYmVnaW46LyVbYS16QS1aX11bYS16QS1aXzAtOV0qL30se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IlteJV0oYWJzfGFkZHJ8YWlyeXxhcmNvc3xhcnNpbnxhdGFufGF0dHJjfGF0dHJufGJhbmR8YmV0YWludnxibHNoaWZ0fGJub3R8Ym9yfGJyc2hpZnR8YnhvcnxieXRlfGNkZnxjZWlsfGNleGlzdHxjaW52fGNsb3NlfGNub25jdHxjb2xsYXRlfGNvbXBibHxjb21wb3VuZHxjb21wcmVzc3xjb3N8Y29zaHxjc3N8Y3Vyb2JzfGN2fGRhY2NkYnxkYWNjZGJzbHxkYWNjc2x8ZGFjY3N5ZHxkYWNjdGFifGRhaXJ5fGRhdGV8ZGF0ZWp1bHxkYXRlcGFydHxkYXRldGltZXxkYXl8ZGNsb3NlfGRlcGRifGRlcGRic2x8ZGVwZGJzbHxkZXBzbHxkZXBzbHxkZXBzeWR8ZGVwc3lkfGRlcHRhYnxkZXB0YWJ8ZGVxdW90ZXxkaG1zfGRpZnxkaWdhbW1hfGRpbXxkaW5mb3xkbnVtfGRvcGVufGRvcHRuYW1lfGRvcHRudW18ZHJlYWR8ZHJvcG5vdGV8ZHNuYW1lfGVyZnxlcmZjfGV4aXN0fGV4cHxmYXBwZW5kfGZjbG9zZXxmY29sfGZkZWxldGV8ZmV0Y2h8ZmV0Y2hvYnN8ZmV4aXN0fGZnZXR8ZmlsZWV4aXN0fGZpbGVuYW1lfGZpbGVyZWZ8ZmluZm98ZmludnxmaXBuYW1lfGZpcG5hbWVsfGZpcHN0YXRlfGZsb29yfGZub25jdHxmbm90ZXxmb3Blbnxmb3B0bmFtZXxmb3B0bnVtfGZwb2ludHxmcG9zfGZwdXR8ZnJlYWR8ZnJld2luZHxmcmxlbnxmc2VwfGZ1enp8ZndyaXRlfGdhbWludnxnYW1tYXxnZXRvcHRpb258Z2V0dmFyY3xnZXR2YXJufGhib3VuZHxobXN8aG9zdGhlbHB8aG91cnxpYmVzc2VsfGluZGV4fGluZGV4Y3xpbmRleHd8aW5wdXR8aW5wdXRjfGlucHV0bnxpbnR8aW50Y2t8aW50bnh8aW50cnJ8aXJyfGpiZXNzZWx8anVsZGF0ZXxrdXJ0b3Npc3xsYWd8bGJvdW5kfGxlZnR8bGVuZ3RofGxnYW1tYXxsaWJuYW1lfGxpYnJlZnxsb2d8bG9nMTB8bG9nMnxsb2dwZGZ8bG9ncG1mfGxvZ3NkZnxsb3djYXNlfG1heHxtZHl8bWVhbnxtaW58bWludXRlfG1vZHxtb250aHxtb3Blbnxtb3J0fG58bmV0cHZ8bm1pc3N8bm9ybWFsfG5vdGV8bnB2fG9wZW58b3JkaW5hbHxwYXRobmFtZXxwZGZ8cGVla3xwZWVrY3xwbWZ8cG9pbnR8cG9pc3Nvbnxwb2tlfHByb2JiZXRhfHByb2Jibm1sfHByb2JjaGl8cHJvYmZ8cHJvYmdhbXxwcm9iaHlwcnxwcm9iaXR8cHJvYm5lZ2J8cHJvYm5vcm18cHJvYnR8cHV0fHB1dGN8cHV0bnxxdHJ8cXVvdGV8cmFuYmlufHJhbmNhdXxyYW5leHB8cmFuZ2FtfHJhbmdlfHJhbmt8cmFubm9yfHJhbnBvaXxyYW50Ymx8cmFudHJpfHJhbnVuaXxyZXBlYXR8cmVzb2x2ZXxyZXZlcnNlfHJld2luZHxyaWdodHxyb3VuZHxzYXZpbmd8c2NhbnxzZGZ8c2Vjb25kfHNpZ258c2lufHNpbmh8c2tld25lc3N8c291bmRleHxzcGVkaXN8c3FydHxzdGR8c3RkZXJyfHN0Zmlwc3xzdG5hbWV8c3RuYW1lbHxzdWJzdHJ8c3VtfHN5bWdldHxzeXNnZXR8c3lzbXNnfHN5c3Byb2R8c3lzcmN8c3lzdGVtfHRhbnx0YW5ofHRpbWV8dGltZXBhcnR8dGludnx0bm9uY3R8dG9kYXl8dHJhbnNsYXRlfHRyYW53cmR8dHJpZ2FtbWF8dHJpbXx0cmltbnx0cnVuY3x1bmlmb3JtfHVwY2FzZXx1c3N8dmFyfHZhcmZtdHx2YXJpbmZtdHx2YXJsYWJlbHx2YXJsZW58dmFybmFtZXx2YXJudW18dmFycmF5fHZhcnJheXh8dmFydHlwZXx2ZXJpZnl8dmZvcm1hdHx2Zm9ybWF0ZHx2Zm9ybWF0ZHh8dmZvcm1hdG58dmZvcm1hdG54fHZmb3JtYXR3fHZmb3JtYXR3eHx2Zm9ybWF0eHx2aW5hcnJheXx2aW5hcnJheXh8dmluZm9ybWF0fHZpbmZvcm1hdGR8dmluZm9ybWF0ZHh8dmluZm9ybWF0bnx2aW5mb3JtYXRueHx2aW5mb3JtYXR3fHZpbmZvcm1hdHd4fHZpbmZvcm1hdHh8dmxhYmVsfHZsYWJlbHh8dmxlbmd0aHx2bGVuZ3RoeHx2bmFtZXx2bmFtZXh8dnR5cGV8dnR5cGV4fHdlZWtkYXl8eWVhcnx5eXF8emlwZmlwc3x6aXBuYW1lfHppcG5hbWVsfHppcHN0YXRlKVsoXSJ9LHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W2UuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFXX0sZS5DT01NRU5UKCJcXCoiLCI7IiksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjYWxhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiQFtBLVphLXpdKyJ9LG49e2NsYXNzTmFtZToic3Vic3QiLHZhcmlhbnRzOlt7YmVnaW46IlxcJFtBLVphLXowLTlfXSsifSx7YmVnaW46IlxcJHsiLGVuZDoifSJ9XX0scj17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46JyInLGVuZDonIicsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiciIiInLGVuZDonIiIiJyxyZWxldmFuY2U6MTB9LHtiZWdpbjonW2Etel0rIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl19LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46J1thLXpdKyIiIicsZW5kOiciIiInLGNvbnRhaW5zOltuXSxyZWxldmFuY2U6MTB9XX0sbz17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInXFx3W1xcd1xcZF9dKig/IScpIn0scz17Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bQS1aYS16MC05X10qIixyZWxldmFuY2U6MH0saT17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46L1teMC05XG5cdCAiJygpLC5ge31cW1xdOjtdW15cblx0ICInKCksLmB7fVxbXF06O10rfFteMC05XG5cdCAiJygpLC5ge31cW1xdOjs9XS8scmVsZXZhbmNlOjB9LGE9e2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIG9iamVjdCB0cmFpdCB0eXBlIixlbmQ6L1s6PXtcW1xuO10vLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIHdpdGgiLHJlbGV2YW5jZToxMH0se2JlZ2luOi9cWy8sZW5kOi9cXS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3NdfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3NdfSxpXX0sbD17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZGVmIixlbmQ6L1s6PXtcWyhcbjtdLyxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOltpXX07cmV0dXJue2tleXdvcmRzOntsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwiLGtleXdvcmQ6InR5cGUgeWllbGQgbGF6eSBvdmVycmlkZSBkZWYgd2l0aCB2YWwgdmFyIHNlYWxlZCBhYnN0cmFjdCBwcml2YXRlIHRyYWl0IG9iamVjdCBpZiBmb3JTb21lIGZvciB3aGlsZSB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBleHRlbmRzIGltcG9ydCBmaW5hbCByZXR1cm4gZWxzZSBicmVhayBuZXcgY2F0Y2ggc3VwZXIgY2xhc3MgY2FzZSBwYWNrYWdlIGRlZmF1bHQgdHJ5IHRoaXMgbWF0Y2ggY29udGludWUgdGhyb3dzIGltcGxpY2l0In0sY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHIsbyxzLGwsYSxlLkNfTlVNQkVSX01PREUsdF19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjaGVtZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IlteXFwoXFwpXFxbXFxdXFx7XFx9XCIsJ2A7I3xcXFxcXFxzXSsiLG49eyJidWlsdGluLW5hbWUiOiJjYXNlLWxhbWJkYSBjYWxsL2NjIGNsYXNzIGRlZmluZS1jbGFzcyBleGl0LWhhbmRsZXIgZmllbGQgaW1wb3J0IGluaGVyaXQgaW5pdC1maWVsZCBpbnRlcmZhY2UgbGV0Ki12YWx1ZXMgbGV0LXZhbHVlcyBsZXQvZWMgbWl4aW4gb3B0LWxhbWJkYSBvdmVycmlkZSBwcm90ZWN0IHByb3ZpZGUgcHVibGljIHJlbmFtZSByZXF1aXJlIHJlcXVpcmUtZm9yLXN5bnRheCBzeW50YXggc3ludGF4LWNhc2Ugc3ludGF4LWVycm9yIHVuaXQvc2lnIHVubGVzcyB3aGVuIHdpdGgtc3ludGF4IGFuZCBiZWdpbiBjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24gY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGNhc2UgY29uZCBkZWZpbmUgZGVmaW5lLXN5bnRheCBkZWxheSBkbyBkeW5hbWljLXdpbmQgZWxzZSBmb3ItZWFjaCBpZiBsYW1iZGEgbGV0IGxldCogbGV0LXN5bnRheCBsZXRyZWMgbGV0cmVjLXN5bnRheCBtYXAgb3Igc3ludGF4LXJ1bGVzICcgKiArICwgLEAgLSAuLi4gLyA7IDwgPD0gPSA9PiA+ID49IGAgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyBjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zIGN1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0IGZsb29yIGZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciBpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nIGxpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nIG51bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/IHBhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2Ugcm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyBzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5IHN0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/IHN0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/IHRhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgdmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/In0scj17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXiMhIixlbmQ6IiQifSxvPXtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiIoI3R8I2Z8I1xcXFwiK3QrInwjXFxcXC4pIn0scz17Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IihcXC18XFwrKT9cXGQrKFsuL11cXGQrKT8iLHJlbGV2YW5jZTowfSx7YmVnaW46IihcXC18XFwrKT9cXGQrKFsuL11cXGQrKT9bK1xcLV0oXFwtfFxcKyk/XFxkKyhbLi9dXFxkKyk/aSIscmVsZXZhbmNlOjB9LHtiZWdpbjoiI2JbMC0xXSsoL1swLTFdKyk/In0se2JlZ2luOiIjb1swLTddKygvWzAtN10rKT8ifSx7YmVnaW46IiN4WzAtOWEtZl0rKC9bMC05YS1mXSspPyJ9XX0saT1lLlFVT1RFX1NUUklOR19NT0RFLGE9W2UuQ09NTUVOVCgiOyIsIiQiLHtyZWxldmFuY2U6MH0pLGUuQ09NTUVOVCgiI1xcfCIsIlxcfCMiKV0sbD17YmVnaW46dCxyZWxldmFuY2U6MH0sdT17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInIit0fSxjPXtlbmRzV2l0aFBhcmVudDohMCxyZWxldmFuY2U6MH0sZD17dmFyaWFudHM6W3tiZWdpbjovJy99LHtiZWdpbjoiYCJ9XSxjb250YWluczpbe2JlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbInNlbGYiLG8saSxzLGwsdV19XX0sXz17Y2xhc3NOYW1lOiJuYW1lIixiZWdpbjp0LGxleGVtZXM6dCxrZXl3b3JkczpufSxwPXtiZWdpbjovbGFtYmRhLyxlbmRzV2l0aFBhcmVudDohMCxyZXR1cm5CZWdpbjohMCxjb250YWluczpbXyx7YmVnaW46L1woLyxlbmQ6L1wpLyxlbmRzUGFyZW50OiEwLGNvbnRhaW5zOltsXX1dfSxmPXt2YXJpYW50czpbe2JlZ2luOiJcXCgiLGVuZDoiXFwpIn0se2JlZ2luOiJcXFsiLGVuZDoiXFxdIn1dLGNvbnRhaW5zOltwLF8sY119O3JldHVybiBjLmNvbnRhaW5zPVtvLHMsaSxsLHUsZCxmXS5jb25jYXQoYSkse2lsbGVnYWw6L1xTLyxjb250YWluczpbcixzLGksdSxkLGZdLmNvbmNhdChhKX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2NpbGFiLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46Iid8XCIiLGVuZDoiJ3xcIiIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx7YmVnaW46IicnIn1dfV07cmV0dXJue2FsaWFzZXM6WyJzY2kiXSxsZXhlbWVzOi8lP1x3Ky8sa2V5d29yZHM6e2tleXdvcmQ6ImFib3J0IGJyZWFrIGNhc2UgY2xlYXIgY2F0Y2ggY29udGludWUgZG8gZWxzZWlmIGVsc2UgZW5kZnVuY3Rpb24gZW5kIGZvciBmdW5jdGlvbiBnbG9iYWwgaWYgcGF1c2UgcmV0dXJuIHJlc3VtZSBzZWxlY3QgdHJ5IHRoZW4gd2hpbGUiLGxpdGVyYWw6IiVmICVGICV0ICVUICVwaSAlZXBzICVpbmYgJW5hbiAlZSAlaSAleiAlcyIsYnVpbHRfaW46ImFicyBhbmQgYWNvcyBhc2luIGF0YW4gY2VpbCBjZCBjaGRpciBjbGVhcmdsb2JhbCBjb3NoIGNvcyBjdW1wcm9kIGRlZmYgZGlzcCBlcnJvciBleGVjIGV4ZWNzdHIgZXhpc3RzIGV4cCBleWUgZ2V0dGV4dCBmbG9vciBmcHJpbnRmIGZyZWFkIGZzb2x2ZSBpbWFnIGlzZGVmIGlzZW1wdHkgaXNpbmZpc25hbiBpc3ZlY3RvciBsYXN0ZXJyb3IgbGVuZ3RoIGxvYWQgbGluc3BhY2UgbGlzdCBsaXN0ZmlsZXMgbG9nMTAgbG9nMiBsb2cgbWF4IG1pbiBtc3ByaW50ZiBtY2xvc2UgbW9wZW4gb25lcyBvciBwYXRoY29udmVydCBwb2x5IHByaW50ZiBwcm9kIHB3ZCByYW5kIHJlYWwgcm91bmQgc2luaCBzaW4gc2l6ZSBnc29ydCBzcHJpbnRmIHNxcnQgc3RyY2F0IHN0cmNtcHMgdHJpbmcgc3VtIHN5c3RlbSB0YW5oIHRhbiB0eXBlIHR5cGVuYW1lIHdhcm5pbmcgemVyb3MgbWF0cml4In0saWxsZWdhbDonKCJ8I3wvXFwqfFxccysvXFx3KyknLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDoiJCIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkifV19LHtiZWdpbjoiW2EtekEtWl9dW2EtekEtWl8wLTldKignK1tcXC4nXSp8W1xcLiddKykiLGVuZDoiIixyZWxldmFuY2U6MH0se2JlZ2luOiJcXFsiLGVuZDoiXFxdJypbXFwuJ10qIixyZWxldmFuY2U6MCxjb250YWluczp0fSxlLkNPTU1FTlQoIi8vIiwiJCIpXS5jb25jYXQodCl9fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Njc3MuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiKFxcJFthLXpBLVotXVthLXpBLVowLTlfLV0qKVxcYiJ9LG49e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiI1swLTlBLUZhLWZdKyJ9O2UuQ1NTX05VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREU7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDoiWz0vfCddIixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToic2VsZWN0b3ItaWQiLGJlZ2luOiJcXCNbQS1aYS16MC05Xy1dKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InNlbGVjdG9yLWNsYXNzIixiZWdpbjoiXFwuW0EtWmEtejAtOV8tXSsiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1hdHRyIixiZWdpbjoiXFxbIixlbmQ6IlxcXSIsaWxsZWdhbDoiJCJ9LHtjbGFzc05hbWU6InNlbGVjdG9yLXRhZyIsYmVnaW46IlxcYihhfGFiYnJ8YWNyb255bXxhZGRyZXNzfGFyZWF8YXJ0aWNsZXxhc2lkZXxhdWRpb3xifGJhc2V8YmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2l0ZXxjb2RlfGNvbHxjb2xncm91cHxjb21tYW5kfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaXZ8ZGx8ZHR8ZW18ZW1iZWR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8KGhbMS02XSl8aGVhZHxoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrYmR8a2V5Z2VufGxhYmVsfGxlZ2VuZHxsaXxsaW5rfG1hcHxtYXJrfG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHxvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzYW1wfHNjcmlwdHxzZWN0aW9ufHNlbGVjdHxzbWFsbHxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1cHx0YWJsZXx0Ym9keXx0ZHx0ZXh0YXJlYXx0Zm9vdHx0aHx0aGVhZHx0aW1lfHRpdGxlfHRyfHR0fHVsfHZhcnx2aWRlbylcXGIiLHJlbGV2YW5jZTowfSx7YmVnaW46IjoodmlzaXRlZHx2YWxpZHxyb290fHJpZ2h0fHJlcXVpcmVkfHJlYWQtd3JpdGV8cmVhZC1vbmx5fG91dC1yYW5nZXxvcHRpb25hbHxvbmx5LW9mLXR5cGV8b25seS1jaGlsZHxudGgtb2YtdHlwZXxudGgtbGFzdC1vZi10eXBlfG50aC1sYXN0LWNoaWxkfG50aC1jaGlsZHxub3R8bGlua3xsZWZ0fGxhc3Qtb2YtdHlwZXxsYXN0LWNoaWxkfGxhbmd8aW52YWxpZHxpbmRldGVybWluYXRlfGluLXJhbmdlfGhvdmVyfGZvY3VzfGZpcnN0LW9mLXR5cGV8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtY2hpbGR8Zmlyc3R8ZW5hYmxlZHxlbXB0eXxkaXNhYmxlZHxkZWZhdWx0fGNoZWNrZWR8YmVmb3JlfGFmdGVyfGFjdGl2ZSkifSx7YmVnaW46Ijo6KGFmdGVyfGJlZm9yZXxjaG9pY2VzfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfHJlcGVhdC1pbmRleHxyZXBlYXQtaXRlbXxzZWxlY3Rpb258dmFsdWUpIn0sdCx7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOiJcXGIoei1pbmRleHx3b3JkLXdyYXB8d29yZC1zcGFjaW5nfHdvcmQtYnJlYWt8d2lkdGh8d2lkb3dzfHdoaXRlLXNwYWNlfHZpc2liaWxpdHl8dmVydGljYWwtYWxpZ258dW5pY29kZS1iaWRpfHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb258dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtfHRvcHx0ZXh0LXVuZGVybGluZS1wb3NpdGlvbnx0ZXh0LXRyYW5zZm9ybXx0ZXh0LXNoYWRvd3x0ZXh0LXJlbmRlcmluZ3x0ZXh0LW92ZXJmbG93fHRleHQtaW5kZW50fHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tY29sb3J8dGV4dC1kZWNvcmF0aW9ufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWFsaWdufHRhYi1zaXplfHRhYmxlLWxheW91dHxyaWdodHxyZXNpemV8cXVvdGVzfHBvc2l0aW9ufHBvaW50ZXItZXZlbnRzfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWFmdGVyfHBhZGRpbmctdG9wfHBhZGRpbmctcmlnaHR8cGFkZGluZy1sZWZ0fHBhZGRpbmctYm90dG9tfHBhZGRpbmd8b3ZlcmZsb3cteXxvdmVyZmxvdy14fG92ZXJmbG93LXdyYXB8b3ZlcmZsb3d8b3V0bGluZS13aWR0aHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtY29sb3J8b3V0bGluZXxvcnBoYW5zfG9yZGVyfG9wYWNpdHl8b2JqZWN0LXBvc2l0aW9ufG9iamVjdC1maXR8bm9ybWFsfG5vbmV8bmF2LXVwfG5hdi1yaWdodHxuYXYtbGVmdHxuYXYtaW5kZXh8bmF2LWRvd258bWluLXdpZHRofG1pbi1oZWlnaHR8bWF4LXdpZHRofG1heC1oZWlnaHR8bWFza3xtYXJrc3xtYXJnaW4tdG9wfG1hcmdpbi1yaWdodHxtYXJnaW4tbGVmdHxtYXJnaW4tYm90dG9tfG1hcmdpbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGV8bGluZS1oZWlnaHR8bGV0dGVyLXNwYWNpbmd8bGVmdHxqdXN0aWZ5LWNvbnRlbnR8aW5pdGlhbHxpbmhlcml0fGltZS1tb2RlfGltYWdlLW9yaWVudGF0aW9ufGltYWdlLXJlc29sdXRpb258aW1hZ2UtcmVuZGVyaW5nfGljb258aHlwaGVuc3xoZWlnaHR8Zm9udC13ZWlnaHR8Zm9udC12YXJpYW50LWxpZ2F0dXJlc3xmb250LXZhcmlhbnR8Zm9udC1zdHlsZXxmb250LXN0cmV0Y2h8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1sYW5ndWFnZS1vdmVycmlkZXxmb250LWtlcm5pbmd8Zm9udC1mZWF0dXJlLXNldHRpbmdzfGZvbnQtZmFtaWx5fGZvbnR8ZmxvYXR8ZmxleC13cmFwfGZsZXgtc2hyaW5rfGZsZXgtZ3Jvd3xmbGV4LWZsb3d8ZmxleC1kaXJlY3Rpb258ZmxleC1iYXNpc3xmbGV4fGZpbHRlcnxlbXB0eS1jZWxsc3xkaXNwbGF5fGRpcmVjdGlvbnxjdXJzb3J8Y291bnRlci1yZXNldHxjb3VudGVyLWluY3JlbWVudHxjb250ZW50fGNvbHVtbi13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZXxjb2x1bW4tZ2FwfGNvbHVtbi1maWxsfGNvbHVtbi1jb3VudHxjb2x1bW5zfGNvbG9yfGNsaXAtcGF0aHxjbGlwfGNsZWFyfGNhcHRpb24tc2lkZXxicmVhay1pbnNpZGV8YnJlYWstYmVmb3JlfGJyZWFrLWFmdGVyfGJveC1zaXppbmd8Ym94LXNoYWRvd3xib3gtZGVjb3JhdGlvbi1icmVha3xib3R0b218Ym9yZGVyLXdpZHRofGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcHxib3JkZXItc3R5bGV8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yYWRpdXN8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnR8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1jb2xsYXBzZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b218Ym9yZGVyfGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYmxlbmQtbW9kZXxiYWNrZ3JvdW5kfGJhY2tmYWNlLXZpc2liaWxpdHl8YXV0b3xhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9ufGFsaWduLXNlbGZ8YWxpZ24taXRlbXN8YWxpZ24tY29udGVudClcXGIiLGlsbGVnYWw6IlteXFxzXSJ9LHtiZWdpbjoiXFxiKHdoaXRlc3BhY2V8d2FpdHx3LXJlc2l6ZXx2aXNpYmxlfHZlcnRpY2FsLXRleHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dXBwZXJjYXNlfHVwcGVyLXJvbWFufHVwcGVyLWFscGhhfHVuZGVybGluZXx0cmFuc3BhcmVudHx0b3B8dGhpbnx0aGlja3x0ZXh0fHRleHQtdG9wfHRleHQtYm90dG9tfHRiLXJsfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1mb290ZXItZ3JvdXB8c3ctcmVzaXplfHN1cGVyfHN0cmljdHxzdGF0aWN8c3F1YXJlfHNvbGlkfHNtYWxsLWNhcHN8c2VwYXJhdGV8c2UtcmVzaXplfHNjcm9sbHxzLXJlc2l6ZXxydGx8cm93LXJlc2l6ZXxyaWRnZXxyaWdodHxyZXBlYXR8cmVwZWF0LXl8cmVwZWF0LXh8cmVsYXRpdmV8cHJvZ3Jlc3N8cG9pbnRlcnxvdmVybGluZXxvdXRzaWRlfG91dHNldHxvYmxpcXVlfG5vd3JhcHxub3QtYWxsb3dlZHxub3JtYWx8bm9uZXxudy1yZXNpemV8bm8tcmVwZWF0fG5vLWRyb3B8bmV3c3BhcGVyfG5lLXJlc2l6ZXxuLXJlc2l6ZXxtb3ZlfG1pZGRsZXxtZWRpdW18bHRyfGxyLXRifGxvd2VyY2FzZXxsb3dlci1yb21hbnxsb3dlci1hbHBoYXxsb29zZXxsaXN0LWl0ZW18bGluZXxsaW5lLXRocm91Z2h8bGluZS1lZGdlfGxpZ2h0ZXJ8bGVmdHxrZWVwLWFsbHxqdXN0aWZ5fGl0YWxpY3xpbnRlci13b3JkfGludGVyLWlkZW9ncmFwaHxpbnNpZGV8aW5zZXR8aW5saW5lfGlubGluZS1ibG9ja3xpbmhlcml0fGluYWN0aXZlfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLWFscGhhfGhvcml6b250YWx8aGlkZGVufGhlbHB8aGFuZHxncm9vdmV8Zml4ZWR8ZWxsaXBzaXN8ZS1yZXNpemV8ZG91YmxlfGRvdHRlZHxkaXN0cmlidXRlfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzY3xkaXNhYmxlZHxkZWZhdWx0fGRlY2ltYWx8ZGFzaGVkfGNyb3NzaGFpcnxjb2xsYXBzZXxjb2wtcmVzaXplfGNpcmNsZXxjaGFyfGNlbnRlcnxjYXBpdGFsaXplfGJyZWFrLXdvcmR8YnJlYWstYWxsfGJvdHRvbXxib3RofGJvbGRlcnxib2xkfGJsb2NrfGJpZGktb3ZlcnJpZGV8YmVsb3d8YmFzZWxpbmV8YXV0b3xhbHdheXN8YWxsLXNjcm9sbHxhYnNvbHV0ZXx0YWJsZXx0YWJsZS1jZWxsKVxcYiJ9LHtiZWdpbjoiOiIsZW5kOiI7Iixjb250YWluczpbdCxuLGUuQ1NTX05VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In1dfSx7YmVnaW46IkAiLGVuZDoiW3s7XSIsa2V5d29yZHM6Im1peGluIGluY2x1ZGUgZXh0ZW5kIGZvciBpZiBlbHNlIGVhY2ggd2hpbGUgY2hhcnNldCBpbXBvcnQgZGVidWcgbWVkaWEgcGFnZSBjb250ZW50IGZvbnQtZmFjZSBuYW1lc3BhY2Ugd2FybiIsY29udGFpbnM6W3QsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsbixlLkNTU19OVU1CRVJfTU9ERSx7YmVnaW46Ilxcc1tBLVphLXowLTlfLi1dKyIscmVsZXZhbmNlOjB9XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zaGVsbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJjb25zb2xlIl0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeXFxzezAsM31bXFx3XFxkXFxbXFxdKClALV0qWz4lJCNdIixzdGFydHM6e2VuZDoiJCIsc3ViTGFuZ3VhZ2U6ImJhc2gifX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsaS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9WyJhZGQiLCJhbmQiLCJjbXAiLCJjbXBnIiwiY21wbCIsImNvbnN0IiwiZGl2IiwiZG91YmxlIiwiZmxvYXQiLCJnb3RvIiwiaWYiLCJpbnQiLCJsb25nIiwibW92ZSIsIm11bCIsIm5lZyIsIm5ldyIsIm5vcCIsIm5vdCIsIm9yIiwicmVtIiwicmV0dXJuIiwic2hsIiwic2hyIiwic3B1dCIsInN1YiIsInRocm93IiwidXNociIsInhvciJdLG49WyJhZ2V0IiwiYXB1dCIsImFycmF5IiwiY2hlY2siLCJleGVjdXRlIiwiZmlsbCIsImZpbGxlZCIsImdvdG8vMTYiLCJnb3RvLzMyIiwiaWdldCIsImluc3RhbmNlIiwiaW52b2tlIiwiaXB1dCIsIm1vbml0b3IiLCJwYWNrZWQiLCJzZ2V0Iiwic3BhcnNlIl0scj1bInRyYW5zaWVudCIsImNvbnN0cnVjdG9yIiwiYWJzdHJhY3QiLCJmaW5hbCIsInN5bnRoZXRpYyIsInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJzdGF0aWMiLCJicmlkZ2UiLCJzeXN0ZW0iXTtyZXR1cm57YWxpYXNlczpbInNtYWxpIl0sY29udGFpbnM6W3tjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicscmVsZXZhbmNlOjB9LGUuQ09NTUVOVCgiIyIsIiQiLHtyZWxldmFuY2U6MH0pLHtjbGFzc05hbWU6ImtleXdvcmQiLHZhcmlhbnRzOlt7YmVnaW46IlxccypcXC5lbmRcXHNbYS16QS1aMC05XSoifSx7YmVnaW46Il5bIF0qXFwuW2EtekEtWl0qIixyZWxldmFuY2U6MH0se2JlZ2luOiJcXHM6W2EtekEtWl8wLTldKiIscmVsZXZhbmNlOjB9LHtiZWdpbjoiXFxzKCIrci5qb2luKCJ8IikrIikifV19LHtjbGFzc05hbWU6ImJ1aWx0X2luIix2YXJpYW50czpbe2JlZ2luOiJcXHMoIit0LmpvaW4oInwiKSsiKVxccyJ9LHtiZWdpbjoiXFxzKCIrdC5qb2luKCJ8IikrIikoKFxcLXwvKVthLXpBLVowLTldKykrXFxzIixyZWxldmFuY2U6MTB9LHtiZWdpbjoiXFxzKCIrbi5qb2luKCJ8IikrIikoKFxcLXwvKVthLXpBLVowLTldKykqXFxzIixyZWxldmFuY2U6MTB9XX0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiJMW14oOzpcbl0qOyIscmVsZXZhbmNlOjB9LHtiZWdpbjoiW3ZwXVswLTldKyJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc21hbGx0YWxrLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJcXCQuezF9In0sbj17Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiIjIitlLlVOREVSU0NPUkVfSURFTlRfUkV9O3JldHVybnthbGlhc2VzOlsic3QiXSxrZXl3b3Jkczoic2VsZiBzdXBlciBuaWwgdHJ1ZSBmYWxzZSB0aGlzQ29udGV4dCIsY29udGFpbnM6W2UuQ09NTUVOVCgnIicsJyInKSxlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYltBLVpdW0EtWmEtejAtOV9dKiIscmVsZXZhbmNlOjB9LHtiZWdpbjoiW2Etel1bYS16QS1aMC05X10qOiIscmVsZXZhbmNlOjB9LGUuQ19OVU1CRVJfTU9ERSxuLHQse2JlZ2luOiJcXHxbIF0qW2Etel1bYS16QS1aMC05X10qKFsgXStbYS16XVthLXpBLVowLTlfXSopKlsgXSpcXHwiLHJldHVybkJlZ2luOiEwLGVuZDovXHwvLGlsbGVnYWw6L1xTLyxjb250YWluczpbe2JlZ2luOiIoXFx8WyBdKik/W2Etel1bYS16QS1aMC05X10qIn1dfSx7YmVnaW46IlxcI1xcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsdCxlLkNfTlVNQkVSX01PREUsbl19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc21sLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbIm1sIl0sa2V5d29yZHM6e2tleXdvcmQ6ImFic3R5cGUgYW5kIGFuZGFsc28gYXMgY2FzZSBkYXRhdHlwZSBkbyBlbHNlIGVuZCBlcXR5cGUgZXhjZXB0aW9uIGZuIGZ1biBmdW5jdG9yIGhhbmRsZSBpZiBpbiBpbmNsdWRlIGluZml4IGluZml4ciBsZXQgbG9jYWwgbm9uZml4IG9mIG9wIG9wZW4gb3JlbHNlIHJhaXNlIHJlYyBzaGFyaW5nIHNpZyBzaWduYXR1cmUgc3RydWN0IHN0cnVjdHVyZSB0aGVuIHR5cGUgdmFsIHdpdGggd2l0aHR5cGUgd2hlcmUgd2hpbGUiLGJ1aWx0X2luOiJhcnJheSBib29sIGNoYXIgZXhuIGludCBsaXN0IG9wdGlvbiBvcmRlciByZWFsIHJlZiBzdHJpbmcgc3Vic3RyaW5nIHZlY3RvciB1bml0IHdvcmQiLGxpdGVyYWw6InRydWUgZmFsc2UgTk9ORSBTT01FIExFU1MgRVFVQUwgR1JFQVRFUiBuaWwifSxpbGxlZ2FsOi9cL1wvfD4+LyxsZXhlbWVzOiJbYS16X11cXHcqIT8iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjovXFsoXHxcfCk/XF18XChcKS8scmVsZXZhbmNlOjB9LGUuQ09NTUVOVCgiXFwoXFwqIiwiXFwqXFwpIix7Y29udGFpbnM6WyJzZWxmIl19KSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInW0EtWmEtel9dKD8hJylbXFx3J10qIn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46ImBbQS1aXVtcXHcnXSoifSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3J10qIixyZWxldmFuY2U6MH0se2JlZ2luOiJbYS16X11cXHcqJ1tcXHcnXSoifSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjB9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSkse2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiKDBbeFhdW2EtZkEtRjAtOV9dK1tMbG5dP3wwW29PXVswLTdfXStbTGxuXT98MFtiQl1bMDFfXStbTGxuXT98WzAtOV1bMC05X10qKFtMbG5dfChcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pIixyZWxldmFuY2U6MH0se2JlZ2luOi9bLT1dPi99XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FmLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldExhbmd1YWdlKCJjcHAiKS5leHBvcnRzLG49e2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9cYl8rW2EtekEtWl9dXHcqL30scj17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46L1thLXpBLVpdW2EtekEtWjAtOV0rX2ZuY19cdyovfSxvPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjonIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIicscmVsZXZhbmNlOjB9XX0se2JlZ2luOiInIixlbmQ6IiciLGNvbnRhaW5zOlt7YmVnaW46IicnIixyZWxldmFuY2U6MH1dfV19O3JldHVybnthbGlhc2VzOlsic3FmIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3Jkczp7a2V5d29yZDoiY2FzZSBjYXRjaCBkZWZhdWx0IGRvIGVsc2UgZXhpdCBleGl0V2l0aCBmb3IgZm9yRWFjaCBmcm9tIGlmIHByaXZhdGUgc3dpdGNoIHRoZW4gdGhyb3cgdG8gdHJ5IHdhaXRVbnRpbCB3aGlsZSB3aXRoIixidWlsdF9pbjoiYWJzIGFjY1RpbWUgYWNvcyBhY3Rpb24gYWN0aW9uSURzIGFjdGlvbktleXMgYWN0aW9uS2V5c0ltYWdlcyBhY3Rpb25LZXlzTmFtZXMgYWN0aW9uS2V5c05hbWVzQXJyYXkgYWN0aW9uTmFtZSBhY3Rpb25QYXJhbXMgYWN0aXZhdGVBZGRvbnMgYWN0aXZhdGVkQWRkb25zIGFjdGl2YXRlS2V5IGFkZDNERU5Db25uZWN0aW9uIGFkZDNERU5FdmVudEhhbmRsZXIgYWRkM0RFTkxheWVyIGFkZEFjdGlvbiBhZGRCYWNrcGFjayBhZGRCYWNrcGFja0NhcmdvIGFkZEJhY2twYWNrQ2FyZ29HbG9iYWwgYWRkQmFja3BhY2tHbG9iYWwgYWRkQ2FtU2hha2UgYWRkQ3VyYXRvckFkZG9ucyBhZGRDdXJhdG9yQ2FtZXJhQXJlYSBhZGRDdXJhdG9yRWRpdGFibGVPYmplY3RzIGFkZEN1cmF0b3JFZGl0aW5nQXJlYSBhZGRDdXJhdG9yUG9pbnRzIGFkZEVkaXRvck9iamVjdCBhZGRFdmVudEhhbmRsZXIgYWRkRm9yY2UgYWRkR29nZ2xlcyBhZGRHcm91cEljb24gYWRkSGFuZGd1bkl0ZW0gYWRkSGVhZGdlYXIgYWRkSXRlbSBhZGRJdGVtQ2FyZ28gYWRkSXRlbUNhcmdvR2xvYmFsIGFkZEl0ZW1Qb29sIGFkZEl0ZW1Ub0JhY2twYWNrIGFkZEl0ZW1Ub1VuaWZvcm0gYWRkSXRlbVRvVmVzdCBhZGRMaXZlU3RhdHMgYWRkTWFnYXppbmUgYWRkTWFnYXppbmVBbW1vQ2FyZ28gYWRkTWFnYXppbmVDYXJnbyBhZGRNYWdhemluZUNhcmdvR2xvYmFsIGFkZE1hZ2F6aW5lR2xvYmFsIGFkZE1hZ2F6aW5lUG9vbCBhZGRNYWdhemluZXMgYWRkTWFnYXppbmVUdXJyZXQgYWRkTWVudSBhZGRNZW51SXRlbSBhZGRNaXNzaW9uRXZlbnRIYW5kbGVyIGFkZE1QRXZlbnRIYW5kbGVyIGFkZE11c2ljRXZlbnRIYW5kbGVyIGFkZE93bmVkTWluZSBhZGRQbGF5ZXJTY29yZXMgYWRkUHJpbWFyeVdlYXBvbkl0ZW0gYWRkUHVibGljVmFyaWFibGVFdmVudEhhbmRsZXIgYWRkUmF0aW5nIGFkZFJlc291cmNlcyBhZGRTY29yZSBhZGRTY29yZVNpZGUgYWRkU2Vjb25kYXJ5V2VhcG9uSXRlbSBhZGRTd2l0Y2hhYmxlVW5pdCBhZGRUZWFtTWVtYmVyIGFkZFRvUmVtYWluc0NvbGxlY3RvciBhZGRUb3JxdWUgYWRkVW5pZm9ybSBhZGRWZWhpY2xlIGFkZFZlc3QgYWRkV2F5cG9pbnQgYWRkV2VhcG9uIGFkZFdlYXBvbkNhcmdvIGFkZFdlYXBvbkNhcmdvR2xvYmFsIGFkZFdlYXBvbkdsb2JhbCBhZGRXZWFwb25JdGVtIGFkZFdlYXBvblBvb2wgYWRkV2VhcG9uVHVycmV0IGFkbWluIGFnZW50IGFnZW50cyBBR0xUb0FTTCBhaW1lZEF0VGFyZ2V0IGFpbVBvcyBhaXJEZW5zaXR5UlREIGFpcnBsYW5lVGhyb3R0bGUgYWlycG9ydFNpZGUgQUlTRmluaXNoSGVhbCBhbGl2ZSBhbGwzREVORW50aXRpZXMgYWxsQWlycG9ydHMgYWxsQ29udHJvbHMgYWxsQ3VyYXRvcnMgYWxsQ3V0TGF5ZXJzIGFsbERlYWQgYWxsRGVhZE1lbiBhbGxEaXNwbGF5cyBhbGxHcm91cHMgYWxsTWFwTWFya2VycyBhbGxNaW5lcyBhbGxNaXNzaW9uT2JqZWN0cyBhbGxvdzNETW9kZSBhbGxvd0NyZXdJbkltbW9iaWxlIGFsbG93Q3VyYXRvckxvZ2ljSWdub3JlQXJlYXMgYWxsb3dEYW1hZ2UgYWxsb3dEYW1tYWdlIGFsbG93RmlsZU9wZXJhdGlvbnMgYWxsb3dGbGVlaW5nIGFsbG93R2V0SW4gYWxsb3dTcHJpbnQgYWxsUGxheWVycyBhbGxTaW1wbGVPYmplY3RzIGFsbFNpdGVzIGFsbFR1cnJldHMgYWxsVW5pdHMgYWxsVW5pdHNVQVYgYWxsVmFyaWFibGVzIGFtbW8gYW1tb09uUHlsb24gYW5kIGFuaW1hdGUgYW5pbWF0ZUJheSBhbmltYXRlRG9vciBhbmltYXRlUHlsb24gYW5pbWF0ZVNvdXJjZSBhbmltYXRpb25OYW1lcyBhbmltYXRpb25QaGFzZSBhbmltYXRpb25Tb3VyY2VQaGFzZSBhbmltYXRpb25TdGF0ZSBhcHBlbmQgYXBwbHkgYXJtb3J5UG9pbnRzIGFycmF5SW50ZXJzZWN0IGFzaW4gQVNMVG9BR0wgQVNMVG9BVEwgYXNzZXJ0IGFzc2lnbkFzQ2FyZ28gYXNzaWduQXNDYXJnb0luZGV4IGFzc2lnbkFzQ29tbWFuZGVyIGFzc2lnbkFzRHJpdmVyIGFzc2lnbkFzR3VubmVyIGFzc2lnbkFzVHVycmV0IGFzc2lnbkN1cmF0b3IgYXNzaWduZWRDYXJnbyBhc3NpZ25lZENvbW1hbmRlciBhc3NpZ25lZERyaXZlciBhc3NpZ25lZEd1bm5lciBhc3NpZ25lZEl0ZW1zIGFzc2lnbmVkVGFyZ2V0IGFzc2lnbmVkVGVhbSBhc3NpZ25lZFZlaGljbGUgYXNzaWduZWRWZWhpY2xlUm9sZSBhc3NpZ25JdGVtIGFzc2lnblRlYW0gYXNzaWduVG9BaXJwb3J0IGF0YW4gYXRhbjIgYXRnIEFUTFRvQVNMIGF0dGFjaGVkT2JqZWN0IGF0dGFjaGVkT2JqZWN0cyBhdHRhY2hlZFRvIGF0dGFjaE9iamVjdCBhdHRhY2hUbyBhdHRhY2tFbmFibGVkIGJhY2twYWNrIGJhY2twYWNrQ2FyZ28gYmFja3BhY2tDb250YWluZXIgYmFja3BhY2tJdGVtcyBiYWNrcGFja01hZ2F6aW5lcyBiYWNrcGFja1NwYWNlRm9yIGJlaGF2aW91ciBiZW5jaG1hcmsgYmlub2N1bGFyIGJvdW5kaW5nQm94IGJvdW5kaW5nQm94UmVhbCBib3VuZGluZ0NlbnRlciBicmVha091dCBicmVha1RvIGJyaWVmaW5nTmFtZSBidWlsZGluZ0V4aXQgYnVpbGRpbmdQb3MgYnV0dG9uQWN0aW9uIGJ1dHRvblNldEFjdGlvbiBjYWRldE1vZGUgY2FsbCBjYWxsRXh0ZW5zaW9uIGNhbUNvbW1hbmQgY2FtQ29tbWl0IGNhbUNvbW1pdFByZXBhcmVkIGNhbUNvbW1pdHRlZCBjYW1Db25zdHVjdGlvblNldFBhcmFtcyBjYW1DcmVhdGUgY2FtRGVzdHJveSBjYW1lcmFFZmZlY3QgY2FtZXJhRWZmZWN0RW5hYmxlSFVEIGNhbWVyYUludGVyZXN0IGNhbWVyYU9uIGNhbWVyYVZpZXcgY2FtcGFpZ25Db25maWdGaWxlIGNhbVByZWxvYWQgY2FtUHJlbG9hZGVkIGNhbVByZXBhcmVCYW5rIGNhbVByZXBhcmVEaXIgY2FtUHJlcGFyZURpdmUgY2FtUHJlcGFyZUZvY3VzIGNhbVByZXBhcmVGb3YgY2FtUHJlcGFyZUZvdlJhbmdlIGNhbVByZXBhcmVQb3MgY2FtUHJlcGFyZVJlbFBvcyBjYW1QcmVwYXJlVGFyZ2V0IGNhbVNldEJhbmsgY2FtU2V0RGlyIGNhbVNldERpdmUgY2FtU2V0Rm9jdXMgY2FtU2V0Rm92IGNhbVNldEZvdlJhbmdlIGNhbVNldFBvcyBjYW1TZXRSZWxQb3MgY2FtU2V0VGFyZ2V0IGNhbVRhcmdldCBjYW1Vc2VOVkcgY2FuQWRkIGNhbkFkZEl0ZW1Ub0JhY2twYWNrIGNhbkFkZEl0ZW1Ub1VuaWZvcm0gY2FuQWRkSXRlbVRvVmVzdCBjYW5jZWxTaW1wbGVUYXNrRGVzdGluYXRpb24gY2FuRmlyZSBjYW5Nb3ZlIGNhblNsaW5nTG9hZCBjYW5TdGFuZCBjYW5TdXNwZW5kIGNhblRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbiBjYW5VbmxvYWRJbkNvbWJhdCBjYW5WZWhpY2xlQ2FyZ28gY2FwdGl2ZSBjYXB0aXZlTnVtIGNiQ2hlY2tlZCBjYlNldENoZWNrZWQgY2VpbCBjaGFubmVsRW5hYmxlZCBjaGVhdHNFbmFibGVkIGNoZWNrQUlGZWF0dXJlIGNoZWNrVmlzaWJpbGl0eSBjbGFzc05hbWUgY2xlYXJBbGxJdGVtc0Zyb21CYWNrcGFjayBjbGVhckJhY2twYWNrQ2FyZ28gY2xlYXJCYWNrcGFja0NhcmdvR2xvYmFsIGNsZWFyR3JvdXBJY29ucyBjbGVhckl0ZW1DYXJnbyBjbGVhckl0ZW1DYXJnb0dsb2JhbCBjbGVhckl0ZW1Qb29sIGNsZWFyTWFnYXppbmVDYXJnbyBjbGVhck1hZ2F6aW5lQ2FyZ29HbG9iYWwgY2xlYXJNYWdhemluZVBvb2wgY2xlYXJPdmVybGF5IGNsZWFyUmFkaW8gY2xlYXJXZWFwb25DYXJnbyBjbGVhcldlYXBvbkNhcmdvR2xvYmFsIGNsZWFyV2VhcG9uUG9vbCBjbGllbnRPd25lciBjbG9zZURpYWxvZyBjbG9zZURpc3BsYXkgY2xvc2VPdmVybGF5IGNvbGxhcHNlT2JqZWN0VHJlZSBjb2xsZWN0M0RFTkhpc3RvcnkgY29sbGVjdGl2ZVJURCBjb21iYXRNb2RlIGNvbW1hbmRBcnRpbGxlcnlGaXJlIGNvbW1hbmRDaGF0IGNvbW1hbmRlciBjb21tYW5kRmlyZSBjb21tYW5kRm9sbG93IGNvbW1hbmRGU00gY29tbWFuZEdldE91dCBjb21tYW5kaW5nTWVudSBjb21tYW5kTW92ZSBjb21tYW5kUmFkaW8gY29tbWFuZFN0b3AgY29tbWFuZFN1cHByZXNzaXZlRmlyZSBjb21tYW5kVGFyZ2V0IGNvbW1hbmRXYXRjaCBjb21tZW50IGNvbW1pdE92ZXJsYXkgY29tcGlsZSBjb21waWxlRmluYWwgY29tcGxldGVkRlNNIGNvbXBvc2VUZXh0IGNvbmZpZ0NsYXNzZXMgY29uZmlnRmlsZSBjb25maWdIaWVyYXJjaHkgY29uZmlnTmFtZSBjb25maWdQcm9wZXJ0aWVzIGNvbmZpZ1NvdXJjZUFkZG9uTGlzdCBjb25maWdTb3VyY2VNb2QgY29uZmlnU291cmNlTW9kTGlzdCBjb25maXJtU2Vuc29yVGFyZ2V0IGNvbm5lY3RUZXJtaW5hbFRvVUFWIGNvbnRyb2xzR3JvdXBDdHJsIGNvcHlGcm9tQ2xpcGJvYXJkIGNvcHlUb0NsaXBib2FyZCBjb3B5V2F5cG9pbnRzIGNvcyBjb3VudCBjb3VudEVuZW15IGNvdW50RnJpZW5kbHkgY291bnRTaWRlIGNvdW50VHlwZSBjb3VudFVua25vd24gY3JlYXRlM0RFTkNvbXBvc2l0aW9uIGNyZWF0ZTNERU5FbnRpdHkgY3JlYXRlQWdlbnQgY3JlYXRlQ2VudGVyIGNyZWF0ZURpYWxvZyBjcmVhdGVEaWFyeUxpbmsgY3JlYXRlRGlhcnlSZWNvcmQgY3JlYXRlRGlhcnlTdWJqZWN0IGNyZWF0ZURpc3BsYXkgY3JlYXRlR2VhckRpYWxvZyBjcmVhdGVHcm91cCBjcmVhdGVHdWFyZGVkUG9pbnQgY3JlYXRlTG9jYXRpb24gY3JlYXRlTWFya2VyIGNyZWF0ZU1hcmtlckxvY2FsIGNyZWF0ZU1lbnUgY3JlYXRlTWluZSBjcmVhdGVNaXNzaW9uRGlzcGxheSBjcmVhdGVNUENhbXBhaWduRGlzcGxheSBjcmVhdGVTaW1wbGVPYmplY3QgY3JlYXRlU2ltcGxlVGFzayBjcmVhdGVTaXRlIGNyZWF0ZVNvdW5kU291cmNlIGNyZWF0ZVRhc2sgY3JlYXRlVGVhbSBjcmVhdGVUcmlnZ2VyIGNyZWF0ZVVuaXQgY3JlYXRlVmVoaWNsZSBjcmVhdGVWZWhpY2xlQ3JldyBjcmVhdGVWZWhpY2xlTG9jYWwgY3JldyBjdEFkZEhlYWRlciBjdEFkZFJvdyBjdENsZWFyIGN0Q3VyU2VsIGN0RGF0YSBjdEZpbmRIZWFkZXJSb3dzIGN0RmluZFJvd0hlYWRlciBjdEhlYWRlckNvbnRyb2xzIGN0SGVhZGVyQ291bnQgY3RSZW1vdmVIZWFkZXJzIGN0UmVtb3ZlUm93cyBjdHJsQWN0aXZhdGUgY3RybEFkZEV2ZW50SGFuZGxlciBjdHJsQW5nbGUgY3RybEF1dG9TY3JvbGxEZWxheSBjdHJsQXV0b1Njcm9sbFJld2luZCBjdHJsQXV0b1Njcm9sbFNwZWVkIGN0cmxDaGVja2VkIGN0cmxDbGFzc05hbWUgY3RybENvbW1pdCBjdHJsQ29tbWl0dGVkIGN0cmxDcmVhdGUgY3RybERlbGV0ZSBjdHJsRW5hYmxlIGN0cmxFbmFibGVkIGN0cmxGYWRlIGN0cmxIVE1MTG9hZGVkIGN0cmxJREMgY3RybElERCBjdHJsTWFwQW5pbUFkZCBjdHJsTWFwQW5pbUNsZWFyIGN0cmxNYXBBbmltQ29tbWl0IGN0cmxNYXBBbmltRG9uZSBjdHJsTWFwQ3Vyc29yIGN0cmxNYXBNb3VzZU92ZXIgY3RybE1hcFNjYWxlIGN0cmxNYXBTY3JlZW5Ub1dvcmxkIGN0cmxNYXBXb3JsZFRvU2NyZWVuIGN0cmxNb2RlbCBjdHJsTW9kZWxEaXJBbmRVcCBjdHJsTW9kZWxTY2FsZSBjdHJsUGFyZW50IGN0cmxQYXJlbnRDb250cm9sc0dyb3VwIGN0cmxQb3NpdGlvbiBjdHJsUmVtb3ZlQWxsRXZlbnRIYW5kbGVycyBjdHJsUmVtb3ZlRXZlbnRIYW5kbGVyIGN0cmxTY2FsZSBjdHJsU2V0QWN0aXZlQ29sb3IgY3RybFNldEFuZ2xlIGN0cmxTZXRBdXRvU2Nyb2xsRGVsYXkgY3RybFNldEF1dG9TY3JvbGxSZXdpbmQgY3RybFNldEF1dG9TY3JvbGxTcGVlZCBjdHJsU2V0QmFja2dyb3VuZENvbG9yIGN0cmxTZXRDaGVja2VkIGN0cmxTZXRFdmVudEhhbmRsZXIgY3RybFNldEZhZGUgY3RybFNldEZvY3VzIGN0cmxTZXRGb250IGN0cmxTZXRGb250SDEgY3RybFNldEZvbnRIMUIgY3RybFNldEZvbnRIMiBjdHJsU2V0Rm9udEgyQiBjdHJsU2V0Rm9udEgzIGN0cmxTZXRGb250SDNCIGN0cmxTZXRGb250SDQgY3RybFNldEZvbnRINEIgY3RybFNldEZvbnRINSBjdHJsU2V0Rm9udEg1QiBjdHJsU2V0Rm9udEg2IGN0cmxTZXRGb250SDZCIGN0cmxTZXRGb250SGVpZ2h0IGN0cmxTZXRGb250SGVpZ2h0SDEgY3RybFNldEZvbnRIZWlnaHRIMiBjdHJsU2V0Rm9udEhlaWdodEgzIGN0cmxTZXRGb250SGVpZ2h0SDQgY3RybFNldEZvbnRIZWlnaHRINSBjdHJsU2V0Rm9udEhlaWdodEg2IGN0cmxTZXRGb250SGVpZ2h0U2Vjb25kYXJ5IGN0cmxTZXRGb250UCBjdHJsU2V0Rm9udFBCIGN0cmxTZXRGb250U2Vjb25kYXJ5IGN0cmxTZXRGb3JlZ3JvdW5kQ29sb3IgY3RybFNldE1vZGVsIGN0cmxTZXRNb2RlbERpckFuZFVwIGN0cmxTZXRNb2RlbFNjYWxlIGN0cmxTZXRQaXhlbFByZWNpc2lvbiBjdHJsU2V0UG9zaXRpb24gY3RybFNldFNjYWxlIGN0cmxTZXRTdHJ1Y3R1cmVkVGV4dCBjdHJsU2V0VGV4dCBjdHJsU2V0VGV4dENvbG9yIGN0cmxTZXRUb29sdGlwIGN0cmxTZXRUb29sdGlwQ29sb3JCb3ggY3RybFNldFRvb2x0aXBDb2xvclNoYWRlIGN0cmxTZXRUb29sdGlwQ29sb3JUZXh0IGN0cmxTaG93IGN0cmxTaG93biBjdHJsVGV4dCBjdHJsVGV4dEhlaWdodCBjdHJsVGV4dFdpZHRoIGN0cmxUeXBlIGN0cmxWaXNpYmxlIGN0Um93Q29udHJvbHMgY3RSb3dDb3VudCBjdFNldEN1clNlbCBjdFNldERhdGEgY3RTZXRIZWFkZXJUZW1wbGF0ZSBjdFNldFJvd1RlbXBsYXRlIGN0U2V0VmFsdWUgY3RWYWx1ZSBjdXJhdG9yQWRkb25zIGN1cmF0b3JDYW1lcmEgY3VyYXRvckNhbWVyYUFyZWEgY3VyYXRvckNhbWVyYUFyZWFDZWlsaW5nIGN1cmF0b3JDb2VmIGN1cmF0b3JFZGl0YWJsZU9iamVjdHMgY3VyYXRvckVkaXRpbmdBcmVhIGN1cmF0b3JFZGl0aW5nQXJlYVR5cGUgY3VyYXRvck1vdXNlT3ZlciBjdXJhdG9yUG9pbnRzIGN1cmF0b3JSZWdpc3RlcmVkT2JqZWN0cyBjdXJhdG9yU2VsZWN0ZWQgY3VyYXRvcldheXBvaW50Q29zdCBjdXJyZW50M0RFTk9wZXJhdGlvbiBjdXJyZW50Q2hhbm5lbCBjdXJyZW50Q29tbWFuZCBjdXJyZW50TWFnYXppbmUgY3VycmVudE1hZ2F6aW5lRGV0YWlsIGN1cnJlbnRNYWdhemluZURldGFpbFR1cnJldCBjdXJyZW50TWFnYXppbmVUdXJyZXQgY3VycmVudE11enpsZSBjdXJyZW50TmFtZXNwYWNlIGN1cnJlbnRUYXNrIGN1cnJlbnRUYXNrcyBjdXJyZW50VGhyb3dhYmxlIGN1cnJlbnRWaXNpb25Nb2RlIGN1cnJlbnRXYXlwb2ludCBjdXJyZW50V2VhcG9uIGN1cnJlbnRXZWFwb25Nb2RlIGN1cnJlbnRXZWFwb25UdXJyZXQgY3VycmVudFplcm9pbmcgY3Vyc29yT2JqZWN0IGN1cnNvclRhcmdldCBjdXN0b21DaGF0IGN1c3RvbVJhZGlvIGN1dEZhZGVPdXQgY3V0T2JqIGN1dFJzYyBjdXRUZXh0IGRhbWFnZSBkYXRlIGRhdGVUb051bWJlciBkYXl0aW1lIGRlQWN0aXZhdGVLZXkgZGVicmllZmluZ1RleHQgZGVidWdGU00gZGVidWdMb2cgZGVnIGRlbGV0ZTNERU5FbnRpdGllcyBkZWxldGVBdCBkZWxldGVDZW50ZXIgZGVsZXRlQ29sbGVjdGlvbiBkZWxldGVFZGl0b3JPYmplY3QgZGVsZXRlR3JvdXAgZGVsZXRlR3JvdXBXaGVuRW1wdHkgZGVsZXRlSWRlbnRpdHkgZGVsZXRlTG9jYXRpb24gZGVsZXRlTWFya2VyIGRlbGV0ZU1hcmtlckxvY2FsIGRlbGV0ZVJhbmdlIGRlbGV0ZVJlc291cmNlcyBkZWxldGVTaXRlIGRlbGV0ZVN0YXR1cyBkZWxldGVUZWFtIGRlbGV0ZVZlaGljbGUgZGVsZXRlVmVoaWNsZUNyZXcgZGVsZXRlV2F5cG9pbnQgZGV0YWNoIGRldGVjdGVkTWluZXMgZGlhZ19hY3RpdmVNaXNzaW9uRlNNcyBkaWFnX2FjdGl2ZVNjcmlwdHMgZGlhZ19hY3RpdmVTUUZTY3JpcHRzIGRpYWdfYWN0aXZlU1FTU2NyaXB0cyBkaWFnX2NhcHR1cmVGcmFtZSBkaWFnX2NhcHR1cmVGcmFtZVRvRmlsZSBkaWFnX2NhcHR1cmVTbG93RnJhbWUgZGlhZ19jb2RlUGVyZm9ybWFuY2UgZGlhZ19kcmF3TW9kZSBkaWFnX2VuYWJsZSBkaWFnX2VuYWJsZWQgZGlhZ19mcHMgZGlhZ19mcHNNaW4gZGlhZ19mcmFtZU5vIGRpYWdfbGlnaHROZXdMb2FkIGRpYWdfbGlzdCBkaWFnX2xvZyBkaWFnX2xvZ1Nsb3dGcmFtZSBkaWFnX21lcmdlQ29uZmlnRmlsZSBkaWFnX3JlY29yZFR1cnJldExpbWl0cyBkaWFnX3NldExpZ2h0TmV3IGRpYWdfdGlja1RpbWUgZGlhZ190b2dnbGUgZGlhbG9nIGRpYXJ5U3ViamVjdEV4aXN0cyBkaWRKSVAgZGlkSklQT3duZXIgZGlmZmljdWx0eSBkaWZmaWN1bHR5RW5hYmxlZCBkaWZmaWN1bHR5RW5hYmxlZFJURCBkaWZmaWN1bHR5T3B0aW9uIGRpcmVjdGlvbiBkaXJlY3RTYXkgZGlzYWJsZUFJIGRpc2FibGVDb2xsaXNpb25XaXRoIGRpc2FibGVDb252ZXJzYXRpb24gZGlzYWJsZURlYnJpZWZpbmdTdGF0cyBkaXNhYmxlTWFwSW5kaWNhdG9ycyBkaXNhYmxlTlZHRXF1aXBtZW50IGRpc2FibGVSZW1vdGVTZW5zb3JzIGRpc2FibGVTZXJpYWxpemF0aW9uIGRpc2FibGVUSUVxdWlwbWVudCBkaXNhYmxlVUFWQ29ubmVjdGFiaWxpdHkgZGlzYWJsZVVzZXJJbnB1dCBkaXNwbGF5QWRkRXZlbnRIYW5kbGVyIGRpc3BsYXlDdHJsIGRpc3BsYXlQYXJlbnQgZGlzcGxheVJlbW92ZUFsbEV2ZW50SGFuZGxlcnMgZGlzcGxheVJlbW92ZUV2ZW50SGFuZGxlciBkaXNwbGF5U2V0RXZlbnRIYW5kbGVyIGRpc3NvbHZlVGVhbSBkaXN0YW5jZSBkaXN0YW5jZTJEIGRpc3RhbmNlU3FyIGRpc3RyaWJ1dGlvblJlZ2lvbiBkbzNERU5BY3Rpb24gZG9BcnRpbGxlcnlGaXJlIGRvRmlyZSBkb0ZvbGxvdyBkb0ZTTSBkb0dldE91dCBkb01vdmUgZG9vclBoYXNlIGRvU3RvcCBkb1N1cHByZXNzaXZlRmlyZSBkb1RhcmdldCBkb1dhdGNoIGRyYXdBcnJvdyBkcmF3RWxsaXBzZSBkcmF3SWNvbiBkcmF3SWNvbjNEIGRyYXdMaW5lIGRyYXdMaW5lM0QgZHJhd0xpbmsgZHJhd0xvY2F0aW9uIGRyYXdQb2x5Z29uIGRyYXdSZWN0YW5nbGUgZHJhd1RyaWFuZ2xlIGRyaXZlciBkcm9wIGR5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2UgZHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZUNvZWYgZHluYW1pY1NpbXVsYXRpb25FbmFibGVkIGR5bmFtaWNTaW11bGF0aW9uU3lzdGVtRW5hYmxlZCBlY2hvIGVkaXQzREVOTWlzc2lvbkF0dHJpYnV0ZXMgZWRpdE9iamVjdCBlZGl0b3JTZXRFdmVudEhhbmRsZXIgZWZmZWN0aXZlQ29tbWFuZGVyIGVtcHR5UG9zaXRpb25zIGVuYWJsZUFJIGVuYWJsZUFJRmVhdHVyZSBlbmFibGVBaW1QcmVjaXNpb24gZW5hYmxlQXR0YWNrIGVuYWJsZUF1ZGlvRmVhdHVyZSBlbmFibGVBdXRvU3RhcnRVcFJURCBlbmFibGVBdXRvVHJpbVJURCBlbmFibGVDYW1TaGFrZSBlbmFibGVDYXVzdGljcyBlbmFibGVDaGFubmVsIGVuYWJsZUNvbGxpc2lvbldpdGggZW5hYmxlQ29waWxvdCBlbmFibGVEZWJyaWVmaW5nU3RhdHMgZW5hYmxlRGlhZ0xlZ2VuZCBlbmFibGVEeW5hbWljU2ltdWxhdGlvbiBlbmFibGVEeW5hbWljU2ltdWxhdGlvblN5c3RlbSBlbmFibGVFbmREaWFsb2cgZW5hYmxlRW5naW5lQXJ0aWxsZXJ5IGVuYWJsZUVudmlyb25tZW50IGVuYWJsZUZhdGlndWUgZW5hYmxlR3VuTGlnaHRzIGVuYWJsZUluZm9QYW5lbENvbXBvbmVudCBlbmFibGVJUkxhc2VycyBlbmFibGVNaW1pY3MgZW5hYmxlUGVyc29uVHVycmV0IGVuYWJsZVJhZGlvIGVuYWJsZVJlbG9hZCBlbmFibGVSb3BlQXR0YWNoIGVuYWJsZVNhdE5vcm1hbE9uRGV0YWlsIGVuYWJsZVNhdmluZyBlbmFibGVTZW50ZW5jZXMgZW5hYmxlU2ltdWxhdGlvbiBlbmFibGVTaW11bGF0aW9uR2xvYmFsIGVuYWJsZVN0YW1pbmEgZW5hYmxlVGVhbVN3aXRjaCBlbmFibGVUcmFmZmljIGVuYWJsZVVBVkNvbm5lY3RhYmlsaXR5IGVuYWJsZVVBVldheXBvaW50cyBlbmFibGVWZWhpY2xlQ2FyZ28gZW5hYmxlVmVoaWNsZVNlbnNvciBlbmFibGVXZWFwb25EaXNhc3NlbWJseSBlbmRMb2FkaW5nU2NyZWVuIGVuZE1pc3Npb24gZW5naW5lT24gZW5naW5lc0lzT25SVEQgZW5naW5lc1JwbVJURCBlbmdpbmVzVG9ycXVlUlREIGVudGl0aWVzIGVudmlyb25tZW50RW5hYmxlZCBlc3RpbWF0ZWRFbmRTZXJ2ZXJUaW1lIGVzdGltYXRlZFRpbWVMZWZ0IGV2YWxPYmplY3RBcmd1bWVudCBldmVyeUJhY2twYWNrIGV2ZXJ5Q29udGFpbmVyIGV4ZWMgZXhlY0VkaXRvclNjcmlwdCBleGVjRlNNIGV4ZWNWTSBleHAgZXhwZWN0ZWREZXN0aW5hdGlvbiBleHBvcnRKSVBNZXNzYWdlcyBleWVEaXJlY3Rpb24gZXllUG9zIGZhY2UgZmFjdGlvbiBmYWRlTXVzaWMgZmFkZVJhZGlvIGZhZGVTb3VuZCBmYWRlU3BlZWNoIGZhaWxNaXNzaW9uIGZpbGxXZWFwb25zRnJvbVBvb2wgZmluZCBmaW5kQ292ZXIgZmluZERpc3BsYXkgZmluZEVkaXRvck9iamVjdCBmaW5kRW1wdHlQb3NpdGlvbiBmaW5kRW1wdHlQb3NpdGlvblJlYWR5IGZpbmRJZiBmaW5kTmVhcmVzdEVuZW15IGZpbmlzaE1pc3Npb25Jbml0IGZpbml0ZSBmaXJlIGZpcmVBdFRhcmdldCBmaXJzdEJhY2twYWNrIGZsYWcgZmxhZ0FuaW1hdGlvblBoYXNlIGZsYWdPd25lciBmbGFnU2lkZSBmbGFnVGV4dHVyZSBmbGVlaW5nIGZsb29yIGZseUluSGVpZ2h0IGZseUluSGVpZ2h0QVNMIGZvZyBmb2dGb3JlY2FzdCBmb2dQYXJhbXMgZm9yY2VBZGRVbmlmb3JtIGZvcmNlZE1hcCBmb3JjZUVuZCBmb3JjZUZsYWdUZXh0dXJlIGZvcmNlRm9sbG93Um9hZCBmb3JjZU1hcCBmb3JjZVJlc3Bhd24gZm9yY2VTcGVlZCBmb3JjZVdhbGsgZm9yY2VXZWFwb25GaXJlIGZvcmNlV2VhdGhlckNoYW5nZSBmb3JFYWNoTWVtYmVyIGZvckVhY2hNZW1iZXJBZ2VudCBmb3JFYWNoTWVtYmVyVGVhbSBmb3JnZXRUYXJnZXQgZm9ybWF0IGZvcm1hdGlvbiBmb3JtYXRpb25EaXJlY3Rpb24gZm9ybWF0aW9uTGVhZGVyIGZvcm1hdGlvbk1lbWJlcnMgZm9ybWF0aW9uUG9zaXRpb24gZm9ybWF0aW9uVGFzayBmb3JtYXRUZXh0IGZvcm1MZWFkZXIgZnJlZUxvb2sgZnJvbUVkaXRvciBmdWVsIGZ1bGxDcmV3IGdlYXJJRENBbW1vQ291bnQgZ2VhclNsb3RBbW1vQ291bnQgZ2VhclNsb3REYXRhIGdldDNERU5BY3Rpb25TdGF0ZSBnZXQzREVOQXR0cmlidXRlIGdldDNERU5DYW1lcmEgZ2V0M0RFTkNvbm5lY3Rpb25zIGdldDNERU5FbnRpdHkgZ2V0M0RFTkVudGl0eUlEIGdldDNERU5HcmlkIGdldDNERU5JY29uc1Zpc2libGUgZ2V0M0RFTkxheWVyRW50aXRpZXMgZ2V0M0RFTkxpbmVzVmlzaWJsZSBnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZSBnZXQzREVOTW91c2VPdmVyIGdldDNERU5TZWxlY3RlZCBnZXRBaW1pbmdDb2VmIGdldEFsbEVudlNvdW5kQ29udHJvbGxlcnMgZ2V0QWxsSGl0UG9pbnRzRGFtYWdlIGdldEFsbE93bmVkTWluZXMgZ2V0QWxsU291bmRDb250cm9sbGVycyBnZXRBbW1vQ2FyZ28gZ2V0QW5pbUFpbVByZWNpc2lvbiBnZXRBbmltU3BlZWRDb2VmIGdldEFycmF5IGdldEFydGlsbGVyeUFtbW8gZ2V0QXJ0aWxsZXJ5Q29tcHV0ZXJTZXR0aW5ncyBnZXRBcnRpbGxlcnlFVEEgZ2V0QXNzaWduZWRDdXJhdG9yTG9naWMgZ2V0QXNzaWduZWRDdXJhdG9yVW5pdCBnZXRCYWNrcGFja0NhcmdvIGdldEJsZWVkaW5nUmVtYWluaW5nIGdldEJ1cm5pbmdWYWx1ZSBnZXRDYW1lcmFWaWV3RGlyZWN0aW9uIGdldENhcmdvSW5kZXggZ2V0Q2VudGVyT2ZNYXNzIGdldENsaWVudFN0YXRlIGdldENsaWVudFN0YXRlTnVtYmVyIGdldENvbXBhdGlibGVQeWxvbk1hZ2F6aW5lcyBnZXRDb25uZWN0ZWRVQVYgZ2V0Q29udGFpbmVyTWF4TG9hZCBnZXRDdXJzb3JPYmplY3RQYXJhbXMgZ2V0Q3VzdG9tQWltQ29lZiBnZXREYW1tYWdlIGdldERlc2NyaXB0aW9uIGdldERpciBnZXREaXJWaXN1YWwgZ2V0RExDQXNzZXRzVXNhZ2UgZ2V0RExDQXNzZXRzVXNhZ2VCeU5hbWUgZ2V0RExDcyBnZXRFZGl0b3JDYW1lcmEgZ2V0RWRpdG9yTW9kZSBnZXRFZGl0b3JPYmplY3RTY29wZSBnZXRFbGV2YXRpb25PZmZzZXQgZ2V0RW52U291bmRDb250cm9sbGVyIGdldEZhdGlndWUgZ2V0Rm9yY2VkRmxhZ1RleHR1cmUgZ2V0RnJpZW5kIGdldEZTTVZhcmlhYmxlIGdldEZ1ZWxDYXJnbyBnZXRHcm91cEljb24gZ2V0R3JvdXBJY29uUGFyYW1zIGdldEdyb3VwSWNvbnMgZ2V0SGlkZUZyb20gZ2V0SGl0IGdldEhpdEluZGV4IGdldEhpdFBvaW50RGFtYWdlIGdldEl0ZW1DYXJnbyBnZXRNYWdhemluZUNhcmdvIGdldE1hcmtlckNvbG9yIGdldE1hcmtlclBvcyBnZXRNYXJrZXJTaXplIGdldE1hcmtlclR5cGUgZ2V0TWFzcyBnZXRNaXNzaW9uQ29uZmlnIGdldE1pc3Npb25Db25maWdWYWx1ZSBnZXRNaXNzaW9uRExDcyBnZXRNaXNzaW9uTGF5ZXJFbnRpdGllcyBnZXRNb2RlbEluZm8gZ2V0TW91c2VQb3NpdGlvbiBnZXRNdXNpY1BsYXllZFRpbWUgZ2V0TnVtYmVyIGdldE9iamVjdEFyZ3VtZW50IGdldE9iamVjdENoaWxkcmVuIGdldE9iamVjdERMQyBnZXRPYmplY3RNYXRlcmlhbHMgZ2V0T2JqZWN0UHJveHkgZ2V0T2JqZWN0VGV4dHVyZXMgZ2V0T2JqZWN0VHlwZSBnZXRPYmplY3RWaWV3RGlzdGFuY2UgZ2V0T3h5Z2VuUmVtYWluaW5nIGdldFBlcnNvblVzZWRETENzIGdldFBpbG90Q2FtZXJhRGlyZWN0aW9uIGdldFBpbG90Q2FtZXJhUG9zaXRpb24gZ2V0UGlsb3RDYW1lcmFSb3RhdGlvbiBnZXRQaWxvdENhbWVyYVRhcmdldCBnZXRQbGF0ZU51bWJlciBnZXRQbGF5ZXJDaGFubmVsIGdldFBsYXllclNjb3JlcyBnZXRQbGF5ZXJVSUQgZ2V0UG9zIGdldFBvc0FTTCBnZXRQb3NBU0xWaXN1YWwgZ2V0UG9zQVNMVyBnZXRQb3NBVEwgZ2V0UG9zQVRMVmlzdWFsIGdldFBvc1Zpc3VhbCBnZXRQb3NXb3JsZCBnZXRQeWxvbk1hZ2F6aW5lcyBnZXRSZWxEaXIgZ2V0UmVsUG9zIGdldFJlbW90ZVNlbnNvcnNEaXNhYmxlZCBnZXRSZXBhaXJDYXJnbyBnZXRSZXNvbHV0aW9uIGdldFNoYWRvd0Rpc3RhbmNlIGdldFNob3RQYXJlbnRzIGdldFNsaW5nTG9hZCBnZXRTb3VuZENvbnRyb2xsZXIgZ2V0U291bmRDb250cm9sbGVyUmVzdWx0IGdldFNwZWVkIGdldFN0YW1pbmEgZ2V0U3RhdFZhbHVlIGdldFN1cHByZXNzaW9uIGdldFRlcnJhaW5HcmlkIGdldFRlcnJhaW5IZWlnaHRBU0wgZ2V0VGV4dCBnZXRUb3RhbERMQ1VzYWdlVGltZSBnZXRVbml0TG9hZG91dCBnZXRVbml0VHJhaXQgZ2V0VXNlck1GRFRleHQgZ2V0VXNlck1GRHZhbHVlIGdldFZhcmlhYmxlIGdldFZlaGljbGVDYXJnbyBnZXRXZWFwb25DYXJnbyBnZXRXZWFwb25Td2F5IGdldFdpbmdzT3JpZW50YXRpb25SVEQgZ2V0V2luZ3NQb3NpdGlvblJURCBnZXRXUFBvcyBnbGFuY2VBdCBnbG9iYWxDaGF0IGdsb2JhbFJhZGlvIGdvZ2dsZXMgZ290byBncm91cCBncm91cENoYXQgZ3JvdXBGcm9tTmV0SWQgZ3JvdXBJY29uU2VsZWN0YWJsZSBncm91cEljb25zVmlzaWJsZSBncm91cElkIGdyb3VwT3duZXIgZ3JvdXBSYWRpbyBncm91cFNlbGVjdGVkVW5pdHMgZ3JvdXBTZWxlY3RVbml0IGd1bm5lciBndXN0cyBoYWx0IGhhbmRndW5JdGVtcyBoYW5kZ3VuTWFnYXppbmUgaGFuZGd1bldlYXBvbiBoYW5kc0hpdCBoYXNJbnRlcmZhY2UgaGFzUGlsb3RDYW1lcmEgaGFzV2VhcG9uIGhjQWxsR3JvdXBzIGhjR3JvdXBQYXJhbXMgaGNMZWFkZXIgaGNSZW1vdmVBbGxHcm91cHMgaGNSZW1vdmVHcm91cCBoY1NlbGVjdGVkIGhjU2VsZWN0R3JvdXAgaGNTZXRHcm91cCBoY1Nob3dCYXIgaGNTaG93bkJhciBoZWFkZ2VhciBoaWRlQm9keSBoaWRlT2JqZWN0IGhpZGVPYmplY3RHbG9iYWwgaGlkZVNlbGVjdGlvbiBoaW50IGhpbnRDIGhpbnRDYWRldCBoaW50U2lsZW50IGhtZCBob3N0TWlzc2lvbiBodG1sTG9hZCBIVURNb3ZlbWVudExldmVscyBodW1pZGl0eSBpbWFnZSBpbXBvcnRBbGxHcm91cHMgaW1wb3J0YW5jZSBpbiBpbkFyZWEgaW5BcmVhQXJyYXkgaW5jYXBhY2l0YXRlZFN0YXRlIGluZmxhbWUgaW5mbGFtZWQgaW5mb1BhbmVsIGluZm9QYW5lbENvbXBvbmVudEVuYWJsZWQgaW5mb1BhbmVsQ29tcG9uZW50cyBpbmZvUGFuZWxzIGluR2FtZVVJU2V0RXZlbnRIYW5kbGVyIGluaGVyaXRzRnJvbSBpbml0QW1iaWVudExpZmUgaW5Qb2x5Z29uIGlucHV0QWN0aW9uIGluUmFuZ2VPZkFydGlsbGVyeSBpbnNlcnRFZGl0b3JPYmplY3QgaW50ZXJzZWN0IGlzM0RFTiBpczNERU5NdWx0aXBsYXllciBpc0FibGVUb0JyZWF0aGUgaXNBZ2VudCBpc0FycmF5IGlzQXV0b0hvdmVyT24gaXNBdXRvbm9tb3VzIGlzQXV0b3Rlc3QgaXNCbGVlZGluZyBpc0J1cm5pbmcgaXNDbGFzcyBpc0NvbGxpc2lvbkxpZ2h0T24gaXNDb3BpbG90RW5hYmxlZCBpc0RhbWFnZUFsbG93ZWQgaXNEZWRpY2F0ZWQgaXNETENBdmFpbGFibGUgaXNFbmdpbmVPbiBpc0VxdWFsVG8gaXNFcXVhbFR5cGUgaXNFcXVhbFR5cGVBbGwgaXNFcXVhbFR5cGVBbnkgaXNFcXVhbFR5cGVBcnJheSBpc0VxdWFsVHlwZVBhcmFtcyBpc0ZpbGVQYXRjaGluZ0VuYWJsZWQgaXNGbGFzaGxpZ2h0T24gaXNGbGF0RW1wdHkgaXNGb3JjZWRXYWxrIGlzRm9ybWF0aW9uTGVhZGVyIGlzR3JvdXBEZWxldGVkV2hlbkVtcHR5IGlzSGlkZGVuIGlzSW5SZW1haW5zQ29sbGVjdG9yIGlzSW5zdHJ1Y3RvckZpZ3VyZUVuYWJsZWQgaXNJUkxhc2VyT24gaXNLZXlBY3RpdmUgaXNLaW5kT2YgaXNMYXNlck9uIGlzTGlnaHRPbiBpc0xvY2FsaXplZCBpc01hbnVhbEZpcmUgaXNNYXJrZWRGb3JDb2xsZWN0aW9uIGlzTXVsdGlwbGF5ZXIgaXNNdWx0aXBsYXllclNvbG8gaXNOaWwgaXNOdWxsIGlzTnVtYmVyIGlzT2JqZWN0SGlkZGVuIGlzT2JqZWN0UlREIGlzT25Sb2FkIGlzUGlwRW5hYmxlZCBpc1BsYXllciBpc1JlYWxUaW1lIGlzUmVtb3RlRXhlY3V0ZWQgaXNSZW1vdGVFeGVjdXRlZEpJUCBpc1NlcnZlciBpc1Nob3dpbmczREljb25zIGlzU2ltcGxlT2JqZWN0IGlzU3ByaW50QWxsb3dlZCBpc1N0YW1pbmFFbmFibGVkIGlzU3RlYW1NaXNzaW9uIGlzU3RyZWFtRnJpZW5kbHlVSUVuYWJsZWQgaXNUZXh0IGlzVG91Y2hpbmdHcm91bmQgaXNUdXJuZWRPdXQgaXNUdXRIaW50c0VuYWJsZWQgaXNVQVZDb25uZWN0YWJsZSBpc1VBVkNvbm5lY3RlZCBpc1VJQ29udGV4dCBpc1VuaWZvcm1BbGxvd2VkIGlzVmVoaWNsZUNhcmdvIGlzVmVoaWNsZVJhZGFyT24gaXNWZWhpY2xlU2Vuc29yRW5hYmxlZCBpc1dhbGtpbmcgaXNXZWFwb25EZXBsb3llZCBpc1dlYXBvblJlc3RlZCBpdGVtQ2FyZ28gaXRlbXMgaXRlbXNXaXRoTWFnYXppbmVzIGpvaW4gam9pbkFzIGpvaW5Bc1NpbGVudCBqb2luU2lsZW50IGpvaW5TdHJpbmcga2JBZGREYXRhYmFzZSBrYkFkZERhdGFiYXNlVGFyZ2V0cyBrYkFkZFRvcGljIGtiSGFzVG9waWMga2JSZWFjdCBrYlJlbW92ZVRvcGljIGtiVGVsbCBrYldhc1NhaWQga2V5SW1hZ2Uga2V5TmFtZSBrbm93c0Fib3V0IGxhbmQgbGFuZEF0IGxhbmRSZXN1bHQgbGFuZ3VhZ2UgbGFzZXJUYXJnZXQgbGJBZGQgbGJDbGVhciBsYkNvbG9yIGxiQ29sb3JSaWdodCBsYkN1clNlbCBsYkRhdGEgbGJEZWxldGUgbGJJc1NlbGVjdGVkIGxiUGljdHVyZSBsYlBpY3R1cmVSaWdodCBsYlNlbGVjdGlvbiBsYlNldENvbG9yIGxiU2V0Q29sb3JSaWdodCBsYlNldEN1clNlbCBsYlNldERhdGEgbGJTZXRQaWN0dXJlIGxiU2V0UGljdHVyZUNvbG9yIGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWQgbGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCBsYlNldFBpY3R1cmVSaWdodCBsYlNldFBpY3R1cmVSaWdodENvbG9yIGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZCBsYlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWQgbGJTZXRTZWxlY3RDb2xvciBsYlNldFNlbGVjdENvbG9yUmlnaHQgbGJTZXRTZWxlY3RlZCBsYlNldFRleHQgbGJTZXRUZXh0UmlnaHQgbGJTZXRUb29sdGlwIGxiU2V0VmFsdWUgbGJTaXplIGxiU29ydCBsYlNvcnRCeVZhbHVlIGxiVGV4dCBsYlRleHRSaWdodCBsYlZhbHVlIGxlYWRlciBsZWFkZXJib2FyZERlSW5pdCBsZWFkZXJib2FyZEdldFJvd3MgbGVhZGVyYm9hcmRJbml0IGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NGcmllbmRzIGxlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZSBsZWFkZXJib2FyZHNSZXF1ZXN0VXBsb2FkU2NvcmVLZWVwQmVzdCBsZWFkZXJib2FyZFN0YXRlIGxlYXZlVmVoaWNsZSBsaWJyYXJ5Q3JlZGl0cyBsaWJyYXJ5RGlzY2xhaW1lcnMgbGlmZVN0YXRlIGxpZ2h0QXR0YWNoT2JqZWN0IGxpZ2h0RGV0YWNoT2JqZWN0IGxpZ2h0SXNPbiBsaWdodG5pbmdzIGxpbWl0U3BlZWQgbGluZWFyQ29udmVyc2lvbiBsaW5lSW50ZXJzZWN0cyBsaW5lSW50ZXJzZWN0c09ianMgbGluZUludGVyc2VjdHNTdXJmYWNlcyBsaW5lSW50ZXJzZWN0c1dpdGggbGlua0l0ZW0gbGlzdCBsaXN0T2JqZWN0cyBsaXN0UmVtb3RlVGFyZ2V0cyBsaXN0VmVoaWNsZVNlbnNvcnMgbG4gbG5iQWRkQXJyYXkgbG5iQWRkQ29sdW1uIGxuYkFkZFJvdyBsbmJDbGVhciBsbmJDb2xvciBsbmJDdXJTZWxSb3cgbG5iRGF0YSBsbmJEZWxldGVDb2x1bW4gbG5iRGVsZXRlUm93IGxuYkdldENvbHVtbnNQb3NpdGlvbiBsbmJQaWN0dXJlIGxuYlNldENvbG9yIGxuYlNldENvbHVtbnNQb3MgbG5iU2V0Q3VyU2VsUm93IGxuYlNldERhdGEgbG5iU2V0UGljdHVyZSBsbmJTZXRUZXh0IGxuYlNldFZhbHVlIGxuYlNpemUgbG5iU29ydCBsbmJTb3J0QnlWYWx1ZSBsbmJUZXh0IGxuYlZhbHVlIGxvYWQgbG9hZEFicyBsb2FkQmFja3BhY2sgbG9hZEZpbGUgbG9hZEdhbWUgbG9hZElkZW50aXR5IGxvYWRNYWdhemluZSBsb2FkT3ZlcmxheSBsb2FkU3RhdHVzIGxvYWRVbmlmb3JtIGxvYWRWZXN0IGxvY2FsIGxvY2FsaXplIGxvY2F0aW9uUG9zaXRpb24gbG9jayBsb2NrQ2FtZXJhVG8gbG9ja0NhcmdvIGxvY2tEcml2ZXIgbG9ja2VkIGxvY2tlZENhcmdvIGxvY2tlZERyaXZlciBsb2NrZWRUdXJyZXQgbG9ja0lkZW50aXR5IGxvY2tUdXJyZXQgbG9ja1dQIGxvZyBsb2dFbnRpdGllcyBsb2dOZXR3b3JrIGxvZ05ldHdvcmtUZXJtaW5hdGUgbG9va0F0IGxvb2tBdFBvcyBtYWdhemluZUNhcmdvIG1hZ2F6aW5lcyBtYWdhemluZXNBbGxUdXJyZXRzIG1hZ2F6aW5lc0FtbW8gbWFnYXppbmVzQW1tb0NhcmdvIG1hZ2F6aW5lc0FtbW9GdWxsIG1hZ2F6aW5lc0RldGFpbCBtYWdhemluZXNEZXRhaWxCYWNrcGFjayBtYWdhemluZXNEZXRhaWxVbmlmb3JtIG1hZ2F6aW5lc0RldGFpbFZlc3QgbWFnYXppbmVzVHVycmV0IG1hZ2F6aW5lVHVycmV0QW1tbyBtYXBBbmltQWRkIG1hcEFuaW1DbGVhciBtYXBBbmltQ29tbWl0IG1hcEFuaW1Eb25lIG1hcENlbnRlck9uQ2FtZXJhIG1hcEdyaWRQb3NpdGlvbiBtYXJrQXNGaW5pc2hlZE9uU3RlYW0gbWFya2VyQWxwaGEgbWFya2VyQnJ1c2ggbWFya2VyQ29sb3IgbWFya2VyRGlyIG1hcmtlclBvcyBtYXJrZXJTaGFwZSBtYXJrZXJTaXplIG1hcmtlclRleHQgbWFya2VyVHlwZSBtYXggbWVtYmVycyBtZW51QWN0aW9uIG1lbnVBZGQgbWVudUNoZWNrZWQgbWVudUNsZWFyIG1lbnVDb2xsYXBzZSBtZW51RGF0YSBtZW51RGVsZXRlIG1lbnVFbmFibGUgbWVudUVuYWJsZWQgbWVudUV4cGFuZCBtZW51SG92ZXIgbWVudVBpY3R1cmUgbWVudVNldEFjdGlvbiBtZW51U2V0Q2hlY2sgbWVudVNldERhdGEgbWVudVNldFBpY3R1cmUgbWVudVNldFZhbHVlIG1lbnVTaG9ydGN1dCBtZW51U2hvcnRjdXRUZXh0IG1lbnVTaXplIG1lbnVTb3J0IG1lbnVUZXh0IG1lbnVVUkwgbWVudVZhbHVlIG1pbiBtaW5lQWN0aXZlIG1pbmVEZXRlY3RlZEJ5IG1pc3Npb25Db25maWdGaWxlIG1pc3Npb25EaWZmaWN1bHR5IG1pc3Npb25OYW1lIG1pc3Npb25OYW1lc3BhY2UgbWlzc2lvblN0YXJ0IG1pc3Npb25WZXJzaW9uIG1vZCBtb2RlbFRvV29ybGQgbW9kZWxUb1dvcmxkVmlzdWFsIG1vZGVsVG9Xb3JsZFZpc3VhbFdvcmxkIG1vZGVsVG9Xb3JsZFdvcmxkIG1vZFBhcmFtcyBtb29uSW50ZW5zaXR5IG1vb25QaGFzZSBtb3JhbGUgbW92ZSBtb3ZlM0RFTkNhbWVyYSBtb3ZlSW5BbnkgbW92ZUluQ2FyZ28gbW92ZUluQ29tbWFuZGVyIG1vdmVJbkRyaXZlciBtb3ZlSW5HdW5uZXIgbW92ZUluVHVycmV0IG1vdmVPYmplY3RUb0VuZCBtb3ZlT3V0IG1vdmVUaW1lIG1vdmVUbyBtb3ZlVG9Db21wbGV0ZWQgbW92ZVRvRmFpbGVkIG11c2ljVm9sdW1lIG5hbWUgbmFtZVNvdW5kIG5lYXJFbnRpdGllcyBuZWFyZXN0QnVpbGRpbmcgbmVhcmVzdExvY2F0aW9uIG5lYXJlc3RMb2NhdGlvbnMgbmVhcmVzdExvY2F0aW9uV2l0aER1YmJpbmcgbmVhcmVzdE9iamVjdCBuZWFyZXN0T2JqZWN0cyBuZWFyZXN0VGVycmFpbk9iamVjdHMgbmVhck9iamVjdHMgbmVhck9iamVjdHNSZWFkeSBuZWFyUm9hZHMgbmVhclN1cHBsaWVzIG5lYXJUYXJnZXRzIG5lZWRSZWxvYWQgbmV0SWQgbmV0T2JqTnVsbCBuZXdPdmVybGF5IG5leHRNZW51SXRlbUluZGV4IG5leHRXZWF0aGVyQ2hhbmdlIG5NZW51SXRlbXMgbm90IG51bWJlck9mRW5naW5lc1JURCBudW1iZXJUb0RhdGUgb2JqZWN0Q3VyYXRvcnMgb2JqZWN0RnJvbU5ldElkIG9iamVjdFBhcmVudCBvYmpTdGF0dXMgb25CcmllZmluZ0dyb3VwIG9uQnJpZWZpbmdOb3RlcyBvbkJyaWVmaW5nUGxhbiBvbkJyaWVmaW5nVGVhbVN3aXRjaCBvbkNvbW1hbmRNb2RlQ2hhbmdlZCBvbkRvdWJsZUNsaWNrIG9uRWFjaEZyYW1lIG9uR3JvdXBJY29uQ2xpY2sgb25Hcm91cEljb25PdmVyRW50ZXIgb25Hcm91cEljb25PdmVyTGVhdmUgb25IQ0dyb3VwU2VsZWN0aW9uQ2hhbmdlZCBvbk1hcFNpbmdsZUNsaWNrIG9uUGxheWVyQ29ubmVjdGVkIG9uUGxheWVyRGlzY29ubmVjdGVkIG9uUHJlbG9hZEZpbmlzaGVkIG9uUHJlbG9hZFN0YXJ0ZWQgb25TaG93TmV3T2JqZWN0IG9uVGVhbVN3aXRjaCBvcGVuQ3VyYXRvckludGVyZmFjZSBvcGVuRExDUGFnZSBvcGVuTWFwIG9wZW5TdGVhbUFwcCBvcGVuWW91dHViZVZpZGVvIG9yIG9yZGVyR2V0SW4gb3ZlcmNhc3Qgb3ZlcmNhc3RGb3JlY2FzdCBvd25lciBwYXJhbSBwYXJhbXMgcGFyc2VOdW1iZXIgcGFyc2VTaW1wbGVBcnJheSBwYXJzZVRleHQgcGFyc2luZ05hbWVzcGFjZSBwYXJ0aWNsZXNRdWFsaXR5IHBpY2tXZWFwb25Qb29sIHBpdGNoIHBpeGVsR3JpZCBwaXhlbEdyaWRCYXNlIHBpeGVsR3JpZE5vVUlTY2FsZSBwaXhlbEggcGl4ZWxXIHBsYXlhYmxlU2xvdHNOdW1iZXIgcGxheWFibGVVbml0cyBwbGF5QWN0aW9uIHBsYXlBY3Rpb25Ob3cgcGxheWVyIHBsYXllclJlc3Bhd25UaW1lIHBsYXllclNpZGUgcGxheWVyc051bWJlciBwbGF5R2VzdHVyZSBwbGF5TWlzc2lvbiBwbGF5TW92ZSBwbGF5TW92ZU5vdyBwbGF5TXVzaWMgcGxheVNjcmlwdGVkTWlzc2lvbiBwbGF5U291bmQgcGxheVNvdW5kM0QgcG9zaXRpb24gcG9zaXRpb25DYW1lcmFUb1dvcmxkIHBvc1NjcmVlblRvV29ybGQgcG9zV29ybGRUb1NjcmVlbiBwcEVmZmVjdEFkanVzdCBwcEVmZmVjdENvbW1pdCBwcEVmZmVjdENvbW1pdHRlZCBwcEVmZmVjdENyZWF0ZSBwcEVmZmVjdERlc3Ryb3kgcHBFZmZlY3RFbmFibGUgcHBFZmZlY3RFbmFibGVkIHBwRWZmZWN0Rm9yY2VJbk5WRyBwcmVjaXNpb24gcHJlbG9hZENhbWVyYSBwcmVsb2FkT2JqZWN0IHByZWxvYWRTb3VuZCBwcmVsb2FkVGl0bGVPYmogcHJlbG9hZFRpdGxlUnNjIHByZXByb2Nlc3NGaWxlIHByZXByb2Nlc3NGaWxlTGluZU51bWJlcnMgcHJpbWFyeVdlYXBvbiBwcmltYXJ5V2VhcG9uSXRlbXMgcHJpbWFyeVdlYXBvbk1hZ2F6aW5lIHByaW9yaXR5IHByb2Nlc3NEaWFyeUxpbmsgcHJvZHVjdFZlcnNpb24gcHJvZmlsZU5hbWUgcHJvZmlsZU5hbWVzcGFjZSBwcm9maWxlTmFtZVN0ZWFtIHByb2dyZXNzTG9hZGluZ1NjcmVlbiBwcm9ncmVzc1Bvc2l0aW9uIHByb2dyZXNzU2V0UG9zaXRpb24gcHVibGljVmFyaWFibGUgcHVibGljVmFyaWFibGVDbGllbnQgcHVibGljVmFyaWFibGVTZXJ2ZXIgcHVzaEJhY2sgcHVzaEJhY2tVbmlxdWUgcHV0V2VhcG9uUG9vbCBxdWVyeUl0ZW1zUG9vbCBxdWVyeU1hZ2F6aW5lUG9vbCBxdWVyeVdlYXBvblBvb2wgcmFkIHJhZGlvQ2hhbm5lbEFkZCByYWRpb0NoYW5uZWxDcmVhdGUgcmFkaW9DaGFubmVsUmVtb3ZlIHJhZGlvQ2hhbm5lbFNldENhbGxTaWduIHJhZGlvQ2hhbm5lbFNldExhYmVsIHJhZGlvVm9sdW1lIHJhaW4gcmFpbmJvdyByYW5kb20gcmFuayByYW5rSWQgcmF0aW5nIHJlY3Rhbmd1bGFyIHJlZ2lzdGVyZWRUYXNrcyByZWdpc3RlclRhc2sgcmVsb2FkIHJlbG9hZEVuYWJsZWQgcmVtb3RlQ29udHJvbCByZW1vdGVFeGVjIHJlbW90ZUV4ZWNDYWxsIHJlbW90ZUV4ZWN1dGVkT3duZXIgcmVtb3ZlM0RFTkNvbm5lY3Rpb24gcmVtb3ZlM0RFTkV2ZW50SGFuZGxlciByZW1vdmUzREVOTGF5ZXIgcmVtb3ZlQWN0aW9uIHJlbW92ZUFsbDNERU5FdmVudEhhbmRsZXJzIHJlbW92ZUFsbEFjdGlvbnMgcmVtb3ZlQWxsQXNzaWduZWRJdGVtcyByZW1vdmVBbGxDb250YWluZXJzIHJlbW92ZUFsbEN1cmF0b3JBZGRvbnMgcmVtb3ZlQWxsQ3VyYXRvckNhbWVyYUFyZWFzIHJlbW92ZUFsbEN1cmF0b3JFZGl0aW5nQXJlYXMgcmVtb3ZlQWxsRXZlbnRIYW5kbGVycyByZW1vdmVBbGxIYW5kZ3VuSXRlbXMgcmVtb3ZlQWxsSXRlbXMgcmVtb3ZlQWxsSXRlbXNXaXRoTWFnYXppbmVzIHJlbW92ZUFsbE1pc3Npb25FdmVudEhhbmRsZXJzIHJlbW92ZUFsbE1QRXZlbnRIYW5kbGVycyByZW1vdmVBbGxNdXNpY0V2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsT3duZWRNaW5lcyByZW1vdmVBbGxQcmltYXJ5V2VhcG9uSXRlbXMgcmVtb3ZlQWxsV2VhcG9ucyByZW1vdmVCYWNrcGFjayByZW1vdmVCYWNrcGFja0dsb2JhbCByZW1vdmVDdXJhdG9yQWRkb25zIHJlbW92ZUN1cmF0b3JDYW1lcmFBcmVhIHJlbW92ZUN1cmF0b3JFZGl0YWJsZU9iamVjdHMgcmVtb3ZlQ3VyYXRvckVkaXRpbmdBcmVhIHJlbW92ZURyYXdJY29uIHJlbW92ZURyYXdMaW5rcyByZW1vdmVFdmVudEhhbmRsZXIgcmVtb3ZlRnJvbVJlbWFpbnNDb2xsZWN0b3IgcmVtb3ZlR29nZ2xlcyByZW1vdmVHcm91cEljb24gcmVtb3ZlSGFuZGd1bkl0ZW0gcmVtb3ZlSGVhZGdlYXIgcmVtb3ZlSXRlbSByZW1vdmVJdGVtRnJvbUJhY2twYWNrIHJlbW92ZUl0ZW1Gcm9tVW5pZm9ybSByZW1vdmVJdGVtRnJvbVZlc3QgcmVtb3ZlSXRlbXMgcmVtb3ZlTWFnYXppbmUgcmVtb3ZlTWFnYXppbmVHbG9iYWwgcmVtb3ZlTWFnYXppbmVzIHJlbW92ZU1hZ2F6aW5lc1R1cnJldCByZW1vdmVNYWdhemluZVR1cnJldCByZW1vdmVNZW51SXRlbSByZW1vdmVNaXNzaW9uRXZlbnRIYW5kbGVyIHJlbW92ZU1QRXZlbnRIYW5kbGVyIHJlbW92ZU11c2ljRXZlbnRIYW5kbGVyIHJlbW92ZU93bmVkTWluZSByZW1vdmVQcmltYXJ5V2VhcG9uSXRlbSByZW1vdmVTZWNvbmRhcnlXZWFwb25JdGVtIHJlbW92ZVNpbXBsZVRhc2sgcmVtb3ZlU3dpdGNoYWJsZVVuaXQgcmVtb3ZlVGVhbU1lbWJlciByZW1vdmVVbmlmb3JtIHJlbW92ZVZlc3QgcmVtb3ZlV2VhcG9uIHJlbW92ZVdlYXBvbkF0dGFjaG1lbnRDYXJnbyByZW1vdmVXZWFwb25DYXJnbyByZW1vdmVXZWFwb25HbG9iYWwgcmVtb3ZlV2VhcG9uVHVycmV0IHJlcG9ydFJlbW90ZVRhcmdldCByZXF1aXJlZFZlcnNpb24gcmVzZXRDYW1TaGFrZSByZXNldFN1Ymdyb3VwRGlyZWN0aW9uIHJlc2l6ZSByZXNvdXJjZXMgcmVzcGF3blZlaGljbGUgcmVzdGFydEVkaXRvckNhbWVyYSByZXZlYWwgcmV2ZWFsTWluZSByZXZlcnNlIHJldmVyc2VkTW91c2VZIHJvYWRBdCByb2Fkc0Nvbm5lY3RlZFRvIHJvbGVEZXNjcmlwdGlvbiByb3BlQXR0YWNoZWRPYmplY3RzIHJvcGVBdHRhY2hlZFRvIHJvcGVBdHRhY2hFbmFibGVkIHJvcGVBdHRhY2hUbyByb3BlQ3JlYXRlIHJvcGVDdXQgcm9wZURlc3Ryb3kgcm9wZURldGFjaCByb3BlRW5kUG9zaXRpb24gcm9wZUxlbmd0aCByb3BlcyByb3BlVW53aW5kIHJvcGVVbndvdW5kIHJvdG9yc0ZvcmNlc1JURCByb3RvcnNScG1SVEQgcm91bmQgcnVuSW5pdFNjcmlwdCBzYWZlWm9uZUggc2FmZVpvbmVXIHNhZmVab25lV0FicyBzYWZlWm9uZVggc2FmZVpvbmVYQWJzIHNhZmVab25lWSBzYXZlM0RFTkludmVudG9yeSBzYXZlR2FtZSBzYXZlSWRlbnRpdHkgc2F2ZUpveXN0aWNrcyBzYXZlT3ZlcmxheSBzYXZlUHJvZmlsZU5hbWVzcGFjZSBzYXZlU3RhdHVzIHNhdmVWYXIgc2F2aW5nRW5hYmxlZCBzYXkgc2F5MkQgc2F5M0Qgc2NvcGVOYW1lIHNjb3JlIHNjb3JlU2lkZSBzY3JlZW5zaG90IHNjcmVlblRvV29ybGQgc2NyaXB0RG9uZSBzY3JpcHROYW1lIHNjdWRTdGF0ZSBzZWNvbmRhcnlXZWFwb24gc2Vjb25kYXJ5V2VhcG9uSXRlbXMgc2Vjb25kYXJ5V2VhcG9uTWFnYXppbmUgc2VsZWN0IHNlbGVjdEJlc3RQbGFjZXMgc2VsZWN0RGlhcnlTdWJqZWN0IHNlbGVjdGVkRWRpdG9yT2JqZWN0cyBzZWxlY3RFZGl0b3JPYmplY3Qgc2VsZWN0aW9uTmFtZXMgc2VsZWN0aW9uUG9zaXRpb24gc2VsZWN0TGVhZGVyIHNlbGVjdE1heCBzZWxlY3RNaW4gc2VsZWN0Tm9QbGF5ZXIgc2VsZWN0UGxheWVyIHNlbGVjdFJhbmRvbSBzZWxlY3RSYW5kb21XZWlnaHRlZCBzZWxlY3RXZWFwb24gc2VsZWN0V2VhcG9uVHVycmV0IHNlbmRBVU1lc3NhZ2Ugc2VuZFNpbXBsZUNvbW1hbmQgc2VuZFRhc2sgc2VuZFRhc2tSZXN1bHQgc2VuZFVEUE1lc3NhZ2Ugc2VydmVyQ29tbWFuZCBzZXJ2ZXJDb21tYW5kQXZhaWxhYmxlIHNlcnZlckNvbW1hbmRFeGVjdXRhYmxlIHNlcnZlck5hbWUgc2VydmVyVGltZSBzZXQgc2V0M0RFTkF0dHJpYnV0ZSBzZXQzREVOQXR0cmlidXRlcyBzZXQzREVOR3JpZCBzZXQzREVOSWNvbnNWaXNpYmxlIHNldDNERU5MYXllciBzZXQzREVOTGluZXNWaXNpYmxlIHNldDNERU5Mb2dpY1R5cGUgc2V0M0RFTk1pc3Npb25BdHRyaWJ1dGUgc2V0M0RFTk1pc3Npb25BdHRyaWJ1dGVzIHNldDNERU5Nb2RlbHNWaXNpYmxlIHNldDNERU5PYmplY3RUeXBlIHNldDNERU5TZWxlY3RlZCBzZXRBY2NUaW1lIHNldEFjdHVhbENvbGxlY3RpdmVSVEQgc2V0QWlycGxhbmVUaHJvdHRsZSBzZXRBaXJwb3J0U2lkZSBzZXRBbW1vIHNldEFtbW9DYXJnbyBzZXRBbW1vT25QeWxvbiBzZXRBbmltU3BlZWRDb2VmIHNldEFwZXJ0dXJlIHNldEFwZXJ0dXJlTmV3IHNldEFybW9yeVBvaW50cyBzZXRBdHRyaWJ1dGVzIHNldEF1dG9ub21vdXMgc2V0QmVoYXZpb3VyIHNldEJsZWVkaW5nUmVtYWluaW5nIHNldEJyYWtlc1JURCBzZXRDYW1lcmFJbnRlcmVzdCBzZXRDYW1TaGFrZURlZlBhcmFtcyBzZXRDYW1TaGFrZVBhcmFtcyBzZXRDYW1Vc2VUSSBzZXRDYXB0aXZlIHNldENlbnRlck9mTWFzcyBzZXRDb2xsaXNpb25MaWdodCBzZXRDb21iYXRNb2RlIHNldENvbXBhc3NPc2NpbGxhdGlvbiBzZXRDb252b3lTZXBhcmF0aW9uIHNldEN1cmF0b3JDYW1lcmFBcmVhQ2VpbGluZyBzZXRDdXJhdG9yQ29lZiBzZXRDdXJhdG9yRWRpdGluZ0FyZWFUeXBlIHNldEN1cmF0b3JXYXlwb2ludENvc3Qgc2V0Q3VycmVudENoYW5uZWwgc2V0Q3VycmVudFRhc2sgc2V0Q3VycmVudFdheXBvaW50IHNldEN1c3RvbUFpbUNvZWYgc2V0Q3VzdG9tV2VpZ2h0UlREIHNldERhbWFnZSBzZXREYW1tYWdlIHNldERhdGUgc2V0RGVicmllZmluZ1RleHQgc2V0RGVmYXVsdENhbWVyYSBzZXREZXN0aW5hdGlvbiBzZXREZXRhaWxNYXBCbGVuZFBhcnMgc2V0RGlyIHNldERpcmVjdGlvbiBzZXREcmF3SWNvbiBzZXREcml2ZU9uUGF0aCBzZXREcm9wSW50ZXJ2YWwgc2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZSBzZXREeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlQ29lZiBzZXRFZGl0b3JNb2RlIHNldEVkaXRvck9iamVjdFNjb3BlIHNldEVmZmVjdENvbmRpdGlvbiBzZXRFbmdpbmVSUE1SVEQgc2V0RmFjZSBzZXRGYWNlQW5pbWF0aW9uIHNldEZhdGlndWUgc2V0RmVhdHVyZVR5cGUgc2V0RmxhZ0FuaW1hdGlvblBoYXNlIHNldEZsYWdPd25lciBzZXRGbGFnU2lkZSBzZXRGbGFnVGV4dHVyZSBzZXRGb2cgc2V0Rm9ybWF0aW9uIHNldEZvcm1hdGlvblRhc2sgc2V0Rm9ybURpciBzZXRGcmllbmQgc2V0RnJvbUVkaXRvciBzZXRGU01WYXJpYWJsZSBzZXRGdWVsIHNldEZ1ZWxDYXJnbyBzZXRHcm91cEljb24gc2V0R3JvdXBJY29uUGFyYW1zIHNldEdyb3VwSWNvbnNTZWxlY3RhYmxlIHNldEdyb3VwSWNvbnNWaXNpYmxlIHNldEdyb3VwSWQgc2V0R3JvdXBJZEdsb2JhbCBzZXRHcm91cE93bmVyIHNldEd1c3RzIHNldEhpZGVCZWhpbmQgc2V0SGl0IHNldEhpdEluZGV4IHNldEhpdFBvaW50RGFtYWdlIHNldEhvcml6b25QYXJhbGxheENvZWYgc2V0SFVETW92ZW1lbnRMZXZlbHMgc2V0SWRlbnRpdHkgc2V0SW1wb3J0YW5jZSBzZXRJbmZvUGFuZWwgc2V0TGVhZGVyIHNldExpZ2h0QW1iaWVudCBzZXRMaWdodEF0dGVudWF0aW9uIHNldExpZ2h0QnJpZ2h0bmVzcyBzZXRMaWdodENvbG9yIHNldExpZ2h0RGF5TGlnaHQgc2V0TGlnaHRGbGFyZU1heERpc3RhbmNlIHNldExpZ2h0RmxhcmVTaXplIHNldExpZ2h0SW50ZW5zaXR5IHNldExpZ2h0bmluZ3Mgc2V0TGlnaHRVc2VGbGFyZSBzZXRMb2NhbFdpbmRQYXJhbXMgc2V0TWFnYXppbmVUdXJyZXRBbW1vIHNldE1hcmtlckFscGhhIHNldE1hcmtlckFscGhhTG9jYWwgc2V0TWFya2VyQnJ1c2ggc2V0TWFya2VyQnJ1c2hMb2NhbCBzZXRNYXJrZXJDb2xvciBzZXRNYXJrZXJDb2xvckxvY2FsIHNldE1hcmtlckRpciBzZXRNYXJrZXJEaXJMb2NhbCBzZXRNYXJrZXJQb3Mgc2V0TWFya2VyUG9zTG9jYWwgc2V0TWFya2VyU2hhcGUgc2V0TWFya2VyU2hhcGVMb2NhbCBzZXRNYXJrZXJTaXplIHNldE1hcmtlclNpemVMb2NhbCBzZXRNYXJrZXJUZXh0IHNldE1hcmtlclRleHRMb2NhbCBzZXRNYXJrZXJUeXBlIHNldE1hcmtlclR5cGVMb2NhbCBzZXRNYXNzIHNldE1pbWljIHNldE1vdXNlUG9zaXRpb24gc2V0TXVzaWNFZmZlY3Qgc2V0TXVzaWNFdmVudEhhbmRsZXIgc2V0TmFtZSBzZXROYW1lU291bmQgc2V0T2JqZWN0QXJndW1lbnRzIHNldE9iamVjdE1hdGVyaWFsIHNldE9iamVjdE1hdGVyaWFsR2xvYmFsIHNldE9iamVjdFByb3h5IHNldE9iamVjdFRleHR1cmUgc2V0T2JqZWN0VGV4dHVyZUdsb2JhbCBzZXRPYmplY3RWaWV3RGlzdGFuY2Ugc2V0T3ZlcmNhc3Qgc2V0T3duZXIgc2V0T3h5Z2VuUmVtYWluaW5nIHNldFBhcnRpY2xlQ2lyY2xlIHNldFBhcnRpY2xlQ2xhc3Mgc2V0UGFydGljbGVGaXJlIHNldFBhcnRpY2xlUGFyYW1zIHNldFBhcnRpY2xlUmFuZG9tIHNldFBpbG90Q2FtZXJhRGlyZWN0aW9uIHNldFBpbG90Q2FtZXJhUm90YXRpb24gc2V0UGlsb3RDYW1lcmFUYXJnZXQgc2V0UGlsb3RMaWdodCBzZXRQaVBFZmZlY3Qgc2V0UGl0Y2ggc2V0UGxhdGVOdW1iZXIgc2V0UGxheWFibGUgc2V0UGxheWVyUmVzcGF3blRpbWUgc2V0UG9zIHNldFBvc0FTTCBzZXRQb3NBU0wyIHNldFBvc0FTTFcgc2V0UG9zQVRMIHNldFBvc2l0aW9uIHNldFBvc1dvcmxkIHNldFB5bG9uTG9hZE91dCBzZXRQeWxvbnNQcmlvcml0eSBzZXRSYWRpb01zZyBzZXRSYWluIHNldFJhaW5ib3cgc2V0UmFuZG9tTGlwIHNldFJhbmsgc2V0UmVjdGFuZ3VsYXIgc2V0UmVwYWlyQ2FyZ28gc2V0Um90b3JCcmFrZVJURCBzZXRTaGFkb3dEaXN0YW5jZSBzZXRTaG90UGFyZW50cyBzZXRTaWRlIHNldFNpbXBsZVRhc2tBbHdheXNWaXNpYmxlIHNldFNpbXBsZVRhc2tDdXN0b21EYXRhIHNldFNpbXBsZVRhc2tEZXNjcmlwdGlvbiBzZXRTaW1wbGVUYXNrRGVzdGluYXRpb24gc2V0U2ltcGxlVGFza1RhcmdldCBzZXRTaW1wbGVUYXNrVHlwZSBzZXRTaW11bFdlYXRoZXJMYXllcnMgc2V0U2l6ZSBzZXRTa2lsbCBzZXRTbGluZ0xvYWQgc2V0U291bmRFZmZlY3Qgc2V0U3BlYWtlciBzZXRTcGVlY2ggc2V0U3BlZWRNb2RlIHNldFN0YW1pbmEgc2V0U3RhbWluYVNjaGVtZSBzZXRTdGF0VmFsdWUgc2V0U3VwcHJlc3Npb24gc2V0U3lzdGVtT2ZVbml0cyBzZXRUYXJnZXRBZ2Ugc2V0VGFza01hcmtlck9mZnNldCBzZXRUYXNrUmVzdWx0IHNldFRhc2tTdGF0ZSBzZXRUZXJyYWluR3JpZCBzZXRUZXh0IHNldFRpbWVNdWx0aXBsaWVyIHNldFRpdGxlRWZmZWN0IHNldFRyYWZmaWNEZW5zaXR5IHNldFRyYWZmaWNEaXN0YW5jZSBzZXRUcmFmZmljR2FwIHNldFRyYWZmaWNTcGVlZCBzZXRUcmlnZ2VyQWN0aXZhdGlvbiBzZXRUcmlnZ2VyQXJlYSBzZXRUcmlnZ2VyU3RhdGVtZW50cyBzZXRUcmlnZ2VyVGV4dCBzZXRUcmlnZ2VyVGltZW91dCBzZXRUcmlnZ2VyVHlwZSBzZXRUeXBlIHNldFVuY29uc2Npb3VzIHNldFVuaXRBYmlsaXR5IHNldFVuaXRMb2Fkb3V0IHNldFVuaXRQb3Mgc2V0VW5pdFBvc1dlYWsgc2V0VW5pdFJhbmsgc2V0VW5pdFJlY29pbENvZWZmaWNpZW50IHNldFVuaXRUcmFpdCBzZXRVbmxvYWRJbkNvbWJhdCBzZXRVc2VyQWN0aW9uVGV4dCBzZXRVc2VyTUZEVGV4dCBzZXRVc2VyTUZEdmFsdWUgc2V0VmFyaWFibGUgc2V0VmVjdG9yRGlyIHNldFZlY3RvckRpckFuZFVwIHNldFZlY3RvclVwIHNldFZlaGljbGVBbW1vIHNldFZlaGljbGVBbW1vRGVmIHNldFZlaGljbGVBcm1vciBzZXRWZWhpY2xlQ2FyZ28gc2V0VmVoaWNsZUlkIHNldFZlaGljbGVMb2NrIHNldFZlaGljbGVQb3NpdGlvbiBzZXRWZWhpY2xlUmFkYXIgc2V0VmVoaWNsZVJlY2VpdmVSZW1vdGVUYXJnZXRzIHNldFZlaGljbGVSZXBvcnRPd25Qb3NpdGlvbiBzZXRWZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0cyBzZXRWZWhpY2xlVElQYXJzIHNldFZlaGljbGVWYXJOYW1lIHNldFZlbG9jaXR5IHNldFZlbG9jaXR5TW9kZWxTcGFjZSBzZXRWZWxvY2l0eVRyYW5zZm9ybWF0aW9uIHNldFZpZXdEaXN0YW5jZSBzZXRWaXNpYmxlSWZUcmVlQ29sbGFwc2VkIHNldFdhbnRlZFJQTVJURCBzZXRXYXZlcyBzZXRXYXlwb2ludEJlaGF2aW91ciBzZXRXYXlwb2ludENvbWJhdE1vZGUgc2V0V2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzIHNldFdheXBvaW50RGVzY3JpcHRpb24gc2V0V2F5cG9pbnRGb3JjZUJlaGF2aW91ciBzZXRXYXlwb2ludEZvcm1hdGlvbiBzZXRXYXlwb2ludEhvdXNlUG9zaXRpb24gc2V0V2F5cG9pbnRMb2l0ZXJSYWRpdXMgc2V0V2F5cG9pbnRMb2l0ZXJUeXBlIHNldFdheXBvaW50TmFtZSBzZXRXYXlwb2ludFBvc2l0aW9uIHNldFdheXBvaW50U2NyaXB0IHNldFdheXBvaW50U3BlZWQgc2V0V2F5cG9pbnRTdGF0ZW1lbnRzIHNldFdheXBvaW50VGltZW91dCBzZXRXYXlwb2ludFR5cGUgc2V0V2F5cG9pbnRWaXNpYmxlIHNldFdlYXBvblJlbG9hZGluZ1RpbWUgc2V0V2luZCBzZXRXaW5kRGlyIHNldFdpbmRGb3JjZSBzZXRXaW5kU3RyIHNldFdpbmdGb3JjZVNjYWxlUlREIHNldFdQUG9zIHNob3czREljb25zIHNob3dDaGF0IHNob3dDaW5lbWFCb3JkZXIgc2hvd0NvbW1hbmRpbmdNZW51IHNob3dDb21wYXNzIHNob3dDdXJhdG9yQ29tcGFzcyBzaG93R1BTIHNob3dIVUQgc2hvd0xlZ2VuZCBzaG93TWFwIHNob3duQXJ0aWxsZXJ5Q29tcHV0ZXIgc2hvd25DaGF0IHNob3duQ29tcGFzcyBzaG93bkN1cmF0b3JDb21wYXNzIHNob3dOZXdFZGl0b3JPYmplY3Qgc2hvd25HUFMgc2hvd25IVUQgc2hvd25NYXAgc2hvd25QYWQgc2hvd25SYWRpbyBzaG93blNjb3JldGFibGUgc2hvd25VQVZGZWVkIHNob3duV2FycmFudCBzaG93bldhdGNoIHNob3dQYWQgc2hvd1JhZGlvIHNob3dTY29yZXRhYmxlIHNob3dTdWJ0aXRsZXMgc2hvd1VBVkZlZWQgc2hvd1dhcnJhbnQgc2hvd1dhdGNoIHNob3dXYXlwb2ludCBzaG93V2F5cG9pbnRzIHNpZGUgc2lkZUNoYXQgc2lkZUVuZW15IHNpZGVGcmllbmRseSBzaWRlUmFkaW8gc2ltcGxlVGFza3Mgc2ltdWxhdGlvbkVuYWJsZWQgc2ltdWxDbG91ZERlbnNpdHkgc2ltdWxDbG91ZE9jY2x1c2lvbiBzaW11bEluQ2xvdWRzIHNpbXVsV2VhdGhlclN5bmMgc2luIHNpemUgc2l6ZU9mIHNraWxsIHNraWxsRmluYWwgc2tpcFRpbWUgc2xlZXAgc2xpZGVyUG9zaXRpb24gc2xpZGVyUmFuZ2Ugc2xpZGVyU2V0UG9zaXRpb24gc2xpZGVyU2V0UmFuZ2Ugc2xpZGVyU2V0U3BlZWQgc2xpZGVyU3BlZWQgc2xpbmdMb2FkQXNzaXN0YW50U2hvd24gc29sZGllck1hZ2F6aW5lcyBzb21lQW1tbyBzb3J0IHNvdW5kVm9sdW1lIHNwYXduIHNwZWFrZXIgc3BlZWQgc3BlZWRNb2RlIHNwbGl0U3RyaW5nIHNxcnQgc3F1YWRQYXJhbXMgc3RhbmNlIHN0YXJ0TG9hZGluZ1NjcmVlbiBzdGVwIHN0b3Agc3RvcEVuZ2luZVJURCBzdG9wcGVkIHN0ciBzdW5Pck1vb24gc3VwcG9ydEluZm8gc3VwcHJlc3NGb3Igc3VyZmFjZUlzV2F0ZXIgc3VyZmFjZU5vcm1hbCBzdXJmYWNlVHlwZSBzd2ltSW5EZXB0aCBzd2l0Y2hhYmxlVW5pdHMgc3dpdGNoQWN0aW9uIHN3aXRjaENhbWVyYSBzd2l0Y2hHZXN0dXJlIHN3aXRjaExpZ2h0IHN3aXRjaE1vdmUgc3luY2hyb25pemVkT2JqZWN0cyBzeW5jaHJvbml6ZWRUcmlnZ2VycyBzeW5jaHJvbml6ZWRXYXlwb2ludHMgc3luY2hyb25pemVPYmplY3RzQWRkIHN5bmNocm9uaXplT2JqZWN0c1JlbW92ZSBzeW5jaHJvbml6ZVRyaWdnZXIgc3luY2hyb25pemVXYXlwb2ludCBzeXN0ZW1DaGF0IHN5c3RlbU9mVW5pdHMgdGFuIHRhcmdldEtub3dsZWRnZSB0YXJnZXRzIHRhcmdldHNBZ2dyZWdhdGUgdGFyZ2V0c1F1ZXJ5IHRhc2tBbHdheXNWaXNpYmxlIHRhc2tDaGlsZHJlbiB0YXNrQ29tcGxldGVkIHRhc2tDdXN0b21EYXRhIHRhc2tEZXNjcmlwdGlvbiB0YXNrRGVzdGluYXRpb24gdGFza0hpbnQgdGFza01hcmtlck9mZnNldCB0YXNrUGFyZW50IHRhc2tSZXN1bHQgdGFza1N0YXRlIHRhc2tUeXBlIHRlYW1NZW1iZXIgdGVhbU5hbWUgdGVhbXMgdGVhbVN3aXRjaCB0ZWFtU3dpdGNoRW5hYmxlZCB0ZWFtVHlwZSB0ZXJtaW5hdGUgdGVycmFpbkludGVyc2VjdCB0ZXJyYWluSW50ZXJzZWN0QVNMIHRlcnJhaW5JbnRlcnNlY3RBdEFTTCB0ZXh0IHRleHRMb2cgdGV4dExvZ0Zvcm1hdCB0ZyB0aW1lIHRpbWVNdWx0aXBsaWVyIHRpdGxlQ3V0IHRpdGxlRmFkZU91dCB0aXRsZU9iaiB0aXRsZVJzYyB0aXRsZVRleHQgdG9BcnJheSB0b0ZpeGVkIHRvTG93ZXIgdG9TdHJpbmcgdG9VcHBlciB0cmlnZ2VyQWN0aXZhdGVkIHRyaWdnZXJBY3RpdmF0aW9uIHRyaWdnZXJBcmVhIHRyaWdnZXJBdHRhY2hlZFZlaGljbGUgdHJpZ2dlckF0dGFjaE9iamVjdCB0cmlnZ2VyQXR0YWNoVmVoaWNsZSB0cmlnZ2VyRHluYW1pY1NpbXVsYXRpb24gdHJpZ2dlclN0YXRlbWVudHMgdHJpZ2dlclRleHQgdHJpZ2dlclRpbWVvdXQgdHJpZ2dlclRpbWVvdXRDdXJyZW50IHRyaWdnZXJUeXBlIHR1cnJldExvY2FsIHR1cnJldE93bmVyIHR1cnJldFVuaXQgdHZBZGQgdHZDbGVhciB0dkNvbGxhcHNlIHR2Q29sbGFwc2VBbGwgdHZDb3VudCB0dkN1clNlbCB0dkRhdGEgdHZEZWxldGUgdHZFeHBhbmQgdHZFeHBhbmRBbGwgdHZQaWN0dXJlIHR2U2V0Q29sb3IgdHZTZXRDdXJTZWwgdHZTZXREYXRhIHR2U2V0UGljdHVyZSB0dlNldFBpY3R1cmVDb2xvciB0dlNldFBpY3R1cmVDb2xvckRpc2FibGVkIHR2U2V0UGljdHVyZUNvbG9yU2VsZWN0ZWQgdHZTZXRQaWN0dXJlUmlnaHQgdHZTZXRQaWN0dXJlUmlnaHRDb2xvciB0dlNldFBpY3R1cmVSaWdodENvbG9yRGlzYWJsZWQgdHZTZXRQaWN0dXJlUmlnaHRDb2xvclNlbGVjdGVkIHR2U2V0VGV4dCB0dlNldFRvb2x0aXAgdHZTZXRWYWx1ZSB0dlNvcnQgdHZTb3J0QnlWYWx1ZSB0dlRleHQgdHZUb29sdGlwIHR2VmFsdWUgdHlwZSB0eXBlTmFtZSB0eXBlT2YgVUFWQ29udHJvbCB1aU5hbWVzcGFjZSB1aVNsZWVwIHVuYXNzaWduQ3VyYXRvciB1bmFzc2lnbkl0ZW0gdW5hc3NpZ25UZWFtIHVuYXNzaWduVmVoaWNsZSB1bmRlcndhdGVyIHVuaWZvcm0gdW5pZm9ybUNvbnRhaW5lciB1bmlmb3JtSXRlbXMgdW5pZm9ybU1hZ2F6aW5lcyB1bml0QWRkb25zIHVuaXRBaW1Qb3NpdGlvbiB1bml0QWltUG9zaXRpb25WaXN1YWwgdW5pdEJhY2twYWNrIHVuaXRJc1VBViB1bml0UG9zIHVuaXRSZWFkeSB1bml0UmVjb2lsQ29lZmZpY2llbnQgdW5pdHMgdW5pdHNCZWxvd0hlaWdodCB1bmxpbmtJdGVtIHVubG9ja0FjaGlldmVtZW50IHVucmVnaXN0ZXJUYXNrIHVwZGF0ZURyYXdJY29uIHVwZGF0ZU1lbnVJdGVtIHVwZGF0ZU9iamVjdFRyZWUgdXNlQUlTdGVlcmluZ0NvbXBvbmVudCB1c2VBdWRpb1RpbWVGb3JNb3ZlcyB1c2VySW5wdXREaXNhYmxlZCB2ZWN0b3JBZGQgdmVjdG9yQ29zIHZlY3RvckNyb3NzUHJvZHVjdCB2ZWN0b3JEaWZmIHZlY3RvckRpciB2ZWN0b3JEaXJWaXN1YWwgdmVjdG9yRGlzdGFuY2UgdmVjdG9yRGlzdGFuY2VTcXIgdmVjdG9yRG90UHJvZHVjdCB2ZWN0b3JGcm9tVG8gdmVjdG9yTWFnbml0dWRlIHZlY3Rvck1hZ25pdHVkZVNxciB2ZWN0b3JNb2RlbFRvV29ybGQgdmVjdG9yTW9kZWxUb1dvcmxkVmlzdWFsIHZlY3Rvck11bHRpcGx5IHZlY3Rvck5vcm1hbGl6ZWQgdmVjdG9yVXAgdmVjdG9yVXBWaXN1YWwgdmVjdG9yV29ybGRUb01vZGVsIHZlY3RvcldvcmxkVG9Nb2RlbFZpc3VhbCB2ZWhpY2xlIHZlaGljbGVDYXJnb0VuYWJsZWQgdmVoaWNsZUNoYXQgdmVoaWNsZVJhZGlvIHZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0cyB2ZWhpY2xlUmVwb3J0T3duUG9zaXRpb24gdmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHMgdmVoaWNsZXMgdmVoaWNsZVZhck5hbWUgdmVsb2NpdHkgdmVsb2NpdHlNb2RlbFNwYWNlIHZlcmlmeVNpZ25hdHVyZSB2ZXN0IHZlc3RDb250YWluZXIgdmVzdEl0ZW1zIHZlc3RNYWdhemluZXMgdmlld0Rpc3RhbmNlIHZpc2libGVDb21wYXNzIHZpc2libGVHUFMgdmlzaWJsZU1hcCB2aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQVNMIHZpc2libGVTY29yZXRhYmxlIHZpc2libGVXYXRjaCB3YXZlcyB3YXlwb2ludEF0dGFjaGVkT2JqZWN0IHdheXBvaW50QXR0YWNoZWRWZWhpY2xlIHdheXBvaW50QXR0YWNoT2JqZWN0IHdheXBvaW50QXR0YWNoVmVoaWNsZSB3YXlwb2ludEJlaGF2aW91ciB3YXlwb2ludENvbWJhdE1vZGUgd2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzIHdheXBvaW50RGVzY3JpcHRpb24gd2F5cG9pbnRGb3JjZUJlaGF2aW91ciB3YXlwb2ludEZvcm1hdGlvbiB3YXlwb2ludEhvdXNlUG9zaXRpb24gd2F5cG9pbnRMb2l0ZXJSYWRpdXMgd2F5cG9pbnRMb2l0ZXJUeXBlIHdheXBvaW50TmFtZSB3YXlwb2ludFBvc2l0aW9uIHdheXBvaW50cyB3YXlwb2ludFNjcmlwdCB3YXlwb2ludHNFbmFibGVkVUFWIHdheXBvaW50U2hvdyB3YXlwb2ludFNwZWVkIHdheXBvaW50U3RhdGVtZW50cyB3YXlwb2ludFRpbWVvdXQgd2F5cG9pbnRUaW1lb3V0Q3VycmVudCB3YXlwb2ludFR5cGUgd2F5cG9pbnRWaXNpYmxlIHdlYXBvbkFjY2Vzc29yaWVzIHdlYXBvbkFjY2Vzc29yaWVzQ2FyZ28gd2VhcG9uQ2FyZ28gd2VhcG9uRGlyZWN0aW9uIHdlYXBvbkluZXJ0aWEgd2VhcG9uTG93ZXJlZCB3ZWFwb25zIHdlYXBvbnNJdGVtcyB3ZWFwb25zSXRlbXNDYXJnbyB3ZWFwb25TdGF0ZSB3ZWFwb25zVHVycmV0IHdlaWdodFJURCBXRlNpZGVUZXh0IHdpbmQgIixsaXRlcmFsOiJibHVmb3IgY2l2aWxpYW4gY29uZmlnTnVsbCBjb250cm9sTnVsbCBkaXNwbGF5TnVsbCBlYXN0IGVuZGwgZmFsc2UgZ3JwTnVsbCBpbmRlcGVuZGVudCBsaW5lQnJlYWsgbG9jYXRpb25OdWxsIG5pbCBvYmpOdWxsIG9wZm9yIHBpIHJlc2lzdGFuY2Ugc2NyaXB0TnVsbCBzaWRlQW1iaWVudExpZmUgc2lkZUVtcHR5IHNpZGVMb2dpYyBzaWRlVW5rbm93biB0YXNrTnVsbCB0ZWFtTWVtYmVyTnVsbCB0cnVlIHdlc3QifSxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5OVU1CRVJfTU9ERSxuLHIsbyx0LnByZXByb2Nlc3Nvcl0saWxsZWdhbDovI3xeXCQgL319fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FsLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLkNPTU1FTlQoIi0tIiwiJCIpO3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGlsbGVnYWw6L1s8Pnt9Kl0vLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiYmVnaW4gZW5kIHN0YXJ0IGNvbW1pdCByb2xsYmFjayBzYXZlcG9pbnQgbG9jayBhbHRlciBjcmVhdGUgZHJvcCByZW5hbWUgY2FsbCBkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50IG1lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlIHVubG9jayBwdXJnZSByZXNldCBjaGFuZ2Ugc3RvcCBhbmFseXplIGNhY2hlIGZsdXNoIG9wdGltaXplIHJlcGFpciBraWxsIGluc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50IHZhbHVlcyB3aXRoIixlbmQ6LzsvLGVuZHNXaXRoUGFyZW50OiEwLGxleGVtZXM6L1tcd1wuXSsvLGtleXdvcmRzOntrZXl3b3JkOiJhcyBhYm9ydCBhYnMgYWJzb2x1dGUgYWNjIGFjY2UgYWNjZXAgYWNjZXB0IGFjY2VzcyBhY2Nlc3NlZCBhY2Nlc3NpYmxlIGFjY291bnQgYWNvcyBhY3Rpb24gYWN0aXZhdGUgYWRkIGFkZHRpbWUgYWRtaW4gYWRtaW5pc3RlciBhZHZhbmNlZCBhZHZpc2UgYWVzX2RlY3J5cHQgYWVzX2VuY3J5cHQgYWZ0ZXIgYWdlbnQgYWdncmVnYXRlIGFsaSBhbGlhIGFsaWFzIGFsbCBhbGxvY2F0ZSBhbGxvdyBhbHRlciBhbHdheXMgYW5hbHl6ZSBhbmNpbGxhcnkgYW5kIGFudGkgYW55IGFueWRhdGEgYW55ZGF0YXNldCBhbnlzY2hlbWEgYW55dHlwZSBhcHBseSBhcmNoaXZlIGFyY2hpdmVkIGFyY2hpdmVsb2cgYXJlIGFzIGFzYyBhc2NpaSBhc2luIGFzc2VtYmx5IGFzc2VydGlvbiBhc3NvY2lhdGUgYXN5bmNocm9ub3VzIGF0IGF0YW4gYXRuMiBhdHRyIGF0dHJpIGF0dHJpYiBhdHRyaWJ1IGF0dHJpYnV0IGF0dHJpYnV0ZSBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhlbnRpY2F0ZWQgYXV0aGVudGljYXRpb24gYXV0aGlkIGF1dGhvcnMgYXV0byBhdXRvYWxsb2NhdGUgYXV0b2RibGluayBhdXRvZXh0ZW5kIGF1dG9tYXRpYyBhdmFpbGFiaWxpdHkgYXZnIGJhY2t1cCBiYWRmaWxlIGJhc2ljZmlsZSBiZWZvcmUgYmVnaW4gYmVnaW5uaW5nIGJlbmNobWFyayBiZXR3ZWVuIGJmaWxlIGJmaWxlX2Jhc2UgYmlnIGJpZ2ZpbGUgYmluIGJpbmFyeV9kb3VibGUgYmluYXJ5X2Zsb2F0IGJpbmxvZyBiaXRfYW5kIGJpdF9jb3VudCBiaXRfbGVuZ3RoIGJpdF9vciBiaXRfeG9yIGJpdG1hcCBibG9iX2Jhc2UgYmxvY2sgYmxvY2tzaXplIGJvZHkgYm90aCBib3VuZCBidWNrZXQgYnVmZmVyX2NhY2hlIGJ1ZmZlcl9wb29sIGJ1aWxkIGJ1bGsgYnkgYnl0ZSBieXRlb3JkZXJtYXJrIGJ5dGVzIGNhY2hlIGNhY2hpbmcgY2FsbCBjYWxsaW5nIGNhbmNlbCBjYXBhY2l0eSBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2FzdCBjYXRhbG9nIGNhdGVnb3J5IGNlaWwgY2VpbGluZyBjaGFpbiBjaGFuZ2UgY2hhbmdlZCBjaGFyX2Jhc2UgY2hhcl9sZW5ndGggY2hhcmFjdGVyX2xlbmd0aCBjaGFyYWN0ZXJzIGNoYXJhY3RlcnNldCBjaGFyaW5kZXggY2hhcnNldCBjaGFyc2V0Zm9ybSBjaGFyc2V0aWQgY2hlY2sgY2hlY2tzdW0gY2hlY2tzdW1fYWdnIGNoaWxkIGNob29zZSBjaHIgY2h1bmsgY2xhc3MgY2xlYW51cCBjbGVhciBjbGllbnQgY2xvYiBjbG9iX2Jhc2UgY2xvbmUgY2xvc2UgY2x1c3Rlcl9pZCBjbHVzdGVyX3Byb2JhYmlsaXR5IGNsdXN0ZXJfc2V0IGNsdXN0ZXJpbmcgY29hbGVzY2UgY29lcmNpYmlsaXR5IGNvbCBjb2xsYXRlIGNvbGxhdGlvbiBjb2xsZWN0IGNvbHUgY29sdW0gY29sdW1uIGNvbHVtbl92YWx1ZSBjb2x1bW5zIGNvbHVtbnNfdXBkYXRlZCBjb21tZW50IGNvbW1pdCBjb21wYWN0IGNvbXBhdGliaWxpdHkgY29tcGlsZWQgY29tcGxldGUgY29tcG9zaXRlX2xpbWl0IGNvbXBvdW5kIGNvbXByZXNzIGNvbXB1dGUgY29uY2F0IGNvbmNhdF93cyBjb25jdXJyZW50IGNvbmZpcm0gY29ubiBjb25uZWMgY29ubmVjdCBjb25uZWN0X2J5X2lzY3ljbGUgY29ubmVjdF9ieV9pc2xlYWYgY29ubmVjdF9ieV9yb290IGNvbm5lY3RfdGltZSBjb25uZWN0aW9uIGNvbnNpZGVyIGNvbnNpc3RlbnQgY29uc3RhbnQgY29uc3RyYWludCBjb25zdHJhaW50cyBjb25zdHJ1Y3RvciBjb250YWluZXIgY29udGVudCBjb250ZW50cyBjb250ZXh0IGNvbnRyaWJ1dG9ycyBjb250cm9sZmlsZSBjb252IGNvbnZlcnQgY29udmVydF90eiBjb3JyIGNvcnJfayBjb3JyX3MgY29ycmVzcG9uZGluZyBjb3JydXB0aW9uIGNvcyBjb3N0IGNvdW50IGNvdW50X2JpZyBjb3VudGVkIGNvdmFyX3BvcCBjb3Zhcl9zYW1wIGNwdV9wZXJfY2FsbCBjcHVfcGVyX3Nlc3Npb24gY3JjMzIgY3JlYXRlIGNyZWF0aW9uIGNyaXRpY2FsIGNyb3NzIGN1YmUgY3VtZV9kaXN0IGN1cmRhdGUgY3VycmVudCBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlciBjdXJzb3IgY3VydGltZSBjdXN0b21kYXR1bSBjeWNsZSBkYXRhIGRhdGFiYXNlIGRhdGFiYXNlcyBkYXRhZmlsZSBkYXRhZmlsZXMgZGF0YWxlbmd0aCBkYXRlX2FkZCBkYXRlX2NhY2hlIGRhdGVfZm9ybWF0IGRhdGVfc3ViIGRhdGVhZGQgZGF0ZWRpZmYgZGF0ZWZyb21wYXJ0cyBkYXRlbmFtZSBkYXRlcGFydCBkYXRldGltZTJmcm9tcGFydHMgZGF5IGRheV90b19zZWNvbmQgZGF5bmFtZSBkYXlvZm1vbnRoIGRheW9md2VlayBkYXlvZnllYXIgZGF5cyBkYl9yb2xlX2NoYW5nZSBkYnRpbWV6b25lIGRkbCBkZWFsbG9jYXRlIGRlY2xhcmUgZGVjb2RlIGRlY29tcG9zZSBkZWNyZW1lbnQgZGVjcnlwdCBkZWR1cGxpY2F0ZSBkZWYgZGVmYSBkZWZhdSBkZWZhdWwgZGVmYXVsdCBkZWZhdWx0cyBkZWZlcnJlZCBkZWZpIGRlZmluIGRlZmluZSBkZWdyZWVzIGRlbGF5ZWQgZGVsZWdhdGUgZGVsZXRlIGRlbGV0ZV9hbGwgZGVsaW1pdGVkIGRlbWFuZCBkZW5zZV9yYW5rIGRlcHRoIGRlcXVldWUgZGVzX2RlY3J5cHQgZGVzX2VuY3J5cHQgZGVzX2tleV9maWxlIGRlc2MgZGVzY3IgZGVzY3JpIGRlc2NyaWIgZGVzY3JpYmUgZGVzY3JpcHRvciBkZXRlcm1pbmlzdGljIGRpYWdub3N0aWNzIGRpZmZlcmVuY2UgZGltZW5zaW9uIGRpcmVjdF9sb2FkIGRpcmVjdG9yeSBkaXNhYmxlIGRpc2FibGVfYWxsIGRpc2FsbG93IGRpc2Fzc29jaWF0ZSBkaXNjYXJkZmlsZSBkaXNjb25uZWN0IGRpc2tncm91cCBkaXN0aW5jdCBkaXN0aW5jdHJvdyBkaXN0cmlidXRlIGRpc3RyaWJ1dGVkIGRpdiBkbyBkb2N1bWVudCBkb21haW4gZG90bmV0IGRvdWJsZSBkb3duZ3JhZGUgZHJvcCBkdW1wZmlsZSBkdXBsaWNhdGUgZHVyYXRpb24gZWFjaCBlZGl0aW9uIGVkaXRpb25hYmxlIGVkaXRpb25zIGVsZW1lbnQgZWxsaXBzaXMgZWxzZSBlbHNpZiBlbHQgZW1wdHkgZW5hYmxlIGVuYWJsZV9hbGwgZW5jbG9zZWQgZW5jb2RlIGVuY29kaW5nIGVuY3J5cHQgZW5kIGVuZC1leGVjIGVuZGlhbiBlbmZvcmNlZCBlbmdpbmUgZW5naW5lcyBlbnF1ZXVlIGVudGVycHJpc2UgZW50aXR5ZXNjYXBpbmcgZW9tb250aCBlcnJvciBlcnJvcnMgZXNjYXBlZCBldmFsbmFtZSBldmFsdWF0ZSBldmVudCBldmVudGRhdGEgZXZlbnRzIGV4Y2VwdCBleGNlcHRpb24gZXhjZXB0aW9ucyBleGNoYW5nZSBleGNsdWRlIGV4Y2x1ZGluZyBleGVjdSBleGVjdXQgZXhlY3V0ZSBleGVtcHQgZXhpc3RzIGV4aXQgZXhwIGV4cGlyZSBleHBsYWluIGV4cGxvZGUgZXhwb3J0IGV4cG9ydF9zZXQgZXh0ZW5kZWQgZXh0ZW50IGV4dGVybmFsIGV4dGVybmFsXzEgZXh0ZXJuYWxfMiBleHRlcm5hbGx5IGV4dHJhY3QgZmFpbGVkIGZhaWxlZF9sb2dpbl9hdHRlbXB0cyBmYWlsb3ZlciBmYWlsdXJlIGZhciBmYXN0IGZlYXR1cmVfc2V0IGZlYXR1cmVfdmFsdWUgZmV0Y2ggZmllbGQgZmllbGRzIGZpbGUgZmlsZV9uYW1lX2NvbnZlcnQgZmlsZXN5c3RlbV9saWtlX2xvZ2dpbmcgZmluYWwgZmluaXNoIGZpcnN0IGZpcnN0X3ZhbHVlIGZpeGVkIGZsYXNoX2NhY2hlIGZsYXNoYmFjayBmbG9vciBmbHVzaCBmb2xsb3dpbmcgZm9sbG93cyBmb3IgZm9yYWxsIGZvcmNlIGZvcmVpZ24gZm9ybSBmb3JtYSBmb3JtYXQgZm91bmQgZm91bmRfcm93cyBmcmVlbGlzdCBmcmVlbGlzdHMgZnJlZXBvb2xzIGZyZXNoIGZyb20gZnJvbV9iYXNlNjQgZnJvbV9kYXlzIGZ0cCBmdWxsIGZ1bmN0aW9uIGdlbmVyYWwgZ2VuZXJhdGVkIGdldCBnZXRfZm9ybWF0IGdldF9sb2NrIGdldGRhdGUgZ2V0dXRjZGF0ZSBnbG9iYWwgZ2xvYmFsX25hbWUgZ2xvYmFsbHkgZ28gZ290byBncmFudCBncmFudHMgZ3JlYXRlc3QgZ3JvdXAgZ3JvdXBfY29uY2F0IGdyb3VwX2lkIGdyb3VwaW5nIGdyb3VwaW5nX2lkIGdyb3VwcyBndGlkX3N1YnRyYWN0IGd1YXJhbnRlZSBndWFyZCBoYW5kbGVyIGhhc2ggaGFzaGtleXMgaGF2aW5nIGhlYSBoZWFkIGhlYWRpIGhlYWRpbiBoZWFkaW5nIGhlYXAgaGVscCBoZXggaGllcmFyY2h5IGhpZ2ggaGlnaF9wcmlvcml0eSBob3N0cyBob3VyIGhvdXJzIGh0dHAgaWQgaWRlbnRfY3VycmVudCBpZGVudF9pbmNyIGlkZW50X3NlZWQgaWRlbnRpZmllZCBpZGVudGl0eSBpZGxlX3RpbWUgaWYgaWZudWxsIGlnbm9yZSBpaWYgaWxpa2UgaWxtIGltbWVkaWF0ZSBpbXBvcnQgaW4gaW5jbHVkZSBpbmNsdWRpbmcgaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kZXhpbmcgaW5kZXh0eXBlIGluZGljYXRvciBpbmRpY2VzIGluZXQ2X2F0b24gaW5ldDZfbnRvYSBpbmV0X2F0b24gaW5ldF9udG9hIGluZmlsZSBpbml0aWFsIGluaXRpYWxpemVkIGluaXRpYWxseSBpbml0cmFucyBpbm1lbW9yeSBpbm5lciBpbm5vZGIgaW5wdXQgaW5zZXJ0IGluc3RhbGwgaW5zdGFuY2UgaW5zdGFudGlhYmxlIGluc3RyIGludGVyZmFjZSBpbnRlcmxlYXZlZCBpbnRlcnNlY3QgaW50byBpbnZhbGlkYXRlIGludmlzaWJsZSBpcyBpc19mcmVlX2xvY2sgaXNfaXB2NCBpc19pcHY0X2NvbXBhdCBpc19ub3QgaXNfbm90X251bGwgaXNfdXNlZF9sb2NrIGlzZGF0ZSBpc251bGwgaXNvbGF0aW9uIGl0ZXJhdGUgamF2YSBqb2luIGpzb24ganNvbl9leGlzdHMga2VlcCBrZWVwX2R1cGxpY2F0ZXMga2V5IGtleXMga2lsbCBsYW5ndWFnZSBsYXJnZSBsYXN0IGxhc3RfZGF5IGxhc3RfaW5zZXJ0X2lkIGxhc3RfdmFsdWUgbGF0ZXJhbCBsYXggbGNhc2UgbGVhZCBsZWFkaW5nIGxlYXN0IGxlYXZlcyBsZWZ0IGxlbiBsZW5naHQgbGVuZ3RoIGxlc3MgbGV2ZWwgbGV2ZWxzIGxpYnJhcnkgbGlrZSBsaWtlMiBsaWtlNCBsaWtlYyBsaW1pdCBsaW5lcyBsaW5rIGxpc3QgbGlzdGFnZyBsaXR0bGUgbG4gbG9hZCBsb2FkX2ZpbGUgbG9iIGxvYnMgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1wIGxvY2F0ZSBsb2NhdG9yIGxvY2sgbG9ja2VkIGxvZyBsb2cxMCBsb2cyIGxvZ2ZpbGUgbG9nZmlsZXMgbG9nZ2luZyBsb2dpY2FsIGxvZ2ljYWxfcmVhZHNfcGVyX2NhbGwgbG9nb2ZmIGxvZ29uIGxvZ3MgbG9uZyBsb29wIGxvdyBsb3dfcHJpb3JpdHkgbG93ZXIgbHBhZCBscnRyaW0gbHRyaW0gbWFpbiBtYWtlX3NldCBtYWtlZGF0ZSBtYWtldGltZSBtYW5hZ2VkIG1hbmFnZW1lbnQgbWFudWFsIG1hcCBtYXBwaW5nIG1hc2sgbWFzdGVyIG1hc3Rlcl9wb3Nfd2FpdCBtYXRjaCBtYXRjaGVkIG1hdGVyaWFsaXplZCBtYXggbWF4ZXh0ZW50cyBtYXhpbWl6ZSBtYXhpbnN0YW5jZXMgbWF4bGVuIG1heGxvZ2ZpbGVzIG1heGxvZ2hpc3RvcnkgbWF4bG9nbWVtYmVycyBtYXhzaXplIG1heHRyYW5zIG1kNSBtZWFzdXJlcyBtZWRpYW4gbWVkaXVtIG1lbWJlciBtZW1jb21wcmVzcyBtZW1vcnkgbWVyZ2UgbWljcm9zZWNvbmQgbWlkIG1pZ3JhdGlvbiBtaW4gbWluZXh0ZW50cyBtaW5pbXVtIG1pbmluZyBtaW51cyBtaW51dGUgbWludXRlcyBtaW52YWx1ZSBtaXNzaW5nIG1vZCBtb2RlIG1vZGVsIG1vZGlmaWNhdGlvbiBtb2RpZnkgbW9kdWxlIG1vbml0b3JpbmcgbW9udGggbW9udGhzIG1vdW50IG1vdmUgbW92ZW1lbnQgbXVsdGlzZXQgbXV0ZXggbmFtZSBuYW1lX2NvbnN0IG5hbWVzIG5hbiBuYXRpb25hbCBuYXRpdmUgbmF0dXJhbCBuYXYgbmNoYXIgbmNsb2IgbmVzdGVkIG5ldmVyIG5ldyBuZXdsaW5lIG5leHQgbmV4dHZhbCBubyBub193cml0ZV90b19iaW5sb2cgbm9hcmNoaXZlbG9nIG5vYXVkaXQgbm9iYWRmaWxlIG5vY2hlY2sgbm9jb21wcmVzcyBub2NvcHkgbm9jeWNsZSBub2RlbGF5IG5vZGlzY2FyZGZpbGUgbm9lbnRpdHllc2NhcGluZyBub2d1YXJhbnRlZSBub2tlZXAgbm9sb2dmaWxlIG5vbWFwcGluZyBub21heHZhbHVlIG5vbWluaW1pemUgbm9taW52YWx1ZSBub21vbml0b3Jpbmcgbm9uZSBub25lZGl0aW9uYWJsZSBub25zY2hlbWEgbm9vcmRlciBub3ByIG5vcHJvIG5vcHJvbSBub3Byb21wIG5vcHJvbXB0IG5vcmVseSBub3Jlc2V0bG9ncyBub3JldmVyc2Ugbm9ybWFsIG5vcm93ZGVwZW5kZW5jaWVzIG5vc2NoZW1hY2hlY2sgbm9zd2l0Y2ggbm90IG5vdGhpbmcgbm90aWNlIG5vdG51bGwgbm90cmltIG5vdmFsaWRhdGUgbm93IG5vd2FpdCBudGhfdmFsdWUgbnVsbGlmIG51bGxzIG51bSBudW1iIG51bWJlIG52YXJjaGFyIG52YXJjaGFyMiBvYmplY3Qgb2NpY29sbCBvY2lkYXRlIG9jaWRhdGV0aW1lIG9jaWR1cmF0aW9uIG9jaWludGVydmFsIG9jaWxvYmxvY2F0b3Igb2NpbnVtYmVyIG9jaXJlZiBvY2lyZWZjdXJzb3Igb2Npcm93aWQgb2Npc3RyaW5nIG9jaXR5cGUgb2N0IG9jdGV0X2xlbmd0aCBvZiBvZmYgb2ZmbGluZSBvZmZzZXQgb2lkIG9pZGluZGV4IG9sZCBvbiBvbmxpbmUgb25seSBvcGFxdWUgb3BlbiBvcGVyYXRpb25zIG9wZXJhdG9yIG9wdGltYWwgb3B0aW1pemUgb3B0aW9uIG9wdGlvbmFsbHkgb3Igb3JhY2xlIG9yYWNsZV9kYXRlIG9yYWRhdGEgb3JkIG9yZGF1ZGlvIG9yZGRpY29tIG9yZGRvYyBvcmRlciBvcmRpbWFnZSBvcmRpbmFsaXR5IG9yZHZpZGVvIG9yZ2FuaXphdGlvbiBvcmxhbnkgb3JsdmFyeSBvdXQgb3V0ZXIgb3V0ZmlsZSBvdXRsaW5lIG91dHB1dCBvdmVyIG92ZXJmbG93IG92ZXJyaWRpbmcgcGFja2FnZSBwYWQgcGFyYWxsZWwgcGFyYWxsZWxfZW5hYmxlIHBhcmFtZXRlcnMgcGFyZW50IHBhcnNlIHBhcnRpYWwgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzY2FsIHBhc3NpbmcgcGFzc3dvcmQgcGFzc3dvcmRfZ3JhY2VfdGltZSBwYXNzd29yZF9sb2NrX3RpbWUgcGFzc3dvcmRfcmV1c2VfbWF4IHBhc3N3b3JkX3JldXNlX3RpbWUgcGFzc3dvcmRfdmVyaWZ5X2Z1bmN0aW9uIHBhdGNoIHBhdGggcGF0aW5kZXggcGN0aW5jcmVhc2UgcGN0dGhyZXNob2xkIHBjdHVzZWQgcGN0dmVyc2lvbiBwZXJjZW50IHBlcmNlbnRfcmFuayBwZXJjZW50aWxlX2NvbnQgcGVyY2VudGlsZV9kaXNjIHBlcmZvcm1hbmNlIHBlcmlvZCBwZXJpb2RfYWRkIHBlcmlvZF9kaWZmIHBlcm1hbmVudCBwaHlzaWNhbCBwaSBwaXBlIHBpcGVsaW5lZCBwaXZvdCBwbHVnZ2FibGUgcGx1Z2luIHBvbGljeSBwb3NpdGlvbiBwb3N0X3RyYW5zYWN0aW9uIHBvdyBwb3dlciBwcmFnbWEgcHJlYnVpbHQgcHJlY2VkZXMgcHJlY2VkaW5nIHByZWNpc2lvbiBwcmVkaWN0aW9uIHByZWRpY3Rpb25fY29zdCBwcmVkaWN0aW9uX2RldGFpbHMgcHJlZGljdGlvbl9wcm9iYWJpbGl0eSBwcmVkaWN0aW9uX3NldCBwcmVwYXJlIHByZXNlbnQgcHJlc2VydmUgcHJpb3IgcHJpb3JpdHkgcHJpdmF0ZSBwcml2YXRlX3NnYSBwcml2aWxlZ2VzIHByb2NlZHVyYWwgcHJvY2VkdXJlIHByb2NlZHVyZV9hbmFseXplIHByb2Nlc3NsaXN0IHByb2ZpbGVzIHByb2plY3QgcHJvbXB0IHByb3RlY3Rpb24gcHVibGljIHB1Ymxpc2hpbmdzZXJ2ZXJuYW1lIHB1cmdlIHF1YXJ0ZXIgcXVlcnkgcXVpY2sgcXVpZXNjZSBxdW90YSBxdW90ZW5hbWUgcmFkaWFucyByYWlzZSByYW5kIHJhbmdlIHJhbmsgcmF3IHJlYWQgcmVhZHMgcmVhZHNpemUgcmVidWlsZCByZWNvcmQgcmVjb3JkcyByZWNvdmVyIHJlY292ZXJ5IHJlY3Vyc2l2ZSByZWN5Y2xlIHJlZG8gcmVkdWNlZCByZWYgcmVmZXJlbmNlIHJlZmVyZW5jZWQgcmVmZXJlbmNlcyByZWZlcmVuY2luZyByZWZyZXNoIHJlZ2V4cF9saWtlIHJlZ2lzdGVyIHJlZ3JfYXZneCByZWdyX2F2Z3kgcmVncl9jb3VudCByZWdyX2ludGVyY2VwdCByZWdyX3IyIHJlZ3Jfc2xvcGUgcmVncl9zeHggcmVncl9zeHkgcmVqZWN0IHJla2V5IHJlbGF0aW9uYWwgcmVsYXRpdmUgcmVsYXlsb2cgcmVsZWFzZSByZWxlYXNlX2xvY2sgcmVsaWVzX29uIHJlbG9jYXRlIHJlbHkgcmVtIHJlbWFpbmRlciByZW5hbWUgcmVwYWlyIHJlcGVhdCByZXBsYWNlIHJlcGxpY2F0ZSByZXBsaWNhdGlvbiByZXF1aXJlZCByZXNldCByZXNldGxvZ3MgcmVzaXplIHJlc291cmNlIHJlc3BlY3QgcmVzdG9yZSByZXN0cmljdGVkIHJlc3VsdCByZXN1bHRfY2FjaGUgcmVzdW1hYmxlIHJlc3VtZSByZXRlbnRpb24gcmV0dXJuIHJldHVybmluZyByZXR1cm5zIHJldXNlIHJldmVyc2UgcmV2b2tlIHJpZ2h0IHJsaWtlIHJvbGUgcm9sZXMgcm9sbGJhY2sgcm9sbGluZyByb2xsdXAgcm91bmQgcm93IHJvd19jb3VudCByb3dkZXBlbmRlbmNpZXMgcm93aWQgcm93bnVtIHJvd3MgcnRyaW0gcnVsZXMgc2FmZSBzYWx0IHNhbXBsZSBzYXZlIHNhdmVwb2ludCBzYjEgc2IyIHNiNCBzY2FuIHNjaGVtYSBzY2hlbWFjaGVjayBzY24gc2NvcGUgc2Nyb2xsIHNkb19nZW9yYXN0ZXIgc2RvX3RvcG9fZ2VvbWV0cnkgc2VhcmNoIHNlY190b190aW1lIHNlY29uZCBzZWNvbmRzIHNlY3Rpb24gc2VjdXJlZmlsZSBzZWN1cml0eSBzZWVkIHNlZ21lbnQgc2VsZWN0IHNlbGYgc2VtaSBzZXF1ZW5jZSBzZXF1ZW50aWFsIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyZXJyb3Igc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2Vzc2lvbnNfcGVyX3VzZXIgc2V0IHNldHMgc2V0dGluZ3Mgc2hhIHNoYTEgc2hhMiBzaGFyZSBzaGFyZWQgc2hhcmVkX3Bvb2wgc2hvcnQgc2hvdyBzaHJpbmsgc2h1dGRvd24gc2lfYXZlcmFnZWNvbG9yIHNpX2NvbG9yaGlzdG9ncmFtIHNpX2ZlYXR1cmVsaXN0IHNpX3Bvc2l0aW9uYWxjb2xvciBzaV9zdGlsbGltYWdlIHNpX3RleHR1cmUgc2libGluZ3Mgc2lkIHNpZ24gc2luIHNpemUgc2l6ZV90IHNpemVzIHNraXAgc2xhdmUgc2xlZXAgc21hbGxkYXRldGltZWZyb21wYXJ0cyBzbWFsbGZpbGUgc25hcHNob3Qgc29tZSBzb25hbWUgc29ydCBzb3VuZGV4IHNvdXJjZSBzcGFjZSBzcGFyc2Ugc3BmaWxlIHNwbGl0IHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2NhbGNfZm91bmRfcm93cyBzcWxfc21hbGxfcmVzdWx0IHNxbF92YXJpYW50X3Byb3BlcnR5IHNxbGNvZGUgc3FsZGF0YSBzcWxlcnJvciBzcWxuYW1lIHNxbHN0YXRlIHNxcnQgc3F1YXJlIHN0YW5kYWxvbmUgc3RhbmRieSBzdGFydCBzdGFydGluZyBzdGFydHVwIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGF0c19iaW5vbWlhbF90ZXN0IHN0YXRzX2Nyb3NzdGFiIHN0YXRzX2tzX3Rlc3Qgc3RhdHNfbW9kZSBzdGF0c19td190ZXN0IHN0YXRzX29uZV93YXlfYW5vdmEgc3RhdHNfdF90ZXN0XyBzdGF0c190X3Rlc3RfaW5kZXAgc3RhdHNfdF90ZXN0X29uZSBzdGF0c190X3Rlc3RfcGFpcmVkIHN0YXRzX3dzcl90ZXN0IHN0YXR1cyBzdGQgc3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkZXYgc3RvcCBzdG9yYWdlIHN0b3JlIHN0b3JlZCBzdHIgc3RyX3RvX2RhdGUgc3RyYWlnaHRfam9pbiBzdHJjbXAgc3RyaWN0IHN0cmluZyBzdHJ1Y3Qgc3R1ZmYgc3R5bGUgc3ViZGF0ZSBzdWJwYXJ0aXRpb24gc3VicGFydGl0aW9ucyBzdWJzdGl0dXRhYmxlIHN1YnN0ciBzdWJzdHJpbmcgc3VidGltZSBzdWJ0cmluZ19pbmRleCBzdWJ0eXBlIHN1Y2Nlc3Mgc3VtIHN1c3BlbmQgc3dpdGNoIHN3aXRjaG9mZnNldCBzd2l0Y2hvdmVyIHN5bmMgc3luY2hyb25vdXMgc3lub255bSBzeXMgc3lzX3htbGFnZyBzeXNhc20gc3lzYXV4IHN5c2RhdGUgc3lzZGF0ZXRpbWVvZmZzZXQgc3lzZGJhIHN5c29wZXIgc3lzdGVtIHN5c3RlbV91c2VyIHN5c3V0Y2RhdGV0aW1lIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhYmxlc2FtcGxlIHRhbiB0ZG8gdGVtcGxhdGUgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdGVydGlhcnlfd2VpZ2h0cyB0ZXN0IHRoYW4gdGhlbiB0aHJlYWQgdGhyb3VnaCB0aWVyIHRpZXMgdGltZSB0aW1lX2Zvcm1hdCB0aW1lX3pvbmUgdGltZWRpZmYgdGltZWZyb21wYXJ0cyB0aW1lb3V0IHRpbWVzdGFtcCB0aW1lc3RhbXBhZGQgdGltZXN0YW1wZGlmZiB0aW1lem9uZV9hYmJyIHRpbWV6b25lX21pbnV0ZSB0aW1lem9uZV9yZWdpb24gdG8gdG9fYmFzZTY0IHRvX2RhdGUgdG9fZGF5cyB0b19zZWNvbmRzIHRvZGF0ZXRpbWVvZmZzZXQgdHJhY2UgdHJhY2tpbmcgdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25hbCB0cmFuc2xhdGUgdHJhbnNsYXRpb24gdHJlYXQgdHJpZ2dlciB0cmlnZ2VyX25lc3RsZXZlbCB0cmlnZ2VycyB0cmltIHRydW5jYXRlIHRyeV9jYXN0IHRyeV9jb252ZXJ0IHRyeV9wYXJzZSB0eXBlIHViMSB1YjIgdWI0IHVjYXNlIHVuYXJjaGl2ZWQgdW5ib3VuZGVkIHVuY29tcHJlc3MgdW5kZXIgdW5kbyB1bmhleCB1bmljb2RlIHVuaWZvcm0gdW5pbnN0YWxsIHVuaW9uIHVuaXF1ZSB1bml4X3RpbWVzdGFtcCB1bmtub3duIHVubGltaXRlZCB1bmxvY2sgdW5uZXN0IHVucGl2b3QgdW5yZWNvdmVyYWJsZSB1bnNhZmUgdW5zaWduZWQgdW50aWwgdW50cnVzdGVkIHVudXNhYmxlIHVudXNlZCB1cGRhdGUgdXBkYXRlZCB1cGdyYWRlIHVwcGVkIHVwcGVyIHVwc2VydCB1cmwgdXJvd2lkIHVzYWJsZSB1c2FnZSB1c2UgdXNlX3N0b3JlZF9vdXRsaW5lcyB1c2VyIHVzZXJfZGF0YSB1c2VyX3Jlc291cmNlcyB1c2VycyB1c2luZyB1dGNfZGF0ZSB1dGNfdGltZXN0YW1wIHV1aWQgdXVpZF9zaG9ydCB2YWxpZGF0ZSB2YWxpZGF0ZV9wYXNzd29yZF9zdHJlbmd0aCB2YWxpZGF0aW9uIHZhbGlzdCB2YWx1ZSB2YWx1ZXMgdmFyIHZhcl9zYW1wIHZhcmNoYXJjIHZhcmkgdmFyaWEgdmFyaWFiIHZhcmlhYmwgdmFyaWFibGUgdmFyaWFibGVzIHZhcmlhbmNlIHZhcnAgdmFycmF3IHZhcnJhd2MgdmFycmF5IHZlcmlmeSB2ZXJzaW9uIHZlcnNpb25zIHZpZXcgdmlydHVhbCB2aXNpYmxlIHZvaWQgd2FpdCB3YWxsZXQgd2FybmluZyB3YXJuaW5ncyB3ZWVrIHdlZWtkYXkgd2Vla29meWVhciB3ZWxsZm9ybWVkIHdoZW4gd2hlbmUgd2hlbmV2IHdoZW5ldmUgd2hlbmV2ZXIgd2hlcmUgd2hpbGUgd2hpdGVzcGFjZSB3aW5kb3cgd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyYXBwZWQgeGRiIHhtbCB4bWxhZ2cgeG1sYXR0cmlidXRlcyB4bWxjYXN0IHhtbGNvbGF0dHZhbCB4bWxlbGVtZW50IHhtbGV4aXN0cyB4bWxmb3Jlc3QgeG1saW5kZXggeG1sbmFtZXNwYWNlcyB4bWxwaSB4bWxxdWVyeSB4bWxyb290IHhtbHNjaGVtYSB4bWxzZXJpYWxpemUgeG1sdGFibGUgeG1sdHlwZSB4b3IgeWVhciB5ZWFyX3RvX21vbnRoIHllYXJzIHllYXJ3ZWVrIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5rbm93biIsYnVpbHRfaW46ImFycmF5IGJpZ2ludCBiaW5hcnkgYml0IGJsb2IgYm9vbCBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHRpbWUgdGltZXN0YW1wIHRpbnlpbnQgdmFyY2hhciB2YXJ5aW5nIHZvaWQifSxjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHtiZWdpbjoiJycifV19LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx7YmVnaW46JyIiJ31dfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxlLkNfTlVNQkVSX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx0LGUuSEFTSF9DT01NRU5UX01PREVdfSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHQsZS5IQVNIX0NPTU1FTlRfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YW4uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFLGxleGVtZXM6ZS5VTkRFUlNDT1JFX0lERU5UX1JFLGtleXdvcmRzOntuYW1lOiJmb3IgaW4gd2hpbGUgcmVwZWF0IHVudGlsIGlmIHRoZW4gZWxzZSIsc3ltYm9sOiJiZXJub3VsbGkgYmVybm91bGxpX2xvZ2l0IGJpbm9taWFsIGJpbm9taWFsX2xvZ2l0IGJldGFfYmlub21pYWwgaHlwZXJnZW9tZXRyaWMgY2F0ZWdvcmljYWwgY2F0ZWdvcmljYWxfbG9naXQgb3JkZXJlZF9sb2dpc3RpYyBuZWdfYmlub21pYWwgbmVnX2Jpbm9taWFsXzIgbmVnX2Jpbm9taWFsXzJfbG9nIHBvaXNzb24gcG9pc3Nvbl9sb2cgbXVsdGlub21pYWwgbm9ybWFsIGV4cF9tb2Rfbm9ybWFsIHNrZXdfbm9ybWFsIHN0dWRlbnRfdCBjYXVjaHkgZG91YmxlX2V4cG9uZW50aWFsIGxvZ2lzdGljIGd1bWJlbCBsb2dub3JtYWwgY2hpX3NxdWFyZSBpbnZfY2hpX3NxdWFyZSBzY2FsZWRfaW52X2NoaV9zcXVhcmUgZXhwb25lbnRpYWwgaW52X2dhbW1hIHdlaWJ1bGwgZnJlY2hldCByYXlsZWlnaCB3aWVuZXIgcGFyZXRvIHBhcmV0b190eXBlXzIgdm9uX21pc2VzIHVuaWZvcm0gbXVsdGlfbm9ybWFsIG11bHRpX25vcm1hbF9wcmVjIG11bHRpX25vcm1hbF9jaG9sZXNreSBtdWx0aV9ncCBtdWx0aV9ncF9jaG9sZXNreSBtdWx0aV9zdHVkZW50X3QgZ2F1c3NpYW5fZGxtX29icyBkaXJpY2hsZXQgbGtqX2NvcnIgbGtqX2NvcnJfY2hvbGVza3kgd2lzaGFydCBpbnZfd2lzaGFydCIsInNlbGVjdG9yLXRhZyI6ImludCByZWFsIHZlY3RvciBzaW1wbGV4IHVuaXRfdmVjdG9yIG9yZGVyZWQgcG9zaXRpdmVfb3JkZXJlZCByb3dfdmVjdG9yIG1hdHJpeCBjaG9sZXNreV9mYWN0b3JfY29yciBjaG9sZXNreV9mYWN0b3JfY292IGNvcnJfbWF0cml4IGNvdl9tYXRyaXgiLHRpdGxlOiJmdW5jdGlvbnMgbW9kZWwgZGF0YSBwYXJhbWV0ZXJzIHF1YW50aXRpZXMgdHJhbnNmb3JtZWQgZ2VuZXJhdGVkIixsaXRlcmFsOiJ0cnVlIGZhbHNlIn0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxiIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkKyg/OltlRV1bK1xcLV0/XFxkKik/TFxcYiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcZCtcXC4oPyFcXGQpKD86aVxcYik/IixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXC5cXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIscmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3RhdGEuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsiZG8iLCJhZG8iXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOiJpZiBlbHNlIGluIGZvcmVhY2ggZm9yIGZvcnYgZm9ydmEgZm9ydmFsIGZvcnZhbHUgZm9ydmFsdWUgZm9ydmFsdWVzIGJ5IGJ5cyBieXNvcnQgeGkgcXVpZXRseSBxdWkgY2FwdHVyZSBhYm91dCBhYyBhY183IGFjcHJwbG90IGFjcHJwbG90XzcgYWRqdXN0IGFkbyBhZG9wYXRoIGFkb3VwZGF0ZSBhbHBoYSBhbWVhbnMgYW4gYW5vIGFub3YgYW5vdmEgYW5vdmFfZXN0YXQgYW5vdmFfdGVybXMgYW5vdmFkZWYgYW9yZGVyIGFwIGFwcCBhcHBlIGFwcGVuIGFwcGVuZCBhcmNoIGFyY2hfZHIgYXJjaF9lc3RhdCBhcmNoX3AgYXJjaGxtIGFyZWcgYXJlZ19wIGFyZ3MgYXJpbWEgYXJpbWFfZHIgYXJpbWFfZXN0YXQgYXJpbWFfcCBhcyBhc21wcm9iaXQgYXNtcHJvYml0X2VzdGF0IGFzbXByb2JpdF9sZiBhc21wcm9iaXRfbWZ4X19kbGcgYXNtcHJvYml0X3AgYXNzIGFzc2UgYXNzZXIgYXNzZXJ0IGF2cGxvdCBhdnBsb3RfNyBhdnBsb3RzIGF2cGxvdHNfNyBiY3NrZXcwIGJnb2RmcmV5IGJpbnJlZyBiaXAwX2xmIGJpcGxvdCBiaXBwX2xmIGJpcHJfbGYgYmlwcl9wIGJpcHJvYml0IGJpdGVzdCBiaXRlc3RpIGJpdG93dCBibG9naXQgYm1lbXNpemUgYm9vdCBib290c2FtcCBib290c3RyYXAgYm9vdHN0cmFwXzggYm94Y29fbCBib3hjb19wIGJveGNveCBib3hjb3hfNiBib3hjb3hfcCBicHJvYml0IGJyIGJyZWFrIGJyaWVyIGJybyBicm93IGJyb3dzIGJyb3dzZSBicnIgYnJyc3RhdCBicyBic183IGJzYW1wbF93IGJzYW1wbGUgYnNhbXBsZV83IGJzcXJlZyBic3RhdCBic3RhdF83IGJzdGF0XzggYnN0cmFwIGJzdHJhcF83IGNhIGNhX2VzdGF0IGNhX3AgY2FiaXBsb3QgY2FtYXQgY2Fub24gY2Fub25fOCBjYW5vbl84X3AgY2Fub25fZXN0YXQgY2Fub25fcCBjYXAgY2Fwcm9qZWN0aW9uIGNhcHQgY2FwdHUgY2FwdHVyIGNhcHR1cmUgY2F0IGNjIGNjaGFydCBjY2hhcnRfNyBjY2kgY2QgY2Vuc29ic190YWJsZSBjZW50aWxlIGNmIGNoYXIgY2hkaXIgY2hlY2tkbGdmaWxlcyBjaGVja2VzdGltYXRpb25zYW1wbGUgY2hlY2tobHBmaWxlcyBjaGVja3N1bSBjaGVscCBjaSBjaWkgY2wgY2xhc3MgY2xhc3N1dGlsIGNsZWFyIGNsaSBjbGlzIGNsaXN0IGNsbyBjbG9nIGNsb2dfbGYgY2xvZ19wIGNsb2dpIGNsb2dpX3N3IGNsb2dpdCBjbG9naXRfbGYgY2xvZ2l0X3AgY2xvZ2l0cCBjbG9nbF9zdyBjbG9nbG9nIGNsb25ldmFyIGNsc2xpc3RhcnJheSBjbHVzdGVyIGNsdXN0ZXJfbWVhc3VyZXMgY2x1c3Rlcl9zdG9wIGNsdXN0ZXJfdHJlZSBjbHVzdGVyX3RyZWVfOCBjbHVzdGVybWF0IGNtZGxvZyBjbnIgY25yZSBjbnJlZyBjbnJlZ19wIGNucmVnX3N3IGNuc3JlZyBjb2RlYm9vayBjb2xsYXBzNCBjb2xsYXBzZSBjb2xvcm11bHRfbmIgY29sb3JtdWx0X253IGNvbXBhcmUgY29tcHJlc3MgY29uZiBjb25maSBjb25maXIgY29uZmlybSBjb25yZW4gY29ucyBjb25zdCBjb25zdHIgY29uc3RyYSBjb25zdHJhaSBjb25zdHJhaW4gY29uc3RyYWludCBjb250aW51ZSBjb250cmFjdCBjb3B5IGNvcHlyaWdodCBjb3B5c291cmNlIGNvciBjb3JjIGNvcnIgY29ycjJkYXRhIGNvcnJfYW50aSBjb3JyX2ttbyBjb3JyX3NtYyBjb3JyZSBjb3JyZWwgY29ycmVsYSBjb3JyZWxhdCBjb3JyZWxhdGUgY29ycmdyYW0gY291IGNvdW4gY291bnQgY294IGNveF9wIGNveF9zdyBjb3hiYXNlIGNveGhheiBjb3h2YXIgY3BycGxvdCBjcHJwbG90XzcgY3JjIGNyZXQgY3JldHUgY3JldHVyIGNyZXR1cm4gY3Jvc3MgY3MgY3NjcmlwdCBjc2NyaXB0X2xvZyBjc2kgY3QgY3RfaXMgY3RzZXQgY3RzdF81IGN0c3Rfc3QgY3R0b3N0IGN1bXNwIGN1bXNwXzcgY3VtdWwgY3VzdW0gY3VzdW1fNyBjdXRpbCBkfDAgZGF0YXNpZyBkYXRhc2lnbiBkYXRhc2lnbmEgZGF0YXNpZ25hdCBkYXRhc2lnbmF0dSBkYXRhc2lnbmF0dXIgZGF0YXNpZ25hdHVyZSBkYXRldG9mIGRiIGRiZXRhIGRlIGRlYyBkZWNvIGRlY29kIGRlY29kZSBkZWZmIGRlcyBkZXNjIGRlc2NyIGRlc2NyaSBkZXNjcmliIGRlc2NyaWJlIGRlc3RyaW5nIGRmYmV0YSBkZmdscyBkZnVsbGVyIGRpIGRpX2cgZGlyIGRpcnN0YXRzIGRpcyBkaXNjYXJkIGRpc3AgZGlzcF9yZXMgZGlzcF9zIGRpc3BsIGRpc3BsYSBkaXNwbGF5IGRpc3RpbmN0IGRvIGRvZSBkb2VkIGRvZWRpIGRvZWRpdCBkb3RwbG90IGRvdHBsb3RfNyBkcHJvYml0IGRyYXdub3JtIGRyb3AgZHMgZHNfdXRpbCBkc3RkaXplIGR1cGxpY2F0ZXMgZHVyYmluYSBkd3N0YXQgZHlkeCBlfDAgZWQgZWRpIGVkaXQgZWdlbiBlaXZyZWcgZW1kZWYgZW4gZW5jIGVuY28gZW5jb2QgZW5jb2RlIGVxIGVyYXNlIGVyZWcgZXJlZ19sZiBlcmVnX3AgZXJlZ19zdyBlcmVnaGV0IGVyZWdoZXRfZ2xmIGVyZWdoZXRfZ2xmX3NoIGVyZWdoZXRfZ3AgZXJlZ2hldF9pbGYgZXJlZ2hldF9pbGZfc2ggZXJlZ2hldF9pcCBlcmV0IGVyZXR1IGVyZXR1ciBlcmV0dXJuIGVyciBlcnJvIGVycm9yIGVzdCBlc3RfY2ZleGlzdCBlc3RfY2ZuYW1lIGVzdF9jbGlja2FibGUgZXN0X2V4cGFuZCBlc3RfaG9sZCBlc3RfdGFibGUgZXN0X3VuaG9sZCBlc3RfdW5ob2xkb2sgZXN0YXQgZXN0YXRfZGVmYXVsdCBlc3RhdF9zdW1tIGVzdGF0X3ZjZV9vbmx5IGVzdGkgZXN0aW1hdGVzIGV0b2RvdyBldG9mIGV0b21keSBleCBleGkgZXhpdCBleHBhbmQgZXhwYW5kY2wgZmFjIGZhY3QgZmFjdG8gZmFjdG9yIGZhY3Rvcl9lc3RhdCBmYWN0b3JfcCBmYWN0b3JfcGNhX3JvdGF0ZWQgZmFjdG9yX3JvdGF0ZSBmYWN0b3JtYXQgZmNhc3QgZmNhc3RfY29tcHV0ZSBmY2FzdF9ncmFwaCBmZGFkZXMgZmRhZGVzYyBmZGFkZXNjciBmZGFkZXNjcmkgZmRhZGVzY3JpYiBmZGFkZXNjcmliZSBmZGFzYXYgZmRhc2F2ZSBmZGF1c2UgZmhfc3QgZmlsZSBvcGVuIGZpbGUgcmVhZCBmaWxlIGNsb3NlIGZpbGUgZmlsZWZpbHRlciBmaWxsaW4gZmluZF9obHBfZmlsZSBmaW5kZmlsZSBmaW5kaXQgZmluZGl0XzcgZml0IGZsIGZsaSBmbGlzIGZsaXN0IGZvcjVfMCBmb3JtIGZvcm1hIGZvcm1hdCBmcHJlZGljdCBmcmFjXzE1NCBmcmFjX2FkaiBmcmFjX2NoayBmcmFjX2NveCBmcmFjX2RkcCBmcmFjX2RpcyBmcmFjX2R2IGZyYWNfaW4gZnJhY19tdW4gZnJhY19wcCBmcmFjX3BxIGZyYWNfcHYgZnJhY193Z3QgZnJhY194byBmcmFjZ2VuIGZyYWNwbG90IGZyYWNwbG90XzcgZnJhY3BvbHkgZnJhY3ByZWQgZnJvbl9leCBmcm9uX2huIGZyb25fcCBmcm9uX3RuIGZyb25fdG4yIGZyb250aWVyIGZ0b2RhdGUgZnRvZSBmdG9tZHkgZnRvd2RhdGUgZ3wwIGdhbWhldF9nbGYgZ2FtaGV0X2dwIGdhbWhldF9pbGYgZ2FtaGV0X2lwIGdhbW1hIGdhbW1hX2QyIGdhbW1hX3AgZ2FtbWFfc3cgZ2FtbWFoZXQgZ2RpX2hleGFnb24gZ2RpX3Nwb2tlcyBnZSBnZW4gZ2VuZSBnZW5lciBnZW5lcmEgZ2VuZXJhdCBnZW5lcmF0ZSBnZW5yYW5rIGdlbnN0ZCBnZW52bWVhbiBnZXR0b2tlbiBnbCBnbGFkZGVyIGdsYWRkZXJfNyBnbGltX2wwMSBnbGltX2wwMiBnbGltX2wwMyBnbGltX2wwNCBnbGltX2wwNSBnbGltX2wwNiBnbGltX2wwNyBnbGltX2wwOCBnbGltX2wwOSBnbGltX2wxMCBnbGltX2wxMSBnbGltX2wxMiBnbGltX2xmIGdsaW1fbXUgZ2xpbV9udzEgZ2xpbV9udzIgZ2xpbV9udzMgZ2xpbV9wIGdsaW1fdjEgZ2xpbV92MiBnbGltX3YzIGdsaW1fdjQgZ2xpbV92NSBnbGltX3Y2IGdsaW1fdjcgZ2xtIGdsbV82IGdsbV9wIGdsbV9zdyBnbG1wcmVkIGdsbyBnbG9iIGdsb2JhIGdsb2JhbCBnbG9naXQgZ2xvZ2l0XzggZ2xvZ2l0X3AgZ21lYW5zIGduYnJlX2xmIGduYnJlZyBnbmJyZWdfNSBnbmJyZWdfcCBnb21wX2xmIGdvbXBlX3N3IGdvbXBlcl9wIGdvbXBlcnR6IGdvbXBlcnR6aGV0IGdvbXBoZXRfZ2xmIGdvbXBoZXRfZ2xmX3NoIGdvbXBoZXRfZ3AgZ29tcGhldF9pbGYgZ29tcGhldF9pbGZfc2ggZ29tcGhldF9pcCBncGhkb3QgZ3BocGVuIGdwaHByaW50IGdwcmVmcyBncHJvYmlfcCBncHJvYml0IGdwcm9iaXRfOCBnciBncjcgZ3JfY29weSBncl9jdXJyZW50IGdyX2RiIGdyX2Rlc2NyaWJlIGdyX2RpciBncl9kcmF3IGdyX2RyYXdfcmVwbGF5IGdyX2Ryb3AgZ3JfZWRpdCBncl9lZGl0dmlld29wdHMgZ3JfZXhhbXBsZSBncl9leGFtcGxlMiBncl9leHBvcnQgZ3JfcHJpbnQgZ3JfcXNjaGVtZSBncl9xdWVyeSBncl9yZWFkIGdyX3JlbmFtZSBncl9yZXBsYXkgZ3Jfc2F2ZSBncl9zZXQgZ3Jfc2V0c2NoZW1lIGdyX3RhYmxlIGdyX3VuZG8gZ3JfdXNlIGdyYXBoIGdyYXBoNyBncmViYXIgZ3JlaWdlbiBncmVpZ2VuXzcgZ3JlaWdlbl84IGdybWVhbmJ5IGdybWVhbmJ5XzcgZ3NfZmlsZWluZm8gZ3NfZmlsZXR5cGUgZ3NfZ3JhcGhpbmZvIGdzX3N0YXQgZ3NvcnQgZ3dvb2QgaHwwIGhhZGltdm8gaGFyZWcgaGF1c21hbiBoYXZlciBoZSBoZWNrX2QyIGhlY2ttYV9wIGhlY2ttYW4gaGVja3BfbGYgaGVja3ByX3AgaGVja3Byb2IgaGVsIGhlbHAgaGVyZWcgaGV0cHJfbGYgaGV0cHJfcCBoZXRwcm9iIGhldHRlc3QgaGV4ZHVtcCBoaWxpdGUgaGlzdCBoaXN0XzcgaGlzdG9ncmFtIGhsb2dpdCBobHUgaG1lYW5zIGhvdGVsIGhvdGVsbGluZyBocHJvYml0IGhyZWcgaHNlYXJjaCBpY2Q5IGljZDlfZmYgaWNkOXAgaWlzIGltcHV0ZSBpbXRlc3QgaW5iYXNlIGluY2x1ZGUgaW5mIGluZmkgaW5maWwgaW5maWxlIGluZml4IGlucCBpbnB1IGlucHV0IGlucyBpbnNoZWV0IGluc3AgaW5zcGUgaW5zcGVjIGluc3BlY3QgaW50ZWcgaW50ZW4gaW50cmVnIGludHJlZ183IGludHJlZ19wIGludHJnMl9sbCBpbnRyZ19sbCBpbnRyZ19sbDIgaXBvbGF0ZSBpcXJlZyBpciBpcmYgaXJmX2NyZWF0ZSBpcmZtIGlyaSBpc19zdnkgaXNfc3Z5c3VtIGlzaWQgaXN0ZGl6ZSBpdnByb2JfMV9sZiBpdnByb2JfbGYgaXZwcm9iaXQgaXZwcm9iaXRfcCBpdnJlZyBpdnJlZ19mb290bm90ZSBpdnRvYl8xX2xmIGl2dG9iX2xmIGl2dG9iaXQgaXZ0b2JpdF9wIGphY2trbmlmZSBqYWNrbmlmZSBqa25pZmUgamtuaWZlXzYgamtuaWZlXzggamtzdGF0IGpvaW5ieSBrYWxhcm1hMSBrYXAga2FwXzMga2FwbWVpZXIga2FwcGEga2Fwd2d0IGtkZW5zaXR5IGtkZW5zaXR5Xzcga2VlcCBrc20ga3NtaXJub3Yga3RhdSBrd2FsbGlzIGx8MCBsYSBsYWIgbGFiZSBsYWJlbCBsYWJlbGJvb2sgbGFkZGVyIGxldmVscyBsZXZlbHNvZiBsZXZlcmFnZSBsZml0IGxmaXRfcCBsaSBsaW5jb20gbGluZSBsaW5rdGVzdCBsaXMgbGlzdCBsbG9naGV0X2dsZiBsbG9naGV0X2dsZl9zaCBsbG9naGV0X2dwIGxsb2doZXRfaWxmIGxsb2doZXRfaWxmX3NoIGxsb2doZXRfaXAgbGxvZ2lfc3cgbGxvZ2lzX3AgbGxvZ2lzdCBsbG9naXN0aWMgbGxvZ2lzdGljaGV0IGxub3JtX2xmIGxub3JtX3N3IGxub3JtYV9wIGxub3JtYWwgbG5vcm1hbGhldCBsbm9ybWhldF9nbGYgbG5vcm1oZXRfZ2xmX3NoIGxub3JtaGV0X2dwIGxub3JtaGV0X2lsZiBsbm9ybWhldF9pbGZfc2ggbG5vcm1oZXRfaXAgbG5za2V3MCBsb2FkaW5ncGxvdCBsb2MgbG9jYSBsb2NhbCBsb2cgbG9naSBsb2dpc19sZiBsb2dpc3RpYyBsb2dpc3RpY19wIGxvZ2l0IGxvZ2l0X2VzdGF0IGxvZ2l0X3AgbG9nbG9ncyBsb2dyYW5rIGxvbmV3YXkgbG9va2ZvciBsb29rdXAgbG93ZXNzIGxvd2Vzc183IGxwcmVkaWN0IGxyZWNvbXAgbHJvYyBscm9jXzcgbHJ0ZXN0IGxzIGxzZW5zIGxzZW5zXzcgbHNlbnNfeCBsc3RhdCBsdGFibGUgbHRhYmxlXzcgbHRyaWFuZyBsdiBsdnIycGxvdCBsdnIycGxvdF83IG18MCBtYSBtYWMgbWFjciBtYWNybyBtYWtlY25zIG1hbiBtYW5vdmEgbWFub3ZhX2VzdGF0IG1hbm92YV9wIG1hbm92YXRlc3QgbWFudGVsIG1hcmsgbWFya2luIG1hcmtvdXQgbWFya3NhbXBsZSBtYXQgbWF0X2NhcHAgbWF0X29yZGVyIG1hdF9wdXRfcnIgbWF0X3JhcHAgbWF0YSBtYXRhX2NsZWFyIG1hdGFfZGVzY3JpYmUgbWF0YV9kcm9wIG1hdGFfbWF0ZGVzY3JpYmUgbWF0YV9tYXRzYXZlIG1hdGFfbWF0dXNlIG1hdGFfbWVtb3J5IG1hdGFfbWxpYiBtYXRhX21vc2F2ZSBtYXRhX3JlbmFtZSBtYXRhX3doaWNoIG1hdGFsYWJlbCBtYXRjcHJvYyBtYXRsaXN0IG1hdG5hbWUgbWF0ciBtYXRyaSBtYXRyaXggbWF0cml4X2lucHV0X19kbGcgbWF0c3RyaWsgbWNjIG1jY2kgbWQwXyBtZDFfIG1kMWRlYnVnXyBtZDJfIG1kMmRlYnVnXyBtZHMgbWRzX2VzdGF0IG1kc19wIG1kc2NvbmZpZyBtZHNsb25nIG1kc21hdCBtZHNzaGVwYXJkIG1keXRvZSBtZHl0b2YgbWVfZGVyZCBtZWFuIG1lYW5zIG1lZGlhbiBtZW1vcnkgbWVtc2l6ZSBtZXFwYXJzZSBtZXIgbWVyZyBtZXJnZSBtZnAgbWZ4IG1oZWxwIG1ob2RkcyBtaW5ib3VuZCBtaXhlZF9sbCBtaXhlZF9sbF9yZXBhcm0gbWthc3NlcnQgbWtkaXIgbWttYXQgbWtzcGxpbmUgbWwgbWxfNSBtbF9hZGpzIG1sX2JoaGhzIG1sX2NfZCBtbF9jaGVjayBtbF9jbGVhciBtbF9jbnQgbWxfZGVidWcgbWxfZGVmZCBtbF9lMCBtbF9lMF9iZmdzIG1sX2UwX2N5Y2xlIG1sX2UwX2RmcCBtbF9lMGkgbWxfZTEgbWxfZTFfYmZncyBtbF9lMV9iaGhoIG1sX2UxX2N5Y2xlIG1sX2UxX2RmcCBtbF9lMiBtbF9lMl9jeWNsZSBtbF9lYmZnMCBtbF9lYmZyMCBtbF9lYmZyMSBtbF9lYmgwcSBtbF9lYmhoMCBtbF9lYmhyMCBtbF9lYnIwaSBtbF9lY3IwaSBtbF9lZGZwMCBtbF9lZGZyMCBtbF9lZGZyMSBtbF9lZHIwaSBtbF9lZHMgbWxfZWVyMGkgbWxfZWdyMGkgbWxfZWxmIG1sX2VsZl9iZmdzIG1sX2VsZl9iaGhoIG1sX2VsZl9jeWNsZSBtbF9lbGZfZGZwIG1sX2VsZmkgbWxfZWxmcyBtbF9lbnIwaSBtbF9lbnJyMCBtbF9lcmR1MCBtbF9lcmR1MF9iZmdzIG1sX2VyZHUwX2JoaGggbWxfZXJkdTBfYmhoaHEgbWxfZXJkdTBfY3ljbGUgbWxfZXJkdTBfZGZwIG1sX2VyZHUwX25yYmZncyBtbF9leGRlIG1sX2Zvb3Rub3RlIG1sX2dlcW5yIG1sX2dyYWQwIG1sX2dyYXBoIG1sX2hiaGhoIG1sX2hkMCBtbF9ob2xkIG1sX2luaXQgbWxfaW52IG1sX2xvZyBtbF9tYXggbWxfbWxvdXQgbWxfbWxvdXRfOCBtbF9tb2RlbCBtbF9uYjAgbWxfb3B0IG1sX3AgbWxfcGxvdCBtbF9xdWVyeSBtbF9yZGdyZCBtbF9yZXBvciBtbF9zX2UgbWxfc2NvcmUgbWxfc2VhcmMgbWxfdGVjaG5pcXVlIG1sX3VuaG9sZCBtbGV2YWwgbWxmXyBtbG1hdGJ5c3VtIG1sbWF0c3VtIG1sb2cgbWxvZ2kgbWxvZ2l0IG1sb2dpdF9mb290bm90ZSBtbG9naXRfcCBtbG9wdHMgbWxzdW0gbWx2ZWNzdW0gbW5sMF8gbW9yIG1vcmUgbW92IG1vdmUgbXByb2JpdCBtcHJvYml0X2xmIG1wcm9iaXRfcCBtcmR1MF8gbXJkdTFfIG12ZGVjb2RlIG12ZW5jb2RlIG12cmVnIG12cmVnX2VzdGF0IG58MCBuYnJlZyBuYnJlZ19hbCBuYnJlZ19sZiBuYnJlZ19wIG5icmVnX3N3IG5lc3RyZWcgbmV0IG5ld2V5IG5ld2V5XzcgbmV3ZXlfcCBuZXdzIG5sIG5sXzcgbmxfOSBubF85X3AgbmxfcCBubF9wXzcgbmxjb20gbmxjb21fcCBubGV4cDIgbmxleHAyXzcgbmxleHAyYSBubGV4cDJhXzcgbmxleHAzIG5sZXhwM183IG5sZ29tMyBubGdvbTNfNyBubGdvbTQgbmxnb200Xzcgbmxpbml0IG5sbG9nMyBubGxvZzNfNyBubGxvZzQgbmxsb2c0XzcgbmxvZ19yZCBubG9naXQgbmxvZ2l0X3AgbmxvZ2l0Z2VuIG5sb2dpdHRyZWUgbmxwcmVkIG5vIG5vYnJlYWsgbm9pIG5vaXMgbm9pc2kgbm9pc2lsIG5vaXNpbHkgbm90ZSBub3RlcyBub3Rlc19kbGcgbnB0cmVuZCBudW1sYWJlbCBudW1saXN0IG9kYmMgb2xkX3ZlciBvbG8gb2xvZyBvbG9naSBvbG9naV9zdyBvbG9naXQgb2xvZ2l0X3Agb2xvZ2l0cCBvbiBvbmUgb25ldyBvbmV3YSBvbmV3YXkgb3BfY29sbm0gb3BfY29tcCBvcF9kaWZmIG9wX2ludiBvcF9zdHIgb3ByIG9wcm8gb3Byb2Igb3Byb2Jfc3cgb3Byb2JpIG9wcm9iaV9wIG9wcm9iaXQgb3Byb2JpdHAgb3B0c19leGNsdXNpdmUgb3JkZXIgb3J0aG9nIG9ydGhwb2x5IG91IG91dCBvdXRmIG91dGZpIG91dGZpbCBvdXRmaWxlIG91dHMgb3V0c2ggb3V0c2hlIG91dHNoZWUgb3V0c2hlZXQgb3Z0ZXN0IHBhYyBwYWNfNyBwYWxldHRlIHBhcnNlIHBhcnNlX2Rpc3NpbSBwYXVzZSBwY2EgcGNhXzggcGNhX2Rpc3BsYXkgcGNhX2VzdGF0IHBjYV9wIHBjYV9yb3RhdGUgcGNhbWF0IHBjaGFydCBwY2hhcnRfNyBwY2hpIHBjaGlfNyBwY29yciBwY3RpbGUgcGVudGl1bSBwZXJncmFtIHBlcmdyYW1fNyBwZXJtdXRlIHBlcm11dGVfOCBwZXJzb25hbCBwZXRvX3N0IHBrY29sbGFwc2UgcGtjcm9zcyBwa2VxdWl2IHBrZXhhbWluZSBwa2V4YW1pbmVfNyBwa3NoYXBlIHBrc3VtbSBwa3N1bW1fNyBwbCBwbG8gcGxvdCBwbHVnaW4gcG5vcm0gcG5vcm1fNyBwb2lzZ29mIHBvaXNzX2xmIHBvaXNzX3N3IHBvaXNzb19wIHBvaXNzb24gcG9pc3Nvbl9lc3RhdCBwb3N0IHBvc3RjbG9zZSBwb3N0ZmlsZSBwb3N0dXRpbCBwcGVycm9uIHByIHByYWlzIHByYWlzX2UgcHJhaXNfZTIgcHJhaXNfcCBwcmVkaWN0IHByZWRpY3RubCBwcmVzZXJ2ZSBwcmludCBwcm8gcHJvYiBwcm9iaSBwcm9iaXQgcHJvYml0X2VzdGF0IHByb2JpdF9wIHByb2NfdGltZSBwcm9jb3ZlcmxheSBwcm9jcnVzdGVzIHByb2NydXN0ZXNfZXN0YXQgcHJvY3J1c3Rlc19wIHByb2ZpbGVyIHByb2cgcHJvZ3IgcHJvZ3JhIHByb2dyYW0gcHJvcCBwcm9wb3J0aW9uIHBydGVzdCBwcnRlc3RpIHB3Y29yciBwd2QgcVxccyBxYnkgcWJ5cyBxY2hpIHFjaGlfNyBxbGFkZGVyIHFsYWRkZXJfNyBxbm9ybSBxbm9ybV83IHFxcGxvdCBxcXBsb3RfNyBxcmVnIHFyZWdfYyBxcmVnX3AgcXJlZ19zdyBxdSBxdWFkY2hrIHF1YW50aWxlIHF1YW50aWxlXzcgcXVlIHF1ZXIgcXVlcnkgcmFuZ2UgcmFua3N1bSByYXRpbyByY2hhcnQgcmNoYXJ0XzcgcmNvZiByZWNhc3QgcmVjbGluayByZWNvZGUgcmVnIHJlZzMgcmVnM19wIHJlZ2R3IHJlZ3IgcmVncmUgcmVncmVfcDIgcmVncmVzIHJlZ3Jlc19wIHJlZ3Jlc3MgcmVncmVzc19lc3RhdCByZWdyaXZfcCByZW1hcCByZW4gcmVuYSByZW5hbSByZW5hbWUgcmVucGZpeCByZXBlYXQgcmVwbGFjZSByZXBvcnQgcmVzaGFwZSByZXN0b3JlIHJldCByZXR1IHJldHVyIHJldHVybiBybSBybWRpciByb2J2YXIgcm9jY29tcCByb2Njb21wXzcgcm9jY29tcF84IHJvY2ZfbGYgcm9jZml0IHJvY2ZpdF84IHJvY2dvbGQgcm9jcGxvdCByb2NwbG90Xzcgcm9jdGFiIHJvY3RhYl83IHJvbGxpbmcgcm9sb2dpdCByb2xvZ2l0X3Agcm90IHJvdGEgcm90YXQgcm90YXRlIHJvdGF0ZW1hdCBycmVnIHJyZWdfcCBydSBydW4gcnVudGVzdCBydmZwbG90IHJ2ZnBsb3RfNyBydnBwbG90IHJ2cHBsb3RfNyBzYSBzYWZlc3VtIHNhbXBsZSBzYW1wc2kgc2F2IHNhdmUgc2F2ZWRyZXN1bHRzIHNhdmVvbGQgc2Mgc2NhIHNjYWwgc2NhbGEgc2NhbGFyIHNjYXR0ZXIgc2NtX21pbmUgc2NvIHNjb2JfbGYgc2NvYl9wIHNjb2JpX3N3IHNjb2JpdCBzY29yIHNjb3JlIHNjb3JlcGxvdCBzY29yZXBsb3RfaGVscCBzY3JlZSBzY3JlZXBsb3Qgc2NyZWVwbG90X2hlbHAgc2R0ZXN0IHNkdGVzdGkgc2Ugc2VhcmNoIHNlcGFyYXRlIHNlcGVyYXRlIHNlcnJiYXIgc2VycmJhcl83IHNlcnNldCBzZXQgc2V0X2RlZmF1bHRzIHNmcmFuY2lhIHNoIHNoZSBzaGVsIHNoZWxsIHNoZXdoYXJ0IHNoZXdoYXJ0Xzcgc2lnbmVzdGltYXRpb25zYW1wbGUgc2lnbnJhbmsgc2lnbnRlc3Qgc2ltdWwgc2ltdWxfNyBzaW11bGF0ZSBzaW11bGF0ZV84IHNrdGVzdCBzbGVlcCBzbG9naXQgc2xvZ2l0X2QyIHNsb2dpdF9wIHNtb290aCBzbmFwc3BhbiBzbyBzb3Igc29ydCBzcGVhcm1hbiBzcGlrZXBsb3Qgc3Bpa2VwbG90Xzcgc3Bpa2VwbHQgc3BsaW5lX3ggc3BsaXQgc3FyZWcgc3FyZWdfcCBzcmV0IHNyZXR1IHNyZXR1ciBzcmV0dXJuIHNzYyBzdCBzdF9jdCBzdF9oYyBzdF9oY2Qgc3RfaGNkX3NoIHN0X2lzIHN0X2lzc3lzIHN0X25vdGUgc3RfcHJvbW8gc3Rfc2V0IHN0X3Nob3cgc3Rfc21wbCBzdF9zdWJpZCBzdGFjayBzdGF0c2J5IHN0YXRzYnlfOCBzdGJhc2Ugc3RjaSBzdGNpXzcgc3Rjb3ggc3Rjb3hfZXN0YXQgc3Rjb3hfZnIgc3Rjb3hfZnJfbGwgc3Rjb3hfcCBzdGNveF9zdyBzdGNveGttIHN0Y294a21fNyBzdGNzdGF0IHN0Y3VydiBzdGN1cnZlIHN0Y3VydmVfNyBzdGRlcyBzdGVtIHN0ZXB3aXNlIHN0ZXJlZyBzdGZpbGwgc3RnZW4gc3RpciBzdGpvaW4gc3RtYyBzdG1oIHN0cGhwbG90IHN0cGhwbG90Xzcgc3RwaHRlc3Qgc3RwaHRlc3RfNyBzdHB0aW1lIHN0cmF0ZSBzdHJhdGVfNyBzdHJlZyBzdHJlZ19zdyBzdHJlc2V0IHN0cyBzdHNfNyBzdHNldCBzdHNwbGl0IHN0c3VtIHN0dG9jYyBzdHRvY3Qgc3R2YXJ5IHN0d2VpYiBzdSBzdWVzdCBzdWVzdF84IHN1bSBzdW1tIHN1bW1hIHN1bW1hciBzdW1tYXJpIHN1bW1hcml6IHN1bW1hcml6ZSBzdW5mbG93ZXIgc3VyZWcgc3VydmN1cnYgc3VydnN1bSBzdmFyIHN2YXJfcCBzdm1hdCBzdnkgc3Z5X2Rpc3Agc3Z5X2RyZWcgc3Z5X2VzdCBzdnlfZXN0Xzcgc3Z5X2VzdGF0IHN2eV9nZXQgc3Z5X2duYnJlZ19wIHN2eV9oZWFkIHN2eV9oZWFkZXIgc3Z5X2hlY2ttYW5fcCBzdnlfaGVja3Byb2JfcCBzdnlfaW50cmVnX3Agc3Z5X2l2cmVnX3Agc3Z5X2xvZ2lzdGljX3Agc3Z5X2xvZ2l0X3Agc3Z5X21sb2dpdF9wIHN2eV9uYnJlZ19wIHN2eV9vbG9naXRfcCBzdnlfb3Byb2JpdF9wIHN2eV9wb2lzc29uX3Agc3Z5X3Byb2JpdF9wIHN2eV9yZWdyZXNzX3Agc3Z5X3N1YiBzdnlfc3ViXzcgc3Z5X3ggc3Z5X3hfNyBzdnlfeF9wIHN2eWRlcyBzdnlkZXNfOCBzdnlnZW4gc3Z5Z25icmVnIHN2eWhlY2ttYW4gc3Z5aGVja3Byb2Igc3Z5aW50cmVnIHN2eWludHJlZ183IHN2eWludHJnIHN2eWl2cmVnIHN2eWxjIHN2eWxvZ19wIHN2eWxvZ2l0IHN2eW1hcmtvdXQgc3Z5bWFya291dF84IHN2eW1lYW4gc3Z5bWxvZyBzdnltbG9naXQgc3Z5bmJyZWcgc3Z5b2xvZyBzdnlvbG9naXQgc3Z5b3Byb2Igc3Z5b3Byb2JpdCBzdnlvcHRzIHN2eXBvaXMgc3Z5cG9pc183IHN2eXBvaXNzb24gc3Z5cHJvYml0IHN2eXByb2J0IHN2eXByb3Agc3Z5cHJvcF83IHN2eXJhdGlvIHN2eXJlZyBzdnlyZWdfcCBzdnlyZWdyZXNzIHN2eXNldCBzdnlzZXRfNyBzdnlzZXRfOCBzdnl0YWIgc3Z5dGFiXzcgc3Z5dGVzdCBzdnl0b3RhbCBzdyBzd184IHN3Y25yZWcgc3djb3ggc3dlcmVnIHN3aWxrIHN3bG9naXMgc3dsb2dpdCBzd29sb2dpdCBzd29wcmJ0IHN3cG9pcyBzd3Byb2JpdCBzd3FyZWcgc3d0b2JpdCBzd3dlaWIgc3ltbWV0cnkgc3ltbWkgc3ltcGxvdCBzeW1wbG90Xzcgc3ludGF4IHN5c2Rlc2NyaWJlIHN5c2RpciBzeXN1c2Ugc3pyb2V0ZXIgdGEgdGFiIHRhYjEgdGFiMiB0YWJfb3IgdGFiZCB0YWJkaSB0YWJkaXMgdGFiZGlzcCB0YWJpIHRhYmxlIHRhYm9kZHMgdGFib2Rkc183IHRhYnN0YXQgdGFidSB0YWJ1bCB0YWJ1bGEgdGFidWxhdCB0YWJ1bGF0ZSB0ZSB0ZW1wZmlsZSB0ZW1wbmFtZSB0ZW1wdmFyIHRlcyB0ZXN0IHRlc3RubCB0ZXN0cGFybSB0ZXN0c3RkIHRldHJhY2hvcmljIHRpbWVfaXQgdGltZXIgdGlzIHRvYiB0b2JpIHRvYml0IHRvYml0X3AgdG9iaXRfc3cgdG9rZW4gdG9rZW5pIHRva2VuaXogdG9rZW5pemUgdG9zdHJpbmcgdG90YWwgdHJhbnNsYXRlIHRyYW5zbGF0b3IgdHJhbnNtYXAgdHJlYXRfbGwgdHJlYXRyX3AgdHJlYXRyZWcgdHJpbSB0cm5iX2NvbnMgdHJuYl9tZWFuIHRycG9pc3NfZDIgdHJ1bmNfbGwgdHJ1bmNyX3AgdHJ1bmNyZWcgdHNhcHBlbmQgdHNldCB0c2ZpbGwgdHNsaW5lIHRzbGluZV9leCB0c3JlcG9ydCB0c3JldmFyIHRzcmxpbmUgdHNzZXQgdHNzbW9vdGggdHN1bmFiIHR0ZXN0IHR0ZXN0aSB0dXRfY2hrIHR1dF93YWl0IHR1dG9yaWFsIHR3IHR3YXJlX3N0IHR3byB0d293YXkgdHdvd2F5X19mcGZpdF9zZXJzZXQgdHdvd2F5X19mdW5jdGlvbl9nZW4gdHdvd2F5X19oaXN0b2dyYW1fZ2VuIHR3b3dheV9faXBvaW50X3NlcnNldCB0d293YXlfX2lwb2ludHNfc2Vyc2V0IHR3b3dheV9fa2RlbnNpdHlfZ2VuIHR3b3dheV9fbGZpdF9zZXJzZXQgdHdvd2F5X19ub3JtZ2VuX2dlbiB0d293YXlfX3BjaV9zZXJzZXQgdHdvd2F5X19xZml0X3NlcnNldCB0d293YXlfX3NjYXR0ZXJpX3NlcnNldCB0d293YXlfX3N1bmZsb3dlcl9nZW4gdHdvd2F5X2tzbV9zZXJzZXQgdHkgdHlwIHR5cGUgdHlwZW9mIHV8MCB1bmFiIHVuYWJicmV2IHVuYWJjbWQgdXBkYXRlIHVzIHVzZSB1c2VsYWJlbCB2YXIgdmFyX21rY29tcGFuaW9uIHZhcl9wIHZhcmJhc2ljIHZhcmZjYXN0IHZhcmdyYW5nZXIgdmFyaXJmIHZhcmlyZl9hZGQgdmFyaXJmX2NncmFwaCB2YXJpcmZfY3JlYXRlIHZhcmlyZl9jdGFibGUgdmFyaXJmX2Rlc2NyaWJlIHZhcmlyZl9kaXIgdmFyaXJmX2Ryb3AgdmFyaXJmX2VyYXNlIHZhcmlyZl9ncmFwaCB2YXJpcmZfb2dyYXBoIHZhcmlyZl9yZW5hbWUgdmFyaXJmX3NldCB2YXJpcmZfdGFibGUgdmFybGlzdCB2YXJsbWFyIHZhcm5vcm0gdmFyc29jIHZhcnN0YWJsZSB2YXJzdGFibGVfdyB2YXJzdGFibGVfdzIgdmFyd2xlIHZjZSB2ZWMgdmVjX2ZldmQgdmVjX21rcGhpIHZlY19wIHZlY19wX3cgdmVjaXJmX2NyZWF0ZSB2ZWNsbWFyIHZlY2xtYXJfdyB2ZWNub3JtIHZlY25vcm1fdyB2ZWNyYW5rIHZlY3N0YWJsZSB2ZXJpbnN0IHZlcnMgdmVyc2kgdmVyc2lvIHZlcnNpb24gdmlldyB2aWV3c291cmNlIHZpZiB2d2xzIHdkYXRldG9mIHdlYmRlc2NyaWJlIHdlYnNlZWsgd2VidXNlIHdlaWIxX2xmIHdlaWIyX2xmIHdlaWJfbGYgd2VpYl9sZjAgd2VpYmhldF9nbGYgd2VpYmhldF9nbGZfc2ggd2VpYmhldF9nbGZhIHdlaWJoZXRfZ2xmYV9zaCB3ZWliaGV0X2dwIHdlaWJoZXRfaWxmIHdlaWJoZXRfaWxmX3NoIHdlaWJoZXRfaWxmYSB3ZWliaGV0X2lsZmFfc2ggd2VpYmhldF9pcCB3ZWlidV9zdyB3ZWlidWxfcCB3ZWlidWxsIHdlaWJ1bGxfYyB3ZWlidWxsX3Mgd2VpYnVsbGhldCB3aCB3aGVscCB3aGkgd2hpY2ggd2hpbCB3aGlsZSB3aWxjX3N0IHdpbGNveG9uIHdpbiB3aW5kIHdpbmRvIHdpbmRvdyB3aW5leGVjIHdudGVzdGIgd250ZXN0Yl83IHdudGVzdHEgeGNoYXJ0IHhjaGFydF83IHhjb3JyIHhjb3JyXzcgeGkgeGlfNiB4bWxzYXYgeG1sc2F2ZSB4bWx1c2UgeHBvc2UgeHNoIHhzaGUgeHNoZWwgeHNoZWxsIHh0X2lpcyB4dF90aXMgeHRhYl9wIHh0YWJvbmQgeHRiaW5fcCB4dGNsb2cgeHRjbG9nbG9nIHh0Y2xvZ2xvZ184IHh0Y2xvZ2xvZ19kMiB4dGNsb2dsb2dfcGFfcCB4dGNsb2dsb2dfcmVfcCB4dGNudF9wIHh0Y29yciB4dGRhdGEgeHRkZXMgeHRmcm9udF9wIHh0ZnJvbnRpZXIgeHRnZWUgeHRnZWVfZWxpbmsgeHRnZWVfZXN0YXQgeHRnZWVfbWFrZWl2YXIgeHRnZWVfcCB4dGdlZV9wbGluayB4dGdscyB4dGdsc19wIHh0aGF1cyB4dGhhdXNtYW4geHRodF9wIHh0aHRheWxvciB4dGlsZSB4dGludF9wIHh0aW50cmVnIHh0aW50cmVnXzggeHRpbnRyZWdfZDIgeHRpbnRyZWdfcCB4dGl2cF8xIHh0aXZwXzIgeHRpdnJlZyB4dGxpbmUgeHRsaW5lX2V4IHh0bG9naXQgeHRsb2dpdF84IHh0bG9naXRfZDIgeHRsb2dpdF9mZV9wIHh0bG9naXRfcGFfcCB4dGxvZ2l0X3JlX3AgeHRtaXhlZCB4dG1peGVkX2VzdGF0IHh0bWl4ZWRfcCB4dG5iX2ZlIHh0bmJfbGYgeHRuYnJlZyB4dG5icmVnX3BhX3AgeHRuYnJlZ19yZWZlX3AgeHRwY3NlIHh0cGNzZV9wIHh0cG9pcyB4dHBvaXNzb24geHRwb2lzc29uX2QyIHh0cG9pc3Nvbl9wYV9wIHh0cG9pc3Nvbl9yZWZlX3AgeHRwcmVkIHh0cHJvYml0IHh0cHJvYml0XzggeHRwcm9iaXRfZDIgeHRwcm9iaXRfcmVfcCB4dHBzX2ZlIHh0cHNfbGYgeHRwc19yZW4geHRwc19yZW5fOCB4dHJhcl9wIHh0cmMgeHRyY19wIHh0cmNoaCB4dHJlZmVfcCB4dHJlZyB4dHJlZ19iZSB4dHJlZ19mZSB4dHJlZ19tbCB4dHJlZ19wYV9wIHh0cmVnX3JlIHh0cmVnYXIgeHRyZXJlX3AgeHRzZXQgeHRzZl9sbCB4dHNmX2xsdGkgeHRzdW0geHR0YWIgeHR0ZXN0MCB4dHRvYml0IHh0dG9iaXRfOCB4dHRvYml0X3AgeHR0cmFucyB5eCB5eHZpZXdfX2Jhcmxpa2VfZHJhdyB5eHZpZXdfYXJlYV9kcmF3IHl4dmlld19iYXJfZHJhdyB5eHZpZXdfZG90X2RyYXcgeXh2aWV3X2Ryb3BsaW5lX2RyYXcgeXh2aWV3X2Z1bmN0aW9uX2RyYXcgeXh2aWV3X2lhcnJvd19kcmF3IHl4dmlld19pbGFiZWxzX2RyYXcgeXh2aWV3X25vcm1hbF9kcmF3IHl4dmlld19wY2Fycm93X2RyYXcgeXh2aWV3X3BjYmFycm93X2RyYXcgeXh2aWV3X3BjY2Fwc3ltX2RyYXcgeXh2aWV3X3Bjc2NhdHRlcl9kcmF3IHl4dmlld19wY3NwaWtlX2RyYXcgeXh2aWV3X3JhcmVhX2RyYXcgeXh2aWV3X3JiYXJfZHJhdyB5eHZpZXdfcmJhcm1fZHJhdyB5eHZpZXdfcmNhcF9kcmF3IHl4dmlld19yY2Fwc3ltX2RyYXcgeXh2aWV3X3Jjb25uZWN0ZWRfZHJhdyB5eHZpZXdfcmxpbmVfZHJhdyB5eHZpZXdfcnNjYXR0ZXJfZHJhdyB5eHZpZXdfcnNwaWtlX2RyYXcgeXh2aWV3X3NwaWtlX2RyYXcgeXh2aWV3X3N1bmZsb3dlcl9kcmF3IHphcF9zIHppbmIgemluYl9sbGYgemluYl9wbGYgemlwIHppcF9sbGYgemlwX3AgemlwX3BsZiB6dF9jdF81IHp0X2hjXzUgenRfaGNkXzUgenRfaXNfNSB6dF9pc3NfNSB6dF9zaG9fNSB6dF9zbXBfNSB6dGJhc2VfNSB6dGNveF81IHp0ZGVzXzUgenRlcmVnXzUgenRmaWxsXzUgenRnZW5fNSB6dGlyXzUgenRqb2luXzUgenRuYiB6dG5iX3AgenRwIHp0cF9wIHp0c181IHp0c2V0XzUgenRzcGxpXzUgenRzdW1fNSB6dHRvY3RfNSB6dHZhcnlfNSB6dHdlaWJfNSIsY29udGFpbnM6W3tjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46L2BbYS16QS1aMC05X10rJy99LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCRcez9bYS16QS1aMC05X10rXH0/L30se2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOidgIlteXHJcbl0qPyJcJyd9LHtiZWdpbjonIlteXHJcbiJdKiInfV19LHtjbGFzc05hbWU6ImJ1aWx0X2luIix2YXJpYW50czpbe2JlZ2luOiJcXGIoYWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGF0YW5ofGNlaWx8Y2xvZ2xvZ3xjb21ifGNvc3xkaWdhbW1hfGV4cHxmbG9vcnxpbnZjbG9nbG9nfGludmxvZ2l0fGxufGxuZmFjdHxsbmZhY3RvcmlhbHxsbmdhbW1hfGxvZ3xsb2cxMHxtYXh8bWlufG1vZHxyZWxkaWZ8cm91bmR8c2lnbnxzaW58c3FydHxzdW18dGFufHRhbmh8dHJpZ2FtbWF8dHJ1bmN8YmV0YWRlbnxCaW5vbWlhbHxiaW5vcm18Ymlub3JtYWx8Y2hpMnxjaGkydGFpbHxkZ2FtbWFwZGF8ZGdhbW1hcGRhZGF8ZGdhbW1hcGRhZHh8ZGdhbW1hcGR4fGRnYW1tYXBkeGR4fEZ8RmRlbnxGdGFpbHxnYW1tYWRlbnxnYW1tYXB8aWJldGF8aW52Ymlub21pYWx8aW52Y2hpMnxpbnZjaGkydGFpbHxpbnZGfGludkZ0YWlsfGludmdhbW1hcHxpbnZpYmV0YXxpbnZuY2hpMnxpbnZuRnRhaWx8aW52bmliZXRhfGludm5vcm18aW52bm9ybWFsfGludnR0YWlsfG5iZXRhZGVufG5jaGkyfG5GZGVufG5GdGFpbHxuaWJldGF8bm9ybXxub3JtYWx8bm9ybWFsZGVufG5vcm1kfG5wbmNoaTJ8dGRlbnx0dGFpbHx1bmlmb3JtfGFiYnJldnxjaGFyfGluZGV4fGluZGV4bm90fGxlbmd0aHxsb3dlcnxsdHJpbXxtYXRjaHxwbHVyYWx8cHJvcGVyfHJlYWx8cmVnZXhtfHJlZ2V4cnxyZWdleHN8cmV2ZXJzZXxydHJpbXxzdHJpbmd8c3RybGVufHN0cmxvd2VyfHN0cmx0cmltfHN0cm1hdGNofHN0cm9mcmVhbHxzdHJwb3N8c3RycHJvcGVyfHN0cnJldmVyc2V8c3RycnRyaW18c3RydHJpbXxzdHJ1cHBlcnxzdWJpbnN0cnxzdWJpbndvcmR8c3Vic3RyfHRyaW18dXBwZXJ8d29yZHx3b3JkY291bnR8X2NhbGxlcnxhdXRvY29kZXxieXRlb3JkZXJ8Y2hvcHxjbGlwfGNvbmR8ZXxlcHNkb3VibGV8ZXBzZmxvYXR8Z3JvdXB8aW5saXN0fGlucmFuZ2V8aXJlY29kZXxtYXRyaXh8bWF4Ynl0ZXxtYXhkb3VibGV8bWF4ZmxvYXR8bWF4aW50fG1heGxvbmd8bWl8bWluYnl0ZXxtaW5kb3VibGV8bWluZmxvYXR8bWluaW50fG1pbmxvbmd8bWlzc2luZ3xyfHJlY29kZXxyZXBsYXl8cmV0dXJufHN8c2NhbGFyfGR8ZGF0ZXxkYXl8ZG93fGRveXxoYWxmeWVhcnxtZHl8bW9udGh8cXVhcnRlcnx3ZWVrfHllYXJ8ZHxkYWlseXxkb2ZkfGRvZmh8ZG9mbXxkb2ZxfGRvZnd8ZG9meXxofGhhbGZ5ZWFybHl8aG9mZHxtfG1vZmR8bW9udGhseXxxfHFvZmR8cXVhcnRlcmx5fHRpbnx0d2l0aGlufHd8d2Vla2x5fHdvZmR8eXx5ZWFybHl8eWh8eW18eW9mZHx5cXx5d3xjaG9sZXNreXxjb2xudW1ifGNvbHNvZnxjb3JyfGRldHxkaWFnfGRpYWcwY250fGVsfGdldHxoYWRhbWFyZHxJfGludnxpbnZzeW18aXNzeW18aXNzeW1tZXRyaWN8SnxtYXRtaXNzaW5nfG1hdHVuaWZvcm18bXJlbGRpZnxudWxsbWF0fHJvd251bWJ8cm93c29mfHN3ZWVwfHN5bWludnx0cmFjZXx2ZWN8dmVjZGlhZykoPz1cXCh8JCkifV19LGUuQ09NTUVOVCgiXlsgXHRdKlxcKi4qJCIsITEpLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3RlcDIxLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInAyMSIsInN0ZXAiLCJzdHAiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGxleGVtZXM6IltBLVpfXVtBLVowLTlfLl0qIixrZXl3b3Jkczp7a2V5d29yZDoiSEVBREVSIEVORFNFQyBEQVRBIn0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJJU08tMTAzMDMtMjE7IixyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJFTkQtSVNPLTEwMzAzLTIxOyIscmVsZXZhbmNlOjEwfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoIi9cXCpcXCohIiwiXFwqLyIpLGUuQ19OVU1CRVJfTU9ERSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSkse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIn0se2NsYXNzTmFtZToic3ltYm9sIix2YXJpYW50czpbe2JlZ2luOiIjIixlbmQ6IlxcZCsiLGlsbGVnYWw6IlxcVyJ9XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdHlsdXMuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiXFwkIitlLklERU5UX1JFfSxuPXtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IiMoW2EtZkEtRjAtOV17Nn18W2EtZkEtRjAtOV17M30pIn0scj1bImNoYXJzZXQiLCJjc3MiLCJkZWJ1ZyIsImV4dGVuZCIsImZvbnQtZmFjZSIsImZvciIsImltcG9ydCIsImluY2x1ZGUiLCJtZWRpYSIsIm1peGluIiwicGFnZSIsIndhcm4iLCJ3aGlsZSJdLG89WyJhZnRlciIsImJlZm9yZSIsImZpcnN0LWxldHRlciIsImZpcnN0LWxpbmUiLCJhY3RpdmUiLCJmaXJzdC1jaGlsZCIsImZvY3VzIiwiaG92ZXIiLCJsYW5nIiwibGluayIsInZpc2l0ZWQiXSxzPVsiYSIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmxvY2txdW90ZSIsImJvZHkiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2l0ZSIsImNvZGUiLCJkZCIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaXYiLCJkbCIsImR0IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZGVyIiwiaGdyb3VwIiwiaHRtbCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYXJrIiwibWVudSIsIm5hdiIsIm9iamVjdCIsIm9sIiwicCIsInEiLCJxdW90ZSIsInNhbXAiLCJzZWN0aW9uIiwic3BhbiIsInN0cm9uZyIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInVsIiwidmFyIiwidmlkZW8iXSxpPSJbXFwuXFxzXFxuXFxbXFw6LF0iLGE9WyJhbGlnbi1jb250ZW50IiwiYWxpZ24taXRlbXMiLCJhbGlnbi1zZWxmIiwiYW5pbWF0aW9uIiwiYW5pbWF0aW9uLWRlbGF5IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiIsImFuaW1hdGlvbi1kdXJhdGlvbiIsImFuaW1hdGlvbi1maWxsLW1vZGUiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiwiYW5pbWF0aW9uLW5hbWUiLCJhbmltYXRpb24tcGxheS1zdGF0ZSIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJhdXRvIiwiYmFja2ZhY2UtdmlzaWJpbGl0eSIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kLWNsaXAiLCJiYWNrZ3JvdW5kLWNvbG9yIiwiYmFja2dyb3VuZC1pbWFnZSIsImJhY2tncm91bmQtb3JpZ2luIiwiYmFja2dyb3VuZC1wb3NpdGlvbiIsImJhY2tncm91bmQtcmVwZWF0IiwiYmFja2dyb3VuZC1zaXplIiwiYm9yZGVyIiwiYm9yZGVyLWJvdHRvbSIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCJib3JkZXItYm90dG9tLXN0eWxlIiwiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1jb2xsYXBzZSIsImJvcmRlci1jb2xvciIsImJvcmRlci1pbWFnZSIsImJvcmRlci1pbWFnZS1vdXRzZXQiLCJib3JkZXItaW1hZ2UtcmVwZWF0IiwiYm9yZGVyLWltYWdlLXNsaWNlIiwiYm9yZGVyLWltYWdlLXNvdXJjZSIsImJvcmRlci1pbWFnZS13aWR0aCIsImJvcmRlci1sZWZ0IiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItbGVmdC1zdHlsZSIsImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLXJhZGl1cyIsImJvcmRlci1yaWdodCIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci1yaWdodC1zdHlsZSIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci1zcGFjaW5nIiwiYm9yZGVyLXN0eWxlIiwiYm9yZGVyLXRvcCIsImJvcmRlci10b3AtY29sb3IiLCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCJib3JkZXItdG9wLXN0eWxlIiwiYm9yZGVyLXRvcC13aWR0aCIsImJvcmRlci13aWR0aCIsImJvdHRvbSIsImJveC1kZWNvcmF0aW9uLWJyZWFrIiwiYm94LXNoYWRvdyIsImJveC1zaXppbmciLCJicmVhay1hZnRlciIsImJyZWFrLWJlZm9yZSIsImJyZWFrLWluc2lkZSIsImNhcHRpb24tc2lkZSIsImNsZWFyIiwiY2xpcCIsImNsaXAtcGF0aCIsImNvbG9yIiwiY29sdW1uLWNvdW50IiwiY29sdW1uLWZpbGwiLCJjb2x1bW4tZ2FwIiwiY29sdW1uLXJ1bGUiLCJjb2x1bW4tcnVsZS1jb2xvciIsImNvbHVtbi1ydWxlLXN0eWxlIiwiY29sdW1uLXJ1bGUtd2lkdGgiLCJjb2x1bW4tc3BhbiIsImNvbHVtbi13aWR0aCIsImNvbHVtbnMiLCJjb250ZW50IiwiY291bnRlci1pbmNyZW1lbnQiLCJjb3VudGVyLXJlc2V0IiwiY3Vyc29yIiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImVtcHR5LWNlbGxzIiwiZmlsdGVyIiwiZmxleCIsImZsZXgtYmFzaXMiLCJmbGV4LWRpcmVjdGlvbiIsImZsZXgtZmxvdyIsImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIiwiZmxleC13cmFwIiwiZmxvYXQiLCJmb250IiwiZm9udC1mYW1pbHkiLCJmb250LWZlYXR1cmUtc2V0dGluZ3MiLCJmb250LWtlcm5pbmciLCJmb250LWxhbmd1YWdlLW92ZXJyaWRlIiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXZhcmlhbnQtbGlnYXR1cmVzIiwiZm9udC13ZWlnaHQiLCJoZWlnaHQiLCJoeXBoZW5zIiwiaWNvbiIsImltYWdlLW9yaWVudGF0aW9uIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW1hZ2UtcmVzb2x1dGlvbiIsImltZS1tb2RlIiwiaW5oZXJpdCIsImluaXRpYWwiLCJqdXN0aWZ5LWNvbnRlbnQiLCJsZWZ0IiwibGV0dGVyLXNwYWNpbmciLCJsaW5lLWhlaWdodCIsImxpc3Qtc3R5bGUiLCJsaXN0LXN0eWxlLWltYWdlIiwibGlzdC1zdHlsZS1wb3NpdGlvbiIsImxpc3Qtc3R5bGUtdHlwZSIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJtYXJrcyIsIm1hc2siLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwibWluLWhlaWdodCIsIm1pbi13aWR0aCIsIm5hdi1kb3duIiwibmF2LWluZGV4IiwibmF2LWxlZnQiLCJuYXYtcmlnaHQiLCJuYXYtdXAiLCJub25lIiwibm9ybWFsIiwib2JqZWN0LWZpdCIsIm9iamVjdC1wb3NpdGlvbiIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJvdXRsaW5lIiwib3V0bGluZS1jb2xvciIsIm91dGxpbmUtb2Zmc2V0Iiwib3V0bGluZS1zdHlsZSIsIm91dGxpbmUtd2lkdGgiLCJvdmVyZmxvdyIsIm92ZXJmbG93LXdyYXAiLCJvdmVyZmxvdy14Iiwib3ZlcmZsb3cteSIsInBhZGRpbmciLCJwYWRkaW5nLWJvdHRvbSIsInBhZGRpbmctbGVmdCIsInBhZGRpbmctcmlnaHQiLCJwYWRkaW5nLXRvcCIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwicGVyc3BlY3RpdmUiLCJwZXJzcGVjdGl2ZS1vcmlnaW4iLCJwb2ludGVyLWV2ZW50cyIsInBvc2l0aW9uIiwicXVvdGVzIiwicmVzaXplIiwicmlnaHQiLCJ0YWItc2l6ZSIsInRhYmxlLWxheW91dCIsInRleHQtYWxpZ24iLCJ0ZXh0LWFsaWduLWxhc3QiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiLCJ0ZXh0LWRlY29yYXRpb24tbGluZSIsInRleHQtZGVjb3JhdGlvbi1zdHlsZSIsInRleHQtaW5kZW50IiwidGV4dC1vdmVyZmxvdyIsInRleHQtcmVuZGVyaW5nIiwidGV4dC1zaGFkb3ciLCJ0ZXh0LXRyYW5zZm9ybSIsInRleHQtdW5kZXJsaW5lLXBvc2l0aW9uIiwidG9wIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRyYW5zZm9ybS1zdHlsZSIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uLWRlbGF5IiwidHJhbnNpdGlvbi1kdXJhdGlvbiIsInRyYW5zaXRpb24tcHJvcGVydHkiLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsInVuaWNvZGUtYmlkaSIsInZlcnRpY2FsLWFsaWduIiwidmlzaWJpbGl0eSIsIndoaXRlLXNwYWNlIiwid2lkb3dzIiwid2lkdGgiLCJ3b3JkLWJyZWFrIiwid29yZC1zcGFjaW5nIiwid29yZC13cmFwIiwiei1pbmRleCJdO3JldHVybnthbGlhc2VzOlsic3R5bCJdLGNhc2VfaW5zZW5zaXRpdmU6ITEsa2V5d29yZHM6ImlmIGVsc2UgZm9yIGluIixpbGxlZ2FsOiIoIitbIlxcPyIsIihcXGJSZXR1cm5cXGIpIiwiKFxcYkVuZFxcYikiLCIoXFxiZW5kXFxiKSIsIihcXGJkZWZcXGIpIiwiOyIsIiNcXHMiLCJcXCpcXHMiLCI9PT1cXHMiLCJcXHwiLCIlIl0uam9pbigifCIpKyIpIixjb250YWluczpbZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbix7YmVnaW46IlxcLlthLXpBLVpdW2EtekEtWjAtOV8tXSoiK2kscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6InNlbGVjdG9yLWNsYXNzIixiZWdpbjoiXFwuW2EtekEtWl1bYS16QS1aMC05Xy1dKiJ9XX0se2JlZ2luOiJcXCNbYS16QS1aXVthLXpBLVowLTlfLV0qIitpLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzZWxlY3Rvci1pZCIsYmVnaW46IlxcI1thLXpBLVpdW2EtekEtWjAtOV8tXSoifV19LHtiZWdpbjoiXFxiKCIrcy5qb2luKCJ8IikrIikiK2kscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6InNlbGVjdG9yLXRhZyIsYmVnaW46IlxcYlthLXpBLVpdW2EtekEtWjAtOV8tXSoifV19LHtiZWdpbjoiJj86PzpcXGIoIitvLmpvaW4oInwiKSsiKSIraX0se2JlZ2luOiJAKCIrci5qb2luKCJ8IikrIilcXGIifSx0LGUuQ1NTX05VTUJFUl9NT0RFLGUuTlVNQkVSX01PREUse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiJeW2EtekEtWl1bYS16QS1aMC05Xy1dKlxcKC4qXFwpIixpbGxlZ2FsOiJbXFxuXSIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6InRpdGxlIixiZWdpbjoiXFxiW2EtekEtWl1bYS16QS1aMC05Xy1dKiJ9LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxjb250YWluczpbbix0LGUuQVBPU19TVFJJTkdfTU9ERSxlLkNTU19OVU1CRVJfTU9ERSxlLk5VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfV19LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46IlxcYigiK2EucmV2ZXJzZSgpLmpvaW4oInwiKSsiKVxcYiIsc3RhcnRzOntlbmQ6Lzt8JC8sY29udGFpbnM6W24sdCxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNTU19OVU1CRVJfTU9ERSxlLk5VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdLGlsbGVnYWw6L1wuLyxyZWxldmFuY2U6MH19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3VidW5pdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsY29udGFpbnM6W3tjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IlxcW1xuKG11bHRpcGFydCk/IixlbmQ6IlxcXVxuIn0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiXFxkezR9LVxcZHsyfS1cXGR7Mn0oXFxzKylcXGR7Mn06XFxkezJ9OlxcZHsyfS5cXGQrWiJ9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IihcXCt8LSlcXGQrIn0se2NsYXNzTmFtZToia2V5d29yZCIscmVsZXZhbmNlOjEwLHZhcmlhbnRzOlt7YmVnaW46Il4odGVzdHx0ZXN0aW5nfHN1Y2Nlc3N8c3VjY2Vzc2Z1bHxmYWlsdXJlfGVycm9yfHNraXB8eGZhaWx8dXhzdWNjZXNzKSg6PylcXHMrKHRlc3QpPyJ9LHtiZWdpbjoiXnByb2dyZXNzKDo/KShcXHMrKT8ocG9wfHB1c2gpPyJ9LHtiZWdpbjoiXnRhZ3M6In0se2JlZ2luOiJedGltZToifV19XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3dpZnQuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiIjYXZhaWxhYmxlICNjb2xvckxpdGVyYWwgI2NvbHVtbiAjZWxzZSAjZWxzZWlmICNlbmRpZiAjZmlsZSAjZmlsZUxpdGVyYWwgI2Z1bmN0aW9uICNpZiAjaW1hZ2VMaXRlcmFsICNsaW5lICNzZWxlY3RvciAjc291cmNlTG9jYXRpb24gXyBfX0NPTFVNTl9fIF9fRklMRV9fIF9fRlVOQ1RJT05fXyBfX0xJTkVfXyBBbnkgYXMgYXMhIGFzPyBhc3NvY2lhdGVkdHlwZSBhc3NvY2lhdGl2aXR5IGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29udGludWUgY29udmVuaWVuY2UgZGVmYXVsdCBkZWZlciBkZWluaXQgZGlkU2V0IGRvIGR5bmFtaWMgZHluYW1pY1R5cGUgZWxzZSBlbnVtIGV4dGVuc2lvbiBmYWxsdGhyb3VnaCBmYWxzZSBmaWxlcHJpdmF0ZSBmaW5hbCBmb3IgZnVuYyBnZXQgZ3VhcmQgaWYgaW1wb3J0IGluIGluZGlyZWN0IGluZml4IGluaXQgaW5vdXQgaW50ZXJuYWwgaXMgbGF6eSBsZWZ0IGxldCBtdXRhdGluZyBuaWwgbm9uZSBub25tdXRhdGluZyBvcGVuIG9wZXJhdG9yIG9wdGlvbmFsIG92ZXJyaWRlIHBvc3RmaXggcHJlY2VkZW5jZSBwcmVmaXggcHJpdmF0ZSBwcm90b2NvbCBQcm90b2NvbCBwdWJsaWMgcmVwZWF0IHJlcXVpcmVkIHJldGhyb3dzIHJldHVybiByaWdodCBzZWxmIFNlbGYgc2V0IHN0YXRpYyBzdHJ1Y3Qgc3Vic2NyaXB0IHN1cGVyIHN3aXRjaCB0aHJvdyB0aHJvd3MgdHJ1ZSB0cnkgdHJ5ISB0cnk/IFR5cGUgdHlwZWFsaWFzIHVub3duZWQgdmFyIHdlYWsgd2hlcmUgd2hpbGUgd2lsbFNldCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBuaWwiLGJ1aWx0X2luOiJhYnMgYWR2YW5jZSBhbGlnbm9mIGFsaWdub2ZWYWx1ZSBhbnlHZW5lcmF0b3IgYXNzZXJ0IGFzc2VydGlvbkZhaWx1cmUgYnJpZGdlRnJvbU9iamVjdGl2ZUMgYnJpZGdlRnJvbU9iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGJyaWRnZVRvT2JqZWN0aXZlQyBicmlkZ2VUb09iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGMgY29udGFpbnMgY291bnQgY291bnRFbGVtZW50cyBjb3VudExlYWRpbmdaZXJvcyBkZWJ1Z1ByaW50IGRlYnVnUHJpbnRsbiBkaXN0YW5jZSBkcm9wRmlyc3QgZHJvcExhc3QgZHVtcCBlbmNvZGVCaXRzQXNXb3JkcyBlbnVtZXJhdGUgZXF1YWwgZmF0YWxFcnJvciBmaWx0ZXIgZmluZCBnZXRCcmlkZ2VkT2JqZWN0aXZlQ1R5cGUgZ2V0VmFMaXN0IGluZGljZXMgaW5zZXJ0aW9uU29ydCBpc0JyaWRnZWRUb09iamVjdGl2ZUMgaXNCcmlkZ2VkVmVyYmF0aW1Ub09iamVjdGl2ZUMgaXNVbmlxdWVseVJlZmVyZW5jZWQgaXNVbmlxdWVseVJlZmVyZW5jZWROb25PYmpDIGpvaW4gbGF6eSBsZXhpY29ncmFwaGljYWxDb21wYXJlIG1hcCBtYXggbWF4RWxlbWVudCBtaW4gbWluRWxlbWVudCBudW1lcmljQ2FzdCBvdmVybGFwcyBwYXJ0aXRpb24gcG9zaXggcHJlY29uZGl0aW9uIHByZWNvbmRpdGlvbkZhaWx1cmUgcHJpbnQgcHJpbnRsbiBxdWlja1NvcnQgcmVhZExpbmUgcmVkdWNlIHJlZmxlY3QgcmVpbnRlcnByZXRDYXN0IHJldmVyc2Ugcm91bmRVcFRvQWxpZ25tZW50IHNpemVvZiBzaXplb2ZWYWx1ZSBzb3J0IHNwbGl0IHN0YXJ0c1dpdGggc3RyaWRlIHN0cmlkZW9mIHN0cmlkZW9mVmFsdWUgc3dhcCB0b1N0cmluZyB0cmFuc2NvZGUgdW5kZXJlc3RpbWF0ZUNvdW50IHVuc2FmZUFkZHJlc3NPZiB1bnNhZmVCaXRDYXN0IHVuc2FmZURvd25jYXN0IHVuc2FmZVVud3JhcCB1bnNhZmVSZWZsZWN0IHdpdGhFeHRlbmRlZExpZmV0aW1lIHdpdGhPYmplY3RBdFBsdXNaZXJvIHdpdGhVbnNhZmVQb2ludGVyIHdpdGhVbnNhZmVQb2ludGVyVG9PYmplY3Qgd2l0aFVuc2FmZU11dGFibGVQb2ludGVyIHdpdGhVbnNhZmVNdXRhYmxlUG9pbnRlcnMgd2l0aFVuc2FmZVBvaW50ZXIgd2l0aFVuc2FmZVBvaW50ZXJzIHdpdGhWYUxpc3QgemlwIn0sbj17Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3w4AtyrgnXSoiLHJlbGV2YW5jZTowfSxyPXtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJcXGJbQS1aXVtcXHfDgC3KuCddKlshP10ifSxvPWUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbInNlbGYiXX0pLHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cXFwoLyxlbmQ6IlxcKSIsa2V5d29yZHM6dCxjb250YWluczpbXX0saT17Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsc10sdmFyaWFudHM6W3tiZWdpbjovIiIiLyxlbmQ6LyIiIi99LHtiZWdpbjovIi8sZW5kOi8iL31dfSxhPXtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcYihbXFxkX10rKFxcLltcXGRlRV9dKyk/fDB4W2EtZkEtRjAtOV9dKyhcXC5bYS1mQS1GMC05cF9dKyk/fDBiWzAxX10rfDBvWzAtN19dKylcXGIiLHJlbGV2YW5jZTowfTtyZXR1cm4gcy5jb250YWlucz1bYV0se2tleXdvcmRzOnQsY29udGFpbnM6W2ksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLG8scixuLGEse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmMiLGVuZDoieyIsZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSx7YmVnaW46LzwvLGVuZDovPi99LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxlbmRzUGFyZW50OiEwLGtleXdvcmRzOnQsY29udGFpbnM6WyJzZWxmIixhLGksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7YmVnaW46IjoifV0saWxsZWdhbDovWyInXS99XSxpbGxlZ2FsOi9cW3wlL30se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6InN0cnVjdCBwcm90b2NvbCBjbGFzcyBleHRlbnNpb24gZW51bSIsa2V5d29yZHM6dCxlbmQ6IlxceyIsZXhjbHVkZUVuZDohMCxjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46L1tBLVphLXokX11bXHUwMEMwLVx1MDJCODAtOUEtWmEteiRfXSovfSldfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiKEBkaXNjYXJkYWJsZVJlc3VsdHxAd2Fybl91bnVzZWRfcmVzdWx0fEBleHBvcnRlZHxAbGF6eXxAbm9lc2NhcGV8QE5TQ29weWluZ3xATlNNYW5hZ2VkfEBvYmpjfEBvYmpjTWVtYmVyc3xAY29udmVudGlvbnxAcmVxdWlyZWR8QG5vcmV0dXJufEBJQkFjdGlvbnxASUJEZXNpZ25hYmxlfEBJQkluc3BlY3RhYmxlfEBJQk91dGxldHxAaW5maXh8QHByZWZpeHxAcG9zdGZpeHxAYXV0b2Nsb3N1cmV8QHRlc3RhYmxlfEBhdmFpbGFibGV8QG5vbm9iamN8QE5TQXBwbGljYXRpb25NYWlufEBVSUFwcGxpY2F0aW9uTWFpbikifSx7YmVnaW5LZXl3b3JkczoiaW1wb3J0IixlbmQ6LyQvLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsb119XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGFnZ2Vyc2NyaXB0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGFpbnM6W3tjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOi9cJG5vb3BcKC8sZW5kOi9cKS8sY29udGFpbnM6W3tiZWdpbjovXCgvLGVuZDovXCkvLGNvbnRhaW5zOlsic2VsZiIse2JlZ2luOi9cXC4vfV19XSxyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9cJCg/IW5vb3ApW2EtekEtWl1bX2EtekEtWjAtOV0qLyxlbmQ6L1woLyxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46LyVbX2EtekEtWjAtOTpdKi8sZW5kOiIlIn0se2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjovXFwuL31dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90YXAuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLHZhcmlhbnRzOlt7YmVnaW46Il5UQVAgdmVyc2lvbiAoXFxkKykkIn0se2JlZ2luOiJeMVxcLlxcLihcXGQrKSQifV19LHtiZWdpbjoiKHMrKT8tLS0kIixlbmQ6IlxcLlxcLlxcLiQiLHN1Ykxhbmd1YWdlOiJ5YW1sIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiIChcXGQrKSAifSx7Y2xhc3NOYW1lOiJzeW1ib2wiLHZhcmlhbnRzOlt7YmVnaW46Il5vayJ9LHtiZWdpbjoiXm5vdCBvayJ9XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90Y2wuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsidGsiXSxrZXl3b3JkczoiYWZ0ZXIgYXBwZW5kIGFwcGx5IGFycmF5IGF1dG9fZXhlY29rIGF1dG9faW1wb3J0IGF1dG9fbG9hZCBhdXRvX21raW5kZXggYXV0b19ta2luZGV4X29sZCBhdXRvX3F1YWxpZnkgYXV0b19yZXNldCBiZ2Vycm9yIGJpbmFyeSBicmVhayBjYXRjaCBjZCBjaGFuIGNsb2NrIGNsb3NlIGNvbmNhdCBjb250aW51ZSBkZGUgZGljdCBlbmNvZGluZyBlb2YgZXJyb3IgZXZhbCBleGVjIGV4aXQgZXhwciBmYmxvY2tlZCBmY29uZmlndXJlIGZjb3B5IGZpbGUgZmlsZWV2ZW50IGZpbGVuYW1lIGZsdXNoIGZvciBmb3JlYWNoIGZvcm1hdCBnZXRzIGdsb2IgZ2xvYmFsIGhpc3RvcnkgaHR0cCBpZiBpbmNyIGluZm8gaW50ZXJwIGpvaW4gbGFwcGVuZHwxMCBsYXNzaWdufDEwIGxpbmRleHwxMCBsaW5zZXJ0fDEwIGxpc3QgbGxlbmd0aHwxMCBsb2FkIGxyYW5nZXwxMCBscmVwZWF0fDEwIGxyZXBsYWNlfDEwIGxyZXZlcnNlfDEwIGxzZWFyY2h8MTAgbHNldHwxMCBsc29ydHwxMCBtYXRoZnVuYyBtYXRob3AgbWVtb3J5IG1zZ2NhdCBuYW1lc3BhY2Ugb3BlbiBwYWNrYWdlIHBhcnJheSBwaWQgcGtnOjpjcmVhdGUgcGtnX21rSW5kZXggcGxhdGZvcm0gcGxhdGZvcm06OnNoZWxsIHByb2MgcHV0cyBwd2QgcmVhZCByZWZjaGFuIHJlZ2V4cCByZWdpc3RyeSByZWdzdWJ8MTAgcmVuYW1lIHJldHVybiBzYWZlIHNjYW4gc2VlayBzZXQgc29ja2V0IHNvdXJjZSBzcGxpdCBzdHJpbmcgc3Vic3Qgc3dpdGNoIHRjbF9lbmRPZldvcmQgdGNsX2ZpbmRMaWJyYXJ5IHRjbF9zdGFydE9mTmV4dFdvcmQgdGNsX3N0YXJ0T2ZQcmV2aW91c1dvcmQgdGNsX3dvcmRCcmVha0FmdGVyIHRjbF93b3JkQnJlYWtCZWZvcmUgdGNsdGVzdCB0Y2x2YXJzIHRlbGwgdGltZSB0bSB0cmFjZSB1bmtub3duIHVubG9hZCB1bnNldCB1cGRhdGUgdXBsZXZlbCB1cHZhciB2YXJpYWJsZSB2d2FpdCB3aGlsZSIsY29udGFpbnM6W2UuQ09NTUVOVCgiO1sgXFx0XSojIiwiJCIpLGUuQ09NTUVOVCgiXlsgXFx0XSojIiwiJCIpLHtiZWdpbktleXdvcmRzOiJwcm9jIixlbmQ6IltcXHtdIixleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46IlsgXFx0XFxuXFxyXSsoOjopP1thLXpBLVpfXSgoOjopP1thLXpBLVowLTlfXSkqIixlbmQ6IlsgXFx0XFxuXFxyXSIsZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMH1dfSx7ZXhjbHVkZUVuZDohMCx2YXJpYW50czpbe2JlZ2luOiJcXCQoXFx7KT8oOjopP1thLXpBLVpfXSgoOjopP1thLXpBLVowLTlfXSkqXFwoKFthLXpBLVowLTlfXSkqXFwpIixlbmQ6IlteYS16QS1aMC05X1xcfVxcJF0ifSx7YmVnaW46IlxcJChcXHspPyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSoiLGVuZDoiKFxcKSk/W15hLXpBLVowLTlfXFx9XFwkXSJ9XX0se2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pXX0se2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbZS5CSU5BUllfTlVNQkVSX01PREUsZS5DX05VTUJFUl9NT0RFXX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90ZXguanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InRhZyIsYmVnaW46L1xcLyxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToibmFtZSIsdmFyaWFudHM6W3tiZWdpbjovW2EtekEtWlx1MDQzMC1cdTA0NGZcdTA0MTAtXHUwNDJmXStbKl0/L30se2JlZ2luOi9bXmEtekEtWlx1MDQzMC1cdTA0NGZcdTA0MTAtXHUwNDJmMC05XS99XSxzdGFydHM6e2VuZHNXaXRoUGFyZW50OiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46L1xbLyxlbmQ6L1xdL30se2JlZ2luOi9cey8sZW5kOi9cfS99XX0se2JlZ2luOi9ccyo9XHMqLyxlbmRzV2l0aFBhcmVudDohMCxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjovLT9cZCpcLj9cZCsocHR8cGN8bW18Y218aW58ZGR8Y2N8ZXh8ZW0pPy99XX1dfX1dfTtyZXR1cm57Y29udGFpbnM6W3Qse2NsYXNzTmFtZToiZm9ybXVsYSIsY29udGFpbnM6W3RdLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7YmVnaW46L1wkXCQvLGVuZDovXCRcJC99LHtiZWdpbjovXCQvLGVuZDovXCQvfV19LGUuQ09NTUVOVCgiJSIsIiQiLHtyZWxldmFuY2U6MH0pXX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGhyaWZ0LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6Im5hbWVzcGFjZSBjb25zdCB0eXBlZGVmIHN0cnVjdCBlbnVtIHNlcnZpY2UgZXhjZXB0aW9uIHZvaWQgb25ld2F5IHNldCBsaXN0IG1hcCByZXF1aXJlZCBvcHRpb25hbCIsYnVpbHRfaW46ImJvb2wgYnl0ZSBpMTYgaTMyIGk2NCBkb3VibGUgc3RyaW5nIGJpbmFyeSIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSJ9LGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFLGUuTlVNQkVSX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6InN0cnVjdCBlbnVtIHNlcnZpY2UgZXhjZXB0aW9uIixlbmQ6L1x7LyxpbGxlZ2FsOi9cbi8sY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse3N0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMH19KV19LHtiZWdpbjoiXFxiKHNldHxsaXN0fG1hcClcXHMqPCIsZW5kOiI+IixrZXl3b3JkczoiYm9vbCBieXRlIGkxNiBpMzIgaTY0IGRvdWJsZSBzdHJpbmcgYmluYXJ5Iixjb250YWluczpbInNlbGYiXX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90cC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiWzEtOV1bMC05XSoiLHJlbGV2YW5jZTowfSxuPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IjpbXlxcXV0rIn07cmV0dXJue2tleXdvcmRzOntrZXl3b3JkOiJBQk9SVCBBQ0MgQURKVVNUIEFORCBBUF9MRCBCUkVBSyBDQUxMIENOVCBDT0wgQ09ORElUSU9OIENPTkZJRyBEQSBEQiBESVYgREVURUNUIEVMU0UgRU5EIEVOREZPUiBFUlJfTlVNIEVSUk9SX1BST0cgRklORSBGT1IgR1AgR1VBUkQgSU5DIElGIEpNUCBMSU5FQVJfTUFYX1NQRUVEIExPQ0sgTU9EIE1PTklUT1IgT0ZGU0VUIE9mZnNldCBPUiBPVkVSUklERSBQQVVTRSBQUkVHIFBUSCBSVF9MRCBSVU4gU0VMRUNUIFNLSVAgU2tpcCBUQSBUQiBUTyBUT09MX09GRlNFVCBUb29sX09mZnNldCBVRiBVVCBVRlJBTUVfTlVNIFVUT09MX05VTSBVTkxPQ0sgV0FJVCBYIFkgWiBXIFAgUiBTVFJMRU4gU1VCU1RSIEZJTkRTVFIgVk9GRlNFVCBQUk9HIEFUVFIgTU4gUE9TIixsaXRlcmFsOiJPTiBPRkYgbWF4X3NwZWVkIExQT1MgSlBPUyBFTkFCTEUgRElTQUJMRSBTVEFSVCBTVE9QIFJFU0VUIn0sY29udGFpbnM6W3tjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjoiKEFSfFB8UEFZTE9BRHxQUnxSfFNSfFJTUnxMQkx8VlJ8VUFMTXxNRVNTQUdFfFVUT09MfFVGUkFNRXxUSU1FUnxUSU1FUl9PVkVSRkxPV3xKT0lOVF9NQVhfU1BFRUR8UkVTVU1FX1BST0d8RElBR19SRUMpXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6WyJzZWxmIix0LG5dfSx7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46IihBSXxBT3xESXxET3xGfFJJfFJPfFVJfFVPfEdJfEdPfFNJfFNPKVxcWyIsZW5kOiJcXF0iLGNvbnRhaW5zOlsic2VsZiIsdCxlLlFVT1RFX1NUUklOR19NT0RFLG5dfSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiLyhQUk9HfEFUVFJ8TU58UE9TfEVORClcXGIifSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiKENBTEx8UlVOfFBPSU5UX0xPR0lDfExCTClcXGIifSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiXFxiKEFDQ3xDTlR8U2tpcHxPZmZzZXR8UFNQRHxSVF9MRHxBUF9MRHxUb29sX09mZnNldCkifSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGQrKHNlY3xtc2VjfG1tL3NlY3xjbS9taW58aW5jaC9taW58ZGVnL3NlY3xtbXxpbnxjbSk/XFxiIixyZWxldmFuY2U6MH0sZS5DT01NRU5UKCIvLyIsIls7JF0iKSxlLkNPTU1FTlQoIiEiLCJbOyRdIiksZS5DT01NRU5UKCItLWVnOiIsIiQiKSxlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyJ9LGUuQ19OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46IlxcJFtBLVphLXowLTlfXSsifV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R3aWcuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkifSxuPSJhdHRyaWJ1dGUgYmxvY2sgY29uc3RhbnQgY3ljbGUgZGF0ZSBkdW1wIGluY2x1ZGUgbWF4IG1pbiBwYXJlbnQgcmFuZG9tIHJhbmdlIHNvdXJjZSB0ZW1wbGF0ZV9mcm9tX3N0cmluZyIscj17YmVnaW5LZXl3b3JkczpuLGtleXdvcmRzOntuYW1lOm59LHJlbGV2YW5jZTowLGNvbnRhaW5zOlt0XX0sbz17YmVnaW46L1x8W0EtWmEtel9dKzo/LyxrZXl3b3JkczoiYWJzIGJhdGNoIGNhcGl0YWxpemUgY29udmVydF9lbmNvZGluZyBkYXRlIGRhdGVfbW9kaWZ5IGRlZmF1bHQgZXNjYXBlIGZpcnN0IGZvcm1hdCBqb2luIGpzb25fZW5jb2RlIGtleXMgbGFzdCBsZW5ndGggbG93ZXIgbWVyZ2UgbmwyYnIgbnVtYmVyX2Zvcm1hdCByYXcgcmVwbGFjZSByZXZlcnNlIHJvdW5kIHNsaWNlIHNvcnQgc3BsaXQgc3RyaXB0YWdzIHRpdGxlIHRyaW0gdXBwZXIgdXJsX2VuY29kZSIsY29udGFpbnM6W3JdfSxzPSJhdXRvZXNjYXBlIGJsb2NrIGRvIGVtYmVkIGV4dGVuZHMgZmlsdGVyIGZsdXNoIGZvciBpZiBpbXBvcnQgaW5jbHVkZSBtYWNybyBzYW5kYm94IHNldCBzcGFjZWxlc3MgdXNlIHZlcmJhdGltIjtyZXR1cm4gcz1zKyIgIitzLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJlbmQiK2V9KS5qb2luKCIgIikse2FsaWFzZXM6WyJjcmFmdGNtcyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W2UuQ09NTUVOVCgvXHsjLywvI30vKSx7Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS10YWciLGJlZ2luOi9ceyUvLGVuZDovJX0vLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJuYW1lIixiZWdpbjovXHcrLyxrZXl3b3JkczpzLHN0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W28scl0scmVsZXZhbmNlOjB9fV19LHtjbGFzc05hbWU6InRlbXBsYXRlLXZhcmlhYmxlIixiZWdpbjovXHtcey8sZW5kOi99fS8sY29udGFpbnM6WyJzZWxmIixvLHJdfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R5cGVzY3JpcHQuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QgY2xhc3MgcHVibGljIHByaXZhdGUgcHJvdGVjdGVkIGdldCBzZXQgc3VwZXIgc3RhdGljIGltcGxlbWVudHMgZW51bSBleHBvcnQgaW1wb3J0IGRlY2xhcmUgdHlwZSBuYW1lc3BhY2UgYWJzdHJhY3QgYXMgZnJvbSBleHRlbmRzIGFzeW5jIGF3YWl0IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eSIsYnVpbHRfaW46ImV2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50IGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yIEV2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciBUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSBtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgYW55IG51bWJlciBib29sZWFuIHN0cmluZyB2b2lkIFByb21pc2UifSxuPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJAW0EtWmEteiRfXVswLTlBLVphLXokX10qIn0scj17YmVnaW46IlxcKCIsZW5kOi9cKS8sa2V5d29yZHM6dCxjb250YWluczpbInNlbGYiLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuTlVNQkVSX01PREVdfSxvPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3Jkczp0LGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxuLHJdfTtyZXR1cm57YWxpYXNlczpbInRzIl0sa2V5d29yZHM6dCxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46L15ccypbJyJddXNlIHN0cmljdFsnIl0vfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUse2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLGVuZDoiXFx9In1dfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwW2JCXVswMV0rKSJ9LHtiZWdpbjoiXFxiKDBbb09dWzAtN10rKSJ9LHtiZWdpbjplLkNfTlVNQkVSX1JFfV0scmVsZXZhbmNlOjB9LHtiZWdpbjoiKCIrZS5SRV9TVEFSVEVSU19SRSsifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsa2V5d29yZHM6InJldHVybiB0aHJvdyBjYXNlIixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5SRUdFWFBfTU9ERSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46IihcXCguKj9cXCl8IitlLklERU5UX1JFKyIpXFxzKj0+IixyZXR1cm5CZWdpbjohMCxlbmQ6Ilxccyo9PiIsY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3tiZWdpbjplLklERU5UX1JFfSx7YmVnaW46L1woXHMqXCkvfSx7YmVnaW46L1woLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3Jkczp0LGNvbnRhaW5zOlsic2VsZiIsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfV19XX1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46ImZ1bmN0aW9uIixlbmQ6L1tceztdLyxleGNsdWRlRW5kOiEwLGtleXdvcmRzOnQsY29udGFpbnM6WyJzZWxmIixlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjoiW0EtWmEteiRfXVswLTlBLVphLXokX10qIn0pLG9dLGlsbGVnYWw6LyUvLHJlbGV2YW5jZTowfSx7YmVnaW5LZXl3b3JkczoiY29uc3RydWN0b3IiLGVuZDovXHsvLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6WyJzZWxmIixvXX0se2JlZ2luOi9tb2R1bGVcLi8sa2V5d29yZHM6e2J1aWx0X2luOiJtb2R1bGUifSxyZWxldmFuY2U6MH0se2JlZ2luS2V5d29yZHM6Im1vZHVsZSIsZW5kOi9cey8sZXhjbHVkZUVuZDohMH0se2JlZ2luS2V5d29yZHM6ImludGVyZmFjZSIsZW5kOi9cey8sZXhjbHVkZUVuZDohMCxrZXl3b3JkczoiaW50ZXJmYWNlIGV4dGVuZHMifSx7YmVnaW46L1wkWyguXS99LHtiZWdpbjoiXFwuIitlLklERU5UX1JFLHJlbGV2YW5jZTowfSxuLHJdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YWxhLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57a2V5d29yZHM6e2tleXdvcmQ6ImNoYXIgdWNoYXIgdW5pY2hhciBpbnQgdWludCBsb25nIHVsb25nIHNob3J0IHVzaG9ydCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGZsb2F0IGRvdWJsZSBib29sIHN0cnVjdCBlbnVtIHN0cmluZyB2b2lkIHdlYWsgdW5vd25lZCBvd25lZCBhc3luYyBzaWduYWwgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBvdmVycmlkZSB2aXJ0dWFsIGRlbGVnYXRlIGlmIHdoaWxlIGRvIGZvciBmb3JlYWNoIGVsc2Ugc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCByZXR1cm4gdHJ5IGNhdGNoIHB1YmxpYyBwcml2YXRlIHByb3RlY3RlZCBpbnRlcm5hbCB1c2luZyBuZXcgdGhpcyBnZXQgc2V0IGNvbnN0IHN0ZG91dCBzdGRpbiBzdGRlcnIgdmFyIixidWlsdF9pbjoiREJ1cyBHTGliIENDb2RlIEdlZSBPYmplY3QgR3RrIFBvc2l4IixsaXRlcmFsOiJmYWxzZSB0cnVlIG51bGwifSxjb250YWluczpbe2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIGludGVyZmFjZSBuYW1lc3BhY2UiLGVuZDoieyIsZXhjbHVkZUVuZDohMCxpbGxlZ2FsOiJbXiw6XFxuXFxzXFwuXSIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIiIiJyxlbmQ6JyIiIicscmVsZXZhbmNlOjV9LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ19OVU1CRVJfTU9ERSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXiMiLGVuZDoiJCIscmVsZXZhbmNlOjJ9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmJuZXQuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsidmIiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOiJhZGRoYW5kbGVyIGFkZHJlc3NvZiBhbGlhcyBhbmQgYW5kYWxzbyBhZ2dyZWdhdGUgYW5zaSBhcyBhc3NlbWJseSBhdXRvIGJpbmFyeSBieSBieXJlZiBieXZhbCBjYWxsIGNhc2UgY2F0Y2ggY2xhc3MgY29tcGFyZSBjb25zdCBjb250aW51ZSBjdXN0b20gZGVjbGFyZSBkZWZhdWx0IGRlbGVnYXRlIGRpbSBkaXN0aW5jdCBkbyBlYWNoIGVxdWFscyBlbHNlIGVsc2VpZiBlbmQgZW51bSBlcmFzZSBlcnJvciBldmVudCBleGl0IGV4cGxpY2l0IGZpbmFsbHkgZm9yIGZyaWVuZCBmcm9tIGZ1bmN0aW9uIGdldCBnbG9iYWwgZ290byBncm91cCBoYW5kbGVzIGlmIGltcGxlbWVudHMgaW1wb3J0cyBpbiBpbmhlcml0cyBpbnRlcmZhY2UgaW50byBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBqb2luIGtleSBsZXQgbGliIGxpa2UgbG9vcCBtZSBtaWQgbW9kIG1vZHVsZSBtdXN0aW5oZXJpdCBtdXN0b3ZlcnJpZGUgbXliYXNlIG15Y2xhc3MgbmFtZXNwYWNlIG5hcnJvd2luZyBuZXcgbmV4dCBub3Qgbm90aW5oZXJpdGFibGUgbm90b3ZlcnJpZGFibGUgb2Ygb2ZmIG9uIG9wZXJhdG9yIG9wdGlvbiBvcHRpb25hbCBvciBvcmRlciBvcmVsc2Ugb3ZlcmxvYWRzIG92ZXJyaWRhYmxlIG92ZXJyaWRlcyBwYXJhbWFycmF5IHBhcnRpYWwgcHJlc2VydmUgcHJpdmF0ZSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVibGljIHJhaXNlZXZlbnQgcmVhZG9ubHkgcmVkaW0gcmVtIHJlbW92ZWhhbmRsZXIgcmVzdW1lIHJldHVybiBzZWxlY3Qgc2V0IHNoYWRvd3Mgc2hhcmVkIHNraXAgc3RhdGljIHN0ZXAgc3RvcCBzdHJ1Y3R1cmUgc3RyaWN0IHN1YiBzeW5jbG9jayB0YWtlIHRleHQgdGhlbiB0aHJvdyB0byB0cnkgdW5pY29kZSB1bnRpbCB1c2luZyB3aGVuIHdoZXJlIHdoaWxlIHdpZGVuaW5nIHdpdGggd2l0aGV2ZW50cyB3cml0ZW9ubHkgeG9yIixidWlsdF9pbjoiYm9vbGVhbiBieXRlIGNib29sIGNieXRlIGNjaGFyIGNkYXRlIGNkZWMgY2RibCBjaGFyIGNpbnQgY2xuZyBjb2JqIGNzYnl0ZSBjc2hvcnQgY3NuZyBjc3RyIGN0eXBlIGRhdGUgZGVjaW1hbCBkaXJlY3RjYXN0IGRvdWJsZSBnZXR0eXBlIGdldHhtbG5hbWVzcGFjZSBpaWYgaW50ZWdlciBsb25nIG9iamVjdCBzYnl0ZSBzaG9ydCBzaW5nbGUgc3RyaW5nIHRyeWNhc3QgdHlwZW9mIHVpbnRlZ2VyIHVsb25nIHVzaG9ydCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBub3RoaW5nIn0saWxsZWdhbDoiLy98e3x9fGVuZGlmfGdvc3VifHZhcmlhbnR8d2VuZHxeXFwkICIsY29udGFpbnM6W2UuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtjb250YWluczpbe2JlZ2luOiciIid9XX0pLGUuQ09NTUVOVCgiJyIsIiQiLHtyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiJycnfFx4M2MhLS18LS1ceDNlIixjb250YWluczpbZS5QSFJBU0FMX1dPUkRTX01PREVdfSx7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiI8Lz8iLGVuZDoiPiIsY29udGFpbnM6W2UuUEhSQVNBTF9XT1JEU19NT0RFXX1dfSksZS5DX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIixlbmQ6IiQiLGtleXdvcmRzOnsibWV0YS1rZXl3b3JkIjoiaWYgZWxzZSBlbHNlaWYgZW5kIHJlZ2lvbiBleHRlcm5hbHNvdXJjZSJ9fV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Zic2NyaXB0LWh0bWwuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2JlZ2luOiI8JSIsZW5kOiIlPiIsc3ViTGFuZ3VhZ2U6InZic2NyaXB0In1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJ2YnMiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOntrZXl3b3JkOiJjYWxsIGNsYXNzIGNvbnN0IGRpbSBkbyBsb29wIGVyYXNlIGV4ZWN1dGUgZXhlY3V0ZWdsb2JhbCBleGl0IGZvciBlYWNoIG5leHQgZnVuY3Rpb24gaWYgdGhlbiBlbHNlIG9uIGVycm9yIG9wdGlvbiBleHBsaWNpdCBuZXcgcHJpdmF0ZSBwcm9wZXJ0eSBsZXQgZ2V0IHB1YmxpYyByYW5kb21pemUgcmVkaW0gcmVtIHNlbGVjdCBjYXNlIHNldCBzdG9wIHN1YiB3aGlsZSB3ZW5kIHdpdGggZW5kIHRvIGVsc2VpZiBpcyBvciB4b3IgYW5kIG5vdCBjbGFzc19pbml0aWFsaXplIGNsYXNzX3Rlcm1pbmF0ZSBkZWZhdWx0IHByZXNlcnZlIGluIG1lIGJ5dmFsIGJ5cmVmIHN0ZXAgcmVzdW1lIGdvdG8iLGJ1aWx0X2luOiJsY2FzZSBtb250aCB2YXJ0eXBlIGluc3RycmV2IHVib3VuZCBzZXRsb2NhbGUgZ2V0b2JqZWN0IHJnYiBnZXRyZWYgc3RyaW5nIHdlZWtkYXluYW1lIHJuZCBkYXRlYWRkIG1vbnRobmFtZSBub3cgZGF5IG1pbnV0ZSBpc2FycmF5IGNib29sIHJvdW5kIGZvcm1hdGN1cnJlbmN5IGNvbnZlcnNpb25zIGNzbmcgdGltZXZhbHVlIHNlY29uZCB5ZWFyIHNwYWNlIGFicyBjbG5nIHRpbWVzZXJpYWwgZml4cyBsZW4gYXNjIGlzZW1wdHkgbWF0aHMgZGF0ZXNlcmlhbCBhdG4gdGltZXIgaXNvYmplY3QgZmlsdGVyIHdlZWtkYXkgZGF0ZXZhbHVlIGNjdXIgaXNkYXRlIGluc3RyIGRhdGVkaWZmIGZvcm1hdGRhdGV0aW1lIHJlcGxhY2UgaXNudWxsIHJpZ2h0IHNnbiBhcnJheSBzbnVtZXJpYyBsb2cgY2RibCBoZXggY2hyIGxib3VuZCBtc2dib3ggdWNhc2UgZ2V0bG9jYWxlIGNvcyBjZGF0ZSBjYnl0ZSBydHJpbSBqb2luIGhvdXIgb2N0IHR5cGVuYW1lIHRyaW0gc3RyY29tcCBpbnQgY3JlYXRlb2JqZWN0IGxvYWRwaWN0dXJlIHRhbiBmb3JtYXRudW1iZXIgbWlkIHNjcmlwdGVuZ2luZWJ1aWxkdmVyc2lvbiBzY3JpcHRlbmdpbmUgc3BsaXQgc2NyaXB0ZW5naW5lbWlub3J2ZXJzaW9uIGNpbnQgc2luIGRhdGVwYXJ0IGx0cmltIHNxciBzY3JpcHRlbmdpbmVtYWpvcnZlcnNpb24gdGltZSBkZXJpdmVkIGV2YWwgZGF0ZSBmb3JtYXRwZXJjZW50IGV4cCBpbnB1dGJveCBsZWZ0IGFzY3cgY2hydyByZWdleHAgc2VydmVyIHJlc3BvbnNlIHJlcXVlc3QgY3N0ciBlcnIiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCBub3RoaW5nIGVtcHR5In0saWxsZWdhbDoiLy8iLGNvbnRhaW5zOltlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7Y29udGFpbnM6W3tiZWdpbjonIiInfV19KSxlLkNPTU1FTlQoLycvLC8kLyx7cmVsZXZhbmNlOjB9KSxlLkNfTlVNQkVSX01PREVdfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92ZXJpbG9nLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInYiLCJzdiIsInN2aCJdLGNhc2VfaW5zZW5zaXRpdmU6ITEsa2V5d29yZHM6e2tleXdvcmQ6ImFjY2VwdF9vbiBhbGlhcyBhbHdheXMgYWx3YXlzX2NvbWIgYWx3YXlzX2ZmIGFsd2F5c19sYXRjaCBhbmQgYXNzZXJ0IGFzc2lnbiBhc3N1bWUgYXV0b21hdGljIGJlZm9yZSBiZWdpbiBiaW5kIGJpbnMgYmluc29mIGJpdCBicmVhayBidWZ8MCBidWZpZjAgYnVmaWYxIGJ5dGUgY2FzZSBjYXNleCBjYXNleiBjZWxsIGNoYW5kbGUgY2hlY2tlciBjbGFzcyBjbG9ja2luZyBjbW9zIGNvbmZpZyBjb25zdCBjb25zdHJhaW50IGNvbnRleHQgY29udGludWUgY292ZXIgY292ZXJncm91cCBjb3ZlcnBvaW50IGNyb3NzIGRlYXNzaWduIGRlZmF1bHQgZGVmcGFyYW0gZGVzaWduIGRpc2FibGUgZGlzdCBkbyBlZGdlIGVsc2UgZW5kIGVuZGNhc2UgZW5kY2hlY2tlciBlbmRjbGFzcyBlbmRjbG9ja2luZyBlbmRjb25maWcgZW5kZnVuY3Rpb24gZW5kZ2VuZXJhdGUgZW5kZ3JvdXAgZW5kaW50ZXJmYWNlIGVuZG1vZHVsZSBlbmRwYWNrYWdlIGVuZHByaW1pdGl2ZSBlbmRwcm9ncmFtIGVuZHByb3BlcnR5IGVuZHNwZWNpZnkgZW5kc2VxdWVuY2UgZW5kdGFibGUgZW5kdGFzayBlbnVtIGV2ZW50IGV2ZW50dWFsbHkgZXhwZWN0IGV4cG9ydCBleHRlbmRzIGV4dGVybiBmaW5hbCBmaXJzdF9tYXRjaCBmb3IgZm9yY2UgZm9yZWFjaCBmb3JldmVyIGZvcmsgZm9ya2pvaW4gZnVuY3Rpb24gZ2VuZXJhdGV8NSBnZW52YXIgZ2xvYmFsIGhpZ2h6MCBoaWdoejEgaWYgaWZmIGlmbm9uZSBpZ25vcmVfYmlucyBpbGxlZ2FsX2JpbnMgaW1wbGVtZW50cyBpbXBsaWVzIGltcG9ydCBpbmNkaXIgaW5jbHVkZSBpbml0aWFsIGlub3V0IGlucHV0IGluc2lkZSBpbnN0YW5jZSBpbnQgaW50ZWdlciBpbnRlcmNvbm5lY3QgaW50ZXJmYWNlIGludGVyc2VjdCBqb2luIGpvaW5fYW55IGpvaW5fbm9uZSBsYXJnZSBsZXQgbGlibGlzdCBsaWJyYXJ5IGxvY2FsIGxvY2FscGFyYW0gbG9naWMgbG9uZ2ludCBtYWNyb21vZHVsZSBtYXRjaGVzIG1lZGl1bSBtb2Rwb3J0IG1vZHVsZSBuYW5kIG5lZ2VkZ2UgbmV0dHlwZSBuZXcgbmV4dHRpbWUgbm1vcyBub3Igbm9zaG93Y2FuY2VsbGVkIG5vdCBub3RpZjAgbm90aWYxIG9yIG91dHB1dCBwYWNrYWdlIHBhY2tlZCBwYXJhbWV0ZXIgcG1vcyBwb3NlZGdlIHByaW1pdGl2ZSBwcmlvcml0eSBwcm9ncmFtIHByb3BlcnR5IHByb3RlY3RlZCBwdWxsMCBwdWxsMSBwdWxsZG93biBwdWxsdXAgcHVsc2VzdHlsZV9vbmRldGVjdCBwdWxzZXN0eWxlX29uZXZlbnQgcHVyZSByYW5kIHJhbmRjIHJhbmRjYXNlIHJhbmRzZXF1ZW5jZSByY21vcyByZWFsIHJlYWx0aW1lIHJlZiByZWcgcmVqZWN0X29uIHJlbGVhc2UgcmVwZWF0IHJlc3RyaWN0IHJldHVybiBybm1vcyBycG1vcyBydHJhbiBydHJhbmlmMCBydHJhbmlmMSBzX2Fsd2F5cyBzX2V2ZW50dWFsbHkgc19uZXh0dGltZSBzX3VudGlsIHNfdW50aWxfd2l0aCBzY2FsYXJlZCBzZXF1ZW5jZSBzaG9ydGludCBzaG9ydHJlYWwgc2hvd2NhbmNlbGxlZCBzaWduZWQgc21hbGwgc29mdCBzb2x2ZSBzcGVjaWZ5IHNwZWNwYXJhbSBzdGF0aWMgc3RyaW5nIHN0cm9uZyBzdHJvbmcwIHN0cm9uZzEgc3RydWN0IHN1cGVyIHN1cHBseTAgc3VwcGx5MSBzeW5jX2FjY2VwdF9vbiBzeW5jX3JlamVjdF9vbiB0YWJsZSB0YWdnZWQgdGFzayB0aGlzIHRocm91Z2hvdXQgdGltZSB0aW1lcHJlY2lzaW9uIHRpbWV1bml0IHRyYW4gdHJhbmlmMCB0cmFuaWYxIHRyaSB0cmkwIHRyaTEgdHJpYW5kIHRyaW9yIHRyaXJlZyB0eXBlIHR5cGVkZWYgdW5pb24gdW5pcXVlIHVuaXF1ZTAgdW5zaWduZWQgdW50aWwgdW50aWxfd2l0aCB1bnR5cGVkIHVzZSB1d2lyZSB2YXIgdmVjdG9yZWQgdmlydHVhbCB2b2lkIHdhaXQgd2FpdF9vcmRlciB3YW5kIHdlYWsgd2VhazAgd2VhazEgd2hpbGUgd2lsZGNhcmQgd2lyZSB3aXRoIHdpdGhpbiB3b3IgeG5vciB4b3IiLGxpdGVyYWw6Im51bGwiLGJ1aWx0X2luOiIkZmluaXNoICRzdG9wICRleGl0ICRmYXRhbCAkZXJyb3IgJHdhcm5pbmcgJGluZm8gJHJlYWx0aW1lICR0aW1lICRwcmludHRpbWVzY2FsZSAkYml0c3RvcmVhbCAkYml0c3Rvc2hvcnRyZWFsICRpdG9yICRzaWduZWQgJGNhc3QgJGJpdHMgJHN0aW1lICR0aW1lZm9ybWF0ICRyZWFsdG9iaXRzICRzaG9ydHJlYWx0b2JpdHMgJHJ0b2kgJHVuc2lnbmVkICRhc3NlcnRvbiAkYXNzZXJ0a2lsbCAkYXNzZXJ0cGFzc29uICRhc3NlcnRmYWlsb24gJGFzc2VydG5vbnZhY3VvdXNvbiAkYXNzZXJ0b2ZmICRhc3NlcnRjb250cm9sICRhc3NlcnRwYXNzb2ZmICRhc3NlcnRmYWlsb2ZmICRhc3NlcnR2YWN1b3Vzb2ZmICRpc3VuYm91bmRlZCAkc2FtcGxlZCAkZmVsbCAkY2hhbmdlZCAkcGFzdF9nY2xrICRmZWxsX2djbGsgJGNoYW5nZWRfZ2NsayAkcmlzaW5nX2djbGsgJHN0ZWFkeV9nY2xrICRjb3ZlcmFnZV9jb250cm9sICRjb3ZlcmFnZV9nZXQgJGNvdmVyYWdlX3NhdmUgJHNldF9jb3ZlcmFnZV9kYl9uYW1lICRyb3NlICRzdGFibGUgJHBhc3QgJHJvc2VfZ2NsayAkc3RhYmxlX2djbGsgJGZ1dHVyZV9nY2xrICRmYWxsaW5nX2djbGsgJGNoYW5naW5nX2djbGsgJGRpc3BsYXkgJGNvdmVyYWdlX2dldF9tYXggJGNvdmVyYWdlX21lcmdlICRnZXRfY292ZXJhZ2UgJGxvYWRfY292ZXJhZ2VfZGIgJHR5cGVuYW1lICR1bnBhY2tlZF9kaW1lbnNpb25zICRsZWZ0ICRsb3cgJGluY3JlbWVudCAkY2xvZzIgJGxuICRsb2cxMCAkZXhwICRzcXJ0ICRwb3cgJGZsb29yICRjZWlsICRzaW4gJGNvcyAkdGFuICRjb3VudGJpdHMgJG9uZWhvdCAkaXN1bmtub3duICRmYXRhbCAkd2FybmluZyAkZGltZW5zaW9ucyAkcmlnaHQgJGhpZ2ggJHNpemUgJGFzaW4gJGFjb3MgJGF0YW4gJGF0YW4yICRoeXBvdCAkc2luaCAkY29zaCAkdGFuaCAkYXNpbmggJGFjb3NoICRhdGFuaCAkY291bnRvbmVzICRvbmVob3QwICRlcnJvciAkaW5mbyAkcmFuZG9tICRkaXN0X2NoaV9zcXVhcmUgJGRpc3RfZXJsYW5nICRkaXN0X2V4cG9uZW50aWFsICRkaXN0X25vcm1hbCAkZGlzdF9wb2lzc29uICRkaXN0X3QgJGRpc3RfdW5pZm9ybSAkcV9pbml0aWFsaXplICRxX3JlbW92ZSAkcV9leGFtICRhc3luYyRhbmQkYXJyYXkgJGFzeW5jJG5hbmQkYXJyYXkgJGFzeW5jJG9yJGFycmF5ICRhc3luYyRub3IkYXJyYXkgJHN5bmMkYW5kJGFycmF5ICRzeW5jJG5hbmQkYXJyYXkgJHN5bmMkb3IkYXJyYXkgJHN5bmMkbm9yJGFycmF5ICRxX2FkZCAkcV9mdWxsICRwc3ByaW50ZiAkYXN5bmMkYW5kJHBsYW5lICRhc3luYyRuYW5kJHBsYW5lICRhc3luYyRvciRwbGFuZSAkYXN5bmMkbm9yJHBsYW5lICRzeW5jJGFuZCRwbGFuZSAkc3luYyRuYW5kJHBsYW5lICRzeW5jJG9yJHBsYW5lICRzeW5jJG5vciRwbGFuZSAkc3lzdGVtICRkaXNwbGF5ICRkaXNwbGF5YiAkZGlzcGxheWggJGRpc3BsYXlvICRzdHJvYmUgJHN0cm9iZWIgJHN0cm9iZWggJHN0cm9iZW8gJHdyaXRlICRyZWFkbWVtYiAkcmVhZG1lbWggJHdyaXRlbWVtaCAkdmFsdWUkcGx1c2FyZ3MgJGR1bXB2YXJzICRkdW1wb24gJGR1bXBsaW1pdCAkZHVtcHBvcnRzICRkdW1wcG9ydHNvbiAkZHVtcHBvcnRzbGltaXQgJHdyaXRlYiAkd3JpdGVoICR3cml0ZW8gJG1vbml0b3IgJG1vbml0b3JiICRtb25pdG9yaCAkbW9uaXRvcm8gJHdyaXRlbWVtYiAkZHVtcGZpbGUgJGR1bXBvZmYgJGR1bXBhbGwgJGR1bXBmbHVzaCAkZHVtcHBvcnRzb2ZmICRkdW1wcG9ydHNhbGwgJGR1bXBwb3J0c2ZsdXNoICRmY2xvc2UgJGZkaXNwbGF5ICRmZGlzcGxheWIgJGZkaXNwbGF5aCAkZmRpc3BsYXlvICRmc3Ryb2JlICRmc3Ryb2JlYiAkZnN0cm9iZWggJGZzdHJvYmVvICRzd3JpdGUgJHN3cml0ZWIgJHN3cml0ZWggJHN3cml0ZW8gJGZzY2FuZiAkZnJlYWQgJGZzZWVrICRmZmx1c2ggJGZlb2YgJGZvcGVuICRmd3JpdGUgJGZ3cml0ZWIgJGZ3cml0ZWggJGZ3cml0ZW8gJGZtb25pdG9yICRmbW9uaXRvcmIgJGZtb25pdG9yaCAkZm1vbml0b3JvICRzZm9ybWF0ICRzZm9ybWF0ZiAkZmdldGMgJHVuZ2V0YyAkZmdldHMgJHNzY2FuZiAkcmV3aW5kICRmdGVsbCAkZmVycm9yIn0sbGV4ZW1lczovW1x3XCRdKy8sY29udGFpbnM6W2UuQ19CTE9DS19DT01NRU5UX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToibnVtYmVyIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbe2JlZ2luOiJcXGIoKFxcZCsnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspIn0se2JlZ2luOiJcXEIoKCcoYnxofG98ZHxCfEh8T3xEKSlbMC05eHpYWmEtZkEtRl9dKykifSx7YmVnaW46IlxcYihbMC05X10pKyIscmVsZXZhbmNlOjB9XX0se2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46IiNcXCgoPyFwYXJhbWV0ZXIpLitcXCkifSx7YmVnaW46IlxcLlxcdysiLHJlbGV2YW5jZTowfV19LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJgIixlbmQ6IiQiLGtleXdvcmRzOnsibWV0YS1rZXl3b3JkIjoiZGVmaW5lIF9fRklMRV9fIF9fTElORV9fIGJlZ2luX2tleXdvcmRzIGNlbGxkZWZpbmUgZGVmYXVsdF9uZXR0eXBlIGRlZmluZSBlbHNlIGVsc2lmIGVuZF9rZXl3b3JkcyBlbmRjZWxsZGVmaW5lIGVuZGlmIGlmZGVmIGlmbmRlZiBpbmNsdWRlIGxpbmUgbm91bmNvbm5lY3RlZF9kcml2ZSBwcmFnbWEgcmVzZXRhbGwgdGltZXNjYWxlIHVuY29ubmVjdGVkX2RyaXZlIHVuZGVmIHVuZGVmaW5lYWxsIn0scmVsZXZhbmNlOjB9XX19fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmhkbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITAsa2V5d29yZHM6e2tleXdvcmQ6ImFicyBhY2Nlc3MgYWZ0ZXIgYWxpYXMgYWxsIGFuZCBhcmNoaXRlY3R1cmUgYXJyYXkgYXNzZXJ0IGFzc3VtZSBhc3N1bWVfZ3VhcmFudGVlIGF0dHJpYnV0ZSBiZWdpbiBibG9jayBib2R5IGJ1ZmZlciBidXMgY2FzZSBjb21wb25lbnQgY29uZmlndXJhdGlvbiBjb25zdGFudCBjb250ZXh0IGNvdmVyIGRpc2Nvbm5lY3QgZG93bnRvIGRlZmF1bHQgZWxzZSBlbHNpZiBlbmQgZW50aXR5IGV4aXQgZmFpcm5lc3MgZmlsZSBmb3IgZm9yY2UgZnVuY3Rpb24gZ2VuZXJhdGUgZ2VuZXJpYyBncm91cCBndWFyZGVkIGlmIGltcHVyZSBpbiBpbmVydGlhbCBpbm91dCBpcyBsYWJlbCBsaWJyYXJ5IGxpbmthZ2UgbGl0ZXJhbCBsb29wIG1hcCBtb2QgbmFuZCBuZXcgbmV4dCBub3Igbm90IG51bGwgb2Ygb24gb3BlbiBvciBvdGhlcnMgb3V0IHBhY2thZ2UgcGFyYW1ldGVyIHBvcnQgcG9zdHBvbmVkIHByb2NlZHVyZSBwcm9jZXNzIHByb3BlcnR5IHByb3RlY3RlZCBwdXJlIHJhbmdlIHJlY29yZCByZWdpc3RlciByZWplY3QgcmVsZWFzZSByZW0gcmVwb3J0IHJlc3RyaWN0IHJlc3RyaWN0X2d1YXJhbnRlZSByZXR1cm4gcm9sIHJvciBzZWxlY3Qgc2VxdWVuY2Ugc2V2ZXJpdHkgc2hhcmVkIHNpZ25hbCBzbGEgc2xsIHNyYSBzcmwgc3Ryb25nIHN1YnR5cGUgdGhlbiB0byB0cmFuc3BvcnQgdHlwZSB1bmFmZmVjdGVkIHVuaXRzIHVudGlsIHVzZSB2YXJpYWJsZSB2aWV3IHZtb2RlIHZwcm9wIHZ1bml0IHdhaXQgd2hlbiB3aGlsZSB3aXRoIHhub3IgeG9yIixidWlsdF9pbjoiYm9vbGVhbiBiaXQgY2hhcmFjdGVyIGludGVnZXIgdGltZSBkZWxheV9sZW5ndGggbmF0dXJhbCBwb3NpdGl2ZSBzdHJpbmcgYml0X3ZlY3RvciBmaWxlX29wZW5fa2luZCBmaWxlX29wZW5fc3RhdHVzIHN0ZF9sb2dpYyBzdGRfbG9naWNfdmVjdG9yIHVuc2lnbmVkIHNpZ25lZCBib29sZWFuX3ZlY3RvciBpbnRlZ2VyX3ZlY3RvciBzdGRfdWxvZ2ljIHN0ZF91bG9naWNfdmVjdG9yIHVucmVzb2x2ZWRfdW5zaWduZWQgdV91bnNpZ25lZCB1bnJlc29sdmVkX3NpZ25lZCB1X3NpZ25lZCByZWFsX3ZlY3RvciB0aW1lX3ZlY3RvciIsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSBub3RlIHdhcm5pbmcgZXJyb3IgZmFpbHVyZSBsaW5lIHRleHQgc2lkZSB3aWR0aCJ9LGlsbGVnYWw6InsiLGNvbnRhaW5zOltlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiLS0iLCIkIiksZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGIoXFxkKF98XFxkKSojXFx3KyhcXC5cXHcrKT8jKFtlRV1bLStdP1xcZChffFxcZCkqKT98XFxkKF98XFxkKSooXFwuXFxkKF98XFxkKSopPyhbZUVdWy0rXT9cXGQoX3xcXGQpKik/KSIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IicoVXxYfDB8MXxafFd8THxIfC0pJyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IidbQS1aYS16XShfP1tBLVphLXowLTldKSoiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3ZpbS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2xleGVtZXM6L1shI0Bcd10rLyxrZXl3b3Jkczp7a2V5d29yZDoiTnwwIFB8MCBYfDAgYXwwIGFiIGFiYyBhYm8gYWwgYW0gYW58MCBhciBhcmdhIGFyZ2QgYXJnZSBhcmdkbyBhcmdnIGFyZ2wgYXJndSBhcyBhdSBhdWcgYXVuIGJ8MCBiTiBiYSBiYWQgYmQgYmUgYmVsIGJmIGJsIGJtIGJuIGJvIGJwIGJyIGJyZWEgYnJlYWthIGJyZWFrZCBicmVha2wgYnJvIGJ1ZmRvIGJ1ZmZlcnMgYnVuIGJ3IGN8MCBjTiBjTmYgY2EgY2FiYyBjYWRkYiBjYWQgY2FkZGYgY2FsIGNhdCBjYiBjYyBjY2wgY2QgY2UgY2V4IGNmIGNmaXIgY2dldGIgY2dldGUgY2cgY2hhbmdlcyBjaGQgY2hlIGNoZWNrdCBjbCBjbGEgY2xvIGNtIGNtYXBjIGNtZSBjbiBjbmV3IGNuZiBjbm8gY25vcmVhIGNub3JlbWUgY28gY29sIGNvbG8gY29tIGNvbWMgY29tcCBjb24gY29uZiBjb3BlIGNwIGNwZiBjcSBjciBjcyBjc3QgY3UgY3VuYSBjdW5tZSBjdyBkZWxtIGRlYiBkZWJ1Z2cgZGVsYyBkZWxmIGRpZiBkaWZmZyBkaWZmbyBkaWZmcCBkaWZmcHUgZGlmZnMgZGlmZnRoaXMgZGlnIGRpIGRsIGRlbGwgZGogZGxpIGRvIGRvYXV0b2EgZHAgZHIgZHMgZHNwIGV8MCBlYSBlYyBlY2hvZSBlY2hvaCBlY2hvbSBlY2hvbiBlbCBlbHNlaSBlbSBlbiBlbmRmbyBlbmRmIGVuZHQgZW5kdyBlbmUgZXggZXhlIGV4aSBleHUgZnwwIGZpbGVzIGZpbGV0IGZpbiBmaW5hIGZpbmkgZmlyIGZpeCBmbyBmb2xkYyBmb2xkZCBmb2xkZG9jIGZvbGRvIGZvciBmdSBnbyBnciBncmVwYSBndSBndiBoYSBoZWxwZiBoZWxwZyBoZWxwdCBoaSBoaWQgaGlzIGlhIGlhYmMgaWYgaWogaWwgaW0gaW1hcGMgaW1lIGlubyBpbm9yZWEgaW5vcmVtZSBpbnQgaXMgaXNwIGl1IGl1bmEgaXVubWUganwwIGp1IGt8MCBrZWVwYSBrZWUga2VlcGogbE4gbE5mIGx8MCBsYWQgbGFkZGIgbGFkZGYgbGEgbGFuIGxhdCBsYiBsYyBsY2ggbGNsIGxjcyBsZSBsZWZ0YSBsZXQgbGV4IGxmIGxmaXIgbGdldGIgbGdldGUgbGcgbGdyIGxncmVwYSBsaCBsbCBsbGEgbGxpIGxtYWsgbG0gbG1hcGMgbG5lIGxuZXcgbG5mIGxuIGxvYWRrIGxvIGxvYyBsb2NrdiBsb2wgbG9wZSBscCBscGYgbHIgbHMgbHQgbHUgbHVhIGx1YWQgbHVhZiBsdiBsdmltZ3JlcGEgbHcgbXwwIG1hIG1hayBtYXAgbWFwYyBtYXJrcyBtYXQgbWUgbWVudXQgbWVzIG1rIG1rcyBta3NwIG1rdiBta3ZpZSBtb2QgbXogbXpmIG5iYyBuYiBuYnMgbmV3IG5tIG5tYXBjIG5tZSBubiBubm9yZW1lIG5vYSBubyBub2ggbm9yZWEgbm9yZW1lIG5vcm0gbnUgbnVuIG51bm1lIG9sIG98MCBvbSBvbWFwYyBvbWUgb24gb25vIG9ub3JlbWUgb3B0IG91IG91bm1lIG93IHB8MCBwcm9mZCBwcm9mIHBybyBwcm9tcHRyIHBjIHBlZCBwZSBwZXJsZCBwbyBwb3B1IHBwIHByZSBwcmV2IHBzIHB0IHB0TiBwdGYgcHRqIHB0bCBwdG4gcHRwIHB0ciBwdHMgcHUgcHcgcHkzIHB5dGhvbjMgcHkzZCBweTNmIHB5IHB5ZCBweWYgcXVpdGEgcWEgcmVjIHJlZCByZWRpIHJlZHIgcmVkcmF3cyByZWcgcmVzIHJldCByZXR1IHJldyByaSByaWdodGIgcnViIHJ1YnlkIHJ1YnlmIHJ1bmQgcnUgcnYgc04gc2FuIHNhIHNhbCBzYXYgc2Igc2JOIHNiYSBzYmYgc2JsIHNibSBzYm4gc2JwIHNiciBzY3JpcCBzY3JpcHRlIHNjcyBzZSBzZXRmIHNldGcgc2V0bCBzZiBzZmlyIHNoIHNpbSBzaWcgc2lsIHNsIHNsYSBzbSBzbWFwIHNtYXBjIHNtZSBzbiBzbmkgc25vIHNub3Igc25vcmVtZSBzb3Igc28gc3BlbGxkIHNwZSBzcGVsbGkgc3BlbGxyIHNwZWxsdSBzcGVsbHcgc3Agc3ByIHNyZSBzdCBzdGEgc3RhcnRnIHN0YXJ0ciBzdGFyIHN0b3BpIHN0aiBzdHMgc3VuIHN1bm0gc3VubWUgc3VzIHN2IHN3IHN5IHN5bnRpIHN5bmMgdE4gdGFiTiB0YWJjIHRhYmRvIHRhYmUgdGFiZiB0YWJmaXIgdGFibCB0YWJtIHRhYm5ldyB0YWJuIHRhYm8gdGFicCB0YWJyIHRhYnMgdGFiIHRhIHRhZ3MgdGMgdGNsZCB0Y2xmIHRlIHRmIHRoIHRqIHRsIHRtIHRuIHRvIHRwIHRyIHRyeSB0cyB0dSB1fDAgdW5kb2ogdW5kb2wgdW5hIHVuaCB1bmwgdW5sbyB1bm0gdW5tZSB1bnMgdXAgdmUgdmVyYiB2ZXJ0IHZpbSB2aW1ncmVwYSB2aSB2aXUgdmllIHZtIHZtYXBjIHZtZSB2bmUgdm4gdm5vcmVtZSB2cyB2dSB2dW5tZSB3aW5kbyB3fDAgd04gd2Egd2ggd2kgd2luYyB3aW5wIHduIHdwIHdxIHdxYSB3cyB3dSB3diB4fDAgeGEgeG1hcGMgeG0geG1lIHhuIHhub3JlbWUgeHUgeHVubWUgeXwwIHp8MCB+IE5leHQgUHJpbnQgYXBwZW5kIGFiYnJldmlhdGUgYWJjbGVhciBhYm92ZWxlZnQgYWxsIGFtZW51IGFub3JlbWVudSBhcmdzIGFyZ2FkZCBhcmdkZWxldGUgYXJnZWRpdCBhcmdnbG9iYWwgYXJnbG9jYWwgYXJndW1lbnQgYXNjaWkgYXV0b2NtZCBhdWdyb3VwIGF1bm1lbnUgYnVmZmVyIGJOZXh0IGJhbGwgYmFkZCBiZGVsZXRlIGJlaGF2ZSBiZWxvd3JpZ2h0IGJmaXJzdCBibGFzdCBibW9kaWZpZWQgYm5leHQgYm90cmlnaHQgYnByZXZpb3VzIGJyZXdpbmQgYnJlYWsgYnJlYWthZGQgYnJlYWtkZWwgYnJlYWtsaXN0IGJyb3dzZSBidW5sb2FkIGJ3aXBlb3V0IGNoYW5nZSBjTmV4dCBjTmZpbGUgY2FiYnJldiBjYWJjbGVhciBjYWRkYnVmZmVyIGNhZGRleHByIGNhZGRmaWxlIGNhbGwgY2F0Y2ggY2J1ZmZlciBjY2xvc2UgY2VudGVyIGNleHByIGNmaWxlIGNmaXJzdCBjZ2V0YnVmZmVyIGNnZXRleHByIGNnZXRmaWxlIGNoZGlyIGNoZWNrcGF0aCBjaGVja3RpbWUgY2xpc3QgY2xhc3QgY2xvc2UgY21hcCBjbWFwY2xlYXIgY21lbnUgY25leHQgY25ld2VyIGNuZmlsZSBjbm9yZW1hcCBjbm9yZWFiYnJldiBjbm9yZW1lbnUgY29weSBjb2xkZXIgY29sb3JzY2hlbWUgY29tbWFuZCBjb21jbGVhciBjb21waWxlciBjb250aW51ZSBjb25maXJtIGNvcGVuIGNwcmV2aW91cyBjcGZpbGUgY3F1aXQgY3Jld2luZCBjc2NvcGUgY3N0YWcgY3VubWFwIGN1bmFiYnJldiBjdW5tZW51IGN3aW5kb3cgZGVsZXRlIGRlbG1hcmtzIGRlYnVnIGRlYnVnZ3JlZWR5IGRlbGNvbW1hbmQgZGVsZnVuY3Rpb24gZGlmZnVwZGF0ZSBkaWZmZ2V0IGRpZmZvZmYgZGlmZnBhdGNoIGRpZmZwdXQgZGlmZnNwbGl0IGRpZ3JhcGhzIGRpc3BsYXkgZGVsZXRlbCBkanVtcCBkbGlzdCBkb2F1dG9jbWQgZG9hdXRvYWxsIGRlbGV0ZXAgZHJvcCBkc2VhcmNoIGRzcGxpdCBlZGl0IGVhcmxpZXIgZWNobyBlY2hvZXJyIGVjaG9obCBlY2hvbXNnIGVsc2UgZWxzZWlmIGVtZW51IGVuZGlmIGVuZGZvciBlbmRmdW5jdGlvbiBlbmR0cnkgZW5kd2hpbGUgZW5ldyBleGVjdXRlIGV4aXQgZXh1c2FnZSBmaWxlIGZpbGV0eXBlIGZpbmQgZmluYWxseSBmaW5pc2ggZmlyc3QgZml4ZGVsIGZvbGQgZm9sZGNsb3NlIGZvbGRkb29wZW4gZm9sZGRvY2xvc2VkIGZvbGRvcGVuIGZ1bmN0aW9uIGdsb2JhbCBnb3RvIGdyZXAgZ3JlcGFkZCBndWkgZ3ZpbSBoYXJkY29weSBoZWxwIGhlbHBmaW5kIGhlbHBncmVwIGhlbHB0YWdzIGhpZ2hsaWdodCBoaWRlIGhpc3RvcnkgaW5zZXJ0IGlhYmJyZXYgaWFiY2xlYXIgaWp1bXAgaWxpc3QgaW1hcCBpbWFwY2xlYXIgaW1lbnUgaW5vcmVtYXAgaW5vcmVhYmJyZXYgaW5vcmVtZW51IGludHJvIGlzZWFyY2ggaXNwbGl0IGl1bm1hcCBpdW5hYmJyZXYgaXVubWVudSBqb2luIGp1bXBzIGtlZXBhbHQga2VlcG1hcmtzIGtlZXBqdW1wcyBsTmV4dCBsTmZpbGUgbGlzdCBsYWRkZXhwciBsYWRkYnVmZmVyIGxhZGRmaWxlIGxhc3QgbGFuZ3VhZ2UgbGF0ZXIgbGJ1ZmZlciBsY2QgbGNoZGlyIGxjbG9zZSBsY3Njb3BlIGxlZnQgbGVmdGFib3ZlIGxleHByIGxmaWxlIGxmaXJzdCBsZ2V0YnVmZmVyIGxnZXRleHByIGxnZXRmaWxlIGxncmVwIGxncmVwYWRkIGxoZWxwZ3JlcCBsbGFzdCBsbGlzdCBsbWFrZSBsbWFwIGxtYXBjbGVhciBsbmV4dCBsbmV3ZXIgbG5maWxlIGxub3JlbWFwIGxvYWRrZXltYXAgbG9hZHZpZXcgbG9ja21hcmtzIGxvY2t2YXIgbG9sZGVyIGxvcGVuIGxwcmV2aW91cyBscGZpbGUgbHJld2luZCBsdGFnIGx1bm1hcCBsdWFkbyBsdWFmaWxlIGx2aW1ncmVwIGx2aW1ncmVwYWRkIGx3aW5kb3cgbW92ZSBtYXJrIG1ha2UgbWFwY2xlYXIgbWF0Y2ggbWVudSBtZW51dHJhbnNsYXRlIG1lc3NhZ2VzIG1rZXhyYyBta3Nlc3Npb24gbWtzcGVsbCBta3ZpbXJjIG1rdmlldyBtb2RlIG16c2NoZW1lIG16ZmlsZSBuYmNsb3NlIG5ia2V5IG5ic2FydCBuZXh0IG5tYXAgbm1hcGNsZWFyIG5tZW51IG5ub3JlbWFwIG5ub3JlbWVudSBub2F1dG9jbWQgbm9yZW1hcCBub2hsc2VhcmNoIG5vcmVhYmJyZXYgbm9yZW1lbnUgbm9ybWFsIG51bWJlciBudW5tYXAgbnVubWVudSBvbGRmaWxlcyBvcGVuIG9tYXAgb21hcGNsZWFyIG9tZW51IG9ubHkgb25vcmVtYXAgb25vcmVtZW51IG9wdGlvbnMgb3VubWFwIG91bm1lbnUgb3duc3ludGF4IHByaW50IHByb2ZkZWwgcHJvZmlsZSBwcm9tcHRmaW5kIHByb21wdHJlcGwgcGNsb3NlIHBlZGl0IHBlcmwgcGVybGRvIHBvcCBwb3B1cCBwcG9wIHByZXNlcnZlIHByZXZpb3VzIHBzZWFyY2ggcHRhZyBwdE5leHQgcHRmaXJzdCBwdGp1bXAgcHRsYXN0IHB0bmV4dCBwdHByZXZpb3VzIHB0cmV3aW5kIHB0c2VsZWN0IHB1dCBwd2QgcHkzZG8gcHkzZmlsZSBweXRob24gcHlkbyBweWZpbGUgcXVpdCBxdWl0YWxsIHFhbGwgcmVhZCByZWNvdmVyIHJlZG8gcmVkaXIgcmVkcmF3IHJlZHJhd3N0YXR1cyByZWdpc3RlcnMgcmVzaXplIHJldGFiIHJldHVybiByZXdpbmQgcmlnaHQgcmlnaHRiZWxvdyBydWJ5IHJ1YnlkbyBydWJ5ZmlsZSBydW5kbyBydW50aW1lIHJ2aW1pbmZvIHN1YnN0aXR1dGUgc05leHQgc2FuZGJveCBzYXJndW1lbnQgc2FsbCBzYXZlYXMgc2J1ZmZlciBzYk5leHQgc2JhbGwgc2JmaXJzdCBzYmxhc3Qgc2Jtb2RpZmllZCBzYm5leHQgc2JwcmV2aW91cyBzYnJld2luZCBzY3JpcHRuYW1lcyBzY3JpcHRlbmNvZGluZyBzY3Njb3BlIHNldCBzZXRmaWxldHlwZSBzZXRnbG9iYWwgc2V0bG9jYWwgc2ZpbmQgc2ZpcnN0IHNoZWxsIHNpbWFsdCBzaWduIHNpbGVudCBzbGVlcCBzbGFzdCBzbWFnaWMgc21hcGNsZWFyIHNtZW51IHNuZXh0IHNuaWZmIHNub21hZ2ljIHNub3JlbWFwIHNub3JlbWVudSBzb3J0IHNvdXJjZSBzcGVsbGR1bXAgc3BlbGxnb29kIHNwZWxsaW5mbyBzcGVsbHJlcGFsbCBzcGVsbHVuZG8gc3BlbGx3cm9uZyBzcGxpdCBzcHJldmlvdXMgc3Jld2luZCBzdG9wIHN0YWcgc3RhcnRncmVwbGFjZSBzdGFydHJlcGxhY2Ugc3RhcnRpbnNlcnQgc3RvcGluc2VydCBzdGp1bXAgc3RzZWxlY3Qgc3VuaGlkZSBzdW5tYXAgc3VubWVudSBzdXNwZW5kIHN2aWV3IHN3YXBuYW1lIHN5bnRheCBzeW50aW1lIHN5bmNiaW5kIHROZXh0IHRhYk5leHQgdGFiY2xvc2UgdGFiZWRpdCB0YWJmaW5kIHRhYmZpcnN0IHRhYmxhc3QgdGFibW92ZSB0YWJuZXh0IHRhYm9ubHkgdGFicHJldmlvdXMgdGFicmV3aW5kIHRhZyB0Y2wgdGNsZG8gdGNsZmlsZSB0ZWFyb2ZmIHRmaXJzdCB0aHJvdyB0anVtcCB0bGFzdCB0bWVudSB0bmV4dCB0b3BsZWZ0IHRwcmV2aW91cyB0cmV3aW5kIHRzZWxlY3QgdHVubWVudSB1bmRvIHVuZG9qb2luIHVuZG9saXN0IHVuYWJicmV2aWF0ZSB1bmhpZGUgdW5sZXQgdW5sb2NrdmFyIHVubWFwIHVubWVudSB1bnNpbGVudCB1cGRhdGUgdmdsb2JhbCB2ZXJzaW9uIHZlcmJvc2UgdmVydGljYWwgdmltZ3JlcCB2aW1ncmVwYWRkIHZpc3VhbCB2aXVzYWdlIHZpZXcgdm1hcCB2bWFwY2xlYXIgdm1lbnUgdm5ldyB2bm9yZW1hcCB2bm9yZW1lbnUgdnNwbGl0IHZ1bm1hcCB2dW5tZW51IHdyaXRlIHdOZXh0IHdhbGwgd2hpbGUgd2luc2l6ZSB3aW5jbWQgd2lucG9zIHduZXh0IHdwcmV2aW91cyB3cWFsbCB3c3ZlcmIgd3VuZG8gd3ZpbWluZm8geGl0IHhhbGwgeG1hcGNsZWFyIHhtYXAgeG1lbnUgeG5vcmVtYXAgeG5vcmVtZW51IHh1bm1hcCB4dW5tZW51IHlhbmsiLGJ1aWx0X2luOiJzeW5JRHRyYW5zIGF0YW4yIHJhbmdlIG1hdGNoYXJnIGRpZF9maWxldHlwZSBhc2luIGZlZWRrZXlzIHhvciBhcmd2IGNvbXBsZXRlX2NoZWNrIGFkZCBnZXR3aW5wb3N4IGdldHFmbGlzdCBnZXR3aW5wb3N5IHNjcmVlbmNvbCBjbGVhcm1hdGNoZXMgZW1wdHkgZXh0ZW5kIGdldGNtZHBvcyBtemV2YWwgZ2FyYmFnZWNvbGxlY3Qgc2V0cmVnIGNlaWwgc3FydCBkaWZmX2hsSUQgaW5wdXRzZWNyZXQgZ2V0IGdldGZwZXJtIGdldHBpZCBmaWxld3JpdGFibGUgc2hpZnR3aWR0aCBtYXggc2luaCBpc2RpcmVjdG9yeSBzeW5JRCBzeXN0ZW0gaW5wdXRyZXN0b3JlIHdpbmxpbmUgYXRhbiB2aXN1YWxtb2RlIGlucHV0bGlzdCB0YWJwYWdld2lubnIgcm91bmQgZ2V0cmVndHlwZSBtYXBjaGVjayBoYXNtYXB0byBoaXN0ZGVsIGFyZ2lkeCBmaW5kZmlsZSBzaGEyNTYgZXhpc3RzIHRvdXBwZXIgZ2V0Y21kbGluZSB0YWdsaXN0IHN0cmluZyBnZXRtYXRjaGVzIGJ1Zm5yIHN0cmZ0aW1lIHdpbndpZHRoIGJ1ZmV4aXN0cyBzdHJ0cmFucyB0YWJwYWdlYnVmbGlzdCBzZXRjbWRwb3MgcmVtb3RlX3JlYWQgcHJpbnRmIHNldGxvY2xpc3QgZ2V0cG9zIGdldGxpbmUgYnVmd2lubnIgZmxvYXQybnIgbGVuIGdldGNtZHR5cGUgZGlmZl9maWxsZXIgbHVhZXZhbCByZXNvbHZlIGxpYmNhbGxuciBmb2xkY2xvc2VkZW5kIHJldmVyc2UgZmlsdGVyIGhhc19rZXkgYnVmbmFtZSBzdHIyZmxvYXQgc3RybGVuIHNldGxpbmUgZ2V0Y2hhcm1vZCBzZXRidWZ2YXIgaW5kZXggc2VhcmNocG9zIHNoZWxsZXNjYXBlIHVuZG9maWxlIGZvbGRjbG9zZWQgc2V0cWZsaXN0IGJ1Zmxpc3RlZCBzdHJjaGFycyBzdHIybnIgdmlydGNvbCBmbG9vciByZW1vdmUgdW5kb3RyZWUgcmVtb3RlX2V4cHIgd2luaGVpZ2h0IGdldHRhYndpbnZhciByZWx0aW1lIGN1cnNvciB0YWJwYWdlbnIgZmluZGRpciBsb2NhbHRpbWUgYWNvcyBnZXRsb2NsaXN0IHNlYXJjaCB0YW5oIG1hdGNoZW5kIHJlbmFtZSBnZXR0YWJ2YXIgc3RyZGlzcGxheXdpZHRoIHR5cGUgYWJzIHB5M2V2YWwgc2V0d2ludmFyIHRvbG93ZXIgd2lsZG1lbnVtb2RlIGxvZzEwIHNwZWxsc3VnZ2VzdCBidWZsb2FkZWQgc3luY29uY2VhbGVkIG5leHRub25ibGFuayBzZXJ2ZXIyY2xpZW50IGNvbXBsZXRlIHNldHRhYndpbnZhciBleGVjdXRhYmxlIGlucHV0IHdpbmNvbCBzZXRtYXRjaGVzIGdldGZ0eXBlIGhsSUQgaW5wdXRzYXZlIHNlYXJjaHBhaXIgb3Igc2NyZWVucm93IGxpbmUgc2V0dGFidmFyIGhpc3RhZGQgZGVlcGNvcHkgc3RycGFydCByZW1vdGVfcGVlayBhbmQgZXZhbCBnZXRmdGltZSBzdWJtYXRjaCBzY3JlZW5jaGFyIHdpbnNhdmV2aWV3IG1hdGNoYWRkIG1rZGlyIHNjcmVlbmF0dHIgZ2V0Zm9udG5hbWUgbGliY2FsbCByZWx0aW1lc3RyIGdldGZzaXplIHdpbm5yIGludmVydCBwb3cgZ2V0YnVmbGluZSBieXRlMmxpbmUgc291bmRmb2xkIHJlcGVhdCBmbmFtZWVzY2FwZSB0YWdmaWxlcyBzaW4gc3Ryd2lkdGggc3BlbGxiYWR3b3JkIHRydW5jIG1hcGFyZyBsb2cgbGlzcGluZGVudCBob3N0bmFtZSBzZXRwb3MgZ2xvYnBhdGggcmVtb3RlX2ZvcmVncm91bmQgZ2V0Y2hhciBzeW5JRGF0dHIgZm5hbWVtb2RpZnkgY3Njb3BlX2Nvbm5lY3Rpb24gc3RyaWR4IHdpbmJ1Zm5yIGluZGVudCBtaW4gY29tcGxldGVfYWRkIG5yMmNoYXIgc2VhcmNocGFpcnBvcyBpbnB1dGRpYWxvZyB2YWx1ZXMgbWF0Y2hsaXN0IGl0ZW1zIGhsZXhpc3RzIHN0cnJpZHggYnJvd3NlZGlyIGV4cGFuZCBmbW9kIHBhdGhzaG9ydGVuIGxpbmUyYnl0ZSBhcmdjIGNvdW50IGdldHdpbnZhciBnbG9iIGZvbGR0ZXh0cmVzdWx0IGdldHJlZyBmb3JlZ3JvdW5kIGNvc2ggbWF0Y2hkZWxldGUgaGFzIGNoYXIybnIgc2ltcGxpZnkgaGlzdGdldCBzZWFyY2hkZWNsIGljb252IHdpbnJlc3RjbWQgcHVtdmlzaWJsZSB3cml0ZWZpbGUgZm9sZGxldmVsIGhhc2xvY2FsZGlyIGtleXMgY29zIG1hdGNoc3RyIGZvbGR0ZXh0IGhpc3RuciB0YW4gdGVtcG5hbWUgZ2V0Y3dkIGJ5dGVpZHggZ2V0YnVmdmFyIGlzbG9ja2VkIGVzY2FwZSBldmVudGhhbmRsZXIgcmVtb3RlX3NlbmQgc2VydmVybGlzdCB3aW5yZXN0dmlldyBzeW5zdGFjayBweWV2YWwgcHJldm5vbmJsYW5rIHJlYWRmaWxlIGNpbmRlbnQgZmlsZXJlYWRhYmxlIGNoYW5nZW5yIGV4cCJ9LGlsbGVnYWw6LzsvLGNvbnRhaW5zOltlLk5VTUJFUl9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsaWxsZWdhbDoiXFxuIn0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovIihcXCJ8XG5cXHxbXiJcbl0pKiIvfSxlLkNPTU1FTlQoJyInLCIkIikse2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9bYnd0Z2xzYXZdOltcd1xkX10qL30se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmN0aW9uIGZ1bmN0aW9uISIsZW5kOiIkIixyZWxldmFuY2U6MCxjb250YWluczpbZS5USVRMRV9NT0RFLHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkifV19LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46LzxbXHctXSs+L31dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94ODZhc20uanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGxleGVtZXM6IlsuJV0/IitlLklERU5UX1JFLGtleXdvcmRzOntrZXl3b3JkOiJsb2NrIHJlcCByZXBlIHJlcHogcmVwbmUgcmVwbnogeGFxdWlyZSB4cmVsZWFzZSBibmQgbm9ibmQgYWFhIGFhZCBhYW0gYWFzIGFkYyBhZGQgYW5kIGFycGwgYmIwX3Jlc2V0IGJiMV9yZXNldCBib3VuZCBic2YgYnNyIGJzd2FwIGJ0IGJ0YyBidHIgYnRzIGNhbGwgY2J3IGNkcSBjZHFlIGNsYyBjbGQgY2xpIGNsdHMgY21jIGNtcCBjbXBzYiBjbXBzZCBjbXBzcSBjbXBzdyBjbXB4Y2hnIGNtcHhjaGc0ODYgY21weGNoZzhiIGNtcHhjaGcxNmIgY3B1aWQgY3B1X3JlYWQgY3B1X3dyaXRlIGNxbyBjd2QgY3dkZSBkYWEgZGFzIGRlYyBkaXYgZG1pbnQgZW1tcyBlbnRlciBlcXUgZjJ4bTEgZmFicyBmYWRkIGZhZGRwIGZibGQgZmJzdHAgZmNocyBmY2xleCBmY21vdmIgZmNtb3ZiZSBmY21vdmUgZmNtb3ZuYiBmY21vdm5iZSBmY21vdm5lIGZjbW92bnUgZmNtb3Z1IGZjb20gZmNvbWkgZmNvbWlwIGZjb21wIGZjb21wcCBmY29zIGZkZWNzdHAgZmRpc2kgZmRpdiBmZGl2cCBmZGl2ciBmZGl2cnAgZmVtbXMgZmVuaSBmZnJlZSBmZnJlZXAgZmlhZGQgZmljb20gZmljb21wIGZpZGl2IGZpZGl2ciBmaWxkIGZpbXVsIGZpbmNzdHAgZmluaXQgZmlzdCBmaXN0cCBmaXN0dHAgZmlzdWIgZmlzdWJyIGZsZCBmbGQxIGZsZGN3IGZsZGVudiBmbGRsMmUgZmxkbDJ0IGZsZGxnMiBmbGRsbjIgZmxkcGkgZmxkeiBmbXVsIGZtdWxwIGZuY2xleCBmbmRpc2kgZm5lbmkgZm5pbml0IGZub3AgZm5zYXZlIGZuc3RjdyBmbnN0ZW52IGZuc3RzdyBmcGF0YW4gZnByZW0gZnByZW0xIGZwdGFuIGZybmRpbnQgZnJzdG9yIGZzYXZlIGZzY2FsZSBmc2V0cG0gZnNpbiBmc2luY29zIGZzcXJ0IGZzdCBmc3RjdyBmc3RlbnYgZnN0cCBmc3RzdyBmc3ViIGZzdWJwIGZzdWJyIGZzdWJycCBmdHN0IGZ1Y29tIGZ1Y29taSBmdWNvbWlwIGZ1Y29tcCBmdWNvbXBwIGZ4YW0gZnhjaCBmeHRyYWN0IGZ5bDJ4IGZ5bDJ4cDEgaGx0IGlidHMgaWNlYnAgaWRpdiBpbXVsIGluIGluYyBpbmNiaW4gaW5zYiBpbnNkIGluc3cgaW50IGludDAxIGludDEgaW50MDMgaW50MyBpbnRvIGludmQgaW52cGNpZCBpbnZscGcgaW52bHBnYSBpcmV0IGlyZXRkIGlyZXRxIGlyZXR3IGpjeHogamVjeHoganJjeHogam1wIGptcGUgbGFoZiBsYXIgbGRzIGxlYSBsZWF2ZSBsZXMgbGZlbmNlIGxmcyBsZ2R0IGxncyBsaWR0IGxsZHQgbG1zdyBsb2FkYWxsIGxvYWRhbGwyODYgbG9kc2IgbG9kc2QgbG9kc3EgbG9kc3cgbG9vcCBsb29wZSBsb29wbmUgbG9vcG56IGxvb3B6IGxzbCBsc3MgbHRyIG1mZW5jZSBtb25pdG9yIG1vdiBtb3ZkIG1vdnEgbW92c2IgbW92c2QgbW92c3EgbW92c3cgbW92c3ggbW92c3hkIG1vdnp4IG11bCBtd2FpdCBuZWcgbm9wIG5vdCBvciBvdXQgb3V0c2Igb3V0c2Qgb3V0c3cgcGFja3NzZHcgcGFja3Nzd2IgcGFja3Vzd2IgcGFkZGIgcGFkZGQgcGFkZHNiIHBhZGRzaXcgcGFkZHN3IHBhZGR1c2IgcGFkZHVzdyBwYWRkdyBwYW5kIHBhbmRuIHBhdXNlIHBhdmViIHBhdmd1c2IgcGNtcGVxYiBwY21wZXFkIHBjbXBlcXcgcGNtcGd0YiBwY21wZ3RkIHBjbXBndHcgcGRpc3RpYiBwZjJpZCBwZmFjYyBwZmFkZCBwZmNtcGVxIHBmY21wZ2UgcGZjbXBndCBwZm1heCBwZm1pbiBwZm11bCBwZnJjcCBwZnJjcGl0MSBwZnJjcGl0MiBwZnJzcWl0MSBwZnJzcXJ0IHBmc3ViIHBmc3ViciBwaTJmZCBwbWFjaHJpdyBwbWFkZHdkIHBtYWd3IHBtdWxocml3IHBtdWxocndhIHBtdWxocndjIHBtdWxodyBwbXVsbHcgcG12Z2V6YiBwbXZsemIgcG12bnpiIHBtdnpiIHBvcCBwb3BhIHBvcGFkIHBvcGF3IHBvcGYgcG9wZmQgcG9wZnEgcG9wZncgcG9yIHByZWZldGNoIHByZWZldGNodyBwc2xsZCBwc2xscSBwc2xsdyBwc3JhZCBwc3JhdyBwc3JsZCBwc3JscSBwc3JsdyBwc3ViYiBwc3ViZCBwc3Vic2IgcHN1YnNpdyBwc3Vic3cgcHN1YnVzYiBwc3VidXN3IHBzdWJ3IHB1bnBja2hidyBwdW5wY2toZHEgcHVucGNraHdkIHB1bnBja2xidyBwdW5wY2tsZHEgcHVucGNrbHdkIHB1c2ggcHVzaGEgcHVzaGFkIHB1c2hhdyBwdXNoZiBwdXNoZmQgcHVzaGZxIHB1c2hmdyBweG9yIHJjbCByY3IgcmRzaHIgcmRtc3IgcmRwbWMgcmR0c2MgcmR0c2NwIHJldCByZXRmIHJldG4gcm9sIHJvciByZG0gcnNkYyByc2xkdCByc20gcnN0cyBzYWhmIHNhbCBzYWxjIHNhciBzYmIgc2Nhc2Igc2Nhc2Qgc2Nhc3Egc2Nhc3cgc2ZlbmNlIHNnZHQgc2hsIHNobGQgc2hyIHNocmQgc2lkdCBzbGR0IHNraW5pdCBzbWkgc21pbnQgc21pbnRvbGQgc21zdyBzdGMgc3RkIHN0aSBzdG9zYiBzdG9zZCBzdG9zcSBzdG9zdyBzdHIgc3ViIHN2ZGMgc3ZsZHQgc3Z0cyBzd2FwZ3Mgc3lzY2FsbCBzeXNlbnRlciBzeXNleGl0IHN5c3JldCB0ZXN0IHVkMCB1ZDEgdWQyYiB1ZDIgdWQyYSB1bW92IHZlcnIgdmVydyBmd2FpdCB3YmludmQgd3JzaHIgd3Jtc3IgeGFkZCB4YnRzIHhjaGcgeGxhdGIgeGxhdCB4b3IgY21vdmUgY21vdnogY21vdm5lIGNtb3ZueiBjbW92YSBjbW92bmJlIGNtb3ZhZSBjbW92bmIgY21vdmIgY21vdm5hZSBjbW92YmUgY21vdm5hIGNtb3ZnIGNtb3ZubGUgY21vdmdlIGNtb3ZubCBjbW92bCBjbW92bmdlIGNtb3ZsZSBjbW92bmcgY21vdmMgY21vdm5jIGNtb3ZvIGNtb3ZubyBjbW92cyBjbW92bnMgY21vdnAgY21vdnBlIGNtb3ZucCBjbW92cG8gamUganogam5lIGpueiBqYSBqbmJlIGphZSBqbmIgamIgam5hZSBqYmUgam5hIGpnIGpubGUgamdlIGpubCBqbCBqbmdlIGpsZSBqbmcgamMgam5jIGpvIGpubyBqcyBqbnMganBvIGpucCBqcGUganAgc2V0ZSBzZXR6IHNldG5lIHNldG56IHNldGEgc2V0bmJlIHNldGFlIHNldG5iIHNldG5jIHNldGIgc2V0bmFlIHNldGNzZXQgc2V0YmUgc2V0bmEgc2V0ZyBzZXRubGUgc2V0Z2Ugc2V0bmwgc2V0bCBzZXRuZ2Ugc2V0bGUgc2V0bmcgc2V0cyBzZXRucyBzZXRvIHNldG5vIHNldHBlIHNldHAgc2V0cG8gc2V0bnAgYWRkcHMgYWRkc3MgYW5kbnBzIGFuZHBzIGNtcGVxcHMgY21wZXFzcyBjbXBsZXBzIGNtcGxlc3MgY21wbHRwcyBjbXBsdHNzIGNtcG5lcXBzIGNtcG5lcXNzIGNtcG5sZXBzIGNtcG5sZXNzIGNtcG5sdHBzIGNtcG5sdHNzIGNtcG9yZHBzIGNtcG9yZHNzIGNtcHVub3JkcHMgY21wdW5vcmRzcyBjbXBwcyBjbXBzcyBjb21pc3MgY3Z0cGkycHMgY3Z0cHMycGkgY3Z0c2kyc3MgY3Z0c3Myc2kgY3Z0dHBzMnBpIGN2dHRzczJzaSBkaXZwcyBkaXZzcyBsZG14Y3NyIG1heHBzIG1heHNzIG1pbnBzIG1pbnNzIG1vdmFwcyBtb3ZocHMgbW92bGhwcyBtb3ZscHMgbW92aGxwcyBtb3Ztc2twcyBtb3ZudHBzIG1vdnNzIG1vdnVwcyBtdWxwcyBtdWxzcyBvcnBzIHJjcHBzIHJjcHNzIHJzcXJ0cHMgcnNxcnRzcyBzaHVmcHMgc3FydHBzIHNxcnRzcyBzdG14Y3NyIHN1YnBzIHN1YnNzIHVjb21pc3MgdW5wY2tocHMgdW5wY2tscHMgeG9ycHMgZnhyc3RvciBmeHJzdG9yNjQgZnhzYXZlIGZ4c2F2ZTY0IHhnZXRidiB4c2V0YnYgeHNhdmUgeHNhdmU2NCB4c2F2ZW9wdCB4c2F2ZW9wdDY0IHhyc3RvciB4cnN0b3I2NCBwcmVmZXRjaG50YSBwcmVmZXRjaHQwIHByZWZldGNodDEgcHJlZmV0Y2h0MiBtYXNrbW92cSBtb3ZudHEgcGF2Z2IgcGF2Z3cgcGV4dHJ3IHBpbnNydyBwbWF4c3cgcG1heHViIHBtaW5zdyBwbWludWIgcG1vdm1za2IgcG11bGh1dyBwc2FkYncgcHNodWZ3IHBmMml3IHBmbmFjYyBwZnBuYWNjIHBpMmZ3IHBzd2FwZCBtYXNrbW92ZHF1IGNsZmx1c2ggbW92bnRkcSBtb3ZudGkgbW92bnRwZCBtb3ZkcWEgbW92ZHF1IG1vdmRxMnEgbW92cTJkcSBwYWRkcSBwbXVsdWRxIHBzaHVmZCBwc2h1Zmh3IHBzaHVmbHcgcHNsbGRxIHBzcmxkcSBwc3VicSBwdW5wY2tocWRxIHB1bnBja2xxZHEgYWRkcGQgYWRkc2QgYW5kbnBkIGFuZHBkIGNtcGVxcGQgY21wZXFzZCBjbXBsZXBkIGNtcGxlc2QgY21wbHRwZCBjbXBsdHNkIGNtcG5lcXBkIGNtcG5lcXNkIGNtcG5sZXBkIGNtcG5sZXNkIGNtcG5sdHBkIGNtcG5sdHNkIGNtcG9yZHBkIGNtcG9yZHNkIGNtcHVub3JkcGQgY21wdW5vcmRzZCBjbXBwZCBjb21pc2QgY3Z0ZHEycGQgY3Z0ZHEycHMgY3Z0cGQyZHEgY3Z0cGQycGkgY3Z0cGQycHMgY3Z0cGkycGQgY3Z0cHMyZHEgY3Z0cHMycGQgY3Z0c2Qyc2kgY3Z0c2Qyc3MgY3Z0c2kyc2QgY3Z0c3Myc2QgY3Z0dHBkMnBpIGN2dHRwZDJkcSBjdnR0cHMyZHEgY3Z0dHNkMnNpIGRpdnBkIGRpdnNkIG1heHBkIG1heHNkIG1pbnBkIG1pbnNkIG1vdmFwZCBtb3ZocGQgbW92bHBkIG1vdm1za3BkIG1vdnVwZCBtdWxwZCBtdWxzZCBvcnBkIHNodWZwZCBzcXJ0cGQgc3FydHNkIHN1YnBkIHN1YnNkIHVjb21pc2QgdW5wY2tocGQgdW5wY2tscGQgeG9ycGQgYWRkc3VicGQgYWRkc3VicHMgaGFkZHBkIGhhZGRwcyBoc3VicGQgaHN1YnBzIGxkZHF1IG1vdmRkdXAgbW92c2hkdXAgbW92c2xkdXAgY2xnaSBzdGdpIHZtY2FsbCB2bWNsZWFyIHZtZnVuYyB2bWxhdW5jaCB2bWxvYWQgdm1tY2FsbCB2bXB0cmxkIHZtcHRyc3Qgdm1yZWFkIHZtcmVzdW1lIHZtcnVuIHZtc2F2ZSB2bXdyaXRlIHZteG9mZiB2bXhvbiBpbnZlcHQgaW52dnBpZCBwYWJzYiBwYWJzdyBwYWJzZCBwYWxpZ25yIHBoYWRkdyBwaGFkZGQgcGhhZGRzdyBwaHN1YncgcGhzdWJkIHBoc3Vic3cgcG1hZGR1YnN3IHBtdWxocnN3IHBzaHVmYiBwc2lnbmIgcHNpZ253IHBzaWduZCBleHRycSBpbnNlcnRxIG1vdm50c2QgbW92bnRzcyBsemNudCBibGVuZHBkIGJsZW5kcHMgYmxlbmR2cGQgYmxlbmR2cHMgZHBwZCBkcHBzIGV4dHJhY3RwcyBpbnNlcnRwcyBtb3ZudGRxYSBtcHNhZGJ3IHBhY2t1c2R3IHBibGVuZHZiIHBibGVuZHcgcGNtcGVxcSBwZXh0cmIgcGV4dHJkIHBleHRycSBwaG1pbnBvc3V3IHBpbnNyYiBwaW5zcmQgcGluc3JxIHBtYXhzYiBwbWF4c2QgcG1heHVkIHBtYXh1dyBwbWluc2IgcG1pbnNkIHBtaW51ZCBwbWludXcgcG1vdnN4YncgcG1vdnN4YmQgcG1vdnN4YnEgcG1vdnN4d2QgcG1vdnN4d3EgcG1vdnN4ZHEgcG1vdnp4YncgcG1vdnp4YmQgcG1vdnp4YnEgcG1vdnp4d2QgcG1vdnp4d3EgcG1vdnp4ZHEgcG11bGRxIHBtdWxsZCBwdGVzdCByb3VuZHBkIHJvdW5kcHMgcm91bmRzZCByb3VuZHNzIGNyYzMyIHBjbXBlc3RyaSBwY21wZXN0cm0gcGNtcGlzdHJpIHBjbXBpc3RybSBwY21wZ3RxIHBvcGNudCBnZXRzZWMgcGZyY3B2IHBmcnNxcnR2IG1vdmJlIGFlc2VuYyBhZXNlbmNsYXN0IGFlc2RlYyBhZXNkZWNsYXN0IGFlc2ltYyBhZXNrZXlnZW5hc3Npc3QgdmFlc2VuYyB2YWVzZW5jbGFzdCB2YWVzZGVjIHZhZXNkZWNsYXN0IHZhZXNpbWMgdmFlc2tleWdlbmFzc2lzdCB2YWRkcGQgdmFkZHBzIHZhZGRzZCB2YWRkc3MgdmFkZHN1YnBkIHZhZGRzdWJwcyB2YW5kcGQgdmFuZHBzIHZhbmRucGQgdmFuZG5wcyB2YmxlbmRwZCB2YmxlbmRwcyB2YmxlbmR2cGQgdmJsZW5kdnBzIHZicm9hZGNhc3RzcyB2YnJvYWRjYXN0c2QgdmJyb2FkY2FzdGYxMjggdmNtcGVxX29zcGQgdmNtcGVxcGQgdmNtcGx0X29zcGQgdmNtcGx0cGQgdmNtcGxlX29zcGQgdmNtcGxlcGQgdmNtcHVub3JkX3FwZCB2Y21wdW5vcmRwZCB2Y21wbmVxX3VxcGQgdmNtcG5lcXBkIHZjbXBubHRfdXNwZCB2Y21wbmx0cGQgdmNtcG5sZV91c3BkIHZjbXBubGVwZCB2Y21wb3JkX3FwZCB2Y21wb3JkcGQgdmNtcGVxX3VxcGQgdmNtcG5nZV91c3BkIHZjbXBuZ2VwZCB2Y21wbmd0X3VzcGQgdmNtcG5ndHBkIHZjbXBmYWxzZV9vcXBkIHZjbXBmYWxzZXBkIHZjbXBuZXFfb3FwZCB2Y21wZ2Vfb3NwZCB2Y21wZ2VwZCB2Y21wZ3Rfb3NwZCB2Y21wZ3RwZCB2Y21wdHJ1ZV91cXBkIHZjbXB0cnVlcGQgdmNtcGx0X29xcGQgdmNtcGxlX29xcGQgdmNtcHVub3JkX3NwZCB2Y21wbmVxX3VzcGQgdmNtcG5sdF91cXBkIHZjbXBubGVfdXFwZCB2Y21wb3JkX3NwZCB2Y21wZXFfdXNwZCB2Y21wbmdlX3VxcGQgdmNtcG5ndF91cXBkIHZjbXBmYWxzZV9vc3BkIHZjbXBuZXFfb3NwZCB2Y21wZ2Vfb3FwZCB2Y21wZ3Rfb3FwZCB2Y21wdHJ1ZV91c3BkIHZjbXBwZCB2Y21wZXFfb3NwcyB2Y21wZXFwcyB2Y21wbHRfb3NwcyB2Y21wbHRwcyB2Y21wbGVfb3NwcyB2Y21wbGVwcyB2Y21wdW5vcmRfcXBzIHZjbXB1bm9yZHBzIHZjbXBuZXFfdXFwcyB2Y21wbmVxcHMgdmNtcG5sdF91c3BzIHZjbXBubHRwcyB2Y21wbmxlX3VzcHMgdmNtcG5sZXBzIHZjbXBvcmRfcXBzIHZjbXBvcmRwcyB2Y21wZXFfdXFwcyB2Y21wbmdlX3VzcHMgdmNtcG5nZXBzIHZjbXBuZ3RfdXNwcyB2Y21wbmd0cHMgdmNtcGZhbHNlX29xcHMgdmNtcGZhbHNlcHMgdmNtcG5lcV9vcXBzIHZjbXBnZV9vc3BzIHZjbXBnZXBzIHZjbXBndF9vc3BzIHZjbXBndHBzIHZjbXB0cnVlX3VxcHMgdmNtcHRydWVwcyB2Y21wbHRfb3FwcyB2Y21wbGVfb3FwcyB2Y21wdW5vcmRfc3BzIHZjbXBuZXFfdXNwcyB2Y21wbmx0X3VxcHMgdmNtcG5sZV91cXBzIHZjbXBvcmRfc3BzIHZjbXBlcV91c3BzIHZjbXBuZ2VfdXFwcyB2Y21wbmd0X3VxcHMgdmNtcGZhbHNlX29zcHMgdmNtcG5lcV9vc3BzIHZjbXBnZV9vcXBzIHZjbXBndF9vcXBzIHZjbXB0cnVlX3VzcHMgdmNtcHBzIHZjbXBlcV9vc3NkIHZjbXBlcXNkIHZjbXBsdF9vc3NkIHZjbXBsdHNkIHZjbXBsZV9vc3NkIHZjbXBsZXNkIHZjbXB1bm9yZF9xc2QgdmNtcHVub3Jkc2QgdmNtcG5lcV91cXNkIHZjbXBuZXFzZCB2Y21wbmx0X3Vzc2QgdmNtcG5sdHNkIHZjbXBubGVfdXNzZCB2Y21wbmxlc2QgdmNtcG9yZF9xc2QgdmNtcG9yZHNkIHZjbXBlcV91cXNkIHZjbXBuZ2VfdXNzZCB2Y21wbmdlc2QgdmNtcG5ndF91c3NkIHZjbXBuZ3RzZCB2Y21wZmFsc2Vfb3FzZCB2Y21wZmFsc2VzZCB2Y21wbmVxX29xc2QgdmNtcGdlX29zc2QgdmNtcGdlc2QgdmNtcGd0X29zc2QgdmNtcGd0c2QgdmNtcHRydWVfdXFzZCB2Y21wdHJ1ZXNkIHZjbXBsdF9vcXNkIHZjbXBsZV9vcXNkIHZjbXB1bm9yZF9zc2QgdmNtcG5lcV91c3NkIHZjbXBubHRfdXFzZCB2Y21wbmxlX3Vxc2QgdmNtcG9yZF9zc2QgdmNtcGVxX3Vzc2QgdmNtcG5nZV91cXNkIHZjbXBuZ3RfdXFzZCB2Y21wZmFsc2Vfb3NzZCB2Y21wbmVxX29zc2QgdmNtcGdlX29xc2QgdmNtcGd0X29xc2QgdmNtcHRydWVfdXNzZCB2Y21wc2QgdmNtcGVxX29zc3MgdmNtcGVxc3MgdmNtcGx0X29zc3MgdmNtcGx0c3MgdmNtcGxlX29zc3MgdmNtcGxlc3MgdmNtcHVub3JkX3FzcyB2Y21wdW5vcmRzcyB2Y21wbmVxX3Vxc3MgdmNtcG5lcXNzIHZjbXBubHRfdXNzcyB2Y21wbmx0c3MgdmNtcG5sZV91c3NzIHZjbXBubGVzcyB2Y21wb3JkX3FzcyB2Y21wb3Jkc3MgdmNtcGVxX3Vxc3MgdmNtcG5nZV91c3NzIHZjbXBuZ2VzcyB2Y21wbmd0X3Vzc3MgdmNtcG5ndHNzIHZjbXBmYWxzZV9vcXNzIHZjbXBmYWxzZXNzIHZjbXBuZXFfb3FzcyB2Y21wZ2Vfb3NzcyB2Y21wZ2VzcyB2Y21wZ3Rfb3NzcyB2Y21wZ3RzcyB2Y21wdHJ1ZV91cXNzIHZjbXB0cnVlc3MgdmNtcGx0X29xc3MgdmNtcGxlX29xc3MgdmNtcHVub3JkX3NzcyB2Y21wbmVxX3Vzc3MgdmNtcG5sdF91cXNzIHZjbXBubGVfdXFzcyB2Y21wb3JkX3NzcyB2Y21wZXFfdXNzcyB2Y21wbmdlX3Vxc3MgdmNtcG5ndF91cXNzIHZjbXBmYWxzZV9vc3NzIHZjbXBuZXFfb3NzcyB2Y21wZ2Vfb3FzcyB2Y21wZ3Rfb3FzcyB2Y21wdHJ1ZV91c3NzIHZjbXBzcyB2Y29taXNkIHZjb21pc3MgdmN2dGRxMnBkIHZjdnRkcTJwcyB2Y3Z0cGQyZHEgdmN2dHBkMnBzIHZjdnRwczJkcSB2Y3Z0cHMycGQgdmN2dHNkMnNpIHZjdnRzZDJzcyB2Y3Z0c2kyc2QgdmN2dHNpMnNzIHZjdnRzczJzZCB2Y3Z0c3Myc2kgdmN2dHRwZDJkcSB2Y3Z0dHBzMmRxIHZjdnR0c2Qyc2kgdmN2dHRzczJzaSB2ZGl2cGQgdmRpdnBzIHZkaXZzZCB2ZGl2c3MgdmRwcGQgdmRwcHMgdmV4dHJhY3RmMTI4IHZleHRyYWN0cHMgdmhhZGRwZCB2aGFkZHBzIHZoc3VicGQgdmhzdWJwcyB2aW5zZXJ0ZjEyOCB2aW5zZXJ0cHMgdmxkZHF1IHZsZHFxdSB2bGRteGNzciB2bWFza21vdmRxdSB2bWFza21vdnBzIHZtYXNrbW92cGQgdm1heHBkIHZtYXhwcyB2bWF4c2Qgdm1heHNzIHZtaW5wZCB2bWlucHMgdm1pbnNkIHZtaW5zcyB2bW92YXBkIHZtb3ZhcHMgdm1vdmQgdm1vdnEgdm1vdmRkdXAgdm1vdmRxYSB2bW92cXFhIHZtb3ZkcXUgdm1vdnFxdSB2bW92aGxwcyB2bW92aHBkIHZtb3ZocHMgdm1vdmxocHMgdm1vdmxwZCB2bW92bHBzIHZtb3Ztc2twZCB2bW92bXNrcHMgdm1vdm50ZHEgdm1vdm50cXEgdm1vdm50ZHFhIHZtb3ZudHBkIHZtb3ZudHBzIHZtb3ZzZCB2bW92c2hkdXAgdm1vdnNsZHVwIHZtb3ZzcyB2bW92dXBkIHZtb3Z1cHMgdm1wc2FkYncgdm11bHBkIHZtdWxwcyB2bXVsc2Qgdm11bHNzIHZvcnBkIHZvcnBzIHZwYWJzYiB2cGFic3cgdnBhYnNkIHZwYWNrc3N3YiB2cGFja3NzZHcgdnBhY2t1c3diIHZwYWNrdXNkdyB2cGFkZGIgdnBhZGR3IHZwYWRkZCB2cGFkZHEgdnBhZGRzYiB2cGFkZHN3IHZwYWRkdXNiIHZwYWRkdXN3IHZwYWxpZ25yIHZwYW5kIHZwYW5kbiB2cGF2Z2IgdnBhdmd3IHZwYmxlbmR2YiB2cGJsZW5kdyB2cGNtcGVzdHJpIHZwY21wZXN0cm0gdnBjbXBpc3RyaSB2cGNtcGlzdHJtIHZwY21wZXFiIHZwY21wZXF3IHZwY21wZXFkIHZwY21wZXFxIHZwY21wZ3RiIHZwY21wZ3R3IHZwY21wZ3RkIHZwY21wZ3RxIHZwZXJtaWxwZCB2cGVybWlscHMgdnBlcm0yZjEyOCB2cGV4dHJiIHZwZXh0cncgdnBleHRyZCB2cGV4dHJxIHZwaGFkZHcgdnBoYWRkZCB2cGhhZGRzdyB2cGhtaW5wb3N1dyB2cGhzdWJ3IHZwaHN1YmQgdnBoc3Vic3cgdnBpbnNyYiB2cGluc3J3IHZwaW5zcmQgdnBpbnNycSB2cG1hZGR3ZCB2cG1hZGR1YnN3IHZwbWF4c2IgdnBtYXhzdyB2cG1heHNkIHZwbWF4dWIgdnBtYXh1dyB2cG1heHVkIHZwbWluc2IgdnBtaW5zdyB2cG1pbnNkIHZwbWludWIgdnBtaW51dyB2cG1pbnVkIHZwbW92bXNrYiB2cG1vdnN4YncgdnBtb3ZzeGJkIHZwbW92c3hicSB2cG1vdnN4d2QgdnBtb3ZzeHdxIHZwbW92c3hkcSB2cG1vdnp4YncgdnBtb3Z6eGJkIHZwbW92enhicSB2cG1vdnp4d2QgdnBtb3Z6eHdxIHZwbW92enhkcSB2cG11bGh1dyB2cG11bGhyc3cgdnBtdWxodyB2cG11bGx3IHZwbXVsbGQgdnBtdWx1ZHEgdnBtdWxkcSB2cG9yIHZwc2FkYncgdnBzaHVmYiB2cHNodWZkIHZwc2h1Zmh3IHZwc2h1Zmx3IHZwc2lnbmIgdnBzaWdudyB2cHNpZ25kIHZwc2xsZHEgdnBzcmxkcSB2cHNsbHcgdnBzbGxkIHZwc2xscSB2cHNyYXcgdnBzcmFkIHZwc3JsdyB2cHNybGQgdnBzcmxxIHZwdGVzdCB2cHN1YmIgdnBzdWJ3IHZwc3ViZCB2cHN1YnEgdnBzdWJzYiB2cHN1YnN3IHZwc3VidXNiIHZwc3VidXN3IHZwdW5wY2toYncgdnB1bnBja2h3ZCB2cHVucGNraGRxIHZwdW5wY2tocWRxIHZwdW5wY2tsYncgdnB1bnBja2x3ZCB2cHVucGNrbGRxIHZwdW5wY2tscWRxIHZweG9yIHZyY3BwcyB2cmNwc3MgdnJzcXJ0cHMgdnJzcXJ0c3MgdnJvdW5kcGQgdnJvdW5kcHMgdnJvdW5kc2QgdnJvdW5kc3MgdnNodWZwZCB2c2h1ZnBzIHZzcXJ0cGQgdnNxcnRwcyB2c3FydHNkIHZzcXJ0c3MgdnN0bXhjc3IgdnN1YnBkIHZzdWJwcyB2c3Vic2QgdnN1YnNzIHZ0ZXN0cHMgdnRlc3RwZCB2dWNvbWlzZCB2dWNvbWlzcyB2dW5wY2tocGQgdnVucGNraHBzIHZ1bnBja2xwZCB2dW5wY2tscHMgdnhvcnBkIHZ4b3JwcyB2emVyb2FsbCB2emVyb3VwcGVyIHBjbG11bGxxbHFkcSBwY2xtdWxocWxxZHEgcGNsbXVsbHFocWRxIHBjbG11bGhxaHFkcSBwY2xtdWxxZHEgdnBjbG11bGxxbHFkcSB2cGNsbXVsaHFscWRxIHZwY2xtdWxscWhxZHEgdnBjbG11bGhxaHFkcSB2cGNsbXVscWRxIHZmbWFkZDEzMnBzIHZmbWFkZDEzMnBkIHZmbWFkZDMxMnBzIHZmbWFkZDMxMnBkIHZmbWFkZDIxM3BzIHZmbWFkZDIxM3BkIHZmbWFkZDEyM3BzIHZmbWFkZDEyM3BkIHZmbWFkZDIzMXBzIHZmbWFkZDIzMXBkIHZmbWFkZDMyMXBzIHZmbWFkZDMyMXBkIHZmbWFkZHN1YjEzMnBzIHZmbWFkZHN1YjEzMnBkIHZmbWFkZHN1YjMxMnBzIHZmbWFkZHN1YjMxMnBkIHZmbWFkZHN1YjIxM3BzIHZmbWFkZHN1YjIxM3BkIHZmbWFkZHN1YjEyM3BzIHZmbWFkZHN1YjEyM3BkIHZmbWFkZHN1YjIzMXBzIHZmbWFkZHN1YjIzMXBkIHZmbWFkZHN1YjMyMXBzIHZmbWFkZHN1YjMyMXBkIHZmbXN1YjEzMnBzIHZmbXN1YjEzMnBkIHZmbXN1YjMxMnBzIHZmbXN1YjMxMnBkIHZmbXN1YjIxM3BzIHZmbXN1YjIxM3BkIHZmbXN1YjEyM3BzIHZmbXN1YjEyM3BkIHZmbXN1YjIzMXBzIHZmbXN1YjIzMXBkIHZmbXN1YjMyMXBzIHZmbXN1YjMyMXBkIHZmbXN1YmFkZDEzMnBzIHZmbXN1YmFkZDEzMnBkIHZmbXN1YmFkZDMxMnBzIHZmbXN1YmFkZDMxMnBkIHZmbXN1YmFkZDIxM3BzIHZmbXN1YmFkZDIxM3BkIHZmbXN1YmFkZDEyM3BzIHZmbXN1YmFkZDEyM3BkIHZmbXN1YmFkZDIzMXBzIHZmbXN1YmFkZDIzMXBkIHZmbXN1YmFkZDMyMXBzIHZmbXN1YmFkZDMyMXBkIHZmbm1hZGQxMzJwcyB2Zm5tYWRkMTMycGQgdmZubWFkZDMxMnBzIHZmbm1hZGQzMTJwZCB2Zm5tYWRkMjEzcHMgdmZubWFkZDIxM3BkIHZmbm1hZGQxMjNwcyB2Zm5tYWRkMTIzcGQgdmZubWFkZDIzMXBzIHZmbm1hZGQyMzFwZCB2Zm5tYWRkMzIxcHMgdmZubWFkZDMyMXBkIHZmbm1zdWIxMzJwcyB2Zm5tc3ViMTMycGQgdmZubXN1YjMxMnBzIHZmbm1zdWIzMTJwZCB2Zm5tc3ViMjEzcHMgdmZubXN1YjIxM3BkIHZmbm1zdWIxMjNwcyB2Zm5tc3ViMTIzcGQgdmZubXN1YjIzMXBzIHZmbm1zdWIyMzFwZCB2Zm5tc3ViMzIxcHMgdmZubXN1YjMyMXBkIHZmbWFkZDEzMnNzIHZmbWFkZDEzMnNkIHZmbWFkZDMxMnNzIHZmbWFkZDMxMnNkIHZmbWFkZDIxM3NzIHZmbWFkZDIxM3NkIHZmbWFkZDEyM3NzIHZmbWFkZDEyM3NkIHZmbWFkZDIzMXNzIHZmbWFkZDIzMXNkIHZmbWFkZDMyMXNzIHZmbWFkZDMyMXNkIHZmbXN1YjEzMnNzIHZmbXN1YjEzMnNkIHZmbXN1YjMxMnNzIHZmbXN1YjMxMnNkIHZmbXN1YjIxM3NzIHZmbXN1YjIxM3NkIHZmbXN1YjEyM3NzIHZmbXN1YjEyM3NkIHZmbXN1YjIzMXNzIHZmbXN1YjIzMXNkIHZmbXN1YjMyMXNzIHZmbXN1YjMyMXNkIHZmbm1hZGQxMzJzcyB2Zm5tYWRkMTMyc2QgdmZubWFkZDMxMnNzIHZmbm1hZGQzMTJzZCB2Zm5tYWRkMjEzc3MgdmZubWFkZDIxM3NkIHZmbm1hZGQxMjNzcyB2Zm5tYWRkMTIzc2QgdmZubWFkZDIzMXNzIHZmbm1hZGQyMzFzZCB2Zm5tYWRkMzIxc3MgdmZubWFkZDMyMXNkIHZmbm1zdWIxMzJzcyB2Zm5tc3ViMTMyc2QgdmZubXN1YjMxMnNzIHZmbm1zdWIzMTJzZCB2Zm5tc3ViMjEzc3MgdmZubXN1YjIxM3NkIHZmbm1zdWIxMjNzcyB2Zm5tc3ViMTIzc2QgdmZubXN1YjIzMXNzIHZmbm1zdWIyMzFzZCB2Zm5tc3ViMzIxc3MgdmZubXN1YjMyMXNkIHJkZnNiYXNlIHJkZ3NiYXNlIHJkcmFuZCB3cmZzYmFzZSB3cmdzYmFzZSB2Y3Z0cGgycHMgdmN2dHBzMnBoIGFkY3ggYWRveCByZHNlZWQgY2xhYyBzdGFjIHhzdG9yZSB4Y3J5cHRlY2IgeGNyeXB0Y2JjIHhjcnlwdGN0ciB4Y3J5cHRjZmIgeGNyeXB0b2ZiIG1vbnRtdWwgeHNoYTEgeHNoYTI1NiBsbHdwY2Igc2x3cGNiIGx3cHZhbCBsd3BpbnMgdmZtYWRkcGQgdmZtYWRkcHMgdmZtYWRkc2QgdmZtYWRkc3MgdmZtYWRkc3VicGQgdmZtYWRkc3VicHMgdmZtc3ViYWRkcGQgdmZtc3ViYWRkcHMgdmZtc3VicGQgdmZtc3VicHMgdmZtc3Vic2QgdmZtc3Vic3MgdmZubWFkZHBkIHZmbm1hZGRwcyB2Zm5tYWRkc2QgdmZubWFkZHNzIHZmbm1zdWJwZCB2Zm5tc3VicHMgdmZubXN1YnNkIHZmbm1zdWJzcyB2ZnJjenBkIHZmcmN6cHMgdmZyY3pzZCB2ZnJjenNzIHZwY21vdiB2cGNvbWIgdnBjb21kIHZwY29tcSB2cGNvbXViIHZwY29tdWQgdnBjb211cSB2cGNvbXV3IHZwY29tdyB2cGhhZGRiZCB2cGhhZGRicSB2cGhhZGRidyB2cGhhZGRkcSB2cGhhZGR1YmQgdnBoYWRkdWJxIHZwaGFkZHVidyB2cGhhZGR1ZHEgdnBoYWRkdXdkIHZwaGFkZHV3cSB2cGhhZGR3ZCB2cGhhZGR3cSB2cGhzdWJidyB2cGhzdWJkcSB2cGhzdWJ3ZCB2cG1hY3NkZCB2cG1hY3NkcWggdnBtYWNzZHFsIHZwbWFjc3NkZCB2cG1hY3NzZHFoIHZwbWFjc3NkcWwgdnBtYWNzc3dkIHZwbWFjc3N3dyB2cG1hY3N3ZCB2cG1hY3N3dyB2cG1hZGNzc3dkIHZwbWFkY3N3ZCB2cHBlcm0gdnByb3RiIHZwcm90ZCB2cHJvdHEgdnByb3R3IHZwc2hhYiB2cHNoYWQgdnBzaGFxIHZwc2hhdyB2cHNobGIgdnBzaGxkIHZwc2hscSB2cHNobHcgdmJyb2FkY2FzdGkxMjggdnBibGVuZGQgdnBicm9hZGNhc3RiIHZwYnJvYWRjYXN0dyB2cGJyb2FkY2FzdGQgdnBicm9hZGNhc3RxIHZwZXJtZCB2cGVybXBkIHZwZXJtcHMgdnBlcm1xIHZwZXJtMmkxMjggdmV4dHJhY3RpMTI4IHZpbnNlcnRpMTI4IHZwbWFza21vdmQgdnBtYXNrbW92cSB2cHNsbHZkIHZwc2xsdnEgdnBzcmF2ZCB2cHNybHZkIHZwc3JsdnEgdmdhdGhlcmRwZCB2Z2F0aGVycXBkIHZnYXRoZXJkcHMgdmdhdGhlcnFwcyB2cGdhdGhlcmRkIHZwZ2F0aGVycWQgdnBnYXRoZXJkcSB2cGdhdGhlcnFxIHhhYm9ydCB4YmVnaW4geGVuZCB4dGVzdCBhbmRuIGJleHRyIGJsY2kgYmxjaWMgYmxzaSBibHNpYyBibGNmaWxsIGJsc2ZpbGwgYmxjbXNrIGJsc21zayBibHNyIGJsY3MgYnpoaSBtdWx4IHBkZXAgcGV4dCByb3J4IHNhcnggc2hseCBzaHJ4IHR6Y250IHR6bXNrIHQxbXNrYyB2YWxpZ25kIHZhbGlnbnEgdmJsZW5kbXBkIHZibGVuZG1wcyB2YnJvYWRjYXN0ZjMyeDQgdmJyb2FkY2FzdGY2NHg0IHZicm9hZGNhc3RpMzJ4NCB2YnJvYWRjYXN0aTY0eDQgdmNvbXByZXNzcGQgdmNvbXByZXNzcHMgdmN2dHBkMnVkcSB2Y3Z0cHMydWRxIHZjdnRzZDJ1c2kgdmN2dHNzMnVzaSB2Y3Z0dHBkMnVkcSB2Y3Z0dHBzMnVkcSB2Y3Z0dHNkMnVzaSB2Y3Z0dHNzMnVzaSB2Y3Z0dWRxMnBkIHZjdnR1ZHEycHMgdmN2dHVzaTJzZCB2Y3Z0dXNpMnNzIHZleHBhbmRwZCB2ZXhwYW5kcHMgdmV4dHJhY3RmMzJ4NCB2ZXh0cmFjdGY2NHg0IHZleHRyYWN0aTMyeDQgdmV4dHJhY3RpNjR4NCB2Zml4dXBpbW1wZCB2Zml4dXBpbW1wcyB2Zml4dXBpbW1zZCB2Zml4dXBpbW1zcyB2Z2V0ZXhwcGQgdmdldGV4cHBzIHZnZXRleHBzZCB2Z2V0ZXhwc3MgdmdldG1hbnRwZCB2Z2V0bWFudHBzIHZnZXRtYW50c2QgdmdldG1hbnRzcyB2aW5zZXJ0ZjMyeDQgdmluc2VydGY2NHg0IHZpbnNlcnRpMzJ4NCB2aW5zZXJ0aTY0eDQgdm1vdmRxYTMyIHZtb3ZkcWE2NCB2bW92ZHF1MzIgdm1vdmRxdTY0IHZwYWJzcSB2cGFuZGQgdnBhbmRuZCB2cGFuZG5xIHZwYW5kcSB2cGJsZW5kbWQgdnBibGVuZG1xIHZwY21wbHRkIHZwY21wbGVkIHZwY21wbmVxZCB2cGNtcG5sdGQgdnBjbXBubGVkIHZwY21wZCB2cGNtcGx0cSB2cGNtcGxlcSB2cGNtcG5lcXEgdnBjbXBubHRxIHZwY21wbmxlcSB2cGNtcHEgdnBjbXBlcXVkIHZwY21wbHR1ZCB2cGNtcGxldWQgdnBjbXBuZXF1ZCB2cGNtcG5sdHVkIHZwY21wbmxldWQgdnBjbXB1ZCB2cGNtcGVxdXEgdnBjbXBsdHVxIHZwY21wbGV1cSB2cGNtcG5lcXVxIHZwY21wbmx0dXEgdnBjbXBubGV1cSB2cGNtcHVxIHZwY29tcHJlc3NkIHZwY29tcHJlc3NxIHZwZXJtaTJkIHZwZXJtaTJwZCB2cGVybWkycHMgdnBlcm1pMnEgdnBlcm10MmQgdnBlcm10MnBkIHZwZXJtdDJwcyB2cGVybXQycSB2cGV4cGFuZGQgdnBleHBhbmRxIHZwbWF4c3EgdnBtYXh1cSB2cG1pbnNxIHZwbWludXEgdnBtb3ZkYiB2cG1vdmR3IHZwbW92cWIgdnBtb3ZxZCB2cG1vdnF3IHZwbW92c2RiIHZwbW92c2R3IHZwbW92c3FiIHZwbW92c3FkIHZwbW92c3F3IHZwbW92dXNkYiB2cG1vdnVzZHcgdnBtb3Z1c3FiIHZwbW92dXNxZCB2cG1vdnVzcXcgdnBvcmQgdnBvcnEgdnByb2xkIHZwcm9scSB2cHJvbHZkIHZwcm9sdnEgdnByb3JkIHZwcm9ycSB2cHJvcnZkIHZwcm9ydnEgdnBzY2F0dGVyZGQgdnBzY2F0dGVyZHEgdnBzY2F0dGVycWQgdnBzY2F0dGVycXEgdnBzcmFxIHZwc3JhdnEgdnB0ZXJubG9nZCB2cHRlcm5sb2dxIHZwdGVzdG1kIHZwdGVzdG1xIHZwdGVzdG5tZCB2cHRlc3RubXEgdnB4b3JkIHZweG9ycSB2cmNwMTRwZCB2cmNwMTRwcyB2cmNwMTRzZCB2cmNwMTRzcyB2cm5kc2NhbGVwZCB2cm5kc2NhbGVwcyB2cm5kc2NhbGVzZCB2cm5kc2NhbGVzcyB2cnNxcnQxNHBkIHZyc3FydDE0cHMgdnJzcXJ0MTRzZCB2cnNxcnQxNHNzIHZzY2FsZWZwZCB2c2NhbGVmcHMgdnNjYWxlZnNkIHZzY2FsZWZzcyB2c2NhdHRlcmRwZCB2c2NhdHRlcmRwcyB2c2NhdHRlcnFwZCB2c2NhdHRlcnFwcyB2c2h1ZmYzMng0IHZzaHVmZjY0eDIgdnNodWZpMzJ4NCB2c2h1Zmk2NHgyIGthbmRudyBrYW5kdyBrbW92dyBrbm90dyBrb3J0ZXN0dyBrb3J3IGtzaGlmdGx3IGtzaGlmdHJ3IGt1bnBja2J3IGt4bm9ydyBreG9ydyB2cGJyb2FkY2FzdG1iMnEgdnBicm9hZGNhc3RtdzJkIHZwY29uZmxpY3RkIHZwY29uZmxpY3RxIHZwbHpjbnRkIHZwbHpjbnRxIHZleHAycGQgdmV4cDJwcyB2cmNwMjhwZCB2cmNwMjhwcyB2cmNwMjhzZCB2cmNwMjhzcyB2cnNxcnQyOHBkIHZyc3FydDI4cHMgdnJzcXJ0MjhzZCB2cnNxcnQyOHNzIHZnYXRoZXJwZjBkcGQgdmdhdGhlcnBmMGRwcyB2Z2F0aGVycGYwcXBkIHZnYXRoZXJwZjBxcHMgdmdhdGhlcnBmMWRwZCB2Z2F0aGVycGYxZHBzIHZnYXRoZXJwZjFxcGQgdmdhdGhlcnBmMXFwcyB2c2NhdHRlcnBmMGRwZCB2c2NhdHRlcnBmMGRwcyB2c2NhdHRlcnBmMHFwZCB2c2NhdHRlcnBmMHFwcyB2c2NhdHRlcnBmMWRwZCB2c2NhdHRlcnBmMWRwcyB2c2NhdHRlcnBmMXFwZCB2c2NhdHRlcnBmMXFwcyBwcmVmZXRjaHd0MSBibmRtayBibmRjbCBibmRjdSBibmRjbiBibmRtb3YgYm5kbGR4IGJuZHN0eCBzaGExcm5kczQgc2hhMW5leHRlIHNoYTFtc2cxIHNoYTFtc2cyIHNoYTI1NnJuZHMyIHNoYTI1Nm1zZzEgc2hhMjU2bXNnMiBoaW50X25vcDAgaGludF9ub3AxIGhpbnRfbm9wMiBoaW50X25vcDMgaGludF9ub3A0IGhpbnRfbm9wNSBoaW50X25vcDYgaGludF9ub3A3IGhpbnRfbm9wOCBoaW50X25vcDkgaGludF9ub3AxMCBoaW50X25vcDExIGhpbnRfbm9wMTIgaGludF9ub3AxMyBoaW50X25vcDE0IGhpbnRfbm9wMTUgaGludF9ub3AxNiBoaW50X25vcDE3IGhpbnRfbm9wMTggaGludF9ub3AxOSBoaW50X25vcDIwIGhpbnRfbm9wMjEgaGludF9ub3AyMiBoaW50X25vcDIzIGhpbnRfbm9wMjQgaGludF9ub3AyNSBoaW50X25vcDI2IGhpbnRfbm9wMjcgaGludF9ub3AyOCBoaW50X25vcDI5IGhpbnRfbm9wMzAgaGludF9ub3AzMSBoaW50X25vcDMyIGhpbnRfbm9wMzMgaGludF9ub3AzNCBoaW50X25vcDM1IGhpbnRfbm9wMzYgaGludF9ub3AzNyBoaW50X25vcDM4IGhpbnRfbm9wMzkgaGludF9ub3A0MCBoaW50X25vcDQxIGhpbnRfbm9wNDIgaGludF9ub3A0MyBoaW50X25vcDQ0IGhpbnRfbm9wNDUgaGludF9ub3A0NiBoaW50X25vcDQ3IGhpbnRfbm9wNDggaGludF9ub3A0OSBoaW50X25vcDUwIGhpbnRfbm9wNTEgaGludF9ub3A1MiBoaW50X25vcDUzIGhpbnRfbm9wNTQgaGludF9ub3A1NSBoaW50X25vcDU2IGhpbnRfbm9wNTcgaGludF9ub3A1OCBoaW50X25vcDU5IGhpbnRfbm9wNjAgaGludF9ub3A2MSBoaW50X25vcDYyIGhpbnRfbm9wNjMiLGJ1aWx0X2luOiJpcCBlaXAgcmlwIGFsIGFoIGJsIGJoIGNsIGNoIGRsIGRoIHNpbCBkaWwgYnBsIHNwbCByOGIgcjliIHIxMGIgcjExYiByMTJiIHIxM2IgcjE0YiByMTViIGF4IGJ4IGN4IGR4IHNpIGRpIGJwIHNwIHI4dyByOXcgcjEwdyByMTF3IHIxMncgcjEzdyByMTR3IHIxNXcgZWF4IGVieCBlY3ggZWR4IGVzaSBlZGkgZWJwIGVzcCBlaXAgcjhkIHI5ZCByMTBkIHIxMWQgcjEyZCByMTNkIHIxNGQgcjE1ZCByYXggcmJ4IHJjeCByZHggcnNpIHJkaSByYnAgcnNwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1IGNzIGRzIGVzIGZzIGdzIHNzIHN0IHN0MCBzdDEgc3QyIHN0MyBzdDQgc3Q1IHN0NiBzdDcgbW0wIG1tMSBtbTIgbW0zIG1tNCBtbTUgbW02IG1tNyB4bW0wICB4bW0xICB4bW0yICB4bW0zICB4bW00ICB4bW01ICB4bW02ICB4bW03ICB4bW04ICB4bW05IHhtbTEwICB4bW0xMSB4bW0xMiB4bW0xMyB4bW0xNCB4bW0xNSB4bW0xNiB4bW0xNyB4bW0xOCB4bW0xOSB4bW0yMCB4bW0yMSB4bW0yMiB4bW0yMyB4bW0yNCB4bW0yNSB4bW0yNiB4bW0yNyB4bW0yOCB4bW0yOSB4bW0zMCB4bW0zMSB5bW0wICB5bW0xICB5bW0yICB5bW0zICB5bW00ICB5bW01ICB5bW02ICB5bW03ICB5bW04ICB5bW05IHltbTEwICB5bW0xMSB5bW0xMiB5bW0xMyB5bW0xNCB5bW0xNSB5bW0xNiB5bW0xNyB5bW0xOCB5bW0xOSB5bW0yMCB5bW0yMSB5bW0yMiB5bW0yMyB5bW0yNCB5bW0yNSB5bW0yNiB5bW0yNyB5bW0yOCB5bW0yOSB5bW0zMCB5bW0zMSB6bW0wICB6bW0xICB6bW0yICB6bW0zICB6bW00ICB6bW01ICB6bW02ICB6bW03ICB6bW04ICB6bW05IHptbTEwICB6bW0xMSB6bW0xMiB6bW0xMyB6bW0xNCB6bW0xNSB6bW0xNiB6bW0xNyB6bW0xOCB6bW0xOSB6bW0yMCB6bW0yMSB6bW0yMiB6bW0yMyB6bW0yNCB6bW0yNSB6bW0yNiB6bW0yNyB6bW0yOCB6bW0yOSB6bW0zMCB6bW0zMSBrMCBrMSBrMiBrMyBrNCBrNSBrNiBrNyBibmQwIGJuZDEgYm5kMiBibmQzIGNyMCBjcjEgY3IyIGNyMyBjcjQgY3I4IGRyMCBkcjEgZHIyIGRyMyBkcjggdHIzIHRyNCB0cjUgdHI2IHRyNyByMCByMSByMiByMyByNCByNSByNiByNyByMGIgcjFiIHIyYiByM2IgcjRiIHI1YiByNmIgcjdiIHIwdyByMXcgcjJ3IHIzdyByNHcgcjV3IHI2dyByN3cgcjBkIHIxZCByMmQgcjNkIHI0ZCByNWQgcjZkIHI3ZCByMGggcjFoIHIyaCByM2ggcjBsIHIxbCByMmwgcjNsIHI0bCByNWwgcjZsIHI3bCByOGwgcjlsIHIxMGwgcjExbCByMTJsIHIxM2wgcjE0bCByMTVsIGRiIGR3IGRkIGRxIGR0IGRkcSBkbyBkeSBkeiByZXNiIHJlc3cgcmVzZCByZXNxIHJlc3QgcmVzZHEgcmVzbyByZXN5IHJlc3ogaW5jYmluIGVxdSB0aW1lcyBieXRlIHdvcmQgZHdvcmQgcXdvcmQgbm9zcGxpdCByZWwgYWJzIHNlZyB3cnQgc3RyaWN0IG5lYXIgZmFyIGEzMiBwdHIiLG1ldGE6IiVkZWZpbmUgJXhkZWZpbmUgJSsgJXVuZGVmICVkZWZzdHIgJWRlZnRvayAlYXNzaWduICVzdHJjYXQgJXN0cmxlbiAlc3Vic3RyICVyb3RhdGUgJWVsaWYgJWVsc2UgJWVuZGlmICVpZiAlaWZtYWNybyAlaWZjdHggJWlmaWRuICVpZmlkbmkgJWlmaWQgJWlmbnVtICVpZnN0ciAlaWZ0b2tlbiAlaWZlbXB0eSAlaWZlbnYgJWVycm9yICV3YXJuaW5nICVmYXRhbCAlcmVwICVlbmRyZXAgJWluY2x1ZGUgJXB1c2ggJXBvcCAlcmVwbCAlcGF0aHNlYXJjaCAlZGVwZW5kICV1c2UgJWFyZyAlc3RhY2tzaXplICVsb2NhbCAlbGluZSAlY29tbWVudCAlZW5kY29tbWVudCAubm9saXN0IF9fRklMRV9fIF9fTElORV9fIF9fU0VDVF9fICBfX0JJVFNfXyBfX09VVFBVVF9GT1JNQVRfXyBfX0RBVEVfXyBfX1RJTUVfXyBfX0RBVEVfTlVNX18gX19USU1FX05VTV9fIF9fVVRDX0RBVEVfXyBfX1VUQ19USU1FX18gX19VVENfREFURV9OVU1fXyBfX1VUQ19USU1FX05VTV9fICBfX1BBU1NfXyBzdHJ1YyBlbmRzdHJ1YyBpc3RydWMgYXQgaWVuZCBhbGlnbiBhbGlnbmIgc2VjdGFsaWduIGRheiBub2RheiB1cCBkb3duIHplcm8gZGVmYXVsdCBvcHRpb24gYXNzdW1lIHB1YmxpYyBiaXRzIHVzZTE2IHVzZTMyIHVzZTY0IGRlZmF1bHQgc2VjdGlvbiBzZWdtZW50IGFic29sdXRlIGV4dGVybiBnbG9iYWwgY29tbW9uIGNwdSBmbG9hdCBfX3V0ZjE2X18gX191dGYxNmxlX18gX191dGYxNmJlX18gX191dGYzMl9fIF9fdXRmMzJsZV9fIF9fdXRmMzJiZV9fIF9fZmxvYXQ4X18gX19mbG9hdDE2X18gX19mbG9hdDMyX18gX19mbG9hdDY0X18gX19mbG9hdDgwbV9fIF9fZmxvYXQ4MGVfXyBfX2Zsb2F0MTI4bF9fIF9fZmxvYXQxMjhoX18gX19JbmZpbml0eV9fIF9fUU5hTl9fIF9fU05hTl9fIEluZiBOYU4gUU5hTiBTTmFOIGZsb2F0OCBmbG9hdDE2IGZsb2F0MzIgZmxvYXQ2NCBmbG9hdDgwbSBmbG9hdDgwZSBmbG9hdDEyOGwgZmxvYXQxMjhoIF9fRkxPQVRfREFaX18gX19GTE9BVF9ST1VORF9fIF9fRkxPQVRfXyJ9LGNvbnRhaW5zOltlLkNPTU1FTlQoIjsiLCIkIix7cmVsZXZhbmNlOjB9KSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYig/OihbMC05XVswLTlfXSopP1xcLlswLTlfXSooPzpbZUVdWystXT9bMC05X10rKT98KDBbWHhdKT9bMC05XVswLTlfXSpcXC4/WzAtOV9dKig/OltwUF0oPzpbKy1dP1swLTlfXSspPyk/KVxcYiIscmVsZXZhbmNlOjB9LHtiZWdpbjoiXFwkWzAtOV1bMC05QS1GYS1mXSoiLHJlbGV2YW5jZTowfSx7YmVnaW46IlxcYig/OlswLTlBLUZhLWZdWzAtOUEtRmEtZl9dKltIaF18WzAtOV1bMC05X10qW0RkVHRdP3xbMC03XVswLTdfXSpbUXFPb118WzAtMV1bMC0xX10qW0JiWXldKVxcYiJ9LHtiZWdpbjoiXFxiKD86MFtYeF1bMC05QS1GYS1mX10rfDBbRGRUdF1bMC05X10rfDBbUXFPb11bMC03X10rfDBbQmJZeV1bMC0xX10rKVxcYiJ9XX0sZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46IiciLGVuZDoiW15cXFxcXScifSx7YmVnaW46ImAiLGVuZDoiW15cXFxcXWAifV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN5bWJvbCIsdmFyaWFudHM6W3tiZWdpbjoiXlxccypbQS1aYS16Ll8/XVtBLVphLXowLTlfJCNAfi4/XSooOnxcXHMrbGFiZWwpIn0se2JlZ2luOiJeXFxzKiUlW0EtWmEtejAtOV8kI0B+Lj9dKjoifV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiJVswLTldKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiJSFTKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eXHMqXC5bXHdfLV0rL31dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94bC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBkbyB3aGlsZSB1bnRpbCBmb3IgbG9vcCBpbXBvcnQgd2l0aCBpcyBhcyB3aGVyZSB3aGVuIGJ5IGRhdGEgY29uc3RhbnQgaW50ZWdlciByZWFsIHRleHQgbmFtZSBib29sZWFuIHN5bWJvbCBpbmZpeCBwcmVmaXggcG9zdGZpeCBibG9jayB0cmVlIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG5pbCIsYnVpbHRfaW46ImluIG1vZCByZW0gYW5kIG9yIHhvciBub3QgYWJzIHNpZ24gZmxvb3IgY2VpbCBzcXJ0IHNpbiBjb3MgdGFuIGFzaW4gYWNvcyBhdGFuIGV4cCBleHBtMSBsb2cgbG9nMiBsb2cxMCBsb2cxcCBwaSBhdCB0ZXh0X2xlbmd0aCB0ZXh0X3JhbmdlIHRleHRfZmluZCB0ZXh0X3JlcGxhY2UgY29udGFpbnMgcGFnZSBzbGlkZSBiYXNpY19zbGlkZSB0aXRsZV9zbGlkZSB0aXRsZSBzdWJ0aXRsZSBmYWRlX2luIGZhZGVfb3V0IGZhZGVfYXQgY2xlYXJfY29sb3IgY29sb3IgbGluZV9jb2xvciBsaW5lX3dpZHRoIHRleHR1cmVfd3JhcCB0ZXh0dXJlX3RyYW5zZm9ybSB0ZXh0dXJlIHNjYWxlXz94IHNjYWxlXz95IHNjYWxlXz96PyB0cmFuc2xhdGVfP3ggdHJhbnNsYXRlXz95IHRyYW5zbGF0ZV8/ej8gcm90YXRlXz94IHJvdGF0ZV8/eSByb3RhdGVfP3o/IHJlY3RhbmdsZSBjaXJjbGUgZWxsaXBzZSBzcGhlcmUgcGF0aCBsaW5lX3RvIG1vdmVfdG8gcXVhZF90byBjdXJ2ZV90byB0aGVtZSBiYWNrZ3JvdW5kIGNvbnRlbnRzIGxvY2FsbHkgdGltZSBtb3VzZV8/eCBtb3VzZV8/eSBtb3VzZV9idXR0b25zIE9iamVjdExvYWRlciBBbmltYXRlIE1vdmllQ3JlZGl0cyBTbGlkZXMgRmlsdGVycyBTaGFkaW5nIE1hdGVyaWFscyBMZW5zRmxhcmUgTWFwcGluZyBWTENBdWRpb1ZpZGVvIFN0ZXJlb0RlY29kZXIgUG9pbnRDbG91ZCBOZXR3b3JrQWNjZXNzIFJlbW90ZUNvbnRyb2wgUmVnRXhwIENocm9tYUtleSBTbm93ZmFsbCBOb2RlSlMgU3BlZWNoIENoYXJ0cyJ9LG49e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4ifSxyPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsaWxsZWdhbDoiXFxuIn0sbz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiI8PCIsZW5kOiI+PiJ9LHM9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiWzAtOV0rI1swLTlBLVpfXSsoXFwuWzAtOS1BLVpfXSspPyM/KFtFZV1bKy1dP1swLTldKyk/In0saT17YmVnaW5LZXl3b3JkczoiaW1wb3J0IixlbmQ6IiQiLGtleXdvcmRzOnQsY29udGFpbnM6W25dfSxhPXtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjovW2Etel1bXlxuXSotPi8scmV0dXJuQmVnaW46ITAsZW5kOi8tPi8sY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse3N0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6dH19KV19O3JldHVybnthbGlhc2VzOlsidGFvIl0sbGV4ZW1lczovW2EtekEtWl1bYS16QS1aMC05Xz9dKi8sa2V5d29yZHM6dCxjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbixyLG8sYSxpLHMsZS5OVU1CRVJfTU9ERV19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3htbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2VuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6LzwvLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjoiW0EtWmEtejAtOVxcLl86LV0rIixyZWxldmFuY2U6MH0se2JlZ2luOi89XHMqLyxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixlbmRzUGFyZW50OiEwLHZhcmlhbnRzOlt7YmVnaW46LyIvLGVuZDovIi99LHtiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi9bXlxzIic9PD5gXSsvfV19XX1dfTtyZXR1cm57YWxpYXNlczpbImh0bWwiLCJ4aHRtbCIsInJzcyIsImF0b20iLCJ4amIiLCJ4c2QiLCJ4c2wiLCJwbGlzdCJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiI8IURPQ1RZUEUiLGVuZDoiPiIscmVsZXZhbmNlOjEwLGNvbnRhaW5zOlt7YmVnaW46IlxcWyIsZW5kOiJcXF0ifV19LGUuQ09NTUVOVCgiXHgzYyEtLSIsIi0tXHgzZSIse3JlbGV2YW5jZToxMH0pLHtiZWdpbjoiPFxcIVxcW0NEQVRBXFxbIixlbmQ6IlxcXVxcXT4iLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46LzxcP3htbC8sZW5kOi9cPz4vLHJlbGV2YW5jZToxMH0se2JlZ2luOi88XD8ocGhwKT8vLGVuZDovXD8+LyxzdWJMYW5ndWFnZToicGhwIixjb250YWluczpbe2JlZ2luOiIvXFwqIixlbmQ6IlxcKi8iLHNraXA6ITB9LHtiZWdpbjonYiInLGVuZDonIicsc2tpcDohMH0se2JlZ2luOiJiJyIsZW5kOiInIixza2lwOiEwfSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGwsY2xhc3NOYW1lOm51bGwsY29udGFpbnM6bnVsbCxza2lwOiEwfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbCxjbGFzc05hbWU6bnVsbCxjb250YWluczpudWxsLHNraXA6ITB9KV19LHtjbGFzc05hbWU6InRhZyIsYmVnaW46IjxzdHlsZSg/PVxcc3w+fCQpIixlbmQ6Ij4iLGtleXdvcmRzOntuYW1lOiJzdHlsZSJ9LGNvbnRhaW5zOlt0XSxzdGFydHM6e2VuZDoiPC9zdHlsZT4iLHJldHVybkVuZDohMCxzdWJMYW5ndWFnZTpbImNzcyIsInhtbCJdfX0se2NsYXNzTmFtZToidGFnIixiZWdpbjoiPHNjcmlwdCg/PVxcc3w+fCQpIixlbmQ6Ij4iLGtleXdvcmRzOntuYW1lOiJzY3JpcHQifSxjb250YWluczpbdF0sc3RhcnRzOntlbmQ6IjxcL3NjcmlwdD4iLHJldHVybkVuZDohMCxzdWJMYW5ndWFnZTpbImFjdGlvbnNjcmlwdCIsImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIl19fSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOiI8Lz8iLGVuZDoiLz8+Iixjb250YWluczpbe2NsYXNzTmFtZToibmFtZSIsYmVnaW46L1teXC8+PFxzXSsvLHJlbGV2YW5jZTowfSx0XX1dfX19LCIuL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94cXVlcnkuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtjbGFzc05hbWU6ImJ1aWx0X2luIix2YXJpYW50czpbe2JlZ2luOi9cYmFycmF5XDovLGVuZDovKD86YXBwZW5kfGZpbHRlcnxmbGF0dGVufGZvbGRcLSg/OmxlZnR8cmlnaHQpfGZvci1lYWNoKD86XC1wYWlyKT98Z2V0fGhlYWR8aW5zZXJ0XC1iZWZvcmV8am9pbnxwdXR8cmVtb3ZlfHJldmVyc2V8c2l6ZXxzb3J0fHN1YmFycmF5fHRhaWwpXGIvfSx7YmVnaW46L1xibWFwXDovLGVuZDovKD86Y29udGFpbnN8ZW50cnl8ZmluZHxmb3JcLWVhY2h8Z2V0fGtleXN8bWVyZ2V8cHV0fHJlbW92ZXxzaXplKVxiL30se2JlZ2luOi9cYm1hdGhcOi8sZW5kOi8oPzphKD86Y29zfHNpbnx0YW5bMl0/KXxjb3N8ZXhwKD86MTApP3xsb2coPzoxMCk/fHBpfHBvd3xzaW58c3FydHx0YW4pXGIvfSx7YmVnaW46L1xib3BcOi8sZW5kOi9cKC8sZXhjbHVkZUVuZDohMH0se2JlZ2luOi9cYmZuXDovLGVuZDovXCgvLGV4Y2x1ZGVFbmQ6ITB9LHtiZWdpbjovW148XC9cJFw6JyItXVxiKD86YWJzfGFjY3VtdWxhdG9yXC0oPzphZnRlcnxiZWZvcmUpfGFkanVzdFwtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lKVwtdG9cLXRpbWV6b25lfGFuYWx5emVcLXN0cmluZ3xhcHBseXxhdmFpbGFibGVcLSg/OmVudmlyb25tZW50XC12YXJpYWJsZXN8c3lzdGVtXC1wcm9wZXJ0aWVzKXxhdmd8YmFzZVwtdXJpfGJvb2xlYW58Y2VpbGluZ3xjb2RlcG9pbnRzP1wtKD86ZXF1YWx8dG9cLXN0cmluZyl8Y29sbGF0aW9uXC1rZXl8Y29sbGVjdGlvbnxjb21wYXJlfGNvbmNhdHxjb250YWlucyg/OlwtdG9rZW4pP3xjb3B5XC1vZnxjb3VudHxjdXJyZW50KD86XC0pPyg/OmRhdGUoPzpUaW1lKT98dGltZXxncm91cCg/OmluZ1wta2V5KT98b3V0cHV0XC11cml8bWVyZ2VcLSg/Omdyb3VwfGtleSkpP2RhdGF8ZGF0ZVRpbWV8ZGF5cz9cLWZyb21cLSg/OmRhdGUoPzpUaW1lKT98ZHVyYXRpb24pfGRlZXBcLWVxdWFsfGRlZmF1bHRcLSg/OmNvbGxhdGlvbnxsYW5ndWFnZSl8ZGlzdGluY3RcLXZhbHVlc3xkb2N1bWVudCg/OlwtdXJpKT98ZG9jKD86XC1hdmFpbGFibGUpP3xlbGVtZW50XC0oPzphdmFpbGFibGV8d2l0aFwtaWQpfGVtcHR5fGVuY29kZVwtZm9yXC11cml8ZW5kc1wtd2l0aHxlbnZpcm9ubWVudFwtdmFyaWFibGV8ZXJyb3J8ZXNjYXBlXC1odG1sXC11cml8ZXhhY3RseVwtb25lfGV4aXN0c3xmYWxzZXxmaWx0ZXJ8Zmxvb3J8Zm9sZFwtKD86bGVmdHxyaWdodCl8Zm9yXC1lYWNoKD86XC1wYWlyKT98Zm9ybWF0XC0oPzpkYXRlKD86VGltZSk/fHRpbWV8aW50ZWdlcnxudW1iZXIpfGZ1bmN0aW9uXC0oPzphcml0eXxhdmFpbGFibGV8bG9va3VwfG5hbWUpfGdlbmVyYXRlXC1pZHxoYXNcLWNoaWxkcmVufGhlYWR8aG91cnNcLWZyb21cLSg/OmRhdGVUaW1lfGR1cmF0aW9ufHRpbWUpfGlkKD86cmVmKT98aW1wbGljaXRcLXRpbWV6b25lfGluXC1zY29wZVwtcHJlZml4ZXN8aW5kZXhcLW9mfGlubmVybW9zdHxpbnNlcnRcLWJlZm9yZXxpcmlcLXRvXC11cml8anNvblwtKD86ZG9jfHRvXC14bWwpfGtleXxsYW5nfGxhc3R8bG9hZFwteHF1ZXJ5XC1tb2R1bGV8bG9jYWxcLW5hbWUoPzpcLWZyb21cLVFOYW1lKT98KD86bG93ZXJ8dXBwZXIpXC1jYXNlfG1hdGNoZXN8bWF4fG1pbnV0ZXNcLWZyb21cLSg/OmRhdGVUaW1lfGR1cmF0aW9ufHRpbWUpfG1pbnxtb250aHM/XC1mcm9tXC0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXxuYW1lKD86c3BhY2VcLXVyaVwtPyg/OmZvclwtcHJlZml4fGZyb21cLVFOYW1lKT8pP3xuaWxsZWR8bm9kZVwtbmFtZXxub3JtYWxpemVcLSg/OnNwYWNlfHVuaWNvZGUpfG5vdHxudW1iZXJ8b25lXC1vclwtbW9yZXxvdXRlcm1vc3R8cGFyc2VcLSg/OmlldGZcLWRhdGV8anNvbil8cGF0aHxwb3NpdGlvbnwoPzpwcmVmaXhcLWZyb21cLSk/UU5hbWV8cmFuZG9tXC1udW1iZXJcLWdlbmVyYXRvcnxyZWdleFwtZ3JvdXB8cmVtb3ZlfHJlcGxhY2V8cmVzb2x2ZVwtKD86UU5hbWV8dXJpKXxyZXZlcnNlfHJvb3R8cm91bmQoPzpcLWhhbGZcLXRvXC1ldmVuKT98c2Vjb25kc1wtZnJvbVwtKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8c25hcHNob3R8c29ydHxzdGFydHNcLXdpdGh8c3RhdGljXC1iYXNlXC11cml8c3RyZWFtXC1hdmFpbGFibGV8c3RyaW5nXC0/KD86am9pbnxsZW5ndGh8dG9cLWNvZGVwb2ludHMpP3xzdWJzZXF1ZW5jZXxzdWJzdHJpbmdcLT8oPzphZnRlcnxiZWZvcmUpP3xzdW18c3lzdGVtXC1wcm9wZXJ0eXx0YWlsfHRpbWV6b25lXC1mcm9tXC0oPzpkYXRlKD86VGltZSk/fHRpbWUpfHRva2VuaXplfHRyYWNlfHRyYW5zKD86Zm9ybXxsYXRlKXx0cnVlfHR5cGVcLWF2YWlsYWJsZXx1bm9yZGVyZWR8dW5wYXJzZWRcLSg/OmVudGl0eXx0ZXh0KT9cLT8oPzpwdWJsaWNcLWlkfHVyaXxhdmFpbGFibGV8bGluZXMpP3x1cmlcLWNvbGxlY3Rpb258eG1sXC10b1wtanNvbnx5ZWFycz9cLWZyb21cLSg/OmRhdGUoPzpUaW1lKT98ZHVyYXRpb24pfHplcm9cLW9yXC1vbmUpXGIvfSx7YmVnaW46L1xibG9jYWxcOi8sZW5kOi9cKC8sZXhjbHVkZUVuZDohMH0se2JlZ2luOi9cYnppcFw6LyxlbmQ6Lyg/OnppcFwtZmlsZXwoPzp4bWx8aHRtbHx0ZXh0fGJpbmFyeSlcLWVudHJ5fCAoPzp1cGRhdGVcLSk/ZW50cmllcylcYi99LHtiZWdpbjovXGIoPzp1dGlsfGRifGZ1bmN0eHxhcHB8eGRtcHx4bWxkYilcOi8sZW5kOi9cKC8sZXhjbHVkZUVuZDohMH1dfSxuPXtjbGFzc05hbWU6InRpdGxlIixiZWdpbjovXGJ4cXVlcnkgdmVyc2lvbiAiWzEzXVwuWzAxXSJccz8oPzplbmNvZGluZyAiLisiKT8vLGVuZDovOy99LHI9e2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9bXCRdW1x3LTpdKy99LG89e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscmVsZXZhbmNlOjB9LHM9e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOlt7YmVnaW46LyIiLyxyZWxldmFuY2U6MH1dfSx7YmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W3tiZWdpbjovJycvLHJlbGV2YW5jZTowfV19XX0saT17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovJVtcdy06XSsvfSxhPXtjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOiJcXCg6IixlbmQ6IjpcXCkiLHJlbGV2YW5jZToxMCxjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiQFxcdysifV19LGw9e2JlZ2luS2V5d29yZHM6ImVsZW1lbnQgYXR0cmlidXRlIGNvbW1lbnQgZG9jdW1lbnQgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIsZW5kOiJ7IixleGNsdWRlRW5kOiEwfSx1PXtiZWdpbjovPChbXHdcLl86XC1dKykoKFxzKi4qKT0oJ3wiKS4qKCd8IikpPz4vLGVuZDovKFwvW1x3XC5fOlwtXSs+KS8sc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W3tiZWdpbjoieyIsZW5kOiJ9IixzdWJMYW5ndWFnZToieHF1ZXJ5In0sInNlbGYiXX0sYz1bcix0LHMsbyxhLGksbixsLHVdO3JldHVybnthbGlhc2VzOlsieHBhdGgiLCJ4cSJdLGNhc2VfaW5zZW5zaXRpdmU6ITEsbGV4ZW1lczovW2EtekEtWlwkXVthLXpBLVowLTlfOlwtXSovLGlsbGVnYWw6Lyhwcm9jKXwoYWJzdHJhY3QpfChleHRlbmRzKXwodW50aWwpfCgjKS8sa2V5d29yZHM6e2tleXdvcmQ6Im1vZHVsZSBzY2hlbWEgbmFtZXNwYWNlIGJvdW5kYXJ5LXNwYWNlIHByZXNlcnZlIG5vLXByZXNlcnZlIHN0cmlwIGRlZmF1bHQgY29sbGF0aW9uIGJhc2UtdXJpIG9yZGVyaW5nIGNvbnRleHQgZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3IgY29weS1uYW1lc3BhY2VzIGVtcHR5LXNlcXVlbmNlIGV4Y2VwdCBleHBvbmVudC1zZXBhcmF0b3IgZXh0ZXJuYWwgZ3JvdXBpbmctc2VwYXJhdG9yIGluaGVyaXQgbm8taW5oZXJpdCBsYXggbWludXMtc2lnbiBwZXItbWlsbGUgcGVyY2VudCBzY2hlbWEtYXR0cmlidXRlIHNjaGVtYS1lbGVtZW50IHN0cmljdCB1bm9yZGVyZWQgemVyby1kaWdpdCBkZWNsYXJlIGltcG9ydCBvcHRpb24gZnVuY3Rpb24gdmFsaWRhdGUgdmFyaWFibGUgZm9yIGF0IGluIGxldCB3aGVyZSBvcmRlciBncm91cCBieSByZXR1cm4gaWYgdGhlbiBlbHNlIHR1bWJsaW5nIHNsaWRpbmcgd2luZG93IHN0YXJ0IHdoZW4gb25seSBlbmQgcHJldmlvdXMgbmV4dCBzdGFibGUgYXNjZW5kaW5nIGRlc2NlbmRpbmcgYWxsb3dpbmcgZW1wdHkgZ3JlYXRlc3QgbGVhc3Qgc29tZSBldmVyeSBzYXRpc2ZpZXMgc3dpdGNoIGNhc2UgdHlwZXN3aXRjaCB0cnkgY2F0Y2ggYW5kIG9yIHRvIHVuaW9uIGludGVyc2VjdCBpbnN0YW5jZSBvZiB0cmVhdCBhcyBjYXN0YWJsZSBjYXN0IG1hcCBhcnJheSBkZWxldGUgaW5zZXJ0IGludG8gcmVwbGFjZSB2YWx1ZSByZW5hbWUgY29weSBtb2RpZnkgdXBkYXRlIix0eXBlOiJpdGVtIGRvY3VtZW50LW5vZGUgbm9kZSBhdHRyaWJ1dGUgZG9jdW1lbnQgZWxlbWVudCBjb21tZW50IG5hbWVzcGFjZSBuYW1lc3BhY2Utbm9kZSBwcm9jZXNzaW5nLWluc3RydWN0aW9uIHRleHQgY29uc3RydWN0aW9uIHhzOmFueUF0b21pY1R5cGUgeHM6dW50eXBlZEF0b21pYyB4czpkdXJhdGlvbiB4czp0aW1lIHhzOmRlY2ltYWwgeHM6ZmxvYXQgeHM6ZG91YmxlIHhzOmdZZWFyTW9udGggeHM6Z1llYXIgeHM6Z01vbnRoRGF5IHhzOmdNb250aCB4czpnRGF5IHhzOmJvb2xlYW4geHM6YmFzZTY0QmluYXJ5IHhzOmhleEJpbmFyeSB4czphbnlVUkkgeHM6UU5hbWUgeHM6Tk9UQVRJT04geHM6ZGF0ZVRpbWUgeHM6ZGF0ZVRpbWVTdGFtcCB4czpkYXRlIHhzOnN0cmluZyB4czpub3JtYWxpemVkU3RyaW5nIHhzOnRva2VuIHhzOmxhbmd1YWdlIHhzOk5NVE9LRU4geHM6TmFtZSB4czpOQ05hbWUgeHM6SUQgeHM6SURSRUYgeHM6RU5USVRZIHhzOmludGVnZXIgeHM6bm9uUG9zaXRpdmVJbnRlZ2VyIHhzOm5lZ2F0aXZlSW50ZWdlciB4czpsb25nIHhzOmludCB4czpzaG9ydCB4czpieXRlIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciB4czp1bmlzaWduZWRMb25nIHhzOnVuc2lnbmVkSW50IHhzOnVuc2lnbmVkU2hvcnQgeHM6dW5zaWduZWRCeXRlIHhzOnBvc2l0aXZlSW50ZWdlciB4czp5ZWFyTW9udGhEdXJhdGlvbiB4czpkYXlUaW1lRHVyYXRpb24iLGxpdGVyYWw6ImVxIG5lIGx0IGxlIGd0IGdlIGlzIHNlbGY6OiBjaGlsZDo6IGRlc2NlbmRhbnQ6OiBkZXNjZW5kYW50LW9yLXNlbGY6OiBhdHRyaWJ1dGU6OiBmb2xsb3dpbmc6OiBmb2xsb3dpbmctc2libGluZzo6IHBhcmVudDo6IGFuY2VzdG9yOjogYW5jZXN0b3Itb3Itc2VsZjo6IHByZWNlZGluZzo6IHByZWNlZGluZy1zaWJsaW5nOjogTmFOIn0sY29udGFpbnM6Y319fSwiLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveWFtbC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9IlthLXpBLVpfXVtcXHdcXC1dKiIsbj17Y2xhc3NOYW1lOiJhdHRyIix2YXJpYW50czpbe2JlZ2luOiJeWyBcXC1dKiIrdCsiOiJ9LHtiZWdpbjonXlsgXFwtXSoiJyt0KyciOid9LHtiZWdpbjoiXlsgXFwtXSonIit0KyInOiJ9XX0scj17Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS12YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjoie3siLGVuZDoifX0ifSx7YmVnaW46IiV7IixlbmQ6In0ifV19LG89e2NsYXNzTmFtZToic3RyaW5nIixyZWxldmFuY2U6MCx2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi99LHtiZWdpbjovXFMrL31dLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscl19O3JldHVybntjYXNlX2luc2Vuc2l0aXZlOiEwLGFsaWFzZXM6WyJ5bWwiLCJZQU1MIiwieWFtbCJdLGNvbnRhaW5zOltuLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeLS0tcyokIixyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IltcXHw+XSAqJCIscmV0dXJuRW5kOiEwLGNvbnRhaW5zOm8uY29udGFpbnMsZW5kOm4udmFyaWFudHNbMF0uYmVnaW59LHtiZWdpbjoiPCVbJT0tXT8iLGVuZDoiWyUtXT8lPiIsc3ViTGFuZ3VhZ2U6InJ1YnkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiISIrZS5VTkRFUlNDT1JFX0lERU5UX1JFfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiISEiK2UuVU5ERVJTQ09SRV9JREVOVF9SRX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiYiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiJCJ9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXCoiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiJCJ9LHtjbGFzc05hbWU6ImJ1bGxldCIsYmVnaW46Il4gKi0iLHJlbGV2YW5jZTowfSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtiZWdpbktleXdvcmRzOiJ0cnVlIGZhbHNlIHllcyBubyBudWxsIixrZXl3b3Jkczp7bGl0ZXJhbDoidHJ1ZSBmYWxzZSB5ZXMgbm8gbnVsbCJ9fSxlLkNfTlVNQkVSX01PREUsb119fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3plcGhpci5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbe2JlZ2luOidiIicsZW5kOiciJ30se2JlZ2luOiJiJyIsZW5kOiInIn0sZS5pbmhlcml0KGUuQVBPU19TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pXX0sbj17dmFyaWFudHM6W2UuQklOQVJZX05VTUJFUl9NT0RFLGUuQ19OVU1CRVJfTU9ERV19O3JldHVybnthbGlhc2VzOlsiemVwIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3JkczoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciBsZXQgd2hpbGUgaXNzZXQgcHVibGljIHByb3RlY3RlZCBleGl0IGZvcmVhY2ggdGhyb3cgZWxzZWlmIGluY2x1ZGUgX19GSUxFX18gZW1wdHkgcmVxdWlyZV9vbmNlIGRvIHhvciByZXR1cm4gcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkgaW50IHVpbnQgbG9uZyB1bG9uZyBjaGFyIHVjaGFyIGRvdWJsZSBmbG9hdCBib29sIGJvb2xlYW4gc3RyaW5nbGlrZWx5IHVubGlrZWx5Iixjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuSEFTSF9DT01NRU5UX01PREUsZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIse2NvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksZS5DT01NRU5UKCJfX2hhbHRfY29tcGlsZXIuKz87IiwhMSx7ZW5kc1dpdGhQYXJlbnQ6ITAsa2V5d29yZHM6Il9faGFsdF9jb21waWxlciIsbGV4ZW1lczplLlVOREVSU0NPUkVfSURFTlRfUkV9KSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiI8PDxbJ1wiXT9cXHcrWydcIl0/JCIsZW5kOiJeXFx3KzsiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46Lyg6OnwtPikrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKi99LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOi9bO3tdLyxleGNsdWRlRW5kOiEwLGlsbGVnYWw6IlxcJHxcXFt8JSIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOlsic2VsZiIsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx0LG5dfV19LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDoieyIsZXhjbHVkZUVuZDohMCxpbGxlZ2FsOi9bOlwoXCQiXS8sY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbktleXdvcmRzOiJuYW1lc3BhY2UiLGVuZDoiOyIsaWxsZWdhbDovW1wuJ10vLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbktleXdvcmRzOiJ1c2UiLGVuZDoiOyIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2JlZ2luOiI9PiJ9LHQsbl19fX0sIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9zdHlsZXMvZ2l0aHViLmNzcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L0RPTVV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt0LmNhblVzZURPTT0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLHQuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKTplLmF0dGFjaEV2ZW50KCJvbiIrdCxuKX0sdC5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyP2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpOmUuZGV0YWNoRXZlbnQoIm9uIit0LG4pfSx0LmdldENvbmZpcm1hdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiB0KHdpbmRvdy5jb25maXJtKGUpKX0sdC5zdXBwb3J0c0hpc3Rvcnk9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4oLTE9PT1lLmluZGV4T2YoIkFuZHJvaWQgMi4iKSYmLTE9PT1lLmluZGV4T2YoIkFuZHJvaWQgNC4wIil8fC0xPT09ZS5pbmRleE9mKCJNb2JpbGUgU2FmYXJpIil8fC0xIT09ZS5pbmRleE9mKCJDaHJvbWUiKXx8LTEhPT1lLmluZGV4T2YoIldpbmRvd3MgUGhvbmUiKSkmJih3aW5kb3cuaGlzdG9yeSYmInB1c2hTdGF0ZSJpbiB3aW5kb3cuaGlzdG9yeSl9LHQuc3VwcG9ydHNQb3BTdGF0ZU9uSGFzaENoYW5nZT1mdW5jdGlvbigpe3JldHVybi0xPT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpfSx0LnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoPWZ1bmN0aW9uKCl7cmV0dXJuLTE9PT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iil9LHQuaXNFeHRyYW5lb3VzUG9wc3RhdGVFdmVudD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZS5zdGF0ZSYmLTE9PT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNyaU9TIil9fSwiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9Mb2NhdGlvblV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMCx0LmxvY2F0aW9uc0FyZUVxdWFsPXQuY3JlYXRlTG9jYXRpb249dm9pZCAwO3ZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHM9bigiLi9ub2RlX21vZHVsZXMvcmVzb2x2ZS1wYXRobmFtZS9pbmRleC5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3ZhbHVlLWVxdWFsL2luZGV4LmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9QYXRoVXRpbHMuanMiKTt0LmNyZWF0ZUxvY2F0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBzPXZvaWQgMDsic3RyaW5nIj09dHlwZW9mIGU/KHM9KDAsdS5wYXJzZVBhdGgpKGUpLHMuc3RhdGU9dCk6KHM9byh7fSxlKSx2b2lkIDA9PT1zLnBhdGhuYW1lJiYocy5wYXRobmFtZT0iIikscy5zZWFyY2g/Ij8iIT09cy5zZWFyY2guY2hhckF0KDApJiYocy5zZWFyY2g9Ij8iK3Muc2VhcmNoKTpzLnNlYXJjaD0iIixzLmhhc2g/IiMiIT09cy5oYXNoLmNoYXJBdCgwKSYmKHMuaGFzaD0iIyIrcy5oYXNoKTpzLmhhc2g9IiIsdm9pZCAwIT09dCYmdm9pZCAwPT09cy5zdGF0ZSYmKHMuc3RhdGU9dCkpO3RyeXtzLnBhdGhuYW1lPWRlY29kZVVSSShzLnBhdGhuYW1lKX1jYXRjaChlKXt0aHJvdyBlIGluc3RhbmNlb2YgVVJJRXJyb3I/bmV3IFVSSUVycm9yKCdQYXRobmFtZSAiJytzLnBhdGhuYW1lKyciIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgYW4gaW52YWxpZCBwZXJjZW50LWVuY29kaW5nLicpOmV9cmV0dXJuIG4mJihzLmtleT1uKSxyP3MucGF0aG5hbWU/Ii8iIT09cy5wYXRobmFtZS5jaGFyQXQoMCkmJihzLnBhdGhuYW1lPSgwLGkuZGVmYXVsdCkocy5wYXRobmFtZSxyLnBhdGhuYW1lKSk6cy5wYXRobmFtZT1yLnBhdGhuYW1lOnMucGF0aG5hbWV8fChzLnBhdGhuYW1lPSIvIiksc30sdC5sb2NhdGlvbnNBcmVFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnBhdGhuYW1lPT09dC5wYXRobmFtZSYmZS5zZWFyY2g9PT10LnNlYXJjaCYmZS5oYXNoPT09dC5oYXNoJiZlLmtleT09PXQua2V5JiYoMCxsLmRlZmF1bHQpKGUuc3RhdGUsdC5zdGF0ZSl9fSwiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9QYXRoVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciByPSh0LmFkZExlYWRpbmdTbGFzaD1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKT9lOiIvIitlfSx0LnN0cmlwTGVhZGluZ1NsYXNoPWZ1bmN0aW9uKGUpe3JldHVybiIvIj09PWUuY2hhckF0KDApP2Uuc3Vic3RyKDEpOmV9LHQuaGFzQmFzZW5hbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXiIrdCsiKFxcL3xcXD98I3wkKSIsImkiKS50ZXN0KGUpfSk7dC5zdHJpcEJhc2VuYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0KT9lLnN1YnN0cih0Lmxlbmd0aCk6ZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoZS5sZW5ndGgtMSk/ZS5zbGljZSgwLC0xKTplfSx0LnBhcnNlUGF0aD1mdW5jdGlvbihlKXt2YXIgdD1lfHwiLyIsbj0iIixyPSIiLG89dC5pbmRleE9mKCIjIik7LTEhPT1vJiYocj10LnN1YnN0cihvKSx0PXQuc3Vic3RyKDAsbykpO3ZhciBzPXQuaW5kZXhPZigiPyIpO3JldHVybi0xIT09cyYmKG49dC5zdWJzdHIocyksdD10LnN1YnN0cigwLHMpKSx7cGF0aG5hbWU6dCxzZWFyY2g6Ij8iPT09bj8iIjpuLGhhc2g6IiMiPT09cj8iIjpyfX0sdC5jcmVhdGVQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PWUucGF0aG5hbWUsbj1lLnNlYXJjaCxyPWUuaGFzaCxvPXR8fCIvIjtyZXR1cm4gbiYmIj8iIT09biYmKG8rPSI/Ij09PW4uY2hhckF0KDApP246Ij8iK24pLHImJiIjIiE9PXImJihvKz0iIyI9PT1yLmNoYXJBdCgwKT9yOiIjIityKSxvfX0sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGk9bigiLi9ub2RlX21vZHVsZXMvd2FybmluZy9icm93c2VyLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L0xvY2F0aW9uVXRpbHMuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvUGF0aFV0aWxzLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9ET01VdGlscy5qcyIpLG09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlfHx7fX1jYXRjaChlKXtyZXR1cm57fX19LGg9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307KDAsdS5kZWZhdWx0KShmLmNhblVzZURPTSwiQnJvd3NlciBoaXN0b3J5IG5lZWRzIGEgRE9NIik7dmFyIHQ9d2luZG93Lmhpc3Rvcnksbj0oMCxmLnN1cHBvcnRzSGlzdG9yeSkoKSxyPSEoMCxmLnN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UpKCksaT1lLmZvcmNlUmVmcmVzaCxsPXZvaWQgMCE9PWkmJmksXz1lLmdldFVzZXJDb25maXJtYXRpb24saD12b2lkIDA9PT1fP2YuZ2V0Q29uZmlybWF0aW9uOl8sZz1lLmtleUxlbmd0aCxiPXZvaWQgMD09PWc/NjpnLEU9ZS5iYXNlbmFtZT8oMCxkLnN0cmlwVHJhaWxpbmdTbGFzaCkoKDAsZC5hZGRMZWFkaW5nU2xhc2gpKGUuYmFzZW5hbWUpKToiIix5PWZ1bmN0aW9uKGUpe3ZhciB0PWV8fHt9LG49dC5rZXkscj10LnN0YXRlLG89d2luZG93LmxvY2F0aW9uLHM9by5wYXRobmFtZSxpPW8uc2VhcmNoLGw9by5oYXNoLHU9cytpK2w7cmV0dXJuKDAsYS5kZWZhdWx0KSghRXx8KDAsZC5oYXNCYXNlbmFtZSkodSxFKSwnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSBiYXNlbmFtZS4gRXhwZWN0ZWQgcGF0aCAiJyt1KyciIHRvIGJlZ2luIHdpdGggIicrRSsnIi4nKSxFJiYodT0oMCxkLnN0cmlwQmFzZW5hbWUpKHUsRSkpLCgwLGMuY3JlYXRlTG9jYXRpb24pKHUscixuKX0sdj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMixiKX0sVD0oMCxwLmRlZmF1bHQpKCksQT1mdW5jdGlvbihlKXtzKEcsZSksRy5sZW5ndGg9dC5sZW5ndGgsVC5ub3RpZnlMaXN0ZW5lcnMoRy5sb2NhdGlvbixHLmFjdGlvbil9LEM9ZnVuY3Rpb24oZSl7KDAsZi5pc0V4dHJhbmVvdXNQb3BzdGF0ZUV2ZW50KShlKXx8Uih5KGUuc3RhdGUpKX0sTz1mdW5jdGlvbigpe1IoeShtKCkpKX0sUz0hMSxSPWZ1bmN0aW9uKGUpe2lmKFMpUz0hMSxBKCk7ZWxzZXtULmNvbmZpcm1UcmFuc2l0aW9uVG8oZSwiUE9QIixoLGZ1bmN0aW9uKHQpe3Q/QSh7YWN0aW9uOiJQT1AiLGxvY2F0aW9uOmV9KTpqKGUpfSl9fSxqPWZ1bmN0aW9uKGUpe3ZhciB0PUcubG9jYXRpb24sbj1MLmluZGV4T2YodC5rZXkpOy0xPT09biYmKG49MCk7dmFyIHI9TC5pbmRleE9mKGUua2V5KTstMT09PXImJihyPTApO3ZhciBvPW4tcjtvJiYoUz0hMCxrKG8pKX0seD15KG0oKSksTD1beC5rZXldLEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEUrKDAsZC5jcmVhdGVQYXRoKShlKX0sdz1mdW5jdGlvbihlLHIpeygwLGEuZGVmYXVsdCkoISgib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOm8oZSkpJiZ2b2lkIDAhPT1lLnN0YXRlJiZ2b2lkIDAhPT1yKSwiWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcHVzaCB3aGVuIHRoZSAxc3QgYXJndW1lbnQgaXMgYSBsb2NhdGlvbi1saWtlIG9iamVjdCB0aGF0IGFscmVhZHkgaGFzIHN0YXRlOyBpdCBpcyBpZ25vcmVkIik7dmFyIHM9KDAsYy5jcmVhdGVMb2NhdGlvbikoZSxyLHYoKSxHLmxvY2F0aW9uKTtULmNvbmZpcm1UcmFuc2l0aW9uVG8ocywiUFVTSCIsaCxmdW5jdGlvbihlKXtpZihlKXt2YXIgcj1EKHMpLG89cy5rZXksaT1zLnN0YXRlO2lmKG4paWYodC5wdXNoU3RhdGUoe2tleTpvLHN0YXRlOml9LG51bGwsciksbCl3aW5kb3cubG9jYXRpb24uaHJlZj1yO2Vsc2V7dmFyIHU9TC5pbmRleE9mKEcubG9jYXRpb24ua2V5KSxjPUwuc2xpY2UoMCwtMT09PXU/MDp1KzEpO2MucHVzaChzLmtleSksTD1jLEEoe2FjdGlvbjoiUFVTSCIsbG9jYXRpb246c30pfWVsc2UoMCxhLmRlZmF1bHQpKHZvaWQgMD09PWksIkJyb3dzZXIgaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZSBpbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhUTUw1IGhpc3RvcnkiKSx3aW5kb3cubG9jYXRpb24uaHJlZj1yfX0pfSxNPWZ1bmN0aW9uKGUscil7KDAsYS5kZWZhdWx0KSghKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6byhlKSkmJnZvaWQgMCE9PWUuc3RhdGUmJnZvaWQgMCE9PXIpLCJZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCBhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgcz0oMCxjLmNyZWF0ZUxvY2F0aW9uKShlLHIsdigpLEcubG9jYXRpb24pO1QuY29uZmlybVRyYW5zaXRpb25UbyhzLCJSRVBMQUNFIixoLGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPUQocyksbz1zLmtleSxpPXMuc3RhdGU7aWYobilpZih0LnJlcGxhY2VTdGF0ZSh7a2V5Om8sc3RhdGU6aX0sbnVsbCxyKSxsKXdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHIpO2Vsc2V7dmFyIHU9TC5pbmRleE9mKEcubG9jYXRpb24ua2V5KTstMSE9PXUmJihMW3VdPXMua2V5KSxBKHthY3Rpb246IlJFUExBQ0UiLGxvY2F0aW9uOnN9KX1lbHNlKDAsYS5kZWZhdWx0KSh2b2lkIDA9PT1pLCJCcm93c2VyIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5Iiksd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uocil9fSl9LGs9ZnVuY3Rpb24oZSl7dC5nbyhlKX0sST1mdW5jdGlvbigpe3JldHVybiBrKC0xKX0sUD1mdW5jdGlvbigpe3JldHVybiBrKDEpfSxOPTAsSD1mdW5jdGlvbihlKXtOKz1lLDE9PT1OPygoMCxmLmFkZEV2ZW50TGlzdGVuZXIpKHdpbmRvdywicG9wc3RhdGUiLEMpLHImJigwLGYuYWRkRXZlbnRMaXN0ZW5lcikod2luZG93LCJoYXNoY2hhbmdlIixPKSk6MD09PU4mJigoMCxmLnJlbW92ZUV2ZW50TGlzdGVuZXIpKHdpbmRvdywicG9wc3RhdGUiLEMpLHImJigwLGYucmVtb3ZlRXZlbnRMaXN0ZW5lcikod2luZG93LCJoYXNoY2hhbmdlIixPKSl9LEY9ITEsQj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1ULnNldFByb21wdChlKTtyZXR1cm4gRnx8KEgoMSksRj0hMCksZnVuY3Rpb24oKXtyZXR1cm4gRiYmKEY9ITEsSCgtMSkpLHQoKX19LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5hcHBlbmRMaXN0ZW5lcihlKTtyZXR1cm4gSCgxKSxmdW5jdGlvbigpe0goLTEpLHQoKX19LEc9e2xlbmd0aDp0Lmxlbmd0aCxhY3Rpb246IlBPUCIsbG9jYXRpb246eCxjcmVhdGVIcmVmOkQscHVzaDp3LHJlcGxhY2U6TSxnbzprLGdvQmFjazpJLGdvRm9yd2FyZDpQLGJsb2NrOkIsbGlzdGVuOlV9O3JldHVybiBHfTt0LmRlZmF1bHQ9aH0sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvY3JlYXRlTWVtb3J5SGlzdG9yeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saT1uKCIuL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L1BhdGhVdGlscy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9Mb2NhdGlvblV0aWxzLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIiksZD1yKGMpLF89ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHQpLG4pfSxwPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5nZXRVc2VyQ29uZmlybWF0aW9uLG49ZS5pbml0aWFsRW50cmllcyxyPXZvaWQgMD09PW4/WyIvIl06bixpPWUuaW5pdGlhbEluZGV4LGM9dm9pZCAwPT09aT8wOmkscD1lLmtleUxlbmd0aCxmPXZvaWQgMD09PXA/NjpwLG09KDAsZC5kZWZhdWx0KSgpLGg9ZnVuY3Rpb24oZSl7cyh4LGUpLHgubGVuZ3RoPXguZW50cmllcy5sZW5ndGgsbS5ub3RpZnlMaXN0ZW5lcnMoeC5sb2NhdGlvbix4LmFjdGlvbil9LGc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsZil9LGI9XyhjLDAsci5sZW5ndGgtMSksRT1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/KDAsdS5jcmVhdGVMb2NhdGlvbikoZSx2b2lkIDAsZygpKTooMCx1LmNyZWF0ZUxvY2F0aW9uKShlLHZvaWQgMCxlLmtleXx8ZygpKX0pLHk9bC5jcmVhdGVQYXRoLHY9ZnVuY3Rpb24oZSxuKXsoMCxhLmRlZmF1bHQpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpvKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09biksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHB1c2ggd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciByPSgwLHUuY3JlYXRlTG9jYXRpb24pKGUsbixnKCkseC5sb2NhdGlvbik7bS5jb25maXJtVHJhbnNpdGlvblRvKHIsIlBVU0giLHQsZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9eC5pbmRleCxuPXQrMSxvPXguZW50cmllcy5zbGljZSgwKTtvLmxlbmd0aD5uP28uc3BsaWNlKG4sby5sZW5ndGgtbixyKTpvLnB1c2gociksaCh7YWN0aW9uOiJQVVNIIixsb2NhdGlvbjpyLGluZGV4Om4sZW50cmllczpvfSl9fSl9LFQ9ZnVuY3Rpb24oZSxuKXsoMCxhLmRlZmF1bHQpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpvKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09biksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHJlcGxhY2Ugd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciByPSgwLHUuY3JlYXRlTG9jYXRpb24pKGUsbixnKCkseC5sb2NhdGlvbik7bS5jb25maXJtVHJhbnNpdGlvblRvKHIsIlJFUExBQ0UiLHQsZnVuY3Rpb24oZSl7ZSYmKHguZW50cmllc1t4LmluZGV4XT1yLGgoe2FjdGlvbjoiUkVQTEFDRSIsbG9jYXRpb246cn0pKX0pfSxBPWZ1bmN0aW9uKGUpe3ZhciBuPV8oeC5pbmRleCtlLDAseC5lbnRyaWVzLmxlbmd0aC0xKSxyPXguZW50cmllc1tuXTttLmNvbmZpcm1UcmFuc2l0aW9uVG8ociwiUE9QIix0LGZ1bmN0aW9uKGUpe2U/aCh7YWN0aW9uOiJQT1AiLGxvY2F0aW9uOnIsaW5kZXg6bn0pOmgoKX0pfSxDPWZ1bmN0aW9uKCl7cmV0dXJuIEEoLTEpfSxPPWZ1bmN0aW9uKCl7cmV0dXJuIEEoMSl9LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pbmRleCtlO3JldHVybiB0Pj0wJiZ0PHguZW50cmllcy5sZW5ndGh9LFI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiBtLnNldFByb21wdChlKX0saj1mdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBlbmRMaXN0ZW5lcihlKX0seD17bGVuZ3RoOkUubGVuZ3RoLGFjdGlvbjoiUE9QIixsb2NhdGlvbjpFW2JdLGluZGV4OmIsZW50cmllczpFLGNyZWF0ZUhyZWY6eSxwdXNoOnYscmVwbGFjZTpULGdvOkEsZ29CYWNrOkMsZ29Gb3J3YXJkOk8sY2FuR286UyxibG9jazpSLGxpc3RlbjpqfTtyZXR1cm4geH07dC5kZWZhdWx0PXB9LCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1mdW5jdGlvbigpe3ZhciBlPW51bGwsdD1mdW5jdGlvbih0KXtyZXR1cm4oMCxvLmRlZmF1bHQpKG51bGw9PWUsIkEgaGlzdG9yeSBzdXBwb3J0cyBvbmx5IG9uZSBwcm9tcHQgYXQgYSB0aW1lIiksZT10LGZ1bmN0aW9uKCl7ZT09PXQmJihlPW51bGwpfX0sbj1mdW5jdGlvbih0LG4scixzKXtpZihudWxsIT1lKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQsbik6ZTsic3RyaW5nIj09dHlwZW9mIGk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cihpLHMpOigoMCxvLmRlZmF1bHQpKCExLCJBIGhpc3RvcnkgbmVlZHMgYSBnZXRVc2VyQ29uZmlybWF0aW9uIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHVzZSBhIHByb21wdCBtZXNzYWdlIikscyghMCkpOnMoITEhPT1pKX1lbHNlIHMoITApfSxyPVtdO3JldHVybntzZXRQcm9tcHQ6dCxjb25maXJtVHJhbnNpdGlvblRvOm4sYXBwZW5kTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj1mdW5jdGlvbigpe3QmJmUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9O3JldHVybiByLnB1c2gobiksZnVuY3Rpb24oKXt0PSExLHI9ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1ufSl9fSxub3RpZnlMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3IuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseSh2b2lkIDAsdCl9KX19fTt0LmRlZmF1bHQ9c30sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvRE9NVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciByPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksbz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKTplLmF0dGFjaEV2ZW50KCJvbiIrdCxuKX0scz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKTplLmRldGFjaEV2ZW50KCJvbiIrdCxuKX0saT1mdW5jdGlvbihlLHQpe3JldHVybiB0KHdpbmRvdy5jb25maXJtKGUpKX0sYT1mdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybigtMT09PWUuaW5kZXhPZigiQW5kcm9pZCAyLiIpJiYtMT09PWUuaW5kZXhPZigiQW5kcm9pZCA0LjAiKXx8LTE9PT1lLmluZGV4T2YoIk1vYmlsZSBTYWZhcmkiKXx8LTEhPT1lLmluZGV4T2YoIkNocm9tZSIpfHwtMSE9PWUuaW5kZXhPZigiV2luZG93cyBQaG9uZSIpKSYmKHdpbmRvdy5oaXN0b3J5JiYicHVzaFN0YXRlImluIHdpbmRvdy5oaXN0b3J5KX0sbD1mdW5jdGlvbigpe3JldHVybi0xPT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpfSx1PWZ1bmN0aW9uKCl7cmV0dXJuLTE9PT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iil9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUuc3RhdGUmJi0xPT09bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDcmlPUyIpfX0sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvTG9jYXRpb25VdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVzb2x2ZS1wYXRobmFtZS9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvdmFsdWUtZXF1YWwvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvUGF0aFV0aWxzLmpzIiksaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxhPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPXZvaWQgMDsic3RyaW5nIj09dHlwZW9mIGU/KGE9T2JqZWN0KHMuZCkoZSksYS5zdGF0ZT10KTooYT1pKHt9LGUpLHZvaWQgMD09PWEucGF0aG5hbWUmJihhLnBhdGhuYW1lPSIiKSxhLnNlYXJjaD8iPyIhPT1hLnNlYXJjaC5jaGFyQXQoMCkmJihhLnNlYXJjaD0iPyIrYS5zZWFyY2gpOmEuc2VhcmNoPSIiLGEuaGFzaD8iIyIhPT1hLmhhc2guY2hhckF0KDApJiYoYS5oYXNoPSIjIithLmhhc2gpOmEuaGFzaD0iIix2b2lkIDAhPT10JiZ2b2lkIDA9PT1hLnN0YXRlJiYoYS5zdGF0ZT10KSk7dHJ5e2EucGF0aG5hbWU9ZGVjb2RlVVJJKGEucGF0aG5hbWUpfWNhdGNoKGUpe3Rocm93IGUgaW5zdGFuY2VvZiBVUklFcnJvcj9uZXcgVVJJRXJyb3IoJ1BhdGhuYW1lICInK2EucGF0aG5hbWUrJyIgY291bGQgbm90IGJlIGRlY29kZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBlcmNlbnQtZW5jb2RpbmcuJyk6ZX1yZXR1cm4gbiYmKGEua2V5PW4pLG8/YS5wYXRobmFtZT8iLyIhPT1hLnBhdGhuYW1lLmNoYXJBdCgwKSYmKGEucGF0aG5hbWU9T2JqZWN0KHIuZGVmYXVsdCkoYS5wYXRobmFtZSxvLnBhdGhuYW1lKSk6YS5wYXRobmFtZT1vLnBhdGhuYW1lOmEucGF0aG5hbWV8fChhLnBhdGhuYW1lPSIvIiksYX0sbD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnBhdGhuYW1lPT09dC5wYXRobmFtZSYmZS5zZWFyY2g9PT10LnNlYXJjaCYmZS5oYXNoPT09dC5oYXNoJiZlLmtleT09PXQua2V5JiZPYmplY3Qoby5kZWZhdWx0KShlLnN0YXRlLHQuc3RhdGUpfX0sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvUGF0aFV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKHQsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCk/ZToiLyIrZX0sbz1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKTplfSxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4iK3QrIihcXC98XFw/fCN8JCkiLCJpIikudGVzdChlKX0saT1mdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCk/ZS5zdWJzdHIodC5sZW5ndGgpOmV9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoZS5sZW5ndGgtMSk/ZS5zbGljZSgwLC0xKTplfSxsPWZ1bmN0aW9uKGUpe3ZhciB0PWV8fCIvIixuPSIiLHI9IiIsbz10LmluZGV4T2YoIiMiKTstMSE9PW8mJihyPXQuc3Vic3RyKG8pLHQ9dC5zdWJzdHIoMCxvKSk7dmFyIHM9dC5pbmRleE9mKCI/Iik7cmV0dXJuLTEhPT1zJiYobj10LnN1YnN0cihzKSx0PXQuc3Vic3RyKDAscykpLHtwYXRobmFtZTp0LHNlYXJjaDoiPyI9PT1uPyIiOm4saGFzaDoiIyI9PT1yPyIiOnJ9fSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWUucGF0aG5hbWUsbj1lLnNlYXJjaCxyPWUuaGFzaCxvPXR8fCIvIjtyZXR1cm4gbiYmIj8iIT09biYmKG8rPSI/Ij09PW4uY2hhckF0KDApP246Ij8iK24pLHImJiIjIiE9PXImJihvKz0iIyI9PT1yLmNoYXJBdCgwKT9yOiIjIityKSxvfX0sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvd2FybmluZy9icm93c2VyLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9Mb2NhdGlvblV0aWxzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL1BhdGhVdGlscy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlci5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9ET01VdGlscy5qcyIpLGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LF89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gd2luZG93Lmhpc3Rvcnkuc3RhdGV8fHt9fWNhdGNoKGUpe3JldHVybnt9fX0sZj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpKCkoYy5iLCJCcm93c2VyIGhpc3RvcnkgbmVlZHMgYSBET00iKTt2YXIgdD13aW5kb3cuaGlzdG9yeSxuPU9iamVjdChjLmcpKCkscj0hT2JqZWN0KGMuaCkoKSxzPWUuZm9yY2VSZWZyZXNoLGY9dm9pZCAwIT09cyYmcyxtPWUuZ2V0VXNlckNvbmZpcm1hdGlvbixoPXZvaWQgMD09PW0/Yy5jOm0sZz1lLmtleUxlbmd0aCxiPXZvaWQgMD09PWc/NjpnLEU9ZS5iYXNlbmFtZT9PYmplY3QobC5nKShPYmplY3QobC5hKShlLmJhc2VuYW1lKSk6IiIseT1mdW5jdGlvbihlKXt2YXIgdD1lfHx7fSxuPXQua2V5LHI9dC5zdGF0ZSxzPXdpbmRvdy5sb2NhdGlvbixpPXMucGF0aG5hbWUsdT1zLnNlYXJjaCxjPXMuaGFzaCxkPWkrdStjO3JldHVybiBvKCkoIUV8fE9iamVjdChsLmMpKGQsRSksJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYSBiYXNlbmFtZSBvbiBhIHBhZ2Ugd2hvc2UgVVJMIHBhdGggZG9lcyBub3QgYmVnaW4gd2l0aCB0aGUgYmFzZW5hbWUuIEV4cGVjdGVkIHBhdGggIicrZCsnIiB0byBiZWdpbiB3aXRoICInK0UrJyIuJyksRSYmKGQ9T2JqZWN0KGwuZSkoZCxFKSksT2JqZWN0KGEuYSkoZCxyLG4pfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLGIpfSxUPU9iamVjdCh1LmEpKCksQT1mdW5jdGlvbihlKXtfKEcsZSksRy5sZW5ndGg9dC5sZW5ndGgsVC5ub3RpZnlMaXN0ZW5lcnMoRy5sb2NhdGlvbixHLmFjdGlvbil9LEM9ZnVuY3Rpb24oZSl7T2JqZWN0KGMuZCkoZSl8fFIoeShlLnN0YXRlKSl9LE89ZnVuY3Rpb24oKXtSKHkocCgpKSl9LFM9ITEsUj1mdW5jdGlvbihlKXtpZihTKVM9ITEsQSgpO2Vsc2V7VC5jb25maXJtVHJhbnNpdGlvblRvKGUsIlBPUCIsaCxmdW5jdGlvbih0KXt0P0Eoe2FjdGlvbjoiUE9QIixsb2NhdGlvbjplfSk6aihlKX0pfX0saj1mdW5jdGlvbihlKXt2YXIgdD1HLmxvY2F0aW9uLG49TC5pbmRleE9mKHQua2V5KTstMT09PW4mJihuPTApO3ZhciByPUwuaW5kZXhPZihlLmtleSk7LTE9PT1yJiYocj0wKTt2YXIgbz1uLXI7byYmKFM9ITAsayhvKSl9LHg9eShwKCkpLEw9W3gua2V5XSxEPWZ1bmN0aW9uKGUpe3JldHVybiBFK09iamVjdChsLmIpKGUpfSx3PWZ1bmN0aW9uKGUscil7bygpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpkKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09ciksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHB1c2ggd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciBzPU9iamVjdChhLmEpKGUscix2KCksRy5sb2NhdGlvbik7VC5jb25maXJtVHJhbnNpdGlvblRvKHMsIlBVU0giLGgsZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9RChzKSxpPXMua2V5LGE9cy5zdGF0ZTtpZihuKWlmKHQucHVzaFN0YXRlKHtrZXk6aSxzdGF0ZTphfSxudWxsLHIpLGYpd2luZG93LmxvY2F0aW9uLmhyZWY9cjtlbHNle3ZhciBsPUwuaW5kZXhPZihHLmxvY2F0aW9uLmtleSksdT1MLnNsaWNlKDAsLTE9PT1sPzA6bCsxKTt1LnB1c2gocy5rZXkpLEw9dSxBKHthY3Rpb246IlBVU0giLGxvY2F0aW9uOnN9KX1lbHNlIG8oKSh2b2lkIDA9PT1hLCJCcm93c2VyIGhpc3RvcnkgY2Fubm90IHB1c2ggc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5Iiksd2luZG93LmxvY2F0aW9uLmhyZWY9cn19KX0sTT1mdW5jdGlvbihlLHIpe28oKSghKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6ZChlKSkmJnZvaWQgMCE9PWUuc3RhdGUmJnZvaWQgMCE9PXIpLCJZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCBhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgcz1PYmplY3QoYS5hKShlLHIsdigpLEcubG9jYXRpb24pO1QuY29uZmlybVRyYW5zaXRpb25UbyhzLCJSRVBMQUNFIixoLGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPUQocyksaT1zLmtleSxhPXMuc3RhdGU7aWYobilpZih0LnJlcGxhY2VTdGF0ZSh7a2V5Omksc3RhdGU6YX0sbnVsbCxyKSxmKXdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHIpO2Vsc2V7dmFyIGw9TC5pbmRleE9mKEcubG9jYXRpb24ua2V5KTstMSE9PWwmJihMW2xdPXMua2V5KSxBKHthY3Rpb246IlJFUExBQ0UiLGxvY2F0aW9uOnN9KX1lbHNlIG8oKSh2b2lkIDA9PT1hLCJCcm93c2VyIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5Iiksd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uocil9fSl9LGs9ZnVuY3Rpb24oZSl7dC5nbyhlKX0sST1mdW5jdGlvbigpe3JldHVybiBrKC0xKX0sUD1mdW5jdGlvbigpe3JldHVybiBrKDEpfSxOPTAsSD1mdW5jdGlvbihlKXtOKz1lLDE9PT1OPyhPYmplY3QoYy5hKSh3aW5kb3csInBvcHN0YXRlIixDKSxyJiZPYmplY3QoYy5hKSh3aW5kb3csImhhc2hjaGFuZ2UiLE8pKTowPT09TiYmKE9iamVjdChjLmUpKHdpbmRvdywicG9wc3RhdGUiLEMpLHImJk9iamVjdChjLmUpKHdpbmRvdywiaGFzaGNoYW5nZSIsTykpfSxGPSExLEI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9VC5zZXRQcm9tcHQoZSk7cmV0dXJuIEZ8fChIKDEpLEY9ITApLGZ1bmN0aW9uKCl7cmV0dXJuIEYmJihGPSExLEgoLTEpKSx0KCl9fSxVPWZ1bmN0aW9uKGUpe3ZhciB0PVQuYXBwZW5kTGlzdGVuZXIoZSk7cmV0dXJuIEgoMSksZnVuY3Rpb24oKXtIKC0xKSx0KCl9fSxHPXtsZW5ndGg6dC5sZW5ndGgsYWN0aW9uOiJQT1AiLGxvY2F0aW9uOngsY3JlYXRlSHJlZjpELHB1c2g6dyxyZXBsYWNlOk0sZ286ayxnb0JhY2s6SSxnb0ZvcndhcmQ6UCxibG9jazpCLGxpc3RlbjpVfTtyZXR1cm4gR307dC5hPWZ9LCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL2NyZWF0ZUhhc2hIaXN0b3J5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvYnJvd3Nlci5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvTG9jYXRpb25VdGlscy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9QYXRoVXRpbHMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvRE9NVXRpbHMuanMiKSxkPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF89e2hhc2hiYW5nOntlbmNvZGVQYXRoOmZ1bmN0aW9uKGUpe3JldHVybiIhIj09PWUuY2hhckF0KDApP2U6IiEvIitPYmplY3QobC5mKShlKX0sZGVjb2RlUGF0aDpmdW5jdGlvbihlKXtyZXR1cm4iISI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKTplfX0sbm9zbGFzaDp7ZW5jb2RlUGF0aDpsLmYsZGVjb2RlUGF0aDpsLmF9LHNsYXNoOntlbmNvZGVQYXRoOmwuYSxkZWNvZGVQYXRoOmwuYX19LHA9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cubG9jYXRpb24uaHJlZix0PWUuaW5kZXhPZigiIyIpO3JldHVybi0xPT09dD8iIjplLnN1YnN0cmluZyh0KzEpfSxmPWZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cubG9jYXRpb24uaGFzaD1lfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PXdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKTt3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh3aW5kb3cubG9jYXRpb24uaHJlZi5zbGljZSgwLHQ+PTA/dDowKSsiIyIrZSl9LGg9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aSgpKGMuYiwiSGFzaCBoaXN0b3J5IG5lZWRzIGEgRE9NIik7dmFyIHQ9d2luZG93Lmhpc3Rvcnksbj1PYmplY3QoYy5mKSgpLHI9ZS5nZXRVc2VyQ29uZmlybWF0aW9uLHM9dm9pZCAwPT09cj9jLmM6cixoPWUuaGFzaFR5cGUsZz12b2lkIDA9PT1oPyJzbGFzaCI6aCxiPWUuYmFzZW5hbWU/T2JqZWN0KGwuZykoT2JqZWN0KGwuYSkoZS5iYXNlbmFtZSkpOiIiLEU9X1tnXSx5PUUuZW5jb2RlUGF0aCx2PUUuZGVjb2RlUGF0aCxUPWZ1bmN0aW9uKCl7dmFyIGU9dihwKCkpO3JldHVybiBvKCkoIWJ8fE9iamVjdChsLmMpKGUsYiksJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYSBiYXNlbmFtZSBvbiBhIHBhZ2Ugd2hvc2UgVVJMIHBhdGggZG9lcyBub3QgYmVnaW4gd2l0aCB0aGUgYmFzZW5hbWUuIEV4cGVjdGVkIHBhdGggIicrZSsnIiB0byBiZWdpbiB3aXRoICInK2IrJyIuJyksYiYmKGU9T2JqZWN0KGwuZSkoZSxiKSksT2JqZWN0KGEuYSkoZSl9LEE9T2JqZWN0KHUuYSkoKSxDPWZ1bmN0aW9uKGUpe2QoVyxlKSxXLmxlbmd0aD10Lmxlbmd0aCxBLm5vdGlmeUxpc3RlbmVycyhXLmxvY2F0aW9uLFcuYWN0aW9uKX0sTz0hMSxTPW51bGwsUj1mdW5jdGlvbigpe3ZhciBlPXAoKSx0PXkoZSk7aWYoZSE9PXQpbSh0KTtlbHNle3ZhciBuPVQoKSxyPVcubG9jYXRpb247aWYoIU8mJk9iamVjdChhLmIpKHIsbikpcmV0dXJuO2lmKFM9PT1PYmplY3QobC5iKShuKSlyZXR1cm47Uz1udWxsLGoobil9fSxqPWZ1bmN0aW9uKGUpe2lmKE8pTz0hMSxDKCk7ZWxzZXtBLmNvbmZpcm1UcmFuc2l0aW9uVG8oZSwiUE9QIixzLGZ1bmN0aW9uKHQpe3Q/Qyh7YWN0aW9uOiJQT1AiLGxvY2F0aW9uOmV9KTp4KGUpfSl9fSx4PWZ1bmN0aW9uKGUpe3ZhciB0PVcubG9jYXRpb24sbj1NLmxhc3RJbmRleE9mKE9iamVjdChsLmIpKHQpKTstMT09PW4mJihuPTApO3ZhciByPU0ubGFzdEluZGV4T2YoT2JqZWN0KGwuYikoZSkpOy0xPT09ciYmKHI9MCk7dmFyIG89bi1yO28mJihPPSEwLE4obykpfSxMPXAoKSxEPXkoTCk7TCE9PUQmJm0oRCk7dmFyIHc9VCgpLE09W09iamVjdChsLmIpKHcpXSxrPWZ1bmN0aW9uKGUpe3JldHVybiIjIit5KGIrT2JqZWN0KGwuYikoZSkpfSxJPWZ1bmN0aW9uKGUsdCl7bygpKHZvaWQgMD09PXQsIkhhc2ggaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciBuPU9iamVjdChhLmEpKGUsdm9pZCAwLHZvaWQgMCxXLmxvY2F0aW9uKTtBLmNvbmZpcm1UcmFuc2l0aW9uVG8obiwiUFVTSCIscyxmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1PYmplY3QobC5iKShuKSxyPXkoYit0KTtpZihwKCkhPT1yKXtTPXQsZihyKTt2YXIgcz1NLmxhc3RJbmRleE9mKE9iamVjdChsLmIpKFcubG9jYXRpb24pKSxpPU0uc2xpY2UoMCwtMT09PXM/MDpzKzEpO2kucHVzaCh0KSxNPWksQyh7YWN0aW9uOiJQVVNIIixsb2NhdGlvbjpufSl9ZWxzZSBvKCkoITEsIkhhc2ggaGlzdG9yeSBjYW5ub3QgUFVTSCB0aGUgc2FtZSBwYXRoOyBhIG5ldyBlbnRyeSB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgaGlzdG9yeSBzdGFjayIpLEMoKX19KX0sUD1mdW5jdGlvbihlLHQpe28oKSh2b2lkIDA9PT10LCJIYXNoIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgbj1PYmplY3QoYS5hKShlLHZvaWQgMCx2b2lkIDAsVy5sb2NhdGlvbik7QS5jb25maXJtVHJhbnNpdGlvblRvKG4sIlJFUExBQ0UiLHMsZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9T2JqZWN0KGwuYikobikscj15KGIrdCk7cCgpIT09ciYmKFM9dCxtKHIpKTt2YXIgbz1NLmluZGV4T2YoT2JqZWN0KGwuYikoVy5sb2NhdGlvbikpOy0xIT09byYmKE1bb109dCksQyh7YWN0aW9uOiJSRVBMQUNFIixsb2NhdGlvbjpufSl9fSl9LE49ZnVuY3Rpb24oZSl7bygpKG4sIkhhc2ggaGlzdG9yeSBnbyhuKSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkIGluIHRoaXMgYnJvd3NlciIpLHQuZ28oZSl9LEg9ZnVuY3Rpb24oKXtyZXR1cm4gTigtMSl9LEY9ZnVuY3Rpb24oKXtyZXR1cm4gTigxKX0sQj0wLFU9ZnVuY3Rpb24oZSl7Qis9ZSwxPT09Qj9PYmplY3QoYy5hKSh3aW5kb3csImhhc2hjaGFuZ2UiLFIpOjA9PT1CJiZPYmplY3QoYy5lKSh3aW5kb3csImhhc2hjaGFuZ2UiLFIpfSxHPSExLHo9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9QS5zZXRQcm9tcHQoZSk7cmV0dXJuIEd8fChVKDEpLEc9ITApLGZ1bmN0aW9uKCl7cmV0dXJuIEcmJihHPSExLFUoLTEpKSx0KCl9fSxWPWZ1bmN0aW9uKGUpe3ZhciB0PUEuYXBwZW5kTGlzdGVuZXIoZSk7cmV0dXJuIFUoMSksZnVuY3Rpb24oKXtVKC0xKSx0KCl9fSxXPXtsZW5ndGg6dC5sZW5ndGgsYWN0aW9uOiJQT1AiLGxvY2F0aW9uOncsY3JlYXRlSHJlZjprLHB1c2g6SSxyZXBsYWNlOlAsZ286Tixnb0JhY2s6SCxnb0ZvcndhcmQ6RixibG9jazp6LGxpc3RlbjpWfTtyZXR1cm4gV307dC5hPWh9LCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL2NyZWF0ZU1lbW9yeUhpc3RvcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvd2FybmluZy9icm93c2VyLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL1BhdGhVdGlscy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9Mb2NhdGlvblV0aWxzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIiksbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxjPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0KSxuKX0sZD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUuZ2V0VXNlckNvbmZpcm1hdGlvbixuPWUuaW5pdGlhbEVudHJpZXMscj12b2lkIDA9PT1uP1siLyJdOm4sZD1lLmluaXRpYWxJbmRleCxfPXZvaWQgMD09PWQ/MDpkLHA9ZS5rZXlMZW5ndGgsZj12b2lkIDA9PT1wPzY6cCxtPU9iamVjdChhLmEpKCksaD1mdW5jdGlvbihlKXt1KHgsZSkseC5sZW5ndGg9eC5lbnRyaWVzLmxlbmd0aCxtLm5vdGlmeUxpc3RlbmVycyh4LmxvY2F0aW9uLHguYWN0aW9uKX0sZz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMixmKX0sYj1jKF8sMCxyLmxlbmd0aC0xKSxFPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9PYmplY3QoaS5hKShlLHZvaWQgMCxnKCkpOk9iamVjdChpLmEpKGUsdm9pZCAwLGUua2V5fHxnKCkpfSkseT1zLmIsdj1mdW5jdGlvbihlLG4pe28oKSghKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6bChlKSkmJnZvaWQgMCE9PWUuc3RhdGUmJnZvaWQgMCE9PW4pLCJZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCBhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgcj1PYmplY3QoaS5hKShlLG4sZygpLHgubG9jYXRpb24pO20uY29uZmlybVRyYW5zaXRpb25UbyhyLCJQVVNIIix0LGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXguaW5kZXgsbj10KzEsbz14LmVudHJpZXMuc2xpY2UoMCk7by5sZW5ndGg+bj9vLnNwbGljZShuLG8ubGVuZ3RoLW4scik6by5wdXNoKHIpLGgoe2FjdGlvbjoiUFVTSCIsbG9jYXRpb246cixpbmRleDpuLGVudHJpZXM6b30pfX0pfSxUPWZ1bmN0aW9uKGUsbil7bygpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09biksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHJlcGxhY2Ugd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciByPU9iamVjdChpLmEpKGUsbixnKCkseC5sb2NhdGlvbik7bS5jb25maXJtVHJhbnNpdGlvblRvKHIsIlJFUExBQ0UiLHQsZnVuY3Rpb24oZSl7ZSYmKHguZW50cmllc1t4LmluZGV4XT1yLGgoe2FjdGlvbjoiUkVQTEFDRSIsbG9jYXRpb246cn0pKX0pfSxBPWZ1bmN0aW9uKGUpe3ZhciBuPWMoeC5pbmRleCtlLDAseC5lbnRyaWVzLmxlbmd0aC0xKSxyPXguZW50cmllc1tuXTttLmNvbmZpcm1UcmFuc2l0aW9uVG8ociwiUE9QIix0LGZ1bmN0aW9uKGUpe2U/aCh7YWN0aW9uOiJQT1AiLGxvY2F0aW9uOnIsaW5kZXg6bn0pOmgoKX0pfSxDPWZ1bmN0aW9uKCl7cmV0dXJuIEEoLTEpfSxPPWZ1bmN0aW9uKCl7cmV0dXJuIEEoMSl9LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pbmRleCtlO3JldHVybiB0Pj0wJiZ0PHguZW50cmllcy5sZW5ndGh9LFI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiBtLnNldFByb21wdChlKX0saj1mdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBlbmRMaXN0ZW5lcihlKX0seD17bGVuZ3RoOkUubGVuZ3RoLGFjdGlvbjoiUE9QIixsb2NhdGlvbjpFW2JdLGluZGV4OmIsZW50cmllczpFLGNyZWF0ZUhyZWY6eSxwdXNoOnYscmVwbGFjZTpULGdvOkEsZ29CYWNrOkMsZ29Gb3J3YXJkOk8sY2FuR286UyxibG9jazpSLGxpc3RlbjpqfTtyZXR1cm4geH07dC5hPWR9LCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvYnJvd3Nlci5qcyIpLG89bi5uKHIpLHM9ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8oKShudWxsPT1lLCJBIGhpc3Rvcnkgc3VwcG9ydHMgb25seSBvbmUgcHJvbXB0IGF0IGEgdGltZSIpLGU9dCxmdW5jdGlvbigpe2U9PT10JiYoZT1udWxsKX19LG49ZnVuY3Rpb24odCxuLHIscyl7aWYobnVsbCE9ZSl7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSh0LG4pOmU7InN0cmluZyI9PXR5cGVvZiBpPyJmdW5jdGlvbiI9PXR5cGVvZiByP3IoaSxzKToobygpKCExLCJBIGhpc3RvcnkgbmVlZHMgYSBnZXRVc2VyQ29uZmlybWF0aW9uIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHVzZSBhIHByb21wdCBtZXNzYWdlIikscyghMCkpOnMoITEhPT1pKX1lbHNlIHMoITApfSxyPVtdO3JldHVybntzZXRQcm9tcHQ6dCxjb25maXJtVHJhbnNpdGlvblRvOm4sYXBwZW5kTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj1mdW5jdGlvbigpe3QmJmUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9O3JldHVybiByLnB1c2gobiksZnVuY3Rpb24oKXt0PSExLHI9ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1ufSl9fSxub3RpZnlMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3IuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseSh2b2lkIDAsdCl9KX19fTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiKTtuLmQodCwiY3JlYXRlQnJvd3Nlckhpc3RvcnkiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvY3JlYXRlSGFzaEhpc3RvcnkuanMiKTtuLmQodCwiY3JlYXRlSGFzaEhpc3RvcnkiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvZXMvY3JlYXRlTWVtb3J5SGlzdG9yeS5qcyIpO24uZCh0LCJjcmVhdGVNZW1vcnlIaXN0b3J5IixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL0xvY2F0aW9uVXRpbHMuanMiKTtuLmQodCwiY3JlYXRlTG9jYXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pLG4uZCh0LCJsb2NhdGlvbnNBcmVFcXVhbCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5ifSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lcy9QYXRoVXRpbHMuanMiKTtuLmQodCwicGFyc2VQYXRoIixmdW5jdGlvbigpe3JldHVybiBhLmR9KSxuLmQodCwiY3JlYXRlUGF0aCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5ifSl9LCIuL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2lmKGQpe3ZhciBfPWModCk7XyYmXyE9PWQmJnIoZSxfLG4pfXZhciBwPWEodCk7bCYmKHA9cC5jb25jYXQobCh0KSkpO2Zvcih2YXIgZj0wO2Y8cC5sZW5ndGg7KytmKXt2YXIgbT1wW2ZdO2lmKCEob1ttXXx8c1ttXXx8biYmblttXSkpe3ZhciBoPXUodCxtKTt0cnl7aShlLG0saCl9Y2F0Y2goZSl7fX19cmV0dXJuIGV9cmV0dXJuIGV9dmFyIG89e2NoaWxkQ29udGV4dFR5cGVzOiEwLGNvbnRleHRUeXBlczohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAsZ2V0RGVmYXVsdFByb3BzOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxtaXhpbnM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LHM9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0saT1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGM9T2JqZWN0LmdldFByb3RvdHlwZU9mLGQ9YyYmYyhPYmplY3QpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvaHRtbC1kb20tcGFyc2VyL2xpYi9kb21wYXJzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLWRvbS1wYXJzZXIvbGliL3V0aWxpdGllcy5qcyIpLHM9by5pc0lFLGk9LzwoW2EtekEtWl0rWzAtOV0/KS8sYT0vPFwvaGVhZD4vaSxsPS88XC9ib2R5Pi9pLHU9LzwoYXJlYXxiYXNlfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8a2V5Z2VufGxpbmt8bWVudWl0ZW18bWV0YXxwYXJhbXxzb3VyY2V8dHJhY2t8d2JyKSguKj8pXC8/Pi9naSxjPXMoKSxkPXMoOSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5ET01QYXJzZXIpe3ZhciBfPW5ldyB3aW5kb3cuRE9NUGFyc2VyLHA9ZD8idGV4dC94bWwiOiJ0ZXh0L2h0bWwiO3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmKGU9WyI8Iix0LCI+IixlLCI8LyIsdCwiPiJdLmpvaW4oIiIpKSxkJiYoZT1lLnJlcGxhY2UodSwiPCQxJDIkMy8+IikpLF8ucGFyc2VGcm9tU3RyaW5nKGUscCl9fXZhciBmO2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24pe3ZhciBtPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChjPyJIVE1MX0RPTV9QQVJTRVJfVElUTEUiOnZvaWQgMCk7Zj1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIG0uZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdLmlubmVySFRNTD1lLG07dHJ5e3JldHVybiBtLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9ZSxtfWNhdGNoKHQpe2lmKHIpcmV0dXJuIHIoZSl9fX12YXIgaCxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7Zy5jb250ZW50JiYoaD1mdW5jdGlvbihlKXtyZXR1cm4gZy5pbm5lckhUTUw9ZSxnLmNvbnRlbnQuY2hpbGROb2Rlc30pO3ZhciBiPWZ8fHI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5tYXRjaChpKTtuJiZuWzFdJiYodD1uWzFdLnRvTG93ZXJDYXNlKCkpO3ZhciBvLHMsdTtzd2l0Y2godCl7Y2FzZSJodG1sIjppZihyKXJldHVybiBvPXIoZSksYS50ZXN0KGUpfHwocz1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0pJiZzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyksbC50ZXN0KGUpfHwocz1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0pJiZzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyksby5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpO2JyZWFrO2Nhc2UiaGVhZCI6aWYoYilyZXR1cm4gdT1iKGUpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIiksbC50ZXN0KGUpP3VbMF0ucGFyZW50Tm9kZS5jaGlsZE5vZGVzOnU7YnJlYWs7Y2FzZSJib2R5IjppZihiKXJldHVybiB1PWIoZSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKSxhLnRlc3QoZSk/dVswXS5wYXJlbnROb2RlLmNoaWxkTm9kZXM6dTticmVhaztkZWZhdWx0OmlmKGgpcmV0dXJuIGgoZSk7aWYoYilyZXR1cm4gYihlLCJib2R5IikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jaGlsZE5vZGVzfXJldHVybltdfX0sIi4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9saWIvaHRtbC10by1kb20tY2xpZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtZG9tLXBhcnNlci9saWIvZG9tcGFyc2VyLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLWRvbS1wYXJzZXIvbGliL3V0aWxpdGllcy5qcyIpLHM9by5mb3JtYXRET00saT1vLmlzSUUoOSksYT0vPCghW2EtekEtWlxzXSspPi87ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpO2lmKCFlKXJldHVybltdO3ZhciB0LG49ZS5tYXRjaChhKTtyZXR1cm4gbiYmblsxXSYmKHQ9blsxXSxpJiYoZT1lLnJlcGxhY2UoblswXSwiIikpKSxzKHIoZSksbnVsbCx0KX19LCIuL25vZGVfbW9kdWxlcy9odG1sLWRvbS1wYXJzZXIvbGliL3V0aWxpdGllcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdCxuPXt9LHI9MCxvPWUubGVuZ3RoO3I8bztyKyspdD1lW3JdLG5bdC5uYW1lXT10LnZhbHVlO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0LG4pe3Q9dHx8bnVsbDtmb3IodmFyIHMsaSxhLGw9W10sdT0wLGM9ZS5sZW5ndGg7dTxjO3UrKyl7c3dpdGNoKHM9ZVt1XSxhPXtuZXh0Om51bGwscHJldjpsW3UtMV18fG51bGwscGFyZW50OnR9LGk9bFt1LTFdLGkmJihpLm5leHQ9YSksMCE9PXMubm9kZU5hbWUuaW5kZXhPZigiIyIpJiYoYS5uYW1lPXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhLmF0dHJpYnM9e30scy5hdHRyaWJ1dGVzJiZzLmF0dHJpYnV0ZXMubGVuZ3RoJiYoYS5hdHRyaWJzPXIocy5hdHRyaWJ1dGVzKSkpLHMubm9kZVR5cGUpe2Nhc2UgMToic2NyaXB0Ij09PWEubmFtZXx8InN0eWxlIj09PWEubmFtZT9hLnR5cGU9YS5uYW1lOmEudHlwZT0idGFnIixhLmNoaWxkcmVuPW8ocy5jaGlsZE5vZGVzLGEpO2JyZWFrO2Nhc2UgMzphLnR5cGU9InRleHQiLGEuZGF0YT1zLm5vZGVWYWx1ZTticmVhaztjYXNlIDg6YS50eXBlPSJjb21tZW50IixhLmRhdGE9cy5ub2RlVmFsdWV9bC5wdXNoKGEpfXJldHVybiBuJiYobC51bnNoaWZ0KHtuYW1lOm4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKCIgIikpLnRvTG93ZXJDYXNlKCksZGF0YTpuLHR5cGU6ImRpcmVjdGl2ZSIsbmV4dDpsWzBdP2xbMF06bnVsbCxwcmV2Om51bGwscGFyZW50OnR9KSxsWzFdJiYobFsxXS5wcmV2PWxbMF0pKSxsfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGU/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPT09ZTovKE1TSUUgfFRyaWRlbnRcL3xFZGdlXC8pLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfWUuZXhwb3J0cz17Zm9ybWF0QXR0cmlidXRlczpyLGZvcm1hdERPTTpvLGlzSUU6c319LCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gbyhzKGUsaSksdCl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvbGliL2RvbS10by1yZWFjdC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1kb20tcGFyc2VyL2xpYi9odG1sLXRvLWRvbS1jbGllbnQuanMiKSxpPXtkZWNvZGVFbnRpdGllczohMH07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9saWIvYXR0cmlidXRlcy10by1wcm9wcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2U9ZXx8e307dmFyIHQsbixyLHM9e307Zm9yKHQgaW4gZSluPWVbdF0sdSh0KT9zW3RdPW46KHI9bC5odG1sW3QudG9Mb3dlckNhc2UoKV0scj9jLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocikmJmMucHJvcGVydGllc1tyXS5oYXNCb29sZWFuVmFsdWU/c1tyXT0hMDpzW3JdPW46KHI9bC5zdmdbdF0pJiYoc1tyXT1uKSk7cmV0dXJuIG51bGwhPWUuc3R5bGUmJihzLnN0eWxlPW8oZS5zdHlsZSkpLHN9ZnVuY3Rpb24gbyhlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJgY3NzVG9Kc2A6IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuICIpO3ZhciB0PXt9O3JldHVybiBhKGUsZnVuY3Rpb24oZSxuKXtlJiZuJiYodFtzLmNhbWVsQ2FzZShlKV09bil9KSx0fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi91dGlsaXRpZXMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi9wcm9wZXJ0eS1jb25maWcuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N0eWxlLXRvLW9iamVjdC9pbmRleC5qcyIpLGw9aS5jb25maWcsdT1pLkhUTUxET01Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb3JlL2xpYi9ET01Qcm9wZXJ0eS5qcyIpO2MuaW5qZWN0aW9uLmluamVjdERPTVByb3BlcnR5Q29uZmlnKGkuSFRNTERPTVByb3BlcnR5Q29uZmlnKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi9kb20tdG8tcmVhY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3Q9dHx8e307Zm9yKHZhciBuLGksYSxsLHU9W10sYz0iZnVuY3Rpb24iPT10eXBlb2YgdC5yZXBsYWNlLGQ9MCxfPWUubGVuZ3RoO2Q8XztkKyspaWYobj1lW2RdLGMmJihpPXQucmVwbGFjZShuKSxvLmlzVmFsaWRFbGVtZW50KGkpKSlfPjEmJihpPW8uY2xvbmVFbGVtZW50KGkse2tleTpkfSkpLHUucHVzaChpKTtlbHNlIGlmKCJ0ZXh0IiE9PW4udHlwZSl7aWYoYT1zKG4uYXR0cmlicyksbD1udWxsLCJzY3JpcHQiPT09bi50eXBlfHwic3R5bGUiPT09bi50eXBlKW4uY2hpbGRyZW5bMF0mJihhLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtfX2h0bWw6bi5jaGlsZHJlblswXS5kYXRhfSk7ZWxzZXtpZigidGFnIiE9PW4udHlwZSljb250aW51ZTsidGV4dGFyZWEiPT09bi5uYW1lJiZuLmNoaWxkcmVuWzBdP2EuZGVmYXVsdFZhbHVlPW4uY2hpbGRyZW5bMF0uZGF0YTpuLmNoaWxkcmVuJiZuLmNoaWxkcmVuLmxlbmd0aCYmKGw9cihuLmNoaWxkcmVuLHQpKX1fPjEmJihhLmtleT1kKSx1LnB1c2goby5jcmVhdGVFbGVtZW50KG4ubmFtZSxhLGwpKX1lbHNlIHUucHVzaChuLmRhdGEpO3JldHVybiAxPT09dS5sZW5ndGg/dVswXTp1fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9saWIvYXR0cmlidXRlcy10by1wcm9wcy5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvbGliL3Byb3BlcnR5LWNvbmZpZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2xpYi91dGlsaXRpZXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb3JlL2xpYi9IVE1MRE9NUHJvcGVydHlDb25maWcuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb3JlL2xpYi9TVkdET01Qcm9wZXJ0eUNvbmZpZy5qcyIpLGE9e2h0bWw6e30sc3ZnOnt9fTthLmh0bWw9by5pbnZlcnRPYmplY3Qocy5ET01BdHRyaWJ1dGVOYW1lcyk7Zm9yKHIgaW4gcy5Qcm9wZXJ0aWVzKWEuaHRtbFtyLnRvTG93ZXJDYXNlKCldPXI7YS5zdmc9by5pbnZlcnRPYmplY3QoaS5ET01BdHRyaWJ1dGVOYW1lcyk7Zm9yKHIgaW4gaS5Qcm9wZXJ0aWVzKWEuaHRtbFtyXT1yO2UuZXhwb3J0cz17Y29uZmlnOmEsSFRNTERPTVByb3BlcnR5Q29uZmlnOnMsU1ZHRE9NUHJvcGVydHlDb25maWc6aX19LCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9saWIvdXRpbGl0aWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gZS5pbmRleE9mKCItIik8MD9lOmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gbyhlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8IWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QiKTt2YXIgbixyLG89ImZ1bmN0aW9uIj09dHlwZW9mIHQscz17fSxpPXt9O2ZvcihuIGluIGUpcj1lW25dLG8mJihzPXQobixyKSkmJjI9PT1zLmxlbmd0aD9pW3NbMF1dPXNbMV06InN0cmluZyI9PXR5cGVvZiByJiYoaVtyXT1uKTtyZXR1cm4gaX12YXIgcz0vLSguKS9nO2UuZXhwb3J0cz17Y2FtZWxDYXNlOnIsaW52ZXJ0T2JqZWN0Om99fSwiLi9ub2RlX21vZHVsZXMvaHlwaGVuYXRlLXN0eWxlLW5hbWUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iLSIrZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7aWYoYS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gYVtlXTt2YXIgdD1lLnJlcGxhY2UocyxyKTtyZXR1cm4gYVtlXT1pLnRlc3QodCk/Ii0iK3Q6dH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9L1tBLVpdL2csaT0vXm1zLS8sYT17fTt0LmRlZmF1bHQ9b30sIi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7dC5yZWFkPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHMsaSxhPTgqby1yLTEsbD0oMTw8YSktMSx1PWw+PjEsYz0tNyxkPW4/by0xOjAsXz1uPy0xOjEscD1lW3QrZF07Zm9yKGQrPV8scz1wJigxPDwtYyktMSxwPj49LWMsYys9YTtjPjA7cz0yNTYqcytlW3QrZF0sZCs9XyxjLT04KTtmb3IoaT1zJigxPDwtYyktMSxzPj49LWMsYys9cjtjPjA7aT0yNTYqaStlW3QrZF0sZCs9XyxjLT04KTtpZigwPT09cylzPTEtdTtlbHNle2lmKHM9PT1sKXJldHVybiBpP05hTjoxLzAqKHA/LTE6MSk7aSs9TWF0aC5wb3coMixyKSxzLT11fXJldHVybihwPy0xOjEpKmkqTWF0aC5wb3coMixzLXIpfSx0LndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxzKXt2YXIgaSxhLGwsdT04KnMtby0xLGM9KDE8PHUpLTEsZD1jPj4xLF89MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPXI/MDpzLTEsZj1yPzE6LTEsbT10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLGk9Yyk6KGk9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoobD1NYXRoLnBvdygyLC1pKSk8MSYmKGktLSxsKj0yKSx0Kz1pK2Q+PTE/Xy9sOl8qTWF0aC5wb3coMiwxLWQpLHQqbD49MiYmKGkrKyxsLz0yKSxpK2Q+PWM/KGE9MCxpPWMpOmkrZD49MT8oYT0odCpsLTEpKk1hdGgucG93KDIsbyksaSs9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixvKSxpPTApKTtvPj04O2VbbitwXT0yNTUmYSxwKz1mLGEvPTI1NixvLT04KTtmb3IoaT1pPDxvfGEsdSs9bzt1PjA7ZVtuK3BdPTI1NSZpLHArPWYsaS89MjU2LHUtPTgpO2VbbitwLWZdfD0xMjgqbX19LCIuL25vZGVfbW9kdWxlcy9pbW11dGFibGUvZGlzdC9pbW11dGFibGUuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt0JiYoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSkpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdChlKXtyZXR1cm4gcyhlKT9lOngoZSl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gaShlKT9lOkwoZSl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gYShlKT9lOkQoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gcyhlKSYmIWwoZSk/ZTp3KGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuISghZXx8IWVbdW5dKX1mdW5jdGlvbiBpKGUpe3JldHVybiEoIWV8fCFlW2NuXSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4hKCFlfHwhZVtkbl0pfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGkoZSl8fGEoZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4hKCFlfHwhZVtfbl0pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUudmFsdWU9ITEsZX1mdW5jdGlvbiBkKGUpe2UmJihlLnZhbHVlPSEwKX1mdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIHAoZSx0KXt0PXR8fDA7Zm9yKHZhciBuPU1hdGgubWF4KDAsZS5sZW5ndGgtdCkscj1uZXcgQXJyYXkobiksbz0wO288bjtvKyspcltvXT1lW28rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gZihlKXtyZXR1cm4gdm9pZCAwPT09ZS5zaXplJiYoZS5zaXplPWUuX19pdGVyYXRlKGgpKSxlLnNpemV9ZnVuY3Rpb24gbShlLHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl7dmFyIG49dD4+PjA7aWYoIiIrbiE9PXR8fDQyOTQ5NjcyOTU9PT1uKXJldHVybiBOYU47dD1ufXJldHVybiB0PDA/ZihlKSt0OnR9ZnVuY3Rpb24gaCgpe3JldHVybiEwfWZ1bmN0aW9uIGcoZSx0LG4pe3JldHVybigwPT09ZXx8dm9pZCAwIT09biYmZTw9LW4pJiYodm9pZCAwPT09dHx8dm9pZCAwIT09biYmdD49bil9ZnVuY3Rpb24gYihlLHQpe3JldHVybiB5KGUsdCwwKX1mdW5jdGlvbiBFKGUsdCl7cmV0dXJuIHkoZSx0LHQpfWZ1bmN0aW9uIHkoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1lP246ZTwwP01hdGgubWF4KDAsdCtlKTp2b2lkIDA9PT10P2U6TWF0aC5taW4odCxlKX1mdW5jdGlvbiB2KGUpe3RoaXMubmV4dD1lfWZ1bmN0aW9uIFQoZSx0LG4scil7dmFyIG89MD09PWU/dDoxPT09ZT9uOlt0LG5dO3JldHVybiByP3IudmFsdWU9bzpyPXt2YWx1ZTpvLGRvbmU6ITF9LHJ9ZnVuY3Rpb24gQSgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19ZnVuY3Rpb24gQyhlKXtyZXR1cm4hIVIoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dH1mdW5jdGlvbiBTKGUpe3ZhciB0PVIoZSk7cmV0dXJuIHQmJnQuY2FsbChlKX1mdW5jdGlvbiBSKGUpe3ZhciB0PWUmJihUbiYmZVtUbl18fGVbQW5dKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdH1mdW5jdGlvbiBqKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RofWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lP0goKTpzKGUpP2UudG9TZXEoKTpVKGUpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lP0goKS50b0tleWVkU2VxKCk6cyhlKT9pKGUpP2UudG9TZXEoKTplLmZyb21FbnRyeVNlcSgpOkYoZSl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/SCgpOnMoZSk/aShlKT9lLmVudHJ5U2VxKCk6ZS50b0luZGV4ZWRTZXEoKTpCKGUpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuKG51bGw9PT1lfHx2b2lkIDA9PT1lP0goKTpzKGUpP2koZSk/ZS5lbnRyeVNlcSgpOmU6QihlKSkudG9TZXRTZXEoKX1mdW5jdGlvbiBNKGUpe3RoaXMuX2FycmF5PWUsdGhpcy5zaXplPWUubGVuZ3RofWZ1bmN0aW9uIGsoZSl7dmFyIHQ9T2JqZWN0LmtleXMoZSk7dGhpcy5fb2JqZWN0PWUsdGhpcy5fa2V5cz10LHRoaXMuc2l6ZT10Lmxlbmd0aH1mdW5jdGlvbiBJKGUpe3RoaXMuX2l0ZXJhYmxlPWUsdGhpcy5zaXplPWUubGVuZ3RofHxlLnNpemV9ZnVuY3Rpb24gUChlKXt0aGlzLl9pdGVyYXRvcj1lLHRoaXMuX2l0ZXJhdG9yQ2FjaGU9W119ZnVuY3Rpb24gTihlKXtyZXR1cm4hKCFlfHwhZVtPbl0pfWZ1bmN0aW9uIEgoKXtyZXR1cm4gU258fChTbj1uZXcgTShbXSkpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9uZXcgTShlKS5mcm9tRW50cnlTZXEoKTpPKGUpP25ldyBQKGUpLmZyb21FbnRyeVNlcSgpOkMoZSk/bmV3IEkoZSkuZnJvbUVudHJ5U2VxKCk6Im9iamVjdCI9PXR5cGVvZiBlP25ldyBrKGUpOnZvaWQgMDtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBBcnJheSBvciBpdGVyYWJsZSBvYmplY3Qgb2YgW2ssIHZdIGVudHJpZXMsIG9yIGtleWVkIG9iamVjdDogIitlKTtyZXR1cm4gdH1mdW5jdGlvbiBCKGUpe3ZhciB0PUcoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgQXJyYXkgb3IgaXRlcmFibGUgb2JqZWN0IG9mIHZhbHVlczogIitlKTtyZXR1cm4gdH1mdW5jdGlvbiBVKGUpe3ZhciB0PUcoZSl8fCJvYmplY3QiPT10eXBlb2YgZSYmbmV3IGsoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgQXJyYXkgb3IgaXRlcmFibGUgb2JqZWN0IG9mIHZhbHVlcywgb3Iga2V5ZWQgb2JqZWN0OiAiK2UpO3JldHVybiB0fWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGooZSk/bmV3IE0oZSk6TyhlKT9uZXcgUChlKTpDKGUpP25ldyBJKGUpOnZvaWQgMH1mdW5jdGlvbiB6KGUsdCxuLHIpe3ZhciBvPWUuX2NhY2hlO2lmKG8pe2Zvcih2YXIgcz1vLmxlbmd0aC0xLGk9MDtpPD1zO2krKyl7dmFyIGE9b1tuP3MtaTppXTtpZighMT09PXQoYVsxXSxyP2FbMF06aSxlKSlyZXR1cm4gaSsxfXJldHVybiBpfXJldHVybiBlLl9faXRlcmF0ZVVuY2FjaGVkKHQsbil9ZnVuY3Rpb24gVihlLHQsbixyKXt2YXIgbz1lLl9jYWNoZTtpZihvKXt2YXIgcz1vLmxlbmd0aC0xLGk9MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXt2YXIgZT1vW24/cy1pOmldO3JldHVybiBpKys+cz9BKCk6VCh0LHI/ZVswXTppLTEsZVsxXSl9KX1yZXR1cm4gZS5fX2l0ZXJhdG9yVW5jYWNoZWQodCxuKX1mdW5jdGlvbiBXKGUsdCl7cmV0dXJuIHQ/WSh0LGUsIiIseyIiOmV9KTpxKGUpfWZ1bmN0aW9uIFkoZSx0LG4scil7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZS5jYWxsKHIsbixEKHQpLm1hcChmdW5jdGlvbihuLHIpe3JldHVybiBZKGUsbixyLHQpfSkpOksodCk/ZS5jYWxsKHIsbixMKHQpLm1hcChmdW5jdGlvbihuLHIpe3JldHVybiBZKGUsbixyLHQpfSkpOnR9ZnVuY3Rpb24gcShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9EKGUpLm1hcChxKS50b0xpc3QoKTpLKGUpP0woZSkubWFwKHEpLnRvTWFwKCk6ZX1mdW5jdGlvbiBLKGUpe3JldHVybiBlJiYoZS5jb25zdHJ1Y3Rvcj09PU9iamVjdHx8dm9pZCAwPT09ZS5jb25zdHJ1Y3Rvcil9ZnVuY3Rpb24gWChlLHQpe2lmKGU9PT10fHxlIT09ZSYmdCE9PXQpcmV0dXJuITA7aWYoIWV8fCF0KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Ype2lmKGU9ZS52YWx1ZU9mKCksdD10LnZhbHVlT2YoKSxlPT09dHx8ZSE9PWUmJnQhPT10KXJldHVybiEwO2lmKCFlfHwhdClyZXR1cm4hMX1yZXR1cm4hKCJmdW5jdGlvbiIhPXR5cGVvZiBlLmVxdWFsc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuZXF1YWxzfHwhZS5lcXVhbHModCkpfWZ1bmN0aW9uICQoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZighcyh0KXx8dm9pZCAwIT09ZS5zaXplJiZ2b2lkIDAhPT10LnNpemUmJmUuc2l6ZSE9PXQuc2l6ZXx8dm9pZCAwIT09ZS5fX2hhc2gmJnZvaWQgMCE9PXQuX19oYXNoJiZlLl9faGFzaCE9PXQuX19oYXNofHxpKGUpIT09aSh0KXx8YShlKSE9PWEodCl8fHUoZSkhPT11KHQpKXJldHVybiExO2lmKDA9PT1lLnNpemUmJjA9PT10LnNpemUpcmV0dXJuITA7dmFyIG49IWwoZSk7aWYodShlKSl7dmFyIHI9ZS5lbnRyaWVzKCk7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24oZSx0KXt2YXIgbz1yLm5leHQoKS52YWx1ZTtyZXR1cm4gbyYmWChvWzFdLGUpJiYobnx8WChvWzBdLHQpKX0pJiZyLm5leHQoKS5kb25lfXZhciBvPSExO2lmKHZvaWQgMD09PWUuc2l6ZSlpZih2b2lkIDA9PT10LnNpemUpImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FjaGVSZXN1bHQmJmUuY2FjaGVSZXN1bHQoKTtlbHNle289ITA7dmFyIGM9ZTtlPXQsdD1jfXZhciBkPSEwLF89dC5fX2l0ZXJhdGUoZnVuY3Rpb24odCxyKXtpZihuPyFlLmhhcyh0KTpvPyFYKHQsZS5nZXQocixobikpOiFYKGUuZ2V0KHIsaG4pLHQpKXJldHVybiBkPSExLCExfSk7cmV0dXJuIGQmJmUuc2l6ZT09PV99ZnVuY3Rpb24gUShlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFEpKXJldHVybiBuZXcgUShlLHQpO2lmKHRoaXMuX3ZhbHVlPWUsdGhpcy5zaXplPXZvaWQgMD09PXQ/MS8wOk1hdGgubWF4KDAsdCksMD09PXRoaXMuc2l6ZSl7aWYoUm4pcmV0dXJuIFJuO1JuPXRoaXN9fWZ1bmN0aW9uIEooZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gWihlLHQsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgWikpcmV0dXJuIG5ldyBaKGUsdCxuKTtpZihKKDAhPT1uLCJDYW5ub3Qgc3RlcCBhIFJhbmdlIGJ5IDAiKSxlPWV8fDAsdm9pZCAwPT09dCYmKHQ9MS8wKSxuPXZvaWQgMD09PW4/MTpNYXRoLmFicyhuKSx0PGUmJihuPS1uKSx0aGlzLl9zdGFydD1lLHRoaXMuX2VuZD10LHRoaXMuX3N0ZXA9bix0aGlzLnNpemU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvbi0xKSsxKSwwPT09dGhpcy5zaXplKXtpZihqbilyZXR1cm4gam47am49dGhpc319ZnVuY3Rpb24gZWUoKXt0aHJvdyBUeXBlRXJyb3IoIkFic3RyYWN0Iil9ZnVuY3Rpb24gdGUoKXt9ZnVuY3Rpb24gbmUoKXt9ZnVuY3Rpb24gcmUoKXt9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIGU+Pj4xJjEwNzM3NDE4MjR8MzIyMTIyNTQ3MSZlfWZ1bmN0aW9uIHNlKGUpe2lmKCExPT09ZXx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuIDA7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUudmFsdWVPZiYmKCExPT09KGU9ZS52YWx1ZU9mKCkpfHxudWxsPT09ZXx8dm9pZCAwPT09ZSkpcmV0dXJuIDA7aWYoITA9PT1lKXJldHVybiAxO3ZhciB0PXR5cGVvZiBlO2lmKCJudW1iZXIiPT09dCl7aWYoZSE9PWV8fGU9PT0xLzApcmV0dXJuIDA7dmFyIG49MHxlO2ZvcihuIT09ZSYmKG5ePTQyOTQ5NjcyOTUqZSk7ZT40Mjk0OTY3Mjk1OyllLz00Mjk0OTY3Mjk1LG5ePWU7cmV0dXJuIG9lKG4pfWlmKCJzdHJpbmciPT09dClyZXR1cm4gZS5sZW5ndGg+UG4/aWUoZSk6YWUoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuaGFzaENvZGUpcmV0dXJuIGUuaGFzaENvZGUoKTtpZigib2JqZWN0Ij09PXQpcmV0dXJuIGxlKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nKXJldHVybiBhZShlLnRvU3RyaW5nKCkpO3Rocm93IG5ldyBFcnJvcigiVmFsdWUgdHlwZSAiK3QrIiBjYW5ub3QgYmUgaGFzaGVkLiIpfWZ1bmN0aW9uIGllKGUpe3ZhciB0PUZuW2VdO3JldHVybiB2b2lkIDA9PT10JiYodD1hZShlKSxIbj09PU5uJiYoSG49MCxGbj17fSksSG4rKyxGbltlXT10KSx0fWZ1bmN0aW9uIGFlKGUpe2Zvcih2YXIgdD0wLG49MDtuPGUubGVuZ3RoO24rKyl0PTMxKnQrZS5jaGFyQ29kZUF0KG4pfDA7cmV0dXJuIG9lKHQpfWZ1bmN0aW9uIGxlKGUpe3ZhciB0O2lmKE1uJiZ2b2lkIDAhPT0odD14bi5nZXQoZSkpKXJldHVybiB0O2lmKHZvaWQgMCE9PSh0PWVbSW5dKSlyZXR1cm4gdDtpZighd24pe2lmKHZvaWQgMCE9PSh0PWUucHJvcGVydHlJc0VudW1lcmFibGUmJmUucHJvcGVydHlJc0VudW1lcmFibGVbSW5dKSlyZXR1cm4gdDtpZih2b2lkIDAhPT0odD11ZShlKSkpcmV0dXJuIHR9aWYodD0rK2tuLDEwNzM3NDE4MjQma24mJihrbj0wKSxNbil4bi5zZXQoZSx0KTtlbHNle2lmKHZvaWQgMCE9PURuJiYhMT09PURuKGUpKXRocm93IG5ldyBFcnJvcigiTm9uLWV4dGVuc2libGUgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQgYXMga2V5cy4iKTtpZih3bilPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxJbix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6dH0pO2Vsc2UgaWYodm9pZCAwIT09ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmZS5wcm9wZXJ0eUlzRW51bWVyYWJsZT09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKWUucHJvcGVydHlJc0VudW1lcmFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnByb3BlcnR5SXNFbnVtZXJhYmxlW0luXT10O2Vsc2V7aWYodm9pZCAwPT09ZS5ub2RlVHlwZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXQgYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBvbiBvYmplY3QuIik7ZVtJbl09dH19cmV0dXJuIHR9ZnVuY3Rpb24gdWUoZSl7aWYoZSYmZS5ub2RlVHlwZT4wKXN3aXRjaChlLm5vZGVUeXBlKXtjYXNlIDE6cmV0dXJuIGUudW5pcXVlSUQ7Y2FzZSA5OnJldHVybiBlLmRvY3VtZW50RWxlbWVudCYmZS5kb2N1bWVudEVsZW1lbnQudW5pcXVlSUR9fWZ1bmN0aW9uIGNlKGUpe0ooZSE9PTEvMCwiQ2Fubm90IHBlcmZvcm0gdGhpcyBhY3Rpb24gd2l0aCBhbiBpbmZpbml0ZSBzaXplLiIpfWZ1bmN0aW9uIGRlKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9UZSgpOl9lKGUpJiYhdShlKT9lOlRlKCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbih0KXt2YXIgcj1uKGUpO2NlKHIuc2l6ZSksci5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc2V0KG4sZSl9KX0pfWZ1bmN0aW9uIF9lKGUpe3JldHVybiEoIWV8fCFlW0JuXSl9ZnVuY3Rpb24gcGUoZSx0KXt0aGlzLm93bmVySUQ9ZSx0aGlzLmVudHJpZXM9dH1mdW5jdGlvbiBmZShlLHQsbil7dGhpcy5vd25lcklEPWUsdGhpcy5iaXRtYXA9dCx0aGlzLm5vZGVzPW59ZnVuY3Rpb24gbWUoZSx0LG4pe3RoaXMub3duZXJJRD1lLHRoaXMuY291bnQ9dCx0aGlzLm5vZGVzPW59ZnVuY3Rpb24gaGUoZSx0LG4pe3RoaXMub3duZXJJRD1lLHRoaXMua2V5SGFzaD10LHRoaXMuZW50cmllcz1ufWZ1bmN0aW9uIGdlKGUsdCxuKXt0aGlzLm93bmVySUQ9ZSx0aGlzLmtleUhhc2g9dCx0aGlzLmVudHJ5PW59ZnVuY3Rpb24gYmUoZSx0LG4pe3RoaXMuX3R5cGU9dCx0aGlzLl9yZXZlcnNlPW4sdGhpcy5fc3RhY2s9ZS5fcm9vdCYmeWUoZS5fcm9vdCl9ZnVuY3Rpb24gRWUoZSx0KXtyZXR1cm4gVChlLHRbMF0sdFsxXSl9ZnVuY3Rpb24geWUoZSx0KXtyZXR1cm57bm9kZTplLGluZGV4OjAsX19wcmV2OnR9fWZ1bmN0aW9uIHZlKGUsdCxuLHIpe3ZhciBvPU9iamVjdC5jcmVhdGUoVW4pO3JldHVybiBvLnNpemU9ZSxvLl9yb290PXQsby5fX293bmVySUQ9bixvLl9faGFzaD1yLG8uX19hbHRlcmVkPSExLG99ZnVuY3Rpb24gVGUoKXtyZXR1cm4gR258fChHbj12ZSgwKSl9ZnVuY3Rpb24gQWUoZSx0LG4pe3ZhciByLG87aWYoZS5fcm9vdCl7dmFyIHM9YyhnbiksaT1jKGJuKTtpZihyPUNlKGUuX3Jvb3QsZS5fX293bmVySUQsMCx2b2lkIDAsdCxuLHMsaSksIWkudmFsdWUpcmV0dXJuIGU7bz1lLnNpemUrKHMudmFsdWU/bj09PWhuPy0xOjE6MCl9ZWxzZXtpZihuPT09aG4pcmV0dXJuIGU7bz0xLHI9bmV3IHBlKGUuX19vd25lcklELFtbdCxuXV0pfXJldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPW8sZS5fcm9vdD1yLGUuX19oYXNoPXZvaWQgMCxlLl9fYWx0ZXJlZD0hMCxlKTpyP3ZlKG8scik6VGUoKX1mdW5jdGlvbiBDZShlLHQsbixyLG8scyxpLGEpe3JldHVybiBlP2UudXBkYXRlKHQsbixyLG8scyxpLGEpOnM9PT1obj9lOihkKGEpLGQoaSksbmV3IGdlKHQscixbbyxzXSkpfWZ1bmN0aW9uIE9lKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yPT09Z2V8fGUuY29uc3RydWN0b3I9PT1oZX1mdW5jdGlvbiBTZShlLHQsbixyLG8pe2lmKGUua2V5SGFzaD09PXIpcmV0dXJuIG5ldyBoZSh0LHIsW2UuZW50cnksb10pO3ZhciBzLGk9KDA9PT1uP2Uua2V5SGFzaDplLmtleUhhc2g+Pj5uKSZtbixhPSgwPT09bj9yOnI+Pj5uKSZtbjtyZXR1cm4gbmV3IGZlKHQsMTw8aXwxPDxhLGk9PT1hP1tTZShlLHQsbitwbixyLG8pXToocz1uZXcgZ2UodCxyLG8pLGk8YT9bZSxzXTpbcyxlXSkpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe2V8fChlPW5ldyBfKTtmb3IodmFyIG89bmV3IGdlKGUsc2UobiksW24scl0pLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGk9dFtzXTtvPW8udXBkYXRlKGUsMCx2b2lkIDAsaVswXSxpWzFdKX1yZXR1cm4gb31mdW5jdGlvbiBqZShlLHQsbixyKXtmb3IodmFyIG89MCxzPTAsaT1uZXcgQXJyYXkobiksYT0wLGw9MSx1PXQubGVuZ3RoO2E8dTthKyssbDw8PTEpe3ZhciBjPXRbYV07dm9pZCAwIT09YyYmYSE9PXImJihvfD1sLGlbcysrXT1jKX1yZXR1cm4gbmV3IGZlKGUsbyxpKX1mdW5jdGlvbiB4ZShlLHQsbixyLG8pe2Zvcih2YXIgcz0wLGk9bmV3IEFycmF5KGZuKSxhPTA7MCE9PW47YSsrLG4+Pj49MSlpW2FdPTEmbj90W3MrK106dm9pZCAwO3JldHVybiBpW3JdPW8sbmV3IG1lKGUscysxLGkpfWZ1bmN0aW9uIExlKGUsdCxyKXtmb3IodmFyIG89W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLGw9bihhKTtzKGEpfHwobD1sLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gVyhlKX0pKSxvLnB1c2gobCl9cmV0dXJuIE1lKGUsdCxvKX1mdW5jdGlvbiBEZShlLHQsbil7cmV0dXJuIGUmJmUubWVyZ2VEZWVwJiZzKHQpP2UubWVyZ2VEZWVwKHQpOlgoZSx0KT9lOnR9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtpZih0JiZ0Lm1lcmdlRGVlcFdpdGgmJnMobikpcmV0dXJuIHQubWVyZ2VEZWVwV2l0aChlLG4pO3ZhciBvPWUodCxuLHIpO3JldHVybiBYKHQsbyk/dDpvfX1mdW5jdGlvbiBNZShlLHQsbil7cmV0dXJuIG49bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1lLnNpemV9KSwwPT09bi5sZW5ndGg/ZTowIT09ZS5zaXplfHxlLl9fb3duZXJJRHx8MSE9PW4ubGVuZ3RoP2Uud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtmb3IodmFyIHI9dD9mdW5jdGlvbihuLHIpe2UudXBkYXRlKHIsaG4sZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1obj9uOnQoZSxuLHIpfSl9OmZ1bmN0aW9uKHQsbil7ZS5zZXQobix0KX0sbz0wO288bi5sZW5ndGg7bysrKW5bb10uZm9yRWFjaChyKX0pOmUuY29uc3RydWN0b3IoblswXSl9ZnVuY3Rpb24ga2UoZSx0LG4scil7dmFyIG89ZT09PWhuLHM9dC5uZXh0KCk7aWYocy5kb25lKXt2YXIgaT1vP246ZSxhPXIoaSk7cmV0dXJuIGE9PT1pP2U6YX1KKG98fGUmJmUuc2V0LCJpbnZhbGlkIGtleVBhdGgiKTt2YXIgbD1zLnZhbHVlLHU9bz9objplLmdldChsLGhuKSxjPWtlKHUsdCxuLHIpO3JldHVybiBjPT09dT9lOmM9PT1obj9lLnJlbW92ZShsKToobz9UZSgpOmUpLnNldChsLGMpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBlLT1lPj4xJjE0MzE2NTU3NjUsZT0oODU4OTkzNDU5JmUpKyhlPj4yJjg1ODk5MzQ1OSksZT1lKyhlPj40KSYyNTI2NDUxMzUsZSs9ZT4+OCwxMjcmKGUrPWU+PjE2KX1mdW5jdGlvbiBQZShlLHQsbixyKXt2YXIgbz1yP2U6cChlKTtyZXR1cm4gb1t0XT1uLG99ZnVuY3Rpb24gTmUoZSx0LG4scil7dmFyIG89ZS5sZW5ndGgrMTtpZihyJiZ0KzE9PT1vKXJldHVybiBlW3RdPW4sZTtmb3IodmFyIHM9bmV3IEFycmF5KG8pLGk9MCxhPTA7YTxvO2ErKylhPT09dD8oc1thXT1uLGk9LTEpOnNbYV09ZVthK2ldO3JldHVybiBzfWZ1bmN0aW9uIEhlKGUsdCxuKXt2YXIgcj1lLmxlbmd0aC0xO2lmKG4mJnQ9PT1yKXJldHVybiBlLnBvcCgpLGU7Zm9yKHZhciBvPW5ldyBBcnJheShyKSxzPTAsaT0wO2k8cjtpKyspaT09PXQmJihzPTEpLG9baV09ZVtpK3NdO3JldHVybiBvfWZ1bmN0aW9uIEZlKGUpe3ZhciB0PVZlKCk7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuIHQ7aWYoQmUoZSkpcmV0dXJuIGU7dmFyIG49cihlKSxvPW4uc2l6ZTtyZXR1cm4gMD09PW8/dDooY2Uobyksbz4wJiZvPGZuP3plKDAsbyxwbixudWxsLG5ldyBVZShuLnRvQXJyYXkoKSkpOnQud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtlLnNldFNpemUobyksbi5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuc2V0KG4sdCl9KX0pKX1mdW5jdGlvbiBCZShlKXtyZXR1cm4hKCFlfHwhZVtZbl0pfWZ1bmN0aW9uIFVlKGUsdCl7dGhpcy5hcnJheT1lLHRoaXMub3duZXJJRD10fWZ1bmN0aW9uIEdlKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIDA9PT10P3IoZSxuKTpvKGUsdCxuKX1mdW5jdGlvbiByKGUsbil7dmFyIHI9bj09PWE/bCYmbC5hcnJheTplJiZlLmFycmF5LG89bj5zPzA6cy1uLHU9aS1uO3JldHVybiB1PmZuJiYodT1mbiksZnVuY3Rpb24oKXtpZihvPT09dSlyZXR1cm4gWG47dmFyIGU9dD8tLXU6bysrO3JldHVybiByJiZyW2VdfX1mdW5jdGlvbiBvKGUscixvKXt2YXIgYSxsPWUmJmUuYXJyYXksdT1vPnM/MDpzLW8+PnIsYz0xKyhpLW8+PnIpO3JldHVybiBjPmZuJiYoYz1mbiksZnVuY3Rpb24oKXtmb3IoOzspe2lmKGEpe3ZhciBlPWEoKTtpZihlIT09WG4pcmV0dXJuIGU7YT1udWxsfWlmKHU9PT1jKXJldHVybiBYbjt2YXIgcz10Py0tYzp1Kys7YT1uKGwmJmxbc10sci1wbixvKyhzPDxyKSl9fX12YXIgcz1lLl9vcmlnaW4saT1lLl9jYXBhY2l0eSxhPVFlKGkpLGw9ZS5fdGFpbDtyZXR1cm4gbihlLl9yb290LGUuX2xldmVsLDApfWZ1bmN0aW9uIHplKGUsdCxuLHIsbyxzLGkpe3ZhciBhPU9iamVjdC5jcmVhdGUocW4pO3JldHVybiBhLnNpemU9dC1lLGEuX29yaWdpbj1lLGEuX2NhcGFjaXR5PXQsYS5fbGV2ZWw9bixhLl9yb290PXIsYS5fdGFpbD1vLGEuX19vd25lcklEPXMsYS5fX2hhc2g9aSxhLl9fYWx0ZXJlZD0hMSxhfWZ1bmN0aW9uIFZlKCl7cmV0dXJuIEtufHwoS249emUoMCwwLHBuKSl9ZnVuY3Rpb24gV2UoZSx0LG4pe2lmKCh0PW0oZSx0KSkhPT10KXJldHVybiBlO2lmKHQ+PWUuc2l6ZXx8dDwwKXJldHVybiBlLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24oZSl7dDwwP1hlKGUsdCkuc2V0KDAsbik6WGUoZSwwLHQrMSkuc2V0KHQsbil9KTt0Kz1lLl9vcmlnaW47dmFyIHI9ZS5fdGFpbCxvPWUuX3Jvb3Qscz1jKGJuKTtyZXR1cm4gdD49UWUoZS5fY2FwYWNpdHkpP3I9WWUocixlLl9fb3duZXJJRCwwLHQsbixzKTpvPVllKG8sZS5fX293bmVySUQsZS5fbGV2ZWwsdCxuLHMpLHMudmFsdWU/ZS5fX293bmVySUQ/KGUuX3Jvb3Q9byxlLl90YWlsPXIsZS5fX2hhc2g9dm9pZCAwLGUuX19hbHRlcmVkPSEwLGUpOnplKGUuX29yaWdpbixlLl9jYXBhY2l0eSxlLl9sZXZlbCxvLHIpOmV9ZnVuY3Rpb24gWWUoZSx0LG4scixvLHMpe3ZhciBpPXI+Pj5uJm1uLGE9ZSYmaTxlLmFycmF5Lmxlbmd0aDtpZighYSYmdm9pZCAwPT09bylyZXR1cm4gZTt2YXIgbDtpZihuPjApe3ZhciB1PWUmJmUuYXJyYXlbaV0sYz1ZZSh1LHQsbi1wbixyLG8scyk7cmV0dXJuIGM9PT11P2U6KGw9cWUoZSx0KSxsLmFycmF5W2ldPWMsbCl9cmV0dXJuIGEmJmUuYXJyYXlbaV09PT1vP2U6KGQocyksbD1xZShlLHQpLHZvaWQgMD09PW8mJmk9PT1sLmFycmF5Lmxlbmd0aC0xP2wuYXJyYXkucG9wKCk6bC5hcnJheVtpXT1vLGwpfWZ1bmN0aW9uIHFlKGUsdCl7cmV0dXJuIHQmJmUmJnQ9PT1lLm93bmVySUQ/ZTpuZXcgVWUoZT9lLmFycmF5LnNsaWNlKCk6W10sdCl9ZnVuY3Rpb24gS2UoZSx0KXtpZih0Pj1RZShlLl9jYXBhY2l0eSkpcmV0dXJuIGUuX3RhaWw7aWYodDwxPDxlLl9sZXZlbCtwbil7Zm9yKHZhciBuPWUuX3Jvb3Qscj1lLl9sZXZlbDtuJiZyPjA7KW49bi5hcnJheVt0Pj4+ciZtbl0sci09cG47cmV0dXJuIG59fWZ1bmN0aW9uIFhlKGUsdCxuKXt2b2lkIDAhPT10JiYodHw9MCksdm9pZCAwIT09biYmKG58PTApO3ZhciByPWUuX19vd25lcklEfHxuZXcgXyxvPWUuX29yaWdpbixzPWUuX2NhcGFjaXR5LGk9byt0LGE9dm9pZCAwPT09bj9zOm48MD9zK246bytuO2lmKGk9PT1vJiZhPT09cylyZXR1cm4gZTtpZihpPj1hKXJldHVybiBlLmNsZWFyKCk7Zm9yKHZhciBsPWUuX2xldmVsLHU9ZS5fcm9vdCxjPTA7aStjPDA7KXU9bmV3IFVlKHUmJnUuYXJyYXkubGVuZ3RoP1t2b2lkIDAsdV06W10sciksbCs9cG4sYys9MTw8bDtjJiYoaSs9YyxvKz1jLGErPWMscys9Yyk7Zm9yKHZhciBkPVFlKHMpLHA9UWUoYSk7cD49MTw8bCtwbjspdT1uZXcgVWUodSYmdS5hcnJheS5sZW5ndGg/W3VdOltdLHIpLGwrPXBuO3ZhciBmPWUuX3RhaWwsbT1wPGQ/S2UoZSxhLTEpOnA+ZD9uZXcgVWUoW10scik6ZjtpZihmJiZwPmQmJmk8cyYmZi5hcnJheS5sZW5ndGgpe3U9cWUodSxyKTtmb3IodmFyIGg9dSxnPWw7Zz5wbjtnLT1wbil7dmFyIGI9ZD4+PmcmbW47aD1oLmFycmF5W2JdPXFlKGguYXJyYXlbYl0scil9aC5hcnJheVtkPj4+cG4mbW5dPWZ9aWYoYTxzJiYobT1tJiZtLnJlbW92ZUFmdGVyKHIsMCxhKSksaT49cClpLT1wLGEtPXAsbD1wbix1PW51bGwsbT1tJiZtLnJlbW92ZUJlZm9yZShyLDAsaSk7ZWxzZSBpZihpPm98fHA8ZCl7Zm9yKGM9MDt1Oyl7dmFyIEU9aT4+PmwmbW47aWYoRSE9PXA+Pj5sJm1uKWJyZWFrO0UmJihjKz0oMTw8bCkqRSksbC09cG4sdT11LmFycmF5W0VdfXUmJmk+byYmKHU9dS5yZW1vdmVCZWZvcmUocixsLGktYykpLHUmJnA8ZCYmKHU9dS5yZW1vdmVBZnRlcihyLGwscC1jKSksYyYmKGktPWMsYS09Yyl9cmV0dXJuIGUuX19vd25lcklEPyhlLnNpemU9YS1pLGUuX29yaWdpbj1pLGUuX2NhcGFjaXR5PWEsZS5fbGV2ZWw9bCxlLl9yb290PXUsZS5fdGFpbD1tLGUuX19oYXNoPXZvaWQgMCxlLl9fYWx0ZXJlZD0hMCxlKTp6ZShpLGEsbCx1LG0pfWZ1bmN0aW9uICRlKGUsdCxuKXtmb3IodmFyIG89W10saT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGw9blthXSx1PXIobCk7dS5zaXplPmkmJihpPXUuc2l6ZSkscyhsKXx8KHU9dS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFcoZSl9KSksby5wdXNoKHUpfXJldHVybiBpPmUuc2l6ZSYmKGU9ZS5zZXRTaXplKGkpKSxNZShlLHQsbyl9ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGU8Zm4/MDplLTE+Pj5wbjw8cG59ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lP3R0KCk6WmUoZSk/ZTp0dCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24odCl7dmFyIHI9bihlKTtjZShyLnNpemUpLHIuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnNldChuLGUpfSl9KX1mdW5jdGlvbiBaZShlKXtyZXR1cm4gX2UoZSkmJnUoZSl9ZnVuY3Rpb24gZXQoZSx0LG4scil7dmFyIG89T2JqZWN0LmNyZWF0ZShKZS5wcm90b3R5cGUpO3JldHVybiBvLnNpemU9ZT9lLnNpemU6MCxvLl9tYXA9ZSxvLl9saXN0PXQsby5fX293bmVySUQ9bixvLl9faGFzaD1yLG99ZnVuY3Rpb24gdHQoKXtyZXR1cm4gJG58fCgkbj1ldChUZSgpLFZlKCkpKX1mdW5jdGlvbiBudChlLHQsbil7dmFyIHIsbyxzPWUuX21hcCxpPWUuX2xpc3QsYT1zLmdldCh0KSxsPXZvaWQgMCE9PWE7aWYobj09PWhuKXtpZighbClyZXR1cm4gZTtpLnNpemU+PWZuJiZpLnNpemU+PTIqcy5zaXplPyhvPWkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmEhPT10fSkscj1vLnRvS2V5ZWRTZXEoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KS5mbGlwKCkudG9NYXAoKSxlLl9fb3duZXJJRCYmKHIuX19vd25lcklEPW8uX19vd25lcklEPWUuX19vd25lcklEKSk6KHI9cy5yZW1vdmUodCksbz1hPT09aS5zaXplLTE/aS5wb3AoKTppLnNldChhLHZvaWQgMCkpfWVsc2UgaWYobCl7aWYobj09PWkuZ2V0KGEpWzFdKXJldHVybiBlO3I9cyxvPWkuc2V0KGEsW3Qsbl0pfWVsc2Ugcj1zLnNldCh0LGkuc2l6ZSksbz1pLnNldChpLnNpemUsW3Qsbl0pO3JldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPXIuc2l6ZSxlLl9tYXA9cixlLl9saXN0PW8sZS5fX2hhc2g9dm9pZCAwLGUpOmV0KHIsbyl9ZnVuY3Rpb24gcnQoZSx0KXt0aGlzLl9pdGVyPWUsdGhpcy5fdXNlS2V5cz10LHRoaXMuc2l6ZT1lLnNpemV9ZnVuY3Rpb24gb3QoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9ZnVuY3Rpb24gc3QoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9ZnVuY3Rpb24gaXQoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9ZnVuY3Rpb24gYXQoZSl7dmFyIHQ9anQoZSk7cmV0dXJuIHQuX2l0ZXI9ZSx0LnNpemU9ZS5zaXplLHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlfSx0LnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgdD1lLnJldmVyc2UuYXBwbHkodGhpcyk7cmV0dXJuIHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlLnJldmVyc2UoKX0sdH0sdC5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9LHQuaW5jbHVkZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFzKHQpfSx0LmNhY2hlUmVzdWx0PXh0LHQuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO3JldHVybiBlLl9faXRlcmF0ZShmdW5jdGlvbihlLG4pe3JldHVybiExIT09dChuLGUscil9LG4pfSx0Ll9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbih0LG4pe2lmKHQ9PT12bil7dmFyIHI9ZS5fX2l0ZXJhdG9yKHQsbik7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7aWYoIWUuZG9uZSl7dmFyIHQ9ZS52YWx1ZVswXTtlLnZhbHVlWzBdPWUudmFsdWVbMV0sZS52YWx1ZVsxXT10fXJldHVybiBlfSl9cmV0dXJuIGUuX19pdGVyYXRvcih0PT09eW4/RW46eW4sbil9LHR9ZnVuY3Rpb24gbHQoZSx0LG4pe3ZhciByPWp0KGUpO3JldHVybiByLnNpemU9ZS5zaXplLHIuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmhhcyh0KX0sci5nZXQ9ZnVuY3Rpb24ocixvKXt2YXIgcz1lLmdldChyLGhuKTtyZXR1cm4gcz09PWhuP286dC5jYWxsKG4scyxyLGUpfSxyLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHIsbyl7dmFyIHM9dGhpcztyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxvLGkpe3JldHVybiExIT09cih0LmNhbGwobixlLG8saSksbyxzKX0sbyl9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsbyl7dmFyIHM9ZS5fX2l0ZXJhdG9yKHZuLG8pO3JldHVybiBuZXcgdihmdW5jdGlvbigpe3ZhciBvPXMubmV4dCgpO2lmKG8uZG9uZSlyZXR1cm4gbzt2YXIgaT1vLnZhbHVlLGE9aVswXTtyZXR1cm4gVChyLGEsdC5jYWxsKG4saVsxXSxhLGUpLG8pfSl9LHJ9ZnVuY3Rpb24gdXQoZSx0KXt2YXIgbj1qdChlKTtyZXR1cm4gbi5faXRlcj1lLG4uc2l6ZT1lLnNpemUsbi5yZXZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGUuZmxpcCYmKG4uZmxpcD1mdW5jdGlvbigpe3ZhciB0PWF0KGUpO3JldHVybiB0LnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbGlwKCl9LHR9KSxuLmdldD1mdW5jdGlvbihuLHIpe3JldHVybiBlLmdldCh0P246LTEtbixyKX0sbi5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIGUuaGFzKHQ/bjotMS1uKX0sbi5pbmNsdWRlcz1mdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KX0sbi5jYWNoZVJlc3VsdD14dCxuLl9faXRlcmF0ZT1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXM7cmV0dXJuIGUuX19pdGVyYXRlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLHIpfSwhbil9LG4uX19pdGVyYXRvcj1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9faXRlcmF0b3IodCwhbil9LG59ZnVuY3Rpb24gY3QoZSx0LG4scil7dmFyIG89anQoZSk7cmV0dXJuIHImJihvLmhhcz1mdW5jdGlvbihyKXt2YXIgbz1lLmdldChyLGhuKTtyZXR1cm4gbyE9PWhuJiYhIXQuY2FsbChuLG8scixlKX0sby5nZXQ9ZnVuY3Rpb24ocixvKXt2YXIgcz1lLmdldChyLGhuKTtyZXR1cm4gcyE9PWhuJiZ0LmNhbGwobixzLHIsZSk/czpvfSksby5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihvLHMpe3ZhciBpPXRoaXMsYT0wO3JldHVybiBlLl9faXRlcmF0ZShmdW5jdGlvbihlLHMsbCl7aWYodC5jYWxsKG4sZSxzLGwpKXJldHVybiBhKyssbyhlLHI/czphLTEsaSl9LHMpLGF9LG8uX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKG8scyl7dmFyIGk9ZS5fX2l0ZXJhdG9yKHZuLHMpLGE9MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXtmb3IoOzspe3ZhciBzPWkubmV4dCgpO2lmKHMuZG9uZSlyZXR1cm4gczt2YXIgbD1zLnZhbHVlLHU9bFswXSxjPWxbMV07aWYodC5jYWxsKG4sYyx1LGUpKXJldHVybiBUKG8scj91OmErKyxjLHMpfX0pfSxvfWZ1bmN0aW9uIGR0KGUsdCxuKXt2YXIgcj1kZSgpLmFzTXV0YWJsZSgpO3JldHVybiBlLl9faXRlcmF0ZShmdW5jdGlvbihvLHMpe3IudXBkYXRlKHQuY2FsbChuLG8scyxlKSwwLGZ1bmN0aW9uKGUpe3JldHVybiBlKzF9KX0pLHIuYXNJbW11dGFibGUoKX1mdW5jdGlvbiBfdChlLHQsbil7dmFyIHI9aShlKSxvPSh1KGUpP0plKCk6ZGUoKSkuYXNNdXRhYmxlKCk7ZS5fX2l0ZXJhdGUoZnVuY3Rpb24ocyxpKXtvLnVwZGF0ZSh0LmNhbGwobixzLGksZSksZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8W10sZS5wdXNoKHI/W2ksc106cyksZX0pfSk7dmFyIHM9UnQoZSk7cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBDdChlLHModCkpfSl9ZnVuY3Rpb24gcHQoZSx0LG4scil7dmFyIG89ZS5zaXplO2lmKHZvaWQgMCE9PXQmJih0fD0wKSx2b2lkIDAhPT1uJiYobj09PTEvMD9uPW86bnw9MCksZyh0LG4sbykpcmV0dXJuIGU7dmFyIHM9Yih0LG8pLGk9RShuLG8pO2lmKHMhPT1zfHxpIT09aSlyZXR1cm4gcHQoZS50b1NlcSgpLmNhY2hlUmVzdWx0KCksdCxuLHIpO3ZhciBhLGw9aS1zO2w9PT1sJiYoYT1sPDA/MDpsKTt2YXIgdT1qdChlKTtyZXR1cm4gdS5zaXplPTA9PT1hP2E6ZS5zaXplJiZhfHx2b2lkIDAsIXImJk4oZSkmJmE+PTAmJih1LmdldD1mdW5jdGlvbih0LG4pe3JldHVybiB0PW0odGhpcyx0KSx0Pj0wJiZ0PGE/ZS5nZXQodCtzLG4pOm59KSx1Ll9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHQsbil7dmFyIG89dGhpcztpZigwPT09YSlyZXR1cm4gMDtpZihuKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKHQsbik7dmFyIGk9MCxsPSEwLHU9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxuKXtpZighbHx8IShsPWkrKzxzKSlyZXR1cm4gdSsrLCExIT09dChlLHI/bjp1LTEsbykmJnUhPT1hfSksdX0sdS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXtpZigwIT09YSYmbilyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodCxuKTt2YXIgbz0wIT09YSYmZS5fX2l0ZXJhdG9yKHQsbiksaT0wLGw9MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXtmb3IoO2krKzxzOylvLm5leHQoKTtpZigrK2w+YSlyZXR1cm4gQSgpO3ZhciBlPW8ubmV4dCgpO3JldHVybiByfHx0PT09eW4/ZTp0PT09RW4/VCh0LGwtMSx2b2lkIDAsZSk6VCh0LGwtMSxlLnZhbHVlWzFdLGUpfSl9LHV9ZnVuY3Rpb24gZnQoZSx0LG4pe3ZhciByPWp0KGUpO3JldHVybiByLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHIsbyl7dmFyIHM9dGhpcztpZihvKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKHIsbyk7dmFyIGk9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxvLGEpe3JldHVybiB0LmNhbGwobixlLG8sYSkmJisraSYmcihlLG8scyl9KSxpfSxyLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihyLG8pe3ZhciBzPXRoaXM7aWYobylyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IocixvKTt2YXIgaT1lLl9faXRlcmF0b3Iodm4sbyksYT0hMDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXtpZighYSlyZXR1cm4gQSgpO3ZhciBlPWkubmV4dCgpO2lmKGUuZG9uZSlyZXR1cm4gZTt2YXIgbz1lLnZhbHVlLGw9b1swXSx1PW9bMV07cmV0dXJuIHQuY2FsbChuLHUsbCxzKT9yPT09dm4/ZTpUKHIsbCx1LGUpOihhPSExLEEoKSl9KX0scn1mdW5jdGlvbiBtdChlLHQsbixyKXt2YXIgbz1qdChlKTtyZXR1cm4gby5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihvLHMpe3ZhciBpPXRoaXM7aWYocylyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShvLHMpO3ZhciBhPSEwLGw9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoZnVuY3Rpb24oZSxzLHUpe2lmKCFhfHwhKGE9dC5jYWxsKG4sZSxzLHUpKSlyZXR1cm4gbCsrLG8oZSxyP3M6bC0xLGkpfSksbH0sby5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24obyxzKXt2YXIgaT10aGlzO2lmKHMpcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKG8scyk7dmFyIGE9ZS5fX2l0ZXJhdG9yKHZuLHMpLGw9ITAsdT0wO3JldHVybiBuZXcgdihmdW5jdGlvbigpe3ZhciBlLHMsYztkb3tpZihlPWEubmV4dCgpLGUuZG9uZSlyZXR1cm4gcnx8bz09PXluP2U6bz09PUVuP1Qobyx1Kyssdm9pZCAwLGUpOlQobyx1KyssZS52YWx1ZVsxXSxlKTt2YXIgZD1lLnZhbHVlO3M9ZFswXSxjPWRbMV0sbCYmKGw9dC5jYWxsKG4sYyxzLGkpKX13aGlsZShsKTtyZXR1cm4gbz09PXZuP2U6VChvLHMsYyxlKX0pfSxvfWZ1bmN0aW9uIGh0KGUsdCl7dmFyIHI9aShlKSxvPVtlXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBzKGUpP3ImJihlPW4oZSkpOmU9cj9GKGUpOkIoQXJyYXkuaXNBcnJheShlKT9lOltlXSksZX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUuc2l6ZX0pO2lmKDA9PT1vLmxlbmd0aClyZXR1cm4gZTtpZigxPT09by5sZW5ndGgpe3ZhciBsPW9bMF07aWYobD09PWV8fHImJmkobCl8fGEoZSkmJmEobCkpcmV0dXJuIGx9dmFyIHU9bmV3IE0obyk7cmV0dXJuIHI/dT11LnRvS2V5ZWRTZXEoKTphKGUpfHwodT11LnRvU2V0U2VxKCkpLHU9dS5mbGF0dGVuKCEwKSx1LnNpemU9by5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT1lKXt2YXIgbj10LnNpemU7aWYodm9pZCAwIT09bilyZXR1cm4gZStufX0sMCksdX1mdW5jdGlvbiBndChlLHQsbil7dmFyIHI9anQoZSk7cmV0dXJuIHIuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24ocixvKXtmdW5jdGlvbiBpKGUsdSl7dmFyIGM9dGhpcztlLl9faXRlcmF0ZShmdW5jdGlvbihlLG8pe3JldHVybighdHx8dTx0KSYmcyhlKT9pKGUsdSsxKTohMT09PXIoZSxuP286YSsrLGMpJiYobD0hMCksIWx9LG8pfXZhciBhPTAsbD0hMTtyZXR1cm4gaShlLDApLGF9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsbyl7dmFyIGk9ZS5fX2l0ZXJhdG9yKHIsbyksYT1bXSxsPTA7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7Zm9yKDtpOyl7dmFyIGU9aS5uZXh0KCk7aWYoITE9PT1lLmRvbmUpe3ZhciB1PWUudmFsdWU7aWYocj09PXZuJiYodT11WzFdKSx0JiYhKGEubGVuZ3RoPHQpfHwhcyh1KSlyZXR1cm4gbj9lOlQocixsKyssdSxlKTthLnB1c2goaSksaT11Ll9faXRlcmF0b3IocixvKX1lbHNlIGk9YS5wb3AoKX1yZXR1cm4gQSgpfSl9LHJ9ZnVuY3Rpb24gYnQoZSx0LG4pe3ZhciByPVJ0KGUpO3JldHVybiBlLnRvU2VxKCkubWFwKGZ1bmN0aW9uKG8scyl7cmV0dXJuIHIodC5jYWxsKG4sbyxzLGUpKX0pLmZsYXR0ZW4oITApfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG49anQoZSk7cmV0dXJuIG4uc2l6ZT1lLnNpemUmJjIqZS5zaXplLTEsbi5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihuLHIpe3ZhciBvPXRoaXMscz0wO3JldHVybiBlLl9faXRlcmF0ZShmdW5jdGlvbihlLHIpe3JldHVybighc3x8ITEhPT1uKHQscysrLG8pKSYmITEhPT1uKGUscysrLG8pfSxyKSxzfSxuLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihuLHIpe3ZhciBvLHM9ZS5fX2l0ZXJhdG9yKHluLHIpLGk9MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXtyZXR1cm4oIW98fGklMikmJihvPXMubmV4dCgpLG8uZG9uZSk/bzppJTI/VChuLGkrKyx0KTpUKG4saSsrLG8udmFsdWUsbyl9KX0sbn1mdW5jdGlvbiB5dChlLHQsbil7dHx8KHQ9THQpO3ZhciByPWkoZSksbz0wLHM9ZS50b1NlcSgpLm1hcChmdW5jdGlvbih0LHIpe3JldHVybltyLHQsbysrLG4/bih0LHIsZSk6dF19KS50b0FycmF5KCk7cmV0dXJuIHMuc29ydChmdW5jdGlvbihlLG4pe3JldHVybiB0KGVbM10sblszXSl8fGVbMl0tblsyXX0pLmZvckVhY2gocj9mdW5jdGlvbihlLHQpe3NbdF0ubGVuZ3RoPTJ9OmZ1bmN0aW9uKGUsdCl7c1t0XT1lWzFdfSkscj9MKHMpOmEoZSk/RChzKTp3KHMpfWZ1bmN0aW9uIHZ0KGUsdCxuKXtpZih0fHwodD1MdCksbil7dmFyIHI9ZS50b1NlcSgpLm1hcChmdW5jdGlvbih0LHIpe3JldHVyblt0LG4odCxyLGUpXX0pLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBUdCh0LGVbMV0sblsxXSk/bjplfSk7cmV0dXJuIHImJnJbMF19cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIFR0KHQsZSxuKT9uOmV9KX1mdW5jdGlvbiBUdChlLHQsbil7dmFyIHI9ZShuLHQpO3JldHVybiAwPT09ciYmbiE9PXQmJih2b2lkIDA9PT1ufHxudWxsPT09bnx8biE9PW4pfHxyPjB9ZnVuY3Rpb24gQXQoZSxuLHIpe3ZhciBvPWp0KGUpO3JldHVybiBvLnNpemU9bmV3IE0ocikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNpemV9KS5taW4oKSxvLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPXRoaXMuX19pdGVyYXRvcih5bix0KSxvPTA7IShuPXIubmV4dCgpKS5kb25lJiYhMSE9PWUobi52YWx1ZSxvKyssdGhpcyk7KTtyZXR1cm4gb30sby5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oZSxvKXt2YXIgcz1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT10KGUpLFMobz9lLnJldmVyc2UoKTplKX0pLGk9MCxhPSExO3JldHVybiBuZXcgdihmdW5jdGlvbigpe3ZhciB0O3JldHVybiBhfHwodD1zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0KCl9KSxhPXQuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lfSkpLGE/QSgpOlQoZSxpKyssbi5hcHBseShudWxsLHQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkpKX0pfSxvfWZ1bmN0aW9uIEN0KGUsdCl7cmV0dXJuIE4oZSk/dDplLmNvbnN0cnVjdG9yKHQpfWZ1bmN0aW9uIE90KGUpe2lmKGUhPT1PYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgW0ssIFZdIHR1cGxlOiAiK2UpfWZ1bmN0aW9uIFN0KGUpe3JldHVybiBjZShlLnNpemUpLGYoZSl9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuIGkoZSk/bjphKGUpP3I6b31mdW5jdGlvbiBqdChlKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSgoaShlKT9MOmEoZSk/RDp3KS5wcm90b3R5cGUpfWZ1bmN0aW9uIHh0KCl7cmV0dXJuIHRoaXMuX2l0ZXIuY2FjaGVSZXN1bHQ/KHRoaXMuX2l0ZXIuY2FjaGVSZXN1bHQoKSx0aGlzLnNpemU9dGhpcy5faXRlci5zaXplLHRoaXMpOngucHJvdG90eXBlLmNhY2hlUmVzdWx0LmNhbGwodGhpcyl9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT50PzE6ZTx0Py0xOjB9ZnVuY3Rpb24gRHQoZSl7dmFyIG49UyhlKTtpZighbil7aWYoIWooZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgaXRlcmFibGUgb3IgYXJyYXktbGlrZTogIitlKTtuPVModChlKSl9cmV0dXJuIG59ZnVuY3Rpb24gd3QoZSx0KXt2YXIgbixyPWZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiByKXJldHVybiBzO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihzKTtpZighbil7bj0hMDt2YXIgaT1PYmplY3Qua2V5cyhlKTtJdChvLGkpLG8uc2l6ZT1pLmxlbmd0aCxvLl9uYW1lPXQsby5fa2V5cz1pLG8uX2RlZmF1bHRWYWx1ZXM9ZX10aGlzLl9tYXA9ZGUocyl9LG89ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShRbik7cmV0dXJuIG8uY29uc3RydWN0b3I9cixyfWZ1bmN0aW9uIE10KGUsdCxuKXt2YXIgcj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSk7cmV0dXJuIHIuX21hcD10LHIuX19vd25lcklEPW4scn1mdW5jdGlvbiBrdChlKXtyZXR1cm4gZS5fbmFtZXx8ZS5jb25zdHJ1Y3Rvci5uYW1lfHwiUmVjb3JkIn1mdW5jdGlvbiBJdChlLHQpe3RyeXt0LmZvckVhY2goUHQuYmluZCh2b2lkIDAsZSkpfWNhdGNoKGUpe319ZnVuY3Rpb24gUHQoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodCl9LHNldDpmdW5jdGlvbihlKXtKKHRoaXMuX19vd25lcklELCJDYW5ub3Qgc2V0IG9uIGFuIGltbXV0YWJsZSByZWNvcmQuIiksdGhpcy5zZXQodCxlKX19KX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/VXQoKTpIdChlKSYmIXUoZSk/ZTpVdCgpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24odCl7dmFyIG49byhlKTtjZShuLnNpemUpLG4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGQoZSl9KX0pfWZ1bmN0aW9uIEh0KGUpe3JldHVybiEoIWV8fCFlW0puXSl9ZnVuY3Rpb24gRnQoZSx0KXtyZXR1cm4gZS5fX293bmVySUQ/KGUuc2l6ZT10LnNpemUsZS5fbWFwPXQsZSk6dD09PWUuX21hcD9lOjA9PT10LnNpemU/ZS5fX2VtcHR5KCk6ZS5fX21ha2UodCl9ZnVuY3Rpb24gQnQoZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKFpuKTtyZXR1cm4gbi5zaXplPWU/ZS5zaXplOjAsbi5fbWFwPWUsbi5fX293bmVySUQ9dCxufWZ1bmN0aW9uIFV0KCl7cmV0dXJuIGVyfHwoZXI9QnQoVGUoKSkpfWZ1bmN0aW9uIEd0KGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9XdCgpOnp0KGUpP2U6V3QoKS53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKHQpe3ZhciBuPW8oZSk7Y2Uobi5zaXplKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuYWRkKGUpfSl9KX1mdW5jdGlvbiB6dChlKXtyZXR1cm4gSHQoZSkmJnUoZSl9ZnVuY3Rpb24gVnQoZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKHRyKTtyZXR1cm4gbi5zaXplPWU/ZS5zaXplOjAsbi5fbWFwPWUsbi5fX293bmVySUQ9dCxufWZ1bmN0aW9uIFd0KCl7cmV0dXJuIG5yfHwobnI9VnQodHQoKSkpfWZ1bmN0aW9uIFl0KGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9YdCgpOnF0KGUpP2U6WHQoKS51bnNoaWZ0QWxsKGUpfWZ1bmN0aW9uIHF0KGUpe3JldHVybiEoIWV8fCFlW3JyXSl9ZnVuY3Rpb24gS3QoZSx0LG4scil7dmFyIG89T2JqZWN0LmNyZWF0ZShvcik7cmV0dXJuIG8uc2l6ZT1lLG8uX2hlYWQ9dCxvLl9fb3duZXJJRD1uLG8uX19oYXNoPXIsby5fX2FsdGVyZWQ9ITEsb31mdW5jdGlvbiBYdCgpe3JldHVybiBzcnx8KHNyPUt0KDApKX1mdW5jdGlvbiAkdChlLHQpe3ZhciBuPWZ1bmN0aW9uKG4pe2UucHJvdG90eXBlW25dPXRbbl19O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG4pLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZm9yRWFjaChuKSxlfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gSnQoZSx0KXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBadChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGVuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gdG4oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP0pTT04uc3RyaW5naWZ5KGUpOlN0cmluZyhlKX1mdW5jdGlvbiBubigpe3JldHVybiBwKGFyZ3VtZW50cyl9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm4gZTx0PzE6ZT50Py0xOjB9ZnVuY3Rpb24gb24oZSl7aWYoZS5zaXplPT09MS8wKXJldHVybiAwO3ZhciB0PXUoZSksbj1pKGUpLHI9dD8xOjA7cmV0dXJuIHNuKGUuX19pdGVyYXRlKG4/dD9mdW5jdGlvbihlLHQpe3I9MzEqcithbihzZShlKSxzZSh0KSl8MH06ZnVuY3Rpb24oZSx0KXtyPXIrYW4oc2UoZSksc2UodCkpfDB9OnQ/ZnVuY3Rpb24oZSl7cj0zMSpyK3NlKGUpfDB9OmZ1bmN0aW9uKGUpe3I9citzZShlKXwwfSkscil9ZnVuY3Rpb24gc24oZSx0KXtyZXR1cm4gdD1Mbih0LDM0MzI5MTgzNTMpLHQ9TG4odDw8MTV8dD4+Pi0xNSw0NjE4NDU5MDcpLHQ9TG4odDw8MTN8dD4+Pi0xMyw1KSx0PSh0KzM4NjQyOTIxOTZ8MCleZSx0PUxuKHRedD4+PjE2LDIyNDY4MjI1MDcpLHQ9TG4odF50Pj4+MTMsMzI2NjQ4OTkwOSksdD1vZSh0XnQ+Pj4xNil9ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZV50KzI2NTQ0MzU3NjkrKGU8PDYpKyhlPj4yKXwwfXZhciBsbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZShuLHQpLGUocix0KSxlKG8sdCksdC5pc0l0ZXJhYmxlPXMsdC5pc0tleWVkPWksdC5pc0luZGV4ZWQ9YSx0LmlzQXNzb2NpYXRpdmU9bCx0LmlzT3JkZXJlZD11LHQuS2V5ZWQ9bix0LkluZGV4ZWQ9cix0LlNldD1vO3ZhciB1bj0iQEBfX0lNTVVUQUJMRV9JVEVSQUJMRV9fQEAiLGNuPSJAQF9fSU1NVVRBQkxFX0tFWUVEX19AQCIsZG49IkBAX19JTU1VVEFCTEVfSU5ERVhFRF9fQEAiLF9uPSJAQF9fSU1NVVRBQkxFX09SREVSRURfX0BAIixwbj01LGZuPTE8PHBuLG1uPWZuLTEsaG49e30sZ249e3ZhbHVlOiExfSxibj17dmFsdWU6ITF9LEVuPTAseW49MSx2bj0yLFRuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixBbj0iQEBpdGVyYXRvciIsQ249VG58fEFuO3YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltJdGVyYXRvcl0ifSx2LktFWVM9RW4sdi5WQUxVRVM9eW4sdi5FTlRSSUVTPXZuLHYucHJvdG90eXBlLmluc3BlY3Q9di5wcm90b3R5cGUudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSx2LnByb3RvdHlwZVtDbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZSh4LHQpLHgub2Y9ZnVuY3Rpb24oKXtyZXR1cm4geChhcmd1bWVudHMpfSx4LnByb3RvdHlwZS50b1NlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx4LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoIlNlcSB7IiwifSIpfSx4LnByb3RvdHlwZS5jYWNoZVJlc3VsdD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9jYWNoZSYmdGhpcy5fX2l0ZXJhdGVVbmNhY2hlZCYmKHRoaXMuX2NhY2hlPXRoaXMuZW50cnlTZXEoKS50b0FycmF5KCksdGhpcy5zaXplPXRoaXMuX2NhY2hlLmxlbmd0aCksdGhpc30seC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHoodGhpcyxlLHQsITApfSx4LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFYodGhpcyxlLHQsITApfSxlKEwseCksTC5wcm90b3R5cGUudG9LZXllZFNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlKEQseCksRC5vZj1mdW5jdGlvbigpe3JldHVybiBEKGFyZ3VtZW50cyl9LEQucHJvdG90eXBlLnRvSW5kZXhlZFNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxELnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoIlNlcSBbIiwiXSIpfSxELnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGUsdCwhMSl9LEQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVih0aGlzLGUsdCwhMSl9LGUodyx4KSx3Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHcoYXJndW1lbnRzKX0sdy5wcm90b3R5cGUudG9TZXRTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30seC5pc1NlcT1OLHguS2V5ZWQ9TCx4LlNldD13LHguSW5kZXhlZD1EO3ZhciBPbj0iQEBfX0lNTVVUQUJMRV9TRVFfX0BAIjt4LnByb3RvdHlwZVtPbl09ITAsZShNLEQpLE0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLl9hcnJheVttKHRoaXMsZSldOnR9LE0ucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLl9hcnJheSxyPW4ubGVuZ3RoLTEsbz0wO288PXI7bysrKWlmKCExPT09ZShuW3Q/ci1vOm9dLG8sdGhpcykpcmV0dXJuIG8rMTtyZXR1cm4gb30sTS5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2FycmF5LHI9bi5sZW5ndGgtMSxvPTA7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7cmV0dXJuIG8+cj9BKCk6VChlLG8sblt0P3ItbysrOm8rK10pfSl9LGUoayxMKSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dHx8dGhpcy5oYXMoZSk/dGhpcy5fb2JqZWN0W2VdOnR9LGsucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb2JqZWN0Lmhhc093blByb3BlcnR5KGUpfSxrLnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5fb2JqZWN0LHI9dGhpcy5fa2V5cyxvPXIubGVuZ3RoLTEscz0wO3M8PW87cysrKXt2YXIgaT1yW3Q/by1zOnNdO2lmKCExPT09ZShuW2ldLGksdGhpcykpcmV0dXJuIHMrMX1yZXR1cm4gc30say5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX29iamVjdCxyPXRoaXMuX2tleXMsbz1yLmxlbmd0aC0xLHM9MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXt2YXIgaT1yW3Q/by1zOnNdO3JldHVybiBzKys+bz9BKCk6VChlLGksbltpXSl9KX0say5wcm90b3R5cGVbX25dPSEwLGUoSSxEKSxJLnByb3RvdHlwZS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoZSx0KTt2YXIgbj10aGlzLl9pdGVyYWJsZSxyPVMobiksbz0wO2lmKE8ocikpZm9yKHZhciBzOyEocz1yLm5leHQoKSkuZG9uZSYmITEhPT1lKHMudmFsdWUsbysrLHRoaXMpOyk7cmV0dXJuIG99LEkucHJvdG90eXBlLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKGUsdCk7dmFyIG49dGhpcy5faXRlcmFibGUscj1TKG4pO2lmKCFPKHIpKXJldHVybiBuZXcgdihBKTt2YXIgbz0wO3JldHVybiBuZXcgdihmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiB0LmRvbmU/dDpUKGUsbysrLHQudmFsdWUpfSl9LGUoUCxEKSxQLnByb3RvdHlwZS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoZSx0KTtmb3IodmFyIG49dGhpcy5faXRlcmF0b3Iscj10aGlzLl9pdGVyYXRvckNhY2hlLG89MDtvPHIubGVuZ3RoOylpZighMT09PWUocltvXSxvKyssdGhpcykpcmV0dXJuIG87Zm9yKHZhciBzOyEocz1uLm5leHQoKSkuZG9uZTspe3ZhciBpPXMudmFsdWU7aWYocltvXT1pLCExPT09ZShpLG8rKyx0aGlzKSlicmVha31yZXR1cm4gb30sUC5wcm90b3R5cGUuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IoZSx0KTt2YXIgbj10aGlzLl9pdGVyYXRvcixyPXRoaXMuX2l0ZXJhdG9yQ2FjaGUsbz0wO3JldHVybiBuZXcgdihmdW5jdGlvbigpe2lmKG8+PXIubGVuZ3RoKXt2YXIgdD1uLm5leHQoKTtpZih0LmRvbmUpcmV0dXJuIHQ7cltvXT10LnZhbHVlfXJldHVybiBUKGUsbyxyW28rK10pfSl9O3ZhciBTbjtlKFEsRCksUS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT8iUmVwZWF0IFtdIjoiUmVwZWF0IFsgIit0aGlzLl92YWx1ZSsiICIrdGhpcy5zaXplKyIgdGltZXMgXSJ9LFEucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLl92YWx1ZTp0fSxRLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlKXtyZXR1cm4gWCh0aGlzLl92YWx1ZSxlKX0sUS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNpemU7cmV0dXJuIGcoZSx0LG4pP3RoaXM6bmV3IFEodGhpcy5fdmFsdWUsRSh0LG4pLWIoZSxuKSl9LFEucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sUS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlKXtyZXR1cm4gWCh0aGlzLl92YWx1ZSxlKT8wOi0xfSxRLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlKXtyZXR1cm4gWCh0aGlzLl92YWx1ZSxlKT90aGlzLnNpemU6LTF9LFEucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5zaXplO24rKylpZighMT09PWUodGhpcy5fdmFsdWUsbix0aGlzKSlyZXR1cm4gbisxO3JldHVybiBufSxRLnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPTA7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7cmV0dXJuIHI8bi5zaXplP1QoZSxyKyssbi5fdmFsdWUpOkEoKX0pfSxRLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBRP1godGhpcy5fdmFsdWUsZS5fdmFsdWUpOiQoZSl9O3ZhciBSbjtlKFosRCksWi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT8iUmFuZ2UgW10iOiJSYW5nZSBbICIrdGhpcy5fc3RhcnQrIi4uLiIrdGhpcy5fZW5kKygxIT09dGhpcy5fc3RlcD8iIGJ5ICIrdGhpcy5fc3RlcDoiIikrIiBdIn0sWi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpP3RoaXMuX3N0YXJ0K20odGhpcyxlKSp0aGlzLl9zdGVwOnR9LFoucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PShlLXRoaXMuX3N0YXJ0KS90aGlzLl9zdGVwO3JldHVybiB0Pj0wJiZ0PHRoaXMuc2l6ZSYmdD09PU1hdGguZmxvb3IodCl9LFoucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcoZSx0LHRoaXMuc2l6ZSk/dGhpczooZT1iKGUsdGhpcy5zaXplKSx0PUUodCx0aGlzLnNpemUpLHQ8PWU/bmV3IFooMCwwKTpuZXcgWih0aGlzLmdldChlLHRoaXMuX2VuZCksdGhpcy5nZXQodCx0aGlzLl9lbmQpLHRoaXMuX3N0ZXApKX0sWi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlKXt2YXIgdD1lLXRoaXMuX3N0YXJ0O2lmKHQldGhpcy5fc3RlcD09MCl7dmFyIG49dC90aGlzLl9zdGVwO2lmKG4+PTAmJm48dGhpcy5zaXplKXJldHVybiBufXJldHVybi0xfSxaLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbmRleE9mKGUpfSxaLnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5zaXplLTEscj10aGlzLl9zdGVwLG89dD90aGlzLl9zdGFydCtuKnI6dGhpcy5fc3RhcnQscz0wO3M8PW47cysrKXtpZighMT09PWUobyxzLHRoaXMpKXJldHVybiBzKzE7bys9dD8tcjpyfXJldHVybiBzfSxaLnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zaXplLTEscj10aGlzLl9zdGVwLG89dD90aGlzLl9zdGFydCtuKnI6dGhpcy5fc3RhcnQscz0wO3JldHVybiBuZXcgdihmdW5jdGlvbigpe3ZhciBpPW87cmV0dXJuIG8rPXQ/LXI6cixzPm4/QSgpOlQoZSxzKyssaSl9KX0sWi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgWj90aGlzLl9zdGFydD09PWUuX3N0YXJ0JiZ0aGlzLl9lbmQ9PT1lLl9lbmQmJnRoaXMuX3N0ZXA9PT1lLl9zdGVwOiQodGhpcyxlKX07dmFyIGpuO2UoZWUsdCksZSh0ZSxlZSksZShuZSxlZSksZShyZSxlZSksZWUuS2V5ZWQ9dGUsZWUuSW5kZXhlZD1uZSxlZS5TZXQ9cmU7dmFyIHhuLExuPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXRoLmltdWwmJi0yPT09TWF0aC5pbXVsKDQyOTQ5NjcyOTUsMik/TWF0aC5pbXVsOmZ1bmN0aW9uKGUsdCl7ZXw9MCx0fD0wO3ZhciBuPTY1NTM1JmUscj02NTUzNSZ0O3JldHVybiBuKnIrKChlPj4+MTYpKnIrbioodD4+PjE2KTw8MTY+Pj4wKXwwfSxEbj1PYmplY3QuaXNFeHRlbnNpYmxlLHduPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIkAiLHt9KSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksTW49ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXA7TW4mJih4bj1uZXcgV2Vha01hcCk7dmFyIGtuPTAsSW49Il9faW1tdXRhYmxlaGFzaF9fIjsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSW49U3ltYm9sKEluKSk7dmFyIFBuPTE2LE5uPTI1NSxIbj0wLEZuPXt9O2UoZGUsdGUpLGRlLm9mPWZ1bmN0aW9uKCl7dmFyIGU9bG4uY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIFRlKCkud2l0aE11dGF0aW9ucyhmdW5jdGlvbih0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpe2lmKG4rMT49ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHZhbHVlIGZvciBrZXk6ICIrZVtuXSk7dC5zZXQoZVtuXSxlW24rMV0pfX0pfSxkZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJNYXAgeyIsIn0iKX0sZGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yb290P3RoaXMuX3Jvb3QuZ2V0KDAsdm9pZCAwLGUsdCk6dH0sZGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBBZSh0aGlzLGUsdCl9LGRlLnByb3RvdHlwZS5zZXRJbj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnVwZGF0ZUluKGUsaG4sZnVuY3Rpb24oKXtyZXR1cm4gdH0pfSxkZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiBBZSh0aGlzLGUsaG4pfSxkZS5wcm90b3R5cGUuZGVsZXRlSW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlSW4oZSxmdW5jdGlvbigpe3JldHVybiBobn0pfSxkZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZSh0aGlzKTp0aGlzLnVwZGF0ZUluKFtlXSx0LG4pfSxkZS5wcm90b3R5cGUudXBkYXRlSW49ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD12b2lkIDApO3ZhciByPWtlKHRoaXMsRHQoZSksdCxuKTtyZXR1cm4gcj09PWhuP3ZvaWQgMDpyfSxkZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT90aGlzOnRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9MCx0aGlzLl9yb290PW51bGwsdGhpcy5fX2hhc2g9dm9pZCAwLHRoaXMuX19hbHRlcmVkPSEwLHRoaXMpOlRlKCl9LGRlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbigpe3JldHVybiBMZSh0aGlzLHZvaWQgMCxhcmd1bWVudHMpfSxkZS5wcm90b3R5cGUubWVyZ2VXaXRoPWZ1bmN0aW9uKGUpe3JldHVybiBMZSh0aGlzLGUsbG4uY2FsbChhcmd1bWVudHMsMSkpfSxkZS5wcm90b3R5cGUubWVyZ2VJbj1mdW5jdGlvbihlKXt2YXIgdD1sbi5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdGhpcy51cGRhdGVJbihlLFRlKCksZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUubWVyZ2U/ZS5tZXJnZS5hcHBseShlLHQpOnRbdC5sZW5ndGgtMV19KX0sZGUucHJvdG90eXBlLm1lcmdlRGVlcD1mdW5jdGlvbigpe3JldHVybiBMZSh0aGlzLERlLGFyZ3VtZW50cyl9LGRlLnByb3RvdHlwZS5tZXJnZURlZXBXaXRoPWZ1bmN0aW9uKGUpe3ZhciB0PWxuLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBMZSh0aGlzLHdlKGUpLHQpfSxkZS5wcm90b3R5cGUubWVyZ2VEZWVwSW49ZnVuY3Rpb24oZSl7dmFyIHQ9bG4uY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHRoaXMudXBkYXRlSW4oZSxUZSgpLGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLm1lcmdlRGVlcD9lLm1lcmdlRGVlcC5hcHBseShlLHQpOnRbdC5sZW5ndGgtMV19KX0sZGUucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEplKHl0KHRoaXMsZSkpfSxkZS5wcm90b3R5cGUuc29ydEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEplKHl0KHRoaXMsdCxlKSl9LGRlLnByb3RvdHlwZS53aXRoTXV0YXRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYXNNdXRhYmxlKCk7cmV0dXJuIGUodCksdC53YXNBbHRlcmVkKCk/dC5fX2Vuc3VyZU93bmVyKHRoaXMuX19vd25lcklEKTp0aGlzfSxkZS5wcm90b3R5cGUuYXNNdXRhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vd25lcklEP3RoaXM6dGhpcy5fX2Vuc3VyZU93bmVyKG5ldyBfKX0sZGUucHJvdG90eXBlLmFzSW1tdXRhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19lbnN1cmVPd25lcigpfSxkZS5wcm90b3R5cGUud2FzQWx0ZXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYWx0ZXJlZH0sZGUucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGJlKHRoaXMsZSx0KX0sZGUucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj0wO3JldHVybiB0aGlzLl9yb290JiZ0aGlzLl9yb290Lml0ZXJhdGUoZnVuY3Rpb24odCl7cmV0dXJuIHIrKyxlKHRbMV0sdFswXSxuKX0sdCkscn0sZGUucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/dmUodGhpcy5zaXplLHRoaXMuX3Jvb3QsZSx0aGlzLl9faGFzaCk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fX2FsdGVyZWQ9ITEsdGhpcyl9LGRlLmlzTWFwPV9lO3ZhciBCbj0iQEBfX0lNTVVUQUJMRV9NQVBfX0BAIixVbj1kZS5wcm90b3R5cGU7VW5bQm5dPSEwLFVuLmRlbGV0ZT1Vbi5yZW1vdmUsVW4ucmVtb3ZlSW49VW4uZGVsZXRlSW4scGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89dGhpcy5lbnRyaWVzLHM9MCxpPW8ubGVuZ3RoO3M8aTtzKyspaWYoWChuLG9bc11bMF0pKXJldHVybiBvW3NdWzFdO3JldHVybiByfSxwZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe2Zvcih2YXIgYT1vPT09aG4sbD10aGlzLmVudHJpZXMsdT0wLGM9bC5sZW5ndGg7dTxjJiYhWChyLGxbdV1bMF0pO3UrKyk7dmFyIF89dTxjO2lmKF8/bFt1XVsxXT09PW86YSlyZXR1cm4gdGhpcztpZihkKGkpLChhfHwhXykmJmQocyksIWF8fDEhPT1sLmxlbmd0aCl7aWYoIV8mJiFhJiZsLmxlbmd0aD49em4pcmV0dXJuIFJlKGUsbCxyLG8pO3ZhciBmPWUmJmU9PT10aGlzLm93bmVySUQsbT1mP2w6cChsKTtyZXR1cm4gXz9hP3U9PT1jLTE/bS5wb3AoKTptW3VdPW0ucG9wKCk6bVt1XT1bcixvXTptLnB1c2goW3Isb10pLGY/KHRoaXMuZW50cmllcz1tLHRoaXMpOm5ldyBwZShlLG0pfX0sZmUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1zZShuKSk7dmFyIG89MTw8KCgwPT09ZT90OnQ+Pj5lKSZtbikscz10aGlzLmJpdG1hcDtyZXR1cm4gMD09KHMmbyk/cjp0aGlzLm5vZGVzW0llKHMmby0xKV0uZ2V0KGUrcG4sdCxuLHIpfSxmZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe3ZvaWQgMD09PW4mJihuPXNlKHIpKTt2YXIgYT0oMD09PXQ/bjpuPj4+dCkmbW4sbD0xPDxhLHU9dGhpcy5iaXRtYXAsYz0wIT0odSZsKTtpZighYyYmbz09PWhuKXJldHVybiB0aGlzO3ZhciBkPUllKHUmbC0xKSxfPXRoaXMubm9kZXMscD1jP19bZF06dm9pZCAwLGY9Q2UocCxlLHQrcG4sbixyLG8scyxpKTtpZihmPT09cClyZXR1cm4gdGhpcztpZighYyYmZiYmXy5sZW5ndGg+PVZuKXJldHVybiB4ZShlLF8sdSxhLGYpO2lmKGMmJiFmJiYyPT09Xy5sZW5ndGgmJk9lKF9bMV5kXSkpcmV0dXJuIF9bMV5kXTtpZihjJiZmJiYxPT09Xy5sZW5ndGgmJk9lKGYpKXJldHVybiBmO3ZhciBtPWUmJmU9PT10aGlzLm93bmVySUQsaD1jP2Y/dTp1Xmw6dXxsLGc9Yz9mP1BlKF8sZCxmLG0pOkhlKF8sZCxtKTpOZShfLGQsZixtKTtyZXR1cm4gbT8odGhpcy5iaXRtYXA9aCx0aGlzLm5vZGVzPWcsdGhpcyk6bmV3IGZlKGUsaCxnKX0sbWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1zZShuKSk7dmFyIG89KDA9PT1lP3Q6dD4+PmUpJm1uLHM9dGhpcy5ub2Rlc1tvXTtyZXR1cm4gcz9zLmdldChlK3BuLHQsbixyKTpyfSxtZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe3ZvaWQgMD09PW4mJihuPXNlKHIpKTt2YXIgYT0oMD09PXQ/bjpuPj4+dCkmbW4sbD1vPT09aG4sdT10aGlzLm5vZGVzLGM9dVthXTtpZihsJiYhYylyZXR1cm4gdGhpczt2YXIgZD1DZShjLGUsdCtwbixuLHIsbyxzLGkpO2lmKGQ9PT1jKXJldHVybiB0aGlzO3ZhciBfPXRoaXMuY291bnQ7aWYoYyl7aWYoIWQmJi0tXzxXbilyZXR1cm4gamUoZSx1LF8sYSl9ZWxzZSBfKys7dmFyIHA9ZSYmZT09PXRoaXMub3duZXJJRCxmPVBlKHUsYSxkLHApO3JldHVybiBwPyh0aGlzLmNvdW50PV8sdGhpcy5ub2Rlcz1mLHRoaXMpOm5ldyBtZShlLF8sZil9LGhlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvPXRoaXMuZW50cmllcyxzPTAsaT1vLmxlbmd0aDtzPGk7cysrKWlmKFgobixvW3NdWzBdKSlyZXR1cm4gb1tzXVsxXTtyZXR1cm4gcn0saGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2b2lkIDA9PT1uJiYobj1zZShyKSk7dmFyIGE9bz09PWhuO2lmKG4hPT10aGlzLmtleUhhc2gpcmV0dXJuIGE/dGhpczooZChpKSxkKHMpLFNlKHRoaXMsZSx0LG4sW3Isb10pKTtmb3IodmFyIGw9dGhpcy5lbnRyaWVzLHU9MCxjPWwubGVuZ3RoO3U8YyYmIVgocixsW3VdWzBdKTt1KyspO3ZhciBfPXU8YztpZihfP2xbdV1bMV09PT1vOmEpcmV0dXJuIHRoaXM7aWYoZChpKSwoYXx8IV8pJiZkKHMpLGEmJjI9PT1jKXJldHVybiBuZXcgZ2UoZSx0aGlzLmtleUhhc2gsbFsxXnVdKTt2YXIgZj1lJiZlPT09dGhpcy5vd25lcklELG09Zj9sOnAobCk7cmV0dXJuIF8/YT91PT09Yy0xP20ucG9wKCk6bVt1XT1tLnBvcCgpOm1bdV09W3Isb106bS5wdXNoKFtyLG9dKSxmPyh0aGlzLmVudHJpZXM9bSx0aGlzKTpuZXcgaGUoZSx0aGlzLmtleUhhc2gsbSl9LGdlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIFgobix0aGlzLmVudHJ5WzBdKT90aGlzLmVudHJ5WzFdOnJ9LGdlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7dmFyIGE9bz09PWhuLGw9WChyLHRoaXMuZW50cnlbMF0pO3JldHVybihsP289PT10aGlzLmVudHJ5WzFdOmEpP3RoaXM6KGQoaSksYT92b2lkIGQocyk6bD9lJiZlPT09dGhpcy5vd25lcklEPyh0aGlzLmVudHJ5WzFdPW8sdGhpcyk6bmV3IGdlKGUsdGhpcy5rZXlIYXNoLFtyLG9dKTooZChzKSxTZSh0aGlzLGUsdCxzZShyKSxbcixvXSkpKX0scGUucHJvdG90eXBlLml0ZXJhdGU9aGUucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5lbnRyaWVzLHI9MCxvPW4ubGVuZ3RoLTE7cjw9bztyKyspaWYoITE9PT1lKG5bdD9vLXI6cl0pKXJldHVybiExfSxmZS5wcm90b3R5cGUuaXRlcmF0ZT1tZS5wcm90b3R5cGUuaXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLm5vZGVzLHI9MCxvPW4ubGVuZ3RoLTE7cjw9bztyKyspe3ZhciBzPW5bdD9vLXI6cl07aWYocyYmITE9PT1zLml0ZXJhdGUoZSx0KSlyZXR1cm4hMX19LGdlLnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUodGhpcy5lbnRyeSl9LGUoYmUsdiksYmUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fdHlwZSx0PXRoaXMuX3N0YWNrO3Q7KXt2YXIgbixyPXQubm9kZSxvPXQuaW5kZXgrKztpZihyLmVudHJ5KXtpZigwPT09bylyZXR1cm4gRWUoZSxyLmVudHJ5KX1lbHNlIGlmKHIuZW50cmllcyl7aWYobj1yLmVudHJpZXMubGVuZ3RoLTEsbzw9bilyZXR1cm4gRWUoZSxyLmVudHJpZXNbdGhpcy5fcmV2ZXJzZT9uLW86b10pfWVsc2UgaWYobj1yLm5vZGVzLmxlbmd0aC0xLG88PW4pe3ZhciBzPXIubm9kZXNbdGhpcy5fcmV2ZXJzZT9uLW86b107aWYocyl7aWYocy5lbnRyeSlyZXR1cm4gRWUoZSxzLmVudHJ5KTt0PXRoaXMuX3N0YWNrPXllKHMsdCl9Y29udGludWV9dD10aGlzLl9zdGFjaz10aGlzLl9zdGFjay5fX3ByZXZ9cmV0dXJuIEEoKX07dmFyIEduLHpuPWZuLzQsVm49Zm4vMixXbj1mbi80O2UoRmUsbmUpLEZlLm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoYXJndW1lbnRzKX0sRmUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZygiTGlzdCBbIiwiXSIpfSxGZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7aWYoKGU9bSh0aGlzLGUpKT49MCYmZTx0aGlzLnNpemUpe2UrPXRoaXMuX29yaWdpbjt2YXIgbj1LZSh0aGlzLGUpO3JldHVybiBuJiZuLmFycmF5W2UmbW5dfXJldHVybiB0fSxGZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFdlKHRoaXMsZSx0KX0sRmUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSk/MD09PWU/dGhpcy5zaGlmdCgpOmU9PT10aGlzLnNpemUtMT90aGlzLnBvcCgpOnRoaXMuc3BsaWNlKGUsMSk6dGhpc30sRmUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNwbGljZShlLDAsdCl9LEZlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT10aGlzLl9vcmlnaW49dGhpcy5fY2FwYWNpdHk9MCx0aGlzLl9sZXZlbD1wbix0aGlzLl9yb290PXRoaXMuX3RhaWw9bnVsbCx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6VmUoKX0sRmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD10aGlzLnNpemU7cmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbihuKXtYZShuLDAsdCtlLmxlbmd0aCk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspbi5zZXQodCtyLGVbcl0pfSl9LEZlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gWGUodGhpcywwLC0xKX0sRmUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbih0KXtYZSh0LC1lLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5zZXQobixlW25dKX0pfSxGZS5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWGUodGhpcywxKX0sRmUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKCl7cmV0dXJuICRlKHRoaXMsdm9pZCAwLGFyZ3VtZW50cyl9LEZlLnByb3RvdHlwZS5tZXJnZVdpdGg9ZnVuY3Rpb24oZSl7cmV0dXJuICRlKHRoaXMsZSxsbi5jYWxsKGFyZ3VtZW50cywxKSl9LEZlLnByb3RvdHlwZS5tZXJnZURlZXA9ZnVuY3Rpb24oKXtyZXR1cm4gJGUodGhpcyxEZSxhcmd1bWVudHMpfSxGZS5wcm90b3R5cGUubWVyZ2VEZWVwV2l0aD1mdW5jdGlvbihlKXt2YXIgdD1sbi5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gJGUodGhpcyx3ZShlKSx0KX0sRmUucHJvdG90eXBlLnNldFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFhlKHRoaXMsMCxlKX0sRmUucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zaXplO3JldHVybiBnKGUsdCxuKT90aGlzOlhlKHRoaXMsYihlLG4pLEUodCxuKSl9LEZlLnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPUdlKHRoaXMsdCk7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7dmFyIHQ9cigpO3JldHVybiB0PT09WG4/QSgpOlQoZSxuKyssdCl9KX0sRmUucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPTAsbz1HZSh0aGlzLHQpOyhuPW8oKSkhPT1YbiYmITEhPT1lKG4scisrLHRoaXMpOyk7cmV0dXJuIHJ9LEZlLnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpcy5fX293bmVySUQ/dGhpczplP3plKHRoaXMuX29yaWdpbix0aGlzLl9jYXBhY2l0eSx0aGlzLl9sZXZlbCx0aGlzLl9yb290LHRoaXMuX3RhaWwsZSx0aGlzLl9faGFzaCk6KHRoaXMuX19vd25lcklEPWUsdGhpcyl9LEZlLmlzTGlzdD1CZTt2YXIgWW49IkBAX19JTU1VVEFCTEVfTElTVF9fQEAiLHFuPUZlLnByb3RvdHlwZTtxbltZbl09ITAscW4uZGVsZXRlPXFuLnJlbW92ZSxxbi5zZXRJbj1Vbi5zZXRJbixxbi5kZWxldGVJbj1xbi5yZW1vdmVJbj1Vbi5yZW1vdmVJbixxbi51cGRhdGU9VW4udXBkYXRlLHFuLnVwZGF0ZUluPVVuLnVwZGF0ZUluLHFuLm1lcmdlSW49VW4ubWVyZ2VJbixxbi5tZXJnZURlZXBJbj1Vbi5tZXJnZURlZXBJbixxbi53aXRoTXV0YXRpb25zPVVuLndpdGhNdXRhdGlvbnMscW4uYXNNdXRhYmxlPVVuLmFzTXV0YWJsZSxxbi5hc0ltbXV0YWJsZT1Vbi5hc0ltbXV0YWJsZSxxbi53YXNBbHRlcmVkPVVuLndhc0FsdGVyZWQsVWUucHJvdG90eXBlLnJlbW92ZUJlZm9yZT1mdW5jdGlvbihlLHQsbil7aWYobj09PXQ/MTw8dDowPT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIHI9bj4+PnQmbW47aWYocj49dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIG5ldyBVZShbXSxlKTt2YXIgbyxzPTA9PT1yO2lmKHQ+MCl7dmFyIGk9dGhpcy5hcnJheVtyXTtpZigobz1pJiZpLnJlbW92ZUJlZm9yZShlLHQtcG4sbikpPT09aSYmcylyZXR1cm4gdGhpc31pZihzJiYhbylyZXR1cm4gdGhpczt2YXIgYT1xZSh0aGlzLGUpO2lmKCFzKWZvcih2YXIgbD0wO2w8cjtsKyspYS5hcnJheVtsXT12b2lkIDA7cmV0dXJuIG8mJihhLmFycmF5W3JdPW8pLGF9LFVlLnByb3RvdHlwZS5yZW1vdmVBZnRlcj1mdW5jdGlvbihlLHQsbil7aWYobj09PSh0PzE8PHQ6MCl8fDA9PT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4gdGhpczt2YXIgcj1uLTE+Pj50Jm1uO2lmKHI+PXRoaXMuYXJyYXkubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+MCl7dmFyIHM9dGhpcy5hcnJheVtyXTtpZigobz1zJiZzLnJlbW92ZUFmdGVyKGUsdC1wbixuKSk9PT1zJiZyPT09dGhpcy5hcnJheS5sZW5ndGgtMSlyZXR1cm4gdGhpc312YXIgaT1xZSh0aGlzLGUpO3JldHVybiBpLmFycmF5LnNwbGljZShyKzEpLG8mJihpLmFycmF5W3JdPW8pLGl9O3ZhciBLbixYbj17fTtlKEplLGRlKSxKZS5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LEplLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoIk9yZGVyZWRNYXAgeyIsIn0iKX0sSmUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX21hcC5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PW4/dGhpcy5fbGlzdC5nZXQobilbMV06dH0sSmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNpemU/dGhpczp0aGlzLl9fb3duZXJJRD8odGhpcy5zaXplPTAsdGhpcy5fbWFwLmNsZWFyKCksdGhpcy5fbGlzdC5jbGVhcigpLHRoaXMpOnR0KCl9LEplLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnQodGhpcyxlLHQpfSxKZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiBudCh0aGlzLGUsaG4pfSxKZS5wcm90b3R5cGUud2FzQWx0ZXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAud2FzQWx0ZXJlZCgpfHx0aGlzLl9saXN0Lndhc0FsdGVyZWQoKX0sSmUucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpc3QuX19pdGVyYXRlKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZlKHRbMV0sdFswXSxuKX0sdCl9LEplLnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3QuZnJvbUVudHJ5U2VxKCkuX19pdGVyYXRvcihlLHQpfSxKZS5wcm90b3R5cGUuX19lbnN1cmVPd25lcj1mdW5jdGlvbihlKXtpZihlPT09dGhpcy5fX293bmVySUQpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy5fbWFwLl9fZW5zdXJlT3duZXIoZSksbj10aGlzLl9saXN0Ll9fZW5zdXJlT3duZXIoZSk7cmV0dXJuIGU/ZXQodCxuLGUsdGhpcy5fX2hhc2gpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX21hcD10LHRoaXMuX2xpc3Q9bix0aGlzKX0sSmUuaXNPcmRlcmVkTWFwPVplLEplLnByb3RvdHlwZVtfbl09ITAsSmUucHJvdG90eXBlLmRlbGV0ZT1KZS5wcm90b3R5cGUucmVtb3ZlO3ZhciAkbjtlKHJ0LEwpLHJ0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faXRlci5nZXQoZSx0KX0scnQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlci5oYXMoZSl9LHJ0LnByb3RvdHlwZS52YWx1ZVNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVyLnZhbHVlU2VxKCl9LHJ0LnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXV0KHRoaXMsITApO3JldHVybiB0aGlzLl91c2VLZXlzfHwodC52YWx1ZVNlcT1mdW5jdGlvbigpe3JldHVybiBlLl9pdGVyLnRvU2VxKCkucmV2ZXJzZSgpfSksdH0scnQucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1sdCh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX3VzZUtleXN8fChyLnZhbHVlU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2l0ZXIudG9TZXEoKS5tYXAoZSx0KX0pLHJ9LHJ0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXM7cmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRlKHRoaXMuX3VzZUtleXM/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LG4scil9OihuPXQ/U3QodGhpcyk6MCxmdW5jdGlvbihvKXtyZXR1cm4gZShvLHQ/LS1uOm4rKyxyKX0pLHQpfSxydC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe2lmKHRoaXMuX3VzZUtleXMpcmV0dXJuIHRoaXMuX2l0ZXIuX19pdGVyYXRvcihlLHQpO3ZhciBuPXRoaXMuX2l0ZXIuX19pdGVyYXRvcih5bix0KSxyPXQ/U3QodGhpcyk6MDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXt2YXIgbz1uLm5leHQoKTtyZXR1cm4gby5kb25lP286VChlLHQ/LS1yOnIrKyxvLnZhbHVlLG8pfSl9LHJ0LnByb3RvdHlwZVtfbl09ITAsZShvdCxEKSxvdC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2l0ZXIuaW5jbHVkZXMoZSl9LG90LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9MDtyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyKyssbil9LHQpfSxvdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2l0ZXIuX19pdGVyYXRvcih5bix0KSxyPTA7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIHQuZG9uZT90OlQoZSxyKyssdC52YWx1ZSx0KX0pfSxlKHN0LHcpLHN0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2l0ZXIuaW5jbHVkZXMoZSl9LHN0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0ZShmdW5jdGlvbih0KXtyZXR1cm4gZSh0LHQsbil9LHQpfSxzdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2l0ZXIuX19pdGVyYXRvcih5bix0KTtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gdC5kb25lP3Q6VChlLHQudmFsdWUsdC52YWx1ZSx0KX0pfSxlKGl0LEwpLGl0LnByb3RvdHlwZS5lbnRyeVNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVyLnRvU2VxKCl9LGl0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0ZShmdW5jdGlvbih0KXtpZih0KXtPdCh0KTt2YXIgcj1zKHQpO3JldHVybiBlKHI/dC5nZXQoMSk6dFsxXSxyP3QuZ2V0KDApOnRbMF0sbil9fSx0KX0saXQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pdGVyLl9faXRlcmF0b3IoeW4sdCk7cmV0dXJuIG5ldyB2KGZ1bmN0aW9uKCl7Zm9yKDs7KXt2YXIgdD1uLm5leHQoKTtpZih0LmRvbmUpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZTtpZihyKXtPdChyKTt2YXIgbz1zKHIpO3JldHVybiBUKGUsbz9yLmdldCgwKTpyWzBdLG8/ci5nZXQoMSk6clsxXSx0KX19fSl9LG90LnByb3RvdHlwZS5jYWNoZVJlc3VsdD1ydC5wcm90b3R5cGUuY2FjaGVSZXN1bHQ9c3QucHJvdG90eXBlLmNhY2hlUmVzdWx0PWl0LnByb3RvdHlwZS5jYWNoZVJlc3VsdD14dCxlKHd0LHRlKSx3dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKGt0KHRoaXMpKyIgeyIsIn0iKX0sd3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlcy5oYXNPd25Qcm9wZXJ0eShlKX0sd3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmhhcyhlKSlyZXR1cm4gdDt2YXIgbj10aGlzLl9kZWZhdWx0VmFsdWVzW2VdO3JldHVybiB0aGlzLl9tYXA/dGhpcy5fbWFwLmdldChlLG4pOm59LHd0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKHRoaXMuX19vd25lcklEKXJldHVybiB0aGlzLl9tYXAmJnRoaXMuX21hcC5jbGVhcigpLHRoaXM7dmFyIGU9dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gZS5fZW1wdHl8fChlLl9lbXB0eT1NdCh0aGlzLFRlKCkpKX0sd3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgdW5rbm93biBrZXkgIicrZSsnIiBvbiAnK2t0KHRoaXMpKTtpZih0aGlzLl9tYXAmJiF0aGlzLl9tYXAuaGFzKGUpKXtpZih0PT09dGhpcy5fZGVmYXVsdFZhbHVlc1tlXSlyZXR1cm4gdGhpc312YXIgbj10aGlzLl9tYXAmJnRoaXMuX21hcC5zZXQoZSx0KTtyZXR1cm4gdGhpcy5fX293bmVySUR8fG49PT10aGlzLl9tYXA/dGhpczpNdCh0aGlzLG4pfSx3dC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhcyhlKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLl9tYXAmJnRoaXMuX21hcC5yZW1vdmUoZSk7cmV0dXJuIHRoaXMuX19vd25lcklEfHx0PT09dGhpcy5fbWFwP3RoaXM6TXQodGhpcyx0KX0sd3QucHJvdG90eXBlLndhc0FsdGVyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLndhc0FsdGVyZWQoKX0sd3QucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVybiBuKHRoaXMuX2RlZmF1bHRWYWx1ZXMpLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiByLmdldCh0KX0pLl9faXRlcmF0b3IoZSx0KX0sd3QucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7cmV0dXJuIG4odGhpcy5fZGVmYXVsdFZhbHVlcykubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZ2V0KHQpfSkuX19pdGVyYXRlKGUsdCl9LHd0LnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyPWZ1bmN0aW9uKGUpe2lmKGU9PT10aGlzLl9fb3duZXJJRClyZXR1cm4gdGhpczt2YXIgdD10aGlzLl9tYXAmJnRoaXMuX21hcC5fX2Vuc3VyZU93bmVyKGUpO3JldHVybiBlP010KHRoaXMsdCxlKToodGhpcy5fX293bmVySUQ9ZSx0aGlzLl9tYXA9dCx0aGlzKX07dmFyIFFuPXd0LnByb3RvdHlwZTtRbi5kZWxldGU9UW4ucmVtb3ZlLFFuLmRlbGV0ZUluPVFuLnJlbW92ZUluPVVuLnJlbW92ZUluLFFuLm1lcmdlPVVuLm1lcmdlLFFuLm1lcmdlV2l0aD1Vbi5tZXJnZVdpdGgsUW4ubWVyZ2VJbj1Vbi5tZXJnZUluLFFuLm1lcmdlRGVlcD1Vbi5tZXJnZURlZXAsUW4ubWVyZ2VEZWVwV2l0aD1Vbi5tZXJnZURlZXBXaXRoLFFuLm1lcmdlRGVlcEluPVVuLm1lcmdlRGVlcEluLFFuLnNldEluPVVuLnNldEluLFFuLnVwZGF0ZT1Vbi51cGRhdGUsUW4udXBkYXRlSW49VW4udXBkYXRlSW4sUW4ud2l0aE11dGF0aW9ucz1Vbi53aXRoTXV0YXRpb25zLFFuLmFzTXV0YWJsZT1Vbi5hc011dGFibGUsUW4uYXNJbW11dGFibGU9VW4uYXNJbW11dGFibGUsZShOdCxyZSksTnQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyhhcmd1bWVudHMpfSxOdC5mcm9tS2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcyhuKGUpLmtleVNlcSgpKX0sTnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZygiU2V0IHsiLCJ9Iil9LE50LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZSl9LE50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEZ0KHRoaXMsdGhpcy5fbWFwLnNldChlLCEwKSl9LE50LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEZ0KHRoaXMsdGhpcy5fbWFwLnJlbW92ZShlKSl9LE50LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBGdCh0aGlzLHRoaXMuX21hcC5jbGVhcigpKX0sTnQucHJvdG90eXBlLnVuaW9uPWZ1bmN0aW9uKCl7dmFyIGU9bG4uY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGU9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1lLnNpemV9KSwwPT09ZS5sZW5ndGg/dGhpczowIT09dGhpcy5zaXplfHx0aGlzLl9fb3duZXJJRHx8MSE9PWUubGVuZ3RoP3RoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbih0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylvKGVbbl0pLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuYWRkKGUpfSl9KTp0aGlzLmNvbnN0cnVjdG9yKGVbMF0pfSxOdC5wcm90b3R5cGUuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7dmFyIGU9bG4uY2FsbChhcmd1bWVudHMsMCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0aGlzO2U9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9KTt2YXIgdD10aGlzO3JldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24obil7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXModCl9KXx8bi5yZW1vdmUodCl9KX0pfSxOdC5wcm90b3R5cGUuc3VidHJhY3Q9ZnVuY3Rpb24oKXt2YXIgZT1sbi5jYWxsKGFyZ3VtZW50cywwKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHRoaXM7ZT1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pO3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMud2l0aE11dGF0aW9ucyhmdW5jdGlvbihuKXt0LmZvckVhY2goZnVuY3Rpb24odCl7ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmluY2x1ZGVzKHQpfSkmJm4ucmVtb3ZlKHQpfSl9KX0sTnQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxOdC5wcm90b3R5cGUubWVyZ2VXaXRoPWZ1bmN0aW9uKGUpe3ZhciB0PWxuLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0aGlzLnVuaW9uLmFwcGx5KHRoaXMsdCl9LE50LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBHdCh5dCh0aGlzLGUpKX0sTnQucHJvdG90eXBlLnNvcnRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBHdCh5dCh0aGlzLHQsZSkpfSxOdC5wcm90b3R5cGUud2FzQWx0ZXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAud2FzQWx0ZXJlZCgpfSxOdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0ZShmdW5jdGlvbih0LHIpe3JldHVybiBlKHIscixuKX0sdCl9LE50LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLl9faXRlcmF0b3IoZSx0KX0sTnQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7aWYoZT09PXRoaXMuX19vd25lcklEKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuX21hcC5fX2Vuc3VyZU93bmVyKGUpO3JldHVybiBlP3RoaXMuX19tYWtlKHQsZSk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fbWFwPXQsdGhpcyl9LE50LmlzU2V0PUh0O3ZhciBKbj0iQEBfX0lNTVVUQUJMRV9TRVRfX0BAIixabj1OdC5wcm90b3R5cGU7Wm5bSm5dPSEwLFpuLmRlbGV0ZT1abi5yZW1vdmUsWm4ubWVyZ2VEZWVwPVpuLm1lcmdlLFpuLm1lcmdlRGVlcFdpdGg9Wm4ubWVyZ2VXaXRoLFpuLndpdGhNdXRhdGlvbnM9VW4ud2l0aE11dGF0aW9ucyxabi5hc011dGFibGU9VW4uYXNNdXRhYmxlLFpuLmFzSW1tdXRhYmxlPVVuLmFzSW1tdXRhYmxlLFpuLl9fZW1wdHk9VXQsWm4uX19tYWtlPUJ0O3ZhciBlcjtlKEd0LE50KSxHdC5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LEd0LmZyb21LZXlzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzKG4oZSkua2V5U2VxKCkpfSxHdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJPcmRlcmVkU2V0IHsiLCJ9Iil9LEd0LmlzT3JkZXJlZFNldD16dDt2YXIgdHI9R3QucHJvdG90eXBlO3RyW19uXT0hMCx0ci5fX2VtcHR5PVd0LHRyLl9fbWFrZT1WdDt2YXIgbnI7ZShZdCxuZSksWXQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyhhcmd1bWVudHMpfSxZdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKCJTdGFjayBbIiwiXSIpfSxZdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faGVhZDtmb3IoZT1tKHRoaXMsZSk7biYmZS0tOyluPW4ubmV4dDtyZXR1cm4gbj9uLnZhbHVlOnR9LFl0LnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWQmJnRoaXMuX2hlYWQudmFsdWV9LFl0LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXM7Zm9yKHZhciBlPXRoaXMuc2l6ZSthcmd1bWVudHMubGVuZ3RoLHQ9dGhpcy5faGVhZCxuPWFyZ3VtZW50cy5sZW5ndGgtMTtuPj0wO24tLSl0PXt2YWx1ZTphcmd1bWVudHNbbl0sbmV4dDp0fTtyZXR1cm4gdGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT1lLHRoaXMuX2hlYWQ9dCx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6S3QoZSx0KX0sWXQucHJvdG90eXBlLnB1c2hBbGw9ZnVuY3Rpb24oZSl7aWYoZT1yKGUpLDA9PT1lLnNpemUpcmV0dXJuIHRoaXM7Y2UoZS5zaXplKTt2YXIgdD10aGlzLnNpemUsbj10aGlzLl9oZWFkO3JldHVybiBlLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrKyxuPXt2YWx1ZTplLG5leHQ6bn19KSx0aGlzLl9fb3duZXJJRD8odGhpcy5zaXplPXQsdGhpcy5faGVhZD1uLHRoaXMuX19oYXNoPXZvaWQgMCx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpLdCh0LG4pfSxZdC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpY2UoMSl9LFl0LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFl0LnByb3RvdHlwZS51bnNoaWZ0QWxsPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hBbGwoZSl9LFl0LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFl0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT0wLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX19oYXNoPXZvaWQgMCx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpYdCgpfSxZdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXtpZihnKGUsdCx0aGlzLnNpemUpKXJldHVybiB0aGlzO3ZhciBuPWIoZSx0aGlzLnNpemUpO2lmKEUodCx0aGlzLnNpemUpIT09dGhpcy5zaXplKXJldHVybiBuZS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLGUsdCk7Zm9yKHZhciByPXRoaXMuc2l6ZS1uLG89dGhpcy5faGVhZDtuLS07KW89by5uZXh0O3JldHVybiB0aGlzLl9fb3duZXJJRD8odGhpcy5zaXplPXIsdGhpcy5faGVhZD1vLHRoaXMuX19oYXNoPXZvaWQgMCx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpLdChyLG8pfSxZdC5wcm90b3R5cGUuX19lbnN1cmVPd25lcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMuX19vd25lcklEP3RoaXM6ZT9LdCh0aGlzLnNpemUsdGhpcy5faGVhZCxlLHRoaXMuX19oYXNoKToodGhpcy5fX293bmVySUQ9ZSx0aGlzLl9fYWx0ZXJlZD0hMSx0aGlzKX0sWXQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHRoaXMucmV2ZXJzZSgpLl9faXRlcmF0ZShlKTtmb3IodmFyIG49MCxyPXRoaXMuX2hlYWQ7ciYmITEhPT1lKHIudmFsdWUsbisrLHRoaXMpOylyPXIubmV4dDtyZXR1cm4gbn0sWXQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0aGlzLnJldmVyc2UoKS5fX2l0ZXJhdG9yKGUpO3ZhciBuPTAscj10aGlzLl9oZWFkO3JldHVybiBuZXcgdihmdW5jdGlvbigpe2lmKHIpe3ZhciB0PXIudmFsdWU7cmV0dXJuIHI9ci5uZXh0LFQoZSxuKyssdCl9cmV0dXJuIEEoKX0pfSxZdC5pc1N0YWNrPXF0O3ZhciBycj0iQEBfX0lNTVVUQUJMRV9TVEFDS19fQEAiLG9yPVl0LnByb3RvdHlwZTtvcltycl09ITAsb3Iud2l0aE11dGF0aW9ucz1Vbi53aXRoTXV0YXRpb25zLG9yLmFzTXV0YWJsZT1Vbi5hc011dGFibGUsb3IuYXNJbW11dGFibGU9VW4uYXNJbW11dGFibGUsb3Iud2FzQWx0ZXJlZD1Vbi53YXNBbHRlcmVkO3ZhciBzcjt0Lkl0ZXJhdG9yPXYsJHQodCx7dG9BcnJheTpmdW5jdGlvbigpe2NlKHRoaXMuc2l6ZSk7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZXx8MCk7cmV0dXJuIHRoaXMudmFsdWVTZXEoKS5fX2l0ZXJhdGUoZnVuY3Rpb24odCxuKXtlW25dPXR9KSxlfSx0b0luZGV4ZWRTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG90KHRoaXMpfSx0b0pTOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TZXEoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvSlM/ZS50b0pTKCk6ZX0pLl9fdG9KUygpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1NlcSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudG9KU09OP2UudG9KU09OKCk6ZX0pLl9fdG9KUygpfSx0b0tleWVkU2VxOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBydCh0aGlzLCEwKX0sdG9NYXA6ZnVuY3Rpb24oKXtyZXR1cm4gZGUodGhpcy50b0tleWVkU2VxKCkpfSx0b09iamVjdDpmdW5jdGlvbigpe2NlKHRoaXMuc2l6ZSk7dmFyIGU9e307cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHQsbil7ZVtuXT10fSksZX0sdG9PcmRlcmVkTWFwOmZ1bmN0aW9uKCl7cmV0dXJuIEplKHRoaXMudG9LZXllZFNlcSgpKX0sdG9PcmRlcmVkU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEd0KGkodGhpcyk/dGhpcy52YWx1ZVNlcSgpOnRoaXMpfSx0b1NldDpmdW5jdGlvbigpe3JldHVybiBOdChpKHRoaXMpP3RoaXMudmFsdWVTZXEoKTp0aGlzKX0sdG9TZXRTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHN0KHRoaXMpfSx0b1NlcTpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpP3RoaXMudG9JbmRleGVkU2VxKCk6aSh0aGlzKT90aGlzLnRvS2V5ZWRTZXEoKTp0aGlzLnRvU2V0U2VxKCl9LHRvU3RhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gWXQoaSh0aGlzKT90aGlzLnZhbHVlU2VxKCk6dGhpcyl9LHRvTGlzdDpmdW5jdGlvbigpe3JldHVybiBGZShpKHRoaXMpP3RoaXMudmFsdWVTZXEoKTp0aGlzKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW0l0ZXJhYmxlXSJ9LF9fdG9TdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuc2l6ZT9lK3Q6ZSsiICIrdGhpcy50b1NlcSgpLm1hcCh0aGlzLl9fdG9TdHJpbmdNYXBwZXIpLmpvaW4oIiwgIikrIiAiK3R9LGNvbmNhdDpmdW5jdGlvbigpe3JldHVybiBDdCh0aGlzLGh0KHRoaXMsbG4uY2FsbChhcmd1bWVudHMsMCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gWCh0LGUpfSl9LGVudHJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKHZuKX0sZXZlcnk6ZnVuY3Rpb24oZSx0KXtjZSh0aGlzLnNpemUpO3ZhciBuPSEwO3JldHVybiB0aGlzLl9faXRlcmF0ZShmdW5jdGlvbihyLG8scyl7aWYoIWUuY2FsbCh0LHIsbyxzKSlyZXR1cm4gbj0hMSwhMX0pLG59LGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBDdCh0aGlzLGN0KHRoaXMsZSx0LCEwKSl9LGZpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZmluZEVudHJ5KGUsdCk7cmV0dXJuIHI/clsxXTpufSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNlKHRoaXMuc2l6ZSksdGhpcy5fX2l0ZXJhdGUodD9lLmJpbmQodCk6ZSl9LGpvaW46ZnVuY3Rpb24oZSl7Y2UodGhpcy5zaXplKSxlPXZvaWQgMCE9PWU/IiIrZToiLCI7dmFyIHQ9IiIsbj0hMDtyZXR1cm4gdGhpcy5fX2l0ZXJhdGUoZnVuY3Rpb24ocil7bj9uPSExOnQrPWUsdCs9bnVsbCE9PXImJnZvaWQgMCE9PXI/ci50b1N0cmluZygpOiIifSksdH0sa2V5czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlcmF0b3IoRW4pfSxtYXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQ3QodGhpcyxsdCh0aGlzLGUsdCkpfSxyZWR1Y2U6ZnVuY3Rpb24oZSx0LG4pe2NlKHRoaXMuc2l6ZSk7dmFyIHIsbztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP289ITA6cj10LHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKHQscyxpKXtvPyhvPSExLHI9dCk6cj1lLmNhbGwobixyLHQscyxpKX0pLHJ9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnRvS2V5ZWRTZXEoKS5yZXZlcnNlKCk7cmV0dXJuIHIucmVkdWNlLmFwcGx5KHIsYXJndW1lbnRzKX0scmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBDdCh0aGlzLHV0KHRoaXMsITApKX0sc2xpY2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQ3QodGhpcyxwdCh0aGlzLGUsdCwhMCkpfSxzb21lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIXRoaXMuZXZlcnkoWnQoZSksdCl9LHNvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEN0KHRoaXMseXQodGhpcyxlKSl9LHZhbHVlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlcmF0b3IoeW4pfSxidXRMYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpY2UoMCwtMSl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zaXplPzA9PT10aGlzLnNpemU6IXRoaXMuc29tZShmdW5jdGlvbigpe3JldHVybiEwfSl9LGNvdW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZT90aGlzLnRvU2VxKCkuZmlsdGVyKGUsdCk6dGhpcyl9LGNvdW50Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHQodGhpcyxlLHQpfSxlcXVhbHM6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxlKX0sZW50cnlTZXE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX2NhY2hlKXJldHVybiBuZXcgTShlLl9jYWNoZSk7dmFyIHQ9ZS50b1NlcSgpLm1hcChKdCkudG9JbmRleGVkU2VxKCk7cmV0dXJuIHQuZnJvbUVudHJ5U2VxPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TZXEoKX0sdH0sZmlsdGVyTm90OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZmlsdGVyKFp0KGUpLHQpfSxmaW5kRW50cnk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW47cmV0dXJuIHRoaXMuX19pdGVyYXRlKGZ1bmN0aW9uKG4sbyxzKXtpZihlLmNhbGwodCxuLG8scykpcmV0dXJuIHI9W28sbl0sITF9KSxyfSxmaW5kS2V5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5maW5kRW50cnkoZSx0KTtyZXR1cm4gbiYmblswXX0sZmluZExhc3Q6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnRvS2V5ZWRTZXEoKS5yZXZlcnNlKCkuZmluZChlLHQsbil9LGZpbmRMYXN0RW50cnk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnRvS2V5ZWRTZXEoKS5yZXZlcnNlKCkuZmluZEVudHJ5KGUsdCxuKX0sZmluZExhc3RLZXk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmZpbmRLZXkoZSx0KX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kKGgpfSxmbGF0TWFwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEN0KHRoaXMsYnQodGhpcyxlLHQpKX0sZmxhdHRlbjpmdW5jdGlvbihlKXtyZXR1cm4gQ3QodGhpcyxndCh0aGlzLGUsITApKX0sZnJvbUVudHJ5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpdCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZmluZChmdW5jdGlvbih0LG4pe3JldHVybiBYKG4sZSl9LHZvaWQgMCx0KX0sZ2V0SW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj10aGlzLG89RHQoZSk7IShuPW8ubmV4dCgpKS5kb25lOyl7dmFyIHM9bi52YWx1ZTtpZigocj1yJiZyLmdldD9yLmdldChzLGhuKTpobik9PT1obilyZXR1cm4gdH1yZXR1cm4gcn0sZ3JvdXBCeTpmdW5jdGlvbihlLHQpe3JldHVybiBfdCh0aGlzLGUsdCl9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXQoZSxobikhPT1obn0saGFzSW46ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0SW4oZSxobikhPT1obn0saXNTdWJzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5jbHVkZXM/ZTp0KGUpLHRoaXMuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0saXNTdXBlcnNldDpmdW5jdGlvbihlKXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgZS5pc1N1YnNldD9lOnQoZSksZS5pc1N1YnNldCh0aGlzKX0sa2V5T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmluZEtleShmdW5jdGlvbih0KXtyZXR1cm4gWCh0LGUpfSl9LGtleVNlcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU2VxKCkubWFwKFF0KS50b0luZGV4ZWRTZXEoKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU2VxKCkucmV2ZXJzZSgpLmZpcnN0KCl9LGxhc3RLZXlPZjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmtleU9mKGUpfSxtYXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ0KHRoaXMsZSl9LG1heEJ5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZ0KHRoaXMsdCxlKX0sbWluOmZ1bmN0aW9uKGUpe3JldHVybiB2dCh0aGlzLGU/ZW4oZSk6cm4pfSxtaW5CeTpmdW5jdGlvbihlLHQpe3JldHVybiB2dCh0aGlzLHQ/ZW4odCk6cm4sZSl9LHJlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGljZSgxKX0sc2tpcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zbGljZShNYXRoLm1heCgwLGUpKX0sc2tpcExhc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIEN0KHRoaXMsdGhpcy50b1NlcSgpLnJldmVyc2UoKS5za2lwKGUpLnJldmVyc2UoKSl9LHNraXBXaGlsZTpmdW5jdGlvbihlLHQpe3JldHVybiBDdCh0aGlzLG10KHRoaXMsZSx0LCEwKSl9LHNraXBVbnRpbDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNraXBXaGlsZShadChlKSx0KX0sc29ydEJ5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEN0KHRoaXMseXQodGhpcyx0LGUpKX0sdGFrZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zbGljZSgwLE1hdGgubWF4KDAsZSkpfSx0YWtlTGFzdDpmdW5jdGlvbihlKXtyZXR1cm4gQ3QodGhpcyx0aGlzLnRvU2VxKCkucmV2ZXJzZSgpLnRha2UoZSkucmV2ZXJzZSgpKX0sdGFrZVdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEN0KHRoaXMsZnQodGhpcyxlLHQpKX0sdGFrZVVudGlsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudGFrZVdoaWxlKFp0KGUpLHQpfSx2YWx1ZVNlcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvSW5kZXhlZFNlcSgpfSxoYXNoQ29kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFzaHx8KHRoaXMuX19oYXNoPW9uKHRoaXMpKX19KTt2YXIgaXI9dC5wcm90b3R5cGU7aXJbdW5dPSEwLGlyW0NuXT1pci52YWx1ZXMsaXIuX190b0pTPWlyLnRvQXJyYXksaXIuX190b1N0cmluZ01hcHBlcj10bixpci5pbnNwZWN0PWlyLnRvU291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX0saXIuY2hhaW49aXIuZmxhdE1hcCxpci5jb250YWlucz1pci5pbmNsdWRlcywkdChuLHtmbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIEN0KHRoaXMsYXQodGhpcykpfSxtYXBFbnRyaWVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPTA7cmV0dXJuIEN0KHRoaXMsdGhpcy50b1NlcSgpLm1hcChmdW5jdGlvbihvLHMpe3JldHVybiBlLmNhbGwodCxbcyxvXSxyKyssbil9KS5mcm9tRW50cnlTZXEoKSl9LG1hcEtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBDdCh0aGlzLHRoaXMudG9TZXEoKS5mbGlwKCkubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuY2FsbCh0LHIsbyxuKX0pLmZsaXAoKSl9fSk7dmFyIGFyPW4ucHJvdG90eXBlO3JldHVybiBhcltjbl09ITAsYXJbQ25dPWlyLmVudHJpZXMsYXIuX190b0pTPWlyLnRvT2JqZWN0LGFyLl9fdG9TdHJpbmdNYXBwZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogIit0bihlKX0sJHQocix7dG9LZXllZFNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgcnQodGhpcywhMSl9LGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBDdCh0aGlzLGN0KHRoaXMsZSx0LCExKSl9LGZpbmRJbmRleDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmluZEVudHJ5KGUsdCk7cmV0dXJuIG4/blswXTotMX0saW5kZXhPZjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmtleU9mKGUpO3JldHVybiB2b2lkIDA9PT10Py0xOnR9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGFzdEtleU9mKGUpO3JldHVybiB2b2lkIDA9PT10Py0xOnR9LHJldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gQ3QodGhpcyx1dCh0aGlzLCExKSl9LHNsaWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEN0KHRoaXMscHQodGhpcyxlLHQsITEpKX0sc3BsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZih0PU1hdGgubWF4KDB8dCwwKSwwPT09bnx8Mj09PW4mJiF0KXJldHVybiB0aGlzO2U9YihlLGU8MD90aGlzLmNvdW50KCk6dGhpcy5zaXplKTt2YXIgcj10aGlzLnNsaWNlKDAsZSk7cmV0dXJuIEN0KHRoaXMsMT09PW4/cjpyLmNvbmNhdChwKGFyZ3VtZW50cywyKSx0aGlzLnNsaWNlKGUrdCkpKX0sZmluZExhc3RJbmRleDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmluZExhc3RFbnRyeShlLHQpO3JldHVybiBuP25bMF06LTF9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KDApfSxmbGF0dGVuOmZ1bmN0aW9uKGUpe3JldHVybiBDdCh0aGlzLGd0KHRoaXMsZSwhMSkpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1tKHRoaXMsZSksZTwwfHx0aGlzLnNpemU9PT0xLzB8fHZvaWQgMCE9PXRoaXMuc2l6ZSYmZT50aGlzLnNpemU/dDp0aGlzLmZpbmQoZnVuY3Rpb24odCxuKXtyZXR1cm4gbj09PWV9LHZvaWQgMCx0KX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybihlPW0odGhpcyxlKSk+PTAmJih2b2lkIDAhPT10aGlzLnNpemU/dGhpcy5zaXplPT09MS8wfHxlPHRoaXMuc2l6ZTotMSE9PXRoaXMuaW5kZXhPZihlKSl9LGludGVycG9zZTpmdW5jdGlvbihlKXtyZXR1cm4gQ3QodGhpcyxFdCh0aGlzLGUpKX0saW50ZXJsZWF2ZTpmdW5jdGlvbigpe3ZhciBlPVt0aGlzXS5jb25jYXQocChhcmd1bWVudHMpKSx0PUF0KHRoaXMudG9TZXEoKSxELm9mLGUpLG49dC5mbGF0dGVuKCEwKTtyZXR1cm4gdC5zaXplJiYobi5zaXplPXQuc2l6ZSplLmxlbmd0aCksQ3QodGhpcyxuKX0sa2V5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIFooMCx0aGlzLnNpemUpfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KC0xKX0sc2tpcFdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEN0KHRoaXMsbXQodGhpcyxlLHQsITEpKX0semlwOmZ1bmN0aW9uKCl7cmV0dXJuIEN0KHRoaXMsQXQodGhpcyxubixbdGhpc10uY29uY2F0KHAoYXJndW1lbnRzKSkpKX0semlwV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1wKGFyZ3VtZW50cyk7cmV0dXJuIHRbMF09dGhpcyxDdCh0aGlzLEF0KHRoaXMsZSx0KSl9fSksci5wcm90b3R5cGVbZG5dPSEwLHIucHJvdG90eXBlW19uXT0hMCwkdChvLHtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5oYXMoZSk/ZTp0fSxpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSl9LGtleVNlcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlU2VxKCl9fSksby5wcm90b3R5cGUuaGFzPWlyLmluY2x1ZGVzLG8ucHJvdG90eXBlLmNvbnRhaW5zPW8ucHJvdG90eXBlLmluY2x1ZGVzLCR0KEwsbi5wcm90b3R5cGUpLCR0KEQsci5wcm90b3R5cGUpLCR0KHcsby5wcm90b3R5cGUpLCR0KHRlLG4ucHJvdG90eXBlKSwkdChuZSxyLnByb3RvdHlwZSksJHQocmUsby5wcm90b3R5cGUpLHtJdGVyYWJsZTp0LFNlcTp4LENvbGxlY3Rpb246ZWUsTWFwOmRlLE9yZGVyZWRNYXA6SmUsTGlzdDpGZSxTdGFjazpZdCxTZXQ6TnQsT3JkZXJlZFNldDpHdCxSZWNvcmQ6d3QsUmFuZ2U6WixSZXBlYXQ6USxpczpYLGZyb21KUzpXfX0pfSwiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0KXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtlLnN1cGVyXz10LGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtlLnN1cGVyXz10O3ZhciBuPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lfX0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL2NyZWF0ZVByZWZpeGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUucHJlZml4TWFwLG49ZS5wbHVnaW5zLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmZ1bmN0aW9uKGUpe3JldHVybiBlfTtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O28odGhpcyxlKTt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvcj9uYXZpZ2F0b3IudXNlckFnZW50OnZvaWQgMDtpZih0aGlzLl91c2VyQWdlbnQ9bi51c2VyQWdlbnR8fHIsdGhpcy5fa2VlcFVucHJlZml4ZWQ9bi5rZWVwVW5wcmVmaXhlZHx8ITEsdGhpcy5fdXNlckFnZW50JiYodGhpcy5fYnJvd3NlckluZm89KDAsbC5kZWZhdWx0KSh0aGlzLl91c2VyQWdlbnQpKSwhdGhpcy5fYnJvd3NlckluZm98fCF0aGlzLl9icm93c2VySW5mby5jc3NQcmVmaXgpcmV0dXJuIHRoaXMuX3VzZUZhbGxiYWNrPSEwLCExO3RoaXMucHJlZml4ZWRLZXlmcmFtZXM9KDAsYy5kZWZhdWx0KSh0aGlzLl9icm93c2VySW5mby5icm93c2VyTmFtZSx0aGlzLl9icm93c2VySW5mby5icm93c2VyVmVyc2lvbix0aGlzLl9icm93c2VySW5mby5jc3NQcmVmaXgpO3ZhciBzPXRoaXMuX2Jyb3dzZXJJbmZvLmJyb3dzZXJOYW1lJiZ0W3RoaXMuX2Jyb3dzZXJJbmZvLmJyb3dzZXJOYW1lXTtpZihzKXt0aGlzLl9yZXF1aXJlc1ByZWZpeD17fTtmb3IodmFyIGkgaW4gcylzW2ldPj10aGlzLl9icm93c2VySW5mby5icm93c2VyVmVyc2lvbiYmKHRoaXMuX3JlcXVpcmVzUHJlZml4W2ldPSEwKTt0aGlzLl9oYXNQcm9wc1JlcXVpcmluZ1ByZWZpeD1PYmplY3Qua2V5cyh0aGlzLl9yZXF1aXJlc1ByZWZpeCkubGVuZ3RoPjB9ZWxzZSB0aGlzLl91c2VGYWxsYmFjaz0hMDt0aGlzLl9tZXRhRGF0YT17YnJvd3NlclZlcnNpb246dGhpcy5fYnJvd3NlckluZm8uYnJvd3NlclZlcnNpb24sYnJvd3Nlck5hbWU6dGhpcy5fYnJvd3NlckluZm8uYnJvd3Nlck5hbWUsY3NzUHJlZml4OnRoaXMuX2Jyb3dzZXJJbmZvLmNzc1ByZWZpeCxqc1ByZWZpeDp0aGlzLl9icm93c2VySW5mby5qc1ByZWZpeCxrZWVwVW5wcmVmaXhlZDp0aGlzLl9rZWVwVW5wcmVmaXhlZCxyZXF1aXJlc1ByZWZpeDp0aGlzLl9yZXF1aXJlc1ByZWZpeH19cmV0dXJuIGkoZSxbe2tleToicHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdXNlRmFsbGJhY2s/cihlKTp0aGlzLl9oYXNQcm9wc1JlcXVpcmluZ1ByZWZpeD90aGlzLl9wcmVmaXhTdHlsZShlKTplfX0se2tleToiX3ByZWZpeFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl7dmFyIHI9ZVt0XTtpZigoMCxoLmRlZmF1bHQpKHIpKWVbdF09dGhpcy5wcmVmaXgocik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG89W10scz0wLGk9ci5sZW5ndGg7czxpOysrcyl7dmFyIGE9KDAsYi5kZWZhdWx0KShuLHQscltzXSxlLHRoaXMuX21ldGFEYXRhKTsoMCxmLmRlZmF1bHQpKG8sYXx8cltzXSl9by5sZW5ndGg+MCYmKGVbdF09byl9ZWxzZXt2YXIgbD0oMCxiLmRlZmF1bHQpKG4sdCxyLGUsdGhpcy5fbWV0YURhdGEpO2wmJihlW3RdPWwpLHRoaXMuX3JlcXVpcmVzUHJlZml4Lmhhc093blByb3BlcnR5KHQpJiYoZVt0aGlzLl9icm93c2VySW5mby5qc1ByZWZpeCsoMCxfLmRlZmF1bHQpKHQpXT1yLHRoaXMuX2tlZXBVbnByZWZpeGVkfHxkZWxldGUgZVt0XSl9fXJldHVybiBlfX1dLFt7a2V5OiJwcmVmaXhBbGwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiByKGUpfX1dKSxlfSgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKTt0LmRlZmF1bHQ9czt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvZ2V0QnJvd3NlckluZm9ybWF0aW9uLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkS2V5ZnJhbWVzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2NhcGl0YWxpemVTdHJpbmcuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvYWRkTmV3VmFsdWVzT25seS5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9pc09iamVjdC5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9wcmVmaXhWYWx1ZS5qcyIpLGI9cihnKTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvZHluYW1pY0RhdGEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD17cGx1Z2luczpbXSxwcmVmaXhNYXA6e2Nocm9tZTp7YXBwZWFyYW5jZTo2NCx1c2VyU2VsZWN0OjUzLHRleHRFbXBoYXNpc1Bvc2l0aW9uOjY0LHRleHRFbXBoYXNpczo2NCx0ZXh0RW1waGFzaXNTdHlsZTo2NCx0ZXh0RW1waGFzaXNDb2xvcjo2NCxib3hEZWNvcmF0aW9uQnJlYWs6NjQsY2xpcFBhdGg6NTQsbWFza0ltYWdlOjY0LG1hc2tNb2RlOjY0LG1hc2tSZXBlYXQ6NjQsbWFza1Bvc2l0aW9uOjY0LG1hc2tDbGlwOjY0LG1hc2tPcmlnaW46NjQsbWFza1NpemU6NjQsbWFza0NvbXBvc2l0ZTo2NCxtYXNrOjY0LG1hc2tCb3JkZXJTb3VyY2U6NjQsbWFza0JvcmRlck1vZGU6NjQsbWFza0JvcmRlclNsaWNlOjY0LG1hc2tCb3JkZXJXaWR0aDo2NCxtYXNrQm9yZGVyT3V0c2V0OjY0LG1hc2tCb3JkZXJSZXBlYXQ6NjQsbWFza0JvcmRlcjo2NCxtYXNrVHlwZTo2NCx0ZXh0RGVjb3JhdGlvblN0eWxlOjU2LHRleHREZWNvcmF0aW9uU2tpcDo1Nix0ZXh0RGVjb3JhdGlvbkxpbmU6NTYsdGV4dERlY29yYXRpb25Db2xvcjo1NixmaWx0ZXI6NTIsZm9udEZlYXR1cmVTZXR0aW5nczo0NyxicmVha0FmdGVyOjQ5LGJyZWFrQmVmb3JlOjQ5LGJyZWFrSW5zaWRlOjQ5LGNvbHVtbkNvdW50OjQ5LGNvbHVtbkZpbGw6NDksY29sdW1uR2FwOjQ5LGNvbHVtblJ1bGU6NDksY29sdW1uUnVsZUNvbG9yOjQ5LGNvbHVtblJ1bGVTdHlsZTo0OSxjb2x1bW5SdWxlV2lkdGg6NDksY29sdW1uczo0OSxjb2x1bW5TcGFuOjQ5LGNvbHVtbldpZHRoOjQ5LHdyaXRpbmdNb2RlOjQ3fSxzYWZhcmk6e2ZsZXg6OCxmbGV4QmFzaXM6OCxmbGV4RGlyZWN0aW9uOjgsZmxleEdyb3c6OCxmbGV4Rmxvdzo4LGZsZXhTaHJpbms6OCxmbGV4V3JhcDo4LGFsaWduQ29udGVudDo4LGFsaWduSXRlbXM6OCxhbGlnblNlbGY6OCxqdXN0aWZ5Q29udGVudDo4LG9yZGVyOjgsdHJhbnNmb3JtOjgsdHJhbnNmb3JtT3JpZ2luOjgsdHJhbnNmb3JtT3JpZ2luWDo4LHRyYW5zZm9ybU9yaWdpblk6OCxiYWNrZmFjZVZpc2liaWxpdHk6OCxwZXJzcGVjdGl2ZTo4LHBlcnNwZWN0aXZlT3JpZ2luOjgsdHJhbnNmb3JtU3R5bGU6OCx0cmFuc2Zvcm1PcmlnaW5aOjgsYW5pbWF0aW9uOjgsYW5pbWF0aW9uRGVsYXk6OCxhbmltYXRpb25EaXJlY3Rpb246OCxhbmltYXRpb25GaWxsTW9kZTo4LGFuaW1hdGlvbkR1cmF0aW9uOjgsYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6OCxhbmltYXRpb25OYW1lOjgsYW5pbWF0aW9uUGxheVN0YXRlOjgsYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246OCxhcHBlYXJhbmNlOjExLHVzZXJTZWxlY3Q6MTEsYmFja2Ryb3BGaWx0ZXI6MTEsZm9udEtlcm5pbmc6OSxzY3JvbGxTbmFwVHlwZToxMC4xLHNjcm9sbFNuYXBQb2ludHNYOjEwLjEsc2Nyb2xsU25hcFBvaW50c1k6MTAuMSxzY3JvbGxTbmFwRGVzdGluYXRpb246MTAuMSxzY3JvbGxTbmFwQ29vcmRpbmF0ZToxMC4xLGJveERlY29yYXRpb25CcmVhazoxMSxjbGlwUGF0aDoxMSxtYXNrSW1hZ2U6MTEsbWFza01vZGU6MTEsbWFza1JlcGVhdDoxMSxtYXNrUG9zaXRpb246MTEsbWFza0NsaXA6MTEsbWFza09yaWdpbjoxMSxtYXNrU2l6ZToxMSxtYXNrQ29tcG9zaXRlOjExLG1hc2s6MTEsbWFza0JvcmRlclNvdXJjZToxMSxtYXNrQm9yZGVyTW9kZToxMSxtYXNrQm9yZGVyU2xpY2U6MTEsbWFza0JvcmRlcldpZHRoOjExLG1hc2tCb3JkZXJPdXRzZXQ6MTEsbWFza0JvcmRlclJlcGVhdDoxMSxtYXNrQm9yZGVyOjExLG1hc2tUeXBlOjExLHRleHREZWNvcmF0aW9uU3R5bGU6MTEsdGV4dERlY29yYXRpb25Ta2lwOjExLHRleHREZWNvcmF0aW9uTGluZToxMSx0ZXh0RGVjb3JhdGlvbkNvbG9yOjExLHNoYXBlSW1hZ2VUaHJlc2hvbGQ6MTAsc2hhcGVJbWFnZU1hcmdpbjoxMCxzaGFwZUltYWdlT3V0c2lkZToxMCxmaWx0ZXI6OSxoeXBoZW5zOjExLGZsb3dJbnRvOjExLGZsb3dGcm9tOjExLGJyZWFrQmVmb3JlOjgsYnJlYWtBZnRlcjo4LGJyZWFrSW5zaWRlOjgscmVnaW9uRnJhZ21lbnQ6MTEsY29sdW1uQ291bnQ6OCxjb2x1bW5GaWxsOjgsY29sdW1uR2FwOjgsY29sdW1uUnVsZTo4LGNvbHVtblJ1bGVDb2xvcjo4LGNvbHVtblJ1bGVTdHlsZTo4LGNvbHVtblJ1bGVXaWR0aDo4LGNvbHVtbnM6OCxjb2x1bW5TcGFuOjgsY29sdW1uV2lkdGg6OCx3cml0aW5nTW9kZToxMX0sZmlyZWZveDp7YXBwZWFyYW5jZTo1OCx1c2VyU2VsZWN0OjU4LHRleHRBbGlnbkxhc3Q6NDgsdGFiU2l6ZTo1OCxoeXBoZW5zOjQyLGJyZWFrQWZ0ZXI6NTEsYnJlYWtCZWZvcmU6NTEsYnJlYWtJbnNpZGU6NTEsY29sdW1uQ291bnQ6NTEsY29sdW1uRmlsbDo1MSxjb2x1bW5HYXA6NTEsY29sdW1uUnVsZTo1MSxjb2x1bW5SdWxlQ29sb3I6NTEsY29sdW1uUnVsZVN0eWxlOjUxLGNvbHVtblJ1bGVXaWR0aDo1MSxjb2x1bW5zOjUxLGNvbHVtblNwYW46NTEsY29sdW1uV2lkdGg6NTF9LG9wZXJhOntmbGV4OjE2LGZsZXhCYXNpczoxNixmbGV4RGlyZWN0aW9uOjE2LGZsZXhHcm93OjE2LGZsZXhGbG93OjE2LGZsZXhTaHJpbms6MTYsZmxleFdyYXA6MTYsYWxpZ25Db250ZW50OjE2LGFsaWduSXRlbXM6MTYsYWxpZ25TZWxmOjE2LGp1c3RpZnlDb250ZW50OjE2LG9yZGVyOjE2LHRyYW5zZm9ybToyMix0cmFuc2Zvcm1PcmlnaW46MjIsdHJhbnNmb3JtT3JpZ2luWDoyMix0cmFuc2Zvcm1PcmlnaW5ZOjIyLGJhY2tmYWNlVmlzaWJpbGl0eToyMixwZXJzcGVjdGl2ZToyMixwZXJzcGVjdGl2ZU9yaWdpbjoyMix0cmFuc2Zvcm1TdHlsZToyMix0cmFuc2Zvcm1PcmlnaW5aOjIyLGFuaW1hdGlvbjoyOSxhbmltYXRpb25EZWxheToyOSxhbmltYXRpb25EaXJlY3Rpb246MjksYW5pbWF0aW9uRmlsbE1vZGU6MjksYW5pbWF0aW9uRHVyYXRpb246MjksYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6MjksYW5pbWF0aW9uTmFtZToyOSxhbmltYXRpb25QbGF5U3RhdGU6MjksYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246MjksYXBwZWFyYW5jZTo0OSx1c2VyU2VsZWN0OjQwLGZvbnRLZXJuaW5nOjE5LHRleHRFbXBoYXNpc1Bvc2l0aW9uOjQ5LHRleHRFbXBoYXNpczo0OSx0ZXh0RW1waGFzaXNTdHlsZTo0OSx0ZXh0RW1waGFzaXNDb2xvcjo0OSxib3hEZWNvcmF0aW9uQnJlYWs6NDksY2xpcFBhdGg6NDEsbWFza0ltYWdlOjQ5LG1hc2tNb2RlOjQ5LG1hc2tSZXBlYXQ6NDksbWFza1Bvc2l0aW9uOjQ5LG1hc2tDbGlwOjQ5LG1hc2tPcmlnaW46NDksbWFza1NpemU6NDksbWFza0NvbXBvc2l0ZTo0OSxtYXNrOjQ5LG1hc2tCb3JkZXJTb3VyY2U6NDksbWFza0JvcmRlck1vZGU6NDksbWFza0JvcmRlclNsaWNlOjQ5LG1hc2tCb3JkZXJXaWR0aDo0OSxtYXNrQm9yZGVyT3V0c2V0OjQ5LG1hc2tCb3JkZXJSZXBlYXQ6NDksbWFza0JvcmRlcjo0OSxtYXNrVHlwZTo0OSx0ZXh0RGVjb3JhdGlvblN0eWxlOjQzLHRleHREZWNvcmF0aW9uU2tpcDo0Myx0ZXh0RGVjb3JhdGlvbkxpbmU6NDMsdGV4dERlY29yYXRpb25Db2xvcjo0MyxmaWx0ZXI6MzksZm9udEZlYXR1cmVTZXR0aW5nczozNCxicmVha0FmdGVyOjM2LGJyZWFrQmVmb3JlOjM2LGJyZWFrSW5zaWRlOjM2LGNvbHVtbkNvdW50OjM2LGNvbHVtbkZpbGw6MzYsY29sdW1uR2FwOjM2LGNvbHVtblJ1bGU6MzYsY29sdW1uUnVsZUNvbG9yOjM2LGNvbHVtblJ1bGVTdHlsZTozNixjb2x1bW5SdWxlV2lkdGg6MzYsY29sdW1uczozNixjb2x1bW5TcGFuOjM2LGNvbHVtbldpZHRoOjM2LHdyaXRpbmdNb2RlOjM0fSxpZTp7dXNlclNlbGVjdDoxMSx3cmFwRmxvdzoxMSx3cmFwVGhyb3VnaDoxMSx3cmFwTWFyZ2luOjExLHNjcm9sbFNuYXBUeXBlOjExLHNjcm9sbFNuYXBQb2ludHNYOjExLHNjcm9sbFNuYXBQb2ludHNZOjExLHNjcm9sbFNuYXBEZXN0aW5hdGlvbjoxMSxzY3JvbGxTbmFwQ29vcmRpbmF0ZToxMSxoeXBoZW5zOjExLGZsb3dJbnRvOjExLGZsb3dGcm9tOjExLGJyZWFrQmVmb3JlOjExLGJyZWFrQWZ0ZXI6MTEsYnJlYWtJbnNpZGU6MTEscmVnaW9uRnJhZ21lbnQ6MTEsZ3JpZFRlbXBsYXRlQ29sdW1uczoxMSxncmlkVGVtcGxhdGVSb3dzOjExLGdyaWRUZW1wbGF0ZUFyZWFzOjExLGdyaWRUZW1wbGF0ZToxMSxncmlkQXV0b0NvbHVtbnM6MTEsZ3JpZEF1dG9Sb3dzOjExLGdyaWRBdXRvRmxvdzoxMSxncmlkOjExLGdyaWRSb3dTdGFydDoxMSxncmlkQ29sdW1uU3RhcnQ6MTEsZ3JpZFJvd0VuZDoxMSxncmlkUm93OjExLGdyaWRDb2x1bW46MTEsZ3JpZENvbHVtbkVuZDoxMSxncmlkQ29sdW1uR2FwOjExLGdyaWRSb3dHYXA6MTEsZ3JpZEFyZWE6MTEsZ3JpZEdhcDoxMSx0ZXh0U2l6ZUFkanVzdDoxMSx3cml0aW5nTW9kZToxMX0sZWRnZTp7dXNlclNlbGVjdDoxNix3cmFwRmxvdzoxNix3cmFwVGhyb3VnaDoxNix3cmFwTWFyZ2luOjE2LHNjcm9sbFNuYXBUeXBlOjE2LHNjcm9sbFNuYXBQb2ludHNYOjE2LHNjcm9sbFNuYXBQb2ludHNZOjE2LHNjcm9sbFNuYXBEZXN0aW5hdGlvbjoxNixzY3JvbGxTbmFwQ29vcmRpbmF0ZToxNixoeXBoZW5zOjE2LGZsb3dJbnRvOjE2LGZsb3dGcm9tOjE2LGJyZWFrQmVmb3JlOjE2LGJyZWFrQWZ0ZXI6MTYsYnJlYWtJbnNpZGU6MTYscmVnaW9uRnJhZ21lbnQ6MTYsZ3JpZFRlbXBsYXRlQ29sdW1uczoxNSxncmlkVGVtcGxhdGVSb3dzOjE1LGdyaWRUZW1wbGF0ZUFyZWFzOjE1LGdyaWRUZW1wbGF0ZToxNSxncmlkQXV0b0NvbHVtbnM6MTUsZ3JpZEF1dG9Sb3dzOjE1LGdyaWRBdXRvRmxvdzoxNSxncmlkOjE1LGdyaWRSb3dTdGFydDoxNSxncmlkQ29sdW1uU3RhcnQ6MTUsZ3JpZFJvd0VuZDoxNSxncmlkUm93OjE1LGdyaWRDb2x1bW46MTUsZ3JpZENvbHVtbkVuZDoxNSxncmlkQ29sdW1uR2FwOjE1LGdyaWRSb3dHYXA6MTUsZ3JpZEFyZWE6MTUsZ3JpZEdhcDoxNX0saW9zX3NhZjp7ZmxleDo4LjEsZmxleEJhc2lzOjguMSxmbGV4RGlyZWN0aW9uOjguMSxmbGV4R3Jvdzo4LjEsZmxleEZsb3c6OC4xLGZsZXhTaHJpbms6OC4xLGZsZXhXcmFwOjguMSxhbGlnbkNvbnRlbnQ6OC4xLGFsaWduSXRlbXM6OC4xLGFsaWduU2VsZjo4LjEsanVzdGlmeUNvbnRlbnQ6OC4xLG9yZGVyOjguMSx0cmFuc2Zvcm06OC4xLHRyYW5zZm9ybU9yaWdpbjo4LjEsdHJhbnNmb3JtT3JpZ2luWDo4LjEsdHJhbnNmb3JtT3JpZ2luWTo4LjEsYmFja2ZhY2VWaXNpYmlsaXR5OjguMSxwZXJzcGVjdGl2ZTo4LjEscGVyc3BlY3RpdmVPcmlnaW46OC4xLHRyYW5zZm9ybVN0eWxlOjguMSx0cmFuc2Zvcm1PcmlnaW5aOjguMSxhbmltYXRpb246OC4xLGFuaW1hdGlvbkRlbGF5OjguMSxhbmltYXRpb25EaXJlY3Rpb246OC4xLGFuaW1hdGlvbkZpbGxNb2RlOjguMSxhbmltYXRpb25EdXJhdGlvbjo4LjEsYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6OC4xLGFuaW1hdGlvbk5hbWU6OC4xLGFuaW1hdGlvblBsYXlTdGF0ZTo4LjEsYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246OC4xLGFwcGVhcmFuY2U6MTEsdXNlclNlbGVjdDoxMSxiYWNrZHJvcEZpbHRlcjoxMSxmb250S2VybmluZzoxMSxzY3JvbGxTbmFwVHlwZToxMSxzY3JvbGxTbmFwUG9pbnRzWDoxMSxzY3JvbGxTbmFwUG9pbnRzWToxMSxzY3JvbGxTbmFwRGVzdGluYXRpb246MTEsc2Nyb2xsU25hcENvb3JkaW5hdGU6MTEsYm94RGVjb3JhdGlvbkJyZWFrOjExLGNsaXBQYXRoOjExLG1hc2tJbWFnZToxMSxtYXNrTW9kZToxMSxtYXNrUmVwZWF0OjExLG1hc2tQb3NpdGlvbjoxMSxtYXNrQ2xpcDoxMSxtYXNrT3JpZ2luOjExLG1hc2tTaXplOjExLG1hc2tDb21wb3NpdGU6MTEsbWFzazoxMSxtYXNrQm9yZGVyU291cmNlOjExLG1hc2tCb3JkZXJNb2RlOjExLG1hc2tCb3JkZXJTbGljZToxMSxtYXNrQm9yZGVyV2lkdGg6MTEsbWFza0JvcmRlck91dHNldDoxMSxtYXNrQm9yZGVyUmVwZWF0OjExLG1hc2tCb3JkZXI6MTEsbWFza1R5cGU6MTEsdGV4dFNpemVBZGp1c3Q6MTEsdGV4dERlY29yYXRpb25TdHlsZToxMSx0ZXh0RGVjb3JhdGlvblNraXA6MTEsdGV4dERlY29yYXRpb25MaW5lOjExLHRleHREZWNvcmF0aW9uQ29sb3I6MTEsc2hhcGVJbWFnZVRocmVzaG9sZDoxMCxzaGFwZUltYWdlTWFyZ2luOjEwLHNoYXBlSW1hZ2VPdXRzaWRlOjEwLGZpbHRlcjo5LGh5cGhlbnM6MTEsZmxvd0ludG86MTEsZmxvd0Zyb206MTEsYnJlYWtCZWZvcmU6OC4xLGJyZWFrQWZ0ZXI6OC4xLGJyZWFrSW5zaWRlOjguMSxyZWdpb25GcmFnbWVudDoxMSxjb2x1bW5Db3VudDo4LjEsY29sdW1uRmlsbDo4LjEsY29sdW1uR2FwOjguMSxjb2x1bW5SdWxlOjguMSxjb2x1bW5SdWxlQ29sb3I6OC4xLGNvbHVtblJ1bGVTdHlsZTo4LjEsY29sdW1uUnVsZVdpZHRoOjguMSxjb2x1bW5zOjguMSxjb2x1bW5TcGFuOjguMSxjb2x1bW5XaWR0aDo4LjEsd3JpdGluZ01vZGU6MTF9LGFuZHJvaWQ6e2JvcmRlckltYWdlOjQuMixib3JkZXJJbWFnZU91dHNldDo0LjIsYm9yZGVySW1hZ2VSZXBlYXQ6NC4yLGJvcmRlckltYWdlU2xpY2U6NC4yLGJvcmRlckltYWdlU291cmNlOjQuMixib3JkZXJJbWFnZVdpZHRoOjQuMixmbGV4OjQuMixmbGV4QmFzaXM6NC4yLGZsZXhEaXJlY3Rpb246NC4yLGZsZXhHcm93OjQuMixmbGV4Rmxvdzo0LjIsZmxleFNocmluazo0LjIsZmxleFdyYXA6NC4yLGFsaWduQ29udGVudDo0LjIsYWxpZ25JdGVtczo0LjIsYWxpZ25TZWxmOjQuMixqdXN0aWZ5Q29udGVudDo0LjIsb3JkZXI6NC4yLHRyYW5zaXRpb246NC4yLHRyYW5zaXRpb25EZWxheTo0LjIsdHJhbnNpdGlvbkR1cmF0aW9uOjQuMix0cmFuc2l0aW9uUHJvcGVydHk6NC4yLHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjo0LjIsdHJhbnNmb3JtOjQuNCx0cmFuc2Zvcm1PcmlnaW46NC40LHRyYW5zZm9ybU9yaWdpblg6NC40LHRyYW5zZm9ybU9yaWdpblk6NC40LGJhY2tmYWNlVmlzaWJpbGl0eTo0LjQscGVyc3BlY3RpdmU6NC40LHBlcnNwZWN0aXZlT3JpZ2luOjQuNCx0cmFuc2Zvcm1TdHlsZTo0LjQsdHJhbnNmb3JtT3JpZ2luWjo0LjQsYW5pbWF0aW9uOjQuNCxhbmltYXRpb25EZWxheTo0LjQsYW5pbWF0aW9uRGlyZWN0aW9uOjQuNCxhbmltYXRpb25GaWxsTW9kZTo0LjQsYW5pbWF0aW9uRHVyYXRpb246NC40LGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjQuNCxhbmltYXRpb25OYW1lOjQuNCxhbmltYXRpb25QbGF5U3RhdGU6NC40LGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOjQuNCxhcHBlYXJhbmNlOjU2LHVzZXJTZWxlY3Q6NC40LGZvbnRLZXJuaW5nOjQuNCx0ZXh0RW1waGFzaXNQb3NpdGlvbjo1Nix0ZXh0RW1waGFzaXM6NTYsdGV4dEVtcGhhc2lzU3R5bGU6NTYsdGV4dEVtcGhhc2lzQ29sb3I6NTYsYm94RGVjb3JhdGlvbkJyZWFrOjU2LGNsaXBQYXRoOjQuNCxtYXNrSW1hZ2U6NTYsbWFza01vZGU6NTYsbWFza1JlcGVhdDo1NixtYXNrUG9zaXRpb246NTYsbWFza0NsaXA6NTYsbWFza09yaWdpbjo1NixtYXNrU2l6ZTo1NixtYXNrQ29tcG9zaXRlOjU2LG1hc2s6NTYsbWFza0JvcmRlclNvdXJjZTo1NixtYXNrQm9yZGVyTW9kZTo1NixtYXNrQm9yZGVyU2xpY2U6NTYsbWFza0JvcmRlcldpZHRoOjU2LG1hc2tCb3JkZXJPdXRzZXQ6NTYsbWFza0JvcmRlclJlcGVhdDo1NixtYXNrQm9yZGVyOjU2LG1hc2tUeXBlOjU2LGZpbHRlcjo0LjQsZm9udEZlYXR1cmVTZXR0aW5nczo0LjQsYnJlYWtBZnRlcjo0LjQsYnJlYWtCZWZvcmU6NC40LGJyZWFrSW5zaWRlOjQuNCxjb2x1bW5Db3VudDo0LjQsY29sdW1uRmlsbDo0LjQsY29sdW1uR2FwOjQuNCxjb2x1bW5SdWxlOjQuNCxjb2x1bW5SdWxlQ29sb3I6NC40LGNvbHVtblJ1bGVTdHlsZTo0LjQsY29sdW1uUnVsZVdpZHRoOjQuNCxjb2x1bW5zOjQuNCxjb2x1bW5TcGFuOjQuNCxjb2x1bW5XaWR0aDo0LjQsd3JpdGluZ01vZGU6NC40fSxhbmRfY2hyOnthcHBlYXJhbmNlOjYxLHRleHRFbXBoYXNpc1Bvc2l0aW9uOjYxLHRleHRFbXBoYXNpczo2MSx0ZXh0RW1waGFzaXNTdHlsZTo2MSx0ZXh0RW1waGFzaXNDb2xvcjo2MSxib3hEZWNvcmF0aW9uQnJlYWs6NjEsbWFza0ltYWdlOjYxLG1hc2tNb2RlOjYxLG1hc2tSZXBlYXQ6NjEsbWFza1Bvc2l0aW9uOjYxLG1hc2tDbGlwOjYxLG1hc2tPcmlnaW46NjEsbWFza1NpemU6NjEsbWFza0NvbXBvc2l0ZTo2MSxtYXNrOjYxLG1hc2tCb3JkZXJTb3VyY2U6NjEsbWFza0JvcmRlck1vZGU6NjEsbWFza0JvcmRlclNsaWNlOjYxLG1hc2tCb3JkZXJXaWR0aDo2MSxtYXNrQm9yZGVyT3V0c2V0OjYxLG1hc2tCb3JkZXJSZXBlYXQ6NjEsbWFza0JvcmRlcjo2MSxtYXNrVHlwZTo2MX0sYW5kX3VjOntmbGV4OjExLjQsZmxleEJhc2lzOjExLjQsZmxleERpcmVjdGlvbjoxMS40LGZsZXhHcm93OjExLjQsZmxleEZsb3c6MTEuNCxmbGV4U2hyaW5rOjExLjQsZmxleFdyYXA6MTEuNCxhbGlnbkNvbnRlbnQ6MTEuNCxhbGlnbkl0ZW1zOjExLjQsYWxpZ25TZWxmOjExLjQsanVzdGlmeUNvbnRlbnQ6MTEuNCxvcmRlcjoxMS40LHRyYW5zZm9ybToxMS40LHRyYW5zZm9ybU9yaWdpbjoxMS40LHRyYW5zZm9ybU9yaWdpblg6MTEuNCx0cmFuc2Zvcm1PcmlnaW5ZOjExLjQsYmFja2ZhY2VWaXNpYmlsaXR5OjExLjQscGVyc3BlY3RpdmU6MTEuNCxwZXJzcGVjdGl2ZU9yaWdpbjoxMS40LHRyYW5zZm9ybVN0eWxlOjExLjQsdHJhbnNmb3JtT3JpZ2luWjoxMS40LGFuaW1hdGlvbjoxMS40LGFuaW1hdGlvbkRlbGF5OjExLjQsYW5pbWF0aW9uRGlyZWN0aW9uOjExLjQsYW5pbWF0aW9uRmlsbE1vZGU6MTEuNCxhbmltYXRpb25EdXJhdGlvbjoxMS40LGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjExLjQsYW5pbWF0aW9uTmFtZToxMS40LGFuaW1hdGlvblBsYXlTdGF0ZToxMS40LGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOjExLjQsYXBwZWFyYW5jZToxMS40LHVzZXJTZWxlY3Q6MTEuNCx0ZXh0RW1waGFzaXNQb3NpdGlvbjoxMS40LHRleHRFbXBoYXNpczoxMS40LHRleHRFbXBoYXNpc1N0eWxlOjExLjQsdGV4dEVtcGhhc2lzQ29sb3I6MTEuNCxjbGlwUGF0aDoxMS40LG1hc2tJbWFnZToxMS40LG1hc2tNb2RlOjExLjQsbWFza1JlcGVhdDoxMS40LG1hc2tQb3NpdGlvbjoxMS40LG1hc2tDbGlwOjExLjQsbWFza09yaWdpbjoxMS40LG1hc2tTaXplOjExLjQsbWFza0NvbXBvc2l0ZToxMS40LG1hc2s6MTEuNCxtYXNrQm9yZGVyU291cmNlOjExLjQsbWFza0JvcmRlck1vZGU6MTEuNCxtYXNrQm9yZGVyU2xpY2U6MTEuNCxtYXNrQm9yZGVyV2lkdGg6MTEuNCxtYXNrQm9yZGVyT3V0c2V0OjExLjQsbWFza0JvcmRlclJlcGVhdDoxMS40LG1hc2tCb3JkZXI6MTEuNCxtYXNrVHlwZToxMS40LHRleHRTaXplQWRqdXN0OjExLjQsZmlsdGVyOjExLjQsaHlwaGVuczoxMS40LGZvbnRGZWF0dXJlU2V0dGluZ3M6MTEuNCxicmVha0FmdGVyOjExLjQsYnJlYWtCZWZvcmU6MTEuNCxicmVha0luc2lkZToxMS40LGNvbHVtbkNvdW50OjExLjQsY29sdW1uRmlsbDoxMS40LGNvbHVtbkdhcDoxMS40LGNvbHVtblJ1bGU6MTEuNCxjb2x1bW5SdWxlQ29sb3I6MTEuNCxjb2x1bW5SdWxlU3R5bGU6MTEuNCxjb2x1bW5SdWxlV2lkdGg6MTEuNCxjb2x1bW5zOjExLjQsY29sdW1uU3BhbjoxMS40LGNvbHVtbldpZHRoOjExLjQsd3JpdGluZ01vZGU6MTEuNH0sb3BfbWluaTp7fX19LGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvY3JlYXRlUHJlZml4ZXIuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2N1cnNvci5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvY3Jvc3NGYWRlLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvcGx1Z2lucy9maWx0ZXIuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2ZsZXguanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2ZsZXhib3hPbGQuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2dyYWRpZW50LmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvcGx1Z2lucy9pbWFnZVNldC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvcG9zaXRpb24uanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL3NpemluZy5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvdHJhbnNpdGlvbi5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9keW5hbWljRGF0YS5qcyIpLHg9cihqKSxMPVt1LmRlZmF1bHQsYS5kZWZhdWx0LGQuZGVmYXVsdCxtLmRlZmF1bHQsZy5kZWZhdWx0LEUuZGVmYXVsdCx2LmRlZmF1bHQsQS5kZWZhdWx0LE8uZGVmYXVsdCxwLmRlZmF1bHRdLEQ9KDAscy5kZWZhdWx0KSh7cHJlZml4TWFwOnguZGVmYXVsdC5wcmVmaXhNYXAscGx1Z2luczpMfSxSLmRlZmF1bHQpO3QuZGVmYXVsdD1ELGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2Nyb3NzRmFkZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsaT1yLmJyb3dzZXJWZXJzaW9uLGE9ci5jc3NQcmVmaXgsbD1yLmtlZXBVbnByZWZpeGVkO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCJjcm9zcy1mYWRlKCIpPi0xJiYoImNocm9tZSI9PT1vfHwib3BlcmEiPT09b3x8ImFuZF9jaHIiPT09b3x8KCJpb3Nfc2FmIj09PW98fCJzYWZhcmkiPT09bykmJmk8MTApKXJldHVybigwLHMuZGVmYXVsdCkodC5yZXBsYWNlKC9jcm9zcy1mYWRlXCgvZyxhKyJjcm9zcy1mYWRlKCIpLHQsbCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9nZXRQcmVmaXhlZFZhbHVlLmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2N1cnNvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsbD1yLmJyb3dzZXJWZXJzaW9uLHU9ci5jc3NQcmVmaXgsYz1yLmtlZXBVbnByZWZpeGVkO3JldHVybiJjdXJzb3IiIT09ZXx8IWlbdF18fCJmaXJlZm94IiE9PW8mJiJjaHJvbWUiIT09byYmInNhZmFyaSIhPT1vJiYib3BlcmEiIT09bz8iY3Vyc29yIj09PWUmJmFbdF0mJigiZmlyZWZveCI9PT1vJiZsPDI0fHwiY2hyb21lIj09PW8mJmw8Mzd8fCJzYWZhcmkiPT09byYmbDw5fHwib3BlcmEiPT09byYmbDwyNCk/KDAscy5kZWZhdWx0KSh1K3QsdCxjKTp2b2lkIDA6KDAscy5kZWZhdWx0KSh1K3QsdCxjKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT17Z3JhYjohMCxncmFiYmluZzohMH0sYT17Inpvb20taW4iOiEwLCJ6b29tLW91dCI6ITB9O2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2ZpbHRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsaT1yLmJyb3dzZXJWZXJzaW9uLGE9ci5jc3NQcmVmaXgsbD1yLmtlZXBVbnByZWZpeGVkO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCJmaWx0ZXIoIik+LTEmJigiaW9zX3NhZiI9PT1vfHwic2FmYXJpIj09PW8mJmk8OS4xKSlyZXR1cm4oMCxzLmRlZmF1bHQpKHQucmVwbGFjZSgvZmlsdGVyXCgvZyxhKyJmaWx0ZXIoIiksdCxsKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvZmxleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsYT1yLmJyb3dzZXJWZXJzaW9uLGw9ci5jc3NQcmVmaXgsdT1yLmtlZXBVbnByZWZpeGVkO2lmKCJkaXNwbGF5Ij09PWUmJmlbdF0mJigiY2hyb21lIj09PW8mJmE8MjkmJmE+MjB8fCgic2FmYXJpIj09PW98fCJpb3Nfc2FmIj09PW8pJiZhPDkmJmE+Nnx8Im9wZXJhIj09PW8mJigxNT09PWF8fDE2PT09YSkpKXJldHVybigwLHMuZGVmYXVsdCkobCt0LHQsdSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9nZXRQcmVmaXhlZFZhbHVlLmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9e2ZsZXg6ITAsImlubGluZS1mbGV4IjohMH07ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvZmxleGJveE9sZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsbD1yLmJyb3dzZXJWZXJzaW9uLGM9ci5jc3NQcmVmaXgsZD1yLmtlZXBVbnByZWZpeGVkLF89ci5yZXF1aXJlc1ByZWZpeDtpZigodS5pbmRleE9mKGUpPi0xfHwiZGlzcGxheSI9PT1lJiYic3RyaW5nIj09dHlwZW9mIHQmJnQuaW5kZXhPZigiZmxleCIpPi0xKSYmKCJmaXJlZm94Ij09PW8mJmw8MjJ8fCJjaHJvbWUiPT09byYmbDwyMXx8KCJzYWZhcmkiPT09b3x8Imlvc19zYWYiPT09bykmJmw8PTYuMXx8ImFuZHJvaWQiPT09byYmbDw0LjR8fCJhbmRfdWMiPT09bykpe2lmKGRlbGV0ZSBfW2VdLGR8fEFycmF5LmlzQXJyYXkobltlXSl8fGRlbGV0ZSBuW2VdLCJmbGV4RGlyZWN0aW9uIj09PWUmJiJzdHJpbmciPT10eXBlb2YgdCYmKHQuaW5kZXhPZigiY29sdW1uIik+LTE/bi5XZWJraXRCb3hPcmllbnQ9InZlcnRpY2FsIjpuLldlYmtpdEJveE9yaWVudD0iaG9yaXpvbnRhbCIsdC5pbmRleE9mKCJyZXZlcnNlIik+LTE/bi5XZWJraXRCb3hEaXJlY3Rpb249InJldmVyc2UiOm4uV2Via2l0Qm94RGlyZWN0aW9uPSJub3JtYWwiKSwiZGlzcGxheSI9PT1lJiZpLmhhc093blByb3BlcnR5KHQpKXJldHVybigwLHMuZGVmYXVsdCkoYytpW3RdLHQsZCk7YS5oYXNPd25Qcm9wZXJ0eShlKSYmKG5bYVtlXV09aVt0XXx8dCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvZ2V0UHJlZml4ZWRWYWx1ZS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPXsic3BhY2UtYXJvdW5kIjoianVzdGlmeSIsInNwYWNlLWJldHdlZW4iOiJqdXN0aWZ5IiwiZmxleC1zdGFydCI6InN0YXJ0IiwiZmxleC1lbmQiOiJlbmQiLCJ3cmFwLXJldmVyc2UiOiJtdWx0aXBsZSIsd3JhcDoibXVsdGlwbGUiLGZsZXg6ImJveCIsImlubGluZS1mbGV4IjoiaW5saW5lLWJveCJ9LGE9e2FsaWduSXRlbXM6IldlYmtpdEJveEFsaWduIixqdXN0aWZ5Q29udGVudDoiV2Via2l0Qm94UGFjayIsZmxleFdyYXA6IldlYmtpdEJveExpbmVzIn0sbD1bImFsaWduQ29udGVudCIsImFsaWduU2VsZiIsIm9yZGVyIiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiZmxleEJhc2lzIiwiZmxleERpcmVjdGlvbiJdLHU9T2JqZWN0LmtleXMoYSkuY29uY2F0KGwpO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2dyYWRpZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIG89ci5icm93c2VyTmFtZSxhPXIuYnJvd3NlclZlcnNpb24sbD1yLmNzc1ByZWZpeCx1PXIua2VlcFVucHJlZml4ZWQ7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCkmJigiZmlyZWZveCI9PT1vJiZhPDE2fHwiY2hyb21lIj09PW8mJmE8MjZ8fCgic2FmYXJpIj09PW98fCJpb3Nfc2FmIj09PW8pJiZhPDd8fCgib3BlcmEiPT09b3x8Im9wX21pbmkiPT09bykmJmE8MTIuMXx8ImFuZHJvaWQiPT09byYmYTw0LjR8fCJhbmRfdWMiPT09bykpcmV0dXJuKDAscy5kZWZhdWx0KShsK3QsdCx1KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT0vbGluZWFyLWdyYWRpZW50fHJhZGlhbC1ncmFkaWVudHxyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50fHJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQvO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9wbHVnaW5zL2ltYWdlU2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIG89ci5icm93c2VyTmFtZSxpPXIuY3NzUHJlZml4LGE9ci5rZWVwVW5wcmVmaXhlZDtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuaW5kZXhPZigiaW1hZ2Utc2V0KCIpPi0xJiYoImNocm9tZSI9PT1vfHwib3BlcmEiPT09b3x8ImFuZF9jaHIiPT09b3x8ImFuZF91YyI9PT1vfHwiaW9zX3NhZiI9PT1vfHwic2FmYXJpIj09PW8pKXJldHVybigwLHMuZGVmYXVsdCkodC5yZXBsYWNlKC9pbWFnZS1zZXRcKC9nLGkrImltYWdlLXNldCgiKSx0LGEpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvZ2V0UHJlZml4ZWRWYWx1ZS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvcGx1Z2lucy9wb3NpdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuYnJvd3Nlck5hbWUsaT1yLmNzc1ByZWZpeCxhPXIua2VlcFVucHJlZml4ZWQ7aWYoInBvc2l0aW9uIj09PWUmJiJzdGlja3kiPT09dCYmKCJzYWZhcmkiPT09b3x8Imlvc19zYWYiPT09bykpcmV0dXJuKDAscy5kZWZhdWx0KShpK3QsdCxhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvc2l6aW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIG89ci5jc3NQcmVmaXgsbD1yLmtlZXBVbnByZWZpeGVkO2lmKGkuaGFzT3duUHJvcGVydHkoZSkmJmEuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuKDAscy5kZWZhdWx0KShvK3QsdCxsKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT17bWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLHdpZHRoOiEwLGhlaWdodDohMCxjb2x1bW5XaWR0aDohMCxtaW5XaWR0aDohMCxtaW5IZWlnaHQ6ITB9LGE9eyJtaW4tY29udGVudCI6ITAsIm1heC1jb250ZW50IjohMCwiZmlsbC1hdmFpbGFibGUiOiEwLCJmaXQtY29udGVudCI6ITAsImNvbnRhaW4tZmxvYXRzIjohMH07ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL3BsdWdpbnMvdHJhbnNpdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXIuY3NzUHJlZml4LGw9ci5rZWVwVW5wcmVmaXhlZCx1PXIucmVxdWlyZXNQcmVmaXg7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZpLmhhc093blByb3BlcnR5KGUpKXthfHwoYT1PYmplY3Qua2V5cyh1KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5kZWZhdWx0KShlKX0pKTt2YXIgYz10LnNwbGl0KC8sKD8hW14oKV0qKD86XChbXigpXSpcKSk/XCkpL2cpO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oZSl7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5pbmRleE9mKGUpPi0xJiYib3JkZXIiIT09ZSYmKGNbbl09dC5yZXBsYWNlKGUsbytlKSsobD8iLCIrdDoiIikpfSl9KSxjLmpvaW4oIiwiKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2Nzcy1pbi1qcy11dGlscy9saWIvaHlwaGVuYXRlUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT17dHJhbnNpdGlvbjohMCx0cmFuc2l0aW9uUHJvcGVydHk6ITAsV2Via2l0VHJhbnNpdGlvbjohMCxXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6ITAsTW96VHJhbnNpdGlvbjohMCxNb3pUcmFuc2l0aW9uUHJvcGVydHk6ITB9LGE9dm9pZCAwO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL2NyZWF0ZVByZWZpeGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7ZnVuY3Rpb24gdChlKXtmb3IodmFyIG8gaW4gZSl7dmFyIHM9ZVtvXTtpZigoMCxfLmRlZmF1bHQpKHMpKWVbb109dChzKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2Zvcih2YXIgYT1bXSx1PTAsZD1zLmxlbmd0aDt1PGQ7Kyt1KXt2YXIgcD0oMCxsLmRlZmF1bHQpKHIsbyxzW3VdLGUsbik7KDAsYy5kZWZhdWx0KShhLHB8fHNbdV0pfWEubGVuZ3RoPjAmJihlW29dPWEpfWVsc2V7dmFyIGY9KDAsbC5kZWZhdWx0KShyLG8scyxlLG4pO2YmJihlW29dPWYpLCgwLGkuZGVmYXVsdCkobixvLGUpfX1yZXR1cm4gZX12YXIgbj1lLnByZWZpeE1hcCxyPWUucGx1Z2lucztyZXR1cm4gdH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PW87dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL3ByZWZpeFByb3BlcnR5LmpzIiksaT1yKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL3ByZWZpeFZhbHVlLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2FkZE5ld1ZhbHVlc09ubHkuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvaXNPYmplY3QuanMiKSxfPXIoZCk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvY3JlYXRlUHJlZml4ZXIuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3N0YXRpY0RhdGEuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvY3Vyc29yLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2Nyb3NzRmFkZS5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9maWx0ZXIuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvZmxleC5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9mbGV4Ym94T2xkLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2dyYWRpZW50LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ltYWdlU2V0LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3Bvc2l0aW9uLmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3NpemluZy5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy90cmFuc2l0aW9uLmpzIiksUj1yKFMpLGo9W2QuZGVmYXVsdCx1LmRlZmF1bHQscC5kZWZhdWx0LGcuZGVmYXVsdCxFLmRlZmF1bHQsdi5kZWZhdWx0LEEuZGVmYXVsdCxPLmRlZmF1bHQsUi5kZWZhdWx0LG0uZGVmYXVsdF07dC5kZWZhdWx0PSgwLHMuZGVmYXVsdCkoe3ByZWZpeE1hcDphLmRlZmF1bHQucHJlZml4TWFwLHBsdWdpbnM6an0pLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvY3Jvc3NGYWRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJiEoMCxzLmRlZmF1bHQpKHQpJiZ0LmluZGV4T2YoImNyb3NzLWZhZGUoIik+LTEpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlcGxhY2UoL2Nyb3NzLWZhZGVcKC9nLGUrImNyb3NzLWZhZGUoIil9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY3NzLWluLWpzLXV0aWxzL2xpYi9pc1ByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1bIi13ZWJraXQtIiwiIl07ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9jdXJzb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCJjdXJzb3IiPT09ZSYmcy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUrdH0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz1bIi13ZWJraXQtIiwiLW1vei0iLCIiXSxzPXsiem9vbS1pbiI6ITAsInpvb20tb3V0IjohMCxncmFiOiEwLGdyYWJiaW5nOiEwfTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ZpbHRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYhKDAscy5kZWZhdWx0KSh0KSYmdC5pbmRleE9mKCJmaWx0ZXIoIik+LTEpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlcGxhY2UoL2ZpbHRlclwoL2csZSsiZmlsdGVyKCIpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2Nzcy1pbi1qcy11dGlscy9saWIvaXNQcmVmaXhlZFZhbHVlLmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9WyItd2Via2l0LSIsIiJdO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvZmxleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoImRpc3BsYXkiPT09ZSYmby5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gb1t0XX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89e2ZsZXg6WyItd2Via2l0LWJveCIsIi1tb3otYm94IiwiLW1zLWZsZXhib3giLCItd2Via2l0LWZsZXgiLCJmbGV4Il0sImlubGluZS1mbGV4IjpbIi13ZWJraXQtaW5saW5lLWJveCIsIi1tb3otaW5saW5lLWJveCIsIi1tcy1pbmxpbmUtZmxleGJveCIsIi13ZWJraXQtaW5saW5lLWZsZXgiLCJpbmxpbmUtZmxleCJdfTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2ZsZXhib3hPbGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7ImZsZXhEaXJlY3Rpb24iPT09ZSYmInN0cmluZyI9PXR5cGVvZiB0JiYodC5pbmRleE9mKCJjb2x1bW4iKT4tMT9uLldlYmtpdEJveE9yaWVudD0idmVydGljYWwiOm4uV2Via2l0Qm94T3JpZW50PSJob3Jpem9udGFsIix0LmluZGV4T2YoInJldmVyc2UiKT4tMT9uLldlYmtpdEJveERpcmVjdGlvbj0icmV2ZXJzZSI6bi5XZWJraXRCb3hEaXJlY3Rpb249Im5vcm1hbCIpLHMuaGFzT3duUHJvcGVydHkoZSkmJihuW3NbZV1dPW9bdF18fHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz17InNwYWNlLWFyb3VuZCI6Imp1c3RpZnkiLCJzcGFjZS1iZXR3ZWVuIjoianVzdGlmeSIsImZsZXgtc3RhcnQiOiJzdGFydCIsImZsZXgtZW5kIjoiZW5kIiwid3JhcC1yZXZlcnNlIjoibXVsdGlwbGUiLHdyYXA6Im11bHRpcGxlIn0scz17YWxpZ25JdGVtczoiV2Via2l0Qm94QWxpZ24iLGp1c3RpZnlDb250ZW50OiJXZWJraXRCb3hQYWNrIixmbGV4V3JhcDoiV2Via2l0Qm94TGluZXMifTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL2dyYWRpZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJiEoMCxzLmRlZmF1bHQpKHQpJiZhLnRlc3QodCkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlK3R9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY3NzLWluLWpzLXV0aWxzL2xpYi9pc1ByZWZpeGVkVmFsdWUuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1bIi13ZWJraXQtIiwiLW1vei0iLCIiXSxhPS9saW5lYXItZ3JhZGllbnR8cmFkaWFsLWdyYWRpZW50fHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnR8cmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudC87ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9zdGF0aWMvcGx1Z2lucy9pbWFnZVNldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYhKDAscy5kZWZhdWx0KSh0KSYmdC5pbmRleE9mKCJpbWFnZS1zZXQoIik+LTEpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlcGxhY2UoL2ltYWdlLXNldFwoL2csZSsiaW1hZ2Utc2V0KCIpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2Nzcy1pbi1qcy11dGlscy9saWIvaXNQcmVmaXhlZFZhbHVlLmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9WyItd2Via2l0LSIsIiJdO2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3BsdWdpbnMvcG9zaXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCJwb3NpdGlvbiI9PT1lJiYic3RpY2t5Ij09PXQpcmV0dXJuWyItd2Via2l0LXN0aWNreSIsInN0aWNreSJdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cixlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3NpemluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYocy5oYXNPd25Qcm9wZXJ0eShlKSYmaS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUrdH0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz1bIi13ZWJraXQtIiwiLW1vei0iLCIiXSxzPXttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLGNvbHVtbldpZHRoOiEwLG1pbldpZHRoOiEwLG1pbkhlaWdodDohMH0saT17Im1pbi1jb250ZW50IjohMCwibWF4LWNvbnRlbnQiOiEwLCJmaWxsLWF2YWlsYWJsZSI6ITAsImZpdC1jb250ZW50IjohMCwiY29udGFpbi1mbG9hdHMiOiEwfTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3N0YXRpYy9wbHVnaW5zL3RyYW5zaXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCgwLHUuZGVmYXVsdCkoZSkpcmV0dXJuIGU7Zm9yKHZhciBuPWUuc3BsaXQoLywoPyFbXigpXSooPzpcKFteKCldKlwpKT9cKSkvZykscj0wLG89bi5sZW5ndGg7cjxvOysrcil7dmFyIHM9bltyXSxpPVtzXTtmb3IodmFyIGwgaW4gdCl7dmFyIGM9KDAsYS5kZWZhdWx0KShsKTtpZihzLmluZGV4T2YoYyk+LTEmJiJvcmRlciIhPT1jKWZvcih2YXIgZD10W2xdLF89MCxmPWQubGVuZ3RoO188ZjsrK18paS51bnNoaWZ0KHMucmVwbGFjZShjLHBbZFtfXV0rYykpfW5bcl09aS5qb2luKCIsIil9cmV0dXJuIG4uam9pbigiLCIpfWZ1bmN0aW9uIHMoZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZfLmhhc093blByb3BlcnR5KGUpKXt2YXIgcz1vKHQsciksaT1zLnNwbGl0KC8sKD8hW14oKV0qKD86XChbXigpXSpcKSk/XCkpL2cpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hLy1tb3otfC1tcy0vLnRlc3QoZSl9KS5qb2luKCIsIik7aWYoZS5pbmRleE9mKCJXZWJraXQiKT4tMSlyZXR1cm4gaTt2YXIgYT1zLnNwbGl0KC8sKD8hW14oKV0qKD86XChbXigpXSpcKSk/XCkpL2cpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hLy13ZWJraXQtfC1tcy0vLnRlc3QoZSl9KS5qb2luKCIsIik7cmV0dXJuIGUuaW5kZXhPZigiTW96Iik+LTE/YTooblsiV2Via2l0IisoMCxkLmRlZmF1bHQpKGUpXT1pLG5bIk1veiIrKDAsZC5kZWZhdWx0KShlKV09YSxzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1zO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2Nzcy1pbi1qcy11dGlscy9saWIvaHlwaGVuYXRlUHJvcGVydHkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jc3MtaW4tanMtdXRpbHMvbGliL2lzUHJlZml4ZWRWYWx1ZS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9jYXBpdGFsaXplU3RyaW5nLmpzIiksZD1yKGMpLF89e3RyYW5zaXRpb246ITAsdHJhbnNpdGlvblByb3BlcnR5OiEwLFdlYmtpdFRyYW5zaXRpb246ITAsV2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiEwLE1velRyYW5zaXRpb246ITAsTW96VHJhbnNpdGlvblByb3BlcnR5OiEwfSxwPXtXZWJraXQ6Ii13ZWJraXQtIixNb3o6Ii1tb3otIixtczoiLW1zLSJ9O2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvc3RhdGljL3N0YXRpY0RhdGEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPVsiV2Via2l0Il0sbz1bIk1veiJdLHM9WyJtcyJdLGk9WyJXZWJraXQiLCJNb3oiXSxhPVsiV2Via2l0IiwibXMiXSxsPVsiV2Via2l0IiwiTW96IiwibXMiXTt0LmRlZmF1bHQ9e3BsdWdpbnM6W10scHJlZml4TWFwOnthcHBlYXJhbmNlOmksdXNlclNlbGVjdDpsLHRleHRFbXBoYXNpc1Bvc2l0aW9uOnIsdGV4dEVtcGhhc2lzOnIsdGV4dEVtcGhhc2lzU3R5bGU6cix0ZXh0RW1waGFzaXNDb2xvcjpyLGJveERlY29yYXRpb25CcmVhazpyLGNsaXBQYXRoOnIsbWFza0ltYWdlOnIsbWFza01vZGU6cixtYXNrUmVwZWF0OnIsbWFza1Bvc2l0aW9uOnIsbWFza0NsaXA6cixtYXNrT3JpZ2luOnIsbWFza1NpemU6cixtYXNrQ29tcG9zaXRlOnIsbWFzazpyLG1hc2tCb3JkZXJTb3VyY2U6cixtYXNrQm9yZGVyTW9kZTpyLG1hc2tCb3JkZXJTbGljZTpyLG1hc2tCb3JkZXJXaWR0aDpyLG1hc2tCb3JkZXJPdXRzZXQ6cixtYXNrQm9yZGVyUmVwZWF0OnIsbWFza0JvcmRlcjpyLG1hc2tUeXBlOnIsdGV4dERlY29yYXRpb25TdHlsZTpyLHRleHREZWNvcmF0aW9uU2tpcDpyLHRleHREZWNvcmF0aW9uTGluZTpyLHRleHREZWNvcmF0aW9uQ29sb3I6cixmaWx0ZXI6cixmb250RmVhdHVyZVNldHRpbmdzOnIsYnJlYWtBZnRlcjpsLGJyZWFrQmVmb3JlOmwsYnJlYWtJbnNpZGU6bCxjb2x1bW5Db3VudDppLGNvbHVtbkZpbGw6aSxjb2x1bW5HYXA6aSxjb2x1bW5SdWxlOmksY29sdW1uUnVsZUNvbG9yOmksY29sdW1uUnVsZVN0eWxlOmksY29sdW1uUnVsZVdpZHRoOmksY29sdW1uczppLGNvbHVtblNwYW46aSxjb2x1bW5XaWR0aDppLHdyaXRpbmdNb2RlOmEsZmxleDpyLGZsZXhCYXNpczpyLGZsZXhEaXJlY3Rpb246cixmbGV4R3JvdzpyLGZsZXhGbG93OnIsZmxleFNocmluazpyLGZsZXhXcmFwOnIsYWxpZ25Db250ZW50OnIsYWxpZ25JdGVtczpyLGFsaWduU2VsZjpyLGp1c3RpZnlDb250ZW50OnIsb3JkZXI6cix0cmFuc2Zvcm06cix0cmFuc2Zvcm1PcmlnaW46cix0cmFuc2Zvcm1PcmlnaW5YOnIsdHJhbnNmb3JtT3JpZ2luWTpyLGJhY2tmYWNlVmlzaWJpbGl0eTpyLHBlcnNwZWN0aXZlOnIscGVyc3BlY3RpdmVPcmlnaW46cix0cmFuc2Zvcm1TdHlsZTpyLHRyYW5zZm9ybU9yaWdpblo6cixhbmltYXRpb246cixhbmltYXRpb25EZWxheTpyLGFuaW1hdGlvbkRpcmVjdGlvbjpyLGFuaW1hdGlvbkZpbGxNb2RlOnIsYW5pbWF0aW9uRHVyYXRpb246cixhbmltYXRpb25JdGVyYXRpb25Db3VudDpyLGFuaW1hdGlvbk5hbWU6cixhbmltYXRpb25QbGF5U3RhdGU6cixhbmltYXRpb25UaW1pbmdGdW5jdGlvbjpyLGJhY2tkcm9wRmlsdGVyOnIsZm9udEtlcm5pbmc6cixzY3JvbGxTbmFwVHlwZTphLHNjcm9sbFNuYXBQb2ludHNYOmEsc2Nyb2xsU25hcFBvaW50c1k6YSxzY3JvbGxTbmFwRGVzdGluYXRpb246YSxzY3JvbGxTbmFwQ29vcmRpbmF0ZTphLHNoYXBlSW1hZ2VUaHJlc2hvbGQ6cixzaGFwZUltYWdlTWFyZ2luOnIsc2hhcGVJbWFnZU91dHNpZGU6cixoeXBoZW5zOmwsZmxvd0ludG86YSxmbG93RnJvbTphLHJlZ2lvbkZyYWdtZW50OmEsdGV4dEFsaWduTGFzdDpvLHRhYlNpemU6byx3cmFwRmxvdzpzLHdyYXBUaHJvdWdoOnMsd3JhcE1hcmdpbjpzLGdyaWRUZW1wbGF0ZUNvbHVtbnM6cyxncmlkVGVtcGxhdGVSb3dzOnMsZ3JpZFRlbXBsYXRlQXJlYXM6cyxncmlkVGVtcGxhdGU6cyxncmlkQXV0b0NvbHVtbnM6cyxncmlkQXV0b1Jvd3M6cyxncmlkQXV0b0Zsb3c6cyxncmlkOnMsZ3JpZFJvd1N0YXJ0OnMsZ3JpZENvbHVtblN0YXJ0OnMsZ3JpZFJvd0VuZDpzLGdyaWRSb3c6cyxncmlkQ29sdW1uOnMsZ3JpZENvbHVtbkVuZDpzLGdyaWRDb2x1bW5HYXA6cyxncmlkUm93R2FwOnMsZ3JpZEFyZWE6cyxncmlkR2FwOnMsdGV4dFNpemVBZGp1c3Q6YSxib3JkZXJJbWFnZTpyLGJvcmRlckltYWdlT3V0c2V0OnIsYm9yZGVySW1hZ2VSZXBlYXQ6cixib3JkZXJJbWFnZVNsaWNlOnIsYm9yZGVySW1hZ2VTb3VyY2U6cixib3JkZXJJbWFnZVdpZHRoOnIsdHJhbnNpdGlvbkRlbGF5OnIsdHJhbnNpdGlvbkR1cmF0aW9uOnIsdHJhbnNpdGlvblByb3BlcnR5OnIsdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOnJ9fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2FkZE5ld1ZhbHVlc09ubHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9ZnVuY3Rpb24gbyhlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTAsbz10Lmxlbmd0aDtuPG87KytuKXIoZSx0W25dKTtlbHNlIHIoZSx0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PW8sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9jYXBpdGFsaXplU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9nZXRCcm93c2VySW5mb3JtYXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlLmZpcmVmb3gpcmV0dXJuImZpcmVmb3giO2lmKGUubW9iaWxlfHxlLnRhYmxldCl7aWYoZS5pb3MpcmV0dXJuImlvc19zYWYiO2lmKGUuYW5kcm9pZClyZXR1cm4iYW5kcm9pZCI7aWYoZS5vcGVyYSlyZXR1cm4ib3BfbWluaSJ9Zm9yKHZhciB0IGluIGwpaWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbFt0XX1mdW5jdGlvbiBvKGUpe3ZhciB0PWkuZGVmYXVsdC5fZGV0ZWN0KGUpO3QueWFuZGV4YnJvd3NlciYmKHQ9aS5kZWZhdWx0Ll9kZXRlY3QoZS5yZXBsYWNlKC9ZYUJyb3dzZXJcL1swLTkuXSovLCIiKSkpO2Zvcih2YXIgbiBpbiBhKWlmKHQuaGFzT3duUHJvcGVydHkobikpe3ZhciBvPWFbbl07dC5qc1ByZWZpeD1vLHQuY3NzUHJlZml4PSItIitvLnRvTG93ZXJDYXNlKCkrIi0iO2JyZWFrfXJldHVybiB0LmJyb3dzZXJOYW1lPXIodCksdC52ZXJzaW9uP3QuYnJvd3NlclZlcnNpb249cGFyc2VGbG9hdCh0LnZlcnNpb24pOnQuYnJvd3NlclZlcnNpb249cGFyc2VJbnQocGFyc2VGbG9hdCh0Lm9zdmVyc2lvbiksMTApLHQub3NWZXJzaW9uPXBhcnNlRmxvYXQodC5vc3ZlcnNpb24pLCJpb3Nfc2FmIj09PXQuYnJvd3Nlck5hbWUmJnQuYnJvd3NlclZlcnNpb24+dC5vc1ZlcnNpb24mJih0LmJyb3dzZXJWZXJzaW9uPXQub3NWZXJzaW9uKSwiYW5kcm9pZCI9PT10LmJyb3dzZXJOYW1lJiZ0LmNocm9tZSYmdC5icm93c2VyVmVyc2lvbj4zNyYmKHQuYnJvd3Nlck5hbWU9ImFuZF9jaHIiKSwiYW5kcm9pZCI9PT10LmJyb3dzZXJOYW1lJiZ0Lm9zVmVyc2lvbjw1JiYodC5icm93c2VyVmVyc2lvbj10Lm9zVmVyc2lvbiksImFuZHJvaWQiPT09dC5icm93c2VyTmFtZSYmdC5zYW1zdW5nQnJvd3NlciYmKHQuYnJvd3Nlck5hbWU9ImFuZF9jaHIiLHQuYnJvd3NlclZlcnNpb249NDQpLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1vO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2Jvd3Nlci9zcmMvYm93c2VyLmpzIiksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHMpLGE9e2Nocm9tZToiV2Via2l0IixzYWZhcmk6IldlYmtpdCIsaW9zOiJXZWJraXQiLGFuZHJvaWQ6IldlYmtpdCIscGhhbnRvbToiV2Via2l0IixvcGVyYToiV2Via2l0Iix3ZWJvczoiV2Via2l0IixibGFja2JlcnJ5OiJXZWJraXQiLGJhZGE6IldlYmtpdCIsdGl6ZW46IldlYmtpdCIsY2hyb21pdW06IldlYmtpdCIsdml2YWxkaToiV2Via2l0IixmaXJlZm94OiJNb3oiLHNlYW1vbmV5OiJNb3oiLHNhaWxmaXNoOiJNb3oiLG1zaWU6Im1zIixtc2VkZ2U6Im1zIn0sbD17Y2hyb21lOiJjaHJvbWUiLGNocm9taXVtOiJjaHJvbWUiLHNhZmFyaToic2FmYXJpIixmaXJmb3g6ImZpcmVmb3giLG1zZWRnZToiZWRnZSIsb3BlcmE6Im9wZXJhIix2aXZhbGRpOiJvcGVyYSIsbXNpZToiaWUifTtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2dldFByZWZpeGVkS2V5ZnJhbWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiJjaHJvbWUiPT09ZSYmdDw0M3x8KCJzYWZhcmkiPT09ZXx8Imlvc19zYWYiPT09ZSkmJnQ8OXx8Im9wZXJhIj09PWUmJnQ8MzB8fCJhbmRyb2lkIj09PWUmJnQ8PTQuNHx8ImFuZF91YyI9PT1lP24rImtleWZyYW1lcyI6ImtleWZyYW1lcyJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvdXRpbHMvZ2V0UHJlZml4ZWRWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gbj9bZSx0XTplfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cixlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2lzT2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBPYmplY3QmJiFBcnJheS5pc0FycmF5KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cixlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL3ByZWZpeFByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2lmKGUuaGFzT3duUHJvcGVydHkodCkpZm9yKHZhciByPWVbdF0sbz0wLGk9ci5sZW5ndGg7bzxpOysrbyluW3Jbb10rKDAscy5kZWZhdWx0KSh0KV09blt0XX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL3V0aWxzL2NhcGl0YWxpemVTdHJpbmcuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci91dGlscy9wcmVmaXhWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7Zm9yKHZhciBzPTAsaT1lLmxlbmd0aDtzPGk7KytzKXt2YXIgYT1lW3NdKHQsbixyLG8pO2lmKGEpcmV0dXJuIGF9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cixlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW50bC1mb3JtYXQtY2FjaGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dD1lLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvaW50bC1mb3JtYXQtY2FjaGUvbGliL21lbW9pemVyLmpzIikuZGVmYXVsdCx0LmRlZmF1bHQ9dH0sIi4vbm9kZV9tb2R1bGVzL2ludGwtZm9ybWF0LWNhY2hlL2xpYi9lczUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fGZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIC0gd2hhdCBpcyB0cnlpbmcgdG8gYmUgYm91bmQgaXMgbm90IGNhbGxhYmxlIik7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG49dGhpcyxyPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodGhpcyBpbnN0YW5jZW9mIHI/dGhpczplLHQuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIHRoaXMucHJvdG90eXBlJiYoci5wcm90b3R5cGU9dGhpcy5wcm90b3R5cGUpLG8ucHJvdG90eXBlPW5ldyByLG99LG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7fSl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGk9KCFzJiZPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18scz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4peyJnZXQiaW4gbiYmZS5fX2RlZmluZUdldHRlcl9fP2UuX19kZWZpbmVHZXR0ZXJfXyh0LG4uZ2V0KTooIW8uY2FsbChlLHQpfHwidmFsdWUiaW4gbikmJihlW3RdPW4udmFsdWUpfSksYT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt9dmFyIHIscztuLnByb3RvdHlwZT1lLHI9bmV3IG47Zm9yKHMgaW4gdClvLmNhbGwodCxzKSYmaShyLHMsdFtzXSk7cmV0dXJuIHJ9O3QuYmluZD1yLHQuZGVmaW5lUHJvcGVydHk9aSx0Lm9iakNyZWF0ZT1hfSwiLi9ub2RlX21vZHVsZXMvaW50bC1mb3JtYXQtY2FjaGUvbGliL21lbW9pemVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9aS5vYmpDcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxyPW8obikscz1yJiZ0W3JdO3JldHVybiBzfHwocz1uZXcoaS5iaW5kLmFwcGx5KGUsW251bGxdLmNvbmNhdChuKSkpLHImJih0W3JdPXMpKSxzfX1mdW5jdGlvbiBvKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgSlNPTil7dmFyIHQsbixyLG89W107Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kz0xKXI9ZVt0XSxyJiYib2JqZWN0Ij09dHlwZW9mIHI/by5wdXNoKHMocikpOm8ucHVzaChyKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobyl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQsbixyLG8scz1bXSxpPVtdO2Zvcih0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmaS5wdXNoKHQpO3ZhciBhPWkuc29ydCgpO2ZvcihuPTAscj1hLmxlbmd0aDtuPHI7bis9MSl0PWFbbl0sbz17fSxvW3RdPWVbdF0sc1tuXT1vO3JldHVybiBzfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtZm9ybWF0LWNhY2hlL2xpYi9lczUuanMiKTt0LmRlZmF1bHQ9cn0sIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC1wYXJzZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dD1lLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0LXBhcnNlci9saWIvcGFyc2VyLmpzIikuZGVmYXVsdCx0LmRlZmF1bHQ9dH0sIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC1wYXJzZXIvbGliL3BhcnNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyLG8pe3RoaXMubWVzc2FnZT10LHRoaXMuZXhwZWN0ZWQ9bix0aGlzLmZvdW5kPXIsdGhpcy5sb2NhdGlvbj1vLHRoaXMubmFtZT0iU3ludGF4RXJyb3IiLCJmdW5jdGlvbiI9PXR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKX1mdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbyhLZSxxZSl9ZnVuY3Rpb24gcihlKXt2YXIgbixyLG89WGVbZV07aWYobylyZXR1cm4gbztmb3Iobj1lLTE7IVhlW25dOyluLS07Zm9yKG89WGVbbl0sbz17bGluZTpvLmxpbmUsY29sdW1uOm8uY29sdW1uLHNlZW5DUjpvLnNlZW5DUn07bjxlOylyPXQuY2hhckF0KG4pLCJcbiI9PT1yPyhvLnNlZW5DUnx8by5saW5lKyssby5jb2x1bW49MSxvLnNlZW5DUj0hMSk6IlxyIj09PXJ8fCJcdTIwMjgiPT09cnx8Ilx1MjAyOSI9PT1yPyhvLmxpbmUrKyxvLmNvbHVtbj0xLG8uc2VlbkNSPSEwKTooby5jb2x1bW4rKyxvLnNlZW5DUj0hMSksbisrO3JldHVybiBYZVtlXT1vLG99ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXIoZSksbz1yKHQpO3JldHVybntzdGFydDp7b2Zmc2V0OmUsbGluZTpuLmxpbmUsY29sdW1uOm4uY29sdW1ufSxlbmQ6e29mZnNldDp0LGxpbmU6by5saW5lLGNvbHVtbjpvLmNvbHVtbn19fWZ1bmN0aW9uIHMoZSl7cWU8JGV8fChxZT4kZSYmKCRlPXFlLFFlPVtdKSxRZS5wdXNoKGUpKX1mdW5jdGlvbiBpKHQsbixyLG8pe3JldHVybiBudWxsIT09biYmZnVuY3Rpb24oZSl7dmFyIHQ9MTtmb3IoZS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVzY3JpcHRpb248dC5kZXNjcmlwdGlvbj8tMTplLmRlc2NyaXB0aW9uPnQuZGVzY3JpcHRpb24/MTowfSk7dDxlLmxlbmd0aDspZVt0LTFdPT09ZVt0XT9lLnNwbGljZSh0LDEpOnQrK30obiksbmV3IGUobnVsbCE9PXQ/dDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKG89MDtvPGUubGVuZ3RoO28rKylzW29dPWVbb10uZGVzY3JpcHRpb247cmV0dXJuIG49ZS5sZW5ndGg+MT9zLnNsaWNlKDAsLTEpLmpvaW4oIiwgIikrIiBvciAiK3NbZS5sZW5ndGgtMV06c1swXSxyPXQ/JyInK2Z1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1yZXR1cm4gZS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKS5yZXBsYWNlKC9ceDA4L2csIlxcYiIpLnJlcGxhY2UoL1x0L2csIlxcdCIpLnJlcGxhY2UoL1xuL2csIlxcbiIpLnJlcGxhY2UoL1xmL2csIlxcZiIpLnJlcGxhY2UoL1xyL2csIlxcciIpLnJlcGxhY2UoL1tceDAwLVx4MDdceDBCXHgwRVx4MEZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIlxceDAiK3QoZSl9KS5yZXBsYWNlKC9bXHgxMC1ceDFGXHg4MC1ceEZGXS9nLGZ1bmN0aW9uKGUpe3JldHVybiJcXHgiK3QoZSl9KS5yZXBsYWNlKC9bXHUwMTAwLVx1MEZGRl0vZyxmdW5jdGlvbihlKXtyZXR1cm4iXFx1MCIrdChlKX0pLnJlcGxhY2UoL1tcdTEwMDAtXHVGRkZGXS9nLGZ1bmN0aW9uKGUpe3JldHVybiJcXHUiK3QoZSl9KX0odCkrJyInOiJlbmQgb2YgaW5wdXQiLCJFeHBlY3RlZCAiK24rIiBidXQgIityKyIgZm91bmQuIn0obixyKSxuLHIsbyl9ZnVuY3Rpb24gYSgpe3JldHVybiBsKCl9ZnVuY3Rpb24gbCgpe3ZhciBlLHQsbjtmb3IoZT1xZSx0PVtdLG49dSgpO24hPT13Oyl0LnB1c2gobiksbj11KCk7cmV0dXJuIHQhPT13JiYoS2U9ZSx0PUkodCkpLGU9dH1mdW5jdGlvbiB1KCl7dmFyIGU7cmV0dXJuIGU9ZCgpLGU9PT13JiYoZT1wKCkpLGV9ZnVuY3Rpb24gYygpe3ZhciBlLG4scixvLHMsaTtpZihlPXFlLG49W10scj1xZSxvPUMoKSxvIT09dz8ocz14KCkscyE9PXc/KGk9QygpLGkhPT13PyhvPVtvLHMsaV0scj1vKToocWU9cixyPXcpKToocWU9cixyPXcpKToocWU9cixyPXcpLHIhPT13KWZvcig7ciE9PXc7KW4ucHVzaChyKSxyPXFlLG89QygpLG8hPT13PyhzPXgoKSxzIT09dz8oaT1DKCksaSE9PXc/KG89W28scyxpXSxyPW8pOihxZT1yLHI9dykpOihxZT1yLHI9dykpOihxZT1yLHI9dyk7ZWxzZSBuPXc7cmV0dXJuIG4hPT13JiYoS2U9ZSxuPVAobikpLGU9bixlPT09dyYmKGU9cWUsbj1BKCksZT1uIT09dz90LnN1YnN0cmluZyhlLHFlKTpuKSxlfWZ1bmN0aW9uIGQoKXt2YXIgZSx0O3JldHVybiBlPXFlLHQ9YygpLHQhPT13JiYoS2U9ZSx0PU4odCkpLGU9dH1mdW5jdGlvbiBfKCl7dmFyIGUsbixyO2lmKChlPVIoKSk9PT13KXtpZihlPXFlLG49W10sSC50ZXN0KHQuY2hhckF0KHFlKSk/KHI9dC5jaGFyQXQocWUpLHFlKyspOihyPXcsMD09PUplJiZzKEYpKSxyIT09dylmb3IoO3IhPT13OyluLnB1c2gociksSC50ZXN0KHQuY2hhckF0KHFlKSk/KHI9dC5jaGFyQXQocWUpLHFlKyspOihyPXcsMD09PUplJiZzKEYpKTtlbHNlIG49dztlPW4hPT13P3Quc3Vic3RyaW5nKGUscWUpOm59cmV0dXJuIGV9ZnVuY3Rpb24gcCgpe3ZhciBlLG4scixvLGksYSxsLHUsYztyZXR1cm4gZT1xZSwxMjM9PT10LmNoYXJDb2RlQXQocWUpPyhuPUIscWUrKyk6KG49dywwPT09SmUmJnMoVSkpLG4hPT13PyhyPUMoKSxyIT09dz8obz1fKCksbyE9PXc/KGk9QygpLGkhPT13PyhhPXFlLDQ0PT09dC5jaGFyQ29kZUF0KHFlKT8obD1HLHFlKyspOihsPXcsMD09PUplJiZzKHopKSxsIT09dz8odT1DKCksdSE9PXc/KGM9ZigpLGMhPT13PyhsPVtsLHUsY10sYT1sKToocWU9YSxhPXcpKToocWU9YSxhPXcpKToocWU9YSxhPXcpLGE9PT13JiYoYT1udWxsKSxhIT09dz8obD1DKCksbCE9PXc/KDEyNT09PXQuY2hhckNvZGVBdChxZSk/KHU9VixxZSsrKToodT13LDA9PT1KZSYmcyhXKSksdSE9PXc/KEtlPWUsbj1ZKG8sYSksZT1uKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpLGV9ZnVuY3Rpb24gZigpe3ZhciBlO3JldHVybiBlPW0oKSxlPT09dyYmKGU9aCgpKT09PXcmJihlPWcoKSk9PT13JiYoZT1iKCkpLGV9ZnVuY3Rpb24gbSgpe3ZhciBlLG4scixvLGksYSxsO3JldHVybiBlPXFlLHQuc3Vic3RyKHFlLDYpPT09cT8obj1xLHFlKz02KToobj13LDA9PT1KZSYmcyhLKSksbj09PXcmJih0LnN1YnN0cihxZSw0KT09PVg/KG49WCxxZSs9NCk6KG49dywwPT09SmUmJnMoJCkpLG49PT13JiYodC5zdWJzdHIocWUsNCk9PT1RPyhuPVEscWUrPTQpOihuPXcsMD09PUplJiZzKEopKSkpLG4hPT13PyhyPUMoKSxyIT09dz8obz1xZSw0ND09PXQuY2hhckNvZGVBdChxZSk/KGk9RyxxZSsrKTooaT13LDA9PT1KZSYmcyh6KSksaSE9PXc/KGE9QygpLGEhPT13PyhsPXgoKSxsIT09dz8oaT1baSxhLGxdLG89aSk6KHFlPW8sbz13KSk6KHFlPW8sbz13KSk6KHFlPW8sbz13KSxvPT09dyYmKG89bnVsbCksbyE9PXc/KEtlPWUsbj1aKG4sbyksZT1uKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpLGV9ZnVuY3Rpb24gaCgpe3ZhciBlLG4scixvLGksYTtyZXR1cm4gZT1xZSx0LnN1YnN0cihxZSw2KT09PWVlPyhuPWVlLHFlKz02KToobj13LDA9PT1KZSYmcyh0ZSkpLG4hPT13PyhyPUMoKSxyIT09dz8oNDQ9PT10LmNoYXJDb2RlQXQocWUpPyhvPUcscWUrKyk6KG89dywwPT09SmUmJnMoeikpLG8hPT13PyhpPUMoKSxpIT09dz8oYT1UKCksYSE9PXc/KEtlPWUsbj1uZShhKSxlPW4pOihxZT1lLGU9dykpOihxZT1lLGU9dykpOihxZT1lLGU9dykpOihxZT1lLGU9dykpOihxZT1lLGU9dyksZX1mdW5jdGlvbiBnKCl7dmFyIGUsbixyLG8saSxhO3JldHVybiBlPXFlLHQuc3Vic3RyKHFlLDEzKT09PXJlPyhuPXJlLHFlKz0xMyk6KG49dywwPT09SmUmJnMob2UpKSxuIT09dz8ocj1DKCksciE9PXc/KDQ0PT09dC5jaGFyQ29kZUF0KHFlKT8obz1HLHFlKyspOihvPXcsMD09PUplJiZzKHopKSxvIT09dz8oaT1DKCksaSE9PXc/KGE9VCgpLGEhPT13PyhLZT1lLG49c2UoYSksZT1uKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpLGV9ZnVuY3Rpb24gYigpe3ZhciBlLG4scixvLGk7aWYoZT1xZSx0LnN1YnN0cihxZSw2KT09PWllPyhuPWllLHFlKz02KToobj13LDA9PT1KZSYmcyhhZSkpLG4hPT13KWlmKEMoKSE9PXcpaWYoNDQ9PT10LmNoYXJDb2RlQXQocWUpPyhyPUcscWUrKyk6KHI9dywwPT09SmUmJnMoeikpLHIhPT13KWlmKEMoKSE9PXcpe2lmKG89W10sKGk9eSgpKSE9PXcpZm9yKDtpIT09dzspby5wdXNoKGkpLGk9eSgpO2Vsc2Ugbz13O28hPT13PyhLZT1lLG49bGUobyksZT1uKToocWU9ZSxlPXcpfWVsc2UgcWU9ZSxlPXc7ZWxzZSBxZT1lLGU9dztlbHNlIHFlPWUsZT13O2Vsc2UgcWU9ZSxlPXc7cmV0dXJuIGV9ZnVuY3Rpb24gRSgpe3ZhciBlLG4scixvO3JldHVybiBlPXFlLG49cWUsNjE9PT10LmNoYXJDb2RlQXQocWUpPyhyPXVlLHFlKyspOihyPXcsMD09PUplJiZzKGNlKSksciE9PXc/KG89UigpLG8hPT13PyhyPVtyLG9dLG49cik6KHFlPW4sbj13KSk6KHFlPW4sbj13KSxlPW4hPT13P3Quc3Vic3RyaW5nKGUscWUpOm4sZT09PXcmJihlPXgoKSksZX1mdW5jdGlvbiB5KCl7dmFyIGUsbixyLG8saSxhLHUsYyxkO3JldHVybiBlPXFlLG49QygpLG4hPT13PyhyPUUoKSxyIT09dz8obz1DKCksbyE9PXc/KDEyMz09PXQuY2hhckNvZGVBdChxZSk/KGk9QixxZSsrKTooaT13LDA9PT1KZSYmcyhVKSksaSE9PXc/KGE9QygpLGEhPT13Pyh1PWwoKSx1IT09dz8oYz1DKCksYyE9PXc/KDEyNT09PXQuY2hhckNvZGVBdChxZSk/KGQ9VixxZSsrKTooZD13LDA9PT1KZSYmcyhXKSksZCE9PXc/KEtlPWUsbj1kZShyLHUpLGU9bik6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSk6KHFlPWUsZT13KSxlfWZ1bmN0aW9uIHYoKXt2YXIgZSxuLHIsbztyZXR1cm4gZT1xZSx0LnN1YnN0cihxZSw3KT09PV9lPyhuPV9lLHFlKz03KToobj13LDA9PT1KZSYmcyhwZSkpLG4hPT13PyhyPUMoKSxyIT09dz8obz1SKCksbyE9PXc/KEtlPWUsbj1mZShvKSxlPW4pOihxZT1lLGU9dykpOihxZT1lLGU9dykpOihxZT1lLGU9dyksZX1mdW5jdGlvbiBUKCl7dmFyIGUsdCxuLHI7aWYoZT1xZSx0PXYoKSx0PT09dyYmKHQ9bnVsbCksdCE9PXcpaWYoQygpIT09dyl7aWYobj1bXSwocj15KCkpIT09dylmb3IoO3IhPT13OyluLnB1c2gocikscj15KCk7ZWxzZSBuPXc7biE9PXc/KEtlPWUsdD1tZSh0LG4pLGU9dCk6KHFlPWUsZT13KX1lbHNlIHFlPWUsZT13O2Vsc2UgcWU9ZSxlPXc7cmV0dXJuIGV9ZnVuY3Rpb24gQSgpe3ZhciBlLG47aWYoSmUrKyxlPVtdLGdlLnRlc3QodC5jaGFyQXQocWUpKT8obj10LmNoYXJBdChxZSkscWUrKyk6KG49dywwPT09SmUmJnMoYmUpKSxuIT09dylmb3IoO24hPT13OyllLnB1c2gobiksZ2UudGVzdCh0LmNoYXJBdChxZSkpPyhuPXQuY2hhckF0KHFlKSxxZSsrKToobj13LDA9PT1KZSYmcyhiZSkpO2Vsc2UgZT13O3JldHVybiBKZS0tLGU9PT13JiYobj13LDA9PT1KZSYmcyhoZSkpLGV9ZnVuY3Rpb24gQygpe3ZhciBlLG4scjtmb3IoSmUrKyxlPXFlLG49W10scj1BKCk7ciE9PXc7KW4ucHVzaChyKSxyPUEoKTtyZXR1cm4gZT1uIT09dz90LnN1YnN0cmluZyhlLHFlKTpuLEplLS0sZT09PXcmJihuPXcsMD09PUplJiZzKEVlKSksZX1mdW5jdGlvbiBPKCl7dmFyIGU7cmV0dXJuIHllLnRlc3QodC5jaGFyQXQocWUpKT8oZT10LmNoYXJBdChxZSkscWUrKyk6KGU9dywwPT09SmUmJnModmUpKSxlfWZ1bmN0aW9uIFMoKXt2YXIgZTtyZXR1cm4gVGUudGVzdCh0LmNoYXJBdChxZSkpPyhlPXQuY2hhckF0KHFlKSxxZSsrKTooZT13LDA9PT1KZSYmcyhBZSkpLGV9ZnVuY3Rpb24gUigpe3ZhciBlLG4scixvLGksYTtpZihlPXFlLDQ4PT09dC5jaGFyQ29kZUF0KHFlKT8obj1DZSxxZSsrKToobj13LDA9PT1KZSYmcyhPZSkpLG49PT13KXtpZihuPXFlLHI9cWUsU2UudGVzdCh0LmNoYXJBdChxZSkpPyhvPXQuY2hhckF0KHFlKSxxZSsrKToobz13LDA9PT1KZSYmcyhSZSkpLG8hPT13KXtmb3IoaT1bXSxhPU8oKTthIT09dzspaS5wdXNoKGEpLGE9TygpO2khPT13PyhvPVtvLGldLHI9byk6KHFlPXIscj13KX1lbHNlIHFlPXIscj13O249ciE9PXc/dC5zdWJzdHJpbmcobixxZSk6cn1yZXR1cm4gbiE9PXcmJihLZT1lLG49amUobikpLGU9bn1mdW5jdGlvbiBqKCl7dmFyIGUsbixyLG8saSxhLGwsdTtyZXR1cm4geGUudGVzdCh0LmNoYXJBdChxZSkpPyhlPXQuY2hhckF0KHFlKSxxZSsrKTooZT13LDA9PT1KZSYmcyhMZSkpLGU9PT13JiYoZT1xZSx0LnN1YnN0cihxZSwyKT09PURlPyhuPURlLHFlKz0yKToobj13LDA9PT1KZSYmcyh3ZSkpLG4hPT13JiYoS2U9ZSxuPU1lKCkpLChlPW4pPT09dyYmKGU9cWUsdC5zdWJzdHIocWUsMik9PT1rZT8obj1rZSxxZSs9Mik6KG49dywwPT09SmUmJnMoSWUpKSxuIT09dyYmKEtlPWUsbj1QZSgpKSwoZT1uKT09PXcmJihlPXFlLHQuc3Vic3RyKHFlLDIpPT09TmU/KG49TmUscWUrPTIpOihuPXcsMD09PUplJiZzKEhlKSksbiE9PXcmJihLZT1lLG49RmUoKSksKGU9bik9PT13JiYoZT1xZSx0LnN1YnN0cihxZSwyKT09PUJlPyhuPUJlLHFlKz0yKToobj13LDA9PT1KZSYmcyhVZSkpLG4hPT13JiYoS2U9ZSxuPUdlKCkpLChlPW4pPT09dyYmKGU9cWUsdC5zdWJzdHIocWUsMik9PT16ZT8obj16ZSxxZSs9Mik6KG49dywwPT09SmUmJnMoVmUpKSxuIT09dz8ocj1xZSxvPXFlLGk9UygpLGkhPT13PyhhPVMoKSxhIT09dz8obD1TKCksbCE9PXc/KHU9UygpLHUhPT13PyhpPVtpLGEsbCx1XSxvPWkpOihxZT1vLG89dykpOihxZT1vLG89dykpOihxZT1vLG89dykpOihxZT1vLG89dykscj1vIT09dz90LnN1YnN0cmluZyhyLHFlKTpvLHIhPT13PyhLZT1lLG49V2UociksZT1uKToocWU9ZSxlPXcpKToocWU9ZSxlPXcpKSkpKSksZX1mdW5jdGlvbiB4KCl7dmFyIGUsdCxuO2lmKGU9cWUsdD1bXSwobj1qKCkpIT09dylmb3IoO24hPT13Oyl0LnB1c2gobiksbj1qKCk7ZWxzZSB0PXc7cmV0dXJuIHQhPT13JiYoS2U9ZSx0PVllKHQpKSxlPXR9dmFyIEwsRD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnt9LHc9e30sTT17c3RhcnQ6YX0saz1hLEk9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Im1lc3NhZ2VGb3JtYXRQYXR0ZXJuIixlbGVtZW50czplLGxvY2F0aW9uOm4oKX19LFA9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpPSIiO2Zvcih0PTAscj1lLmxlbmd0aDt0PHI7dCs9MSlmb3Iobz1lW3RdLG49MCxzPW8ubGVuZ3RoO248cztuKz0xKWkrPW9bbl07cmV0dXJuIGl9LE49ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Im1lc3NhZ2VUZXh0RWxlbWVudCIsdmFsdWU6ZSxsb2NhdGlvbjpuKCl9fSxIPS9eW14gXHRcblxyLC4rPXt9I10vLEY9e3R5cGU6ImNsYXNzIix2YWx1ZToiW14gXFx0XFxuXFxyLC4rPXt9I10iLGRlc2NyaXB0aW9uOiJbXiBcXHRcXG5cXHIsLis9e30jXSJ9LEI9InsiLFU9e3R5cGU6ImxpdGVyYWwiLHZhbHVlOiJ7IixkZXNjcmlwdGlvbjonInsiJ30sRz0iLCIsej17dHlwZToibGl0ZXJhbCIsdmFsdWU6IiwiLGRlc2NyaXB0aW9uOiciLCInfSxWPSJ9IixXPXt0eXBlOiJsaXRlcmFsIix2YWx1ZToifSIsZGVzY3JpcHRpb246JyJ9Iid9LFk9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZToiYXJndW1lbnRFbGVtZW50IixpZDplLGZvcm1hdDp0JiZ0WzJdLGxvY2F0aW9uOm4oKX19LHE9Im51bWJlciIsSz17dHlwZToibGl0ZXJhbCIsdmFsdWU6Im51bWJlciIsZGVzY3JpcHRpb246JyJudW1iZXIiJ30sWD0iZGF0ZSIsJD17dHlwZToibGl0ZXJhbCIsdmFsdWU6ImRhdGUiLGRlc2NyaXB0aW9uOiciZGF0ZSInfSxRPSJ0aW1lIixKPXt0eXBlOiJsaXRlcmFsIix2YWx1ZToidGltZSIsZGVzY3JpcHRpb246JyJ0aW1lIid9LFo9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZTplKyJGb3JtYXQiLHN0eWxlOnQmJnRbMl0sbG9jYXRpb246bigpfX0sZWU9InBsdXJhbCIsdGU9e3R5cGU6ImxpdGVyYWwiLHZhbHVlOiJwbHVyYWwiLGRlc2NyaXB0aW9uOicicGx1cmFsIid9LG5lPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmUudHlwZSxvcmRpbmFsOiExLG9mZnNldDplLm9mZnNldHx8MCxvcHRpb25zOmUub3B0aW9ucyxsb2NhdGlvbjpuKCl9fSxyZT0ic2VsZWN0b3JkaW5hbCIsb2U9e3R5cGU6ImxpdGVyYWwiLHZhbHVlOiJzZWxlY3RvcmRpbmFsIixkZXNjcmlwdGlvbjonInNlbGVjdG9yZGluYWwiJ30sc2U9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ZS50eXBlLG9yZGluYWw6ITAsb2Zmc2V0OmUub2Zmc2V0fHwwLG9wdGlvbnM6ZS5vcHRpb25zLGxvY2F0aW9uOm4oKX19LGllPSJzZWxlY3QiLGFlPXt0eXBlOiJsaXRlcmFsIix2YWx1ZToic2VsZWN0IixkZXNjcmlwdGlvbjonInNlbGVjdCInfSxsZT1mdW5jdGlvbihlKXtyZXR1cm57dHlwZToic2VsZWN0Rm9ybWF0IixvcHRpb25zOmUsbG9jYXRpb246bigpfX0sdWU9Ij0iLGNlPXt0eXBlOiJsaXRlcmFsIix2YWx1ZToiPSIsZGVzY3JpcHRpb246JyI9Iid9LGRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6Im9wdGlvbmFsRm9ybWF0UGF0dGVybiIsc2VsZWN0b3I6ZSx2YWx1ZTp0LGxvY2F0aW9uOm4oKX19LF9lPSJvZmZzZXQ6IixwZT17dHlwZToibGl0ZXJhbCIsdmFsdWU6Im9mZnNldDoiLGRlc2NyaXB0aW9uOicib2Zmc2V0OiInfSxmZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZToicGx1cmFsRm9ybWF0IixvZmZzZXQ6ZSxvcHRpb25zOnQsbG9jYXRpb246bigpfX0saGU9e3R5cGU6Im90aGVyIixkZXNjcmlwdGlvbjoid2hpdGVzcGFjZSJ9LGdlPS9eWyBcdFxuXHJdLyxiZT17dHlwZToiY2xhc3MiLHZhbHVlOiJbIFxcdFxcblxccl0iLGRlc2NyaXB0aW9uOiJbIFxcdFxcblxccl0ifSxFZT17dHlwZToib3RoZXIiLGRlc2NyaXB0aW9uOiJvcHRpb25hbFdoaXRlc3BhY2UifSx5ZT0vXlswLTldLyx2ZT17dHlwZToiY2xhc3MiLHZhbHVlOiJbMC05XSIsZGVzY3JpcHRpb246IlswLTldIn0sVGU9L15bMC05YS1mXS9pLEFlPXt0eXBlOiJjbGFzcyIsdmFsdWU6IlswLTlhLWZdaSIsZGVzY3JpcHRpb246IlswLTlhLWZdaSJ9LENlPSIwIixPZT17dHlwZToibGl0ZXJhbCIsdmFsdWU6IjAiLGRlc2NyaXB0aW9uOiciMCInfSxTZT0vXlsxLTldLyxSZT17dHlwZToiY2xhc3MiLHZhbHVlOiJbMS05XSIsZGVzY3JpcHRpb246IlsxLTldIn0samU9ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSx4ZT0vXltee31cXFwwLVx4MUZ/IFx0XG5ccl0vLExlPXt0eXBlOiJjbGFzcyIsdmFsdWU6Iltee31cXFxcXFwwLVxceDFGXFx4N2YgXFx0XFxuXFxyXSIsZGVzY3JpcHRpb246Iltee31cXFxcXFwwLVxceDFGXFx4N2YgXFx0XFxuXFxyXSJ9LERlPSJcXFxcIix3ZT17dHlwZToibGl0ZXJhbCIsdmFsdWU6IlxcXFwiLGRlc2NyaXB0aW9uOiciXFxcXFxcXFwiJ30sTWU9ZnVuY3Rpb24oKXtyZXR1cm4iXFwifSxrZT0iXFwjIixJZT17dHlwZToibGl0ZXJhbCIsdmFsdWU6IlxcIyIsZGVzY3JpcHRpb246JyJcXFxcIyInfSxQZT1mdW5jdGlvbigpe3JldHVybiJcXCMifSxOZT0iXFx7IixIZT17dHlwZToibGl0ZXJhbCIsdmFsdWU6IlxceyIsZGVzY3JpcHRpb246JyJcXFxceyInfSxGZT1mdW5jdGlvbigpe3JldHVybiJ7In0sQmU9IlxcfSIsVWU9e3R5cGU6ImxpdGVyYWwiLHZhbHVlOiJcXH0iLGRlc2NyaXB0aW9uOiciXFxcXH0iJ30sR2U9ZnVuY3Rpb24oKXtyZXR1cm4ifSJ9LHplPSJcXHUiLFZlPXt0eXBlOiJsaXRlcmFsIix2YWx1ZToiXFx1IixkZXNjcmlwdGlvbjonIlxcXFx1Iid9LFdlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUsMTYpKX0sWWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuam9pbigiIil9LHFlPTAsS2U9MCxYZT1be2xpbmU6MSxjb2x1bW46MSxzZWVuQ1I6ITF9XSwkZT0wLFFlPVtdLEplPTA7aWYoInN0YXJ0UnVsZSJpbiBEKXtpZighKEQuc3RhcnRSdWxlIGluIE0pKXRocm93IG5ldyBFcnJvcigiQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgXCIiK0Quc3RhcnRSdWxlKyciLicpO2s9TVtELnN0YXJ0UnVsZV19aWYoKEw9aygpKSE9PXcmJnFlPT09dC5sZW5ndGgpcmV0dXJuIEw7dGhyb3cgTCE9PXcmJnFlPHQubGVuZ3RoJiZzKHt0eXBlOiJlbmQiLGRlc2NyaXB0aW9uOiJlbmQgb2YgaW5wdXQifSksaShudWxsLFFlLCRlPHQubGVuZ3RoP3QuY2hhckF0KCRlKTpudWxsLCRlPHQubGVuZ3RoP28oJGUsJGUrMSk6bygkZSwkZSkpfXJldHVybiBmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9bi5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG59KGUsRXJyb3IpLHtTeW50YXhFcnJvcjplLHBhcnNlOnR9fSgpfSwiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvbWFpbi5qcyIpLmRlZmF1bHQ7bigyKSx0PWUuZXhwb3J0cz1yLHQuZGVmYXVsdD10fSwiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2xpYi9jb21waWxlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt0aGlzLmxvY2FsZXM9ZSx0aGlzLmZvcm1hdHM9dCx0aGlzLnBsdXJhbEZuPW59ZnVuY3Rpb24gbyhlKXt0aGlzLmlkPWV9ZnVuY3Rpb24gcyhlLHQsbixyLG8pe3RoaXMuaWQ9ZSx0aGlzLnVzZU9yZGluYWw9dCx0aGlzLm9mZnNldD1uLHRoaXMub3B0aW9ucz1yLHRoaXMucGx1cmFsRm49b31mdW5jdGlvbiBpKGUsdCxuLHIpe3RoaXMuaWQ9ZSx0aGlzLm9mZnNldD10LHRoaXMubnVtYmVyRm9ybWF0PW4sdGhpcy5zdHJpbmc9cn1mdW5jdGlvbiBhKGUsdCl7dGhpcy5pZD1lLHRoaXMub3B0aW9ucz10fXQuZGVmYXVsdD1yLHIucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGx1cmFsU3RhY2s9W10sdGhpcy5jdXJyZW50UGx1cmFsPW51bGwsdGhpcy5wbHVyYWxOdW1iZXJGb3JtYXQ9bnVsbCx0aGlzLmNvbXBpbGVNZXNzYWdlKGUpfSxyLnByb3RvdHlwZS5jb21waWxlTWVzc2FnZT1mdW5jdGlvbihlKXtpZighZXx8Im1lc3NhZ2VGb3JtYXRQYXR0ZXJuIiE9PWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoJ01lc3NhZ2UgQVNUIGlzIG5vdCBvZiB0eXBlOiAibWVzc2FnZUZvcm1hdFBhdHRlcm4iJyk7dmFyIHQsbixyLG89ZS5lbGVtZW50cyxzPVtdO2Zvcih0PTAsbj1vLmxlbmd0aDt0PG47dCs9MSlzd2l0Y2gocj1vW3RdLHIudHlwZSl7Y2FzZSJtZXNzYWdlVGV4dEVsZW1lbnQiOnMucHVzaCh0aGlzLmNvbXBpbGVNZXNzYWdlVGV4dChyKSk7YnJlYWs7Y2FzZSJhcmd1bWVudEVsZW1lbnQiOnMucHVzaCh0aGlzLmNvbXBpbGVBcmd1bWVudChyKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgdHlwZSIpfXJldHVybiBzfSxyLnByb3RvdHlwZS5jb21waWxlTWVzc2FnZVRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3VycmVudFBsdXJhbCYmLyhefFteXFxdKSMvZy50ZXN0KGUudmFsdWUpPyh0aGlzLnBsdXJhbE51bWJlckZvcm1hdHx8KHRoaXMucGx1cmFsTnVtYmVyRm9ybWF0PW5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZXMpKSxuZXcgaSh0aGlzLmN1cnJlbnRQbHVyYWwuaWQsdGhpcy5jdXJyZW50UGx1cmFsLmZvcm1hdC5vZmZzZXQsdGhpcy5wbHVyYWxOdW1iZXJGb3JtYXQsZS52YWx1ZSkpOmUudmFsdWUucmVwbGFjZSgvXFwjL2csIiMiKX0sci5wcm90b3R5cGUuY29tcGlsZUFyZ3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZm9ybWF0O2lmKCF0KXJldHVybiBuZXcgbyhlLmlkKTt2YXIgbixyPXRoaXMuZm9ybWF0cyxpPXRoaXMubG9jYWxlcyxsPXRoaXMucGx1cmFsRm47c3dpdGNoKHQudHlwZSl7Y2FzZSJudW1iZXJGb3JtYXQiOnJldHVybiBuPXIubnVtYmVyW3Quc3R5bGVdLHtpZDplLmlkLGZvcm1hdDpuZXcgSW50bC5OdW1iZXJGb3JtYXQoaSxuKS5mb3JtYXR9O2Nhc2UiZGF0ZUZvcm1hdCI6cmV0dXJuIG49ci5kYXRlW3Quc3R5bGVdLHtpZDplLmlkLGZvcm1hdDpuZXcgSW50bC5EYXRlVGltZUZvcm1hdChpLG4pLmZvcm1hdH07Y2FzZSJ0aW1lRm9ybWF0IjpyZXR1cm4gbj1yLnRpbWVbdC5zdHlsZV0se2lkOmUuaWQsZm9ybWF0Om5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGksbikuZm9ybWF0fTtjYXNlInBsdXJhbEZvcm1hdCI6cmV0dXJuIG49dGhpcy5jb21waWxlT3B0aW9ucyhlKSxuZXcgcyhlLmlkLHQub3JkaW5hbCx0Lm9mZnNldCxuLGwpO2Nhc2Uic2VsZWN0Rm9ybWF0IjpyZXR1cm4gbj10aGlzLmNvbXBpbGVPcHRpb25zKGUpLG5ldyBhKGUuaWQsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1lc3NhZ2UgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZm9ybWF0IHR5cGUiKX19LHIucHJvdG90eXBlLmNvbXBpbGVPcHRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZm9ybWF0LG49dC5vcHRpb25zLHI9e307dGhpcy5wbHVyYWxTdGFjay5wdXNoKHRoaXMuY3VycmVudFBsdXJhbCksdGhpcy5jdXJyZW50UGx1cmFsPSJwbHVyYWxGb3JtYXQiPT09dC50eXBlP2U6bnVsbDt2YXIgbyxzLGk7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKz0xKWk9bltvXSxyW2kuc2VsZWN0b3JdPXRoaXMuY29tcGlsZU1lc3NhZ2UoaS52YWx1ZSk7cmV0dXJuIHRoaXMuY3VycmVudFBsdXJhbD10aGlzLnBsdXJhbFN0YWNrLnBvcCgpLHJ9LG8ucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZXx8Im51bWJlciI9PXR5cGVvZiBlPyJzdHJpbmciPT10eXBlb2YgZT9lOlN0cmluZyhlKToiIn0scy5wcm90b3R5cGUuZ2V0T3B0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm4gdFsiPSIrZV18fHRbdGhpcy5wbHVyYWxGbihlLXRoaXMub2Zmc2V0LHRoaXMudXNlT3JkaW5hbCldfHx0Lm90aGVyfSxpLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5udW1iZXJGb3JtYXQuZm9ybWF0KGUtdGhpcy5vZmZzZXQpO3JldHVybiB0aGlzLnN0cmluZy5yZXBsYWNlKC8oXnxbXlxcXSkjL2csIiQxIit0KS5yZXBsYWNlKC9cXCMvZywiIyIpfSxhLnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zO3JldHVybiB0W2VdfHx0Lm90aGVyfX0sIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvY29yZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIGU/ci5fX3BhcnNlKGUpOmU7aWYoIW98fCJtZXNzYWdlRm9ybWF0UGF0dGVybiIhPT1vLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQSBtZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBTdHJpbmcgb3IgQVNULiIpO249dGhpcy5fbWVyZ2VGb3JtYXRzKHIuZm9ybWF0cyxuKSxzLmRlZmluZVByb3BlcnR5KHRoaXMsIl9sb2NhbGUiLHt2YWx1ZTp0aGlzLl9yZXNvbHZlTG9jYWxlKHQpfSk7dmFyIGk9dGhpcy5fZmluZFBsdXJhbFJ1bGVGdW5jdGlvbih0aGlzLl9sb2NhbGUpLGE9dGhpcy5fY29tcGlsZVBhdHRlcm4obyx0LG4saSksbD10aGlzO3RoaXMuZm9ybWF0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbC5fZm9ybWF0KGEsdCl9Y2F0Y2godCl7dGhyb3cgdC52YXJpYWJsZUlkP25ldyBFcnJvcigiVGhlIGludGwgc3RyaW5nIGNvbnRleHQgdmFyaWFibGUgJyIrdC52YXJpYWJsZUlkKyInIHdhcyBub3QgcHJvdmlkZWQgdG8gdGhlIHN0cmluZyAnIitlKyInIik6dH19fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvdXRpbHMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvZXM1LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQvbGliL2NvbXBpbGVyLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQtcGFyc2VyL2luZGV4LmpzIik7dC5kZWZhdWx0PXIscy5kZWZpbmVQcm9wZXJ0eShyLCJmb3JtYXRzIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp7bnVtYmVyOntjdXJyZW5jeTp7c3R5bGU6ImN1cnJlbmN5In0scGVyY2VudDp7c3R5bGU6InBlcmNlbnQifX0sZGF0ZTp7c2hvcnQ6e21vbnRoOiJudW1lcmljIixkYXk6Im51bWVyaWMiLHllYXI6IjItZGlnaXQifSxtZWRpdW06e21vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIix5ZWFyOiJudW1lcmljIn0sbG9uZzp7bW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9LGZ1bGw6e3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifX0sdGltZTp7c2hvcnQ6e2hvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyJ9LG1lZGl1bTp7aG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSxsb25nOntob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9LGZ1bGw6e2hvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In19fX0pLHMuZGVmaW5lUHJvcGVydHkociwiX19sb2NhbGVEYXRhX18iLHt2YWx1ZTpzLm9iakNyZWF0ZShudWxsKX0pLHMuZGVmaW5lUHJvcGVydHkociwiX19hZGRMb2NhbGVEYXRhIix7dmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLmxvY2FsZSl0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIHByb3ZpZGVkIHRvIEludGxNZXNzYWdlRm9ybWF0IGlzIG1pc3NpbmcgYSBgbG9jYWxlYCBwcm9wZXJ0eSIpO3IuX19sb2NhbGVEYXRhX19bZS5sb2NhbGUudG9Mb3dlckNhc2UoKV09ZX19KSxzLmRlZmluZVByb3BlcnR5KHIsIl9fcGFyc2UiLHt2YWx1ZTphLmRlZmF1bHQucGFyc2V9KSxzLmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHRMb2NhbGUiLHtlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHIucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybntsb2NhbGU6dGhpcy5fbG9jYWxlfX0sci5wcm90b3R5cGUuX2NvbXBpbGVQYXR0ZXJuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgaS5kZWZhdWx0KHQsbixyKS5jb21waWxlKGUpfSxyLnByb3RvdHlwZS5fZmluZFBsdXJhbFJ1bGVGdW5jdGlvbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ci5fX2xvY2FsZURhdGFfXyxuPXRbZS50b0xvd2VyQ2FzZSgpXTtuOyl7aWYobi5wbHVyYWxSdWxlRnVuY3Rpb24pcmV0dXJuIG4ucGx1cmFsUnVsZUZ1bmN0aW9uO249bi5wYXJlbnRMb2NhbGUmJnRbbi5wYXJlbnRMb2NhbGUudG9Mb3dlckNhc2UoKV19dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBhZGRlZCB0byBJbnRsTWVzc2FnZUZvcm1hdCBpcyBtaXNzaW5nIGEgYHBsdXJhbFJ1bGVGdW5jdGlvbmAgZm9yIDoiK2UpfSxyLnByb3RvdHlwZS5fZm9ybWF0PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixzLGksYSxsLHU9IiI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKz0xKWlmKCJzdHJpbmciIT10eXBlb2Yocz1lW25dKSl7aWYoaT1zLmlkLCF0fHwhby5ob3AuY2FsbCh0LGkpKXRocm93IGw9bmV3IEVycm9yKCJBIHZhbHVlIG11c3QgYmUgcHJvdmlkZWQgZm9yOiAiK2kpLGwudmFyaWFibGVJZD1pLGw7YT10W2ldLHMub3B0aW9ucz91Kz10aGlzLl9mb3JtYXQocy5nZXRPcHRpb24oYSksdCk6dSs9cy5mb3JtYXQoYSl9ZWxzZSB1Kz1zO3JldHVybiB1fSxyLnByb3RvdHlwZS5fbWVyZ2VGb3JtYXRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXt9O2ZvcihuIGluIGUpby5ob3AuY2FsbChlLG4pJiYoaVtuXT1yPXMub2JqQ3JlYXRlKGVbbl0pLHQmJm8uaG9wLmNhbGwodCxuKSYmby5leHRlbmQocix0W25dKSk7cmV0dXJuIGl9LHIucHJvdG90eXBlLl9yZXNvbHZlTG9jYWxlPWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSxlPShlfHxbXSkuY29uY2F0KHIuZGVmYXVsdExvY2FsZSk7dmFyIHQsbixvLHMsaT1yLl9fbG9jYWxlRGF0YV9fO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCs9MSlmb3Iobz1lW3RdLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi0iKTtvLmxlbmd0aDspe2lmKHM9aVtvLmpvaW4oIi0iKV0pcmV0dXJuIHMubG9jYWxlO28ucG9wKCl9dmFyIGE9ZS5wb3AoKTt0aHJvdyBuZXcgRXJyb3IoIk5vIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGFkZGVkIHRvIEludGxNZXNzYWdlRm9ybWF0IGZvcjogIitlLmpvaW4oIiwgIikrIiwgb3IgdGhlIGRlZmF1bHQgbG9jYWxlOiAiK2EpfX0sIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvZW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5kZWZhdWx0PXtsb2NhbGU6ImVuIixwbHVyYWxSdWxlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPSFuWzFdLG89TnVtYmVyKG5bMF0pPT1lLHM9byYmblswXS5zbGljZSgtMSksaT1vJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD8xPT1zJiYxMSE9aT8ib25lIjoyPT1zJiYxMiE9aT8idHdvIjozPT1zJiYxMyE9aT8iZmV3Ijoib3RoZXIiOjE9PWUmJnI/Im9uZSI6Im90aGVyIn19fSwiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2xpYi9lczUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2xpYi91dGlscy5qcyIpLG89ZnVuY3Rpb24oKXt0cnl7cmV0dXJuISFPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHt9KX1jYXRjaChlKXtyZXR1cm4hMX19KCkscz0oIW8mJk9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyxvP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7ImdldCJpbiBuJiZlLl9fZGVmaW5lR2V0dGVyX18/ZS5fX2RlZmluZUdldHRlcl9fKHQsbi5nZXQpOighci5ob3AuY2FsbChlLHQpfHwidmFsdWUiaW4gbikmJihlW3RdPW4udmFsdWUpfSksaT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt9dmFyIG8saTtuLnByb3RvdHlwZT1lLG89bmV3IG47Zm9yKGkgaW4gdClyLmhvcC5jYWxsKHQsaSkmJnMobyxpLHRbaV0pO3JldHVybiBvfTt0LmRlZmluZVByb3BlcnR5PXMsdC5vYmpDcmVhdGU9aX0sIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvbWFpbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQvbGliL2NvcmUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvZW4uanMiKTtyLmRlZmF1bHQuX19hZGRMb2NhbGVEYXRhKG8uZGVmYXVsdCksci5kZWZhdWx0LmRlZmF1bHRMb2NhbGU9ImVuIix0LmRlZmF1bHQ9ci5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2xpYi91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG4scixzLGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2Zvcih0PTAsbj1pLmxlbmd0aDt0PG47dCs9MSlpZihyPWlbdF0pZm9yKHMgaW4gcilvLmNhbGwocixzKSYmKGVbc109cltzXSk7cmV0dXJuIGV9dC5leHRlbmQ9cjt2YXIgbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuaG9wPW99LCIuL25vZGVfbW9kdWxlcy9pbnRsLXJlbGF0aXZlZm9ybWF0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvbGliL21haW4uanMiKS5kZWZhdWx0O24oMyksdD1lLmV4cG9ydHM9cix0LmRlZmF1bHQ9dH0sIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvbGliL2NvcmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3Q9dHx8e30saS5pc0FycmF5KGUpJiYoZT1lLmNvbmNhdCgpKSxpLmRlZmluZVByb3BlcnR5KHRoaXMsIl9sb2NhbGUiLHt2YWx1ZTp0aGlzLl9yZXNvbHZlTG9jYWxlKGUpfSksaS5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfb3B0aW9ucyIse3ZhbHVlOntzdHlsZTp0aGlzLl9yZXNvbHZlU3R5bGUodC5zdHlsZSksdW5pdHM6dGhpcy5faXNWYWxpZFVuaXRzKHQudW5pdHMpJiZ0LnVuaXRzfX0pLGkuZGVmaW5lUHJvcGVydHkodGhpcywiX2xvY2FsZXMiLHt2YWx1ZTplfSksaS5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfZmllbGRzIix7dmFsdWU6dGhpcy5fZmluZEZpZWxkcyh0aGlzLl9sb2NhbGUpfSksaS5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfbWVzc2FnZXMiLHt2YWx1ZTppLm9iakNyZWF0ZShudWxsKX0pO3ZhciBuPXRoaXM7dGhpcy5mb3JtYXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5fZm9ybWF0KGUsdCl9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvaW50bC1yZWxhdGl2ZWZvcm1hdC9saWIvZGlmZi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvaW50bC1yZWxhdGl2ZWZvcm1hdC9saWIvZXM1LmpzIik7dC5kZWZhdWx0PXI7dmFyIGE9WyJzZWNvbmQiLCJzZWNvbmQtc2hvcnQiLCJtaW51dGUiLCJtaW51dGUtc2hvcnQiLCJob3VyIiwiaG91ci1zaG9ydCIsImRheSIsImRheS1zaG9ydCIsIm1vbnRoIiwibW9udGgtc2hvcnQiLCJ5ZWFyIiwieWVhci1zaG9ydCJdLGw9WyJiZXN0IGZpdCIsIm51bWVyaWMiXTtpLmRlZmluZVByb3BlcnR5KHIsIl9fbG9jYWxlRGF0YV9fIix7dmFsdWU6aS5vYmpDcmVhdGUobnVsbCl9KSxpLmRlZmluZVByb3BlcnR5KHIsIl9fYWRkTG9jYWxlRGF0YSIse3ZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5sb2NhbGUpdGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBwcm92aWRlZCB0byBJbnRsUmVsYXRpdmVGb3JtYXQgaXMgbWlzc2luZyBhIGBsb2NhbGVgIHByb3BlcnR5IHZhbHVlIik7ci5fX2xvY2FsZURhdGFfX1tlLmxvY2FsZS50b0xvd2VyQ2FzZSgpXT1lLG8uZGVmYXVsdC5fX2FkZExvY2FsZURhdGEoZSl9fSksaS5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0TG9jYWxlIix7ZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxpLmRlZmluZVByb3BlcnR5KHIsInRocmVzaG9sZHMiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOntzZWNvbmQ6NDUsInNlY29uZC1zaG9ydCI6NDUsbWludXRlOjQ1LCJtaW51dGUtc2hvcnQiOjQ1LGhvdXI6MjIsImhvdXItc2hvcnQiOjIyLGRheToyNiwiZGF5LXNob3J0IjoyNixtb250aDoxMSwibW9udGgtc2hvcnQiOjExfX0pLHIucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybntsb2NhbGU6dGhpcy5fbG9jYWxlLHN0eWxlOnRoaXMuX29wdGlvbnMuc3R5bGUsdW5pdHM6dGhpcy5fb3B0aW9ucy51bml0c319LHIucHJvdG90eXBlLl9jb21waWxlTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX2xvY2FsZXMscj0odGhpcy5fbG9jYWxlLHRoaXMuX2ZpZWxkc1tlXSkscz1yLnJlbGF0aXZlVGltZSxpPSIiLGE9IiI7Zm9yKHQgaW4gcy5mdXR1cmUpcy5mdXR1cmUuaGFzT3duUHJvcGVydHkodCkmJihpKz0iICIrdCsiIHsiK3MuZnV0dXJlW3RdLnJlcGxhY2UoInswfSIsIiMiKSsifSIpO2Zvcih0IGluIHMucGFzdClzLnBhc3QuaGFzT3duUHJvcGVydHkodCkmJihhKz0iICIrdCsiIHsiK3MucGFzdFt0XS5yZXBsYWNlKCJ7MH0iLCIjIikrIn0iKTt2YXIgbD0ie3doZW4sIHNlbGVjdCwgZnV0dXJlIHt7MCwgcGx1cmFsLCAiK2krIn19cGFzdCB7ezAsIHBsdXJhbCwgIithKyJ9fX0iO3JldHVybiBuZXcgby5kZWZhdWx0KGwsbil9LHIucHJvdG90eXBlLl9nZXRNZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21lc3NhZ2VzO3JldHVybiB0W2VdfHwodFtlXT10aGlzLl9jb21waWxlTWVzc2FnZShlKSksdFtlXX0sci5wcm90b3R5cGUuX2dldFJlbGF0aXZlVW5pdHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9maWVsZHNbdF07aWYobi5yZWxhdGl2ZSlyZXR1cm4gbi5yZWxhdGl2ZVtlXX0sci5wcm90b3R5cGUuX2ZpbmRGaWVsZHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXIuX19sb2NhbGVEYXRhX18sbj10W2UudG9Mb3dlckNhc2UoKV07bjspe2lmKG4uZmllbGRzKXJldHVybiBuLmZpZWxkcztuPW4ucGFyZW50TG9jYWxlJiZ0W24ucGFyZW50TG9jYWxlLnRvTG93ZXJDYXNlKCldfXRocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgYWRkZWQgdG8gSW50bFJlbGF0aXZlRm9ybWF0IGlzIG1pc3NpbmcgYGZpZWxkc2AgZm9yIDoiK2UpfSxyLnByb3RvdHlwZS5fZm9ybWF0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmdm9pZCAwIT09dC5ub3c/dC5ub3c6aS5kYXRlTm93KCk7aWYodm9pZCAwPT09ZSYmKGU9biksIWlzRmluaXRlKG4pKXRocm93IG5ldyBSYW5nZUVycm9yKCJUaGUgYG5vd2Agb3B0aW9uIHByb3ZpZGVkIHRvIEludGxSZWxhdGl2ZUZvcm1hdCNmb3JtYXQoKSBpcyBub3QgaW4gdmFsaWQgcmFuZ2UuIik7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJUaGUgZGF0ZSB2YWx1ZSBwcm92aWRlZCB0byBJbnRsUmVsYXRpdmVGb3JtYXQjZm9ybWF0KCkgaXMgbm90IGluIHZhbGlkIHJhbmdlLiIpO3ZhciByPXMuZGVmYXVsdChuLGUpLG89dGhpcy5fb3B0aW9ucy51bml0c3x8dGhpcy5fc2VsZWN0VW5pdHMociksYT1yW29dO2lmKCJudW1lcmljIiE9PXRoaXMuX29wdGlvbnMuc3R5bGUpe3ZhciBsPXRoaXMuX2dldFJlbGF0aXZlVW5pdHMoYSxvKTtpZihsKXJldHVybiBsfXJldHVybiB0aGlzLl9nZXRNZXNzYWdlKG8pLmZvcm1hdCh7MDpNYXRoLmFicyhhKSx3aGVuOmE8MD8icGFzdCI6ImZ1dHVyZSJ9KX0sci5wcm90b3R5cGUuX2lzVmFsaWRVbml0cz1mdW5jdGlvbihlKXtpZighZXx8aS5hcnJJbmRleE9mLmNhbGwoYSxlKT49MClyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciB0PS9zJC8udGVzdChlKSYmZS5zdWJzdHIoMCxlLmxlbmd0aC0xKTtpZih0JiZpLmFyckluZGV4T2YuY2FsbChhLHQpPj0wKXRocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgYSB2YWxpZCBJbnRsUmVsYXRpdmVGb3JtYXQgYHVuaXRzYCB2YWx1ZSwgZGlkIHlvdSBtZWFuOiAnK3QpfXRocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgYSB2YWxpZCBJbnRsUmVsYXRpdmVGb3JtYXQgYHVuaXRzYCB2YWx1ZSwgaXQgbXVzdCBiZSBvbmUgb2Y6ICInK2Euam9pbignIiwgIicpKyciJyl9LHIucHJvdG90eXBlLl9yZXNvbHZlTG9jYWxlPWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSxlPShlfHxbXSkuY29uY2F0KHIuZGVmYXVsdExvY2FsZSk7dmFyIHQsbixvLHMsaT1yLl9fbG9jYWxlRGF0YV9fO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCs9MSlmb3Iobz1lW3RdLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi0iKTtvLmxlbmd0aDspe2lmKHM9aVtvLmpvaW4oIi0iKV0pcmV0dXJuIHMubG9jYWxlO28ucG9wKCl9dmFyIGE9ZS5wb3AoKTt0aHJvdyBuZXcgRXJyb3IoIk5vIGxvY2FsZSBkYXRhIGhhcyBiZWVuIGFkZGVkIHRvIEludGxSZWxhdGl2ZUZvcm1hdCBmb3I6ICIrZS5qb2luKCIsICIpKyIsIG9yIHRoZSBkZWZhdWx0IGxvY2FsZTogIithKX0sci5wcm90b3R5cGUuX3Jlc29sdmVTdHlsZT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbFswXTtpZihpLmFyckluZGV4T2YuY2FsbChsLGUpPj0wKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgYSB2YWxpZCBJbnRsUmVsYXRpdmVGb3JtYXQgYHN0eWxlYCB2YWx1ZSwgaXQgbXVzdCBiZSBvbmUgb2Y6ICInK2wuam9pbignIiwgIicpKyciJyl9LHIucHJvdG90eXBlLl9zZWxlY3RVbml0cz1mdW5jdGlvbihlKXt2YXIgdCxuLG8scz1hLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleE9mKCItc2hvcnQiKTwxfSk7Zm9yKHQ9MCxuPXMubGVuZ3RoO3Q8biYmKG89c1t0XSwhKE1hdGguYWJzKGVbb10pPHIudGhyZXNob2xkc1tvXSkpO3QrPTEpO3JldHVybiBvfX0sIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvbGliL2RpZmYuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gNDAwKmUvMTQ2MDk3fXZhciBvPU1hdGgucm91bmQ7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0O3ZhciBuPW8odC1lKSxzPW8obi8xZTMpLGk9byhzLzYwKSxhPW8oaS82MCksbD1vKGEvMjQpLHU9byhsLzcpLGM9cihsKSxkPW8oMTIqYyksXz1vKGMpO3JldHVybnttaWxsaXNlY29uZDpuLHNlY29uZDpzLCJzZWNvbmQtc2hvcnQiOnMsbWludXRlOmksIm1pbnV0ZS1zaG9ydCI6aSxob3VyOmEsImhvdXItc2hvcnQiOmEsZGF5OmwsImRheS1zaG9ydCI6bCx3ZWVrOnUsIndlZWstc2hvcnQiOnUsbW9udGg6ZCwibW9udGgtc2hvcnQiOmQseWVhcjpfLCJ5ZWFyLXNob3J0IjpffX19LCIuL25vZGVfbW9kdWxlcy9pbnRsLXJlbGF0aXZlZm9ybWF0L2xpYi9lbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmRlZmF1bHQ9e2xvY2FsZToiZW4iLHBsdXJhbFJ1bGVGdW5jdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9IW5bMV0sbz1OdW1iZXIoblswXSk9PWUscz1vJiZuWzBdLnNsaWNlKC0xKSxpPW8mJm5bMF0uc2xpY2UoLTIpO3JldHVybiB0PzE9PXMmJjExIT1pPyJvbmUiOjI9PXMmJjEyIT1pPyJ0d28iOjM9PXMmJjEzIT1pPyJmZXciOiJvdGhlciI6MT09ZSYmcj8ib25lIjoib3RoZXIifSxmaWVsZHM6e3llYXI6e2Rpc3BsYXlOYW1lOiJ5ZWFyIixyZWxhdGl2ZTp7MDoidGhpcyB5ZWFyIiwxOiJuZXh0IHllYXIiLCItMSI6Imxhc3QgeWVhciJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSB5ZWFyIixvdGhlcjoiaW4gezB9IHllYXJzIn0scGFzdDp7b25lOiJ7MH0geWVhciBhZ28iLG90aGVyOiJ7MH0geWVhcnMgYWdvIn19fSwieWVhci1zaG9ydCI6e2Rpc3BsYXlOYW1lOiJ5ci4iLHJlbGF0aXZlOnswOiJ0aGlzIHlyLiIsMToibmV4dCB5ci4iLCItMSI6Imxhc3QgeXIuIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IHlyLiIsb3RoZXI6ImluIHswfSB5ci4ifSxwYXN0OntvbmU6InswfSB5ci4gYWdvIixvdGhlcjoiezB9IHlyLiBhZ28ifX19LG1vbnRoOntkaXNwbGF5TmFtZToibW9udGgiLHJlbGF0aXZlOnswOiJ0aGlzIG1vbnRoIiwxOiJuZXh0IG1vbnRoIiwiLTEiOiJsYXN0IG1vbnRoIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IG1vbnRoIixvdGhlcjoiaW4gezB9IG1vbnRocyJ9LHBhc3Q6e29uZToiezB9IG1vbnRoIGFnbyIsb3RoZXI6InswfSBtb250aHMgYWdvIn19fSwibW9udGgtc2hvcnQiOntkaXNwbGF5TmFtZToibW8uIixyZWxhdGl2ZTp7MDoidGhpcyBtby4iLDE6Im5leHQgbW8uIiwiLTEiOiJsYXN0IG1vLiJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSBtby4iLG90aGVyOiJpbiB7MH0gbW8uIn0scGFzdDp7b25lOiJ7MH0gbW8uIGFnbyIsb3RoZXI6InswfSBtby4gYWdvIn19fSxkYXk6e2Rpc3BsYXlOYW1lOiJkYXkiLHJlbGF0aXZlOnswOiJ0b2RheSIsMToidG9tb3Jyb3ciLCItMSI6Inllc3RlcmRheSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSBkYXkiLG90aGVyOiJpbiB7MH0gZGF5cyJ9LHBhc3Q6e29uZToiezB9IGRheSBhZ28iLG90aGVyOiJ7MH0gZGF5cyBhZ28ifX19LCJkYXktc2hvcnQiOntkaXNwbGF5TmFtZToiZGF5IixyZWxhdGl2ZTp7MDoidG9kYXkiLDE6InRvbW9ycm93IiwiLTEiOiJ5ZXN0ZXJkYXkifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gZGF5IixvdGhlcjoiaW4gezB9IGRheXMifSxwYXN0OntvbmU6InswfSBkYXkgYWdvIixvdGhlcjoiezB9IGRheXMgYWdvIn19fSxob3VyOntkaXNwbGF5TmFtZToiaG91ciIscmVsYXRpdmU6ezA6InRoaXMgaG91ciJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSBob3VyIixvdGhlcjoiaW4gezB9IGhvdXJzIn0scGFzdDp7b25lOiJ7MH0gaG91ciBhZ28iLG90aGVyOiJ7MH0gaG91cnMgYWdvIn19fSwiaG91ci1zaG9ydCI6e2Rpc3BsYXlOYW1lOiJoci4iLHJlbGF0aXZlOnswOiJ0aGlzIGhvdXIifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gaHIuIixvdGhlcjoiaW4gezB9IGhyLiJ9LHBhc3Q6e29uZToiezB9IGhyLiBhZ28iLG90aGVyOiJ7MH0gaHIuIGFnbyJ9fX0sbWludXRlOntkaXNwbGF5TmFtZToibWludXRlIixyZWxhdGl2ZTp7MDoidGhpcyBtaW51dGUifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gbWludXRlIixvdGhlcjoiaW4gezB9IG1pbnV0ZXMifSxwYXN0OntvbmU6InswfSBtaW51dGUgYWdvIixvdGhlcjoiezB9IG1pbnV0ZXMgYWdvIn19fSwibWludXRlLXNob3J0Ijp7ZGlzcGxheU5hbWU6Im1pbi4iLHJlbGF0aXZlOnswOiJ0aGlzIG1pbnV0ZSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSBtaW4uIixvdGhlcjoiaW4gezB9IG1pbi4ifSxwYXN0OntvbmU6InswfSBtaW4uIGFnbyIsb3RoZXI6InswfSBtaW4uIGFnbyJ9fX0sc2Vjb25kOntkaXNwbGF5TmFtZToic2Vjb25kIixyZWxhdGl2ZTp7MDoibm93In0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IHNlY29uZCIsb3RoZXI6ImluIHswfSBzZWNvbmRzIn0scGFzdDp7b25lOiJ7MH0gc2Vjb25kIGFnbyIsb3RoZXI6InswfSBzZWNvbmRzIGFnbyJ9fX0sInNlY29uZC1zaG9ydCI6e2Rpc3BsYXlOYW1lOiJzZWMuIixyZWxhdGl2ZTp7MDoibm93In0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IHNlYy4iLG90aGVyOiJpbiB7MH0gc2VjLiJ9LHBhc3Q6e29uZToiezB9IHNlYy4gYWdvIixvdGhlcjoiezB9IHNlYy4gYWdvIn19fX19fSwiLi9ub2RlX21vZHVsZXMvaW50bC1yZWxhdGl2ZWZvcm1hdC9saWIvZXM1LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuISFPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHt9KX1jYXRjaChlKXtyZXR1cm4hMX19KCksaT0oIXMmJk9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyxzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7ImdldCJpbiBuJiZlLl9fZGVmaW5lR2V0dGVyX18/ZS5fX2RlZmluZUdldHRlcl9fKHQsbi5nZXQpOighci5jYWxsKGUsdCl8fCJ2YWx1ZSJpbiBuKSYmKGVbdF09bi52YWx1ZSl9KSxhPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe312YXIgbyxzO24ucHJvdG90eXBlPWUsbz1uZXcgbjtmb3IocyBpbiB0KXIuY2FsbCh0LHMpJiZpKG8scyx0W3NdKTtyZXR1cm4gb30sbD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFuLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHI9dHx8MCxvPW4ubGVuZ3RoO3I8bztyKyspaWYobltyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9LHU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PW8uY2FsbChlKX0sYz1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dC5kZWZpbmVQcm9wZXJ0eT1pLHQub2JqQ3JlYXRlPWEsdC5hcnJJbmRleE9mPWwsdC5pc0FycmF5PXUsdC5kYXRlTm93PWN9LCIuL25vZGVfbW9kdWxlcy9pbnRsLXJlbGF0aXZlZm9ybWF0L2xpYi9tYWluLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvbGliL2NvcmUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvbGliL2VuLmpzIik7ci5kZWZhdWx0Ll9fYWRkTG9jYWxlRGF0YShvLmRlZmF1bHQpLHIuZGVmYXVsdC5kZWZhdWx0TG9jYWxlPSJlbiIsdC5kZWZhdWx0PXIuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGksYSl7aWYoIWUpe3ZhciBsO2lmKHZvaWQgMD09PXQpbD1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgdT1bbixyLG8scyxpLGFdLGM9MDtsPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gdVtjKytdfSkpLGwubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgbC5mcmFtZXNUb1BvcD0xLGx9fTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJm4oZS5zbGljZSgwLDApKX0vKiEKICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlcgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwplLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJihuKGUpfHxyKGUpfHwhIWUuX2lzQnVmZmVyKX19LCIuL25vZGVfbW9kdWxlcy9pcy1wcm9taXNlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuISFlJiYoIm9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW59ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIjpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1uLmNhbGwoZSl9fSwiLi9ub2RlX21vZHVsZXMvaXNvbW9ycGhpYy1mb3JtLWRhdGEvbGliL2Jyb3dzZXIuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPUZvcm1EYXRhfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiAiK2UrIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZHVtcGVyLmpzIik7ZS5leHBvcnRzLlR5cGU9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksZS5leHBvcnRzLlNjaGVtYT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpLGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiKSxlLmV4cG9ydHMuSlNPTl9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIpLGUuZXhwb3J0cy5DT1JFX1NDSEVNQT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIiksZS5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIiksZS5leHBvcnRzLkRFRkFVTFRfRlVMTF9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIiksZS5leHBvcnRzLmxvYWQ9by5sb2FkLGUuZXhwb3J0cy5sb2FkQWxsPW8ubG9hZEFsbCxlLmV4cG9ydHMuc2FmZUxvYWQ9by5zYWZlTG9hZCxlLmV4cG9ydHMuc2FmZUxvYWRBbGw9by5zYWZlTG9hZEFsbCxlLmV4cG9ydHMuZHVtcD1zLmR1bXAsZS5leHBvcnRzLnNhZmVEdW1wPXMuc2FmZUR1bXAsZS5leHBvcnRzLllBTUxFeGNlcHRpb249bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiKSxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiKSxlLmV4cG9ydHMuU0FGRV9TQ0hFTUE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIiksZS5leHBvcnRzLkRFRkFVTFRfU0NIRU1BPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIpLGUuZXhwb3J0cy5zY2FuPXIoInNjYW4iKSxlLmV4cG9ydHMucGFyc2U9cigicGFyc2UiKSxlLmV4cG9ydHMuY29tcG9zZT1yKCJjb21wb3NlIiksZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yPXIoImFkZENvbnN0cnVjdG9yIil9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiB2b2lkIDA9PT1lfHxudWxsPT09ZX1mdW5jdGlvbiBvKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOnIoZSk/W106W2VdfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbixyLG8scztpZih0KWZvcihzPU9iamVjdC5rZXlzKHQpLG49MCxyPXMubGVuZ3RoO248cjtuKz0xKW89c1tuXSxlW29dPXRbb107cmV0dXJuIGV9ZnVuY3Rpb24gYShlLHQpe3ZhciBuLHI9IiI7Zm9yKG49MDtuPHQ7bis9MSlyKz1lO3JldHVybiByfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDA9PT1lJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2V9ZS5leHBvcnRzLmlzTm90aGluZz1yLGUuZXhwb3J0cy5pc09iamVjdD1vLGUuZXhwb3J0cy50b0FycmF5PXMsZS5leHBvcnRzLnJlcGVhdD1hLGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybz1sLGUuZXhwb3J0cy5leHRlbmQ9aX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZHVtcGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbixyLG8scyxpLGEsbDtpZihudWxsPT09dClyZXR1cm57fTtmb3Iobj17fSxyPU9iamVjdC5rZXlzKHQpLG89MCxzPXIubGVuZ3RoO288cztvKz0xKWk9cltvXSxhPVN0cmluZyh0W2ldKSwiISEiPT09aS5zbGljZSgwLDIpJiYoaT0idGFnOnlhbWwub3JnLDIwMDI6IitpLnNsaWNlKDIpKSxsPWUuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW2ldLGwmJlAuY2FsbChsLnN0eWxlQWxpYXNlcyxhKSYmKGE9bC5zdHlsZUFsaWFzZXNbYV0pLG5baV09YTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scjtpZih0PWUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksZTw9MjU1KW49IngiLHI9MjtlbHNlIGlmKGU8PTY1NTM1KW49InUiLHI9NDtlbHNle2lmKCEoZTw9NDI5NDk2NzI5NSkpdGhyb3cgbmV3IHcoImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTtuPSJVIixyPTh9cmV0dXJuIlxcIituK0QucmVwZWF0KCIwIixyLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIHMoZSl7dGhpcy5zY2hlbWE9ZS5zY2hlbWF8fE0sdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSxlLmluZGVudHx8MiksdGhpcy5ub0FycmF5SW5kZW50PWUubm9BcnJheUluZGVudHx8ITEsdGhpcy5za2lwSW52YWxpZD1lLnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1ELmlzTm90aGluZyhlLmZsb3dMZXZlbCk/LTE6ZS5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1yKHRoaXMuc2NoZW1hLGUuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPWUuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPWUubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz1lLm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9ZS5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PWUuY29uZGVuc2VGbG93fHwhMSx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbixyPUQucmVwZWF0KCIgIix0KSxvPTAscz0tMSxpPSIiLGE9ZS5sZW5ndGg7bzxhOylzPWUuaW5kZXhPZigiXG4iLG8pLC0xPT09cz8obj1lLnNsaWNlKG8pLG89YSk6KG49ZS5zbGljZShvLHMrMSksbz1zKzEpLG4ubGVuZ3RoJiYiXG4iIT09biYmKGkrPXIpLGkrPW47cmV0dXJuIGl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiJcbiIrRC5yZXBlYXQoIiAiLGUuaW5kZW50KnQpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbixyLG87Zm9yKG49MCxyPWUuaW1wbGljaXRUeXBlcy5sZW5ndGg7bjxyO24rPTEpaWYobz1lLmltcGxpY2l0VHlwZXNbbl0sby5yZXNvbHZlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU9PT1GfHxlPT09Tn1mdW5jdGlvbiBjKGUpe3JldHVybiAzMjw9ZSYmZTw9MTI2fHwxNjE8PWUmJmU8PTU1Mjk1JiY4MjMyIT09ZSYmODIzMyE9PWV8fDU3MzQ0PD1lJiZlPD02NTUzMyYmNjUyNzkhPT1lfHw2NTUzNjw9ZSYmZTw9MTExNDExMX1mdW5jdGlvbiBkKGUpe3JldHVybiBjKGUpJiY2NTI3OSE9PWUmJmUhPT1xJiZlIT09WiYmZSE9PWVlJiZlIT09bmUmJmUhPT1vZSYmZSE9PVgmJmUhPT1HfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGMoZSkmJjY1Mjc5IT09ZSYmIXUoZSkmJmUhPT1LJiZlIT09USYmZSE9PVgmJmUhPT1xJiZlIT09WiYmZSE9PWVlJiZlIT09bmUmJmUhPT1vZSYmZSE9PUcmJmUhPT1WJiZlIT09WSYmZSE9PUImJmUhPT1yZSYmZSE9PSQmJmUhPT1XJiZlIT09VSYmZSE9PXomJmUhPT1KJiZlIT09dGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4vXlxuKiAvLnRlc3QoZSl9ZnVuY3Rpb24gZihlLHQsbixyLG8pe3ZhciBzLGksYT0hMSxsPSExLGY9LTEhPT1yLG09LTEsaD1fKGUuY2hhckNvZGVBdCgwKSkmJiF1KGUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSk7aWYodClmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtpZihpPWUuY2hhckNvZGVBdChzKSwhYyhpKSlyZXR1cm4gZGU7aD1oJiZkKGkpfWVsc2V7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYoKGk9ZS5jaGFyQ29kZUF0KHMpKT09PUgpYT0hMCxmJiYobD1sfHxzLW0tMT5yJiYiICIhPT1lW20rMV0sbT1zKTtlbHNlIGlmKCFjKGkpKXJldHVybiBkZTtoPWgmJmQoaSl9bD1sfHxmJiZzLW0tMT5yJiYiICIhPT1lW20rMV19cmV0dXJuIGF8fGw/bj45JiZwKGUpP2RlOmw/Y2U6dWU6aCYmIW8oZSk/YWU6bGV9ZnVuY3Rpb24gbShlLHQsbixyKXtlLmR1bXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvKHQpe3JldHVybiBsKGUsdCl9aWYoMD09PXQubGVuZ3RoKXJldHVybiInJyI7aWYoIWUubm9Db21wYXRNb2RlJiYtMSE9PWllLmluZGV4T2YodCkpcmV0dXJuIiciK3QrIiciO3ZhciBzPWUuaW5kZW50Kk1hdGgubWF4KDEsbiksYT0tMT09PWUubGluZVdpZHRoPy0xOk1hdGgubWF4KE1hdGgubWluKGUubGluZVdpZHRoLDQwKSxlLmxpbmVXaWR0aC1zKSx1PXJ8fGUuZmxvd0xldmVsPi0xJiZuPj1lLmZsb3dMZXZlbDtzd2l0Y2goZih0LHUsZS5pbmRlbnQsYSxvKSl7Y2FzZSBhZTpyZXR1cm4gdDtjYXNlIGxlOnJldHVybiInIit0LnJlcGxhY2UoLycvZywiJyciKSsiJyI7Y2FzZSB1ZTpyZXR1cm4ifCIraCh0LGUuaW5kZW50KStnKGkodCxzKSk7Y2FzZSBjZTpyZXR1cm4iPiIraCh0LGUuaW5kZW50KStnKGkoYih0LGEpLHMpKTtjYXNlIGRlOnJldHVybiciJyt5KHQpKyciJztkZWZhdWx0OnRocm93IG5ldyB3KCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpfX0oKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cChlKT9TdHJpbmcodCk6IiIscj0iXG4iPT09ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbisoIXJ8fCJcbiIhPT1lW2UubGVuZ3RoLTJdJiYiXG4iIT09ZT9yPyIiOiItIjoiKyIpKyJcbiJ9ZnVuY3Rpb24gZyhlKXtyZXR1cm4iXG4iPT09ZVtlLmxlbmd0aC0xXT9lLnNsaWNlKDAsLTEpOmV9ZnVuY3Rpb24gYihlLHQpe2Zvcih2YXIgbixyLG89LyhcbispKFteXG5dKikvZyxzPWZ1bmN0aW9uKCl7dmFyIG49ZS5pbmRleE9mKCJcbiIpO3JldHVybiBuPS0xIT09bj9uOmUubGVuZ3RoLG8ubGFzdEluZGV4PW4sRShlLnNsaWNlKDAsbiksdCl9KCksaT0iXG4iPT09ZVswXXx8IiAiPT09ZVswXTtyPW8uZXhlYyhlKTspe3ZhciBhPXJbMV0sbD1yWzJdO249IiAiPT09bFswXSxzKz1hKyhpfHxufHwiIj09PWw/IiI6IlxuIikrRShsLHQpLGk9bn1yZXR1cm4gc31mdW5jdGlvbiBFKGUsdCl7aWYoIiI9PT1lfHwiICI9PT1lWzBdKXJldHVybiBlO2Zvcih2YXIgbixyLG89LyBbXiBdL2cscz0wLGk9MCxhPTAsbD0iIjtuPW8uZXhlYyhlKTspYT1uLmluZGV4LGEtcz50JiYocj1pPnM/aTphLGwrPSJcbiIrZS5zbGljZShzLHIpLHM9cisxKSxpPWE7cmV0dXJuIGwrPSJcbiIsZS5sZW5ndGgtcz50JiZpPnM/bCs9ZS5zbGljZShzLGkpKyJcbiIrZS5zbGljZShpKzEpOmwrPWUuc2xpY2UocyksbC5zbGljZSgxKX1mdW5jdGlvbiB5KGUpe2Zvcih2YXIgdCxuLHIscz0iIixpPTA7aTxlLmxlbmd0aDtpKyspdD1lLmNoYXJDb2RlQXQoaSksdD49NTUyOTYmJnQ8PTU2MzE5JiYobj1lLmNoYXJDb2RlQXQoaSsxKSk+PTU2MzIwJiZuPD01NzM0Mz8ocys9bygxMDI0Kih0LTU1Mjk2KStuLTU2MzIwKzY1NTM2KSxpKyspOihyPXNlW3RdLHMrPSFyJiZjKHQpP2VbaV06cnx8byh0KSk7cmV0dXJuIHN9ZnVuY3Rpb24gdihlLHQsbil7dmFyIHIsbyxzPSIiLGk9ZS50YWc7Zm9yKHI9MCxvPW4ubGVuZ3RoO3I8bztyKz0xKVMoZSx0LG5bcl0sITEsITEpJiYoMCE9PXImJihzKz0iLCIrKGUuY29uZGVuc2VGbG93PyIiOiIgIikpLHMrPWUuZHVtcCk7ZS50YWc9aSxlLmR1bXA9IlsiK3MrIl0ifWZ1bmN0aW9uIFQoZSx0LG4scil7dmFyIG8scyxpPSIiLGw9ZS50YWc7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKz0xKVMoZSx0KzEsbltvXSwhMCwhMCkmJihyJiYwPT09b3x8KGkrPWEoZSx0KSksZS5kdW1wJiZIPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/aSs9Ii0iOmkrPSItICIsaSs9ZS5kdW1wKTtlLnRhZz1sLGUuZHVtcD1pfHwiW10ifWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByLG8scyxpLGEsbD0iIix1PWUudGFnLGM9T2JqZWN0LmtleXMobik7Zm9yKHI9MCxvPWMubGVuZ3RoO3I8bztyKz0xKWE9ZS5jb25kZW5zZUZsb3c/JyInOiIiLDAhPT1yJiYoYSs9IiwgIikscz1jW3JdLGk9bltzXSxTKGUsdCxzLCExLCExKSYmKGUuZHVtcC5sZW5ndGg+MTAyNCYmKGErPSI/ICIpLGErPWUuZHVtcCsoZS5jb25kZW5zZUZsb3c/JyInOiIiKSsiOiIrKGUuY29uZGVuc2VGbG93PyIiOiIgIiksUyhlLHQsaSwhMSwhMSkmJihhKz1lLmR1bXAsbCs9YSkpO2UudGFnPXUsZS5kdW1wPSJ7IitsKyJ9In1mdW5jdGlvbiBDKGUsdCxuLHIpe3ZhciBvLHMsaSxsLHUsYyxkPSIiLF89ZS50YWcscD1PYmplY3Qua2V5cyhuKTtpZighMD09PWUuc29ydEtleXMpcC5zb3J0KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5zb3J0S2V5cylwLnNvcnQoZS5zb3J0S2V5cyk7ZWxzZSBpZihlLnNvcnRLZXlzKXRocm93IG5ldyB3KCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKG89MCxzPXAubGVuZ3RoO288cztvKz0xKWM9IiIsciYmMD09PW98fChjKz1hKGUsdCkpLGk9cFtvXSxsPW5baV0sUyhlLHQrMSxpLCEwLCEwLCEwKSYmKHU9bnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZ3x8ZS5kdW1wJiZlLmR1bXAubGVuZ3RoPjEwMjQsdSYmKGUuZHVtcCYmSD09PWUuZHVtcC5jaGFyQ29kZUF0KDApP2MrPSI/IjpjKz0iPyAiKSxjKz1lLmR1bXAsdSYmKGMrPWEoZSx0KSksUyhlLHQrMSxsLCEwLHUpJiYoZS5kdW1wJiZIPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/Yys9IjoiOmMrPSI6ICIsYys9ZS5kdW1wLGQrPWMpKTtlLnRhZz1fLGUuZHVtcD1kfHwie30ifWZ1bmN0aW9uIE8oZSx0LG4pe3ZhciByLG8scyxpLGEsbDtmb3Iobz1uP2UuZXhwbGljaXRUeXBlczplLmltcGxpY2l0VHlwZXMscz0wLGk9by5sZW5ndGg7czxpO3MrPTEpaWYoYT1vW3NdLChhLmluc3RhbmNlT2Z8fGEucHJlZGljYXRlKSYmKCFhLmluc3RhbmNlT2Z8fCJvYmplY3QiPT10eXBlb2YgdCYmdCBpbnN0YW5jZW9mIGEuaW5zdGFuY2VPZikmJighYS5wcmVkaWNhdGV8fGEucHJlZGljYXRlKHQpKSl7aWYoZS50YWc9bj9hLnRhZzoiPyIsYS5yZXByZXNlbnQpe2lmKGw9ZS5zdHlsZU1hcFthLnRhZ118fGEuZGVmYXVsdFN0eWxlLCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1JLmNhbGwoYS5yZXByZXNlbnQpKXI9YS5yZXByZXNlbnQodCxsKTtlbHNle2lmKCFQLmNhbGwoYS5yZXByZXNlbnQsbCkpdGhyb3cgbmV3IHcoIiE8IithLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrbCsnIiBzdHlsZScpO3I9YS5yZXByZXNlbnRbbF0odCxsKX1lLmR1bXA9cn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTKGUsdCxuLHIsbyxzKXtlLnRhZz1udWxsLGUuZHVtcD1uLE8oZSxuLCExKXx8TyhlLG4sITApO3ZhciBpPUkuY2FsbChlLmR1bXApO3ImJihyPWUuZmxvd0xldmVsPDB8fGUuZmxvd0xldmVsPnQpO3ZhciBhLGwsdT0iW29iamVjdCBPYmplY3RdIj09PWl8fCJbb2JqZWN0IEFycmF5XSI9PT1pO2lmKHUmJihhPWUuZHVwbGljYXRlcy5pbmRleE9mKG4pLGw9LTEhPT1hKSwobnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZ3x8bHx8MiE9PWUuaW5kZW50JiZ0PjApJiYobz0hMSksbCYmZS51c2VkRHVwbGljYXRlc1thXSllLmR1bXA9IipyZWZfIithO2Vsc2V7aWYodSYmbCYmIWUudXNlZER1cGxpY2F0ZXNbYV0mJihlLnVzZWREdXBsaWNhdGVzW2FdPSEwKSwiW29iamVjdCBPYmplY3RdIj09PWkpciYmMCE9PU9iamVjdC5rZXlzKGUuZHVtcCkubGVuZ3RoPyhDKGUsdCxlLmR1bXAsbyksbCYmKGUuZHVtcD0iJnJlZl8iK2ErZS5kdW1wKSk6KEEoZSx0LGUuZHVtcCksbCYmKGUuZHVtcD0iJnJlZl8iK2ErIiAiK2UuZHVtcCkpO2Vsc2UgaWYoIltvYmplY3QgQXJyYXldIj09PWkpe3ZhciBjPWUubm9BcnJheUluZGVudCYmdD4wP3QtMTp0O3ImJjAhPT1lLmR1bXAubGVuZ3RoPyhUKGUsYyxlLmR1bXAsbyksbCYmKGUuZHVtcD0iJnJlZl8iK2ErZS5kdW1wKSk6KHYoZSxjLGUuZHVtcCksbCYmKGUuZHVtcD0iJnJlZl8iK2ErIiAiK2UuZHVtcCkpfWVsc2V7aWYoIltvYmplY3QgU3RyaW5nXSIhPT1pKXtpZihlLnNraXBJbnZhbGlkKXJldHVybiExO3Rocm93IG5ldyB3KCJ1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAiK2kpfSI/IiE9PWUudGFnJiZtKGUsZS5kdW1wLHQscyl9bnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZyYmKGUuZHVtcD0iITwiK2UudGFnKyI+ICIrZS5kdW1wKX1yZXR1cm4hMH1mdW5jdGlvbiBSKGUsdCl7dmFyIG4scixvPVtdLHM9W107Zm9yKGooZSxvLHMpLG49MCxyPXMubGVuZ3RoO248cjtuKz0xKXQuZHVwbGljYXRlcy5wdXNoKG9bc1tuXV0pO3QudXNlZER1cGxpY2F0ZXM9bmV3IEFycmF5KHIpfWZ1bmN0aW9uIGooZSx0LG4pe3ZhciByLG8scztpZihudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKWlmKC0xIT09KG89dC5pbmRleE9mKGUpKSktMT09PW4uaW5kZXhPZihvKSYmbi5wdXNoKG8pO2Vsc2UgaWYodC5wdXNoKGUpLEFycmF5LmlzQXJyYXkoZSkpZm9yKG89MCxzPWUubGVuZ3RoO288cztvKz0xKWooZVtvXSx0LG4pO2Vsc2UgZm9yKHI9T2JqZWN0LmtleXMoZSksbz0wLHM9ci5sZW5ndGg7bzxzO28rPTEpaihlW3Jbb11dLHQsbil9ZnVuY3Rpb24geChlLHQpe3Q9dHx8e307dmFyIG49bmV3IHModCk7cmV0dXJuIG4ubm9SZWZzfHxSKGUsbiksUyhuLDAsZSwhMCwhMCk/bi5kdW1wKyJcbiI6IiJ9ZnVuY3Rpb24gTChlLHQpe3JldHVybiB4KGUsRC5leHRlbmQoe3NjaGVtYTprfSx0KSl9dmFyIEQ9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIpLEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxQPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTj05LEg9MTAsRj0zMixCPTMzLFU9MzQsRz0zNSx6PTM3LFY9MzgsVz0zOSxZPTQyLHE9NDQsSz00NSxYPTU4LCQ9NjIsUT02MyxKPTY0LFo9OTEsZWU9OTMsdGU9OTYsbmU9MTIzLHJlPTEyNCxvZT0xMjUsc2U9e307c2VbMF09IlxcMCIsc2VbN109IlxcYSIsc2VbOF09IlxcYiIsc2VbOV09IlxcdCIsc2VbMTBdPSJcXG4iLHNlWzExXT0iXFx2IixzZVsxMl09IlxcZiIsc2VbMTNdPSJcXHIiLHNlWzI3XT0iXFxlIixzZVszNF09J1xcIicsc2VbOTJdPSJcXFxcIixzZVsxMzNdPSJcXE4iLHNlWzE2MF09IlxcXyIsc2VbODIzMl09IlxcTCIsc2VbODIzM109IlxcUCI7dmFyIGllPVsieSIsIlkiLCJ5ZXMiLCJZZXMiLCJZRVMiLCJvbiIsIk9uIiwiT04iLCJuIiwiTiIsIm5vIiwiTm8iLCJOTyIsIm9mZiIsIk9mZiIsIk9GRiJdLGFlPTEsbGU9Mix1ZT0zLGNlPTQsZGU9NTtlLmV4cG9ydHMuZHVtcD14LGUuZXhwb3J0cy5zYWZlRHVtcD1MfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1lLHRoaXMubWFyaz10LHRoaXMubWVzc2FnZT0odGhpcy5yZWFzb258fCIodW5rbm93biByZWFzb24pIikrKHRoaXMubWFyaz8iICIrdGhpcy5tYXJrLnRvU3RyaW5nKCk6IiIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja3x8IiJ9ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uYW1lKyI6ICI7cmV0dXJuIHQrPXRoaXMucmVhc29ufHwiKHVua25vd24gcmVhc29uKSIsIWUmJnRoaXMubWFyayYmKHQrPSIgIit0aGlzLm1hcmsudG9TdHJpbmcoKSksdH0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2xvYWRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZX1mdW5jdGlvbiBvKGUpe3JldHVybiA5PT09ZXx8MzI9PT1lfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDk9PT1lfHwzMj09PWV8fDEwPT09ZXx8MTM9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIDQ0PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV9ZnVuY3Rpb24gYShlKXt2YXIgdDtyZXR1cm4gNDg8PWUmJmU8PTU3P2UtNDg6KHQ9MzJ8ZSw5Nzw9dCYmdDw9MTAyP3QtOTcrMTA6LTEpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDEyMD09PWU/MjoxMTc9PT1lPzQ6ODU9PT1lPzg6MH1mdW5jdGlvbiB1KGUpe3JldHVybiA0ODw9ZSYmZTw9NTc/ZS00ODotMX1mdW5jdGlvbiBjKGUpe3JldHVybiA0OD09PWU/IlwwIjo5Nz09PWU/IgciOjk4PT09ZT8iXGIiOjExNj09PWU/Ilx0Ijo5PT09ZT8iXHQiOjExMD09PWU/IlxuIjoxMTg9PT1lPyJcdiI6MTAyPT09ZT8iXGYiOjExND09PWU/IlxyIjoxMDE9PT1lPyIbIjozMj09PWU/IiAiOjM0PT09ZT8nIic6NDc9PT1lPyIvIjo5Mj09PWU/IlxcIjo3OD09PWU/IsKFIjo5NT09PWU/IsKgIjo3Nj09PWU/Ilx1MjAyOCI6ODA9PT1lPyJcdTIwMjkiOiIifWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGU8PTY1NTM1P1N0cmluZy5mcm9tQ2hhckNvZGUoZSk6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZS02NTUzNj4+MTApLDU2MzIwKyhlLTY1NTM2JjEwMjMpKX1mdW5jdGlvbiBfKGUsdCl7dGhpcy5pbnB1dD1lLHRoaXMuZmlsZW5hbWU9dC5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT10LnNjaGVtYXx8Vix0aGlzLm9uV2FybmluZz10Lm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT10LmxlZ2FjeXx8ITEsdGhpcy5qc29uPXQuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj10Lmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gcChlLHQpe3JldHVybiBuZXcgVSh0LG5ldyBHKGUuZmlsZW5hbWUsZS5pbnB1dCxlLnBvc2l0aW9uLGUubGluZSxlLnBvc2l0aW9uLWUubGluZVN0YXJ0KSl9ZnVuY3Rpb24gZihlLHQpe3Rocm93IHAoZSx0KX1mdW5jdGlvbiBtKGUsdCl7ZS5vbldhcm5pbmcmJmUub25XYXJuaW5nLmNhbGwobnVsbCxwKGUsdCkpfWZ1bmN0aW9uIGgoZSx0LG4scil7dmFyIG8scyxpLGE7aWYodDxuKXtpZihhPWUuaW5wdXQuc2xpY2UodCxuKSxyKWZvcihvPTAscz1hLmxlbmd0aDtvPHM7bys9MSk5PT09KGk9YS5jaGFyQ29kZUF0KG8pKXx8MzI8PWkmJmk8PTExMTQxMTF8fGYoZSwiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTtlbHNlIFoudGVzdChhKSYmZihlLCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpO2UucmVzdWx0Kz1hfX1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBvLHMsaSxhO2ZvcihCLmlzT2JqZWN0KG4pfHxmKGUsImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIiksbz1PYmplY3Qua2V5cyhuKSxpPTAsYT1vLmxlbmd0aDtpPGE7aSs9MSlzPW9baV0sVy5jYWxsKHQscyl8fCh0W3NdPW5bc10scltzXT0hMCl9ZnVuY3Rpb24gYihlLHQsbixyLG8scyxpLGEpe3ZhciBsLHU7aWYobz1TdHJpbmcobyksbnVsbD09PXQmJih0PXt9KSwidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiPT09cilpZihBcnJheS5pc0FycmF5KHMpKWZvcihsPTAsdT1zLmxlbmd0aDtsPHU7bCs9MSlnKGUsdCxzW2xdLG4pO2Vsc2UgZyhlLHQscyxuKTtlbHNlIGUuanNvbnx8Vy5jYWxsKG4sbyl8fCFXLmNhbGwodCxvKXx8KGUubGluZT1pfHxlLmxpbmUsZS5wb3NpdGlvbj1hfHxlLnBvc2l0aW9uLGYoZSwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSx0W29dPXMsZGVsZXRlIG5bb107cmV0dXJuIHR9ZnVuY3Rpb24gRShlKXt2YXIgdDt0PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwxMD09PXQ/ZS5wb3NpdGlvbisrOjEzPT09dD8oZS5wb3NpdGlvbisrLDEwPT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pJiZlLnBvc2l0aW9uKyspOmYoZSwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksZS5saW5lKz0xLGUubGluZVN0YXJ0PWUucG9zaXRpb259ZnVuY3Rpb24geShlLHQsbil7Zm9yKHZhciBzPTAsaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7MCE9PWk7KXtmb3IoO28oaSk7KWk9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYodCYmMzU9PT1pKWRve2k9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9d2hpbGUoMTAhPT1pJiYxMyE9PWkmJjAhPT1pKTtpZighcihpKSlicmVhaztmb3IoRShlKSxpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSxzKyssZS5saW5lSW5kZW50PTA7MzI9PT1pOyllLmxpbmVJbmRlbnQrKyxpPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXJldHVybi0xIT09biYmMCE9PXMmJmUubGluZUluZGVudDxuJiZtKGUsImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHN9ZnVuY3Rpb24gdihlKXt2YXIgdCxuPWUucG9zaXRpb247cmV0dXJuISg0NSE9PSh0PWUuaW5wdXQuY2hhckNvZGVBdChuKSkmJjQ2IT09dHx8dCE9PWUuaW5wdXQuY2hhckNvZGVBdChuKzEpfHx0IT09ZS5pbnB1dC5jaGFyQ29kZUF0KG4rMil8fChuKz0zLDAhPT0odD1lLmlucHV0LmNoYXJDb2RlQXQobikpJiYhcyh0KSkpfWZ1bmN0aW9uIFQoZSx0KXsxPT09dD9lLnJlc3VsdCs9IiAiOnQ+MSYmKGUucmVzdWx0Kz1CLnJlcGVhdCgiXG4iLHQtMSkpfWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciBhLGwsdSxjLGQsXyxwLGYsbSxnPWUua2luZCxiPWUucmVzdWx0O2lmKG09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLHMobSl8fGkobSl8fDM1PT09bXx8Mzg9PT1tfHw0Mj09PW18fDMzPT09bXx8MTI0PT09bXx8NjI9PT1tfHwzOT09PW18fDM0PT09bXx8Mzc9PT1tfHw2ND09PW18fDk2PT09bSlyZXR1cm4hMTtpZigoNjM9PT1tfHw0NT09PW0pJiYobD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxzKGwpfHxuJiZpKGwpKSlyZXR1cm4hMTtmb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiLHU9Yz1lLnBvc2l0aW9uLGQ9ITE7MCE9PW07KXtpZig1OD09PW0pe2lmKGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSkscyhsKXx8biYmaShsKSlicmVha31lbHNlIGlmKDM1PT09bSl7aWYoYT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbi0xKSxzKGEpKWJyZWFrfWVsc2V7aWYoZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZ2KGUpfHxuJiZpKG0pKWJyZWFrO2lmKHIobSkpe2lmKF89ZS5saW5lLHA9ZS5saW5lU3RhcnQsZj1lLmxpbmVJbmRlbnQseShlLCExLC0xKSxlLmxpbmVJbmRlbnQ+PXQpe2Q9ITAsbT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7Y29udGludWV9ZS5wb3NpdGlvbj1jLGUubGluZT1fLGUubGluZVN0YXJ0PXAsZS5saW5lSW5kZW50PWY7YnJlYWt9fWQmJihoKGUsdSxjLCExKSxUKGUsZS5saW5lLV8pLHU9Yz1lLnBvc2l0aW9uLGQ9ITEpLG8obSl8fChjPWUucG9zaXRpb24rMSksbT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX1yZXR1cm4gaChlLHUsYywhMSksISFlLnJlc3VsdHx8KGUua2luZD1nLGUucmVzdWx0PWIsITEpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgbixvLHM7aWYoMzkhPT0obj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXJldHVybiExO2ZvcihlLmtpbmQ9InNjYWxhciIsZS5yZXN1bHQ9IiIsZS5wb3NpdGlvbisrLG89cz1lLnBvc2l0aW9uOzAhPT0obj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpOylpZigzOT09PW4pe2lmKGgoZSxvLGUucG9zaXRpb24sITApLDM5IT09KG49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpKXJldHVybiEwO289ZS5wb3NpdGlvbixlLnBvc2l0aW9uKysscz1lLnBvc2l0aW9ufWVsc2UgcihuKT8oaChlLG8scywhMCksVChlLHkoZSwhMSx0KSksbz1zPWUucG9zaXRpb24pOmUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmdihlKT9mKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOihlLnBvc2l0aW9uKysscz1lLnBvc2l0aW9uKTtmKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4sbyxzLGksdSxjO2lmKDM0IT09KGM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlyZXR1cm4hMTtmb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiLGUucG9zaXRpb24rKyxuPW89ZS5wb3NpdGlvbjswIT09KGM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKTspe2lmKDM0PT09YylyZXR1cm4gaChlLG4sZS5wb3NpdGlvbiwhMCksZS5wb3NpdGlvbisrLCEwO2lmKDkyPT09Yyl7aWYoaChlLG4sZS5wb3NpdGlvbiwhMCksYz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSxyKGMpKXkoZSwhMSx0KTtlbHNlIGlmKGM8MjU2JiZvZVtjXSllLnJlc3VsdCs9c2VbY10sZS5wb3NpdGlvbisrO2Vsc2UgaWYoKHU9bChjKSk+MCl7Zm9yKHM9dSxpPTA7cz4wO3MtLSljPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLCh1PWEoYykpPj0wP2k9KGk8PDQpK3U6ZihlLCJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTtlLnJlc3VsdCs9ZChpKSxlLnBvc2l0aW9uKyt9ZWxzZSBmKGUsInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7bj1vPWUucG9zaXRpb259ZWxzZSByKGMpPyhoKGUsbixvLCEwKSxUKGUseShlLCExLHQpKSxuPW89ZS5wb3NpdGlvbik6ZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZ2KGUpP2YoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KGUucG9zaXRpb24rKyxvPWUucG9zaXRpb24pfWYoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIFMoZSx0KXt2YXIgbixyLG8saSxhLGwsdSxjLGQsXyxwLG09ITAsaD1lLnRhZyxnPWUuYW5jaG9yLEU9e307aWYoOTE9PT0ocD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKWk9OTMsdT0hMSxyPVtdO2Vsc2V7aWYoMTIzIT09cClyZXR1cm4hMTtpPTEyNSx1PSEwLHI9e319Zm9yKG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1yKSxwPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pOzAhPT1wOyl7aWYoeShlLCEwLHQpLChwPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSk9PT1pKXJldHVybiBlLnBvc2l0aW9uKyssZS50YWc9aCxlLmFuY2hvcj1nLGUua2luZD11PyJtYXBwaW5nIjoic2VxdWVuY2UiLGUucmVzdWx0PXIsITA7bXx8ZihlLCJtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcyIpLGQ9Yz1fPW51bGwsYT1sPSExLDYzPT09cCYmKG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSkscyhvKSYmKGE9bD0hMCxlLnBvc2l0aW9uKysseShlLCEwLHQpKSksbj1lLmxpbmUsTShlLHQsWSwhMSwhMCksZD1lLnRhZyxjPWUucmVzdWx0LHkoZSwhMCx0KSxwPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwhbCYmZS5saW5lIT09bnx8NTghPT1wfHwoYT0hMCxwPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHkoZSwhMCx0KSxNKGUsdCxZLCExLCEwKSxfPWUucmVzdWx0KSx1P2IoZSxyLEUsZCxjLF8pOmE/ci5wdXNoKGIoZSxudWxsLEUsZCxjLF8pKTpyLnB1c2goYykseShlLCEwLHQpLHA9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLDQ0PT09cD8obT0hMCxwPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTptPSExfWYoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiBSKGUsdCl7dmFyIG4scyxpLGEsbD0kLGM9ITEsZD0hMSxfPXQscD0wLG09ITE7aWYoMTI0PT09KGE9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlzPSExO2Vsc2V7aWYoNjIhPT1hKXJldHVybiExO3M9ITB9Zm9yKGUua2luZD0ic2NhbGFyIixlLnJlc3VsdD0iIjswIT09YTspaWYoNDM9PT0oYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSl8fDQ1PT09YSkkPT09bD9sPTQzPT09YT9KOlE6ZihlLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNle2lmKCEoKGk9dShhKSk+PTApKWJyZWFrOzA9PT1pP2YoZSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmQ/ZihlLCJyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllciIpOihfPXQraS0xLGQ9ITApfWlmKG8oYSkpe2Rve2E9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9d2hpbGUobyhhKSk7aWYoMzU9PT1hKWRve2E9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9d2hpbGUoIXIoYSkmJjAhPT1hKX1mb3IoOzAhPT1hOyl7Zm9yKEUoZSksZS5saW5lSW5kZW50PTAsYT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7KCFkfHxlLmxpbmVJbmRlbnQ8XykmJjMyPT09YTspZS5saW5lSW5kZW50KyssYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZighZCYmZS5saW5lSW5kZW50Pl8mJihfPWUubGluZUluZGVudCkscihhKSlwKys7ZWxzZXtpZihlLmxpbmVJbmRlbnQ8Xyl7bD09PUo/ZS5yZXN1bHQrPUIucmVwZWF0KCJcbiIsYz8xK3A6cCk6bD09PSQmJmMmJihlLnJlc3VsdCs9IlxuIik7YnJlYWt9Zm9yKHM/byhhKT8obT0hMCxlLnJlc3VsdCs9Qi5yZXBlYXQoIlxuIixjPzErcDpwKSk6bT8obT0hMSxlLnJlc3VsdCs9Qi5yZXBlYXQoIlxuIixwKzEpKTowPT09cD9jJiYoZS5yZXN1bHQrPSIgIik6ZS5yZXN1bHQrPUIucmVwZWF0KCJcbiIscCk6ZS5yZXN1bHQrPUIucmVwZWF0KCJcbiIsYz8xK3A6cCksYz0hMCxkPSEwLHA9MCxuPWUucG9zaXRpb247IXIoYSkmJjAhPT1hOylhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2goZSxuLGUucG9zaXRpb24sITEpfX1yZXR1cm4hMH1mdW5jdGlvbiBqKGUsdCl7dmFyIG4scixvLGk9ZS50YWcsYT1lLmFuY2hvcixsPVtdLHU9ITE7Zm9yKG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1sKSxvPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTswIT09byYmNDU9PT1vJiYocj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxzKHIpKTspaWYodT0hMCxlLnBvc2l0aW9uKysseShlLCEwLC0xKSYmZS5saW5lSW5kZW50PD10KWwucHVzaChudWxsKSxvPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtlbHNlIGlmKG49ZS5saW5lLE0oZSx0LEssITEsITApLGwucHVzaChlLnJlc3VsdCkseShlLCEwLC0xKSxvPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwoZS5saW5lPT09bnx8ZS5saW5lSW5kZW50PnQpJiYwIT09bylmKGUsImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZihlLmxpbmVJbmRlbnQ8dClicmVhaztyZXR1cm4hIXUmJihlLnRhZz1pLGUuYW5jaG9yPWEsZS5raW5kPSJzZXF1ZW5jZSIsZS5yZXN1bHQ9bCwhMCl9ZnVuY3Rpb24geChlLHQsbil7dmFyIHIsaSxhLGwsdSxjPWUudGFnLGQ9ZS5hbmNob3IsXz17fSxwPXt9LG09bnVsbCxoPW51bGwsZz1udWxsLEU9ITEsdj0hMTtmb3IobnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPV8pLHU9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOzAhPT11Oyl7aWYocj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxhPWUubGluZSxsPWUucG9zaXRpb24sNjMhPT11JiY1OCE9PXV8fCFzKHIpKXtpZighTShlLG4scSwhMSwhMCkpYnJlYWs7aWYoZS5saW5lPT09YSl7Zm9yKHU9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO28odSk7KXU9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYoNTg9PT11KXU9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikscyh1KXx8ZihlLCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxFJiYoYihlLF8scCxtLGgsbnVsbCksbT1oPWc9bnVsbCksdj0hMCxFPSExLGk9ITEsbT1lLnRhZyxoPWUucmVzdWx0O2Vsc2V7aWYoIXYpcmV0dXJuIGUudGFnPWMsZS5hbmNob3I9ZCwhMDtmKGUsImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIil9fWVsc2V7aWYoIXYpcmV0dXJuIGUudGFnPWMsZS5hbmNob3I9ZCwhMDtmKGUsImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleSIpfX1lbHNlIDYzPT09dT8oRSYmKGIoZSxfLHAsbSxoLG51bGwpLG09aD1nPW51bGwpLHY9ITAsRT0hMCxpPSEwKTpFPyhFPSExLGk9ITApOmYoZSwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLGUucG9zaXRpb24rPTEsdT1yO2lmKChlLmxpbmU9PT1hfHxlLmxpbmVJbmRlbnQ+dCkmJihNKGUsdCxYLCEwLGkpJiYoRT9oPWUucmVzdWx0Omc9ZS5yZXN1bHQpLEV8fChiKGUsXyxwLG0saCxnLGEsbCksbT1oPWc9bnVsbCkseShlLCEwLC0xKSx1PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSksZS5saW5lSW5kZW50PnQmJjAhPT11KWYoZSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoZS5saW5lSW5kZW50PHQpYnJlYWt9cmV0dXJuIEUmJmIoZSxfLHAsbSxoLG51bGwpLHYmJihlLnRhZz1jLGUuYW5jaG9yPWQsZS5raW5kPSJtYXBwaW5nIixlLnJlc3VsdD1fKSx2fWZ1bmN0aW9uIEwoZSl7dmFyIHQsbixyLG8saT0hMSxhPSExO2lmKDMzIT09KG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlyZXR1cm4hMTtpZihudWxsIT09ZS50YWcmJmYoZSwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxvPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLDYwPT09bz8oaT0hMCxvPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTozMz09PW8/KGE9ITAsbj0iISEiLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpOm49IiEiLHQ9ZS5wb3NpdGlvbixpKXtkb3tvPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXdoaWxlKDAhPT1vJiY2MiE9PW8pO2UucG9zaXRpb248ZS5sZW5ndGg/KHI9ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpOmYoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7MCE9PW8mJiFzKG8pOykzMz09PW8mJihhP2YoZSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOihuPWUuaW5wdXQuc2xpY2UodC0xLGUucG9zaXRpb24rMSksbmUudGVzdChuKXx8ZihlLCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLGE9ITAsdD1lLnBvc2l0aW9uKzEpKSxvPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3I9ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLHRlLnRlc3QocikmJmYoZSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9cmV0dXJuIHImJiFyZS50ZXN0KHIpJiZmKGUsInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIityKSxpP2UudGFnPXI6Vy5jYWxsKGUudGFnTWFwLG4pP2UudGFnPWUudGFnTWFwW25dK3I6IiEiPT09bj9lLnRhZz0iISIrcjoiISEiPT09bj9lLnRhZz0idGFnOnlhbWwub3JnLDIwMDI6IityOmYoZSwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK24rJyInKSwhMH1mdW5jdGlvbiBEKGUpe3ZhciB0LG47aWYoMzghPT0obj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXJldHVybiExO2ZvcihudWxsIT09ZS5hbmNob3ImJmYoZSwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iiksbj1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSx0PWUucG9zaXRpb247MCE9PW4mJiFzKG4pJiYhaShuKTspbj1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtyZXR1cm4gZS5wb3NpdGlvbj09PXQmJmYoZSwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGUuYW5jaG9yPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSwhMH1mdW5jdGlvbiB3KGUpe3ZhciB0LG4scjtpZig0MiE9PShyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpcmV0dXJuITE7Zm9yKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdD1lLnBvc2l0aW9uOzAhPT1yJiYhcyhyKSYmIWkocik7KXI9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cmV0dXJuIGUucG9zaXRpb249PT10JiZmKGUsIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLG49ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLGUuYW5jaG9yTWFwLmhhc093blByb3BlcnR5KG4pfHxmKGUsJ3VuaWRlbnRpZmllZCBhbGlhcyAiJytuKyciJyksZS5yZXN1bHQ9ZS5hbmNob3JNYXBbbl0seShlLCEwLC0xKSwhMH1mdW5jdGlvbiBNKGUsdCxuLHIsbyl7dmFyIHMsaSxhLGwsdSxjLGQsXyxwPTEsbT0hMSxoPSExO2lmKG51bGwhPT1lLmxpc3RlbmVyJiZlLmxpc3RlbmVyKCJvcGVuIixlKSxlLnRhZz1udWxsLGUuYW5jaG9yPW51bGwsZS5raW5kPW51bGwsZS5yZXN1bHQ9bnVsbCxzPWk9YT1YPT09bnx8Sz09PW4sciYmeShlLCEwLC0xKSYmKG09ITAsZS5saW5lSW5kZW50PnQ/cD0xOmUubGluZUluZGVudD09PXQ/cD0wOmUubGluZUluZGVudDx0JiYocD0tMSkpLDE9PT1wKWZvcig7TChlKXx8RChlKTspeShlLCEwLC0xKT8obT0hMCxhPXMsZS5saW5lSW5kZW50PnQ/cD0xOmUubGluZUluZGVudD09PXQ/cD0wOmUubGluZUluZGVudDx0JiYocD0tMSkpOmE9ITE7aWYoYSYmKGE9bXx8byksMSE9PXAmJlghPT1ufHwoZD1ZPT09bnx8cT09PW4/dDp0KzEsXz1lLnBvc2l0aW9uLWUubGluZVN0YXJ0LDE9PT1wP2EmJihqKGUsXyl8fHgoZSxfLGQpKXx8UyhlLGQpP2g9ITA6KGkmJlIoZSxkKXx8QyhlLGQpfHxPKGUsZCk/aD0hMDp3KGUpPyhoPSEwLG51bGw9PT1lLnRhZyYmbnVsbD09PWUuYW5jaG9yfHxmKGUsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOkEoZSxkLFk9PT1uKSYmKGg9ITAsbnVsbD09PWUudGFnJiYoZS50YWc9Ij8iKSksbnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPWUucmVzdWx0KSk6MD09PXAmJihoPWEmJmooZSxfKSkpLG51bGwhPT1lLnRhZyYmIiEiIT09ZS50YWcpaWYoIj8iPT09ZS50YWcpe2ZvcihsPTAsdT1lLmltcGxpY2l0VHlwZXMubGVuZ3RoO2w8dTtsKz0xKWlmKGM9ZS5pbXBsaWNpdFR5cGVzW2xdLGMucmVzb2x2ZShlLnJlc3VsdCkpe2UucmVzdWx0PWMuY29uc3RydWN0KGUucmVzdWx0KSxlLnRhZz1jLnRhZyxudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpO2JyZWFrfX1lbHNlIFcuY2FsbChlLnR5cGVNYXBbZS5raW5kfHwiZmFsbGJhY2siXSxlLnRhZyk/KGM9ZS50eXBlTWFwW2Uua2luZHx8ImZhbGxiYWNrIl1bZS50YWddLG51bGwhPT1lLnJlc3VsdCYmYy5raW5kIT09ZS5raW5kJiZmKGUsInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IitlLnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJytjLmtpbmQrJyIsIG5vdCAiJytlLmtpbmQrJyInKSxjLnJlc29sdmUoZS5yZXN1bHQpPyhlLnJlc3VsdD1jLmNvbnN0cnVjdChlLnJlc3VsdCksbnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPWUucmVzdWx0KSk6ZihlLCJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIrZS50YWcrIj4gZXhwbGljaXQgdGFnIikpOmYoZSwidW5rbm93biB0YWcgITwiK2UudGFnKyI+Iik7cmV0dXJuIG51bGwhPT1lLmxpc3RlbmVyJiZlLmxpc3RlbmVyKCJjbG9zZSIsZSksbnVsbCE9PWUudGFnfHxudWxsIT09ZS5hbmNob3J8fGh9ZnVuY3Rpb24gayhlKXt2YXIgdCxuLGksYSxsPWUucG9zaXRpb24sdT0hMTtmb3IoZS52ZXJzaW9uPW51bGwsZS5jaGVja0xpbmVCcmVha3M9ZS5sZWdhY3ksZS50YWdNYXA9e30sZS5hbmNob3JNYXA9e307MCE9PShhPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkmJih5KGUsITAsLTEpLGE9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLCEoZS5saW5lSW5kZW50PjB8fDM3IT09YSkpOyl7Zm9yKHU9ITAsYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSx0PWUucG9zaXRpb247MCE9PWEmJiFzKGEpOylhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2ZvcihuPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSxpPVtdLG4ubGVuZ3RoPDEmJmYoZSwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7MCE9PWE7KXtmb3IoO28oYSk7KWE9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYoMzU9PT1hKXtkb3thPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXdoaWxlKDAhPT1hJiYhcihhKSk7YnJlYWt9aWYocihhKSlicmVhaztmb3IodD1lLnBvc2l0aW9uOzAhPT1hJiYhcyhhKTspYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpLnB1c2goZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pKX0wIT09YSYmRShlKSxXLmNhbGwoYWUsbik/YWVbbl0oZSxuLGkpOm0oZSwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrbisnIicpfWlmKHkoZSwhMCwtMSksMD09PWUubGluZUluZGVudCYmNDU9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikmJjQ1PT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSkmJjQ1PT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMik/KGUucG9zaXRpb24rPTMseShlLCEwLC0xKSk6dSYmZihlLCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIiksTShlLGUubGluZUluZGVudC0xLFgsITEsITApLHkoZSwhMCwtMSksZS5jaGVja0xpbmVCcmVha3MmJmVlLnRlc3QoZS5pbnB1dC5zbGljZShsLGUucG9zaXRpb24pKSYmbShlLCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQiKSxlLmRvY3VtZW50cy5wdXNoKGUucmVzdWx0KSxlLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJnYoZSkpcmV0dXJuIHZvaWQoNDY9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikmJihlLnBvc2l0aW9uKz0zLHkoZSwhMCwtMSkpKTtlLnBvc2l0aW9uPGUubGVuZ3RoLTEmJmYoZSwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKX1mdW5jdGlvbiBJKGUsdCl7ZT1TdHJpbmcoZSksdD10fHx7fSwwIT09ZS5sZW5ndGgmJigxMCE9PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSYmMTMhPT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkmJihlKz0iXG4iKSw2NTI3OT09PWUuY2hhckNvZGVBdCgwKSYmKGU9ZS5zbGljZSgxKSkpO3ZhciBuPW5ldyBfKGUsdCk7Zm9yKG4uaW5wdXQrPSJcMCI7MzI9PT1uLmlucHV0LmNoYXJDb2RlQXQobi5wb3NpdGlvbik7KW4ubGluZUluZGVudCs9MSxuLnBvc2l0aW9uKz0xO2Zvcig7bi5wb3NpdGlvbjxuLmxlbmd0aC0xOylrKG4pO3JldHVybiBuLmRvY3VtZW50c31mdW5jdGlvbiBQKGUsdCxuKXt2YXIgcixvLHM9SShlLG4pO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiBzO2ZvcihyPTAsbz1zLmxlbmd0aDtyPG87cis9MSl0KHNbcl0pfWZ1bmN0aW9uIE4oZSx0KXt2YXIgbj1JKGUsdCk7aWYoMCE9PW4ubGVuZ3RoKXtpZigxPT09bi5sZW5ndGgpcmV0dXJuIG5bMF07dGhyb3cgbmV3IFUoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fWZ1bmN0aW9uIEgoZSx0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiBQKGUsQi5leHRlbmQoe3NjaGVtYTp6fSxuKSk7UChlLHQsQi5leHRlbmQoe3NjaGVtYTp6fSxuKSl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBOKGUsQi5leHRlbmQoe3NjaGVtYTp6fSx0KSl9Zm9yKHZhciBCPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiksVT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIpLEc9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIiksej1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiKSxWPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIpLFc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxZPTEscT0yLEs9MyxYPTQsJD0xLFE9MixKPTMsWj0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLGVlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLHRlPS9bLFxbXF1ce1x9XS8sbmU9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLHJlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2ksb2U9bmV3IEFycmF5KDI1Niksc2U9bmV3IEFycmF5KDI1NiksaWU9MDtpZTwyNTY7aWUrKylvZVtpZV09YyhpZSk/MTowLHNlW2llXT1jKGllKTt2YXIgYWU9e1lBTUw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scztudWxsIT09ZS52ZXJzaW9uJiZmKGUsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLDEhPT1uLmxlbmd0aCYmZihlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iikscj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoblswXSksbnVsbD09PXImJmYoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxvPXBhcnNlSW50KHJbMV0sMTApLHM9cGFyc2VJbnQoclsyXSwxMCksMSE9PW8mJmYoZSwidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxlLnZlcnNpb249blswXSxlLmNoZWNrTGluZUJyZWFrcz1zPDIsMSE9PXMmJjIhPT1zJiZtKGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvOzIhPT1uLmxlbmd0aCYmZihlLCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzIikscj1uWzBdLG89blsxXSxuZS50ZXN0KHIpfHxmKGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksVy5jYWxsKGUudGFnTWFwLHIpJiZmKGUsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3IrJyIgdGFnIGhhbmRsZScpLHJlLnRlc3Qobyl8fGYoZSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksZS50YWdNYXBbcl09b319O2UuZXhwb3J0cy5sb2FkQWxsPVAsZS5leHBvcnRzLmxvYWQ9TixlLmV4cG9ydHMuc2FmZUxvYWRBbGw9SCxlLmV4cG9ydHMuc2FmZUxvYWQ9Rn0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7dGhpcy5uYW1lPWUsdGhpcy5idWZmZXI9dCx0aGlzLnBvc2l0aW9uPW4sdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49b312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIpO3IucHJvdG90eXBlLmdldFNuaXBwZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLHMsaSxhO2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gbnVsbDtmb3IoZT1lfHw0LHQ9dHx8NzUsbj0iIixyPXRoaXMucG9zaXRpb247cj4wJiYtMT09PSJcMFxyXG7ChVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoci0xKSk7KWlmKHItPTEsdGhpcy5wb3NpdGlvbi1yPnQvMi0xKXtuPSIgLi4uICIscis9NTticmVha31mb3Iocz0iIixpPXRoaXMucG9zaXRpb247aTx0aGlzLmJ1ZmZlci5sZW5ndGgmJi0xPT09IlwwXHJcbsKFXHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChpKSk7KWlmKChpKz0xKS10aGlzLnBvc2l0aW9uPnQvMi0xKXtzPSIgLi4uICIsaS09NTticmVha31yZXR1cm4gYT10aGlzLmJ1ZmZlci5zbGljZShyLGkpLG8ucmVwZWF0KCIgIixlKStuK2ErcysiXG4iK28ucmVwZWF0KCIgIixlK3RoaXMucG9zaXRpb24tcituLmxlbmd0aCkrIl4ifSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdCxuPSIiO3JldHVybiB0aGlzLm5hbWUmJihuKz0naW4gIicrdGhpcy5uYW1lKyciICcpLG4rPSJhdCBsaW5lICIrKHRoaXMubGluZSsxKSsiLCBjb2x1bW4gIisodGhpcy5jb2x1bW4rMSksZXx8KHQ9dGhpcy5nZXRTbmlwcGV0KCkpJiYobis9IjpcbiIrdCksbn0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgbz1bXTtyZXR1cm4gZS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oZSl7bj1yKGUsdCxuKX0pLGVbdF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LnRhZz09PWUudGFnJiZ0LmtpbmQ9PT1lLmtpbmQmJm8ucHVzaChuKX0pLG4ucHVzaChlKX0pLG4uZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT1vLmluZGV4T2YodCl9KX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gZShlKXtyW2Uua2luZF1bZS50YWddPXIuZmFsbGJhY2tbZS50YWddPWV9dmFyIHQsbixyPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fX07Zm9yKHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrPTEpYXJndW1lbnRzW3RdLmZvckVhY2goZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyhlKXt0aGlzLmluY2x1ZGU9ZS5pbmNsdWRlfHxbXSx0aGlzLmltcGxpY2l0PWUuaW1wbGljaXR8fFtdLHRoaXMuZXhwbGljaXQ9ZS5leHBsaWNpdHx8W10sdGhpcy5pbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubG9hZEtpbmQmJiJzY2FsYXIiIT09ZS5sb2FkS2luZCl0aHJvdyBuZXcgYSgiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIil9KSx0aGlzLmNvbXBpbGVkSW1wbGljaXQ9cih0aGlzLCJpbXBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRFeHBsaWNpdD1yKHRoaXMsImV4cGxpY2l0IixbXSksdGhpcy5jb21waWxlZFR5cGVNYXA9byh0aGlzLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5jb21waWxlZEV4cGxpY2l0KX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO3MuREVGQVVMVD1udWxsLHMuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGUsdDtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmU9cy5ERUZBVUxULHQ9YXJndW1lbnRzWzBdO2JyZWFrO2Nhc2UgMjplPWFyZ3VtZW50c1swXSx0PWFyZ3VtZW50c1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uIil9aWYoZT1pLnRvQXJyYXkoZSksdD1pLnRvQXJyYXkodCksIWUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBzfSkpdGhyb3cgbmV3IGEoIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7aWYoIXQuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfSkpdGhyb3cgbmV3IGEoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtyZXR1cm4gbmV3IHMoe2luY2x1ZGU6ZSxleHBsaWNpdDp0fSl9LGUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpO2UuZXhwb3J0cz1uZXcgcih7aW5jbHVkZTpbbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIpXX0pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIik7ZS5leHBvcnRzPXIuREVGQVVMVD1uZXcgcih7aW5jbHVkZTpbbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIildLGV4cGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIpXX0pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIik7ZS5leHBvcnRzPW5ldyByKHtpbmNsdWRlOltuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIildLGltcGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzIildLGV4cGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvcGFpcnMuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzIildfSl9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpO2UuZXhwb3J0cz1uZXcgcih7ZXhwbGljaXQ6W24oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zdHIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyIpXX0pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpO2UuZXhwb3J0cz1uZXcgcih7aW5jbHVkZTpbbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMiKV0saW1wbGljaXQ6W24oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Jvb2wuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Zsb2F0LmpzIildfSl9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17fTtyZXR1cm4gbnVsbCE9PWUmJk9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7ZVtuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbU3RyaW5nKGUpXT1ufSl9KSx0fWZ1bmN0aW9uIG8oZSx0KXtpZih0PXR8fHt9LE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoLTE9PT1pLmluZGV4T2YodCkpdGhyb3cgbmV3IHMoJ1Vua25vd24gb3B0aW9uICInK3QrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicrZSsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLnRhZz1lLHRoaXMua2luZD10LmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPXQucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9dC5jb25zdHJ1Y3R8fGZ1bmN0aW9uKGUpe3JldHVybiBlfSx0aGlzLmluc3RhbmNlT2Y9dC5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPXQucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PXQucmVwcmVzZW50fHxudWxsLHRoaXMuZGVmYXVsdFN0eWxlPXQuZGVmYXVsdFN0eWxlfHxudWxsLHRoaXMuc3R5bGVBbGlhc2VzPXIodC5zdHlsZUFsaWFzZXN8fG51bGwpLC0xPT09YS5pbmRleE9mKHRoaXMua2luZCkpdGhyb3cgbmV3IHMoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJytlKyciIFlBTUwgdHlwZS4nKX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIpLGk9WyJraW5kIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxhPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQsbixyPTAsbz1lLmxlbmd0aCxzPXU7Zm9yKG49MDtuPG87bisrKWlmKCEoKHQ9cy5pbmRleE9mKGUuY2hhckF0KG4pKSk+NjQpKXtpZih0PDApcmV0dXJuITE7cis9Nn1yZXR1cm4gciU4PT0wfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyPWUucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxvPXIubGVuZ3RoLHM9dSxpPTAsbD1bXTtmb3IodD0wO3Q8bzt0KyspdCU0PT0wJiZ0JiYobC5wdXNoKGk+PjE2JjI1NSksbC5wdXNoKGk+PjgmMjU1KSxsLnB1c2goMjU1JmkpKSxpPWk8PDZ8cy5pbmRleE9mKHIuY2hhckF0KHQpKTtyZXR1cm4gbj1vJTQqNiwwPT09bj8obC5wdXNoKGk+PjE2JjI1NSksbC5wdXNoKGk+PjgmMjU1KSxsLnB1c2goMjU1JmkpKToxOD09PW4/KGwucHVzaChpPj4xMCYyNTUpLGwucHVzaChpPj4yJjI1NSkpOjEyPT09biYmbC5wdXNoKGk+PjQmMjU1KSxhP2EuZnJvbT9hLmZyb20obCk6bmV3IGEobCk6bH1mdW5jdGlvbiBzKGUpe3ZhciB0LG4scj0iIixvPTAscz1lLmxlbmd0aCxpPXU7Zm9yKHQ9MDt0PHM7dCsrKXQlMz09MCYmdCYmKHIrPWlbbz4+MTgmNjNdLHIrPWlbbz4+MTImNjNdLHIrPWlbbz4+NiY2M10scis9aVs2MyZvXSksbz0obzw8OCkrZVt0XTtyZXR1cm4gbj1zJTMsMD09PW4/KHIrPWlbbz4+MTgmNjNdLHIrPWlbbz4+MTImNjNdLHIrPWlbbz4+NiY2M10scis9aVs2MyZvXSk6Mj09PW4/KHIrPWlbbz4+MTAmNjNdLHIrPWlbbz4+NCY2M10scis9aVtvPDwyJjYzXSxyKz1pWzY0XSk6MT09PW4mJihyKz1pW28+PjImNjNdLHIrPWlbbzw8NCY2M10scis9aVs2NF0scis9aVs2NF0pLHJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gYSYmYS5pc0J1ZmZlcihlKX12YXIgYTt0cnl7YT1uKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyfWNhdGNoKGUpe312YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKSx1PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxuXHIiO2UuZXhwb3J0cz1uZXcgbCgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOmkscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIDQ9PT10JiYoInRydWUiPT09ZXx8IlRydWUiPT09ZXx8IlRSVUUiPT09ZSl8fDU9PT10JiYoImZhbHNlIj09PWV8fCJGYWxzZSI9PT1lfHwiRkFMU0UiPT09ZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4idHJ1ZSI9PT1lfHwiVHJ1ZSI9PT1lfHwiVFJVRSI9PT1lfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIltvYmplY3QgQm9vbGVhbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgaSgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvLHByZWRpY2F0ZTpzLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Zsb2F0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPT1lJiYhKCF1LnRlc3QoZSl8fCJfIj09PWVbZS5sZW5ndGgtMV0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyLG87cmV0dXJuIHQ9ZS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksbj0iLSI9PT10WzBdPy0xOjEsbz1bXSwiKy0iLmluZGV4T2YodFswXSk+PTAmJih0PXQuc2xpY2UoMSkpLCIuaW5mIj09PXQ/MT09PW4/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWToiLm5hbiI9PT10P05hTjp0LmluZGV4T2YoIjoiKT49MD8odC5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24oZSl7by51bnNoaWZ0KHBhcnNlRmxvYXQoZSwxMCkpfSksdD0wLHI9MSxvLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9ZSpyLHIqPTYwfSksbip0KTpuKnBhcnNlRmxvYXQodCwxMCl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuO2lmKGlzTmFOKGUpKXN3aXRjaCh0KXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWUpc3dpdGNoKHQpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09ZSlzd2l0Y2godCl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihhLmlzTmVnYXRpdmVaZXJvKGUpKXJldHVybiItMC4wIjtyZXR1cm4gbj1lLnRvU3RyaW5nKDEwKSxjLnRlc3Qobik/bi5yZXBsYWNlKCJlIiwiLmUiKTpufWZ1bmN0aW9uIGkoZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkmJihlJTEhPTB8fGEuaXNOZWdhdGl2ZVplcm8oZSkpfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKSx1PW5ldyBSZWdFeHAoIl4oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFwuWzAtOV9dKnxbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpLGM9L15bLStdP1swLTldK2UvO2UuZXhwb3J0cz1uZXcgbCgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxwcmVkaWNhdGU6aSxyZXByZXNlbnQ6cyxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9pbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fHw2NTw9ZSYmZTw9NzB8fDk3PD1lJiZlPD0xMDJ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gNDg8PWUmJmU8PTU1fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDQ4PD1lJiZlPD01N31mdW5jdGlvbiBpKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3ZhciB0LG49ZS5sZW5ndGgsaT0wLGE9ITE7aWYoIW4pcmV0dXJuITE7aWYodD1lW2ldLCItIiE9PXQmJiIrIiE9PXR8fCh0PWVbKytpXSksIjAiPT09dCl7aWYoaSsxPT09bilyZXR1cm4hMDtpZigiYiI9PT0odD1lWysraV0pKXtmb3IoaSsrO2k8bjtpKyspaWYoIl8iIT09KHQ9ZVtpXSkpe2lmKCIwIiE9PXQmJiIxIiE9PXQpcmV0dXJuITE7YT0hMH1yZXR1cm4gYSYmIl8iIT09dH1pZigieCI9PT10KXtmb3IoaSsrO2k8bjtpKyspaWYoIl8iIT09KHQ9ZVtpXSkpe2lmKCFyKGUuY2hhckNvZGVBdChpKSkpcmV0dXJuITE7YT0hMH1yZXR1cm4gYSYmIl8iIT09dH1mb3IoO2k8bjtpKyspaWYoIl8iIT09KHQ9ZVtpXSkpe2lmKCFvKGUuY2hhckNvZGVBdChpKSkpcmV0dXJuITE7YT0hMH1yZXR1cm4gYSYmIl8iIT09dH1pZigiXyI9PT10KXJldHVybiExO2Zvcig7aTxuO2krKylpZigiXyIhPT0odD1lW2ldKSl7aWYoIjoiPT09dClicmVhaztpZighcyhlLmNoYXJDb2RlQXQoaSkpKXJldHVybiExO2E9ITB9cmV0dXJuISghYXx8Il8iPT09dCkmJigiOiIhPT10fHwvXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QoZS5zbGljZShpKSkpfWZ1bmN0aW9uIGEoZSl7dmFyIHQsbixyPWUsbz0xLHM9W107cmV0dXJuLTEhPT1yLmluZGV4T2YoIl8iKSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKSx0PXJbMF0sIi0iIT09dCYmIisiIT09dHx8KCItIj09PXQmJihvPS0xKSxyPXIuc2xpY2UoMSksdD1yWzBdKSwiMCI9PT1yPzA6IjAiPT09dD8iYiI9PT1yWzFdP28qcGFyc2VJbnQoci5zbGljZSgyKSwyKToieCI9PT1yWzFdP28qcGFyc2VJbnQociwxNik6bypwYXJzZUludChyLDgpOi0xIT09ci5pbmRleE9mKCI6Iik/KHIuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3MudW5zaGlmdChwYXJzZUludChlLDEwKSl9KSxyPTAsbj0xLHMuZm9yRWFjaChmdW5jdGlvbihlKXtyKz1lKm4sbio9NjB9KSxvKnIpOm8qcGFyc2VJbnQociwxMCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmZSUxPT0wJiYhdS5pc05lZ2F0aXZlWmVybyhlKX12YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyBjKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6aSxjb25zdHJ1Y3Q6YSxwcmVkaWNhdGU6bCxyZXByZXNlbnQ6e2JpbmFyeTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MD8iMGIiK2UudG9TdHJpbmcoMik6Ii0wYiIrZS50b1N0cmluZygyKS5zbGljZSgxKX0sb2N0YWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTA/IjAiK2UudG9TdHJpbmcoOCk6Ii0wIitlLnRvU3RyaW5nKDgpLnNsaWNlKDEpfSxkZWNpbWFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKDEwKX0saGV4YWRlY2ltYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTA/IjB4IitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOiItMHgiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9fSxkZWZhdWx0U3R5bGU6ImRlY2ltYWwiLHN0eWxlQWxpYXNlczp7YmluYXJ5OlsyLCJiaW4iXSxvY3RhbDpbOCwib2N0Il0sZGVjaW1hbDpbMTAsImRlYyJdLGhleGFkZWNpbWFsOlsxNiwiaGV4Il19fSl9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvZnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMTt0cnl7dmFyIHQ9IigiK2UrIikiLG49YS5wYXJzZSh0LHtyYW5nZTohMH0pO3JldHVybiJQcm9ncmFtIj09PW4udHlwZSYmMT09PW4uYm9keS5sZW5ndGgmJiJFeHByZXNzaW9uU3RhdGVtZW50Ij09PW4uYm9keVswXS50eXBlJiYoIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIj09PW4uYm9keVswXS5leHByZXNzaW9uLnR5cGV8fCJGdW5jdGlvbkV4cHJlc3Npb24iPT09bi5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSl9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIG8oZSl7dmFyIHQsbj0iKCIrZSsiKSIscj1hLnBhcnNlKG4se3JhbmdlOiEwfSksbz1bXTtpZigiUHJvZ3JhbSIhPT1yLnR5cGV8fDEhPT1yLmJvZHkubGVuZ3RofHwiRXhwcmVzc2lvblN0YXRlbWVudCIhPT1yLmJvZHlbMF0udHlwZXx8IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiE9PXIuYm9keVswXS5leHByZXNzaW9uLnR5cGUmJiJGdW5jdGlvbkV4cHJlc3Npb24iIT09ci5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uIik7cmV0dXJuIHIuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe28ucHVzaChlLm5hbWUpfSksdD1yLmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlLCJCbG9ja1N0YXRlbWVudCI9PT1yLmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnR5cGU/bmV3IEZ1bmN0aW9uKG8sbi5zbGljZSh0WzBdKzEsdFsxXS0xKSk6bmV3IEZ1bmN0aW9uKG8sInJldHVybiAiK24uc2xpY2UodFswXSx0WzFdKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS50b1N0cmluZygpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIgYTt0cnl7YT1uKCIuL25vZGVfbW9kdWxlcy9lc3ByaW1hL2Rpc3QvZXNwcmltYS5qcyIpfWNhdGNoKGUpeyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYoYT13aW5kb3cuZXNwcmltYSl9dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyBsKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvbiIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvLHByZWRpY2F0ZTppLHJlcHJlc2VudDpzfSl9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvcmVnZXhwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3ZhciB0PWUsbj0vXC8oW2dpbV0qKSQvLmV4ZWMoZSkscj0iIjtpZigiLyI9PT10WzBdKXtpZihuJiYocj1uWzFdKSxyLmxlbmd0aD4zKXJldHVybiExO2lmKCIvIiE9PXRbdC5sZW5ndGgtci5sZW5ndGgtMV0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLG49L1wvKFtnaW1dKikkLy5leGVjKGUpLHI9IiI7cmV0dXJuIi8iPT09dFswXSYmKG4mJihyPW5bMV0pLHQ9dC5zbGljZSgxLHQubGVuZ3RoLXIubGVuZ3RoLTEpKSxuZXcgUmVnRXhwKHQscil9ZnVuY3Rpb24gcyhlKXt2YXIgdD0iLyIrZS5zb3VyY2UrIi8iO3JldHVybiBlLmdsb2JhbCYmKHQrPSJnIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksdH1mdW5jdGlvbiBpKGUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgYSgidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOmkscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiEwfWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gcygpe3JldHVybiIifWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHZvaWQgMD09PWV9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyBhKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxwcmVkaWNhdGU6aSxyZXByZXNlbnQ6c30pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZTp7fX19KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tZXJnZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiI8PCI9PT1lfHxudWxsPT09ZX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IG8oInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnJ9KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIDE9PT10JiYifiI9PT1lfHw0PT09dCYmKCJudWxsIj09PWV8fCJOdWxsIj09PWV8fCJOVUxMIj09PWUpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzKGUpe3JldHVybiBudWxsPT09ZX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IGkoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxwcmVkaWNhdGU6cyxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpmdW5jdGlvbigpe3JldHVybiJ+In0sbG93ZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSx1cHBlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LGNhbWVsY2FzZTpmdW5jdGlvbigpe3JldHVybiJOdWxsIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgdCxuLHIsbyxzLGw9W10sdT1lO2Zvcih0PTAsbj11Lmxlbmd0aDt0PG47dCs9MSl7aWYocj11W3RdLHM9ITEsIltvYmplY3QgT2JqZWN0XSIhPT1hLmNhbGwocikpcmV0dXJuITE7Zm9yKG8gaW4gcilpZihpLmNhbGwocixvKSl7aWYocylyZXR1cm4hMTtzPSEwfWlmKCFzKXJldHVybiExO2lmKC0xIT09bC5pbmRleE9mKG8pKXJldHVybiExO2wucHVzaChvKX1yZXR1cm4hMH1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsIT09ZT9lOltdfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPW5ldyBzKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6cixjb25zdHJ1Y3Q6b30pfSwiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQsbixyLG8scyxhPWU7Zm9yKHM9bmV3IEFycmF5KGEubGVuZ3RoKSx0PTAsbj1hLmxlbmd0aDt0PG47dCs9MSl7aWYocj1hW3RdLCJbb2JqZWN0IE9iamVjdF0iIT09aS5jYWxsKHIpKXJldHVybiExO2lmKG89T2JqZWN0LmtleXMociksMSE9PW8ubGVuZ3RoKXJldHVybiExO3NbdF09W29bMF0scltvWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtpZihudWxsPT09ZSlyZXR1cm5bXTt2YXIgdCxuLHIsbyxzLGk9ZTtmb3Iocz1uZXcgQXJyYXkoaS5sZW5ndGgpLHQ9MCxuPWkubGVuZ3RoO3Q8bjt0Kz0xKXI9aVt0XSxvPU9iamVjdC5rZXlzKHIpLHNbdF09W29bMF0scltvWzBdXV07cmV0dXJuIHN9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1uZXcgcygidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvfSl9LCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgcigidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZTpbXX19KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgdCxuPWU7Zm9yKHQgaW4gbilpZihpLmNhbGwobix0KSYmbnVsbCE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9PWU/ZTp7fX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPW5ldyBzKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLHtraW5kOiJtYXBwaW5nIixyZXNvbHZlOnIsY29uc3RydWN0Om99KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zdHIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyByKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZToiIn19KX0sIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbCE9PWUmJihudWxsIT09YS5leGVjKGUpfHxudWxsIT09bC5leGVjKGUpKX1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scixvLHMsaSx1LGMsZCxfLHA9MCxmPW51bGw7aWYodD1hLmV4ZWMoZSksbnVsbD09PXQmJih0PWwuZXhlYyhlKSksbnVsbD09PXQpdGhyb3cgbmV3IEVycm9yKCJEYXRlIHJlc29sdmUgZXJyb3IiKTtpZihuPSt0WzFdLHI9K3RbMl0tMSxvPSt0WzNdLCF0WzRdKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLHIsbykpO2lmKHM9K3RbNF0saT0rdFs1XSx1PSt0WzZdLHRbN10pe2ZvcihwPXRbN10uc2xpY2UoMCwzKTtwLmxlbmd0aDwzOylwKz0iMCI7cD0rcH1yZXR1cm4gdFs5XSYmKGM9K3RbMTBdLGQ9Kyh0WzExXXx8MCksZj02ZTQqKDYwKmMrZCksIi0iPT09dFs5XSYmKGY9LWYpKSxfPW5ldyBEYXRlKERhdGUuVVRDKG4scixvLHMsaSx1LHApKSxmJiZfLnNldFRpbWUoXy5nZXRUaW1lKCktZiksX31mdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksYT1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLGw9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtlLmV4cG9ydHM9bmV3IGkoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvLGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6c30pfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19EYXRhVmlldy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIikscz1PYmplY3Qoci5hKShvLmEsIkRhdGFWaWV3Iik7dC5hPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0hhc2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hDbGVhci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoRGVsZXRlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hHZXQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEhhcy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoU2V0LmpzIik7ci5wcm90b3R5cGUuY2xlYXI9by5hLHIucHJvdG90eXBlLmRlbGV0ZT1zLmEsci5wcm90b3R5cGUuZ2V0PWkuYSxyLnByb3RvdHlwZS5oYXM9YS5hLHIucHJvdG90eXBlLnNldD1sLmEsdC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlQ2xlYXIuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlU2V0LmpzIik7ci5wcm90b3R5cGUuY2xlYXI9by5hLHIucHJvdG90eXBlLmRlbGV0ZT1zLmEsci5wcm90b3R5cGUuZ2V0PWkuYSxyLnByb3RvdHlwZS5oYXM9YS5hLHIucHJvdG90eXBlLnNldD1sLmEsdC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIikscz1PYmplY3Qoci5hKShvLmEsIk1hcCIpO3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXBDYWNoZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVDbGVhci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZURlbGV0ZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUdldC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUhhcy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZVNldC5qcyIpO3IucHJvdG90eXBlLmNsZWFyPW8uYSxyLnByb3RvdHlwZS5kZWxldGU9cy5hLHIucHJvdG90eXBlLmdldD1pLmEsci5wcm90b3R5cGUuaGFzPWEuYSxyLnByb3RvdHlwZS5zZXQ9bC5hLHQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19Qcm9taXNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiKSxzPU9iamVjdChyLmEpKG8uYSwiUHJvbWlzZSIpO3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIpLHM9T2JqZWN0KHIuYSkoby5hLCJTZXQiKTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0Q2FjaGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgby5hOysrdDxuOyl0aGlzLmFkZChlW3RdKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcENhY2hlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlQWRkLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlSGFzLmpzIik7ci5wcm90b3R5cGUuYWRkPXIucHJvdG90eXBlLnB1c2g9cy5hLHIucHJvdG90eXBlLmhhcz1pLmEsdC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgby5hKGUpO3RoaXMuc2l6ZT10LnNpemV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19MaXN0Q2FjaGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tDbGVhci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0dldC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0hhcy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja1NldC5qcyIpO3IucHJvdG90eXBlLmNsZWFyPXMuYSxyLnByb3RvdHlwZS5kZWxldGU9aS5hLHIucHJvdG90eXBlLmdldD1hLmEsci5wcm90b3R5cGUuaGFzPWwuYSxyLnByb3RvdHlwZS5zZXQ9dS5hLHQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiksbz1yLmEuU3ltYm9sO3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIpLG89ci5hLlVpbnQ4QXJyYXk7dC5hPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1dlYWtNYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIpLHM9T2JqZWN0KHIuYSkoby5hLCJXZWFrTWFwIik7dC5hPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAscz1bXTsrK248cjspe3ZhciBpPWVbbl07dChpLG4sZSkmJihzW28rK109aSl9cmV0dXJuIHN9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPU9iamVjdChpLmEpKGUpLHI9IW4mJk9iamVjdChzLmEpKGUpLGM9IW4mJiFyJiZPYmplY3QoYS5hKShlKSxfPSFuJiYhciYmIWMmJk9iamVjdCh1LmEpKGUpLHA9bnx8cnx8Y3x8XyxmPXA/T2JqZWN0KG8uYSkoZS5sZW5ndGgsU3RyaW5nKTpbXSxtPWYubGVuZ3RoO2Zvcih2YXIgaCBpbiBlKSF0JiYhZC5jYWxsKGUsaCl8fHAmJigibGVuZ3RoIj09aHx8YyYmKCJvZmZzZXQiPT1ofHwicGFyZW50Ij09aCl8fF8mJigiYnVmZmVyIj09aHx8ImJ5dGVMZW5ndGgiPT1ofHwiYnl0ZU9mZnNldCI9PWgpfHxPYmplY3QobC5hKShoLG0pKXx8Zi5wdXNoKGgpO3JldHVybiBmfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIpLGM9T2JqZWN0LnByb3RvdHlwZSxkPWMuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb310LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKHQoZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25NZXJnZVZhbHVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4peyh2b2lkIDA9PT1ufHxPYmplY3Qocy5hKShlW3RdLG4pKSYmKHZvaWQgMCE9PW58fHQgaW4gZSl8fE9iamVjdChvLmEpKGUsdCxuKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWVbdF07YS5jYWxsKGUsdCkmJk9iamVjdChzLmEpKHIsbikmJih2b2lkIDAhPT1ufHx0IGluIGUpfHxPYmplY3Qoby5hKShlLHQsbil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIpLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoT2JqZWN0KG8uYSkoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4peyJfX3Byb3RvX18iPT10JiZvLmE/T2JqZWN0KG8uYSkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6ZVt0XT1ufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiKSxvPU9iamVjdC5jcmVhdGUscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFPYmplY3Qoci5hKSh0KSlyZXR1cm57fTtpZihvKXJldHVybiBvKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxufX0oKTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiKSxvPU9iamVjdChyLmEpKCk7dC5hPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3JPd24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlJiZPYmplY3Qoby5hKShlLHQscy5hKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3IuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3Q9T2JqZWN0KG8uYSkodCxlKTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW09iamVjdChzLmEpKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6dm9pZCAwfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gT2JqZWN0KHMuYSkoZSk/cjpPYmplY3Qoby5hKShyLG4oZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9sOmE6dSYmdSBpbiBPYmplY3QoZSk/T2JqZWN0KHMuYSkoZSk6T2JqZWN0KGkuYSkoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiksYT0iW29iamVjdCBOdWxsXSIsbD0iW29iamVjdCBVbmRlZmluZWRdIix1PW8uYT9vLmEudG9TdHJpbmdUYWc6dm9pZCAwO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSGFzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBudWxsIT1lJiZ0IGluIE9iamVjdChlKX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdChzLmEpKGUpJiZPYmplY3Qoby5hKShlKT09aX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiKSxpPSJbb2JqZWN0IEFyZ3VtZW50c10iO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNFcXVhbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLGksYSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IU9iamVjdChzLmEpKGUpJiYhT2JqZWN0KHMuYSkodCk/ZSE9PWUmJnQhPT10Ok9iamVjdChvLmEpKGUsdCxuLGkscixhKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNFcXVhbERlZXAuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixoLGIpe3ZhciBFPU9iamVjdCh1LmEpKGUpLHk9T2JqZWN0KHUuYSkodCksdj1FP2Y6T2JqZWN0KGwuYSkoZSksVD15P2Y6T2JqZWN0KGwuYSkodCk7dj12PT1wP206dixUPVQ9PXA/bTpUO3ZhciBBPXY9PW0sQz1UPT1tLE89dj09VDtpZihPJiZPYmplY3QoYy5hKShlKSl7aWYoIU9iamVjdChjLmEpKHQpKXJldHVybiExO0U9ITAsQT0hMX1pZihPJiYhQSlyZXR1cm4gYnx8KGI9bmV3IG8uYSksRXx8T2JqZWN0KGQuYSkoZSk/T2JqZWN0KHMuYSkoZSx0LG4scixoLGIpOk9iamVjdChpLmEpKGUsdCx2LG4scixoLGIpO2lmKCEobiZfKSl7dmFyIFM9QSYmZy5jYWxsKGUsIl9fd3JhcHBlZF9fIiksUj1DJiZnLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihTfHxSKXt2YXIgaj1TP2UudmFsdWUoKTplLHg9Uj90LnZhbHVlKCk6dDtyZXR1cm4gYnx8KGI9bmV3IG8uYSksaChqLHgsbixyLGIpfX1yZXR1cm4hIU8mJihifHwoYj1uZXcgby5hKSxPYmplY3QoYS5hKShlLHQsbixyLGgsYikpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3RhY2suanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbE9iamVjdHMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiksXz0xLHA9IltvYmplY3QgQXJndW1lbnRzXSIsZj0iW29iamVjdCBBcnJheV0iLG09IltvYmplY3QgT2JqZWN0XSIsaD1PYmplY3QucHJvdG90eXBlLGc9aC5oYXNPd25Qcm9wZXJ0eTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgbD1uLmxlbmd0aCx1PWwsYz0hcjtpZihudWxsPT1lKXJldHVybiF1O2ZvcihlPU9iamVjdChlKTtsLS07KXt2YXIgZD1uW2xdO2lmKGMmJmRbMl0/ZFsxXSE9PWVbZFswXV06IShkWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2w8dTspe2Q9bltsXTt2YXIgXz1kWzBdLHA9ZVtfXSxmPWRbMV07aWYoYyYmZFsyXSl7aWYodm9pZCAwPT09cCYmIShfIGluIGUpKXJldHVybiExfWVsc2V7dmFyIG09bmV3IG8uYTtpZihyKXZhciBoPXIocCxmLF8sZSx0LG0pO2lmKCEodm9pZCAwPT09aD9PYmplY3Qocy5hKShmLHAsaXxhLHIsbSk6aCkpcmV0dXJuITF9fXJldHVybiEwfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3RhY2suanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanMiKSxpPTEsYT0yO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4hKCFPYmplY3QoaS5hKShlKXx8T2JqZWN0KHMuYSkoZSkpJiYoT2JqZWN0KG8uYSkoZSk/Zjp1KS50ZXN0KE9iamVjdChhLmEpKGUpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiksbD0vW1xcXiQuKis/KClbXF17fXxdL2csdT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUsXz1jLnRvU3RyaW5nLHA9ZC5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrXy5jYWxsKHApLnJlcGxhY2UobCwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QoaS5hKShlKSYmT2JqZWN0KHMuYSkoZS5sZW5ndGgpJiYhIWFbT2JqZWN0KG8uYSkoZSldfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiksYT17fTthWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1hWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1hWyJbb2JqZWN0IEludDhBcnJheV0iXT1hWyJbb2JqZWN0IEludDE2QXJyYXldIl09YVsiW29iamVjdCBJbnQzMkFycmF5XSJdPWFbIltvYmplY3QgVWludDhBcnJheV0iXT1hWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWFbIltvYmplY3QgVWludDE2QXJyYXldIl09YVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxhWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1hWyJbb2JqZWN0IEFycmF5XSJdPWFbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YVsiW29iamVjdCBCb29sZWFuXSJdPWFbIltvYmplY3QgRGF0YVZpZXddIl09YVsiW29iamVjdCBEYXRlXSJdPWFbIltvYmplY3QgRXJyb3JdIl09YVsiW29iamVjdCBGdW5jdGlvbl0iXT1hWyJbb2JqZWN0IE1hcF0iXT1hWyJbb2JqZWN0IE51bWJlcl0iXT1hWyJbb2JqZWN0IE9iamVjdF0iXT1hWyJbb2JqZWN0IFJlZ0V4cF0iXT1hWyJbb2JqZWN0IFNldF0iXT1hWyJbb2JqZWN0IFN0cmluZ10iXT1hWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJdGVyYXRlZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbD09ZT9pLmE6Im9iamVjdCI9PXR5cGVvZiBlP09iamVjdChhLmEpKGUpP09iamVjdChzLmEpKGVbMF0sZVsxXSk6T2JqZWN0KG8uYSkoZSk6T2JqZWN0KGwuYSkoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlcy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighT2JqZWN0KG8uYSkoZSkpcmV0dXJuIE9iamVjdChzLmEpKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPYmplY3QoZSkpYS5jYWxsKGUsbikmJiJjb25zdHJ1Y3RvciIhPW4mJnQucHVzaChuKTtyZXR1cm4gdH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiKSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIU9iamVjdChvLmEpKGUpKXJldHVybiBPYmplY3QoaS5hKShlKTt2YXIgdD1PYmplY3Qocy5hKShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKSgiY29uc3RydWN0b3IiIT1yfHwhdCYmbC5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIpLGE9T2JqZWN0LnByb3RvdHlwZSxsPWEuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9T2JqZWN0KHMuYSkoZSk7cmV0dXJuIDE9PXQubGVuZ3RoJiZ0WzBdWzJdP09iamVjdChpLmEpKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT1lfHxPYmplY3Qoby5hKShuLGUsdCl9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBPYmplY3QoYS5hKShlKSYmT2JqZWN0KGwuYSkodCk/T2JqZWN0KHUuYSkoT2JqZWN0KGMuYSkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9T2JqZWN0KHMuYSkobixlKTtyZXR1cm4gdm9pZCAwPT09ciYmcj09PXQ/T2JqZWN0KGkuYSkobixlKTpPYmplY3Qoby5hKSh0LHIsZHxfKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNFcXVhbC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2dldC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2hhc0luLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcyIpLGQ9MSxfPTI7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNZXJnZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLGQsXyl7ZSE9PXQmJk9iamVjdChpLmEpKHQsZnVuY3Rpb24oaSx1KXtpZihPYmplY3QobC5hKShpKSlffHwoXz1uZXcgby5hKSxPYmplY3QoYS5hKShlLHQsdSxuLHIsZCxfKTtlbHNle3ZhciBwPWQ/ZChPYmplY3QoYy5hKShlLHUpLGksdSsiIixlLHQsXyk6dm9pZCAwO3ZvaWQgMD09PXAmJihwPWkpLE9iamVjdChzLmEpKGUsdSxwKX19LHUuYSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TdGFjay5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25NZXJnZVZhbHVlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3IuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlRGVlcC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NhZmVHZXQuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlRGVlcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsRSx5LHYpe3ZhciBUPU9iamVjdChnLmEpKGUsbiksQT1PYmplY3QoZy5hKSh0LG4pLEM9di5nZXQoQSk7aWYoQylyZXR1cm4gdm9pZCBPYmplY3Qoby5hKShlLG4sQyk7dmFyIE89eT95KFQsQSxuKyIiLGUsdCx2KTp2b2lkIDAsUz12b2lkIDA9PT1PO2lmKFMpe3ZhciBSPU9iamVjdChjLmEpKEEpLGo9IVImJk9iamVjdChfLmEpKEEpLHg9IVImJiFqJiZPYmplY3QoaC5hKShBKTtPPUEsUnx8anx8eD9PYmplY3QoYy5hKShUKT9PPVQ6T2JqZWN0KGQuYSkoVCk/Tz1PYmplY3QoYS5hKShUKTpqPyhTPSExLE89T2JqZWN0KHMuYSkoQSwhMCkpOng/KFM9ITEsTz1PYmplY3QoaS5hKShBLCEwKSk6Tz1bXTpPYmplY3QobS5hKShBKXx8T2JqZWN0KHUuYSkoQSk/KE89VCxPYmplY3QodS5hKShUKT9PPU9iamVjdChiLmEpKFQpOk9iamVjdChmLmEpKFQpJiYhT2JqZWN0KHAuYSkoVCl8fChPPU9iamVjdChsLmEpKEEpKSk6Uz0hMX1TJiYodi5zZXQoQSxPKSxFKE8sQSxyLHksdiksdi5kZWxldGUoQSkpLE9iamVjdChvLmEpKGUsbixPKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnbk1lcmdlVmFsdWUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVCdWZmZXIuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVUeXBlZEFycmF5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlBcnJheS5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVPYmplY3QuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZU9iamVjdC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIpLGc9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zYWZlR2V0LmpzIiksYj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9QbGFpbk9iamVjdC5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoby5hKSh0LGUpfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBPYmplY3QoaS5hKShPYmplY3Qocy5hKShlLHQsby5hKSxlKyIiKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9TdHJpbmcuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiksaT1vLmE/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0KG8uYSkoZSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpPYmplY3Qoci5hKSh0KSx3cml0YWJsZTohMH0pfTpzLmE7dC5hPWl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUaW1lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKE9iamVjdChpLmEpKGUpKXJldHVybiBPYmplY3Qocy5hKShlLHIpKyIiO2lmKE9iamVjdChhLmEpKGUpKXJldHVybiBjP2MuY2FsbChlKToiIjt2YXIgdD1lKyIiO3JldHVybiIwIj09dCYmMS9lPT0tbD8iLTAiOnR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiKSxsPTEvMCx1PW8uYT9vLmEucHJvdG90eXBlOnZvaWQgMCxjPXU/dS50b1N0cmluZzp2b2lkIDA7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NhY2hlSGFzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5oYXModCl9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nhc3RQYXRoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gT2JqZWN0KG8uYSkoZSk/ZTpPYmplY3Qocy5hKShlLHQpP1tlXTpPYmplY3QoaS5hKShPYmplY3QoYS5hKShlKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nVG9QYXRoLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBvLmEodCkuc2V0KG5ldyBvLmEoZSkpLHR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lQnVmZmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPWUubGVuZ3RoLHI9dT91KG4pOm5ldyBlLmNvbnN0cnVjdG9yKG4pO3JldHVybiBlLmNvcHkocikscn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiKSxzPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsaT1zJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmaS5leHBvcnRzPT09cyxsPWE/by5hLkJ1ZmZlcjp2b2lkIDAsdT1sP2wuYWxsb2NVbnNhZmU6dm9pZCAwO3QuYT1yfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVUeXBlZEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10P09iamVjdChvLmEpKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5QXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KHIpKTsrK248cjspdFtuXT1lW25dO3JldHVybiB0fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIGk9IW47bnx8KG49e30pO2Zvcih2YXIgYT0tMSxsPXQubGVuZ3RoOysrYTxsOyl7dmFyIHU9dFthXSxjPXI/cihuW3VdLGVbdV0sdSxuLGUpOnZvaWQgMDt2b2lkIDA9PT1jJiYoYz1lW3VdKSxpP09iamVjdChzLmEpKG4sdSxjKTpPYmplY3Qoby5hKShuLHUsYyl9cmV0dXJuIG59dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25WYWx1ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiKSxvPXIuYVsiX19jb3JlLWpzX3NoYXJlZF9fIl07dC5hPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdChvLmEpKGZ1bmN0aW9uKHQsbil7dmFyIHI9LTEsbz1uLmxlbmd0aCxpPW8+MT9uW28tMV06dm9pZCAwLGE9bz4yP25bMl06dm9pZCAwO2ZvcihpPWUubGVuZ3RoPjMmJiJmdW5jdGlvbiI9PXR5cGVvZiBpPyhvLS0saSk6dm9pZCAwLGEmJk9iamVjdChzLmEpKG5bMF0sblsxXSxhKSYmKGk9bzwzP3ZvaWQgMDppLG89MSksdD1PYmplY3QodCk7KytyPG87KXt2YXIgbD1uW3JdO2wmJmUodCxsLHIsaSl9cmV0dXJuIHR9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxzPU9iamVjdCh0KSxpPXIodCksYT1pLmxlbmd0aDthLS07KXt2YXIgbD1pW2U/YTorK29dO2lmKCExPT09bihzW2xdLGwscykpYnJlYWt9cmV0dXJuIHR9fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIpLG89ZnVuY3Rpb24oKXt0cnl7dmFyIGU9T2JqZWN0KHIuYSkoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBlKHt9LCIiLHt9KSxlfWNhdGNoKGUpe319KCk7dC5hPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsQXJyYXlzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scix1LGMpe3ZhciBkPW4mYSxfPWUubGVuZ3RoLHA9dC5sZW5ndGg7aWYoXyE9cCYmIShkJiZwPl8pKXJldHVybiExO3ZhciBmPWMuZ2V0KGUpO2lmKGYmJmMuZ2V0KHQpKXJldHVybiBmPT10O3ZhciBtPS0xLGg9ITAsZz1uJmw/bmV3IG8uYTp2b2lkIDA7Zm9yKGMuc2V0KGUsdCksYy5zZXQodCxlKTsrK208Xzspe3ZhciBiPWVbbV0sRT10W21dO2lmKHIpdmFyIHk9ZD9yKEUsYixtLHQsZSxjKTpyKGIsRSxtLGUsdCxjKTtpZih2b2lkIDAhPT15KXtpZih5KWNvbnRpbnVlO2g9ITE7YnJlYWt9aWYoZyl7aWYoIU9iamVjdChzLmEpKHQsZnVuY3Rpb24oZSx0KXtpZighT2JqZWN0KGkuYSkoZyx0KSYmKGI9PT1lfHx1KGIsZSxuLHIsYykpKXJldHVybiBnLnB1c2godCl9KSl7aD0hMTticmVha319ZWxzZSBpZihiIT09RSYmIXUoYixFLG4scixjKSl7aD0hMTticmVha319cmV0dXJuIGMuZGVsZXRlKGUpLGMuZGVsZXRlKHQpLGh9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXRDYWNoZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNvbWUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMiKSxhPTEsbD0yO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEJ5VGFnLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixvLEEsTyl7c3dpdGNoKG4pe2Nhc2UgVDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgdjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhQShuZXcgcy5hKGUpLG5ldyBzLmEodCkpKTtjYXNlIF86Y2FzZSBwOmNhc2UgaDpyZXR1cm4gT2JqZWN0KGkuYSkoK2UsK3QpO2Nhc2UgZjpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2UgZzpjYXNlIEU6cmV0dXJuIGU9PXQrIiI7Y2FzZSBtOnZhciBTPWwuYTtjYXNlIGI6dmFyIFI9ciZjO2lmKFN8fChTPXUuYSksZS5zaXplIT10LnNpemUmJiFSKXJldHVybiExO3ZhciBqPU8uZ2V0KGUpO2lmKGopcmV0dXJuIGo9PXQ7cnw9ZCxPLnNldChlLHQpO3ZhciB4PU9iamVjdChhLmEpKFMoZSksUyh0KSxyLG8sQSxPKTtyZXR1cm4gTy5kZWxldGUoZSkseDtjYXNlIHk6aWYoQylyZXR1cm4gQy5jYWxsKGUpPT1DLmNhbGwodCl9cmV0dXJuITF9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fVWludDhBcnJheS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsQXJyYXlzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcFRvQXJyYXkuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9BcnJheS5qcyIpLGM9MSxkPTIsXz0iW29iamVjdCBCb29sZWFuXSIscD0iW29iamVjdCBEYXRlXSIsZj0iW29iamVjdCBFcnJvcl0iLG09IltvYmplY3QgTWFwXSIsaD0iW29iamVjdCBOdW1iZXJdIixnPSJbb2JqZWN0IFJlZ0V4cF0iLGI9IltvYmplY3QgU2V0XSIsRT0iW29iamVjdCBTdHJpbmddIix5PSJbb2JqZWN0IFN5bWJvbF0iLHY9IltvYmplY3QgQXJyYXlCdWZmZXJdIixUPSJbb2JqZWN0IERhdGFWaWV3XSIsQT1vLmE/by5hLnByb3RvdHlwZTp2b2lkIDAsQz1BP0EudmFsdWVPZjp2b2lkIDA7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsaSxsKXt2YXIgdT1uJnMsYz1PYmplY3Qoby5hKShlKSxkPWMubGVuZ3RoO2lmKGQhPU9iamVjdChvLmEpKHQpLmxlbmd0aCYmIXUpcmV0dXJuITE7Zm9yKHZhciBfPWQ7Xy0tOyl7dmFyIHA9Y1tfXTtpZighKHU/cCBpbiB0OmEuY2FsbCh0LHApKSlyZXR1cm4hMX12YXIgZj1sLmdldChlKTtpZihmJiZsLmdldCh0KSlyZXR1cm4gZj09dDt2YXIgbT0hMDtsLnNldChlLHQpLGwuc2V0KHQsZSk7Zm9yKHZhciBoPXU7KytfPGQ7KXtwPWNbX107dmFyIGc9ZVtwXSxiPXRbcF07aWYocil2YXIgRT11P3IoYixnLHAsdCxlLGwpOnIoZyxiLHAsZSx0LGwpO2lmKCEodm9pZCAwPT09RT9nPT09Ynx8aShnLGIsbixyLGwpOkUpKXttPSExO2JyZWFrfWh8fChoPSJjb25zdHJ1Y3RvciI9PXApfWlmKG0mJiFoKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHY9dC5jb25zdHJ1Y3Rvcjt5IT12JiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEoImZ1bmN0aW9uIj09dHlwZW9mIHkmJnkgaW5zdGFuY2VvZiB5JiYiZnVuY3Rpb24iPT10eXBlb2YgdiYmdiBpbnN0YW5jZW9mIHYpJiYobT0hMSl9cmV0dXJuIGwuZGVsZXRlKGUpLGwuZGVsZXRlKHQpLG19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRBbGxLZXlzLmpzIikscz0xLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5hPW59KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qoby5hKShlLGkuYSxzLmEpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5fX2RhdGFfXztyZXR1cm4gT2JqZWN0KG8uYSkodCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXRjaERhdGEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9T2JqZWN0KHMuYSkoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLGk9ZVtyXTt0W25dPVtyLGksT2JqZWN0KG8uYSkoaSldfXJldHVybiB0fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNTdHJpY3RDb21wYXJhYmxlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPU9iamVjdChzLmEpKGUsdCk7cmV0dXJuIE9iamVjdChvLmEpKG4pP246dm9pZCAwfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiKSxvPU9iamVjdChyLmEpKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1pLmNhbGwoZSxsKSxuPWVbbF07dHJ5e2VbbF09dm9pZCAwO3ZhciByPSEwfWNhdGNoKGUpe312YXIgbz1hLmNhbGwoZSk7cmV0dXJuIHImJih0P2VbbF09bjpkZWxldGUgZVtsXSksb312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMuaGFzT3duUHJvcGVydHksYT1zLnRvU3RyaW5nLGw9by5hP28uYS50b1N0cmluZ1RhZzp2b2lkIDA7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUZpbHRlci5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMucHJvcGVydHlJc0VudW1lcmFibGUsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGw9YT9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1PYmplY3QoZSksT2JqZWN0KHIuYSkoYShlKSxmdW5jdGlvbih0KXtyZXR1cm4gaS5jYWxsKGUsdCl9KSl9Om8uYTt0LmE9bH0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1Byb21pc2UuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1dlYWtNYXAuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIpLGM9T2JqZWN0KHUuYSkoci5hKSxkPU9iamVjdCh1LmEpKG8uYSksXz1PYmplY3QodS5hKShzLmEpLHA9T2JqZWN0KHUuYSkoaS5hKSxmPU9iamVjdCh1LmEpKGEuYSksbT1sLmE7KHIuYSYmIltvYmplY3QgRGF0YVZpZXddIiE9bShuZXcgci5hKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxvLmEmJiJbb2JqZWN0IE1hcF0iIT1tKG5ldyBvLmEpfHxzLmEmJiJbb2JqZWN0IFByb21pc2VdIiE9bShzLmEucmVzb2x2ZSgpKXx8aS5hJiYiW29iamVjdCBTZXRdIiE9bShuZXcgaS5hKXx8YS5hJiYiW29iamVjdCBXZWFrTWFwXSIhPW0obmV3IGEuYSkpJiYobT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QobC5hKShlKSxuPSJbb2JqZWN0IE9iamVjdF0iPT10P2UuY29uc3RydWN0b3I6dm9pZCAwLHI9bj9PYmplY3QodS5hKShuKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIGM6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIGQ6cmV0dXJuIltvYmplY3QgTWFwXSI7Y2FzZSBfOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgU2V0XSI7Y2FzZSBmOnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pLHQuYT1tfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc1BhdGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dD1PYmplY3Qoby5hKSh0LGUpO2Zvcih2YXIgcj0tMSxjPXQubGVuZ3RoLGQ9ITE7KytyPGM7KXt2YXIgXz1PYmplY3QodS5hKSh0W3JdKTtpZighKGQ9bnVsbCE9ZSYmbihlLF8pKSlicmVhaztlPWVbX119cmV0dXJuIGR8fCsrciE9Yz9kOiEhKGM9bnVsbD09ZT8wOmUubGVuZ3RoKSYmT2JqZWN0KGwuYSkoYykmJk9iamVjdChhLmEpKF8sYykmJihPYmplY3QoaS5hKShlKXx8T2JqZWN0KHMuYSkoZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvS2V5LmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hDbGVhci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fX2RhdGFfXz1vLmE/T2JqZWN0KG8uYSkobnVsbCk6e30sdGhpcy5zaXplPTB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVDcmVhdGUuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoR2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihvLmEpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1zP3ZvaWQgMDpufXJldHVybiBhLmNhbGwodCxlKT90W2VdOnZvaWQgMH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcyIpLHM9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hIYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBvLmE/dm9pZCAwIT09dFtlXTppLmNhbGwodCxlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcyIpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMuaGFzT3duUHJvcGVydHk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hTZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLG5bZV09by5hJiZ2b2lkIDA9PT10P3M6dCx0aGlzfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIikscz0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZU9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlLmNvbnN0cnVjdG9yfHxPYmplY3QoaS5hKShlKT97fTpPYmplY3Qoby5hKShPYmplY3Qocy5hKShlKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQ3JlYXRlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/bzp0KSYmKCJudW1iZXIiPT1ufHwic3ltYm9sIiE9biYmcy50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9dmFyIG89OTAwNzE5OTI1NDc0MDk5MSxzPS9eKD86MHxbMS05XVxkKikkLzt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7aWYoIU9iamVjdChhLmEpKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1yP09iamVjdChzLmEpKG4pJiZPYmplY3QoaS5hKSh0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmT2JqZWN0KG8uYSkoblt0XSxlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKE9iamVjdChvLmEpKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPWUmJiFPYmplY3Qocy5hKShlKSl8fChhLnRlc3QoZSl8fCFpLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiksaT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxhPS9eXHcqJC87dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiJzdHJpbmciPT10fHwibnVtYmVyIj09dHx8InN5bWJvbCI9PXR8fCJib29sZWFuIj09dD8iX19wcm90b19fIiE9PWU6bnVsbD09PWV9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzTWFza2VkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuISFzJiZzIGluIGV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIikscz1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoby5hJiZvLmEua2V5cyYmby5hLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCk7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PSgiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fG8pfXZhciBvPU9iamVjdC5wcm90b3R5cGU7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlPT09ZSYmIU9iamVjdChvLmEpKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVDbGVhci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPU9iamVjdChvLmEpKHQsZSk7cmV0dXJuIShuPDApJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOmkuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsITApfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzb2NJbmRleE9mLmpzIikscz1BcnJheS5wcm90b3R5cGUsaT1zLnNwbGljZTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPU9iamVjdChvLmEpKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KG8uYSkodGhpcy5fX2RhdGFfXyxlKT4tMX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVTZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1PYmplY3Qoby5hKShuLGUpO3JldHVybiByPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbZSx0XSkpOm5bcl1bMV09dCx0aGlzfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzb2NJbmRleE9mLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IG8uYSxtYXA6bmV3KGkuYXx8cy5hKSxzdHJpbmc6bmV3IG8uYX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19IYXNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXAuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1PYmplY3Qoby5hKSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUdldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3Qoby5hKSh0aGlzLGUpLmdldChlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE1hcERhdGEuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVIYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KG8uYSkodGhpcyxlKS5oYXMoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlU2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1PYmplY3Qoby5hKSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBUb0FycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSxufXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiYobltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChuKSkpfX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWVtb2l6ZUNhcHBlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PU9iamVjdChvLmEpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG4uc2l6ZT09PXMmJm4uY2xlYXIoKSxlfSksbj10LmNhY2hlO3JldHVybiB0fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZW1vaXplLmpzIikscz01MDA7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIpLG89T2JqZWN0KHIuYSkoT2JqZWN0LCJjcmVhdGUiKTt0LmE9b30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiKSxvPU9iamVjdChyLmEpKE9iamVjdC5rZXlzLE9iamVjdCk7dC5hPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PVtdO2lmKG51bGwhPWUpZm9yKHZhciBuIGluIE9iamVjdChlKSl0LnB1c2gobik7cmV0dXJuIHR9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiKSxvPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMscz1vJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGk9cyYmcy5leHBvcnRzPT09byxhPWkmJnIuYS5wcm9jZXNzLGw9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9cyYmcy5yZXF1aXJlJiZzLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gZXx8YSYmYS5iaW5kaW5nJiZhLmJpbmRpbmcoInV0aWwiKX1jYXRjaChlKXt9fSgpO3QuYT1sfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gcy5jYWxsKGUpfXZhciBvPU9iamVjdC5wcm90b3R5cGUscz1vLnRvU3RyaW5nO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gdD1zKHZvaWQgMD09PXQ/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cyxpPS0xLGE9cyhyLmxlbmd0aC10LDApLGw9QXJyYXkoYSk7KytpPGE7KWxbaV09clt0K2ldO2k9LTE7Zm9yKHZhciB1PUFycmF5KHQrMSk7KytpPHQ7KXVbaV09cltpXTtyZXR1cm4gdVt0XT1uKGwpLE9iamVjdChvLmEpKGUsdGhpcyx1KX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcHBseS5qcyIpLHM9TWF0aC5tYXg7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzIiksbz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9ci5hfHxvfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zYWZlR2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigiX19wcm90b19fIiE9dClyZXR1cm4gZVt0XX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxvKSx0aGlzfXZhciBvPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVIYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtuWysrdF09ZX0pLG59dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIikscz1PYmplY3Qoby5hKShyLmEpO3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PTAsbj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWkoKSxhPXMtKHItbik7aWYobj1yLGE+MCl7aWYoKyt0Pj1vKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBvPTgwMCxzPTE2LGk9RGF0ZS5ub3c7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrQ2xlYXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX19kYXRhX189bmV3IG8uYSx0aGlzLnNpemU9MH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0dldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrU2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBvLmEpe3ZhciByPW4uX19kYXRhX187aWYoIXMuYXx8ci5sZW5ndGg8YS0xKXJldHVybiByLnB1c2goW2UsdF0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgaS5hKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXAuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwQ2FjaGUuanMiKSxhPTIwMDt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nVG9QYXRoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWVtb2l6ZUNhcHBlZC5qcyIpLG89L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2cscz0vXFwoXFwpPy9nLGk9T2JqZWN0KHIuYSkoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goIiIpLGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsbixyLG8pe3QucHVzaChyP28ucmVwbGFjZShzLCIkMSIpOm58fGUpfSksdH0pO3QuYT1pfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZXx8T2JqZWN0KG8uYSkoZSkpcmV0dXJuIGU7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LXM/Ii0wIjp0fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIpLHM9MS8wO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gcy5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2goZSl7fX1yZXR1cm4iIn12YXIgbz1GdW5jdGlvbi5wcm90b3R5cGUscz1vLnRvU3RyaW5nO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZT09PXR8fGUhPT1lJiZ0IT09dH10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnVsbD09ZT92b2lkIDA6T2JqZWN0KG8uYSkoZSx0KTtyZXR1cm4gdm9pZCAwPT09cj9uOnJ9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0LmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGFzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBudWxsIT1lJiZPYmplY3Qocy5hKShlLHQsby5hKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VIYXNJbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNQYXRoLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMuaGFzT3duUHJvcGVydHksYT1zLnByb3BlcnR5SXNFbnVtZXJhYmxlLGw9T2JqZWN0KHIuYSkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9yLmE6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChvLmEpKGUpJiZpLmNhbGwoZSwiY2FsbGVlIikmJiFhLmNhbGwoZSwiY2FsbGVlIil9O3QuYT1sfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9QXJyYXkuaXNBcnJheTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsIT1lJiZPYmplY3Qocy5hKShlLmxlbmd0aCkmJiFPYmplY3Qoby5hKShlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2VPYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KHMuYSkoZSkmJk9iamVjdChvLmEpKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiKSxzPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsaT1zJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmaS5leHBvcnRzPT09cyxsPWE/ci5hLkJ1ZmZlcjp2b2lkIDAsdT1sP2wuaXNCdWZmZXI6dm9pZCAwLGM9dXx8by5hO3QuYT1jfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VtcHR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1cm4hMDtpZihPYmplY3QobC5hKShlKSYmKE9iamVjdChhLmEpKGUpfHwic3RyaW5nIj09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNwbGljZXx8T2JqZWN0KHUuYSkoZSl8fE9iamVjdChkLmEpKGUpfHxPYmplY3QoaS5hKShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PU9iamVjdChzLmEpKGUpO2lmKHQ9PV98fHQ9PXApcmV0dXJuIWUuc2l6ZTtpZihPYmplY3QoYy5hKShlKSlyZXR1cm4hT2JqZWN0KG8uYSkoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKG0uY2FsbChlLG4pKXJldHVybiExO3JldHVybiEwfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIpLF89IltvYmplY3QgTWFwXSIscD0iW29iamVjdCBTZXRdIixmPU9iamVjdC5wcm90b3R5cGUsbT1mLmhhc093blByb3BlcnR5O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXF1YWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBPYmplY3Qoby5hKShlLHQpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VxdWFsV2l0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dm9pZCAwO3ZhciByPW4/bihlLHQpOnZvaWQgMDtyZXR1cm4gdm9pZCAwPT09cj9PYmplY3Qoby5hKShlLHQsdm9pZCAwLG4pOiEhcn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFPYmplY3Qocy5hKShlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3Qoby5hKShlKTtyZXR1cm4gdD09YXx8dD09bHx8dD09aXx8dD09dX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIpLGk9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGE9IltvYmplY3QgRnVuY3Rpb25dIixsPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsdT0iW29iamVjdCBQcm94eV0iO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PW99dmFyIG89OTAwNzE5OTI1NDc0MDk5MTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCFPYmplY3QoaS5hKShlKXx8T2JqZWN0KG8uYSkoZSkhPWEpcmV0dXJuITE7dmFyIHQ9T2JqZWN0KHMuYSkoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49ZC5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3I7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZjLmNhbGwobik9PV99dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIpLGE9IltvYmplY3QgT2JqZWN0XSIsbD1GdW5jdGlvbi5wcm90b3R5cGUsdT1PYmplY3QucHJvdG90eXBlLGM9bC50b1N0cmluZyxkPXUuaGFzT3duUHJvcGVydHksXz1jLmNhbGwoT2JqZWN0KTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZXx8T2JqZWN0KHMuYSkoZSkmJk9iamVjdChvLmEpKGUpPT1pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIpLGk9IltvYmplY3QgU3ltYm9sXSI7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiKSxpPXMuYSYmcy5hLmlzVHlwZWRBcnJheSxhPWk/T2JqZWN0KG8uYSkoaSk6ci5hO3QuYT1hfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KGkuYSkoZSk/T2JqZWN0KG8uYSkoZSk6T2JqZWN0KHMuYSkoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KGkuYSkoZSk/T2JqZWN0KG8uYSkoZSwhMCk6T2JqZWN0KHMuYSkoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL21hcFZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9T2JqZWN0KGkuYSkodCwzKSxPYmplY3Qocy5hKShlLGZ1bmN0aW9uKGUscixzKXtPYmplY3Qoby5hKShuLHIsdChlLHIscykpfSksbn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRm9yT3duLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJdGVyYXRlZS5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL21lbW9pemUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHxudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKHMpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxzPW4uY2FjaGU7aWYocy5oYXMobykpcmV0dXJuIHMuZ2V0KG8pO3ZhciBpPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1zLnNldChvLGkpfHxzLGl9O3JldHVybiBuLmNhY2hlPW5ldyhyLkNhY2hlfHxvLmEpLG59dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXBDYWNoZS5qcyIpLHM9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO3IuQ2FjaGU9by5hLHQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL21lcmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIikscz1PYmplY3Qoby5hKShmdW5jdGlvbihlLHQsbil7T2JqZWN0KHIuYSkoZSx0LG4pfSk7dC5hPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KGkuYSkoZSk/T2JqZWN0KG8uYSkoT2JqZWN0KGEuYSkoZSkpOk9iamVjdChzLmEpKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eURlZXAuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanMiKTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybltdfXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuITF9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9QYXRoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdChpLmEpKGUpP09iamVjdChvLmEpKGUsdS5hKTpPYmplY3QoYS5hKShlKT9bZV06T2JqZWN0KHMuYSkoT2JqZWN0KGwuYSkoT2JqZWN0KGMuYSkoZSkpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlBcnJheS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpbmdUb1BhdGguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1N0cmluZy5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvUGxhaW5PYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSxPYmplY3Qocy5hKShlKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT8iIjpPYmplY3Qoby5hKShlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIpO3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmFzc2lnbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU0oZSl8fHAoZSk/cihlLmxlbmd0aCxTdHJpbmcpOltdLG89bi5sZW5ndGgscz0hIW87Zm9yKHZhciBpIGluIGUpIXQmJiFSLmNhbGwoZSxpKXx8cyYmKCJsZW5ndGgiPT1pfHx1KGksbykpfHxuLnB1c2goaSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9ZVt0XTtSLmNhbGwoZSx0KSYmXyhyLG4pJiYodm9pZCAwIT09bnx8dCBpbiBlKXx8KGVbdF09bil9ZnVuY3Rpb24gaShlKXtpZighZChlKSlyZXR1cm4gTChlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKVIuY2FsbChlLG4pJiYiY29uc3RydWN0b3IiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gYShlLHQpe3JldHVybiB0PUQodm9pZCAwPT09dD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLG89LTEscz1EKHIubGVuZ3RoLXQsMCksaT1BcnJheShzKTsrK288czspaVtvXT1yW3Qrb107bz0tMTtmb3IodmFyIGE9QXJyYXkodCsxKTsrK288dDspYVtvXT1yW29dO3JldHVybiBhW3RdPWksbihlLHRoaXMsYSl9fWZ1bmN0aW9uIGwoZSx0LG4scil7bnx8KG49e30pO2Zvcih2YXIgbz0tMSxpPXQubGVuZ3RoOysrbzxpOyl7dmFyIGE9dFtvXSxsPXI/cihuW2FdLGVbYV0sYSxuLGUpOnZvaWQgMDtzKG4sYSx2b2lkIDA9PT1sP2VbYV06bCl9cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe3JldHVybiEhKHQ9bnVsbD09dD92OnQpJiYoIm51bWJlciI9PXR5cGVvZiBlfHxPLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBjKGUsdCxuKXtpZighYihuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hISgibnVtYmVyIj09cj9mKG4pJiZ1KHQsbi5sZW5ndGgpOiJzdHJpbmciPT1yJiZ0IGluIG4pJiZfKG5bdF0sZSl9ZnVuY3Rpb24gZChlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8Uyl9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG0oZSkmJlIuY2FsbChlLCJjYWxsZWUiKSYmKCF4LmNhbGwoZSwiY2FsbGVlIil8fGouY2FsbChlKT09VCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gbnVsbCE9ZSYmZyhlLmxlbmd0aCkmJiFoKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIEUoZSkmJmYoZSl9ZnVuY3Rpb24gaChlKXt2YXIgdD1iKGUpP2ouY2FsbChlKToiIjtyZXR1cm4gdD09QXx8dD09Q31mdW5jdGlvbiBnKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD12fWZ1bmN0aW9uIGIoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuISFlJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24geShlKXtyZXR1cm4gZihlKT9vKGUpOmkoZSl9dmFyIHY9OTAwNzE5OTI1NDc0MDk5MSxUPSJbb2JqZWN0IEFyZ3VtZW50c10iLEE9IltvYmplY3QgRnVuY3Rpb25dIixDPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsTz0vXig/OjB8WzEtOV1cZCopJC8sUz1PYmplY3QucHJvdG90eXBlLFI9Uy5oYXNPd25Qcm9wZXJ0eSxqPVMudG9TdHJpbmcseD1TLnByb3BlcnR5SXNFbnVtZXJhYmxlLEw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLEQ9TWF0aC5tYXgsdz0heC5jYWxsKHt2YWx1ZU9mOjF9LCJ2YWx1ZU9mIiksTT1BcnJheS5pc0FycmF5LGs9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZnVuY3Rpb24odCxuKXt2YXIgcj0tMSxvPW4ubGVuZ3RoLHM9bz4xP25bby0xXTp2b2lkIDAsaT1vPjI/blsyXTp2b2lkIDA7Zm9yKHM9ZS5sZW5ndGg+MyYmImZ1bmN0aW9uIj09dHlwZW9mIHM/KG8tLSxzKTp2b2lkIDAsaSYmYyhuWzBdLG5bMV0saSkmJihzPW88Mz92b2lkIDA6cyxvPTEpLHQ9T2JqZWN0KHQpOysrcjxvOyl7dmFyIGE9bltyXTthJiZlKHQsYSxyLHMpfXJldHVybiB0fSl9KGZ1bmN0aW9uKGUsdCl7aWYod3x8ZCh0KXx8Zih0KSlyZXR1cm4gdm9pZCBsKHQseSh0KSxlKTtmb3IodmFyIG4gaW4gdClSLmNhbGwodCxuKSYmcyhlLG4sdFtuXSl9KTtlLmV4cG9ydHM9a30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5jbG9uZWRlZXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUuc2V0KHRbMF0sdFsxXSksZX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGUuYWRkKHQpLGV9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbj0tMSxyPWU/ZS5sZW5ndGg6MDsrK248ciYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBvPS0xLHM9ZT9lLmxlbmd0aDowO2ZvcihyJiZzJiYobj1lWysrb10pOysrbzxzOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZSsiIil9Y2F0Y2goZSl7fXJldHVybiB0fWZ1bmN0aW9uIGQoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSxufWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIHAoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7blsrK3RdPWV9KSxufWZ1bmN0aW9uIGYoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gbSgpe3RoaXMuX19kYXRhX189SXQ/SXQobnVsbCk6e319ZnVuY3Rpb24gaChlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihJdCl7dmFyIG49dFtlXTtyZXR1cm4gbj09PXhlP3ZvaWQgMDpufXJldHVybiBndC5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9ZnVuY3Rpb24gYihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBJdD92b2lkIDAhPT10W2VdOmd0LmNhbGwodCxlKX1mdW5jdGlvbiBFKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09SXQmJnZvaWQgMD09PXQ/eGU6dCx0aGlzfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gdigpe3RoaXMuX19kYXRhX189W119ZnVuY3Rpb24gVChlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Qih0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTpTdC5jYWxsKHQsbiwxKSwhMCl9ZnVuY3Rpb24gQShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Qih0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQih0aGlzLl9fZGF0YV9fLGUpPi0xfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9QihuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc31mdW5jdGlvbiBTKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIFIoKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBmLG1hcDpuZXcoRHR8fHkpLHN0cmluZzpuZXcgZn19ZnVuY3Rpb24gaihlKXtyZXR1cm4gaWUodGhpcyxlKS5kZWxldGUoZSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gaWUodGhpcyxlKS5nZXQoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gaWUodGhpcyxlKS5oYXMoZSl9ZnVuY3Rpb24gRChlLHQpe3JldHVybiBpZSh0aGlzLGUpLnNldChlLHQpLHRoaXN9ZnVuY3Rpb24gdyhlKXt0aGlzLl9fZGF0YV9fPW5ldyB5KGUpfWZ1bmN0aW9uIE0oKXt0aGlzLl9fZGF0YV9fPW5ldyB5fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZGVsZXRlKGUpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWZ1bmN0aW9uIE4oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiB5KXt2YXIgcj1uLl9fZGF0YV9fO2lmKCFEdHx8ci5sZW5ndGg8amUtMSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgUyhyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzfWZ1bmN0aW9uIEgoZSx0KXt2YXIgbj1XdChlKXx8YmUoZSk/bChlLmxlbmd0aCxTdHJpbmcpOltdLHI9bi5sZW5ndGgsbz0hIXI7Zm9yKHZhciBzIGluIGUpIXQmJiFndC5jYWxsKGUscyl8fG8mJigibGVuZ3RoIj09c3x8ZGUocyxyKSl8fG4ucHVzaChzKTtyZXR1cm4gbn1mdW5jdGlvbiBGKGUsdCxuKXt2YXIgcj1lW3RdO2d0LmNhbGwoZSx0KSYmZ2UocixuKSYmKHZvaWQgMCE9PW58fHQgaW4gZSl8fChlW3RdPW4pfWZ1bmN0aW9uIEIoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihnZShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIFUoZSx0KXtyZXR1cm4gZSYmcmUodCxPZSh0KSxlKX1mdW5jdGlvbiBHKGUsdCxuLHIsbyxpLGEpe3ZhciBsO2lmKHImJihsPWk/cihlLG8saSxhKTpyKGUpKSx2b2lkIDAhPT1sKXJldHVybiBsO2lmKCFBZShlKSlyZXR1cm4gZTt2YXIgdT1XdChlKTtpZih1KXtpZihsPWxlKGUpLCF0KXJldHVybiBuZShlLGwpfWVsc2V7dmFyIGQ9VnQoZSksXz1kPT1rZXx8ZD09SWU7aWYoWXQoZSkpcmV0dXJuIEsoZSx0KTtpZihkPT1IZXx8ZD09RGV8fF8mJiFpKXtpZihjKGUpKXJldHVybiBpP2U6e307aWYobD11ZShfP3t9OmUpLCF0KXJldHVybiBvZShlLFUobCxlKSl9ZWxzZXtpZighb3RbZF0pcmV0dXJuIGk/ZTp7fTtsPWNlKGUsZCxHLHQpfX1hfHwoYT1uZXcgdyk7dmFyIHA9YS5nZXQoZSk7aWYocClyZXR1cm4gcDtpZihhLnNldChlLGwpLCF1KXZhciBmPW4/c2UoZSk6T2UoZSk7cmV0dXJuIHMoZnx8ZSxmdW5jdGlvbihvLHMpe2YmJihzPW8sbz1lW3NdKSxGKGwscyxHKG8sdCxuLHIscyxlLGEpKX0pLGx9ZnVuY3Rpb24geihlKXtyZXR1cm4gQWUoZSk/Q3QoZSk6e319ZnVuY3Rpb24gVihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gV3QoZSk/cjppKHIsbihlKSl9ZnVuY3Rpb24gVyhlKXtyZXR1cm4gYnQuY2FsbChlKX1mdW5jdGlvbiBZKGUpe3JldHVybiEoIUFlKGUpfHxwZShlKSkmJih2ZShlKXx8YyhlKT9FdDpudCkudGVzdChtZShlKSl9ZnVuY3Rpb24gcShlKXtpZighZmUoZSkpcmV0dXJuIHh0KGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPYmplY3QoZSkpZ3QuY2FsbChlLG4pJiYiY29uc3RydWN0b3IiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gSyhlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCk7cmV0dXJuIGUuY29weShuKSxufWZ1bmN0aW9uIFgoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IFR0KHQpLnNldChuZXcgVHQoZSkpLHR9ZnVuY3Rpb24gJChlLHQpe3ZhciBuPXQ/WChlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gUShlLHQsbil7cmV0dXJuIGEodD9uKGQoZSksITApOmQoZSkscixuZXcgZS5jb25zdHJ1Y3Rvcil9ZnVuY3Rpb24gSihlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLnNvdXJjZSx0dC5leGVjKGUpKTtyZXR1cm4gdC5sYXN0SW5kZXg9ZS5sYXN0SW5kZXgsdH1mdW5jdGlvbiBaKGUsdCxuKXtyZXR1cm4gYSh0P24ocChlKSwhMCk6cChlKSxvLG5ldyBlLmNvbnN0cnVjdG9yKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gR3Q/T2JqZWN0KEd0LmNhbGwoZSkpOnt9fWZ1bmN0aW9uIHRlKGUsdCl7dmFyIG49dD9YKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIG5lKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aDtmb3IodHx8KHQ9QXJyYXkocikpOysrbjxyOyl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gcmUoZSx0LG4scil7bnx8KG49e30pO2Zvcih2YXIgbz0tMSxzPXQubGVuZ3RoOysrbzxzOyl7dmFyIGk9dFtvXSxhPXI/cihuW2ldLGVbaV0saSxuLGUpOnZvaWQgMDtGKG4saSx2b2lkIDA9PT1hP2VbaV06YSl9cmV0dXJuIG59ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gcmUoZSx6dChlKSx0KX1mdW5jdGlvbiBzZShlKXtyZXR1cm4gVihlLE9lLHp0KX1mdW5jdGlvbiBpZShlLHQpe3ZhciBuPWUuX19kYXRhX187cmV0dXJuIF9lKHQpP25bInN0cmluZyI9PXR5cGVvZiB0PyJzdHJpbmciOiJoYXNoIl06bi5tYXB9ZnVuY3Rpb24gYWUoZSx0KXt2YXIgbj11KGUsdCk7cmV0dXJuIFkobik/bjp2b2lkIDB9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmNvbnN0cnVjdG9yKHQpO3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIGVbMF0mJmd0LmNhbGwoZSwiaW5kZXgiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59ZnVuY3Rpb24gdWUoZSl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fGZlKGUpP3t9OnooQXQoZSkpfWZ1bmN0aW9uIGNlKGUsdCxuLHIpe3ZhciBvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgemU6cmV0dXJuIFgoZSk7Y2FzZSB3ZTpjYXNlIE1lOnJldHVybiBuZXcgbygrZSk7Y2FzZSBWZTpyZXR1cm4gJChlLHIpO2Nhc2UgV2U6Y2FzZSBZZTpjYXNlIHFlOmNhc2UgS2U6Y2FzZSBYZTpjYXNlICRlOmNhc2UgUWU6Y2FzZSBKZTpjYXNlIFplOnJldHVybiB0ZShlLHIpO2Nhc2UgUGU6cmV0dXJuIFEoZSxyLG4pO2Nhc2UgTmU6Y2FzZSBVZTpyZXR1cm4gbmV3IG8oZSk7Y2FzZSBGZTpyZXR1cm4gSihlKTtjYXNlIEJlOnJldHVybiBaKGUscixuKTtjYXNlIEdlOnJldHVybiBlZShlKX19ZnVuY3Rpb24gZGUoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/TGU6dCkmJigibnVtYmVyIj09dHlwZW9mIGV8fHJ0LnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBfZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfWZ1bmN0aW9uIHBlKGUpe3JldHVybiEhbXQmJm10IGluIGV9ZnVuY3Rpb24gZmUoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PSgiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fHB0KX1mdW5jdGlvbiBtZShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIGh0LmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifWZ1bmN0aW9uIGhlKGUpe3JldHVybiBHKGUsITAsITApfWZ1bmN0aW9uIGdlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIHllKGUpJiZndC5jYWxsKGUsImNhbGxlZSIpJiYoIU90LmNhbGwoZSwiY2FsbGVlIil8fGJ0LmNhbGwoZSk9PURlKX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gbnVsbCE9ZSYmVGUoZS5sZW5ndGgpJiYhdmUoZSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIENlKGUpJiZFZShlKX1mdW5jdGlvbiB2ZShlKXt2YXIgdD1BZShlKT9idC5jYWxsKGUpOiIiO3JldHVybiB0PT1rZXx8dD09SWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PUxlfWZ1bmN0aW9uIEFlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX1mdW5jdGlvbiBDZShlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gRWUoZSk/SChlKTpxKGUpfWZ1bmN0aW9uIFNlKCl7cmV0dXJuW119ZnVuY3Rpb24gUmUoKXtyZXR1cm4hMX12YXIgamU9MjAwLHhlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixMZT05MDA3MTk5MjU0NzQwOTkxLERlPSJbb2JqZWN0IEFyZ3VtZW50c10iLHdlPSJbb2JqZWN0IEJvb2xlYW5dIixNZT0iW29iamVjdCBEYXRlXSIsa2U9IltvYmplY3QgRnVuY3Rpb25dIixJZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFBlPSJbb2JqZWN0IE1hcF0iLE5lPSJbb2JqZWN0IE51bWJlcl0iLEhlPSJbb2JqZWN0IE9iamVjdF0iLEZlPSJbb2JqZWN0IFJlZ0V4cF0iLEJlPSJbb2JqZWN0IFNldF0iLFVlPSJbb2JqZWN0IFN0cmluZ10iLEdlPSJbb2JqZWN0IFN5bWJvbF0iLHplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVmU9IltvYmplY3QgRGF0YVZpZXddIixXZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixxZT0iW29iamVjdCBJbnQ4QXJyYXldIixLZT0iW29iamVjdCBJbnQxNkFycmF5XSIsWGU9IltvYmplY3QgSW50MzJBcnJheV0iLCRlPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixRZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsWmU9IltvYmplY3QgVWludDMyQXJyYXldIixldD0vW1xcXiQuKis/KClbXF17fXxdL2csdHQ9L1x3KiQvLG50PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHJ0PS9eKD86MHxbMS05XVxkKikkLyxvdD17fTtvdFtEZV09b3RbIltvYmplY3QgQXJyYXldIl09b3RbemVdPW90W1ZlXT1vdFt3ZV09b3RbTWVdPW90W1dlXT1vdFtZZV09b3RbcWVdPW90W0tlXT1vdFtYZV09b3RbUGVdPW90W05lXT1vdFtIZV09b3RbRmVdPW90W0JlXT1vdFtVZV09b3RbR2VdPW90WyRlXT1vdFtRZV09b3RbSmVdPW90W1plXT0hMCxvdFsiW29iamVjdCBFcnJvcl0iXT1vdFtrZV09b3RbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgc3Q9Im9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSxpdD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGF0PXN0fHxpdHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxsdD0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LHV0PWx0JiYib2JqZWN0Ij09dHlwZW9mIG4mJm4mJiFuLm5vZGVUeXBlJiZuLGN0PXV0JiZ1dC5leHBvcnRzPT09bHQsZHQ9QXJyYXkucHJvdG90eXBlLF90PUZ1bmN0aW9uLnByb3RvdHlwZSxwdD1PYmplY3QucHJvdG90eXBlLGZ0PWF0WyJfX2NvcmUtanNfc2hhcmVkX18iXSxtdD1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoZnQmJmZ0LmtleXMmJmZ0LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCksaHQ9X3QudG9TdHJpbmcsZ3Q9cHQuaGFzT3duUHJvcGVydHksYnQ9cHQudG9TdHJpbmcsRXQ9UmVnRXhwKCJeIitodC5jYWxsKGd0KS5yZXBsYWNlKGV0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLHl0PWN0P2F0LkJ1ZmZlcjp2b2lkIDAsdnQ9YXQuU3ltYm9sLFR0PWF0LlVpbnQ4QXJyYXksQXQ9XyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxDdD1PYmplY3QuY3JlYXRlLE90PXB0LnByb3BlcnR5SXNFbnVtZXJhYmxlLFN0PWR0LnNwbGljZSxSdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGp0PXl0P3l0LmlzQnVmZmVyOnZvaWQgMCx4dD1fKE9iamVjdC5rZXlzLE9iamVjdCksTHQ9YWUoYXQsIkRhdGFWaWV3IiksRHQ9YWUoYXQsIk1hcCIpLHd0PWFlKGF0LCJQcm9taXNlIiksTXQ9YWUoYXQsIlNldCIpLGt0PWFlKGF0LCJXZWFrTWFwIiksSXQ9YWUoT2JqZWN0LCJjcmVhdGUiKSxQdD1tZShMdCksTnQ9bWUoRHQpLEh0PW1lKHd0KSxGdD1tZShNdCksQnQ9bWUoa3QpLFV0PXZ0P3Z0LnByb3RvdHlwZTp2b2lkIDAsR3Q9VXQ/VXQudmFsdWVPZjp2b2lkIDA7Zi5wcm90b3R5cGUuY2xlYXI9bSxmLnByb3RvdHlwZS5kZWxldGU9aCxmLnByb3RvdHlwZS5nZXQ9ZyxmLnByb3RvdHlwZS5oYXM9YixmLnByb3RvdHlwZS5zZXQ9RSx5LnByb3RvdHlwZS5jbGVhcj12LHkucHJvdG90eXBlLmRlbGV0ZT1ULHkucHJvdG90eXBlLmdldD1BLHkucHJvdG90eXBlLmhhcz1DLHkucHJvdG90eXBlLnNldD1PLFMucHJvdG90eXBlLmNsZWFyPVIsUy5wcm90b3R5cGUuZGVsZXRlPWosUy5wcm90b3R5cGUuZ2V0PXgsUy5wcm90b3R5cGUuaGFzPUwsUy5wcm90b3R5cGUuc2V0PUQsdy5wcm90b3R5cGUuY2xlYXI9TSx3LnByb3RvdHlwZS5kZWxldGU9ayx3LnByb3RvdHlwZS5nZXQ9SSx3LnByb3RvdHlwZS5oYXM9UCx3LnByb3RvdHlwZS5zZXQ9Tjt2YXIgenQ9UnQ/XyhSdCxPYmplY3QpOlNlLFZ0PVc7KEx0JiZWdChuZXcgTHQobmV3IEFycmF5QnVmZmVyKDEpKSkhPVZlfHxEdCYmVnQobmV3IER0KSE9UGV8fHd0JiYiW29iamVjdCBQcm9taXNlXSIhPVZ0KHd0LnJlc29sdmUoKSl8fE10JiZWdChuZXcgTXQpIT1CZXx8a3QmJiJbb2JqZWN0IFdlYWtNYXBdIiE9VnQobmV3IGt0KSkmJihWdD1mdW5jdGlvbihlKXt2YXIgdD1idC5jYWxsKGUpLG49dD09SGU/ZS5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP21lKG4pOnZvaWQgMDtpZihyKXN3aXRjaChyKXtjYXNlIFB0OnJldHVybiBWZTtjYXNlIE50OnJldHVybiBQZTtjYXNlIEh0OnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIEZ0OnJldHVybiBCZTtjYXNlIEJ0OnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pO3ZhciBXdD1BcnJheS5pc0FycmF5LFl0PWp0fHxSZTtuLmV4cG9ydHM9aGV9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2guZXNjYXBlcmVnZXhwL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKG8oZSkpcmV0dXJuIGI/Yi5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1hPyItMCI6dH1mdW5jdGlvbiByKGUpe3JldHVybiEhZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxyKGUpJiZtLmNhbGwoZSk9PWx9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbD09ZT8iIjpuKGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGU9cyhlKSxlJiZjLnRlc3QoZSk/ZS5yZXBsYWNlKHUsIlxcJCYiKTplfXZhciBhPTEvMCxsPSJbb2JqZWN0IFN5bWJvbF0iLHU9L1tcXF4kLiorPygpW1xde318XS9nLGM9UmVnRXhwKHUuc291cmNlKSxkPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsXz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHA9ZHx8X3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxmPU9iamVjdC5wcm90b3R5cGUsbT1mLnRvU3RyaW5nLGg9cC5TeW1ib2wsZz1oP2gucHJvdG90eXBlOnZvaWQgMCxiPWc/Zy50b1N0cmluZzp2b2lkIDA7ZS5leHBvcnRzPWl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5ldmVyeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1lP2UubGVuZ3RoOjA7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZT9lLmxlbmd0aDowOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZSsiIil9Y2F0Y2goZSl7fXJldHVybiB0fWZ1bmN0aW9uIHUoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSxufWZ1bmN0aW9uIGMoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7blsrK3RdPWV9KSxufWZ1bmN0aW9uIGQoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gXygpe3RoaXMuX19kYXRhX189enQ/enQobnVsbCk6e319ZnVuY3Rpb24gcChlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZih6dCl7dmFyIG49dFtlXTtyZXR1cm4gbj09PUZlP3ZvaWQgMDpufXJldHVybiBMdC5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9ZnVuY3Rpb24gbShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiB6dD92b2lkIDAhPT10W2VdOkx0LmNhbGwodCxlKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09enQmJnZvaWQgMD09PXQ/RmU6dCx0aGlzfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gYigpe3RoaXMuX19kYXRhX189W119ZnVuY3Rpb24gRShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Rih0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTpQdC5jYWxsKHQsbiwxKSwhMCl9ZnVuY3Rpb24geShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Rih0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19ZnVuY3Rpb24gdihlKXtyZXR1cm4gRih0aGlzLl9fZGF0YV9fLGUpPi0xfWZ1bmN0aW9uIFQoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9RihuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc31mdW5jdGlvbiBBKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIEMoKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBkLG1hcDpuZXcoRnR8fGcpLHN0cmluZzpuZXcgZH19ZnVuY3Rpb24gTyhlKXtyZXR1cm4gaWUodGhpcyxlKS5kZWxldGUoZSl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gaWUodGhpcyxlKS5nZXQoZSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gaWUodGhpcyxlKS5oYXMoZSl9ZnVuY3Rpb24gaihlLHQpe3JldHVybiBpZSh0aGlzLGUpLnNldChlLHQpLHRoaXN9ZnVuY3Rpb24geChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgQTsrK3Q8bjspdGhpcy5hZGQoZVt0XSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxGZSksdGhpc31mdW5jdGlvbiBEKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiB3KGUpe3RoaXMuX19kYXRhX189bmV3IGcoZSl9ZnVuY3Rpb24gTSgpe3RoaXMuX19kYXRhX189bmV3IGd9ZnVuY3Rpb24gayhlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5kZWxldGUoZSl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9ZnVuY3Rpb24gTihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIGcpe3ZhciByPW4uX19kYXRhX187aWYoIUZ0fHxyLmxlbmd0aDxOZS0xKXJldHVybiByLnB1c2goW2UsdF0pLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBBKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXN9ZnVuY3Rpb24gSChlLHQpe3ZhciBuPW5uKGUpfHxBZShlKT9pKGUubGVuZ3RoLFN0cmluZyk6W10scj1uLmxlbmd0aCxvPSEhcjtmb3IodmFyIHMgaW4gZSkhdCYmIUx0LmNhbGwoZSxzKXx8byYmKCJsZW5ndGgiPT1zfHxjZShzLHIpKXx8bi5wdXNoKHMpO3JldHVybiBufWZ1bmN0aW9uIEYoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihUZShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gSnQoZSxmdW5jdGlvbihlLHIsbyl7cmV0dXJuIG49ISF0KGUscixvKX0pLG59ZnVuY3Rpb24gVShlLHQpe3JldHVybiBlJiZadChlLHQsa2UpfWZ1bmN0aW9uIEcoZSx0KXt0PV9lKHQsZSk/W3RdOm5lKHQpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbYmUodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTp2b2lkIDB9ZnVuY3Rpb24geihlKXtyZXR1cm4gRHQuY2FsbChlKX1mdW5jdGlvbiBWKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIFcoZSx0LG4scixvKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhamUoZSkmJiF4ZSh0KT9lIT09ZSYmdCE9PXQ6WShlLHQsVyxuLHIsbykpfWZ1bmN0aW9uIFkoZSx0LG4scixvLHMpe3ZhciBpPW5uKGUpLGE9bm4odCksdT1XZSxjPVdlO2l8fCh1PWVuKGUpLHU9dT09VmU/WmU6dSksYXx8KGM9ZW4odCksYz1jPT1WZT9aZTpjKTt2YXIgZD11PT1aZSYmIWwoZSksXz1jPT1aZSYmIWwodCkscD11PT1jO2lmKHAmJiFkKXJldHVybiBzfHwocz1uZXcgdyksaXx8cm4oZSk/cmUoZSx0LG4scixvLHMpOm9lKGUsdCx1LG4scixvLHMpO2lmKCEobyZVZSkpe3ZhciBmPWQmJkx0LmNhbGwoZSwiX193cmFwcGVkX18iKSxtPV8mJkx0LmNhbGwodCwiX193cmFwcGVkX18iKTtpZihmfHxtKXt2YXIgaD1mP2UudmFsdWUoKTplLGc9bT90LnZhbHVlKCk6dDtyZXR1cm4gc3x8KHM9bmV3IHcpLG4oaCxnLHIsbyxzKX19cmV0dXJuISFwJiYoc3x8KHM9bmV3IHcpLHNlKGUsdCxuLHIsbyxzKSl9ZnVuY3Rpb24gcShlLHQsbixyKXt2YXIgbz1uLmxlbmd0aCxzPW8saT0hcjtpZihudWxsPT1lKXJldHVybiFzO2ZvcihlPU9iamVjdChlKTtvLS07KXt2YXIgYT1uW29dO2lmKGkmJmFbMl0/YVsxXSE9PWVbYVswXV06IShhWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK288czspe2E9bltvXTt2YXIgbD1hWzBdLHU9ZVtsXSxjPWFbMV07aWYoaSYmYVsyXSl7aWYodm9pZCAwPT09dSYmIShsIGluIGUpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IHc7aWYocil2YXIgXz1yKHUsYyxsLGUsdCxkKTtpZighKHZvaWQgMD09PV8/VyhjLHUscixCZXxVZSxkKTpfKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSyhlKXtyZXR1cm4hKCFqZShlKXx8ZmUoZSkpJiYoU2UoZSl8fGwoZSk/d3Q6X3QpLnRlc3QoRWUoZSkpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIHhlKGUpJiZSZShlLmxlbmd0aCkmJiEhZnRbRHQuY2FsbChlKV19ZnVuY3Rpb24gJChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGw9PWU/SWU6Im9iamVjdCI9PXR5cGVvZiBlP25uKGUpP1ooZVswXSxlWzFdKTpKKGUpOlBlKGUpfWZ1bmN0aW9uIFEoZSl7aWYoIW1lKGUpKXJldHVybiBOdChlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKUx0LmNhbGwoZSxuKSYmImNvbnN0cnVjdG9yIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEooZSl7dmFyIHQ9YWUoZSk7cmV0dXJuIDE9PXQubGVuZ3RoJiZ0WzBdWzJdP2dlKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT1lfHxxKG4sZSx0KX19ZnVuY3Rpb24gWihlLHQpe3JldHVybiBfZShlKSYmaGUodCk/Z2UoYmUoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9d2UobixlKTtyZXR1cm4gdm9pZCAwPT09ciYmcj09PXQ/TWUobixlKTpXKHQscix2b2lkIDAsQmV8VWUpfX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcodCxlKX19ZnVuY3Rpb24gdGUoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKExlKGUpKXJldHVybiBRdD9RdC5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1HZT8iLTAiOnR9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG5uKGUpP2U6dG4oZSl9ZnVuY3Rpb24gcmUoZSx0LG4scixzLGkpe3ZhciBhPXMmVWUsbD1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKGwhPXUmJiEoYSYmdT5sKSlyZXR1cm4hMTt2YXIgYz1pLmdldChlKTtpZihjJiZpLmdldCh0KSlyZXR1cm4gYz09dDt2YXIgZD0tMSxfPSEwLHA9cyZCZT9uZXcgeDp2b2lkIDA7Zm9yKGkuc2V0KGUsdCksaS5zZXQodCxlKTsrK2Q8bDspe3ZhciBmPWVbZF0sbT10W2RdO2lmKHIpdmFyIGg9YT9yKG0sZixkLHQsZSxpKTpyKGYsbSxkLGUsdCxpKTtpZih2b2lkIDAhPT1oKXtpZihoKWNvbnRpbnVlO189ITE7YnJlYWt9aWYocCl7aWYoIW8odCxmdW5jdGlvbihlLHQpe2lmKCFwLmhhcyh0KSYmKGY9PT1lfHxuKGYsZSxyLHMsaSkpKXJldHVybiBwLmFkZCh0KX0pKXtfPSExO2JyZWFrfX1lbHNlIGlmKGYhPT1tJiYhbihmLG0scixzLGkpKXtfPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksX31mdW5jdGlvbiBvZShlLHQsbixyLG8scyxpKXtzd2l0Y2gobil7Y2FzZSBzdDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2Ugb3Q6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IXIobmV3IGt0KGUpLG5ldyBrdCh0KSkpO2Nhc2UgWWU6Y2FzZSBxZTpjYXNlIEplOnJldHVybiBUZSgrZSwrdCk7Y2FzZSBLZTpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2UgZXQ6Y2FzZSBudDpyZXR1cm4gZT09dCsiIjtjYXNlIFFlOnZhciBhPXU7Y2FzZSB0dDp2YXIgbD1zJlVlO2lmKGF8fChhPWMpLGUuc2l6ZSE9dC5zaXplJiYhbClyZXR1cm4hMTt2YXIgZD1pLmdldChlKTtpZihkKXJldHVybiBkPT10O3N8PUJlLGkuc2V0KGUsdCk7dmFyIF89cmUoYShlKSxhKHQpLHIsbyxzLGkpO3JldHVybiBpLmRlbGV0ZShlKSxfO2Nhc2UgcnQ6aWYoJHQpcmV0dXJuICR0LmNhbGwoZSk9PSR0LmNhbGwodCl9cmV0dXJuITF9ZnVuY3Rpb24gc2UoZSx0LG4scixvLHMpe3ZhciBpPW8mVWUsYT1rZShlKSxsPWEubGVuZ3RoO2lmKGwhPWtlKHQpLmxlbmd0aCYmIWkpcmV0dXJuITE7Zm9yKHZhciB1PWw7dS0tOyl7dmFyIGM9YVt1XTtpZighKGk/YyBpbiB0Okx0LmNhbGwodCxjKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQoZSk7aWYoZCYmcy5nZXQodCkpcmV0dXJuIGQ9PXQ7dmFyIF89ITA7cy5zZXQoZSx0KSxzLnNldCh0LGUpO2Zvcih2YXIgcD1pOysrdTxsOyl7Yz1hW3VdO3ZhciBmPWVbY10sbT10W2NdO2lmKHIpdmFyIGg9aT9yKG0sZixjLHQsZSxzKTpyKGYsbSxjLGUsdCxzKTtpZighKHZvaWQgMD09PWg/Zj09PW18fG4oZixtLHIsbyxzKTpoKSl7Xz0hMTticmVha31wfHwocD0iY29uc3RydWN0b3IiPT1jKX1pZihfJiYhcCl7dmFyIGc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7ZyE9YiYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBnJiZnIGluc3RhbmNlb2YgZyYmImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBiKSYmKF89ITEpfXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxffWZ1bmN0aW9uIGllKGUsdCl7dmFyIG49ZS5fX2RhdGFfXztyZXR1cm4gcGUodCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH1mdW5jdGlvbiBhZShlKXtmb3IodmFyIHQ9a2UoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8saGUobyldfXJldHVybiB0fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49YShlLHQpO3JldHVybiBLKG4pP246dm9pZCAwfWZ1bmN0aW9uIHVlKGUsdCxuKXt0PV9lKHQsZSk/W3RdOm5lKHQpO2Zvcih2YXIgcixvPS0xLHM9dC5sZW5ndGg7KytvPHM7KXt2YXIgaT1iZSh0W29dKTtpZighKHI9bnVsbCE9ZSYmbihlLGkpKSlicmVhaztlPWVbaV19aWYocilyZXR1cm4gcjt2YXIgcz1lP2UubGVuZ3RoOjA7cmV0dXJuISFzJiZSZShzKSYmY2UoaSxzKSYmKG5uKGUpfHxBZShlKSl9ZnVuY3Rpb24gY2UoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/emU6dCkmJigibnVtYmVyIj09dHlwZW9mIGV8fHB0LnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBkZShlLHQsbil7aWYoIWplKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1yP0NlKG4pJiZjZSh0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmVGUoblt0XSxlKX1mdW5jdGlvbiBfZShlLHQpe2lmKG5uKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPWUmJiFMZShlKSl8fChhdC50ZXN0KGUpfHwhaXQudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBPYmplY3QodCkpfWZ1bmN0aW9uIHBlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiJzdHJpbmciPT10fHwibnVtYmVyIj09dHx8InN5bWJvbCI9PXR8fCJib29sZWFuIj09dD8iX19wcm90b19fIiE9PWU6bnVsbD09PWV9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuISFqdCYmanQgaW4gZX1mdW5jdGlvbiBtZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8U3QpfWZ1bmN0aW9uIGhlKGUpe3JldHVybiBlPT09ZSYmIWplKGUpfWZ1bmN0aW9uIGdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiYobltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChuKSkpfX1mdW5jdGlvbiBiZShlKXtpZigic3RyaW5nIj09dHlwZW9mIGV8fExlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1HZT8iLTAiOnR9ZnVuY3Rpb24gRWUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiB4dC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2goZSl7fX1yZXR1cm4iIn1mdW5jdGlvbiB5ZShlLHQsbil7dmFyIG89bm4oZSk/cjpCO3JldHVybiBuJiZkZShlLHQsbikmJih0PXZvaWQgMCksbyhlLCQodCwzKSl9ZnVuY3Rpb24gdmUoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihIZSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLHM9bi5jYWNoZTtpZihzLmhhcyhvKSlyZXR1cm4gcy5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPXMuc2V0KG8saSksaX07cmV0dXJuIG4uY2FjaGU9bmV3KHZlLkNhY2hlfHxBKSxufWZ1bmN0aW9uIFRlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIE9lKGUpJiZMdC5jYWxsKGUsImNhbGxlZSIpJiYoIUl0LmNhbGwoZSwiY2FsbGVlIil8fER0LmNhbGwoZSk9PVZlKX1mdW5jdGlvbiBDZShlKXtyZXR1cm4gbnVsbCE9ZSYmUmUoZS5sZW5ndGgpJiYhU2UoZSl9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIHhlKGUpJiZDZShlKX1mdW5jdGlvbiBTZShlKXt2YXIgdD1qZShlKT9EdC5jYWxsKGUpOiIiO3JldHVybiB0PT1YZXx8dD09JGV9ZnVuY3Rpb24gUmUoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PXplfWZ1bmN0aW9uIGplKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBMZShlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGV8fHhlKGUpJiZEdC5jYWxsKGUpPT1ydH1mdW5jdGlvbiBEZShlKXtyZXR1cm4gbnVsbD09ZT8iIjp0ZShlKX1mdW5jdGlvbiB3ZShlLHQsbil7dmFyIHI9bnVsbD09ZT92b2lkIDA6RyhlLHQpO3JldHVybiB2b2lkIDA9PT1yP246cn1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBudWxsIT1lJiZ1ZShlLHQsVil9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIENlKGUpP0goZSk6UShlKX1mdW5jdGlvbiBJZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gX2UoZSk/cyhiZShlKSk6ZWUoZSl9dmFyIE5lPTIwMCxIZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsRmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEJlPTEsVWU9MixHZT0xLzAsemU9OTAwNzE5OTI1NDc0MDk5MSxWZT0iW29iamVjdCBBcmd1bWVudHNdIixXZT0iW29iamVjdCBBcnJheV0iLFllPSJbb2JqZWN0IEJvb2xlYW5dIixxZT0iW29iamVjdCBEYXRlXSIsS2U9IltvYmplY3QgRXJyb3JdIixYZT0iW29iamVjdCBGdW5jdGlvbl0iLCRlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsUWU9IltvYmplY3QgTWFwXSIsSmU9IltvYmplY3QgTnVtYmVyXSIsWmU9IltvYmplY3QgT2JqZWN0XSIsZXQ9IltvYmplY3QgUmVnRXhwXSIsdHQ9IltvYmplY3QgU2V0XSIsbnQ9IltvYmplY3QgU3RyaW5nXSIscnQ9IltvYmplY3QgU3ltYm9sXSIsb3Q9IltvYmplY3QgQXJyYXlCdWZmZXJdIixzdD0iW29iamVjdCBEYXRhVmlld10iLGl0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGF0PS9eXHcqJC8sbHQ9L15cLi8sdXQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csY3Q9L1tcXF4kLiorPygpW1xde318XS9nLGR0PS9cXChcXCk/L2csX3Q9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8scHQ9L14oPzowfFsxLTldXGQqKSQvLGZ0PXt9O2Z0WyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1mdFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09ZnRbIltvYmplY3QgSW50OEFycmF5XSJdPWZ0WyJbb2JqZWN0IEludDE2QXJyYXldIl09ZnRbIltvYmplY3QgSW50MzJBcnJheV0iXT1mdFsiW29iamVjdCBVaW50OEFycmF5XSJdPWZ0WyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWZ0WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWZ0WyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGZ0W1ZlXT1mdFtXZV09ZnRbb3RdPWZ0W1llXT1mdFtzdF09ZnRbcWVdPWZ0W0tlXT1mdFtYZV09ZnRbUWVdPWZ0W0plXT1mdFtaZV09ZnRbZXRdPWZ0W3R0XT1mdFtudF09ZnRbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgbXQ9Im9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSxodD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGd0PW10fHxodHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxidD0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LEV0PWJ0JiYib2JqZWN0Ij09dHlwZW9mIG4mJm4mJiFuLm5vZGVUeXBlJiZuLHl0PUV0JiZFdC5leHBvcnRzPT09YnQsdnQ9eXQmJm10LnByb2Nlc3MsVHQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHZ0JiZ2dC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goZSl7fX0oKSxBdD1UdCYmVHQuaXNUeXBlZEFycmF5LEN0PUFycmF5LnByb3RvdHlwZSxPdD1GdW5jdGlvbi5wcm90b3R5cGUsU3Q9T2JqZWN0LnByb3RvdHlwZSxSdD1ndFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sanQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKFJ0JiZSdC5rZXlzJiZSdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpLHh0PU90LnRvU3RyaW5nLEx0PVN0Lmhhc093blByb3BlcnR5LER0PVN0LnRvU3RyaW5nLHd0PVJlZ0V4cCgiXiIreHQuY2FsbChMdCkucmVwbGFjZShjdCwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxNdD1ndC5TeW1ib2wsa3Q9Z3QuVWludDhBcnJheSxJdD1TdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQdD1DdC5zcGxpY2UsTnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLEh0PWxlKGd0LCJEYXRhVmlldyIpLEZ0PWxlKGd0LCJNYXAiKSxCdD1sZShndCwiUHJvbWlzZSIpLFV0PWxlKGd0LCJTZXQiKSxHdD1sZShndCwiV2Vha01hcCIpLHp0PWxlKE9iamVjdCwiY3JlYXRlIiksVnQ9RWUoSHQpLFd0PUVlKEZ0KSxZdD1FZShCdCkscXQ9RWUoVXQpLEt0PUVlKEd0KSxYdD1NdD9NdC5wcm90b3R5cGU6dm9pZCAwLCR0PVh0P1h0LnZhbHVlT2Y6dm9pZCAwLFF0PVh0P1h0LnRvU3RyaW5nOnZvaWQgMDtkLnByb3RvdHlwZS5jbGVhcj1fLGQucHJvdG90eXBlLmRlbGV0ZT1wLGQucHJvdG90eXBlLmdldD1mLGQucHJvdG90eXBlLmhhcz1tLGQucHJvdG90eXBlLnNldD1oLGcucHJvdG90eXBlLmNsZWFyPWIsZy5wcm90b3R5cGUuZGVsZXRlPUUsZy5wcm90b3R5cGUuZ2V0PXksZy5wcm90b3R5cGUuaGFzPXYsZy5wcm90b3R5cGUuc2V0PVQsQS5wcm90b3R5cGUuY2xlYXI9QyxBLnByb3RvdHlwZS5kZWxldGU9TyxBLnByb3RvdHlwZS5nZXQ9UyxBLnByb3RvdHlwZS5oYXM9UixBLnByb3RvdHlwZS5zZXQ9aix4LnByb3RvdHlwZS5hZGQ9eC5wcm90b3R5cGUucHVzaD1MLHgucHJvdG90eXBlLmhhcz1ELHcucHJvdG90eXBlLmNsZWFyPU0sdy5wcm90b3R5cGUuZGVsZXRlPWssdy5wcm90b3R5cGUuZ2V0PUksdy5wcm90b3R5cGUuaGFzPVAsdy5wcm90b3R5cGUuc2V0PU47dmFyIEp0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighQ2UobikpcmV0dXJuIGUobixyKTtmb3IodmFyIG89bi5sZW5ndGgscz10P286LTEsaT1PYmplY3Qobik7KHQ/cy0tOisrczxvKSYmITEhPT1yKGlbc10scyxpKTspO3JldHVybiBufX0oVSksWnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEscz1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGw9aVtlP2E6KytvXTtpZighMT09PW4oc1tsXSxsLHMpKWJyZWFrfXJldHVybiB0fX0oKSxlbj16OyhIdCYmZW4obmV3IEh0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1zdHx8RnQmJmVuKG5ldyBGdCkhPVFlfHxCdCYmIltvYmplY3QgUHJvbWlzZV0iIT1lbihCdC5yZXNvbHZlKCkpfHxVdCYmZW4obmV3IFV0KSE9dHR8fEd0JiYiW29iamVjdCBXZWFrTWFwXSIhPWVuKG5ldyBHdCkpJiYoZW49ZnVuY3Rpb24oZSl7dmFyIHQ9RHQuY2FsbChlKSxuPXQ9PVplP2UuY29uc3RydWN0b3I6dm9pZCAwLHI9bj9FZShuKTp2b2lkIDA7aWYocilzd2l0Y2gocil7Y2FzZSBWdDpyZXR1cm4gc3Q7Y2FzZSBXdDpyZXR1cm4gUWU7Y2FzZSBZdDpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBxdDpyZXR1cm4gdHQ7Y2FzZSBLdDpyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9cmV0dXJuIHR9KTt2YXIgdG49dmUoZnVuY3Rpb24oZSl7ZT1EZShlKTt2YXIgdD1bXTtyZXR1cm4gbHQudGVzdChlKSYmdC5wdXNoKCIiKSxlLnJlcGxhY2UodXQsZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKGR0LCIkMSIpOm58fGUpfSksdH0pO3ZlLkNhY2hlPUE7dmFyIG5uPUFycmF5LmlzQXJyYXkscm49QXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX0oQXQpOlg7bi5leHBvcnRzPXllfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmZpbHRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1lP2UubGVuZ3RoOjAsbz0wLHM9W107KytuPHI7KXt2YXIgaT1lW25dO3QoaSxuLGUpJiYoc1tvKytdPWkpfXJldHVybiBzfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49LTEscj1lP2UubGVuZ3RoOjA7KytuPHI7KWlmKHQoZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19ZnVuY3Rpb24gbChlKXt2YXIgdD0hMTtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlKyIiKX1jYXRjaChlKXt9cmV0dXJuIHR9ZnVuY3Rpb24gdShlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pLG59ZnVuY3Rpb24gYyhlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtuWysrdF09ZX0pLG59ZnVuY3Rpb24gZChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBfKCl7dGhpcy5fX2RhdGFfXz1HdD9HdChudWxsKTp7fX1mdW5jdGlvbiBwKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19ZnVuY3Rpb24gZihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKEd0KXt2YXIgbj10W2VdO3JldHVybiBuPT09SGU/dm9pZCAwOm59cmV0dXJuIHh0LmNhbGwodCxlKT90W2VdOnZvaWQgMH1mdW5jdGlvbiBtKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIEd0P3ZvaWQgMCE9PXRbZV06eHQuY2FsbCh0LGUpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tlXT1HdCYmdm9pZCAwPT09dD9IZTp0LHRoaXN9ZnVuY3Rpb24gZyhlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBiKCl7dGhpcy5fX2RhdGFfXz1bXX1mdW5jdGlvbiBFKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1GKHQsZSk7cmV0dXJuIShuPDApJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOkl0LmNhbGwodCxuLDEpLCEwKX1mdW5jdGlvbiB5KGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1GKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX1mdW5jdGlvbiB2KGUpe3JldHVybiBGKHRoaXMuX19kYXRhX18sZSk+LTF9ZnVuY3Rpb24gVChlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1GKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gQygpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGQsbWFwOm5ldyhIdHx8Zyksc3RyaW5nOm5ldyBkfX1mdW5jdGlvbiBPKGUpe3JldHVybiBpZSh0aGlzLGUpLmRlbGV0ZShlKX1mdW5jdGlvbiBTKGUpe3JldHVybiBpZSh0aGlzLGUpLmdldChlKX1mdW5jdGlvbiBSKGUpe3JldHVybiBpZSh0aGlzLGUpLmhhcyhlKX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJuIGllKHRoaXMsZSkuc2V0KGUsdCksdGhpc31mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBBOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiBMKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLEhlKSx0aGlzfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWZ1bmN0aW9uIHcoZSl7dGhpcy5fX2RhdGFfXz1uZXcgZyhlKX1mdW5jdGlvbiBNKCl7dGhpcy5fX2RhdGFfXz1uZXcgZ31mdW5jdGlvbiBrKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmRlbGV0ZShlKX1mdW5jdGlvbiBJKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1mdW5jdGlvbiBQKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiBOKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgZyl7dmFyIHI9bi5fX2RhdGFfXztpZighSHR8fHIubGVuZ3RoPFBlLTEpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcztuPXRoaXMuX19kYXRhX189bmV3IEEocil9cmV0dXJuIG4uc2V0KGUsdCksdGhpc31mdW5jdGlvbiBIKGUsdCl7dmFyIG49dG4oZSl8fFRlKGUpP2koZS5sZW5ndGgsU3RyaW5nKTpbXSxyPW4ubGVuZ3RoLG89ISFyO2Zvcih2YXIgcyBpbiBlKSF0JiYheHQuY2FsbChlLHMpfHxvJiYoImxlbmd0aCI9PXN8fGNlKHMscikpfHxuLnB1c2gocyk7cmV0dXJuIG59ZnVuY3Rpb24gRihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKHZlKGVbbl1bMF0sdCkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gQihlLHQpe3ZhciBuPVtdO3JldHVybiBRdChlLGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSksbn1mdW5jdGlvbiBVKGUsdCl7cmV0dXJuIGUmJkp0KGUsdCxNZSl9ZnVuY3Rpb24gRyhlLHQpe3Q9ZGUodCxlKT9bdF06bmUodCk7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtudWxsIT1lJiZuPHI7KWU9ZVtnZSh0W24rK10pXTtyZXR1cm4gbiYmbj09cj9lOnZvaWQgMH1mdW5jdGlvbiB6KGUpe3JldHVybiBMdC5jYWxsKGUpfWZ1bmN0aW9uIFYoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9ZnVuY3Rpb24gVyhlLHQsbixyLG8pe3JldHVybiBlPT09dHx8KG51bGw9PWV8fG51bGw9PXR8fCFSZShlKSYmIWplKHQpP2UhPT1lJiZ0IT09dDpZKGUsdCxXLG4scixvKSl9ZnVuY3Rpb24gWShlLHQsbixyLG8scyl7dmFyIGk9dG4oZSksYT10bih0KSx1PVZlLGM9VmU7aXx8KHU9WnQoZSksdT11PT16ZT9KZTp1KSxhfHwoYz1adCh0KSxjPWM9PXplP0plOmMpO3ZhciBkPXU9PUplJiYhbChlKSxfPWM9PUplJiYhbCh0KSxwPXU9PWM7aWYocCYmIWQpcmV0dXJuIHN8fChzPW5ldyB3KSxpfHxubihlKT9yZShlLHQsbixyLG8scyk6b2UoZSx0LHUsbixyLG8scyk7aWYoIShvJkJlKSl7dmFyIGY9ZCYmeHQuY2FsbChlLCJfX3dyYXBwZWRfXyIpLG09XyYmeHQuY2FsbCh0LCJfX3dyYXBwZWRfXyIpO2lmKGZ8fG0pe3ZhciBoPWY/ZS52YWx1ZSgpOmUsZz1tP3QudmFsdWUoKTp0O3JldHVybiBzfHwocz1uZXcgdyksbihoLGcscixvLHMpfX1yZXR1cm4hIXAmJihzfHwocz1uZXcgdyksc2UoZSx0LG4scixvLHMpKX1mdW5jdGlvbiBxKGUsdCxuLHIpe3ZhciBvPW4ubGVuZ3RoLHM9byxpPSFyO2lmKG51bGw9PWUpcmV0dXJuIXM7Zm9yKGU9T2JqZWN0KGUpO28tLTspe3ZhciBhPW5bb107aWYoaSYmYVsyXT9hWzFdIT09ZVthWzBdXTohKGFbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysrbzxzOyl7YT1uW29dO3ZhciBsPWFbMF0sdT1lW2xdLGM9YVsxXTtpZihpJiZhWzJdKXtpZih2b2lkIDA9PT11JiYhKGwgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgdztpZihyKXZhciBfPXIodSxjLGwsZSx0LGQpO2lmKCEodm9pZCAwPT09Xz9XKGMsdSxyLEZlfEJlLGQpOl8pKXJldHVybiExfX1yZXR1cm4hMH1mdW5jdGlvbiBLKGUpe3JldHVybiEoIVJlKGUpfHxwZShlKSkmJihPZShlKXx8bChlKT9EdDpkdCkudGVzdChiZShlKSl9ZnVuY3Rpb24gWChlKXtyZXR1cm4gamUoZSkmJlNlKGUubGVuZ3RoKSYmISFwdFtMdC5jYWxsKGUpXX1mdW5jdGlvbiAkKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbD09ZT9rZToib2JqZWN0Ij09dHlwZW9mIGU/dG4oZSk/WihlWzBdLGVbMV0pOkooZSk6SWUoZSl9ZnVuY3Rpb24gUShlKXtpZighZmUoZSkpcmV0dXJuIFB0KGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPYmplY3QoZSkpeHQuY2FsbChlLG4pJiYiY29uc3RydWN0b3IiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gSihlKXt2YXIgdD1hZShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/aGUodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fHEobixlLHQpfX1mdW5jdGlvbiBaKGUsdCl7cmV0dXJuIGRlKGUpJiZtZSh0KT9oZShnZShlKSx0KTpmdW5jdGlvbihuKXt2YXIgcj1EZShuLGUpO3JldHVybiB2b2lkIDA9PT1yJiZyPT09dD93ZShuLGUpOlcodCxyLHZvaWQgMCxGZXxCZSl9fWZ1bmN0aW9uIGVlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRyh0LGUpfX1mdW5jdGlvbiB0ZShlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoeGUoZSkpcmV0dXJuICR0PyR0LmNhbGwoZSk6IiI7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LVVlPyItMCI6dH1mdW5jdGlvbiBuZShlKXtyZXR1cm4gdG4oZSk/ZTplbihlKX1mdW5jdGlvbiByZShlLHQsbixyLHMsaSl7dmFyIGE9cyZCZSxsPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYobCE9dSYmIShhJiZ1PmwpKXJldHVybiExO3ZhciBjPWkuZ2V0KGUpO2lmKGMmJmkuZ2V0KHQpKXJldHVybiBjPT10O3ZhciBkPS0xLF89ITAscD1zJkZlP25ldyB4OnZvaWQgMDtmb3IoaS5zZXQoZSx0KSxpLnNldCh0LGUpOysrZDxsOyl7dmFyIGY9ZVtkXSxtPXRbZF07aWYocil2YXIgaD1hP3IobSxmLGQsdCxlLGkpOnIoZixtLGQsZSx0LGkpO2lmKHZvaWQgMCE9PWgpe2lmKGgpY29udGludWU7Xz0hMTticmVha31pZihwKXtpZighbyh0LGZ1bmN0aW9uKGUsdCl7aWYoIXAuaGFzKHQpJiYoZj09PWV8fG4oZixlLHIscyxpKSkpcmV0dXJuIHAuYWRkKHQpfSkpe189ITE7YnJlYWt9fWVsc2UgaWYoZiE9PW0mJiFuKGYsbSxyLHMsaSkpe189ITE7YnJlYWt9fXJldHVybiBpLmRlbGV0ZShlKSxpLmRlbGV0ZSh0KSxffWZ1bmN0aW9uIG9lKGUsdCxuLHIsbyxzLGkpe3N3aXRjaChuKXtjYXNlIG90OmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBydDpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhcihuZXcgTXQoZSksbmV3IE10KHQpKSk7Y2FzZSBXZTpjYXNlIFllOmNhc2UgUWU6cmV0dXJuIHZlKCtlLCt0KTtjYXNlIHFlOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBaZTpjYXNlIHR0OnJldHVybiBlPT10KyIiO2Nhc2UgJGU6dmFyIGE9dTtjYXNlIGV0OnZhciBsPXMmQmU7aWYoYXx8KGE9YyksZS5zaXplIT10LnNpemUmJiFsKXJldHVybiExO3ZhciBkPWkuZ2V0KGUpO2lmKGQpcmV0dXJuIGQ9PXQ7c3w9RmUsaS5zZXQoZSx0KTt2YXIgXz1yZShhKGUpLGEodCkscixvLHMsaSk7cmV0dXJuIGkuZGVsZXRlKGUpLF87Y2FzZSBudDppZihYdClyZXR1cm4gWHQuY2FsbChlKT09WHQuY2FsbCh0KX1yZXR1cm4hMX1mdW5jdGlvbiBzZShlLHQsbixyLG8scyl7dmFyIGk9byZCZSxhPU1lKGUpLGw9YS5sZW5ndGg7aWYobCE9TWUodCkubGVuZ3RoJiYhaSlyZXR1cm4hMTtmb3IodmFyIHU9bDt1LS07KXt2YXIgYz1hW3VdO2lmKCEoaT9jIGluIHQ6eHQuY2FsbCh0LGMpKSlyZXR1cm4hMX12YXIgZD1zLmdldChlKTtpZihkJiZzLmdldCh0KSlyZXR1cm4gZD09dDt2YXIgXz0hMDtzLnNldChlLHQpLHMuc2V0KHQsZSk7Zm9yKHZhciBwPWk7Kyt1PGw7KXtjPWFbdV07dmFyIGY9ZVtjXSxtPXRbY107aWYocil2YXIgaD1pP3IobSxmLGMsdCxlLHMpOnIoZixtLGMsZSx0LHMpO2lmKCEodm9pZCAwPT09aD9mPT09bXx8bihmLG0scixvLHMpOmgpKXtfPSExO2JyZWFrfXB8fChwPSJjb25zdHJ1Y3RvciI9PWMpfWlmKF8mJiFwKXt2YXIgZz1lLmNvbnN0cnVjdG9yLGI9dC5jb25zdHJ1Y3RvcjtnIT1iJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGcmJmcgaW5zdGFuY2VvZiBnJiYiZnVuY3Rpb24iPT10eXBlb2YgYiYmYiBpbnN0YW5jZW9mIGIpJiYoXz0hMSl9cmV0dXJuIHMuZGVsZXRlKGUpLHMuZGVsZXRlKHQpLF99ZnVuY3Rpb24gaWUoZSx0KXt2YXIgbj1lLl9fZGF0YV9fO3JldHVybiBfZSh0KT9uWyJzdHJpbmciPT10eXBlb2YgdD8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfWZ1bmN0aW9uIGFlKGUpe2Zvcih2YXIgdD1NZShlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3IsbyxtZShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gbGUoZSx0KXt2YXIgbj1hKGUsdCk7cmV0dXJuIEsobik/bjp2b2lkIDB9ZnVuY3Rpb24gdWUoZSx0LG4pe3Q9ZGUodCxlKT9bdF06bmUodCk7Zm9yKHZhciByLG89LTEscz10Lmxlbmd0aDsrK288czspe3ZhciBpPWdlKHRbb10pO2lmKCEocj1udWxsIT1lJiZuKGUsaSkpKWJyZWFrO2U9ZVtpXX1pZihyKXJldHVybiByO3ZhciBzPWU/ZS5sZW5ndGg6MDtyZXR1cm4hIXMmJlNlKHMpJiZjZShpLHMpJiYodG4oZSl8fFRlKGUpKX1mdW5jdGlvbiBjZShlLHQpe3JldHVybiEhKHQ9bnVsbD09dD9HZTp0KSYmKCJudW1iZXIiPT10eXBlb2YgZXx8X3QudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIGRlKGUsdCl7aWYodG4oZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9ZSYmIXhlKGUpKXx8KGl0LnRlc3QoZSl8fCFzdC50ZXN0KGUpfHxudWxsIT10JiZlIGluIE9iamVjdCh0KSl9ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuInN0cmluZyI9PXR8fCJudW1iZXIiPT10fHwic3ltYm9sIj09dHx8ImJvb2xlYW4iPT10PyJfX3Byb3RvX18iIT09ZTpudWxsPT09ZX1mdW5jdGlvbiBwZShlKXtyZXR1cm4hIVJ0JiZSdCBpbiBlfWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxPdCl9ZnVuY3Rpb24gbWUoZSl7cmV0dXJuIGU9PT1lJiYhUmUoZSl9ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW2VdPT09dCYmKHZvaWQgMCE9PXR8fGUgaW4gT2JqZWN0KG4pKSl9fWZ1bmN0aW9uIGdlKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZXx8eGUoZSkpcmV0dXJuIGU7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LVVlPyItMCI6dH1mdW5jdGlvbiBiZShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIGp0LmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuKHRuKGUpP3I6QikoZSwkKHQsMykpfWZ1bmN0aW9uIHllKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV8fHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoTmUpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxzPW4uY2FjaGU7aWYocy5oYXMobykpcmV0dXJuIHMuZ2V0KG8pO3ZhciBpPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1zLnNldChvLGkpLGl9O3JldHVybiBuLmNhY2hlPW5ldyh5ZS5DYWNoZXx8QSksbn1mdW5jdGlvbiB2ZShlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIFRlKGUpe3JldHVybiBDZShlKSYmeHQuY2FsbChlLCJjYWxsZWUiKSYmKCFrdC5jYWxsKGUsImNhbGxlZSIpfHxMdC5jYWxsKGUpPT16ZSl9ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIG51bGwhPWUmJlNlKGUubGVuZ3RoKSYmIU9lKGUpfWZ1bmN0aW9uIENlKGUpe3JldHVybiBqZShlKSYmQWUoZSl9ZnVuY3Rpb24gT2UoZSl7dmFyIHQ9UmUoZSk/THQuY2FsbChlKToiIjtyZXR1cm4gdD09S2V8fHQ9PVhlfWZ1bmN0aW9uIFNlKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD1HZX1mdW5jdGlvbiBSZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZnVuY3Rpb24gamUoZSl7cmV0dXJuISFlJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24geGUoZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxqZShlKSYmTHQuY2FsbChlKT09bnR9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIG51bGw9PWU/IiI6dGUoZSl9ZnVuY3Rpb24gRGUoZSx0LG4pe3ZhciByPW51bGw9PWU/dm9pZCAwOkcoZSx0KTtyZXR1cm4gdm9pZCAwPT09cj9uOnJ9ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdWUoZSx0LFYpfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBBZShlKT9IKGUpOlEoZSl9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGRlKGUpP3MoZ2UoZSkpOmVlKGUpfXZhciBQZT0yMDAsTmU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLEhlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixGZT0xLEJlPTIsVWU9MS8wLEdlPTkwMDcxOTkyNTQ3NDA5OTEsemU9IltvYmplY3QgQXJndW1lbnRzXSIsVmU9IltvYmplY3QgQXJyYXldIixXZT0iW29iamVjdCBCb29sZWFuXSIsWWU9IltvYmplY3QgRGF0ZV0iLHFlPSJbb2JqZWN0IEVycm9yXSIsS2U9IltvYmplY3QgRnVuY3Rpb25dIixYZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLCRlPSJbb2JqZWN0IE1hcF0iLFFlPSJbb2JqZWN0IE51bWJlcl0iLEplPSJbb2JqZWN0IE9iamVjdF0iLFplPSJbb2JqZWN0IFJlZ0V4cF0iLGV0PSJbb2JqZWN0IFNldF0iLHR0PSJbb2JqZWN0IFN0cmluZ10iLG50PSJbb2JqZWN0IFN5bWJvbF0iLHJ0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsb3Q9IltvYmplY3QgRGF0YVZpZXddIixzdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxpdD0vXlx3KiQvLGF0PS9eXC4vLGx0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHV0PS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxjdD0vXFwoXFwpPy9nLGR0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLF90PS9eKD86MHxbMS05XVxkKikkLyxwdD17fTtwdFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09cHRbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXB0WyJbb2JqZWN0IEludDhBcnJheV0iXT1wdFsiW29iamVjdCBJbnQxNkFycmF5XSJdPXB0WyJbb2JqZWN0IEludDMyQXJyYXldIl09cHRbIltvYmplY3QgVWludDhBcnJheV0iXT1wdFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1wdFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1wdFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxwdFt6ZV09cHRbVmVdPXB0W3J0XT1wdFtXZV09cHRbb3RdPXB0W1llXT1wdFtxZV09cHRbS2VdPXB0WyRlXT1wdFtRZV09cHRbSmVdPXB0W1plXT1wdFtldF09cHRbdHRdPXB0WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIGZ0PSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsbXQ9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixodD1mdHx8bXR8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksZ3Q9Im9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxidD1ndCYmIm9iamVjdCI9PXR5cGVvZiBuJiZuJiYhbi5ub2RlVHlwZSYmbixFdD1idCYmYnQuZXhwb3J0cz09PWd0LHl0PUV0JiZmdC5wcm9jZXNzLHZ0PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB5dCYmeXQuYmluZGluZygidXRpbCIpfWNhdGNoKGUpe319KCksVHQ9dnQmJnZ0LmlzVHlwZWRBcnJheSxBdD1BcnJheS5wcm90b3R5cGUsQ3Q9RnVuY3Rpb24ucHJvdG90eXBlLE90PU9iamVjdC5wcm90b3R5cGUsU3Q9aHRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFJ0PWZ1bmN0aW9uKCl7dmFyIGU9L1teLl0rJC8uZXhlYyhTdCYmU3Qua2V5cyYmU3Qua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBlPyJTeW1ib2woc3JjKV8xLiIrZToiIn0oKSxqdD1DdC50b1N0cmluZyx4dD1PdC5oYXNPd25Qcm9wZXJ0eSxMdD1PdC50b1N0cmluZyxEdD1SZWdFeHAoIl4iK2p0LmNhbGwoeHQpLnJlcGxhY2UodXQsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksd3Q9aHQuU3ltYm9sLE10PWh0LlVpbnQ4QXJyYXksa3Q9T3QucHJvcGVydHlJc0VudW1lcmFibGUsSXQ9QXQuc3BsaWNlLFB0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxOdD1sZShodCwiRGF0YVZpZXciKSxIdD1sZShodCwiTWFwIiksRnQ9bGUoaHQsIlByb21pc2UiKSxCdD1sZShodCwiU2V0IiksVXQ9bGUoaHQsIldlYWtNYXAiKSxHdD1sZShPYmplY3QsImNyZWF0ZSIpLHp0PWJlKE50KSxWdD1iZShIdCksV3Q9YmUoRnQpLFl0PWJlKEJ0KSxxdD1iZShVdCksS3Q9d3Q/d3QucHJvdG90eXBlOnZvaWQgMCxYdD1LdD9LdC52YWx1ZU9mOnZvaWQgMCwkdD1LdD9LdC50b1N0cmluZzp2b2lkIDA7ZC5wcm90b3R5cGUuY2xlYXI9XyxkLnByb3RvdHlwZS5kZWxldGU9cCxkLnByb3RvdHlwZS5nZXQ9ZixkLnByb3RvdHlwZS5oYXM9bSxkLnByb3RvdHlwZS5zZXQ9aCxnLnByb3RvdHlwZS5jbGVhcj1iLGcucHJvdG90eXBlLmRlbGV0ZT1FLGcucHJvdG90eXBlLmdldD15LGcucHJvdG90eXBlLmhhcz12LGcucHJvdG90eXBlLnNldD1ULEEucHJvdG90eXBlLmNsZWFyPUMsQS5wcm90b3R5cGUuZGVsZXRlPU8sQS5wcm90b3R5cGUuZ2V0PVMsQS5wcm90b3R5cGUuaGFzPVIsQS5wcm90b3R5cGUuc2V0PWoseC5wcm90b3R5cGUuYWRkPXgucHJvdG90eXBlLnB1c2g9TCx4LnByb3RvdHlwZS5oYXM9RCx3LnByb3RvdHlwZS5jbGVhcj1NLHcucHJvdG90eXBlLmRlbGV0ZT1rLHcucHJvdG90eXBlLmdldD1JLHcucHJvdG90eXBlLmhhcz1QLHcucHJvdG90eXBlLnNldD1OO3ZhciBRdD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIUFlKG4pKXJldHVybiBlKG4scik7Zm9yKHZhciBvPW4ubGVuZ3RoLHM9dD9vOi0xLGk9T2JqZWN0KG4pOyh0P3MtLTorK3M8bykmJiExIT09cihpW3NdLHMsaSk7KTtyZXR1cm4gbn19KFUpLEp0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLHM9T2JqZWN0KHQpLGk9cih0KSxhPWkubGVuZ3RoO2EtLTspe3ZhciBsPWlbZT9hOisrb107aWYoITE9PT1uKHNbbF0sbCxzKSlicmVha31yZXR1cm4gdH19KCksWnQ9ejsoTnQmJlp0KG5ldyBOdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9b3R8fEh0JiZadChuZXcgSHQpIT0kZXx8RnQmJiJbb2JqZWN0IFByb21pc2VdIiE9WnQoRnQucmVzb2x2ZSgpKXx8QnQmJlp0KG5ldyBCdCkhPWV0fHxVdCYmIltvYmplY3QgV2Vha01hcF0iIT1adChuZXcgVXQpKSYmKFp0PWZ1bmN0aW9uKGUpe3ZhciB0PUx0LmNhbGwoZSksbj10PT1KZT9lLmNvbnN0cnVjdG9yOnZvaWQgMCxyPW4/YmUobik6dm9pZCAwO2lmKHIpc3dpdGNoKHIpe2Nhc2UgenQ6cmV0dXJuIG90O2Nhc2UgVnQ6cmV0dXJuICRlO2Nhc2UgV3Q6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgWXQ6cmV0dXJuIGV0O2Nhc2UgcXQ6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiB0fSk7dmFyIGVuPXllKGZ1bmN0aW9uKGUpe2U9TGUoZSk7dmFyIHQ9W107cmV0dXJuIGF0LnRlc3QoZSkmJnQucHVzaCgiIiksZS5yZXBsYWNlKGx0LGZ1bmN0aW9uKGUsbixyLG8pe3QucHVzaChyP28ucmVwbGFjZShjdCwiJDEiKTpufHxlKX0pLHR9KTt5ZS5DYWNoZT1BO3ZhciB0bj1BcnJheS5pc0FycmF5LG5uPVR0P2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KFR0KTpYO24uZXhwb3J0cz1FZX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2VxdWFsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAscz1bXTsrK248cjspe3ZhciBpPWVbbl07dChpLG4sZSkmJihzW28rK109aSl9cmV0dXJuIHN9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKHQoZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZS5oYXModCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSxufWZ1bmN0aW9uIGMoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7blsrK3RdPWV9KSxufWZ1bmN0aW9uIGQoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gXygpe3RoaXMuX19kYXRhX189Q3Q/Q3QobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gcChlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBmKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoQ3Qpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1iZT92b2lkIDA6bn1yZXR1cm4gaXQuY2FsbCh0LGUpP3RbZV06dm9pZCAwfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gQ3Q/dm9pZCAwIT09dFtlXTppdC5jYWxsKHQsZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLG5bZV09Q3QmJnZvaWQgMD09PXQ/YmU6dCx0aGlzfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gYigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9ZnVuY3Rpb24gRShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Rih0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTpmdC5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9ZnVuY3Rpb24geShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Rih0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19ZnVuY3Rpb24gdihlKXtyZXR1cm4gRih0aGlzLl9fZGF0YV9fLGUpPi0xfWZ1bmN0aW9uIFQoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9RihuLGUpO3JldHVybiByPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbZSx0XSkpOm5bcl1bMV09dCx0aGlzfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gQygpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGQsbWFwOm5ldyh5dHx8Zyksc3RyaW5nOm5ldyBkfX1mdW5jdGlvbiBPKGUpe3ZhciB0PUoodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBTKGUpe3JldHVybiBKKHRoaXMsZSkuZ2V0KGUpfWZ1bmN0aW9uIFIoZSl7cmV0dXJuIEoodGhpcyxlKS5oYXMoZSl9ZnVuY3Rpb24gaihlLHQpe3ZhciBuPUoodGhpcyxlKSxyPW4uc2l6ZTtyZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemUrPW4uc2l6ZT09cj8wOjEsdGhpc31mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBBOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiBMKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGJlKSx0aGlzfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWZ1bmN0aW9uIHcoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgZyhlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIE0oKXt0aGlzLl9fZGF0YV9fPW5ldyBnLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPXQuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemU9dC5zaXplLG59ZnVuY3Rpb24gSShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9ZnVuY3Rpb24gTihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIGcpe3ZhciByPW4uX19kYXRhX187aWYoIXl0fHxyLmxlbmd0aDxnZS0xKXJldHVybiByLnB1c2goW2UsdF0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgQShyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9ZnVuY3Rpb24gSChlLHQpe3ZhciBuPUl0KGUpLHI9IW4mJmt0KGUpLG89IW4mJiFyJiZQdChlKSxzPSFuJiYhciYmIW8mJk50KGUpLGE9bnx8cnx8b3x8cyxsPWE/aShlLmxlbmd0aCxTdHJpbmcpOltdLHU9bC5sZW5ndGg7Zm9yKHZhciBjIGluIGUpIXQmJiFpdC5jYWxsKGUsYyl8fGEmJigibGVuZ3RoIj09Y3x8byYmKCJvZmZzZXQiPT1jfHwicGFyZW50Ij09Yyl8fHMmJigiYnVmZmVyIj09Y3x8ImJ5dGVMZW5ndGgiPT1jfHwiYnl0ZU9mZnNldCI9PWMpfHx0ZShjLHUpKXx8bC5wdXNoKGMpO3JldHVybiBsfWZ1bmN0aW9uIEYoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihhZShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEIoZSx0LG4pe3ZhciByPXQoZSk7cmV0dXJuIEl0KGUpP3I6byhyLG4oZSkpfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9GZTp3ZTptdCYmbXQgaW4gT2JqZWN0KGUpP2VlKGUpOnNlKGUpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIHBlKGUpJiZVKGUpPT1UZX1mdW5jdGlvbiB6KGUsdCxuLHIsbyl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IXBlKGUpJiYhcGUodCk/ZSE9PWUmJnQhPT10OlYoZSx0LG4scix6LG8pKX1mdW5jdGlvbiBWKGUsdCxuLHIsbyxzKXt2YXIgaT1JdChlKSxhPUl0KHQpLGw9aT9BZTpNdChlKSx1PWE/QWU6TXQodCk7bD1sPT1UZT9NZTpsLHU9dT09VGU/TWU6dTt2YXIgYz1sPT1NZSxkPXU9PU1lLF89bD09dTtpZihfJiZQdChlKSl7aWYoIVB0KHQpKXJldHVybiExO2k9ITAsYz0hMX1pZihfJiYhYylyZXR1cm4gc3x8KHM9bmV3IHcpLGl8fE50KGUpP0soZSx0LG4scixvLHMpOlgoZSx0LGwsbixyLG8scyk7aWYoIShuJkVlKSl7dmFyIHA9YyYmaXQuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGY9ZCYmaXQuY2FsbCh0LCJfX3dyYXBwZWRfXyIpO2lmKHB8fGYpe3ZhciBtPXA/ZS52YWx1ZSgpOmUsaD1mP3QudmFsdWUoKTp0O3JldHVybiBzfHwocz1uZXcgdyksbyhtLGgsbixyLHMpfX1yZXR1cm4hIV8mJihzfHwocz1uZXcgdyksJChlLHQsbixyLG8scykpfWZ1bmN0aW9uIFcoZSl7cmV0dXJuISghX2UoZSl8fHJlKGUpKSYmKGNlKGUpP3V0OnplKS50ZXN0KGllKGUpKX1mdW5jdGlvbiBZKGUpe3JldHVybiBwZShlKSYmZGUoZS5sZW5ndGgpJiYhIVdlW1UoZSldfWZ1bmN0aW9uIHEoZSl7aWYoIW9lKGUpKXJldHVybiBidChlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKWl0LmNhbGwoZSxuKSYmImNvbnN0cnVjdG9yIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEsoZSx0LG4scixvLGkpe3ZhciBsPW4mRWUsdT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHUhPWMmJiEobCYmYz51KSlyZXR1cm4hMTt2YXIgZD1pLmdldChlKTtpZihkJiZpLmdldCh0KSlyZXR1cm4gZD09dDt2YXIgXz0tMSxwPSEwLGY9biZ5ZT9uZXcgeDp2b2lkIDA7Zm9yKGkuc2V0KGUsdCksaS5zZXQodCxlKTsrK188dTspe3ZhciBtPWVbX10saD10W19dO2lmKHIpdmFyIGc9bD9yKGgsbSxfLHQsZSxpKTpyKG0saCxfLGUsdCxpKTtpZih2b2lkIDAhPT1nKXtpZihnKWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoZil7aWYoIXModCxmdW5jdGlvbihlLHQpe2lmKCFhKGYsdCkmJihtPT09ZXx8byhtLGUsbixyLGkpKSlyZXR1cm4gZi5wdXNoKHQpfSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYobSE9PWgmJiFvKG0saCxuLHIsaSkpe3A9ITE7YnJlYWt9fXJldHVybiBpLmRlbGV0ZShlKSxpLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIFgoZSx0LG4scixvLHMsaSl7c3dpdGNoKG4pe2Nhc2UgVWU6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIEJlOnJldHVybiEoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fCFzKG5ldyBfdChlKSxuZXcgX3QodCkpKTtjYXNlIE9lOmNhc2UgU2U6Y2FzZSBEZTpyZXR1cm4gYWUoK2UsK3QpO2Nhc2UgUmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEllOmNhc2UgTmU6cmV0dXJuIGU9PXQrIiI7Y2FzZSBMZTp2YXIgYT11O2Nhc2UgUGU6dmFyIGw9ciZFZTtpZihhfHwoYT1jKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGQ9aS5nZXQoZSk7aWYoZClyZXR1cm4gZD09dDtyfD15ZSxpLnNldChlLHQpO3ZhciBfPUsoYShlKSxhKHQpLHIsbyxzLGkpO3JldHVybiBpLmRlbGV0ZShlKSxfO2Nhc2UgSGU6aWYoRHQpcmV0dXJuIER0LmNhbGwoZSk9PUR0LmNhbGwodCl9cmV0dXJuITF9ZnVuY3Rpb24gJChlLHQsbixyLG8scyl7dmFyIGk9biZFZSxhPVEoZSksbD1hLmxlbmd0aDtpZihsIT1RKHQpLmxlbmd0aCYmIWkpcmV0dXJuITE7Zm9yKHZhciB1PWw7dS0tOyl7dmFyIGM9YVt1XTtpZighKGk/YyBpbiB0Oml0LmNhbGwodCxjKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQoZSk7aWYoZCYmcy5nZXQodCkpcmV0dXJuIGQ9PXQ7dmFyIF89ITA7cy5zZXQoZSx0KSxzLnNldCh0LGUpO2Zvcih2YXIgcD1pOysrdTxsOyl7Yz1hW3VdO3ZhciBmPWVbY10sbT10W2NdO2lmKHIpdmFyIGg9aT9yKG0sZixjLHQsZSxzKTpyKGYsbSxjLGUsdCxzKTtpZighKHZvaWQgMD09PWg/Zj09PW18fG8oZixtLG4scixzKTpoKSl7Xz0hMTticmVha31wfHwocD0iY29uc3RydWN0b3IiPT1jKX1pZihfJiYhcCl7dmFyIGc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7ZyE9YiYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBnJiZnIGluc3RhbmNlb2YgZyYmImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBiKSYmKF89ITEpfXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxffWZ1bmN0aW9uIFEoZSl7cmV0dXJuIEIoZSxmZSx3dCl9ZnVuY3Rpb24gSihlLHQpe3ZhciBuPWUuX19kYXRhX187cmV0dXJuIG5lKHQpP25bInN0cmluZyI9PXR5cGVvZiB0PyJzdHJpbmciOiJoYXNoIl06bi5tYXB9ZnVuY3Rpb24gWihlLHQpe3ZhciBuPWwoZSx0KTtyZXR1cm4gVyhuKT9uOnZvaWQgMH1mdW5jdGlvbiBlZShlKXt2YXIgdD1pdC5jYWxsKGUsbXQpLG49ZVttdF07dHJ5e2VbbXRdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89bHQuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVttdF09bjpkZWxldGUgZVttdF0pLG99ZnVuY3Rpb24gdGUoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/dmU6dCkmJigibnVtYmVyIj09dHlwZW9mIGV8fFZlLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBuZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfWZ1bmN0aW9uIHJlKGUpe3JldHVybiEhYXQmJmF0IGluIGV9ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PSgiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fHJ0KX1mdW5jdGlvbiBzZShlKXtyZXR1cm4gbHQuY2FsbChlKX1mdW5jdGlvbiBpZShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIHN0LmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifWZ1bmN0aW9uIGFlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIG51bGwhPWUmJmRlKGUubGVuZ3RoKSYmIWNlKGUpfWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHooZSx0KX1mdW5jdGlvbiBjZShlKXtpZighX2UoZSkpcmV0dXJuITE7dmFyIHQ9VShlKTtyZXR1cm4gdD09amV8fHQ9PXhlfHx0PT1DZXx8dD09a2V9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PXZlfWZ1bmN0aW9uIF9lKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWZ1bmN0aW9uIHBlKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGxlKGUpP0goZSk6cShlKX1mdW5jdGlvbiBtZSgpe3JldHVybltdfWZ1bmN0aW9uIGhlKCl7cmV0dXJuITF9dmFyIGdlPTIwMCxiZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsRWU9MSx5ZT0yLHZlPTkwMDcxOTkyNTQ3NDA5OTEsVGU9IltvYmplY3QgQXJndW1lbnRzXSIsQWU9IltvYmplY3QgQXJyYXldIixDZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsT2U9IltvYmplY3QgQm9vbGVhbl0iLFNlPSJbb2JqZWN0IERhdGVdIixSZT0iW29iamVjdCBFcnJvcl0iLGplPSJbb2JqZWN0IEZ1bmN0aW9uXSIseGU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixMZT0iW29iamVjdCBNYXBdIixEZT0iW29iamVjdCBOdW1iZXJdIix3ZT0iW29iamVjdCBOdWxsXSIsTWU9IltvYmplY3QgT2JqZWN0XSIsa2U9IltvYmplY3QgUHJveHldIixJZT0iW29iamVjdCBSZWdFeHBdIixQZT0iW29iamVjdCBTZXRdIixOZT0iW29iamVjdCBTdHJpbmddIixIZT0iW29iamVjdCBTeW1ib2xdIixGZT0iW29iamVjdCBVbmRlZmluZWRdIixCZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFVlPSJbb2JqZWN0IERhdGFWaWV3XSIsR2U9L1tcXF4kLiorPygpW1xde318XS9nLHplPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFZlPS9eKD86MHxbMS05XVxkKikkLyxXZT17fTtXZVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09V2VbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPVdlWyJbb2JqZWN0IEludDhBcnJheV0iXT1XZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPVdlWyJbb2JqZWN0IEludDMyQXJyYXldIl09V2VbIltvYmplY3QgVWludDhBcnJheV0iXT1XZVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1XZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1XZVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxXZVtUZV09V2VbQWVdPVdlW0JlXT1XZVtPZV09V2VbVWVdPVdlW1NlXT1XZVtSZV09V2VbamVdPVdlW0xlXT1XZVtEZV09V2VbTWVdPVdlW0llXT1XZVtQZV09V2VbTmVdPVdlWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIFllPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUscWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixLZT1ZZXx8cWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksWGU9Im9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCwkZT1YZSYmIm9iamVjdCI9PXR5cGVvZiBuJiZuJiYhbi5ub2RlVHlwZSYmbixRZT0kZSYmJGUuZXhwb3J0cz09PVhlLEplPVFlJiZZZS5wcm9jZXNzLFplPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBKZSYmSmUuYmluZGluZyYmSmUuYmluZGluZygidXRpbCIpfWNhdGNoKGUpe319KCksZXQ9WmUmJlplLmlzVHlwZWRBcnJheSx0dD1BcnJheS5wcm90b3R5cGUsbnQ9RnVuY3Rpb24ucHJvdG90eXBlLHJ0PU9iamVjdC5wcm90b3R5cGUsb3Q9S2VbIl9fY29yZS1qc19zaGFyZWRfXyJdLHN0PW50LnRvU3RyaW5nLGl0PXJ0Lmhhc093blByb3BlcnR5LGF0PWZ1bmN0aW9uKCl7dmFyIGU9L1teLl0rJC8uZXhlYyhvdCYmb3Qua2V5cyYmb3Qua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBlPyJTeW1ib2woc3JjKV8xLiIrZToiIn0oKSxsdD1ydC50b1N0cmluZyx1dD1SZWdFeHAoIl4iK3N0LmNhbGwoaXQpLnJlcGxhY2UoR2UsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksY3Q9UWU/S2UuQnVmZmVyOnZvaWQgMCxkdD1LZS5TeW1ib2wsX3Q9S2UuVWludDhBcnJheSxwdD1ydC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxmdD10dC5zcGxpY2UsbXQ9ZHQ/ZHQudG9TdHJpbmdUYWc6dm9pZCAwLGh0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZ3Q9Y3Q/Y3QuaXNCdWZmZXI6dm9pZCAwLGJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxFdD1aKEtlLCJEYXRhVmlldyIpLHl0PVooS2UsIk1hcCIpLHZ0PVooS2UsIlByb21pc2UiKSxUdD1aKEtlLCJTZXQiKSxBdD1aKEtlLCJXZWFrTWFwIiksQ3Q9WihPYmplY3QsImNyZWF0ZSIpLE90PWllKEV0KSxTdD1pZSh5dCksUnQ9aWUodnQpLGp0PWllKFR0KSx4dD1pZShBdCksTHQ9ZHQ/ZHQucHJvdG90eXBlOnZvaWQgMCxEdD1MdD9MdC52YWx1ZU9mOnZvaWQgMDtkLnByb3RvdHlwZS5jbGVhcj1fLGQucHJvdG90eXBlLmRlbGV0ZT1wLGQucHJvdG90eXBlLmdldD1mLGQucHJvdG90eXBlLmhhcz1tLGQucHJvdG90eXBlLnNldD1oLGcucHJvdG90eXBlLmNsZWFyPWIsZy5wcm90b3R5cGUuZGVsZXRlPUUsZy5wcm90b3R5cGUuZ2V0PXksZy5wcm90b3R5cGUuaGFzPXYsZy5wcm90b3R5cGUuc2V0PVQsQS5wcm90b3R5cGUuY2xlYXI9QyxBLnByb3RvdHlwZS5kZWxldGU9TyxBLnByb3RvdHlwZS5nZXQ9UyxBLnByb3RvdHlwZS5oYXM9UixBLnByb3RvdHlwZS5zZXQ9aix4LnByb3RvdHlwZS5hZGQ9eC5wcm90b3R5cGUucHVzaD1MLHgucHJvdG90eXBlLmhhcz1ELHcucHJvdG90eXBlLmNsZWFyPU0sdy5wcm90b3R5cGUuZGVsZXRlPWssdy5wcm90b3R5cGUuZ2V0PUksdy5wcm90b3R5cGUuaGFzPVAsdy5wcm90b3R5cGUuc2V0PU47dmFyIHd0PWh0P2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9iamVjdChlKSxyKGh0KGUpLGZ1bmN0aW9uKHQpe3JldHVybiBwdC5jYWxsKGUsdCl9KSl9Om1lLE10PVU7KEV0JiZNdChuZXcgRXQobmV3IEFycmF5QnVmZmVyKDEpKSkhPVVlfHx5dCYmTXQobmV3IHl0KSE9TGV8fHZ0JiYiW29iamVjdCBQcm9taXNlXSIhPU10KHZ0LnJlc29sdmUoKSl8fFR0JiZNdChuZXcgVHQpIT1QZXx8QXQmJiJbb2JqZWN0IFdlYWtNYXBdIiE9TXQobmV3IEF0KSkmJihNdD1mdW5jdGlvbihlKXt2YXIgdD1VKGUpLG49dD09TWU/ZS5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP2llKG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgT3Q6cmV0dXJuIFVlO2Nhc2UgU3Q6cmV0dXJuIExlO2Nhc2UgUnQ6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UganQ6cmV0dXJuIFBlO2Nhc2UgeHQ6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiB0fSk7dmFyIGt0PUcoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9HOmZ1bmN0aW9uKGUpe3JldHVybiBwZShlKSYmaXQuY2FsbChlLCJjYWxsZWUiKSYmIXB0LmNhbGwoZSwiY2FsbGVlIil9LEl0PUFycmF5LmlzQXJyYXksUHQ9Z3R8fGhlLE50PWV0P2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KGV0KTpZO24uZXhwb3J0cz11ZX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2Z1bmN0aW9uL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9fOmM6eSYmeSBpbiBPYmplY3QoZSk/cihlKTpvKGUpfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9Zy5jYWxsKGUseSksbj1lW3ldO3RyeXtlW3ldPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89Yi5jYWxsKGUpO3JldHVybiByJiYodD9lW3ldPW46ZGVsZXRlIGVbeV0pLG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gYi5jYWxsKGUpfWZ1bmN0aW9uIHMoZSl7aWYoIWkoZSkpcmV0dXJuITE7dmFyIHQ9bihlKTtyZXR1cm4gdD09bHx8dD09dXx8dD09YXx8dD09ZH1mdW5jdGlvbiBpKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfXZhciBhPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixsPSJbb2JqZWN0IEZ1bmN0aW9uXSIsdT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGM9IltvYmplY3QgTnVsbF0iLGQ9IltvYmplY3QgUHJveHldIixfPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHA9Im9iamVjdCI9PXR5cGVvZiB0JiZ0JiZ0Lk9iamVjdD09PU9iamVjdCYmdCxmPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsbT1wfHxmfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGg9T2JqZWN0LnByb3RvdHlwZSxnPWguaGFzT3duUHJvcGVydHksYj1oLnRvU3RyaW5nLEU9bS5TeW1ib2wseT1FP0UudG9TdHJpbmdUYWc6dm9pZCAwO2UuZXhwb3J0cz1zfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2guaXNwbGFpbm9iamVjdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nKXRyeXt0PSEhKGUrIiIpfWNhdGNoKGUpe31yZXR1cm4gdH1mdW5jdGlvbiByKGUpe3JldHVybiEhZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSl7aWYoIXIoZSl8fGQuY2FsbChlKSE9c3x8bihlKSlyZXR1cm4hMTt2YXIgdD1fKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBvPXUuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvIGluc3RhbmNlb2YgbyYmbC5jYWxsKG8pPT1jfXZhciBzPSJbb2JqZWN0IE9iamVjdF0iLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9T2JqZWN0LnByb3RvdHlwZSxsPWkudG9TdHJpbmcsdT1hLmhhc093blByb3BlcnR5LGM9bC5jYWxsKE9iamVjdCksZD1hLnRvU3RyaW5nLF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc3N0cmluZy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiEhZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHwhYShlKSYmbihlKSYmaS5jYWxsKGUpPT1vfXZhciBvPSJbb2JqZWN0IFN0cmluZ10iLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMudG9TdHJpbmcsYT1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoLm1lcmdld2l0aC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19ZnVuY3Rpb24gaShlLHQpe3JldHVybiJfX3Byb3RvX18iPT10P3ZvaWQgMDplW3RdfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gbCgpe3RoaXMuX19kYXRhX189Z3Q/Z3QobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gdShlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBjKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoZ3Qpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1UZT92b2lkIDA6bn1yZXR1cm4gSmUuY2FsbCh0LGUpP3RbZV06dm9pZCAwfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gZ3Q/dm9pZCAwIT09dFtlXTpKZS5jYWxsKHQsZSl9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLG5bZV09Z3QmJnZvaWQgMD09PXQ/VGU6dCx0aGlzfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gZigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9ZnVuY3Rpb24gbShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49ayh0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTpjdC5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9ZnVuY3Rpb24gaChlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49ayh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gayh0aGlzLl9fZGF0YV9fLGUpPi0xfWZ1bmN0aW9uIGIoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9ayhuLGUpO3JldHVybiByPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbZSx0XSkpOm5bcl1bMV09dCx0aGlzfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24geSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGEsbWFwOm5ldyhodHx8cCksc3RyaW5nOm5ldyBhfX1mdW5jdGlvbiB2KGUpe3ZhciB0PVgodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1mdW5jdGlvbiBUKGUpe3JldHVybiBYKHRoaXMsZSkuZ2V0KGUpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIFgodGhpcyxlKS5oYXMoZSl9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPVgodGhpcyxlKSxyPW4uc2l6ZTtyZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemUrPW4uc2l6ZT09cj8wOjEsdGhpc31mdW5jdGlvbiBPKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IHAoZSk7dGhpcy5zaXplPXQuc2l6ZX1mdW5jdGlvbiBTKCl7dGhpcy5fX2RhdGFfXz1uZXcgcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBSKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufWZ1bmN0aW9uIGooZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWZ1bmN0aW9uIEwoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBwKXt2YXIgcj1uLl9fZGF0YV9fO2lmKCFodHx8ci5sZW5ndGg8dmUtMSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IEUocil9cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfWZ1bmN0aW9uIEQoZSx0KXt2YXIgbj1BdChlKSxyPSFuJiZUdChlKSxzPSFuJiYhciYmQ3QoZSksaT0hbiYmIXImJiFzJiZPdChlKSxhPW58fHJ8fHN8fGksbD1hP28oZS5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSmUuY2FsbChlLGMpfHxhJiYoImxlbmd0aCI9PWN8fHMmJigib2Zmc2V0Ij09Y3x8InBhcmVudCI9PWMpfHxpJiYoImJ1ZmZlciI9PWN8fCJieXRlTGVuZ3RoIj09Y3x8ImJ5dGVPZmZzZXQiPT1jKXx8WihjLHUpKXx8bC5wdXNoKGMpO3JldHVybiBsfWZ1bmN0aW9uIHcoZSx0LG4peyh2b2lkIDA9PT1ufHxsZShlW3RdLG4pKSYmKHZvaWQgMCE9PW58fHQgaW4gZSl8fEkoZSx0LG4pfWZ1bmN0aW9uIE0oZSx0LG4pe3ZhciByPWVbdF07SmUuY2FsbChlLHQpJiZsZShyLG4pJiYodm9pZCAwIT09bnx8dCBpbiBlKXx8SShlLHQsbil9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKGxlKGVbbl1bMF0sdCkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gSShlLHQsbil7Il9fcHJvdG9fXyI9PXQmJl90P190KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBQKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMD09PWU/TWU6TGU6ZHQmJmR0IGluIE9iamVjdChlKT9RKGUpOnNlKGUpfWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGZlKGUpJiZQKGUpPT1TZX1mdW5jdGlvbiBIKGUpe3JldHVybiEoIXBlKGUpfHxuZShlKSkmJihkZShlKT9udDpJZSkudGVzdChhZShlKSl9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZmUoZSkmJl9lKGUubGVuZ3RoKSYmISFOZVtQKGUpXX1mdW5jdGlvbiBCKGUpe2lmKCFwZShlKSlyZXR1cm4gb2UoZSk7dmFyIHQ9cmUoZSksbj1bXTtmb3IodmFyIHIgaW4gZSkoImNvbnN0cnVjdG9yIiE9cnx8IXQmJkplLmNhbGwoZSxyKSkmJm4ucHVzaChyKTtyZXR1cm4gbn1mdW5jdGlvbiBVKGUsdCxuLHIsbyl7ZSE9PXQmJkV0KHQsZnVuY3Rpb24ocyxhKXtpZihwZShzKSlvfHwobz1uZXcgTyksRyhlLHQsYSxuLFUscixvKTtlbHNle3ZhciBsPXI/cihpKGUsYSkscyxhKyIiLGUsdCxvKTp2b2lkIDA7dm9pZCAwPT09bCYmKGw9cyksdyhlLGEsbCl9fSxnZSl9ZnVuY3Rpb24gRyhlLHQsbixyLG8scyxhKXt2YXIgbD1pKGUsbiksdT1pKHQsbiksYz1hLmdldCh1KTtpZihjKXJldHVybiB2b2lkIHcoZSxuLGMpO3ZhciBkPXM/cyhsLHUsbisiIixlLHQsYSk6dm9pZCAwLF89dm9pZCAwPT09ZDtpZihfKXt2YXIgcD1BdCh1KSxmPSFwJiZDdCh1KSxtPSFwJiYhZiYmT3QodSk7ZD11LHB8fGZ8fG0/QXQobCk/ZD1sOmNlKGwpP2Q9cShsKTpmPyhfPSExLGQ9Vih1LCEwKSk6bT8oXz0hMSxkPVkodSwhMCkpOmQ9W106bWUodSl8fFR0KHUpPyhkPWwsVHQobCk/ZD1oZShsKTooIXBlKGwpfHxyJiZkZShsKSkmJihkPUoodSkpKTpfPSExfV8mJihhLnNldCh1LGQpLG8oZCx1LHIscyxhKSxhLmRlbGV0ZSh1KSksdyhlLG4sZCl9ZnVuY3Rpb24geihlLHQpe3JldHVybiB2dChpZShlLHQsRWUpLGUrIiIpfWZ1bmN0aW9uIFYoZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1pdD9pdChuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gVyhlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgc3QodCkuc2V0KG5ldyBzdChlKSksdH1mdW5jdGlvbiBZKGUsdCl7dmFyIG49dD9XKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIHEoZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoO2Zvcih0fHwodD1BcnJheShyKSk7KytuPHI7KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBLKGUsdCxuLHIpe3ZhciBvPSFuO258fChuPXt9KTtmb3IodmFyIHM9LTEsaT10Lmxlbmd0aDsrK3M8aTspe3ZhciBhPXRbc10sbD1yP3IoblthXSxlW2FdLGEsbixlKTp2b2lkIDA7dm9pZCAwPT09bCYmKGw9ZVthXSksbz9JKG4sYSxsKTpNKG4sYSxsKX1yZXR1cm4gbn1mdW5jdGlvbiBYKGUsdCl7dmFyIG49ZS5fX2RhdGFfXztyZXR1cm4gdGUodCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH1mdW5jdGlvbiAkKGUsdCl7dmFyIG49cyhlLHQpO3JldHVybiBIKG4pP246dm9pZCAwfWZ1bmN0aW9uIFEoZSl7dmFyIHQ9SmUuY2FsbChlLGR0KSxuPWVbZHRdO3RyeXtlW2R0XT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2goZSl7fXZhciBvPWV0LmNhbGwoZSk7cmV0dXJuIHImJih0P2VbZHRdPW46ZGVsZXRlIGVbZHRdKSxvfWZ1bmN0aW9uIEooZSl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fHJlKGUpP3t9OmJ0KGF0KGUpKX1mdW5jdGlvbiBaKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P09lOnQpJiYoIm51bWJlciI9PW58fCJzeW1ib2wiIT1uJiZQZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gZWUoZSx0LG4pe2lmKCFwZShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hISgibnVtYmVyIj09cj91ZShuKSYmWih0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmbGUoblt0XSxlKX1mdW5jdGlvbiB0ZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfWZ1bmN0aW9uIG5lKGUpe3JldHVybiEhWmUmJlplIGluIGV9ZnVuY3Rpb24gcmUoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PSgiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fFhlKX1mdW5jdGlvbiBvZShlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPYmplY3QoZSkpdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHNlKGUpe3JldHVybiBldC5jYWxsKGUpfWZ1bmN0aW9uIGllKGUsdCxuKXtyZXR1cm4gdD1mdCh2b2lkIDA9PT10P2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbz1hcmd1bWVudHMscz0tMSxpPWZ0KG8ubGVuZ3RoLXQsMCksYT1BcnJheShpKTsrK3M8aTspYVtzXT1vW3Qrc107cz0tMTtmb3IodmFyIGw9QXJyYXkodCsxKTsrK3M8dDspbFtzXT1vW3NdO3JldHVybiBsW3RdPW4oYSkscihlLHRoaXMsbCl9fWZ1bmN0aW9uIGFlKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gUWUuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlKyIifWNhdGNoKGUpe319cmV0dXJuIiJ9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gZT09PXR8fGUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gbnVsbCE9ZSYmX2UoZS5sZW5ndGgpJiYhZGUoZSl9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIGZlKGUpJiZ1ZShlKX1mdW5jdGlvbiBkZShlKXtpZighcGUoZSkpcmV0dXJuITE7dmFyIHQ9UChlKTtyZXR1cm4gdD09amV8fHQ9PXhlfHx0PT1SZXx8dD09d2V9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PU9lfWZ1bmN0aW9uIHBlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gbWUoZSl7aWYoIWZlKGUpfHxQKGUpIT1EZSlyZXR1cm4hMTt2YXIgdD1hdChlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1KZS5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3I7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZRZS5jYWxsKG4pPT10dH1mdW5jdGlvbiBoZShlKXtyZXR1cm4gSyhlLGdlKGUpKX1mdW5jdGlvbiBnZShlKXtyZXR1cm4gdWUoZSk/RChlLCEwKTpCKGUpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gZX1mdW5jdGlvbiB5ZSgpe3JldHVybiExfXZhciB2ZT0yMDAsVGU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEFlPTgwMCxDZT0xNixPZT05MDA3MTk5MjU0NzQwOTkxLFNlPSJbb2JqZWN0IEFyZ3VtZW50c10iLFJlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixqZT0iW29iamVjdCBGdW5jdGlvbl0iLHhlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsTGU9IltvYmplY3QgTnVsbF0iLERlPSJbb2JqZWN0IE9iamVjdF0iLHdlPSJbb2JqZWN0IFByb3h5XSIsTWU9IltvYmplY3QgVW5kZWZpbmVkXSIsa2U9L1tcXF4kLiorPygpW1xde318XS9nLEllPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFBlPS9eKD86MHxbMS05XVxkKikkLyxOZT17fTtOZVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09TmVbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPU5lWyJbb2JqZWN0IEludDhBcnJheV0iXT1OZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPU5lWyJbb2JqZWN0IEludDMyQXJyYXldIl09TmVbIltvYmplY3QgVWludDhBcnJheV0iXT1OZVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1OZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1OZVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxOZVtTZV09TmVbIltvYmplY3QgQXJyYXldIl09TmVbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09TmVbIltvYmplY3QgQm9vbGVhbl0iXT1OZVsiW29iamVjdCBEYXRhVmlld10iXT1OZVsiW29iamVjdCBEYXRlXSJdPU5lWyJbb2JqZWN0IEVycm9yXSJdPU5lW2plXT1OZVsiW29iamVjdCBNYXBdIl09TmVbIltvYmplY3QgTnVtYmVyXSJdPU5lW0RlXT1OZVsiW29iamVjdCBSZWdFeHBdIl09TmVbIltvYmplY3QgU2V0XSJdPU5lWyJbb2JqZWN0IFN0cmluZ10iXT1OZVsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBIZT0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlLEZlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsQmU9SGV8fEZlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLFVlPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsR2U9VWUmJiJvYmplY3QiPT10eXBlb2YgbiYmbiYmIW4ubm9kZVR5cGUmJm4semU9R2UmJkdlLmV4cG9ydHM9PT1VZSxWZT16ZSYmSGUucHJvY2VzcyxXZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gVmUmJlZlLmJpbmRpbmcmJlZlLmJpbmRpbmcoInV0aWwiKX1jYXRjaChlKXt9fSgpLFllPVdlJiZXZS5pc1R5cGVkQXJyYXkscWU9QXJyYXkucHJvdG90eXBlLEtlPUZ1bmN0aW9uLnByb3RvdHlwZSxYZT1PYmplY3QucHJvdG90eXBlLCRlPUJlWyJfX2NvcmUtanNfc2hhcmVkX18iXSxRZT1LZS50b1N0cmluZyxKZT1YZS5oYXNPd25Qcm9wZXJ0eSxaZT1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoJGUmJiRlLmtleXMmJiRlLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCksZXQ9WGUudG9TdHJpbmcsdHQ9UWUuY2FsbChPYmplY3QpLG50PVJlZ0V4cCgiXiIrUWUuY2FsbChKZSkucmVwbGFjZShrZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxydD16ZT9CZS5CdWZmZXI6dm9pZCAwLG90PUJlLlN5bWJvbCxzdD1CZS5VaW50OEFycmF5LGl0PXJ0P3J0LmFsbG9jVW5zYWZlOnZvaWQgMCxhdD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLGx0PU9iamVjdC5jcmVhdGUsdXQ9WGUucHJvcGVydHlJc0VudW1lcmFibGUsY3Q9cWUuc3BsaWNlLGR0PW90P290LnRvU3RyaW5nVGFnOnZvaWQgMCxfdD1mdW5jdGlvbigpe3RyeXt2YXIgZT0kKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gZSh7fSwiIix7fSksZX1jYXRjaChlKXt9fSgpLHB0PXJ0P3J0LmlzQnVmZmVyOnZvaWQgMCxmdD1NYXRoLm1heCxtdD1EYXRlLm5vdyxodD0kKEJlLCJNYXAiKSxndD0kKE9iamVjdCwiY3JlYXRlIiksYnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighcGUodCkpcmV0dXJue307aWYobHQpcmV0dXJuIGx0KHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxufX0oKTthLnByb3RvdHlwZS5jbGVhcj1sLGEucHJvdG90eXBlLmRlbGV0ZT11LGEucHJvdG90eXBlLmdldD1jLGEucHJvdG90eXBlLmhhcz1kLGEucHJvdG90eXBlLnNldD1fLHAucHJvdG90eXBlLmNsZWFyPWYscC5wcm90b3R5cGUuZGVsZXRlPW0scC5wcm90b3R5cGUuZ2V0PWgscC5wcm90b3R5cGUuaGFzPWcscC5wcm90b3R5cGUuc2V0PWIsRS5wcm90b3R5cGUuY2xlYXI9eSxFLnByb3RvdHlwZS5kZWxldGU9dixFLnByb3RvdHlwZS5nZXQ9VCxFLnByb3RvdHlwZS5oYXM9QSxFLnByb3RvdHlwZS5zZXQ9QyxPLnByb3RvdHlwZS5jbGVhcj1TLE8ucHJvdG90eXBlLmRlbGV0ZT1SLE8ucHJvdG90eXBlLmdldD1qLE8ucHJvdG90eXBlLmhhcz14LE8ucHJvdG90eXBlLnNldD1MO3ZhciBFdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxzPU9iamVjdCh0KSxpPXIodCksYT1pLmxlbmd0aDthLS07KXt2YXIgbD1pW2U/YTorK29dO2lmKCExPT09bihzW2xdLGwscykpYnJlYWt9cmV0dXJuIHR9fSgpLHl0PV90P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIF90KGUsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6YmUodCksd3JpdGFibGU6ITB9KX06RWUsdnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bXQoKSxvPUNlLShyLW4pO2lmKG49cixvPjApe2lmKCsrdD49QWUpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19KHl0KSxUdD1OKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/TjpmdW5jdGlvbihlKXtyZXR1cm4gZmUoZSkmJkplLmNhbGwoZSwiY2FsbGVlIikmJiF1dC5jYWxsKGUsImNhbGxlZSIpfSxBdD1BcnJheS5pc0FycmF5LEN0PXB0fHx5ZSxPdD1ZZT9mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fShZZSk6RixTdD1mdW5jdGlvbihlKXtyZXR1cm4geihmdW5jdGlvbih0LG4pe3ZhciByPS0xLG89bi5sZW5ndGgscz1vPjE/bltvLTFdOnZvaWQgMCxpPW8+Mj9uWzJdOnZvaWQgMDtmb3Iocz1lLmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygcz8oby0tLHMpOnZvaWQgMCxpJiZlZShuWzBdLG5bMV0saSkmJihzPW88Mz92b2lkIDA6cyxvPTEpLHQ9T2JqZWN0KHQpOysrcjxvOyl7dmFyIGE9bltyXTthJiZlKHQsYSxyLHMpfXJldHVybiB0fSl9KGZ1bmN0aW9uKGUsdCxuLHIpe1UoZSx0LG4scil9KTtuLmV4cG9ydHM9U3R9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gucGljay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPWU/ZS5sZW5ndGg6MCxvPUFycmF5KHIpOysrbjxyOylvW25dPXQoZVtuXSxuLGUpO3JldHVybiBvfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBzKGUsdCxuLHIsaSl7dmFyIGE9LTEsdT1lLmxlbmd0aDtmb3Iobnx8KG49bCksaXx8KGk9W10pOysrYTx1Oyl7dmFyIGM9ZVthXTt0PjAmJm4oYyk/dD4xP3MoYyx0LTEsbixyLGkpOm8oaSxjKTpyfHwoaVtpLmxlbmd0aF09Yyl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPU9iamVjdChlKSxhKGUsdCxmdW5jdGlvbih0LG4pe3JldHVybiBuIGluIGV9KX1mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxzPXt9OysrcjxvOyl7dmFyIGk9dFtyXSxhPWVbaV07bihhLGkpJiYoc1tpXT1hKX1yZXR1cm4gc31mdW5jdGlvbiBsKGUpe3JldHVybiBrKGUpfHxjKGUpfHwhISh3JiZlJiZlW3ddKX1mdW5jdGlvbiB1KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZXx8ZyhlKSlyZXR1cm4gZTt2YXIgdD1lKyIiO3JldHVybiIwIj09dCYmMS9lPT0tYj8iLTAiOnR9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gXyhlKSYmai5jYWxsKGUsImNhbGxlZSIpJiYoIUQuY2FsbChlLCJjYWxsZWUiKXx8eC5jYWxsKGUpPT15KX1mdW5jdGlvbiBkKGUpe3JldHVybiBudWxsIT1lJiZmKGUubGVuZ3RoKSYmIXAoZSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gaChlKSYmZChlKX1mdW5jdGlvbiBwKGUpe3ZhciB0PW0oZSk/eC5jYWxsKGUpOiIiO3JldHVybiB0PT12fHx0PT1UfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PUV9ZnVuY3Rpb24gbShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBnKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZXx8aChlKSYmeC5jYWxsKGUpPT1BfXZhciBiPTEvMCxFPTkwMDcxOTkyNTQ3NDA5OTEseT0iW29iamVjdCBBcmd1bWVudHNdIix2PSJbb2JqZWN0IEZ1bmN0aW9uXSIsVD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLEE9IltvYmplY3QgU3ltYm9sXSIsQz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuT2JqZWN0PT09T2JqZWN0JiZ0LE89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixTPUN8fE98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksUj1PYmplY3QucHJvdG90eXBlLGo9Ui5oYXNPd25Qcm9wZXJ0eSx4PVIudG9TdHJpbmcsTD1TLlN5bWJvbCxEPVIucHJvcGVydHlJc0VudW1lcmFibGUsdz1MP0wuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMCxNPU1hdGgubWF4LGs9QXJyYXkuaXNBcnJheSxJPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9TSh2b2lkIDA9PT10P2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMsbz0tMSxzPU0oci5sZW5ndGgtdCwwKSxpPUFycmF5KHMpOysrbzxzOylpW29dPXJbdCtvXTtvPS0xO2Zvcih2YXIgYT1BcnJheSh0KzEpOysrbzx0OylhW29dPXJbb107cmV0dXJuIGFbdF09aSxuKGUsdGhpcyxhKX19KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306aShlLHIocyh0LDEpLHUpKX0pO2UuZXhwb3J0cz1JfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2guc29tZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1lP2UubGVuZ3RoOjA7KytuPHI7KWlmKHQoZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19ZnVuY3Rpb24gYShlKXt2YXIgdD0hMTtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlKyIiKX1jYXRjaChlKXt9cmV0dXJuIHR9ZnVuY3Rpb24gbChlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pLG59ZnVuY3Rpb24gdShlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtuWysrdF09ZX0pLG59ZnVuY3Rpb24gYyhlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBkKCl7dGhpcy5fX2RhdGFfXz1HdD9HdChudWxsKTp7fX1mdW5jdGlvbiBfKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19ZnVuY3Rpb24gcChlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKEd0KXt2YXIgbj10W2VdO3JldHVybiBuPT09SGU/dm9pZCAwOm59cmV0dXJuIHh0LmNhbGwodCxlKT90W2VdOnZvaWQgMH1mdW5jdGlvbiBmKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIEd0P3ZvaWQgMCE9PXRbZV06eHQuY2FsbCh0LGUpfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tlXT1HdCYmdm9pZCAwPT09dD9IZTp0LHRoaXN9ZnVuY3Rpb24gaChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBnKCl7dGhpcy5fX2RhdGFfXz1bXX1mdW5jdGlvbiBiKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1IKHQsZSk7cmV0dXJuIShuPDApJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOkl0LmNhbGwodCxuLDEpLCEwKX1mdW5jdGlvbiBFKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1IKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX1mdW5jdGlvbiB5KGUpe3JldHVybiBIKHRoaXMuX19kYXRhX18sZSk+LTF9ZnVuY3Rpb24gdihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1IKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfWZ1bmN0aW9uIFQoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gQSgpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGMsbWFwOm5ldyhIdHx8aCksc3RyaW5nOm5ldyBjfX1mdW5jdGlvbiBDKGUpe3JldHVybiBzZSh0aGlzLGUpLmRlbGV0ZShlKX1mdW5jdGlvbiBPKGUpe3JldHVybiBzZSh0aGlzLGUpLmdldChlKX1mdW5jdGlvbiBTKGUpe3JldHVybiBzZSh0aGlzLGUpLmhhcyhlKX1mdW5jdGlvbiBSKGUsdCl7cmV0dXJuIHNlKHRoaXMsZSkuc2V0KGUsdCksdGhpc31mdW5jdGlvbiBqKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBUOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB4KGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLEhlKSx0aGlzfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWZ1bmN0aW9uIEQoZSl7dGhpcy5fX2RhdGFfXz1uZXcgaChlKX1mdW5jdGlvbiB3KCl7dGhpcy5fX2RhdGFfXz1uZXcgaH1mdW5jdGlvbiBNKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmRlbGV0ZShlKX1mdW5jdGlvbiBrKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1mdW5jdGlvbiBJKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiBQKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgaCl7dmFyIHI9bi5fX2RhdGFfXztpZighSHR8fHIubGVuZ3RoPFBlLTEpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFQocil9cmV0dXJuIG4uc2V0KGUsdCksdGhpc31mdW5jdGlvbiBOKGUsdCl7dmFyIG49dG4oZSl8fFRlKGUpP3MoZS5sZW5ndGgsU3RyaW5nKTpbXSxyPW4ubGVuZ3RoLG89ISFyO2Zvcih2YXIgaSBpbiBlKSF0JiYheHQuY2FsbChlLGkpfHxvJiYoImxlbmd0aCI9PWl8fHVlKGkscikpfHxuLnB1c2goaSk7cmV0dXJuIG59ZnVuY3Rpb24gSChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKHZlKGVbbl1bMF0sdCkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBlJiZKdChlLHQsTWUpfWZ1bmN0aW9uIEIoZSx0KXt0PWRlKHQsZSk/W3RdOnRlKHQpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbZ2UodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTp2b2lkIDB9ZnVuY3Rpb24gVShlKXtyZXR1cm4gTHQuY2FsbChlKX1mdW5jdGlvbiBHKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIHooZSx0LG4scixvKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhUmUoZSkmJiFqZSh0KT9lIT09ZSYmdCE9PXQ6VihlLHQseixuLHIsbykpfWZ1bmN0aW9uIFYoZSx0LG4scixvLHMpe3ZhciBpPXRuKGUpLGw9dG4odCksdT1WZSxjPVZlO2l8fCh1PVp0KGUpLHU9dT09emU/SmU6dSksbHx8KGM9WnQodCksYz1jPT16ZT9KZTpjKTt2YXIgZD11PT1KZSYmIWEoZSksXz1jPT1KZSYmIWEodCkscD11PT1jO2lmKHAmJiFkKXJldHVybiBzfHwocz1uZXcgRCksaXx8bm4oZSk/bmUoZSx0LG4scixvLHMpOnJlKGUsdCx1LG4scixvLHMpO2lmKCEobyZCZSkpe3ZhciBmPWQmJnh0LmNhbGwoZSwiX193cmFwcGVkX18iKSxtPV8mJnh0LmNhbGwodCwiX193cmFwcGVkX18iKTtpZihmfHxtKXt2YXIgaD1mP2UudmFsdWUoKTplLGc9bT90LnZhbHVlKCk6dDtyZXR1cm4gc3x8KHM9bmV3IEQpLG4oaCxnLHIsbyxzKX19cmV0dXJuISFwJiYoc3x8KHM9bmV3IEQpLG9lKGUsdCxuLHIsbyxzKSl9ZnVuY3Rpb24gVyhlLHQsbixyKXt2YXIgbz1uLmxlbmd0aCxzPW8saT0hcjtpZihudWxsPT1lKXJldHVybiFzO2ZvcihlPU9iamVjdChlKTtvLS07KXt2YXIgYT1uW29dO2lmKGkmJmFbMl0/YVsxXSE9PWVbYVswXV06IShhWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK288czspe2E9bltvXTt2YXIgbD1hWzBdLHU9ZVtsXSxjPWFbMV07aWYoaSYmYVsyXSl7aWYodm9pZCAwPT09dSYmIShsIGluIGUpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IEQ7aWYocil2YXIgXz1yKHUsYyxsLGUsdCxkKTtpZighKHZvaWQgMD09PV8/eihjLHUscixGZXxCZSxkKTpfKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gWShlKXtyZXR1cm4hKCFSZShlKXx8cGUoZSkpJiYoT2UoZSl8fGEoZSk/RHQ6ZHQpLnRlc3QoYmUoZSkpfWZ1bmN0aW9uIHEoZSl7cmV0dXJuIGplKGUpJiZTZShlLmxlbmd0aCkmJiEhcHRbTHQuY2FsbChlKV19ZnVuY3Rpb24gSyhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGw9PWU/a2U6Im9iamVjdCI9PXR5cGVvZiBlP3RuKGUpP1EoZVswXSxlWzFdKTokKGUpOkllKGUpfWZ1bmN0aW9uIFgoZSl7aWYoIWZlKGUpKXJldHVybiBQdChlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKXh0LmNhbGwoZSxuKSYmImNvbnN0cnVjdG9yIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uICQoZSl7dmFyIHQ9aWUoZSk7cmV0dXJuIDE9PXQubGVuZ3RoJiZ0WzBdWzJdP2hlKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT1lfHxXKG4sZSx0KX19ZnVuY3Rpb24gUShlLHQpe3JldHVybiBkZShlKSYmbWUodCk/aGUoZ2UoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9RGUobixlKTtyZXR1cm4gdm9pZCAwPT09ciYmcj09PXQ/d2UobixlKTp6KHQscix2b2lkIDAsRmV8QmUpfX1mdW5jdGlvbiBKKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQih0LGUpfX1mdW5jdGlvbiBaKGUsdCl7dmFyIG47cmV0dXJuIFF0KGUsZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSwhIW59ZnVuY3Rpb24gZWUoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHhlKGUpKXJldHVybiAkdD8kdC5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1VZT8iLTAiOnR9ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIHRuKGUpP2U6ZW4oZSl9ZnVuY3Rpb24gbmUoZSx0LG4sbyxzLGkpe3ZhciBhPXMmQmUsbD1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKGwhPXUmJiEoYSYmdT5sKSlyZXR1cm4hMTt2YXIgYz1pLmdldChlKTtpZihjJiZpLmdldCh0KSlyZXR1cm4gYz09dDt2YXIgZD0tMSxfPSEwLHA9cyZGZT9uZXcgajp2b2lkIDA7Zm9yKGkuc2V0KGUsdCksaS5zZXQodCxlKTsrK2Q8bDspe3ZhciBmPWVbZF0sbT10W2RdO2lmKG8pdmFyIGg9YT9vKG0sZixkLHQsZSxpKTpvKGYsbSxkLGUsdCxpKTtpZih2b2lkIDAhPT1oKXtpZihoKWNvbnRpbnVlO189ITE7YnJlYWt9aWYocCl7aWYoIXIodCxmdW5jdGlvbihlLHQpe2lmKCFwLmhhcyh0KSYmKGY9PT1lfHxuKGYsZSxvLHMsaSkpKXJldHVybiBwLmFkZCh0KX0pKXtfPSExO2JyZWFrfX1lbHNlIGlmKGYhPT1tJiYhbihmLG0sbyxzLGkpKXtfPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksX31mdW5jdGlvbiByZShlLHQsbixyLG8scyxpKXtzd2l0Y2gobil7Y2FzZSBvdDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgcnQ6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IXIobmV3IE10KGUpLG5ldyBNdCh0KSkpO2Nhc2UgV2U6Y2FzZSBZZTpjYXNlIFFlOnJldHVybiB2ZSgrZSwrdCk7Y2FzZSBxZTpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2UgWmU6Y2FzZSB0dDpyZXR1cm4gZT09dCsiIjtjYXNlICRlOnZhciBhPWw7Y2FzZSBldDp2YXIgYz1zJkJlO2lmKGF8fChhPXUpLGUuc2l6ZSE9dC5zaXplJiYhYylyZXR1cm4hMTt2YXIgZD1pLmdldChlKTtpZihkKXJldHVybiBkPT10O3N8PUZlLGkuc2V0KGUsdCk7dmFyIF89bmUoYShlKSxhKHQpLHIsbyxzLGkpO3JldHVybiBpLmRlbGV0ZShlKSxfO2Nhc2UgbnQ6aWYoWHQpcmV0dXJuIFh0LmNhbGwoZSk9PVh0LmNhbGwodCl9cmV0dXJuITF9ZnVuY3Rpb24gb2UoZSx0LG4scixvLHMpe3ZhciBpPW8mQmUsYT1NZShlKSxsPWEubGVuZ3RoO2lmKGwhPU1lKHQpLmxlbmd0aCYmIWkpcmV0dXJuITE7Zm9yKHZhciB1PWw7dS0tOyl7dmFyIGM9YVt1XTtpZighKGk/YyBpbiB0Onh0LmNhbGwodCxjKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQoZSk7aWYoZCYmcy5nZXQodCkpcmV0dXJuIGQ9PXQ7dmFyIF89ITA7cy5zZXQoZSx0KSxzLnNldCh0LGUpO2Zvcih2YXIgcD1pOysrdTxsOyl7Yz1hW3VdO3ZhciBmPWVbY10sbT10W2NdO2lmKHIpdmFyIGg9aT9yKG0sZixjLHQsZSxzKTpyKGYsbSxjLGUsdCxzKTtpZighKHZvaWQgMD09PWg/Zj09PW18fG4oZixtLHIsbyxzKTpoKSl7Xz0hMTticmVha31wfHwocD0iY29uc3RydWN0b3IiPT1jKX1pZihfJiYhcCl7dmFyIGc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7ZyE9YiYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBnJiZnIGluc3RhbmNlb2YgZyYmImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBiKSYmKF89ITEpfXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxffWZ1bmN0aW9uIHNlKGUsdCl7dmFyIG49ZS5fX2RhdGFfXztyZXR1cm4gX2UodCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH1mdW5jdGlvbiBpZShlKXtmb3IodmFyIHQ9TWUoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8sbWUobyldfXJldHVybiB0fWZ1bmN0aW9uIGFlKGUsdCl7dmFyIG49aShlLHQpO3JldHVybiBZKG4pP246dm9pZCAwfWZ1bmN0aW9uIGxlKGUsdCxuKXt0PWRlKHQsZSk/W3RdOnRlKHQpO2Zvcih2YXIgcixvPS0xLHM9dC5sZW5ndGg7KytvPHM7KXt2YXIgaT1nZSh0W29dKTtpZighKHI9bnVsbCE9ZSYmbihlLGkpKSlicmVhaztlPWVbaV19aWYocilyZXR1cm4gcjt2YXIgcz1lP2UubGVuZ3RoOjA7cmV0dXJuISFzJiZTZShzKSYmdWUoaSxzKSYmKHRuKGUpfHxUZShlKSl9ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/R2U6dCkmJigibnVtYmVyIj09dHlwZW9mIGV8fF90LnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBjZShlLHQsbil7aWYoIVJlKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1yP0FlKG4pJiZ1ZSh0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmdmUoblt0XSxlKX1mdW5jdGlvbiBkZShlLHQpe2lmKHRuKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPWUmJiF4ZShlKSl8fChpdC50ZXN0KGUpfHwhc3QudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBPYmplY3QodCkpfWZ1bmN0aW9uIF9lKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiJzdHJpbmciPT10fHwibnVtYmVyIj09dHx8InN5bWJvbCI9PXR8fCJib29sZWFuIj09dD8iX19wcm90b19fIiE9PWU6bnVsbD09PWV9ZnVuY3Rpb24gcGUoZSl7cmV0dXJuISFSdCYmUnQgaW4gZX1mdW5jdGlvbiBmZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8T3QpfWZ1bmN0aW9uIG1lKGUpe3JldHVybiBlPT09ZSYmIVJlKGUpfWZ1bmN0aW9uIGhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiYobltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChuKSkpfX1mdW5jdGlvbiBnZShlKXtpZigic3RyaW5nIj09dHlwZW9mIGV8fHhlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1VZT8iLTAiOnR9ZnVuY3Rpb24gYmUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBqdC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2goZSl7fX1yZXR1cm4iIn1mdW5jdGlvbiBFZShlLHQsbil7dmFyIG89dG4oZSk/cjpaO3JldHVybiBuJiZjZShlLHQsbikmJih0PXZvaWQgMCksbyhlLEsodCwzKSl9ZnVuY3Rpb24geWUoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihOZSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLHM9bi5jYWNoZTtpZihzLmhhcyhvKSlyZXR1cm4gcy5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPXMuc2V0KG8saSksaX07cmV0dXJuIG4uY2FjaGU9bmV3KHllLkNhY2hlfHxUKSxufWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIENlKGUpJiZ4dC5jYWxsKGUsImNhbGxlZSIpJiYoIWt0LmNhbGwoZSwiY2FsbGVlIil8fEx0LmNhbGwoZSk9PXplKX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gbnVsbCE9ZSYmU2UoZS5sZW5ndGgpJiYhT2UoZSl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIGplKGUpJiZBZShlKX1mdW5jdGlvbiBPZShlKXt2YXIgdD1SZShlKT9MdC5jYWxsKGUpOiIiO3JldHVybiB0PT1LZXx8dD09WGV9ZnVuY3Rpb24gU2UoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PUdlfWZ1bmN0aW9uIFJlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX1mdW5jdGlvbiBqZShlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGV8fGplKGUpJiZMdC5jYWxsKGUpPT1udH1mdW5jdGlvbiBMZShlKXtyZXR1cm4gbnVsbD09ZT8iIjplZShlKX1mdW5jdGlvbiBEZShlLHQsbil7dmFyIHI9bnVsbD09ZT92b2lkIDA6QihlLHQpO3JldHVybiB2b2lkIDA9PT1yP246cn1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiBudWxsIT1lJiZsZShlLHQsRyl9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIEFlKGUpP04oZSk6WChlKX1mdW5jdGlvbiBrZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBJZShlKXtyZXR1cm4gZGUoZSk/byhnZShlKSk6SihlKX12YXIgUGU9MjAwLE5lPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixIZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsRmU9MSxCZT0yLFVlPTEvMCxHZT05MDA3MTk5MjU0NzQwOTkxLHplPSJbb2JqZWN0IEFyZ3VtZW50c10iLFZlPSJbb2JqZWN0IEFycmF5XSIsV2U9IltvYmplY3QgQm9vbGVhbl0iLFllPSJbb2JqZWN0IERhdGVdIixxZT0iW29iamVjdCBFcnJvcl0iLEtlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsWGU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwkZT0iW29iamVjdCBNYXBdIixRZT0iW29iamVjdCBOdW1iZXJdIixKZT0iW29iamVjdCBPYmplY3RdIixaZT0iW29iamVjdCBSZWdFeHBdIixldD0iW29iamVjdCBTZXRdIix0dD0iW29iamVjdCBTdHJpbmddIixudD0iW29iamVjdCBTeW1ib2xdIixydD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLG90PSJbb2JqZWN0IERhdGFWaWV3XSIsc3Q9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8saXQ9L15cdyokLyxhdD0vXlwuLyxsdD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyx1dD0vW1xcXiQuKis/KClbXF17fXxdL2csY3Q9L1xcKFxcKT8vZyxkdD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxfdD0vXig/OjB8WzEtOV1cZCopJC8scHQ9e307cHRbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXB0WyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1wdFsiW29iamVjdCBJbnQ4QXJyYXldIl09cHRbIltvYmplY3QgSW50MTZBcnJheV0iXT1wdFsiW29iamVjdCBJbnQzMkFycmF5XSJdPXB0WyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09cHRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09cHRbIltvYmplY3QgVWludDE2QXJyYXldIl09cHRbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAscHRbemVdPXB0W1ZlXT1wdFtydF09cHRbV2VdPXB0W290XT1wdFtZZV09cHRbcWVdPXB0W0tlXT1wdFskZV09cHRbUWVdPXB0W0plXT1wdFtaZV09cHRbZXRdPXB0W3R0XT1wdFsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBmdD0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlLG10PSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaHQ9ZnR8fG10fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGd0PSJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsYnQ9Z3QmJiJvYmplY3QiPT10eXBlb2YgbiYmbiYmIW4ubm9kZVR5cGUmJm4sRXQ9YnQmJmJ0LmV4cG9ydHM9PT1ndCx5dD1FdCYmZnQucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4geXQmJnl0LmJpbmRpbmcoInV0aWwiKX1jYXRjaChlKXt9fSgpLFR0PXZ0JiZ2dC5pc1R5cGVkQXJyYXksQXQ9QXJyYXkucHJvdG90eXBlLEN0PUZ1bmN0aW9uLnByb3RvdHlwZSxPdD1PYmplY3QucHJvdG90eXBlLFN0PWh0WyJfX2NvcmUtanNfc2hhcmVkX18iXSxSdD1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoU3QmJlN0LmtleXMmJlN0LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCksanQ9Q3QudG9TdHJpbmcseHQ9T3QuaGFzT3duUHJvcGVydHksTHQ9T3QudG9TdHJpbmcsRHQ9UmVnRXhwKCJeIitqdC5jYWxsKHh0KS5yZXBsYWNlKHV0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLHd0PWh0LlN5bWJvbCxNdD1odC5VaW50OEFycmF5LGt0PU90LnByb3BlcnR5SXNFbnVtZXJhYmxlLEl0PUF0LnNwbGljZSxQdD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19KE9iamVjdC5rZXlzLE9iamVjdCksTnQ9YWUoaHQsIkRhdGFWaWV3IiksSHQ9YWUoaHQsIk1hcCIpLEZ0PWFlKGh0LCJQcm9taXNlIiksQnQ9YWUoaHQsIlNldCIpLFV0PWFlKGh0LCJXZWFrTWFwIiksR3Q9YWUoT2JqZWN0LCJjcmVhdGUiKSx6dD1iZShOdCksVnQ9YmUoSHQpLFd0PWJlKEZ0KSxZdD1iZShCdCkscXQ9YmUoVXQpLEt0PXd0P3d0LnByb3RvdHlwZTp2b2lkIDAsWHQ9S3Q/S3QudmFsdWVPZjp2b2lkIDAsJHQ9S3Q/S3QudG9TdHJpbmc6dm9pZCAwO2MucHJvdG90eXBlLmNsZWFyPWQsYy5wcm90b3R5cGUuZGVsZXRlPV8sYy5wcm90b3R5cGUuZ2V0PXAsYy5wcm90b3R5cGUuaGFzPWYsYy5wcm90b3R5cGUuc2V0PW0saC5wcm90b3R5cGUuY2xlYXI9ZyxoLnByb3RvdHlwZS5kZWxldGU9YixoLnByb3RvdHlwZS5nZXQ9RSxoLnByb3RvdHlwZS5oYXM9eSxoLnByb3RvdHlwZS5zZXQ9dixULnByb3RvdHlwZS5jbGVhcj1BLFQucHJvdG90eXBlLmRlbGV0ZT1DLFQucHJvdG90eXBlLmdldD1PLFQucHJvdG90eXBlLmhhcz1TLFQucHJvdG90eXBlLnNldD1SLGoucHJvdG90eXBlLmFkZD1qLnByb3RvdHlwZS5wdXNoPXgsai5wcm90b3R5cGUuaGFzPUwsRC5wcm90b3R5cGUuY2xlYXI9dyxELnByb3RvdHlwZS5kZWxldGU9TSxELnByb3RvdHlwZS5nZXQ9ayxELnByb3RvdHlwZS5oYXM9SSxELnByb3RvdHlwZS5zZXQ9UDt2YXIgUXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFBZShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxzPXQ/bzotMSxpPU9iamVjdChuKTsodD9zLS06KytzPG8pJiYhMSE9PXIoaVtzXSxzLGkpOyk7cmV0dXJuIG59fShGKSxKdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxzPU9iamVjdCh0KSxpPXIodCksYT1pLmxlbmd0aDthLS07KXt2YXIgbD1pW2U/YTorK29dO2lmKCExPT09bihzW2xdLGwscykpYnJlYWt9cmV0dXJuIHR9fSgpLFp0PVU7KE50JiZadChuZXcgTnQobmV3IEFycmF5QnVmZmVyKDEpKSkhPW90fHxIdCYmWnQobmV3IEh0KSE9JGV8fEZ0JiYiW29iamVjdCBQcm9taXNlXSIhPVp0KEZ0LnJlc29sdmUoKSl8fEJ0JiZadChuZXcgQnQpIT1ldHx8VXQmJiJbb2JqZWN0IFdlYWtNYXBdIiE9WnQobmV3IFV0KSkmJihadD1mdW5jdGlvbihlKXt2YXIgdD1MdC5jYWxsKGUpLG49dD09SmU/ZS5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP2JlKG4pOnZvaWQgMDtpZihyKXN3aXRjaChyKXtjYXNlIHp0OnJldHVybiBvdDtjYXNlIFZ0OnJldHVybiAkZTtjYXNlIFd0OnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIFl0OnJldHVybiBldDtjYXNlIHF0OnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pO3ZhciBlbj15ZShmdW5jdGlvbihlKXtlPUxlKGUpO3ZhciB0PVtdO3JldHVybiBhdC50ZXN0KGUpJiZ0LnB1c2goIiIpLGUucmVwbGFjZShsdCxmdW5jdGlvbihlLG4scixvKXt0LnB1c2gocj9vLnJlcGxhY2UoY3QsIiQxIik6bnx8ZSl9KSx0fSk7eWUuQ2FjaGU9VDt2YXIgdG49QXJyYXkuaXNBcnJheSxubj1UdD9mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fShUdCk6cTtuLmV4cG9ydHM9RWV9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gudW5pb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGUuY2FsbCh0KTtjYXNlIDE6cmV0dXJuIGUuY2FsbCh0LG5bMF0pO2Nhc2UgMjpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gZS5hcHBseSh0LG4pfWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4hIShlP2UubGVuZ3RoOjApJiZhKGUsdCwwKT4tMX1mdW5jdGlvbiBvKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lP2UubGVuZ3RoOjA7KytyPG87KWlmKG4odCxlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPS0xLHI9dC5sZW5ndGgsbz1lLmxlbmd0aDsrK248cjspZVtvK25dPXRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gaShlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgscz1uKyhyPzE6LTEpO3I/cy0tOisrczxvOylpZih0KGVbc10scyxlKSlyZXR1cm4gcztyZXR1cm4tMX1mdW5jdGlvbiBhKGUsdCxuKXtpZih0IT09dClyZXR1cm4gaShlLGwsbik7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBsKGUpe3JldHVybiBlIT09ZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX1mdW5jdGlvbiBkKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nKXRyeXt0PSEhKGUrIiIpfWNhdGNoKGUpe31yZXR1cm4gdH1mdW5jdGlvbiBfKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSksbn1mdW5jdGlvbiBwKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIGYoKXt0aGlzLl9fZGF0YV9fPVNlP1NlKG51bGwpOnt9fWZ1bmN0aW9uIG0oZSl7cmV0dXJuIHRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXX1mdW5jdGlvbiBoKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoU2Upe3ZhciBuPXRbZV07cmV0dXJuIG49PT1lZT92b2lkIDA6bn1yZXR1cm4gaGUuY2FsbCh0LGUpP3RbZV06dm9pZCAwfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gU2U/dm9pZCAwIT09dFtlXTpoZS5jYWxsKHQsZSl9ZnVuY3Rpb24gYihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPVNlJiZ2b2lkIDA9PT10P2VlOnQsdGhpc31mdW5jdGlvbiBFKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIHkoKXt0aGlzLl9fZGF0YV9fPVtdfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPWsodCxlKTtyZXR1cm4hKG48MCkmJihuPT10Lmxlbmd0aC0xP3QucG9wKCk6dmUuY2FsbCh0LG4sMSksITApfWZ1bmN0aW9uIFQoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPWsodCxlKTtyZXR1cm4gbjwwP3ZvaWQgMDp0W25dWzFdfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGsodGhpcy5fX2RhdGFfXyxlKT4tMX1mdW5jdGlvbiBDKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPWsobixlKTtyZXR1cm4gcjwwP24ucHVzaChbZSx0XSk6bltyXVsxXT10LHRoaXN9ZnVuY3Rpb24gTyhlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBTKCl7dGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcCxtYXA6bmV3KENlfHxFKSxzdHJpbmc6bmV3IHB9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuIEgodGhpcyxlKS5kZWxldGUoZSl9ZnVuY3Rpb24gaihlKXtyZXR1cm4gSCh0aGlzLGUpLmdldChlKX1mdW5jdGlvbiB4KGUpe3JldHVybiBIKHRoaXMsZSkuaGFzKGUpfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gSCh0aGlzLGUpLnNldChlLHQpLHRoaXN9ZnVuY3Rpb24gRChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgTzsrK3Q8bjspdGhpcy5hZGQoZVt0XSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxlZSksdGhpc31mdW5jdGlvbiBNKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoVihlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEkoZSx0LG4scixvKXt2YXIgaT0tMSxhPWUubGVuZ3RoO2ZvcihufHwobj1CKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/SShsLHQtMSxuLHIsbyk6cyhvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb31mdW5jdGlvbiBQKGUpe3JldHVybiEoISQoZSl8fEcoZSkpJiYoSyhlKXx8ZChlKT9iZTppZSkudGVzdCh6KGUpKX1mdW5jdGlvbiBOKGUsdCxuKXt2YXIgcz0tMSxpPXIsYT1lLmxlbmd0aCxsPSEwLGM9W10sZD1jO2lmKG4pbD0hMSxpPW87ZWxzZSBpZihhPj1aKXt2YXIgcD10P251bGw6UmUoZSk7aWYocClyZXR1cm4gXyhwKTtsPSExLGk9dSxkPW5ldyBEfWVsc2UgZD10P1tdOmM7ZTpmb3IoOysrczxhOyl7dmFyIGY9ZVtzXSxtPXQ/dChmKTpmO2lmKGY9bnx8MCE9PWY/ZjowLGwmJm09PT1tKXtmb3IodmFyIGg9ZC5sZW5ndGg7aC0tOylpZihkW2hdPT09bSljb250aW51ZSBlO3QmJmQucHVzaChtKSxjLnB1c2goZil9ZWxzZSBpKGQsbSxuKXx8KGQhPT1jJiZkLnB1c2gobSksYy5wdXNoKGYpKX1yZXR1cm4gY31mdW5jdGlvbiBIKGUsdCl7dmFyIG49ZS5fX2RhdGFfXztyZXR1cm4gVSh0KT9uWyJzdHJpbmciPT10eXBlb2YgdD8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfWZ1bmN0aW9uIEYoZSx0KXt2YXIgbj1jKGUsdCk7cmV0dXJuIFAobik/bjp2b2lkIDB9ZnVuY3Rpb24gQihlKXtyZXR1cm4geGUoZSl8fFcoZSl8fCEhKFRlJiZlJiZlW1RlXSl9ZnVuY3Rpb24gVShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfWZ1bmN0aW9uIEcoZSl7cmV0dXJuISFmZSYmZmUgaW4gZX1mdW5jdGlvbiB6KGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gbWUuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlKyIifWNhdGNoKGUpe319cmV0dXJuIiJ9ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIFcoZSl7cmV0dXJuIHEoZSkmJmhlLmNhbGwoZSwiY2FsbGVlIikmJigheWUuY2FsbChlLCJjYWxsZWUiKXx8Z2UuY2FsbChlKT09bmUpfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIG51bGwhPWUmJlgoZS5sZW5ndGgpJiYhSyhlKX1mdW5jdGlvbiBxKGUpe3JldHVybiBRKGUpJiZZKGUpfWZ1bmN0aW9uIEsoZSl7dmFyIHQ9JChlKT9nZS5jYWxsKGUpOiIiO3JldHVybiB0PT1yZXx8dD09b2V9ZnVuY3Rpb24gWChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9dGV9ZnVuY3Rpb24gJChlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZnVuY3Rpb24gUShlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBKKCl7fXZhciBaPTIwMCxlZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsdGU9OTAwNzE5OTI1NDc0MDk5MSxuZT0iW29iamVjdCBBcmd1bWVudHNdIixyZT0iW29iamVjdCBGdW5jdGlvbl0iLG9lPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsc2U9L1tcXF4kLiorPygpW1xde318XS9nLGllPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGFlPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsbGU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1ZT1hZXx8bGV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksY2U9QXJyYXkucHJvdG90eXBlLGRlPUZ1bmN0aW9uLnByb3RvdHlwZSxfZT1PYmplY3QucHJvdG90eXBlLHBlPXVlWyJfX2NvcmUtanNfc2hhcmVkX18iXSxmZT1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMocGUmJnBlLmtleXMmJnBlLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCksbWU9ZGUudG9TdHJpbmcsaGU9X2UuaGFzT3duUHJvcGVydHksZ2U9X2UudG9TdHJpbmcsYmU9UmVnRXhwKCJeIittZS5jYWxsKGhlKS5yZXBsYWNlKHNlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLEVlPXVlLlN5bWJvbCx5ZT1fZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSx2ZT1jZS5zcGxpY2UsVGU9RWU/RWUuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMCxBZT1NYXRoLm1heCxDZT1GKHVlLCJNYXAiKSxPZT1GKHVlLCJTZXQiKSxTZT1GKE9iamVjdCwiY3JlYXRlIik7cC5wcm90b3R5cGUuY2xlYXI9ZixwLnByb3RvdHlwZS5kZWxldGU9bSxwLnByb3RvdHlwZS5nZXQ9aCxwLnByb3RvdHlwZS5oYXM9ZyxwLnByb3RvdHlwZS5zZXQ9YixFLnByb3RvdHlwZS5jbGVhcj15LEUucHJvdG90eXBlLmRlbGV0ZT12LEUucHJvdG90eXBlLmdldD1ULEUucHJvdG90eXBlLmhhcz1BLEUucHJvdG90eXBlLnNldD1DLE8ucHJvdG90eXBlLmNsZWFyPVMsTy5wcm90b3R5cGUuZGVsZXRlPVIsTy5wcm90b3R5cGUuZ2V0PWosTy5wcm90b3R5cGUuaGFzPXgsTy5wcm90b3R5cGUuc2V0PUwsRC5wcm90b3R5cGUuYWRkPUQucHJvdG90eXBlLnB1c2g9dyxELnByb3RvdHlwZS5oYXM9TTt2YXIgUmU9T2UmJjEvXyhuZXcgT2UoWywtMF0pKVsxXT09MS8wP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgT2UoZSl9OkosamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1BZSh2b2lkIDA9PT10P2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMsbz0tMSxzPUFlKHIubGVuZ3RoLXQsMCksaT1BcnJheShzKTsrK288czspaVtvXT1yW3Qrb107bz0tMTtmb3IodmFyIGE9QXJyYXkodCsxKTsrK288dDspYVtvXT1yW29dO3JldHVybiBhW3RdPWksbihlLHRoaXMsYSl9fShmdW5jdGlvbihlKXtyZXR1cm4gTihJKGUsMSxxLCEwKSl9KSx4ZT1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1qZX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19EYXRhVmlldy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiKSxzPXIobywiRGF0YVZpZXciKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIpO3IucHJvdG90eXBlLmNsZWFyPW8sci5wcm90b3R5cGUuZGVsZXRlPXMsci5wcm90b3R5cGUuZ2V0PWksci5wcm90b3R5cGUuaGFzPWEsci5wcm90b3R5cGUuc2V0PWwsZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiKTtyLnByb3RvdHlwZS5jbGVhcj1vLHIucHJvdG90eXBlLmRlbGV0ZT1zLHIucHJvdG90eXBlLmdldD1pLHIucHJvdG90eXBlLmhhcz1hLHIucHJvdG90eXBlLnNldD1sLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIikscz1yKG8sIk1hcCIpO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIik7ci5wcm90b3R5cGUuY2xlYXI9byxyLnByb3RvdHlwZS5kZWxldGU9cyxyLnByb3RvdHlwZS5nZXQ9aSxyLnByb3RvdHlwZS5oYXM9YSxyLnByb3RvdHlwZS5zZXQ9bCxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiKSxzPXIobywiUHJvbWlzZSIpO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIikscz1yKG8sIlNldCIpO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IG87Kyt0PG47KXRoaXMuYWRkKGVbdF0pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiKTtyLnByb3RvdHlwZS5hZGQ9ci5wcm90b3R5cGUucHVzaD1zLHIucHJvdG90eXBlLmhhcz1pLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgbyhlKTt0aGlzLnNpemU9dC5zaXplfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiKTtyLnByb3RvdHlwZS5jbGVhcj1zLHIucHJvdG90eXBlLmRlbGV0ZT1pLHIucHJvdG90eXBlLmdldD1hLHIucHJvdG90eXBlLmhhcz1sLHIucHJvdG90eXBlLnNldD11LGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiKSxvPXIuU3ltYm9sO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiksbz1yLlVpbnQ4QXJyYXk7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIikscz1yKG8sIldlYWtNYXAiKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGUuY2FsbCh0KTtjYXNlIDE6cmV0dXJuIGUuY2FsbCh0LG5bMF0pO2Nhc2UgMjpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gZS5hcHBseSh0LG4pfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248ciYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89MCxzPVtdOysrbjxyOyl7dmFyIGk9ZVtuXTt0KGksbixlKSYmKHNbbysrXT1pKX1yZXR1cm4gc31lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4hIShudWxsPT1lPzA6ZS5sZW5ndGgpJiZvKGUsdCwwKT4tMX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWkoZSkscj0hbiYmcyhlKSxjPSFuJiYhciYmYShlKSxfPSFuJiYhciYmIWMmJnUoZSkscD1ufHxyfHxjfHxfLGY9cD9vKGUubGVuZ3RoLFN0cmluZyk6W10sbT1mLmxlbmd0aDtmb3IodmFyIGggaW4gZSkhdCYmIWQuY2FsbChlLGgpfHxwJiYoImxlbmd0aCI9PWh8fGMmJigib2Zmc2V0Ij09aHx8InBhcmVudCI9PWgpfHxfJiYoImJ1ZmZlciI9PWh8fCJieXRlTGVuZ3RoIj09aHx8ImJ5dGVPZmZzZXQiPT1oKXx8bChoLG0pKXx8Zi5wdXNoKGgpO3JldHVybiBmfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIpLGM9T2JqZWN0LnByb3RvdHlwZSxkPWMuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKHQoZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWVbdF07YS5jYWxsKGUsdCkmJnMocixuKSYmKHZvaWQgMCE9PW58fHQgaW4gZSl8fG8oZSx0LG4pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiKSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYobyhlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlJiZvKHQscyh0KSxlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlPYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSYmbyh0LHModCksZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4peyJfX3Byb3RvX18iPT10JiZvP28oZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6ZVt0XT1ufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsYW1wLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBlPT09ZSYmKHZvaWQgMCE9PW4mJihlPWU8PW4/ZTpuKSx2b2lkIDAhPT10JiYoZT1lPj10P2U6dCkpLGV9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4sTSxrLEkpe3ZhciBQLE49dCZPLEg9dCZTLEY9dCZSO2lmKG4mJihQPWs/bihlLE0sayxJKTpuKGUpKSx2b2lkIDAhPT1QKXJldHVybiBQO2lmKCFUKGUpKXJldHVybiBlO3ZhciBCPUUoZSk7aWYoQil7aWYoUD1oKGUpLCFOKXJldHVybiBjKGUsUCl9ZWxzZXt2YXIgVT1tKGUpLEc9VT09eHx8VT09TDtpZih5KGUpKXJldHVybiB1KGUsTik7aWYoVT09RHx8VT09anx8RyYmIWspe2lmKFA9SHx8Rz97fTpiKGUpLCFOKXJldHVybiBIP18oZSxsKFAsZSkpOmQoZSxhKFAsZSkpfWVsc2V7aWYoIXdbVV0pcmV0dXJuIGs/ZTp7fTtQPWcoZSxVLE4pfX1JfHwoST1uZXcgbyk7dmFyIHo9SS5nZXQoZSk7aWYoeilyZXR1cm4gejtpZihJLnNldChlLFApLEEoZSkpcmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihvKXtQLmFkZChyKG8sdCxuLG8sZSxJKSl9KSxQO2lmKHYoZSkpcmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihvLHMpe1Auc2V0KHMscihvLHQsbixzLGUsSSkpfSksUDt2YXIgVj1GP0g/ZjpwOkg/a2V5c0luOkMsVz1CP3ZvaWQgMDpWKGUpO3JldHVybiBzKFd8fGUsZnVuY3Rpb24obyxzKXtXJiYocz1vLG89ZVtzXSksaShQLHMscihvLHQsbixzLGUsSSkpfSksUH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHNJbi5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQnlUYWcuanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiksRT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiksdj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNNYXAuanMiKSxUPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIpLEE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiksQz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIpLE89MSxTPTIsUj00LGo9IltvYmplY3QgQXJndW1lbnRzXSIseD0iW29iamVjdCBGdW5jdGlvbl0iLEw9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixEPSJbb2JqZWN0IE9iamVjdF0iLHc9e307d1tqXT13WyJbb2JqZWN0IEFycmF5XSJdPXdbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09d1siW29iamVjdCBEYXRhVmlld10iXT13WyJbb2JqZWN0IEJvb2xlYW5dIl09d1siW29iamVjdCBEYXRlXSJdPXdbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXdbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXdbIltvYmplY3QgSW50OEFycmF5XSJdPXdbIltvYmplY3QgSW50MTZBcnJheV0iXT13WyJbb2JqZWN0IEludDMyQXJyYXldIl09d1siW29iamVjdCBNYXBdIl09d1siW29iamVjdCBOdW1iZXJdIl09d1tEXT13WyJbb2JqZWN0IFJlZ0V4cF0iXT13WyJbb2JqZWN0IFNldF0iXT13WyJbb2JqZWN0IFN0cmluZ10iXT13WyJbb2JqZWN0IFN5bWJvbF0iXT13WyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09d1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT13WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPXdbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsd1siW29iamVjdCBFcnJvcl0iXT13W3hdPXdbIltvYmplY3QgV2Vha01hcF0iXT0hMSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIpLG89T2JqZWN0LmNyZWF0ZSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJue307aWYobylyZXR1cm4gbyh0KTtlLnByb3RvdHlwZT10O3ZhciBuPW5ldyBlO3JldHVybiBlLnByb3RvdHlwZT12b2lkIDAsbn19KCk7ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgZD0tMSxfPXMscD0hMCxmPWUubGVuZ3RoLG09W10saD10Lmxlbmd0aDtpZighZilyZXR1cm4gbTtuJiYodD1hKHQsbChuKSkpLHI/KF89aSxwPSExKTp0Lmxlbmd0aD49YyYmKF89dSxwPSExLHQ9bmV3IG8odCkpO2U6Zm9yKDsrK2Q8Zjspe3ZhciBnPWVbZF0sYj1udWxsPT1uP2c6bihnKTtpZihnPXJ8fDAhPT1nP2c6MCxwJiZiPT09Yil7Zm9yKHZhciBFPWg7RS0tOylpZih0W0VdPT09Yiljb250aW51ZSBlO20ucHVzaChnKX1lbHNlIF8odCxiLHIpfHxtLnB1c2goZyl9cmV0dXJuIG19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIpLGM9MjAwO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLHM9bisocj8xOi0xKTtyP3MtLTorK3M8bzspaWYodChlW3NdLHMsZSkpcmV0dXJuIHM7cmV0dXJuLTF9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixpLGEpe3ZhciBsPS0xLHU9ZS5sZW5ndGg7Zm9yKG58fChuPXMpLGF8fChhPVtdKTsrK2w8dTspe3ZhciBjPWVbbF07dD4wJiZuKGMpP3Q+MT9yKGMsdC0xLG4saSxhKTpvKGEsYyk6aXx8KGFbYS5sZW5ndGhdPWMpfXJldHVybiBhfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt0PW8odCxlKTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW3ModFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTp2b2lkIDB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQoZSk7cmV0dXJuIHMoZSk/cjpvKHIsbihlKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMD09PWU/bDphOnUmJnUgaW4gT2JqZWN0KGUpP3MoZSk6aShlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiKSxhPSJbb2JqZWN0IE51bGxdIixsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHU9bz9vLnRvU3RyaW5nVGFnOnZvaWQgMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQ9PT10P2koZSx0LG4pOm8oZSxzLG4pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBzKGUpJiZvKGUpPT1pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIpLGk9IltvYmplY3QgQXJndW1lbnRzXSI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixpLGEpe3JldHVybiBlPT09dHx8KG51bGw9PWV8fG51bGw9PXR8fCFzKGUpJiYhcyh0KT9lIT09ZSYmdCE9PXQ6byhlLHQsbixpLHIsYSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scixoLGIpe3ZhciBFPXUoZSkseT11KHQpLHY9RT9mOmwoZSksVD15P2Y6bCh0KTt2PXY9PXA/bTp2LFQ9VD09cD9tOlQ7dmFyIEE9dj09bSxDPVQ9PW0sTz12PT1UO2lmKE8mJmMoZSkpe2lmKCFjKHQpKXJldHVybiExO0U9ITAsQT0hMX1pZihPJiYhQSlyZXR1cm4gYnx8KGI9bmV3IG8pLEV8fGQoZSk/cyhlLHQsbixyLGgsYik6aShlLHQsdixuLHIsaCxiKTtpZighKG4mXykpe3ZhciBTPUEmJmcuY2FsbChlLCJfX3dyYXBwZWRfXyIpLFI9QyYmZy5jYWxsKHQsIl9fd3JhcHBlZF9fIik7aWYoU3x8Uil7dmFyIGo9Uz9lLnZhbHVlKCk6ZSx4PVI/dC52YWx1ZSgpOnQ7cmV0dXJuIGJ8fChiPW5ldyBvKSxoKGoseCxuLHIsYil9fXJldHVybiEhTyYmKGJ8fChiPW5ldyBvKSxhKGUsdCxuLHIsaCxiKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiKSxfPTEscD0iW29iamVjdCBBcmd1bWVudHNdIixmPSJbb2JqZWN0IEFycmF5XSIsbT0iW29iamVjdCBPYmplY3RdIixoPU9iamVjdC5wcm90b3R5cGUsZz1oLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBzKGUpJiZvKGUpPT1pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiksaT0iW29iamVjdCBNYXBdIjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWF0Y2guanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBsPW4ubGVuZ3RoLHU9bCxjPSFyO2lmKG51bGw9PWUpcmV0dXJuIXU7Zm9yKGU9T2JqZWN0KGUpO2wtLTspe3ZhciBkPW5bbF07aWYoYyYmZFsyXT9kWzFdIT09ZVtkWzBdXTohKGRbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysrbDx1Oyl7ZD1uW2xdO3ZhciBfPWRbMF0scD1lW19dLGY9ZFsxXTtpZihjJiZkWzJdKXtpZih2b2lkIDA9PT1wJiYhKF8gaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgbT1uZXcgbztpZihyKXZhciBoPXIocCxmLF8sZSx0LG0pO2lmKCEodm9pZCAwPT09aD9zKGYscCxpfGEscixtKTpoKSlyZXR1cm4hMX19cmV0dXJuITB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIpLGk9MSxhPTI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBlIT09ZX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4hKCFpKGUpfHxzKGUpKSYmKG8oZSk/Zjp1KS50ZXN0KGEoZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiKSxsPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyx1PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGM9RnVuY3Rpb24ucHJvdG90eXBlLGQ9T2JqZWN0LnByb3RvdHlwZSxfPWMudG9TdHJpbmcscD1kLmhhc093blByb3BlcnR5LGY9UmVnRXhwKCJeIitfLmNhbGwocCkucmVwbGFjZShsLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNTZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBzKGUpJiZvKGUpPT1pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiksaT0iW29iamVjdCBTZXRdIjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSkmJnMoZS5sZW5ndGgpJiYhIWFbbyhlKV19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiKSxhPXt9O2FbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPWFbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWFbIltvYmplY3QgSW50OEFycmF5XSJdPWFbIltvYmplY3QgSW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IEludDMyQXJyYXldIl09YVsiW29iamVjdCBVaW50OEFycmF5XSJdPWFbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09YVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGFbIltvYmplY3QgQXJndW1lbnRzXSJdPWFbIltvYmplY3QgQXJyYXldIl09YVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1hWyJbb2JqZWN0IEJvb2xlYW5dIl09YVsiW29iamVjdCBEYXRhVmlld10iXT1hWyJbb2JqZWN0IERhdGVdIl09YVsiW29iamVjdCBFcnJvcl0iXT1hWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWFbIltvYmplY3QgTWFwXSJdPWFbIltvYmplY3QgTnVtYmVyXSJdPWFbIltvYmplY3QgT2JqZWN0XSJdPWFbIltvYmplY3QgUmVnRXhwXSJdPWFbIltvYmplY3QgU2V0XSJdPWFbIltvYmplY3QgU3RyaW5nXSJdPWFbIltvYmplY3QgV2Vha01hcF0iXT0hMSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUl0ZXJhdGVlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGw9PWU/aToib2JqZWN0Ij09dHlwZW9mIGU/YShlKT9zKGVbMF0sZVsxXSk6byhlKTpsKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtpZighbyhlKSlyZXR1cm4gcyhlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKWEuY2FsbChlLG4pJiYiY29uc3RydWN0b3IiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiksaT1PYmplY3QucHJvdG90eXBlLGE9aS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIW8oZSkpcmV0dXJuIGkoZSk7dmFyIHQ9cyhlKSxuPVtdO2Zvcih2YXIgciBpbiBlKSgiY29uc3RydWN0b3IiIT1yfHwhdCYmbC5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIpLGE9T2JqZWN0LnByb3RvdHlwZSxsPWEuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1zKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT9pKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT1lfHxvKG4sZSx0KX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXRjaERhdGEuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gYShlKSYmbCh0KT91KGMoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9cyhuLGUpO3JldHVybiB2b2lkIDA9PT1yJiZyPT09dD9pKG4sZSk6byh0LHIsZHxfKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIpLGQ9MSxfPTI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQaWNrLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBvKGUsdCxmdW5jdGlvbih0LG4pe3JldHVybiBzKGUsbil9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQaWNrQnkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9oYXNJbi5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7Zm9yKHZhciByPS0xLGE9dC5sZW5ndGgsbD17fTsrK3I8YTspe3ZhciB1PXRbcl0sYz1vKGUsdSk7bihjLHUpJiZzKGwsaSh1LGUpLGMpfXJldHVybiBsfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eURlZXAuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGkocyhlLHQsbyksZSsiIil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKCFhKGUpKXJldHVybiBlO3Q9cyh0LGUpO2Zvcih2YXIgdT0tMSxjPXQubGVuZ3RoLGQ9Yy0xLF89ZTtudWxsIT1fJiYrK3U8Yzspe3ZhciBwPWwodFt1XSksZj1uO2lmKHUhPWQpe3ZhciBtPV9bcF07Zj1yP3IobSxwLF8pOnZvaWQgMCx2b2lkIDA9PT1mJiYoZj1hKG0pP206aSh0W3UrMV0pP1tdOnt9KX1vKF8scCxmKSxfPV9bcF19cmV0dXJuIGV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiKSxpPW8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnIodCksd3JpdGFibGU6ITB9KX06cztlLmV4cG9ydHM9aX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihpKGUpKXJldHVybiBzKGUscikrIiI7aWYoYShlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LWw/Ii0wIjp0fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiksbD0xLzAsdT1vP28ucHJvdG90eXBlOnZvaWQgMCxjPXU/dS50b1N0cmluZzp2b2lkIDA7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS5oYXModCl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBvKGUpP2U6cyhlLHQpP1tlXTppKGEoZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBvKHQpLnNldChuZXcgbyhlKSksdH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVCdWZmZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1lLmxlbmd0aCxyPXU/dShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIikscz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LGk9cyYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPWkmJmkuZXhwb3J0cz09PXMsbD1hP28uQnVmZmVyOnZvaWQgMCx1PWw/bC5hbGxvY1Vuc2FmZTp2b2lkIDA7ZS5leHBvcnRzPXJ9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10P28oZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihuLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVJlZ0V4cC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHIuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9dmFyIHI9L1x3KiQvO2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVN5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGk/T2JqZWN0KGkuY2FsbChlKSk6e319dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiKSxzPW8/by5wcm90b3R5cGU6dm9pZCAwLGk9cz9zLnZhbHVlT2Y6dm9pZCAwO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG49dD9vKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KHIpKTsrK248cjspdFtuXT1lW25dO3JldHVybiB0fWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgdT10W2FdLGM9cj9yKG5bdV0sZVt1XSx1LG4sZSk6dm9pZCAwO3ZvaWQgMD09PWMmJihjPWVbdV0pLGk/cyhuLHUsYyk6byhuLHUsYyl9cmV0dXJuIG59dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG8oZSxzKGUpLHQpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG8oZSxzKGUpLHQpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIpLG89clsiX19jb3JlLWpzX3NoYXJlZF9fIl07ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUFzc2lnbmVyLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhmdW5jdGlvbih0LG4pe3ZhciByPS0xLG89bi5sZW5ndGgsaT1vPjE/bltvLTFdOnZvaWQgMCxhPW8+Mj9uWzJdOnZvaWQgMDtmb3IoaT1lLmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2YgaT8oby0tLGkpOnZvaWQgMCxhJiZzKG5bMF0sblsxXSxhKSYmKGk9bzwzP3ZvaWQgMDppLG89MSksdD1PYmplY3QodCk7KytyPG87KXt2YXIgbD1uW3JdO2wmJmUodCxsLHIsaSl9cmV0dXJuIHR9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUZpbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGE9T2JqZWN0KHQpO2lmKCFzKHQpKXt2YXIgbD1vKG4sMyk7dD1pKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYVtlXSxlLGEpfX12YXIgdT1lKHQsbixyKTtyZXR1cm4gdT4tMT9hW2w/dFt1XTp1XTp2b2lkIDB9fXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUl0ZXJhdGVlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiKSxvPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXIoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBlKHt9LCIiLHt9KSxlfWNhdGNoKGUpe319KCk7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQXJyYXlzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyLHUsYyl7dmFyIGQ9biZhLF89ZS5sZW5ndGgscD10Lmxlbmd0aDtpZihfIT1wJiYhKGQmJnA+XykpcmV0dXJuITE7dmFyIGY9Yy5nZXQoZSk7aWYoZiYmYy5nZXQodCkpcmV0dXJuIGY9PXQ7dmFyIG09LTEsaD0hMCxnPW4mbD9uZXcgbzp2b2lkIDA7Zm9yKGMuc2V0KGUsdCksYy5zZXQodCxlKTsrK208Xzspe3ZhciBiPWVbbV0sRT10W21dO2lmKHIpdmFyIHk9ZD9yKEUsYixtLHQsZSxjKTpyKGIsRSxtLGUsdCxjKTtpZih2b2lkIDAhPT15KXtpZih5KWNvbnRpbnVlO2g9ITE7YnJlYWt9aWYoZyl7aWYoIXModCxmdW5jdGlvbihlLHQpe2lmKCFpKGcsdCkmJihiPT09ZXx8dShiLGUsbixyLGMpKSlyZXR1cm4gZy5wdXNoKHQpfSkpe2g9ITE7YnJlYWt9fWVsc2UgaWYoYiE9PUUmJiF1KGIsRSxuLHIsYykpe2g9ITE7YnJlYWt9fXJldHVybiBjLmRlbGV0ZShlKSxjLmRlbGV0ZSh0KSxofXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiksYT0xLGw9MjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scixvLEEsTyl7c3dpdGNoKG4pe2Nhc2UgVDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgdjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhQShuZXcgcyhlKSxuZXcgcyh0KSkpO2Nhc2UgXzpjYXNlIHA6Y2FzZSBoOnJldHVybiBpKCtlLCt0KTtjYXNlIGY6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIGc6Y2FzZSBFOnJldHVybiBlPT10KyIiO2Nhc2UgbTp2YXIgUz1sO2Nhc2UgYjp2YXIgUj1yJmM7aWYoU3x8KFM9dSksZS5zaXplIT10LnNpemUmJiFSKXJldHVybiExO3ZhciBqPU8uZ2V0KGUpO2lmKGopcmV0dXJuIGo9PXQ7cnw9ZCxPLnNldChlLHQpO3ZhciB4PWEoUyhlKSxTKHQpLHIsbyxBLE8pO3JldHVybiBPLmRlbGV0ZShlKSx4O2Nhc2UgeTppZihDKXJldHVybiBDLmNhbGwoZSk9PUMuY2FsbCh0KX1yZXR1cm4hMX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiksYz0xLGQ9MixfPSJbb2JqZWN0IEJvb2xlYW5dIixwPSJbb2JqZWN0IERhdGVdIixmPSJbb2JqZWN0IEVycm9yXSIsbT0iW29iamVjdCBNYXBdIixoPSJbb2JqZWN0IE51bWJlcl0iLGc9IltvYmplY3QgUmVnRXhwXSIsYj0iW29iamVjdCBTZXRdIixFPSJbb2JqZWN0IFN0cmluZ10iLHk9IltvYmplY3QgU3ltYm9sXSIsdj0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFQ9IltvYmplY3QgRGF0YVZpZXddIixBPW8/by5wcm90b3R5cGU6dm9pZCAwLEM9QT9BLnZhbHVlT2Y6dm9pZCAwO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIsaSxsKXt2YXIgdT1uJnMsYz1vKGUpLGQ9Yy5sZW5ndGg7aWYoZCE9byh0KS5sZW5ndGgmJiF1KXJldHVybiExO2Zvcih2YXIgXz1kO18tLTspe3ZhciBwPWNbX107aWYoISh1P3AgaW4gdDphLmNhbGwodCxwKSkpcmV0dXJuITF9dmFyIGY9bC5nZXQoZSk7aWYoZiYmbC5nZXQodCkpcmV0dXJuIGY9PXQ7dmFyIG09ITA7bC5zZXQoZSx0KSxsLnNldCh0LGUpO2Zvcih2YXIgaD11OysrXzxkOyl7cD1jW19dO3ZhciBnPWVbcF0sYj10W3BdO2lmKHIpdmFyIEU9dT9yKGIsZyxwLHQsZSxsKTpyKGcsYixwLGUsdCxsKTtpZighKHZvaWQgMD09PUU/Zz09PWJ8fGkoZyxiLG4scixsKTpFKSl7bT0hMTticmVha31ofHwoaD0iY29uc3RydWN0b3IiPT1wKX1pZihtJiYhaCl7dmFyIHk9ZS5jb25zdHJ1Y3Rvcix2PXQuY29uc3RydWN0b3I7eSE9diYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIHYmJnYgaW5zdGFuY2VvZiB2KSYmKG09ITEpfXJldHVybiBsLmRlbGV0ZShlKSxsLmRlbGV0ZSh0KSxtfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5cy5qcyIpLHM9MSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkocyhlLHZvaWQgMCxvKSxlKyIiKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQ7ZS5leHBvcnRzPW59KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSxpLHMpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlLGkscyl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1lLl9fZGF0YV9fO3JldHVybiBvKHQpP25bInN0cmluZyI9PXR5cGVvZiB0PyJzdHJpbmciOiJoYXNoIl06bi5tYXB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9cyhlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0saT1lW3JdO3Rbbl09W3IsaSxvKGkpXX1yZXR1cm4gdH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXMoZSx0KTtyZXR1cm4gbyhuKT9uOnZvaWQgMH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiKSxvPXIoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9aS5jYWxsKGUsbCksbj1lW2xdO3RyeXtlW2xdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89YS5jYWxsKGUpO3JldHVybiByJiYodD9lW2xdPW46ZGVsZXRlIGVbbF0pLG99dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiKSxzPU9iamVjdC5wcm90b3R5cGUsaT1zLmhhc093blByb3BlcnR5LGE9cy50b1N0cmluZyxsPW8/by50b1N0cmluZ1RhZzp2b2lkIDA7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIikscz1PYmplY3QucHJvdG90eXBlLGk9cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbD1hP2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9iamVjdChlKSxyKGEoZSksZnVuY3Rpb24odCl7cmV0dXJuIGkuY2FsbChlLHQpfSkpfTpvO2UuZXhwb3J0cz1sfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIpLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxsPWE/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KXIodCxzKGUpKSxlPW8oZSk7cmV0dXJuIHR9Omk7ZS5leHBvcnRzPWx9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIpLGM9dShyKSxkPXUobyksXz11KHMpLHA9dShpKSxmPXUoYSksbT1sOyhyJiYiW29iamVjdCBEYXRhVmlld10iIT1tKG5ldyByKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxvJiYiW29iamVjdCBNYXBdIiE9bShuZXcgbyl8fHMmJiJbb2JqZWN0IFByb21pc2VdIiE9bShzLnJlc29sdmUoKSl8fGkmJiJbb2JqZWN0IFNldF0iIT1tKG5ldyBpKXx8YSYmIltvYmplY3QgV2Vha01hcF0iIT1tKG5ldyBhKSkmJihtPWZ1bmN0aW9uKGUpe3ZhciB0PWwoZSksbj0iW29iamVjdCBPYmplY3RdIj09dD9lLmNvbnN0cnVjdG9yOnZvaWQgMCxyPW4/dShuKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIGM6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIGQ6cmV0dXJuIltvYmplY3QgTWFwXSI7Y2FzZSBfOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgU2V0XSI7Y2FzZSBmOnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pLGUuZXhwb3J0cz1tfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1BhdGguanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt0PW8odCxlKTtmb3IodmFyIHI9LTEsYz10Lmxlbmd0aCxkPSExOysrcjxjOyl7dmFyIF89dSh0W3JdKTtpZighKGQ9bnVsbCE9ZSYmbihlLF8pKSlicmVhaztlPWVbX119cmV0dXJuIGR8fCsrciE9Yz9kOiEhKGM9bnVsbD09ZT8wOmUubGVuZ3RoKSYmbChjKSYmYShfLGMpJiYoaShlKXx8cyhlKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuX19kYXRhX189bz9vKG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihvKXt2YXIgbj10W2VdO3JldHVybiBuPT09cz92b2lkIDA6bn1yZXR1cm4gYS5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiKSxzPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBvP3ZvaWQgMCE9PXRbZV06aS5jYWxsKHQsZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiKSxzPU9iamVjdC5wcm90b3R5cGUsaT1zLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLG5bZV09byYmdm9pZCAwPT09dD9zOnQsdGhpc312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIpLHM9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgZVswXSYmby5jYWxsKGUsImluZGV4IikmJihuLmluZGV4PWUuaW5kZXgsbi5pbnB1dD1lLmlucHV0KSxufXZhciByPU9iamVjdC5wcm90b3R5cGUsbz1yLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgZzpyZXR1cm4gbyhlKTtjYXNlIHU6Y2FzZSBjOnJldHVybiBuZXcgcigrZSk7Y2FzZSBiOnJldHVybiBzKGUsbik7Y2FzZSBFOmNhc2UgeTpjYXNlIHY6Y2FzZSBUOmNhc2UgQTpjYXNlIEM6Y2FzZSBPOmNhc2UgUzpjYXNlIFI6cmV0dXJuIGwoZSxuKTtjYXNlIGQ6cmV0dXJuIG5ldyByO2Nhc2UgXzpjYXNlIG06cmV0dXJuIG5ldyByKGUpO2Nhc2UgcDpyZXR1cm4gaShlKTtjYXNlIGY6cmV0dXJuIG5ldyByO2Nhc2UgaDpyZXR1cm4gYShlKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiksdT0iW29iamVjdCBCb29sZWFuXSIsYz0iW29iamVjdCBEYXRlXSIsZD0iW29iamVjdCBNYXBdIixfPSJbb2JqZWN0IE51bWJlcl0iLHA9IltvYmplY3QgUmVnRXhwXSIsZj0iW29iamVjdCBTZXRdIixtPSJbb2JqZWN0IFN0cmluZ10iLGg9IltvYmplY3QgU3ltYm9sXSIsZz0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGI9IltvYmplY3QgRGF0YVZpZXddIixFPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHk9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsdj0iW29iamVjdCBJbnQ4QXJyYXldIixUPSJbb2JqZWN0IEludDE2QXJyYXldIixBPSJbb2JqZWN0IEludDMyQXJyYXldIixDPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixPPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsUz0iW29iamVjdCBVaW50MTZBcnJheV0iLFI9IltvYmplY3QgVWludDMyQXJyYXldIjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8aShlKT97fTpvKHMoZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSl8fHMoZSl8fCEhKGEmJmUmJmVbYV0pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiksYT1vP28uaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P3I6dCkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJm8udGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXZhciByPTkwMDcxOTkyNTQ3NDA5OTEsbz0vXig/OjB8WzEtOV1cZCopJC87ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7aWYoIWEobikpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoIm51bWJlciI9PXI/cyhuKSYmaSh0LG4ubGVuZ3RoKToic3RyaW5nIj09ciYmdCBpbiBuKSYmbyhuW3RdLGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtpZihvKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPWUmJiFzKGUpKXx8KGEudGVzdChlKXx8IWkudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBPYmplY3QodCkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiKSxpPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGE9L15cdyokLztlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuInN0cmluZyI9PXR8fCJudW1iZXIiPT10fHwic3ltYm9sIj09dHx8ImJvb2xlYW4iPT10PyJfX3Byb3RvX18iIT09ZTpudWxsPT09ZX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiEhcyYmcyBpbiBlfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIpLHM9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKG8mJm8ua2V5cyYmby5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxyKX12YXIgcj1PYmplY3QucHJvdG90eXBlO2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlPT09ZSYmIW8oZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1vKHQsZSk7cmV0dXJuIShuPDApJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOmkuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsITApfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIikscz1BcnJheS5wcm90b3R5cGUsaT1zLnNwbGljZTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49byh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyh0aGlzLl9fZGF0YV9fLGUpPi0xfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9byhuLGUpO3JldHVybiByPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbZSx0XSkpOm5bcl1bMV09dCx0aGlzfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgbyxtYXA6bmV3KGl8fHMpLHN0cmluZzpuZXcgb319dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW8odGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsZSkuZ2V0KGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxlKS5oYXMoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPW8odGhpcyxlKSxyPW4uc2l6ZTtyZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemUrPW4uc2l6ZT09cj8wOjEsdGhpc312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSksbn1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmKG5bZV09PT10JiYodm9pZCAwIT09dHx8ZSBpbiBPYmplY3QobikpKX19ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW8oZSxmdW5jdGlvbihlKXtyZXR1cm4gbi5zaXplPT09cyYmbi5jbGVhcigpLGV9KSxuPXQuY2FjaGU7cmV0dXJuIHR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiKSxzPTUwMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiKSxvPXIoT2JqZWN0LCJjcmVhdGUiKTtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIpLG89cihPYmplY3Qua2V5cyxPYmplY3QpO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPYmplY3QoZSkpdC5wdXNoKG4pO3JldHVybiB0fWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiKSxvPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQscz1vJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGk9cyYmcy5leHBvcnRzPT09byxhPWkmJnIucHJvY2VzcyxsPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXMmJnMucmVxdWlyZSYmcy5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fGEmJmEuYmluZGluZyYmYS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goZSl7fX0oKTtlLmV4cG9ydHM9bH0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBvLmNhbGwoZSl9dmFyIHI9T2JqZWN0LnByb3RvdHlwZSxvPXIudG9TdHJpbmc7ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQ9cyh2b2lkIDA9PT10P2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMsaT0tMSxhPXMoci5sZW5ndGgtdCwwKSxsPUFycmF5KGEpOysraTxhOylsW2ldPXJbdCtpXTtpPS0xO2Zvcih2YXIgdT1BcnJheSh0KzEpOysraTx0Oyl1W2ldPXJbaV07cmV0dXJuIHVbdF09bihsKSxvKGUsdGhpcyx1KX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIpLHM9TWF0aC5tYXg7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiKSxvPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscz1yfHxvfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLHIpLHRoaXN9dmFyIHI9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSksbn1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIpLHM9byhyKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1zKCksYT1vLShpLW4pO2lmKG49aSxhPjApe2lmKCsrdD49cilyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX12YXIgcj04MDAsbz0xNixzPURhdGUubm93O2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuX19kYXRhX189bmV3IG8sdGhpcy5zaXplPTB9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBvKXt2YXIgcj1uLl9fZGF0YV9fO2lmKCFzfHxyLmxlbmd0aDxhLTEpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBpKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiKSxhPTIwMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiKSxvPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHM9L1xcKFxcKT8vZyxpPXIoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goIiIpLGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsbixyLG8pe3QucHVzaChyP28ucmVwbGFjZShzLCIkMSIpOm58fGUpfSksdH0pO2UuZXhwb3J0cz1pfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlfHxvKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIjAiPT10JiYxL2U9PS1zPyItMCI6dH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiKSxzPTEvMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIG8uY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlKyIifWNhdGNoKGUpe319cmV0dXJuIiJ9dmFyIHI9RnVuY3Rpb24ucHJvdG90eXBlLG89ci50b1N0cmluZztlLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ24uanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlPYmplY3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiKSx1PU9iamVjdC5wcm90b3R5cGUsYz11Lmhhc093blByb3BlcnR5LGQ9cyhmdW5jdGlvbihlLHQpe2lmKGEodCl8fGkodCkpcmV0dXJuIHZvaWQgbyh0LGwodCksZSk7Zm9yKHZhciBuIGluIHQpYy5jYWxsKHQsbikmJnIoZSxuLHRbbl0pfSk7ZS5leHBvcnRzPWR9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmVEZWVwLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlLHN8aSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xvbmUuanMiKSxzPTEsaT00O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RpZmZlcmVuY2UuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiKSxhPXMoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlKT9yKGUsbyh0LDEsaSwhMCkpOltdfSk7ZS5leHBvcnRzPWF9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUZpbmQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiKSxzPXIobyk7ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmluZEluZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBsPW51bGw9PW4/MDppKG4pO3JldHVybiBsPDAmJihsPWEocitsLDApKSxvKGUscyh0LDMpLGwpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiKSxhPU1hdGgubWF4O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybihudWxsPT1lPzA6ZS5sZW5ndGgpP28oZSwxKTpbXX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnVsbD09ZT92b2lkIDA6byhlLHQpO3JldHVybiB2b2lkIDA9PT1yP246cn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9oYXNJbi5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmcyhlLHQsbyl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzSW4uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGV9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMuaGFzT3duUHJvcGVydHksYT1zLnByb3BlcnR5SXNFbnVtZXJhYmxlLGw9cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3I6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJmkuY2FsbChlLCJjYWxsZWUiKSYmIWEuY2FsbChlLCJjYWxsZWUiKX07ZS5leHBvcnRzPWx9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbCE9ZSYmcyhlLmxlbmd0aCkmJiFvKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHMoZSkmJm8oZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIikscz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LGk9cyYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPWkmJmkuZXhwb3J0cz09PXMsbD1hP3IuQnVmZmVyOnZvaWQgMCx1PWw/bC5pc0J1ZmZlcjp2b2lkIDAsYz11fHxvO2UuZXhwb3J0cz1jfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIXMoZSkpcmV0dXJuITE7dmFyIHQ9byhlKTtyZXR1cm4gdD09YXx8dD09bHx8dD09aXx8dD09dX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIpLGk9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGE9IltvYmplY3QgRnVuY3Rpb25dIixsPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsdT0iW29iamVjdCBQcm94eV0iO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PXJ9dmFyIHI9OTAwNzE5OTI1NDc0MDk5MTtlLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWFwLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIpLGk9cyYmcy5pc01hcCxhPWk/byhpKTpyO2UuZXhwb3J0cz1hfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtpZighaShlKXx8byhlKSE9YSlyZXR1cm4hMTt2YXIgdD1zKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPWQuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmYy5jYWxsKG4pPT1ffXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiKSxhPSJbb2JqZWN0IE9iamVjdF0iLGw9RnVuY3Rpb24ucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZSxjPWwudG9TdHJpbmcsZD11Lmhhc093blByb3BlcnR5LF89Yy5jYWxsKE9iamVjdCk7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiKSxpPXMmJnMuaXNTZXQsYT1pP28oaSk6cjtlLmV4cG9ydHM9YX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHwhcyhlKSYmaShlKSYmbyhlKT09YX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiksYT0iW29iamVjdCBTdHJpbmddIjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxzKGUpJiZvKGUpPT1pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIpLGk9IltvYmplY3QgU3ltYm9sXSI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIpLGk9cyYmcy5pc1R5cGVkQXJyYXksYT1pP28oaSk6cjtlLmV4cG9ydHM9YX0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaShlKT9vKGUpOnMoZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBpKGUpP28oZSwhMCk6cyhlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8bnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihzKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0scz1uLmNhY2hlO2lmKHMuaGFzKG8pKXJldHVybiBzLmdldChvKTt2YXIgaT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9cy5zZXQobyxpKXx8cyxpfTtyZXR1cm4gbi5jYWNoZT1uZXcoci5DYWNoZXx8byksbn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIikscz0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ci5DYWNoZT1vLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BpY2suanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQaWNrLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIikscz1vKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306cihlLHQpfSk7ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBpKGUpP28oYShlKSk6cyhlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3RhcnRzV2l0aC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBlPWEoZSksbj1udWxsPT1uPzA6byhpKG4pLDAsZS5sZW5ndGgpLHQ9cyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xhbXAuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9JbnRlZ2VyLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3JldHVybltdfWUuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7cmV0dXJuITF9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2lmKCFlKXJldHVybiAwPT09ZT9lOjA7aWYoKGU9byhlKSk9PT1zfHxlPT09LXMpe3JldHVybihlPDA/LTE6MSkqaX1yZXR1cm4gZT09PWU/ZTowfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIpLHM9MS8wLGk9MS43OTc2OTMxMzQ4NjIzMTU3ZTMwODtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW8oZSksbj10JTE7cmV0dXJuIHQ9PT10P24/dC1uOnQ6MH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHMoZSkpcmV0dXJuIGk7aWYobyhlKSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9byh0KT90KyIiOnR9aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGEsIiIpO3ZhciBuPXUudGVzdChlKTtyZXR1cm4gbnx8Yy50ZXN0KGUpP2QoZS5zbGljZSgyKSxuPzI6OCk6bC50ZXN0KGUpP2k6K2V9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiKSxpPU5hTixhPS9eXHMrfFxzKyQvZyxsPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHU9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSxkPXBhcnNlSW50O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT8iIjpvKGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9scnUtcXVldWUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvdG8tcG9zLWludGVnZXIuanMiKSxvPU9iamVjdC5jcmVhdGUscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuPTAsaT0xLGE9byhudWxsKSxsPW8obnVsbCksdT0wO3JldHVybiBlPXIoZSkse2hpdDpmdW5jdGlvbihyKXt2YXIgbz1sW3JdLGM9Kyt1O2lmKGFbY109cixsW3JdPWMsIW8pe2lmKCsrbjw9ZSlyZXR1cm47cmV0dXJuIHI9YVtpXSx0KHIpLHJ9aWYoZGVsZXRlIGFbb10saT09PW8pZm9yKDshcy5jYWxsKGEsKytpKTspY29udGludWV9LGRlbGV0ZTp0PWZ1bmN0aW9uKGUpe3ZhciB0PWxbZV07aWYodCYmKGRlbGV0ZSBhW3RdLGRlbGV0ZSBsW2VdLC0tbixpPT09dCkpe2lmKCFuKXJldHVybiB1PTAsdm9pZChpPTEpO2Zvcig7IXMuY2FsbChhLCsraSk7KWNvbnRpbnVlfX0sY2xlYXI6ZnVuY3Rpb24oKXtuPTAsaT0xLGE9byhudWxsKSxsPW8obnVsbCksdT0wfX19fSwiLi9ub2RlX21vZHVsZXMvbWFya2VkL2xpYi9tYXJrZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWV8fGIuZGVmYXVsdHMsdGhpcy5ydWxlcz1FLm5vcm1hbCx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy5ydWxlcz1FLnBlZGFudGljOnRoaXMub3B0aW9ucy5nZm0mJih0aGlzLm9wdGlvbnMudGFibGVzP3RoaXMucnVsZXM9RS50YWJsZXM6dGhpcy5ydWxlcz1FLmdmbSl9ZnVuY3Rpb24gcihlLHQpe2lmKHRoaXMub3B0aW9ucz10fHxiLmRlZmF1bHRzLHRoaXMubGlua3M9ZSx0aGlzLnJ1bGVzPXkubm9ybWFsLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbyx0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy5ydWxlcz15LnBlZGFudGljOnRoaXMub3B0aW9ucy5nZm0mJih0aGlzLm9wdGlvbnMuYnJlYWtzP3RoaXMucnVsZXM9eS5icmVha3M6dGhpcy5ydWxlcz15LmdmbSl9ZnVuY3Rpb24gbyhlKXt0aGlzLm9wdGlvbnM9ZXx8Yi5kZWZhdWx0c31mdW5jdGlvbiBzKCl7fWZ1bmN0aW9uIGkoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbj1udWxsLHRoaXMub3B0aW9ucz1lfHxiLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBvLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy5zbHVnZ2VyPW5ldyBhfWZ1bmN0aW9uIGEoKXt0aGlzLnNlZW49e319ZnVuY3Rpb24gbChlLHQpe2lmKHQpe2lmKGwuZXNjYXBlVGVzdC50ZXN0KGUpKXJldHVybiBlLnJlcGxhY2UobC5lc2NhcGVSZXBsYWNlLGZ1bmN0aW9uKGUpe3JldHVybiBsLnJlcGxhY2VtZW50c1tlXX0pfWVsc2UgaWYobC5lc2NhcGVUZXN0Tm9FbmNvZGUudGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKGwuZXNjYXBlUmVwbGFjZU5vRW5jb2RlLGZ1bmN0aW9uKGUpe3JldHVybiBsLnJlcGxhY2VtZW50c1tlXX0pO3JldHVybiBlfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUucmVwbGFjZSgvJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naSxmdW5jdGlvbihlLHQpe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSwiY29sb24iPT09dD8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZXx8ZSx0PXR8fCIiLHtyZXBsYWNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIG49bi5zb3VyY2V8fG4sbj1uLnJlcGxhY2UoLyhefFteXFtdKVxeL2csIiQxIiksZT1lLnJlcGxhY2UodCxuKSx0aGlzfSxnZXRSZWdleDpmdW5jdGlvbigpe3JldHVybiBuZXcgUmVnRXhwKGUsdCl9fX1mdW5jdGlvbiBkKGUsdCxuKXtpZihlKXt0cnl7dmFyIHI9ZGVjb2RlVVJJQ29tcG9uZW50KHUobikpLnJlcGxhY2UoL1teXHc6XS9nLCIiKS50b0xvd2VyQ2FzZSgpfWNhdGNoKGUpe3JldHVybiBudWxsfWlmKDA9PT1yLmluZGV4T2YoImphdmFzY3JpcHQ6Iil8fDA9PT1yLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09ci5pbmRleE9mKCJkYXRhOiIpKXJldHVybiBudWxsfXQmJiFULnRlc3QobikmJihuPV8odCxuKSk7dHJ5e249ZW5jb2RlVVJJKG4pLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIG59ZnVuY3Rpb24gXyhlLHQpe3JldHVybiB2WyIgIitlXXx8KC9eW146XSs6XC8qW15cL10qJC8udGVzdChlKT92WyIgIitlXT1lKyIvIjp2WyIgIitlXT1oKGUsIi8iLCEwKSksZT12WyIgIitlXSwiLy8iPT09dC5zbGljZSgwLDIpP2UucmVwbGFjZSgvOltcc1xTXSovLCI6IikrdDoiLyI9PT10LmNoYXJBdCgwKT9lLnJlcGxhY2UoLyg6XC8qW15cL10qKVtcc1xTXSovLCIkMSIpK3Q6ZSt0fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQsbixyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dD1hcmd1bWVudHNbcl07Zm9yKG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9cmV0dXJuIGV9ZnVuY3Rpb24gbShlLHQpe3ZhciBuPWUucmVwbGFjZSgvXHwvZyxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPSExLG89dDstLW8+PTAmJiJcXCI9PT1uW29dOylyPSFyO3JldHVybiByPyJ8IjoiIHwifSkscj1uLnNwbGl0KC8gXHwvKSxvPTA7aWYoci5sZW5ndGg+dClyLnNwbGljZSh0KTtlbHNlIGZvcig7ci5sZW5ndGg8dDspci5wdXNoKCIiKTtmb3IoO288ci5sZW5ndGg7bysrKXJbb109cltvXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIHJ9ZnVuY3Rpb24gaChlLHQsbil7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChlLmxlbmd0aC1yLTEpO2lmKG8hPT10fHxuKXtpZihvPT09dHx8IW4pYnJlYWs7cisrfWVsc2UgcisrfXJldHVybiBlLnN1YnN0cigwLGUubGVuZ3RoLXIpfWZ1bmN0aW9uIGcoZSx0KXtpZigtMT09PWUuaW5kZXhPZih0WzFdKSlyZXR1cm4tMTtmb3IodmFyIG49MCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoIlxcIj09PWVbcl0pcisrO2Vsc2UgaWYoZVtyXT09PXRbMF0pbisrO2Vsc2UgaWYoZVtyXT09PXRbMV0mJi0tbjwwKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGIoZSx0LHIpe2lmKHZvaWQgMD09PWV8fG51bGw9PT1lKXRocm93IG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKTtpZihyfHwiZnVuY3Rpb24iPT10eXBlb2YgdCl7cnx8KHI9dCx0PW51bGwpLHQ9Zih7fSxiLmRlZmF1bHRzLHR8fHt9KTt2YXIgbyxzLGE9dC5oaWdobGlnaHQsdT0wO3RyeXtvPW4ubGV4KGUsdCl9Y2F0Y2goZSl7cmV0dXJuIHIoZSl9cz1vLmxlbmd0aDt2YXIgYz1mdW5jdGlvbihlKXtpZihlKXJldHVybiB0LmhpZ2hsaWdodD1hLHIoZSk7dmFyIG47dHJ5e249aS5wYXJzZShvLHQpfWNhdGNoKHQpe2U9dH1yZXR1cm4gdC5oaWdobGlnaHQ9YSxlP3IoZSk6cihudWxsLG4pfTtpZighYXx8YS5sZW5ndGg8MylyZXR1cm4gYygpO2lmKGRlbGV0ZSB0LmhpZ2hsaWdodCwhcylyZXR1cm4gYygpO2Zvcig7dTxvLmxlbmd0aDt1KyspIWZ1bmN0aW9uKGUpeyJjb2RlIiE9PWUudHlwZT8tLXN8fGMoKTphKGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gdD9jKHQpOm51bGw9PW58fG49PT1lLnRleHQ/LS1zfHxjKCk6KGUudGV4dD1uLGUuZXNjYXBlZD0hMCx2b2lkKC0tc3x8YygpKSl9KX0ob1t1XSl9ZWxzZSB0cnl7cmV0dXJuIHQmJih0PWYoe30sYi5kZWZhdWx0cyx0KSksaS5wYXJzZShuLmxleChlLHQpLHQpfWNhdGNoKGUpe2lmKGUubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIiwodHx8Yi5kZWZhdWx0cykuc2lsZW50KXJldHVybiI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK2woZS5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBlfX12YXIgRT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpwLGhyOi9eIHswLDN9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlwqICopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gKigjezEsNn0pICooW15cbl0rPykgKig/OiMrICopPyg/OlxuK3wkKS8sbnB0YWJsZTpwLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM30pKGJ1bGwpIFtcc1xTXSs/KD86aHJ8ZGVmfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGUpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj9cXD8+XFxuKnw8IVtBLVpdW1xcc1xcU10qPz5cXG4qfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPlxcbip8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzpcXG57Mix9fCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1cXGgqXFxuKVtcXHNcXFNdKj8oPzpcXG57Mix9fCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZSlbYS16XVtcXHctXSpcXHMqPig/PVxcaCpcXG4pW1xcc1xcU10qPyg/OlxcbnsyLH18JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKlxuPyAqPD8oW15ccz5dKyk+Pyg/Oig/OiArXG4/ICp8ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpwLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLHBhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8IHswLDN9Pnw8XC8/KD86dGFnKSg/OiArfFxufFwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfCEtLSkpW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rL307RS5fbGFiZWw9Lyg/IVxzKlxdKSg/OlxcW1xbXF1dfFteXFtcXV0pKy8sRS5fdGl0bGU9Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS8sRS5kZWY9YyhFLmRlZikucmVwbGFjZSgibGFiZWwiLEUuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsRS5fdGl0bGUpLmdldFJlZ2V4KCksRS5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1cLikvLEUuaXRlbT0vXiggKikoYnVsbCkgP1teXG5dKig/OlxuKD8hXDFidWxsID8pW15cbl0qKSovLEUuaXRlbT1jKEUuaXRlbSwiZ20iKS5yZXBsYWNlKC9idWxsL2csRS5idWxsZXQpLmdldFJlZ2V4KCksRS5saXN0PWMoRS5saXN0KS5yZXBsYWNlKC9idWxsL2csRS5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrRS5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxFLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLEUuX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8tLT4vLEUuaHRtbD1jKEUuaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLEUuX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsRS5fdGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLEUucGFyYWdyYXBoPWMoRS5wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixFLmhyKS5yZXBsYWNlKCJoZWFkaW5nIixFLmhlYWRpbmcpLnJlcGxhY2UoImxoZWFkaW5nIixFLmxoZWFkaW5nKS5yZXBsYWNlKCJ0YWciLEUuX3RhZykuZ2V0UmVnZXgoKSxFLmJsb2NrcXVvdGU9YyhFLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsRS5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksRS5ub3JtYWw9Zih7fSxFKSxFLmdmbT1mKHt9LEUubm9ybWFsLHtmZW5jZXM6L14gezAsM30oYHszLH18fnszLH0pKFteYFxuXSopXG4oPzp8KFtcc1xTXSo/KVxuKSg/OiB7MCwzfVwxW35gXSogKig/OlxuK3wkKXwkKS8scGFyYWdyYXBoOi9eLyxoZWFkaW5nOi9eICooI3sxLDZ9KSArKFteXG5dKz8pICojKiAqKD86XG4rfCQpL30pLEUuZ2ZtLnBhcmFncmFwaD1jKEUucGFyYWdyYXBoKS5yZXBsYWNlKCIoPyEiLCIoPyEiK0UuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK0UubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKS5nZXRSZWdleCgpLEUudGFibGVzPWYoe30sRS5nZm0se25wdGFibGU6L14gKihbXnxcbiBdLipcfC4qKVxuICooWy06XSsgKlx8Wy18IDpdKikoPzpcbigoPzouKltePlxuIF0uKig/OlxufCQpKSopXG4qfCQpLyx0YWJsZTovXiAqXHwoLispXG4gKlx8PyggKlstOl0rWy18IDpdKikoPzpcbigoPzogKltePlxuIF0uKig/OlxufCQpKSopXG4qfCQpL30pLEUucGVkYW50aWM9Zih7fSxFLm5vcm1hbCx7aHRtbDpjKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50IixFLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvfSksbi5ydWxlcz1FLG4ubGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBuKHQpLmxleChlKX0sbi5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LG4ucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7ZT1lLnJlcGxhY2UoL14gKyQvZ20sIiIpO2Zvcih2YXIgbixyLG8scyxpLGEsbCx1LGMsZCxfLHAsZixnLGIseTtlOylpZigobz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSxvWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSksbz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSxvPW9bMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP286aChvLCJcbiIpfSk7ZWxzZSBpZihvPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhvWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpvWzJdP29bMl0udHJpbSgpOm9bMl0sdGV4dDpvWzNdfHwiIn0pO2Vsc2UgaWYobz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpvWzFdLmxlbmd0aCx0ZXh0Om9bMl19KTtlbHNlIGlmKHQmJihvPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSYmKGE9e3R5cGU6InRhYmxlIixoZWFkZXI6bShvWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpKSxhbGlnbjpvWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6b1szXT9vWzNdLnJlcGxhY2UoL1xuJC8sIiIpLnNwbGl0KCJcbiIpOltdfSxhLmhlYWRlci5sZW5ndGg9PT1hLmFsaWduLmxlbmd0aCkpe2ZvcihlPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSxfPTA7XzxhLmFsaWduLmxlbmd0aDtfKyspL14gKi0rOiAqJC8udGVzdChhLmFsaWduW19dKT9hLmFsaWduW19dPSJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoYS5hbGlnbltfXSk/YS5hbGlnbltfXT0iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGEuYWxpZ25bX10pP2EuYWxpZ25bX109ImxlZnQiOmEuYWxpZ25bX109bnVsbDtmb3IoXz0wO188YS5jZWxscy5sZW5ndGg7XysrKWEuY2VsbHNbX109bShhLmNlbGxzW19dLGEuaGVhZGVyLmxlbmd0aCk7dGhpcy50b2tlbnMucHVzaChhKX1lbHNlIGlmKG89dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcob1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYobz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLG89b1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4obyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKG89dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSxzPW9bMl0sZz1zLmxlbmd0aD4xLGw9e3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6ZyxzdGFydDpnPytzOiIiLGxvb3NlOiExfSx0aGlzLnRva2Vucy5wdXNoKGwpLG89b1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLHU9W10sbj0hMSxmPW8ubGVuZ3RoLF89MDtfPGY7XysrKWE9b1tfXSxkPWEubGVuZ3RoLGE9YS5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICovLCIiKSx+YS5pbmRleE9mKCJcbiAiKSYmKGQtPWEubGVuZ3RoLGE9dGhpcy5vcHRpb25zLnBlZGFudGljP2EucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6YS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitkKyJ9IiwiZ20iKSwiIikpLF8hPT1mLTEmJihpPUUuYnVsbGV0LmV4ZWMob1tfKzFdKVswXSwocy5sZW5ndGg+MT8xPT09aS5sZW5ndGg6aS5sZW5ndGg+MXx8dGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMmJmkhPT1zKSYmKGU9by5zbGljZShfKzEpLmpvaW4oIlxuIikrZSxfPWYtMSkpLHI9bnx8L1xuXG4oPyFccyokKS8udGVzdChhKSxfIT09Zi0xJiYobj0iXG4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkscnx8KHI9bikpLHImJihsLmxvb3NlPSEwKSxiPS9eXFtbIHhYXVxdIC8udGVzdChhKSx5PXZvaWQgMCxiJiYoeT0iICIhPT1hWzFdLGE9YS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSksYz17dHlwZToibGlzdF9pdGVtX3N0YXJ0Iix0YXNrOmIsY2hlY2tlZDp5LGxvb3NlOnJ9LHUucHVzaChjKSx0aGlzLnRva2Vucy5wdXNoKGMpLHRoaXMudG9rZW4oYSwhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTtpZihsLmxvb3NlKWZvcihmPXUubGVuZ3RoLF89MDtfPGY7XysrKXVbX10ubG9vc2U9ITA7dGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9lbmQifSl9ZWxzZSBpZihvPXRoaXMucnVsZXMuaHRtbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcob1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJwYXJhZ3JhcGgiOiJodG1sIixwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PW9bMV18fCJzY3JpcHQiPT09b1sxXXx8InN0eWxlIj09PW9bMV0pLHRleHQ6b1swXX0pO2Vsc2UgaWYodCYmKG89dGhpcy5ydWxlcy5kZWYuZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhvWzBdLmxlbmd0aCksb1szXSYmKG9bM109b1szXS5zdWJzdHJpbmcoMSxvWzNdLmxlbmd0aC0xKSkscD1vWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSx0aGlzLnRva2Vucy5saW5rc1twXXx8KHRoaXMudG9rZW5zLmxpbmtzW3BdPXtocmVmOm9bMl0sdGl0bGU6b1szXX0pO2Vsc2UgaWYodCYmKG89dGhpcy5ydWxlcy50YWJsZS5leGVjKGUpKSYmKGE9e3R5cGU6InRhYmxlIixoZWFkZXI6bShvWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpKSxhbGlnbjpvWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6b1szXT9vWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIik6W119LGEuaGVhZGVyLmxlbmd0aD09PWEuYWxpZ24ubGVuZ3RoKSl7Zm9yKGU9ZS5zdWJzdHJpbmcob1swXS5sZW5ndGgpLF89MDtfPGEuYWxpZ24ubGVuZ3RoO18rKykvXiAqLSs6ICokLy50ZXN0KGEuYWxpZ25bX10pP2EuYWxpZ25bX109InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChhLmFsaWduW19dKT9hLmFsaWduW19dPSJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoYS5hbGlnbltfXSk/YS5hbGlnbltfXT0ibGVmdCI6YS5hbGlnbltfXT1udWxsO2ZvcihfPTA7XzxhLmNlbGxzLmxlbmd0aDtfKyspYS5jZWxsc1tfXT1tKGEuY2VsbHNbX10ucmVwbGFjZSgvXiAqXHwgKnwgKlx8ICokL2csIiIpLGEuaGVhZGVyLmxlbmd0aCk7dGhpcy50b2tlbnMucHVzaChhKX1lbHNlIGlmKG89dGhpcy5ydWxlcy5saGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcob1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOiI9Ij09PW9bMl0/MToyLHRleHQ6b1sxXX0pO2Vsc2UgaWYodCYmKG89dGhpcy5ydWxlcy5wYXJhZ3JhcGguZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhvWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToicGFyYWdyYXBoIix0ZXh0OiJcbiI9PT1vWzFdLmNoYXJBdChvWzFdLmxlbmd0aC0xKT9vWzFdLnNsaWNlKDAsLTEpOm9bMV19KTtlbHNlIGlmKG89dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhvWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToidGV4dCIsdGV4dDpvWzBdfSk7ZWxzZSBpZihlKXRocm93IG5ldyBFcnJvcigiSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKSk7cmV0dXJuIHRoaXMudG9rZW5zfTt2YXIgeT17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLlwvOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6cCx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoaHJlZig/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKD8hXHMqXF0pKCg/OlxcW1xbXF1dP3xbXlxbXF1cXF0pKylcXS8sbm9saW5rOi9eIT9cWyg/IVxzKlxdKSgoPzpcW1teXFtcXV0qXF18XFxbXFtcXV18W15cW1xdXSkqKVxdKD86XFtcXSk/LyxzdHJvbmc6L15fXyhbXlxzX10pX18oPyFfKXxeXCpcKihbXlxzKl0pXCpcKig/IVwqKXxeX18oW15cc11bXHNcU10qP1teXHNdKV9fKD8hXyl8XlwqXCooW15cc11bXHNcU10qP1teXHNdKVwqXCooPyFcKikvLGVtOi9eXyhbXlxzX10pXyg/IV8pfF5cKihbXlxzKiI8XFtdKVwqKD8hXCopfF5fKFteXHNdW1xzXFNdKj9bXlxzX10pXyg/IV98W15cc3B1bmN0dWF0aW9uXSl8Xl8oW15cc19dW1xzXFNdKj9bXlxzXSlfKD8hX3xbXlxzcHVuY3R1YXRpb25dKXxeXCooW15ccyI8XFtdW1xzXFNdKj9bXlxzKl0pXCooPyFcKil8XlwqKFteXHMqIjxcW11bXHNcU10qP1teXHNdKVwqKD8hXCopLyxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOnAsdGV4dDovXihgK3xbXmBdKVtcc1xTXSo/KD89W1xcPCFcW2AqXXxcYl98IHsyLH1cbnwkKS99O3kuX3B1bmN0dWF0aW9uPSIhXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXl97fH1+Iix5LmVtPWMoeS5lbSkucmVwbGFjZSgvcHVuY3R1YXRpb24vZyx5Ll9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSx5Ll9lc2NhcGVzPS9cXChbISIjJCUmJygpKissXC0uXC86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pL2cseS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9Lyx5Ll9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyx5LmF1dG9saW5rPWMoeS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIix5Ll9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIix5Ll9lbWFpbCkuZ2V0UmVnZXgoKSx5Ll9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8seS50YWc9Yyh5LnRhZykucmVwbGFjZSgiY29tbWVudCIsRS5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIix5Ll9hdHRyaWJ1dGUpLmdldFJlZ2V4KCkseS5fbGFiZWw9Lyg/OlxbW15cW1xdXSpcXXxcXFtcW1xdXT98YFteYF0qYHxbXlxbXF1cXF0pKj8vLHkuX2hyZWY9L1xzKig8KD86XFxbPD5dP3xbXlxzPD5cXF0pKj58W15cc1x4MDAtXHgxZl0qKS8seS5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyx5Lmxpbms9Yyh5LmxpbmspLnJlcGxhY2UoImxhYmVsIix5Ll9sYWJlbCkucmVwbGFjZSgiaHJlZiIseS5faHJlZikucmVwbGFjZSgidGl0bGUiLHkuX3RpdGxlKS5nZXRSZWdleCgpLHkucmVmbGluaz1jKHkucmVmbGluaykucmVwbGFjZSgibGFiZWwiLHkuX2xhYmVsKS5nZXRSZWdleCgpLHkubm9ybWFsPWYoe30seSkseS5wZWRhbnRpYz1mKHt9LHkubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvLGxpbms6YygvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIseS5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpjKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIix5Ll9sYWJlbCkuZ2V0UmVnZXgoKX0pLHkuZ2ZtPWYoe30seS5ub3JtYWwse2VzY2FwZTpjKHkuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypffigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqX34pXSsoPyEkKSkrLyxkZWw6L15+Kyg/PVxTKShbXHNcU10qP1xTKX4rLyx0ZXh0OmMoeS50ZXh0KS5yZXBsYWNlKCJdfCIsIn5dfCIpLnJlcGxhY2UoInwkIiwifGh0dHBzPzovL3xmdHA6Ly98d3d3XFwufFthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7XFx8fX4tXStAfCQiKS5nZXRSZWdleCgpfSkseS5nZm0udXJsPWMoeS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLHkuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSx5LmJyZWFrcz1mKHt9LHkuZ2ZtLHticjpjKHkuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OmMoeS5nZm0udGV4dCkucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpfSksci5ydWxlcz15LHIub3V0cHV0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IHIodCxuKS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixvLHMsaSxhLHU9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHUrPWwoaVsxXSk7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpIXRoaXMuaW5MaW5rJiYvXjxhIC9pLnRlc3QoaVswXSk/dGhpcy5pbkxpbms9ITA6dGhpcy5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGlbMF0pJiYodGhpcy5pbkxpbms9ITEpLCF0aGlzLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoaVswXSk/dGhpcy5pblJhd0Jsb2NrPSEwOnRoaXMuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGlbMF0pJiYodGhpcy5pblJhd0Jsb2NrPSExKSxlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx1Kz10aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGlbMF0pOmwoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpe3ZhciBjPWcoaVsyXSwiKCkiKTtpZihjPi0xKXt2YXIgZD1pWzJdLmxlbmd0aC1jO2lbMl09aVsyXS5zdWJzdHJpbmcoMCxjKSxpWzBdPWlbMF0uc3Vic3RyaW5nKDAsaVswXS5sZW5ndGgtZCl9ZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdGhpcy5pbkxpbms9ITAsbz1pWzJdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8odD0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMobyksdD8obz10WzFdLHM9dFszXSk6cz0iIik6cz1pWzNdP2lbM10uc2xpY2UoMSwtMSk6IiIsbz1vLnRyaW0oKS5yZXBsYWNlKC9ePChbXHNcU10qKT4kLywiJDEiKSx1Kz10aGlzLm91dHB1dExpbmsoaSx7aHJlZjpyLmVzY2FwZXMobyksdGl0bGU6ci5lc2NhcGVzKHMpfSksdGhpcy5pbkxpbms9ITF9ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLCEodD10aGlzLmxpbmtzW3QudG9Mb3dlckNhc2UoKV0pfHwhdC5ocmVmKXt1Kz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9dGhpcy5pbkxpbms9ITAsdSs9dGhpcy5vdXRwdXRMaW5rKGksdCksdGhpcy5pbkxpbms9ITF9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdSs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVs0XXx8aVszXXx8aVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdSs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzZdfHxpWzVdfHxpWzRdfHxpWzNdfHxpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHUrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4obChpWzJdLnRyaW0oKSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdSs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHUrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49bCh0aGlzLm1hbmdsZShpWzFdKSksbz0ibWFpbHRvOiIrbik6KG49bChpWzFdKSxvPW4pLHUrPXRoaXMucmVuZGVyZXIubGluayhvLG51bGwsbik7ZWxzZSBpZih0aGlzLmluTGlua3x8IShpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpKXtpZihpPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHRoaXMuaW5SYXdCbG9jaz91Kz10aGlzLnJlbmRlcmVyLnRleHQoaVswXSk6dSs9dGhpcy5yZW5kZXJlci50ZXh0KGwodGhpcy5zbWFydHlwYW50cyhpWzBdKSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpfWVsc2V7aWYoIkAiPT09aVsyXSluPWwoaVswXSksbz0ibWFpbHRvOiIrbjtlbHNle2Rve2E9aVswXSxpWzBdPXRoaXMucnVsZXMuX2JhY2twZWRhbC5leGVjKGlbMF0pWzBdfXdoaWxlKGEhPT1pWzBdKTtuPWwoaVswXSksbz0id3d3LiI9PT1pWzFdPyJodHRwOi8vIituOm59ZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdSs9dGhpcy5yZW5kZXJlci5saW5rKG8sbnVsbCxuKX1yZXR1cm4gdX0sci5lc2NhcGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZShyLnJ1bGVzLl9lc2NhcGVzLCIkMSIpOmV9LHIucHJvdG90eXBlLm91dHB1dExpbms9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhyZWYscj10LnRpdGxlP2wodC50aXRsZSk6bnVsbDtyZXR1cm4iISIhPT1lWzBdLmNoYXJBdCgwKT90aGlzLnJlbmRlcmVyLmxpbmsobixyLHRoaXMub3V0cHV0KGVbMV0pKTp0aGlzLnJlbmRlcmVyLmltYWdlKG4scixsKGVbMV0pKX0sci5wcm90b3R5cGUuc21hcnR5cGFudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9lLnJlcGxhY2UoLy0tLS9nLCLigJQiKS5yZXBsYWNlKC8tLS9nLCLigJMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNFwvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTRcLyhcW3tcdTIwMThcc10pIi9nLCIkMeKAnCIpLnJlcGxhY2UoLyIvZywi4oCdIikucmVwbGFjZSgvXC57M30vZywi4oCmIik6ZX0sci5wcm90b3R5cGUubWFuZ2xlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLm9wdGlvbnMubWFuZ2xlKXJldHVybiBlO2Zvcih2YXIgdCxuPSIiLHI9ZS5sZW5ndGgsbz0wO288cjtvKyspdD1lLmNoYXJDb2RlQXQobyksTWF0aC5yYW5kb20oKT4uNSYmKHQ9IngiK3QudG9TdHJpbmcoMTYpKSxuKz0iJiMiK3QrIjsiO3JldHVybiBufSxvLnByb3RvdHlwZS5jb2RlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0odHx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXt2YXIgbz10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGUscik7bnVsbCE9byYmbyE9PWUmJihuPSEwLGU9byl9cmV0dXJuIHI/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgrbChyLCEwKSsnIj4nKyhuP2U6bChlLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+Iisobj9lOmwoZSwhMCkpKyI8L2NvZGU+PC9wcmU+In0sby5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG8ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG8ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub3B0aW9ucy5oZWFkZXJJZHM/IjxoIit0KycgaWQ9IicrdGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcobikrJyI+JytlKyI8L2giK3QrIj5cbiI6IjxoIit0KyI+IitlKyI8L2giK3QrIj5cbiJ9LG8ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9LG8ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQ/Im9sIjoidWwiO3JldHVybiI8IityKyh0JiYxIT09bj8nIHN0YXJ0PSInK24rJyInOiIiKSsiPlxuIitlKyI8LyIrcisiPlxuIn0sby5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxvLnByb3RvdHlwZS5jaGVja2JveD1mdW5jdGlvbihlKXtyZXR1cm4iPGlucHV0ICIrKGU/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxvLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sby5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmKHQ9Ijx0Ym9keT4iK3QrIjwvdGJvZHk+IiksIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrdCsiPC90YWJsZT5cbiJ9LG8ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxvLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKHQuYWxpZ24/IjwiK24rJyBhbGlnbj0iJyt0LmFsaWduKyciPic6IjwiK24rIj4iKStlKyI8LyIrbisiPlxuIn0sby5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sby5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sby5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG8ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In0sby5wcm90b3R5cGUuZGVsPWZ1bmN0aW9uKGUpe3JldHVybiI8ZGVsPiIrZSsiPC9kZWw+In0sby5wcm90b3R5cGUubGluaz1mdW5jdGlvbihlLHQsbil7aWYobnVsbD09PShlPWQodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGUpKSlyZXR1cm4gbjt2YXIgcj0nPGEgaHJlZj0iJytsKGUpKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sby5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PT0oZT1kKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxlKSkpcmV0dXJuIG47dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4ifSxvLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlfSxzLnByb3RvdHlwZS5zdHJvbmc9cy5wcm90b3R5cGUuZW09cy5wcm90b3R5cGUuY29kZXNwYW49cy5wcm90b3R5cGUuZGVsPXMucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHMucHJvdG90eXBlLmxpbms9cy5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiIiK259LHMucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGkucGFyc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGkodCkucGFyc2UoZSl9LGkucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3RoaXMuaW5saW5lPW5ldyByKGUubGlua3MsdGhpcy5vcHRpb25zKSx0aGlzLmlubGluZVRleHQ9bmV3IHIoZS5saW5rcyxmKHt9LHRoaXMub3B0aW9ucyx7cmVuZGVyZXI6bmV3IHN9KSksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciB0PSIiO3RoaXMubmV4dCgpOyl0Kz10aGlzLnRvaygpO3JldHVybiB0fSxpLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LGkucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxpLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxpLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHUodGhpcy5pbmxpbmVUZXh0Lm91dHB1dCh0aGlzLnRva2VuLnRleHQpKSx0aGlzLnNsdWdnZXIpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIsbz0iIixzPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3Iobys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixyPTA7cjx0Lmxlbmd0aDtyKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbcl0pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltyXX0pO3MrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUobyxzKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcihzPSIiOyJibG9ja3F1b3RlX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylzKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUocyk7Y2FzZSJsaXN0X3N0YXJ0IjpzPSIiO2Zvcih2YXIgaT10aGlzLnRva2VuLm9yZGVyZWQsYT10aGlzLnRva2VuLnN0YXJ0OyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylzKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QocyxpLGEpO2Nhc2UibGlzdF9pdGVtX3N0YXJ0IjpzPSIiO3ZhciBsPXRoaXMudG9rZW4ubG9vc2U7Zm9yKHRoaXMudG9rZW4udGFzayYmKHMrPXRoaXMucmVuZGVyZXIuY2hlY2tib3godGhpcy50b2tlbi5jaGVja2VkKSk7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspcys9bHx8InRleHQiIT09dGhpcy50b2tlbi50eXBlP3RoaXMudG9rKCk6dGhpcy5wYXJzZVRleHQoKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShzKTtjYXNlImh0bWwiOnJldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwodGhpcy50b2tlbi50ZXh0KTtjYXNlInBhcmFncmFwaCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpKTtjYXNlInRleHQiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlVGV4dCgpKTtkZWZhdWx0OnZhciBjPSdUb2tlbiB3aXRoICInK3RoaXMudG9rZW4udHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZighdGhpcy5vcHRpb25zLnNpbGVudCl0aHJvdyBuZXcgRXJyb3IoYyk7Y29uc29sZS5sb2coYyl9fSxhLnByb3RvdHlwZS5zbHVnPWZ1bmN0aW9uKGUpe3ZhciB0PWUudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuXC86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIik7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj10O2Rve3RoaXMuc2VlbltuXSsrLHQ9bisiLSIrdGhpcy5zZWVuW25dfXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eSh0KSl9cmV0dXJuIHRoaXMuc2Vlblt0XT0wLHR9LGwuZXNjYXBlVGVzdD0vWyY8PiInXS8sbC5lc2NhcGVSZXBsYWNlPS9bJjw+IiddL2csbC5yZXBsYWNlbWVudHM9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LGwuZXNjYXBlVGVzdE5vRW5jb2RlPS9bPD4iJ118Jig/ISM/XHcrOykvLGwuZXNjYXBlUmVwbGFjZU5vRW5jb2RlPS9bPD4iJ118Jig/ISM/XHcrOykvZzt2YXIgdj17fSxUPS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7cC5leGVjPXAsYi5vcHRpb25zPWIuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gZihiLmRlZmF1bHRzLGUpLGJ9LGIuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57YmFzZVVybDpudWxsLGJyZWFrczohMSxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpuZXcgbyxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnRMaXN0czohMSxzbWFydHlwYW50czohMSx0YWJsZXM6ITAseGh0bWw6ITF9fSxiLmRlZmF1bHRzPWIuZ2V0RGVmYXVsdHMoKSxiLlBhcnNlcj1pLGIucGFyc2VyPWkucGFyc2UsYi5SZW5kZXJlcj1vLGIuVGV4dFJlbmRlcmVyPXMsYi5MZXhlcj1uLGIubGV4ZXI9bi5sZXgsYi5JbmxpbmVMZXhlcj1yLGIuaW5saW5lTGV4ZXI9ci5vdXRwdXQsYi5TbHVnZ2VyPWEsYi5wYXJzZT1iLGUuZXhwb3J0cz1ifSh0aGlzfHwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93KX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvbWR1cmwvZGVjb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbixyPXNbZV07aWYocilyZXR1cm4gcjtmb3Iocj1zW2VdPVtdLHQ9MDt0PDEyODt0Kyspbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIucHVzaChuKTtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKW49ZS5jaGFyQ29kZUF0KHQpLHJbbl09IiUiKygiMCIrbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSkuc2xpY2UoLTIpO3JldHVybiByfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PW8uZGVmYXVsdENoYXJzKSxuPXIodCksZS5yZXBsYWNlKC8oJVthLWYwLTldezJ9KSsvZ2ksZnVuY3Rpb24oZSl7dmFyIHQscixvLHMsaSxhLGwsdT0iIjtmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrPTMpbz1wYXJzZUludChlLnNsaWNlKHQrMSx0KzMpLDE2KSxvPDEyOD91Kz1uW29dOjE5Mj09KDIyNCZvKSYmdCszPHImJjEyOD09KDE5MiYocz1wYXJzZUludChlLnNsaWNlKHQrNCx0KzYpLDE2KSkpPyhsPW88PDYmMTk4NHw2MyZzLHUrPWw8MTI4PyLvv73vv70iOlN0cmluZy5mcm9tQ2hhckNvZGUobCksdCs9Myk6MjI0PT0oMjQwJm8pJiZ0KzY8ciYmKHM9cGFyc2VJbnQoZS5zbGljZSh0KzQsdCs2KSwxNiksaT1wYXJzZUludChlLnNsaWNlKHQrNyx0KzkpLDE2KSwxMjg9PSgxOTImcykmJjEyOD09KDE5MiZpKSk/KGw9bzw8MTImNjE0NDB8czw8NiY0MDMyfDYzJmksdSs9bDwyMDQ4fHxsPj01NTI5NiYmbDw9NTczNDM/Iu+/ve+/ve+/vSI6U3RyaW5nLmZyb21DaGFyQ29kZShsKSx0Kz02KToyNDA9PSgyNDgmbykmJnQrOTxyJiYocz1wYXJzZUludChlLnNsaWNlKHQrNCx0KzYpLDE2KSxpPXBhcnNlSW50KGUuc2xpY2UodCs3LHQrOSksMTYpLGE9cGFyc2VJbnQoZS5zbGljZSh0KzEwLHQrMTIpLDE2KSwxMjg9PSgxOTImcykmJjEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmEpKT8obD1vPDwxOCYxODM1MDA4fHM8PDEyJjI1ODA0OHxpPDw2JjQwMzJ8NjMmYSxsPDY1NTM2fHxsPjExMTQxMTE/dSs9Iu+/ve+/ve+/ve+/vSI6KGwtPTY1NTM2LHUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGw+PjEwKSw1NjMyMCsoMTAyMyZsKSkpLHQrPTkpOnUrPSLvv70iO3JldHVybiB1fSl9dmFyIHM9e307by5kZWZhdWx0Q2hhcnM9IjsvPzpAJj0rJCwjIixvLmNvbXBvbmVudENoYXJzPSIiLGUuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvbWR1cmwvZW5jb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbixyPXNbZV07aWYocilyZXR1cm4gcjtmb3Iocj1zW2VdPVtdLHQ9MDt0PDEyODt0Kyspbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLC9eWzAtOWEtel0kL2kudGVzdChuKT9yLnB1c2gobik6ci5wdXNoKCIlIisoIjAiK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkpLnNsaWNlKC0yKSk7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylyW2UuY2hhckNvZGVBdCh0KV09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcyxpLGEsbCx1LGM9IiI7Zm9yKCJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PW8uZGVmYXVsdENoYXJzKSx2b2lkIDA9PT1uJiYobj0hMCksdT1yKHQpLHM9MCxpPWUubGVuZ3RoO3M8aTtzKyspaWYoYT1lLmNoYXJDb2RlQXQocyksbiYmMzc9PT1hJiZzKzI8aSYmL15bMC05YS1mXXsyfSQvaS50ZXN0KGUuc2xpY2UocysxLHMrMykpKWMrPWUuc2xpY2UocyxzKzMpLHMrPTI7ZWxzZSBpZihhPDEyOCljKz11W2FdO2Vsc2UgaWYoYT49NTUyOTYmJmE8PTU3MzQzKXtpZihhPj01NTI5NiYmYTw9NTYzMTkmJnMrMTxpJiYobD1lLmNoYXJDb2RlQXQocysxKSk+PTU2MzIwJiZsPD01NzM0Myl7Yys9ZW5jb2RlVVJJQ29tcG9uZW50KGVbc10rZVtzKzFdKSxzKys7Y29udGludWV9Yys9IiVFRiVCRiVCRCJ9ZWxzZSBjKz1lbmNvZGVVUklDb21wb25lbnQoZVtzXSk7cmV0dXJuIGN9dmFyIHM9e307by5kZWZhdWx0Q2hhcnM9IjsvPzpAJj0rJCwtXy4hfionKCkjIixvLmNvbXBvbmVudENoYXJzPSItXy4hfionKCkiLGUuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L2FzeW5jLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvZnJvbS9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvbWFwLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9taXhpbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9mdW5jdGlvbi9fZGVmaW5lLWxlbmd0aC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbmV4dC10aWNrL2luZGV4LmpzIiksbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsdT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksYz1PYmplY3QuY3JlYXRlLGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVnaXN0ZXJlZC1leHRlbnNpb25zLmpzIikuYXN5bmM9ZnVuY3Rpb24oZSx0KXt2YXIgbixfLHAsZj1jKG51bGwpLG09YyhudWxsKSxoPXQubWVtb2l6ZWQsZz10Lm9yaWdpbmFsO3QubWVtb2l6ZWQ9aShmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMscj10W3QubGVuZ3RoLTFdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYobj1yLHQ9bC5jYWxsKHQsMCwtMSkpLGguYXBwbHkoXz10aGlzLHA9dCl9LGgpO3RyeXtzKHQubWVtb2l6ZWQsaCl9Y2F0Y2goZSl7fXQub24oImdldCIsZnVuY3Rpb24oZSl7dmFyIHIsbyxzO2lmKG4pe2lmKGZbZV0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGZbZV0/ZltlXT1bZltlXSxuXTpmW2VdLnB1c2gobiksdm9pZChuPW51bGwpO3I9bixvPV8scz1wLG49Xz1wPW51bGwsYShmdW5jdGlvbigpe3ZhciBpO2QuY2FsbChtLGUpPyhpPW1bZV0sdC5lbWl0KCJnZXRhc3luYyIsZSxzLG8pLHUuY2FsbChyLGkuY29udGV4dCxpLmFyZ3MpKToobj1yLF89byxwPXMsaC5hcHBseShvLHMpKX0pfX0pLHQub3JpZ2luYWw9ZnVuY3Rpb24oKXt2YXIgZSxvLHMsaTtyZXR1cm4gbj8oZT1yKGFyZ3VtZW50cyksbz1mdW5jdGlvbiBlKG4pe3ZhciBvLHMsbD1lLmlkO3JldHVybiBudWxsPT1sP3ZvaWQgYSh1LmJpbmQoZSx0aGlzLGFyZ3VtZW50cykpOihkZWxldGUgZS5pZCxvPWZbbF0sZGVsZXRlIGZbbF0sbz8ocz1yKGFyZ3VtZW50cyksdC5oYXMobCkmJihuP3QuZGVsZXRlKGwpOihtW2xdPXtjb250ZXh0OnRoaXMsYXJnczpzfSx0LmVtaXQoInNldGFzeW5jIixsLCJmdW5jdGlvbiI9PXR5cGVvZiBvPzE6by5sZW5ndGgpKSksImZ1bmN0aW9uIj09dHlwZW9mIG8/aT11LmNhbGwobyx0aGlzLHMpOm8uZm9yRWFjaChmdW5jdGlvbihlKXtpPXUuY2FsbChlLHRoaXMscyl9LHRoaXMpLGkpOnZvaWQgMCl9LHM9bixuPV89cD1udWxsLGUucHVzaChvKSxpPXUuY2FsbChnLHRoaXMsZSksby5jYj1zLG49byxpKTp1LmNhbGwoZyx0aGlzLGFyZ3VtZW50cyl9LHQub24oInNldCIsZnVuY3Rpb24oZSl7aWYoIW4pcmV0dXJuIHZvaWQgdC5kZWxldGUoZSk7ZltlXT8iZnVuY3Rpb24iPT10eXBlb2YgZltlXT9mW2VdPVtmW2VdLG4uY2JdOmZbZV0ucHVzaChuLmNiKTpmW2VdPW4uY2IsZGVsZXRlIG4uY2Isbi5pZD1lLG49bnVsbH0pLHQub24oImRlbGV0ZSIsZnVuY3Rpb24oZSl7dmFyIG47ZC5jYWxsKGYsZSl8fG1bZV0mJihuPW1bZV0sZGVsZXRlIG1bZV0sdC5lbWl0KCJkZWxldGVhc3luYyIsZSxsLmNhbGwobi5hcmdzLDEpKSl9KSx0Lm9uKCJjbGVhciIsZnVuY3Rpb24oKXt2YXIgZT1tO209YyhudWxsKSx0LmVtaXQoImNsZWFyYXN5bmMiLG8oZSxmdW5jdGlvbihlKXtyZXR1cm4gbC5jYWxsKGUuYXJncywxKX0pKX0pfX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2V4dC9kaXNwb3NlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9mb3ItZWFjaC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3JlZ2lzdGVyZWQtZXh0ZW5zaW9ucy5qcyIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O3MuZGlzcG9zZT1mdW5jdGlvbihlLHQsbil7dmFyIGE7aWYocihlKSxuLmFzeW5jJiZzLmFzeW5jfHxuLnByb21pc2UmJnMucHJvbWlzZSlyZXR1cm4gdC5vbigiZGVsZXRlYXN5bmMiLGE9ZnVuY3Rpb24odCxuKXtpLmNhbGwoZSxudWxsLG4pfSksdm9pZCB0Lm9uKCJjbGVhcmFzeW5jIixmdW5jdGlvbihlKXtvKGUsZnVuY3Rpb24oZSx0KXthKHQsZSl9KX0pO3Qub24oImRlbGV0ZSIsYT1mdW5jdGlvbih0LG4pe2Uobil9KSx0Lm9uKCJjbGVhciIsZnVuY3Rpb24oZSl7byhlLGZ1bmN0aW9uKGUsdCl7YSh0LGUpfSl9KX19LCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9leHQvbWF4LWFnZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2FycmF5L2Zyb20vaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Zvci1lYWNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9uZXh0LXRpY2svaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3RpbWVycy1leHQvdmFsaWQtdGltZW91dC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3JlZ2lzdGVyZWQtZXh0ZW5zaW9ucy5qcyIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLGM9TWF0aC5tYXgsZD1NYXRoLm1pbixfPU9iamVjdC5jcmVhdGU7bC5tYXhBZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBwLGYsbSxoOyhlPWEoZSkpJiYocD1fKG51bGwpLGY9bi5hc3luYyYmbC5hc3luY3x8bi5wcm9taXNlJiZsLnByb21pc2U/ImFzeW5jIjoiIix0Lm9uKCJzZXQiK2YsZnVuY3Rpb24obil7cFtuXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5kZWxldGUobil9LGUpLGgmJihoW25dJiYibmV4dFRpY2siIT09aFtuXSYmY2xlYXJUaW1lb3V0KGhbbl0pLGhbbl09c2V0VGltZW91dChmdW5jdGlvbigpe2RlbGV0ZSBoW25dfSxtKSl9KSx0Lm9uKCJkZWxldGUiK2YsZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHBbZV0pLGRlbGV0ZSBwW2VdLGgmJigibmV4dFRpY2siIT09aFtlXSYmY2xlYXJUaW1lb3V0KGhbZV0pLGRlbGV0ZSBoW2VdKX0pLG4ucHJlRmV0Y2gmJihtPSEwPT09bi5wcmVGZXRjaHx8aXNOYU4obi5wcmVGZXRjaCk/LjMzMzpjKGQoTnVtYmVyKG4ucHJlRmV0Y2gpLDEpLDApKSYmKGg9e30sbT0oMS1tKSplLHQub24oImdldCIrZixmdW5jdGlvbihlLG8sYSl7aFtlXXx8KGhbZV09Im5leHRUaWNrIixzKGZ1bmN0aW9uKCl7dmFyIHM7Im5leHRUaWNrIj09PWhbZV0mJihkZWxldGUgaFtlXSx0LmRlbGV0ZShlKSxuLmFzeW5jJiYobz1yKG8pLG8ucHVzaCh1KSkscz10Lm1lbW9pemVkLmFwcGx5KGEsbyksbi5wcm9taXNlJiZpKHMpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHMuZG9uZT9zLmRvbmUodSx1KTpzLnRoZW4odSx1KSkpfSkpfSkpLHQub24oImNsZWFyIitmLGZ1bmN0aW9uKCl7byhwLGZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChlKX0pLHA9e30saCYmKG8oaCxmdW5jdGlvbihlKXsibmV4dFRpY2siIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSksaD17fSl9KSl9fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L21heC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L251bWJlci90by1wb3MtaW50ZWdlci5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvbHJ1LXF1ZXVlL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVnaXN0ZXJlZC1leHRlbnNpb25zLmpzIik7cy5tYXg9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGEsbDsoZT1yKGUpKSYmKGE9byhlKSxpPW4uYXN5bmMmJnMuYXN5bmN8fG4ucHJvbWlzZSYmcy5wcm9taXNlPyJhc3luYyI6IiIsdC5vbigic2V0IitpLGw9ZnVuY3Rpb24oZSl7dm9pZCAwIT09KGU9YS5oaXQoZSkpJiZ0LmRlbGV0ZShlKX0pLHQub24oImdldCIraSxsKSx0Lm9uKCJkZWxldGUiK2ksYS5kZWxldGUpLHQub24oImNsZWFyIitpLGEuY2xlYXIpKX19LCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9leHQvcHJvbWlzZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L29iamVjdC9tYXAuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL25leHQtdGljay9pbmRleC5qcyIpLGk9T2JqZWN0LmNyZWF0ZSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7bigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3JlZ2lzdGVyZWQtZXh0ZW5zaW9ucy5qcyIpLnByb21pc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pKG51bGwpLGw9aShudWxsKSx1PWkobnVsbCk7dC5vbigic2V0IixmdW5jdGlvbihyLGksYSl7aWYoIW8oYSkpcmV0dXJuIGxbcl09YSx2b2lkIHQuZW1pdCgic2V0YXN5bmMiLHIsMSk7bltyXT0xLHVbcl09YTt2YXIgYz1mdW5jdGlvbihlKXt2YXIgbz1uW3JdO28mJihkZWxldGUgbltyXSxsW3JdPWUsdC5lbWl0KCJzZXRhc3luYyIscixvKSl9LGQ9ZnVuY3Rpb24oKXtuW3JdJiYoZGVsZXRlIG5bcl0sZGVsZXRlIHVbcl0sdC5kZWxldGUocikpfTsidGhlbiIhPT1lJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5kb25lPyJkb25lIiE9PWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmZpbmFsbHk/KGEuZG9uZShjKSxhLmZpbmFsbHkoZCkpOmEuZG9uZShjLGQpOmEudGhlbihmdW5jdGlvbihlKXtzKGMuYmluZCh0aGlzLGUpKX0sZnVuY3Rpb24oKXtzKGQpfSl9KSx0Lm9uKCJnZXQiLGZ1bmN0aW9uKGUscixpKXt2YXIgYTtpZihuW2VdKXJldHVybiB2b2lkKytuW2VdO2E9dVtlXTt2YXIgbD1mdW5jdGlvbigpe3QuZW1pdCgiZ2V0YXN5bmMiLGUscixpKX07byhhKT8iZnVuY3Rpb24iPT10eXBlb2YgYS5kb25lP2EuZG9uZShsKTphLnRoZW4oZnVuY3Rpb24oKXtzKGwpfSk6bCgpfSksdC5vbigiZGVsZXRlIixmdW5jdGlvbihlKXtpZihkZWxldGUgdVtlXSxuW2VdKXJldHVybiB2b2lkIGRlbGV0ZSBuW2VdO2lmKGEuY2FsbChsLGUpKXt2YXIgcj1sW2VdO2RlbGV0ZSBsW2VdLHQuZW1pdCgiZGVsZXRlYXN5bmMiLGUsW3JdKX19KSx0Lm9uKCJjbGVhciIsZnVuY3Rpb24oKXt2YXIgZT1sO2w9aShudWxsKSxuPWkobnVsbCksdT1pKG51bGwpLHQuZW1pdCgiY2xlYXJhc3luYyIscihlLGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKX0pfX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2V4dC9yZWYtY291bnRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9kL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVnaXN0ZXJlZC1leHRlbnNpb25zLmpzIikscz1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmRlZmluZVByb3BlcnRpZXM7by5yZWZDb3VudGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYSxsO2E9cyhudWxsKSxsPW4uYXN5bmMmJm8uYXN5bmN8fG4ucHJvbWlzZSYmby5wcm9taXNlPyJhc3luYyI6IiIsdC5vbigic2V0IitsLGZ1bmN0aW9uKGUsdCl7YVtlXT10fHwxfSksdC5vbigiZ2V0IitsLGZ1bmN0aW9uKGUpeysrYVtlXX0pLHQub24oImRlbGV0ZSIrbCxmdW5jdGlvbihlKXtkZWxldGUgYVtlXX0pLHQub24oImNsZWFyIitsLGZ1bmN0aW9uKCl7YT17fX0pLGkodC5tZW1vaXplZCx7ZGVsZXRlUmVmOnIoZnVuY3Rpb24oKXt2YXIgZT10LmdldChhcmd1bWVudHMpO3JldHVybiBudWxsPT09ZT9udWxsOmFbZV0/IS0tYVtlXSYmKHQuZGVsZXRlKGUpLCEwKTpudWxsfSksZ2V0UmVmQ291bnQ6cihmdW5jdGlvbigpe3ZhciBlPXQuZ2V0KGFyZ3VtZW50cyk7cmV0dXJuIG51bGw9PT1lPzA6YVtlXT9hW2VdOjB9KX0pfX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVzb2x2ZS1sZW5ndGguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL3BsYWluLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LGk9cihhcmd1bWVudHNbMV0pO3JldHVybiBpLm5vcm1hbGl6ZXJ8fDAhPT0odD1pLmxlbmd0aD1vKGkubGVuZ3RoLGUubGVuZ3RoLGkuYXN5bmMpKSYmKGkucHJpbWl0aXZlPyExPT09dD9pLm5vcm1hbGl6ZXI9bigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbm9ybWFsaXplcnMvcHJpbWl0aXZlLmpzIik6dD4xJiYoaS5ub3JtYWxpemVyPW4oIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL25vcm1hbGl6ZXJzL2dldC1wcmltaXRpdmUtZml4ZWQuanMiKSh0KSk6aS5ub3JtYWxpemVyPSExPT09dD9uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9ub3JtYWxpemVycy9nZXQuanMiKSgpOjE9PT10P24oIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL25vcm1hbGl6ZXJzL2dldC0xLmpzIikoKTpuKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9ub3JtYWxpemVycy9nZXQtZml4ZWQuanMiKSh0KSksaS5hc3luYyYmbigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L2FzeW5jLmpzIiksaS5wcm9taXNlJiZuKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9leHQvcHJvbWlzZS5qcyIpLGkuZGlzcG9zZSYmbigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L2Rpc3Bvc2UuanMiKSxpLm1heEFnZSYmbigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L21heC1hZ2UuanMiKSxpLm1heCYmbigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L21heC5qcyIpLGkucmVmQ291bnRlciYmbigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvZXh0L3JlZi1jb3VudGVyLmpzIikscyhlLGkpfX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2xpYi9jb25maWd1cmUtbWFwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvZXJyb3IvY3VzdG9tLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2Z1bmN0aW9uL19kZWZpbmUtbGVuZ3RoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9kL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9ldmVudC1lbWl0dGVyL2luZGV4LmpzIikubWV0aG9kcyxhPW4oIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2xpYi9yZXNvbHZlLXJlc29sdmUuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2xpYi9yZXNvbHZlLW5vcm1hbGl6ZS5qcyIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LGM9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsZD1PYmplY3QuY3JlYXRlLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGY9aS5vbixtPWkuZW1pdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGgsZyxiLEUseSx2LFQsQSxDLE8sUyxSLGo9ZChudWxsKTtyZXR1cm4gaD0hMSE9PXQ/dDppc05hTihlLmxlbmd0aCk/MTplLmxlbmd0aCxuLm5vcm1hbGl6ZXImJihUPWwobi5ub3JtYWxpemVyKSxnPVQuZ2V0LGI9VC5zZXQsRT1ULmRlbGV0ZSx5PVQuY2xlYXIpLG51bGwhPW4ucmVzb2x2ZXJzJiYoUj1hKG4ucmVzb2x2ZXJzKSksUz1nP28oZnVuY3Rpb24odCl7dmFyIG4sbyxzPWFyZ3VtZW50cztpZihSJiYocz1SKHMpKSxudWxsIT09KG49ZyhzKSkmJl8uY2FsbChqLG4pKXJldHVybiBBJiZpLmVtaXQoImdldCIsbixzLHRoaXMpLGpbbl07aWYobz0xPT09cy5sZW5ndGg/Yy5jYWxsKGUsdGhpcyxzWzBdKTp1LmNhbGwoZSx0aGlzLHMpLG51bGw9PT1uKXtpZihudWxsIT09KG49ZyhzKSkpdGhyb3cgcigiQ2lyY3VsYXIgaW52b2NhdGlvbiIsIkNJUkNVTEFSX0lOVk9DQVRJT04iKTtuPWIocyl9ZWxzZSBpZihfLmNhbGwoaixuKSl0aHJvdyByKCJDaXJjdWxhciBpbnZvY2F0aW9uIiwiQ0lSQ1VMQVJfSU5WT0NBVElPTiIpO3JldHVybiBqW25dPW8sQyYmaS5lbWl0KCJzZXQiLG4sbnVsbCxvKSxvfSxoKTowPT09dD9mdW5jdGlvbigpe3ZhciB0O2lmKF8uY2FsbChqLCJkYXRhIikpcmV0dXJuIEEmJmkuZW1pdCgiZ2V0IiwiZGF0YSIsYXJndW1lbnRzLHRoaXMpLGouZGF0YTtpZih0PWFyZ3VtZW50cy5sZW5ndGg/dS5jYWxsKGUsdGhpcyxhcmd1bWVudHMpOmMuY2FsbChlLHRoaXMpLF8uY2FsbChqLCJkYXRhIikpdGhyb3cgcigiQ2lyY3VsYXIgaW52b2NhdGlvbiIsIkNJUkNVTEFSX0lOVk9DQVRJT04iKTtyZXR1cm4gai5kYXRhPXQsQyYmaS5lbWl0KCJzZXQiLCJkYXRhIixudWxsLHQpLHR9OmZ1bmN0aW9uKHQpe3ZhciBuLG8scz1hcmd1bWVudHM7aWYoUiYmKHM9Uihhcmd1bWVudHMpKSxvPVN0cmluZyhzWzBdKSxfLmNhbGwoaixvKSlyZXR1cm4gQSYmaS5lbWl0KCJnZXQiLG8scyx0aGlzKSxqW29dO2lmKG49MT09PXMubGVuZ3RoP2MuY2FsbChlLHRoaXMsc1swXSk6dS5jYWxsKGUsdGhpcyxzKSxfLmNhbGwoaixvKSl0aHJvdyByKCJDaXJjdWxhciBpbnZvY2F0aW9uIiwiQ0lSQ1VMQVJfSU5WT0NBVElPTiIpO3JldHVybiBqW29dPW4sQyYmaS5lbWl0KCJzZXQiLG8sbnVsbCxuKSxufSxpPXtvcmlnaW5hbDplLG1lbW9pemVkOlMsZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBSJiYoZT1SKGUpKSxnP2coZSk6U3RyaW5nKGVbMF0pfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIF8uY2FsbChqLGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ7Xy5jYWxsKGosZSkmJihFJiZFKGUpLHQ9altlXSxkZWxldGUgaltlXSxPJiZpLmVtaXQoImRlbGV0ZSIsZSx0KSl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGU9ajt5JiZ5KCksaj1kKG51bGwpLGkuZW1pdCgiY2xlYXIiLGUpfSxvbjpmdW5jdGlvbihlLHQpe3JldHVybiJnZXQiPT09ZT9BPSEwOiJzZXQiPT09ZT9DPSEwOiJkZWxldGUiPT09ZSYmKE89ITApLGYuY2FsbCh0aGlzLGUsdCl9LGVtaXQ6bSx1cGRhdGVFbnY6ZnVuY3Rpb24oKXtlPWkub3JpZ2luYWx9fSx2PWc/byhmdW5jdGlvbihlKXt2YXIgdCxuPWFyZ3VtZW50cztSJiYobj1SKG4pKSxudWxsIT09KHQ9ZyhuKSkmJmkuZGVsZXRlKHQpfSxoKTowPT09dD9mdW5jdGlvbigpe3JldHVybiBpLmRlbGV0ZSgiZGF0YSIpfTpmdW5jdGlvbihlKXtyZXR1cm4gUiYmKGU9Uihhcmd1bWVudHMpWzBdKSxpLmRlbGV0ZShlKX0scChTLHtfX21lbW9pemVkX186cyghMCksZGVsZXRlOnModiksY2xlYXI6cyhpLmNsZWFyKX0pLGl9fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3JlZ2lzdGVyZWQtZXh0ZW5zaW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0In0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL2xpYi9yZXNvbHZlLWxlbmd0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L251bWJlci90by1wb3MtaW50ZWdlci5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIG87cmV0dXJuIGlzTmFOKGUpPyhvPXQsbz49MD9uJiZvP28tMTpvOjEpOiExIT09ZSYmcihlKX19LCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVzb2x2ZS1ub3JtYWxpemUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/e3NldDplLGdldDplfToodD17Z2V0OnIoZS5nZXQpfSx2b2lkIDAhPT1lLnNldD8odC5zZXQ9cihlLnNldCksdC5kZWxldGU9cihlLmRlbGV0ZSksdC5jbGVhcj1yKGUuY2xlYXIpLHQpOih0LnNldD10LmdldCx0KSl9fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3Jlc29sdmUtcmVzb2x2ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvdG8tYXJyYXkuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlLmpzIiksaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7cj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gdD90KGVbbl0pOmVbbl19KS5jb25jYXQoaS5jYWxsKGUsdGhpcy5sZW5ndGgpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPW8oZSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe251bGwhPWUmJnMoZSl9KSxyLmJpbmQoZSl9fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbm9ybWFsaXplcnMvZ2V0LTEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9hcnJheS8jL2UtaW5kZXgtb2YuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9W10sbj1bXTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUpe3ZhciBvPXIuY2FsbCh0LGVbMF0pO3JldHVybi0xPT09bz9udWxsOm5bb119LHNldDpmdW5jdGlvbihyKXtyZXR1cm4gdC5wdXNoKHJbMF0pLG4ucHVzaCgrK2UpLGV9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbz1yLmNhbGwobixlKTstMSE9PW8mJih0LnNwbGljZShvLDEpLG4uc3BsaWNlKG8sMSkpfSxjbGVhcjpmdW5jdGlvbigpe3Q9W10sbj1bXX19fX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL25vcm1hbGl6ZXJzL2dldC1maXhlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9lczUtZXh0L2FycmF5LyMvZS1pbmRleC1vZi5qcyIpLG89T2JqZWN0LmNyZWF0ZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPVtbXSxbXV0scz1vKG51bGwpO3JldHVybntnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBvLHM9MCxpPW47czxlLTE7KXtpZigtMT09PShvPXIuY2FsbChpWzBdLHRbc10pKSlyZXR1cm4gbnVsbDtpPWlbMV1bb10sKytzfXJldHVybiBvPXIuY2FsbChpWzBdLHRbc10pLC0xPT09bz9udWxsOmlbMV1bb118fG51bGx9LHNldDpmdW5jdGlvbihvKXtmb3IodmFyIGksYT0wLGw9bjthPGUtMTspaT1yLmNhbGwobFswXSxvW2FdKSwtMT09PWkmJihpPWxbMF0ucHVzaChvW2FdKS0xLGxbMV0ucHVzaChbW10sW11dKSksbD1sWzFdW2ldLCsrYTtyZXR1cm4gaT1yLmNhbGwobFswXSxvW2FdKSwtMT09PWkmJihpPWxbMF0ucHVzaChvW2FdKS0xKSxsWzFdW2ldPSsrdCxzW3RdPW8sdH0sZGVsZXRlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbyxpPTAsYT1uLGw9W10sdT1zW3RdO2k8ZS0xOyl7aWYoLTE9PT0obz1yLmNhbGwoYVswXSx1W2ldKSkpcmV0dXJuO2wucHVzaChhLG8pLGE9YVsxXVtvXSwrK2l9aWYoLTEhPT0obz1yLmNhbGwoYVswXSx1W2ldKSkpe2Zvcih0PWFbMV1bb10sYVswXS5zcGxpY2UobywxKSxhWzFdLnNwbGljZShvLDEpOyFhWzBdLmxlbmd0aCYmbC5sZW5ndGg7KW89bC5wb3AoKSxhPWwucG9wKCksYVswXS5zcGxpY2UobywxKSxhWzFdLnNwbGljZShvLDEpO2RlbGV0ZSBzW3RdfX0sY2xlYXI6ZnVuY3Rpb24oKXtuPVtbXSxbXV0scz1vKG51bGwpfX19fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbm9ybWFsaXplcnMvZ2V0LXByaW1pdGl2ZS1maXhlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCl7Zm9yKHZhciBuPVN0cmluZyh0WzBdKSxyPTAsbz1lOy0tbzspbis9IgEiK3RbKytyXTtyZXR1cm4gbn06ZnVuY3Rpb24oKXtyZXR1cm4iIn19fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbm9ybWFsaXplcnMvZ2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvYXJyYXkvIy9lLWluZGV4LW9mLmpzIiksbz1PYmplY3QuY3JlYXRlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPTAsdD1bXSxuPW8obnVsbCk7cmV0dXJue2dldDpmdW5jdGlvbihlKXt2YXIgbixvPTAscz10LGk9ZS5sZW5ndGg7aWYoMD09PWkpcmV0dXJuIHNbaV18fG51bGw7aWYocz1zW2ldKXtmb3IoO288aS0xOyl7aWYoLTE9PT0obj1yLmNhbGwoc1swXSxlW29dKSkpcmV0dXJuIG51bGw7cz1zWzFdW25dLCsrb31yZXR1cm4gbj1yLmNhbGwoc1swXSxlW29dKSwtMT09PW4/bnVsbDpzWzFdW25dfHxudWxsfXJldHVybiBudWxsfSxzZXQ6ZnVuY3Rpb24obyl7dmFyIHMsaT0wLGE9dCxsPW8ubGVuZ3RoO2lmKDA9PT1sKWFbbF09KytlO2Vsc2V7Zm9yKGFbbF18fChhW2xdPVtbXSxbXV0pLGE9YVtsXTtpPGwtMTspcz1yLmNhbGwoYVswXSxvW2ldKSwtMT09PXMmJihzPWFbMF0ucHVzaChvW2ldKS0xLGFbMV0ucHVzaChbW10sW11dKSksYT1hWzFdW3NdLCsraTtzPXIuY2FsbChhWzBdLG9baV0pLC0xPT09cyYmKHM9YVswXS5wdXNoKG9baV0pLTEpLGFbMV1bc109KytlfXJldHVybiBuW2VdPW8sZX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciBvLHM9MCxpPXQsYT1uW2VdLGw9YS5sZW5ndGgsdT1bXTtpZigwPT09bClkZWxldGUgaVtsXTtlbHNlIGlmKGk9aVtsXSl7Zm9yKDtzPGwtMTspe2lmKC0xPT09KG89ci5jYWxsKGlbMF0sYVtzXSkpKXJldHVybjt1LnB1c2goaSxvKSxpPWlbMV1bb10sKytzfWlmKC0xPT09KG89ci5jYWxsKGlbMF0sYVtzXSkpKXJldHVybjtmb3IoZT1pWzFdW29dLGlbMF0uc3BsaWNlKG8sMSksaVsxXS5zcGxpY2UobywxKTshaVswXS5sZW5ndGgmJnUubGVuZ3RoOylvPXUucG9wKCksaT11LnBvcCgpLGlbMF0uc3BsaWNlKG8sMSksaVsxXS5zcGxpY2UobywxKX1kZWxldGUgbltlXX0sY2xlYXI6ZnVuY3Rpb24oKXt0PVtdLG49byhudWxsKX19fX0sIi4vbm9kZV9tb2R1bGVzL21lbW9pemVlL25vcm1hbGl6ZXJzL3ByaW1pdGl2ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUubGVuZ3RoO2lmKCFyKXJldHVybiICIjtmb3IodD1TdHJpbmcoZVtuPTBdKTstLXI7KXQrPSIBIitlWysrbl07cmV0dXJuIHR9fSwiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvcGxhaW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL2VzNS1leHQvb2JqZWN0L2Zvci1lYWNoLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvcmVnaXN0ZXJlZC1leHRlbnNpb25zLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9saWIvY29uZmlndXJlLW1hcC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZWUvbGliL3Jlc29sdmUtbGVuZ3RoLmpzIiksbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbiBlKHQpe3ZhciBuLHUsYztpZihyKHQpLG49T2JqZWN0KGFyZ3VtZW50c1sxXSksbi5hc3luYyYmbi5wcm9taXNlKXRocm93IG5ldyBFcnJvcigiT3B0aW9ucyAnYXN5bmMnIGFuZCAncHJvbWlzZScgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtyZXR1cm4gbC5jYWxsKHQsIl9fbWVtb2l6ZWRfXyIpJiYhbi5mb3JjZT90Oih1PWEobi5sZW5ndGgsdC5sZW5ndGgsbi5hc3luYyYmcy5hc3luYyksYz1pKHQsdSxuKSxvKHMsZnVuY3Rpb24oZSx0KXtuW3RdJiZlKG5bdF0sYyxuKX0pLGUuX19wcm9maWxlcl9fJiZlLl9fcHJvZmlsZXJfXyhjKSxjLnVwZGF0ZUVudigpLGMubWVtb2l6ZWQpfX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUgcmVjdXJzaXZlIF5cXC5cXC8uKiQiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBuKG8oZSkpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9c1tlXTtpZighKHQrMSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZSsiJy4iKTtyZXR1cm4gdH12YXIgcz17Ii4vYWYiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FmLmpzIiwiLi9hZi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanMiLCIuL2FyIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcyIsIi4vYXItZHoiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWR6LmpzIiwiLi9hci1kei5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanMiLCIuL2FyLWt3IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qcyIsIi4vYXIta3cuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWt3LmpzIiwiLi9hci1seSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanMiLCIuL2FyLWx5LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcyIsIi4vYXItbWEiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzIiwiLi9hci1tYS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanMiLCIuL2FyLXNhIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qcyIsIi4vYXItc2EuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzIiwiLi9hci10biI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanMiLCIuL2FyLXRuLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcyIsIi4vYXIuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLmpzIiwiLi9heiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanMiLCIuL2F6LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcyIsIi4vYmUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzIiwiLi9iZS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanMiLCIuL2JnIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcyIsIi4vYmcuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JnLmpzIiwiLi9ibSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanMiLCIuL2JtLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcyIsIi4vYm4iOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLmpzIiwiLi9ibi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiLCIuL2JvIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcyIsIi4vYm8uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JvLmpzIiwiLi9iciI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanMiLCIuL2JyLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcyIsIi4vYnMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzIiwiLi9icy5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanMiLCIuL2NhIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qcyIsIi4vY2EuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NhLmpzIiwiLi9jcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanMiLCIuL2NzLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcyIsIi4vY3YiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N2LmpzIiwiLi9jdi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanMiLCIuL2N5IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcyIsIi4vY3kuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N5LmpzIiwiLi9kYSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanMiLCIuL2RhLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qcyIsIi4vZGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi9kZS1hdCI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiLCIuL2RlLWF0LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qcyIsIi4vZGUtY2giOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzIiwiLi9kZS1jaC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanMiLCIuL2RlLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIi4vZHYiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzIiwiLi9kdi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanMiLCIuL2VsIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcyIsIi4vZWwuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VsLmpzIiwiLi9lbi1hdSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanMiLCIuL2VuLWF1LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcyIsIi4vZW4tY2EiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzIiwiLi9lbi1jYS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanMiLCIuL2VuLWdiIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcyIsIi4vZW4tZ2IuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzIiwiLi9lbi1pZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanMiLCIuL2VuLWllLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcyIsIi4vZW4taWwiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWlsLmpzIiwiLi9lbi1pbC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiLCIuL2VuLW56IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcyIsIi4vZW4tbnouanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzIiwiLi9lbyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanMiLCIuL2VvLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcyIsIi4vZXMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzIiwiLi9lcy1kbyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtZG8uanMiLCIuL2VzLWRvLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcyIsIi4vZXMtdXMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLXVzLmpzIiwiLi9lcy11cy5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanMiLCIuL2VzLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qcyIsIi4vZXQiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V0LmpzIiwiLi9ldC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanMiLCIuL2V1IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcyIsIi4vZXUuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V1LmpzIiwiLi9mYSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanMiLCIuL2ZhLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qcyIsIi4vZmkiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzIiwiLi9maS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuL2ZvIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcyIsIi4vZm8uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzIiwiLi9mciI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanMiLCIuL2ZyLWNhIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qcyIsIi4vZnItY2EuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzIiwiLi9mci1jaCI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanMiLCIuL2ZyLWNoLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcyIsIi4vZnIuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzIiwiLi9meSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanMiLCIuL2Z5LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qcyIsIi4vZ2QiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzIiwiLi9nZC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanMiLCIuL2dsIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qcyIsIi4vZ2wuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzIiwiLi9nb20tbGF0biI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanMiLCIuL2dvbS1sYXRuLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qcyIsIi4vZ3UiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIiwiLi9ndS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanMiLCIuL2hlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcyIsIi4vaGUuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzIiwiLi9oaSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanMiLCIuL2hpLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcyIsIi4vaHIiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzIiwiLi9oci5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanMiLCIuL2h1IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcyIsIi4vaHUuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzIiwiLi9oeS1hbSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanMiLCIuL2h5LWFtLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcyIsIi4vaWQiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzIiwiLi9pZC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanMiLCIuL2lzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcyIsIi4vaXMuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzIiwiLi9pdCI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanMiLCIuL2l0LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qcyIsIi4vamEiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzIiwiLi9qYS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanMiLCIuL2p2IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcyIsIi4vanYuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2p2LmpzIiwiLi9rYSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanMiLCIuL2thLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qcyIsIi4va2siOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzIiwiLi9ray5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanMiLCIuL2ttIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qcyIsIi4va20uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzIiwiLi9rbiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanMiLCIuL2tuLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qcyIsIi4va28iOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzIiwiLi9rby5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanMiLCIuL2t5IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qcyIsIi4va3kuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIiwiLi9sYiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanMiLCIuL2xiLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qcyIsIi4vbG8iOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xvLmpzIiwiLi9sby5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanMiLCIuL2x0IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qcyIsIi4vbHQuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzIiwiLi9sdiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanMiLCIuL2x2LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcyIsIi4vbWUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzIiwiLi9tZS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanMiLCIuL21pIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcyIsIi4vbWkuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzIiwiLi9tayI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanMiLCIuL21rLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qcyIsIi4vbWwiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzIiwiLi9tbC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanMiLCIuL21uIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qcyIsIi4vbW4uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIiwiLi9tciI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanMiLCIuL21yLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcyIsIi4vbXMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwiLi9tcy1teSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanMiLCIuL21zLW15LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcyIsIi4vbXMuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwiLi9tdCI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanMiLCIuL210LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qcyIsIi4vbXkiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzIiwiLi9teS5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanMiLCIuL25iIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcyIsIi4vbmIuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzIiwiLi9uZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanMiLCIuL25lLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qcyIsIi4vbmwiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwiLi9ubC1iZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanMiLCIuL25sLWJlLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcyIsIi4vbmwuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwiLi9ubiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanMiLCIuL25uLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcyIsIi4vcGEtaW4iOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzIiwiLi9wYS1pbi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanMiLCIuL3BsIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcyIsIi4vcGwuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzIiwiLi9wdCI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanMiLCIuL3B0LWJyIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyIsIi4vcHQtYnIuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzIiwiLi9wdC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanMiLCIuL3JvIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcyIsIi4vcm8uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzIiwiLi9ydSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanMiLCIuL3J1LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyIsIi4vc2QiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzIiwiLi9zZC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2QuanMiLCIuL3NlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcyIsIi4vc2UuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzIiwiLi9zaSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanMiLCIuL3NpLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcyIsIi4vc2siOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzIiwiLi9zay5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanMiLCIuL3NsIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyIsIi4vc2wuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzIiwiLi9zcSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanMiLCIuL3NxLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcyIsIi4vc3IiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzIiwiLi9zci1jeXJsIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwiLi9zci1jeXJsLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwiLi9zci5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanMiLCIuL3NzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcyIsIi4vc3MuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzIiwiLi9zdiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiLCIuL3N2LmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4vc3ciOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzIiwiLi9zdy5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanMiLCIuL3RhIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qcyIsIi4vdGEuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzIiwiLi90ZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanMiLCIuL3RlLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qcyIsIi4vdGV0IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanMiLCIuL3RldC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzIiwiLi90ZyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanMiLCIuL3RnLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcyIsIi4vdGgiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzIiwiLi90aC5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanMiLCIuL3RsLXBoIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcyIsIi4vdGwtcGguanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzIiwiLi90bGgiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qcyIsIi4vdGxoLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCIuL3RyIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qcyIsIi4vdHIuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzIiwiLi90emwiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qcyIsIi4vdHpsLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanMiLCIuL3R6bSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzIiwiLi90em0tbGF0biI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLWxhdG4uanMiLCIuL3R6bS1sYXRuLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qcyIsIi4vdHptLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanMiLCIuL3VnLWNuIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyIsIi4vdWctY24uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzIiwiLi91ayI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanMiLCIuL3VrLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIi4vdXIiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzIiwiLi91ci5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanMiLCIuL3V6IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qcyIsIi4vdXotbGF0biI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcyIsIi4vdXotbGF0bi5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcyIsIi4vdXouanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwiLi92aSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanMiLCIuL3ZpLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qcyIsIi4veC1wc2V1ZG8iOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzIiwiLi94LXBzZXVkby5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanMiLCIuL3lvIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS95by5qcyIsIi4veW8uanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwiLi96aC1jbiI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanMiLCIuL3poLWNuLmpzIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qcyIsIi4vemgtaGsiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzIiwiLi96aC1oay5qcyI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanMiLCIuL3poLXR3IjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcyIsIi4vemgtdHcuanMiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzIn07ci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHMpfSxyLnJlc29sdmU9byxlLmV4cG9ydHM9cixyLmlkPSIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlIHJlY3Vyc2l2ZSBeXFwuXFwvLiokIn0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiYWYiLHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQoIl8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL15ubSQvaS50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/bj8idm0iOiJWTSI6bj8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNw7RyZSBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltHaXN0ZXIgb21dIExUIixsYXN0V2VlazoiW0xhYXNdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib29yICVzIixwYXN0OiIlcyBnZWxlZGUiLHM6IiduIHBhYXIgc2Vrb25kZXMiLHNzOiIlZCBzZWtvbmRlcyIsbToiJ24gbWludXV0IixtbToiJWQgbWludXRlIixoOiInbiB1dXIiLGhoOiIlZCB1cmUiLGQ6IiduIGRhZyIsZGQ6IiVkIGRhZSIsTToiJ24gbWFhbmQiLE1NOiIlZCBtYWFuZGUiLHk6IiduIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKygxPT09ZXx8OD09PWV8fGU+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczoi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEiLnNwbGl0KCJfIiksd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYp9it2K9f2KfYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2KPYrV/YpdirX9ir2YTYp1/Yo9ixX9iu2YVf2KzZhV/Ys9ioIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHREYXk6IlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHRXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdERheToiW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLZgdmKICVzIixwYXN0OiLZhdmG2LAgJXMiLHM6Itir2YjYp9mGIixzczoiJWQg2KvYp9mG2YrYqSIsbToi2K/ZgtmK2YLYqSIsbW06IiVkINiv2YLYp9im2YIiLGg6Itiz2KfYudipIixoaDoiJWQg2LPYp9i52KfYqiIsZDoi2YrZiNmFIixkZDoiJWQg2KPZitin2YUiLE06Iti02YfYsSIsTU06IiVkINij2LTZh9ixIix5OiLYs9mG2KkiLHl5OiIlZCDYs9mG2YjYp9iqIn0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6ItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEiLnNwbGl0KCJfIiksd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KrZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYp9it2K9f2KfYqtmG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2K1f2YZf2Ktf2LFf2K5f2Kxf2LMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0RGF5OiJb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItmB2YogJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczoi2KvZiNin2YYiLHNzOiIlZCDYq9in2YbZitipIixtOiLYr9mC2YrZgtipIixtbToiJWQg2K/Zgtin2KbZgiIsaDoi2LPYp9i52KkiLGhoOiIlZCDYs9in2LnYp9iqIixkOiLZitmI2YUiLGRkOiIlZCDYo9mK2KfZhSIsTToi2LTZh9ixIixNTToiJWQg2KPYtNmH2LEiLHk6Itiz2YbYqSIseXk6IiVkINiz2YbZiNin2KoifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXsxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0sbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWU/MDoxPT09ZT8xOjI9PT1lPzI6ZSUxMDA+PTMmJmUlMTAwPD0xMD8zOmUlMTAwPj0xMT80OjV9LHI9e3M6WyLYo9mC2YQg2YXZhiDYq9in2YbZitipIiwi2KvYp9mG2YrYqSDZiNin2K3Yr9ipIixbItir2KfZhtmK2KrYp9mGIiwi2KvYp9mG2YrYqtmK2YYiXSwiJWQg2KvZiNin2YYiLCIlZCDYq9in2YbZitipIiwiJWQg2KvYp9mG2YrYqSJdLG06WyLYo9mC2YQg2YXZhiDYr9mC2YrZgtipIiwi2K/ZgtmK2YLYqSDZiNin2K3Yr9ipIixbItiv2YLZitmC2KrYp9mGIiwi2K/ZgtmK2YLYqtmK2YYiXSwiJWQg2K/Zgtin2KbZgiIsIiVkINiv2YLZitmC2KkiLCIlZCDYr9mC2YrZgtipIl0saDpbItij2YLZhCDZhdmGINiz2KfYudipIiwi2LPYp9i52Kkg2YjYp9it2K/YqSIsWyLYs9in2LnYqtin2YYiLCLYs9in2LnYqtmK2YYiXSwiJWQg2LPYp9i52KfYqiIsIiVkINiz2KfYudipIiwiJWQg2LPYp9i52KkiXSxkOlsi2KPZgtmEINmF2YYg2YrZiNmFIiwi2YrZiNmFINmI2KfYrdivIixbItmK2YjZhdin2YYiLCLZitmI2YXZitmGIl0sIiVkINij2YrYp9mFIiwiJWQg2YrZiNmF2YvYpyIsIiVkINmK2YjZhSJdLE06WyLYo9mC2YQg2YXZhiDYtNmH2LEiLCLYtNmH2LEg2YjYp9it2K8iLFsi2LTZh9ix2KfZhiIsIti02YfYsdmK2YYiXSwiJWQg2KPYtNmH2LEiLCIlZCDYtNmH2LHYpyIsIiVkINi02YfYsSJdLHk6WyLYo9mC2YQg2YXZhiDYudin2YUiLCLYudin2YUg2YjYp9it2K8iLFsi2LnYp9mF2KfZhiIsIti52KfZhdmK2YYiXSwiJWQg2KPYudmI2KfZhSIsIiVkINi52KfZhdmL2KciLCIlZCDYudin2YUiXX0sbz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxvLHMsaSl7dmFyIGE9bih0KSxsPXJbZV1bbih0KV07cmV0dXJuIDI9PT1hJiYobD1sW28/MDoxXSksbC5yZXBsYWNlKC8lZC9pLHQpfX0scz1bItmK2YbYp9mK2LEiLCLZgdio2LHYp9mK2LEiLCLZhdin2LHYsyIsItij2KjYsdmK2YQiLCLZhdin2YrZiCIsItmK2YjZhtmK2YgiLCLZitmI2YTZitmIIiwi2KPYutiz2LfYsyIsItiz2KjYqtmF2KjYsSIsItij2YPYqtmI2KjYsSIsItmG2YjZgdmF2KjYsSIsItiv2YrYs9mF2KjYsSJdO3JldHVybiBlLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6cyxtb250aHNTaG9ydDpzLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL+KAj00v4oCPWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov2LV82YUvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuItmFIj09PWV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8i2LUiOiLZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUIixuZXh0V2VlazoiZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQiLGxhc3REYXk6IlvYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2KjYudivICVzIixwYXN0OiLZhdmG2LAgJXMiLHM6bygicyIpLHNzOm8oInMiKSxtOm8oIm0iKSxtbTpvKCJtIiksaDpvKCJoIiksaGg6bygiaCIpLGQ6bygiZCIpLGRkOm8oImQiKSxNOm8oIk0iKSxNTTpvKCJNIikseTpvKCJ5IikseXk6bygieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC/YjC9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHREYXk6IlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHRXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdERheToiW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLZgdmKICVzIixwYXN0OiLZhdmG2LAgJXMiLHM6Itir2YjYp9mGIixzczoiJWQg2KvYp9mG2YrYqSIsbToi2K/ZgtmK2YLYqSIsbW06IiVkINiv2YLYp9im2YIiLGg6Itiz2KfYudipIixoaDoiJWQg2LPYp9i52KfYqiIsZDoi2YrZiNmFIixkZDoiJWQg2KPZitin2YUiLE06Iti02YfYsSIsTU06IiVkINij2LTZh9ixIix5OiLYs9mG2KkiLHl5OiIlZCDYs9mG2YjYp9iqIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi2aEiLDI6ItmiIiwzOiLZoyIsNDoi2aQiLDU6ItmlIiw2OiLZpiIsNzoi2aciLDg6ItmoIiw5OiLZqSIsMDoi2aAifSxuPXsi2aEiOiIxIiwi2aIiOiIyIiwi2aMiOiIzIiwi2aQiOiI0Iiwi2aUiOiI1Iiwi2aYiOiI2Iiwi2aciOiI3Iiwi2agiOiI4Iiwi2akiOiI5Iiwi2aAiOiIwIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/YtXzZhS8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i2YUiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyLYtSI6ItmFIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0RGF5OiJb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3REYXk6IlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2YHZiiAlcyIscGFzdDoi2YXZhtiwICVzIixzOiLYq9mI2KfZhiIsc3M6IiVkINir2KfZhtmK2KkiLG06Itiv2YLZitmC2KkiLG1tOiIlZCDYr9mC2KfYptmCIixoOiLYs9in2LnYqSIsaGg6IiVkINiz2KfYudin2KoiLGQ6ItmK2YjZhSIsZGQ6IiVkINij2YrYp9mFIixNOiLYtNmH2LEiLE1NOiIlZCDYo9i02YfYsSIseToi2LPZhtipIix5eToiJWQg2LPZhtmI2KfYqiJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkucmVwbGFjZSgvLC9nLCLYjCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEiLnNwbGl0KCJfIiksd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2K1f2YZf2Ktf2LFf2K5f2Kxf2LMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0RGF5OiJb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItmB2YogJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczoi2KvZiNin2YYiLHNzOiIlZCDYq9in2YbZitipIixtOiLYr9mC2YrZgtipIixtbToiJWQg2K/Zgtin2KbZgiIsaDoi2LPYp9i52KkiLGhoOiIlZCDYs9in2LnYp9iqIixkOiLZitmI2YUiLGRkOiIlZCDYo9mK2KfZhSIsTToi2LTZh9ixIixNTToiJWQg2KPYtNmH2LEiLHk6Itiz2YbYqSIseXk6IiVkINiz2YbZiNin2KoifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ezE6ItmhIiwyOiLZoiIsMzoi2aMiLDQ6ItmkIiw1OiLZpSIsNjoi2aYiLDc6ItmnIiw4OiLZqCIsOToi2akiLDA6ItmgIn0sbj17ItmhIjoiMSIsItmiIjoiMiIsItmjIjoiMyIsItmkIjoiNCIsItmlIjoiNSIsItmmIjoiNiIsItmnIjoiNyIsItmoIjoiOCIsItmpIjoiOSIsItmgIjoiMCJ9LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lPzA6MT09PWU/MToyPT09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1fSxvPXtzOlsi2KPZgtmEINmF2YYg2KvYp9mG2YrYqSIsItir2KfZhtmK2Kkg2YjYp9it2K/YqSIsWyLYq9in2YbZitiq2KfZhiIsItir2KfZhtmK2KrZitmGIl0sIiVkINir2YjYp9mGIiwiJWQg2KvYp9mG2YrYqSIsIiVkINir2KfZhtmK2KkiXSxtOlsi2KPZgtmEINmF2YYg2K/ZgtmK2YLYqSIsItiv2YLZitmC2Kkg2YjYp9it2K/YqSIsWyLYr9mC2YrZgtiq2KfZhiIsItiv2YLZitmC2KrZitmGIl0sIiVkINiv2YLYp9im2YIiLCIlZCDYr9mC2YrZgtipIiwiJWQg2K/ZgtmK2YLYqSJdLGg6WyLYo9mC2YQg2YXZhiDYs9in2LnYqSIsItiz2KfYudipINmI2KfYrdiv2KkiLFsi2LPYp9i52KrYp9mGIiwi2LPYp9i52KrZitmGIl0sIiVkINiz2KfYudin2KoiLCIlZCDYs9in2LnYqSIsIiVkINiz2KfYudipIl0sZDpbItij2YLZhCDZhdmGINmK2YjZhSIsItmK2YjZhSDZiNin2K3YryIsWyLZitmI2YXYp9mGIiwi2YrZiNmF2YrZhiJdLCIlZCDYo9mK2KfZhSIsIiVkINmK2YjZhdmL2KciLCIlZCDZitmI2YUiXSxNOlsi2KPZgtmEINmF2YYg2LTZh9ixIiwi2LTZh9ixINmI2KfYrdivIixbIti02YfYsdin2YYiLCLYtNmH2LHZitmGIl0sIiVkINij2LTZh9ixIiwiJWQg2LTZh9ix2KciLCIlZCDYtNmH2LEiXSx5Olsi2KPZgtmEINmF2YYg2LnYp9mFIiwi2LnYp9mFINmI2KfYrdivIixbIti52KfZhdin2YYiLCLYudin2YXZitmGIl0sIiVkINij2LnZiNin2YUiLCIlZCDYudin2YXZi9inIiwiJWQg2LnYp9mFIl19LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixzLGkpe3ZhciBhPXIodCksbD1vW2VdW3IodCldO3JldHVybiAyPT09YSYmKGw9bFtuPzA6MV0pLGwucmVwbGFjZSgvJWQvaSx0KX19LGk9WyLZitmG2KfZitixIiwi2YHYqNix2KfZitixIiwi2YXYp9ix2LMiLCLYo9io2LHZitmEIiwi2YXYp9mK2YgiLCLZitmI2YbZitmIIiwi2YrZiNmE2YrZiCIsItij2LrYs9i32LMiLCLYs9io2KrZhdio2LEiLCLYo9mD2KrZiNio2LEiLCLZhtmI2YHZhdio2LEiLCLYr9mK2LPZhdio2LEiXTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImFyIix7bW9udGhzOmksbW9udGhzU2hvcnQ6aSx3ZWVrZGF5czoi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Itij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLYrV/Zhl/Yq1/YsV/Yrl/YrF/YsyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC/igI9NL+KAj1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9i1fNmFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLZhSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/Iti1Ijoi2YUifSxjYWxlbmRhcjp7c2FtZURheToiW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQiLG5leHREYXk6IlvYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUIixsYXN0RGF5OiJb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUIixsYXN0V2VlazoiZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Itio2LnYryAlcyIscGFzdDoi2YXZhtiwICVzIixzOnMoInMiKSxzczpzKCJzIiksbTpzKCJtIiksbW06cygibSIpLGg6cygiaCIpLGhoOnMoImgiKSxkOnMoImQiKSxkZDpzKCJkIiksTTpzKCJNIiksTU06cygiTSIpLHk6cygieSIpLHl5OnMoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSkucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii3DvG5jw7wiLDQ6Ii3DvG5jw7wiLDEwMDoiLcO8bmPDvCIsNjoiLW5jxLEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii3EsW5jxLEiLDkwOiItxLFuY8SxIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJheiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydMmZc2lfw4fJmXLFn8mZbmLJmSBheMWfYW3EsV/Dh8mZcsWfyZluYsmZX0PDvG3JmSBheMWfYW3EsV9Dw7xtyZlfxZ7JmW5iyZkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnw7xuIHNhYXRdIExUIixuZXh0RGF5OiJbc2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2TDvG7JmW5dIExUIixsYXN0V2VlazoiW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyDJmXZ2yZlsIixzOiJiaXJuZcOnyZkgc2FuaXl5yZkiLHNzOiIlZCBzYW5pecmZIixtOiJiaXIgZMmZcWlxyZkiLG1tOiIlZCBkyZlxaXHJmSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ8O8biIsZGQ6IiVkIGfDvG4iLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi9eKGfDvG5kw7x6fGF4xZ9hbSkkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8iZ2VjyZkiOmU8MTI/InPJmWjJmXIiOmU8MTc/ImfDvG5kw7x6IjoiYXjFn2FtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oxLFuY8SxfGluY2l8bmNpfMO8bmPDvHxuY8SxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe2lmKDA9PT1lKXJldHVybiBlKyItxLFuY8SxIjt2YXIgbj1lJTEwLHI9ZSUxMDAtbixvPWU+PTEwMD8xMDA6bnVsbDtyZXR1cm4gZSsodFtuXXx8dFtyXXx8dFtvXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCl7dmFyIG49ZS5zcGxpdCgiXyIpO3JldHVybiB0JTEwPT0xJiZ0JTEwMCE9MTE/blswXTp0JTEwPj0yJiZ0JTEwPD00JiYodCUxMDA8MTB8fHQlMTAwPj0yMCk/blsxXTpuWzJdfWZ1bmN0aW9uIG4oZSxuLHIpe3ZhciBvPXtzczpuPyLRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQiOiLRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQiLG1tOm4/ItGF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvSI6ItGF0LLRltC70ZbQvdGDX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvSIsaGg6bj8i0LPQsNC00LfRltC90LBf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9Ijoi0LPQsNC00LfRltC90YNf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9IixkZDoi0LTQt9C10L3RjF/QtNC90ZZf0LTQt9GR0L0iLE1NOiLQvNC10YHRj9GGX9C80LXRgdGP0YbRi1/QvNC10YHRj9GG0LDRniIseXk6ItCz0L7QtF/Qs9Cw0LTRi1/Qs9Cw0LTQvtGeIn07cmV0dXJuIm0iPT09cj9uPyLRhdCy0ZbQu9GW0L3QsCI6ItGF0LLRltC70ZbQvdGDIjoiaCI9PT1yP24/ItCz0LDQtNC30ZbQvdCwIjoi0LPQsNC00LfRltC90YMiOmUrIiAiK3Qob1tyXSwrZSl9cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9ybWF0OiLRgdGC0YPQtNC30LXQvdGPX9C70Y7RgtCw0LPQsF/RgdCw0LrQsNCy0ZbQutCwX9C60YDQsNGB0LDQstGW0LrQsF/RgtGA0LDRntC90Y9f0YfRjdGA0LLQtdC90Y9f0LvRltC/0LXQvdGPX9C20L3RltGe0L3Rj1/QstC10YDQsNGB0L3Rj1/QutCw0YHRgtGA0YvRh9C90ZbQutCwX9C70ZbRgdGC0LDQv9Cw0LTQsF/RgdC90LXQttC90Y8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToi0YHRgtGD0LTQt9C10L3RjF/Qu9GO0YLRi1/RgdCw0LrQsNCy0ZbQul/QutGA0LDRgdCw0LLRltC6X9GC0YDQsNCy0LXQvdGMX9GH0Y3RgNCy0LXQvdGMX9C70ZbQv9C10L3RjF/QttC90ZbQstC10L3RjF/QstC10YDQsNGB0LXQvdGMX9C60LDRgdGC0YDRi9GH0L3RltC6X9C70ZbRgdGC0LDQv9Cw0LRf0YHQvdC10LbQsNC90YwiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiLRgdGC0YPQtF/Qu9GO0YJf0YHQsNC6X9C60YDQsNGBX9GC0YDQsNCyX9GH0Y3RgNCyX9C70ZbQv1/QttC90ZbQsl/QstC10YBf0LrQsNGB0YJf0LvRltGB0YJf0YHQvdC10LYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoi0L3Rj9C00LfQtdC70Y5f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNGDX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbRg1/RgdGD0LHQvtGC0YMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToi0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9b0JLQsl0gPyg/OtC80ZbQvdGD0LvRg9GOfNC90LDRgdGC0YPQv9C90YPRjik/ID9cXSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6ItC90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItC90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZINCzLiIsTExMOiJEIE1NTU0gWVlZWSDQsy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQodGR0L3QvdGPINGeXSBMVCIsbmV4dERheToiW9CX0LDRntGC0YDQsCDRnl0gTFQiLGxhc3REYXk6IlvQo9GH0L7RgNCwINGeXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW9CjXSBkZGRkIFvRnl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIlvQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItC/0YDQsNC3ICVzIixwYXN0OiIlcyDRgtCw0LzRgyIsczoi0L3QtdC60LDQu9GM0LrRliDRgdC10LrRg9C90LQiLG06bixtbTpuLGg6bixoaDpuLGQ6ItC00LfQtdC90YwiLGRkOm4sTToi0LzQtdGB0Y/RhiIsTU06bix5OiLQs9C+0LQiLHl5Om59LG1lcmlkaWVtUGFyc2U6L9C90L7Rh9GLfNGA0LDQvdGW0YbRi3zQtNC90Y980LLQtdGH0LDRgNCwLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi9eKNC00L3Rj3zQstC10YfQsNGA0LApJC8udGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDQ/ItC90L7Rh9GLIjplPDEyPyLRgNCw0L3RltGG0YsiOmU8MTc/ItC00L3RjyI6ItCy0LXRh9Cw0YDQsCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNGWfNGLfNCz0LApLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlJTEwIT0yJiZlJTEwIT0zfHxlJTEwMD09MTJ8fGUlMTAwPT0xMz9lKyIt0YsiOmUrIi3RliI7Y2FzZSJEIjpyZXR1cm4gZSsiLdCz0LAiO2RlZmF1bHQ6cmV0dXJuIGV9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoi0Y/QvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0Y/QvdGAX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LoiLnNwbGl0KCJfIiksd2Vla2RheXM6ItC90LXQtNC10LvRj1/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0Y/QtNCwX9GH0LXRgtCy0YrRgNGC0YrQul/Qv9C10YLRitC6X9GB0YrQsdC+0YLQsCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0Y9f0YfQtdGCX9C/0LXRgl/RgdGK0LEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItC90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9CU0L3QtdGBINCyXSBMVCIsbmV4dERheToiW9Cj0YLRgNC1INCyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9CyXSBMVCIsbGFzdERheToiW9CS0YfQtdGA0LAg0LJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW9CSINC40LfQvNC40L3QsNC70LDRgtCwXSBkZGRkIFvQsl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW9CSINC40LfQvNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItGB0LvQtdC0ICVzIixwYXN0OiLQv9GA0LXQtNC4ICVzIixzOiLQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCIsc3M6IiVkINGB0LXQutGD0L3QtNC4IixtOiLQvNC40L3Rg9GC0LAiLG1tOiIlZCDQvNC40L3Rg9GC0LgiLGg6ItGH0LDRgSIsaGg6IiVkINGH0LDRgdCwIixkOiLQtNC10L0iLGRkOiIlZCDQtNC90LgiLE06ItC80LXRgdC10YYiLE1NOiIlZCDQvNC10YHQtdGG0LAiLHk6ItCz0L7QtNC40L3QsCIseXk6IiVkINCz0L7QtNC40L3QuCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49ZSUxMDA7cmV0dXJuIDA9PT1lP2UrIi3QtdCyIjowPT09bj9lKyIt0LXQvSI6bj4xMCYmbjwyMD9lKyIt0YLQuCI6MT09PXQ/ZSsiLdCy0LgiOjI9PT10P2UrIi3RgNC4Ijo3PT09dHx8OD09PXQ/ZSsiLdC80LgiOmUrIi3RgtC4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX03Jm2thbG9fWnV3yZtua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU8mbdGFuYnVydWthbG9fyZRrdXTJlGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWmFuX0Zld19NYXJfQXdpX03Jm19adXdfWnVsX1V0aV9TyZt0X8mUa3VfTm93X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJLYXJfTnTJm19UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9Bcl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbSIsTExMTDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGzJm3LJm10gTFQiLG5leHREYXk6IltTaW5pIGzJm3LJm10gTFQiLG5leHRXZWVrOiJkZGRkIFtkb24gbMmbcsmbXSBMVCIsbGFzdERheToiW0t1bnUgbMmbcsmbXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3TJm23Jm25lbiBsyZtyyZtdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBryZRuyZQiLHBhc3Q6ImEgYsmbICVzIGLJlCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25kaSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJsyZtyyZsga2VsZW4iLGhoOiJsyZtyyZsgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixNOiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToic2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXsxOiLgp6ciLDI6IuCnqCIsMzoi4KepIiw0OiLgp6oiLDU6IuCnqyIsNjoi4KesIiw3OiLgp60iLDg6IuCnriIsOToi4KevIiwwOiLgp6YifSxuPXsi4KenIjoiMSIsIuCnqCI6IjIiLCLgp6kiOiIzIiwi4KeqIjoiNCIsIuCnqyI6IjUiLCLgp6wiOiI2Iiwi4KetIjoiNyIsIuCnriI6IjgiLCLgp68iOiI5Iiwi4KemIjoiMCJ9O3JldHVybiBlLmRlZmluZUxvY2FsZSgiYm4iLHttb250aHM6IuCmnOCmvuCmqOCngeCnn+CmvuCmsOCngF/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgppzgpr7gpqjgp4Ff4Kar4KeH4KasX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprBf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprJf4KaG4KaXX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppdf4Kas4KeB4KanX+CmrOCng+CmueCmg1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIOCmuOCmruCnnyIsTFRTOiJBIGg6bW06c3Mg4Ka44Kau4KefIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpobgppxdIExUIixuZXh0RGF5OiJb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KaX4Kak4KaV4Ka+4KayXSBMVCIsbGFzdFdlZWs6IlvgppfgpqRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgpqrgprDgp4ciLHBhc3Q6IiVzIOCmhuCml+CnhyIsczoi4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoSIsc3M6IiVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoSIsbToi4KaP4KaVIOCmruCmv+CmqOCmv+CmnyIsbW06IiVkIOCmruCmv+CmqOCmv+CmnyIsaDoi4KaP4KaVIOCmmOCmqOCnjeCmn+CmviIsaGg6IiVkIOCmmOCmqOCnjeCmn+CmviIsZDoi4KaP4KaVIOCmpuCmv+CmqCIsZGQ6IiVkIOCmpuCmv+CmqCIsTToi4KaP4KaVIOCmruCmvuCmuCIsTU06IiVkIOCmruCmvuCmuCIseToi4KaP4KaVIOCmrOCmm+CmsCIseXk6IiVkIOCmrOCmm+CmsCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CmsOCmvuCmpHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprDgpr7gpqQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLgprDgpr7gpqQiPT09dCYmZT49NHx8IuCmpuCngeCmquCngeCmsCI9PT10JiZlPDV8fCLgpqzgpr/gppXgpr7gprIiPT09dD9lKzEyOmV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw0PyLgprDgpr7gpqQiOmU8MTA/IuCmuOCmleCmvuCmsiI6ZTwxNz8i4Kam4KeB4Kaq4KeB4KawIjplPDIwPyLgpqzgpr/gppXgpr7gprIiOiLgprDgpr7gpqQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ezE6IuC8oSIsMjoi4LyiIiwzOiLgvKMiLDQ6IuC8pCIsNToi4LylIiw2OiLgvKYiLDc6IuC8pyIsODoi4LyoIiw5OiLgvKkiLDA6IuC8oCJ9LG49eyLgvKEiOiIxIiwi4LyiIjoiMiIsIuC8oyI6IjMiLCLgvKQiOiI0Iiwi4LylIjoiNSIsIuC8piI6IjYiLCLgvKciOiI3Iiwi4LyoIjoiOCIsIuC8qSI6IjkiLCLgvKAiOiIwIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJibyIse21vbnRoczoi4L2f4L6z4LyL4L2W4LyL4L2R4L2E4LyL4L2U4L28X+C9n+C+s+C8i+C9luC8i+C9guC9ieC9suC9puC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvYLgvabgvbTgvZjgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2e4L2y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9o+C+lOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvrLgvbTgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2R4L204L2T4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9ouC+kuC+seC9keC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvYLgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9heC9suC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYngvbLgvabgvIvgvZQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuC9n+C+s+C8i+C9luC8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvZbgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLgvYngvbLgvIvgvZjgvItf4L2f4L6z4LyL4L2W4LyLX+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvaPgvrfgvYLgvIvgvZTgvItf4L2V4L204L2i4LyL4L2W4L20X+C9lOC8i+C9puC9hOC9puC8i1/gvabgvqTgvbrgvZPgvIvgvZTgvIsiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4L2R4L2y4LyL4L2i4L2y4L2EXSBMVCIsbmV4dERheToiW+C9puC9hOC8i+C9ieC9suC9k10gTFQiLG5leHRXZWVrOiJb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2i4L6X4L264L2m4LyL4L2YXSwgTFQiLGxhc3REYXk6IlvgvYHgvIvgvabgvYRdIExUIixsYXN0V2VlazoiW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOC9o+C8iyIscGFzdDoiJXMg4L2m4L6U4L2T4LyL4L2jIixzOiLgvaPgvZjgvIvgvabgvYQiLHNzOiIlZCDgvabgvpDgvaLgvIvgvYbgvI0iLG06IuC9puC+kOC9ouC8i+C9mOC8i+C9guC9heC9suC9giIsbW06IiVkIOC9puC+kOC9ouC8i+C9mCIsaDoi4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CIixoaDoiJWQg4L2G4L204LyL4L2a4L284L2RIixkOiLgvYngvbLgvZPgvIvgvYLgvYXgvbLgvYIiLGRkOiIlZCDgvYngvbLgvZPgvIsiLE06IuC9n+C+s+C8i+C9luC8i+C9guC9heC9suC9giIsTU06IiVkIOC9n+C+s+C8i+C9liIseToi4L2j4L284LyL4L2C4L2F4L2y4L2CIix5eToiJWQg4L2j4L28In0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW+C8oeC8ouC8o+C8pOC8peC8puC8p+C8qOC8qeC8oF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sbWVyaWRpZW1QYXJzZTov4L2Y4L2a4L2T4LyL4L2Y4L28fOC9nuC9vOC9guC9puC8i+C9gOC9pnzgvYngvbLgvZPgvIvgvYLgvbTgvYR84L2R4L2C4L284L2E4LyL4L2R4L2CfOC9mOC9muC9k+C8i+C9mOC9vC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuC9mOC9muC9k+C8i+C9mOC9vCI9PT10JiZlPj00fHwi4L2J4L2y4L2T4LyL4L2C4L204L2EIj09PXQmJmU8NXx8IuC9keC9guC9vOC9hOC8i+C9keC9giI9PT10P2UrMTI6ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDQ/IuC9mOC9muC9k+C8i+C9mOC9vCI6ZTwxMD8i4L2e4L284L2C4L2m4LyL4L2A4L2mIjplPDE3PyLgvYngvbLgvZPgvIvgvYLgvbTgvYQiOmU8MjA/IuC9keC9guC9vOC9hOC8i+C9keC9giI6IuC9mOC9muC9k+C8i+C9mOC9vCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuKXtyZXR1cm4gZSsiICIrbyh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bbl0sZSl9ZnVuY3Rpb24gbihlKXtzd2l0Y2gocihlKSl7Y2FzZSAxOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgOTpyZXR1cm4gZSsiIGJsb2F6IjtkZWZhdWx0OnJldHVybiBlKyIgdmxvYXoifX1mdW5jdGlvbiByKGUpe3JldHVybiBlPjk/cihlJTEwKTplfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gMj09PXQ/cyhlKTplfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09dFtlLmNoYXJBdCgwKV0/ZTp0W2UuY2hhckF0KDApXStlLnN1YnN0cmluZygxKX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQydod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiR2VuX0MnaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjJ2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaFtlXW1tIEEiLExUUzoiaFtlXW1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgaFtlXW1tIEEiLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgaFtlXW1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmMnaG9hemggZGFdIExUIixuZXh0V2VlazoiZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjJ2ggZGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzICd6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm/DuSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOnQsaDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOnQsTToidXIgbWl6IixNTTp0LHk6InVyIGJsb2F6Iix5eTpufSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGHDsXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKygxPT09ZT8iYcOxIjoidmV0Iil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuKXt2YXIgcj1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzcyI6cmV0dXJuIHIrPTE9PT1lPyJzZWt1bmRhIjoyPT09ZXx8Mz09PWV8fDQ9PT1lPyJzZWt1bmRlIjoic2VrdW5kaSI7Y2FzZSJtIjpyZXR1cm4gdD8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gcis9MT09PWU/Im1pbnV0YSI6Mj09PWV8fDM9PT1lfHw0PT09ZT8ibWludXRlIjoibWludXRhIjtjYXNlImgiOnJldHVybiB0PyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIHIrPTE9PT1lPyJzYXQiOjI9PT1lfHwzPT09ZXx8ND09PWU/InNhdGEiOiJzYXRpIjtjYXNlImRkIjpyZXR1cm4gcis9MT09PWU/ImRhbiI6ImRhbmEiO2Nhc2UiTU0iOnJldHVybiByKz0xPT09ZT8ibWplc2VjIjoyPT09ZXx8Mz09PWV8fDQ9PT1lPyJtamVzZWNhIjoibWplc2VjaSI7Y2FzZSJ5eSI6cmV0dXJuIHIrPTE9PT1lPyJnb2RpbmEiOjI9PT1lfHwzPT09ZXx8ND09PWU/ImdvZGluZSI6ImdvZGluYSJ9fXJldHVybiBlLmRlZmluZUxvY2FsZSgiYnMiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX8SNZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanXEjWVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJbcHJvxaFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvxaFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOiJkYW4iLGRkOnQsTToibWplc2VjIixNTTp0LHk6ImdvZGludSIseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NhLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyw6dfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2dWkgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbZGVtw6AgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdcOtICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNlZ29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQiLG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVkIGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHzDqHxhKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3ZhciBuPTE9PT1lPyJyIjoyPT09ZT8ibiI6Mz09PWU/InIiOjQ9PT1lPyJ0Ijoiw6giO3JldHVybiJ3IiE9PXQmJiJXIiE9PXR8fChuPSJhIiksZStufSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZT4xJiZlPDUmJjEhPX5+KGUvMTApfWZ1bmN0aW9uIG4oZSxuLHIsbyl7dmFyIHM9ZSsiICI7c3dpdGNoKHIpe2Nhc2UicyI6cmV0dXJuIG58fG8/InDDoXIgc2VrdW5kIjoicMOhciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBufHxvP3MrKHQoZSk/InNla3VuZHkiOiJzZWt1bmQiKTpzKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIG4/Im1pbnV0YSI6bz8ibWludXR1IjoibWludXRvdSI7Y2FzZSJtbSI6cmV0dXJuIG58fG8/cysodChlKT8ibWludXR5IjoibWludXQiKTpzKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gbj8iaG9kaW5hIjpvPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJob2RpbnkiOiJob2RpbiIpOnMrImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBufHxvPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJkbnkiOiJkbsOtIik6cysiZG55IjtjYXNlIk0iOnJldHVybiBufHxvPyJtxJtzw61jIjoibcSbc8OtY2VtIjtjYXNlIk1NIjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJtxJtzw61jZSI6Im3Em3PDrWPFryIpOnMrIm3Em3PDrWNpIjtjYXNlInkiOnJldHVybiBufHxvPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIG58fG8/cysodChlKT8icm9reSI6ImxldCIpOnMrImxldHkifX12YXIgcj0ibGVkZW5fw7pub3JfYsWZZXplbl9kdWJlbl9rdsSbdGVuX8SNZXJ2ZW5fxI1lcnZlbmVjX3NycGVuX3rDocWZw61fxZnDrWplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxvPSJsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3BybyIuc3BsaXQoIl8iKTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOnIsbW9udGhzU2hvcnQ6byxtb250aHNQYXJzZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W107Zm9yKG49MDtuPDEyO24rKylyW25dPW5ldyBSZWdFeHAoIl4iK2Vbbl0rIiR8XiIrdFtuXSsiJCIsImkiKTtyZXR1cm4gcn0ocixvKSxzaG9ydE1vbnRoc1BhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKHQ9MDt0PDEyO3QrKyluW3RdPW5ldyBSZWdFeHAoIl4iK2VbdF0rIiQiLCJpIik7cmV0dXJuIG59KG8pLGxvbmdNb250aHNQYXJzZTpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0PTA7dDwxMjt0Kyspblt0XT1uZXcgUmVnRXhwKCJeIitlW3RdKyIkIiwiaSIpO3JldHVybiBufShyKSx3ZWVrZGF5czoibmVkxJtsZV9wb25kxJtsw61fw7p0ZXLDvV9zdMWZZWRhX8SNdHZydGVrX3DDoXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX8O6dF9zdF/EjXRfcMOhX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbesOtdHJhIHZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZMSbbGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3TFmWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJbdmUgxI10dnJ0ZWsgdl0gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcMOhdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdsSNZXJhIHZdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bG91IG5lZMSbbGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bMOpXSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbbWludWxvdSBzdMWZZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWzDvV0gZGRkZCBbdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsb3Ugc29ib3R1IHZdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwxZllZCAlcyIsczpuLHNzOm4sbTpuLG1tOm4saDpuLGhoOm4sZDpuLGRkOm4sTTpuLE1NOm4seTpuLHl5Om59LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJjdiIse21vbnRoczoi0LrTkdGA0LvQsNGHX9C90LDRgNOR0YFf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GA0YLQvNC1X9GD0YLTkV/Sq9GD0YDQu9CwX9Cw0LLTkdC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGI0YLQsNCyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLQutOR0YBf0L3QsNGAX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgF/Rg9GC05Ff0qvRg9GAX9Cw0LLQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi0LLRi9GA0YHQsNGA0L3QuNC60YPQvV/RgtGD0L3RgtC40LrRg9C9X9GL0YLQu9Cw0YDQuNC60YPQvV/RjtC90LrRg9C9X9C605fSq9C90LXRgNC90LjQutGD0L1f0Y3RgNC90LXQutGD0L1f0YjTkdC80LDRgtC60YPQvSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLQstGL0YBf0YLRg9C9X9GL0YLQu1/RjtC9X9C605fSq1/RjdGA0L1f0YjTkdC8Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQstGAX9GC0L1f0YvRgl/RjtC9X9C60qtf0Y3RgF/RiNC8Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSIsTExMOiJZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0J/QsNGP0L1dIExUIFvRgdC10YXQtdGC0YDQtV0iLG5leHREYXk6IlvQq9GA0LDQvV0gTFQgW9GB0LXRhdC10YLRgNC1XSIsbGFzdERheToiW9OW0L3QtdGAXSBMVCBb0YHQtdGF0LXRgtGA0LVdIixuZXh0V2VlazoiW9Kq0LjRgtC10YFdIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XSIsbGFzdFdlZWs6IlvQmNGA0YLQvdOXXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKC/RgdC10YXQtdGCJC9pLmV4ZWMoZSk/ItGA0LXQvSI6L9Kr0YPQuyQvaS5leGVjKGUpPyLRgtCw0L0iOiLRgNCw0L0iKX0scGFzdDoiJXMg0LrQsNGP0LvQu9CwIixzOiLQv9OX0YAt0LjQuiDSq9C10LrQutGD0L3RgiIsc3M6IiVkINKr0LXQutC60YPQvdGCIixtOiLQv9OX0YAg0LzQuNC90YPRgiIsbW06IiVkINC80LjQvdGD0YIiLGg6ItC/05fRgCDRgdC10YXQtdGCIixoaDoiJWQg0YHQtdGF0LXRgiIsZDoi0L/Tl9GAINC60YPQvSIsZGQ6IiVkINC60YPQvSIsTToi0L/Tl9GAINGD0LnTkdGFIixNTToiJWQg0YPQudOR0YUiLHk6ItC/05fRgCDSq9GD0LsiLHl5OiIlZCDSq9GD0LsifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LdC805fRiC8sb3JkaW5hbDoiJWQt0LzTl9GIIix3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJjeSIse21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIMO0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lLG49IiIscj1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXTtyZXR1cm4gdD4yMD9uPTQwPT09dHx8NTA9PT10fHw2MD09PXR8fDgwPT09dHx8MTAwPT09dD8iZmVkIjoiYWluIjp0PjAmJihuPXJbdF0pLGUrbn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzw7huX21hbl90aXJfb25zX3Rvcl9mcmVfbMO4ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic8O4X21hX3RpX29uX3RvX2ZyX2zDuCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJww6UgZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ8OlciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImbDpSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG3DpW5lZCIsTU06IiVkIG3DpW5lZGVyIix5OiJldCDDpXIiLHl5OiIlZCDDpXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIG89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2UrIiBUYWdlIixlKyIgVGFnZW4iXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbZSsiIE1vbmF0ZSIsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2UrIiBKYWhyZSIsZSsiIEphaHJlbiJdfTtyZXR1cm4gdD9vW25dWzBdOm9bbl1bMV19cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSsOkbm5lcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp0LG1tOiIlZCBNaW51dGVuIixoOnQsaGg6IiVkIFN0dW5kZW4iLGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIG89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2UrIiBUYWdlIixlKyIgVGFnZW4iXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbZSsiIE1vbmF0ZSIsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2UrIiBKYWhyZSIsZSsiIEphaHJlbiJdfTtyZXR1cm4gdD9vW25dWzBdOm9bbl1bMV19cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp0LG1tOiIlZCBNaW51dGVuIixoOnQsaGg6IiVkIFN0dW5kZW4iLGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIG89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2UrIiBUYWdlIixlKyIgVGFnZW4iXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbZSsiIE1vbmF0ZSIsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2UrIiBKYWhyZSIsZSsiIEphaHJlbiJdfTtyZXR1cm4gdD9vW25dWzBdOm9bbl1bMV19cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06dCxtbToiJWQgTWludXRlbiIsaDp0LGhoOiIlZCBTdHVuZGVuIixkOnQsZGQ6dCxNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bIt6W3qzegt6q3ofept6D3qkiLCLeit6s3oTesN6D3qreh96m3oPeqSIsIt6J3qfeg96o3pfeqiIsIt6H3q3eld6w3oPeqd6N3qoiLCLeid6tIiwi3pbeq96C3rAiLCLelt6q3o3ept6H3qgiLCLeh96v3o7ept6Q3rDek96qIiwi3pDerN6V3rDek96s3onesN6E3qbeg96qIiwi3ofert6G3rDek96v3oTept6D3qoiLCLegt6u3ojerN6J3rDehN6m3oPeqiIsIt6R3qjekN6s3onesN6E3qbeg96qIl0sbj1bIt6H3qfei96o3ofesN6M3qYiLCLegN6v3onepiIsIt6H3qbegt6w3o7ep96D3qYiLCLehN6q3ovepiIsIt6E3qreg96n3pDesN6K3qbejN6oIiwi3oDeqt6G3qreg96qIiwi3oDert6C3qjegN6o3oPeqiJdO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6dCxtb250aHNTaG9ydDp0LHdlZWtkYXlzOm4sd2Vla2RheXNTaG9ydDpuLHdlZWtkYXlzTWluOiLeh96n3oveqF/egN6v3onepl/eh96m3oLesF/ehN6q3ovepl/ehN6q3oPep1/egN6q3obeql/egN6u3oLeqCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov3onehnzeid6KLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLeid6KIj09PWV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8i3onehiI6It6J3ooifSxjYWxlbmRhcjp7c2FtZURheToiW96J3qjeh96m3oveql0gTFQiLG5leHREYXk6Ilveid6n3ovept6J3qddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW96H3qjeh96w3pTerF0gTFQiLGxhc3RXZWVrOiJb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi3ozerN6D3q3ejt6m3ofeqCAlcyIscGFzdDoi3obeqt6D3qjegt6wICVzIixzOiLekN6o3obeqt6C3rDejN6q3obert6F3qzeh96wIixzczoiZCUg3pDeqN6G3qregt6w3ozeqiIsbToi3oneqN6C3qjek96s3ofesCIsbW06It6J3qjegt6o3pPeqiAlZCIsaDoi3o7ept6R3qjeh96o3oPerN6H3rAiLGhoOiLejt6m3pHeqN6H3qjeg96qICVkIixkOiLei96q3ojept6A3qzeh96wIixkZDoi3oveqt6I3qbekN6wICVkIixNOiLeid6m3oDerN6H3rAiLE1NOiLeid6m3pDesCAlZCIseToi3ofept6A3qbeg96s3ofesCIseXk6It6H3qbegN6m3oPeqiAlZCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXJldHVybiBlLmRlZmluZUxvY2FsZSgiZWwiLHttb250aHNOb21pbmF0aXZlRWw6Is6ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4IiLnNwbGl0KCJfIiksbW9udGhzR2VuaXRpdmVFbDoizpnOsc69zr/Phc6xz4HOr86/z4VfzqbOtc6yz4HOv8+FzrHPgc6vzr/PhV/OnM6xz4HPhM6vzr/PhV/Okc+Az4HOuc67zq/Ov8+FX86czrHOkM6/z4VfzpnOv8+Fzr3Or86/z4VfzpnOv8+FzrvOr86/z4VfzpHPhc6zzr/Pjc+Dz4TOv8+FX86jzrXPgM+EzrXOvM6yz4HOr86/z4Vfzp/Ous+Ez4nOss+Bzq/Ov8+FX86dzr/Otc68zrLPgc6vzr/PhV/OlM61zrrOtc68zrLPgc6vzr/PhSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIHQmJi9ELy50ZXN0KHQuc3Vic3RyaW5nKDAsdC5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW2UubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW2UubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9ydDoizpnOsc69X86mzrXOsl/OnM6xz4FfzpHPgM+BX86czrHPil/Omc6/z4XOvV/Omc6/z4XOu1/Okc+FzrNfzqPOtc+AX86fzrrPhF/Onc6/zrVfzpTOtc66Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoizprPhc+BX86UzrXPhV/OpM+BzrlfzqTOtc+EX86gzrXOvF/OoM6xz4FfzqPOsc6yIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLOms+FX86UzrVfzqTPgV/OpM61X86gzrVfzqDOsV/Oo86xIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT4xMT9uPyLOvM68IjoizpzOnCI6bj8iz4DOvCI6Is6gzpwifSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLOvCI9PT0oZSsiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW86gzpxdXC4/zpw/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntzYW1lRGF5OiJbzqPOrs68zrXPgc6xIHt9XSBMVCIsbmV4dERheToiW86Rz43Pgc65zr8ge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbzqfOuM61z4Ige31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDY6cmV0dXJuIlvPhM6/IM+Az4HOv863zrPOv8+NzrzOtc69zr9dIGRkZGQgW3t9XSBMVCI7ZGVmYXVsdDpyZXR1cm4iW8+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63XSBkZGRkIFt7fV0gTFQifX0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXMuX2NhbGVuZGFyRWxbZV0sbz1uJiZuLmhvdXJzKCk7cmV0dXJuIHQocikmJihyPXIuYXBwbHkobikpLHIucmVwbGFjZSgie30iLG8lMTI9PTE/Is+Dz4TOtyI6Is+Dz4TOuc+CIil9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLPg861ICVzIixwYXN0OiIlcyDPgM+BzrnOvSIsczoizrvOr86zzrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIixzczoiJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIixtOiLOrc69zrEgzrvOtc+Az4TPjCIsbW06IiVkIM67zrXPgM+EzqwiLGg6Is68zq/OsSDPjs+BzrEiLGhoOiIlZCDPjs+BzrXPgiIsZDoizrzOr86xIM68zq3Pgc6xIixkZDoiJWQgzrzOrc+BzrXPgiIsTToizq3Ovc6xz4IgzrzOrs69zrHPgiIsTU06IiVkIM68zq7Ovc61z4IiLHk6Is6tzr3Osc+CIM+Hz4HPjM69zr/PgiIseXk6IiVkIM+Hz4HPjM69zrnOsSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Oty8sb3JkaW5hbDoiJWTOtyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMDtyZXR1cm4gZSsoMT09fn4oZSUxMDAvMTApPyJ0aCI6MT09PXQ/InN0IjoyPT09dD8ibmQiOjM9PT10PyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0tREQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuIGUrKDE9PX5+KGUlMTAwLzEwKT8idGgiOjE9PT10PyJzdCI6Mj09PXQ/Im5kIjozPT09dD8icmQiOiJ0aCIpfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMDtyZXR1cm4gZSsoMT09fn4oZSUxMDAvMTApPyJ0aCI6MT09PXQ/InN0IjoyPT09dD8ibmQiOjM9PT10PyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWllLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwO3JldHVybiBlKygxPT1+fihlJTEwMC8xMCk/InRoIjoxPT09dD8ic3QiOjI9PT10PyJuZCI6Mz09PXQ/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuIGUrKDE9PX5+KGUlMTAwLzEwKT8idGgiOjE9PT10PyJzdCI6Mj09PXQ/Im5kIjozPT09dD8icmQiOiJ0aCIpfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuIGUrKDE9PX5+KGUlMTAwLzEwKT8idGgiOjE9PT10PyJzdCI6Mj09PXQ/Im5kIjozPT09dD8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hxa1ndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2HFrWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkaW1hbsSJb19sdW5kb19tYXJkb19tZXJrcmVkb1/EtWHFrWRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya1/EtWHFrV92ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV/EtWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkRbLWEgZGVdIE1NTU0sIFlZWVkiLExMTDoiRFstYSBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgW2xhXSBEWy1hIGRlXSBNTU1NLCBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovW2FwXVwudFwubS9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuInAiPT09ZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPjExP24/InAudC5tLiI6IlAuVC5NLiI6bj8iYS50Lm0uIjoiQS5ULk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYcWtIGplXSBMVCIsbmV4dERheToiW01vcmdhxa0gamVdIExUIixuZXh0V2VlazoiZGRkZCBbamVdIExUIixsYXN0RGF5OiJbSGllcmHFrSBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YV0gZGRkZCBbamVdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0ICVzIixwYXN0OiJhbnRhxa0gJXMiLHM6InNla3VuZG9qIixzczoiJWQgc2VrdW5kb2oiLG06Im1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6Imhvcm8iLGhoOiIlZCBob3JvaiIsZDoidGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJtb25hdG8iLE1NOiIlZCBtb25hdG9qIix5OiJqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG49ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLHI9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxvPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJlcy1kbyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihlLHIpe3JldHVybiBlPy8tTU1NLS8udGVzdChyKT9uW2UubW9udGgoKV06dFtlLm1vbnRoKCldOnR9LG1vbnRoc1JlZ2V4Om8sbW9udGhzU2hvcnRSZWdleDpvLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpyLGxvbmdNb250aHNQYXJzZTpyLHNob3J0TW9udGhzUGFyc2U6cix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc8OhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7FhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZMOtYSIsZGQ6IiVkIGTDrWFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYcOxbyIseXk6IiVkIGHDsW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG49ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZXMtdXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT8vLU1NTS0vLnRlc3Qocik/bltlLm1vbnRoKCldOnRbZS5tb250aCgpXTp0fSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zw6EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gW2RlXSBEIFtkZV0gWVlZWSIsTExMOiJNTU1NIFtkZV0gRCBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIFtkZV0gRCBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWHDsWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkw61hIixkZDoiJWQgZMOtYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhw7FvIix5eToiJWQgYcOxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzowLGRveTo2fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbj0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIikscj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLG89L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUscil7cmV0dXJuIGU/Ly1NTU0tLy50ZXN0KHIpP25bZS5tb250aCgpXTp0W2UubW9udGgoKV06dH0sbW9udGhzUmVnZXg6byxtb250aHNTaG9ydFJlZ2V4Om8sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOnIsbG9uZ01vbnRoc1BhcnNlOnIsc2hvcnRNb250aHNQYXJzZTpyLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zw6EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7FhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZMOtYSIsZGQ6IiVkIGTDrWFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYcOxbyIseXk6IiVkIGHDsW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgbz17czpbIm3DtW5lIHNla3VuZGkiLCJtw7VuaSBzZWt1bmQiLCJwYWFyIHNla3VuZGl0Il0sc3M6W2UrInNla3VuZGkiLGUrInNla3VuZGl0Il0sbTpbIsO8aGUgbWludXRpIiwiw7xrcyBtaW51dCJdLG1tOltlKyIgbWludXRpIixlKyIgbWludXRpdCJdLGg6WyLDvGhlIHR1bm5pIiwidHVuZCBhZWdhIiwiw7xrcyB0dW5kIl0saGg6W2UrIiB0dW5uaSIsZSsiIHR1bmRpIl0sZDpbIsO8aGUgcMOkZXZhIiwiw7xrcyBww6RldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCLDvGtzIGt1dSJdLE1NOltlKyIga3V1IixlKyIga3V1ZCJdLHk6WyLDvGhlIGFhc3RhIiwiYWFzdGEiLCLDvGtzIGFhc3RhIl0seXk6W2UrIiBhYXN0YSIsZSsiIGFhc3RhdCJdfTtyZXR1cm4gdD9vW25dWzJdP29bbl1bMl06b1tuXVsxXTpyP29bbl1bMF06b1tuXVsxXX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoImV0Iix7bW9udGhzOiJqYWFudWFyX3ZlZWJydWFyX23DpHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX23DpHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoicMO8aGFww6Rldl9lc21hc3DDpGV2X3RlaXNpcMOkZXZfa29sbWFww6Rldl9uZWxqYXDDpGV2X3JlZWRlX2xhdXDDpGV2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUw6RuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdlZWs6IltKw6RyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcMOkcmFzdCIscGFzdDoiJXMgdGFnYXNpIixzOnQsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOnQsZGQ6IiVkIHDDpGV2YSIsTTp0LE1NOnQseTp0LHl5OnR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoidXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJpZ19hbF9hcl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi27EiLDI6ItuyIiwzOiLbsyIsNDoi27QiLDU6Itu1Iiw2OiLbtiIsNzoi27ciLDg6Itu4Iiw5OiLbuSIsMDoi27AifSxuPXsi27EiOiIxIiwi27IiOiIyIiwi27MiOiIzIiwi27QiOiI0Iiwi27UiOiI1Iiwi27YiOiI2Iiwi27ciOiI3Iiwi27giOiI4Iiwi27kiOiI5Iiwi27AiOiIwIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoi2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi24zaqeKAjNi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mH4oCM2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KzigIzYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZhyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLbjNqp4oCM2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YfigIzYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrOKAjNi02YbYqNmHX9is2YXYudmHX9i02YbYqNmHIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLbjF/Yr1/Ys1/ahl/Zvl/YrF/YtCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9mC2KjZhCDYp9iyINi42YfYsXzYqNi52K8g2KfYsiDYuNmH2LEvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL9io2LnYryDYp9iyINi42YfYsS8udGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyLZgtio2YQg2KfYsiDYuNmH2LEiOiLYqNi52K8g2KfYsiDYuNmH2LEifSxjYWxlbmRhcjp7c2FtZURheToiW9in2YXYsdmI2LIg2LPYp9i52KpdIExUIixuZXh0RGF5OiJb2YHYsdiv2Kcg2LPYp9i52KpdIExUIixuZXh0V2VlazoiZGRkZCBb2LPYp9i52KpdIExUIixsYXN0RGF5OiJb2K/bjNix2YjYsiDYs9in2LnYql0gTFQiLGxhc3RXZWVrOiJkZGRkIFvZvtuM2LRdIFvYs9in2LnYql0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Itiv2LEgJXMiLHBhc3Q6IiVzINm+24zYtCIsczoi2obZhtivINir2KfZhtuM2YciLHNzOiLYq9in2YbbjNmHIGQlIixtOiLbjNqpINiv2YLbjNmC2YciLG1tOiIlZCDYr9mC24zZgtmHIixoOiLbjNqpINiz2KfYudiqIixoaDoiJWQg2LPYp9i52KoiLGQ6ItuM2qkg2LHZiNiyIixkZDoiJWQg2LHZiNiyIixNOiLbjNqpINmF2KfZhyIsTU06IiVkINmF2KfZhyIseToi24zaqSDYs9in2YQiLHl5OiIlZCDYs9in2YQifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b27At27ldL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KS5yZXBsYWNlKC/YjC9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLnJlcGxhY2UoLywvZywi2IwiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfdmFLyxvcmRpbmFsOiIlZNmFIix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LHIsbyl7dmFyIHM9IiI7c3dpdGNoKHIpe2Nhc2UicyI6cmV0dXJuIG8/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjpyZXR1cm4gbz8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7Y2FzZSJtIjpyZXR1cm4gbz8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6cz1vPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gbz8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOnM9bz8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBvPyJww6RpdsOkbiI6InDDpGl2w6QiO2Nhc2UiZGQiOnM9bz8icMOkaXbDpG4iOiJww6RpdsOkw6QiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIG8/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjpzPW8/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gbz8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOnM9bz8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gcz1uKGUsbykrIiAiK3N9ZnVuY3Rpb24gbihlLHQpe3JldHVybiBlPDEwP3Q/b1tlXTpyW2VdOmV9dmFyIHI9Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8OkbiIuc3BsaXQoIiAiKSxvPVsibm9sbGEiLCJ5aGRlbiIsImthaGRlbiIsImtvbG1lbiIsIm5lbGrDpG4iLCJ2aWlkZW4iLCJrdXVkZW4iLHJbN10scls4XSxyWzldXTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImZpIix7bW9udGhzOiJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2Vzw6RfaGVpbsOkX2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0w6Ruw6TDpG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHDDpMOkc3TDpCIscGFzdDoiJXMgc2l0dGVuIixzOnQsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOnQsZGQ6dCxNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImZvIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X23DoV90w71fbWlfaMOzX2ZyX2xlIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvDjSBkYWcga2wuXSBMVCIsbmV4dERheToiW8ONIG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW8ONIGdqw6FyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc8Otw7BzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidW0gJXMiLHBhc3Q6IiVzIHPDrcOwYW5pIixzOiJmw6Egc2VrdW5kIixzczoiJWQgc2VrdW5kaXIiLG06ImVpbiBtaW51dHQiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHTDrW1pIixoaDoiJWQgdMOtbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG3DoW5hw7BpIixNTToiJWQgbcOhbmHDsGlyIix5OiJlaXR0IMOhciIseXk6IiVkIMOhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZOKAmWh1aSDDoF0gTFQiLG5leHREYXk6IltEZW1haW4gw6BdIExUIixuZXh0V2VlazoiZGRkZCBbw6BdIExUIixsYXN0RGF5OiJbSGllciDDoF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIMOgXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZSsoMT09PWU/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZSsoMT09PWU/InJlIjoiZSIpfX19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZOKAmWh1aSDDoF0gTFQiLG5leHREYXk6IltEZW1haW4gw6BdIExUIixuZXh0V2VlazoiZGRkZCBbw6BdIExUIixsYXN0RGF5OiJbSGllciDDoF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIMOgXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZSsoMT09PWU/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZSsoMT09PWU/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmTigJlodWkgw6BdIExUIixuZXh0RGF5OiJbRGVtYWluIMOgXSBMVCIsbmV4dFdlZWs6ImRkZGQgW8OgXSBMVCIsbGFzdERheToiW0hpZXIgw6BdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciDDoF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfCkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJEIjpyZXR1cm4gZSsoMT09PWU/ImVyIjoiIik7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGUrKDE9PT1lPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrKDE9PT1lPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxuPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUscil7cmV0dXJuIGU/Ly1NTU0tLy50ZXN0KHIpP25bZS5tb250aCgpXTp0W2UubW9udGgoKV06dH0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW8O0ZnLDu25lXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW7DunQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKDE9PT1lfHw4PT09ZXx8ZT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bIkFtIEZhb2lsbGVhY2giLCJBbiBHZWFycmFuIiwiQW0gTcOgcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ8OoaXRlYW4iLCJBbiB0LcOSZ21oaW9zIiwiQW4gdC1JdWNoYXIiLCJBbiBMw7luYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBEw6BtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIETDuWJobGFjaGQiXSxuPVsiRmFvaSIsIkdlYXIiLCJNw6BydCIsIkdpYmwiLCJDw6hpdCIsIsOSZ21oIiwiSXVjaCIsIkzDuW4iLCJTdWx0IiwiRMOgbWgiLCJTYW1oIiwiRMO5YmgiXSxyPVsiRGlkw7JtaG5haWNoIiwiRGlsdWFpbiIsIkRpbcOgaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGloYW9pbmUiLCJEaXNhdGhhaXJuZSJdLG89WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgiLCJEaXMiXSxzPVsiRMOyIiwiTHUiLCJNw6AiLCJDaSIsIkFyIiwiSGEiLCJTYSJdO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZ2QiLHttb250aHM6dCxtb250aHNTaG9ydDpuLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6cix3ZWVrZGF5c1Nob3J0Om8sd2Vla2RheXNNaW46cyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBbi1kaXVnaCBhaWddIExUIixuZXh0RGF5OiJbQS1tw6BpcmVhY2ggYWlnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQiLGxhc3REYXk6IltBbi1kw6ggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibcOsb3MiLE1NOiIlZCBtw6xvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJsaWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZSsoMT09PWU/ImQiOmUlMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dcOxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1w7EuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbcOpcmNvcmVzX3hvdmVzX3ZlbnJlc19zw6FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX23DqXIuX3hvdi5fdmVuLl9zw6FiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisoMSE9PXRoaXMuaG91cnMoKT8iw6FzIjoiw6EiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7HDoSAiKygxIT09dGhpcy5ob3VycygpPyLDoXMiOiLDoSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisoMSE9PXRoaXMuaG91cnMoKT8iw6FzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyLDoSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtwYXNhZG8gIisoMSE9PXRoaXMuaG91cnMoKT8iw6FzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWUuaW5kZXhPZigidW4iKT8ibiIrZToiZW4gIitlfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZMOtYSIsZGQ6IiVkIGTDrWFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIG89e3M6WyJ0aG9kZGUgc2Vjb25kYW5pbSIsInRob2RkZSBzZWNvbmQiXSxzczpbZSsiIHNlY29uZGFuaW0iLGUrIiBzZWNvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0ZSJdLG1tOltlKyIgbWludGFuaW0iLGUrIiBtaW50YW0iXSxoOlsiZWthIGhvcmFuIiwiZWsgaG9yIl0saGg6W2UrIiBob3JhbmltIixlKyIgaG9yYW0iXSxkOlsiZWthIGRpc2FuIiwiZWsgZGlzIl0sZGQ6W2UrIiBkaXNhbmltIixlKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltlKyIgbWhvaW5lYW5pbSIsZSsiIG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbZSsiIHZvcnNhbmltIixlKyIgdm9yc2FtIl19O3JldHVybiB0P29bbl1bMF06b1tuXVsxXX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoImdvbS1sYXRuIix7bW9udGhzOiJKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkdmFyX0JyZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWlfU21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1NTVthY2hlYV0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltJZXRhIHRvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXRsb10gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIGFkaW0iLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkQiOnJldHVybiBlKyJlciI7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlfX0sd2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksInJhdGkiPT09dD9lPDQ/ZTplKzEyOiJzb2thbGxpIj09PXQ/ZToiZG9ucGFyYW0iPT09dD9lPjEyP2U6ZSsxMjoic2FuamUiPT09dD9lKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDQ/InJhdGkiOmU8MTI/InNva2FsbGkiOmU8MTY/ImRvbnBhcmFtIjplPDIwPyJzYW5qZSI6InJhdGkifX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi4KunIiwyOiLgq6giLDM6IuCrqSIsNDoi4KuqIiw1OiLgq6siLDY6IuCrrCIsNzoi4KutIiw4OiLgq64iLDk6IuCrryIsMDoi4KumIn0sbj17IuCrpyI6IjEiLCLgq6giOiIyIiwi4KupIjoiMyIsIuCrqiI6IjQiLCLgq6siOiI1Iiwi4KusIjoiNiIsIuCrrSI6IjciLCLgq64iOiI4Iiwi4KuvIjoiOSIsIuCrpiI6IjAifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiLgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi4Kqw4Kq14Kq/4Kq14Kq+4KqwX+CquOCri+CqruCqteCqvuCqsF/gqq7gqoLgqpfgqrPgqrXgqr7gqrBf4Kqs4KuB4Kqn4KuN4Kq14Kq+4KqwX+Cql+CrgeCqsOCrgeCqteCqvuCqsF/gqrbgq4HgqpXgq43gqrDgqrXgqr7gqrBf4Kq24Kqo4Kq/4Kq14Kq+4KqwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCqsOCqteCqv1/gqrjgq4vgqq5f4Kqu4KqC4KqX4KqzX+CqrOCrgeCqp+CrjV/gqpfgq4HgqrDgq4Ff4Kq24KuB4KqV4KuN4KqwX+CqtuCqqOCqvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhyIsTFRTOiJBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4ciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgqobgqpxdIExUIixuZXh0RGF5OiJb4KqV4Kq+4Kqy4KuHXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCIsbGFzdFdlZWs6Ilvgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgqq7gqr4iLHBhc3Q6IiVzIOCqquCrh+CqueCqsuCqviIsczoi4KqF4Kqu4KuB4KqVIOCqquCqs+CriyIsc3M6IiVkIOCquOCrh+CqleCqguCqoSIsbToi4KqP4KqVIOCqruCqv+CqqOCqv+CqnyIsbW06IiVkIOCqruCqv+CqqOCqv+CqnyIsaDoi4KqP4KqVIOCqleCqsuCqvuCqlSIsaGg6IiVkIOCqleCqsuCqvuCqlSIsZDoi4KqP4KqVIOCqpuCqv+CqteCquCIsZGQ6IiVkIOCqpuCqv+CqteCquCIsTToi4KqP4KqVIOCqruCqueCqv+CqqOCriyIsTU06IiVkIOCqruCqueCqv+CqqOCriyIseToi4KqP4KqVIOCqteCqsOCrjeCqtyIseXk6IiVkIOCqteCqsOCrjeCqtyJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgq6fgq6jgq6ngq6rgq6vgq6zgq63gq67gq6/gq6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuCqsOCqvuCqpCI9PT10P2U8ND9lOmUrMTI6IuCquOCqteCqvuCqsCI9PT10P2U6IuCqrOCqquCri+CqsCI9PT10P2U+PTEwP2U6ZSsxMjoi4Kq44Kq+4KqC4KqcIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw0PyLgqrDgqr7gqqQiOmU8MTA/IuCquOCqteCqvuCqsCI6ZTwxNz8i4Kqs4Kqq4KuL4KqwIjplPDIwPyLgqrjgqr7gqoLgqpwiOiLgqrDgqr7gqqQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJoZSIse21vbnRoczoi15nXoNeV15DXqF/XpNeR16jXldeQ16hf157XqNelX9eQ16TXqNeZ15xf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXkteV16HXmF/Xodek15jXnteR16hf15DXlden15jXldeR16hf16DXldeR157XkdeoX9eT16bXnteR16giLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IteZ16DXldezX9ek15HXqNezX9ee16jXpV/XkNek16jXs1/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS17Nf16HXpNeY17Nf15DXlden17Nf16DXldeR17Nf15PXptee17MiLnNwbGl0KCJfIiksd2Vla2RheXM6Iteo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLXkF/XkV/Xkl/Xk1/XlF/XlV/XqSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBb15FdTU1NTSBZWVlZIixMTEw6IkQgW9eRXU1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBb15FdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvXlNeZ15XXnSDXkda+XUxUIixuZXh0RGF5OiJb157Xl9eoINeR1r5dTFQiLG5leHRXZWVrOiJkZGRkIFvXkdep16LXlF0gTFQiLGxhc3REYXk6IlvXkNeq157XldecINeR1r5dTFQiLGxhc3RXZWVrOiJb15HXmdeV151dIGRkZGQgW9eU15DXl9eo15XXnyDXkdep16LXlF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IteR16LXldeTICVzIixwYXN0OiLXnNek16DXmSAlcyIsczoi157Xodek16gg16nXoNeZ15XXqiIsc3M6IiVkINep16DXmdeV16oiLG06IteT16fXlCIsbW06IiVkINeT16fXldeqIixoOiLXqdei15QiLGhoOmZ1bmN0aW9uKGUpe3JldHVybiAyPT09ZT8i16nXoteq15nXmdedIjplKyIg16nXoteV16oifSxkOiLXmdeV150iLGRkOmZ1bmN0aW9uKGUpe3JldHVybiAyPT09ZT8i15nXldee15nXmdedIjplKyIg15nXnteZ150ifSxNOiLXl9eV15PXqSIsTU06ZnVuY3Rpb24oZSl7cmV0dXJuIDI9PT1lPyLXl9eV15PXqdeZ15nXnSI6ZSsiINeX15XXk9ep15nXnSJ9LHk6Itep16DXlCIseXk6ZnVuY3Rpb24oZSl7cmV0dXJuIDI9PT1lPyLXqdeg16rXmdeZ150iOmUlMTA9PTAmJjEwIT09ZT9lKyIg16nXoNeUIjplKyIg16nXoNeZ150ifX0sbWVyaWRpZW1QYXJzZTov15DXl9eUItemfNec16TXoNeUItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNec16TXoNeZINeU16bXlNeo15nXmdedfNec16TXoNeV16og15HXlden16h815HXkdeV16fXqHzXkdei16jXkS9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o15DXl9eUItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNeR16LXqNeRKSQvLnRlc3QoZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw1PyLXnNek16DXldeqINeR15XXp9eoIjplPDEwPyLXkdeR15XXp9eoIjplPDEyP24/J9ec16TXoNeUItemJzoi15zXpNeg15kg15TXpteU16jXmdeZ150iOmU8MTg/bj8n15DXl9eUItemJzoi15DXl9eo15kg15TXpteU16jXmdeZ150iOiLXkdei16jXkSJ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXsxOiLgpaciLDI6IuClqCIsMzoi4KWpIiw0OiLgpaoiLDU6IuClqyIsNjoi4KWsIiw3OiLgpa0iLDg6IuClriIsOToi4KWvIiwwOiLgpaYifSxuPXsi4KWnIjoiMSIsIuClqCI6IjIiLCLgpakiOiIzIiwi4KWqIjoiNCIsIuClqyI6IjUiLCLgpawiOiI2Iiwi4KWtIjoiNyIsIuClriI6IjgiLCLgpa8iOiI5Iiwi4KWmIjoiMCJ9O3JldHVybiBlLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6IuCknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiLgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+CksuCkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLJf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLgpLBf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSX4KWBX+CktuClgV/gpLYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0g4KSs4KSc4KWHIixMVFM6IkEgaDptbTpzcyDgpKzgpJzgpYciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcifSxjYWxlbmRhcjp7c2FtZURheToiW+CkhuCknF0gTFQiLG5leHREYXk6IlvgpJXgpLJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IlvgpJXgpLJdIExUIixsYXN0V2VlazoiW+CkquCkv+Ckm+CksuClh10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOCkruClh+CkgiIscGFzdDoiJXMg4KSq4KS54KSy4KWHIixzOiLgpJXgpYHgpJsg4KS54KWAIOCkleCljeCkt+CkoyIsc3M6IiVkIOCkuOClh+CkleCkguCkoSIsbToi4KSP4KSVIOCkruCkv+CkqOCknyIsbW06IiVkIOCkruCkv+CkqOCknyIsaDoi4KSP4KSVIOCkmOCkguCkn+CkviIsaGg6IiVkIOCkmOCkguCkn+ClhyIsZDoi4KSP4KSVIOCkpuCkv+CkqCIsZGQ6IiVkIOCkpuCkv+CkqCIsTToi4KSP4KSVIOCkruCkueClgOCkqOClhyIsTU06IiVkIOCkruCkueClgOCkqOClhyIseToi4KSP4KSVIOCkteCksOCljeCktyIseXk6IiVkIOCkteCksOCljeCktyJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CksOCkvuCkpHzgpLjgpYHgpKzgpLl84KSm4KWL4KSq4KS54KSwfOCktuCkvuCkri8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuCksOCkvuCkpCI9PT10P2U8ND9lOmUrMTI6IuCkuOClgeCkrOCkuSI9PT10P2U6IuCkpuCli+CkquCkueCksCI9PT10P2U+PTEwP2U6ZSsxMjoi4KS24KS+4KSuIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw0PyLgpLDgpL7gpKQiOmU8MTA/IuCkuOClgeCkrOCkuSI6ZTwxNz8i4KSm4KWL4KSq4KS54KSwIjplPDIwPyLgpLbgpL7gpK4iOiLgpLDgpL7gpKQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQsbil7dmFyIHI9ZSsiICI7c3dpdGNoKG4pe2Nhc2Uic3MiOnJldHVybiByKz0xPT09ZT8ic2VrdW5kYSI6Mj09PWV8fDM9PT1lfHw0PT09ZT8ic2VrdW5kZSI6InNla3VuZGkiO2Nhc2UibSI6cmV0dXJuIHQ/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIHIrPTE9PT1lPyJtaW51dGEiOjI9PT1lfHwzPT09ZXx8ND09PWU/Im1pbnV0ZSI6Im1pbnV0YSI7Y2FzZSJoIjpyZXR1cm4gdD8iamVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiByKz0xPT09ZT8ic2F0IjoyPT09ZXx8Mz09PWV8fDQ9PT1lPyJzYXRhIjoic2F0aSI7Y2FzZSJkZCI6cmV0dXJuIHIrPTE9PT1lPyJkYW4iOiJkYW5hIjtjYXNlIk1NIjpyZXR1cm4gcis9MT09PWU/Im1qZXNlYyI6Mj09PWV8fDM9PT1lfHw0PT09ZT8ibWplc2VjYSI6Im1qZXNlY2kiO2Nhc2UieXkiOnJldHVybiByKz0xPT09ZT8iZ29kaW5hIjoyPT09ZXx8Mz09PWV8fDQ9PT1lPyJnb2RpbmUiOiJnb2RpbmEifX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamXEjW5qYV92ZWxqYcSNZV9vxb51amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZcSNYW5qX3ZlbGphxI1hX2/FvnVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl/EjWVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1xI1lciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm4iW3Byb8WhbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb8WhbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOnQsbTp0LG1tOnQsaDp0LGhoOnQsZDoiZGFuIixkZDp0LE06Im1qZXNlYyIsTU06dCx5OiJnb2RpbnUiLHl5OnR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgbz1lO3N3aXRjaChuKXtjYXNlInMiOnJldHVybiByfHx0PyJuw6low6FueSBtw6Fzb2RwZXJjIjoibsOpaMOhbnkgbcOhc29kcGVyY2UiO2Nhc2Uic3MiOnJldHVybiBvKyhyfHx0KT8iIG3DoXNvZHBlcmMiOiIgbcOhc29kcGVyY2UiO2Nhc2UibSI6cmV0dXJuImVneSIrKHJ8fHQ/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIG8rKHJ8fHQ/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJoIjpyZXR1cm4iZWd5Iisocnx8dD8iIMOzcmEiOiIgw7Nyw6FqYSIpO2Nhc2UiaGgiOnJldHVybiBvKyhyfHx0PyIgw7NyYSI6IiDDs3LDoWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5Iisocnx8dD8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBvKyhyfHx0PyIgbmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4iZWd5Iisocnx8dD8iIGjDs25hcCI6IiBow7NuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBvKyhyfHx0PyIgaMOzbmFwIjoiIGjDs25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5Iisocnx8dD8iIMOpdiI6IiDDqXZlIik7Y2FzZSJ5eSI6cmV0dXJuIG8rKHJ8fHQ/IiDDqXYiOiIgw6l2ZSIpfXJldHVybiIifWZ1bmN0aW9uIG4oZSl7cmV0dXJuKGU/IiI6Ilttw7psdF0gIikrIlsiK3JbdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifXZhciByPSJ2YXPDoXJuYXAgaMOpdGbFkW4ga2VkZGVuIHN6ZXJkw6FuIGNzw7x0w7ZydMO2a8O2biBww6ludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO3JldHVybiBlLmRlZmluZUxvY2FsZSgiaHUiLHttb250aHM6ImphbnXDoXJfZmVicnXDoXJfbcOhcmNpdXNfw6FwcmlsaXNfbcOhanVzX2rDum5pdXNfasO6bGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tw6FyY1/DoXByX23DoWpfasO6bl9qw7psX2F1Z19zemVwdF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoidmFzw6FybmFwX2jDqXRmxZFfa2VkZF9zemVyZGFfY3PDvHTDtnJ0w7ZrX3DDqW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaMOpdF9rZWRkX3N6ZV9jc8O8dF9ww6luX3N6byIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoidl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuInUiPT09ZS5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyEwPT09bj8iZGUiOiJERSI6ITA9PT1uPyJkdSI6IkRVIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1rb3JdIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiBuLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBuLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG3Dumx2YSIscGFzdDoiJXMiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoi1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLVsNW41oLVttW+1aHWgF/Wg9Wl1b/WgNW+1aHWgF/VtNWh1oDVv1/VodW61oDVq9WsX9W01aHVtdWr1b1f1bDVuNaC1bbVq9W9X9Ww1bjWgtWs1avVvV/WhdWj1bjVvdW/1bjVvV/VvdWl1brVv9Wl1bTVotWl1oBf1bDVuNWv1b/VpdW01aLVpdaAX9W21bjVtdWl1bTVotWl1oBf1aTVpdWv1b/VpdW01aLVpdaAIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoi1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8iLnNwbGl0KCJfIiksd2Vla2RheXM6ItWv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItWv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkg1akuIixMTEw6IkQgTU1NTSBZWVlZINWpLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9Wh1bXVvdaF1oBdIExUIixuZXh0RGF5OiJb1b7VodWy1ahdIExUIixsYXN0RGF5OiJb1aXWgNWl1a9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFvWhdaA1agg1arVodW01ahdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDVsNWl1b/VuCIscGFzdDoiJXMg1aHVvNWh1bsiLHM6ItW01asg1oTVodW21asg1b7VodW11oDVr9W11aHVtiIsc3M6IiVkINW+1aHVtdaA1a/VtdWh1bYiLG06ItaA1bjVutWlIixtbToiJWQg1oDVuNW61aUiLGg6ItWq1aHVtCIsaGg6IiVkINWq1aHVtCIsZDoi1oXWgCIsZGQ6IiVkINaF1oAiLE06ItWh1bTVq9W9IixNTToiJWQg1aHVtNWr1b0iLHk6ItW/1aHWgNWrIix5eToiJWQg1b/VodaA1asifSxtZXJpZGllbVBhcnNlOi/Vo9Wr1bfVpdaA1b7VoXzVodW81aHVvtW41b/VvtWhfNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o1oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVtikkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlKXtyZXR1cm4gZTw0PyLVo9Wr1bfVpdaA1b7VoSI6ZTwxMj8i1aHVvNWh1b7VuNW/1b7VoSI6ZTwxNz8i1oHVpdaA1aXVr9W+1aEiOiLVpdaA1aXVr9W41bXVodW2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LSjVq9W2fNaA1aQpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PWU/ZSsiLdWr1bYiOmUrIi3WgNWkIjtkZWZhdWx0OnJldHVybiBlfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCJwYWdpIj09PXQ/ZToic2lhbmciPT09dD9lPj0xMT9lOmUrMTI6InNvcmUiPT09dHx8Im1hbGFtIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMT8icGFnaSI6ZTwxNT8ic2lhbmciOmU8MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSUxMDA9PTExfHxlJTEwIT0xfWZ1bmN0aW9uIG4oZSxuLHIsbyl7dmFyIHM9ZSsiICI7c3dpdGNoKHIpe2Nhc2UicyI6cmV0dXJuIG58fG8/Im5va2tyYXIgc2Vrw7puZHVyIjoibm9ra3J1bSBzZWvDum5kdW0iO2Nhc2Uic3MiOnJldHVybiB0KGUpP3MrKG58fG8/InNla8O6bmR1ciI6InNla8O6bmR1bSIpOnMrInNla8O6bmRhIjtjYXNlIm0iOnJldHVybiBuPyJtw61uw7p0YSI6Im3DrW7DunR1IjtjYXNlIm1tIjpyZXR1cm4gdChlKT9zKyhufHxvPyJtw61uw7p0dXIiOiJtw61uw7p0dW0iKTpuP3MrIm3DrW7DunRhIjpzKyJtw61uw7p0dSI7Y2FzZSJoaCI6cmV0dXJuIHQoZSk/cysobnx8bz8ia2x1a2t1c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTpzKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gbj8iZGFndXIiOm8/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiB0KGUpP24/cysiZGFnYXIiOnMrKG8/ImRhZ2EiOiJkw7ZndW0iKTpuP3MrImRhZ3VyIjpzKyhvPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gbj8ibcOhbnXDsHVyIjpvPyJtw6FudcOwIjoibcOhbnXDsGkiO2Nhc2UiTU0iOnJldHVybiB0KGUpP24/cysibcOhbnXDsGlyIjpzKyhvPyJtw6FudcOwaSI6Im3DoW51w7B1bSIpOm4/cysibcOhbnXDsHVyIjpzKyhvPyJtw6FudcOwIjoibcOhbnXDsGkiKTtjYXNlInkiOnJldHVybiBufHxvPyLDoXIiOiLDoXJpIjtjYXNlInl5IjpyZXR1cm4gdChlKT9zKyhufHxvPyLDoXIiOiLDoXJ1bSIpOnMrKG58fG8/IsOhciI6IsOhcmkiKX19cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJpcyIse21vbnRoczoiamFuw7phcl9mZWJyw7phcl9tYXJzX2FwcsOtbF9tYcOtX2rDum7DrV9qw7psw61fw6Fnw7pzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbsOzdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWHDrV9qw7puX2rDumxfw6Fnw7pfc2VwX29rdF9uw7N2X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tw6FudWRhZ3VyX8O+cmnDsGp1ZGFndXJfbWnDsHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mw7ZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbcOhbl/DvnJpX21pw7BfZmltX2bDtnNfbGF1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nw6Ffw55yX01pX0ZpX0bDtl9MYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW8OtIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbw6EgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbw60gZ8OmciBrbC5dIExUIixsYXN0V2VlazoiW3PDrcOwYXN0YV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZWZ0aXIgJXMiLHBhc3Q6ImZ5cmlyICVzIHPDrcOwYW4iLHM6bixzczpuLG06bixtbTpuLGg6ImtsdWtrdXN0dW5kIixoaDpuLGQ6bixkZDpuLE06bixNTTpuLHk6bix5eTpufSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZSl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QoZSk/InRyYSI6ImluIikrIiAiK2V9LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiamEiLHttb250aHM6IjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuaXpV/mnIhf54GrX+awtF/mnKhf6YeRX+WcnyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZ5bm0TeaciETml6UiLExMTDoiWVlZWeW5tE3mnIhE5pelIEhIOm1tIixMTExMOiJZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVnlubRN5pyIROaXpSIsbGxsOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLGxsbGw6IllZWVnlubRN5pyIROaXpShkZGQpIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov5Y2I5YmNfOWNiOW+jC9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIuWNiOW+jCI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/IuWNiOWJjSI6IuWNiOW+jCJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5pelXSBMVCIsbmV4dERheToiW+aYjuaXpV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGUpe3JldHVybiBlLndlZWsoKTx0aGlzLndlZWsoKT8iW+adpemAsV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IlvmmKjml6VdIExUIixsYXN0V2VlazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53ZWVrKCk8ZS53ZWVrKCk/IlvlhYjpgLFdZGRkZCBMVCI6ImRkZGQgTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3ml6UvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZSsi5pelIjtkZWZhdWx0OnJldHVybiBlfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVz5b6MIixwYXN0OiIlc+WJjSIsczoi5pWw56eSIixzczoiJWTnp5IiLG06IjHliIYiLG1tOiIlZOWIhiIsaDoiMeaZgumWkyIsaGg6IiVk5pmC6ZaTIixkOiIx5pelIixkZDoiJWTml6UiLE06IjHjg7bmnIgiLE1NOiIlZOODtuaciCIseToiMeW5tCIseXk6IiVk5bm0In19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCJlbmppbmciPT09dD9lOiJzaXlhbmciPT09dD9lPj0xMT9lOmUrMTI6InNvbnRlbiI9PT10fHwibmRhbHUiPT09dD9lKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDExPyJlbmppbmciOmU8MTU/InNpeWFuZyI6ZTwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgia2EiLHttb250aHM6e3N0YW5kYWxvbmU6IuGDmOGDkOGDnOGDleGDkOGDoOGDmF/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg5hf4YOb4YOQ4YOg4YOi4YOYX+GDkOGDnuGDoOGDmOGDmuGDmF/hg5vhg5Dhg5jhg6Hhg5hf4YOY4YOV4YOc4YOY4YOh4YOYX+GDmOGDleGDmuGDmOGDoeGDmF/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg51f4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDmF/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg5hf4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYIi5zcGxpdCgiXyIpLGZvcm1hdDoi4YOY4YOQ4YOc4YOV4YOQ4YOg4YOhX+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDoV/hg5vhg5Dhg6Dhg6Lhg6Ff4YOQ4YOe4YOg4YOY4YOa4YOY4YOhX+GDm+GDkOGDmOGDoeGDoV/hg5jhg5Xhg5zhg5jhg6Hhg6Ff4YOY4YOV4YOa4YOY4YOh4YOhX+GDkOGDkuGDleGDmOGDoeGDouGDoV/hg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg6Ff4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOhX+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDoV/hg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg6EiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiLhg5jhg5Dhg5xf4YOX4YOU4YORX+GDm+GDkOGDoF/hg5Dhg57hg6Bf4YOb4YOQ4YOYX+GDmOGDleGDnF/hg5jhg5Xhg5pf4YOQ4YOS4YOVX+GDoeGDlOGDpV/hg53hg6Xhg6Jf4YOc4YOd4YOUX+GDk+GDlOGDmSIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7c3RhbmRhbG9uZToi4YOZ4YOV4YOY4YOg4YOQX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmF/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmF/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5hf4YOo4YOQ4YOR4YOQ4YOX4YOYIi5zcGxpdCgiXyIpLGZvcm1hdDoi4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8o4YOs4YOY4YOc4YOQfOGDqOGDlOGDm+GDk+GDlOGDkikvfSx3ZWVrZGF5c1Nob3J0OiLhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuGDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4YOT4YOm4YOU4YOhXSBMVFst4YOW4YOUXSIsbmV4dERheToiW+GDruGDleGDkOGDml0gTFRbLeGDluGDlF0iLGxhc3REYXk6Ilvhg5Lhg6Phg6jhg5jhg5xdIExUWy3hg5bhg5RdIixuZXh0V2VlazoiW+GDqOGDlOGDm+GDk+GDlOGDkl0gZGRkZCBMVFst4YOW4YOUXSIsbGFzdFdlZWs6Ilvhg6zhg5jhg5zhg5BdIGRkZGQgTFQt4YOW4YOUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGUpe3JldHVybi8o4YOs4YOQ4YOb4YOYfOGDrOGDo+GDl+GDmHzhg6Hhg5Dhg5Dhg5fhg5h84YOs4YOU4YOa4YOYKS8udGVzdChlKT9lLnJlcGxhY2UoL+GDmCQvLCLhg6jhg5giKTplKyLhg6jhg5gifSxwYXN0OmZ1bmN0aW9uKGUpe3JldHVybi8o4YOs4YOQ4YOb4YOYfOGDrOGDo+GDl+GDmHzhg6Hhg5Dhg5Dhg5fhg5h84YOT4YOm4YOUfOGDl+GDleGDlCkvLnRlc3QoZSk/ZS5yZXBsYWNlKC8o4YOYfOGDlCkkLywi4YOY4YOhIOGDrOGDmOGDnCIpOi/hg6zhg5Thg5rhg5gvLnRlc3QoZSk/ZS5yZXBsYWNlKC/hg6zhg5Thg5rhg5gkLywi4YOs4YOa4YOY4YOhIOGDrOGDmOGDnCIpOnZvaWQgMH0sczoi4YOg4YOQ4YOb4YOT4YOU4YOc4YOY4YOb4YOUIOGDrOGDkOGDm+GDmCIsc3M6IiVkIOGDrOGDkOGDm+GDmCIsbToi4YOs4YOj4YOX4YOYIixtbToiJWQg4YOs4YOj4YOX4YOYIixoOiLhg6Hhg5Dhg5Dhg5fhg5giLGhoOiIlZCDhg6Hhg5Dhg5Dhg5fhg5giLGQ6IuGDk+GDpuGDlCIsZGQ6IiVkIOGDk+GDpuGDlCIsTToi4YOX4YOV4YOUIixNTToiJWQg4YOX4YOV4YOUIix5OiLhg6zhg5Thg5rhg5giLHl5OiIlZCDhg6zhg5Thg5rhg5gifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEt4YOa4YOYfOGDm+GDlC1cZHsxLDJ9fFxkezEsMn0t4YOULyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZT9lOjE9PT1lP2UrIi3hg5rhg5giOmU8MjB8fGU8PTEwMCYmZSUyMD09MHx8ZSUxMDA9PTA/IuGDm+GDlC0iK2U6ZSsiLeGDlCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MDoiLdGI0ZYiLDE6Ii3RiNGWIiwyOiIt0YjRliIsMzoiLdGI0ZYiLDQ6Ii3RiNGWIiw1OiIt0YjRliIsNjoiLdGI0YsiLDc6Ii3RiNGWIiw4OiIt0YjRliIsOToiLdGI0YsiLDEwOiIt0YjRiyIsMjA6Ii3RiNGLIiwzMDoiLdGI0YsiLDQwOiIt0YjRiyIsNTA6Ii3RiNGWIiw2MDoiLdGI0YsiLDcwOiIt0YjRliIsODA6Ii3RiNGWIiw5MDoiLdGI0YsiLDEwMDoiLdGI0ZYifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiLSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L0iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItKb0LDSo1/QsNKb0L9f0L3QsNGDX9GB05nRg1/QvNCw0Lxf0LzQsNGDX9GI0ZbQu1/RgtCw0Lxf0pvRi9GAX9Kb0LDQt1/Sm9Cw0YBf0LbQtdC7Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRliIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLQttC10Lpf0LTSr9C5X9GB0LXQuV/RgdOZ0YBf0LHQtdC5X9C20rHQvF/RgdC10L0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItC20Lpf0LTQuV/RgdC5X9GB0YBf0LHQuV/QttC8X9GB0L0iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0JHSr9Cz0ZbQvSDRgdCw0pPQsNGCXSBMVCIsbmV4dERheToiW9CV0YDRgtC10qMg0YHQsNKT0LDRgl0gTFQiLG5leHRXZWVrOiJkZGRkIFvRgdCw0pPQsNGCXSBMVCIsbGFzdERheToiW9Ca0LXRiNC1INGB0LDSk9Cw0YJdIExUIixsYXN0V2VlazoiW9Oo0YLQutC10L0g0LDQv9GC0LDQvdGL0qNdIGRkZGQgW9GB0LDSk9Cw0YJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDRltGI0ZbQvdC00LUiLHBhc3Q6IiVzINCx0rHRgNGL0L0iLHM6ItCx0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCIsc3M6IiVkINGB0LXQutGD0L3QtCIsbToi0LHRltGAINC80LjQvdGD0YIiLG1tOiIlZCDQvNC40L3Rg9GCIixoOiLQsdGW0YAg0YHQsNKT0LDRgiIsaGg6IiVkINGB0LDSk9Cw0YIiLGQ6ItCx0ZbRgCDQutKv0L0iLGRkOiIlZCDQutKv0L0iLE06ItCx0ZbRgCDQsNC5IixNTToiJWQg0LDQuSIseToi0LHRltGAINC20YvQuyIseXk6IiVkINC20YvQuyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNGI0ZZ80YjRiykvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIG49ZSUxMCxyPWU+PTEwMD8xMDA6bnVsbDtyZXR1cm4gZSsodFtlXXx8dFtuXXx8dFtyXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi4Z+hIiwyOiLhn6IiLDM6IuGfoyIsNDoi4Z+kIiw1OiLhn6UiLDY6IuGfpiIsNzoi4Z+nIiw4OiLhn6giLDk6IuGfqSIsMDoi4Z+gIn0sbj17IuGfoSI6IjEiLCLhn6IiOiIyIiwi4Z+jIjoiMyIsIuGfpCI6IjQiLCLhn6UiOiI1Iiwi4Z+mIjoiNiIsIuGfpyI6IjciLCLhn6giOiI4Iiwi4Z+pIjoiOSIsIuGfoCI6IjAifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImttIix7bW9udGhzOiLhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Z6Y4Z6A4Z6a4Z62X+GegOGeu+GemOGfkuGel+GfiF/hnpjhnrjhnpPhnrZf4Z6Y4Z+B4Z6f4Z62X+Gep+Gen+Gel+Getl/hnpjhnrfhnpDhnrvhnpPhnrZf4Z6A4Z6A4Z+S4Z6A4Z6K4Z62X+Gen+GeuOGeoOGetl/hnoDhnonhn5LhnonhnrZf4Z6P4Z674Z6b4Z62X+GenOGet+GeheGfkuGehuGet+GegOGetl/hnpLhn5LhnpPhnrwiLnNwbGl0KCJfIiksd2Vla2RheXM6IuGeouGetuGekeGet+Gej+GfkuGemV/hnoXhn5DhnpPhn5LhnpFf4Z6i4Z6E4Z+S4Z6C4Z624Z6aX+GeluGeu+Gekl/hnpbhn5LhnprhnqDhnp/hn5LhnpThno/hnrfhn41f4Z6f4Z674Z6A4Z+S4Z6aX+Gen+GfheGemuGfjSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuGeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+GenyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+GeluGfkuGemuGeueGegHzhnpvhn5LhnoThnrbhnoUvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIuGem+GfkuGehOGetuGehSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/IuGeluGfkuGemuGeueGegCI6IuGem+GfkuGehOGetuGehSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4Z6Q4Z+S4Z6E4Z+D4Z6T4Z+B4Z+HIOGemOGfieGfhOGehF0gTFQiLG5leHREYXk6Ilvhnp/hn5LhnqLhn4LhnoAg4Z6Y4Z+J4Z+E4Z6EXSBMVCIsbmV4dFdlZWs6ImRkZGQgW+GemOGfieGfhOGehF0gTFQiLGxhc3REYXk6Ilvhnpjhn5Lhnp/hnrfhnpvhnpjhnrfhnokg4Z6Y4Z+J4Z+E4Z6EXSBMVCIsbGFzdFdlZWs6ImRkZGQgW+Gen+GelOGfkuGej+GetuGeoOGfjeGemOGeu+Gek10gW+GemOGfieGfhOGehF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVz4Z6R4Z+A4Z6PIixwYXN0OiIlc+GemOGeu+GekyIsczoi4Z6U4Z+J4Z674Z6T4Z+S4Z6Y4Z624Z6T4Z6c4Z634Z6T4Z624Z6R4Z64IixzczoiJWQg4Z6c4Z634Z6T4Z624Z6R4Z64IixtOiLhnpjhnr3hnpnhnpPhnrbhnpHhnrgiLG1tOiIlZCDhnpPhnrbhnpHhnrgiLGg6IuGemOGeveGemeGemOGfieGfhOGehCIsaGg6IiVkIOGemOGfieGfhOGehCIsZDoi4Z6Y4Z694Z6Z4Z6Q4Z+S4Z6E4Z+DIixkZDoiJWQg4Z6Q4Z+S4Z6E4Z+DIixNOiLhnpjhnr3hnpnhnoHhn4IiLE1NOiIlZCDhnoHhn4IiLHk6IuGemOGeveGemeGehuGfkuGek+GetuGfhiIseXk6IiVkIOGehuGfkuGek+GetuGfhiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L+GekeGeuFxkezEsMn0vLG9yZGluYWw6IuGekeGeuCVkIixwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4Z+h4Z+i4Z+j4Z+k4Z+l4Z+m4Z+n4Z+o4Z+p4Z+gXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ezE6IuCzpyIsMjoi4LOoIiwzOiLgs6kiLDQ6IuCzqiIsNToi4LOrIiw2OiLgs6wiLDc6IuCzrSIsODoi4LOuIiw5OiLgs68iLDA6IuCzpiJ9LG49eyLgs6ciOiIxIiwi4LOoIjoiMiIsIuCzqSI6IjMiLCLgs6oiOiI0Iiwi4LOrIjoiNSIsIuCzrCI6IjYiLCLgs60iOiI3Iiwi4LOuIjoiOCIsIuCzryI6IjkiLCLgs6YiOiIwIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJrbiIse21vbnRoczoi4LKc4LKo4LK14LKw4LK/X+Cyq+CzhuCyrOCzjeCysOCyteCysOCyv1/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoLgsqzgsrDgs41f4LKF4LKV4LON4LKf4LOG4LOC4LOV4LKs4LKw4LONX+CyqOCyteCzhuCyguCyrOCysOCzjV/gsqHgsr/gsrjgs4bgsoLgsqzgsrDgs40iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuCynOCyqF/gsqvgs4bgsqzgs43gsrBf4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKCX+CyheCyleCzjeCyn+CzhuCzguCzlV/gsqjgsrXgs4bgsoJf4LKh4LK/4LK44LOG4LKCIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IuCyreCyvuCyqOCzgeCyteCyvuCysF/gsrjgs4bgs4Lgs5Xgsq7gsrXgsr7gsrBf4LKu4LKC4LKX4LKz4LK14LK+4LKwX+CyrOCzgeCyp+CyteCyvuCysF/gspfgs4HgsrDgs4HgsrXgsr7gsrBf4LK24LOB4LKV4LON4LKw4LK14LK+4LKwX+CytuCyqOCyv+CyteCyvuCysCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+CytiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgsofgsoLgsqbgs4FdIExUIixuZXh0RGF5OiJb4LKo4LK+4LKz4LOGXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4LKo4LK/4LKo4LON4LKo4LOGXSBMVCIsbGFzdFdlZWs6IlvgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgsqjgsoLgsqTgsrAiLHBhc3Q6IiVzIOCyueCyv+CyguCypuCzhiIsczoi4LKV4LOG4LKy4LK14LOBIOCyleCzjeCyt+Cyo+Cyl+Cys+CzgSIsc3M6IiVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgSIsbToi4LKS4LKC4LKm4LOBIOCyqOCyv+CyruCyv+CytyIsbW06IiVkIOCyqOCyv+CyruCyv+CytyIsaDoi4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhiIsaGg6IiVkIOCyl+CyguCyn+CzhiIsZDoi4LKS4LKC4LKm4LOBIOCypuCyv+CyqCIsZGQ6IiVkIOCypuCyv+CyqCIsTToi4LKS4LKC4LKm4LOBIOCypOCyv+CyguCyl+Cys+CzgSIsTU06IiVkIOCypOCyv+CyguCyl+Cys+CzgSIseToi4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytyIseXk6IiVkIOCyteCysOCzjeCytyJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CysOCyvuCypOCzjeCysOCyv3zgsqzgs4bgsrPgsr/gspfgs43gspfgs4Z84LKu4LKn4LON4LKv4LK+4LK54LON4LKofOCyuOCyguCynOCzhi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuCysOCyvuCypOCzjeCysOCyvyI9PT10P2U8ND9lOmUrMTI6IuCyrOCzhuCys+Cyv+Cyl+CzjeCyl+CzhiI9PT10P2U6IuCyruCyp+CzjeCyr+CyvuCyueCzjeCyqCI9PT10P2U+PTEwP2U6ZSsxMjoi4LK44LKC4LKc4LOGIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw0PyLgsrDgsr7gsqTgs43gsrDgsr8iOmU8MTA/IuCyrOCzhuCys+Cyv+Cyl+CzjeCyl+CzhiI6ZTwxNz8i4LKu4LKn4LON4LKv4LK+4LK54LON4LKoIjplPDIwPyLgsrjgsoLgspzgs4YiOiLgsrDgsr7gsqTgs43gsrDgsr8ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOCyqOCzhuCzlSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIuCyqOCzhuCzlSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QiLnNwbGl0KCJfIiksd2Vla2RheXM6IuydvOyalOydvF/sm5TsmpTsnbxf7ZmU7JqU7J28X+yImOyalOydvF/rqqnsmpTsnbxf6riI7JqU7J28X+2GoOyalOydvCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWeuFhCBNTU1NIETsnbwiLExMTDoiWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tIixMTExMOiJZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZ64WEIE1NTU0gROydvCIsbGxsOiJZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0iLGxsbGw6IllZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IuyYpOuKmCBMVCIsbmV4dERheToi64K07J28IExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToi7Ja07KCcIExUIixsYXN0V2Vlazoi7KeA64Kc7KO8IGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIO2bhCIscGFzdDoiJXMg7KCEIixzOiLrqocg7LSIIixzczoiJWTstIgiLG06IjHrtoQiLG1tOiIlZOu2hCIsaDoi7ZWcIOyLnOqwhCIsaGg6IiVk7Iuc6rCEIixkOiLtlZjro6giLGRkOiIlZOydvCIsTToi7ZWcIOuLrCIsTU06IiVk64usIix5OiLsnbwg64WEIix5eToiJWTrhYQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOydvHzsm5R87KO8KS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLsnbwiO2Nhc2UiTSI6cmV0dXJuIGUrIuyblCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyLso7wiO2RlZmF1bHQ6cmV0dXJuIGV9fSxtZXJpZGllbVBhcnNlOi/smKTsoIR87Jik7ZuELyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLsmKTtm4QiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyLsmKTsoIQiOiLsmKTtm4QifX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MDoiLdGH0q8iLDE6Ii3Rh9C4IiwyOiIt0YfQuCIsMzoiLdGH0q8iLDQ6Ii3Rh9KvIiw1OiIt0YfQuCIsNjoiLdGH0YsiLDc6Ii3Rh9C4Iiw4OiIt0YfQuCIsOToiLdGH0YMiLDEwOiIt0YfRgyIsMjA6Ii3Rh9GLIiwzMDoiLdGH0YMiLDQwOiIt0YfRiyIsNTA6Ii3Rh9KvIiw2MDoiLdGH0YsiLDcwOiIt0YfQuCIsODA6Ii3Rh9C4Iiw5MDoiLdGH0YMiLDEwMDoiLdGH0q8ifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItGP0L3Qsl/RhNC10LJf0LzQsNGA0YJf0LDQv9GAX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItCW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0JbQul/QlNC5X9Co0Llf0KjRgF/QkdC5X9CW0Lxf0JjRiCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQkdKv0LPSr9C9INGB0LDQsNGCXSBMVCIsbmV4dERheToiW9Ct0YDRgtC10qMg0YHQsNCw0YJdIExUIixuZXh0V2VlazoiZGRkZCBb0YHQsNCw0YJdIExUIixsYXN0RGF5OiJb0JrQtdGH0LUg0YHQsNCw0YJdIExUIixsYXN0V2VlazoiW9Oo0YLQutC10L0g0LDQv9GC0LDQvdGL0L1dIGRkZGQgW9C60q/QvdKvXSBb0YHQsNCw0YJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDQuNGH0LjQvdC00LUiLHBhc3Q6IiVzINC80YPRgNGD0L0iLHM6ItCx0LjRgNC90LXRh9C1INGB0LXQutGD0L3QtCIsc3M6IiVkINGB0LXQutGD0L3QtCIsbToi0LHQuNGAINC80q/QvdOp0YIiLG1tOiIlZCDQvNKv0L3TqdGCIixoOiLQsdC40YAg0YHQsNCw0YIiLGhoOiIlZCDRgdCw0LDRgiIsZDoi0LHQuNGAINC60q/QvSIsZGQ6IiVkINC60q/QvSIsTToi0LHQuNGAINCw0LkiLE1NOiIlZCDQsNC5Iix5OiLQsdC40YAg0LbRi9C7Iix5eToiJWQg0LbRi9C7In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIG49ZSUxMCxyPWU+PTEwMD8xMDA6bnVsbDtyZXR1cm4gZSsodFtlXXx8dFtuXXx8dFtyXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuLHIpe3ZhciBvPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIHQ/b1tuXVswXTpvW25dWzFdfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIG8oZS5zdWJzdHIoMCxlLmluZGV4T2YoIiAiKSkpPyJhICIrZToiYW4gIitlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZS5zdWJzdHIoMCxlLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrZToidmlydW4gIitlfWZ1bmN0aW9uIG8oZSl7aWYoZT1wYXJzZUludChlLDEwKSxpc05hTihlKSlyZXR1cm4hMTtpZihlPDApcmV0dXJuITA7aWYoZTwxMClyZXR1cm4gNDw9ZSYmZTw9NztpZihlPDEwMCl7dmFyIHQ9ZSUxMCxuPWUvMTA7cmV0dXJuIG8oMD09PXQ/bjp0KX1pZihlPDFlNCl7Zm9yKDtlPj0xMDspZS89MTA7cmV0dXJuIG8oZSl9cmV0dXJuIGUvPTFlMyxvKGUpfXJldHVybiBlLmRlZmluZUxvY2FsZSgibGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubmRlZ19Nw6lpbmRlZ19Ew6tuc2NoZGVnX03Dq3R0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTcOpLl9Ew6suX03Dqy5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX03DqV9Ew6tfTcOrX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0fDq3NjaHRlciB1bV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIltMZXNjaHRlbl0gZGRkZCBbdW1dIExUIjtkZWZhdWx0OnJldHVybiJbTGVzY2h0ZV0gZGRkZCBbdW1dIExUIn19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpuLHBhc3Q6cixzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTp0LG1tOiIlZCBNaW51dHRlbiIsaDp0LGhoOiIlZCBTdG9ubmVuIixkOnQsZGQ6IiVkIERlZWciLE06dCxNTToiJWQgTcOpaW50Iix5OnQseXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibG8iLHttb250aHM6IuC6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6siIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6siIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IuC6p+C6seC6mWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLgupXguq3gupngu4HguqXguociPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyLgupXguq3gupngu4Dguorgurvgu4ngurIiOiLgupXguq3gupngu4HguqXguocifSxjYWxlbmRhcjp7c2FtZURheToiW+C6oeC6t+C7ieC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQiLG5leHREYXk6IlvguqHgurfgu4nguq3gurfgu4jgupngu4DguqfguqXgurJdIExUIixuZXh0V2VlazoiW+C6p+C6seC6mV1kZGRkW+C7nOC7ieC6suC7gOC6p+C6peC6sl0gTFQiLGxhc3REYXk6IlvguqHgurfgu4nguqfgurLgupngupngurXgu4ngu4DguqfguqXgurJdIExUIixsYXN0V2VlazoiW+C6p+C6seC6mV1kZGRkW+C7geC6peC7ieC6p+C6meC6teC7ieC7gOC6p+C6peC6sl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IuC6reC6teC6gSAlcyIscGFzdDoiJXPgupzgu4jgurLgupnguqHgurIiLHM6IuC6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tSIsc3M6IiVkIOC6p+C6tOC6meC6suC6l+C6tSIsbToiMSDgupngurLgupfgurUiLG1tOiIlZCDgupngurLgupfgurUiLGg6IjEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHIixoaDoiJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHIixkOiIxIOC6oeC6t+C7iSIsZGQ6IiVkIOC6oeC6t+C7iSIsTToiMSDgu4DgupTgurfguq3gupkiLE1NOiIlZCDgu4DgupTgurfguq3gupkiLHk6IjEg4Lqb4Lq1Iix5eToiJWQg4Lqb4Lq1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKOC6l+C6teC7iClcZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiLgupfgurXgu4giK2V9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7cmV0dXJuIHQ/ImtlbGlvcyBzZWt1bmTEl3MiOnI/ImtlbGnFsyBzZWt1bmTFvmnFsyI6ImtlbGlhcyBzZWt1bmRlcyJ9ZnVuY3Rpb24gbihlLHQsbixyKXtyZXR1cm4gdD9vKG4pWzBdOnI/byhuKVsxXTpvKG4pWzJdfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUlMTA9PTB8fGU+MTAmJmU8MjB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaVtlXS5zcGxpdCgiXyIpfWZ1bmN0aW9uIHMoZSx0LHMsaSl7dmFyIGE9ZSsiICI7cmV0dXJuIDE9PT1lP2ErbihlLHQsc1swXSxpKTp0P2ErKHIoZSk/byhzKVsxXTpvKHMpWzBdKTppP2ErbyhzKVsxXTphKyhyKGUpP28ocylbMV06byhzKVsyXSl9dmFyIGk9e3NzOiJzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcyIsbToibWludXTEl19taW51dMSXc19taW51dMSZIixtbToibWludXTEl3NfbWludcSNacWzX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kxIUiLGhoOiJ2YWxhbmRvc192YWxhbmTFs192YWxhbmRhcyIsZDoiZGllbmFfZGllbm9zX2RpZW7EhSIsZGQ6ImRpZW5vc19kaWVuxbNfZGllbmFzIixNOiJtxJdudW9fbcSXbmVzaW9fbcSXbmVzxK8iLE1NOiJtxJduZXNpYWlfbcSXbmVzacWzX23El25lc2l1cyIseToibWV0YWlfbWV0xbNfbWV0dXMiLHl5OiJtZXRhaV9tZXTFs19tZXR1cyJ9O3JldHVybiBlLmRlZmluZUxvY2FsZSgibHQiLHttb250aHM6e2Zvcm1hdDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmTFvmlvX2dlZ3XFvsSXc19iaXLFvmVsaW9fbGllcG9zX3J1Z3BqxavEjWlvX3J1Z3PEl2pvX3NwYWxpb19sYXBrcmnEjWlvX2dydW9kxb5pbyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1xb7El19iaXLFvmVsaXNfbGllcGFfcnVncGrFq3Rpc19ydWdzxJdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW7Er19waXJtYWRpZW7Er19hbnRyYWRpZW7Er190cmXEjWlhZGllbsSvX2tldHZpcnRhZGllbsSvX3Blbmt0YWRpZW7Er1/FoWXFoXRhZGllbsSvIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZcSNaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX8WhZcWhdGFkaWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU19QX0FfVF9LX1BuX8WgIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbxaBpYW5kaWVuXSBMVCIsbmV4dERheToiW1J5dG9qXSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltWYWthcl0gTFQiLGxhc3RXZWVrOiJbUHJhxJdqdXPEr10gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWXFoSAlcyIsczp0LHNzOnMsbTpuLG1tOnMsaDpuLGhoOnMsZDpuLGRkOnMsTTpuLE1NOnMseTpuLHl5OnN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKyItb2ppIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4pe3JldHVybiBuP3QlMTA9PTEmJnQlMTAwIT0xMT9lWzJdOmVbM106dCUxMD09MSYmdCUxMDAhPTExP2VbMF06ZVsxXX1mdW5jdGlvbiBuKGUsbixyKXtyZXR1cm4gZSsiICIrdChzW3JdLGUsbil9ZnVuY3Rpb24gcihlLG4scil7cmV0dXJuIHQoc1tyXSxlLG4pfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdD8iZGHFvmFzIHNla3VuZGVzIjoiZGHFvsSBbSBzZWt1bmTEk20ifXZhciBzPXtzczoic2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXMiLnNwbGl0KCJfIiksbToibWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMiLnNwbGl0KCJfIiksbW06Im1pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksaGg6InN0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksZDoiZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLGRkOiJkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaSIuc3BsaXQoIl8iKSxNTToibcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIikseXk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJsdiIse21vbnRoczoiamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2rFq25fasWrbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdsSTdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmXFoWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZLiIsTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NIixMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbSIsTExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIGRkZGQsIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvFoG9kaWVuIHB1bGtzdGVuXSBMVCIsbmV4dERheToiW1LEq3QgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0V2VlazoiW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InDEk2MgJXMiLHBhc3Q6InBpcm1zICVzIixzOm8sc3M6bixtOnIsbW06bixoOnIsaGg6bixkOnIsZGQ6bixNOnIsTU06bix5OnIseXk6bn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17d29yZHM6e3NzOlsic2VrdW5kIiwic2VrdW5kYSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTU06WyJtamVzZWMiLCJtamVzZWNhIiwibWplc2VjaSJdLHl5OlsiZ29kaW5hIiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMT09PWU/dFswXTplPj0yJiZlPD00P3RbMV06dFsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsbixyKXt2YXIgbz10LndvcmRzW3JdO3JldHVybiAxPT09ci5sZW5ndGg/bj9vWzBdOm9bMV06ZSsiICIrdC5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKGUsbyl9fTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfxI1lX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanXEjWUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvxaFsZV0gW25lZGplbGplXSBbdV0gTFQiLCJbcHJvxaFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvxaFsZV0gW3NyaWplZGVdIFt1XSBMVCIsIltwcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczp0LnRyYW5zbGF0ZSxtOnQudHJhbnNsYXRlLG1tOnQudHJhbnNsYXRlLGg6dC50cmFuc2xhdGUsaGg6dC50cmFuc2xhdGUsZDoiZGFuIixkZDp0LnRyYW5zbGF0ZSxNOiJtamVzZWMiLE1NOnQudHJhbnNsYXRlLHk6ImdvZGludSIseXk6dC50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJtaSIse21vbnRoczoiS29oaS10xIF0ZV9IdWktdGFuZ3VydV9Qb3V0xastdGUtcmFuZ2lfUGFlbmdhLXdoxIF3aMSBX0hhcmF0dWFfUGlwaXJpX0jFjW5nb2luZ29pX0hlcmUtdHVyaS1rxY1rxIFfTWFodXJ1X1doaXJpbmdhLcSBLW51a3VfV2hpcmluZ2EtxIEtcmFuZ2lfSGFraWhlYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSMWNbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSxIF0YXB1X01hbmVfVMWrcmVpX1dlbmVyZWlfVMSBaXRlX1BhcmFpcmVfSMSBdGFyZWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtpXSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIHRlaWUgbWFoYW5hLCBpXSBMVCIsbmV4dERheToiW2Fwb3BvIGldIExUIixuZXh0V2VlazoiZGRkZCBbaV0gTFQiLGxhc3REYXk6IltpbmFuYWhpIGldIExUIixsYXN0V2VlazoiZGRkZCBbd2hha2FtdXR1bmdhIGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpIHJvdG8gaSAlcyIscGFzdDoiJXMgaSBtdWEiLHM6InRlIGjEk2tvbmEgcnVhcnVhIixzczoiJWQgaMSTa29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVkIHRhdSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibWsiLHttb250aHM6ItGY0LDQvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Zhf0ZjRg9C90Lhf0ZjRg9C70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItGY0LDQvV/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLQvdC10LTQtdC70LBf0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQvtC6X9C/0LXRgtC+0Lpf0YHQsNCx0L7RgtCwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItC90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDQtV/Rh9C10YJf0L/QtdGCX9GB0LDQsSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0L1lX9C/b1/QstGCX9GB0YBf0YfQtV/Qv9C1X9GBYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0JTQtdC90LXRgSDQstC+XSBMVCIsbmV4dERheToiW9Cj0YLRgNC1INCy0L5dIExUIixuZXh0V2VlazoiW9CS0L5dIGRkZGQgW9Cy0L5dIExUIixsYXN0RGF5OiJb0JLRh9C10YDQsCDQstC+XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIlvQmNC30LzQuNC90LDRgtCw0YLQsF0gZGRkZCBb0LLQvl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLQv9C+0YHQu9C1ICVzIixwYXN0OiLQv9GA0LXQtCAlcyIsczoi0L3QtdC60L7Qu9C60YMg0YHQtdC60YPQvdC00LgiLHNzOiIlZCDRgdC10LrRg9C90LTQuCIsbToi0LzQuNC90YPRgtCwIixtbToiJWQg0LzQuNC90YPRgtC4IixoOiLRh9Cw0YEiLGhoOiIlZCDRh9Cw0YHQsCIsZDoi0LTQtdC9IixkZDoiJWQg0LTQtdC90LAiLE06ItC80LXRgdC10YYiLE1NOiIlZCDQvNC10YHQtdGG0LgiLHk6ItCz0L7QtNC40L3QsCIseXk6IiVkINCz0L7QtNC40L3QuCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49ZSUxMDA7cmV0dXJuIDA9PT1lP2UrIi3QtdCyIjowPT09bj9lKyIt0LXQvSI6bj4xMCYmbjwyMD9lKyIt0YLQuCI6MT09PXQ/ZSsiLdCy0LgiOjI9PT10P2UrIi3RgNC4Ijo3PT09dHx8OD09PXQ/ZSsiLdC80LgiOmUrIi3RgtC4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibWwiLHttb250aHM6IuC0nOC0qOC1geC0teC0sOC0v1/gtKvgtYbgtKzgtY3gtLDgtYHgtLXgtLDgtL9f4LSu4LS+4LW84LSa4LWN4LSa4LWNX+C0j+C0quC1jeC0sOC0v+C1vV/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iF/gtJPgtJfgtLjgtY3gtLHgtY3gtLHgtY1f4LS44LWG4LSq4LWN4LSx4LWN4LSx4LSC4LSs4LW8X+C0kuC0leC1jeC0n+C1i+C0rOC1vF/gtKjgtLXgtILgtKzgtbxf4LSh4LS/4LS44LSC4LSs4LW8Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi4LSe4LS+4LSv4LSx4LS+4LS04LWN4LSaX+C0pOC0v+C0meC1jeC0leC0s+C0vuC0tOC1jeC0ml/gtJrgtYrgtLXgtY3gtLXgtL7gtLTgtY3gtJpf4LSs4LWB4LSn4LSo4LS+4LS04LWN4LSaX+C0teC1jeC0r+C0vuC0tOC0vuC0tOC1jeC0ml/gtLXgtYbgtLPgtY3gtLPgtL/gtK/gtL7gtLTgtY3gtJpf4LS24LSo4LS/4LSv4LS+4LS04LWN4LSaIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuC0nuC0vuC0r+C1vF/gtKTgtL/gtJngtY3gtJXgtb5f4LSa4LWK4LS14LWN4LS1X+C0rOC1geC0p+C1u1/gtLXgtY3gtK/gtL7gtLTgtIJf4LS14LWG4LSz4LWN4LSz4LS/X+C0tuC0qOC0vyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4LSe4LS+X+C0pOC0v1/gtJrgtYpf4LSs4LWBX+C0teC1jeC0r+C0vl/gtLXgtYZf4LS2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC3gtKjgtYEiLExUUzoiQSBoOm1tOnNzIC3gtKjgtYEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4LSH4LSo4LWN4LSo4LWNXSBMVCIsbmV4dERheToiW+C0qOC0vuC0s+C1hl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW+C0h+C0qOC1jeC0qOC0suC1hl0gTFQiLGxhc3RXZWVrOiJb4LSV4LS04LS/4LSe4LWN4LSeXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg4LSV4LS04LS/4LSe4LWN4LSe4LWNIixwYXN0OiIlcyDgtK7gtYHgtbvgtKrgtY0iLHM6IuC0heC1veC0qiDgtKjgtL/gtK7gtL/gtLfgtJngtY3gtJngtb4iLHNzOiIlZCDgtLjgtYbgtJXgtY3gtJXgtbvgtKHgtY0iLG06IuC0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0iLG1tOiIlZCDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0iLGg6IuC0kuC0sOC1gSDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwiLGhoOiIlZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwiLGQ6IuC0kuC0sOC1gSDgtKbgtL/gtLXgtLjgtIIiLGRkOiIlZCDgtKbgtL/gtLXgtLjgtIIiLE06IuC0kuC0sOC1gSDgtK7gtL7gtLjgtIIiLE1NOiIlZCDgtK7gtL7gtLjgtIIiLHk6IuC0kuC0sOC1gSDgtLXgtbzgtLfgtIIiLHl5OiIlZCDgtLXgtbzgtLfgtIIifSxtZXJpZGllbVBhcnNlOi/gtLDgtL7gtKTgtY3gtLDgtL984LSw4LS+4LS14LS/4LSy4LWGfOC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY184LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCfOC0sOC0vuC0pOC1jeC0sOC0vy9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLgtLDgtL7gtKTgtY3gtLDgtL8iPT09dCYmZT49NHx8IuC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0iPT09dHx8IuC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0giI9PT10P2UrMTI6ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDQ/IuC0sOC0vuC0pOC1jeC0sOC0vyI6ZTwxMj8i4LSw4LS+4LS14LS/4LSy4LWGIjplPDE3PyLgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNIjplPDIwPyLgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIIiOiLgtLDgtL7gtKTgtY3gtLDgtL8ifX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuLHIpe3N3aXRjaChuKXtjYXNlInMiOnJldHVybiB0PyLRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC0Ijoi0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0iO2Nhc2Uic3MiOnJldHVybiBlKyh0PyIg0YHQtdC60YPQvdC0IjoiINGB0LXQutGD0L3QtNGL0L0iKTtjYXNlIm0iOmNhc2UibW0iOnJldHVybiBlKyh0PyIg0LzQuNC90YPRgiI6IiDQvNC40L3Rg9GC0YvQvSIpO2Nhc2UiaCI6Y2FzZSJoaCI6cmV0dXJuIGUrKHQ/IiDRhtCw0LMiOiIg0YbQsNCz0LjQudC9Iik7Y2FzZSJkIjpjYXNlImRkIjpyZXR1cm4gZSsodD8iINOp0LTTqdGAIjoiINOp0LTRgNC40LnQvSIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIGUrKHQ/IiDRgdCw0YAiOiIg0YHQsNGA0YvQvSIpO2Nhc2UieSI6Y2FzZSJ5eSI6cmV0dXJuIGUrKHQ/IiDQttC40LsiOiIg0LbQuNC70LjQudC9Iik7ZGVmYXVsdDpyZXR1cm4gZX19cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoi0J3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QpdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YBf0JPRg9GA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JTTqdGA06nQstC00q/Qs9GN0Y3RgCDRgdCw0YBf0KLQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/Ql9GD0YDQs9Cw0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNC+0LvQtNGD0LPQsNCw0YAg0YHQsNGAX9Cd0LDQudC80LTRg9Cz0LDQsNGAINGB0LDRgF/QldGB0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JDRgNCy0LDQvSDQvdGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQstCw0L0g0YXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxINGB0LDRgF8yINGB0LDRgF8zINGB0LDRgF80INGB0LDRgF81INGB0LDRgF82INGB0LDRgF83INGB0LDRgF84INGB0LDRgF85INGB0LDRgF8xMCDRgdCw0YBfMTEg0YHQsNGAXzEyINGB0LDRgCIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiLQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0J3Rj9C8X9CU0LDQsl/QnNGP0LNf0JvRhdCwX9Cf0q/RgF/QkdCw0LBf0JHRj9C8Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSDQvtC90YsgTU1NTdGL0L0gRCIsTExMOiJZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov0q7TqHzSrtClL2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i0q7QpSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/ItKu06giOiLSrtClIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvTqNC906nTqdC006nRgF0gTFQiLG5leHREYXk6IlvQnNCw0YDQs9Cw0LDRiF0gTFQiLG5leHRXZWVrOiJb0JjRgNGN0YVdIGRkZGQgTFQiLGxhc3REYXk6IlvTqNGH0LjQs9C006nRgF0gTFQiLGxhc3RXZWVrOiJb06jQvdCz06nRgNGB06nQvV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg0LTQsNGA0LDQsCIscGFzdDoiJXMg06nQvNC906kiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9INOp0LTTqdGALyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGUrIiDTqdC006nRgCI7ZGVmYXVsdDpyZXR1cm4gZX19fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIG89IiI7aWYodClzd2l0Y2gobil7Y2FzZSJzIjpvPSLgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSmIjticmVhaztjYXNlInNzIjpvPSIlZCDgpLjgpYfgpJXgpILgpKYiO2JyZWFrO2Nhc2UibSI6bz0i4KSP4KSVIOCkruCkv+CkqOCkv+CknyI7YnJlYWs7Y2FzZSJtbSI6bz0iJWQg4KSu4KS/4KSo4KS/4KSf4KWHIjticmVhaztjYXNlImgiOm89IuCkj+CklSDgpKTgpL7gpLgiO2JyZWFrO2Nhc2UiaGgiOm89IiVkIOCkpOCkvuCkuCI7YnJlYWs7Y2FzZSJkIjpvPSLgpI/gpJUg4KSm4KS/4KS14KS4IjticmVhaztjYXNlImRkIjpvPSIlZCDgpKbgpL/gpLXgpLgiO2JyZWFrO2Nhc2UiTSI6bz0i4KSP4KSVIOCkruCkueCkv+CkqOCkviI7YnJlYWs7Y2FzZSJNTSI6bz0iJWQg4KSu4KS54KS/4KSo4KWHIjticmVhaztjYXNlInkiOm89IuCkj+CklSDgpLXgpLDgpY3gpLciO2JyZWFrO2Nhc2UieXkiOm89IiVkIOCkteCksOCljeCkt+ClhyJ9ZWxzZSBzd2l0Y2gobil7Y2FzZSJzIjpvPSLgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSm4KS+4KSCIjticmVhaztjYXNlInNzIjpvPSIlZCDgpLjgpYfgpJXgpILgpKbgpL7gpIIiO2JyZWFrO2Nhc2UibSI6bz0i4KSP4KSV4KS+IOCkruCkv+CkqOCkv+Ckn+CkviI7YnJlYWs7Y2FzZSJtbSI6bz0iJWQg4KSu4KS/4KSo4KS/4KSf4KS+4KSCIjticmVhaztjYXNlImgiOm89IuCkj+CkleCkviDgpKTgpL7gpLjgpL4iO2JyZWFrO2Nhc2UiaGgiOm89IiVkIOCkpOCkvuCkuOCkvuCkgiI7YnJlYWs7Y2FzZSJkIjpvPSLgpI/gpJXgpL4g4KSm4KS/4KS14KS44KS+IjticmVhaztjYXNlImRkIjpvPSIlZCDgpKbgpL/gpLXgpLjgpL7gpIIiO2JyZWFrO2Nhc2UiTSI6bz0i4KSP4KSV4KS+IOCkruCkueCkv+CkqOCljeCkr+CkviI7YnJlYWs7Y2FzZSJNTSI6bz0iJWQg4KSu4KS54KS/4KSo4KWN4KSv4KS+4KSCIjticmVhaztjYXNlInkiOm89IuCkj+CkleCkviDgpLXgpLDgpY3gpLfgpL4iO2JyZWFrO2Nhc2UieXkiOm89IiVkIOCkteCksOCljeCkt+CkvuCkgiJ9cmV0dXJuIG8ucmVwbGFjZSgvJWQvaSxlKX12YXIgbj17MToi4KWnIiwyOiLgpagiLDM6IuClqSIsNDoi4KWqIiw1OiLgpasiLDY6IuClrCIsNzoi4KWtIiw4OiLgpa4iLDk6IuClryIsMDoi4KWmIn0scj17IuClpyI6IjEiLCLgpagiOiIyIiwi4KWpIjoiMyIsIuClqiI6IjQiLCLgpasiOiI1Iiwi4KWsIjoiNiIsIuClrSI6IjciLCLgpa4iOiI4Iiwi4KWvIjoiOSIsIuClpiI6IjAifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiLgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpL/gpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpYhf4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4KSc4KS+4KSo4KWHLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkmi5f4KSP4KSq4KWN4KSw4KS/Ll/gpK7gpYcuX+CknOClguCkqC5f4KSc4KWB4KSy4KWILl/gpJHgpJcuX+CkuOCkquCljeCkn+Clh+Ckgi5f4KSR4KSV4KWN4KSf4KWLLl/gpKjgpYvgpLXgpY3gpLngpYfgpIIuX+CkoeCkv+CkuOClh+Ckgi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLPgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIOCkteCkvuCknOCkpOCkviIsTFRTOiJBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+In0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpIbgpJxdIExUIixuZXh0RGF5OiJb4KSJ4KSm4KWN4KSv4KS+XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KSV4KS+4KSyXSBMVCIsbGFzdFdlZWs6IlvgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc+CkruCkp+CljeCkr+ClhyIscGFzdDoiJXPgpKrgpYLgpLDgpY3gpLXgpYAiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfSxtZXJpZGllbVBhcnNlOi/gpLDgpL7gpKTgpY3gpLDgpYB84KS44KSV4KS+4KSz4KWAfOCkpuClgeCkquCkvuCksOClgHzgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLgpLDgpL7gpKTgpY3gpLDgpYAiPT09dD9lPDQ/ZTplKzEyOiLgpLjgpJXgpL7gpLPgpYAiPT09dD9lOiLgpKbgpYHgpKrgpL7gpLDgpYAiPT09dD9lPj0xMD9lOmUrMTI6IuCkuOCkvuCkr+CkguCkleCkvuCks+ClgCI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8i4KSw4KS+4KSk4KWN4KSw4KWAIjplPDEwPyLgpLjgpJXgpL7gpLPgpYAiOmU8MTc/IuCkpuClgeCkquCkvuCksOClgCI6ZTwyMD8i4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAIjoi4KSw4KS+4KSk4KWN4KSw4KWAIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMTI9PT1lJiYoZT0wKSwicGFnaSI9PT10P2U6InRlbmdhaGFyaSI9PT10P2U+PTExP2U6ZSsxMjoicGV0YW5nIj09PXR8fCJtYWxhbSI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTE/InBhZ2kiOmU8MTU/InRlbmdhaGFyaSI6ZTwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibXMiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMTI9PT1lJiYoZT0wKSwicGFnaSI9PT10P2U6InRlbmdhaGFyaSI9PT10P2U+PTExP2U6ZSsxMjoicGV0YW5nIj09PXR8fCJtYWxhbSI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTE/InBhZ2kiOmU8MTU/InRlbmdhaGFyaSI6ZTwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibXQiLHttb250aHM6Ikphbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X8SgdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpxItlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal/EoHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGnEiyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSWwtxKZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ8SnYV9JbC3EpmFtaXNfSWwtxKBpbWfEp2FfSXMtU2lidCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLEpmFkX1RuZV9UbGlfRXJiX8SmYW1fxKBpbV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IsSmYV9Ubl9UbF9Fcl/EpmFfxKBpX1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lsbHVtIGZpbC1dTFQiLG5leHREYXk6IltHxKdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYcSnIGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZuKAmSAlcyIscGFzdDoiJXMgaWx1IixzOiJmdGl0IHNla29uZGkiLHNzOiIlZCBzZWtvbmRpIixtOiJtaW51dGEiLG1tOiIlZCBtaW51dGkiLGg6InNpZWfEp2EiLGhoOiIlZCBzaWVnxKdhdCIsZDoixKF1cm5hdGEiLGRkOiIlZCDEoXJhbmV0IixNOiJ4YWhhciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi4YGBIiwyOiLhgYIiLDM6IuGBgyIsNDoi4YGEIiw1OiLhgYUiLDY6IuGBhiIsNzoi4YGHIiw4OiLhgYgiLDk6IuGBiSIsMDoi4YGAIn0sbj17IuGBgSI6IjEiLCLhgYIiOiIyIiwi4YGDIjoiMyIsIuGBhCI6IjQiLCLhgYUiOiI1Iiwi4YGGIjoiNiIsIuGBhyI6IjciLCLhgYgiOiI4Iiwi4YGJIjoiOSIsIuGBgCI6IjAifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoIm15Iix7bW9udGhzOiLhgIfhgJThgLrhgJThgJ3hgKvhgJvhgK5f4YCW4YCx4YCW4YCx4YCs4YC64YCd4YCr4YCb4YCuX+GAmeGAkOGAul/hgKfhgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgIfhgLDhgJzhgK3hgK/hgIThgLpf4YCe4YC84YCC4YCv4YCQ4YC6X+GAheGAgOGAuuGAkOGAhOGAuuGAmOGArF/hgKHhgLHhgKzhgIDhgLrhgJDhgK3hgK/hgJjhgKxf4YCU4YCt4YCv4YCd4YCE4YC64YCY4YCsX+GAkuGAruGAh+GAhOGAuuGAmOGArCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4YCH4YCU4YC6X+GAluGAsV/hgJnhgJDhgLpf4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCc4YCt4YCv4YCE4YC6X+GAnuGAvF/hgIXhgIDhgLpf4YCh4YCx4YCs4YCA4YC6X+GAlOGAreGAr1/hgJLhgK4iLnNwbGl0KCJfIiksd2Vla2RheXM6IuGAkOGAlOGAhOGAuuGAueGAguGAlOGAveGAsV/hgJDhgJThgIThgLrhgLnhgJzhgKxf4YCh4YCE4YC64YC54YCC4YCrX+GAl+GAr+GAkuGAueGAk+GAn+GAsOGAuF/hgIDhgLzhgKzhgJ7hgJXhgJDhgLHhgLhf4YCe4YCx4YCs4YCA4YC84YCsX+GAheGAlOGAsSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuGAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW+GAmuGAlOGAsS5dIExUIFvhgJnhgL7hgKxdIixuZXh0RGF5OiJb4YCZ4YCU4YCA4YC64YCW4YC84YCU4YC6XSBMVCBb4YCZ4YC+4YCsXSIsbmV4dFdlZWs6ImRkZGQgTFQgW+GAmeGAvuGArF0iLGxhc3REYXk6IlvhgJnhgJThgLEu4YCAXSBMVCBb4YCZ4YC+4YCsXSIsbGFzdFdlZWs6IlvhgJXhgLzhgK7hgLjhgIHhgLLhgLfhgJ7hgLHhgKxdIGRkZGQgTFQgW+GAmeGAvuGArF0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IuGAnOGArOGAmeGAiuGAuuGAtyAlcyDhgJnhgL7hgKwiLHBhc3Q6IuGAnOGAveGAlOGAuuGAgeGAsuGAt+GAnuGAseGArCAlcyDhgIAiLHM6IuGAheGAgOGAueGAgOGAlOGAui7hgKHhgJThgIrhgLrhgLjhgIThgJrhgLoiLHNzOiIlZCDhgIXhgIDhgLnhgIDhgJThgLfhgLoiLG06IuGAkOGAheGAuuGAmeGAreGAlOGAheGAuiIsbW06IiVkIOGAmeGAreGAlOGAheGAuiIsaDoi4YCQ4YCF4YC64YCU4YCs4YCb4YCuIixoaDoiJWQg4YCU4YCs4YCb4YCuIixkOiLhgJDhgIXhgLrhgJvhgIDhgLoiLGRkOiIlZCDhgJvhgIDhgLoiLE06IuGAkOGAheGAuuGAnCIsTU06IiVkIOGAnCIseToi4YCQ4YCF4YC64YCU4YC+4YCF4YC6Iix5eToiJWQg4YCU4YC+4YCF4YC6In0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW+GBgeGBguGBg+GBhOGBheGBhuGBh+GBiOGBieGBgF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgibmIiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InPDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic8O4Ll9tYS5fdGkuX29uLl90by5fZnIuX2zDuC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InPDuF9tYV90aV9vbl90b19mcl9sw7giLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnw6VyIGtsLl0gTFQiLGxhc3RXZWVrOiJbZm9ycmlnZV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJub2VuIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0dCBtaW51dHQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlciIsTToiZW4gbcOlbmVkIixNTToiJWQgbcOlbmVkZXIiLHk6ImV0dCDDpXIiLHl5OiIlZCDDpXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXsxOiLgpaciLDI6IuClqCIsMzoi4KWpIiw0OiLgpaoiLDU6IuClqyIsNjoi4KWsIiw3OiLgpa0iLDg6IuClriIsOToi4KWvIiwwOiLgpaYifSxuPXsi4KWnIjoiMSIsIuClqCI6IjIiLCLgpakiOiIzIiwi4KWqIjoiNCIsIuClqyI6IjUiLCLgpawiOiI2Iiwi4KWtIjoiNyIsIuClriI6IjgiLCLgpa8iOiI5Iiwi4KWmIjoiMCJ9O3JldHVybiBlLmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6IuCknOCkqOCkteCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkv+Cksl/gpK7gpIhf4KSc4KWB4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLfgpY3gpJ9f4KS44KWH4KSq4KWN4KSf4KWH4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpK3gpYfgpK7gpY3gpKzgpLBf4KSh4KS/4KS44KWH4KSu4KWN4KSs4KSwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgpJzgpKguX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkvy5f4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIguX+CkheCkly5f4KS44KWH4KSq4KWN4KSfLl/gpIXgpJXgpY3gpJ/gpYsuX+CkqOCli+CkreClhy5f4KSh4KS/4KS44KWHLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiLgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJB4KSV4KWLIGg6bW0g4KSs4KSc4KWHIixMVFM6IkHgpJXgpYsgaDptbTpzcyDgpKzgpJzgpYciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gpLDgpL7gpKTgpL984KSs4KS/4KS54KS+4KSofOCkpuCkv+CkieCkgeCkuOCli3zgpLjgpL7gpIHgpJ0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLgpLDgpL7gpKTgpL8iPT09dD9lPDQ/ZTplKzEyOiLgpKzgpL/gpLngpL7gpKgiPT09dD9lOiLgpKbgpL/gpIngpIHgpLjgpYsiPT09dD9lPj0xMD9lOmUrMTI6IuCkuOCkvuCkgeCknSI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8Mz8i4KSw4KS+4KSk4KS/IjplPDEyPyLgpKzgpL/gpLngpL7gpKgiOmU8MTY/IuCkpuCkv+CkieCkgeCkuOCliyI6ZTwyMD8i4KS44KS+4KSB4KSdIjoi4KSw4KS+4KSk4KS/In0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpIbgpJxdIExUIixuZXh0RGF5OiJb4KSt4KWL4KSy4KS/XSBMVCIsbmV4dFdlZWs6IlvgpIbgpIngpIHgpKbgpYtdIGRkZGRbLF0gTFQiLGxhc3REYXk6IlvgpLngpL/gpJzgpYtdIExUIixsYXN0V2VlazoiW+Ckl+Ckj+CkleCli10gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPgpK7gpL4iLHBhc3Q6IiVzIOCkheCkl+CkvuCkoeCkvyIsczoi4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoyIsc3M6IiVkIOCkuOClh+CkleClh+Cko+CljeCkoSIsbToi4KSP4KSVIOCkruCkv+CkqOClh+CknyIsbW06IiVkIOCkruCkv+CkqOClh+CknyIsaDoi4KSP4KSVIOCkmOCko+CljeCkn+CkviIsaGg6IiVkIOCkmOCko+CljeCkn+CkviIsZDoi4KSP4KSVIOCkpuCkv+CkqCIsZGQ6IiVkIOCkpuCkv+CkqCIsTToi4KSP4KSVIOCkruCkueCkv+CkqOCkviIsTU06IiVkIOCkruCkueCkv+CkqOCkviIseToi4KSP4KSVIOCkrOCksOCljeCktyIseXk6IiVkIOCkrOCksOCljeCktyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxuPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxyPVsvXmphbi9pLC9eZmViL2ksL15tYWFydHxtcnQuPyQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLG89L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8YXByaWx8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJubC1iZSIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUscil7cmV0dXJuIGU/Ly1NTU0tLy50ZXN0KHIpP25bZS5tb250aCgpXTp0W2UubW9udGgoKV06dH0sbW9udGhzUmVnZXg6byxtb250aHNTaG9ydFJlZ2V4Om8sbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxtZWl8anVbbmxdaXxhcHJpbHxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6cixsb25nTW9udGhzUGFyc2U6cixzaG9ydE1vbnRoc1BhcnNlOnIsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06IsOpw6luIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6IsOpw6luIHV1ciIsaGg6IiVkIHV1ciIsZDoiw6nDqW4gZGFnIixkZDoiJWQgZGFnZW4iLE06IsOpw6luIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiw6nDqW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKDE9PT1lfHw4PT09ZXx8ZT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxuPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxyPVsvXmphbi9pLC9eZmViL2ksL15tYWFydHxtcnQuPyQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLG89L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8YXByaWx8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJubCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUscil7cmV0dXJuIGU/Ly1NTU0tLy50ZXN0KHIpP25bZS5tb250aCgpXTp0W2UubW9udGgoKV06dH0sbW9udGhzUmVnZXg6byxtb250aHNTaG9ydFJlZ2V4Om8sbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxtZWl8anVbbmxdaXxhcHJpbHxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6cixsb25nTW9udGhzUGFyc2U6cixzaG9ydE1vbnRoc1BhcnNlOnIsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06IsOpw6luIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6IsOpw6luIHV1ciIsaGg6IiVkIHV1ciIsZDoiw6nDqW4gZGFnIixkZDoiJWQgZGFnZW4iLE06IsOpw6luIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiw6nDqW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKDE9PT1lfHw4PT09ZXx8ZT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoIm5uIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VuZGFnX23DpW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tw6VuX3R5c19vbnNfdG9yX2ZyZV9sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X23DpV90eV9vbl90b19mcl9sw7giLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kgZ8OlciBrbG9ra2FdIExUIixsYXN0V2VlazoiW0bDuHJlZ8OlYW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsTToiZWluIG3DpW5hZCIsTU06IiVkIG3DpW5hZGVyIix5OiJlaXQgw6VyIix5eToiJWQgw6VyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToi4KmnIiwyOiLgqagiLDM6IuCpqSIsNDoi4KmqIiw1OiLgqasiLDY6IuCprCIsNzoi4KmtIiw4OiLgqa4iLDk6IuCpryIsMDoi4KmmIn0sbj17IuCppyI6IjEiLCLgqagiOiIyIiwi4KmpIjoiMyIsIuCpqiI6IjQiLCLgqasiOiI1Iiwi4KmsIjoiNiIsIuCprSI6IjciLCLgqa4iOiI4Iiwi4KmvIjoiOSIsIuCppiI6IjAifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInBhLWluIix7bW9udGhzOiLgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAiLnNwbGl0KCJfIiksd2Vla2RheXM6IuCokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSDgqLXgqJzgqYciLExUUzoiQSBoOm1tOnNzIOCoteConOCphyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4KiF4KicXSBMVCIsbmV4dERheToiW+ColeCosl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW+ColeCosl0gTFQiLGxhc3RXZWVrOiJb4Kiq4Ki/4Kib4Kiy4KmHXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg4Ki14Ki/4Kmx4KiaIixwYXN0OiIlcyDgqKrgqL/gqJvgqLLgqYciLHM6IuColeCpgeConSDgqLjgqJXgqL/gqbDgqJ8iLHNzOiIlZCDgqLjgqJXgqL/gqbDgqJ8iLG06IuCoh+ColSDgqK7gqL/gqbDgqJ8iLG1tOiIlZCDgqK7gqL/gqbDgqJ8iLGg6IuCoh+CpseColSDgqJjgqbDgqJ/gqL4iLGhoOiIlZCDgqJjgqbDgqJ/gqYciLGQ6IuCoh+CpseColSDgqKbgqL/gqKgiLGRkOiIlZCDgqKbgqL/gqKgiLE06IuCoh+CpseColSDgqK7gqLngqYDgqKjgqL4iLE1NOiIlZCDgqK7gqLngqYDgqKjgqYciLHk6IuCoh+CpseColSDgqLjgqL7gqLIiLHl5OiIlZCDgqLjgqL7gqLIifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4Kmn4Kmo4Kmp4Kmq4Kmr4Kms4Kmt4Kmu4Kmv4KmmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gqLDgqL7gqKR84Ki44Ki14KmH4KiwfOCopuCpgeCoquCoueCov+CosHzgqLjgqLzgqL7gqK4vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLgqLDgqL7gqKQiPT09dD9lPDQ/ZTplKzEyOiLgqLjgqLXgqYfgqLAiPT09dD9lOiLgqKbgqYHgqKrgqLngqL/gqLAiPT09dD9lPj0xMD9lOmUrMTI6IuCouOCovOCovuCoriI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8i4Kiw4Ki+4KikIjplPDEwPyLgqLjgqLXgqYfgqLAiOmU8MTc/IuCopuCpgeCoquCoueCov+CosCI6ZTwyMD8i4Ki44Ki84Ki+4KiuIjoi4Kiw4Ki+4KikIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUlMTA8NSYmZSUxMD4xJiZ+fihlLzEwKSUxMCE9MX1mdW5jdGlvbiBuKGUsbixyKXt2YXIgbz1lKyIgIjtzd2l0Y2gocil7Y2FzZSJzcyI6cmV0dXJuIG8rKHQoZSk/InNla3VuZHkiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiBuPyJtaW51dGEiOiJtaW51dMSZIjtjYXNlIm1tIjpyZXR1cm4gbysodChlKT8ibWludXR5IjoibWludXQiKTtjYXNlImgiOnJldHVybiBuPyJnb2R6aW5hIjoiZ29kemluxJkiO2Nhc2UiaGgiOnJldHVybiBvKyh0KGUpPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJNTSI6cmV0dXJuIG8rKHQoZSk/Im1pZXNpxIVjZSI6Im1pZXNpxJljeSIpO2Nhc2UieXkiOnJldHVybiBvKyh0KGUpPyJsYXRhIjoibGF0Iil9fXZhciByPSJzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYQiLnNwbGl0KCJfIiksbz0ic3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplxZtuaWFfcGHFumR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInBsIix7bW9udGhzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/IiI9PT10PyIoIitvW2UubW9udGgoKV0rInwiK3JbZS5tb250aCgpXSsiKSI6L0QgTU1NTS8udGVzdCh0KT9vW2UubW9udGgoKV06cltlLm1vbnRoKCldOnJ9LG1vbnRoc1Nob3J0OiJzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUiLnNwbGl0KCJfIiksd2Vla2RheXM6Im5pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmR6X3Bvbl93dF/Fm3JfY3p3X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfxZpyX0N6X1B0X1NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0R6acWbIG9dIExUIixuZXh0RGF5OiJbSnV0cm8gb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgbmllZHppZWzEmSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIMWbcm9kxJkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgc29ib3TEmSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pvcmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3rFgsSFIG5pZWR6aWVsxJkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzesWCxIUgxZtyb2TEmSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUIjtkZWZhdWx0OnJldHVybiJbVyB6ZXN6xYJ5XSBkZGRkIFtvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoiJXMgdGVtdSIsczoia2lsa2Egc2VrdW5kIixzczpuLG06bixtbTpuLGg6bixoaDpuLGQ6IjEgZHppZcWEIixkZDoiJWQgZG5pIixNOiJtaWVzacSFYyIsTU06bix5OiJyb2siLHl5Om59LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJwdC1iciIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyw6dvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyw6dhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU8OhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9Tw6FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18ywqpfM8KqXzTCql81wqpfNsKqX1PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSDDoHNdIExUIixuZXh0RGF5OiJbQW1hbmjDoyDDoHNdIExUIixuZXh0V2VlazoiZGRkZCBbw6BzXSBMVCIsbGFzdERheToiW09udGVtIMOgc10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpfHw2PT09dGhpcy5kYXkoKT8iW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQiOiJbw5psdGltYV0gZGRkZCBbw6BzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJow6EgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtw6pzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroifSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU8OhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgw6BzXSBMVCIsbmV4dERheToiW0FtYW5ow6Mgw6BzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW8Ogc10gTFQiLGxhc3REYXk6IltPbnRlbSDDoHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IlvDmmx0aW1vXSBkZGRkIFvDoHNdIExUIjoiW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaMOhICVzIixzOiJzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtw6pzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCxuKXt2YXIgcj17c3M6InNlY3VuZGUiLG1tOiJtaW51dGUiLGhoOiJvcmUiLGRkOiJ6aWxlIixNTToibHVuaSIseXk6ImFuaSJ9LG89IiAiO3JldHVybihlJTEwMD49MjB8fGU+PTEwMCYmZSUxMDA9PTApJiYobz0iIGRlICIpLGUrbytyW25dfXJldHVybiBlLmRlZmluZUxvY2FsZSgicm8iLHttb250aHM6ImlhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imlhbi5fZmVici5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY8SDX2x1bmlfbWFyyJtpX21pZXJjdXJpX2pvaV92aW5lcmlfc8OibWLEg3TEgyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEdV9MdV9NYV9NaV9Kb19WaV9Tw6IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlthemkgbGFdIExUIixuZXh0RGF5OiJbbcOiaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyDDrm4gdXJtxIMiLHM6ImPDonRldmEgc2VjdW5kZSIsc3M6dCxtOiJ1biBtaW51dCIsbW06dCxoOiJvIG9yxIMiLGhoOnQsZDoibyB6aSIsZGQ6dCxNOiJvIGx1bsSDIixNTTp0LHk6InVuIGFuIix5eTp0fSx3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQpe3ZhciBuPWUuc3BsaXQoIl8iKTtyZXR1cm4gdCUxMD09MSYmdCUxMDAhPTExP25bMF06dCUxMD49MiYmdCUxMDw9NCYmKHQlMTAwPDEwfHx0JTEwMD49MjApP25bMV06blsyXX1mdW5jdGlvbiBuKGUsbixyKXt2YXIgbz17c3M6bj8i0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0Ijoi0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0IixtbTpuPyLQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YIiOiLQvNC40L3Rg9GC0YNf0LzQuNC90YPRgtGLX9C80LjQvdGD0YIiLGhoOiLRh9Cw0YFf0YfQsNGB0LBf0YfQsNGB0L7QsiIsZGQ6ItC00LXQvdGMX9C00L3Rj1/QtNC90LXQuSIsTU06ItC80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyIix5eToi0LPQvtC0X9Cz0L7QtNCwX9C70LXRgiJ9O3JldHVybiJtIj09PXI/bj8i0LzQuNC90YPRgtCwIjoi0LzQuNC90YPRgtGDIjplKyIgIit0KG9bcl0sK2UpfXZhciByPVsvXtGP0L3Qsi9pLC9e0YTQtdCyL2ksL17QvNCw0YAvaSwvXtCw0L/RgC9pLC9e0LzQsFvQudGPXS9pLC9e0LjRjtC9L2ksL17QuNGO0LsvaSwvXtCw0LLQsy9pLC9e0YHQtdC9L2ksL17QvtC60YIvaSwvXtC90L7Rjy9pLC9e0LTQtdC6L2ldO3JldHVybiBlLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoi0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRjyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0Ontmb3JtYXQ6ItGP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6LiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLRj9C90LIuX9GE0LXQstGALl/QvNCw0YDRgl/QsNC/0YAuX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouIi5zcGxpdCgiXyIpfSx3ZWVrZGF5czp7c3RhbmRhbG9uZToi0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAiLnNwbGl0KCJfIiksZm9ybWF0OiLQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1vQktCyXSA/KD860L/RgNC+0YjQu9GD0Y580YHQu9C10LTRg9GO0YnRg9GOfNGN0YLRgyk/ID9cXSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6ItCy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItCy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6cixsb25nTW9udGhzUGFyc2U6cixzaG9ydE1vbnRoc1BhcnNlOnIsbW9udGhzUmVnZXg6L14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1wuP3zQvNCw0YDRgtCwP3zQvNCw0YBcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1wuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1wuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1wuP3zQvNCw0YDRgtCwP3zQvNCw0YBcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1wuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1wuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKNGP0L3QstCw0YBb0Y/RjF180YTQtdCy0YDQsNC7W9GP0YxdfNC80LDRgNGC0LA/fNCw0L/RgNC10Ltb0Y/RjF180LzQsFvRj9C5XXzQuNGO0L1b0Y/RjF180LjRjtC7W9GP0YxdfNCw0LLQs9GD0YHRgtCwP3zRgdC10L3RgtGP0LHRgFvRj9GMXXzQvtC60YLRj9Cx0YBb0Y/RjF180L3QvtGP0LHRgFvRj9GMXXzQtNC10LrQsNCx0YBb0Y/RjF0pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXijRj9C90LJcLnzRhNC10LLRgD9cLnzQvNCw0YBb0YIuXXzQsNC/0YBcLnzQvNCwW9GP0LldfNC40Y7QvVvRjNGPLl180LjRjtC7W9GM0Y8uXXzQsNCy0LNcLnzRgdC10L3Rgj9cLnzQvtC60YJcLnzQvdC+0Y/QsT9cLnzQtNC10LpcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZINCzLiIsTExMOiJEIE1NTU0gWVlZWSDQsy4sIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZINCzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0KHQtdCz0L7QtNC90Y8sINCyXSBMVCIsbmV4dERheToiW9CX0LDQstGC0YDQsCwg0LJdIExUIixsYXN0RGF5OiJb0JLRh9C10YDQsCwg0LJdIExUIixuZXh0V2VlazpmdW5jdGlvbihlKXtpZihlLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW9CS0L5dIGRkZGQsIFvQsl0gTFQiOiJb0JJdIGRkZGQsIFvQsl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlvQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW9CSINGB0LvQtdC00YPRjtGJ0YPRjl0gZGRkZCwgW9CyXSBMVCJ9fSxsYXN0V2VlazpmdW5jdGlvbihlKXtpZihlLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW9CS0L5dIGRkZGQsIFvQsl0gTFQiOiJb0JJdIGRkZGQsIFvQsl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlvQkiDQv9GA0L7RiNC70L7QtV0gZGRkZCwgW9CyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIlvQkiDQv9GA0L7RiNC70YvQuV0gZGRkZCwgW9CyXSBMVCI7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIlvQkiDQv9GA0L7RiNC70YPRjl0gZGRkZCwgW9CyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLRh9C10YDQtdC3ICVzIixwYXN0OiIlcyDQvdCw0LfQsNC0IixzOiLQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0IixzczpuLG06bixtbTpuLGg6ItGH0LDRgSIsaGg6bixkOiLQtNC10L3RjCIsZGQ6bixNOiLQvNC10YHRj9GGIixNTTpuLHk6ItCz0L7QtCIseXk6bn0sbWVyaWRpZW1QYXJzZTov0L3QvtGH0Lh80YPRgtGA0LB80LTQvdGPfNCy0LXRh9C10YDQsC9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8i0L3QvtGH0LgiOmU8MTI/ItGD0YLRgNCwIjplPDE3PyLQtNC90Y8iOiLQstC10YfQtdGA0LAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LSjQuXzQs9C+fNGPKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBlKyIt0LkiO2Nhc2UiRCI6cmV0dXJuIGUrIi3Qs9C+IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIi3RjyI7ZGVmYXVsdDpyZXR1cm4gZX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bItis2YbZiNix2YoiLCLZgdmK2KjYsdmI2LHZiiIsItmF2KfYsdqGIiwi2KfZvtix2YrZhCIsItmF2KbZiiIsItis2YjZhiIsItis2YjZhNin2KHZkCIsItii2q/Ys9m9Iiwi2LPZitm+2b3Zhdio2LEiLCLYotqq2b3ZiNio2LEiLCLZhtmI2YXYqNixIiwi2orYs9mF2KjYsSJdLG49WyLYotqG2LEiLCLYs9mI2YXYsSIsItin2rHYp9ix2YgiLCLYp9ix2KjYuSIsItiu2YXZitizIiwi2KzZhdi5Iiwi2ofZhtqH2LEiXTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInNkIix7bW9udGhzOnQsbW9udGhzU2hvcnQ6dCx3ZWVrZGF5czpuLHdlZWtkYXlzU2hvcnQ6bix3ZWVrZGF5c01pbjpuLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov2LXYqNitfNi02KfZhS8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i2LTYp9mFIj09PWV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8i2LXYqNitIjoi2LTYp9mFIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9qEXSBMVCIsbmV4dERheToiW9iz2oDYp9q72YpdIExUIixuZXh0V2VlazoiZGRkZCBb2Kfas9mK2YYg2YfZgdiq2Yog2KrZil0gTFQiLGxhc3REYXk6Ilvaqtin2YTZh9mHXSBMVCIsbGFzdFdlZWs6Ilvar9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg2b7ZiNihIixwYXN0OiIlcyDYp9qzIixzOiLahtmG2K8g2LPZitqq2YbaiiIsc3M6IiVkINiz2YraqtmG2ooiLG06ItmH2qog2YXZhtm9IixtbToiJWQg2YXZhtm9IixoOiLZh9qqINqq2YTYp9qqIixoaDoiJWQg2qrZhNin2qoiLGQ6ItmH2qog2o/ZitmG2YfZhiIsZGQ6IiVkINqP2YrZhtmH2YYiLE06ItmH2qog2YXZh9mK2YbZiCIsTU06IiVkINmF2YfZitmG2KciLHk6ItmH2qog2LPYp9mEIix5eToiJWQg2LPYp9mEIn0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im/EkcSRYWphZ2Vtw6FubnVfZ3VvdnZhbcOhbm51X25qdWvEjWFtw6FubnVfY3VvxYtvbcOhbm51X21pZXNzZW3DoW5udV9nZWFzc2Vtw6FubnVfc3VvaWRuZW3DoW5udV9ib3JnZW3DoW5udV/EjWFrxI1hbcOhbm51X2dvbGdnb3Rtw6FubnVfc2vDoWJtYW3DoW5udV9qdW92bGFtw6FubnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Im/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic290bmFiZWFpdmlfdnVvc3PDoXJnYV9tYcWLxYtlYsOhcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbMOhdnZhcmRhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzb3RuX3Z1b3NfbWHFi19nYXNrX2R1b3JfYmVhcl9sw6F2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzX3ZfbV9nX2RfYl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJNTU1NIEQuIFtiLl0gWVlZWSIsTExMOiJNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW290bmUgdGldIExUIixuZXh0RGF5OiJbaWh0dGluIHRpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3RpXSBMVCIsbGFzdERheToiW2lrdGUgdGldIExUIixsYXN0V2VlazoiW292ZGRpdF0gZGRkZCBbdGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBnZWHFvmVzIixwYXN0OiJtYcWLaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbcOhbm51IixNTToiJWQgbcOhbnV0Iix5OiJva3RhIGphaGtpIix5eToiJWQgamFnaXQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6IuC2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4LaJ4La74LeS4Lav4LePX+C3g+C2s+C3lOC2r+C3j1/gtoXgtp/gt4Tgtrvgt5Tgt4Dgt4/gtq/gt49f4La24Lav4LeP4Lav4LePX+C2tuC3iuKAjeC2u+C3hOC3g+C3iuC2tOC2reC3kuC2seC3iuC2r+C3j1/gt4Pgt5Lgtprgt5Tgtrvgt4/gtq/gt49f4LeD4LeZ4Lax4LeD4LeU4La74LeP4Lav4LePIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuC2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBb4LeA4LeQ4Lax4LeSXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW+C2heC2r10gTFRb4LanXSIsbmV4dERheToiW+C3hOC3meC2p10gTFRb4LanXSIsbmV4dFdlZWs6ImRkZGQgTFRb4LanXSIsbGFzdERheToiW+C2iuC2uuC3ml0gTFRb4LanXSIsbGFzdFdlZWs6IlvgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPgtprgt5LgtrHgt4oiLHBhc3Q6IiVz4Laa4LanIOC2tOC3meC2uyIsczoi4Lat4Lat4LeK4La04La7IOC2muC3kuC3hOC3kuC2tOC2uiIsc3M6IuC2reC2reC3iuC2tOC2uyAlZCIsbToi4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAIixtbToi4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUICVkIixoOiLgtrTgt5DgtroiLGhoOiLgtrTgt5DgtrogJWQiLGQ6IuC2r+C3kuC2seC2uiIsZGQ6IuC2r+C3kuC2sSAlZCIsTToi4La44LeP4LeD4La6IixNTToi4La44LeP4LeDICVkIix5OiLgt4Dgt4PgtrsiLHl5OiLgt4Dgt4PgtrsgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IOC3gOC3kOC2seC3ki8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIOC3gOC3kOC2seC3kiJ9LG1lcmlkaWVtUGFyc2U6L+C2tOC3meC2uyDgt4Dgtrvgt5R84La04LeD4LeKIOC3gOC2u+C3lHzgtrTgt5ku4LeAfOC2tC7gt4AuLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLgtrQu4LeALiI9PT1lfHwi4La04LeD4LeKIOC3gOC2u+C3lCI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+MTE/bj8i4La0LuC3gC4iOiLgtrTgt4Pgt4og4LeA4La74LeUIjpuPyLgtrTgt5ku4LeALiI6IuC2tOC3meC2uyDgt4Dgtrvgt5QifX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3JldHVybiBlPjEmJmU8NX1mdW5jdGlvbiBuKGUsbixyLG8pe3ZhciBzPWUrIiAiO3N3aXRjaChyKXtjYXNlInMiOnJldHVybiBufHxvPyJww6FyIHNla8O6bmQiOiJww6FyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIG58fG8/cysodChlKT8ic2VrdW5keSI6InNla8O6bmQiKTpzKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIG4/Im1pbsO6dGEiOm8/Im1pbsO6dHUiOiJtaW7DunRvdSI7Y2FzZSJtbSI6cmV0dXJuIG58fG8/cysodChlKT8ibWluw7p0eSI6Im1pbsO6dCIpOnMrIm1pbsO6dGFtaSI7Y2FzZSJoIjpyZXR1cm4gbj8iaG9kaW5hIjpvPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJob2RpbnkiOiJob2TDrW4iKTpzKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gbnx8bz8iZGXFiCI6ImTFiG9tIjtjYXNlImRkIjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJkbmkiOiJkbsOtIik6cysiZMWIYW1pIjtjYXNlIk0iOnJldHVybiBufHxvPyJtZXNpYWMiOiJtZXNpYWNvbSI7Y2FzZSJNTSI6cmV0dXJuIG58fG8/cysodChlKT8ibWVzaWFjZSI6Im1lc2lhY292Iik6cysibWVzaWFjbWkiO2Nhc2UieSI6cmV0dXJuIG58fG8/InJvayI6InJva29tIjtjYXNlInl5IjpyZXR1cm4gbnx8bz9zKyh0KGUpPyJyb2t5Ijoicm9rb3YiKTpzKyJyb2ttaSJ9fXZhciByPSJqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG89Imphbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO3JldHVybiBlLmRlZmluZUxvY2FsZSgic2siLHttb250aHM6cixtb250aHNTaG9ydDpvLHdlZWtkYXlzOiJuZWRlxL5hX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfxaF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF/FoXRfcGlfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3N0X8WhdF9waV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyBvXSBMVCIsbmV4dERheToiW3phanRyYSBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRlxL51IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byDFoXR2cnRvayBvXSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwaWF0b2sgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IG9dIExUIn19LGxhc3REYXk6Ilt2xI1lcmEgb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsw7ogbmVkZcS+dSBvXSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsw71dIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bMO6IHN0cmVkdSBvXSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsw71dIGRkZGQgW29dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bMO6IHNvYm90dSBvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlZCAlcyIsczpuLHNzOm4sbTpuLG1tOm4saDpuLGhoOm4sZDpuLGRkOm4sTTpuLE1NOm4seTpuLHl5Om59LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgbz1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzIjpyZXR1cm4gdHx8cj8ibmVrYWogc2VrdW5kIjoibmVrYWogc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gbys9MT09PWU/dD8ic2VrdW5kbyI6InNla3VuZGkiOjI9PT1lP3R8fHI/InNla3VuZGkiOiJzZWt1bmRhaCI6ZTw1P3R8fHI/InNla3VuZGUiOiJzZWt1bmRhaCI6InNla3VuZCI7Y2FzZSJtIjpyZXR1cm4gdD8iZW5hIG1pbnV0YSI6ImVubyBtaW51dG8iO2Nhc2UibW0iOnJldHVybiBvKz0xPT09ZT90PyJtaW51dGEiOiJtaW51dG8iOjI9PT1lP3R8fHI/Im1pbnV0aSI6Im1pbnV0YW1hIjplPDU/dHx8cj8ibWludXRlIjoibWludXRhbWkiOnR8fHI/Im1pbnV0IjoibWludXRhbWkiO2Nhc2UiaCI6cmV0dXJuIHQ/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gbys9MT09PWU/dD8idXJhIjoidXJvIjoyPT09ZT90fHxyPyJ1cmkiOiJ1cmFtYSI6ZTw1P3R8fHI/InVyZSI6InVyYW1pIjp0fHxyPyJ1ciI6InVyYW1pIjtjYXNlImQiOnJldHVybiB0fHxyPyJlbiBkYW4iOiJlbmltIGRuZW0iO2Nhc2UiZGQiOnJldHVybiBvKz0xPT09ZT90fHxyPyJkYW4iOiJkbmVtIjoyPT09ZT90fHxyPyJkbmkiOiJkbmV2b21hIjp0fHxyPyJkbmkiOiJkbmV2aSI7Y2FzZSJNIjpyZXR1cm4gdHx8cj8iZW4gbWVzZWMiOiJlbmltIG1lc2VjZW0iO2Nhc2UiTU0iOnJldHVybiBvKz0xPT09ZT90fHxyPyJtZXNlYyI6Im1lc2VjZW0iOjI9PT1lP3R8fHI/Im1lc2VjYSI6Im1lc2VjZW1hIjplPDU/dHx8cj8ibWVzZWNlIjoibWVzZWNpIjp0fHxyPyJtZXNlY2V2IjoibWVzZWNpIjtjYXNlInkiOnJldHVybiB0fHxyPyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBvKz0xPT09ZT90fHxyPyJsZXRvIjoibGV0b20iOjI9PT1lP3R8fHI/ImxldGkiOiJsZXRvbWEiOmU8NT90fHxyPyJsZXRhIjoibGV0aSI6dHx8cj8ibGV0IjoibGV0aSJ9fXJldHVybiBlLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV/EjWV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3RvX3NyX8SNZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5lcyBvYl0gTFQiLG5leHREYXk6IltqdXRyaSBvYl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ZdIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIlt2XSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ZdIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ZdIGRkZGQgW29iXSBMVCJ9fSxsYXN0RGF5OiJbdsSNZXJhaiBvYl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ByZWrFoW5qb10gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIltwcmVqxaFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IsSNZXogJXMiLHBhc3Q6InByZWQgJXMiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic3EiLHttb250aHM6IkphbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX07Dq250b3JfRGhqZXRvciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6siLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRGllX0jDq25fTWFyX03Dq3JfRW5qX1ByZV9TaHQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRfSF9NYV9Nw6tfRV9QX1NoIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4iTSI9PT1lLmNoYXJBdCgwKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyPyJQRCI6Ik1EIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbU290IG7Dq10gTFQiLG5leHREYXk6IltOZXPDq3IgbsOrXSBMVCIsbmV4dFdlZWs6ImRkZGQgW27Dq10gTFQiLGxhc3REYXk6IltEamUgbsOrXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFyIG7Dq10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im7DqyAlcyIscGFzdDoiJXMgbcOrIHBhcsOrIixzOiJkaXNhIHNla29uZGEiLHNzOiIlZCBzZWtvbmRhIixtOiJuasOrIG1pbnV0w6siLG1tOiIlZCBtaW51dGEiLGg6Im5qw6sgb3LDqyIsaGg6IiVkIG9yw6siLGQ6Im5qw6sgZGl0w6siLGRkOiIlZCBkaXTDqyIsTToibmrDqyBtdWFqIixNTToiJWQgbXVhaiIseToibmrDqyB2aXQiLHl5OiIlZCB2aXRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXt3b3Jkczp7c3M6WyLRgdC10LrRg9C90LTQsCIsItGB0LXQutGD0L3QtNC1Iiwi0YHQtdC60YPQvdC00LgiXSxtOlsi0ZjQtdC00LDQvSDQvNC40L3Rg9GCIiwi0ZjQtdC00L3QtSDQvNC40L3Rg9GC0LUiXSxtbTpbItC80LjQvdGD0YIiLCLQvNC40L3Rg9GC0LUiLCLQvNC40L3Rg9GC0LAiXSxoOlsi0ZjQtdC00LDQvSDRgdCw0YIiLCLRmNC10LTQvdC+0LMg0YHQsNGC0LAiXSxoaDpbItGB0LDRgiIsItGB0LDRgtCwIiwi0YHQsNGC0LgiXSxkZDpbItC00LDQvSIsItC00LDQvdCwIiwi0LTQsNC90LAiXSxNTTpbItC80LXRgdC10YYiLCLQvNC10YHQtdGG0LAiLCLQvNC10YHQtdGG0LgiXSx5eTpbItCz0L7QtNC40L3QsCIsItCz0L7QtNC40L3QtSIsItCz0L7QtNC40L3QsCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDE9PT1lP3RbMF06ZT49MiYmZTw9ND90WzFdOnRbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihlLG4scil7dmFyIG89dC53b3Jkc1tyXTtyZXR1cm4gMT09PXIubGVuZ3RoP24/b1swXTpvWzFdOmUrIiAiK3QuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShlLG8pfX07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJzci1jeXJsIix7bW9udGhzOiLRmNCw0L3Rg9Cw0YBf0YTQtdCx0YDRg9Cw0YBf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LHQsNGAX9C+0LrRgtC+0LHQsNGAX9C90L7QstC10LzQsdCw0YBf0LTQtdGG0LXQvNCx0LDRgCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0ZjQsNC9Ll/RhNC10LEuX9C80LDRgC5f0LDQv9GALl/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LMuX9GB0LXQvy5f0L7QutGCLl/QvdC+0LIuX9C00LXRhi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi0L3QtdC00LXRmdCwX9C/0L7QvdC10LTQtdGZ0LDQul/Rg9GC0L7RgNCw0Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQsNC6X9C/0LXRgtCw0Lpf0YHRg9Cx0L7RgtCwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItC90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItC90LVf0L/Qvl/Rg9GCX9GB0YBf0YfQtV/Qv9C1X9GB0YMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0LTQsNC90LDRgSDRg10gTFQiLG5leHREYXk6IlvRgdGD0YLRgNCwINGDXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQiO2Nhc2UgMzpyZXR1cm4iW9GDXSBb0YHRgNC10LTRg10gW9GDXSBMVCI7Y2FzZSA2OnJldHVybiJb0YNdIFvRgdGD0LHQvtGC0YNdIFvRg10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW9GDXSBkZGRkIFvRg10gTFQifX0sbGFzdERheToiW9GY0YPRh9C1INGDXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIlvQv9GA0L7RiNC70LVdIFvQvdC10LTQtdGZ0LVdIFvRg10gTFQiLCJb0L/RgNC+0YjQu9C+0LNdIFvQv9C+0L3QtdC00LXRmdC60LBdIFvRg10gTFQiLCJb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQiLCJb0L/RgNC+0YjQu9C1XSBb0YHRgNC10LTQtV0gW9GDXSBMVCIsIlvQv9GA0L7RiNC70L7Qs10gW9GH0LXRgtCy0YDRgtC60LBdIFvRg10gTFQiLCJb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUIiwiW9C/0YDQvtGI0LvQtV0gW9GB0YPQsdC+0YLQtV0gW9GDXSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLQt9CwICVzIixwYXN0OiLQv9GA0LUgJXMiLHM6ItC90LXQutC+0LvQuNC60L4g0YHQtdC60YPQvdC00LgiLHNzOnQudHJhbnNsYXRlLG06dC50cmFuc2xhdGUsbW06dC50cmFuc2xhdGUsaDp0LnRyYW5zbGF0ZSxoaDp0LnRyYW5zbGF0ZSxkOiLQtNCw0L0iLGRkOnQudHJhbnNsYXRlLE06ItC80LXRgdC10YYiLE1NOnQudHJhbnNsYXRlLHk6ItCz0L7QtNC40L3RgyIseXk6dC50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9e3dvcmRzOntzczpbInNla3VuZGEiLCJzZWt1bmRlIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5lIG1pbnV0ZSJdLG1tOlsibWludXQiLCJtaW51dGUiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDE9PT1lP3RbMF06ZT49MiYmZTw9ND90WzFdOnRbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihlLG4scil7dmFyIG89dC53b3Jkc1tyXTtyZXR1cm4gMT09PXIubGVuZ3RoP24/b1swXTpvWzFdOmUrIiAiK3QuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShlLG8pfX07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJzciIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfxI1lX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRlbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdcSNZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm/FoWxlXSBbbmVkZWxqZV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbcG9uZWRlbGprYV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvxaFsZV0gW3NyZWRlXSBbdV0gTFQiLCJbcHJvxaFsb2ddIFvEjWV0dnJ0a2FdIFt1XSBMVCIsIltwcm/FoWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOnQudHJhbnNsYXRlLG06dC50cmFuc2xhdGUsbW06dC50cmFuc2xhdGUsaDp0LnRyYW5zbGF0ZSxoaDp0LnRyYW5zbGF0ZSxkOiJkYW4iLGRkOnQudHJhbnNsYXRlLE06Im1lc2VjIixNTTp0LnRyYW5zbGF0ZSx5OiJnb2RpbnUiLHl5OnQudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic3MiLHttb250aHM6IkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkJoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfVXNfTGJfTHRfTHNfTGhfVWciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltOYW11aGxhIG5nYV0gTFQiLG5leHREYXk6IltLdXNhc2EgbmdhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25nYV0gTFQiLGxhc3REYXk6IltJdG9sbyBuZ2FdIExUIixsYXN0V2VlazoiZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuZ2EgJXMiLHBhc3Q6IndlbnRla2EgbmdhICVzIixzOiJlbWl6dXp3YW5hIGxvbWNhbmUiLHNzOiIlZCBtenV6d2FuYSIsbToidW16dXp1IixtbToiJWQgZW1penV6dSIsaDoibGlob3JhIixoaDoiJWQgZW1haG9yYSIsZDoibGlsYW5nYSIsZGQ6IiVkIGVtYWxhbmdhIixNOiJpbnlhbmdhIixNTToiJWQgdGlueWFuZ2EiLHk6InVtbnlha2EiLHl5OiIlZCBpbWlueWFrYSJ9LG1lcmlkaWVtUGFyc2U6L2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTE/ImVrdXNlbmkiOmU8MTU/ImVtaW5pIjplPDE5PyJlbnRzYW1iYW1hIjoiZWJ1c3VrdSJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCJla3VzZW5pIj09PXQ/ZToiZW1pbmkiPT09dD9lPj0xMT9lOmUrMTI6ImVudHNhbWJhbWEiPT09dHx8ImVidXN1a3UiPT09dD8wPT09ZT8wOmUrMTI6dm9pZCAwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOiIlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic3YiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic8O2X23DpV90aV9vbl90b19mcl9sw7YiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJZGFnXSBMVCIsbmV4dERheToiW0ltb3Jnb25dIExUIixsYXN0RGF5OiJbSWfDpXJdIExUIixuZXh0V2VlazoiW1DDpV0gZGRkZCBMVCIsbGFzdFdlZWs6IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiZsO2ciAlcyBzZWRhbiIsczoibsOlZ3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtw6VuYWQiLE1NOiIlZCBtw6VuYWRlciIseToiZXR0IMOlciIseXk6IiVkIMOlciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXxhKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwO3JldHVybiBlKygxPT1+fihlJTEwMC8xMCk/ImUiOjE9PT10PyJhIjoyPT09dD8iYSI6ImUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgic3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2xlbyBzYWFdIExUIixuZXh0RGF5OiJba2VzaG8gc2FhXSBMVCIsbmV4dFdlZWs6Ilt3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2phbmFdIExUIixsYXN0V2VlazoiW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFhZGF5ZSIscGFzdDoidG9rZWEgJXMiLHM6ImhpdmkgcHVuZGUiLHNzOiJzZWt1bmRlICVkIixtOiJkYWtpa2EgbW9qYSIsbW06ImRha2lrYSAlZCIsaDoic2FhIGxpbW9qYSIsaGg6Im1hc2FhICVkIixkOiJzaWt1IG1vamEiLGRkOiJtYXNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ezE6IuCvpyIsMjoi4K+oIiwzOiLgr6kiLDQ6IuCvqiIsNToi4K+rIiw2OiLgr6wiLDc6IuCvrSIsODoi4K+uIiw5OiLgr68iLDA6IuCvpiJ9LG49eyLgr6ciOiIxIiwi4K+oIjoiMiIsIuCvqSI6IjMiLCLgr6oiOiI0Iiwi4K+rIjoiNSIsIuCvrCI6IjYiLCLgr60iOiI3Iiwi4K+uIjoiOCIsIuCvryI6IjkiLCLgr6YiOiIwIn07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ0YSIse21vbnRoczoi4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuCunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4hf4K6k4K6/4K6Z4K+N4K6V4K6f4K+N4K6V4K6/4K604K6u4K+IX+CumuCvhuCuteCvjeCuteCuvuCur+CvjeCuleCuv+CutOCuruCviF/grqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4hf4K614K6/4K6v4K6+4K604K6V4K+N4K6V4K6/4K604K6u4K+IX+CuteCvhuCus+CvjeCus+Cuv+CuleCvjeCuleCuv+CutOCuruCviF/grprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4giLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLgrp7grr5f4K6k4K6/X+CumuCvhl/grqrgr4Ff4K614K6/X+CuteCvhl/grpoiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilvgrofgrqngr43grrHgr4FdIExUIixuZXh0RGF5OiJb4K6o4K6+4K6z4K+IXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4K6o4K+H4K6x4K+N4K6x4K+BXSBMVCIsbGFzdFdlZWs6IlvgrpXgrp/grqjgr43grqQg4K614K6+4K6w4K6u4K+NXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg4K6H4K6y4K+NIixwYXN0OiIlcyDgrq7gr4Hgrqngr40iLHM6IuCukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NIixzczoiJWQg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NIixtOiLgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NIixtbToiJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NIixoOiLgrpLgrrDgr4Eg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjSIsaGg6IiVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40iLGQ6IuCukuCusOCvgSDgrqjgrr7grrPgr40iLGRkOiIlZCDgrqjgrr7grp/gr43grpXgrrPgr40iLE06IuCukuCusOCvgSDgrq7grr7grqTgrq7gr40iLE1NOiIlZCDgrq7grr7grqTgrpngr43grpXgrrPgr40iLHk6IuCukuCusOCvgSDgrrXgrrDgr4Hgrp/grq7gr40iLHl5OiIlZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ94K614K6k4K+BLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKyLgrrXgrqTgr4EifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4K+n4K+o4K+p4K+q4K+r4K+s4K+t4K+u4K+v4K+mXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDI/IiDgrq/grr7grq7grq7gr40iOmU8Nj8iIOCuteCviOCuleCuseCviCI6ZTwxMD8iIOCuleCuvuCusuCviCI6ZTwxND8iIOCuqOCuo+CvjeCuquCuleCusuCvjSI6ZTwxOD8iIOCujuCuseCvjeCuquCuvuCun+CvgSI6ZTwyMj8iIOCuruCuvuCusuCviCI6IiDgrq/grr7grq7grq7gr40ifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMTI9PT1lJiYoZT0wKSwi4K6v4K6+4K6u4K6u4K+NIj09PXQ/ZTwyP2U6ZSsxMjoi4K614K+I4K6V4K6x4K+IIj09PXR8fCLgrpXgrr7grrLgr4giPT09dD9lOiLgrqjgrqPgr43grqrgrpXgrrLgr40iPT09dCYmZT49MTA/ZTplKzEyfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ0ZSIse21vbnRoczoi4LCc4LCo4LC14LCw4LC/X+Cwq+Cwv+CwrOCxjeCwsOCwteCwsOCwv1/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/4LCy4LGNX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGC4LCy4LGG4LGWX+CwhuCwl+CwuOCxjeCwn+CxgV/gsLjgsYbgsKrgsY3gsJ/gsYbgsILgsKzgsLDgsY1f4LCF4LCV4LGN4LCf4LGL4LCs4LCw4LGNX+CwqOCwteCwguCwrOCwsOCxjV/gsKHgsL/gsLjgsYbgsILgsKzgsLDgsY0iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuCwnOCwqC5f4LCr4LC/4LCs4LGN4LCwLl/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/Ll/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxguCwsuCxhuCxll/gsIbgsJcuX+CwuOCxhuCwquCxjS5f4LCF4LCV4LGN4LCf4LGLLl/gsKjgsLUuX+CwoeCwv+CwuOCxhi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi4LCG4LCm4LC/4LC14LC+4LCw4LCCX+CwuOCxi+CwruCwteCwvuCwsOCwgl/gsK7gsILgsJfgsLPgsLXgsL7gsLDgsIJf4LCs4LGB4LCn4LC14LC+4LCw4LCCX+Cwl+CxgeCwsOCxgeCwteCwvuCwsOCwgl/gsLbgsYHgsJXgsY3gsLDgsLXgsL7gsLDgsIJf4LC24LCo4LC/4LC14LC+4LCw4LCCIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCwhuCwpuCwv1/gsLjgsYvgsK5f4LCu4LCC4LCX4LCzX+CwrOCxgeCwp1/gsJfgsYHgsLDgsYFf4LC24LGB4LCV4LGN4LCwX+CwtuCwqOCwvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4LCGX+CwuOCxi1/gsK7gsIJf4LCs4LGBX+Cwl+CxgV/gsLbgsYFf4LC2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW+CwqOCxh+CwoeCxgV0gTFQiLG5leHREYXk6IlvgsLDgsYfgsKrgsYFdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IlvgsKjgsL/gsKjgsY3gsKhdIExUIixsYXN0V2VlazoiW+Cwl+CwpF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOCwsuCxiyIscGFzdDoiJXMg4LCV4LGN4LCw4LC/4LCk4LCCIixzOiLgsJXgsYrgsKjgsY3gsKjgsL8g4LCV4LGN4LC34LCj4LC+4LCy4LGBIixzczoiJWQg4LC44LGG4LCV4LCo4LGN4LCy4LGBIixtOiLgsJLgsJUg4LCo4LC/4LCu4LC/4LC34LCCIixtbToiJWQg4LCo4LC/4LCu4LC/4LC34LC+4LCy4LGBIixoOiLgsJLgsJUg4LCX4LCC4LCfIixoaDoiJWQg4LCX4LCC4LCf4LCy4LGBIixkOiLgsJLgsJUg4LCw4LGL4LCc4LGBIixkZDoiJWQg4LCw4LGL4LCc4LGB4LCy4LGBIixNOiLgsJLgsJUg4LCo4LGG4LCyIixNTToiJWQg4LCo4LGG4LCy4LCy4LGBIix5OiLgsJLgsJUg4LC44LCC4LC14LCk4LGN4LC44LCw4LCCIix5eToiJWQg4LC44LCC4LC14LCk4LGN4LC44LCw4LC+4LCy4LGBIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfeCwtS8sb3JkaW5hbDoiJWTgsLUiLG1lcmlkaWVtUGFyc2U6L+CwsOCwvuCwpOCxjeCwsOCwv3zgsIngsKbgsK/gsIJ84LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCfOCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuCwsOCwvuCwpOCxjeCwsOCwvyI9PT10P2U8ND9lOmUrMTI6IuCwieCwpuCwr+CwgiI9PT10P2U6IuCwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgiI9PT10P2U+PTEwP2U6ZSsxMjoi4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTw0PyLgsLDgsL7gsKTgsY3gsLDgsL8iOmU8MTA/IuCwieCwpuCwr+CwgiI6ZTwxNz8i4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCIjplPDIwPyLgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIIiOiLgsLDgsL7gsKTgsY3gsLDgsL8ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1w7F1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb19TZWdfVGVfS3VfS2lfU2VzX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09oaW4gaWhhXSBMVCIsbmV4dERheToiW0FiYW4gaWhhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2loYV0gTFQiLGxhc3REYXk6IltIb3Jpc2VpayBpaGFdIExUIixsYXN0V2VlazoiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaWhhICVzIixwYXN0OiIlcyBsaXViYSIsczoibWludXR1IGJhbHVuIixzczoibWludXR1ICVkIixtOiJtaW51dHUgaWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9yYXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJmdWxhbiAlZCIseToidGluYW4gaWRhIix5eToidGluYW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwO3JldHVybiBlKygxPT1+fihlJTEwMC8xMCk/InRoIjoxPT09dD8ic3QiOjI9PT10PyJuZCI6Mz09PXQ/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PXswOiIt0YPQvCIsMToiLdGD0LwiLDI6Ii3RjtC8IiwzOiIt0Y7QvCIsNDoiLdGD0LwiLDU6Ii3Rg9C8Iiw2OiIt0YPQvCIsNzoiLdGD0LwiLDg6Ii3Rg9C8Iiw5OiIt0YPQvCIsMTA6Ii3Rg9C8IiwxMjoiLdGD0LwiLDEzOiIt0YPQvCIsMjA6Ii3Rg9C8IiwzMDoiLdGO0LwiLDQwOiIt0YPQvCIsNTA6Ii3Rg9C8Iiw2MDoiLdGD0LwiLDcwOiIt0YPQvCIsODA6Ii3Rg9C8Iiw5MDoiLdGD0LwiLDEwMDoiLdGD0LwifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInRnIix7bW9udGhzOiLRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItGP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLRj9C60YjQsNC90LHQtV/QtNGD0YjQsNC90LHQtV/RgdC10YjQsNC90LHQtV/Rh9C+0YDRiNCw0L3QsdC1X9C/0LDQvdK30YjQsNC90LHQtV/St9GD0LzRitCwX9GI0LDQvdCx0LUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0Y/RiNCxX9C00YjQsV/RgdGI0LFf0YfRiNCxX9C/0YjQsV/St9GD0Lxf0YjQvdCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQiLG5leHREYXk6IlvQn9Cw0LPQvtKzINGB0L7QsNGC0LhdIExUIixsYXN0RGF5OiJb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCIsbmV4dFdlZWs6ImRkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCIsbGFzdFdlZWs6ImRkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItCx0LDRitC00LggJXMiLHBhc3Q6IiVzINC/0LXRiCIsczoi0Y/QutGH0LDQvdC0INGB0L7QvdC40Y8iLG06ItGP0Log0LTQsNKb0LjSm9CwIixtbToiJWQg0LTQsNKb0LjSm9CwIixoOiLRj9C6INGB0L7QsNGCIixoaDoiJWQg0YHQvtCw0YIiLGQ6ItGP0Log0YDTr9C3IixkZDoiJWQg0YDTr9C3IixNOiLRj9C6INC80L7SsyIsTU06IiVkINC80L7SsyIseToi0Y/QuiDRgdC+0LsiLHl5OiIlZCDRgdC+0LsifSxtZXJpZGllbVBhcnNlOi/RiNCw0LF80YHRg9Cx0rN80YDTr9C3fNCx0LXQs9C+0rMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLRiNCw0LEiPT09dD9lPDQ/ZTplKzEyOiLRgdGD0LHSsyI9PT10P2U6ItGA06/QtyI9PT10P2U+PTExP2U6ZSsxMjoi0LHQtdCz0L7SsyI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8i0YjQsNCxIjplPDExPyLRgdGD0LHSsyI6ZTwxNj8i0YDTr9C3IjplPDE5PyLQsdC10LPQvtKzIjoi0YjQsNCxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0YPQvHzRjtC8KS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgbj1lJTEwLHI9ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyh0W2VdfHx0W25dfHx0W3JdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgidGgiLHttb250aHM6IuC4oeC4geC4o+C4suC4hOC4oV/guIHguLjguKHguKDguLLguJ7guLHguJnguJjguYxf4Lih4Li14LiZ4Liy4LiE4LihX+C5gOC4oeC4qeC4suC4ouC4mV/guJ7guKTguKnguKDguLLguITguKFf4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZX+C4geC4o+C4geC4juC4suC4hOC4oV/guKrguLTguIfguKvguLLguITguKFf4LiB4Lix4LiZ4Lii4Liy4Lii4LiZX+C4leC4uOC4peC4suC4hOC4oV/guJ7guKTguKjguIjguLTguIHguLLguKLguJlf4LiY4Lix4LiZ4Lin4Liy4LiE4LihIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiLguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLguK3guLIuX+C4iC5f4LitLl/guJ4uX+C4nuC4pC5f4LioLl/guKouIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tIixMTExMOiLguKfguLHguJlkZGRk4LiX4Li14LmIIEQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tIn0sbWVyaWRpZW1QYXJzZTov4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHIj09PWV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8i4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHIjoi4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvguKfguLHguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCIsbmV4dERheToiW+C4nuC4o+C4uOC5iOC4h+C4meC4teC5iSDguYDguKfguKXguLJdIExUIixuZXh0V2VlazoiZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCIsbGFzdERheToiW+C5gOC4oeC4t+C5iOC4reC4p+C4suC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUIixsYXN0V2VlazoiW+C4p+C4seC4mV1kZGRkW+C4l+C4teC5iOC5geC4peC5ieC4pyDguYDguKfguKXguLJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLguK3guLXguIEgJXMiLHBhc3Q6IiVz4LiX4Li14LmI4LmB4Lil4LmJ4LinIixzOiLguYTguKHguYjguIHguLXguYjguKfguLTguJnguLLguJfguLUiLHNzOiIlZCDguKfguLTguJnguLLguJfguLUiLG06IjEg4LiZ4Liy4LiX4Li1IixtbToiJWQg4LiZ4Liy4LiX4Li1IixoOiIxIOC4iuC4seC5iOC4p+C5guC4oeC4hyIsaGg6IiVkIOC4iuC4seC5iOC4p+C5guC4oeC4hyIsZDoiMSDguKfguLHguJkiLGRkOiIlZCDguKfguLHguJkiLE06IjEg4LmA4LiU4Li34Lit4LiZIixNTToiJWQg4LmA4LiU4Li34Lit4LiZIix5OiIxIOC4m+C4tSIseXk6IiVkIOC4m+C4tSJ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgidGwtcGgiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZTtyZXR1cm4gdD0tMSE9PWUuaW5kZXhPZigiamFqIik/dC5zbGljZSgwLC0zKSsibGVTIjotMSE9PWUuaW5kZXhPZigiamFyIik/dC5zbGljZSgwLC0zKSsid2FRIjotMSE9PWUuaW5kZXhPZigiRElTIik/dC5zbGljZSgwLC0zKSsibmVtIjp0KyIgcElxIn1mdW5jdGlvbiBuKGUpe3ZhciB0PWU7cmV0dXJuIHQ9LTEhPT1lLmluZGV4T2YoImphaiIpP3Quc2xpY2UoMCwtMykrIkh14oCZIjotMSE9PWUuaW5kZXhPZigiamFyIik/dC5zbGljZSgwLC0zKSsid2VuIjotMSE9PWUuaW5kZXhPZigiRElTIik/dC5zbGljZSgwLC0zKSsiYmVuIjp0KyIgcmV0In1mdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBzPW8oZSk7c3dpdGNoKG4pe2Nhc2Uic3MiOnJldHVybiBzKyIgbHVwIjtjYXNlIm1tIjpyZXR1cm4gcysiIHR1cCI7Y2FzZSJoaCI6cmV0dXJuIHMrIiByZXAiO2Nhc2UiZGQiOnJldHVybiBzKyIgamFqIjtjYXNlIk1NIjpyZXR1cm4gcysiIGphciI7Y2FzZSJ5eSI6cmV0dXJuIHMrIiBESVMifX1mdW5jdGlvbiBvKGUpe3ZhciB0PU1hdGguZmxvb3IoZSUxZTMvMTAwKSxuPU1hdGguZmxvb3IoZSUxMDAvMTApLHI9ZSUxMCxvPSIiO3JldHVybiB0PjAmJihvKz1zW3RdKyJ2YXRsaCIpLG4+MCYmKG8rPSgiIiE9PW8/IiAiOiIiKStzW25dKyJtYUgiKSxyPjAmJihvKz0oIiIhPT1vPyIgIjoiIikrc1tyXSksIiI9PT1vPyJwYWdoIjpvfXZhciBzPSJwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCIuc3BsaXQoIl8iKTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGFIamFqXSBMVCIsbmV4dERheToiW3dh4oCZbGVTXSBMVCIsbmV4dFdlZWs6IkxMTCIsbGFzdERheToiW3dh4oCZSHXigJldIExUIixsYXN0V2VlazoiTExMIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOnQscGFzdDpuLHM6InB1UyBsdXAiLHNzOnIsbToid2HigJkgdHVwIixtbTpyLGg6Indh4oCZIHJlcCIsaGg6cixkOiJ3YeKAmSBqYWoiLGRkOnIsTToid2HigJkgamFyIixNTTpyLHk6Indh4oCZIERJUyIseXk6cn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ8O8bmPDvCIsNDoiJ8O8bmPDvCIsMTAwOiInw7xuY8O8Iiw2OiInbmPEsSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ8SxbmPEsSIsOTA6IifEsW5jxLEifTtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInRyIix7bW9udGhzOiJPY2FrX8WedWJhdF9NYXJ0X05pc2FuX01hecSxc19IYXppcmFuX1RlbW11el9BxJ91c3Rvc19FeWzDvGxfRWtpbV9LYXPEsW1fQXJhbMSxayIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiT2NhX8WedWJfTWFyX05pc19NYXlfSGF6X1RlbV9BxJ91X0V5bF9Fa2lfS2FzX0FyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBhel9QdHNfU2FsX8OHYXJfUGVyX0N1bV9DdHMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX8OHYV9QZV9DdV9DdCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWfDvG4gc2FhdF0gTFQiLG5leHREYXk6Ilt5YXLEsW4gc2FhdF0gTFQiLG5leHRXZWVrOiJbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6Iltkw7xuXSBMVCIsbGFzdFdlZWs6IltnZcOnZW5dIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgw7ZuY2UiLHM6ImJpcmthw6cgc2FuaXllIixzczoiJWQgc2FuaXllIixtOiJiaXIgZGFraWthIixtbToiJWQgZGFraWthIixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnw7xuIixkZDoiJWQgZ8O8biIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5xLFsIix5eToiJWQgecSxbCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSxuKXtzd2l0Y2gobil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBlO2RlZmF1bHQ6aWYoMD09PWUpcmV0dXJuIGUrIifEsW5jxLEiO3ZhciByPWUlMTAsbz1lJTEwMC1yLHM9ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyh0W3JdfHx0W29dfHx0W3NdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgbz17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltlKyIgc2VjdW5kcyIsZSsiIHNlY3VuZHMiXSxtOlsiJ24gbcOtdXQiLCInaWVucyBtw611dCJdLG1tOltlKyIgbcOtdXRzIixlKyIgbcOtdXRzIl0saDpbIiduIMO+b3JhIiwiJ2llbnNhIMO+b3JhIl0saGg6W2UrIiDDvm9yYXMiLGUrIiDDvm9yYXMiXSxkOlsiJ24geml1YSIsIidpZW5zYSB6aXVhIl0sZGQ6W2UrIiB6aXVhcyIsZSsiIHppdWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltlKyIgbWVzZW4iLGUrIiBtZXNlbiJdLHk6WyInbiBhciIsIidpZW5zIGFyIl0seXk6W2UrIiBhcnMiLGUrIiBhcnMiXX07cmV0dXJuIHI/b1tuXVswXTp0P29bbl1bMF06b1tuXVsxXX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoInR6bCIse21vbnRoczoiSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlPDumxhZGlfTMO6bmXDp2lfTWFpdHppX03DoXJjdXJpX1how7phZGlfVmnDqW5lcsOnaV9Tw6F0dXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlPDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkiLExMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIixMTExMOiJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2RcJ298ZFwnYS9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuImQnbyI9PT1lLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT4xMT9uPyJkJ28iOiJEJ08iOm4/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3hoaSDDoF0gTFQiLG5leHREYXk6IltkZW3DoCDDoF0gTFQiLG5leHRXZWVrOiJkZGRkIFvDoF0gTFQiLGxhc3REYXk6IltpZWlyaSDDoF0gTFQiLGxhc3RXZWVrOiJbc8O8ciBlbF0gZGRkZCBbbGFzdGV1IMOgXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3NwcmVpICVzIixwYXN0OiJqYSVzIixzOnQsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOnQsZGQ6dCxNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInR6bS1sYXRuIix7bW9udGhzOiJpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilthc2RraCBnXSBMVCIsbmV4dERheToiW2Fza2EgZ10gTFQiLG5leHRXZWVrOiJkZGRkIFtnXSBMVCIsbGFzdERheToiW2Fzc2FudCBnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2ddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWRraCBzIHlhbiAlcyIscGFzdDoieWFuICVzIixzOiJpbWlrIixzczoiJWQgaW1payIsbToibWludeG4jSIsbW06IiVkIG1pbnXhuI0iLGg6InNhyZthIixoaDoiJWQgdGFzc2HJm2luIixkOiJhc3MiLGRkOiIlZCBvc3NhbiIsTToiYXlvd3IiLE1NOiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ0em0iLHttb250aHM6IuK1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuK0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4rSw4rWZ4rS34rWFIOK0tF0gTFQiLG5leHREYXk6IlvitLDitZnitL3itLAg4rS0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW+K0tF0gTFQiLGxhc3REYXk6IlvitLDitZritLDitY/itZwg4rS0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW+K0tF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IuK0t+K0sOK0t+K1hSDitZkg4rWi4rSw4rWPICVzIixwYXN0OiLitaLitLDitY8gJXMiLHM6IuK1ieK1juK1ieK0vSIsc3M6IiVkIOK1ieK1juK1ieK0vSIsbToi4rWO4rWJ4rWP4rWT4rS6IixtbToiJWQg4rWO4rWJ4rWP4rWT4rS6IixoOiLitZnitLDitYTitLAiLGhoOiIlZCDitZzitLDitZnitZnitLDitYTitYnitY8iLGQ6IuK0sOK1meK1mSIsZGQ6IiVkIG/itZnitZnitLDitY8iLE06IuK0sOK1om/itZPitZQiLE1NOiIlZCDitYnitaLitaLitYnitZTitY8iLHk6IuK0sOK1meK0s+K0sOK1mSIseXk6IiVkIOK1ieK1meK0s+K0sOK1meK1jyJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoi2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItmK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25UiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiSIsTExMOiJZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0iLExMTEw6ImRkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/ZituQ2LHZidmFINmD25DahtuVfNiz25XavtuV2LF82obbiNi02KrZidmGINio24fYsduH2YZ82obbiNi0fNqG24jYtNiq2YnZhiDZg9uQ2YrZidmGfNmD25Xahi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksItmK25DYsdmJ2YUg2YPbkNqG25UiPT09dHx8Itiz25XavtuV2LEiPT09dHx8ItqG24jYtNiq2YnZhiDYqNuH2LHbh9mGIj09PXQ/ZToi2obbiNi02KrZidmGINmD25DZitmJ2YYiPT09dHx8ItmD25XahiI9PT10P2UrMTI6ZT49MTE/ZTplKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9MTAwKmUrdDtyZXR1cm4gcjw2MDA/ItmK25DYsdmJ2YUg2YPbkNqG25UiOnI8OTAwPyLYs9uV2r7bldixIjpyPDExMzA/ItqG24jYtNiq2YnZhiDYqNuH2LHbh9mGIjpyPDEyMzA/ItqG24jYtCI6cjwxODAwPyLahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhiI6ItmD25XahiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KjbiNqv24jZhiDYs9in2KbbldiqXSBMVCIsbmV4dERheToiW9im25XYqtuVINiz2KfYptuV2KpdIExUIixuZXh0V2VlazoiW9mD25DZhNuV2LHZg9mJXSBkZGRkIFvYs9in2KbbldiqXSBMVCIsbGFzdERheToiW9iq24bZhtuI2q/biNmGXSBMVCIsbGFzdFdlZWs6IlvYptin2YTYr9mJ2YbZgtmJXSBkZGRkIFvYs9in2KbbldiqXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg2YPbkNmK2YnZhiIscGFzdDoiJXMg2Kjbh9ix24fZhiIsczoi2YbbldqG2obblSDYs9uQ2YPZiNmG2KoiLHNzOiIlZCDYs9uQ2YPZiNmG2KoiLG06Itio2YnYsSDZhdmJ2Ybbh9iqIixtbToiJWQg2YXZidmG24fYqiIsaDoi2KjZidixINiz2KfYptuV2KoiLGhoOiIlZCDYs9in2KbbldiqIixkOiLYqNmJ2LEg2YPbiNmGIixkZDoiJWQg2YPbiNmGIixNOiLYqNmJ2LEg2KbYp9mKIixNTToiJWQg2KbYp9mKIix5OiLYqNmJ2LEg2YrZidmEIix5eToiJWQg2YrZidmEIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZSsiLdmD24jZhtmJIjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIi3avtuV2b7YqtuVIjtkZWZhdWx0OnJldHVybiBlfX0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJfIik7cmV0dXJuIHQlMTA9PTEmJnQlMTAwIT0xMT9uWzBdOnQlMTA+PTImJnQlMTA8PTQmJih0JTEwMDwxMHx8dCUxMDA+PTIwKT9uWzFdOm5bMl19ZnVuY3Rpb24gbihlLG4scil7dmFyIG89e3NzOm4/ItGB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCI6ItGB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCIsbW06bj8i0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9Ijoi0YXQstC40LvQuNC90YNf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9IixoaDpuPyLQs9C+0LTQuNC90LBf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0iOiLQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0iLGRkOiLQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LIiLE1NOiLQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyIix5eToi0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LIifTtyZXR1cm4ibSI9PT1yP24/ItGF0LLQuNC70LjQvdCwIjoi0YXQstC40LvQuNC90YMiOiJoIj09PXI/bj8i0LPQvtC00LjQvdCwIjoi0LPQvtC00LjQvdGDIjplKyIgIit0KG9bcl0sK2UpfWZ1bmN0aW9uIHIoZSx0KXt2YXIgbj17bm9taW5hdGl2ZToi0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwIi5zcGxpdCgiXyIpLGFjY3VzYXRpdmU6ItC90LXQtNGW0LvRjl/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00YNf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGOX9GB0YPQsdC+0YLRgyIuc3BsaXQoIl8iKSxnZW5pdGl2ZToi0L3QtdC00ZbQu9GWX9C/0L7QvdC10LTRltC70LrQsF/QstGW0LLRgtC+0YDQutCwX9GB0LXRgNC10LTQuF/Rh9C10YLQstC10YDQs9CwX9C/4oCZ0Y/RgtC90LjRhtGWX9GB0YPQsdC+0YLQuCIuc3BsaXQoIl8iKX07cmV0dXJuIGU/blsvKFxbW9CS0LLQo9GDXVxdKSA/ZGRkZC8udGVzdCh0KT8iYWNjdXNhdGl2ZSI6L1xbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXSA/ZGRkZC8udGVzdCh0KT8iZ2VuaXRpdmUiOiJub21pbmF0aXZlIl1bZS5kYXkoKV06bi5ub21pbmF0aXZlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUrItC+IisoMTE9PT10aGlzLmhvdXJzKCk/ItCxIjoiIikrIl0gTFQifX1yZXR1cm4gZS5kZWZpbmVMb2NhbGUoInVrIix7bW9udGhzOntmb3JtYXQ6ItGB0ZbRh9C90Y9f0LvRjtGC0L7Qs9C+X9Cx0LXRgNC10LfQvdGPX9C60LLRltGC0L3Rj1/RgtGA0LDQstC90Y9f0YfQtdGA0LLQvdGPX9C70LjQv9C90Y9f0YHQtdGA0L/QvdGPX9Cy0LXRgNC10YHQvdGPX9C20L7QstGC0L3Rj1/Qu9C40YHRgtC+0L/QsNC00LBf0LPRgNGD0LTQvdGPIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6ItGB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6ItGB0ZbRh1/Qu9GO0YJf0LHQtdGAX9C60LLRltGCX9GC0YDQsNCyX9GH0LXRgNCyX9C70LjQv1/RgdC10YDQv1/QstC10YBf0LbQvtCy0YJf0LvQuNGB0YJf0LPRgNGD0LQiLnNwbGl0KCJfIiksd2Vla2RheXM6cix3ZWVrZGF5c1Nob3J0OiLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSDRgC4iLExMTDoiRCBNTU1NIFlZWVkg0YAuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5Om8oIlvQodGM0L7Qs9C+0LTQvdGWICIpLG5leHREYXk6bygiW9CX0LDQstGC0YDQsCAiKSxsYXN0RGF5Om8oIlvQktGH0L7RgNCwICIpLG5leHRXZWVrOm8oIlvQo10gZGRkZCBbIiksbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiBvKCJb0JzQuNC90YPQu9C+0ZddIGRkZGQgWyIpLmNhbGwodGhpcyk7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIG8oIlvQnNC40L3Rg9C70L7Qs9C+XSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi0LfQsCAlcyIscGFzdDoiJXMg0YLQvtC80YMiLHM6ItC00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0IixzczpuLG06bixtbTpuLGg6ItCz0L7QtNC40L3RgyIsaGg6bixkOiLQtNC10L3RjCIsZGQ6bixNOiLQvNGW0YHRj9GG0YwiLE1NOm4seToi0YDRltC6Iix5eTpufSxtZXJpZGllbVBhcnNlOi/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8ND8i0L3QvtGH0ZYiOmU8MTI/ItGA0LDQvdC60YMiOmU8MTc/ItC00L3RjyI6ItCy0LXRh9C+0YDQsCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNC5fNCz0L4pLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyIt0LkiO2Nhc2UiRCI6cmV0dXJuIGUrIi3Qs9C+IjtkZWZhdWx0OnJldHVybiBlfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PVsi2KzZhtmI2LHbjCIsItmB2LHZiNix24wiLCLZhdin2LHahiIsItin2b7YsduM2YQiLCLZhdim24wiLCLYrNmI2YYiLCLYrNmI2YTYp9im24wiLCLYp9qv2LPYqiIsItiz2KrZhdio2LEiLCLYp9qp2KrZiNio2LEiLCLZhtmI2YXYqNixIiwi2K/Ys9mF2KjYsSJdLG49WyLYp9iq2YjYp9ixIiwi2b7bjNixIiwi2YXZhtqv2YQiLCLYqNiv2r4iLCLYrNmF2LnYsdin2KoiLCLYrNmF2LnbgSIsItuB2YHYqtuBIl07cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ1ciIse21vbnRoczp0LG1vbnRoc1Nob3J0OnQsd2Vla2RheXM6bix3ZWVrZGF5c1Nob3J0Om4sd2Vla2RheXNNaW46bixsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGTYjCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9i12KjYrXzYtNin2YUvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIti02KfZhSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8MTI/Iti12KjYrSI6Iti02KfZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KLYrCDYqNmI2YLYql0gTFQiLG5leHREYXk6IlvaqdmEINio2YjZgtiqXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9io2YjZgtiqXSBMVCIsbGFzdERheToiW9qv2LDYtNiq24Eg2LHZiNiyINio2YjZgtiqXSBMVCIsbGFzdFdlZWs6Ilvar9iw2LTYqtuBXSBkZGRkIFvYqNmI2YLYql0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINio2LnYryIscGFzdDoiJXMg2YLYqNmEIixzOiLahtmG2K8g2LPbjNqp2YbaiCIsc3M6IiVkINiz24zaqdmG2ogiLG06Itin24zaqSDZhdmG2bkiLG1tOiIlZCDZhdmG2bkiLGg6Itin24zaqSDar9q+2YbZuduBIixoaDoiJWQg2q/avtmG2bnbkiIsZDoi2KfbjNqpINiv2YYiLGRkOiIlZCDYr9mGIixNOiLYp9uM2qkg2YXYp9uBIixNTToiJWQg2YXYp9uBIix5OiLYp9uM2qkg2LPYp9mEIix5eToiJWQg2LPYp9mEIn0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ1ei1sYXRuIix7bW9udGhzOiJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IllhX0R1X1NlX0Nob19QYV9KdV9TaGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQnVndW4gc29hdF0gTFQgW2RhXSIsbmV4dERheToiW0VydGFnYV0gTFQgW2RhXSIsbmV4dFdlZWs6ImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsbGFzdERheToiW0tlY2hhIHNvYXRdIExUIFtkYV0iLGxhc3RXZWVrOiJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IllhcWluICVzIGljaGlkYSIscGFzdDoiQmlyIG5lY2hhICVzIG9sZGluIixzOiJzb25peWEiLHNzOiIlZCBzb25peWEiLG06ImJpciBkYXFpcWEiLG1tOiIlZCBkYXFpcWEiLGg6ImJpciBzb2F0IixoaDoiJWQgc29hdCIsZDoiYmlyIGt1biIsZGQ6IiVkIGt1biIsTToiYmlyIG95IixNTToiJWQgb3kiLHk6ImJpciB5aWwiLHl5OiIlZCB5aWwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ1eiIse21vbnRoczoi0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi0K/QutGI0LDQvdCx0LBf0JTRg9GI0LDQvdCx0LBf0KHQtdGI0LDQvdCx0LBf0KfQvtGA0YjQsNC90LHQsF/Qn9Cw0LnRiNCw0L3QsdCwX9CW0YPQvNCwX9Co0LDQvdCx0LAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0K/QutGIX9CU0YPRiF/QodC10Yhf0KfQvtGAX9Cf0LDQuV/QltGD0Lxf0KjQsNC9Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQr9C6X9CU0YNf0KHQtV/Qp9C+X9Cf0LBf0JbRg1/QqNCwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9CR0YPQs9GD0L0g0YHQvtCw0YJdIExUIFvQtNCwXSIsbmV4dERheToiW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdIixuZXh0V2VlazoiZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXSIsbGFzdERheToiW9Ca0LXRh9CwINGB0L7QsNGCXSBMVCBb0LTQsF0iLGxhc3RXZWVrOiJb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi0K/QutC40L0gJXMg0LjRh9C40LTQsCIscGFzdDoi0JHQuNGAINC90LXRh9CwICVzINC+0LvQtNC40L0iLHM6ItGE0YPRgNGB0LDRgiIsc3M6IiVkINGE0YPRgNGB0LDRgiIsbToi0LHQuNGAINC00LDQutC40LrQsCIsbW06IiVkINC00LDQutC40LrQsCIsaDoi0LHQuNGAINGB0L7QsNGCIixoaDoiJWQg0YHQvtCw0YIiLGQ6ItCx0LjRgCDQutGD0L0iLGRkOiIlZCDQutGD0L0iLE06ItCx0LjRgCDQvtC5IixNTToiJWQg0L7QuSIseToi0LHQuNGAINC50LjQuyIseXk6IiVkINC50LjQuyJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInZpIix7bW9udGhzOiJ0aMOhbmcgMV90aMOhbmcgMl90aMOhbmcgM190aMOhbmcgNF90aMOhbmcgNV90aMOhbmcgNl90aMOhbmcgN190aMOhbmcgOF90aMOhbmcgOV90aMOhbmcgMTBfdGjDoW5nIDExX3Row6FuZyAxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiVGgwMV9UaDAyX1RoMDNfVGgwNF9UaDA1X1RoMDZfVGgwN19UaDA4X1RoMDlfVGgxMF9UaDExX1RoMTIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi9eY2gkL2kudGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPDEyP24/InNhIjoiU0EiOm4/ImNoIjoiQ0gifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtuxINtXSBZWVlZIixMTEw6IkQgTU1NTSBbbsSDbV0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tIixsOiJERC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSMO0bSBuYXkgbMO6Y10gTFQiLG5leHREYXk6IltOZ8OgeSBtYWkgbMO6Y10gTFQiLG5leHRXZWVrOiJkZGRkIFt0deG6p24gdOG7m2kgbMO6Y10gTFQiLGxhc3REYXk6IltIw7RtIHF1YSBsw7pjXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3R14bqnbiBy4buTaSBsw7pjXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgdOG7m2kiLHBhc3Q6IiVzIHRyxrDhu5tjIixzOiJ2w6BpIGdpw6J5IixzczoiJWQgZ2nDonkiLG06Im3hu5l0IHBow7p0IixtbToiJWQgcGjDunQiLGg6Im3hu5l0IGdp4budIixoaDoiJWQgZ2nhu50iLGQ6Im3hu5l0IG5nw6B5IixkZDoiJWQgbmfDoHkiLE06Im3hu5l0IHRow6FuZyIsTU06IiVkIHRow6FuZyIseToibeG7mXQgbsSDbSIseXk6IiVkIG7Eg20ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0pfSwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlLHQpe3QobigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpKX0oMCxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7cmV0dXJuIGUuZGVmaW5lTG9jYWxlKCJ4LXBzZXVkbyIse21vbnRoczoiSn7DocOxw7rDoX5yw71fRn7DqWJyw7p+w6Fyw71ffk3DoXJjfmhfw4FwfnLDrWxffk3DocO9X35Kw7rDscOpfl9Kw7psfsO9X8OBw7p+Z8O6c3R+X1PDqXB+dMOpbWJ+w6lyX8OTfmN0w7NifsOpcl/DkX7Ds3bDqW1+YsOpcl9+RMOpY8Opfm1iw6lyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlN+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU37DusOxX35Nw7PDsV9+VMO6w6lfflfDqWRfflRow7pffkZyw61fflPDoXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVH7Ds2TDoX7DvSDDoXRdIExUIixuZXh0RGF5OiJbVH7Ds23Ds35ycsOzfncgw6F0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW8OhdF0gTFQiLGxhc3REYXk6IlvDnX7DqXN0fsOpcmTDoX7DvSDDoXRdIExUIixsYXN0V2VlazoiW0x+w6FzdF0gZGRkZCBbw6F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiw61+w7EgJXMiLHBhc3Q6IiVzIMOhfmfDsyIsczoiw6EgfmbDqXcgfnPDqWPDs37DsWRzIixzczoiJWQgc37DqWPDs8OxfmRzIixtOiLDoSB+bcOtw7F+w7p0w6kiLG1tOiIlZCBtfsOtw7HDun50w6lzIixoOiLDoX7DsSBow7N+w7pyIixoaDoiJWQgaH7Ds8O6cnMiLGQ6IsOhIH5kw6HDvSIsZGQ6IiVkIGR+w6HDvXMiLE06IsOhIH5tw7PDsX50aCIsTU06IiVkIG1+w7PDsXR+aHMiLHk6IsOhIH7DvcOpw6FyIix5eToiJWQgw71+w6nDoXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMDtyZXR1cm4gZSsoMT09fn4oZSUxMDAvMTApPyJ0aCI6MT09PXQ/InN0IjoyPT09dD8ibmQiOjM9PT10PyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInlvIix7bW9udGhzOiJT4bq5zIFy4bq5zIFfRcyAcmXMgGxlzIBf4bq4cuG6ucyAbmHMgF9JzIBnYmXMgV9FzIBiaWJpX0/MgGt1zIBkdV9BZ+G6uW1vX0/MgGd1zIFuX093ZXdlX+G7jMyAd2HMgHJhzIBfQmXMgWx1zIFf4buMzIBw4bq5zIDMgCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiU+G6ucyBcl9FzIBybF/hurhybl9JzIBnYl9FzIBiaV9PzIBrdcyAX0Fn4bq5X0/MgGd1zIFfT3dlX+G7jMyAd2HMgF9CZcyBbF/hu4zMgHDhurnMgMyAIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQcyAacyAa19BamXMgV9JzIBz4bq5zIFf4buManJf4buMamJf4bq4dGnMgF9BzIBiYcyBIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPzIBuacyAIG5pXSBMVCIsbmV4dERheToiW+G7jMyAbGEgbmldIExUIixuZXh0V2VlazoiZGRkZCBb4buMc+G6ucyAIHRvzIFuJ2Lhu41dIFtuaV0gTFQiLGxhc3REYXk6IltBzIBuYSBuaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvhu4xz4bq5zIAgdG/MgWzhu43MgV0gW25pXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmnMgSAlcyIscGFzdDoiJXMga+G7jWphzIEiLHM6ImnMgHPhurlqdcyBIGFheWHMgSBkaWUiLHNzOiJhYXlhzIEgJWQiLG06ImnMgHPhurlqdcyBIGthbiIsbW06ImnMgHPhurlqdcyBICVkIixoOiJ3YcyBa2F0aSBrYW4iLGhoOiJ3YcyBa2F0aSAlZCIsZDoi4buNauG7jcyBIGthbiIsZGQ6IuG7jWrhu43MgSAlZCIsTToib3N1zIAga2FuIixNTToib3N1zIAgJWQiLHk6IuG7jWR1zIFuIGthbiIseXk6IuG7jWR1zIFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov4buNauG7jcyBXHNcZHsxLDJ9LyxvcmRpbmFsOiLhu41q4buNzIEgJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInpoLWNuIix7bW9udGhzOiLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgiLnNwbGl0KCJfIiksd2Vla2RheXM6IuaYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLlkajml6Vf5ZGo5LiAX+WRqOS6jF/lkajkuIlf5ZGo5ZubX+WRqOS6lF/lkajlha0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuaXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWeW5tE3mnIhE5pelIixMTEw6IllZWVnlubRN5pyIROaXpUFo54K5bW3liIYiLExMTEw6IllZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGIixsOiJZWVlZL00vRCIsbGw6IllZWVnlubRN5pyIROaXpSIsbGxsOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLGxsbGw6IllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuWHjOaZqCI9PT10fHwi5pep5LiKIj09PXR8fCLkuIrljYgiPT09dD9lOiLkuIvljYgiPT09dHx8IuaZmuS4iiI9PT10P2UrMTI6ZT49MTE/ZTplKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9MTAwKmUrdDtyZXR1cm4gcjw2MDA/IuWHjOaZqCI6cjw5MDA/IuaXqeS4iiI6cjwxMTMwPyLkuIrljYgiOnI8MTIzMD8i5Lit5Y2IIjpyPDE4MDA/IuS4i+WNiCI6IuaZmuS4iiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5aSpXUxUIixuZXh0RGF5OiJb5piO5aSpXUxUIixuZXh0V2VlazoiW+S4i11kZGRkTFQiLGxhc3REYXk6IlvmmKjlpKldTFQiLGxhc3RXZWVrOiJb5LiKXWRkZGRMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOaXpXzmnIh85ZGoKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLml6UiO2Nhc2UiTSI6cmV0dXJuIGUrIuaciCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyLlkagiO2RlZmF1bHQ6cmV0dXJuIGV9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPlhoUiLHBhc3Q6IiVz5YmNIixzOiLlh6Dnp5IiLHNzOiIlZCDnp5IiLG06IjEg5YiG6ZKfIixtbToiJWQg5YiG6ZKfIixoOiIxIOWwj+aXtiIsaGg6IiVkIOWwj+aXtiIsZDoiMSDlpKkiLGRkOiIlZCDlpKkiLE06IjEg5Liq5pyIIixNTToiJWQg5Liq5pyIIix5OiIxIOW5tCIseXk6IiVkIOW5tCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7dChuKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIikpfSgwLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZS5kZWZpbmVMb2NhbGUoInpoLWhrIix7bW9udGhzOiLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgiLnNwbGl0KCJfIiksd2Vla2RheXM6IuaYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuaXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWeW5tE3mnIhE5pelIixMTEw6IllZWVnlubRN5pyIROaXpSBISDptbSIsTExMTDoiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZ5bm0TeaciETml6UiLGxsbDoiWVlZWeW5tE3mnIhE5pelIEhIOm1tIixsbGxsOiJZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe3JldHVybiAxMj09PWUmJihlPTApLCLlh4zmmagiPT09dHx8IuaXqeS4iiI9PT10fHwi5LiK5Y2IIj09PXQ/ZToi5Lit5Y2IIj09PXQ/ZT49MTE/ZTplKzEyOiLkuIvljYgiPT09dHx8IuaZmuS4iiI9PT10P2UrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9MTAwKmUrdDtyZXR1cm4gcjw2MDA/IuWHjOaZqCI6cjw5MDA/IuaXqeS4iiI6cjwxMTMwPyLkuIrljYgiOnI8MTIzMD8i5Lit5Y2IIjpyPDE4MDA/IuS4i+WNiCI6IuaZmuS4iiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5aSpXUxUIixuZXh0RGF5OiJb5piO5aSpXUxUIixuZXh0V2VlazoiW+S4i11kZGRkTFQiLGxhc3REYXk6IlvmmKjlpKldTFQiLGxhc3RXZWVrOiJb5LiKXWRkZGRMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOaXpXzmnIh86YCxKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLml6UiO2Nhc2UiTSI6cmV0dXJuIGUrIuaciCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyLpgLEiO2RlZmF1bHQ6cmV0dXJuIGV9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPlhaciLHBhc3Q6IiVz5YmNIixzOiLlub7np5IiLHNzOiIlZCDnp5IiLG06IjEg5YiG6ZCYIixtbToiJWQg5YiG6ZCYIixoOiIxIOWwj+aZgiIsaGg6IiVkIOWwj+aZgiIsZDoiMSDlpKkiLGRkOiIlZCDlpKkiLE06IjEg5YCL5pyIIixNTToiJWQg5YCL5pyIIix5OiIxIOW5tCIseXk6IiVkIOW5tCJ9fSl9KX0sIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSx0KXt0KG4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSl9KDAsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3JldHVybiBlLmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6IuS4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IumAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZ5bm0TeaciETml6UiLExMTDoiWVlZWeW5tE3mnIhE5pelIEhIOm1tIixMTExMOiJZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVnlubRN5pyIROaXpSIsbGxsOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLGxsbGw6IllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEyPT09ZSYmKGU9MCksIuWHjOaZqCI9PT10fHwi5pep5LiKIj09PXR8fCLkuIrljYgiPT09dD9lOiLkuK3ljYgiPT09dD9lPj0xMT9lOmUrMTI6IuS4i+WNiCI9PT10fHwi5pma5LiKIj09PXQ/ZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xMDAqZSt0O3JldHVybiByPDYwMD8i5YeM5pmoIjpyPDkwMD8i5pep5LiKIjpyPDExMzA/IuS4iuWNiCI6cjwxMjMwPyLkuK3ljYgiOnI8MTgwMD8i5LiL5Y2IIjoi5pma5LiKIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilvku4rlpKldIExUIixuZXh0RGF5OiJb5piO5aSpXSBMVCIsbmV4dFdlZWs6IlvkuItdZGRkZCBMVCIsbGFzdERheToiW+aYqOWkqV0gTFQiLGxhc3RXZWVrOiJb5LiKXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSjml6V85pyIfOmAsSkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZSsi5pelIjtjYXNlIk0iOnJldHVybiBlKyLmnIgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZSsi6YCxIjtkZWZhdWx0OnJldHVybiBlfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVz5YWnIixwYXN0OiIlc+WJjSIsczoi5bm+56eSIixzczoiJWQg56eSIixtOiIxIOWIhumQmCIsbW06IiVkIOWIhumQmCIsaDoiMSDlsI/mmYIiLGhoOiIlZCDlsI/mmYIiLGQ6IjEg5aSpIixkZDoiJWQg5aSpIixNOiIxIOWAi+aciCIsTU06IiVkIOWAi+aciCIseToiMSDlubQiLHl5OiIlZCDlubQifX0pfSl9LCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe2UuZXhwb3J0cz1uKCl9KDAsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCgpe3JldHVybiBqci5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGwhPWUmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIHMoZSl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5sZW5ndGg7dmFyIHQ7Zm9yKHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuLHI9W107Zm9yKG49MDtuPGUubGVuZ3RoOysrbilyLnB1c2godChlW25dLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG4gaW4gdCljKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBjKHQsInRvU3RyaW5nIikmJihlLnRvU3RyaW5nPXQudG9TdHJpbmcpLGModCwidmFsdWVPZiIpJiYoZS52YWx1ZU9mPXQudmFsdWVPZiksZX1mdW5jdGlvbiBfKGUsdCxuLHIpe3JldHVybiBPdChlLHQsbixyLCEwKS51dGMoKX1mdW5jdGlvbiBwKCl7cmV0dXJue2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gbnVsbD09ZS5fcGYmJihlLl9wZj1wKCkpLGUuX3BmfWZ1bmN0aW9uIG0oZSl7aWYobnVsbD09ZS5faXNWYWxpZCl7dmFyIHQ9ZihlKSxuPXhyLmNhbGwodC5wYXJzZWREYXRlUGFydHMsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWV9KSxyPSFpc05hTihlLl9kLmdldFRpbWUoKSkmJnQub3ZlcmZsb3c8MCYmIXQuZW1wdHkmJiF0LmludmFsaWRNb250aCYmIXQuaW52YWxpZFdlZWtkYXkmJiF0LndlZWtkYXlNaXNtYXRjaCYmIXQubnVsbElucHV0JiYhdC5pbnZhbGlkRm9ybWF0JiYhdC51c2VySW52YWxpZGF0ZWQmJighdC5tZXJpZGllbXx8dC5tZXJpZGllbSYmbik7aWYoZS5fc3RyaWN0JiYocj1yJiYwPT09dC5jaGFyc0xlZnRPdmVyJiYwPT09dC51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT10LmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKGUpKXJldHVybiByO2UuX2lzVmFsaWQ9cn1yZXR1cm4gZS5faXNWYWxpZH1mdW5jdGlvbiBoKGUpe3ZhciB0PV8oTmFOKTtyZXR1cm4gbnVsbCE9ZT9kKGYodCksZSk6Zih0KS51c2VySW52YWxpZGF0ZWQ9ITAsdH1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixvO2lmKGkodC5faXNBTW9tZW50T2JqZWN0KXx8KGUuX2lzQU1vbWVudE9iamVjdD10Ll9pc0FNb21lbnRPYmplY3QpLGkodC5faSl8fChlLl9pPXQuX2kpLGkodC5fZil8fChlLl9mPXQuX2YpLGkodC5fbCl8fChlLl9sPXQuX2wpLGkodC5fc3RyaWN0KXx8KGUuX3N0cmljdD10Ll9zdHJpY3QpLGkodC5fdHptKXx8KGUuX3R6bT10Ll90em0pLGkodC5faXNVVEMpfHwoZS5faXNVVEM9dC5faXNVVEMpLGkodC5fb2Zmc2V0KXx8KGUuX29mZnNldD10Ll9vZmZzZXQpLGkodC5fcGYpfHwoZS5fcGY9Zih0KSksaSh0Ll9sb2NhbGUpfHwoZS5fbG9jYWxlPXQuX2xvY2FsZSksTHIubGVuZ3RoPjApZm9yKG49MDtuPExyLmxlbmd0aDtuKyspcj1McltuXSxvPXRbcl0saShvKXx8KGVbcl09byk7cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtnKHRoaXMsZSksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1lLl9kP2UuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09RHImJihEcj0hMCx0LnVwZGF0ZU9mZnNldCh0aGlzKSxEcj0hMSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGJ8fG51bGwhPWUmJm51bGwhPWUuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiB5KGUpe3JldHVybiBlPDA/TWF0aC5jZWlsKGUpfHwwOk1hdGguZmxvb3IoZSl9ZnVuY3Rpb24gdihlKXt2YXIgdD0rZSxuPTA7cmV0dXJuIDAhPT10JiZpc0Zpbml0ZSh0KSYmKG49eSh0KSksbn1mdW5jdGlvbiBUKGUsdCxuKXt2YXIgcixvPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxzPU1hdGguYWJzKGUubGVuZ3RoLXQubGVuZ3RoKSxpPTA7Zm9yKHI9MDtyPG87cisrKShuJiZlW3JdIT09dFtyXXx8IW4mJnYoZVtyXSkhPT12KHRbcl0pKSYmaSsrO3JldHVybiBpK3N9ZnVuY3Rpb24gQShlKXshMT09PXQuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiYidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK2UpfWZ1bmN0aW9uIEMoZSxuKXt2YXIgcj0hMDtyZXR1cm4gZChmdW5jdGlvbigpe2lmKG51bGwhPXQuZGVwcmVjYXRpb25IYW5kbGVyJiZ0LmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLGUpLHIpe2Zvcih2YXIgbyxzPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtpZihvPSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW2ldKXtvKz0iXG5bIitpKyJdICI7Zm9yKHZhciBhIGluIGFyZ3VtZW50c1swXSlvKz1hKyI6ICIrYXJndW1lbnRzWzBdW2FdKyIsICI7bz1vLnNsaWNlKDAsLTIpfWVsc2Ugbz1hcmd1bWVudHNbaV07cy5wdXNoKG8pfUEoZSsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocykuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjaykscj0hMX1yZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfWZ1bmN0aW9uIE8oZSxuKXtudWxsIT10LmRlcHJlY2F0aW9uSGFuZGxlciYmdC5kZXByZWNhdGlvbkhhbmRsZXIoZSxuKSx3cltlXXx8KEEobiksd3JbZV09ITApfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBSKGUpe3ZhciB0LG47Zm9yKG4gaW4gZSl0PWVbbl0sUyh0KT90aGlzW25dPXQ6dGhpc1siXyIrbl09dDt0aGlzLl9jb25maWc9ZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfWZ1bmN0aW9uIGooZSx0KXt2YXIgbixyPWQoe30sZSk7Zm9yKG4gaW4gdCljKHQsbikmJihvKGVbbl0pJiZvKHRbbl0pPyhyW25dPXt9LGQocltuXSxlW25dKSxkKHJbbl0sdFtuXSkpOm51bGwhPXRbbl0/cltuXT10W25dOmRlbGV0ZSByW25dKTtmb3IobiBpbiBlKWMoZSxuKSYmIWModCxuKSYmbyhlW25dKSYmKHJbbl09ZCh7fSxyW25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24geChlKXtudWxsIT1lJiZ0aGlzLnNldChlKX1mdW5jdGlvbiBMKGUsdCxuKXt2YXIgcj10aGlzLl9jYWxlbmRhcltlXXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIFMocik/ci5jYWxsKHQsbik6cn1mdW5jdGlvbiBEKGUpe3ZhciB0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gdHx8IW4/dDoodGhpcy5fbG9uZ0RhdGVGb3JtYXRbZV09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgxKX0pLHRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdKX1mdW5jdGlvbiB3KCl7cmV0dXJuIHRoaXMuX2ludmFsaWREYXRlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLGUpfWZ1bmN0aW9uIGsoZSx0LG4scil7dmFyIG89dGhpcy5fcmVsYXRpdmVUaW1lW25dO3JldHVybiBTKG8pP28oZSx0LG4scik6by5yZXBsYWNlKC8lZC9pLGUpfWZ1bmN0aW9uIEkoZSx0KXt2YXIgbj10aGlzLl9yZWxhdGl2ZVRpbWVbZT4wPyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIFMobik/bih0KTpuLnJlcGxhY2UoLyVzL2ksdCl9ZnVuY3Rpb24gUChlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtIcltuXT1IcltuKyJzIl09SHJbdF09ZX1mdW5jdGlvbiBOKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9IcltlXXx8SHJbZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gSChlKXt2YXIgdCxuLHI9e307Zm9yKG4gaW4gZSljKGUsbikmJih0PU4obikpJiYoclt0XT1lW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBGKGUsdCl7RnJbZV09dH1mdW5jdGlvbiBCKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7dW5pdDpuLHByaW9yaXR5OkZyW25dfSk7cmV0dXJuIHQuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9KSx0fWZ1bmN0aW9uIFUoZSx0LG4pe3ZhciByPSIiK01hdGguYWJzKGUpLG89dC1yLmxlbmd0aDtyZXR1cm4oZT49MD9uPyIrIjoiIjoiLSIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsbykpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK3J9ZnVuY3Rpb24gRyhlLHQsbixyKXt2YXIgbz1yOyJzdHJpbmciPT10eXBlb2YgciYmKG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXSgpfSksZSYmKHpyW2VdPW8pLHQmJih6clt0WzBdXT1mdW5jdGlvbigpe3JldHVybiBVKG8uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRbMV0sdFsyXSl9KSxuJiYoenJbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlKX0pfWZ1bmN0aW9uIHooZSl7cmV0dXJuIGUubWF0Y2goL1xbW1xzXFNdLyk/ZS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOmUucmVwbGFjZSgvXFwvZywiIil9ZnVuY3Rpb24gVihlKXt2YXIgdCxuLHI9ZS5tYXRjaChCcik7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspenJbclt0XV0/clt0XT16cltyW3RdXTpyW3RdPXooclt0XSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvLHM9IiI7Zm9yKG89MDtvPG47bysrKXMrPVMocltvXSk/cltvXS5jYWxsKHQsZSk6cltvXTtyZXR1cm4gc319ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBlLmlzVmFsaWQoKT8odD1ZKHQsZS5sb2NhbGVEYXRhKCkpLEdyW3RdPUdyW3RdfHxWKHQpLEdyW3RdKGUpKTplLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFkoZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LmxvbmdEYXRlRm9ybWF0KGUpfHxlfXZhciByPTU7Zm9yKFVyLmxhc3RJbmRleD0wO3I+PTAmJlVyLnRlc3QoZSk7KWU9ZS5yZXBsYWNlKFVyLG4pLFVyLmxhc3RJbmRleD0wLHItPTE7cmV0dXJuIGV9ZnVuY3Rpb24gcShlLHQsbil7YW9bZV09Uyh0KT90OmZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJm4/bjp0fX1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIGMoYW8sZSk/YW9bZV0odC5fc3RyaWN0LHQuX2xvY2FsZSk6bmV3IFJlZ0V4cChYKGUpKX1mdW5jdGlvbiBYKGUpe3JldHVybiAkKGUucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdHx8bnx8cnx8b30pKX1mdW5jdGlvbiAkKGUpe3JldHVybiBlLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gUShlLHQpe3ZhciBuLHI9dDtmb3IoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLGEodCkmJihyPWZ1bmN0aW9uKGUsbil7blt0XT12KGUpfSksbj0wO248ZS5sZW5ndGg7bisrKWxvW2Vbbl1dPXJ9ZnVuY3Rpb24gSihlLHQpe1EoZSxmdW5jdGlvbihlLG4scixvKXtyLl93PXIuX3d8fHt9LHQoZSxyLl93LHIsbyl9KX1mdW5jdGlvbiBaKGUsdCxuKXtudWxsIT10JiZjKGxvLGUpJiZsb1tlXSh0LG4uX2EsbixlKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gdGUoZSk/MzY2OjM2NX1mdW5jdGlvbiB0ZShlKXtyZXR1cm4gZSU0PT0wJiZlJTEwMCE9MHx8ZSU0MDA9PTB9ZnVuY3Rpb24gbmUoKXtyZXR1cm4gdGUodGhpcy55ZWFyKCkpfWZ1bmN0aW9uIHJlKGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yPyhzZSh0aGlzLGUsciksdC51cGRhdGVPZmZzZXQodGhpcyxuKSx0aGlzKTpvZSh0aGlzLGUpfX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBlLmlzVmFsaWQoKT9lLl9kWyJnZXQiKyhlLl9pc1VUQz8iVVRDIjoiIikrdF0oKTpOYU59ZnVuY3Rpb24gc2UoZSx0LG4pe2UuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09dCYmdGUoZS55ZWFyKCkpJiYxPT09ZS5tb250aCgpJiYyOT09PWUuZGF0ZSgpP2UuX2RbInNldCIrKGUuX2lzVVRDPyJVVEMiOiIiKSt0XShuLGUubW9udGgoKSx1ZShuLGUubW9udGgoKSkpOmUuX2RbInNldCIrKGUuX2lzVVRDPyJVVEMiOiIiKSt0XShuKSl9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIGU9TihlKSxTKHRoaXNbZV0pP3RoaXNbZV0oKTp0aGlzfWZ1bmN0aW9uIGFlKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtlPUgoZSk7Zm9yKHZhciBuPUIoZSkscj0wO3I8bi5sZW5ndGg7cisrKXRoaXNbbltyXS51bml0XShlW25bcl0udW5pdF0pfWVsc2UgaWYoZT1OKGUpLFModGhpc1tlXSkpcmV0dXJuIHRoaXNbZV0odCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gdWUoZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpcmV0dXJuIE5hTjt2YXIgbj1sZSh0LDEyKTtyZXR1cm4gZSs9KHQtbikvMTIsMT09PW4/dGUoZSk/Mjk6Mjg6MzEtbiU3JTJ9ZnVuY3Rpb24gY2UoZSx0KXtyZXR1cm4gZT9yKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW2UubW9udGgoKV06dGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMuaXNGb3JtYXR8fHZvKS50ZXN0KHQpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bZS5tb250aCgpXTpyKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfWZ1bmN0aW9uIGRlKGUsdCl7cmV0dXJuIGU/cih0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFt2by50ZXN0KHQpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bZS5tb250aCgpXTpyKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lfWZ1bmN0aW9uIF9lKGUsdCxuKXt2YXIgcixvLHMsaT1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxyPTA7cjwxMjsrK3Ipcz1fKFsyZTMscl0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09dGhpcy5tb250aHNTaG9ydChzLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT10aGlzLm1vbnRocyhzLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJNTU0iPT09dD8obz1Fby5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaSksLTEhPT1vP286bnVsbCk6KG89RW8uY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaSksLTEhPT1vP286bnVsbCk6Ik1NTSI9PT10Py0xIT09KG89RW8uY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGkpKT9vOihvPUVvLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLGkpLC0xIT09bz9vOm51bGwpOi0xIT09KG89RW8uY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaSkpP286KG89RW8uY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGkpLC0xIT09bz9vOm51bGwpfWZ1bmN0aW9uIHBlKGUsdCxuKXt2YXIgcixvLHM7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gX2UuY2FsbCh0aGlzLGUsdCxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihvPV8oWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhvLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KG8sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChzPSJeIit0aGlzLm1vbnRocyhvLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQobywiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChzLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT10JiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdChlKSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PXQmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdChlKSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdChlKSlyZXR1cm4gcn19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbjtpZighZS5pc1ZhbGlkKCkpcmV0dXJuIGU7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKC9eXGQrJC8udGVzdCh0KSl0PXYodCk7ZWxzZSBpZih0PWUubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHQpLCFhKHQpKXJldHVybiBlO3JldHVybiBuPU1hdGgubWluKGUuZGF0ZSgpLHVlKGUueWVhcigpLHQpKSxlLl9kWyJzZXQiKyhlLl9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0odCxuKSxlfWZ1bmN0aW9uIG1lKGUpe3JldHVybiBudWxsIT1lPyhmZSh0aGlzLGUpLHQudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOm9lKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gaGUoKXtyZXR1cm4gdWUodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX1mdW5jdGlvbiBnZShlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oYyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RWUuY2FsbCh0aGlzKSxlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGModGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9Q28pLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJmU/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX1mdW5jdGlvbiBiZShlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oYyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RWUuY2FsbCh0aGlzKSxlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooYyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PU9vKSx0aGlzLl9tb250aHNTdHJpY3RSZWdleCYmZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9ZnVuY3Rpb24gRWUoKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofXZhciB0LG4scj1bXSxvPVtdLHM9W107Zm9yKHQ9MDt0PDEyO3QrKyluPV8oWzJlMyx0XSksci5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpLG8ucHVzaCh0aGlzLm1vbnRocyhuLCIiKSkscy5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxzLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSk7Zm9yKHIuc29ydChlKSxvLnNvcnQoZSkscy5zb3J0KGUpLHQ9MDt0PDEyO3QrKylyW3RdPSQoclt0XSksb1t0XT0kKG9bdF0pO2Zvcih0PTA7dDwyNDt0Kyspc1t0XT0kKHNbdF0pO3RoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitzLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitvLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIityLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiB5ZShlLHQsbixyLG8scyxpKXt2YXIgYT1uZXcgRGF0ZShlLHQsbixyLG8scyxpKTtyZXR1cm4gZTwxMDAmJmU+PTAmJmlzRmluaXRlKGEuZ2V0RnVsbFllYXIoKSkmJmEuc2V0RnVsbFllYXIoZSksYX1mdW5jdGlvbiB2ZShlKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlPDEwMCYmZT49MCYmaXNGaW5pdGUodC5nZXRVVENGdWxsWWVhcigpKSYmdC5zZXRVVENGdWxsWWVhcihlKSx0fWZ1bmN0aW9uIFRlKGUsdCxuKXt2YXIgcj03K3QtbjtyZXR1cm4tKDcrdmUoZSwwLHIpLmdldFVUQ0RheSgpLXQpJTcrci0xfWZ1bmN0aW9uIEFlKGUsdCxuLHIsbyl7dmFyIHMsaSxhPSg3K24tciklNyxsPVRlKGUscixvKSx1PTErNyoodC0xKSthK2w7cmV0dXJuIHU8PTA/KHM9ZS0xLGk9ZWUocykrdSk6dT5lZShlKT8ocz1lKzEsaT11LWVlKGUpKToocz1lLGk9dSkse3llYXI6cyxkYXlPZlllYXI6aX19ZnVuY3Rpb24gQ2UoZSx0LG4pe3ZhciByLG8scz1UZShlLnllYXIoKSx0LG4pLGk9TWF0aC5mbG9vcigoZS5kYXlPZlllYXIoKS1zLTEpLzcpKzE7cmV0dXJuIGk8MT8obz1lLnllYXIoKS0xLHI9aStPZShvLHQsbikpOmk+T2UoZS55ZWFyKCksdCxuKT8ocj1pLU9lKGUueWVhcigpLHQsbiksbz1lLnllYXIoKSsxKToobz1lLnllYXIoKSxyPWkpLHt3ZWVrOnIseWVhcjpvfX1mdW5jdGlvbiBPZShlLHQsbil7dmFyIHI9VGUoZSx0LG4pLG89VGUoZSsxLHQsbik7cmV0dXJuKGVlKGUpLXIrbykvN31mdW5jdGlvbiBTZShlKXtyZXR1cm4gQ2UoZSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla31mdW5jdGlvbiBSZSgpe3JldHVybiB0aGlzLl93ZWVrLmRvd31mdW5jdGlvbiBqZSgpe3JldHVybiB0aGlzLl93ZWVrLmRveX1mdW5jdGlvbiB4ZShlKXt2YXIgdD10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT1lP3Q6dGhpcy5hZGQoNyooZS10KSwiZCIpfWZ1bmN0aW9uIExlKGUpe3ZhciB0PUNlKHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT1lP3Q6dGhpcy5hZGQoNyooZS10KSwiZCIpfWZ1bmN0aW9uIERlKGUsdCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/KGU9dC53ZWVrZGF5c1BhcnNlKGUpLCJudW1iZXIiPT10eXBlb2YgZT9lOm51bGwpOnBhcnNlSW50KGUsMTApfWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3Qud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZX1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBlP3IodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzW2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzW3RoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QodCk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtlLmRheSgpXTpyKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5cy5zdGFuZGFsb25lfWZ1bmN0aW9uIGtlKGUpe3JldHVybiBlP3RoaXMuX3dlZWtkYXlzU2hvcnRbZS5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH1mdW5jdGlvbiBJZShlKXtyZXR1cm4gZT90aGlzLl93ZWVrZGF5c01pbltlLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn1mdW5jdGlvbiBQZShlLHQsbil7dmFyIHIsbyxzLGk9ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHI9MDtyPDc7KytyKXM9XyhbMmUzLDFdKS5kYXkociksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzTWluKHMsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXNTaG9ydChzLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5cyhzLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJkZGRkIj09PXQ/KG89RW8uY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGkpLC0xIT09bz9vOm51bGwpOiJkZGQiPT09dD8obz1Fby5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpKSwtMSE9PW8/bzpudWxsKToobz1Fby5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaSksLTEhPT1vP286bnVsbCk6ImRkZGQiPT09dD8tMSE9PShvPUVvLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpKSk/bzotMSE9PShvPUVvLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGkpKT9vOihvPUVvLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpKSwtMSE9PW8/bzpudWxsKToiZGRkIj09PXQ/LTEhPT0obz1Fby5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpKSk/bzotMSE9PShvPUVvLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpKSk/bzoobz1Fby5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaSksLTEhPT1vP286bnVsbCk6LTEhPT0obz1Fby5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaSkpP286LTEhPT0obz1Fby5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaSkpP286KG89RW8uY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaSksLTEhPT1vP286bnVsbCl9ZnVuY3Rpb24gTmUoZSx0LG4pe3ZhciByLG8scztpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIFBlLmNhbGwodGhpcyxlLHQsbik7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxyPTA7cjw3O3IrKyl7aWYobz1fKFsyZTMsMV0pLmRheShyKSxuJiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKG8sIiIpLnJlcGxhY2UoIi4iLCIuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQobywiIikucmVwbGFjZSgiLiIsIi4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKG8sIiIpLnJlcGxhY2UoIi4iLCIuPyIpKyIkIiwiaSIpKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdfHwocz0iXiIrdGhpcy53ZWVrZGF5cyhvLCIiKSsifF4iK3RoaXMud2Vla2RheXNTaG9ydChvLCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4obywiIiksdGhpcy5fd2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKHMucmVwbGFjZSgiLiIsIiIpLCJpIikpLG4mJiJkZGRkIj09PXQmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdLnRlc3QoZSkpcmV0dXJuIHI7aWYobiYmImRkZCI9PT10JiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl0udGVzdChlKSlyZXR1cm4gcjtpZihuJiYiZGQiPT09dCYmdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXS50ZXN0KGUpKXJldHVybiByO2lmKCFuJiZ0aGlzLl93ZWVrZGF5c1BhcnNlW3JdLnRlc3QoZSkpcmV0dXJuIHJ9fWZ1bmN0aW9uIEhlKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9ZT90aGlzOk5hTjt2YXIgdD10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPWU/KGU9RGUoZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoZS10LCJkIikpOnR9ZnVuY3Rpb24gRmUoZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1lP3RoaXM6TmFOO3ZhciB0PSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1lP3Q6dGhpcy5hZGQoZS10LCJkIil9ZnVuY3Rpb24gQmUoZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1lP3RoaXM6TmFOO2lmKG51bGwhPWUpe3ZhciB0PXdlKGUsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/dDp0LTcpfXJldHVybiB0aGlzLmRheSgpfHw3fWZ1bmN0aW9uIFVlKGUpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KGModGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8VmUuY2FsbCh0aGlzKSxlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KGModGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9TG8pLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJmU/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX1mdW5jdGlvbiBHZShlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhjKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fFZlLmNhbGwodGhpcyksZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooYyh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9RG8pLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX1mdW5jdGlvbiB6ZShlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhjKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fFZlLmNhbGwodGhpcyksZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihjKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXdvKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9ZnVuY3Rpb24gVmUoKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofXZhciB0LG4scixvLHMsaT1bXSxhPVtdLGw9W10sdT1bXTtmb3IodD0wO3Q8Nzt0Kyspbj1fKFsyZTMsMV0pLmRheSh0KSxyPXRoaXMud2Vla2RheXNNaW4obiwiIiksbz10aGlzLndlZWtkYXlzU2hvcnQobiwiIikscz10aGlzLndlZWtkYXlzKG4sIiIpLGkucHVzaChyKSxhLnB1c2gobyksbC5wdXNoKHMpLHUucHVzaChyKSx1LnB1c2gobyksdS5wdXNoKHMpO2ZvcihpLnNvcnQoZSksYS5zb3J0KGUpLGwuc29ydChlKSx1LnNvcnQoZSksdD0wO3Q8Nzt0KyspYVt0XT0kKGFbdF0pLGxbdF09JChsW3RdKSx1W3RdPSQodVt0XSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrdS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2wuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrYS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIraS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV2UoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBZZSgpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fWZ1bmN0aW9uIHFlKGUsdCl7RyhlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksdCl9KX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiB0Ll9tZXJpZGllbVBhcnNlfWZ1bmN0aW9uIFhlKGUpe3JldHVybiJwIj09PShlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX1mdW5jdGlvbiAkZShlLHQsbil7cmV0dXJuIGU+MTE/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGU/ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIik6ZX1mdW5jdGlvbiBKZShlKXtmb3IodmFyIHQsbixyLG8scz0wO3M8ZS5sZW5ndGg7KXtmb3Iobz1RZShlW3NdKS5zcGxpdCgiLSIpLHQ9by5sZW5ndGgsbj1RZShlW3MrMV0pLG49bj9uLnNwbGl0KCItIik6bnVsbDt0PjA7KXtpZihyPVplKG8uc2xpY2UoMCx0KS5qb2luKCItIikpKXJldHVybiByO2lmKG4mJm4ubGVuZ3RoPj10JiZUKG8sbiwhMCk+PXQtMSlicmVhazt0LS19cysrfXJldHVybiBNb31mdW5jdGlvbiBaZSh0KXt2YXIgcj1udWxsO2lmKCFOb1t0XSYmdm9pZCAwIT09ZSYmZSYmZS5leHBvcnRzKXRyeXtyPU1vLl9hYmJyO24oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUgcmVjdXJzaXZlIF5cXC5cXC8uKiQiKSgiLi8iK3QpLGV0KHIpfWNhdGNoKGUpe31yZXR1cm4gTm9bdF19ZnVuY3Rpb24gZXQoZSx0KXt2YXIgbjtyZXR1cm4gZSYmKG49aSh0KT9ydChlKTp0dChlLHQpLG4/TW89bjoidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitlKyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxNby5fYWJicn1mdW5jdGlvbiB0dChlLHQpe2lmKG51bGwhPT10KXt2YXIgbixyPVBvO2lmKHQuYWJicj1lLG51bGwhPU5vW2VdKU8oImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIikscj1Ob1tlXS5fY29uZmlnO2Vsc2UgaWYobnVsbCE9dC5wYXJlbnRMb2NhbGUpaWYobnVsbCE9Tm9bdC5wYXJlbnRMb2NhbGVdKXI9Tm9bdC5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obj1aZSh0LnBhcmVudExvY2FsZSkpKXJldHVybiBIb1t0LnBhcmVudExvY2FsZV18fChIb1t0LnBhcmVudExvY2FsZV09W10pLEhvW3QucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOmUsY29uZmlnOnR9KSxudWxsO3I9bi5fY29uZmlnfXJldHVybiBOb1tlXT1uZXcgeChqKHIsdCkpLEhvW2VdJiZIb1tlXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3R0KGUubmFtZSxlLmNvbmZpZyl9KSxldChlKSxOb1tlXX1yZXR1cm4gZGVsZXRlIE5vW2VdLG51bGx9ZnVuY3Rpb24gbnQoZSx0KXtpZihudWxsIT10KXt2YXIgbixyLG89UG87cj1aZShlKSxudWxsIT1yJiYobz1yLl9jb25maWcpLHQ9aihvLHQpLG49bmV3IHgodCksbi5wYXJlbnRMb2NhbGU9Tm9bZV0sTm9bZV09bixldChlKX1lbHNlIG51bGwhPU5vW2VdJiYobnVsbCE9Tm9bZV0ucGFyZW50TG9jYWxlP05vW2VdPU5vW2VdLnBhcmVudExvY2FsZTpudWxsIT1Ob1tlXSYmZGVsZXRlIE5vW2VdKTtyZXR1cm4gTm9bZV19ZnVuY3Rpb24gcnQoZSl7dmFyIHQ7aWYoZSYmZS5fbG9jYWxlJiZlLl9sb2NhbGUuX2FiYnImJihlPWUuX2xvY2FsZS5fYWJiciksIWUpcmV0dXJuIE1vO2lmKCFyKGUpKXtpZih0PVplKGUpKXJldHVybiB0O2U9W2VdfXJldHVybiBKZShlKX1mdW5jdGlvbiBvdCgpe3JldHVybiBNcihObyl9ZnVuY3Rpb24gc3QoZSl7dmFyIHQsbj1lLl9hO3JldHVybiBuJiYtMj09PWYoZSkub3ZlcmZsb3cmJih0PW5bY29dPDB8fG5bY29dPjExP2NvOm5bX29dPDF8fG5bX29dPnVlKG5bdW9dLG5bY29dKT9fbzpuW3BvXTwwfHxuW3BvXT4yNHx8MjQ9PT1uW3BvXSYmKDAhPT1uW2ZvXXx8MCE9PW5bbW9dfHwwIT09bltob10pP3BvOm5bZm9dPDB8fG5bZm9dPjU5P2ZvOm5bbW9dPDB8fG5bbW9dPjU5P21vOm5baG9dPDB8fG5baG9dPjk5OT9obzotMSxmKGUpLl9vdmVyZmxvd0RheU9mWWVhciYmKHQ8dW98fHQ+X28pJiYodD1fbyksZihlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT10JiYodD1nbyksZihlKS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PXQmJih0PWJvKSxmKGUpLm92ZXJmbG93PXQpLGV9ZnVuY3Rpb24gaXQoZSx0LG4pe3JldHVybiBudWxsIT1lP2U6bnVsbCE9dD90Om59ZnVuY3Rpb24gYXQoZSl7dmFyIG49bmV3IERhdGUodC5ub3coKSk7cmV0dXJuIGUuX3VzZVVUQz9bbi5nZXRVVENGdWxsWWVhcigpLG4uZ2V0VVRDTW9udGgoKSxuLmdldFVUQ0RhdGUoKV06W24uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksbi5nZXREYXRlKCldfWZ1bmN0aW9uIGx0KGUpe3ZhciB0LG4scixvLHMsaT1bXTtpZighZS5fZCl7Zm9yKHI9YXQoZSksZS5fdyYmbnVsbD09ZS5fYVtfb10mJm51bGw9PWUuX2FbY29dJiZ1dChlKSxudWxsIT1lLl9kYXlPZlllYXImJihzPWl0KGUuX2FbdW9dLHJbdW9dKSwoZS5fZGF5T2ZZZWFyPmVlKHMpfHwwPT09ZS5fZGF5T2ZZZWFyKSYmKGYoZSkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxuPXZlKHMsMCxlLl9kYXlPZlllYXIpLGUuX2FbY29dPW4uZ2V0VVRDTW9udGgoKSxlLl9hW19vXT1uLmdldFVUQ0RhdGUoKSksdD0wO3Q8MyYmbnVsbD09ZS5fYVt0XTsrK3QpZS5fYVt0XT1pW3RdPXJbdF07Zm9yKDt0PDc7dCsrKWUuX2FbdF09aVt0XT1udWxsPT1lLl9hW3RdPzI9PT10PzE6MDplLl9hW3RdOzI0PT09ZS5fYVtwb10mJjA9PT1lLl9hW2ZvXSYmMD09PWUuX2FbbW9dJiYwPT09ZS5fYVtob10mJihlLl9uZXh0RGF5PSEwLGUuX2FbcG9dPTApLGUuX2Q9KGUuX3VzZVVUQz92ZTp5ZSkuYXBwbHkobnVsbCxpKSxvPWUuX3VzZVVUQz9lLl9kLmdldFVUQ0RheSgpOmUuX2QuZ2V0RGF5KCksbnVsbCE9ZS5fdHptJiZlLl9kLnNldFVUQ01pbnV0ZXMoZS5fZC5nZXRVVENNaW51dGVzKCktZS5fdHptKSxlLl9uZXh0RGF5JiYoZS5fYVtwb109MjQpLGUuX3cmJnZvaWQgMCE9PWUuX3cuZCYmZS5fdy5kIT09byYmKGYoZSkud2Vla2RheU1pc21hdGNoPSEwKX19ZnVuY3Rpb24gdXQoZSl7dmFyIHQsbixyLG8scyxpLGEsbDtpZih0PWUuX3csbnVsbCE9dC5HR3x8bnVsbCE9dC5XfHxudWxsIT10LkUpcz0xLGk9NCxuPWl0KHQuR0csZS5fYVt1b10sQ2UoU3QoKSwxLDQpLnllYXIpLHI9aXQodC5XLDEpLCgobz1pdCh0LkUsMSkpPDF8fG8+NykmJihsPSEwKTtlbHNle3M9ZS5fbG9jYWxlLl93ZWVrLmRvdyxpPWUuX2xvY2FsZS5fd2Vlay5kb3k7dmFyIHU9Q2UoU3QoKSxzLGkpO249aXQodC5nZyxlLl9hW3VvXSx1LnllYXIpLHI9aXQodC53LHUud2VlayksbnVsbCE9dC5kPygobz10LmQpPDB8fG8+NikmJihsPSEwKTpudWxsIT10LmU/KG89dC5lK3MsKHQuZTwwfHx0LmU+NikmJihsPSEwKSk6bz1zfXI8MXx8cj5PZShuLHMsaSk/ZihlKS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1sP2YoZSkuX292ZXJmbG93V2Vla2RheT0hMDooYT1BZShuLHIsbyxzLGkpLGUuX2FbdW9dPWEueWVhcixlLl9kYXlPZlllYXI9YS5kYXlPZlllYXIpfWZ1bmN0aW9uIGN0KGUpe3ZhciB0LG4scixvLHMsaSxhPWUuX2ksbD1Gby5leGVjKGEpfHxCby5leGVjKGEpO2lmKGwpe2ZvcihmKGUpLmlzbz0hMCx0PTAsbj1Hby5sZW5ndGg7dDxuO3QrKylpZihHb1t0XVsxXS5leGVjKGxbMV0pKXtvPUdvW3RdWzBdLHI9ITEhPT1Hb1t0XVsyXTticmVha31pZihudWxsPT1vKXJldHVybiB2b2lkKGUuX2lzVmFsaWQ9ITEpO2lmKGxbM10pe2Zvcih0PTAsbj16by5sZW5ndGg7dDxuO3QrKylpZih6b1t0XVsxXS5leGVjKGxbM10pKXtzPShsWzJdfHwiICIpK3pvW3RdWzBdO2JyZWFrfWlmKG51bGw9PXMpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSl9aWYoIXImJm51bGwhPXMpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSk7aWYobFs0XSl7aWYoIVVvLmV4ZWMobFs0XSkpcmV0dXJuIHZvaWQoZS5faXNWYWxpZD0hMSk7aT0iWiJ9ZS5fZj1vKyhzfHwiIikrKGl8fCIiKSxidChlKX1lbHNlIGUuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gZHQoZSx0LG4scixvLHMpe3ZhciBpPVtfdChlKSxBby5pbmRleE9mKHQpLHBhcnNlSW50KG4sMTApLHBhcnNlSW50KHIsMTApLHBhcnNlSW50KG8sMTApXTtyZXR1cm4gcyYmaS5wdXNoKHBhcnNlSW50KHMsMTApKSxpfWZ1bmN0aW9uIF90KGUpe3ZhciB0PXBhcnNlSW50KGUsMTApO3JldHVybiB0PD00OT8yZTMrdDp0PD05OTk/MTkwMCt0OnR9ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikudHJpbSgpfWZ1bmN0aW9uIGZ0KGUsdCxuKXtpZihlKXtpZihqby5pbmRleE9mKGUpIT09bmV3IERhdGUodFswXSx0WzFdLHRbMl0pLmdldERheSgpKXJldHVybiBmKG4pLndlZWtkYXlNaXNtYXRjaD0hMCxuLl9pc1ZhbGlkPSExLCExfXJldHVybiEwfWZ1bmN0aW9uIG10KGUsdCxuKXtpZihlKXJldHVybiBZb1tlXTtpZih0KXJldHVybiAwO3ZhciByPXBhcnNlSW50KG4sMTApLG89ciUxMDA7cmV0dXJuKHItbykvMTAwKjYwK299ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9V28uZXhlYyhwdChlLl9pKSk7aWYodCl7dmFyIG49ZHQodFs0XSx0WzNdLHRbMl0sdFs1XSx0WzZdLHRbN10pO2lmKCFmdCh0WzFdLG4sZSkpcmV0dXJuO2UuX2E9bixlLl90em09bXQodFs4XSx0WzldLHRbMTBdKSxlLl9kPXZlLmFwcGx5KG51bGwsZS5fYSksZS5fZC5zZXRVVENNaW51dGVzKGUuX2QuZ2V0VVRDTWludXRlcygpLWUuX3R6bSksZihlKS5yZmMyODIyPSEwfWVsc2UgZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBndChlKXt2YXIgbj1Wby5leGVjKGUuX2kpO2lmKG51bGwhPT1uKXJldHVybiB2b2lkKGUuX2Q9bmV3IERhdGUoK25bMV0pKTtjdChlKSwhMT09PWUuX2lzVmFsaWQmJihkZWxldGUgZS5faXNWYWxpZCxodChlKSwhMT09PWUuX2lzVmFsaWQmJihkZWxldGUgZS5faXNWYWxpZCx0LmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpKSl9ZnVuY3Rpb24gYnQoZSl7aWYoZS5fZj09PXQuSVNPXzg2MDEpcmV0dXJuIHZvaWQgY3QoZSk7aWYoZS5fZj09PXQuUkZDXzI4MjIpcmV0dXJuIHZvaWQgaHQoZSk7ZS5fYT1bXSxmKGUpLmVtcHR5PSEwO3ZhciBuLHIsbyxzLGksYT0iIitlLl9pLGw9YS5sZW5ndGgsdT0wO2ZvcihvPVkoZS5fZixlLl9sb2NhbGUpLm1hdGNoKEJyKXx8W10sbj0wO248by5sZW5ndGg7bisrKXM9b1tuXSxyPShhLm1hdGNoKEsocyxlKSl8fFtdKVswXSxyJiYoaT1hLnN1YnN0cigwLGEuaW5kZXhPZihyKSksaS5sZW5ndGg+MCYmZihlKS51bnVzZWRJbnB1dC5wdXNoKGkpLGE9YS5zbGljZShhLmluZGV4T2Yocikrci5sZW5ndGgpLHUrPXIubGVuZ3RoKSx6cltzXT8ocj9mKGUpLmVtcHR5PSExOmYoZSkudW51c2VkVG9rZW5zLnB1c2gocyksWihzLHIsZSkpOmUuX3N0cmljdCYmIXImJmYoZSkudW51c2VkVG9rZW5zLnB1c2gocyk7ZihlKS5jaGFyc0xlZnRPdmVyPWwtdSxhLmxlbmd0aD4wJiZmKGUpLnVudXNlZElucHV0LnB1c2goYSksZS5fYVtwb108PTEyJiYhMD09PWYoZSkuYmlnSG91ciYmZS5fYVtwb10+MCYmKGYoZSkuYmlnSG91cj12b2lkIDApLGYoZSkucGFyc2VkRGF0ZVBhcnRzPWUuX2Euc2xpY2UoMCksZihlKS5tZXJpZGllbT1lLl9tZXJpZGllbSxlLl9hW3BvXT1FdChlLl9sb2NhbGUsZS5fYVtwb10sZS5fbWVyaWRpZW0pLGx0KGUpLHN0KGUpfWZ1bmN0aW9uIEV0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbnVsbD09bj90Om51bGwhPWUubWVyaWRpZW1Ib3VyP2UubWVyaWRpZW1Ib3VyKHQsbik6bnVsbCE9ZS5pc1BNPyhyPWUuaXNQTShuKSxyJiZ0PDEyJiYodCs9MTIpLHJ8fDEyIT09dHx8KHQ9MCksdCk6dH1mdW5jdGlvbiB5dChlKXt2YXIgdCxuLHIsbyxzO2lmKDA9PT1lLl9mLmxlbmd0aClyZXR1cm4gZihlKS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQoZS5fZD1uZXcgRGF0ZShOYU4pKTtmb3Iobz0wO288ZS5fZi5sZW5ndGg7bysrKXM9MCx0PWcoe30sZSksbnVsbCE9ZS5fdXNlVVRDJiYodC5fdXNlVVRDPWUuX3VzZVVUQyksdC5fZj1lLl9mW29dLGJ0KHQpLG0odCkmJihzKz1mKHQpLmNoYXJzTGVmdE92ZXIscys9MTAqZih0KS51bnVzZWRUb2tlbnMubGVuZ3RoLGYodCkuc2NvcmU9cywobnVsbD09cnx8czxyKSYmKHI9cyxuPXQpKTtkKGUsbnx8dCl9ZnVuY3Rpb24gdnQoZSl7aWYoIWUuX2Qpe3ZhciB0PUgoZS5faSk7ZS5fYT11KFt0LnllYXIsdC5tb250aCx0LmRheXx8dC5kYXRlLHQuaG91cix0Lm1pbnV0ZSx0LnNlY29uZCx0Lm1pbGxpc2Vjb25kXSxmdW5jdGlvbihlKXtyZXR1cm4gZSYmcGFyc2VJbnQoZSwxMCl9KSxsdChlKX19ZnVuY3Rpb24gVHQoZSl7dmFyIHQ9bmV3IGIoc3QoQXQoZSkpKTtyZXR1cm4gdC5fbmV4dERheSYmKHQuYWRkKDEsImQiKSx0Ll9uZXh0RGF5PXZvaWQgMCksdH1mdW5jdGlvbiBBdChlKXt2YXIgdD1lLl9pLG49ZS5fZjtyZXR1cm4gZS5fbG9jYWxlPWUuX2xvY2FsZXx8cnQoZS5fbCksbnVsbD09PXR8fHZvaWQgMD09PW4mJiIiPT09dD9oKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiB0JiYoZS5faT10PWUuX2xvY2FsZS5wcmVwYXJzZSh0KSksRSh0KT9uZXcgYihzdCh0KSk6KGwodCk/ZS5fZD10OnIobik/eXQoZSk6bj9idChlKTpDdChlKSxtKGUpfHwoZS5fZD1udWxsKSxlKSl9ZnVuY3Rpb24gQ3QoZSl7dmFyIG49ZS5faTtpKG4pP2UuX2Q9bmV3IERhdGUodC5ub3coKSk6bChuKT9lLl9kPW5ldyBEYXRlKG4udmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIG4/Z3QoZSk6cihuKT8oZS5fYT11KG4uc2xpY2UoMCksZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSksbHQoZSkpOm8obik/dnQoZSk6YShuKT9lLl9kPW5ldyBEYXRlKG4pOnQuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soZSl9ZnVuY3Rpb24gT3QoZSx0LG4saSxhKXt2YXIgbD17fTtyZXR1cm4hMCE9PW4mJiExIT09bnx8KGk9bixuPXZvaWQgMCksKG8oZSkmJnMoZSl8fHIoZSkmJjA9PT1lLmxlbmd0aCkmJihlPXZvaWQgMCksbC5faXNBTW9tZW50T2JqZWN0PSEwLGwuX3VzZVVUQz1sLl9pc1VUQz1hLGwuX2w9bixsLl9pPWUsbC5fZj10LGwuX3N0cmljdD1pLFR0KGwpfWZ1bmN0aW9uIFN0KGUsdCxuLHIpe3JldHVybiBPdChlLHQsbixyLCExKX1mdW5jdGlvbiBSdChlLHQpe3ZhciBuLG87aWYoMT09PXQubGVuZ3RoJiZyKHRbMF0pJiYodD10WzBdKSwhdC5sZW5ndGgpcmV0dXJuIFN0KCk7Zm9yKG49dFswXSxvPTE7bzx0Lmxlbmd0aDsrK28pdFtvXS5pc1ZhbGlkKCkmJiF0W29dW2VdKG4pfHwobj10W29dKTtyZXR1cm4gbn1mdW5jdGlvbiBqdCgpe3JldHVybiBSdCgiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX1mdW5jdGlvbiB4dCgpe3JldHVybiBSdCgiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfWZ1bmN0aW9uIEx0KGUpe2Zvcih2YXIgdCBpbiBlKWlmKC0xPT09RW8uY2FsbCgkbyx0KXx8bnVsbCE9ZVt0XSYmaXNOYU4oZVt0XSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPCRvLmxlbmd0aDsrK3IpaWYoZVskb1tyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdChlWyRvW3JdXSkhPT12KGVbJG9bcl1dKSYmKG49ITApfXJldHVybiEwfWZ1bmN0aW9uIER0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9ZnVuY3Rpb24gd3QoKXtyZXR1cm4gUXQoTmFOKX1mdW5jdGlvbiBNdChlKXt2YXIgdD1IKGUpLG49dC55ZWFyfHwwLHI9dC5xdWFydGVyfHwwLG89dC5tb250aHx8MCxzPXQud2Vla3x8MCxpPXQuZGF5fHwwLGE9dC5ob3VyfHwwLGw9dC5taW51dGV8fDAsdT10LnNlY29uZHx8MCxjPXQubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1MdCh0KSx0aGlzLl9taWxsaXNlY29uZHM9K2MrMWUzKnUrNmU0KmwrMWUzKmEqNjAqNjAsdGhpcy5fZGF5cz0raSs3KnMsdGhpcy5fbW9udGhzPStvKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJ0KCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBNdH1mdW5jdGlvbiBJdChlKXtyZXR1cm4gZTwwPy0xKk1hdGgucm91bmQoLTEqZSk6TWF0aC5yb3VuZChlKX1mdW5jdGlvbiBQdChlLHQpe0coZSwwLDAsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnV0Y09mZnNldCgpLG49IisiO3JldHVybiBlPDAmJihlPS1lLG49Ii0iKSxuK1Uofn4oZS82MCksMikrdCtVKH5+ZSU2MCwyKX0pfWZ1bmN0aW9uIE50KGUsdCl7dmFyIG49KHR8fCIiKS5tYXRjaChlKTtpZihudWxsPT09bilyZXR1cm4gbnVsbDt2YXIgcj1uW24ubGVuZ3RoLTFdfHxbXSxvPShyKyIiKS5tYXRjaChRbyl8fFsiLSIsMCwwXSxzPTYwKm9bMV0rdihvWzJdKTtyZXR1cm4gMD09PXM/MDoiKyI9PT1vWzBdP3M6LXN9ZnVuY3Rpb24gSHQoZSxuKXt2YXIgcixvO3JldHVybiBuLl9pc1VUQz8ocj1uLmNsb25lKCksbz0oRShlKXx8bChlKT9lLnZhbHVlT2YoKTpTdChlKS52YWx1ZU9mKCkpLXIudmFsdWVPZigpLHIuX2Quc2V0VGltZShyLl9kLnZhbHVlT2YoKStvKSx0LnVwZGF0ZU9mZnNldChyLCExKSxyKTpTdChlKS5sb2NhbCgpfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiAxNSotTWF0aC5yb3VuZChlLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIEJ0KGUsbixyKXt2YXIgbyxzPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWU/dGhpczpOYU47aWYobnVsbCE9ZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihudWxsPT09KGU9TnQob28sZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoZSk8MTYmJiFyJiYoZSo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmbiYmKG89RnQodGhpcykpLHRoaXMuX29mZnNldD1lLHRoaXMuX2lzVVRDPSEwLG51bGwhPW8mJnRoaXMuYWRkKG8sIm0iKSxzIT09ZSYmKCFufHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP25uKHRoaXMsUXQoZS1zLCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsdC51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc31yZXR1cm4gdGhpcy5faXNVVEM/czpGdCh0aGlzKX1mdW5jdGlvbiBVdChlLHQpe3JldHVybiBudWxsIT1lPygic3RyaW5nIiE9dHlwZW9mIGUmJihlPS1lKSx0aGlzLnV0Y09mZnNldChlLHQpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfWZ1bmN0aW9uIEd0KGUpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLGUpfWZ1bmN0aW9uIHp0KGUpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsZSksdGhpcy5faXNVVEM9ITEsZSYmdGhpcy5zdWJ0cmFjdChGdCh0aGlzKSwibSIpKSx0aGlzfWZ1bmN0aW9uIFZ0KCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciBlPU50KHJvLHRoaXMuX2kpO251bGwhPWU/dGhpcy51dGNPZmZzZXQoZSk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKGU9ZT9TdChlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLWUpJTYwPT0wKX1mdW5jdGlvbiBZdCgpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9ZnVuY3Rpb24gcXQoKXtpZighaSh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIGU9e307aWYoZyhlLHRoaXMpLGU9QXQoZSksZS5fYSl7dmFyIHQ9ZS5faXNVVEM/XyhlLl9hKTpTdChlLl9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJlQoZS5fYSx0LnRvQXJyYXkoKSk+MH1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfWZ1bmN0aW9uIEt0KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfWZ1bmN0aW9uIFh0KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9ZnVuY3Rpb24gJHQoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXQpfWZ1bmN0aW9uIFF0KGUsdCl7dmFyIG4scixvLHM9ZSxpPW51bGw7cmV0dXJuIGt0KGUpP3M9e21zOmUuX21pbGxpc2Vjb25kcyxkOmUuX2RheXMsTTplLl9tb250aHN9OmEoZSk/KHM9e30sdD9zW3RdPWU6cy5taWxsaXNlY29uZHM9ZSk6KGk9Sm8uZXhlYyhlKSk/KG49Ii0iPT09aVsxXT8tMToxLHM9e3k6MCxkOnYoaVtfb10pKm4saDp2KGlbcG9dKSpuLG06dihpW2ZvXSkqbixzOnYoaVttb10pKm4sbXM6dihJdCgxZTMqaVtob10pKSpufSk6KGk9Wm8uZXhlYyhlKSk/KG49Ii0iPT09aVsxXT8tMTooaVsxXSwxKSxzPXt5Okp0KGlbMl0sbiksTTpKdChpWzNdLG4pLHc6SnQoaVs0XSxuKSxkOkp0KGlbNV0sbiksaDpKdChpWzZdLG4pLG06SnQoaVs3XSxuKSxzOkp0KGlbOF0sbil9KTpudWxsPT1zP3M9e306Im9iamVjdCI9PXR5cGVvZiBzJiYoImZyb20iaW4gc3x8InRvImluIHMpJiYobz1lbihTdChzLmZyb20pLFN0KHMudG8pKSxzPXt9LHMubXM9by5taWxsaXNlY29uZHMscy5NPW8ubW9udGhzKSxyPW5ldyBNdChzKSxrdChlKSYmYyhlLCJfbG9jYWxlIikmJihyLl9sb2NhbGU9ZS5fbG9jYWxlKSxyfWZ1bmN0aW9uIEp0KGUsdCl7dmFyIG49ZSYmcGFyc2VGbG9hdChlLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKnR9ZnVuY3Rpb24gWnQoZSx0KXt2YXIgbj17bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9O3JldHVybiBuLm1vbnRocz10Lm1vbnRoKCktZS5tb250aCgpKzEyKih0LnllYXIoKS1lLnllYXIoKSksZS5jbG9uZSgpLmFkZChuLm1vbnRocywiTSIpLmlzQWZ0ZXIodCkmJi0tbi5tb250aHMsbi5taWxsaXNlY29uZHM9K3QtK2UuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKSxufWZ1bmN0aW9uIGVuKGUsdCl7dmFyIG47cmV0dXJuIGUuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT8odD1IdCh0LGUpLGUuaXNCZWZvcmUodCk/bj1adChlLHQpOihuPVp0KHQsZSksbi5taWxsaXNlY29uZHM9LW4ubWlsbGlzZWNvbmRzLG4ubW9udGhzPS1uLm1vbnRocyksbik6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvLHM7cmV0dXJuIG51bGw9PT1yfHxpc05hTigrcil8fChPKHQsIm1vbWVudCgpLiIrdCsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLiIrdCsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLHM9bixuPXIscj1zKSxuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLG89UXQobixyKSxubih0aGlzLG8sZSksdGhpc319ZnVuY3Rpb24gbm4oZSxuLHIsbyl7dmFyIHM9bi5fbWlsbGlzZWNvbmRzLGk9SXQobi5fZGF5cyksYT1JdChuLl9tb250aHMpO2UuaXNWYWxpZCgpJiYobz1udWxsPT1vfHxvLGEmJmZlKGUsb2UoZSwiTW9udGgiKSthKnIpLGkmJnNlKGUsIkRhdGUiLG9lKGUsIkRhdGUiKStpKnIpLHMmJmUuX2Quc2V0VGltZShlLl9kLnZhbHVlT2YoKStzKnIpLG8mJnQudXBkYXRlT2Zmc2V0KGUsaXx8YSkpfWZ1bmN0aW9uIHJuKGUsdCl7dmFyIG49ZS5kaWZmKHQsImRheXMiLCEwKTtyZXR1cm4gbjwtNj8ic2FtZUVsc2UiOm48LTE/Imxhc3RXZWVrIjpuPDA/Imxhc3REYXkiOm48MT8ic2FtZURheSI6bjwyPyJuZXh0RGF5IjpuPDc/Im5leHRXZWVrIjoic2FtZUVsc2UifWZ1bmN0aW9uIG9uKGUsbil7dmFyIHI9ZXx8U3QoKSxvPUh0KHIsdGhpcykuc3RhcnRPZigiZGF5Iikscz10LmNhbGVuZGFyRm9ybWF0KHRoaXMsbyl8fCJzYW1lRWxzZSIsaT1uJiYoUyhuW3NdKT9uW3NdLmNhbGwodGhpcyxyKTpuW3NdKTtyZXR1cm4gdGhpcy5mb3JtYXQoaXx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIocyx0aGlzLFN0KHIpKSl9ZnVuY3Rpb24gc24oKXtyZXR1cm4gbmV3IGIodGhpcyl9ZnVuY3Rpb24gYW4oZSx0KXt2YXIgbj1FKGUpP2U6U3QoZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJih0PU4oaSh0KT8ibWlsbGlzZWNvbmQiOnQpLCJtaWxsaXNlY29uZCI9PT10P3RoaXMudmFsdWVPZigpPm4udmFsdWVPZigpOm4udmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKHQpLnZhbHVlT2YoKSl9ZnVuY3Rpb24gbG4oZSx0KXt2YXIgbj1FKGUpP2U6U3QoZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJih0PU4oaSh0KT8ibWlsbGlzZWNvbmQiOnQpLCJtaWxsaXNlY29uZCI9PT10P3RoaXMudmFsdWVPZigpPG4udmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZih0KS52YWx1ZU9mKCk8bi52YWx1ZU9mKCkpfWZ1bmN0aW9uIHVuKGUsdCxuLHIpe3JldHVybiByPXJ8fCIoKSIsKCIoIj09PXJbMF0/dGhpcy5pc0FmdGVyKGUsbik6IXRoaXMuaXNCZWZvcmUoZSxuKSkmJigiKSI9PT1yWzFdP3RoaXMuaXNCZWZvcmUodCxuKTohdGhpcy5pc0FmdGVyKHQsbikpfWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG4scj1FKGUpP2U6U3QoZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFyLmlzVmFsaWQoKSkmJih0PU4odHx8Im1pbGxpc2Vjb25kIiksIm1pbGxpc2Vjb25kIj09PXQ/dGhpcy52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKToobj1yLnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZih0KS52YWx1ZU9mKCk8PW4mJm48PXRoaXMuY2xvbmUoKS5lbmRPZih0KS52YWx1ZU9mKCkpKX1mdW5jdGlvbiBkbihlLHQpe3JldHVybiB0aGlzLmlzU2FtZShlLHQpfHx0aGlzLmlzQWZ0ZXIoZSx0KX1mdW5jdGlvbiBfbihlLHQpe3JldHVybiB0aGlzLmlzU2FtZShlLHQpfHx0aGlzLmlzQmVmb3JlKGUsdCl9ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByLG8scztpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZihyPUh0KGUsdGhpcyksIXIuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKG89NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLHQ9Tih0KSl7Y2FzZSJ5ZWFyIjpzPWZuKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6cz1mbih0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6cz1mbih0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOnM9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjpzPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOnM9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6cz0odGhpcy1yLW8pLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6cz0odGhpcy1yLW8pLzYwNDhlNTticmVhaztkZWZhdWx0OnM9dGhpcy1yfXJldHVybiBuP3M6eShzKX1mdW5jdGlvbiBmbihlLHQpe3ZhciBuLHIsbz0xMioodC55ZWFyKCktZS55ZWFyKCkpKyh0Lm1vbnRoKCktZS5tb250aCgpKSxzPWUuY2xvbmUoKS5hZGQobywibW9udGhzIik7cmV0dXJuIHQtczwwPyhuPWUuY2xvbmUoKS5hZGQoby0xLCJtb250aHMiKSxyPSh0LXMpLyhzLW4pKToobj1lLmNsb25lKCkuYWRkKG8rMSwibW9udGhzIikscj0odC1zKS8obi1zKSksLShvK3IpfHwwfWZ1bmN0aW9uIG1uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfWZ1bmN0aW9uIGhuKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgdD0hMCE9PWUsbj10P3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHxuLnllYXIoKT45OTk5P1cobix0PyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6UyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/dD90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsVyhuLCJaIikpOlcobix0PyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX1mdW5jdGlvbiBnbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgZT0ibW9tZW50Iix0PSIiO3RoaXMuaXNMb2NhbCgpfHwoZT0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLHQ9IloiKTt2YXIgbj0iWyIrZSsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsbz10KydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK28pfWZ1bmN0aW9uIGJuKGUpe2V8fChlPXRoaXMuaXNVdGMoKT90LmRlZmF1bHRGb3JtYXRVdGM6dC5kZWZhdWx0Rm9ybWF0KTt2YXIgbj1XKHRoaXMsZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQobil9ZnVuY3Rpb24gRW4oZSx0KXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihFKGUpJiZlLmlzVmFsaWQoKXx8U3QoZSkuaXNWYWxpZCgpKT9RdCh7dG86dGhpcyxmcm9tOmV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXQpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIHRoaXMuZnJvbShTdCgpLGUpfWZ1bmN0aW9uIHZuKGUsdCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoRShlKSYmZS5pc1ZhbGlkKCl8fFN0KGUpLmlzVmFsaWQoKSk/UXQoe2Zyb206dGhpcyx0bzplfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF0KTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFRuKGUpe3JldHVybiB0aGlzLnRvKFN0KCksZSl9ZnVuY3Rpb24gQW4oZSl7dmFyIHQ7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5fbG9jYWxlLl9hYmJyOih0PXJ0KGUpLG51bGwhPXQmJih0aGlzLl9sb2NhbGU9dCksdGhpcyl9ZnVuY3Rpb24gQ24oKXtyZXR1cm4gdGhpcy5fbG9jYWxlfWZ1bmN0aW9uIE9uKGUpe3N3aXRjaChlPU4oZSkpe2Nhc2UieWVhciI6dGhpcy5tb250aCgwKTtjYXNlInF1YXJ0ZXIiOmNhc2UibW9udGgiOnRoaXMuZGF0ZSgxKTtjYXNlIndlZWsiOmNhc2UiaXNvV2VlayI6Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6dGhpcy5ob3VycygwKTtjYXNlImhvdXIiOnRoaXMubWludXRlcygwKTtjYXNlIm1pbnV0ZSI6dGhpcy5zZWNvbmRzKDApO2Nhc2Uic2Vjb25kIjp0aGlzLm1pbGxpc2Vjb25kcygwKX1yZXR1cm4id2VlayI9PT1lJiZ0aGlzLndlZWtkYXkoMCksImlzb1dlZWsiPT09ZSYmdGhpcy5pc29XZWVrZGF5KDEpLCJxdWFydGVyIj09PWUmJnRoaXMubW9udGgoMypNYXRoLmZsb29yKHRoaXMubW9udGgoKS8zKSksdGhpc31mdW5jdGlvbiBTbihlKXtyZXR1cm4gdm9pZCAwPT09KGU9TihlKSl8fCJtaWxsaXNlY29uZCI9PT1lP3RoaXM6KCJkYXRlIj09PWUmJihlPSJkYXkiKSx0aGlzLnN0YXJ0T2YoZSkuYWRkKDEsImlzb1dlZWsiPT09ZT8id2VlayI6ZSkuc3VidHJhY3QoMSwibXMiKSl9ZnVuY3Rpb24gUm4oKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfWZ1bmN0aW9uIGpuKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX1mdW5jdGlvbiB4bigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9ZnVuY3Rpb24gTG4oKXt2YXIgZT10aGlzO3JldHVybltlLnllYXIoKSxlLm1vbnRoKCksZS5kYXRlKCksZS5ob3VyKCksZS5taW51dGUoKSxlLnNlY29uZCgpLGUubWlsbGlzZWNvbmQoKV19ZnVuY3Rpb24gRG4oKXt2YXIgZT10aGlzO3JldHVybnt5ZWFyczplLnllYXIoKSxtb250aHM6ZS5tb250aCgpLGRhdGU6ZS5kYXRlKCksaG91cnM6ZS5ob3VycygpLG1pbnV0ZXM6ZS5taW51dGVzKCksc2Vjb25kczplLnNlY29uZHMoKSxtaWxsaXNlY29uZHM6ZS5taWxsaXNlY29uZHMoKX19ZnVuY3Rpb24gd24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9ZnVuY3Rpb24gTW4oKXtyZXR1cm4gbSh0aGlzKX1mdW5jdGlvbiBrbigpe3JldHVybiBkKHt9LGYodGhpcykpfWZ1bmN0aW9uIEluKCl7cmV0dXJuIGYodGhpcykub3ZlcmZsb3d9ZnVuY3Rpb24gUG4oKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fWZ1bmN0aW9uIE5uKGUsdCl7RygwLFtlLGUubGVuZ3RoXSwwLHQpfWZ1bmN0aW9uIEhuKGUpe3JldHVybiBHbi5jYWxsKHRoaXMsZSx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gR24uY2FsbCh0aGlzLGUsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX1mdW5jdGlvbiBCbigpe3JldHVybiBPZSh0aGlzLnllYXIoKSwxLDQpfWZ1bmN0aW9uIFVuKCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIE9lKHRoaXMueWVhcigpLGUuZG93LGUuZG95KX1mdW5jdGlvbiBHbihlLHQsbixyLG8pe3ZhciBzO3JldHVybiBudWxsPT1lP0NlKHRoaXMscixvKS55ZWFyOihzPU9lKGUscixvKSx0PnMmJih0PXMpLHpuLmNhbGwodGhpcyxlLHQsbixyLG8pKX1mdW5jdGlvbiB6bihlLHQsbixyLG8pe3ZhciBzPUFlKGUsdCxuLHIsbyksaT12ZShzLnllYXIsMCxzLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihpLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoaS5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoaS5nZXRVVENEYXRlKCkpLHRoaXN9ZnVuY3Rpb24gVm4oZSl7cmV0dXJuIG51bGw9PWU/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKihlLTEpK3RoaXMubW9udGgoKSUzKX1mdW5jdGlvbiBXbihlKXt2YXIgdD1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PWU/dDp0aGlzLmFkZChlLXQsImQiKX1mdW5jdGlvbiBZbihlLHQpe3RbaG9dPXYoMWUzKigiMC4iK2UpKX1mdW5jdGlvbiBxbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn1mdW5jdGlvbiBLbigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifWZ1bmN0aW9uIFhuKGUpe3JldHVybiBTdCgxZTMqZSl9ZnVuY3Rpb24gJG4oKXtyZXR1cm4gU3QuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfWZ1bmN0aW9uIFFuKGUpe3JldHVybiBlfWZ1bmN0aW9uIEpuKGUsdCxuLHIpe3ZhciBvPXJ0KCkscz1fKCkuc2V0KHIsdCk7cmV0dXJuIG9bbl0ocyxlKX1mdW5jdGlvbiBabihlLHQsbil7aWYoYShlKSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiIixudWxsIT10KXJldHVybiBKbihlLHQsbiwibW9udGgiKTt2YXIgcixvPVtdO2ZvcihyPTA7cjwxMjtyKyspb1tyXT1KbihlLHIsbiwibW9udGgiKTtyZXR1cm4gb31mdW5jdGlvbiBlcihlLHQsbixyKXsiYm9vbGVhbiI9PXR5cGVvZiBlPyhhKHQpJiYobj10LHQ9dm9pZCAwKSx0PXR8fCIiKToodD1lLG49dCxlPSExLGEodCkmJihuPXQsdD12b2lkIDApLHQ9dHx8IiIpO3ZhciBvPXJ0KCkscz1lP28uX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gSm4odCwobitzKSU3LHIsImRheSIpO3ZhciBpLGw9W107Zm9yKGk9MDtpPDc7aSsrKWxbaV09Sm4odCwoaStzKSU3LHIsImRheSIpO3JldHVybiBsfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIFpuKGUsdCwibW9udGhzIil9ZnVuY3Rpb24gbnIoZSx0KXtyZXR1cm4gWm4oZSx0LCJtb250aHNTaG9ydCIpfWZ1bmN0aW9uIHJyKGUsdCxuKXtyZXR1cm4gZXIoZSx0LG4sIndlZWtkYXlzIil9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlcihlLHQsbiwid2Vla2RheXNTaG9ydCIpfWZ1bmN0aW9uIHNyKGUsdCxuKXtyZXR1cm4gZXIoZSx0LG4sIndlZWtkYXlzTWluIil9ZnVuY3Rpb24gaXIoKXt2YXIgZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Y3ModGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWNzKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1jcyh0aGlzLl9tb250aHMpLGUubWlsbGlzZWNvbmRzPWNzKGUubWlsbGlzZWNvbmRzKSxlLnNlY29uZHM9Y3MoZS5zZWNvbmRzKSxlLm1pbnV0ZXM9Y3MoZS5taW51dGVzKSxlLmhvdXJzPWNzKGUuaG91cnMpLGUubW9udGhzPWNzKGUubW9udGhzKSxlLnllYXJzPWNzKGUueWVhcnMpLHRoaXN9ZnVuY3Rpb24gYXIoZSx0LG4scil7dmFyIG89UXQodCxuKTtyZXR1cm4gZS5fbWlsbGlzZWNvbmRzKz1yKm8uX21pbGxpc2Vjb25kcyxlLl9kYXlzKz1yKm8uX2RheXMsZS5fbW9udGhzKz1yKm8uX21vbnRocyxlLl9idWJibGUoKX1mdW5jdGlvbiBscihlLHQpe3JldHVybiBhcih0aGlzLGUsdCwxKX1mdW5jdGlvbiB1cihlLHQpe3JldHVybiBhcih0aGlzLGUsdCwtMSl9ZnVuY3Rpb24gY3IoZSl7cmV0dXJuIGU8MD9NYXRoLmZsb29yKGUpOk1hdGguY2VpbChlKX1mdW5jdGlvbiBkcigpe3ZhciBlLHQsbixyLG8scz10aGlzLl9taWxsaXNlY29uZHMsaT10aGlzLl9kYXlzLGE9dGhpcy5fbW9udGhzLGw9dGhpcy5fZGF0YTtyZXR1cm4gcz49MCYmaT49MCYmYT49MHx8czw9MCYmaTw9MCYmYTw9MHx8KHMrPTg2NGU1KmNyKHByKGEpK2kpLGk9MCxhPTApLGwubWlsbGlzZWNvbmRzPXMlMWUzLGU9eShzLzFlMyksbC5zZWNvbmRzPWUlNjAsdD15KGUvNjApLGwubWludXRlcz10JTYwLG49eSh0LzYwKSxsLmhvdXJzPW4lMjQsaSs9eShuLzI0KSxvPXkoX3IoaSkpLGErPW8saS09Y3IocHIobykpLHI9eShhLzEyKSxhJT0xMixsLmRheXM9aSxsLm1vbnRocz1hLGwueWVhcnM9cix0aGlzfWZ1bmN0aW9uIF9yKGUpe3JldHVybiA0ODAwKmUvMTQ2MDk3fWZ1bmN0aW9uIHByKGUpe3JldHVybiAxNDYwOTcqZS80ODAwfWZ1bmN0aW9uIGZyKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciB0LG4scj10aGlzLl9taWxsaXNlY29uZHM7aWYoIm1vbnRoIj09PShlPU4oZSkpfHwieWVhciI9PT1lKXJldHVybiB0PXRoaXMuX2RheXMrci84NjRlNSxuPXRoaXMuX21vbnRocytfcih0KSwibW9udGgiPT09ZT9uOm4vMTI7c3dpdGNoKHQ9dGhpcy5fZGF5cytNYXRoLnJvdW5kKHByKHRoaXMuX21vbnRocykpLGUpe2Nhc2Uid2VlayI6cmV0dXJuIHQvNytyLzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIHQrci84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCp0K3IvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqdCtyLzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKnQrci8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqdCkrcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrZSl9fWZ1bmN0aW9uIG1yKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX21pbGxpc2Vjb25kcys4NjRlNSp0aGlzLl9kYXlzK3RoaXMuX21vbnRocyUxMioyNTkyZTYrMzE1MzZlNip2KHRoaXMuX21vbnRocy8xMik6TmFOfWZ1bmN0aW9uIGhyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKGUpfX1mdW5jdGlvbiBncigpe3JldHVybiBRdCh0aGlzKX1mdW5jdGlvbiBicihlKXtyZXR1cm4gZT1OKGUpLHRoaXMuaXNWYWxpZCgpP3RoaXNbZSsicyJdKCk6TmFOfWZ1bmN0aW9uIEVyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9kYXRhW2VdOk5hTn19ZnVuY3Rpb24geXIoKXtyZXR1cm4geSh0aGlzLmRheXMoKS83KX1mdW5jdGlvbiB2cihlLHQsbixyLG8pe3JldHVybiBvLnJlbGF0aXZlVGltZSh0fHwxLCEhbixlLHIpfWZ1bmN0aW9uIFRyKGUsdCxuKXt2YXIgcj1RdChlKS5hYnMoKSxvPVNzKHIuYXMoInMiKSkscz1TcyhyLmFzKCJtIikpLGk9U3Moci5hcygiaCIpKSxhPVNzKHIuYXMoImQiKSksbD1TcyhyLmFzKCJNIikpLHU9U3Moci5hcygieSIpKSxjPW88PVJzLnNzJiZbInMiLG9dfHxvPFJzLnMmJlsic3MiLG9dfHxzPD0xJiZbIm0iXXx8czxScy5tJiZbIm1tIixzXXx8aTw9MSYmWyJoIl18fGk8UnMuaCYmWyJoaCIsaV18fGE8PTEmJlsiZCJdfHxhPFJzLmQmJlsiZGQiLGFdfHxsPD0xJiZbIk0iXXx8bDxScy5NJiZbIk1NIixsXXx8dTw9MSYmWyJ5Il18fFsieXkiLHVdO3JldHVybiBjWzJdPXQsY1szXT0rZT4wLGNbNF09bix2ci5hcHBseShudWxsLGMpfWZ1bmN0aW9uIEFyKGUpe3JldHVybiB2b2lkIDA9PT1lP1NzOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoU3M9ZSwhMCl9ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gdm9pZCAwIT09UnNbZV0mJih2b2lkIDA9PT10P1JzW2VdOihSc1tlXT10LCJzIj09PWUmJihScy5zcz10LTEpLCEwKSl9ZnVuY3Rpb24gT3IoZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLG49VHIodGhpcywhZSx0KTtyZXR1cm4gZSYmKG49dC5wYXN0RnV0dXJlKCt0aGlzLG4pKSx0LnBvc3Rmb3JtYXQobil9ZnVuY3Rpb24gU3IoZSl7cmV0dXJuKGU+MCktKGU8MCl8fCtlfWZ1bmN0aW9uIFJyKCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLHQsbixyPWpzKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLG89anModGhpcy5fZGF5cykscz1qcyh0aGlzLl9tb250aHMpO2U9eShyLzYwKSx0PXkoZS82MCksciU9NjAsZSU9NjAsbj15KHMvMTIpLHMlPTEyO3ZhciBpPW4sYT1zLGw9byx1PXQsYz1lLGQ9cj9yLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsXz10aGlzLmFzU2Vjb25kcygpO2lmKCFfKXJldHVybiJQMEQiO3ZhciBwPV88MD8iLSI6IiIsZj1Tcih0aGlzLl9tb250aHMpIT09U3IoXyk/Ii0iOiIiLG09U3IodGhpcy5fZGF5cykhPT1TcihfKT8iLSI6IiIsaD1Tcih0aGlzLl9taWxsaXNlY29uZHMpIT09U3IoXyk/Ii0iOiIiO3JldHVybiBwKyJQIisoaT9mK2krIlkiOiIiKSsoYT9mK2ErIk0iOiIiKSsobD9tK2wrIkQiOiIiKSsodXx8Y3x8ZD8iVCI6IiIpKyh1P2grdSsiSCI6IiIpKyhjP2grYysiTSI6IiIpKyhkP2grZCsiUyI6IiIpfXZhciBqcix4cjt4cj1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0KHRoaXMpLG49dC5sZW5ndGg+Pj4wLHI9MDtyPG47cisrKWlmKHIgaW4gdCYmZS5jYWxsKHRoaXMsdFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfTt2YXIgTHI9dC5tb21lbnRQcm9wZXJ0aWVzPVtdLERyPSExLHdyPXt9O3Quc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLHQuZGVwcmVjYXRpb25IYW5kbGVyPW51bGw7dmFyIE1yO01yPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKHQgaW4gZSljKGUsdCkmJm4ucHVzaCh0KTtyZXR1cm4gbn07dmFyIGtyPXtzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sSXI9e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxQcj0vXGR7MSwyfS8sTnI9e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sSHI9e30sRnI9e30sQnI9LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csVXI9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csR3I9e30senI9e30sVnI9L1xkLyxXcj0vXGRcZC8sWXI9L1xkezN9Lyxxcj0vXGR7NH0vLEtyPS9bKy1dP1xkezZ9LyxYcj0vXGRcZD8vLCRyPS9cZFxkXGRcZD8vLFFyPS9cZFxkXGRcZFxkXGQ/LyxKcj0vXGR7MSwzfS8sWnI9L1xkezEsNH0vLGVvPS9bKy1dP1xkezEsNn0vLHRvPS9cZCsvLG5vPS9bKy1dP1xkKy8scm89L1p8WystXVxkXGQ6P1xkXGQvZ2ksb289L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxzbz0vWystXT9cZCsoXC5cZHsxLDN9KT8vLGlvPS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksYW89e30sbG89e30sdW89MCxjbz0xLF9vPTIscG89Myxmbz00LG1vPTUsaG89Nixnbz03LGJvPTg7RygiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy55ZWFyKCk7cmV0dXJuIGU8PTk5OTk/IiIrZToiKyIrZX0pLEcoMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLEcoMCxbIllZWVkiLDRdLDAsInllYXIiKSxHKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLEcoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLFAoInllYXIiLCJ5IiksRigieWVhciIsMSkscSgiWSIsbm8pLHEoIllZIixYcixXcikscSgiWVlZWSIsWnIscXIpLHEoIllZWVlZIixlbyxLcikscSgiWVlZWVlZIixlbyxLciksUShbIllZWVlZIiwiWVlZWVlZIl0sdW8pLFEoIllZWVkiLGZ1bmN0aW9uKGUsbil7blt1b109Mj09PWUubGVuZ3RoP3QucGFyc2VUd29EaWdpdFllYXIoZSk6dihlKX0pLFEoIllZIixmdW5jdGlvbihlLG4pe25bdW9dPXQucGFyc2VUd29EaWdpdFllYXIoZSl9KSxRKCJZIixmdW5jdGlvbihlLHQpe3RbdW9dPXBhcnNlSW50KGUsMTApfSksdC5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihlKXtyZXR1cm4gdihlKSsodihlKT42OD8xOTAwOjJlMyl9O3ZhciBFbyx5bz1yZSgiRnVsbFllYXIiLCEwKTtFbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihlKXt2YXIgdDtmb3IodD0wO3Q8dGhpcy5sZW5ndGg7Kyt0KWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxHKCJNIixbIk1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksRygiTU1NIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsZSl9KSxHKCJNTU1NIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLGUpfSksUCgibW9udGgiLCJNIiksRigibW9udGgiLDgpLHEoIk0iLFhyKSxxKCJNTSIsWHIsV3IpLHEoIk1NTSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tb250aHNTaG9ydFJlZ2V4KGUpfSkscSgiTU1NTSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tb250aHNSZWdleChlKX0pLFEoWyJNIiwiTU0iXSxmdW5jdGlvbihlLHQpe3RbY29dPXYoZSktMX0pLFEoWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bi5fbG9jYWxlLm1vbnRoc1BhcnNlKGUscixuLl9zdHJpY3QpO251bGwhPW8/dFtjb109bzpmKG4pLmludmFsaWRNb250aD1lfSk7dmFyIHZvPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sVG89IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksQW89Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLENvPWlvLE9vPWlvO0coInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxHKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksUCgid2VlayIsInciKSxQKCJpc29XZWVrIiwiVyIpLEYoIndlZWsiLDUpLEYoImlzb1dlZWsiLDUpLHEoInciLFhyKSxxKCJ3dyIsWHIsV3IpLHEoIlciLFhyKSxxKCJXVyIsWHIsV3IpLEooWyJ3Iiwid3ciLCJXIiwiV1ciXSxmdW5jdGlvbihlLHQsbixyKXt0W3Iuc3Vic3RyKDAsMSldPXYoZSl9KTt2YXIgU289e2RvdzowLGRveTo2fTtHKCJkIiwwLCJkbyIsImRheSIpLEcoImRkIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsZSl9KSxHKCJkZGQiLDAsMCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLGUpfSksRygiZGRkZCIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLGUpfSksRygiZSIsMCwwLCJ3ZWVrZGF5IiksRygiRSIsMCwwLCJpc29XZWVrZGF5IiksUCgiZGF5IiwiZCIpLFAoIndlZWtkYXkiLCJlIiksUCgiaXNvV2Vla2RheSIsIkUiKSxGKCJkYXkiLDExKSxGKCJ3ZWVrZGF5IiwxMSksRigiaXNvV2Vla2RheSIsMTEpLHEoImQiLFhyKSxxKCJlIixYcikscSgiRSIsWHIpLHEoImRkIixmdW5jdGlvbihlLHQpe3JldHVybiB0LndlZWtkYXlzTWluUmVnZXgoZSl9KSxxKCJkZGQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2Vla2RheXNTaG9ydFJlZ2V4KGUpfSkscSgiZGRkZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC53ZWVrZGF5c1JlZ2V4KGUpfSksSihbImRkIiwiZGRkIiwiZGRkZCJdLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGUscixuLl9zdHJpY3QpO251bGwhPW8/dC5kPW86ZihuKS5pbnZhbGlkV2Vla2RheT1lfSksSihbImQiLCJlIiwiRSJdLGZ1bmN0aW9uKGUsdCxuLHIpe3Rbcl09dihlKX0pO3ZhciBSbz0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksam89IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx4bz0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksTG89aW8sRG89aW8sd289aW87RygiSCIsWyJISCIsMl0sMCwiaG91ciIpLEcoImgiLFsiaGgiLDJdLDAsV2UpLEcoImsiLFsia2siLDJdLDAsWWUpLEcoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrV2UuYXBwbHkodGhpcykrVSh0aGlzLm1pbnV0ZXMoKSwyKX0pLEcoImhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIitXZS5hcHBseSh0aGlzKStVKHRoaXMubWludXRlcygpLDIpK1UodGhpcy5zZWNvbmRzKCksMil9KSxHKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStVKHRoaXMubWludXRlcygpLDIpfSksRygiSG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStVKHRoaXMubWludXRlcygpLDIpK1UodGhpcy5zZWNvbmRzKCksMil9KSxxZSgiYSIsITApLHFlKCJBIiwhMSksUCgiaG91ciIsImgiKSxGKCJob3VyIiwxMykscSgiYSIsS2UpLHEoIkEiLEtlKSxxKCJIIixYcikscSgiaCIsWHIpLHEoImsiLFhyKSxxKCJISCIsWHIsV3IpLHEoImhoIixYcixXcikscSgia2siLFhyLFdyKSxxKCJobW0iLCRyKSxxKCJobW1zcyIsUXIpLHEoIkhtbSIsJHIpLHEoIkhtbXNzIixRciksUShbIkgiLCJISCJdLHBvKSxRKFsiayIsImtrIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPXYoZSk7dFtwb109MjQ9PT1yPzA6cn0pLFEoWyJhIiwiQSJdLGZ1bmN0aW9uKGUsdCxuKXtuLl9pc1BtPW4uX2xvY2FsZS5pc1BNKGUpLG4uX21lcmlkaWVtPWV9KSxRKFsiaCIsImhoIl0sZnVuY3Rpb24oZSx0LG4pe3RbcG9dPXYoZSksZihuKS5iaWdIb3VyPSEwfSksUSgiaG1tIixmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5sZW5ndGgtMjt0W3BvXT12KGUuc3Vic3RyKDAscikpLHRbZm9dPXYoZS5zdWJzdHIocikpLGYobikuYmlnSG91cj0hMH0pLFEoImhtbXNzIixmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5sZW5ndGgtNCxvPWUubGVuZ3RoLTI7dFtwb109dihlLnN1YnN0cigwLHIpKSx0W2ZvXT12KGUuc3Vic3RyKHIsMikpLHRbbW9dPXYoZS5zdWJzdHIobykpLGYobikuYmlnSG91cj0hMH0pLFEoIkhtbSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUubGVuZ3RoLTI7dFtwb109dihlLnN1YnN0cigwLHIpKSx0W2ZvXT12KGUuc3Vic3RyKHIpKX0pLFEoIkhtbXNzIixmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5sZW5ndGgtNCxvPWUubGVuZ3RoLTI7dFtwb109dihlLnN1YnN0cigwLHIpKSx0W2ZvXT12KGUuc3Vic3RyKHIsMikpLHRbbW9dPXYoZS5zdWJzdHIobykpfSk7dmFyIE1vLGtvPS9bYXBdXC4/bT9cLj8vaSxJbz1yZSgiSG91cnMiLCEwKSxQbz17Y2FsZW5kYXI6a3IsbG9uZ0RhdGVGb3JtYXQ6SXIsaW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6UHIscmVsYXRpdmVUaW1lOk5yLG1vbnRoczpUbyxtb250aHNTaG9ydDpBbyx3ZWVrOlNvLHdlZWtkYXlzOlJvLHdlZWtkYXlzTWluOnhvLHdlZWtkYXlzU2hvcnQ6am8sbWVyaWRpZW1QYXJzZTprb30sTm89e30sSG89e30sRm89L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sQm89L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLFVvPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLEdvPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L11dLHpvPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLFZvPS9eXC8/RGF0ZVwoKFwtP1xkKykvaSxXbz0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkkLyxZbz17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07dC5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbihlKXtlLl9kPW5ldyBEYXRlKGUuX2krKGUuX3VzZVVUQz8iIFVUQyI6IiIpKX0pLHQuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LHQuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBxbz1DKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgZT1TdC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT9lPHRoaXM/dGhpczplOmgoKX0pLEtvPUMoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBlPVN0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpP2U+dGhpcz90aGlzOmU6aCgpfSksWG89ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LCRvPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtQdCgiWiIsIjoiKSxQdCgiWloiLCIiKSxxKCJaIixvbykscSgiWloiLG9vKSxRKFsiWiIsIlpaIl0sZnVuY3Rpb24oZSx0LG4pe24uX3VzZVVUQz0hMCxuLl90em09TnQob28sZSl9KTt2YXIgUW89LyhbXCtcLV18XGRcZCkvZ2k7dC51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBKbz0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLFpvPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztRdC5mbj1NdC5wcm90b3R5cGUsUXQuaW52YWxpZD13dDt2YXIgZXM9dG4oMSwiYWRkIiksdHM9dG4oLTEsInN1YnRyYWN0Iik7dC5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsdC5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgbnM9QygibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKGUpfSk7RygwLFsiZ2ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pLEcoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxObigiZ2dnZyIsIndlZWtZZWFyIiksTm4oImdnZ2dnIiwid2Vla1llYXIiKSxObigiR0dHRyIsImlzb1dlZWtZZWFyIiksTm4oIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxQKCJ3ZWVrWWVhciIsImdnIiksUCgiaXNvV2Vla1llYXIiLCJHRyIpLEYoIndlZWtZZWFyIiwxKSxGKCJpc29XZWVrWWVhciIsMSkscSgiRyIsbm8pLHEoImciLG5vKSxxKCJHRyIsWHIsV3IpLHEoImdnIixYcixXcikscSgiR0dHRyIsWnIscXIpLHEoImdnZ2ciLFpyLHFyKSxxKCJHR0dHRyIsZW8sS3IpLHEoImdnZ2dnIixlbyxLciksSihbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKGUsdCxuLHIpe3Rbci5zdWJzdHIoMCwyKV09dihlKX0pLEooWyJnZyIsIkdHIl0sZnVuY3Rpb24oZSxuLHIsbyl7bltvXT10LnBhcnNlVHdvRGlnaXRZZWFyKGUpfSksRygiUSIsMCwiUW8iLCJxdWFydGVyIiksUCgicXVhcnRlciIsIlEiKSxGKCJxdWFydGVyIiw3KSxxKCJRIixWciksUSgiUSIsZnVuY3Rpb24oZSx0KXt0W2NvXT0zKih2KGUpLTEpfSksRygiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLFAoImRhdGUiLCJEIiksRigiZGF0ZSIsOSkscSgiRCIsWHIpLHEoIkREIixYcixXcikscSgiRG8iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/dC5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8dC5fb3JkaW5hbFBhcnNlOnQuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSksUShbIkQiLCJERCJdLF9vKSxRKCJEbyIsZnVuY3Rpb24oZSx0KXt0W19vXT12KGUubWF0Y2goWHIpWzBdKX0pO3ZhciBycz1yZSgiRGF0ZSIsITApO0coIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLFAoImRheU9mWWVhciIsIkRERCIpLEYoImRheU9mWWVhciIsNCkscSgiREREIixKcikscSgiRERERCIsWXIpLFEoWyJEREQiLCJEREREIl0sZnVuY3Rpb24oZSx0LG4pe24uX2RheU9mWWVhcj12KGUpfSksRygibSIsWyJtbSIsMl0sMCwibWludXRlIiksUCgibWludXRlIiwibSIpLEYoIm1pbnV0ZSIsMTQpLHEoIm0iLFhyKSxxKCJtbSIsWHIsV3IpLFEoWyJtIiwibW0iXSxmbyk7dmFyIG9zPXJlKCJNaW51dGVzIiwhMSk7RygicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksUCgic2Vjb25kIiwicyIpLEYoInNlY29uZCIsMTUpLHEoInMiLFhyKSxxKCJzcyIsWHIsV3IpLFEoWyJzIiwic3MiXSxtbyk7dmFyIHNzPXJlKCJTZWNvbmRzIiwhMSk7RygiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxHKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxHKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksRygwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxHKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksRygwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSxHKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxHKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksRygwLFsiU1NTU1NTU1NTIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxQKCJtaWxsaXNlY29uZCIsIm1zIiksRigibWlsbGlzZWNvbmQiLDE2KSxxKCJTIixKcixWcikscSgiU1MiLEpyLFdyKSxxKCJTU1MiLEpyLFlyKTt2YXIgaXM7Zm9yKGlzPSJTU1NTIjtpcy5sZW5ndGg8PTk7aXMrPSJTIilxKGlzLHRvKTtmb3IoaXM9IlMiO2lzLmxlbmd0aDw9OTtpcys9IlMiKVEoaXMsWW4pO3ZhciBhcz1yZSgiTWlsbGlzZWNvbmRzIiwhMSk7RygieiIsMCwwLCJ6b25lQWJiciIpLEcoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIGxzPWIucHJvdG90eXBlO2xzLmFkZD1lcyxscy5jYWxlbmRhcj1vbixscy5jbG9uZT1zbixscy5kaWZmPXBuLGxzLmVuZE9mPVNuLGxzLmZvcm1hdD1ibixscy5mcm9tPUVuLGxzLmZyb21Ob3c9eW4sbHMudG89dm4sbHMudG9Ob3c9VG4sbHMuZ2V0PWllLGxzLmludmFsaWRBdD1Jbixscy5pc0FmdGVyPWFuLGxzLmlzQmVmb3JlPWxuLGxzLmlzQmV0d2Vlbj11bixscy5pc1NhbWU9Y24sbHMuaXNTYW1lT3JBZnRlcj1kbixscy5pc1NhbWVPckJlZm9yZT1fbixscy5pc1ZhbGlkPU1uLGxzLmxhbmc9bnMsbHMubG9jYWxlPUFuLGxzLmxvY2FsZURhdGE9Q24sbHMubWF4PUtvLGxzLm1pbj1xbyxscy5wYXJzaW5nRmxhZ3M9a24sbHMuc2V0PWFlLGxzLnN0YXJ0T2Y9T24sbHMuc3VidHJhY3Q9dHMsbHMudG9BcnJheT1Mbixscy50b09iamVjdD1Ebixscy50b0RhdGU9eG4sbHMudG9JU09TdHJpbmc9aG4sbHMuaW5zcGVjdD1nbixscy50b0pTT049d24sbHMudG9TdHJpbmc9bW4sbHMudW5peD1qbixscy52YWx1ZU9mPVJuLGxzLmNyZWF0aW9uRGF0YT1Qbixscy55ZWFyPXlvLGxzLmlzTGVhcFllYXI9bmUsbHMud2Vla1llYXI9SG4sbHMuaXNvV2Vla1llYXI9Rm4sbHMucXVhcnRlcj1scy5xdWFydGVycz1Wbixscy5tb250aD1tZSxscy5kYXlzSW5Nb250aD1oZSxscy53ZWVrPWxzLndlZWtzPXhlLGxzLmlzb1dlZWs9bHMuaXNvV2Vla3M9TGUsbHMud2Vla3NJblllYXI9VW4sbHMuaXNvV2Vla3NJblllYXI9Qm4sbHMuZGF0ZT1ycyxscy5kYXk9bHMuZGF5cz1IZSxscy53ZWVrZGF5PUZlLGxzLmlzb1dlZWtkYXk9QmUsbHMuZGF5T2ZZZWFyPVduLGxzLmhvdXI9bHMuaG91cnM9SW8sbHMubWludXRlPWxzLm1pbnV0ZXM9b3MsbHMuc2Vjb25kPWxzLnNlY29uZHM9c3MsbHMubWlsbGlzZWNvbmQ9bHMubWlsbGlzZWNvbmRzPWFzLGxzLnV0Y09mZnNldD1CdCxscy51dGM9R3QsbHMubG9jYWw9enQsbHMucGFyc2Vab25lPVZ0LGxzLmhhc0FsaWduZWRIb3VyT2Zmc2V0PVd0LGxzLmlzRFNUPVl0LGxzLmlzTG9jYWw9S3QsbHMuaXNVdGNPZmZzZXQ9WHQsbHMuaXNVdGM9JHQsbHMuaXNVVEM9JHQsbHMuem9uZUFiYnI9cW4sbHMuem9uZU5hbWU9S24sbHMuZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLHJzKSxscy5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixtZSksbHMueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIseW8pLGxzLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLFV0KSxscy5pc0RTVFNoaWZ0ZWQ9QygiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIscXQpO3ZhciB1cz14LnByb3RvdHlwZTt1cy5jYWxlbmRhcj1MLHVzLmxvbmdEYXRlRm9ybWF0PUQsdXMuaW52YWxpZERhdGU9dyx1cy5vcmRpbmFsPU0sdXMucHJlcGFyc2U9UW4sdXMucG9zdGZvcm1hdD1Rbix1cy5yZWxhdGl2ZVRpbWU9ayx1cy5wYXN0RnV0dXJlPUksdXMuc2V0PVIsdXMubW9udGhzPWNlLHVzLm1vbnRoc1Nob3J0PWRlLHVzLm1vbnRoc1BhcnNlPXBlLHVzLm1vbnRoc1JlZ2V4PWJlLHVzLm1vbnRoc1Nob3J0UmVnZXg9Z2UsdXMud2Vlaz1TZSx1cy5maXJzdERheU9mWWVhcj1qZSx1cy5maXJzdERheU9mV2Vlaz1SZSx1cy53ZWVrZGF5cz1NZSx1cy53ZWVrZGF5c01pbj1JZSx1cy53ZWVrZGF5c1Nob3J0PWtlLHVzLndlZWtkYXlzUGFyc2U9TmUsdXMud2Vla2RheXNSZWdleD1VZSx1cy53ZWVrZGF5c1Nob3J0UmVnZXg9R2UsdXMud2Vla2RheXNNaW5SZWdleD16ZSx1cy5pc1BNPVhlLHVzLm1lcmlkaWVtPSRlLGV0KCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuIGUrKDE9PT12KGUlMTAwLzEwKT8idGgiOjE9PT10PyJzdCI6Mj09PXQ/Im5kIjozPT09dD8icmQiOiJ0aCIpfX0pLHQubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZXQpLHQubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscnQpO3ZhciBjcz1NYXRoLmFicyxkcz1ocigibXMiKSxfcz1ocigicyIpLHBzPWhyKCJtIiksZnM9aHIoImgiKSxtcz1ocigiZCIpLGhzPWhyKCJ3IiksZ3M9aHIoIk0iKSxicz1ocigieSIpLEVzPUVyKCJtaWxsaXNlY29uZHMiKSx5cz1Fcigic2Vjb25kcyIpLHZzPUVyKCJtaW51dGVzIiksVHM9RXIoImhvdXJzIiksQXM9RXIoImRheXMiKSxDcz1FcigibW9udGhzIiksT3M9RXIoInllYXJzIiksU3M9TWF0aC5yb3VuZCxScz17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNixNOjExfSxqcz1NYXRoLmFicyx4cz1NdC5wcm90b3R5cGU7cmV0dXJuIHhzLmlzVmFsaWQ9RHQseHMuYWJzPWlyLHhzLmFkZD1scix4cy5zdWJ0cmFjdD11cix4cy5hcz1mcix4cy5hc01pbGxpc2Vjb25kcz1kcyx4cy5hc1NlY29uZHM9X3MseHMuYXNNaW51dGVzPXBzLHhzLmFzSG91cnM9ZnMseHMuYXNEYXlzPW1zLHhzLmFzV2Vla3M9aHMseHMuYXNNb250aHM9Z3MseHMuYXNZZWFycz1icyx4cy52YWx1ZU9mPW1yLHhzLl9idWJibGU9ZHIseHMuY2xvbmU9Z3IseHMuZ2V0PWJyLHhzLm1pbGxpc2Vjb25kcz1Fcyx4cy5zZWNvbmRzPXlzLHhzLm1pbnV0ZXM9dnMseHMuaG91cnM9VHMseHMuZGF5cz1Bcyx4cy53ZWVrcz15cix4cy5tb250aHM9Q3MseHMueWVhcnM9T3MseHMuaHVtYW5pemU9T3IseHMudG9JU09TdHJpbmc9UnIseHMudG9TdHJpbmc9UnIseHMudG9KU09OPVJyLHhzLmxvY2FsZT1Bbix4cy5sb2NhbGVEYXRhPUNuLHhzLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixScikseHMubGFuZz1ucyxHKCJYIiwwLDAsInVuaXgiKSxHKCJ4IiwwLDAsInZhbHVlT2YiKSxxKCJ4IixubykscSgiWCIsc28pLFEoIlgiLGZ1bmN0aW9uKGUsdCxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KGUsMTApKX0pLFEoIngiLGZ1bmN0aW9uKGUsdCxuKXtuLl9kPW5ldyBEYXRlKHYoZSkpfSksdC52ZXJzaW9uPSIyLjIyLjEiLGZ1bmN0aW9uKGUpe2pyPWV9KFN0KSx0LmZuPWxzLHQubWluPWp0LHQubWF4PXh0LHQubm93PVhvLHQudXRjPV8sdC51bml4PVhuLHQubW9udGhzPXRyLHQuaXNEYXRlPWwsdC5sb2NhbGU9ZXQsdC5pbnZhbGlkPWgsdC5kdXJhdGlvbj1RdCx0LmlzTW9tZW50PUUsdC53ZWVrZGF5cz1ycix0LnBhcnNlWm9uZT0kbix0LmxvY2FsZURhdGE9cnQsdC5pc0R1cmF0aW9uPWt0LHQubW9udGhzU2hvcnQ9bnIsdC53ZWVrZGF5c01pbj1zcix0LmRlZmluZUxvY2FsZT10dCx0LnVwZGF0ZUxvY2FsZT1udCx0LmxvY2FsZXM9b3QsdC53ZWVrZGF5c1Nob3J0PW9yLHQubm9ybWFsaXplVW5pdHM9Tix0LnJlbGF0aXZlVGltZVJvdW5kaW5nPUFyLHQucmVsYXRpdmVUaW1lVGhyZXNob2xkPUNyLHQuY2FsZW5kYXJGb3JtYXQ9cm4sdC5wcm90b3R5cGU9bHMsdC5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IllZWVktW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0sdH0pfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL25vZGVfbW9kdWxlcy9uZXh0LXRpY2svaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsbil7dmFyIHIsbztyPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIGV9LG89ZnVuY3Rpb24oZSl7dmFyIHQsbixvPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxzPTA7cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKCl7dmFyIGU7aWYodCluJiYodD1uLmNvbmNhdCh0KSk7ZWxzZXtpZighbilyZXR1cm47dD1ufWlmKG49dCx0PW51bGwsImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIGU9bixuPW51bGwsdm9pZCBlKCk7Zm9yKG8uZGF0YT1zPSsrcyUyO247KWU9bi5zaGlmdCgpLG4ubGVuZ3RofHwobj1udWxsKSxlKCl9KS5vYnNlcnZlKG8se2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbihlKXtpZihyKGUpLHQpcmV0dXJuIHZvaWQoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dD1bdCxlXTp0LnB1c2goZSkpO3Q9ZSxvLmRhdGE9cz0rK3MlMn19LGUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dFRpY2spcmV0dXJuIHQubmV4dFRpY2s7aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyKXJldHVybiBvKE11dGF0aW9uT2JzZXJ2ZXIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKXJldHVybiBvKFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUpe24ocihlKSl9OiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0fHwib2JqZWN0Ij09dHlwZW9mIHNldFRpbWVvdXQ/ZnVuY3Rpb24oZSl7c2V0VGltZW91dChyKGUpLDApfTpudWxsfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIikuc2V0SW1tZWRpYXRlKX0sIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gcy5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBvKGUsdCl7aWYocigpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIHMuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSxlLl9fcHJvdG9fXz1zLnByb3RvdHlwZSk6KG51bGw9PT1lJiYoZT1uZXcgcyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBzKGUsdCxuKXtpZighKHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHMpKXJldHVybiBuZXcgcyhlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiB1KHRoaXMsZSl9cmV0dXJuIGkodGhpcyxlLHQsbil9ZnVuY3Rpb24gaShlLHQsbixyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9fKGUsdCxuLHIpOiJzdHJpbmciPT10eXBlb2YgdD9jKGUsdCxuKTpwKGUsdCl9ZnVuY3Rpb24gYShlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuIGEodCksdDw9MD9vKGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/byhlLHQpLmZpbGwobixyKTpvKGUsdCkuZmlsbChuKTpvKGUsdCl9ZnVuY3Rpb24gdShlLHQpe2lmKGEodCksZT1vKGUsdDwwPzA6MHxmKHQpKSwhcy5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248dDsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIGMoZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpLCFzLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxoKHQsbik7ZT1vKGUscik7dmFyIGk9ZS53cml0ZSh0LG4pO3JldHVybiBpIT09ciYmKGU9ZS5zbGljZSgwLGkpKSxlfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxmKHQubGVuZ3RoKTtlPW8oZSxuKTtmb3IodmFyIHI9MDtyPG47cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIF8oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gdD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scikscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQsZS5fX3Byb3RvX189cy5wcm90b3R5cGUpOmU9ZChlLHQpLGV9ZnVuY3Rpb24gcChlLHQpe2lmKHMuaXNCdWZmZXIodCkpe3ZhciBuPTB8Zih0Lmxlbmd0aCk7cmV0dXJuIGU9byhlLG4pLDA9PT1lLmxlbmd0aD9lOih0LmNvcHkoZSwwLDAsbiksZSl9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fFgodC5sZW5ndGgpP28oZSwwKTpkKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkoodC5kYXRhKSlyZXR1cm4gZChlLHQuZGF0YSl9dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfWZ1bmN0aW9uIGYoZSl7aWYoZT49cigpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IityKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIG0oZSl7cmV0dXJuK2UhPWUmJihlPTApLHMuYWxsb2MoK2UpfWZ1bmN0aW9uIGgoZSx0KXtpZihzLmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBWKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcShlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBWKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGcoZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYobj4+Pj0wLHQ+Pj49MCxuPD10KXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gdyh0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gaih0aGlzLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIEwodGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEQodGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0aGlzLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBNKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGIoZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBFKGUsdCxuLHIsbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49bz8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighbylyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1zLmZyb20odCxyKSkscy5pc0J1ZmZlcih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOnkoZSx0LG4scixvKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTp5KGUsW3RdLG4scixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB5KGUsdCxuLHIsbyl7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiAxPT09aT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqaSl9dmFyIGk9MSxhPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtpPTIsYS89MixsLz0yLG4vPTJ9dmFyIHU7aWYobyl7dmFyIGM9LTE7Zm9yKHU9bjt1PGE7dSsrKWlmKHMoZSx1KT09PXModCwtMT09PWM/MDp1LWMpKXtpZigtMT09PWMmJihjPXUpLHUtYysxPT09bClyZXR1cm4gYyppfWVsc2UtMSE9PWMmJih1LT11LWMpLGM9LTF9ZWxzZSBmb3IobitsPmEmJihuPWEtbCksdT1uO3U+PTA7dS0tKXtmb3IodmFyIGQ9ITAsXz0wO188bDtfKyspaWYocyhlLHUrXykhPT1zKHQsXykpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gdX1yZXR1cm4tMX1mdW5jdGlvbiB2KGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBvPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPm8mJihyPW8pOnI9bzt2YXIgcz10Lmxlbmd0aDtpZihzJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7cj5zLzImJihyPXMvMik7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMippLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gaTtlW24raV09YX1yZXR1cm4gaX1mdW5jdGlvbiBUKGUsdCxuLHIpe3JldHVybiBLKFYodCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gQShlLHQsbixyKXtyZXR1cm4gSyhXKHQpLGUsbixyKX1mdW5jdGlvbiBDKGUsdCxuLHIpe3JldHVybiBBKGUsdCxuLHIpfWZ1bmN0aW9uIE8oZSx0LG4scil7cmV0dXJuIEsocSh0KSxlLG4scil9ZnVuY3Rpb24gUyhlLHQsbixyKXtyZXR1cm4gSyhZKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIFIoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoPyQuZnJvbUJ5dGVBcnJheShlKTokLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBqKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxvPXQ7bzxuOyl7dmFyIHM9ZVtvXSxpPW51bGwsYT1zPjIzOT80OnM+MjIzPzM6cz4xOTE/MjoxO2lmKG8rYTw9bil7dmFyIGwsdSxjLGQ7c3dpdGNoKGEpe2Nhc2UgMTpzPDEyOCYmKGk9cyk7YnJlYWs7Y2FzZSAyOmw9ZVtvKzFdLDEyOD09KDE5MiZsKSYmKGQ9KDMxJnMpPDw2fDYzJmwpPjEyNyYmKGk9ZCk7YnJlYWs7Y2FzZSAzOmw9ZVtvKzFdLHU9ZVtvKzJdLDEyOD09KDE5MiZsKSYmMTI4PT0oMTkyJnUpJiYoZD0oMTUmcyk8PDEyfCg2MyZsKTw8Nnw2MyZ1KT4yMDQ3JiYoZDw1NTI5Nnx8ZD41NzM0MykmJihpPWQpO2JyZWFrO2Nhc2UgNDpsPWVbbysxXSx1PWVbbysyXSxjPWVbbyszXSwxMjg9PSgxOTImbCkmJjEyOD09KDE5MiZ1KSYmMTI4PT0oMTkyJmMpJiYoZD0oMTUmcyk8PDE4fCg2MyZsKTw8MTJ8KDYzJnUpPDw2fDYzJmMpPjY1NTM1JiZkPDExMTQxMTImJihpPWQpfX1udWxsPT09aT8oaT02NTUzMyxhPTEpOmk+NjU1MzUmJihpLT02NTUzNixyLnB1c2goaT4+PjEwJjEwMjN8NTUyOTYpLGk9NTYzMjB8MTAyMyZpKSxyLnB1c2goaSksbys9YX1yZXR1cm4geChyKX1mdW5jdGlvbiB4KGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PVopcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgbj0iIixyPTA7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9WikpO3JldHVybiBufWZ1bmN0aW9uIEwoZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBEKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgbz10O288bjsrK28pcis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiB3KGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIG89IiIscz10O3M8bjsrK3Mpbys9eihlW3NdKTtyZXR1cm4gb31mdW5jdGlvbiBNKGUsdCxuKXtmb3IodmFyIHI9ZS5zbGljZSh0LG4pLG89IiIscz0wO3M8ci5sZW5ndGg7cys9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbc10rMjU2KnJbcysxXSk7cmV0dXJuIG99ZnVuY3Rpb24gayhlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSShlLHQsbixyLG8saSl7aWYoIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFAoZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgbz0wLHM9TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtvPHM7KytvKWVbbitvXT0odCYyNTU8PDgqKHI/bzoxLW8pKT4+PjgqKHI/bzoxLW8pfWZ1bmN0aW9uIE4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBvPTAscz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO288czsrK28pZVtuK29dPXQ+Pj44KihyP286My1vKSYyNTV9ZnVuY3Rpb24gSChlLHQsbixyLG8scyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEYoZSx0LG4scixvKXtyZXR1cm4gb3x8SChlLHQsbiw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxRLndyaXRlKGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIEIoZSx0LG4scixvKXtyZXR1cm4gb3x8SChlLHQsbiw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFEud3JpdGUoZSx0LG4sciw1Miw4KSxuKzh9ZnVuY3Rpb24gVShlKXtpZihlPUcoZSkucmVwbGFjZShlZSwiIiksZS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX1mdW5jdGlvbiBHKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24geihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVihlLHQpe3Q9dHx8MS8wO2Zvcih2YXIgbixyPWUubGVuZ3RoLG89bnVsbCxzPVtdLGk9MDtpPHI7KytpKXtpZigobj1lLmNoYXJDb2RlQXQoaSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighbyl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZzLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGkrMT09PXIpeyh0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1vPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZzLnB1c2goMjM5LDE5MSwxODkpLG89bjtjb250aW51ZX1uPTY1NTM2KyhvLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIG8mJih0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KTtpZihvPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO3MucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7cy5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO3MucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7cy5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gc31mdW5jdGlvbiBXKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fWZ1bmN0aW9uIFkoZSx0KXtmb3IodmFyIG4scixvLHM9W10saT0wO2k8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysraSluPWUuY2hhckNvZGVBdChpKSxyPW4+Pjgsbz1uJTI1NixzLnB1c2gobykscy5wdXNoKHIpO3JldHVybiBzfWZ1bmN0aW9uIHEoZSl7cmV0dXJuICQudG9CeXRlQXJyYXkoVShlKSl9ZnVuY3Rpb24gSyhlLHQsbixyKXtmb3IodmFyIG89MDtvPHImJiEobytuPj10Lmxlbmd0aHx8bz49ZS5sZW5ndGgpOysrbyl0W28rbl09ZVtvXTtyZXR1cm4gb31mdW5jdGlvbiBYKGUpe3JldHVybiBlIT09ZX0vKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwp2YXIgJD1uKCIuL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKSxRPW4oIi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiKSxKPW4oIi4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiKTt0LkJ1ZmZlcj1zLHQuU2xvd0J1ZmZlcj1tLHQuSU5TUEVDVF9NQVhfQllURVM9NTAscy5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWUuVFlQRURfQVJSQVlfU1VQUE9SVD9lLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGUuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT1lLmZvbygpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zdWJhcnJheSYmMD09PWUuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGUpe3JldHVybiExfX0oKSx0LmtNYXhMZW5ndGg9cigpLHMucG9vbFNpemU9ODE5MixzLl9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxlfSxzLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBpKG51bGwsZSx0LG4pfSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihzLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscy5fX3Byb3RvX189VWludDhBcnJheSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnNbU3ltYm9sLnNwZWNpZXNdPT09cyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHMuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsKG51bGwsZSx0LG4pfSxzLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KG51bGwsZSl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB1KG51bGwsZSl9LHMuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSxzLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighcy5pc0J1ZmZlcihlKXx8IXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLG89MCxpPU1hdGgubWluKG4scik7bzxpOysrbylpZihlW29dIT09dFtvXSl7bj1lW29dLHI9dFtvXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LHMuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0scy5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighSihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9cy5hbGxvY1Vuc2FmZSh0KSxvPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXTtpZighcy5pc0J1ZmZlcihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aS5jb3B5KHIsbyksbys9aS5sZW5ndGh9cmV0dXJuIHJ9LHMuYnl0ZUxlbmd0aD1oLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpYih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWIodGhpcyx0LHQrMyksYih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpYih0aGlzLHQsdCs3KSxiKHRoaXMsdCsxLHQrNiksYih0aGlzLHQrMix0KzUpLGIodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9qKHRoaXMsMCxlKTpnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1zLmNvbXBhcmUodGhpcyxlKX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLG49dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLG4pLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5uJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixvKXtpZighcy5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1vJiYobz10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PW8mJnQ+PW4pcmV0dXJuIDA7aWYocj49bylyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHQ+Pj49MCxuPj4+PTAscj4+Pj0wLG8+Pj49MCx0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGk9by1yLGE9bi10LGw9TWF0aC5taW4oaSxhKSx1PXRoaXMuc2xpY2UocixvKSxjPWUuc2xpY2UodCxuKSxkPTA7ZDxsOysrZClpZih1W2RdIT09Y1tkXSl7aT11W2RdLGE9Y1tkXTticmVha31yZXR1cm4gaTxhPy0xOmE8aT8xOjB9LHMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LHMucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFKHRoaXMsZSx0LG4sITApfSxzLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyxlLHQsbiwhMSl9LHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBvPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+bykmJihuPW8pLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIHM9ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiB2KHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFQodGhpcyxlLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIEEodGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQyh0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYocyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCkscz0hMH19LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFo9NDA5NjtzLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubGVuZ3RoO2U9fn5lLHQ9dm9pZCAwPT09dD9uOn5+dCxlPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksdDwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLHQ8ZSYmKHQ9ZSk7dmFyIHI7aWYocy5UWVBFRF9BUlJBWV9TVVBQT1JUKXI9dGhpcy5zdWJhcnJheShlLHQpLHIuX19wcm90b19fPXMucHJvdG90eXBlO2Vsc2V7dmFyIG89dC1lO3I9bmV3IHMobyx2b2lkIDApO2Zvcih2YXIgaT0wO2k8bzsrK2kpcltpXT10aGlzW2krZV19cmV0dXJuIHJ9LHMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0sbz0xLHM9MDsrK3M8dCYmKG8qPTI1Nik7KXIrPXRoaXNbZStzXSpvO3JldHVybiByfSxzLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxvPTE7dD4wJiYobyo9MjU2KTspcis9dGhpc1tlKy0tdF0qbztyZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxzLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxzLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0scy5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLG89MSxzPTA7KytzPHQmJihvKj0yNTYpOylyKz10aGlzW2Urc10qbztyZXR1cm4gbyo9MTI4LHI+PW8mJihyLT1NYXRoLnBvdygyLDgqdCkpLHJ9LHMucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fGsoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxvPTEscz10aGlzW2UrLS1yXTtyPjAmJihvKj0yNTYpOylzKz10aGlzW2UrLS1yXSpvO3JldHVybiBvKj0xMjgscz49byYmKHMtPU1hdGgucG93KDIsOCp0KSksc30scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxzLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fGsoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0scy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxrKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LHMucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHMucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw0LHRoaXMubGVuZ3RoKSxRLnJlYWQodGhpcyxlLCEwLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsNCx0aGlzLmxlbmd0aCksUS5yZWFkKHRoaXMsZSwhMSwyMyw0KX0scy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw4LHRoaXMubGVuZ3RoKSxRLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDgsdGhpcy5sZW5ndGgpLFEucmVhZCh0aGlzLGUsITEsNTIsOCl9LHMucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCxufD0wLCFyKXtJKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCl9dmFyIG89MSxzPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytzPG4mJihvKj0yNTYpOyl0aGlzW3Qrc109ZS9vJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsbnw9MCwhcil7SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApfXZhciBvPW4tMSxzPTE7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyl0aGlzW3Qrb109ZS9zJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMSwyNTUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDIsNjU1MzUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMiw2NTUzNSwwKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpQKHRoaXMsZSx0LCExKSx0KzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOk4odGhpcyxlLHQsITApLHQrNH0scy5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Tih0aGlzLGUsdCwhMSksdCs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIG89TWF0aC5wb3coMiw4Km4tMSk7SSh0aGlzLGUsdCxuLG8tMSwtbyl9dmFyIHM9MCxpPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrczxuJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtzLTFdJiYoYT0xKSx0aGlzW3Qrc109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBvPU1hdGgucG93KDIsOCpuLTEpO0kodGhpcyxlLHQsbixvLTEsLW8pfXZhciBzPW4tMSxpPTEsYT0wO2Zvcih0aGlzW3Qrc109MjU1JmU7LS1zPj0wJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtzKzFdJiYoYT0xKSx0aGlzW3Qrc109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMSwxMjcsLTEyOCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6UCh0aGlzLGUsdCwhMSksdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpOKHRoaXMsZSx0LCEwKSx0KzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOk4odGhpcyxlLHQsITEpLHQrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRih0aGlzLGUsdCwhMSxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEIodGhpcyxlLHQsITAsbil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIG8saT1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihvPWktMTtvPj0wOy0tbyllW28rdF09dGhpc1tvK25dO2Vsc2UgaWYoaTwxZTN8fCFzLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK2kpLHQpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09ciYmInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHImJiFzLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKTt2YXIgaTtpZigibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPG47KytpKXRoaXNbaV09ZTtlbHNle3ZhciBhPXMuaXNCdWZmZXIoZSk/ZTpWKG5ldyBzKGUscikudG9TdHJpbmcoKSksbD1hLmxlbmd0aDtmb3IoaT0wO2k8bi10OysraSl0aGlzW2krdF09YVtpJWxdfXJldHVybiB0aGlzfTt2YXIgZWU9L1teK1wvMC05QS1aYS16LV9dL2d9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oZSl9ZnVuY3Rpb24gbygpe28uaW5pdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHZvaWQgMD09PWUuX21heExpc3RlbmVycz9vLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGkoZSx0LG4sbyl7dmFyIGksYSxsO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBuKTtpZihhPWUuX2V2ZW50cyx2b2lkIDA9PT1hPyhhPWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1hLm5ld0xpc3RlbmVyJiYoZS5lbWl0KCJuZXdMaXN0ZW5lciIsdCxuLmxpc3RlbmVyP24ubGlzdGVuZXI6biksYT1lLl9ldmVudHMpLGw9YVt0XSksdm9pZCAwPT09bClsPWFbdF09biwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGw/bD1hW3RdPW8/W24sbF06W2wsbl06bz9sLnVuc2hpZnQobik6bC5wdXNoKG4pLChpPXMoZSkpPjAmJmwubGVuZ3RoPmkmJiFsLndhcm5lZCl7bC53YXJuZWQ9ITA7dmFyIHU9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrbC5sZW5ndGgrIiAiK1N0cmluZyh0KSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTt1Lm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsdS5lbWl0dGVyPWUsdS50eXBlPXQsdS5jb3VudD1sLmxlbmd0aCxyKHUpfXJldHVybiBlfWZ1bmN0aW9uIGEoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZS5wdXNoKGFyZ3VtZW50c1t0XSk7dGhpcy5maXJlZHx8KHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxoKHRoaXMubGlzdGVuZXIsdGhpcy50YXJnZXQsZSkpfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxvPWEuYmluZChyKTtyZXR1cm4gby5saXN0ZW5lcj1uLHIud3JhcEZuPW8sb31mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYodm9pZCAwPT09cilyZXR1cm5bXTt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDA9PT1vP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBvP24/W28ubGlzdGVuZXJ8fG9dOltvXTpuP3Aobyk6ZChvLG8ubGVuZ3RoKX1mdW5jdGlvbiBjKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgbj10W2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXJldHVybiAxO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG4ubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBfKGUsdCl7Zm9yKDt0KzE8ZS5sZW5ndGg7dCsrKWVbdF09ZVt0KzFdO2UucG9wKCl9ZnVuY3Rpb24gcChlKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXT1lW25dLmxpc3RlbmVyfHxlW25dO3JldHVybiB0fXZhciBmLG09Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxoPW0mJiJmdW5jdGlvbiI9PXR5cGVvZiBtLmFwcGx5P20uYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQsbil9O2Y9bSYmImZ1bmN0aW9uIj09dHlwZW9mIG0ub3duS2V5cz9tLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpfTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSl9O3ZhciBnPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1lfTtlLmV4cG9ydHM9byxvLkV2ZW50RW1pdHRlcj1vLG8ucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLG8ucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLG8ucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBiPTEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sc2V0OmZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwfHxnKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZSsiLiIpO2I9ZX19KSxvLmluaXQ9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxvLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlfHxlPDB8fGcoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1lLHRoaXN9LG8ucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMpfSxvLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0LnB1c2goYXJndW1lbnRzW25dKTt2YXIgcj0iZXJyb3IiPT09ZSxvPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1vKXI9ciYmdm9pZCAwPT09by5lcnJvcjtlbHNlIGlmKCFyKXJldHVybiExO2lmKHIpe3ZhciBzO2lmKHQubGVuZ3RoPjAmJihzPXRbMF0pLHMgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBzO3ZhciBpPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHM/IiAoIitzLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgaS5jb250ZXh0PXMsaX12YXIgYT1vW2VdO2lmKHZvaWQgMD09PWEpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpaChhLHRoaXMsdCk7ZWxzZSBmb3IodmFyIGw9YS5sZW5ndGgsdT1kKGEsbCksbj0wO248bDsrK24paCh1W25dLHRoaXMsdCk7cmV0dXJuITB9LG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodGhpcyxlLHQsITEpfSxvLnByb3RvdHlwZS5vbj1vLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixvLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0aGlzLGUsdCwhMCl9LG8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7cmV0dXJuIHRoaXMub24oZSxsKHRoaXMsZSx0KSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtyZXR1cm4gdGhpcy5wcmVwZW5kTGlzdGVuZXIoZSxsKHRoaXMsZSx0KSksdGhpc30sby5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scyxpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT0ocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShuPXJbZV0pKXJldHVybiB0aGlzO2lmKG49PT10fHxuLmxpc3RlbmVyPT09dCkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgcltlXSxyLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlLG4ubGlzdGVuZXJ8fHQpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXtmb3Iobz0tMSxzPW4ubGVuZ3RoLTE7cz49MDtzLS0paWYobltzXT09PXR8fG5bc10ubGlzdGVuZXI9PT10KXtpPW5bc10ubGlzdGVuZXIsbz1zO2JyZWFrfWlmKG88MClyZXR1cm4gdGhpczswPT09bz9uLnNoaWZ0KCk6XyhuLG8pLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksdm9pZCAwIT09ci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxpfHx0KX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUub2ZmPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLG8ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1uLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09bltlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG5bZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBvLHM9T2JqZWN0LmtleXMobik7Zm9yKHI9MDtyPHMubGVuZ3RoOysrcikicmVtb3ZlTGlzdGVuZXIiIT09KG89c1tyXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9bltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodm9pZCAwIT09dClmb3Iocj10Lmxlbmd0aC0xO3I+PTA7ci0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W3JdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMsZSwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLGUsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5saXN0ZW5lckNvdW50P2UubGlzdGVuZXJDb3VudCh0KTpjLmNhbGwoZSx0KX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1jLG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9mKHRoaXMuX2V2ZW50cyk6W119fSwiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbyhlKXtpZihjPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChjPT09bnx8IWMpJiZzZXRUaW1lb3V0KXJldHVybiBjPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gYyhlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gYy5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gYy5jYWxsKHRoaXMsZSwwKX19fWZ1bmN0aW9uIHMoZSl7aWYoZD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChkPT09cnx8IWQpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGQ9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cmV0dXJuIGQoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBkLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gZC5jYWxsKHRoaXMsZSl9fX1mdW5jdGlvbiBpKCl7bSYmcCYmKG09ITEscC5sZW5ndGg/Zj1wLmNvbmNhdChmKTpoPS0xLGYubGVuZ3RoJiZhKCkpfWZ1bmN0aW9uIGEoKXtpZighbSl7dmFyIGU9byhpKTttPSEwO2Zvcih2YXIgdD1mLmxlbmd0aDt0Oyl7Zm9yKHA9ZixmPVtdOysraDx0OylwJiZwW2hdLnJ1bigpO2g9LTEsdD1mLmxlbmd0aH1wPW51bGwsbT0hMSxzKGUpfX1mdW5jdGlvbiBsKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gdSgpe312YXIgYyxkLF89ZS5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bn1jYXRjaChlKXtjPW59dHJ5e2Q9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cn1jYXRjaChlKXtkPXJ9fSgpO3ZhciBwLGY9W10sbT0hMSxoPS0xO18ubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtmLnB1c2gobmV3IGwoZSx0KSksMSE9PWYubGVuZ3RofHxtfHxvKGEpfSxsLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxfLnRpdGxlPSJicm93c2VyIixfLmJyb3dzZXI9ITAsXy5lbnY9e30sXy5hcmd2PVtdLF8udmVyc2lvbj0iIixfLnZlcnNpb25zPXt9LF8ub249dSxfLmFkZExpc3RlbmVyPXUsXy5vbmNlPXUsXy5vZmY9dSxfLnJlbW92ZUxpc3RlbmVyPXUsXy5yZW1vdmVBbGxMaXN0ZW5lcnM9dSxfLmVtaXQ9dSxfLnByZXBlbmRMaXN0ZW5lcj11LF8ucHJlcGVuZE9uY2VMaXN0ZW5lcj11LF8ubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxfLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxfLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sXy5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxfLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSwiLi9ub2RlX21vZHVsZXMvbnVtYmVyLWlzLW5hbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWV9fSwiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdChlKX0vKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwp2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdPWV9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbigiIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4sYSxsPXIoZSksdT0xO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspe249T2JqZWN0KGFyZ3VtZW50c1t1XSk7Zm9yKHZhciBjIGluIG4pcy5jYWxsKG4sYykmJihsW2NdPW5bY10pO2lmKG8pe2E9byhuKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylpLmNhbGwobixhW2RdKSYmKGxbYVtkXV09blthW2RdXSl9fXJldHVybiBsfX0sIi4vbm9kZV9tb2R1bGVzL3Bhc2NhbGNhc2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7LyohCiAqIHBhc2NhbGNhc2UgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3Bhc2NhbGNhc2U+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCmZ1bmN0aW9uIG4oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nLiIpO3JldHVybiBlPWUucmVwbGFjZSgvKFtBLVpdKS9nLCIgJDEiKSwxPT09ZS5sZW5ndGg/ZS50b1VwcGVyQ2FzZSgpOihlPWUucmVwbGFjZSgvXltcV19dK3xbXFdfXSskL2csIiIpLnRvTG93ZXJDYXNlKCksZT1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksZS5yZXBsYWNlKC9bXFdfXSsoXHd8JCkvZyxmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9KSl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG89ZVtyXTsiLiI9PT1vP2Uuc3BsaWNlKHIsMSk6Ii4uIj09PW8/KGUuc3BsaWNlKHIsMSksbisrKTpuJiYoZS5zcGxpY2UociwxKSxuLS0pfWlmKHQpZm9yKDtuLS07billLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9ZnVuY3Rpb24gcihlLHQpe2lmKGUuZmlsdGVyKXJldHVybiBlLmZpbHRlcih0KTtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKXQoZVtyXSxyLGUpJiZuLnB1c2goZVtyXSk7cmV0dXJuIG59dmFyIG89L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uZXhlYyhlKS5zbGljZSgxKX07dC5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLG89ITEscz1hcmd1bWVudHMubGVuZ3RoLTE7cz49LTEmJiFvO3MtLSl7dmFyIGk9cz49MD9hcmd1bWVudHNbc106ZS5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpJiYodD1pKyIvIit0LG89Ii8iPT09aS5jaGFyQXQoMCkpfXJldHVybiB0PW4ocih0LnNwbGl0KCIvIiksZnVuY3Rpb24oZSl7cmV0dXJuISFlfSksIW8pLmpvaW4oIi8iKSwobz8iLyI6IiIpK3R8fCIuIn0sdC5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7dmFyIG89dC5pc0Fic29sdXRlKGUpLHM9Ii8iPT09aShlLC0xKTtyZXR1cm4gZT1uKHIoZS5zcGxpdCgiLyIpLGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pLCFvKS5qb2luKCIvIiksZXx8b3x8KGU9Ii4iKSxlJiZzJiYoZSs9Ii8iKSwobz8iLyI6IiIpK2V9LHQuaXNBYnNvbHV0ZT1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKX0sdC5qb2luPWZ1bmN0aW9uKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0Lm5vcm1hbGl6ZShyKGUsZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtyZXR1cm4gZX0pLmpvaW4oIi8iKSl9LHQucmVsYXRpdmU9ZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGgmJiIiPT09ZVt0XTt0KyspO2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTAmJiIiPT09ZVtuXTtuLS0pO3JldHVybiB0Pm4/W106ZS5zbGljZSh0LG4tdCsxKX1lPXQucmVzb2x2ZShlKS5zdWJzdHIoMSksbj10LnJlc29sdmUobikuc3Vic3RyKDEpO2Zvcih2YXIgbz1yKGUuc3BsaXQoIi8iKSkscz1yKG4uc3BsaXQoIi8iKSksaT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYT1pLGw9MDtsPGk7bCsrKWlmKG9bbF0hPT1zW2xdKXthPWw7YnJlYWt9Zm9yKHZhciB1PVtdLGw9YTtsPG8ubGVuZ3RoO2wrKyl1LnB1c2goIi4uIik7cmV0dXJuIHU9dS5jb25jYXQocy5zbGljZShhKSksdS5qb2luKCIvIil9LHQuc2VwPSIvIix0LmRlbGltaXRlcj0iOiIsdC5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PXMoZSksbj10WzBdLHI9dFsxXTtyZXR1cm4gbnx8cj8ociYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSksbityKToiLiJ9LHQuYmFzZW5hbWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKGUpWzJdO3JldHVybiB0JiZuLnN1YnN0cigtMSp0Lmxlbmd0aCk9PT10JiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLXQubGVuZ3RoKSksbn0sdC5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpWzNdfTt2YXIgaT0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnN1YnN0cih0LG4pfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ8MCYmKHQ9ZS5sZW5ndGgrdCksZS5zdWJzdHIodCxuKX19KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbixyPVtdLG89MCxzPTAsaT0iIixhPXQmJnQuZGVsaW1pdGVyfHwiLyI7bnVsbCE9KG49Yi5leGVjKGUpKTspe3ZhciBjPW5bMF0sZD1uWzFdLF89bi5pbmRleDtpZihpKz1lLnNsaWNlKHMsXykscz1fK2MubGVuZ3RoLGQpaSs9ZFsxXTtlbHNle3ZhciBwPWVbc10sZj1uWzJdLG09blszXSxoPW5bNF0sZz1uWzVdLEU9bls2XSx5PW5bN107aSYmKHIucHVzaChpKSxpPSIiKTt2YXIgdj1udWxsIT1mJiZudWxsIT1wJiZwIT09ZixUPSIrIj09PUV8fCIqIj09PUUsQT0iPyI9PT1FfHwiKiI9PT1FLEM9blsyXXx8YSxPPWh8fGc7ci5wdXNoKHtuYW1lOm18fG8rKyxwcmVmaXg6Znx8IiIsZGVsaW1pdGVyOkMsb3B0aW9uYWw6QSxyZXBlYXQ6VCxwYXJ0aWFsOnYsYXN0ZXJpc2s6ISF5LHBhdHRlcm46Tz91KE8pOnk/Ii4qIjoiW14iK2woQykrIl0rPyJ9KX19cmV0dXJuIHM8ZS5sZW5ndGgmJihpKz1lLnN1YnN0cihzKSksaSYmci5wdXNoKGkpLHJ9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBhKHIoZSx0KSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZW5jb2RlVVJJKGUpLnJlcGxhY2UoL1tcLz8jXS9nLGZ1bmN0aW9uKGUpe3JldHVybiIlIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBpKGUpe3JldHVybiBlbmNvZGVVUkkoZSkucmVwbGFjZSgvWz8jXS9nLGZ1bmN0aW9uKGUpe3JldHVybiIlIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mIGVbbl0mJih0W25dPW5ldyBSZWdFeHAoIl4oPzoiK2Vbbl0ucGF0dGVybisiKSQiKSk7cmV0dXJuIGZ1bmN0aW9uKG4scil7Zm9yKHZhciBvPSIiLGE9bnx8e30sbD1yfHx7fSx1PWwucHJldHR5P3M6ZW5jb2RlVVJJQ29tcG9uZW50LGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIGQ9ZVtjXTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe3ZhciBfLHA9YVtkLm5hbWVdO2lmKG51bGw9PXApe2lmKGQub3B0aW9uYWwpe2QucGFydGlhbCYmKG8rPWQucHJlZml4KTtjb250aW51ZX10aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCAiJytkLm5hbWUrJyIgdG8gYmUgZGVmaW5lZCcpfWlmKGcocCkpe2lmKCFkLnJlcGVhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCAiJytkLm5hbWUrJyIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnK0pTT04uc3RyaW5naWZ5KHApKyJgIik7aWYoMD09PXAubGVuZ3RoKXtpZihkLm9wdGlvbmFsKWNvbnRpbnVlO3Rocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkICInK2QubmFtZSsnIiB0byBub3QgYmUgZW1wdHknKX1mb3IodmFyIGY9MDtmPHAubGVuZ3RoO2YrKyl7aWYoXz11KHBbZl0pLCF0W2NdLnRlc3QoXykpdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsICInK2QubmFtZSsnIiB0byBtYXRjaCAiJytkLnBhdHRlcm4rJyIsIGJ1dCByZWNlaXZlZCBgJytKU09OLnN0cmluZ2lmeShfKSsiYCIpO28rPSgwPT09Zj9kLnByZWZpeDpkLmRlbGltaXRlcikrX319ZWxzZXtpZihfPWQuYXN0ZXJpc2s/aShwKTp1KHApLCF0W2NdLnRlc3QoXykpdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgIicrZC5uYW1lKyciIHRvIG1hdGNoICInK2QucGF0dGVybisnIiwgYnV0IHJlY2VpdmVkICInK18rJyInKTtvKz1kLnByZWZpeCtffX1lbHNlIG8rPWR9cmV0dXJuIG99fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xdfFwvXFxdKS9nLCJcXCQxIil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWz0hOiRcLygpXSkvZywiXFwkMSIpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZS5rZXlzPXQsZX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnNlbnNpdGl2ZT8iIjoiaSJ9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPWUuc291cmNlLm1hdGNoKC9cKCg/IVw/KS9nKTtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXQucHVzaCh7bmFtZTpyLHByZWZpeDpudWxsLGRlbGltaXRlcjpudWxsLG9wdGlvbmFsOiExLHJlcGVhdDohMSxwYXJ0aWFsOiExLGFzdGVyaXNrOiExLHBhdHRlcm46bnVsbH0pO3JldHVybiBjKGUsdCl9ZnVuY3Rpb24gcChlLHQsbil7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKylyLnB1c2goaChlW29dLHQsbikuc291cmNlKTtyZXR1cm4gYyhuZXcgUmVnRXhwKCIoPzoiK3Iuam9pbigifCIpKyIpIixkKG4pKSx0KX1mdW5jdGlvbiBmKGUsdCxuKXtyZXR1cm4gbShyKGUsbiksdCxuKX1mdW5jdGlvbiBtKGUsdCxuKXtnKHQpfHwobj10fHxuLHQ9W10pLG49bnx8e307Zm9yKHZhciByPW4uc3RyaWN0LG89ITEhPT1uLmVuZCxzPSIiLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtpZigic3RyaW5nIj09dHlwZW9mIGEpcys9bChhKTtlbHNle3ZhciB1PWwoYS5wcmVmaXgpLF89Iig/OiIrYS5wYXR0ZXJuKyIpIjt0LnB1c2goYSksYS5yZXBlYXQmJihfKz0iKD86Iit1K18rIikqIiksXz1hLm9wdGlvbmFsP2EucGFydGlhbD91KyIoIitfKyIpPyI6Iig/OiIrdSsiKCIrXysiKSk/Ijp1KyIoIitfKyIpIixzKz1ffX12YXIgcD1sKG4uZGVsaW1pdGVyfHwiLyIpLGY9cy5zbGljZSgtcC5sZW5ndGgpPT09cDtyZXR1cm4gcnx8KHM9KGY/cy5zbGljZSgwLC1wLmxlbmd0aCk6cykrIig/OiIrcCsiKD89JCkpPyIpLHMrPW8/IiQiOnImJmY/IiI6Iig/PSIrcCsifCQpIixjKG5ldyBSZWdFeHAoIl4iK3MsZChuKSksdCl9ZnVuY3Rpb24gaChlLHQsbil7cmV0dXJuIGcodCl8fChuPXR8fG4sdD1bXSksbj1ufHx7fSxlIGluc3RhbmNlb2YgUmVnRXhwP18oZSx0KTpnKGUpP3AoZSx0LG4pOmYoZSx0LG4pfXZhciBnPW4oIi4vbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIik7ZS5leHBvcnRzPWgsZS5leHBvcnRzLnBhcnNlPXIsZS5leHBvcnRzLmNvbXBpbGU9byxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbj1hLGUuZXhwb3J0cy50b2tlbnNUb1JlZ0V4cD1tO3ZhciBiPW5ldyBSZWdFeHAoWyIoXFxcXC4pIiwiKFtcXC8uXSk/KD86KD86XFw6KFxcdyspKD86XFwoKCg/OlxcXFwufFteXFxcXCgpXSkrKVxcKSk/fFxcKCgoPzpcXFxcLnxbXlxcXFwoKV0pKylcXCkpKFsrKj9dKT98KFxcKikpIl0uam9pbigifCIpLCJnIil9LCIuL25vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cC9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfX0sIi4vbm9kZV9tb2R1bGVzL3BlcmYtY2FzY2FkZS9kaXN0L3BlcmYtY2FzY2FkZS5jc3MiOmZ1bmN0aW9uKGUsdCl7fSwiLi9ub2RlX21vZHVsZXMvcGVyZi1jYXNjYWRlL2Rpc3QvcGVyZi1jYXNjYWRlLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHIscjsvKiEgZ2l0aHViLmNvbS9taWNtcm8vUGVyZkNhc2NhZGUgVmVyc2lvbjoyLjUuNCAoMDMvMDkvMjAxOCkgKi8KIWZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10KCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4sbyl7ZnVuY3Rpb24gcyhhLGwpe2lmKCFuW2FdKXtpZighdFthXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHImJnI7aWYoIWwmJnUpcmV0dXJuIHIoYSwhMCk7aWYoaSlyZXR1cm4gaShhLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciBkPW5bYV09e2V4cG9ydHM6e319O3RbYV1bMF0uY2FsbChkLmV4cG9ydHMsZnVuY3Rpb24oZSl7cmV0dXJuIHModFthXVsxXVtlXXx8ZSl9LGQsZC5leHBvcnRzLGUsdCxuLG8pfXJldHVybiBuW2FdLmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLGE9MDthPG8ubGVuZ3RoO2ErKylzKG9bYV0pO3JldHVybiBzfXJldHVybiBlfSgpKHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1lLmNsYXNzTGlzdDtyZXR1cm4gbj90LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSl9KTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKyIgIit0KSxlfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLmNsYXNzTGlzdDtyZXR1cm4gbj9uLnJlbW92ZSh0KTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFxcc3xeKSIrdCsiKFxcc3wkKSIsImciKSwiJDIiKSksZX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuY2xvc2VzdClyZXR1cm4gZS5jbG9zZXN0KCIuIit0KTtmb3IoO2U7KXtpZihlLmNsYXNzTGlzdC5jb250YWlucyh0KSlyZXR1cm4gZTtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpKGUpe2Zvcig7ZS5oYXNDaGlsZE5vZGVzKCk7KWUucmVtb3ZlQ2hpbGQoZS5sYXN0Q2hpbGQpO3JldHVybiBlfWZ1bmN0aW9uIGEoZSl7aWYoZSYmMCE9PWUubGVuZ3RoKXJldHVybiBlLml0ZW0oZS5sZW5ndGgtMSl9ZnVuY3Rpb24gbChlLHQpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZSx0KX1mdW5jdGlvbiB1KGUsdCxuKXt0IGluIGUuc3R5bGU/ZS5zdHlsZVt0XT1uOmNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBzZXQgbm9uLWV4aXN0aW5nIHN0eWxlICIrdCsiID0gIituKyIgb24gYSA8IitlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsiPi4iKSl9ZnVuY3Rpb24gYyhlLHQsbil7dCBpbiBlfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gc2V0IG5vbi1leGlzdGluZyBhdHRyaWJ1dGUgIit0KyIgPSAiK24rIiBvbiBhIDwiK2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpKyI+LiIpKSxlLnNldEF0dHJpYnV0ZU5TKCIiLHQsbil9ZnVuY3Rpb24gZChlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dShlLG4sdFtuXS50b1N0cmluZygpKX0pfWZ1bmN0aW9uIF8oZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2MoZSxuLHRbbl0udG9TdHJpbmcoKSl9KX1mdW5jdGlvbiBwKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3JldHVybiBlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iKSxlfWZ1bmN0aW9uIGYoZSx0KXt2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9IiIpO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGQobixlKSxuLmlubmVySFRNTD10LG59T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uYWRkQ2xhc3M9cixuLnJlbW92ZUNsYXNzPW8sbi5nZXRQYXJlbnRCeUNsYXNzTmFtZT1zLG4ucmVtb3ZlQ2hpbGRyZW49aSxuLmdldExhc3RJdGVtT2ZOb2RlTGlzdD1hLG4uZm9yRWFjaE5vZGVMaXN0PWwsbi5zYWZlU2V0U3R5bGU9dSxuLnNhZmVTZXRBdHRyaWJ1dGU9YyxuLnNhZmVTZXRTdHlsZXM9ZCxuLnNhZmVTZXRBdHRyaWJ1dGVzPV8sbi5tYWtlSHRtbEVsPXAsbi5tYWtlQm9keUVsPWZ9LHt9XSwyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1pKHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUuc29tZShuKX1mdW5jdGlvbiBvKGUsdCl7dmFyIG4scj1pKHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG49YT9lLmZpbmQocik6ZS5tYXAocikucG9wKCksbj9uLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBzKGUsdCl7dmFyIG49aSh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlLmZpbHRlcihuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZS52YWx1ZV19KX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUudG9Mb3dlckNhc2UoKT09PWV9fTtuLmhhc0hlYWRlcj1yO3ZhciBhPSEhQXJyYXkucHJvdG90eXBlLmZpbmQ7bi5nZXRIZWFkZXI9byxuLmdldEhlYWRlcnM9c30se31dLDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT15KXt5PXYubmV3UGF0aCgiTTE4IDYuMjE2djIuNzdxMCAuMjgtLjIwNi40ODYtLjIwNS4yMDYtLjQ4Ni4yMDZoLS42OTNxLS4yOCAwLS40ODYtLjIwNi0uMjEtLjIwNS0uMjFcbiAgLS40ODd2LTIuNzdxMC0xLjE0NS0uODEtMS45NTctLjgxMy0uODEtMS45Ni0uODEtMS4xNDYgMC0xLjk1Ny44MS0uODEuODEyLS44MSAxLjk1OHYyLjA3N2gxLjAzN3EuNDM0XG4gIDAgLjczNy4zMDMuMzAyLjMwMy4zMDIuNzM2djYuMjNxMCAuNDMzLS4zMDUuNzM2dC0uNzM3LjMwM0gxLjAzOHEtLjQzMyAwLS43MzYtLjNRMCAxNS45OTYgMFxuICAxNS41NlY5LjMzcTAtLjQzMy4zMDMtLjczNnQuNzM1LS4zMDNoNy4yN1Y2LjIxOHEwLTIgMS40MjItMy40MjMgMS40MjMtMS40MjMgMy40MjQtMS40MjMgMlxuICAwIDMuNDI0IDEuNDI0UTE4IDQuMjE0IDE4IDYuMjE2Iil9cmV0dXJuIFQoZSx0LG4sImljb24tbm8tdGxzIixyLHkuY2xvbmVOb2RlKCExKSl9ZnVuY3Rpb24gbyhlLHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1BKXtBPXYubmV3UGF0aCgiTTE3IDIuMzMzVjdxMCAuMjctLjE5OC40Ny0uMTk4LjE5Ny0uNDcuMTk3aC00LjY2NXEtLjQzOCAwLS42MTUtLjQxNy0uMTc3LS40MDYuMTQ2LS43MmwxLjQzNy0xLjQzNlExMS4wOTVcbiAgMy42NjcgOSAzLjY2N3EtMS4wODMgMC0yLjA2OC40MjItLjk4NC40Mi0xLjcwMyAxLjE0LS43Mi43MTUtMS4xNCAxLjctLjQyNi45ODQtLjQyNiAyLjA3IDAgMS4wOC40MjIgMi4wNjUuNDIuOTg0XG4gIDEuMTQgMS43MDMuNzE4LjcyIDEuNzAyIDEuMTQuOTg0LjQyMiAyLjA2Ny40MjIgMS4yNCAwIDIuMzQ0LS41NCAxLjEwNC0uNTQzIDEuODY0LTEuNTMzLjA3My0uMTA1LjI0LS4xMjYuMTQ2IDBcbiAgLjI2LjA5NWwxLjQyNyAxLjQzNnEuMDk1LjA4NC4xLjIxNC4wMDYuMTMtLjA4LjIzNC0xLjEzMyAxLjM3Ni0yLjc1IDIuMTNRMTAuNzkzIDE3IDkgMTdxLTEuNjI1XG4gIDAtMy4xMDQtLjYzNS0xLjQ4LS42MzYtMi41NTItMS43MS0xLjA3My0xLjA3Mi0xLjcxLTIuNTVRMSAxMC42MjUgMSA5dC42MzUtMy4xMDRxLjYzNi0xLjQ4IDEuNzEtMi41NTJcbiAgMS4wNzItMS4wNzMgMi41NS0xLjcxUTcuMzc1IDEgOSAxcTEuNTMgMCAyLjk2NC41NzggMS40MzIuNTc4IDIuNTQ2XG4gIDEuNjNsMS4zNTUtMS4zNDNxLjMwMi0uMzIzLjczLS4xNDYuNDA1LjE3My40MDUuNjF6Iil9cmV0dXJuIFQoZSx0LG4sImljb24tcmVkaXJlY3QiLHIsQS5jbG9uZU5vZGUoITEpKX1mdW5jdGlvbiBzKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0xKSxmKGUsdCxuLHIpfWZ1bmN0aW9uIGkoZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTEpLGYoZSx0LG4scil9ZnVuY3Rpb24gYShlLHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1DKXtDPXYubmV3UGF0aCgiTTE1LjI0NyA0LjM5M3EuMjUuMjUuNDMuNjc4LjE3Ny40My4xNzcuNzl2MTAuMjg3cTBcbiAgLjM1Ny0uMjUuNjA3dC0uNjA3LjI1aC0xMnEtLjM1NyAwLS42MDctLjI1dC0uMjUtLjYwNlYxLjg1OHEwLS4zNTguMjUtLjYwOFQyLjk5NyAxaDhxLjM1NyAwXG4gIC43ODYuMTguNDI4LjE3Ny42NzguNDI3em0tMy45NjQtMi4xOFY1LjU3aDMuMzU3cS0uMDktLjI1Ni0uMTk2LS4zNjRMMTEuNjUgMi40MXEtLjEwOC0uMTA2LS4zNjdcbiAgLS4xOTZ6bTMuNDI4IDEzLjY0NFY2LjcxNEgxMXEtLjM1NyAwLS42MDctLjI1dC0uMjUtLjYwN1YyLjE0M2gtNi44NnYxMy43MTRIMTQuNzF6TTUuNTdcbiAgOC4xNDNxMC0uMTI1LjA4LS4yMDUuMDgtLjA4LjIwNC0uMDhoNi4yODZxLjEyNSAwIC4yMDUuMDguMDguMDguMDguMjA1di41N3EwIC4xMjYtLjA4LjIwNy0uMDguMDhcbiAgLS4yMDUuMDhINS44NTRxLS4xMjUgMC0uMjA1LS4wOC0uMDgtLjA4LS4wOC0uMjA2di0uNTd6bTYuNTcgMnEuMTI1IDAgLjIwNS4wOC4wOC4wOC4wOC4yMDZWMTFxMFxuICAuMTI1LS4wOC4yMDUtLjA4LjA4LS4yMDUuMDhINS44NTRxLS4xMjUgMC0uMjA1LS4wOC0uMDgtLjA4LS4wOC0uMjA1di0uNTdxMC0uMTI2LjA4LS4yMDcuMDgtLjA4LjJcbiAgLS4wOGg2LjI4NnptMCAyLjI4NnEuMTI1IDAgLjIwNS4wOC4wOC4wOC4wOC4ydi41NzJxMCAuMTI1LS4wOC4yMDUtLjA4LjA4LS4yMDUuMDhINS44NTRxLS4xMjUgMC0uMjA1XG4gIC0uMDgtLjA4LS4wOC0uMDgtLjIwNXYtLjU3MnEwLS4xMjQuMDgtLjIwNC4wOC0uMDguMi0uMDhoNi4yODZ6Iil9cmV0dXJuIFQoZSx0LG4sImljb24tcGxhaW4iLHIsQy5jbG9uZU5vZGUoITEpKX1mdW5jdGlvbiBsKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PU8pe089di5uZXdQYXRoKCJNMTAuOCAxMy41djNxMCAuMi0uMTUuMzUtLjE1LjE1LS4zNS4xNWgtM3EtLjIgMC0uMzUtLjE1LS4xNS0uMTUtLjE1LS4zNXYtM3EwLS4yLjE1LS4zNS4xNVxuICAtLjE1LjM1LS4xNWgzcS4yIDAgLjM1LjE1LjE1LjE1LjE1LjM1ek0xNC43NSA2cTAgLjY3NS0uMTkzIDEuMjYyLS4xOTMuNTg4LS40MzcuOTU3LS4yNDQuMzY1XG4gIC0uNjg4Ljc0LS40NDMuMzc1LS43MTguNTQzLS4yNzUuMTctLjc2My40NDQtLjUxLjI4Ni0uODUyLjgxLS4zNDQuNTI2LS4zNDQuODQgMCAuMjEtLjE1LjQwNS0uMTUuMTk0XG4gIC0uMzUuMTk0aC0zcS0uMTg2IDAtLjMxOC0uMjMtLjEzLS4yMzQtLjEzLS40N3YtLjU2NHEwLTEuMDM3LjgxMi0xLjk1Ni44MTItLjkxNyAxLjc4Ny0xLjM1NS43NC0uMzM2XG4gIDEuMDUtLjcuMzE0LS4zNjIuMzE0LS45NSAwLS41MjQtLjU4My0uOTI0LS41OC0uNC0xLjM0My0uNC0uODE0IDAtMS4zNS4zNjItLjQ0LjMxMi0xLjM0IDEuNDM3LS4xNi4yXG4gIC0uMzg2LjItLjE1IDAtLjMxMy0uMUwzLjQgNC45ODdxLS4xNi0uMTI0LS4xOTMtLjMxMi0uMDMtLjE4OC4wNy0uMzVRNS4yNzcgMSA5LjA3NyAxcTEgMCAyLjAxLjM4N1xuICAxLjAxLjM4OCAxLjgyNSAxLjAzOC44MTIuNjUgMS4zMjUgMS41OTQuNTEuOTQuNTEgMS45OHoiKX1yZXR1cm4gVChlLHQsbiwiaWNvbi1vdGhlciIscixPLmNsb25lTm9kZSghMSkpfWZ1bmN0aW9uIHUoZSx0LG4scil7aWYodm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09Uyl7Uz12Lm5ld1BhdGgoIk0xMy41MTYgMi45Yy0yLjc2NiAwLTQuNDYzIDEuNTIyLTQuNDYzIDMuNTM2IDAgMS43MzMgMS4yOTUgMi44MiAzLjI1NiAzLjUyXG4gIDEuNDEzLjQ5IDEuOTczLjkyNiAxLjk3MyAxLjY0NCAwIC43ODctLjY0NyAxLjI5Ni0xLjg3MyAxLjI5Ni0xLjEzNyAwLTIuMjYtLjM2OC0yLjk2LS43MzZsLS41NFxuICAyLjE5Yy42NjUuMzY3IDEuOTk2LjczNCAzLjM0NC43MzQgMy4yMzggMCA0Ljc0NC0xLjY4IDQuNzQ0LTMuNjU4XG4gIDAtMS42OC0uOTY2LTIuNzY3LTMuMDUtMy41MzctMS41NC0uNi0yLjE4Ni0uOTMtMi4xODYtMS42OCAwLS42LjU2LTEuMTQgMS43MTQtMS4xNFxuICAxLjEzNyAwIDEuOTk2LjMzIDIuNDUuNTZsLjU5Ni0yLjEzOGMtLjctLjMzMi0xLjY2My0uNTk2LTMuMDEtLjU5NnptLTkuMDMyLjE5MnY3LjQ0YzBcbiAgMS44MjItLjcwMiAyLjMzLTEuODIyIDIuMzMtLjUyNSAwLS45OTctLjA5LTEuMzY1LS4yMTJMMSAxNC44MDVjLjUyNS4xNzUgMS4zMy4yOCAxLjk2LjI4XG4gIDIuNTc0IDAgNC4xODUtMS4xNzMgNC4xODUtNC41MzRWMy4wOTdoLTIuNjZ6Iil9cmV0dXJuIFQoZSx0LG4sImljb24tanMiLHIsUy5jbG9uZU5vZGUoITEpKX1mdW5jdGlvbiBjKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PVIpe1I9di5uZXdQYXRoKCJNNiA2cTAgLjc1LS41MjUgMS4yNzVRNC45NSA3LjggNC4yIDcuOHEtLjc1IDAtMS4yNzUtLjUyNVEyLjQgNi43NSAyLjRcbiAgNnEwLS43NS41MjUtMS4yNzVRMy40NSA0LjIgNC4yIDQuMnEuNzUgMCAxLjI3NS41MjVRNiA1LjI1IDYgNnptOS42IDMuNnY0LjJIMi40VjEybDMtM1xuICAxLjUgMS41IDQuOC00Ljh6bS45LTYuNmgtMTVxLS4xMjIgMC0uMjEuMDktLjA5LjA4OC0uMDkuMjF2MTEuNHEwXG4gIC4xMjIuMDkuMjEuMDg4LjA5LjIxLjA5aDE1cS4xMjIgMCAuMjEtLjA5LjA5LS4wODguMDktLjIxVjMuM3EwLS4xMjItLjA5LS4yMVExNi42MjNcbiAgMyAxNi41IDN6bTEuNS4zdjExLjRxMCAuNjItLjQ0IDEuMDYtLjQ0LjQ0LTEuMDYuNDRoLTE1cS0uNjIgMC0xLjA2LS40NFEwIDE1LjMyIDBcbiAgMTQuN1YzLjNxMC0uNjIuNDQtMS4wNi40NC0uNDQgMS4wNi0uNDRoMTVxLjYyIDAgMS4wNi40NC40NC40NC40NCAxLjA2eiIpfXJldHVybiBUKGUsdCxuLCJpY29uLWltYWdlIixyLFIuY2xvbmVOb2RlKCExKSl9ZnVuY3Rpb24gZChlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MSksYyhlLHQsbixyKX1mdW5jdGlvbiBfKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PWope2o9di5uZXdQYXRoKCJNNS42MjYgMTMuMzFsLS40OTIuNDkycS0uMDk4LjA5OC0uMjI2LjA5OHQtLjIyNi0uMDk4TC4wOTggOS4yMlEwIDkuMTIgMFxuICA4Ljk5cTAtLjEyNy4wOTgtLjIyNkw0LjY4MiA0LjE4cS4wOTgtLjA5Ny4yMjYtLjA5N3QuMjI2LjA5OGwuNDkyLjQ5cS4xLjEuMS4yM3QtLjEuMjNMMS43NlxuICA4Ljk5bDMuODY2IDMuODY2cS4xLjA5OC4xLjIyNnQtLjEuMjI2ek0xMS40NCAyLjgxNWwtMy42N1xuICAxMi43cS0uMDQuMTI3LS4xNTIuMTktLjExMy4wNjUtLjIzLjAyNmwtLjYxLS4xNjJxLS4xMy0uMDQtLjE5My0uMTUyLS4wNjQtLjExMi0uMDI0LS4yNGwzLjY3LTEyLjY5OHEuMDRcbiAgLS4xMjguMTU3LS4xOTIuMTEzLS4wNjQuMjMtLjAyNWwuNjEuMTY3cS4xMy4wNC4xOTMuMTUyLjA2My4xMTMuMDIzLjI0ek0xNy45XG4gIDkuMjJsLTQuNTgyIDQuNThxLS4wOTguMDk4LS4yMjYuMDk4dC0uMjI2LS4wOThsLS40OTItLjQ5MnEtLjEtLjA5OC0uMS0uMjI2dC4xLS4yMjZMMTYuMjRcbiAgOC45OWwtMy44NjctMy44NjVxLS4xLS4wOTgtLjEtLjIyNnQuMS0uMjNsLjQ5Mi0uNDlxLjA5OC0uMS4yMjYtLjF0LjIzLjFsNC41OCA0LjU4M3EuMS4xLjEuMjI2IDAgLjEzLS4xLjIzeiIpfXJldHVybiBUKGUsdCxuLCJpY29uLWh0bWwiLHIsai5jbG9uZU5vZGUoITEpKX1mdW5jdGlvbiBwKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PXgpe3g9di5uZXdQYXRoKCJNMTUuNDM2Ljk5cS42MjUgMCAxLjA5NS40MTYuNDcuNDE1LjQ3IDEuMDQgMCAuNTY0LS40IDEuMzUtMi45NyA1LjYyNC00LjE2IDYuNzI0LS44NjUuODE0XG4gIC0xLjk0Ni44MTQtMS4xMjcgMC0xLjkzNS0uODI3LS44MS0uODI3LS44MS0xLjk2MiAwLTEuMTQ0LjgyMi0xLjg5NWw1LjcwNS01LjE3NVExNC44Ljk5XG4gIDE1LjQzNS45OXpNNy4zMSAxMC4yMzJxLjM1LjY4Ljk1MyAxLjE2Mi42MDMuNDgzIDEuMzQ1LjY4bC4wMS42MzRxLjAzNSAxLjkwNC0xLjE2IDMuMTAyLTEuMTkyXG4gIDEuMTk4LTMuMTE0IDEuMTk4LTEuMSAwLTEuOTQ4LS40MTYtLjg1LS40MTUtMS4zNjQtMS4xNC0uNTE0LS43MjMtLjc3My0xLjYzNVExIDEyLjkwNSAxXG4gIDExLjg1bC4zNjYuMjY4cS4zMDQuMjI0LjU1NS4zOTguMjUuMTc1LjUzLjMyNy4yNzcuMTUuNDEuMTUuMzY4IDAgLjQ5My0uMzMuMjI0LS41OS41MTUtMS4wMDUuMjlcbiAgLS40MTUuNjItLjY4LjMzMi0uMjYzLjc4OC0uNDI0LjQ1NS0uMTYuOTItLjIyOC40NjUtLjA2NiAxLjExOC0uMDk0eiIpfXJldHVybiBUKGUsdCxuLCJpY29uLWNzcyIscix4LmNsb25lTm9kZSghMSkpfWZ1bmN0aW9uIGYoZSx0LG4scil7aWYodm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09TCl7TD12Lm5ld1BhdGgoIk02IDZxMCAuNzUtLjUyNSAxLjI3NVE0Ljk1IDcuOCA0LjIgNy44cS0uNzUgMC0xLjI3NS0uNTI1UTIuNCA2Ljc1IDIuNFxuICA2cTAtLjc1LjUyNS0xLjI3NVEzLjQ1IDQuMiA0LjIgNC4ycS43NSAwIDEuMjc1LjUyNVE2IDUuMjUgNiA2em05LjYgMy42djQuMkgyLjRWMTJsMy0zXG4gIDEuNSAxLjUgNC44LTQuOHptLjktNi42aC0xNXEtLjEyMiAwLS4yMS4wOS0uMDkuMDg4LS4wOS4yMXYxMS40cTBcbiAgLjEyMi4wOS4yMS4wODguMDkuMjEuMDloMTVxLjEyMiAwIC4yMS0uMDkuMDktLjA4OC4wOS0uMjFWMy4zcTAtLjEyMi0uMDktLjIxUTE2LjYyM1xuICAzIDE2LjUgM3ptMS41LjN2MTEuNHEwIC42Mi0uNDQgMS4wNi0uNDQuNDQtMS4wNi40NGgtMTVxLS42MiAwLTEuMDYtLjQ0UTAgMTUuMzIgMFxuICAxNC43VjMuM3EwLS42Mi40NC0xLjA2LjQ0LS40NCAxLjA2LS40NGgxNXEuNjIgMCAxLjA2LjQ0LjQ0LjQ0LjQ0IDEuMDZ6Iil9cmV0dXJuIFQoZSx0LG4sImljb24td2FybmluZyIscixMLmNsb25lTm9kZSghMSkpfWZ1bmN0aW9uIG0oZSx0LG4scil7aWYodm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09RCl7RD12Lm5ld1BhdGgoIk05IDFxMi4xNzcgMCA0LjAxNiAxLjA3MyAxLjgzOCAxLjA3MyAyLjkxIDIuOTFRMTcgNi44MjMgMTcgOXEwIDIuMTc3LTEuMDczIDQuMDE2LTEuMDczXG4gIDEuODM4LTIuOTEgMi45MVExMS4xNzcgMTcgOSAxN3EtMi4xNzcgMC00LjAxNi0xLjA3My0xLjgzOC0xLjA3My0yLjkxLTIuOTFRMSAxMS4xNzcgMSA5cTAtMi4xNzcgMS4wNzMtNC4wMTZcbiAgMS4wNzMtMS44MzggMi45MS0yLjkxUTYuODIzIDEgOSAxem0xLjMzMyAxMi45OXYtMS45OHEwLS4xNDUtLjA5My0uMjQ0LS4wOTQtLjEtLjIzLS4xaC0ycS0uMTM1IDAtLjI0LjEwNVxuICAtLjEwMy4xMDYtLjEwMy4yNHYxLjk4cTAgLjEzNi4xMDQuMjQuMTA2LjEwNC4yNC4xMDRoMnEuMTM3IDAgLjIzLS4xLjA5NC0uMDk4LjA5NC0uMjQzem0tLjAyLTMuNTg0bC4xODdcbiAgLTYuNDY4cTAtLjEyNS0uMTA0LS4xODgtLjEwNC0uMDg0LS4yNS0uMDg0SDcuODU0cS0uMTQ2IDAtLjI1LjA4NC0uMTA0LjA2Mi0uMTA0LjE4OGwuMTc3IDYuNDY4cTBcbiAgLjEwNC4xMDQuMTgzLjEwNi4wNzYuMjUuMDc2aDEuOTNxLjE0NiAwIC4yNDUtLjA3OC4xLS4wOC4xMS0uMTg0eiIpfXJldHVybiBUKGUsdCxuLCJpY29uLW5vLWd6aXAiLHIsRC5jbG9uZU5vZGUoITEpKX1mdW5jdGlvbiBoKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PXcpe3c9di5uZXdQYXRoKCJNNy45NyA1Ljc1NEw2LjMzOCAxMC4wOHEuMzE3IDAgMS4zMTIuMDIuOTk0LjAyIDEuNTQyLjAyLjE4MyAwIC41NDgtLjAyLS44MzYtMi40MzItMS43N1xuICAtNC4zNDV6TTEgMTYuMzhsLjAyLS43NnEuMjItLjA2OC41MzgtLjEyLjMxNy0uMDUzLjU0OC0uMTAyLjIzLS4wNDguNDc2LS4xNC4yNDUtLjA5LjQyOC0uMjc4LjE4MlxuICAtLjE4Ny4yOTgtLjQ4NWwyLjI4LTUuOTIzIDIuNjktNi45NjJIOS41MXEuMDc3LjEzNS4xMDUuMjAybDEuOTcyIDQuNjE1cS4zMTcuNzUgMS4wMiAyLjQ3Ni43IDEuNzI2XG4gIDEuMDk1IDIuNjQuMTQ0LjMyNy41NTggMS4zOS40MTMgMS4wNjIuNjkyIDEuNjIuMTkyLjQzMi4zMzYuNTQ3LjE4My4xNDUuODQ3LjI4NC42NjMuMTQuODA3LjE5Ny4wNTguMzcuMDU4LjU1XG4gIDAgLjA0LS4wMDUuMTN0LS4wMDUuMTI4cS0uNjA1IDAtMS44MjctLjA3Ni0xLjIyLS4wOC0xLjgzNi0uMDgtLjczIDAtMi4wNjcuMDctMS4zMzcuMDY3LTEuNzEyLjA3NiAwLS40MTIuMDRcbiAgLS43NWwxLjI1OC0uMjdxLjAxIDAgLjEyLS4wMjJsLjE1LS4wMzNxLjAzOC0uMDEuMTQtLjA0NC4xLS4wMzQuMTQzLS4wNmwuMS0uMDhxLjA2LS4wNDguMDgyLS4xMDYuMDI0LS4wNTYuMDI0XG4gIC0uMTMzIDAtLjE1Mi0uMjk4LS45MjZ0LS42OTMtMS43MXEtLjM5Mi0uOTMtLjQwMi0uOTZsLTQuMzI1LS4wMnEtLjI1LjU2LS43MzQgMS44OC0uNDg3IDEuMzItLjQ4NyAxLjU2IDBcbiAgLjIxMy4xMzYuMzYyLjEzNC4xNS40MTguMjM1LjI4NS4wODcuNDY3LjEzLjE4NS4wNDQuNTUuMDguMzY2LjA0LjM5NS4wNC4wMS4xODMuMDEuNTU4IDAgLjA4Ny0uMDIuMjYtLjU1OFxuICAwLTEuNjc4LS4wOTUtMS4xMi0uMDk4LTEuNjc4LS4wOTgtLjA4IDAtLjI2LjA0LS4xOC4wMzctLjIwOC4wMzctLjc3LjEzNi0xLjgwOC4xMzZaIil9cmV0dXJuIFQoZSx0LG4sImljb24tZm9udCIscix3LmNsb25lTm9kZSghMSkpfWZ1bmN0aW9uIGcoZSx0LG4scil7aWYodm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09TSl7TT12Lm5ld1BhdGgoIk0xMy43MjQgNC43MzhxLjE5NS4yMTYuMDc2LjQ3Nkw3Ljk2IDE3LjczcS0uMTQyLjI3LS40NTYuMjctLjA0MyAwLS4xNS0uMDIyLS4xODUtLjA1NC0uMjc3XG4gIC0uMjA1LS4wOTItLjE1LS4wNS0uMzI1bDIuMTMyLTguNzRMNC43NjUgOS44cS0uMDQ0LjAxLS4xMy4wMS0uMTk1IDAtLjMzNi0uMTE4LS4xOTMtLjE2Mi0uMTQtLjQyMkw2LjMzNy4zNDZxLjA0M1xuICAtLjE1LjE3My0uMjVRNi42NCAwIDYuODEgMGgzLjU0OHEuMjA2IDAgLjM0Ni4xMzUuMTQuMTM1LjE0LjMyIDAgLjA4Ni0uMDUzLjE5NEw4Ljk0IDUuNjU0bDQuMjg1XG4gIC0xLjA2cS4wODYtLjAyLjEzLS4wMi4yMDUgMCAuMzY3LjE2eiIpfXJldHVybiBUKGUsdCxuLCJpY29uLWZsYXNoIixyLE0uY2xvbmVOb2RlKCExKSl9ZnVuY3Rpb24gYihlLHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1rKXtrPXYubmV3UGF0aCgiTTE3IDQuMTA3djkuNzE0cTAgLjM4LS4zNDguNTMtLjExNi4wNS0uMjIzLjA1LS4yNSAwLS40MS0uMTdsLTMuNi0zLjZ2MS40OHEwIDEuMDY3LS43NTcgMS44Mi0uNzU0Ljc1NlxuICAtMS44MTcuNzU2SDMuNTdxLTEuMDYgMC0xLjgxNi0uNzUzUTEgMTMuMTcgMSAxMi4xMDZWNS44MnEwLTEuMDYuNzU0LTEuODE2Ljc1NS0uNzU0IDEuODE3LS43NTRoNi4yOXExLjA3IDBcbiAgMS44Mi43NTQuNzYuNzU1Ljc2IDEuODE3VjcuM2wzLjU5Ny0zLjU5cS4xNi0uMTcuNC0uMTcuMTA3IDAgLjIyLjA0NS4zNS4xNTMuMzUuNTI4eiIpfXJldHVybiBUKGUsdCxuLCJpY29uLXZpZGVvIixyLGsuY2xvbmVOb2RlKCExKSl9ZnVuY3Rpb24gRShlLHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1JKXtJPXYubmV3UGF0aCgiTTguMzg1IDMuNzU2djEwLjQ2cTAgLjI1Mi0uMTgzLjQzNC0uMTgzLjE4My0uNDMzLjE4M3QtLjQ0LS4xODNsLTMuMi0zLjIwMkgxLjYxcS0uMjVcbiAgMC0uNDMtLjE4My0uMTgtLjE4Mi0uMTgtLjQzMlY3LjE0cTAtLjI1LjE4Mi0uNDMyLjE4Mi0uMTgzLjQzMi0uMTgzaDIuNTJsMy4yMDItMy4yMDJxLjE4Mi0uMTgzLjQzMlxuICAtLjE4M3QuNDMuMTgzcS4xODIuMTgzLjE4Mi40MzN6bTMuNjkyIDUuMjNxMCAuNzMtLjQxIDEuMzYtLjQwNy42My0xLjA4LjktLjA5Ny4wNDgtLjI0LjA0OC0uMjUgMFxuICAtLjQzNC0uMTc4LS4xODItLjE3Ny0uMTgyLS40MzcgMC0uMjEuMTItLjM1LjEyLS4xNC4yOC0uMjQuMTYtLjEuMzMtLjIyLjE2Ni0uMTIuMjgtLjM0LjExNy0uMjIuMTE3XG4gIC0uNTUgMC0uMzMtLjExNS0uNTUtLjExNS0uMjI0LS4yOC0uMzQ0LS4xNjMtLjEyLS4zMjYtLjIyLS4xNjUtLjEtLjI4LS4yNC0uMTE2LS4xNC0uMTE2LS4zNCAwLS4yNi4xODNcbiAgLS40NHQuNDMtLjE3NnEuMTQ2IDAgLjI0LjA0OC42NzYuMjYgMS4wOC44OTQuNDEuNjM2LjQxIDEuMzY3em0yLjQ2IDBxMCAxLjQ3Mi0uODE2IDIuNzE3dC0yLjE2IDEuODEzcVxuICAtLjEyLjA0OC0uMjQuMDQ4LS4yNiAwLS40NC0uMTgzLS4xOC0uMTgtLjE4LS40MyAwLS4zNy4zNzgtLjU2LjU0LS4yOC43My0uNDIuNzEzLS41MiAxLjExLTEuMzAyLjRcbiAgLS43ODMuNC0xLjY2NyAwLS44ODYtLjQtMS42Ny0uNC0uNzgzLTEuMTEtMS4zMDMtLjE5Mi0uMTQ1LS43My0uNDI0LS4zNzYtLjE5Mi0uMzc2LS41NjcgMC0uMjUuMTgzXG4gIC0uNDM0LjE4My0uMTguNDMzLS4xOC4xMjMgMCAuMjUuMDQ3IDEuMzQ0LjU2NyAyLjE2IDEuODEyLjgyIDEuMjQ0LjgyIDIuNzE2em0yLjQ2MyAwcTAgMi4yMTJcbiAgLTEuMjIgNC4wNjMtMS4yMjIgMS44NS0zLjI1IDIuNzItLjEyNi4wNS0uMjUuMDUtLjI1IDAtLjQzNC0uMTktLjE4My0uMTgzLS4xODMtLjQzMyAwLS4zNDYuMzc1XG4gIC0uNTY4LjA2OC0uMDQuMjE3LS4xLjE1LS4wNjQuMjE2LS4xLjQ1LS4yNDQuNzktLjQ5NCAxLjE5LS44NzUgMS44NS0yLjE4My42Ny0xLjMwNi42Ny0yLjc3NyAwXG4gIC0xLjQ3LS42NjMtMi43OC0uNjY0LTEuMzA0LTEuODQ2LTIuMTgtLjM0Ni0uMjUtLjc5LS40OS0uMDY1LS4wMzUtLjIxNC0uMS0uMTUtLjA2LS4yMi0uMVxuICAtLjM3NS0uMjItLjM3NS0uNTcgMC0uMjUuMTgzLS40My4xODMtLjE4Mi40MzMtLjE4Mi4xMjMgMCAuMjUuMDQ3IDIuMDI3Ljg3NiAzLjI1IDIuNzI3UTE3IDYuNzc1IDE3IDguOTlaIil9cmV0dXJuIFQoZSx0LG4sImljb24tYXVkaW8iLHIsSS5jbG9uZU5vZGUoITEpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHksdj1lKCIuL3N2ZyIpLFQ9ZnVuY3Rpb24oZSx0LG4scixvLHMpe3ZhciBpPXYubmV3U3ZnKCIiLHt4OmUseTp0fSksYT12Lm5ld0coImljb24gIityLHt0cmFuc2Zvcm06InNjYWxlKCIrbysiKSJ9KTtyZXR1cm4gYS5hcHBlbmRDaGlsZChzKSxhLmFwcGVuZENoaWxkKHYubmV3VGl0bGUobikpLGkuYXBwZW5kQ2hpbGQoYSksaX07bi5ub1Rscz1yO3ZhciBBO24uZXJyM3h4PW8sbi5lcnI0eHg9cyxuLmVycjV4eD1pO3ZhciBDO24ucGxhaW49YTt2YXIgTztuLm90aGVyPWw7dmFyIFM7bi5qYXZhc2NyaXB0PXU7dmFyIFI7bi5pbWFnZT1jLG4uc3ZnPWQ7dmFyIGo7bi5odG1sPV87dmFyIHg7bi5jc3M9cDt2YXIgTDtuLndhcm5pbmc9Zjt2YXIgRDtuLmVycm9yPW07dmFyIHc7bi5mb250PWg7dmFyIE07bi5mbGFzaD1nO3ZhciBrO24udmlkZW89Yjt2YXIgSTtuLmF1ZGlvPUV9LHsiLi9zdmciOjZ9XSw0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9UmVnRXhwKCJeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/Iiksbj1lLm1hdGNoKHQpfHxbXTtyZXR1cm57YXV0aG9yaXR5Om5bNF0sZnJhZ21lbnQ6bls5XSxwYXRoOm5bNV0scXVlcnk6bls3XSxzY2hlbWU6blsyXX19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPTA7aWYoZSYmIShlLmxlbmd0aDwxKSlmb3IodmFyIHI9ZS5sZW5ndGg7bjxyOyl7aWYodChlW25dLG4pKXJldHVybiBuO24rK319ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXMoZSx0KTtpZih2b2lkIDAhPT1uKXJldHVybiBlW25dfWZ1bmN0aW9uIGEoZSx0KXtpZihlLmxlbmd0aDx0KXJldHVybiBlLnJlcGxhY2UoL2h0dHBzPzpcL1wvLywiIik7dmFyIG49cihlKTtpZigobi5hdXRob3JpdHkrbi5wYXRoKS5sZW5ndGg8dClyZXR1cm4gbi5hdXRob3JpdHkrbi5wYXRoO3ZhciBvPU1hdGguZmxvb3IodC8yKS0zLHM9TWF0aC5mbG9vcih0LzIpLTUsaT1uLnBhdGguc3BsaXQoIi8iKTtyZXR1cm4gbi5hdXRob3JpdHkubGVuZ3RoPm8/bi5hdXRob3JpdHkuc3Vic3RyKDAsbykrIi4uLiIraVtpLmxlbmd0aC0xXS5zdWJzdHIoLXMpOm4uYXV0aG9yaXR5KyIuLi4iK2lbaS5sZW5ndGgtMV0uc3Vic3RyKC1zKX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIpLE1hdGgucm91bmQoZSpNYXRoLnBvdygxMCx0KSkvTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24gdShlLHQsbil7cmV0dXJuIGU+PXQmJmU8PW59ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoZiwiIil9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBlKyh0PjE/InMiOiIiKX1mdW5jdGlvbiBfKGUpe3JldHVybiA5PT09ZS53aGljaCYmZS5zaGlmdEtleX1mdW5jdGlvbiBwKGUpe3JldHVybiA5PT09ZS53aGljaCYmIWUuc2hpZnRLZXl9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uY29udGFpbnM9byxuLmZpbmRJbmRleD1zLG4uZmluZD1pLG4ucmVzb3VyY2VVcmxGb3JtYXR0ZXI9YSxuLnJvdW5kTnVtYmVyPWwsbi5pc0luU3RhdHVzQ29kZVJhbmdlPXU7dmFyIGY9L1teYS16LV0vZztuLnRvQ3NzQ2xhc3M9YyxuLnBsdXJhbGl6ZT1kLG4uaXNUYWJVcD1fLG4uaXNUYWJEb3duPXB9LHt9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPW8pLHZvaWQgMCE9PWUpe3ZhciByPXQoZSk7aWYodm9pZCAwIT09cilyZXR1cm4gbihyKX19ZnVuY3Rpb24gbyhlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZylyZXR1cm4gZS50b1N0cmluZygpO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCB0eXBlICIrdHlwZW9mIGUrIiB0byBzdHJpbmciKX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLnRyaW0oKS5sZW5ndGg+MD9lOnZvaWQgMH1mdW5jdGlvbiBpKGUpe3ZhciB0PW5ldyBEYXRlKGUpO2lmKCFpc05hTih0LmdldFRpbWUoKSkpcmV0dXJuIHR9ZnVuY3Rpb24gYShlKXtpZih2b2lkIDAhPT1lJiZudWxsIT09ZSl7cmV0dXJuIHUoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pfX1mdW5jdGlvbiBsKGUpe2lmKHZvaWQgMCE9PWUmJm51bGwhPT1lKXtyZXR1cm4gdShlLGZ1bmN0aW9uKGUpe3JldHVybiBlPjB9KX19ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpP2U6dm9pZCAwfTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciByPXBhcnNlSW50KGUsMTApO2lmKCFpc0Zpbml0ZShyKSlyZXR1cm47cmV0dXJuIG4ocil9cmV0dXJuIG4oZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gdm9pZCAwIT09ZT9FLnJvdW5kTnVtYmVyKGUsMykrIiBtcyI6dm9pZCAwfWZ1bmN0aW9uIGQoZSl7aWYodm9pZCAwIT09ZSl7dmFyIHQ9RS5yb3VuZE51bWJlcihlLDMpKyIgcyI7cmV0dXJuIGU+VD90KyIgKH4iK0Uucm91bmROdW1iZXIoZS9ULDApKyIgZGF5cykiOmU+dj90KyIgKH4iK0Uucm91bmROdW1iZXIoZS92LDApKyIgaG91cnMpIjplPnk/dCsiICh+IitFLnJvdW5kTnVtYmVyKGUveSwwKSsiIG1pbnV0ZXMpIjp0fX1mdW5jdGlvbiBfKGUpe3JldHVybiB2b2lkIDAhPT1lP2UudG9VVENTdHJpbmcoKSsiPGJyLz4obG9jYWwgdGltZTogIitlLnRvTG9jYWxlU3RyaW5nKCkrIikiOnZvaWQgMH1mdW5jdGlvbiBwKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIiI7dmFyIHQ9ZSsiIGJ5dGVzIjtyZXR1cm4gZT49Qz90KyIgKH4iK0Uucm91bmROdW1iZXIoZS9DLDEpKyIgTUIpIjplPj1BP3QrIiAofiIrRS5yb3VuZE51bWJlcihlL0EsMCkrIiBrQikiOnR9ZnVuY3Rpb24gZihlKXtpZih2b2lkIDA9PT1lJiYoZT0iIiksbnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuIiI7aWYoInN0cmluZyIhPXR5cGVvZiBlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyl0aHJvdyBUeXBlRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIik7ZT1lLnRvU3RyaW5nKCl9cmV0dXJuIGUucmVwbGFjZShTLGZ1bmN0aW9uKGUpe3JldHVybiBPW2VdfSl9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLnJlcGxhY2UoUiwiXyIpO3JldHVybiAwPT09dC5pbmRleE9mKCJodHRwOi8vIil8fDA9PT10LmluZGV4T2YoImh0dHBzOi8vIik/dDooY29uc29sZS53YXJuKCJza2lwcGVkIGxpbmssIGR1ZSB0byBwb3RlbnRpYWxseSB1bnNhZmUgdXJsIixlKSwiIil9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS50b1N0cmluZygpLnJlcGxhY2UoaiwiIil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZToic3RyaW5nIj09dHlwZW9mIGU/cGFyc2VJbnQoZSwxMCk6dm9pZCAwfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49ZyhlW3RdKTtpZih2b2lkIDA9PT1uKXRocm93IFR5cGVFcnJvcignb3B0aW9uICInK3QrJyIgbmVlZHMgdG8gYmUgYSBudW1iZXInKTtlW3RdPW59LG49ZnVuY3Rpb24odCl7ZVt0XT0hIWVbdF19O3JldHVybiB0KCJsZWZ0Q29sdW1uV2lkdGgiKSx0KCJyb3dIZWlnaHQiKSx0KCJzZWxlY3RlZFBhZ2UiKSxuKCJzaG93QWxpZ25tZW50SGVscGVycyIpLG4oInNob3dJbmRpY2F0b3JJY29ucyIpLG4oInNob3dNaW1lVHlwZUljb24iKSxlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRT1lKCIuL21pc2MiKTtuLnBhcnNlQW5kRm9ybWF0PXIsbi5wYXJzZU5vbkVtcHR5PXMsbi5wYXJzZURhdGU9aSxuLnBhcnNlTm9uTmVnYXRpdmU9YSxuLnBhcnNlUG9zaXRpdmU9bCxuLmZvcm1hdE1pbGxpc2Vjb25kcz1jO3ZhciB5PTYwLHY9NjAqeSxUPTI0KnY7bi5mb3JtYXRTZWNvbmRzPWQsbi5mb3JtYXREYXRlTG9jYWxpemVkPV87dmFyIEE9MTAyNCxDPTEwMjQqQTtuLmZvcm1hdEJ5dGVzPXA7dmFyIE89eyciJzoiJnF1b3QiLCImIjoiJmFtcCIsIiciOiImIzAzOSIsIjwiOiImbHQiLCI+IjoiJmd0In0sUz1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKE8pLmpvaW4oInwiKSwiZyIpO24uZXNjYXBlSHRtbD1mO3ZhciBSPW5ldyBSZWdFeHAoIlteLUEtWmEtejAtOSsmQCMvJT89fl98ITosLjsoKV0iLCJnIik7bi5zYW5pdGl6ZVVybEZvckxpbms9bTt2YXIgaj1uZXcgUmVnRXhwKCJbXmEtekEtWjAtOV0iLCJnIik7bi5zYW5pdGl6ZUFscGhhTnVtZXJpYz1oLG4udG9JbnQ9ZyxuLnZhbGlkYXRlT3B0aW9ucz1ifSx7Ii4vbWlzYyI6NH1dLDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXZvaWQgMD09PXQ/e306dCxyPW4uYXR0cmlidXRlcyxvPXZvaWQgMD09PXI/e306cixzPW4uY3NzLGk9dm9pZCAwPT09cz97fTpzLGE9bi50ZXh0LGw9dm9pZCAwPT09YT8iIjphLHU9bi5jbGFzc05hbWUsYz12b2lkIDA9PT11PyIiOnUsZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaCxlKTtyZXR1cm4gYyYmbS5hZGRDbGFzcyhkLGMpLGwmJihkLnRleHRDb250ZW50PWwpLG0uc2FmZVNldFN0eWxlcyhkLGkpLG0uc2FmZVNldEF0dHJpYnV0ZXMoZCxvKSxkfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSkscigic3ZnIix7Y2xhc3NOYW1lOmUsYXR0cmlidXRlczp0LGNzczpufSl9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDA9PT1uJiYobj17fSkscigiZyIse2NsYXNzTmFtZTplLGF0dHJpYnV0ZXM6dCxjc3M6bn0pfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHIoImNsaXBQYXRoIix7YXR0cmlidXRlczp7aWQ6ZX19KX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMD09PW4mJihuPXt9KSxyKCJmb3JlaWduT2JqZWN0Iix7YXR0cmlidXRlczplLGNsYXNzTmFtZTp0LGNzczpufSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gcigiYSIse2NsYXNzTmFtZTplfSl9ZnVuY3Rpb24gdShlLHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDA9PT1uJiYobj17fSkscigicmVjdCIse2F0dHJpYnV0ZXM6ZSxjbGFzc05hbWU6dCxjc3M6bn0pfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHIoImxpbmUiLHtjbGFzc05hbWU6dCxhdHRyaWJ1dGVzOmV9KX1mdW5jdGlvbiBkKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhoLCJ0aXRsZSIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgidGV4dCIsZSksdH1mdW5jdGlvbiBfKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PW4mJihuPXt9KSxyKCJ0ZXh0Iix7dGV4dDplLGF0dHJpYnV0ZXM6dCxjc3M6bn0pfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGgsInBhdGgiKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLGUpLHR9ZnVuY3Rpb24gZihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSwwPT09KGUudGV4dENvbnRlbnR8fCIiKS5sZW5ndGgpcmV0dXJuIDA7dmFyIG4scixvPWcoKTt0PyhyPWUuc3R5bGUudGV4dFNoYWRvdyxuPWUpOihuPWUuY2xvbmVOb2RlKCEwKSxuLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxuLnNldEF0dHJpYnV0ZSgieSIsIjAiKSksbi5zdHlsZS50ZXh0U2hhZG93PSIwIixvLmFwcGVuZENoaWxkKG4pLHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pO3ZhciBzPW4uZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7cmV0dXJuIHQmJnZvaWQgMCE9PXImJihlLnN0eWxlLnRleHRTaGFkb3c9ciksc31PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG09ZSgiLi9kb20iKSxoPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7bi5uZXdTdmc9byxuLm5ld0c9cyxuLm5ld0NsaXBQYXRoPWksbi5uZXdGb3JlaWduT2JqZWN0PWEsbi5uZXdBPWwsbi5uZXdSZWN0PXUsbi5uZXdMaW5lPWMsbi5uZXdUaXRsZT1kLG4ubmV3VGV4dEVsPV8sbi5uZXdQYXRoPXA7dmFyIGc9ZnVuY3Rpb24oKXt2YXIgZSx0O3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PWUpe2U9bygid2F0ZXItZmFsbC1jaGFydCB0ZW1wIix7Y2xhc3NOYW1lOiJ3YXRlci1mYWxsLWNoYXJ0IHRlbXAiLHdpZHRoOiI5OTk5cHgifSx7bGVmdDoiMHB4Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4Iix2aXNpYmlsaXR5OiJoaWRkZW4iLCJ6LWluZGV4IjoiOTk5OTkifSl9cmV0dXJuIHZvaWQgMD09PWUucGFyZW50RWxlbWVudCYmd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksY2xlYXJUaW1lb3V0KHQpLHQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0sNTAwKSxlfX0oKTtuLmdldE5vZGVUZXh0V2lkdGg9Zn0seyIuL2RvbSI6MX1dLDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInVsIik7cmV0dXJuIGUuY2xhc3NOYW1lPSJyZXNvdXJjZS1sZWdlbmQiLGUuaW5uZXJIVE1MPSdcbiAgICAgICAgPGxpIGNsYXNzPSJsZWdlbmQtYmxvY2tlZCIgdGl0bGU9IlRpbWUgc3BlbnQgaW4gYSBxdWV1ZSB3YWl0aW5nIGZvciBhIG5ldHdvcmsgY29ubmVjdGlvbi4iPkJsb2NrZWQ8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9ImxlZ2VuZC1kbnMiIHRpdGxlPSJETlMgcmVzb2x1dGlvbiB0aW1lLiI+RE5TPC9saT5cbiAgICAgICAgPGxpIGNsYXNzPSJsZWdlbmQtY29ubmVjdCIgdGl0bGU9IlRpbWUgcmVxdWlyZWQgdG8gY3JlYXRlIFRDUCBjb25uZWN0aW9uLiI+Q29ubmVjdDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz0ibGVnZW5kLXNzbCIgdGl0bGU9IlRpbWUgcmVxdWlyZWQgZm9yIFNTTC9UTFMgbmVnb3RpYXRpb24uIj5TU0wgKFRMUyk8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9ImxlZ2VuZC1zZW5kIiB0aXRsZT0iVGltZSByZXF1aXJlZCB0byBzZW5kIEhUVFAgcmVxdWVzdCB0byB0aGUgc2VydmVyLiI+U2VuZDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz0ibGVnZW5kLXdhaXQiIHRpdGxlPSJXYWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iPldhaXQ8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9ImxlZ2VuZC1yZWNlaXZlIlxuICAgICAgICB0aXRsZT0iVGltZSByZXF1aXJlZCB0byByZWFkIGVudGlyZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgKG9yIGNhY2hlKS4iPlJlY2VpdmU8L2xpPicsZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5tYWtlTGVnZW5kPXJ9LHt9XSw4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbC5tYWtlTGVnZW5kKCl9ZnVuY3Rpb24gbyhlLHQpe3ZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDAhPT10LmxlZnRDb2x1bW5XaXRoJiYoY29uc29sZS53YXJuKCJEZXByZWNpYXRpb24gV2FybmluZzogVGhlIG9wdGlvbiAnbGVmdENvbHVtbldpdGgnIGhhcyBiZWVuIGZpeGVkIHRvICdsZWZ0Q29sdW1uV2lkdGgnLCBwbGVhc2UgdXBkYXRlIHlvdXIgY29kZSBhcyB0aGlzIHdpbGwgZ2V0IGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZSIpLHQubGVmdENvbHVtbldpZHRoPXQubGVmdENvbHVtbldpdGgpO3ZhciBuPWEudmFsaWRhdGVPcHRpb25zKGkoe30sXyx0KSkscj1uZXcgdS5kZWZhdWx0KGUsbi5zZWxlY3RlZFBhZ2UpLG89ZC5jcmVhdGVXYXRlcmZhbGxTdmcoci5nZXRTZWxlY3RlZFBhZ2UoKSxuKTtyZXR1cm4gci5vblBhZ2VVcGRhdGUoZnVuY3Rpb24oZSx0KXt2YXIgcj1vLnBhcmVudEVsZW1lbnQscz1kLmNyZWF0ZVdhdGVyZmFsbFN2Zyh0LG4pO3IucmVwbGFjZUNoaWxkKHMsbyksbz1zfSksbi5wYWdlU2VsZWN0b3ImJnIuaW5pdFBhZ2luZ1NlbGVjdEJveChuLnBhZ2VTZWxlY3Rvciksbi5sZWdlbmRIb2xkZXImJihuLmxlZ2VuZEhvbGRlci5pbm5lckhUTUw9IiIsbi5sZWdlbmRIb2xkZXIuYXBwZW5kQ2hpbGQobC5tYWtlTGVnZW5kKCkpKSxvfWZ1bmN0aW9uIHMoZSx0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIG49aSh7fSxwLHQpLHI9Yy50cmFuc2Zvcm1Eb2MoZSxuKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5vblBhcnNlZCYmdC5vblBhcnNlZChyKSxvKHIsdCl9dmFyIGk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKXt0PWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSl9cmV0dXJuIGV9LGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9ZSgiLi9oZWxwZXJzL3BhcnNlIiksbD1lKCIuL2xlZ2VuZC9sZWdlbmQiKSx1PWUoIi4vcGFnaW5nL3BhZ2luZyIpLGM9ZSgiLi90cmFuc2Zvcm1lcnMvaGFyIiksZD1lKCIuL3dhdGVyZmFsbC9zdmctY2hhcnQiKSxfPXtsZWZ0Q29sdW1uV2lkdGg6MjUsbGVnZW5kSG9sZGVyOnZvaWQgMCxvblBhcnNlZDp2b2lkIDAscGFnZVNlbGVjdG9yOnZvaWQgMCxyb3dIZWlnaHQ6MjMsc2VsZWN0ZWRQYWdlOjAsc2hvd0FsaWdubWVudEhlbHBlcnM6ITAsc2hvd0luZGljYXRvckljb25zOiEwLHNob3dNaW1lVHlwZUljb246ITB9LHA9e3Nob3dVc2VyVGltaW5nOiExLHNob3dVc2VyVGltaW5nRW5kTWFya2VyOiExfTtuLm1ha2VMZWdlbmQ9cixuLmZyb21IYXI9c30seyIuL2hlbHBlcnMvcGFyc2UiOjUsIi4vbGVnZW5kL2xlZ2VuZCI6NywiLi9wYWdpbmcvcGFnaW5nIjo5LCIuL3RyYW5zZm9ybWVycy9oYXIiOjEzLCIuL3dhdGVyZmFsbC9zdmctY2hhcnQiOjI3fV0sOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZSgiLi4vaGVscGVycy9kb20iKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PTApLHRoaXMuZG9jPWUsdGhpcy5zZWxlY3RlZFBhZ2VJbmRleD10LHRoaXMub25QYWdlVXBkYXRlQ2JzPVtdLHQ+PXRoaXMuZG9jLnBhZ2VzLmxlbmd0aCYmKHRoaXMuc2VsZWN0ZWRQYWdlSW5kZXg9dGhpcy5kb2MucGFnZXMubGVuZ3RoLTEpfXJldHVybiBlLnByb3RvdHlwZS5nZXRQYWdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MucGFnZXMubGVuZ3RofSxlLnByb3RvdHlwZS5nZXRTZWxlY3RlZFBhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MucGFnZXNbdGhpcy5zZWxlY3RlZFBhZ2VJbmRleF19LGUucHJvdG90eXBlLmdldFNlbGVjdGVkUGFnZUluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRQYWdlSW5kZXh9LGUucHJvdG90eXBlLnNldFNlbGVjdGVkUGFnZUluZGV4PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5zZWxlY3RlZFBhZ2VJbmRleCE9PWUpe2lmKGU8MHx8ZT49dGhpcy5nZXRQYWdlQ291bnQoKSl0aHJvdyBuZXcgRXJyb3IoIlBhZ2UgZG9lcyBub3QgZXhpc3QgLSBJbnZhbGlkIHBhZ2VJbmRleCBzZWxlY3RlZCIpO3RoaXMuc2VsZWN0ZWRQYWdlSW5kZXg9ZTt2YXIgbj10aGlzLmRvYy5wYWdlc1t0aGlzLnNlbGVjdGVkUGFnZUluZGV4XTt0aGlzLm9uUGFnZVVwZGF0ZUNicy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodC5zZWxlY3RlZFBhZ2VJbmRleCxuKX0pfX0sZS5wcm90b3R5cGUub25QYWdlVXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZ2V0UGFnZUNvdW50KCk+MSlyZXR1cm4gdGhpcy5vblBhZ2VVcGRhdGVDYnMucHVzaChlKX0sZS5wcm90b3R5cGUuaW5pdFBhZ2luZ1NlbGVjdEJveD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcztpZih0aGlzLmdldFBhZ2VDb3VudCgpPD0xKXJldHVybiB2b2lkKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpO3IucmVtb3ZlQ2hpbGRyZW4oZSksdGhpcy5kb2MucGFnZXMuZm9yRWFjaChmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyBPcHRpb24obi50aXRsZSxyLnRvU3RyaW5nKCksITEscj09PXQuc2VsZWN0ZWRQYWdlSW5kZXgpO2UuYWRkKG8pfSksZS5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUudGFyZ2V0LnZhbHVlLDEwKTtuLnNldFNlbGVjdGVkUGFnZUluZGV4KHQpfSl9LGV9KCk7bi5kZWZhdWx0PW99LHsiLi4vaGVscGVycy9kb20iOjF9XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm5bWyJSZXF1ZXN0IE51bWJlciIsIiMiK25dLFsiU3RhcnRlZCIsbmV3IERhdGUoZS5zdGFydGVkRGF0ZVRpbWUpLnRvTG9jYWxlU3RyaW5nKCkrKHQ+MD8iICgiK3UuZm9ybWF0TWlsbGlzZWNvbmRzKHQpKyIgYWZ0ZXIgcGFnZSByZXF1ZXN0IHN0YXJ0ZWQpIjoiIildLFsiRHVyYXRpb24iLHUuZm9ybWF0TWlsbGlzZWNvbmRzKGUudGltZSldLFsiRXJyb3IvU3RhdHVzIENvZGUiLGUucmVzcG9uc2Uuc3RhdHVzKyIgIitlLnJlc3BvbnNlLnN0YXR1c1RleHRdLFsiU2VydmVyIElQQWRkcmVzcyIsZS5zZXJ2ZXJJUEFkZHJlc3NdLFsiQ29ubmVjdGlvbiIsZS5jb25uZWN0aW9uXSxbIkJyb3dzZXIgUHJpb3JpdHkiLGUuX3ByaW9yaXR5fHxlLl9pbml0aWFsUHJpb3JpdHldLFsiV2FzIHB1c2hlZCIsdS5wYXJzZUFuZEZvcm1hdChlLl93YXNfcHVzaGVkLHUucGFyc2VQb3NpdGl2ZSxmdW5jdGlvbigpe3JldHVybiJ5ZXMifSldLFsiSW5pdGlhdG9yIChMb2FkZWQgYnkpIixlLl9pbml0aWF0b3JdLFsiSW5pdGlhdG9yIExpbmUiLGUuX2luaXRpYXRvcl9saW5lXSxbIkluaXRpYXRvciBUeXBlIixlLl9pbml0aWF0b3JfdHlwZV0sWyJIb3N0IixsLmdldEhlYWRlcihlLnJlcXVlc3QuaGVhZGVycywiSG9zdCIpXSxbIklQIixlLl9pcF9hZGRyXSxbIkNsaWVudCBQb3J0Iix1LnBhcnNlQW5kRm9ybWF0KGUuX2NsaWVudF9wb3J0LHUucGFyc2VQb3NpdGl2ZSldLFsiRXhwaXJlcyIsZS5fZXhwaXJlc10sWyJDYWNoZSBUaW1lIix1LnBhcnNlQW5kRm9ybWF0KGUuX2NhY2hlX3RpbWUsdS5wYXJzZVBvc2l0aXZlLHUuZm9ybWF0U2Vjb25kcyldLFsiQ0ROIFByb3ZpZGVyIixlLl9jZG5fcHJvdmlkZXJdLGQoIk9iamVjdFNpemUiLGUuX29iamVjdFNpemUpLGQoIkJ5dGVzIEluIChkb3dubG9hZGVkKSIsZS5fYnl0ZXNJbiksZCgiQnl0ZXMgT3V0ICh1cGxvYWRlZCkiLGUuX2J5dGVzT3V0KSxkKCJKUEVHIFNjYW4gQ291bnQiLGUuX2pwZWdfc2Nhbl9jb3VudCksZCgiR3ppcCBUb3RhbCIsZS5fZ3ppcF90b3RhbCksZCgiR3ppcCBTYXZlIixlLl9nemlwX3NhdmUpLGQoIk1pbmlmeSBUb3RhbCIsZS5fbWluaWZ5X3RvdGFsKSxkKCJNaW5pZnkgU2F2ZSIsZS5fbWluaWZ5X3NhdmUpLGQoIkltYWdlIFRvdGFsIixlLl9pbWFnZV90b3RhbCksZCgiSW1hZ2UgU2F2ZSIsZS5faW1hZ2Vfc2F2ZSldLmZpbHRlcihwKX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUucmVxdWVzdCxuPWZ1bmN0aW9uKGUpe3JldHVybiBsLmdldEhlYWRlcnModC5oZWFkZXJzLGUpfTtyZXR1cm4gYy5mbGF0dGVuS3ZUdXBsZShbWyJNZXRob2QiLHQubWV0aG9kXSxbIkhUVFAgVmVyc2lvbiIsdC5odHRwVmVyc2lvbl0sZCgiQnl0ZXMgT3V0ICh1cGxvYWRlZCkiLGUuX2J5dGVzT3V0KSxkKCJIZWFkZXJzIFNpemUiLHQuaGVhZGVyc1NpemUpLGQoIkJvZHkgU2l6ZSIsdC5ib2R5U2l6ZSksWyJDb21tZW50Iix1LnBhcnNlQW5kRm9ybWF0KHQuY29tbWVudCx1LnBhcnNlTm9uRW1wdHkpXSxuKCJVc2VyLUFnZW50IiksbigiSG9zdCIpLG4oIkNvbm5lY3Rpb24iKSxuKCJBY2NlcHQiKSxuKCJBY2NlcHQtRW5jb2RpbmciKSxuKCJFeHBlY3QiKSxuKCJGb3J3YXJkZWQiKSxuKCJJZi1Nb2RpZmllZC1TaW5jZSIpLG4oIklmLVJhbmdlIiksbigiSWYtVW5tb2RpZmllZC1TaW5jZSIpLF8oIlF1ZXJ5c3RyaW5nIHBhcmFtZXRlcnMgY291bnQiLHQucXVlcnlTdHJpbmcubGVuZ3RoKSxfKCJDb29raWVzIGNvdW50Iix0LmNvb2tpZXMubGVuZ3RoKV0pLmZpbHRlcihwKX1mdW5jdGlvbiBzKGUpe3ZhciB0LG49ZS5yZXNwb25zZSxyPW4uY29udGVudCxvPW4uaGVhZGVycyxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWUpLGwuZ2V0SGVhZGVycyhvLHQpfSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWwuZ2V0SGVhZGVyKG8sZSk7cmV0dXJuW2UsdS5wYXJzZUFuZEZvcm1hdCh0LHUucGFyc2VEYXRlLHUuZm9ybWF0RGF0ZUxvY2FsaXplZCldfSxhPWwuZ2V0SGVhZGVyKG8sIkNvbnRlbnQtTGVuZ3RoIik7LTEhPT1yLnNpemUmJmEhPT1yLnNpemUudG9TdHJpbmcoKSYmKHQ9ci5zaXplKTt2YXIgXz1sLmdldEhlYWRlcihvLCJDb250ZW50LVR5cGUiKTtyZXR1cm4gZS5fY29udGVudFR5cGUmJmUuX2NvbnRlbnRUeXBlIT09XyYmKF89XysiIHwgIitlLl9jb250ZW50VHlwZSksYy5mbGF0dGVuS3ZUdXBsZShbWyJTdGF0dXMiLG4uc3RhdHVzKyIgIituLnN0YXR1c1RleHRdLFsiSFRUUCBWZXJzaW9uIixuLmh0dHBWZXJzaW9uXSxkKCJCeXRlcyBJbiAoZG93bmxvYWRlZCkiLGUuX2J5dGVzSW4pLGQoIkhlYWRlcnMgU2l6ZSIsbi5oZWFkZXJzU2l6ZSksZCgiQm9keSBTaXplIixuLmJvZHlTaXplKSxbIkNvbnRlbnQtVHlwZSIsX10scygiQ2FjaGUtQ29udHJvbCIpLHMoIkNvbnRlbnQtRW5jb2RpbmciKSxpKCJFeHBpcmVzIiksaSgiTGFzdC1Nb2RpZmllZCIpLHMoIlByYWdtYSIpLGQoIkNvbnRlbnQtTGVuZ3RoIixhKSxkKCJDb250ZW50IFNpemUiLHQpLGQoIkNvbnRlbnQgQ29tcHJlc3Npb24iLHIuY29tcHJlc3Npb24pLHMoIkNvbm5lY3Rpb24iKSxzKCJFVGFnIikscygiQWNjZXB0LVBhdGNoIiksWyJBZ2UiLHUucGFyc2VBbmRGb3JtYXQobC5nZXRIZWFkZXIobywiQWdlIiksdS5wYXJzZU5vbk5lZ2F0aXZlLHUuZm9ybWF0U2Vjb25kcyldLHMoIkFsbG93IikscygiQ29udGVudC1EaXNwb3NpdGlvbiIpLHMoIkxvY2F0aW9uIikscygiU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eSIpLHMoIlRyYWlsZXIgKGZvciBjaHVua2VkIHRyYW5zZmVyIGNvZGluZykiLCJUcmFpbGVyIikscygiVHJhbnNmZXItRW5jb2RpbmciKSxzKCJVcGdyYWRlIikscygiVmFyeSIpLHMoIlRpbWluZy1BbGxvdy1PcmlnaW4iKSxbIlJlZGlyZWN0IFVSTCIsdS5wYXJzZUFuZEZvcm1hdChuLnJlZGlyZWN0VVJMLHUucGFyc2VOb25FbXB0eSldLFsiQ29tbWVudCIsdS5wYXJzZUFuZEZvcm1hdChuLmNvbW1lbnQsdS5wYXJzZU5vbkVtcHR5KV1dKS5maWx0ZXIocCl9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9ZS50aW1pbmdzLG89ZnVuY3Rpb24oZSl7cmV0dXJuIHUucGFyc2VBbmRGb3JtYXQoZSx1LnBhcnNlTm9uTmVnYXRpdmUsdS5mb3JtYXRNaWxsaXNlY29uZHMpfSxzPSJudW1iZXIiIT10eXBlb2YgdHx8Im51bWJlciIhPXR5cGVvZiBuP3ZvaWQgMDpuLXQsaT1vKHIuY29ubmVjdCk7cmV0dXJuIHIuc3NsJiZyLnNzbD4wJiZyLmNvbm5lY3QmJihpPWkrIiAod2l0aG91dCBUTFM6ICIrbyhyLmNvbm5lY3Qtci5zc2wpKyIpIiksW1siVG90YWwiLHUuZm9ybWF0TWlsbGlzZWNvbmRzKHMpXSxbIkJsb2NrZWQiLG8oci5ibG9ja2VkKV0sWyJETlMiLG8oci5kbnMpXSxbIkNvbm5lY3QiLGldLFsiU1NMIChUTFMpIixvKHIuc3NsKV0sWyJTZW5kIix1LmZvcm1hdE1pbGxpc2Vjb25kcyhyLnNlbmQpXSxbIldhaXQiLHUuZm9ybWF0TWlsbGlzZWNvbmRzKHIud2FpdCldLFsiUmVjZWl2ZSIsdS5mb3JtYXRNaWxsaXNlY29uZHMoci5yZWNlaXZlKV1dLmZpbHRlcihwKX1mdW5jdGlvbiBhKGUsdCxuLGEpe3ZhciBsPWUucmVxdWVzdC5oZWFkZXJzLHU9ZS5yZXNwb25zZS5oZWFkZXJzLGM9ZnVuY3Rpb24oZSl7cmV0dXJuW2UubmFtZSxlLnZhbHVlXX07cmV0dXJue2dlbmVyYWw6cihlLG4sdCkscmVxdWVzdDpvKGUpLHJlcXVlc3RIZWFkZXJzOmwubWFwKGMpLmZpbHRlcihwKSxyZXNwb25zZTpzKGUpLHJlc3BvbnNlSGVhZGVyczp1Lm1hcChjKS5maWx0ZXIocCksdGltaW5nczppKGUsbixhKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPWUoIi4uL2hlbHBlcnMvaGFyIiksdT1lKCIuLi9oZWxwZXJzL3BhcnNlIiksYz1lKCIuL2hlbHBlcnMiKSxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdS5wYXJzZUFuZEZvcm1hdCh0LHUucGFyc2VQb3NpdGl2ZSx1LmZvcm1hdEJ5dGVzKV19LF89ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSx1LnBhcnNlQW5kRm9ybWF0KHQsdS5wYXJzZVBvc2l0aXZlKV19LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPjEmJnZvaWQgMCE9PWVbMV0mJiIiIT09ZVsxXX07bi5nZXRLZXlzPWF9LHsiLi4vaGVscGVycy9oYXIiOjIsIi4uL2hlbHBlcnMvcGFyc2UiOjUsIi4vaGVscGVycyI6MTR9XSwxMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoZS5yZXNwb25zZS5ib2R5U2l6ZTwxZTMpcmV0dXJuITE7aWYoXy5jb250YWlucyhbImh0bWwiLCJjc3MiLCJqYXZhc2NyaXB0Iiwic3ZnIiwicGxhaW4iXSx0KSlyZXR1cm4hMDt2YXIgbj1lLnJlc3BvbnNlLmNvbnRlbnQubWltZVR5cGUscj1bImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IiwiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIiwiYXBwbGljYXRpb24veC1mb250LXRydWV0eXBlIiwiYXBwbGljYXRpb24veC1mb250LXR0ZiIsImFwcGxpY2F0aW9uL3htbCIsImZvbnQvZW90IiwiZm9udC9vcGVudHlwZSIsImZvbnQvb3RmIiwiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIl07cmV0dXJuISghXy5jb250YWlucyhbInRleHQiXSxuLnNwbGl0KCIvIilbMF0pJiYhXy5jb250YWlucyhyLG4uc3BsaXQoIjsiKVswXSkpfWZ1bmN0aW9uIG8oZSl7aWYoIWUucmVxdWVzdC5tZXRob2R8fCJnZXQiIT09ZS5yZXF1ZXN0Lm1ldGhvZC50b0xvd2VyQ2FzZSgpKXJldHVybiExO2lmKDIwND09PWUucmVzcG9uc2Uuc3RhdHVzfHwhXy5pc0luU3RhdHVzQ29kZVJhbmdlKGUucmVzcG9uc2Uuc3RhdHVzLDIwMCwyOTkpKXJldHVybiExO3ZhciB0PWUucmVzcG9uc2UuaGVhZGVycztyZXR1cm4hKGQuaGFzSGVhZGVyKHQsIkNhY2hlLUNvbnRyb2wiKXx8ZC5oYXNIZWFkZXIodCwiRXhwaXJlcyIpKX1mdW5jdGlvbiBzKGUsdCl7dmFyIG49ZS5yZXNwb25zZS5oZWFkZXJzO3JldHVybiFkLmhhc0hlYWRlcihuLCJDb250ZW50LUVuY29kaW5nIikmJnIoZSx0KX1mdW5jdGlvbiBpKGUpe3JldHVybiAwPT09ZS5yZXF1ZXN0LnVybC5pbmRleE9mKCJodHRwczovLyIpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gMD09PXQmJiEhZS5yZXNwb25zZS5yZWRpcmVjdFVSTH1mdW5jdGlvbiBsKGUpe3JldHVybiB2b2lkIDAhPT1lLl93YXNfcHVzaGVkJiZudWxsIT09ZS5fd2FzX3B1c2hlZCYmMT09PXAudG9JbnQoZS5fd2FzX3B1c2hlZCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5yZXNwb25zZS5yZWRpcmVjdFVSTH0pWzBdO3JldHVybiB2b2lkIDA9PT10P2UubGVuZ3RoPjAmJmkoZVswXSk6aSh0KX1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciB1PVtdO3JldHVybiBsKGUpJiZ1LnB1c2goe2Rlc2NyaXB0aW9uOiJSZXNwb25zZSB3YXMgcHVzaGVkIGJ5IHRoZSBzZXJ2ZXIgdXNpbmcgSFRUUDIgcHVzaC4iLGRpc3BsYXlUeXBlOiJpbmxpbmUiLGljb246InB1c2giLGlkOiJwdXNoIix0aXRsZToiUmVzcG9uc2Ugd2FzIHB1c2hlZCBieSB0aGUgc2VydmVyIix0eXBlOiJpbmZvIn0pLCFufHxpKGUpfHxhKGUsdCl8fHUucHVzaCh7ZGVzY3JpcHRpb246Ikluc2VjdXJlIHJlcXVlc3QsIGl0IHNob3VsZCB1c2UgSFRUUFMuIixkaXNwbGF5VHlwZToiaWNvbiIsaWQ6Im5vVGxzIix0aXRsZToiSW5zZWN1cmUgQ29ubmVjdGlvbiIsdHlwZToiZXJyb3IifSksbyhlKSYmdS5wdXNoKHtkZXNjcmlwdGlvbjoiVGhlIHJlc3BvbnNlIGlzIG5vdCBhbGxvdyB0byBiZSBjYWNoZWQgb24gdGhlIGNsaWVudC4gQ29uc2lkZXIgc2V0dGluZyAnQ2FjaGUtQ29udHJvbCcgaGVhZGVycy4iLGRpc3BsYXlUeXBlOiJpY29uIixpZDoibm9DYWNoZSIsdGl0bGU6IlJlc3BvbnNlIG5vdCBjYWNoZWQiLHR5cGU6ImVycm9yIn0pLHMoZSxyKSYmdS5wdXNoKHtkZXNjcmlwdGlvbjoiVGhlIHJlc3BvbnNlIGlzIG5vdCBjb21wcmVzc2VkLiBDb25zaWRlciBlbmFibGluZyBIVFRQIGNvbXByZXNzaW9uIG9uIHlvdXIgc2VydmVyLiIsZGlzcGxheVR5cGU6Imljb24iLGlkOiJub0d6aXAiLHRpdGxlOiJubyBnemlwIix0eXBlOiJlcnJvciJ9KSwhZS5yZXNwb25zZS5jb250ZW50Lm1pbWVUeXBlJiZfLmlzSW5TdGF0dXNDb2RlUmFuZ2UoZS5yZXNwb25zZS5zdGF0dXMsMjAwLDI5OSkmJjIwNCE9PWUucmVzcG9uc2Uuc3RhdHVzJiZ1LnB1c2goe2Rlc2NyaXB0aW9uOiJSZXNwb25zZSBkb2Vzbid0IGNvbnRhaW4gYSAnQ29udGVudC1UeXBlJyBoZWFkZXIuIixkaXNwbGF5VHlwZToiaWNvbiIsaWQ6Indhcm5pbmciLHRpdGxlOiJObyBNSU1FIFR5cGUgZGVmaW5lZCIsdHlwZToid2FybmluZyJ9KSx1fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZD1lKCIuLi9oZWxwZXJzL2hhciIpLF89ZSgiLi4vaGVscGVycy9taXNjIikscD1lKCIuLi9oZWxwZXJzL3BhcnNlIik7bi5kb2N1bWVudElzU2VjdXJlPXUsbi5jb2xsZWN0SW5kaWNhdG9ycz1jfSx7Ii4uL2hlbHBlcnMvaGFyIjoyLCIuLi9oZWxwZXJzL21pc2MiOjQsIi4uL2hlbHBlcnMvcGFyc2UiOjV9XSwxMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIscyxkKXt2YXIgXz1bXSxtPXAuZ2V0S2V5cyhlLHQscixzKTtyZXR1cm4gXy5wdXNoKGkobS5nZW5lcmFsLGQpKSxfLnB1c2goYShtLnJlcXVlc3QsbS5yZXF1ZXN0SGVhZGVycykpLF8ucHVzaChsKG0ucmVzcG9uc2UsbS5yZXNwb25zZUhlYWRlcnMpKSxfLnB1c2gobygiVGltaW5ncyIsZi5tYWtlRGVmaW5pdGlvbkxpc3QobS50aW1pbmdzLCEwKSkpLF8ucHVzaCh1KGUpKSwiaW1hZ2UiPT09biYmXy5wdXNoKGMoZSkpLF8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSl9ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSIiKSx7Y29udGVudDp0LHRhYkNsYXNzOm4sdGl0bGU6ZX19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSIiKSx7cmVuZGVyQ29udGVudDp0LHRhYkNsYXNzOm4sdGl0bGU6ZX19ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWYubWFrZURlZmluaXRpb25MaXN0KGUpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbygiR2VuZXJhbCIsbik7dmFyIHI9IjxoMj5HZW5lcmFsPC9oMj5cbjxkbD4iK24rIjxkbD4iLHM9IiIsaT10LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iZXJyb3IiPT09ZS50eXBlfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLnRpdGxlLGUuZGVzY3JpcHRpb25dfSksYT10LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4id2FybmluZyI9PT1lLnR5cGV9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UudGl0bGUsZS5kZXNjcmlwdGlvbl19KSxsPXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJlcnJvciIhPT1lLnR5cGUmJiJ3YXJuaW5nIiE9PWUudHlwZX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZS50aXRsZSxlLmRlc2NyaXB0aW9uXX0pO3JldHVybiBpLmxlbmd0aD4wJiYocys9JzxoMiBjbGFzcz0ibm8tYm9kZXIiPicrZC5wbHVyYWxpemUoIkVycm9yIixpLmxlbmd0aCkrIjwvaDI+XG4gICAgPGRsPiIrZi5tYWtlRGVmaW5pdGlvbkxpc3QoaSkrIjwvZGw+IiksYS5sZW5ndGg+MCYmKHMrPSc8aDIgY2xhc3M9Im5vLWJvZGVyIj4nK2QucGx1cmFsaXplKCJXYXJuaW5nIixhLmxlbmd0aCkrIjwvaDI+XG4gICAgPGRsPiIrZi5tYWtlRGVmaW5pdGlvbkxpc3QoYSkrIjwvZGw+IiksbC5sZW5ndGg+MCYmKHMrPSc8aDIgY2xhc3M9Im5vLWJvZGVyIj5JbmZvPC9oMj5cbiAgICA8ZGw+JytmLm1ha2VEZWZpbml0aW9uTGlzdChsKSsiPC9kbD4iKSxvKCJHZW5lcmFsIixzK3IpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gbygiUmVxdWVzdCIsIjxkbD5cbiAgICAgICIrZi5tYWtlRGVmaW5pdGlvbkxpc3QoZSkrIlxuICAgIDwvZGw+XG4gICAgPGgyPkFsbCBSZXF1ZXN0IEhlYWRlcnM8L2gyPlxuICAgIDxkbD5cbiAgICAgICIrZi5tYWtlRGVmaW5pdGlvbkxpc3QodCkrIlxuICAgIDwvZGw+Iil9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBvKCJSZXNwb25zZSIsIjxkbD5cbiAgICAgICIrZi5tYWtlRGVmaW5pdGlvbkxpc3QoZSkrIlxuICAgIDwvZGw+XG4gICAgPGgyPkFsbCBSZXNwb25zZSBIZWFkZXJzPC9oMj5cbiAgICA8ZGw+XG4gICAgICAiK2YubWFrZURlZmluaXRpb25MaXN0KHQpKyJcbiAgICA8L2RsPiIpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHMoIlJhdyBEYXRhIixmdW5jdGlvbigpe3JldHVybiI8cHJlPjxjb2RlPiIrXy5lc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSkrIjwvY29kZT48L3ByZT4ifSwicmF3LWRhdGEiKX1mdW5jdGlvbiBjKGUpe3JldHVybiBzKCJQcmV2aWV3IixmdW5jdGlvbih0KXtyZXR1cm4nPGltZyBjbGFzcz0icHJldmlldyIgc3R5bGU9Im1heC1oZWlnaHQ6JysodC0xMDApKydweCJcbiBkYXRhLXNyYz0iJytfLnNhbml0aXplVXJsRm9yTGluayhlLnJlcXVlc3QudXJsKSsnIiAvPid9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGQ9ZSgiLi4vaGVscGVycy9taXNjIiksXz1lKCIuLi9oZWxwZXJzL3BhcnNlIikscD1lKCIuL2V4dHJhY3QtZGV0YWlscy1rZXlzIiksZj1lKCIuL2hlbHBlcnMiKTtuLm1ha2VUYWJzPXJ9LHsiLi4vaGVscGVycy9taXNjIjo0LCIuLi9oZWxwZXJzL3BhcnNlIjo1LCIuL2V4dHJhY3QtZGV0YWlscy1rZXlzIjoxMCwiLi9oZWxwZXJzIjoxNH1dLDEzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj12b2lkIDAhPT1lLmxvZz9lLmxvZzplO3JldHVybntwYWdlczpkKG4pLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiBzKG4scix0KX0pfX1mdW5jdGlvbiBvKGUsdCxuLHIpe249TWF0aC5yb3VuZChuKTt2YXIgbz1NYXRoLnJvdW5kKGEudG9JbnQoZS5fYWxsX2VuZCl8fG4rZS50aW1lKSxzPWMubWltZVRvUmVxdWVzdFR5cGUoZS5yZXNwb25zZS5jb250ZW50Lm1pbWVUeXBlKSxpPWwuY29sbGVjdEluZGljYXRvcnMoZSx0LHIscyksZD1oKGUsaSk7cmV0dXJuIGMuY3JlYXRlV2F0ZXJmYWxsRW50cnkoZS5yZXF1ZXN0LnVybCxuLG8sZihuLGUpLGQsdS5tYWtlVGFicyhlLHQrMSxzLG4sbyxpKSl9ZnVuY3Rpb24gcyhlLHQsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIHI9dm9pZCAwIT09ZS5sb2c/ZS5sb2c6ZSxzPWQociksaT1zW3RdO2lmKCFpLnN0YXJ0ZWREYXRlVGltZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEhBUiBkb2N1bWVudDogImxvZy5wYWdlc1snK3QrJ10uc3RhcnRlZERhdGVUaW1lIiBpcyBub3Qgc2V0Jyk7dmFyIGE9bmV3IERhdGUoaS5zdGFydGVkRGF0ZVRpbWUpLmdldFRpbWUoKSx1PWkucGFnZVRpbWluZ3MsYz0wLHA9bC5kb2N1bWVudElzU2VjdXJlKHIuZW50cmllcyksZj1yLmVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09ZS5yZXF1ZXN0LnVybC5pbmRleE9mKCJkYXRhOiIpJiYwIT09ZS5yZXF1ZXN0LnVybC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpJiYoMT09PXMubGVuZ3RoJiYiIj09PWkuaWR8fGUucGFnZXJlZj09PWkuaWQpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IERhdGUoZS5zdGFydGVkRGF0ZVRpbWUpLmdldFRpbWUoKS1hO3JldHVybiBjPU1hdGgubWF4KGMsbitlLnRpbWUpLG8oZSx0LG4scCl9KSxtPV8odSxpLG4pO3JldHVybiBtLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGFydFRpbWU+YyYmKGM9ZS5zdGFydFRpbWUpfSksbi5maXhlZExlbmd0aE1zJiYoYz1uLmZpeGVkTGVuZ3RoTXMpLGMrPTEwMCx7ZG9jSXNUTFM6cCxkdXJhdGlvbk1zOmMsZW50cmllczpmLG1hcmtzOm0sdGl0bGU6aS50aXRsZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWUoIi4uL2hlbHBlcnMvbWlzYyIpLGE9ZSgiLi4vaGVscGVycy9wYXJzZSIpLGw9ZSgiLi9oYXItaGV1cmlzdGljcyIpLHU9ZSgiLi9oYXItdGFicyIpLGM9ZSgiLi9oZWxwZXJzIik7bi50cmFuc2Zvcm1Eb2M9cjt2YXIgZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlcyYmZS5wYWdlcy5sZW5ndGg+MD9lLnBhZ2VzOlt7aWQ6IiIscGFnZVRpbWluZ3M6e30sc3RhcnRlZERhdGVUaW1lOmUuZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1EYXRlLnBhcnNlKHQuc3RhcnRlZERhdGVUaW1lKTtyZXR1cm4gRGF0ZS5wYXJzZShlKTxuP2U6dC5zdGFydGVkRGF0ZVRpbWV9LGUuZW50cmllc1swXS5zdGFydGVkRGF0ZVRpbWUpLHRpdGxlOiJuL2EifV19O24udHJhbnNmb3JtUGFnZT1zO3ZhciBfPWZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1lKXJldHVybltdO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc3RhcnRUaW1lLXQuc3RhcnRUaW1lfSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVbdF0mJmVbdF0+PTB9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6YS5lc2NhcGVIdG1sKHQucmVwbGFjZSgvXltfXS8sIiIpKSsiICgiK2kucm91bmROdW1iZXIoZVt0XSwwKSsiIG1zKSIsc3RhcnRUaW1lOmVbdF19fSk7cmV0dXJuIG4uc2hvd1VzZXJUaW1pbmc/cCh0LG4pLmNvbmNhdChvKS5zb3J0KHIpOm8uc29ydChyKX0scD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc2hvd1VzZXJUaW1pbmdFbmRNYXJrZXI/ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIl91c2VyVGltZS4iKX06ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmluZGV4T2YoIl91c2VyVGltZS4iKSYmMCE9PWUuaW5kZXhPZigiX3VzZXJUaW1lLmVuZFRpbWVyLSIpfSxyPW47aWYoQXJyYXkuaXNBcnJheSh0LnNob3dVc2VyVGltaW5nKSl7dmFyIG89dC5zaG93VXNlclRpbWluZztyPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpJiZvLmluZGV4T2YoZS5yZXBsYWNlKC9eX3VzZXJUaW1lXC4vLCIiKSk+PTB9fXZhciBzPS9eX3VzZXJUaW1lXC4oKD86c3RhcnRUaW1lci0pPyguKykpJC8saT1mdW5jdGlvbihuKXt2YXIgcixvLGksbDtyZXR1cm4gcj1zLmV4ZWMobil8fFssdm9pZCAwLHZvaWQgMF0saT1yWzFdLG89clsyXSxpPWEuZXNjYXBlSHRtbChpKSxvPWEuZXNjYXBlSHRtbChvKSxpIT09byYmZVsiX3VzZXJUaW1lLmVuZFRpbWVyLSIrb10/KGw9ZVsiX3VzZXJUaW1lLmVuZFRpbWVyLSIrb10tZVtuXSx7ZHVyYXRpb246bCxuYW1lOih0LnNob3dVc2VyVGltaW5nRW5kTWFya2VyP2k6bykrIiAoIitlW25dKyIgLSAiKyhlW25dK2wpKyIgbXMpIixzdGFydFRpbWU6ZVtuXX0pOntuYW1lOmksc3RhcnRUaW1lOmVbbl19fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHIpLm1hcChpKX0sZj1mdW5jdGlvbihlLHQpe3ZhciBuPXQudGltaW5ncztyZXR1cm5bImJsb2NrZWQiLCJkbnMiLCJjb25uZWN0Iiwic2VuZCIsIndhaXQiLCJyZWNlaXZlIl0ucmVkdWNlKGZ1bmN0aW9uKHIsbyl7dmFyIHM9bShvLHQscixlKTtpZihzLmVuZCYmcy5zdGFydD49cy5lbmQpcmV0dXJuIHI7aWYoImNvbm5lY3QiPT09byYmbi5zc2wmJi0xIT09bi5zc2wpe3ZhciBpPXBhcnNlSW50KCIiK3QuX3NzbF9zdGFydCwxMCl8fHMuc3RhcnQsYT1wYXJzZUludCgiIit0Ll9zc2xfZW5kLDEwKXx8cy5zdGFydCtuLnNzbCxsPXBhcnNlSW50KCIiK3QuX3NzbF9zdGFydCwxMCk/cy5zdGFydDphO3JldHVybiByLmNvbmNhdChbYy5jcmVhdGVXYXRlcmZhbGxFbnRyeVRpbWluZygic3NsIixNYXRoLnJvdW5kKGkpLE1hdGgucm91bmQoYSkpXSkuY29uY2F0KFtjLmNyZWF0ZVdhdGVyZmFsbEVudHJ5VGltaW5nKG8sTWF0aC5yb3VuZChsKSxNYXRoLnJvdW5kKHMuZW5kKSldKX1yZXR1cm4gci5jb25jYXQoW2MuY3JlYXRlV2F0ZXJmYWxsRW50cnlUaW1pbmcobyxNYXRoLnJvdW5kKHMuc3RhcnQpLE1hdGgucm91bmQocy5lbmQpKV0pfSxbXSl9LG09ZnVuY3Rpb24oZSx0LG4scil7dmFyIG87c3dpdGNoKGUpe2Nhc2Uid2FpdCI6bz0idHRmYiI7YnJlYWs7Y2FzZSJyZWNlaXZlIjpvPSJkb3dubG9hZCI7YnJlYWs7ZGVmYXVsdDpvPWV9dmFyIHM9cGFyc2VJbnQodFsiXyIrbysiX3N0YXJ0Il0sMTApLGk9cGFyc2VJbnQodFsiXyIrbysiX2VuZCJdLDEwKSxhPWlzTmFOKHMpP24ubGVuZ3RoPjA/bltuLmxlbmd0aC0xXS5lbmQ6cjpzLGw9aXNOYU4oaSk/YSt0LnRpbWluZ3NbZV06aTtyZXR1cm57ZW5kOk1hdGgucm91bmQobCksc3RhcnQ6TWF0aC5yb3VuZChhKX19LGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jLm1pbWVUb1JlcXVlc3RUeXBlKGUucmVzcG9uc2UuY29udGVudC5taW1lVHlwZSkscj1hLnRvSW50KGUucmVzcG9uc2Uuc3RhdHVzKXx8MDtyZXR1cm57aWNvbjpjLm1ha2VNaW1lVHlwZUljb24ocixlLnJlc3BvbnNlLnN0YXR1c1RleHQsbixlLnJlc3BvbnNlLnJlZGlyZWN0VVJMKSxpbmRpY2F0b3JzOnQscmVxdWVzdFR5cGU6bixyb3dDbGFzczpjLm1ha2VSb3dDc3NDbGFzc2VzKHIpLHN0YXR1c0NvZGU6cn19fSx7Ii4uL2hlbHBlcnMvbWlzYyI6NCwiLi4vaGVscGVycy9wYXJzZSI6NSwiLi9oYXItaGV1cmlzdGljcyI6MTEsIi4vaGFyLXRhYnMiOjEyLCIuL2hlbHBlcnMiOjE0fV0sMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gdD8nY2xhc3M9IicrKHUudG9Dc3NDbGFzcyhlKXx8Im5vLWNvbG91ciIpKyciJzoiIn07cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJcbiAgICAgIDxkdCAiK24oZVswXSkrIj4iK18oZVswXSkrIjwvZHQ+XG4gICAgICA8ZGQ+IitfKGVbMV0pKyI8L2RkPlxuICAgICJ9KS5qb2luKCIiKX1mdW5jdGlvbiBvKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIm90aGVyIjt2YXIgdD1lLnNwbGl0KCIvIiksbj10WzFdO3N3aXRjaCh2b2lkIDAhPT1uJiYobj1uLmluZGV4T2YoIjsiKT4tMT9uLnNwbGl0KCI7IilbMF06biksdFswXSl7Y2FzZSJpbWFnZSI6cmV0dXJuInN2Zyt4bWwiPT09bj8ic3ZnIjoiaW1hZ2UiO2Nhc2UiZm9udCI6cmV0dXJuImZvbnQiO2Nhc2UidmlkZW8iOnJldHVybiJ2aWRlbyI7Y2FzZSJhdWRpbyI6cmV0dXJuImF1ZGlvIn1zd2l0Y2gobil7Y2FzZSJ4bWwiOmNhc2UiaHRtbCI6cmV0dXJuImh0bWwiO2Nhc2UicGxhaW4iOnJldHVybiJwbGFpbiI7Y2FzZSJjc3MiOnJldHVybiJjc3MiO2Nhc2Uidm5kLm1zLWZvbnRvYmplY3QiOmNhc2UiZm9udC13b2ZmIjpjYXNlImZvbnQtd29mZjIiOmNhc2UieC1mb250LXRydWV0eXBlIjpjYXNlIngtZm9udC1vcGVudHlwZSI6Y2FzZSJ4LWZvbnQtd29mZiI6cmV0dXJuImZvbnQiO2Nhc2UiamF2YXNjcmlwdCI6Y2FzZSJ4LWphdmFzY3JpcHQiOmNhc2Uic2NyaXB0IjpjYXNlImpzb24iOnJldHVybiJqYXZhc2NyaXB0IjtjYXNlIngtc2hvY2t3YXZlLWZsYXNoIjpyZXR1cm4iZmxhc2giO2RlZmF1bHQ6cmV0dXJuIm90aGVyIn19ZnVuY3Rpb24gcyhlLHQsbixyLG8scyl7cmV0dXJuIHZvaWQgMD09PXImJihyPVtdKSx7ZW5kOm4scmVzcG9uc2VEZXRhaWxzOm8sc2VnbWVudHM6cixzdGFydDp0LHRhYnM6cyx0b3RhbDoibnVtYmVyIiE9dHlwZW9mIHR8fCJudW1iZXIiIT10eXBlb2Ygbj9OYU46bi10LHVybDplfX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm57ZW5kOm4sc3RhcnQ6dCx0b3RhbDoibnVtYmVyIiE9dHlwZW9mIHR8fCJudW1iZXIiIT10eXBlb2Ygbj9OYU46bi10LHR5cGU6Yy5zYW5pdGl6ZUFscGhhTnVtZXJpYyhlKX19ZnVuY3Rpb24gYShlKXt2YXIgdD1bInJvdy1pdGVtIl07cmV0dXJuIHUuaXNJblN0YXR1c0NvZGVSYW5nZShlLDUwMCw1OTkpP3QucHVzaCgic3RhdHVzNXh4Iik6dS5pc0luU3RhdHVzQ29kZVJhbmdlKGUsNDAwLDQ5OSk/dC5wdXNoKCJzdGF0dXM0eHgiKTozMDQhPT1lJiZ1LmlzSW5TdGF0dXNDb2RlUmFuZ2UoZSwzMDAsMzk5KSYmdC5wdXNoKCJzdGF0dXMzeHgiKSx0LmpvaW4oIiAiKX1mdW5jdGlvbiBsKGUsdCxuLHIpe2lmKHZvaWQgMD09PXImJihyPSIiKSxyKXt2YXIgbz1lbmNvZGVVUkkoci5zcGxpdCgiPyIpWzBdfHwiIik7cmV0dXJuIGQubWFrZUljb24oImVycjN4eCIsZSsiIHJlc3BvbnNlIHN0YXR1czogUmVkaXJlY3QgdG8gIitjLmVzY2FwZUh0bWwobykrIi4uLiIpfXJldHVybiB1LmlzSW5TdGF0dXNDb2RlUmFuZ2UoZSw0MDAsNDk5KT9kLm1ha2VJY29uKCJlcnI0eHgiLGUrIiByZXNwb25zZSBzdGF0dXM6ICIrYy5lc2NhcGVIdG1sKHQpKTp1LmlzSW5TdGF0dXNDb2RlUmFuZ2UoZSw1MDAsNTk5KT9kLm1ha2VJY29uKCJlcnI1eHgiLGUrIiByZXNwb25zZSBzdGF0dXM6ICIrYy5lc2NhcGVIdG1sKHQpKToyMDQ9PT1lP2QubWFrZUljb24oInBsYWluIiwiTm8gY29udGVudCIpOmQubWFrZUljb24oYy5zYW5pdGl6ZUFscGhhTnVtZXJpYyhuKSxjLmVzY2FwZUh0bWwobikpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1lKCIuLi9oZWxwZXJzL21pc2MiKSxjPWUoIi4uL2hlbHBlcnMvcGFyc2UiKSxkPWUoIi4uL3dhdGVyZmFsbC9yb3cvc3ZnLWluZGljYXRvcnMiKSxfPWZ1bmN0aW9uKGUpe3JldHVybiBjLmVzY2FwZUh0bWwoZSkucmVwbGFjZSgiJmx0YnIvJmd0IiwiPGJyLz4iKX07bi5tYWtlRGVmaW5pdGlvbkxpc3Q9cixuLm1pbWVUb1JlcXVlc3RUeXBlPW8sbi5jcmVhdGVXYXRlcmZhbGxFbnRyeT1zLG4uY3JlYXRlV2F0ZXJmYWxsRW50cnlUaW1pbmc9aSxuLm1ha2VSb3dDc3NDbGFzc2VzPWEsbi5tYWtlTWltZVR5cGVJY29uPWwsbi5mbGF0dGVuS3ZUdXBsZT1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PWUmJjAhPT1lLmxlbmd0aClyZXR1cm4gQXJyYXkuaXNBcnJheShlWzBdKT92b2lkIHQucHVzaC5hcHBseSh0LGUpOnZvaWQgdC5wdXNoKGUpfSksdH19LHsiLi4vaGVscGVycy9taXNjIjo0LCIuLi9oZWxwZXJzL3BhcnNlIjo1LCIuLi93YXRlcmZhbGwvcm93L3N2Zy1pbmRpY2F0b3JzIjoyMH1dLDE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuImJsb2NrLSIrZX1mdW5jdGlvbiBvKGUpe3JldHVybiJibG9jay0iK2V9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4ucmVxdWVzdFR5cGVUb0Nzc0NsYXNzPXIsbi50aW1pbmdUeXBlVG9Dc3NDbGFzcz1vfSx7fV0sMTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9by5tYWtlSHRtbEVsKCksaT1vLm1ha2VCb2R5RWwoKSxhPW4udGFicy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuJzxsaT48YnV0dG9uIGNsYXNzPSJ0YWItYnV0dG9uIj4nK2UudGl0bGUrIjwvYnV0dG9uPjwvbGk+In0pLmpvaW4oIlxuIiksbD1uLnRhYnMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPSJ0YWIiO2UudGFiQ2xhc3MmJihuKz0iICIrZS50YWJDbGFzcyk7dmFyIHI9IiI7aWYoZS5jb250ZW50KXI9ZS5jb250ZW50O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUucmVuZGVyQ29udGVudCl0aHJvdyBUeXBlRXJyb3IoIkludmFsaWQgRGV0YWlscyBUYWIiKTtyPWUucmVuZGVyQ29udGVudCh0KSxlLmNvbnRlbnQ9cn1yZXR1cm4nPGRpdiBjbGFzcz0idGFiICcrbisnIj4nK3IrIjwvZGl2PiJ9KS5qb2luKCJcbiIpO3JldHVybiBpLmlubmVySFRNTD0nXG4gICAgPGRpdiBjbGFzcz0id3JhcHBlciI+XG4gICAgICA8aGVhZGVyIGNsYXNzPSJ0eXBlLScrbi5yZXNwb25zZURldGFpbHMucmVxdWVzdFR5cGUrJyI+XG4gICAgICAgIDxoMz48c3Ryb25nPiMnK2UrJzwvc3Ryb25nPiA8YSBocmVmPSInK3Muc2FuaXRpemVVcmxGb3JMaW5rKG4udXJsKSsnIj5cbiAgICAgICAgICAnK3MuZXNjYXBlSHRtbChuLnVybCkrJ1xuICAgICAgICA8L2E+PC9oMz5cbiAgICAgICAgPG5hdiBjbGFzcz0idGFiLW5hdiI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgJythKyJcbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25hdj5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAgIitsKyJcbiAgICA8L2Rpdj5cbiAgICAiLHIuYXBwZW5kQ2hpbGQoaSkscn1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZSgiLi4vLi4vaGVscGVycy9kb20iKSxzPWUoIi4uLy4uL2hlbHBlcnMvcGFyc2UiKTtuLmNyZWF0ZURldGFpbHNCb2R5PXJ9LHsiLi4vLi4vaGVscGVycy9kb20iOjEsIi4uLy4uL2hlbHBlcnMvcGFyc2UiOjV9XSwxNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZSgiLi4vLi4vaGVscGVycy9kb20iKSxvPWUoIi4uLy4uL2hlbHBlcnMvbWlzYyIpLHM9ZSgiLi9zdmctZGV0YWlscy1vdmVybGF5IiksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5vcGVuT3ZlcmxheXM9W10sdGhpcy5yZWFsaWduUm93PWZ1bmN0aW9uKGUsdCl7ZS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiK3QrIikiKX19cmV0dXJuIGUucHJvdG90eXBlLmdldENvbWJpbmVkT3ZlcmxheUhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5PdmVybGF5cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsodC5oZWlnaHR8fDApfSwwKX0sZS5wcm90b3R5cGUub3Blbk92ZXJsYXk9ZnVuY3Rpb24oZSx0LG4scixvKXtpZighdGhpcy5vcGVuT3ZlcmxheXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRleD09PWV9KSl7dmFyIHM9dGhpcyxpPXtkZWZhdWx0WTp0LGVudHJ5OnIsaW5kZXg6ZSxvbkNsb3NlOmZ1bmN0aW9uKCl7cy5jbG9zZU92ZXJsYXkoZSxuLG8pfSxvcGVuVGFiSW5kZXg6MH07dGhpcy5vcGVuT3ZlcmxheXMucHVzaChpKSx0aGlzLm9wZW5PdmVybGF5cz10aGlzLm9wZW5PdmVybGF5cy5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaW5kZXg+dC5pbmRleD8xOi0xfSksdGhpcy5yZW5kZXJPdmVybGF5cyhuLG8pLHRoaXMuY29udGV4dC5wdWJTdWIucHVibGlzaFRvT3ZlcmxheUNoYW5nZXMoe2NoYW5nZWRJbmRleDplLGNvbWJpbmVkT3ZlcmxheUhlaWdodDpzLmdldENvbWJpbmVkT3ZlcmxheUhlaWdodCgpLHR5cGU6Im9wZW4ifSl9fSxlLnByb3RvdHlwZS50b2dnbGVPdmVybGF5PWZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhpcy5vcGVuT3ZlcmxheXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRleD09PWV9KT90aGlzLmNsb3NlT3ZlcmxheShlLG4sbyk6dGhpcy5vcGVuT3ZlcmxheShlLHQsbixyLG8pfSxlLnByb3RvdHlwZS5jbG9zZU92ZXJsYXk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dGhpcy5vcGVuT3ZlcmxheXMuc3BsaWNlKHRoaXMub3Blbk92ZXJsYXlzLnJlZHVjZShmdW5jdGlvbih0LG4scil7cmV0dXJuIG4uaW5kZXg9PT1lP3I6dH0sLTEpLDEpLHRoaXMucmVuZGVyT3ZlcmxheXModCxuKSx0aGlzLmNvbnRleHQucHViU3ViLnB1Ymxpc2hUb092ZXJsYXlDaGFuZ2VzKHtjaGFuZ2VkSW5kZXg6ZSxjb21iaW5lZE92ZXJsYXlIZWlnaHQ6ci5nZXRDb21iaW5lZE92ZXJsYXlIZWlnaHQoKSx0eXBlOiJjbG9zZWQifSl9LGUucHJvdG90eXBlLnJlbmRlck92ZXJsYXlzPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcyxhPTAsbD1mdW5jdGlvbihlLHQsbil7YSs9bixlLmFjdHVhbFk9dCxlLmhlaWdodD1ufSx1PWZ1bmN0aW9uKG4sbyl7dmFyIGk9by5kZWZhdWx0WSthLHU9cy5jcmVhdGVSb3dJbmZvT3ZlcmxheShvLGksdCksYz11LnF1ZXJ5U2VsZWN0b3IoImltZy5wcmV2aWV3Iik7YyYmIWMuc3JjJiZjLnNldEF0dHJpYnV0ZSgic3JjIiwoYy5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiZGF0YS1zcmMiKXx8e3ZhbHVlOiIifSkudmFsdWUpLHUucXVlcnlTZWxlY3RvcigiYSIpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUuZmlyc3RFbEtleXByZXNzKSxyLmdldExhc3RJdGVtT2ZOb2RlTGlzdCh1LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiIpKS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlLmxhc3RFbEtleXByZXNzKSxuLmFwcGVuZENoaWxkKHUpLGwobyxpLHUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KX0sYz1mdW5jdGlvbih0LG4pe3ZhciBzPW8uZmluZChpLm9wZW5PdmVybGF5cyxmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleD09PW59KSxjPXQubmV4dEVsZW1lbnRTaWJsaW5nLGQ9Yy5maXJzdEVsZW1lbnRDaGlsZDtpZihpLnJlYWxpZ25Sb3codCxhKSx2b2lkIDA9PT1zKXJldHVybiB2b2lkKGQmJm51bGwhPT1jJiYoYy5xdWVyeVNlbGVjdG9yKCJhIikucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZS5maXJzdEVsS2V5cHJlc3MpLHIuZ2V0TGFzdEl0ZW1PZk5vZGVMaXN0KGMucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uIikpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUubGFzdEVsS2V5cHJlc3MpLHIucmVtb3ZlQ2hpbGRyZW4oYykpKTtpZihkJiZ2b2lkIDAhPT1zLmFjdHVhbFkpe3ZhciBfPWQucXVlcnlTZWxlY3RvcigiLmluZm8tb3ZlcmxheS1iZyIpLHA9ZC5xdWVyeVNlbGVjdG9yKCJmb3JlaWduT2JqZWN0IiksZj1kLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvLW92ZXJsYXktY2xvc2UtYnRuIHJlY3QiKSxtPWQucXVlcnlTZWxlY3RvcigiLmluZm8tb3ZlcmxheS1jbG9zZS1idG4gdGV4dCIpO3JldHVybiBsKHMscy5kZWZhdWx0WSthLHMuaGVpZ2h0KSxfLnNldEF0dHJpYnV0ZSgieSIscy5hY3R1YWxZLnRvU3RyaW5nKCkpLHAuc2V0QXR0cmlidXRlKCJ5IixzLmFjdHVhbFkudG9TdHJpbmcoKSksbS5zZXRBdHRyaWJ1dGUoInkiLHMuYWN0dWFsWS50b1N0cmluZygpKSx2b2lkIGYuc2V0QXR0cmlidXRlKCJ5IixzLmFjdHVhbFkudG9TdHJpbmcoKSl9dSh0Lm5leHRFbGVtZW50U2libGluZyxzKX07bi5mb3JFYWNoKGMpfSxlLnNob3dGdWxsTmFtZT1mdW5jdGlvbihlKXtlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInJvdy1maXhlZCIpLml0ZW0oMCkuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKX0sZS5maXJzdEVsS2V5cHJlc3M9ZnVuY3Rpb24odCl7aWYoby5pc1RhYlVwKHQpKXt2YXIgbj1yLmdldFBhcmVudEJ5Q2xhc3NOYW1lKHQudGFyZ2V0LCJyb3ctb3ZlcmxheS1ob2xkZXIiKTtuJiZuLnByZXZpb3VzRWxlbWVudFNpYmxpbmcmJmUuc2hvd0Z1bGxOYW1lKG4ucHJldmlvdXNFbGVtZW50U2libGluZyl9fSxlLmxhc3RFbEtleXByZXNzPWZ1bmN0aW9uKHQpe2lmKG8uaXNUYWJEb3duKHQpKXt2YXIgbj1yLmdldFBhcmVudEJ5Q2xhc3NOYW1lKHQudGFyZ2V0LCJyb3ctb3ZlcmxheS1ob2xkZXIiKTtuJiZuLm5leHRFbGVtZW50U2libGluZyYmZS5zaG93RnVsbE5hbWUobi5uZXh0RWxlbWVudFNpYmxpbmcpfX0sZX0oKTtuLk92ZXJsYXlNYW5hZ2VyPWksbi5kZWZhdWx0PWl9LHsiLi4vLi4vaGVscGVycy9kb20iOjEsIi4uLy4uL2hlbHBlcnMvbWlzYyI6NCwiLi9zdmctZGV0YWlscy1vdmVybGF5IjoxOX1dLDE4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN1YnNjcmliZXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zdWJzY3JpYmVUb092ZXJsYXlDaGFuZ2VzPWZ1bmN0aW9uKGUpe3RoaXMuc3Vic2NyaWJlcnMucHVzaChlKX0sZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9TcGVjaWZpY092ZXJsYXlDaGFuZ2VzPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdWJzY3JpYmVycy5wdXNoKGZ1bmN0aW9uKG4pe24uY2hhbmdlZEluZGV4PT09ZSYmdChuKX0pfSxlLnByb3RvdHlwZS5wdWJsaXNoVG9PdmVybGF5Q2hhbmdlcz1mdW5jdGlvbihlKXt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KX0sZX0oKTtuLlB1YlN1Yj1yLG4uZGVmYXVsdD1yfSx7fV0sMTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1hLm5ld0EoImluZm8tb3ZlcmxheS1jbG9zZS1idG4iKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChhLm5ld1JlY3Qoe2hlaWdodDoyMyx3aWR0aDoyMyx4OiIxMDAlIix5OmV9KSksdC5hcHBlbmRDaGlsZChhLm5ld1RleHRFbCgi4pyVIix7ZHg6NyxkeToxNix4OiIxMDAlIix5OmV9KSksdC5hcHBlbmRDaGlsZChhLm5ld1RpdGxlKCJDbG9zZSBPdmVybGF5IikpLHR9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWEubmV3RygiaW5mby1vdmVybGF5LWhvbGRlciIpLHI9YS5uZXdSZWN0KHtoZWlnaHQ6dCxyeDoyLHJ5OjIsd2lkdGg6IjEwMCUiLHg6IjAiLHk6ZX0sImluZm8tb3ZlcmxheS1iZyIpO3JldHVybiBuLmFwcGVuZENoaWxkKHIpLG59ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHM9ZS5pbmRleCsxLHU9byh0LG4pLGM9YS5uZXdGb3JlaWduT2JqZWN0KHtoZWlnaHQ6bix3aWR0aDoiMTAwJSIseDoiMCIseTp0fSksZD1yKHQpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGUub25DbG9zZShlLmluZGV4KX0pO3ZhciBfPWwuY3JlYXRlRGV0YWlsc0JvZHkocyxuLGUuZW50cnkpLHA9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0YWItYnV0dG9uIil9LGY9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0YWIiKX0sbT1mdW5jdGlvbih0KXtlLm9wZW5UYWJJbmRleD10LGkuZm9yRWFjaE5vZGVMaXN0KGYoKSxmdW5jdGlvbihlLG4pe2Uuc3R5bGUuZGlzcGxheT10PT09bj8iYmxvY2siOiJub25lIixwKCkuaXRlbShuKS5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLHQ9PT1uKX0pfTtyZXR1cm4gaS5mb3JFYWNoTm9kZUxpc3QocCgpLGZ1bmN0aW9uKGUsdCl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbSh0KX0pfSksbShlLm9wZW5UYWJJbmRleCksYy5hcHBlbmRDaGlsZChfKSx1LmFwcGVuZENoaWxkKGMpLHUuYXBwZW5kQ2hpbGQoZCksdX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZSgiLi4vLi4vaGVscGVycy9kb20iKSxhPWUoIi4uLy4uL2hlbHBlcnMvc3ZnIiksbD1lKCIuL2h0bWwtZGV0YWlscy1ib2R5Iik7bi5jcmVhdGVSb3dJbmZvT3ZlcmxheT1zfSx7Ii4uLy4uL2hlbHBlcnMvZG9tIjoxLCIuLi8uLi9oZWxwZXJzL3N2ZyI6NiwiLi9odG1sLWRldGFpbHMtYm9keSI6MTZ9XSwyMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJue3R5cGU6ZSx0aXRsZTp0LHdpZHRoOjIwfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUucmVzcG9uc2VEZXRhaWxzLmluZGljYXRvcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJpY29uIj09PWUuZGlzcGxheVR5cGV9KTtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIG49W10sbz0iIixpPXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJlcnJvciI9PT1lLnR5cGV9KSxhPXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJ3YXJuaW5nIj09PWUudHlwZX0pLGw9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuImVycm9yIiE9PWUudHlwZSYmIndhcm5pbmciIT09ZS50eXBlfSk7cmV0dXJuIGkubGVuZ3RoPjAmJihuLnB1c2gocy5wbHVyYWxpemUoIkVycm9yIixpLmxlbmd0aCkrIjpcbiAiK2kubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRpdGxlfSkuam9pbigiXG4iKSksbz0iZXJyb3IiKSxhLmxlbmd0aD4wJiYobi5wdXNoKHMucGx1cmFsaXplKCJXYXJuaW5nIixhLmxlbmd0aCkrIjpcbiIrYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGl0bGV9KS5qb2luKCJcbiIpKSxvPW98fCJ3YXJuaW5nIiksbC5sZW5ndGg+MCYmKG4ucHVzaCgiSW5mbzpcbiIrbC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGl0bGV9KS5qb2luKCJcbiIpKSxvPW98fDEhPT1sLmxlbmd0aD9vfHwiaW5mbyI6bFswXS5pY29ufHxsWzBdLnR5cGUpLFtyKG8sbi5qb2luKCJcbiIpKV19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPWUoIi4uLy4uL2hlbHBlcnMvbWlzYyIpO24ubWFrZUljb249cixuLmdldEluZGljYXRvckljb25zPW99LHsiLi4vLi4vaGVscGVycy9taXNjIjo0fV0sMjE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWIubmV3RygiIikscj1lLmhlaWdodC0xLG89Zy5yb3VuZE51bWJlcihlLngvZS51bml0KSsiJSIscz1iLm5ld1JlY3Qoe2hlaWdodDpyLHdpZHRoOmcucm91bmROdW1iZXIoZS53aWR0aC9lLnVuaXQpKyIlIix4Om8seTplLnl9LHQpO2lmKG4uYXBwZW5kQ2hpbGQocyksZS5sYWJlbCl7dmFyIGksYTtzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7YXx8KGE9aC5nZXRQYXJlbnRCeUNsYXNzTmFtZShzLCJ3YXRlci1mYWxsLWNoYXJ0IikucXVlcnlTZWxlY3RvcigiLnRvb2x0aXAiKSksaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT1udWxsLHkub25Ib3ZlckluU2hvd1Rvb2x0aXAocyxlLGEpfSwxMDApfSkscy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2k/Y2xlYXJUaW1lb3V0KGkpOnkub25Ib3Zlck91dFNob3dUb29sdGlwKHMpfSl9cmV0dXJuIGUuc2hvd092ZXJsYXkmJmUuaGlkZU92ZXJsYXkmJihzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGUuc2hvd092ZXJsYXkoZSkpLHMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZS5oaWRlT3ZlcmxheShlKSkpLG59ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWlzTmFOKGUudG90YWwpPyIiOiI8YnIvPnRvdGFsOiAiK01hdGgucm91bmQoZS50b3RhbCkrIm1zIjtyZXR1cm57Y3NzQ2xhc3M6RS50aW1pbmdUeXBlVG9Dc3NDbGFzcyhlLnR5cGUpLGhlaWdodDp0LmhlaWdodC02LGhpZGVPdmVybGF5OnQuaGlkZU92ZXJsYXksbGFiZWw6IjxzdHJvbmc+IitlLnR5cGUrIjwvc3Ryb25nPjxici8+IitNYXRoLnJvdW5kKGUuc3RhcnQpKyJtcyAtICIrTWF0aC5yb3VuZChlLmVuZCkrIm1zIituLHNob3dPdmVybGF5OnQuc2hvd092ZXJsYXksdW5pdDp0LnVuaXQsd2lkdGg6ZS50b3RhbCx4OmUuc3RhcnR8fC4wMDEseTp0Lnl9fWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByPWUueStlLmhlaWdodC8xLjUsbz1NYXRoLnJvdW5kKHQpKyIgbXMiLHM9KGUueCtlLndpZHRoKS9lLnVuaXQrMSxpPWIubmV3VGV4dEVsKG8se3g6Zy5yb3VuZE51bWJlcihzKSsiJSIseTpyfSk7cmV0dXJuIHMrOCpvLmxlbmd0aC81MDAqMTAwPjEwMCYmKHM9bi9lLnVuaXQtMSxpPWIubmV3VGV4dEVsKG8se3g6Zy5yb3VuZE51bWJlcihzKSsiJSIseTpyfSx7dGV4dEFuY2hvcjoiZW5kIn0pKSxpfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS55K2UuaGVpZ2h0LzEuNSxuPWcucm91bmROdW1iZXIoZS54L2UudW5pdCkrIiUiLHI9Yi5uZXdHKCJodHRwMi1pbmlkaWNhdG9yLWhvbGRlciIpO3JldHVybiByLmFwcGVuZENoaWxkKGIubmV3VGV4dEVsKCLihpIiLHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNSkiLHg6bix5OnR9LHtmaWxsT3BhY2l0eToiMC42IiwidGV4dC1hbmNob3IiOiJlbmQifSkpLHIuYXBwZW5kQ2hpbGQoYi5uZXdUaXRsZSgiaHR0cDIgUHVzaCIpKSxyfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj10LnNlZ21lbnRzLGE9cihlLCJ0aW1lLWJsb2NrICIrZS5jc3NDbGFzcyksbD1iLm5ld0coInJlY3QtaG9sZGVyIiksdT1lLng7cmV0dXJuIGwuYXBwZW5kQ2hpbGQoYSksbiYmbi5sZW5ndGg+MCYmKG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZighaXNOYU4odC50b3RhbCkmJnQudG90YWw+MCYmIm51bWJlciI9PXR5cGVvZiB0LnN0YXJ0KXt2YXIgbj1vKHQsZSkscz1yKG4sInNlZ21lbnQgIituLmNzc0NsYXNzKTt1PU1hdGgubWluKHUsbi54KSxsLmFwcGVuZENoaWxkKHMpfX0pLGcuZmluZCh0LnJlc3BvbnNlRGV0YWlscy5pbmRpY2F0b3JzLGZ1bmN0aW9uKGUpe3JldHVybiJwdXNoIj09PWUuaWR9KSYmbC5hcHBlbmRDaGlsZChpKGUpKSxsLmFwcGVuZENoaWxkKHMoZSx0LnRvdGFsLHUpKSksbH1mdW5jdGlvbiBsKGUsdCxuLHIsbyl7cmV0dXJuIHQrPU1hdGgucm91bmQoci8yKSs1LGUrPW8sYi5uZXdUZXh0RWwobix7eDplLHk6dH0seyJ0ZXh0LWFuY2hvciI6ImVuZCJ9KX1mdW5jdGlvbiB1KGUsdCxuLHIpe3ZhciBvPWQoZSx0LG4scik7cmV0dXJuIG8uc3R5bGUuY2xpcFBhdGg9InVybCgjdGl0bGVDbGlwUGF0aCkiLG99ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgbz1kKGUsdCxuLHIpLHM9Yi5uZXdHKCJmdWxsLWxhYmVsIix7fSx7Y2xpcFBhdGg6InVybCgjdGl0bGVGdWxsQ2xpcFBhdGgpIn0pO3JldHVybiBzLmFwcGVuZENoaWxkKGIubmV3UmVjdCh7aGVpZ2h0OnItNCxyeDo1LHJ5OjUsd2lkdGg6NTAwLHg6ZS0zLHk6dCszfSwibGFiZWwtZnVsbC1iZyIpKSxzLmFwcGVuZENoaWxkKG8pLHN9ZnVuY3Rpb24gZChlLHQsbixyKXt2YXIgbz1nLnJlc291cmNlVXJsRm9ybWF0dGVyKG4sMTI1KTt0PXQrTWF0aC5yb3VuZChyLzIpKzU7dmFyIHM9Yi5uZXdUZXh0RWwobyx7eDplLHk6dH0pO3JldHVybiBzLmFwcGVuZENoaWxkKGIubmV3VGl0bGUobikpLHMuc3R5bGUub3BhY2l0eT1uLm1hdGNoKC9qcy5tYXAkLyk/IjAuNSI6IjEiLHN9ZnVuY3Rpb24gXyhlLHQsbixyKXt2YXIgbz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJyZWN0IilbMF0scz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0IilbMF07ci5zdHlsZS5kaXNwbGF5PSJub25lIixyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZS5hcHBlbmRDaGlsZCh0KSxlLmFwcGVuZENoaWxkKG4pLGUuYXBwZW5kQ2hpbGQocik7dmFyIGksYT0hMTtlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7ci5zdHlsZS5kaXNwbGF5PSJibG9jayIsbi5zdHlsZS5kaXNwbGF5PSJub25lIixyLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGU9cy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSsxMDtvLnNldEF0dHJpYnV0ZSgid2lkdGgiLGUudG9TdHJpbmcoKSksYT0hMCxpPXZvaWQgMH07YXx8KHY/aT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOmUoKSl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7bi5zdHlsZS5kaXNwbGF5PSJibG9jayIsci5zdHlsZS5kaXNwbGF5PSJub25lIixyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdiYmdm9pZCAwIT09aSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSl9KX1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj1uPyJldmVuIjoib2RkIjtyZXR1cm4gYi5uZXdSZWN0KHtoZWlnaHQ6dCx3aWR0aDoiMTAwJSIseDowLHk6ZX0scil9ZnVuY3Rpb24gZihlLHQpe3ZhciBuPWIubmV3Rygicm93IHJvdy1maXhlZCIpO3JldHVybiBuLmFwcGVuZENoaWxkKGIubmV3UmVjdCh7aGVpZ2h0OnQsd2lkdGg6IjEwMCUiLHg6IjAiLHk6ZX0sIiIse29wYWNpdHk6MH0pKSxufWZ1bmN0aW9uIG0oZSx0KXt2YXIgbj1iLm5ld0coInJvdyByb3ctZmxleCIpO3JldHVybiBuLmFwcGVuZENoaWxkKGIubmV3UmVjdCh7aGVpZ2h0OnQsd2lkdGg6IjEwMCUiLHg6IjAiLHk6ZX0sIiIse29wYWNpdHk6MH0pKSxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaD1lKCIuLi8uLi9oZWxwZXJzL2RvbSIpLGc9ZSgiLi4vLi4vaGVscGVycy9taXNjIiksYj1lKCIuLi8uLi9oZWxwZXJzL3N2ZyIpLEU9ZSgiLi4vLi4vdHJhbnNmb3JtZXJzL3N0eWxpbmctY29udmVydGVycyIpLHk9ZSgiLi9zdmctdG9vbHRpcCIpO24uY3JlYXRlUmVjdD1hLG4uY3JlYXRlUmVxdWVzdE51bWJlckxhYmVsPWwsbi5jcmVhdGVSZXF1ZXN0TGFiZWxDbGlwcGVkPXUsbi5jcmVhdGVSZXF1ZXN0TGFiZWxGdWxsPWM7dmFyIHY9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7bi5hcHBlbmRSZXF1ZXN0TGFiZWxzPV8sbi5jcmVhdGVCZ1N0cmlwZT1wLG4uY3JlYXRlTmFtZVJvd0JnPWYsbi5jcmVhdGVSb3dCZz1tfSx7Ii4uLy4uL2hlbHBlcnMvZG9tIjoxLCIuLi8uLi9oZWxwZXJzL21pc2MiOjQsIi4uLy4uL2hlbHBlcnMvc3ZnIjo2LCIuLi8uLi90cmFuc2Zvcm1lcnMvc3R5bGluZy1jb252ZXJ0ZXJzIjoxNSwiLi9zdmctdG9vbHRpcCI6MjN9XSwyMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsXyxwLGYpe3ZhciBtPV8ueSxoPV8uaGVpZ2h0LGc9ZS5vcHRpb25zLmxlZnRDb2x1bW5XaWR0aCxiPWkubmV3QShwLnJlc3BvbnNlRGV0YWlscy5yb3dDbGFzc3x8IiIpO2Iuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSxiLnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIpO3ZhciBFPWkubmV3U3ZnKCJsZWZ0LWZpeGVkLWhvbGRlciIse3dpZHRoOmcrIiUiLHg6IjAifSkseT1pLm5ld1N2ZygiZmxleC1zY2FsZS13YXRlcmZhbGwiLHt3aWR0aDoxMDAtZysiJSIseDpnKyIlIn0pLHY9bC5jcmVhdGVSZWN0KF8scCksVD1sLmNyZWF0ZU5hbWVSb3dCZyhtLGgpLEE9bC5jcmVhdGVSb3dCZyhtLGgpLEM9bC5jcmVhdGVCZ1N0cmlwZShtLGgsdCUyPT0wKSxPPWQrbjtpZihlLm9wdGlvbnMuc2hvd01pbWVUeXBlSWNvbil7dmFyIFM9cC5yZXNwb25zZURldGFpbHMuaWNvbjtPLT1TLndpZHRoLFQuYXBwZW5kQ2hpbGQob1tTLnR5cGVdKE8sbSszLFMudGl0bGUpKX1lLm9wdGlvbnMuc2hvd0luZGljYXRvckljb25zJiZhLmdldEluZGljYXRvckljb25zKHApLmZvckVhY2goZnVuY3Rpb24oZSl7Ty09ZS53aWR0aCxULmFwcGVuZENoaWxkKG9bZS50eXBlXShPLG0rMyxlLnRpdGxlKSl9KSxPPWQrbjt2YXIgUj0iIisodCsxKSxqPWwuY3JlYXRlUmVxdWVzdE51bWJlckxhYmVsKE8sbSxSLGgscik7Tys9cis0O3ZhciB4PWwuY3JlYXRlUmVxdWVzdExhYmVsQ2xpcHBlZChPLG0scy5yZXNvdXJjZVVybEZvcm1hdHRlcihwLnVybCw0MCksaCksTD1sLmNyZWF0ZVJlcXVlc3RMYWJlbEZ1bGwoTyxtLHAudXJsLGgpO0EuYXBwZW5kQ2hpbGQodiksbC5hcHBlbmRSZXF1ZXN0TGFiZWxzKFQsaix4LEwpLGUucHViU3ViLnN1YnNjcmliZVRvU3BlY2lmaWNPdmVybGF5Q2hhbmdlcyh0LGZ1bmN0aW9uKGUpe0Q9Im9wZW4iPT09ZS50eXBlfSksdD4wJiZlLnB1YlN1Yi5zdWJzY3JpYmVUb1NwZWNpZmljT3ZlcmxheUNoYW5nZXModC0xLGZ1bmN0aW9uKGUpe3c9Im9wZW4iPT09ZS50eXBlfSk7dmFyIEQsdztyZXR1cm4gYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGYoZSl9KSxiLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGUpe3ZhciBuPWU7cmV0dXJuIDMyPT09bi53aGljaHx8MTM9PT1uLndoaWNoPyhuLnByZXZlbnREZWZhdWx0KCksZihuKSk6cy5pc1RhYlVwKG4pJiYhdyYmdD4wP3ZvaWQoYi5wcmV2aW91c1NpYmxpbmcmJmIucHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZyYmYi5wcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nLmxhc3RDaGlsZCYmYi5wcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nLmxhc3RDaGlsZC5sYXN0Q2hpbGQmJmIucHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZy5sYXN0Q2hpbGQubGFzdENoaWxkLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSkpOnMuaXNUYWJEb3duKG4pJiYhRD92b2lkKGIubmV4dFNpYmxpbmcmJmIubmV4dFNpYmxpbmcubmV4dFNpYmxpbmcmJmIubmV4dFNpYmxpbmcubmV4dFNpYmxpbmcubGFzdENoaWxkJiZiLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nLmxhc3RDaGlsZC5sYXN0Q2hpbGQmJmIubmV4dFNpYmxpbmcubmV4dFNpYmxpbmcubGFzdENoaWxkLmxhc3RDaGlsZC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJtb3VzZWVudGVyIikpKTp2b2lkIDB9KSxiLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixmdW5jdGlvbigpe1QuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VsZWF2ZSIpKX0pLHkuYXBwZW5kQ2hpbGQoQSksRS5hcHBlbmRDaGlsZCh1LmNsb25lTm9kZSghMCkpLEUuYXBwZW5kQ2hpbGQoVCksYi5hcHBlbmRDaGlsZChjLmNsb25lTm9kZSghMCkpLGIuYXBwZW5kQ2hpbGQoQyksYi5hcHBlbmRDaGlsZCh5KSxiLmFwcGVuZENoaWxkKEUpLGJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWUoIi4uLy4uL2hlbHBlcnMvaWNvbnMiKSxzPWUoIi4uLy4uL2hlbHBlcnMvbWlzYyIpLGk9ZSgiLi4vLi4vaGVscGVycy9zdmciKSxhPWUoIi4vc3ZnLWluZGljYXRvcnMiKSxsPWUoIi4vc3ZnLXJvdy1zdWJjb21wb25lbnRzIiksdT1pLm5ld0NsaXBQYXRoKCJ0aXRsZUNsaXBQYXRoIik7dS5hcHBlbmRDaGlsZChpLm5ld1JlY3Qoe2hlaWdodDoiMTAwJSIsd2lkdGg6IjEwMCUifSkpO3ZhciBjPWkubmV3Q2xpcFBhdGgoInRpdGxlRnVsbENsaXBQYXRoIik7Yy5hcHBlbmRDaGlsZChpLm5ld1JlY3Qoe2hlaWdodDoiMTAwJSIsd2lkdGg6IjEwMCUifSkpO3ZhciBkPTM7bi5jcmVhdGVSb3c9cn0seyIuLi8uLi9oZWxwZXJzL2ljb25zIjozLCIuLi8uLi9oZWxwZXJzL21pc2MiOjQsIi4uLy4uL2hlbHBlcnMvc3ZnIjo2LCIuL3N2Zy1pbmRpY2F0b3JzIjoyMCwiLi9zdmctcm93LXN1YmNvbXBvbmVudHMiOjIxfV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWUoIi4uLy4uL2hlbHBlcnMvZG9tIiksbz1lKCIuLi8uLi9oZWxwZXJzL3N2ZyIpLHM9Lyg/OnRyYW5zbGF0ZSlcKC4rWywgXSsoLispXCkvLGk9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9IiIpLGU9bnVsbD09PWU/IiI6ZTt2YXIgdD1zLmV4ZWMoZSk7cmV0dXJuIHQmJnQubGVuZ3RoPj0yP3BhcnNlSW50KHRbMV0sMTApOjB9O24ub25Ib3ZlckluU2hvd1Rvb2x0aXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4ucXVlcnlTZWxlY3RvcigiLnRvb2x0aXAtcGF5bG9hZCIpLHM9ci5nZXRQYXJlbnRCeUNsYXNzTmFtZShlLCJyb3ctaXRlbSIpLGE9aShzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikpLGw9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoInkiKXx8IiIsMTApLHU9ZS5nZXRBdHRyaWJ1dGUoIngiKXx8IiIsYz1wYXJzZUZsb2F0KHUpLGQ9NTAsXz1lLndpZHRoLmJhc2VWYWwudmFsdWV8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgscD1fLyh0LndpZHRoL3QudW5pdCksZj10LndpZHRoL3QudW5pdC9fLG09Yz41MCYmKDk1LWMpKnA8MjAwO28uaW5uZXJIVE1MPXQubGFiZWx8fCIiLHIuYWRkQ2xhc3Mobywibm8tYW5pbSIpLG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG8uc3R5bGUub3BhY2l0eT0iMC4wMSI7dmFyIGg9by5jbGllbnRIZWlnaHQrNTtpZihkPWwrYS1oPjA/YS1oOmErdC5oZWlnaHQrMTAsbSl7dmFyIGc9Yy0oby5jbGllbnRXaWR0aCs1KSpmLGI9cGFyc2VJbnQobi5xdWVyeVNlbGVjdG9yKCJib2R5Iikuc3R5bGUubGVmdHx8IiIsMTApO2IqPTEvKC4wMSooMTAwLWIpKSxvLnN0eWxlLmxlZnQ9Zz4tYj9nKyIlIjotYisiJSJ9ZWxzZSBvLnN0eWxlLmxlZnQ9dTtuLnNldEF0dHJpYnV0ZSgieSIsIiIrKGwrZCkpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLGgudG9TdHJpbmcoKSksci5yZW1vdmVDbGFzcyhvLCJuby1hbmltIiksby5zdHlsZS5vcGFjaXR5PSIxIjt2YXIgRT1vLmNsaWVudEhlaWdodCs1LWg7MCE9PUUmJihuLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwoaCtFKS50b1N0cmluZygpKSxuLnNldEF0dHJpYnV0ZSgieSIsIiIrKGwrZC1FKSkpfSxuLm9uSG92ZXJPdXRTaG93VG9vbHRpcD1mdW5jdGlvbihlKXt2YXIgdD1yLmdldFBhcmVudEJ5Q2xhc3NOYW1lKGUsIndhdGVyLWZhbGwtY2hhcnQiKSxuPXQucXVlcnlTZWxlY3RvcigiLnRvb2x0aXAiKSxvPW4ucXVlcnlTZWxlY3RvcigiLnRvb2x0aXAtcGF5bG9hZCIpO24uc3R5bGUuZGlzcGxheT0ibm9uZSIsbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjI1MCIpLG8uc3R5bGUub3BhY2l0eT0iMCJ9LG4ubWFrZVRvb2x0aXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZWZ0Q29sdW1uV2lkdGgsbj1vLm5ld1N2ZygidG9vbHRpcC1ob2xkZXIiLHt3aWR0aDoiMTAwJSIseDoiMCIseToiMCJ9KSxzPW8ubmV3Rm9yZWlnbk9iamVjdCh7d2lkdGg6IjEwMCUiLHg6IjAiLHk6dCsiJSJ9LCJ0b29sdGlwIix7ZGlzcGxheToibm9uZSJ9KSxpPXIubWFrZUh0bWxFbCgpLGE9ci5tYWtlQm9keUVsKHtsZWZ0OnQrIiUiLHdpZHRoOjEwMC10KyIlIn0sJzxkaXYgY2xhc3M9InRvb2x0aXAtcGF5bG9hZCIgc3R5bGU9Im1heC13aWR0aDogMjAwcHg7IG9wYWNpdHk6IDA7Ij48L2Rpdj4nKTtyZXR1cm4gaS5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKGkpLG4uYXBwZW5kQ2hpbGQocyksbn19LHsiLi4vLi4vaGVscGVycy9kb20iOjEsIi4uLy4uL2hlbHBlcnMvc3ZnIjo2fV0sMjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57ZW5kbGluZTppLm5ld0xpbmUoe3gxOiIwIix4MjoiMCIseTE6IjAiLHkyOmV9LCJsaW5lLWVuZCIpLHN0YXJ0bGluZTppLm5ld0xpbmUoe3gxOiIwIix4MjoiMCIseTE6IjAiLHkyOmV9LCJsaW5lLXN0YXJ0Iil9fWZ1bmN0aW9uIG8oZSl7cmV0dXJue29uTW91c2VFbnRlclBhcnRpYWw6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC50YXJnZXQ7cy5hZGRDbGFzcyhuLCJhY3RpdmUiKTt2YXIgcj1uLnguYmFzZVZhbC52YWx1ZUluU3BlY2lmaWVkVW5pdHMrbi53aWR0aC5iYXNlVmFsLnZhbHVlSW5TcGVjaWZpZWRVbml0cysiJSIsbz1uLnguYmFzZVZhbC52YWx1ZUluU3BlY2lmaWVkVW5pdHMrIiUiO2UuZW5kbGluZS54MS5iYXNlVmFsLnZhbHVlQXNTdHJpbmc9cixlLmVuZGxpbmUueDIuYmFzZVZhbC52YWx1ZUFzU3RyaW5nPXIsZS5zdGFydGxpbmUueDEuYmFzZVZhbC52YWx1ZUFzU3RyaW5nPW8sZS5zdGFydGxpbmUueDIuYmFzZVZhbC52YWx1ZUFzU3RyaW5nPW8scy5hZGRDbGFzcyhlLmVuZGxpbmUsImFjdGl2ZSIpLHMuYWRkQ2xhc3MoZS5zdGFydGxpbmUsImFjdGl2ZSIpfX0sb25Nb3VzZUxlYXZlUGFydGlhbDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldDtzLnJlbW92ZUNsYXNzKG4sImFjdGl2ZSIpLHMucmVtb3ZlQ2xhc3MoZS5lbmRsaW5lLCJhY3RpdmUiKSxzLnJlbW92ZUNsYXNzKGUuc3RhcnRsaW5lLCJhY3RpdmUiKX19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZSgiLi4vLi4vaGVscGVycy9kb20iKSxpPWUoIi4uLy4uL2hlbHBlcnMvc3ZnIik7bi5jcmVhdGVBbGlnbm1lbnRMaW5lcz1yLG4ubWFrZUhvdmVyRXZ0TGlzdGVuZXJzPW99LHsiLi4vLi4vaGVscGVycy9kb20iOjEsIi4uLy4uL2hlbHBlcnMvc3ZnIjo2fV0sMjU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1zLm5ld0coInRpbWUtc2NhbGUgZnVsbC13aWR0aCIpLHI9MjAwKk1hdGguY2VpbCh0LzFlNCksbz0xZTMvcixhPXQvMWUzLGw9dC9yLHU9MDt1PD1sO3UrKyl7aShlLG4sYSx1L28sdSVvPDFlLTkpfXJldHVybiBufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1lKCIuLi8uLi9oZWxwZXJzL21pc2MiKSxzPWUoIi4uLy4uL2hlbHBlcnMvc3ZnIiksaT1mdW5jdGlvbihlLHQsbixyLGkpe3ZvaWQgMD09PWkmJihpPSExKTt2YXIgYSxsLHU9ZS5kaWFncmFtSGVpZ2h0LGM9MTAwL24sZD0ic3ViLXNlY29uZC1saW5lIjtpZihpKXt2YXIgXz1yPm4tLjI7ZD0ic2Vjb25kLWxpbmUiLGw9by5yb3VuZE51bWJlcihjKnIpKy41KyIlIjt2YXIgcD17fTtfJiYobD1vLnJvdW5kTnVtYmVyKGMqciktLjUrIiUiLHBbInRleHQtYW5jaG9yIl09ImVuZCIpLGE9cy5uZXdUZXh0RWwocisicyIse3g6bCx5OnV9LHApfWw9by5yb3VuZE51bWJlcihjKnIpKyIlIjt2YXIgZj1zLm5ld0xpbmUoe3gxOmwseDI6bCx5MTowLHkyOnV9LGQpO2UucHViU3ViLnN1YnNjcmliZVRvT3ZlcmxheUNoYW5nZXMoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21iaW5lZE92ZXJsYXlIZWlnaHQsbj0odSt0KS91O2Yuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJzY2FsZSgxLCAiK24rIikiKSxpJiZhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrdCsiKSIpfSksdC5hcHBlbmRDaGlsZChmKSxpJiZ0LmFwcGVuZENoaWxkKGEpfTtuLmNyZWF0ZVRpbWVTY2FsZT1yfSx7Ii4uLy4uL2hlbHBlcnMvbWlzYyI6NCwiLi4vLi4vaGVscGVycy9zdmciOjZ9XSwyNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5kaWFncmFtSGVpZ2h0LHI9YS5uZXdHKCJtYXJrZXItaG9sZGVyIix7dHJhbnNmb3JtOiJzY2FsZSgxLCAxKSJ9KTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGwsdSl7dmFyIGM9aS5yb3VuZE51bWJlcihsLnN0YXJ0VGltZS9lLnVuaXQpLGQ9YS5uZXdHKCJtYXJrLWhvbGRlciB0eXBlLSIrbC5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFswLTldK1sgXT9tcyl8XFcvZywiIikpLF89YS5uZXdHKCJsaW5lLWhvbGRlciIpLHA9YS5uZXdHKCJsaW5lLWxhYmVsLWhvbGRlciIpLGY9YS5uZXdUZXh0RWwobC5uYW1lLHt4OmMrIiUiLHk6bisyNX0pO2Yuc2V0QXR0cmlidXRlKCJ3cml0aW5nLW1vZGUiLCJ0YiIpO3ZhciBtO2wueD1jO3ZhciBoPWEubmV3TGluZSh7eDE6YysiJSIseDI6YysiJSIseTE6MCx5MjpufSksZz10W3UtMV07ZyYmdm9pZCAwIT09Zy54JiZsLngtZy54PDIuNSYmKGYuc2V0QXR0cmlidXRlKCJ4IixnLngrMi41KyIlIiksbC54PWcueCsyLjUpO3ZhciBiPWEubmV3TGluZSh7eDE6YysiJSIseDI6bC54KyIlIix5MTpuLHkyOm4rMjN9KTtfLmFwcGVuZENoaWxkKGgpLF8uYXBwZW5kQ2hpbGQoYiksbC5kdXJhdGlvbiYmKG09byhlLGwpLF8uYXBwZW5kQ2hpbGQobSkpLGUucHViU3ViLnN1YnNjcmliZVRvT3ZlcmxheUNoYW5nZXMoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21iaW5lZE92ZXJsYXlIZWlnaHQscj0obit0KS9uO2guc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJzY2FsZSgxLCAiK3IrIikiKSxwLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrdCsiKSIpLGIuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIit0KyIpIiksbSYmbS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiK3QrIikiKX0pO3ZhciBFPSExLHk9ITEsdj1mdW5jdGlvbigpe0V8fChkLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZCksRT0hMCwiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIHMuYWRkQ2xhc3MoXywiYWN0aXZlIil9KTpzLmFkZENsYXNzKF8sImFjdGl2ZSIpKX0sVD1mdW5jdGlvbigpe0U9ITEseXx8cy5yZW1vdmVDbGFzcyhfLCJhY3RpdmUiKX0sQT1mdW5jdGlvbigpe3k/KEU9ITEscy5yZW1vdmVDbGFzcyhfLCJhY3RpdmUiKSk6RT9FPSExOnMuYWRkQ2xhc3MoXywiYWN0aXZlIikseT0heX07Zi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix2KSxmLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLFQpLGYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEEpLHAuYXBwZW5kQ2hpbGQoZiksZC5hcHBlbmRDaGlsZChhLm5ld1RpdGxlKGwubmFtZSkpLGQuYXBwZW5kQ2hpbGQoXyksZC5hcHBlbmRDaGlsZChwKSxyLmFwcGVuZENoaWxkKGQpfSkscn1mdW5jdGlvbiBvKGUsdCl7dmFyIG49YS5uZXdHKCJsaW5lLW1hcmstaG9sZGVyIGxpbmUtbWFya2VyLSIraS50b0Nzc0NsYXNzKHQubmFtZSkpO3JldHVybiBuLmFwcGVuZENoaWxkKGEubmV3VGl0bGUodC5uYW1lLnJlcGxhY2UoL15zdGFydFRpbWVyLS8sIiIpKSksbi5hcHBlbmRDaGlsZChhLm5ld1JlY3Qoe2hlaWdodDplLmRpYWdyYW1IZWlnaHQsd2lkdGg6KHQuZHVyYXRpb258fDEpL2UudW5pdCsiJSIseDoodC5zdGFydFRpbWV8fC4wMDEpL2UudW5pdCsiJSIseTowfSwibGluZS1tYXJrIikpLG59T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPWUoIi4uLy4uL2hlbHBlcnMvZG9tIiksaT1lKCIuLi8uLi9oZWxwZXJzL21pc2MiKSxhPWUoIi4uLy4uL2hlbHBlcnMvc3ZnIik7bi5jcmVhdGVNYXJrcz1yLG4uY3JlYXRlTGluZVJlY3Q9b30seyIuLi8uLi9oZWxwZXJzL2RvbSI6MSwiLi4vLi4vaGVscGVycy9taXNjIjo0LCIuLi8uLi9oZWxwZXJzL3N2ZyI6Nn1dLDI3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKSsxLG49IiIscj0wO3I8dDtyKyspbis9IjAiO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXt4OjAseTowfTtyZXR1cm4gTWF0aC5tYXgoZSxsLmdldE5vZGVUZXh0V2lkdGgobC5uZXdUZXh0RWwodC5uYW1lLG4pLCEwKSl9LDApO3JldHVybiBNYXRoLmZsb29yKHQrbiszNSl9ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9ZS5kdXJhdGlvbk1zLzEwMCxvPShuLmxlbmd0aCsxKSp0LnJvd0hlaWdodCxzPXtkaWFncmFtSGVpZ2h0Om8sb3B0aW9uczp0LHB1YlN1YjpuZXcgZC5QdWJTdWIsdW5pdDpyfTtyZXR1cm4gYSh7fSxzLHtvdmVybGF5TWFuYWdlcjpuZXcgYy5kZWZhdWx0KHMpfSl9ZnVuY3Rpb24gaShlLHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4geStFLm92ZXJsYXlNYW5hZ2VyLmdldENvbWJpbmVkT3ZlcmxheUhlaWdodCgpfWZ1bmN0aW9uIGkoZSxuKXt2YXIgcj1lLnRvdGFsfHwxLG89dC5yb3dIZWlnaHQqbixzPWUuc3RhcnR8fC4wMDEsaT17Y3NzQ2xhc3M6dS5yZXF1ZXN0VHlwZVRvQ3NzQ2xhc3MoZS5yZXNwb25zZURldGFpbHMucmVxdWVzdFR5cGUpLGhlaWdodDp0LnJvd0hlaWdodCxoaWRlT3ZlcmxheTp0LnNob3dBbGlnbm1lbnRIZWxwZXJzP2Mub25Nb3VzZUxlYXZlUGFydGlhbDp2b2lkIDAsbGFiZWw6IjxzdHJvbmc+IitlLnVybCsiPC9zdHJvbmc+PGJyLz4iK01hdGgucm91bmQoZS5zdGFydCkrIm1zIC0gIitNYXRoLnJvdW5kKGUuZW5kKSsibXM8YnIvPnRvdGFsOiAiKyhpc05hTihlLnRvdGFsKT8ibi9hICI6TWF0aC5yb3VuZChlLnRvdGFsKSkrIm1zIixzaG93T3ZlcmxheTp0LnNob3dBbGlnbm1lbnRIZWxwZXJzP2Mub25Nb3VzZUVudGVyUGFydGlhbDp2b2lkIDAsdW5pdDpFLnVuaXQsd2lkdGg6cix4OnMseTpvfSxhPWZ1bmN0aW9uKCl7RS5vdmVybGF5TWFuYWdlci50b2dnbGVPdmVybGF5KG4sbyt0LnJvd0hlaWdodCw0NTAsZSxMKX0sZD1fLmNyZWF0ZVJvdyhFLG4sUix4LGksZSxhKTtMLnB1c2goZCksYi5hcHBlbmRDaGlsZChkKSxiLmFwcGVuZENoaWxkKGwubmV3Rygicm93LW92ZXJsYXktaG9sZGVyIikpfXZhciBhLGMsZD1lLmVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZS5zdGFydCYmIm51bWJlciI9PXR5cGVvZiBlLnRvdGFsfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybihlLnN0YXJ0fHwwKS0odC5zdGFydHx8MCl9KSxnPWwubmV3Rygib3ZlcmxheXMiKSxiPWwubmV3Rygicm93cy1ob2xkZXIiKSxFPXMoZSx0LGQpLHk9byhlLm1hcmtzLEUuZGlhZ3JhbUhlaWdodCksdj1sLm5ld1N2Zygid2F0ZXItZmFsbC1jaGFydCIse2hlaWdodDp5fSksVD1sLm5ld1N2Zygic2NhbGUtYW5kLW1hcmtzLWhvbGRlciIse3dpZHRoOjEwMC10LmxlZnRDb2x1bW5XaWR0aCsiJSIseDp0LmxlZnRDb2x1bW5XaWR0aCsiJSJ9KTtpZih0LnNob3dBbGlnbm1lbnRIZWxwZXJzKXthPWwubmV3RygiaG92ZXItb3ZlcmxheXMiKTt2YXIgQT1mLmNyZWF0ZUFsaWdubWVudExpbmVzKEUuZGlhZ3JhbUhlaWdodCk7YS5hcHBlbmRDaGlsZChBLnN0YXJ0bGluZSksYS5hcHBlbmRDaGlsZChBLmVuZGxpbmUpLGM9Zi5tYWtlSG92ZXJFdnRMaXN0ZW5lcnMoQSl9VC5hcHBlbmRDaGlsZChtLmNyZWF0ZVRpbWVTY2FsZShFLGUuZHVyYXRpb25NcykpLFQuYXBwZW5kQ2hpbGQoaC5jcmVhdGVNYXJrcyhFLGUubWFya3MpKTt2YXIgQz1kWzBdLnJlc3BvbnNlRGV0YWlscy5pY29uLndpZHRoLE89MDtpZih0LnNob3dNaW1lVHlwZUljb24mJihPKz0xKSx0LnNob3dJbmRpY2F0b3JJY29ucyl7dmFyIFM9ZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzcG9uc2VEZXRhaWxzLmluZGljYXRvcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJpY29uIj09PWUuZGlzcGxheVR5cGV9KS5sZW5ndGg+MD8xOjB9KTtPKz1NYXRoLm1heC5hcHBseShudWxsLFMpfXZhciBSPU8qQyxqPXIoZC5sZW5ndGgpLHg9bC5nZXROb2RlVGV4dFdpZHRoKGwubmV3VGV4dEVsKCIiK2opLCEwKSxMPVtdO3JldHVybiBFLnB1YlN1Yi5zdWJzY3JpYmVUb092ZXJsYXlDaGFuZ2VzKGZ1bmN0aW9uKCl7dmFyIGU9bigpO3YuY2xhc3NMaXN0LnRvZ2dsZSgiY2xvc2luZyIsZTx2LmNsaWVudEhlaWdodCksdi5zdHlsZS5oZWlnaHQ9ZSsicHgifSksZC5mb3JFYWNoKGkpLHQuc2hvd0FsaWdubWVudEhlbHBlcnMmJnZvaWQgMCE9PWEmJlQuYXBwZW5kQ2hpbGQoYSksdi5hcHBlbmRDaGlsZChUKSx2LmFwcGVuZENoaWxkKGIpLHYuYXBwZW5kQ2hpbGQoZyksdi5hcHBlbmRDaGlsZChwLm1ha2VUb29sdGlwKHQpKSx2fXZhciBhPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dD1hcmd1bWVudHNbbl07Zm9yKHZhciBvIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pfXJldHVybiBlfSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPWUoIi4uL2hlbHBlcnMvc3ZnIiksdT1lKCIuLi90cmFuc2Zvcm1lcnMvc3R5bGluZy1jb252ZXJ0ZXJzIiksYz1lKCIuL2RldGFpbHMtb3ZlcmxheS9vdmVybGF5LW1hbmFnZXIiKSxkPWUoIi4vZGV0YWlscy1vdmVybGF5L3B1Yi1zdWIiKSxfPWUoIi4vcm93L3N2Zy1yb3ciKSxwPWUoIi4vcm93L3N2Zy10b29sdGlwIiksZj1lKCIuL3N1Yi1jb21wb25lbnRzL3N2Zy1hbGlnbm1lbnQtaGVscGVyIiksbT1lKCIuL3N1Yi1jb21wb25lbnRzL3N2Zy1nZW5lcmFsLWNvbXBvbmVudHMiKSxoPWUoIi4vc3ViLWNvbXBvbmVudHMvc3ZnLW1hcmtzIik7bi5jcmVhdGVXYXRlcmZhbGxTdmc9aX0seyIuLi9oZWxwZXJzL3N2ZyI6NiwiLi4vdHJhbnNmb3JtZXJzL3N0eWxpbmctY29udmVydGVycyI6MTUsIi4vZGV0YWlscy1vdmVybGF5L292ZXJsYXktbWFuYWdlciI6MTcsIi4vZGV0YWlscy1vdmVybGF5L3B1Yi1zdWIiOjE4LCIuL3Jvdy9zdmctcm93IjoyMiwiLi9yb3cvc3ZnLXRvb2x0aXAiOjIzLCIuL3N1Yi1jb21wb25lbnRzL3N2Zy1hbGlnbm1lbnQtaGVscGVyIjoyNCwiLi9zdWItY29tcG9uZW50cy9zdmctZ2VuZXJhbC1jb21wb25lbnRzIjoyNSwiLi9zdWItY29tcG9uZW50cy9zdmctbWFya3MiOjI2fV19LHt9LFs4XSkoOCl9KX0sIi4vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciBuLHIsbyxzLGksYTsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OnZvaWQgMCE9PXQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG4oKS1pKS8xZTZ9LHI9dC5ocnRpbWUsbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXIoKSwxZTkqZVswXStlWzFdfSxzPW4oKSxhPTFlOSp0LnVwdGltZSgpLGk9cy1hKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktb30sbz1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktb30sbz0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9wb3BwZXIuanMvZGlzdC9lc20vcG9wcGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dD0hMSxlKCl9KSl9fWZ1bmN0aW9uIHIoZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3Q9ITEsZSgpfSxfZSkpfX1mdW5jdGlvbiBvKGUpe3ZhciB0PXt9O3JldHVybiBlJiYiW29iamVjdCBGdW5jdGlvbl0iPT09dC50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIHMoZSx0KXtpZigxIT09ZS5ub2RlVHlwZSlyZXR1cm5bXTt2YXIgbj1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcscj1uLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gdD9yW3RdOnJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4iSFRNTCI9PT1lLm5vZGVOYW1lP2U6ZS5wYXJlbnROb2RlfHxlLmhvc3R9ZnVuY3Rpb24gYShlKXtpZighZSlyZXR1cm4gZG9jdW1lbnQuYm9keTtzd2l0Y2goZS5ub2RlTmFtZSl7Y2FzZSJIVE1MIjpjYXNlIkJPRFkiOnJldHVybiBlLm93bmVyRG9jdW1lbnQuYm9keTtjYXNlIiNkb2N1bWVudCI6cmV0dXJuIGUuYm9keX12YXIgdD1zKGUpLG49dC5vdmVyZmxvdyxyPXQub3ZlcmZsb3dYO3JldHVybi8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3Qobit0Lm92ZXJmbG93WStyKT9lOmEoaShlKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gMTE9PT1lP2hlOjEwPT09ZT9nZTpoZXx8Z2V9ZnVuY3Rpb24gdShlKXtpZighZSlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgdD1sKDEwKT9kb2N1bWVudC5ib2R5Om51bGwsbj1lLm9mZnNldFBhcmVudHx8bnVsbDtuPT09dCYmZS5uZXh0RWxlbWVudFNpYmxpbmc7KW49KGU9ZS5uZXh0RWxlbWVudFNpYmxpbmcpLm9mZnNldFBhcmVudDt2YXIgcj1uJiZuLm5vZGVOYW1lO3JldHVybiByJiYiQk9EWSIhPT1yJiYiSFRNTCIhPT1yPy0xIT09WyJUSCIsIlREIiwiVEFCTEUiXS5pbmRleE9mKG4ubm9kZU5hbWUpJiYic3RhdGljIj09PXMobiwicG9zaXRpb24iKT91KG4pOm46ZT9lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBjKGUpe3ZhciB0PWUubm9kZU5hbWU7cmV0dXJuIkJPRFkiIT09dCYmKCJIVE1MIj09PXR8fHUoZS5maXJzdEVsZW1lbnRDaGlsZCk9PT1lKX1mdW5jdGlvbiBkKGUpe3JldHVybiBudWxsIT09ZS5wYXJlbnROb2RlP2QoZS5wYXJlbnROb2RlKTplfWZ1bmN0aW9uIF8oZSx0KXtpZighKGUmJmUubm9kZVR5cGUmJnQmJnQubm9kZVR5cGUpKXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIG49ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyxyPW4/ZTp0LG89bj90OmUscz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Muc2V0U3RhcnQociwwKSxzLnNldEVuZChvLDApO3ZhciBpPXMuY29tbW9uQW5jZXN0b3JDb250YWluZXI7aWYoZSE9PWkmJnQhPT1pfHxyLmNvbnRhaW5zKG8pKXJldHVybiBjKGkpP2k6dShpKTt2YXIgYT1kKGUpO3JldHVybiBhLmhvc3Q/XyhhLmhvc3QsdCk6XyhlLGQodCkuaG9zdCl9ZnVuY3Rpb24gcChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InRvcCIsbj0idG9wIj09PXQ/InNjcm9sbFRvcCI6InNjcm9sbExlZnQiLHI9ZS5ub2RlTmFtZTtpZigiQk9EWSI9PT1yfHwiSFRNTCI9PT1yKXt2YXIgbz1lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybihlLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudHx8bylbbl19cmV0dXJuIGVbbl19ZnVuY3Rpb24gZihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0scj1wKHQsInRvcCIpLG89cCh0LCJsZWZ0Iikscz1uPy0xOjE7cmV0dXJuIGUudG9wKz1yKnMsZS5ib3R0b20rPXIqcyxlLmxlZnQrPW8qcyxlLnJpZ2h0Kz1vKnMsZX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49IngiPT09dD8iTGVmdCI6IlRvcCIscj0iTGVmdCI9PT1uPyJSaWdodCI6IkJvdHRvbSI7cmV0dXJuIHBhcnNlRmxvYXQoZVsiYm9yZGVyIituKyJXaWR0aCJdLDEwKStwYXJzZUZsb2F0KGVbImJvcmRlciIrcisiV2lkdGgiXSwxMCl9ZnVuY3Rpb24gaChlLHQsbixyKXtyZXR1cm4gTWF0aC5tYXgodFsib2Zmc2V0IitlXSx0WyJzY3JvbGwiK2VdLG5bImNsaWVudCIrZV0sblsib2Zmc2V0IitlXSxuWyJzY3JvbGwiK2VdLGwoMTApP3BhcnNlSW50KG5bIm9mZnNldCIrZV0pK3BhcnNlSW50KHJbIm1hcmdpbiIrKCJIZWlnaHQiPT09ZT8iVG9wIjoiTGVmdCIpXSkrcGFyc2VJbnQoclsibWFyZ2luIisoIkhlaWdodCI9PT1lPyJCb3R0b20iOiJSaWdodCIpXSk6MCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1lLmJvZHksbj1lLmRvY3VtZW50RWxlbWVudCxyPWwoMTApJiZnZXRDb21wdXRlZFN0eWxlKG4pO3JldHVybntoZWlnaHQ6aCgiSGVpZ2h0Iix0LG4sciksd2lkdGg6aCgiV2lkdGgiLHQsbixyKX19ZnVuY3Rpb24gYihlKXtyZXR1cm4gdmUoe30sZSx7cmlnaHQ6ZS5sZWZ0K2Uud2lkdGgsYm90dG9tOmUudG9wK2UuaGVpZ2h0fSl9ZnVuY3Rpb24gRShlKXt2YXIgdD17fTt0cnl7aWYobCgxMCkpe3Q9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgbj1wKGUsInRvcCIpLHI9cChlLCJsZWZ0Iik7dC50b3ArPW4sdC5sZWZ0Kz1yLHQuYm90dG9tKz1uLHQucmlnaHQrPXJ9ZWxzZSB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZSl7fXZhciBvPXtsZWZ0OnQubGVmdCx0b3A6dC50b3Asd2lkdGg6dC5yaWdodC10LmxlZnQsaGVpZ2h0OnQuYm90dG9tLXQudG9wfSxpPSJIVE1MIj09PWUubm9kZU5hbWU/ZyhlLm93bmVyRG9jdW1lbnQpOnt9LGE9aS53aWR0aHx8ZS5jbGllbnRXaWR0aHx8by5yaWdodC1vLmxlZnQsdT1pLmhlaWdodHx8ZS5jbGllbnRIZWlnaHR8fG8uYm90dG9tLW8udG9wLGM9ZS5vZmZzZXRXaWR0aC1hLGQ9ZS5vZmZzZXRIZWlnaHQtdTtpZihjfHxkKXt2YXIgXz1zKGUpO2MtPW0oXywieCIpLGQtPW0oXywieSIpLG8ud2lkdGgtPWMsby5oZWlnaHQtPWR9cmV0dXJuIGIobyl9ZnVuY3Rpb24geShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0scj1sKDEwKSxvPSJIVE1MIj09PXQubm9kZU5hbWUsaT1FKGUpLHU9RSh0KSxjPWEoZSksZD1zKHQpLF89cGFyc2VGbG9hdChkLmJvcmRlclRvcFdpZHRoLDEwKSxwPXBhcnNlRmxvYXQoZC5ib3JkZXJMZWZ0V2lkdGgsMTApO24mJm8mJih1LnRvcD1NYXRoLm1heCh1LnRvcCwwKSx1LmxlZnQ9TWF0aC5tYXgodS5sZWZ0LDApKTt2YXIgbT1iKHt0b3A6aS50b3AtdS50b3AtXyxsZWZ0OmkubGVmdC11LmxlZnQtcCx3aWR0aDppLndpZHRoLGhlaWdodDppLmhlaWdodH0pO2lmKG0ubWFyZ2luVG9wPTAsbS5tYXJnaW5MZWZ0PTAsIXImJm8pe3ZhciBoPXBhcnNlRmxvYXQoZC5tYXJnaW5Ub3AsMTApLGc9cGFyc2VGbG9hdChkLm1hcmdpbkxlZnQsMTApO20udG9wLT1fLWgsbS5ib3R0b20tPV8taCxtLmxlZnQtPXAtZyxtLnJpZ2h0LT1wLWcsbS5tYXJnaW5Ub3A9aCxtLm1hcmdpbkxlZnQ9Z31yZXR1cm4ociYmIW4/dC5jb250YWlucyhjKTp0PT09YyYmIkJPRFkiIT09Yy5ub2RlTmFtZSkmJihtPWYobSx0KSksbX1mdW5jdGlvbiB2KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sbj1lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9eShlLG4pLG89TWF0aC5tYXgobi5jbGllbnRXaWR0aCx3aW5kb3cuaW5uZXJXaWR0aHx8MCkscz1NYXRoLm1heChuLmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fDApLGk9dD8wOnAobiksYT10PzA6cChuLCJsZWZ0Iik7cmV0dXJuIGIoe3RvcDppLXIudG9wK3IubWFyZ2luVG9wLGxlZnQ6YS1yLmxlZnQrci5tYXJnaW5MZWZ0LHdpZHRoOm8saGVpZ2h0OnN9KX1mdW5jdGlvbiBUKGUpe3ZhciB0PWUubm9kZU5hbWU7aWYoIkJPRFkiPT09dHx8IkhUTUwiPT09dClyZXR1cm4hMTtpZigiZml4ZWQiPT09cyhlLCJwb3NpdGlvbiIpKXJldHVybiEwO3ZhciBuPWkoZSk7cmV0dXJuISFuJiZUKG4pfWZ1bmN0aW9uIEEoZSl7aWYoIWV8fCFlLnBhcmVudEVsZW1lbnR8fGwoKSlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dCYmIm5vbmUiPT09cyh0LCJ0cmFuc2Zvcm0iKTspdD10LnBhcmVudEVsZW1lbnQ7cmV0dXJuIHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBDKGUsdCxuLHIpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdJiZhcmd1bWVudHNbNF0scz17dG9wOjAsbGVmdDowfSxsPW8/QShlKTpfKGUsdCk7aWYoInZpZXdwb3J0Ij09PXIpcz12KGwsbyk7ZWxzZXt2YXIgdT12b2lkIDA7InNjcm9sbFBhcmVudCI9PT1yPyh1PWEoaSh0KSksIkJPRFkiPT09dS5ub2RlTmFtZSYmKHU9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpOnU9IndpbmRvdyI9PT1yP2Uub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ6cjt2YXIgYz15KHUsbCxvKTtpZigiSFRNTCIhPT11Lm5vZGVOYW1lfHxUKGwpKXM9YztlbHNle3ZhciBkPWcoZS5vd25lckRvY3VtZW50KSxwPWQuaGVpZ2h0LGY9ZC53aWR0aDtzLnRvcCs9Yy50b3AtYy5tYXJnaW5Ub3Ascy5ib3R0b209cCtjLnRvcCxzLmxlZnQrPWMubGVmdC1jLm1hcmdpbkxlZnQscy5yaWdodD1mK2MubGVmdH19bj1ufHwwO3ZhciBtPSJudW1iZXIiPT10eXBlb2YgbjtyZXR1cm4gcy5sZWZ0Kz1tP246bi5sZWZ0fHwwLHMudG9wKz1tP246bi50b3B8fDAscy5yaWdodC09bT9uOm4ucmlnaHR8fDAscy5ib3R0b20tPW0/bjpuLmJvdHRvbXx8MCxzfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGUud2lkdGgqZS5oZWlnaHR9ZnVuY3Rpb24gUyhlLHQsbixyLG8pe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTowO2lmKC0xPT09ZS5pbmRleE9mKCJhdXRvIikpcmV0dXJuIGU7dmFyIGk9QyhuLHIscyxvKSxhPXt0b3A6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OnQudG9wLWkudG9wfSxyaWdodDp7d2lkdGg6aS5yaWdodC10LnJpZ2h0LGhlaWdodDppLmhlaWdodH0sYm90dG9tOnt3aWR0aDppLndpZHRoLGhlaWdodDppLmJvdHRvbS10LmJvdHRvbX0sbGVmdDp7d2lkdGg6dC5sZWZ0LWkubGVmdCxoZWlnaHQ6aS5oZWlnaHR9fSxsPU9iamVjdC5rZXlzKGEpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdmUoe2tleTplfSxhW2VdLHthcmVhOk8oYVtlXSl9KX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5hcmVhLWUuYXJlYX0pLHU9bC5maWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxyPWUuaGVpZ2h0O3JldHVybiB0Pj1uLmNsaWVudFdpZHRoJiZyPj1uLmNsaWVudEhlaWdodH0pLGM9dS5sZW5ndGg+MD91WzBdLmtleTpsWzBdLmtleSxkPWUuc3BsaXQoIi0iKVsxXTtyZXR1cm4gYysoZD8iLSIrZDoiIil9ZnVuY3Rpb24gUihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJuIHkobixyP0EodCk6Xyh0LG4pLHIpfWZ1bmN0aW9uIGooZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LG49dC5nZXRDb21wdXRlZFN0eWxlKGUpLHI9cGFyc2VGbG9hdChuLm1hcmdpblRvcHx8MCkrcGFyc2VGbG9hdChuLm1hcmdpbkJvdHRvbXx8MCksbz1wYXJzZUZsb2F0KG4ubWFyZ2luTGVmdHx8MCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0fHwwKTtyZXR1cm57d2lkdGg6ZS5vZmZzZXRXaWR0aCtvLGhlaWdodDplLm9mZnNldEhlaWdodCtyfX1mdW5jdGlvbiB4KGUpe3ZhciB0PXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIix0b3A6ImJvdHRvbSJ9O3JldHVybiBlLnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gTChlLHQsbil7bj1uLnNwbGl0KCItIilbMF07dmFyIHI9aihlKSxvPXt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0scz0tMSE9PVsicmlnaHQiLCJsZWZ0Il0uaW5kZXhPZihuKSxpPXM/InRvcCI6ImxlZnQiLGE9cz8ibGVmdCI6InRvcCIsbD1zPyJoZWlnaHQiOiJ3aWR0aCIsdT1zPyJ3aWR0aCI6ImhlaWdodCI7cmV0dXJuIG9baV09dFtpXSt0W2xdLzItcltsXS8yLG9bYV09bj09PWE/dFthXS1yW3VdOnRbeChhKV0sb31mdW5jdGlvbiBEKGUsdCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maW5kP2UuZmluZCh0KTplLmZpbHRlcih0KVswXX1mdW5jdGlvbiB3KGUsdCxuKXtpZihBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KXJldHVybiBlLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZVt0XT09PW59KTt2YXIgcj1EKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF09PT1ufSk7cmV0dXJuIGUuaW5kZXhPZihyKX1mdW5jdGlvbiBNKGUsdCxuKXtyZXR1cm4odm9pZCAwPT09bj9lOmUuc2xpY2UoMCx3KGUsIm5hbWUiLG4pKSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZ1bmN0aW9uJiZjb25zb2xlLndhcm4oImBtb2RpZmllci5mdW5jdGlvbmAgaXMgZGVwcmVjYXRlZCwgdXNlIGBtb2RpZmllci5mbmAhIik7dmFyIG49ZS5mdW5jdGlvbnx8ZS5mbjtlLmVuYWJsZWQmJm8obikmJih0Lm9mZnNldHMucG9wcGVyPWIodC5vZmZzZXRzLnBvcHBlciksdC5vZmZzZXRzLnJlZmVyZW5jZT1iKHQub2Zmc2V0cy5yZWZlcmVuY2UpLHQ9bih0LGUpKX0pLHR9ZnVuY3Rpb24gaygpe2lmKCF0aGlzLnN0YXRlLmlzRGVzdHJveWVkKXt2YXIgZT17aW5zdGFuY2U6dGhpcyxzdHlsZXM6e30sYXJyb3dTdHlsZXM6e30sYXR0cmlidXRlczp7fSxmbGlwcGVkOiExLG9mZnNldHM6e319O2Uub2Zmc2V0cy5yZWZlcmVuY2U9Uih0aGlzLnN0YXRlLHRoaXMucG9wcGVyLHRoaXMucmVmZXJlbmNlLHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkKSxlLnBsYWNlbWVudD1TKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsZS5vZmZzZXRzLnJlZmVyZW5jZSx0aGlzLnBvcHBlcix0aGlzLnJlZmVyZW5jZSx0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAuYm91bmRhcmllc0VsZW1lbnQsdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpLGUub3JpZ2luYWxQbGFjZW1lbnQ9ZS5wbGFjZW1lbnQsZS5wb3NpdGlvbkZpeGVkPXRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkLGUub2Zmc2V0cy5wb3BwZXI9TCh0aGlzLnBvcHBlcixlLm9mZnNldHMucmVmZXJlbmNlLGUucGxhY2VtZW50KSxlLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uPXRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkPyJmaXhlZCI6ImFic29sdXRlIixlPU0odGhpcy5tb2RpZmllcnMsZSksdGhpcy5zdGF0ZS5pc0NyZWF0ZWQ/dGhpcy5vcHRpb25zLm9uVXBkYXRlKGUpOih0aGlzLnN0YXRlLmlzQ3JlYXRlZD0hMCx0aGlzLm9wdGlvbnMub25DcmVhdGUoZSkpfX1mdW5jdGlvbiBJKGUsdCl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXt2YXIgbj1lLm5hbWU7cmV0dXJuIGUuZW5hYmxlZCYmbj09PXR9KX1mdW5jdGlvbiBQKGUpe2Zvcih2YXIgdD1bITEsIm1zIiwiV2Via2l0IiwiTW96IiwiTyJdLG49ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXSxzPW8/IiIrbytuOmU7aWYodm9pZCAwIT09ZG9jdW1lbnQuYm9keS5zdHlsZVtzXSlyZXR1cm4gc31yZXR1cm4gbnVsbH1mdW5jdGlvbiBOKCl7cmV0dXJuIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQ9ITAsSSh0aGlzLm1vZGlmaWVycywiYXBwbHlTdHlsZSIpJiYodGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpLHRoaXMucG9wcGVyLnN0eWxlLnBvc2l0aW9uPSIiLHRoaXMucG9wcGVyLnN0eWxlLnRvcD0iIix0aGlzLnBvcHBlci5zdHlsZS5sZWZ0PSIiLHRoaXMucG9wcGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLnBvcHBlci5zdHlsZS53aWxsQ2hhbmdlPSIiLHRoaXMucG9wcGVyLnN0eWxlW1AoInRyYW5zZm9ybSIpXT0iIiksdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95JiZ0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKSx0aGlzfWZ1bmN0aW9uIEgoZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50O3JldHVybiB0P3QuZGVmYXVsdFZpZXc6d2luZG93fWZ1bmN0aW9uIEYoZSx0LG4scil7dmFyIG89IkJPRFkiPT09ZS5ub2RlTmFtZSxzPW8/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OmU7cy5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTohMH0pLG98fEYoYShzLnBhcmVudE5vZGUpLHQsbixyKSxyLnB1c2gocyl9ZnVuY3Rpb24gQihlLHQsbixyKXtuLnVwZGF0ZUJvdW5kPXIsSChlKS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4udXBkYXRlQm91bmQse3Bhc3NpdmU6ITB9KTt2YXIgbz1hKGUpO3JldHVybiBGKG8sInNjcm9sbCIsbi51cGRhdGVCb3VuZCxuLnNjcm9sbFBhcmVudHMpLG4uc2Nyb2xsRWxlbWVudD1vLG4uZXZlbnRzRW5hYmxlZD0hMCxufWZ1bmN0aW9uIFUoKXt0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWR8fCh0aGlzLnN0YXRlPUIodGhpcy5yZWZlcmVuY2UsdGhpcy5vcHRpb25zLHRoaXMuc3RhdGUsdGhpcy5zY2hlZHVsZVVwZGF0ZSkpfWZ1bmN0aW9uIEcoZSx0KXtyZXR1cm4gSChlKS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHQudXBkYXRlQm91bmQpLHQuc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0LnVwZGF0ZUJvdW5kKX0pLHQudXBkYXRlQm91bmQ9bnVsbCx0LnNjcm9sbFBhcmVudHM9W10sdC5zY3JvbGxFbGVtZW50PW51bGwsdC5ldmVudHNFbmFibGVkPSExLHR9ZnVuY3Rpb24geigpe3RoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2NoZWR1bGVVcGRhdGUpLHRoaXMuc3RhdGU9Ryh0aGlzLnJlZmVyZW5jZSx0aGlzLnN0YXRlKSl9ZnVuY3Rpb24gVihlKXtyZXR1cm4iIiE9PWUmJiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gVyhlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9IiI7LTEhPT1bIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uaW5kZXhPZihuKSYmVih0W25dKSYmKHI9InB4IiksZS5zdHlsZVtuXT10W25dK3J9KX1mdW5jdGlvbiBZKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXshMSE9PXRbbl0/ZS5zZXRBdHRyaWJ1dGUobix0W25dKTplLnJlbW92ZUF0dHJpYnV0ZShuKX0pfWZ1bmN0aW9uIHEoZSl7cmV0dXJuIFcoZS5pbnN0YW5jZS5wb3BwZXIsZS5zdHlsZXMpLFkoZS5pbnN0YW5jZS5wb3BwZXIsZS5hdHRyaWJ1dGVzKSxlLmFycm93RWxlbWVudCYmT2JqZWN0LmtleXMoZS5hcnJvd1N0eWxlcykubGVuZ3RoJiZXKGUuYXJyb3dFbGVtZW50LGUuYXJyb3dTdHlsZXMpLGV9ZnVuY3Rpb24gSyhlLHQsbixyLG8pe3ZhciBzPVIobyx0LGUsbi5wb3NpdGlvbkZpeGVkKSxpPVMobi5wbGFjZW1lbnQscyx0LGUsbi5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCxuLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgieC1wbGFjZW1lbnQiLGkpLFcodCx7cG9zaXRpb246bi5wb3NpdGlvbkZpeGVkPyJmaXhlZCI6ImFic29sdXRlIn0pLG59ZnVuY3Rpb24gWChlLHQpe3ZhciBuPWUub2Zmc2V0cyxyPW4ucG9wcGVyLG89bi5yZWZlcmVuY2Uscz1NYXRoLnJvdW5kLGk9TWF0aC5mbG9vcixhPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxsPXMoby53aWR0aCksdT1zKHIud2lkdGgpLGM9LTEhPT1bImxlZnQiLCJyaWdodCJdLmluZGV4T2YoZS5wbGFjZW1lbnQpLGQ9LTEhPT1lLnBsYWNlbWVudC5pbmRleE9mKCItIiksXz1sJTI9PXUlMixwPWwlMj09MSYmdSUyPT0xLGY9dD9jfHxkfHxfP3M6aTphLG09dD9zOmE7cmV0dXJue2xlZnQ6ZihwJiYhZCYmdD9yLmxlZnQtMTpyLmxlZnQpLHRvcDptKHIudG9wKSxib3R0b206bShyLmJvdHRvbSkscmlnaHQ6ZihyLnJpZ2h0KX19ZnVuY3Rpb24gJChlLHQpe3ZhciBuPXQueCxyPXQueSxvPWUub2Zmc2V0cy5wb3BwZXIscz1EKGUuaW5zdGFuY2UubW9kaWZpZXJzLGZ1bmN0aW9uKGUpe3JldHVybiJhcHBseVN0eWxlIj09PWUubmFtZX0pLmdwdUFjY2VsZXJhdGlvbjt2b2lkIDAhPT1zJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IGBncHVBY2NlbGVyYXRpb25gIG9wdGlvbiBtb3ZlZCB0byBgY29tcHV0ZVN0eWxlYCBtb2RpZmllciBhbmQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQb3BwZXIuanMhIik7dmFyIGk9dm9pZCAwIT09cz9zOnQuZ3B1QWNjZWxlcmF0aW9uLGE9dShlLmluc3RhbmNlLnBvcHBlciksbD1FKGEpLGM9e3Bvc2l0aW9uOm8ucG9zaXRpb259LGQ9WChlLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvPDJ8fCFUZSksXz0iYm90dG9tIj09PW4/InRvcCI6ImJvdHRvbSIscD0icmlnaHQiPT09cj8ibGVmdCI6InJpZ2h0IixmPVAoInRyYW5zZm9ybSIpLG09dm9pZCAwLGg9dm9pZCAwO2lmKGg9ImJvdHRvbSI9PT1fPyJIVE1MIj09PWEubm9kZU5hbWU/LWEuY2xpZW50SGVpZ2h0K2QuYm90dG9tOi1sLmhlaWdodCtkLmJvdHRvbTpkLnRvcCxtPSJyaWdodCI9PT1wPyJIVE1MIj09PWEubm9kZU5hbWU/LWEuY2xpZW50V2lkdGgrZC5yaWdodDotbC53aWR0aCtkLnJpZ2h0OmQubGVmdCxpJiZmKWNbZl09InRyYW5zbGF0ZTNkKCIrbSsicHgsICIraCsicHgsIDApIixjW19dPTAsY1twXT0wLGMud2lsbENoYW5nZT0idHJhbnNmb3JtIjtlbHNle3ZhciBnPSJib3R0b20iPT09Xz8tMToxLGI9InJpZ2h0Ij09PXA/LTE6MTtjW19dPWgqZyxjW3BdPW0qYixjLndpbGxDaGFuZ2U9XysiLCAiK3B9dmFyIHk9eyJ4LXBsYWNlbWVudCI6ZS5wbGFjZW1lbnR9O3JldHVybiBlLmF0dHJpYnV0ZXM9dmUoe30seSxlLmF0dHJpYnV0ZXMpLGUuc3R5bGVzPXZlKHt9LGMsZS5zdHlsZXMpLGUuYXJyb3dTdHlsZXM9dmUoe30sZS5vZmZzZXRzLmFycm93LGUuYXJyb3dTdHlsZXMpLGV9ZnVuY3Rpb24gUShlLHQsbil7dmFyIHI9RChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10fSksbz0hIXImJmUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09biYmZS5lbmFibGVkJiZlLm9yZGVyPHIub3JkZXJ9KTtpZighbyl7dmFyIHM9ImAiK3QrImAiLGk9ImAiK24rImAiO2NvbnNvbGUud2FybihpKyIgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgIitzKyIgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAiK3MrIiEiKX1yZXR1cm4gb31mdW5jdGlvbiBKKGUsdCl7dmFyIG47aWYoIVEoZS5pbnN0YW5jZS5tb2RpZmllcnMsImFycm93Iiwia2VlcFRvZ2V0aGVyIikpcmV0dXJuIGU7dmFyIHI9dC5lbGVtZW50O2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYoIShyPWUuaW5zdGFuY2UucG9wcGVyLnF1ZXJ5U2VsZWN0b3IocikpKXJldHVybiBlfWVsc2UgaWYoIWUuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKHIpKXJldHVybiBjb25zb2xlLndhcm4oIldBUk5JTkc6IGBhcnJvdy5lbGVtZW50YCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXIgZWxlbWVudCEiKSxlO3ZhciBvPWUucGxhY2VtZW50LnNwbGl0KCItIilbMF0saT1lLm9mZnNldHMsYT1pLnBvcHBlcixsPWkucmVmZXJlbmNlLHU9LTEhPT1bImxlZnQiLCJyaWdodCJdLmluZGV4T2YobyksYz11PyJoZWlnaHQiOiJ3aWR0aCIsZD11PyJUb3AiOiJMZWZ0IixfPWQudG9Mb3dlckNhc2UoKSxwPXU/ImxlZnQiOiJ0b3AiLGY9dT8iYm90dG9tIjoicmlnaHQiLG09aihyKVtjXTtsW2ZdLW08YVtfXSYmKGUub2Zmc2V0cy5wb3BwZXJbX10tPWFbX10tKGxbZl0tbSkpLGxbX10rbT5hW2ZdJiYoZS5vZmZzZXRzLnBvcHBlcltfXSs9bFtfXSttLWFbZl0pLGUub2Zmc2V0cy5wb3BwZXI9YihlLm9mZnNldHMucG9wcGVyKTt2YXIgaD1sW19dK2xbY10vMi1tLzIsZz1zKGUuaW5zdGFuY2UucG9wcGVyKSxFPXBhcnNlRmxvYXQoZ1sibWFyZ2luIitkXSwxMCkseT1wYXJzZUZsb2F0KGdbImJvcmRlciIrZCsiV2lkdGgiXSwxMCksdj1oLWUub2Zmc2V0cy5wb3BwZXJbX10tRS15O3JldHVybiB2PU1hdGgubWF4KE1hdGgubWluKGFbY10tbSx2KSwwKSxlLmFycm93RWxlbWVudD1yLGUub2Zmc2V0cy5hcnJvdz0obj17fSx5ZShuLF8sTWF0aC5yb3VuZCh2KSkseWUobixwLCIiKSxuKSxlfWZ1bmN0aW9uIFooZSl7cmV0dXJuImVuZCI9PT1lPyJzdGFydCI6InN0YXJ0Ij09PWU/ImVuZCI6ZX1mdW5jdGlvbiBlZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49Q2UuaW5kZXhPZihlKSxyPUNlLnNsaWNlKG4rMSkuY29uY2F0KENlLnNsaWNlKDAsbikpO3JldHVybiB0P3IucmV2ZXJzZSgpOnJ9ZnVuY3Rpb24gdGUoZSx0KXtpZihJKGUuaW5zdGFuY2UubW9kaWZpZXJzLCJpbm5lciIpKXJldHVybiBlO2lmKGUuZmxpcHBlZCYmZS5wbGFjZW1lbnQ9PT1lLm9yaWdpbmFsUGxhY2VtZW50KXJldHVybiBlO3ZhciBuPUMoZS5pbnN0YW5jZS5wb3BwZXIsZS5pbnN0YW5jZS5yZWZlcmVuY2UsdC5wYWRkaW5nLHQuYm91bmRhcmllc0VsZW1lbnQsZS5wb3NpdGlvbkZpeGVkKSxyPWUucGxhY2VtZW50LnNwbGl0KCItIilbMF0sbz14KHIpLHM9ZS5wbGFjZW1lbnQuc3BsaXQoIi0iKVsxXXx8IiIsaT1bXTtzd2l0Y2godC5iZWhhdmlvcil7Y2FzZSBPZS5GTElQOmk9W3Isb107YnJlYWs7Y2FzZSBPZS5DTE9DS1dJU0U6aT1lZShyKTticmVhaztjYXNlIE9lLkNPVU5URVJDTE9DS1dJU0U6aT1lZShyLCEwKTticmVhaztkZWZhdWx0Omk9dC5iZWhhdmlvcn1yZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGEsbCl7aWYociE9PWF8fGkubGVuZ3RoPT09bCsxKXJldHVybiBlO3I9ZS5wbGFjZW1lbnQuc3BsaXQoIi0iKVswXSxvPXgocik7dmFyIHU9ZS5vZmZzZXRzLnBvcHBlcixjPWUub2Zmc2V0cy5yZWZlcmVuY2UsZD1NYXRoLmZsb29yLF89ImxlZnQiPT09ciYmZCh1LnJpZ2h0KT5kKGMubGVmdCl8fCJyaWdodCI9PT1yJiZkKHUubGVmdCk8ZChjLnJpZ2h0KXx8InRvcCI9PT1yJiZkKHUuYm90dG9tKT5kKGMudG9wKXx8ImJvdHRvbSI9PT1yJiZkKHUudG9wKTxkKGMuYm90dG9tKSxwPWQodS5sZWZ0KTxkKG4ubGVmdCksZj1kKHUucmlnaHQpPmQobi5yaWdodCksbT1kKHUudG9wKTxkKG4udG9wKSxoPWQodS5ib3R0b20pPmQobi5ib3R0b20pLGc9ImxlZnQiPT09ciYmcHx8InJpZ2h0Ij09PXImJmZ8fCJ0b3AiPT09ciYmbXx8ImJvdHRvbSI9PT1yJiZoLGI9LTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YociksRT0hIXQuZmxpcFZhcmlhdGlvbnMmJihiJiYic3RhcnQiPT09cyYmcHx8YiYmImVuZCI9PT1zJiZmfHwhYiYmInN0YXJ0Ij09PXMmJm18fCFiJiYiZW5kIj09PXMmJmgpOyhffHxnfHxFKSYmKGUuZmxpcHBlZD0hMCwoX3x8ZykmJihyPWlbbCsxXSksRSYmKHM9WihzKSksZS5wbGFjZW1lbnQ9cisocz8iLSIrczoiIiksZS5vZmZzZXRzLnBvcHBlcj12ZSh7fSxlLm9mZnNldHMucG9wcGVyLEwoZS5pbnN0YW5jZS5wb3BwZXIsZS5vZmZzZXRzLnJlZmVyZW5jZSxlLnBsYWNlbWVudCkpLGU9TShlLmluc3RhbmNlLm1vZGlmaWVycyxlLCJmbGlwIikpfSksZX1mdW5jdGlvbiBuZShlKXt2YXIgdD1lLm9mZnNldHMsbj10LnBvcHBlcixyPXQucmVmZXJlbmNlLG89ZS5wbGFjZW1lbnQuc3BsaXQoIi0iKVswXSxzPU1hdGguZmxvb3IsaT0tMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihvKSxhPWk/InJpZ2h0IjoiYm90dG9tIixsPWk/ImxlZnQiOiJ0b3AiLHU9aT8id2lkdGgiOiJoZWlnaHQiO3JldHVybiBuW2FdPHMocltsXSkmJihlLm9mZnNldHMucG9wcGVyW2xdPXMocltsXSktblt1XSksbltsXT5zKHJbYV0pJiYoZS5vZmZzZXRzLnBvcHBlcltsXT1zKHJbYV0pKSxlfWZ1bmN0aW9uIHJlKGUsdCxuLHIpe3ZhciBvPWUubWF0Y2goLygoPzpcLXxcKyk/XGQqXC4/XGQqKSguKikvKSxzPStvWzFdLGk9b1syXTtpZighcylyZXR1cm4gZTtpZigwPT09aS5pbmRleE9mKCIlIikpe3ZhciBhPXZvaWQgMDtzd2l0Y2goaSl7Y2FzZSIlcCI6YT1uO2JyZWFrO2Nhc2UiJSI6Y2FzZSIlciI6ZGVmYXVsdDphPXJ9cmV0dXJuIGIoYSlbdF0vMTAwKnN9aWYoInZoIj09PWl8fCJ2dyI9PT1pKXtyZXR1cm4oInZoIj09PWk/TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fDApOk1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx3aW5kb3cuaW5uZXJXaWR0aHx8MCkpLzEwMCpzfXJldHVybiBzfWZ1bmN0aW9uIG9lKGUsdCxuLHIpe3ZhciBvPVswLDBdLHM9LTEhPT1bInJpZ2h0IiwibGVmdCJdLmluZGV4T2YociksaT1lLnNwbGl0KC8oXCt8XC0pLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLGE9aS5pbmRleE9mKEQoaSxmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuc2VhcmNoKC8sfFxzLyl9KSk7aVthXSYmLTE9PT1pW2FdLmluZGV4T2YoIiwiKSYmY29uc29sZS53YXJuKCJPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuIik7dmFyIGw9L1xzKixccyp8XHMrLyx1PS0xIT09YT9baS5zbGljZSgwLGEpLmNvbmNhdChbaVthXS5zcGxpdChsKVswXV0pLFtpW2FdLnNwbGl0KGwpWzFdXS5jb25jYXQoaS5zbGljZShhKzEpKV06W2ldO3JldHVybiB1PXUubWFwKGZ1bmN0aW9uKGUscil7dmFyIG89KDE9PT1yPyFzOnMpPyJoZWlnaHQiOiJ3aWR0aCIsaT0hMTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4iIj09PWVbZS5sZW5ndGgtMV0mJi0xIT09WyIrIiwiLSJdLmluZGV4T2YodCk/KGVbZS5sZW5ndGgtMV09dCxpPSEwLGUpOmk/KGVbZS5sZW5ndGgtMV0rPXQsaT0hMSxlKTplLmNvbmNhdCh0KX0sW10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcmUoZSxvLHQsbil9KX0pLHUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuZm9yRWFjaChmdW5jdGlvbihuLHIpe1YobikmJihvW3RdKz1uKigiLSI9PT1lW3ItMV0/LTE6MSkpfSl9KSxvfWZ1bmN0aW9uIHNlKGUsdCl7dmFyIG49dC5vZmZzZXQscj1lLnBsYWNlbWVudCxvPWUub2Zmc2V0cyxzPW8ucG9wcGVyLGk9by5yZWZlcmVuY2UsYT1yLnNwbGl0KCItIilbMF0sbD12b2lkIDA7cmV0dXJuIGw9Vigrbik/WytuLDBdOm9lKG4scyxpLGEpLCJsZWZ0Ij09PWE/KHMudG9wKz1sWzBdLHMubGVmdC09bFsxXSk6InJpZ2h0Ij09PWE/KHMudG9wKz1sWzBdLHMubGVmdCs9bFsxXSk6InRvcCI9PT1hPyhzLmxlZnQrPWxbMF0scy50b3AtPWxbMV0pOiJib3R0b20iPT09YSYmKHMubGVmdCs9bFswXSxzLnRvcCs9bFsxXSksZS5wb3BwZXI9cyxlfWZ1bmN0aW9uIGllKGUsdCl7dmFyIG49dC5ib3VuZGFyaWVzRWxlbWVudHx8dShlLmluc3RhbmNlLnBvcHBlcik7ZS5pbnN0YW5jZS5yZWZlcmVuY2U9PT1uJiYobj11KG4pKTt2YXIgcj1QKCJ0cmFuc2Zvcm0iKSxvPWUuaW5zdGFuY2UucG9wcGVyLnN0eWxlLHM9by50b3AsaT1vLmxlZnQsYT1vW3JdO28udG9wPSIiLG8ubGVmdD0iIixvW3JdPSIiO3ZhciBsPUMoZS5pbnN0YW5jZS5wb3BwZXIsZS5pbnN0YW5jZS5yZWZlcmVuY2UsdC5wYWRkaW5nLG4sZS5wb3NpdGlvbkZpeGVkKTtvLnRvcD1zLG8ubGVmdD1pLG9bcl09YSx0LmJvdW5kYXJpZXM9bDt2YXIgYz10LnByaW9yaXR5LGQ9ZS5vZmZzZXRzLnBvcHBlcixfPXtwcmltYXJ5OmZ1bmN0aW9uKGUpe3ZhciBuPWRbZV07cmV0dXJuIGRbZV08bFtlXSYmIXQuZXNjYXBlV2l0aFJlZmVyZW5jZSYmKG49TWF0aC5tYXgoZFtlXSxsW2VdKSkseWUoe30sZSxuKX0sc2Vjb25kYXJ5OmZ1bmN0aW9uKGUpe3ZhciBuPSJyaWdodCI9PT1lPyJsZWZ0IjoidG9wIixyPWRbbl07cmV0dXJuIGRbZV0+bFtlXSYmIXQuZXNjYXBlV2l0aFJlZmVyZW5jZSYmKHI9TWF0aC5taW4oZFtuXSxsW2VdLSgicmlnaHQiPT09ZT9kLndpZHRoOmQuaGVpZ2h0KSkpLHllKHt9LG4scil9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PS0xIT09WyJsZWZ0IiwidG9wIl0uaW5kZXhPZihlKT8icHJpbWFyeSI6InNlY29uZGFyeSI7ZD12ZSh7fSxkLF9bdF0oZSkpfSksZS5vZmZzZXRzLnBvcHBlcj1kLGV9ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9ZS5wbGFjZW1lbnQsbj10LnNwbGl0KCItIilbMF0scj10LnNwbGl0KCItIilbMV07aWYocil7dmFyIG89ZS5vZmZzZXRzLHM9by5yZWZlcmVuY2UsaT1vLnBvcHBlcixhPS0xIT09WyJib3R0b20iLCJ0b3AiXS5pbmRleE9mKG4pLGw9YT8ibGVmdCI6InRvcCIsdT1hPyJ3aWR0aCI6ImhlaWdodCIsYz17c3RhcnQ6eWUoe30sbCxzW2xdKSxlbmQ6eWUoe30sbCxzW2xdK3NbdV0taVt1XSl9O2Uub2Zmc2V0cy5wb3BwZXI9dmUoe30saSxjW3JdKX1yZXR1cm4gZX1mdW5jdGlvbiBsZShlKXtpZighUShlLmluc3RhbmNlLm1vZGlmaWVycywiaGlkZSIsInByZXZlbnRPdmVyZmxvdyIpKXJldHVybiBlO3ZhciB0PWUub2Zmc2V0cy5yZWZlcmVuY2Usbj1EKGUuaW5zdGFuY2UubW9kaWZpZXJzLGZ1bmN0aW9uKGUpe3JldHVybiJwcmV2ZW50T3ZlcmZsb3ciPT09ZS5uYW1lfSkuYm91bmRhcmllcztpZih0LmJvdHRvbTxuLnRvcHx8dC5sZWZ0Pm4ucmlnaHR8fHQudG9wPm4uYm90dG9tfHx0LnJpZ2h0PG4ubGVmdCl7aWYoITA9PT1lLmhpZGUpcmV0dXJuIGU7ZS5oaWRlPSEwLGUuYXR0cmlidXRlc1sieC1vdXQtb2YtYm91bmRhcmllcyJdPSIifWVsc2V7aWYoITE9PT1lLmhpZGUpcmV0dXJuIGU7ZS5oaWRlPSExLGUuYXR0cmlidXRlc1sieC1vdXQtb2YtYm91bmRhcmllcyJdPSExfXJldHVybiBlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWUucGxhY2VtZW50LG49dC5zcGxpdCgiLSIpWzBdLHI9ZS5vZmZzZXRzLG89ci5wb3BwZXIscz1yLnJlZmVyZW5jZSxpPS0xIT09WyJsZWZ0IiwicmlnaHQiXS5pbmRleE9mKG4pLGE9LTE9PT1bInRvcCIsImxlZnQiXS5pbmRleE9mKG4pO3JldHVybiBvW2k/ImxlZnQiOiJ0b3AiXT1zW25dLShhP29baT8id2lkdGgiOiJoZWlnaHQiXTowKSxlLnBsYWNlbWVudD14KHQpLGUub2Zmc2V0cy5wb3BwZXI9YihvKSxlfWZvcih2YXIgY2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsZGU9WyJFZGdlIiwiVHJpZGVudCIsIkZpcmVmb3giXSxfZT0wLHBlPTA7cGU8ZGUubGVuZ3RoO3BlKz0xKWlmKGNlJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoZGVbcGVdKT49MCl7X2U9MTticmVha312YXIgZmU9Y2UmJndpbmRvdy5Qcm9taXNlLG1lPWZlP246cixoZT1jZSYmISghd2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0fHwhZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSxnZT1jZSYmL01TSUUgMTAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksYmU9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0sRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCkseWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfSx2ZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxUZT1jZSYmL0ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEFlPVsiYXV0by1zdGFydCIsImF1dG8iLCJhdXRvLWVuZCIsInRvcC1zdGFydCIsInRvcCIsInRvcC1lbmQiLCJyaWdodC1zdGFydCIsInJpZ2h0IiwicmlnaHQtZW5kIiwiYm90dG9tLWVuZCIsImJvdHRvbSIsImJvdHRvbS1zdGFydCIsImxlZnQtZW5kIiwibGVmdCIsImxlZnQtc3RhcnQiXSxDZT1BZS5zbGljZSgzKSxPZT17RkxJUDoiZmxpcCIsQ0xPQ0tXSVNFOiJjbG9ja3dpc2UiLENPVU5URVJDTE9DS1dJU0U6ImNvdW50ZXJjbG9ja3dpc2UifSxTZT17c2hpZnQ6e29yZGVyOjEwMCxlbmFibGVkOiEwLGZuOmFlfSxvZmZzZXQ6e29yZGVyOjIwMCxlbmFibGVkOiEwLGZuOnNlLG9mZnNldDowfSxwcmV2ZW50T3ZlcmZsb3c6e29yZGVyOjMwMCxlbmFibGVkOiEwLGZuOmllLHByaW9yaXR5OlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0scGFkZGluZzo1LGJvdW5kYXJpZXNFbGVtZW50OiJzY3JvbGxQYXJlbnQifSxrZWVwVG9nZXRoZXI6e29yZGVyOjQwMCxlbmFibGVkOiEwLGZuOm5lfSxhcnJvdzp7b3JkZXI6NTAwLGVuYWJsZWQ6ITAsZm46SixlbGVtZW50OiJbeC1hcnJvd10ifSxmbGlwOntvcmRlcjo2MDAsZW5hYmxlZDohMCxmbjp0ZSxiZWhhdmlvcjoiZmxpcCIscGFkZGluZzo1LGJvdW5kYXJpZXNFbGVtZW50OiJ2aWV3cG9ydCJ9LGlubmVyOntvcmRlcjo3MDAsZW5hYmxlZDohMSxmbjp1ZX0saGlkZTp7b3JkZXI6ODAwLGVuYWJsZWQ6ITAsZm46bGV9LGNvbXB1dGVTdHlsZTp7b3JkZXI6ODUwLGVuYWJsZWQ6ITAsZm46JCxncHVBY2NlbGVyYXRpb246ITAseDoiYm90dG9tIix5OiJyaWdodCJ9LGFwcGx5U3R5bGU6e29yZGVyOjkwMCxlbmFibGVkOiEwLGZuOnEsb25Mb2FkOkssZ3B1QWNjZWxlcmF0aW9uOnZvaWQgMH19LFJlPXtwbGFjZW1lbnQ6ImJvdHRvbSIscG9zaXRpb25GaXhlZDohMSxldmVudHNFbmFibGVkOiEwLHJlbW92ZU9uRGVzdHJveTohMSxvbkNyZWF0ZTpmdW5jdGlvbigpe30sb25VcGRhdGU6ZnVuY3Rpb24oKXt9LG1vZGlmaWVyczpTZX0samU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dmFyIHI9dGhpcyxzPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtiZSh0aGlzLGUpLHRoaXMuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIudXBkYXRlKX0sdGhpcy51cGRhdGU9bWUodGhpcy51cGRhdGUuYmluZCh0aGlzKSksdGhpcy5vcHRpb25zPXZlKHt9LGUuRGVmYXVsdHMscyksdGhpcy5zdGF0ZT17aXNEZXN0cm95ZWQ6ITEsaXNDcmVhdGVkOiExLHNjcm9sbFBhcmVudHM6W119LHRoaXMucmVmZXJlbmNlPXQmJnQuanF1ZXJ5P3RbMF06dCx0aGlzLnBvcHBlcj1uJiZuLmpxdWVyeT9uWzBdOm4sdGhpcy5vcHRpb25zLm1vZGlmaWVycz17fSxPYmplY3Qua2V5cyh2ZSh7fSxlLkRlZmF1bHRzLm1vZGlmaWVycyxzLm1vZGlmaWVycykpLmZvckVhY2goZnVuY3Rpb24odCl7ci5vcHRpb25zLm1vZGlmaWVyc1t0XT12ZSh7fSxlLkRlZmF1bHRzLm1vZGlmaWVyc1t0XXx8e30scy5tb2RpZmllcnM/cy5tb2RpZmllcnNbdF06e30pfSksdGhpcy5tb2RpZmllcnM9T2JqZWN0LmtleXModGhpcy5vcHRpb25zLm1vZGlmaWVycykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB2ZSh7bmFtZTplfSxyLm9wdGlvbnMubW9kaWZpZXJzW2VdKX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5vcmRlci10Lm9yZGVyfSksdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmVuYWJsZWQmJm8oZS5vbkxvYWQpJiZlLm9uTG9hZChyLnJlZmVyZW5jZSxyLnBvcHBlcixyLm9wdGlvbnMsZSxyLnN0YXRlKX0pLHRoaXMudXBkYXRlKCk7dmFyIGk9dGhpcy5vcHRpb25zLmV2ZW50c0VuYWJsZWQ7aSYmdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpLHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZD1pfXJldHVybiBFZShlLFt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuY2FsbCh0aGlzKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE4uY2FsbCh0aGlzKX19LHtrZXk6ImVuYWJsZUV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBVLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlRXZlbnRMaXN0ZW5lcnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHouY2FsbCh0aGlzKX19XSksZX0oKTtqZS5VdGlscz0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OmUpLlBvcHBlclV0aWxzLGplLnBsYWNlbWVudHM9QWUsamUuRGVmYXVsdHM9UmUsdC5hPWplfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9hdC1ydWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuX19wcm90b19fPXR9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jb250YWluZXIuanMiKSkscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuO3JldHVybiBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzLG4udHlwZT0iYXRydWxlIixufXIodCxlKTt2YXIgbj10LnByb3RvdHlwZTtyZXR1cm4gbi5hcHBlbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLm5vZGVzfHwodGhpcy5ub2Rlcz1bXSk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobiksbz0wO288bjtvKyspcltvXT1hcmd1bWVudHNbb107cmV0dXJuKHQ9ZS5wcm90b3R5cGUuYXBwZW5kKS5jYWxsLmFwcGx5KHQsW3RoaXNdLmNvbmNhdChyKSl9LG4ucHJlcGVuZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMubm9kZXN8fCh0aGlzLm5vZGVzPVtdKTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylyW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4odD1lLnByb3RvdHlwZS5wcmVwZW5kKS5jYWxsLmFwcGx5KHQsW3RoaXNdLmNvbmNhdChyKSl9LHR9KG8uZGVmYXVsdCksaT1zO3QuZGVmYXVsdD1pLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jb21tZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuX19wcm90b19fPXR9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9ub2RlLmpzIikpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbjtyZXR1cm4gbj1lLmNhbGwodGhpcyx0KXx8dGhpcyxuLnR5cGU9ImNvbW1lbnQiLG59cmV0dXJuIHIodCxlKSx0fShvLmRlZmF1bHQpLGk9czt0LmRlZmF1bHQ9aSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvY29udGFpbmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxuJiZvKGUsbiksZX1mdW5jdGlvbiBpKGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLl9fcHJvdG9fXz10fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVzJiYoZS5ub2Rlcz1hKGUubm9kZXMpKSxkZWxldGUgZS5zb3VyY2UsZX0pfXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBsPXIobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvZGVjbGFyYXRpb24uanMiKSksdT1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2NvbW1lbnQuanMiKSksYz1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL25vZGUuanMiKSksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWkodCxlKTt2YXIgcj10LnByb3RvdHlwZTtyZXR1cm4gci5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudD10aGlzLHRoaXMubm9kZXMucHVzaChlKSx0aGlzfSxyLmVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5sYXN0RWFjaHx8KHRoaXMubGFzdEVhY2g9MCksdGhpcy5pbmRleGVzfHwodGhpcy5pbmRleGVzPXt9KSx0aGlzLmxhc3RFYWNoKz0xO3ZhciB0PXRoaXMubGFzdEVhY2g7aWYodGhpcy5pbmRleGVzW3RdPTAsdGhpcy5ub2Rlcyl7Zm9yKHZhciBuLHI7dGhpcy5pbmRleGVzW3RdPHRoaXMubm9kZXMubGVuZ3RoJiYobj10aGlzLmluZGV4ZXNbdF0sITEhPT0ocj1lKHRoaXMubm9kZXNbbl0sbikpKTspdGhpcy5pbmRleGVzW3RdKz0xO3JldHVybiBkZWxldGUgdGhpcy5pbmRleGVzW3RdLHJ9fSxyLndhbGs9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0LG4pe3ZhciByO3RyeXtyPWUodCxuKX1jYXRjaChlKXtpZihlLnBvc3Rjc3NOb2RlPXQsZS5zdGFjayYmdC5zb3VyY2UmJi9cblxzezR9YXQgLy50ZXN0KGUuc3RhY2spKXt2YXIgbz10LnNvdXJjZTtlLnN0YWNrPWUuc3RhY2sucmVwbGFjZSgvXG5cc3s0fWF0IC8sIiQmIitvLmlucHV0LmZyb20rIjoiK28uc3RhcnQubGluZSsiOiIrby5zdGFydC5jb2x1bW4rIiQmIil9dGhyb3cgZX1yZXR1cm4hMSE9PXImJnQud2FsayYmKHI9dC53YWxrKGUpKSxyfSl9LHIud2Fsa0RlY2xzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzLndhbGsoZnVuY3Rpb24obixyKXtpZigiZGVjbCI9PT1uLnR5cGUmJmUudGVzdChuLnByb3ApKXJldHVybiB0KG4scil9KTp0aGlzLndhbGsoZnVuY3Rpb24obixyKXtpZigiZGVjbCI9PT1uLnR5cGUmJm4ucHJvcD09PWUpcmV0dXJuIHQobixyKX0pOih0PWUsdGhpcy53YWxrKGZ1bmN0aW9uKGUsbil7aWYoImRlY2wiPT09ZS50eXBlKXJldHVybiB0KGUsbil9KSl9LHIud2Fsa1J1bGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzLndhbGsoZnVuY3Rpb24obixyKXtpZigicnVsZSI9PT1uLnR5cGUmJmUudGVzdChuLnNlbGVjdG9yKSlyZXR1cm4gdChuLHIpfSk6dGhpcy53YWxrKGZ1bmN0aW9uKG4scil7aWYoInJ1bGUiPT09bi50eXBlJiZuLnNlbGVjdG9yPT09ZSlyZXR1cm4gdChuLHIpfSk6KHQ9ZSx0aGlzLndhbGsoZnVuY3Rpb24oZSxuKXtpZigicnVsZSI9PT1lLnR5cGUpcmV0dXJuIHQoZSxuKX0pKX0sci53YWxrQXRSdWxlcz1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UgaW5zdGFuY2VvZiBSZWdFeHA/dGhpcy53YWxrKGZ1bmN0aW9uKG4scil7aWYoImF0cnVsZSI9PT1uLnR5cGUmJmUudGVzdChuLm5hbWUpKXJldHVybiB0KG4scil9KTp0aGlzLndhbGsoZnVuY3Rpb24obixyKXtpZigiYXRydWxlIj09PW4udHlwZSYmbi5uYW1lPT09ZSlyZXR1cm4gdChuLHIpfSk6KHQ9ZSx0aGlzLndhbGsoZnVuY3Rpb24oZSxuKXtpZigiYXRydWxlIj09PWUudHlwZSlyZXR1cm4gdChlLG4pfSkpfSxyLndhbGtDb21tZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKHQsbil7aWYoImNvbW1lbnQiPT09dC50eXBlKXJldHVybiBlKHQsbil9KX0sci5hcHBlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylmb3IodmFyIG89dFtyXSxzPXRoaXMubm9ybWFsaXplKG8sdGhpcy5sYXN0KSxpPXMsYT1BcnJheS5pc0FycmF5KGkpLGw9MCxpPWE/aTppW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgdTtpZihhKXtpZihsPj1pLmxlbmd0aClicmVhazt1PWlbbCsrXX1lbHNle2lmKGw9aS5uZXh0KCksbC5kb25lKWJyZWFrO3U9bC52YWx1ZX12YXIgYz11O3RoaXMubm9kZXMucHVzaChjKX1yZXR1cm4gdGhpc30sci5wcmVwZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dD10LnJldmVyc2UoKTtmb3IodmFyIHI9dCxvPUFycmF5LmlzQXJyYXkocikscz0wLHI9bz9yOnJbU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBpO2lmKG8pe2lmKHM+PXIubGVuZ3RoKWJyZWFrO2k9cltzKytdfWVsc2V7aWYocz1yLm5leHQoKSxzLmRvbmUpYnJlYWs7aT1zLnZhbHVlfWZvcih2YXIgYT1pLGw9dGhpcy5ub3JtYWxpemUoYSx0aGlzLmZpcnN0LCJwcmVwZW5kIikucmV2ZXJzZSgpLHU9bCxjPUFycmF5LmlzQXJyYXkodSksZD0wLHU9Yz91OnVbU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBfO2lmKGMpe2lmKGQ+PXUubGVuZ3RoKWJyZWFrO189dVtkKytdfWVsc2V7aWYoZD11Lm5leHQoKSxkLmRvbmUpYnJlYWs7Xz1kLnZhbHVlfXZhciBwPV87dGhpcy5ub2Rlcy51bnNoaWZ0KHApfWZvcih2YXIgZiBpbiB0aGlzLmluZGV4ZXMpdGhpcy5pbmRleGVzW2ZdPXRoaXMuaW5kZXhlc1tmXStsLmxlbmd0aH1yZXR1cm4gdGhpc30sci5jbGVhblJhd3M9ZnVuY3Rpb24odCl7aWYoZS5wcm90b3R5cGUuY2xlYW5SYXdzLmNhbGwodGhpcyx0KSx0aGlzLm5vZGVzKWZvcih2YXIgbj10aGlzLm5vZGVzLHI9QXJyYXkuaXNBcnJheShuKSxvPTAsbj1yP246bltTeW1ib2wuaXRlcmF0b3JdKCk7Oyl7dmFyIHM7aWYocil7aWYobz49bi5sZW5ndGgpYnJlYWs7cz1uW28rK119ZWxzZXtpZihvPW4ubmV4dCgpLG8uZG9uZSlicmVhaztzPW8udmFsdWV9dmFyIGk9cztpLmNsZWFuUmF3cyh0KX19LHIuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCl7ZT10aGlzLmluZGV4KGUpO2Zvcih2YXIgbj0wPT09ZSYmInByZXBlbmQiLHI9dGhpcy5ub3JtYWxpemUodCx0aGlzLm5vZGVzW2VdLG4pLnJldmVyc2UoKSxvPXIscz1BcnJheS5pc0FycmF5KG8pLGk9MCxvPXM/bzpvW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgYTtpZihzKXtpZihpPj1vLmxlbmd0aClicmVhazthPW9baSsrXX1lbHNle2lmKGk9by5uZXh0KCksaS5kb25lKWJyZWFrO2E9aS52YWx1ZX12YXIgbD1hO3RoaXMubm9kZXMuc3BsaWNlKGUsMCxsKX12YXIgdTtmb3IodmFyIGMgaW4gdGhpcy5pbmRleGVzKXU9dGhpcy5pbmRleGVzW2NdLGU8PXUmJih0aGlzLmluZGV4ZXNbY109dStyLmxlbmd0aCk7cmV0dXJuIHRoaXN9LHIuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24oZSx0KXtlPXRoaXMuaW5kZXgoZSk7Zm9yKHZhciBuPXRoaXMubm9ybWFsaXplKHQsdGhpcy5ub2Rlc1tlXSkucmV2ZXJzZSgpLHI9bixvPUFycmF5LmlzQXJyYXkocikscz0wLHI9bz9yOnJbU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBpO2lmKG8pe2lmKHM+PXIubGVuZ3RoKWJyZWFrO2k9cltzKytdfWVsc2V7aWYocz1yLm5leHQoKSxzLmRvbmUpYnJlYWs7aT1zLnZhbHVlfXZhciBhPWk7dGhpcy5ub2Rlcy5zcGxpY2UoZSsxLDAsYSl9dmFyIGw7Zm9yKHZhciB1IGluIHRoaXMuaW5kZXhlcylsPXRoaXMuaW5kZXhlc1t1XSxlPGwmJih0aGlzLmluZGV4ZXNbdV09bCtuLmxlbmd0aCk7cmV0dXJuIHRoaXN9LHIucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7ZT10aGlzLmluZGV4KGUpLHRoaXMubm9kZXNbZV0ucGFyZW50PXZvaWQgMCx0aGlzLm5vZGVzLnNwbGljZShlLDEpO3ZhciB0O2Zvcih2YXIgbiBpbiB0aGlzLmluZGV4ZXMpKHQ9dGhpcy5pbmRleGVzW25dKT49ZSYmKHRoaXMuaW5kZXhlc1tuXT10LTEpO3JldHVybiB0aGlzfSxyLnJlbW92ZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLm5vZGVzLHQ9QXJyYXkuaXNBcnJheShlKSxuPTAsZT10P2U6ZVtTeW1ib2wuaXRlcmF0b3JdKCk7Oyl7dmFyIHI7aWYodCl7aWYobj49ZS5sZW5ndGgpYnJlYWs7cj1lW24rK119ZWxzZXtpZihuPWUubmV4dCgpLG4uZG9uZSlicmVhaztyPW4udmFsdWV9ci5wYXJlbnQ9dm9pZCAwfXJldHVybiB0aGlzLm5vZGVzPVtdLHRoaXN9LHIucmVwbGFjZVZhbHVlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksdGhpcy53YWxrRGVjbHMoZnVuY3Rpb24ocil7dC5wcm9wcyYmLTE9PT10LnByb3BzLmluZGV4T2Yoci5wcm9wKXx8dC5mYXN0JiYtMT09PXIudmFsdWUuaW5kZXhPZih0LmZhc3QpfHwoci52YWx1ZT1yLnZhbHVlLnJlcGxhY2UoZSxuKSl9KSx0aGlzfSxyLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGVzLmV2ZXJ5KGUpfSxyLnNvbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZXMuc29tZShlKX0sci5pbmRleD1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZTp0aGlzLm5vZGVzLmluZGV4T2YoZSl9LHIubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2U9YShuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9wYXJzZS5qcyIpKGUpLm5vZGVzKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2U9ZS5zbGljZSgwKTtmb3IodmFyIG89ZSxzPUFycmF5LmlzQXJyYXkobyksaT0wLG89cz9vOm9bU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBjO2lmKHMpe2lmKGk+PW8ubGVuZ3RoKWJyZWFrO2M9b1tpKytdfWVsc2V7aWYoaT1vLm5leHQoKSxpLmRvbmUpYnJlYWs7Yz1pLnZhbHVlfXZhciBkPWM7ZC5wYXJlbnQmJmQucGFyZW50LnJlbW92ZUNoaWxkKGQsImlnbm9yZSIpfX1lbHNlIGlmKCJyb290Ij09PWUudHlwZSl7ZT1lLm5vZGVzLnNsaWNlKDApO2Zvcih2YXIgXz1lLHA9QXJyYXkuaXNBcnJheShfKSxmPTAsXz1wP186X1tTeW1ib2wuaXRlcmF0b3JdKCk7Oyl7dmFyIG07aWYocCl7aWYoZj49Xy5sZW5ndGgpYnJlYWs7bT1fW2YrK119ZWxzZXtpZihmPV8ubmV4dCgpLGYuZG9uZSlicmVhazttPWYudmFsdWV9dmFyIGg9bTtoLnBhcmVudCYmaC5wYXJlbnQucmVtb3ZlQ2hpbGQoaCwiaWdub3JlIil9fWVsc2UgaWYoZS50eXBlKWU9W2VdO2Vsc2UgaWYoZS5wcm9wKXtpZih2b2lkIDA9PT1lLnZhbHVlKXRocm93IG5ldyBFcnJvcigiVmFsdWUgZmllbGQgaXMgbWlzc2VkIGluIG5vZGUgY3JlYXRpb24iKTsic3RyaW5nIiE9dHlwZW9mIGUudmFsdWUmJihlLnZhbHVlPVN0cmluZyhlLnZhbHVlKSksZT1bbmV3IGwuZGVmYXVsdChlKV19ZWxzZSBpZihlLnNlbGVjdG9yKXt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9ydWxlLmpzIik7ZT1bbmV3IGcoZSldfWVsc2UgaWYoZS5uYW1lKXt2YXIgYj1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9hdC1ydWxlLmpzIik7ZT1bbmV3IGIoZSldfWVsc2V7aWYoIWUudGV4dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSB0eXBlIGluIG5vZGUgY3JlYXRpb24iKTtlPVtuZXcgdS5kZWZhdWx0KGUpXX1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSx2b2lkIDA9PT1lLnJhd3MuYmVmb3JlJiZ0JiZ2b2lkIDAhPT10LnJhd3MuYmVmb3JlJiYoZS5yYXdzLmJlZm9yZT10LnJhd3MuYmVmb3JlLnJlcGxhY2UoL1teXHNdL2csIiIpKSxlLnBhcmVudD1yLGV9KX0scyh0LFt7a2V5OiJmaXJzdCIsZ2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlcylyZXR1cm4gdGhpcy5ub2Rlc1swXX19LHtrZXk6Imxhc3QiLGdldDpmdW5jdGlvbigpe2lmKHRoaXMubm9kZXMpcmV0dXJuIHRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGgtMV19fV0pLHR9KGMuZGVmYXVsdCksXz1kO3QuZGVmYXVsdD1fLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jc3Mtc3ludGF4LWVycm9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuX19wcm90b19fPXR9ZnVuY3Rpb24gcyhlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gaShlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybihpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbChlLGFyZ3VtZW50cyxkKHRoaXMpLmNvbnN0cnVjdG9yKX1pZihudWxsPT09ZXx8IXUoZSkpcmV0dXJuIGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT10KXtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7dC5zZXQoZSxuKX1yZXR1cm4gbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksYyhuLGUpfSkoZSl9ZnVuY3Rpb24gYSgpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gbD1hKCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtudWxsXTtyLnB1c2guYXBwbHkocix0KTt2YXIgbz1GdW5jdGlvbi5iaW5kLmFwcGx5KGUscikscz1uZXcgbztyZXR1cm4gbiYmYyhzLG4ucHJvdG90eXBlKSxzfSxsLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiB1KGUpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChlKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9ZnVuY3Rpb24gYyhlLHQpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybihkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgXz1yKG4oNSkpLHA9cihuKDYpKSxmPXIobig3KSksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scixvLGksYSxsKXt2YXIgdTtyZXR1cm4gdT1lLmNhbGwodGhpcyxuKXx8dGhpcyx1Lm5hbWU9IkNzc1N5bnRheEVycm9yIix1LnJlYXNvbj1uLGEmJih1LmZpbGU9YSksaSYmKHUuc291cmNlPWkpLGwmJih1LnBsdWdpbj1sKSx2b2lkIDAhPT1yJiZ2b2lkIDAhPT1vJiYodS5saW5lPXIsdS5jb2x1bW49byksdS5zZXRNZXNzYWdlKCksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHMocyh1KSksdCksdX1vKHQsZSk7dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4uc2V0TWVzc2FnZT1mdW5jdGlvbigpe3RoaXMubWVzc2FnZT10aGlzLnBsdWdpbj90aGlzLnBsdWdpbisiOiAiOiIiLHRoaXMubWVzc2FnZSs9dGhpcy5maWxlP3RoaXMuZmlsZToiPGNzcyBpbnB1dD4iLHZvaWQgMCE9PXRoaXMubGluZSYmKHRoaXMubWVzc2FnZSs9IjoiK3RoaXMubGluZSsiOiIrdGhpcy5jb2x1bW4pLHRoaXMubWVzc2FnZSs9IjogIit0aGlzLnJlYXNvbn0sbi5zaG93U291cmNlQ29kZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlJiZwLmRlZmF1bHQucmVkP3AuZGVmYXVsdC5yZWQuYm9sZCh0KTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuIGUmJnAuZGVmYXVsdC5ncmF5P3AuZGVmYXVsdC5ncmF5KHQpOnR9dmFyIHI9dGhpcztpZighdGhpcy5zb3VyY2UpcmV0dXJuIiI7dmFyIG89dGhpcy5zb3VyY2U7Zi5kZWZhdWx0JiYodm9pZCAwPT09ZSYmKGU9Xy5kZWZhdWx0LnN0ZG91dCksZSYmKG89KDAsZi5kZWZhdWx0KShvKSkpO3ZhciBzPW8uc3BsaXQoL1xyP1xuLyksaT1NYXRoLm1heCh0aGlzLmxpbmUtMywwKSxhPU1hdGgubWluKHRoaXMubGluZSsyLHMubGVuZ3RoKSxsPVN0cmluZyhhKS5sZW5ndGg7cmV0dXJuIHMuc2xpY2UoaSxhKS5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgcz1pKzErbyxhPSIgIisoIiAiK3MpLnNsaWNlKC1sKSsiIHwgIjtpZihzPT09ci5saW5lKXt2YXIgdT1uKGEucmVwbGFjZSgvXGQvZywiICIpKStlLnNsaWNlKDAsci5jb2x1bW4tMSkucmVwbGFjZSgvW15cdF0vZywiICIpO3JldHVybiB0KCI+IikrbihhKStlKyJcbiAiK3UrdCgiXiIpfXJldHVybiIgIituKGEpK2V9KS5qb2luKCJcbiIpfSxuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaG93U291cmNlQ29kZSgpO3JldHVybiBlJiYoZT0iXG5cbiIrZSsiXG4iKSx0aGlzLm5hbWUrIjogIit0aGlzLm1lc3NhZ2UrZX0sdH0oaShFcnJvcikpLGg9bTt0LmRlZmF1bHQ9aCxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvZGVjbGFyYXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5fX3Byb3RvX189dH10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL25vZGUuanMiKSkscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuO3JldHVybiBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzLG4udHlwZT0iZGVjbCIsbn1yZXR1cm4gcih0LGUpLHR9KG8uZGVmYXVsdCksaT1zO3QuZGVmYXVsdD1pLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9pbnB1dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksbiYmbyhlLG4pLGV9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIGk9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jc3Mtc3ludGF4LWVycm9yLmpzIikpLGE9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9wcmV2aW91cy1tYXAuanMiKSksbD1yKG4oIi4vbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIpKSx1PTAsYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksbnVsbD09PWV8fCJvYmplY3QiPT10eXBlb2YgZSYmIWUudG9TdHJpbmcpdGhyb3cgbmV3IEVycm9yKCJQb3N0Q1NTIHJlY2VpdmVkICIrZSsiIGluc3RlYWQgb2YgQ1NTIHN0cmluZyIpO3RoaXMuY3NzPWUudG9TdHJpbmcoKSwiXHVmZWZmIj09PXRoaXMuY3NzWzBdfHwi77++Ij09PXRoaXMuY3NzWzBdPyh0aGlzLmhhc0JPTT0hMCx0aGlzLmNzcz10aGlzLmNzcy5zbGljZSgxKSk6dGhpcy5oYXNCT009ITEsdC5mcm9tJiYoL15cdys6XC9cLy8udGVzdCh0LmZyb20pP3RoaXMuZmlsZT10LmZyb206dGhpcy5maWxlPWwuZGVmYXVsdC5yZXNvbHZlKHQuZnJvbSkpO3ZhciBuPW5ldyBhLmRlZmF1bHQodGhpcy5jc3MsdCk7aWYobi50ZXh0KXt0aGlzLm1hcD1uO3ZhciByPW4uY29uc3VtZXIoKS5maWxlOyF0aGlzLmZpbGUmJnImJih0aGlzLmZpbGU9dGhpcy5tYXBSZXNvbHZlKHIpKX10aGlzLmZpbGV8fCh1Kz0xLHRoaXMuaWQ9IjxpbnB1dCBjc3MgIit1KyI+IiksdGhpcy5tYXAmJih0aGlzLm1hcC5maWxlPXRoaXMuZnJvbSl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuZXJyb3I9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBvLHM9dGhpcy5vcmlnaW4odCxuKTtyZXR1cm4gbz1zP25ldyBpLmRlZmF1bHQoZSxzLmxpbmUscy5jb2x1bW4scy5zb3VyY2Uscy5maWxlLHIucGx1Z2luKTpuZXcgaS5kZWZhdWx0KGUsdCxuLHRoaXMuY3NzLHRoaXMuZmlsZSxyLnBsdWdpbiksby5pbnB1dD17bGluZTp0LGNvbHVtbjpuLHNvdXJjZTp0aGlzLmNzc30sdGhpcy5maWxlJiYoby5pbnB1dC5maWxlPXRoaXMuZmlsZSksb30sdC5vcmlnaW49ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5tYXApcmV0dXJuITE7dmFyIG49dGhpcy5tYXAuY29uc3VtZXIoKSxyPW4ub3JpZ2luYWxQb3NpdGlvbkZvcih7bGluZTplLGNvbHVtbjp0fSk7aWYoIXIuc291cmNlKXJldHVybiExO3ZhciBvPXtmaWxlOnRoaXMubWFwUmVzb2x2ZShyLnNvdXJjZSksbGluZTpyLmxpbmUsY29sdW1uOnIuY29sdW1ufSxzPW4uc291cmNlQ29udGVudEZvcihyLnNvdXJjZSk7cmV0dXJuIHMmJihvLnNvdXJjZT1zKSxvfSx0Lm1hcFJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuL15cdys6XC9cLy8udGVzdChlKT9lOmwuZGVmYXVsdC5yZXNvbHZlKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdHx8Ii4iLGUpfSxzKGUsW3trZXk6ImZyb20iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGV8fHRoaXMuaWR9fV0pLGV9KCksZD1jO3QuZGVmYXVsdD1kLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9sYXp5LXJlc3VsdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksbiYmbyhlLG4pLGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW59dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIGE9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9tYXAtZ2VuZXJhdG9yLmpzIikpLGw9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zdHJpbmdpZnkuanMiKSksdT0ocihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi93YXJuLW9uY2UuanMiKSkscihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9yZXN1bHQuanMiKSkpLGM9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9wYXJzZS5qcyIpKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7dGhpcy5zdHJpbmdpZmllZD0hMSx0aGlzLnByb2Nlc3NlZD0hMTt2YXIgbztpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYicm9vdCI9PT1uLnR5cGUpbz1uO2Vsc2UgaWYobiBpbnN0YW5jZW9mIGV8fG4gaW5zdGFuY2VvZiB1LmRlZmF1bHQpbz1uLnJvb3Qsbi5tYXAmJih2b2lkIDA9PT1yLm1hcCYmKHIubWFwPXt9KSxyLm1hcC5pbmxpbmV8fChyLm1hcC5pbmxpbmU9ITEpLHIubWFwLnByZXY9bi5tYXApO2Vsc2V7dmFyIHM9Yy5kZWZhdWx0O3Iuc3ludGF4JiYocz1yLnN5bnRheC5wYXJzZSksci5wYXJzZXImJihzPXIucGFyc2VyKSxzLnBhcnNlJiYocz1zLnBhcnNlKTt0cnl7bz1zKG4scil9Y2F0Y2goZSl7dGhpcy5lcnJvcj1lfX10aGlzLnJlc3VsdD1uZXcgdS5kZWZhdWx0KHQsbyxyKX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC53YXJuaW5ncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN5bmMoKS53YXJuaW5ncygpfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzfSx0LnRoZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5hc3luYygpLnRoZW4oZSx0KX0sdC5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hc3luYygpLmNhdGNoKGUpfSx0LmZpbmFsbHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKGUsZSl9LHQuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXt0cnl7aWYodGhpcy5lcnJvcj1lLCJDc3NTeW50YXhFcnJvciIhPT1lLm5hbWV8fGUucGx1Z2luKXtpZih0LnBvc3Rjc3NWZXJzaW9uKTt9ZWxzZSBlLnBsdWdpbj10LnBvc3Rjc3NQbHVnaW4sZS5zZXRNZXNzYWdlKCl9Y2F0Y2goZSl7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihlKX19LHQuYXN5bmNUaWNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0aGlzLnBsdWdpbj49dGhpcy5wcm9jZXNzb3IucGx1Z2lucy5sZW5ndGgpcmV0dXJuIHRoaXMucHJvY2Vzc2VkPSEwLGUoKTt0cnl7dmFyIHI9dGhpcy5wcm9jZXNzb3IucGx1Z2luc1t0aGlzLnBsdWdpbl0sbz10aGlzLnJ1bihyKTt0aGlzLnBsdWdpbis9MSxpKG8pP28udGhlbihmdW5jdGlvbigpe24uYXN5bmNUaWNrKGUsdCl9KS5jYXRjaChmdW5jdGlvbihlKXtuLmhhbmRsZUVycm9yKGUsciksbi5wcm9jZXNzZWQ9ITAsdChlKX0pOnRoaXMuYXN5bmNUaWNrKGUsdCl9Y2F0Y2goZSl7dGhpcy5wcm9jZXNzZWQ9ITAsdChlKX19LHQuYXN5bmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnByb2Nlc3NlZD9uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2UuZXJyb3I/bihlLmVycm9yKTp0KGUuc3RyaW5naWZ5KCkpfSk6dGhpcy5wcm9jZXNzaW5nP3RoaXMucHJvY2Vzc2luZzoodGhpcy5wcm9jZXNzaW5nPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7aWYoZS5lcnJvcilyZXR1cm4gbihlLmVycm9yKTtlLnBsdWdpbj0wLGUuYXN5bmNUaWNrKHQsbil9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvY2Vzc2VkPSEwLGUuc3RyaW5naWZ5KCl9KSx0aGlzLnByb2Nlc3NpbmcpfSx0LnN5bmM9ZnVuY3Rpb24oKXtpZih0aGlzLnByb2Nlc3NlZClyZXR1cm4gdGhpcy5yZXN1bHQ7aWYodGhpcy5wcm9jZXNzZWQ9ITAsdGhpcy5wcm9jZXNzaW5nKXRocm93IG5ldyBFcnJvcigiVXNlIHByb2Nlc3MoY3NzKS50aGVuKGNiKSB0byB3b3JrIHdpdGggYXN5bmMgcGx1Z2lucyIpO2lmKHRoaXMuZXJyb3IpdGhyb3cgdGhpcy5lcnJvcjtmb3IodmFyIGU9dGhpcy5yZXN1bHQucHJvY2Vzc29yLnBsdWdpbnMsdD1BcnJheS5pc0FycmF5KGUpLG49MCxlPXQ/ZTplW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgcjtpZih0KXtpZihuPj1lLmxlbmd0aClicmVhaztyPWVbbisrXX1lbHNle2lmKG49ZS5uZXh0KCksbi5kb25lKWJyZWFrO3I9bi52YWx1ZX12YXIgbz1yO2lmKGkodGhpcy5ydW4obykpKXRocm93IG5ldyBFcnJvcigiVXNlIHByb2Nlc3MoY3NzKS50aGVuKGNiKSB0byB3b3JrIHdpdGggYXN5bmMgcGx1Z2lucyIpfXJldHVybiB0aGlzLnJlc3VsdH0sdC5ydW49ZnVuY3Rpb24oZSl7dGhpcy5yZXN1bHQubGFzdFBsdWdpbj1lO3RyeXtyZXR1cm4gZSh0aGlzLnJlc3VsdC5yb290LHRoaXMucmVzdWx0KX1jYXRjaCh0KXt0aHJvdyB0aGlzLmhhbmRsZUVycm9yKHQsZSksdH19LHQuc3RyaW5naWZ5PWZ1bmN0aW9uKCl7aWYodGhpcy5zdHJpbmdpZmllZClyZXR1cm4gdGhpcy5yZXN1bHQ7dGhpcy5zdHJpbmdpZmllZD0hMCx0aGlzLnN5bmMoKTt2YXIgZT10aGlzLnJlc3VsdC5vcHRzLHQ9bC5kZWZhdWx0O2Uuc3ludGF4JiYodD1lLnN5bnRheC5zdHJpbmdpZnkpLGUuc3RyaW5naWZpZXImJih0PWUuc3RyaW5naWZpZXIpLHQuc3RyaW5naWZ5JiYodD10LnN0cmluZ2lmeSk7dmFyIG49bmV3IGEuZGVmYXVsdCh0LHRoaXMucmVzdWx0LnJvb3QsdGhpcy5yZXN1bHQub3B0cykscj1uLmdlbmVyYXRlKCk7cmV0dXJuIHRoaXMucmVzdWx0LmNzcz1yWzBdLHRoaXMucmVzdWx0Lm1hcD1yWzFdLHRoaXMucmVzdWx0fSxzKGUsW3trZXk6InByb2Nlc3NvciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnByb2Nlc3Nvcn19LHtrZXk6Im9wdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlc3VsdC5vcHRzfX0se2tleToiY3NzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jc3N9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jb250ZW50fX0se2tleToibWFwIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5tYXB9fSx7a2V5OiJyb290IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW5jKCkucm9vdH19LHtrZXk6Im1lc3NhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW5jKCkubWVzc2FnZXN9fV0pLGV9KCksXz1kO3QuZGVmYXVsdD1fLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9saXN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciByPXtzcGxpdDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLG89IiIscz0hMSxpPTAsYT0hMSxsPSExLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGM9ZVt1XTthP2w/bD0hMToiXFwiPT09Yz9sPSEwOmM9PT1hJiYoYT0hMSk6JyInPT09Y3x8IiciPT09Yz9hPWM6IigiPT09Yz9pKz0xOiIpIj09PWM/aT4wJiYoaS09MSk6MD09PWkmJi0xIT09dC5pbmRleE9mKGMpJiYocz0hMCkscz8oIiIhPT1vJiZyLnB1c2goby50cmltKCkpLG89IiIscz0hMSk6bys9Y31yZXR1cm4obnx8IiIhPT1vKSYmci5wdXNoKG8udHJpbSgpKSxyfSxzcGFjZTpmdW5jdGlvbihlKXt2YXIgdD1bIiAiLCJcbiIsIlx0Il07cmV0dXJuIHIuc3BsaXQoZSx0KX0sY29tbWE6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuc3BsaXQoZSxbIiwiXSwhMCl9fSxvPXI7dC5kZWZhdWx0PW8sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL21hcC1nZW5lcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBzPW8obigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9zb3VyY2UtbWFwLmpzIikpLGk9byhuKCIuL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiKSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuc3RyaW5naWZ5PWUsdGhpcy5tYXBPcHRzPW4ubWFwfHx7fSx0aGlzLnJvb3Q9dCx0aGlzLm9wdHM9bn12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5pc01hcD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLm9wdHMubWFwPyEhdGhpcy5vcHRzLm1hcDp0aGlzLnByZXZpb3VzKCkubGVuZ3RoPjB9LHQucHJldmlvdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnByZXZpb3VzTWFwc3x8KHRoaXMucHJldmlvdXNNYXBzPVtdLHRoaXMucm9vdC53YWxrKGZ1bmN0aW9uKHQpe2lmKHQuc291cmNlJiZ0LnNvdXJjZS5pbnB1dC5tYXApe3ZhciBuPXQuc291cmNlLmlucHV0Lm1hcDstMT09PWUucHJldmlvdXNNYXBzLmluZGV4T2YobikmJmUucHJldmlvdXNNYXBzLnB1c2gobil9fSkpLHRoaXMucHJldmlvdXNNYXBzfSx0LmlzSW5saW5lPWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcy5tYXBPcHRzLmlubGluZSlyZXR1cm4gdGhpcy5tYXBPcHRzLmlubGluZTt2YXIgZT10aGlzLm1hcE9wdHMuYW5ub3RhdGlvbjtyZXR1cm4odm9pZCAwPT09ZXx8ITA9PT1lKSYmKCF0aGlzLnByZXZpb3VzKCkubGVuZ3RofHx0aGlzLnByZXZpb3VzKCkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmxpbmV9KSl9LHQuaXNTb3VyY2VzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLm1hcE9wdHMuc291cmNlc0NvbnRlbnQ/dGhpcy5tYXBPcHRzLnNvdXJjZXNDb250ZW50OiF0aGlzLnByZXZpb3VzKCkubGVuZ3RofHx0aGlzLnByZXZpb3VzKCkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS53aXRoQ29udGVudCgpfSl9LHQuY2xlYXJBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7aWYoITEhPT10aGlzLm1hcE9wdHMuYW5ub3RhdGlvbilmb3IodmFyIGUsdD10aGlzLnJvb3Qubm9kZXMubGVuZ3RoLTE7dD49MDt0LS0pZT10aGlzLnJvb3Qubm9kZXNbdF0sImNvbW1lbnQiPT09ZS50eXBlJiYwPT09ZS50ZXh0LmluZGV4T2YoIiMgc291cmNlTWFwcGluZ1VSTD0iKSYmdGhpcy5yb290LnJlbW92ZUNoaWxkKHQpfSx0LnNldFNvdXJjZXNDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9O3RoaXMucm9vdC53YWxrKGZ1bmN0aW9uKG4pe2lmKG4uc291cmNlKXt2YXIgcj1uLnNvdXJjZS5pbnB1dC5mcm9tO2lmKHImJiF0W3JdKXt0W3JdPSEwO3ZhciBvPWUucmVsYXRpdmUocik7ZS5tYXAuc2V0U291cmNlQ29udGVudChvLG4uc291cmNlLmlucHV0LmNzcyl9fX0pfSx0LmFwcGx5UHJldk1hcHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wcmV2aW91cygpLHQ9QXJyYXkuaXNBcnJheShlKSxuPTAsZT10P2U6ZVtTeW1ib2wuaXRlcmF0b3JdKCk7Oyl7dmFyIHI7aWYodCl7aWYobj49ZS5sZW5ndGgpYnJlYWs7cj1lW24rK119ZWxzZXtpZihuPWUubmV4dCgpLG4uZG9uZSlicmVhaztyPW4udmFsdWV9dmFyIG89cixhPXRoaXMucmVsYXRpdmUoby5maWxlKSxsPW8ucm9vdHx8aS5kZWZhdWx0LmRpcm5hbWUoby5maWxlKSx1PXZvaWQgMDshMT09PXRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudD8odT1uZXcgcy5kZWZhdWx0LlNvdXJjZU1hcENvbnN1bWVyKG8udGV4dCksdS5zb3VyY2VzQ29udGVudCYmKHUuc291cmNlc0NvbnRlbnQ9dS5zb3VyY2VzQ29udGVudC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pKSk6dT1vLmNvbnN1bWVyKCksdGhpcy5tYXAuYXBwbHlTb3VyY2VNYXAodSxhLHRoaXMucmVsYXRpdmUobCkpfX0sdC5pc0Fubm90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNJbmxpbmUoKXx8KHZvaWQgMCE9PXRoaXMubWFwT3B0cy5hbm5vdGF0aW9uP3RoaXMubWFwT3B0cy5hbm5vdGF0aW9uOiF0aGlzLnByZXZpb3VzKCkubGVuZ3RofHx0aGlzLnByZXZpb3VzKCkuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hbm5vdGF0aW9ufSkpfSx0LnRvQmFzZTY0PWZ1bmN0aW9uKGUpe3JldHVybiByP3IuZnJvbShlKS50b1N0cmluZygiYmFzZTY0Iik6d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKSl9LHQuYWRkQW5ub3RhdGlvbj1mdW5jdGlvbigpe3ZhciBlO2U9dGhpcy5pc0lubGluZSgpPyJkYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrdGhpcy50b0Jhc2U2NCh0aGlzLm1hcC50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uP3RoaXMubWFwT3B0cy5hbm5vdGF0aW9uOnRoaXMub3V0cHV0RmlsZSgpKyIubWFwIjt2YXIgdD0iXG4iOy0xIT09dGhpcy5jc3MuaW5kZXhPZigiXHJcbiIpJiYodD0iXHJcbiIpLHRoaXMuY3NzKz10KyIvKiMgc291cmNlTWFwcGluZ1VSTD0iK2UrIiAqLyJ9LHQub3V0cHV0RmlsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdHMudG8/dGhpcy5yZWxhdGl2ZSh0aGlzLm9wdHMudG8pOnRoaXMub3B0cy5mcm9tP3RoaXMucmVsYXRpdmUodGhpcy5vcHRzLmZyb20pOiJ0by5jc3MifSx0LmdlbmVyYXRlTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTdHJpbmcoKSx0aGlzLmlzU291cmNlc0NvbnRlbnQoKSYmdGhpcy5zZXRTb3VyY2VzQ29udGVudCgpLHRoaXMucHJldmlvdXMoKS5sZW5ndGg+MCYmdGhpcy5hcHBseVByZXZNYXBzKCksdGhpcy5pc0Fubm90YXRpb24oKSYmdGhpcy5hZGRBbm5vdGF0aW9uKCksdGhpcy5pc0lubGluZSgpP1t0aGlzLmNzc106W3RoaXMuY3NzLHRoaXMubWFwXX0sdC5yZWxhdGl2ZT1mdW5jdGlvbihlKXtpZigwPT09ZS5pbmRleE9mKCI8IikpcmV0dXJuIGU7aWYoL15cdys6XC9cLy8udGVzdChlKSlyZXR1cm4gZTt2YXIgdD10aGlzLm9wdHMudG8/aS5kZWZhdWx0LmRpcm5hbWUodGhpcy5vcHRzLnRvKToiLiI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbiYmKHQ9aS5kZWZhdWx0LmRpcm5hbWUoaS5kZWZhdWx0LnJlc29sdmUodCx0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbikpKSxlPWkuZGVmYXVsdC5yZWxhdGl2ZSh0LGUpLCJcXCI9PT1pLmRlZmF1bHQuc2VwP2UucmVwbGFjZSgvXFwvZywiLyIpOmV9LHQuc291cmNlUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBPcHRzLmZyb20/dGhpcy5tYXBPcHRzLmZyb206dGhpcy5yZWxhdGl2ZShlLnNvdXJjZS5pbnB1dC5mcm9tKX0sdC5nZW5lcmF0ZVN0cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jc3M9IiIsdGhpcy5tYXA9bmV3IHMuZGVmYXVsdC5Tb3VyY2VNYXBHZW5lcmF0b3Ioe2ZpbGU6dGhpcy5vdXRwdXRGaWxlKCl9KTt2YXIgdCxuLHI9MSxvPTE7dGhpcy5zdHJpbmdpZnkodGhpcy5yb290LGZ1bmN0aW9uKHMsaSxhKXtpZihlLmNzcys9cyxpJiYiZW5kIiE9PWEmJihpLnNvdXJjZSYmaS5zb3VyY2Uuc3RhcnQ/ZS5tYXAuYWRkTWFwcGluZyh7c291cmNlOmUuc291cmNlUGF0aChpKSxnZW5lcmF0ZWQ6e2xpbmU6cixjb2x1bW46by0xfSxvcmlnaW5hbDp7bGluZTppLnNvdXJjZS5zdGFydC5saW5lLGNvbHVtbjppLnNvdXJjZS5zdGFydC5jb2x1bW4tMX19KTplLm1hcC5hZGRNYXBwaW5nKHtzb3VyY2U6IjxubyBzb3VyY2U+IixvcmlnaW5hbDp7bGluZToxLGNvbHVtbjowfSxnZW5lcmF0ZWQ6e2xpbmU6cixjb2x1bW46by0xfX0pKSx0PXMubWF0Y2goL1xuL2cpLHQ/KHIrPXQubGVuZ3RoLG49cy5sYXN0SW5kZXhPZigiXG4iKSxvPXMubGVuZ3RoLW4pOm8rPXMubGVuZ3RoLGkmJiJzdGFydCIhPT1hKXt2YXIgbD1pLnBhcmVudHx8e3Jhd3M6e319OygiZGVjbCIhPT1pLnR5cGV8fGkhPT1sLmxhc3R8fGwucmF3cy5zZW1pY29sb24pJiYoaS5zb3VyY2UmJmkuc291cmNlLmVuZD9lLm1hcC5hZGRNYXBwaW5nKHtzb3VyY2U6ZS5zb3VyY2VQYXRoKGkpLGdlbmVyYXRlZDp7bGluZTpyLGNvbHVtbjpvLTJ9LG9yaWdpbmFsOntsaW5lOmkuc291cmNlLmVuZC5saW5lLGNvbHVtbjppLnNvdXJjZS5lbmQuY29sdW1uLTF9fSk6ZS5tYXAuYWRkTWFwcGluZyh7c291cmNlOiI8bm8gc291cmNlPiIsb3JpZ2luYWw6e2xpbmU6MSxjb2x1bW46MH0sZ2VuZXJhdGVkOntsaW5lOnIsY29sdW1uOm8tMX19KSl9fSl9LHQuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLmNsZWFyQW5ub3RhdGlvbigpLHRoaXMuaXNNYXAoKSlyZXR1cm4gdGhpcy5nZW5lcmF0ZU1hcCgpO3ZhciBlPSIiO3JldHVybiB0aGlzLnN0cmluZ2lmeSh0aGlzLnJvb3QsZnVuY3Rpb24odCl7ZSs9dH0pLFtlXX0sZX0oKSxsPWE7dC5kZWZhdWx0PWwsZS5leHBvcnRzPXQuZGVmYXVsdH0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyKX0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL25vZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPW5ldyBlLmNvbnN0cnVjdG9yO2Zvcih2YXIgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe3ZhciBzPWVbcl0saT10eXBlb2YgczsicGFyZW50Ij09PXImJiJvYmplY3QiPT09aT90JiYobltyXT10KToic291cmNlIj09PXI/bltyXT1zOnMgaW5zdGFuY2VvZiBBcnJheT9uW3JdPXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvKGUsbil9KTooIm9iamVjdCI9PT1pJiZudWxsIT09cyYmKHM9byhzKSksbltyXT1zKX1yZXR1cm4gbn10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgcz1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2Nzcy1zeW50YXgtZXJyb3IuanMiKSksaT1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3N0cmluZ2lmaWVyLmpzIikpLGE9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zdHJpbmdpZnkuanMiKSksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmF3cz17fTtmb3IodmFyIHQgaW4gZSl0aGlzW3RdPWVbdF19dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuZXJyb3I9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksdGhpcy5zb3VyY2Upe3ZhciBuPXRoaXMucG9zaXRpb25CeSh0KTtyZXR1cm4gdGhpcy5zb3VyY2UuaW5wdXQuZXJyb3IoZSxuLmxpbmUsbi5jb2x1bW4sdCl9cmV0dXJuIG5ldyBzLmRlZmF1bHQoZSl9LHQud2Fybj1mdW5jdGlvbihlLHQsbil7dmFyIHI9e25vZGU6dGhpc307Zm9yKHZhciBvIGluIG4pcltvXT1uW29dO3JldHVybiBlLndhcm4odCxyKX0sdC5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPWEuZGVmYXVsdCksZS5zdHJpbmdpZnkmJihlPWUuc3RyaW5naWZ5KTt2YXIgdD0iIjtyZXR1cm4gZSh0aGlzLGZ1bmN0aW9uKGUpe3QrPWV9KSx0fSx0LmNsb25lPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD1vKHRoaXMpO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gdH0sdC5jbG9uZUJlZm9yZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHQ9dGhpcy5jbG9uZShlKTtyZXR1cm4gdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsdCksdH0sdC5jbG9uZUFmdGVyPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD10aGlzLmNsb25lKGUpO3JldHVybiB0aGlzLnBhcmVudC5pbnNlcnRBZnRlcih0aGlzLHQpLHR9LHQucmVwbGFjZVdpdGg9ZnVuY3Rpb24oKXtpZih0aGlzLnBhcmVudCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07dGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsbyl9dGhpcy5yZW1vdmUoKX1yZXR1cm4gdGhpc30sdC5uZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5wYXJlbnQpe3ZhciBlPXRoaXMucGFyZW50LmluZGV4KHRoaXMpO3JldHVybiB0aGlzLnBhcmVudC5ub2Rlc1tlKzFdfX0sdC5wcmV2PWZ1bmN0aW9uKCl7aWYodGhpcy5wYXJlbnQpe3ZhciBlPXRoaXMucGFyZW50LmluZGV4KHRoaXMpO3JldHVybiB0aGlzLnBhcmVudC5ub2Rlc1tlLTFdfX0sdC5iZWZvcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLGUpLHRoaXN9LHQuYWZ0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50Lmluc2VydEFmdGVyKHRoaXMsZSksdGhpc30sdC50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17fTtmb3IodmFyIHQgaW4gdGhpcylpZih0aGlzLmhhc093blByb3BlcnR5KHQpJiYicGFyZW50IiE9PXQpe3ZhciBuPXRoaXNbdF07biBpbnN0YW5jZW9mIEFycmF5P2VbdF09bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZlLnRvSlNPTj9lLnRvSlNPTigpOmV9KToib2JqZWN0Ij09dHlwZW9mIG4mJm4udG9KU09OP2VbdF09bi50b0pTT04oKTplW3RdPW59cmV0dXJuIGV9LHQucmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG5ldyBpLmRlZmF1bHQpLnJhdyh0aGlzLGUsdCl9LHQucm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzO2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSx0LmNsZWFuUmF3cz1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5yYXdzLmJlZm9yZSxkZWxldGUgdGhpcy5yYXdzLmFmdGVyLGV8fGRlbGV0ZSB0aGlzLnJhd3MuYmV0d2Vlbn0sdC5wb3NpdGlvbkluc2lkZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50b1N0cmluZygpLG49dGhpcy5zb3VyY2Uuc3RhcnQuY29sdW1uLHI9dGhpcy5zb3VyY2Uuc3RhcnQubGluZSxvPTA7bzxlO28rKykiXG4iPT09dFtvXT8obj0xLHIrPTEpOm4rPTE7cmV0dXJue2xpbmU6cixjb2x1bW46bn19LHQucG9zaXRpb25CeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNvdXJjZS5zdGFydDtpZihlLmluZGV4KXQ9dGhpcy5wb3NpdGlvbkluc2lkZShlLmluZGV4KTtlbHNlIGlmKGUud29yZCl7dmFyIG49dGhpcy50b1N0cmluZygpLmluZGV4T2YoZS53b3JkKTstMSE9PW4mJih0PXRoaXMucG9zaXRpb25JbnNpZGUobikpfXJldHVybiB0fSxlfSgpLHU9bDt0LmRlZmF1bHQ9dSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcGFyc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPW5ldyBpLmRlZmF1bHQoZSx0KSxyPW5ldyBzLmRlZmF1bHQobik7dHJ5e3IucGFyc2UoKX1jYXRjaChlKXt0aHJvdyBlfXJldHVybiByLnJvb3R9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIHM9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9wYXJzZXIuanMiKSksaT1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2lucHV0LmpzIikpLGE9bzt0LmRlZmF1bHQ9YSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcGFyc2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBvPXIobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvZGVjbGFyYXRpb24uanMiKSkscz1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Rva2VuaXplLmpzIikpLGk9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jb21tZW50LmpzIikpLGE9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9hdC1ydWxlLmpzIikpLGw9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9yb290LmpzIikpLHU9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9ydWxlLmpzIikpLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5wdXQ9ZSx0aGlzLnJvb3Q9bmV3IGwuZGVmYXVsdCx0aGlzLmN1cnJlbnQ9dGhpcy5yb290LHRoaXMuc3BhY2VzPSIiLHRoaXMuc2VtaWNvbG9uPSExLHRoaXMuY3JlYXRlVG9rZW5pemVyKCksdGhpcy5yb290LnNvdXJjZT17aW5wdXQ6ZSxzdGFydDp7bGluZToxLGNvbHVtbjoxfX19dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlVG9rZW5pemVyPWZ1bmN0aW9uKCl7dGhpcy50b2tlbml6ZXI9KDAscy5kZWZhdWx0KSh0aGlzLmlucHV0KX0sdC5wYXJzZT1mdW5jdGlvbigpe2Zvcih2YXIgZTshdGhpcy50b2tlbml6ZXIuZW5kT2ZGaWxlKCk7KXN3aXRjaChlPXRoaXMudG9rZW5pemVyLm5leHRUb2tlbigpLGVbMF0pe2Nhc2Uic3BhY2UiOnRoaXMuc3BhY2VzKz1lWzFdO2JyZWFrO2Nhc2UiOyI6dGhpcy5mcmVlU2VtaWNvbG9uKGUpO2JyZWFrO2Nhc2UifSI6dGhpcy5lbmQoZSk7YnJlYWs7Y2FzZSJjb21tZW50Ijp0aGlzLmNvbW1lbnQoZSk7YnJlYWs7Y2FzZSJhdC13b3JkIjp0aGlzLmF0cnVsZShlKTticmVhaztjYXNlInsiOnRoaXMuZW1wdHlSdWxlKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5vdGhlcihlKX10aGlzLmVuZEZpbGUoKX0sdC5jb21tZW50PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBpLmRlZmF1bHQ7dGhpcy5pbml0KHQsZVsyXSxlWzNdKSx0LnNvdXJjZS5lbmQ9e2xpbmU6ZVs0XSxjb2x1bW46ZVs1XX07dmFyIG49ZVsxXS5zbGljZSgyLC0yKTtpZigvXlxzKiQvLnRlc3QobikpdC50ZXh0PSIiLHQucmF3cy5sZWZ0PW4sdC5yYXdzLnJpZ2h0PSIiO2Vsc2V7dmFyIHI9bi5tYXRjaCgvXihccyopKFteXSpbXlxzXSkoXHMqKSQvKTt0LnRleHQ9clsyXSx0LnJhd3MubGVmdD1yWzFdLHQucmF3cy5yaWdodD1yWzNdfX0sdC5lbXB0eVJ1bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHUuZGVmYXVsdDt0aGlzLmluaXQodCxlWzJdLGVbM10pLHQuc2VsZWN0b3I9IiIsdC5yYXdzLmJldHdlZW49IiIsdGhpcy5jdXJyZW50PXR9LHQub3RoZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49bnVsbCxyPSExLG89bnVsbCxzPVtdLGk9W10sYT1lO2E7KXtpZihuPWFbMF0saS5wdXNoKGEpLCIoIj09PW58fCJbIj09PW4pb3x8KG89YSkscy5wdXNoKCIoIj09PW4/IikiOiJdIik7ZWxzZSBpZigwPT09cy5sZW5ndGgpe2lmKCI7Ij09PW4pe2lmKHIpcmV0dXJuIHZvaWQgdGhpcy5kZWNsKGkpO2JyZWFrfWlmKCJ7Ij09PW4pcmV0dXJuIHZvaWQgdGhpcy5ydWxlKGkpO2lmKCJ9Ij09PW4pe3RoaXMudG9rZW5pemVyLmJhY2soaS5wb3AoKSksdD0hMDticmVha30iOiI9PT1uJiYocj0hMCl9ZWxzZSBuPT09c1tzLmxlbmd0aC0xXSYmKHMucG9wKCksMD09PXMubGVuZ3RoJiYobz1udWxsKSk7YT10aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKX1pZih0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSYmKHQ9ITApLHMubGVuZ3RoPjAmJnRoaXMudW5jbG9zZWRCcmFja2V0KG8pLHQmJnIpe2Zvcig7aS5sZW5ndGgmJigic3BhY2UiPT09KGE9aVtpLmxlbmd0aC0xXVswXSl8fCJjb21tZW50Ij09PWEpOyl0aGlzLnRva2VuaXplci5iYWNrKGkucG9wKCkpO3RoaXMuZGVjbChpKX1lbHNlIHRoaXMudW5rbm93bldvcmQoaSl9LHQucnVsZT1mdW5jdGlvbihlKXtlLnBvcCgpO3ZhciB0PW5ldyB1LmRlZmF1bHQ7dGhpcy5pbml0KHQsZVswXVsyXSxlWzBdWzNdKSx0LnJhd3MuYmV0d2Vlbj10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZChlKSx0aGlzLnJhdyh0LCJzZWxlY3RvciIsZSksdGhpcy5jdXJyZW50PXR9LHQuZGVjbD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgby5kZWZhdWx0O3RoaXMuaW5pdCh0KTt2YXIgbj1lW2UubGVuZ3RoLTFdO2ZvcigiOyI9PT1uWzBdJiYodGhpcy5zZW1pY29sb249ITAsZS5wb3AoKSksbls0XT90LnNvdXJjZS5lbmQ9e2xpbmU6bls0XSxjb2x1bW46bls1XX06dC5zb3VyY2UuZW5kPXtsaW5lOm5bMl0sY29sdW1uOm5bM119OyJ3b3JkIiE9PWVbMF1bMF07KTE9PT1lLmxlbmd0aCYmdGhpcy51bmtub3duV29yZChlKSx0LnJhd3MuYmVmb3JlKz1lLnNoaWZ0KClbMV07Zm9yKHQuc291cmNlLnN0YXJ0PXtsaW5lOmVbMF1bMl0sY29sdW1uOmVbMF1bM119LHQucHJvcD0iIjtlLmxlbmd0aDspe3ZhciByPWVbMF1bMF07aWYoIjoiPT09cnx8InNwYWNlIj09PXJ8fCJjb21tZW50Ij09PXIpYnJlYWs7dC5wcm9wKz1lLnNoaWZ0KClbMV19dC5yYXdzLmJldHdlZW49IiI7Zm9yKHZhciBzO2UubGVuZ3RoOyl7aWYocz1lLnNoaWZ0KCksIjoiPT09c1swXSl7dC5yYXdzLmJldHdlZW4rPXNbMV07YnJlYWt9IndvcmQiPT09c1swXSYmL1x3Ly50ZXN0KHNbMV0pJiZ0aGlzLnVua25vd25Xb3JkKFtzXSksdC5yYXdzLmJldHdlZW4rPXNbMV19Il8iIT09dC5wcm9wWzBdJiYiKiIhPT10LnByb3BbMF18fCh0LnJhd3MuYmVmb3JlKz10LnByb3BbMF0sdC5wcm9wPXQucHJvcC5zbGljZSgxKSksdC5yYXdzLmJldHdlZW4rPXRoaXMuc3BhY2VzQW5kQ29tbWVudHNGcm9tU3RhcnQoZSksdGhpcy5wcmVjaGVja01pc3NlZFNlbWljb2xvbihlKTtmb3IodmFyIGk9ZS5sZW5ndGgtMTtpPjA7aS0tKXtpZihzPWVbaV0sIiFpbXBvcnRhbnQiPT09c1sxXS50b0xvd2VyQ2FzZSgpKXt0LmltcG9ydGFudD0hMDt2YXIgYT10aGlzLnN0cmluZ0Zyb20oZSxpKTthPXRoaXMuc3BhY2VzRnJvbUVuZChlKSthLCIgIWltcG9ydGFudCIhPT1hJiYodC5yYXdzLmltcG9ydGFudD1hKTticmVha31pZigiaW1wb3J0YW50Ij09PXNbMV0udG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBsPWUuc2xpY2UoMCksdT0iIixjPWk7Yz4wO2MtLSl7dmFyIGQ9bFtjXVswXTtpZigwPT09dS50cmltKCkuaW5kZXhPZigiISIpJiYic3BhY2UiIT09ZClicmVhazt1PWwucG9wKClbMV0rdX0wPT09dS50cmltKCkuaW5kZXhPZigiISIpJiYodC5pbXBvcnRhbnQ9ITAsdC5yYXdzLmltcG9ydGFudD11LGU9bCl9aWYoInNwYWNlIiE9PXNbMF0mJiJjb21tZW50IiE9PXNbMF0pYnJlYWt9dGhpcy5yYXcodCwidmFsdWUiLGUpLC0xIT09dC52YWx1ZS5pbmRleE9mKCI6IikmJnRoaXMuY2hlY2tNaXNzZWRTZW1pY29sb24oZSl9LHQuYXRydWxlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBhLmRlZmF1bHQ7dC5uYW1lPWVbMV0uc2xpY2UoMSksIiI9PT10Lm5hbWUmJnRoaXMudW5uYW1lZEF0cnVsZSh0LGUpLHRoaXMuaW5pdCh0LGVbMl0sZVszXSk7Zm9yKHZhciBuLHIsbz0hMSxzPSExLGk9W107IXRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpOyl7aWYoZT10aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKSwiOyI9PT1lWzBdKXt0LnNvdXJjZS5lbmQ9e2xpbmU6ZVsyXSxjb2x1bW46ZVszXX0sdGhpcy5zZW1pY29sb249ITA7YnJlYWt9aWYoInsiPT09ZVswXSl7cz0hMDticmVha31pZigifSI9PT1lWzBdKXtpZihpLmxlbmd0aD4wKXtmb3Iocj1pLmxlbmd0aC0xLG49aVtyXTtuJiYic3BhY2UiPT09blswXTspbj1pWy0tcl07biYmKHQuc291cmNlLmVuZD17bGluZTpuWzRdLGNvbHVtbjpuWzVdfSl9dGhpcy5lbmQoZSk7YnJlYWt9aWYoaS5wdXNoKGUpLHRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpKXtvPSEwO2JyZWFrfX10LnJhd3MuYmV0d2Vlbj10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZChpKSxpLmxlbmd0aD8odC5yYXdzLmFmdGVyTmFtZT10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0KGkpLHRoaXMucmF3KHQsInBhcmFtcyIsaSksbyYmKGU9aVtpLmxlbmd0aC0xXSx0LnNvdXJjZS5lbmQ9e2xpbmU6ZVs0XSxjb2x1bW46ZVs1XX0sdGhpcy5zcGFjZXM9dC5yYXdzLmJldHdlZW4sdC5yYXdzLmJldHdlZW49IiIpKToodC5yYXdzLmFmdGVyTmFtZT0iIix0LnBhcmFtcz0iIikscyYmKHQubm9kZXM9W10sdGhpcy5jdXJyZW50PXQpfSx0LmVuZD1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQubm9kZXMmJnRoaXMuY3VycmVudC5ub2Rlcy5sZW5ndGgmJih0aGlzLmN1cnJlbnQucmF3cy5zZW1pY29sb249dGhpcy5zZW1pY29sb24pLHRoaXMuc2VtaWNvbG9uPSExLHRoaXMuY3VycmVudC5yYXdzLmFmdGVyPSh0aGlzLmN1cnJlbnQucmF3cy5hZnRlcnx8IiIpK3RoaXMuc3BhY2VzLHRoaXMuc3BhY2VzPSIiLHRoaXMuY3VycmVudC5wYXJlbnQ/KHRoaXMuY3VycmVudC5zb3VyY2UuZW5kPXtsaW5lOmVbMl0sY29sdW1uOmVbM119LHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQucGFyZW50KTp0aGlzLnVuZXhwZWN0ZWRDbG9zZShlKX0sdC5lbmRGaWxlPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnBhcmVudCYmdGhpcy51bmNsb3NlZEJsb2NrKCksdGhpcy5jdXJyZW50Lm5vZGVzJiZ0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoJiYodGhpcy5jdXJyZW50LnJhd3Muc2VtaWNvbG9uPXRoaXMuc2VtaWNvbG9uKSx0aGlzLmN1cnJlbnQucmF3cy5hZnRlcj0odGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXJ8fCIiKSt0aGlzLnNwYWNlc30sdC5mcmVlU2VtaWNvbG9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMuc3BhY2VzKz1lWzFdLHRoaXMuY3VycmVudC5ub2Rlcyl7dmFyIHQ9dGhpcy5jdXJyZW50Lm5vZGVzW3RoaXMuY3VycmVudC5ub2Rlcy5sZW5ndGgtMV07dCYmInJ1bGUiPT09dC50eXBlJiYhdC5yYXdzLm93blNlbWljb2xvbiYmKHQucmF3cy5vd25TZW1pY29sb249dGhpcy5zcGFjZXMsdGhpcy5zcGFjZXM9IiIpfX0sdC5pbml0PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmN1cnJlbnQucHVzaChlKSxlLnNvdXJjZT17c3RhcnQ6e2xpbmU6dCxjb2x1bW46bn0saW5wdXQ6dGhpcy5pbnB1dH0sZS5yYXdzLmJlZm9yZT10aGlzLnNwYWNlcyx0aGlzLnNwYWNlcz0iIiwiY29tbWVudCIhPT1lLnR5cGUmJih0aGlzLnNlbWljb2xvbj0hMSl9LHQucmF3PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbyxzLGksYT1uLmxlbmd0aCxsPSIiLHU9ITAsYz0vXihbLnwjXSk/KFtcd10pKy9pLGQ9MDtkPGE7ZCs9MSlyPW5bZF0sbz1yWzBdLCJjb21tZW50IiE9PW98fCJydWxlIiE9PWUudHlwZT8iY29tbWVudCI9PT1vfHwic3BhY2UiPT09byYmZD09PWEtMT91PSExOmwrPXJbMV06KGk9bltkLTFdLHM9bltkKzFdLCJzcGFjZSIhPT1pWzBdJiYic3BhY2UiIT09c1swXSYmYy50ZXN0KGlbMV0pJiZjLnRlc3Qoc1sxXSk/bCs9clsxXTp1PSExKTtpZighdSl7dmFyIF89bi5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0WzFdfSwiIik7ZS5yYXdzW3RdPXt2YWx1ZTpsLHJhdzpffX1lW3RdPWx9LHQuc3BhY2VzQW5kQ29tbWVudHNGcm9tRW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPSIiO2UubGVuZ3RoJiYoInNwYWNlIj09PSh0PWVbZS5sZW5ndGgtMV1bMF0pfHwiY29tbWVudCI9PT10KTspbj1lLnBvcCgpWzFdK247cmV0dXJuIG59LHQuc3BhY2VzQW5kQ29tbWVudHNGcm9tU3RhcnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiI7ZS5sZW5ndGgmJigic3BhY2UiPT09KHQ9ZVswXVswXSl8fCJjb21tZW50Ij09PXQpOyluKz1lLnNoaWZ0KClbMV07cmV0dXJuIG59LHQuc3BhY2VzRnJvbUVuZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IiI7ZS5sZW5ndGgmJiJzcGFjZSI9PT1lW2UubGVuZ3RoLTFdWzBdOyl0PWUucG9wKClbMV0rdDtyZXR1cm4gdH0sdC5zdHJpbmdGcm9tPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSIiLHI9dDtyPGUubGVuZ3RoO3IrKyluKz1lW3JdWzFdO3JldHVybiBlLnNwbGljZSh0LGUubGVuZ3RoLXQpLG59LHQuY29sb249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixvPTAscz0wO3M8ZS5sZW5ndGg7cysrKXtpZih0PWVbc10sbj10WzBdLCIoIj09PW4mJihvKz0xKSwiKSI9PT1uJiYoby09MSksMD09PW8mJiI6Ij09PW4pe2lmKHIpe2lmKCJ3b3JkIj09PXJbMF0mJiJwcm9naWQiPT09clsxXSljb250aW51ZTtyZXR1cm4gc310aGlzLmRvdWJsZUNvbG9uKHQpfXI9dH1yZXR1cm4hMX0sdC51bmNsb3NlZEJyYWNrZXQ9ZnVuY3Rpb24oZSl7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiVW5jbG9zZWQgYnJhY2tldCIsZVsyXSxlWzNdKX0sdC51bmtub3duV29yZD1mdW5jdGlvbihlKXt0aHJvdyB0aGlzLmlucHV0LmVycm9yKCJVbmtub3duIHdvcmQiLGVbMF1bMl0sZVswXVszXSl9LHQudW5leHBlY3RlZENsb3NlPWZ1bmN0aW9uKGUpe3Rocm93IHRoaXMuaW5wdXQuZXJyb3IoIlVuZXhwZWN0ZWQgfSIsZVsyXSxlWzNdKX0sdC51bmNsb3NlZEJsb2NrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LnNvdXJjZS5zdGFydDt0aHJvdyB0aGlzLmlucHV0LmVycm9yKCJVbmNsb3NlZCBibG9jayIsZS5saW5lLGUuY29sdW1uKX0sdC5kb3VibGVDb2xvbj1mdW5jdGlvbihlKXt0aHJvdyB0aGlzLmlucHV0LmVycm9yKCJEb3VibGUgY29sb24iLGVbMl0sZVszXSl9LHQudW5uYW1lZEF0cnVsZT1mdW5jdGlvbihlLHQpe3Rocm93IHRoaXMuaW5wdXQuZXJyb3IoIkF0LXJ1bGUgd2l0aG91dCBuYW1lIix0WzJdLHRbM10pfSx0LnByZWNoZWNrTWlzc2VkU2VtaWNvbG9uPWZ1bmN0aW9uKCl7fSx0LmNoZWNrTWlzc2VkU2VtaWNvbG9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29sb24oZSk7aWYoITEhPT10KXtmb3IodmFyIG4scj0wLG89dC0xO28+PTAmJihuPWVbb10sInNwYWNlIj09PW5bMF18fDIhPT0ocis9MSkpO28tLSk7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiTWlzc2VkIHNlbWljb2xvbiIsblsyXSxuWzNdKX19LGV9KCk7dC5kZWZhdWx0PWMsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Bvc3Rjc3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiAxPT09dC5sZW5ndGgmJkFycmF5LmlzQXJyYXkodFswXSkmJih0PXRbMF0pLG5ldyBpLmRlZmF1bHQodCl9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIHM9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9kZWNsYXJhdGlvbi5qcyIpKSxpPXIobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcHJvY2Vzc29yLmpzIikpLGE9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zdHJpbmdpZnkuanMiKSksbD1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2NvbW1lbnQuanMiKSksdT1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2F0LXJ1bGUuanMiKSksYz1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3ZlbmRvci5qcyIpKSxkPXIobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcGFyc2UuanMiKSksXz1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL2xpc3QuanMiKSkscD1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3J1bGUuanMiKSksZj1yKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Jvb3QuanMiKSk7by5wbHVnaW49ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIG49dC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKTtyZXR1cm4gbi5wb3N0Y3NzUGx1Z2luPWUsbi5wb3N0Y3NzVmVyc2lvbj0obmV3IGkuZGVmYXVsdCkudmVyc2lvbixufXZhciByO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwicG9zdGNzcyIse2dldDpmdW5jdGlvbigpe3JldHVybiByfHwocj1uKCkpLHJ9fSksbi5wcm9jZXNzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbyhbbihyKV0pLnByb2Nlc3MoZSx0KX0sbn0sby5zdHJpbmdpZnk9YS5kZWZhdWx0LG8ucGFyc2U9ZC5kZWZhdWx0LG8udmVuZG9yPWMuZGVmYXVsdCxvLmxpc3Q9Xy5kZWZhdWx0LG8uY29tbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGwuZGVmYXVsdChlKX0sby5hdFJ1bGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1LmRlZmF1bHQoZSl9LG8uZGVjbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHMuZGVmYXVsdChlKX0sby5ydWxlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcC5kZWZhdWx0KGUpfSxvLnJvb3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZSl9O3ZhciBtPW87dC5kZWZhdWx0PW0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3ByZXZpb3VzLW1hcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24ocil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gcj9yLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoKTp3aW5kb3cuYXRvYihlKX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgaT1vKG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvc291cmNlLW1hcC5qcyIpKSxhPW8obigiLi9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIikpLGw9byhuKDgpKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMubG9hZEFubm90YXRpb24oZSksdGhpcy5pbmxpbmU9dGhpcy5zdGFydFdpdGgodGhpcy5hbm5vdGF0aW9uLCJkYXRhOiIpO3ZhciBuPXQubWFwP3QubWFwLnByZXY6dm9pZCAwLHI9dGhpcy5sb2FkTWFwKHQuZnJvbSxuKTtyJiYodGhpcy50ZXh0PXIpfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNvbnN1bWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJDYWNoZXx8KHRoaXMuY29uc3VtZXJDYWNoZT1uZXcgaS5kZWZhdWx0LlNvdXJjZU1hcENvbnN1bWVyKHRoaXMudGV4dCkpLHRoaXMuY29uc3VtZXJDYWNoZX0sdC53aXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuY29uc3VtZXIoKS5zb3VyY2VzQ29udGVudCYmdGhpcy5jb25zdW1lcigpLnNvdXJjZXNDb250ZW50Lmxlbmd0aD4wKX0sdC5zdGFydFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIWUmJmUuc3Vic3RyKDAsdC5sZW5ndGgpPT09dH0sdC5sb2FkQW5ub3RhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9cL1wqXHMqIyBzb3VyY2VNYXBwaW5nVVJMPSguKilccypcKlwvLyk7dCYmKHRoaXMuYW5ub3RhdGlvbj10WzFdLnRyaW0oKSl9LHQuZGVjb2RlSW5saW5lPWZ1bmN0aW9uKGUpe3ZhciB0PS9eZGF0YTphcHBsaWNhdGlvblwvanNvbjtjaGFyc2V0PXV0Zi0/ODtiYXNlNjQsLyxuPS9eZGF0YTphcHBsaWNhdGlvblwvanNvbjtiYXNlNjQsLyxyPSJkYXRhOmFwcGxpY2F0aW9uL2pzb24sIjtpZih0aGlzLnN0YXJ0V2l0aChlLHIpKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5zdWJzdHIoci5sZW5ndGgpKTtpZih0LnRlc3QoZSl8fG4udGVzdChlKSlyZXR1cm4gcyhlLnN1YnN0cihSZWdFeHAubGFzdE1hdGNoLmxlbmd0aCkpO3ZhciBvPWUubWF0Y2goL2RhdGE6YXBwbGljYXRpb25cL2pzb247KFteLF0rKSwvKVsxXTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNvdXJjZSBtYXAgZW5jb2RpbmcgIitvKX0sdC5sb2FkTWFwPWZ1bmN0aW9uKGUsdCl7aWYoITE9PT10KXJldHVybiExO2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7dmFyIG49dChlKTtpZihuJiZsLmRlZmF1bHQuZXhpc3RzU3luYyYmbC5kZWZhdWx0LmV4aXN0c1N5bmMobikpcmV0dXJuIGwuZGVmYXVsdC5yZWFkRmlsZVN5bmMobiwidXRmLTgiKS50b1N0cmluZygpLnRyaW0oKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIHByZXZpb3VzIHNvdXJjZSBtYXA6ICIrbi50b1N0cmluZygpKX1pZih0IGluc3RhbmNlb2YgaS5kZWZhdWx0LlNvdXJjZU1hcENvbnN1bWVyKXJldHVybiBpLmRlZmF1bHQuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAodCkudG9TdHJpbmcoKTtpZih0IGluc3RhbmNlb2YgaS5kZWZhdWx0LlNvdXJjZU1hcEdlbmVyYXRvcilyZXR1cm4gdC50b1N0cmluZygpO2lmKHRoaXMuaXNNYXAodCkpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcHJldmlvdXMgc291cmNlIG1hcCBmb3JtYXQ6ICIrdC50b1N0cmluZygpKX1pZih0aGlzLmlubGluZSlyZXR1cm4gdGhpcy5kZWNvZGVJbmxpbmUodGhpcy5hbm5vdGF0aW9uKTtpZih0aGlzLmFubm90YXRpb24pe3ZhciByPXRoaXMuYW5ub3RhdGlvbjtyZXR1cm4gZSYmKHI9YS5kZWZhdWx0LmpvaW4oYS5kZWZhdWx0LmRpcm5hbWUoZSkscikpLHRoaXMucm9vdD1hLmRlZmF1bHQuZGlybmFtZShyKSwhKCFsLmRlZmF1bHQuZXhpc3RzU3luY3x8IWwuZGVmYXVsdC5leGlzdHNTeW5jKHIpKSYmbC5kZWZhdWx0LnJlYWRGaWxlU3luYyhyLCJ1dGYtOCIpLnRvU3RyaW5nKCkudHJpbSgpfX0sdC5pc01hcD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJigic3RyaW5nIj09dHlwZW9mIGUubWFwcGluZ3N8fCJzdHJpbmciPT10eXBlb2YgZS5fbWFwcGluZ3MpfSxlfSgpLGM9dTt0LmRlZmF1bHQ9YyxlLmV4cG9ydHM9dC5kZWZhdWx0fSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIpfSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcHJvY2Vzc29yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvbGF6eS1yZXN1bHQuanMiKSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMudmVyc2lvbj0iNy4wLjE0Iix0aGlzLnBsdWdpbnM9dGhpcy5ub3JtYWxpemUoZSl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQudXNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBsdWdpbnM9dGhpcy5wbHVnaW5zLmNvbmNhdCh0aGlzLm5vcm1hbGl6ZShbZV0pKSx0aGlzfSx0LnByb2Nlc3M9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZS50b1N0cmluZygpfSx0fShmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksMD09PXRoaXMucGx1Z2lucy5sZW5ndGgmJih0LnBhcnNlcix0LnN0cmluZ2lmaWVyKSxuZXcgci5kZWZhdWx0KHRoaXMsZSx0KX0pLHQubm9ybWFsaXplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWUscj1BcnJheS5pc0FycmF5KG4pLG89MCxuPXI/bjpuW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgcztpZihyKXtpZihvPj1uLmxlbmd0aClicmVhaztzPW5bbysrXX1lbHNle2lmKG89bi5uZXh0KCksby5kb25lKWJyZWFrO3M9by52YWx1ZX12YXIgaT1zO2lmKGkucG9zdGNzcyYmKGk9aS5wb3N0Y3NzKSwib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaS5wbHVnaW5zKSl0PXQuY29uY2F0KGkucGx1Z2lucyk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgaSl0LnB1c2goaSk7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIGl8fCFpLnBhcnNlJiYhaS5zdHJpbmdpZnkpdGhyb3cgbmV3IEVycm9yKGkrIiBpcyBub3QgYSBQb3N0Q1NTIHBsdWdpbiIpfXJldHVybiB0fSxlfSgpLHM9bzt0LmRlZmF1bHQ9cyxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcmVzdWx0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3dhcm5pbmcuanMiKSksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucHJvY2Vzc29yPWUsdGhpcy5tZXNzYWdlcz1bXSx0aGlzLnJvb3Q9dCx0aGlzLm9wdHM9bix0aGlzLmNzcz12b2lkIDAsdGhpcy5tYXA9dm9pZCAwfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzfSx0Lndhcm49ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD17fSksdC5wbHVnaW58fHRoaXMubGFzdFBsdWdpbiYmdGhpcy5sYXN0UGx1Z2luLnBvc3Rjc3NQbHVnaW4mJih0LnBsdWdpbj10aGlzLmxhc3RQbHVnaW4ucG9zdGNzc1BsdWdpbik7dmFyIG49bmV3IHMuZGVmYXVsdChlLHQpO3JldHVybiB0aGlzLm1lc3NhZ2VzLnB1c2gobiksbn0sdC53YXJuaW5ncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4id2FybmluZyI9PT1lLnR5cGV9KX0sbyhlLFt7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3N9fV0pLGV9KCksYT1pO3QuZGVmYXVsdD1hLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9yb290LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuX19wcm90b19fPXR9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9jb250YWluZXIuanMiKSkscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuO3JldHVybiBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzLG4udHlwZT0icm9vdCIsbi5ub2Rlc3x8KG4ubm9kZXM9W10pLG59cih0LGUpO3ZhciBvPXQucHJvdG90eXBlO3JldHVybiBvLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5pbmRleCh0KTtyZXR1cm4hbiYmMD09PXImJnRoaXMubm9kZXMubGVuZ3RoPjEmJih0aGlzLm5vZGVzWzFdLnJhd3MuYmVmb3JlPXRoaXMubm9kZXNbcl0ucmF3cy5iZWZvcmUpLGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0KX0sby5ub3JtYWxpemU9ZnVuY3Rpb24odCxuLHIpe3ZhciBvPWUucHJvdG90eXBlLm5vcm1hbGl6ZS5jYWxsKHRoaXMsdCk7aWYobilpZigicHJlcGVuZCI9PT1yKXRoaXMubm9kZXMubGVuZ3RoPjE/bi5yYXdzLmJlZm9yZT10aGlzLm5vZGVzWzFdLnJhd3MuYmVmb3JlOmRlbGV0ZSBuLnJhd3MuYmVmb3JlO2Vsc2UgaWYodGhpcy5maXJzdCE9PW4pZm9yKHZhciBzPW8saT1BcnJheS5pc0FycmF5KHMpLGE9MCxzPWk/czpzW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgbDtpZihpKXtpZihhPj1zLmxlbmd0aClicmVhaztsPXNbYSsrXX1lbHNle2lmKGE9cy5uZXh0KCksYS5kb25lKWJyZWFrO2w9YS52YWx1ZX12YXIgdT1sO3UucmF3cy5iZWZvcmU9bi5yYXdzLmJlZm9yZX1yZXR1cm4gb30sby50b1Jlc3VsdD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLG5ldyhuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9sYXp5LXJlc3VsdC5qcyIpKShuZXcobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcHJvY2Vzc29yLmpzIikpLHRoaXMsZSkuc3RyaW5naWZ5KCl9LHR9KG8uZGVmYXVsdCksaT1zO3QuZGVmYXVsdD1pLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9ydWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxuJiZvKGUsbiksZX1mdW5jdGlvbiBpKGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLl9fcHJvdG9fXz10fXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBhPXIobigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvY29udGFpbmVyLmpzIikpLGw9cihuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9saXN0LmpzIikpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbjtyZXR1cm4gbj1lLmNhbGwodGhpcyx0KXx8dGhpcyxuLnR5cGU9InJ1bGUiLG4ubm9kZXN8fChuLm5vZGVzPVtdKSxufXJldHVybiBpKHQsZSkscyh0LFt7a2V5OiJzZWxlY3RvcnMiLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRlZmF1bHQuY29tbWEodGhpcy5zZWxlY3Rvcil9LHNldDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IubWF0Y2goLyxccyovKTpudWxsLG49dD90WzBdOiIsIit0aGlzLnJhdygiYmV0d2VlbiIsImJlZm9yZU9wZW4iKTt0aGlzLnNlbGVjdG9yPWUuam9pbihuKX19XSksdH0oYS5kZWZhdWx0KSxjPXU7dC5kZWZhdWx0PWMsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3N0cmluZ2lmaWVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBvPXtjb2xvbjoiOiAiLGluZGVudDoiICAgICIsYmVmb3JlRGVjbDoiXG4iLGJlZm9yZVJ1bGU6IlxuIixiZWZvcmVPcGVuOiIgIixiZWZvcmVDbG9zZToiXG4iLGJlZm9yZUNvbW1lbnQ6IlxuIixhZnRlcjoiXG4iLGVtcHR5Qm9keToiIixjb21tZW50TGVmdDoiICIsY29tbWVudFJpZ2h0OiIgIixzZW1pY29sb246ITF9LHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuYnVpbGRlcj1lfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnN0cmluZ2lmeT1mdW5jdGlvbihlLHQpe3RoaXNbZS50eXBlXShlLHQpfSx0LnJvb3Q9ZnVuY3Rpb24oZSl7dGhpcy5ib2R5KGUpLGUucmF3cy5hZnRlciYmdGhpcy5idWlsZGVyKGUucmF3cy5hZnRlcil9LHQuY29tbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnJhdyhlLCJsZWZ0IiwiY29tbWVudExlZnQiKSxuPXRoaXMucmF3KGUsInJpZ2h0IiwiY29tbWVudFJpZ2h0Iik7dGhpcy5idWlsZGVyKCIvKiIrdCtlLnRleHQrbisiKi8iLGUpfSx0LmRlY2w9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJhdyhlLCJiZXR3ZWVuIiwiY29sb24iKSxyPWUucHJvcCtuK3RoaXMucmF3VmFsdWUoZSwidmFsdWUiKTtlLmltcG9ydGFudCYmKHIrPWUucmF3cy5pbXBvcnRhbnR8fCIgIWltcG9ydGFudCIpLHQmJihyKz0iOyIpLHRoaXMuYnVpbGRlcihyLGUpfSx0LnJ1bGU9ZnVuY3Rpb24oZSl7dGhpcy5ibG9jayhlLHRoaXMucmF3VmFsdWUoZSwic2VsZWN0b3IiKSksZS5yYXdzLm93blNlbWljb2xvbiYmdGhpcy5idWlsZGVyKGUucmF3cy5vd25TZW1pY29sb24sZSwiZW5kIil9LHQuYXRydWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49IkAiK2UubmFtZSxyPWUucGFyYW1zP3RoaXMucmF3VmFsdWUoZSwicGFyYW1zIik6IiI7aWYodm9pZCAwIT09ZS5yYXdzLmFmdGVyTmFtZT9uKz1lLnJhd3MuYWZ0ZXJOYW1lOnImJihuKz0iICIpLGUubm9kZXMpdGhpcy5ibG9jayhlLG4rcik7ZWxzZXt2YXIgbz0oZS5yYXdzLmJldHdlZW58fCIiKSsodD8iOyI6IiIpO3RoaXMuYnVpbGRlcihuK3IrbyxlKX19LHQuYm9keT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ub2Rlcy5sZW5ndGgtMTt0PjAmJiJjb21tZW50Ij09PWUubm9kZXNbdF0udHlwZTspdC09MTtmb3IodmFyIG49dGhpcy5yYXcoZSwic2VtaWNvbG9uIikscj0wO3I8ZS5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgbz1lLm5vZGVzW3JdLHM9dGhpcy5yYXcobywiYmVmb3JlIik7cyYmdGhpcy5idWlsZGVyKHMpLHRoaXMuc3RyaW5naWZ5KG8sdCE9PXJ8fG4pfX0sdC5ibG9jaz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmF3KGUsImJldHdlZW4iLCJiZWZvcmVPcGVuIik7dGhpcy5idWlsZGVyKHQrbisieyIsZSwic3RhcnQiKTt2YXIgcjtlLm5vZGVzJiZlLm5vZGVzLmxlbmd0aD8odGhpcy5ib2R5KGUpLHI9dGhpcy5yYXcoZSwiYWZ0ZXIiKSk6cj10aGlzLnJhdyhlLCJhZnRlciIsImVtcHR5Qm9keSIpLHImJnRoaXMuYnVpbGRlcihyKSx0aGlzLmJ1aWxkZXIoIn0iLGUsImVuZCIpfSx0LnJhdz1mdW5jdGlvbihlLHQsbil7dmFyIHM7aWYobnx8KG49dCksdCYmdm9pZCAwIT09KHM9ZS5yYXdzW3RdKSlyZXR1cm4gczt2YXIgaT1lLnBhcmVudDtpZigiYmVmb3JlIj09PW4mJighaXx8InJvb3QiPT09aS50eXBlJiZpLmZpcnN0PT09ZSkpcmV0dXJuIiI7aWYoIWkpcmV0dXJuIG9bbl07dmFyIGE9ZS5yb290KCk7aWYoYS5yYXdDYWNoZXx8KGEucmF3Q2FjaGU9e30pLHZvaWQgMCE9PWEucmF3Q2FjaGVbbl0pcmV0dXJuIGEucmF3Q2FjaGVbbl07aWYoImJlZm9yZSI9PT1ufHwiYWZ0ZXIiPT09bilyZXR1cm4gdGhpcy5iZWZvcmVBZnRlcihlLG4pO3ZhciBsPSJyYXciK3Iobik7cmV0dXJuIHRoaXNbbF0/cz10aGlzW2xdKGEsZSk6YS53YWxrKGZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PShzPWUucmF3c1t0XSkpcmV0dXJuITF9KSx2b2lkIDA9PT1zJiYocz1vW25dKSxhLnJhd0NhY2hlW25dPXMsc30sdC5yYXdTZW1pY29sb249ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUud2FsayhmdW5jdGlvbihlKXtpZihlLm5vZGVzJiZlLm5vZGVzLmxlbmd0aCYmImRlY2wiPT09ZS5sYXN0LnR5cGUmJnZvaWQgMCE9PSh0PWUucmF3cy5zZW1pY29sb24pKXJldHVybiExfSksdH0sdC5yYXdFbXB0eUJvZHk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUud2FsayhmdW5jdGlvbihlKXtpZihlLm5vZGVzJiYwPT09ZS5ub2Rlcy5sZW5ndGgmJnZvaWQgMCE9PSh0PWUucmF3cy5hZnRlcikpcmV0dXJuITF9KSx0fSx0LnJhd0luZGVudD1mdW5jdGlvbihlKXtpZihlLnJhd3MuaW5kZW50KXJldHVybiBlLnJhd3MuaW5kZW50O3ZhciB0O3JldHVybiBlLndhbGsoZnVuY3Rpb24obil7dmFyIHI9bi5wYXJlbnQ7aWYociYmciE9PWUmJnIucGFyZW50JiZyLnBhcmVudD09PWUmJnZvaWQgMCE9PW4ucmF3cy5iZWZvcmUpe3ZhciBvPW4ucmF3cy5iZWZvcmUuc3BsaXQoIlxuIik7cmV0dXJuIHQ9b1tvLmxlbmd0aC0xXSx0PXQucmVwbGFjZSgvW15cc10vZywiIiksITF9fSksdH0sdC5yYXdCZWZvcmVDb21tZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIGUud2Fsa0NvbW1lbnRzKGZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PWUucmF3cy5iZWZvcmUpcmV0dXJuIG49ZS5yYXdzLmJlZm9yZSwtMSE9PW4uaW5kZXhPZigiXG4iKSYmKG49bi5yZXBsYWNlKC9bXlxuXSskLywiIikpLCExfSksdm9pZCAwPT09bj9uPXRoaXMucmF3KHQsbnVsbCwiYmVmb3JlRGVjbCIpOm4mJihuPW4ucmVwbGFjZSgvW15cc10vZywiIikpLG59LHQucmF3QmVmb3JlRGVjbD1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBlLndhbGtEZWNscyhmdW5jdGlvbihlKXtpZih2b2lkIDAhPT1lLnJhd3MuYmVmb3JlKXJldHVybiBuPWUucmF3cy5iZWZvcmUsLTEhPT1uLmluZGV4T2YoIlxuIikmJihuPW4ucmVwbGFjZSgvW15cbl0rJC8sIiIpKSwhMX0pLHZvaWQgMD09PW4/bj10aGlzLnJhdyh0LG51bGwsImJlZm9yZVJ1bGUiKTpuJiYobj1uLnJlcGxhY2UoL1teXHNdL2csIiIpKSxufSx0LnJhd0JlZm9yZVJ1bGU9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUud2FsayhmdW5jdGlvbihuKXtpZihuLm5vZGVzJiYobi5wYXJlbnQhPT1lfHxlLmZpcnN0IT09bikmJnZvaWQgMCE9PW4ucmF3cy5iZWZvcmUpcmV0dXJuIHQ9bi5yYXdzLmJlZm9yZSwtMSE9PXQuaW5kZXhPZigiXG4iKSYmKHQ9dC5yZXBsYWNlKC9bXlxuXSskLywiIikpLCExfSksdCYmKHQ9dC5yZXBsYWNlKC9bXlxzXS9nLCIiKSksdH0sdC5yYXdCZWZvcmVDbG9zZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS53YWxrKGZ1bmN0aW9uKGUpe2lmKGUubm9kZXMmJmUubm9kZXMubGVuZ3RoPjAmJnZvaWQgMCE9PWUucmF3cy5hZnRlcilyZXR1cm4gdD1lLnJhd3MuYWZ0ZXIsLTEhPT10LmluZGV4T2YoIlxuIikmJih0PXQucmVwbGFjZSgvW15cbl0rJC8sIiIpKSwhMX0pLHQmJih0PXQucmVwbGFjZSgvW15cc10vZywiIikpLHR9LHQucmF3QmVmb3JlT3Blbj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS53YWxrKGZ1bmN0aW9uKGUpe2lmKCJkZWNsIiE9PWUudHlwZSYmdm9pZCAwIT09KHQ9ZS5yYXdzLmJldHdlZW4pKXJldHVybiExfSksdH0sdC5yYXdDb2xvbj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS53YWxrRGVjbHMoZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09ZS5yYXdzLmJldHdlZW4pcmV0dXJuIHQ9ZS5yYXdzLmJldHdlZW4ucmVwbGFjZSgvW15cczpdL2csIiIpLCExfSksdH0sdC5iZWZvcmVBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuO249ImRlY2wiPT09ZS50eXBlP3RoaXMucmF3KGUsbnVsbCwiYmVmb3JlRGVjbCIpOiJjb21tZW50Ij09PWUudHlwZT90aGlzLnJhdyhlLG51bGwsImJlZm9yZUNvbW1lbnQiKToiYmVmb3JlIj09PXQ/dGhpcy5yYXcoZSxudWxsLCJiZWZvcmVSdWxlIik6dGhpcy5yYXcoZSxudWxsLCJiZWZvcmVDbG9zZSIpO2Zvcih2YXIgcj1lLnBhcmVudCxvPTA7ciYmInJvb3QiIT09ci50eXBlOylvKz0xLHI9ci5wYXJlbnQ7aWYoLTEhPT1uLmluZGV4T2YoIlxuIikpe3ZhciBzPXRoaXMucmF3KGUsbnVsbCwiaW5kZW50Iik7aWYocy5sZW5ndGgpZm9yKHZhciBpPTA7aTxvO2krKyluKz1zfXJldHVybiBufSx0LnJhd1ZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XSxyPWUucmF3c1t0XTtyZXR1cm4gciYmci52YWx1ZT09PW4/ci5yYXc6bn0sZX0oKSxpPXM7dC5kZWZhdWx0PWksZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3N0cmluZ2lmeS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7bmV3IG8uZGVmYXVsdCh0KS5zdHJpbmdpZnkoZSl9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShuKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi9zdHJpbmdpZmllci5qcyIpKSxzPXI7dC5kZWZhdWx0PXMsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3Rva2VuaXplLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIFh9ZnVuY3Rpb24gcih0KXt0aHJvdyBlLmVycm9yKCJVbmNsb3NlZCAiK3QsSyxYLXEpfWZ1bmN0aW9uIFIoKXtyZXR1cm4gMD09PVEubGVuZ3RoJiZYPj1ZfWZ1bmN0aW9uIGooZSl7aWYoUS5sZW5ndGgpcmV0dXJuIFEucG9wKCk7aWYoIShYPj1ZKSl7dmFyIHQ9ISFlJiZlLmlnbm9yZVVuY2xvc2VkO3N3aXRjaChMPVYuY2hhckNvZGVBdChYKSwoTD09PWx8fEw9PT1jfHxMPT09XyYmVi5jaGFyQ29kZUF0KFgrMSkhPT1sKSYmKHE9WCxLKz0xKSxMKXtjYXNlIGw6Y2FzZSB1OmNhc2UgZDpjYXNlIF86Y2FzZSBjOkQ9WDtkb3tEKz0xLChMPVYuY2hhckNvZGVBdChEKSk9PT1sJiYocT1ELEsrPTEpfXdoaWxlKEw9PT11fHxMPT09bHx8TD09PWR8fEw9PT1ffHxMPT09Yyk7ej1bInNwYWNlIixWLnNsaWNlKFgsRCldLFg9RC0xO2JyZWFrO2Nhc2UgcDpjYXNlIGY6Y2FzZSBnOmNhc2UgYjpjYXNlIHY6Y2FzZSBFOmNhc2UgaDp2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKEwpO3o9W24sbixLLFgtcV07YnJlYWs7Y2FzZSBtOmlmKFU9JC5sZW5ndGg/JC5wb3AoKVsxXToiIixHPVYuY2hhckNvZGVBdChYKzEpLCJ1cmwiPT09VSYmRyE9PW8mJkchPT1zJiZHIT09dSYmRyE9PWwmJkchPT1kJiZHIT09YyYmRyE9PV8pe0Q9WDtkb3tpZihGPSExLC0xPT09KEQ9Vi5pbmRleE9mKCIpIixEKzEpKSl7aWYoV3x8dCl7RD1YO2JyZWFrfXIoImJyYWNrZXQiKX1mb3IoQj1EO1YuY2hhckNvZGVBdChCLTEpPT09aTspQi09MSxGPSFGfXdoaWxlKEYpO3o9WyJicmFja2V0cyIsVi5zbGljZShYLEQrMSksSyxYLXEsSyxELXFdLFg9RH1lbHNlIEQ9Vi5pbmRleE9mKCIpIixYKzEpLEk9Vi5zbGljZShYLEQrMSksLTE9PT1EfHxPLnRlc3QoSSk/ej1bIigiLCIoIixLLFgtcV06KHo9WyJicmFja2V0cyIsSSxLLFgtcSxLLEQtcV0sWD1EKTticmVhaztjYXNlIG86Y2FzZSBzOnc9TD09PW8/IiciOiciJyxEPVg7ZG97aWYoRj0hMSwtMT09PShEPVYuaW5kZXhPZih3LEQrMSkpKXtpZihXfHx0KXtEPVgrMTticmVha31yKCJzdHJpbmciKX1mb3IoQj1EO1YuY2hhckNvZGVBdChCLTEpPT09aTspQi09MSxGPSFGfXdoaWxlKEYpO0k9Vi5zbGljZShYLEQrMSksTT1JLnNwbGl0KCJcbiIpLGs9TS5sZW5ndGgtMSxrPjA/KE49SytrLEg9RC1NW2tdLmxlbmd0aCk6KE49SyxIPXEpLHo9WyJzdHJpbmciLFYuc2xpY2UoWCxEKzEpLEssWC1xLE4sRC1IXSxxPUgsSz1OLFg9RDticmVhaztjYXNlIFQ6QS5sYXN0SW5kZXg9WCsxLEEudGVzdChWKSxEPTA9PT1BLmxhc3RJbmRleD9WLmxlbmd0aC0xOkEubGFzdEluZGV4LTIsej1bImF0LXdvcmQiLFYuc2xpY2UoWCxEKzEpLEssWC1xLEssRC1xXSxYPUQ7YnJlYWs7Y2FzZSBpOmZvcihEPVgsUD0hMDtWLmNoYXJDb2RlQXQoRCsxKT09PWk7KUQrPTEsUD0hUDtpZihMPVYuY2hhckNvZGVBdChEKzEpLFAmJkwhPT1hJiZMIT09dSYmTCE9PWwmJkwhPT1kJiZMIT09XyYmTCE9PWMmJihEKz0xLFMudGVzdChWLmNoYXJBdChEKSkpKXtmb3IoO1MudGVzdChWLmNoYXJBdChEKzEpKTspRCs9MTtWLmNoYXJDb2RlQXQoRCsxKT09PXUmJihEKz0xKX16PVsid29yZCIsVi5zbGljZShYLEQrMSksSyxYLXEsSyxELXFdLFg9RDticmVhaztkZWZhdWx0Okw9PT1hJiZWLmNoYXJDb2RlQXQoWCsxKT09PXk/KEQ9Vi5pbmRleE9mKCIqLyIsWCsyKSsxLDA9PT1EJiYoV3x8dD9EPVYubGVuZ3RoOnIoImNvbW1lbnQiKSksST1WLnNsaWNlKFgsRCsxKSxNPUkuc3BsaXQoIlxuIiksaz1NLmxlbmd0aC0xLGs+MD8oTj1LK2ssSD1ELU1ba10ubGVuZ3RoKTooTj1LLEg9cSksej1bImNvbW1lbnQiLEksSyxYLXEsTixELUhdLHE9SCxLPU4sWD1EKTooQy5sYXN0SW5kZXg9WCsxLEMudGVzdChWKSxEPTA9PT1DLmxhc3RJbmRleD9WLmxlbmd0aC0xOkMubGFzdEluZGV4LTIsej1bIndvcmQiLFYuc2xpY2UoWCxEKzEpLEssWC1xLEssRC1xXSwkLnB1c2goeiksWD1EKX1yZXR1cm4gWCsrLHp9fWZ1bmN0aW9uIHgoZSl7US5wdXNoKGUpfXZvaWQgMD09PXQmJih0PXt9KTt2YXIgTCxELHcsTSxrLEksUCxOLEgsRixCLFUsRyx6LFY9ZS5jc3MudmFsdWVPZigpLFc9dC5pZ25vcmVFcnJvcnMsWT1WLmxlbmd0aCxxPS0xLEs9MSxYPTAsJD1bXSxRPVtdO3JldHVybntiYWNrOngsbmV4dFRva2VuOmosZW5kT2ZGaWxlOlIscG9zaXRpb246bn19dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yO3ZhciBvPSInIi5jaGFyQ29kZUF0KDApLHM9JyInLmNoYXJDb2RlQXQoMCksaT0iXFwiLmNoYXJDb2RlQXQoMCksYT0iLyIuY2hhckNvZGVBdCgwKSxsPSJcbiIuY2hhckNvZGVBdCgwKSx1PSIgIi5jaGFyQ29kZUF0KDApLGM9IlxmIi5jaGFyQ29kZUF0KDApLGQ9Ilx0Ii5jaGFyQ29kZUF0KDApLF89IlxyIi5jaGFyQ29kZUF0KDApLHA9IlsiLmNoYXJDb2RlQXQoMCksZj0iXSIuY2hhckNvZGVBdCgwKSxtPSIoIi5jaGFyQ29kZUF0KDApLGg9IikiLmNoYXJDb2RlQXQoMCksZz0ieyIuY2hhckNvZGVBdCgwKSxiPSJ9Ii5jaGFyQ29kZUF0KDApLEU9IjsiLmNoYXJDb2RlQXQoMCkseT0iKiIuY2hhckNvZGVBdCgwKSx2PSI6Ii5jaGFyQ29kZUF0KDApLFQ9IkAiLmNoYXJDb2RlQXQoMCksQT0vWyBcblx0XHJcZnt9KCknIlxcO1wvW1xdI10vZyxDPS9bIFxuXHRcclxmKCl7fTo7QCEnIlxcXF1bI118XC8oPz1cKikvZyxPPS8uW1xcXC8oIidcbl0vLFM9L1thLWYwLTldL2k7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MvbGliL3ZlbmRvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgcj17cHJlZml4OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL14oLVx3Ky0pLyk7cmV0dXJuIHQ/dFswXToiIn0sdW5wcmVmaXhlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eLVx3Ky0vLCIiKX19LG89cjt0LmRlZmF1bHQ9byxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvd2Fybi1vbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7b1tlXXx8KG9bZV09ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihlKSl9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yO3ZhciBvPXt9O2UuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL2xpYi93YXJuaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKHZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnR5cGU9Indhcm5pbmciLHRoaXMudGV4dD1lLHQubm9kZSYmdC5ub2RlLnNvdXJjZSl7dmFyIG49dC5ub2RlLnBvc2l0aW9uQnkodCk7dGhpcy5saW5lPW4ubGluZSx0aGlzLmNvbHVtbj1uLmNvbHVtbn1mb3IodmFyIHIgaW4gdCl0aGlzW3JdPXRbcl19cmV0dXJuIGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZT90aGlzLm5vZGUuZXJyb3IodGhpcy50ZXh0LHtwbHVnaW46dGhpcy5wbHVnaW4saW5kZXg6dGhpcy5pbmRleCx3b3JkOnRoaXMud29yZH0pLm1lc3NhZ2U6dGhpcy5wbHVnaW4/dGhpcy5wbHVnaW4rIjogIit0aGlzLnRleHQ6dGhpcy50ZXh0fSxlfSgpLG89cjt0LmRlZmF1bHQ9byxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuX2FycmF5PVtdLHRoaXMuX3NldD1pP25ldyBNYXA6T2JqZWN0LmNyZWF0ZShudWxsKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi91dGlsLmpzIikscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGk9InVuZGVmaW5lZCIhPXR5cGVvZiBNYXA7ci5mcm9tQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bmV3IHIsbz0wLHM9ZS5sZW5ndGg7bzxzO28rKyluLmFkZChlW29dLHQpO3JldHVybiBufSxyLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIGk/dGhpcy5fc2V0LnNpemU6T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGh9LHIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3ZhciBuPWk/ZTpvLnRvU2V0U3RyaW5nKGUpLHI9aT90aGlzLmhhcyhlKTpzLmNhbGwodGhpcy5fc2V0LG4pLGE9dGhpcy5fYXJyYXkubGVuZ3RoO3ImJiF0fHx0aGlzLl9hcnJheS5wdXNoKGUpLHJ8fChpP3RoaXMuX3NldC5zZXQoZSxhKTp0aGlzLl9zZXRbbl09YSl9LHIucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtpZihpKXJldHVybiB0aGlzLl9zZXQuaGFzKGUpO3ZhciB0PW8udG9TZXRTdHJpbmcoZSk7cmV0dXJuIHMuY2FsbCh0aGlzLl9zZXQsdCl9LHIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSl7aWYoaSl7dmFyIHQ9dGhpcy5fc2V0LmdldChlKTtpZih0Pj0wKXJldHVybiB0fWVsc2V7dmFyIG49by50b1NldFN0cmluZyhlKTtpZihzLmNhbGwodGhpcy5fc2V0LG4pKXJldHVybiB0aGlzLl9zZXRbbl19dGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBpbiB0aGUgc2V0LicpfSxyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXtpZihlPj0wJiZlPHRoaXMuX2FycmF5Lmxlbmd0aClyZXR1cm4gdGhpcy5fYXJyYXlbZV07dGhyb3cgbmV3IEVycm9yKCJObyBlbGVtZW50IGluZGV4ZWQgYnkgIitlKX0sci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheS5zbGljZSgpfSx0LkFycmF5U2V0PXJ9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQtdmxxLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZTwwPzErKC1lPDwxKTowKyhlPDwxKX1mdW5jdGlvbiBvKGUpe3ZhciB0PTE9PSgxJmUpLG49ZT4+MTtyZXR1cm4gdD8tbjpufXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC5qcyIpO3QuZW5jb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIsbz1yKGUpO2Rve3Q9MzEmbyxvPj4+PTUsbz4wJiYodHw9MzIpLG4rPXMuZW5jb2RlKHQpfXdoaWxlKG8+MCk7cmV0dXJuIG59LHQuZGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLGE9ZS5sZW5ndGgsbD0wLHU9MDtkb3tpZih0Pj1hKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuIik7aWYoLTE9PT0oaT1zLmRlY29kZShlLmNoYXJDb2RlQXQodCsrKSkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgZGlnaXQ6ICIrZS5jaGFyQXQodC0xKSk7cj0hISgzMiZpKSxpJj0zMSxsKz1pPDx1LHUrPTV9d2hpbGUocik7bi52YWx1ZT1vKGwpLG4ucmVzdD10fX0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC5qcyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuc3BsaXQoIiIpO3QuZW5jb2RlPWZ1bmN0aW9uKGUpe2lmKDA8PWUmJmU8bi5sZW5ndGgpcmV0dXJuIG5bZV07dGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiAiK2UpfSx0LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gNjU8PWUmJmU8PTkwP2UtNjU6OTc8PWUmJmU8PTEyMj9lLTk3KzI2OjQ4PD1lJiZlPD01Nz9lLTQ4KzUyOjQzPT1lPzYyOjQ3PT1lPzYzOi0xfX0sIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHIsbyxzLGksYSl7dmFyIGw9TWF0aC5mbG9vcigoci1lKS8yKStlLHU9aShvLHNbbF0sITApO3JldHVybiAwPT09dT9sOnU+MD9yLWw+MT9uKGwscixvLHMsaSxhKTphPT10LkxFQVNUX1VQUEVSX0JPVU5EP3I8cy5sZW5ndGg/cjotMTpsOmwtZT4xP24oZSxsLG8scyxpLGEpOmE9PXQuTEVBU1RfVVBQRVJfQk9VTkQ/bDplPDA/LTE6ZX10LkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsdC5MRUFTVF9VUFBFUl9CT1VORD0yLHQuc2VhcmNoPWZ1bmN0aW9uKGUscixvLHMpe2lmKDA9PT1yLmxlbmd0aClyZXR1cm4tMTt2YXIgaT1uKC0xLHIubGVuZ3RoLGUscixvLHN8fHQuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO2lmKGk8MClyZXR1cm4tMTtmb3IoO2ktMT49MCYmMD09PW8ocltpXSxyW2ktMV0sITApOyktLWk7cmV0dXJuIGl9fSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvbWFwcGluZy1saXN0LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuZ2VuZXJhdGVkTGluZSxyPXQuZ2VuZXJhdGVkTGluZSxvPWUuZ2VuZXJhdGVkQ29sdW1uLGk9dC5nZW5lcmF0ZWRDb2x1bW47cmV0dXJuIHI+bnx8cj09biYmaT49b3x8cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChlLHQpPD0wfWZ1bmN0aW9uIG8oKXt0aGlzLl9hcnJheT1bXSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5fbGFzdD17Z2VuZXJhdGVkTGluZTotMSxnZW5lcmF0ZWRDb2x1bW46MH19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIpO28ucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaD1mdW5jdGlvbihlLHQpe3RoaXMuX2FycmF5LmZvckVhY2goZSx0KX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3IodGhpcy5fbGFzdCxlKT8odGhpcy5fbGFzdD1lLHRoaXMuX2FycmF5LnB1c2goZSkpOih0aGlzLl9zb3J0ZWQ9ITEsdGhpcy5fYXJyYXkucHVzaChlKSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydGVkfHwodGhpcy5fYXJyYXkuc29ydChzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKSx0aGlzLl9zb3J0ZWQ9ITApLHRoaXMuX2FycmF5fSx0Lk1hcHBpbmdMaXN0PW99LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiByKGUsdCl7cmV0dXJuIE1hdGgucm91bmQoZStNYXRoLnJhbmRvbSgpKih0LWUpKX1mdW5jdGlvbiBvKGUsdCxzLGkpe2lmKHM8aSl7dmFyIGE9cihzLGkpLGw9cy0xO24oZSxhLGkpO2Zvcih2YXIgdT1lW2ldLGM9cztjPGk7YysrKXQoZVtjXSx1KTw9MCYmKGwrPTEsbihlLGwsYykpO24oZSxsKzEsYyk7dmFyIGQ9bCsxO28oZSx0LHMsZC0xKSxvKGUsdCxkKzEsaSl9fXQucXVpY2tTb3J0PWZ1bmN0aW9uKGUsdCl7byhlLHQsMCxlLmxlbmd0aC0xKX19LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYobj1hLnBhcnNlU291cmNlTWFwSW5wdXQoZSkpLG51bGwhPW4uc2VjdGlvbnM/bmV3IGkobix0KTpuZXcgbyhuLHQpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lOyJzdHJpbmciPT10eXBlb2YgZSYmKG49YS5wYXJzZVNvdXJjZU1hcElucHV0KGUpKTt2YXIgcj1hLmdldEFyZyhuLCJ2ZXJzaW9uIiksbz1hLmdldEFyZyhuLCJzb3VyY2VzIikscz1hLmdldEFyZyhuLCJuYW1lcyIsW10pLGk9YS5nZXRBcmcobiwic291cmNlUm9vdCIsbnVsbCksbD1hLmdldEFyZyhuLCJzb3VyY2VzQ29udGVudCIsbnVsbCksYz1hLmdldEFyZyhuLCJtYXBwaW5ncyIpLGQ9YS5nZXRBcmcobiwiZmlsZSIsbnVsbCk7aWYociE9dGhpcy5fdmVyc2lvbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICIrcik7aSYmKGk9YS5ub3JtYWxpemUoaSkpLG89by5tYXAoU3RyaW5nKS5tYXAoYS5ub3JtYWxpemUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaSYmYS5pc0Fic29sdXRlKGkpJiZhLmlzQWJzb2x1dGUoZSk/YS5yZWxhdGl2ZShpLGUpOmV9KSx0aGlzLl9uYW1lcz11LmZyb21BcnJheShzLm1hcChTdHJpbmcpLCEwKSx0aGlzLl9zb3VyY2VzPXUuZnJvbUFycmF5KG8sITApLHRoaXMuX2Fic29sdXRlU291cmNlcz10aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY29tcHV0ZVNvdXJjZVVSTChpLGUsdCl9KSx0aGlzLnNvdXJjZVJvb3Q9aSx0aGlzLnNvdXJjZXNDb250ZW50PWwsdGhpcy5fbWFwcGluZ3M9Yyx0aGlzLl9zb3VyY2VNYXBVUkw9dCx0aGlzLmZpbGU9ZH1mdW5jdGlvbiBzKCl7dGhpcy5nZW5lcmF0ZWRMaW5lPTAsdGhpcy5nZW5lcmF0ZWRDb2x1bW49MCx0aGlzLnNvdXJjZT1udWxsLHRoaXMub3JpZ2luYWxMaW5lPW51bGwsdGhpcy5vcmlnaW5hbENvbHVtbj1udWxsLHRoaXMubmFtZT1udWxsfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1lOyJzdHJpbmciPT10eXBlb2YgZSYmKG49YS5wYXJzZVNvdXJjZU1hcElucHV0KGUpKTt2YXIgbz1hLmdldEFyZyhuLCJ2ZXJzaW9uIikscz1hLmdldEFyZyhuLCJzZWN0aW9ucyIpO2lmKG8hPXRoaXMuX3ZlcnNpb24pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAiK28pO3RoaXMuX3NvdXJjZXM9bmV3IHUsdGhpcy5fbmFtZXM9bmV3IHU7dmFyIGk9e2xpbmU6LTEsY29sdW1uOjB9O3RoaXMuX3NlY3Rpb25zPXMubWFwKGZ1bmN0aW9uKGUpe2lmKGUudXJsKXRocm93IG5ldyBFcnJvcigiU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4iKTt2YXIgbj1hLmdldEFyZyhlLCJvZmZzZXQiKSxvPWEuZ2V0QXJnKG4sImxpbmUiKSxzPWEuZ2V0QXJnKG4sImNvbHVtbiIpO2lmKG88aS5saW5lfHxvPT09aS5saW5lJiZzPGkuY29sdW1uKXRocm93IG5ldyBFcnJvcigiU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLiIpO3JldHVybiBpPW4se2dlbmVyYXRlZE9mZnNldDp7Z2VuZXJhdGVkTGluZTpvKzEsZ2VuZXJhdGVkQ29sdW1uOnMrMX0sY29uc3VtZXI6bmV3IHIoYS5nZXRBcmcoZSwibWFwIiksdCl9fSl9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIikuQXJyYXlTZXQsYz1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQtdmxxLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIikucXVpY2tTb3J0O3IuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBvLmZyb21Tb3VyY2VNYXAoZSx0KX0sci5wcm90b3R5cGUuX3ZlcnNpb249MyxyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzPW51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJfZ2VuZXJhdGVkTWFwcGluZ3MiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzfHx0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCksdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzfX0pLHIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiX29yaWdpbmFsTWFwcGluZ3MiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3N8fHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsdGhpcy5zb3VyY2VSb290KSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc319KSxyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY2hhckF0KHQpO3JldHVybiI7Ij09PW58fCIsIj09PW59LHIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uKGUsdCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzIil9LHIuR0VORVJBVEVEX09SREVSPTEsci5PUklHSU5BTF9PUkRFUj0yLHIuR1JFQVRFU1RfTE9XRVJfQk9VTkQ9MSxyLkxFQVNUX1VQUEVSX0JPVU5EPTIsci5wcm90b3R5cGUuZWFjaE1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHM9dHx8bnVsbCxpPW58fHIuR0VORVJBVEVEX09SREVSO3N3aXRjaChpKXtjYXNlIHIuR0VORVJBVEVEX09SREVSOm89dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7YnJlYWs7Y2FzZSByLk9SSUdJTkFMX09SREVSOm89dGhpcy5fb3JpZ2luYWxNYXBwaW5nczticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uIil9dmFyIGw9dGhpcy5zb3VyY2VSb290O28ubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PT1lLnNvdXJjZT9udWxsOnRoaXMuX3NvdXJjZXMuYXQoZS5zb3VyY2UpO3JldHVybiB0PWEuY29tcHV0ZVNvdXJjZVVSTChsLHQsdGhpcy5fc291cmNlTWFwVVJMKSx7c291cmNlOnQsZ2VuZXJhdGVkTGluZTplLmdlbmVyYXRlZExpbmUsZ2VuZXJhdGVkQ29sdW1uOmUuZ2VuZXJhdGVkQ29sdW1uLG9yaWdpbmFsTGluZTplLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjplLm9yaWdpbmFsQ29sdW1uLG5hbWU6bnVsbD09PWUubmFtZT9udWxsOnRoaXMuX25hbWVzLmF0KGUubmFtZSl9fSx0aGlzKS5mb3JFYWNoKGUscyl9LHIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0Zvcj1mdW5jdGlvbihlKXt2YXIgdD1hLmdldEFyZyhlLCJsaW5lIiksbj17c291cmNlOmEuZ2V0QXJnKGUsInNvdXJjZSIpLG9yaWdpbmFsTGluZTp0LG9yaWdpbmFsQ29sdW1uOmEuZ2V0QXJnKGUsImNvbHVtbiIsMCl9O2lmKG4uc291cmNlPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChuLnNvdXJjZSksbi5zb3VyY2U8MClyZXR1cm5bXTt2YXIgcj1bXSxvPXRoaXMuX2ZpbmRNYXBwaW5nKG4sdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLGEuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsbC5MRUFTVF9VUFBFUl9CT1VORCk7aWYobz49MCl7dmFyIHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tvXTtpZih2b2lkIDA9PT1lLmNvbHVtbilmb3IodmFyIGk9cy5vcmlnaW5hbExpbmU7cyYmcy5vcmlnaW5hbExpbmU9PT1pOylyLnB1c2goe2xpbmU6YS5nZXRBcmcocywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOmEuZ2V0QXJnKHMsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjphLmdldEFyZyhzLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK29dO2Vsc2UgZm9yKHZhciB1PXMub3JpZ2luYWxDb2x1bW47cyYmcy5vcmlnaW5hbExpbmU9PT10JiZzLm9yaWdpbmFsQ29sdW1uPT11OylyLnB1c2goe2xpbmU6YS5nZXRBcmcocywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOmEuZ2V0QXJnKHMsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjphLmdldEFyZyhzLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLHM9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK29dfXJldHVybiByfSx0LlNvdXJjZU1hcENvbnN1bWVyPXIsby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksby5wcm90b3R5cGUuY29uc3VtZXI9cixvLnByb3RvdHlwZS5fZmluZFNvdXJjZUluZGV4PWZ1bmN0aW9uKGUpe3ZhciB0PWU7aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYodD1hLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCx0KSksdGhpcy5fc291cmNlcy5oYXModCkpcmV0dXJuIHRoaXMuX3NvdXJjZXMuaW5kZXhPZih0KTt2YXIgbjtmb3Iobj0wO248dGhpcy5fYWJzb2x1dGVTb3VyY2VzLmxlbmd0aDsrK24paWYodGhpcy5fYWJzb2x1dGVTb3VyY2VzW25dPT1lKXJldHVybiBuO3JldHVybi0xfSxvLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxyPW4uX25hbWVzPXUuZnJvbUFycmF5KGUuX25hbWVzLnRvQXJyYXkoKSwhMCksaT1uLl9zb3VyY2VzPXUuZnJvbUFycmF5KGUuX3NvdXJjZXMudG9BcnJheSgpLCEwKTtuLnNvdXJjZVJvb3Q9ZS5fc291cmNlUm9vdCxuLnNvdXJjZXNDb250ZW50PWUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobi5fc291cmNlcy50b0FycmF5KCksbi5zb3VyY2VSb290KSxuLmZpbGU9ZS5fZmlsZSxuLl9zb3VyY2VNYXBVUkw9dCxuLl9hYnNvbHV0ZVNvdXJjZXM9bi5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhLmNvbXB1dGVTb3VyY2VVUkwobi5zb3VyY2VSb290LGUsdCl9KTtmb3IodmFyIGw9ZS5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCksYz1uLl9fZ2VuZXJhdGVkTWFwcGluZ3M9W10sXz1uLl9fb3JpZ2luYWxNYXBwaW5ncz1bXSxwPTAsZj1sLmxlbmd0aDtwPGY7cCsrKXt2YXIgbT1sW3BdLGg9bmV3IHM7aC5nZW5lcmF0ZWRMaW5lPW0uZ2VuZXJhdGVkTGluZSxoLmdlbmVyYXRlZENvbHVtbj1tLmdlbmVyYXRlZENvbHVtbixtLnNvdXJjZSYmKGguc291cmNlPWkuaW5kZXhPZihtLnNvdXJjZSksaC5vcmlnaW5hbExpbmU9bS5vcmlnaW5hbExpbmUsaC5vcmlnaW5hbENvbHVtbj1tLm9yaWdpbmFsQ29sdW1uLG0ubmFtZSYmKGgubmFtZT1yLmluZGV4T2YobS5uYW1lKSksXy5wdXNoKGgpKSxjLnB1c2goaCl9cmV0dXJuIGQobi5fX29yaWdpbmFsTWFwcGluZ3MsYS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyksbn0sby5wcm90b3R5cGUuX3ZlcnNpb249MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoby5wcm90b3R5cGUsInNvdXJjZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWJzb2x1dGVTb3VyY2VzLnNsaWNlKCl9fSksby5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3M9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixvLGksbCx1PTEsXz0wLHA9MCxmPTAsbT0wLGg9MCxnPWUubGVuZ3RoLGI9MCxFPXt9LHk9e30sdj1bXSxUPVtdO2I8ZzspaWYoIjsiPT09ZS5jaGFyQXQoYikpdSsrLGIrKyxfPTA7ZWxzZSBpZigiLCI9PT1lLmNoYXJBdChiKSliKys7ZWxzZXtmb3Iobj1uZXcgcyxuLmdlbmVyYXRlZExpbmU9dSxpPWI7aTxnJiYhdGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihlLGkpO2krKyk7aWYocj1lLnNsaWNlKGIsaSksbz1FW3JdKWIrPXIubGVuZ3RoO2Vsc2V7Zm9yKG89W107YjxpOyljLmRlY29kZShlLGIseSksbD15LnZhbHVlLGI9eS5yZXN0LG8ucHVzaChsKTtpZigyPT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbiIpO2lmKDM9PT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uIik7RVtyXT1vfW4uZ2VuZXJhdGVkQ29sdW1uPV8rb1swXSxfPW4uZ2VuZXJhdGVkQ29sdW1uLG8ubGVuZ3RoPjEmJihuLnNvdXJjZT1tK29bMV0sbSs9b1sxXSxuLm9yaWdpbmFsTGluZT1wK29bMl0scD1uLm9yaWdpbmFsTGluZSxuLm9yaWdpbmFsTGluZSs9MSxuLm9yaWdpbmFsQ29sdW1uPWYrb1szXSxmPW4ub3JpZ2luYWxDb2x1bW4sby5sZW5ndGg+NCYmKG4ubmFtZT1oK29bNF0saCs9b1s0XSkpLFQucHVzaChuKSwibnVtYmVyIj09dHlwZW9mIG4ub3JpZ2luYWxMaW5lJiZ2LnB1c2gobil9ZChULGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpLHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1ULGQodixhLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz12fSxvLnByb3RvdHlwZS5fZmluZE1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4scixvLHMpe2lmKGVbbl08PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgIitlW25dKTtpZihlW3JdPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAiK2Vbcl0pO3JldHVybiBsLnNlYXJjaChlLHQsbyxzKX0sby5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7KytlKXt2YXIgdD10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tlXTtpZihlKzE8dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKXt2YXIgbj10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tlKzFdO2lmKHQuZ2VuZXJhdGVkTGluZT09PW4uZ2VuZXJhdGVkTGluZSl7dC5sYXN0R2VuZXJhdGVkQ29sdW1uPW4uZ2VuZXJhdGVkQ29sdW1uLTE7Y29udGludWV9fXQubGFzdEdlbmVyYXRlZENvbHVtbj0xLzB9fSxvLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXtnZW5lcmF0ZWRMaW5lOmEuZ2V0QXJnKGUsImxpbmUiKSxnZW5lcmF0ZWRDb2x1bW46YS5nZXRBcmcoZSwiY29sdW1uIil9LG49dGhpcy5fZmluZE1hcHBpbmcodCx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncywiZ2VuZXJhdGVkTGluZSIsImdlbmVyYXRlZENvbHVtbiIsYS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxhLmdldEFyZyhlLCJiaWFzIixyLkdSRUFURVNUX0xPV0VSX0JPVU5EKSk7aWYobj49MCl7dmFyIG89dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3Nbbl07aWYoby5nZW5lcmF0ZWRMaW5lPT09dC5nZW5lcmF0ZWRMaW5lKXt2YXIgcz1hLmdldEFyZyhvLCJzb3VyY2UiLG51bGwpO251bGwhPT1zJiYocz10aGlzLl9zb3VyY2VzLmF0KHMpLHM9YS5jb21wdXRlU291cmNlVVJMKHRoaXMuc291cmNlUm9vdCxzLHRoaXMuX3NvdXJjZU1hcFVSTCkpO3ZhciBpPWEuZ2V0QXJnKG8sIm5hbWUiLG51bGwpO3JldHVybiBudWxsIT09aSYmKGk9dGhpcy5fbmFtZXMuYXQoaSkpLHtzb3VyY2U6cyxsaW5lOmEuZ2V0QXJnKG8sIm9yaWdpbmFsTGluZSIsbnVsbCksY29sdW1uOmEuZ2V0QXJnKG8sIm9yaWdpbmFsQ29sdW1uIixudWxsKSxuYW1lOml9fX1yZXR1cm57c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19LG8ucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnNvdXJjZXNDb250ZW50JiYodGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGg+PXRoaXMuX3NvdXJjZXMuc2l6ZSgpJiYhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSkpfSxvLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuc291cmNlc0NvbnRlbnQpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5fZmluZFNvdXJjZUluZGV4KGUpO2lmKG4+PTApcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbbl07dmFyIHI9ZTtudWxsIT10aGlzLnNvdXJjZVJvb3QmJihyPWEucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LHIpKTt2YXIgbztpZihudWxsIT10aGlzLnNvdXJjZVJvb3QmJihvPWEudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpe3ZhciBzPXIucmVwbGFjZSgvXmZpbGU6XC9cLy8sIiIpO2lmKCJmaWxlIj09by5zY2hlbWUmJnRoaXMuX3NvdXJjZXMuaGFzKHMpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihzKV07aWYoKCFvLnBhdGh8fCIvIj09by5wYXRoKSYmdGhpcy5fc291cmNlcy5oYXMoIi8iK3IpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZigiLyIrcildfWlmKHQpcmV0dXJuIG51bGw7dGhyb3cgbmV3IEVycm9yKCciJytyKyciIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpfSxvLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD1hLmdldEFyZyhlLCJzb3VyY2UiKTtpZigodD10aGlzLl9maW5kU291cmNlSW5kZXgodCkpPDApcmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9O3ZhciBuPXtzb3VyY2U6dCxvcmlnaW5hbExpbmU6YS5nZXRBcmcoZSwibGluZSIpLG9yaWdpbmFsQ29sdW1uOmEuZ2V0QXJnKGUsImNvbHVtbiIpfSxvPXRoaXMuX2ZpbmRNYXBwaW5nKG4sdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLGEuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsYS5nZXRBcmcoZSwiYmlhcyIsci5HUkVBVEVTVF9MT1dFUl9CT1VORCkpO2lmKG8+PTApe3ZhciBzPXRoaXMuX29yaWdpbmFsTWFwcGluZ3Nbb107aWYocy5zb3VyY2U9PT1uLnNvdXJjZSlyZXR1cm57bGluZTphLmdldEFyZyhzLCJnZW5lcmF0ZWRMaW5lIixudWxsKSxjb2x1bW46YS5nZXRBcmcocywiZ2VuZXJhdGVkQ29sdW1uIixudWxsKSxsYXN0Q29sdW1uOmEuZ2V0QXJnKHMsImxhc3RHZW5lcmF0ZWRDb2x1bW4iLG51bGwpfX1yZXR1cm57bGluZTpudWxsLGNvbHVtbjpudWxsLGxhc3RDb2x1bW46bnVsbH19LHQuQmFzaWNTb3VyY2VNYXBDb25zdW1lcj1vLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsaS5wcm90b3R5cGUuX3ZlcnNpb249MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInNvdXJjZXMiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKylmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoO24rKyllLnB1c2godGhpcy5fc2VjdGlvbnNbdF0uY29uc3VtZXIuc291cmNlc1tuXSk7cmV0dXJuIGV9fSksaS5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD17Z2VuZXJhdGVkTGluZTphLmdldEFyZyhlLCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOmEuZ2V0QXJnKGUsImNvbHVtbiIpfSxuPWwuc2VhcmNoKHQsdGhpcy5fc2VjdGlvbnMsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gbnx8ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1ufSkscj10aGlzLl9zZWN0aW9uc1tuXTtyZXR1cm4gcj9yLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6dC5nZW5lcmF0ZWRMaW5lLShyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjp0LmdlbmVyYXRlZENvbHVtbi0oci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXQuZ2VuZXJhdGVkTGluZT9yLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxiaWFzOmUuYmlhc30pOntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX0saS5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKX0pfSxpLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgcj10aGlzLl9zZWN0aW9uc1tuXSxvPXIuY29uc3VtZXIuc291cmNlQ29udGVudEZvcihlLCEwKTtpZihvKXJldHVybiBvfWlmKHQpcmV0dXJuIG51bGw7dGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpfSxpLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuX3NlY3Rpb25zLmxlbmd0aDt0Kyspe3ZhciBuPXRoaXMuX3NlY3Rpb25zW3RdO2lmKC0xIT09bi5jb25zdW1lci5fZmluZFNvdXJjZUluZGV4KGEuZ2V0QXJnKGUsInNvdXJjZSIpKSl7dmFyIHI9bi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihlKTtpZihyKXtyZXR1cm57bGluZTpyLmxpbmUrKG4uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOnIuY29sdW1uKyhuLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09ci5saW5lP24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApfX19fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGx9fSxpLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtuKyspZm9yKHZhciByPXRoaXMuX3NlY3Rpb25zW25dLG89ci5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3Mscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgaT1vW3NdLGw9ci5jb25zdW1lci5fc291cmNlcy5hdChpLnNvdXJjZSk7bD1hLmNvbXB1dGVTb3VyY2VVUkwoci5jb25zdW1lci5zb3VyY2VSb290LGwsdGhpcy5fc291cmNlTWFwVVJMKSx0aGlzLl9zb3VyY2VzLmFkZChsKSxsPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihsKTt2YXIgdT1udWxsO2kubmFtZSYmKHU9ci5jb25zdW1lci5fbmFtZXMuYXQoaS5uYW1lKSx0aGlzLl9uYW1lcy5hZGQodSksdT10aGlzLl9uYW1lcy5pbmRleE9mKHUpKTt2YXIgYz17c291cmNlOmwsZ2VuZXJhdGVkTGluZTppLmdlbmVyYXRlZExpbmUrKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksZ2VuZXJhdGVkQ29sdW1uOmkuZ2VuZXJhdGVkQ29sdW1uKyhyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09aS5nZW5lcmF0ZWRMaW5lP3IuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLG9yaWdpbmFsTGluZTppLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjppLm9yaWdpbmFsQ29sdW1uLG5hbWU6dX07dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYyksIm51bWJlciI9PXR5cGVvZiBjLm9yaWdpbmFsTGluZSYmdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChjKX1kKHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyxhLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKSxkKHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLGEuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpfSx0LkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcj1pfSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1nZW5lcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2V8fChlPXt9KSx0aGlzLl9maWxlPXMuZ2V0QXJnKGUsImZpbGUiLG51bGwpLHRoaXMuX3NvdXJjZVJvb3Q9cy5nZXRBcmcoZSwic291cmNlUm9vdCIsbnVsbCksdGhpcy5fc2tpcFZhbGlkYXRpb249cy5nZXRBcmcoZSwic2tpcFZhbGlkYXRpb24iLCExKSx0aGlzLl9zb3VyY2VzPW5ldyBpLHRoaXMuX25hbWVzPW5ldyBpLHRoaXMuX21hcHBpbmdzPW5ldyBhLHRoaXMuX3NvdXJjZXNDb250ZW50cz1udWxsfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2FycmF5LXNldC5qcyIpLkFycmF5U2V0LGE9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvbWFwcGluZy1saXN0LmpzIikuTWFwcGluZ0xpc3Q7ci5wcm90b3R5cGUuX3ZlcnNpb249MyxyLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zb3VyY2VSb290LG49bmV3IHIoe2ZpbGU6ZS5maWxlLHNvdXJjZVJvb3Q6dH0pO3JldHVybiBlLmVhY2hNYXBwaW5nKGZ1bmN0aW9uKGUpe3ZhciByPXtnZW5lcmF0ZWQ6e2xpbmU6ZS5nZW5lcmF0ZWRMaW5lLGNvbHVtbjplLmdlbmVyYXRlZENvbHVtbn19O251bGwhPWUuc291cmNlJiYoci5zb3VyY2U9ZS5zb3VyY2UsbnVsbCE9dCYmKHIuc291cmNlPXMucmVsYXRpdmUodCxyLnNvdXJjZSkpLHIub3JpZ2luYWw9e2xpbmU6ZS5vcmlnaW5hbExpbmUsY29sdW1uOmUub3JpZ2luYWxDb2x1bW59LG51bGwhPWUubmFtZSYmKHIubmFtZT1lLm5hbWUpKSxuLmFkZE1hcHBpbmcocil9KSxlLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1yO251bGwhPT10JiYobz1zLnJlbGF0aXZlKHQscikpLG4uX3NvdXJjZXMuaGFzKG8pfHxuLl9zb3VyY2VzLmFkZChvKTt2YXIgaT1lLnNvdXJjZUNvbnRlbnRGb3Iocik7bnVsbCE9aSYmbi5zZXRTb3VyY2VDb250ZW50KHIsaSl9KSxufSxyLnByb3RvdHlwZS5hZGRNYXBwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXMuZ2V0QXJnKGUsImdlbmVyYXRlZCIpLG49cy5nZXRBcmcoZSwib3JpZ2luYWwiLG51bGwpLHI9cy5nZXRBcmcoZSwic291cmNlIixudWxsKSxvPXMuZ2V0QXJnKGUsIm5hbWUiLG51bGwpO3RoaXMuX3NraXBWYWxpZGF0aW9ufHx0aGlzLl92YWxpZGF0ZU1hcHBpbmcodCxuLHIsbyksbnVsbCE9ciYmKHI9U3RyaW5nKHIpLHRoaXMuX3NvdXJjZXMuaGFzKHIpfHx0aGlzLl9zb3VyY2VzLmFkZChyKSksbnVsbCE9byYmKG89U3RyaW5nKG8pLHRoaXMuX25hbWVzLmhhcyhvKXx8dGhpcy5fbmFtZXMuYWRkKG8pKSx0aGlzLl9tYXBwaW5ncy5hZGQoe2dlbmVyYXRlZExpbmU6dC5saW5lLGdlbmVyYXRlZENvbHVtbjp0LmNvbHVtbixvcmlnaW5hbExpbmU6bnVsbCE9biYmbi5saW5lLG9yaWdpbmFsQ29sdW1uOm51bGwhPW4mJm4uY29sdW1uLHNvdXJjZTpyLG5hbWU6b30pfSxyLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtudWxsIT10aGlzLl9zb3VyY2VSb290JiYobj1zLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsbikpLG51bGwhPXQ/KHRoaXMuX3NvdXJjZXNDb250ZW50c3x8KHRoaXMuX3NvdXJjZXNDb250ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLl9zb3VyY2VzQ29udGVudHNbcy50b1NldFN0cmluZyhuKV09dCk6dGhpcy5fc291cmNlc0NvbnRlbnRzJiYoZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1tzLnRvU2V0U3RyaW5nKG4pXSwwPT09T2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGgmJih0aGlzLl9zb3VyY2VzQ29udGVudHM9bnVsbCkpfSxyLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dDtpZihudWxsPT10KXtpZihudWxsPT1lLmZpbGUpdGhyb3cgbmV3IEVycm9yKCdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgb3IgdGhlIHNvdXJjZSBtYXBcJ3MgImZpbGUiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nKTtyPWUuZmlsZX12YXIgbz10aGlzLl9zb3VyY2VSb290O251bGwhPW8mJihyPXMucmVsYXRpdmUobyxyKSk7dmFyIGE9bmV3IGksbD1uZXcgaTt0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24odCl7aWYodC5zb3VyY2U9PT1yJiZudWxsIT10Lm9yaWdpbmFsTGluZSl7dmFyIGk9ZS5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOnQub3JpZ2luYWxMaW5lLGNvbHVtbjp0Lm9yaWdpbmFsQ29sdW1ufSk7bnVsbCE9aS5zb3VyY2UmJih0LnNvdXJjZT1pLnNvdXJjZSxudWxsIT1uJiYodC5zb3VyY2U9cy5qb2luKG4sdC5zb3VyY2UpKSxudWxsIT1vJiYodC5zb3VyY2U9cy5yZWxhdGl2ZShvLHQuc291cmNlKSksdC5vcmlnaW5hbExpbmU9aS5saW5lLHQub3JpZ2luYWxDb2x1bW49aS5jb2x1bW4sbnVsbCE9aS5uYW1lJiYodC5uYW1lPWkubmFtZSkpfXZhciB1PXQuc291cmNlO251bGw9PXV8fGEuaGFzKHUpfHxhLmFkZCh1KTt2YXIgYz10Lm5hbWU7bnVsbD09Y3x8bC5oYXMoYyl8fGwuYWRkKGMpfSx0aGlzKSx0aGlzLl9zb3VyY2VzPWEsdGhpcy5fbmFtZXM9bCxlLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLnNvdXJjZUNvbnRlbnRGb3IodCk7bnVsbCE9ciYmKG51bGwhPW4mJih0PXMuam9pbihuLHQpKSxudWxsIT1vJiYodD1zLnJlbGF0aXZlKG8sdCkpLHRoaXMuc2V0U291cmNlQ29udGVudCh0LHIpKX0sdGhpcyl9LHIucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4scil7aWYodCYmIm51bWJlciIhPXR5cGVvZiB0LmxpbmUmJiJudW1iZXIiIT10eXBlb2YgdC5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0IHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyBudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLiIpO2lmKCghKGUmJiJsaW5lImluIGUmJiJjb2x1bW4iaW4gZSYmZS5saW5lPjAmJmUuY29sdW1uPj0wKXx8dHx8bnx8cikmJiEoZSYmImxpbmUiaW4gZSYmImNvbHVtbiJpbiBlJiZ0JiYibGluZSJpbiB0JiYiY29sdW1uImluIHQmJmUubGluZT4wJiZlLmNvbHVtbj49MCYmdC5saW5lPjAmJnQuY29sdW1uPj0wJiZuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFwcGluZzogIitKU09OLnN0cmluZ2lmeSh7Z2VuZXJhdGVkOmUsc291cmNlOm4sb3JpZ2luYWw6dCxuYW1lOnJ9KSl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG4scixpPTAsYT0xLGw9MCx1PTAsYz0wLGQ9MCxfPSIiLHA9dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpLGY9MCxtPXAubGVuZ3RoO2Y8bTtmKyspe2lmKHQ9cFtmXSxlPSIiLHQuZ2VuZXJhdGVkTGluZSE9PWEpZm9yKGk9MDt0LmdlbmVyYXRlZExpbmUhPT1hOyllKz0iOyIsYSsrO2Vsc2UgaWYoZj4wKXtpZighcy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCh0LHBbZi0xXSkpY29udGludWU7ZSs9IiwifWUrPW8uZW5jb2RlKHQuZ2VuZXJhdGVkQ29sdW1uLWkpLGk9dC5nZW5lcmF0ZWRDb2x1bW4sbnVsbCE9dC5zb3VyY2UmJihyPXRoaXMuX3NvdXJjZXMuaW5kZXhPZih0LnNvdXJjZSksZSs9by5lbmNvZGUoci1kKSxkPXIsZSs9by5lbmNvZGUodC5vcmlnaW5hbExpbmUtMS11KSx1PXQub3JpZ2luYWxMaW5lLTEsZSs9by5lbmNvZGUodC5vcmlnaW5hbENvbHVtbi1sKSxsPXQub3JpZ2luYWxDb2x1bW4sbnVsbCE9dC5uYW1lJiYobj10aGlzLl9uYW1lcy5pbmRleE9mKHQubmFtZSksZSs9by5lbmNvZGUobi1jKSxjPW4pKSxfKz1lfXJldHVybiBffSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudD1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtpZighdGhpcy5fc291cmNlc0NvbnRlbnRzKXJldHVybiBudWxsO251bGwhPXQmJihlPXMucmVsYXRpdmUodCxlKSk7dmFyIG49cy50b1NldFN0cmluZyhlKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cyxuKT90aGlzLl9zb3VyY2VzQ29udGVudHNbbl06bnVsbH0sdGhpcyl9LHIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOnRoaXMuX3ZlcnNpb24sc291cmNlczp0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxuYW1lczp0aGlzLl9uYW1lcy50b0FycmF5KCksbWFwcGluZ3M6dGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKX07cmV0dXJuIG51bGwhPXRoaXMuX2ZpbGUmJihlLmZpbGU9dGhpcy5fZmlsZSksbnVsbCE9dGhpcy5fc291cmNlUm9vdCYmKGUuc291cmNlUm9vdD10aGlzLl9zb3VyY2VSb290KSx0aGlzLl9zb3VyY2VzQ29udGVudHMmJihlLnNvdXJjZXNDb250ZW50PXRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoZS5zb3VyY2VzLGUuc291cmNlUm9vdCkpLGV9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpfSx0LlNvdXJjZU1hcEdlbmVyYXRvcj1yfSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW5vZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIsbyl7dGhpcy5jaGlsZHJlbj1bXSx0aGlzLnNvdXJjZUNvbnRlbnRzPXt9LHRoaXMubGluZT1udWxsPT1lP251bGw6ZSx0aGlzLmNvbHVtbj1udWxsPT10P251bGw6dCx0aGlzLnNvdXJjZT1udWxsPT1uP251bGw6bix0aGlzLm5hbWU9bnVsbD09bz9udWxsOm8sdGhpc1thXT0hMCxudWxsIT1yJiZ0aGlzLmFkZChyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIpLlNvdXJjZU1hcEdlbmVyYXRvcixzPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiKSxpPS8oXHI/XG4pLyxhPSIkJCRpc1NvdXJjZU5vZGUkJCQiO3IuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXA9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIG8oZSx0KXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZS5zb3VyY2UpYS5hZGQodCk7ZWxzZXt2YXIgbz1uP3Muam9pbihuLGUuc291cmNlKTplLnNvdXJjZTthLmFkZChuZXcgcihlLm9yaWdpbmFsTGluZSxlLm9yaWdpbmFsQ29sdW1uLG8sdCxlLm5hbWUpKX19dmFyIGE9bmV3IHIsbD1lLnNwbGl0KGkpLHU9MCxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiB1PGwubGVuZ3RoP2xbdSsrXTp2b2lkIDB9cmV0dXJuIGUoKSsoZSgpfHwiIil9LGQ9MSxfPTAscD1udWxsO3JldHVybiB0LmVhY2hNYXBwaW5nKGZ1bmN0aW9uKGUpe2lmKG51bGwhPT1wKXtpZighKGQ8ZS5nZW5lcmF0ZWRMaW5lKSl7dmFyIHQ9bFt1XXx8IiIsbj10LnN1YnN0cigwLGUuZ2VuZXJhdGVkQ29sdW1uLV8pO3JldHVybiBsW3VdPXQuc3Vic3RyKGUuZ2VuZXJhdGVkQ29sdW1uLV8pLF89ZS5nZW5lcmF0ZWRDb2x1bW4sbyhwLG4pLHZvaWQocD1lKX1vKHAsYygpKSxkKyssXz0wfWZvcig7ZDxlLmdlbmVyYXRlZExpbmU7KWEuYWRkKGMoKSksZCsrO2lmKF88ZS5nZW5lcmF0ZWRDb2x1bW4pe3ZhciB0PWxbdV18fCIiO2EuYWRkKHQuc3Vic3RyKDAsZS5nZW5lcmF0ZWRDb2x1bW4pKSxsW3VdPXQuc3Vic3RyKGUuZ2VuZXJhdGVkQ29sdW1uKSxfPWUuZ2VuZXJhdGVkQ29sdW1ufXA9ZX0sdGhpcyksdTxsLmxlbmd0aCYmKHAmJm8ocCxjKCkpLGEuYWRkKGwuc3BsaWNlKHUpLmpvaW4oIiIpKSksdC5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dC5zb3VyY2VDb250ZW50Rm9yKGUpO251bGwhPXImJihudWxsIT1uJiYoZT1zLmpvaW4obixlKSksYS5zZXRTb3VyY2VDb250ZW50KGUscikpfSksYX0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMuYWRkKGUpfSx0aGlzKTtlbHNle2lmKCFlW2FdJiYic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgIitlKTtlJiZ0aGlzLmNoaWxkcmVuLnB1c2goZSl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLnByZXBlbmQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLnByZXBlbmQoZVt0XSk7ZWxzZXtpZighZVthXSYmInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290ICIrZSk7dGhpcy5jaGlsZHJlbi51bnNoaWZ0KGUpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXQ9dGhpcy5jaGlsZHJlbltuXSx0W2FdP3Qud2FsayhlKToiIiE9PXQmJmUodCx7c291cmNlOnRoaXMuc291cmNlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbixuYW1lOnRoaXMubmFtZX0pfSxyLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmNoaWxkcmVuLmxlbmd0aDtpZihyPjApe2Zvcih0PVtdLG49MDtuPHItMTtuKyspdC5wdXNoKHRoaXMuY2hpbGRyZW5bbl0pLHQucHVzaChlKTt0LnB1c2godGhpcy5jaGlsZHJlbltuXSksdGhpcy5jaGlsZHJlbj10fXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5yZXBsYWNlUmlnaHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdO3JldHVybiBuW2FdP24ucmVwbGFjZVJpZ2h0KGUsdCk6InN0cmluZyI9PXR5cGVvZiBuP3RoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV09bi5yZXBsYWNlKGUsdCk6dGhpcy5jaGlsZHJlbi5wdXNoKCIiLnJlcGxhY2UoZSx0KSksdGhpc30sci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudD1mdW5jdGlvbihlLHQpe3RoaXMuc291cmNlQ29udGVudHNbcy50b1NldFN0cmluZyhlKV09dH0sci5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5jaGlsZHJlbi5sZW5ndGg7dDxuO3QrKyl0aGlzLmNoaWxkcmVuW3RdW2FdJiZ0aGlzLmNoaWxkcmVuW3RdLndhbGtTb3VyY2VDb250ZW50cyhlKTtmb3IodmFyIHI9T2JqZWN0LmtleXModGhpcy5zb3VyY2VDb250ZW50cyksdD0wLG49ci5sZW5ndGg7dDxuO3QrKyllKHMuZnJvbVNldFN0cmluZyhyW3RdKSx0aGlzLnNvdXJjZUNvbnRlbnRzW3JbdF1dKX0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKHQpe2UrPXR9KSxlfSxyLnByb3RvdHlwZS50b1N0cmluZ1dpdGhTb3VyY2VNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NvZGU6IiIsbGluZToxLGNvbHVtbjowfSxuPW5ldyBvKGUpLHI9ITEscz1udWxsLGk9bnVsbCxhPW51bGwsbD1udWxsO3JldHVybiB0aGlzLndhbGsoZnVuY3Rpb24oZSxvKXt0LmNvZGUrPWUsbnVsbCE9PW8uc291cmNlJiZudWxsIT09by5saW5lJiZudWxsIT09by5jb2x1bW4/KHM9PT1vLnNvdXJjZSYmaT09PW8ubGluZSYmYT09PW8uY29sdW1uJiZsPT09by5uYW1lfHxuLmFkZE1hcHBpbmcoe3NvdXJjZTpvLnNvdXJjZSxvcmlnaW5hbDp7bGluZTpvLmxpbmUsY29sdW1uOm8uY29sdW1ufSxnZW5lcmF0ZWQ6e2xpbmU6dC5saW5lLGNvbHVtbjp0LmNvbHVtbn0sbmFtZTpvLm5hbWV9KSxzPW8uc291cmNlLGk9by5saW5lLGE9by5jb2x1bW4sbD1vLm5hbWUscj0hMCk6ciYmKG4uYWRkTWFwcGluZyh7Z2VuZXJhdGVkOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59fSkscz1udWxsLHI9ITEpO2Zvcih2YXIgdT0wLGM9ZS5sZW5ndGg7dTxjO3UrKykxMD09PWUuY2hhckNvZGVBdCh1KT8odC5saW5lKyssdC5jb2x1bW49MCx1KzE9PT1jPyhzPW51bGwscj0hMSk6ciYmbi5hZGRNYXBwaW5nKHtzb3VyY2U6by5zb3VyY2Usb3JpZ2luYWw6e2xpbmU6by5saW5lLGNvbHVtbjpvLmNvbHVtbn0sZ2VuZXJhdGVkOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59LG5hbWU6by5uYW1lfSkpOnQuY29sdW1uKyt9KSx0aGlzLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbihlLHQpe24uc2V0U291cmNlQ29udGVudChlLHQpfSkse2NvZGU6dC5jb2RlLG1hcDpufX0sdC5Tb3VyY2VOb2RlPXJ9LCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi91dGlsLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe2lmKHQgaW4gZSlyZXR1cm4gZVt0XTtpZigzPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKX1mdW5jdGlvbiByKGUpe3ZhciB0PWUubWF0Y2goYik7cmV0dXJuIHQ/e3NjaGVtZTp0WzFdLGF1dGg6dFsyXSxob3N0OnRbM10scG9ydDp0WzRdLHBhdGg6dFs1XX06bnVsbH1mdW5jdGlvbiBvKGUpe3ZhciB0PSIiO3JldHVybiBlLnNjaGVtZSYmKHQrPWUuc2NoZW1lKyI6IiksdCs9Ii8vIixlLmF1dGgmJih0Kz1lLmF1dGgrIkAiKSxlLmhvc3QmJih0Kz1lLmhvc3QpLGUucG9ydCYmKHQrPSI6IitlLnBvcnQpLGUucGF0aCYmKHQrPWUucGF0aCksdH1mdW5jdGlvbiBzKGUpe3ZhciBuPWUscz1yKGUpO2lmKHMpe2lmKCFzLnBhdGgpcmV0dXJuIGU7bj1zLnBhdGh9Zm9yKHZhciBpLGE9dC5pc0Fic29sdXRlKG4pLGw9bi5zcGxpdCgvXC8rLyksdT0wLGM9bC5sZW5ndGgtMTtjPj0wO2MtLSlpPWxbY10sIi4iPT09aT9sLnNwbGljZShjLDEpOiIuLiI9PT1pP3UrKzp1PjAmJigiIj09PWk/KGwuc3BsaWNlKGMrMSx1KSx1PTApOihsLnNwbGljZShjLDIpLHUtLSkpO3JldHVybiBuPWwuam9pbigiLyIpLCIiPT09biYmKG49YT8iLyI6Ii4iKSxzPyhzLnBhdGg9bixvKHMpKTpufWZ1bmN0aW9uIGkoZSx0KXsiIj09PWUmJihlPSIuIiksIiI9PT10JiYodD0iLiIpO3ZhciBuPXIodCksaT1yKGUpO2lmKGkmJihlPWkucGF0aHx8Ii8iKSxuJiYhbi5zY2hlbWUpcmV0dXJuIGkmJihuLnNjaGVtZT1pLnNjaGVtZSksbyhuKTtpZihufHx0Lm1hdGNoKEUpKXJldHVybiB0O2lmKGkmJiFpLmhvc3QmJiFpLnBhdGgpcmV0dXJuIGkuaG9zdD10LG8oaSk7dmFyIGE9Ii8iPT09dC5jaGFyQXQoMCk/dDpzKGUucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0KTtyZXR1cm4gaT8oaS5wYXRoPWEsbyhpKSk6YX1mdW5jdGlvbiBhKGUsdCl7IiI9PT1lJiYoZT0iLiIpLGU9ZS5yZXBsYWNlKC9cLyQvLCIiKTtmb3IodmFyIG49MDswIT09dC5pbmRleE9mKGUrIi8iKTspe3ZhciByPWUubGFzdEluZGV4T2YoIi8iKTtpZihyPDApcmV0dXJuIHQ7aWYoZT1lLnNsaWNlKDAsciksZS5tYXRjaCgvXihbXlwvXSs6XC8pP1wvKiQvKSlyZXR1cm4gdDsrK259cmV0dXJuIEFycmF5KG4rMSkuam9pbigiLi4vIikrdC5zdWJzdHIoZS5sZW5ndGgrMSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZX1mdW5jdGlvbiB1KGUpe3JldHVybiBkKGUpPyIkIitlOmV9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZChlKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gZChlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLmxlbmd0aDtpZih0PDkpcmV0dXJuITE7aWYoOTUhPT1lLmNoYXJDb2RlQXQodC0xKXx8OTUhPT1lLmNoYXJDb2RlQXQodC0yKXx8MTExIT09ZS5jaGFyQ29kZUF0KHQtMyl8fDExNiE9PWUuY2hhckNvZGVBdCh0LTQpfHwxMTEhPT1lLmNoYXJDb2RlQXQodC01KXx8MTE0IT09ZS5jaGFyQ29kZUF0KHQtNil8fDExMiE9PWUuY2hhckNvZGVBdCh0LTcpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTgpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTkpKXJldHVybiExO2Zvcih2YXIgbj10LTEwO24+PTA7bi0tKWlmKDM2IT09ZS5jaGFyQ29kZUF0KG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIF8oZSx0LG4pe3ZhciByPWYoZS5zb3VyY2UsdC5zb3VyY2UpO3JldHVybiAwIT09cj9yOjAhPT0ocj1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZSk/cjowIT09KHI9ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uKXx8bj9yOjAhPT0ocj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/cjoocj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lLDAhPT1yP3I6ZihlLm5hbWUsdC5uYW1lKSl9ZnVuY3Rpb24gcChlLHQsbil7dmFyIHI9ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PXI/cjowIT09KHI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pfHxuP3I6MCE9PShyPWYoZS5zb3VyY2UsdC5zb3VyY2UpKT9yOjAhPT0ocj1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZSk/cjoocj1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW4sMCE9PXI/cjpmKGUubmFtZSx0Lm5hbWUpKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGU9PT10PzA6bnVsbD09PWU/MTpudWxsPT09dD8tMTplPnQ/MTotMX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PW4/bjowIT09KG49ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pP246MCE9PShuPWYoZS5zb3VyY2UsdC5zb3VyY2UpKT9uOjAhPT0obj1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZSk/bjoobj1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW4sMCE9PW4/bjpmKGUubmFtZSx0Lm5hbWUpKX1mdW5jdGlvbiBoKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVwbGFjZSgvXlwpXX0nW15cbl0qXG4vLCIiKSl9ZnVuY3Rpb24gZyhlLHQsbil7aWYodD10fHwiIixlJiYoIi8iIT09ZVtlLmxlbmd0aC0xXSYmIi8iIT09dFswXSYmKGUrPSIvIiksdD1lK3QpLG4pe3ZhciBhPXIobik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJzb3VyY2VNYXBVUkwgY291bGQgbm90IGJlIHBhcnNlZCIpO2lmKGEucGF0aCl7dmFyIGw9YS5wYXRoLmxhc3RJbmRleE9mKCIvIik7bD49MCYmKGEucGF0aD1hLnBhdGguc3Vic3RyaW5nKDAsbCsxKSl9dD1pKG8oYSksdCl9cmV0dXJuIHModCl9dC5nZXRBcmc9bjt2YXIgYj0vXig/OihbXHcrXC0uXSspOik/XC9cLyg/Oihcdys6XHcrKUApPyhbXHcuLV0qKSg/OjooXGQrKSk/KC4qKSQvLEU9L15kYXRhOi4rXCwuKyQvO3QudXJsUGFyc2U9cix0LnVybEdlbmVyYXRlPW8sdC5ub3JtYWxpemU9cyx0LmpvaW49aSx0LmlzQWJzb2x1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCl8fGIudGVzdChlKX0sdC5yZWxhdGl2ZT1hO3ZhciB5PWZ1bmN0aW9uKCl7cmV0dXJuISgiX19wcm90b19fImluIE9iamVjdC5jcmVhdGUobnVsbCkpfSgpO3QudG9TZXRTdHJpbmc9eT9sOnUsdC5mcm9tU2V0U3RyaW5nPXk/bDpjLHQuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM9Xyx0LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkPXAsdC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZD1tLHQucGFyc2VTb3VyY2VNYXBJbnB1dD1oLHQuY29tcHV0ZVNvdXJjZVVSTD1nfSwiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9zb3VyY2UtbWFwLmpzIjpmdW5jdGlvbihlLHQsbil7dC5Tb3VyY2VNYXBHZW5lcmF0b3I9bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1nZW5lcmF0b3IuanMiKS5Tb3VyY2VNYXBHZW5lcmF0b3IsdC5Tb3VyY2VNYXBDb25zdW1lcj1uKCIuL25vZGVfbW9kdWxlcy9wb3N0Y3NzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIikuU291cmNlTWFwQ29uc3VtZXIsdC5Tb3VyY2VOb2RlPW4oIi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1ub2RlLmpzIikuU291cmNlTm9kZX0sIi4vbm9kZV9tb2R1bGVzL3ByZWZpeC1zdHlsZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsLHI9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7bnx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3ZhciB0PW4uc3R5bGU7aWYoZSBpbiB0KXJldHVybiBlO2Zvcih2YXIgbz1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkscz1yLmxlbmd0aDtzPj0wO3MtLSl7dmFyIGk9cltzXStvO2lmKGkgaW4gdClyZXR1cm4gaX1yZXR1cm4hMX19LCIuL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4scixvKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBzLGksYT1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6Y2FzZSAxOnJldHVybiB0Lm5leHRUaWNrKGUpO2Nhc2UgMjpyZXR1cm4gdC5uZXh0VGljayhmdW5jdGlvbigpe2UuY2FsbChudWxsLG4pfSk7Y2FzZSAzOnJldHVybiB0Lm5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwsbixyKX0pO2Nhc2UgNDpyZXR1cm4gdC5uZXh0VGljayhmdW5jdGlvbigpe2UuY2FsbChudWxsLG4scixvKX0pO2RlZmF1bHQ6Zm9yKHM9bmV3IEFycmF5KGEtMSksaT0wO2k8cy5sZW5ndGg7KXNbaSsrXT1hcmd1bWVudHNbaV07cmV0dXJuIHQubmV4dFRpY2soZnVuY3Rpb24oKXtlLmFwcGx5KG51bGwscyl9KX19IXQudmVyc2lvbnx8MD09PXQudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PXQudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PXQudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP2UuZXhwb3J0cz17bmV4dFRpY2s6bn06ZS5leHBvcnRzPXR9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3Byb21pc2UtcG9seWZpbGwvc3JjL2ZpbmFsbHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gdC5yZXNvbHZlKGUoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LnJlamVjdChuKX0pfSl9dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9wcm9taXNlLXBvbHlmaWxsL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZS5hcHBseSh0LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcykpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Iik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigibm90IGEgZnVuY3Rpb24iKTt0aGlzLl9zdGF0ZT0wLHRoaXMuX2hhbmRsZWQ9ITEsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuX2RlZmVycmVkcz1bXSxkKGUsdGhpcyl9ZnVuY3Rpb24gaShlLHQpe2Zvcig7Mz09PWUuX3N0YXRlOyllPWUuX3ZhbHVlO2lmKDA9PT1lLl9zdGF0ZSlyZXR1cm4gdm9pZCBlLl9kZWZlcnJlZHMucHVzaCh0KTtlLl9oYW5kbGVkPSEwLHMuX2ltbWVkaWF0ZUZuKGZ1bmN0aW9uKCl7dmFyIG49MT09PWUuX3N0YXRlP3Qub25GdWxmaWxsZWQ6dC5vblJlamVjdGVkO2lmKG51bGw9PT1uKXJldHVybiB2b2lkKDE9PT1lLl9zdGF0ZT9hOmwpKHQucHJvbWlzZSxlLl92YWx1ZSk7dmFyIHI7dHJ5e3I9bihlLl92YWx1ZSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbCh0LnByb21pc2UsZSl9YSh0LnByb21pc2Uscil9KX1mdW5jdGlvbiBhKGUsdCl7dHJ5e2lmKHQ9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuIik7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXt2YXIgbj10LnRoZW47aWYodCBpbnN0YW5jZW9mIHMpcmV0dXJuIGUuX3N0YXRlPTMsZS5fdmFsdWU9dCx2b2lkIHUoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIHZvaWQgZChvKG4sdCksZSl9ZS5fc3RhdGU9MSxlLl92YWx1ZT10LHUoZSl9Y2F0Y2godCl7bChlLHQpfX1mdW5jdGlvbiBsKGUsdCl7ZS5fc3RhdGU9MixlLl92YWx1ZT10LHUoZSl9ZnVuY3Rpb24gdShlKXsyPT09ZS5fc3RhdGUmJjA9PT1lLl9kZWZlcnJlZHMubGVuZ3RoJiZzLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpe2UuX2hhbmRsZWR8fHMuX3VuaGFuZGxlZFJlamVjdGlvbkZuKGUuX3ZhbHVlKX0pO2Zvcih2YXIgdD0wLG49ZS5fZGVmZXJyZWRzLmxlbmd0aDt0PG47dCsrKWkoZSxlLl9kZWZlcnJlZHNbdF0pO2UuX2RlZmVycmVkcz1udWxsfWZ1bmN0aW9uIGMoZSx0LG4pe3RoaXMub25GdWxmaWxsZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpudWxsLHRoaXMub25SZWplY3RlZD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGwsdGhpcy5wcm9taXNlPW59ZnVuY3Rpb24gZChlLHQpe3ZhciBuPSExO3RyeXtlKGZ1bmN0aW9uKGUpe258fChuPSEwLGEodCxlKSl9LGZ1bmN0aW9uKGUpe258fChuPSEwLGwodCxlKSl9KX1jYXRjaChlKXtpZihuKXJldHVybjtuPSEwLGwodCxlKX19dmFyIF89bigiLi9ub2RlX21vZHVsZXMvcHJvbWlzZS1wb2x5ZmlsbC9zcmMvZmluYWxseS5qcyIpLHA9c2V0VGltZW91dDtzLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LHMucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gaSh0aGlzLG5ldyBjKGUsdCxuKSksbn0scy5wcm90b3R5cGUuZmluYWxseT1fLmEscy5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzKGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcihlLGkpe3RyeXtpZihpJiYoIm9iamVjdCI9PXR5cGVvZiBpfHwiZnVuY3Rpb24iPT10eXBlb2YgaSkpe3ZhciBhPWkudGhlbjtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlyZXR1cm4gdm9pZCBhLmNhbGwoaSxmdW5jdGlvbih0KXtyKGUsdCl9LG4pfW9bZV09aSwwPT0tLXMmJnQobyl9Y2F0Y2goZSl7bihlKX19aWYoIWV8fHZvaWQgMD09PWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXkiKTt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKTtpZigwPT09by5sZW5ndGgpcmV0dXJuIHQoW10pO2Zvcih2YXIgcz1vLmxlbmd0aCxpPTA7aTxvLmxlbmd0aDtpKyspcihpLG9baV0pfSl9LHMucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yPT09cz9lOm5ldyBzKGZ1bmN0aW9uKHQpe3QoZSl9KX0scy5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzKGZ1bmN0aW9uKHQsbil7bihlKX0pfSxzLnJhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPTAsbz1lLmxlbmd0aDtyPG87cisrKWVbcl0udGhlbih0LG4pfSl9LHMuX2ltbWVkaWF0ZUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZmdW5jdGlvbih0KXtlKHQpfXx8ZnVuY3Rpb24oZSl7cChlLDApfSxzLl91bmhhbmRsZWRSZWplY3Rpb25Gbj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUud2FybigiUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiIsZSl9LHQuYT1zfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiKS5zZXRJbW1lZGlhdGUpfSwiLi9ub2RlX21vZHVsZXMvcHJvbWlzZS1wb2x5ZmlsbC9zcmMvcG9seWZpbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe3ZhciB0PW4oIi4vbm9kZV9tb2R1bGVzL3Byb21pc2UtcG9seWZpbGwvc3JjL2luZGV4LmpzIikscj1uKCIuL25vZGVfbW9kdWxlcy9wcm9taXNlLXBvbHlmaWxsL3NyYy9maW5hbGx5LmpzIiksbz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QiKX0oKTsiUHJvbWlzZSJpbiBvP28uUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseXx8KG8uUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1yLmEpOm8uUHJvbWlzZT10LmF9LmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7fXIucmVzZXRXYXJuaW5nQ2FjaGU9ZnVuY3Rpb24oKXt9LGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwhMSl9fSwiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBvKCl7fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIik7by5yZXNldFdhcm5pbmdDYWNoZT1yLGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixvLGkpe2lmKGkhPT1zKXt2YXIgYT1uZXcgRXJyb3IoIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTt0aHJvdyBhLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24iLGF9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgbj17YXJyYXk6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6byxyZXNldFdhcm5pbmdDYWNoZTpyfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufX0sIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiBudWxsfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIpLGw9RnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHU9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKFImJmVbUl18fGVbal0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBkKGUpe3RoaXMubWVzc2FnZT1lLHRoaXMuc3RhY2s9IiJ9ZnVuY3Rpb24gXyhlKXtmdW5jdGlvbiBuKG4scixvLHMsYSxsLHUpe2lmKHM9c3x8eCxsPWx8fG8sdSE9PWkpe2lmKHQpe3ZhciBjPW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7dGhyb3cgYy5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixjfX1yZXR1cm4gbnVsbD09cltvXT9uP25ldyBkKG51bGw9PT1yW29dPyJUaGUgIithKyIgYCIrbCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrYSsiIGAiK2wrImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuIik6bnVsbDplKHIsbyxzLGEsbCl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiByLmlzUmVxdWlyZWQ9bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rpb24gcChlKXtmdW5jdGlvbiB0KHQsbixyLG8scyxpKXt2YXIgYT10W25dO2lmKEEoYSkhPT1lKXJldHVybiBuZXcgZCgiSW52YWxpZCAiK28rIiBgIitzKyJgIG9mIHR5cGUgYCIrQyhhKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgIitlKyJgLiIpO3JldHVybiBudWxsfXJldHVybiBfKHQpfWZ1bmN0aW9uIGYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLHMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBuZXcgZCgiUHJvcGVydHkgYCIrcysiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgYT10W25dO2lmKCFBcnJheS5pc0FycmF5KGEpKXtyZXR1cm4gbmV3IGQoIkludmFsaWQgIitvKyIgYCIrcysiYCBvZiB0eXBlIGAiK0EoYSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciB1PWUoYSxsLHIsbyxzKyJbIitsKyJdIixpKTtpZih1IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHV9cmV0dXJuIG51bGx9cmV0dXJuIF8odCl9ZnVuY3Rpb24gbShlKXtmdW5jdGlvbiB0KHQsbixyLG8scyl7aWYoISh0W25daW5zdGFuY2VvZiBlKSl7dmFyIGk9ZS5uYW1lfHx4O3JldHVybiBuZXcgZCgiSW52YWxpZCAiK28rIiBgIitzKyJgIG9mIHR5cGUgYCIrUyh0W25dKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIitpKyJgLiIpfXJldHVybiBudWxsfXJldHVybiBfKHQpfWZ1bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0LG4scixvLHMpe2Zvcih2YXIgaT10W25dLGE9MDthPGUubGVuZ3RoO2ErKylpZihjKGksZVthXSkpcmV0dXJuIG51bGw7dmFyIGw9SlNPTi5zdHJpbmdpZnkoZSxmdW5jdGlvbihlLHQpe3JldHVybiJzeW1ib2wiPT09Qyh0KT9TdHJpbmcodCk6dH0pO3JldHVybiBuZXcgZCgiSW52YWxpZCAiK28rIiBgIitzKyJgIG9mIHZhbHVlIGAiK1N0cmluZyhpKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitsKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Xyh0KTpyfWZ1bmN0aW9uIGcoZSl7ZnVuY3Rpb24gdCh0LG4scixvLHMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBuZXcgZCgiUHJvcGVydHkgYCIrcysiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuIik7dmFyIGE9dFtuXSx1PUEoYSk7aWYoIm9iamVjdCIhPT11KXJldHVybiBuZXcgZCgiSW52YWxpZCAiK28rIiBgIitzKyJgIG9mIHR5cGUgYCIrdSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBvYmplY3QuIik7Zm9yKHZhciBjIGluIGEpaWYobChhLGMpKXt2YXIgXz1lKGEsYyxyLG8scysiLiIrYyxpKTtpZihfIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIF99cmV0dXJuIG51bGx9cmV0dXJuIF8odCl9ZnVuY3Rpb24gYihlKXtmdW5jdGlvbiB0KHQsbixyLG8scyl7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe2lmKG51bGw9PSgwLGVbYV0pKHQsbixyLG8scyxpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGQoIkludmFsaWQgIitvKyIgYCIrcysiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfWlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXJldHVybiB1KCJJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgcmVjZWl2ZWQgIitPKG8pKyIgYXQgaW5kZXggIituKyIuIikscn1yZXR1cm4gXyh0KX1mdW5jdGlvbiBFKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxzKXt2YXIgYT10W25dLGw9QShhKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyBkKCJJbnZhbGlkICIrbysiIGAiK3MrImAgb2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGBvYmplY3RgLiIpO2Zvcih2YXIgdSBpbiBlKXt2YXIgYz1lW3VdO2lmKGMpe3ZhciBfPWMoYSx1LHIsbyxzKyIuIit1LGkpO2lmKF8pcmV0dXJuIF99fXJldHVybiBudWxsfXJldHVybiBfKHQpfWZ1bmN0aW9uIHkoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe3ZhciBsPXRbbl0sdT1BKGwpO2lmKCJvYmplY3QiIT09dSlyZXR1cm4gbmV3IGQoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK3UrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYG9iamVjdGAuIik7dmFyIGM9cyh7fSx0W25dLGUpO2Zvcih2YXIgXyBpbiBjKXt2YXIgcD1lW19dO2lmKCFwKXJldHVybiBuZXcgZCgiSW52YWxpZCAiK28rIiBgIithKyJgIGtleSBgIitfKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAuXG5CYWQgb2JqZWN0OiAiK0pTT04uc3RyaW5naWZ5KHRbbl0sbnVsbCwiICAiKSsiXG5WYWxpZCBrZXlzOiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKGUpLG51bGwsIiAgIikpO3ZhciBmPXAobCxfLHIsbyxhKyIuIitfLGkpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9cmV0dXJuIF8odCl9ZnVuY3Rpb24gdih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIXQ7Y2FzZSJvYmplY3QiOmlmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuZXZlcnkodik7aWYobnVsbD09PXR8fGUodCkpcmV0dXJuITA7dmFyIHI9bih0KTtpZighcilyZXR1cm4hMTt2YXIgbyxzPXIuY2FsbCh0KTtpZihyIT09dC5lbnRyaWVzKXtmb3IoOyEobz1zLm5leHQoKSkuZG9uZTspaWYoIXYoby52YWx1ZSkpcmV0dXJuITF9ZWxzZSBmb3IoOyEobz1zLm5leHQoKSkuZG9uZTspe3ZhciBpPW8udmFsdWU7aWYoaSYmIXYoaVsxXSkpcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gVChlLHQpe3JldHVybiJzeW1ib2wiPT09ZXx8ISF0JiYoIlN5bWJvbCI9PT10WyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQgaW5zdGFuY2VvZiBTeW1ib2wpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplIGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3QiOlQodCxlKT8ic3ltYm9sIjp0fWZ1bmN0aW9uIEMoZSl7aWYodm9pZCAwPT09ZXx8bnVsbD09PWUpcmV0dXJuIiIrZTt2YXIgdD1BKGUpO2lmKCJvYmplY3QiPT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuImRhdGUiO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVuY3Rpb24gTyhlKXt2YXIgdD1DKGUpO3N3aXRjaCh0KXtjYXNlImFycmF5IjpjYXNlIm9iamVjdCI6cmV0dXJuImFuICIrdDtjYXNlImJvb2xlYW4iOmNhc2UiZGF0ZSI6Y2FzZSJyZWdleHAiOnJldHVybiJhICIrdDtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBTKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWU/ZS5jb25zdHJ1Y3Rvci5uYW1lOnh9dmFyIFI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGo9IkBAaXRlcmF0b3IiLHg9Ijw8YW5vbnltb3VzPj4iLEw9e2FycmF5OnAoImFycmF5IiksYm9vbDpwKCJib29sZWFuIiksZnVuYzpwKCJmdW5jdGlvbiIpLG51bWJlcjpwKCJudW1iZXIiKSxvYmplY3Q6cCgib2JqZWN0Iiksc3RyaW5nOnAoInN0cmluZyIpLHN5bWJvbDpwKCJzeW1ib2wiKSxhbnk6ZnVuY3Rpb24oKXtyZXR1cm4gXyhyKX0oKSxhcnJheU9mOmYsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuLHIsbyxzKXt2YXIgaT10W25dO2lmKCFlKGkpKXtyZXR1cm4gbmV3IGQoIkludmFsaWQgIitvKyIgYCIrcysiYCBvZiB0eXBlIGAiK0EoaSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBfKHQpfSgpLGVsZW1lbnRUeXBlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLHMpe3ZhciBpPWVbdF07aWYoIW8uaXNWYWxpZEVsZW1lbnRUeXBlKGkpKXtyZXR1cm4gbmV3IGQoIkludmFsaWQgIityKyIgYCIrcysiYCBvZiB0eXBlIGAiK0EoaSkrImAgc3VwcGxpZWQgdG8gYCIrbisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuIil9cmV0dXJuIG51bGx9cmV0dXJuIF8oZSl9KCksaW5zdGFuY2VPZjptLG5vZGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsbyl7cmV0dXJuIHYoZVt0XSk/bnVsbDpuZXcgZCgiSW52YWxpZCAiK3IrIiBgIitvKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLiIpfXJldHVybiBfKGUpfSgpLG9iamVjdE9mOmcsb25lT2Y6aCxvbmVPZlR5cGU6YixzaGFwZTpFLGV4YWN0Onl9O3JldHVybiBkLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsTC5jaGVja1Byb3BUeXBlcz1hLEwucmVzZXRXYXJuaW5nQ2FjaGU9YS5yZXNldFdhcm5pbmdDYWNoZSxMLlByb3BUeXBlcz1MLEx9fSwiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIpKCl9LCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0sIi4vbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUscil7dmFyIG87IWZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGkoZSl7dGhyb3cgUmFuZ2VFcnJvcih3W2VdKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9W107bi0tOylyW25dPXQoZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbChlLHQpe3ZhciBuPWUuc3BsaXQoIkAiKSxyPSIiO3JldHVybiBuLmxlbmd0aD4xJiYocj1uWzBdKyJAIixlPW5bMV0pLGU9ZS5yZXBsYWNlKEQsIi4iKSxyK2EoZS5zcGxpdCgiLiIpLHQpLmpvaW4oIi4iKX1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdCxuLHI9W10sbz0wLHM9ZS5sZW5ndGg7bzxzOyl0PWUuY2hhckNvZGVBdChvKyspLHQ+PTU1Mjk2JiZ0PD01NjMxOSYmbzxzPyhuPWUuY2hhckNvZGVBdChvKyspLDU2MzIwPT0oNjQ1MTImbik/ci5wdXNoKCgoMTAyMyZ0KTw8MTApKygxMDIzJm4pKzY1NTM2KTooci5wdXNoKHQpLG8tLSkpOnIucHVzaCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBjKGUpe3JldHVybiBhKGUsZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGU+NjU1MzUmJihlLT02NTUzNix0Kz1JKGU+Pj4xMCYxMDIzfDU1Mjk2KSxlPTU2MzIwfDEwMjMmZSksdCs9SShlKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUtNDg8MTA/ZS0yMjplLTY1PDI2P2UtNjU6ZS05NzwyNj9lLTk3OnZ9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBlKzIyKzc1KihlPDI2KS0oKDAhPXQpPDw1KX1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj0wO2ZvcihlPW4/ayhlL08pOmU+PjEsZSs9ayhlL3QpO2U+TSpBPj4xO3IrPXYpZT1rKGUvTSk7cmV0dXJuIGsocisoTSsxKSplLyhlK0MpKX1mdW5jdGlvbiBmKGUpe3ZhciB0LG4scixvLHMsYSxsLHUsXyxmLG09W10saD1lLmxlbmd0aCxnPTAsYj1SLEU9Uztmb3Iobj1lLmxhc3RJbmRleE9mKGopLG48MCYmKG49MCkscj0wO3I8bjsrK3IpZS5jaGFyQ29kZUF0KHIpPj0xMjgmJmkoIm5vdC1iYXNpYyIpLG0ucHVzaChlLmNoYXJDb2RlQXQocikpO2ZvcihvPW4+MD9uKzE6MDtvPGg7KXtmb3Iocz1nLGE9MSxsPXY7bz49aCYmaSgiaW52YWxpZC1pbnB1dCIpLHU9ZChlLmNoYXJDb2RlQXQobysrKSksKHU+PXZ8fHU+aygoeS1nKS9hKSkmJmkoIm92ZXJmbG93IiksZys9dSphLF89bDw9RT9UOmw+PUUrQT9BOmwtRSwhKHU8Xyk7bCs9dilmPXYtXyxhPmsoeS9mKSYmaSgib3ZlcmZsb3ciKSxhKj1mO3Q9bS5sZW5ndGgrMSxFPXAoZy1zLHQsMD09cyksayhnL3QpPnktYiYmaSgib3ZlcmZsb3ciKSxiKz1rKGcvdCksZyU9dCxtLnNwbGljZShnKyssMCxiKX1yZXR1cm4gYyhtKX1mdW5jdGlvbiBtKGUpe3ZhciB0LG4scixvLHMsYSxsLGMsZCxmLG0saCxnLGIsRSxDPVtdO2ZvcihlPXUoZSksaD1lLmxlbmd0aCx0PVIsbj0wLHM9UyxhPTA7YTxoOysrYSkobT1lW2FdKTwxMjgmJkMucHVzaChJKG0pKTtmb3Iocj1vPUMubGVuZ3RoLG8mJkMucHVzaChqKTtyPGg7KXtmb3IobD15LGE9MDthPGg7KythKShtPWVbYV0pPj10JiZtPGwmJihsPW0pO2ZvcihnPXIrMSxsLXQ+aygoeS1uKS9nKSYmaSgib3ZlcmZsb3ciKSxuKz0obC10KSpnLHQ9bCxhPTA7YTxoOysrYSlpZihtPWVbYV0sbTx0JiYrK24+eSYmaSgib3ZlcmZsb3ciKSxtPT10KXtmb3IoYz1uLGQ9djtmPWQ8PXM/VDpkPj1zK0E/QTpkLXMsIShjPGYpO2QrPXYpRT1jLWYsYj12LWYsQy5wdXNoKEkoXyhmK0UlYiwwKSkpLGM9ayhFL2IpO0MucHVzaChJKF8oYywwKSkpLHM9cChuLGcscj09byksbj0wLCsrcn0rK24sKyt0fXJldHVybiBDLmpvaW4oIiIpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGwoZSxmdW5jdGlvbihlKXtyZXR1cm4geC50ZXN0KGUpP2YoZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTplfSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbChlLGZ1bmN0aW9uKGUpe3JldHVybiBMLnRlc3QoZSk/InhuLS0iK20oZSk6ZX0pfXZhciBiPSgib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQubm9kZVR5cGUsIm9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLm5vZGVUeXBlLCJvYmplY3QiPT10eXBlb2YgciYmcik7dmFyIEUseT0yMTQ3NDgzNjQ3LHY9MzYsVD0xLEE9MjYsQz0zOCxPPTcwMCxTPTcyLFI9MTI4LGo9Ii0iLHg9L154bi0tLyxMPS9bXlx4MjAtXHg3RV0vLEQ9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLHc9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LE09di1ULGs9TWF0aC5mbG9vcixJPVN0cmluZy5mcm9tQ2hhckNvZGU7RT17dmVyc2lvbjoiMS4zLjIiLHVjczI6e2RlY29kZTp1LGVuY29kZTpjfSxkZWNvZGU6ZixlbmNvZGU6bSx0b0FTQ0lJOmcsdG9Vbmljb2RlOmh9LHZvaWQgMCE9PShvPWZ1bmN0aW9uKCl7cmV0dXJuIEV9LmNhbGwodCxuLHQsZSkpJiYoZS5leHBvcnRzPW8pfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcWhpc3RvcnkvZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIiksbz1uLm4ocikscz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhPWZ1bmN0aW9uKGUsdCxuKXtvKCkoImZ1bmN0aW9uIj09dHlwZW9mIHQsIkEgc3RyaW5naWZ5IGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHRyYW5zZm9ybSBxdWVyeSBvYmplY3RzIGludG8gc2VhcmNoIHN0cmluZ3MuIiksbygpKCJmdW5jdGlvbiI9PXR5cGVvZiBuLCJBIHBhcnNlIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHRyYW5zZm9ybSBzZWFyY2ggc3RyaW5ncyBpbnRvIHF1ZXJ5IG9iamVjdHMuIik7dmFyIHI9ZnVuY3Rpb24oZSl7Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjppKGUpKSYmKGUuc2VhcmNoPWUucXVlcnk/dChlLnF1ZXJ5KTplLnNlYXJjaHx8IiIpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VhcmNoO2UucXVlcnk9dD9uKCI/Ij09PXQuY2hhckF0KDApP3Quc3Vic3RyaW5nKDEpOnQpOnt9fSxsPWZ1bmN0aW9uKGUpe1sibG9jYXRpb24iLCJsZW5ndGgiLCJlbnRyaWVzIiwiaW5kZXgiLCJhY3Rpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuaGFzT3duUHJvcGVydHkodCkmJih1W3RdPWVbdF0pfSl9O2UubGlzdGVuKGZ1bmN0aW9uKHQpe2EodCksbChlKX0pLGEoZS5sb2NhdGlvbik7dmFyIHU9cyh7fSxlLHtwdXNoOmZ1bmN0aW9uKHQsbil7cih0KSxlLnB1c2godCxuKX0scmVwbGFjZTpmdW5jdGlvbih0LG4pe3IodCksZS5yZXBsYWNlKHQsbil9LGNyZWF0ZUhyZWY6ZnVuY3Rpb24odCl7cmV0dXJuIHIodCksZS5jcmVhdGVIcmVmKHQpfX0pO3JldHVybiB1fTt0LmRlZmF1bHQ9YX0sIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxvPS8lMjAvZztlLmV4cG9ydHM9e2RlZmF1bHQ6IlJGQzM5ODYiLGZvcm1hdHRlcnM6e1JGQzE3Mzg6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY2FsbChlLG8sIisiKX0sUkZDMzk4NjpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFJGQzE3Mzg6IlJGQzE3MzgiLFJGQzM5ODY6IlJGQzM5ODYifX0sIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIik7ZS5leHBvcnRzPXtmb3JtYXRzOnMscGFyc2U6byxzdHJpbmdpZnk6cn19LCIuL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIiksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9e2FsbG93RG90czohMSxhbGxvd1Byb3RvdHlwZXM6ITEsYXJyYXlMaW1pdDoyMCxkZWNvZGVyOnIuZGVjb2RlLGRlbGltaXRlcjoiJiIsZGVwdGg6NSxwYXJhbWV0ZXJMaW1pdDoxZTMscGxhaW5PYmplY3RzOiExLHN0cmljdE51bGxIYW5kbGluZzohMX0saT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxyPXQuaWdub3JlUXVlcnlQcmVmaXg/ZS5yZXBsYWNlKC9eXD8vLCIiKTplLGk9dC5wYXJhbWV0ZXJMaW1pdD09PTEvMD92b2lkIDA6dC5wYXJhbWV0ZXJMaW1pdCxhPXIuc3BsaXQodC5kZWxpbWl0ZXIsaSksbD0wO2w8YS5sZW5ndGg7KytsKXt2YXIgdSxjLGQ9YVtsXSxfPWQuaW5kZXhPZigiXT0iKSxwPS0xPT09Xz9kLmluZGV4T2YoIj0iKTpfKzE7LTE9PT1wPyh1PXQuZGVjb2RlcihkLHMuZGVjb2RlciksYz10LnN0cmljdE51bGxIYW5kbGluZz9udWxsOiIiKToodT10LmRlY29kZXIoZC5zbGljZSgwLHApLHMuZGVjb2RlciksYz10LmRlY29kZXIoZC5zbGljZShwKzEpLHMuZGVjb2RlcikpLG8uY2FsbChuLHUpP25bdV09W10uY29uY2F0KG5bdV0pLmNvbmNhdChjKTpuW3VdPWN9cmV0dXJuIG59LGE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10LG89ZS5sZW5ndGgtMTtvPj0wOy0tbyl7dmFyIHMsaT1lW29dO2lmKCJbXSI9PT1pKXM9W10scz1zLmNvbmNhdChyKTtlbHNle3M9bi5wbGFpbk9iamVjdHM/T2JqZWN0LmNyZWF0ZShudWxsKTp7fTt2YXIgYT0iWyI9PT1pLmNoYXJBdCgwKSYmIl0iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSk/aS5zbGljZSgxLC0xKTppLGw9cGFyc2VJbnQoYSwxMCk7IWlzTmFOKGwpJiZpIT09YSYmU3RyaW5nKGwpPT09YSYmbD49MCYmbi5wYXJzZUFycmF5cyYmbDw9bi5hcnJheUxpbWl0PyhzPVtdLHNbbF09cik6c1thXT1yfXI9c31yZXR1cm4gcn0sbD1mdW5jdGlvbihlLHQsbil7aWYoZSl7dmFyIHI9bi5hbGxvd0RvdHM/ZS5yZXBsYWNlKC9cLihbXi5bXSspL2csIlskMV0iKTplLHM9LyhcW1teW1xdXSpdKS8saT0vKFxbW15bXF1dKl0pL2csbD1zLmV4ZWMociksdT1sP3Iuc2xpY2UoMCxsLmluZGV4KTpyLGM9W107aWYodSl7aWYoIW4ucGxhaW5PYmplY3RzJiZvLmNhbGwoT2JqZWN0LnByb3RvdHlwZSx1KSYmIW4uYWxsb3dQcm90b3R5cGVzKXJldHVybjtjLnB1c2godSl9Zm9yKHZhciBkPTA7bnVsbCE9PShsPWkuZXhlYyhyKSkmJmQ8bi5kZXB0aDspe2lmKGQrPTEsIW4ucGxhaW5PYmplY3RzJiZvLmNhbGwoT2JqZWN0LnByb3RvdHlwZSxsWzFdLnNsaWNlKDEsLTEpKSYmIW4uYWxsb3dQcm90b3R5cGVzKXJldHVybjtjLnB1c2gobFsxXSl9cmV0dXJuIGwmJmMucHVzaCgiWyIrci5zbGljZShsLmluZGV4KSsiXSIpLGEoYyx0LG4pfX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dD9yLmFzc2lnbih7fSx0KTp7fTtpZihudWxsIT09bi5kZWNvZGVyJiZ2b2lkIDAhPT1uLmRlY29kZXImJiJmdW5jdGlvbiIhPXR5cGVvZiBuLmRlY29kZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZihuLmlnbm9yZVF1ZXJ5UHJlZml4PSEwPT09bi5pZ25vcmVRdWVyeVByZWZpeCxuLmRlbGltaXRlcj0ic3RyaW5nIj09dHlwZW9mIG4uZGVsaW1pdGVyfHxyLmlzUmVnRXhwKG4uZGVsaW1pdGVyKT9uLmRlbGltaXRlcjpzLmRlbGltaXRlcixuLmRlcHRoPSJudW1iZXIiPT10eXBlb2Ygbi5kZXB0aD9uLmRlcHRoOnMuZGVwdGgsbi5hcnJheUxpbWl0PSJudW1iZXIiPT10eXBlb2Ygbi5hcnJheUxpbWl0P24uYXJyYXlMaW1pdDpzLmFycmF5TGltaXQsbi5wYXJzZUFycmF5cz0hMSE9PW4ucGFyc2VBcnJheXMsbi5kZWNvZGVyPSJmdW5jdGlvbiI9PXR5cGVvZiBuLmRlY29kZXI/bi5kZWNvZGVyOnMuZGVjb2RlcixuLmFsbG93RG90cz0iYm9vbGVhbiI9PXR5cGVvZiBuLmFsbG93RG90cz9uLmFsbG93RG90czpzLmFsbG93RG90cyxuLnBsYWluT2JqZWN0cz0iYm9vbGVhbiI9PXR5cGVvZiBuLnBsYWluT2JqZWN0cz9uLnBsYWluT2JqZWN0czpzLnBsYWluT2JqZWN0cyxuLmFsbG93UHJvdG90eXBlcz0iYm9vbGVhbiI9PXR5cGVvZiBuLmFsbG93UHJvdG90eXBlcz9uLmFsbG93UHJvdG90eXBlczpzLmFsbG93UHJvdG90eXBlcyxuLnBhcmFtZXRlckxpbWl0PSJudW1iZXIiPT10eXBlb2Ygbi5wYXJhbWV0ZXJMaW1pdD9uLnBhcmFtZXRlckxpbWl0OnMucGFyYW1ldGVyTGltaXQsbi5zdHJpY3ROdWxsSGFuZGxpbmc9ImJvb2xlYW4iPT10eXBlb2Ygbi5zdHJpY3ROdWxsSGFuZGxpbmc/bi5zdHJpY3ROdWxsSGFuZGxpbmc6cy5zdHJpY3ROdWxsSGFuZGxpbmcsIiI9PT1lfHxudWxsPT09ZXx8dm9pZCAwPT09ZSlyZXR1cm4gbi5wbGFpbk9iamVjdHM/T2JqZWN0LmNyZWF0ZShudWxsKTp7fTtmb3IodmFyIG89InN0cmluZyI9PXR5cGVvZiBlP2koZSxuKTplLGE9bi5wbGFpbk9iamVjdHM/T2JqZWN0LmNyZWF0ZShudWxsKTp7fSx1PU9iamVjdC5rZXlzKG8pLGM9MDtjPHUubGVuZ3RoOysrYyl7dmFyIGQ9dVtjXSxfPWwoZCxvW2RdLG4pO2E9ci5tZXJnZShhLF8sbil9cmV0dXJuIHIuY29tcGFjdChhKX19LCIuL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiKSxzPXticmFja2V0czpmdW5jdGlvbihlKXtyZXR1cm4gZSsiW10ifSxpbmRpY2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrIlsiK3QrIl0ifSxyZXBlYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxpPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nLGE9e2RlbGltaXRlcjoiJiIsZW5jb2RlOiEwLGVuY29kZXI6ci5lbmNvZGUsZW5jb2RlVmFsdWVzT25seTohMSxzZXJpYWxpemVEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBpLmNhbGwoZSl9LHNraXBOdWxsczohMSxzdHJpY3ROdWxsSGFuZGxpbmc6ITF9LGw9ZnVuY3Rpb24gZSh0LG4sbyxzLGksbCx1LGMsZCxfLHAsZil7dmFyIG09dDtpZigiZnVuY3Rpb24iPT10eXBlb2YgdSltPXUobixtKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBEYXRlKW09XyhtKTtlbHNlIGlmKG51bGw9PT1tKXtpZihzKXJldHVybiBsJiYhZj9sKG4sYS5lbmNvZGVyKTpuO209IiJ9aWYoInN0cmluZyI9PXR5cGVvZiBtfHwibnVtYmVyIj09dHlwZW9mIG18fCJib29sZWFuIj09dHlwZW9mIG18fHIuaXNCdWZmZXIobSkpe2lmKGwpe3JldHVybltwKGY/bjpsKG4sYS5lbmNvZGVyKSkrIj0iK3AobChtLGEuZW5jb2RlcikpXX1yZXR1cm5bcChuKSsiPSIrcChTdHJpbmcobSkpXX12YXIgaD1bXTtpZih2b2lkIDA9PT1tKXJldHVybiBoO3ZhciBnO2lmKEFycmF5LmlzQXJyYXkodSkpZz11O2Vsc2V7dmFyIGI9T2JqZWN0LmtleXMobSk7Zz1jP2Iuc29ydChjKTpifWZvcih2YXIgRT0wO0U8Zy5sZW5ndGg7KytFKXt2YXIgeT1nW0VdO2kmJm51bGw9PT1tW3ldfHwoaD1BcnJheS5pc0FycmF5KG0pP2guY29uY2F0KGUobVt5XSxvKG4seSksbyxzLGksbCx1LGMsZCxfLHAsZikpOmguY29uY2F0KGUobVt5XSxuKyhkPyIuIit5OiJbIit5KyJdIiksbyxzLGksbCx1LGMsZCxfLHAsZikpKX1yZXR1cm4gaH07ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZSxpPXQ/ci5hc3NpZ24oe30sdCk6e307aWYobnVsbCE9PWkuZW5jb2RlciYmdm9pZCAwIT09aS5lbmNvZGVyJiYiZnVuY3Rpb24iIT10eXBlb2YgaS5lbmNvZGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIkVuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIHU9dm9pZCAwPT09aS5kZWxpbWl0ZXI/YS5kZWxpbWl0ZXI6aS5kZWxpbWl0ZXIsYz0iYm9vbGVhbiI9PXR5cGVvZiBpLnN0cmljdE51bGxIYW5kbGluZz9pLnN0cmljdE51bGxIYW5kbGluZzphLnN0cmljdE51bGxIYW5kbGluZyxkPSJib29sZWFuIj09dHlwZW9mIGkuc2tpcE51bGxzP2kuc2tpcE51bGxzOmEuc2tpcE51bGxzLF89ImJvb2xlYW4iPT10eXBlb2YgaS5lbmNvZGU/aS5lbmNvZGU6YS5lbmNvZGUscD0iZnVuY3Rpb24iPT10eXBlb2YgaS5lbmNvZGVyP2kuZW5jb2RlcjphLmVuY29kZXIsZj0iZnVuY3Rpb24iPT10eXBlb2YgaS5zb3J0P2kuc29ydDpudWxsLG09dm9pZCAwIT09aS5hbGxvd0RvdHMmJmkuYWxsb3dEb3RzLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGkuc2VyaWFsaXplRGF0ZT9pLnNlcmlhbGl6ZURhdGU6YS5zZXJpYWxpemVEYXRlLGc9ImJvb2xlYW4iPT10eXBlb2YgaS5lbmNvZGVWYWx1ZXNPbmx5P2kuZW5jb2RlVmFsdWVzT25seTphLmVuY29kZVZhbHVlc09ubHk7aWYodm9pZCAwPT09aS5mb3JtYXQpaS5mb3JtYXQ9by5kZWZhdWx0O2Vsc2UgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLmZvcm1hdHRlcnMsaS5mb3JtYXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4iKTt2YXIgYixFLHk9by5mb3JtYXR0ZXJzW2kuZm9ybWF0XTsiZnVuY3Rpb24iPT10eXBlb2YgaS5maWx0ZXI/KEU9aS5maWx0ZXIsbj1FKCIiLG4pKTpBcnJheS5pc0FycmF5KGkuZmlsdGVyKSYmKEU9aS5maWx0ZXIsYj1FKTt2YXIgdj1bXTtpZigib2JqZWN0IiE9dHlwZW9mIG58fG51bGw9PT1uKXJldHVybiIiO3ZhciBUO1Q9aS5hcnJheUZvcm1hdCBpbiBzP2kuYXJyYXlGb3JtYXQ6ImluZGljZXMiaW4gaT9pLmluZGljZXM/ImluZGljZXMiOiJyZXBlYXQiOiJpbmRpY2VzIjt2YXIgQT1zW1RdO2J8fChiPU9iamVjdC5rZXlzKG4pKSxmJiZiLnNvcnQoZik7Zm9yKHZhciBDPTA7QzxiLmxlbmd0aDsrK0Mpe3ZhciBPPWJbQ107ZCYmbnVsbD09PW5bT118fCh2PXYuY29uY2F0KGwobltPXSxPLEEsYyxkLF8/cDpudWxsLEUsZixtLGgseSxnKSkpfXZhciBTPXYuam9pbih1KSxSPSEwPT09aS5hZGRRdWVyeVByZWZpeD8iPyI6IiI7cmV0dXJuIFMubGVuZ3RoPjA/UitTOiIifX0sIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8MjU2OysrdCllLnB1c2goIiUiKygodDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gZX0oKSxzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7aWYodD1uLm9ialtuLnByb3BdLEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgcj1bXSxvPTA7bzx0Lmxlbmd0aDsrK28pdm9pZCAwIT09dFtvXSYmci5wdXNoKHRbb10pO24ub2JqW24ucHJvcF09cn19cmV0dXJuIHR9LGk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dCYmdC5wbGFpbk9iamVjdHM/T2JqZWN0LmNyZWF0ZShudWxsKTp7fSxyPTA7cjxlLmxlbmd0aDsrK3Ipdm9pZCAwIT09ZVtyXSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59LGE9ZnVuY3Rpb24gZSh0LG4sbyl7aWYoIW4pcmV0dXJuIHQ7aWYoIm9iamVjdCIhPXR5cGVvZiBuKXtpZihBcnJheS5pc0FycmF5KHQpKXQucHVzaChuKTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm5bdCxuXTsoby5wbGFpbk9iamVjdHN8fG8uYWxsb3dQcm90b3R5cGVzfHwhci5jYWxsKE9iamVjdC5wcm90b3R5cGUsbikpJiYodFtuXT0hMCl9cmV0dXJuIHR9aWYoIm9iamVjdCIhPXR5cGVvZiB0KXJldHVyblt0XS5jb25jYXQobik7dmFyIHM9dDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmIUFycmF5LmlzQXJyYXkobikmJihzPWkodCxvKSksQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheShuKT8obi5mb3JFYWNoKGZ1bmN0aW9uKG4scyl7ci5jYWxsKHQscyk/dFtzXSYmIm9iamVjdCI9PXR5cGVvZiB0W3NdP3Rbc109ZSh0W3NdLG4sbyk6dC5wdXNoKG4pOnRbc109bn0pLHQpOk9iamVjdC5rZXlzKG4pLnJlZHVjZShmdW5jdGlvbih0LHMpe3ZhciBpPW5bc107cmV0dXJuIHIuY2FsbCh0LHMpP3Rbc109ZSh0W3NdLGksbyk6dFtzXT1pLHR9LHMpfSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlW25dPXRbbl0sZX0sZSl9LHU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoKHQpe3JldHVybiBlfX0sYz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Zm9yKHZhciB0PSJzdHJpbmciPT10eXBlb2YgZT9lOlN0cmluZyhlKSxuPSIiLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIHM9dC5jaGFyQ29kZUF0KHIpOzQ1PT09c3x8NDY9PT1zfHw5NT09PXN8fDEyNj09PXN8fHM+PTQ4JiZzPD01N3x8cz49NjUmJnM8PTkwfHxzPj05NyYmczw9MTIyP24rPXQuY2hhckF0KHIpOnM8MTI4P24rPW9bc106czwyMDQ4P24rPW9bMTkyfHM+PjZdK29bMTI4fDYzJnNdOnM8NTUyOTZ8fHM+PTU3MzQ0P24rPW9bMjI0fHM+PjEyXStvWzEyOHxzPj42JjYzXStvWzEyOHw2MyZzXToocis9MSxzPTY1NTM2KygoMTAyMyZzKTw8MTB8MTAyMyZ0LmNoYXJDb2RlQXQocikpLG4rPW9bMjQwfHM+PjE4XStvWzEyOHxzPj4xMiY2M10rb1sxMjh8cz4+NiY2M10rb1sxMjh8NjMmc10pfXJldHVybiBufSxkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1be29iajp7bzplfSxwcm9wOiJvIn1dLG49W10scj0wO3I8dC5sZW5ndGg7KytyKWZvcih2YXIgbz10W3JdLGk9by5vYmpbby5wcm9wXSxhPU9iamVjdC5rZXlzKGkpLGw9MDtsPGEubGVuZ3RoOysrbCl7dmFyIHU9YVtsXSxjPWlbdV07Im9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyYmLTE9PT1uLmluZGV4T2YoYykmJih0LnB1c2goe29iajppLHByb3A6dX0pLG4ucHVzaChjKSl9cmV0dXJuIHModCl9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZ2b2lkIDAhPT1lJiYhIShlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpKX07ZS5leHBvcnRzPXthcnJheVRvT2JqZWN0OmksYXNzaWduOmwsY29tcGFjdDpkLGRlY29kZTp1LGVuY29kZTpjLGlzQnVmZmVyOnAsaXNSZWdFeHA6XyxtZXJnZTphfX0sIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWJyb3dzZXIvcXVlcnlzdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKG4pe3JldHVybiBzLnVuZXNjYXBlQnVmZmVyKGUsdCkudG9TdHJpbmcoKX19ZnVuY3Rpb24gbyhlLHQpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtyZXR1cm4gcy51bmVzY2FwZShlLCEwKX19dmFyIHM9dCxpPW4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXI7cy51bmVzY2FwZUJ1ZmZlcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG8scz1uZXcgaShlLmxlbmd0aCksYT0wLGw9MCx1PTA7bDw9ZS5sZW5ndGg7bCsrKXt2YXIgYz1sPGUubGVuZ3RoP2UuY2hhckNvZGVBdChsKTpOYU47c3dpdGNoKGEpe2Nhc2UgMDpzd2l0Y2goYyl7Y2FzZSAzNzpuPTAscj0wLGE9MTticmVhaztjYXNlIDQzOnQmJihjPTMyKTtkZWZhdWx0OnNbdSsrXT1jfWJyZWFrO2Nhc2UgMTppZihvPWMsYz49NDgmJmM8PTU3KW49Yy00ODtlbHNlIGlmKGM+PTY1JiZjPD03MCluPWMtNjUrMTA7ZWxzZXtpZighKGM+PTk3JiZjPD0xMDIpKXtzW3UrK109Mzcsc1t1KytdPWMsYT0wO2JyZWFrfW49Yy05NysxMH1hPTI7YnJlYWs7Y2FzZSAyOmlmKGE9MCxjPj00OCYmYzw9NTcpcj1jLTQ4O2Vsc2UgaWYoYz49NjUmJmM8PTcwKXI9Yy02NSsxMDtlbHNle2lmKCEoYz49OTcmJmM8PTEwMikpe3NbdSsrXT0zNyxzW3UrK109byxzW3UrK109YzticmVha31yPWMtOTcrMTB9c1t1KytdPTE2Km4rcn19cmV0dXJuIHMuc2xpY2UoMCx1LTEpfSxzLnVuZXNjYXBlPXI7Zm9yKHZhciBhPW5ldyBBcnJheSgyNTYpLGw9MDtsPDI1NjsrK2wpYVtsXT0iJSIrKChsPDE2PyIwIjoiIikrbC50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCk7cy5lc2NhcGU9ZnVuY3Rpb24oZSl7InN0cmluZyIhPXR5cGVvZiBlJiYoZSs9IiIpO2Zvcih2YXIgdD0iIixuPTAscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoISgzMz09PW98fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fG8+PTM5JiZvPD00Mnx8bz49NDgmJm88PTU3fHxvPj02NSYmbzw9OTB8fG8+PTk3JiZvPD0xMjIpKWlmKHItbj4wJiYodCs9ZS5zbGljZShuLHIpKSxvPDEyOCluPXIrMSx0Kz1hW29dO2Vsc2UgaWYobzwyMDQ4KW49cisxLHQrPWFbMTkyfG8+PjZdK2FbMTI4fDYzJm9dO2Vsc2UgaWYobzw1NTI5Nnx8bz49NTczNDQpbj1yKzEsdCs9YVsyMjR8bz4+MTJdK2FbMTI4fG8+PjYmNjNdK2FbMTI4fDYzJm9dO2Vsc2V7KytyO3ZhciBzO2lmKCEocjxlLmxlbmd0aCkpdGhyb3cgbmV3IFVSSUVycm9yKCJVUkkgbWFsZm9ybWVkIik7cz0xMDIzJmUuY2hhckNvZGVBdChyKSxuPXIrMSxvPTY1NTM2KygoMTAyMyZvKTw8MTB8cyksdCs9YVsyNDB8bz4+MThdK2FbMTI4fG8+PjEyJjYzXSthWzEyOHxvPj42JjYzXSthWzEyOHw2MyZvXX19cmV0dXJuIDA9PT1uP2U6bjxlLmxlbmd0aD90K2Uuc2xpY2Uobik6dH07dmFyIHU9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6Im51bWJlciI9PXR5cGVvZiBlJiZpc0Zpbml0ZShlKT8iIitlOiJib29sZWFuIj09dHlwZW9mIGU/ZT8idHJ1ZSI6ImZhbHNlIjoiIn07cy5zdHJpbmdpZnk9cy5lbmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7dD10fHwiJiIsbj1ufHwiPSI7dmFyIG89cy5lc2NhcGU7aWYociYmImZ1bmN0aW9uIj09dHlwZW9mIHIuZW5jb2RlVVJJQ29tcG9uZW50JiYobz1yLmVuY29kZVVSSUNvbXBvbmVudCksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKHZhciBpPU9iamVjdC5rZXlzKGUpLGE9aS5sZW5ndGgsbD1hLTEsYz0iIixkPTA7ZDxhOysrZCl7dmFyIF89aVtkXSxwPWVbX10sZj1vKHUoXykpK247aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKHZhciBtPXAubGVuZ3RoLGg9bS0xLGc9MDtnPG07KytnKWMrPWYrbyh1KHBbZ10pKSxnPGgmJihjKz10KTttJiZkPGwmJihjKz10KX1lbHNlIGMrPWYrbyh1KHApKSxkPGwmJihjKz10KX1yZXR1cm4gY31yZXR1cm4iIn0scy5wYXJzZT1zLmRlY29kZT1mdW5jdGlvbihlLHQsbixpKXt0PXR8fCImIixuPW58fCI9Ijt2YXIgYT17fTtpZigic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aClyZXR1cm4gYTsic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIik7dmFyIGw9bi5sZW5ndGgsdT10Lmxlbmd0aCxjPTFlMztpJiYibnVtYmVyIj09dHlwZW9mIGkubWF4S2V5cyYmKGM9aS5tYXhLZXlzKTt2YXIgZD0xLzA7Yz4wJiYoZD1jKTt2YXIgXz1zLnVuZXNjYXBlO2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmRlY29kZVVSSUNvbXBvbmVudCYmKF89aS5kZWNvZGVVUklDb21wb25lbnQpO2Zvcih2YXIgcD1fIT09cixmPVtdLG09MCxoPTAsZz0wLGI9IiIsRT0iIix5PXAsdj1wLFQ9MCxBPTA7QTxlLmxlbmd0aDsrK0Epe3ZhciBDPWUuY2hhckNvZGVBdChBKTtpZihDIT09dC5jaGFyQ29kZUF0KGgpKXtpZihoPTAsdnx8KDM3PT09Qz9UPTE6VD4wJiYoQz49NDgmJkM8PTU3fHxDPj02NSYmQzw9NzB8fEM+PTk3JiZDPD0xMDIpPzM9PSsrVCYmKHY9ITApOlQ9MCksZzxsKXtpZihDPT09bi5jaGFyQ29kZUF0KGcpKXtpZigrK2c9PT1sKXt2YXIgTz1BLWcrMTttPE8mJihiKz1lLnNsaWNlKG0sTykpLFQ9MCxtPUErMX1jb250aW51ZX1nPTAseXx8KDM3PT09Qz9UPTE6VD4wJiYoQz49NDgmJkM8PTU3fHxDPj02NSYmQzw9NzB8fEM+PTk3JiZDPD0xMDIpPzM9PSsrVCYmKHk9ITApOlQ9MCl9NDM9PT1DJiYoZzxsPyhBLW0+MCYmKGIrPWUuc2xpY2UobSxBKSksYis9IiUyMCIseT0hMCk6KEEtbT4wJiYoRSs9ZS5zbGljZShtLEEpKSxFKz0iJTIwIix2PSEwKSxtPUErMSl9ZWxzZSBpZigrK2g9PT11KXt2YXIgTz1BLWgrMTtpZihnPGw/bTxPJiYoYis9ZS5zbGljZShtLE8pKTptPE8mJihFKz1lLnNsaWNlKG0sTykpLHkmJihiPW8oYixfKSksdiYmKEU9byhFLF8pKSwtMT09PWYuaW5kZXhPZihiKSlhW2JdPUUsZltmLmxlbmd0aF09YjtlbHNle3ZhciBTPWFbYl07UyBpbnN0YW5jZW9mIEFycmF5P1NbUy5sZW5ndGhdPUU6YVtiXT1bUyxFXX1pZigwPT0tLWQpYnJlYWs7eT12PXAsVD0wLGI9RT0iIixtPUErMSxoPWc9MH19aWYoZD4wJiYobTxlLmxlbmd0aHx8Zz4wKSlpZihtPGUubGVuZ3RoJiYoZzxsP2IrPWUuc2xpY2UobSk6aDx1JiYoRSs9ZS5zbGljZShtKSkpLHkmJihiPW8oYixfKSksdiYmKEU9byhFLF8pKSwtMT09PWYuaW5kZXhPZihiKSlhW2JdPUUsZltmLmxlbmd0aF09YjtlbHNle3ZhciBTPWFbYl07UyBpbnN0YW5jZW9mIEFycmF5P1NbUy5sZW5ndGhdPUU6YVtiXT1bUyxFXX1yZXR1cm4gYX19LCIuL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHMpe3Q9dHx8IiYiLG49bnx8Ij0iO3ZhciBpPXt9O2lmKCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiBpO3ZhciBhPS9cKy9nO2U9ZS5zcGxpdCh0KTt2YXIgbD0xZTM7cyYmIm51bWJlciI9PXR5cGVvZiBzLm1heEtleXMmJihsPXMubWF4S2V5cyk7dmFyIHU9ZS5sZW5ndGg7bD4wJiZ1PmwmJih1PWwpO2Zvcih2YXIgYz0wO2M8dTsrK2Mpe3ZhciBkLF8scCxmLG09ZVtjXS5yZXBsYWNlKGEsIiUyMCIpLGg9bS5pbmRleE9mKG4pO2g+PTA/KGQ9bS5zdWJzdHIoMCxoKSxfPW0uc3Vic3RyKGgrMSkpOihkPW0sXz0iIikscD1kZWNvZGVVUklDb21wb25lbnQoZCksZj1kZWNvZGVVUklDb21wb25lbnQoXykscihpLHApP28oaVtwXSk/aVtwXS5wdXNoKGYpOmlbcF09W2lbcF0sZl06aVtwXT1mfXJldHVybiBpfTt2YXIgbz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfX0sIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKGUubWFwKXJldHVybiBlLm1hcCh0KTtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKW4ucHVzaCh0KGVbcl0scikpO3JldHVybiBufXZhciBvPWZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBlO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShlKT9lOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHQ9dHx8IiYiLG49bnx8Ij0iLG51bGw9PT1lJiYoZT12b2lkIDApLCJvYmplY3QiPT10eXBlb2YgZT9yKGkoZSksZnVuY3Rpb24oaSl7dmFyIGE9ZW5jb2RlVVJJQ29tcG9uZW50KG8oaSkpK247cmV0dXJuIHMoZVtpXSk/cihlW2ldLGZ1bmN0aW9uKGUpe3JldHVybiBhK2VuY29kZVVSSUNvbXBvbmVudChvKGUpKX0pLmpvaW4odCk6YStlbmNvZGVVUklDb21wb25lbnQobyhlW2ldKSl9KS5qb2luKHQpOmE/ZW5jb2RlVVJJQ29tcG9uZW50KG8oYSkpK24rZW5jb2RlVVJJQ29tcG9uZW50KG8oZSkpOiIifTt2YXIgcz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSxpPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5wdXNoKG4pO3JldHVybiB0fX0sIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmRlY29kZT10LnBhcnNlPW4oIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiKSx0LmVuY29kZT10LnN0cmluZ2lmeT1uKCIuL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIil9LCIuL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZ2lmeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKC9cKy9nLCIgIikpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG49LyhbXj0/Jl0rKT0/KFteJl0qKS9nLG89e307dD1uLmV4ZWMoZSk7KXt2YXIgcz1yKHRbMV0pLGk9cih0WzJdKTtzIGluIG98fChvW3NdPWkpfXJldHVybiBvfWZ1bmN0aW9uIHMoZSx0KXt0PXR8fCIiO3ZhciBuLHIsbz1bXTsic3RyaW5nIiE9dHlwZW9mIHQmJih0PSI/Iik7Zm9yKHIgaW4gZSlhLmNhbGwoZSxyKSYmKG49ZVtyXSxufHxudWxsIT09biYmbiE9PWkmJiFpc05hTihuKXx8KG49IiIpLG8ucHVzaChlbmNvZGVVUklDb21wb25lbnQocikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChuKSkpO3JldHVybiBvLmxlbmd0aD90K28uam9pbigiJiIpOiIifXZhciBpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LnN0cmluZ2lmeT1zLHQucGFyc2U9b30sIi4vbm9kZV9tb2R1bGVzL3JhZi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXtmb3IodmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiKSxvPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3Q6d2luZG93LHM9WyJtb3oiLCJ3ZWJraXQiXSxpPSJBbmltYXRpb25GcmFtZSIsYT1vWyJyZXF1ZXN0IitpXSxsPW9bImNhbmNlbCIraV18fG9bImNhbmNlbFJlcXVlc3QiK2ldLHU9MDshYSYmdTxzLmxlbmd0aDt1KyspYT1vW3NbdV0rIlJlcXVlc3QiK2ldLGw9b1tzW3VdKyJDYW5jZWwiK2ldfHxvW3NbdV0rIkNhbmNlbFJlcXVlc3QiK2ldO2lmKCFhfHwhbCl7dmFyIGM9MCxkPTAsXz1bXTthPWZ1bmN0aW9uKGUpe2lmKDA9PT1fLmxlbmd0aCl7dmFyIHQ9cigpLG49TWF0aC5tYXgoMCwxZTMvNjAtKHQtYykpO2M9bit0LHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZT1fLnNsaWNlKDApO18ubGVuZ3RoPTA7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoIWVbdF0uY2FuY2VsbGVkKXRyeXtlW3RdLmNhbGxiYWNrKGMpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSwwKX19LE1hdGgucm91bmQobikpfXJldHVybiBfLnB1c2goe2hhbmRsZTorK2QsY2FsbGJhY2s6ZSxjYW5jZWxsZWQ6ITF9KSxkfSxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8Xy5sZW5ndGg7dCsrKV9bdF0uaGFuZGxlPT09ZSYmKF9bdF0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwobyxlKX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkobyxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24oZSl7ZXx8KGU9byksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9YSxlLmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSl9LCIuL25vZGVfbW9kdWxlcy9yYy1hbGlnbi9lcy9BbGlnbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlP2UoKTpudWxsfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZlP2U6bnVsbH12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxoPW4ubihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLGI9bi5uKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvZG9tLWFsaWduL2VzL2luZGV4LmpzIikseT1uKCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0RvbS9hZGRFdmVudExpc3RlbmVyLmpzIiksdj1uKCIuL25vZGVfbW9kdWxlcy9yYy1hbGlnbi9lcy91dGlsLmpzIiksVD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixzLGE7aSgpKHRoaXMsdCk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShsKSxkPTA7ZDxsO2QrKyl1W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbj1zPWMoKSh0aGlzLChlPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KHUpKSkscy5mb3JjZUFsaWduPWZ1bmN0aW9uKCl7dmFyIGU9cy5wcm9wcyx0PWUuZGlzYWJsZWQsbj1lLnRhcmdldCxpPWUuYWxpZ24sYT1lLm9uQWxpZ247aWYoIXQmJm4pe3ZhciBsPWIuYS5maW5kRE9NTm9kZShzKSx1PXZvaWQgMCxjPXIobiksZD1vKG4pLF89ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtjP3U9T2JqZWN0KEUuYSkobCxjLGkpOmQmJih1PU9iamVjdChFLmIpKGwsZCxpKSksT2JqZWN0KHYuZSkoXyxsKSxhJiZhKGwsdSl9fSxhPW4sYygpKHMsYSl9cmV0dXJuIF8oKSh0LGUpLGwoKSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3RoaXMuZm9yY2VBbGlnbigpLCFlLmRpc2FibGVkJiZlLm1vbml0b3JXaW5kb3dSZXNpemUmJnRoaXMuc3RhcnRNb25pdG9yV2luZG93UmVzaXplKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSExLG49dGhpcy5wcm9wcztpZighbi5kaXNhYmxlZCl7dmFyIHM9Yi5hLmZpbmRET01Ob2RlKHRoaXMpLGk9cz9zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGw7aWYoZS5kaXNhYmxlZCl0PSEwO2Vsc2V7dmFyIGE9cihlLnRhcmdldCksbD1yKG4udGFyZ2V0KSx1PW8oZS50YXJnZXQpLGM9byhuLnRhcmdldCk7T2JqZWN0KHYuZCkoYSkmJk9iamVjdCh2LmQpKGwpP3Q9ITE6KGEhPT1sfHxhJiYhbCYmY3x8dSYmYyYmbHx8YyYmIU9iamVjdCh2LmIpKHUsYykpJiYodD0hMCk7dmFyIGQ9dGhpcy5zb3VyY2VSZWN0fHx7fTt0fHwhc3x8T2JqZWN0KHYuYykoZC53aWR0aCxpLndpZHRoKSYmT2JqZWN0KHYuYykoZC5oZWlnaHQsaS5oZWlnaHQpfHwodD0hMCl9dGhpcy5zb3VyY2VSZWN0PWl9dCYmdGhpcy5mb3JjZUFsaWduKCksbi5tb25pdG9yV2luZG93UmVzaXplJiYhbi5kaXNhYmxlZD90aGlzLnN0YXJ0TW9uaXRvcldpbmRvd1Jlc2l6ZSgpOnRoaXMuc3RvcE1vbml0b3JXaW5kb3dSZXNpemUoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RvcE1vbml0b3JXaW5kb3dSZXNpemUoKX19LHtrZXk6InN0YXJ0TW9uaXRvcldpbmRvd1Jlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlc2l6ZUhhbmRsZXJ8fCh0aGlzLmJ1ZmZlck1vbml0b3I9T2JqZWN0KHYuYSkodGhpcy5mb3JjZUFsaWduLHRoaXMucHJvcHMubW9uaXRvckJ1ZmZlclRpbWUpLHRoaXMucmVzaXplSGFuZGxlcj1PYmplY3QoeS5hKSh3aW5kb3csInJlc2l6ZSIsdGhpcy5idWZmZXJNb25pdG9yKSl9fSx7a2V5OiJzdG9wTW9uaXRvcldpbmRvd1Jlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlc2l6ZUhhbmRsZXImJih0aGlzLmJ1ZmZlck1vbml0b3IuY2xlYXIoKSx0aGlzLnJlc2l6ZUhhbmRsZXIucmVtb3ZlKCksdGhpcy5yZXNpemVIYW5kbGVyPW51bGwpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5jaGlsZHJlblByb3BzLHI9dC5jaGlsZHJlbixvPWYuYS5DaGlsZHJlbi5vbmx5KHIpO2lmKG4pe3ZhciBzPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdF09ZS5wcm9wc1tuW3RdXX0pLGYuYS5jbG9uZUVsZW1lbnQobyxzKX1yZXR1cm4gb319XSksdH0ocC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXtjaGlsZHJlblByb3BzOmguYS5vYmplY3QsYWxpZ246aC5hLm9iamVjdC5pc1JlcXVpcmVkLHRhcmdldDpoLmEub25lT2ZUeXBlKFtoLmEuZnVuYyxoLmEuc2hhcGUoe2NsaWVudFg6aC5hLm51bWJlcixjbGllbnRZOmguYS5udW1iZXIscGFnZVg6aC5hLm51bWJlcixwYWdlWTpoLmEubnVtYmVyfSldKSxvbkFsaWduOmguYS5mdW5jLG1vbml0b3JCdWZmZXJUaW1lOmguYS5udW1iZXIsbW9uaXRvcldpbmRvd1Jlc2l6ZTpoLmEuYm9vbCxkaXNhYmxlZDpoLmEuYm9vbCxjaGlsZHJlbjpoLmEuYW55fSxULmRlZmF1bHRQcm9wcz17dGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd30sbW9uaXRvckJ1ZmZlclRpbWU6NTAsbW9uaXRvcldpbmRvd1Jlc2l6ZTohMSxkaXNhYmxlZDohMX0sdC5hPVR9LCIuL25vZGVfbW9kdWxlcy9yYy1hbGlnbi9lcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yYy1hbGlnbi9lcy9BbGlnbi5qcyIpO3QuYT1yLmF9LCIuL25vZGVfbW9kdWxlcy9yYy1hbGlnbi9lcy91dGlsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmdW5jdGlvbiBuKCl7byYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpfWZ1bmN0aW9uIHIoKXtuKCksbz1zZXRUaW1lb3V0KGUsdCl9dmFyIG89dm9pZCAwO3JldHVybiByLmNsZWFyPW4scn1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU9PT10fHwhKCFlfHwhdCkmJigicGFnZVgiaW4gdCYmInBhZ2VZImluIHQ/ZS5wYWdlWD09PXQucGFnZVgmJmUucGFnZVk9PT10LnBhZ2VZOiJjbGllbnRYImluIHQmJiJjbGllbnRZImluIHQmJihlLmNsaWVudFg9PT10LmNsaWVudFgmJmUuY2xpZW50WT09PXQuY2xpZW50WSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmZS53aW5kb3c9PT1lfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1NYXRoLmZsb29yKGUpLHI9TWF0aC5mbG9vcih0KTtyZXR1cm4gTWF0aC5hYnMobi1yKTw9MX1mdW5jdGlvbiBhKGUsdCl7ZSE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJk9iamVjdChsLmEpKHQsZSkmJmUuZm9jdXMoKX10LmE9cix0LmI9byx0LmQ9cyx0LmM9aSx0LmU9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0RvbS9jb250YWlucy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmMtYW5pbWF0ZS9lcy9BbmltYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gYi5hLmlzVmFsaWRFbGVtZW50KHQpJiYhdC5rZXk/Yi5hLmNsb25lRWxlbWVudCh0LHtrZXk6Q30pOnR9ZnVuY3Rpb24gbygpe312YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9bi5uKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxiPW4ubihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx5PW4ubihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JjLWFuaW1hdGUvZXMvQ2hpbGRyZW5VdGlscy5qcyIpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmMtYW5pbWF0ZS9lcy9BbmltYXRlQ2hpbGQuanMiKSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JjLWFuaW1hdGUvZXMvdXRpbC9hbmltYXRlLmpzIiksQz0icmNfYW5pbWF0ZV8iK0RhdGUubm93KCksTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2MoKSh0aGlzLHQpO3ZhciBuPWYoKSh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBTLmNhbGwobiksbi5jdXJyZW50bHlBbmltYXRpbmdLZXlzPXt9LG4ua2V5c1RvRW50ZXI9W10sbi5rZXlzVG9MZWF2ZT1bXSxuLnN0YXRlPXtjaGlsZHJlbjpPYmplY3Qodi5lKShyKGUpKX0sbi5jaGlsZHJlblJlZnM9e30sbn1yZXR1cm4gaCgpKHQsZSksXygpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLnNob3dQcm9wLG49dGhpcy5zdGF0ZS5jaGlsZHJlbjt0JiYobj1uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWUucHJvcHNbdF19KSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QmJmUucGVyZm9ybUFwcGVhcih0LmtleSl9KX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5uZXh0UHJvcHM9ZTt2YXIgbj1PYmplY3Qodi5lKShyKGUpKSxvPXRoaXMucHJvcHM7by5leGNsdXNpdmUmJk9iamVjdC5rZXlzKHRoaXMuY3VycmVudGx5QW5pbWF0aW5nS2V5cykuZm9yRWFjaChmdW5jdGlvbihlKXt0LnN0b3AoZSl9KTt2YXIgcz1vLnNob3dQcm9wLGk9dGhpcy5jdXJyZW50bHlBbmltYXRpbmdLZXlzLGE9by5leGNsdXNpdmU/T2JqZWN0KHYuZSkocihvKSk6dGhpcy5zdGF0ZS5jaGlsZHJlbix1PVtdO3M/KGEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lJiZPYmplY3Qodi5hKShuLGUua2V5KSxyPXZvaWQgMDsocj10JiZ0LnByb3BzW3NdfHwhZS5wcm9wc1tzXT90OmIuYS5jbG9uZUVsZW1lbnQodHx8ZSxsKCkoe30scywhMCkpKSYmdS5wdXNoKHIpfSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UmJk9iamVjdCh2LmEpKGEsZS5rZXkpfHx1LnB1c2goZSl9KSk6dT1PYmplY3Qodi5kKShhLG4pLHRoaXMuc2V0U3RhdGUoe2NoaWxkcmVuOnV9KSxuLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5rZXk7aWYoIWV8fCFpW25dKXt2YXIgcj1lJiZPYmplY3Qodi5hKShhLG4pO2lmKHMpe3ZhciBvPWUucHJvcHNbc107aWYocil7IU9iamVjdCh2LmIpKGEsbixzKSYmbyYmdC5rZXlzVG9FbnRlci5wdXNoKG4pfWVsc2UgbyYmdC5rZXlzVG9FbnRlci5wdXNoKG4pfWVsc2Ugcnx8dC5rZXlzVG9FbnRlci5wdXNoKG4pfX0pLGEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lJiZlLmtleTtpZighZXx8IWlbcl0pe3ZhciBvPWUmJk9iamVjdCh2LmEpKG4scik7aWYocyl7dmFyIGE9ZS5wcm9wc1tzXTtpZihvKXshT2JqZWN0KHYuYikobixyLHMpJiZhJiZ0LmtleXNUb0xlYXZlLnB1c2gocil9ZWxzZSBhJiZ0LmtleXNUb0xlYXZlLnB1c2gocil9ZWxzZSBvfHx0LmtleXNUb0xlYXZlLnB1c2gocil9fSl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5rZXlzVG9FbnRlcjt0aGlzLmtleXNUb0VudGVyPVtdLGUuZm9yRWFjaCh0aGlzLnBlcmZvcm1FbnRlcik7dmFyIHQ9dGhpcy5rZXlzVG9MZWF2ZTt0aGlzLmtleXNUb0xlYXZlPVtdLHQuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSl9fSx7a2V5OiJpc1ZhbGlkQ2hpbGRCeUtleSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnByb3BzLnNob3dQcm9wO3JldHVybiBuP09iamVjdCh2LmIpKGUsdCxuKTpPYmplY3Qodi5hKShlLHQpfX0se2tleToic3RvcCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuY3VycmVudGx5QW5pbWF0aW5nS2V5c1tlXTt2YXIgdD10aGlzLmNoaWxkcmVuUmVmc1tlXTt0JiZ0LnN0b3AoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wczt0aGlzLm5leHRQcm9wcz10O3ZhciBuPXRoaXMuc3RhdGUuY2hpbGRyZW4scj1udWxsO24mJihyPW4ubWFwKGZ1bmN0aW9uKG4pe2lmKG51bGw9PT1ufHx2b2lkIDA9PT1uKXJldHVybiBuO2lmKCFuLmtleSl0aHJvdyBuZXcgRXJyb3IoIm11c3Qgc2V0IGtleSBmb3IgPHJjLWFuaW1hdGU+IGNoaWxkcmVuIik7cmV0dXJuIGIuYS5jcmVhdGVFbGVtZW50KFQuYSx7a2V5Om4ua2V5LHJlZjpmdW5jdGlvbih0KXtlLmNoaWxkcmVuUmVmc1tuLmtleV09dH0sYW5pbWF0aW9uOnQuYW5pbWF0aW9uLHRyYW5zaXRpb25OYW1lOnQudHJhbnNpdGlvbk5hbWUsdHJhbnNpdGlvbkVudGVyOnQudHJhbnNpdGlvbkVudGVyLHRyYW5zaXRpb25BcHBlYXI6dC50cmFuc2l0aW9uQXBwZWFyLHRyYW5zaXRpb25MZWF2ZTp0LnRyYW5zaXRpb25MZWF2ZX0sbil9KSk7dmFyIG89dC5jb21wb25lbnQ7aWYobyl7dmFyIHM9dDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG8mJihzPWkoKSh7Y2xhc3NOYW1lOnQuY2xhc3NOYW1lLHN0eWxlOnQuc3R5bGV9LHQuY29tcG9uZW50UHJvcHMpKSxiLmEuY3JlYXRlRWxlbWVudChvLHMscil9cmV0dXJuIHJbMF18fG51bGx9fV0pLHR9KGIuYS5Db21wb25lbnQpO08uaXNBbmltYXRlPSEwLE8ucHJvcFR5cGVzPXtjb21wb25lbnQ6eS5hLmFueSxjb21wb25lbnRQcm9wczp5LmEub2JqZWN0LGFuaW1hdGlvbjp5LmEub2JqZWN0LHRyYW5zaXRpb25OYW1lOnkuYS5vbmVPZlR5cGUoW3kuYS5zdHJpbmcseS5hLm9iamVjdF0pLHRyYW5zaXRpb25FbnRlcjp5LmEuYm9vbCx0cmFuc2l0aW9uQXBwZWFyOnkuYS5ib29sLGV4Y2x1c2l2ZTp5LmEuYm9vbCx0cmFuc2l0aW9uTGVhdmU6eS5hLmJvb2wsb25FbmQ6eS5hLmZ1bmMsb25FbnRlcjp5LmEuZnVuYyxvbkxlYXZlOnkuYS5mdW5jLG9uQXBwZWFyOnkuYS5mdW5jLHNob3dQcm9wOnkuYS5zdHJpbmcsY2hpbGRyZW46eS5hLm5vZGV9LE8uZGVmYXVsdFByb3BzPXthbmltYXRpb246e30sY29tcG9uZW50OiJzcGFuIixjb21wb25lbnRQcm9wczp7fSx0cmFuc2l0aW9uRW50ZXI6ITAsdHJhbnNpdGlvbkxlYXZlOiEwLHRyYW5zaXRpb25BcHBlYXI6ITEsb25FbmQ6byxvbkVudGVyOm8sb25MZWF2ZTpvLG9uQXBwZWFyOm99O3ZhciBTPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBlcmZvcm1FbnRlcj1mdW5jdGlvbih0KXtlLmNoaWxkcmVuUmVmc1t0XSYmKGUuY3VycmVudGx5QW5pbWF0aW5nS2V5c1t0XT0hMCxlLmNoaWxkcmVuUmVmc1t0XS5jb21wb25lbnRXaWxsRW50ZXIoZS5oYW5kbGVEb25lQWRkaW5nLmJpbmQoZSx0LCJlbnRlciIpKSl9LHRoaXMucGVyZm9ybUFwcGVhcj1mdW5jdGlvbih0KXtlLmNoaWxkcmVuUmVmc1t0XSYmKGUuY3VycmVudGx5QW5pbWF0aW5nS2V5c1t0XT0hMCxlLmNoaWxkcmVuUmVmc1t0XS5jb21wb25lbnRXaWxsQXBwZWFyKGUuaGFuZGxlRG9uZUFkZGluZy5iaW5kKGUsdCwiYXBwZWFyIikpKX0sdGhpcy5oYW5kbGVEb25lQWRkaW5nPWZ1bmN0aW9uKHQsbil7dmFyIG89ZS5wcm9wcztpZihkZWxldGUgZS5jdXJyZW50bHlBbmltYXRpbmdLZXlzW3RdLCFvLmV4Y2x1c2l2ZXx8bz09PWUubmV4dFByb3BzKXt2YXIgcz1PYmplY3Qodi5lKShyKG8pKTtlLmlzVmFsaWRDaGlsZEJ5S2V5KHMsdCk/ImFwcGVhciI9PT1uP0EuYS5hbGxvd0FwcGVhckNhbGxiYWNrKG8pJiYoby5vbkFwcGVhcih0KSxvLm9uRW5kKHQsITApKTpBLmEuYWxsb3dFbnRlckNhbGxiYWNrKG8pJiYoby5vbkVudGVyKHQpLG8ub25FbmQodCwhMCkpOmUucGVyZm9ybUxlYXZlKHQpfX0sdGhpcy5wZXJmb3JtTGVhdmU9ZnVuY3Rpb24odCl7ZS5jaGlsZHJlblJlZnNbdF0mJihlLmN1cnJlbnRseUFuaW1hdGluZ0tleXNbdF09ITAsZS5jaGlsZHJlblJlZnNbdF0uY29tcG9uZW50V2lsbExlYXZlKGUuaGFuZGxlRG9uZUxlYXZpbmcuYmluZChlLHQpKSl9LHRoaXMuaGFuZGxlRG9uZUxlYXZpbmc9ZnVuY3Rpb24odCl7dmFyIG49ZS5wcm9wcztpZihkZWxldGUgZS5jdXJyZW50bHlBbmltYXRpbmdLZXlzW3RdLCFuLmV4Y2x1c2l2ZXx8bj09PWUubmV4dFByb3BzKXt2YXIgbz1PYmplY3Qodi5lKShyKG4pKTtpZihlLmlzVmFsaWRDaGlsZEJ5S2V5KG8sdCkpZS5wZXJmb3JtRW50ZXIodCk7ZWxzZXt2YXIgcz1mdW5jdGlvbigpe0EuYS5hbGxvd0xlYXZlQ2FsbGJhY2sobikmJihuLm9uTGVhdmUodCksbi5vbkVuZCh0LCExKSl9O09iamVjdCh2LmMpKGUuc3RhdGUuY2hpbGRyZW4sbyxuLnNob3dQcm9wKT9zKCk6ZS5zZXRTdGF0ZSh7Y2hpbGRyZW46b30scyl9fX19O3QuYT1PfSwiLi9ub2RlX21vZHVsZXMvcmMtYW5pbWF0ZS9lcy9BbmltYXRlQ2hpbGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksXz1uLm4oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxoPW4ubihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2Nzcy1hbmltYXRpb24vZXMvaW5kZXguanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JjLWFuaW1hdGUvZXMvdXRpbC9hbmltYXRlLmpzIiksRT17ZW50ZXI6InRyYW5zaXRpb25FbnRlciIsYXBwZWFyOiJ0cmFuc2l0aW9uQXBwZWFyIixsZWF2ZToidHJhbnNpdGlvbkxlYXZlIn0seT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG8oKSh0aGlzLHQpLGwoKSh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBjKCkodCxlKSxpKCkodCxbe2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zdG9wKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsRW50ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2IuYS5pc0VudGVyU3VwcG9ydGVkKHRoaXMucHJvcHMpP3RoaXMudHJhbnNpdGlvbigiZW50ZXIiLGUpOmUoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxBcHBlYXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2IuYS5pc0FwcGVhclN1cHBvcnRlZCh0aGlzLnByb3BzKT90aGlzLnRyYW5zaXRpb24oImFwcGVhciIsZSk6ZSgpfX0se2tleToiY29tcG9uZW50V2lsbExlYXZlIix2YWx1ZTpmdW5jdGlvbihlKXtiLmEuaXNMZWF2ZVN1cHBvcnRlZCh0aGlzLnByb3BzKT90aGlzLnRyYW5zaXRpb24oImxlYXZlIixlKTplKCl9fSx7a2V5OiJ0cmFuc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1mLmEuZmluZERPTU5vZGUodGhpcyksbz10aGlzLnByb3BzLHM9by50cmFuc2l0aW9uTmFtZSxpPSJvYmplY3QiPT10eXBlb2Ygczt0aGlzLnN0b3AoKTt2YXIgYT1mdW5jdGlvbigpe24uc3RvcHBlcj1udWxsLHQoKX07aWYoKGcuYnx8IW8uYW5pbWF0aW9uW2VdKSYmcyYmb1tFW2VdXSl7dmFyIGw9aT9zW2VdOnMrIi0iK2UsdT1sKyItYWN0aXZlIjtpJiZzW2UrIkFjdGl2ZSJdJiYodT1zW2UrIkFjdGl2ZSJdKSx0aGlzLnN0b3BwZXI9T2JqZWN0KGcuYSkocix7bmFtZTpsLGFjdGl2ZTp1fSxhKX1lbHNlIHRoaXMuc3RvcHBlcj1vLmFuaW1hdGlvbltlXShyLGEpfX0se2tleToic3RvcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0b3BwZXI7ZSYmKHRoaXMuc3RvcHBlcj1udWxsLGUuc3RvcCgpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn19XSksdH0oXy5hLkNvbXBvbmVudCk7eS5wcm9wVHlwZXM9e2NoaWxkcmVuOmguYS5hbnl9LHQuYT15fSwiLi9ub2RlX21vZHVsZXMvcmMtYW5pbWF0ZS9lcy9DaGlsZHJlblV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9W107cmV0dXJuIHUuYS5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH1mdW5jdGlvbiBvKGUsdCl7dmFyIG49bnVsbDtyZXR1cm4gZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe258fGUmJmUua2V5PT09dCYmKG49ZSl9KSxufWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByPW51bGw7cmV0dXJuIGUmJmUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlJiZlLmtleT09PXQmJmUucHJvcHNbbl0pe2lmKHIpdGhyb3cgbmV3IEVycm9yKCJ0d28gY2hpbGQgd2l0aCBzYW1lIGtleSBmb3IgPHJjLWFuaW1hdGU+IGNoaWxkcmVuIik7cj1lfX0pLHJ9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9ZS5sZW5ndGg9PT10Lmxlbmd0aDtyZXR1cm4gciYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbyl7dmFyIHM9dFtvXTtlJiZzJiYoZSYmIXN8fCFlJiZzP3I9ITE6ZS5rZXkhPT1zLmtleT9yPSExOm4mJmUucHJvcHNbbl0hPT1zLnByb3BzW25dJiYocj0hMSkpfSkscn1mdW5jdGlvbiBhKGUsdCl7dmFyIG49W10scj17fSxzPVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7ZSYmbyh0LGUua2V5KT9zLmxlbmd0aCYmKHJbZS5rZXldPXMscz1bXSk6cy5wdXNoKGUpfSksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUua2V5KSYmKG49bi5jb25jYXQocltlLmtleV0pKSxuLnB1c2goZSl9KSxuPW4uY29uY2F0KHMpfXQuZT1yLHQuYT1vLHQuYj1zLHQuYz1pLHQuZD1hO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT1uLm4obCl9LCIuL25vZGVfbW9kdWxlcy9yYy1hbmltYXRlL2VzL3V0aWwvYW5pbWF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17aXNBcHBlYXJTdXBwb3J0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNpdGlvbk5hbWUmJmUudHJhbnNpdGlvbkFwcGVhcnx8ZS5hbmltYXRpb24uYXBwZWFyfSxpc0VudGVyU3VwcG9ydGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyYW5zaXRpb25OYW1lJiZlLnRyYW5zaXRpb25FbnRlcnx8ZS5hbmltYXRpb24uZW50ZXJ9LGlzTGVhdmVTdXBwb3J0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNpdGlvbk5hbWUmJmUudHJhbnNpdGlvbkxlYXZlfHxlLmFuaW1hdGlvbi5sZWF2ZX0sYWxsb3dBcHBlYXJDYWxsYmFjazpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc2l0aW9uQXBwZWFyfHxlLmFuaW1hdGlvbi5hcHBlYXJ9LGFsbG93RW50ZXJDYWxsYmFjazpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc2l0aW9uRW50ZXJ8fGUuYW5pbWF0aW9uLmVudGVyfSxhbGxvd0xlYXZlQ2FsbGJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNpdGlvbkxlYXZlfHxlLmFuaW1hdGlvbi5sZWF2ZX19O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2Fzc2V0cy9pbmRleC5jc3MiOmZ1bmN0aW9uKGUsdCl7fSwiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL0hhbmRsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksaT1uLm4ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxsPW4ubihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1uLm4oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9bi5uKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1uLm4obSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGI9bi5uKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHk9bi5uKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLFQ9bi5uKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lci5qcyIpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvO2MoKSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1mKCkodGhpcywoZT10Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2NsaWNrRm9jdXNlZDohMX0sci5zZXRIYW5kbGVSZWY9ZnVuY3Rpb24oZSl7ci5oYW5kbGU9ZX0sci5oYW5kbGVNb3VzZVVwPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXIuaGFuZGxlJiZyLnNldENsaWNrRm9jdXMoITApfSxyLmhhbmRsZUJsdXI9ZnVuY3Rpb24oKXtyLnNldENsaWNrRm9jdXMoITEpfSxyLmhhbmRsZUtleURvd249ZnVuY3Rpb24oKXtyLnNldENsaWNrRm9jdXMoITEpfSxvPW4sZigpKHIsbyl9cmV0dXJuIGgoKSh0LGUpLF8oKSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9uTW91c2VVcExpc3RlbmVyPU9iamVjdChBLmEpKGRvY3VtZW50LCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXApfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlVXBMaXN0ZW5lciYmdGhpcy5vbk1vdXNlVXBMaXN0ZW5lci5yZW1vdmUoKX19LHtrZXk6InNldENsaWNrRm9jdXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe2NsaWNrRm9jdXNlZDplfSl9fSx7a2V5OiJjbGlja0ZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0Q2xpY2tGb2N1cyghMCksdGhpcy5mb2N1cygpfX0se2tleToiZm9jdXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGUuZm9jdXMoKX19LHtrZXk6ImJsdXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGUuYmx1cigpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnByZWZpeENscyxuPWUudmVydGljYWwscj1lLm9mZnNldCxzPWUuc3R5bGUsYT1lLmRpc2FibGVkLHU9ZS5taW4sYz1lLm1heCxkPWUudmFsdWUsXz1lLnRhYkluZGV4LHA9bCgpKGUsWyJwcmVmaXhDbHMiLCJ2ZXJ0aWNhbCIsIm9mZnNldCIsInN0eWxlIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsInRhYkluZGV4Il0pLGY9VCgpKHRoaXMucHJvcHMuY2xhc3NOYW1lLGkoKSh7fSx0KyItaGFuZGxlLWNsaWNrLWZvY3VzZWQiLHRoaXMuc3RhdGUuY2xpY2tGb2N1c2VkKSksbT1uP3tib3R0b206cisiJSJ9OntsZWZ0OnIrIiUifSxoPW8oKSh7fSxzLG0pO3JldHVybiBiLmEuY3JlYXRlRWxlbWVudCgiZGl2IixvKCkoe3JlZjp0aGlzLnNldEhhbmRsZVJlZix0YWJJbmRleDphP251bGw6X3x8MH0scCx7Y2xhc3NOYW1lOmYsc3R5bGU6aCxvbkJsdXI6dGhpcy5oYW5kbGVCbHVyLG9uS2V5RG93bjp0aGlzLmhhbmRsZUtleURvd24scm9sZToic2xpZGVyIiwiYXJpYS12YWx1ZW1pbiI6dSwiYXJpYS12YWx1ZW1heCI6YywiYXJpYS12YWx1ZW5vdyI6ZCwiYXJpYS1kaXNhYmxlZCI6ISFhfSkpfX1dKSx0fShiLmEuQ29tcG9uZW50KTt0LmE9QyxDLnByb3BUeXBlcz17cHJlZml4Q2xzOnkuYS5zdHJpbmcsY2xhc3NOYW1lOnkuYS5zdHJpbmcsdmVydGljYWw6eS5hLmJvb2wsb2Zmc2V0OnkuYS5udW1iZXIsc3R5bGU6eS5hLm9iamVjdCxkaXNhYmxlZDp5LmEuYm9vbCxtaW46eS5hLm51bWJlcixtYXg6eS5hLm51bWJlcix2YWx1ZTp5LmEubnVtYmVyLHRhYkluZGV4OnkuYS5udW1iZXJ9fSwiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL1JhbmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1uLm4odSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPW4ubihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1uLm4ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPW4ubihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYj1uLm4oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseT1uLm4oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiksVD1uLm4odiksQT1uKCIuL25vZGVfbW9kdWxlcy9zaGFsbG93ZXF1YWwvaW5kZXguanMiKSxDPW4ubihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9jb21tb24vVHJhY2suanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9jb21tb24vY3JlYXRlU2xpZGVyLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvdXRpbHMuanMiKSxqPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7YygpKHRoaXMsdCk7dmFyIG49ZigpKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlKSk7bi5vbkVuZD1mdW5jdGlvbigpe24uc2V0U3RhdGUoe2hhbmRsZTpudWxsfSxuLmJsdXIpLG4ucmVtb3ZlRG9jdW1lbnRFdmVudHMoKSxuLnByb3BzLm9uQWZ0ZXJDaGFuZ2Uobi5nZXRWYWx1ZSgpKX07dmFyIHI9ZS5jb3VudCxvPWUubWluLHM9ZS5tYXgsaT1BcnJheS5hcHBseSh2b2lkIDAsbCgpKEFycmF5KHIrMSkpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gb30pLGE9ImRlZmF1bHRWYWx1ZSJpbiBlP2UuZGVmYXVsdFZhbHVlOmksdT12b2lkIDAhPT1lLnZhbHVlP2UudmFsdWU6YSxkPXUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4udHJpbUFsaWduVmFsdWUoZSx0KX0pLF89ZFswXT09PXM/MDpkLmxlbmd0aC0xO3JldHVybiBuLnN0YXRlPXtoYW5kbGU6bnVsbCxyZWNlbnQ6Xyxib3VuZHM6ZH0sbn1yZXR1cm4gaCgpKHQsZSksXygpKHQsW3trZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoKCJ2YWx1ZSJpbiBlfHwibWluImluIGV8fCJtYXgiaW4gZSkmJih0aGlzLnByb3BzLm1pbiE9PWUubWlufHx0aGlzLnByb3BzLm1heCE9PWUubWF4fHwhQygpKHRoaXMucHJvcHMudmFsdWUsZS52YWx1ZSkpKXt2YXIgbj10aGlzLnN0YXRlLmJvdW5kcyxyPWUudmFsdWV8fG4sbz1yLm1hcChmdW5jdGlvbihuLHIpe3JldHVybiB0LnRyaW1BbGlnblZhbHVlKG4scixlKX0pO2lmKChvLmxlbmd0aCE9PW4ubGVuZ3RofHwhby5ldmVyeShmdW5jdGlvbihlLHQpe3JldHVybiBlPT09blt0XX0pKSYmKHRoaXMuc2V0U3RhdGUoe2JvdW5kczpvfSksbi5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBSLmkodCxlKX0pKSl7dmFyIHM9ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFIuYSh0LGUpfSk7dGhpcy5wcm9wcy5vbkNoYW5nZShzKX19fX0se2tleToib25DaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHM7InZhbHVlImluIHQ/dm9pZCAwIT09ZS5oYW5kbGUmJnRoaXMuc2V0U3RhdGUoe2hhbmRsZTplLmhhbmRsZX0pOnRoaXMuc2V0U3RhdGUoZSk7dmFyIG49aSgpKHt9LHRoaXMuc3RhdGUsZSkscj1uLmJvdW5kczt0Lm9uQ2hhbmdlKHIpfX0se2tleToib25TdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXRoaXMuc3RhdGUscj10aGlzLmdldFZhbHVlKCk7dC5vbkJlZm9yZUNoYW5nZShyKTt2YXIgbz10aGlzLmNhbGNWYWx1ZUJ5UG9zKGUpO3RoaXMuc3RhcnRWYWx1ZT1vLHRoaXMuc3RhcnRQb3NpdGlvbj1lO3ZhciBzPXRoaXMuZ2V0Q2xvc2VzdEJvdW5kKG8pO2lmKHRoaXMucHJldk1vdmVkSGFuZGxlSW5kZXg9dGhpcy5nZXRCb3VuZE5lZWRNb3ZpbmcobyxzKSx0aGlzLnNldFN0YXRlKHtoYW5kbGU6dGhpcy5wcmV2TW92ZWRIYW5kbGVJbmRleCxyZWNlbnQ6dGhpcy5wcmV2TW92ZWRIYW5kbGVJbmRleH0pLG8hPT1yW3RoaXMucHJldk1vdmVkSGFuZGxlSW5kZXhdKXt2YXIgaT1bXS5jb25jYXQobCgpKG4uYm91bmRzKSk7aVt0aGlzLnByZXZNb3ZlZEhhbmRsZUluZGV4XT1vLHRoaXMub25DaGFuZ2Uoe2JvdW5kczppfSl9fX0se2tleToib25Nb3ZlIix2YWx1ZTpmdW5jdGlvbihlLHQpe1IuaihlKTt2YXIgbj10aGlzLnN0YXRlLHI9dGhpcy5jYWxjVmFsdWVCeVBvcyh0KTtyIT09bi5ib3VuZHNbbi5oYW5kbGVdJiZ0aGlzLm1vdmVUbyhyKX19LHtrZXk6Im9uS2V5Ym9hcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVIuZChlKTtpZih0KXtSLmooZSk7dmFyIG49dGhpcy5zdGF0ZSxyPXRoaXMucHJvcHMsbz1uLmJvdW5kcyxzPW4uaGFuZGxlLGk9b1tzXSxhPXQoaSxyKSxsPXRoaXMudHJpbUFsaWduVmFsdWUoYSk7aWYobD09PWkpcmV0dXJuO3RoaXMubW92ZVRvKGwsITApfX19LHtrZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmJvdW5kc319LHtrZXk6ImdldENsb3Nlc3RCb3VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3RhdGUuYm91bmRzLG49MCxyPTE7cjx0Lmxlbmd0aC0xOysrcillPnRbcl0mJihuPXIpO3JldHVybiBNYXRoLmFicyh0W24rMV0tZSk8TWF0aC5hYnModFtuXS1lKSYmKG4rPTEpLG59fSx7a2V5OiJnZXRCb3VuZE5lZWRNb3ZpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zdGF0ZSxyPW4uYm91bmRzLG89bi5yZWNlbnQscz10LGk9clt0KzFdPT09clt0XTtyZXR1cm4gaSYmcltvXT09PXJbdF0mJihzPW8pLGkmJmUhPT1yW3QrMV0mJihzPWU8clt0KzFdP3Q6dCsxKSxzfX0se2tleToiZ2V0TG93ZXJCb3VuZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS5ib3VuZHNbMF19fSx7a2V5OiJnZXRVcHBlckJvdW5kIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUuYm91bmRzO3JldHVybiBlW2UubGVuZ3RoLTFdfX0se2tleToiZ2V0UG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1hcmtzLG49ZS5zdGVwLHI9ZS5taW4sbz1lLm1heCxzPXRoaXMuX2dldFBvaW50c0NhY2hlO2lmKCFzfHxzLm1hcmtzIT09dHx8cy5zdGVwIT09bil7dmFyIGE9aSgpKHt9LHQpO2lmKG51bGwhPT1uKWZvcih2YXIgbD1yO2w8PW87bCs9bilhW2xdPWw7dmFyIHU9T2JqZWN0LmtleXMoYSkubWFwKHBhcnNlRmxvYXQpO3Uuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSx0aGlzLl9nZXRQb2ludHNDYWNoZT17bWFya3M6dCxzdGVwOm4scG9pbnRzOnV9fXJldHVybiB0aGlzLl9nZXRQb2ludHNDYWNoZS5wb2ludHN9fSx7a2V5OiJtb3ZlVG8iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc3RhdGUsbz10aGlzLnByb3BzLHM9W10uY29uY2F0KGwoKShyLmJvdW5kcykpO3Nbci5oYW5kbGVdPWU7dmFyIGk9ci5oYW5kbGU7ITEhPT1vLnB1c2hhYmxlP3RoaXMucHVzaFN1cnJvdW5kaW5nSGFuZGxlcyhzLGkpOm8uYWxsb3dDcm9zcyYmKHMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSxpPXMuaW5kZXhPZihlKSksdGhpcy5vbkNoYW5nZSh7aGFuZGxlOmksYm91bmRzOnN9KSx0JiZ0aGlzLnNldFN0YXRlKHt9LGZ1bmN0aW9uKCl7bi5oYW5kbGVzUmVmc1tpXS5mb2N1cygpfSl9fSx7a2V5OiJwdXNoU3Vycm91bmRpbmdIYW5kbGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWVbdF0scj10aGlzLnByb3BzLnB1c2hhYmxlO3I9TnVtYmVyKHIpO3ZhciBvPTA7aWYoZVt0KzFdLW48ciYmKG89MSksbi1lW3QtMV08ciYmKG89LTEpLDAhPT1vKXt2YXIgcz10K28saT1vKihlW3NdLW4pO3RoaXMucHVzaEhhbmRsZShlLHMsbyxyLWkpfHwoZVt0XT1lW3NdLW8qcil9fX0se2tleToicHVzaEhhbmRsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvPWVbdF0scz1lW3RdO24qKHMtbyk8cjspe2lmKCF0aGlzLnB1c2hIYW5kbGVPbmVQb2ludChlLHQsbikpcmV0dXJuIGVbdF09bywhMTtzPWVbdF19cmV0dXJuITB9fSx7a2V5OiJwdXNoSGFuZGxlT25lUG9pbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmdldFBvaW50cygpLG89ci5pbmRleE9mKGVbdF0pLHM9bytuO2lmKHM+PXIubGVuZ3RofHxzPDApcmV0dXJuITE7dmFyIGk9dCtuLGE9cltzXSxsPXRoaXMucHJvcHMucHVzaGFibGUsdT1uKihlW2ldLWEpO3JldHVybiEhdGhpcy5wdXNoSGFuZGxlKGUsaSxuLGwtdSkmJihlW3RdPWEsITApfX0se2tleToidHJpbUFsaWduVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9aSgpKHt9LHRoaXMucHJvcHMsbiksbz1SLmEoZSxyKSxzPXRoaXMuZW5zdXJlVmFsdWVOb3RDb25mbGljdCh0LG8scik7cmV0dXJuIFIuYihzLHIpfX0se2tleToiZW5zdXJlVmFsdWVOb3RDb25mbGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uYWxsb3dDcm9zcyxvPW4ucHVzaGFibGUscz10aGlzLnN0YXRlfHx7fSxpPXMuYm91bmRzO2lmKGU9dm9pZCAwPT09ZT9zLmhhbmRsZTplLG89TnVtYmVyKG8pLCFyJiZudWxsIT1lJiZ2b2lkIDAhPT1pKXtpZihlPjAmJnQ8PWlbZS0xXStvKXJldHVybiBpW2UtMV0rbztpZihlPGkubGVuZ3RoLTEmJnQ+PWlbZSsxXS1vKXJldHVybiBpW2UrMV0tb31yZXR1cm4gdH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5zdGF0ZSxuPXQuaGFuZGxlLHI9dC5ib3VuZHMscz10aGlzLnByb3BzLGk9cy5wcmVmaXhDbHMsYT1zLnZlcnRpY2FsLGw9cy5pbmNsdWRlZCx1PXMuZGlzYWJsZWQsYz1zLm1pbixkPXMubWF4LF89cy5oYW5kbGUscD1zLnRyYWNrU3R5bGUsZj1zLmhhbmRsZVN0eWxlLG09cy50YWJJbmRleCxoPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGNPZmZzZXQodCl9KSxnPWkrIi1oYW5kbGUiLEU9ci5tYXAoZnVuY3Rpb24odCxyKXt2YXIgcztyZXR1cm4gXyh7Y2xhc3NOYW1lOlQoKSgocz17fSxvKCkocyxnLCEwKSxvKCkocyxnKyItIisocisxKSwhMCkscykpLHByZWZpeENsczppLHZlcnRpY2FsOmEsb2Zmc2V0Omhbcl0sdmFsdWU6dCxkcmFnZ2luZzpuPT09cixpbmRleDpyLHRhYkluZGV4Om1bcl18fDAsbWluOmMsbWF4OmQsZGlzYWJsZWQ6dSxzdHlsZTpmW3JdLHJlZjpmdW5jdGlvbih0KXtyZXR1cm4gZS5zYXZlSGFuZGxlKHIsdCl9fSl9KTtyZXR1cm57dHJhY2tzOnIuc2xpY2UoMCwtMSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj10KzEscz1UKCkoKG49e30sbygpKG4saSsiLXRyYWNrIiwhMCksbygpKG4saSsiLXRyYWNrLSIrciwhMCksbikpO3JldHVybiBiLmEuY3JlYXRlRWxlbWVudChPLmEse2NsYXNzTmFtZTpzLHZlcnRpY2FsOmEsaW5jbHVkZWQ6bCxvZmZzZXQ6aFtyLTFdLGxlbmd0aDpoW3JdLWhbci0xXSxzdHlsZTpwW3RdLGtleTpyfSl9KSxoYW5kbGVzOkV9fX1dKSx0fShiLmEuQ29tcG9uZW50KTtqLmRpc3BsYXlOYW1lPSJSYW5nZSIsai5wcm9wVHlwZXM9e2RlZmF1bHRWYWx1ZTp5LmEuYXJyYXlPZih5LmEubnVtYmVyKSx2YWx1ZTp5LmEuYXJyYXlPZih5LmEubnVtYmVyKSxjb3VudDp5LmEubnVtYmVyLHB1c2hhYmxlOnkuYS5vbmVPZlR5cGUoW3kuYS5ib29sLHkuYS5udW1iZXJdKSxhbGxvd0Nyb3NzOnkuYS5ib29sLGRpc2FibGVkOnkuYS5ib29sLHRhYkluZGV4OnkuYS5hcnJheU9mKHkuYS5udW1iZXIpfSxqLmRlZmF1bHRQcm9wcz17Y291bnQ6MSxhbGxvd0Nyb3NzOiEwLHB1c2hhYmxlOiExLHRhYkluZGV4OltdfSx0LmE9T2JqZWN0KFMuYSkoail9LCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvU2xpZGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxoPW4ubihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvYnJvd3Nlci5qcyIpLGI9KG4ubihnKSxuKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvY29tbW9uL1RyYWNrLmpzIikpLEU9bigiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL2NvbW1vbi9jcmVhdGVTbGlkZXIuanMiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy91dGlscy5qcyIpLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtpKCkodGhpcyx0KTt2YXIgbj1jKCkodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtuLm9uRW5kPWZ1bmN0aW9uKCl7bi5zZXRTdGF0ZSh7ZHJhZ2dpbmc6ITF9KSxuLnJlbW92ZURvY3VtZW50RXZlbnRzKCksbi5wcm9wcy5vbkFmdGVyQ2hhbmdlKG4uZ2V0VmFsdWUoKSl9O3ZhciByPXZvaWQgMCE9PWUuZGVmYXVsdFZhbHVlP2UuZGVmYXVsdFZhbHVlOmUubWluLG89dm9pZCAwIT09ZS52YWx1ZT9lLnZhbHVlOnI7cmV0dXJuIG4uc3RhdGU9e3ZhbHVlOm4udHJpbUFsaWduVmFsdWUobyksZHJhZ2dpbmc6ITF9LG59cmV0dXJuIF8oKSh0LGUpLGwoKSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hdXRvRm9jdXMsbj1lLmRpc2FibGVkO3QmJiFuJiZ0aGlzLmZvY3VzKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXtpZigidmFsdWUiaW4gZXx8Im1pbiJpbiBlfHwibWF4ImluIGUpe3ZhciB0PXRoaXMuc3RhdGUudmFsdWUsbj12b2lkIDAhPT1lLnZhbHVlP2UudmFsdWU6dCxyPXRoaXMudHJpbUFsaWduVmFsdWUobixlKTtyIT09dCYmKHRoaXMuc2V0U3RhdGUoe3ZhbHVlOnJ9KSx5LmkobixlKSYmdGhpcy5wcm9wcy5vbkNoYW5nZShyKSl9fX0se2tleToib25DaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHM7ISgidmFsdWUiaW4gdCkmJnRoaXMuc2V0U3RhdGUoZSk7dmFyIG49ZS52YWx1ZTt0Lm9uQ2hhbmdlKG4pfX0se2tleToib25TdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZSh7ZHJhZ2dpbmc6ITB9KTt2YXIgdD10aGlzLnByb3BzLG49dGhpcy5nZXRWYWx1ZSgpO3Qub25CZWZvcmVDaGFuZ2Uobik7dmFyIHI9dGhpcy5jYWxjVmFsdWVCeVBvcyhlKTt0aGlzLnN0YXJ0VmFsdWU9cix0aGlzLnN0YXJ0UG9zaXRpb249ZSxyIT09biYmKHRoaXMucHJldk1vdmVkSGFuZGxlSW5kZXg9MCx0aGlzLm9uQ2hhbmdlKHt2YWx1ZTpyfSkpfX0se2tleToib25Nb3ZlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3kuaihlKTt2YXIgbj10aGlzLnN0YXRlLnZhbHVlLHI9dGhpcy5jYWxjVmFsdWVCeVBvcyh0KTtyIT09biYmdGhpcy5vbkNoYW5nZSh7dmFsdWU6cn0pfX0se2tleToib25LZXlib2FyZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9eS5kKGUpO2lmKHQpe3kuaihlKTt2YXIgbj10aGlzLnN0YXRlLHI9bi52YWx1ZSxvPXQocix0aGlzLnByb3BzKSxzPXRoaXMudHJpbUFsaWduVmFsdWUobyk7aWYocz09PXIpcmV0dXJuO3RoaXMub25DaGFuZ2Uoe3ZhbHVlOnN9KX19fSx7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZX19LHtrZXk6ImdldExvd2VyQm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMubWlufX0se2tleToiZ2V0VXBwZXJCb3VuZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZX19LHtrZXk6InRyaW1BbGlnblZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1vKCkoe30sdGhpcy5wcm9wcyx0KSxyPXkuYShlLG4pO3JldHVybiB5LmIocixuKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQucHJlZml4Q2xzLHI9dC52ZXJ0aWNhbCxzPXQuaW5jbHVkZWQsaT10LmRpc2FibGVkLGE9dC5taW5pbXVtVHJhY2tTdHlsZSxsPXQudHJhY2tTdHlsZSx1PXQuaGFuZGxlU3R5bGUsYz10LnRhYkluZGV4LGQ9dC5taW4sXz10Lm1heCxwPXQuaGFuZGxlLG09dGhpcy5zdGF0ZSxoPW0udmFsdWUsZz1tLmRyYWdnaW5nLEU9dGhpcy5jYWxjT2Zmc2V0KGgpLHk9cCh7Y2xhc3NOYW1lOm4rIi1oYW5kbGUiLHByZWZpeENsczpuLHZlcnRpY2FsOnIsb2Zmc2V0OkUsdmFsdWU6aCxkcmFnZ2luZzpnLGRpc2FibGVkOmksbWluOmQsbWF4Ol8saW5kZXg6MCx0YWJJbmRleDpjLHN0eWxlOnVbMF18fHUscmVmOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNhdmVIYW5kbGUoMCx0KX19KSx2PWxbMF18fGw7cmV0dXJue3RyYWNrczpmLmEuY3JlYXRlRWxlbWVudChiLmEse2NsYXNzTmFtZTpuKyItdHJhY2siLHZlcnRpY2FsOnIsaW5jbHVkZWQ6cyxvZmZzZXQ6MCxsZW5ndGg6RSxzdHlsZTpvKCkoe30sYSx2KX0pLGhhbmRsZXM6eX19fV0pLHR9KGYuYS5Db21wb25lbnQpO3YucHJvcFR5cGVzPXtkZWZhdWx0VmFsdWU6aC5hLm51bWJlcix2YWx1ZTpoLmEubnVtYmVyLGRpc2FibGVkOmguYS5ib29sLGF1dG9Gb2N1czpoLmEuYm9vbCx0YWJJbmRleDpoLmEubnVtYmVyfSx0LmE9T2JqZWN0KEUuYSkodil9LCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvY29tbW9uL01hcmtzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYz1uLm4odSksZD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiksXz1uLm4oZCkscD1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmVydGljYWwscj1lLm1hcmtzLHM9ZS5pbmNsdWRlZCxhPWUudXBwZXJCb3VuZCx1PWUubG93ZXJCb3VuZCxjPWUubWF4LGQ9ZS5taW4scD1lLm9uQ2xpY2tMYWJlbCxmPU9iamVjdC5rZXlzKHIpLG09Zi5sZW5ndGgsaD1tPjE/MTAwLyhtLTEpOjEwMCxnPS45KmgsYj1jLWQsRT1mLm1hcChwYXJzZUZsb2F0KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pLm1hcChmdW5jdGlvbihlKXt2YXIgYyxmPXJbZV0sbT0ib2JqZWN0Ij09dHlwZW9mIGYmJiFsLmEuaXNWYWxpZEVsZW1lbnQoZiksaD1tP2YubGFiZWw6ZjtpZighaCYmMCE9PWgpcmV0dXJuIG51bGw7dmFyIEU9IXMmJmU9PT1hfHxzJiZlPD1hJiZlPj11LHk9XygpKChjPXt9LGkoKShjLHQrIi10ZXh0IiwhMCksaSgpKGMsdCsiLXRleHQtYWN0aXZlIixFKSxjKSksdj17bWFyZ2luQm90dG9tOiItNTAlIixib3R0b206KGUtZCkvYioxMDArIiUifSxUPXt3aWR0aDpnKyIlIixtYXJnaW5MZWZ0Oi1nLzIrIiUiLGxlZnQ6KGUtZCkvYioxMDArIiUifSxBPW4/djpULEM9bT9vKCkoe30sQSxmLnN0eWxlKTpBO3JldHVybiBsLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTp5LHN0eWxlOkMsa2V5OmUsb25Nb3VzZURvd246ZnVuY3Rpb24odCl7cmV0dXJuIHAodCxlKX0sb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBwKHQsZSl9fSxoKX0pO3JldHVybiBsLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnR9LEUpfTtwLnByb3BUeXBlcz17Y2xhc3NOYW1lOmMuYS5zdHJpbmcsdmVydGljYWw6Yy5hLmJvb2wsbWFya3M6Yy5hLm9iamVjdCxpbmNsdWRlZDpjLmEuYm9vbCx1cHBlckJvdW5kOmMuYS5udW1iZXIsbG93ZXJCb3VuZDpjLmEubnVtYmVyLG1heDpjLmEubnVtYmVyLG1pbjpjLmEubnVtYmVyLG9uQ2xpY2tMYWJlbDpjLmEuZnVuY30sdC5hPXB9LCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvY29tbW9uL1N0ZXBzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYz1uLm4odSksZD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiksXz1uLm4oZCkscD1uKCIuL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiKSxmPW4ubihwKSxtPWZ1bmN0aW9uKGUsdCxuLHIsbyxzKXtmKCkoIW58fHI+MCwiYFNsaWRlcltzdGVwXWAgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyIGluIG9yZGVyIHRvIG1ha2UgU2xpZGVyW2RvdHNdIHdvcmsuIik7dmFyIGk9T2JqZWN0LmtleXModCkubWFwKHBhcnNlRmxvYXQpO2lmKG4pZm9yKHZhciBhPW87YTw9czthKz1yKS0xPT09aS5pbmRleE9mKGEpJiZpLnB1c2goYSk7cmV0dXJuIGl9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcmVmaXhDbHMsbj1lLnZlcnRpY2FsLHI9ZS5tYXJrcyxzPWUuZG90cyxhPWUuc3RlcCx1PWUuaW5jbHVkZWQsYz1lLmxvd2VyQm91bmQsZD1lLnVwcGVyQm91bmQscD1lLm1heCxmPWUubWluLGg9ZS5kb3RTdHlsZSxnPWUuYWN0aXZlRG90U3R5bGUsYj1wLWYsRT1tKDAscixzLGEsZixwKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHIscz1NYXRoLmFicyhlLWYpL2IqMTAwKyIlIixhPSF1JiZlPT09ZHx8dSYmZTw9ZCYmZT49YyxwPW4/aSgpKHtib3R0b206c30saCk6aSgpKHtsZWZ0OnN9LGgpO2EmJihwPWkoKSh7fSxwLGcpKTt2YXIgbT1fKCkoKHI9e30sbygpKHIsdCsiLWRvdCIsITApLG8oKShyLHQrIi1kb3QtYWN0aXZlIixhKSxyKSk7cmV0dXJuIGwuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOm0sc3R5bGU6cCxrZXk6ZX0pfSk7cmV0dXJuIGwuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dCsiLXN0ZXAifSxFKX07aC5wcm9wVHlwZXM9e3ByZWZpeENsczpjLmEuc3RyaW5nLGFjdGl2ZURvdFN0eWxlOmMuYS5vYmplY3QsZG90U3R5bGU6Yy5hLm9iamVjdCxtaW46Yy5hLm51bWJlcixtYXg6Yy5hLm51bWJlcix1cHBlckJvdW5kOmMuYS5udW1iZXIsbG93ZXJCb3VuZDpjLmEubnVtYmVyLGluY2x1ZGVkOmMuYS5ib29sLGRvdHM6Yy5hLmJvb2wsc3RlcDpjLmEubnVtYmVyLG1hcmtzOmMuYS5vYmplY3QsdmVydGljYWw6Yy5hLmJvb2x9LHQuYT1ofSwiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL2NvbW1vbi9UcmFjay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxpPW4ubihzKSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS5pbmNsdWRlZCxyPWUudmVydGljYWwscz1lLm9mZnNldCxhPWUubGVuZ3RoLGw9ZS5zdHlsZSx1PXI/e2JvdHRvbTpzKyIlIixoZWlnaHQ6YSsiJSJ9OntsZWZ0OnMrIiUiLHdpZHRoOmErIiUifSxjPW8oKSh7fSxsLHUpO3JldHVybiBuP2kuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dCxzdHlsZTpjfSk6bnVsbH07dC5hPWF9LCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvY29tbW9uL2NyZWF0ZVNsaWRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8oZSl7dmFyIHQsbjtyZXR1cm4gbj10PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7XygpKHRoaXMsdCk7dmFyIG49aCgpKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlKSk7bi5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtpZigwPT09ZS5idXR0b24pe3ZhciB0PW4ucHJvcHMudmVydGljYWwscj13LmUodCxlKTtpZih3LmcoZSxuLmhhbmRsZXNSZWZzKSl7dmFyIG89dy5jKHQsZS50YXJnZXQpO24uZHJhZ09mZnNldD1yLW8scj1vfWVsc2Ugbi5kcmFnT2Zmc2V0PTA7bi5yZW1vdmVEb2N1bWVudEV2ZW50cygpLG4ub25TdGFydChyKSxuLmFkZERvY3VtZW50TW91c2VFdmVudHMoKX19LG4ub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKGUpe2lmKCF3LmgoZSkpe3ZhciB0PW4ucHJvcHMudmVydGljYWwscj13LmYodCxlKTtpZih3LmcoZSxuLmhhbmRsZXNSZWZzKSl7dmFyIG89dy5jKHQsZS50YXJnZXQpO24uZHJhZ09mZnNldD1yLW8scj1vfWVsc2Ugbi5kcmFnT2Zmc2V0PTA7bi5vblN0YXJ0KHIpLG4uYWRkRG9jdW1lbnRUb3VjaEV2ZW50cygpLHcuaihlKX19LG4ub25Gb2N1cz1mdW5jdGlvbihlKXt2YXIgdD1uLnByb3BzLHI9dC5vbkZvY3VzLG89dC52ZXJ0aWNhbDtpZih3LmcoZSxuLmhhbmRsZXNSZWZzKSl7dmFyIHM9dy5jKG8sZS50YXJnZXQpO24uZHJhZ09mZnNldD0wLG4ub25TdGFydChzKSx3LmooZSksciYmcihlKX19LG4ub25CbHVyPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucHJvcHMub25CbHVyO24ub25FbmQoZSksdCYmdChlKX0sbi5vbk1vdXNlVXA9ZnVuY3Rpb24oKXtuLmhhbmRsZXNSZWZzW24ucHJldk1vdmVkSGFuZGxlSW5kZXhdJiZuLmhhbmRsZXNSZWZzW24ucHJldk1vdmVkSGFuZGxlSW5kZXhdLmNsaWNrRm9jdXMoKX0sbi5vbk1vdXNlTW92ZT1mdW5jdGlvbihlKXtpZighbi5zbGlkZXJSZWYpcmV0dXJuIHZvaWQgbi5vbkVuZCgpO3ZhciB0PXcuZShuLnByb3BzLnZlcnRpY2FsLGUpO24ub25Nb3ZlKGUsdC1uLmRyYWdPZmZzZXQpfSxuLm9uVG91Y2hNb3ZlPWZ1bmN0aW9uKGUpe2lmKHcuaChlKXx8IW4uc2xpZGVyUmVmKXJldHVybiB2b2lkIG4ub25FbmQoKTt2YXIgdD13LmYobi5wcm9wcy52ZXJ0aWNhbCxlKTtuLm9uTW92ZShlLHQtbi5kcmFnT2Zmc2V0KX0sbi5vbktleURvd249ZnVuY3Rpb24oZSl7bi5zbGlkZXJSZWYmJncuZyhlLG4uaGFuZGxlc1JlZnMpJiZuLm9uS2V5Ym9hcmQoZSl9LG4ub25DbGlja01hcmtMYWJlbD1mdW5jdGlvbihlLHQpe2Uuc3RvcFByb3BhZ2F0aW9uKCksbi5vbkNoYW5nZSh7dmFsdWU6dH0pfSxuLnNhdmVTbGlkZXI9ZnVuY3Rpb24oZSl7bi5zbGlkZXJSZWY9ZX07cmV0dXJuIG4uaGFuZGxlc1JlZnM9e30sbn1yZXR1cm4geSgpKHQsZSksZigpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQ9dGhpcy5zbGlkZXJSZWYmJnRoaXMuc2xpZGVyUmVmLm93bmVyRG9jdW1lbnR9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtiKCkodC5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLCJjb21wb25lbnRXaWxsVW5tb3VudCIsdGhpcykmJmIoKSh0LnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSksImNvbXBvbmVudFdpbGxVbm1vdW50Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMucmVtb3ZlRG9jdW1lbnRFdmVudHMoKX19LHtrZXk6ImdldFNsaWRlclN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2xpZGVyUmVmLHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdGhpcy5wcm9wcy52ZXJ0aWNhbD90LnRvcDp0LmxlZnR9fSx7a2V5OiJnZXRTbGlkZXJMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zbGlkZXJSZWY7aWYoIWUpcmV0dXJuIDA7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdGhpcy5wcm9wcy52ZXJ0aWNhbD90LmhlaWdodDp0LndpZHRofX0se2tleToiYWRkRG9jdW1lbnRUb3VjaEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9uVG91Y2hNb3ZlTGlzdGVuZXI9T2JqZWN0KE8uYSkodGhpcy5kb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlKSx0aGlzLm9uVG91Y2hVcExpc3RlbmVyPU9iamVjdChPLmEpKHRoaXMuZG9jdW1lbnQsInRvdWNoZW5kIix0aGlzLm9uRW5kKX19LHtrZXk6ImFkZERvY3VtZW50TW91c2VFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlTW92ZUxpc3RlbmVyPU9iamVjdChPLmEpKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZSksdGhpcy5vbk1vdXNlVXBMaXN0ZW5lcj1PYmplY3QoTy5hKSh0aGlzLmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLm9uRW5kKX19LHtrZXk6InJlbW92ZURvY3VtZW50RXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25Ub3VjaE1vdmVMaXN0ZW5lciYmdGhpcy5vblRvdWNoTW92ZUxpc3RlbmVyLnJlbW92ZSgpLHRoaXMub25Ub3VjaFVwTGlzdGVuZXImJnRoaXMub25Ub3VjaFVwTGlzdGVuZXIucmVtb3ZlKCksdGhpcy5vbk1vdXNlTW92ZUxpc3RlbmVyJiZ0aGlzLm9uTW91c2VNb3ZlTGlzdGVuZXIucmVtb3ZlKCksdGhpcy5vbk1vdXNlVXBMaXN0ZW5lciYmdGhpcy5vbk1vdXNlVXBMaXN0ZW5lci5yZW1vdmUoKX19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuZGlzYWJsZWR8fHRoaXMuaGFuZGxlc1JlZnNbMF0uZm9jdXMoKX19LHtrZXk6ImJsdXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnByb3BzLmRpc2FibGVkfHxPYmplY3Qua2V5cyh0aGlzLmhhbmRsZXNSZWZzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuaGFuZGxlc1JlZnNbdF0mJmUuaGFuZGxlc1JlZnNbdF0uYmx1ciYmZS5oYW5kbGVzUmVmc1t0XS5ibHVyKCl9KX19LHtrZXk6ImNhbGNWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQudmVydGljYWwscj10Lm1pbixvPXQubWF4LHM9TWF0aC5hYnMoTWF0aC5tYXgoZSwwKS90aGlzLmdldFNsaWRlckxlbmd0aCgpKTtyZXR1cm4gbj8oMS1zKSooby1yKStyOnMqKG8tcikrcn19LHtrZXk6ImNhbGNWYWx1ZUJ5UG9zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLXRoaXMuZ2V0U2xpZGVyU3RhcnQoKTtyZXR1cm4gdGhpcy50cmltQWxpZ25WYWx1ZSh0aGlzLmNhbGNWYWx1ZSh0KSl9fSx7a2V5OiJjYWxjT2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5taW47cmV0dXJuKGUtbikvKHQubWF4LW4pKjEwMH19LHtrZXk6InNhdmVIYW5kbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5oYW5kbGVzUmVmc1tlXT10fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLG49dGhpcy5wcm9wcyxvPW4ucHJlZml4Q2xzLHM9bi5jbGFzc05hbWUsaT1uLm1hcmtzLGE9bi5kb3RzLHU9bi5zdGVwLGQ9bi5pbmNsdWRlZCxfPW4uZGlzYWJsZWQscD1uLnZlcnRpY2FsLGY9bi5taW4sbT1uLm1heCxoPW4uY2hpbGRyZW4sZz1uLm1heGltdW1UcmFja1N0eWxlLEU9bi5zdHlsZSx5PW4ucmFpbFN0eWxlLHY9bi5kb3RTdHlsZSxBPW4uYWN0aXZlRG90U3R5bGUsQz1iKCkodC5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLCJyZW5kZXIiLHRoaXMpLmNhbGwodGhpcyksTz1DLnRyYWNrcyxTPUMuaGFuZGxlcyxqPVIoKShvLChlPXt9LGMoKShlLG8rIi13aXRoLW1hcmtzIixPYmplY3Qua2V5cyhpKS5sZW5ndGgpLGMoKShlLG8rIi1kaXNhYmxlZCIsXyksYygpKGUsbysiLXZlcnRpY2FsIixwKSxjKCkoZSxzLHMpLGUpKTtyZXR1cm4gVC5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnNhdmVTbGlkZXIsY2xhc3NOYW1lOmosb25Ub3VjaFN0YXJ0Ol8/cjp0aGlzLm9uVG91Y2hTdGFydCxvbk1vdXNlRG93bjpfP3I6dGhpcy5vbk1vdXNlRG93bixvbk1vdXNlVXA6Xz9yOnRoaXMub25Nb3VzZVVwLG9uS2V5RG93bjpfP3I6dGhpcy5vbktleURvd24sb25Gb2N1czpfP3I6dGhpcy5vbkZvY3VzLG9uQmx1cjpfP3I6dGhpcy5vbkJsdXIsc3R5bGU6RX0sVC5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvKyItcmFpbCIsc3R5bGU6bCgpKHt9LGcseSl9KSxPLFQuYS5jcmVhdGVFbGVtZW50KHguYSx7cHJlZml4Q2xzOm8sdmVydGljYWw6cCxtYXJrczppLGRvdHM6YSxzdGVwOnUsaW5jbHVkZWQ6ZCxsb3dlckJvdW5kOnRoaXMuZ2V0TG93ZXJCb3VuZCgpLHVwcGVyQm91bmQ6dGhpcy5nZXRVcHBlckJvdW5kKCksbWF4Om0sbWluOmYsZG90U3R5bGU6dixhY3RpdmVEb3RTdHlsZTpBfSksUyxULmEuY3JlYXRlRWxlbWVudChMLmEse2NsYXNzTmFtZTpvKyItbWFyayIsb25DbGlja0xhYmVsOl8/cjp0aGlzLm9uQ2xpY2tNYXJrTGFiZWwsdmVydGljYWw6cCxtYXJrczppLGluY2x1ZGVkOmQsbG93ZXJCb3VuZDp0aGlzLmdldExvd2VyQm91bmQoKSx1cHBlckJvdW5kOnRoaXMuZ2V0VXBwZXJCb3VuZCgpLG1heDptLG1pbjpmfSksaCl9fV0pLHR9KGUpLHQuZGlzcGxheU5hbWU9IkNvbXBvbmVudEVuaGFuY2VyKCIrZS5kaXNwbGF5TmFtZSsiKSIsdC5wcm9wVHlwZXM9bCgpKHt9LGUucHJvcFR5cGVzLHttaW46Qy5hLm51bWJlcixtYXg6Qy5hLm51bWJlcixzdGVwOkMuYS5udW1iZXIsbWFya3M6Qy5hLm9iamVjdCxpbmNsdWRlZDpDLmEuYm9vbCxjbGFzc05hbWU6Qy5hLnN0cmluZyxwcmVmaXhDbHM6Qy5hLnN0cmluZyxkaXNhYmxlZDpDLmEuYm9vbCxjaGlsZHJlbjpDLmEuYW55LG9uQmVmb3JlQ2hhbmdlOkMuYS5mdW5jLG9uQ2hhbmdlOkMuYS5mdW5jLG9uQWZ0ZXJDaGFuZ2U6Qy5hLmZ1bmMsaGFuZGxlOkMuYS5mdW5jLGRvdHM6Qy5hLmJvb2wsdmVydGljYWw6Qy5hLmJvb2wsc3R5bGU6Qy5hLm9iamVjdCxtaW5pbXVtVHJhY2tTdHlsZTpDLmEub2JqZWN0LG1heGltdW1UcmFja1N0eWxlOkMuYS5vYmplY3QsaGFuZGxlU3R5bGU6Qy5hLm9uZU9mVHlwZShbQy5hLm9iamVjdCxDLmEuYXJyYXlPZihDLmEub2JqZWN0KV0pLHRyYWNrU3R5bGU6Qy5hLm9uZU9mVHlwZShbQy5hLm9iamVjdCxDLmEuYXJyYXlPZihDLmEub2JqZWN0KV0pLHJhaWxTdHlsZTpDLmEub2JqZWN0LGRvdFN0eWxlOkMuYS5vYmplY3QsYWN0aXZlRG90U3R5bGU6Qy5hLm9iamVjdCxhdXRvRm9jdXM6Qy5hLmJvb2wsb25Gb2N1czpDLmEuZnVuYyxvbkJsdXI6Qy5hLmZ1bmN9KSx0LmRlZmF1bHRQcm9wcz1sKCkoe30sZS5kZWZhdWx0UHJvcHMse3ByZWZpeENsczoicmMtc2xpZGVyIixjbGFzc05hbWU6IiIsbWluOjAsbWF4OjEwMCxzdGVwOjEsbWFya3M6e30saGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXgsbj1pKCkoZSxbImluZGV4Il0pO3JldHVybiBkZWxldGUgbi5kcmFnZ2luZyxULmEuY3JlYXRlRWxlbWVudChELmEsbCgpKHt9LG4se2tleTp0fSkpfSxvbkJlZm9yZUNoYW5nZTpyLG9uQ2hhbmdlOnIsb25BZnRlckNoYW5nZTpyLGluY2x1ZGVkOiEwLGRpc2FibGVkOiExLGRvdHM6ITEsdmVydGljYWw6ITEsdHJhY2tTdHlsZTpbe31dLGhhbmRsZVN0eWxlOlt7fV0scmFpbFN0eWxlOnt9LGRvdFN0eWxlOnt9LGFjdGl2ZURvdFN0eWxlOnt9fSksbn10LmE9bzt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1uLm4ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9bi5uKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldC5qcyIpLGI9bi5uKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1uLm4oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9bi5uKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEM9bi5uKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lci5qcyIpLFM9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLFI9bi5uKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvd2FybmluZy9icm93c2VyLmpzIikseD0obi5uKGopLG4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9jb21tb24vU3RlcHMuanMiKSksTD1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvY29tbW9uL01hcmtzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvSGFuZGxlLmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvdXRpbHMuanMiKX0sIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9jcmVhdGVTbGlkZXJXaXRoVG9vbHRpcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG47cmV0dXJuIG49dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2QoKSh0aGlzLG4pO3ZhciB0PW0oKSh0aGlzLChuLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5jYWxsKHRoaXMsZSkpO3JldHVybiB0LmhhbmRsZVRvb2x0aXBWaXNpYmxlQ2hhbmdlPWZ1bmN0aW9uKGUsbil7dC5zZXRTdGF0ZShmdW5jdGlvbih0KXtyZXR1cm57dmlzaWJsZXM6dSgpKHt9LHQudmlzaWJsZXMsYSgpKHt9LGUsbikpfX0pfSx0LmhhbmRsZVdpdGhUb29sdGlwPWZ1bmN0aW9uKGUpe3ZhciBuPWUudmFsdWUscj1lLmRyYWdnaW5nLG89ZS5pbmRleCxpPWUuZGlzYWJsZWQsYT1zKCkoZSxbInZhbHVlIiwiZHJhZ2dpbmciLCJpbmRleCIsImRpc2FibGVkIl0pLGw9dC5wcm9wcyxjPWwudGlwRm9ybWF0dGVyLGQ9bC50aXBQcm9wcyxfPWwuaGFuZGxlU3R5bGUscD1kLnByZWZpeENscyxmPXZvaWQgMD09PXA/InJjLXNsaWRlci10b29sdGlwIjpwLG09ZC5vdmVybGF5LGg9dm9pZCAwPT09bT9jKG4pOm0sZz1kLnBsYWNlbWVudCxiPXZvaWQgMD09PWc/InRvcCI6Zyx5PWQudmlzaWJsZSx2PXZvaWQgMCE9PXkmJnksQz1zKCkoZCxbInByZWZpeENscyIsIm92ZXJsYXkiLCJwbGFjZW1lbnQiLCJ2aXNpYmxlIl0pLE89dm9pZCAwO3JldHVybiBPPUFycmF5LmlzQXJyYXkoXyk/X1tvXXx8X1swXTpfLEUuYS5jcmVhdGVFbGVtZW50KFQuYSx1KCkoe30sQyx7cHJlZml4Q2xzOmYsb3ZlcmxheTpoLHBsYWNlbWVudDpiLHZpc2libGU6IWkmJih0LnN0YXRlLnZpc2libGVzW29dfHxyKXx8dixrZXk6b30pLEUuYS5jcmVhdGVFbGVtZW50KEEuYSx1KCkoe30sYSx7c3R5bGU6dSgpKHt9LE8pLHZhbHVlOm4sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlVG9vbHRpcFZpc2libGVDaGFuZ2UobywhMCl9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbigpe3JldHVybiB0LmhhbmRsZVRvb2x0aXBWaXNpYmxlQ2hhbmdlKG8sITEpfX0pKSl9LHQuc3RhdGU9e3Zpc2libGVzOnt9fSx0fXJldHVybiBnKCkobix0KSxwKCkobixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFLmEuY3JlYXRlRWxlbWVudChlLHUoKSh7fSx0aGlzLnByb3BzLHtoYW5kbGU6dGhpcy5oYW5kbGVXaXRoVG9vbHRpcH0pKX19XSksbn0oRS5hLkNvbXBvbmVudCksdC5wcm9wVHlwZXM9e3RpcEZvcm1hdHRlcjp2LmEuZnVuYyxoYW5kbGVTdHlsZTp2LmEub25lT2ZUeXBlKFt2LmEub2JqZWN0LHYuYS5hcnJheU9mKHYuYS5vYmplY3QpXSksdGlwUHJvcHM6di5hLm9iamVjdH0sdC5kZWZhdWx0UHJvcHM9e3RpcEZvcm1hdHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0saGFuZGxlU3R5bGU6W3t9XSx0aXBQcm9wczp7fX0sbn10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxzPW4ubihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGE9bi5uKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PW4ubihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9bi5uKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1uLm4oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09bi5uKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1uLm4oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEU9bi5uKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHY9bi5uKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmMtdG9vbHRpcC9lcy9pbmRleC5qcyIpLEE9bigiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL0hhbmRsZS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmMtc2xpZGVyL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvU2xpZGVyLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvZXMvUmFuZ2UuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9IYW5kbGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9jcmVhdGVTbGlkZXJXaXRoVG9vbHRpcC5qcyIpO24uZCh0LCJSYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSksbi5kKHQsIkhhbmRsZSIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsImNyZWF0ZVNsaWRlcldpdGhUb29sdGlwIixmdW5jdGlvbigpe3JldHVybiBpLmF9KSxyLmEuUmFuZ2U9by5hLHIuYS5IYW5kbGU9cy5hLHIuYS5jcmVhdGVTbGlkZXJXaXRoVG9vbHRpcD1pLmEsdC5kZWZhdWx0PXIuYX0sIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIGUudGFyZ2V0PT09T2JqZWN0KGcuZmluZERPTU5vZGUpKHRbbl0pfSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXQubWluLHI9dC5tYXg7cmV0dXJuIGU8bnx8ZT5yfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUudG91Y2hlcy5sZW5ndGg+MXx8InRvdWNoZW5kIj09PWUudHlwZS50b0xvd2VyQ2FzZSgpJiZlLnRvdWNoZXMubGVuZ3RoPjB9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXQubWFya3Mscj10LnN0ZXAsbz10Lm1pbixzPU9iamVjdC5rZXlzKG4pLm1hcChwYXJzZUZsb2F0KTtpZihudWxsIT09cil7dmFyIGk9TWF0aC5yb3VuZCgoZS1vKS9yKSpyK287cy5wdXNoKGkpfXZhciBhPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyhlLXQpfSk7cmV0dXJuIHNbYS5pbmRleE9mKE1hdGgubWluLmFwcGx5KE1hdGgsaCgpKGEpKSldfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS50b1N0cmluZygpLG49MDtyZXR1cm4gdC5pbmRleE9mKCIuIik+PTAmJihuPXQubGVuZ3RoLXQuaW5kZXhPZigiLiIpLTEpLG59ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlP3QuY2xpZW50WTp0LnBhZ2VYfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZT90LnRvdWNoZXNbMF0uY2xpZW50WTp0LnRvdWNoZXNbMF0ucGFnZVh9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGU/bi50b3ArLjUqbi5oZWlnaHQ6bi5sZWZ0Ky41Km4ud2lkdGh9ZnVuY3Rpb24gZChlLHQpe3ZhciBuPXQubWF4LHI9dC5taW47cmV0dXJuIGU8PXI/cjplPj1uP246ZX1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dC5zdGVwLHI9aShlLHQpO3JldHVybiBudWxsPT09bj9yOnBhcnNlRmxvYXQoci50b0ZpeGVkKGEobikpKX1mdW5jdGlvbiBwKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIGYoZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBiLmEuVVA6Y2FzZSBiLmEuUklHSFQ6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5zdGVwfTtjYXNlIGIuYS5ET1dOOmNhc2UgYi5hLkxFRlQ6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdC5zdGVwfTtjYXNlIGIuYS5FTkQ6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWF4fTtjYXNlIGIuYS5IT01FOnJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB0Lm1pbn07Y2FzZSBiLmEuUEFHRV9VUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsyKnQuc3RlcH07Y2FzZSBiLmEuUEFHRV9ET1dOOnJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlLTIqdC5zdGVwfTtkZWZhdWx0OnJldHVybn19dC5nPXIsdC5pPW8sdC5oPXMsdC5lPWwsdC5mPXUsdC5jPWMsdC5hPWQsdC5iPV8sdC5qPXAsdC5kPWY7dmFyIG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksaD1uLm4obSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxiPShuLm4oZyksbigiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9LZXlDb2RlLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcmMtdG9vbHRpcC9hc3NldHMvYm9vdHN0cmFwLmNzcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL25vZGVfbW9kdWxlcy9yYy10b29sdGlwL2VzL0NvbnRlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLF89bi5uKGQpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBvKCkodGhpcyx0KSxpKCkodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIGwoKSh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMudHJpZ2dlcjtlJiZlLmZvcmNlUG9wdXBBbGlnbigpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5vdmVybGF5LG49ZS5wcmVmaXhDbHMscj1lLmlkO3JldHVybiBjLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm4rIi1pbm5lciIsaWQ6cixyb2xlOiJ0b29sdGlwIn0sImZ1bmN0aW9uIj09dHlwZW9mIHQ/dCgpOnQpfSx0fShjLmEuQ29tcG9uZW50KTtwLnByb3BUeXBlcz17cHJlZml4Q2xzOl8uYS5zdHJpbmcsb3ZlcmxheTpfLmEub25lT2ZUeXBlKFtfLmEubm9kZSxfLmEuZnVuY10pLmlzUmVxdWlyZWQsaWQ6Xy5hLnN0cmluZyx0cmlnZ2VyOl8uYS5hbnl9LHQuYT1wfSwiLi9ub2RlX21vZHVsZXMvcmMtdG9vbHRpcC9lcy9Ub29sdGlwLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxoPW4ubihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvaW5kZXguanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRvb2x0aXAvZXMvcGxhY2VtZW50cy5qcyIpLEU9bigiLi9ub2RlX21vZHVsZXMvcmMtdG9vbHRpcC9lcy9Db250ZW50LmpzIikseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO2woKSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1jKCkodGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRQb3B1cEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5hcnJvd0NvbnRlbnQsbj1lLm92ZXJsYXksbz1lLnByZWZpeENscyxzPWUuaWQ7cmV0dXJuW2YuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bysiLWFycm93IixrZXk6ImFycm93In0sdCksZi5hLmNyZWF0ZUVsZW1lbnQoRS5hLHtrZXk6ImNvbnRlbnQiLHRyaWdnZXI6ci50cmlnZ2VyLHByZWZpeENsczpvLGlkOnMsb3ZlcmxheTpufSldfSxyLnNhdmVUcmlnZ2VyPWZ1bmN0aW9uKGUpe3IudHJpZ2dlcj1lfSxvPW4sYygpKHIsbyl9cmV0dXJuIF8oKSh0LGUpLHQucHJvdG90eXBlLmdldFBvcHVwRG9tTm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIuZ2V0UG9wdXBEb21Ob2RlKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm92ZXJsYXlDbGFzc05hbWUsbj1lLnRyaWdnZXIscj1lLm1vdXNlRW50ZXJEZWxheSxzPWUubW91c2VMZWF2ZURlbGF5LGE9ZS5vdmVybGF5U3R5bGUsbD1lLnByZWZpeENscyx1PWUuY2hpbGRyZW4sYz1lLm9uVmlzaWJsZUNoYW5nZSxkPWUuYWZ0ZXJWaXNpYmxlQ2hhbmdlLF89ZS50cmFuc2l0aW9uTmFtZSxwPWUuYW5pbWF0aW9uLG09ZS5wbGFjZW1lbnQsaD1lLmFsaWduLEU9ZS5kZXN0cm95VG9vbHRpcE9uSGlkZSx5PWUuZGVmYXVsdFZpc2libGUsdj1lLmdldFRvb2x0aXBDb250YWluZXIsVD1pKCkoZSxbIm92ZXJsYXlDbGFzc05hbWUiLCJ0cmlnZ2VyIiwibW91c2VFbnRlckRlbGF5IiwibW91c2VMZWF2ZURlbGF5Iiwib3ZlcmxheVN0eWxlIiwicHJlZml4Q2xzIiwiY2hpbGRyZW4iLCJvblZpc2libGVDaGFuZ2UiLCJhZnRlclZpc2libGVDaGFuZ2UiLCJ0cmFuc2l0aW9uTmFtZSIsImFuaW1hdGlvbiIsInBsYWNlbWVudCIsImFsaWduIiwiZGVzdHJveVRvb2x0aXBPbkhpZGUiLCJkZWZhdWx0VmlzaWJsZSIsImdldFRvb2x0aXBDb250YWluZXIiXSksQT1vKCkoe30sVCk7cmV0dXJuInZpc2libGUiaW4gdGhpcy5wcm9wcyYmKEEucG9wdXBWaXNpYmxlPXRoaXMucHJvcHMudmlzaWJsZSksZi5hLmNyZWF0ZUVsZW1lbnQoZy5hLG8oKSh7cG9wdXBDbGFzc05hbWU6dCxyZWY6dGhpcy5zYXZlVHJpZ2dlcixwcmVmaXhDbHM6bCxwb3B1cDp0aGlzLmdldFBvcHVwRWxlbWVudCxhY3Rpb246bixidWlsdGluUGxhY2VtZW50czpiLmEscG9wdXBQbGFjZW1lbnQ6bSxwb3B1cEFsaWduOmgsZ2V0UG9wdXBDb250YWluZXI6dixvblBvcHVwVmlzaWJsZUNoYW5nZTpjLGFmdGVyUG9wdXBWaXNpYmxlQ2hhbmdlOmQscG9wdXBUcmFuc2l0aW9uTmFtZTpfLHBvcHVwQW5pbWF0aW9uOnAsZGVmYXVsdFBvcHVwVmlzaWJsZTp5LGRlc3Ryb3lQb3B1cE9uSGlkZTpFLG1vdXNlTGVhdmVEZWxheTpzLHBvcHVwU3R5bGU6YSxtb3VzZUVudGVyRGVsYXk6cn0sQSksdSl9LHR9KHAuQ29tcG9uZW50KTt5LnByb3BUeXBlcz17dHJpZ2dlcjpoLmEuYW55LGNoaWxkcmVuOmguYS5hbnksZGVmYXVsdFZpc2libGU6aC5hLmJvb2wsdmlzaWJsZTpoLmEuYm9vbCxwbGFjZW1lbnQ6aC5hLnN0cmluZyx0cmFuc2l0aW9uTmFtZTpoLmEub25lT2ZUeXBlKFtoLmEuc3RyaW5nLGguYS5vYmplY3RdKSxhbmltYXRpb246aC5hLmFueSxvblZpc2libGVDaGFuZ2U6aC5hLmZ1bmMsYWZ0ZXJWaXNpYmxlQ2hhbmdlOmguYS5mdW5jLG92ZXJsYXk6aC5hLm9uZU9mVHlwZShbaC5hLm5vZGUsaC5hLmZ1bmNdKS5pc1JlcXVpcmVkLG92ZXJsYXlTdHlsZTpoLmEub2JqZWN0LG92ZXJsYXlDbGFzc05hbWU6aC5hLnN0cmluZyxwcmVmaXhDbHM6aC5hLnN0cmluZyxtb3VzZUVudGVyRGVsYXk6aC5hLm51bWJlcixtb3VzZUxlYXZlRGVsYXk6aC5hLm51bWJlcixnZXRUb29sdGlwQ29udGFpbmVyOmguYS5mdW5jLGRlc3Ryb3lUb29sdGlwT25IaWRlOmguYS5ib29sLGFsaWduOmguYS5vYmplY3QsYXJyb3dDb250ZW50OmguYS5hbnksaWQ6aC5hLnN0cmluZ30seS5kZWZhdWx0UHJvcHM9e3ByZWZpeENsczoicmMtdG9vbHRpcCIsbW91c2VFbnRlckRlbGF5OjAsZGVzdHJveVRvb2x0aXBPbkhpZGU6ITEsbW91c2VMZWF2ZURlbGF5Oi4xLGFsaWduOnt9LHBsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6WyJob3ZlciJdLGFycm93Q29udGVudDpudWxsfSx0LmE9eX0sIi4vbm9kZV9tb2R1bGVzL3JjLXRvb2x0aXAvZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmMtdG9vbHRpcC9lcy9Ub29sdGlwLmpzIik7dC5hPXIuYX0sIi4vbm9kZV9tb2R1bGVzL3JjLXRvb2x0aXAvZXMvcGxhY2VtZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPXthZGp1c3RYOjEsYWRqdXN0WToxfSxvPVswLDBdLHM9e2xlZnQ6e3BvaW50czpbImNyIiwiY2wiXSxvdmVyZmxvdzpyLG9mZnNldDpbLTQsMF0sdGFyZ2V0T2Zmc2V0Om99LHJpZ2h0Ontwb2ludHM6WyJjbCIsImNyIl0sb3ZlcmZsb3c6cixvZmZzZXQ6WzQsMF0sdGFyZ2V0T2Zmc2V0Om99LHRvcDp7cG9pbnRzOlsiYmMiLCJ0YyJdLG92ZXJmbG93OnIsb2Zmc2V0OlswLC00XSx0YXJnZXRPZmZzZXQ6b30sYm90dG9tOntwb2ludHM6WyJ0YyIsImJjIl0sb3ZlcmZsb3c6cixvZmZzZXQ6WzAsNF0sdGFyZ2V0T2Zmc2V0Om99LHRvcExlZnQ6e3BvaW50czpbImJsIiwidGwiXSxvdmVyZmxvdzpyLG9mZnNldDpbMCwtNF0sdGFyZ2V0T2Zmc2V0Om99LGxlZnRUb3A6e3BvaW50czpbInRyIiwidGwiXSxvdmVyZmxvdzpyLG9mZnNldDpbLTQsMF0sdGFyZ2V0T2Zmc2V0Om99LHRvcFJpZ2h0Ontwb2ludHM6WyJiciIsInRyIl0sb3ZlcmZsb3c6cixvZmZzZXQ6WzAsLTRdLHRhcmdldE9mZnNldDpvfSxyaWdodFRvcDp7cG9pbnRzOlsidGwiLCJ0ciJdLG92ZXJmbG93OnIsb2Zmc2V0Ols0LDBdLHRhcmdldE9mZnNldDpvfSxib3R0b21SaWdodDp7cG9pbnRzOlsidHIiLCJiciJdLG92ZXJmbG93OnIsb2Zmc2V0OlswLDRdLHRhcmdldE9mZnNldDpvfSxyaWdodEJvdHRvbTp7cG9pbnRzOlsiYmwiLCJiciJdLG92ZXJmbG93OnIsb2Zmc2V0Ols0LDBdLHRhcmdldE9mZnNldDpvfSxib3R0b21MZWZ0Ontwb2ludHM6WyJ0bCIsImJsIl0sb3ZlcmZsb3c6cixvZmZzZXQ6WzAsNF0sdGFyZ2V0T2Zmc2V0Om99LGxlZnRCb3R0b206e3BvaW50czpbImJyIiwiYmwiXSxvdmVyZmxvdzpyLG9mZnNldDpbLTQsMF0sdGFyZ2V0T2Zmc2V0Om99fX0sIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvTGF6eVJlbmRlckJveC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxvPW4ubihyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxsPW4ubihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxfPW4ubihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxmPW4ubihwKSxtPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaSgpKHRoaXMsdCksbCgpKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBjKCkodCxlKSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlkZGVuQ2xhc3NOYW1lfHxlLnZpc2libGV9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmhpZGRlbkNsYXNzTmFtZSxuPWUudmlzaWJsZSxyPW8oKShlLFsiaGlkZGVuQ2xhc3NOYW1lIiwidmlzaWJsZSJdKTtyZXR1cm4gdHx8Xy5hLkNoaWxkcmVuLmNvdW50KHIuY2hpbGRyZW4pPjE/KCFuJiZ0JiYoci5jbGFzc05hbWUrPSIgIit0KSxfLmEuY3JlYXRlRWxlbWVudCgiZGl2IixyKSk6Xy5hLkNoaWxkcmVuLm9ubHkoci5jaGlsZHJlbil9LHR9KGQuQ29tcG9uZW50KTttLnByb3BUeXBlcz17Y2hpbGRyZW46Zi5hLmFueSxjbGFzc05hbWU6Zi5hLnN0cmluZyx2aXNpYmxlOmYuYS5ib29sLGhpZGRlbkNsYXNzTmFtZTpmLmEuc3RyaW5nfSx0LmE9bX0sIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvUG9wdXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxvPW4ubihyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxsPW4ubihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxfPW4ubihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxmPW4ubihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLGg9bi5uKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmMtYWxpZ24vZXMvaW5kZXguanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JjLWFuaW1hdGUvZXMvQW5pbWF0ZS5qcyIpLEU9bigiLi9ub2RlX21vZHVsZXMvcmMtdHJpZ2dlci9lcy9Qb3B1cElubmVyLmpzIikseT1uKCIuL25vZGVfbW9kdWxlcy9yYy10cmlnZ2VyL2VzL0xhenlSZW5kZXJCb3guanMiKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvdXRpbHMuanMiKSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7aSgpKHRoaXMsdCk7dmFyIHI9bCgpKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiBBLmNhbGwociksci5zdGF0ZT17c3RyZXRjaENoZWNrZWQ6ITEsdGFyZ2V0V2lkdGg6dm9pZCAwLHRhcmdldEhlaWdodDp2b2lkIDB9LHIuc2F2ZVBvcHVwUmVmPXYuYy5iaW5kKHIsInBvcHVwSW5zdGFuY2UiKSxyLnNhdmVBbGlnblJlZj12LmMuYmluZChyLCJhbGlnbkluc3RhbmNlIikscn1yZXR1cm4gYygpKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnJvb3ROb2RlPXRoaXMuZ2V0UG9wdXBEb21Ob2RlKCksdGhpcy5zZXRTdHJldGNoU2l6ZSgpfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnNldFN0cmV0Y2hTaXplKCl9LHQucHJvdG90eXBlLmdldFBvcHVwRG9tTm9kZT1mdW5jdGlvbigpe3JldHVybiBoLmEuZmluZERPTU5vZGUodGhpcy5wb3B1cEluc3RhbmNlKX0sdC5wcm90b3R5cGUuZ2V0TWFza1RyYW5zaXRpb25OYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubWFza1RyYW5zaXRpb25OYW1lLG49ZS5tYXNrQW5pbWF0aW9uO3JldHVybiF0JiZuJiYodD1lLnByZWZpeENscysiLSIrbiksdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbk5hbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS50cmFuc2l0aW9uTmFtZTtyZXR1cm4hdCYmZS5hbmltYXRpb24mJih0PWUucHJlZml4Q2xzKyItIitlLmFuaW1hdGlvbiksdH0sdC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzLnByZWZpeENscysiICIrdGhpcy5wcm9wcy5jbGFzc05hbWUrIiAiK2V9LHQucHJvdG90eXBlLmdldFBvcHVwRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnNhdmVQb3B1cFJlZixuPXRoaXMuc3RhdGUscj1uLnN0cmV0Y2hDaGVja2VkLHM9bi50YXJnZXRIZWlnaHQsaT1uLnRhcmdldFdpZHRoLGE9dGhpcy5wcm9wcyxsPWEuYWxpZ24sdT1hLnZpc2libGUsYz1hLnByZWZpeENscyxkPWEuc3R5bGUscD1hLmdldENsYXNzTmFtZUZyb21BbGlnbixmPWEuZGVzdHJveVBvcHVwT25IaWRlLG09YS5zdHJldGNoLGg9YS5jaGlsZHJlbix5PWEub25Nb3VzZUVudGVyLHY9YS5vbk1vdXNlTGVhdmUsVD1hLm9uTW91c2VEb3duLEE9YS5vblRvdWNoU3RhcnQsQz10aGlzLmdldENsYXNzTmFtZSh0aGlzLmN1cnJlbnRBbGlnbkNsYXNzTmFtZXx8cChsKSksTz1jKyItaGlkZGVuIjt1fHwodGhpcy5jdXJyZW50QWxpZ25DbGFzc05hbWU9bnVsbCk7dmFyIFM9e307bSYmKC0xIT09bS5pbmRleE9mKCJoZWlnaHQiKT9TLmhlaWdodD1zOi0xIT09bS5pbmRleE9mKCJtaW5IZWlnaHQiKSYmKFMubWluSGVpZ2h0PXMpLC0xIT09bS5pbmRleE9mKCJ3aWR0aCIpP1Mud2lkdGg9aTotMSE9PW0uaW5kZXhPZigibWluV2lkdGgiKSYmKFMubWluV2lkdGg9aSkscnx8KFMudmlzaWJpbGl0eT0iaGlkZGVuIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5hbGlnbkluc3RhbmNlJiZlLmFsaWduSW5zdGFuY2UuZm9yY2VBbGlnbigpfSwwKSkpO3ZhciBSPW8oKSh7fSxTLGQsdGhpcy5nZXRaSW5kZXhTdHlsZSgpKSxqPXtjbGFzc05hbWU6QyxwcmVmaXhDbHM6YyxyZWY6dCxvbk1vdXNlRW50ZXI6eSxvbk1vdXNlTGVhdmU6dixvbk1vdXNlRG93bjpULG9uVG91Y2hTdGFydDpBLHN0eWxlOlJ9O3JldHVybiBmP18uYS5jcmVhdGVFbGVtZW50KGIuYSx7Y29tcG9uZW50OiIiLGV4Y2x1c2l2ZTohMCx0cmFuc2l0aW9uQXBwZWFyOiEwLHRyYW5zaXRpb25OYW1lOnRoaXMuZ2V0VHJhbnNpdGlvbk5hbWUoKX0sdT9fLmEuY3JlYXRlRWxlbWVudChnLmEse3RhcmdldDp0aGlzLmdldEFsaWduVGFyZ2V0KCksa2V5OiJwb3B1cCIscmVmOnRoaXMuc2F2ZUFsaWduUmVmLG1vbml0b3JXaW5kb3dSZXNpemU6ITAsYWxpZ246bCxvbkFsaWduOnRoaXMub25BbGlnbn0sXy5hLmNyZWF0ZUVsZW1lbnQoRS5hLG8oKSh7dmlzaWJsZTohMH0saiksaCkpOm51bGwpOl8uYS5jcmVhdGVFbGVtZW50KGIuYSx7Y29tcG9uZW50OiIiLGV4Y2x1c2l2ZTohMCx0cmFuc2l0aW9uQXBwZWFyOiEwLHRyYW5zaXRpb25OYW1lOnRoaXMuZ2V0VHJhbnNpdGlvbk5hbWUoKSxzaG93UHJvcDoieFZpc2libGUifSxfLmEuY3JlYXRlRWxlbWVudChnLmEse3RhcmdldDp0aGlzLmdldEFsaWduVGFyZ2V0KCksa2V5OiJwb3B1cCIscmVmOnRoaXMuc2F2ZUFsaWduUmVmLG1vbml0b3JXaW5kb3dSZXNpemU6ITAseFZpc2libGU6dSxjaGlsZHJlblByb3BzOnt2aXNpYmxlOiJ4VmlzaWJsZSJ9LGRpc2FibGVkOiF1LGFsaWduOmwsb25BbGlnbjp0aGlzLm9uQWxpZ259LF8uYS5jcmVhdGVFbGVtZW50KEUuYSxvKCkoe2hpZGRlbkNsYXNzTmFtZTpPfSxqKSxoKSkpfSx0LnByb3RvdHlwZS5nZXRaSW5kZXhTdHlsZT1mdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5wcm9wcztyZXR1cm4gdm9pZCAwIT09dC56SW5kZXgmJihlLnpJbmRleD10LnpJbmRleCksZX0sdC5wcm90b3R5cGUuZ2V0TWFza0VsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9dm9pZCAwO2lmKGUubWFzayl7dmFyIG49dGhpcy5nZXRNYXNrVHJhbnNpdGlvbk5hbWUoKTt0PV8uYS5jcmVhdGVFbGVtZW50KHkuYSx7c3R5bGU6dGhpcy5nZXRaSW5kZXhTdHlsZSgpLGtleToibWFzayIsY2xhc3NOYW1lOmUucHJlZml4Q2xzKyItbWFzayIsaGlkZGVuQ2xhc3NOYW1lOmUucHJlZml4Q2xzKyItbWFzay1oaWRkZW4iLHZpc2libGU6ZS52aXNpYmxlfSksbiYmKHQ9Xy5hLmNyZWF0ZUVsZW1lbnQoYi5hLHtrZXk6Im1hc2siLHNob3dQcm9wOiJ2aXNpYmxlIix0cmFuc2l0aW9uQXBwZWFyOiEwLGNvbXBvbmVudDoiIix0cmFuc2l0aW9uTmFtZTpufSx0KSl9cmV0dXJuIHR9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBfLmEuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLHRoaXMuZ2V0TWFza0VsZW1lbnQoKSx0aGlzLmdldFBvcHVwRWxlbWVudCgpKX0sdH0oZC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXt2aXNpYmxlOmYuYS5ib29sLHN0eWxlOmYuYS5vYmplY3QsZ2V0Q2xhc3NOYW1lRnJvbUFsaWduOmYuYS5mdW5jLG9uQWxpZ246Zi5hLmZ1bmMsZ2V0Um9vdERvbU5vZGU6Zi5hLmZ1bmMsYWxpZ246Zi5hLmFueSxkZXN0cm95UG9wdXBPbkhpZGU6Zi5hLmJvb2wsY2xhc3NOYW1lOmYuYS5zdHJpbmcscHJlZml4Q2xzOmYuYS5zdHJpbmcsb25Nb3VzZUVudGVyOmYuYS5mdW5jLG9uTW91c2VMZWF2ZTpmLmEuZnVuYyxvbk1vdXNlRG93bjpmLmEuZnVuYyxvblRvdWNoU3RhcnQ6Zi5hLmZ1bmMsc3RyZXRjaDpmLmEuc3RyaW5nLGNoaWxkcmVuOmYuYS5ub2RlLHBvaW50OmYuYS5zaGFwZSh7cGFnZVg6Zi5hLm51bWJlcixwYWdlWTpmLmEubnVtYmVyfSl9O3ZhciBBPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQWxpZ249ZnVuY3Rpb24odCxuKXt2YXIgcj1lLnByb3BzLG89ci5nZXRDbGFzc05hbWVGcm9tQWxpZ24obik7ZS5jdXJyZW50QWxpZ25DbGFzc05hbWUhPT1vJiYoZS5jdXJyZW50QWxpZ25DbGFzc05hbWU9byx0LmNsYXNzTmFtZT1lLmdldENsYXNzTmFtZShvKSksci5vbkFsaWduKHQsbil9LHRoaXMuc2V0U3RyZXRjaFNpemU9ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3BzLG49dC5zdHJldGNoLHI9dC5nZXRSb290RG9tTm9kZSxvPXQudmlzaWJsZSxzPWUuc3RhdGUsaT1zLnN0cmV0Y2hDaGVja2VkLGE9cy50YXJnZXRIZWlnaHQsbD1zLnRhcmdldFdpZHRoO2lmKCFufHwhbylyZXR1cm4gdm9pZChpJiZlLnNldFN0YXRlKHtzdHJldGNoQ2hlY2tlZDohMX0pKTt2YXIgdT1yKCk7aWYodSl7dmFyIGM9dS5vZmZzZXRIZWlnaHQsZD11Lm9mZnNldFdpZHRoO2E9PT1jJiZsPT09ZCYmaXx8ZS5zZXRTdGF0ZSh7c3RyZXRjaENoZWNrZWQ6ITAsdGFyZ2V0SGVpZ2h0OmMsdGFyZ2V0V2lkdGg6ZH0pfX0sdGhpcy5nZXRUYXJnZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvcHMuZ2V0Um9vdERvbU5vZGUoKX0sdGhpcy5nZXRBbGlnblRhcmdldD1mdW5jdGlvbigpe3ZhciB0PWUucHJvcHMucG9pbnQ7cmV0dXJuIHR8fGUuZ2V0VGFyZ2V0RWxlbWVudH19O3QuYT1UfSwiLi9ub2RlX21vZHVsZXMvcmMtdHJpZ2dlci9lcy9Qb3B1cElubmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxpPW4ubihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxfPW4ubihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvTGF6eVJlbmRlckJveC5qcyIpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBvKCkodGhpcyx0KSxpKCkodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIGwoKSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZTtyZXR1cm4gZS52aXNpYmxlfHwodCs9IiAiK2UuaGlkZGVuQ2xhc3NOYW1lKSxjLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnQsb25Nb3VzZUVudGVyOmUub25Nb3VzZUVudGVyLG9uTW91c2VMZWF2ZTplLm9uTW91c2VMZWF2ZSxvbk1vdXNlRG93bjplLm9uTW91c2VEb3duLG9uVG91Y2hTdGFydDplLm9uVG91Y2hTdGFydCxzdHlsZTplLnN0eWxlfSxjLmEuY3JlYXRlRWxlbWVudChwLmEse2NsYXNzTmFtZTplLnByZWZpeENscysiLWNvbnRlbnQiLHZpc2libGU6ZS52aXNpYmxlfSxlLmNoaWxkcmVuKSl9LHR9KHUuQ29tcG9uZW50KTtmLnByb3BUeXBlcz17aGlkZGVuQ2xhc3NOYW1lOl8uYS5zdHJpbmcsY2xhc3NOYW1lOl8uYS5zdHJpbmcscHJlZml4Q2xzOl8uYS5zdHJpbmcsb25Nb3VzZUVudGVyOl8uYS5mdW5jLG9uTW91c2VMZWF2ZTpfLmEuZnVuYyxvbk1vdXNlRG93bjpfLmEuZnVuYyxvblRvdWNoU3RhcnQ6Xy5hLmZ1bmMsY2hpbGRyZW46Xy5hLmFueX0sdC5hPWZ9LCIuL25vZGVfbW9kdWxlcy9yYy10cmlnZ2VyL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbygpe3JldHVybiIifWZ1bmN0aW9uIHMoKXtyZXR1cm4gd2luZG93LmRvY3VtZW50fXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1uLm4oaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PW4ubihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZD1uLm4oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxwPW4ubihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbT1uLm4oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZz1uLm4oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxFPShuLm4oYiksbigiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9Eb20vY29udGFpbnMuanMiKSkseT1uKCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0RvbS9hZGRFdmVudExpc3RlbmVyLmpzIiksdj1uKCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0NvbnRhaW5lclJlbmRlci5qcyIpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9Qb3J0YWwuanMiKSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiKSxDPW4ubihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvdXRpbHMuanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvZXMvUG9wdXAuanMiKSxSPVsib25DbGljayIsIm9uTW91c2VEb3duIiwib25Ub3VjaFN0YXJ0Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uQ29udGV4dE1lbnUiXSxqPSEhYi5jcmVhdGVQb3J0YWwseD17cmNUcmlnZ2VyOmcuYS5zaGFwZSh7b25Qb3B1cE1vdXNlRG93bjpnLmEuZnVuY30pfSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dSgpKHRoaXMsdCk7dmFyIHI9ZCgpKHRoaXMsZS5jYWxsKHRoaXMsbikpO0QuY2FsbChyKTt2YXIgbz12b2lkIDA7cmV0dXJuIG89InBvcHVwVmlzaWJsZSJpbiBuPyEhbi5wb3B1cFZpc2libGU6ISFuLmRlZmF1bHRQb3B1cFZpc2libGUsci5wcmV2UG9wdXBWaXNpYmxlPW8sci5zdGF0ZT17cG9wdXBWaXNpYmxlOm99LHJ9cmV0dXJuIHAoKSh0LGUpLHQucHJvdG90eXBlLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybntyY1RyaWdnZXI6e29uUG9wdXBNb3VzZURvd246dGhpcy5vblBvcHVwTW91c2VEb3dufX19LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7Ui5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbImZpcmUiK3RdPWZ1bmN0aW9uKG4pe2UuZmlyZUV2ZW50cyh0LG4pfX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuY29tcG9uZW50RGlkVXBkYXRlKHt9LHtwb3B1cFZpc2libGU6dGhpcy5zdGF0ZS5wb3B1cFZpc2libGV9KX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt2YXIgdD1lLnBvcHVwVmlzaWJsZTt2b2lkIDAhPT10JiZ0aGlzLnNldFN0YXRlKHtwb3B1cFZpc2libGU6dH0pfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnByb3BzLHI9dGhpcy5zdGF0ZSxvPWZ1bmN0aW9uKCl7dC5wb3B1cFZpc2libGUhPT1yLnBvcHVwVmlzaWJsZSYmbi5hZnRlclBvcHVwVmlzaWJsZUNoYW5nZShyLnBvcHVwVmlzaWJsZSl9O2lmKGp8fHRoaXMucmVuZGVyQ29tcG9uZW50KG51bGwsbyksdGhpcy5wcmV2UG9wdXBWaXNpYmxlPXQucG9wdXBWaXNpYmxlLHIucG9wdXBWaXNpYmxlKXt2YXIgcz12b2lkIDA7cmV0dXJuIHRoaXMuY2xpY2tPdXRzaWRlSGFuZGxlcnx8IXRoaXMuaXNDbGlja1RvSGlkZSgpJiYhdGhpcy5pc0NvbnRleHRNZW51VG9TaG93KCl8fChzPW4uZ2V0RG9jdW1lbnQoKSx0aGlzLmNsaWNrT3V0c2lkZUhhbmRsZXI9T2JqZWN0KHkuYSkocywibW91c2Vkb3duIix0aGlzLm9uRG9jdW1lbnRDbGljaykpLHRoaXMudG91Y2hPdXRzaWRlSGFuZGxlcnx8KHM9c3x8bi5nZXREb2N1bWVudCgpLHRoaXMudG91Y2hPdXRzaWRlSGFuZGxlcj1PYmplY3QoeS5hKShzLCJ0b3VjaHN0YXJ0Iix0aGlzLm9uRG9jdW1lbnRDbGljaykpLCF0aGlzLmNvbnRleHRNZW51T3V0c2lkZUhhbmRsZXIxJiZ0aGlzLmlzQ29udGV4dE1lbnVUb1Nob3coKSYmKHM9c3x8bi5nZXREb2N1bWVudCgpLHRoaXMuY29udGV4dE1lbnVPdXRzaWRlSGFuZGxlcjE9T2JqZWN0KHkuYSkocywic2Nyb2xsIix0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSkpLHZvaWQoIXRoaXMuY29udGV4dE1lbnVPdXRzaWRlSGFuZGxlcjImJnRoaXMuaXNDb250ZXh0TWVudVRvU2hvdygpJiYodGhpcy5jb250ZXh0TWVudU91dHNpZGVIYW5kbGVyMj1PYmplY3QoeS5hKSh3aW5kb3csImJsdXIiLHRoaXMub25Db250ZXh0TWVudUNsb3NlKSkpfXRoaXMuY2xlYXJPdXRzaWRlSGFuZGxlcigpfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuY2xlYXJEZWxheVRpbWVyKCksdGhpcy5jbGVhck91dHNpZGVIYW5kbGVyKCksY2xlYXJUaW1lb3V0KHRoaXMubW91c2VEb3duVGltZW91dCl9LHQucHJvdG90eXBlLmdldFBvcHVwRG9tTm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnQmJnRoaXMuX2NvbXBvbmVudC5nZXRQb3B1cERvbU5vZGU/dGhpcy5fY29tcG9uZW50LmdldFBvcHVwRG9tTm9kZSgpOm51bGx9LHQucHJvdG90eXBlLmdldFBvcHVwQWxpZ249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wb3B1cFBsYWNlbWVudCxuPWUucG9wdXBBbGlnbixyPWUuYnVpbHRpblBsYWNlbWVudHM7cmV0dXJuIHQmJnI/T2JqZWN0KE8uYSkocix0LG4pOm59LHQucHJvdG90eXBlLnNldFBvcHVwVmlzaWJsZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMuYWxpZ25Qb2ludDt0aGlzLmNsZWFyRGVsYXlUaW1lcigpLHRoaXMuc3RhdGUucG9wdXBWaXNpYmxlIT09ZSYmKCJwb3B1cFZpc2libGUiaW4gdGhpcy5wcm9wc3x8dGhpcy5zZXRTdGF0ZSh7cG9wdXBWaXNpYmxlOmV9KSx0aGlzLnByb3BzLm9uUG9wdXBWaXNpYmxlQ2hhbmdlKGUpKSxuJiZ0JiZ0aGlzLnNldFBvaW50KHQpfSx0LnByb3RvdHlwZS5kZWxheVNldFBvcHVwVmlzaWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPTFlMyp0O2lmKHRoaXMuY2xlYXJEZWxheVRpbWVyKCksbyl7dmFyIHM9bj97cGFnZVg6bi5wYWdlWCxwYWdlWTpuLnBhZ2VZfTpudWxsO3RoaXMuZGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5zZXRQb3B1cFZpc2libGUoZSxzKSxyLmNsZWFyRGVsYXlUaW1lcigpfSxvKX1lbHNlIHRoaXMuc2V0UG9wdXBWaXNpYmxlKGUsbil9LHQucHJvdG90eXBlLmNsZWFyRGVsYXlUaW1lcj1mdW5jdGlvbigpe3RoaXMuZGVsYXlUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZXIpLHRoaXMuZGVsYXlUaW1lcj1udWxsKX0sdC5wcm90b3R5cGUuY2xlYXJPdXRzaWRlSGFuZGxlcj1mdW5jdGlvbigpe3RoaXMuY2xpY2tPdXRzaWRlSGFuZGxlciYmKHRoaXMuY2xpY2tPdXRzaWRlSGFuZGxlci5yZW1vdmUoKSx0aGlzLmNsaWNrT3V0c2lkZUhhbmRsZXI9bnVsbCksdGhpcy5jb250ZXh0TWVudU91dHNpZGVIYW5kbGVyMSYmKHRoaXMuY29udGV4dE1lbnVPdXRzaWRlSGFuZGxlcjEucmVtb3ZlKCksdGhpcy5jb250ZXh0TWVudU91dHNpZGVIYW5kbGVyMT1udWxsKSx0aGlzLmNvbnRleHRNZW51T3V0c2lkZUhhbmRsZXIyJiYodGhpcy5jb250ZXh0TWVudU91dHNpZGVIYW5kbGVyMi5yZW1vdmUoKSx0aGlzLmNvbnRleHRNZW51T3V0c2lkZUhhbmRsZXIyPW51bGwpLHRoaXMudG91Y2hPdXRzaWRlSGFuZGxlciYmKHRoaXMudG91Y2hPdXRzaWRlSGFuZGxlci5yZW1vdmUoKSx0aGlzLnRvdWNoT3V0c2lkZUhhbmRsZXI9bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVR3b0NoYWlucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzLG49dGhpcy5wcm9wcztyZXR1cm4gdFtlXSYmbltlXT90aGlzWyJmaXJlIitlXTp0W2VdfHxuW2VdfSx0LnByb3RvdHlwZS5pc0NsaWNrVG9TaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aW9uLG49ZS5zaG93QWN0aW9uO3JldHVybi0xIT09dC5pbmRleE9mKCJjbGljayIpfHwtMSE9PW4uaW5kZXhPZigiY2xpY2siKX0sdC5wcm90b3R5cGUuaXNDb250ZXh0TWVudVRvU2hvdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGlvbixuPWUuc2hvd0FjdGlvbjtyZXR1cm4tMSE9PXQuaW5kZXhPZigiY29udGV4dE1lbnUiKXx8LTEhPT1uLmluZGV4T2YoImNvbnRleHRNZW51Iil9LHQucHJvdG90eXBlLmlzQ2xpY2tUb0hpZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY3Rpb24sbj1lLmhpZGVBY3Rpb247cmV0dXJuLTEhPT10LmluZGV4T2YoImNsaWNrIil8fC0xIT09bi5pbmRleE9mKCJjbGljayIpfSx0LnByb3RvdHlwZS5pc01vdXNlRW50ZXJUb1Nob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY3Rpb24sbj1lLnNob3dBY3Rpb247cmV0dXJuLTEhPT10LmluZGV4T2YoImhvdmVyIil8fC0xIT09bi5pbmRleE9mKCJtb3VzZUVudGVyIil9LHQucHJvdG90eXBlLmlzTW91c2VMZWF2ZVRvSGlkZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGlvbixuPWUuaGlkZUFjdGlvbjtyZXR1cm4tMSE9PXQuaW5kZXhPZigiaG92ZXIiKXx8LTEhPT1uLmluZGV4T2YoIm1vdXNlTGVhdmUiKX0sdC5wcm90b3R5cGUuaXNGb2N1c1RvU2hvdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGlvbixuPWUuc2hvd0FjdGlvbjtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZm9jdXMiKXx8LTEhPT1uLmluZGV4T2YoImZvY3VzIil9LHQucHJvdG90eXBlLmlzQmx1clRvSGlkZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGlvbixuPWUuaGlkZUFjdGlvbjtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZm9jdXMiKXx8LTEhPT1uLmluZGV4T2YoImJsdXIiKX0sdC5wcm90b3R5cGUuZm9yY2VQb3B1cEFsaWduPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZS5wb3B1cFZpc2libGUmJnRoaXMuX2NvbXBvbmVudCYmdGhpcy5fY29tcG9uZW50LmFsaWduSW5zdGFuY2UmJnRoaXMuX2NvbXBvbmVudC5hbGlnbkluc3RhbmNlLmZvcmNlQWxpZ24oKX0sdC5wcm90b3R5cGUuZmlyZUV2ZW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHNbZV07biYmbih0KTt2YXIgcj10aGlzLnByb3BzW2VdO3ImJnIodCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5zZXRQb3B1cFZpc2libGUoITEpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5zdGF0ZS5wb3B1cFZpc2libGUsbj10aGlzLnByb3BzLHI9bi5jaGlsZHJlbixvPW4uZm9yY2VSZW5kZXIscz1uLmFsaWduUG9pbnQsaT1uLmNsYXNzTmFtZSxhPW0uYS5DaGlsZHJlbi5vbmx5KHIpLGw9e2tleToidHJpZ2dlciJ9O3RoaXMuaXNDb250ZXh0TWVudVRvU2hvdygpP2wub25Db250ZXh0TWVudT10aGlzLm9uQ29udGV4dE1lbnU6bC5vbkNvbnRleHRNZW51PXRoaXMuY3JlYXRlVHdvQ2hhaW5zKCJvbkNvbnRleHRNZW51IiksdGhpcy5pc0NsaWNrVG9IaWRlKCl8fHRoaXMuaXNDbGlja1RvU2hvdygpPyhsLm9uQ2xpY2s9dGhpcy5vbkNsaWNrLGwub25Nb3VzZURvd249dGhpcy5vbk1vdXNlRG93bixsLm9uVG91Y2hTdGFydD10aGlzLm9uVG91Y2hTdGFydCk6KGwub25DbGljaz10aGlzLmNyZWF0ZVR3b0NoYWlucygib25DbGljayIpLGwub25Nb3VzZURvd249dGhpcy5jcmVhdGVUd29DaGFpbnMoIm9uTW91c2VEb3duIiksbC5vblRvdWNoU3RhcnQ9dGhpcy5jcmVhdGVUd29DaGFpbnMoIm9uVG91Y2hTdGFydCIpKSx0aGlzLmlzTW91c2VFbnRlclRvU2hvdygpPyhsLm9uTW91c2VFbnRlcj10aGlzLm9uTW91c2VFbnRlcixzJiYobC5vbk1vdXNlTW92ZT10aGlzLm9uTW91c2VNb3ZlKSk6bC5vbk1vdXNlRW50ZXI9dGhpcy5jcmVhdGVUd29DaGFpbnMoIm9uTW91c2VFbnRlciIpLHRoaXMuaXNNb3VzZUxlYXZlVG9IaWRlKCk/bC5vbk1vdXNlTGVhdmU9dGhpcy5vbk1vdXNlTGVhdmU6bC5vbk1vdXNlTGVhdmU9dGhpcy5jcmVhdGVUd29DaGFpbnMoIm9uTW91c2VMZWF2ZSIpLHRoaXMuaXNGb2N1c1RvU2hvdygpfHx0aGlzLmlzQmx1clRvSGlkZSgpPyhsLm9uRm9jdXM9dGhpcy5vbkZvY3VzLGwub25CbHVyPXRoaXMub25CbHVyKToobC5vbkZvY3VzPXRoaXMuY3JlYXRlVHdvQ2hhaW5zKCJvbkZvY3VzIiksbC5vbkJsdXI9dGhpcy5jcmVhdGVUd29DaGFpbnMoIm9uQmx1ciIpKTt2YXIgdT1DKCkoYSYmYS5wcm9wcyYmYS5wcm9wcy5jbGFzc05hbWUsaSk7dSYmKGwuY2xhc3NOYW1lPXUpO3ZhciBjPW0uYS5jbG9uZUVsZW1lbnQoYSxsKTtpZighailyZXR1cm4gbS5hLmNyZWF0ZUVsZW1lbnQodi5hLHtwYXJlbnQ6dGhpcyx2aXNpYmxlOnQsYXV0b01vdW50OiExLGZvcmNlUmVuZGVyOm8sZ2V0Q29tcG9uZW50OnRoaXMuZ2V0Q29tcG9uZW50LGdldENvbnRhaW5lcjp0aGlzLmdldENvbnRhaW5lcn0sZnVuY3Rpb24odCl7dmFyIG49dC5yZW5kZXJDb21wb25lbnQ7cmV0dXJuIGUucmVuZGVyQ29tcG9uZW50PW4sY30pO3ZhciBkPXZvaWQgMDtyZXR1cm4odHx8dGhpcy5fY29tcG9uZW50fHxvKSYmKGQ9bS5hLmNyZWF0ZUVsZW1lbnQoVC5hLHtrZXk6InBvcnRhbCIsZ2V0Q29udGFpbmVyOnRoaXMuZ2V0Q29udGFpbmVyLGRpZFVwZGF0ZTp0aGlzLmhhbmRsZVBvcnRhbFVwZGF0ZX0sdGhpcy5nZXRDb21wb25lbnQoKSkpLFtjLGRdfSx0fShtLmEuQ29tcG9uZW50KTtMLnByb3BUeXBlcz17Y2hpbGRyZW46Zy5hLmFueSxhY3Rpb246Zy5hLm9uZU9mVHlwZShbZy5hLnN0cmluZyxnLmEuYXJyYXlPZihnLmEuc3RyaW5nKV0pLHNob3dBY3Rpb246Zy5hLmFueSxoaWRlQWN0aW9uOmcuYS5hbnksZ2V0UG9wdXBDbGFzc05hbWVGcm9tQWxpZ246Zy5hLmFueSxvblBvcHVwVmlzaWJsZUNoYW5nZTpnLmEuZnVuYyxhZnRlclBvcHVwVmlzaWJsZUNoYW5nZTpnLmEuZnVuYyxwb3B1cDpnLmEub25lT2ZUeXBlKFtnLmEubm9kZSxnLmEuZnVuY10pLmlzUmVxdWlyZWQscG9wdXBTdHlsZTpnLmEub2JqZWN0LHByZWZpeENsczpnLmEuc3RyaW5nLHBvcHVwQ2xhc3NOYW1lOmcuYS5zdHJpbmcsY2xhc3NOYW1lOmcuYS5zdHJpbmcscG9wdXBQbGFjZW1lbnQ6Zy5hLnN0cmluZyxidWlsdGluUGxhY2VtZW50czpnLmEub2JqZWN0LHBvcHVwVHJhbnNpdGlvbk5hbWU6Zy5hLm9uZU9mVHlwZShbZy5hLnN0cmluZyxnLmEub2JqZWN0XSkscG9wdXBBbmltYXRpb246Zy5hLmFueSxtb3VzZUVudGVyRGVsYXk6Zy5hLm51bWJlcixtb3VzZUxlYXZlRGVsYXk6Zy5hLm51bWJlcix6SW5kZXg6Zy5hLm51bWJlcixmb2N1c0RlbGF5OmcuYS5udW1iZXIsYmx1ckRlbGF5OmcuYS5udW1iZXIsZ2V0UG9wdXBDb250YWluZXI6Zy5hLmZ1bmMsZ2V0RG9jdW1lbnQ6Zy5hLmZ1bmMsZm9yY2VSZW5kZXI6Zy5hLmJvb2wsZGVzdHJveVBvcHVwT25IaWRlOmcuYS5ib29sLG1hc2s6Zy5hLmJvb2wsbWFza0Nsb3NhYmxlOmcuYS5ib29sLG9uUG9wdXBBbGlnbjpnLmEuZnVuYyxwb3B1cEFsaWduOmcuYS5vYmplY3QscG9wdXBWaXNpYmxlOmcuYS5ib29sLGRlZmF1bHRQb3B1cFZpc2libGU6Zy5hLmJvb2wsbWFza1RyYW5zaXRpb25OYW1lOmcuYS5vbmVPZlR5cGUoW2cuYS5zdHJpbmcsZy5hLm9iamVjdF0pLG1hc2tBbmltYXRpb246Zy5hLnN0cmluZyxzdHJldGNoOmcuYS5zdHJpbmcsYWxpZ25Qb2ludDpnLmEuYm9vbH0sTC5jb250ZXh0VHlwZXM9eCxMLmNoaWxkQ29udGV4dFR5cGVzPXgsTC5kZWZhdWx0UHJvcHM9e3ByZWZpeENsczoicmMtdHJpZ2dlci1wb3B1cCIsZ2V0UG9wdXBDbGFzc05hbWVGcm9tQWxpZ246byxnZXREb2N1bWVudDpzLG9uUG9wdXBWaXNpYmxlQ2hhbmdlOnIsYWZ0ZXJQb3B1cFZpc2libGVDaGFuZ2U6cixvblBvcHVwQWxpZ246cixwb3B1cENsYXNzTmFtZToiIixtb3VzZUVudGVyRGVsYXk6MCxtb3VzZUxlYXZlRGVsYXk6LjEsZm9jdXNEZWxheTowLGJsdXJEZWxheTouMTUscG9wdXBTdHlsZTp7fSxkZXN0cm95UG9wdXBPbkhpZGU6ITEscG9wdXBBbGlnbjp7fSxkZWZhdWx0UG9wdXBWaXNpYmxlOiExLG1hc2s6ITEsbWFza0Nsb3NhYmxlOiEwLGFjdGlvbjpbXSxzaG93QWN0aW9uOltdLGhpZGVBY3Rpb246W119O3ZhciBEPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uTW91c2VFbnRlcj1mdW5jdGlvbih0KXt2YXIgbj1lLnByb3BzLm1vdXNlRW50ZXJEZWxheTtlLmZpcmVFdmVudHMoIm9uTW91c2VFbnRlciIsdCksZS5kZWxheVNldFBvcHVwVmlzaWJsZSghMCxuLG4/bnVsbDp0KX0sdGhpcy5vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXtlLmZpcmVFdmVudHMoIm9uTW91c2VNb3ZlIix0KSxlLnNldFBvaW50KHQpfSx0aGlzLm9uTW91c2VMZWF2ZT1mdW5jdGlvbih0KXtlLmZpcmVFdmVudHMoIm9uTW91c2VMZWF2ZSIsdCksZS5kZWxheVNldFBvcHVwVmlzaWJsZSghMSxlLnByb3BzLm1vdXNlTGVhdmVEZWxheSl9LHRoaXMub25Qb3B1cE1vdXNlRW50ZXI9ZnVuY3Rpb24oKXtlLmNsZWFyRGVsYXlUaW1lcigpfSx0aGlzLm9uUG9wdXBNb3VzZUxlYXZlPWZ1bmN0aW9uKHQpe3QucmVsYXRlZFRhcmdldCYmIXQucmVsYXRlZFRhcmdldC5zZXRUaW1lb3V0JiZlLl9jb21wb25lbnQmJmUuX2NvbXBvbmVudC5nZXRQb3B1cERvbU5vZGUmJk9iamVjdChFLmEpKGUuX2NvbXBvbmVudC5nZXRQb3B1cERvbU5vZGUoKSx0LnJlbGF0ZWRUYXJnZXQpfHxlLmRlbGF5U2V0UG9wdXBWaXNpYmxlKCExLGUucHJvcHMubW91c2VMZWF2ZURlbGF5KX0sdGhpcy5vbkZvY3VzPWZ1bmN0aW9uKHQpe2UuZmlyZUV2ZW50cygib25Gb2N1cyIsdCksZS5jbGVhckRlbGF5VGltZXIoKSxlLmlzRm9jdXNUb1Nob3coKSYmKGUuZm9jdXNUaW1lPURhdGUubm93KCksZS5kZWxheVNldFBvcHVwVmlzaWJsZSghMCxlLnByb3BzLmZvY3VzRGVsYXkpKX0sdGhpcy5vbk1vdXNlRG93bj1mdW5jdGlvbih0KXtlLmZpcmVFdmVudHMoIm9uTW91c2VEb3duIix0KSxlLnByZUNsaWNrVGltZT1EYXRlLm5vdygpfSx0aGlzLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXtlLmZpcmVFdmVudHMoIm9uVG91Y2hTdGFydCIsdCksZS5wcmVUb3VjaFRpbWU9RGF0ZS5ub3coKX0sdGhpcy5vbkJsdXI9ZnVuY3Rpb24odCl7ZS5maXJlRXZlbnRzKCJvbkJsdXIiLHQpLGUuY2xlYXJEZWxheVRpbWVyKCksZS5pc0JsdXJUb0hpZGUoKSYmZS5kZWxheVNldFBvcHVwVmlzaWJsZSghMSxlLnByb3BzLmJsdXJEZWxheSl9LHRoaXMub25Db250ZXh0TWVudT1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS5maXJlRXZlbnRzKCJvbkNvbnRleHRNZW51Iix0KSxlLnNldFBvcHVwVmlzaWJsZSghMCx0KX0sdGhpcy5vbkNvbnRleHRNZW51Q2xvc2U9ZnVuY3Rpb24oKXtlLmlzQ29udGV4dE1lbnVUb1Nob3coKSYmZS5jbG9zZSgpfSx0aGlzLm9uQ2xpY2s9ZnVuY3Rpb24odCl7aWYoZS5maXJlRXZlbnRzKCJvbkNsaWNrIix0KSxlLmZvY3VzVGltZSl7dmFyIG49dm9pZCAwO2lmKGUucHJlQ2xpY2tUaW1lJiZlLnByZVRvdWNoVGltZT9uPU1hdGgubWluKGUucHJlQ2xpY2tUaW1lLGUucHJlVG91Y2hUaW1lKTplLnByZUNsaWNrVGltZT9uPWUucHJlQ2xpY2tUaW1lOmUucHJlVG91Y2hUaW1lJiYobj1lLnByZVRvdWNoVGltZSksTWF0aC5hYnMobi1lLmZvY3VzVGltZSk8MjApcmV0dXJuO2UuZm9jdXNUaW1lPTB9ZS5wcmVDbGlja1RpbWU9MCxlLnByZVRvdWNoVGltZT0wLHQmJnQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKTt2YXIgcj0hZS5zdGF0ZS5wb3B1cFZpc2libGU7KGUuaXNDbGlja1RvSGlkZSgpJiYhcnx8ciYmZS5pc0NsaWNrVG9TaG93KCkpJiZlLnNldFBvcHVwVmlzaWJsZSghZS5zdGF0ZS5wb3B1cFZpc2libGUsdCl9LHRoaXMub25Qb3B1cE1vdXNlRG93bj1mdW5jdGlvbigpe3ZhciB0PWUuY29udGV4dC5yY1RyaWdnZXIsbj12b2lkIDA9PT10P3t9OnQ7ZS5oYXNQb3B1cE1vdXNlRG93bj0hMCxjbGVhclRpbWVvdXQoZS5tb3VzZURvd25UaW1lb3V0KSxlLm1vdXNlRG93blRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuaGFzUG9wdXBNb3VzZURvd249ITF9LDApLG4ub25Qb3B1cE1vdXNlRG93biYmbi5vblBvcHVwTW91c2VEb3duLmFwcGx5KG4sYXJndW1lbnRzKX0sdGhpcy5vbkRvY3VtZW50Q2xpY2s9ZnVuY3Rpb24odCl7aWYoIWUucHJvcHMubWFza3x8ZS5wcm9wcy5tYXNrQ2xvc2FibGUpe3ZhciBuPXQudGFyZ2V0LHI9T2JqZWN0KGIuZmluZERPTU5vZGUpKGUpO09iamVjdChFLmEpKHIsbil8fGUuaGFzUG9wdXBNb3VzZURvd258fGUuY2xvc2UoKX19LHRoaXMuZ2V0Um9vdERvbU5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGIuZmluZERPTU5vZGUpKGUpfSx0aGlzLmdldFBvcHVwQ2xhc3NOYW1lRnJvbUFsaWduPWZ1bmN0aW9uKHQpe3ZhciBuPVtdLHI9ZS5wcm9wcyxvPXIucG9wdXBQbGFjZW1lbnQscz1yLmJ1aWx0aW5QbGFjZW1lbnRzLGk9ci5wcmVmaXhDbHMsYT1yLmFsaWduUG9pbnQsbD1yLmdldFBvcHVwQ2xhc3NOYW1lRnJvbUFsaWduO3JldHVybiBvJiZzJiZuLnB1c2goT2JqZWN0KE8uYikocyxpLHQsYSkpLGwmJm4ucHVzaChsKHQpKSxuLmpvaW4oIiAiKX0sdGhpcy5nZXRDb21wb25lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3BzLG49dC5wcmVmaXhDbHMscj10LmRlc3Ryb3lQb3B1cE9uSGlkZSxvPXQucG9wdXBDbGFzc05hbWUscz10LmFjdGlvbixpPXQub25Qb3B1cEFsaWduLGw9dC5wb3B1cEFuaW1hdGlvbix1PXQucG9wdXBUcmFuc2l0aW9uTmFtZSxjPXQucG9wdXBTdHlsZSxkPXQubWFzayxfPXQubWFza0FuaW1hdGlvbixwPXQubWFza1RyYW5zaXRpb25OYW1lLGY9dC56SW5kZXgsaD10LnBvcHVwLGc9dC5zdHJldGNoLGI9dC5hbGlnblBvaW50LEU9ZS5zdGF0ZSx5PUUucG9wdXBWaXNpYmxlLHY9RS5wb2ludCxUPWUuZ2V0UG9wdXBBbGlnbigpLEE9e307cmV0dXJuIGUuaXNNb3VzZUVudGVyVG9TaG93KCkmJihBLm9uTW91c2VFbnRlcj1lLm9uUG9wdXBNb3VzZUVudGVyKSxlLmlzTW91c2VMZWF2ZVRvSGlkZSgpJiYoQS5vbk1vdXNlTGVhdmU9ZS5vblBvcHVwTW91c2VMZWF2ZSksQS5vbk1vdXNlRG93bj1lLm9uUG9wdXBNb3VzZURvd24sQS5vblRvdWNoU3RhcnQ9ZS5vblBvcHVwTW91c2VEb3duLG0uYS5jcmVhdGVFbGVtZW50KFMuYSxhKCkoe3ByZWZpeENsczpuLGRlc3Ryb3lQb3B1cE9uSGlkZTpyLHZpc2libGU6eSxwb2ludDpiJiZ2LGNsYXNzTmFtZTpvLGFjdGlvbjpzLGFsaWduOlQsb25BbGlnbjppLGFuaW1hdGlvbjpsLGdldENsYXNzTmFtZUZyb21BbGlnbjplLmdldFBvcHVwQ2xhc3NOYW1lRnJvbUFsaWdufSxBLHtzdHJldGNoOmcsZ2V0Um9vdERvbU5vZGU6ZS5nZXRSb290RG9tTm9kZSxzdHlsZTpjLG1hc2s6ZCx6SW5kZXg6Zix0cmFuc2l0aW9uTmFtZTp1LG1hc2tBbmltYXRpb246XyxtYXNrVHJhbnNpdGlvbk5hbWU6cCxyZWY6ZS5zYXZlUG9wdXB9KSwiZnVuY3Rpb24iPT10eXBlb2YgaD9oKCk6aCl9LHRoaXMuZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wcm9wcyxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbi5zdHlsZS50b3A9IjAiLG4uc3R5bGUubGVmdD0iMCIsbi5zdHlsZS53aWR0aD0iMTAwJSIsKHQuZ2V0UG9wdXBDb250YWluZXI/dC5nZXRQb3B1cENvbnRhaW5lcihPYmplY3QoYi5maW5kRE9NTm9kZSkoZSkpOnQuZ2V0RG9jdW1lbnQoKS5ib2R5KS5hcHBlbmRDaGlsZChuKSxufSx0aGlzLnNldFBvaW50PWZ1bmN0aW9uKHQpe2UucHJvcHMuYWxpZ25Qb2ludCYmdCYmZS5zZXRTdGF0ZSh7cG9pbnQ6e3BhZ2VYOnQucGFnZVgscGFnZVk6dC5wYWdlWX19KX0sdGhpcy5oYW5kbGVQb3J0YWxVcGRhdGU9ZnVuY3Rpb24oKXtlLnByZXZQb3B1cFZpc2libGUhPT1lLnN0YXRlLnBvcHVwVmlzaWJsZSYmZS5wcm9wcy5hZnRlclBvcHVwVmlzaWJsZUNoYW5nZShlLnN0YXRlLnBvcHVwVmlzaWJsZSl9LHRoaXMuc2F2ZVBvcHVwPWZ1bmN0aW9uKHQpe2UuX2NvbXBvbmVudD10fX07dC5hPUx9LCIuL25vZGVfbW9kdWxlcy9yYy10cmlnZ2VyL2VzL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBuP2VbMF09PT10WzBdOmVbMF09PT10WzBdJiZlWzFdPT09dFsxXX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj1lW3RdfHx7fTtyZXR1cm4gbCgpKHt9LHIsbil9ZnVuY3Rpb24gcyhlLHQsbixvKXt2YXIgcz1uLnBvaW50cztmb3IodmFyIGkgaW4gZSlpZihlLmhhc093blByb3BlcnR5KGkpJiZyKGVbaV0ucG9pbnRzLHMsbykpcmV0dXJuIHQrIi1wbGFjZW1lbnQtIitpO3JldHVybiIifWZ1bmN0aW9uIGkoZSx0KXt0aGlzW2VdPXR9dC5hPW8sdC5iPXMsdC5jPWk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxsPW4ubihhKX0sIi4vbm9kZV9tb2R1bGVzL3JjLXRyaWdnZXIvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvOy8qIQogIENvcHlyaWdodCAoYykgMjAxNyBKZWQgV2F0c29uLgogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcwoqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2lmKHIpe3ZhciBvPXR5cGVvZiByO2lmKCJzdHJpbmciPT09b3x8Im51bWJlciI9PT1vKWUucHVzaChyKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoKXt2YXIgaT1uLmFwcGx5KG51bGwscik7aSYmZS5wdXNoKGkpfWVsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgYSBpbiByKXMuY2FsbChyLGEpJiZyW2FdJiZlLnB1c2goYSl9fXJldHVybiBlLmpvaW4oIiAiKX12YXIgcz17fS5oYXNPd25Qcm9wZXJ0eTt2b2lkIDAhPT1lJiZlLmV4cG9ydHM/KG4uZGVmYXVsdD1uLGUuZXhwb3J0cz1uKToocj1bXSx2b2lkIDAhPT0obz1mdW5jdGlvbigpe3JldHVybiBufS5hcHBseSh0LHIpKSYmKGUuZXhwb3J0cz1vKSl9KCl9LCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0NvbnRhaW5lclJlbmRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxvPW4ubihyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGk9bi5uKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxsPW4ubihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxfPW4ubihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLGY9bi5uKHApLG09bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGg9bi5uKG0pLGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixzO28oKSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9QXJyYXkoaSksdT0wO3U8aTt1KyspYVt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj1sKCkodGhpcywoZT10Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChhKSkpLHIucmVtb3ZlQ29udGFpbmVyPWZ1bmN0aW9uKCl7ci5jb250YWluZXImJihmLmEudW5tb3VudENvbXBvbmVudEF0Tm9kZShyLmNvbnRhaW5lciksci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyLmNvbnRhaW5lciksci5jb250YWluZXI9bnVsbCl9LHIucmVuZGVyQ29tcG9uZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5wcm9wcyxvPW4udmlzaWJsZSxzPW4uZ2V0Q29tcG9uZW50LGk9bi5mb3JjZVJlbmRlcixhPW4uZ2V0Q29udGFpbmVyLGw9bi5wYXJlbnQ7KG98fGwuX2NvbXBvbmVudHx8aSkmJihyLmNvbnRhaW5lcnx8KHIuY29udGFpbmVyPWEoKSksZi5hLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKGwscyhlKSxyLmNvbnRhaW5lcixmdW5jdGlvbigpe3QmJnQuY2FsbCh0aGlzKX0pKX0scz1uLGwoKShyLHMpfXJldHVybiBjKCkodCxlKSxpKCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hdXRvTW91bnQmJnRoaXMucmVuZGVyQ29tcG9uZW50KCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hdXRvTW91bnQmJnRoaXMucmVuZGVyQ29tcG9uZW50KCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmF1dG9EZXN0cm95JiZ0aGlzLnJlbW92ZUNvbnRhaW5lcigpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuKHtyZW5kZXJDb21wb25lbnQ6dGhpcy5yZW5kZXJDb21wb25lbnQscmVtb3ZlQ29udGFpbmVyOnRoaXMucmVtb3ZlQ29udGFpbmVyfSl9fV0pLHR9KF8uYS5Db21wb25lbnQpO2cucHJvcFR5cGVzPXthdXRvTW91bnQ6aC5hLmJvb2wsYXV0b0Rlc3Ryb3k6aC5hLmJvb2wsdmlzaWJsZTpoLmEuYm9vbCxmb3JjZVJlbmRlcjpoLmEuYm9vbCxwYXJlbnQ6aC5hLmFueSxnZXRDb21wb25lbnQ6aC5hLmZ1bmMuaXNSZXF1aXJlZCxnZXRDb250YWluZXI6aC5hLmZ1bmMuaXNSZXF1aXJlZCxjaGlsZHJlbjpoLmEuZnVuYy5pc1JlcXVpcmVkfSxnLmRlZmF1bHRQcm9wcz17YXV0b01vdW50OiEwLGF1dG9EZXN0cm95OiEwLGZvcmNlUmVuZGVyOiExfSx0LmE9Z30sIi4vbm9kZV9tb2R1bGVzL3JjLXV0aWwvZXMvRG9tL2FkZEV2ZW50TGlzdGVuZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgbz1hLmEudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM/ZnVuY3Rpb24oZSl7YS5hLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKG4sZSl9Om47cmV0dXJuIHMoKShlLHQsbyxyKX10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9hZGQtZG9tLWV2ZW50LWxpc3RlbmVyL2xpYi9pbmRleC5qcyIpLHM9bi5uKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksYT1uLm4oaSl9LCIuL25vZGVfbW9kdWxlcy9yYy11dGlsL2VzL0RvbS9jb250YWlucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPXQ7bjspe2lmKG49PT1lKXJldHVybiEwO249bi5wYXJlbnROb2RlfXJldHVybiExfXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmMtdXRpbC9lcy9LZXlDb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtNQUNfRU5URVI6MyxCQUNLU1BBQ0U6OCxUQUI6OSxOVU1fQ0VOVEVSOjEyLEVOVEVSOjEzLFNISUZUOjE2LENUUkw6MTcsQUxUOjE4LFBBVVNFOjE5LENBUFNfTE9DSzoyMCxFU0M6MjcsU1BBQ0U6MzIsUEFHRV9VUDozMyxQQUdFX0RPV046MzQsRU5EOjM1LEhPTUU6MzYsTEVGVDozNyxVUDozOCxSSUdIVDozOSxET1dOOjQwLFBSSU5UX1NDUkVFTjo0NCxJTlNFUlQ6NDUsREVMRVRFOjQ2LFpFUk86NDgsT05FOjQ5LFRXTzo1MCxUSFJFRTo1MSxGT1VSOjUyLEZJVkU6NTMsU0lYOjU0LFNFVkVOOjU1LEVJR0hUOjU2LE5JTkU6NTcsUVVFU1RJT05fTUFSSzo2MyxBOjY1LEI6NjYsQzo2NyxEOjY4LEU6NjksRjo3MCxHOjcxLEg6NzIsSTo3MyxKOjc0LEs6NzUsTDo3NixNOjc3LE46NzgsTzo3OSxQOjgwLFE6ODEsUjo4MixTOjgzLFQ6ODQsVTo4NSxWOjg2LFc6ODcsWDo4OCxZOjg5LFo6OTAsTUVUQTo5MSxXSU5fS0VZX1JJR0hUOjkyLENPTlRFWFRfTUVOVTo5MyxOVU1fWkVSTzo5NixOVU1fT05FOjk3LE5VTV9UV086OTgsTlVNX1RIUkVFOjk5LE5VTV9GT1VSOjEwMCxOVU1fRklWRToxMDEsTlVNX1NJWDoxMDIsTlVNX1NFVkVOOjEwMyxOVU1fRUlHSFQ6MTA0LE5VTV9OSU5FOjEwNSxOVU1fTVVMVElQTFk6MTA2LE5VTV9QTFVTOjEwNyxOVU1fTUlOVVM6MTA5LE5VTV9QRVJJT0Q6MTEwLE5VTV9ESVZJU0lPTjoxMTEsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6MTE1LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsTlVNTE9DSzoxNDQsU0VNSUNPTE9OOjE4NixEQVNIOjE4OSxFUVVBTFM6MTg3LENPTU1BOjE4OCxQRVJJT0Q6MTkwLFNMQVNIOjE5MSxBUE9TVFJPUEhFOjE5MixTSU5HTEVfUVVPVEU6MjIyLE9QRU5fU1FVQVJFX0JSQUNLRVQ6MjE5LEJBQ0tTTEFTSDoyMjAsQ0xPU0VfU1FVQVJFX0JSQUNLRVQ6MjIxLFdJTl9LRVk6MjI0LE1BQ19GRl9NRVRBOjIyNCxXSU5fSU1FOjIyOX07ci5pc1RleHRNb2RpZnlpbmdLZXlFdmVudD1mdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGU7aWYoZS5hbHRLZXkmJiFlLmN0cmxLZXl8fGUubWV0YUtleXx8dD49ci5GMSYmdDw9ci5GMTIpcmV0dXJuITE7c3dpdGNoKHQpe2Nhc2Ugci5BTFQ6Y2FzZSByLkNBUFNfTE9DSzpjYXNlIHIuQ09OVEVYVF9NRU5VOmNhc2Ugci5DVFJMOmNhc2Ugci5ET1dOOmNhc2Ugci5FTkQ6Y2FzZSByLkVTQzpjYXNlIHIuSE9NRTpjYXNlIHIuSU5TRVJUOmNhc2Ugci5MRUZUOmNhc2Ugci5NQUNfRkZfTUVUQTpjYXNlIHIuTUVUQTpjYXNlIHIuTlVNTE9DSzpjYXNlIHIuTlVNX0NFTlRFUjpjYXNlIHIuUEFHRV9ET1dOOmNhc2Ugci5QQUdFX1VQOmNhc2Ugci5QQVVTRTpjYXNlIHIuUFJJTlRfU0NSRUVOOmNhc2Ugci5SSUdIVDpjYXNlIHIuU0hJRlQ6Y2FzZSByLlVQOmNhc2Ugci5XSU5fS0VZOmNhc2Ugci5XSU5fS0VZX1JJR0hUOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSxyLmlzQ2hhcmFjdGVyS2V5PWZ1bmN0aW9uKGUpe2lmKGU+PXIuWkVSTyYmZTw9ci5OSU5FKXJldHVybiEwO2lmKGU+PXIuTlVNX1pFUk8mJmU8PXIuTlVNX01VTFRJUExZKXJldHVybiEwO2lmKGU+PXIuQSYmZTw9ci5aKXJldHVybiEwO2lmKC0xIT09d2luZG93Lm5hdmlnYXRpb24udXNlckFnZW50LmluZGV4T2YoIldlYktpdCIpJiYwPT09ZSlyZXR1cm4hMDtzd2l0Y2goZSl7Y2FzZSByLlNQQUNFOmNhc2Ugci5RVUVTVElPTl9NQVJLOmNhc2Ugci5OVU1fUExVUzpjYXNlIHIuTlVNX01JTlVTOmNhc2Ugci5OVU1fUEVSSU9EOmNhc2Ugci5OVU1fRElWSVNJT046Y2FzZSByLlNFTUlDT0xPTjpjYXNlIHIuREFTSDpjYXNlIHIuRVFVQUxTOmNhc2Ugci5DT01NQTpjYXNlIHIuUEVSSU9EOmNhc2Ugci5TTEFTSDpjYXNlIHIuQVBPU1RST1BIRTpjYXNlIHIuU0lOR0xFX1FVT1RFOmNhc2Ugci5PUEVOX1NRVUFSRV9CUkFDS0VUOmNhc2Ugci5CQUNLU0xBU0g6Y2FzZSByLkNMT1NFX1NRVUFSRV9CUkFDS0VUOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JjLXV0aWwvZXMvUG9ydGFsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLG89bi5uKHIpLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaT1uLm4ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYz1uLm4odSksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLF89bi5uKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksZj1uLm4ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaD1uLm4obSksZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG8oKSh0aGlzLHQpLGwoKSh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBjKCkodCxlKSxpKCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVDb250YWluZXIoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5kaWRVcGRhdGU7dCYmdChlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlQ29udGFpbmVyKCl9fSx7a2V5OiJjcmVhdGVDb250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPXRoaXMucHJvcHMuZ2V0Q29udGFpbmVyKCksdGhpcy5mb3JjZVVwZGF0ZSgpfX0se2tleToicmVtb3ZlQ29udGFpbmVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyP2YuYS5jcmVhdGVQb3J0YWwodGhpcy5wcm9wcy5jaGlsZHJlbix0aGlzLl9jb250YWluZXIpOm51bGx9fV0pLHR9KF8uYS5Db21wb25lbnQpO2cucHJvcFR5cGVzPXtnZXRDb250YWluZXI6aC5hLmZ1bmMuaXNSZXF1aXJlZCxjaGlsZHJlbjpoLmEubm9kZS5pc1JlcXVpcmVkLGRpZFVwZGF0ZTpoLmEuZnVuY30sdC5hPWd9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jM2pzL25vZGVfbW9kdWxlcy9jMy9jMy5qcyI6ZnVuY3Rpb24oZSx0LG4pey8qIEBsaWNlbnNlIEMzLmpzIHYwLjQuMjMgfCAoYykgQzMgVGVhbSBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgaHR0cDovL2MzanMub3JnLyAqLwohZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO24uY29tcG9uZW50PWUsbi5wYXJhbXM9dHx8e30sbi5kMz1lLmQzLG4uc2NhbGU9bi5kMy5zY2FsZS5saW5lYXIoKSxuLnJhbmdlLG4ub3JpZW50PSJib3R0b20iLG4uaW5uZXJUaWNrU2l6ZT02LG4ub3V0ZXJUaWNrU2l6ZT10aGlzLnBhcmFtcy53aXRoT3V0ZXJUaWNrPzY6MCxuLnRpY2tQYWRkaW5nPTMsbi50aWNrVmFsdWVzPW51bGwsbi50aWNrRm9ybWF0LG4udGlja0FyZ3VtZW50cyxuLnRpY2tPZmZzZXQ9MCxuLnRpY2tDdWxsaW5nPSEwLG4udGlja0NlbnRlcmVkLG4udGlja1RleHRDaGFyU2l6ZSxuLnRpY2tUZXh0Um90YXRlPW4ucGFyYW1zLnRpY2tUZXh0Um90YXRlLG4udGlja0xlbmd0aCxuLmF4aXM9bi5nZW5lcmF0ZUF4aXMoKX1mdW5jdGlvbiB0KGUsdCxuKXt0aGlzLm93bmVyPWUsTC5jaGFydC5pbnRlcm5hbFt0XT1ufWZ1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbD1uZXcgbyh0aGlzKTt0LmxvYWRDb25maWcoZSksdC5iZWZvcmVJbml0KGUpLHQuaW5pdCgpLHQuYWZ0ZXJJbml0KGUpLGZ1bmN0aW9uIGUodCxuLHIpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obyl7bltvXT10W29dLmJpbmQociksT2JqZWN0LmtleXModFtvXSkubGVuZ3RoPjAmJmUodFtvXSxuW29dLHIpfSl9KGosdGhpcyx0aGlzKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXM7dC5kMz13aW5kb3cuZDM/d2luZG93LmQzOm4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWMzanMvbm9kZV9tb2R1bGVzL2QzL2QzLmpzIiksdC5hcGk9ZSx0LmNvbmZpZz10LmdldERlZmF1bHRDb25maWcoKSx0LmRhdGE9e30sdC5jYWNoZT17fSx0LmF4ZXM9e319dmFyIHMsaSxhPXt0YXJnZXQ6ImMzLXRhcmdldCIsY2hhcnQ6ImMzLWNoYXJ0IixjaGFydExpbmU6ImMzLWNoYXJ0LWxpbmUiLGNoYXJ0TGluZXM6ImMzLWNoYXJ0LWxpbmVzIixjaGFydEJhcjoiYzMtY2hhcnQtYmFyIixjaGFydEJhcnM6ImMzLWNoYXJ0LWJhcnMiLGNoYXJ0VGV4dDoiYzMtY2hhcnQtdGV4dCIsY2hhcnRUZXh0czoiYzMtY2hhcnQtdGV4dHMiLGNoYXJ0QXJjOiJjMy1jaGFydC1hcmMiLGNoYXJ0QXJjczoiYzMtY2hhcnQtYXJjcyIsY2hhcnRBcmNzVGl0bGU6ImMzLWNoYXJ0LWFyY3MtdGl0bGUiLGNoYXJ0QXJjc0JhY2tncm91bmQ6ImMzLWNoYXJ0LWFyY3MtYmFja2dyb3VuZCIsY2hhcnRBcmNzR2F1Z2VVbml0OiJjMy1jaGFydC1hcmNzLWdhdWdlLXVuaXQiLGNoYXJ0QXJjc0dhdWdlTWF4OiJjMy1jaGFydC1hcmNzLWdhdWdlLW1heCIsY2hhcnRBcmNzR2F1Z2VNaW46ImMzLWNoYXJ0LWFyY3MtZ2F1Z2UtbWluIixzZWxlY3RlZENpcmNsZToiYzMtc2VsZWN0ZWQtY2lyY2xlIixzZWxlY3RlZENpcmNsZXM6ImMzLXNlbGVjdGVkLWNpcmNsZXMiLGV2ZW50UmVjdDoiYzMtZXZlbnQtcmVjdCIsZXZlbnRSZWN0czoiYzMtZXZlbnQtcmVjdHMiLGV2ZW50UmVjdHNTaW5nbGU6ImMzLWV2ZW50LXJlY3RzLXNpbmdsZSIsZXZlbnRSZWN0c011bHRpcGxlOiJjMy1ldmVudC1yZWN0cy1tdWx0aXBsZSIsem9vbVJlY3Q6ImMzLXpvb20tcmVjdCIsYnJ1c2g6ImMzLWJydXNoIixmb2N1c2VkOiJjMy1mb2N1c2VkIixkZWZvY3VzZWQ6ImMzLWRlZm9jdXNlZCIscmVnaW9uOiJjMy1yZWdpb24iLHJlZ2lvbnM6ImMzLXJlZ2lvbnMiLHRpdGxlOiJjMy10aXRsZSIsdG9vbHRpcENvbnRhaW5lcjoiYzMtdG9vbHRpcC1jb250YWluZXIiLHRvb2x0aXA6ImMzLXRvb2x0aXAiLHRvb2x0aXBOYW1lOiJjMy10b29sdGlwLW5hbWUiLHNoYXBlOiJjMy1zaGFwZSIsc2hhcGVzOiJjMy1zaGFwZXMiLGxpbmU6ImMzLWxpbmUiLGxpbmVzOiJjMy1saW5lcyIsYmFyOiJjMy1iYXIiLGJhcnM6ImMzLWJhcnMiLGNpcmNsZToiYzMtY2lyY2xlIixjaXJjbGVzOiJjMy1jaXJjbGVzIixhcmM6ImMzLWFyYyIsYXJjTGFiZWxMaW5lOiJjMy1hcmMtbGFiZWwtbGluZSIsYXJjczoiYzMtYXJjcyIsYXJlYToiYzMtYXJlYSIsYXJlYXM6ImMzLWFyZWFzIixlbXB0eToiYzMtZW1wdHkiLHRleHQ6ImMzLXRleHQiLHRleHRzOiJjMy10ZXh0cyIsZ2F1Z2VWYWx1ZToiYzMtZ2F1Z2UtdmFsdWUiLGdyaWQ6ImMzLWdyaWQiLGdyaWRMaW5lczoiYzMtZ3JpZC1saW5lcyIseGdyaWQ6ImMzLXhncmlkIix4Z3JpZHM6ImMzLXhncmlkcyIseGdyaWRMaW5lOiJjMy14Z3JpZC1saW5lIix4Z3JpZExpbmVzOiJjMy14Z3JpZC1saW5lcyIseGdyaWRGb2N1czoiYzMteGdyaWQtZm9jdXMiLHlncmlkOiJjMy15Z3JpZCIseWdyaWRzOiJjMy15Z3JpZHMiLHlncmlkTGluZToiYzMteWdyaWQtbGluZSIseWdyaWRMaW5lczoiYzMteWdyaWQtbGluZXMiLGF4aXM6ImMzLWF4aXMiLGF4aXNYOiJjMy1heGlzLXgiLGF4aXNYTGFiZWw6ImMzLWF4aXMteC1sYWJlbCIsYXhpc1k6ImMzLWF4aXMteSIsYXhpc1lMYWJlbDoiYzMtYXhpcy15LWxhYmVsIixheGlzWTI6ImMzLWF4aXMteTIiLGF4aXNZMkxhYmVsOiJjMy1heGlzLXkyLWxhYmVsIixsZWdlbmRCYWNrZ3JvdW5kOiJjMy1sZWdlbmQtYmFja2dyb3VuZCIsbGVnZW5kSXRlbToiYzMtbGVnZW5kLWl0ZW0iLGxlZ2VuZEl0ZW1FdmVudDoiYzMtbGVnZW5kLWl0ZW0tZXZlbnQiLGxlZ2VuZEl0ZW1UaWxlOiJjMy1sZWdlbmQtaXRlbS10aWxlIixsZWdlbmRJdGVtSGlkZGVuOiJjMy1sZWdlbmQtaXRlbS1oaWRkZW4iLGxlZ2VuZEl0ZW1Gb2N1c2VkOiJjMy1sZWdlbmQtaXRlbS1mb2N1c2VkIixkcmFnYXJlYToiYzMtZHJhZ2FyZWEiLEVYUEFOREVEOiJfZXhwYW5kZWRfIixTRUxFQ1RFRDoiX3NlbGVjdGVkXyIsSU5DTFVERUQ6Il9pbmNsdWRlZF8ifSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1PWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9LGM9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSxkPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fDA9PT1lfSxwPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxtPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sYj1mdW5jdGlvbihlKXtyZXR1cm4gMTAqTWF0aC5jZWlsKGUvMTApfSxFPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZSkrLjV9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV0tZVswXX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWV8fG0oZSkmJjA9PT1lLmxlbmd0aHx8Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpKSYmMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aH0sVD1mdW5jdGlvbihlKXtyZXR1cm4heC5pc0VtcHR5KGUpfSxBPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZyhlW3RdKT9lW3RdOm59LEM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPT09dCYmKG49ITApfSksbn0sTz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKTplfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1bZS5wYXRoU2VnTGlzdC5nZXRJdGVtKDApLGUucGF0aFNlZ0xpc3QuZ2V0SXRlbSgxKV07cmV0dXJue3g6blswXS54LHk6TWF0aC5taW4oblswXS55LG5bMV0ueSksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fTtpPWUucHJvdG90eXBlLGkuYXhpc1g9ZnVuY3Rpb24oZSx0LG4pe2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrTWF0aC5jZWlsKHQoZSkrbikrIiwgMCkifSl9LGkuYXhpc1k9ZnVuY3Rpb24oZSx0KXtlLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrTWF0aC5jZWlsKHQoZSkpKyIpIn0pfSxpLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lW2UubGVuZ3RoLTFdO3JldHVybiB0PG4/W3Qsbl06W24sdF19LGkuZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxvPVtdO2lmKGUudGlja3MpcmV0dXJuIGUudGlja3MuYXBwbHkoZSxyLnRpY2tBcmd1bWVudHMpO2ZvcihuPWUuZG9tYWluKCksdD1NYXRoLmNlaWwoblswXSk7dDxuWzFdO3QrKylvLnB1c2godCk7cmV0dXJuIG8ubGVuZ3RoPjAmJm9bMF0+MCYmby51bnNoaWZ0KG9bMF0tKG9bMV0tb1swXSkpLG99LGkuY29weVNjYWxlPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC5zY2FsZS5jb3B5KCk7cmV0dXJuIHQucGFyYW1zLmlzQ2F0ZWdvcnkmJihlPXQuc2NhbGUuZG9tYWluKCksbi5kb21haW4oW2VbMF0sZVsxXS0xXSkpLG59LGkudGV4dEZvcm1hdHRlZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdChlKTplO3JldHVybiB2b2lkIDAhPT1uP246IiJ9LGkudXBkYXRlUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLnJhbmdlPWUuc2NhbGUucmFuZ2VFeHRlbnQ/ZS5zY2FsZS5yYW5nZUV4dGVudCgpOmUuc2NhbGVFeHRlbnQoZS5zY2FsZS5yYW5nZSgpKSxlLnJhbmdlfSxpLnVwZGF0ZVRpY2tUZXh0Q2hhclNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0LnRpY2tUZXh0Q2hhclNpemUpcmV0dXJuIHQudGlja1RleHRDaGFyU2l6ZTt2YXIgbj17aDoxMS41LHc6NS41fTtyZXR1cm4gZS5zZWxlY3QoInRleHQiKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiB0LnRleHRGb3JtYXR0ZWQoZSl9KS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10LnRleHRGb3JtYXR0ZWQoZSkscz1yLmhlaWdodCxpPW8/ci53aWR0aC9vLmxlbmd0aDp2b2lkIDA7cyYmaSYmKG4uaD1zLG4udz1pKX0pLnRleHQoIiIpLHQudGlja1RleHRDaGFyU2l6ZT1uLG59LGkudHJhbnNpdGlvbmlzZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJhbXMud2l0aG91dFRyYW5zaXRpb24/ZTp0aGlzLmQzLnRyYW5zaXRpb24oZSl9LGkuaXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiJsZWZ0Ij09PXRoaXMub3JpZW50fHwicmlnaHQiPT09dGhpcy5vcmllbnR9LGkudHNwYW5EYXRhPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMscz1vLnBhcmFtcy50aWNrTXVsdGlsaW5lP28uc3BsaXRUaWNrVGV4dChlLG4scik6W10uY29uY2F0KG8udGV4dEZvcm1hdHRlZChlKSk7cmV0dXJuIG8ucGFyYW1zLnRpY2tNdWx0aWxpbmUmJm8ucGFyYW1zLnRpY2tNdWx0aWxpbmVNYXg+MCYmKHM9by5lbGxpcHNpZnkocyxvLnBhcmFtcy50aWNrTXVsdGlsaW5lTWF4KSkscy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2luZGV4OnQsc3BsaXR0ZWQ6ZSxsZW5ndGg6cy5sZW5ndGh9fSl9LGkuc3BsaXRUaWNrVGV4dD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3M9dm9pZCAwO2Zvcih2YXIgbj0xO248dC5sZW5ndGg7bisrKWlmKCIgIj09PXQuY2hhckF0KG4pJiYocz1uKSxvPXQuc3Vic3RyKDAsbisxKSxpPWEudGlja1RleHRDaGFyU2l6ZS53Km8ubGVuZ3RoLHU8aSlyZXR1cm4gcihlLmNvbmNhdCh0LnN1YnN0cigwLHN8fG4pKSx0LnNsaWNlKHM/cysxOm4pKTtyZXR1cm4gZS5jb25jYXQodCl9dmFyIG8scyxpLGE9dGhpcyxsPWEudGV4dEZvcm1hdHRlZChlKSx1PWEucGFyYW1zLnRpY2tXaWR0aCxjPVtdO3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCk/bDooKCF1fHx1PD0wKSYmKHU9YS5pc1ZlcnRpY2FsKCk/OTU6YS5wYXJhbXMuaXNDYXRlZ29yeT9NYXRoLmNlaWwobih0WzFdKS1uKHRbMF0pKS0xMjoxMTApLHIoYyxsKyIiKSl9LGkuZWxsaXBzaWZ5PWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8PXQpcmV0dXJuIGU7Zm9yKHZhciBuPWUuc2xpY2UoMCx0KSxyPTMsbz10LTE7bz49MDtvLS0pe3ZhciBzPW5bb10ubGVuZ3RoO2lmKG5bb109bltvXS5zdWJzdHIoMCxzLXIpLnBhZEVuZChzLCIuIiksKHItPXMpPD0wKWJyZWFrfXJldHVybiBufSxpLnVwZGF0ZVRpY2tMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UudGlja0xlbmd0aD1NYXRoLm1heChlLmlubmVyVGlja1NpemUsMCkrZS50aWNrUGFkZGluZ30saS5saW5lWTI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuc2NhbGUoZSkrKHQudGlja0NlbnRlcmVkPzA6dC50aWNrT2Zmc2V0KTtyZXR1cm4gdC5yYW5nZVswXTxuJiZuPHQucmFuZ2VbMV0/dC5pbm5lclRpY2tTaXplOjB9LGkudGV4dFk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS50aWNrVGV4dFJvdGF0ZTtyZXR1cm4gdD8xMS41LXQvMTUqMi41Kih0PjA/MTotMSk6ZS50aWNrTGVuZ3RofSxpLnRleHRUcmFuc2Zvcm09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS50aWNrVGV4dFJvdGF0ZTtyZXR1cm4gdD8icm90YXRlKCIrdCsiKSI6IiJ9LGkudGV4dFRleHRBbmNob3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS50aWNrVGV4dFJvdGF0ZTtyZXR1cm4gdD90PjA/InN0YXJ0IjoiZW5kIjoibWlkZGxlIn0saS50c3BhbkR4PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUudGlja1RleHRSb3RhdGU7cmV0dXJuIHQ/OCpNYXRoLnNpbihNYXRoLlBJKih0LzE4MCkpOjB9LGkudHNwYW5EeT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLnRpY2tUZXh0Q2hhclNpemUuaDtyZXR1cm4gMD09PXQmJihyPW4uaXNWZXJ0aWNhbCgpPy0oKGUubGVuZ3RoLTEpKihuLnRpY2tUZXh0Q2hhclNpemUuaC8yKS0zKToiLjcxZW0iKSxyfSxpLmdlbmVyYXRlQXhpcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUobyl7by5lYWNoKGZ1bmN0aW9uKCl7dmFyIG8scyxpLGE9ZS5nPW4uc2VsZWN0KHRoaXMpLGw9dGhpcy5fX2NoYXJ0X198fHQuc2NhbGUsdT10aGlzLl9fY2hhcnRfXz10LmNvcHlTY2FsZSgpLGM9dC50aWNrVmFsdWVzP3QudGlja1ZhbHVlczp0LmdlbmVyYXRlVGlja3ModSksZD1hLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGMsdSksXz1kLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IiwxZS02KSxwPWQuZXhpdCgpLnJlbW92ZSgpLGY9dC50cmFuc2l0aW9uaXNlKGQpLnN0eWxlKCJvcGFjaXR5IiwxKTtyLmlzQ2F0ZWdvcnk/KHQudGlja09mZnNldD1NYXRoLmNlaWwoKHUoMSktdSgwKSkvMikscz10LnRpY2tDZW50ZXJlZD8wOnQudGlja09mZnNldCxpPXQudGlja0NlbnRlcmVkP3QudGlja09mZnNldDowKTp0LnRpY2tPZmZzZXQ9cz0wLF8uYXBwZW5kKCJsaW5lIiksXy5hcHBlbmQoInRleHQiKSx0LnVwZGF0ZVJhbmdlKCksdC51cGRhdGVUaWNrTGVuZ3RoKCksdC51cGRhdGVUaWNrVGV4dENoYXJTaXplKGEuc2VsZWN0KCIudGljayIpKTt2YXIgbT1mLnNlbGVjdCgibGluZSIpLGg9Zi5zZWxlY3QoInRleHQiKSxnPWQuc2VsZWN0KCJ0ZXh0Iikuc2VsZWN0QWxsKCJ0c3BhbiIpLmRhdGEoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkRhdGEoZSxuLGMsdSl9KTtnLmVudGVyKCkuYXBwZW5kKCJ0c3BhbiIpLGcuZXhpdCgpLnJlbW92ZSgpLGcudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdHRlZH0pO3ZhciBiPWEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLEU9KGIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHQudHJhbnNpdGlvbmlzZShiKSk7c3dpdGNoKHQub3JpZW50KXtjYXNlImJvdHRvbSI6bz10LmF4aXNYLG0uYXR0cigieDEiLHMpLmF0dHIoIngyIixzKS5hdHRyKCJ5MiIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5saW5lWTIoZSxuKX0pLGguYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50ZXh0WShlLG4pfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRleHRUcmFuc2Zvcm0oZSxuKX0pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50ZXh0VGV4dEFuY2hvcihlLG4pfSksZy5hdHRyKCJ4IiwwKS5hdHRyKCJkeSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkR5KGUsbil9KS5hdHRyKCJkeCIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkR4KGUsbil9KSxFLmF0dHIoImQiLCJNIit0LnJhbmdlWzBdKyIsIit0Lm91dGVyVGlja1NpemUrIlYwSCIrdC5yYW5nZVsxXSsiViIrdC5vdXRlclRpY2tTaXplKTticmVhaztjYXNlInRvcCI6bz10LmF4aXNYLG0uYXR0cigieDEiLHMpLmF0dHIoIngyIixzKS5hdHRyKCJ5MiIsZnVuY3Rpb24oZSxuKXtyZXR1cm4tMSp0LmxpbmVZMihlLG4pfSksaC5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbihlLG4pe3JldHVybi0xKnQudGV4dFkoZSxuKS0oci5pc0NhdGVnb3J5PzI6dC50aWNrTGVuZ3RoLTIpfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRleHRUcmFuc2Zvcm0oZSxuKX0pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50ZXh0VGV4dEFuY2hvcihlLG4pfSksZy5hdHRyKCJ4IiwwKS5hdHRyKCJkeSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkR5KGUsbil9KS5hdHRyKCJkeCIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC50c3BhbkR4KGUsbil9KSxFLmF0dHIoImQiLCJNIit0LnJhbmdlWzBdKyIsIistdC5vdXRlclRpY2tTaXplKyJWMEgiK3QucmFuZ2VbMV0rIlYiKy10Lm91dGVyVGlja1NpemUpO2JyZWFrO2Nhc2UibGVmdCI6bz10LmF4aXNZLG0uYXR0cigieDIiLC10LmlubmVyVGlja1NpemUpLmF0dHIoInkxIixpKS5hdHRyKCJ5MiIsaSksaC5hdHRyKCJ4IiwtdC50aWNrTGVuZ3RoKS5hdHRyKCJ5Iix0LnRpY2tPZmZzZXQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLGcuYXR0cigieCIsLXQudGlja0xlbmd0aCkuYXR0cigiZHkiLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQudHNwYW5EeShlLG4pfSksRS5hdHRyKCJkIiwiTSIrLXQub3V0ZXJUaWNrU2l6ZSsiLCIrdC5yYW5nZVswXSsiSDBWIit0LnJhbmdlWzFdKyJIIistdC5vdXRlclRpY2tTaXplKTticmVhaztjYXNlInJpZ2h0IjpvPXQuYXhpc1ksbS5hdHRyKCJ4MiIsdC5pbm5lclRpY2tTaXplKS5hdHRyKCJ5MSIsaSkuYXR0cigieTIiLGkpLGguYXR0cigieCIsdC50aWNrTGVuZ3RoKS5hdHRyKCJ5Iix0LnRpY2tPZmZzZXQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksZy5hdHRyKCJ4Iix0LnRpY2tMZW5ndGgpLmF0dHIoImR5IixmdW5jdGlvbihlLG4pe3JldHVybiB0LnRzcGFuRHkoZSxuKX0pLEUuYXR0cigiZCIsIk0iK3Qub3V0ZXJUaWNrU2l6ZSsiLCIrdC5yYW5nZVswXSsiSDBWIit0LnJhbmdlWzFdKyJIIit0Lm91dGVyVGlja1NpemUpfWlmKHUucmFuZ2VCYW5kKXt2YXIgeT11LHY9eS5yYW5nZUJhbmQoKS8yO2w9dT1mdW5jdGlvbihlKXtyZXR1cm4geShlKSt2fX1lbHNlIGwucmFuZ2VCYW5kP2w9dTpwLmNhbGwobyx1LHQudGlja09mZnNldCk7Xy5jYWxsKG8sbCx0LnRpY2tPZmZzZXQpLGYuY2FsbChvLHUsdC50aWNrT2Zmc2V0KX0pfXZhciB0PXRoaXMsbj10LmQzLHI9dC5wYXJhbXM7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuc2NhbGU9bixlKTp0LnNjYWxlfSxlLm9yaWVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5vcmllbnQ9biBpbnt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX0/bisiIjoiYm90dG9tIixlKTp0Lm9yaWVudH0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tGb3JtYXQ9bixlKTp0LnRpY2tGb3JtYXR9LGUudGlja0NlbnRlcmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tDZW50ZXJlZD1uLGUpOnQudGlja0NlbnRlcmVkfSxlLnRpY2tPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC50aWNrT2Zmc2V0fSxlLnRpY2tJbnRlcnZhbD1mdW5jdGlvbigpe3ZhciBuLG87cmV0dXJuIHIuaXNDYXRlZ29yeT9uPTIqdC50aWNrT2Zmc2V0OihvPWUuZy5zZWxlY3QoInBhdGguZG9tYWluIikubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCktMip0Lm91dGVyVGlja1NpemUsbj1vL2UuZy5zZWxlY3RBbGwoImxpbmUiKS5zaXplKCkpLG49PT0xLzA/MDpufSxlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudGlja0FyZ3VtZW50cz1hcmd1bWVudHMsZSk6dC50aWNrQXJndW1lbnRzfSxlLnRpY2tDdWxsaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRpY2tDdWxsaW5nPW4sZSk6dC50aWNrQ3VsbGluZ30sZS50aWNrVmFsdWVzPWZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXQudGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBuKHQuc2NhbGUuZG9tYWluKCkpfTtlbHNle2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnRpY2tWYWx1ZXM7dC50aWNrVmFsdWVzPW59cmV0dXJuIGV9LGV9O3ZhciBSPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7dSh0aGlzLG4pO3ZhciByPXtmbjpzLGludGVybmFsOntmbjppfX0sbz1kKHRoaXMsKG4uX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLmNhbGwodGhpcyx0LCJheGlzIixyKSk7cmV0dXJuIG8uZDM9dC5kMyxvLmludGVybmFsPWUsb31yZXR1cm4gYyhuLHQpLG59KHQpO3M9Ui5wcm90b3R5cGUscy5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcix0PWUuY29uZmlnLG49ZS5tYWluO2UuYXhlcy54PW4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEuYXhpcysiICIrYS5heGlzWCkuYXR0cigiY2xpcC1wYXRoIix0LmF4aXNfeF9pbm5lcj8iIjplLmNsaXBQYXRoRm9yWEF4aXMpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoIngiKSkuc3R5bGUoInZpc2liaWxpdHkiLHQuYXhpc194X3Nob3c/InZpc2libGUiOiJoaWRkZW4iKSxlLmF4ZXMueC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsYS5heGlzWExhYmVsKS5hdHRyKCJ0cmFuc2Zvcm0iLHQuYXhpc19yb3RhdGVkPyJyb3RhdGUoLTkwKSI6IiIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsdGhpcy50ZXh0QW5jaG9yRm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKSxlLmF4ZXMueT1uLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhLmF4aXMrIiAiK2EuYXhpc1kpLmF0dHIoImNsaXAtcGF0aCIsdC5heGlzX3lfaW5uZXI/IiI6ZS5jbGlwUGF0aEZvcllBeGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGUuZ2V0VHJhbnNsYXRlKCJ5IikpLnN0eWxlKCJ2aXNpYmlsaXR5Iix0LmF4aXNfeV9zaG93PyJ2aXNpYmxlIjoiaGlkZGVuIiksZS5heGVzLnkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGEuYXhpc1lMYWJlbCkuYXR0cigidHJhbnNmb3JtIix0LmF4aXNfcm90YXRlZD8iIjoicm90YXRlKC05MCkiKS5zdHlsZSgidGV4dC1hbmNob3IiLHRoaXMudGV4dEFuY2hvckZvcllBeGlzTGFiZWwuYmluZCh0aGlzKSksZS5heGVzLnkyPW4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEuYXhpcysiICIrYS5heGlzWTIpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoInkyIikpLnN0eWxlKCJ2aXNpYmlsaXR5Iix0LmF4aXNfeTJfc2hvdz8idmlzaWJsZSI6ImhpZGRlbiIpLGUuYXhlcy55Mi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsYS5heGlzWTJMYWJlbCkuYXR0cigidHJhbnNmb3JtIix0LmF4aXNfcm90YXRlZD8iIjoicm90YXRlKC05MCkiKS5zdHlsZSgidGV4dC1hbmNob3IiLHRoaXMudGV4dEFuY2hvckZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpfSxzLmdldFhBeGlzPWZ1bmN0aW9uKGUsdCxuLHIsbyxzLGkpe3ZhciBhPXRoaXMub3duZXIsbD1hLmNvbmZpZyx1PXtpc0NhdGVnb3J5OmEuaXNDYXRlZ29yaXplZCgpLHdpdGhPdXRlclRpY2s6byx0aWNrTXVsdGlsaW5lOmwuYXhpc194X3RpY2tfbXVsdGlsaW5lLHRpY2tNdWx0aWxpbmVNYXg6bC5heGlzX3hfdGlja19tdWx0aWxpbmU/TnVtYmVyKGwuYXhpc194X3RpY2tfbXVsdGlsaW5lTWF4KTowLHRpY2tXaWR0aDpsLmF4aXNfeF90aWNrX3dpZHRoLHRpY2tUZXh0Um90YXRlOmk/MDpsLmF4aXNfeF90aWNrX3JvdGF0ZSx3aXRob3V0VHJhbnNpdGlvbjpzfSxjPW5ldyB0aGlzLmludGVybmFsKHRoaXMsdSkuYXhpcy5zY2FsZShlKS5vcmllbnQodCk7cmV0dXJuIGEuaXNUaW1lU2VyaWVzKCkmJnImJiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5wYXJzZURhdGUoZSl9KSksYy50aWNrRm9ybWF0KG4pLnRpY2tWYWx1ZXMociksYS5pc0NhdGVnb3JpemVkKCkmJihjLnRpY2tDZW50ZXJlZChsLmF4aXNfeF90aWNrX2NlbnRlcmVkKSx2KGwuYXhpc194X3RpY2tfY3VsbGluZykmJihsLmF4aXNfeF90aWNrX2N1bGxpbmc9ITEpKSxjfSxzLnVwZGF0ZVhBeGlzVGlja1ZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5vd25lcixvPXIuY29uZmlnO3JldHVybihvLmF4aXNfeF90aWNrX2ZpdHx8by5heGlzX3hfdGlja19jb3VudCkmJihuPXRoaXMuZ2VuZXJhdGVUaWNrVmFsdWVzKHIubWFwVGFyZ2V0c1RvVW5pcXVlWHMoZSksby5heGlzX3hfdGlja19jb3VudCxyLmlzVGltZVNlcmllcygpKSksdD90LnRpY2tWYWx1ZXMobik6KHIueEF4aXMudGlja1ZhbHVlcyhuKSxyLnN1YlhBeGlzLnRpY2tWYWx1ZXMobikpLG59LHMuZ2V0WUF4aXM9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7dmFyIGE9dGhpcy5vd25lcixsPWEuY29uZmlnLHU9e3dpdGhPdXRlclRpY2s6byx3aXRob3V0VHJhbnNpdGlvbjpzLHRpY2tUZXh0Um90YXRlOmk/MDpsLmF4aXNfeV90aWNrX3JvdGF0ZX0sYz1uZXcgdGhpcy5pbnRlcm5hbCh0aGlzLHUpLmF4aXMuc2NhbGUoZSkub3JpZW50KHQpLnRpY2tGb3JtYXQobik7cmV0dXJuIGEuaXNUaW1lU2VyaWVzWSgpP2MudGlja3MoYS5kMy50aW1lW2wuYXhpc195X3RpY2tfdGltZV92YWx1ZV0sbC5heGlzX3lfdGlja190aW1lX2ludGVydmFsKTpjLnRpY2tWYWx1ZXMociksY30scy5nZXRJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm93bmVyLmNvbmZpZztyZXR1cm4gZSBpbiB0LmRhdGFfYXhlcz90LmRhdGFfYXhlc1tlXToieSJ9LHMuZ2V0WEF4aXNUaWNrRm9ybWF0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcix0PWUuY29uZmlnLG49ZS5pc1RpbWVTZXJpZXMoKT9lLmRlZmF1bHRBeGlzVGltZUZvcm1hdDplLmlzQ2F0ZWdvcml6ZWQoKT9lLmNhdGVnb3J5TmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZTwwP2UudG9GaXhlZCgwKTplfTtyZXR1cm4gdC5heGlzX3hfdGlja19mb3JtYXQmJihwKHQuYXhpc194X3RpY2tfZm9ybWF0KT9uPXQuYXhpc194X3RpY2tfZm9ybWF0OmUuaXNUaW1lU2VyaWVzKCkmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UuYXhpc1RpbWVGb3JtYXQodC5heGlzX3hfdGlja19mb3JtYXQpKG4pOiIifSkpLHAobik/ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbChlLHQpfTpufSxzLmdldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8KHQ/dC50aWNrVmFsdWVzKCk6dm9pZCAwKX0scy5nZXRYQXhpc1RpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaWNrVmFsdWVzKHRoaXMub3duZXIuY29uZmlnLmF4aXNfeF90aWNrX3ZhbHVlcyx0aGlzLm93bmVyLnhBeGlzKX0scy5nZXRZQXhpc1RpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaWNrVmFsdWVzKHRoaXMub3duZXIuY29uZmlnLmF4aXNfeV90aWNrX3ZhbHVlcyx0aGlzLm93bmVyLnlBeGlzKX0scy5nZXRZMkF4aXNUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGlja1ZhbHVlcyh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3kyX3RpY2tfdmFsdWVzLHRoaXMub3duZXIueTJBeGlzKX0scy5nZXRMYWJlbE9wdGlvbkJ5QXhpc0lkPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5vd25lcixyPW4uY29uZmlnO3JldHVybiJ5Ij09PWU/dD1yLmF4aXNfeV9sYWJlbDoieTIiPT09ZT90PXIuYXhpc195Ml9sYWJlbDoieCI9PT1lJiYodD1yLmF4aXNfeF9sYWJlbCksdH0scy5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMYWJlbE9wdGlvbkJ5QXhpc0lkKGUpO3JldHVybiBtKHQpP3Q6dD90LnRleHQ6bnVsbH0scy5zZXRMYWJlbFRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm93bmVyLHI9bi5jb25maWcsbz10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoZSk7bShvKT8ieSI9PT1lP3IuYXhpc195X2xhYmVsPXQ6InkyIj09PWU/ci5heGlzX3kyX2xhYmVsPXQ6IngiPT09ZSYmKHIuYXhpc194X2xhYmVsPXQpOm8mJihvLnRleHQ9dCl9LHMuZ2V0TGFiZWxQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TGFiZWxPcHRpb25CeUF4aXNJZChlKSxyPW4mJiJvYmplY3QiPT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6bChuKSkmJm4ucG9zaXRpb24/bi5wb3NpdGlvbjp0O3JldHVybntpc0lubmVyOnIuaW5kZXhPZigiaW5uZXIiKT49MCxpc091dGVyOnIuaW5kZXhPZigib3V0ZXIiKT49MCxpc0xlZnQ6ci5pbmRleE9mKCJsZWZ0Iik+PTAsaXNDZW50ZXI6ci5pbmRleE9mKCJjZW50ZXIiKT49MCxpc1JpZ2h0OnIuaW5kZXhPZigicmlnaHQiKT49MCxpc1RvcDpyLmluZGV4T2YoInRvcCIpPj0wLGlzTWlkZGxlOnIuaW5kZXhPZigibWlkZGxlIik+PTAsaXNCb3R0b206ci5pbmRleE9mKCJib3R0b20iKT49MH19LHMuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigieCIsdGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkPyJpbm5lci10b3AiOiJpbm5lci1yaWdodCIpfSxzLmdldFlBeGlzTGFiZWxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsUG9zaXRpb24oInkiLHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZD8iaW5uZXItcmlnaHQiOiJpbm5lci10b3AiKX0scy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigieTIiLHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZD8iaW5uZXItcmlnaHQiOiJpbm5lci10b3AiKX0scy5nZXRMYWJlbFBvc2l0aW9uQnlJZD1mdW5jdGlvbihlKXtyZXR1cm4ieTIiPT09ZT90aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKToieSI9PT1lP3RoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCk6dGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKX0scy50ZXh0Rm9yWEF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsVGV4dCgieCIpfSxzLnRleHRGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxUZXh0KCJ5Iil9LHMudGV4dEZvclkyQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxUZXh0KCJ5MiIpfSxzLnhGb3JBeGlzTGFiZWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm93bmVyO3JldHVybiBlP3QuaXNMZWZ0PzA6dC5pc0NlbnRlcj9uLndpZHRoLzI6bi53aWR0aDp0LmlzQm90dG9tPy1uLmhlaWdodDp0LmlzTWlkZGxlPy1uLmhlaWdodC8yOjB9LHMuZHhGb3JBeGlzTGFiZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90LmlzTGVmdD8iMC41ZW0iOnQuaXNSaWdodD8iLTAuNWVtIjoiMCI6dC5pc1RvcD8iLTAuNWVtIjp0LmlzQm90dG9tPyIwLjVlbSI6IjAifSxzLnRleHRBbmNob3JGb3JBeGlzTGFiZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90LmlzTGVmdD8ic3RhcnQiOnQuaXNDZW50ZXI/Im1pZGRsZSI6ImVuZCI6dC5pc0JvdHRvbT8ic3RhcnQiOnQuaXNNaWRkbGU/Im1pZGRsZSI6ImVuZCJ9LHMueEZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKCF0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMueEZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFlBeGlzTGFiZWxQb3NpdGlvbigpKX0scy54Rm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMuZHhGb3JYQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHhGb3JBeGlzTGFiZWwoIXRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0scy5keEZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMuZHhGb3JZMkF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR4Rm9yQXhpc0xhYmVsKHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMuZHlGb3JYQXhpc0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcix0PWUuY29uZmlnLG49dGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKTtyZXR1cm4gdC5heGlzX3JvdGF0ZWQ/bi5pc0lubmVyPyIxLjJlbSI6LTI1LShlLmNvbmZpZy5heGlzX3hfaW5uZXI/MDp0aGlzLmdldE1heFRpY2tXaWR0aCgieCIpKTpuLmlzSW5uZXI/Ii0wLjVlbSI6dC5heGlzX3hfaGVpZ2h0P3QuYXhpc194X2hlaWdodC0xMDoiM2VtIn0scy5keUZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyLHQ9dGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKTtyZXR1cm4gZS5jb25maWcuYXhpc19yb3RhdGVkP3QuaXNJbm5lcj8iLTAuNWVtIjoiM2VtIjp0LmlzSW5uZXI/IjEuMmVtIjotMTAtKGUuY29uZmlnLmF4aXNfeV9pbm5lcj8wOnRoaXMuZ2V0TWF4VGlja1dpZHRoKCJ5IikrMTApfSxzLmR5Rm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyLHQ9dGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCk7cmV0dXJuIGUuY29uZmlnLmF4aXNfcm90YXRlZD90LmlzSW5uZXI/IjEuMmVtIjoiLTIuMmVtIjp0LmlzSW5uZXI/Ii0wLjVlbSI6MTUrKGUuY29uZmlnLmF4aXNfeTJfaW5uZXI/MDp0aGlzLmdldE1heFRpY2tXaWR0aCgieTIiKSsxNSl9LHMudGV4dEFuY2hvckZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoIWUuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0scy50ZXh0QW5jaG9yRm9yWUF4aXNMYWJlbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXI7cmV0dXJuIHRoaXMudGV4dEFuY2hvckZvckF4aXNMYWJlbChlLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMudGV4dEFuY2hvckZvclkyQXhpc0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lcjtyZXR1cm4gdGhpcy50ZXh0QW5jaG9yRm9yQXhpc0xhYmVsKGUuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKSl9LHMuZ2V0TWF4VGlja1dpZHRoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhPXRoaXMub3duZXIsbD1hLmNvbmZpZyx1PTA7cmV0dXJuIHQmJmEuY3VycmVudE1heFRpY2tXaWR0aHNbZV0/YS5jdXJyZW50TWF4VGlja1dpZHRoc1tlXTooYS5zdmcmJihuPWEuZmlsdGVyVGFyZ2V0c1RvU2hvdyhhLmRhdGEudGFyZ2V0cyksInkiPT09ZT8ocj1hLnkuY29weSgpLmRvbWFpbihhLmdldFlEb21haW4obiwieSIpKSxvPXRoaXMuZ2V0WUF4aXMocixhLnlPcmllbnQsbC5heGlzX3lfdGlja19mb3JtYXQsYS55QXhpc1RpY2tWYWx1ZXMsITEsITAsITApKToieTIiPT09ZT8ocj1hLnkyLmNvcHkoKS5kb21haW4oYS5nZXRZRG9tYWluKG4sInkyIikpLG89dGhpcy5nZXRZQXhpcyhyLGEueTJPcmllbnQsbC5heGlzX3kyX3RpY2tfZm9ybWF0LGEueTJBeGlzVGlja1ZhbHVlcywhMSwhMCwhMCkpOihyPWEueC5jb3B5KCkuZG9tYWluKGEuZ2V0WERvbWFpbihuKSksbz10aGlzLmdldFhBeGlzKHIsYS54T3JpZW50LGEueEF4aXNUaWNrRm9ybWF0LGEueEF4aXNUaWNrVmFsdWVzLCExLCEwLCEwKSx0aGlzLnVwZGF0ZVhBeGlzVGlja1ZhbHVlcyhuLG8pKSxzPWEuZDMuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJjMyIsITApLGk9cy5hcHBlbmQoInN2ZyIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoInBvc2l0aW9uIiwiZml4ZWQiKS5zdHlsZSgidG9wIiwwKS5zdHlsZSgibGVmdCIsMCksaS5hcHBlbmQoImciKS5jYWxsKG8pLmVhY2goZnVuY3Rpb24oKXthLmQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1PGUud2lkdGgmJih1PWUud2lkdGgpfSkscy5yZW1vdmUoKX0pKSxhLmN1cnJlbnRNYXhUaWNrV2lkdGhzW2VdPXU8PTA/YS5jdXJyZW50TWF4VGlja1dpZHRoc1tlXTp1LGEuY3VycmVudE1heFRpY2tXaWR0aHNbZV0pfSxzLnVwZGF0ZUxhYmVscz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm93bmVyLG49dC5tYWluLnNlbGVjdCgiLiIrYS5heGlzWCsiIC4iK2EuYXhpc1hMYWJlbCkscj10Lm1haW4uc2VsZWN0KCIuIithLmF4aXNZKyIgLiIrYS5heGlzWUxhYmVsKSxvPXQubWFpbi5zZWxlY3QoIi4iK2EuYXhpc1kyKyIgLiIrYS5heGlzWTJMYWJlbCk7KGU/bi50cmFuc2l0aW9uKCk6bikuYXR0cigieCIsdGhpcy54Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeCIsdGhpcy5keEZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHkiLHRoaXMuZHlGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpLnRleHQodGhpcy50ZXh0Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKSwoZT9yLnRyYW5zaXRpb24oKTpyKS5hdHRyKCJ4Iix0aGlzLnhGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR4Iix0aGlzLmR4Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeSIsdGhpcy5keUZvcllBeGlzTGFiZWwuYmluZCh0aGlzKSkudGV4dCh0aGlzLnRleHRGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLChlP28udHJhbnNpdGlvbigpOm8pLmF0dHIoIngiLHRoaXMueEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR4Iix0aGlzLmR4Rm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHkiLHRoaXMuZHlGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKS50ZXh0KHRoaXMudGV4dEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpfSxzLmdldFBhZGRpbmc9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89Im51bWJlciI9PXR5cGVvZiBlP2U6ZVt0XTtyZXR1cm4gXyhvKT8icmF0aW8iPT09ZS51bml0P2VbdF0qcjp0aGlzLmNvbnZlcnRQaXhlbHNUb0F4aXNQYWRkaW5nKG8scik6bn0scy5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3duZXI7cmV0dXJuIHQqKGUvKG4uY29uZmlnLmF4aXNfcm90YXRlZD9uLndpZHRoOm4uaGVpZ2h0KSl9LHMuZ2VuZXJhdGVUaWNrVmFsdWVzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHMsaSxhLGwsdSxjPWU7aWYodClpZigxPT09KHI9cCh0KT90KCk6dCkpYz1bZVswXV07ZWxzZSBpZigyPT09ciljPVtlWzBdLGVbZS5sZW5ndGgtMV1dO2Vsc2UgaWYocj4yKXtmb3IoaT1yLTIsbz1lWzBdLHM9ZVtlLmxlbmd0aC0xXSxhPShzLW8pLyhpKzEpLGM9W29dLGw9MDtsPGk7bCsrKXU9K28rYSoobCsxKSxjLnB1c2gobj9uZXcgRGF0ZSh1KTp1KTtjLnB1c2gocyl9cmV0dXJuIG58fChjPWMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSksY30scy5nZW5lcmF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3duZXIsbj10LmF4ZXM7cmV0dXJue2F4aXNYOmU/bi54LnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKTpuLngsYXhpc1k6ZT9uLnkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpOm4ueSxheGlzWTI6ZT9uLnkyLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKTpuLnkyLGF4aXNTdWJYOmU/bi5zdWJ4LnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKTpuLnN1Ynh9fSxzLnJlZHJhdz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3duZXI7bi5heGVzLnguc3R5bGUoIm9wYWNpdHkiLHQ/MDoxKSxuLmF4ZXMueS5zdHlsZSgib3BhY2l0eSIsdD8wOjEpLG4uYXhlcy55Mi5zdHlsZSgib3BhY2l0eSIsdD8wOjEpLG4uYXhlcy5zdWJ4LnN0eWxlKCJvcGFjaXR5Iix0PzA6MSksZS5heGlzWC5jYWxsKG4ueEF4aXMpLGUuYXhpc1kuY2FsbChuLnlBeGlzKSxlLmF4aXNZMi5jYWxsKG4ueTJBeGlzKSxlLmF4aXNTdWJYLmNhbGwobi5zdWJYQXhpcyl9O3ZhciBqLHgsTD17dmVyc2lvbjoiMC40LjIzIn07cmV0dXJuIEwuZ2VuZXJhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUpfSxMLmNoYXJ0PXtmbjpyLnByb3RvdHlwZSxpbnRlcm5hbDp7Zm46by5wcm90b3R5cGV9fSxqPUwuY2hhcnQuZm4seD1MLmNoYXJ0LmludGVybmFsLmZuLHguYmVmb3JlSW5pdD1mdW5jdGlvbigpe30seC5hZnRlckluaXQ9ZnVuY3Rpb24oKXt9LHguaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztpZihlLmluaXRQYXJhbXMoKSx0LmRhdGFfdXJsKWUuY29udmVydFVybFRvRGF0YSh0LmRhdGFfdXJsLHQuZGF0YV9taW1lVHlwZSx0LmRhdGFfaGVhZGVycyx0LmRhdGFfa2V5cyxlLmluaXRXaXRoRGF0YSk7ZWxzZSBpZih0LmRhdGFfanNvbillLmluaXRXaXRoRGF0YShlLmNvbnZlcnRKc29uVG9EYXRhKHQuZGF0YV9qc29uLHQuZGF0YV9rZXlzKSk7ZWxzZSBpZih0LmRhdGFfcm93cyllLmluaXRXaXRoRGF0YShlLmNvbnZlcnRSb3dzVG9EYXRhKHQuZGF0YV9yb3dzKSk7ZWxzZXtpZighdC5kYXRhX2NvbHVtbnMpdGhyb3cgRXJyb3IoInVybCBvciBqc29uIG9yIHJvd3Mgb3IgY29sdW1ucyBpcyByZXF1aXJlZC4iKTtlLmluaXRXaXRoRGF0YShlLmNvbnZlcnRDb2x1bW5zVG9EYXRhKHQuZGF0YV9jb2x1bW5zKSl9fSx4LmluaXRQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5kMyxuPWUuY29uZmlnO2UuY2xpcElkPSJjMy0iKyArbmV3IERhdGUrIi1jbGlwIixlLmNsaXBJZEZvclhBeGlzPWUuY2xpcElkKyIteGF4aXMiLGUuY2xpcElkRm9yWUF4aXM9ZS5jbGlwSWQrIi15YXhpcyIsZS5jbGlwSWRGb3JHcmlkPWUuY2xpcElkKyItZ3JpZCIsZS5jbGlwSWRGb3JTdWJjaGFydD1lLmNsaXBJZCsiLXN1YmNoYXJ0IixlLmNsaXBQYXRoPWUuZ2V0Q2xpcFBhdGgoZS5jbGlwSWQpLGUuY2xpcFBhdGhGb3JYQXhpcz1lLmdldENsaXBQYXRoKGUuY2xpcElkRm9yWEF4aXMpLGUuY2xpcFBhdGhGb3JZQXhpcz1lLmdldENsaXBQYXRoKGUuY2xpcElkRm9yWUF4aXMpLGUuY2xpcFBhdGhGb3JHcmlkPWUuZ2V0Q2xpcFBhdGgoZS5jbGlwSWRGb3JHcmlkKSxlLmNsaXBQYXRoRm9yU3ViY2hhcnQ9ZS5nZXRDbGlwUGF0aChlLmNsaXBJZEZvclN1YmNoYXJ0KSxlLmRyYWdTdGFydD1udWxsLGUuZHJhZ2dpbmc9ITEsZS5mbG93aW5nPSExLGUuY2FuY2VsQ2xpY2s9ITEsZS5tb3VzZW92ZXI9ITEsZS50cmFuc2l0aW5nPSExLGUuY29sb3I9ZS5nZW5lcmF0ZUNvbG9yKCksZS5sZXZlbENvbG9yPWUuZ2VuZXJhdGVMZXZlbENvbG9yKCksZS5kYXRhVGltZUZvcm1hdD1uLmRhdGFfeExvY2FsdGltZT90LnRpbWUuZm9ybWF0OnQudGltZS5mb3JtYXQudXRjLGUuYXhpc1RpbWVGb3JtYXQ9bi5heGlzX3hfbG9jYWx0aW1lP3QudGltZS5mb3JtYXQ6dC50aW1lLmZvcm1hdC51dGMsZS5kZWZhdWx0QXhpc1RpbWVGb3JtYXQ9ZS5heGlzVGltZUZvcm1hdC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9XSxbIiUtbS8lLWQiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERheSgpJiYxIT09ZS5nZXREYXRlKCl9XSxbIiUtbS8lLWQiLGZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5nZXREYXRlKCl9XSxbIiUtbS8lLWQiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9XSxbIiVZLyUtbS8lLWQiLGZ1bmN0aW9uKCl7cmV0dXJuITB9XV0pLGUuaGlkZGVuVGFyZ2V0SWRzPVtdLGUuaGlkZGVuTGVnZW5kSWRzPVtdLGUuZm9jdXNlZFRhcmdldElkcz1bXSxlLmRlZm9jdXNlZFRhcmdldElkcz1bXSxlLnhPcmllbnQ9bi5heGlzX3JvdGF0ZWQ/bi5heGlzX3hfaW5uZXI/InJpZ2h0IjoibGVmdCI6bi5heGlzX3hfaW5uZXI/InRvcCI6ImJvdHRvbSIsZS55T3JpZW50PW4uYXhpc19yb3RhdGVkP24uYXhpc195X2lubmVyPyJ0b3AiOiJib3R0b20iOm4uYXhpc195X2lubmVyPyJyaWdodCI6ImxlZnQiLGUueTJPcmllbnQ9bi5heGlzX3JvdGF0ZWQ/bi5heGlzX3kyX2lubmVyPyJib3R0b20iOiJ0b3AiOm4uYXhpc195Ml9pbm5lcj8ibGVmdCI6InJpZ2h0IixlLnN1YlhPcmllbnQ9bi5heGlzX3JvdGF0ZWQ/ImxlZnQiOiJib3R0b20iLGUuaXNMZWdlbmRSaWdodD0icmlnaHQiPT09bi5sZWdlbmRfcG9zaXRpb24sZS5pc0xlZ2VuZEluc2V0PSJpbnNldCI9PT1uLmxlZ2VuZF9wb3NpdGlvbixlLmlzTGVnZW5kVG9wPSJ0b3AtbGVmdCI9PT1uLmxlZ2VuZF9pbnNldF9hbmNob3J8fCJ0b3AtcmlnaHQiPT09bi5sZWdlbmRfaW5zZXRfYW5jaG9yLGUuaXNMZWdlbmRMZWZ0PSJ0b3AtbGVmdCI9PT1uLmxlZ2VuZF9pbnNldF9hbmNob3J8fCJib3R0b20tbGVmdCI9PT1uLmxlZ2VuZF9pbnNldF9hbmNob3IsZS5sZWdlbmRTdGVwPTAsZS5sZWdlbmRJdGVtV2lkdGg9MCxlLmxlZ2VuZEl0ZW1IZWlnaHQ9MCxlLmN1cnJlbnRNYXhUaWNrV2lkdGhzPXt4OjAseTowLHkyOjB9LGUucm90YXRlZF9wYWRkaW5nX2xlZnQ9MzAsZS5yb3RhdGVkX3BhZGRpbmdfcmlnaHQ9bi5heGlzX3JvdGF0ZWQmJiFuLmF4aXNfeF9zaG93PzA6MzAsZS5yb3RhdGVkX3BhZGRpbmdfdG9wPTUsZS53aXRob3V0RmFkZUluPXt9LGUuaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQ9dm9pZCAwLGUuYXhlcy5zdWJ4PXQuc2VsZWN0QWxsKFtdKX0seC5pbml0Q2hhcnRFbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuaW5pdEJhciYmdGhpcy5pbml0QmFyKCksdGhpcy5pbml0TGluZSYmdGhpcy5pbml0TGluZSgpLHRoaXMuaW5pdEFyYyYmdGhpcy5pbml0QXJjKCksdGhpcy5pbml0R2F1Z2UmJnRoaXMuaW5pdEdhdWdlKCksdGhpcy5pbml0VGV4dCYmdGhpcy5pbml0VGV4dCgpfSx4LmluaXRXaXRoRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxvPXIuZDMscz1yLmNvbmZpZyxpPSEwO3IuYXhpcz1uZXcgUihyKSxyLmluaXRQaWUmJnIuaW5pdFBpZSgpLHIuaW5pdEJydXNoJiZyLmluaXRCcnVzaCgpLHIuaW5pdFpvb20mJnIuaW5pdFpvb20oKSxzLmJpbmR0bz8iZnVuY3Rpb24iPT10eXBlb2Ygcy5iaW5kdG8ubm9kZT9yLnNlbGVjdENoYXJ0PXMuYmluZHRvOnIuc2VsZWN0Q2hhcnQ9by5zZWxlY3Qocy5iaW5kdG8pOnIuc2VsZWN0Q2hhcnQ9by5zZWxlY3RBbGwoW10pLHIuc2VsZWN0Q2hhcnQuZW1wdHkoKSYmKHIuc2VsZWN0Q2hhcnQ9by5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnN0eWxlKCJvcGFjaXR5IiwwKSxyLm9ic2VydmVJbnNlcnRlZChyLnNlbGVjdENoYXJ0KSxpPSExKSxyLnNlbGVjdENoYXJ0Lmh0bWwoIiIpLmNsYXNzZWQoImMzIiwhMCksci5kYXRhLnhzPXt9LHIuZGF0YS50YXJnZXRzPXIuY29udmVydERhdGFUb1RhcmdldHMoZSkscy5kYXRhX2ZpbHRlciYmKHIuZGF0YS50YXJnZXRzPXIuZGF0YS50YXJnZXRzLmZpbHRlcihzLmRhdGFfZmlsdGVyKSkscy5kYXRhX2hpZGUmJnIuYWRkSGlkZGVuVGFyZ2V0SWRzKCEwPT09cy5kYXRhX2hpZGU/ci5tYXBUb0lkcyhyLmRhdGEudGFyZ2V0cyk6cy5kYXRhX2hpZGUpLHMubGVnZW5kX2hpZGUmJnIuYWRkSGlkZGVuTGVnZW5kSWRzKCEwPT09cy5sZWdlbmRfaGlkZT9yLm1hcFRvSWRzKHIuZGF0YS50YXJnZXRzKTpzLmxlZ2VuZF9oaWRlKSxyLnVwZGF0ZVNpemVzKCksci51cGRhdGVTY2FsZXMoKSxyLnguZG9tYWluKG8uZXh0ZW50KHIuZ2V0WERvbWFpbihyLmRhdGEudGFyZ2V0cykpKSxyLnkuZG9tYWluKHIuZ2V0WURvbWFpbihyLmRhdGEudGFyZ2V0cywieSIpKSxyLnkyLmRvbWFpbihyLmdldFlEb21haW4oci5kYXRhLnRhcmdldHMsInkyIikpLHIuc3ViWC5kb21haW4oci54LmRvbWFpbigpKSxyLnN1YlkuZG9tYWluKHIueS5kb21haW4oKSksci5zdWJZMi5kb21haW4oci55Mi5kb21haW4oKSksci5vcmdYRG9tYWluPXIueC5kb21haW4oKSxyLmJydXNoJiZyLmJydXNoLnNjYWxlKHIuc3ViWCkscy56b29tX2VuYWJsZWQmJnIuem9vbS5zY2FsZShyLngpLHIuc3ZnPXIuc2VsZWN0Q2hhcnQuYXBwZW5kKCJzdmciKS5zdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKS5vbigibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gcy5vbm1vdXNlb3Zlci5jYWxsKHIpfSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHMub25tb3VzZW91dC5jYWxsKHIpfSksci5jb25maWcuc3ZnX2NsYXNzbmFtZSYmci5zdmcuYXR0cigiY2xhc3MiLHIuY29uZmlnLnN2Z19jbGFzc25hbWUpLHQ9ci5zdmcuYXBwZW5kKCJkZWZzIiksci5jbGlwQ2hhcnQ9ci5hcHBlbmRDbGlwKHQsci5jbGlwSWQpLHIuY2xpcFhBeGlzPXIuYXBwZW5kQ2xpcCh0LHIuY2xpcElkRm9yWEF4aXMpLHIuY2xpcFlBeGlzPXIuYXBwZW5kQ2xpcCh0LHIuY2xpcElkRm9yWUF4aXMpLHIuY2xpcEdyaWQ9ci5hcHBlbmRDbGlwKHQsci5jbGlwSWRGb3JHcmlkKSxyLmNsaXBTdWJjaGFydD1yLmFwcGVuZENsaXAodCxyLmNsaXBJZEZvclN1YmNoYXJ0KSxyLnVwZGF0ZVN2Z1NpemUoKSxuPXIubWFpbj1yLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLHIuZ2V0VHJhbnNsYXRlKCJtYWluIikpLHIuaW5pdFN1YmNoYXJ0JiZyLmluaXRTdWJjaGFydCgpLHIuaW5pdFRvb2x0aXAmJnIuaW5pdFRvb2x0aXAoKSxyLmluaXRMZWdlbmQmJnIuaW5pdExlZ2VuZCgpLHIuaW5pdFRpdGxlJiZyLmluaXRUaXRsZSgpLG4uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGEudGV4dCsiICIrYS5lbXB0eSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLHIuaW5pdFJlZ2lvbigpLHIuaW5pdEdyaWQoKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsci5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLGEuY2hhcnQpLHMuZ3JpZF9saW5lc19mcm9udCYmci5pbml0R3JpZExpbmVzKCksci5pbml0RXZlbnRSZWN0KCksci5pbml0Q2hhcnRFbGVtZW50cygpLG4uaW5zZXJ0KCJyZWN0IixzLnpvb21fcHJpdmlsZWdlZD9udWxsOiJnLiIrYS5yZWdpb25zKS5hdHRyKCJjbGFzcyIsYS56b29tUmVjdCkuYXR0cigid2lkdGgiLHIud2lkdGgpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLnN0eWxlKCJvcGFjaXR5IiwwKS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCkscy5heGlzX3hfZXh0ZW50JiZyLmJydXNoLmV4dGVudChyLmdldERlZmF1bHRFeHRlbnQoKSksci5heGlzLmluaXQoKSxyLnVwZGF0ZVRhcmdldHMoci5kYXRhLnRhcmdldHMpLGkmJihyLnVwZGF0ZURpbWVuc2lvbigpLHIuY29uZmlnLm9uaW5pdC5jYWxsKHIpLHIucmVkcmF3KHt3aXRoVHJhbnNpdGlvbjohMSx3aXRoVHJhbnNmb3JtOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhUcmFuc2l0aW9uRm9yQXhpczohMX0pKSxyLmJpbmRSZXNpemUoKSxyLmFwaS5lbGVtZW50PXIuc2VsZWN0Q2hhcnQubm9kZSgpfSx4LnNtb290aExpbmVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczsiZ3JpZCI9PT10JiZlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1uLmQzLnNlbGVjdCh0aGlzKSx0PWUuYXR0cigieDEiKSxyPWUuYXR0cigieDIiKSxvPWUuYXR0cigieTEiKSxzPWUuYXR0cigieTIiKTtlLmF0dHIoe3gxOk1hdGguY2VpbCh0KSx4MjpNYXRoLmNlaWwocikseTE6TWF0aC5jZWlsKG8pLHkyOk1hdGguY2VpbChzKX0pfSl9LHgudXBkYXRlU2l6ZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmxlZ2VuZD9lLmdldExlZ2VuZEhlaWdodCgpOjAscj1lLmxlZ2VuZD9lLmdldExlZ2VuZFdpZHRoKCk6MCxvPWUuaXNMZWdlbmRSaWdodHx8ZS5pc0xlZ2VuZEluc2V0PzA6bixzPWUuaGFzQXJjVHlwZSgpLGk9dC5heGlzX3JvdGF0ZWR8fHM/MDplLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ4IiksYT10LnN1YmNoYXJ0X3Nob3cmJiFzP3Quc3ViY2hhcnRfc2l6ZV9oZWlnaHQraTowO2UuY3VycmVudFdpZHRoPWUuZ2V0Q3VycmVudFdpZHRoKCksZS5jdXJyZW50SGVpZ2h0PWUuZ2V0Q3VycmVudEhlaWdodCgpLGUubWFyZ2luPXQuYXhpc19yb3RhdGVkP3t0b3A6ZS5nZXRIb3Jpem9udGFsQXhpc0hlaWdodCgieTIiKStlLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6cz8wOmUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTplLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ5IikrbytlLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDphKyhzPzA6ZS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKSl9Ont0b3A6NCtlLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6cz8wOmUuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTppK2ErbytlLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDpzPzA6ZS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKX0sZS5tYXJnaW4yPXQuYXhpc19yb3RhdGVkP3t0b3A6ZS5tYXJnaW4udG9wLHJpZ2h0Ok5hTixib3R0b206MjArbyxsZWZ0OmUucm90YXRlZF9wYWRkaW5nX2xlZnR9Ont0b3A6ZS5jdXJyZW50SGVpZ2h0LWEtbyxyaWdodDpOYU4sYm90dG9tOmkrbyxsZWZ0OmUubWFyZ2luLmxlZnR9LGUubWFyZ2luMz17dG9wOjAscmlnaHQ6TmFOLGJvdHRvbTowLGxlZnQ6MH0sZS51cGRhdGVTaXplRm9yTGVnZW5kJiZlLnVwZGF0ZVNpemVGb3JMZWdlbmQobixyKSxlLndpZHRoPWUuY3VycmVudFdpZHRoLWUubWFyZ2luLmxlZnQtZS5tYXJnaW4ucmlnaHQsZS5oZWlnaHQ9ZS5jdXJyZW50SGVpZ2h0LWUubWFyZ2luLnRvcC1lLm1hcmdpbi5ib3R0b20sZS53aWR0aDwwJiYoZS53aWR0aD0wKSxlLmhlaWdodDwwJiYoZS5oZWlnaHQ9MCksZS53aWR0aDI9dC5heGlzX3JvdGF0ZWQ/ZS5tYXJnaW4ubGVmdC1lLnJvdGF0ZWRfcGFkZGluZ19sZWZ0LWUucm90YXRlZF9wYWRkaW5nX3JpZ2h0OmUud2lkdGgsZS5oZWlnaHQyPXQuYXhpc19yb3RhdGVkP2UuaGVpZ2h0OmUuY3VycmVudEhlaWdodC1lLm1hcmdpbjIudG9wLWUubWFyZ2luMi5ib3R0b20sZS53aWR0aDI8MCYmKGUud2lkdGgyPTApLGUuaGVpZ2h0MjwwJiYoZS5oZWlnaHQyPTApLGUuYXJjV2lkdGg9ZS53aWR0aC0oZS5pc0xlZ2VuZFJpZ2h0P3IrMTA6MCksZS5hcmNIZWlnaHQ9ZS5oZWlnaHQtKGUuaXNMZWdlbmRSaWdodD8wOjEwKSxlLmhhc1R5cGUoImdhdWdlIikmJiF0LmdhdWdlX2Z1bGxDaXJjbGUmJihlLmFyY0hlaWdodCs9ZS5oZWlnaHQtZS5nZXRHYXVnZUxhYmVsSGVpZ2h0KCkpLGUudXBkYXRlUmFkaXVzJiZlLnVwZGF0ZVJhZGl1cygpLGUuaXNMZWdlbmRSaWdodCYmcyYmKGUubWFyZ2luMy5sZWZ0PWUuYXJjV2lkdGgvMisxLjEqZS5yYWRpdXNFeHBhbmRlZCl9LHgudXBkYXRlVGFyZ2V0cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3QudXBkYXRlVGFyZ2V0c0ZvclRleHQoZSksdC51cGRhdGVUYXJnZXRzRm9yQmFyKGUpLHQudXBkYXRlVGFyZ2V0c0ZvckxpbmUoZSksdC5oYXNBcmNUeXBlKCkmJnQudXBkYXRlVGFyZ2V0c0ZvckFyYyYmdC51cGRhdGVUYXJnZXRzRm9yQXJjKGUpLHQudXBkYXRlVGFyZ2V0c0ZvclN1YmNoYXJ0JiZ0LnVwZGF0ZVRhcmdldHNGb3JTdWJjaGFydChlKSx0LnNob3dUYXJnZXRzKCl9LHguc2hvd1RhcmdldHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2Uuc3ZnLnNlbGVjdEFsbCgiLiIrYS50YXJnZXQpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pc1RhcmdldFRvU2hvdyh0LmlkKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLmNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSl9LHgucmVkcmF3PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxsLHUsYyxkLF8scCxmLG0saCxnLGIsRSx5LHYsVCxDLE8sUyxSLGoseCxMLEQsdyxNPXRoaXMsaz1NLm1haW4sST1NLmQzLFA9TS5jb25maWcsTj1NLmdldFNoYXBlSW5kaWNlcyhNLmlzQXJlYVR5cGUpLEg9TS5nZXRTaGFwZUluZGljZXMoTS5pc0JhclR5cGUpLEY9TS5nZXRTaGFwZUluZGljZXMoTS5pc0xpbmVUeXBlKSxCPU0uaGFzQXJjVHlwZSgpLFU9TS5maWx0ZXJUYXJnZXRzVG9TaG93KE0uZGF0YS50YXJnZXRzKSxHPU0ueHYuYmluZChNKTtpZihlPWV8fHt9LG49QShlLCJ3aXRoWSIsITApLHI9QShlLCJ3aXRoU3ViY2hhcnQiLCEwKSxvPUEoZSwid2l0aFRyYW5zaXRpb24iLCEwKSxsPUEoZSwid2l0aFRyYW5zZm9ybSIsITEpLHU9QShlLCJ3aXRoVXBkYXRlWERvbWFpbiIsITEpLGM9QShlLCJ3aXRoVXBkYXRlT3JnWERvbWFpbiIsITEpLGQ9QShlLCJ3aXRoVHJpbVhEb21haW4iLCEwKSxtPUEoZSwid2l0aFVwZGF0ZVhBeGlzIix1KSxfPUEoZSwid2l0aExlZ2VuZCIsITEpLHA9QShlLCJ3aXRoRXZlbnRSZWN0IiwhMCksZj1BKGUsIndpdGhEaW1lbnNpb24iLCEwKSxzPUEoZSwid2l0aFRyYW5zaXRpb25Gb3JFeGl0IixvKSxpPUEoZSwid2l0aFRyYW5zaXRpb25Gb3JBeGlzIixvKSx2PW8/UC50cmFuc2l0aW9uX2R1cmF0aW9uOjAsVD1zP3Y6MCxDPWk/djowLHQ9dHx8TS5heGlzLmdlbmVyYXRlVHJhbnNpdGlvbnMoQyksXyYmUC5sZWdlbmRfc2hvdz9NLnVwZGF0ZUxlZ2VuZChNLm1hcFRvSWRzKE0uZGF0YS50YXJnZXRzKSxlLHQpOmYmJk0udXBkYXRlRGltZW5zaW9uKCEwKSxNLmlzQ2F0ZWdvcml6ZWQoKSYmMD09PVUubGVuZ3RoJiZNLnguZG9tYWluKFswLE0uYXhlcy54LnNlbGVjdEFsbCgiLnRpY2siKS5zaXplKCldKSxVLmxlbmd0aD8oTS51cGRhdGVYRG9tYWluKFUsdSxjLGQpLFAuYXhpc194X3RpY2tfdmFsdWVzfHwoUj1NLmF4aXMudXBkYXRlWEF4aXNUaWNrVmFsdWVzKFUpKSk6KE0ueEF4aXMudGlja1ZhbHVlcyhbXSksTS5zdWJYQXhpcy50aWNrVmFsdWVzKFtdKSksUC56b29tX3Jlc2NhbGUmJiFlLmZsb3cmJihMPU0ueC5vcmdEb21haW4oKSksTS55LmRvbWFpbihNLmdldFlEb21haW4oVSwieSIsTCkpLE0ueTIuZG9tYWluKE0uZ2V0WURvbWFpbihVLCJ5MiIsTCkpLCFQLmF4aXNfeV90aWNrX3ZhbHVlcyYmUC5heGlzX3lfdGlja19jb3VudCYmTS55QXhpcy50aWNrVmFsdWVzKE0uYXhpcy5nZW5lcmF0ZVRpY2tWYWx1ZXMoTS55LmRvbWFpbigpLFAuYXhpc195X3RpY2tfY291bnQpKSwhUC5heGlzX3kyX3RpY2tfdmFsdWVzJiZQLmF4aXNfeTJfdGlja19jb3VudCYmTS55MkF4aXMudGlja1ZhbHVlcyhNLmF4aXMuZ2VuZXJhdGVUaWNrVmFsdWVzKE0ueTIuZG9tYWluKCksUC5heGlzX3kyX3RpY2tfY291bnQpKSxNLmF4aXMucmVkcmF3KHQsQiksTS5heGlzLnVwZGF0ZUxhYmVscyhvKSwodXx8bSkmJlUubGVuZ3RoKWlmKFAuYXhpc194X3RpY2tfY3VsbGluZyYmUil7Zm9yKGo9MTtqPFIubGVuZ3RoO2orKylpZihSLmxlbmd0aC9qPFAuYXhpc194X3RpY2tfY3VsbGluZ19tYXgpe3g9ajticmVha31NLnN2Zy5zZWxlY3RBbGwoIi4iK2EuYXhpc1grIiAudGljayB0ZXh0IikuZWFjaChmdW5jdGlvbihlKXt2YXIgdD1SLmluZGV4T2YoZSk7dD49MCYmSS5zZWxlY3QodGhpcykuc3R5bGUoImRpc3BsYXkiLHQleD8ibm9uZSI6ImJsb2NrIil9KX1lbHNlIE0uc3ZnLnNlbGVjdEFsbCgiLiIrYS5heGlzWCsiIC50aWNrIHRleHQiKS5zdHlsZSgiZGlzcGxheSIsImJsb2NrIik7aD1NLmdlbmVyYXRlRHJhd0FyZWE/TS5nZW5lcmF0ZURyYXdBcmVhKE4sITEpOnZvaWQgMCxnPU0uZ2VuZXJhdGVEcmF3QmFyP00uZ2VuZXJhdGVEcmF3QmFyKEgpOnZvaWQgMCxiPU0uZ2VuZXJhdGVEcmF3TGluZT9NLmdlbmVyYXRlRHJhd0xpbmUoRiwhMSk6dm9pZCAwLEU9TS5nZW5lcmF0ZVhZRm9yVGV4dChOLEgsRiwhMCkseT1NLmdlbmVyYXRlWFlGb3JUZXh0KE4sSCxGLCExKSxuJiYoTS5zdWJZLmRvbWFpbihNLmdldFlEb21haW4oVSwieSIpKSxNLnN1YlkyLmRvbWFpbihNLmdldFlEb21haW4oVSwieTIiKSkpLE0udXBkYXRlWGdyaWRGb2N1cygpLGsuc2VsZWN0KCJ0ZXh0LiIrYS50ZXh0KyIuIithLmVtcHR5KS5hdHRyKCJ4IixNLndpZHRoLzIpLmF0dHIoInkiLE0uaGVpZ2h0LzIpLnRleHQoUC5kYXRhX2VtcHR5X2xhYmVsX3RleHQpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsVS5sZW5ndGg/MDoxKSxNLnVwZGF0ZUdyaWQodiksTS51cGRhdGVSZWdpb24odiksTS51cGRhdGVCYXIoVCksTS51cGRhdGVMaW5lKFQpLE0udXBkYXRlQXJlYShUKSxNLnVwZGF0ZUNpcmNsZSgpLE0uaGFzRGF0YUxhYmVsKCkmJk0udXBkYXRlVGV4dChUKSxNLnJlZHJhd1RpdGxlJiZNLnJlZHJhd1RpdGxlKCksTS5yZWRyYXdBcmMmJk0ucmVkcmF3QXJjKHYsVCxsKSxNLnJlZHJhd1N1YmNoYXJ0JiZNLnJlZHJhd1N1YmNoYXJ0KHIsdCx2LFQsTixILEYpLGsuc2VsZWN0QWxsKCIuIithLnNlbGVjdGVkQ2lyY2xlcykuZmlsdGVyKE0uaXNCYXJUeXBlLmJpbmQoTSkpLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksUC5pbnRlcmFjdGlvbl9lbmFibGVkJiYhZS5mbG93JiZwJiYoTS5yZWRyYXdFdmVudFJlY3QoKSxNLnVwZGF0ZVpvb20mJk0udXBkYXRlWm9vbSgpKSxNLnVwZGF0ZUNpcmNsZVkoKSxEPShNLmNvbmZpZy5heGlzX3JvdGF0ZWQ/TS5jaXJjbGVZOk0uY2lyY2xlWCkuYmluZChNKSx3PShNLmNvbmZpZy5heGlzX3JvdGF0ZWQ/TS5jaXJjbGVYOk0uY2lyY2xlWSkuYmluZChNKSxlLmZsb3cmJihTPU0uZ2VuZXJhdGVGbG93KHt0YXJnZXRzOlUsZmxvdzplLmZsb3csZHVyYXRpb246ZS5mbG93LmR1cmF0aW9uLGRyYXdCYXI6ZyxkcmF3TGluZTpiLGRyYXdBcmVhOmgsY3g6RCxjeTp3LHh2OkcseEZvclRleHQ6RSx5Rm9yVGV4dDp5fSkpLCh2fHxTKSYmTS5pc1RhYlZpc2libGUoKT9JLnRyYW5zaXRpb24oKS5kdXJhdGlvbih2KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9W107W00ucmVkcmF3QmFyKGcsITApLE0ucmVkcmF3TGluZShiLCEwKSxNLnJlZHJhd0FyZWEoaCwhMCksTS5yZWRyYXdDaXJjbGUoRCx3LCEwKSxNLnJlZHJhd1RleHQoRSx5LGUuZmxvdywhMCksTS5yZWRyYXdSZWdpb24oITApLE0ucmVkcmF3R3JpZCghMCldLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pfSksTz1NLmdlbmVyYXRlV2FpdCgpLHQuZm9yRWFjaChmdW5jdGlvbihlKXtPLmFkZChlKX0pfSkuY2FsbChPLGZ1bmN0aW9uKCl7UyYmUygpLFAub25yZW5kZXJlZCYmUC5vbnJlbmRlcmVkLmNhbGwoTSl9KTooTS5yZWRyYXdCYXIoZyksTS5yZWRyYXdMaW5lKGIpLE0ucmVkcmF3QXJlYShoKSxNLnJlZHJhd0NpcmNsZShELHcpLE0ucmVkcmF3VGV4dChFLHksZS5mbG93KSxNLnJlZHJhd1JlZ2lvbigpLE0ucmVkcmF3R3JpZCgpLFAub25yZW5kZXJlZCYmUC5vbnJlbmRlcmVkLmNhbGwoTSkpLE0ubWFwVG9JZHMoTS5kYXRhLnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24oZSl7TS53aXRob3V0RmFkZUluW2VdPSEwfSl9LHgudXBkYXRlQW5kUmVkcmF3PWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcyxyPW4uY29uZmlnO2U9ZXx8e30sZS53aXRoVHJhbnNpdGlvbj1BKGUsIndpdGhUcmFuc2l0aW9uIiwhMCksZS53aXRoVHJhbnNmb3JtPUEoZSwid2l0aFRyYW5zZm9ybSIsITEpLGUud2l0aExlZ2VuZD1BKGUsIndpdGhMZWdlbmQiLCExKSxlLndpdGhVcGRhdGVYRG9tYWluPSEwLGUud2l0aFVwZGF0ZU9yZ1hEb21haW49ITAsZS53aXRoVHJhbnNpdGlvbkZvckV4aXQ9ITEsZS53aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybT1BKGUsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIixlLndpdGhUcmFuc2l0aW9uKSxuLnVwZGF0ZVNpemVzKCksZS53aXRoTGVnZW5kJiZyLmxlZ2VuZF9zaG93fHwodD1uLmF4aXMuZ2VuZXJhdGVUcmFuc2l0aW9ucyhlLndpdGhUcmFuc2l0aW9uRm9yQXhpcz9yLnRyYW5zaXRpb25fZHVyYXRpb246MCksbi51cGRhdGVTY2FsZXMoKSxuLnVwZGF0ZVN2Z1NpemUoKSxuLnRyYW5zZm9ybUFsbChlLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtLHQpKSxuLnJlZHJhdyhlLHQpfSx4LnJlZHJhd1dpdGhvdXRSZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZWRyYXcoe3dpdGhZOiExLHdpdGhTdWJjaGFydDohMSx3aXRoRXZlbnRSZWN0OiExLHdpdGhUcmFuc2l0aW9uRm9yQXhpczohMX0pfSx4LmlzVGltZVNlcmllcz1mdW5jdGlvbigpe3JldHVybiJ0aW1lc2VyaWVzIj09PXRoaXMuY29uZmlnLmF4aXNfeF90eXBlfSx4LmlzQ2F0ZWdvcml6ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuYXhpc194X3R5cGUuaW5kZXhPZigiY2F0ZWdvciIpPj0wfSx4LmlzQ3VzdG9tWD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztyZXR1cm4hZS5pc1RpbWVTZXJpZXMoKSYmKHQuZGF0YV94fHxUKHQuZGF0YV94cykpfSx4LmlzVGltZVNlcmllc1k9ZnVuY3Rpb24oKXtyZXR1cm4idGltZXNlcmllcyI9PT10aGlzLmNvbmZpZy5heGlzX3lfdHlwZX0seC5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMsbz1yLmNvbmZpZztyZXR1cm4ibWFpbiI9PT1lPyh0PUUoci5tYXJnaW4ubGVmdCksbj1FKHIubWFyZ2luLnRvcCkpOiJjb250ZXh0Ij09PWU/KHQ9RShyLm1hcmdpbjIubGVmdCksbj1FKHIubWFyZ2luMi50b3ApKToibGVnZW5kIj09PWU/KHQ9ci5tYXJnaW4zLmxlZnQsbj1yLm1hcmdpbjMudG9wKToieCI9PT1lPyh0PTAsbj1vLmF4aXNfcm90YXRlZD8wOnIuaGVpZ2h0KToieSI9PT1lPyh0PTAsbj1vLmF4aXNfcm90YXRlZD9yLmhlaWdodDowKToieTIiPT09ZT8odD1vLmF4aXNfcm90YXRlZD8wOnIud2lkdGgsbj1vLmF4aXNfcm90YXRlZD8xOjApOiJzdWJ4Ij09PWU/KHQ9MCxuPW8uYXhpc19yb3RhdGVkPzA6ci5oZWlnaHQyKToiYXJjIj09PWUmJih0PXIuYXJjV2lkdGgvMixuPXIuYXJjSGVpZ2h0LzItKHIuaGFzVHlwZSgiZ2F1Z2UiKT82OjApKSwidHJhbnNsYXRlKCIrdCsiLCIrbisiKSJ9LHguaW5pdGlhbE9wYWNpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lLnZhbHVlJiZ0aGlzLndpdGhvdXRGYWRlSW5bZS5pZF0/MTowfSx4LmluaXRpYWxPcGFjaXR5Rm9yQ2lyY2xlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS52YWx1ZSYmdGhpcy53aXRob3V0RmFkZUluW2UuaWRdP3RoaXMub3BhY2l0eUZvckNpcmNsZShlKTowfSx4Lm9wYWNpdHlGb3JDaXJjbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9cCh0aGlzLmNvbmZpZy5wb2ludF9zaG93KT90aGlzLmNvbmZpZy5wb2ludF9zaG93KGUpOnRoaXMuY29uZmlnLnBvaW50X3Nob3csbj10PzE6MDtyZXR1cm4gXyhlLnZhbHVlKT90aGlzLmlzU2NhdHRlclR5cGUoZSk/LjU6bjowfSx4Lm9wYWNpdHlGb3JUZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGF0YUxhYmVsKCk/MTowfSx4Lnh4PWZ1bmN0aW9uKGUpe3JldHVybiBlP3RoaXMueChlLngpOm51bGx9LHgueHY9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUudmFsdWU7cmV0dXJuIHQuaXNUaW1lU2VyaWVzKCk/bj10LnBhcnNlRGF0ZShlLnZhbHVlKTp0LmlzQ2F0ZWdvcml6ZWQoKSYmInN0cmluZyI9PXR5cGVvZiBlLnZhbHVlJiYobj10LmNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcy5pbmRleE9mKGUudmFsdWUpKSxNYXRoLmNlaWwodC54KG4pKX0seC55dj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5heGlzJiYieTIiPT09ZS5heGlzP3QueTI6dC55O3JldHVybiBNYXRoLmNlaWwobihlLnZhbHVlKSl9LHguc3VieHg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy5zdWJYKGUueCk6bnVsbH0seC50cmFuc2Zvcm1NYWluPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHM9dGhpczt0JiZ0LmF4aXNYP249dC5heGlzWDoobj1zLm1haW4uc2VsZWN0KCIuIithLmF4aXNYKSxlJiYobj1uLnRyYW5zaXRpb24oKSkpLHQmJnQuYXhpc1k/cj10LmF4aXNZOihyPXMubWFpbi5zZWxlY3QoIi4iK2EuYXhpc1kpLGUmJihyPXIudHJhbnNpdGlvbigpKSksdCYmdC5heGlzWTI/bz10LmF4aXNZMjoobz1zLm1haW4uc2VsZWN0KCIuIithLmF4aXNZMiksZSYmKG89by50cmFuc2l0aW9uKCkpKSwoZT9zLm1haW4udHJhbnNpdGlvbigpOnMubWFpbikuYXR0cigidHJhbnNmb3JtIixzLmdldFRyYW5zbGF0ZSgibWFpbiIpKSxuLmF0dHIoInRyYW5zZm9ybSIscy5nZXRUcmFuc2xhdGUoIngiKSksci5hdHRyKCJ0cmFuc2Zvcm0iLHMuZ2V0VHJhbnNsYXRlKCJ5IikpLG8uYXR0cigidHJhbnNmb3JtIixzLmdldFRyYW5zbGF0ZSgieTIiKSkscy5tYWluLnNlbGVjdCgiLiIrYS5jaGFydEFyY3MpLmF0dHIoInRyYW5zZm9ybSIscy5nZXRUcmFuc2xhdGUoImFyYyIpKX0seC50cmFuc2Zvcm1BbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24udHJhbnNmb3JtTWFpbihlLHQpLG4uY29uZmlnLnN1YmNoYXJ0X3Nob3cmJm4udHJhbnNmb3JtQ29udGV4dChlLHQpLG4ubGVnZW5kJiZuLnRyYW5zZm9ybUxlZ2VuZChlKX0seC51cGRhdGVTdmdTaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuc3ZnLnNlbGVjdCgiLmMzLWJydXNoIC5iYWNrZ3JvdW5kIik7ZS5zdmcuYXR0cigid2lkdGgiLGUuY3VycmVudFdpZHRoKS5hdHRyKCJoZWlnaHQiLGUuY3VycmVudEhlaWdodCksZS5zdmcuc2VsZWN0QWxsKFsiIyIrZS5jbGlwSWQsIiMiK2UuY2xpcElkRm9yR3JpZF0pLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxlLnN2Zy5zZWxlY3QoIiMiK2UuY2xpcElkRm9yWEF4aXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoIngiLGUuZ2V0WEF4aXNDbGlwWC5iaW5kKGUpKS5hdHRyKCJ5IixlLmdldFhBeGlzQ2xpcFkuYmluZChlKSkuYXR0cigid2lkdGgiLGUuZ2V0WEF4aXNDbGlwV2lkdGguYmluZChlKSkuYXR0cigiaGVpZ2h0IixlLmdldFhBeGlzQ2xpcEhlaWdodC5iaW5kKGUpKSxlLnN2Zy5zZWxlY3QoIiMiK2UuY2xpcElkRm9yWUF4aXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoIngiLGUuZ2V0WUF4aXNDbGlwWC5iaW5kKGUpKS5hdHRyKCJ5IixlLmdldFlBeGlzQ2xpcFkuYmluZChlKSkuYXR0cigid2lkdGgiLGUuZ2V0WUF4aXNDbGlwV2lkdGguYmluZChlKSkuYXR0cigiaGVpZ2h0IixlLmdldFlBeGlzQ2xpcEhlaWdodC5iaW5kKGUpKSxlLnN2Zy5zZWxlY3QoIiMiK2UuY2xpcElkRm9yU3ViY2hhcnQpLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuc2l6ZSgpP3QuYXR0cigiaGVpZ2h0Iik6MCksZS5zdmcuc2VsZWN0KCIuIithLnpvb21SZWN0KS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksZS5zZWxlY3RDaGFydC5zdHlsZSgibWF4LWhlaWdodCIsZS5jdXJyZW50SGVpZ2h0KyJweCIpfSx4LnVwZGF0ZURpbWVuc2lvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2V8fCh0LmNvbmZpZy5heGlzX3JvdGF0ZWQ/KHQuYXhlcy54LmNhbGwodC54QXhpcyksdC5heGVzLnN1YnguY2FsbCh0LnN1YlhBeGlzKSk6KHQuYXhlcy55LmNhbGwodC55QXhpcyksdC5heGVzLnkyLmNhbGwodC55MkF4aXMpKSksdC51cGRhdGVTaXplcygpLHQudXBkYXRlU2NhbGVzKCksdC51cGRhdGVTdmdTaXplKCksdC50cmFuc2Zvcm1BbGwoITEpfSx4Lm9ic2VydmVJbnNlcnRlZD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXM7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyKXJldHVybiB2b2lkIHdpbmRvdy5jb25zb2xlLmVycm9yKCJNdXRhdGlvbk9ic2VydmVyIG5vdCBkZWZpbmVkLiIpO3Q9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpeyJjaGlsZExpc3QiPT09ci50eXBlJiZyLnByZXZpb3VzU2libGluZyYmKHQuZGlzY29ubmVjdCgpLG4uaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQ9d2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7ZS5ub2RlKCkucGFyZW50Tm9kZSYmKHdpbmRvdy5jbGVhckludGVydmFsKG4uaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQpLG4udXBkYXRlRGltZW5zaW9uKCksbi5icnVzaCYmbi5icnVzaC51cGRhdGUoKSxuLmNvbmZpZy5vbmluaXQuY2FsbChuKSxuLnJlZHJhdyh7d2l0aFRyYW5zZm9ybTohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVHJhbnNpdGlvbjohMSx3aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybTohMSx3aXRoTGVnZW5kOiEwfSksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpKX0sMTApKX0pfSksdC5vYnNlcnZlKGUubm9kZSgpLHthdHRyaWJ1dGVzOiEwLGNoaWxkTGlzdDohMCxjaGFyYWN0ZXJEYXRhOiEwfSl9LHguYmluZFJlc2l6ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztpZihlLnJlc2l6ZUZ1bmN0aW9uPWUuZ2VuZXJhdGVSZXNpemUoKSxlLnJlc2l6ZUZ1bmN0aW9uLmFkZChmdW5jdGlvbigpe3Qub25yZXNpemUuY2FsbChlKX0pLHQucmVzaXplX2F1dG8mJmUucmVzaXplRnVuY3Rpb24uYWRkKGZ1bmN0aW9uKCl7dm9pZCAwIT09ZS5yZXNpemVUaW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KGUucmVzaXplVGltZW91dCksZS5yZXNpemVUaW1lb3V0PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZGVsZXRlIGUucmVzaXplVGltZW91dCxlLmFwaS5mbHVzaCgpfSwxMDApfSksZS5yZXNpemVGdW5jdGlvbi5hZGQoZnVuY3Rpb24oKXt0Lm9ucmVzaXplZC5jYWxsKGUpfSksZS5yZXNpemVJZkVsZW1lbnREaXNwbGF5ZWQ9ZnVuY3Rpb24oKXtudWxsIT1lLmFwaSYmZS5hcGkuZWxlbWVudC5vZmZzZXRQYXJlbnQmJmUucmVzaXplRnVuY3Rpb24oKX0sd2luZG93LmF0dGFjaEV2ZW50KXdpbmRvdy5hdHRhY2hFdmVudCgib25yZXNpemUiLGUucmVzaXplSWZFbGVtZW50RGlzcGxheWVkKTtlbHNlIGlmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGUucmVzaXplSWZFbGVtZW50RGlzcGxheWVkLCExKTtlbHNle3ZhciBuPXdpbmRvdy5vbnJlc2l6ZTtuP24uYWRkJiZuLnJlbW92ZXx8KG49ZS5nZW5lcmF0ZVJlc2l6ZSgpLG4uYWRkKHdpbmRvdy5vbnJlc2l6ZSkpOm49ZS5nZW5lcmF0ZVJlc2l6ZSgpLG4uYWRkKGUucmVzaXplRnVuY3Rpb24pLHdpbmRvdy5vbnJlc2l6ZT1mdW5jdGlvbigpe2UuYXBpLmVsZW1lbnQub2Zmc2V0UGFyZW50JiZuKCl9fX0seC5nZW5lcmF0ZVJlc2l6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0LmZvckVhY2goZnVuY3Rpb24oZSl7ZSgpfSl9dmFyIHQ9W107cmV0dXJuIGUuYWRkPWZ1bmN0aW9uKGUpe3QucHVzaChlKX0sZS5yZW1vdmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXT09PWUpe3Quc3BsaWNlKG4sMSk7YnJlYWt9fSxlfSx4LmVuZGFsbD1mdW5jdGlvbihlLHQpe3ZhciBuPTA7ZS5lYWNoKGZ1bmN0aW9uKCl7KytufSkuZWFjaCgiZW5kIixmdW5jdGlvbigpey0tbnx8dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0seC5nZW5lcmF0ZVdhaXQ9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PWZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgdD0wO2UuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmVtcHR5KCkpcmV0dXJuIHZvaWQodCs9MSk7dHJ5e2UudHJhbnNpdGlvbigpfWNhdGNoKGUpe3QrPTF9fSksdD09PWUubGVuZ3RoJiYoY2xlYXJJbnRlcnZhbChyKSxuJiZuKCkpfSwxMCl9O3JldHVybiB0LmFkZD1mdW5jdGlvbih0KXtlLnB1c2godCl9LHR9LHgucGFyc2VEYXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/dD1lOiJzdHJpbmciPT10eXBlb2YgZT90PW4uZGF0YVRpbWVGb3JtYXQobi5jb25maWcuZGF0YV94Rm9ybWF0KS5wYXJzZShlKToib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmwoZSkpP3Q9bmV3IERhdGUoK2UpOiJudW1iZXIiIT10eXBlb2YgZXx8aXNOYU4oZSl8fCh0PW5ldyBEYXRlKCtlKSksdCYmIWlzTmFOKCt0KXx8d2luZG93LmNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSB4ICciK2UrIicgdG8gRGF0ZSBvYmplY3QiKSx0fSx4LmlzVGFiVmlzaWJsZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB2b2lkIDAhPT1kb2N1bWVudC5oaWRkZW4/ZT0iaGlkZGVuIjp2b2lkIDAhPT1kb2N1bWVudC5tb3pIaWRkZW4/ZT0ibW96SGlkZGVuIjp2b2lkIDAhPT1kb2N1bWVudC5tc0hpZGRlbj9lPSJtc0hpZGRlbiI6dm9pZCAwIT09ZG9jdW1lbnQud2Via2l0SGlkZGVuJiYoZT0id2Via2l0SGlkZGVuIiksIWRvY3VtZW50W2VdfSx4LmlzVmFsdWU9Xyx4LmlzRnVuY3Rpb249cCx4LmlzU3RyaW5nPW0seC5pc1VuZGVmaW5lZD1oLHguaXNEZWZpbmVkPWcseC5jZWlsMTA9Yix4LmFzSGFsZlBpeGVsPUUseC5kaWZmRG9tYWluPXkseC5pc0VtcHR5PXYseC5ub3RFbXB0eT1ULHgubm90RW1wdHk9VCx4LmdldE9wdGlvbj1BLHguaGFzVmFsdWU9Qyx4LnNhbml0aXNlPU8seC5nZXRQYXRoQm94PVMseC5DTEFTUz1hLEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgLSB3aGF0IGlzIHRyeWluZyB0byBiZSBib3VuZCBpcyBub3QgY2FsbGFibGUiKTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbj10aGlzLHI9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh0aGlzIGluc3RhbmNlb2Ygcj90aGlzOmUsdC5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfTtyZXR1cm4gci5wcm90b3R5cGU9dGhpcy5wcm90b3R5cGUsby5wcm90b3R5cGU9bmV3IHIsb30pLGZ1bmN0aW9uKCl7IlNWR1BhdGhTZWciaW4gd2luZG93fHwod2luZG93LlNWR1BhdGhTZWc9ZnVuY3Rpb24oZSx0LG4pe3RoaXMucGF0aFNlZ1R5cGU9ZSx0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXI9dCx0aGlzLl9vd25pbmdQYXRoU2VnTGlzdD1ufSx3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUuY2xhc3NuYW1lPSJTVkdQYXRoU2VnIix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX1VOS05PV049MCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSD0xLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUz0yLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTD0zLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUz00LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTD01LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM9Nix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMPTcsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM9OCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTD05LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUz0xMCx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUw9MTEsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM9MTIsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUw9MTMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTPTE0LHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTD0xNSx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUz0xNix3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTD0xNyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlM9MTgsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMPTE5LHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZS5fc2VnbWVudENoYW5nZWQ9ZnVuY3Rpb24oKXt0aGlzLl9vd25pbmdQYXRoU2VnTGlzdCYmdGhpcy5fb3duaW5nUGF0aFNlZ0xpc3Quc2VnbWVudENoYW5nZWQodGhpcyl9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoPWZ1bmN0aW9uKGUpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSCwieiIsZSl9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGgucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0Nsb3NlUGF0aF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXJ9LHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGgodm9pZCAwKX0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnM9ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19BQlMsIk0iLGUpLHRoaXMuX3g9dCx0aGlzLl95PW59LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ01vdmV0b0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnModm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbD1mdW5jdGlvbihlLHQsbil7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTCwibSIsZSksdGhpcy5feD10LHRoaXMuX3k9bn0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTW92ZXRvUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbCh2b2lkIDAsdGhpcy5feCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzPWZ1bmN0aW9uKGUsdCxuKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTLCJMIixlKSx0aGlzLl94PXQsdGhpcy5feT1ufSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9BYnNdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWw9ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19SRUwsImwiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW59LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b1JlbF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUywiQyIsZSksdGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5feDI9cyx0aGlzLl95Mj1pfSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNdIn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3gyKyIgIit0aGlzLl95MisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3gxLHRoaXMuX3kxLHRoaXMuX3gyLHRoaXMuX3kyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsIngxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feDE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ4MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3gyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsInkyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTI9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUwsImMiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3gyPXMsdGhpcy5feTI9aX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDErIiAiK3RoaXMuX3kxKyIgIit0aGlzLl94MisiICIrdGhpcy5feTIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MSx0aGlzLl95MSx0aGlzLl94Mix0aGlzLl95Mil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ4MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94MX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3gxPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsInkxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8pe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUywiUSIsZSksdGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MT1yLHRoaXMuX3kxPW99LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3gxLHRoaXMuX3kxKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsIngxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feDE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsInkxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feTE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMLCJxIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gxPXIsdGhpcy5feTE9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3gxKyIgIit0aGlzLl95MSsiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDEsdGhpcy5feTEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieDEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95MT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyxpLGEpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlMsIkEiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5fcjE9cix0aGlzLl9yMj1vLHRoaXMuX2FuZ2xlPXMsdGhpcy5fbGFyZ2VBcmNGbGFnPWksdGhpcy5fc3dlZXBGbGFnPWF9LHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0FyY0Fic10ifSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3IxKyIgIit0aGlzLl9yMisiICIrdGhpcy5fYW5nbGUrIiAiKyh0aGlzLl9sYXJnZUFyY0ZsYWc/IjEiOiIwIikrIiAiKyh0aGlzLl9zd2VlcEZsYWc/IjEiOiIwIikrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNBYnModm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl9yMSx0aGlzLl9yMix0aGlzLl9hbmdsZSx0aGlzLl9sYXJnZUFyY0ZsYWcsdGhpcy5fc3dlZXBGbGFnKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsInIxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3IxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcjE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwicjIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yMj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJhbmdsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmdsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2FuZ2xlPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsImxhcmdlQXJjRmxhZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9sYXJnZUFyY0ZsYWc9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwic3dlZXBGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3ZWVwRmxhZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3N3ZWVwRmxhZz1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbD1mdW5jdGlvbihlLHQsbixyLG8scyxpLGEpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUwsImEiLGUpLHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5fcjE9cix0aGlzLl9yMj1vLHRoaXMuX2FuZ2xlPXMsdGhpcy5fbGFyZ2VBcmNGbGFnPWksdGhpcy5fc3dlZXBGbGFnPWF9LHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0FyY1JlbF0ifSx3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3IxKyIgIit0aGlzLl9yMisiICIrdGhpcy5fYW5nbGUrIiAiKyh0aGlzLl9sYXJnZUFyY0ZsYWc/IjEiOiIwIikrIiAiKyh0aGlzLl9zd2VlcEZsYWc/IjEiOiIwIikrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl9yMSx0aGlzLl9yMix0aGlzLl9hbmdsZSx0aGlzLl9sYXJnZUFyY0ZsYWcsdGhpcy5fc3dlZXBGbGFnKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsInIxIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3IxfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcjE9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwicjIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yMj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJhbmdsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmdsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2FuZ2xlPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsImxhcmdlQXJjRmxhZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9sYXJnZUFyY0ZsYWc9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwic3dlZXBGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3ZWVwRmxhZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3N3ZWVwRmxhZz1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM9ZnVuY3Rpb24oZSx0KXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlMsIkgiLGUpLHRoaXMuX3g9dH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3h9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsdGhpcy5feCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD1mdW5jdGlvbihlLHQpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTCwiaCIsZSksdGhpcy5feD10fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKHZvaWQgMCx0aGlzLl94KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz1mdW5jdGlvbihlLHQpe3dpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcyx3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlMsIlYiLGUpLHRoaXMuX3k9dH0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpLHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh2b2lkIDAsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsPWZ1bmN0aW9uKGUsdCl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTCwidiIsZSksdGhpcy5feT10fSx3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKHZvaWQgMCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihlKXt0aGlzLl95PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTLCJTIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gyPXIsdGhpcy5feTI9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDIrIiAiK3RoaXMuX3kyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDIsdGhpcy5feTIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCxuLHIsbyl7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMLCJzIixlKSx0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gyPXIsdGhpcy5feTI9b30sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDIrIiAiK3RoaXMuX3kyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDIsdGhpcy5feTIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94PWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLl94Mj1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3kyPWUsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz1mdW5jdGlvbihlLHQsbil7d2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUywiVCIsZSksdGhpcy5feD10LHRoaXMuX3k9bn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzXSJ9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyh2b2lkIDAsdGhpcy5feCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3g9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3k9ZSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCxuKXt3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMLCJ0IixlKSx0aGlzLl94PXQsdGhpcy5feT1ufSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKSx3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxdIn0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feD1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feT1lLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoKHZvaWQgMCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnModm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwodm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Ficz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnModm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwodm9pZCAwLGUsdCl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz1mdW5jdGlvbihlLHQsbixyLG8scyl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh2b2lkIDAsZSx0LG4scixvLHMpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw9ZnVuY3Rpb24oZSx0LG4scixvLHMpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodm9pZCAwLGUsdCxuLHIsbyxzKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh2b2lkIDAsZSx0LG4scil9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwodm9pZCAwLGUsdCxuLHIpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnM9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficyh2b2lkIDAsZSx0LG4scixvLHMsaSl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbD1mdW5jdGlvbihlLHQsbixyLG8scyxpKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsKHZvaWQgMCxlLHQsbixyLG8scyxpKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsZSl9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwodm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnModm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwodm9pZCAwLGUpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyh2b2lkIDAsZSx0LG4scil9LHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHZvaWQgMCxlLHQsbixyKX0sd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHZvaWQgMCxlLHQpfSx3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodm9pZCAwLGUsdCl9LCJnZXRQYXRoU2VnQXRMZW5ndGgiaW4gd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZXx8KHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuZ2V0UGF0aFNlZ0F0TGVuZ3RoPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWV8fCFpc0Zpbml0ZShlKSl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cy4iO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dC5zZXRBdHRyaWJ1dGUoImQiLHRoaXMuZ2V0QXR0cmlidXRlKCJkIikpO3ZhciBuPXQucGF0aFNlZ0xpc3QubnVtYmVyT2ZJdGVtcy0xO2lmKG48PTApcmV0dXJuIDA7ZG97aWYodC5wYXRoU2VnTGlzdC5yZW1vdmVJdGVtKG4pLGU+dC5nZXRUb3RhbExlbmd0aCgpKWJyZWFrO24tLX13aGlsZShuPjApO3JldHVybiBufSkpLCJTVkdQYXRoU2VnTGlzdCJpbiB3aW5kb3d8fCh3aW5kb3cuU1ZHUGF0aFNlZ0xpc3Q9ZnVuY3Rpb24oZSl7dGhpcy5fcGF0aEVsZW1lbnQ9ZSx0aGlzLl9saXN0PXRoaXMuX3BhcnNlUGF0aCh0aGlzLl9wYXRoRWxlbWVudC5nZXRBdHRyaWJ1dGUoImQiKSksdGhpcy5fbXV0YXRpb25PYnNlcnZlckNvbmZpZz17YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkIl19LHRoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLl91cGRhdGVMaXN0RnJvbVBhdGhNdXRhdGlvbnMuYmluZCh0aGlzKSksdGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fcGF0aEVsZW1lbnQsdGhpcy5fbXV0YXRpb25PYnNlcnZlckNvbmZpZyl9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuY2xhc3NuYW1lPSJTVkdQYXRoU2VnTGlzdCIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUsIm51bWJlck9mSXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fbGlzdC5sZW5ndGh9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwicGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0aFNlZ0xpc3R8fCh0aGlzLl9wYXRoU2VnTGlzdD1uZXcgd2luZG93LlNWR1BhdGhTZWdMaXN0KHRoaXMpKSx0aGlzLl9wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJub3JtYWxpemVkUGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlZFBhdGhTZWdMaXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ0xpc3R9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwiYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnTGlzdH0sZW51bWVyYWJsZTohMH0pLHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdD1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUxpc3RGcm9tUGF0aE11dGF0aW9ucyh0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSl9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3VwZGF0ZUxpc3RGcm9tUGF0aE11dGF0aW9ucz1mdW5jdGlvbihlKXtpZih0aGlzLl9wYXRoRWxlbWVudCl7dmFyIHQ9ITE7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJkIj09ZS5hdHRyaWJ1dGVOYW1lJiYodD0hMCl9KSx0JiYodGhpcy5fbGlzdD10aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkIikpKX19LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3dyaXRlTGlzdFRvUGF0aD1mdW5jdGlvbigpe3RoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fcGF0aEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkIix3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QuX3BhdGhTZWdBcnJheUFzU3RyaW5nKHRoaXMuX2xpc3QpKSx0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9wYXRoRWxlbWVudCx0aGlzLl9tdXRhdGlvbk9ic2VydmVyQ29uZmlnKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5zZWdtZW50Q2hhbmdlZD1mdW5jdGlvbihlKXt0aGlzLl93cml0ZUxpc3RUb1BhdGgoKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2xpc3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLl9vd25pbmdQYXRoU2VnTGlzdD1udWxsfSksdGhpcy5fbGlzdD1bXSx0aGlzLl93cml0ZUxpc3RUb1BhdGgoKX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKSx0aGlzLl9saXN0PVtlXSxlLl9vd25pbmdQYXRoU2VnTGlzdD10aGlzLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLGV9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX2NoZWNrVmFsaWRJbmRleD1mdW5jdGlvbihlKXtpZihpc05hTihlKXx8ZTwwfHxlPj10aGlzLm51bWJlck9mSXRlbXMpdGhyb3ciSU5ERVhfU0laRV9FUlIifSx3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmdldEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2NoZWNrVmFsaWRJbmRleChlKSx0aGlzLl9saXN0W2VdfSx3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmluc2VydEl0ZW1CZWZvcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdD50aGlzLm51bWJlck9mSXRlbXMmJih0PXRoaXMubnVtYmVyT2ZJdGVtcyksZS5fb3duaW5nUGF0aFNlZ0xpc3QmJihlPWUuY2xvbmUoKSksdGhpcy5fbGlzdC5zcGxpY2UodCwwLGUpLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5yZXBsYWNlSXRlbT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKSxlLl9vd25pbmdQYXRoU2VnTGlzdCYmKGU9ZS5jbG9uZSgpKSx0aGlzLl9jaGVja1ZhbGlkSW5kZXgodCksdGhpcy5fbGlzdFt0XT1lLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2NoZWNrVmFsaWRJbmRleChlKTt2YXIgdD10aGlzLl9saXN0W2VdO3JldHVybiB0aGlzLl9saXN0LnNwbGljZShlLDEpLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLHR9LHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuYXBwZW5kSXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksZS5fb3duaW5nUGF0aFNlZ0xpc3QmJihlPWUuY2xvbmUoKSksdGhpcy5fbGlzdC5wdXNoKGUpLGUuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksZX0sd2luZG93LlNWR1BhdGhTZWdMaXN0Ll9wYXRoU2VnQXJyYXlBc1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD0iIixuPSEwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7bj8obj0hMSx0Kz1lLl9hc1BhdGhTdHJpbmcoKSk6dCs9IiAiK2UuX2FzUGF0aFN0cmluZygpfSksdH0sd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5fcGFyc2VQYXRoPWZ1bmN0aW9uKGUpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm5bXTt2YXIgdD10aGlzLG49ZnVuY3Rpb24oKXt0aGlzLnBhdGhTZWdMaXN0PVtdfTtuLnByb3RvdHlwZS5hcHBlbmRTZWdtZW50PWZ1bmN0aW9uKGUpe3RoaXMucGF0aFNlZ0xpc3QucHVzaChlKX07dmFyIHI9ZnVuY3Rpb24oZSl7dGhpcy5fc3RyaW5nPWUsdGhpcy5fY3VycmVudEluZGV4PTAsdGhpcy5fZW5kSW5kZXg9dGhpcy5fc3RyaW5nLmxlbmd0aCx0aGlzLl9wcmV2aW91c0NvbW1hbmQ9d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOLHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpfTtyLnByb3RvdHlwZS5faXNDdXJyZW50U3BhY2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zdHJpbmdbdGhpcy5fY3VycmVudEluZGV4XTtyZXR1cm4gZTw9IiAiJiYoIiAiPT1lfHwiXG4iPT1lfHwiXHQiPT1lfHwiXHIiPT1lfHwiXGYiPT1lKX0sci5wcm90b3R5cGUuX3NraXBPcHRpb25hbFNwYWNlcz1mdW5jdGlvbigpe2Zvcig7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9pc0N1cnJlbnRTcGFjZSgpOyl0aGlzLl9jdXJyZW50SW5kZXgrKztyZXR1cm4gdGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4fSxyLnByb3RvdHlwZS5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIXRoaXMuX2lzQ3VycmVudFNwYWNlKCkmJiIsIiE9dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpKSYmKHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpJiZ0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJiIsIj09dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpJiYodGhpcy5fY3VycmVudEluZGV4KyssdGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzKCkpLHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCl9LHIucHJvdG90eXBlLmhhc01vcmVEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleH0sci5wcm90b3R5cGUucGVla1NlZ21lbnRUeXBlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3RyaW5nW3RoaXMuX2N1cnJlbnRJbmRleF07cmV0dXJuIHRoaXMuX3BhdGhTZWdUeXBlRnJvbUNoYXIoZSl9LHIucHJvdG90eXBlLl9wYXRoU2VnVHlwZUZyb21DaGFyPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIloiOmNhc2UieiI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRIO2Nhc2UiTSI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUztjYXNlIm0iOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUw7Y2FzZSJMIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTO2Nhc2UibCI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDtjYXNlIkMiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTO2Nhc2UiYyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw7Y2FzZSJRIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM7Y2FzZSJxIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw7Y2FzZSJBIjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19BUkNfQUJTO2Nhc2UiYSI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTDtjYXNlIkgiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUztjYXNlImgiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDtjYXNlIlYiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM7Y2FzZSJ2IjpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMO2Nhc2UiUyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTO2Nhc2UicyI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMO2Nhc2UiVCI6cmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUztjYXNlInQiOnJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw7ZGVmYXVsdDpyZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfX0sci5wcm90b3R5cGUuX25leHRDb21tYW5kSGVscGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCIrIj09ZXx8Ii0iPT1lfHwiLiI9PWV8fGU+PSIwIiYmZTw9IjkiKSYmdCE9d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg/dD09d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fQUJTP3dpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUzp0PT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUw/d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fUkVMOnQ6d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfSxyLnByb3RvdHlwZS5pbml0aWFsQ29tbWFuZElzTW92ZVRvPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzTW9yZURhdGEoKSlyZXR1cm4hMDt2YXIgZT10aGlzLnBlZWtTZWdtZW50VHlwZSgpO3JldHVybiBlPT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19BQlN8fGU9PXdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTH0sci5wcm90b3R5cGUuX3BhcnNlTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PTAsbj0xLHI9MCxvPTEscz0xLGk9dGhpcy5fY3VycmVudEluZGV4O2lmKHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpLHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIisiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk/dGhpcy5fY3VycmVudEluZGV4Kys6dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiYiLSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSYmKHRoaXMuX2N1cnJlbnRJbmRleCsrLG89LTEpLCEodGhpcy5fY3VycmVudEluZGV4PT10aGlzLl9lbmRJbmRleHx8KHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTwiMCJ8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT4iOSIpJiYiLiIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSkpe2Zvcih2YXIgYT10aGlzLl9jdXJyZW50SW5kZXg7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+PSIwIiYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPD0iOSI7KXRoaXMuX2N1cnJlbnRJbmRleCsrO2lmKHRoaXMuX2N1cnJlbnRJbmRleCE9YSlmb3IodmFyIGw9dGhpcy5fY3VycmVudEluZGV4LTEsdT0xO2w+PWE7KXQrPXUqKHRoaXMuX3N0cmluZy5jaGFyQXQobC0tKS0iMCIpLHUqPTEwO2lmKHRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIi4iPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpe2lmKCsrdGhpcy5fY3VycmVudEluZGV4Pj10aGlzLl9lbmRJbmRleHx8dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPCIwInx8dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPiI5IilyZXR1cm47Zm9yKDt0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJnRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT49IjAiJiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk8PSI5Ijspbio9MTAscis9KHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KS0iMCIpL24sdGhpcy5fY3VycmVudEluZGV4Kz0xfWlmKHRoaXMuX2N1cnJlbnRJbmRleCE9aSYmdGhpcy5fY3VycmVudEluZGV4KzE8dGhpcy5fZW5kSW5kZXgmJigiZSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KXx8IkUiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpJiYieCIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpJiYibSIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpKXtpZih0aGlzLl9jdXJyZW50SW5kZXgrKywiKyI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT90aGlzLl9jdXJyZW50SW5kZXgrKzoiLSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSYmKHRoaXMuX2N1cnJlbnRJbmRleCsrLHM9LTEpLHRoaXMuX2N1cnJlbnRJbmRleD49dGhpcy5fZW5kSW5kZXh8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTwiMCJ8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT4iOSIpcmV0dXJuO2Zvcig7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+PSIwIiYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPD0iOSI7KWUqPTEwLGUrPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KS0iMCIsdGhpcy5fY3VycmVudEluZGV4Kyt9dmFyIGM9dCtyO2lmKGMqPW8sZSYmKGMqPU1hdGgucG93KDEwLHMqZSkpLGkhPXRoaXMuX2N1cnJlbnRJbmRleClyZXR1cm4gdGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIoKSxjfX0sci5wcm90b3R5cGUuX3BhcnNlQXJjRmxhZz1mdW5jdGlvbigpe2lmKCEodGhpcy5fY3VycmVudEluZGV4Pj10aGlzLl9lbmRJbmRleCkpe3ZhciBlPSExLHQ9dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgrKyk7aWYoIjAiPT10KWU9ITE7ZWxzZXtpZigiMSIhPXQpcmV0dXJuO2U9ITB9cmV0dXJuIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKCksZX19LHIucHJvdG90eXBlLnBhcnNlU2VnbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3N0cmluZ1t0aGlzLl9jdXJyZW50SW5kZXhdLG49dGhpcy5fcGF0aFNlZ1R5cGVGcm9tQ2hhcihlKTtpZihuPT13aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX1VOS05PV04pe2lmKHRoaXMuX3ByZXZpb3VzQ29tbWFuZD09d2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOKXJldHVybiBudWxsO2lmKChuPXRoaXMuX25leHRDb21tYW5kSGVscGVyKGUsdGhpcy5fcHJldmlvdXNDb21tYW5kKSk9PXdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTilyZXR1cm4gbnVsbH1lbHNlIHRoaXMuX2N1cnJlbnRJbmRleCsrO3N3aXRjaCh0aGlzLl9wcmV2aW91c0NvbW1hbmQ9bixuKXtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTDpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSk7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUzpyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh0LHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg6cmV0dXJuIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpLG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aCh0KTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6dmFyIHI9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSx4Mjp0aGlzLl9wYXJzZU51bWJlcigpLHkyOnRoaXMuX3BhcnNlTnVtYmVyKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh0LHIueCxyLnksci54MSxyLnkxLHIueDIsci55Mik7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOnZhciByPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCkseDI6dGhpcy5fcGFyc2VOdW1iZXIoKSx5Mjp0aGlzLl9wYXJzZU51bWJlcigpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModCxyLngsci55LHIueDEsci55MSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw6dmFyIHI9e3gyOnRoaXMuX3BhcnNlTnVtYmVyKCkseTI6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHQsci54LHIueSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6dmFyIHI9e3gyOnRoaXMuX3BhcnNlTnVtYmVyKCkseTI6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKHQsci54LHIueSxyLngyLHIueTIpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6dmFyIHI9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCh0LHIueCxyLnksci54MSxyLnkxKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOnZhciByPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnModCxyLngsci55LHIueDEsci55MSk7Y2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw6cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodCx0aGlzLl9wYXJzZU51bWJlcigpLHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOnJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHQsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTDp2YXIgcj17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLGFyY0FuZ2xlOnRoaXMuX3BhcnNlTnVtYmVyKCksYXJjTGFyZ2U6dGhpcy5fcGFyc2VBcmNGbGFnKCksYXJjU3dlZXA6dGhpcy5fcGFyc2VBcmNGbGFnKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbCh0LHIueCxyLnksci54MSxyLnkxLHIuYXJjQW5nbGUsci5hcmNMYXJnZSxyLmFyY1N3ZWVwKTtjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUzp2YXIgcj17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLGFyY0FuZ2xlOnRoaXMuX3BhcnNlTnVtYmVyKCksYXJjTGFyZ2U6dGhpcy5fcGFyc2VBcmNGbGFnKCksYXJjU3dlZXA6dGhpcy5fcGFyc2VBcmNGbGFnKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficyh0LHIueCxyLnksci54MSxyLnkxLHIuYXJjQW5nbGUsci5hcmNMYXJnZSxyLmFyY1N3ZWVwKTtkZWZhdWx0OnRocm93IlVua25vd24gcGF0aCBzZWcgdHlwZS4ifX07dmFyIG89bmV3IG4scz1uZXcgcihlKTtpZighcy5pbml0aWFsQ29tbWFuZElzTW92ZVRvKCkpcmV0dXJuW107Zm9yKDtzLmhhc01vcmVEYXRhKCk7KXt2YXIgaT1zLnBhcnNlU2VnbWVudCgpO2lmKCFpKXJldHVybltdO28uYXBwZW5kU2VnbWVudChpKX1yZXR1cm4gby5wYXRoU2VnTGlzdH0pfSgpLFN0cmluZy5wcm90b3R5cGUucGFkRW5kfHwoU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+PTAsdD1TdHJpbmcodm9pZCAwIT09dD90OiIgIiksdGhpcy5sZW5ndGg+ZT9TdHJpbmcodGhpcyk6KGUtPXRoaXMubGVuZ3RoLGU+dC5sZW5ndGgmJih0Kz10LnJlcGVhdChlL3QubGVuZ3RoKSksU3RyaW5nKHRoaXMpK3Quc2xpY2UoMCxlKSl9KSxqLmF4aXM9ZnVuY3Rpb24oKXt9LGouYXhpcy5sYWJlbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDthcmd1bWVudHMubGVuZ3RoJiYoT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXt0LmF4aXMuc2V0TGFiZWxUZXh0KG4sZVtuXSl9KSx0LmF4aXMudXBkYXRlTGFiZWxzKCkpfSxqLmF4aXMubWF4PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWwsbj10LmNvbmZpZztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm57eDpuLmF4aXNfeF9tYXgseTpuLmF4aXNfeV9tYXgseTI6bi5heGlzX3kyX21heH07Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpKT8oXyhlLngpJiYobi5heGlzX3hfbWF4PWUueCksXyhlLnkpJiYobi5heGlzX3lfbWF4PWUueSksXyhlLnkyKSYmKG4uYXhpc195Ml9tYXg9ZS55MikpOm4uYXhpc195X21heD1uLmF4aXNfeTJfbWF4PWUsdC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSl9LGouYXhpcy5taW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybnt4Om4uYXhpc194X21pbix5Om4uYXhpc195X21pbix5MjpuLmF4aXNfeTJfbWlufTsib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmwoZSkpPyhfKGUueCkmJihuLmF4aXNfeF9taW49ZS54KSxfKGUueSkmJihuLmF4aXNfeV9taW49ZS55KSxfKGUueTIpJiYobi5heGlzX3kyX21pbj1lLnkyKSk6bi5heGlzX3lfbWluPW4uYXhpc195Ml9taW49ZSx0LnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITB9KX0sai5heGlzLnJhbmdlPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybnttYXg6dGhpcy5heGlzLm1heCgpLG1pbjp0aGlzLmF4aXMubWluKCl9O2coZS5tYXgpJiZ0aGlzLmF4aXMubWF4KGUubWF4KSxnKGUubWluKSYmdGhpcy5heGlzLm1pbihlLm1pbil9LGouY2F0ZWdvcnk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmludGVybmFsLHI9bi5jb25maWc7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKHIuYXhpc194X2NhdGVnb3JpZXNbZV09dCxuLnJlZHJhdygpKSxyLmF4aXNfeF9jYXRlZ29yaWVzW2VdfSxqLmNhdGVnb3JpZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmF4aXNfeF9jYXRlZ29yaWVzPWUsdC5yZWRyYXcoKSxuLmF4aXNfeF9jYXRlZ29yaWVzKTpuLmF4aXNfeF9jYXRlZ29yaWVzfSxqLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLG49dC5jb25maWc7bi5zaXplX3dpZHRoPWU/ZS53aWR0aDpudWxsLG4uc2l6ZV9oZWlnaHQ9ZT9lLmhlaWdodDpudWxsLHRoaXMuZmx1c2goKX0sai5mbHVzaD1mdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwLHdpdGhUcmFuc2l0aW9uOiExLHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtOiExfSl9LGouZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW50ZXJuYWw7aWYod2luZG93LmNsZWFySW50ZXJ2YWwoZS5pbnRlcnZhbEZvck9ic2VydmVJbnNlcnRlZCksdm9pZCAwIT09ZS5yZXNpemVUaW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KGUucmVzaXplVGltZW91dCksd2luZG93LmRldGFjaEV2ZW50KXdpbmRvdy5kZXRhY2hFdmVudCgib25yZXNpemUiLGUucmVzaXplSWZFbGVtZW50RGlzcGxheWVkKTtlbHNlIGlmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGUucmVzaXplSWZFbGVtZW50RGlzcGxheWVkKTtlbHNle3ZhciB0PXdpbmRvdy5vbnJlc2l6ZTt0JiZ0LmFkZCYmdC5yZW1vdmUmJnQucmVtb3ZlKGUucmVzaXplRnVuY3Rpb24pfXJldHVybiBlLnJlc2l6ZUZ1bmN0aW9uLnJlbW92ZSgpLGUuc2VsZWN0Q2hhcnQuY2xhc3NlZCgiYzMiLCExKS5odG1sKCIiKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09bnVsbH0pLG51bGx9LGouY29sb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwuY29sb3IoZSl9LGouZGF0YT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLmRhdGEudGFyZ2V0cztyZXR1cm4gdm9pZCAwPT09ZT90OnQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybltdLmNvbmNhdChlKS5pbmRleE9mKHQuaWQpPj0wfSl9LGouZGF0YS5zaG93bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC5maWx0ZXJUYXJnZXRzVG9TaG93KHRoaXMuZGF0YShlKSl9LGouZGF0YS52YWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1udWxsO3JldHVybiBlJiYodD10aGlzLmRhdGEoZSksbj10WzBdP3RbMF0udmFsdWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pOm51bGwpLG59LGouZGF0YS5uYW1lcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC5jbGVhckxlZ2VuZEl0ZW1UZXh0Qm94Q2FjaGUoKSx0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCJuYW1lcyIsZSl9LGouZGF0YS5jb2xvcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwudXBkYXRlRGF0YUF0dHJpYnV0ZXMoImNvbG9ycyIsZSl9LGouZGF0YS5heGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCJheGVzIixlKX0sai5mbG93PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhLGw9dGhpcy5pbnRlcm5hbCx1PVtdLGM9bC5nZXRNYXhEYXRhQ291bnQoKSxkPTAscD0wO2lmKGUuanNvbiluPWwuY29udmVydEpzb25Ub0RhdGEoZS5qc29uLGUua2V5cyk7ZWxzZSBpZihlLnJvd3Mpbj1sLmNvbnZlcnRSb3dzVG9EYXRhKGUucm93cyk7ZWxzZXtpZighZS5jb2x1bW5zKXJldHVybjtuPWwuY29udmVydENvbHVtbnNUb0RhdGEoZS5jb2x1bW5zKX10PWwuY29udmVydERhdGFUb1RhcmdldHMobiwhMCksbC5kYXRhLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbixyLG89ITE7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlLmlkPT09dFtuXS5pZCl7Zm9yKG89ITAsZS52YWx1ZXNbZS52YWx1ZXMubGVuZ3RoLTFdJiYocD1lLnZhbHVlc1tlLnZhbHVlcy5sZW5ndGgtMV0uaW5kZXgrMSksZD10W25dLnZhbHVlcy5sZW5ndGgscj0wO3I8ZDtyKyspdFtuXS52YWx1ZXNbcl0uaW5kZXg9cCtyLGwuaXNUaW1lU2VyaWVzKCl8fCh0W25dLnZhbHVlc1tyXS54PXArcik7ZS52YWx1ZXM9ZS52YWx1ZXMuY29uY2F0KHRbbl0udmFsdWVzKSx0LnNwbGljZShuLDEpO2JyZWFrfW98fHUucHVzaChlLmlkKX0pLGwuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQsbjtmb3IodD0wO3Q8dS5sZW5ndGg7dCsrKWlmKGUuaWQ9PT11W3RdKWZvcihwPWUudmFsdWVzW2UudmFsdWVzLmxlbmd0aC0xXS5pbmRleCsxLG49MDtuPGQ7bisrKWUudmFsdWVzLnB1c2goe2lkOmUuaWQsaW5kZXg6cCtuLHg6bC5pc1RpbWVTZXJpZXMoKT9sLmdldE90aGVyVGFyZ2V0WChwK24pOnArbix2YWx1ZTpudWxsfSl9KSxsLmRhdGEudGFyZ2V0cy5sZW5ndGgmJnQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0PWwuZGF0YS50YXJnZXRzWzBdLnZhbHVlc1swXS5pbmRleDt0PHA7dCsrKW4ucHVzaCh7aWQ6ZS5pZCxpbmRleDp0LHg6bC5pc1RpbWVTZXJpZXMoKT9sLmdldE90aGVyVGFyZ2V0WCh0KTp0LHZhbHVlOm51bGx9KTtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaW5kZXgrPXAsbC5pc1RpbWVTZXJpZXMoKXx8KGUueCs9cCl9KSxlLnZhbHVlcz1uLmNvbmNhdChlLnZhbHVlcyl9KSxsLmRhdGEudGFyZ2V0cz1sLmRhdGEudGFyZ2V0cy5jb25jYXQodCksbC5nZXRNYXhEYXRhQ291bnQoKSxvPWwuZGF0YS50YXJnZXRzWzBdLHM9by52YWx1ZXNbMF0sZyhlLnRvKT8oZD0wLGE9bC5pc1RpbWVTZXJpZXMoKT9sLnBhcnNlRGF0ZShlLnRvKTplLnRvLG8udmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS54PGEmJmQrK30pKTpnKGUubGVuZ3RoKSYmKGQ9ZS5sZW5ndGgpLGM/MT09PWMmJmwuaXNUaW1lU2VyaWVzKCkmJihpPShvLnZhbHVlc1tvLnZhbHVlcy5sZW5ndGgtMV0ueC1zLngpLzIscj1bbmV3IERhdGUoK3MueC1pKSxuZXcgRGF0ZSgrcy54K2kpXSxsLnVwZGF0ZVhEb21haW4obnVsbCwhMCwhMCwhMSxyKSk6KGk9bC5pc1RpbWVTZXJpZXMoKT9vLnZhbHVlcy5sZW5ndGg+MT9vLnZhbHVlc1tvLnZhbHVlcy5sZW5ndGgtMV0ueC1zLng6cy54LWwuZ2V0WERvbWFpbihsLmRhdGEudGFyZ2V0cylbMF06MSxyPVtzLngtaSxzLnhdLGwudXBkYXRlWERvbWFpbihudWxsLCEwLCEwLCExLHIpKSxsLnVwZGF0ZVRhcmdldHMobC5kYXRhLnRhcmdldHMpLGwucmVkcmF3KHtmbG93OntpbmRleDpzLmluZGV4LGxlbmd0aDpkLGR1cmF0aW9uOl8oZS5kdXJhdGlvbik/ZS5kdXJhdGlvbjpsLmNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uLGRvbmU6ZS5kb25lLG9yZ0RhdGFDb3VudDpjfSx3aXRoTGVnZW5kOiEwLHdpdGhUcmFuc2l0aW9uOmM+MSx3aXRoVHJpbVhEb21haW46ITEsd2l0aFVwZGF0ZVhBeGlzOiEwfSl9LHguZ2VuZXJhdGVGbG93PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPXQuZDM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxpLGw9ZS50YXJnZXRzLHU9ZS5mbG93LGM9ZS5kcmF3QmFyLGQ9ZS5kcmF3TGluZSxfPWUuZHJhd0FyZWEscD1lLmN4LGY9ZS5jeSxtPWUueHYsaD1lLnhGb3JUZXh0LGc9ZS55Rm9yVGV4dCxiPWUuZHVyYXRpb24sRT0xLHY9dS5pbmRleCxUPXUubGVuZ3RoLEE9dC5nZXRWYWx1ZU9uSW5kZXgodC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLHYpLEM9dC5nZXRWYWx1ZU9uSW5kZXgodC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLHYrVCksTz10LnguZG9tYWluKCksUz11LmR1cmF0aW9ufHxiLFI9dS5kb25lfHxmdW5jdGlvbigpe30saj10LmdlbmVyYXRlV2FpdCgpLHg9dC54Z3JpZHx8ci5zZWxlY3RBbGwoW10pLEw9dC54Z3JpZExpbmVzfHxyLnNlbGVjdEFsbChbXSksRD10Lm1haW5SZWdpb258fHIuc2VsZWN0QWxsKFtdKSx3PXQubWFpblRleHR8fHIuc2VsZWN0QWxsKFtdKSxNPXQubWFpbkJhcnx8ci5zZWxlY3RBbGwoW10pLGs9dC5tYWluTGluZXx8ci5zZWxlY3RBbGwoW10pLEk9dC5tYWluQXJlYXx8ci5zZWxlY3RBbGwoW10pLFA9dC5tYWluQ2lyY2xlfHxyLnNlbGVjdEFsbChbXSk7dC5mbG93aW5nPSEwLHQuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS52YWx1ZXMuc3BsaWNlKDAsVCl9KSxpPXQudXBkYXRlWERvbWFpbihsLCEwLCEwKSx0LnVwZGF0ZVhHcmlkJiZ0LnVwZGF0ZVhHcmlkKCEwKSx1Lm9yZ0RhdGFDb3VudD9vPTE9PT11Lm9yZ0RhdGFDb3VudHx8KEEmJkEueCk9PT0oQyYmQy54KT90LngoT1swXSktdC54KGlbMF0pOnQuaXNUaW1lU2VyaWVzKCk/dC54KE9bMF0pLXQueChpWzBdKTp0LngoQS54KS10LngoQy54KToxIT09dC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLmxlbmd0aD9vPXQueChPWzBdKS10LngoaVswXSk6dC5pc1RpbWVTZXJpZXMoKT8oQT10LmdldFZhbHVlT25JbmRleCh0LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMsMCksQz10LmdldFZhbHVlT25JbmRleCh0LmRhdGEudGFyZ2V0c1swXS52YWx1ZXMsdC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLmxlbmd0aC0xKSxvPXQueChBLngpLXQueChDLngpKTpvPXkoaSkvMixFPXkoTykveShpKSxzPSJ0cmFuc2xhdGUoIitvKyIsMCkgc2NhbGUoIitFKyIsMSkiLHQuaGlkZVhHcmlkRm9jdXMoKSxyLnRyYW5zaXRpb24oKS5lYXNlKCJsaW5lYXIiKS5kdXJhdGlvbihTKS5lYWNoKGZ1bmN0aW9uKCl7ai5hZGQodC5heGVzLngudHJhbnNpdGlvbigpLmNhbGwodC54QXhpcykpLGouYWRkKE0udHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIscykpLGouYWRkKGsudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIscykpLGouYWRkKEkudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIscykpLGouYWRkKFAudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIscykpLGouYWRkKHcudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIscykpLGouYWRkKEQuZmlsdGVyKHQuaXNSZWdpb25PblgpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHMpKSxqLmFkZCh4LnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHMpKSxqLmFkZChMLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHMpKX0pLmNhbGwoaixmdW5jdGlvbigpe3ZhciBlLHI9W10sbz1bXSxzPVtdO2lmKFQpe2ZvcihlPTA7ZTxUO2UrKylyLnB1c2goIi4iK2Euc2hhcGUrIi0iKyh2K2UpKSxvLnB1c2goIi4iK2EudGV4dCsiLSIrKHYrZSkpLHMucHVzaCgiLiIrYS5ldmVudFJlY3QrIi0iKyh2K2UpKTt0LnN2Zy5zZWxlY3RBbGwoIi4iK2Euc2hhcGVzKS5zZWxlY3RBbGwocikucmVtb3ZlKCksdC5zdmcuc2VsZWN0QWxsKCIuIithLnRleHRzKS5zZWxlY3RBbGwobykucmVtb3ZlKCksdC5zdmcuc2VsZWN0QWxsKCIuIithLmV2ZW50UmVjdHMpLnNlbGVjdEFsbChzKS5yZW1vdmUoKSx0LnN2Zy5zZWxlY3QoIi4iK2EueGdyaWQpLnJlbW92ZSgpfXguYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKHQueGdyaWRBdHRyKSxMLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksTC5zZWxlY3QoImxpbmUiKS5hdHRyKCJ4MSIsbi5heGlzX3JvdGF0ZWQ/MDptKS5hdHRyKCJ4MiIsbi5heGlzX3JvdGF0ZWQ/dC53aWR0aDptKSxMLnNlbGVjdCgidGV4dCIpLmF0dHIoIngiLG4uYXhpc19yb3RhdGVkP3Qud2lkdGg6MCkuYXR0cigieSIsbSksTS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoImQiLGMpLGsuYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJkIixkKSxJLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuYXR0cigiZCIsXyksUC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoImN4IixwKS5hdHRyKCJjeSIsZiksdy5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoIngiLGgpLmF0dHIoInkiLGcpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLHQub3BhY2l0eUZvclRleHQuYmluZCh0KSksRC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLEQuc2VsZWN0KCJyZWN0IikuZmlsdGVyKHQuaXNSZWdpb25PblgpLmF0dHIoIngiLHQucmVnaW9uWC5iaW5kKHQpKS5hdHRyKCJ3aWR0aCIsdC5yZWdpb25XaWR0aC5iaW5kKHQpKSxuLmludGVyYWN0aW9uX2VuYWJsZWQmJnQucmVkcmF3RXZlbnRSZWN0KCksUigpLHQuZmxvd2luZz0hMX0pfX0sai5mb2N1cz1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuaW50ZXJuYWw7ZT1uLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9bi5zdmcuc2VsZWN0QWxsKG4uc2VsZWN0b3JUYXJnZXRzKGUuZmlsdGVyKG4uaXNUYXJnZXRUb1Nob3csbikpKSx0aGlzLnJldmVydCgpLHRoaXMuZGVmb2N1cygpLHQuY2xhc3NlZChhLmZvY3VzZWQsITApLmNsYXNzZWQoYS5kZWZvY3VzZWQsITEpLG4uaGFzQXJjVHlwZSgpJiZuLmV4cGFuZEFyYyhlKSxuLnRvZ2dsZUZvY3VzTGVnZW5kKGUsITApLG4uZm9jdXNlZFRhcmdldElkcz1lLG4uZGVmb2N1c2VkVGFyZ2V0SWRzPW4uZGVmb2N1c2VkVGFyZ2V0SWRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPDB9KX0sai5kZWZvY3VzPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5pbnRlcm5hbDtlPW4ubWFwVG9UYXJnZXRJZHMoZSksdD1uLnN2Zy5zZWxlY3RBbGwobi5zZWxlY3RvclRhcmdldHMoZS5maWx0ZXIobi5pc1RhcmdldFRvU2hvdyxuKSkpLHQuY2xhc3NlZChhLmZvY3VzZWQsITEpLmNsYXNzZWQoYS5kZWZvY3VzZWQsITApLG4uaGFzQXJjVHlwZSgpJiZuLnVuZXhwYW5kQXJjKGUpLG4udG9nZ2xlRm9jdXNMZWdlbmQoZSwhMSksbi5mb2N1c2VkVGFyZ2V0SWRzPW4uZm9jdXNlZFRhcmdldElkcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5kZXhPZih0KTwwfSksbi5kZWZvY3VzZWRUYXJnZXRJZHM9ZX0sai5yZXZlcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmludGVybmFsO2U9bi5tYXBUb1RhcmdldElkcyhlKSx0PW4uc3ZnLnNlbGVjdEFsbChuLnNlbGVjdG9yVGFyZ2V0cyhlKSksdC5jbGFzc2VkKGEuZm9jdXNlZCwhMSkuY2xhc3NlZChhLmRlZm9jdXNlZCwhMSksbi5oYXNBcmNUeXBlKCkmJm4udW5leHBhbmRBcmMoZSksbi5jb25maWcubGVnZW5kX3Nob3cmJihuLnNob3dMZWdlbmQoZS5maWx0ZXIobi5pc0xlZ2VuZFRvU2hvdy5iaW5kKG4pKSksbi5sZWdlbmQuc2VsZWN0QWxsKG4uc2VsZWN0b3JMZWdlbmRzKGUpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbi5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChhLmxlZ2VuZEl0ZW1Gb2N1c2VkKX0pLmNsYXNzZWQoYS5sZWdlbmRJdGVtRm9jdXNlZCwhMSkpLG4uZm9jdXNlZFRhcmdldElkcz1bXSxuLmRlZm9jdXNlZFRhcmdldElkcz1bXX0sai54Z3JpZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBlPyhuLmdyaWRfeF9saW5lcz1lLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLmdyaWRfeF9saW5lcyk6bi5ncmlkX3hfbGluZXN9LGoueGdyaWRzLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3JldHVybiB0aGlzLnhncmlkcyh0LmNvbmZpZy5ncmlkX3hfbGluZXMuY29uY2F0KGV8fFtdKSl9LGoueGdyaWRzLnJlbW92ZT1mdW5jdGlvbihlKXt0aGlzLmludGVybmFsLnJlbW92ZUdyaWRMaW5lcyhlLCEwKX0sai55Z3JpZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBlPyhuLmdyaWRfeV9saW5lcz1lLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLmdyaWRfeV9saW5lcyk6bi5ncmlkX3lfbGluZXN9LGoueWdyaWRzLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3JldHVybiB0aGlzLnlncmlkcyh0LmNvbmZpZy5ncmlkX3lfbGluZXMuY29uY2F0KGV8fFtdKSl9LGoueWdyaWRzLnJlbW92ZT1mdW5jdGlvbihlKXt0aGlzLmludGVybmFsLnJlbW92ZUdyaWRMaW5lcyhlLCExKX0sai5ncm91cHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnO3JldHVybiBoKGUpP24uZGF0YV9ncm91cHM6KG4uZGF0YV9ncm91cHM9ZSx0LnJlZHJhdygpLG4uZGF0YV9ncm91cHMpfSxqLmxlZ2VuZD1mdW5jdGlvbigpe30sai5sZWdlbmQuc2hvdz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3Quc2hvd0xlZ2VuZCh0Lm1hcFRvVGFyZ2V0SWRzKGUpKSx0LnVwZGF0ZUFuZFJlZHJhdyh7d2l0aExlZ2VuZDohMH0pfSxqLmxlZ2VuZC5oaWRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWw7dC5oaWRlTGVnZW5kKHQubWFwVG9UYXJnZXRJZHMoZSkpLHQudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwfSl9LGoubG9hZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLG49dC5jb25maWc7aWYoZS54cyYmdC5hZGRYcyhlLnhzKSwibmFtZXMiaW4gZSYmai5kYXRhLm5hbWVzLmJpbmQodGhpcykoZS5uYW1lcyksImNsYXNzZXMiaW4gZSYmT2JqZWN0LmtleXMoZS5jbGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uZGF0YV9jbGFzc2VzW3RdPWUuY2xhc3Nlc1t0XX0pLCJjYXRlZ29yaWVzImluIGUmJnQuaXNDYXRlZ29yaXplZCgpJiYobi5heGlzX3hfY2F0ZWdvcmllcz1lLmNhdGVnb3JpZXMpLCJheGVzImluIGUmJk9iamVjdC5rZXlzKGUuYXhlcykuZm9yRWFjaChmdW5jdGlvbih0KXtuLmRhdGFfYXhlc1t0XT1lLmF4ZXNbdF19KSwiY29sb3JzImluIGUmJk9iamVjdC5rZXlzKGUuY29sb3JzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uZGF0YV9jb2xvcnNbdF09ZS5jb2xvcnNbdF19KSwiY2FjaGVJZHMiaW4gZSYmdC5oYXNDYWNoZXMoZS5jYWNoZUlkcykpcmV0dXJuIHZvaWQgdC5sb2FkKHQuZ2V0Q2FjaGVzKGUuY2FjaGVJZHMpLGUuZG9uZSk7InVubG9hZCJpbiBlP3QudW5sb2FkKHQubWFwVG9UYXJnZXRJZHMoImJvb2xlYW4iPT10eXBlb2YgZS51bmxvYWQmJmUudW5sb2FkP251bGw6ZS51bmxvYWQpLGZ1bmN0aW9uKCl7dC5sb2FkRnJvbUFyZ3MoZSl9KTp0LmxvYWRGcm9tQXJncyhlKX0sai51bmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtlPWV8fHt9LGUgaW5zdGFuY2VvZiBBcnJheT9lPXtpZHM6ZX06InN0cmluZyI9PXR5cGVvZiBlJiYoZT17aWRzOltlXX0pLHQudW5sb2FkKHQubWFwVG9UYXJnZXRJZHMoZS5pZHMpLGZ1bmN0aW9uKCl7dC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhMZWdlbmQ6ITB9KSxlLmRvbmUmJmUuZG9uZSgpfSl9LGoucmVnaW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLG49dC5jb25maWc7cmV0dXJuIGU/KG4ucmVnaW9ucz1lLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLnJlZ2lvbnMpOm4ucmVnaW9uc30sai5yZWdpb25zLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsLG49dC5jb25maWc7cmV0dXJuIGU/KG4ucmVnaW9ucz1uLnJlZ2lvbnMuY29uY2F0KGUpLHQucmVkcmF3V2l0aG91dFJlc2NhbGUoKSxuLnJlZ2lvbnMpOm4ucmVnaW9uc30sai5yZWdpb25zLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz10aGlzLmludGVybmFsLHM9by5jb25maWc7cmV0dXJuIGU9ZXx8e30sdD1vLmdldE9wdGlvbihlLCJkdXJhdGlvbiIscy50cmFuc2l0aW9uX2R1cmF0aW9uKSxuPW8uZ2V0T3B0aW9uKGUsImNsYXNzZXMiLFthLnJlZ2lvbl0pLHI9by5tYWluLnNlbGVjdCgiLiIrYS5yZWdpb25zKS5zZWxlY3RBbGwobi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2V9KSksKHQ/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24odCk6cikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHMucmVnaW9ucz1zLnJlZ2lvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiFlLmNsYXNzfHwoZS5jbGFzcy5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7bi5pbmRleE9mKGUpPj0wJiYodD0hMCl9KSwhdCl9KSxzLnJlZ2lvbnN9LGouc2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuZDM7cmV0dXJuIG4ubWVyZ2UodC5tYWluLnNlbGVjdEFsbCgiLiIrYS5zaGFwZXMrdC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChlKSkuc2VsZWN0QWxsKCIuIithLnNoYXBlKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbi5zZWxlY3QodGhpcykuY2xhc3NlZChhLlNFTEVDVEVEKX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fX2RhdGFfXztyZXR1cm4gdC5kYXRhP3QuZGF0YTp0fSl9KSl9LGouc2VsZWN0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmludGVybmFsLG89ci5kMyxzPXIuY29uZmlnO3MuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmci5tYWluLnNlbGVjdEFsbCgiLiIrYS5zaGFwZXMpLnNlbGVjdEFsbCgiLiIrYS5zaGFwZSkuZWFjaChmdW5jdGlvbihpLGwpe3ZhciB1PW8uc2VsZWN0KHRoaXMpLGM9aS5kYXRhP2kuZGF0YS5pZDppLmlkLGQ9ci5nZXRUb2dnbGUodGhpcyxpKS5iaW5kKHIpLF89cy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHwhZXx8ZS5pbmRleE9mKGMpPj0wLHA9IXR8fHQuaW5kZXhPZihsKT49MCxmPXUuY2xhc3NlZChhLlNFTEVDVEVEKTt1LmNsYXNzZWQoYS5saW5lKXx8dS5jbGFzc2VkKGEuYXJlYSl8fChfJiZwP3MuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGkpJiYhZiYmZCghMCx1LmNsYXNzZWQoYS5TRUxFQ1RFRCwhMCksaSxsKTpnKG4pJiZuJiZmJiZkKCExLHUuY2xhc3NlZChhLlNFTEVDVEVELCExKSxpLGwpKX0pfSxqLnVuc2VsZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pbnRlcm5hbCxyPW4uZDMsbz1uLmNvbmZpZztvLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJm4ubWFpbi5zZWxlY3RBbGwoIi4iK2Euc2hhcGVzKS5zZWxlY3RBbGwoIi4iK2Euc2hhcGUpLmVhY2goZnVuY3Rpb24ocyxpKXt2YXIgbD1yLnNlbGVjdCh0aGlzKSx1PXMuZGF0YT9zLmRhdGEuaWQ6cy5pZCxjPW4uZ2V0VG9nZ2xlKHRoaXMscykuYmluZChuKSxkPW8uZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZHx8IWV8fGUuaW5kZXhPZih1KT49MCxfPSF0fHx0LmluZGV4T2YoaSk+PTAscD1sLmNsYXNzZWQoYS5TRUxFQ1RFRCk7bC5jbGFzc2VkKGEubGluZSl8fGwuY2xhc3NlZChhLmFyZWEpfHxkJiZfJiZvLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShzKSYmcCYmYyghMSxsLmNsYXNzZWQoYS5TRUxFQ1RFRCwhMSkscyxpKX0pfSxqLnNob3c9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuaW50ZXJuYWw7ZT1yLm1hcFRvVGFyZ2V0SWRzKGUpLHQ9dHx8e30sci5yZW1vdmVIaWRkZW5UYXJnZXRJZHMoZSksbj1yLnN2Zy5zZWxlY3RBbGwoci5zZWxlY3RvclRhcmdldHMoZSkpLG4udHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxLCJpbXBvcnRhbnQiKS5jYWxsKHIuZW5kYWxsLGZ1bmN0aW9uKCl7bi5zdHlsZSgib3BhY2l0eSIsbnVsbCkuc3R5bGUoIm9wYWNpdHkiLDEpfSksdC53aXRoTGVnZW5kJiZyLnNob3dMZWdlbmQoZSksci5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhMZWdlbmQ6ITB9KX0sai5oaWRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmludGVybmFsO2U9ci5tYXBUb1RhcmdldElkcyhlKSx0PXR8fHt9LHIuYWRkSGlkZGVuVGFyZ2V0SWRzKGUpLG49ci5zdmcuc2VsZWN0QWxsKHIuc2VsZWN0b3JUYXJnZXRzKGUpKSxuLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCwiaW1wb3J0YW50IikuY2FsbChyLmVuZGFsbCxmdW5jdGlvbigpe24uc3R5bGUoIm9wYWNpdHkiLG51bGwpLnN0eWxlKCJvcGFjaXR5IiwwKX0pLHQud2l0aExlZ2VuZCYmci5oaWRlTGVnZW5kKGUpLHIucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoTGVnZW5kOiEwfSl9LGoudG9nZ2xlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuaW50ZXJuYWw7ci5tYXBUb1RhcmdldElkcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuaXNUYXJnZXRUb1Nob3coZSk/bi5oaWRlKGUsdCk6bi5zaG93KGUsdCl9KX0sai50b29sdGlwPWZ1bmN0aW9uKCl7fSxqLnRvb2x0aXAuc2hvdz1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5pbnRlcm5hbDtlLm1vdXNlJiYobj1lLm1vdXNlKSxlLmRhdGE/ci5pc011bHRpcGxlWCgpPyhuPVtyLngoZS5kYXRhLngpLHIuZ2V0WVNjYWxlKGUuZGF0YS5pZCkoZS5kYXRhLnZhbHVlKV0sdD1udWxsKTp0PV8oZS5kYXRhLmluZGV4KT9lLmRhdGEuaW5kZXg6ci5nZXRJbmRleEJ5WChlLmRhdGEueCk6dm9pZCAwIT09ZS54P3Q9ci5nZXRJbmRleEJ5WChlLngpOnZvaWQgMCE9PWUuaW5kZXgmJih0PWUuaW5kZXgpLHIuZGlzcGF0Y2hFdmVudCgibW91c2VvdmVyIix0LG4pLHIuZGlzcGF0Y2hFdmVudCgibW91c2Vtb3ZlIix0LG4pLHIuY29uZmlnLnRvb2x0aXBfb25zaG93LmNhbGwocixlLmRhdGEpfSxqLnRvb2x0aXAuaGlkZT1mdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwuZGlzcGF0Y2hFdmVudCgibW91c2VvdXQiLDApLHRoaXMuaW50ZXJuYWwuY29uZmlnLnRvb2x0aXBfb25oaWRlLmNhbGwodGhpcyl9LGoudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pbnRlcm5hbCxyPVsicGllIiwiZG9udXQiXS5pbmRleE9mKGUpPj0wP3t3aXRoVHJhbnNmb3JtOiEwfTpudWxsO24udHJhbnNmb3JtVG8odCxlLHIpfSx4LnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89IXIuaGFzQXJjVHlwZSgpLHM9bnx8e3dpdGhUcmFuc2l0aW9uRm9yQXhpczpvfTtzLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtPSExLHIudHJhbnNpdGluZz0hMSxyLnNldFRhcmdldFR5cGUoZSx0KSxyLnVwZGF0ZVRhcmdldHMoci5kYXRhLnRhcmdldHMpLHIudXBkYXRlQW5kUmVkcmF3KHMpfSxqLng9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKHQudXBkYXRlVGFyZ2V0WCh0LmRhdGEudGFyZ2V0cyxlKSx0LnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITB9KSksdC5kYXRhLnhzfSxqLnhzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW50ZXJuYWw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJih0LnVwZGF0ZVRhcmdldFhzKHQuZGF0YS50YXJnZXRzLGUpLHQucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMH0pKSx0LmRhdGEueHN9LGouem9vbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3JldHVybiBlJiYodC5pc1RpbWVTZXJpZXMoKSYmKGU9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQucGFyc2VEYXRlKGUpfSkpLHQuYnJ1c2guZXh0ZW50KGUpLHQucmVkcmF3KHt3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoWTp0LmNvbmZpZy56b29tX3Jlc2NhbGV9KSx0LmNvbmZpZy56b29tX29uem9vbS5jYWxsKHRoaXMsdC54Lm9yZ0RvbWFpbigpKSksdC5icnVzaC5leHRlbnQoKX0sai56b29tLmVuYWJsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsO3QuY29uZmlnLnpvb21fZW5hYmxlZD1lLHQudXBkYXRlQW5kUmVkcmF3KCl9LGoudW56b29tPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbnRlcm5hbDtlLmJydXNoLmNsZWFyKCkudXBkYXRlKCksZS5yZWRyYXcoe3dpdGhVcGRhdGVYRG9tYWluOiEwfSl9LGouem9vbS5tYXg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnLHI9dC5kMztpZigwIT09ZSYmIWUpcmV0dXJuIG4uem9vbV94X21heDtuLnpvb21feF9tYXg9ci5tYXgoW3Qub3JnWERvbWFpblsxXSxlXSl9LGouem9vbS5taW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbnRlcm5hbCxuPXQuY29uZmlnLHI9dC5kMztpZigwIT09ZSYmIWUpcmV0dXJuIG4uem9vbV94X21pbjtuLnpvb21feF9taW49ci5taW4oW3Qub3JnWERvbWFpblswXSxlXSl9LGouem9vbS5yYW5nZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm57bWF4OnRoaXMuZG9tYWluLm1heCgpLG1pbjp0aGlzLmRvbWFpbi5taW4oKX07ZyhlLm1heCkmJnRoaXMuZG9tYWluLm1heChlLm1heCksZyhlLm1pbikmJnRoaXMuZG9tYWluLm1pbihlLm1pbil9LHguaW5pdFBpZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmQzO2UucGllPXQubGF5b3V0LnBpZSgpLnZhbHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LnZhbHVlfSwwKX0pLGUucGllLnNvcnQoZS5nZXRPcmRlckZ1bmN0aW9uKCl8fG51bGwpfSx4LnVwZGF0ZVJhZGl1cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPXQuZ2F1Z2Vfd2lkdGh8fHQuZG9udXRfd2lkdGgscj1lLmZpbHRlclRhcmdldHNUb1Nob3coZS5kYXRhLnRhcmdldHMpLmxlbmd0aCplLmNvbmZpZy5nYXVnZV9hcmNzX21pbldpZHRoO2UucmFkaXVzRXhwYW5kZWQ9TWF0aC5taW4oZS5hcmNXaWR0aCxlLmFyY0hlaWdodCkvMiooZS5oYXNUeXBlKCJnYXVnZSIpPy44NToxKSxlLnJhZGl1cz0uOTUqZS5yYWRpdXNFeHBhbmRlZCxlLmlubmVyUmFkaXVzUmF0aW89bj8oZS5yYWRpdXMtbikvZS5yYWRpdXM6LjYsZS5pbm5lclJhZGl1cz1lLmhhc1R5cGUoImRvbnV0Iil8fGUuaGFzVHlwZSgiZ2F1Z2UiKT9lLnJhZGl1cyplLmlubmVyUmFkaXVzUmF0aW86MCxlLmdhdWdlQXJjV2lkdGg9bnx8KHI8PWUucmFkaXVzLWUuaW5uZXJSYWRpdXM/ZS5yYWRpdXMtZS5pbm5lclJhZGl1czpyPD1lLnJhZGl1cz9yOmUucmFkaXVzKX0seC51cGRhdGVBcmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2Uuc3ZnQXJjPWUuZ2V0U3ZnQXJjKCksZS5zdmdBcmNFeHBhbmRlZD1lLmdldFN2Z0FyY0V4cGFuZGVkKCksZS5zdmdBcmNFeHBhbmRlZFN1Yj1lLmdldFN2Z0FyY0V4cGFuZGVkKC45OCl9LHgudXBkYXRlQW5nbGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scz10aGlzLGk9cy5jb25maWcsYT0hMSxsPTA7cmV0dXJuIGk/KHMucGllKHMuZmlsdGVyVGFyZ2V0c1RvU2hvdyhzLmRhdGEudGFyZ2V0cykpLmZvckVhY2goZnVuY3Rpb24odCl7YXx8dC5kYXRhLmlkIT09ZS5kYXRhLmlkfHwoYT0hMCxlPXQsZS5pbmRleD1sKSxsKyt9KSxpc05hTihlLnN0YXJ0QW5nbGUpJiYoZS5zdGFydEFuZ2xlPTApLGlzTmFOKGUuZW5kQW5nbGUpJiYoZS5lbmRBbmdsZT1lLnN0YXJ0QW5nbGUpLHMuaXNHYXVnZVR5cGUoZS5kYXRhKSYmKHQ9aS5nYXVnZV9taW4sbj1pLmdhdWdlX21heCxyPU1hdGguUEkqKGkuZ2F1Z2VfZnVsbENpcmNsZT8yOjEpLyhuLXQpLG89ZS52YWx1ZTx0PzA6ZS52YWx1ZTxuP2UudmFsdWUtdDpuLXQsZS5zdGFydEFuZ2xlPWkuZ2F1Z2Vfc3RhcnRpbmdBbmdsZSxlLmVuZEFuZ2xlPWUuc3RhcnRBbmdsZStyKm8pLGE/ZTpudWxsKTpudWxsfSx4LmdldFN2Z0FyYz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmhhc1R5cGUoImdhdWdlIiksbj1lLmdhdWdlQXJjV2lkdGgvZS5maWx0ZXJUYXJnZXRzVG9TaG93KGUuZGF0YS50YXJnZXRzKS5sZW5ndGgscj1lLmQzLnN2Zy5hcmMoKS5vdXRlclJhZGl1cyhmdW5jdGlvbihyKXtyZXR1cm4gdD9lLnJhZGl1cy1uKnIuaW5kZXg6ZS5yYWRpdXN9KS5pbm5lclJhZGl1cyhmdW5jdGlvbihyKXtyZXR1cm4gdD9lLnJhZGl1cy1uKihyLmluZGV4KzEpOmUuaW5uZXJSYWRpdXN9KSxvPWZ1bmN0aW9uKHQsbil7dmFyIG87cmV0dXJuIG4/cih0KToobz1lLnVwZGF0ZUFuZ2xlKHQpLG8/cihvKToiTSAwIDAiKX07cmV0dXJuIG8uY2VudHJvaWQ9ci5jZW50cm9pZCxvfSx4LmdldFN2Z0FyY0V4cGFuZGVkPWZ1bmN0aW9uKGUpe2U9ZXx8MTt2YXIgdD10aGlzLG49dC5oYXNUeXBlKCJnYXVnZSIpLHI9dC5nYXVnZUFyY1dpZHRoL3QuZmlsdGVyVGFyZ2V0c1RvU2hvdyh0LmRhdGEudGFyZ2V0cykubGVuZ3RoLG89TWF0aC5taW4odC5yYWRpdXNFeHBhbmRlZCplLXQucmFkaXVzLC44KnItMTAwKigxLWUpKSxzPXQuZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKGZ1bmN0aW9uKHMpe3JldHVybiBuP3QucmFkaXVzLXIqcy5pbmRleCtvOnQucmFkaXVzRXhwYW5kZWQqZX0pLmlubmVyUmFkaXVzKGZ1bmN0aW9uKGUpe3JldHVybiBuP3QucmFkaXVzLXIqKGUuaW5kZXgrMSk6dC5pbm5lclJhZGl1c30pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10LnVwZGF0ZUFuZ2xlKGUpO3JldHVybiBuP3Mobik6Ik0gMCAwIn19LHguZ2V0QXJjPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8dGhpcy5pc0FyY1R5cGUoZS5kYXRhKT90aGlzLnN2Z0FyYyhlLHQpOiJNIDAgMCJ9LHgudHJhbnNmb3JtRm9yQXJjTGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpPXRoaXMsYT1pLmNvbmZpZyxsPWkudXBkYXRlQW5nbGUoZSksdT0iIixjPWkuaGFzVHlwZSgiZ2F1Z2UiKTtpZihsJiYhYyl0PXRoaXMuc3ZnQXJjLmNlbnRyb2lkKGwpLG49aXNOYU4odFswXSk/MDp0WzBdLHI9aXNOYU4odFsxXSk/MDp0WzFdLG89TWF0aC5zcXJ0KG4qbityKnIpLHM9aS5oYXNUeXBlKCJkb251dCIpJiZhLmRvbnV0X2xhYmVsX3JhdGlvP3AoYS5kb251dF9sYWJlbF9yYXRpbyk/YS5kb251dF9sYWJlbF9yYXRpbyhlLGkucmFkaXVzLG8pOmEuZG9udXRfbGFiZWxfcmF0aW86aS5oYXNUeXBlKCJwaWUiKSYmYS5waWVfbGFiZWxfcmF0aW8/cChhLnBpZV9sYWJlbF9yYXRpbyk/YS5waWVfbGFiZWxfcmF0aW8oZSxpLnJhZGl1cyxvKTphLnBpZV9sYWJlbF9yYXRpbzppLnJhZGl1cyYmbz8oMzYvaS5yYWRpdXM+LjM3NT8xLjE3NS0zNi9pLnJhZGl1czouOCkqaS5yYWRpdXMvbzowLHU9InRyYW5zbGF0ZSgiK24qcysiLCIrcipzKyIpIjtlbHNlIGlmKGwmJmMmJmkuZmlsdGVyVGFyZ2V0c1RvU2hvdyhpLmRhdGEudGFyZ2V0cykubGVuZ3RoPjEpe3ZhciBkPU1hdGguc2luKGwuZW5kQW5nbGUtTWF0aC5QSS8yKTtuPU1hdGguY29zKGwuZW5kQW5nbGUtTWF0aC5QSS8yKSooaS5yYWRpdXNFeHBhbmRlZCsyNSkscj1kKihpLnJhZGl1c0V4cGFuZGVkKzE1LU1hdGguYWJzKDEwKmQpKSszLHU9InRyYW5zbGF0ZSgiK24rIiwiK3IrIikifXJldHVybiB1fSx4LmdldEFyY1JhdGlvPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPU1hdGguUEkqKHQuaGFzVHlwZSgiZ2F1Z2UiKSYmIW4uZ2F1Z2VfZnVsbENpcmNsZT8xOjIpO3JldHVybiBlPyhlLmVuZEFuZ2xlLWUuc3RhcnRBbmdsZSkvcjpudWxsfSx4LmNvbnZlcnRUb0FyY0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkTmFtZSh7aWQ6ZS5kYXRhLmlkLHZhbHVlOmUudmFsdWUscmF0aW86dGhpcy5nZXRBcmNSYXRpbyhlKSxpbmRleDplLmluZGV4fSl9LHgudGV4dEZvckFyY0xhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaT10aGlzO3JldHVybiBpLnNob3VsZFNob3dBcmNMYWJlbCgpPyh0PWkudXBkYXRlQW5nbGUoZSksbj10P3QudmFsdWU6bnVsbCxyPWkuZ2V0QXJjUmF0aW8odCksbz1lLmRhdGEuaWQsaS5oYXNUeXBlKCJnYXVnZSIpfHxpLm1lZXRzQXJjTGFiZWxUaHJlc2hvbGQocik/KHM9aS5nZXRBcmNMYWJlbEZvcm1hdCgpLHM/cyhuLHIsbyk6aS5kZWZhdWx0QXJjVmFsdWVGb3JtYXQobixyKSk6IiIpOiIifSx4LnRleHRGb3JHYXVnZU1pbk1heD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmdldEdhdWdlTGFiZWxFeHRlbnRzKCk7cmV0dXJuIHI/cihlLHQpOmV9LHguZXhwYW5kQXJjPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcztpZihuLnRyYW5zaXRpbmcpcmV0dXJuIHZvaWQodD13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtuLnRyYW5zaXRpbmd8fCh3aW5kb3cuY2xlYXJJbnRlcnZhbCh0KSxuLmxlZ2VuZC5zZWxlY3RBbGwoIi5jMy1sZWdlbmQtaXRlbS1mb2N1c2VkIikuc2l6ZSgpPjAmJm4uZXhwYW5kQXJjKGUpKX0sMTApKTtlPW4ubWFwVG9UYXJnZXRJZHMoZSksbi5zdmcuc2VsZWN0QWxsKG4uc2VsZWN0b3JUYXJnZXRzKGUsIi4iK2EuY2hhcnRBcmMpKS5lYWNoKGZ1bmN0aW9uKGUpe24uc2hvdWxkRXhwYW5kKGUuZGF0YS5pZCkmJm4uZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLmV4cGFuZER1cmF0aW9uKGUuZGF0YS5pZCkpLmF0dHIoImQiLG4uc3ZnQXJjRXhwYW5kZWQpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyKm4uZXhwYW5kRHVyYXRpb24oZS5kYXRhLmlkKSkuYXR0cigiZCIsbi5zdmdBcmNFeHBhbmRlZFN1YikuZWFjaChmdW5jdGlvbihlKXtuLmlzRG9udXRUeXBlKGUuZGF0YSl9KX0pfSx4LnVuZXhwYW5kQXJjPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC50cmFuc2l0aW5nfHwoZT10Lm1hcFRvVGFyZ2V0SWRzKGUpLHQuc3ZnLnNlbGVjdEFsbCh0LnNlbGVjdG9yVGFyZ2V0cyhlLCIuIithLmNoYXJ0QXJjKSkuc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKGZ1bmN0aW9uKGUpe3JldHVybiB0LmV4cGFuZER1cmF0aW9uKGUuZGF0YS5pZCl9KS5hdHRyKCJkIix0LnN2Z0FyYyksdC5zdmcuc2VsZWN0QWxsKCIuIithLmFyYykpfSx4LmV4cGFuZER1cmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gdC5pc0RvbnV0VHlwZShlKT9uLmRvbnV0X2V4cGFuZF9kdXJhdGlvbjp0LmlzR2F1Z2VUeXBlKGUpP24uZ2F1Z2VfZXhwYW5kX2R1cmF0aW9uOnQuaXNQaWVUeXBlKGUpP24ucGllX2V4cGFuZF9kdXJhdGlvbjo1MH0seC5zaG91bGRFeHBhbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiB0LmlzRG9udXRUeXBlKGUpJiZuLmRvbnV0X2V4cGFuZHx8dC5pc0dhdWdlVHlwZShlKSYmbi5nYXVnZV9leHBhbmR8fHQuaXNQaWVUeXBlKGUpJiZuLnBpZV9leHBhbmR9LHguc2hvdWxkU2hvd0FyY0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49ITA7cmV0dXJuIGUuaGFzVHlwZSgiZG9udXQiKT9uPXQuZG9udXRfbGFiZWxfc2hvdzplLmhhc1R5cGUoInBpZSIpJiYobj10LnBpZV9sYWJlbF9zaG93KSxufSx4Lm1lZXRzQXJjTGFiZWxUaHJlc2hvbGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBlPj0odC5oYXNUeXBlKCJkb251dCIpP24uZG9udXRfbGFiZWxfdGhyZXNob2xkOm4ucGllX2xhYmVsX3RocmVzaG9sZCl9LHguZ2V0QXJjTGFiZWxGb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj10LnBpZV9sYWJlbF9mb3JtYXQ7cmV0dXJuIGUuaGFzVHlwZSgiZ2F1Z2UiKT9uPXQuZ2F1Z2VfbGFiZWxfZm9ybWF0OmUuaGFzVHlwZSgiZG9udXQiKSYmKG49dC5kb251dF9sYWJlbF9mb3JtYXQpLG59LHguZ2V0R2F1Z2VMYWJlbEV4dGVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuZ2F1Z2VfbGFiZWxfZXh0ZW50c30seC5nZXRBcmNUaXRsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuaGFzVHlwZSgiZG9udXQiKT9lLmNvbmZpZy5kb251dF90aXRsZToiIn0seC51cGRhdGVUYXJnZXRzRm9yQXJjPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLG89ci5tYWluLHM9ci5jbGFzc0NoYXJ0QXJjLmJpbmQociksaT1yLmNsYXNzQXJjcy5iaW5kKHIpLGw9ci5jbGFzc0ZvY3VzLmJpbmQocik7dD1vLnNlbGVjdCgiLiIrYS5jaGFydEFyY3MpLnNlbGVjdEFsbCgiLiIrYS5jaGFydEFyYykuZGF0YShyLnBpZShlKSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBzKGUpK2woZS5kYXRhKX0pLG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixzKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixpKSxuLmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IixyLmhhc1R5cGUoImdhdWdlIik/Ii0uMWVtIjoiLjM1ZW0iKS5zdHlsZSgib3BhY2l0eSIsMCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpfSx4LmluaXRBcmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuYXJjcz1lLm1haW4uc2VsZWN0KCIuIithLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS5jaGFydEFyY3MpLmF0dHIoInRyYW5zZm9ybSIsZS5nZXRUcmFuc2xhdGUoImFyYyIpKSxlLmFyY3MuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGEuY2hhcnRBcmNzVGl0bGUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZS5nZXRBcmNUaXRsZSgpKX0seC5yZWRyYXdBcmM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scyxpPXRoaXMsbD1pLmQzLHU9aS5jb25maWcsYz1pLm1haW4sZD1pLmhhc1R5cGUoImdhdWdlIik7aWYocj1jLnNlbGVjdEFsbCgiLiIrYS5hcmNzKS5zZWxlY3RBbGwoIi4iK2EuYXJjKS5kYXRhKGkuYXJjRGF0YS5iaW5kKGkpKSxyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLGkuY2xhc3NBcmMuYmluZChpKSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUpe3JldHVybiBpLmNvbG9yKGUuZGF0YSl9KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihlKXtyZXR1cm4gdS5pbnRlcmFjdGlvbl9lbmFibGVkJiZ1LmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShlKT8icG9pbnRlciI6bnVsbH0pLmVhY2goZnVuY3Rpb24oZSl7aS5pc0dhdWdlVHlwZShlLmRhdGEpJiYoZS5zdGFydEFuZ2xlPWUuZW5kQW5nbGU9dS5nYXVnZV9zdGFydGluZ0FuZ2xlKSx0aGlzLl9jdXJyZW50PWV9KSxkJiYocz1jLnNlbGVjdEFsbCgiLiIrYS5hcmNzKS5zZWxlY3RBbGwoIi4iK2EuYXJjTGFiZWxMaW5lKS5kYXRhKGkuYXJjRGF0YS5iaW5kKGkpKSxzLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBhLmFyY0xhYmVsTGluZSsiICIrYS50YXJnZXQrIiAiK2EudGFyZ2V0KyItIitlLmRhdGEuaWR9KSwxPT09aS5maWx0ZXJUYXJnZXRzVG9TaG93KGkuZGF0YS50YXJnZXRzKS5sZW5ndGg/cy5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTpzLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlKXtyZXR1cm4gdS5jb2xvcl9wYXR0ZXJuLmxlbmd0aD4wP2kubGV2ZWxDb2xvcihlLmRhdGEudmFsdWVzWzBdLnZhbHVlKTppLmNvbG9yKGUuZGF0YSl9KS5zdHlsZSgiZGlzcGxheSIsdS5nYXVnZV9sYWJlbExpbmVfc2hvdz8iIjoibm9uZSIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTAscj0wLG89IiI7aWYoaS5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZihlLmRhdGEuaWQpPDApe3ZhciBzPWkudXBkYXRlQW5nbGUoZSksYT1pLmdhdWdlQXJjV2lkdGgvaS5maWx0ZXJUYXJnZXRzVG9TaG93KGkuZGF0YS50YXJnZXRzKS5sZW5ndGgqKHMuaW5kZXgrMSksdT1zLmVuZEFuZ2xlLU1hdGguUEkvMixjPWkucmFkaXVzLWEsZD11LSgwPT09Yz8wOjEvYyk7dD1pLnJhZGl1c0V4cGFuZGVkLWkucmFkaXVzK2Esbj1NYXRoLmNvcyhkKSpjLHI9TWF0aC5zaW4oZCkqYyxvPSJyb3RhdGUoIisxODAqdS9NYXRoLlBJKyIsICIrbisiLCAiK3IrIikifWwuc2VsZWN0KHRoaXMpLmF0dHIoe3g6bix5OnIsd2lkdGg6dCxoZWlnaHQ6Mix0cmFuc2Zvcm06b30pLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgIisodCsyKSsiLCAwIil9KSksci5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiFpLmlzR2F1Z2VUeXBlKGUuZGF0YSkmJm4/InNjYWxlKDApIjoiIn0pLm9uKCJtb3VzZW92ZXIiLHUuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihlKXt2YXIgdCxuO2kudHJhbnNpdGluZ3x8KHQ9aS51cGRhdGVBbmdsZShlKSkmJihuPWkuY29udmVydFRvQXJjRGF0YSh0KSxpLmV4cGFuZEFyYyh0LmRhdGEuaWQpLGkuYXBpLmZvY3VzKHQuZGF0YS5pZCksaS50b2dnbGVGb2N1c0xlZ2VuZCh0LmRhdGEuaWQsITApLGkuY29uZmlnLmRhdGFfb25tb3VzZW92ZXIobix0aGlzKSl9Om51bGwpLm9uKCJtb3VzZW1vdmUiLHUuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihlKXt2YXIgdCxuLHI9aS51cGRhdGVBbmdsZShlKTtyJiYodD1pLmNvbnZlcnRUb0FyY0RhdGEociksbj1bdF0saS5zaG93VG9vbHRpcChuLHRoaXMpKX06bnVsbCkub24oIm1vdXNlb3V0Iix1LmludGVyYWN0aW9uX2VuYWJsZWQ/ZnVuY3Rpb24oZSl7dmFyIHQsbjtpLnRyYW5zaXRpbmd8fCh0PWkudXBkYXRlQW5nbGUoZSkpJiYobj1pLmNvbnZlcnRUb0FyY0RhdGEodCksaS51bmV4cGFuZEFyYyh0LmRhdGEuaWQpLGkuYXBpLnJldmVydCgpLGkucmV2ZXJ0TGVnZW5kKCksaS5oaWRlVG9vbHRpcCgpLGkuY29uZmlnLmRhdGFfb25tb3VzZW91dChuLHRoaXMpKX06bnVsbCkub24oImNsaWNrIix1LmludGVyYWN0aW9uX2VuYWJsZWQ/ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkudXBkYXRlQW5nbGUoZSk7ciYmKG49aS5jb252ZXJ0VG9BcmNEYXRhKHIpLGkudG9nZ2xlU2hhcGUmJmkudG9nZ2xlU2hhcGUodGhpcyxuLHQpLGkuY29uZmlnLmRhdGFfb25jbGljay5jYWxsKGkuYXBpLG4sdGhpcykpfTpudWxsKS5lYWNoKGZ1bmN0aW9uKCl7aS50cmFuc2l0aW5nPSEwfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24oZSl7dmFyIHQsbj1pLnVwZGF0ZUFuZ2xlKGUpO3JldHVybiBuPyhpc05hTih0aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGUpJiYodGhpcy5fY3VycmVudC5zdGFydEFuZ2xlPTApLGlzTmFOKHRoaXMuX2N1cnJlbnQuZW5kQW5nbGUpJiYodGhpcy5fY3VycmVudC5lbmRBbmdsZT10aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGUpLHQ9bC5pbnRlcnBvbGF0ZSh0aGlzLl9jdXJyZW50LG4pLHRoaXMuX2N1cnJlbnQ9dCgwKSxmdW5jdGlvbihuKXt2YXIgcj10KG4pO3JldHVybiByLmRhdGE9ZS5kYXRhLGkuZ2V0QXJjKHIsITApfSk6ZnVuY3Rpb24oKXtyZXR1cm4iTSAwIDAifX0pLmF0dHIoInRyYW5zZm9ybSIsbj8ic2NhbGUoMSkiOiIiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGkubGV2ZWxDb2xvcj9pLmxldmVsQ29sb3IoZS5kYXRhLnZhbHVlc1swXS52YWx1ZSk6aS5jb2xvcihlLmRhdGEuaWQpfSkuY2FsbChpLmVuZGFsbCxmdW5jdGlvbigpe2kudHJhbnNpdGluZz0hMX0pLHIuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksYy5zZWxlY3RBbGwoIi4iK2EuY2hhcnRBcmMpLnNlbGVjdCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGkuaXNHYXVnZVR5cGUoZS5kYXRhKT9hLmdhdWdlVmFsdWU6IiJ9KS50ZXh0KGkudGV4dEZvckFyY0xhYmVsLmJpbmQoaSkpLmF0dHIoInRyYW5zZm9ybSIsaS50cmFuc2Zvcm1Gb3JBcmNMYWJlbC5iaW5kKGkpKS5zdHlsZSgiZm9udC1zaXplIixmdW5jdGlvbihlKXtyZXR1cm4gaS5pc0dhdWdlVHlwZShlLmRhdGEpJiYxPT09aS5maWx0ZXJUYXJnZXRzVG9TaG93KGkuZGF0YS50YXJnZXRzKS5sZW5ndGg/TWF0aC5yb3VuZChpLnJhZGl1cy81KSsicHgiOiIifSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlKXtyZXR1cm4gaS5pc1RhcmdldFRvU2hvdyhlLmRhdGEuaWQpJiZpLmlzQXJjVHlwZShlLmRhdGEpPzE6MH0pLGMuc2VsZWN0KCIuIithLmNoYXJ0QXJjc1RpdGxlKS5zdHlsZSgib3BhY2l0eSIsaS5oYXNUeXBlKCJkb251dCIpfHxkPzE6MCksZCl7dmFyIF89MDtvPWkuYXJjcy5zZWxlY3QoImcuIithLmNoYXJ0QXJjc0JhY2tncm91bmQpLnNlbGVjdEFsbCgicGF0aC4iK2EuY2hhcnRBcmNzQmFja2dyb3VuZCkuZGF0YShpLmRhdGEudGFyZ2V0cyksby5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG8uYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEuY2hhcnRBcmNzQmFja2dyb3VuZCsiICIrYS5jaGFydEFyY3NCYWNrZ3JvdW5kKyItIit0fSkuYXR0cigiZCIsZnVuY3Rpb24oZSl7aWYoaS5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZihlLmlkKT49MClyZXR1cm4iTSAwIDAiO3ZhciB0PXtkYXRhOlt7dmFsdWU6dS5nYXVnZV9tYXh9XSxzdGFydEFuZ2xlOnUuZ2F1Z2Vfc3RhcnRpbmdBbmdsZSxlbmRBbmdsZTotMSp1LmdhdWdlX3N0YXJ0aW5nQW5nbGUqKHUuZ2F1Z2VfZnVsbENpcmNsZT9NYXRoLlBJOjEpLGluZGV4Ol8rK307cmV0dXJuIGkuZ2V0QXJjKHQsITAsITApfSksby5leGl0KCkucmVtb3ZlKCksaS5hcmNzLnNlbGVjdCgiLiIrYS5jaGFydEFyY3NHYXVnZVVuaXQpLmF0dHIoImR5IiwiLjc1ZW0iKS50ZXh0KHUuZ2F1Z2VfbGFiZWxfc2hvdz91LmdhdWdlX3VuaXRzOiIiKSxpLmFyY3Muc2VsZWN0KCIuIithLmNoYXJ0QXJjc0dhdWdlTWluKS5hdHRyKCJkeCIsLTEqKGkuaW5uZXJSYWRpdXMrKGkucmFkaXVzLWkuaW5uZXJSYWRpdXMpLyh1LmdhdWdlX2Z1bGxDaXJjbGU/MToyKSkrInB4IikuYXR0cigiZHkiLCIxLjJlbSIpLnRleHQodS5nYXVnZV9sYWJlbF9zaG93P2kudGV4dEZvckdhdWdlTWluTWF4KHUuZ2F1Z2VfbWluLCExKToiIiksaS5hcmNzLnNlbGVjdCgiLiIrYS5jaGFydEFyY3NHYXVnZU1heCkuYXR0cigiZHgiLGkuaW5uZXJSYWRpdXMrKGkucmFkaXVzLWkuaW5uZXJSYWRpdXMpLyh1LmdhdWdlX2Z1bGxDaXJjbGU/MToyKSsicHgiKS5hdHRyKCJkeSIsIjEuMmVtIikudGV4dCh1LmdhdWdlX2xhYmVsX3Nob3c/aS50ZXh0Rm9yR2F1Z2VNaW5NYXgodS5nYXVnZV9tYXgsITApOiIiKX19LHguaW5pdEdhdWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcmNzO3RoaXMuaGFzVHlwZSgiZ2F1Z2UiKSYmKGUuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEuY2hhcnRBcmNzQmFja2dyb3VuZCksZS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsYS5jaGFydEFyY3NHYXVnZVVuaXQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxlLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixhLmNoYXJ0QXJjc0dhdWdlTWluKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksZS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsYS5jaGFydEFyY3NHYXVnZU1heCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpKX0seC5nZXRHYXVnZUxhYmVsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZmlnLmdhdWdlX2xhYmVsX3Nob3c/MjA6MH0seC5oYXNDYWNoZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoIShlW3RdaW4gdGhpcy5jYWNoZSkpcmV0dXJuITE7cmV0dXJuITB9LHguYWRkQ2FjaGU9ZnVuY3Rpb24oZSx0KXt0aGlzLmNhY2hlW2VdPXRoaXMuY2xvbmVUYXJnZXQodCl9LHguZ2V0Q2FjaGVzPWZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdaW4gdGhpcy5jYWNoZSYmbi5wdXNoKHRoaXMuY2xvbmVUYXJnZXQodGhpcy5jYWNoZVtlW3RdXSkpO3JldHVybiBufSx4LmNhdGVnb3J5TmFtZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbmZpZztyZXR1cm4gZTx0LmF4aXNfeF9jYXRlZ29yaWVzLmxlbmd0aD90LmF4aXNfeF9jYXRlZ29yaWVzW2VdOmV9LHguZ2VuZXJhdGVDbGFzcz1mdW5jdGlvbihlLHQpe3JldHVybiIgIitlKyIgIitlK3RoaXMuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodCl9LHguY2xhc3NUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3MoYS50ZXh0LGUuaW5kZXgpfSx4LmNsYXNzVGV4dHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhhLnRleHRzLGUuaWQpfSx4LmNsYXNzU2hhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhhLnNoYXBlLGUuaW5kZXgpfSx4LmNsYXNzU2hhcGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3MoYS5zaGFwZXMsZS5pZCl9LHguY2xhc3NMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGEubGluZSxlLmlkKX0seC5jbGFzc0xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGVzKGUpK3RoaXMuZ2VuZXJhdGVDbGFzcyhhLmxpbmVzLGUuaWQpfSx4LmNsYXNzQ2lyY2xlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGEuY2lyY2xlLGUuaW5kZXgpfSx4LmNsYXNzQ2lyY2xlcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhlKSt0aGlzLmdlbmVyYXRlQ2xhc3MoYS5jaXJjbGVzLGUuaWQpfSx4LmNsYXNzQmFyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGEuYmFyLGUuaW5kZXgpfSx4LmNsYXNzQmFycz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhlKSt0aGlzLmdlbmVyYXRlQ2xhc3MoYS5iYXJzLGUuaWQpfSx4LmNsYXNzQXJjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZS5kYXRhKSt0aGlzLmdlbmVyYXRlQ2xhc3MoYS5hcmMsZS5kYXRhLmlkKX0seC5jbGFzc0FyY3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xhc3NTaGFwZXMoZS5kYXRhKSt0aGlzLmdlbmVyYXRlQ2xhc3MoYS5hcmNzLGUuZGF0YS5pZCl9LHguY2xhc3NBcmVhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoZSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGEuYXJlYSxlLmlkKX0seC5jbGFzc0FyZWFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsYXNzU2hhcGVzKGUpK3RoaXMuZ2VuZXJhdGVDbGFzcyhhLmFyZWFzLGUuaWQpfSx4LmNsYXNzUmVnaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhhLnJlZ2lvbix0KSsiICIrKCJjbGFzcyJpbiBlP2UuY2xhc3M6IiIpfSx4LmNsYXNzRXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhhLmV2ZW50UmVjdCxlLmluZGV4KX0seC5jbGFzc1RhcmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcuZGF0YV9jbGFzc2VzW2VdLHI9IiI7cmV0dXJuIG4mJihyPSIgIithLnRhcmdldCsiLSIrbiksdC5nZW5lcmF0ZUNsYXNzKGEudGFyZ2V0LGUpK3J9LHguY2xhc3NGb2N1cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbGFzc0ZvY3VzZWQoZSkrdGhpcy5jbGFzc0RlZm9jdXNlZChlKX0seC5jbGFzc0ZvY3VzZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIiAiKyh0aGlzLmZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihlLmlkKT49MD9hLmZvY3VzZWQ6IiIpfSx4LmNsYXNzRGVmb2N1c2VkPWZ1bmN0aW9uKGUpe3JldHVybiIgIisodGhpcy5kZWZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihlLmlkKT49MD9hLmRlZm9jdXNlZDoiIil9LHguY2xhc3NDaGFydFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2hhcnRUZXh0K3RoaXMuY2xhc3NUYXJnZXQoZS5pZCl9LHguY2xhc3NDaGFydExpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2hhcnRMaW5lK3RoaXMuY2xhc3NUYXJnZXQoZS5pZCl9LHguY2xhc3NDaGFydEJhcj1mdW5jdGlvbihlKXtyZXR1cm4gYS5jaGFydEJhcit0aGlzLmNsYXNzVGFyZ2V0KGUuaWQpfSx4LmNsYXNzQ2hhcnRBcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2hhcnRBcmMrdGhpcy5jbGFzc1RhcmdldChlLmRhdGEuaWQpfSx4LmdldFRhcmdldFNlbGVjdG9yU3VmZml4PWZ1bmN0aW9uKGUpe3JldHVybiBlfHwwPT09ZT8oIi0iK2UpLnJlcGxhY2UoL1tccz8hQCMkJV4mKigpXz0rLC48PiciOjtcW1xdXC98fmB7fVxcXS9nLCItIik6IiJ9LHguc2VsZWN0b3JUYXJnZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odHx8IiIpKyIuIithLnRhcmdldCt0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUpfSx4LnNlbGVjdG9yVGFyZ2V0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIGU9ZXx8W10sZS5sZW5ndGg/ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uc2VsZWN0b3JUYXJnZXQoZSx0KX0pOm51bGx9LHguc2VsZWN0b3JMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2EubGVnZW5kSXRlbSt0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGUpfSx4LnNlbGVjdG9yTGVnZW5kcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlJiZlLmxlbmd0aD9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5zZWxlY3RvckxlZ2VuZChlKX0pOm51bGx9LHguZ2V0Q2xpcFBhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuInVybCgiKyh3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIDkuIik+PTA/IiI6ZG9jdW1lbnQuVVJMLnNwbGl0KCIjIilbMF0pKyIjIitlKyIpIn0seC5hcHBlbmRDbGlwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix0KS5hcHBlbmQoInJlY3QiKX0seC5nZXRBeGlzQ2xpcFg9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5tYXgoMzAsdGhpcy5tYXJnaW4ubGVmdCk7cmV0dXJuIGU/LSgxK3QpOi0odC0xKX0seC5nZXRBeGlzQ2xpcFk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/LTIwOi10aGlzLm1hcmdpbi50b3B9LHguZ2V0WEF4aXNDbGlwWD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZ2V0QXhpc0NsaXBYKCFlLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSx4LmdldFhBeGlzQ2xpcFk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLmdldEF4aXNDbGlwWSghZS5jb25maWcuYXhpc19yb3RhdGVkKX0seC5nZXRZQXhpc0NsaXBYPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5jb25maWcuYXhpc195X2lubmVyPy0xOmUuZ2V0QXhpc0NsaXBYKGUuY29uZmlnLmF4aXNfcm90YXRlZCl9LHguZ2V0WUF4aXNDbGlwWT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZ2V0QXhpc0NsaXBZKGUuY29uZmlnLmF4aXNfcm90YXRlZCl9LHguZ2V0QXhpc0NsaXBXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49TWF0aC5tYXgoMzAsdC5tYXJnaW4ubGVmdCkscj1NYXRoLm1heCgzMCx0Lm1hcmdpbi5yaWdodCk7cmV0dXJuIGU/dC53aWR0aCsyK24rcjp0Lm1hcmdpbi5sZWZ0KzIwfSx4LmdldEF4aXNDbGlwSGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybihlP3RoaXMubWFyZ2luLmJvdHRvbTp0aGlzLm1hcmdpbi50b3ArdGhpcy5oZWlnaHQpKzIwfSx4LmdldFhBeGlzQ2xpcFdpZHRoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5nZXRBeGlzQ2xpcFdpZHRoKCFlLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSx4LmdldFhBeGlzQ2xpcEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZ2V0QXhpc0NsaXBIZWlnaHQoIWUuY29uZmlnLmF4aXNfcm90YXRlZCl9LHguZ2V0WUF4aXNDbGlwV2lkdGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLmdldEF4aXNDbGlwV2lkdGgoZS5jb25maWcuYXhpc19yb3RhdGVkKSsoZS5jb25maWcuYXhpc195X2lubmVyPzIwOjApfSx4LmdldFlBeGlzQ2xpcEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZ2V0QXhpc0NsaXBIZWlnaHQoZS5jb25maWcuYXhpc19yb3RhdGVkKX0seC5nZW5lcmF0ZUNvbG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49ZS5kMyxyPXQuZGF0YV9jb2xvcnMsbz1UKHQuY29sb3JfcGF0dGVybik/dC5jb2xvcl9wYXR0ZXJuOm4uc2NhbGUuY2F0ZWdvcnkxMCgpLnJhbmdlKCkscz10LmRhdGFfY29sb3IsaT1bXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmlkfHxlLmRhdGEmJmUuZGF0YS5pZHx8ZTtyZXR1cm4gcltuXWluc3RhbmNlb2YgRnVuY3Rpb24/dD1yW25dKGUpOnJbbl0/dD1yW25dOihpLmluZGV4T2Yobik8MCYmaS5wdXNoKG4pLHQ9b1tpLmluZGV4T2Yobiklby5sZW5ndGhdLHJbbl09dCkscyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3ModCxlKTp0fX0seC5nZW5lcmF0ZUxldmVsQ29sb3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj10LmNvbG9yX3BhdHRlcm4scj10LmNvbG9yX3RocmVzaG9sZCxvPSJ2YWx1ZSI9PT1yLnVuaXQscz1yLnZhbHVlcyYmci52YWx1ZXMubGVuZ3RoP3IudmFsdWVzOltdLGk9ci5tYXh8fDEwMDtyZXR1cm4gVCh0LmNvbG9yX3RocmVzaG9sZCk/ZnVuY3Rpb24oZSl7dmFyIHQscj1uW24ubGVuZ3RoLTFdO2Zvcih0PTA7dDxzLmxlbmd0aDt0KyspaWYoKG8/ZToxMDAqZS9pKTxzW3RdKXtyPW5bdF07YnJlYWt9cmV0dXJuIHJ9Om51bGx9LHguZ2V0RGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3ZhciBlPXtiaW5kdG86IiNjaGFydCIsc3ZnX2NsYXNzbmFtZTp2b2lkIDAsc2l6ZV93aWR0aDp2b2lkIDAsc2l6ZV9oZWlnaHQ6dm9pZCAwLHBhZGRpbmdfbGVmdDp2b2lkIDAscGFkZGluZ19yaWdodDp2b2lkIDAscGFkZGluZ190b3A6dm9pZCAwLHBhZGRpbmdfYm90dG9tOnZvaWQgMCxyZXNpemVfYXV0bzohMCx6b29tX2VuYWJsZWQ6ITEsem9vbV9leHRlbnQ6dm9pZCAwLHpvb21fcHJpdmlsZWdlZDohMSx6b29tX3Jlc2NhbGU6ITEsem9vbV9vbnpvb206ZnVuY3Rpb24oKXt9LHpvb21fb256b29tc3RhcnQ6ZnVuY3Rpb24oKXt9LHpvb21fb256b29tZW5kOmZ1bmN0aW9uKCl7fSx6b29tX3hfbWluOnZvaWQgMCx6b29tX3hfbWF4OnZvaWQgMCxpbnRlcmFjdGlvbl9icmlnaHRlbjohMCxpbnRlcmFjdGlvbl9lbmFibGVkOiEwLG9ubW91c2VvdmVyOmZ1bmN0aW9uKCl7fSxvbm1vdXNlb3V0OmZ1bmN0aW9uKCl7fSxvbnJlc2l6ZTpmdW5jdGlvbigpe30sb25yZXNpemVkOmZ1bmN0aW9uKCl7fSxvbmluaXQ6ZnVuY3Rpb24oKXt9LG9ucmVuZGVyZWQ6ZnVuY3Rpb24oKXt9LHRyYW5zaXRpb25fZHVyYXRpb246MzUwLGRhdGFfeDp2b2lkIDAsZGF0YV94czp7fSxkYXRhX3hGb3JtYXQ6IiVZLSVtLSVkIixkYXRhX3hMb2NhbHRpbWU6ITAsZGF0YV94U29ydDohMCxkYXRhX2lkQ29udmVydGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkYXRhX25hbWVzOnt9LGRhdGFfY2xhc3Nlczp7fSxkYXRhX2dyb3VwczpbXSxkYXRhX2F4ZXM6e30sZGF0YV90eXBlOnZvaWQgMCxkYXRhX3R5cGVzOnt9LGRhdGFfbGFiZWxzOnt9LGRhdGFfb3JkZXI6ImRlc2MiLGRhdGFfcmVnaW9uczp7fSxkYXRhX2NvbG9yOnZvaWQgMCxkYXRhX2NvbG9yczp7fSxkYXRhX2hpZGU6ITEsZGF0YV9maWx0ZXI6dm9pZCAwLGRhdGFfc2VsZWN0aW9uX2VuYWJsZWQ6ITEsZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZDohMSxkYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGU6ITAsZGF0YV9zZWxlY3Rpb25fZHJhZ2dhYmxlOiExLGRhdGFfb25jbGljazpmdW5jdGlvbigpe30sZGF0YV9vbm1vdXNlb3ZlcjpmdW5jdGlvbigpe30sZGF0YV9vbm1vdXNlb3V0OmZ1bmN0aW9uKCl7fSxkYXRhX29uc2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9LGRhdGFfb251bnNlbGVjdGVkOmZ1bmN0aW9uKCl7fSxkYXRhX3VybDp2b2lkIDAsZGF0YV9oZWFkZXJzOnZvaWQgMCxkYXRhX2pzb246dm9pZCAwLGRhdGFfcm93czp2b2lkIDAsZGF0YV9jb2x1bW5zOnZvaWQgMCxkYXRhX21pbWVUeXBlOnZvaWQgMCxkYXRhX2tleXM6dm9pZCAwLGRhdGFfZW1wdHlfbGFiZWxfdGV4dDoiIixzdWJjaGFydF9zaG93OiExLHN1YmNoYXJ0X3NpemVfaGVpZ2h0OjYwLHN1YmNoYXJ0X2F4aXNfeF9zaG93OiEwLHN1YmNoYXJ0X29uYnJ1c2g6ZnVuY3Rpb24oKXt9LGNvbG9yX3BhdHRlcm46W10sY29sb3JfdGhyZXNob2xkOnt9LGxlZ2VuZF9zaG93OiEwLGxlZ2VuZF9oaWRlOiExLGxlZ2VuZF9wb3NpdGlvbjoiYm90dG9tIixsZWdlbmRfaW5zZXRfYW5jaG9yOiJ0b3AtbGVmdCIsbGVnZW5kX2luc2V0X3g6MTAsbGVnZW5kX2luc2V0X3k6MCxsZWdlbmRfaW5zZXRfc3RlcDp2b2lkIDAsbGVnZW5kX2l0ZW1fb25jbGljazp2b2lkIDAsbGVnZW5kX2l0ZW1fb25tb3VzZW92ZXI6dm9pZCAwLGxlZ2VuZF9pdGVtX29ubW91c2VvdXQ6dm9pZCAwLGxlZ2VuZF9lcXVhbGx5OiExLGxlZ2VuZF9wYWRkaW5nOjAsbGVnZW5kX2l0ZW1fdGlsZV93aWR0aDoxMCxsZWdlbmRfaXRlbV90aWxlX2hlaWdodDoxMCxheGlzX3JvdGF0ZWQ6ITEsYXhpc194X3Nob3c6ITAsYXhpc194X3R5cGU6ImluZGV4ZWQiLGF4aXNfeF9sb2NhbHRpbWU6ITAsYXhpc194X2NhdGVnb3JpZXM6W10sYXhpc194X3RpY2tfY2VudGVyZWQ6ITEsYXhpc194X3RpY2tfZm9ybWF0OnZvaWQgMCxheGlzX3hfdGlja19jdWxsaW5nOnt9LGF4aXNfeF90aWNrX2N1bGxpbmdfbWF4OjEwLGF4aXNfeF90aWNrX2NvdW50OnZvaWQgMCxheGlzX3hfdGlja19maXQ6ITAsYXhpc194X3RpY2tfdmFsdWVzOm51bGwsYXhpc194X3RpY2tfcm90YXRlOjAsYXhpc194X3RpY2tfb3V0ZXI6ITAsYXhpc194X3RpY2tfbXVsdGlsaW5lOiEwLGF4aXNfeF90aWNrX211bHRpbGluZU1heDowLGF4aXNfeF90aWNrX3dpZHRoOm51bGwsYXhpc194X21heDp2b2lkIDAsYXhpc194X21pbjp2b2lkIDAsYXhpc194X3BhZGRpbmc6e30sYXhpc194X2hlaWdodDp2b2lkIDAsYXhpc194X2V4dGVudDp2b2lkIDAsYXhpc194X2xhYmVsOnt9LGF4aXNfeF9pbm5lcjp2b2lkIDAsYXhpc195X3Nob3c6ITAsYXhpc195X3R5cGU6dm9pZCAwLGF4aXNfeV9tYXg6dm9pZCAwLGF4aXNfeV9taW46dm9pZCAwLGF4aXNfeV9pbnZlcnRlZDohMSxheGlzX3lfY2VudGVyOnZvaWQgMCxheGlzX3lfaW5uZXI6dm9pZCAwLGF4aXNfeV9sYWJlbDp7fSxheGlzX3lfdGlja19mb3JtYXQ6dm9pZCAwLGF4aXNfeV90aWNrX291dGVyOiEwLGF4aXNfeV90aWNrX3ZhbHVlczpudWxsLGF4aXNfeV90aWNrX3JvdGF0ZTowLGF4aXNfeV90aWNrX2NvdW50OnZvaWQgMCxheGlzX3lfdGlja190aW1lX3ZhbHVlOnZvaWQgMCxheGlzX3lfdGlja190aW1lX2ludGVydmFsOnZvaWQgMCxheGlzX3lfcGFkZGluZzp7fSxheGlzX3lfZGVmYXVsdDp2b2lkIDAsYXhpc195Ml9zaG93OiExLGF4aXNfeTJfbWF4OnZvaWQgMCxheGlzX3kyX21pbjp2b2lkIDAsYXhpc195Ml9pbnZlcnRlZDohMSxheGlzX3kyX2NlbnRlcjp2b2lkIDAsYXhpc195Ml9pbm5lcjp2b2lkIDAsYXhpc195Ml9sYWJlbDp7fSxheGlzX3kyX3RpY2tfZm9ybWF0OnZvaWQgMCxheGlzX3kyX3RpY2tfb3V0ZXI6ITAsYXhpc195Ml90aWNrX3ZhbHVlczpudWxsLGF4aXNfeTJfdGlja19jb3VudDp2b2lkIDAsYXhpc195Ml9wYWRkaW5nOnt9LGF4aXNfeTJfZGVmYXVsdDp2b2lkIDAsZ3JpZF94X3Nob3c6ITEsZ3JpZF94X3R5cGU6InRpY2siLGdyaWRfeF9saW5lczpbXSxncmlkX3lfc2hvdzohMSxncmlkX3lfbGluZXM6W10sZ3JpZF95X3RpY2tzOjEwLGdyaWRfZm9jdXNfc2hvdzohMCxncmlkX2xpbmVzX2Zyb250OiEwLHBvaW50X3Nob3c6ITAscG9pbnRfcjoyLjUscG9pbnRfc2Vuc2l0aXZpdHk6MTAscG9pbnRfZm9jdXNfZXhwYW5kX2VuYWJsZWQ6ITAscG9pbnRfZm9jdXNfZXhwYW5kX3I6dm9pZCAwLHBvaW50X3NlbGVjdF9yOnZvaWQgMCxsaW5lX2Nvbm5lY3ROdWxsOiExLGxpbmVfc3RlcF90eXBlOiJzdGVwIixiYXJfd2lkdGg6dm9pZCAwLGJhcl93aWR0aF9yYXRpbzouNixiYXJfd2lkdGhfbWF4OnZvaWQgMCxiYXJfemVyb2Jhc2VkOiEwLGJhcl9zcGFjZTowLGFyZWFfemVyb2Jhc2VkOiEwLGFyZWFfYWJvdmU6ITEscGllX2xhYmVsX3Nob3c6ITAscGllX2xhYmVsX2Zvcm1hdDp2b2lkIDAscGllX2xhYmVsX3RocmVzaG9sZDouMDUscGllX2xhYmVsX3JhdGlvOnZvaWQgMCxwaWVfZXhwYW5kOnt9LHBpZV9leHBhbmRfZHVyYXRpb246NTAsZ2F1Z2VfZnVsbENpcmNsZTohMSxnYXVnZV9sYWJlbF9zaG93OiEwLGdhdWdlX2xhYmVsTGluZV9zaG93OiEwLGdhdWdlX2xhYmVsX2Zvcm1hdDp2b2lkIDAsZ2F1Z2VfbWluOjAsZ2F1Z2VfbWF4OjEwMCxnYXVnZV9zdGFydGluZ0FuZ2xlOi0xKk1hdGguUEkvMixnYXVnZV9sYWJlbF9leHRlbnRzOnZvaWQgMCxnYXVnZV91bml0czp2b2lkIDAsZ2F1Z2Vfd2lkdGg6dm9pZCAwLGdhdWdlX2FyY3NfbWluV2lkdGg6NSxnYXVnZV9leHBhbmQ6e30sZ2F1Z2VfZXhwYW5kX2R1cmF0aW9uOjUwLGRvbnV0X2xhYmVsX3Nob3c6ITAsZG9udXRfbGFiZWxfZm9ybWF0OnZvaWQgMCxkb251dF9sYWJlbF90aHJlc2hvbGQ6LjA1LGRvbnV0X2xhYmVsX3JhdGlvOnZvaWQgMCxkb251dF93aWR0aDp2b2lkIDAsZG9udXRfdGl0bGU6IiIsZG9udXRfZXhwYW5kOnt9LGRvbnV0X2V4cGFuZF9kdXJhdGlvbjo1MCxzcGxpbmVfaW50ZXJwb2xhdGlvbl90eXBlOiJjYXJkaW5hbCIscmVnaW9uczpbXSx0b29sdGlwX3Nob3c6ITAsdG9vbHRpcF9ncm91cGVkOiEwLHRvb2x0aXBfb3JkZXI6dm9pZCAwLHRvb2x0aXBfZm9ybWF0X3RpdGxlOnZvaWQgMCx0b29sdGlwX2Zvcm1hdF9uYW1lOnZvaWQgMCx0b29sdGlwX2Zvcm1hdF92YWx1ZTp2b2lkIDAsdG9vbHRpcF9wb3NpdGlvbjp2b2lkIDAsdG9vbHRpcF9jb250ZW50czpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5nZXRUb29sdGlwQ29udGVudD90aGlzLmdldFRvb2x0aXBDb250ZW50KGUsdCxuLHIpOiIifSx0b29sdGlwX2luaXRfc2hvdzohMSx0b29sdGlwX2luaXRfeDowLHRvb2x0aXBfaW5pdF9wb3NpdGlvbjp7dG9wOiIwcHgiLGxlZnQ6IjUwcHgifSx0b29sdGlwX29uc2hvdzpmdW5jdGlvbigpe30sdG9vbHRpcF9vbmhpZGU6ZnVuY3Rpb24oKXt9LHRpdGxlX3RleHQ6dm9pZCAwLHRpdGxlX3BhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSx0aXRsZV9wb3NpdGlvbjoidG9wLWNlbnRlciJ9O3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmFkZGl0aW9uYWxDb25maWcpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT10aGlzLmFkZGl0aW9uYWxDb25maWdbdF19LHRoaXMpLGV9LHguYWRkaXRpb25hbENvbmZpZz17fSx4LmxvYWRDb25maWc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlPXIuc2hpZnQoKTtyZXR1cm4gZSYmbiYmIm9iamVjdCI9PT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjpsKG4pKSYmZSBpbiBuPyhuPW5bZV0sdCgpKTplP3ZvaWQgMDpufXZhciBuLHIsbyxzPXRoaXMuY29uZmlnO09iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24oaSl7bj1lLHI9aS5zcGxpdCgiXyIpLG89dCgpLGcobykmJihzW2ldPW8pfSl9LHguY29udmVydFVybFRvRGF0YT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBzPXRoaXMsaT10fHwiY3N2IixhPXMuZDMueGhyKGUpO24mJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7YS5oZWFkZXIoZSxuW2VdKX0pLGEuZ2V0KGZ1bmN0aW9uKGUsdCl7dmFyIG4sYT10LnJlc3BvbnNlfHx0LnJlc3BvbnNlVGV4dDtpZighdCl0aHJvdyBuZXcgRXJyb3IoZS5yZXNwb25zZVVSTCsiICIrZS5zdGF0dXMrIiAoIitlLnN0YXR1c1RleHQrIikiKTtuPSJqc29uIj09PWk/cy5jb252ZXJ0SnNvblRvRGF0YShKU09OLnBhcnNlKGEpLHIpOiJ0c3YiPT09aT9zLmNvbnZlcnRUc3ZUb0RhdGEoYSk6cy5jb252ZXJ0Q3N2VG9EYXRhKGEpLG8uY2FsbChzLG4pfSl9LHguY29udmVydFhzdlRvRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dC5wYXJzZVJvd3MoZSk7cmV0dXJuIDE9PT1yLmxlbmd0aD8obj1be31dLHJbMF0uZm9yRWFjaChmdW5jdGlvbihlKXtuWzBdW2VdPW51bGx9KSk6bj10LnBhcnNlKGUpLG59LHguY29udmVydENzdlRvRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb252ZXJ0WHN2VG9EYXRhKGUsdGhpcy5kMy5jc3YpfSx4LmNvbnZlcnRUc3ZUb0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udmVydFhzdlRvRGF0YShlLHRoaXMuZDMudHN2KX0seC5jb252ZXJ0SnNvblRvRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz10aGlzLHM9W107cmV0dXJuIHQ/KHQueD8obj10LnZhbHVlLmNvbmNhdCh0LngpLG8uY29uZmlnLmRhdGFfeD10LngpOm49dC52YWx1ZSxzLnB1c2gobiksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1vLmZpbmRWYWx1ZUluSnNvbihlLG4pO2gocikmJihyPW51bGwpLHQucHVzaChyKX0pLHMucHVzaCh0KX0pLHI9by5jb252ZXJ0Um93c1RvRGF0YShzKSk6KE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cy5wdXNoKFt0XS5jb25jYXQoZVt0XSkpfSkscj1vLmNvbnZlcnRDb2x1bW5zVG9EYXRhKHMpKSxyfSx4LmZpbmRWYWx1ZUluSnNvbj1mdW5jdGlvbihlLHQpe3Q9dC5yZXBsYWNlKC9cWyhcdyspXF0vZywiLiQxIiksdD10LnJlcGxhY2UoL15cLi8sIiIpO2Zvcih2YXIgbj10LnNwbGl0KCIuIikscj0wO3I8bi5sZW5ndGg7KytyKXt2YXIgbz1uW3JdO2lmKCEobyBpbiBlKSlyZXR1cm47ZT1lW29dfXJldHVybiBlfSx4LmNvbnZlcnRSb3dzVG9EYXRhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWVbMF0scj0xO3I8ZS5sZW5ndGg7cisrKXtmb3IodmFyIG89e30scz0wO3M8ZVtyXS5sZW5ndGg7cysrKXtpZihoKGVbcl1bc10pKXRocm93IG5ldyBFcnJvcigiU291cmNlIGRhdGEgaXMgbWlzc2luZyBhIGNvbXBvbmVudCBhdCAoIityKyIsIitzKyIpISIpO29bbltzXV09ZVtyXVtzXX10LnB1c2gobyl9cmV0dXJuIHR9LHguY29udmVydENvbHVtbnNUb0RhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIHI9ZVtuXVswXSxvPTE7bzxlW25dLmxlbmd0aDtvKyspe2lmKGgodFtvLTFdKSYmKHRbby0xXT17fSksaChlW25dW29dKSl0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBkYXRhIGlzIG1pc3NpbmcgYSBjb21wb25lbnQgYXQgKCIrbisiLCIrbysiKSEiKTt0W28tMV1bcl09ZVtuXVtvXX1yZXR1cm4gdH0seC5jb252ZXJ0RGF0YVRvVGFyZ2V0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcyxvPXIuY29uZmlnLHM9ci5kMy5rZXlzKGVbMF0pLmZpbHRlcihyLmlzTm90WCxyKSxpPXIuZDMua2V5cyhlWzBdKS5maWx0ZXIoci5pc1gscik7cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcz1yLmdldFhLZXkobik7ci5pc0N1c3RvbVgoKXx8ci5pc1RpbWVTZXJpZXMoKT9pLmluZGV4T2Yocyk+PTA/ci5kYXRhLnhzW25dPSh0JiZyLmRhdGEueHNbbl0/ci5kYXRhLnhzW25dOltdKS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbc119KS5maWx0ZXIoXykubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZ2VuZXJhdGVUYXJnZXRYKGUsbix0KX0pKTpvLmRhdGFfeD9yLmRhdGEueHNbbl09ci5nZXRPdGhlclRhcmdldFhzKCk6VChvLmRhdGFfeHMpJiYoci5kYXRhLnhzW25dPXIuZ2V0WFZhbHVlc09mWEtleShzLHIuZGF0YS50YXJnZXRzKSk6ci5kYXRhLnhzW25dPWUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KX0pLHMuZm9yRWFjaChmdW5jdGlvbihlKXtpZighci5kYXRhLnhzW2VdKXRocm93IG5ldyBFcnJvcigneCBpcyBub3QgZGVmaW5lZCBmb3IgaWQgPSAiJytlKyciLicpfSksbj1zLm1hcChmdW5jdGlvbih0LG4pe3ZhciBzPW8uZGF0YV9pZENvbnZlcnRlcih0KTtyZXR1cm57aWQ6cyxpZF9vcmc6dCx2YWx1ZXM6ZS5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgYSxsPXIuZ2V0WEtleSh0KSx1PWVbbF0sYz1udWxsPT09ZVt0XXx8aXNOYU4oZVt0XSk/bnVsbDorZVt0XTtyZXR1cm4gci5pc0N1c3RvbVgoKSYmci5pc0NhdGVnb3JpemVkKCkmJiFoKHUpPygwPT09biYmMD09PWkmJihvLmF4aXNfeF9jYXRlZ29yaWVzPVtdKSwtMT09PShhPW8uYXhpc194X2NhdGVnb3JpZXMuaW5kZXhPZih1KSkmJihhPW8uYXhpc194X2NhdGVnb3JpZXMubGVuZ3RoLG8uYXhpc194X2NhdGVnb3JpZXMucHVzaCh1KSkpOmE9ci5nZW5lcmF0ZVRhcmdldFgodSx0LGkpLChoKGVbdF0pfHxyLmRhdGEueHNbdF0ubGVuZ3RoPD1pKSYmKGE9dm9pZCAwKSx7eDphLHZhbHVlOmMsaWQ6c319KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGcoZS54KX0pfX0pLG4uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdDtvLmRhdGFfeFNvcnQmJihlLnZhbHVlcz1lLnZhbHVlcy5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUueHx8MD09PWUueD9lLng6MS8wKS0odC54fHwwPT09dC54P3QueDoxLzApfSkpLHQ9MCxlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaW5kZXg9dCsrfSksci5kYXRhLnhzW2UuaWRdLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSl9KSxyLmhhc05lZ2F0aXZlVmFsdWU9ci5oYXNOZWdhdGl2ZVZhbHVlSW5UYXJnZXRzKG4pLHIuaGFzUG9zaXRpdmVWYWx1ZT1yLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHMobiksby5kYXRhX3R5cGUmJnIuc2V0VGFyZ2V0VHlwZShyLm1hcFRvSWRzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW4gby5kYXRhX3R5cGVzKX0pLG8uZGF0YV90eXBlKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7ci5hZGRDYWNoZShlLmlkX29yZyxlKX0pLG59LHguaXNYPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gbi5kYXRhX3gmJmU9PT1uLmRhdGFfeHx8VChuLmRhdGFfeHMpJiZDKG4uZGF0YV94cyxlKX0seC5pc05vdFg9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNYKGUpfSx4LmdldFhLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBuLmRhdGFfeD9uLmRhdGFfeDpUKG4uZGF0YV94cyk/bi5kYXRhX3hzW2VdOm51bGx9LHguZ2V0WFZhbHVlc09mWEtleT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcztyZXR1cm4odCYmVCh0KT9yLm1hcFRvSWRzKHQpOltdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuZ2V0WEtleSh0KT09PWUmJihuPXIuZGF0YS54c1t0XSl9KSxufSx4LmdldEluZGV4QnlYPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmZpbHRlckJ5WCh0LmRhdGEudGFyZ2V0cyxlKTtyZXR1cm4gbi5sZW5ndGg/blswXS5pbmRleDpudWxsfSx4LmdldFhWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIGUgaW4gbi5kYXRhLnhzJiZuLmRhdGEueHNbZV0mJl8obi5kYXRhLnhzW2VdW3RdKT9uLmRhdGEueHNbZV1bdF06dH0seC5nZXRPdGhlclRhcmdldFhzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PU9iamVjdC5rZXlzKGUuZGF0YS54cyk7cmV0dXJuIHQubGVuZ3RoP2UuZGF0YS54c1t0WzBdXTpudWxsfSx4LmdldE90aGVyVGFyZ2V0WD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE90aGVyVGFyZ2V0WHMoKTtyZXR1cm4gdCYmZTx0Lmxlbmd0aD90W2VdOm51bGx9LHguYWRkWHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuY29uZmlnLmRhdGFfeHNbbl09ZVtuXX0pfSx4Lmhhc011bHRpcGxlWD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kMy5zZXQoT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLnNpemUoKT4xfSx4LmlzTXVsdGlwbGVYPWZ1bmN0aW9uKCl7cmV0dXJuIFQodGhpcy5jb25maWcuZGF0YV94cyl8fCF0aGlzLmNvbmZpZy5kYXRhX3hTb3J0fHx0aGlzLmhhc1R5cGUoInNjYXR0ZXIiKX0seC5hZGROYW1lPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcztyZXR1cm4gZSYmKHQ9bi5jb25maWcuZGF0YV9uYW1lc1tlLmlkXSxlLm5hbWU9dm9pZCAwIT09dD90OmUuaWQpLGV9LHguZ2V0VmFsdWVPbkluZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZXg9PT10fSk7cmV0dXJuIG4ubGVuZ3RoP25bMF06bnVsbH0seC51cGRhdGVUYXJnZXRYPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihyLG8pe3IueD1uLmdlbmVyYXRlVGFyZ2V0WCh0W29dLGUuaWQsbyl9KSxuLmRhdGEueHNbZS5pZF09dH0pfSx4LnVwZGF0ZVRhcmdldFhzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztlLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlLmlkXSYmbi51cGRhdGVUYXJnZXRYKFtlXSx0W2UuaWRdKX0pfSx4LmdlbmVyYXRlVGFyZ2V0WD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztyZXR1cm4gci5pc1RpbWVTZXJpZXMoKT9lP3IucGFyc2VEYXRlKGUpOnIucGFyc2VEYXRlKHIuZ2V0WFZhbHVlKHQsbikpOnIuaXNDdXN0b21YKCkmJiFyLmlzQ2F0ZWdvcml6ZWQoKT9fKGUpPytlOnIuZ2V0WFZhbHVlKHQsbik6bn0seC5jbG9uZVRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm57aWQ6ZS5pZCxpZF9vcmc6ZS5pZF9vcmcsdmFsdWVzOmUudmFsdWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLngsdmFsdWU6ZS52YWx1ZSxpZDplLmlkfX0pfX0seC51cGRhdGVYcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5kYXRhLnRhcmdldHMubGVuZ3RoJiYoZS54cz1bXSxlLmRhdGEudGFyZ2V0c1swXS52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnhzW3QuaW5kZXhdPXQueH0pKX0seC5nZXRQcmV2WD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnhzW2UtMV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpudWxsfSx4LmdldE5leHRYPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMueHNbZSsxXTtyZXR1cm4gdm9pZCAwIT09dD90Om51bGx9LHguZ2V0TWF4RGF0YUNvdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5kMy5tYXgoZS5kYXRhLnRhcmdldHMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pfSx4LmdldE1heERhdGFDb3VudFRhcmdldD1mdW5jdGlvbihlKXt2YXIgdCxuPWUubGVuZ3RoLHI9MDtyZXR1cm4gbj4xP2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLnZhbHVlcy5sZW5ndGg+ciYmKHQ9ZSxyPWUudmFsdWVzLmxlbmd0aCl9KTp0PW4/ZVswXTpudWxsLHR9LHguZ2V0RWRnZVg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZS5sZW5ndGg/W3QuZDMubWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzWzBdLnh9KSx0LmQzLm1heChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc1tlLnZhbHVlcy5sZW5ndGgtMV0ueH0pXTpbMCwwXX0seC5tYXBUb0lkcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KX0seC5tYXBUb1RhcmdldElkcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlP1tdLmNvbmNhdChlKTp0Lm1hcFRvSWRzKHQuZGF0YS50YXJnZXRzKX0seC5oYXNUYXJnZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubWFwVG9JZHMoZSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPT09dClyZXR1cm4hMDtyZXR1cm4hMX0seC5pc1RhcmdldFRvU2hvdz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZihlKTwwfSx4LmlzTGVnZW5kVG9TaG93PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhpZGRlbkxlZ2VuZElkcy5pbmRleE9mKGUpPDB9LHguZmlsdGVyVGFyZ2V0c1RvU2hvdz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5pc1RhcmdldFRvU2hvdyhlLmlkKX0pfSx4Lm1hcFRhcmdldHNUb1VuaXF1ZVhzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmQzLnNldCh0LmQzLm1lcmdlKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuK2UueH0pfSkpKS52YWx1ZXMoKTtyZXR1cm4gbj10LmlzVGltZVNlcmllcygpP24ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGF0ZSgrZSl9KTpuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4rZX0pLG4uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0pfSx4LmFkZEhpZGRlblRhcmdldElkcz1mdW5jdGlvbihlKXtlPWUgaW5zdGFuY2VvZiBBcnJheT9lOm5ldyBBcnJheShlKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLmhpZGRlblRhcmdldElkcy5pbmRleE9mKGVbdF0pPDAmJih0aGlzLmhpZGRlblRhcmdldElkcz10aGlzLmhpZGRlblRhcmdldElkcy5jb25jYXQoZVt0XSkpfSx4LnJlbW92ZUhpZGRlblRhcmdldElkcz1mdW5jdGlvbihlKXt0aGlzLmhpZGRlblRhcmdldElkcz10aGlzLmhpZGRlblRhcmdldElkcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5kZXhPZih0KTwwfSl9LHguYWRkSGlkZGVuTGVnZW5kSWRzPWZ1bmN0aW9uKGUpe2U9ZSBpbnN0YW5jZW9mIEFycmF5P2U6bmV3IEFycmF5KGUpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuaGlkZGVuTGVnZW5kSWRzLmluZGV4T2YoZVt0XSk8MCYmKHRoaXMuaGlkZGVuTGVnZW5kSWRzPXRoaXMuaGlkZGVuTGVnZW5kSWRzLmNvbmNhdChlW3RdKSl9LHgucmVtb3ZlSGlkZGVuTGVnZW5kSWRzPWZ1bmN0aW9uKGUpe3RoaXMuaGlkZGVuTGVnZW5kSWRzPXRoaXMuaGlkZGVuTGVnZW5kSWRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPDB9KX0seC5nZXRWYWx1ZXNBc0lkS2V5ZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UuaWRdPVtdLGUudmFsdWVzLmZvckVhY2goZnVuY3Rpb24obil7dFtlLmlkXS5wdXNoKG4udmFsdWUpfSl9KSx0fSx4LmNoZWNrVmFsdWVJblRhcmdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248cy5sZW5ndGg7bisrKWZvcihvPWVbc1tuXV0udmFsdWVzLHI9MDtyPG8ubGVuZ3RoO3IrKylpZih0KG9bcl0udmFsdWUpKXJldHVybiEwO3JldHVybiExfSx4Lmhhc05lZ2F0aXZlVmFsdWVJblRhcmdldHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2hlY2tWYWx1ZUluVGFyZ2V0cyhlLGZ1bmN0aW9uKGUpe3JldHVybiBlPDB9KX0seC5oYXNQb3NpdGl2ZVZhbHVlSW5UYXJnZXRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrVmFsdWVJblRhcmdldHMoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSl9LHguaXNPcmRlckRlc2M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbmZpZztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUuZGF0YV9vcmRlciYmImRlc2MiPT09ZS5kYXRhX29yZGVyLnRvTG93ZXJDYXNlKCl9LHguaXNPcmRlckFzYz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uZmlnO3JldHVybiJzdHJpbmciPT10eXBlb2YgZS5kYXRhX29yZGVyJiYiYXNjIj09PWUuZGF0YV9vcmRlci50b0xvd2VyQ2FzZSgpfSx4LmdldE9yZGVyRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmlzT3JkZXJBc2MoKSxyPWUuaXNPcmRlckRlc2MoKTtpZihufHxyKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrTWF0aC5hYnModC52YWx1ZSl9LG89ZS52YWx1ZXMucmVkdWNlKG4sMCkscz10LnZhbHVlcy5yZWR1Y2UobiwwKTtyZXR1cm4gcj9zLW86by1zfTtpZihwKHQuZGF0YV9vcmRlcikpcmV0dXJuIHQuZGF0YV9vcmRlcjtpZihmKHQuZGF0YV9vcmRlcikpe3ZhciBvPXQuZGF0YV9vcmRlcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5pbmRleE9mKGUuaWQpLW8uaW5kZXhPZih0LmlkKX19fSx4Lm9yZGVyVGFyZ2V0cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE9yZGVyRnVuY3Rpb24oKTtyZXR1cm4gdCYmKGUuc29ydCh0KSwodGhpcy5pc09yZGVyQXNjKCl8fHRoaXMuaXNPcmRlckRlc2MoKSkmJmUucmV2ZXJzZSgpKSxlfSx4LmZpbHRlckJ5WD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmQzLm1lcmdlKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUueC10PT0wfSl9LHguZmlsdGVyUmVtb3ZlTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIF8oZS52YWx1ZSl9KX0seC5maWx0ZXJCeVhEb21haW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUuaWQsaWRfb3JnOmUuaWRfb3JnLHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHRbMF08PWUueCYmZS54PD10WzFdfSl9fSl9LHguaGFzRGF0YUxhYmVsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25maWc7cmV0dXJuISgiYm9vbGVhbiIhPXR5cGVvZiBlLmRhdGFfbGFiZWxzfHwhZS5kYXRhX2xhYmVscyl8fCEoIm9iamVjdCIhPT1sKGUuZGF0YV9sYWJlbHMpfHwhVChlLmRhdGFfbGFiZWxzKSl9LHguZ2V0RGF0YUxhYmVsTGVuZ3RoPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89WzAsMF07cmV0dXJuIHIuc2VsZWN0Q2hhcnQuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoIi5kdW1teSIpLmRhdGEoW2UsdF0pLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gci5kYXRhTGFiZWxGb3JtYXQoZS5pZCkoZSl9KS5lYWNoKGZ1bmN0aW9uKGUsdCl7b1t0XT0xLjMqdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuXX0pLnJlbW92ZSgpLG99LHguaXNOb25lQXJjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cyxlLmlkKX0seC5pc0FyYz1mdW5jdGlvbihlKXtyZXR1cm4iZGF0YSJpbiBlJiZ0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cyxlLmRhdGEuaWQpfSx4LmZpbmRTYW1lWE9mVmFsdWVzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RdLngsbz1bXTtmb3Iobj10LTE7bj49MCYmcj09PWVbbl0ueDtuLS0pby5wdXNoKGVbbl0pO2ZvcihuPXQ7bjxlLmxlbmd0aCYmcj09PWVbbl0ueDtuKyspby5wdXNoKGVbbl0pO3JldHVybiBvfSx4LmZpbmRDbG9zZXN0RnJvbVRhcmdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXM7cmV0dXJuIG49ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZmluZENsb3Nlc3QoZS52YWx1ZXMsdCl9KSxyLmZpbmRDbG9zZXN0KG4sdCl9LHguZmluZENsb3Nlc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMsbz1yLmNvbmZpZy5wb2ludF9zZW5zaXRpdml0eTtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnIuaXNCYXJUeXBlKGUuaWQpfSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1yLm1haW4uc2VsZWN0KCIuIithLmJhcnMrci5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChlLmlkKSsiIC4iK2EuYmFyKyItIitlLmluZGV4KS5ub2RlKCk7IW4mJnIuaXNXaXRoaW5CYXIodCkmJihuPWUpfSksZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFyLmlzQmFyVHlwZShlLmlkKX0pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHM9ci5kaXN0KGUsdCk7czxvJiYobz1zLG49ZSl9KSxufSx4LmRpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcsbz1yLmF4aXNfcm90YXRlZD8xOjAscz1yLmF4aXNfcm90YXRlZD8wOjEsaT1uLmNpcmNsZVkoZSxlLmluZGV4KSxhPW4ueChlLngpO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coYS10W29dLDIpK01hdGgucG93KGktdFtzXSwyKSl9LHguY29udmVydFZhbHVlc1RvU3RlcD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLmNvbmNhdChlKTtpZighdGhpcy5pc0NhdGVnb3JpemVkKCkpcmV0dXJuIGU7Zm9yKHQ9ZS5sZW5ndGgrMTswPHQ7dC0tKW5bdF09blt0LTFdO3JldHVybiBuWzBdPXt4Om5bMF0ueC0xLHZhbHVlOm5bMF0udmFsdWUsaWQ6blswXS5pZH0sbltlLmxlbmd0aCsxXT17eDpuW2UubGVuZ3RoXS54KzEsdmFsdWU6bltlLmxlbmd0aF0udmFsdWUsaWQ6bltlLmxlbmd0aF0uaWR9LG59LHgudXBkYXRlRGF0YUF0dHJpYnV0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcsbz1yWyJkYXRhXyIrZV07cmV0dXJuIHZvaWQgMD09PXQ/bzooT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXtvW2VdPXRbZV19KSxuLnJlZHJhdyh7d2l0aExlZ2VuZDohMH0pLG8pfSx4LmxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2UmJih0LmZpbHRlciYmKGU9ZS5maWx0ZXIodC5maWx0ZXIpKSwodC50eXBlfHx0LnR5cGVzKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXQudHlwZXMmJnQudHlwZXNbZS5pZF0/dC50eXBlc1tlLmlkXTp0LnR5cGU7bi5zZXRUYXJnZXRUeXBlKGUuaWQscil9KSxuLmRhdGEudGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKHQuaWQ9PT1lW25dLmlkKXt0LnZhbHVlcz1lW25dLnZhbHVlcyxlLnNwbGljZShuLDEpO2JyZWFrfX0pLG4uZGF0YS50YXJnZXRzPW4uZGF0YS50YXJnZXRzLmNvbmNhdChlKSksbi51cGRhdGVUYXJnZXRzKG4uZGF0YS50YXJnZXRzKSxuLnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITAsd2l0aExlZ2VuZDohMH0pLHQuZG9uZSYmdC5kb25lKCl9LHgubG9hZEZyb21BcmdzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5kYXRhP3QubG9hZCh0LmNvbnZlcnREYXRhVG9UYXJnZXRzKGUuZGF0YSksZSk6ZS51cmw/dC5jb252ZXJ0VXJsVG9EYXRhKGUudXJsLGUubWltZVR5cGUsZS5oZWFkZXJzLGUua2V5cyxmdW5jdGlvbihuKXt0LmxvYWQodC5jb252ZXJ0RGF0YVRvVGFyZ2V0cyhuKSxlKX0pOmUuanNvbj90LmxvYWQodC5jb252ZXJ0RGF0YVRvVGFyZ2V0cyh0LmNvbnZlcnRKc29uVG9EYXRhKGUuanNvbixlLmtleXMpKSxlKTplLnJvd3M/dC5sb2FkKHQuY29udmVydERhdGFUb1RhcmdldHModC5jb252ZXJ0Um93c1RvRGF0YShlLnJvd3MpKSxlKTplLmNvbHVtbnM/dC5sb2FkKHQuY29udmVydERhdGFUb1RhcmdldHModC5jb252ZXJ0Q29sdW1uc1RvRGF0YShlLmNvbHVtbnMpKSxlKTp0LmxvYWQobnVsbCxlKX0seC51bmxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHR8fCh0PWZ1bmN0aW9uKCl7fSksIShlPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLmhhc1RhcmdldChuLmRhdGEudGFyZ2V0cyxlKX0pKXx8MD09PWUubGVuZ3RoKXJldHVybiB2b2lkIHQoKTtuLnN2Zy5zZWxlY3RBbGwoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uc2VsZWN0b3JUYXJnZXQoZSl9KSkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKS5jYWxsKG4uZW5kYWxsLHQpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtuLndpdGhvdXRGYWRlSW5bZV09ITEsbi5sZWdlbmQmJm4ubGVnZW5kLnNlbGVjdEFsbCgiLiIrYS5sZWdlbmRJdGVtK24uZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoZSkpLnJlbW92ZSgpLG4uZGF0YS50YXJnZXRzPW4uZGF0YS50YXJnZXRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5pZCE9PWV9KX0pfSx4LmdldFlEb21haW5NaW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLGE9dGhpcyxsPWEuY29uZmlnLHU9YS5tYXBUb0lkcyhlKSxjPWEuZ2V0VmFsdWVzQXNJZEtleWVkKGUpO2lmKGwuZGF0YV9ncm91cHMubGVuZ3RoPjApZm9yKGk9YS5oYXNOZWdhdGl2ZVZhbHVlSW5UYXJnZXRzKGUpLHQ9MDt0PGwuZGF0YV9ncm91cHMubGVuZ3RoO3QrKylpZihvPWwuZGF0YV9ncm91cHNbdF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1LmluZGV4T2YoZSk+PTB9KSwwIT09by5sZW5ndGgpZm9yKHI9b1swXSxpJiZjW3JdJiZjW3JdLmZvckVhY2goZnVuY3Rpb24oZSx0KXtjW3JdW3RdPWU8MD9lOjB9KSxuPTE7bjxvLmxlbmd0aDtuKyspcz1vW25dLGNbc10mJmNbc10uZm9yRWFjaChmdW5jdGlvbihlLHQpe2EuYXhpcy5nZXRJZChzKSE9PWEuYXhpcy5nZXRJZChyKXx8IWNbcl18fGkmJitlPjB8fChjW3JdW3RdKz0rZSl9KTtyZXR1cm4gYS5kMy5taW4oT2JqZWN0LmtleXMoYykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhLmQzLm1pbihjW2VdKX0pKX0seC5nZXRZRG9tYWluTWF4PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhPXRoaXMsbD1hLmNvbmZpZyx1PWEubWFwVG9JZHMoZSksYz1hLmdldFZhbHVlc0FzSWRLZXllZChlKTtpZihsLmRhdGFfZ3JvdXBzLmxlbmd0aD4wKWZvcihpPWEuaGFzUG9zaXRpdmVWYWx1ZUluVGFyZ2V0cyhlKSx0PTA7dDxsLmRhdGFfZ3JvdXBzLmxlbmd0aDt0KyspaWYobz1sLmRhdGFfZ3JvdXBzW3RdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdS5pbmRleE9mKGUpPj0wfSksMCE9PW8ubGVuZ3RoKWZvcihyPW9bMF0saSYmY1tyXSYmY1tyXS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7Y1tyXVt0XT1lPjA/ZTowfSksbj0xO248by5sZW5ndGg7bisrKXM9b1tuXSxjW3NdJiZjW3NdLmZvckVhY2goZnVuY3Rpb24oZSx0KXthLmF4aXMuZ2V0SWQocykhPT1hLmF4aXMuZ2V0SWQocil8fCFjW3JdfHxpJiYrZTwwfHwoY1tyXVt0XSs9K2UpfSk7cmV0dXJuIGEuZDMubWF4KE9iamVjdC5rZXlzKGMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5kMy5tYXgoY1tlXSl9KSl9LHguZ2V0WURvbWFpbj1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzLGksYSxsLHUsYyxkLHAsZj10aGlzLG09Zi5jb25maWcsaD1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZi5heGlzLmdldElkKGUuaWQpPT09dH0pLGc9bj9mLmZpbHRlckJ5WERvbWFpbihoLG4pOmgsYj0ieTIiPT09dD9tLmF4aXNfeTJfbWluOm0uYXhpc195X21pbixFPSJ5MiI9PT10P20uYXhpc195Ml9tYXg6bS5heGlzX3lfbWF4LHY9Zi5nZXRZRG9tYWluTWluKGcpLEE9Zi5nZXRZRG9tYWluTWF4KGcpLEM9InkyIj09PXQ/bS5heGlzX3kyX2NlbnRlcjptLmF4aXNfeV9jZW50ZXIsTz1mLmhhc1R5cGUoImJhciIsZykmJm0uYmFyX3plcm9iYXNlZHx8Zi5oYXNUeXBlKCJhcmVhIixnKSYmbS5hcmVhX3plcm9iYXNlZCxTPSJ5MiI9PT10P20uYXhpc195Ml9pbnZlcnRlZDptLmF4aXNfeV9pbnZlcnRlZCxSPWYuaGFzRGF0YUxhYmVsKCkmJm0uYXhpc19yb3RhdGVkLGo9Zi5oYXNEYXRhTGFiZWwoKSYmIW0uYXhpc19yb3RhdGVkO3JldHVybiB2PV8oYik/YjpfKEUpP3Y8RT92OkUtMTA6dixBPV8oRSk/RTpfKGIpP2I8QT9BOmIrMTA6QSwwPT09Zy5sZW5ndGg/InkyIj09PXQ/Zi55Mi5kb21haW4oKTpmLnkuZG9tYWluKCk6KGlzTmFOKHYpJiYodj0wKSxpc05hTihBKSYmKEE9diksdj09PUEmJih2PDA/QT0wOnY9MCksZD12Pj0wJiZBPj0wLHA9djw9MCYmQTw9MCwoXyhiKSYmZHx8XyhFKSYmcCkmJihPPSExKSxPJiYoZCYmKHY9MCkscCYmKEE9MCkpLG89TWF0aC5hYnMoQS12KSxzPWk9LjEqbyx2b2lkIDAhPT1DJiYoYT1NYXRoLm1heChNYXRoLmFicyh2KSxNYXRoLmFicyhBKSksQT1DK2Esdj1DLWEpLFI/KGw9Zi5nZXREYXRhTGFiZWxMZW5ndGgodixBLCJ3aWR0aCIpLHU9eShmLnkucmFuZ2UoKSksYz1bbFswXS91LGxbMV0vdV0scys9byooY1sxXS8oMS1jWzBdLWNbMV0pKSxpKz1vKihjWzBdLygxLWNbMF0tY1sxXSkpKTpqJiYobD1mLmdldERhdGFMYWJlbExlbmd0aCh2LEEsImhlaWdodCIpLHMrPWYuYXhpcy5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZyhsWzFdLG8pLGkrPWYuYXhpcy5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZyhsWzBdLG8pKSwieSI9PT10JiZUKG0uYXhpc195X3BhZGRpbmcpJiYocz1mLmF4aXMuZ2V0UGFkZGluZyhtLmF4aXNfeV9wYWRkaW5nLCJ0b3AiLHMsbyksaT1mLmF4aXMuZ2V0UGFkZGluZyhtLmF4aXNfeV9wYWRkaW5nLCJib3R0b20iLGksbykpLCJ5MiI9PT10JiZUKG0uYXhpc195Ml9wYWRkaW5nKSYmKHM9Zi5heGlzLmdldFBhZGRpbmcobS5heGlzX3kyX3BhZGRpbmcsInRvcCIscyxvKSxpPWYuYXhpcy5nZXRQYWRkaW5nKG0uYXhpc195Ml9wYWRkaW5nLCJib3R0b20iLGksbykpLE8mJihkJiYoaT12KSxwJiYocz0tQSkpLHI9W3YtaSxBK3NdLFM/ci5yZXZlcnNlKCk6cil9LHguZ2V0WERvbWFpbk1pbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7cmV0dXJuIGcobi5heGlzX3hfbWluKT90LmlzVGltZVNlcmllcygpP3RoaXMucGFyc2VEYXRlKG4uYXhpc194X21pbik6bi5heGlzX3hfbWluOnQuZDMubWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDMubWluKGUudmFsdWVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KX0pfSx4LmdldFhEb21haW5NYXg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBnKG4uYXhpc194X21heCk/dC5pc1RpbWVTZXJpZXMoKT90aGlzLnBhcnNlRGF0ZShuLmF4aXNfeF9tYXgpOm4uYXhpc194X21heDp0LmQzLm1heChlLGZ1bmN0aW9uKGUpe3JldHVybiB0LmQzLm1heChlLnZhbHVlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS54fSl9KX0seC5nZXRYRG9tYWluUGFkZGluZz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzPXRoaXMsaT1zLmNvbmZpZyxhPWVbMV0tZVswXTtyZXR1cm4gcy5pc0NhdGVnb3JpemVkKCk/bj0wOnMuaGFzVHlwZSgiYmFyIik/KHQ9cy5nZXRNYXhEYXRhQ291bnQoKSxuPXQ+MT9hLyh0LTEpLzI6LjUpOm49LjAxKmEsIm9iamVjdCI9PT1sKGkuYXhpc194X3BhZGRpbmcpJiZUKGkuYXhpc194X3BhZGRpbmcpPyhyPV8oaS5heGlzX3hfcGFkZGluZy5sZWZ0KT9pLmF4aXNfeF9wYWRkaW5nLmxlZnQ6bixvPV8oaS5heGlzX3hfcGFkZGluZy5yaWdodCk/aS5heGlzX3hfcGFkZGluZy5yaWdodDpuKTpyPW89Im51bWJlciI9PXR5cGVvZiBpLmF4aXNfeF9wYWRkaW5nP2kuYXhpc194X3BhZGRpbmc6bix7bGVmdDpyLHJpZ2h0Om99fSx4LmdldFhEb21haW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPVt0LmdldFhEb21haW5NaW4oZSksdC5nZXRYRG9tYWluTWF4KGUpXSxyPW5bMF0sbz1uWzFdLHM9dC5nZXRYRG9tYWluUGFkZGluZyhuKSxpPTAsYT0wO3JldHVybiByLW8hPTB8fHQuaXNDYXRlZ29yaXplZCgpfHwodC5pc1RpbWVTZXJpZXMoKT8ocj1uZXcgRGF0ZSguNSpyLmdldFRpbWUoKSksbz1uZXcgRGF0ZSgxLjUqby5nZXRUaW1lKCkpKToocj0wPT09cj8xOi41KnIsbz0wPT09bz8tMToxLjUqbykpLChyfHwwPT09cikmJihpPXQuaXNUaW1lU2VyaWVzKCk/bmV3IERhdGUoci5nZXRUaW1lKCktcy5sZWZ0KTpyLXMubGVmdCksKG98fDA9PT1vKSYmKGE9dC5pc1RpbWVTZXJpZXMoKT9uZXcgRGF0ZShvLmdldFRpbWUoKStzLnJpZ2h0KTpvK3MucmlnaHQpLFtpLGFdfSx4LnVwZGF0ZVhEb21haW49ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz10aGlzLGk9cy5jb25maWc7cmV0dXJuIG4mJihzLnguZG9tYWluKG98fHMuZDMuZXh0ZW50KHMuZ2V0WERvbWFpbihlKSkpLHMub3JnWERvbWFpbj1zLnguZG9tYWluKCksaS56b29tX2VuYWJsZWQmJnMuem9vbS5zY2FsZShzLngpLnVwZGF0ZVNjYWxlRXh0ZW50KCkscy5zdWJYLmRvbWFpbihzLnguZG9tYWluKCkpLHMuYnJ1c2gmJnMuYnJ1c2guc2NhbGUocy5zdWJYKSksdCYmKHMueC5kb21haW4ob3x8KCFzLmJydXNofHxzLmJydXNoLmVtcHR5KCk/cy5vcmdYRG9tYWluOnMuYnJ1c2guZXh0ZW50KCkpKSxpLnpvb21fZW5hYmxlZCYmcy56b29tLnNjYWxlKHMueCkudXBkYXRlU2NhbGVFeHRlbnQoKSksciYmcy54LmRvbWFpbihzLnRyaW1YRG9tYWluKHMueC5vcmdEb21haW4oKSkpLHMueC5kb21haW4oKX0seC50cmltWERvbWFpbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFpvb21Eb21haW4oKSxuPXRbMF0scj10WzFdO3JldHVybiBlWzBdPD1uJiYoZVsxXT0rZVsxXSsobi1lWzBdKSxlWzBdPW4pLHI8PWVbMV0mJihlWzBdPStlWzBdLShlWzFdLXIpLGVbMV09ciksZX0seC5kcmFnPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxsLHUsYz10aGlzLGQ9Yy5jb25maWcsXz1jLm1haW4scD1jLmQzO2MuaGFzQXJjVHlwZSgpfHxkLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJihkLnpvb21fZW5hYmxlZCYmIWMuem9vbS5hbHREb21haW58fGQuZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGUmJih0PWMuZHJhZ1N0YXJ0WzBdLG49Yy5kcmFnU3RhcnRbMV0scj1lWzBdLG89ZVsxXSxzPU1hdGgubWluKHQsciksaT1NYXRoLm1heCh0LHIpLGw9ZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP2MubWFyZ2luLnRvcDpNYXRoLm1pbihuLG8pLHU9ZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP2MuaGVpZ2h0Ok1hdGgubWF4KG4sbyksXy5zZWxlY3QoIi4iK2EuZHJhZ2FyZWEpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIixpLXMpLmF0dHIoImhlaWdodCIsdS1sKSxfLnNlbGVjdEFsbCgiLiIrYS5zaGFwZXMpLnNlbGVjdEFsbCgiLiIrYS5zaGFwZSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBkLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShlKX0pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sZCxfLGYsbT1wLnNlbGVjdCh0aGlzKSxoPW0uY2xhc3NlZChhLlNFTEVDVEVEKSxnPW0uY2xhc3NlZChhLklOQ0xVREVEKSxiPSExO2lmKG0uY2xhc3NlZChhLmNpcmNsZSkpbj0xKm0uYXR0cigiY3giKSxyPTEqbS5hdHRyKCJjeSIpLF89Yy50b2dnbGVQb2ludCxiPXM8biYmbjxpJiZsPHImJnI8dTtlbHNle2lmKCFtLmNsYXNzZWQoYS5iYXIpKXJldHVybjtmPVModGhpcyksbj1mLngscj1mLnksbz1mLndpZHRoLGQ9Zi5oZWlnaHQsXz1jLnRvZ2dsZVBhdGgsYj0hKGk8bnx8bitvPHN8fHU8cnx8citkPGwpfWJeZyYmKG0uY2xhc3NlZChhLklOQ0xVREVELCFnKSxtLmNsYXNzZWQoYS5TRUxFQ1RFRCwhaCksXy5jYWxsKGMsIWgsbSxlLHQpKX0pKSl9LHguZHJhZ3N0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZzt0Lmhhc0FyY1R5cGUoKXx8bi5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiYodC5kcmFnU3RhcnQ9ZSx0Lm1haW4uc2VsZWN0KCIuIithLmNoYXJ0KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsYS5kcmFnYXJlYSkuc3R5bGUoIm9wYWNpdHkiLC4xKSx0LmRyYWdnaW5nPSEwKX0seC5kcmFnZW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnO2UuaGFzQXJjVHlwZSgpfHx0LmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJihlLm1haW4uc2VsZWN0KCIuIithLmRyYWdhcmVhKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksZS5tYWluLnNlbGVjdEFsbCgiLiIrYS5zaGFwZSkuY2xhc3NlZChhLklOQ0xVREVELCExKSxlLmRyYWdnaW5nPSExKX0seC5nZXRZRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lJiYhdC5oYXNUeXBlKCJnYXVnZSIpP3QuZGVmYXVsdEFyY1ZhbHVlRm9ybWF0OnQueUZvcm1hdCxyPWUmJiF0Lmhhc1R5cGUoImdhdWdlIik/dC5kZWZhdWx0QXJjVmFsdWVGb3JtYXQ6dC55MkZvcm1hdDtyZXR1cm4gZnVuY3Rpb24oZSxvLHMpe3JldHVybigieTIiPT09dC5heGlzLmdldElkKHMpP3I6bikuY2FsbCh0LGUsbyl9fSx4LnlGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybihuLmF4aXNfeV90aWNrX2Zvcm1hdD9uLmF4aXNfeV90aWNrX2Zvcm1hdDp0LmRlZmF1bHRWYWx1ZUZvcm1hdCkoZSl9LHgueTJGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybihuLmF4aXNfeTJfdGlja19mb3JtYXQ/bi5heGlzX3kyX3RpY2tfZm9ybWF0OnQuZGVmYXVsdFZhbHVlRm9ybWF0KShlKX0seC5kZWZhdWx0VmFsdWVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSk/K2U6IiJ9LHguZGVmYXVsdEFyY1ZhbHVlRm9ybWF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKDEpKyIlIn0seC5kYXRhTGFiZWxGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLmRhdGFfbGFiZWxzLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSk/K2U6IiJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLmZvcm1hdD9uLmZvcm1hdDoib2JqZWN0Ij09PWwobi5mb3JtYXQpP24uZm9ybWF0W2VdPyEwPT09bi5mb3JtYXRbZV0/cjpuLmZvcm1hdFtlXTpmdW5jdGlvbigpe3JldHVybiIifTpyfSx4LmluaXRHcmlkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49ZS5kMztlLmdyaWQ9ZS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aEZvckdyaWQpLmF0dHIoImNsYXNzIixhLmdyaWQpLHQuZ3JpZF94X3Nob3cmJmUuZ3JpZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS54Z3JpZHMpLHQuZ3JpZF95X3Nob3cmJmUuZ3JpZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS55Z3JpZHMpLHQuZ3JpZF9mb2N1c19zaG93JiZlLmdyaWQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEueGdyaWRGb2N1cykuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLGEueGdyaWRGb2N1cyksZS54Z3JpZD1uLnNlbGVjdEFsbChbXSksdC5ncmlkX2xpbmVzX2Zyb250fHxlLmluaXRHcmlkTGluZXMoKX0seC5pbml0R3JpZExpbmVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZDM7ZS5ncmlkTGluZXM9ZS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aEZvckdyaWQpLmF0dHIoImNsYXNzIixhLmdyaWQrIiAiK2EuZ3JpZExpbmVzKSxlLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS54Z3JpZExpbmVzKSxlLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS55Z3JpZExpbmVzKSxlLnhncmlkTGluZXM9dC5zZWxlY3RBbGwoW10pfSx4LnVwZGF0ZVhHcmlkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPXQuZDMsbz10LmdlbmVyYXRlR3JpZERhdGEobi5ncmlkX3hfdHlwZSx0LngpLHM9dC5pc0NhdGVnb3JpemVkKCk/dC54QXhpcy50aWNrT2Zmc2V0KCk6MDt0LnhncmlkQXR0cj1uLmF4aXNfcm90YXRlZD97eDE6MCx4Mjp0LndpZHRoLHkxOmZ1bmN0aW9uKGUpe3JldHVybiB0LngoZSktc30seTI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQueChlKS1zfX06e3gxOmZ1bmN0aW9uKGUpe3JldHVybiB0LngoZSkrc30seDI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQueChlKStzfSx5MTowLHkyOnQuaGVpZ2h0fSx0LnhncmlkPXQubWFpbi5zZWxlY3QoIi4iK2EueGdyaWRzKS5zZWxlY3RBbGwoIi4iK2EueGdyaWQpLmRhdGEobyksdC54Z3JpZC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixhLnhncmlkKSxlfHx0LnhncmlkLmF0dHIodC54Z3JpZEF0dHIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybityLnNlbGVjdCh0aGlzKS5hdHRyKG4uYXhpc19yb3RhdGVkPyJ5MSI6IngxIik9PT0obi5heGlzX3JvdGF0ZWQ/dC5oZWlnaHQ6MCk/MDoxfSksdC54Z3JpZC5leGl0KCkucmVtb3ZlKCl9LHgudXBkYXRlWUdyaWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLnlBeGlzLnRpY2tWYWx1ZXMoKXx8ZS55LnRpY2tzKHQuZ3JpZF95X3RpY2tzKTtlLnlncmlkPWUubWFpbi5zZWxlY3QoIi4iK2EueWdyaWRzKS5zZWxlY3RBbGwoIi4iK2EueWdyaWQpLmRhdGEobiksZS55Z3JpZC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixhLnlncmlkKSxlLnlncmlkLmF0dHIoIngxIix0LmF4aXNfcm90YXRlZD9lLnk6MCkuYXR0cigieDIiLHQuYXhpc19yb3RhdGVkP2UueTplLndpZHRoKS5hdHRyKCJ5MSIsdC5heGlzX3JvdGF0ZWQ/MDplLnkpLmF0dHIoInkyIix0LmF4aXNfcm90YXRlZD9lLmhlaWdodDplLnkpLGUueWdyaWQuZXhpdCgpLnJlbW92ZSgpLGUuc21vb3RoTGluZXMoZS55Z3JpZCwiZ3JpZCIpfSx4LmdyaWRUZXh0QW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBvc2l0aW9uP2UucG9zaXRpb246ImVuZCJ9LHguZ3JpZFRleHREeD1mdW5jdGlvbihlKXtyZXR1cm4ic3RhcnQiPT09ZS5wb3NpdGlvbj80OiJtaWRkbGUiPT09ZS5wb3NpdGlvbj8wOi00fSx4LnhHcmlkVGV4dFg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0YXJ0Ij09PWUucG9zaXRpb24/LXRoaXMuaGVpZ2h0OiJtaWRkbGUiPT09ZS5wb3NpdGlvbj8tdGhpcy5oZWlnaHQvMjowfSx4LnlHcmlkVGV4dFg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0YXJ0Ij09PWUucG9zaXRpb24/MDoibWlkZGxlIj09PWUucG9zaXRpb24/dGhpcy53aWR0aC8yOnRoaXMud2lkdGh9LHgudXBkYXRlR3JpZD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz10aGlzLHM9by5tYWluLGk9by5jb25maWc7by5ncmlkLnN0eWxlKCJ2aXNpYmlsaXR5IixvLmhhc0FyY1R5cGUoKT8iaGlkZGVuIjoidmlzaWJsZSIpLHMuc2VsZWN0KCJsaW5lLiIrYS54Z3JpZEZvY3VzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGkuZ3JpZF94X3Nob3cmJm8udXBkYXRlWEdyaWQoKSxvLnhncmlkTGluZXM9cy5zZWxlY3QoIi4iK2EueGdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIithLnhncmlkTGluZSkuZGF0YShpLmdyaWRfeF9saW5lcyksdD1vLnhncmlkTGluZXMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEueGdyaWRMaW5lKyhlLmNsYXNzPyIgIitlLmNsYXNzOiIiKX0pLHQuYXBwZW5kKCJsaW5lIikuc3R5bGUoIm9wYWNpdHkiLDApLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLG8uZ3JpZFRleHRBbmNob3IpLmF0dHIoInRyYW5zZm9ybSIsaS5heGlzX3JvdGF0ZWQ/IiI6InJvdGF0ZSgtOTApIikuYXR0cigiZHgiLG8uZ3JpZFRleHREeCkuYXR0cigiZHkiLC01KS5zdHlsZSgib3BhY2l0eSIsMCksby54Z3JpZExpbmVzLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGkuZ3JpZF95X3Nob3cmJm8udXBkYXRlWUdyaWQoKSxvLnlncmlkTGluZXM9cy5zZWxlY3QoIi4iK2EueWdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIithLnlncmlkTGluZSkuZGF0YShpLmdyaWRfeV9saW5lcyksbj1vLnlncmlkTGluZXMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEueWdyaWRMaW5lKyhlLmNsYXNzPyIgIitlLmNsYXNzOiIiKX0pLG4uYXBwZW5kKCJsaW5lIikuc3R5bGUoIm9wYWNpdHkiLDApLG4uYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLG8uZ3JpZFRleHRBbmNob3IpLmF0dHIoInRyYW5zZm9ybSIsaS5heGlzX3JvdGF0ZWQ/InJvdGF0ZSgtOTApIjoiIikuYXR0cigiZHgiLG8uZ3JpZFRleHREeCkuYXR0cigiZHkiLC01KS5zdHlsZSgib3BhY2l0eSIsMCkscj1vLnl2LmJpbmQobyksby55Z3JpZExpbmVzLnNlbGVjdCgibGluZSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5hdHRyKCJ4MSIsaS5heGlzX3JvdGF0ZWQ/cjowKS5hdHRyKCJ4MiIsaS5heGlzX3JvdGF0ZWQ/cjpvLndpZHRoKS5hdHRyKCJ5MSIsaS5heGlzX3JvdGF0ZWQ/MDpyKS5hdHRyKCJ5MiIsaS5heGlzX3JvdGF0ZWQ/by5oZWlnaHQ6cikuc3R5bGUoIm9wYWNpdHkiLDEpLG8ueWdyaWRMaW5lcy5zZWxlY3QoInRleHQiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuYXR0cigieCIsaS5heGlzX3JvdGF0ZWQ/by54R3JpZFRleHRYLmJpbmQobyk6by55R3JpZFRleHRYLmJpbmQobykpLmF0dHIoInkiLHIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dH0pLnN0eWxlKCJvcGFjaXR5IiwxKSxvLnlncmlkTGluZXMuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LHgucmVkcmF3R3JpZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj10Lnh2LmJpbmQodCksbz10LnhncmlkTGluZXMuc2VsZWN0KCJsaW5lIikscz10LnhncmlkTGluZXMuc2VsZWN0KCJ0ZXh0Iik7cmV0dXJuWyhlP28udHJhbnNpdGlvbigpOm8pLmF0dHIoIngxIixuLmF4aXNfcm90YXRlZD8wOnIpLmF0dHIoIngyIixuLmF4aXNfcm90YXRlZD90LndpZHRoOnIpLmF0dHIoInkxIixuLmF4aXNfcm90YXRlZD9yOjApLmF0dHIoInkyIixuLmF4aXNfcm90YXRlZD9yOnQuaGVpZ2h0KS5zdHlsZSgib3BhY2l0eSIsMSksKGU/cy50cmFuc2l0aW9uKCk6cykuYXR0cigieCIsbi5heGlzX3JvdGF0ZWQ/dC55R3JpZFRleHRYLmJpbmQodCk6dC54R3JpZFRleHRYLmJpbmQodCkpLmF0dHIoInkiLHIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dH0pLnN0eWxlKCJvcGFjaXR5IiwxKV19LHguc2hvd1hHcmlkRm9jdXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLHI9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJl8oZS52YWx1ZSl9KSxvPXQubWFpbi5zZWxlY3RBbGwoImxpbmUuIithLnhncmlkRm9jdXMpLHM9dC54eC5iaW5kKHQpO24udG9vbHRpcF9zaG93JiYodC5oYXNUeXBlKCJzY2F0dGVyIil8fHQuaGFzQXJjVHlwZSgpfHwoby5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS5kYXRhKFtyWzBdXSkuYXR0cihuLmF4aXNfcm90YXRlZD8ieTEiOiJ4MSIscykuYXR0cihuLmF4aXNfcm90YXRlZD8ieTIiOiJ4MiIscyksdC5zbW9vdGhMaW5lcyhvLCJncmlkIikpKX0seC5oaWRlWEdyaWRGb2N1cz1mdW5jdGlvbigpe3RoaXMubWFpbi5zZWxlY3QoImxpbmUuIithLnhncmlkRm9jdXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LHgudXBkYXRlWGdyaWRGb2N1cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztlLm1haW4uc2VsZWN0KCJsaW5lLiIrYS54Z3JpZEZvY3VzKS5hdHRyKCJ4MSIsdC5heGlzX3JvdGF0ZWQ/MDotMTApLmF0dHIoIngyIix0LmF4aXNfcm90YXRlZD9lLndpZHRoOi0xMCkuYXR0cigieTEiLHQuYXhpc19yb3RhdGVkPy0xMDowKS5hdHRyKCJ5MiIsdC5heGlzX3JvdGF0ZWQ/LTEwOmUuaGVpZ2h0KX0seC5nZW5lcmF0ZUdyaWREYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaT10aGlzLGw9W10sdT1pLm1haW4uc2VsZWN0KCIuIithLmF4aXNYKS5zZWxlY3RBbGwoIi50aWNrIikuc2l6ZSgpO2lmKCJ5ZWFyIj09PWUpZm9yKG49aS5nZXRYRG9tYWluKCkscj1uWzBdLmdldEZ1bGxZZWFyKCksbz1uWzFdLmdldEZ1bGxZZWFyKCkscz1yO3M8PW87cysrKWwucHVzaChuZXcgRGF0ZShzKyItMDEtMDEgMDA6MDA6MDAiKSk7ZWxzZSBsPXQudGlja3MoMTApLGwubGVuZ3RoPnUmJihsPWwuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybigiIitlKS5pbmRleE9mKCIuIik8MH0pKTtyZXR1cm4gbH0seC5nZXRHcmlkRmlsdGVyVG9SZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCl7dmFyIG49ITE7cmV0dXJuW10uY29uY2F0KGUpLmZvckVhY2goZnVuY3Rpb24oZSl7KCJ2YWx1ZSJpbiBlJiZ0LnZhbHVlPT09ZS52YWx1ZXx8ImNsYXNzImluIGUmJnQuY2xhc3M9PT1lLmNsYXNzKSYmKG49ITApfSksbn06ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHgucmVtb3ZlR3JpZExpbmVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89bi5nZXRHcmlkRmlsdGVyVG9SZW1vdmUoZSkscz1mdW5jdGlvbihlKXtyZXR1cm4hbyhlKX0saT10P2EueGdyaWRMaW5lczphLnlncmlkTGluZXMsbD10P2EueGdyaWRMaW5lOmEueWdyaWRMaW5lO24ubWFpbi5zZWxlY3QoIi4iK2kpLnNlbGVjdEFsbCgiLiIrbCkuZmlsdGVyKG8pLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLnRyYW5zaXRpb25fZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSx0P3IuZ3JpZF94X2xpbmVzPXIuZ3JpZF94X2xpbmVzLmZpbHRlcihzKTpyLmdyaWRfeV9saW5lcz1yLmdyaWRfeV9saW5lcy5maWx0ZXIocyl9LHguaW5pdEV2ZW50UmVjdD1mdW5jdGlvbigpe3RoaXMubWFpbi5zZWxlY3QoIi4iK2EuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhLmV2ZW50UmVjdHMpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApfSx4LnJlZHJhd0V2ZW50UmVjdD1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLHI9bi5jb25maWcsbz1uLmlzTXVsdGlwbGVYKCkscz1uLm1haW4uc2VsZWN0KCIuIithLmV2ZW50UmVjdHMpLnN0eWxlKCJjdXJzb3IiLHIuem9vbV9lbmFibGVkP3IuYXhpc19yb3RhdGVkPyJucy1yZXNpemUiOiJldy1yZXNpemUiOm51bGwpLmNsYXNzZWQoYS5ldmVudFJlY3RzTXVsdGlwbGUsbykuY2xhc3NlZChhLmV2ZW50UmVjdHNTaW5nbGUsIW8pO3Muc2VsZWN0QWxsKCIuIithLmV2ZW50UmVjdCkucmVtb3ZlKCksbi5ldmVudFJlY3Q9cy5zZWxlY3RBbGwoIi4iK2EuZXZlbnRSZWN0KSxvPyhlPW4uZXZlbnRSZWN0LmRhdGEoWzBdKSxuLmdlbmVyYXRlRXZlbnRSZWN0c0Zvck11bHRpcGxlWHMoZS5lbnRlcigpKSxuLnVwZGF0ZUV2ZW50UmVjdChlKSk6KHQ9bi5nZXRNYXhEYXRhQ291bnRUYXJnZXQobi5kYXRhLnRhcmdldHMpLHMuZGF0dW0odD90LnZhbHVlczpbXSksbi5ldmVudFJlY3Q9cy5zZWxlY3RBbGwoIi4iK2EuZXZlbnRSZWN0KSxlPW4uZXZlbnRSZWN0LmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxuLmdlbmVyYXRlRXZlbnRSZWN0c0ZvclNpbmdsZVgoZS5lbnRlcigpKSxuLnVwZGF0ZUV2ZW50UmVjdChlKSxlLmV4aXQoKS5yZW1vdmUoKSl9LHgudXBkYXRlRXZlbnRSZWN0PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaSxhPXRoaXMsbD1hLmNvbmZpZztlPWV8fGEuZXZlbnRSZWN0LmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxhLmlzTXVsdGlwbGVYKCk/KHQ9MCxuPTAscj1hLndpZHRoLG89YS5oZWlnaHQpOighYS5pc0N1c3RvbVgoKSYmIWEuaXNUaW1lU2VyaWVzKCl8fGEuaXNDYXRlZ29yaXplZCgpPyhzPWEuZ2V0RXZlbnRSZWN0V2lkdGgoKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBhLngoZS54KS1zLzJ9KTooYS51cGRhdGVYcygpLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5nZXRQcmV2WChlLmluZGV4KSxuPWEuZ2V0TmV4dFgoZS5pbmRleCk7cmV0dXJuIG51bGw9PT10JiZudWxsPT09bj9sLmF4aXNfcm90YXRlZD9hLmhlaWdodDphLndpZHRoOihudWxsPT09dCYmKHQ9YS54LmRvbWFpbigpWzBdKSxudWxsPT09biYmKG49YS54LmRvbWFpbigpWzFdKSxNYXRoLm1heCgwLChhLngobiktYS54KHQpKS8yKSl9LGk9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5nZXRQcmV2WChlLmluZGV4KSxuPWEuZ2V0TmV4dFgoZS5pbmRleCkscj1hLmRhdGEueHNbZS5pZF1bZS5pbmRleF07cmV0dXJuIG51bGw9PT10JiZudWxsPT09bj8wOihudWxsPT09dCYmKHQ9YS54LmRvbWFpbigpWzBdKSwoYS54KHIpK2EueCh0KSkvMil9KSx0PWwuYXhpc19yb3RhdGVkPzA6aSxuPWwuYXhpc19yb3RhdGVkP2k6MCxyPWwuYXhpc19yb3RhdGVkP2Eud2lkdGg6cyxvPWwuYXhpc19yb3RhdGVkP3M6YS5oZWlnaHQpLGUuYXR0cigiY2xhc3MiLGEuY2xhc3NFdmVudC5iaW5kKGEpKS5hdHRyKCJ4Iix0KS5hdHRyKCJ5IixuKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixvKX0seC5nZW5lcmF0ZUV2ZW50UmVjdHNGb3JTaW5nbGVYPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmQzLHI9dC5jb25maWc7ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsdC5jbGFzc0V2ZW50LmJpbmQodCkpLnN0eWxlKCJjdXJzb3IiLHIuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmci5kYXRhX3NlbGVjdGlvbl9ncm91cGVkPyJwb2ludGVyIjpudWxsKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlKXt2YXIgbj1lLmluZGV4O3QuZHJhZ2dpbmd8fHQuZmxvd2luZ3x8dC5oYXNBcmNUeXBlKCl8fChyLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkJiZ0LmV4cGFuZENpcmNsZXMobixudWxsLCEwKSx0LmV4cGFuZEJhcnMobixudWxsLCEwKSx0Lm1haW4uc2VsZWN0QWxsKCIuIithLnNoYXBlKyItIituKS5lYWNoKGZ1bmN0aW9uKGUpe3IuZGF0YV9vbm1vdXNlb3Zlci5jYWxsKHQuYXBpLGUpfSkpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlKXt2YXIgbj1lLmluZGV4O3QuY29uZmlnJiYodC5oYXNBcmNUeXBlKCl8fCh0LmhpZGVYR3JpZEZvY3VzKCksdC5oaWRlVG9vbHRpcCgpLHQudW5leHBhbmRDaXJjbGVzKCksdC51bmV4cGFuZEJhcnMoKSx0Lm1haW4uc2VsZWN0QWxsKCIuIithLnNoYXBlKyItIituKS5lYWNoKGZ1bmN0aW9uKGUpe3IuZGF0YV9vbm1vdXNlb3V0LmNhbGwodC5hcGksZSl9KSkpfSkub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oZSl7dmFyIG8scz1lLmluZGV4LGk9dC5zdmcuc2VsZWN0KCIuIithLmV2ZW50UmVjdCsiLSIrcyk7dC5kcmFnZ2luZ3x8dC5mbG93aW5nfHx0Lmhhc0FyY1R5cGUoKXx8KHQuaXNTdGVwVHlwZShlKSYmInN0ZXAtYWZ0ZXIiPT09dC5jb25maWcubGluZV9zdGVwX3R5cGUmJm4ubW91c2UodGhpcylbMF08dC54KHQuZ2V0WFZhbHVlKGUuaWQscykpJiYocy09MSksbz10LmZpbHRlclRhcmdldHNUb1Nob3codC5kYXRhLnRhcmdldHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGROYW1lKHQuZ2V0VmFsdWVPbkluZGV4KGUudmFsdWVzLHMpKX0pLHIudG9vbHRpcF9ncm91cGVkJiYodC5zaG93VG9vbHRpcChvLHRoaXMpLHQuc2hvd1hHcmlkRm9jdXMobykpLCghci50b29sdGlwX2dyb3VwZWR8fHIuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmIXIuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZCkmJnQubWFpbi5zZWxlY3RBbGwoIi4iK2Euc2hhcGUrIi0iK3MpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jbGFzc2VkKGEuRVhQQU5ERUQsITApLHIuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmaS5zdHlsZSgiY3Vyc29yIixyLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQ/InBvaW50ZXIiOm51bGwpLHIudG9vbHRpcF9ncm91cGVkfHwodC5oaWRlWEdyaWRGb2N1cygpLHQuaGlkZVRvb2x0aXAoKSxyLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWR8fCh0LnVuZXhwYW5kQ2lyY2xlcyhzKSx0LnVuZXhwYW5kQmFycyhzKSkpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LmlzV2l0aGluU2hhcGUodGhpcyxlKX0pLmVhY2goZnVuY3Rpb24oZSl7ci5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiYoci5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHxyLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShlKSkmJmkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxyLnRvb2x0aXBfZ3JvdXBlZHx8KHQuc2hvd1Rvb2x0aXAoW2VdLHRoaXMpLHQuc2hvd1hHcmlkRm9jdXMoW2VdKSxyLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkJiZ0LmV4cGFuZENpcmNsZXMocyxlLmlkLCEwKSx0LmV4cGFuZEJhcnMocyxlLmlkLCEwKSl9KSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciBvPWUuaW5kZXg7aWYoIXQuaGFzQXJjVHlwZSgpJiZ0LnRvZ2dsZVNoYXBlKXtpZih0LmNhbmNlbENsaWNrKXJldHVybiB2b2lkKHQuY2FuY2VsQ2xpY2s9ITEpO3QuaXNTdGVwVHlwZShlKSYmInN0ZXAtYWZ0ZXIiPT09ci5saW5lX3N0ZXBfdHlwZSYmbi5tb3VzZSh0aGlzKVswXTx0LngodC5nZXRYVmFsdWUoZS5pZCxvKSkmJihvLT0xKSx0Lm1haW4uc2VsZWN0QWxsKCIuIithLnNoYXBlKyItIitvKS5lYWNoKGZ1bmN0aW9uKGUpeyhyLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWR8fHQuaXNXaXRoaW5TaGFwZSh0aGlzLGUpKSYmKHQudG9nZ2xlU2hhcGUodGhpcyxlLG8pLHQuY29uZmlnLmRhdGFfb25jbGljay5jYWxsKHQuYXBpLGUsdGhpcykpfSl9fSkuY2FsbChyLmRhdGFfc2VsZWN0aW9uX2RyYWdnYWJsZSYmdC5kcmFnP24uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihPYmplY3QpLm9uKCJkcmFnIixmdW5jdGlvbigpe3QuZHJhZyhuLm1vdXNlKHRoaXMpKX0pLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7dC5kcmFnc3RhcnQobi5tb3VzZSh0aGlzKSl9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24oKXt0LmRyYWdlbmQoKX0pOmZ1bmN0aW9uKCl7fSl9LHguZ2VuZXJhdGVFdmVudFJlY3RzRm9yTXVsdGlwbGVYcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7bi5zdmcuc2VsZWN0KCIuIithLmV2ZW50UmVjdCkuc3R5bGUoImN1cnNvciIsbnVsbCksbi5oaWRlWEdyaWRGb2N1cygpLG4uaGlkZVRvb2x0aXAoKSxuLnVuZXhwYW5kQ2lyY2xlcygpLG4udW5leHBhbmRCYXJzKCl9dmFyIG49dGhpcyxyPW4uZDMsbz1uLmNvbmZpZztlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixuLndpZHRoKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0KS5hdHRyKCJjbGFzcyIsYS5ldmVudFJlY3QpLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtuLmNvbmZpZyYmKG4uaGFzQXJjVHlwZSgpfHx0KCkpfSkub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oKXt2YXIgZSxzLGksbCx1PW4uZmlsdGVyVGFyZ2V0c1RvU2hvdyhuLmRhdGEudGFyZ2V0cyk7aWYoIW4uZHJhZ2dpbmcmJiFuLmhhc0FyY1R5cGUodSkpe2lmKGU9ci5tb3VzZSh0aGlzKSxzPW4uZmluZENsb3Nlc3RGcm9tVGFyZ2V0cyh1LGUpLCFuLm1vdXNlb3Zlcnx8cyYmcy5pZD09PW4ubW91c2VvdmVyLmlkfHwoby5kYXRhX29ubW91c2VvdXQuY2FsbChuLmFwaSxuLm1vdXNlb3Zlciksbi5tb3VzZW92ZXI9dm9pZCAwKSwhcylyZXR1cm4gdm9pZCB0KCk7aT1uLmlzU2NhdHRlclR5cGUocyl8fCFvLnRvb2x0aXBfZ3JvdXBlZD9bc106bi5maWx0ZXJCeVgodSxzLngpLGw9aS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uYWRkTmFtZShlKX0pLG4uc2hvd1Rvb2x0aXAobCx0aGlzKSxvLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkJiZuLmV4cGFuZENpcmNsZXMocy5pbmRleCxzLmlkLCEwKSxuLmV4cGFuZEJhcnMocy5pbmRleCxzLmlkLCEwKSxuLnNob3dYR3JpZEZvY3VzKGwpLChuLmlzQmFyVHlwZShzLmlkKXx8bi5kaXN0KHMsZSk8by5wb2ludF9zZW5zaXRpdml0eSkmJihuLnN2Zy5zZWxlY3QoIi4iK2EuZXZlbnRSZWN0KS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLG4ubW91c2VvdmVyfHwoby5kYXRhX29ubW91c2VvdmVyLmNhbGwobi5hcGkscyksbi5tb3VzZW92ZXI9cykpfX0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgZSx0LHM9bi5maWx0ZXJUYXJnZXRzVG9TaG93KG4uZGF0YS50YXJnZXRzKTtuLmhhc0FyY1R5cGUocyl8fChlPXIubW91c2UodGhpcyksKHQ9bi5maW5kQ2xvc2VzdEZyb21UYXJnZXRzKHMsZSkpJiYobi5pc0JhclR5cGUodC5pZCl8fG4uZGlzdCh0LGUpPG8ucG9pbnRfc2Vuc2l0aXZpdHkpJiZuLm1haW4uc2VsZWN0QWxsKCIuIithLnNoYXBlcytuLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KHQuaWQpKS5zZWxlY3RBbGwoIi4iK2Euc2hhcGUrIi0iK3QuaW5kZXgpLmVhY2goZnVuY3Rpb24oKXsoby5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHxuLmlzV2l0aGluU2hhcGUodGhpcyx0KSkmJihuLnRvZ2dsZVNoYXBlKHRoaXMsdCx0LmluZGV4KSxuLmNvbmZpZy5kYXRhX29uY2xpY2suY2FsbChuLmFwaSx0LHRoaXMpKX0pKX0pLmNhbGwoby5kYXRhX3NlbGVjdGlvbl9kcmFnZ2FibGUmJm4uZHJhZz9yLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oT2JqZWN0KS5vbigiZHJhZyIsZnVuY3Rpb24oKXtuLmRyYWcoci5tb3VzZSh0aGlzKSl9KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe24uZHJhZ3N0YXJ0KHIubW91c2UodGhpcykpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7bi5kcmFnZW5kKCl9KTpmdW5jdGlvbigpe30pfSx4LmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsbz0iLiIrYS5ldmVudFJlY3QrKHIuaXNNdWx0aXBsZVgoKT8iIjoiLSIrdCkscz1yLm1haW4uc2VsZWN0KG8pLm5vZGUoKSxpPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1pLmxlZnQrKG4/blswXTowKSx1PWkudG9wKyhuP25bMV06MCksYz1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtjLmluaXRNb3VzZUV2ZW50KGUsITAsITAsd2luZG93LDAsbCx1LGwsdSwhMSwhMSwhMSwhMSwwLG51bGwpLHMuZGlzcGF0Y2hFdmVudChjKX0seC5pbml0TGVnZW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlLmxlZ2VuZEl0ZW1UZXh0Qm94PXt9LGUubGVnZW5kSGFzUmVuZGVyZWQ9ITEsZS5sZWdlbmQ9ZS5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgibGVnZW5kIikpLCFlLmNvbmZpZy5sZWdlbmRfc2hvdylyZXR1cm4gZS5sZWdlbmQuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSx2b2lkKGUuaGlkZGVuTGVnZW5kSWRzPWUubWFwVG9JZHMoZS5kYXRhLnRhcmdldHMpKTtlLnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cygpfSx4LnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS51cGRhdGVMZWdlbmQoZS5tYXBUb0lkcyhlLmRhdGEudGFyZ2V0cykse3dpdGhUcmFuc2Zvcm06ITEsd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06ITEsd2l0aFRyYW5zaXRpb246ITF9KX0seC51cGRhdGVTaXplRm9yTGVnZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89e3RvcDpuLmlzTGVnZW5kVG9wP24uZ2V0Q3VycmVudFBhZGRpbmdUb3AoKStyLmxlZ2VuZF9pbnNldF95KzUuNTpuLmN1cnJlbnRIZWlnaHQtZS1uLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCktci5sZWdlbmRfaW5zZXRfeSxsZWZ0Om4uaXNMZWdlbmRMZWZ0P24uZ2V0Q3VycmVudFBhZGRpbmdMZWZ0KCkrci5sZWdlbmRfaW5zZXRfeCsuNTpuLmN1cnJlbnRXaWR0aC10LW4uZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLXIubGVnZW5kX2luc2V0X3grLjV9O24ubWFyZ2luMz17dG9wOm4uaXNMZWdlbmRSaWdodD8wOm4uaXNMZWdlbmRJbnNldD9vLnRvcDpuLmN1cnJlbnRIZWlnaHQtZSxyaWdodDpOYU4sYm90dG9tOjAsbGVmdDpuLmlzTGVnZW5kUmlnaHQ/bi5jdXJyZW50V2lkdGgtdDpuLmlzTGVnZW5kSW5zZXQ/by5sZWZ0OjB9fSx4LnRyYW5zZm9ybUxlZ2VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzOyhlP3QubGVnZW5kLnRyYW5zaXRpb24oKTp0LmxlZ2VuZCkuYXR0cigidHJhbnNmb3JtIix0LmdldFRyYW5zbGF0ZSgibGVnZW5kIikpfSx4LnVwZGF0ZUxlZ2VuZFN0ZXA9ZnVuY3Rpb24oZSl7dGhpcy5sZWdlbmRTdGVwPWV9LHgudXBkYXRlTGVnZW5kSXRlbVdpZHRoPWZ1bmN0aW9uKGUpe3RoaXMubGVnZW5kSXRlbVdpZHRoPWV9LHgudXBkYXRlTGVnZW5kSXRlbUhlaWdodD1mdW5jdGlvbihlKXt0aGlzLmxlZ2VuZEl0ZW1IZWlnaHQ9ZX0seC5nZXRMZWdlbmRXaWR0aD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuY29uZmlnLmxlZ2VuZF9zaG93P2UuaXNMZWdlbmRSaWdodHx8ZS5pc0xlZ2VuZEluc2V0P2UubGVnZW5kSXRlbVdpZHRoKihlLmxlZ2VuZFN0ZXArMSk6ZS5jdXJyZW50V2lkdGg6MH0seC5nZXRMZWdlbmRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9MDtyZXR1cm4gZS5jb25maWcubGVnZW5kX3Nob3cmJih0PWUuaXNMZWdlbmRSaWdodD9lLmN1cnJlbnRIZWlnaHQ6TWF0aC5tYXgoMjAsZS5sZWdlbmRJdGVtSGVpZ2h0KSooZS5sZWdlbmRTdGVwKzEpKSx0fSx4Lm9wYWNpdHlGb3JMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NlZChhLmxlZ2VuZEl0ZW1IaWRkZW4pP251bGw6MX0seC5vcGFjaXR5Rm9yVW5mb2N1c2VkTGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzZWQoYS5sZWdlbmRJdGVtSGlkZGVuKT9udWxsOi4zfSx4LnRvZ2dsZUZvY3VzTGVnZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztlPW4ubWFwVG9UYXJnZXRJZHMoZSksbi5sZWdlbmQuc2VsZWN0QWxsKCIuIithLmxlZ2VuZEl0ZW0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPj0wfSkuY2xhc3NlZChhLmxlZ2VuZEl0ZW1Gb2N1c2VkLHQpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybih0P24ub3BhY2l0eUZvckxlZ2VuZDpuLm9wYWNpdHlGb3JVbmZvY3VzZWRMZWdlbmQpLmNhbGwobixuLmQzLnNlbGVjdCh0aGlzKSl9KX0seC5yZXZlcnRMZWdlbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5kMztlLmxlZ2VuZC5zZWxlY3RBbGwoIi4iK2EubGVnZW5kSXRlbSkuY2xhc3NlZChhLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4gZS5vcGFjaXR5Rm9yTGVnZW5kKHQuc2VsZWN0KHRoaXMpKX0pfSx4LnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO24ubGVnZW5kX3Nob3d8fChuLmxlZ2VuZF9zaG93PSEwLHQubGVnZW5kLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLHQubGVnZW5kSGFzUmVuZGVyZWR8fHQudXBkYXRlTGVnZW5kV2l0aERlZmF1bHRzKCkpLHQucmVtb3ZlSGlkZGVuTGVnZW5kSWRzKGUpLHQubGVnZW5kLnNlbGVjdEFsbCh0LnNlbGVjdG9yTGVnZW5kcyhlKSkuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Lm9wYWNpdHlGb3JMZWdlbmQodC5kMy5zZWxlY3QodGhpcykpfSl9LHguaGlkZUxlZ2VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWc7bi5sZWdlbmRfc2hvdyYmdihlKSYmKG4ubGVnZW5kX3Nob3c9ITEsdC5sZWdlbmQuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSksdC5hZGRIaWRkZW5MZWdlbmRJZHMoZSksdC5sZWdlbmQuc2VsZWN0QWxsKHQuc2VsZWN0b3JMZWdlbmRzKGUpKS5zdHlsZSgib3BhY2l0eSIsMCkuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0seC5jbGVhckxlZ2VuZEl0ZW1UZXh0Qm94Q2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmxlZ2VuZEl0ZW1UZXh0Qm94PXt9fSx4LnVwZGF0ZUxlZ2VuZD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBDLmxlZ2VuZEl0ZW1UZXh0Qm94W3RdfHwoQy5sZWdlbmRJdGVtVGV4dEJveFt0XT1DLmdldFRleHRSZWN0KGUudGV4dENvbnRlbnQsYS5sZWdlbmRJdGVtLGUpKSxDLmxlZ2VuZEl0ZW1UZXh0Qm94W3RdfWZ1bmN0aW9uIG8odCxuLG8pe2Z1bmN0aW9uIHMoZSx0KXt0fHwoaT0oZi13LXApLzIpPEwmJihpPShmLXApLzIsdz0wLEgrKyksTltlXT1ILFBbSF09Qy5pc0xlZ2VuZEluc2V0PzEwOmksTVtlXT13LHcrPXB9dmFyIGksYSxsPTA9PT1vLHU9bz09PWUubGVuZ3RoLTEsYz1yKHQsbiksZD1jLndpZHRoK0QrKCF1fHxDLmlzTGVnZW5kUmlnaHR8fEMuaXNMZWdlbmRJbnNldD9SOjApK08ubGVnZW5kX3BhZGRpbmcsXz1jLmhlaWdodCtTLHA9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/XzpkLGY9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/Qy5nZXRMZWdlbmRIZWlnaHQoKTpDLmdldExlZ2VuZFdpZHRoKCk7aWYobCYmKHc9MCxIPTAsaj0wLHg9MCksTy5sZWdlbmRfc2hvdyYmIUMuaXNMZWdlbmRUb1Nob3cobikpcmV0dXJuIHZvaWQoa1tuXT1JW25dPU5bbl09TVtuXT0wKTtrW25dPWQsSVtuXT1fLCghanx8ZD49aikmJihqPWQpLCgheHx8Xz49eCkmJih4PV8pLGE9Qy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/eDpqLE8ubGVnZW5kX2VxdWFsbHk/KE9iamVjdC5rZXlzKGspLmZvckVhY2goZnVuY3Rpb24oZSl7a1tlXT1qfSksT2JqZWN0LmtleXMoSSkuZm9yRWFjaChmdW5jdGlvbihlKXtJW2VdPXh9KSxpPShmLWEqZS5sZW5ndGgpLzIsaTxMPyh3PTAsSD0wLGUuZm9yRWFjaChmdW5jdGlvbihlKXtzKGUpfSkpOnMobiwhMCkpOnMobil9dmFyIHMsaSxsLHUsYyxkLF8scCxmLG0saCxiLEUseSx2LFQsQz10aGlzLE89Qy5jb25maWcsUz00LFI9MTAsaj0wLHg9MCxMPTEwLEQ9Ty5sZWdlbmRfaXRlbV90aWxlX3dpZHRoKzUsdz0wLE09e30saz17fSxJPXt9LFA9WzBdLE49e30sSD0wO2U9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWcoTy5kYXRhX25hbWVzW2VdKXx8bnVsbCE9PU8uZGF0YV9uYW1lc1tlXX0pLHQ9dHx8e30saD1BKHQsIndpdGhUcmFuc2l0aW9uIiwhMCksYj1BKHQsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIiwhMCksQy5pc0xlZ2VuZEluc2V0JiYoSD1PLmxlZ2VuZF9pbnNldF9zdGVwP08ubGVnZW5kX2luc2V0X3N0ZXA6ZS5sZW5ndGgsQy51cGRhdGVMZWdlbmRTdGVwKEgpKSxDLmlzTGVnZW5kUmlnaHQ/KHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGoqTltlXX0sdT1mdW5jdGlvbihlKXtyZXR1cm4gUFtOW2VdXStNW2VdfSk6Qy5pc0xlZ2VuZEluc2V0PyhzPWZ1bmN0aW9uKGUpe3JldHVybiBqKk5bZV0rMTB9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIFBbTltlXV0rTVtlXX0pOihzPWZ1bmN0aW9uKGUpe3JldHVybiBQW05bZV1dK01bZV19LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHgqTltlXX0pLGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQpKzQrTy5sZWdlbmRfaXRlbV90aWxlX3dpZHRofSxjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0KSs5fSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0KX0sZD1mdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCktNX0sXz1mdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCktMn0scD1mdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCktMitPLmxlZ2VuZF9pdGVtX3RpbGVfd2lkdGh9LGY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpKzR9LG09Qy5sZWdlbmQuc2VsZWN0QWxsKCIuIithLmxlZ2VuZEl0ZW0pLmRhdGEoZSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIEMuZ2VuZXJhdGVDbGFzcyhhLmxlZ2VuZEl0ZW0sZSl9KS5zdHlsZSgidmlzaWJpbGl0eSIsZnVuY3Rpb24oZSl7cmV0dXJuIEMuaXNMZWdlbmRUb1Nob3coZSk/InZpc2libGUiOiJoaWRkZW4ifSkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe08ubGVnZW5kX2l0ZW1fb25jbGljaz9PLmxlZ2VuZF9pdGVtX29uY2xpY2suY2FsbChDLGUpOkMuZDMuZXZlbnQuYWx0S2V5PyhDLmFwaS5oaWRlKCksQy5hcGkuc2hvdyhlKSk6KEMuYXBpLnRvZ2dsZShlKSxDLmlzVGFyZ2V0VG9TaG93KGUpP0MuYXBpLmZvY3VzKGUpOkMuYXBpLnJldmVydCgpKX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe08ubGVnZW5kX2l0ZW1fb25tb3VzZW92ZXI/Ty5sZWdlbmRfaXRlbV9vbm1vdXNlb3Zlci5jYWxsKEMsZSk6KEMuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoYS5sZWdlbmRJdGVtRm9jdXNlZCwhMCksIUMudHJhbnNpdGluZyYmQy5pc1RhcmdldFRvU2hvdyhlKSYmQy5hcGkuZm9jdXMoZSkpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlKXtPLmxlZ2VuZF9pdGVtX29ubW91c2VvdXQ/Ty5sZWdlbmRfaXRlbV9vbm1vdXNlb3V0LmNhbGwoQyxlKTooQy5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChhLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKSxDLmFwaS5yZXZlcnQoKSl9KSxtLmFwcGVuZCgidGV4dCIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGcoTy5kYXRhX25hbWVzW2VdKT9PLmRhdGFfbmFtZXNbZV06ZX0pLmVhY2goZnVuY3Rpb24oZSx0KXtvKHRoaXMsZSx0KX0pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5hdHRyKCJ4IixDLmlzTGVnZW5kUmlnaHR8fEMuaXNMZWdlbmRJbnNldD9pOi0yMDApLmF0dHIoInkiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6YyksbS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsYS5sZWdlbmRJdGVtRXZlbnQpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLmF0dHIoIngiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P2w6LTIwMCkuYXR0cigieSIsQy5pc0xlZ2VuZFJpZ2h0fHxDLmlzTGVnZW5kSW5zZXQ/LTIwMDpkKSxtLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixhLmxlZ2VuZEl0ZW1UaWxlKS5zdHlsZSgic3Ryb2tlIixDLmNvbG9yKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuYXR0cigieDEiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P186LTIwMCkuYXR0cigieTEiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6ZikuYXR0cigieDIiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0P3A6LTIwMCkuYXR0cigieTIiLEMuaXNMZWdlbmRSaWdodHx8Qy5pc0xlZ2VuZEluc2V0Py0yMDA6ZikuYXR0cigic3Ryb2tlLXdpZHRoIixPLmxlZ2VuZF9pdGVtX3RpbGVfaGVpZ2h0KSxUPUMubGVnZW5kLnNlbGVjdCgiLiIrYS5sZWdlbmRCYWNrZ3JvdW5kKyIgcmVjdCIpLEMuaXNMZWdlbmRJbnNldCYmaj4wJiYwPT09VC5zaXplKCkmJihUPUMubGVnZW5kLmluc2VydCgiZyIsIi4iK2EubGVnZW5kSXRlbSkuYXR0cigiY2xhc3MiLGEubGVnZW5kQmFja2dyb3VuZCkuYXBwZW5kKCJyZWN0IikpLEU9Qy5sZWdlbmQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShlKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBnKE8uZGF0YV9uYW1lc1tlXSk/Ty5kYXRhX25hbWVzW2VdOmV9KS5lYWNoKGZ1bmN0aW9uKGUsdCl7byh0aGlzLGUsdCl9KSwoaD9FLnRyYW5zaXRpb24oKTpFKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixjKSx5PUMubGVnZW5kLnNlbGVjdEFsbCgicmVjdC4iK2EubGVnZW5kSXRlbUV2ZW50KS5kYXRhKGUpLChoP3kudHJhbnNpdGlvbigpOnkpLmF0dHIoIndpZHRoIixmdW5jdGlvbihlKXtyZXR1cm4ga1tlXX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuIElbZV19KS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixkKSx2PUMubGVnZW5kLnNlbGVjdEFsbCgibGluZS4iK2EubGVnZW5kSXRlbVRpbGUpLmRhdGEoZSksKGg/di50cmFuc2l0aW9uKCk6dikuc3R5bGUoInN0cm9rZSIsQy5sZXZlbENvbG9yP2Z1bmN0aW9uKGUpe3JldHVybiBDLmxldmVsQ29sb3IoQy5jYWNoZVtlXS52YWx1ZXNbMF0udmFsdWUpfTpDLmNvbG9yKS5hdHRyKCJ4MSIsXykuYXR0cigieTEiLGYpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsZiksVCYmKGg/VC50cmFuc2l0aW9uKCk6VCkuYXR0cigiaGVpZ2h0IixDLmdldExlZ2VuZEhlaWdodCgpLTEyKS5hdHRyKCJ3aWR0aCIsaiooSCsxKSsxMCksQy5sZWdlbmQuc2VsZWN0QWxsKCIuIithLmxlZ2VuZEl0ZW0pLmNsYXNzZWQoYS5sZWdlbmRJdGVtSGlkZGVuLGZ1bmN0aW9uKGUpe3JldHVybiFDLmlzVGFyZ2V0VG9TaG93KGUpfSksQy51cGRhdGVMZWdlbmRJdGVtV2lkdGgoaiksQy51cGRhdGVMZWdlbmRJdGVtSGVpZ2h0KHgpLEMudXBkYXRlTGVnZW5kU3RlcChIKSxDLnVwZGF0ZVNpemVzKCksQy51cGRhdGVTY2FsZXMoKSxDLnVwZGF0ZVN2Z1NpemUoKSxDLnRyYW5zZm9ybUFsbChiLG4pLEMubGVnZW5kSGFzUmVuZGVyZWQ9ITB9LHguaW5pdFJlZ2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5yZWdpb249ZS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLGEucmVnaW9ucyl9LHgudXBkYXRlUmVnaW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZzt0LnJlZ2lvbi5zdHlsZSgidmlzaWJpbGl0eSIsdC5oYXNBcmNUeXBlKCk/ImhpZGRlbiI6InZpc2libGUiKSx0Lm1haW5SZWdpb249dC5tYWluLnNlbGVjdCgiLiIrYS5yZWdpb25zKS5zZWxlY3RBbGwoIi4iK2EucmVnaW9uKS5kYXRhKG4ucmVnaW9ucyksdC5tYWluUmVnaW9uLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCksdC5tYWluUmVnaW9uLmF0dHIoImNsYXNzIix0LmNsYXNzUmVnaW9uLmJpbmQodCkpLHQubWFpblJlZ2lvbi5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0seC5yZWRyYXdSZWdpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQubWFpblJlZ2lvbi5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5kMy5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5kYXR1bSgpO3QuZDMuc2VsZWN0KHRoaXMpLmRhdHVtKGUpfSkscj10LnJlZ2lvblguYmluZCh0KSxvPXQucmVnaW9uWS5iaW5kKHQpLHM9dC5yZWdpb25XaWR0aC5iaW5kKHQpLGk9dC5yZWdpb25IZWlnaHQuYmluZCh0KTtyZXR1cm5bKGU/bi50cmFuc2l0aW9uKCk6bikuYXR0cigieCIscikuYXR0cigieSIsbykuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsaSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24oZSl7cmV0dXJuIF8oZS5vcGFjaXR5KT9lLm9wYWNpdHk6LjF9KV19LHgucmVnaW9uWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj0ieSI9PT1lLmF4aXM/dC55OnQueTI7cmV0dXJuInkiPT09ZS5heGlzfHwieTIiPT09ZS5heGlzP24uYXhpc19yb3RhdGVkJiYic3RhcnQiaW4gZT9yKGUuc3RhcnQpOjA6bi5heGlzX3JvdGF0ZWQ/MDoic3RhcnQiaW4gZT90LngodC5pc1RpbWVTZXJpZXMoKT90LnBhcnNlRGF0ZShlLnN0YXJ0KTplLnN0YXJ0KTowfSx4LnJlZ2lvblk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnLHI9InkiPT09ZS5heGlzP3QueTp0LnkyO3JldHVybiJ5Ij09PWUuYXhpc3x8InkyIj09PWUuYXhpcz9uLmF4aXNfcm90YXRlZD8wOiJlbmQiaW4gZT9yKGUuZW5kKTowOm4uYXhpc19yb3RhdGVkJiYic3RhcnQiaW4gZT90LngodC5pc1RpbWVTZXJpZXMoKT90LnBhcnNlRGF0ZShlLnN0YXJ0KTplLnN0YXJ0KTowfSx4LnJlZ2lvbldpZHRoPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcyxyPW4uY29uZmlnLG89bi5yZWdpb25YKGUpLHM9InkiPT09ZS5heGlzP24ueTpuLnkyO3JldHVybiB0PSJ5Ij09PWUuYXhpc3x8InkyIj09PWUuYXhpcz9yLmF4aXNfcm90YXRlZCYmImVuZCJpbiBlP3MoZS5lbmQpOm4ud2lkdGg6ci5heGlzX3JvdGF0ZWQ/bi53aWR0aDoiZW5kImluIGU/bi54KG4uaXNUaW1lU2VyaWVzKCk/bi5wYXJzZURhdGUoZS5lbmQpOmUuZW5kKTpuLndpZHRoLHQ8bz8wOnQtb30seC5yZWdpb25IZWlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLHI9bi5jb25maWcsbz10aGlzLnJlZ2lvblkoZSkscz0ieSI9PT1lLmF4aXM/bi55Om4ueTI7cmV0dXJuIHQ9InkiPT09ZS5heGlzfHwieTIiPT09ZS5heGlzP3IuYXhpc19yb3RhdGVkP24uaGVpZ2h0OiJzdGFydCJpbiBlP3MoZS5zdGFydCk6bi5oZWlnaHQ6ci5heGlzX3JvdGF0ZWQmJiJlbmQiaW4gZT9uLngobi5pc1RpbWVTZXJpZXMoKT9uLnBhcnNlRGF0ZShlLmVuZCk6ZS5lbmQpOm4uaGVpZ2h0LHQ8bz8wOnQtb30seC5pc1JlZ2lvbk9uWD1mdW5jdGlvbihlKXtyZXR1cm4hZS5heGlzfHwieCI9PT1lLmF4aXN9LHguZ2V0U2NhbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybihuP3RoaXMuZDMudGltZS5zY2FsZSgpOnRoaXMuZDMuc2NhbGUubGluZWFyKCkpLnJhbmdlKFtlLHRdKX0seC5nZXRYPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLHM9dGhpcyxpPXMuZ2V0U2NhbGUoZSx0LHMuaXNUaW1lU2VyaWVzKCkpLGE9bj9pLmRvbWFpbihuKTppO3MuaXNDYXRlZ29yaXplZCgpPyhyPXJ8fGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hKGUpK3IoZSk7cmV0dXJuIHQ/bjpNYXRoLmNlaWwobil9KTppPWZ1bmN0aW9uKGUsdCl7dmFyIG49YShlKTtyZXR1cm4gdD9uOk1hdGguY2VpbChuKX07Zm9yKG8gaW4gYSlpW29dPWFbb107cmV0dXJuIGkub3JnRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIGEuZG9tYWluKCl9LHMuaXNDYXRlZ29yaXplZCgpJiYoaS5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuZG9tYWluKGUpLGkpOihlPXRoaXMub3JnRG9tYWluKCksW2VbMF0sZVsxXSsxXSl9KSxpfSx4LmdldFk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZ2V0U2NhbGUoZSx0LHRoaXMuaXNUaW1lU2VyaWVzWSgpKTtyZXR1cm4gbiYmci5kb21haW4obikscn0seC5nZXRZU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInkyIj09PXRoaXMuYXhpcy5nZXRJZChlKT90aGlzLnkyOnRoaXMueX0seC5nZXRTdWJZU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInkyIj09PXRoaXMuYXhpcy5nZXRJZChlKT90aGlzLnN1YlkyOnRoaXMuc3ViWX0seC51cGRhdGVTY2FsZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj0hZS54O2UueE1pbj10LmF4aXNfcm90YXRlZD8xOjAsZS54TWF4PXQuYXhpc19yb3RhdGVkP2UuaGVpZ2h0OmUud2lkdGgsZS55TWluPXQuYXhpc19yb3RhdGVkPzA6ZS5oZWlnaHQsZS55TWF4PXQuYXhpc19yb3RhdGVkP2Uud2lkdGg6MSxlLnN1YlhNaW49ZS54TWluLGUuc3ViWE1heD1lLnhNYXgsZS5zdWJZTWluPXQuYXhpc19yb3RhdGVkPzA6ZS5oZWlnaHQyLGUuc3ViWU1heD10LmF4aXNfcm90YXRlZD9lLndpZHRoMjoxLGUueD1lLmdldFgoZS54TWluLGUueE1heCxuP3ZvaWQgMDplLngub3JnRG9tYWluKCksZnVuY3Rpb24oKXtyZXR1cm4gZS54QXhpcy50aWNrT2Zmc2V0KCl9KSxlLnk9ZS5nZXRZKGUueU1pbixlLnlNYXgsbj90LmF4aXNfeV9kZWZhdWx0OmUueS5kb21haW4oKSksZS55Mj1lLmdldFkoZS55TWluLGUueU1heCxuP3QuYXhpc195Ml9kZWZhdWx0OmUueTIuZG9tYWluKCkpLGUuc3ViWD1lLmdldFgoZS54TWluLGUueE1heCxlLm9yZ1hEb21haW4sZnVuY3Rpb24odCl7cmV0dXJuIHQlMT8wOmUuc3ViWEF4aXMudGlja09mZnNldCgpfSksZS5zdWJZPWUuZ2V0WShlLnN1YllNaW4sZS5zdWJZTWF4LG4/dC5heGlzX3lfZGVmYXVsdDplLnN1YlkuZG9tYWluKCkpLGUuc3ViWTI9ZS5nZXRZKGUuc3ViWU1pbixlLnN1YllNYXgsbj90LmF4aXNfeTJfZGVmYXVsdDplLnN1YlkyLmRvbWFpbigpKSxlLnhBeGlzVGlja0Zvcm1hdD1lLmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCksZS54QXhpc1RpY2tWYWx1ZXM9ZS5heGlzLmdldFhBeGlzVGlja1ZhbHVlcygpLGUueUF4aXNUaWNrVmFsdWVzPWUuYXhpcy5nZXRZQXhpc1RpY2tWYWx1ZXMoKSxlLnkyQXhpc1RpY2tWYWx1ZXM9ZS5heGlzLmdldFkyQXhpc1RpY2tWYWx1ZXMoKSxlLnhBeGlzPWUuYXhpcy5nZXRYQXhpcyhlLngsZS54T3JpZW50LGUueEF4aXNUaWNrRm9ybWF0LGUueEF4aXNUaWNrVmFsdWVzLHQuYXhpc194X3RpY2tfb3V0ZXIpLGUuc3ViWEF4aXM9ZS5heGlzLmdldFhBeGlzKGUuc3ViWCxlLnN1YlhPcmllbnQsZS54QXhpc1RpY2tGb3JtYXQsZS54QXhpc1RpY2tWYWx1ZXMsdC5heGlzX3hfdGlja19vdXRlciksZS55QXhpcz1lLmF4aXMuZ2V0WUF4aXMoZS55LGUueU9yaWVudCx0LmF4aXNfeV90aWNrX2Zvcm1hdCxlLnlBeGlzVGlja1ZhbHVlcyx0LmF4aXNfeV90aWNrX291dGVyKSxlLnkyQXhpcz1lLmF4aXMuZ2V0WUF4aXMoZS55MixlLnkyT3JpZW50LHQuYXhpc195Ml90aWNrX2Zvcm1hdCxlLnkyQXhpc1RpY2tWYWx1ZXMsdC5heGlzX3kyX3RpY2tfb3V0ZXIpLG58fChlLmJydXNoJiZlLmJydXNoLnNjYWxlKGUuc3ViWCksdC56b29tX2VuYWJsZWQmJmUuem9vbS5zY2FsZShlLngpKSxlLnVwZGF0ZUFyYyYmZS51cGRhdGVBcmMoKX0seC5zZWxlY3RQb2ludD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPXIuY29uZmlnLHM9KG8uYXhpc19yb3RhdGVkP3IuY2lyY2xlWTpyLmNpcmNsZVgpLmJpbmQociksaT0oby5heGlzX3JvdGF0ZWQ/ci5jaXJjbGVYOnIuY2lyY2xlWSkuYmluZChyKSxsPXIucG9pbnRTZWxlY3RSLmJpbmQocik7by5kYXRhX29uc2VsZWN0ZWQuY2FsbChyLmFwaSx0LGUubm9kZSgpKSxyLm1haW4uc2VsZWN0KCIuIithLnNlbGVjdGVkQ2lyY2xlcytyLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KHQuaWQpKS5zZWxlY3RBbGwoIi4iK2Euc2VsZWN0ZWRDaXJjbGUrIi0iK24pLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2VuZXJhdGVDbGFzcyhhLnNlbGVjdGVkQ2lyY2xlLG4pfSkuYXR0cigiY3giLHMpLmF0dHIoImN5IixpKS5hdHRyKCJzdHJva2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY29sb3IodCl9KS5hdHRyKCJyIixmdW5jdGlvbihlKXtyZXR1cm4gMS40KnIucG9pbnRTZWxlY3RSKGUpfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuYXR0cigiciIsbCl9LHgudW5zZWxlY3RQb2ludD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztyLmNvbmZpZy5kYXRhX29udW5zZWxlY3RlZC5jYWxsKHIuYXBpLHQsZS5ub2RlKCkpLHIubWFpbi5zZWxlY3QoIi4iK2Euc2VsZWN0ZWRDaXJjbGVzK3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodC5pZCkpLnNlbGVjdEFsbCgiLiIrYS5zZWxlY3RlZENpcmNsZSsiLSIrbikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuYXR0cigiciIsMCkucmVtb3ZlKCl9LHgudG9nZ2xlUG9pbnQ9ZnVuY3Rpb24oZSx0LG4scil7ZT90aGlzLnNlbGVjdFBvaW50KHQsbixyKTp0aGlzLnVuc2VsZWN0UG9pbnQodCxuLHIpfSx4LnNlbGVjdFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uY29uZmlnLmRhdGFfb25zZWxlY3RlZC5jYWxsKG4sdCxlLm5vZGUoKSksbi5jb25maWcuaW50ZXJhY3Rpb25fYnJpZ2h0ZW4mJmUudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIG4uZDMucmdiKG4uY29sb3IodCkpLmJyaWdodGVyKC43NSl9KX0seC51bnNlbGVjdFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uY29uZmlnLmRhdGFfb251bnNlbGVjdGVkLmNhbGwobix0LGUubm9kZSgpKSxuLmNvbmZpZy5pbnRlcmFjdGlvbl9icmlnaHRlbiYmZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gbi5jb2xvcih0KX0pfSx4LnRvZ2dsZVBhdGg9ZnVuY3Rpb24oZSx0LG4scil7ZT90aGlzLnNlbGVjdFBhdGgodCxuLHIpOnRoaXMudW5zZWxlY3RQYXRoKHQsbixyKX0seC5nZXRUb2dnbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXM7cmV0dXJuImNpcmNsZSI9PT1lLm5vZGVOYW1lP249ci5pc1N0ZXBUeXBlKHQpP2Z1bmN0aW9uKCl7fTpyLnRvZ2dsZVBvaW50OiJwYXRoIj09PWUubm9kZU5hbWUmJihuPXIudG9nZ2xlUGF0aCksbn0seC50b2dnbGVTaGFwZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPXIuZDMscz1yLmNvbmZpZyxpPW8uc2VsZWN0KGUpLGw9aS5jbGFzc2VkKGEuU0VMRUNURUQpLHU9ci5nZXRUb2dnbGUoZSx0KS5iaW5kKHIpO3MuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmcy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUodCkmJihzLmRhdGFfc2VsZWN0aW9uX211bHRpcGxlfHxyLm1haW4uc2VsZWN0QWxsKCIuIithLnNoYXBlcysocy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkP3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodC5pZCk6IiIpKS5zZWxlY3RBbGwoIi4iK2Euc2hhcGUpLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKTtuLmNsYXNzZWQoYS5TRUxFQ1RFRCkmJnUoITEsbi5jbGFzc2VkKGEuU0VMRUNURUQsITEpLGUsdCl9KSxpLmNsYXNzZWQoYS5TRUxFQ1RFRCwhbCksdSghbCxpLHQsbikpfSx4LmluaXRCYXI9ZnVuY3Rpb24oKXt0aGlzLm1haW4uc2VsZWN0KCIuIithLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS5jaGFydEJhcnMpfSx4LnVwZGF0ZVRhcmdldHNGb3JCYXI9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMsbz1yLmNvbmZpZyxzPXIuY2xhc3NDaGFydEJhci5iaW5kKHIpLGk9ci5jbGFzc0JhcnMuYmluZChyKSxsPXIuY2xhc3NGb2N1cy5iaW5kKHIpO3Q9ci5tYWluLnNlbGVjdCgiLiIrYS5jaGFydEJhcnMpLnNlbGVjdEFsbCgiLiIrYS5jaGFydEJhcikuZGF0YShlKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkrbChlKX0pLG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsaSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oZSl7cmV0dXJuIG8uZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGUpPyJwb2ludGVyIjpudWxsfSl9LHgudXBkYXRlQmFyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmJhckRhdGEuYmluZCh0KSxyPXQuY2xhc3NCYXIuYmluZCh0KSxvPXQuaW5pdGlhbE9wYWNpdHkuYmluZCh0KSxzPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbG9yKGUuaWQpfTt0Lm1haW5CYXI9dC5tYWluLnNlbGVjdEFsbCgiLiIrYS5iYXJzKS5zZWxlY3RBbGwoIi4iK2EuYmFyKS5kYXRhKG4pLHQubWFpbkJhci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixyKS5zdHlsZSgic3Ryb2tlIixzKS5zdHlsZSgiZmlsbCIscyksdC5tYWluQmFyLnN0eWxlKCJvcGFjaXR5IixvKSx0Lm1haW5CYXIuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlKS5yZW1vdmUoKX0seC5yZWRyYXdCYXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bKHQ/dGhpcy5tYWluQmFyLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKTp0aGlzLm1haW5CYXIpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLHRoaXMuY29sb3IpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsMSldfSx4LmdldEJhclc9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcsbz0ibnVtYmVyIj09dHlwZW9mIHIuYmFyX3dpZHRoP3IuYmFyX3dpZHRoOnQ/ZS50aWNrSW50ZXJ2YWwoKSpyLmJhcl93aWR0aF9yYXRpby90OjA7cmV0dXJuIHIuYmFyX3dpZHRoX21heCYmbz5yLmJhcl93aWR0aF9tYXg/ci5iYXJfd2lkdGhfbWF4Om99LHguZ2V0QmFycz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuKHQ/bi5tYWluLnNlbGVjdEFsbCgiLiIrYS5iYXJzK24uZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodCkpOm4ubWFpbikuc2VsZWN0QWxsKCIuIithLmJhcisoXyhlKT8iLSIrZToiIikpfSx4LmV4cGFuZEJhcnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7biYmci51bmV4cGFuZEJhcnMoKSxyLmdldEJhcnMoZSx0KS5jbGFzc2VkKGEuRVhQQU5ERUQsITApfSx4LnVuZXhwYW5kQmFycz1mdW5jdGlvbihlKXt0aGlzLmdldEJhcnMoZSkuY2xhc3NlZChhLkVYUEFOREVELCExKX0seC5nZW5lcmF0ZURyYXdCYXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcsbz1uLmdlbmVyYXRlR2V0QmFyUG9pbnRzKGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49byhlLHQpLHM9ci5heGlzX3JvdGF0ZWQ/MTowLGk9ci5heGlzX3JvdGF0ZWQ/MDoxO3JldHVybiJNICIrblswXVtzXSsiLCIrblswXVtpXSsiIEwiK25bMV1bc10rIiwiK25bMV1baV0rIiBMIituWzJdW3NdKyIsIituWzJdW2ldKyIgTCIrblszXVtzXSsiLCIrblszXVtpXSsiIHoifX0seC5nZW5lcmF0ZUdldEJhclBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10P24uc3ViWEF4aXM6bi54QXhpcyxvPWUuX19tYXhfXysxLHM9bi5nZXRCYXJXKHIsbyksaT1uLmdldFNoYXBlWChzLG8sZSwhIXQpLGE9bi5nZXRTaGFwZVkoISF0KSxsPW4uZ2V0U2hhcGVPZmZzZXQobi5pc0JhclR5cGUsZSwhIXQpLHU9cyoobi5jb25maWcuYmFyX3NwYWNlLzIpLGM9dD9uLmdldFN1YllTY2FsZTpuLmdldFlTY2FsZTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1jLmNhbGwobixlLmlkKSgwKSxvPWwoZSx0KXx8cixkPWkoZSksXz1hKGUpO3JldHVybiBuLmNvbmZpZy5heGlzX3JvdGF0ZWQmJigwPGUudmFsdWUmJl88cnx8ZS52YWx1ZTwwJiZyPF8pJiYoXz1yKSxbW2QrdSxvXSxbZCt1LF8tKHItbyldLFtkK3MtdSxfLShyLW8pXSxbZCtzLXUsb11dfX0seC5pc1dpdGhpbkJhcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmQzLm1vdXNlKGUpLG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWUucGF0aFNlZ0xpc3QuZ2V0SXRlbSgwKSxvPWUucGF0aFNlZ0xpc3QuZ2V0SXRlbSgxKSxzPU1hdGgubWluKHIueCxvLngpLGk9TWF0aC5taW4oci55LG8ueSksYT1uLndpZHRoLGw9bi5oZWlnaHQsdT1zLTIsYz1zK2ErMixkPWkrbCsyLF89aS0yO3JldHVybiB1PHRbMF0mJnRbMF08YyYmXzx0WzFdJiZ0WzFdPGR9LHguZ2V0U2hhcGVJbmRpY2VzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLG89ci5jb25maWcscz17fSxpPTA7cmV0dXJuIHIuZmlsdGVyVGFyZ2V0c1RvU2hvdyhyLmRhdGEudGFyZ2V0cy5maWx0ZXIoZSxyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodD0wO3Q8by5kYXRhX2dyb3Vwcy5sZW5ndGg7dCsrKWlmKCEoby5kYXRhX2dyb3Vwc1t0XS5pbmRleE9mKGUuaWQpPDApKWZvcihuPTA7bjxvLmRhdGFfZ3JvdXBzW3RdLmxlbmd0aDtuKyspaWYoby5kYXRhX2dyb3Vwc1t0XVtuXWluIHMpe3NbZS5pZF09c1tvLmRhdGFfZ3JvdXBzW3RdW25dXTticmVha31oKHNbZS5pZF0pJiYoc1tlLmlkXT1pKyspfSkscy5fX21heF9fPWktMSxzfSx4LmdldFNoYXBlWD1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLHM9cj9vLnN1Ylg6by54O3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1yLmlkIGluIG4/bltyLmlkXTowO3JldHVybiByLnh8fDA9PT1yLng/cyhyLngpLWUqKHQvMi1vKTowfX0seC5nZXRTaGFwZVk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuKGU/dC5nZXRTdWJZU2NhbGUobi5pZCk6dC5nZXRZU2NhbGUobi5pZCkpKG4udmFsdWUpfX0seC5nZXRTaGFwZU9mZnNldD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPXIub3JkZXJUYXJnZXRzKHIuZmlsdGVyVGFyZ2V0c1RvU2hvdyhyLmRhdGEudGFyZ2V0cy5maWx0ZXIoZSxyKSkpLHM9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KTtyZXR1cm4gZnVuY3Rpb24oZSxpKXt2YXIgYT1uP3IuZ2V0U3ViWVNjYWxlKGUuaWQpOnIuZ2V0WVNjYWxlKGUuaWQpLGw9YSgwKSx1PWw7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz1yLmlzU3RlcFR5cGUoZSk/ci5jb252ZXJ0VmFsdWVzVG9TdGVwKG4udmFsdWVzKTpuLnZhbHVlcztuLmlkIT09ZS5pZCYmdFtuLmlkXT09PXRbZS5pZF0mJnMuaW5kZXhPZihuLmlkKTxzLmluZGV4T2YoZS5pZCkmJih2b2lkIDAhPT1vW2ldJiYrb1tpXS54PT0rZS54fHwoaT0tMSxvLmZvckVhY2goZnVuY3Rpb24odCxuKXt0Lng9PT1lLngmJihpPW4pfSkpLGkgaW4gbyYmb1tpXS52YWx1ZSplLnZhbHVlPj0wJiYodSs9YShvW2ldLnZhbHVlKS1sKSl9KSx1fX0seC5pc1dpdGhpblNoYXBlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLG89ci5kMy5zZWxlY3QoZSk7cmV0dXJuIHIuaXNUYXJnZXRUb1Nob3codC5pZCk/ImNpcmNsZSI9PT1lLm5vZGVOYW1lP249ci5pc1N0ZXBUeXBlKHQpP3IuaXNXaXRoaW5TdGVwKGUsci5nZXRZU2NhbGUodC5pZCkodC52YWx1ZSkpOnIuaXNXaXRoaW5DaXJjbGUoZSwxLjUqci5wb2ludFNlbGVjdFIodCkpOiJwYXRoIj09PWUubm9kZU5hbWUmJihuPSFvLmNsYXNzZWQoYS5iYXIpfHxyLmlzV2l0aGluQmFyKGUpKTpuPSExLG59LHguZ2V0SW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuaXNJbnRlcnBvbGF0aW9uVHlwZSh0LmNvbmZpZy5zcGxpbmVfaW50ZXJwb2xhdGlvbl90eXBlKT90LmNvbmZpZy5zcGxpbmVfaW50ZXJwb2xhdGlvbl90eXBlOiJjYXJkaW5hbCI7cmV0dXJuIHQuaXNTcGxpbmVUeXBlKGUpP246dC5pc1N0ZXBUeXBlKGUpP3QuY29uZmlnLmxpbmVfc3RlcF90eXBlOiJsaW5lYXIifSx4LmluaXRMaW5lPWZ1bmN0aW9uKCl7dGhpcy5tYWluLnNlbGVjdCgiLiIrYS5jaGFydCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEuY2hhcnRMaW5lcyl9LHgudXBkYXRlVGFyZ2V0c0ZvckxpbmU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMsbz1yLmNvbmZpZyxzPXIuY2xhc3NDaGFydExpbmUuYmluZChyKSxpPXIuY2xhc3NMaW5lcy5iaW5kKHIpLGw9ci5jbGFzc0FyZWFzLmJpbmQociksdT1yLmNsYXNzQ2lyY2xlcy5iaW5kKHIpLGM9ci5jbGFzc0ZvY3VzLmJpbmQocik7dD1yLm1haW4uc2VsZWN0KCIuIithLmNoYXJ0TGluZXMpLnNlbGVjdEFsbCgiLiIrYS5jaGFydExpbmUpLmRhdGEoZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUpe3JldHVybiBzKGUpK2MoZSl9KSxuPXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIscykuc3R5bGUoIm9wYWNpdHkiLDApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixpKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlKXtyZXR1cm4gci5nZW5lcmF0ZUNsYXNzKGEuc2VsZWN0ZWRDaXJjbGVzLGUuaWQpfSksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsdSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oZSl7cmV0dXJuIG8uZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGUpPyJwb2ludGVyIjpudWxsfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IubWFpbi5zZWxlY3RBbGwoIi4iK2Euc2VsZWN0ZWRDaXJjbGVzK3IuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoZS5pZCkpLnNlbGVjdEFsbCgiLiIrYS5zZWxlY3RlZENpcmNsZSkuZWFjaChmdW5jdGlvbih0KXt0LnZhbHVlPWUudmFsdWVzW3QuaW5kZXhdLnZhbHVlfSl9KX0seC51cGRhdGVMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5tYWluTGluZT10Lm1haW4uc2VsZWN0QWxsKCIuIithLmxpbmVzKS5zZWxlY3RBbGwoIi4iK2EubGluZSkuZGF0YSh0LmxpbmVEYXRhLmJpbmQodCkpLHQubWFpbkxpbmUuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsdC5jbGFzc0xpbmUuYmluZCh0KSkuc3R5bGUoInN0cm9rZSIsdC5jb2xvciksdC5tYWluTGluZS5zdHlsZSgib3BhY2l0eSIsdC5pbml0aWFsT3BhY2l0eS5iaW5kKHQpKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIixmdW5jdGlvbihlKXtyZXR1cm4gdC5pc1N0ZXBUeXBlKGUpPyJjcmlzcEVkZ2VzIjoiIn0pLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5tYWluTGluZS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0seC5yZWRyYXdMaW5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuWyh0P3RoaXMubWFpbkxpbmUudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpOnRoaXMubWFpbkxpbmUpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLHRoaXMuY29sb3IpLnN0eWxlKCJvcGFjaXR5IiwxKV19LHguZ2VuZXJhdGVEcmF3TGluZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPW4uZDMuc3ZnLmxpbmUoKSxzPW4uZ2VuZXJhdGVHZXRMaW5lUG9pbnRzKGUsdCksaT10P24uZ2V0U3ViWVNjYWxlOm4uZ2V0WVNjYWxlLGE9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ/bi5zdWJ4eDpuLnh4KS5jYWxsKG4sZSl9LGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kYXRhX2dyb3Vwcy5sZW5ndGg+MD9zKGUsdClbMF1bMV06aS5jYWxsKG4sZS5pZCkoZS52YWx1ZSl9O3JldHVybiBvPXIuYXhpc19yb3RhdGVkP28ueChsKS55KGEpOm8ueChhKS55KGwpLHIubGluZV9jb25uZWN0TnVsbHx8KG89by5kZWZpbmVkKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lLnZhbHVlfSkpLGZ1bmN0aW9uKGUpe3ZhciBzLGE9ci5saW5lX2Nvbm5lY3ROdWxsP24uZmlsdGVyUmVtb3ZlTnVsbChlLnZhbHVlcyk6ZS52YWx1ZXMsbD10P24ueDpuLnN1YlgsdT1pLmNhbGwobixlLmlkKSxjPTAsZD0wO3JldHVybiBuLmlzTGluZVR5cGUoZSk/ci5kYXRhX3JlZ2lvbnNbZS5pZF0/cz1uLmxpbmVXaXRoUmVnaW9ucyhhLGwsdSxyLmRhdGFfcmVnaW9uc1tlLmlkXSk6KG4uaXNTdGVwVHlwZShlKSYmKGE9bi5jb252ZXJ0VmFsdWVzVG9TdGVwKGEpKSxzPW8uaW50ZXJwb2xhdGUobi5nZXRJbnRlcnBvbGF0ZShlKSkoYSkpOihhWzBdJiYoYz1sKGFbMF0ueCksZD11KGFbMF0udmFsdWUpKSxzPXIuYXhpc19yb3RhdGVkPyJNICIrZCsiICIrYzoiTSAiK2MrIiAiK2QpLHN8fCJNIDAgMCJ9fSx4LmdlbmVyYXRlR2V0TGluZVBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbmZpZyxvPWUuX19tYXhfXysxLHM9bi5nZXRTaGFwZVgoMCxvLGUsISF0KSxpPW4uZ2V0U2hhcGVZKCEhdCksYT1uLmdldFNoYXBlT2Zmc2V0KG4uaXNMaW5lVHlwZSxlLCEhdCksbD10P24uZ2V0U3ViWVNjYWxlOm4uZ2V0WVNjYWxlO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBvPWwuY2FsbChuLGUuaWQpKDApLHU9YShlLHQpfHxvLGM9cyhlKSxkPWkoZSk7cmV0dXJuIHIuYXhpc19yb3RhdGVkJiYoMDxlLnZhbHVlJiZkPG98fGUudmFsdWU8MCYmbzxkKSYmKGQ9byksW1tjLGQtKG8tdSldLFtjLGQtKG8tdSldLFtjLGQtKG8tdSldLFtjLGQtKG8tdSldXX19LHgubGluZVdpdGhSZWdpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIk0iK2VbMF1bMF0rIiAiK2VbMF1bMV0rIiAiK2VbMV1bMF0rIiAiK2VbMV1bMV19dmFyIHMsaSxhLGwsdSxjLGQsXyxwLGYsbSxiLEU9dGhpcyx5PUUuY29uZmlnLHY9Ik0iLFQ9RS5pc0NhdGVnb3JpemVkKCk/LjU6MCxBPVtdO2lmKGcocikpZm9yKHM9MDtzPHIubGVuZ3RoO3MrKylBW3NdPXt9LGgocltzXS5zdGFydCk/QVtzXS5zdGFydD1lWzBdLng6QVtzXS5zdGFydD1FLmlzVGltZVNlcmllcygpP0UucGFyc2VEYXRlKHJbc10uc3RhcnQpOnJbc10uc3RhcnQsaChyW3NdLmVuZCk/QVtzXS5lbmQ9ZVtlLmxlbmd0aC0xXS54OkFbc10uZW5kPUUuaXNUaW1lU2VyaWVzKCk/RS5wYXJzZURhdGUocltzXS5lbmQpOnJbc10uZW5kO2ZvcihtPXkuYXhpc19yb3RhdGVkP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUudmFsdWUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdChlLngpfSxiPXkuYXhpc19yb3RhdGVkP2Z1bmN0aW9uKGUpe3JldHVybiB0KGUueCl9OmZ1bmN0aW9uKGUpe3JldHVybiBuKGUudmFsdWUpfSxhPUUuaXNUaW1lU2VyaWVzKCk/ZnVuY3Rpb24oZSxyLHMsaSl7dmFyIGEsbD1lLnguZ2V0VGltZSgpLGM9ci54LWUueCxkPW5ldyBEYXRlKGwrYypzKSxfPW5ldyBEYXRlKGwrYyoocytpKSk7cmV0dXJuIGE9eS5heGlzX3JvdGF0ZWQ/W1tuKHUocykpLHQoZCldLFtuKHUocytpKSksdChfKV1dOltbdChkKSxuKHUocykpXSxbdChfKSxuKHUocytpKSldXSxvKGEpfTpmdW5jdGlvbihlLHIscyxpKXt2YXIgYTtyZXR1cm4gYT15LmF4aXNfcm90YXRlZD9bW24odShzKSwhMCksdChsKHMpKV0sW24odShzK2kpLCEwKSx0KGwocytpKSldXTpbW3QobChzKSwhMCksbih1KHMpKV0sW3QobChzK2kpLCEwKSxuKHUocytpKSldXSxvKGEpfSxzPTA7czxlLmxlbmd0aDtzKyspe2lmKGgoQSl8fCFmdW5jdGlvbihlLHQpe3ZhciBuO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5zdGFydDxlJiZlPD10W25dLmVuZClyZXR1cm4hMDtyZXR1cm4hMX0oZVtzXS54LEEpKXYrPSIgIittKGVbc10pKyIgIitiKGVbc10pO2Vsc2UgZm9yKGw9RS5nZXRTY2FsZShlW3MtMV0ueCtULGVbc10ueCtULEUuaXNUaW1lU2VyaWVzKCkpLHU9RS5nZXRTY2FsZShlW3MtMV0udmFsdWUsZVtzXS52YWx1ZSksYz10KGVbc10ueCktdChlW3MtMV0ueCksZD1uKGVbc10udmFsdWUpLW4oZVtzLTFdLnZhbHVlKSxfPU1hdGguc3FydChNYXRoLnBvdyhjLDIpK01hdGgucG93KGQsMikpLHA9Mi9fLGY9MipwLGk9cDtpPD0xO2krPWYpdis9YShlW3MtMV0sZVtzXSxpLHApO2Vbc10ueH1yZXR1cm4gdn0seC51cGRhdGVBcmVhPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmQzO3QubWFpbkFyZWE9dC5tYWluLnNlbGVjdEFsbCgiLiIrYS5hcmVhcykuc2VsZWN0QWxsKCIuIithLmFyZWEpLmRhdGEodC5saW5lRGF0YS5iaW5kKHQpKSx0Lm1haW5BcmVhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLHQuY2xhc3NBcmVhLmJpbmQodCkpLnN0eWxlKCJmaWxsIix0LmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4gdC5vcmdBcmVhT3BhY2l0eT0rbi5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKSwwfSksdC5tYWluQXJlYS5zdHlsZSgib3BhY2l0eSIsdC5vcmdBcmVhT3BhY2l0eSksdC5tYWluQXJlYS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0seC5yZWRyYXdBcmVhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuWyh0P3RoaXMubWFpbkFyZWEudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpOnRoaXMubWFpbkFyZWEpLmF0dHIoImQiLGUpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsdGhpcy5vcmdBcmVhT3BhY2l0eSldfSx4LmdlbmVyYXRlRHJhd0FyZWE9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcsbz1uLmQzLnN2Zy5hcmVhKCkscz1uLmdlbmVyYXRlR2V0QXJlYVBvaW50cyhlLHQpLGk9dD9uLmdldFN1YllTY2FsZTpuLmdldFlTY2FsZSxhPWZ1bmN0aW9uKGUpe3JldHVybih0P24uc3VieHg6bi54eCkuY2FsbChuLGUpfSxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGF0YV9ncm91cHMubGVuZ3RoPjA/cyhlLHQpWzBdWzFdOmkuY2FsbChuLGUuaWQpKG4uZ2V0QXJlYUJhc2VWYWx1ZShlLmlkKSl9LHU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kYXRhX2dyb3Vwcy5sZW5ndGg+MD9zKGUsdClbMV1bMV06aS5jYWxsKG4sZS5pZCkoZS52YWx1ZSl9O3JldHVybiBvPXIuYXhpc19yb3RhdGVkP28ueDAobCkueDEodSkueShhKTpvLngoYSkueTAoci5hcmVhX2Fib3ZlPzA6bCkueTEodSksci5saW5lX2Nvbm5lY3ROdWxsfHwobz1vLmRlZmluZWQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lLnZhbHVlfSkpLGZ1bmN0aW9uKGUpe3ZhciB0LHM9ci5saW5lX2Nvbm5lY3ROdWxsP24uZmlsdGVyUmVtb3ZlTnVsbChlLnZhbHVlcyk6ZS52YWx1ZXMsaT0wLGE9MDtyZXR1cm4gbi5pc0FyZWFUeXBlKGUpPyhuLmlzU3RlcFR5cGUoZSkmJihzPW4uY29udmVydFZhbHVlc1RvU3RlcChzKSksdD1vLmludGVycG9sYXRlKG4uZ2V0SW50ZXJwb2xhdGUoZSkpKHMpKTooc1swXSYmKGk9bi54KHNbMF0ueCksYT1uLmdldFlTY2FsZShlLmlkKShzWzBdLnZhbHVlKSksdD1yLmF4aXNfcm90YXRlZD8iTSAiK2ErIiAiK2k6Ik0gIitpKyIgIithKSx0fHwiTSAwIDAifX0seC5nZXRBcmVhQmFzZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHguZ2VuZXJhdGVHZXRBcmVhUG9pbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY29uZmlnLG89ZS5fX21heF9fKzEscz1uLmdldFNoYXBlWCgwLG8sZSwhIXQpLGk9bi5nZXRTaGFwZVkoISF0KSxhPW4uZ2V0U2hhcGVPZmZzZXQobi5pc0FyZWFUeXBlLGUsISF0KSxsPXQ/bi5nZXRTdWJZU2NhbGU6bi5nZXRZU2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG89bC5jYWxsKG4sZS5pZCkoMCksdT1hKGUsdCl8fG8sYz1zKGUpLGQ9aShlKTtyZXR1cm4gci5heGlzX3JvdGF0ZWQmJigwPGUudmFsdWUmJmQ8b3x8ZS52YWx1ZTwwJiZvPGQpJiYoZD1vKSxbW2MsdV0sW2MsZC0oby11KV0sW2MsZC0oby11KV0sW2MsdV1dfX0seC51cGRhdGVDaXJjbGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UubWFpbkNpcmNsZT1lLm1haW4uc2VsZWN0QWxsKCIuIithLmNpcmNsZXMpLnNlbGVjdEFsbCgiLiIrYS5jaXJjbGUpLmRhdGEoZS5saW5lT3JTY2F0dGVyRGF0YS5iaW5kKGUpKSxlLm1haW5DaXJjbGUuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIixlLmNsYXNzQ2lyY2xlLmJpbmQoZSkpLmF0dHIoInIiLGUucG9pbnRSLmJpbmQoZSkpLnN0eWxlKCJmaWxsIixlLmNvbG9yKSxlLm1haW5DaXJjbGUuc3R5bGUoIm9wYWNpdHkiLGUuaW5pdGlhbE9wYWNpdHlGb3JDaXJjbGUuYmluZChlKSksZS5tYWluQ2lyY2xlLmV4aXQoKS5yZW1vdmUoKX0seC5yZWRyYXdDaXJjbGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMubWFpbi5zZWxlY3RBbGwoIi4iK2Euc2VsZWN0ZWRDaXJjbGUpO3JldHVyblsobj90aGlzLm1haW5DaXJjbGUudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpOnRoaXMubWFpbkNpcmNsZSkuc3R5bGUoIm9wYWNpdHkiLHRoaXMub3BhY2l0eUZvckNpcmNsZS5iaW5kKHRoaXMpKS5zdHlsZSgiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigiY3giLGUpLmF0dHIoImN5Iix0KSwobj9yLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKTpyKS5hdHRyKCJjeCIsZSkuYXR0cigiY3kiLHQpXX0seC5jaXJjbGVYPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh8fDA9PT1lLng/dGhpcy54KGUueCk6bnVsbH0seC51cGRhdGVDaXJjbGVZPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPXRoaXM7bi5jb25maWcuZGF0YV9ncm91cHMubGVuZ3RoPjA/KGU9bi5nZXRTaGFwZUluZGljZXMobi5pc0xpbmVUeXBlKSx0PW4uZ2VuZXJhdGVHZXRMaW5lUG9pbnRzKGUpLG4uY2lyY2xlWT1mdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbilbMF1bMV19KTpuLmNpcmNsZVk9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0WVNjYWxlKGUuaWQpKGUudmFsdWUpfX0seC5nZXRDaXJjbGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4odD9uLm1haW4uc2VsZWN0QWxsKCIuIithLmNpcmNsZXMrbi5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeCh0KSk6bi5tYWluKS5zZWxlY3RBbGwoIi4iK2EuY2lyY2xlKyhfKGUpPyItIitlOiIiKSl9LHguZXhwYW5kQ2lyY2xlcz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPXIucG9pbnRFeHBhbmRlZFIuYmluZChyKTtuJiZyLnVuZXhwYW5kQ2lyY2xlcygpLHIuZ2V0Q2lyY2xlcyhlLHQpLmNsYXNzZWQoYS5FWFBBTkRFRCwhMCkuYXR0cigiciIsbyl9LHgudW5leHBhbmRDaXJjbGVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LnBvaW50Ui5iaW5kKHQpO3QuZ2V0Q2lyY2xlcyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChhLkVYUEFOREVEKX0pLmNsYXNzZWQoYS5FWFBBTkRFRCwhMSkuYXR0cigiciIsbil9LHgucG9pbnRSPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZztyZXR1cm4gdC5pc1N0ZXBUeXBlKGUpPzA6cChuLnBvaW50X3IpP24ucG9pbnRfcihlKTpuLnBvaW50X3J9LHgucG9pbnRFeHBhbmRlZFI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBuLnBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkP3Aobi5wb2ludF9mb2N1c19leHBhbmRfcik/bi5wb2ludF9mb2N1c19leHBhbmRfcihlKTpuLnBvaW50X2ZvY3VzX2V4cGFuZF9yP24ucG9pbnRfZm9jdXNfZXhwYW5kX3I6MS43NSp0LnBvaW50UihlKTp0LnBvaW50UihlKX0seC5wb2ludFNlbGVjdFI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBwKG4ucG9pbnRfc2VsZWN0X3IpP24ucG9pbnRfc2VsZWN0X3IoZSk6bi5wb2ludF9zZWxlY3Rfcj9uLnBvaW50X3NlbGVjdF9yOjQqdC5wb2ludFIoZSl9LHguaXNXaXRoaW5DaXJjbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmQzLHI9bi5tb3VzZShlKSxvPW4uc2VsZWN0KGUpLHM9K28uYXR0cigiY3giKSxpPStvLmF0dHIoImN5Iik7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhzLXJbMF0sMikrTWF0aC5wb3coaS1yWzFdLDIpKTx0fSx4LmlzV2l0aGluU3RlcD1mdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLmFicyh0LXRoaXMuZDMubW91c2UoZSlbMV0pPDMwfSx4LmdldEN1cnJlbnRXaWR0aD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZztyZXR1cm4gdC5zaXplX3dpZHRoP3Quc2l6ZV93aWR0aDplLmdldFBhcmVudFdpZHRoKCl9LHguZ2V0Q3VycmVudEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPXQuc2l6ZV9oZWlnaHQ/dC5zaXplX2hlaWdodDplLmdldFBhcmVudEhlaWdodCgpO3JldHVybiBuPjA/bjozMjAvKGUuaGFzVHlwZSgiZ2F1Z2UiKSYmIXQuZ2F1Z2VfZnVsbENpcmNsZT8yOjEpfSx4LmdldEN1cnJlbnRQYWRkaW5nVG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLG49Xyh0LnBhZGRpbmdfdG9wKT90LnBhZGRpbmdfdG9wOjA7cmV0dXJuIGUudGl0bGUmJmUudGl0bGUubm9kZSgpJiYobis9ZS5nZXRUaXRsZVBhZGRpbmcoKSksbn0seC5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uZmlnO3JldHVybiBfKGUucGFkZGluZ19ib3R0b20pP2UucGFkZGluZ19ib3R0b206MH0seC5nZXRDdXJyZW50UGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuY29uZmlnO3JldHVybiBfKG4ucGFkZGluZ19sZWZ0KT9uLnBhZGRpbmdfbGVmdDpuLmF4aXNfcm90YXRlZD8hbi5heGlzX3hfc2hvd3x8bi5heGlzX3hfaW5uZXI/MTpNYXRoLm1heChiKHQuZ2V0QXhpc1dpZHRoQnlBeGlzSWQoIngiLGUpKSw0MCk6IW4uYXhpc195X3Nob3d8fG4uYXhpc195X2lubmVyP3QuYXhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKS5pc091dGVyPzMwOjE6Yih0LmdldEF4aXNXaWR0aEJ5QXhpc0lkKCJ5IixlKSl9LHguZ2V0Q3VycmVudFBhZGRpbmdSaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNvbmZpZyxuPWUuaXNMZWdlbmRSaWdodD9lLmdldExlZ2VuZFdpZHRoKCkrMjA6MDtyZXR1cm4gXyh0LnBhZGRpbmdfcmlnaHQpP3QucGFkZGluZ19yaWdodCsxOnQuYXhpc19yb3RhdGVkPzEwK246IXQuYXhpc195Ml9zaG93fHx0LmF4aXNfeTJfaW5uZXI/MituKyhlLmF4aXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpLmlzT3V0ZXI/MjA6MCk6YihlLmdldEF4aXNXaWR0aEJ5QXhpc0lkKCJ5MiIpKStufSx4LmdldFBhcmVudFJlY3RWYWx1ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzLnNlbGVjdENoYXJ0Lm5vZGUoKTtuJiYiQk9EWSIhPT1uLnRhZ05hbWU7KXt0cnl7dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfWNhdGNoKHIpeyJ3aWR0aCI9PT1lJiYodD1uLm9mZnNldFdpZHRoKX1pZih0KWJyZWFrO249bi5wYXJlbnROb2RlfXJldHVybiB0fSx4LmdldFBhcmVudFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVjdFZhbHVlKCJ3aWR0aCIpfSx4LmdldFBhcmVudEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0Q2hhcnQuc3R5bGUoImhlaWdodCIpO3JldHVybiBlLmluZGV4T2YoInB4Iik+MD8rZS5yZXBsYWNlKCJweCIsIiIpOjB9LHguZ2V0U3ZnTGVmdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj1uLmF4aXNfcm90YXRlZHx8IW4uYXhpc19yb3RhdGVkJiYhbi5heGlzX3lfaW5uZXIsbz1uLmF4aXNfcm90YXRlZD9hLmF4aXNYOmEuYXhpc1kscz10Lm1haW4uc2VsZWN0KCIuIitvKS5ub2RlKCksaT1zJiZyP3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3JpZ2h0OjB9LGw9dC5zZWxlY3RDaGFydC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT10Lmhhc0FyY1R5cGUoKSxjPWkucmlnaHQtbC5sZWZ0LSh1PzA6dC5nZXRDdXJyZW50UGFkZGluZ0xlZnQoZSkpO3JldHVybiBjPjA/YzowfSx4LmdldEF4aXNXaWR0aEJ5QXhpc0lkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uYXhpcy5nZXRMYWJlbFBvc2l0aW9uQnlJZChlKTtyZXR1cm4gbi5heGlzLmdldE1heFRpY2tXaWR0aChlLHQpKyhyLmlzSW5uZXI/MjA6NDApfSx4LmdldEhvcml6b250YWxBeGlzSGVpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmNvbmZpZyxyPTMwO3JldHVybiJ4IiE9PWV8fG4uYXhpc194X3Nob3c/IngiPT09ZSYmbi5heGlzX3hfaGVpZ2h0P24uYXhpc194X2hlaWdodDoieSIhPT1lfHxuLmF4aXNfeV9zaG93PyJ5MiIhPT1lfHxuLmF4aXNfeTJfc2hvdz8oIngiPT09ZSYmIW4uYXhpc19yb3RhdGVkJiZuLmF4aXNfeF90aWNrX3JvdGF0ZSYmKHI9MzArdC5heGlzLmdldE1heFRpY2tXaWR0aChlKSpNYXRoLmNvcyhNYXRoLlBJKig5MC1uLmF4aXNfeF90aWNrX3JvdGF0ZSkvMTgwKSksInkiPT09ZSYmbi5heGlzX3JvdGF0ZWQmJm4uYXhpc195X3RpY2tfcm90YXRlJiYocj0zMCt0LmF4aXMuZ2V0TWF4VGlja1dpZHRoKGUpKk1hdGguY29zKE1hdGguUEkqKDkwLW4uYXhpc195X3RpY2tfcm90YXRlKS8xODApKSxyKyh0LmF4aXMuZ2V0TGFiZWxQb3NpdGlvbkJ5SWQoZSkuaXNJbm5lcj8wOjEwKSsoInkyIj09PWU/LTEwOjApKTp0LnJvdGF0ZWRfcGFkZGluZ190b3A6IW4ubGVnZW5kX3Nob3d8fHQuaXNMZWdlbmRSaWdodHx8dC5pc0xlZ2VuZEluc2V0PzE6MTA6OH0seC5nZXRFdmVudFJlY3RXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCgwLHRoaXMueEF4aXMudGlja0ludGVydmFsKCkpfSx4LmluaXRCcnVzaD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmQzO2UuYnJ1c2g9dC5zdmcuYnJ1c2goKS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7ZS5yZWRyYXdGb3JCcnVzaCgpfSksZS5icnVzaC51cGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5jb250ZXh0JiZlLmNvbnRleHQuc2VsZWN0KCIuIithLmJydXNoKS5jYWxsKHRoaXMpLHRoaXN9LGUuYnJ1c2guc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY29uZmlnLmF4aXNfcm90YXRlZD90aGlzLnkodCk6dGhpcy54KHQpfX0seC5pbml0U3ViY2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmNvbnRleHQ9ZS5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgiY29udGV4dCIpKSxyPXQuc3ViY2hhcnRfc2hvdz8idmlzaWJsZSI6ImhpZGRlbiI7bi5zdHlsZSgidmlzaWJpbGl0eSIsciksbi5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGUuY2xpcFBhdGhGb3JTdWJjaGFydCkuYXR0cigiY2xhc3MiLGEuY2hhcnQpLG4uc2VsZWN0KCIuIithLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS5jaGFydEJhcnMpLG4uc2VsZWN0KCIuIithLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS5jaGFydExpbmVzKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZS5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLGEuYnJ1c2gpLmNhbGwoZS5icnVzaCksZS5heGVzLnN1Yng9bi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsYS5heGlzWCkuYXR0cigidHJhbnNmb3JtIixlLmdldFRyYW5zbGF0ZSgic3VieCIpKS5hdHRyKCJjbGlwLXBhdGgiLHQuYXhpc19yb3RhdGVkPyIiOmUuY2xpcFBhdGhGb3JYQXhpcykuc3R5bGUoInZpc2liaWxpdHkiLHQuc3ViY2hhcnRfYXhpc194X3Nob3c/cjoiaGlkZGVuIil9LHgudXBkYXRlVGFyZ2V0c0ZvclN1YmNoYXJ0PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHM9dGhpcyxpPXMuY29udGV4dCxsPXMuY29uZmlnLHU9cy5jbGFzc0NoYXJ0QmFyLmJpbmQocyksYz1zLmNsYXNzQmFycy5iaW5kKHMpLGQ9cy5jbGFzc0NoYXJ0TGluZS5iaW5kKHMpLF89cy5jbGFzc0xpbmVzLmJpbmQocykscD1zLmNsYXNzQXJlYXMuYmluZChzKTtsLnN1YmNoYXJ0X3Nob3cmJihvPWkuc2VsZWN0KCIuIithLmNoYXJ0QmFycykuc2VsZWN0QWxsKCIuIithLmNoYXJ0QmFyKS5kYXRhKGUpLmF0dHIoImNsYXNzIix1KSxyPW8uZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiY2xhc3MiLHUpLHIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGMpLG49aS5zZWxlY3QoIi4iK2EuY2hhcnRMaW5lcykuc2VsZWN0QWxsKCIuIithLmNoYXJ0TGluZSkuZGF0YShlKS5hdHRyKCJjbGFzcyIsZCksdD1uLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImNsYXNzIixkKSx0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixfKSx0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixwKSxpLnNlbGVjdEFsbCgiLiIrYS5icnVzaCsiIHJlY3QiKS5hdHRyKGwuYXhpc19yb3RhdGVkPyJ3aWR0aCI6ImhlaWdodCIsbC5heGlzX3JvdGF0ZWQ/cy53aWR0aDI6cy5oZWlnaHQyKSl9LHgudXBkYXRlQmFyRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0LmNvbnRleHRCYXI9dC5jb250ZXh0LnNlbGVjdEFsbCgiLiIrYS5iYXJzKS5zZWxlY3RBbGwoIi4iK2EuYmFyKS5kYXRhKHQuYmFyRGF0YS5iaW5kKHQpKSx0LmNvbnRleHRCYXIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsdC5jbGFzc0Jhci5iaW5kKHQpKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLnN0eWxlKCJmaWxsIix0LmNvbG9yKSx0LmNvbnRleHRCYXIuc3R5bGUoIm9wYWNpdHkiLHQuaW5pdGlhbE9wYWNpdHkuYmluZCh0KSksdC5jb250ZXh0QmFyLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfSx4LnJlZHJhd0JhckZvclN1YmNoYXJ0PWZ1bmN0aW9uKGUsdCxuKXsodD90aGlzLmNvbnRleHRCYXIudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpLmR1cmF0aW9uKG4pOnRoaXMuY29udGV4dEJhcikuYXR0cigiZCIsZSkuc3R5bGUoIm9wYWNpdHkiLDEpfSx4LnVwZGF0ZUxpbmVGb3JTdWJjaGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3QuY29udGV4dExpbmU9dC5jb250ZXh0LnNlbGVjdEFsbCgiLiIrYS5saW5lcykuc2VsZWN0QWxsKCIuIithLmxpbmUpLmRhdGEodC5saW5lRGF0YS5iaW5kKHQpKSx0LmNvbnRleHRMaW5lLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLHQuY2xhc3NMaW5lLmJpbmQodCkpLnN0eWxlKCJzdHJva2UiLHQuY29sb3IpLHQuY29udGV4dExpbmUuc3R5bGUoIm9wYWNpdHkiLHQuaW5pdGlhbE9wYWNpdHkuYmluZCh0KSksdC5jb250ZXh0TGluZS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0seC5yZWRyYXdMaW5lRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oZSx0LG4peyh0P3RoaXMuY29udGV4dExpbmUudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpLmR1cmF0aW9uKG4pOnRoaXMuY29udGV4dExpbmUpLmF0dHIoImQiLGUpLnN0eWxlKCJvcGFjaXR5IiwxKX0seC51cGRhdGVBcmVhRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuZDM7dC5jb250ZXh0QXJlYT10LmNvbnRleHQuc2VsZWN0QWxsKCIuIithLmFyZWFzKS5zZWxlY3RBbGwoIi4iK2EuYXJlYSkuZGF0YSh0LmxpbmVEYXRhLmJpbmQodCkpLHQuY29udGV4dEFyZWEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsdC5jbGFzc0FyZWEuYmluZCh0KSkuc3R5bGUoImZpbGwiLHQuY29sb3IpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Lm9yZ0FyZWFPcGFjaXR5PStuLnNlbGVjdCh0aGlzKS5zdHlsZSgib3BhY2l0eSIpLDB9KSx0LmNvbnRleHRBcmVhLnN0eWxlKCJvcGFjaXR5IiwwKSx0LmNvbnRleHRBcmVhLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfSx4LnJlZHJhd0FyZWFGb3JTdWJjaGFydD1mdW5jdGlvbihlLHQsbil7KHQ/dGhpcy5jb250ZXh0QXJlYS50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkuZHVyYXRpb24obik6dGhpcy5jb250ZXh0QXJlYSkuYXR0cigiZCIsZSkuc3R5bGUoImZpbGwiLHRoaXMuY29sb3IpLnN0eWxlKCJvcGFjaXR5Iix0aGlzLm9yZ0FyZWFPcGFjaXR5KX0seC5yZWRyYXdTdWJjaGFydD1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2YXIgYSxsLHUsYz10aGlzLGQ9Yy5kMyxfPWMuY29uZmlnO2MuY29udGV4dC5zdHlsZSgidmlzaWJpbGl0eSIsXy5zdWJjaGFydF9zaG93PyJ2aXNpYmxlIjoiaGlkZGVuIiksXy5zdWJjaGFydF9zaG93JiYoZC5ldmVudCYmInpvb20iPT09ZC5ldmVudC50eXBlJiZjLmJydXNoLmV4dGVudChjLngub3JnRG9tYWluKCkpLnVwZGF0ZSgpLGUmJihjLmJydXNoLmVtcHR5KCl8fGMuYnJ1c2guZXh0ZW50KGMueC5vcmdEb21haW4oKSkudXBkYXRlKCksYT1jLmdlbmVyYXRlRHJhd0FyZWEobywhMCksbD1jLmdlbmVyYXRlRHJhd0JhcihzLCEwKSx1PWMuZ2VuZXJhdGVEcmF3TGluZShpLCEwKSxjLnVwZGF0ZUJhckZvclN1YmNoYXJ0KG4pLGMudXBkYXRlTGluZUZvclN1YmNoYXJ0KG4pLGMudXBkYXRlQXJlYUZvclN1YmNoYXJ0KG4pLGMucmVkcmF3QmFyRm9yU3ViY2hhcnQobCxuLG4pLGMucmVkcmF3TGluZUZvclN1YmNoYXJ0KHUsbixuKSxjLnJlZHJhd0FyZWFGb3JTdWJjaGFydChhLG4sbikpKX0seC5yZWRyYXdGb3JCcnVzaD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLng7ZS5yZWRyYXcoe3dpdGhUcmFuc2l0aW9uOiExLHdpdGhZOmUuY29uZmlnLnpvb21fcmVzY2FsZSx3aXRoU3ViY2hhcnQ6ITEsd2l0aFVwZGF0ZVhEb21haW46ITAsd2l0aERpbWVuc2lvbjohMX0pLGUuY29uZmlnLnN1YmNoYXJ0X29uYnJ1c2guY2FsbChlLmFwaSx0Lm9yZ0RvbWFpbigpKX0seC50cmFuc2Zvcm1Db250ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzO3QmJnQuYXhpc1N1Ylg/bj10LmF4aXNTdWJYOihuPXIuY29udGV4dC5zZWxlY3QoIi4iK2EuYXhpc1gpLGUmJihuPW4udHJhbnNpdGlvbigpKSksci5jb250ZXh0LmF0dHIoInRyYW5zZm9ybSIsci5nZXRUcmFuc2xhdGUoImNvbnRleHQiKSksbi5hdHRyKCJ0cmFuc2Zvcm0iLHIuZ2V0VHJhbnNsYXRlKCJzdWJ4IikpfSx4LmdldERlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1wKHQuYXhpc194X2V4dGVudCk/dC5heGlzX3hfZXh0ZW50KGUuZ2V0WERvbWFpbihlLmRhdGEudGFyZ2V0cykpOnQuYXhpc194X2V4dGVudDtyZXR1cm4gZS5pc1RpbWVTZXJpZXMoKSYmKG49W2UucGFyc2VEYXRlKG5bMF0pLGUucGFyc2VEYXRlKG5bMV0pXSksbn0seC5pbml0VGV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5tYWluLnNlbGVjdCgiLiIrYS5jaGFydCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGEuY2hhcnRUZXh0cyksZS5tYWluVGV4dD1lLmQzLnNlbGVjdEFsbChbXSl9LHgudXBkYXRlVGFyZ2V0c0ZvclRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMsbz1yLmNsYXNzQ2hhcnRUZXh0LmJpbmQocikscz1yLmNsYXNzVGV4dHMuYmluZChyKSxpPXIuY2xhc3NGb2N1cy5iaW5kKHIpO3Q9ci5tYWluLnNlbGVjdCgiLiIrYS5jaGFydFRleHRzKS5zZWxlY3RBbGwoIi4iK2EuY2hhcnRUZXh0KS5kYXRhKGUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlKXtyZXR1cm4gbyhlKStpKGUpfSksbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8pLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIscyl9LHgudXBkYXRlVGV4dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jb25maWcscj10LmJhck9yTGluZURhdGEuYmluZCh0KSxvPXQuY2xhc3NUZXh0LmJpbmQodCk7dC5tYWluVGV4dD10Lm1haW4uc2VsZWN0QWxsKCIuIithLnRleHRzKS5zZWxlY3RBbGwoIi4iK2EudGV4dCkuZGF0YShyKSx0Lm1haW5UZXh0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLG8pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbihlKXtyZXR1cm4gbi5heGlzX3JvdGF0ZWQ/ZS52YWx1ZTwwPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9KS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlKXtyZXR1cm4gdC5jb2xvcihlKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLHQubWFpblRleHQudGV4dChmdW5jdGlvbihlLG4scil7cmV0dXJuIHQuZGF0YUxhYmVsRm9ybWF0KGUuaWQpKGUudmFsdWUsZS5pZCxuLHIpfSksdC5tYWluVGV4dC5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLnJlbW92ZSgpfSx4LnJlZHJhd1RleHQ9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuWyhyP3RoaXMubWFpblRleHQudHJhbnNpdGlvbigpOnRoaXMubWFpblRleHQpLmF0dHIoIngiLGUpLmF0dHIoInkiLHQpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixuPzA6dGhpcy5vcGFjaXR5Rm9yVGV4dC5iaW5kKHRoaXMpKV19LHguZ2V0VGV4dFJlY3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89dGhpcy5kMy5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImMzIiwhMCkscz1vLmFwcGVuZCgic3ZnIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgicG9zaXRpb24iLCJmaXhlZCIpLnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKSxpPXRoaXMuZDMuc2VsZWN0KG4pLnN0eWxlKCJmb250Iik7cmV0dXJuIHMuc2VsZWN0QWxsKCIuZHVtbXkiKS5kYXRhKFtlXSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHR8fCIiLCEwKS5zdHlsZSgiZm9udCIsaSkudGV4dChlKS5lYWNoKGZ1bmN0aW9uKCl7cj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksby5yZW1vdmUoKSxyfSx4LmdlbmVyYXRlWFlGb3JUZXh0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMscz1vLmdlbmVyYXRlR2V0QXJlYVBvaW50cyhlLCExKSxpPW8uZ2VuZXJhdGVHZXRCYXJQb2ludHModCwhMSksYT1vLmdlbmVyYXRlR2V0TGluZVBvaW50cyhuLCExKSxsPXI/by5nZXRYRm9yVGV4dDpvLmdldFlGb3JUZXh0O3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPW8uaXNBcmVhVHlwZShlKT9zOm8uaXNCYXJUeXBlKGUpP2k6YTtyZXR1cm4gbC5jYWxsKG8sbihlLHQpLGUsdGhpcyl9fSx4LmdldFhGb3JUZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHM9dGhpcyxpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHMuY29uZmlnLmF4aXNfcm90YXRlZD8obz1zLmlzQmFyVHlwZSh0KT80OjYscj1lWzJdWzFdK28qKHQudmFsdWU8MD8tMToxKSk6cj1zLmhhc1R5cGUoImJhciIpPyhlWzJdWzBdK2VbMF1bMF0pLzI6ZVswXVswXSxudWxsPT09dC52YWx1ZSYmKHI+cy53aWR0aD9yPXMud2lkdGgtaS53aWR0aDpyPDAmJihyPTQpKSxyfSx4LmdldFlGb3JUZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPXRoaXMscz1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmNvbmZpZy5heGlzX3JvdGF0ZWQ/cj0oZVswXVswXStlWzJdWzBdKy42KnMuaGVpZ2h0KS8yOihyPWVbMl1bMV0sdC52YWx1ZTwwfHwwPT09dC52YWx1ZSYmIW8uaGFzUG9zaXRpdmVWYWx1ZT8ocis9cy5oZWlnaHQsby5pc0JhclR5cGUodCkmJm8uaXNTYWZhcmkoKT9yLT0zOiFvLmlzQmFyVHlwZSh0KSYmby5pc0Nocm9tZSgpJiYocis9MykpOnIrPW8uaXNCYXJUeXBlKHQpPy0zOi02KSxudWxsIT09dC52YWx1ZXx8by5jb25maWcuYXhpc19yb3RhdGVkfHwocjxzLmhlaWdodD9yPXMuaGVpZ2h0OnI+dGhpcy5oZWlnaHQmJihyPXRoaXMuaGVpZ2h0LTQpKSxyfSx4LmluaXRUaXRsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS50aXRsZT1lLnN2Zy5hcHBlbmQoInRleHQiKS50ZXh0KGUuY29uZmlnLnRpdGxlX3RleHQpLmF0dHIoImNsYXNzIixlLkNMQVNTLnRpdGxlKX0seC5yZWRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS50aXRsZS5hdHRyKCJ4IixlLnhGb3JUaXRsZS5iaW5kKGUpKS5hdHRyKCJ5IixlLnlGb3JUaXRsZS5iaW5kKGUpKX0seC54Rm9yVGl0bGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj10LnRpdGxlX3Bvc2l0aW9ufHwibGVmdCI7cmV0dXJuIG4uaW5kZXhPZigicmlnaHQiKT49MD9lLmN1cnJlbnRXaWR0aC1lLmdldFRleHRSZWN0KGUudGl0bGUubm9kZSgpLnRleHRDb250ZW50LGUuQ0xBU1MudGl0bGUsZS50aXRsZS5ub2RlKCkpLndpZHRoLXQudGl0bGVfcGFkZGluZy5yaWdodDpuLmluZGV4T2YoImNlbnRlciIpPj0wPyhlLmN1cnJlbnRXaWR0aC1lLmdldFRleHRSZWN0KGUudGl0bGUubm9kZSgpLnRleHRDb250ZW50LGUuQ0xBU1MudGl0bGUsZS50aXRsZS5ub2RlKCkpLndpZHRoKS8yOnQudGl0bGVfcGFkZGluZy5sZWZ0fSx4LnlGb3JUaXRsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuY29uZmlnLnRpdGxlX3BhZGRpbmcudG9wK2UuZ2V0VGV4dFJlY3QoZS50aXRsZS5ub2RlKCkudGV4dENvbnRlbnQsZS5DTEFTUy50aXRsZSxlLnRpdGxlLm5vZGUoKSkuaGVpZ2h0fSx4LmdldFRpdGxlUGFkZGluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUueUZvclRpdGxlKCkrZS5jb25maWcudGl0bGVfcGFkZGluZy5ib3R0b219LHguaW5pdFRvb2x0aXA9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10LmNvbmZpZztpZih0LnRvb2x0aXA9dC5zZWxlY3RDaGFydC5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLGEudG9vbHRpcENvbnRhaW5lcikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksbi50b29sdGlwX2luaXRfc2hvdyl7aWYodC5pc1RpbWVTZXJpZXMoKSYmbShuLnRvb2x0aXBfaW5pdF94KSl7Zm9yKG4udG9vbHRpcF9pbml0X3g9dC5wYXJzZURhdGUobi50b29sdGlwX2luaXRfeCksZT0wO2U8dC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLmxlbmd0aCYmdC5kYXRhLnRhcmdldHNbMF0udmFsdWVzW2VdLngtbi50b29sdGlwX2luaXRfeCE9MDtlKyspO24udG9vbHRpcF9pbml0X3g9ZX10LnRvb2x0aXAuaHRtbChuLnRvb2x0aXBfY29udGVudHMuY2FsbCh0LHQuZGF0YS50YXJnZXRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGROYW1lKGUudmFsdWVzW24udG9vbHRpcF9pbml0X3hdKX0pLHQuYXhpcy5nZXRYQXhpc1RpY2tGb3JtYXQoKSx0LmdldFlGb3JtYXQodC5oYXNBcmNUeXBlKCkpLHQuY29sb3IpKSx0LnRvb2x0aXAuc3R5bGUoInRvcCIsbi50b29sdGlwX2luaXRfcG9zaXRpb24udG9wKS5zdHlsZSgibGVmdCIsbi50b29sdGlwX2luaXRfcG9zaXRpb24ubGVmdCkuc3R5bGUoImRpc3BsYXkiLCJibG9jayIpfX0seC5nZXRUb29sdGlwU29ydEZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnO2lmKDAhPT10LmRhdGFfZ3JvdXBzLmxlbmd0aCYmdm9pZCAwPT09dC50b29sdGlwX29yZGVyKXt2YXIgbj1lLm9yZGVyVGFyZ2V0cyhlLmRhdGEudGFyZ2V0cykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSk7cmV0dXJuKGUuaXNPcmRlckFzYygpfHxlLmlzT3JkZXJEZXNjKCkpJiYobj1uLnJldmVyc2UoKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5pbmRleE9mKGUuaWQpLW4uaW5kZXhPZih0LmlkKX19dmFyIHI9dC50b29sdGlwX29yZGVyO3ZvaWQgMD09PXImJihyPXQuZGF0YV9vcmRlcik7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS52YWx1ZTpudWxsfTtpZihtKHIpJiYiYXNjIj09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlKS1vKHQpfTtpZihtKHIpJiYiZGVzYyI9PT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odCktbyhlKX07aWYocChyKSl7dmFyIHM9cjtyZXR1cm4gdm9pZCAwPT09dC50b29sdGlwX29yZGVyJiYocz1mdW5jdGlvbihlLHQpe3JldHVybiByKGU/e2lkOmUuaWQsdmFsdWVzOltlXX06bnVsbCx0P3tpZDp0LmlkLHZhbHVlczpbdF19Om51bGwpfSksc31yZXR1cm4gZihyKT9mdW5jdGlvbihlLHQpe3JldHVybiByLmluZGV4T2YoZS5pZCktci5pbmRleE9mKHQuaWQpfTp2b2lkIDB9LHguZ2V0VG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scyxpLGEsbCx1LGM9dGhpcyxkPWMuY29uZmlnLF89ZC50b29sdGlwX2Zvcm1hdF90aXRsZXx8dCxwPWQudG9vbHRpcF9mb3JtYXRfbmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGY9ZC50b29sdGlwX2Zvcm1hdF92YWx1ZXx8bixtPXRoaXMuZ2V0VG9vbHRpcFNvcnRGdW5jdGlvbigpO2ZvcihtJiZlLnNvcnQobSkscz0wO3M8ZS5sZW5ndGg7cysrKWlmKGVbc10mJihlW3NdLnZhbHVlfHwwPT09ZVtzXS52YWx1ZSkmJihvfHwoaT1PKF8/XyhlW3NdLngpOmVbc10ueCksbz0iPHRhYmxlIGNsYXNzPSciK2MuQ0xBU1MudG9vbHRpcCsiJz4iKyhpfHwwPT09aT8iPHRyPjx0aCBjb2xzcGFuPScyJz4iK2krIjwvdGg+PC90cj4iOiIiKSksdm9pZCAwIT09KGE9TyhmKGVbc10udmFsdWUsZVtzXS5yYXRpbyxlW3NdLmlkLGVbc10uaW5kZXgsZSkpKSkpe2lmKG51bGw9PT1lW3NdLm5hbWUpY29udGludWU7bD1PKHAoZVtzXS5uYW1lLGVbc10ucmF0aW8sZVtzXS5pZCxlW3NdLmluZGV4KSksdT1jLmxldmVsQ29sb3I/Yy5sZXZlbENvbG9yKGVbc10udmFsdWUpOnIoZVtzXS5pZCksbys9Ijx0ciBjbGFzcz0nIitjLkNMQVNTLnRvb2x0aXBOYW1lKyItIitjLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGVbc10uaWQpKyInPiIsbys9Ijx0ZCBjbGFzcz0nbmFtZSc+PHNwYW4gc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Iit1KyInPjwvc3Bhbj4iK2wrIjwvdGQ+IixvKz0iPHRkIGNsYXNzPSd2YWx1ZSc+IithKyI8L3RkPiIsbys9IjwvdHI+In1yZXR1cm4gbysiPC90YWJsZT4ifSx4LnRvb2x0aXBQb3NpdGlvbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxzLGksYSxsLHU9dGhpcyxjPXUuY29uZmlnLGQ9dS5kMyxfPXUuaGFzQXJjVHlwZSgpLHA9ZC5tb3VzZShyKTtyZXR1cm4gXz8ocz0odS53aWR0aC0odS5pc0xlZ2VuZFJpZ2h0P3UuZ2V0TGVnZW5kV2lkdGgoKTowKSkvMitwWzBdLGE9KHUuaGFzVHlwZSgiZ2F1Z2UiKT91LmhlaWdodDp1LmhlaWdodC8yKStwWzFdKzIwKToobz11LmdldFN2Z0xlZnQoITApLGMuYXhpc19yb3RhdGVkPyhzPW8rcFswXSsxMDAsaT1zK3QsbD11LmN1cnJlbnRXaWR0aC11LmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKSxhPXUueChlWzBdLngpKzIwKToocz1vK3UuZ2V0Q3VycmVudFBhZGRpbmdMZWZ0KCEwKSt1LngoZVswXS54KSsyMCxpPXMrdCxsPW8rdS5jdXJyZW50V2lkdGgtdS5nZXRDdXJyZW50UGFkZGluZ1JpZ2h0KCksYT1wWzFdKzE1KSxpPmwmJihzLT1pLWwrMjApLGErbj51LmN1cnJlbnRIZWlnaHQmJihhLT1uKzMwKSksYTwwJiYoYT0wKSx7dG9wOmEsbGVmdDpzfX0seC5zaG93VG9vbHRpcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzPXRoaXMsaT1zLmNvbmZpZyxhPXMuaGFzQXJjVHlwZSgpLGw9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJl8oZS52YWx1ZSl9KSx1PWkudG9vbHRpcF9wb3NpdGlvbnx8eC50b29sdGlwUG9zaXRpb247MCE9PWwubGVuZ3RoJiZpLnRvb2x0aXBfc2hvdyYmKHMudG9vbHRpcC5odG1sKGkudG9vbHRpcF9jb250ZW50cy5jYWxsKHMsZSxzLmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCkscy5nZXRZRm9ybWF0KGEpLHMuY29sb3IpKS5zdHlsZSgiZGlzcGxheSIsImJsb2NrIiksbj1zLnRvb2x0aXAucHJvcGVydHkoIm9mZnNldFdpZHRoIikscj1zLnRvb2x0aXAucHJvcGVydHkoIm9mZnNldEhlaWdodCIpLG89dS5jYWxsKHRoaXMsbCxuLHIsdCkscy50b29sdGlwLnN0eWxlKCJ0b3AiLG8udG9wKyJweCIpLnN0eWxlKCJsZWZ0IixvLmxlZnQrInB4IikpfSx4LmhpZGVUb29sdGlwPWZ1bmN0aW9uKCl7dGhpcy50b29sdGlwLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpfSx4LnNldFRhcmdldFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWc7bi5tYXBUb1RhcmdldElkcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ud2l0aG91dEZhZGVJbltlXT10PT09ci5kYXRhX3R5cGVzW2VdLHIuZGF0YV90eXBlc1tlXT10fSksZXx8KHIuZGF0YV90eXBlPXQpfSx4Lmhhc1R5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5jb25maWcuZGF0YV90eXBlcyxvPSExO3JldHVybiB0PXR8fG4uZGF0YS50YXJnZXRzLHQmJnQubGVuZ3RoP3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1yW3QuaWRdOyhuJiZuLmluZGV4T2YoZSk+PTB8fCFuJiYibGluZSI9PT1lKSYmKG89ITApfSk6T2JqZWN0LmtleXMocikubGVuZ3RoP09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT09PWUmJihvPSEwKX0pOm89bi5jb25maWcuZGF0YV90eXBlPT09ZSxvfSx4Lmhhc0FyY1R5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzVHlwZSgicGllIixlKXx8dGhpcy5oYXNUeXBlKCJkb251dCIsZSl8fHRoaXMuaGFzVHlwZSgiZ2F1Z2UiLGUpfSx4LmlzTGluZVR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25maWcsbj1tKGUpP2U6ZS5pZDtyZXR1cm4hdC5kYXRhX3R5cGVzW25dfHxbImxpbmUiLCJzcGxpbmUiLCJhcmVhIiwiYXJlYS1zcGxpbmUiLCJzdGVwIiwiYXJlYS1zdGVwIl0uaW5kZXhPZih0LmRhdGFfdHlwZXNbbl0pPj0wfSx4LmlzU3RlcFR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bShlKT9lOmUuaWQ7cmV0dXJuWyJzdGVwIiwiYXJlYS1zdGVwIl0uaW5kZXhPZih0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW3RdKT49MH0seC5pc1NwbGluZVR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bShlKT9lOmUuaWQ7cmV0dXJuWyJzcGxpbmUiLCJhcmVhLXNwbGluZSJdLmluZGV4T2YodGhpcy5jb25maWcuZGF0YV90eXBlc1t0XSk+PTB9LHguaXNBcmVhVHlwZT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpP2U6ZS5pZDtyZXR1cm5bImFyZWEiLCJhcmVhLXNwbGluZSIsImFyZWEtc3RlcCJdLmluZGV4T2YodGhpcy5jb25maWcuZGF0YV90eXBlc1t0XSk+PTB9LHguaXNCYXJUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PW0oZSk/ZTplLmlkO3JldHVybiJiYXIiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0seC5pc1NjYXR0ZXJUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PW0oZSk/ZTplLmlkO3JldHVybiJzY2F0dGVyIj09PXRoaXMuY29uZmlnLmRhdGFfdHlwZXNbdF19LHguaXNQaWVUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PW0oZSk/ZTplLmlkO3JldHVybiJwaWUiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0seC5pc0dhdWdlVHlwZT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpP2U6ZS5pZDtyZXR1cm4iZ2F1Z2UiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0seC5pc0RvbnV0VHlwZT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpP2U6ZS5pZDtyZXR1cm4iZG9udXQiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1t0XX0seC5pc0FyY1R5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNQaWVUeXBlKGUpfHx0aGlzLmlzRG9udXRUeXBlKGUpfHx0aGlzLmlzR2F1Z2VUeXBlKGUpfSx4LmxpbmVEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoZSk/W2VdOltdfSx4LmFyY0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNBcmNUeXBlKGUuZGF0YSk/W2VdOltdfSx4LmJhckRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNCYXJUeXBlKGUpP2UudmFsdWVzOltdfSx4LmxpbmVPclNjYXR0ZXJEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoZSl8fHRoaXMuaXNTY2F0dGVyVHlwZShlKT9lLnZhbHVlczpbXX0seC5iYXJPckxpbmVEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzQmFyVHlwZShlKXx8dGhpcy5pc0xpbmVUeXBlKGUpP2UudmFsdWVzOltdfSx4LmlzSW50ZXJwb2xhdGlvblR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuWyJsaW5lYXIiLCJsaW5lYXItY2xvc2VkIiwiYmFzaXMiLCJiYXNpcy1vcGVuIiwiYmFzaXMtY2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbC1vcGVuIiwiY2FyZGluYWwtY2xvc2VkIiwibW9ub3RvbmUiXS5pbmRleE9mKGUpPj0wfSx4LmlzU2FmYXJpPWZ1bmN0aW9uKCl7dmFyIGU9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGUuaW5kZXhPZigiU2FmYXJpIik+PTAmJmUuaW5kZXhPZigiQ2hyb21lIik8MH0seC5pc0Nocm9tZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUiKT49MH0seC5pbml0Wm9vbT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXQuZDMscj10LmNvbmZpZzt0Lnpvb209bi5iZWhhdmlvci56b29tKCkub24oInpvb21zdGFydCIsZnVuY3Rpb24oKXtlPW4uZXZlbnQuc291cmNlRXZlbnQsdC56b29tLmFsdERvbWFpbj1uLmV2ZW50LnNvdXJjZUV2ZW50LmFsdEtleT90Lngub3JnRG9tYWluKCk6bnVsbCxyLnpvb21fb256b29tc3RhcnQuY2FsbCh0LmFwaSxuLmV2ZW50LnNvdXJjZUV2ZW50KX0pLm9uKCJ6b29tIixmdW5jdGlvbigpe3QucmVkcmF3Rm9yWm9vbS5jYWxsKHQpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7dmFyIG89bi5ldmVudC5zb3VyY2VFdmVudDtvJiZlLmNsaWVudFg9PT1vLmNsaWVudFgmJmUuY2xpZW50WT09PW8uY2xpZW50WXx8KHQucmVkcmF3RXZlbnRSZWN0KCksdC51cGRhdGVab29tKCksci56b29tX29uem9vbWVuZC5jYWxsKHQuYXBpLHQueC5vcmdEb21haW4oKSkpfSksdC56b29tLnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiByLmF4aXNfcm90YXRlZD90aGlzLnkoZSk6dGhpcy54KGUpfSx0Lnpvb20ub3JnU2NhbGVFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgZT1yLnpvb21fZXh0ZW50P3Iuem9vbV9leHRlbnQ6WzEsMTBdO3JldHVybltlWzBdLE1hdGgubWF4KHQuZ2V0TWF4RGF0YUNvdW50KCkvZVsxXSxlWzFdKV19LHQuem9vbS51cGRhdGVTY2FsZUV4dGVudD1mdW5jdGlvbigpe3ZhciBlPXkodC54Lm9yZ0RvbWFpbigpKS95KHQuZ2V0Wm9vbURvbWFpbigpKSxuPXRoaXMub3JnU2NhbGVFeHRlbnQoKTtyZXR1cm4gdGhpcy5zY2FsZUV4dGVudChbblswXSplLG5bMV0qZV0pLHRoaXN9fSx4LmdldFpvb21Eb21haW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsbj1lLmQzO3JldHVybltuLm1pbihbZS5vcmdYRG9tYWluWzBdLHQuem9vbV94X21pbl0pLG4ubWF4KFtlLm9yZ1hEb21haW5bMV0sdC56b29tX3hfbWF4XSldfSx4LnVwZGF0ZVpvb209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcuem9vbV9lbmFibGVkP2Uuem9vbTpmdW5jdGlvbigpe307ZS5tYWluLnNlbGVjdCgiLiIrYS56b29tUmVjdCkuY2FsbCh0KS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCksZS5tYWluLnNlbGVjdEFsbCgiLiIrYS5ldmVudFJlY3QpLmNhbGwodCkub24oImRibGNsaWNrLnpvb20iLG51bGwpfSx4LnJlZHJhd0Zvclpvb209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5kMyxuPWUuY29uZmlnLHI9ZS56b29tLG89ZS54O2lmKG4uem9vbV9lbmFibGVkJiYwIT09ZS5maWx0ZXJUYXJnZXRzVG9TaG93KGUuZGF0YS50YXJnZXRzKS5sZW5ndGgpe2lmKCJtb3VzZW1vdmUiPT09dC5ldmVudC5zb3VyY2VFdmVudC50eXBlJiZyLmFsdERvbWFpbilyZXR1cm4gby5kb21haW4oci5hbHREb21haW4pLHZvaWQgci5zY2FsZShvKS51cGRhdGVTY2FsZUV4dGVudCgpO2UuaXNDYXRlZ29yaXplZCgpJiZvLm9yZ0RvbWFpbigpWzBdPT09ZS5vcmdYRG9tYWluWzBdJiZvLmRvbWFpbihbZS5vcmdYRG9tYWluWzBdLTFlLTEwLG8ub3JnRG9tYWluKClbMV1dKSxlLnJlZHJhdyh7d2l0aFRyYW5zaXRpb246ITEsd2l0aFk6bi56b29tX3Jlc2NhbGUsd2l0aFN1YmNoYXJ0OiExLHdpdGhFdmVudFJlY3Q6ITEsd2l0aERpbWVuc2lvbjohMX0pLCJtb3VzZW1vdmUiPT09dC5ldmVudC5zb3VyY2VFdmVudC50eXBlJiYoZS5jYW5jZWxDbGljaz0hMCksbi56b29tX29uem9vbS5jYWxsKGUuYXBpLG8ub3JnRG9tYWluKCkpfX0sTH0pfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtYzNqcy9ub2RlX21vZHVsZXMvZDMvZDMuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvOyFmdW5jdGlvbigpe2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJihlLm93bmVyRG9jdW1lbnR8fGUuZG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBpKGUpe3JldHVybiBlJiYoZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXcpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbD09PWU/TmFOOitlfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIWlzTmFOKGUpfWZ1bmN0aW9uIGMoZSl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24odCxuLHIsbyl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYobz10Lmxlbmd0aCk7cjxvOyl7dmFyIHM9citvPj4+MTtlKHRbc10sbik8MD9yPXMrMTpvPXN9cmV0dXJuIHJ9LHJpZ2h0OmZ1bmN0aW9uKHQsbixyLG8pe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKG89dC5sZW5ndGgpO3I8bzspe3ZhciBzPXIrbz4+PjE7ZSh0W3NdLG4pPjA/bz1zOnI9cysxfXJldHVybiByfX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gXyhlKXtmb3IodmFyIHQ9MTtlKnQlMTspdCo9MTA7cmV0dXJuIHR9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxuLHt2YWx1ZTp0W25dLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBmKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gbShlKXtyZXR1cm4oZSs9IiIpPT09Q2l8fGVbMF09PT1PaT9PaStlOmV9ZnVuY3Rpb24gaChlKXtyZXR1cm4oZSs9IiIpWzBdPT09T2k/ZS5zbGljZSgxKTplfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIG0oZSlpbiB0aGlzLl99ZnVuY3Rpb24gYihlKXtyZXR1cm4oZT1tKGUpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1tlXX1mdW5jdGlvbiBFKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuXyllLnB1c2goaCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24geSgpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMuXykrK2U7cmV0dXJuIGV9ZnVuY3Rpb24gdigpe2Zvcih2YXIgZSBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gQyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P2U6cn19ZnVuY3Rpb24gTyhlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtmb3IodmFyIG49MCxyPVNpLmxlbmd0aDtuPHI7KytuKXt2YXIgbz1TaVtuXSt0O2lmKG8gaW4gZSlyZXR1cm4gb319ZnVuY3Rpb24gUygpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIGooZSl7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxyPW4sbz0tMSxzPXIubGVuZ3RoOysrbzxzOykodD1yW29dLm9uKSYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGV9dmFyIG49W10scj1uZXcgZjtyZXR1cm4gdC5vbj1mdW5jdGlvbih0LG8pe3ZhciBzLGk9ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pJiZpLm9uOihpJiYoaS5vbj1udWxsLG49bi5zbGljZSgwLHM9bi5pbmRleE9mKGkpKS5jb25jYXQobi5zbGljZShzKzEpKSxyLnJlbW92ZSh0KSksbyYmbi5wdXNoKHIuc2V0KHQse29uOm99KSksZSl9LHR9ZnVuY3Rpb24geCgpe3BpLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gTCgpe2Zvcih2YXIgZSx0PXBpLmV2ZW50O2U9dC5zb3VyY2VFdmVudDspdD1lO3JldHVybiB0fWZ1bmN0aW9uIEQoZSl7Zm9yKHZhciB0PW5ldyBSLG49MCxyPWFyZ3VtZW50cy5sZW5ndGg7KytuPHI7KXRbYXJndW1lbnRzW25dXT1qKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3RyeXt2YXIgcz1vLnNvdXJjZUV2ZW50PXBpLmV2ZW50O28udGFyZ2V0PWUscGkuZXZlbnQ9byx0W28udHlwZV0uYXBwbHkobixyKX1maW5hbGx5e3BpLmV2ZW50PXN9fX0sdH1mdW5jdGlvbiB3KGUpe3JldHVybiBqaShlLHdpKSxlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiB4aShlLHRoaXMpfX1mdW5jdGlvbiBrKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gTGkoZSx0aGlzKX19ZnVuY3Rpb24gSShlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfWZ1bmN0aW9uIG8oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfWZ1bmN0aW9uIHMoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX1mdW5jdGlvbiBpKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLG4pfWZ1bmN0aW9uIGEoKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxuKX1yZXR1cm4gZT1waS5ucy5xdWFsaWZ5KGUpLG51bGw9PXQ/ZS5sb2NhbD9yOm46ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9hOmk6ZS5sb2NhbD9zOm99ZnVuY3Rpb24gUChlKXtyZXR1cm4gZS50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1mdW5jdGlvbiBOKGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitwaS5yZXF1b3RlKGUpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEgoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGKGUsdCl7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj0tMTsrK248bzspZVtuXSh0aGlzLHQpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIG49LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248bzspZVtuXSh0aGlzLHIpfWU9SChlKS5tYXAoQik7dmFyIG89ZS5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjpufWZ1bmN0aW9uIEIoZSl7dmFyIHQ9TihlKTtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihvPW4uY2xhc3NMaXN0KXJldHVybiByP28uYWRkKGUpOm8ucmVtb3ZlKGUpO3ZhciBvPW4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdChvKXx8bi5zZXRBdHRyaWJ1dGUoImNsYXNzIixQKG8rIiAiK2UpKSk6bi5zZXRBdHRyaWJ1dGUoImNsYXNzIixQKG8ucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24gVShlLHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9ZnVuY3Rpb24gbygpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LG4pfWZ1bmN0aW9uIHMoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHIsbil9cmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9zOm99ZnVuY3Rpb24gRyhlLHQpe2Z1bmN0aW9uIG4oKXtkZWxldGUgdGhpc1tlXX1mdW5jdGlvbiByKCl7dGhpc1tlXT10fWZ1bmN0aW9uIG8oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW2VdOnRoaXNbZV09bn1yZXR1cm4gbnVsbD09dD9uOiJmdW5jdGlvbiI9PXR5cGVvZiB0P286cn1mdW5jdGlvbiB6KGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PU1pJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1NaT90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMobixlKX1mdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXBpLm5zLnF1YWxpZnkoZSkpLmxvY2FsP246dH1mdW5jdGlvbiBWKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVyhlKXtyZXR1cm57X19kYXRhX186ZX19ZnVuY3Rpb24gWShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRGkodGhpcyxlKX19ZnVuY3Rpb24gcShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KGU9YSksZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmbj9lKHQuX19kYXRhX18sbi5fX2RhdGFfXyk6IXQtIW59fWZ1bmN0aW9uIEsoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspZm9yKHZhciBvLHM9ZVtuXSxpPTAsYT1zLmxlbmd0aDtpPGE7aSsrKShvPXNbaV0pJiZ0KG8saSxuKTtyZXR1cm4gZX1mdW5jdGlvbiBYKGUpe3JldHVybiBqaShlLElpKSxlfWZ1bmN0aW9uICQoZSl7dmFyIHQsbjtyZXR1cm4gZnVuY3Rpb24ocixvLHMpe3ZhciBpLGE9ZVtzXS51cGRhdGUsbD1hLmxlbmd0aDtmb3IocyE9biYmKG49cyx0PTApLG8+PXQmJih0PW8rMSk7IShpPWFbdF0pJiYrK3Q8bDspO3JldHVybiBpfX1mdW5jdGlvbiBRKGUsdCxuKXtmdW5jdGlvbiByKCl7dmFyIHQ9dGhpc1tpXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2ldKX1mdW5jdGlvbiBvKCl7dmFyIG89bCh0LG1pKGFyZ3VtZW50cykpO3IuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2ldPW8sby4kPW4pLG8uXz10fWZ1bmN0aW9uIHMoKXt2YXIgdCxuPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrcGkucmVxdW90ZShlKSsiJCIpO2Zvcih2YXIgciBpbiB0aGlzKWlmKHQ9ci5tYXRjaChuKSl7dmFyIG89dGhpc1tyXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFsxXSxvLG8uJCksZGVsZXRlIHRoaXNbcl19fXZhciBpPSJfX29uIitlLGE9ZS5pbmRleE9mKCIuIiksbD1KO2E+MCYmKGU9ZS5zbGljZSgwLGEpKTt2YXIgdT1QaS5nZXQoZSk7cmV0dXJuIHUmJihlPXUsbD1aKSxhP3Q/bzpyOnQ/UzpzfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9cGkuZXZlbnQ7cGkuZXZlbnQ9bix0WzBdPXRoaXMuX19kYXRhX187dHJ5e2UuYXBwbHkodGhpcyx0KX1maW5hbGx5e3BpLmV2ZW50PXJ9fX1mdW5jdGlvbiBaKGUsdCl7dmFyIG49SihlLHQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9ZS5yZWxhdGVkVGFyZ2V0O3ImJihyPT09dHx8OCZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKXx8bi5jYWxsKHQsZSl9fWZ1bmN0aW9uIGVlKGUpe3ZhciB0PSIuZHJhZ3N1cHByZXNzLSIrICsrSGksbj0iY2xpY2siK3Qscj1waS5zZWxlY3QoaShlKSkub24oInRvdWNobW92ZSIrdCx4KS5vbigiZHJhZ3N0YXJ0Iit0LHgpLm9uKCJzZWxlY3RzdGFydCIrdCx4KTtpZihudWxsPT1OaSYmKE5pPSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJk8oZS5zdHlsZSwidXNlclNlbGVjdCIpKSxOaSl7dmFyIG89cyhlKS5zdHlsZSxhPW9bTmldO29bTmldPSJub25lIn1yZXR1cm4gZnVuY3Rpb24oZSl7aWYoci5vbih0LG51bGwpLE5pJiYob1tOaV09YSksZSl7dmFyIHM9ZnVuY3Rpb24oKXtyLm9uKG4sbnVsbCl9O3Iub24obixmdW5jdGlvbigpe3goKSxzKCl9LCEwKSxzZXRUaW1lb3V0KHMsMCl9fX1mdW5jdGlvbiB0ZShlLHQpe3QuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtpZihGaTwwKXt2YXIgbz1pKGUpO2lmKG8uc2Nyb2xsWHx8by5zY3JvbGxZKXtuPXBpLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6Im5vbmUifSwiaW1wb3J0YW50Iik7dmFyIHM9blswXVswXS5nZXRTY3JlZW5DVE0oKTtGaT0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gRmk/KHIueD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbci54LHIueV19dmFyIGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWEubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWEudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiBuZSgpe3JldHVybiBwaS5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBlPjA/MTplPDA/LTE6MH1mdW5jdGlvbiBvZShlLHQsbil7cmV0dXJuKHRbMF0tZVswXSkqKG5bMV0tZVsxXSktKHRbMV0tZVsxXSkqKG5bMF0tZVswXSl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGU+MT8wOmU8LTE/R2k6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIGllKGUpe3JldHVybiBlPjE/V2k6ZTwtMT8tV2k6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGFlKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSktMS9lKS8yfWZ1bmN0aW9uIGxlKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIHVlKGUpe3JldHVybigoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKX1mdW5jdGlvbiBjZShlKXtyZXR1cm4oZT1NYXRoLnNpbihlLzIpKSplfWZ1bmN0aW9uIGRlKCl7fWZ1bmN0aW9uIF9lKGUsdCxuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9lPyh0aGlzLmg9K2UsdGhpcy5zPSt0LHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBfZT9uZXcgX2UoZS5oLGUucyxlLmwpOlNlKCIiK2UsUmUsX2UpOm5ldyBfZShlLHQsbil9ZnVuY3Rpb24gcGUoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU+MzYwP2UtPTM2MDplPDAmJihlKz0zNjApLGU8NjA/cysoaS1zKSplLzYwOmU8MTgwP2k6ZTwyNDA/cysoaS1zKSooMjQwLWUpLzYwOnN9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqcihlKSl9dmFyIHMsaTtyZXR1cm4gZT1pc05hTihlKT8wOihlJT0zNjApPDA/ZSszNjA6ZSx0PWlzTmFOKHQpPzA6dDwwPzA6dD4xPzE6dCxuPW48MD8wOm4+MT8xOm4saT1uPD0uNT9uKigxK3QpOm4rdC1uKnQscz0yKm4taSxuZXcgVGUobyhlKzEyMCksbyhlKSxvKGUtMTIwKSl9ZnVuY3Rpb24gZmUoZSx0LG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZmU/KHRoaXMuaD0rZSx0aGlzLmM9K3Qsdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIGZlP25ldyBmZShlLmgsZS5jLGUubCk6ZSBpbnN0YW5jZW9mIGhlP2JlKGUubCxlLmEsZS5iKTpiZSgoZT1qZSgoZT1waS5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IGZlKGUsdCxuKX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIGlzTmFOKGUpJiYoZT0wKSxpc05hTih0KSYmKHQ9MCksbmV3IGhlKG4sTWF0aC5jb3MoZSo9WWkpKnQsTWF0aC5zaW4oZSkqdCl9ZnVuY3Rpb24gaGUoZSx0LG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaGU/KHRoaXMubD0rZSx0aGlzLmE9K3Qsdm9pZCh0aGlzLmI9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIGhlP25ldyBoZShlLmwsZS5hLGUuYik6ZSBpbnN0YW5jZW9mIGZlP21lKGUuaCxlLmMsZS5sKTpqZSgoZT1UZShlKSkucixlLmcsZS5iKTpuZXcgaGUoZSx0LG4pfWZ1bmN0aW9uIGdlKGUsdCxuKXt2YXIgcj0oZSsxNikvMTE2LG89cit0LzUwMCxzPXItbi8yMDA7cmV0dXJuIG89RWUobykqdGEscj1FZShyKSpuYSxzPUVlKHMpKnJhLG5ldyBUZSh2ZSgzLjI0MDQ1NDIqby0xLjUzNzEzODUqci0uNDk4NTMxNCpzKSx2ZSgtLjk2OTI2NipvKzEuODc2MDEwOCpyKy4wNDE1NTYqcyksdmUoLjA1NTY0MzQqby0uMjA0MDI1OSpyKzEuMDU3MjI1MipzKSl9ZnVuY3Rpb24gYmUoZSx0LG4pe3JldHVybiBlPjA/bmV3IGZlKE1hdGguYXRhbjIobix0KSpxaSxNYXRoLnNxcnQodCp0K24qbiksZSk6bmV3IGZlKE5hTixOYU4sZSl9ZnVuY3Rpb24gRWUoZSl7cmV0dXJuIGU+LjIwNjg5MzAzND9lKmUqZTooZS00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZT4uMDA4ODU2P01hdGgucG93KGUsMS8zKTo3Ljc4NzAzNyplKzQvMjl9ZnVuY3Rpb24gdmUoZSl7cmV0dXJuIE1hdGgucm91bmQoMjU1KihlPD0uMDAzMDQ/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gVGUoZSx0LG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVGU/KHRoaXMucj1+fmUsdGhpcy5nPX5+dCx2b2lkKHRoaXMuYj1+fm4pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIFRlP25ldyBUZShlLnIsZS5nLGUuYik6U2UoIiIrZSxUZSxwZSk6bmV3IFRlKGUsdCxuKX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gbmV3IFRlKGU+PjE2LGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBDZShlKXtyZXR1cm4gQWUoZSkrIiJ9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIGU8MTY/IjAiK01hdGgubWF4KDAsZSkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSxlKS50b1N0cmluZygxNil9ZnVuY3Rpb24gU2UoZSx0LG4pe3ZhciByLG8scyxpPTAsYT0wLGw9MDtpZihyPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKGU9ZS50b0xvd2VyQ2FzZSgpKSlzd2l0Y2gobz1yWzJdLnNwbGl0KCIsIiksclsxXSl7Y2FzZSJoc2wiOnJldHVybiBuKHBhcnNlRmxvYXQob1swXSkscGFyc2VGbG9hdChvWzFdKS8xMDAscGFyc2VGbG9hdChvWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gdChMZShvWzBdKSxMZShvWzFdKSxMZShvWzJdKSl9cmV0dXJuKHM9aWEuZ2V0KGUpKT90KHMucixzLmcscy5iKToobnVsbD09ZXx8IiMiIT09ZS5jaGFyQXQoMCl8fGlzTmFOKHM9cGFyc2VJbnQoZS5zbGljZSgxKSwxNikpfHwoND09PWUubGVuZ3RoPyhpPSgzODQwJnMpPj40LGl8PWk+PjQsYT0yNDAmcyxhfD1hPj40LGw9MTUmcyxsfD1sPDw0KTo3PT09ZS5sZW5ndGgmJihpPSgxNjcxMTY4MCZzKT4+MTYsYT0oNjUyODAmcyk+PjgsbD0yNTUmcykpLHQoaSxhLGwpKX1mdW5jdGlvbiBSZShlLHQsbil7dmFyIHIsbyxzPU1hdGgubWluKGUvPTI1NSx0Lz0yNTUsbi89MjU1KSxpPU1hdGgubWF4KGUsdCxuKSxhPWktcyxsPShpK3MpLzI7cmV0dXJuIGE/KG89bDwuNT9hLyhpK3MpOmEvKDItaS1zKSxyPWU9PWk/KHQtbikvYSsodDxuPzY6MCk6dD09aT8obi1lKS9hKzI6KGUtdCkvYSs0LHIqPTYwKToocj1OYU4sbz1sPjAmJmw8MT8wOnIpLG5ldyBfZShyLG8sbCl9ZnVuY3Rpb24gamUoZSx0LG4pe2U9eGUoZSksdD14ZSh0KSxuPXhlKG4pO3ZhciByPXllKCguNDEyNDU2NCplKy4zNTc1NzYxKnQrLjE4MDQzNzUqbikvdGEpLG89eWUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqdCsuMDcyMTc1Km4pL25hKTtyZXR1cm4gaGUoMTE2Km8tMTYsNTAwKihyLW8pLDIwMCooby15ZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnQrLjk1MDMwNDEqbikvcmEpKSl9ZnVuY3Rpb24geGUoZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4iJSI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqdCk6dH1mdW5jdGlvbiBEZShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHdlKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPW51bGwpLE1lKHQsbixlLHIpfX1mdW5jdGlvbiBNZShlLHQsbixyKXtmdW5jdGlvbiBvKCl7dmFyIGUsdD1sLnN0YXR1cztpZighdCYmSWUobCl8fHQ+PTIwMCYmdDwzMDB8fDMwND09PXQpe3RyeXtlPW4uY2FsbChzLGwpfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IuY2FsbChzLGUpfWkubG9hZC5jYWxsKHMsZSl9ZWxzZSBpLmVycm9yLmNhbGwocyxsKX12YXIgcz17fSxpPXBpLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxhPXt9LGw9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtyZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBsfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpfHwobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9bzpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVhZHlTdGF0ZT4zJiZvKCl9LGwub25wcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgdD1waS5ldmVudDtwaS5ldmVudD1lO3RyeXtpLnByb2dyZXNzLmNhbGwocyxsKX1maW5hbGx5e3BpLmV2ZW50PXR9fSxzLmhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlPShlKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9hW2VdOihudWxsPT10P2RlbGV0ZSBhW2VdOmFbZV09dCsiIixzKX0scy5taW1lVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lP251bGw6ZSsiIixzKTp0fSxzLnJlc3BvbnNlVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLHMpOnV9LHMucmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG49ZSxzfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3NbZV09ZnVuY3Rpb24oKXtyZXR1cm4gcy5zZW5kLmFwcGx5KHMsW2VdLmNvbmNhdChtaShhcmd1bWVudHMpKSl9fSkscy5zZW5kPWZ1bmN0aW9uKG4scixvKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihvPXIscj1udWxsKSxsLm9wZW4obixlLCEwKSxudWxsPT10fHwiYWNjZXB0ImluIGF8fChhLmFjY2VwdD10KyIsKi8qIiksbC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYyBpbiBhKWwuc2V0UmVxdWVzdEhlYWRlcihjLGFbY10pO3JldHVybiBudWxsIT10JiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZSh0KSxudWxsIT11JiYobC5yZXNwb25zZVR5cGU9dSksbnVsbCE9byYmcy5vbigiZXJyb3IiLG8pLm9uKCJsb2FkIixmdW5jdGlvbihlKXtvKG51bGwsZSl9KSxpLmJlZm9yZXNlbmQuY2FsbChzLGwpLGwuc2VuZChudWxsPT1yP251bGw6ciksc30scy5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBsLmFib3J0KCksc30scGkucmViaW5kKHMsaSwib24iKSxudWxsPT1yP3M6cy5nZXQoa2UocikpfWZ1bmN0aW9uIGtlKGUpe3JldHVybiAxPT09ZS5sZW5ndGg/ZnVuY3Rpb24odCxuKXtlKG51bGw9PXQ/bjpudWxsKX06ZX1mdW5jdGlvbiBJZShlKXt2YXIgdD1lLnJlc3BvbnNlVHlwZTtyZXR1cm4gdCYmInRleHQiIT09dD9lLnJlc3BvbnNlOmUucmVzcG9uc2VUZXh0fWZ1bmN0aW9uIFBlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3I8MiYmKHQ9MCkscjwzJiYobj1EYXRlLm5vdygpKTt2YXIgbz1uK3Qscz17YzplLHQ6byxuOm51bGx9O3JldHVybiBsYT9sYS5uPXM6YWE9cyxsYT1zLHVhfHwoY2E9Y2xlYXJUaW1lb3V0KGNhKSx1YT0xLGRhKE5lKSksc31mdW5jdGlvbiBOZSgpe3ZhciBlPUhlKCksdD1GZSgpLWU7dD4yND8oaXNGaW5pdGUodCkmJihjbGVhclRpbWVvdXQoY2EpLGNhPXNldFRpbWVvdXQoTmUsdCkpLHVhPTApOih1YT0xLGRhKE5lKSl9ZnVuY3Rpb24gSGUoKXtmb3IodmFyIGU9RGF0ZS5ub3coKSx0PWFhO3Q7KWU+PXQudCYmdC5jKGUtdC50KSYmKHQuYz1udWxsKSx0PXQubjtyZXR1cm4gZX1mdW5jdGlvbiBGZSgpe2Zvcih2YXIgZSx0PWFhLG49MS8wO3Q7KXQuYz8odC50PG4mJihuPXQudCksdD0oZT10KS5uKTp0PWU/ZS5uPXQubjphYT10Lm47cmV0dXJuIGxhPWUsbn1mdW5jdGlvbiBCZShlLHQpe3JldHVybiB0LShlP01hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFVlKGUsdCl7dmFyIG49TWF0aC5wb3coMTAsMypBaSg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKGUpe3JldHVybiBlL259OmZ1bmN0aW9uKGUpe3JldHVybiBlKm59LHN5bWJvbDplfX1mdW5jdGlvbiBHZShlKXt2YXIgdD1lLmRlY2ltYWwsbj1lLnRob3VzYW5kcyxyPWUuZ3JvdXBpbmcsbz1lLmN1cnJlbmN5LHM9ciYmbj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1lLmxlbmd0aCxzPVtdLGk9MCxhPXJbMF0sbD0wO28+MCYmYT4wJiYobCthKzE+dCYmKGE9TWF0aC5tYXgoMSx0LWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoby09YSxvK2EpKSwhKChsKz1hKzEpPnQpKTspYT1yW2k9KGkrMSklci5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKG4pfTpBO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1wYS5leGVjKGUpLHI9blsxXXx8IiAiLGk9blsyXXx8Ij4iLGE9blszXXx8Ii0iLGw9bls0XXx8IiIsdT1uWzVdLGM9K25bNl0sZD1uWzddLF89bls4XSxwPW5bOV0sZj0xLG09IiIsaD0iIixnPSExLGI9ITA7c3dpdGNoKF8mJihfPStfLnN1YnN0cmluZygxKSksKHV8fCIwIj09PXImJiI9Ij09PWkpJiYodT1yPSIwIixpPSI9IikscCl7Y2FzZSJuIjpkPSEwLHA9ImciO2JyZWFrO2Nhc2UiJSI6Zj0xMDAsaD0iJSIscD0iZiI7YnJlYWs7Y2FzZSJwIjpmPTEwMCxoPSIlIixwPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWwmJihtPSIwIitwLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6Yj0hMTtjYXNlImQiOmc9ITAsXz0wO2JyZWFrO2Nhc2UicyI6Zj0tMSxwPSJyIn0iJCI9PT1sJiYobT1vWzBdLGg9b1sxXSksInIiIT1wfHxffHwocD0iZyIpLG51bGwhPV8mJigiZyI9PXA/Xz1NYXRoLm1heCgxLE1hdGgubWluKDIxLF8pKToiZSIhPXAmJiJmIiE9cHx8KF89TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxfKSkpKSxwPWZhLmdldChwKXx8emU7dmFyIEU9dSYmZDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49aDtpZihnJiZlJTEpcmV0dXJuIiI7dmFyIG89ZTwwfHwwPT09ZSYmMS9lPDA/KGU9LWUsIi0iKToiLSI9PT1hPyIiOmE7aWYoZjwwKXt2YXIgbD1waS5mb3JtYXRQcmVmaXgoZSxfKTtlPWwuc2NhbGUoZSksbj1sLnN5bWJvbCtofWVsc2UgZSo9ZjtlPXAoZSxfKTt2YXIgeSx2LFQ9ZS5sYXN0SW5kZXhPZigiLiIpO2lmKFQ8MCl7dmFyIEE9Yj9lLmxhc3RJbmRleE9mKCJlIik6LTE7QTwwPyh5PWUsdj0iIik6KHk9ZS5zdWJzdHJpbmcoMCxBKSx2PWUuc3Vic3RyaW5nKEEpKX1lbHNlIHk9ZS5zdWJzdHJpbmcoMCxUKSx2PXQrZS5zdWJzdHJpbmcoVCsxKTshdSYmZCYmKHk9cyh5LDEvMCkpO3ZhciBDPW0ubGVuZ3RoK3kubGVuZ3RoK3YubGVuZ3RoKyhFPzA6by5sZW5ndGgpLE89QzxjP25ldyBBcnJheShDPWMtQysxKS5qb2luKHIpOiIiO3JldHVybiBFJiYoeT1zKE8reSxPLmxlbmd0aD9jLXYubGVuZ3RoOjEvMCkpLG8rPW0sZT15K3YsKCI8Ij09PWk/bytlK086Ij4iPT09aT9PK28rZToiXiI9PT1pP08uc3Vic3RyaW5nKDAsQz4+PTEpK28rZStPLnN1YnN0cmluZyhDKTpvKyhFP2U6TytlKSkrbn19fWZ1bmN0aW9uIHplKGUpe3JldHVybiBlKyIifWZ1bmN0aW9uIFZlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1mdW5jdGlvbiBXZShlLHQsbil7ZnVuY3Rpb24gcih0KXt2YXIgbj1lKHQpLHI9cyhuLDEpO3JldHVybiB0LW48ci10P246cn1mdW5jdGlvbiBvKG4pe3JldHVybiB0KG49ZShuZXcgaGEobi0xKSksMSksbn1mdW5jdGlvbiBzKGUsbil7cmV0dXJuIHQoZT1uZXcgaGEoK2UpLG4pLGV9ZnVuY3Rpb24gaShlLHIscyl7dmFyIGk9byhlKSxhPVtdO2lmKHM+MSlmb3IoO2k8cjspbihpKSVzfHxhLnB1c2gobmV3IERhdGUoK2kpKSx0KGksMSk7ZWxzZSBmb3IoO2k8cjspYS5wdXNoKG5ldyBEYXRlKCtpKSksdChpLDEpO3JldHVybiBhfWZ1bmN0aW9uIGEoZSx0LG4pe3RyeXtoYT1WZTt2YXIgcj1uZXcgVmU7cmV0dXJuIHIuXz1lLGkocix0LG4pfWZpbmFsbHl7aGE9RGF0ZX19ZS5mbG9vcj1lLGUucm91bmQ9cixlLmNlaWw9byxlLm9mZnNldD1zLGUucmFuZ2U9aTt2YXIgbD1lLnV0Yz1ZZShlKTtyZXR1cm4gbC5mbG9vcj1sLGwucm91bmQ9WWUociksbC5jZWlsPVllKG8pLGwub2Zmc2V0PVllKHMpLGwucmFuZ2U9YSxlfWZ1bmN0aW9uIFllKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3RyeXtoYT1WZTt2YXIgcj1uZXcgVmU7cmV0dXJuIHIuXz10LGUocixuKS5ffWZpbmFsbHl7aGE9RGF0ZX19fWZ1bmN0aW9uIHFlKGUpe2Z1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gdCh0KXtmb3IodmFyIG4sbyxzLGk9W10sYT0tMSxsPTA7KythPHI7KTM3PT09ZS5jaGFyQ29kZUF0KGEpJiYoaS5wdXNoKGUuc2xpY2UobCxhKSksbnVsbCE9KG89YmFbbj1lLmNoYXJBdCgrK2EpXSkmJihuPWUuY2hhckF0KCsrYSkpLChzPWpbbl0pJiYobj1zKHQsbnVsbD09bz8iZSI9PT1uPyIgIjoiMCI6bykpLGkucHVzaChuKSxsPWErMSk7cmV0dXJuIGkucHVzaChlLnNsaWNlKGwsYSkpLGkuam9pbigiIil9dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIHQucGFyc2U9ZnVuY3Rpb24odCl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKG4ocixlLHQsMCkhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIG89bnVsbCE9ci5aJiZoYSE9PVZlLHM9bmV3KG8/VmU6aGEpO3JldHVybiJqImluIHI/cy5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJXImluIHJ8fCJVImluIHI/KCJ3ImluIHJ8fChyLnc9IlciaW4gcj8xOjApLHMuc2V0RnVsbFllYXIoci55LDAsMSkscy5zZXRGdWxsWWVhcihyLnksMCwiVyJpbiByPyhyLncrNiklNys3KnIuVy0ocy5nZXREYXkoKSs1KSU3OnIudys3KnIuVS0ocy5nZXREYXkoKSs2KSU3KSk6cy5zZXRGdWxsWWVhcihyLnksci5tLHIuZCkscy5zZXRIb3VycyhyLkgrKHIuWi8xMDB8MCksci5NK3IuWiUxMDAsci5TLHIuTCksbz9zLl86c30sdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fWZ1bmN0aW9uIG4oZSx0LG4scil7Zm9yKHZhciBvLHMsaSxhPTAsbD10Lmxlbmd0aCx1PW4ubGVuZ3RoO2E8bDspe2lmKHI+PXUpcmV0dXJuLTE7aWYoMzc9PT0obz10LmNoYXJDb2RlQXQoYSsrKSkpe2lmKGk9dC5jaGFyQXQoYSsrKSwhKHM9eFtpIGluIGJhP3QuY2hhckF0KGErKyk6aV0pfHwocj1zKGUsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKG8hPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIHIoZSx0LG4pe1QubGFzdEluZGV4PTA7dmFyIHI9VC5leGVjKHQuc2xpY2UobikpO3JldHVybiByPyhlLnc9QS5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKGUsdCxuKXt5Lmxhc3RJbmRleD0wO3ZhciByPXkuZXhlYyh0LnNsaWNlKG4pKTtyZXR1cm4gcj8oZS53PXYuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcyhlLHQsbil7Uy5sYXN0SW5kZXg9MDt2YXIgcj1TLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUubT1SLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkoZSx0LG4pe0MubGFzdEluZGV4PTA7dmFyIHI9Qy5leGVjKHQuc2xpY2UobikpO3JldHVybiByPyhlLm09Ty5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gbihlLGouYy50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIG4oZSxqLngudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiBuKGUsai5YLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcj1FLmdldCh0LnNsaWNlKG4sbis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PXI/LTE6KGUucD1yLG4pfXZhciBkPWUuZGF0ZVRpbWUsXz1lLmRhdGUscD1lLnRpbWUsZj1lLnBlcmlvZHMsbT1lLmRheXMsaD1lLnNob3J0RGF5cyxnPWUubW9udGhzLGI9ZS5zaG9ydE1vbnRoczt0LnV0Yz1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3RyeXtoYT1WZTt2YXIgdD1uZXcgaGE7cmV0dXJuIHQuXz1lLHIodCl9ZmluYWxseXtoYT1EYXRlfX12YXIgcj10KGUpO3JldHVybiBuLnBhcnNlPWZ1bmN0aW9uKGUpe3RyeXtoYT1WZTt2YXIgdD1yLnBhcnNlKGUpO3JldHVybiB0JiZ0Ll99ZmluYWxseXtoYT1EYXRlfX0sbi50b1N0cmluZz1yLnRvU3RyaW5nLG59LHQubXVsdGk9dC51dGMubXVsdGk9cHQ7dmFyIEU9cGkubWFwKCkseT1YZShtKSx2PSRlKG0pLFQ9WGUoaCksQT0kZShoKSxDPVhlKGcpLE89JGUoZyksUz1YZShiKSxSPSRlKGIpO2YuZm9yRWFjaChmdW5jdGlvbihlLHQpe0Uuc2V0KGUudG9Mb3dlckNhc2UoKSx0KX0pO3ZhciBqPXthOmZ1bmN0aW9uKGUpe3JldHVybiBoW2UuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGUpe3JldHVybiBtW2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGUpe3JldHVybiBiW2UuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oZSl7cmV0dXJuIGdbZS5nZXRNb250aCgpXX0sYzp0KGQpLGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS2UoZS5nZXREYXRlKCksdCwyKX0sZTpmdW5jdGlvbihlLHQpe3JldHVybiBLZShlLmdldERhdGUoKSx0LDIpfSxIOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKGUuZ2V0SG91cnMoKSx0LDIpfSxJOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKGUuZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX0sajpmdW5jdGlvbihlLHQpe3JldHVybiBLZSgxK21hLmRheU9mWWVhcihlKSx0LDMpfSxMOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX0sbTpmdW5jdGlvbihlLHQpe3JldHVybiBLZShlLmdldE1vbnRoKCkrMSx0LDIpfSxNOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKGUuZ2V0TWludXRlcygpLHQsMil9LHA6ZnVuY3Rpb24oZSl7cmV0dXJuIGZbKyhlLmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS2UoZS5nZXRTZWNvbmRzKCksdCwyKX0sVTpmdW5jdGlvbihlLHQpe3JldHVybiBLZShtYS5zdW5kYXlPZlllYXIoZSksdCwyKX0sdzpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXkoKX0sVzpmdW5jdGlvbihlLHQpe3JldHVybiBLZShtYS5tb25kYXlPZlllYXIoZSksdCwyKX0seDp0KF8pLFg6dChwKSx5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX0sWTpmdW5jdGlvbihlLHQpe3JldHVybiBLZShlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9LFo6ZHQsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0seD17YTpyLEE6byxiOnMsQjppLGM6YSxkOnN0LGU6c3QsSDphdCxJOmF0LGo6aXQsTDpjdCxtOm90LE06bHQscDpjLFM6dXQsVTpKZSx3OlFlLFc6WmUseDpsLFg6dSx5OnR0LFk6ZXQsWjpudCwiJSI6X3R9O3JldHVybiB0fWZ1bmN0aW9uIEtlKGUsdCxuKXt2YXIgcj1lPDA/Ii0iOiIiLG89KHI/LWU6ZSkrIiIscz1vLmxlbmd0aDtyZXR1cm4gcisoczxuP25ldyBBcnJheShuLXMrMSkuam9pbih0KStvOm8pfWZ1bmN0aW9uIFhlKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcChwaS5yZXF1b3RlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gJGUoZSl7Zm9yKHZhciB0PW5ldyBmLG49LTEscj1lLmxlbmd0aDsrK248cjspdC5zZXQoZVtuXS50b0xvd2VyQ2FzZSgpLG4pO3JldHVybiB0fWZ1bmN0aW9uIFFlKGUsdCxuKXtFYS5sYXN0SW5kZXg9MDt2YXIgcj1FYS5leGVjKHQuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8oZS53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEplKGUsdCxuKXtFYS5sYXN0SW5kZXg9MDt2YXIgcj1FYS5leGVjKHQuc2xpY2UobikpO3JldHVybiByPyhlLlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmUoZSx0LG4pe0VhLmxhc3RJbmRleD0wO3ZhciByPUVhLmV4ZWModC5zbGljZShuKSk7cmV0dXJuIHI/KGUuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBldChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbis0KSk7cmV0dXJuIHI/KGUueT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0dChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUueT1ydCgrclswXSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnQoZSx0LG4pe3JldHVybi9eWystXVxkezR9JC8udGVzdCh0PXQuc2xpY2UobixuKzUpKT8oZS5aPS10LG4rNSk6LTF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUrKGU+Njg/MTkwMDoyZTMpfWZ1bmN0aW9uIG90KGUsdCxuKXtFYS5sYXN0SW5kZXg9MDt2YXIgcj1FYS5leGVjKHQuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8oZS5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpdChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KGUuaj0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhdChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1dChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KGUuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjdChlLHQsbil7RWEubGFzdEluZGV4PTA7dmFyIHI9RWEuZXhlYyh0LnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KGUuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdChlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCksbj10PjA/Ii0iOiIrIixyPUFpKHQpLzYwfDAsbz1BaSh0KSU2MDtyZXR1cm4gbitLZShyLCIwIiwyKStLZShvLCIwIiwyKX1mdW5jdGlvbiBfdChlLHQsbil7eWEubGFzdEluZGV4PTA7dmFyIHI9eWEuZXhlYyh0LnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBwdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj0tMTsrK248dDspZVtuXVswXT10aGlzKGVbbl1bMF0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49MCxyPWVbbl07IXJbMV0odCk7KXI9ZVsrK25dO3JldHVybiByWzBdKHQpfX1mdW5jdGlvbiBmdCgpe31mdW5jdGlvbiBtdChlLHQsbil7dmFyIHI9bi5zPWUrdCxvPXItZSxzPXItbztuLnQ9ZS1zKyh0LW8pfWZ1bmN0aW9uIGh0KGUsdCl7ZSYmQ2EuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmQ2FbZS50eXBlXShlLHQpfWZ1bmN0aW9uIGd0KGUsdCxuKXt2YXIgcixvPS0xLHM9ZS5sZW5ndGgtbjtmb3IodC5saW5lU3RhcnQoKTsrK288czspcj1lW29dLHQucG9pbnQoclswXSxyWzFdLHJbMl0pO3QubGluZUVuZCgpfWZ1bmN0aW9uIGJ0KGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK248cjspZ3QoZVtuXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIEV0KCl7ZnVuY3Rpb24gZShlLHQpe2UqPVlpLHQ9dCpZaS8yK0dpLzQ7dmFyIG49ZS1yLGk9bj49MD8xOi0xLGE9aSpuLGw9TWF0aC5jb3ModCksdT1NYXRoLnNpbih0KSxjPXMqdSxkPW8qbCtjKk1hdGguY29zKGEpLF89YyppKk1hdGguc2luKGEpO1NhLmFkZChNYXRoLmF0YW4yKF8sZCkpLHI9ZSxvPWwscz11fXZhciB0LG4scixvLHM7UmEucG9pbnQ9ZnVuY3Rpb24oaSxhKXtSYS5wb2ludD1lLHI9KHQ9aSkqWWksbz1NYXRoLmNvcyhhPShuPWEpKllpLzIrR2kvNCkscz1NYXRoLnNpbihhKX0sUmEubGluZUVuZD1mdW5jdGlvbigpe2UodCxuKX19ZnVuY3Rpb24geXQoZSl7dmFyIHQ9ZVswXSxuPWVbMV0scj1NYXRoLmNvcyhuKTtyZXR1cm5bcipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKG4pXX1mdW5jdGlvbiB2dChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiBUdChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gQXQoZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBDdChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gT3QoZSl7dmFyIHQ9TWF0aC5zcXJ0KGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH1mdW5jdGlvbiBTdChlKXtyZXR1cm5bTWF0aC5hdGFuMihlWzFdLGVbMF0pLGllKGVbMl0pXX1mdW5jdGlvbiBSdChlLHQpe3JldHVybiBBaShlWzBdLXRbMF0pPEJpJiZBaShlWzFdLXRbMV0pPEJpfWZ1bmN0aW9uIGp0KGUsdCl7ZSo9WWk7dmFyIG49TWF0aC5jb3ModCo9WWkpO3h0KG4qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbih0KSl9ZnVuY3Rpb24geHQoZSx0LG4peysramEsTGErPShlLUxhKS9qYSxEYSs9KHQtRGEpL2phLHdhKz0obi13YSkvamF9ZnVuY3Rpb24gTHQoKXtmdW5jdGlvbiBlKGUsbyl7ZSo9WWk7dmFyIHM9TWF0aC5jb3Mobyo9WWkpLGk9cypNYXRoLmNvcyhlKSxhPXMqTWF0aC5zaW4oZSksbD1NYXRoLnNpbihvKSx1PU1hdGguYXRhbjIoTWF0aC5zcXJ0KCh1PW4qbC1yKmEpKnUrKHU9cippLXQqbCkqdSsodT10KmEtbippKSp1KSx0KmkrbiphK3IqbCk7eGErPXUsTWErPXUqKHQrKHQ9aSkpLGthKz11KihuKyhuPWEpKSxJYSs9dSoocisocj1sKSkseHQodCxuLHIpfXZhciB0LG4scjtGYS5wb2ludD1mdW5jdGlvbihvLHMpe28qPVlpO3ZhciBpPU1hdGguY29zKHMqPVlpKTt0PWkqTWF0aC5jb3Mobyksbj1pKk1hdGguc2luKG8pLHI9TWF0aC5zaW4ocyksRmEucG9pbnQ9ZSx4dCh0LG4scil9fWZ1bmN0aW9uIER0KCl7RmEucG9pbnQ9anR9ZnVuY3Rpb24gd3QoKXtmdW5jdGlvbiBlKGUsdCl7ZSo9WWk7dmFyIG49TWF0aC5jb3ModCo9WWkpLGk9bipNYXRoLmNvcyhlKSxhPW4qTWF0aC5zaW4oZSksbD1NYXRoLnNpbih0KSx1PW8qbC1zKmEsYz1zKmktcipsLGQ9ciphLW8qaSxfPU1hdGguc3FydCh1KnUrYypjK2QqZCkscD1yKmkrbyphK3MqbCxmPV8mJi1zZShwKS9fLG09TWF0aC5hdGFuMihfLHApO1BhKz1mKnUsTmErPWYqYyxIYSs9ZipkLHhhKz1tLE1hKz1tKihyKyhyPWkpKSxrYSs9bSoobysobz1hKSksSWErPW0qKHMrKHM9bCkpLHh0KHIsbyxzKX12YXIgdCxuLHIsbyxzO0ZhLnBvaW50PWZ1bmN0aW9uKGksYSl7dD1pLG49YSxGYS5wb2ludD1lLGkqPVlpO3ZhciBsPU1hdGguY29zKGEqPVlpKTtyPWwqTWF0aC5jb3MoaSksbz1sKk1hdGguc2luKGkpLHM9TWF0aC5zaW4oYSkseHQocixvLHMpfSxGYS5saW5lRW5kPWZ1bmN0aW9uKCl7ZSh0LG4pLEZhLmxpbmVFbmQ9RHQsRmEucG9pbnQ9anR9fWZ1bmN0aW9uIE10KGUsdCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPWUobixyKSx0KG5bMF0sblsxXSl9cmV0dXJuIGUuaW52ZXJ0JiZ0LmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49dC5pbnZlcnQobixyKSkmJmUuaW52ZXJ0KG5bMF0sblsxXSl9KSxufWZ1bmN0aW9uIGt0KCl7cmV0dXJuITB9ZnVuY3Rpb24gSXQoZSx0LG4scixvKXt2YXIgcz1bXSxpPVtdO2lmKGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZighKCh0PWUubGVuZ3RoLTEpPD0wKSl7dmFyIHQsbj1lWzBdLHI9ZVt0XTtpZihSdChuLHIpKXtvLmxpbmVTdGFydCgpO2Zvcih2YXIgYT0wO2E8dDsrK2Epby5wb2ludCgobj1lW2FdKVswXSxuWzFdKTtyZXR1cm4gdm9pZCBvLmxpbmVFbmQoKX12YXIgbD1uZXcgTnQobixlLG51bGwsITApLHU9bmV3IE50KG4sbnVsbCxsLCExKTtsLm89dSxzLnB1c2gobCksaS5wdXNoKHUpLGw9bmV3IE50KHIsZSxudWxsLCExKSx1PW5ldyBOdChyLG51bGwsbCwhMCksbC5vPXUscy5wdXNoKGwpLGkucHVzaCh1KX19KSxpLnNvcnQodCksUHQocyksUHQoaSkscy5sZW5ndGgpe2Zvcih2YXIgYT0wLGw9bix1PWkubGVuZ3RoO2E8dTsrK2EpaVthXS5lPWw9IWw7Zm9yKHZhciBjLGQsXz1zWzBdOzspe2Zvcih2YXIgcD1fLGY9ITA7cC52OylpZigocD1wLm4pPT09XylyZXR1cm47Yz1wLnosby5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihmKWZvcih2YXIgYT0wLHU9Yy5sZW5ndGg7YTx1OysrYSlvLnBvaW50KChkPWNbYV0pWzBdLGRbMV0pO2Vsc2UgcihwLngscC5uLngsMSxvKTtwPXAubn1lbHNle2lmKGYpe2M9cC5wLno7Zm9yKHZhciBhPWMubGVuZ3RoLTE7YT49MDstLWEpby5wb2ludCgoZD1jW2FdKVswXSxkWzFdKX1lbHNlIHIocC54LHAucC54LC0xLG8pO3A9cC5wfXA9cC5vLGM9cC56LGY9IWZ9d2hpbGUoIXAudik7by5saW5lRW5kKCl9fX1mdW5jdGlvbiBQdChlKXtpZih0PWUubGVuZ3RoKXtmb3IodmFyIHQsbixyPTAsbz1lWzBdOysrcjx0OylvLm49bj1lW3JdLG4ucD1vLG89bjtvLm49bj1lWzBdLG4ucD1vfX1mdW5jdGlvbiBOdChlLHQsbixyKXt0aGlzLng9ZSx0aGlzLno9dCx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIEh0KGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbihvLHMpe2Z1bmN0aW9uIGkodCxuKXt2YXIgcj1vKHQsbik7ZSh0PXJbMF0sbj1yWzFdKSYmcy5wb2ludCh0LG4pfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1vKGUsdCk7aC5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIGwoKXtiLnBvaW50PWEsaC5saW5lU3RhcnQoKX1mdW5jdGlvbiB1KCl7Yi5wb2ludD1pLGgubGluZUVuZCgpfWZ1bmN0aW9uIGMoZSx0KXttLnB1c2goW2UsdF0pO3ZhciBuPW8oZSx0KTt5LnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gZCgpe3kubGluZVN0YXJ0KCksbT1bXX1mdW5jdGlvbiBfKCl7YyhtWzBdWzBdLG1bMF1bMV0pLHkubGluZUVuZCgpO3ZhciBlLHQ9eS5jbGVhbigpLG49RS5idWZmZXIoKSxyPW4ubGVuZ3RoO2lmKG0ucG9wKCksZi5wdXNoKG0pLG09bnVsbCxyKWlmKDEmdCl7ZT1uWzBdO3ZhciBvLHI9ZS5sZW5ndGgtMSxpPS0xO2lmKHI+MCl7Zm9yKHZ8fChzLnBvbHlnb25TdGFydCgpLHY9ITApLHMubGluZVN0YXJ0KCk7KytpPHI7KXMucG9pbnQoKG89ZVtpXSlbMF0sb1sxXSk7cy5saW5lRW5kKCl9fWVsc2Ugcj4xJiYyJnQmJm4ucHVzaChuLnBvcCgpLmNvbmNhdChuLnNoaWZ0KCkpKSxwLnB1c2gobi5maWx0ZXIoRnQpKX12YXIgcCxmLG0saD10KHMpLGc9by5pbnZlcnQoclswXSxyWzFdKSxiPXtwb2ludDppLGxpbmVTdGFydDpsLGxpbmVFbmQ6dSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiLnBvaW50PWMsYi5saW5lU3RhcnQ9ZCxiLmxpbmVFbmQ9XyxwPVtdLGY9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtiLnBvaW50PWksYi5saW5lU3RhcnQ9bCxiLmxpbmVFbmQ9dSxwPXBpLm1lcmdlKHApO3ZhciBlPVd0KGcsZik7cC5sZW5ndGg/KHZ8fChzLnBvbHlnb25TdGFydCgpLHY9ITApLEl0KHAsVXQsZSxuLHMpKTplJiYodnx8KHMucG9seWdvblN0YXJ0KCksdj0hMCkscy5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHMpLHMubGluZUVuZCgpKSx2JiYocy5wb2x5Z29uRW5kKCksdj0hMSkscD1mPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe3MucG9seWdvblN0YXJ0KCkscy5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHMpLHMubGluZUVuZCgpLHMucG9seWdvbkVuZCgpfX0sRT1CdCgpLHk9dChFKSx2PSExO3JldHVybiBifX1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBCdCgpe3ZhciBlLHQ9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QucHVzaChlPVtdKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtlLnB1c2goW3Qsbl0pfSxsaW5lRW5kOlMsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIG49dDtyZXR1cm4gdD1bXSxlPW51bGwsbn0scmVqb2luOmZ1bmN0aW9uKCl7dC5sZW5ndGg+MSYmdC5wdXNoKHQucG9wKCkuY29uY2F0KHQuc2hpZnQoKSkpfX19ZnVuY3Rpb24gVXQoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tV2ktQmk6V2ktZVsxXSktKCh0PXQueClbMF08MD90WzFdLVdpLUJpOldpLXRbMV0pfWZ1bmN0aW9uIEd0KGUpe3ZhciB0LG49TmFOLHI9TmFOLG89TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24ocyxpKXt2YXIgYT1zPjA/R2k6LUdpLGw9QWkocy1uKTtBaShsLUdpKTxCaT8oZS5wb2ludChuLHI9KHIraSkvMj4wP1dpOi1XaSksZS5wb2ludChvLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChhLHIpLGUucG9pbnQocyxyKSx0PTApOm8hPT1hJiZsPj1HaSYmKEFpKG4tbyk8QmkmJihuLT1vKkJpKSxBaShzLWEpPEJpJiYocy09YSpCaSkscj16dChuLHIscyxpKSxlLnBvaW50KG8sciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KGEsciksdD0wKSxlLnBvaW50KG49cyxyPWkpLG89YX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLG49cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIHp0KGUsdCxuLHIpe3ZhciBvLHMsaT1NYXRoLnNpbihlLW4pO3JldHVybiBBaShpKT5CaT9NYXRoLmF0YW4oKE1hdGguc2luKHQpKihzPU1hdGguY29zKHIpKSpNYXRoLnNpbihuKS1NYXRoLnNpbihyKSoobz1NYXRoLmNvcyh0KSkqTWF0aC5zaW4oZSkpLyhvKnMqaSkpOih0K3IpLzJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7dmFyIG87aWYobnVsbD09ZSlvPW4qV2ksci5wb2ludCgtR2ksbyksci5wb2ludCgwLG8pLHIucG9pbnQoR2ksbyksci5wb2ludChHaSwwKSxyLnBvaW50KEdpLC1vKSxyLnBvaW50KDAsLW8pLHIucG9pbnQoLUdpLC1vKSxyLnBvaW50KC1HaSwwKSxyLnBvaW50KC1HaSxvKTtlbHNlIGlmKEFpKGVbMF0tdFswXSk+Qmkpe3ZhciBzPWVbMF08dFswXT9HaTotR2k7bz1uKnMvMixyLnBvaW50KC1zLG8pLHIucG9pbnQoMCxvKSxyLnBvaW50KHMsbyl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gV3QoZSx0KXt2YXIgbj1lWzBdLHI9ZVsxXSxvPVtNYXRoLnNpbihuKSwtTWF0aC5jb3MobiksMF0scz0wLGk9MDtTYS5yZXNldCgpO2Zvcih2YXIgYT0wLGw9dC5sZW5ndGg7YTxsOysrYSl7dmFyIHU9dFthXSxjPXUubGVuZ3RoO2lmKGMpZm9yKHZhciBkPXVbMF0sXz1kWzBdLHA9ZFsxXS8yK0dpLzQsZj1NYXRoLnNpbihwKSxtPU1hdGguY29zKHApLGg9MTs7KXtoPT09YyYmKGg9MCksZT11W2hdO3ZhciBnPWVbMF0sYj1lWzFdLzIrR2kvNCxFPU1hdGguc2luKGIpLHk9TWF0aC5jb3MoYiksdj1nLV8sVD12Pj0wPzE6LTEsQT1UKnYsQz1BPkdpLE89ZipFO2lmKFNhLmFkZChNYXRoLmF0YW4yKE8qVCpNYXRoLnNpbihBKSxtKnkrTypNYXRoLmNvcyhBKSkpLHMrPUM/ditUKnppOnYsQ15fPj1uXmc+PW4pe3ZhciBTPVR0KHl0KGQpLHl0KGUpKTtPdChTKTt2YXIgUj1UdChvLFMpO090KFIpO3ZhciBqPShDXnY+PTA/LTE6MSkqaWUoUlsyXSk7KHI+anx8cj09PWomJihTWzBdfHxTWzFdKSkmJihpKz1DXnY+PTA/MTotMSl9aWYoIWgrKylicmVhaztfPWcsZj1FLG09eSxkPWV9fXJldHVybihzPC1CaXx8czxCaSYmU2E8LUJpKV4xJml9ZnVuY3Rpb24gWXQoZSl7ZnVuY3Rpb24gdChlLHQpe3JldHVybiBNYXRoLmNvcyhlKSpNYXRoLmNvcyh0KT5zfWZ1bmN0aW9uIG4oZSl7dmFyIG4scyxsLHUsYztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1sPSExLGM9MX0scG9pbnQ6ZnVuY3Rpb24oZCxfKXt2YXIgcCxmPVtkLF9dLG09dChkLF8pLGg9aT9tPzA6byhkLF8pOm0/byhkKyhkPDA/R2k6LUdpKSxfKTowO2lmKCFuJiYodT1sPW0pJiZlLmxpbmVTdGFydCgpLG0hPT1sJiYocD1yKG4sZiksKFJ0KG4scCl8fFJ0KGYscCkpJiYoZlswXSs9QmksZlsxXSs9QmksbT10KGZbMF0sZlsxXSkpKSxtIT09bCljPTAsbT8oZS5saW5lU3RhcnQoKSxwPXIoZixuKSxlLnBvaW50KHBbMF0scFsxXSkpOihwPXIobixmKSxlLnBvaW50KHBbMF0scFsxXSksZS5saW5lRW5kKCkpLG49cDtlbHNlIGlmKGEmJm4mJmlebSl7dmFyIGc7aCZzfHwhKGc9cihmLG4sITApKXx8KGM9MCxpPyhlLmxpbmVTdGFydCgpLGUucG9pbnQoZ1swXVswXSxnWzBdWzFdKSxlLnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksZS5saW5lRW5kKCkpOihlLnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KGdbMF1bMF0sZ1swXVsxXSkpKX0hbXx8biYmUnQobixmKXx8ZS5wb2ludChmWzBdLGZbMV0pLG49ZixsPW0scz1ofSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmZS5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBjfCh1JiZsKTw8MX19fWZ1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXl0KGUpLG89eXQodCksaT1bMSwwLDBdLGE9VHQocixvKSxsPXZ0KGEsYSksdT1hWzBdLGM9bC11KnU7aWYoIWMpcmV0dXJuIW4mJmU7dmFyIGQ9cypsL2MsXz0tcyp1L2MscD1UdChpLGEpLGY9Q3QoaSxkKTtBdChmLEN0KGEsXykpO3ZhciBtPXAsaD12dChmLG0pLGc9dnQobSxtKSxiPWgqaC1nKih2dChmLGYpLTEpO2lmKCEoYjwwKSl7dmFyIEU9TWF0aC5zcXJ0KGIpLHk9Q3QobSwoLWgtRSkvZyk7aWYoQXQoeSxmKSx5PVN0KHkpLCFuKXJldHVybiB5O3ZhciB2LFQ9ZVswXSxBPXRbMF0sQz1lWzFdLE89dFsxXTtBPFQmJih2PVQsVD1BLEE9dik7dmFyIFM9QS1ULFI9QWkoUy1HaSk8Qmksaj1SfHxTPEJpO2lmKCFSJiZPPEMmJih2PUMsQz1PLE89diksaj9SP0MrTz4wXnlbMV08KEFpKHlbMF0tVCk8Qmk/QzpPKTpDPD15WzFdJiZ5WzFdPD1POlM+R2leKFQ8PXlbMF0mJnlbMF08PUEpKXt2YXIgeD1DdChtLCgtaCtFKS9nKTtyZXR1cm4gQXQoeCxmKSxbeSxTdCh4KV19fX1mdW5jdGlvbiBvKHQsbil7dmFyIHI9aT9lOkdpLWUsbz0wO3JldHVybiB0PC1yP298PTE6dD5yJiYob3w9Miksbjwtcj9vfD00Om4+ciYmKG98PTgpLG99dmFyIHM9TWF0aC5jb3MoZSksaT1zPjAsYT1BaShzKT5CaTtyZXR1cm4gSHQodCxuLHluKGUsNipZaSksaT9bMCwtZV06Wy1HaSxlLUdpXSl9ZnVuY3Rpb24gcXQoZSx0LG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzLGk9by5hLGE9by5iLGw9aS54LHU9aS55LGM9YS54LGQ9YS55LF89MCxwPTEsZj1jLWwsbT1kLXU7aWYocz1lLWwsZnx8IShzPjApKXtpZihzLz1mLGY8MCl7aWYoczxfKXJldHVybjtzPHAmJihwPXMpfWVsc2UgaWYoZj4wKXtpZihzPnApcmV0dXJuO3M+XyYmKF89cyl9aWYocz1uLWwsZnx8IShzPDApKXtpZihzLz1mLGY8MCl7aWYocz5wKXJldHVybjtzPl8mJihfPXMpfWVsc2UgaWYoZj4wKXtpZihzPF8pcmV0dXJuO3M8cCYmKHA9cyl9aWYocz10LXUsbXx8IShzPjApKXtpZihzLz1tLG08MCl7aWYoczxfKXJldHVybjtzPHAmJihwPXMpfWVsc2UgaWYobT4wKXtpZihzPnApcmV0dXJuO3M+XyYmKF89cyl9aWYocz1yLXUsbXx8IShzPDApKXtpZihzLz1tLG08MCl7aWYocz5wKXJldHVybjtzPl8mJihfPXMpfWVsc2UgaWYobT4wKXtpZihzPF8pcmV0dXJuO3M8cCYmKHA9cyl9cmV0dXJuIF8+MCYmKG8uYT17eDpsK18qZix5OnUrXyptfSkscDwxJiYoby5iPXt4OmwrcCpmLHk6dStwKm19KSxvfX19fX19ZnVuY3Rpb24gS3QoZSx0LG4scil7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBBaShyWzBdLWUpPEJpP28+MD8wOjM6QWkoclswXS1uKTxCaT9vPjA/MjoxOkFpKHJbMV0tdCk8Qmk/bz4wPzE6MDpvPjA/MzoyfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gaShlLngsdC54KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49byhlLDEpLHI9byh0LDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/dFsxXS1lWzFdOjE9PT1uP2VbMF0tdFswXToyPT09bj9lWzFdLXRbMV06dFswXS1lWzBdfXJldHVybiBmdW5jdGlvbihhKXtmdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD0wLG49aC5sZW5ndGgscj1lWzFdLG89MDtvPG47KytvKWZvcih2YXIgcyxpPTEsYT1oW29dLGw9YS5sZW5ndGgsdT1hWzBdO2k8bDsrK2kpcz1hW2ldLHVbMV08PXI/c1sxXT5yJiZvZSh1LHMsZSk+MCYmKyt0OnNbMV08PXImJm9lKHUscyxlKTwwJiYtLXQsdT1zO3JldHVybiAwIT09dH1mdW5jdGlvbiB1KHMsYSxsLHUpe3ZhciBjPTAsZD0wO2lmKG51bGw9PXN8fChjPW8ocyxsKSkhPT0oZD1vKGEsbCkpfHxpKHMsYSk8MF5sPjApZG97dS5wb2ludCgwPT09Y3x8Mz09PWM/ZTpuLGM+MT9yOnQpfXdoaWxlKChjPShjK2wrNCklNCkhPT1kKTtlbHNlIHUucG9pbnQoYVswXSxhWzFdKX1mdW5jdGlvbiBjKG8scyl7cmV0dXJuIGU8PW8mJm88PW4mJnQ8PXMmJnM8PXJ9ZnVuY3Rpb24gZChlLHQpe2MoZSx0KSYmYS5wb2ludChlLHQpfWZ1bmN0aW9uIF8oKXt4LnBvaW50PWYsaCYmaC5wdXNoKGc9W10pLEM9ITAsQT0hMSx2PVQ9TmFOfWZ1bmN0aW9uIHAoKXttJiYoZihiLEUpLHkmJkEmJlIucmVqb2luKCksbS5wdXNoKFIuYnVmZmVyKCkpKSx4LnBvaW50PWQsQSYmYS5saW5lRW5kKCl9ZnVuY3Rpb24gZihlLHQpe2U9TWF0aC5tYXgoLVVhLE1hdGgubWluKFVhLGUpKSx0PU1hdGgubWF4KC1VYSxNYXRoLm1pbihVYSx0KSk7dmFyIG49YyhlLHQpO2lmKGgmJmcucHVzaChbZSx0XSksQyliPWUsRT10LHk9bixDPSExLG4mJihhLmxpbmVTdGFydCgpLGEucG9pbnQoZSx0KSk7ZWxzZSBpZihuJiZBKWEucG9pbnQoZSx0KTtlbHNle3ZhciByPXthOnt4OnYseTpUfSxiOnt4OmUseTp0fX07aihyKT8oQXx8KGEubGluZVN0YXJ0KCksYS5wb2ludChyLmEueCxyLmEueSkpLGEucG9pbnQoci5iLngsci5iLnkpLG58fGEubGluZUVuZCgpLE89ITEpOm4mJihhLmxpbmVTdGFydCgpLGEucG9pbnQoZSx0KSxPPSExKX12PWUsVD10LEE9bn12YXIgbSxoLGcsYixFLHksdixULEEsQyxPLFM9YSxSPUJ0KCksaj1xdChlLHQsbixyKSx4PXtwb2ludDpkLGxpbmVTdGFydDpfLGxpbmVFbmQ6cCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthPVIsbT1bXSxoPVtdLE89ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthPVMsbT1waS5tZXJnZShtKTt2YXIgdD1sKFtlLHJdKSxuPU8mJnQsbz1tLmxlbmd0aDsobnx8bykmJihhLnBvbHlnb25TdGFydCgpLG4mJihhLmxpbmVTdGFydCgpLHUobnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLG8mJkl0KG0scyx0LHUsYSksYS5wb2x5Z29uRW5kKCkpLG09aD1nPW51bGx9fTtyZXR1cm4geH19ZnVuY3Rpb24gWHQoZSl7dmFyIHQ9MCxuPUdpLzMscj1fbihlKSxvPXIodCxuKTtyZXR1cm4gby5wYXJhbGxlbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PWVbMF0qR2kvMTgwLG49ZVsxXSpHaS8xODApOlt0L0dpKjE4MCxuL0dpKjE4MF19LG99ZnVuY3Rpb24gJHQoZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49TWF0aC5zcXJ0KHMtMipvKk1hdGguc2luKHQpKS9vO3JldHVybltuKk1hdGguc2luKGUqPW8pLGktbipNYXRoLmNvcyhlKV19dmFyIHI9TWF0aC5zaW4oZSksbz0ocitNYXRoLnNpbih0KSkvMixzPTErciooMipvLXIpLGk9TWF0aC5zcXJ0KHMpL287cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49aS10O3JldHVybltNYXRoLmF0YW4yKGUsbikvbyxpZSgocy0oZSplK24qbikqbypvKS8oMipvKSldfSxufWZ1bmN0aW9uIFF0KCl7ZnVuY3Rpb24gZShlLHQpe3phKz1vKmUtcip0LHI9ZSxvPXR9dmFyIHQsbixyLG87S2EucG9pbnQ9ZnVuY3Rpb24ocyxpKXtLYS5wb2ludD1lLHQ9cj1zLG49bz1pfSxLYS5saW5lRW5kPWZ1bmN0aW9uKCl7ZSh0LG4pfX1mdW5jdGlvbiBKdChlLHQpe2U8VmEmJihWYT1lKSxlPllhJiYoWWE9ZSksdDxXYSYmKFdhPXQpLHQ+cWEmJihxYT10KX1mdW5jdGlvbiBadCgpe2Z1bmN0aW9uIGUoZSx0KXtpLnB1c2goIk0iLGUsIiwiLHQscyl9ZnVuY3Rpb24gdChlLHQpe2kucHVzaCgiTSIsZSwiLCIsdCksYS5wb2ludD1ufWZ1bmN0aW9uIG4oZSx0KXtpLnB1c2goIkwiLGUsIiwiLHQpfWZ1bmN0aW9uIHIoKXthLnBvaW50PWV9ZnVuY3Rpb24gbygpe2kucHVzaCgiWiIpfXZhciBzPWVuKDQuNSksaT1bXSxhPXtwb2ludDplLGxpbmVTdGFydDpmdW5jdGlvbigpe2EucG9pbnQ9dH0sbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2EubGluZUVuZD1vfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YS5saW5lRW5kPXIsYS5wb2ludD1lfSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4gcz1lbihlKSxhfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihpLmxlbmd0aCl7dmFyIGU9aS5qb2luKCIiKTtyZXR1cm4gaT1bXSxlfX19O3JldHVybiBhfWZ1bmN0aW9uIGVuKGUpe3JldHVybiJtMCwiK2UrImEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrLTIqZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIisyKmUrInoifWZ1bmN0aW9uIHRuKGUsdCl7TGErPWUsRGErPXQsKyt3YX1mdW5jdGlvbiBubigpe2Z1bmN0aW9uIGUoZSxyKXt2YXIgbz1lLXQscz1yLW4saT1NYXRoLnNxcnQobypvK3Mqcyk7TWErPWkqKHQrZSkvMixrYSs9aSoobityKS8yLElhKz1pLHRuKHQ9ZSxuPXIpfXZhciB0LG47JGEucG9pbnQ9ZnVuY3Rpb24ocixvKXskYS5wb2ludD1lLHRuKHQ9cixuPW8pfX1mdW5jdGlvbiBybigpeyRhLnBvaW50PXRufWZ1bmN0aW9uIG9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPWUtcixzPXQtbyxpPU1hdGguc3FydChuKm4rcypzKTtNYSs9aSoocitlKS8yLGthKz1pKihvK3QpLzIsSWErPWksaT1vKmUtcip0LFBhKz1pKihyK2UpLE5hKz1pKihvK3QpLEhhKz0zKmksdG4ocj1lLG89dCl9dmFyIHQsbixyLG87JGEucG9pbnQ9ZnVuY3Rpb24ocyxpKXskYS5wb2ludD1lLHRuKHQ9cj1zLG49bz1pKX0sJGEubGluZUVuZD1mdW5jdGlvbigpe2UodCxuKX19ZnVuY3Rpb24gc24oZSl7ZnVuY3Rpb24gdCh0LG4pe2UubW92ZVRvKHQraSxuKSxlLmFyYyh0LG4saSwwLHppKX1mdW5jdGlvbiBuKHQsbil7ZS5tb3ZlVG8odCxuKSxhLnBvaW50PXJ9ZnVuY3Rpb24gcih0LG4pe2UubGluZVRvKHQsbil9ZnVuY3Rpb24gbygpe2EucG9pbnQ9dH1mdW5jdGlvbiBzKCl7ZS5jbG9zZVBhdGgoKX12YXIgaT00LjUsYT17cG9pbnQ6dCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PW59LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGluZUVuZD1vLGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGk9ZSxhfSxyZXN1bHQ6U307cmV0dXJuIGF9ZnVuY3Rpb24gYW4oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4oYT9yOm4pKGUpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGNuKHQsZnVuY3Rpb24obixyKXtuPWUobixyKSx0LnBvaW50KG5bMF0sblsxXSl9KX1mdW5jdGlvbiByKHQpe2Z1bmN0aW9uIG4obixyKXtuPWUobixyKSx0LnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gcigpe0U9TmFOLEMucG9pbnQ9cyx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHMobixyKXt2YXIgcz15dChbbixyXSksaT1lKG4scik7byhFLHksYix2LFQsQSxFPWlbMF0seT1pWzFdLGI9bix2PXNbMF0sVD1zWzFdLEE9c1syXSxhLHQpLHQucG9pbnQoRSx5KX1mdW5jdGlvbiBpKCl7Qy5wb2ludD1uLHQubGluZUVuZCgpfWZ1bmN0aW9uIGwoKXtyKCksQy5wb2ludD11LEMubGluZUVuZD1jfWZ1bmN0aW9uIHUoZSx0KXtzKGQ9ZSxfPXQpLHA9RSxmPXksbT12LGg9VCxnPUEsQy5wb2ludD1zfWZ1bmN0aW9uIGMoKXtvKEUseSxiLHYsVCxBLHAsZixkLG0saCxnLGEsdCksQy5saW5lRW5kPWksaSgpfXZhciBkLF8scCxmLG0saCxnLGIsRSx5LHYsVCxBLEM9e3BvaW50Om4sbGluZVN0YXJ0OnIsbGluZUVuZDppLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksQy5saW5lU3RhcnQ9bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLEMubGluZVN0YXJ0PXJ9fTtyZXR1cm4gQ31mdW5jdGlvbiBvKHQsbixyLGEsbCx1LGMsZCxfLHAsZixtLGgsZyl7dmFyIGI9Yy10LEU9ZC1uLHk9YipiK0UqRTtpZih5PjQqcyYmaC0tKXt2YXIgdj1hK3AsVD1sK2YsQT11K20sQz1NYXRoLnNxcnQodip2K1QqVCtBKkEpLE89TWF0aC5hc2luKEEvPUMpLFM9QWkoQWkoQSktMSk8Qml8fEFpKHItXyk8Qmk/KHIrXykvMjpNYXRoLmF0YW4yKFQsdiksUj1lKFMsTyksaj1SWzBdLHg9UlsxXSxMPWotdCxEPXgtbix3PUUqTC1iKkQ7KHcqdy95PnN8fEFpKChiKkwrRSpEKS95LS41KT4uM3x8YSpwK2wqZit1Km08aSkmJihvKHQsbixyLGEsbCx1LGoseCxTLHYvPUMsVC89QyxBLGgsZyksZy5wb2ludChqLHgpLG8oaix4LFMsdixULEEsYyxkLF8scCxmLG0saCxnKSl9fXZhciBzPS41LGk9TWF0aC5jb3MoMzAqWWkpLGE9MTY7cmV0dXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShzPWUqZSk+MCYmMTYsdCk6TWF0aC5zcXJ0KHMpfSx0fWZ1bmN0aW9uIGxuKGUpe3ZhciB0PWFuKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoW3QqcWksbipxaV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBwbih0KGUpKX19ZnVuY3Rpb24gdW4oZSl7dGhpcy5zdHJlYW09ZX1mdW5jdGlvbiBjbihlLHQpe3JldHVybntwb2ludDp0LHNwaGVyZTpmdW5jdGlvbigpe2Uuc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gZG4oZSl7cmV0dXJuIF9uKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSgpfWZ1bmN0aW9uIF9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGU9YShlWzBdKllpLGVbMV0qWWkpLFtlWzBdKl8rbCx1LWVbMV0qX119ZnVuY3Rpb24gbihlKXtyZXR1cm4oZT1hLmludmVydCgoZVswXS1sKS9fLCh1LWVbMV0pL18pKSYmW2VbMF0qcWksZVsxXSpxaV19ZnVuY3Rpb24gcigpe2E9TXQoaT1obihnLGIsRSkscyk7dmFyIGU9cyhtLGgpO3JldHVybiBsPXAtZVswXSpfLHU9ZitlWzFdKl8sbygpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gYyYmKGMudmFsaWQ9ITEsYz1udWxsKSx0fXZhciBzLGksYSxsLHUsYyxkPWFuKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9cyhlLHQpLFtlWzBdKl8rbCx1LWVbMV0qX119KSxfPTE1MCxwPTQ4MCxmPTI1MCxtPTAsaD0wLGc9MCxiPTAsRT0wLHk9QmEsdj1BLFQ9bnVsbCxDPW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiBjJiYoYy52YWxpZD0hMSksYz1wbih5KGksZCh2KGUpKSkpLGMudmFsaWQ9ITAsY30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9bnVsbD09ZT8oVD1lLEJhKTpZdCgoVD0rZSkqWWkpLG8oKSk6VH0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPWUsdj1lP0t0KGVbMF1bMF0sZVswXVsxXSxlWzFdWzBdLGVbMV1bMV0pOkEsbygpKTpDfSx0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPStlLHIoKSk6X30sdC50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K2VbMF0sZj0rZVsxXSxyKCkpOltwLGZdfSx0LmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lWzBdJTM2MCpZaSxoPWVbMV0lMzYwKllpLHIoKSk6W20qcWksaCpxaV19LHQucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWVbMF0lMzYwKllpLGI9ZVsxXSUzNjAqWWksRT1lLmxlbmd0aD4yP2VbMl0lMzYwKllpOjAscigpKTpbZypxaSxiKnFpLEUqcWldfSxwaS5yZWJpbmQodCxkLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuaW52ZXJ0PXMuaW52ZXJ0JiZuLHIoKX19ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGNuKGUsZnVuY3Rpb24odCxuKXtlLnBvaW50KHQqWWksbipZaSl9KX1mdW5jdGlvbiBmbihlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIG1uKGUsdCl7cmV0dXJuW2U+R2k/ZS16aTplPC1HaT9lK3ppOmUsdF19ZnVuY3Rpb24gaG4oZSx0LG4pe3JldHVybiBlP3R8fG4/TXQoYm4oZSksRW4odCxuKSk6Ym4oZSk6dHx8bj9Fbih0LG4pOm1ufWZ1bmN0aW9uIGduKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB0Kz1lLFt0PkdpP3Qtemk6dDwtR2k/dCt6aTp0LG5dfX1mdW5jdGlvbiBibihlKXt2YXIgdD1nbihlKTtyZXR1cm4gdC5pbnZlcnQ9Z24oLWUpLHR9ZnVuY3Rpb24gRW4oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49TWF0aC5jb3ModCksYT1NYXRoLmNvcyhlKSpuLGw9TWF0aC5zaW4oZSkqbix1PU1hdGguc2luKHQpLGM9dSpyK2EqbztyZXR1cm5bTWF0aC5hdGFuMihsKnMtYyppLGEqci11Km8pLGllKGMqcytsKmkpXX12YXIgcj1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpLHM9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNvcyh0KSxhPU1hdGguY29zKGUpKm4sbD1NYXRoLnNpbihlKSpuLHU9TWF0aC5zaW4odCksYz11KnMtbCppO3JldHVybltNYXRoLmF0YW4yKGwqcyt1KmksYSpyK2MqbyksaWUoYypyLWEqbyldfSxufWZ1bmN0aW9uIHluKGUsdCl7dmFyIG49TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKTtyZXR1cm4gZnVuY3Rpb24obyxzLGksYSl7dmFyIGw9aSp0O251bGwhPW8/KG89dm4obixvKSxzPXZuKG4scyksKGk+MD9vPHM6bz5zKSYmKG8rPWkqemkpKToobz1lK2kqemkscz1lLS41KmwpO2Zvcih2YXIgdSxjPW87aT4wP2M+czpjPHM7Yy09bClhLnBvaW50KCh1PVN0KFtuLC1yKk1hdGguY29zKGMpLC1yKk1hdGguc2luKGMpXSkpWzBdLHVbMV0pfX1mdW5jdGlvbiB2bihlLHQpe3ZhciBuPXl0KHQpO25bMF0tPWUsT3Qobik7dmFyIHI9c2UoLW5bMV0pO3JldHVybigoLW5bMl08MD8tcjpyKSsyKk1hdGguUEktQmkpJSgyKk1hdGguUEkpfWZ1bmN0aW9uIFRuKGUsdCxuKXt2YXIgcj1waS5yYW5nZShlLHQtQmksbikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW2UsdF19KX19ZnVuY3Rpb24gQW4oZSx0LG4pe3ZhciByPXBpLnJhbmdlKGUsdC1CaSxuKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdCxlXX0pfX1mdW5jdGlvbiBDbihlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIFNuKGUsdCxuLHIpe3ZhciBvPU1hdGguY29zKHQpLHM9TWF0aC5zaW4odCksaT1NYXRoLmNvcyhyKSxhPU1hdGguc2luKHIpLGw9bypNYXRoLmNvcyhlKSx1PW8qTWF0aC5zaW4oZSksYz1pKk1hdGguY29zKG4pLGQ9aSpNYXRoLnNpbihuKSxfPTIqTWF0aC5hc2luKE1hdGguc3FydChjZShyLXQpK28qaSpjZShuLWUpKSkscD0xL01hdGguc2luKF8pLGY9Xz9mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNpbihlKj1fKSpwLG49TWF0aC5zaW4oXy1lKSpwLHI9bipsK3QqYyxvPW4qdSt0KmQsaT1uKnMrdCphO3JldHVybltNYXRoLmF0YW4yKG8scikqcWksTWF0aC5hdGFuMihpLE1hdGguc3FydChyKnIrbypvKSkqcWldfTpmdW5jdGlvbigpe3JldHVybltlKnFpLHQqcWldfTtyZXR1cm4gZi5kaXN0YW5jZT1fLGZ9ZnVuY3Rpb24gUm4oKXtmdW5jdGlvbiBlKGUsbyl7dmFyIHM9TWF0aC5zaW4obyo9WWkpLGk9TWF0aC5jb3MobyksYT1BaSgoZSo9WWkpLXQpLGw9TWF0aC5jb3MoYSk7UWErPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChhPWkqTWF0aC5zaW4oYSkpKmErKGE9cipzLW4qaSpsKSphKSxuKnMrcippKmwpLHQ9ZSxuPXMscj1pfXZhciB0LG4scjtKYS5wb2ludD1mdW5jdGlvbihvLHMpe3Q9bypZaSxuPU1hdGguc2luKHMqPVlpKSxyPU1hdGguY29zKHMpLEphLnBvaW50PWV9LEphLmxpbmVFbmQ9ZnVuY3Rpb24oKXtKYS5wb2ludD1KYS5saW5lRW5kPVN9fWZ1bmN0aW9uIGpuKGUsdCl7ZnVuY3Rpb24gbih0LG4pe3ZhciByPU1hdGguY29zKHQpLG89TWF0aC5jb3Mobikscz1lKHIqbyk7cmV0dXJuW3MqbypNYXRoLnNpbih0KSxzKk1hdGguc2luKG4pXX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSxuKXt2YXIgcj1NYXRoLnNxcnQoZSplK24qbiksbz10KHIpLHM9TWF0aC5zaW4obyksaT1NYXRoLmNvcyhvKTtyZXR1cm5bTWF0aC5hdGFuMihlKnMscippKSxNYXRoLmFzaW4ociYmbipzL3IpXX0sbn1mdW5jdGlvbiB4bihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtpPjA/dDwtV2krQmkmJih0PS1XaStCaSk6dD5XaS1CaSYmKHQ9V2ktQmkpO3ZhciBuPWkvTWF0aC5wb3cobyh0KSxzKTtyZXR1cm5bbipNYXRoLnNpbihzKmUpLGktbipNYXRoLmNvcyhzKmUpXX12YXIgcj1NYXRoLmNvcyhlKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnRhbihHaS80K2UvMil9LHM9ZT09PXQ/TWF0aC5zaW4oZSk6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2cobyh0KS9vKGUpKSxpPXIqTWF0aC5wb3cobyhlKSxzKS9zO3JldHVybiBzPyhuLmludmVydD1mdW5jdGlvbihlLHQpe3ZhciBuPWktdCxyPXJlKHMpKk1hdGguc3FydChlKmUrbipuKTtyZXR1cm5bTWF0aC5hdGFuMihlLG4pL3MsMipNYXRoLmF0YW4oTWF0aC5wb3coaS9yLDEvcykpLVdpXX0sbik6RG59ZnVuY3Rpb24gTG4oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49cy10O3JldHVybltuKk1hdGguc2luKG8qZSkscy1uKk1hdGguY29zKG8qZSldfXZhciByPU1hdGguY29zKGUpLG89ZT09PXQ/TWF0aC5zaW4oZSk6KHItTWF0aC5jb3ModCkpLyh0LWUpLHM9ci9vK2U7cmV0dXJuIEFpKG8pPEJpP2ZuOihuLmludmVydD1mdW5jdGlvbihlLHQpe3ZhciBuPXMtdDtyZXR1cm5bTWF0aC5hdGFuMihlLG4pL28scy1yZShvKSpNYXRoLnNxcnQoZSplK24qbildfSxuKX1mdW5jdGlvbiBEbihlLHQpe3JldHVybltlLE1hdGgubG9nKE1hdGgudGFuKEdpLzQrdC8yKSldfWZ1bmN0aW9uIHduKGUpe3ZhciB0LG49ZG4oZSkscj1uLnNjYWxlLG89bi50cmFuc2xhdGUscz1uLmNsaXBFeHRlbnQ7cmV0dXJuIG4uc2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT1yLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gZT09PW4/dD9uLmNsaXBFeHRlbnQobnVsbCk6bjplfSxuLnRyYW5zbGF0ZT1mdW5jdGlvbigpe3ZhciBlPW8uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBlPT09bj90P24uY2xpcEV4dGVudChudWxsKTpuOmV9LG4uY2xpcEV4dGVudD1mdW5jdGlvbihlKXt2YXIgaT1zLmFwcGx5KG4sYXJndW1lbnRzKTtpZihpPT09bil7aWYodD1udWxsPT1lKXt2YXIgYT1HaSpyKCksbD1vKCk7cyhbW2xbMF0tYSxsWzFdLWFdLFtsWzBdK2EsbFsxXSthXV0pfX1lbHNlIHQmJihpPW51bGwpO3JldHVybiBpfSxuLmNsaXBFeHRlbnQobnVsbCl9ZnVuY3Rpb24gTW4oZSx0KXtyZXR1cm5bTWF0aC5sb2coTWF0aC50YW4oR2kvNCt0LzIpKSwtZV19ZnVuY3Rpb24ga24oZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gSW4oZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gUG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49WzAsMV0scj0yLG89MjtvPHQ7bysrKXtmb3IoO3I+MSYmb2UoZVtuW3ItMl1dLGVbbltyLTFdXSxlW29dKTw9MDspLS1yO25bcisrXT1vfXJldHVybiBuLnNsaWNlKDAscil9ZnVuY3Rpb24gTm4oZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19ZnVuY3Rpb24gSG4oZSx0LG4pe3JldHVybihuWzBdLXRbMF0pKihlWzFdLXRbMV0pPChuWzFdLXRbMV0pKihlWzBdLXRbMF0pfWZ1bmN0aW9uIEZuKGUsdCxuLHIpe3ZhciBvPWVbMF0scz1uWzBdLGk9dFswXS1vLGE9clswXS1zLGw9ZVsxXSx1PW5bMV0sYz10WzFdLWwsZD1yWzFdLXUsXz0oYSoobC11KS1kKihvLXMpKS8oZCppLWEqYyk7cmV0dXJuW28rXyppLGwrXypjXX1mdW5jdGlvbiBCbihlKXt2YXIgdD1lWzBdLG49ZVtlLmxlbmd0aC0xXTtyZXR1cm4hKHRbMF0tblswXXx8dFsxXS1uWzFdKX1mdW5jdGlvbiBVbigpe2xyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBHbihlKXt2YXIgdD1jbC5wb3AoKXx8bmV3IFVuO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIHpuKGUpe1puKGUpLGFsLnJlbW92ZShlKSxjbC5wdXNoKGUpLGxyKGUpfWZ1bmN0aW9uIFZuKGUpe3ZhciB0PWUuY2lyY2xlLG49dC54LHI9dC5jeSxvPXt4Om4seTpyfSxzPWUuUCxpPWUuTixhPVtlXTt6bihlKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmQWkobi1sLmNpcmNsZS54KTxCaSYmQWkoci1sLmNpcmNsZS5jeSk8Qmk7KXM9bC5QLGEudW5zaGlmdChsKSx6bihsKSxsPXM7YS51bnNoaWZ0KGwpLFpuKGwpO2Zvcih2YXIgdT1pO3UuY2lyY2xlJiZBaShuLXUuY2lyY2xlLngpPEJpJiZBaShyLXUuY2lyY2xlLmN5KTxCaTspaT11Lk4sYS5wdXNoKHUpLHpuKHUpLHU9aTthLnB1c2godSksWm4odSk7dmFyIGMsZD1hLmxlbmd0aDtmb3IoYz0xO2M8ZDsrK2MpdT1hW2NdLGw9YVtjLTFdLHNyKHUuZWRnZSxsLnNpdGUsdS5zaXRlLG8pO2w9YVswXSx1PWFbZC0xXSx1LmVkZ2U9cnIobC5zaXRlLHUuc2l0ZSxudWxsLG8pLEpuKGwpLEpuKHUpfWZ1bmN0aW9uIFduKGUpe2Zvcih2YXIgdCxuLHIsbyxzPWUueCxpPWUueSxhPWFsLl87YTspaWYoKHI9WW4oYSxpKS1zKT5CaSlhPWEuTDtlbHNle2lmKCEoKG89cy1xbihhLGkpKT5CaSkpe3I+LUJpPyh0PWEuUCxuPWEpOm8+LUJpPyh0PWEsbj1hLk4pOnQ9bj1hO2JyZWFrfWlmKCFhLlIpe3Q9YTticmVha31hPWEuUn12YXIgbD1HbihlKTtpZihhbC5pbnNlcnQodCxsKSx0fHxuKXtpZih0PT09bilyZXR1cm4gWm4odCksbj1Hbih0LnNpdGUpLGFsLmluc2VydChsLG4pLGwuZWRnZT1uLmVkZ2U9cnIodC5zaXRlLGwuc2l0ZSksSm4odCksdm9pZCBKbihuKTtpZighbilyZXR1cm4gdm9pZChsLmVkZ2U9cnIodC5zaXRlLGwuc2l0ZSkpO1puKHQpLFpuKG4pO3ZhciB1PXQuc2l0ZSxjPXUueCxkPXUueSxfPWUueC1jLHA9ZS55LWQsZj1uLnNpdGUsbT1mLngtYyxoPWYueS1kLGc9MiooXypoLXAqbSksYj1fKl8rcCpwLEU9bSptK2gqaCx5PXt4OihoKmItcCpFKS9nK2MseTooXypFLW0qYikvZytkfTtzcihuLmVkZ2UsdSxmLHkpLGwuZWRnZT1ycih1LGUsbnVsbCx5KSxuLmVkZ2U9cnIoZSxmLG51bGwseSksSm4odCksSm4obil9fWZ1bmN0aW9uIFluKGUsdCl7dmFyIG49ZS5zaXRlLHI9bi54LG89bi55LHM9by10O2lmKCFzKXJldHVybiByO3ZhciBpPWUuUDtpZighaSlyZXR1cm4tMS8wO249aS5zaXRlO3ZhciBhPW4ueCxsPW4ueSx1PWwtdDtpZighdSlyZXR1cm4gYTt2YXIgYz1hLXIsZD0xL3MtMS91LF89Yy91O3JldHVybiBkPygtXytNYXRoLnNxcnQoXypfLTIqZCooYypjLygtMip1KS1sK3UvMitvLXMvMikpKS9kK3I6KHIrYSkvMn1mdW5jdGlvbiBxbihlLHQpe3ZhciBuPWUuTjtpZihuKXJldHVybiBZbihuLHQpO3ZhciByPWUuc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9uIEtuKGUpe3RoaXMuc2l0ZT1lLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gWG4oZSl7Zm9yKHZhciB0LG4scixvLHMsaSxhLGwsdSxjLGQ9ZVswXVswXSxfPWVbMV1bMF0scD1lWzBdWzFdLGY9ZVsxXVsxXSxtPWlsLGg9bS5sZW5ndGg7aC0tOylpZigocz1tW2hdKSYmcy5wcmVwYXJlKCkpZm9yKGE9cy5lZGdlcyxsPWEubGVuZ3RoLGk9MDtpPGw7KWM9YVtpXS5lbmQoKSxyPWMueCxvPWMueSx1PWFbKytpJWxdLnN0YXJ0KCksdD11Lngsbj11LnksKEFpKHItdCk+Qml8fEFpKG8tbik+QmkpJiYoYS5zcGxpY2UoaSwwLG5ldyBpcihvcihzLnNpdGUsYyxBaShyLWQpPEJpJiZmLW8+Qmk/e3g6ZCx5OkFpKHQtZCk8Qmk/bjpmfTpBaShvLWYpPEJpJiZfLXI+Qmk/e3g6QWkobi1mKTxCaT90Ol8seTpmfTpBaShyLV8pPEJpJiZvLXA+Qmk/e3g6Xyx5OkFpKHQtXyk8Qmk/bjpwfTpBaShvLXApPEJpJiZyLWQ+Qmk/e3g6QWkobi1wKTxCaT90OmQseTpwfTpudWxsKSxzLnNpdGUsbnVsbCkpLCsrbCl9ZnVuY3Rpb24gJG4oZSx0KXtyZXR1cm4gdC5hbmdsZS1lLmFuZ2xlfWZ1bmN0aW9uIFFuKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEpuKGUpe3ZhciB0PWUuUCxuPWUuTjtpZih0JiZuKXt2YXIgcj10LnNpdGUsbz1lLnNpdGUscz1uLnNpdGU7aWYociE9PXMpe3ZhciBpPW8ueCxhPW8ueSxsPXIueC1pLHU9ci55LWEsYz1zLngtaSxkPXMueS1hLF89MioobCpkLXUqYyk7aWYoIShfPj0tVWkpKXt2YXIgcD1sKmwrdSp1LGY9YypjK2QqZCxtPShkKnAtdSpmKS9fLGg9KGwqZi1jKnApL18sZD1oK2EsZz1kbC5wb3AoKXx8bmV3IFFuO2cuYXJjPWUsZy5zaXRlPW8sZy54PW0raSxnLnk9ZCtNYXRoLnNxcnQobSptK2gqaCksZy5jeT1kLGUuY2lyY2xlPWc7Zm9yKHZhciBiPW51bGwsRT11bC5fO0U7KWlmKGcueTxFLnl8fGcueT09PUUueSYmZy54PD1FLngpe2lmKCFFLkwpe2I9RS5QO2JyZWFrfUU9RS5MfWVsc2V7aWYoIUUuUil7Yj1FO2JyZWFrfUU9RS5SfXVsLmluc2VydChiLGcpLGJ8fChsbD1nKX19fX1mdW5jdGlvbiBabihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwobGw9dC5OKSx1bC5yZW1vdmUodCksZGwucHVzaCh0KSxscih0KSxlLmNpcmNsZT1udWxsKX1mdW5jdGlvbiBlcihlKXtmb3IodmFyIHQsbj1zbCxyPXF0KGVbMF1bMF0sZVswXVsxXSxlWzFdWzBdLGVbMV1bMV0pLG89bi5sZW5ndGg7by0tOyl0PW5bb10sKCF0cih0LGUpfHwhcih0KXx8QWkodC5hLngtdC5iLngpPEJpJiZBaSh0LmEueS10LmIueSk8QmkpJiYodC5hPXQuYj1udWxsLG4uc3BsaWNlKG8sMSkpfWZ1bmN0aW9uIHRyKGUsdCl7dmFyIG49ZS5iO2lmKG4pcmV0dXJuITA7dmFyIHIsbyxzPWUuYSxpPXRbMF1bMF0sYT10WzFdWzBdLGw9dFswXVsxXSx1PXRbMV1bMV0sYz1lLmwsZD1lLnIsXz1jLngscD1jLnksZj1kLngsbT1kLnksaD0oXytmKS8yLGc9KHArbSkvMjtpZihtPT09cCl7aWYoaDxpfHxoPj1hKXJldHVybjtpZihfPmYpe2lmKHMpe2lmKHMueT49dSlyZXR1cm59ZWxzZSBzPXt4OmgseTpsfTtuPXt4OmgseTp1fX1lbHNle2lmKHMpe2lmKHMueTxsKXJldHVybn1lbHNlIHM9e3g6aCx5OnV9O249e3g6aCx5Omx9fX1lbHNlIGlmKHI9KF8tZikvKG0tcCksbz1nLXIqaCxyPC0xfHxyPjEpaWYoXz5mKXtpZihzKXtpZihzLnk+PXUpcmV0dXJufWVsc2Ugcz17eDoobC1vKS9yLHk6bH07bj17eDoodS1vKS9yLHk6dX19ZWxzZXtpZihzKXtpZihzLnk8bClyZXR1cm59ZWxzZSBzPXt4Oih1LW8pL3IseTp1fTtuPXt4OihsLW8pL3IseTpsfX1lbHNlIGlmKHA8bSl7aWYocyl7aWYocy54Pj1hKXJldHVybn1lbHNlIHM9e3g6aSx5OnIqaStvfTtuPXt4OmEseTpyKmErb319ZWxzZXtpZihzKXtpZihzLng8aSlyZXR1cm59ZWxzZSBzPXt4OmEseTpyKmErb307bj17eDppLHk6cippK299fXJldHVybiBlLmE9cyxlLmI9biwhMH1mdW5jdGlvbiBucihlLHQpe3RoaXMubD1lLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBycihlLHQsbixyKXt2YXIgbz1uZXcgbnIoZSx0KTtyZXR1cm4gc2wucHVzaChvKSxuJiZzcihvLGUsdCxuKSxyJiZzcihvLHQsZSxyKSxpbFtlLmldLmVkZ2VzLnB1c2gobmV3IGlyKG8sZSx0KSksaWxbdC5pXS5lZGdlcy5wdXNoKG5ldyBpcihvLHQsZSkpLG99ZnVuY3Rpb24gb3IoZSx0LG4pe3ZhciByPW5ldyBucihlLG51bGwpO3JldHVybiByLmE9dCxyLmI9bixzbC5wdXNoKHIpLHJ9ZnVuY3Rpb24gc3IoZSx0LG4scil7ZS5hfHxlLmI/ZS5sPT09bj9lLmI9cjplLmE9cjooZS5hPXIsZS5sPXQsZS5yPW4pfWZ1bmN0aW9uIGlyKGUsdCxuKXt2YXIgcj1lLmEsbz1lLmI7dGhpcy5lZGdlPWUsdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1uP01hdGguYXRhbjIobi55LXQueSxuLngtdC54KTplLmw9PT10P01hdGguYXRhbjIoby54LXIueCxyLnktby55KTpNYXRoLmF0YW4yKHIueC1vLngsby55LXIueSl9ZnVuY3Rpb24gYXIoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBscihlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIHVyKGUsdCl7dmFyIG49dCxyPXQuUixvPW4uVTtvP28uTD09PW4/by5MPXI6by5SPXI6ZS5fPXIsci5VPW8sbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBjcihlLHQpe3ZhciBuPXQscj10Lkwsbz1uLlU7bz9vLkw9PT1uP28uTD1yOm8uUj1yOmUuXz1yLHIuVT1vLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gZHIoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfWZ1bmN0aW9uIF9yKGUsdCl7dmFyIG4scixvLHM9ZS5zb3J0KHByKS5wb3AoKTtmb3Ioc2w9W10saWw9bmV3IEFycmF5KGUubGVuZ3RoKSxhbD1uZXcgYXIsdWw9bmV3IGFyOzspaWYobz1sbCxzJiYoIW98fHMueTxvLnl8fHMueT09PW8ueSYmcy54PG8ueCkpcy54PT09biYmcy55PT09cnx8KGlsW3MuaV09bmV3IEtuKHMpLFduKHMpLG49cy54LHI9cy55KSxzPWUucG9wKCk7ZWxzZXtpZighbylicmVhaztWbihvLmFyYyl9dCYmKGVyKHQpLFhuKHQpKTt2YXIgaT17Y2VsbHM6aWwsZWRnZXM6c2x9O3JldHVybiBhbD11bD1zbD1pbD1udWxsLGl9ZnVuY3Rpb24gcHIoZSx0KXtyZXR1cm4gdC55LWUueXx8dC54LWUueH1mdW5jdGlvbiBmcihlLHQsbil7cmV0dXJuKGUueC1uLngpKih0LnktZS55KS0oZS54LXQueCkqKG4ueS1lLnkpfWZ1bmN0aW9uIG1yKGUpe3JldHVybiBlLnh9ZnVuY3Rpb24gaHIoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBncigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gYnIoZSx0LG4scixvLHMpe2lmKCFlKHQsbixyLG8scykpe3ZhciBpPS41KihuK28pLGE9LjUqKHIrcyksbD10Lm5vZGVzO2xbMF0mJmJyKGUsbFswXSxuLHIsaSxhKSxsWzFdJiZicihlLGxbMV0saSxyLG8sYSksbFsyXSYmYnIoZSxsWzJdLG4sYSxpLHMpLGxbM10mJmJyKGUsbFszXSxpLGEsbyxzKX19ZnVuY3Rpb24gRXIoZSx0LG4scixvLHMsaSl7dmFyIGEsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIGUodSxjLGQsXyxwKXtpZighKGM+c3x8ZD5pfHxfPHJ8fHA8bykpe2lmKGY9dS5wb2ludCl7dmFyIGYsbT10LXUueCxoPW4tdS55LGc9bSptK2gqaDtpZihnPGwpe3ZhciBiPU1hdGguc3FydChsPWcpO3I9dC1iLG89bi1iLHM9dCtiLGk9bitiLGE9Zn19Zm9yKHZhciBFPXUubm9kZXMseT0uNSooYytfKSx2PS41KihkK3ApLFQ9dD49eSxBPW4+PXYsQz1BPDwxfFQsTz1DKzQ7QzxPOysrQylpZih1PUVbMyZDXSlzd2l0Y2goMyZDKXtjYXNlIDA6ZSh1LGMsZCx5LHYpO2JyZWFrO2Nhc2UgMTplKHUseSxkLF8sdik7YnJlYWs7Y2FzZSAyOmUodSxjLHYseSxwKTticmVhaztjYXNlIDM6ZSh1LHksdixfLHApfX19KGUscixvLHMsaSksYX1mdW5jdGlvbiB5cihlLHQpe2U9cGkucmdiKGUpLHQ9cGkucmdiKHQpO3ZhciBuPWUucixyPWUuZyxvPWUuYixzPXQuci1uLGk9dC5nLXIsYT10LmItbztyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIiMiK09lKE1hdGgucm91bmQobitzKmUpKStPZShNYXRoLnJvdW5kKHIraSplKSkrT2UoTWF0aC5yb3VuZChvK2EqZSkpfX1mdW5jdGlvbiB2cihlLHQpe3ZhciBuLHI9e30sbz17fTtmb3IobiBpbiBlKW4gaW4gdD9yW25dPUNyKGVbbl0sdFtuXSk6b1tuXT1lW25dO2ZvcihuIGluIHQpbiBpbiBlfHwob1tuXT10W25dKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKG4gaW4gcilvW25dPXJbbl0oZSk7cmV0dXJuIG99fWZ1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gZSooMS1uKSt0Km59fWZ1bmN0aW9uIEFyKGUsdCl7dmFyIG4scixvLHM9cGwubGFzdEluZGV4PWZsLmxhc3RJbmRleD0wLGk9LTEsYT1bXSxsPVtdO2ZvcihlKz0iIix0Kz0iIjsobj1wbC5leGVjKGUpKSYmKHI9ZmwuZXhlYyh0KSk7KShvPXIuaW5kZXgpPnMmJihvPXQuc2xpY2UocyxvKSxhW2ldP2FbaV0rPW86YVsrK2ldPW8pLChuPW5bMF0pPT09KHI9clswXSk/YVtpXT9hW2ldKz1yOmFbKytpXT1yOihhWysraV09bnVsbCxsLnB1c2goe2k6aSx4OlRyKG4scil9KSkscz1mbC5sYXN0SW5kZXg7cmV0dXJuIHM8dC5sZW5ndGgmJihvPXQuc2xpY2UocyksYVtpXT9hW2ldKz1vOmFbKytpXT1vKSxhLmxlbmd0aDwyP2xbMF0/KHQ9bFswXS54LGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06KHQ9bC5sZW5ndGgsZnVuY3Rpb24oZSl7Zm9yKHZhciBuLHI9MDtyPHQ7KytyKWFbKG49bFtyXSkuaV09bi54KGUpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gQ3IoZSx0KXtmb3IodmFyIG4scj1waS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLXI+PTAmJiEobj1waS5pbnRlcnBvbGF0b3JzW3JdKGUsdCkpOyk7cmV0dXJuIG59ZnVuY3Rpb24gT3IoZSx0KXt2YXIgbixyPVtdLG89W10scz1lLmxlbmd0aCxpPXQubGVuZ3RoLGE9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpO2ZvcihuPTA7bjxhOysrbilyLnB1c2goQ3IoZVtuXSx0W25dKSk7Zm9yKDtuPHM7KytuKW9bbl09ZVtuXTtmb3IoO248aTsrK24pb1tuXT10W25dO3JldHVybiBmdW5jdGlvbihlKXtmb3Iobj0wO248YTsrK24pb1tuXT1yW25dKGUpO3JldHVybiBvfX1mdW5jdGlvbiBTcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/MDp0Pj0xPzE6ZSh0KX19ZnVuY3Rpb24gUnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLWUoMS10KX19ZnVuY3Rpb24ganIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi41Kih0PC41P2UoMip0KToyLWUoMi0yKnQpKX19ZnVuY3Rpb24geHIoZSl7cmV0dXJuIGUqZX1mdW5jdGlvbiBMcihlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gRHIoZSl7aWYoZTw9MClyZXR1cm4gMDtpZihlPj0xKXJldHVybiAxO3ZhciB0PWUqZSxuPXQqZTtyZXR1cm4gNCooZTwuNT9uOjMqKGUtdCkrbi0uNzUpfWZ1bmN0aW9uIHdyKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX19ZnVuY3Rpb24gTXIoZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSpXaSl9ZnVuY3Rpb24ga3IoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqKGUtMSkpfWZ1bmN0aW9uIElyKGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gUHIoZSx0KXt2YXIgbjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/bj10L3ppKk1hdGguYXNpbigxL2UpOihlPTEsbj10LzQpLGZ1bmN0aW9uKHIpe3JldHVybiAxK2UqTWF0aC5wb3coMiwtMTAqcikqTWF0aC5zaW4oKHItbikqemkvdCl9fWZ1bmN0aW9uIE5yKGUpe3JldHVybiBlfHwoZT0xLjcwMTU4KSxmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfX1mdW5jdGlvbiBIcihlKXtyZXR1cm4gZTwxLzIuNzU/Ny41NjI1KmUqZTplPDIvMi43NT83LjU2MjUqKGUtPTEuNS8yLjc1KSplKy43NTplPDIuNS8yLjc1PzcuNTYyNSooZS09Mi4yNS8yLjc1KSplKy45Mzc1OjcuNTYyNSooZS09Mi42MjUvMi43NSkqZSsuOTg0Mzc1fWZ1bmN0aW9uIEZyKGUsdCl7ZT1waS5oY2woZSksdD1waS5oY2wodCk7dmFyIG49ZS5oLHI9ZS5jLG89ZS5sLHM9dC5oLW4saT10LmMtcixhPXQubC1vO3JldHVybiBpc05hTihpKSYmKGk9MCxyPWlzTmFOKHIpP3QuYzpyKSxpc05hTihzKT8ocz0wLG49aXNOYU4obik/dC5oOm4pOnM+MTgwP3MtPTM2MDpzPC0xODAmJihzKz0zNjApLGZ1bmN0aW9uKGUpe3JldHVybiBtZShuK3MqZSxyK2kqZSxvK2EqZSkrIiJ9fWZ1bmN0aW9uIEJyKGUsdCl7ZT1waS5oc2woZSksdD1waS5oc2wodCk7dmFyIG49ZS5oLHI9ZS5zLG89ZS5sLHM9dC5oLW4saT10LnMtcixhPXQubC1vO3JldHVybiBpc05hTihpKSYmKGk9MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTihzKT8ocz0wLG49aXNOYU4obik/dC5oOm4pOnM+MTgwP3MtPTM2MDpzPC0xODAmJihzKz0zNjApLGZ1bmN0aW9uKGUpe3JldHVybiBwZShuK3MqZSxyK2kqZSxvK2EqZSkrIiJ9fWZ1bmN0aW9uIFVyKGUsdCl7ZT1waS5sYWIoZSksdD1waS5sYWIodCk7dmFyIG49ZS5sLHI9ZS5hLG89ZS5iLHM9dC5sLW4saT10LmEtcixhPXQuYi1vO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZ2UobitzKmUscitpKmUsbythKmUpKyIifX1mdW5jdGlvbiBHcihlLHQpe3JldHVybiB0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKGUrdCpuKX19ZnVuY3Rpb24genIoZSl7dmFyIHQ9W2UuYSxlLmJdLG49W2UuYyxlLmRdLHI9V3IodCksbz1Wcih0LG4pLHM9V3IoWXIobix0LC1vKSl8fDA7dFswXSpuWzFdPG5bMF0qdFsxXSYmKHRbMF0qPS0xLHRbMV0qPS0xLHIqPS0xLG8qPS0xKSx0aGlzLnJvdGF0ZT0ocj9NYXRoLmF0YW4yKHRbMV0sdFswXSk6TWF0aC5hdGFuMigtblswXSxuWzFdKSkqcWksdGhpcy50cmFuc2xhdGU9W2UuZSxlLmZdLHRoaXMuc2NhbGU9W3Isc10sdGhpcy5za2V3PXM/TWF0aC5hdGFuMihvLHMpKnFpOjB9ZnVuY3Rpb24gVnIoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXX1mdW5jdGlvbiBXcihlKXt2YXIgdD1NYXRoLnNxcnQoVnIoZSxlKSk7cmV0dXJuIHQmJihlWzBdLz10LGVbMV0vPXQpLHR9ZnVuY3Rpb24gWXIoZSx0LG4pe3JldHVybiBlWzBdKz1uKnRbMF0sZVsxXSs9bip0WzFdLGV9ZnVuY3Rpb24gcXIoZSl7cmV0dXJuIGUubGVuZ3RoP2UucG9wKCkrIiwiOiIifWZ1bmN0aW9uIEtyKGUsdCxuLHIpe2lmKGVbMF0hPT10WzBdfHxlWzFdIT09dFsxXSl7dmFyIG89bi5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOm8tNCx4OlRyKGVbMF0sdFswXSl9LHtpOm8tMix4OlRyKGVbMV0sdFsxXSl9KX1lbHNlKHRbMF18fHRbMV0pJiZuLnB1c2goInRyYW5zbGF0ZSgiK3QrIikiKX1mdW5jdGlvbiBYcihlLHQsbixyKXtlIT09dD8oZS10PjE4MD90Kz0zNjA6dC1lPjE4MCYmKGUrPTM2MCksci5wdXNoKHtpOm4ucHVzaChxcihuKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpUcihlLHQpfSkpOnQmJm4ucHVzaChxcihuKSsicm90YXRlKCIrdCsiKSIpfWZ1bmN0aW9uICRyKGUsdCxuLHIpe2UhPT10P3IucHVzaCh7aTpuLnB1c2gocXIobikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpUcihlLHQpfSk6dCYmbi5wdXNoKHFyKG4pKyJza2V3WCgiK3QrIikiKX1mdW5jdGlvbiBRcihlLHQsbixyKXtpZihlWzBdIT09dFswXXx8ZVsxXSE9PXRbMV0pe3ZhciBvPW4ucHVzaChxcihuKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOm8tNCx4OlRyKGVbMF0sdFswXSl9LHtpOm8tMix4OlRyKGVbMV0sdFsxXSl9KX1lbHNlIDE9PT10WzBdJiYxPT09dFsxXXx8bi5wdXNoKHFyKG4pKyJzY2FsZSgiK3QrIikiKX1mdW5jdGlvbiBKcihlLHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIGU9cGkudHJhbnNmb3JtKGUpLHQ9cGkudHJhbnNmb3JtKHQpLEtyKGUudHJhbnNsYXRlLHQudHJhbnNsYXRlLG4sciksWHIoZS5yb3RhdGUsdC5yb3RhdGUsbixyKSwkcihlLnNrZXcsdC5za2V3LG4sciksUXIoZS5zY2FsZSx0LnNjYWxlLG4sciksZT10PW51bGwsZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG89LTEscz1yLmxlbmd0aDsrK288czspblsodD1yW29dKS5pXT10LngoZSk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIFpyKGUsdCl7cmV0dXJuIHQ9KHQtPWU9K2UpfHwxL3QsZnVuY3Rpb24obil7cmV0dXJuKG4tZSkvdH19ZnVuY3Rpb24gZW8oZSx0KXtyZXR1cm4gdD0odC09ZT0rZSl8fDEvdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChuLWUpL3QpKX19ZnVuY3Rpb24gdG8oZSl7Zm9yKHZhciB0PWUuc291cmNlLG49ZS50YXJnZXQscj1ybyh0LG4pLG89W3RdO3QhPT1yOyl0PXQucGFyZW50LG8ucHVzaCh0KTtmb3IodmFyIHM9by5sZW5ndGg7biE9PXI7KW8uc3BsaWNlKHMsMCxuKSxuPW4ucGFyZW50O3JldHVybiBvfWZ1bmN0aW9uIG5vKGUpe2Zvcih2YXIgdD1bXSxuPWUucGFyZW50O251bGwhPW47KXQucHVzaChlKSxlPW4sbj1uLnBhcmVudDtyZXR1cm4gdC5wdXNoKGUpLHR9ZnVuY3Rpb24gcm8oZSx0KXtpZihlPT09dClyZXR1cm4gZTtmb3IodmFyIG49bm8oZSkscj1ubyh0KSxvPW4ucG9wKCkscz1yLnBvcCgpLGk9bnVsbDtvPT09czspaT1vLG89bi5wb3AoKSxzPXIucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gb28oZSl7ZS5maXhlZHw9Mn1mdW5jdGlvbiBzbyhlKXtlLmZpeGVkJj0tN31mdW5jdGlvbiBpbyhlKXtlLmZpeGVkfD00LGUucHg9ZS54LGUucHk9ZS55fWZ1bmN0aW9uIGFvKGUpe2UuZml4ZWQmPS01fWZ1bmN0aW9uIGxvKGUsdCxuKXt2YXIgcj0wLG89MDtpZihlLmNoYXJnZT0wLCFlLmxlYWYpZm9yKHZhciBzLGk9ZS5ub2RlcyxhPWkubGVuZ3RoLGw9LTE7KytsPGE7KW51bGwhPShzPWlbbF0pJiYobG8ocyx0LG4pLGUuY2hhcmdlKz1zLmNoYXJnZSxyKz1zLmNoYXJnZSpzLmN4LG8rPXMuY2hhcmdlKnMuY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXQqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LHIrPXUqZS5wb2ludC54LG8rPXUqZS5wb2ludC55fWUuY3g9ci9lLmNoYXJnZSxlLmN5PW8vZS5jaGFyZ2V9ZnVuY3Rpb24gdW8oZSx0KXtyZXR1cm4gcGkucmViaW5kKGUsdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxlLm5vZGVzPWUsZS5saW5rcz1obyxlfWZ1bmN0aW9uIGNvKGUsdCl7Zm9yKHZhciBuPVtlXTtudWxsIT0oZT1uLnBvcCgpKTspaWYodChlKSwobz1lLmNoaWxkcmVuKSYmKHI9by5sZW5ndGgpKWZvcih2YXIgcixvOy0tcj49MDspbi5wdXNoKG9bcl0pfWZ1bmN0aW9uIF9vKGUsdCl7Zm9yKHZhciBuPVtlXSxyPVtdO251bGwhPShlPW4ucG9wKCkpOylpZihyLnB1c2goZSksKHM9ZS5jaGlsZHJlbikmJihvPXMubGVuZ3RoKSlmb3IodmFyIG8scyxpPS0xOysraTxvOyluLnB1c2goc1tpXSk7Zm9yKDtudWxsIT0oZT1yLnBvcCgpKTspdChlKX1mdW5jdGlvbiBwbyhlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBmbyhlKXtyZXR1cm4gZS52YWx1ZX1mdW5jdGlvbiBtbyhlLHQpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIHBpLm1lcmdlKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybihlLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6ZSx0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBnbyhlKXtyZXR1cm4gZS54fWZ1bmN0aW9uIGJvKGUpe3JldHVybiBlLnl9ZnVuY3Rpb24gRW8oZSx0LG4pe2UueTA9dCxlLnk9bn1mdW5jdGlvbiB5byhlKXtyZXR1cm4gcGkucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIHZvKGUpe2Zvcih2YXIgdD0tMSxuPWVbMF0ubGVuZ3RoLHI9W107Kyt0PG47KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlvbiBUbyhlKXtmb3IodmFyIHQsbj0xLHI9MCxvPWVbMF1bMV0scz1lLmxlbmd0aDtuPHM7KytuKSh0PWVbbl1bMV0pPm8mJihyPW4sbz10KTtyZXR1cm4gcn1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gZS5yZWR1Y2UoQ28sMCl9ZnVuY3Rpb24gQ28oZSx0KXtyZXR1cm4gZSt0WzFdfWZ1bmN0aW9uIE9vKGUsdCl7cmV0dXJuIFNvKGUsTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gU28oZSx0KXtmb3IodmFyIG49LTEscj0rZVswXSxvPShlWzFdLXIpL3Qscz1bXTsrK248PXQ7KXNbbl09bypuK3I7cmV0dXJuIHN9ZnVuY3Rpb24gUm8oZSl7cmV0dXJuW3BpLm1pbihlKSxwaS5tYXgoZSldfWZ1bmN0aW9uIGpvKGUsdCl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiB4byhlLHQpe3ZhciBuPWUuX3BhY2tfbmV4dDtlLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9ZSx0Ll9wYWNrX25leHQ9bixuLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBMbyhlLHQpe2UuX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1lfWZ1bmN0aW9uIERvKGUsdCl7dmFyIG49dC54LWUueCxyPXQueS1lLnksbz1lLnIrdC5yO3JldHVybi45OTkqbypvPm4qbityKnJ9ZnVuY3Rpb24gd28oZSl7ZnVuY3Rpb24gdChlKXtjPU1hdGgubWluKGUueC1lLnIsYyksZD1NYXRoLm1heChlLngrZS5yLGQpLF89TWF0aC5taW4oZS55LWUucixfKSxwPU1hdGgubWF4KGUueStlLnIscCl9aWYoKG49ZS5jaGlsZHJlbikmJih1PW4ubGVuZ3RoKSl7dmFyIG4scixvLHMsaSxhLGwsdSxjPTEvMCxkPS0xLzAsXz0xLzAscD0tMS8wO2lmKG4uZm9yRWFjaChNbykscj1uWzBdLHIueD0tci5yLHIueT0wLHQociksdT4xJiYobz1uWzFdLG8ueD1vLnIsby55PTAsdChvKSx1PjIpKWZvcihzPW5bMl0sUG8ocixvLHMpLHQocykseG8ocixzKSxyLl9wYWNrX3ByZXY9cyx4byhzLG8pLG89ci5fcGFja19uZXh0LGk9MztpPHU7aSsrKXtQbyhyLG8scz1uW2ldKTt2YXIgZj0wLG09MSxoPTE7Zm9yKGE9by5fcGFja19uZXh0O2EhPT1vO2E9YS5fcGFja19uZXh0LG0rKylpZihEbyhhLHMpKXtmPTE7YnJlYWt9aWYoMT09Zilmb3IobD1yLl9wYWNrX3ByZXY7bCE9PWEuX3BhY2tfcHJldiYmIURvKGwscyk7bD1sLl9wYWNrX3ByZXYsaCsrKTtmPyhtPGh8fG09PWgmJm8ucjxyLnI/TG8ocixvPWEpOkxvKHI9bCxvKSxpLS0pOih4byhyLHMpLG89cyx0KHMpKX12YXIgZz0oYytkKS8yLGI9KF8rcCkvMixFPTA7Zm9yKGk9MDtpPHU7aSsrKXM9bltpXSxzLngtPWcscy55LT1iLEU9TWF0aC5tYXgoRSxzLnIrTWF0aC5zcXJ0KHMueCpzLngrcy55KnMueSkpO2Uucj1FLG4uZm9yRWFjaChrbyl9fWZ1bmN0aW9uIE1vKGUpe2UuX3BhY2tfbmV4dD1lLl9wYWNrX3ByZXY9ZX1mdW5jdGlvbiBrbyhlKXtkZWxldGUgZS5fcGFja19uZXh0LGRlbGV0ZSBlLl9wYWNrX3ByZXZ9ZnVuY3Rpb24gSW8oZSx0LG4scil7dmFyIG89ZS5jaGlsZHJlbjtpZihlLng9dCs9ciplLngsZS55PW4rPXIqZS55LGUucio9cixvKWZvcih2YXIgcz0tMSxpPW8ubGVuZ3RoOysrczxpOylJbyhvW3NdLHQsbixyKX1mdW5jdGlvbiBQbyhlLHQsbil7dmFyIHI9ZS5yK24ucixvPXQueC1lLngscz10LnktZS55O2lmKHImJihvfHxzKSl7dmFyIGk9dC5yK24ucixhPW8qbytzKnM7aSo9aSxyKj1yO3ZhciBsPS41KyhyLWkpLygyKmEpLHU9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMippKihyK2EpLShyLT1hKSpyLWkqaSkpLygyKmEpO24ueD1lLngrbCpvK3UqcyxuLnk9ZS55K2wqcy11Km99ZWxzZSBuLng9ZS54K3Isbi55PWUueX1mdW5jdGlvbiBObyhlLHQpe3JldHVybiBlLnBhcmVudD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIEhvKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQubGVuZ3RoP3RbMF06ZS50fWZ1bmN0aW9uIEZvKGUpe3ZhciB0LG49ZS5jaGlsZHJlbjtyZXR1cm4odD1uLmxlbmd0aCk/blt0LTFdOmUudH1mdW5jdGlvbiBCbyhlLHQsbil7dmFyIHI9bi8odC5pLWUuaSk7dC5jLT1yLHQucys9bixlLmMrPXIsdC56Kz1uLHQubSs9bn1mdW5jdGlvbiBVbyhlKXtmb3IodmFyIHQsbj0wLHI9MCxvPWUuY2hpbGRyZW4scz1vLmxlbmd0aDstLXM+PTA7KXQ9b1tzXSx0LnorPW4sdC5tKz1uLG4rPXQucysocis9dC5jKX1mdW5jdGlvbiBHbyhlLHQsbil7cmV0dXJuIGUuYS5wYXJlbnQ9PT10LnBhcmVudD9lLmE6bn1mdW5jdGlvbiB6byhlKXtyZXR1cm4gMStwaS5tYXgoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS55fSl9ZnVuY3Rpb24gVm8oZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC54fSwwKS9lLmxlbmd0aH1mdW5jdGlvbiBXbyhlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD9Xbyh0WzBdKTplfWZ1bmN0aW9uIFlvKGUpe3ZhciB0LG49ZS5jaGlsZHJlbjtyZXR1cm4gbiYmKHQ9bi5sZW5ndGgpP1lvKG5bdC0xXSk6ZX1mdW5jdGlvbiBxbyhlKXtyZXR1cm57eDplLngseTplLnksZHg6ZS5keCxkeTplLmR5fX1mdW5jdGlvbiBLbyhlLHQpe3ZhciBuPWUueCt0WzNdLHI9ZS55K3RbMF0sbz1lLmR4LXRbMV0tdFszXSxzPWUuZHktdFswXS10WzJdO3JldHVybiBvPDAmJihuKz1vLzIsbz0wKSxzPDAmJihyKz1zLzIscz0wKSx7eDpuLHk6cixkeDpvLGR5OnN9fWZ1bmN0aW9uIFhvKGUpe3ZhciB0PWVbMF0sbj1lW2UubGVuZ3RoLTFdO3JldHVybiB0PG4/W3Qsbl06W24sdF19ZnVuY3Rpb24gJG8oZSl7cmV0dXJuIGUucmFuZ2VFeHRlbnQ/ZS5yYW5nZUV4dGVudCgpOlhvKGUucmFuZ2UoKSl9ZnVuY3Rpb24gUW8oZSx0LG4scil7dmFyIG89bihlWzBdLGVbMV0pLHM9cih0WzBdLHRbMV0pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcyhvKGUpKX19ZnVuY3Rpb24gSm8oZSx0KXt2YXIgbixyPTAsbz1lLmxlbmd0aC0xLHM9ZVtyXSxpPWVbb107cmV0dXJuIGk8cyYmKG49cixyPW8sbz1uLG49cyxzPWksaT1uKSxlW3JdPXQuZmxvb3IocyksZVtvXT10LmNlaWwoaSksZX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gZT97Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9lKSplfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwodC9lKSplfX06T2x9ZnVuY3Rpb24gZXMoZSx0LG4scil7dmFyIG89W10scz1bXSxpPTAsYT1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMTtmb3IoZVthXTxlWzBdJiYoZT1lLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytpPD1hOylvLnB1c2gobihlW2ktMV0sZVtpXSkpLHMucHVzaChyKHRbaS0xXSx0W2ldKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXBpLmJpc2VjdChlLHQsMSxhKS0xO3JldHVybiBzW25dKG9bbl0odCkpfX1mdW5jdGlvbiB0cyhlLHQsbixyKXtmdW5jdGlvbiBvKCl7dmFyIG89TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpPjI/ZXM6UW8sbD1yP2VvOlpyO3JldHVybiBpPW8oZSx0LGwsbiksYT1vKHQsZSxsLENyKSxzfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGkoZSl9dmFyIGksYTtyZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9LHMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlciksbygpKTplfSxzLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbygpKTp0fSxzLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMucmFuZ2UoZSkuaW50ZXJwb2xhdGUoR3IpfSxzLmNsYW1wPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbygpKTpyfSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbygpKTpufSxzLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBzcyhlLHQpfSxzLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaXMoZSx0LG4pfSxzLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHJzKGUsdCksbygpfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdHMoZSx0LG4scil9LG8oKX1mdW5jdGlvbiBucyhlLHQpe3JldHVybiBwaS5yZWJpbmQoZSx0LCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gcnMoZSx0KXtyZXR1cm4gSm8oZSxabyhvcyhlLHQpWzJdKSksSm8oZSxabyhvcyhlLHQpWzJdKSksZX1mdW5jdGlvbiBvcyhlLHQpe251bGw9PXQmJih0PTEwKTt2YXIgbj1YbyhlKSxyPW5bMV0tblswXSxvPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coci90KS9NYXRoLkxOMTApKSxzPXQvcipvO3JldHVybiBzPD0uMTU/byo9MTA6czw9LjM1P28qPTU6czw9Ljc1JiYobyo9MiksblswXT1NYXRoLmNlaWwoblswXS9vKSpvLG5bMV09TWF0aC5mbG9vcihuWzFdL28pKm8rLjUqbyxuWzJdPW8sbn1mdW5jdGlvbiBzcyhlLHQpe3JldHVybiBwaS5yYW5nZS5hcHBseShwaSxvcyhlLHQpKX1mdW5jdGlvbiBpcyhlLHQsbil7dmFyIHI9b3MoZSx0KTtpZihuKXt2YXIgbz1wYS5leGVjKG4pO2lmKG8uc2hpZnQoKSwicyI9PT1vWzhdKXt2YXIgcz1waS5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoQWkoclswXSksQWkoclsxXSkpKTtyZXR1cm4gb1s3XXx8KG9bN109Ii4iK2FzKHMuc2NhbGUoclsyXSkpKSxvWzhdPSJmIixuPXBpLmZvcm1hdChvLmpvaW4oIiIpKSxmdW5jdGlvbihlKXtyZXR1cm4gbihzLnNjYWxlKGUpKStzLnN5bWJvbH19b1s3XXx8KG9bN109Ii4iK2xzKG9bOF0scikpLG49by5qb2luKCIiKX1lbHNlIG49IiwuIithcyhyWzJdKSsiZiI7cmV0dXJuIHBpLmZvcm1hdChuKX1mdW5jdGlvbiBhcyhlKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBscyhlLHQpe3ZhciBuPWFzKHRbMl0pO3JldHVybiBlIGluIFNsP01hdGguYWJzKG4tYXMoTWF0aC5tYXgoQWkodFswXSksQWkodFsxXSkpKSkrICsoImUiIT09ZSk6bi0yKigiJSI9PT1lKX1mdW5jdGlvbiB1cyhlLHQsbixyKXtmdW5jdGlvbiBvKGUpe3JldHVybihuP01hdGgubG9nKGU8MD8wOmUpOi1NYXRoLmxvZyhlPjA/MDotZSkpL01hdGgubG9nKHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG4/TWF0aC5wb3codCxlKTotTWF0aC5wb3codCwtZSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZShvKHQpKX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5pbnZlcnQodCkpfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10WzBdPj0wLGUuZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcChvKSksaSk6cn0saS5iYXNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLGUuZG9tYWluKHIubWFwKG8pKSxpKTp0fSxpLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1KbyhyLm1hcChvKSxuP01hdGg6amwpO3JldHVybiBlLmRvbWFpbih0KSxyPXQubWFwKHMpLGl9LGkudGlja3M9ZnVuY3Rpb24oKXt2YXIgZT1YbyhyKSxpPVtdLGE9ZVswXSxsPWVbMV0sdT1NYXRoLmZsb29yKG8oYSkpLGM9TWF0aC5jZWlsKG8obCkpLGQ9dCUxPzI6dDtpZihpc0Zpbml0ZShjLXUpKXtpZihuKXtmb3IoO3U8Yzt1KyspZm9yKHZhciBfPTE7XzxkO18rKylpLnB1c2gocyh1KSpfKTtpLnB1c2gocyh1KSl9ZWxzZSBmb3IoaS5wdXNoKHModSkpO3UrKzxjOylmb3IodmFyIF89ZC0xO18+MDtfLS0paS5wdXNoKHModSkqXyk7Zm9yKHU9MDtpW3VdPGE7dSsrKTtmb3IoYz1pLmxlbmd0aDtpW2MtMV0+bDtjLS0pO2k9aS5zbGljZSh1LGMpfXJldHVybiBpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gUmw7YXJndW1lbnRzLmxlbmd0aDwyP249Umw6ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXBpLmZvcm1hdChuKSk7dmFyIHI9TWF0aC5tYXgoMSx0KmUvaS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWUvcyhNYXRoLnJvdW5kKG8oZSkpKTtyZXR1cm4gaSp0PHQtLjUmJihpKj10KSxpPD1yP24oZSk6IiJ9fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdXMoZS5jb3B5KCksdCxuLHIpfSxucyhpLGUpfWZ1bmN0aW9uIGNzKGUsdCxuKXtmdW5jdGlvbiByKHQpe3JldHVybiBlKG8odCkpfXZhciBvPWRzKHQpLHM9ZHMoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4oKG49dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxyKTpufSxyLnRpY2tzPWZ1bmN0aW9uKGUpe3JldHVybiBzcyhuLGUpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXMobixlLHQpfSxyLm5pY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZG9tYWluKHJzKG4sZSkpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWRzKHQ9aSkscz1kcygxL3QpLGUuZG9tYWluKG4ubWFwKG8pKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY3MoZS5jb3B5KCksdCxuKX0sbnMocixlKX1mdW5jdGlvbiBkcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsZSk6TWF0aC5wb3codCxlKX19ZnVuY3Rpb24gX3MoZSx0KXtmdW5jdGlvbiBuKG4pe3JldHVybiBzWygoby5nZXQobil8fCgicmFuZ2UiPT09dC50P28uc2V0KG4sZS5wdXNoKG4pKTpOYU4pKS0xKSVzLmxlbmd0aF19ZnVuY3Rpb24gcih0LG4pe3JldHVybiBwaS5yYW5nZShlLmxlbmd0aCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX0pfXZhciBvLHMsaTtyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU7ZT1bXSxvPW5ldyBmO2Zvcih2YXIgcyxpPS0xLGE9ci5sZW5ndGg7KytpPGE7KW8uaGFzKHM9cltpXSl8fG8uc2V0KHMsZS5wdXNoKHMpKTtyZXR1cm4gblt0LnRdLmFwcGx5KG4sdC5hKX0sbi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLGk9MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LG4pOnN9LG4ucmFuZ2VQb2ludHM9ZnVuY3Rpb24obyxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBsPW9bMF0sdT1vWzFdLGM9ZS5sZW5ndGg8Mj8obD0obCt1KS8yLDApOih1LWwpLyhlLmxlbmd0aC0xK2EpO3JldHVybiBzPXIobCtjKmEvMixjKSxpPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxufSxuLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24obyxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBsPW9bMF0sdT1vWzFdLGM9ZS5sZW5ndGg8Mj8obD11PU1hdGgucm91bmQoKGwrdSkvMiksMCk6KHUtbCkvKGUubGVuZ3RoLTErYSl8MDtyZXR1cm4gcz1yKGwrTWF0aC5yb3VuZChjKmEvMisodS1sLShlLmxlbmd0aC0xK2EpKmMpLzIpLGMpLGk9MCx0PXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sbn0sbi5yYW5nZUJhbmRzPWZ1bmN0aW9uKG8sYSxsKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9YSk7dmFyIHU9b1sxXTxvWzBdLGM9b1t1LTBdLGQ9b1sxLXVdLF89KGQtYykvKGUubGVuZ3RoLWErMipsKTtyZXR1cm4gcz1yKGMrXypsLF8pLHUmJnMucmV2ZXJzZSgpLGk9XyooMS1hKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sbn0sbi5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24obyxhLGwpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYobD1hKTt2YXIgdT1vWzFdPG9bMF0sYz1vW3UtMF0sZD1vWzEtdV0sXz1NYXRoLmZsb29yKChkLWMpLyhlLmxlbmd0aC1hKzIqbCkpO3JldHVybiBzPXIoYytNYXRoLnJvdW5kKChkLWMtKGUubGVuZ3RoLWEpKl8pLzIpLF8pLHUmJnMucmV2ZXJzZSgpLGk9TWF0aC5yb3VuZChfKigxLWEpKSx0PXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxufSxuLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBpfSxuLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFhvKHQuYVswXSl9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBfcyhlLHQpfSxuLmRvbWFpbihlKX1mdW5jdGlvbiBwcyhlLHQpe2Z1bmN0aW9uIG4oKXt2YXIgbj0wLHM9dC5sZW5ndGg7Zm9yKG89W107KytuPHM7KW9bbi0xXT1waS5xdWFudGlsZShlLG4vcyk7cmV0dXJuIHJ9ZnVuY3Rpb24gcihlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIHRbcGkuYmlzZWN0KG8sZSldfXZhciBvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChsKS5maWx0ZXIodSkuc29ydChhKSxuKCkpOmV9LHIucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKCkpOnR9LHIucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBuPXQuaW5kZXhPZihuKSxuPDA/W05hTixOYU5dOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5ndGgtMV1dfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcHMoZSx0KX0sbigpfWZ1bmN0aW9uIGZzKGUsdCxuKXtmdW5jdGlvbiByKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oaSxNYXRoLmZsb29yKHMqKHQtZSkpKSldfWZ1bmN0aW9uIG8oKXtyZXR1cm4gcz1uLmxlbmd0aC8odC1lKSxpPW4ubGVuZ3RoLTEscn12YXIgcyxpO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXSx0PStuW24ubGVuZ3RoLTFdLG8oKSk6W2UsdF19LHIucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxvKCkpOm59LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PW4uaW5kZXhPZih0KSx0PXQ8MD9OYU46dC9zK2UsW3QsdCsxL3NdfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnMoZSx0LG4pfSxvKCl9ZnVuY3Rpb24gbXMoZSx0KXtmdW5jdGlvbiBuKG4pe2lmKG48PW4pcmV0dXJuIHRbcGkuYmlzZWN0KGUsbildfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmludmVydEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gbj10LmluZGV4T2YobiksW2Vbbi0xXSxlW25dXX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG1zKGUsdCl9LG59ZnVuY3Rpb24gaHMoZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4rZX1yZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4ubWFwKHQpLHQpOmV9LHQudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIHNzKGUsdCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBpcyhlLHQsbil9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBocyhlKX0sdH1mdW5jdGlvbiBncygpe3JldHVybiAwfWZ1bmN0aW9uIGJzKGUpe3JldHVybiBlLmlubmVyUmFkaXVzfWZ1bmN0aW9uIEVzKGUpe3JldHVybiBlLm91dGVyUmFkaXVzfWZ1bmN0aW9uIHlzKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdnMoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gVHMoZSl7cmV0dXJuIGUmJmUucGFkQW5nbGV9ZnVuY3Rpb24gQXMoZSx0LG4scil7cmV0dXJuKGUtbikqdC0odC1yKSplPjA/MDoxfWZ1bmN0aW9uIENzKGUsdCxuLHIsbyl7dmFyIHM9ZVswXS10WzBdLGk9ZVsxXS10WzFdLGE9KG8/cjotcikvTWF0aC5zcXJ0KHMqcytpKmkpLGw9YSppLHU9LWEqcyxjPWVbMF0rbCxkPWVbMV0rdSxfPXRbMF0rbCxwPXRbMV0rdSxmPShjK18pLzIsbT0oZCtwKS8yLGg9Xy1jLGc9cC1kLGI9aCpoK2cqZyxFPW4tcix5PWMqcC1fKmQsdj0oZzwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLEUqRSpiLXkqeSkpLFQ9KHkqZy1oKnYpL2IsQT0oLXkqaC1nKnYpL2IsQz0oeSpnK2gqdikvYixPPSgteSpoK2cqdikvYixTPVQtZixSPUEtbSxqPUMtZix4PU8tbTtyZXR1cm4gUypTK1IqUj5qKmoreCp4JiYoVD1DLEE9TyksW1tULWwsQS11XSxbVCpuL0UsQSpuL0VdXX1mdW5jdGlvbiBPcyhlKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIGkoKXt1LnB1c2goIk0iLHMoZShjKSxhKSl9Zm9yKHZhciBsLHU9W10sYz1bXSxkPS0xLF89dC5sZW5ndGgscD1EZShuKSxmPURlKHIpOysrZDxfOylvLmNhbGwodGhpcyxsPXRbZF0sZCk/Yy5wdXNoKFsrcC5jYWxsKHRoaXMsbCxkKSwrZi5jYWxsKHRoaXMsbCxkKV0pOmMubGVuZ3RoJiYoaSgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmaSgpLHUubGVuZ3RoP3Uuam9pbigiIik6bnVsbH12YXIgbj1rbixyPUluLG89a3Qscz1TcyxpPXMua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHQpOm99LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIGU/cz1lOihzPWtsLmdldChlKXx8U3MpLmtleSx0KTppfSx0LnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSx0KTphfSx0fWZ1bmN0aW9uIFNzKGUpe3JldHVybiBlLmxlbmd0aD4xP2Uuam9pbigiTCIpOmUrIloifWZ1bmN0aW9uIFJzKGUpe3JldHVybiBlLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24ganMoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPWVbMF0sbz1bclswXSwiLCIsclsxXV07Kyt0PG47KW8ucHVzaCgiSCIsKHJbMF0rKHI9ZVt0XSlbMF0pLzIsIlYiLHJbMV0pO3JldHVybiBuPjEmJm8ucHVzaCgiSCIsclswXSksby5qb2luKCIiKX1mdW5jdGlvbiB4cyhlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoLHI9ZVswXSxvPVtyWzBdLCIsIixyWzFdXTsrK3Q8bjspby5wdXNoKCJWIiwocj1lW3RdKVsxXSwiSCIsclswXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gTHMoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPWVbMF0sbz1bclswXSwiLCIsclsxXV07Kyt0PG47KW8ucHVzaCgiSCIsKHI9ZVt0XSlbMF0sIlYiLHJbMV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIERzKGUsdCl7cmV0dXJuIGUubGVuZ3RoPDQ/U3MoZSk6ZVsxXStrcyhlLnNsaWNlKDEsLTEpLElzKGUsdCkpfWZ1bmN0aW9uIHdzKGUsdCl7cmV0dXJuIGUubGVuZ3RoPDM/UnMoZSk6ZVswXStrcygoZS5wdXNoKGVbMF0pLGUpLElzKFtlW2UubGVuZ3RoLTJdXS5jb25jYXQoZSxbZVsxXV0pLHQpKX1mdW5jdGlvbiBNcyhlLHQpe3JldHVybiBlLmxlbmd0aDwzP1NzKGUpOmVbMF0ra3MoZSxJcyhlLHQpKX1mdW5jdGlvbiBrcyhlLHQpe2lmKHQubGVuZ3RoPDF8fGUubGVuZ3RoIT10Lmxlbmd0aCYmZS5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIFNzKGUpO3ZhciBuPWUubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLG89ZVswXSxzPWVbMV0saT10WzBdLGE9aSxsPTE7aWYobiYmKHIrPSJRIisoc1swXS0yKmlbMF0vMykrIiwiKyhzWzFdLTIqaVsxXS8zKSsiLCIrc1swXSsiLCIrc1sxXSxvPWVbMV0sbD0yKSx0Lmxlbmd0aD4xKXthPXRbMV0scz1lW2xdLGwrKyxyKz0iQyIrKG9bMF0raVswXSkrIiwiKyhvWzFdK2lbMV0pKyIsIisoc1swXS1hWzBdKSsiLCIrKHNbMV0tYVsxXSkrIiwiK3NbMF0rIiwiK3NbMV07Zm9yKHZhciB1PTI7dTx0Lmxlbmd0aDt1KyssbCsrKXM9ZVtsXSxhPXRbdV0scis9IlMiKyhzWzBdLWFbMF0pKyIsIisoc1sxXS1hWzFdKSsiLCIrc1swXSsiLCIrc1sxXX1pZihuKXt2YXIgYz1lW2xdO3IrPSJRIisoc1swXSsyKmFbMF0vMykrIiwiKyhzWzFdKzIqYVsxXS8zKSsiLCIrY1swXSsiLCIrY1sxXX1yZXR1cm4gcn1mdW5jdGlvbiBJcyhlLHQpe2Zvcih2YXIgbixyPVtdLG89KDEtdCkvMixzPWVbMF0saT1lWzFdLGE9MSxsPWUubGVuZ3RoOysrYTxsOyluPXMscz1pLGk9ZVthXSxyLnB1c2goW28qKGlbMF0tblswXSksbyooaVsxXS1uWzFdKV0pO3JldHVybiByfWZ1bmN0aW9uIFBzKGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuIFNzKGUpO3ZhciB0PTEsbj1lLmxlbmd0aCxyPWVbMF0sbz1yWzBdLHM9clsxXSxpPVtvLG8sbywocj1lWzFdKVswXV0sYT1bcyxzLHMsclsxXV0sbD1bbywiLCIscywiTCIsQnMoTmwsaSksIiwiLEJzKE5sLGEpXTtmb3IoZS5wdXNoKGVbbi0xXSk7Kyt0PD1uOylyPWVbdF0saS5zaGlmdCgpLGkucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLFVzKGwsaSxhKTtyZXR1cm4gZS5wb3AoKSxsLnB1c2goIkwiLHIpLGwuam9pbigiIil9ZnVuY3Rpb24gTnMoZSl7aWYoZS5sZW5ndGg8NClyZXR1cm4gU3MoZSk7Zm9yKHZhciB0LG49W10scj0tMSxvPWUubGVuZ3RoLHM9WzBdLGk9WzBdOysrcjwzOyl0PWVbcl0scy5wdXNoKHRbMF0pLGkucHVzaCh0WzFdKTtmb3Iobi5wdXNoKEJzKE5sLHMpKyIsIitCcyhObCxpKSksLS1yOysrcjxvOyl0PWVbcl0scy5zaGlmdCgpLHMucHVzaCh0WzBdKSxpLnNoaWZ0KCksaS5wdXNoKHRbMV0pLFVzKG4scyxpKTtyZXR1cm4gbi5qb2luKCIiKX1mdW5jdGlvbiBIcyhlKXtmb3IodmFyIHQsbixyPS0xLG89ZS5sZW5ndGgscz1vKzQsaT1bXSxhPVtdOysrcjw0OyluPWVbciVvXSxpLnB1c2goblswXSksYS5wdXNoKG5bMV0pO2Zvcih0PVtCcyhObCxpKSwiLCIsQnMoTmwsYSldLC0tcjsrK3I8czspbj1lW3Ilb10saS5zaGlmdCgpLGkucHVzaChuWzBdKSxhLnNoaWZ0KCksYS5wdXNoKG5bMV0pLFVzKHQsaSxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBGcyhlLHQpe3ZhciBuPWUubGVuZ3RoLTE7aWYobilmb3IodmFyIHIsbyxzPWVbMF1bMF0saT1lWzBdWzFdLGE9ZVtuXVswXS1zLGw9ZVtuXVsxXS1pLHU9LTE7Kyt1PD1uOylyPWVbdV0sbz11L24sclswXT10KnJbMF0rKDEtdCkqKHMrbyphKSxyWzFdPXQqclsxXSsoMS10KSooaStvKmwpO3JldHVybiBQcyhlKX1mdW5jdGlvbiBCcyhlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXStlWzNdKnRbM119ZnVuY3Rpb24gVXMoZSx0LG4pe2UucHVzaCgiQyIsQnMoSWwsdCksIiwiLEJzKElsLG4pLCIsIixCcyhQbCx0KSwiLCIsQnMoUGwsbiksIiwiLEJzKE5sLHQpLCIsIixCcyhObCxuKSl9ZnVuY3Rpb24gR3MoZSx0KXtyZXR1cm4odFsxXS1lWzFdKS8odFswXS1lWzBdKX1mdW5jdGlvbiB6cyhlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoLTEscj1bXSxvPWVbMF0scz1lWzFdLGk9clswXT1HcyhvLHMpOysrdDxuOylyW3RdPShpKyhpPUdzKG89cyxzPWVbdCsxXSkpKS8yO3JldHVybiByW3RdPWkscn1mdW5jdGlvbiBWcyhlKXtmb3IodmFyIHQsbixyLG8scz1bXSxpPXpzKGUpLGE9LTEsbD1lLmxlbmd0aC0xOysrYTxsOyl0PUdzKGVbYV0sZVthKzFdKSxBaSh0KTxCaT9pW2FdPWlbYSsxXT0wOihuPWlbYV0vdCxyPWlbYSsxXS90LChvPW4qbityKnIpPjkmJihvPTMqdC9NYXRoLnNxcnQobyksaVthXT1vKm4saVthKzFdPW8qcikpO2ZvcihhPS0xOysrYTw9bDspbz0oZVtNYXRoLm1pbihsLGErMSldWzBdLWVbTWF0aC5tYXgoMCxhLTEpXVswXSkvKDYqKDEraVthXSppW2FdKSkscy5wdXNoKFtvfHwwLGlbYV0qb3x8MF0pO3JldHVybiBzfWZ1bmN0aW9uIFdzKGUpe3JldHVybiBlLmxlbmd0aDwzP1NzKGUpOmVbMF0ra3MoZSxWcyhlKSl9ZnVuY3Rpb24gWXMoZSl7Zm9yKHZhciB0LG4scixvPS0xLHM9ZS5sZW5ndGg7KytvPHM7KXQ9ZVtvXSxuPXRbMF0scj10WzFdLVdpLHRbMF09bipNYXRoLmNvcyhyKSx0WzFdPW4qTWF0aC5zaW4ocik7cmV0dXJuIGV9ZnVuY3Rpb24gcXMoZSl7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBsKCl7bS5wdXNoKCJNIixhKGUoZyksZCksYyx1KGUoaC5yZXZlcnNlKCkpLGQpLCJaIil9Zm9yKHZhciBfLHAsZixtPVtdLGg9W10sZz1bXSxiPS0xLEU9dC5sZW5ndGgseT1EZShuKSx2PURlKG8pLFQ9bj09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gcH06RGUociksQT1vPT09cz9mdW5jdGlvbigpe3JldHVybiBmfTpEZShzKTsrK2I8RTspaS5jYWxsKHRoaXMsXz10W2JdLGIpPyhoLnB1c2goW3A9K3kuY2FsbCh0aGlzLF8sYiksZj0rdi5jYWxsKHRoaXMsXyxiKV0pLGcucHVzaChbK1QuY2FsbCh0aGlzLF8sYiksK0EuY2FsbCh0aGlzLF8sYildKSk6aC5sZW5ndGgmJihsKCksaD1bXSxnPVtdKTtyZXR1cm4gaC5sZW5ndGgmJmwoKSxtLmxlbmd0aD9tLmpvaW4oIiIpOm51bGx9dmFyIG49a24scj1rbixvPTAscz1JbixpPWt0LGE9U3MsbD1hLmtleSx1PWEsYz0iTCIsZD0uNztyZXR1cm4gdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXI9ZSx0KTpyfSx0LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC54MT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPWUsdCk6c30sdC55MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHQpOm99LHQueTE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx0KTpzfSx0LmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx0KTppfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2E9ZTooYT1rbC5nZXQoZSl8fFNzKS5rZXksdT1hLnJldmVyc2V8fGEsYz1hLmNsb3NlZD8iTSI6IkwiLHQpOmx9LHQudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLHQpOmR9LHR9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFhzKGUpe3JldHVybltlLngsZS55XX1mdW5jdGlvbiAkcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRbMF0scj10WzFdLVdpO3JldHVybltuKk1hdGguY29zKHIpLG4qTWF0aC5zaW4ocildfX1mdW5jdGlvbiBRcygpe3JldHVybiA2NH1mdW5jdGlvbiBKcygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFpzKGUpe3ZhciB0PU1hdGguc3FydChlL0dpKTtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWZ1bmN0aW9uIGVpKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG4scjsodD10aGlzW2VdKSYmKHI9dFtuPXQuYWN0aXZlXSkmJihyLnRpbWVyLmM9bnVsbCxyLnRpbWVyLnQ9TmFOLC0tdC5jb3VudD9kZWxldGUgdFtuXTpkZWxldGUgdGhpc1tlXSx0LmFjdGl2ZSs9LjUsci5ldmVudCYmci5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sci5pbmRleCkpfX1mdW5jdGlvbiB0aShlLHQsbil7cmV0dXJuIGppKGUsVmwpLGUubmFtZXNwYWNlPXQsZS5pZD1uLGV9ZnVuY3Rpb24gbmkoZSx0LG4scil7dmFyIG89ZS5pZCxzPWUubmFtZXNwYWNlO3JldHVybiBLKGUsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oZSxpLGEpe2Vbc11bb10udHdlZW4uc2V0KHQscihuLmNhbGwoZSxlLl9fZGF0YV9fLGksYSkpKX06KG49cihuKSxmdW5jdGlvbihlKXtlW3NdW29dLnR3ZWVuLnNldCh0LG4pfSkpfWZ1bmN0aW9uIHJpKGUpe3JldHVybiBudWxsPT1lJiYoZT0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIG9pKGUpe3JldHVybiBudWxsPT1lPyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK2UrIl9fIn1mdW5jdGlvbiBzaShlLHQsbixyLG8pe2Z1bmN0aW9uIHMoZSl7dmFyIHQ9bS5kZWxheTtpZih1LnQ9dCtsLHQ8PWUpcmV0dXJuIGkoZS10KTt1LmM9aX1mdW5jdGlvbiBpKG4pe3ZhciBvPXAuYWN0aXZlLHM9cFtvXTtzJiYocy50aW1lci5jPW51bGwscy50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbb10scy5ldmVudCYmcy5ldmVudC5pbnRlcnJ1cHQuY2FsbChlLGUuX19kYXRhX18scy5pbmRleCkpO2Zvcih2YXIgaSBpbiBwKWlmKCtpPHIpe3ZhciBmPXBbaV07Zi50aW1lci5jPW51bGwsZi50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbaV19dS5jPWEsUGUoZnVuY3Rpb24oKXtyZXR1cm4gdS5jJiZhKG58fDEpJiYodS5jPW51bGwsdS50PU5hTiksMX0sMCxsKSxwLmFjdGl2ZT1yLG0uZXZlbnQmJm0uZXZlbnQuc3RhcnQuY2FsbChlLGUuX19kYXRhX18sdCksXz1bXSxtLnR3ZWVuLmZvckVhY2goZnVuY3Rpb24obixyKXsocj1yLmNhbGwoZSxlLl9fZGF0YV9fLHQpKSYmXy5wdXNoKHIpfSksZD1tLmVhc2UsYz1tLmR1cmF0aW9ufWZ1bmN0aW9uIGEobyl7Zm9yKHZhciBzPW8vYyxpPWQocyksYT1fLmxlbmd0aDthPjA7KV9bLS1hXS5jYWxsKGUsaSk7aWYocz49MSlyZXR1cm4gbS5ldmVudCYmbS5ldmVudC5lbmQuY2FsbChlLGUuX19kYXRhX18sdCksLS1wLmNvdW50P2RlbGV0ZSBwW3JdOmRlbGV0ZSBlW25dLDF9dmFyIGwsdSxjLGQsXyxwPWVbbl18fChlW25dPXthY3RpdmU6MCxjb3VudDowfSksbT1wW3JdO218fChsPW8udGltZSx1PVBlKHMsMCxsKSxtPXBbcl09e3R3ZWVuOm5ldyBmLHRpbWU6bCx0aW1lcjp1LGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSxpbmRleDp0fSxvPW51bGwsKytwLmNvdW50KX1mdW5jdGlvbiBpaShlLHQsbil7ZS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3ZhciByPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShyKT9yOm4oZSkpKyIsMCkifSl9ZnVuY3Rpb24gYWkoZSx0LG4pe2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXt2YXIgcj10KGUpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShyKT9yOm4oZSkpKyIpIn0pfWZ1bmN0aW9uIGxpKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gdWkoZSx0LG4pe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gbyhlLG4pe3ZhciByPWVbMV0tZVswXSxvPXIvbixzPXBpLmJpc2VjdChabCxvKTtyZXR1cm4gcz09WmwubGVuZ3RoP1t0LnllYXIsb3MoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMzE1MzZlNn0pLG4pWzJdXTpzP3Rbby9abFtzLTFdPFpsW3NdL28/cy0xOnNdOltudSxvcyhlLG4pWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGNpKGUuaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLHIpOmUuZG9tYWluKCkubWFwKGNpKX0sci5uaWNlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4haXNOYU4obikmJiFlLnJhbmdlKG4sY2koK24rMSksdCkubGVuZ3RofXZhciBzPXIuZG9tYWluKCksaT1YbyhzKSxhPW51bGw9PWU/byhpLDEwKToibnVtYmVyIj09dHlwZW9mIGUmJm8oaSxlKTtyZXR1cm4gYSYmKGU9YVswXSx0PWFbMV0pLHIuZG9tYWluKEpvKHMsdD4xP3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO24odD1lLmZsb29yKHQpKTspdD1jaSh0LTEpO3JldHVybiB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7bih0PWUuY2VpbCh0KSk7KXQ9Y2koK3QrMSk7cmV0dXJuIHR9fTplKSl9LHIudGlja3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1YbyhyLmRvbWFpbigpKSxzPW51bGw9PWU/byhuLDEwKToibnVtYmVyIj09dHlwZW9mIGU/byhuLGUpOiFlLnJhbmdlJiZbe3JhbmdlOmV9LHRdO3JldHVybiBzJiYoZT1zWzBdLHQ9c1sxXSksZS5yYW5nZShuWzBdLGNpKCtuWzFdKzEpLHQ8MT8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHVpKGUuY29weSgpLHQsbil9LG5zKHIsZSl9ZnVuY3Rpb24gY2koZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIGRpKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBfaShlKXt2YXIgdD1oaS5jcmVhdGVSYW5nZSgpO3JldHVybiB0LnNlbGVjdE5vZGUoaGkuYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfXZhciBwaT17dmVyc2lvbjoiMy41LjE3In0sZmk9W10uc2xpY2UsbWk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpLmNhbGwoZSl9LGhpPXRoaXMuZG9jdW1lbnQ7aWYoaGkpdHJ5e21pKGhpLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaChlKXttaT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1uZXcgQXJyYXkodCk7dC0tOyluW3RdPWVbdF07cmV0dXJuIG59fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxoaSl0cnl7aGkuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKGUpe3ZhciBnaT10aGlzLkVsZW1lbnQucHJvdG90eXBlLGJpPWdpLnNldEF0dHJpYnV0ZSxFaT1naS5zZXRBdHRyaWJ1dGVOUyx5aT10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLHZpPXlpLnNldFByb3BlcnR5O2dpLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe2JpLmNhbGwodGhpcyxlLHQrIiIpfSxnaS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbil7RWkuY2FsbCh0aGlzLGUsdCxuKyIiKX0seWkuc2V0UHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4pe3ZpLmNhbGwodGhpcyxlLHQrIiIsbil9fXBpLmFzY2VuZGluZz1hLHBpLmRlc2NlbmRpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59LHBpLm1pbj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz0tMSxzPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrbzxzOylpZihudWxsIT0ocj1lW29dKSYmcj49cil7bj1yO2JyZWFrfWZvcig7KytvPHM7KW51bGwhPShyPWVbb10pJiZuPnImJihuPXIpfWVsc2V7Zm9yKDsrK288czspaWYobnVsbCE9KHI9dC5jYWxsKGUsZVtvXSxvKSkmJnI+PXIpe249cjticmVha31mb3IoOysrbzxzOyludWxsIT0ocj10LmNhbGwoZSxlW29dLG8pKSYmbj5yJiYobj1yKX1yZXR1cm4gbn0scGkubWF4PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPS0xLHM9ZS5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytvPHM7KWlmKG51bGwhPShyPWVbb10pJiZyPj1yKXtuPXI7YnJlYWt9Zm9yKDsrK288czspbnVsbCE9KHI9ZVtvXSkmJnI+biYmKG49cil9ZWxzZXtmb3IoOysrbzxzOylpZihudWxsIT0ocj10LmNhbGwoZSxlW29dLG8pKSYmcj49cil7bj1yO2JyZWFrfWZvcig7KytvPHM7KW51bGwhPShyPXQuY2FsbChlLGVbb10sbykpJiZyPm4mJihuPXIpfXJldHVybiBufSxwaS5leHRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scz0tMSxpPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrczxpOylpZihudWxsIT0ocj1lW3NdKSYmcj49cil7bj1vPXI7YnJlYWt9Zm9yKDsrK3M8aTspbnVsbCE9KHI9ZVtzXSkmJihuPnImJihuPXIpLG88ciYmKG89cikpfWVsc2V7Zm9yKDsrK3M8aTspaWYobnVsbCE9KHI9dC5jYWxsKGUsZVtzXSxzKSkmJnI+PXIpe249bz1yO2JyZWFrfWZvcig7KytzPGk7KW51bGwhPShyPXQuY2FsbChlLGVbc10scykpJiYobj5yJiYobj1yKSxvPHImJihvPXIpKX1yZXR1cm5bbixvXX0scGkuc3VtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLG89ZS5sZW5ndGgscz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxvOyl1KG49K2Vbc10pJiYocis9bik7ZWxzZSBmb3IoOysrczxvOyl1KG49K3QuY2FsbChlLGVbc10scykpJiYocis9bik7cmV0dXJuIHJ9LHBpLm1lYW49ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsbz1lLmxlbmd0aCxzPS0xLGk9bztpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxvOyl1KG49bChlW3NdKSk/cis9bjotLWk7ZWxzZSBmb3IoOysrczxvOyl1KG49bCh0LmNhbGwoZSxlW3NdLHMpKSk/cis9bjotLWk7aWYoaSlyZXR1cm4gci9pfSxwaS5xdWFudGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuPShlLmxlbmd0aC0xKSp0KzEscj1NYXRoLmZsb29yKG4pLG89K2Vbci0xXSxzPW4tcjtyZXR1cm4gcz9vK3MqKGVbcl0tbyk6b30scGkubWVkaWFuPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxvPWUubGVuZ3RoLHM9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3M8bzspdShuPWwoZVtzXSkpJiZyLnB1c2gobik7ZWxzZSBmb3IoOysrczxvOyl1KG49bCh0LmNhbGwoZSxlW3NdLHMpKSkmJnIucHVzaChuKTtpZihyLmxlbmd0aClyZXR1cm4gcGkucXVhbnRpbGUoci5zb3J0KGEpLC41KX0scGkudmFyaWFuY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89ZS5sZW5ndGgscz0wLGk9MCxhPS0xLGM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxvOyl1KG49bChlW2FdKSkmJihyPW4tcyxzKz1yLysrYyxpKz1yKihuLXMpKTtlbHNlIGZvcig7KythPG87KXUobj1sKHQuY2FsbChlLGVbYV0sYSkpKSYmKHI9bi1zLHMrPXIvKytjLGkrPXIqKG4tcykpO2lmKGM+MSlyZXR1cm4gaS8oYy0xKX0scGkuZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9cGkudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgVGk9YyhhKTtwaS5iaXNlY3RMZWZ0PVRpLmxlZnQscGkuYmlzZWN0PXBpLmJpc2VjdFJpZ2h0PVRpLnJpZ2h0LHBpLmJpc2VjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBjKDE9PT1lLmxlbmd0aD9mdW5jdGlvbih0LG4pe3JldHVybiBhKGUodCksbil9OmUpfSxwaS5zaHVmZmxlPWZ1bmN0aW9uKGUsdCxuKXsocz1hcmd1bWVudHMubGVuZ3RoKTwzJiYobj1lLmxlbmd0aCxzPDImJih0PTApKTtmb3IodmFyIHIsbyxzPW4tdDtzOylvPU1hdGgucmFuZG9tKCkqcy0tfDAscj1lW3MrdF0sZVtzK3RdPWVbbyt0XSxlW28rdF09cjtyZXR1cm4gZX0scGkucGVybXV0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09ZVt0W25dXTtyZXR1cm4gcn0scGkucGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aC0xLHI9ZVswXSxvPW5ldyBBcnJheShuPDA/MDpuKTt0PG47KW9bdF09W3Iscj1lWysrdF1dO3JldHVybiBvfSxwaS50cmFuc3Bvc2U9ZnVuY3Rpb24oZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEsbj1waS5taW4oZSxkKSxyPW5ldyBBcnJheShuKTsrK3Q8bjspZm9yKHZhciBvLHM9LTEsaT1yW3RdPW5ldyBBcnJheShvKTsrK3M8bzspaVtzXT1lW3NdW3RdO3JldHVybiByfSxwaS56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gcGkudHJhbnNwb3NlKGFyZ3VtZW50cyl9LHBpLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0fSxwaS52YWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKGVbbl0pO3JldHVybiB0fSxwaS5lbnRyaWVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7a2V5Om4sdmFsdWU6ZVtuXX0pO3JldHVybiB0fSxwaS5tZXJnZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG89ZS5sZW5ndGgscz0tMSxpPTA7KytzPG87KWkrPWVbc10ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShpKTstLW8+PTA7KWZvcihyPWVbb10sdD1yLmxlbmd0aDstLXQ+PTA7KW5bLS1pXT1yW3RdO3JldHVybiBufTt2YXIgQWk9TWF0aC5hYnM7cGkucmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MSxhcmd1bWVudHMubGVuZ3RoPDImJih0PWUsZT0wKSksKHQtZSkvbj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgcixvPVtdLHM9XyhBaShuKSksaT0tMTtpZihlKj1zLHQqPXMsbio9cyxuPDApZm9yKDsocj1lK24qKytpKT50OylvLnB1c2goci9zKTtlbHNlIGZvcig7KHI9ZStuKisraSk8dDspby5wdXNoKHIvcyk7cmV0dXJuIG99LHBpLm1hcD1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBmO2lmKGUgaW5zdGFuY2VvZiBmKWUuZm9yRWFjaChmdW5jdGlvbihlLHQpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciByLG89LTEscz1lLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxzOyluLnNldChvLGVbb10pO2Vsc2UgZm9yKDsrK288czspbi5zZXQodC5jYWxsKGUscj1lW29dLG8pLHIpfWVsc2UgZm9yKHZhciBpIGluIGUpbi5zZXQoaSxlW2ldKTtyZXR1cm4gbn07dmFyIENpPSJfX3Byb3RvX18iLE9pPSJcMCI7cChmLHtoYXM6ZyxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX1ttKGUpXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX1ttKGUpXT10fSxyZW1vdmU6YixrZXlzOkUsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuXyllLnB1c2godGhpcy5fW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLl8pZS5wdXNoKHtrZXk6aCh0KSx2YWx1ZTp0aGlzLl9bdF19KTtyZXR1cm4gZX0sc2l6ZTp5LGVtcHR5OnYsZm9yRWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fKWUuY2FsbCh0aGlzLGgodCksdGhpcy5fW3RdKX19KSxwaS5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGksYSl7aWYoYT49cy5sZW5ndGgpcmV0dXJuIHI/ci5jYWxsKG8saSk6bj9pLnNvcnQobik6aTtmb3IodmFyIGwsdSxjLGQsXz0tMSxwPWkubGVuZ3RoLG09c1thKytdLGg9bmV3IGY7KytfPHA7KShkPWguZ2V0KGw9bSh1PWlbX10pKSk/ZC5wdXNoKHUpOmguc2V0KGwsW3VdKTtyZXR1cm4gdD8odT10KCksYz1mdW5jdGlvbihuLHIpe3Uuc2V0KG4sZSh0LHIsYSkpfSk6KHU9e30sYz1mdW5jdGlvbihuLHIpe3Vbbl09ZSh0LHIsYSl9KSxoLmZvckVhY2goYyksdX1mdW5jdGlvbiB0KGUsbil7aWYobj49cy5sZW5ndGgpcmV0dXJuIGU7dmFyIHI9W10sbz1pW24rK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLG8pe3IucHVzaCh7a2V5OmUsdmFsdWVzOnQobyxuKX0pfSksbz9yLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLmtleSx0LmtleSl9KTpyfXZhciBuLHIsbz17fSxzPVtdLGk9W107cmV0dXJuIG8ubWFwPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUobix0LDApfSxvLmVudHJpZXM9ZnVuY3Rpb24obil7cmV0dXJuIHQoZShwaS5tYXAsbiwwKSwwKX0sby5rZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHMucHVzaChlKSxvfSxvLnNvcnRLZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBpW3MubGVuZ3RoLTFdPWUsb30sby5zb3J0VmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiBuPWUsb30sby5yb2xsdXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSxvfSxvfSxwaS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFQ7aWYoZSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjsrK24pdC5hZGQoZVtuXSk7cmV0dXJuIHR9LHAoVCx7aGFzOmcsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9bbShlKz0iIildPSEwLGV9LHJlbW92ZTpiLHZhbHVlczpFLHNpemU6eSxlbXB0eTp2LGZvckVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuXyllLmNhbGwodGhpcyxoKHQpKX19KSxwaS5iZWhhdmlvcj17fSxwaS5yZWJpbmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj0xLG89YXJndW1lbnRzLmxlbmd0aDsrK3I8bzspZVtuPWFyZ3VtZW50c1tyXV09QyhlLHQsdFtuXSk7cmV0dXJuIGV9O3ZhciBTaT1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtwaS5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgUix0PS0xLG49YXJndW1lbnRzLmxlbmd0aDsrK3Q8bjspZVthcmd1bWVudHNbdF1dPWooZSk7cmV0dXJuIGV9LFIucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmRleE9mKCIuIikscj0iIjtpZihuPj0wJiYocj1lLnNsaWNlKG4rMSksZT1lLnNsaWNlKDAsbikpLGUpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW2VdLm9uKHIpOnRoaXNbZV0ub24ocix0KTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09dClmb3IoZSBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoZSkmJnRoaXNbZV0ub24ocixudWxsKTtyZXR1cm4gdGhpc319LHBpLmV2ZW50PW51bGwscGkucmVxdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKFJpLCJcXCQmIil9O3ZhciBSaT0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2csamk9e30uX19wcm90b19fP2Z1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl19LHhpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvcihlKX0sTGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKGUpfSxEaT1mdW5jdGlvbihlLHQpe3ZhciBuPWUubWF0Y2hlc3x8ZVtPKGUsIm1hdGNoZXNTZWxlY3RvciIpXTtyZXR1cm4oRGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9KShlLHQpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoeGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU2l6emxlKGUsdClbMF18fG51bGx9LExpPVNpenpsZSxEaT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSxwaS5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gcGkuc2VsZWN0KGhpLmRvY3VtZW50RWxlbWVudCl9O3ZhciB3aT1waS5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO3dpLnNlbGVjdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzPVtdO2U9TShlKTtmb3IodmFyIGk9LTEsYT10aGlzLmxlbmd0aDsrK2k8YTspe3MucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KHI9dGhpc1tpXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsdT1yLmxlbmd0aDsrK2w8dTspKG89cltsXSk/KHQucHVzaChuPWUuY2FsbChvLG8uX19kYXRhX18sbCxpKSksbiYmIl9fZGF0YV9fImluIG8mJihuLl9fZGF0YV9fPW8uX19kYXRhX18pKTp0LnB1c2gobnVsbCl9cmV0dXJuIHcocyl9LHdpLnNlbGVjdEFsbD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9W107ZT1rKGUpO2Zvcih2YXIgbz0tMSxzPXRoaXMubGVuZ3RoOysrbzxzOylmb3IodmFyIGk9dGhpc1tvXSxhPS0xLGw9aS5sZW5ndGg7KythPGw7KShuPWlbYV0pJiYoci5wdXNoKHQ9bWkoZS5jYWxsKG4sbi5fX2RhdGFfXyxhLG8pKSksdC5wYXJlbnROb2RlPW4pO3JldHVybiB3KHIpfTt2YXIgTWk9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGtpPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpNaSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O3BpLm5zPXtwcmVmaXg6a2kscXVhbGlmeTpmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoIjoiKSxuPWU7cmV0dXJuIHQ+PTAmJiJ4bWxucyIhPT0obj1lLnNsaWNlKDAsdCkpJiYoZT1lLnNsaWNlKHQrMSkpLGtpLmhhc093blByb3BlcnR5KG4pP3tzcGFjZTpraVtuXSxsb2NhbDplfTplfX0sd2kuYXR0cj1mdW5jdGlvbihlLHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gZT1waS5ucy5xdWFsaWZ5KGUpLGUubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcih0IGluIGUpdGhpcy5lYWNoKEkodCxlW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChJKGUsdCkpfSx3aS5jbGFzc2VkPWZ1bmN0aW9uKGUsdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpLHI9KGU9SChlKSkubGVuZ3RoLG89LTE7aWYodD1uLmNsYXNzTGlzdCl7Zm9yKDsrK288cjspaWYoIXQuY29udGFpbnMoZVtvXSkpcmV0dXJuITF9ZWxzZSBmb3IodD1uLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsrK288cjspaWYoIU4oZVtvXSkudGVzdCh0KSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodCBpbiBlKXRoaXMuZWFjaChGKHQsZVt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goRihlLHQpKX0sd2kuc3R5bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7aWYocjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe3I8MiYmKHQ9IiIpO2ZvcihuIGluIGUpdGhpcy5lYWNoKFUobixlW25dLHQpKTtyZXR1cm4gdGhpc31pZihyPDIpe3ZhciBvPXRoaXMubm9kZSgpO3JldHVybiBpKG8pLmdldENvbXB1dGVkU3R5bGUobyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfW49IiJ9cmV0dXJuIHRoaXMuZWFjaChVKGUsdCxuKSl9LHdpLnByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMubm9kZSgpW2VdO2Zvcih0IGluIGUpdGhpcy5lYWNoKEcodCxlW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChHKGUsdCkpfSx3aS50ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fTpudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sd2kuaHRtbD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSx3aS5hcHBlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9eihlKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSx3aS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT16KGUpLHQ9TSh0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sd2kucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChWKX0sd2kuZGF0YT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSxuKXt2YXIgcixvLHMsaT1lLmxlbmd0aCxjPW4ubGVuZ3RoLGQ9TWF0aC5taW4oaSxjKSxfPW5ldyBBcnJheShjKSxwPW5ldyBBcnJheShjKSxtPW5ldyBBcnJheShpKTtpZih0KXt2YXIgaCxnPW5ldyBmLGI9bmV3IEFycmF5KGkpO2ZvcihyPS0xOysrcjxpOykobz1lW3JdKSYmKGcuaGFzKGg9dC5jYWxsKG8sby5fX2RhdGFfXyxyKSk/bVtyXT1vOmcuc2V0KGgsbyksYltyXT1oKTtmb3Iocj0tMTsrK3I8YzspKG89Zy5nZXQoaD10LmNhbGwobixzPW5bcl0scikpKT8hMCE9PW8mJihfW3JdPW8sby5fX2RhdGFfXz1zKTpwW3JdPVcocyksZy5zZXQoaCwhMCk7Zm9yKHI9LTE7KytyPGk7KXIgaW4gYiYmITAhPT1nLmdldChiW3JdKSYmKG1bcl09ZVtyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8ZDspbz1lW3JdLHM9bltyXSxvPyhvLl9fZGF0YV9fPXMsX1tyXT1vKTpwW3JdPVcocyk7Zm9yKDtyPGM7KytyKXBbcl09VyhuW3JdKTtmb3IoO3I8aTsrK3IpbVtyXT1lW3JdfXAudXBkYXRlPV8scC5wYXJlbnROb2RlPV8ucGFyZW50Tm9kZT1tLnBhcmVudE5vZGU9ZS5wYXJlbnROb2RlLGEucHVzaChwKSxsLnB1c2goXyksdS5wdXNoKG0pfXZhciByLG8scz0tMSxpPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3IoZT1uZXcgQXJyYXkoaT0ocj10aGlzWzBdKS5sZW5ndGgpOysrczxpOykobz1yW3NdKSYmKGVbc109by5fX2RhdGFfXyk7cmV0dXJuIGV9dmFyIGE9WChbXSksbD13KFtdKSx1PXcoW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKWZvcig7KytzPGk7KW4ocj10aGlzW3NdLGUuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxzKSk7ZWxzZSBmb3IoOysrczxpOyluKHI9dGhpc1tzXSxlKTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBhfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sbH0sd2kuZGF0dW09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMucHJvcGVydHkoIl9fZGF0YV9fIil9LHdpLmZpbHRlcj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz1bXTsiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9WShlKSk7Zm9yKHZhciBzPTAsaT10aGlzLmxlbmd0aDtzPGk7cysrKXtvLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShuPXRoaXNbc10pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsbD1uLmxlbmd0aDthPGw7YSsrKShyPW5bYV0pJiZlLmNhbGwocixyLl9fZGF0YV9fLGEscykmJnQucHVzaChyKX1yZXR1cm4gdyhvKX0sd2kub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTEsdD10aGlzLmxlbmd0aDsrK2U8dDspZm9yKHZhciBuLHI9dGhpc1tlXSxvPXIubGVuZ3RoLTEscz1yW29dOy0tbz49MDspKG49cltvXSkmJihzJiZzIT09bi5uZXh0U2libGluZyYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLHMpLHM9bik7cmV0dXJuIHRoaXN9LHdpLnNvcnQ9ZnVuY3Rpb24oZSl7ZT1xLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIHQ9LTEsbj10aGlzLmxlbmd0aDsrK3Q8bjspdGhpc1t0XS5zb3J0KGUpO3JldHVybiB0aGlzLm9yZGVyKCl9LHdpLmVhY2g9ZnVuY3Rpb24oZSl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbih0LG4scil7ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLHIpfSl9LHdpLmNhbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9bWkoYXJndW1lbnRzKTtyZXR1cm4gZS5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sd2kuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LHdpLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXRoaXMubGVuZ3RoO2U8dDtlKyspZm9yKHZhciBuPXRoaXNbZV0scj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7dmFyIHM9bltyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSx3aS5zaXplPWZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKCl7KytlfSksZX07dmFyIElpPVtdO3BpLnNlbGVjdGlvbi5lbnRlcj1YLHBpLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9SWksSWkuYXBwZW5kPXdpLmFwcGVuZCxJaS5lbXB0eT13aS5lbXB0eSxJaS5ub2RlPXdpLm5vZGUsSWkuY2FsbD13aS5jYWxsLElpLnNpemU9d2kuc2l6ZSxJaS5zZWxlY3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixvLHMsaT1bXSxhPS0xLGw9dGhpcy5sZW5ndGg7KythPGw7KXtyPShvPXRoaXNbYV0pLnVwZGF0ZSxpLnB1c2godD1bXSksdC5wYXJlbnROb2RlPW8ucGFyZW50Tm9kZTtmb3IodmFyIHU9LTEsYz1vLmxlbmd0aDsrK3U8YzspKHM9b1t1XSk/KHQucHVzaChyW3VdPW49ZS5jYWxsKG8ucGFyZW50Tm9kZSxzLl9fZGF0YV9fLHUsYSkpLG4uX19kYXRhX189cy5fX2RhdGFfXyk6dC5wdXNoKG51bGwpfXJldHVybiB3KGkpfSxJaS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD0kKHRoaXMpKSx3aS5pbnNlcnQuY2FsbCh0aGlzLGUsdCl9LHBpLnNlbGVjdD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/KHQ9W3hpKGUsaGkpXSx0LnBhcmVudE5vZGU9aGkuZG9jdW1lbnRFbGVtZW50KToodD1bZV0sdC5wYXJlbnROb2RlPXMoZSkpLHcoW3RdKX0scGkuc2VsZWN0QWxsPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8odD1taShMaShlLGhpKSksdC5wYXJlbnROb2RlPWhpLmRvY3VtZW50RWxlbWVudCk6KHQ9bWkoZSksdC5wYXJlbnROb2RlPW51bGwpLHcoW3RdKX0sd2kub249ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7aWYocjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe3I8MiYmKHQ9ITEpO2ZvcihuIGluIGUpdGhpcy5lYWNoKFEobixlW25dLHQpKTtyZXR1cm4gdGhpc31pZihyPDIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK2VdKSYmci5fO249ITF9cmV0dXJuIHRoaXMuZWFjaChRKGUsdCxuKSl9O3ZhciBQaT1waS5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7aGkmJlBpLmZvckVhY2goZnVuY3Rpb24oZSl7Im9uIitlIGluIGhpJiZQaS5yZW1vdmUoZSl9KTt2YXIgTmksSGk9MDtwaS5tb3VzZT1mdW5jdGlvbihlKXtyZXR1cm4gdGUoZSxMKCkpfTt2YXIgRmk9dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO3BpLnRvdWNoPWZ1bmN0aW9uKGUsdCxuKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihuPXQsdD1MKCkuY2hhbmdlZFRvdWNoZXMpLHQpZm9yKHZhciByLG89MCxzPXQubGVuZ3RoO288czsrK28paWYoKHI9dFtvXSkuaWRlbnRpZmllcj09PW4pcmV0dXJuIHRlKGUscil9LHBpLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLG8pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHMpfWZ1bmN0aW9uIHQoZSx0LG8scyxpKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIGUsbixyPXQoXyxtKTtyJiYoZT1yWzBdLUVbMF0sbj1yWzFdLUVbMV0sZnw9ZXxuLEU9cixwKHt0eXBlOiJkcmFnIix4OnJbMF0rdVswXSx5OnJbMV0rdVsxXSxkeDplLGR5Om59KSl9ZnVuY3Rpb24gbCgpe3QoXyxtKSYmKGcub24ocytoLG51bGwpLm9uKGkraCxudWxsKSxiKGYpLHAoe3R5cGU6ImRyYWdlbmQifSkpfXZhciB1LGM9dGhpcyxkPXBpLmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8cGkuZXZlbnQudGFyZ2V0LF89Yy5wYXJlbnROb2RlLHA9bi5vZihjLGFyZ3VtZW50cyksZj0wLG09ZSgpLGg9Ii5kcmFnIisobnVsbD09bT8iIjoiLSIrbSksZz1waS5zZWxlY3QobyhkKSkub24ocytoLGEpLm9uKGkraCxsKSxiPWVlKGQpLEU9dChfLG0pO3I/KHU9ci5hcHBseShjLGFyZ3VtZW50cyksdT1bdS54LUVbMF0sdS55LUVbMV1dKTp1PVswLDBdLHAoe3R5cGU6ImRyYWdzdGFydCJ9KX19dmFyIG49RChlLCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLHI9bnVsbCxvPXQoUyxwaS5tb3VzZSxpLCJtb3VzZW1vdmUiLCJtb3VzZXVwIikscz10KG5lLHBpLnRvdWNoLEEsInRvdWNobW92ZSIsInRvdWNoZW5kIik7cmV0dXJuIGUub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0scGkucmViaW5kKGUsbiwib24iKX0scGkudG91Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PUwoKS50b3VjaGVzKSx0P21pKHQpLm1hcChmdW5jdGlvbih0KXt2YXIgbj10ZShlLHQpO3JldHVybiBuLmlkZW50aWZpZXI9dC5pZGVudGlmaWVyLG59KTpbXX07dmFyIEJpPTFlLTYsVWk9QmkqQmksR2k9TWF0aC5QSSx6aT0yKkdpLFZpPXppLUJpLFdpPUdpLzIsWWk9R2kvMTgwLHFpPTE4MC9HaSxLaT1NYXRoLlNRUlQyO3BpLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1lWzBdLHM9ZVsxXSxpPWVbMl0sYT10WzBdLGw9dFsxXSx1PXRbMl0sYz1hLW8sZD1sLXMsXz1jKmMrZCpkO2lmKF88VWkpcj1NYXRoLmxvZyh1L2kpL0tpLG49ZnVuY3Rpb24oZSl7cmV0dXJuW28rZSpjLHMrZSpkLGkqTWF0aC5leHAoS2kqZSpyKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KF8pLGY9KHUqdS1pKmkrNCpfKS8oMippKjIqcCksbT0odSp1LWkqaS00Kl8pLygyKnUqMipwKSxoPU1hdGgubG9nKE1hdGguc3FydChmKmYrMSktZiksZz1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO3I9KGctaCkvS2ksbj1mdW5jdGlvbihlKXt2YXIgdD1lKnIsbj1sZShoKSxhPWkvKDIqcCkqKG4qdWUoS2kqdCtoKS1hZShoKSk7cmV0dXJuW28rYSpjLHMrYSpkLGkqbi9sZShLaSp0K2gpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn0scGkuYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZS5vbihMLGQpLm9uKCRpKyIuem9vbSIscCkub24oImRibGNsaWNrLnpvb20iLGYpLm9uKGssXyl9ZnVuY3Rpb24gdChlKXtyZXR1cm5bKGVbMF0tQy54KS9DLmssKGVbMV0tQy55KS9DLmtdfWZ1bmN0aW9uIG4oZSl7cmV0dXJuW2VbMF0qQy5rK0MueCxlWzFdKkMuaytDLnldfWZ1bmN0aW9uIHIoZSl7Qy5rPU1hdGgubWF4KFNbMF0sTWF0aC5taW4oU1sxXSxlKSl9ZnVuY3Rpb24gbyhlLHQpe3Q9bih0KSxDLngrPWVbMF0tdFswXSxDLnkrPWVbMV0tdFsxXX1mdW5jdGlvbiBzKHQsbixzLGkpe3QuX19jaGFydF9fPXt4OkMueCx5OkMueSxrOkMua30scihNYXRoLnBvdygyLGkpKSxvKGg9bixzKSx0PXBpLnNlbGVjdCh0KSxSPjAmJih0PXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKFIpKSx0LmNhbGwoZS5ldmVudCl9ZnVuY3Rpb24gYSgpe3YmJnYuZG9tYWluKHkucmFuZ2UoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKGUtQy54KS9DLmt9KS5tYXAoeS5pbnZlcnQpKSxBJiZBLmRvbWFpbihULnJhbmdlKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybihlLUMueSkvQy5rfSkubWFwKFQuaW52ZXJ0KSl9ZnVuY3Rpb24gbChlKXtqKyt8fGUoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiB1KGUpe2EoKSxlKHt0eXBlOiJ6b29tIixzY2FsZTpDLmssdHJhbnNsYXRlOltDLngsQy55XX0pfWZ1bmN0aW9uIGMoZSl7LS1qfHwoZSh7dHlwZToiem9vbWVuZCJ9KSxoPW51bGwpfWZ1bmN0aW9uIGQoKXtmdW5jdGlvbiBlKCl7YT0xLG8ocGkubW91c2UociksXyksdShzKX1mdW5jdGlvbiBuKCl7ZC5vbih3LG51bGwpLm9uKE0sbnVsbCkscChhKSxjKHMpfXZhciByPXRoaXMscz1JLm9mKHIsYXJndW1lbnRzKSxhPTAsZD1waS5zZWxlY3QoaShyKSkub24odyxlKS5vbihNLG4pLF89dChwaS5tb3VzZShyKSkscD1lZShyKTt6bC5jYWxsKHIpLGwocyl9ZnVuY3Rpb24gXygpe2Z1bmN0aW9uIGUoKXt2YXIgZT1waS50b3VjaGVzKGYpO3JldHVybiBwPUMuayxlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pZGVudGlmaWVyIGluIGgmJihoW2UuaWRlbnRpZmllcl09dChlKSl9KSxlfWZ1bmN0aW9uIG4oKXt2YXIgdD1waS5ldmVudC50YXJnZXQ7cGkuc2VsZWN0KHQpLm9uKHksaSkub24odixhKSxULnB1c2godCk7Zm9yKHZhciBuPXBpLmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpaFtuW3JdLmlkZW50aWZpZXJdPW51bGw7dmFyIGw9ZSgpLHU9RGF0ZS5ub3coKTtpZigxPT09bC5sZW5ndGgpe2lmKHUtRTw1MDApe3ZhciBjPWxbMF07cyhmLGMsaFtjLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coQy5rKS9NYXRoLkxOMikrMSkseCgpfUU9dX1lbHNlIGlmKGwubGVuZ3RoPjEpe3ZhciBjPWxbMF0sZD1sWzFdLF89Y1swXS1kWzBdLHA9Y1sxXS1kWzFdO2c9XypfK3AqcH19ZnVuY3Rpb24gaSgpe3ZhciBlLHQsbixzLGk9cGkudG91Y2hlcyhmKTt6bC5jYWxsKGYpO2Zvcih2YXIgYT0wLGw9aS5sZW5ndGg7YTxsOysrYSxzPW51bGwpaWYobj1pW2FdLHM9aFtuLmlkZW50aWZpZXJdKXtpZih0KWJyZWFrO2U9bix0PXN9aWYocyl7dmFyIGM9KGM9blswXS1lWzBdKSpjKyhjPW5bMV0tZVsxXSkqYyxkPWcmJk1hdGguc3FydChjL2cpO2U9WyhlWzBdK25bMF0pLzIsKGVbMV0rblsxXSkvMl0sdD1bKHRbMF0rc1swXSkvMiwodFsxXStzWzFdKS8yXSxyKGQqcCl9RT1udWxsLG8oZSx0KSx1KG0pfWZ1bmN0aW9uIGEoKXtpZihwaS5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciB0PXBpLmV2ZW50LmNoYW5nZWRUb3VjaGVzLG49MCxyPXQubGVuZ3RoO248cjsrK24pZGVsZXRlIGhbdFtuXS5pZGVudGlmaWVyXTtmb3IodmFyIG8gaW4gaClyZXR1cm4gdm9pZCBlKCl9cGkuc2VsZWN0QWxsKFQpLm9uKGIsbnVsbCksQS5vbihMLGQpLm9uKGssXyksTygpLGMobSl9dmFyIHAsZj10aGlzLG09SS5vZihmLGFyZ3VtZW50cyksaD17fSxnPTAsYj0iLnpvb20tIitwaS5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLHk9InRvdWNobW92ZSIrYix2PSJ0b3VjaGVuZCIrYixUPVtdLEE9cGkuc2VsZWN0KGYpLE89ZWUoZik7bigpLGwobSksQS5vbihMLG51bGwpLm9uKGssbil9ZnVuY3Rpb24gcCgpe3ZhciBlPUkub2YodGhpcyxhcmd1bWVudHMpO2I/Y2xlYXJUaW1lb3V0KGIpOih6bC5jYWxsKHRoaXMpLG09dChoPWd8fHBpLm1vdXNlKHRoaXMpKSxsKGUpKSxiPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiPW51bGwsYyhlKX0sNTApLHgoKSxyKE1hdGgucG93KDIsLjAwMipYaSgpKSpDLmspLG8oaCxtKSx1KGUpfWZ1bmN0aW9uIGYoKXt2YXIgZT1waS5tb3VzZSh0aGlzKSxuPU1hdGgubG9nKEMuaykvTWF0aC5MTjI7cyh0aGlzLGUsdChlKSxwaS5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwobiktMTpNYXRoLmZsb29yKG4pKzEpfXZhciBtLGgsZyxiLEUseSx2LFQsQSxDPXt4OjAseTowLGs6MX0sTz1bOTYwLDUwMF0sUz1RaSxSPTI1MCxqPTAsTD0ibW91c2Vkb3duLnpvb20iLHc9Im1vdXNlbW92ZS56b29tIixNPSJtb3VzZXVwLnpvb20iLGs9InRvdWNoc3RhcnQuem9vbSIsST1EKGUsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuICRpfHwoJGk9Im9ud2hlZWwiaW4gaGk/KFhpPWZ1bmN0aW9uKCl7cmV0dXJuLXBpLmV2ZW50LmRlbHRhWSoocGkuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBoaT8oWGk9ZnVuY3Rpb24oKXtyZXR1cm4gcGkuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooWGk9ZnVuY3Rpb24oKXtyZXR1cm4tcGkuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSxlLmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPUkub2YodGhpcyxhcmd1bWVudHMpLHQ9QztVbD9waS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Qz10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxsKGUpfSkudHdlZW4oInpvb206em9vbSIsZnVuY3Rpb24oKXt2YXIgbj1PWzBdLHI9T1sxXSxvPWg/aFswXTpuLzIscz1oP2hbMV06ci8yLGk9cGkuaW50ZXJwb2xhdGVab29tKFsoby1DLngpL0Muaywocy1DLnkpL0MuayxuL0Mua10sWyhvLXQueCkvdC5rLChzLXQueSkvdC5rLG4vdC5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWkodCksYT1uL3JbMl07dGhpcy5fX2NoYXJ0X189Qz17eDpvLXJbMF0qYSx5OnMtclsxXSphLGs6YX0sdShlKX19KS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsZnVuY3Rpb24oKXtjKGUpfSkuZWFjaCgiZW5kLnpvb20iLGZ1bmN0aW9uKCl7YyhlKX0pOih0aGlzLl9fY2hhcnRfXz1DLGwoZSksdShlKSxjKGUpKX0pfSxlLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz17eDordFswXSx5Oit0WzFdLGs6Qy5rfSxhKCksZSk6W0MueCxDLnldfSxlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPXt4OkMueCx5OkMueSxrOm51bGx9LHIoK3QpLGEoKSxlKTpDLmt9LGUuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9bnVsbD09dD9RaTpbK3RbMF0sK3RbMV1dLGUpOlN9LGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXQmJlsrdFswXSwrdFsxXV0sZSk6Z30sZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhPPXQmJlsrdFswXSwrdFsxXV0sZSk6T30sZS5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj0rdCxlKTpSfSxlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCx5PXQuY29weSgpLEM9e3g6MCx5OjAsazoxfSxlKTp2fSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9dCxUPXQuY29weSgpLEM9e3g6MCx5OjAsazoxfSxlKTpBfSxwaS5yZWJpbmQoZSxJLCJvbiIpfTt2YXIgWGksJGksUWk9WzAsMS8wXTtwaS5jb2xvcj1kZSxkZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0scGkuaHNsPV9lO3ZhciBKaT1fZS5wcm90b3R5cGU9bmV3IGRlO0ppLmJyaWdodGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/ZToxKSxuZXcgX2UodGhpcy5oLHRoaXMucyx0aGlzLmwvZSl9LEppLmRhcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2U6MSksbmV3IF9lKHRoaXMuaCx0aGlzLnMsZSp0aGlzLmwpfSxKaS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gcGUodGhpcy5oLHRoaXMucyx0aGlzLmwpfSxwaS5oY2w9ZmU7dmFyIFppPWZlLnByb3RvdHlwZT1uZXcgZGU7WmkuYnJpZ2h0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZSh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrZWEqKGFyZ3VtZW50cy5sZW5ndGg/ZToxKSkpfSxaaS5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZSh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLWVhKihhcmd1bWVudHMubGVuZ3RoP2U6MSkpKX0sWmkucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIG1lKHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0scGkubGFiPWhlO3ZhciBlYT0xOCx0YT0uOTUwNDcsbmE9MSxyYT0xLjA4ODgzLG9hPWhlLnByb3RvdHlwZT1uZXcgZGU7b2EuYnJpZ2h0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZShNYXRoLm1pbigxMDAsdGhpcy5sK2VhKihhcmd1bWVudHMubGVuZ3RoP2U6MSkpLHRoaXMuYSx0aGlzLmIpfSxvYS5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZShNYXRoLm1heCgwLHRoaXMubC1lYSooYXJndW1lbnRzLmxlbmd0aD9lOjEpKSx0aGlzLmEsdGhpcy5iKX0sb2EucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGdlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0scGkucmdiPVRlO3ZhciBzYT1UZS5wcm90b3R5cGU9bmV3IGRlO3NhLmJyaWdodGVyPWZ1bmN0aW9uKGUpe2U9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9lOjEpO3ZhciB0PXRoaXMucixuPXRoaXMuZyxyPXRoaXMuYixvPTMwO3JldHVybiB0fHxufHxyPyh0JiZ0PG8mJih0PW8pLG4mJm48byYmKG49byksciYmcjxvJiYocj1vKSxuZXcgVGUoTWF0aC5taW4oMjU1LHQvZSksTWF0aC5taW4oMjU1LG4vZSksTWF0aC5taW4oMjU1LHIvZSkpKTpuZXcgVGUobyxvLG8pfSxzYS5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9lOjEpLG5ldyBUZShlKnRoaXMucixlKnRoaXMuZyxlKnRoaXMuYil9LHNhLmhzbD1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LHNhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK09lKHRoaXMucikrT2UodGhpcy5nKStPZSh0aGlzLmIpfTt2YXIgaWE9cGkubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtpYS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aWEuc2V0KGUsQWUodCkpfSkscGkuZnVuY3Rvcj1EZSxwaS54aHI9d2UoQSkscGkuZHN2PWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLG4scyl7YXJndW1lbnRzLmxlbmd0aDwzJiYocz1uLG49bnVsbCk7dmFyIGk9TWUoZSx0LG51bGw9PW4/cjpvKG4pLHMpO3JldHVybiBpLnJvdz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pLnJlc3BvbnNlKG51bGw9PShuPWUpP3I6byhlKSk6bn0saX1mdW5jdGlvbiByKGUpe3JldHVybiBuLnBhcnNlKGUucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5wYXJzZSh0LnJlc3BvbnNlVGV4dCxlKX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoaSkuam9pbihlKX1mdW5jdGlvbiBpKGUpe3JldHVybiBhLnRlc3QoZSk/JyInK2UucmVwbGFjZSgvXCIvZywnIiInKSsnIic6ZX12YXIgYT1uZXcgUmVnRXhwKCdbIicrZSsiXG5dIiksbD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIG4ucGFyc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gbi5wYXJzZVJvd3MoZSxmdW5jdGlvbihlLG4pe2lmKHIpcmV0dXJuIHIoZSxuLTEpO3ZhciBvPW5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7IitlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKSsiOiBkWyIrdCsiXSJ9KS5qb2luKCIsIikrIn0iKTtyPXQ/ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChvKGUpLG4pfTpvfSl9LG4ucGFyc2VSb3dzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe2lmKGM+PXUpcmV0dXJuIGk7aWYobylyZXR1cm4gbz0hMSxzO3ZhciB0PWM7aWYoMzQ9PT1lLmNoYXJDb2RlQXQodCkpe2Zvcih2YXIgbj10O24rKzx1OylpZigzND09PWUuY2hhckNvZGVBdChuKSl7aWYoMzQhPT1lLmNoYXJDb2RlQXQobisxKSlicmVhazsrK259Yz1uKzI7dmFyIHI9ZS5jaGFyQ29kZUF0KG4rMSk7cmV0dXJuIDEzPT09cj8obz0hMCwxMD09PWUuY2hhckNvZGVBdChuKzIpJiYrK2MpOjEwPT09ciYmKG89ITApLGUuc2xpY2UodCsxLG4pLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8dTspe3ZhciByPWUuY2hhckNvZGVBdChjKyspLGE9MTtpZigxMD09PXIpbz0hMDtlbHNlIGlmKDEzPT09cilvPSEwLDEwPT09ZS5jaGFyQ29kZUF0KGMpJiYoKytjLCsrYSk7ZWxzZSBpZihyIT09bCljb250aW51ZTtyZXR1cm4gZS5zbGljZSh0LGMtYSl9cmV0dXJuIGUuc2xpY2UodCl9Zm9yKHZhciByLG8scz17fSxpPXt9LGE9W10sdT1lLmxlbmd0aCxjPTAsZD0wOyhyPW4oKSkhPT1pOyl7Zm9yKHZhciBfPVtdO3IhPT1zJiZyIT09aTspXy5wdXNoKHIpLHI9bigpO3QmJm51bGw9PShfPXQoXyxkKyspKXx8YS5wdXNoKF8pfXJldHVybiBhfSxuLmZvcm1hdD1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHRbMF0pKXJldHVybiBuLmZvcm1hdFJvd3ModCk7dmFyIHI9bmV3IFQsbz1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXIuaGFzKHQpfHxvLnB1c2goci5hZGQodCkpfSksW28ubWFwKGkpLmpvaW4oZSldLmNvbmNhdCh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkodFtlXSl9KS5qb2luKGUpfSkpLmpvaW4oIlxuIil9LG4uZm9ybWF0Um93cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAocykuam9pbigiXG4iKX0sbn0scGkuY3N2PXBpLmRzdigiLCIsInRleHQvY3N2IikscGkudHN2PXBpLmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIGFhLGxhLHVhLGNhLGRhPXRoaXNbTyh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O3BpLnRpbWVyPWZ1bmN0aW9uKCl7UGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxwaS50aW1lci5mbHVzaD1mdW5jdGlvbigpe0hlKCksRmUoKX0scGkucm91bmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKGUqKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQoZSl9O3ZhciBfYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKFVlKTtwaS5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSx0JiYoZT1waS5yb3VuZChlLEJlKGUsdCkpKSxuPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyhlKS9NYXRoLkxOMTApLG49TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigobi0xKS8zKSkpKSxfYVs4K24vM119O3ZhciBwYT0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFthLXolXSk/L2ksZmE9cGkubWFwKHtiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKDE2KX0sWDpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRml4ZWQodCl9LHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1waS5yb3VuZChlLEJlKGUsdCkpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsQmUoZSooMSsxZS0xNSksdCkpKSl9fSksbWE9cGkudGltZT17fSxoYT1EYXRlO1ZlLnByb3RvdHlwZT17Z2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF0ZSgpfSxnZXREYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpfSxnZXRGdWxsWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRnVsbFllYXIoKX0sZ2V0SG91cnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0hvdXJzKCl9LGdldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWlsbGlzZWNvbmRzKCl9LGdldE1pbnV0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbnV0ZXMoKX0sZ2V0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01vbnRoKCl9LGdldFNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ1NlY29uZHMoKX0sZ2V0VGltZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VGltZSgpfSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAwfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCl9LHNldERhdGU6ZnVuY3Rpb24oKXtnYS5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXREYXk6ZnVuY3Rpb24oKXtnYS5zZXRVVENEYXkuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7Z2Euc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEhvdXJzOmZ1bmN0aW9uKCl7Z2Euc2V0VVRDSG91cnMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe2dhLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWludXRlczpmdW5jdGlvbigpe2dhLnNldFVUQ01pbnV0ZXMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1vbnRoOmZ1bmN0aW9uKCl7Z2Euc2V0VVRDTW9udGguYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFNlY29uZHM6ZnVuY3Rpb24oKXtnYS5zZXRVVENTZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRUaW1lOmZ1bmN0aW9uKCl7Z2Euc2V0VGltZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX19O3ZhciBnYT1EYXRlLnByb3RvdHlwZTttYS55ZWFyPVdlKGZ1bmN0aW9uKGUpe3JldHVybiBlPW1hLmRheShlKSxlLnNldE1vbnRoKDAsMSksZX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pLG1hLnllYXJzPW1hLnllYXIucmFuZ2UsbWEueWVhcnMudXRjPW1hLnllYXIudXRjLnJhbmdlLG1hLmRheT1XZShmdW5jdGlvbihlKXt2YXIgdD1uZXcgaGEoMmUzLDApO3JldHVybiB0LnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLHR9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLG1hLmRheXM9bWEuZGF5LnJhbmdlLG1hLmRheXMudXRjPW1hLmRheS51dGMucmFuZ2UsbWEuZGF5T2ZZZWFyPWZ1bmN0aW9uKGUpe3ZhciB0PW1hLnllYXIoZSk7cmV0dXJuIE1hdGguZmxvb3IoKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFsic3VuZGF5IiwibW9uZGF5IiwidHVlc2RheSIsIndlZG5lc2RheSIsInRodXJzZGF5IiwiZnJpZGF5Iiwic2F0dXJkYXkiXS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dD03LXQ7dmFyIG49bWFbZV09V2UoZnVuY3Rpb24oZSl7cmV0dXJuKGU9bWEuZGF5KGUpKS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpK3QpJTcpLGV9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpKzcqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKGUpe3ZhciBuPW1hLnllYXIoZSkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKG1hLmRheU9mWWVhcihlKSsobit0KSU3KS83KS0obiE9PXQpfSk7bWFbZSsicyJdPW4ucmFuZ2UsbWFbZSsicyJdLnV0Yz1uLnV0Yy5yYW5nZSxtYVtlKyJPZlllYXIiXT1mdW5jdGlvbihlKXt2YXIgbj1tYS55ZWFyKGUpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChtYS5kYXlPZlllYXIoZSkrKG4rdCklNykvNyl9fSksbWEud2Vlaz1tYS5zdW5kYXksbWEud2Vla3M9bWEuc3VuZGF5LnJhbmdlLG1hLndlZWtzLnV0Yz1tYS5zdW5kYXkudXRjLnJhbmdlLG1hLndlZWtPZlllYXI9bWEuc3VuZGF5T2ZZZWFyO3ZhciBiYT17Ii0iOiIiLF86IiAiLDA6IjAifSxFYT0vXlxzKlxkKy8seWE9L14lLztwaS5sb2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJue251bWJlckZvcm1hdDpHZShlKSx0aW1lRm9ybWF0OnFlKGUpfX07dmFyIHZhPXBpLmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7cGkuZm9ybWF0PXZhLm51bWJlckZvcm1hdCxwaS5nZW89e30sZnQucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbihlKXttdChlLHRoaXMudCxUYSksbXQoVGEucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9VGEudDp0aGlzLnM9VGEudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIFRhPW5ldyBmdDtwaS5nZW8uc3RyZWFtPWZ1bmN0aW9uKGUsdCl7ZSYmQWEuaGFzT3duUHJvcGVydHkoZS50eXBlKT9BYVtlLnR5cGVdKGUsdCk6aHQoZSx0KX07dmFyIEFhPXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7aHQoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5mZWF0dXJlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KWh0KG5bcl0uZ2VvbWV0cnksdCl9fSxDYT17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KWU9bltyXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2d0KGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuY29vcmRpbmF0ZXMscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylndChuW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtidChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jb29yZGluYXRlcyxyPS0xLG89bi5sZW5ndGg7KytyPG87KWJ0KG5bcl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmdlb21ldHJpZXMscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylodChuW3JdLHQpfX07cGkuZ2VvLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9hPTAscGkuZ2VvLnN0cmVhbShlLFJhKSxPYX07dmFyIE9hLFNhPW5ldyBmdCxSYT17c3BoZXJlOmZ1bmN0aW9uKCl7T2ErPTQqR2l9LHBvaW50OlMsbGluZVN0YXJ0OlMsbGluZUVuZDpTLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NhLnJlc2V0KCksUmEubGluZVN0YXJ0PUV0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9MipTYTtPYSs9ZTwwPzQqR2krZTplLFJhLmxpbmVTdGFydD1SYS5saW5lRW5kPVJhLnBvaW50PVN9fTtwaS5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe0UucHVzaCh5PVtjPWUsXz1lXSksdDxkJiYoZD10KSx0PnAmJihwPXQpfWZ1bmN0aW9uIHQodCxuKXt2YXIgcj15dChbdCpZaSxuKllpXSk7aWYoZyl7dmFyIG89VHQoZyxyKSxzPVtvWzFdLC1vWzBdLDBdLGk9VHQocyxvKTtPdChpKSxpPVN0KGkpO3ZhciBsPXQtZix1PWw+MD8xOi0xLG09aVswXSpxaSp1LGg9QWkobCk+MTgwO2lmKGheKHUqZjxtJiZtPHUqdCkpe3ZhciBiPWlbMV0qcWk7Yj5wJiYocD1iKX1lbHNlIGlmKG09KG0rMzYwKSUzNjAtMTgwLGheKHUqZjxtJiZtPHUqdCkpe3ZhciBiPS1pWzFdKnFpO2I8ZCYmKGQ9Yil9ZWxzZSBuPGQmJihkPW4pLG4+cCYmKHA9bik7aD90PGY/YShjLHQpPmEoYyxfKSYmKF89dCk6YSh0LF8pPmEoYyxfKSYmKGM9dCk6Xz49Yz8odDxjJiYoYz10KSx0Pl8mJihfPXQpKTp0PmY/YShjLHQpPmEoYyxfKSYmKF89dCk6YSh0LF8pPmEoYyxfKSYmKGM9dCl9ZWxzZSBlKHQsbik7Zz1yLGY9dH1mdW5jdGlvbiBuKCl7di5wb2ludD10fWZ1bmN0aW9uIHIoKXt5WzBdPWMseVsxXT1fLHYucG9pbnQ9ZSxnPW51bGx9ZnVuY3Rpb24gbyhlLG4pe2lmKGcpe3ZhciByPWUtZjtiKz1BaShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2UgbT1lLGg9bjtSYS5wb2ludChlLG4pLHQoZSxuKX1mdW5jdGlvbiBzKCl7UmEubGluZVN0YXJ0KCl9ZnVuY3Rpb24gaSgpe28obSxoKSxSYS5saW5lRW5kKCksQWkoYik+QmkmJihjPS0oXz0xODApKSx5WzBdPWMseVsxXT1fLGc9bnVsbH1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuKHQtPWUpPDA/dCszNjA6dH1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGVbMF0tdFswXX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgYyxkLF8scCxmLG0saCxnLGIsRSx5LHY9e3BvaW50OmUsbGluZVN0YXJ0Om4sbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3YucG9pbnQ9byx2LmxpbmVTdGFydD1zLHYubGluZUVuZD1pLGI9MCxSYS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1JhLnBvbHlnb25FbmQoKSx2LnBvaW50PWUsdi5saW5lU3RhcnQ9bix2LmxpbmVFbmQ9cixTYTwwPyhjPS0oXz0xODApLGQ9LShwPTkwKSk6Yj5CaT9wPTkwOmI8LUJpJiYoZD0tOTApLHlbMF09Yyx5WzFdPV99fTtyZXR1cm4gZnVuY3Rpb24oZSl7cD1fPS0oYz1kPTEvMCksRT1bXSxwaS5nZW8uc3RyZWFtKGUsdik7dmFyIHQ9RS5sZW5ndGg7aWYodCl7RS5zb3J0KGwpO2Zvcih2YXIgbixyPTEsbz1FWzBdLHM9W29dO3I8dDsrK3Ipbj1FW3JdLHUoblswXSxvKXx8dShuWzFdLG8pPyhhKG9bMF0sblsxXSk+YShvWzBdLG9bMV0pJiYob1sxXT1uWzFdKSxhKG5bMF0sb1sxXSk+YShvWzBdLG9bMV0pJiYob1swXT1uWzBdKSk6cy5wdXNoKG89bik7Zm9yKHZhciBpLG4sZj0tMS8wLHQ9cy5sZW5ndGgtMSxyPTAsbz1zW3RdO3I8PXQ7bz1uLCsrciluPXNbcl0sKGk9YShvWzFdLG5bMF0pKT5mJiYoZj1pLGM9blswXSxfPW9bMV0pfXJldHVybiBFPXk9bnVsbCxjPT09MS8wfHxkPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2MsZF0sW18scF1dfX0oKSxwaS5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24oZSl7amE9eGE9TGE9RGE9d2E9TWE9a2E9SWE9UGE9TmE9SGE9MCxwaS5nZW8uc3RyZWFtKGUsRmEpO3ZhciB0PVBhLG49TmEscj1IYSxvPXQqdCtuKm4rcipyO3JldHVybiBvPFVpJiYodD1NYSxuPWthLHI9SWEseGE8QmkmJih0PUxhLG49RGEscj13YSksKG89dCp0K24qbityKnIpPFVpKT9bTmFOLE5hTl06W01hdGguYXRhbjIobix0KSpxaSxpZShyL01hdGguc3FydChvKSkqcWldfTt2YXIgamEseGEsTGEsRGEsd2EsTWEsa2EsSWEsUGEsTmEsSGEsRmE9e3NwaGVyZTpTLHBvaW50Omp0LGxpbmVTdGFydDpMdCxsaW5lRW5kOkR0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0ZhLmxpbmVTdGFydD13dH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0ZhLmxpbmVTdGFydD1MdH19LEJhPUh0KGt0LEd0LFZ0LFstR2ksLUdpLzJdKSxVYT0xZTk7cGkuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLHMsaT17c3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBvJiYoby52YWxpZD0hMSksbz1zKGUpLG8udmFsaWQ9ITAsb30sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPUt0KGU9K2FbMF1bMF0sdD0rYVswXVsxXSxuPSthWzFdWzBdLHI9K2FbMV1bMV0pLG8mJihvLnZhbGlkPSExLG89bnVsbCksaSk6W1tlLHRdLFtuLHJdXX19O3JldHVybiBpLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LChwaS5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gWHQoJHQpfSkucmF3PSR0LHBpLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gcGkuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHBpLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBzPWVbMF0saT1lWzFdO3JldHVybiB0PW51bGwsbihzLGkpLHR8fChyKHMsaSksdCl8fG8ocyxpKSx0fXZhciB0LG4scixvLHM9cGkuZ2VvLmFsYmVycygpLGk9cGkuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxhPXBpLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbihlLG4pe3Q9W2Usbl19fTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9cy5zY2FsZSgpLG49cy50cmFuc2xhdGUoKSxyPShlWzBdLW5bMF0pL3Qsbz0oZVsxXS1uWzFdKS90O3JldHVybihvPj0uMTImJm88LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/aTpvPj0uMTY2JiZvPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2E6cykuaW52ZXJ0KGUpfSxlLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgdD1zLnN0cmVhbShlKSxuPWkuc3RyZWFtKGUpLHI9YS5zdHJlYW0oZSk7cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUsbyl7dC5wb2ludChlLG8pLG4ucG9pbnQoZSxvKSxyLnBvaW50KGUsbyl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksbi5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLG4ubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLG4ubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLG4ucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLG4ucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LGUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnByZWNpc2lvbih0KSxpLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxlKTpzLnByZWNpc2lvbigpfSxlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnNjYWxlKHQpLGkuc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksZS50cmFuc2xhdGUocy50cmFuc2xhdGUoKSkpOnMuc2NhbGUoKX0sZS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHMudHJhbnNsYXRlKCk7dmFyIHU9cy5zY2FsZSgpLGM9K3RbMF0sZD0rdFsxXTtyZXR1cm4gbj1zLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbYy0uNDU1KnUsZC0uMjM4KnVdLFtjKy40NTUqdSxkKy4yMzgqdV1dKS5zdHJlYW0obCkucG9pbnQscj1pLnRyYW5zbGF0ZShbYy0uMzA3KnUsZCsuMjAxKnVdKS5jbGlwRXh0ZW50KFtbYy0uNDI1KnUrQmksZCsuMTIqdStCaV0sW2MtLjIxNCp1LUJpLGQrLjIzNCp1LUJpXV0pLnN0cmVhbShsKS5wb2ludCxvPWEudHJhbnNsYXRlKFtjLS4yMDUqdSxkKy4yMTIqdV0pLmNsaXBFeHRlbnQoW1tjLS4yMTQqdStCaSxkKy4xNjYqdStCaV0sW2MtLjExNSp1LUJpLGQrLjIzNCp1LUJpXV0pLnN0cmVhbShsKS5wb2ludCxlfSxlLnNjYWxlKDEwNzApfTt2YXIgR2EsemEsVmEsV2EsWWEscWEsS2E9e3BvaW50OlMsbGluZVN0YXJ0OlMsbGluZUVuZDpTLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3phPTAsS2EubGluZVN0YXJ0PVF0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7S2EubGluZVN0YXJ0PUthLmxpbmVFbmQ9S2EucG9pbnQ9UyxHYSs9QWkoemEvMil9fSxYYT17cG9pbnQ6SnQsbGluZVN0YXJ0OlMsbGluZUVuZDpTLHBvbHlnb25TdGFydDpTLHBvbHlnb25FbmQ6U30sJGE9e3BvaW50OnRuLGxpbmVTdGFydDpubixsaW5lRW5kOnJuLHBvbHlnb25TdGFydDpmdW5jdGlvbigpeyRhLmxpbmVTdGFydD1vbn0scG9seWdvbkVuZDpmdW5jdGlvbigpeyRhLnBvaW50PXRuLCRhLmxpbmVTdGFydD1ubiwkYS5saW5lRW5kPXJufX07cGkuZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJnMucG9pbnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpJiZpLnZhbGlkfHwoaT1vKHMpKSxwaS5nZW8uc3RyZWFtKGUsaSkpLHMucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBpPW51bGwsZX12YXIgbixyLG8scyxpLGE9NC41O3JldHVybiBlLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIEdhPTAscGkuZ2VvLnN0cmVhbShlLG8oS2EpKSxHYX0sZS5jZW50cm9pZD1mdW5jdGlvbihlKXtyZXR1cm4gTGE9RGE9d2E9TWE9a2E9SWE9UGE9TmE9SGE9MCxwaS5nZW8uc3RyZWFtKGUsbygkYSkpLEhhP1tQYS9IYSxOYS9IYV06SWE/W01hL0lhLGthL0lhXTp3YT9bTGEvd2EsRGEvd2FdOltOYU4sTmFOXX0sZS5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFlhPXFhPS0oVmE9V2E9MS8wKSxwaS5nZW8uc3RyZWFtKGUsbyhYYSkpLFtbVmEsV2FdLFtZYSxxYV1dfSxlLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89KG49ZSk/ZS5zdHJlYW18fGxuKGUpOkEsdCgpKTpufSxlLmNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09KHI9ZSk/bmV3IFp0Om5ldyBzbihlKSwiZnVuY3Rpb24iIT10eXBlb2YgYSYmcy5wb2ludFJhZGl1cyhhKSx0KCkpOnJ9LGUucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDoocy5wb2ludFJhZGl1cygrdCksK3QpLGUpOmF9LGUucHJvamVjdGlvbihwaS5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHBpLmdlby50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7cmV0dXJue3N0cmVhbTpmdW5jdGlvbih0KXt2YXIgbj1uZXcgdW4odCk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufX19LHVuLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlLHQpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0scGkuZ2VvLnByb2plY3Rpb249ZG4scGkuZ2VvLnByb2plY3Rpb25NdXRhdG9yPV9uLChwaS5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKGZuKX0pLnJhdz1mbi5pbnZlcnQ9Zm4scGkuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQ9ZSh0WzBdKllpLHRbMV0qWWkpLHRbMF0qPXFpLHRbMV0qPXFpLHR9cmV0dXJuIGU9aG4oZVswXSUzNjAqWWksZVsxXSpZaSxlLmxlbmd0aD4yP2VbMl0qWWk6MCksdC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5pbnZlcnQodFswXSpZaSx0WzFdKllpKSx0WzBdKj1xaSx0WzFdKj1xaSx0fSx0fSxtbi5pbnZlcnQ9Zm4scGkuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLHQ9aG4oLWVbMF0qWWksLWVbMV0qWWksMCkuaW52ZXJ0LG89W107cmV0dXJuIG4obnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKGUsbil7by5wdXNoKGU9dChlLG4pKSxlWzBdKj1xaSxlWzFdKj1xaX19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W29dfX12YXIgdCxuLHI9WzAsMF0sbz02O3JldHVybiBlLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGUpOnJ9LGUuYW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49eW4oKHQ9K3IpKllpLG8qWWkpLGUpOnR9LGUucHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXluKHQqWWksKG89K3IpKllpKSxlKTpvfSxlLmFuZ2xlKDkwKX0scGkuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj0odFswXS1lWzBdKSpZaSxvPWVbMV0qWWkscz10WzFdKllpLGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxsPU1hdGguc2luKG8pLHU9TWF0aC5jb3MobyksYz1NYXRoLnNpbihzKSxkPU1hdGguY29zKHMpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgobj1kKmkpKm4rKG49dSpjLWwqZCphKSpuKSxsKmMrdSpkKmEpfSxwaS5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnQoKX19ZnVuY3Rpb24gdCgpe3JldHVybiBwaS5yYW5nZShNYXRoLmNlaWwocy9oKSpoLG8saCkubWFwKF8pLmNvbmNhdChwaS5yYW5nZShNYXRoLmNlaWwodS9nKSpnLGwsZykubWFwKHApKS5jb25jYXQocGkucmFuZ2UoTWF0aC5jZWlsKHIvZikqZixuLGYpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gQWkoZSVoKT5CaX0pLm1hcChjKSkuY29uY2F0KHBpLnJhbmdlKE1hdGguY2VpbChhL20pKm0saSxtKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIEFpKGUlZyk+Qml9KS5tYXAoZCkpfXZhciBuLHIsbyxzLGksYSxsLHUsYyxkLF8scCxmPTEwLG09ZixoPTkwLGc9MzYwLGI9Mi41O3JldHVybiBlLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV9fSl9LGUub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXyhzKS5jb25jYXQocChsKS5zbGljZSgxKSxfKG8pLnJldmVyc2UoKS5zbGljZSgxKSxwKHUpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sZS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTplLm1pbm9yRXh0ZW50KCl9LGUubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3RbMF1bMF0sbz0rdFsxXVswXSx1PSt0WzBdWzFdLGw9K3RbMV1bMV0scz5vJiYodD1zLHM9byxvPXQpLHU+bCYmKHQ9dSx1PWwsbD10KSxlLnByZWNpc2lvbihiKSk6W1tzLHVdLFtvLGxdXX0sZS5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxuPSt0WzFdWzBdLGE9K3RbMF1bMV0saT0rdFsxXVsxXSxyPm4mJih0PXIscj1uLG49dCksYT5pJiYodD1hLGE9aSxpPXQpLGUucHJlY2lzaW9uKGIpKTpbW3IsYV0sW24saV1dfSxlLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOmUubWlub3JTdGVwKCl9LGUubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGc9K3RbMV0sZSk6W2gsZ119LGUubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLG09K3RbMV0sZSk6W2YsbV19LGUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LGM9VG4oYSxpLDkwKSxkPUFuKHIsbixiKSxfPVRuKHUsbCw5MCkscD1BbihzLG8sYiksZSk6Yn0sZS5tYWpvckV4dGVudChbWy0xODAsLTkwK0JpXSxbMTgwLDkwLUJpXV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAtQmldLFsxODAsODArQmldXSl9LHBpLmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W3R8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG58fG8uYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIHQsbixyPUNuLG89T247cmV0dXJuIGUuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcGkuZ2VvLmRpc3RhbmNlKHR8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG58fG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZS5zb3VyY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP251bGw6bixlKTpyfSxlLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LGUpOm99LGUucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZTowfSxlfSxwaS5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24oZVswXSpZaSxlWzFdKllpLHRbMF0qWWksdFsxXSpZaSl9LHBpLmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIFFhPTAscGkuZ2VvLnN0cmVhbShlLEphKSxRYX07dmFyIFFhLEphPXtzcGhlcmU6Uyxwb2ludDpTLGxpbmVTdGFydDpSbixsaW5lRW5kOlMscG9seWdvblN0YXJ0OlMscG9seWdvbkVuZDpTfSxaYT1qbihmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErZSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gMipNYXRoLmFzaW4oZS8yKX0pOyhwaS5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKFphKX0pLnJhdz1aYTt2YXIgZWw9am4oZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5hY29zKGUpO3JldHVybiB0JiZ0L01hdGguc2luKHQpfSxBKTsocGkuZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRuKGVsKX0pLnJhdz1lbCwocGkuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFh0KHhuKX0pLnJhdz14biwocGkuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWHQoTG4pfSkucmF3PUxuO3ZhciB0bD1qbihmdW5jdGlvbihlKXtyZXR1cm4gMS9lfSxNYXRoLmF0YW4pOyhwaS5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gZG4odGwpfSkucmF3PXRsLERuLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVybltlLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1XaV19LChwaS5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gd24oRG4pfSkucmF3PURuO3ZhciBubD1qbihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyhwaS5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKG5sKX0pLnJhdz1ubDt2YXIgcmw9am4oZnVuY3Rpb24oZSl7cmV0dXJuIDEvKDErZSl9LGZ1bmN0aW9uKGUpe3JldHVybiAyKk1hdGguYXRhbihlKX0pOyhwaS5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBkbihybCl9KS5yYXc9cmwsTW4uaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1XaV19LChwaS5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIGU9d24oTW4pLHQ9ZS5jZW50ZXIsbj1lLnJvdGF0ZTtyZXR1cm4gZS5jZW50ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dChbLWVbMV0sZVswXV0pOihlPXQoKSxbZVsxXSwtZVswXV0pfSxlLnJvdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT9uKFtlWzBdLGVbMV0sZS5sZW5ndGg+Mj9lWzJdKzkwOjkwXSk6KGU9bigpLFtlWzBdLGVbMV0sZVsyXS05MF0pfSxuKFswLDAsOTBdKX0pLnJhdz1NbixwaS5nZW9tPXt9LHBpLmdlb20uaHVsbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsbz1EZShuKSxzPURlKHIpLGk9ZS5sZW5ndGgsYT1bXSxsPVtdO2Zvcih0PTA7dDxpO3QrKylhLnB1c2goWytvLmNhbGwodGhpcyxlW3RdLHQpLCtzLmNhbGwodGhpcyxlW3RdLHQpLHRdKTtmb3IoYS5zb3J0KE5uKSx0PTA7dDxpO3QrKylsLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgdT1QbihhKSxjPVBuKGwpLGQ9Y1swXT09PXVbMF0sXz1jW2MubGVuZ3RoLTFdPT09dVt1Lmxlbmd0aC0xXSxwPVtdO2Zvcih0PXUubGVuZ3RoLTE7dD49MDstLXQpcC5wdXNoKGVbYVt1W3RdXVsyXV0pO2Zvcih0PStkO3Q8Yy5sZW5ndGgtXzsrK3QpcC5wdXNoKGVbYVtjW3RdXVsyXV0pO3JldHVybiBwfXZhciBuPWtuLHI9SW47cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChlKToodC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdCl9LHBpLmdlb20ucG9seWdvbj1mdW5jdGlvbihlKXtyZXR1cm4gamkoZSxvbCksZX07dmFyIG9sPXBpLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107b2wuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PS0xLG49dGhpcy5sZW5ndGgscj10aGlzW24tMV0sbz0wOysrdDxuOyllPXIscj10aGlzW3RdLG8rPWVbMV0qclswXS1lWzBdKnJbMV07cmV0dXJuLjUqb30sb2wuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPS0xLG89dGhpcy5sZW5ndGgscz0wLGk9MCxhPXRoaXNbby0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KGU9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8bzspdD1hLGE9dGhpc1tyXSxuPXRbMF0qYVsxXS1hWzBdKnRbMV0scys9KHRbMF0rYVswXSkqbixpKz0odFsxXSthWzFdKSpuO3JldHVybltzKmUsaSplXX0sb2wuY2xpcD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG8scyxpLGE9Qm4oZSksbD0tMSx1PXRoaXMubGVuZ3RoLUJuKHRoaXMpLGM9dGhpc1t1LTFdOysrbDx1Oyl7Zm9yKHQ9ZS5zbGljZSgpLGUubGVuZ3RoPTAsbz10aGlzW2xdLHM9dFsocj10Lmxlbmd0aC1hKS0xXSxuPS0xOysrbjxyOylpPXRbbl0sSG4oaSxjLG8pPyhIbihzLGMsbyl8fGUucHVzaChGbihzLGksYyxvKSksZS5wdXNoKGkpKTpIbihzLGMsbykmJmUucHVzaChGbihzLGksYyxvKSkscz1pO2EmJmUucHVzaChlWzBdKSxjPW99cmV0dXJuIGV9O3ZhciBzbCxpbCxhbCxsbCx1bCxjbD1bXSxkbD1bXTtLbi5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZWRnZXMsbj10Lmxlbmd0aDtuLS07KWU9dFtuXS5lZGdlLGUuYiYmZS5hfHx0LnNwbGljZShuLDEpO3JldHVybiB0LnNvcnQoJG4pLHQubGVuZ3RofSxpci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxhci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbztpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtuPWV9ZWxzZSB0aGlzLl8/KGU9ZHIodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQsbj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LG49bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9bix0LkM9ITAsZT10O24mJm4uQzspcj1uLlUsbj09PXIuTD8obz1yLlIsbyYmby5DPyhuLkM9by5DPSExLHIuQz0hMCxlPXIpOihlPT09bi5SJiYodXIodGhpcyxuKSxlPW4sbj1lLlUpLG4uQz0hMSxyLkM9ITAsY3IodGhpcyxyKSkpOihvPXIuTCxvJiZvLkM/KG4uQz1vLkM9ITEsci5DPSEwLGU9cik6KGU9PT1uLkwmJihjcih0aGlzLG4pLGU9bixuPWUuVSksbi5DPSExLHIuQz0hMCx1cih0aGlzLHIpKSksbj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0LG4scixvPWUuVSxzPWUuTCxpPWUuUjtpZihuPXM/aT9kcihpKTpzOmksbz9vLkw9PT1lP28uTD1uOm8uUj1uOnRoaXMuXz1uLHMmJmk/KHI9bi5DLG4uQz1lLkMsbi5MPXMscy5VPW4sbiE9PWk/KG89bi5VLG4uVT1lLlUsZT1uLlIsby5MPWUsbi5SPWksaS5VPW4pOihuLlU9byxvPW4sZT1uLlIpKToocj1lLkMsZT1uKSxlJiYoZS5VPW8pLCFyKXtpZihlJiZlLkMpcmV0dXJuIHZvaWQoZS5DPSExKTtkb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT1vLkwpe2lmKHQ9by5SLHQuQyYmKHQuQz0hMSxvLkM9ITAsdXIodGhpcyxvKSx0PW8uUiksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5SJiZ0LlIuQ3x8KHQuTC5DPSExLHQuQz0hMCxjcih0aGlzLHQpLHQ9by5SKSx0LkM9by5DLG8uQz10LlIuQz0hMSx1cih0aGlzLG8pLGU9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKHQ9by5MLHQuQyYmKHQuQz0hMSxvLkM9ITAsY3IodGhpcyxvKSx0PW8uTCksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5MJiZ0LkwuQ3x8KHQuUi5DPSExLHQuQz0hMCx1cih0aGlzLHQpLHQ9by5MKSx0LkM9by5DLG8uQz10LkwuQz0hMSxjcih0aGlzLG8pLGU9dGhpcy5fO2JyZWFrfXQuQz0hMCxlPW8sbz1vLlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX0scGkuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKSxyPWFbMF1bMF0sbz1hWzBdWzFdLHM9YVsxXVswXSxpPWFbMV1bMV07cmV0dXJuIF9yKG4oZSksYSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihuLGEpe3ZhciBsPW4uZWRnZXMsdT1uLnNpdGU7KHRbYV09bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydCgpO3JldHVyblt0LngsdC55XX0pOnUueD49ciYmdS54PD1zJiZ1Lnk+PW8mJnUueTw9aT9bW3IsaV0sW3MsaV0sW3Msb10sW3Isb11dOltdKS5wb2ludD1lW2FdfSksdH1mdW5jdGlvbiBuKGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4Ok1hdGgucm91bmQocyhlLHQpL0JpKSpCaSx5Ok1hdGgucm91bmQoaShlLHQpL0JpKSpCaSxpOnR9fSl9dmFyIHI9a24sbz1JbixzPXIsaT1vLGE9X2w7cmV0dXJuIGU/dChlKToodC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gX3IobihlKSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmwmJmUucn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOmVbdC5sLmldLHRhcmdldDplW3Quci5pXX19KX0sdC50cmlhbmdsZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIF9yKG4oZSkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24obixyKXtmb3IodmFyIG8scz1uLnNpdGUsaT1uLmVkZ2VzLnNvcnQoJG4pLGE9LTEsbD1pLmxlbmd0aCx1PWlbbC0xXS5lZGdlLGM9dS5sPT09cz91LnI6dS5sOysrYTxsOyl1LG89Yyx1PWlbYV0uZWRnZSxjPXUubD09PXM/dS5yOnUubCxyPG8uaSYmcjxjLmkmJmZyKHMsbyxjKTwwJiZ0LnB1c2goW2Vbcl0sZVtvLmldLGVbYy5pXV0pfSksdH0sdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPURlKHI9ZSksdCk6cn0sdC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPURlKG89ZSksdCk6b30sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PWU/X2w6ZSx0KTphPT09X2w/bnVsbDphfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jbGlwRXh0ZW50KGUmJltbMCwwXSxlXSk6YT09PV9sP251bGw6YSYmYVsxXX0sdCl9O3ZhciBfbD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtwaS5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiBwaS5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMoZSl9LHBpLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24oZSx0LG4scixvKXtmdW5jdGlvbiBzKGUpe2Z1bmN0aW9uIHMoZSx0LG4scixvLHMsaSxhKXtpZighaXNOYU4obikmJiFpc05hTihyKSlpZihlLmxlYWYpe3ZhciBsPWUueCxjPWUueTtpZihudWxsIT1sKWlmKEFpKGwtbikrQWkoYy1yKTwuMDEpdShlLHQsbixyLG8scyxpLGEpO2Vsc2V7dmFyIGQ9ZS5wb2ludDtlLng9ZS55PWUucG9pbnQ9bnVsbCx1KGUsZCxsLGMsbyxzLGksYSksdShlLHQsbixyLG8scyxpLGEpfWVsc2UgZS54PW4sZS55PXIsZS5wb2ludD10fWVsc2UgdShlLHQsbixyLG8scyxpLGEpfWZ1bmN0aW9uIHUoZSx0LG4scixvLGksYSxsKXt2YXIgdT0uNSoobythKSxjPS41KihpK2wpLGQ9bj49dSxfPXI+PWMscD1fPDwxfGQ7ZS5sZWFmPSExLGU9ZS5ub2Rlc1twXXx8KGUubm9kZXNbcF09Z3IoKSksZD9vPXU6YT11LF8/aT1jOmw9YyxzKGUsdCxuLHIsbyxpLGEsbCl9dmFyIGMsZCxfLHAsZixtLGgsZyxiLEU9RGUoYSkseT1EZShsKTtpZihudWxsIT10KW09dCxoPW4sZz1yLGI9bztlbHNlIGlmKGc9Yj0tKG09aD0xLzApLGQ9W10sXz1bXSxmPWUubGVuZ3RoLGkpZm9yKHA9MDtwPGY7KytwKWM9ZVtwXSxjLng8bSYmKG09Yy54KSxjLnk8aCYmKGg9Yy55KSxjLng+ZyYmKGc9Yy54KSxjLnk+YiYmKGI9Yy55KSxkLnB1c2goYy54KSxfLnB1c2goYy55KTtlbHNlIGZvcihwPTA7cDxmOysrcCl7dmFyIHY9K0UoYz1lW3BdLHApLFQ9K3koYyxwKTt2PG0mJihtPXYpLFQ8aCYmKGg9VCksdj5nJiYoZz12KSxUPmImJihiPVQpLGQucHVzaCh2KSxfLnB1c2goVCl9dmFyIEE9Zy1tLEM9Yi1oO0E+Qz9iPWgrQTpnPW0rQzt2YXIgTz1ncigpO2lmKE8uYWRkPWZ1bmN0aW9uKGUpe3MoTyxlLCtFKGUsKytwKSwreShlLHApLG0saCxnLGIpfSxPLnZpc2l0PWZ1bmN0aW9uKGUpe2JyKGUsTyxtLGgsZyxiKX0sTy5maW5kPWZ1bmN0aW9uKGUpe3JldHVybiBFcihPLGVbMF0sZVsxXSxtLGgsZyxiKX0scD0tMSxudWxsPT10KXtmb3IoOysrcDxmOylzKE8sZVtwXSxkW3BdLF9bcF0sbSxoLGcsYik7LS1wfWVsc2UgZS5mb3JFYWNoKE8uYWRkKTtyZXR1cm4gZD1fPWU9Yz1udWxsLE99dmFyIGksYT1rbixsPUluO3JldHVybihpPWFyZ3VtZW50cy5sZW5ndGgpPyhhPW1yLGw9aHIsMz09PWkmJihvPW4scj10LG49dD0wKSxzKGUpKToocy54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUscyk6YX0scy55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUscyk6bH0scy5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PWU/dD1uPXI9bz1udWxsOih0PStlWzBdWzBdLG49K2VbMF1bMV0scj0rZVsxXVswXSxvPStlWzFdWzFdKSxzKTpudWxsPT10P251bGw6W1t0LG5dLFtyLG9dXX0scy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1lP3Q9bj1yPW89bnVsbDoodD1uPTAscj0rZVswXSxvPStlWzFdKSxzKTpudWxsPT10P251bGw6W3ItdCxvLW5dfSxzKX0scGkuaW50ZXJwb2xhdGVSZ2I9eXIscGkuaW50ZXJwb2xhdGVPYmplY3Q9dnIscGkuaW50ZXJwb2xhdGVOdW1iZXI9VHIscGkuaW50ZXJwb2xhdGVTdHJpbmc9QXI7dmFyIHBsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxmbD1uZXcgUmVnRXhwKHBsLnNvdXJjZSwiZyIpO3BpLmludGVycG9sYXRlPUNyLHBpLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKCJzdHJpbmciPT09bj9pYS5oYXModC50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KHQpP3lyOkFyOnQgaW5zdGFuY2VvZiBkZT95cjpBcnJheS5pc0FycmF5KHQpP09yOiJvYmplY3QiPT09biYmaXNOYU4odCk/dnI6VHIpKGUsdCl9XSxwaS5pbnRlcnBvbGF0ZUFycmF5PU9yO3ZhciBtbD1mdW5jdGlvbigpe3JldHVybiBBfSxobD1waS5tYXAoe2xpbmVhcjptbCxwb2x5OndyLHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4geHJ9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIExyfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gTXJ9LGV4cDpmdW5jdGlvbigpe3JldHVybiBrcn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIElyfSxlbGFzdGljOlByLGJhY2s6TnIsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIEhyfX0pLGdsPXBpLm1hcCh7aW46QSxvdXQ6UnIsImluLW91dCI6anIsIm91dC1pbiI6ZnVuY3Rpb24oZSl7cmV0dXJuIGpyKFJyKGUpKX19KTtwaS5lYXNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXhPZigiLSIpLG49dD49MD9lLnNsaWNlKDAsdCk6ZSxyPXQ+PTA/ZS5zbGljZSh0KzEpOiJpbiI7cmV0dXJuIG49aGwuZ2V0KG4pfHxtbCxyPWdsLmdldChyKXx8QSxTcihyKG4uYXBwbHkobnVsbCxmaS5jYWxsKGFyZ3VtZW50cywxKSkpKX0scGkuaW50ZXJwb2xhdGVIY2w9RnIscGkuaW50ZXJwb2xhdGVIc2w9QnIscGkuaW50ZXJwb2xhdGVMYWI9VXIscGkuaW50ZXJwb2xhdGVSb3VuZD1HcixwaS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHQ9aGkuY3JlYXRlRWxlbWVudE5TKHBpLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4ocGkudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpO3ZhciBuPXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IHpyKG4/bi5tYXRyaXg6YmwpfSkoZSl9LHpyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgYmw9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtwaS5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1KcixwaS5sYXlvdXQ9e30scGkubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0tMSxyPWUubGVuZ3RoOysrbjxyOyl0LnB1c2godG8oZVtuXSkpO3JldHVybiB0fX0scGkubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlLHUsZCxfLHAsZj17fSxtPVtdLGg9cGkucmFuZ2UocyksZz1bXTtmb3Iobj1bXSxyPVtdLGU9MCxfPS0xOysrXzxzOyl7Zm9yKHU9MCxwPS0xOysrcDxzOyl1Kz1vW19dW3BdO20ucHVzaCh1KSxnLnB1c2gocGkucmFuZ2UocykpLGUrPXV9Zm9yKGkmJmguc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBpKG1bZV0sbVt0XSl9KSxhJiZnLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnNvcnQoZnVuY3Rpb24oZSxuKXtyZXR1cm4gYShvW3RdW2VdLG9bdF1bbl0pfSl9KSxlPSh6aS1jKnMpL2UsdT0wLF89LTE7KytfPHM7KXtmb3IoZD11LHA9LTE7KytwPHM7KXt2YXIgYj1oW19dLEU9Z1tiXVtwXSx5PW9bYl1bRV0sdj11LFQ9dSs9eSplO2ZbYisiLSIrRV09e2luZGV4OmIsc3ViaW5kZXg6RSxzdGFydEFuZ2xlOnYsZW5kQW5nbGU6VCx2YWx1ZTp5fX1yW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZCxlbmRBbmdsZTp1LHZhbHVlOm1bYl19LHUrPWN9Zm9yKF89LTE7KytfPHM7KWZvcihwPV8tMTsrK3A8czspe3ZhciBBPWZbXysiLSIrcF0sQz1mW3ArIi0iK19dOyhBLnZhbHVlfHxDLnZhbHVlKSYmbi5wdXNoKEEudmFsdWU8Qy52YWx1ZT97c291cmNlOkMsdGFyZ2V0OkF9Ontzb3VyY2U6QSx0YXJnZXQ6Q30pfWwmJnQoKX1mdW5jdGlvbiB0KCl7bi5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwoKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMil9KX12YXIgbixyLG8scyxpLGEsbCx1PXt9LGM9MDtyZXR1cm4gdS5tYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9KG89ZSkmJm8ubGVuZ3RoLG49cj1udWxsLHUpOm99LHUucGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG49cj1udWxsLHUpOmN9LHUuc29ydEdyb3Vwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLG49cj1udWxsLHUpOml9LHUuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLG49bnVsbCx1KTphfSx1LnNvcnRDaG9yZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxuJiZ0KCksdSk6bH0sdS5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnx8ZSgpLG59LHUuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fGUoKSxyfSx1fSxwaS5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBmdW5jdGlvbih0LG4scixvKXtpZih0LnBvaW50IT09ZSl7dmFyIHM9dC5jeC1lLngsaT10LmN5LWUueSxhPW8tbixsPXMqcytpKmk7aWYoYSphL2c8bCl7aWYobDxtKXt2YXIgdT10LmNoYXJnZS9sO2UucHgtPXMqdSxlLnB5LT1pKnV9cmV0dXJuITB9aWYodC5wb2ludCYmbCYmbDxtKXt2YXIgdT10LnBvaW50Q2hhcmdlL2w7ZS5weC09cyp1LGUucHktPWkqdX19cmV0dXJuIXQuY2hhcmdlfX1mdW5jdGlvbiB0KGUpe2UucHg9cGkuZXZlbnQueCxlLnB5PXBpLmV2ZW50LnksbC5yZXN1bWUoKX12YXIgbixyLG8scyxpLGEsbD17fSx1PXBpLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLGQ9LjksXz1FbCxwPXlsLGY9LTMwLG09dmwsaD0uMSxnPS42NCxiPVtdLEU9W107cmV0dXJuIGwudGljaz1mdW5jdGlvbigpe2lmKChvKj0uOTkpPC4wMDUpcmV0dXJuIG49bnVsbCx1LmVuZCh7dHlwZToiZW5kIixhbHBoYTpvPTB9KSwhMDt2YXIgdCxyLGwsXyxwLG0sZyx5LHYsVD1iLmxlbmd0aCxBPUUubGVuZ3RoO2ZvcihyPTA7cjxBOysrcilsPUVbcl0sXz1sLnNvdXJjZSxwPWwudGFyZ2V0LHk9cC54LV8ueCx2PXAueS1fLnksKG09eSp5K3YqdikmJihtPW8qaVtyXSooKG09TWF0aC5zcXJ0KG0pKS1zW3JdKS9tLHkqPW0sdio9bSxwLngtPXkqKGc9Xy53ZWlnaHQrcC53ZWlnaHQ/Xy53ZWlnaHQvKF8ud2VpZ2h0K3Aud2VpZ2h0KTouNSkscC55LT12KmcsXy54Kz15KihnPTEtZyksXy55Kz12KmcpO2lmKChnPW8qaCkmJih5PWNbMF0vMix2PWNbMV0vMixyPS0xLGcpKWZvcig7KytyPFQ7KWw9YltyXSxsLngrPSh5LWwueCkqZyxsLnkrPSh2LWwueSkqZztpZihmKWZvcihsbyh0PXBpLmdlb20ucXVhZHRyZWUoYiksbyxhKSxyPS0xOysrcjxUOykobD1iW3JdKS5maXhlZHx8dC52aXNpdChlKGwpKTtmb3Iocj0tMTsrK3I8VDspbD1iW3JdLGwuZml4ZWQ/KGwueD1sLnB4LGwueT1sLnB5KToobC54LT0obC5weC0obC5weD1sLngpKSpkLGwueS09KGwucHktKGwucHk9bC55KSkqZCk7dS50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpvfSl9LGwubm9kZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ZSxsKTpifSxsLmxpbmtzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUsbCk6RX0sbC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUsbCk6Y30sbC5saW5rRGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTorZSxsKTpffSxsLmRpc3RhbmNlPWwubGlua0Rpc3RhbmNlLGwubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2UsbCk6cH0sbC5mcmljdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rZSxsKTpkfSxsLmNoYXJnZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLGwpOmZ9LGwuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSplLGwpOk1hdGguc3FydChtKX0sbC5ncmF2aXR5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStlLGwpOmh9LGwudGhldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZSplLGwpOk1hdGguc3FydChnKX0sbC5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rZSxvP2U+MD9vPWU6KG4uYz1udWxsLG4udD1OYU4sbj1udWxsLHUuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm89MH0pKTplPjAmJih1LnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6bz1lfSksbj1QZShsLnRpY2spKSxsKTpvfSxsLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIpe2lmKCFuKXtmb3Iobj1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpbltsXT1bXTtmb3IobD0wO2w8dTsrK2wpe3ZhciBzPUVbbF07bltzLnNvdXJjZS5pbmRleF0ucHVzaChzLnRhcmdldCksbltzLnRhcmdldC5pbmRleF0ucHVzaChzLnNvdXJjZSl9fWZvcih2YXIgaSxhPW5bdF0sbD0tMSxjPWEubGVuZ3RoOysrbDxjOylpZighaXNOYU4oaT1hW2xdW2VdKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LG4scixvPWIubGVuZ3RoLHU9RS5sZW5ndGgsZD1jWzBdLG09Y1sxXTtmb3IodD0wO3Q8bzsrK3QpKHI9Ylt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDx1OysrdClyPUVbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPWJbci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9YltyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxvOysrdClyPWJbdF0saXNOYU4oci54KSYmKHIueD1lKCJ4IixkKSksaXNOYU4oci55KSYmKHIueT1lKCJ5IixtKSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYocz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgXylmb3IodD0wO3Q8dTsrK3Qpc1t0XT0rXy5jYWxsKHRoaXMsRVt0XSx0KTtlbHNlIGZvcih0PTA7dDx1OysrdClzW3RdPV87aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IodD0wO3Q8dTsrK3QpaVt0XT0rcC5jYWxsKHRoaXMsRVt0XSx0KTtlbHNlIGZvcih0PTA7dDx1OysrdClpW3RdPXA7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3Q8bzsrK3QpYVt0XT0rZi5jYWxsKHRoaXMsYlt0XSx0KTtlbHNlIGZvcih0PTA7dDxvOysrdClhW3RdPWY7cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9cGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihBKS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixvbykub24oImRyYWcuZm9yY2UiLHQpLm9uKCJkcmFnZW5kLmZvcmNlIixzbykpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsaW8pLm9uKCJtb3VzZW91dC5mb3JjZSIsYW8pLmNhbGwocil9LHBpLnJlYmluZChsLHUsIm9uIil9O3ZhciBFbD0yMCx5bD0xLHZsPTEvMDtwaS5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShvKXt2YXIgcyxpPVtvXSxhPVtdO2ZvcihvLmRlcHRoPTA7bnVsbCE9KHM9aS5wb3AoKSk7KWlmKGEucHVzaChzKSwodT1uLmNhbGwoZSxzLHMuZGVwdGgpKSYmKGw9dS5sZW5ndGgpKXtmb3IodmFyIGwsdSxjOy0tbD49MDspaS5wdXNoKGM9dVtsXSksYy5wYXJlbnQ9cyxjLmRlcHRoPXMuZGVwdGgrMTtyJiYocy52YWx1ZT0wKSxzLmNoaWxkcmVuPXV9ZWxzZSByJiYocy52YWx1ZT0rci5jYWxsKGUscyxzLmRlcHRoKXx8MCksZGVsZXRlIHMuY2hpbGRyZW47cmV0dXJuIF9vKG8sZnVuY3Rpb24oZSl7dmFyIG4sbzt0JiYobj1lLmNoaWxkcmVuKSYmbi5zb3J0KHQpLHImJihvPWUucGFyZW50KSYmKG8udmFsdWUrPWUudmFsdWUpfSksYX12YXIgdD1tbyxuPXBvLHI9Zm87cmV0dXJuIGUuc29ydD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUpOnR9LGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoY28odCxmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiYoZS52YWx1ZT0wKX0pLF9vKHQsZnVuY3Rpb24odCl7dmFyIG47dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChlLHQsdC5kZXB0aCl8fDApLChuPXQucGFyZW50KSYmKG4udmFsdWUrPXQudmFsdWUpfSkpLHR9LGV9LHBpLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyLG8pe3ZhciBzPXQuY2hpbGRyZW47aWYodC54PW4sdC55PXQuZGVwdGgqbyx0LmR4PXIsdC5keT1vLHMmJihpPXMubGVuZ3RoKSl7dmFyIGksYSxsLHU9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK3U8aTspZShhPXNbdV0sbixsPWEudmFsdWUqcixvKSxuKz1sfX1mdW5jdGlvbiB0KGUpe3ZhciBuPWUuY2hpbGRyZW4scj0wO2lmKG4mJihvPW4ubGVuZ3RoKSlmb3IodmFyIG8scz0tMTsrK3M8bzspcj1NYXRoLm1heChyLHQobltzXSkpO3JldHVybiAxK3J9ZnVuY3Rpb24gbihuLHMpe3ZhciBpPXIuY2FsbCh0aGlzLG4scyk7cmV0dXJuIGUoaVswXSwwLG9bMF0sb1sxXS90KGlbMF0pKSxpfXZhciByPXBpLmxheW91dC5oaWVyYXJjaHkoKSxvPVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxuKTpvfSx1byhuLHIpfSxwaS5sYXlvdXQucGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShpKXt2YXIgYSxsPWkubGVuZ3RoLHU9aS5tYXAoZnVuY3Rpb24obixyKXtyZXR1cm4rdC5jYWxsKGUsbixyKX0pLGM9KygiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyKSxkPSgiZnVuY3Rpb24iPT10eXBlb2Ygbz9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvKS1jLF89TWF0aC5taW4oTWF0aC5hYnMoZCkvbCwrKCJmdW5jdGlvbiI9PXR5cGVvZiBzP3MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnMpKSxwPV8qKGQ8MD8tMToxKSxmPXBpLnN1bSh1KSxtPWY/KGQtbCpwKS9mOjAsaD1waS5yYW5nZShsKSxnPVtdO3JldHVybiBudWxsIT1uJiZoLnNvcnQobj09PVRsP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHVbdF0tdVtlXX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihpW2VdLGlbdF0pfSksaC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2dbZV09e2RhdGE6aVtlXSx2YWx1ZTphPXVbZV0sc3RhcnRBbmdsZTpjLGVuZEFuZ2xlOmMrPWEqbStwLHBhZEFuZ2xlOl99fSksZ312YXIgdD1OdW1iZXIsbj1UbCxyPTAsbz16aSxzPTA7cmV0dXJuIGUudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixlKTp0fSxlLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxlKTpyfSxlLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZSk6b30sZS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGV9O3ZhciBUbD17fTtwaS5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGEsbCl7aWYoIShfPWEubGVuZ3RoKSlyZXR1cm4gYTt2YXIgdT1hLm1hcChmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfSksYz11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm5bcy5jYWxsKGUsdCxuKSxpLmNhbGwoZSx0LG4pXX0pfSksZD1uLmNhbGwoZSxjLGwpO3U9cGkucGVybXV0ZSh1LGQpLGM9cGkucGVybXV0ZShjLGQpO3ZhciBfLHAsZixtLGg9ci5jYWxsKGUsYyxsKSxnPXVbMF0ubGVuZ3RoO2ZvcihmPTA7ZjxnOysrZilmb3Ioby5jYWxsKGUsdVswXVtmXSxtPWhbZl0sY1swXVtmXVsxXSkscD0xO3A8XzsrK3Apby5jYWxsKGUsdVtwXVtmXSxtKz1jW3AtMV1bZl1bMV0sY1twXVtmXVsxXSk7cmV0dXJuIGF9dmFyIHQ9QSxuPXlvLHI9dm8sbz1FbyxzPWdvLGk9Ym87cmV0dXJuIGUudmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFsLmdldCh0KXx8eW8sZSk6bn0sZS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDbC5nZXQodCl8fHZvLGUpOnJ9LGUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZSk6b30sZX07dmFyIEFsPXBpLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmxlbmd0aCxvPWUubWFwKFRvKSxzPWUubWFwKEFvKSxpPXBpLnJhbmdlKHIpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gb1tlXS1vW3RdfSksYT0wLGw9MCx1PVtdLGM9W107Zm9yKHQ9MDt0PHI7Kyt0KW49aVt0XSxhPGw/KGErPXNbbl0sdS5wdXNoKG4pKToobCs9c1tuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHBpLnJhbmdlKGUubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6eW99KSxDbD1waS5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1lWzBdLmxlbmd0aCxpPVtdLGE9MCxsPVtdO2ZvcihuPTA7bjxzOysrbil7Zm9yKHQ9MCxyPTA7dDxvO3QrKylyKz1lW3RdW25dWzFdO3I+YSYmKGE9ciksaS5wdXNoKHIpfWZvcihuPTA7bjxzOysrbilsW25dPShhLWlbbl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYSxsLHUsYz1lLmxlbmd0aCxkPWVbMF0sXz1kLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9dT0wLG49MTtuPF87KytuKXtmb3IodD0wLG89MDt0PGM7Kyt0KW8rPWVbdF1bbl1bMV07Zm9yKHQ9MCxzPTAsYT1kW25dWzBdLWRbbi0xXVswXTt0PGM7Kyt0KXtmb3Iocj0wLGk9KGVbdF1bbl1bMV0tZVt0XVtuLTFdWzFdKS8oMiphKTtyPHQ7KytyKWkrPShlW3JdW25dWzFdLWVbcl1bbi0xXVsxXSkvYTtzKz1pKmVbdF1bbl1bMV19cFtuXT1sLT1vP3MvbyphOjAsbDx1JiYodT1sKX1mb3Iobj0wO248XzsrK24pcFtuXS09dTtyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPWUubGVuZ3RoLHM9ZVswXS5sZW5ndGgsaT0xL28sYT1bXTtmb3Iobj0wO248czsrK24pe2Zvcih0PTAscj0wO3Q8bzt0Kyspcis9ZVt0XVtuXVsxXTtpZihyKWZvcih0PTA7dDxvO3QrKyllW3RdW25dWzFdLz1yO2Vsc2UgZm9yKHQ9MDt0PG87dCsrKWVbdF1bbl1bMV09aX1mb3Iobj0wO248czsrK24pYVtuXT0wO3JldHVybiBhfSx6ZXJvOnZvfSk7cGkubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxzKXtmb3IodmFyIGksYSxsPVtdLHU9ZS5tYXAobix0aGlzKSxjPXIuY2FsbCh0aGlzLHUscyksZD1vLmNhbGwodGhpcyxjLHUscykscz0tMSxfPXUubGVuZ3RoLHA9ZC5sZW5ndGgtMSxmPXQ/MToxL187KytzPHA7KWk9bFtzXT1bXSxpLmR4PWRbcysxXS0oaS54PWRbc10pLGkueT0wO2lmKHA+MClmb3Iocz0tMTsrK3M8XzspKGE9dVtzXSk+PWNbMF0mJmE8PWNbMV0mJihpPWxbcGkuYmlzZWN0KGQsYSwxLHApLTFdLGkueSs9ZixpLnB1c2goZVtzXSkpO3JldHVybiBsfXZhciB0PSEwLG49TnVtYmVyLHI9Um8sbz1PbztyZXR1cm4gZS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9RGUodCksZSk6cn0sZS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gU28oZSx0KX06RGUodCksZSk6b30sZS5mcmVxdWVuY3k9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFuLGUpOnR9LGV9LHBpLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHMpe3ZhciBpPW4uY2FsbCh0aGlzLGUscyksYT1pWzBdLGw9b1swXSx1PW9bMV0sYz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxfbyhhLGZ1bmN0aW9uKGUpe2Uucj0rYyhlLnZhbHVlKX0pLF9vKGEsd28pLHIpe3ZhciBkPXIqKHQ/MTpNYXRoLm1heCgyKmEuci9sLDIqYS5yL3UpKS8yO19vKGEsZnVuY3Rpb24oZSl7ZS5yKz1kfSksX28oYSx3byksX28oYSxmdW5jdGlvbihlKXtlLnItPWR9KX1yZXR1cm4gSW8oYSxsLzIsdS8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2wsMiphLnIvdSkpLGl9dmFyIHQsbj1waS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChqbykscj0wLG89WzEsMV07cmV0dXJuIGUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGUpOm99LGUucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW58fCJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sZSk6dH0sZS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUpOnJ9LHVvKGUsbil9LHBpLmxheW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG8pe3ZhciBjPWkuY2FsbCh0aGlzLGUsbyksZD1jWzBdLF89dChkKTtpZihfbyhfLG4pLF8ucGFyZW50Lm09LV8ueixjbyhfLHIpLHUpY28oZCxzKTtlbHNle3ZhciBwPWQsZj1kLG09ZDtjbyhkLGZ1bmN0aW9uKGUpe2UueDxwLngmJihwPWUpLGUueD5mLngmJihmPWUpLGUuZGVwdGg+bS5kZXB0aCYmKG09ZSl9KTt2YXIgaD1hKHAsZikvMi1wLngsZz1sWzBdLyhmLngrYShmLHApLzIraCksYj1sWzFdLyhtLmRlcHRofHwxKTtjbyhkLGZ1bmN0aW9uKGUpe2UueD0oZS54K2gpKmcsZS55PWUuZGVwdGgqYn0pfXJldHVybiBjfWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciB0LG49e0E6bnVsbCxjaGlsZHJlbjpbZV19LHI9W25dO251bGwhPSh0PXIucG9wKCkpOylmb3IodmFyIG8scz10LmNoaWxkcmVuLGk9MCxhPXMubGVuZ3RoO2k8YTsrK2kpci5wdXNoKChzW2ldPW89e186c1tpXSxwYXJlbnQ6dCxjaGlsZHJlbjoobz1zW2ldLmNoaWxkcmVuKSYmby5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTppfSkuYT1vKTtyZXR1cm4gbi5jaGlsZHJlblswXX1mdW5jdGlvbiBuKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixyPWUuaT9uW2UuaS0xXTpudWxsO2lmKHQubGVuZ3RoKXtVbyhlKTt2YXIgcz0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhlLno9ci56K2EoZS5fLHIuXyksZS5tPWUuei1zKTplLno9c31lbHNlIHImJihlLno9ci56K2EoZS5fLHIuXykpO2UucGFyZW50LkE9byhlLHIsZS5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcihlKXtlLl8ueD1lLnorZS5wYXJlbnQubSxlLm0rPWUucGFyZW50Lm19ZnVuY3Rpb24gbyhlLHQsbil7aWYodCl7Zm9yKHZhciByLG89ZSxzPWUsaT10LGw9by5wYXJlbnQuY2hpbGRyZW5bMF0sdT1vLm0sYz1zLm0sZD1pLm0sXz1sLm07aT1GbyhpKSxvPUhvKG8pLGkmJm87KWw9SG8obCkscz1GbyhzKSxzLmE9ZSxyPWkueitkLW8uei11K2EoaS5fLG8uXykscj4wJiYoQm8oR28oaSxlLG4pLGUsciksdSs9cixjKz1yKSxkKz1pLm0sdSs9by5tLF8rPWwubSxjKz1zLm07aSYmIUZvKHMpJiYocy50PWkscy5tKz1kLWMpLG8mJiFIbyhsKSYmKGwudD1vLGwubSs9dS1fLG49ZSl9cmV0dXJuIG59ZnVuY3Rpb24gcyhlKXtlLngqPWxbMF0sZS55PWUuZGVwdGgqbFsxXX12YXIgaT1waS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxhPU5vLGw9WzEsMV0sdT1udWxsO3JldHVybiBlLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlKTphfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KGw9dCk/czpudWxsLGUpOnU/bnVsbDpsfSxlLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShsPXQpP251bGw6cyxlKTp1P2w6bnVsbH0sdW8oZSxpKX0scGkubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUscyl7dmFyIGksYT10LmNhbGwodGhpcyxlLHMpLGw9YVswXSx1PTA7X28obCxmdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuO3QmJnQubGVuZ3RoPyhlLng9Vm8odCksZS55PXpvKHQpKTooZS54PWk/dSs9bihlLGkpOjAsZS55PTAsaT1lKX0pO3ZhciBjPVdvKGwpLGQ9WW8obCksXz1jLngtbihjLGQpLzIscD1kLngrbihkLGMpLzI7cmV0dXJuIF9vKGwsbz9mdW5jdGlvbihlKXtlLng9KGUueC1sLngpKnJbMF0sZS55PShsLnktZS55KSpyWzFdfTpmdW5jdGlvbihlKXtlLng9KGUueC1fKS8ocC1fKSpyWzBdLGUueT0oMS0obC55P2UueS9sLnk6MSkpKnJbMV19KSxhfXZhciB0PXBpLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLG49Tm8scj1bMSwxXSxvPSExO3JldHVybiBlLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09KHI9dCksZSk6bz9udWxsOnJ9LGUubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbCE9KHI9dCksZSk6bz9yOm51bGx9LHVvKGUsdCl9LHBpLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbixyLG89LTEscz1lLmxlbmd0aDsrK288czspcj0obj1lW29dKS52YWx1ZSoodDwwPzA6dCksbi5hcmVhPWlzTmFOKHIpfHxyPD0wPzA6cn1mdW5jdGlvbiB0KG4pe3ZhciBzPW4uY2hpbGRyZW47aWYocyYmcy5sZW5ndGgpe3ZhciBpLGEsbCx1PWQobiksYz1bXSxfPXMuc2xpY2UoKSxmPTEvMCxtPSJzbGljZSI9PT1wP3UuZHg6ImRpY2UiPT09cD91LmR5OiJzbGljZS1kaWNlIj09PXA/MSZuLmRlcHRoP3UuZHk6dS5keDpNYXRoLm1pbih1LmR4LHUuZHkpO2ZvcihlKF8sdS5keCp1LmR5L24udmFsdWUpLGMuYXJlYT0wOyhsPV8ubGVuZ3RoKT4wOyljLnB1c2goaT1fW2wtMV0pLGMuYXJlYSs9aS5hcmVhLCJzcXVhcmlmeSIhPT1wfHwoYT1yKGMsbSkpPD1mPyhfLnBvcCgpLGY9YSk6KGMuYXJlYS09Yy5wb3AoKS5hcmVhLG8oYyxtLHUsITEpLG09TWF0aC5taW4odS5keCx1LmR5KSxjLmxlbmd0aD1jLmFyZWE9MCxmPTEvMCk7Yy5sZW5ndGgmJihvKGMsbSx1LCEwKSxjLmxlbmd0aD1jLmFyZWE9MCkscy5mb3JFYWNoKHQpfX1mdW5jdGlvbiBuKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgpe3ZhciBzLGk9ZCh0KSxhPXIuc2xpY2UoKSxsPVtdO2ZvcihlKGEsaS5keCppLmR5L3QudmFsdWUpLGwuYXJlYT0wO3M9YS5wb3AoKTspbC5wdXNoKHMpLGwuYXJlYSs9cy5hcmVhLG51bGwhPXMueiYmKG8obCxzLno/aS5keDppLmR5LGksIWEubGVuZ3RoKSxsLmxlbmd0aD1sLmFyZWE9MCk7ci5mb3JFYWNoKG4pfX1mdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuLHI9ZS5hcmVhLG89MCxzPTEvMCxpPS0xLGE9ZS5sZW5ndGg7KytpPGE7KShuPWVbaV0uYXJlYSkmJihuPHMmJihzPW4pLG4+byYmKG89bikpO3JldHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0Km8qZi9yLHIvKHQqcypmKSk6MS8wfWZ1bmN0aW9uIG8oZSx0LG4scil7dmFyIG8scz0tMSxpPWUubGVuZ3RoLGE9bi54LHU9bi55LGM9dD9sKGUuYXJlYS90KTowO2lmKHQ9PW4uZHgpe2Zvcigocnx8Yz5uLmR5KSYmKGM9bi5keSk7KytzPGk7KW89ZVtzXSxvLng9YSxvLnk9dSxvLmR5PWMsYSs9by5keD1NYXRoLm1pbihuLngrbi5keC1hLGM/bChvLmFyZWEvYyk6MCk7by56PSEwLG8uZHgrPW4ueCtuLmR4LWEsbi55Kz1jLG4uZHktPWN9ZWxzZXtmb3IoKHJ8fGM+bi5keCkmJihjPW4uZHgpOysrczxpOylvPWVbc10sby54PWEsby55PXUsby5keD1jLHUrPW8uZHk9TWF0aC5taW4obi55K24uZHktdSxjP2woby5hcmVhL2MpOjApO28uej0hMSxvLmR5Kz1uLnkrbi5keS11LG4ueCs9YyxuLmR4LT1jfX1mdW5jdGlvbiBzKHIpe3ZhciBvPWl8fGEocikscz1vWzBdO3JldHVybiBzLng9cy55PTAscy52YWx1ZT8ocy5keD11WzBdLHMuZHk9dVsxXSk6cy5keD1zLmR5PTAsaSYmYS5yZXZhbHVlKHMpLGUoW3NdLHMuZHgqcy5keS9zLnZhbHVlKSwoaT9uOnQpKHMpLF8mJihpPW8pLG99dmFyIGksYT1waS5sYXlvdXQuaGllcmFyY2h5KCksbD1NYXRoLnJvdW5kLHU9WzEsMV0sYz1udWxsLGQ9cW8sXz0hMSxwPSJzcXVhcmlmeSIsZj0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBzLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZSxzKTp1fSxzLnBhZGRpbmc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwocyx0LHQuZGVwdGgpO3JldHVybiBudWxsPT1uP3FvKHQpOktvKHQsIm51bWJlciI9PXR5cGVvZiBuP1tuLG4sbixuXTpuKX1mdW5jdGlvbiBuKHQpe3JldHVybiBLbyh0LGUpfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjO3ZhciByO3JldHVybiBkPW51bGw9PShjPWUpP3FvOiJmdW5jdGlvbiI9PShyPXR5cGVvZiBlKT90OiJudW1iZXIiPT09cj8oZT1bZSxlLGUsZV0sbik6bixzfSxzLnJvdW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWU/TWF0aC5yb3VuZDpOdW1iZXIscyk6bCE9TnVtYmVyfSxzLnN0aWNreT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1lLGk9bnVsbCxzKTpffSxzLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUscyk6Zn0scy5tb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUrIiIscyk6cH0sdW8ocyxhKX0scGkucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBuPDImJih0PTEpLG48MSYmKGU9MCksZnVuY3Rpb24oKXt2YXIgbixyLG87ZG97bj0yKk1hdGgucmFuZG9tKCktMSxyPTIqTWF0aC5yYW5kb20oKS0xLG89bipuK3Iqcn13aGlsZSghb3x8bz4xKTtyZXR1cm4gZSt0Km4qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKG8pL28pfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIGU9cGkucmFuZG9tLm5vcm1hbC5hcHBseShwaSxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChlKCkpfX0sYmF0ZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9cGkucmFuZG9tLmlyd2luSGFsbChlKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCgpL2V9fSxpcndpbkhhbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsbj0wO248ZTtuKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSxwaS5zY2FsZT17fTt2YXIgT2w9e2Zsb29yOkEsY2VpbDpBfTtwaS5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdHMoWzAsMV0sWzAsMV0sQ3IsITEpfTt2YXIgU2w9e3M6MSxnOjEscDoxLHI6MSxlOjF9O3BpLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiB1cyhwaS5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBSbD1waS5mb3JtYXQoIi4wZSIpLGpsPXtmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5jZWlsKC1lKX0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5mbG9vcigtZSl9fTtwaS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gY3MocGkuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHBpLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcGkuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxwaS5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIF9zKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHBpLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gcGkuc2NhbGUub3JkaW5hbCgpLnJhbmdlKHhsKX0scGkuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiBwaS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoTGwpfSxwaS5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBwaS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRGwpfSxwaS5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiBwaS5zY2FsZS5vcmRpbmFsKCkucmFuZ2Uod2wpfTt2YXIgeGw9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoQ2UpLExsPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKENlKSxEbD1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoQ2UpLHdsPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoQ2UpO3BpLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHBzKFtdLFtdKX0scGkuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnMoMCwxLFswLDFdKX0scGkuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIG1zKFsuNV0sWzAsMV0pfSxwaS5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBocyhbMCwxXSl9LHBpLnN2Zz17fSxwaS5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPU1hdGgubWF4KDAsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PU1hdGgubWF4KDAsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLVdpLGQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktV2ksXz1NYXRoLmFicyhkLWMpLHA9Yz5kPzA6MTtpZih1PGUmJihmPXUsdT1lLGU9ZiksXz49VmkpcmV0dXJuIHQodSxwKSsoZT90KGUsMS1wKToiIikrIloiO3ZhciBmLG0saCxnLGIsRSx5LHYsVCxBLEMsTyxTPTAsUj0wLGo9W107aWYoKGc9KCtsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihoPXM9PT1NbD9NYXRoLnNxcnQoZSplK3UqdSk6K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChSKj0tMSksdSYmKFI9aWUoaC91Kk1hdGguc2luKGcpKSksZSYmKFM9aWUoaC9lKk1hdGguc2luKGcpKSkpLHUpe2I9dSpNYXRoLmNvcyhjK1IpLEU9dSpNYXRoLnNpbihjK1IpLHk9dSpNYXRoLmNvcyhkLVIpLHY9dSpNYXRoLnNpbihkLVIpO3ZhciB4PU1hdGguYWJzKGQtYy0yKlIpPD1HaT8wOjE7aWYoUiYmQXMoYixFLHksdik9PT1wXngpe3ZhciBMPShjK2QpLzI7Yj11Kk1hdGguY29zKEwpLEU9dSpNYXRoLnNpbihMKSx5PXY9bnVsbH19ZWxzZSBiPUU9MDtpZihlKXtUPWUqTWF0aC5jb3MoZC1TKSxBPWUqTWF0aC5zaW4oZC1TKSxDPWUqTWF0aC5jb3MoYytTKSxPPWUqTWF0aC5zaW4oYytTKTt2YXIgRD1NYXRoLmFicyhjLWQrMipTKTw9R2k/MDoxO2lmKFMmJkFzKFQsQSxDLE8pPT09MS1wXkQpe3ZhciB3PShjK2QpLzI7VD1lKk1hdGguY29zKHcpLEE9ZSpNYXRoLnNpbih3KSxDPU89bnVsbH19ZWxzZSBUPUE9MDtpZihfPkJpJiYoZj1NYXRoLm1pbihNYXRoLmFicyh1LWUpLzIsK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7bT1lPHVecD8wOjE7dmFyIE09ZixrPWY7aWYoXzxHaSl7dmFyIEk9bnVsbD09Qz9bVCxBXTpudWxsPT15P1tiLEVdOkZuKFtiLEVdLFtDLE9dLFt5LHZdLFtULEFdKSxQPWItSVswXSxOPUUtSVsxXSxIPXktSVswXSxGPXYtSVsxXSxCPTEvTWF0aC5zaW4oTWF0aC5hY29zKChQKkgrTipGKS8oTWF0aC5zcXJ0KFAqUCtOKk4pKk1hdGguc3FydChIKkgrRipGKSkpLzIpLFU9TWF0aC5zcXJ0KElbMF0qSVswXStJWzFdKklbMV0pO2s9TWF0aC5taW4oZiwoZS1VKS8oQi0xKSksTT1NYXRoLm1pbihmLCh1LVUpLyhCKzEpKX1pZihudWxsIT15KXt2YXIgRz1DcyhudWxsPT1DP1tULEFdOltDLE9dLFtiLEVdLHUsTSxwKSx6PUNzKFt5LHZdLFtULEFdLHUsTSxwKTtmPT09TT9qLnB1c2goIk0iLEdbMF0sIkEiLE0sIiwiLE0sIiAwIDAsIixtLCIgIixHWzFdLCJBIix1LCIsIix1LCIgMCAiLDEtcF5BcyhHWzFdWzBdLEdbMV1bMV0selsxXVswXSx6WzFdWzFdKSwiLCIscCwiICIselsxXSwiQSIsTSwiLCIsTSwiIDAgMCwiLG0sIiAiLHpbMF0pOmoucHVzaCgiTSIsR1swXSwiQSIsTSwiLCIsTSwiIDAgMSwiLG0sIiAiLHpbMF0pfWVsc2Ugai5wdXNoKCJNIixiLCIsIixFKTtpZihudWxsIT1DKXt2YXIgVj1DcyhbYixFXSxbQyxPXSxlLC1rLHApLFc9Q3MoW1QsQV0sbnVsbD09eT9bYixFXTpbeSx2XSxlLC1rLHApO2Y9PT1rP2oucHVzaCgiTCIsV1swXSwiQSIsaywiLCIsaywiIDAgMCwiLG0sIiAiLFdbMV0sIkEiLGUsIiwiLGUsIiAwICIscF5BcyhXWzFdWzBdLFdbMV1bMV0sVlsxXVswXSxWWzFdWzFdKSwiLCIsMS1wLCIgIixWWzFdLCJBIixrLCIsIixrLCIgMCAwLCIsbSwiICIsVlswXSk6ai5wdXNoKCJMIixXWzBdLCJBIixrLCIsIixrLCIgMCAwLCIsbSwiICIsVlswXSl9ZWxzZSBqLnB1c2goIkwiLFQsIiwiLEEpfWVsc2Ugai5wdXNoKCJNIixiLCIsIixFKSxudWxsIT15JiZqLnB1c2goIkEiLHUsIiwiLHUsIiAwICIseCwiLCIscCwiICIseSwiLCIsdiksai5wdXNoKCJMIixULCIsIixBKSxudWxsIT1DJiZqLnB1c2goIkEiLGUsIiwiLGUsIiAwICIsRCwiLCIsMS1wLCIgIixDLCIsIixPKTtyZXR1cm4gai5wdXNoKCJaIiksai5qb2luKCIiKX1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwiK3QrIiAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsIit0KyIgMCwiK2V9dmFyIG49YnMscj1FcyxvPWdzLHM9TWwsaT15cyxhPXZzLGw9VHM7cmV0dXJuIGUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49RGUodCksZSk6bn0sZS5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1EZSh0KSxlKTpyfSxlLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1EZSh0KSxlKTpvfSxlLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10PT1NbD9NbDpEZSh0KSxlKTpzfSxlLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9RGUodCksZSk6aX0sZS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1EZSh0KSxlKTphfSxlLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPURlKHQpLGUpOmx9LGUuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgZT0oK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsdD0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItV2k7cmV0dXJuW01hdGguY29zKHQpKmUsTWF0aC5zaW4odCkqZV19LGV9O3ZhciBNbD0iYXV0byI7cGkuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gT3MoQSl9O3ZhciBrbD1waS5tYXAoe2xpbmVhcjpTcywibGluZWFyLWNsb3NlZCI6UnMsc3RlcDpqcywic3RlcC1iZWZvcmUiOnhzLCJzdGVwLWFmdGVyIjpMcyxiYXNpczpQcywiYmFzaXMtb3BlbiI6TnMsImJhc2lzLWNsb3NlZCI6SHMsYnVuZGxlOkZzLGNhcmRpbmFsOk1zLCJjYXJkaW5hbC1vcGVuIjpEcywiY2FyZGluYWwtY2xvc2VkIjp3cyxtb25vdG9uZTpXc30pO2tsLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0LmtleT1lLHQuY2xvc2VkPS8tY2xvc2VkJC8udGVzdChlKX0pO3ZhciBJbD1bMCwyLzMsMS8zLDBdLFBsPVswLDEvMywyLzMsMF0sTmw9WzAsMS82LDIvMywxLzZdO3BpLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPU9zKFlzKTtyZXR1cm4gZS5yYWRpdXM9ZS54LGRlbGV0ZSBlLngsZS5hbmdsZT1lLnksZGVsZXRlIGUueSxlfSx4cy5yZXZlcnNlPUxzLExzLnJldmVyc2U9eHMscGkuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gcXMoQSl9LHBpLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXFzKFlzKTtyZXR1cm4gZS5yYWRpdXM9ZS54LGRlbGV0ZSBlLngsZS5pbm5lclJhZGl1cz1lLngwLGRlbGV0ZSBlLngwLGUub3V0ZXJSYWRpdXM9ZS54MSxkZWxldGUgZS54MSxlLmFuZ2xlPWUueSxkZWxldGUgZS55LGUuc3RhcnRBbmdsZT1lLnkwLGRlbGV0ZSBlLnkwLGUuZW5kQW5nbGU9ZS55MSxkZWxldGUgZS55MSxlfSxwaS5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsYSl7dmFyIGw9dCh0aGlzLHMsZSxhKSx1PXQodGhpcyxpLGUsYSk7cmV0dXJuIk0iK2wucDArcihsLnIsbC5wMSxsLmExLWwuYTApKyhuKGwsdSk/byhsLnIsbC5wMSxsLnIsbC5wMCk6byhsLnIsbC5wMSx1LnIsdS5wMCkrcih1LnIsdS5wMSx1LmExLXUuYTApK28odS5yLHUucDEsbC5yLGwucDApKSsiWiJ9ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgbz10LmNhbGwoZSxuLHIpLHM9YS5jYWxsKGUsbyxyKSxpPWwuY2FsbChlLG8sciktV2ksYz11LmNhbGwoZSxvLHIpLVdpO3JldHVybntyOnMsYTA6aSxhMTpjLHAwOltzKk1hdGguY29zKGkpLHMqTWF0aC5zaW4oaSldLHAxOltzKk1hdGguY29zKGMpLHMqTWF0aC5zaW4oYyldfX1mdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGUuYTA9PXQuYTAmJmUuYTE9PXQuYTF9ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIkEiK2UrIiwiK2UrIiAwICIrICsobj5HaSkrIiwxICIrdH1mdW5jdGlvbiBvKGUsdCxuLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIHM9Q24saT1PbixhPUtzLGw9eXMsdT12cztyZXR1cm4gZS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RGUodCksZSk6YX0sZS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RGUodCksZSk6c30sZS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9RGUodCksZSk6aX0sZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPURlKHQpLGUpOmx9LGUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9RGUodCksZSk6dX0sZX0scGkuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG8pe3ZhciBzPXQuY2FsbCh0aGlzLGUsbyksaT1uLmNhbGwodGhpcyxlLG8pLGE9KHMueStpLnkpLzIsbD1bcyx7eDpzLngseTphfSx7eDppLngseTphfSxpXTtyZXR1cm4gbD1sLm1hcChyKSwiTSIrbFswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX12YXIgdD1DbixuPU9uLHI9WHM7cmV0dXJuIGUuc291cmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PURlKG4pLGUpOnR9LGUudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPURlKHQpLGUpOm59LGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGUpOnJ9LGV9LHBpLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT1waS5zdmcuZGlhZ29uYWwoKSx0PVhzLG49ZS5wcm9qZWN0aW9uO3JldHVybiBlLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bigkcyh0PWUpKTp0fSxlfSxwaS5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybihIbC5nZXQodC5jYWxsKHRoaXMsZSxyKSl8fFpzKShuLmNhbGwodGhpcyxlLHIpKX12YXIgdD1KcyxuPVFzO3JldHVybiBlLnR5cGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9RGUobiksZSk6dH0sZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPURlKHQpLGUpOm59LGV9O3ZhciBIbD1waS5tYXAoe2NpcmNsZTpacyxjcm9zczpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZS81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguc3FydChlLygyKkJsKSksbj10KkJsO3JldHVybiJNMCwiKy10KyJMIituKyIsMCAwLCIrdCsiICIrLW4rIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZSkvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUvRmwpLG49dCpGbC8yO3JldHVybiJNMCwiK24rIkwiK3QrIiwiKy1uKyIgIistdCsiLCIrLW4rIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguc3FydChlL0ZsKSxuPXQqRmwvMjtyZXR1cm4iTTAsIistbisiTCIrdCsiLCIrbisiICIrLXQrIiwiK24rIloifX0pO3BpLnN2Zy5zeW1ib2xUeXBlcz1IbC5rZXlzKCk7dmFyIEZsPU1hdGguc3FydCgzKSxCbD1NYXRoLnRhbigzMCpZaSk7d2kudHJhbnNpdGlvbj1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPVVsfHwrK1dsLG89b2koZSkscz1bXSxpPUdsfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6RHIsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LGE9LTEsbD10aGlzLmxlbmd0aDsrK2E8bDspe3MucHVzaCh0PVtdKTtmb3IodmFyIHU9dGhpc1thXSxjPS0xLGQ9dS5sZW5ndGg7KytjPGQ7KShuPXVbY10pJiZzaShuLGMsbyxyLGkpLHQucHVzaChuKX1yZXR1cm4gdGkocyxvLHIpfSx3aS5pbnRlcnJ1cHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT1lP3psOmVpKG9pKGUpKSl9O3ZhciBVbCxHbCx6bD1laShvaSgpKSxWbD1bXSxXbD0wO1ZsLmNhbGw9d2kuY2FsbCxWbC5lbXB0eT13aS5lbXB0eSxWbC5ub2RlPXdpLm5vZGUsVmwuc2l6ZT13aS5zaXplLHBpLnRyYW5zaXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP1VsP2UudHJhbnNpdGlvbih0KTplOnBpLnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHBpLnRyYW5zaXRpb24ucHJvdG90eXBlPVZsLFZsLnNlbGVjdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsaT1bXTtlPU0oZSk7Zm9yKHZhciBhPS0xLGw9dGhpcy5sZW5ndGg7KythPGw7KXtpLnB1c2godD1bXSk7Zm9yKHZhciB1PXRoaXNbYV0sYz0tMSxkPXUubGVuZ3RoOysrYzxkOykocj11W2NdKSYmKG49ZS5jYWxsKHIsci5fX2RhdGFfXyxjLGEpKT8oIl9fZGF0YV9fImluIHImJihuLl9fZGF0YV9fPXIuX19kYXRhX18pLHNpKG4sYyxzLG8scltzXVtvXSksdC5wdXNoKG4pKTp0LnB1c2gobnVsbCl9cmV0dXJuIHRpKGkscyxvKX0sVmwuc2VsZWN0QWxsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHMsaT10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2UsbD1bXTtlPWsoZSk7Zm9yKHZhciB1PS0xLGM9dGhpcy5sZW5ndGg7Kyt1PGM7KWZvcih2YXIgZD10aGlzW3VdLF89LTEscD1kLmxlbmd0aDsrK188cDspaWYocj1kW19dKXtzPXJbYV1baV0sbj1lLmNhbGwocixyLl9fZGF0YV9fLF8sdSksbC5wdXNoKHQ9W10pO2Zvcih2YXIgZj0tMSxtPW4ubGVuZ3RoOysrZjxtOykobz1uW2ZdKSYmc2kobyxmLGEsaSxzKSx0LnB1c2gobyl9cmV0dXJuIHRpKGwsYSxpKX0sVmwuZmlsdGVyPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT1ZKGUpKTtmb3IodmFyIHM9MCxpPXRoaXMubGVuZ3RoO3M8aTtzKyspe28ucHVzaCh0PVtdKTtmb3IodmFyIG49dGhpc1tzXSxhPTAsbD1uLmxlbmd0aDthPGw7YSsrKShyPW5bYV0pJiZlLmNhbGwocixyLl9fZGF0YV9fLGEscykmJnQucHVzaChyKX1yZXR1cm4gdGkobyx0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sVmwudHdlZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtyXVtuXS50d2Vlbi5nZXQoZSk6Syh0aGlzLG51bGw9PXQ/ZnVuY3Rpb24odCl7dFtyXVtuXS50d2Vlbi5yZW1vdmUoZSl9OmZ1bmN0aW9uKG8pe29bcl1bbl0udHdlZW4uc2V0KGUsdCl9KX0sVmwuYXR0cj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShhKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGw9PWU/bjooZSs9IiIsZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXMuZ2V0QXR0cmlidXRlKGEpO3JldHVybiBuIT09ZSYmKHQ9aShuLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKGEsdChlKSl9KX0pfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG51bGw9PWU/cjooZSs9IiIsZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXMuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTtyZXR1cm4gbiE9PWUmJih0PWkobixlKSxmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCx0KGUpKX0pfSl9aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodCBpbiBlKXRoaXMuYXR0cih0LGVbdF0pO3JldHVybiB0aGlzfXZhciBpPSJ0cmFuc2Zvcm0iPT1lP0pyOkNyLGE9cGkubnMucXVhbGlmeShlKTtyZXR1cm4gbmkodGhpcywiYXR0ci4iK2UsdCxhLmxvY2FsP3M6byl9LFZsLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4sdGhpcy5nZXRBdHRyaWJ1dGUobykpO3JldHVybiByJiZmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShvLHIoZSkpfX1mdW5jdGlvbiByKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLHRoaXMuZ2V0QXR0cmlidXRlTlMoby5zcGFjZSxvLmxvY2FsKSk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMoby5zcGFjZSxvLmxvY2FsLHIoZSkpfX12YXIgbz1waS5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrZSxvLmxvY2FsP3I6bil9LFZsLnN0eWxlPWZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10P3I6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIHIsbz1pKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBvIT09dCYmKHI9Q3Iobyx0KSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUscih0KSxuKX0pfSl9dmFyIHM9YXJndW1lbnRzLmxlbmd0aDtpZihzPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7czwyJiYodD0iIik7Zm9yKG4gaW4gZSl0aGlzLnN0eWxlKG4sZVtuXSx0KTtyZXR1cm4gdGhpc31uPSIifXJldHVybiBuaSh0aGlzLCJzdHlsZS4iK2UsdCxvKX0sVmwuc3R5bGVUd2Vlbj1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihyLG8pe3ZhciBzPXQuY2FsbCh0aGlzLHIsbyxpKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gcyYmZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHModCksbil9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihuPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK2Uscil9LFZsLnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5pKHRoaXMsInRleHQiLGUscmkpfSxWbC5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVuY3Rpb24oKXt2YXIgdDt0aGlzW2VdLmNvdW50PDImJih0PXRoaXMucGFyZW50Tm9kZSkmJnQucmVtb3ZlQ2hpbGQodGhpcyl9KX0sVmwuZWFzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVt0XS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9cGkuZWFzZS5hcHBseShwaSxhcmd1bWVudHMpKSxLKHRoaXMsZnVuY3Rpb24ocil7cltuXVt0XS5lYXNlPWV9KSl9LFZsLmRlbGF5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3RdLmRlbGF5OksodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihyLG8scyl7cltuXVt0XS5kZWxheT0rZS5jYWxsKHIsci5fX2RhdGFfXyxvLHMpfTooZT0rZSxmdW5jdGlvbihyKXtyW25dW3RdLmRlbGF5PWV9KSl9LFZsLmR1cmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3RdLmR1cmF0aW9uOksodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihyLG8scyl7cltuXVt0XS5kdXJhdGlvbj1NYXRoLm1heCgxLGUuY2FsbChyLHIuX19kYXRhX18sbyxzKSl9OihlPU1hdGgubWF4KDEsZSksZnVuY3Rpb24ocil7cltuXVt0XS5kdXJhdGlvbj1lfSkpfSxWbC5lYWNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG89R2wscz1VbDt0cnl7VWw9bixLKHRoaXMsZnVuY3Rpb24odCxvLHMpe0dsPXRbcl1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxvLHMpfSl9ZmluYWxseXtHbD1vLFVsPXN9fWVsc2UgSyh0aGlzLGZ1bmN0aW9uKG8pe3ZhciBzPW9bcl1bbl07KHMuZXZlbnR8fChzLmV2ZW50PXBpLmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24oZSx0KX0pO3JldHVybiB0aGlzfSxWbC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbixyLG89dGhpcy5pZCxzPSsrV2wsaT10aGlzLm5hbWVzcGFjZSxhPVtdLGw9MCx1PXRoaXMubGVuZ3RoO2w8dTtsKyspe2EucHVzaChlPVtdKTtmb3IodmFyIHQ9dGhpc1tsXSxjPTAsZD10Lmxlbmd0aDtjPGQ7YysrKShuPXRbY10pJiYocj1uW2ldW29dLHNpKG4sYyxpLHMse3RpbWU6ci50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSkpLGUucHVzaChuKX1yZXR1cm4gdGkoYSxpLHMpfSxwaS5zdmcuYXhpcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdT1waS5zZWxlY3QodGhpcyksYz10aGlzLl9fY2hhcnRfX3x8bixkPXRoaXMuX19jaGFydF9fPW4uY29weSgpLF89bnVsbD09bD9kLnRpY2tzP2QudGlja3MuYXBwbHkoZCxhKTpkLmRvbWFpbigpOmwscD1udWxsPT10P2QudGlja0Zvcm1hdD9kLnRpY2tGb3JtYXQuYXBwbHkoZCxhKTpBOnQsZj11LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKF8sZCksbT1mLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixCaSksaD1waS50cmFuc2l0aW9uKGYuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsQmkpLnJlbW92ZSgpLGc9cGkudHJhbnNpdGlvbihmLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSxiPU1hdGgubWF4KG8sMCkraSxFPSRvKGQpLHk9dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdj0oeS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikscGkudHJhbnNpdGlvbih5KSk7bS5hcHBlbmQoImxpbmUiKSxtLmFwcGVuZCgidGV4dCIpO3ZhciBULEMsTyxTLFI9bS5zZWxlY3QoImxpbmUiKSxqPWcuc2VsZWN0KCJsaW5lIikseD1mLnNlbGVjdCgidGV4dCIpLnRleHQocCksTD1tLnNlbGVjdCgidGV4dCIpLEQ9Zy5zZWxlY3QoInRleHQiKSx3PSJ0b3AiPT09cnx8ImxlZnQiPT09cj8tMToxO2lmKCJib3R0b20iPT09cnx8InRvcCI9PT1yPyhlPWlpLFQ9IngiLE89InkiLEM9IngyIixTPSJ5MiIseC5hdHRyKCJkeSIsdzwwPyIwZW0iOiIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHYuYXR0cigiZCIsIk0iK0VbMF0rIiwiK3cqcysiVjBIIitFWzFdKyJWIit3KnMpKTooZT1haSxUPSJ5IixPPSJ4IixDPSJ5MiIsUz0ieDIiLHguYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsdzwwPyJlbmQiOiJzdGFydCIpLHYuYXR0cigiZCIsIk0iK3cqcysiLCIrRVswXSsiSDBWIitFWzFdKyJIIit3KnMpKSxSLmF0dHIoUyx3Km8pLEwuYXR0cihPLHcqYiksai5hdHRyKEMsMCkuYXR0cihTLHcqbyksRC5hdHRyKFQsMCkuYXR0cihPLHcqYiksZC5yYW5nZUJhbmQpe3ZhciBNPWQsaz1NLnJhbmdlQmFuZCgpLzI7Yz1kPWZ1bmN0aW9uKGUpe3JldHVybiBNKGUpK2t9fWVsc2UgYy5yYW5nZUJhbmQ/Yz1kOmguY2FsbChlLGQsYyk7bS5jYWxsKGUsYyxkKSxnLmNhbGwoZSxkLGQpfSl9dmFyIHQsbj1waS5zY2FsZS5saW5lYXIoKSxyPVlsLG89NixzPTYsaT0zLGE9WzEwXSxsPW51bGw7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10IGluIHFsP3QrIiI6WWwsZSk6cn0sZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW1pKGFyZ3VtZW50cyksZSk6YX0sZS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZSk6bH0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBuPyhvPSt0LHM9K2FyZ3VtZW50c1tuLTFdLGUpOm99LGUuaW5uZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxlLm91dGVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6c30sZS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKTppfSxlLnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmZX0sZX07dmFyIFlsPSJib3R0b20iLHFsPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07cGkuc3ZnLmJydXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShzKXtzLmVhY2goZnVuY3Rpb24oKXt2YXIgcz1waS5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIixvKS5vbigidG91Y2hzdGFydC5icnVzaCIsbyksaT1zLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLHMuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBhPXMuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShtLEEpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSl7cmV0dXJuInJlc2l6ZSAiK2V9KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihlKXtyZXR1cm4gS2xbZV19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbihlKXtyZXR1cm4vW2V3XSQvLnRlc3QoZSk/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKGUpe3JldHVybi9eW25zXS8udGVzdChlKT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxhLnN0eWxlKCJkaXNwbGF5IixlLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBsLGQ9cGkudHJhbnNpdGlvbihzKSxfPXBpLnRyYW5zaXRpb24oaSk7dSYmKGw9JG8odSksXy5hdHRyKCJ4IixsWzBdKS5hdHRyKCJ3aWR0aCIsbFsxXS1sWzBdKSxuKGQpKSxjJiYobD0kbyhjKSxfLmF0dHIoInkiLGxbMF0pLmF0dHIoImhlaWdodCIsbFsxXS1sWzBdKSxyKGQpKSx0KGQpfSl9ZnVuY3Rpb24gdChlKXtlLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK2RbKy9lJC8udGVzdChlKV0rIiwiK19bKy9ecy8udGVzdChlKV0rIikifSl9ZnVuY3Rpb24gbihlKXtlLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLGRbMF0pLGUuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixkWzFdLWRbMF0pfWZ1bmN0aW9uIHIoZSl7ZS5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixfWzBdKSxlLnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLF9bMV0tX1swXSl9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIG8oKXszMj09cGkuZXZlbnQua2V5Q29kZSYmKGp8fChFPW51bGwsRFswXS09ZFsxXSxEWzFdLT1fWzFdLGo9MikseCgpKX1mdW5jdGlvbiBtKCl7MzI9PXBpLmV2ZW50LmtleUNvZGUmJjI9PWomJihEWzBdKz1kWzFdLERbMV0rPV9bMV0saj0wLHgoKSl9ZnVuY3Rpb24gaCgpe3ZhciBlPXBpLm1vdXNlKHYpLG89ITE7eSYmKGVbMF0rPXlbMF0sZVsxXSs9eVsxXSksanx8KHBpLmV2ZW50LmFsdEtleT8oRXx8KEU9WyhkWzBdK2RbMV0pLzIsKF9bMF0rX1sxXSkvMl0pLERbMF09ZFsrKGVbMF08RVswXSldLERbMV09X1srKGVbMV08RVsxXSldKTpFPW51bGwpLFMmJmcoZSx1LDApJiYobihDKSxvPSEwKSxSJiZnKGUsYywxKSYmKHIoQyksbz0hMCksbyYmKHQoQyksQSh7dHlwZToiYnJ1c2giLG1vZGU6aj8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24gZyhlLHQsbil7dmFyIHIsbyxpPSRvKHQpLGw9aVswXSx1PWlbMV0sYz1EW25dLG09bj9fOmQsaD1tWzFdLW1bMF07aWYoaiYmKGwtPWMsdS09aCtjKSxyPShuP2Y6cCk/TWF0aC5tYXgobCxNYXRoLm1pbih1LGVbbl0pKTplW25dLGo/bz0ocis9YykraDooRSYmKGM9TWF0aC5tYXgobCxNYXRoLm1pbih1LDIqRVtuXS1yKSkpLGM8cj8obz1yLHI9Yyk6bz1jKSxtWzBdIT1yfHxtWzFdIT1vKXJldHVybiBuP2E9bnVsbDpzPW51bGwsbVswXT1yLG1bMV09bywhMH1mdW5jdGlvbiBiKCl7aCgpLEMuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGUuZW1wdHkoKT8ibm9uZSI6bnVsbCkscGkuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCksdy5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSxMKCksQSh7dHlwZToiYnJ1c2hlbmQifSl9dmFyIEUseSx2PXRoaXMsVD1waS5zZWxlY3QocGkuZXZlbnQudGFyZ2V0KSxBPWwub2Yodixhcmd1bWVudHMpLEM9cGkuc2VsZWN0KHYpLE89VC5kYXR1bSgpLFM9IS9eKG58cykkLy50ZXN0KE8pJiZ1LFI9IS9eKGV8dykkLy50ZXN0KE8pJiZjLGo9VC5jbGFzc2VkKCJleHRlbnQiKSxMPWVlKHYpLEQ9cGkubW91c2Uodiksdz1waS5zZWxlY3QoaSh2KSkub24oImtleWRvd24uYnJ1c2giLG8pLm9uKCJrZXl1cC5icnVzaCIsbSk7aWYocGkuZXZlbnQuY2hhbmdlZFRvdWNoZXM/dy5vbigidG91Y2htb3ZlLmJydXNoIixoKS5vbigidG91Y2hlbmQuYnJ1c2giLGIpOncub24oIm1vdXNlbW92ZS5icnVzaCIsaCkub24oIm1vdXNldXAuYnJ1c2giLGIpLEMuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksailEWzBdPWRbMF0tRFswXSxEWzFdPV9bMF0tRFsxXTtlbHNlIGlmKE8pe3ZhciBNPSsvdyQvLnRlc3QoTyksaz0rL15uLy50ZXN0KE8pO3k9W2RbMS1NXS1EWzBdLF9bMS1rXS1EWzFdXSxEWzBdPWRbTV0sRFsxXT1fW2tdfWVsc2UgcGkuZXZlbnQuYWx0S2V5JiYoRT1ELnNsaWNlKCkpO0Muc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxwaS5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixULnN0eWxlKCJjdXJzb3IiKSksQSh7dHlwZToiYnJ1c2hzdGFydCJ9KSxoKCl9dmFyIHMsYSxsPUQoZSwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSx1PW51bGwsYz1udWxsLGQ9WzAsMF0sXz1bMCwwXSxwPSEwLGY9ITAsbT1YbFswXTtyZXR1cm4gZS5ldmVudD1mdW5jdGlvbihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1sLm9mKHRoaXMsYXJndW1lbnRzKSx0PXt4OmQseTpfLGk6cyxqOmF9LG49dGhpcy5fX2NoYXJ0X198fHQ7dGhpcy5fX2NoYXJ0X189dCxVbD9waS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe3M9bi5pLGE9bi5qLGQ9bi54LF89bi55LGUoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIG49T3IoZCx0LngpLHI9T3IoXyx0LnkpO3JldHVybiBzPWE9bnVsbCxmdW5jdGlvbihvKXtkPXQueD1uKG8pLF89dC55PXIobyksZSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7cz10LmksYT10LmosZSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxlKHt0eXBlOiJicnVzaGVuZCJ9KX0pOihlKHt0eXBlOiJicnVzaHN0YXJ0In0pLGUoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksZSh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LGUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG09WGxbIXU8PDF8IWNdLGUpOnV9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG09WGxbIXU8PDF8IWNdLGUpOmN9LGUuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJmM/KHA9ISF0WzBdLGY9ISF0WzFdKTp1P3A9ISF0OmMmJihmPSEhdCksZSk6dSYmYz9bcCxmXTp1P3A6Yz9mOm51bGx9LGUuZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLHIsbyxpLGw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJihuPXRbMF0scj10WzFdLGMmJihuPW5bMF0scj1yWzBdKSxzPVtuLHJdLHUuaW52ZXJ0JiYobj11KG4pLHI9dShyKSkscjxuJiYobD1uLG49cixyPWwpLG49PWRbMF0mJnI9PWRbMV18fChkPVtuLHJdKSksYyYmKG89dFswXSxpPXRbMV0sdSYmKG89b1sxXSxpPWlbMV0pLGE9W28saV0sYy5pbnZlcnQmJihvPWMobyksaT1jKGkpKSxpPG8mJihsPW8sbz1pLGk9bCksbz09X1swXSYmaT09X1sxXXx8KF89W28saV0pKSxlKToodSYmKHM/KG49c1swXSxyPXNbMV0pOihuPWRbMF0scj1kWzFdLHUuaW52ZXJ0JiYobj11LmludmVydChuKSxyPXUuaW52ZXJ0KHIpKSxyPG4mJihsPW4sbj1yLHI9bCkpKSxjJiYoYT8obz1hWzBdLGk9YVsxXSk6KG89X1swXSxpPV9bMV0sYy5pbnZlcnQmJihvPWMuaW52ZXJ0KG8pLGk9Yy5pbnZlcnQoaSkpLGk8byYmKGw9byxvPWksaT1sKSkpLHUmJmM/W1tuLG9dLFtyLGldXTp1P1tuLHJdOmMmJltvLGldKX0sZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBlLmVtcHR5KCl8fChkPVswLDBdLF89WzAsMF0scz1hPW51bGwpLGV9LGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIXUmJmRbMF09PWRbMV18fCEhYyYmX1swXT09X1sxXX0scGkucmViaW5kKGUsbCwib24iKX07dmFyIEtsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LFhsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLCRsPW1hLmZvcm1hdD12YS50aW1lRm9ybWF0LFFsPSRsLnV0YyxKbD1RbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7JGwuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2xpOkpsLGxpLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9LGxpLnRvU3RyaW5nPUpsLnRvU3RyaW5nLG1hLnNlY29uZD1XZShmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhhKDFlMypNYXRoLmZsb29yKGUvMWUzKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKGUuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0U2Vjb25kcygpfSksbWEuc2Vjb25kcz1tYS5zZWNvbmQucmFuZ2UsbWEuc2Vjb25kcy51dGM9bWEuc2Vjb25kLnV0Yy5yYW5nZSxtYS5taW51dGU9V2UoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoYSg2ZTQqTWF0aC5mbG9vcihlLzZlNCkpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZShlLmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLG1hLm1pbnV0ZXM9bWEubWludXRlLnJhbmdlLG1hLm1pbnV0ZXMudXRjPW1hLm1pbnV0ZS51dGMucmFuZ2UsbWEuaG91cj1XZShmdW5jdGlvbihlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBoYSgzNmU1KihNYXRoLmZsb29yKGUvMzZlNS10KSt0KSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKGUuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSxtYS5ob3Vycz1tYS5ob3VyLnJhbmdlLG1hLmhvdXJzLnV0Yz1tYS5ob3VyLnV0Yy5yYW5nZSxtYS5tb250aD1XZShmdW5jdGlvbihlKXtyZXR1cm4gZT1tYS5kYXkoZSksZS5zZXREYXRlKDEpLGV9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KSxtYS5tb250aHM9bWEubW9udGgucmFuZ2UsbWEubW9udGhzLnV0Yz1tYS5tb250aC51dGMucmFuZ2U7dmFyIFpsPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sZXU9W1ttYS5zZWNvbmQsMV0sW21hLnNlY29uZCw1XSxbbWEuc2Vjb25kLDE1XSxbbWEuc2Vjb25kLDMwXSxbbWEubWludXRlLDFdLFttYS5taW51dGUsNV0sW21hLm1pbnV0ZSwxNV0sW21hLm1pbnV0ZSwzMF0sW21hLmhvdXIsMV0sW21hLmhvdXIsM10sW21hLmhvdXIsNl0sW21hLmhvdXIsMTJdLFttYS5kYXksMV0sW21hLmRheSwyXSxbbWEud2VlaywxXSxbbWEubW9udGgsMV0sW21hLm1vbnRoLDNdLFttYS55ZWFyLDFdXSx0dT0kbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXkoKSYmMSE9ZS5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihlKXtyZXR1cm4gMSE9ZS5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfV0sWyIlWSIsa3RdXSksbnU9e3JhbmdlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcGkucmFuZ2UoTWF0aC5jZWlsKGUvbikqbiwrdCxuKS5tYXAoY2kpfSxmbG9vcjpBLGNlaWw6QX07ZXUueWVhcj1tYS55ZWFyLG1hLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHVpKHBpLnNjYWxlLmxpbmVhcigpLGV1LHR1KX07dmFyIHJ1PWV1Lm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZVswXS51dGMsZVsxXV19KSxvdT1RbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXkoKSYmMSE9ZS5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihlKXtyZXR1cm4gMSE9ZS5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpfV0sWyIlWSIsa3RdXSk7cnUueWVhcj1tYS55ZWFyLnV0YyxtYS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gdWkocGkuc2NhbGUubGluZWFyKCkscnUsb3UpfSxwaS50ZXh0PXdlKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3BvbnNlVGV4dH0pLHBpLmpzb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWUoZSwiYXBwbGljYXRpb24vanNvbiIsZGksdCl9LHBpLmh0bWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWUoZSwidGV4dC9odG1sIixfaSx0KX0scGkueG1sPXdlKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3BvbnNlWE1MfSksdGhpcy5kMz1waSxyPXBpLHZvaWQgMCE9PShvPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbCh0LG4sdCxlKTpyKSYmKGUuZXhwb3J0cz1vKX0oKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWMzanMvcmVhY3QtYzNqcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksZj12b2lkIDAsbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG8odGhpcyx0KSxzKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIGkodCxlKSxsKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2Y9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtYzNqcy9ub2RlX21vZHVsZXMvYzMvYzMuanMiKSx0aGlzLnVwZGF0ZUNoYXJ0KHRoaXMucHJvcHMpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVDaGFydChlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveUNoYXJ0KCl9fSx7a2V5OiJkZXN0cm95Q2hhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dHJ5e3RoaXMuY2hhcnQ9dGhpcy5jaGFydC5kZXN0cm95KCl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKCJJbnRlcm5hbCBDMyBlcnJvciIsZSl9fX0se2tleToiZ2VuZXJhdGVDaGFydCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1hKHtiaW5kdG86ZX0sdCk7cmV0dXJuIGYuZ2VuZXJhdGUobil9fSx7a2V5OiJsb2FkTmV3RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jaGFydC5sb2FkKGUpfX0se2tleToidW5sb2FkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNoYXJ0LnVubG9hZCgpfX0se2tleToidXBkYXRlQ2hhcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY2hhcnR8fCh0aGlzLmNoYXJ0PXRoaXMuZ2VuZXJhdGVDaGFydCgoMCxwLmZpbmRET01Ob2RlKSh0aGlzKSxlKSksZS51bmxvYWRCZWZvcmVMb2FkJiZ0aGlzLnVubG9hZERhdGEoKSx0aGlzLmxvYWROZXdEYXRhKGUuZGF0YSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jbGFzc05hbWU/IiAiK3RoaXMucHJvcHMuY2xhc3NOYW1lOiIiLHQ9dGhpcy5wcm9wcy5zdHlsZT90aGlzLnByb3BzLnN0eWxlOnt9O3JldHVybiBjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmUsc3R5bGU6dH0pfX1dLFt7a2V5OiJkaXNwbGF5TmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkMzQ2hhcnQifX0se2tleToicHJvcFR5cGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTpfLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdGl0bGU6Xy5kZWZhdWx0Lm9iamVjdCxzaXplOl8uZGVmYXVsdC5vYmplY3QscGFkZGluZzpfLmRlZmF1bHQub2JqZWN0LGNvbG9yOl8uZGVmYXVsdC5vYmplY3QsaW50ZXJhY3Rpb246Xy5kZWZhdWx0Lm9iamVjdCx0cmFuc2l0aW9uOl8uZGVmYXVsdC5vYmplY3Qsb25pbml0Ol8uZGVmYXVsdC5mdW5jLG9ucmVuZGVyZWQ6Xy5kZWZhdWx0LmZ1bmMsb25tb3VzZW92ZXI6Xy5kZWZhdWx0LmZ1bmMsb25tb3VzZW91dDpfLmRlZmF1bHQuZnVuYyxvbnJlc2l6ZTpfLmRlZmF1bHQuZnVuYyxvbnJlc2l6ZWQ6Xy5kZWZhdWx0LmZ1bmMsYXhpczpfLmRlZmF1bHQub2JqZWN0LGdyaWQ6Xy5kZWZhdWx0Lm9iamVjdCxyZWdpb25zOl8uZGVmYXVsdC5hcnJheSxsZWdlbmQ6Xy5kZWZhdWx0Lm9iamVjdCx0b29sdGlwOl8uZGVmYXVsdC5vYmplY3Qsc3ViY2hhcnQ6Xy5kZWZhdWx0Lm9iamVjdCx6b29tOl8uZGVmYXVsdC5vYmplY3QscG9pbnQ6Xy5kZWZhdWx0Lm9iamVjdCxsaW5lOl8uZGVmYXVsdC5vYmplY3QsYXJlYTpfLmRlZmF1bHQub2JqZWN0LGJhcjpfLmRlZmF1bHQub2JqZWN0LHBpZTpfLmRlZmF1bHQub2JqZWN0LGRvbnV0Ol8uZGVmYXVsdC5vYmplY3QsZ2F1Z2U6Xy5kZWZhdWx0Lm9iamVjdCxjbGFzc05hbWU6Xy5kZWZhdWx0LnN0cmluZyxzdHlsZTpfLmRlZmF1bHQub2JqZWN0LHVubG9hZEJlZm9yZUxvYWQ6Xy5kZWZhdWx0LmJvb2x9fX1dKSx0fShjLmRlZmF1bHQuQ29tcG9uZW50KTt0LmRlZmF1bHQ9bX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvbGxhcHNlL2xpYi9Db2xsYXBzZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2xsYXBzZT12b2lkIDA7dmFyIGw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvcmVhY3QtbW90aW9uLmpzIiksbT0iSURMSU5HIixoPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGc9e2NvbGxhcHNlOiJSZWFjdENvbGxhcHNlLS1jb2xsYXBzZSIsY29udGVudDoiUmVhY3RDb2xsYXBzZS0tY29udGVudCJ9LGI9dC5Db2xsYXBzZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ModGhpcyx0KTt2YXIgbj1pKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIEUuY2FsbChuKSxuLnN0YXRlPXtjdXJyZW50U3RhdGU6bSxmcm9tOjAsdG86MH0sbn1yZXR1cm4gYSh0LGUpLHUodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaXNPcGVuZWQsbj1lLmZvcmNlSW5pdGlhbEFuaW1hdGlvbixyPWUub25SZXN0O2lmKHQpe3ZhciBvPXRoaXMuZ2V0VG8oKTtpZihuKXt2YXIgcz10aGlzLndyYXBwZXIuY2xpZW50SGVpZ2h0O3RoaXMuc2V0U3RhdGUoe2N1cnJlbnRTdGF0ZToiUkVTSVpJTkciLGZyb206cyx0bzpvfSl9ZWxzZSB0aGlzLnNldFN0YXRlKHtjdXJyZW50U3RhdGU6bSxmcm9tOm8sdG86b30pfXIoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2UuaGFzTmVzdGVkQ29sbGFwc2U/ZS5pc09wZW5lZCE9PXRoaXMucHJvcHMuaXNPcGVuZWQmJnRoaXMuc2V0U3RhdGUoe2N1cnJlbnRTdGF0ZToiV0FJVElORyJ9KTp0aGlzLnN0YXRlLmN1cnJlbnRTdGF0ZT09PW0mJihlLmlzT3BlbmVkfHx0aGlzLnByb3BzLmlzT3BlbmVkKSYmdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFN0YXRlOiJXQUlUSU5HIn0pfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLmlzT3BlbmVkLG89bi5vblJlc3Qscz1uLm9uTWVhc3VyZTtpZih0aGlzLnN0YXRlLmN1cnJlbnRTdGF0ZT09PW0pcmV0dXJuIHZvaWQgbygpO3QudG8hPT10aGlzLnN0YXRlLnRvJiZzKHtoZWlnaHQ6dGhpcy5zdGF0ZS50byx3aWR0aDp0aGlzLmNvbnRlbnQuY2xpZW50V2lkdGh9KTt2YXIgaT10aGlzLndyYXBwZXIuY2xpZW50SGVpZ2h0LGE9cj90aGlzLmdldFRvKCk6MDtpZihpIT09YSlyZXR1cm4gdm9pZCB0aGlzLnNldFN0YXRlKHtjdXJyZW50U3RhdGU6IlJFU0laSU5HIixmcm9tOmksdG86YX0pOyJSRVNUSU5HIiE9PXRoaXMuc3RhdGUuY3VycmVudFN0YXRlJiYiV0FJVElORyIhPT10aGlzLnN0YXRlLmN1cnJlbnRTdGF0ZXx8dGhpcy5zZXRTdGF0ZSh7Y3VycmVudFN0YXRlOm0sZnJvbTppLHRvOmF9KX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZi5Nb3Rpb24sbCh7fSx0aGlzLmdldE1vdGlvblByb3BzKCkse29uUmVzdDp0aGlzLm9uUmVzdCxjaGlsZHJlbjp0aGlzLnJlbmRlckNvbnRlbnR9KSl9fV0pLHR9KGQuZGVmYXVsdC5QdXJlQ29tcG9uZW50KTtiLnByb3BUeXBlcz17aXNPcGVuZWQ6cC5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxzcHJpbmdDb25maWc6cC5kZWZhdWx0Lm9iamVjdE9mKHAuZGVmYXVsdC5udW1iZXIpLGZvcmNlSW5pdGlhbEFuaW1hdGlvbjpwLmRlZmF1bHQuYm9vbCxoYXNOZXN0ZWRDb2xsYXBzZTpwLmRlZmF1bHQuYm9vbCxmaXhlZEhlaWdodDpwLmRlZmF1bHQubnVtYmVyLHRoZW1lOnAuZGVmYXVsdC5vYmplY3RPZihwLmRlZmF1bHQuc3RyaW5nKSxzdHlsZTpwLmRlZmF1bHQub2JqZWN0LG9uUmVuZGVyOnAuZGVmYXVsdC5mdW5jLG9uUmVzdDpwLmRlZmF1bHQuZnVuYyxvbk1lYXN1cmU6cC5kZWZhdWx0LmZ1bmMsY2hpbGRyZW46cC5kZWZhdWx0Lm5vZGUuaXNSZXF1aXJlZH0sYi5kZWZhdWx0UHJvcHM9e2ZvcmNlSW5pdGlhbEFuaW1hdGlvbjohMSxoYXNOZXN0ZWRDb2xsYXBzZTohMSxmaXhlZEhlaWdodDotMSxzdHlsZTp7fSx0aGVtZTpnLG9uUmVuZGVyOmgsb25SZXN0Omgsb25NZWFzdXJlOmh9O3ZhciBFPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQ29udGVudFJlZj1mdW5jdGlvbih0KXtlLmNvbnRlbnQ9dH0sdGhpcy5vbldyYXBwZXJSZWY9ZnVuY3Rpb24odCl7ZS53cmFwcGVyPXR9LHRoaXMub25SZXN0PWZ1bmN0aW9uKCl7ZS5yYWY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUuc2V0UmVzdGluZyl9LHRoaXMuc2V0UmVzdGluZz1mdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2N1cnJlbnRTdGF0ZToiUkVTVElORyJ9KX0sdGhpcy5nZXRUbz1mdW5jdGlvbigpe3ZhciB0PWUucHJvcHMuZml4ZWRIZWlnaHQ7cmV0dXJuIHQ+LTE/dDplLmNvbnRlbnQuY2xpZW50SGVpZ2h0fSx0aGlzLmdldFdyYXBwZXJTdHlsZT1mdW5jdGlvbih0KXtpZihlLnN0YXRlLmN1cnJlbnRTdGF0ZT09PW0mJmUuc3RhdGUudG8pe3ZhciBuPWUucHJvcHMuZml4ZWRIZWlnaHQ7cmV0dXJuIG4+LTE/e292ZXJmbG93OiJoaWRkZW4iLGhlaWdodDpufTp7aGVpZ2h0OiJhdXRvIn19cmV0dXJuIldBSVRJTkciIT09ZS5zdGF0ZS5jdXJyZW50U3RhdGV8fGUuc3RhdGUudG8/e292ZXJmbG93OiJoaWRkZW4iLGhlaWdodDpNYXRoLm1heCgwLHQpfTp7b3ZlcmZsb3c6ImhpZGRlbiIsaGVpZ2h0OjB9fSx0aGlzLmdldE1vdGlvblByb3BzPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wcm9wcy5zcHJpbmdDb25maWc7cmV0dXJuIGUuc3RhdGUuY3VycmVudFN0YXRlPT09bT97ZGVmYXVsdFN0eWxlOntoZWlnaHQ6ZS5zdGF0ZS50b30sc3R5bGU6e2hlaWdodDplLnN0YXRlLnRvfX06e2RlZmF1bHRTdHlsZTp7aGVpZ2h0OmUuc3RhdGUuZnJvbX0sc3R5bGU6e2hlaWdodDooMCxmLnNwcmluZykoZS5zdGF0ZS50byxsKHtwcmVjaXNpb246MX0sdCkpfX19LHRoaXMucmVuZGVyQ29udGVudD1mdW5jdGlvbih0KXt2YXIgbj10LmhlaWdodCxyPWUucHJvcHMscz0oci5pc09wZW5lZCxyLnNwcmluZ0NvbmZpZyxyLmZvcmNlSW5pdGlhbEFuaW1hdGlvbixyLmhhc05lc3RlZENvbGxhcHNlLHIuZml4ZWRIZWlnaHQsci50aGVtZSksaT1yLnN0eWxlLGE9ci5vblJlbmRlcix1PShyLm9uUmVzdCxyLm9uTWVhc3VyZSxyLmNoaWxkcmVuKSxjPW8ocixbImlzT3BlbmVkIiwic3ByaW5nQ29uZmlnIiwiZm9yY2VJbml0aWFsQW5pbWF0aW9uIiwiaGFzTmVzdGVkQ29sbGFwc2UiLCJmaXhlZEhlaWdodCIsInRoZW1lIiwic3R5bGUiLCJvblJlbmRlciIsIm9uUmVzdCIsIm9uTWVhc3VyZSIsImNoaWxkcmVuIl0pLF89ZS5zdGF0ZTtyZXR1cm4gYSh7Y3VycmVudDpuLGZyb206Xy5mcm9tLHRvOl8udG99KSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixsKHtyZWY6ZS5vbldyYXBwZXJSZWYsY2xhc3NOYW1lOnMuY29sbGFwc2Usc3R5bGU6bCh7fSxlLmdldFdyYXBwZXJTdHlsZShNYXRoLm1heCgwLG4pKSxpKX0sYyksZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjplLm9uQ29udGVudFJlZixjbGFzc05hbWU6cy5jb250ZW50fSx1KSl9fX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvbGxhcHNlL2xpYi9Vbm1vdW50Q2xvc2VkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVubW91bnRDbG9zZWQ9dm9pZCAwO3ZhciBsPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jb2xsYXBzZS9saWIvQ29sbGFwc2UuanMiKTsodC5Vbm1vdW50Q2xvc2VkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cyh0aGlzLHQpO3ZhciBuPWkodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNPcGVuZWQ7IW4ucHJvcHMuaXNPcGVuZWQmJnQmJm4uc2V0U3RhdGUoe2ZvcmNlSW5pdGlhbEFuaW1hdGlvbjohMCxzaG91bGRVbm1vdW50OiExfSl9LG4ub25SZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bi5wcm9wcyx0PWUuaXNPcGVuZWQscj1lLm9uUmVzdDt0fHxuLnNldFN0YXRlKHtzaG91bGRVbm1vdW50OiEwfSksciYmci5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX0sbi5zdGF0ZT17c2hvdWxkVW5tb3VudDohbi5wcm9wcy5pc09wZW5lZCxmb3JjZUluaXRpYWxBbmltYXRpb246IW4ucHJvcHMuaXNPcGVuZWR9LG59cmV0dXJuIGEodCxlKSx1KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pc09wZW5lZCxuPShlLm9uUmVzdCxvKGUsWyJpc09wZW5lZCIsIm9uUmVzdCJdKSkscj10aGlzLnN0YXRlLHM9ci5mb3JjZUluaXRpYWxBbmltYXRpb247cmV0dXJuIHIuc2hvdWxkVW5tb3VudD9udWxsOmQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYuQ29sbGFwc2UsbCh7Zm9yY2VJbml0aWFsQW5pbWF0aW9uOnMsaXNPcGVuZWQ6dCxvblJlc3Q6dGhpcy5vblJlc3R9LG4pKX19XSksdH0oZC5kZWZhdWx0LlB1cmVDb21wb25lbnQpKS5wcm9wVHlwZXM9e2lzT3BlbmVkOnAuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsb25SZXN0OnAuZGVmYXVsdC5mdW5jfX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvbGxhcHNlL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jb2xsYXBzZS9saWIvQ29sbGFwc2UuanMiKSxvPXIuQ29sbGFwc2Uscz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jb2xsYXBzZS9saWIvVW5tb3VudENsb3NlZC5qcyIpLGk9cy5Vbm1vdW50Q2xvc2VkO2kuQ29sbGFwc2U9byxpLlVubW91bnRDbG9zZWQ9aSxlLmV4cG9ydHM9aX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvcHktdG8tY2xpcGJvYXJkL2xpYi9Db21wb25lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gYShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29weVRvQ2xpcGJvYXJkPXZvaWQgMDt2YXIgbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9jb3B5LXRvLWNsaXBib2FyZC9pbmRleC5qcyIpLHA9cihfKTsodC5Db3B5VG9DbGlwYm9hcmQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvO3ModGhpcyx0KTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGEpLHU9MDt1PGE7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9aSh0aGlzLChlPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5vbkNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXIucHJvcHMsbj10LnRleHQsbz10Lm9uQ29weSxzPXQuY2hpbGRyZW4saT10Lm9wdGlvbnMsYT1kLmRlZmF1bHQuQ2hpbGRyZW4ub25seShzKSxsPSgwLHAuZGVmYXVsdCkobixpKTtvJiZvKG4sbCksYSYmYS5wcm9wcyYmImZ1bmN0aW9uIj09dHlwZW9mIGEucHJvcHMub25DbGljayYmYS5wcm9wcy5vbkNsaWNrKGUpfSxvPW4saShyLG8pfXJldHVybiBhKHQsZSksdSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PShlLnRleHQsZS5vbkNvcHksZS5vcHRpb25zLGUuY2hpbGRyZW4pLG49byhlLFsidGV4dCIsIm9uQ29weSIsIm9wdGlvbnMiLCJjaGlsZHJlbiJdKSxyPWQuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KHQpO3JldHVybiBkLmRlZmF1bHQuY2xvbmVFbGVtZW50KHIsbCh7fSxuLHtvbkNsaWNrOnRoaXMub25DbGlja30pKX19XSksdH0oZC5kZWZhdWx0LlB1cmVDb21wb25lbnQpKS5kZWZhdWx0UHJvcHM9e29uQ29weTp2b2lkIDAsb3B0aW9uczp2b2lkIDB9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtY29weS10by1jbGlwYm9hcmQvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNvcHktdG8tY2xpcGJvYXJkL2xpYi9Db21wb25lbnQuanMiKSxvPXIuQ29weVRvQ2xpcGJvYXJkO28uQ29weVRvQ2xpcGJvYXJkPW8sZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvU2Nyb2xsYmFycy9kZWZhdWx0UmVuZGVyRWxlbWVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLGUpfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5zdHlsZSxuPXIoZSxbInN0eWxlIl0pLG89dSh7fSx0LHtyaWdodDoyLGJvdHRvbToyLGxlZnQ6Mixib3JkZXJSYWRpdXM6M30pO3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix1KHtzdHlsZTpvfSxuKSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLnN0eWxlLG49cihlLFsic3R5bGUiXSksbz11KHt9LHQse3JpZ2h0OjIsYm90dG9tOjIsdG9wOjIsYm9yZGVyUmFkaXVzOjN9KTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsdSh7c3R5bGU6b30sbikpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5zdHlsZSxuPXIoZSxbInN0eWxlIl0pLG89dSh7fSx0LHtjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czoiaW5oZXJpdCIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLC4yKSJ9KTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsdSh7c3R5bGU6b30sbikpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5zdHlsZSxuPXIoZSxbInN0eWxlIl0pLG89dSh7fSx0LHtjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czoiaW5oZXJpdCIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLC4yKSJ9KTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsdSh7c3R5bGU6b30sbikpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt0LnJlbmRlclZpZXdEZWZhdWx0PW8sdC5yZW5kZXJUcmFja0hvcml6b250YWxEZWZhdWx0PXMsdC5yZW5kZXJUcmFja1ZlcnRpY2FsRGVmYXVsdD1pLHQucmVuZGVyVGh1bWJIb3Jpem9udGFsRGVmYXVsdD1hLHQucmVuZGVyVGh1bWJWZXJ0aWNhbERlZmF1bHQ9bDt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShjKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWN1c3RvbS1zY3JvbGxiYXJzL2xpYi9TY3JvbGxiYXJzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGM9bigiLi9ub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvZG9tLWNzcy9pbmRleC5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL2lzU3RyaW5nLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL2dldFNjcm9sbGJhcldpZHRoLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL3JldHVybkZhbHNlLmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL2dldElubmVyV2lkdGguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvdXRpbHMvZ2V0SW5uZXJIZWlnaHQuanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvU2Nyb2xsYmFycy9zdHlsZXMuanMiKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWN1c3RvbS1zY3JvbGxiYXJzL2xpYi9TY3JvbGxiYXJzL2RlZmF1bHRSZW5kZXJFbGVtZW50cy5qcyIpLHg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgbjtzKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShyPjE/ci0xOjApLGE9MTthPHI7YSsrKW9bYS0xXT1hcmd1bWVudHNbYV07dmFyIGw9aSh0aGlzLChuPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkobixbdGhpcyxlXS5jb25jYXQobykpKTtyZXR1cm4gbC5nZXRTY3JvbGxMZWZ0PWwuZ2V0U2Nyb2xsTGVmdC5iaW5kKGwpLGwuZ2V0U2Nyb2xsVG9wPWwuZ2V0U2Nyb2xsVG9wLmJpbmQobCksbC5nZXRTY3JvbGxXaWR0aD1sLmdldFNjcm9sbFdpZHRoLmJpbmQobCksbC5nZXRTY3JvbGxIZWlnaHQ9bC5nZXRTY3JvbGxIZWlnaHQuYmluZChsKSxsLmdldENsaWVudFdpZHRoPWwuZ2V0Q2xpZW50V2lkdGguYmluZChsKSxsLmdldENsaWVudEhlaWdodD1sLmdldENsaWVudEhlaWdodC5iaW5kKGwpLGwuZ2V0VmFsdWVzPWwuZ2V0VmFsdWVzLmJpbmQobCksbC5nZXRUaHVtYkhvcml6b250YWxXaWR0aD1sLmdldFRodW1iSG9yaXpvbnRhbFdpZHRoLmJpbmQobCksbC5nZXRUaHVtYlZlcnRpY2FsSGVpZ2h0PWwuZ2V0VGh1bWJWZXJ0aWNhbEhlaWdodC5iaW5kKGwpLGwuZ2V0U2Nyb2xsTGVmdEZvck9mZnNldD1sLmdldFNjcm9sbExlZnRGb3JPZmZzZXQuYmluZChsKSxsLmdldFNjcm9sbFRvcEZvck9mZnNldD1sLmdldFNjcm9sbFRvcEZvck9mZnNldC5iaW5kKGwpLGwuc2Nyb2xsTGVmdD1sLnNjcm9sbExlZnQuYmluZChsKSxsLnNjcm9sbFRvcD1sLnNjcm9sbFRvcC5iaW5kKGwpLGwuc2Nyb2xsVG9MZWZ0PWwuc2Nyb2xsVG9MZWZ0LmJpbmQobCksbC5zY3JvbGxUb1RvcD1sLnNjcm9sbFRvVG9wLmJpbmQobCksbC5zY3JvbGxUb1JpZ2h0PWwuc2Nyb2xsVG9SaWdodC5iaW5kKGwpLGwuc2Nyb2xsVG9Cb3R0b209bC5zY3JvbGxUb0JvdHRvbS5iaW5kKGwpLGwuaGFuZGxlVHJhY2tNb3VzZUVudGVyPWwuaGFuZGxlVHJhY2tNb3VzZUVudGVyLmJpbmQobCksbC5oYW5kbGVUcmFja01vdXNlTGVhdmU9bC5oYW5kbGVUcmFja01vdXNlTGVhdmUuYmluZChsKSxsLmhhbmRsZUhvcml6b250YWxUcmFja01vdXNlRG93bj1sLmhhbmRsZUhvcml6b250YWxUcmFja01vdXNlRG93bi5iaW5kKGwpLGwuaGFuZGxlVmVydGljYWxUcmFja01vdXNlRG93bj1sLmhhbmRsZVZlcnRpY2FsVHJhY2tNb3VzZURvd24uYmluZChsKSxsLmhhbmRsZUhvcml6b250YWxUaHVtYk1vdXNlRG93bj1sLmhhbmRsZUhvcml6b250YWxUaHVtYk1vdXNlRG93bi5iaW5kKGwpLGwuaGFuZGxlVmVydGljYWxUaHVtYk1vdXNlRG93bj1sLmhhbmRsZVZlcnRpY2FsVGh1bWJNb3VzZURvd24uYmluZChsKSxsLmhhbmRsZVdpbmRvd1Jlc2l6ZT1sLmhhbmRsZVdpbmRvd1Jlc2l6ZS5iaW5kKGwpLGwuaGFuZGxlU2Nyb2xsPWwuaGFuZGxlU2Nyb2xsLmJpbmQobCksbC5oYW5kbGVEcmFnPWwuaGFuZGxlRHJhZy5iaW5kKGwpLGwuaGFuZGxlRHJhZ0VuZD1sLmhhbmRsZURyYWdFbmQuYmluZChsKSxsLnN0YXRlPXtkaWRNb3VudFVuaXZlcnNhbDohMX0sbH1yZXR1cm4gYSh0LGUpLHUodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnVwZGF0ZSgpLHRoaXMuY29tcG9uZW50RGlkTW91bnRVbml2ZXJzYWwoKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50VW5pdmVyc2FsIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMudW5pdmVyc2FsJiZ0aGlzLnNldFN0YXRlKHtkaWRNb3VudFVuaXZlcnNhbDohMH0pfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUxpc3RlbmVycygpLCgwLGMuY2FuY2VsKSh0aGlzLnJlcXVlc3RGcmFtZSksY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRyYWNrc1RpbWVvdXQpLGNsZWFySW50ZXJ2YWwodGhpcy5kZXRlY3RTY3JvbGxpbmdJbnRlcnZhbCl9fSx7a2V5OiJnZXRTY3JvbGxMZWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXc/dGhpcy52aWV3LnNjcm9sbExlZnQ6MH19LHtrZXk6ImdldFNjcm9sbFRvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3P3RoaXMudmlldy5zY3JvbGxUb3A6MH19LHtrZXk6ImdldFNjcm9sbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXc/dGhpcy52aWV3LnNjcm9sbFdpZHRoOjB9fSx7a2V5OiJnZXRTY3JvbGxIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldz90aGlzLnZpZXcuc2Nyb2xsSGVpZ2h0OjB9fSx7a2V5OiJnZXRDbGllbnRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3P3RoaXMudmlldy5jbGllbnRXaWR0aDowfX0se2tleToiZ2V0Q2xpZW50SGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXc/dGhpcy52aWV3LmNsaWVudEhlaWdodDowfX0se2tleToiZ2V0VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlld3x8e30sdD1lLnNjcm9sbExlZnQsbj12b2lkIDA9PT10PzA6dCxyPWUuc2Nyb2xsVG9wLG89dm9pZCAwPT09cj8wOnIscz1lLnNjcm9sbFdpZHRoLGk9dm9pZCAwPT09cz8wOnMsYT1lLnNjcm9sbEhlaWdodCxsPXZvaWQgMD09PWE/MDphLHU9ZS5jbGllbnRXaWR0aCxjPXZvaWQgMD09PXU/MDp1LGQ9ZS5jbGllbnRIZWlnaHQsXz12b2lkIDA9PT1kPzA6ZDtyZXR1cm57bGVmdDpuLyhpLWMpfHwwLHRvcDpvLyhsLV8pfHwwLHNjcm9sbExlZnQ6bixzY3JvbGxUb3A6byxzY3JvbGxXaWR0aDppLHNjcm9sbEhlaWdodDpsLGNsaWVudFdpZHRoOmMsY2xpZW50SGVpZ2h0Ol99fX0se2tleToiZ2V0VGh1bWJIb3Jpem9udGFsV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUudGh1bWJTaXplLG49ZS50aHVtYk1pblNpemUscj10aGlzLnZpZXcsbz1yLnNjcm9sbFdpZHRoLHM9ci5jbGllbnRXaWR0aCxpPSgwLEMuZGVmYXVsdCkodGhpcy50cmFja0hvcml6b250YWwpLGE9TWF0aC5jZWlsKHMvbyppKTtyZXR1cm4gaT09PWE/MDp0fHxNYXRoLm1heChhLG4pfX0se2tleToiZ2V0VGh1bWJWZXJ0aWNhbEhlaWdodCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS50aHVtYlNpemUsbj1lLnRodW1iTWluU2l6ZSxyPXRoaXMudmlldyxvPXIuc2Nyb2xsSGVpZ2h0LHM9ci5jbGllbnRIZWlnaHQsaT0oMCxTLmRlZmF1bHQpKHRoaXMudHJhY2tWZXJ0aWNhbCksYT1NYXRoLmNlaWwocy9vKmkpO3JldHVybiBpPT09YT8wOnR8fE1hdGgubWF4KGEsbil9fSx7a2V5OiJnZXRTY3JvbGxMZWZ0Rm9yT2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnZpZXcsbj10LnNjcm9sbFdpZHRoLHI9dC5jbGllbnRXaWR0aDtyZXR1cm4gZS8oKDAsQy5kZWZhdWx0KSh0aGlzLnRyYWNrSG9yaXpvbnRhbCktdGhpcy5nZXRUaHVtYkhvcml6b250YWxXaWR0aCgpKSoobi1yKX19LHtrZXk6ImdldFNjcm9sbFRvcEZvck9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52aWV3LG49dC5zY3JvbGxIZWlnaHQscj10LmNsaWVudEhlaWdodDtyZXR1cm4gZS8oKDAsUy5kZWZhdWx0KSh0aGlzLnRyYWNrVmVydGljYWwpLXRoaXMuZ2V0VGh1bWJWZXJ0aWNhbEhlaWdodCgpKSoobi1yKX19LHtrZXk6InNjcm9sbExlZnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy52aWV3JiYodGhpcy52aWV3LnNjcm9sbExlZnQ9ZSl9fSx7a2V5OiJzY3JvbGxUb3AiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy52aWV3JiYodGhpcy52aWV3LnNjcm9sbFRvcD1lKX19LHtrZXk6InNjcm9sbFRvTGVmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLnZpZXcuc2Nyb2xsTGVmdD0wKX19LHtrZXk6InNjcm9sbFRvVG9wIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMudmlldy5zY3JvbGxUb3A9MCl9fSx7a2V5OiJzY3JvbGxUb1JpZ2h0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMudmlldy5zY3JvbGxMZWZ0PXRoaXMudmlldy5zY3JvbGxXaWR0aCl9fSx7a2V5OiJzY3JvbGxUb0JvdHRvbSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLnZpZXcuc2Nyb2xsVG9wPXRoaXMudmlldy5zY3JvbGxIZWlnaHQpfX0se2tleToiYWRkTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJnRoaXMudmlldyl7dmFyIGU9dGhpcy52aWV3LHQ9dGhpcy50cmFja0hvcml6b250YWwsbj10aGlzLnRyYWNrVmVydGljYWwscj10aGlzLnRodW1iSG9yaXpvbnRhbCxvPXRoaXMudGh1bWJWZXJ0aWNhbDtlLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5oYW5kbGVTY3JvbGwpLCgwLHkuZGVmYXVsdCkoKSYmKHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdGhpcy5oYW5kbGVUcmFja01vdXNlRW50ZXIpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdGhpcy5oYW5kbGVUcmFja01vdXNlTGVhdmUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmhhbmRsZUhvcml6b250YWxUcmFja01vdXNlRG93biksbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix0aGlzLmhhbmRsZVRyYWNrTW91c2VFbnRlciksbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix0aGlzLmhhbmRsZVRyYWNrTW91c2VMZWF2ZSksbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlVmVydGljYWxUcmFja01vdXNlRG93biksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlSG9yaXpvbnRhbFRodW1iTW91c2VEb3duKSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5oYW5kbGVWZXJ0aWNhbFRodW1iTW91c2VEb3duKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmhhbmRsZVdpbmRvd1Jlc2l6ZSkpfX19LHtrZXk6InJlbW92ZUxpc3RlbmVycyIsdmFsdWU6ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZ0aGlzLnZpZXcpe3ZhciBlPXRoaXMudmlldyx0PXRoaXMudHJhY2tIb3Jpem9udGFsLG49dGhpcy50cmFja1ZlcnRpY2FsLHI9dGhpcy50aHVtYkhvcml6b250YWwsbz10aGlzLnRodW1iVmVydGljYWw7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuaGFuZGxlU2Nyb2xsKSwoMCx5LmRlZmF1bHQpKCkmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHRoaXMuaGFuZGxlVHJhY2tNb3VzZUVudGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHRoaXMuaGFuZGxlVHJhY2tNb3VzZUxlYXZlKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5oYW5kbGVIb3Jpem9udGFsVHJhY2tNb3VzZURvd24pLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdGhpcy5oYW5kbGVUcmFja01vdXNlRW50ZXIpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdGhpcy5oYW5kbGVUcmFja01vdXNlTGVhdmUpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmhhbmRsZVZlcnRpY2FsVHJhY2tNb3VzZURvd24pLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmhhbmRsZUhvcml6b250YWxUaHVtYk1vdXNlRG93biksby5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlVmVydGljYWxUaHVtYk1vdXNlRG93biksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpLHRoaXMudGVhcmRvd25EcmFnZ2luZygpKX19fSx7a2V5OiJoYW5kbGVTY3JvbGwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLHI9bi5vblNjcm9sbCxvPW4ub25TY3JvbGxGcmFtZTtyJiZyKGUpLHRoaXMudXBkYXRlKGZ1bmN0aW9uKGUpe3ZhciBuPWUuc2Nyb2xsTGVmdCxyPWUuc2Nyb2xsVG9wO3Qudmlld1Njcm9sbExlZnQ9bix0LnZpZXdTY3JvbGxUb3A9cixvJiZvKGUpfSksdGhpcy5kZXRlY3RTY3JvbGxpbmcoKX19LHtrZXk6ImhhbmRsZVNjcm9sbFN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMub25TY3JvbGxTdGFydDtlJiZlKCksdGhpcy5oYW5kbGVTY3JvbGxTdGFydEF1dG9IaWRlKCl9fSx7a2V5OiJoYW5kbGVTY3JvbGxTdGFydEF1dG9IaWRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYXV0b0hpZGUmJnRoaXMuc2hvd1RyYWNrcygpfX0se2tleToiaGFuZGxlU2Nyb2xsU3RvcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLm9uU2Nyb2xsU3RvcDtlJiZlKCksdGhpcy5oYW5kbGVTY3JvbGxTdG9wQXV0b0hpZGUoKX19LHtrZXk6ImhhbmRsZVNjcm9sbFN0b3BBdXRvSGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmF1dG9IaWRlJiZ0aGlzLmhpZGVUcmFja3MoKX19LHtrZXk6ImhhbmRsZVdpbmRvd1Jlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfX0se2tleToiaGFuZGxlSG9yaXpvbnRhbFRyYWNrTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9ZS50YXJnZXQsbj1lLmNsaWVudFgscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5sZWZ0LHM9dGhpcy5nZXRUaHVtYkhvcml6b250YWxXaWR0aCgpLGk9TWF0aC5hYnMoby1uKS1zLzI7dGhpcy52aWV3LnNjcm9sbExlZnQ9dGhpcy5nZXRTY3JvbGxMZWZ0Rm9yT2Zmc2V0KGkpfX0se2tleToiaGFuZGxlVmVydGljYWxUcmFja01vdXNlRG93biIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWUudGFyZ2V0LG49ZS5jbGllbnRZLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXIudG9wLHM9dGhpcy5nZXRUaHVtYlZlcnRpY2FsSGVpZ2h0KCksaT1NYXRoLmFicyhvLW4pLXMvMjt0aGlzLnZpZXcuc2Nyb2xsVG9wPXRoaXMuZ2V0U2Nyb2xsVG9wRm9yT2Zmc2V0KGkpfX0se2tleToiaGFuZGxlSG9yaXpvbnRhbFRodW1iTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5oYW5kbGVEcmFnU3RhcnQoZSk7dmFyIHQ9ZS50YXJnZXQsbj1lLmNsaWVudFgscj10Lm9mZnNldFdpZHRoLG89dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPW8ubGVmdDt0aGlzLnByZXZQYWdlWD1yLShuLXMpfX0se2tleToiaGFuZGxlVmVydGljYWxUaHVtYk1vdXNlRG93biIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KGUpO3ZhciB0PWUudGFyZ2V0LG49ZS5jbGllbnRZLHI9dC5vZmZzZXRIZWlnaHQsbz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9by50b3A7dGhpcy5wcmV2UGFnZVk9ci0obi1zKX19LHtrZXk6InNldHVwRHJhZ2dpbmciLHZhbHVlOmZ1bmN0aW9uKCl7KDAscC5kZWZhdWx0KShkb2N1bWVudC5ib2R5LFIuZGlzYWJsZVNlbGVjdFN0eWxlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlRHJhZyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVEcmFnRW5kKSxkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PVQuZGVmYXVsdH19LHtrZXk6InRlYXJkb3duRHJhZ2dpbmciLHZhbHVlOmZ1bmN0aW9uKCl7KDAscC5kZWZhdWx0KShkb2N1bWVudC5ib2R5LFIuZGlzYWJsZVNlbGVjdFN0eWxlUmVzZXQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVEcmFnKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZURyYWdFbmQpLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9dm9pZCAwfX0se2tleToiaGFuZGxlRHJhZ1N0YXJ0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRyYWdnaW5nPSEwLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXR1cERyYWdnaW5nKCl9fSx7a2V5OiJoYW5kbGVEcmFnIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnByZXZQYWdlWCl7dmFyIHQ9ZS5jbGllbnRYLG49dGhpcy50cmFja0hvcml6b250YWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1uLmxlZnQsbz10aGlzLmdldFRodW1iSG9yaXpvbnRhbFdpZHRoKCkscz1vLXRoaXMucHJldlBhZ2VYLGk9LXIrdC1zO3RoaXMudmlldy5zY3JvbGxMZWZ0PXRoaXMuZ2V0U2Nyb2xsTGVmdEZvck9mZnNldChpKX1pZih0aGlzLnByZXZQYWdlWSl7dmFyIGE9ZS5jbGllbnRZLGw9dGhpcy50cmFja1ZlcnRpY2FsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bC50b3AsYz10aGlzLmdldFRodW1iVmVydGljYWxIZWlnaHQoKSxkPWMtdGhpcy5wcmV2UGFnZVksXz0tdSthLWQ7dGhpcy52aWV3LnNjcm9sbFRvcD10aGlzLmdldFNjcm9sbFRvcEZvck9mZnNldChfKX1yZXR1cm4hMX19LHtrZXk6ImhhbmRsZURyYWdFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz0hMSx0aGlzLnByZXZQYWdlWD10aGlzLnByZXZQYWdlWT0wLHRoaXMudGVhcmRvd25EcmFnZ2luZygpLHRoaXMuaGFuZGxlRHJhZ0VuZEF1dG9IaWRlKCl9fSx7a2V5OiJoYW5kbGVEcmFnRW5kQXV0b0hpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hdXRvSGlkZSYmdGhpcy5oaWRlVHJhY2tzKCl9fSx7a2V5OiJoYW5kbGVUcmFja01vdXNlRW50ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50cmFja01vdXNlT3Zlcj0hMCx0aGlzLmhhbmRsZVRyYWNrTW91c2VFbnRlckF1dG9IaWRlKCl9fSx7a2V5OiJoYW5kbGVUcmFja01vdXNlRW50ZXJBdXRvSGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmF1dG9IaWRlJiZ0aGlzLnNob3dUcmFja3MoKX19LHtrZXk6ImhhbmRsZVRyYWNrTW91c2VMZWF2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrTW91c2VPdmVyPSExLHRoaXMuaGFuZGxlVHJhY2tNb3VzZUxlYXZlQXV0b0hpZGUoKX19LHtrZXk6ImhhbmRsZVRyYWNrTW91c2VMZWF2ZUF1dG9IaWRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYXV0b0hpZGUmJnRoaXMuaGlkZVRyYWNrcygpfX0se2tleToic2hvd1RyYWNrcyIsdmFsdWU6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5oaWRlVHJhY2tzVGltZW91dCksKDAscC5kZWZhdWx0KSh0aGlzLnRyYWNrSG9yaXpvbnRhbCx7b3BhY2l0eToxfSksKDAscC5kZWZhdWx0KSh0aGlzLnRyYWNrVmVydGljYWwse29wYWNpdHk6MX0pfX0se2tleToiaGlkZVRyYWNrcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmRyYWdnaW5nJiYhdGhpcy5zY3JvbGxpbmcmJiF0aGlzLnRyYWNrTW91c2VPdmVyKXt2YXIgdD10aGlzLnByb3BzLmF1dG9IaWRlVGltZW91dDtjbGVhclRpbWVvdXQodGhpcy5oaWRlVHJhY2tzVGltZW91dCksdGhpcy5oaWRlVHJhY2tzVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7KDAscC5kZWZhdWx0KShlLnRyYWNrSG9yaXpvbnRhbCx7b3BhY2l0eTowfSksKDAscC5kZWZhdWx0KShlLnRyYWNrVmVydGljYWwse29wYWNpdHk6MH0pfSx0KX19fSx7a2V5OiJkZXRlY3RTY3JvbGxpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnNjcm9sbGluZ3x8KHRoaXMuc2Nyb2xsaW5nPSEwLHRoaXMuaGFuZGxlU2Nyb2xsU3RhcnQoKSx0aGlzLmRldGVjdFNjcm9sbGluZ0ludGVydmFsPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ZS5sYXN0Vmlld1Njcm9sbExlZnQ9PT1lLnZpZXdTY3JvbGxMZWZ0JiZlLmxhc3RWaWV3U2Nyb2xsVG9wPT09ZS52aWV3U2Nyb2xsVG9wJiYoY2xlYXJJbnRlcnZhbChlLmRldGVjdFNjcm9sbGluZ0ludGVydmFsKSxlLnNjcm9sbGluZz0hMSxlLmhhbmRsZVNjcm9sbFN0b3AoKSksZS5sYXN0Vmlld1Njcm9sbExlZnQ9ZS52aWV3U2Nyb2xsTGVmdCxlLmxhc3RWaWV3U2Nyb2xsVG9wPWUudmlld1Njcm9sbFRvcH0sMTAwKSl9fSx7a2V5OiJyYWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5yZXF1ZXN0RnJhbWUmJmQuZGVmYXVsdC5jYW5jZWwodGhpcy5yZXF1ZXN0RnJhbWUpLHRoaXMucmVxdWVzdEZyYW1lPSgwLGQuZGVmYXVsdCkoZnVuY3Rpb24oKXt0LnJlcXVlc3RGcmFtZT12b2lkIDAsZSgpfSl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5yYWYoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdXBkYXRlKGUpfSl9fSx7a2V5OiJfdXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5vblVwZGF0ZSxyPXQuaGlkZVRyYWNrc1doZW5Ob3ROZWVkZWQsbz10aGlzLmdldFZhbHVlcygpO2lmKCgwLHkuZGVmYXVsdCkoKSl7dmFyIHM9by5zY3JvbGxMZWZ0LGk9by5jbGllbnRXaWR0aCxhPW8uc2Nyb2xsV2lkdGgsbD0oMCxDLmRlZmF1bHQpKHRoaXMudHJhY2tIb3Jpem9udGFsKSx1PXRoaXMuZ2V0VGh1bWJIb3Jpem9udGFsV2lkdGgoKSxjPXMvKGEtaSkqKGwtdSksZD17d2lkdGg6dSx0cmFuc2Zvcm06InRyYW5zbGF0ZVgoIitjKyJweCkifSxfPW8uc2Nyb2xsVG9wLGY9by5jbGllbnRIZWlnaHQsbT1vLnNjcm9sbEhlaWdodCxoPSgwLFMuZGVmYXVsdCkodGhpcy50cmFja1ZlcnRpY2FsKSxnPXRoaXMuZ2V0VGh1bWJWZXJ0aWNhbEhlaWdodCgpLGI9Xy8obS1mKSooaC1nKSxFPXtoZWlnaHQ6Zyx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoIitiKyJweCkifTtpZihyKXt2YXIgdj17dmlzaWJpbGl0eTphPmk/InZpc2libGUiOiJoaWRkZW4ifSxUPXt2aXNpYmlsaXR5Om0+Zj8idmlzaWJsZSI6ImhpZGRlbiJ9OygwLHAuZGVmYXVsdCkodGhpcy50cmFja0hvcml6b250YWwsdiksKDAscC5kZWZhdWx0KSh0aGlzLnRyYWNrVmVydGljYWwsVCl9KDAscC5kZWZhdWx0KSh0aGlzLnRodW1iSG9yaXpvbnRhbCxkKSwoMCxwLmRlZmF1bHQpKHRoaXMudGh1bWJWZXJ0aWNhbCxFKX1uJiZuKG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlKG8pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0oMCx5LmRlZmF1bHQpKCksbj10aGlzLnByb3BzLHI9KG4ub25TY3JvbGwsbi5vblNjcm9sbEZyYW1lLG4ub25TY3JvbGxTdGFydCxuLm9uU2Nyb2xsU3RvcCxuLm9uVXBkYXRlLG4ucmVuZGVyVmlldykscz1uLnJlbmRlclRyYWNrSG9yaXpvbnRhbCxpPW4ucmVuZGVyVHJhY2tWZXJ0aWNhbCxhPW4ucmVuZGVyVGh1bWJIb3Jpem9udGFsLHU9bi5yZW5kZXJUaHVtYlZlcnRpY2FsLGM9bi50YWdOYW1lLGQ9KG4uaGlkZVRyYWNrc1doZW5Ob3ROZWVkZWQsbi5hdXRvSGlkZSksXz0obi5hdXRvSGlkZVRpbWVvdXQsbi5hdXRvSGlkZUR1cmF0aW9uKSxwPShuLnRodW1iU2l6ZSxuLnRodW1iTWluU2l6ZSxuLnVuaXZlcnNhbCksbT1uLmF1dG9IZWlnaHQsaD1uLmF1dG9IZWlnaHRNaW4sZz1uLmF1dG9IZWlnaHRNYXgsRT1uLnN0eWxlLHY9bi5jaGlsZHJlbixUPW8obixbIm9uU2Nyb2xsIiwib25TY3JvbGxGcmFtZSIsIm9uU2Nyb2xsU3RhcnQiLCJvblNjcm9sbFN0b3AiLCJvblVwZGF0ZSIsInJlbmRlclZpZXciLCJyZW5kZXJUcmFja0hvcml6b250YWwiLCJyZW5kZXJUcmFja1ZlcnRpY2FsIiwicmVuZGVyVGh1bWJIb3Jpem9udGFsIiwicmVuZGVyVGh1bWJWZXJ0aWNhbCIsInRhZ05hbWUiLCJoaWRlVHJhY2tzV2hlbk5vdE5lZWRlZCIsImF1dG9IaWRlIiwiYXV0b0hpZGVUaW1lb3V0IiwiYXV0b0hpZGVEdXJhdGlvbiIsInRodW1iU2l6ZSIsInRodW1iTWluU2l6ZSIsInVuaXZlcnNhbCIsImF1dG9IZWlnaHQiLCJhdXRvSGVpZ2h0TWluIiwiYXV0b0hlaWdodE1heCIsInN0eWxlIiwiY2hpbGRyZW4iXSksQT10aGlzLnN0YXRlLmRpZE1vdW50VW5pdmVyc2FsLEM9bCh7fSxSLmNvbnRhaW5lclN0eWxlRGVmYXVsdCxtJiZsKHt9LFIuY29udGFpbmVyU3R5bGVBdXRvSGVpZ2h0LHttaW5IZWlnaHQ6aCxtYXhIZWlnaHQ6Z30pLEUpLE89bCh7fSxSLnZpZXdTdHlsZURlZmF1bHQse21hcmdpblJpZ2h0OnQ/LXQ6MCxtYXJnaW5Cb3R0b206dD8tdDowfSxtJiZsKHt9LFIudmlld1N0eWxlQXV0b0hlaWdodCx7bWluSGVpZ2h0OigwLGIuZGVmYXVsdCkoaCk/ImNhbGMoIitoKyIgKyAiK3QrInB4KSI6aCt0LG1heEhlaWdodDooMCxiLmRlZmF1bHQpKGcpPyJjYWxjKCIrZysiICsgIit0KyJweCkiOmcrdH0pLG0mJnAmJiFBJiZ7bWluSGVpZ2h0OmgsbWF4SGVpZ2h0Omd9LHAmJiFBJiZSLnZpZXdTdHlsZVVuaXZlcnNhbEluaXRpYWwpLFM9e3RyYW5zaXRpb246Im9wYWNpdHkgIitfKyJtcyIsb3BhY2l0eTowfSxqPWwoe30sUi50cmFja0hvcml6b250YWxTdHlsZURlZmF1bHQsZCYmUywoIXR8fHAmJiFBKSYme2Rpc3BsYXk6Im5vbmUifSkseD1sKHt9LFIudHJhY2tWZXJ0aWNhbFN0eWxlRGVmYXVsdCxkJiZTLCghdHx8cCYmIUEpJiZ7ZGlzcGxheToibm9uZSJ9KTtyZXR1cm4oMCxmLmNyZWF0ZUVsZW1lbnQpKGMsbCh7fSxULHtzdHlsZTpDLHJlZjpmdW5jdGlvbih0KXtlLmNvbnRhaW5lcj10fX0pLFsoMCxmLmNsb25lRWxlbWVudCkocih7c3R5bGU6T30pLHtrZXk6InZpZXciLHJlZjpmdW5jdGlvbih0KXtlLnZpZXc9dH19LHYpLCgwLGYuY2xvbmVFbGVtZW50KShzKHtzdHlsZTpqfSkse2tleToidHJhY2tIb3Jpem9udGFsIixyZWY6ZnVuY3Rpb24odCl7ZS50cmFja0hvcml6b250YWw9dH19LCgwLGYuY2xvbmVFbGVtZW50KShhKHtzdHlsZTpSLnRodW1iSG9yaXpvbnRhbFN0eWxlRGVmYXVsdH0pLHtyZWY6ZnVuY3Rpb24odCl7ZS50aHVtYkhvcml6b250YWw9dH19KSksKDAsZi5jbG9uZUVsZW1lbnQpKGkoe3N0eWxlOnh9KSx7a2V5OiJ0cmFja1ZlcnRpY2FsIixyZWY6ZnVuY3Rpb24odCl7ZS50cmFja1ZlcnRpY2FsPXR9fSwoMCxmLmNsb25lRWxlbWVudCkodSh7c3R5bGU6Ui50aHVtYlZlcnRpY2FsU3R5bGVEZWZhdWx0fSkse3JlZjpmdW5jdGlvbih0KXtlLnRodW1iVmVydGljYWw9dH19KSldKX19XSksdH0oZi5Db21wb25lbnQpO3QuZGVmYXVsdD14LHgucHJvcFR5cGVzPXtvblNjcm9sbDpoLmRlZmF1bHQuZnVuYyxvblNjcm9sbEZyYW1lOmguZGVmYXVsdC5mdW5jLG9uU2Nyb2xsU3RhcnQ6aC5kZWZhdWx0LmZ1bmMsb25TY3JvbGxTdG9wOmguZGVmYXVsdC5mdW5jLG9uVXBkYXRlOmguZGVmYXVsdC5mdW5jLHJlbmRlclZpZXc6aC5kZWZhdWx0LmZ1bmMscmVuZGVyVHJhY2tIb3Jpem9udGFsOmguZGVmYXVsdC5mdW5jLHJlbmRlclRyYWNrVmVydGljYWw6aC5kZWZhdWx0LmZ1bmMscmVuZGVyVGh1bWJIb3Jpem9udGFsOmguZGVmYXVsdC5mdW5jLHJlbmRlclRodW1iVmVydGljYWw6aC5kZWZhdWx0LmZ1bmMsdGFnTmFtZTpoLmRlZmF1bHQuc3RyaW5nLHRodW1iU2l6ZTpoLmRlZmF1bHQubnVtYmVyLHRodW1iTWluU2l6ZTpoLmRlZmF1bHQubnVtYmVyLGhpZGVUcmFja3NXaGVuTm90TmVlZGVkOmguZGVmYXVsdC5ib29sLGF1dG9IaWRlOmguZGVmYXVsdC5ib29sLGF1dG9IaWRlVGltZW91dDpoLmRlZmF1bHQubnVtYmVyLGF1dG9IaWRlRHVyYXRpb246aC5kZWZhdWx0Lm51bWJlcixhdXRvSGVpZ2h0OmguZGVmYXVsdC5ib29sLGF1dG9IZWlnaHRNaW46aC5kZWZhdWx0Lm9uZU9mVHlwZShbaC5kZWZhdWx0Lm51bWJlcixoLmRlZmF1bHQuc3RyaW5nXSksYXV0b0hlaWdodE1heDpoLmRlZmF1bHQub25lT2ZUeXBlKFtoLmRlZmF1bHQubnVtYmVyLGguZGVmYXVsdC5zdHJpbmddKSx1bml2ZXJzYWw6aC5kZWZhdWx0LmJvb2wsc3R5bGU6aC5kZWZhdWx0Lm9iamVjdCxjaGlsZHJlbjpoLmRlZmF1bHQubm9kZX0seC5kZWZhdWx0UHJvcHM9e3JlbmRlclZpZXc6ai5yZW5kZXJWaWV3RGVmYXVsdCxyZW5kZXJUcmFja0hvcml6b250YWw6ai5yZW5kZXJUcmFja0hvcml6b250YWxEZWZhdWx0LHJlbmRlclRyYWNrVmVydGljYWw6ai5yZW5kZXJUcmFja1ZlcnRpY2FsRGVmYXVsdCxyZW5kZXJUaHVtYkhvcml6b250YWw6ai5yZW5kZXJUaHVtYkhvcml6b250YWxEZWZhdWx0LHJlbmRlclRodW1iVmVydGljYWw6ai5yZW5kZXJUaHVtYlZlcnRpY2FsRGVmYXVsdCx0YWdOYW1lOiJkaXYiLHRodW1iTWluU2l6ZTozMCxoaWRlVHJhY2tzV2hlbk5vdE5lZWRlZDohMSxhdXRvSGlkZTohMSxhdXRvSGlkZVRpbWVvdXQ6MWUzLGF1dG9IaWRlRHVyYXRpb246MjAwLGF1dG9IZWlnaHQ6ITEsYXV0b0hlaWdodE1pbjowLGF1dG9IZWlnaHRNYXg6MjAwLHVuaXZlcnNhbDohMX19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvU2Nyb2xsYmFycy9zdHlsZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY29udGFpbmVyU3R5bGVEZWZhdWx0PXtwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJoaWRkZW4iLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSx0LmNvbnRhaW5lclN0eWxlQXV0b0hlaWdodD17aGVpZ2h0OiJhdXRvIn0sdC52aWV3U3R5bGVEZWZhdWx0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJzY3JvbGwiLFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiJ0b3VjaCJ9LHQudmlld1N0eWxlQXV0b0hlaWdodD17cG9zaXRpb246InJlbGF0aXZlIix0b3A6dm9pZCAwLGxlZnQ6dm9pZCAwLHJpZ2h0OnZvaWQgMCxib3R0b206dm9pZCAwfSx0LnZpZXdTdHlsZVVuaXZlcnNhbEluaXRpYWw9e292ZXJmbG93OiJoaWRkZW4iLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9LHQudHJhY2tIb3Jpem9udGFsU3R5bGVEZWZhdWx0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDo2fSx0LnRyYWNrVmVydGljYWxTdHlsZURlZmF1bHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6Nn0sdC50aHVtYkhvcml6b250YWxTdHlsZURlZmF1bHQ9e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZGlzcGxheToiYmxvY2siLGhlaWdodDoiMTAwJSJ9LHQudGh1bWJWZXJ0aWNhbFN0eWxlRGVmYXVsdD17cG9zaXRpb246InJlbGF0aXZlIixkaXNwbGF5OiJibG9jayIsd2lkdGg6IjEwMCUifSx0LmRpc2FibGVTZWxlY3RTdHlsZT17dXNlclNlbGVjdDoibm9uZSJ9LHQuZGlzYWJsZVNlbGVjdFN0eWxlUmVzZXQ9e3VzZXJTZWxlY3Q6IiJ9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNjcm9sbGJhcnM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWN1c3RvbS1zY3JvbGxiYXJzL2xpYi9TY3JvbGxiYXJzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpO3QuZGVmYXVsdD1vLmRlZmF1bHQsdC5TY3JvbGxiYXJzPW8uZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWN1c3RvbS1zY3JvbGxiYXJzL2xpYi91dGlscy9nZXRJbm5lckhlaWdodC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuY2xpZW50SGVpZ2h0LG49Z2V0Q29tcHV0ZWRTdHlsZShlKSxyPW4ucGFkZGluZ1RvcCxvPW4ucGFkZGluZ0JvdHRvbTtyZXR1cm4gdC1wYXJzZUZsb2F0KHIpLXBhcnNlRmxvYXQobyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL2dldElubmVyV2lkdGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmNsaWVudFdpZHRoLG49Z2V0Q29tcHV0ZWRTdHlsZShlKSxyPW4ucGFkZGluZ0xlZnQsbz1uLnBhZGRpbmdSaWdodDtyZXR1cm4gdC1wYXJzZUZsb2F0KHIpLXBhcnNlRmxvYXQobyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtY3VzdG9tLXNjcm9sbGJhcnMvbGliL3V0aWxzL2dldFNjcm9sbGJhcldpZHRoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZighMSE9PWkpcmV0dXJuIGk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7KDAscy5kZWZhdWx0KShlLHt3aWR0aDoxMDAsaGVpZ2h0OjEwMCxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OSxvdmVyZmxvdzoic2Nyb2xsIixNc092ZXJmbG93U3R5bGU6InNjcm9sbGJhciJ9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLGk9ZS5vZmZzZXRXaWR0aC1lLmNsaWVudFdpZHRoLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSl9ZWxzZSBpPTA7cmV0dXJuIGl8fDB9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1jc3MvaW5kZXguanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT0hMX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWN1c3RvbS1zY3JvbGxiYXJzL2xpYi91dGlscy9pc1N0cmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvdXRpbHMvcmV0dXJuRmFsc2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiExfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRhdGVwaWNrZXIvZGlzdC9yZWFjdC1kYXRlcGlja2VyLmNzcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kYXRlcGlja2VyL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7Zm9yKHZhciBvPVtdLHM9MDtzPDIqdCsxO3MrKyl7dmFyIGk9ZSt0LXMsYT0hMDtuJiYoYT1uLnllYXIoKTw9aSksciYmYSYmKGE9ci55ZWFyKCk+PWkpLGEmJm8ucHVzaChpKX1yZXR1cm4gb31mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gZS5zZXQodCxuKX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gZS5hZGQodCxuKX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gZS5zdWJ0cmFjdCh0LG4pfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZS5nZXQodCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlLnN0YXJ0T2YodCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gVGUoKShlKX1mdW5jdGlvbiBjKGUpe3JldHVybiBUZSgpKCkudXRjKCkudXRjT2Zmc2V0KGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIG51bGw9PWU/dSgpOmMoZSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5jbG9uZSgpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj10LmRhdGVGb3JtYXQscj10LmxvY2FsZSxvPVRlKCkoZSxuLHJ8fFRlLmEubG9jYWxlKCksITApO3JldHVybiBvLmlzVmFsaWQoKT9vOm51bGx9ZnVuY3Rpb24gZihlKXtyZXR1cm4gVGUuYS5pc01vbWVudChlKX1mdW5jdGlvbiBtKGUpe3JldHVybiBUZS5hLmlzRGF0ZShlKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUuZm9ybWF0KHQpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbj10LmRhdGVGb3JtYXQscj10LmxvY2FsZTtyZXR1cm4gZSYmZS5jbG9uZSgpLmxvY2FsZShyfHxUZS5hLmxvY2FsZSgpKS5mb3JtYXQoQXJyYXkuaXNBcnJheShuKT9uWzBdOm4pfHwiIn1mdW5jdGlvbiBiKGUsdCl7dmFyIG49dC5ob3VyLHI9dC5taW51dGUsbz10LnNlY29uZDtyZXR1cm4gZS5zZXQoe2hvdXI6bixtaW51dGU6cixzZWNvbmQ6b30pLGV9ZnVuY3Rpb24gRShlLHQpe3JldHVybiBvKGUsIm1vbnRoIix0KX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIG8oZSwieWVhciIsdCl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gYShlLCJzZWNvbmQiKX1mdW5jdGlvbiBUKGUpe3JldHVybiBhKGUsIm1pbnV0ZSIpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGEoZSwiaG91ciIpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGEoZSwiZGF5Iil9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gYShlLCJ3ZWVrIil9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gYShlLCJtb250aCIpfWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGEoZSwieWVhciIpfWZ1bmN0aW9uIGooZSl7cmV0dXJuIGEoZSwiZGF0ZSIpfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIExlW2UuaXNvV2Vla2RheSgpXX1mdW5jdGlvbiBMKGUpe3JldHVybiBsKGUsImRheSIpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIGwoZSwid2VlayIpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGwoZSwibW9udGgiKX1mdW5jdGlvbiBNKGUpe3JldHVybiBsKGUsImRhdGUiKX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIHMoZSx0LCJtaW51dGVzIil9ZnVuY3Rpb24gSShlLHQpe3JldHVybiBzKGUsdCwiaG91cnMiKX1mdW5jdGlvbiBQKGUsdCl7cmV0dXJuIHMoZSx0LCJkYXlzIil9ZnVuY3Rpb24gTihlLHQpe3JldHVybiBzKGUsdCwid2Vla3MiKX1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIHMoZSx0LCJtb250aHMiKX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIHMoZSx0LCJ5ZWFycyIpfWZ1bmN0aW9uIEIoZSx0KXtyZXR1cm4gaShlLHQsImRheXMiKX1mdW5jdGlvbiBVKGUsdCl7cmV0dXJuIGkoZSx0LCJ3ZWVrcyIpfWZ1bmN0aW9uIEcoZSx0KXtyZXR1cm4gaShlLHQsIm1vbnRocyIpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gaShlLHQsInllYXJzIil9ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlLmlzQmVmb3JlKHQpfWZ1bmN0aW9uIFcoZSx0KXtyZXR1cm4gZS5pc0FmdGVyKHQpfWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gZSYmdD9lLmlzU2FtZSh0LCJ5ZWFyIik6IWUmJiF0fWZ1bmN0aW9uIHEoZSx0KXtyZXR1cm4gZSYmdD9lLmlzU2FtZSh0LCJtb250aCIpOiFlJiYhdH1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIGUmJnQ/ZS5pc1NhbWUodCwiZGF5Iik6IWUmJiF0fWZ1bmN0aW9uIFgoZSx0LG4pe3ZhciByPXQuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS5zdWJ0cmFjdCgxLCJzZWNvbmRzIiksbz1uLmNsb25lKCkuc3RhcnRPZigiZGF5IikuYWRkKDEsInNlY29uZHMiKTtyZXR1cm4gZS5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLmlzQmV0d2VlbihyLG8pfWZ1bmN0aW9uICQoZSx0KXtyZXR1cm4gZS5jbG9uZSgpLmxvY2FsZSh0fHxUZS5hLmxvY2FsZSgpKX1mdW5jdGlvbiBRKGUpe3JldHVybiBlLmxvY2FsZURhdGEoKX1mdW5jdGlvbiBKKGUpe3JldHVybiBUZS5hLmxvY2FsZURhdGEoZSl9ZnVuY3Rpb24gWihlLHQpe3JldHVybiBlLndlZWtkYXlzTWluKHQpfWZ1bmN0aW9uIGVlKGUsdCl7cmV0dXJuIGUud2Vla2RheXNTaG9ydCh0KX1mdW5jdGlvbiB0ZShlLHQsbil7cmV0dXJuIGUubW9udGhzKHQsbil9ZnVuY3Rpb24gbmUoZSx0KXtyZXR1cm4gZS5tb250aHNTaG9ydCh0KX1mdW5jdGlvbiByZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj10Lm1pbkRhdGUscj10Lm1heERhdGUsbz10LmV4Y2x1ZGVEYXRlcyxzPXQuaW5jbHVkZURhdGVzLGk9dC5maWx0ZXJEYXRlO3JldHVybiBuJiZlLmlzQmVmb3JlKG4sImRheSIpfHxyJiZlLmlzQWZ0ZXIociwiZGF5Iil8fG8mJm8uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gSyhlLHQpfSl8fHMmJiFzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIEsoZSx0KX0pfHxpJiYhaShlLmNsb25lKCkpfHwhMX1mdW5jdGlvbiBvZShlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxyPTA7cjxuO3IrKylpZih0W3JdLmdldCgiaG91cnMiKT09PWUuZ2V0KCJob3VycyIpJiZ0W3JdLmdldCgibWludXRlcyIpPT09ZS5nZXQoIm1pbnV0ZXMiKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzZShlLHQpe3ZhciBuPXQubWluVGltZSxyPXQubWF4VGltZTtpZighbnx8IXIpdGhyb3cgbmV3IEVycm9yKCJCb3RoIG1pblRpbWUgYW5kIG1heFRpbWUgcHJvcHMgcmVxdWlyZWQiKTt2YXIgbz1UZSgpKCkuaG91cnMoMCkubWludXRlcygwKS5zZWNvbmRzKDApLHM9by5jbG9uZSgpLmhvdXJzKGUuZ2V0KCJob3VycyIpKS5taW51dGVzKGUuZ2V0KCJtaW51dGVzIikpLGk9by5jbG9uZSgpLmhvdXJzKG4uZ2V0KCJob3VycyIpKS5taW51dGVzKG4uZ2V0KCJtaW51dGVzIikpLGE9by5jbG9uZSgpLmhvdXJzKHIuZ2V0KCJob3VycyIpKS5taW51dGVzKHIuZ2V0KCJtaW51dGVzIikpO3JldHVybiEocy5pc1NhbWVPckFmdGVyKGkpJiZzLmlzU2FtZU9yQmVmb3JlKGEpKX1mdW5jdGlvbiBpZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPW4ubWluRGF0ZSxvPW4uaW5jbHVkZURhdGVzLHM9ZS5jbG9uZSgpLnN1YnRyYWN0KDEsdCk7cmV0dXJuIHImJnMuaXNCZWZvcmUocix0KXx8byYmby5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gcy5pc0JlZm9yZShlLHQpfSl8fCExfWZ1bmN0aW9uIGFlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9bi5tYXhEYXRlLG89bi5pbmNsdWRlRGF0ZXMscz1lLmNsb25lKCkuYWRkKDEsdCk7cmV0dXJuIHImJnMuaXNBZnRlcihyLHQpfHxvJiZvLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBzLmlzQWZ0ZXIoZSx0KX0pfHwhMX1mdW5jdGlvbiBsZShlKXt2YXIgdD1lLm1pbkRhdGUsbj1lLmluY2x1ZGVEYXRlcztyZXR1cm4gbiYmdD9UZS5hLm1pbihuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5pc1NhbWVPckJlZm9yZShlLCJkYXkiKX0pKTpuP1RlLmEubWluKG4pOnR9ZnVuY3Rpb24gdWUoZSl7dmFyIHQ9ZS5tYXhEYXRlLG49ZS5pbmNsdWRlRGF0ZXM7cmV0dXJuIG4mJnQ/VGUuYS5tYXgobi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNTYW1lT3JBZnRlcihlLCJkYXkiKX0pKTpuP1RlLmEubWF4KG4pOnR9ZnVuY3Rpb24gY2UoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJyZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkIixuPW5ldyBNYXAscj0wLG89ZS5sZW5ndGg7cjxvO3IrKyl7dmFyIHM9ZVtyXTtpZihmKHMpKXt2YXIgaT1zLmZvcm1hdCgiTU0uREQuWVlZWSIpLGE9bi5nZXQoaSl8fFtdO2EuaW5jbHVkZXModCl8fChhLnB1c2godCksbi5zZXQoaSxhKSl9ZWxzZSBpZigib2JqZWN0Ij09PSh2b2lkIDA9PT1zPyJ1bmRlZmluZWQiOkNlKHMpKSl7dmFyIGw9T2JqZWN0LmtleXMocyksdT1sWzBdLGM9c1tsWzBdXTtpZigic3RyaW5nIj09dHlwZW9mIHUmJmMuY29uc3RydWN0b3I9PT1BcnJheSlmb3IodmFyIGQ9MCxfPWMubGVuZ3RoO2Q8XztkKyspe3ZhciBwPWNbZF0uZm9ybWF0KCJNTS5ERC5ZWVlZIiksbT1uLmdldChwKXx8W107bS5pbmNsdWRlcyh1KXx8KG0ucHVzaCh1KSxuLnNldChwLG0pKX19fXJldHVybiBufWZ1bmN0aW9uIGRlKGUsdCxuLHIsbyl7Zm9yKHZhciBzPW8ubGVuZ3RoLGk9W10sYT0wO2E8czthKyspe3ZhciBsPWsoSShfKGUpLEEob1thXSkpLFQob1thXSkpLHU9ayhfKGUpLChuKzEpKnIpO2wuaXNCZXR3ZWVuKHQsdSkmJmkucHVzaChvW2FdKX1yZXR1cm4gaX1mdW5jdGlvbiBfZShlLHQpe2Zvcih2YXIgbj1bXSxyPXcoXyhlKSksbz13KF8odCkpOyFXKHIsbyk7KW4ucHVzaChfKHIpKSxIKHIsMSk7cmV0dXJuIG59ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gZSYmdD9TKGUpIT09Uyh0KXx8UihlKSE9PVIodCk6ZSE9PXR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBmZT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLG1lPW4ubihmZSksaGU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGdlPW4ubihoZSksYmU9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLEVlPW4ubihiZSkseWU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3Qtb25jbGlja291dHNpZGUvZGlzdC9yZWFjdC1vbmNsaWNrb3V0c2lkZS5lcy5qcyIpLHZlPW4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSxUZT1uLm4odmUpLEFlPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcHBlci9saWIvcmVhY3QtcG9wcGVyLmpzIiksQ2U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE9lPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9LFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLFJlPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0samU9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH0seGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtPZSh0aGlzLHQpO3ZhciBvPWplKHRoaXMsZS5jYWxsKHRoaXMsbikpO28ucmVuZGVyT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlPW8ucHJvcHMueWVhcix0PW8uc3RhdGUueWVhcnNMaXN0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZT09PXQ/InJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uIC0tc2VsZWN0ZWRfeWVhciI6InJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uIixrZXk6dCxyZWY6dCxvbkNsaWNrOm8ub25DaGFuZ2UuYmluZChvLHQpfSxlPT09dD9tZS5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uLS1zZWxlY3RlZCJ9LCLinJMiKToiIix0KX0pLG49by5wcm9wcy5taW5EYXRlP28ucHJvcHMubWluRGF0ZS55ZWFyKCk6bnVsbCxyPW8ucHJvcHMubWF4RGF0ZT9vLnByb3BzLm1heERhdGUueWVhcigpOm51bGw7cmV0dXJuIHImJm8uc3RhdGUueWVhcnNMaXN0LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yfSl8fHQudW5zaGlmdChtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24iLHJlZjoidXBjb21pbmciLGtleToidXBjb21pbmciLG9uQ2xpY2s6by5pbmNyZW1lbnRZZWFyc30sbWUuYS5jcmVhdGVFbGVtZW50KCJhIix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nIn0pKSksbiYmby5zdGF0ZS55ZWFyc0xpc3QuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZT09PW59KXx8dC5wdXNoKG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbiIscmVmOiJwcmV2aW91cyIsa2V5OiJwcmV2aW91cyIsb25DbGljazpvLmRlY3JlbWVudFllYXJzfSxtZS5hLmNyZWF0ZUVsZW1lbnQoImEiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMgcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXMifSkpKSx0fSxvLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe28ucHJvcHMub25DaGFuZ2UoZSl9LG8uaGFuZGxlQ2xpY2tPdXRzaWRlPWZ1bmN0aW9uKCl7by5wcm9wcy5vbkNhbmNlbCgpfSxvLnNoaWZ0WWVhcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9by5zdGF0ZS55ZWFyc0xpc3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0K2V9KTtvLnNldFN0YXRlKHt5ZWFyc0xpc3Q6dH0pfSxvLmluY3JlbWVudFllYXJzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2hpZnRZZWFycygxKX0sby5kZWNyZW1lbnRZZWFycz1mdW5jdGlvbigpe3JldHVybiBvLnNoaWZ0WWVhcnMoLTEpfTt2YXIgcz1uLnllYXJEcm9wZG93bkl0ZW1OdW1iZXIsaT1uLnNjcm9sbGFibGVZZWFyRHJvcGRvd24sYT1zfHwoaT8xMDo1KTtyZXR1cm4gby5zdGF0ZT17eWVhcnNMaXN0OnIoby5wcm9wcy55ZWFyLGEsby5wcm9wcy5taW5EYXRlLG8ucHJvcHMubWF4RGF0ZSl9LG99cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9RWUoKSh7InJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24iOiEwLCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlIjp0aGlzLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd259KTtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZX0sdGhpcy5yZW5kZXJPcHRpb25zKCkpfSx0fShtZS5hLkNvbXBvbmVudCk7eGUucHJvcFR5cGVzPXttaW5EYXRlOmdlLmEub2JqZWN0LG1heERhdGU6Z2UuYS5vYmplY3Qsb25DYW5jZWw6Z2UuYS5mdW5jLmlzUmVxdWlyZWQsb25DaGFuZ2U6Z2UuYS5mdW5jLmlzUmVxdWlyZWQsc2Nyb2xsYWJsZVllYXJEcm9wZG93bjpnZS5hLmJvb2wseWVhcjpnZS5hLm51bWJlci5pc1JlcXVpcmVkLHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6Z2UuYS5udW1iZXJ9O3ZhciBMZT17MToibW9uIiwyOiJ0dWUiLDM6IndlZCIsNDoidGh1Iiw1OiJmcmkiLDY6InNhdCIsNzoic3VuIn0sRGU9T2JqZWN0KHllLmEpKHhlKSx3ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO09lKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPWplKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2Ryb3Bkb3duVmlzaWJsZTohMX0sci5yZW5kZXJTZWxlY3RPcHRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXIucHJvcHMubWluRGF0ZT9SKHIucHJvcHMubWluRGF0ZSk6MTkwMCx0PXIucHJvcHMubWF4RGF0ZT9SKHIucHJvcHMubWF4RGF0ZSk6MjEwMCxuPVtdLG89ZTtvPD10O28rKyluLnB1c2gobWUuYS5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6byx2YWx1ZTpvfSxvKSk7cmV0dXJuIG59LHIub25TZWxlY3RDaGFuZ2U9ZnVuY3Rpb24oZSl7ci5vbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9LHIucmVuZGVyU2VsZWN0TW9kZT1mdW5jdGlvbigpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIse3ZhbHVlOnIucHJvcHMueWVhcixjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3llYXItc2VsZWN0IixvbkNoYW5nZTpyLm9uU2VsZWN0Q2hhbmdlfSxyLnJlbmRlclNlbGVjdE9wdGlvbnMoKSl9LHIucmVuZGVyUmVhZFZpZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OiJyZWFkIixzdHlsZTp7dmlzaWJpbGl0eTplPyJ2aXNpYmxlIjoiaGlkZGVuIn0sY2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldyIsb25DbGljazpmdW5jdGlvbihlKXtyZXR1cm4gci50b2dnbGVEcm9wZG93bihlKX19LG1lLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3cifSksbWUuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tc2VsZWN0ZWQteWVhciJ9LHIucHJvcHMueWVhcikpfSxyLnJlbmRlckRyb3Bkb3duPWZ1bmN0aW9uKCl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudChEZSx7a2V5OiJkcm9wZG93biIscmVmOiJvcHRpb25zIix5ZWFyOnIucHJvcHMueWVhcixvbkNoYW5nZTpyLm9uQ2hhbmdlLG9uQ2FuY2VsOnIudG9nZ2xlRHJvcGRvd24sbWluRGF0ZTpyLnByb3BzLm1pbkRhdGUsbWF4RGF0ZTpyLnByb3BzLm1heERhdGUsc2Nyb2xsYWJsZVllYXJEcm9wZG93bjpyLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24seWVhckRyb3Bkb3duSXRlbU51bWJlcjpyLnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXJ9KX0sci5yZW5kZXJTY3JvbGxNb2RlPWZ1bmN0aW9uKCl7dmFyIGU9ci5zdGF0ZS5kcm9wZG93blZpc2libGUsdD1bci5yZW5kZXJSZWFkVmlldyghZSldO3JldHVybiBlJiZ0LnVuc2hpZnQoci5yZW5kZXJEcm9wZG93bigpKSx0fSxyLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3IudG9nZ2xlRHJvcGRvd24oKSxlIT09ci5wcm9wcy55ZWFyJiZyLnByb3BzLm9uQ2hhbmdlKGUpfSxyLnRvZ2dsZURyb3Bkb3duPWZ1bmN0aW9uKGUpe3Iuc2V0U3RhdGUoe2Ryb3Bkb3duVmlzaWJsZTohci5zdGF0ZS5kcm9wZG93blZpc2libGV9LGZ1bmN0aW9uKCl7ci5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UmJnIuaGFuZGxlWWVhckNoYW5nZShyLnByb3BzLmRhdGUsZSl9KX0sci5oYW5kbGVZZWFyQ2hhbmdlPWZ1bmN0aW9uKGUsdCl7ci5vblNlbGVjdChlLHQpLHIuc2V0T3BlbigpfSxyLm9uU2VsZWN0PWZ1bmN0aW9uKGUsdCl7ci5wcm9wcy5vblNlbGVjdCYmci5wcm9wcy5vblNlbGVjdChlLHQpfSxyLnNldE9wZW49ZnVuY3Rpb24oKXtyLnByb3BzLnNldE9wZW4mJnIucHJvcHMuc2V0T3BlbighMCl9LG89bixqZShyLG8pfXJldHVybiBSZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXZvaWQgMDtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2Uic2Nyb2xsIjplPXRoaXMucmVuZGVyU2Nyb2xsTW9kZSgpO2JyZWFrO2Nhc2Uic2VsZWN0IjplPXRoaXMucmVuZGVyU2VsZWN0TW9kZSgpfXJldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXIgcmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLSIrdGhpcy5wcm9wcy5kcm9wZG93bk1vZGV9LGUpfSx0fShtZS5hLkNvbXBvbmVudCk7d2UucHJvcFR5cGVzPXthZGp1c3REYXRlT25DaGFuZ2U6Z2UuYS5ib29sLGRyb3Bkb3duTW9kZTpnZS5hLm9uZU9mKFsic2Nyb2xsIiwic2VsZWN0Il0pLmlzUmVxdWlyZWQsbWF4RGF0ZTpnZS5hLm9iamVjdCxtaW5EYXRlOmdlLmEub2JqZWN0LG9uQ2hhbmdlOmdlLmEuZnVuYy5pc1JlcXVpcmVkLHNjcm9sbGFibGVZZWFyRHJvcGRvd246Z2UuYS5ib29sLHllYXI6Z2UuYS5udW1iZXIuaXNSZXF1aXJlZCx5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOmdlLmEubnVtYmVyLGRhdGU6Z2UuYS5vYmplY3Qsb25TZWxlY3Q6Z2UuYS5mdW5jLHNldE9wZW46Z2UuYS5mdW5jfTt2YXIgTWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHIsbztPZSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1qZSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnJlbmRlck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm9wcy5tb250aE5hbWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpyLnByb3BzLm1vbnRoPT09dD8icmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uIC0tc2VsZWN0ZWRfbW9udGgiOiJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24iLGtleTplLHJlZjplLG9uQ2xpY2s6ci5vbkNoYW5nZS5iaW5kKHIsdCl9LHIucHJvcHMubW9udGg9PT10P21lLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLS1zZWxlY3RlZCJ9LCLinJMiKToiIixlKX0pfSxyLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLm9uQ2hhbmdlKGUpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3JldHVybiByLnByb3BzLm9uQ2FuY2VsKCl9LG89bixqZShyLG8pfXJldHVybiBSZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24ifSx0aGlzLnJlbmRlck9wdGlvbnMoKSl9LHR9KG1lLmEuQ29tcG9uZW50KTtNZS5wcm9wVHlwZXM9e29uQ2FuY2VsOmdlLmEuZnVuYy5pc1JlcXVpcmVkLG9uQ2hhbmdlOmdlLmEuZnVuYy5pc1JlcXVpcmVkLG1vbnRoOmdlLmEubnVtYmVyLmlzUmVxdWlyZWQsbW9udGhOYW1lczpnZS5hLmFycmF5T2YoZ2UuYS5zdHJpbmcuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZH07dmFyIGtlPU9iamVjdCh5ZS5hKShNZSksSWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHIsbztPZSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1qZSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtkcm9wZG93blZpc2libGU6ITF9LHIucmVuZGVyU2VsZWN0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6dCx2YWx1ZTp0fSxlKX0pfSxyLnJlbmRlclNlbGVjdE1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7dmFsdWU6ci5wcm9wcy5tb250aCxjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXNlbGVjdCIsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHIub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfX0sci5yZW5kZXJTZWxlY3RPcHRpb25zKGUpKX0sci5yZW5kZXJSZWFkVmlldz1mdW5jdGlvbihlLHQpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleToicmVhZCIsc3R5bGU6e3Zpc2liaWxpdHk6ZT8idmlzaWJsZSI6ImhpZGRlbiJ9LGNsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3IixvbkNsaWNrOnIudG9nZ2xlRHJvcGRvd259LG1lLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93In0pLG1lLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1zZWxlY3RlZC1tb250aCJ9LHRbci5wcm9wcy5tb250aF0pKX0sci5yZW5kZXJEcm9wZG93bj1mdW5jdGlvbihlKXtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KGtlLHtrZXk6ImRyb3Bkb3duIixyZWY6Im9wdGlvbnMiLG1vbnRoOnIucHJvcHMubW9udGgsbW9udGhOYW1lczplLG9uQ2hhbmdlOnIub25DaGFuZ2Usb25DYW5jZWw6ci50b2dnbGVEcm9wZG93bn0pfSxyLnJlbmRlclNjcm9sbE1vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5zdGF0ZS5kcm9wZG93blZpc2libGUsbj1bci5yZW5kZXJSZWFkVmlldyghdCxlKV07cmV0dXJuIHQmJm4udW5zaGlmdChyLnJlbmRlckRyb3Bkb3duKGUpKSxufSxyLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3IudG9nZ2xlRHJvcGRvd24oKSxlIT09ci5wcm9wcy5tb250aCYmci5wcm9wcy5vbkNoYW5nZShlKX0sci50b2dnbGVEcm9wZG93bj1mdW5jdGlvbigpe3JldHVybiByLnNldFN0YXRlKHtkcm9wZG93blZpc2libGU6IXIuc3RhdGUuZHJvcGRvd25WaXNpYmxlfSl9LG89bixqZShyLG8pfXJldHVybiBSZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1KKHRoaXMucHJvcHMubG9jYWxlKSxuPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExXS5tYXAodGhpcy5wcm9wcy51c2VTaG9ydE1vbnRoSW5Ecm9wZG93bj9mdW5jdGlvbihlKXtyZXR1cm4gbmUodCx1KHtNOmV9KSl9OmZ1bmN0aW9uKG4pe3JldHVybiB0ZSh0LHUoe006bn0pLGUucHJvcHMuZGF0ZUZvcm1hdCl9KSxyPXZvaWQgMDtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2Uic2Nyb2xsIjpyPXRoaXMucmVuZGVyU2Nyb2xsTW9kZShuKTticmVhaztjYXNlInNlbGVjdCI6cj10aGlzLnJlbmRlclNlbGVjdE1vZGUobil9cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi1jb250YWluZXIgcmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS0iK3RoaXMucHJvcHMuZHJvcGRvd25Nb2RlfSxyKX0sdH0obWUuYS5Db21wb25lbnQpO0llLnByb3BUeXBlcz17ZHJvcGRvd25Nb2RlOmdlLmEub25lT2YoWyJzY3JvbGwiLCJzZWxlY3QiXSkuaXNSZXF1aXJlZCxsb2NhbGU6Z2UuYS5zdHJpbmcsZGF0ZUZvcm1hdDpnZS5hLnN0cmluZy5pc1JlcXVpcmVkLG1vbnRoOmdlLmEubnVtYmVyLmlzUmVxdWlyZWQsb25DaGFuZ2U6Z2UuYS5mdW5jLmlzUmVxdWlyZWQsdXNlU2hvcnRNb250aEluRHJvcGRvd246Z2UuYS5ib29sfTt2YXIgUGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtPZSh0aGlzLHQpO3ZhciByPWplKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLnJlbmRlck9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zdGF0ZS5tb250aFllYXJzTGlzdC5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZU9mKCksbj1ZKHIucHJvcHMuZGF0ZSxlKSYmcShyLnByb3BzLmRhdGUsZSk7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm4/InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uIC0tc2VsZWN0ZWRfbW9udGgteWVhciI6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uIixrZXk6dCxyZWY6dCxvbkNsaWNrOnIub25DaGFuZ2UuYmluZChyLHQpfSxuP21lLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkIn0sIuKckyIpOiIiLGgoZSxyLnByb3BzLmRhdGVGb3JtYXQpKX0pfSxyLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLm9uQ2hhbmdlKGUpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3IucHJvcHMub25DYW5jZWwoKX0sci5zdGF0ZT17bW9udGhZZWFyc0xpc3Q6X2Uoci5wcm9wcy5taW5EYXRlLHIucHJvcHMubWF4RGF0ZSl9LHJ9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9RWUoKSh7InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24iOiEwLCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlIjp0aGlzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pO3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTplfSx0aGlzLnJlbmRlck9wdGlvbnMoKSl9LHR9KG1lLmEuQ29tcG9uZW50KTtQZS5wcm9wVHlwZXM9e21pbkRhdGU6Z2UuYS5vYmplY3QuaXNSZXF1aXJlZCxtYXhEYXRlOmdlLmEub2JqZWN0LmlzUmVxdWlyZWQsb25DYW5jZWw6Z2UuYS5mdW5jLmlzUmVxdWlyZWQsb25DaGFuZ2U6Z2UuYS5mdW5jLmlzUmVxdWlyZWQsc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOmdlLmEuYm9vbCxkYXRlOmdlLmEub2JqZWN0LmlzUmVxdWlyZWQsZGF0ZUZvcm1hdDpnZS5hLnN0cmluZy5pc1JlcXVpcmVkfTt2YXIgTmU9T2JqZWN0KHllLmEpKFBlKSxIZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO09lKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPWplKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2Ryb3Bkb3duVmlzaWJsZTohMX0sci5yZW5kZXJTZWxlY3RPcHRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXcoJChyLnByb3BzLm1pbkRhdGUsci5wcm9wcy5sb2NhbGUpKSx0PXcoJChyLnByb3BzLm1heERhdGUsci5wcm9wcy5sb2NhbGUpKSxuPVtdOyFXKGUsdCk7KXt2YXIgbz1lLnZhbHVlT2YoKTtuLnB1c2gobWUuYS5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6byx2YWx1ZTpvfSxoKGUsci5wcm9wcy5kYXRlRm9ybWF0KSkpLEgoZSwxKX1yZXR1cm4gbn0sci5vblNlbGVjdENoYW5nZT1mdW5jdGlvbihlKXtyLm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0sci5yZW5kZXJTZWxlY3RNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7dmFsdWU6dyhyLnByb3BzLmRhdGUpLnZhbHVlT2YoKSxjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItc2VsZWN0IixvbkNoYW5nZTpyLm9uU2VsZWN0Q2hhbmdlfSxyLnJlbmRlclNlbGVjdE9wdGlvbnMoKSl9LHIucmVuZGVyUmVhZFZpZXc9ZnVuY3Rpb24oZSl7dmFyIHQ9aCgkKHUoci5wcm9wcy5kYXRlKSxyLnByb3BzLmxvY2FsZSksci5wcm9wcy5kYXRlRm9ybWF0KTtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6InJlYWQiLHN0eWxlOnt2aXNpYmlsaXR5OmU/InZpc2libGUiOiJoaWRkZW4ifSxjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3IixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiByLnRvZ2dsZURyb3Bkb3duKGUpfX0sbWUuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyJ9KSxtZS5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1zZWxlY3RlZC1tb250aC15ZWFyIn0sdCkpfSxyLnJlbmRlckRyb3Bkb3duPWZ1bmN0aW9uKCl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudChOZSx7a2V5OiJkcm9wZG93biIscmVmOiJvcHRpb25zIixkYXRlOnIucHJvcHMuZGF0ZSxkYXRlRm9ybWF0OnIucHJvcHMuZGF0ZUZvcm1hdCxvbkNoYW5nZTpyLm9uQ2hhbmdlLG9uQ2FuY2VsOnIudG9nZ2xlRHJvcGRvd24sbWluRGF0ZTokKHIucHJvcHMubWluRGF0ZSxyLnByb3BzLmxvY2FsZSksbWF4RGF0ZTokKHIucHJvcHMubWF4RGF0ZSxyLnByb3BzLmxvY2FsZSksc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOnIucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3dufSl9LHIucmVuZGVyU2Nyb2xsTW9kZT1mdW5jdGlvbigpe3ZhciBlPXIuc3RhdGUuZHJvcGRvd25WaXNpYmxlLHQ9W3IucmVuZGVyUmVhZFZpZXcoIWUpXTtyZXR1cm4gZSYmdC51bnNoaWZ0KHIucmVuZGVyRHJvcGRvd24oKSksdH0sci5vbkNoYW5nZT1mdW5jdGlvbihlKXtyLnRvZ2dsZURyb3Bkb3duKCk7dmFyIHQ9dShwYXJzZUludChlKSk7WShyLnByb3BzLmRhdGUsdCkmJnEoci5wcm9wcy5kYXRlLHQpfHxyLnByb3BzLm9uQ2hhbmdlKHQpfSxyLnRvZ2dsZURyb3Bkb3duPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2V0U3RhdGUoe2Ryb3Bkb3duVmlzaWJsZTohci5zdGF0ZS5kcm9wZG93blZpc2libGV9KX0sbz1uLGplKHIsbyl9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dm9pZCAwO3N3aXRjaCh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSl7Y2FzZSJzY3JvbGwiOmU9dGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmU9dGhpcy5yZW5kZXJTZWxlY3RNb2RlKCl9cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lciByZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tIit0aGlzLnByb3BzLmRyb3Bkb3duTW9kZX0sZSl9LHR9KG1lLmEuQ29tcG9uZW50KTtIZS5wcm9wVHlwZXM9e2Ryb3Bkb3duTW9kZTpnZS5hLm9uZU9mKFsic2Nyb2xsIiwic2VsZWN0Il0pLmlzUmVxdWlyZWQsZGF0ZUZvcm1hdDpnZS5hLnN0cmluZy5pc1JlcXVpcmVkLGxvY2FsZTpnZS5hLnN0cmluZyxtYXhEYXRlOmdlLmEub2JqZWN0LmlzUmVxdWlyZWQsbWluRGF0ZTpnZS5hLm9iamVjdC5pc1JlcXVpcmVkLGRhdGU6Z2UuYS5vYmplY3QuaXNSZXF1aXJlZCxvbkNoYW5nZTpnZS5hLmZ1bmMuaXNSZXF1aXJlZCxzY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd246Z2UuYS5ib29sfTt2YXIgRmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHIsbztPZSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1qZSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpeyFyLmlzRGlzYWJsZWQoKSYmci5wcm9wcy5vbkNsaWNrJiZyLnByb3BzLm9uQ2xpY2soZSl9LHIuaGFuZGxlTW91c2VFbnRlcj1mdW5jdGlvbihlKXshci5pc0Rpc2FibGVkKCkmJnIucHJvcHMub25Nb3VzZUVudGVyJiZyLnByb3BzLm9uTW91c2VFbnRlcihlKX0sci5pc1NhbWVEYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIEsoci5wcm9wcy5kYXksZSl9LHIuaXNLZXlib2FyZFNlbGVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXIucHJvcHMuaW5saW5lJiYhci5pc1NhbWVEYXkoci5wcm9wcy5zZWxlY3RlZCkmJnIuaXNTYW1lRGF5KHIucHJvcHMucHJlU2VsZWN0aW9uKX0sci5pc0Rpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHJlKHIucHJvcHMuZGF5LHIucHJvcHMpfSxyLmdldEhpZ2hMaWdodGVkQ2xhc3M9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQuZGF5LG89dC5oaWdobGlnaHREYXRlcztpZighbylyZXR1cm4hMTt2YXIgcz1uLmZvcm1hdCgiTU0uREQuWVlZWSIpO3JldHVybiBvLmdldChzKX0sci5pc0luUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnN0YXJ0RGF0ZSxvPWUuZW5kRGF0ZTtyZXR1cm4hKCFufHwhbykmJlgodCxuLG8pfSxyLmlzSW5TZWxlY3RpbmdSYW5nZT1mdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLmRheSxuPWUuc2VsZWN0c1N0YXJ0LG89ZS5zZWxlY3RzRW5kLHM9ZS5zZWxlY3RpbmdEYXRlLGk9ZS5zdGFydERhdGUsYT1lLmVuZERhdGU7cmV0dXJuISghbiYmIW98fCFzfHxyLmlzRGlzYWJsZWQoKSkmJihuJiZhJiZzLmlzU2FtZU9yQmVmb3JlKGEpP1godCxzLGEpOiEhKG8mJmkmJnMuaXNTYW1lT3JBZnRlcihpKSkmJlgodCxpLHMpKX0sci5pc1NlbGVjdGluZ1JhbmdlU3RhcnQ9ZnVuY3Rpb24oKXtpZighci5pc0luU2VsZWN0aW5nUmFuZ2UoKSlyZXR1cm4hMTt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnNlbGVjdGluZ0RhdGUsbz1lLnN0YXJ0RGF0ZTtyZXR1cm4gZS5zZWxlY3RzU3RhcnQ/Syh0LG4pOksodCxvKX0sci5pc1NlbGVjdGluZ1JhbmdlRW5kPWZ1bmN0aW9uKCl7aWYoIXIuaXNJblNlbGVjdGluZ1JhbmdlKCkpcmV0dXJuITE7dmFyIGU9ci5wcm9wcyx0PWUuZGF5LG49ZS5zZWxlY3RpbmdEYXRlLG89ZS5lbmREYXRlO3JldHVybiBlLnNlbGVjdHNFbmQ/Syh0LG4pOksodCxvKX0sci5pc1JhbmdlU3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5kYXksbj1lLnN0YXJ0RGF0ZSxvPWUuZW5kRGF0ZTtyZXR1cm4hKCFufHwhbykmJksobix0KX0sci5pc1JhbmdlRW5kPWZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcyx0PWUuZGF5LG49ZS5zdGFydERhdGUsbz1lLmVuZERhdGU7cmV0dXJuISghbnx8IW8pJiZLKG8sdCl9LHIuaXNXZWVrZW5kPWZ1bmN0aW9uKCl7dmFyIGU9QyhyLnByb3BzLmRheSk7cmV0dXJuIDA9PT1lfHw2PT09ZX0sci5pc091dHNpZGVNb250aD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1yLnByb3BzLm1vbnRoJiZyLnByb3BzLm1vbnRoIT09UyhyLnByb3BzLmRheSl9LHIuZ2V0Q2xhc3NOYW1lcz1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLmRheUNsYXNzTmFtZT9yLnByb3BzLmRheUNsYXNzTmFtZShlKTp2b2lkIDA7cmV0dXJuIEVlKCkoInJlYWN0LWRhdGVwaWNrZXJfX2RheSIsdCwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS0iK3goci5wcm9wcy5kYXkpLHsicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZCI6ci5pc0Rpc2FibGVkKCksInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWQiOnIuaXNTYW1lRGF5KHIucHJvcHMuc2VsZWN0ZWQpLCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkIjpyLmlzS2V5Ym9hcmRTZWxlY3RlZCgpLCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXJhbmdlLXN0YXJ0IjpyLmlzUmFuZ2VTdGFydCgpLCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXJhbmdlLWVuZCI6ci5pc1JhbmdlRW5kKCksInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2UiOnIuaXNJblJhbmdlKCksInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlIjpyLmlzSW5TZWxlY3RpbmdSYW5nZSgpLCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGluZy1yYW5nZS1zdGFydCI6ci5pc1NlbGVjdGluZ1JhbmdlU3RhcnQoKSwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RpbmctcmFuZ2UtZW5kIjpyLmlzU2VsZWN0aW5nUmFuZ2VFbmQoKSwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS10b2RheSI6ci5pc1NhbWVEYXkoZChyLnByb3BzLnV0Y09mZnNldCkpLCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXdlZWtlbmQiOnIuaXNXZWVrZW5kKCksInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tb3V0c2lkZS1tb250aCI6ci5pc091dHNpZGVNb250aCgpfSxyLmdldEhpZ2hMaWdodGVkQ2xhc3MoInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQiKSl9LG89bixqZShyLG8pfXJldHVybiBSZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0aGlzLmdldENsYXNzTmFtZXModGhpcy5wcm9wcy5kYXkpLG9uQ2xpY2s6dGhpcy5oYW5kbGVDbGljayxvbk1vdXNlRW50ZXI6dGhpcy5oYW5kbGVNb3VzZUVudGVyLCJhcmlhLWxhYmVsIjoiZGF5LSIraih0aGlzLnByb3BzLmRheSkscm9sZToib3B0aW9uIn0saih0aGlzLnByb3BzLmRheSkpfSx0fShtZS5hLkNvbXBvbmVudCk7RmUucHJvcFR5cGVzPXtkYXk6Z2UuYS5vYmplY3QuaXNSZXF1aXJlZCxkYXlDbGFzc05hbWU6Z2UuYS5mdW5jLGVuZERhdGU6Z2UuYS5vYmplY3QsaGlnaGxpZ2h0RGF0ZXM6Z2UuYS5pbnN0YW5jZU9mKE1hcCksaW5saW5lOmdlLmEuYm9vbCxtb250aDpnZS5hLm51bWJlcixvbkNsaWNrOmdlLmEuZnVuYyxvbk1vdXNlRW50ZXI6Z2UuYS5mdW5jLHByZVNlbGVjdGlvbjpnZS5hLm9iamVjdCxzZWxlY3RlZDpnZS5hLm9iamVjdCxzZWxlY3RpbmdEYXRlOmdlLmEub2JqZWN0LHNlbGVjdHNFbmQ6Z2UuYS5ib29sLHNlbGVjdHNTdGFydDpnZS5hLmJvb2wsc3RhcnREYXRlOmdlLmEub2JqZWN0LHV0Y09mZnNldDpnZS5hLm51bWJlcn07dmFyIEJlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyLG87T2UodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9amUodGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5oYW5kbGVDbGljaz1mdW5jdGlvbihlKXtyLnByb3BzLm9uQ2xpY2smJnIucHJvcHMub25DbGljayhlKX0sbz1uLGplKHIsbyl9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9eyJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlciI6ITAsInJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1jbGlja2FibGUiOiEhdGhpcy5wcm9wcy5vbkNsaWNrfTtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RWUoKShlKSwiYXJpYS1sYWJlbCI6IndlZWstIit0aGlzLnByb3BzLndlZWtOdW1iZXIsb25DbGljazp0aGlzLmhhbmRsZUNsaWNrfSx0aGlzLnByb3BzLndlZWtOdW1iZXIpfSx0fShtZS5hLkNvbXBvbmVudCk7QmUucHJvcFR5cGVzPXt3ZWVrTnVtYmVyOmdlLmEubnVtYmVyLmlzUmVxdWlyZWQsb25DbGljazpnZS5hLmZ1bmN9O3ZhciBVZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO09lKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPWplKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuaGFuZGxlRGF5Q2xpY2s9ZnVuY3Rpb24oZSx0KXtyLnByb3BzLm9uRGF5Q2xpY2smJnIucHJvcHMub25EYXlDbGljayhlLHQpfSxyLmhhbmRsZURheU1vdXNlRW50ZXI9ZnVuY3Rpb24oZSl7ci5wcm9wcy5vbkRheU1vdXNlRW50ZXImJnIucHJvcHMub25EYXlNb3VzZUVudGVyKGUpfSxyLmhhbmRsZVdlZWtDbGljaz1mdW5jdGlvbihlLHQsbil7ImZ1bmN0aW9uIj09dHlwZW9mIHIucHJvcHMub25XZWVrU2VsZWN0JiZyLnByb3BzLm9uV2Vla1NlbGVjdChlLHQsbil9LHIuZm9ybWF0V2Vla051bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4gci5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyP3IucHJvcHMuZm9ybWF0V2Vla051bWJlcihlKTpPKGUpfSxyLnJlbmRlckRheXM9ZnVuY3Rpb24oKXt2YXIgZT1EKF8oci5wcm9wcy5kYXkpKSx0PVtdLG49ci5mb3JtYXRXZWVrTnVtYmVyKGUpO2lmKHIucHJvcHMuc2hvd1dlZWtOdW1iZXIpe3ZhciBvPXIucHJvcHMub25XZWVrU2VsZWN0P3IuaGFuZGxlV2Vla0NsaWNrLmJpbmQocixlLG4pOnZvaWQgMDt0LnB1c2gobWUuYS5jcmVhdGVFbGVtZW50KEJlLHtrZXk6IlciLHdlZWtOdW1iZXI6bixvbkNsaWNrOm99KSl9cmV0dXJuIHQuY29uY2F0KFswLDEsMiwzLDQsNSw2XS5tYXAoZnVuY3Rpb24odCl7dmFyIG49UChfKGUpLHQpO3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoRmUse2tleTp0LGRheTpuLG1vbnRoOnIucHJvcHMubW9udGgsb25DbGljazpyLmhhbmRsZURheUNsaWNrLmJpbmQocixuKSxvbk1vdXNlRW50ZXI6ci5oYW5kbGVEYXlNb3VzZUVudGVyLmJpbmQocixuKSxtaW5EYXRlOnIucHJvcHMubWluRGF0ZSxtYXhEYXRlOnIucHJvcHMubWF4RGF0ZSxleGNsdWRlRGF0ZXM6ci5wcm9wcy5leGNsdWRlRGF0ZXMsaW5jbHVkZURhdGVzOnIucHJvcHMuaW5jbHVkZURhdGVzLGlubGluZTpyLnByb3BzLmlubGluZSxoaWdobGlnaHREYXRlczpyLnByb3BzLmhpZ2hsaWdodERhdGVzLHNlbGVjdGluZ0RhdGU6ci5wcm9wcy5zZWxlY3RpbmdEYXRlLGZpbHRlckRhdGU6ci5wcm9wcy5maWx0ZXJEYXRlLHByZVNlbGVjdGlvbjpyLnByb3BzLnByZVNlbGVjdGlvbixzZWxlY3RlZDpyLnByb3BzLnNlbGVjdGVkLHNlbGVjdHNTdGFydDpyLnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOnIucHJvcHMuc2VsZWN0c0VuZCxzdGFydERhdGU6ci5wcm9wcy5zdGFydERhdGUsZW5kRGF0ZTpyLnByb3BzLmVuZERhdGUsZGF5Q2xhc3NOYW1lOnIucHJvcHMuZGF5Q2xhc3NOYW1lLHV0Y09mZnNldDpyLnByb3BzLnV0Y09mZnNldH0pfSkpfSxvPW4samUocixvKX1yZXR1cm4gUmUodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3dlZWsifSx0aGlzLnJlbmRlckRheXMoKSl9LHR9KG1lLmEuQ29tcG9uZW50KTtVZS5wcm9wVHlwZXM9e2RheTpnZS5hLm9iamVjdC5pc1JlcXVpcmVkLGRheUNsYXNzTmFtZTpnZS5hLmZ1bmMsZW5kRGF0ZTpnZS5hLm9iamVjdCxleGNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxmaWx0ZXJEYXRlOmdlLmEuZnVuYyxmb3JtYXRXZWVrTnVtYmVyOmdlLmEuZnVuYyxoaWdobGlnaHREYXRlczpnZS5hLmluc3RhbmNlT2YoTWFwKSxpbmNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxpbmxpbmU6Z2UuYS5ib29sLG1heERhdGU6Z2UuYS5vYmplY3QsbWluRGF0ZTpnZS5hLm9iamVjdCxtb250aDpnZS5hLm51bWJlcixvbkRheUNsaWNrOmdlLmEuZnVuYyxvbkRheU1vdXNlRW50ZXI6Z2UuYS5mdW5jLG9uV2Vla1NlbGVjdDpnZS5hLmZ1bmMscHJlU2VsZWN0aW9uOmdlLmEub2JqZWN0LHNlbGVjdGVkOmdlLmEub2JqZWN0LHNlbGVjdGluZ0RhdGU6Z2UuYS5vYmplY3Qsc2VsZWN0c0VuZDpnZS5hLmJvb2wsc2VsZWN0c1N0YXJ0OmdlLmEuYm9vbCxzaG93V2Vla051bWJlcjpnZS5hLmJvb2wsc3RhcnREYXRlOmdlLmEub2JqZWN0LHV0Y09mZnNldDpnZS5hLm51bWJlcn07dmFyIEdlPTYsemU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHIsbztPZSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1qZSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZURheUNsaWNrPWZ1bmN0aW9uKGUsdCl7ci5wcm9wcy5vbkRheUNsaWNrJiZyLnByb3BzLm9uRGF5Q2xpY2soZSx0KX0sci5oYW5kbGVEYXlNb3VzZUVudGVyPWZ1bmN0aW9uKGUpe3IucHJvcHMub25EYXlNb3VzZUVudGVyJiZyLnByb3BzLm9uRGF5TW91c2VFbnRlcihlKX0sci5oYW5kbGVNb3VzZUxlYXZlPWZ1bmN0aW9uKCl7ci5wcm9wcy5vbk1vdXNlTGVhdmUmJnIucHJvcHMub25Nb3VzZUxlYXZlKCl9LHIuaXNXZWVrSW5Nb250aD1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLmRheSxuPVAoXyhlKSw2KTtyZXR1cm4gcShlLHQpfHxxKG4sdCl9LHIucmVuZGVyV2Vla3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1yLnByb3BzLmZpeGVkSGVpZ2h0LG49RCh3KF8oci5wcm9wcy5kYXkpKSksbz0wLHM9ITE7Oyl7aWYoZS5wdXNoKG1lLmEuY3JlYXRlRWxlbWVudChVZSx7a2V5Om8sZGF5Om4sbW9udGg6UyhyLnByb3BzLmRheSksb25EYXlDbGljazpyLmhhbmRsZURheUNsaWNrLG9uRGF5TW91c2VFbnRlcjpyLmhhbmRsZURheU1vdXNlRW50ZXIsb25XZWVrU2VsZWN0OnIucHJvcHMub25XZWVrU2VsZWN0LGZvcm1hdFdlZWtOdW1iZXI6ci5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLG1pbkRhdGU6ci5wcm9wcy5taW5EYXRlLG1heERhdGU6ci5wcm9wcy5tYXhEYXRlLGV4Y2x1ZGVEYXRlczpyLnByb3BzLmV4Y2x1ZGVEYXRlcyxpbmNsdWRlRGF0ZXM6ci5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5saW5lOnIucHJvcHMuaW5saW5lLGhpZ2hsaWdodERhdGVzOnIucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsc2VsZWN0aW5nRGF0ZTpyLnByb3BzLnNlbGVjdGluZ0RhdGUsZmlsdGVyRGF0ZTpyLnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOnIucHJvcHMucHJlU2VsZWN0aW9uLHNlbGVjdGVkOnIucHJvcHMuc2VsZWN0ZWQsc2VsZWN0c1N0YXJ0OnIucHJvcHMuc2VsZWN0c1N0YXJ0LHNlbGVjdHNFbmQ6ci5wcm9wcy5zZWxlY3RzRW5kLHNob3dXZWVrTnVtYmVyOnIucHJvcHMuc2hvd1dlZWtOdW1iZXJzLHN0YXJ0RGF0ZTpyLnByb3BzLnN0YXJ0RGF0ZSxlbmREYXRlOnIucHJvcHMuZW5kRGF0ZSxkYXlDbGFzc05hbWU6ci5wcm9wcy5kYXlDbGFzc05hbWUsdXRjT2Zmc2V0OnIucHJvcHMudXRjT2Zmc2V0fSkpLHMpYnJlYWs7bysrLG49TihfKG4pLDEpO3ZhciBpPXQmJm8+PUdlLGE9IXQmJiFyLmlzV2Vla0luTW9udGgobik7aWYoaXx8YSl7aWYoIXIucHJvcHMucGVla05leHRNb250aClicmVhaztzPSEwfX1yZXR1cm4gZX0sci5nZXRDbGFzc05hbWVzPWZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcyx0PWUuc2VsZWN0aW5nRGF0ZSxuPWUuc2VsZWN0c1N0YXJ0LG89ZS5zZWxlY3RzRW5kO3JldHVybiBFZSgpKCJyZWFjdC1kYXRlcGlja2VyX19tb250aCIseyJyZWFjdC1kYXRlcGlja2VyX19tb250aC0tc2VsZWN0aW5nLXJhbmdlIjp0JiYobnx8byl9KX0sbz1uLGplKHIsbyl9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRoaXMuZ2V0Q2xhc3NOYW1lcygpLG9uTW91c2VMZWF2ZTp0aGlzLmhhbmRsZU1vdXNlTGVhdmUscm9sZToibGlzdGJveCJ9LHRoaXMucmVuZGVyV2Vla3MoKSl9LHR9KG1lLmEuQ29tcG9uZW50KTt6ZS5wcm9wVHlwZXM9e2RheTpnZS5hLm9iamVjdC5pc1JlcXVpcmVkLGRheUNsYXNzTmFtZTpnZS5hLmZ1bmMsZW5kRGF0ZTpnZS5hLm9iamVjdCxleGNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxmaWx0ZXJEYXRlOmdlLmEuZnVuYyxmaXhlZEhlaWdodDpnZS5hLmJvb2wsZm9ybWF0V2Vla051bWJlcjpnZS5hLmZ1bmMsaGlnaGxpZ2h0RGF0ZXM6Z2UuYS5pbnN0YW5jZU9mKE1hcCksaW5jbHVkZURhdGVzOmdlLmEuYXJyYXksaW5saW5lOmdlLmEuYm9vbCxtYXhEYXRlOmdlLmEub2JqZWN0LG1pbkRhdGU6Z2UuYS5vYmplY3Qsb25EYXlDbGljazpnZS5hLmZ1bmMsb25EYXlNb3VzZUVudGVyOmdlLmEuZnVuYyxvbk1vdXNlTGVhdmU6Z2UuYS5mdW5jLG9uV2Vla1NlbGVjdDpnZS5hLmZ1bmMscGVla05leHRNb250aDpnZS5hLmJvb2wscHJlU2VsZWN0aW9uOmdlLmEub2JqZWN0LHNlbGVjdGVkOmdlLmEub2JqZWN0LHNlbGVjdGluZ0RhdGU6Z2UuYS5vYmplY3Qsc2VsZWN0c0VuZDpnZS5hLmJvb2wsc2VsZWN0c1N0YXJ0OmdlLmEuYm9vbCxzaG93V2Vla051bWJlcnM6Z2UuYS5ib29sLHN0YXJ0RGF0ZTpnZS5hLm9iamVjdCx1dGNPZmZzZXQ6Z2UuYS5udW1iZXJ9O3ZhciBWZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO09lKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPWplKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZSl7KHIucHJvcHMubWluVGltZXx8ci5wcm9wcy5tYXhUaW1lKSYmc2UoZSxyLnByb3BzKXx8ci5wcm9wcy5leGNsdWRlVGltZXMmJm9lKGUsci5wcm9wcy5leGNsdWRlVGltZXMpfHxyLnByb3BzLmluY2x1ZGVUaW1lcyYmIW9lKGUsci5wcm9wcy5pbmNsdWRlVGltZXMpfHxyLnByb3BzLm9uQ2hhbmdlKGUpfSxyLmxpQ2xhc3Nlcz1mdW5jdGlvbihlLHQsbil7dmFyIG89WyJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbSJdO3JldHVybiB0PT09QShlKSYmbj09PVQoZSkmJm8ucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLXNlbGVjdGVkIiksKChyLnByb3BzLm1pblRpbWV8fHIucHJvcHMubWF4VGltZSkmJnNlKGUsci5wcm9wcyl8fHIucHJvcHMuZXhjbHVkZVRpbWVzJiZvZShlLHIucHJvcHMuZXhjbHVkZVRpbWVzKXx8ci5wcm9wcy5pbmNsdWRlVGltZXMmJiFvZShlLHIucHJvcHMuaW5jbHVkZVRpbWVzKSkmJm8ucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkIiksci5wcm9wcy5pbmplY3RUaW1lcyYmKDYwKkEoZSkrVChlKSklci5wcm9wcy5pbnRlcnZhbHMhPTAmJm8ucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWluamVjdGVkIiksby5qb2luKCIgIil9LHIucmVuZGVyVGltZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1yLnByb3BzLmZvcm1hdD9yLnByb3BzLmZvcm1hdDoiaGg6bW0gQSIsbj1yLnByb3BzLmludGVydmFscyxvPXIucHJvcHMuc2VsZWN0ZWQ/ci5wcm9wcy5zZWxlY3RlZDp1KCkscz1BKG8pLGk9VChvKSxhPUwodSgpKSxsPTE0NDAvbixjPXIucHJvcHMuaW5qZWN0VGltZXMmJnIucHJvcHMuaW5qZWN0VGltZXMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSxkPTA7ZDxsO2QrKyl7dmFyIHA9ayhfKGEpLGQqbik7aWYoZS5wdXNoKHApLGMpe3ZhciBmPWRlKGEscCxkLG4sYyk7ZT1lLmNvbmNhdChmKX19cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgibGkiLHtrZXk6bixvbkNsaWNrOnIuaGFuZGxlQ2xpY2suYmluZChyLGUpLGNsYXNzTmFtZTpyLmxpQ2xhc3NlcyhlLHMsaSl9LGgoZSx0KSl9KX0sbz1uLGplKHIsbyl9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT02MC90aGlzLnByb3BzLmludGVydmFscyx0PUEodGhpcy5wcm9wcy5zZWxlY3RlZD90aGlzLnByb3BzLnNlbGVjdGVkOnUoKSk7dGhpcy5saXN0LnNjcm9sbFRvcD1lKnQqMzB9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1udWxsO3JldHVybiB0aGlzLnByb3BzLm1vbnRoUmVmJiYodD10aGlzLnByb3BzLm1vbnRoUmVmLmNsaWVudEhlaWdodC0zOSksbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyICIrKHRoaXMucHJvcHMudG9kYXlCdXR0b24/InJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyLS13aXRoLXRvZGF5LWJ1dHRvbiI6IiIpfSxtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyIHJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSJ9LG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2hlYWRlciJ9LHRoaXMucHJvcHMudGltZUNhcHRpb24pKSxtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fdGltZSJ9LG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCJ9LG1lLmEuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCIscmVmOmZ1bmN0aW9uKHQpe2UubGlzdD10fSxzdHlsZTp0P3toZWlnaHQ6dH06e319LHRoaXMucmVuZGVyVGltZXMuYmluZCh0aGlzKSgpKSkpKX0sU2UodCxudWxsLFt7a2V5OiJkZWZhdWx0UHJvcHMiLGdldDpmdW5jdGlvbigpe3JldHVybntpbnRlcnZhbHM6MzAsb25UaW1lQ2hhbmdlOmZ1bmN0aW9uKCl7fSx0b2RheUJ1dHRvbjpudWxsLHRpbWVDYXB0aW9uOiJUaW1lIn19fV0pLHR9KG1lLmEuQ29tcG9uZW50KTtWZS5wcm9wVHlwZXM9e2Zvcm1hdDpnZS5hLnN0cmluZyxpbmNsdWRlVGltZXM6Z2UuYS5hcnJheSxpbnRlcnZhbHM6Z2UuYS5udW1iZXIsc2VsZWN0ZWQ6Z2UuYS5vYmplY3Qsb25DaGFuZ2U6Z2UuYS5mdW5jLHRvZGF5QnV0dG9uOmdlLmEuc3RyaW5nLG1pblRpbWU6Z2UuYS5vYmplY3QsbWF4VGltZTpnZS5hLm9iamVjdCxleGNsdWRlVGltZXM6Z2UuYS5hcnJheSxtb250aFJlZjpnZS5hLm9iamVjdCx0aW1lQ2FwdGlvbjpnZS5hLnN0cmluZyxpbmplY3RUaW1lczpnZS5hLmFycmF5fTt2YXIgV2U9WyJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXNlbGVjdCIsInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXNlbGVjdCIsInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItc2VsZWN0Il0sWWU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD0oZS5jbGFzc05hbWV8fCIiKS5zcGxpdCgvXHMrLyk7cmV0dXJuIFdlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaW5kZXhPZihlKT49MH0pfSxxZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe09lKHRoaXMsdCk7dmFyIHI9amUodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuaGFuZGxlQ2xpY2tPdXRzaWRlPWZ1bmN0aW9uKGUpe3IucHJvcHMub25DbGlja091dHNpZGUoZSl9LHIuaGFuZGxlRHJvcGRvd25Gb2N1cz1mdW5jdGlvbihlKXtZZShlLnRhcmdldCkmJnIucHJvcHMub25Ecm9wZG93bkZvY3VzKCl9LHIuZ2V0RGF0ZUluVmlldz1mdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLnByZVNlbGVjdGlvbixuPWUuc2VsZWN0ZWQsbz1lLm9wZW5Ub0RhdGUscz1lLnV0Y09mZnNldCxpPWxlKHIucHJvcHMpLGE9dWUoci5wcm9wcyksbD1kKHMpLHU9b3x8bnx8dDtyZXR1cm4gdXx8KGkmJlYobCxpKT9pOmEmJlcobCxhKT9hOmwpfSxyLmxvY2FsaXplRGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gJChlLHIucHJvcHMubG9jYWxlKX0sci5pbmNyZWFzZU1vbnRoPWZ1bmN0aW9uKCl7ci5zZXRTdGF0ZSh7ZGF0ZTpIKF8oci5zdGF0ZS5kYXRlKSwxKX0sZnVuY3Rpb24oKXtyZXR1cm4gci5oYW5kbGVNb250aENoYW5nZShyLnN0YXRlLmRhdGUpfSl9LHIuZGVjcmVhc2VNb250aD1mdW5jdGlvbigpe3Iuc2V0U3RhdGUoe2RhdGU6RyhfKHIuc3RhdGUuZGF0ZSksMSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHIuaGFuZGxlTW9udGhDaGFuZ2Uoci5zdGF0ZS5kYXRlKX0pfSxyLmhhbmRsZURheUNsaWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIucHJvcHMub25TZWxlY3QoZSx0KX0sci5oYW5kbGVEYXlNb3VzZUVudGVyPWZ1bmN0aW9uKGUpe3JldHVybiByLnNldFN0YXRlKHtzZWxlY3RpbmdEYXRlOmV9KX0sci5oYW5kbGVNb250aE1vdXNlTGVhdmU9ZnVuY3Rpb24oKXtyZXR1cm4gci5zZXRTdGF0ZSh7c2VsZWN0aW5nRGF0ZTpudWxsfSl9LHIuaGFuZGxlWWVhckNoYW5nZT1mdW5jdGlvbihlKXtyLnByb3BzLm9uWWVhckNoYW5nZSYmci5wcm9wcy5vblllYXJDaGFuZ2UoZSl9LHIuaGFuZGxlTW9udGhDaGFuZ2U9ZnVuY3Rpb24oZSl7ci5wcm9wcy5vbk1vbnRoQ2hhbmdlJiZyLnByb3BzLm9uTW9udGhDaGFuZ2UoZSksci5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UmJihyLnByb3BzLm9uU2VsZWN0JiZyLnByb3BzLm9uU2VsZWN0KGUpLHIucHJvcHMuc2V0T3BlbiYmci5wcm9wcy5zZXRPcGVuKCEwKSl9LHIuaGFuZGxlTW9udGhZZWFyQ2hhbmdlPWZ1bmN0aW9uKGUpe3IuaGFuZGxlWWVhckNoYW5nZShlKSxyLmhhbmRsZU1vbnRoQ2hhbmdlKGUpfSxyLmNoYW5nZVllYXI9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZSh7ZGF0ZTp5KF8oci5zdGF0ZS5kYXRlKSxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gci5oYW5kbGVZZWFyQ2hhbmdlKHIuc3RhdGUuZGF0ZSl9KX0sci5jaGFuZ2VNb250aD1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtkYXRlOkUoXyhyLnN0YXRlLmRhdGUpLGUpfSxmdW5jdGlvbigpe3JldHVybiByLmhhbmRsZU1vbnRoQ2hhbmdlKHIuc3RhdGUuZGF0ZSl9KX0sci5jaGFuZ2VNb250aFllYXI9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZSh7ZGF0ZTp5KEUoXyhyLnN0YXRlLmRhdGUpLFMoZSkpLFIoZSkpfSxmdW5jdGlvbigpe3JldHVybiByLmhhbmRsZU1vbnRoWWVhckNoYW5nZShyLnN0YXRlLmRhdGUpfSl9LHIuaGVhZGVyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnIuc3RhdGUuZGF0ZSx0PUQoXyhlKSksbj1bXTtyZXR1cm4gci5wcm9wcy5zaG93V2Vla051bWJlcnMmJm4ucHVzaChtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleToiVyIsY2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSJ9LHIucHJvcHMud2Vla0xhYmVsfHwiIyIpKSxuLmNvbmNhdChbMCwxLDIsMyw0LDUsNl0ubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPVAoXyh0KSxlKSxvPVEobikscz1yLnByb3BzLnVzZVdlZWtkYXlzU2hvcnQ/ZWUobyxuKTpaKG8sbik7cmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OmUsY2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSJ9LHMpfSkpfSxyLnJlbmRlclByZXZpb3VzTW9udGhCdXR0b249ZnVuY3Rpb24oKXt2YXIgZT1pZShyLnN0YXRlLmRhdGUsIm1vbnRoIixyLnByb3BzKTtpZigoci5wcm9wcy5mb3JjZVNob3dNb250aE5hdmlnYXRpb258fHIucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9ufHwhZSkmJiFyLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSl7dmFyIHQ9WyJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIiwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMiXSxuPXIuZGVjcmVhc2VNb250aDtyZXR1cm4gZSYmci5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24mJih0LnB1c2goInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZCIpLG49bnVsbCksbWUuYS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZTp0LmpvaW4oIiAiKSxvbkNsaWNrOm59KX19LHIucmVuZGVyTmV4dE1vbnRoQnV0dG9uPWZ1bmN0aW9uKCl7dmFyIGU9YWUoci5zdGF0ZS5kYXRlLCJtb250aCIsci5wcm9wcyk7aWYoKHIucHJvcHMuZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9ufHxyLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbnx8IWUpJiYhci5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpe3ZhciB0PVsicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiIsInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQiXTtyLnByb3BzLnNob3dUaW1lU2VsZWN0JiZ0LnB1c2goInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdGltZSIpLHIucHJvcHMudG9kYXlCdXR0b24mJnQucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10b2RheS1idXR0b24iKTt2YXIgbj1yLmluY3JlYXNlTW9udGg7cmV0dXJuIGUmJnIucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uJiYodC5wdXNoKCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCIpLG49bnVsbCksbWUuYS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZTp0LmpvaW4oIiAiKSxvbkNsaWNrOm59KX19LHIucmVuZGVyQ3VycmVudE1vbnRoPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnIuc3RhdGUuZGF0ZSx0PVsicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aCJdO3JldHVybiByLnByb3BzLnNob3dZZWFyRHJvcGRvd24mJnQucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aC0taGFzWWVhckRyb3Bkb3duIiksci5wcm9wcy5zaG93TW9udGhEcm9wZG93biYmdC5wdXNoKCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNNb250aERyb3Bkb3duIiksci5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24mJnQucHVzaCgicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aC0taGFzTW9udGhZZWFyRHJvcGRvd24iKSxtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0LmpvaW4oIiAiKX0saChlLHIucHJvcHMuZGF0ZUZvcm1hdCkpfSxyLnJlbmRlclllYXJEcm9wZG93bj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoci5wcm9wcy5zaG93WWVhckRyb3Bkb3duJiYhZSlyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KHdlLHthZGp1c3REYXRlT25DaGFuZ2U6ci5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UsZGF0ZTpyLnN0YXRlLmRhdGUsb25TZWxlY3Q6ci5wcm9wcy5vblNlbGVjdCxzZXRPcGVuOnIucHJvcHMuc2V0T3Blbixkcm9wZG93bk1vZGU6ci5wcm9wcy5kcm9wZG93bk1vZGUsb25DaGFuZ2U6ci5jaGFuZ2VZZWFyLG1pbkRhdGU6ci5wcm9wcy5taW5EYXRlLG1heERhdGU6ci5wcm9wcy5tYXhEYXRlLHllYXI6UihyLnN0YXRlLmRhdGUpLHNjcm9sbGFibGVZZWFyRHJvcGRvd246ci5wcm9wcy5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6ci5wcm9wcy55ZWFyRHJvcGRvd25JdGVtTnVtYmVyfSl9LHIucmVuZGVyTW9udGhEcm9wZG93bj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoci5wcm9wcy5zaG93TW9udGhEcm9wZG93biYmIWUpcmV0dXJuIG1lLmEuY3JlYXRlRWxlbWVudChJZSx7ZHJvcGRvd25Nb2RlOnIucHJvcHMuZHJvcGRvd25Nb2RlLGxvY2FsZTpyLnByb3BzLmxvY2FsZSxkYXRlRm9ybWF0OnIucHJvcHMuZGF0ZUZvcm1hdCxvbkNoYW5nZTpyLmNoYW5nZU1vbnRoLG1vbnRoOlMoci5zdGF0ZS5kYXRlKSx1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjpyLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3dufSl9LHIucmVuZGVyTW9udGhZZWFyRHJvcGRvd249ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHIucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duJiYhZSlyZXR1cm4gbWUuYS5jcmVhdGVFbGVtZW50KEhlLHtkcm9wZG93bk1vZGU6ci5wcm9wcy5kcm9wZG93bk1vZGUsbG9jYWxlOnIucHJvcHMubG9jYWxlLGRhdGVGb3JtYXQ6ci5wcm9wcy5kYXRlRm9ybWF0LG9uQ2hhbmdlOnIuY2hhbmdlTW9udGhZZWFyLG1pbkRhdGU6ci5wcm9wcy5taW5EYXRlLG1heERhdGU6ci5wcm9wcy5tYXhEYXRlLGRhdGU6ci5zdGF0ZS5kYXRlLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjpyLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pfSxyLnJlbmRlclRvZGF5QnV0dG9uPWZ1bmN0aW9uKCl7aWYoci5wcm9wcy50b2RheUJ1dHRvbiYmIXIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KXJldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9fdG9kYXktYnV0dG9uIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLm9uU2VsZWN0KE0oZChyLnByb3BzLnV0Y09mZnNldCkpLGUpfX0sci5wcm9wcy50b2RheUJ1dHRvbil9LHIucmVuZGVyTW9udGhzPWZ1bmN0aW9uKCl7aWYoIXIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KXtmb3IodmFyIGU9W10sdD0wO3Q8ci5wcm9wcy5tb250aHNTaG93bjsrK3Qpe3ZhciBuPUgoXyhyLnN0YXRlLmRhdGUpLHQpLG89Im1vbnRoLSIrdDtlLnB1c2gobWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6byxyZWY6ZnVuY3Rpb24oZSl7ci5tb250aENvbnRhaW5lcj1lfSxjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lciJ9LG1lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXIifSxyLnJlbmRlckN1cnJlbnRNb250aChuKSxtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyX19kcm9wZG93biByZWFjdC1kYXRlcGlja2VyX19oZWFkZXJfX2Ryb3Bkb3duLS0iK3IucHJvcHMuZHJvcGRvd25Nb2RlLG9uRm9jdXM6ci5oYW5kbGVEcm9wZG93bkZvY3VzfSxyLnJlbmRlck1vbnRoRHJvcGRvd24oMCE9PXQpLHIucmVuZGVyTW9udGhZZWFyRHJvcGRvd24oMCE9PXQpLHIucmVuZGVyWWVhckRyb3Bkb3duKDAhPT10KSksbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lcyJ9LHIuaGVhZGVyKG4pKSksbWUuYS5jcmVhdGVFbGVtZW50KHplLHtkYXk6bixkYXlDbGFzc05hbWU6ci5wcm9wcy5kYXlDbGFzc05hbWUsb25EYXlDbGljazpyLmhhbmRsZURheUNsaWNrLG9uRGF5TW91c2VFbnRlcjpyLmhhbmRsZURheU1vdXNlRW50ZXIsb25Nb3VzZUxlYXZlOnIuaGFuZGxlTW9udGhNb3VzZUxlYXZlLG9uV2Vla1NlbGVjdDpyLnByb3BzLm9uV2Vla1NlbGVjdCxmb3JtYXRXZWVrTnVtYmVyOnIucHJvcHMuZm9ybWF0V2Vla051bWJlcixtaW5EYXRlOnIucHJvcHMubWluRGF0ZSxtYXhEYXRlOnIucHJvcHMubWF4RGF0ZSxleGNsdWRlRGF0ZXM6ci5wcm9wcy5leGNsdWRlRGF0ZXMsaGlnaGxpZ2h0RGF0ZXM6ci5wcm9wcy5oaWdobGlnaHREYXRlcyxzZWxlY3RpbmdEYXRlOnIuc3RhdGUuc2VsZWN0aW5nRGF0ZSxpbmNsdWRlRGF0ZXM6ci5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5saW5lOnIucHJvcHMuaW5saW5lLGZpeGVkSGVpZ2h0OnIucHJvcHMuZml4ZWRIZWlnaHQsZmlsdGVyRGF0ZTpyLnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOnIucHJvcHMucHJlU2VsZWN0aW9uLHNlbGVjdGVkOnIucHJvcHMuc2VsZWN0ZWQsc2VsZWN0c1N0YXJ0OnIucHJvcHMuc2VsZWN0c1N0YXJ0LHNlbGVjdHNFbmQ6ci5wcm9wcy5zZWxlY3RzRW5kLHNob3dXZWVrTnVtYmVyczpyLnByb3BzLnNob3dXZWVrTnVtYmVycyxzdGFydERhdGU6ci5wcm9wcy5zdGFydERhdGUsZW5kRGF0ZTpyLnByb3BzLmVuZERhdGUscGVla05leHRNb250aDpyLnByb3BzLnBlZWtOZXh0TW9udGgsdXRjT2Zmc2V0OnIucHJvcHMudXRjT2Zmc2V0fSkpKX1yZXR1cm4gZX19LHIucmVuZGVyVGltZVNlY3Rpb249ZnVuY3Rpb24oKXtpZihyLnByb3BzLnNob3dUaW1lU2VsZWN0KXJldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoVmUse3NlbGVjdGVkOnIucHJvcHMuc2VsZWN0ZWQsb25DaGFuZ2U6ci5wcm9wcy5vblRpbWVDaGFuZ2UsZm9ybWF0OnIucHJvcHMudGltZUZvcm1hdCxpbmNsdWRlVGltZXM6ci5wcm9wcy5pbmNsdWRlVGltZXMsaW50ZXJ2YWxzOnIucHJvcHMudGltZUludGVydmFscyxtaW5UaW1lOnIucHJvcHMubWluVGltZSxtYXhUaW1lOnIucHJvcHMubWF4VGltZSxleGNsdWRlVGltZXM6ci5wcm9wcy5leGNsdWRlVGltZXMsdGltZUNhcHRpb246ci5wcm9wcy50aW1lQ2FwdGlvbix0b2RheUJ1dHRvbjpyLnByb3BzLnRvZGF5QnV0dG9uLHNob3dNb250aERyb3Bkb3duOnIucHJvcHMuc2hvd01vbnRoRHJvcGRvd24sc2hvd01vbnRoWWVhckRyb3Bkb3duOnIucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duLHNob3dZZWFyRHJvcGRvd246ci5wcm9wcy5zaG93WWVhckRyb3Bkb3duLHdpdGhQb3J0YWw6ci5wcm9wcy53aXRoUG9ydGFsLG1vbnRoUmVmOnIuc3RhdGUubW9udGhDb250YWluZXIsaW5qZWN0VGltZXM6ci5wcm9wcy5pbmplY3RUaW1lc30pfSxyLnN0YXRlPXtkYXRlOnIubG9jYWxpemVEYXRlKHIuZ2V0RGF0ZUluVmlldygpKSxzZWxlY3RpbmdEYXRlOm51bGwsbW9udGhDb250YWluZXI6ci5tb250aENvbnRhaW5lcn0scn1yZXR1cm4gUmUodCxlKSxTZSh0LG51bGwsW3trZXk6ImRlZmF1bHRQcm9wcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue29uRHJvcGRvd25Gb2N1czpmdW5jdGlvbigpe30sbW9udGhzU2hvd246MSxmb3JjZVNob3dNb250aE5hdmlnYXRpb246ITEsdGltZUNhcHRpb246IlRpbWUifX19XSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3QmJih0aGlzLmFzc2lnbk1vbnRoQ29udGFpbmVyPWZ1bmN0aW9uKCl7ZS5zZXRTdGF0ZSh7bW9udGhDb250YWluZXI6ZS5tb250aENvbnRhaW5lcn0pfSgpKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtlLnByZVNlbGVjdGlvbiYmIUsoZS5wcmVTZWxlY3Rpb24sdGhpcy5wcm9wcy5wcmVTZWxlY3Rpb24pP3RoaXMuc2V0U3RhdGUoe2RhdGU6dGhpcy5sb2NhbGl6ZURhdGUoZS5wcmVTZWxlY3Rpb24pfSk6ZS5vcGVuVG9EYXRlJiYhSyhlLm9wZW5Ub0RhdGUsdGhpcy5wcm9wcy5vcGVuVG9EYXRlKSYmdGhpcy5zZXRTdGF0ZSh7ZGF0ZTp0aGlzLmxvY2FsaXplRGF0ZShlLm9wZW5Ub0RhdGUpfSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBtZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpFZSgpKCJyZWFjdC1kYXRlcGlja2VyIix0aGlzLnByb3BzLmNsYXNzTmFtZSx7InJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSI6dGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHl9KX0sbWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIn0pLHRoaXMucmVuZGVyUHJldmlvdXNNb250aEJ1dHRvbigpLHRoaXMucmVuZGVyTmV4dE1vbnRoQnV0dG9uKCksdGhpcy5yZW5kZXJNb250aHMoKSx0aGlzLnJlbmRlclRvZGF5QnV0dG9uKCksdGhpcy5yZW5kZXJUaW1lU2VjdGlvbigpLHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0fShtZS5hLkNvbXBvbmVudCk7cWUucHJvcFR5cGVzPXthZGp1c3REYXRlT25DaGFuZ2U6Z2UuYS5ib29sLGNsYXNzTmFtZTpnZS5hLnN0cmluZyxjaGlsZHJlbjpnZS5hLm5vZGUsZGF0ZUZvcm1hdDpnZS5hLm9uZU9mVHlwZShbZ2UuYS5zdHJpbmcsZ2UuYS5hcnJheV0pLmlzUmVxdWlyZWQsZGF5Q2xhc3NOYW1lOmdlLmEuZnVuYyxkcm9wZG93bk1vZGU6Z2UuYS5vbmVPZihbInNjcm9sbCIsInNlbGVjdCJdKSxlbmREYXRlOmdlLmEub2JqZWN0LGV4Y2x1ZGVEYXRlczpnZS5hLmFycmF5LGZpbHRlckRhdGU6Z2UuYS5mdW5jLGZpeGVkSGVpZ2h0OmdlLmEuYm9vbCxmb3JtYXRXZWVrTnVtYmVyOmdlLmEuZnVuYyxoaWdobGlnaHREYXRlczpnZS5hLmluc3RhbmNlT2YoTWFwKSxpbmNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxpbmNsdWRlVGltZXM6Z2UuYS5hcnJheSxpbmplY3RUaW1lczpnZS5hLmFycmF5LGlubGluZTpnZS5hLmJvb2wsbG9jYWxlOmdlLmEuc3RyaW5nLG1heERhdGU6Z2UuYS5vYmplY3QsbWluRGF0ZTpnZS5hLm9iamVjdCxtb250aHNTaG93bjpnZS5hLm51bWJlcixvbkNsaWNrT3V0c2lkZTpnZS5hLmZ1bmMuaXNSZXF1aXJlZCxvbk1vbnRoQ2hhbmdlOmdlLmEuZnVuYyxvblllYXJDaGFuZ2U6Z2UuYS5mdW5jLGZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbjpnZS5hLmJvb2wsb25Ecm9wZG93bkZvY3VzOmdlLmEuZnVuYyxvblNlbGVjdDpnZS5hLmZ1bmMuaXNSZXF1aXJlZCxvbldlZWtTZWxlY3Q6Z2UuYS5mdW5jLHNob3dUaW1lU2VsZWN0OmdlLmEuYm9vbCxzaG93VGltZVNlbGVjdE9ubHk6Z2UuYS5ib29sLHRpbWVGb3JtYXQ6Z2UuYS5zdHJpbmcsdGltZUludGVydmFsczpnZS5hLm51bWJlcixvblRpbWVDaGFuZ2U6Z2UuYS5mdW5jLG1pblRpbWU6Z2UuYS5vYmplY3QsbWF4VGltZTpnZS5hLm9iamVjdCxleGNsdWRlVGltZXM6Z2UuYS5hcnJheSx0aW1lQ2FwdGlvbjpnZS5hLnN0cmluZyxvcGVuVG9EYXRlOmdlLmEub2JqZWN0LHBlZWtOZXh0TW9udGg6Z2UuYS5ib29sLHNjcm9sbGFibGVZZWFyRHJvcGRvd246Z2UuYS5ib29sLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjpnZS5hLmJvb2wscHJlU2VsZWN0aW9uOmdlLmEub2JqZWN0LHNlbGVjdGVkOmdlLmEub2JqZWN0LHNlbGVjdHNFbmQ6Z2UuYS5ib29sLHNlbGVjdHNTdGFydDpnZS5hLmJvb2wsc2hvd01vbnRoRHJvcGRvd246Z2UuYS5ib29sLHNob3dNb250aFllYXJEcm9wZG93bjpnZS5hLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmdlLmEuYm9vbCxzaG93WWVhckRyb3Bkb3duOmdlLmEuYm9vbCxzdGFydERhdGU6Z2UuYS5vYmplY3QsdG9kYXlCdXR0b246Z2UuYS5zdHJpbmcsdXNlV2Vla2RheXNTaG9ydDpnZS5hLmJvb2wsd2l0aFBvcnRhbDpnZS5hLmJvb2wsdXRjT2Zmc2V0OmdlLmEubnVtYmVyLHdlZWtMYWJlbDpnZS5hLnN0cmluZyx5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOmdlLmEubnVtYmVyLHNldE9wZW46Z2UuYS5mdW5jLHVzZVNob3J0TW9udGhJbkRyb3Bkb3duOmdlLmEuYm9vbCxzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246Z2UuYS5ib29sfTt2YXIgS2U9WyJhdXRvIiwiYXV0by1sZWZ0IiwiYXV0by1yaWdodCIsImJvdHRvbSIsImJvdHRvbS1lbmQiLCJib3R0b20tc3RhcnQiLCJsZWZ0IiwibGVmdC1lbmQiLCJsZWZ0LXN0YXJ0IiwicmlnaHQiLCJyaWdodC1lbmQiLCJyaWdodC1zdGFydCIsInRvcCIsInRvcC1lbmQiLCJ0b3Atc3RhcnQiXSxYZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIE9lKHRoaXMsdCksamUodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIFJlKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5oaWRlUG9wcGVyLHI9ZS5wb3BwZXJDb21wb25lbnQsbz1lLnBvcHBlck1vZGlmaWVycyxzPWUucG9wcGVyUGxhY2VtZW50LGk9ZS50YXJnZXRDb21wb25lbnQsYT12b2lkIDA7aWYoIW4pe3ZhciBsPUVlKCkoInJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIix0KTthPW1lLmEuY3JlYXRlRWxlbWVudChBZS5iLHtjbGFzc05hbWU6bCxtb2RpZmllcnM6byxwbGFjZW1lbnQ6c30scil9cmV0dXJuIHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyJiYoYT1tZS5hLmNyZWF0ZUVsZW1lbnQodGhpcy5wcm9wcy5wb3BwZXJDb250YWluZXIse30sYSkpLG1lLmEuY3JlYXRlRWxlbWVudChBZS5hLG51bGwsbWUuYS5jcmVhdGVFbGVtZW50KEFlLmMse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIn0saSksYSl9LFNlKHQsbnVsbCxbe2tleToiZGVmYXVsdFByb3BzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57aGlkZVBvcHBlcjohMCxwb3BwZXJNb2RpZmllcnM6e3ByZXZlbnRPdmVyZmxvdzp7ZW5hYmxlZDohMCxlc2NhcGVXaXRoUmVmZXJlbmNlOiEwLGJvdW5kYXJpZXNFbGVtZW50OiJ2aWV3cG9ydCJ9fSxwb3BwZXJQbGFjZW1lbnQ6ImJvdHRvbS1zdGFydCJ9fX1dKSx0fShtZS5hLkNvbXBvbmVudCk7WGUucHJvcFR5cGVzPXtjbGFzc05hbWU6Z2UuYS5zdHJpbmcsaGlkZVBvcHBlcjpnZS5hLmJvb2wscG9wcGVyQ29tcG9uZW50OmdlLmEuZWxlbWVudCxwb3BwZXJNb2RpZmllcnM6Z2UuYS5vYmplY3QscG9wcGVyUGxhY2VtZW50OmdlLmEub25lT2YoS2UpLHBvcHBlckNvbnRhaW5lcjpnZS5hLmZ1bmMsdGFyZ2V0Q29tcG9uZW50OmdlLmEuZWxlbWVudH07dmFyICRlPSJyZWFjdC1kYXRlcGlja2VyLWlnbm9yZS1vbmNsaWNrb3V0c2lkZSIsUWU9T2JqZWN0KHllLmEpKHFlKSxKZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe09lKHRoaXMsdCk7dmFyIHI9amUodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0UHJlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMub3BlblRvRGF0ZT91KHIucHJvcHMub3BlblRvRGF0ZSk6ci5wcm9wcy5zZWxlY3RzRW5kJiZyLnByb3BzLnN0YXJ0RGF0ZT91KHIucHJvcHMuc3RhcnREYXRlKTpyLnByb3BzLnNlbGVjdHNTdGFydCYmci5wcm9wcy5lbmREYXRlP3Uoci5wcm9wcy5lbmREYXRlKTpkKHIucHJvcHMudXRjT2Zmc2V0KX0sci5jYWxjSW5pdGlhbFN0YXRlPWZ1bmN0aW9uKCl7dmFyIGU9ci5nZXRQcmVTZWxlY3Rpb24oKSx0PWxlKHIucHJvcHMpLG49dWUoci5wcm9wcyksbz10JiZWKGUsdCk/dDpuJiZXKGUsbik/bjplO3JldHVybntvcGVuOnIucHJvcHMuc3RhcnRPcGVufHwhMSxwcmV2ZW50Rm9jdXM6ITEscHJlU2VsZWN0aW9uOnIucHJvcHMuc2VsZWN0ZWQ/dShyLnByb3BzLnNlbGVjdGVkKTpvLGhpZ2hsaWdodERhdGVzOmNlKHIucHJvcHMuaGlnaGxpZ2h0RGF0ZXMpLGZvY3VzZWQ6ITF9fSxyLmNsZWFyUHJldmVudEZvY3VzVGltZW91dD1mdW5jdGlvbigpe3IucHJldmVudEZvY3VzVGltZW91dCYmY2xlYXJUaW1lb3V0KHIucHJldmVudEZvY3VzVGltZW91dCl9LHIuc2V0Rm9jdXM9ZnVuY3Rpb24oKXtyLmlucHV0JiZyLmlucHV0LmZvY3VzJiZyLmlucHV0LmZvY3VzKCl9LHIuc2V0T3Blbj1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtvcGVuOmUscHJlU2VsZWN0aW9uOmUmJnIuc3RhdGUub3Blbj9yLnN0YXRlLnByZVNlbGVjdGlvbjpyLmNhbGNJbml0aWFsU3RhdGUoKS5wcmVTZWxlY3Rpb259KX0sci5oYW5kbGVGb2N1cz1mdW5jdGlvbihlKXtyLnN0YXRlLnByZXZlbnRGb2N1c3x8KHIucHJvcHMub25Gb2N1cyhlKSxyLnByb3BzLnByZXZlbnRPcGVuT25Gb2N1c3x8ci5zZXRPcGVuKCEwKSksci5zZXRTdGF0ZSh7Zm9jdXNlZDohMH0pfSxyLmNhbmNlbEZvY3VzSW5wdXQ9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoci5pbnB1dEZvY3VzVGltZW91dCksci5pbnB1dEZvY3VzVGltZW91dD1udWxsfSxyLmRlZmVyRm9jdXNJbnB1dD1mdW5jdGlvbigpe3IuY2FuY2VsRm9jdXNJbnB1dCgpLHIuaW5wdXRGb2N1c1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByLnNldEZvY3VzKCl9LDEpfSxyLmhhbmRsZURyb3Bkb3duRm9jdXM9ZnVuY3Rpb24oKXtyLmNhbmNlbEZvY3VzSW5wdXQoKX0sci5oYW5kbGVCbHVyPWZ1bmN0aW9uKGUpe3Iuc3RhdGUub3Blbj9yLmRlZmVyRm9jdXNJbnB1dCgpOnIucHJvcHMub25CbHVyKGUpLHIuc2V0U3RhdGUoe2ZvY3VzZWQ6ITF9KX0sci5oYW5kbGVDYWxlbmRhckNsaWNrT3V0c2lkZT1mdW5jdGlvbihlKXtyLnByb3BzLmlubGluZXx8ci5zZXRPcGVuKCExKSxyLnByb3BzLm9uQ2xpY2tPdXRzaWRlKGUpLHIucHJvcHMud2l0aFBvcnRhbCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxyLmhhbmRsZUNoYW5nZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIG89dFswXTtpZighci5wcm9wcy5vbkNoYW5nZVJhd3x8KHIucHJvcHMub25DaGFuZ2VSYXcuYXBwbHkocix0KSwiZnVuY3Rpb24iPT10eXBlb2Ygby5pc0RlZmF1bHRQcmV2ZW50ZWQmJiFvLmlzRGVmYXVsdFByZXZlbnRlZCgpKSl7ci5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpvLnRhcmdldC52YWx1ZX0pO3ZhciBzPXAoby50YXJnZXQudmFsdWUsci5wcm9wcyk7IXMmJm8udGFyZ2V0LnZhbHVlfHxyLnNldFNlbGVjdGVkKHMsbywhMCl9fSxyLmhhbmRsZVNlbGVjdD1mdW5jdGlvbihlLHQpe3Iuc2V0U3RhdGUoe3ByZXZlbnRGb2N1czohMH0sZnVuY3Rpb24oKXtyZXR1cm4gci5wcmV2ZW50Rm9jdXNUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gci5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiExfSl9LDUwKSxyLnByZXZlbnRGb2N1c1RpbWVvdXR9KSxyLnNldFNlbGVjdGVkKGUsdCksIXIucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdHx8ci5wcm9wcy5zaG93VGltZVNlbGVjdD9yLnNldFByZVNlbGVjdGlvbihlKTpyLnByb3BzLmlubGluZXx8ci5zZXRPcGVuKCExKX0sci5zZXRTZWxlY3RlZD1mdW5jdGlvbihlLHQsbil7dmFyIG89ZTtpZihudWxsPT09b3x8IXJlKG8sci5wcm9wcykpe2lmKCFLKHIucHJvcHMuc2VsZWN0ZWQsbyl8fHIucHJvcHMuYWxsb3dTYW1lRGF5KXtpZihudWxsIT09byl7aWYoci5wcm9wcy5zZWxlY3RlZCl7dmFyIHM9ci5wcm9wcy5zZWxlY3RlZDtuJiYocz11KG8pKSxvPWIodShvKSx7aG91cjpBKHMpLG1pbnV0ZTpUKHMpLHNlY29uZDp2KHMpfSl9ci5zZXRTdGF0ZSh7cHJlU2VsZWN0aW9uOm99KX1yLnByb3BzLm9uQ2hhbmdlKG8sdCl9ci5wcm9wcy5vblNlbGVjdChvLHQpLG58fHIuc2V0U3RhdGUoe2lucHV0VmFsdWU6bnVsbH0pfX0sci5zZXRQcmVTZWxlY3Rpb249ZnVuY3Rpb24oZSl7KCEodm9pZCAwIT09ci5wcm9wcy5taW5EYXRlJiZ2b2lkIDAhPT1yLnByb3BzLm1heERhdGUpfHwhZXx8WChlLHIucHJvcHMubWluRGF0ZSxyLnByb3BzLm1heERhdGUpKSYmci5zZXRTdGF0ZSh7cHJlU2VsZWN0aW9uOmV9KX0sci5oYW5kbGVUaW1lQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXIucHJvcHMuc2VsZWN0ZWQ/ci5wcm9wcy5zZWxlY3RlZDpyLmdldFByZVNlbGVjdGlvbigpLG49YihfKHQpLHtob3VyOkEoZSksbWludXRlOlQoZSl9KTtyLnNldFN0YXRlKHtwcmVTZWxlY3Rpb246bn0pLHIucHJvcHMub25DaGFuZ2Uobiksci5zZXRPcGVuKCExKSxyLnNldFN0YXRlKHtpbnB1dFZhbHVlOm51bGx9KX0sci5vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtyLnByb3BzLmRpc2FibGVkfHxyLnNldE9wZW4oITApfSxyLm9uSW5wdXRLZXlEb3duPWZ1bmN0aW9uKGUpe3IucHJvcHMub25LZXlEb3duKGUpO3ZhciB0PWUua2V5O2lmKCFyLnN0YXRlLm9wZW4mJiFyLnByb3BzLmlubGluZSYmIXIucHJvcHMucHJldmVudE9wZW5PbkZvY3VzKXJldHVybiB2b2lkKCJFbnRlciIhPT10JiYiRXNjYXBlIiE9PXQmJiJUYWIiIT09dCYmci5vbklucHV0Q2xpY2soKSk7dmFyIG49dShyLnN0YXRlLnByZVNlbGVjdGlvbik7aWYoIkVudGVyIj09PXQpZS5wcmV2ZW50RGVmYXVsdCgpLGYoci5zdGF0ZS5wcmVTZWxlY3Rpb24pfHxtKHIuc3RhdGUucHJlU2VsZWN0aW9uKT8oci5oYW5kbGVTZWxlY3QobixlKSwhci5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0JiZyLnNldFByZVNlbGVjdGlvbihuKSk6ci5zZXRPcGVuKCExKTtlbHNlIGlmKCJFc2NhcGUiPT09dCllLnByZXZlbnREZWZhdWx0KCksci5zZXRPcGVuKCExKTtlbHNlIGlmKCJUYWIiPT09dClyLnNldE9wZW4oITEpO2Vsc2UgaWYoIXIucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24pe3ZhciBvPXZvaWQgMDtzd2l0Y2godCl7Y2FzZSJBcnJvd0xlZnQiOmUucHJldmVudERlZmF1bHQoKSxvPUIobiwxKTticmVhaztjYXNlIkFycm93UmlnaHQiOmUucHJldmVudERlZmF1bHQoKSxvPVAobiwxKTticmVhaztjYXNlIkFycm93VXAiOmUucHJldmVudERlZmF1bHQoKSxvPVUobiwxKTticmVhaztjYXNlIkFycm93RG93biI6ZS5wcmV2ZW50RGVmYXVsdCgpLG89TihuLDEpO2JyZWFrO2Nhc2UiUGFnZVVwIjplLnByZXZlbnREZWZhdWx0KCksbz1HKG4sMSk7YnJlYWs7Y2FzZSJQYWdlRG93biI6ZS5wcmV2ZW50RGVmYXVsdCgpLG89SChuLDEpO2JyZWFrO2Nhc2UiSG9tZSI6ZS5wcmV2ZW50RGVmYXVsdCgpLG89eihuLDEpO2JyZWFrO2Nhc2UiRW5kIjplLnByZXZlbnREZWZhdWx0KCksbz1GKG4sMSl9ci5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UmJnIuc2V0U2VsZWN0ZWQobyksci5zZXRQcmVTZWxlY3Rpb24obyl9fSxyLm9uQ2xlYXJDbGljaz1mdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCksci5wcm9wcy5vbkNoYW5nZShudWxsLGUpLHIuc2V0U3RhdGUoe2lucHV0VmFsdWU6bnVsbH0pfSxyLmNsZWFyPWZ1bmN0aW9uKCl7ci5vbkNsZWFyQ2xpY2soKX0sci5yZW5kZXJDYWxlbmRhcj1mdW5jdGlvbigpe3JldHVybiByLnByb3BzLmlubGluZXx8ci5zdGF0ZS5vcGVuJiYhci5wcm9wcy5kaXNhYmxlZD9tZS5hLmNyZWF0ZUVsZW1lbnQoUWUse3JlZjpmdW5jdGlvbihlKXtyLmNhbGVuZGFyPWV9LGxvY2FsZTpyLnByb3BzLmxvY2FsZSxhZGp1c3REYXRlT25DaGFuZ2U6ci5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2Usc2V0T3BlbjpyLnNldE9wZW4sZGF0ZUZvcm1hdDpyLnByb3BzLmRhdGVGb3JtYXRDYWxlbmRhcix1c2VXZWVrZGF5c1Nob3J0OnIucHJvcHMudXNlV2Vla2RheXNTaG9ydCxkcm9wZG93bk1vZGU6ci5wcm9wcy5kcm9wZG93bk1vZGUsc2VsZWN0ZWQ6ci5wcm9wcy5zZWxlY3RlZCxwcmVTZWxlY3Rpb246ci5zdGF0ZS5wcmVTZWxlY3Rpb24sb25TZWxlY3Q6ci5oYW5kbGVTZWxlY3Qsb25XZWVrU2VsZWN0OnIucHJvcHMub25XZWVrU2VsZWN0LG9wZW5Ub0RhdGU6ci5wcm9wcy5vcGVuVG9EYXRlLG1pbkRhdGU6ci5wcm9wcy5taW5EYXRlLG1heERhdGU6ci5wcm9wcy5tYXhEYXRlLHNlbGVjdHNTdGFydDpyLnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOnIucHJvcHMuc2VsZWN0c0VuZCxzdGFydERhdGU6ci5wcm9wcy5zdGFydERhdGUsZW5kRGF0ZTpyLnByb3BzLmVuZERhdGUsZXhjbHVkZURhdGVzOnIucHJvcHMuZXhjbHVkZURhdGVzLGZpbHRlckRhdGU6ci5wcm9wcy5maWx0ZXJEYXRlLG9uQ2xpY2tPdXRzaWRlOnIuaGFuZGxlQ2FsZW5kYXJDbGlja091dHNpZGUsZm9ybWF0V2Vla051bWJlcjpyLnByb3BzLmZvcm1hdFdlZWtOdW1iZXIsaGlnaGxpZ2h0RGF0ZXM6ci5zdGF0ZS5oaWdobGlnaHREYXRlcyxpbmNsdWRlRGF0ZXM6ci5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5jbHVkZVRpbWVzOnIucHJvcHMuaW5jbHVkZVRpbWVzLGluamVjdFRpbWVzOnIucHJvcHMuaW5qZWN0VGltZXMsaW5saW5lOnIucHJvcHMuaW5saW5lLHBlZWtOZXh0TW9udGg6ci5wcm9wcy5wZWVrTmV4dE1vbnRoLHNob3dNb250aERyb3Bkb3duOnIucHJvcHMuc2hvd01vbnRoRHJvcGRvd24sdXNlU2hvcnRNb250aEluRHJvcGRvd246ci5wcm9wcy51c2VTaG9ydE1vbnRoSW5Ecm9wZG93bixzaG93TW9udGhZZWFyRHJvcGRvd246ci5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24sc2hvd1dlZWtOdW1iZXJzOnIucHJvcHMuc2hvd1dlZWtOdW1iZXJzLHNob3dZZWFyRHJvcGRvd246ci5wcm9wcy5zaG93WWVhckRyb3Bkb3duLHdpdGhQb3J0YWw6ci5wcm9wcy53aXRoUG9ydGFsLGZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbjpyLnByb3BzLmZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbixzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246ci5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24sc2Nyb2xsYWJsZVllYXJEcm9wZG93bjpyLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24sc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOnIucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duLHRvZGF5QnV0dG9uOnIucHJvcHMudG9kYXlCdXR0b24sd2Vla0xhYmVsOnIucHJvcHMud2Vla0xhYmVsLHV0Y09mZnNldDpyLnByb3BzLnV0Y09mZnNldCxvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczokZSxmaXhlZEhlaWdodDpyLnByb3BzLmZpeGVkSGVpZ2h0LG1vbnRoc1Nob3duOnIucHJvcHMubW9udGhzU2hvd24sb25Ecm9wZG93bkZvY3VzOnIuaGFuZGxlRHJvcGRvd25Gb2N1cyxvbk1vbnRoQ2hhbmdlOnIucHJvcHMub25Nb250aENoYW5nZSxvblllYXJDaGFuZ2U6ci5wcm9wcy5vblllYXJDaGFuZ2UsZGF5Q2xhc3NOYW1lOnIucHJvcHMuZGF5Q2xhc3NOYW1lLHNob3dUaW1lU2VsZWN0OnIucHJvcHMuc2hvd1RpbWVTZWxlY3Qsc2hvd1RpbWVTZWxlY3RPbmx5OnIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5LG9uVGltZUNoYW5nZTpyLmhhbmRsZVRpbWVDaGFuZ2UsdGltZUZvcm1hdDpyLnByb3BzLnRpbWVGb3JtYXQsdGltZUludGVydmFsczpyLnByb3BzLnRpbWVJbnRlcnZhbHMsbWluVGltZTpyLnByb3BzLm1pblRpbWUsbWF4VGltZTpyLnByb3BzLm1heFRpbWUsZXhjbHVkZVRpbWVzOnIucHJvcHMuZXhjbHVkZVRpbWVzLHRpbWVDYXB0aW9uOnIucHJvcHMudGltZUNhcHRpb24sY2xhc3NOYW1lOnIucHJvcHMuY2FsZW5kYXJDbGFzc05hbWUseWVhckRyb3Bkb3duSXRlbU51bWJlcjpyLnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXJ9LHIucHJvcHMuY2hpbGRyZW4pOm51bGx9LHIucmVuZGVyRGF0ZUlucHV0PWZ1bmN0aW9uKCl7dmFyIGUsdCxuPUVlKCkoci5wcm9wcy5jbGFzc05hbWUsKGU9e30sZVskZV09ci5zdGF0ZS5vcGVuLGUpKSxvPXIucHJvcHMuY3VzdG9tSW5wdXR8fG1lLmEuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHt0eXBlOiJ0ZXh0In0pLHM9ci5wcm9wcy5jdXN0b21JbnB1dFJlZnx8InJlZiIsaT0ic3RyaW5nIj09dHlwZW9mIHIucHJvcHMudmFsdWU/ci5wcm9wcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHIuc3RhdGUuaW5wdXRWYWx1ZT9yLnN0YXRlLmlucHV0VmFsdWU6ZyhyLnByb3BzLnNlbGVjdGVkLHIucHJvcHMpO3JldHVybiBtZS5hLmNsb25lRWxlbWVudChvLCh0PXt9LHRbc109ZnVuY3Rpb24oZSl7ci5pbnB1dD1lfSx0LnZhbHVlPWksdC5vbkJsdXI9ci5oYW5kbGVCbHVyLHQub25DaGFuZ2U9ci5oYW5kbGVDaGFuZ2UsdC5vbkNsaWNrPXIub25JbnB1dENsaWNrLHQub25Gb2N1cz1yLmhhbmRsZUZvY3VzLHQub25LZXlEb3duPXIub25JbnB1dEtleURvd24sdC5pZD1yLnByb3BzLmlkLHQubmFtZT1yLnByb3BzLm5hbWUsdC5hdXRvRm9jdXM9ci5wcm9wcy5hdXRvRm9jdXMsdC5wbGFjZWhvbGRlcj1yLnByb3BzLnBsYWNlaG9sZGVyVGV4dCx0LmRpc2FibGVkPXIucHJvcHMuZGlzYWJsZWQsdC5hdXRvQ29tcGxldGU9ci5wcm9wcy5hdXRvQ29tcGxldGUsdC5jbGFzc05hbWU9bix0LnRpdGxlPXIucHJvcHMudGl0bGUsdC5yZWFkT25seT1yLnByb3BzLnJlYWRPbmx5LHQucmVxdWlyZWQ9ci5wcm9wcy5yZXF1aXJlZCx0LnRhYkluZGV4PXIucHJvcHMudGFiSW5kZXgsdCkpfSxyLnJlbmRlckNsZWFyQnV0dG9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMuaXNDbGVhcmFibGUmJm51bGwhPXIucHJvcHMuc2VsZWN0ZWQ/bWUuYS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX2Nsb3NlLWljb24iLG9uQ2xpY2s6ci5vbkNsZWFyQ2xpY2ssdGl0bGU6ci5wcm9wcy5jbGVhckJ1dHRvblRpdGxlLHRhYkluZGV4Oi0xfSk6bnVsbH0sci5zdGF0ZT1yLmNhbGNJbml0aWFsU3RhdGUoKSxyfXJldHVybiBSZSh0LGUpLFNlKHQsbnVsbCxbe2tleToiZGVmYXVsdFByb3BzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YWxsb3dTYW1lRGF5OiExLGRhdGVGb3JtYXQ6IkwiLGRhdGVGb3JtYXRDYWxlbmRhcjoiTU1NTSBZWVlZIixvbkNoYW5nZTpmdW5jdGlvbigpe30sZGlzYWJsZWQ6ITEsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246ITEsZHJvcGRvd25Nb2RlOiJzY3JvbGwiLG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sb25LZXlEb3duOmZ1bmN0aW9uKCl7fSxvblNlbGVjdDpmdW5jdGlvbigpe30sb25DbGlja091dHNpZGU6ZnVuY3Rpb24oKXt9LG9uTW9udGhDaGFuZ2U6ZnVuY3Rpb24oKXt9LHByZXZlbnRPcGVuT25Gb2N1czohMSxvblllYXJDaGFuZ2U6ZnVuY3Rpb24oKXt9LG1vbnRoc1Nob3duOjEsd2l0aFBvcnRhbDohMSxzaG91bGRDbG9zZU9uU2VsZWN0OiEwLHNob3dUaW1lU2VsZWN0OiExLHRpbWVJbnRlcnZhbHM6MzAsdGltZUNhcHRpb246IlRpbWUifX19XSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt0aGlzLnByb3BzLmlubGluZSYmcGUodGhpcy5wcm9wcy5zZWxlY3RlZCxlLnNlbGVjdGVkKSYmdGhpcy5zZXRQcmVTZWxlY3Rpb24oZS5zZWxlY3RlZCksdGhpcy5wcm9wcy5oaWdobGlnaHREYXRlcyE9PWUuaGlnaGxpZ2h0RGF0ZXMmJnRoaXMuc2V0U3RhdGUoe2hpZ2hsaWdodERhdGVzOmNlKGUuaGlnaGxpZ2h0RGF0ZXMpfSksdGhpcy5zdGF0ZS5mb2N1c2VkfHx0aGlzLnNldFN0YXRlKHtpbnB1dFZhbHVlOm51bGx9KX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyUHJldmVudEZvY3VzVGltZW91dCgpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlbmRlckNhbGVuZGFyKCk7cmV0dXJuIHRoaXMucHJvcHMuaW5saW5lJiYhdGhpcy5wcm9wcy53aXRoUG9ydGFsP2U6dGhpcy5wcm9wcy53aXRoUG9ydGFsP21lLmEuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLHRoaXMucHJvcHMuaW5saW5lP251bGw6bWUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lciJ9LHRoaXMucmVuZGVyRGF0ZUlucHV0KCksdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpKSx0aGlzLnN0YXRlLm9wZW58fHRoaXMucHJvcHMuaW5saW5lP21lLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1kYXRlcGlja2VyX19wb3J0YWwifSxlKTpudWxsKTptZS5hLmNyZWF0ZUVsZW1lbnQoWGUse2NsYXNzTmFtZTp0aGlzLnByb3BzLnBvcHBlckNsYXNzTmFtZSxoaWRlUG9wcGVyOiF0aGlzLnN0YXRlLm9wZW58fHRoaXMucHJvcHMuZGlzYWJsZWQscG9wcGVyTW9kaWZpZXJzOnRoaXMucHJvcHMucG9wcGVyTW9kaWZpZXJzLHRhcmdldENvbXBvbmVudDptZS5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyIn0sdGhpcy5yZW5kZXJEYXRlSW5wdXQoKSx0aGlzLnJlbmRlckNsZWFyQnV0dG9uKCkpLHBvcHBlckNvbnRhaW5lcjp0aGlzLnByb3BzLnBvcHBlckNvbnRhaW5lcixwb3BwZXJDb21wb25lbnQ6ZSxwb3BwZXJQbGFjZW1lbnQ6dGhpcy5wcm9wcy5wb3BwZXJQbGFjZW1lbnR9KX0sdH0obWUuYS5Db21wb25lbnQpO0plLnByb3BUeXBlcz17YWRqdXN0RGF0ZU9uQ2hhbmdlOmdlLmEuYm9vbCxhbGxvd1NhbWVEYXk6Z2UuYS5ib29sLGF1dG9Db21wbGV0ZTpnZS5hLnN0cmluZyxhdXRvRm9jdXM6Z2UuYS5ib29sLGNhbGVuZGFyQ2xhc3NOYW1lOmdlLmEuc3RyaW5nLGNoaWxkcmVuOmdlLmEubm9kZSxjbGFzc05hbWU6Z2UuYS5zdHJpbmcsY3VzdG9tSW5wdXQ6Z2UuYS5lbGVtZW50LGN1c3RvbUlucHV0UmVmOmdlLmEuc3RyaW5nLGRhdGVGb3JtYXQ6Z2UuYS5vbmVPZlR5cGUoW2dlLmEuc3RyaW5nLGdlLmEuYXJyYXldKSxkYXRlRm9ybWF0Q2FsZW5kYXI6Z2UuYS5zdHJpbmcsZGF5Q2xhc3NOYW1lOmdlLmEuZnVuYyxkaXNhYmxlZDpnZS5hLmJvb2wsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246Z2UuYS5ib29sLGRyb3Bkb3duTW9kZTpnZS5hLm9uZU9mKFsic2Nyb2xsIiwic2VsZWN0Il0pLmlzUmVxdWlyZWQsZW5kRGF0ZTpnZS5hLm9iamVjdCxleGNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxmaWx0ZXJEYXRlOmdlLmEuZnVuYyxmaXhlZEhlaWdodDpnZS5hLmJvb2wsZm9ybWF0V2Vla051bWJlcjpnZS5hLmZ1bmMsaGlnaGxpZ2h0RGF0ZXM6Z2UuYS5hcnJheSxpZDpnZS5hLnN0cmluZyxpbmNsdWRlRGF0ZXM6Z2UuYS5hcnJheSxpbmNsdWRlVGltZXM6Z2UuYS5hcnJheSxpbmplY3RUaW1lczpnZS5hLmFycmF5LGlubGluZTpnZS5hLmJvb2wsaXNDbGVhcmFibGU6Z2UuYS5ib29sLGxvY2FsZTpnZS5hLnN0cmluZyxtYXhEYXRlOmdlLmEub2JqZWN0LG1pbkRhdGU6Z2UuYS5vYmplY3QsbW9udGhzU2hvd246Z2UuYS5udW1iZXIsbmFtZTpnZS5hLnN0cmluZyxvbkJsdXI6Z2UuYS5mdW5jLG9uQ2hhbmdlOmdlLmEuZnVuYy5pc1JlcXVpcmVkLG9uU2VsZWN0OmdlLmEuZnVuYyxvbldlZWtTZWxlY3Q6Z2UuYS5mdW5jLG9uQ2xpY2tPdXRzaWRlOmdlLmEuZnVuYyxvbkNoYW5nZVJhdzpnZS5hLmZ1bmMsb25Gb2N1czpnZS5hLmZ1bmMsb25LZXlEb3duOmdlLmEuZnVuYyxvbk1vbnRoQ2hhbmdlOmdlLmEuZnVuYyxvblllYXJDaGFuZ2U6Z2UuYS5mdW5jLG9wZW5Ub0RhdGU6Z2UuYS5vYmplY3QscGVla05leHRNb250aDpnZS5hLmJvb2wscGxhY2Vob2xkZXJUZXh0OmdlLmEuc3RyaW5nLHBvcHBlckNvbnRhaW5lcjpnZS5hLmZ1bmMscG9wcGVyQ2xhc3NOYW1lOmdlLmEuc3RyaW5nLHBvcHBlck1vZGlmaWVyczpnZS5hLm9iamVjdCxwb3BwZXJQbGFjZW1lbnQ6Z2UuYS5vbmVPZihLZSkscHJldmVudE9wZW5PbkZvY3VzOmdlLmEuYm9vbCxyZWFkT25seTpnZS5hLmJvb2wscmVxdWlyZWQ6Z2UuYS5ib29sLHNjcm9sbGFibGVZZWFyRHJvcGRvd246Z2UuYS5ib29sLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjpnZS5hLmJvb2wsc2VsZWN0ZWQ6Z2UuYS5vYmplY3Qsc2VsZWN0c0VuZDpnZS5hLmJvb2wsc2VsZWN0c1N0YXJ0OmdlLmEuYm9vbCxzaG93TW9udGhEcm9wZG93bjpnZS5hLmJvb2wsc2hvd01vbnRoWWVhckRyb3Bkb3duOmdlLmEuYm9vbCxzaG93V2Vla051bWJlcnM6Z2UuYS5ib29sLHNob3dZZWFyRHJvcGRvd246Z2UuYS5ib29sLGZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbjpnZS5hLmJvb2wsc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uOmdlLmEuYm9vbCxzdGFydERhdGU6Z2UuYS5vYmplY3Qsc3RhcnRPcGVuOmdlLmEuYm9vbCx0YWJJbmRleDpnZS5hLm51bWJlcix0aW1lQ2FwdGlvbjpnZS5hLnN0cmluZyx0aXRsZTpnZS5hLnN0cmluZyx0b2RheUJ1dHRvbjpnZS5hLnN0cmluZyx1c2VXZWVrZGF5c1Nob3J0OmdlLmEuYm9vbCx1dGNPZmZzZXQ6Z2UuYS5udW1iZXIsdmFsdWU6Z2UuYS5zdHJpbmcsd2Vla0xhYmVsOmdlLmEuc3RyaW5nLHdpdGhQb3J0YWw6Z2UuYS5ib29sLHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6Z2UuYS5udW1iZXIsc2hvdWxkQ2xvc2VPblNlbGVjdDpnZS5hLmJvb2wsc2hvd1RpbWVTZWxlY3Q6Z2UuYS5ib29sLHNob3dUaW1lU2VsZWN0T25seTpnZS5hLmJvb2wsdGltZUZvcm1hdDpnZS5hLnN0cmluZyx0aW1lSW50ZXJ2YWxzOmdlLmEubnVtYmVyLG1pblRpbWU6Z2UuYS5vYmplY3QsbWF4VGltZTpnZS5hLm9iamVjdCxleGNsdWRlVGltZXM6Z2UuYS5hcnJheSx1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjpnZS5hLmJvb2wsY2xlYXJCdXR0b25UaXRsZTpnZS5hLnN0cmluZ30sdC5kZWZhdWx0PUplfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tLWNvcmUvbGliL0RPTVByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oZSZ0KT09PXR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tLWNvcmUvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLHM9KG4oIi4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLHtNVVNUX1VTRV9QUk9QRVJUWToxLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX05VTUVSSUNfVkFMVUU6OCxIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRToyNCxIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFOjMyLGluamVjdERPTVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXMsbj1lLlByb3BlcnRpZXN8fHt9LGk9ZS5ET01BdHRyaWJ1dGVOYW1lc3BhY2VzfHx7fSxsPWUuRE9NQXR0cmlidXRlTmFtZXN8fHt9LHU9ZS5ET01Qcm9wZXJ0eU5hbWVzfHx7fSxjPWUuRE9NTXV0YXRpb25NZXRob2RzfHx7fTtlLmlzQ3VzdG9tQXR0cmlidXRlJiZhLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNoKGUuaXNDdXN0b21BdHRyaWJ1dGUpO2Zvcih2YXIgZCBpbiBuKXthLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoZCkmJm8oIjQ4IixkKTt2YXIgXz1kLnRvTG93ZXJDYXNlKCkscD1uW2RdLGY9e2F0dHJpYnV0ZU5hbWU6XyxhdHRyaWJ1dGVOYW1lc3BhY2U6bnVsbCxwcm9wZXJ0eU5hbWU6ZCxtdXRhdGlvbk1ldGhvZDpudWxsLG11c3RVc2VQcm9wZXJ0eTpyKHAsdC5NVVNUX1VTRV9QUk9QRVJUWSksaGFzQm9vbGVhblZhbHVlOnIocCx0LkhBU19CT09MRUFOX1ZBTFVFKSxoYXNOdW1lcmljVmFsdWU6cihwLHQuSEFTX05VTUVSSUNfVkFMVUUpLGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOnIocCx0LkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFKSxoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOnIocCx0LkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpfTtpZihmLmhhc0Jvb2xlYW5WYWx1ZStmLmhhc051bWVyaWNWYWx1ZStmLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU8PTF8fG8oIjUwIixkKSxsLmhhc093blByb3BlcnR5KGQpKXt2YXIgbT1sW2RdO2YuYXR0cmlidXRlTmFtZT1tfWkuaGFzT3duUHJvcGVydHkoZCkmJihmLmF0dHJpYnV0ZU5hbWVzcGFjZT1pW2RdKSx1Lmhhc093blByb3BlcnR5KGQpJiYoZi5wcm9wZXJ0eU5hbWU9dVtkXSksYy5oYXNPd25Qcm9wZXJ0eShkKSYmKGYubXV0YXRpb25NZXRob2Q9Y1tkXSksYS5wcm9wZXJ0aWVzW2RdPWZ9fX0pLGk9IjpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEIixhPXtJRF9BVFRSSUJVVEVfTkFNRToiZGF0YS1yZWFjdGlkIixST09UX0FUVFJJQlVURV9OQU1FOiJkYXRhLXJlYWN0cm9vdCIsQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjppLEFUVFJJQlVURV9OQU1FX0NIQVI6aSsiXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAiLHByb3BlcnRpZXM6e30sZ2V0UG9zc2libGVTdGFuZGFyZE5hbWU6bnVsbCxfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6W10saXNDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxhLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7dCsrKXtpZigoMCxhLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uc1t0XSkoZSkpcmV0dXJuITB9cmV0dXJuITF9LGluamVjdGlvbjpzfTtlLmV4cG9ydHM9YX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb3JlL2xpYi9IVE1MRE9NUHJvcGVydHlDb25maWcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tLWNvcmUvbGliL0RPTVByb3BlcnR5LmpzIiksbz1yLmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWSxzPXIuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFLGk9ci5pbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUUsYT1yLmluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxsPXIuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUsdT17aXNDdXN0b21BdHRyaWJ1dGU6UmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQobmV3IFJlZ0V4cCgiXihkYXRhfGFyaWEpLVsiK3IuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLFByb3BlcnRpZXM6e2FjY2VwdDowLGFjY2VwdENoYXJzZXQ6MCxhY2Nlc3NLZXk6MCxhY3Rpb246MCxhbGxvd0Z1bGxTY3JlZW46cyxhbGxvd1RyYW5zcGFyZW5jeTowLGFsdDowLGFzOjAsYXN5bmM6cyxhdXRvQ29tcGxldGU6MCxhdXRvUGxheTpzLGNhcHR1cmU6cyxjZWxsUGFkZGluZzowLGNlbGxTcGFjaW5nOjAsY2hhclNldDowLGNoYWxsZW5nZTowLGNoZWNrZWQ6b3xzLGNpdGU6MCxjbGFzc0lEOjAsY2xhc3NOYW1lOjAsY29sczphLGNvbFNwYW46MCxjb250ZW50OjAsY29udGVudEVkaXRhYmxlOjAsY29udGV4dE1lbnU6MCxjb250cm9sczpzLGNvbnRyb2xzTGlzdDowLGNvb3JkczowLGNyb3NzT3JpZ2luOjAsZGF0YTowLGRhdGVUaW1lOjAsZGVmYXVsdDpzLGRlZmVyOnMsZGlyOjAsZGlzYWJsZWQ6cyxkb3dubG9hZDpsLGRyYWdnYWJsZTowLGVuY1R5cGU6MCxmb3JtOjAsZm9ybUFjdGlvbjowLGZvcm1FbmNUeXBlOjAsZm9ybU1ldGhvZDowLGZvcm1Ob1ZhbGlkYXRlOnMsZm9ybVRhcmdldDowLGZyYW1lQm9yZGVyOjAsaGVhZGVyczowLGhlaWdodDowLGhpZGRlbjpzLGhpZ2g6MCxocmVmOjAsaHJlZkxhbmc6MCxodG1sRm9yOjAsaHR0cEVxdWl2OjAsaWNvbjowLGlkOjAsaW5wdXRNb2RlOjAsaW50ZWdyaXR5OjAsaXM6MCxrZXlQYXJhbXM6MCxrZXlUeXBlOjAsa2luZDowLGxhYmVsOjAsbGFuZzowLGxpc3Q6MCxsb29wOnMsbG93OjAsbWFuaWZlc3Q6MCxtYXJnaW5IZWlnaHQ6MCxtYXJnaW5XaWR0aDowLG1heDowLG1heExlbmd0aDowLG1lZGlhOjAsbWVkaWFHcm91cDowLG1ldGhvZDowLG1pbjowLG1pbkxlbmd0aDowLG11bHRpcGxlOm98cyxtdXRlZDpvfHMsbmFtZTowLG5vbmNlOjAsbm9WYWxpZGF0ZTpzLG9wZW46cyxvcHRpbXVtOjAscGF0dGVybjowLHBsYWNlaG9sZGVyOjAscGxheXNJbmxpbmU6cyxwb3N0ZXI6MCxwcmVsb2FkOjAscHJvZmlsZTowLHJhZGlvR3JvdXA6MCxyZWFkT25seTpzLHJlZmVycmVyUG9saWN5OjAscmVsOjAscmVxdWlyZWQ6cyxyZXZlcnNlZDpzLHJvbGU6MCxyb3dzOmEscm93U3BhbjppLHNhbmRib3g6MCxzY29wZTowLHNjb3BlZDpzLHNjcm9sbGluZzowLHNlYW1sZXNzOnMsc2VsZWN0ZWQ6b3xzLHNoYXBlOjAsc2l6ZTphLHNpemVzOjAsc3BhbjphLHNwZWxsQ2hlY2s6MCxzcmM6MCxzcmNEb2M6MCxzcmNMYW5nOjAsc3JjU2V0OjAsc3RhcnQ6aSxzdGVwOjAsc3R5bGU6MCxzdW1tYXJ5OjAsdGFiSW5kZXg6MCx0YXJnZXQ6MCx0aXRsZTowLHR5cGU6MCx1c2VNYXA6MCx2YWx1ZTowLHdpZHRoOjAsd21vZGU6MCx3cmFwOjAsYWJvdXQ6MCxkYXRhdHlwZTowLGlubGlzdDowLHByZWZpeDowLHByb3BlcnR5OjAscmVzb3VyY2U6MCx0eXBlb2Y6MCx2b2NhYjowLGF1dG9DYXBpdGFsaXplOjAsYXV0b0NvcnJlY3Q6MCxhdXRvU2F2ZTowLGNvbG9yOjAsaXRlbVByb3A6MCxpdGVtU2NvcGU6cyxpdGVtVHlwZTowLGl0ZW1JRDowLGl0ZW1SZWY6MCxyZXN1bHRzOjAsc2VjdXJpdHk6MCx1bnNlbGVjdGFibGU6MH0sRE9NQXR0cmlidXRlTmFtZXM6e2FjY2VwdENoYXJzZXQ6ImFjY2VwdC1jaGFyc2V0IixjbGFzc05hbWU6ImNsYXNzIixodG1sRm9yOiJmb3IiLGh0dHBFcXVpdjoiaHR0cC1lcXVpdiJ9LERPTVByb3BlcnR5TmFtZXM6e30sRE9NTXV0YXRpb25NZXRob2RzOnt2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PXQpcmV0dXJuIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOyJudW1iZXIiIT09ZS50eXBlfHwhMT09PWUuaGFzQXR0cmlidXRlKCJ2YWx1ZSIpP2Uuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrdCk6ZS52YWxpZGl0eSYmIWUudmFsaWRpdHkuYmFkSW5wdXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZSYmZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KX19fTtlLmV4cG9ydHM9dX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb3JlL2xpYi9TVkdET01Qcm9wZXJ0eUNvbmZpZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17eGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIn0sbz17YWNjZW50SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhY2N1bXVsYXRlOjAsYWRkaXRpdmU6MCxhbGlnbm1lbnRCYXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhbGxvd1Jlb3JkZXI6ImFsbG93UmVvcmRlciIsYWxwaGFiZXRpYzowLGFtcGxpdHVkZTowLGFyYWJpY0Zvcm06ImFyYWJpYy1mb3JtIixhc2NlbnQ6MCxhdHRyaWJ1dGVOYW1lOiJhdHRyaWJ1dGVOYW1lIixhdHRyaWJ1dGVUeXBlOiJhdHRyaWJ1dGVUeXBlIixhdXRvUmV2ZXJzZToiYXV0b1JldmVyc2UiLGF6aW11dGg6MCxiYXNlRnJlcXVlbmN5OiJiYXNlRnJlcXVlbmN5IixiYXNlUHJvZmlsZToiYmFzZVByb2ZpbGUiLGJhc2VsaW5lU2hpZnQ6ImJhc2VsaW5lLXNoaWZ0IixiYm94OjAsYmVnaW46MCxiaWFzOjAsYnk6MCxjYWxjTW9kZToiY2FsY01vZGUiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xpcDowLGNsaXBQYXRoOiJjbGlwLXBhdGgiLGNsaXBSdWxlOiJjbGlwLXJ1bGUiLGNsaXBQYXRoVW5pdHM6ImNsaXBQYXRoVW5pdHMiLGNvbG9ySW50ZXJwb2xhdGlvbjoiY29sb3ItaW50ZXJwb2xhdGlvbiIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIixjb2xvclByb2ZpbGU6ImNvbG9yLXByb2ZpbGUiLGNvbG9yUmVuZGVyaW5nOiJjb2xvci1yZW5kZXJpbmciLGNvbnRlbnRTY3JpcHRUeXBlOiJjb250ZW50U2NyaXB0VHlwZSIsY29udGVudFN0eWxlVHlwZToiY29udGVudFN0eWxlVHlwZSIsY3Vyc29yOjAsY3g6MCxjeTowLGQ6MCxkZWNlbGVyYXRlOjAsZGVzY2VudDowLGRpZmZ1c2VDb25zdGFudDoiZGlmZnVzZUNvbnN0YW50IixkaXJlY3Rpb246MCxkaXNwbGF5OjAsZGl2aXNvcjowLGRvbWluYW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixkdXI6MCxkeDowLGR5OjAsZWRnZU1vZGU6ImVkZ2VNb2RlIixlbGV2YXRpb246MCxlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3VuZCIsZW5kOjAsZXhwb25lbnQ6MCxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIixmaWxsOjAsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1bGU6ImZpbGwtcnVsZSIsZmlsdGVyOjAsZmlsdGVyUmVzOiJmaWx0ZXJSZXMiLGZpbHRlclVuaXRzOiJmaWx0ZXJVbml0cyIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxvb2Qtb3BhY2l0eSIsZm9jdXNhYmxlOjAsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXplOiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRjaDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0Iixmb3JtYXQ6MCxmcm9tOjAsZng6MCxmeTowLGcxOjAsZzI6MCxnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixnbHlwaFJlZjoiZ2x5cGhSZWYiLGdyYWRpZW50VHJhbnNmb3JtOiJncmFkaWVudFRyYW5zZm9ybSIsZ3JhZGllbnRVbml0czoiZ3JhZGllbnRVbml0cyIsaGFuZ2luZzowLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoiaG9yaXotb3JpZ2luLXgiLGlkZW9ncmFwaGljOjAsaW1hZ2VSZW5kZXJpbmc6ImltYWdlLXJlbmRlcmluZyIsaW46MCxpbjI6MCxpbnRlcmNlcHQ6MCxrOjAsazE6MCxrMjowLGszOjAsazQ6MCxrZXJuZWxNYXRyaXg6Imtlcm5lbE1hdHJpeCIsa2VybmVsVW5pdExlbmd0aDoia2VybmVsVW5pdExlbmd0aCIsa2VybmluZzowLGtleVBvaW50czoia2V5UG9pbnRzIixrZXlTcGxpbmVzOiJrZXlTcGxpbmVzIixrZXlUaW1lczoia2V5VGltZXMiLGxlbmd0aEFkanVzdDoibGVuZ3RoQWRqdXN0IixsZXR0ZXJTcGFjaW5nOiJsZXR0ZXItc3BhY2luZyIsbGlnaHRpbmdDb2xvcjoibGlnaHRpbmctY29sb3IiLGxpbWl0aW5nQ29uZUFuZ2xlOiJsaW1pdGluZ0NvbmVBbmdsZSIsbG9jYWw6MCxtYXJrZXJFbmQ6Im1hcmtlci1lbmQiLG1hcmtlck1pZDoibWFya2VyLW1pZCIsbWFya2VyU3RhcnQ6Im1hcmtlci1zdGFydCIsbWFya2VySGVpZ2h0OiJtYXJrZXJIZWlnaHQiLG1hcmtlclVuaXRzOiJtYXJrZXJVbml0cyIsbWFya2VyV2lkdGg6Im1hcmtlcldpZHRoIixtYXNrOjAsbWFza0NvbnRlbnRVbml0czoibWFza0NvbnRlbnRVbml0cyIsbWFza1VuaXRzOiJtYXNrVW5pdHMiLG1hdGhlbWF0aWNhbDowLG1vZGU6MCxudW1PY3RhdmVzOiJudW1PY3RhdmVzIixvZmZzZXQ6MCxvcGFjaXR5OjAsb3BlcmF0b3I6MCxvcmRlcjowLG9yaWVudDowLG9yaWVudGF0aW9uOjAsb3JpZ2luOjAsb3ZlcmZsb3c6MCxvdmVybGluZVBvc2l0aW9uOiJvdmVybGluZS1wb3NpdGlvbiIsb3ZlcmxpbmVUaGlja25lc3M6Im92ZXJsaW5lLXRoaWNrbmVzcyIscGFpbnRPcmRlcjoicGFpbnQtb3JkZXIiLHBhbm9zZTE6InBhbm9zZS0xIixwYXRoTGVuZ3RoOiJwYXRoTGVuZ3RoIixwYXR0ZXJuQ29udGVudFVuaXRzOiJwYXR0ZXJuQ29udGVudFVuaXRzIixwYXR0ZXJuVHJhbnNmb3JtOiJwYXR0ZXJuVHJhbnNmb3JtIixwYXR0ZXJuVW5pdHM6InBhdHRlcm5Vbml0cyIscG9pbnRlckV2ZW50czoicG9pbnRlci1ldmVudHMiLHBvaW50czowLHBvaW50c0F0WDoicG9pbnRzQXRYIixwb2ludHNBdFk6InBvaW50c0F0WSIscG9pbnRzQXRaOiJwb2ludHNBdFoiLHByZXNlcnZlQWxwaGE6InByZXNlcnZlQWxwaGEiLHByZXNlcnZlQXNwZWN0UmF0aW86InByZXNlcnZlQXNwZWN0UmF0aW8iLHByaW1pdGl2ZVVuaXRzOiJwcmltaXRpdmVVbml0cyIscjowLHJhZGl1czowLHJlZlg6InJlZlgiLHJlZlk6InJlZlkiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5nLWludGVudCIscmVwZWF0Q291bnQ6InJlcGVhdENvdW50IixyZXBlYXREdXI6InJlcGVhdER1ciIscmVxdWlyZWRFeHRlbnNpb25zOiJyZXF1aXJlZEV4dGVuc2lvbnMiLHJlcXVpcmVkRmVhdHVyZXM6InJlcXVpcmVkRmVhdHVyZXMiLHJlc3RhcnQ6MCxyZXN1bHQ6MCxyb3RhdGU6MCxyeDowLHJ5OjAsc2NhbGU6MCxzZWVkOjAsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc2xvcGU6MCxzcGFjaW5nOjAsc3BlY3VsYXJDb25zdGFudDoic3BlY3VsYXJDb25zdGFudCIsc3BlY3VsYXJFeHBvbmVudDoic3BlY3VsYXJFeHBvbmVudCIsc3BlZWQ6MCxzcHJlYWRNZXRob2Q6InNwcmVhZE1ldGhvZCIsc3RhcnRPZmZzZXQ6InN0YXJ0T2Zmc2V0IixzdGREZXZpYXRpb246InN0ZERldmlhdGlvbiIsc3RlbWg6MCxzdGVtdjowLHN0aXRjaFRpbGVzOiJzdGl0Y2hUaWxlcyIsc3RvcENvbG9yOiJzdG9wLWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIixzdHJpbmc6MCxzdHJva2U6MCxzdHJva2VEYXNoYXJyYXk6InN0cm9rZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hvZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VMaW5lY2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZWpvaW46InN0cm9rZS1saW5lam9pbiIsc3Ryb2tlTWl0ZXJsaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9rZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIixzdXJmYWNlU2NhbGU6InN1cmZhY2VTY2FsZSIsc3lzdGVtTGFuZ3VhZ2U6InN5c3RlbUxhbmd1YWdlIix0YWJsZVZhbHVlczoidGFibGVWYWx1ZXMiLHRhcmdldFg6InRhcmdldFgiLHRhcmdldFk6InRhcmdldFkiLHRleHRBbmNob3I6InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVyaW5nOiJ0ZXh0LXJlbmRlcmluZyIsdGV4dExlbmd0aDoidGV4dExlbmd0aCIsdG86MCx0cmFuc2Zvcm06MCx1MTowLHUyOjAsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5kZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlOjAsdW5pY29kZUJpZGk6InVuaWNvZGUtYmlkaSIsdW5pY29kZVJhbmdlOiJ1bmljb2RlLXJhbmdlIix1bml0c1BlckVtOiJ1bml0cy1wZXItZW0iLHZBbHBoYWJldGljOiJ2LWFscGhhYmV0aWMiLHZIYW5naW5nOiJ2LWhhbmdpbmciLHZJZGVvZ3JhcGhpYzoidi1pZGVvZ3JhcGhpYyIsdk1hdGhlbWF0aWNhbDoidi1tYXRoZW1hdGljYWwiLHZhbHVlczowLHZlY3RvckVmZmVjdDoidmVjdG9yLWVmZmVjdCIsdmVyc2lvbjowLHZlcnRBZHZZOiJ2ZXJ0LWFkdi15Iix2ZXJ0T3JpZ2luWDoidmVydC1vcmlnaW4teCIsdmVydE9yaWdpblk6InZlcnQtb3JpZ2luLXkiLHZpZXdCb3g6InZpZXdCb3giLHZpZXdUYXJnZXQ6InZpZXdUYXJnZXQiLHZpc2liaWxpdHk6MCx3aWR0aHM6MCx3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4OjAseEhlaWdodDoieC1oZWlnaHQiLHgxOjAseDI6MCx4Q2hhbm5lbFNlbGVjdG9yOiJ4Q2hhbm5lbFNlbGVjdG9yIix4bGlua0FjdHVhdGU6InhsaW5rOmFjdHVhdGUiLHhsaW5rQXJjcm9sZToieGxpbms6YXJjcm9sZSIseGxpbmtIcmVmOiJ4bGluazpocmVmIix4bGlua1JvbGU6InhsaW5rOnJvbGUiLHhsaW5rU2hvdzoieGxpbms6c2hvdyIseGxpbmtUaXRsZToieGxpbms6dGl0bGUiLHhsaW5rVHlwZToieGxpbms6dHlwZSIseG1sQmFzZToieG1sOmJhc2UiLHhtbG5zOjAseG1sbnNYbGluazoieG1sbnM6eGxpbmsiLHhtbExhbmc6InhtbDpsYW5nIix4bWxTcGFjZToieG1sOnNwYWNlIix5OjAseTE6MCx5MjowLHlDaGFubmVsU2VsZWN0b3I6InlDaGFubmVsU2VsZWN0b3IiLHo6MCx6b29tQW5kUGFuOiJ6b29tQW5kUGFuIn0scz17UHJvcGVydGllczp7fSxET01BdHRyaWJ1dGVOYW1lc3BhY2VzOnt4bGlua0FjdHVhdGU6ci54bGluayx4bGlua0FyY3JvbGU6ci54bGluayx4bGlua0hyZWY6ci54bGluayx4bGlua1JvbGU6ci54bGluayx4bGlua1Nob3c6ci54bGluayx4bGlua1RpdGxlOnIueGxpbmsseGxpbmtUeXBlOnIueGxpbmsseG1sQmFzZTpyLnhtbCx4bWxMYW5nOnIueG1sLHhtbFNwYWNlOnIueG1sfSxET01BdHRyaWJ1dGVOYW1lczp7fX07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtzLlByb3BlcnRpZXNbZV09MCxvW2VdJiYocy5ET01BdHRyaWJ1dGVOYW1lc1tlXT1vW2VdKX0pLGUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tLWNvcmUvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKyspbis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89bmV3IEVycm9yKG4pO3Rocm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNUb1BvcD0xLG99ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1zZXJ2ZXIuYnJvd3Nlci5wcm9kdWN0aW9uLm1pbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyxzLGksYSl7aWYoIWUpe2lmKGU9dm9pZCAwLHZvaWQgMD09PXQpZT1FcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBsPVtuLHIsbyxzLGksYV0sdT0wO2U9RXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGxbdSsrXX0pKSxlLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IGUuZnJhbWVzVG9Qb3A9MSxlfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLG89MDtvPHQ7bysrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tvKzFdKTtyKCExLCJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICVzIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4gIixuKX1mdW5jdGlvbiBzKGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7c3dpdGNoKGUpe2Nhc2UgUzpyZXR1cm4iQ29uY3VycmVudE1vZGUiO2Nhc2UgdjpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgeTpyZXR1cm4iUG9ydGFsIjtjYXNlIEE6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIFQ6cmV0dXJuIlN0cmljdE1vZGUiO2Nhc2UgajpyZXR1cm4iU3VzcGVuc2UifWlmKCJvYmplY3QiPT10eXBlb2YgZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBPOnJldHVybiJDb250ZXh0LkNvbnN1bWVyIjtjYXNlIEM6cmV0dXJuIkNvbnRleHQuUHJvdmlkZXIiO2Nhc2UgUjp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gdD10LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fCIiLGUuZGlzcGxheU5hbWV8fCgiIiE9PXQ/IkZvcndhcmRSZWYoIit0KyIpIjoiRm9yd2FyZFJlZiIpO2Nhc2UgeDpyZXR1cm4gcyhlLnR5cGUpO2Nhc2UgTDppZihlPTE9PT1lLl9zdGF0dXM/ZS5fcmVzdWx0Om51bGwpcmV0dXJuIHMoZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaShlKXtyZXR1cm4hIU0uY2FsbChJLGUpfHwhTS5jYWxsKGssZSkmJih3LnRlc3QoZSk/SVtlXT0hMDooa1tlXT0hMCwhMSkpfWZ1bmN0aW9uIGEoZSx0LG4scil7aWYobnVsbCE9PW4mJjA9PT1uLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hciYmKG51bGwhPT1uPyFuLmFjY2VwdHNCb29sZWFuczoiZGF0YS0iIT09KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSkpJiYiYXJpYS0iIT09ZSk7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gbChlLHQsbixyKXtpZihudWxsPT09dHx8dm9pZCAwPT09dHx8YShlLHQsbixyKSlyZXR1cm4hMDtpZihyKXJldHVybiExO2lmKG51bGwhPT1uKXN3aXRjaChuLnR5cGUpe2Nhc2UgMzpyZXR1cm4hdDtjYXNlIDQ6cmV0dXJuITE9PT10O2Nhc2UgNTpyZXR1cm4gaXNOYU4odCk7Y2FzZSA2OnJldHVybiBpc05hTih0KXx8MT50fXJldHVybiExfWZ1bmN0aW9uIHUoZSx0LG4scixvKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09dHx8Mz09PXR8fDQ9PT10LHRoaXMuYXR0cmlidXRlTmFtZT1yLHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlPW8sdGhpcy5tdXN0VXNlUHJvcGVydHk9bix0aGlzLnByb3BlcnR5TmFtZT1lLHRoaXMudHlwZT10fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX1mdW5jdGlvbiBkKGUpe2lmKCJib29sZWFuIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4iIitlO2U9IiIrZTt2YXIgdD1ILmV4ZWMoZSk7aWYodCl7dmFyIG4scj0iIixvPTA7Zm9yKG49dC5pbmRleDtuPGUubGVuZ3RoO24rKyl7c3dpdGNoKGUuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDp0PSImcXVvdDsiO2JyZWFrO2Nhc2UgMzg6dD0iJmFtcDsiO2JyZWFrO2Nhc2UgMzk6dD0iJiN4Mjc7IjticmVhaztjYXNlIDYwOnQ9IiZsdDsiO2JyZWFrO2Nhc2UgNjI6dD0iJmd0OyI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1vIT09biYmKHIrPWUuc3Vic3RyaW5nKG8sbikpLG89bisxLHIrPXR9ZT1vIT09bj9yK2Uuc3Vic3RyaW5nKG8sbik6cn1yZXR1cm4gZX1mdW5jdGlvbiBfKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gcChlKXtpZih2b2lkIDA9PT1lfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgdD0iIjtyZXR1cm4gYi5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24oZSl7bnVsbCE9ZSYmKHQrPWUpfSksdH1mdW5jdGlvbiBmKGUsdCl7dmFyIG49ZS5jb250ZXh0VHlwZTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKXJldHVybiBuLl9jdXJyZW50VmFsdWU7aWYoZT1lLmNvbnRleHRUeXBlcyl7bj17fTtmb3IodmFyIHIgaW4gZSluW3JdPXRbcl07dD1ufWVsc2UgdD1aO3JldHVybiB0fWZ1bmN0aW9uIG0oZSx0KXt2b2lkIDA9PT1lJiZvKCIxNTIiLHModCl8fCJDb21wb25lbnQiKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDtiLmlzVmFsaWRFbGVtZW50KGUpOyl7dmFyIG49ZSxyPW4udHlwZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgcilicmVhazshZnVuY3Rpb24obixyKXt2YXIgaT1mKHIsdCksYT1bXSxsPSExLHU9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbH0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQpe2w9ITAsYT1bdF19LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO2EucHVzaCh0KX19LGM9dm9pZCAwO2lmKHIucHJvdG90eXBlJiZyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KXtpZihjPW5ldyByKG4ucHJvcHMsaSx1KSwiZnVuY3Rpb24iPT10eXBlb2Ygci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpe3ZhciBkPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLmNhbGwobnVsbCxuLnByb3BzLGMuc3RhdGUpO251bGwhPWQmJihjLnN0YXRlPWcoe30sYy5zdGF0ZSxkKSl9fWVsc2UgaWYobnVsbD09KGM9cihuLnByb3BzLGksdSkpfHxudWxsPT1jLnJlbmRlcilyZXR1cm4gZT1jLHZvaWQgbShlLHIpO2lmKGMucHJvcHM9bi5wcm9wcyxjLmNvbnRleHQ9aSxjLnVwZGF0ZXI9dSx1PWMuc3RhdGUsdm9pZCAwPT09dSYmKGMuc3RhdGU9dT1udWxsKSwiZnVuY3Rpb24iPT10eXBlb2YgYy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50fHwiZnVuY3Rpb24iPT10eXBlb2YgYy5jb21wb25lbnRXaWxsTW91bnQpaWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2Ygci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJmMuY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIGMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmImZ1bmN0aW9uIiE9dHlwZW9mIHIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZjLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxhLmxlbmd0aCl7dT1hO3ZhciBfPWw7aWYoYT1udWxsLGw9ITEsXyYmMT09PXUubGVuZ3RoKWMuc3RhdGU9dVswXTtlbHNle2Q9Xz91WzBdOmMuc3RhdGU7dmFyIHA9ITA7Zm9yKF89Xz8xOjA7Xzx1Lmxlbmd0aDtfKyspe3ZhciBoPXVbX107bnVsbCE9KGg9ImZ1bmN0aW9uIj09dHlwZW9mIGg/aC5jYWxsKGMsZCxuLnByb3BzLGkpOmgpJiYocD8ocD0hMSxkPWcoe30sZCxoKSk6ZyhkLGgpKX1jLnN0YXRlPWR9fWVsc2UgYT1udWxsO2lmKGU9Yy5yZW5kZXIoKSxtKGUsciksbj12b2lkIDAsImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0Q2hpbGRDb250ZXh0JiYib2JqZWN0Ij09dHlwZW9mKGk9ci5jaGlsZENvbnRleHRUeXBlcykpe249Yy5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGIgaW4gbiliIGluIGl8fG8oIjEwOCIscyhyKXx8IlVua25vd24iLGIpfW4mJih0PWcoe30sdCxuKSl9KG4scil9cmV0dXJue2NoaWxkOmUsY29udGV4dDp0fX0vKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjYuMAogKiByZWFjdC1kb20tc2VydmVyLmJyb3dzZXIucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqLwp2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcix5PUU/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsdj1FP1N5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik6NjAxMDcsVD1FP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsQT1FP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQsQz1FP1N5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIik6NjAxMDksTz1FP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxTPUU/U3ltYm9sLmZvcigicmVhY3QuY29uY3VycmVudF9tb2RlIik6NjAxMTEsUj1FP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsaj1FP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMseD1FP1N5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKTo2MDExNSxMPUU/U3ltYm9sLmZvcigicmVhY3QubGF6eSIpOjYwMTE2LEQ9Yi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCx3PS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8sTT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGs9e30sST17fSxQPXt9OyJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtQW2VdPW5ldyB1KGUsMCwhMSxlLG51bGwpfSksW1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07UFt0XT1uZXcgdSh0LDEsITEsZVsxXSxudWxsKX0pLFsiY29udGVudEVkaXRhYmxlIiwiZHJhZ2dhYmxlIiwic3BlbGxDaGVjayIsInZhbHVlIl0uZm9yRWFjaChmdW5jdGlvbihlKXtQW2VdPW5ldyB1KGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCl9KSxbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1BbZV09bmV3IHUoZSwyLCExLGUsbnVsbCl9KSwiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7UFtlXT1uZXcgdShlLDMsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSksWyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtQW2VdPW5ldyB1KGUsMywhMCxlLG51bGwpfSksWyJjYXB0dXJlIiwiZG93bmxvYWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1BbZV09bmV3IHUoZSw0LCExLGUsbnVsbCl9KSxbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1BbZV09bmV3IHUoZSw2LCExLGUsbnVsbCl9KSxbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24oZSl7UFtlXT1uZXcgdShlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSk7dmFyIE49L1tcLTpdKFthLXpdKS9nOyJhY2NlbnQtaGVpZ2h0IGFsaWdubWVudC1iYXNlbGluZSBhcmFiaWMtZm9ybSBiYXNlbGluZS1zaGlmdCBjYXAtaGVpZ2h0IGNsaXAtcGF0aCBjbGlwLXJ1bGUgY29sb3ItaW50ZXJwb2xhdGlvbiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMgY29sb3ItcHJvZmlsZSBjb2xvci1yZW5kZXJpbmcgZG9taW5hbnQtYmFzZWxpbmUgZW5hYmxlLWJhY2tncm91bmQgZmlsbC1vcGFjaXR5IGZpbGwtcnVsZSBmbG9vZC1jb2xvciBmbG9vZC1vcGFjaXR5IGZvbnQtZmFtaWx5IGZvbnQtc2l6ZSBmb250LXNpemUtYWRqdXN0IGZvbnQtc3RyZXRjaCBmb250LXN0eWxlIGZvbnQtdmFyaWFudCBmb250LXdlaWdodCBnbHlwaC1uYW1lIGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwgZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwgaG9yaXotYWR2LXggaG9yaXotb3JpZ2luLXggaW1hZ2UtcmVuZGVyaW5nIGxldHRlci1zcGFjaW5nIGxpZ2h0aW5nLWNvbG9yIG1hcmtlci1lbmQgbWFya2VyLW1pZCBtYXJrZXItc3RhcnQgb3ZlcmxpbmUtcG9zaXRpb24gb3ZlcmxpbmUtdGhpY2tuZXNzIHBhaW50LW9yZGVyIHBhbm9zZS0xIHBvaW50ZXItZXZlbnRzIHJlbmRlcmluZy1pbnRlbnQgc2hhcGUtcmVuZGVyaW5nIHN0b3AtY29sb3Igc3RvcC1vcGFjaXR5IHN0cmlrZXRocm91Z2gtcG9zaXRpb24gc3RyaWtldGhyb3VnaC10aGlja25lc3Mgc3Ryb2tlLWRhc2hhcnJheSBzdHJva2UtZGFzaG9mZnNldCBzdHJva2UtbGluZWNhcCBzdHJva2UtbGluZWpvaW4gc3Ryb2tlLW1pdGVybGltaXQgc3Ryb2tlLW9wYWNpdHkgc3Ryb2tlLXdpZHRoIHRleHQtYW5jaG9yIHRleHQtZGVjb3JhdGlvbiB0ZXh0LXJlbmRlcmluZyB1bmRlcmxpbmUtcG9zaXRpb24gdW5kZXJsaW5lLXRoaWNrbmVzcyB1bmljb2RlLWJpZGkgdW5pY29kZS1yYW5nZSB1bml0cy1wZXItZW0gdi1hbHBoYWJldGljIHYtaGFuZ2luZyB2LWlkZW9ncmFwaGljIHYtbWF0aGVtYXRpY2FsIHZlY3Rvci1lZmZlY3QgdmVydC1hZHYteSB2ZXJ0LW9yaWdpbi14IHZlcnQtb3JpZ2luLXkgd29yZC1zcGFjaW5nIHdyaXRpbmctbW9kZSB4bWxuczp4bGluayB4LWhlaWdodCIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShOLGMpO1BbdF09bmV3IHUodCwxLCExLGUsbnVsbCl9KSwieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOmhyZWYgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoTixjKTtQW3RdPW5ldyB1KHQsMSwhMSxlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIil9KSxbInhtbDpiYXNlIiwieG1sOmxhbmciLCJ4bWw6c3BhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShOLGMpO1BbdF09bmV3IHUodCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIpfSksUC50YWJJbmRleD1uZXcgdSgidGFiSW5kZXgiLDEsITEsInRhYmluZGV4IixudWxsKTt2YXIgSD0vWyInJjw+XS8sRj17aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbWF0aG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn0sQj17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxVPWcoe21lbnVpdGVtOiEwfSxCKSxHPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSx6PVsiV2Via2l0IiwibXMiLCJNb3oiLCJPIl07T2JqZWN0LmtleXMoRykuZm9yRWFjaChmdW5jdGlvbihlKXt6LmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksR1t0XT1HW2VdfSl9KTt2YXIgVj0vKFtBLVpdKS9nLFc9L15tcy0vLFk9Yi5DaGlsZHJlbi50b0FycmF5LHE9RC5SZWFjdEN1cnJlbnRPd25lcixLPXtyZWFkQ29udGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gZS5fY3VycmVudFZhbHVlfX0sWD17bGlzdGluZzohMCxwcmU6ITAsdGV4dGFyZWE6ITB9LCQ9L15bYS16QS1aXVthLXpBLVo6X1wuXC1cZF0qJC8sUT17fSxKPXt9LFo9e30sZWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx0ZT17Y2hpbGRyZW46bnVsbCxkYW5nZXJvdXNseVNldElubmVySFRNTDpudWxsLHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzpudWxsLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzpudWxsfSxuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTtiLmlzVmFsaWRFbGVtZW50KHQpP3QudHlwZSE9PXY/dD1bdF06KHQ9dC5wcm9wcy5jaGlsZHJlbix0PWIuaXNWYWxpZEVsZW1lbnQodCk/W3RdOlkodCkpOnQ9WSh0KSx0aGlzLnN0YWNrPVt7dHlwZTpudWxsLGRvbU5hbWVzcGFjZTpGLmh0bWwsY2hpbGRyZW46dCxjaGlsZEluZGV4OjAsY29udGV4dDpaLGZvb3RlcjoiIn1dLHRoaXMuZXhoYXVzdGVkPSExLHRoaXMuY3VycmVudFNlbGVjdFZhbHVlPW51bGwsdGhpcy5wcmV2aW91c1dhc1RleHROb2RlPSExLHRoaXMubWFrZVN0YXRpY01hcmt1cD1uLHRoaXMuY29udGV4dEluZGV4PS0xLHRoaXMuY29udGV4dFN0YWNrPVtdLHRoaXMuY29udGV4dFZhbHVlU3RhY2s9W119cmV0dXJuIGUucHJvdG90eXBlLnB1c2hQcm92aWRlcj1mdW5jdGlvbihlKXt2YXIgdD0rK3RoaXMuY29udGV4dEluZGV4LG49ZS50eXBlLl9jb250ZXh0LHI9bi5fY3VycmVudFZhbHVlO3RoaXMuY29udGV4dFN0YWNrW3RdPW4sdGhpcy5jb250ZXh0VmFsdWVTdGFja1t0XT1yLG4uX2N1cnJlbnRWYWx1ZT1lLnByb3BzLnZhbHVlfSxlLnByb3RvdHlwZS5wb3BQcm92aWRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dEluZGV4LHQ9dGhpcy5jb250ZXh0U3RhY2tbZV0sbj10aGlzLmNvbnRleHRWYWx1ZVN0YWNrW2VdO3RoaXMuY29udGV4dFN0YWNrW2VdPW51bGwsdGhpcy5jb250ZXh0VmFsdWVTdGFja1tlXT1udWxsLHRoaXMuY29udGV4dEluZGV4LS0sdC5fY3VycmVudFZhbHVlPW59LGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5leGhhdXN0ZWQpcmV0dXJuIG51bGw7cS5jdXJyZW50RGlzcGF0Y2hlcj1LO3RyeXtmb3IodmFyIHQ9IiI7dC5sZW5ndGg8ZTspe2lmKDA9PT10aGlzLnN0YWNrLmxlbmd0aCl7dGhpcy5leGhhdXN0ZWQ9ITA7YnJlYWt9dmFyIG49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihuLmNoaWxkSW5kZXg+PW4uY2hpbGRyZW4ubGVuZ3RoKXt2YXIgcj1uLmZvb3Rlcjt0Kz1yLCIiIT09ciYmKHRoaXMucHJldmlvdXNXYXNUZXh0Tm9kZT0hMSksdGhpcy5zdGFjay5wb3AoKSwic2VsZWN0Ij09PW4udHlwZT90aGlzLmN1cnJlbnRTZWxlY3RWYWx1ZT1udWxsOm51bGwhPW4udHlwZSYmbnVsbCE9bi50eXBlLnR5cGUmJm4udHlwZS50eXBlLiQkdHlwZW9mPT09QyYmdGhpcy5wb3BQcm92aWRlcihuLnR5cGUpfWVsc2V7dmFyIG89bi5jaGlsZHJlbltuLmNoaWxkSW5kZXgrK107dCs9dGhpcy5yZW5kZXIobyxuLmNvbnRleHQsbi5kb21OYW1lc3BhY2UpfX1yZXR1cm4gdH1maW5hbGx5e3EuY3VycmVudERpc3BhdGNoZXI9bnVsbH19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIiI9PT0obj0iIitlKT8iIjp0aGlzLm1ha2VTdGF0aWNNYXJrdXA/ZChuKTp0aGlzLnByZXZpb3VzV2FzVGV4dE5vZGU/Ilx4M2MhLS0gLS1ceDNlIitkKG4pOih0aGlzLnByZXZpb3VzV2FzVGV4dE5vZGU9ITAsZChuKSk7aWYodD1oKGUsdCksZT10LmNoaWxkLHQ9dC5jb250ZXh0LG51bGw9PT1lfHwhMT09PWUpcmV0dXJuIiI7aWYoIWIuaXNWYWxpZEVsZW1lbnQoZSkpe2lmKG51bGwhPWUmJm51bGwhPWUuJCR0eXBlb2Ype3ZhciByPWUuJCR0eXBlb2Y7cj09PXkmJm8oIjI1NyIpLG8oIjI1OCIsci50b1N0cmluZygpKX1yZXR1cm4gZT1ZKGUpLHRoaXMuc3RhY2sucHVzaCh7dHlwZTpudWxsLGRvbU5hbWVzcGFjZTpuLGNoaWxkcmVuOmUsY2hpbGRJbmRleDowLGNvbnRleHQ6dCxmb290ZXI6IiJ9KSwiIn1pZigic3RyaW5nIj09dHlwZW9mKHI9ZS50eXBlKSlyZXR1cm4gdGhpcy5yZW5kZXJET00oZSx0LG4pO3N3aXRjaChyKXtjYXNlIFQ6Y2FzZSBTOmNhc2UgQTpjYXNlIHY6cmV0dXJuIGU9WShlLnByb3BzLmNoaWxkcmVuKSx0aGlzLnN0YWNrLnB1c2goe3R5cGU6bnVsbCxkb21OYW1lc3BhY2U6bixjaGlsZHJlbjplLGNoaWxkSW5kZXg6MCxjb250ZXh0OnQsZm9vdGVyOiIifSksIiI7Y2FzZSBqOm8oIjI5NCIpfWlmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXIpc3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgUjpyZXR1cm4gZT1ZKHIucmVuZGVyKGUucHJvcHMsZS5yZWYpKSx0aGlzLnN0YWNrLnB1c2goe3R5cGU6bnVsbCxkb21OYW1lc3BhY2U6bixjaGlsZHJlbjplLGNoaWxkSW5kZXg6MCxjb250ZXh0OnQsZm9vdGVyOiIifSksIiI7Y2FzZSB4OnJldHVybiBlPVtiLmNyZWF0ZUVsZW1lbnQoci50eXBlLGcoe3JlZjplLnJlZn0sZS5wcm9wcykpXSx0aGlzLnN0YWNrLnB1c2goe3R5cGU6bnVsbCxkb21OYW1lc3BhY2U6bixjaGlsZHJlbjplLGNoaWxkSW5kZXg6MCxjb250ZXh0OnQsZm9vdGVyOiIifSksIiI7Y2FzZSBDOnJldHVybiByPVkoZS5wcm9wcy5jaGlsZHJlbiksbj17dHlwZTplLGRvbU5hbWVzcGFjZTpuLGNoaWxkcmVuOnIsY2hpbGRJbmRleDowLGNvbnRleHQ6dCxmb290ZXI6IiJ9LHRoaXMucHVzaFByb3ZpZGVyKGUpLHRoaXMuc3RhY2sucHVzaChuKSwiIjtjYXNlIE86cmV0dXJuIHI9WShlLnByb3BzLmNoaWxkcmVuKGUudHlwZS5fY3VycmVudFZhbHVlKSksdGhpcy5zdGFjay5wdXNoKHt0eXBlOmUsZG9tTmFtZXNwYWNlOm4sY2hpbGRyZW46cixjaGlsZEluZGV4OjAsY29udGV4dDp0LGZvb3RlcjoiIn0pLCIiO2Nhc2UgTDpvKCIyOTUiKX1vKCIxMzAiLG51bGw9PXI/cjp0eXBlb2YgciwiIil9LGUucHJvdG90eXBlLnJlbmRlckRPTT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS50eXBlLnRvTG93ZXJDYXNlKCk7bj09PUYuaHRtbCYmXyhyKSxRLmhhc093blByb3BlcnR5KHIpfHwoJC50ZXN0KHIpfHxvKCI2NSIsciksUVtyXT0hMCk7dmFyIHM9ZS5wcm9wcztpZigiaW5wdXQiPT09cilzPWcoe3R5cGU6dm9pZCAwfSxzLHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1ZTpudWxsIT1zLnZhbHVlP3MudmFsdWU6cy5kZWZhdWx0VmFsdWUsY2hlY2tlZDpudWxsIT1zLmNoZWNrZWQ/cy5jaGVja2VkOnMuZGVmYXVsdENoZWNrZWR9KTtlbHNlIGlmKCJ0ZXh0YXJlYSI9PT1yKXt2YXIgYT1zLnZhbHVlO2lmKG51bGw9PWEpe2E9cy5kZWZhdWx0VmFsdWU7dmFyIHU9cy5jaGlsZHJlbjtudWxsIT11JiYobnVsbCE9YSYmbygiOTIiKSxBcnJheS5pc0FycmF5KHUpJiYoMT49dS5sZW5ndGh8fG8oIjkzIiksdT11WzBdKSxhPSIiK3UpLG51bGw9PWEmJihhPSIiKX1zPWcoe30scyx7dmFsdWU6dm9pZCAwLGNoaWxkcmVuOiIiK2F9KX1lbHNlIGlmKCJzZWxlY3QiPT09cil0aGlzLmN1cnJlbnRTZWxlY3RWYWx1ZT1udWxsIT1zLnZhbHVlP3MudmFsdWU6cy5kZWZhdWx0VmFsdWUscz1nKHt9LHMse3ZhbHVlOnZvaWQgMH0pO2Vsc2UgaWYoIm9wdGlvbiI9PT1yKXt1PXRoaXMuY3VycmVudFNlbGVjdFZhbHVlO3ZhciBjPXAocy5jaGlsZHJlbik7aWYobnVsbCE9dSl7dmFyIGY9bnVsbCE9cy52YWx1ZT9zLnZhbHVlKyIiOmM7aWYoYT0hMSxBcnJheS5pc0FycmF5KHUpKXtmb3IodmFyIG09MDttPHUubGVuZ3RoO20rKylpZigiIit1W21dPT09Zil7YT0hMDticmVha319ZWxzZSBhPSIiK3U9PT1mO3M9Zyh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZvaWQgMH0scyx7c2VsZWN0ZWQ6YSxjaGlsZHJlbjpjfSl9fShhPXMpJiYoVVtyXSYmKG51bGwhPWEuY2hpbGRyZW58fG51bGwhPWEuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZvKCIxMzciLHIsIiIpLG51bGwhPWEuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJihudWxsIT1hLmNoaWxkcmVuJiZvKCI2MCIpLCJvYmplY3QiPT10eXBlb2YgYS5kYW5nZXJvdXNseVNldElubmVySFRNTCYmIl9faHRtbCJpbiBhLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfHxvKCI2MSIpKSxudWxsIT1hLnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIGEuc3R5bGUmJm8oIjYyIiwiIikpLGE9cyx1PXRoaXMubWFrZVN0YXRpY01hcmt1cCxjPTE9PT10aGlzLnN0YWNrLmxlbmd0aCxmPSI8IitlLnR5cGU7Zm9yKEMgaW4gYSlpZihlZS5jYWxsKGEsQykpe3ZhciBoPWFbQ107aWYobnVsbCE9aCl7aWYoInN0eWxlIj09PUMpe209dm9pZCAwO3ZhciBiPSIiLEU9IiI7Zm9yKG0gaW4gaClpZihoLmhhc093blByb3BlcnR5KG0pKXt2YXIgeT0wPT09bS5pbmRleE9mKCItLSIpLHY9aFttXTtpZihudWxsIT12KXt2YXIgVD1tO2lmKEouaGFzT3duUHJvcGVydHkoVCkpVD1KW1RdO2Vsc2V7dmFyIEE9VC5yZXBsYWNlKFYsIi0kMSIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShXLCItbXMtIik7VD1KW1RdPUF9Yis9RStUKyI6IixFPW0seT1udWxsPT12fHwiYm9vbGVhbiI9PXR5cGVvZiB2fHwiIj09PXY/IiI6eXx8Im51bWJlciIhPXR5cGVvZiB2fHwwPT09dnx8Ry5oYXNPd25Qcm9wZXJ0eShFKSYmR1tFXT8oIiIrdikudHJpbSgpOnYrInB4IixiKz15LEU9IjsifX1oPWJ8fG51bGx9bT1udWxsO2U6aWYoeT1yLHY9YSwtMT09PXkuaW5kZXhPZigiLSIpKXk9InN0cmluZyI9PXR5cGVvZiB2LmlzO2Vsc2Ugc3dpdGNoKHkpe2Nhc2UiYW5ub3RhdGlvbi14bWwiOmNhc2UiY29sb3ItcHJvZmlsZSI6Y2FzZSJmb250LWZhY2UiOmNhc2UiZm9udC1mYWNlLXNyYyI6Y2FzZSJmb250LWZhY2UtdXJpIjpjYXNlImZvbnQtZmFjZS1mb3JtYXQiOmNhc2UiZm9udC1mYWNlLW5hbWUiOmNhc2UibWlzc2luZy1nbHlwaCI6eT0hMTticmVhayBlO2RlZmF1bHQ6eT0hMH15P3RlLmhhc093blByb3BlcnR5KEMpfHwobT1DLG09aShtKSYmbnVsbCE9aD9tKyc9IicrZChoKSsnIic6IiIpOih5PUMsbT1oLGg9UC5oYXNPd25Qcm9wZXJ0eSh5KT9QW3ldOm51bGwsKHY9InN0eWxlIiE9PXkpJiYodj1udWxsIT09aD8wPT09aC50eXBlOjI8eS5sZW5ndGgmJigibyI9PT15WzBdfHwiTyI9PT15WzBdKSYmKCJuIj09PXlbMV18fCJOIj09PXlbMV0pKSx2fHxsKHksbSxoLCExKT9tPSIiOm51bGwhPT1oPyh5PWguYXR0cmlidXRlTmFtZSxoPWgudHlwZSxtPTM9PT1ofHw0PT09aCYmITA9PT1tP3krJz0iIic6eSsnPSInK2QobSkrJyInKTptPWkoeSk/eSsnPSInK2QobSkrJyInOiIiKSxtJiYoZis9IiAiK20pfX11fHxjJiYoZis9JyBkYXRhLXJlYWN0cm9vdD0iIicpO3ZhciBDPWY7YT0iIixCLmhhc093blByb3BlcnR5KHIpP0MrPSIvPiI6KEMrPSI+IixhPSI8LyIrZS50eXBlKyI+Iik7ZTp7aWYobnVsbCE9KHU9cy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpe2lmKG51bGwhPXUuX19odG1sKXt1PXUuX19odG1sO2JyZWFrIGV9fWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZih1PXMuY2hpbGRyZW4pfHwibnVtYmVyIj09dHlwZW9mIHUpe3U9ZCh1KTticmVhayBlfXU9bnVsbH1yZXR1cm4gbnVsbCE9dT8ocz1bXSxYW3JdJiYiXG4iPT09dS5jaGFyQXQoMCkmJihDKz0iXG4iKSxDKz11KTpzPVkocy5jaGlsZHJlbiksZT1lLnR5cGUsbj1udWxsPT1ufHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1uP18oZSk6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj09PW4mJiJmb3JlaWduT2JqZWN0Ij09PWU/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOm4sdGhpcy5zdGFjay5wdXNoKHtkb21OYW1lc3BhY2U6bix0eXBlOnIsY2hpbGRyZW46cyxjaGlsZEluZGV4OjAsY29udGV4dDp0LGZvb3RlcjphfSksdGhpcy5wcmV2aW91c1dhc1RleHROb2RlPSExLEN9LGV9KCkscmU9e3JlbmRlclRvU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSwhMSkucmVhZCgxLzApfSxyZW5kZXJUb1N0YXRpY01hcmt1cDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG5lKGUsITApLnJlYWQoMS8wKX0scmVuZGVyVG9Ob2RlU3RyZWFtOmZ1bmN0aW9uKCl7bygiMjA3Iil9LHJlbmRlclRvU3RhdGljTm9kZVN0cmVhbTpmdW5jdGlvbigpe28oIjIwOCIpfSx2ZXJzaW9uOiIxNi42LjAifSxvZT17ZGVmYXVsdDpyZX0sc2U9b2UmJnJlfHxvZTtlLmV4cG9ydHM9c2UuZGVmYXVsdHx8c2V9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyxzLGksYSl7aWYoIWUpe2lmKGU9dm9pZCAwLHZvaWQgMD09PXQpZT1FcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBsPVtuLHIsbyxzLGksYV0sdT0wO2U9RXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGxbdSsrXX0pKSxlLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IGUuZnJhbWVzVG9Qb3A9MSxlfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLG89MDtvPHQ7bysrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tvKzFdKTtyKCExLCJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICVzIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4gIixuKX1mdW5jdGlvbiBzKGUsdCxuLHIsbyxzLGksYSxsKXt2YXIgdT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e3QuYXBwbHkobix1KX1jYXRjaChlKXt0aGlzLm9uRXJyb3IoZSl9fWZ1bmN0aW9uIGkoZSx0LG4scixvLGksYSxsLHUpe0lyPSExLFByPW51bGwscy5hcHBseShGcixhcmd1bWVudHMpfWZ1bmN0aW9uIGEoZSx0LG4scixzLGEsbCx1LGMpe2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLElyKXtpZihJcil7dmFyIGQ9UHI7SXI9ITEsUHI9bnVsbH1lbHNlIG8oIjE5OCIpLGQ9dm9pZCAwO05yfHwoTnI9ITAsSHI9ZCl9fWZ1bmN0aW9uIGwoKXtpZihCcilmb3IodmFyIGUgaW4gVXIpe3ZhciB0PVVyW2VdLG49QnIuaW5kZXhPZihlKTtpZigtMTxufHxvKCI5NiIsZSksIUdyW25dKXt0LmV4dHJhY3RFdmVudHN8fG8oIjk3IixlKSxHcltuXT10LG49dC5ldmVudFR5cGVzO2Zvcih2YXIgciBpbiBuKXt2YXIgcz12b2lkIDAsaT1uW3JdLGE9dCxsPXI7enIuaGFzT3duUHJvcGVydHkobCkmJm8oIjk5IixsKSx6cltsXT1pO3ZhciBjPWkucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7aWYoYyl7Zm9yKHMgaW4gYyljLmhhc093blByb3BlcnR5KHMpJiZ1KGNbc10sYSxsKTtzPSEwfWVsc2UgaS5yZWdpc3RyYXRpb25OYW1lPyh1KGkucmVnaXN0cmF0aW9uTmFtZSxhLGwpLHM9ITApOnM9ITE7c3x8bygiOTgiLHIsZSl9fX19ZnVuY3Rpb24gdShlLHQsbil7VnJbZV0mJm8oIjEwMCIsZSksVnJbZV09dCxXcltlXT10LmV2ZW50VHlwZXNbbl0uZGVwZW5kZW5jaWVzfWZ1bmN0aW9uIGMoZSx0LG4scil7dD1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IixlLmN1cnJlbnRUYXJnZXQ9S3IociksYSh0LG4sdm9pZCAwLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gbnVsbD09dCYmbygiMzAiKSxudWxsPT1lP3Q6QXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpPyhlLnB1c2guYXBwbHkoZSx0KSxlKTooZS5wdXNoKHQpLGUpOkFycmF5LmlzQXJyYXkodCk/W2VdLmNvbmNhdCh0KTpbZSx0XX1mdW5jdGlvbiBfKGUsdCxuKXtBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0LG4pOmUmJnQuY2FsbChuLGUpfWZ1bmN0aW9uIHAoZSx0KXtpZihlKXt2YXIgbj1lLl9kaXNwYXRjaExpc3RlbmVycyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTA7bzxuLmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtvKyspYyhlLHQsbltvXSxyW29dKTtlbHNlIG4mJmMoZSx0LG4scik7ZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCxlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gcChlLCEwKX1mdW5jdGlvbiBtKGUpe3JldHVybiBwKGUsITEpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1ZcihuKTtpZighcilyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6KHI9IXIuZGlzYWJsZWQpfHwoZT1lLnR5cGUscj0hKCJidXR0b24iPT09ZXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWUpKSxlPSFyO2JyZWFrIGU7ZGVmYXVsdDplPSExfXJldHVybiBlP251bGw6KG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuJiZvKCIyMzEiLHQsdHlwZW9mIG4pLG4pfWZ1bmN0aW9uIGcoZSx0KXtpZihudWxsIT09ZSYmKFhyPWQoWHIsZSkpLGU9WHIsWHI9bnVsbCxlJiYodD9fKGUsZik6XyhlLG0pLFhyJiZvKCI5NSIpLE5yKSl0aHJvdyB0PUhyLE5yPSExLEhyPW51bGwsdH1mdW5jdGlvbiBiKGUpe2lmKGVbSnJdKXJldHVybiBlW0pyXTtmb3IoOyFlW0pyXTspe2lmKCFlLnBhcmVudE5vZGUpcmV0dXJuIG51bGw7ZT1lLnBhcmVudE5vZGV9cmV0dXJuIGU9ZVtKcl0sNT09PWUudGFnfHw2PT09ZS50YWc/ZTpudWxsfWZ1bmN0aW9uIEUoZSl7cmV0dXJuIGU9ZVtKcl0sIWV8fDUhPT1lLnRhZyYmNiE9PWUudGFnP251bGw6ZX1mdW5jdGlvbiB5KGUpe2lmKDU9PT1lLnRhZ3x8Nj09PWUudGFnKXJldHVybiBlLnN0YXRlTm9kZTtvKCIzMyIpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGVbWnJdfHxudWxsfWZ1bmN0aW9uIFQoZSl7ZG97ZT1lLnJldHVybn13aGlsZShlJiY1IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIEEoZSx0LG4peyh0PWgoZSxuLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3RdKSkmJihuLl9kaXNwYXRjaExpc3RlbmVycz1kKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPWQobi5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIEMoZSl7aWYoZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyl7Zm9yKHZhciB0PWUuX3RhcmdldEluc3Qsbj1bXTt0OyluLnB1c2godCksdD1UKHQpO2Zvcih0PW4ubGVuZ3RoOzA8dC0tOylBKG5bdF0sImNhcHR1cmVkIixlKTtmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKUEoblt0XSwiYnViYmxlZCIsZSl9fWZ1bmN0aW9uIE8oZSx0LG4pe2UmJm4mJm4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSYmKHQ9aChlLG4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkpJiYobi5fZGlzcGF0Y2hMaXN0ZW5lcnM9ZChuLl9kaXNwYXRjaExpc3RlbmVycyx0KSxuLl9kaXNwYXRjaEluc3RhbmNlcz1kKG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX1mdW5jdGlvbiBTKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSYmTyhlLl90YXJnZXRJbnN0LG51bGwsZSl9ZnVuY3Rpb24gUihlKXtfKGUsQyl9ZnVuY3Rpb24gaihlLHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bIldlYmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3Qsbn1mdW5jdGlvbiB4KGUpe2lmKG5vW2VdKXJldHVybiBub1tlXTtpZighdG9bZV0pcmV0dXJuIGU7dmFyIHQsbj10b1tlXTtmb3IodCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodCkmJnQgaW4gcm8pcmV0dXJuIG5vW2VdPW5bdF07cmV0dXJuIGV9ZnVuY3Rpb24gTCgpe2lmKF9vKXJldHVybiBfbzt2YXIgZSx0LG49Y28scj1uLmxlbmd0aCxvPSJ2YWx1ZSJpbiB1bz91by52YWx1ZTp1by50ZXh0Q29udGVudCxzPW8ubGVuZ3RoO2ZvcihlPTA7ZTxyJiZuW2VdPT09b1tlXTtlKyspO3ZhciBpPXItZTtmb3IodD0xO3Q8PWkmJm5bci10XT09PW9bcy10XTt0KyspO3JldHVybiBfbz1vLnNsaWNlKGUsMTx0PzEtdDp2b2lkIDApfWZ1bmN0aW9uIEQoKXtyZXR1cm4hMH1mdW5jdGlvbiB3KCl7cmV0dXJuITF9ZnVuY3Rpb24gTShlLHQsbixyKXt0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZlRXZlbnQ9bixlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgbyBpbiBlKWUuaGFzT3duUHJvcGVydHkobykmJigodD1lW29dKT90aGlzW29dPXQobik6InRhcmdldCI9PT1vP3RoaXMudGFyZ2V0PXI6dGhpc1tvXT1uW29dKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPW4uZGVmYXVsdFByZXZlbnRlZD9uLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlKT9EOncsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD13LHRoaXN9ZnVuY3Rpb24gayhlLHQsbixyKXtpZih0aGlzLmV2ZW50UG9vbC5sZW5ndGgpe3ZhciBvPXRoaXMuZXZlbnRQb29sLnBvcCgpO3JldHVybiB0aGlzLmNhbGwobyxlLHQsbixyKSxvfXJldHVybiBuZXcgdGhpcyhlLHQsbixyKX1mdW5jdGlvbiBJKGUpe2UgaW5zdGFuY2VvZiB0aGlzfHxvKCIyNzkiKSxlLmRlc3RydWN0b3IoKSwxMD50aGlzLmV2ZW50UG9vbC5sZW5ndGgmJnRoaXMuZXZlbnRQb29sLnB1c2goZSl9ZnVuY3Rpb24gUChlKXtlLmV2ZW50UG9vbD1bXSxlLmdldFBvb2xlZD1rLGUucmVsZWFzZT1JfWZ1bmN0aW9uIE4oZSx0KXtzd2l0Y2goZSl7Y2FzZSJrZXl1cCI6cmV0dXJuLTEhPT1tby5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJrZXlkb3duIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImJsdXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEgoZSl7cmV0dXJuIGU9ZS5kZXRhaWwsIm9iamVjdCI9PXR5cGVvZiBlJiYiZGF0YSJpbiBlP2UuZGF0YTpudWxsfWZ1bmN0aW9uIEYoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIEgodCk7Y2FzZSJrZXlwcmVzcyI6cmV0dXJuIDMyIT09dC53aGljaD9udWxsOihUbz0hMCx5byk7Y2FzZSJ0ZXh0SW5wdXQiOnJldHVybiBlPXQuZGF0YSxlPT09eW8mJlRvP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBCKGUsdCl7aWYoQW8pcmV0dXJuImNvbXBvc2l0aW9uZW5kIj09PWV8fCFobyYmTihlLHQpPyhlPUwoKSxfbz1jbz11bz1udWxsLEFvPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2UicGFzdGUiOnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiBFbyYmImtvIiE9PXQubG9jYWxlP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFUoZSl7aWYoZT1xcihlKSl7ImZ1bmN0aW9uIiE9dHlwZW9mIE9vJiZvKCIyODAiKTt2YXIgdD1ZcihlLnN0YXRlTm9kZSk7T28oZS5zdGF0ZU5vZGUsZS50eXBlLHQpfX1mdW5jdGlvbiBHKGUpe1NvP1JvP1JvLnB1c2goZSk6Um89W2VdOlNvPWV9ZnVuY3Rpb24geigpe2lmKFNvKXt2YXIgZT1Tbyx0PVJvO2lmKFJvPVNvPW51bGwsVShlKSx0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspVSh0W2VdKX19ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIFcoZSx0LG4pe3JldHVybiBlKHQsbil9ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBxKGUsdCl7aWYoam8pcmV0dXJuIGUodCk7am89ITA7dHJ5e3JldHVybiBWKGUsdCl9ZmluYWxseXtqbz0hMSwobnVsbCE9PVNvfHxudWxsIT09Um8pJiYoWSgpLHooKSl9fWZ1bmN0aW9uIEsoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEheG9bZS50eXBlXToidGV4dGFyZWEiPT09dH1mdW5jdGlvbiBYKGUpe3JldHVybiBlPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRvdyxlLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX1mdW5jdGlvbiAkKGUpe2lmKCFlbylyZXR1cm4hMTtlPSJvbiIrZTt2YXIgdD1lIGluIGRvY3VtZW50O3JldHVybiB0fHwodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LnNldEF0dHJpYnV0ZShlLCJyZXR1cm47IiksdD0iZnVuY3Rpb24iPT10eXBlb2YgdFtlXSksdH1mdW5jdGlvbiBRKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmImlucHV0Ij09PWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT10fHwicmFkaW8iPT09dCl9ZnVuY3Rpb24gSihlKXt2YXIgdD1RKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnZvaWQgMCE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldCYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc2V0KXt2YXIgbz1uLmdldCxzPW4uc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe3I9IiIrZSxzLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOm4uZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiByfSxzZXRWYWx1ZTpmdW5jdGlvbihlKXtyPSIiK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fWZ1bmN0aW9uIFooZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPUooZSkpfWZ1bmN0aW9uIGVlKGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUuX3ZhbHVlVHJhY2tlcjtpZighdClyZXR1cm4hMDt2YXIgbj10LmdldFZhbHVlKCkscj0iIjtyZXR1cm4gZSYmKHI9UShlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksKGU9cikhPT1uJiYodC5zZXRWYWx1ZShlKSwhMCl9ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGU/bnVsbDooZT1XbyYmZVtXb118fGVbIkBAaXRlcmF0b3IiXSwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGwpfWZ1bmN0aW9uIG5lKGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7c3dpdGNoKGUpe2Nhc2UgQm86cmV0dXJuIkNvbmN1cnJlbnRNb2RlIjtjYXNlIElvOnJldHVybiJGcmFnbWVudCI7Y2FzZSBrbzpyZXR1cm4iUG9ydGFsIjtjYXNlIE5vOnJldHVybiJQcm9maWxlciI7Y2FzZSBQbzpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBHbzpyZXR1cm4iU3VzcGVuc2UifWlmKCJvYmplY3QiPT10eXBlb2YgZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBGbzpyZXR1cm4iQ29udGV4dC5Db25zdW1lciI7Y2FzZSBIbzpyZXR1cm4iQ29udGV4dC5Qcm92aWRlciI7Y2FzZSBVbzp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gdD10LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fCIiLGUuZGlzcGxheU5hbWV8fCgiIiE9PXQ/IkZvcndhcmRSZWYoIit0KyIpIjoiRm9yd2FyZFJlZiIpO2Nhc2Ugem86cmV0dXJuIG5lKGUudHlwZSk7Y2FzZSBWbzppZihlPTE9PT1lLl9zdGF0dXM/ZS5fcmVzdWx0Om51bGwpcmV0dXJuIG5lKGUpfXJldHVybiBudWxsfWZ1bmN0aW9uIHJlKGUpe3ZhciB0PSIiO2Rve2U6c3dpdGNoKGUudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDA6Y2FzZSAxOmNhc2UgNTpjYXNlIDg6dmFyIG49ZS5fZGVidWdPd25lcixyPWUuX2RlYnVnU291cmNlLG89bmUoZS50eXBlKSxzPW51bGw7biYmKHM9bmUobi50eXBlKSksbj1vLG89IiIscj9vPSIgKGF0ICIrci5maWxlTmFtZS5yZXBsYWNlKERvLCIiKSsiOiIrci5saW5lTnVtYmVyKyIpIjpzJiYobz0iIChjcmVhdGVkIGJ5ICIrcysiKSIpLHM9IlxuICAgIGluICIrKG58fCJVbmtub3duIikrbzticmVhayBlO2RlZmF1bHQ6cz0iIn10Kz1zLGU9ZS5yZXR1cm59d2hpbGUoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuISFxby5jYWxsKFhvLGUpfHwhcW8uY2FsbChLbyxlKSYmKFlvLnRlc3QoZSk/WG9bZV09ITA6KEtvW2VdPSEwLCExKSl9ZnVuY3Rpb24gc2UoZSx0LG4scil7aWYobnVsbCE9PW4mJjA9PT1uLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hciYmKG51bGwhPT1uPyFuLmFjY2VwdHNCb29sZWFuczoiZGF0YS0iIT09KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSkpJiYiYXJpYS0iIT09ZSk7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaWUoZSx0LG4scil7aWYobnVsbD09PXR8fHZvaWQgMD09PXR8fHNlKGUsdCxuLHIpKXJldHVybiEwO2lmKHIpcmV0dXJuITE7aWYobnVsbCE9PW4pc3dpdGNoKG4udHlwZSl7Y2FzZSAzOnJldHVybiF0O2Nhc2UgNDpyZXR1cm4hMT09PXQ7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9ZnVuY3Rpb24gYWUoZSx0LG4scixvKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09dHx8Mz09PXR8fDQ9PT10LHRoaXMuYXR0cmlidXRlTmFtZT1yLHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlPW8sdGhpcy5tdXN0VXNlUHJvcGVydHk9bix0aGlzLnByb3BlcnR5TmFtZT1lLHRoaXMudHlwZT10fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gdWUoZSx0LG4scil7dmFyIG89JG8uaGFzT3duUHJvcGVydHkodCk/JG9bdF06bnVsbDsobnVsbCE9PW8/MD09PW8udHlwZTohciYmKDI8dC5sZW5ndGgmJigibyI9PT10WzBdfHwiTyI9PT10WzBdKSYmKCJuIj09PXRbMV18fCJOIj09PXRbMV0pKSl8fChpZSh0LG4sbyxyKSYmKG49bnVsbCkscnx8bnVsbD09PW8/b2UodCkmJihudWxsPT09bj9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKTpvLm11c3RVc2VQcm9wZXJ0eT9lW28ucHJvcGVydHlOYW1lXT1udWxsPT09bj8zIT09by50eXBlJiYiIjpuOih0PW8uYXR0cmlidXRlTmFtZSxyPW8uYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1uP2UucmVtb3ZlQXR0cmlidXRlKHQpOihvPW8udHlwZSxuPTM9PT1vfHw0PT09byYmITA9PT1uPyIiOiIiK24scj9lLnNldEF0dHJpYnV0ZU5TKHIsdCxuKTplLnNldEF0dHJpYnV0ZSh0LG4pKSkpfWZ1bmN0aW9uIGNlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJvYmplY3QiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gZGUoZSx0KXt2YXIgbj10LmNoZWNrZWQ7cmV0dXJuIE1yKHt9LHQse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPW4/bjplLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBfZShlLHQpe3ZhciBuPW51bGw9PXQuZGVmYXVsdFZhbHVlPyIiOnQuZGVmYXVsdFZhbHVlLHI9bnVsbCE9dC5jaGVja2VkP3QuY2hlY2tlZDp0LmRlZmF1bHRDaGVja2VkO249Y2UobnVsbCE9dC52YWx1ZT90LnZhbHVlOm4pLGUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6cixpbml0aWFsVmFsdWU6bixjb250cm9sbGVkOiJjaGVja2JveCI9PT10LnR5cGV8fCJyYWRpbyI9PT10LnR5cGU/bnVsbCE9dC5jaGVja2VkOm51bGwhPXQudmFsdWV9fWZ1bmN0aW9uIHBlKGUsdCl7bnVsbCE9KHQ9dC5jaGVja2VkKSYmdWUoZSwiY2hlY2tlZCIsdCwhMSl9ZnVuY3Rpb24gZmUoZSx0KXtwZShlLHQpO3ZhciBuPWNlKHQudmFsdWUpLHI9dC50eXBlO2lmKG51bGwhPW4pIm51bWJlciI9PT1yPygwPT09biYmIiI9PT1lLnZhbHVlfHxlLnZhbHVlIT1uKSYmKGUudmFsdWU9IiIrbik6ZS52YWx1ZSE9PSIiK24mJihlLnZhbHVlPSIiK24pO2Vsc2UgaWYoInN1Ym1pdCI9PT1yfHwicmVzZXQiPT09cilyZXR1cm4gdm9pZCBlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTt0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP2hlKGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZoZShlLHQudHlwZSxjZSh0LmRlZmF1bHRWYWx1ZSkpLG51bGw9PXQuY2hlY2tlZCYmbnVsbCE9dC5kZWZhdWx0Q2hlY2tlZCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBtZShlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKCJzdWJtaXQiIT09ciYmInJlc2V0IiE9PXJ8fHZvaWQgMCE9PXQudmFsdWUmJm51bGwhPT10LnZhbHVlKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLCIiIT09biYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hZS5kZWZhdWx0Q2hlY2tlZCxlLmRlZmF1bHRDaGVja2VkPSEhZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkLCIiIT09biYmKGUubmFtZT1uKX1mdW5jdGlvbiBoZShlLHQsbil7Im51bWJlciI9PT10JiZlLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWV8fChudWxsPT1uP2UuZGVmYXVsdFZhbHVlPSIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6ZS5kZWZhdWx0VmFsdWUhPT0iIituJiYoZS5kZWZhdWx0VmFsdWU9IiIrbikpfWZ1bmN0aW9uIGdlKGUsdCxuKXtyZXR1cm4gZT1NLmdldFBvb2xlZChKby5jaGFuZ2UsZSx0LG4pLGUudHlwZT0iY2hhbmdlIixHKG4pLFIoZSksZX1mdW5jdGlvbiBiZShlKXtnKGUsITEpfWZ1bmN0aW9uIEVlKGUpe2lmKGVlKHkoZSkpKXJldHVybiBlfWZ1bmN0aW9uIHllKGUsdCl7aWYoImNoYW5nZSI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIHZlKCl7Wm8mJihaby5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsVGUpLGVzPVpvPW51bGwpfWZ1bmN0aW9uIFRlKGUpeyJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSYmRWUoZXMpJiYoZT1nZShlcyxlLFgoZSkpLHEoYmUsZSkpfWZ1bmN0aW9uIEFlKGUsdCxuKXsiZm9jdXMiPT09ZT8odmUoKSxabz10LGVzPW4sWm8uYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLFRlKSk6ImJsdXIiPT09ZSYmdmUoKX1mdW5jdGlvbiBDZShlKXtpZigic2VsZWN0aW9uY2hhbmdlIj09PWV8fCJrZXl1cCI9PT1lfHwia2V5ZG93biI9PT1lKXJldHVybiBFZShlcyl9ZnVuY3Rpb24gT2UoZSx0KXtpZigiY2xpY2siPT09ZSlyZXR1cm4gRWUodCl9ZnVuY3Rpb24gU2UoZSx0KXtpZigiaW5wdXQiPT09ZXx8ImNoYW5nZSI9PT1lKXJldHVybiBFZSh0KX1mdW5jdGlvbiBSZShlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9b3NbZV0pJiYhIXRbZV19ZnVuY3Rpb24gamUoKXtyZXR1cm4gUmV9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwxL2U9PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gTGUoZSx0KXtpZih4ZShlLHQpKXJldHVybiEwO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspaWYoIXBzLmNhbGwodCxuW3JdKXx8IXhlKGVbbltyXV0sdFtuW3JdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9ZTtpZihlLmFsdGVybmF0ZSlmb3IoO3QucmV0dXJuOyl0PXQucmV0dXJuO2Vsc2V7aWYoMCE9KDImdC5lZmZlY3RUYWcpKXJldHVybiAxO2Zvcig7dC5yZXR1cm47KWlmKHQ9dC5yZXR1cm4sMCE9KDImdC5lZmZlY3RUYWcpKXJldHVybiAxfXJldHVybiAzPT09dC50YWc/MjozfWZ1bmN0aW9uIHdlKGUpezIhPT1EZShlKSYmbygiMTg4Iil9ZnVuY3Rpb24gTWUoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7aWYoIXQpcmV0dXJuIHQ9RGUoZSksMz09PXQmJm8oIjE4OCIpLDE9PT10P251bGw6ZTtmb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIHM9bi5yZXR1cm4saT1zP3MuYWx0ZXJuYXRlOm51bGw7aWYoIXN8fCFpKWJyZWFrO2lmKHMuY2hpbGQ9PT1pLmNoaWxkKXtmb3IodmFyIGE9cy5jaGlsZDthOyl7aWYoYT09PW4pcmV0dXJuIHdlKHMpLGU7aWYoYT09PXIpcmV0dXJuIHdlKHMpLHQ7YT1hLnNpYmxpbmd9bygiMTg4Iil9aWYobi5yZXR1cm4hPT1yLnJldHVybiluPXMscj1pO2Vsc2V7YT0hMTtmb3IodmFyIGw9cy5jaGlsZDtsOyl7aWYobD09PW4pe2E9ITAsbj1zLHI9aTticmVha31pZihsPT09cil7YT0hMCxyPXMsbj1pO2JyZWFrfWw9bC5zaWJsaW5nfWlmKCFhKXtmb3IobD1pLmNoaWxkO2w7KXtpZihsPT09bil7YT0hMCxuPWkscj1zO2JyZWFrfWlmKGw9PT1yKXthPSEwLHI9aSxuPXM7YnJlYWt9bD1sLnNpYmxpbmd9YXx8bygiMTg5Iil9fW4uYWx0ZXJuYXRlIT09ciYmbygiMTkwIil9cmV0dXJuIDMhPT1uLnRhZyYmbygiMTg4Iiksbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIGtlKGUpe2lmKCEoZT1NZShlKSkpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWU7Oyl7aWYoNT09PXQudGFnfHw2PT09dC50YWcpcmV0dXJuIHQ7aWYodC5jaGlsZCl0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7IXQuc2libGluZzspe2lmKCF0LnJldHVybnx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuIG51bGx9ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZS5rZXlDb2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT10JiYoZT0xMyk6ZT10LDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIFBlKGUsdCl7dmFyIG49ZVswXTtlPWVbMV07dmFyIHI9Im9uIisoZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkpO3Q9e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOnIsY2FwdHVyZWQ6cisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbbl0saXNJbnRlcmFjdGl2ZTp0fSxPc1tlXT10LFNzW25dPXR9ZnVuY3Rpb24gTmUoZSl7dmFyIHQ9ZS50YXJnZXRJbnN0LG49dDtkb3tpZighbil7ZS5hbmNlc3RvcnMucHVzaChuKTticmVha312YXIgcjtmb3Iocj1uO3IucmV0dXJuOylyPXIucmV0dXJuO2lmKCEocj0zIT09ci50YWc/bnVsbDpyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSlicmVhaztlLmFuY2VzdG9ycy5wdXNoKG4pLG49YihyKX13aGlsZShuKTtmb3Iobj0wO248ZS5hbmNlc3RvcnMubGVuZ3RoO24rKyl7dD1lLmFuY2VzdG9yc1tuXTt2YXIgbz1YKGUubmF0aXZlRXZlbnQpO3I9ZS50b3BMZXZlbFR5cGU7Zm9yKHZhciBzPWUubmF0aXZlRXZlbnQsaT1udWxsLGE9MDthPEdyLmxlbmd0aDthKyspe3ZhciBsPUdyW2FdO2wmJihsPWwuZXh0cmFjdEV2ZW50cyhyLHQscyxvKSkmJihpPWQoaSxsKSl9ZyhpLCExKX19ZnVuY3Rpb24gSGUoZSx0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgbj0oanMoZSk/QmU6VWUpLmJpbmQobnVsbCxlKTt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKX1mdW5jdGlvbiBGZShlLHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBuPShqcyhlKT9CZTpVZSkuYmluZChudWxsLGUpO3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApfWZ1bmN0aW9uIEJlKGUsdCl7VyhVZSxlLHQpfWZ1bmN0aW9uIFVlKGUsdCl7aWYoTHMpe3ZhciBuPVgodCk7aWYobj1iKG4pLG51bGw9PT1ufHwibnVtYmVyIiE9dHlwZW9mIG4udGFnfHwyPT09RGUobil8fChuPW51bGwpLHhzLmxlbmd0aCl7dmFyIHI9eHMucG9wKCk7ci50b3BMZXZlbFR5cGU9ZSxyLm5hdGl2ZUV2ZW50PXQsci50YXJnZXRJbnN0PW4sZT1yfWVsc2UgZT17dG9wTGV2ZWxUeXBlOmUsbmF0aXZlRXZlbnQ6dCx0YXJnZXRJbnN0Om4sYW5jZXN0b3JzOltdfTt0cnl7cShOZSxlKX1maW5hbGx5e2UudG9wTGV2ZWxUeXBlPW51bGwsZS5uYXRpdmVFdmVudD1udWxsLGUudGFyZ2V0SW5zdD1udWxsLGUuYW5jZXN0b3JzLmxlbmd0aD0wLDEwPnhzLmxlbmd0aCYmeHMucHVzaChlKX19fWZ1bmN0aW9uIEdlKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxNcyl8fChlW01zXT13cysrLERzW2VbTXNdXT17fSksRHNbZVtNc11dfWZ1bmN0aW9uIHplKGUpe2lmKHZvaWQgMD09PShlPWV8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19ZnVuY3Rpb24gVmUoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFdlKGUsdCl7dmFyIG49VmUoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYoMz09PW4ubm9kZVR5cGUpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49VmUobil9fWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuISghZXx8IXQpJiYoZT09PXR8fCghZXx8MyE9PWUubm9kZVR5cGUpJiYodCYmMz09PXQubm9kZVR5cGU/WWUoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ISFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfWZ1bmN0aW9uIHFlKCl7Zm9yKHZhciBlPXdpbmRvdyx0PXplKCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7ZT10LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlld31jYXRjaChlKXticmVha310PXplKGUuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIEtlKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYoInRleHQiPT09ZS50eXBlfHwic2VhcmNoIj09PWUudHlwZXx8InRlbCI9PT1lLnR5cGV8fCJ1cmwiPT09ZS50eXBlfHwicGFzc3dvcmQiPT09ZS50eXBlKXx8InRleHRhcmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBYZShlLHQpe3ZhciBuPXQud2luZG93PT09dD90LmRvY3VtZW50Ojk9PT10Lm5vZGVUeXBlP3Q6dC5vd25lckRvY3VtZW50O3JldHVybiBGc3x8bnVsbD09UHN8fFBzIT09emUobik/bnVsbDoobj1Qcywic2VsZWN0aW9uU3RhcnQiaW4gbiYmS2Uobik/bj17c3RhcnQ6bi5zZWxlY3Rpb25TdGFydCxlbmQ6bi5zZWxlY3Rpb25FbmR9OihuPShuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxuPXthbmNob3JOb2RlOm4uYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6bi5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOm4uZm9jdXNOb2RlLGZvY3VzT2Zmc2V0Om4uZm9jdXNPZmZzZXR9KSxIcyYmTGUoSHMsbik/bnVsbDooSHM9bixlPU0uZ2V0UG9vbGVkKElzLnNlbGVjdCxOcyxlLHQpLGUudHlwZT0ic2VsZWN0IixlLnRhcmdldD1QcyxSKGUpLGUpKX1mdW5jdGlvbiAkZShlKXt2YXIgdD0iIjtyZXR1cm4gd3IuQ2hpbGRyZW4uZm9yRWFjaChlLGZ1bmN0aW9uKGUpe251bGwhPWUmJih0Kz1lKX0pLHR9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gZT1Ncih7Y2hpbGRyZW46dm9pZCAwfSx0KSwodD0kZSh0LmNoaWxkcmVuKSkmJihlLmNoaWxkcmVuPXQpLGV9ZnVuY3Rpb24gSmUoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitjZShuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bilyZXR1cm4gZVtvXS5zZWxlY3RlZD0hMCx2b2lkKHImJihlW29dLmRlZmF1bHRTZWxlY3RlZD0hMCkpO251bGwhPT10fHxlW29dLmRpc2FibGVkfHwodD1lW29dKX1udWxsIT09dCYmKHQuc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZvKCI5MSIpLE1yKHt9LHQse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOiIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBldChlLHQpe3ZhciBuPXQudmFsdWU7bnVsbD09biYmKG49dC5kZWZhdWx0VmFsdWUsdD10LmNoaWxkcmVuLG51bGwhPXQmJihudWxsIT1uJiZvKCI5MiIpLEFycmF5LmlzQXJyYXkodCkmJigxPj10Lmxlbmd0aHx8bygiOTMiKSx0PXRbMF0pLG49dCksbnVsbD09biYmKG49IiIpKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTpjZShuKX19ZnVuY3Rpb24gdHQoZSx0KXt2YXIgbj1jZSh0LnZhbHVlKSxyPWNlKHQuZGVmYXVsdFZhbHVlKTtudWxsIT1uJiYobj0iIituLG4hPT1lLnZhbHVlJiYoZS52YWx1ZT1uKSxudWxsPT10LmRlZmF1bHRWYWx1ZSYmZS5kZWZhdWx0VmFsdWUhPT1uJiYoZS5kZWZhdWx0VmFsdWU9bikpLG51bGwhPXImJihlLmRlZmF1bHRWYWx1ZT0iIityKX1mdW5jdGlvbiBudChlKXt2YXIgdD1lLnRleHRDb250ZW50O3Q9PT1lLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiYoZS52YWx1ZT10KX1mdW5jdGlvbiBydChlKXtzd2l0Y2goZSl7Y2FzZSJzdmciOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7Y2FzZSJtYXRoIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI7ZGVmYXVsdDpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJ9fWZ1bmN0aW9uIG90KGUsdCl7cmV0dXJuIG51bGw9PWV8fCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PWU/cnQodCk6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj09PWUmJiJmb3JlaWduT2JqZWN0Ij09PXQ/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOmV9ZnVuY3Rpb24gc3QoZSx0KXtpZih0KXt2YXIgbj1lLmZpcnN0Q2hpbGQ7aWYobiYmbj09PWUubGFzdENoaWxkJiYzPT09bi5ub2RlVHlwZSlyZXR1cm4gdm9pZChuLm5vZGVWYWx1ZT10KX1lLnRleHRDb250ZW50PXR9ZnVuY3Rpb24gaXQoZSx0KXtlPWUuc3R5bGU7Zm9yKHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHI9MD09PW4uaW5kZXhPZigiLS0iKSxvPW4scz10W25dO289bnVsbD09c3x8ImJvb2xlYW4iPT10eXBlb2Ygc3x8IiI9PT1zPyIiOnJ8fCJudW1iZXIiIT10eXBlb2Ygc3x8MD09PXN8fFZzLmhhc093blByb3BlcnR5KG8pJiZWc1tvXT8oIiIrcykudHJpbSgpOnMrInB4IiwiZmxvYXQiPT09biYmKG49ImNzc0Zsb2F0Iikscj9lLnNldFByb3BlcnR5KG4sbyk6ZVtuXT1vfX1mdW5jdGlvbiBhdChlLHQpe3QmJihZc1tlXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZvKCIxMzciLGUsIiIpLG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJihudWxsIT10LmNoaWxkcmVuJiZvKCI2MCIpLCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmIl9faHRtbCJpbiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfHxvKCI2MSIpKSxudWxsIT10LnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIHQuc3R5bGUmJm8oIjYyIiwiIikpfWZ1bmN0aW9uIGx0KGUsdCl7aWYoLTE9PT1lLmluZGV4T2YoIi0iKSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuaXM7c3dpdGNoKGUpe2Nhc2UiYW5ub3RhdGlvbi14bWwiOmNhc2UiY29sb3ItcHJvZmlsZSI6Y2FzZSJmb250LWZhY2UiOmNhc2UiZm9udC1mYWNlLXNyYyI6Y2FzZSJmb250LWZhY2UtdXJpIjpjYXNlImZvbnQtZmFjZS1mb3JtYXQiOmNhc2UiZm9udC1mYWNlLW5hbWUiOmNhc2UibWlzc2luZy1nbHlwaCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gdXQoZSx0KXtlPTk9PT1lLm5vZGVUeXBlfHwxMT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQ7dmFyIG49R2UoZSk7dD1Xclt0XTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtpZighbi5oYXNPd25Qcm9wZXJ0eShvKXx8IW5bb10pe3N3aXRjaChvKXtjYXNlInNjcm9sbCI6RmUoInNjcm9sbCIsZSk7YnJlYWs7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjpGZSgiZm9jdXMiLGUpLEZlKCJibHVyIixlKSxuLmJsdXI9ITAsbi5mb2N1cz0hMDticmVhaztjYXNlImNhbmNlbCI6Y2FzZSJjbG9zZSI6JChvKSYmRmUobyxlKTticmVhaztjYXNlImludmFsaWQiOmNhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztkZWZhdWx0Oi0xPT09bG8uaW5kZXhPZihvKSYmSGUobyxlKX1uW29dPSEwfX19ZnVuY3Rpb24gY3QoKXt9ZnVuY3Rpb24gZHQoZSx0KXtzd2l0Y2goZSl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hIXQuYXV0b0ZvY3VzfXJldHVybiExfWZ1bmN0aW9uIF90KGUsdCl7cmV0dXJuInRleHRhcmVhIj09PWV8fCJvcHRpb24iPT09ZXx8Im5vc2NyaXB0Ij09PWV8fCJzdHJpbmciPT10eXBlb2YgdC5jaGlsZHJlbnx8Im51bWJlciI9PXR5cGVvZiB0LmNoaWxkcmVufHwib2JqZWN0Ij09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH1mdW5jdGlvbiBwdChlKXtmb3IoZT1lLm5leHRTaWJsaW5nO2UmJjEhPT1lLm5vZGVUeXBlJiYzIT09ZS5ub2RlVHlwZTspZT1lLm5leHRTaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIGZ0KGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlJiYxIT09ZS5ub2RlVHlwZSYmMyE9PWUubm9kZVR5cGU7KWU9ZS5uZXh0U2libGluZztyZXR1cm4gZX1mdW5jdGlvbiBtdChlKXswPkpzfHwoZS5jdXJyZW50PVFzW0pzXSxRc1tKc109bnVsbCxKcy0tKX1mdW5jdGlvbiBodChlLHQpe0pzKyssUXNbSnNdPWUuY3VycmVudCxlLmN1cnJlbnQ9dH1mdW5jdGlvbiBndChlLHQpe3ZhciBuPWUudHlwZS5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIFpzO3ZhciByPWUuc3RhdGVOb2RlO2lmKHImJnIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PXQpcmV0dXJuIHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIG8scz17fTtmb3IobyBpbiBuKXNbb109dFtvXTtyZXR1cm4gciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PXQsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1zKSxzfWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBudWxsIT09KGU9ZS5jaGlsZENvbnRleHRUeXBlcykmJnZvaWQgMCE9PWV9ZnVuY3Rpb24gRXQoZSl7bXQodGksZSksbXQoZWksZSl9ZnVuY3Rpb24geXQoZSl7bXQodGksZSksbXQoZWksZSl9ZnVuY3Rpb24gdnQoZSx0LG4pe2VpLmN1cnJlbnQhPT1acyYmbygiMTY4IiksaHQoZWksdCxlKSxodCh0aSxuLGUpfWZ1bmN0aW9uIFR0KGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZihlPXQuY2hpbGRDb250ZXh0VHlwZXMsImZ1bmN0aW9uIiE9dHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBuO3I9ci5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIHMgaW4gcilzIGluIGV8fG8oIjEwOCIsbmUodCl8fCJVbmtub3duIixzKTtyZXR1cm4gTXIoe30sbixyKX1mdW5jdGlvbiBBdChlKXt2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD10JiZ0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxacyxuaT1laS5jdXJyZW50LGh0KGVpLHQsZSksaHQodGksdGkuY3VycmVudCxlKSwhMH1mdW5jdGlvbiBDdChlLHQsbil7dmFyIHI9ZS5zdGF0ZU5vZGU7cnx8bygiMTY5Iiksbj8odD1UdChlLHQsbmkpLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9dCxtdCh0aSxlKSxtdChlaSxlKSxodChlaSx0LGUpKTptdCh0aSxlKSxodCh0aSxuLGUpfWZ1bmN0aW9uIE90KGUpe3JldHVybiBmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGUodCl9Y2F0Y2goZSl7fX19ZnVuY3Rpb24gU3QoZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pcmV0dXJuITE7dmFyIHQ9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKHQuaXNEaXNhYmxlZHx8IXQuc3VwcG9ydHNGaWJlcilyZXR1cm4hMDt0cnl7dmFyIG49dC5pbmplY3QoZSk7cmk9T3QoZnVuY3Rpb24oZSl7cmV0dXJuIHQub25Db21taXRGaWJlclJvb3QobixlKX0pLG9pPU90KGZ1bmN0aW9uKGUpe3JldHVybiB0Lm9uQ29tbWl0RmliZXJVbm1vdW50KG4sZSl9KX1jYXRjaChlKXt9cmV0dXJuITB9ZnVuY3Rpb24gUnQoZSx0LG4scil7dGhpcy50YWc9ZSx0aGlzLmtleT1uLHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmZpcnN0Q29udGV4dERlcGVuZGVuY3k9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5lZmZlY3RUYWc9MCx0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbCx0aGlzLmNoaWxkRXhwaXJhdGlvblRpbWU9dGhpcy5leHBpcmF0aW9uVGltZT0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24ganQoZSx0LG4scil7cmV0dXJuIG5ldyBSdChlLHQsbixyKX1mdW5jdGlvbiB4dChlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIEx0KGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiB4dChlKT8xOjA7aWYodm9pZCAwIT09ZSYmbnVsbCE9PWUpe2lmKChlPWUuJCR0eXBlb2YpPT09VW8pcmV0dXJuIDExO2lmKGU9PT16bylyZXR1cm4gMTR9cmV0dXJuIDJ9ZnVuY3Rpb24gRHQoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PW4/KG49anQoZS50YWcsdCxlLmtleSxlLm1vZGUpLG4uZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi5lZmZlY3RUYWc9MCxuLm5leHRFZmZlY3Q9bnVsbCxuLmZpcnN0RWZmZWN0PW51bGwsbi5sYXN0RWZmZWN0PW51bGwpLG4uY2hpbGRFeHBpcmF0aW9uVGltZT1lLmNoaWxkRXhwaXJhdGlvblRpbWUsbi5leHBpcmF0aW9uVGltZT1lLmV4cGlyYXRpb25UaW1lLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLG4uZmlyc3RDb250ZXh0RGVwZW5kZW5jeT1lLmZpcnN0Q29udGV4dERlcGVuZGVuY3ksbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbn1mdW5jdGlvbiB3dChlLHQsbixyLHMsaSl7dmFyIGE9MjtpZihyPWUsImZ1bmN0aW9uIj09dHlwZW9mIGUpeHQoZSkmJihhPTEpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKWE9NTtlbHNlIGU6c3dpdGNoKGUpe2Nhc2UgSW86cmV0dXJuIE10KG4uY2hpbGRyZW4scyxpLHQpO2Nhc2UgQm86cmV0dXJuIGt0KG4sM3xzLGksdCk7Y2FzZSBQbzpyZXR1cm4ga3QobiwyfHMsaSx0KTtjYXNlIE5vOnJldHVybiBlPWp0KDEyLG4sdCw0fHMpLGUuZWxlbWVudFR5cGU9Tm8sZS50eXBlPU5vLGUuZXhwaXJhdGlvblRpbWU9aSxlO2Nhc2UgR286cmV0dXJuIGU9anQoMTMsbix0LHMpLGUuZWxlbWVudFR5cGU9R28sZS50eXBlPUdvLGUuZXhwaXJhdGlvblRpbWU9aSxlO2RlZmF1bHQ6aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBIbzphPTEwO2JyZWFrIGU7Y2FzZSBGbzphPTk7YnJlYWsgZTtjYXNlIFVvOmE9MTE7YnJlYWsgZTtjYXNlIHpvOmE9MTQ7YnJlYWsgZTtjYXNlIFZvOmE9MTYscj1udWxsO2JyZWFrIGV9bygiMTMwIixudWxsPT1lP2U6dHlwZW9mIGUsIiIpfXJldHVybiB0PWp0KGEsbix0LHMpLHQuZWxlbWVudFR5cGU9ZSx0LnR5cGU9cix0LmV4cGlyYXRpb25UaW1lPWksdH1mdW5jdGlvbiBNdChlLHQsbixyKXtyZXR1cm4gZT1qdCg3LGUscix0KSxlLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBrdChlLHQsbixyKXtyZXR1cm4gZT1qdCg4LGUscix0KSx0PTA9PSgxJnQpP1BvOkJvLGUuZWxlbWVudFR5cGU9dCxlLnR5cGU9dCxlLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBJdChlLHQsbil7cmV0dXJuIGU9anQoNixlLG51bGwsdCksZS5leHBpcmF0aW9uVGltZT1uLGV9ZnVuY3Rpb24gUHQoZSx0LG4pe3JldHVybiB0PWp0KDQsbnVsbCE9PWUuY2hpbGRyZW4/ZS5jaGlsZHJlbjpbXSxlLmtleSx0KSx0LmV4cGlyYXRpb25UaW1lPW4sdC5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86ZS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmUuaW1wbGVtZW50YXRpb259LHR9ZnVuY3Rpb24gTnQoZSx0KXtlLmRpZEVycm9yPSExO3ZhciBuPWUuZWFybGllc3RQZW5kaW5nVGltZTswPT09bj9lLmVhcmxpZXN0UGVuZGluZ1RpbWU9ZS5sYXRlc3RQZW5kaW5nVGltZT10Om4+dD9lLmVhcmxpZXN0UGVuZGluZ1RpbWU9dDplLmxhdGVzdFBlbmRpbmdUaW1lPHQmJihlLmxhdGVzdFBlbmRpbmdUaW1lPXQpLEJ0KHQsZSl9ZnVuY3Rpb24gSHQoZSx0KXtlLmRpZEVycm9yPSExO3ZhciBuPWUubGF0ZXN0UGluZ2VkVGltZTswIT09biYmbjw9dCYmKGUubGF0ZXN0UGluZ2VkVGltZT0wKSxuPWUuZWFybGllc3RQZW5kaW5nVGltZTt2YXIgcj1lLmxhdGVzdFBlbmRpbmdUaW1lO249PT10P2UuZWFybGllc3RQZW5kaW5nVGltZT1yPT09dD9lLmxhdGVzdFBlbmRpbmdUaW1lPTA6cjpyPT09dCYmKGUubGF0ZXN0UGVuZGluZ1RpbWU9biksbj1lLmVhcmxpZXN0U3VzcGVuZGVkVGltZSxyPWUubGF0ZXN0U3VzcGVuZGVkVGltZSwwPT09bj9lLmVhcmxpZXN0U3VzcGVuZGVkVGltZT1lLmxhdGVzdFN1c3BlbmRlZFRpbWU9dDpuPnQ/ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWU9dDpyPHQmJihlLmxhdGVzdFN1c3BlbmRlZFRpbWU9dCksQnQodCxlKX1mdW5jdGlvbiBGdChlLHQpe3ZhciBuPWUuZWFybGllc3RQZW5kaW5nVGltZTtyZXR1cm4gZT1lLmVhcmxpZXN0U3VzcGVuZGVkVGltZSwoMD09PXR8fDAhPT1uJiZuPHQpJiYodD1uKSwoMD09PXR8fDAhPT1lJiZlPHQpJiYodD1lKSx0fWZ1bmN0aW9uIEJ0KGUsdCl7dmFyIG49dC5lYXJsaWVzdFN1c3BlbmRlZFRpbWUscj10LmxhdGVzdFN1c3BlbmRlZFRpbWUsbz10LmVhcmxpZXN0UGVuZGluZ1RpbWUscz10LmxhdGVzdFBpbmdlZFRpbWU7bz0wIT09bz9vOnMsMD09PW8mJigwPT09ZXx8cj5lKSYmKG89ciksZT1vLDAhPT1lJiYwIT09biYmbjxlJiYoZT1uKSx0Lm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uPW8sdC5leHBpcmF0aW9uVGltZT1lfWZ1bmN0aW9uIFV0KGUpe3JldHVybntiYXNlU3RhdGU6ZSxmaXJzdFVwZGF0ZTpudWxsLGxhc3RVcGRhdGU6bnVsbCxmaXJzdENhcHR1cmVkVXBkYXRlOm51bGwsbGFzdENhcHR1cmVkVXBkYXRlOm51bGwsZmlyc3RFZmZlY3Q6bnVsbCxsYXN0RWZmZWN0Om51bGwsZmlyc3RDYXB0dXJlZEVmZmVjdDpudWxsLGxhc3RDYXB0dXJlZEVmZmVjdDpudWxsfX1mdW5jdGlvbiBHdChlKXtyZXR1cm57YmFzZVN0YXRlOmUuYmFzZVN0YXRlLGZpcnN0VXBkYXRlOmUuZmlyc3RVcGRhdGUsbGFzdFVwZGF0ZTplLmxhc3RVcGRhdGUsZmlyc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGxhc3RDYXB0dXJlZFVwZGF0ZTpudWxsLGZpcnN0RWZmZWN0Om51bGwsbGFzdEVmZmVjdDpudWxsLGZpcnN0Q2FwdHVyZWRFZmZlY3Q6bnVsbCxsYXN0Q2FwdHVyZWRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24genQoZSl7cmV0dXJue2V4cGlyYXRpb25UaW1lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsLG5leHRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gVnQoZSx0KXtudWxsPT09ZS5sYXN0VXBkYXRlP2UuZmlyc3RVcGRhdGU9ZS5sYXN0VXBkYXRlPXQ6KGUubGFzdFVwZGF0ZS5uZXh0PXQsZS5sYXN0VXBkYXRlPXQpfWZ1bmN0aW9uIFd0KGUsdCl7dmFyIG49ZS5hbHRlcm5hdGU7aWYobnVsbD09PW4pe3ZhciByPWUudXBkYXRlUXVldWUsbz1udWxsO251bGw9PT1yJiYocj1lLnVwZGF0ZVF1ZXVlPVV0KGUubWVtb2l6ZWRTdGF0ZSkpfWVsc2Ugcj1lLnVwZGF0ZVF1ZXVlLG89bi51cGRhdGVRdWV1ZSxudWxsPT09cj9udWxsPT09bz8ocj1lLnVwZGF0ZVF1ZXVlPVV0KGUubWVtb2l6ZWRTdGF0ZSksbz1uLnVwZGF0ZVF1ZXVlPVV0KG4ubWVtb2l6ZWRTdGF0ZSkpOnI9ZS51cGRhdGVRdWV1ZT1HdChvKTpudWxsPT09byYmKG89bi51cGRhdGVRdWV1ZT1HdChyKSk7bnVsbD09PW98fHI9PT1vP1Z0KHIsdCk6bnVsbD09PXIubGFzdFVwZGF0ZXx8bnVsbD09PW8ubGFzdFVwZGF0ZT8oVnQocix0KSxWdChvLHQpKTooVnQocix0KSxvLmxhc3RVcGRhdGU9dCl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbj1lLnVwZGF0ZVF1ZXVlO249bnVsbD09PW4/ZS51cGRhdGVRdWV1ZT1VdChlLm1lbW9pemVkU3RhdGUpOnF0KGUsbiksbnVsbD09PW4ubGFzdENhcHR1cmVkVXBkYXRlP24uZmlyc3RDYXB0dXJlZFVwZGF0ZT1uLmxhc3RDYXB0dXJlZFVwZGF0ZT10OihuLmxhc3RDYXB0dXJlZFVwZGF0ZS5uZXh0PXQsbi5sYXN0Q2FwdHVyZWRVcGRhdGU9dCl9ZnVuY3Rpb24gcXQoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbCE9PW4mJnQ9PT1uLnVwZGF0ZVF1ZXVlJiYodD1lLnVwZGF0ZVF1ZXVlPUd0KHQpKSx0fWZ1bmN0aW9uIEt0KGUsdCxuLHIsbyxzKXtzd2l0Y2gobi50YWcpe2Nhc2UgMTpyZXR1cm4gZT1uLnBheWxvYWQsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5jYWxsKHMscixvKTplO2Nhc2UgMzplLmVmZmVjdFRhZz0tMTAyNSZlLmVmZmVjdFRhZ3w2NDtjYXNlIDA6aWYoZT1uLnBheWxvYWQsbnVsbD09PShvPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuY2FsbChzLHIsbyk6ZSl8fHZvaWQgMD09PW8pYnJlYWs7cmV0dXJuIE1yKHt9LHIsbyk7Y2FzZSAyOnNpPSEwfXJldHVybiByfWZ1bmN0aW9uIFh0KGUsdCxuLHIsbyl7c2k9ITEsdD1xdChlLHQpO2Zvcih2YXIgcz10LmJhc2VTdGF0ZSxpPW51bGwsYT0wLGw9dC5maXJzdFVwZGF0ZSx1PXM7bnVsbCE9PWw7KXt2YXIgYz1sLmV4cGlyYXRpb25UaW1lO2M+bz8obnVsbD09PWkmJihpPWwscz11KSwoMD09PWF8fGE+YykmJihhPWMpKToodT1LdChlLHQsbCx1LG4sciksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdEVmZmVjdD90LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1sOih0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdD1sLHQubGFzdEVmZmVjdD1sKSkpLGw9bC5uZXh0fWZvcihjPW51bGwsbD10LmZpcnN0Q2FwdHVyZWRVcGRhdGU7bnVsbCE9PWw7KXt2YXIgZD1sLmV4cGlyYXRpb25UaW1lO2Q+bz8obnVsbD09PWMmJihjPWwsbnVsbD09PWkmJihzPXUpKSwoMD09PWF8fGE+ZCkmJihhPWQpKToodT1LdChlLHQsbCx1LG4sciksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdENhcHR1cmVkRWZmZWN0P3QuZmlyc3RDYXB0dXJlZEVmZmVjdD10Lmxhc3RDYXB0dXJlZEVmZmVjdD1sOih0Lmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0PWwsdC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bCkpKSxsPWwubmV4dH1udWxsPT09aSYmKHQubGFzdFVwZGF0ZT1udWxsKSxudWxsPT09Yz90Lmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsOmUuZWZmZWN0VGFnfD0zMixudWxsPT09aSYmbnVsbD09PWMmJihzPXUpLHQuYmFzZVN0YXRlPXMsdC5maXJzdFVwZGF0ZT1pLHQuZmlyc3RDYXB0dXJlZFVwZGF0ZT1jLGUuZXhwaXJhdGlvblRpbWU9YSxlLm1lbW9pemVkU3RhdGU9dX1mdW5jdGlvbiAkdChlLHQsbil7bnVsbCE9PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZSYmKG51bGwhPT10Lmxhc3RVcGRhdGUmJih0Lmxhc3RVcGRhdGUubmV4dD10LmZpcnN0Q2FwdHVyZWRVcGRhdGUsdC5sYXN0VXBkYXRlPXQubGFzdENhcHR1cmVkVXBkYXRlKSx0LmZpcnN0Q2FwdHVyZWRVcGRhdGU9dC5sYXN0Q2FwdHVyZWRVcGRhdGU9bnVsbCksUXQodC5maXJzdEVmZmVjdCxuKSx0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1udWxsLFF0KHQuZmlyc3RDYXB0dXJlZEVmZmVjdCxuKSx0LmZpcnN0Q2FwdHVyZWRFZmZlY3Q9dC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bnVsbH1mdW5jdGlvbiBRdChlLHQpe2Zvcig7bnVsbCE9PWU7KXt2YXIgbj1lLmNhbGxiYWNrO2lmKG51bGwhPT1uKXtlLmNhbGxiYWNrPW51bGw7dmFyIHI9dDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmbygiMTkxIixuKSxuLmNhbGwocil9ZT1lLm5leHRFZmZlY3R9fWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6cmUodCl9fWZ1bmN0aW9uIFp0KGUsdCl7dmFyIG49ZS50eXBlLl9jb250ZXh0O2h0KGlpLG4uX2N1cnJlbnRWYWx1ZSxlKSxuLl9jdXJyZW50VmFsdWU9dH1mdW5jdGlvbiBlbihlKXt2YXIgdD1paS5jdXJyZW50O210KGlpLGUpLGUudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gdG4oZSl7YWk9ZSx1aT1saT1udWxsLGUuZmlyc3RDb250ZXh0RGVwZW5kZW5jeT1udWxsfWZ1bmN0aW9uIG5uKGUsdCl7cmV0dXJuIHVpIT09ZSYmITEhPT10JiYwIT09dCYmKCJudW1iZXIiPT10eXBlb2YgdCYmMTA3Mzc0MTgyMyE9PXR8fCh1aT1lLHQ9MTA3Mzc0MTgyMyksdD17Y29udGV4dDplLG9ic2VydmVkQml0czp0LG5leHQ6bnVsbH0sbnVsbD09PWxpPyhudWxsPT09YWkmJm8oIjI5MyIpLGFpLmZpcnN0Q29udGV4dERlcGVuZGVuY3k9bGk9dCk6bGk9bGkubmV4dD10KSxlLl9jdXJyZW50VmFsdWV9ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGU9PT1jaSYmbygiMTc0IiksZX1mdW5jdGlvbiBvbihlLHQpe2h0KHBpLHQsZSksaHQoX2ksZSxlKSxodChkaSxjaSxlKTt2YXIgbj10Lm5vZGVUeXBlO3N3aXRjaChuKXtjYXNlIDk6Y2FzZSAxMTp0PSh0PXQuZG9jdW1lbnRFbGVtZW50KT90Lm5hbWVzcGFjZVVSSTpvdChudWxsLCIiKTticmVhaztkZWZhdWx0Om49OD09PW4/dC5wYXJlbnROb2RlOnQsdD1uLm5hbWVzcGFjZVVSSXx8bnVsbCxuPW4udGFnTmFtZSx0PW90KHQsbil9bXQoZGksZSksaHQoZGksdCxlKX1mdW5jdGlvbiBzbihlKXttdChkaSxlKSxtdChfaSxlKSxtdChwaSxlKX1mdW5jdGlvbiBhbihlKXtybihwaS5jdXJyZW50KTt2YXIgdD1ybihkaS5jdXJyZW50KSxuPW90KHQsZS50eXBlKTt0IT09biYmKGh0KF9pLGUsZSksaHQoZGksbixlKSl9ZnVuY3Rpb24gbG4oZSl7X2kuY3VycmVudD09PWUmJihtdChkaSxlKSxtdChfaSxlKSl9ZnVuY3Rpb24gdW4oZSx0LG4scil7dD1lLm1lbW9pemVkU3RhdGUsbj1uKHIsdCksbj1udWxsPT09bnx8dm9pZCAwPT09bj90Ok1yKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiYwPT09ZS5leHBpcmF0aW9uVGltZSYmKHIuYmFzZVN0YXRlPW4pfWZ1bmN0aW9uIGNuKGUsdCxuLHIsbyxzLGkpe3JldHVybiBlPWUuc3RhdGVOb2RlLCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT9lLnNob3VsZENvbXBvbmVudFVwZGF0ZShyLHMsaSk6IXQucHJvdG90eXBlfHwhdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnR8fCghTGUobixyKXx8IUxlKG8scykpfWZ1bmN0aW9uIGRuKGUsdCxuKXt2YXIgcj0hMSxvPVpzLHM9dC5jb250ZXh0VHlwZTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHMmJm51bGwhPT1zP3M9ZmkuY3VycmVudERpc3BhdGNoZXIucmVhZENvbnRleHQocyk6KG89YnQodCk/bmk6ZWkuY3VycmVudCxyPXQuY29udGV4dFR5cGVzLHM9KHI9bnVsbCE9PXImJnZvaWQgMCE9PXIpP2d0KGUsbyk6WnMpLHQ9bmV3IHQobixzKSxlLm1lbW9pemVkU3RhdGU9bnVsbCE9PXQuc3RhdGUmJnZvaWQgMCE9PXQuc3RhdGU/dC5zdGF0ZTpudWxsLHQudXBkYXRlcj1oaSxlLnN0YXRlTm9kZT10LHQuX3JlYWN0SW50ZXJuYWxGaWJlcj1lLHImJihlPWUuc3RhdGVOb2RlLGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1vLGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9cyksdH1mdW5jdGlvbiBfbihlLHQsbixyKXtlPXQuc3RhdGUsImZ1bmN0aW9uIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksImZ1bmN0aW9uIj09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0LnN0YXRlIT09ZSYmaGkuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0LHQuc3RhdGUsbnVsbCl9ZnVuY3Rpb24gcG4oZSx0LG4scil7dmFyIG89ZS5zdGF0ZU5vZGU7by5wcm9wcz1uLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlLG8ucmVmcz1taTt2YXIgcz10LmNvbnRleHRUeXBlOyJvYmplY3QiPT10eXBlb2YgcyYmbnVsbCE9PXM/by5jb250ZXh0PWZpLmN1cnJlbnREaXNwYXRjaGVyLnJlYWRDb250ZXh0KHMpOihzPWJ0KHQpP25pOmVpLmN1cnJlbnQsby5jb250ZXh0PWd0KGUscykpLHM9ZS51cGRhdGVRdWV1ZSxudWxsIT09cyYmKFh0KGUscyxuLG8sciksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHM9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsImZ1bmN0aW9uIj09dHlwZW9mIHMmJih1bihlLHQscyxuKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmImZ1bmN0aW9uIiE9dHlwZW9mIG8uY29tcG9uZW50V2lsbE1vdW50fHwodD1vLnN0YXRlLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCYmby5jb21wb25lbnRXaWxsTW91bnQoKSwiZnVuY3Rpb24iPT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSx0IT09by5zdGF0ZSYmaGkuZW5xdWV1ZVJlcGxhY2VTdGF0ZShvLG8uc3RhdGUsbnVsbCksbnVsbCE9PShzPWUudXBkYXRlUXVldWUpJiYoWHQoZSxzLG4sbyxyKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYoZS5lZmZlY3RUYWd8PTQpfWZ1bmN0aW9uIGZuKGUsdCxuKXtpZihudWxsIT09KGU9bi5yZWYpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSYmIm9iamVjdCIhPXR5cGVvZiBlKXtpZihuLl9vd25lcil7bj1uLl9vd25lcjt2YXIgcj12b2lkIDA7biYmKDEhPT1uLnRhZyYmbygiMjg5Iikscj1uLnN0YXRlTm9kZSkscnx8bygiMTQ3IixlKTt2YXIgcz0iIitlO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1zP3QucmVmOih0PWZ1bmN0aW9uKGUpe3ZhciB0PXIucmVmczt0PT09bWkmJih0PXIucmVmcz17fSksbnVsbD09PWU/ZGVsZXRlIHRbc106dFtzXT1lfSx0Ll9zdHJpbmdSZWY9cyx0KX0ic3RyaW5nIiE9dHlwZW9mIGUmJm8oIjI4NCIpLG4uX293bmVyfHxvKCIyOTAiLGUpfXJldHVybiBlfWZ1bmN0aW9uIG1uKGUsdCl7InRleHRhcmVhIiE9PWUudHlwZSYmbygiMzEiLCJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOnQsIiIpfWZ1bmN0aW9uIGhuKGUpe2Z1bmN0aW9uIHQodCxuKXtpZihlKXt2YXIgcj10Lmxhc3RFZmZlY3Q7bnVsbCE9PXI/KHIubmV4dEVmZmVjdD1uLHQubGFzdEVmZmVjdD1uKTp0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1uLG4ubmV4dEVmZmVjdD1udWxsLG4uZWZmZWN0VGFnPTh9fWZ1bmN0aW9uIG4obixyKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1yOyl0KG4scikscj1yLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlLHQpe2ZvcihlPW5ldyBNYXA7bnVsbCE9PXQ7KW51bGwhPT10LmtleT9lLnNldCh0LmtleSx0KTplLnNldCh0LmluZGV4LHQpLHQ9dC5zaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBlPUR0KGUsdCxuKSxlLmluZGV4PTAsZS5zaWJsaW5nPW51bGwsZX1mdW5jdGlvbiBpKHQsbixyKXtyZXR1cm4gdC5pbmRleD1yLGU/bnVsbCE9PShyPXQuYWx0ZXJuYXRlKT8ocj1yLmluZGV4LHI8bj8odC5lZmZlY3RUYWc9MixuKTpyKToodC5lZmZlY3RUYWc9MixuKTpufWZ1bmN0aW9uIGEodCl7cmV0dXJuIGUmJm51bGw9PT10LmFsdGVybmF0ZSYmKHQuZWZmZWN0VGFnPTIpLHR9ZnVuY3Rpb24gbChlLHQsbixyKXtyZXR1cm4gbnVsbD09PXR8fDYhPT10LnRhZz8odD1JdChuLGUubW9kZSxyKSx0LnJldHVybj1lLHQpOih0PXModCxuLHIpLHQucmV0dXJuPWUsdCl9ZnVuY3Rpb24gdShlLHQsbixyKXtyZXR1cm4gbnVsbCE9PXQmJnQuZWxlbWVudFR5cGU9PT1uLnR5cGU/KHI9cyh0LG4ucHJvcHMsciksci5yZWY9Zm4oZSx0LG4pLHIucmV0dXJuPWUscik6KHI9d3Qobi50eXBlLG4ua2V5LG4ucHJvcHMsbnVsbCxlLm1vZGUsciksci5yZWY9Zm4oZSx0LG4pLHIucmV0dXJuPWUscil9ZnVuY3Rpb24gYyhlLHQsbixyKXtyZXR1cm4gbnVsbD09PXR8fDQhPT10LnRhZ3x8dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PW4uY29udGFpbmVySW5mb3x8dC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1uLmltcGxlbWVudGF0aW9uPyh0PVB0KG4sZS5tb2RlLHIpLHQucmV0dXJuPWUsdCk6KHQ9cyh0LG4uY2hpbGRyZW58fFtdLHIpLHQucmV0dXJuPWUsdCl9ZnVuY3Rpb24gZChlLHQsbixyLG8pe3JldHVybiBudWxsPT09dHx8NyE9PXQudGFnPyh0PU10KG4sZS5tb2RlLHIsbyksdC5yZXR1cm49ZSx0KToodD1zKHQsbixyKSx0LnJldHVybj1lLHQpfWZ1bmN0aW9uIF8oZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0PUl0KCIiK3QsZS5tb2RlLG4pLHQucmV0dXJuPWUsdDtpZigib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXtzd2l0Y2godC4kJHR5cGVvZil7Y2FzZSBNbzpyZXR1cm4gbj13dCh0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxuKSxuLnJlZj1mbihlLG51bGwsdCksbi5yZXR1cm49ZSxuO2Nhc2Uga286cmV0dXJuIHQ9UHQodCxlLm1vZGUsbiksdC5yZXR1cm49ZSx0fWlmKGdpKHQpfHx0ZSh0KSlyZXR1cm4gdD1NdCh0LGUubW9kZSxuLG51bGwpLHQucmV0dXJuPWUsdDttbihlLHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoZSx0LG4scil7dmFyIG89bnVsbCE9PXQ/dC5rZXk6bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIG58fCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gbnVsbCE9PW8/bnVsbDpsKGUsdCwiIituLHIpO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4pe3N3aXRjaChuLiQkdHlwZW9mKXtjYXNlIE1vOnJldHVybiBuLmtleT09PW8/bi50eXBlPT09SW8/ZChlLHQsbi5wcm9wcy5jaGlsZHJlbixyLG8pOnUoZSx0LG4scik6bnVsbDtjYXNlIGtvOnJldHVybiBuLmtleT09PW8/YyhlLHQsbixyKTpudWxsfWlmKGdpKG4pfHx0ZShuKSlyZXR1cm4gbnVsbCE9PW8/bnVsbDpkKGUsdCxuLHIsbnVsbCk7bW4oZSxuKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmKGUsdCxuLHIsbyl7aWYoInN0cmluZyI9PXR5cGVvZiByfHwibnVtYmVyIj09dHlwZW9mIHIpcmV0dXJuIGU9ZS5nZXQobil8fG51bGwsbCh0LGUsIiIrcixvKTtpZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPT1yKXtzd2l0Y2goci4kJHR5cGVvZil7Y2FzZSBNbzpyZXR1cm4gZT1lLmdldChudWxsPT09ci5rZXk/bjpyLmtleSl8fG51bGwsci50eXBlPT09SW8/ZCh0LGUsci5wcm9wcy5jaGlsZHJlbixvLHIua2V5KTp1KHQsZSxyLG8pO2Nhc2Uga286cmV0dXJuIGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLGModCxlLHIsbyl9aWYoZ2kocil8fHRlKHIpKXJldHVybiBlPWUuZ2V0KG4pfHxudWxsLGQodCxlLHIsbyxudWxsKTttbih0LHIpfXJldHVybiBudWxsfWZ1bmN0aW9uIG0obyxzLGEsbCl7Zm9yKHZhciB1PW51bGwsYz1udWxsLGQ9cyxtPXM9MCxoPW51bGw7bnVsbCE9PWQmJm08YS5sZW5ndGg7bSsrKXtkLmluZGV4Pm0/KGg9ZCxkPW51bGwpOmg9ZC5zaWJsaW5nO3ZhciBnPXAobyxkLGFbbV0sbCk7aWYobnVsbD09PWcpe251bGw9PT1kJiYoZD1oKTticmVha31lJiZkJiZudWxsPT09Zy5hbHRlcm5hdGUmJnQobyxkKSxzPWkoZyxzLG0pLG51bGw9PT1jP3U9ZzpjLnNpYmxpbmc9ZyxjPWcsZD1ofWlmKG09PT1hLmxlbmd0aClyZXR1cm4gbihvLGQpLHU7aWYobnVsbD09PWQpe2Zvcig7bTxhLmxlbmd0aDttKyspKGQ9XyhvLGFbbV0sbCkpJiYocz1pKGQscyxtKSxudWxsPT09Yz91PWQ6Yy5zaWJsaW5nPWQsYz1kKTtyZXR1cm4gdX1mb3IoZD1yKG8sZCk7bTxhLmxlbmd0aDttKyspKGg9ZihkLG8sbSxhW21dLGwpKSYmKGUmJm51bGwhPT1oLmFsdGVybmF0ZSYmZC5kZWxldGUobnVsbD09PWgua2V5P206aC5rZXkpLHM9aShoLHMsbSksbnVsbD09PWM/dT1oOmMuc2libGluZz1oLGM9aCk7cmV0dXJuIGUmJmQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChvLGUpfSksdX1mdW5jdGlvbiBoKHMsYSxsLHUpe3ZhciBjPXRlKGwpOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiZvKCIxNTAiKSxudWxsPT0obD1jLmNhbGwobCkpJiZvKCIxNTEiKTtmb3IodmFyIGQ9Yz1udWxsLG09YSxoPWE9MCxnPW51bGwsYj1sLm5leHQoKTtudWxsIT09bSYmIWIuZG9uZTtoKyssYj1sLm5leHQoKSl7bS5pbmRleD5oPyhnPW0sbT1udWxsKTpnPW0uc2libGluZzt2YXIgRT1wKHMsbSxiLnZhbHVlLHUpO2lmKG51bGw9PT1FKXttfHwobT1nKTticmVha31lJiZtJiZudWxsPT09RS5hbHRlcm5hdGUmJnQocyxtKSxhPWkoRSxhLGgpLG51bGw9PT1kP2M9RTpkLnNpYmxpbmc9RSxkPUUsbT1nfWlmKGIuZG9uZSlyZXR1cm4gbihzLG0pLGM7aWYobnVsbD09PW0pe2Zvcig7IWIuZG9uZTtoKyssYj1sLm5leHQoKSludWxsIT09KGI9XyhzLGIudmFsdWUsdSkpJiYoYT1pKGIsYSxoKSxudWxsPT09ZD9jPWI6ZC5zaWJsaW5nPWIsZD1iKTtyZXR1cm4gY31mb3IobT1yKHMsbSk7IWIuZG9uZTtoKyssYj1sLm5leHQoKSludWxsIT09KGI9ZihtLHMsaCxiLnZhbHVlLHUpKSYmKGUmJm51bGwhPT1iLmFsdGVybmF0ZSYmbS5kZWxldGUobnVsbD09PWIua2V5P2g6Yi5rZXkpLGE9aShiLGEsaCksbnVsbD09PWQ/Yz1iOmQuc2libGluZz1iLGQ9Yik7cmV0dXJuIGUmJm0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChzLGUpfSksY31yZXR1cm4gZnVuY3Rpb24oZSxyLGksbCl7dmFyIHU9Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aSYmaS50eXBlPT09SW8mJm51bGw9PT1pLmtleTt1JiYoaT1pLnByb3BzLmNoaWxkcmVuKTt2YXIgYz0ib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pO2lmKGMpc3dpdGNoKGkuJCR0eXBlb2Ype2Nhc2UgTW86ZTp7Zm9yKGM9aS5rZXksdT1yO251bGwhPT11Oyl7aWYodS5rZXk9PT1jKXtpZig3PT09dS50YWc/aS50eXBlPT09SW86dS5lbGVtZW50VHlwZT09PWkudHlwZSl7bihlLHUuc2libGluZykscj1zKHUsaS50eXBlPT09SW8/aS5wcm9wcy5jaGlsZHJlbjppLnByb3BzLGwpLHIucmVmPWZuKGUsdSxpKSxyLnJldHVybj1lLGU9cjticmVhayBlfW4oZSx1KTticmVha310KGUsdSksdT11LnNpYmxpbmd9aS50eXBlPT09SW8/KHI9TXQoaS5wcm9wcy5jaGlsZHJlbixlLm1vZGUsbCxpLmtleSksci5yZXR1cm49ZSxlPXIpOihsPXd0KGkudHlwZSxpLmtleSxpLnByb3BzLG51bGwsZS5tb2RlLGwpLGwucmVmPWZuKGUscixpKSxsLnJldHVybj1lLGU9bCl9cmV0dXJuIGEoZSk7Y2FzZSBrbzplOntmb3IodT1pLmtleTtudWxsIT09cjspe2lmKHIua2V5PT09dSl7aWYoND09PXIudGFnJiZyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09aS5jb250YWluZXJJbmZvJiZyLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWkuaW1wbGVtZW50YXRpb24pe24oZSxyLnNpYmxpbmcpLHI9cyhyLGkuY2hpbGRyZW58fFtdLGwpLHIucmV0dXJuPWUsZT1yO2JyZWFrIGV9bihlLHIpO2JyZWFrfXQoZSxyKSxyPXIuc2libGluZ31yPVB0KGksZS5tb2RlLGwpLHIucmV0dXJuPWUsZT1yfXJldHVybiBhKGUpfWlmKCJzdHJpbmciPT10eXBlb2YgaXx8Im51bWJlciI9PXR5cGVvZiBpKXJldHVybiBpPSIiK2ksbnVsbCE9PXImJjY9PT1yLnRhZz8obihlLHIuc2libGluZykscj1zKHIsaSxsKSxyLnJldHVybj1lLGU9cik6KG4oZSxyKSxyPUl0KGksZS5tb2RlLGwpLHIucmV0dXJuPWUsZT1yKSxhKGUpO2lmKGdpKGkpKXJldHVybiBtKGUscixpLGwpO2lmKHRlKGkpKXJldHVybiBoKGUscixpLGwpO2lmKGMmJm1uKGUsaSksdm9pZCAwPT09aSYmIXUpc3dpdGNoKGUudGFnKXtjYXNlIDE6Y2FzZSAwOmw9ZS50eXBlLG8oIjE1MiIsbC5kaXNwbGF5TmFtZXx8bC5uYW1lfHwiQ29tcG9uZW50Iil9cmV0dXJuIG4oZSxyKX19ZnVuY3Rpb24gZ24oZSx0KXt2YXIgbj1qdCg1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnR5cGU9IkRFTEVURUQiLG4uc3RhdGVOb2RlPXQsbi5yZXR1cm49ZSxuLmVmZmVjdFRhZz04LG51bGwhPT1lLmxhc3RFZmZlY3Q/KGUubGFzdEVmZmVjdC5uZXh0RWZmZWN0PW4sZS5sYXN0RWZmZWN0PW4pOmUuZmlyc3RFZmZlY3Q9ZS5sYXN0RWZmZWN0PW59ZnVuY3Rpb24gYm4oZSx0KXtzd2l0Y2goZS50YWcpe2Nhc2UgNTp2YXIgbj1lLnR5cGU7cmV0dXJuIG51bGwhPT0odD0xIT09dC5ub2RlVHlwZXx8bi50b0xvd2VyQ2FzZSgpIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6dCkmJihlLnN0YXRlTm9kZT10LCEwKTtjYXNlIDY6cmV0dXJuIG51bGwhPT0odD0iIj09PWUucGVuZGluZ1Byb3BzfHwzIT09dC5ub2RlVHlwZT9udWxsOnQpJiYoZS5zdGF0ZU5vZGU9dCwhMCk7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRW4oZSl7aWYoVGkpe3ZhciB0PXZpO2lmKHQpe3ZhciBuPXQ7aWYoIWJuKGUsdCkpe2lmKCEodD1wdChuKSl8fCFibihlLHQpKXJldHVybiBlLmVmZmVjdFRhZ3w9MixUaT0hMSx2b2lkKHlpPWUpO2duKHlpLG4pfXlpPWUsdmk9ZnQodCl9ZWxzZSBlLmVmZmVjdFRhZ3w9MixUaT0hMSx5aT1lfX1mdW5jdGlvbiB5bihlKXtmb3IoZT1lLnJldHVybjtudWxsIT09ZSYmNSE9PWUudGFnJiYzIT09ZS50YWc7KWU9ZS5yZXR1cm47eWk9ZX1mdW5jdGlvbiB2bihlKXtpZihlIT09eWkpcmV0dXJuITE7aWYoIVRpKXJldHVybiB5bihlKSxUaT0hMCwhMTt2YXIgdD1lLnR5cGU7aWYoNSE9PWUudGFnfHwiaGVhZCIhPT10JiYiYm9keSIhPT10JiYhX3QodCxlLm1lbW9pemVkUHJvcHMpKWZvcih0PXZpO3Q7KWduKGUsdCksdD1wdCh0KTtyZXR1cm4geW4oZSksdmk9eWk/cHQoZS5zdGF0ZU5vZGUpOm51bGwsITB9ZnVuY3Rpb24gVG4oKXt2aT15aT1udWxsLFRpPSExfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PWUuX3Jlc3VsdDtzd2l0Y2goZS5fc3RhdHVzKXtjYXNlIDE6cmV0dXJuIHQ7Y2FzZSAyOmNhc2UgMDp0aHJvdyB0O2RlZmF1bHQ6dGhyb3cgZS5fc3RhdHVzPTAsdD1lLl9jdG9yLHQ9dCgpLHQudGhlbihmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYodD10LmRlZmF1bHQsZS5fc3RhdHVzPTEsZS5fcmVzdWx0PXQpfSxmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTIsZS5fcmVzdWx0PXQpfSksZS5fcmVzdWx0PXQsdH19ZnVuY3Rpb24gQ24oZSx0LG4scil7dC5jaGlsZD1udWxsPT09ZT9FaSh0LG51bGwsbixyKTpiaSh0LGUuY2hpbGQsbixyKX1mdW5jdGlvbiBPbihlLHQsbixyLG8pe249bi5yZW5kZXI7dmFyIHM9dC5yZWY7cmV0dXJuIHRpLmN1cnJlbnR8fHQubWVtb2l6ZWRQcm9wcyE9PXJ8fHMhPT0obnVsbCE9PWU/ZS5yZWY6bnVsbCk/KHI9bihyLHMpLENuKGUsdCxyLG8pLHQuY2hpbGQpOkluKGUsdCxvKX1mdW5jdGlvbiBTbihlLHQsbixyLG8scyl7aWYobnVsbD09PWUpe3ZhciBpPW4udHlwZTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgaXx8eHQoaSl8fHZvaWQgMCE9PWkuZGVmYXVsdFByb3BzfHxudWxsIT09bi5jb21wYXJlPyhlPXd0KG4udHlwZSxudWxsLHIsbnVsbCx0Lm1vZGUscyksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWUpOih0LnRhZz0xNSx0LnR5cGU9aSxSbihlLHQsaSxyLG8scykpfXJldHVybiBpPWUuY2hpbGQsKDA9PT1vfHxvPnMpJiYobz1pLm1lbW9pemVkUHJvcHMsbj1uLmNvbXBhcmUsKG49bnVsbCE9PW4/bjpMZSkobyxyKSYmZS5yZWY9PT10LnJlZik/SW4oZSx0LHMpOihlPUR0KGkscixzKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9ZnVuY3Rpb24gUm4oZSx0LG4scixvLHMpe3JldHVybiBudWxsIT09ZSYmKDA9PT1vfHxvPnMpJiZMZShlLm1lbW9pemVkUHJvcHMscikmJmUucmVmPT09dC5yZWY/SW4oZSx0LHMpOnhuKGUsdCxuLHIscyl9ZnVuY3Rpb24gam4oZSx0KXt2YXIgbj10LnJlZjsobnVsbD09PWUmJm51bGwhPT1ufHxudWxsIT09ZSYmZS5yZWYhPT1uKSYmKHQuZWZmZWN0VGFnfD0xMjgpfWZ1bmN0aW9uIHhuKGUsdCxuLHIsbyl7dmFyIHM9YnQobik/bmk6ZWkuY3VycmVudDtyZXR1cm4gcz1ndCh0LHMpLHRuKHQsbyksbj1uKHIscyksdC5lZmZlY3RUYWd8PTEsQ24oZSx0LG4sbyksdC5jaGlsZH1mdW5jdGlvbiBMbihlLHQsbixyLG8pe2lmKGJ0KG4pKXt2YXIgcz0hMDtBdCh0KX1lbHNlIHM9ITE7aWYodG4odCxvKSxudWxsPT09dC5zdGF0ZU5vZGUpbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLGRuKHQsbixyLG8pLHBuKHQsbixyLG8pLHI9ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIGk9dC5zdGF0ZU5vZGUsYT10Lm1lbW9pemVkUHJvcHM7aS5wcm9wcz1hO3ZhciBsPWkuY29udGV4dCx1PW4uY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dT91PWZpLmN1cnJlbnREaXNwYXRjaGVyLnJlYWRDb250ZXh0KHUpOih1PWJ0KG4pP25pOmVpLmN1cnJlbnQsdT1ndCh0LHUpKTt2YXIgYz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxkPSJmdW5jdGlvbiI9PXR5cGVvZiBjfHwiZnVuY3Rpb24iPT10eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtkfHwiZnVuY3Rpb24iIT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmImZ1bmN0aW9uIiE9dHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGEhPT1yfHxsIT09dSkmJl9uKHQsaSxyLHUpLHNpPSExO3ZhciBfPXQubWVtb2l6ZWRTdGF0ZTtsPWkuc3RhdGU9Xzt2YXIgcD10LnVwZGF0ZVF1ZXVlO251bGwhPT1wJiYoWHQodCxwLHIsaSxvKSxsPXQubWVtb2l6ZWRTdGF0ZSksYSE9PXJ8fF8hPT1sfHx0aS5jdXJyZW50fHxzaT8oImZ1bmN0aW9uIj09dHlwZW9mIGMmJih1bih0LG4sYyxyKSxsPXQubWVtb2l6ZWRTdGF0ZSksKGE9c2l8fGNuKHQsbixhLHIsXyxsLHUpKT8oZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmImZ1bmN0aW9uIiE9dHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50fHwoImZ1bmN0aW9uIj09dHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50JiZpLmNvbXBvbmVudFdpbGxNb3VudCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgaS5jb21wb25lbnREaWRNb3VudCYmKHQuZWZmZWN0VGFnfD00KSk6KCJmdW5jdGlvbiI9PXR5cGVvZiBpLmNvbXBvbmVudERpZE1vdW50JiYodC5lZmZlY3RUYWd8PTQpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1sKSxpLnByb3BzPXIsaS5zdGF0ZT1sLGkuY29udGV4dD11LHI9YSk6KCJmdW5jdGlvbiI9PXR5cGVvZiBpLmNvbXBvbmVudERpZE1vdW50JiYodC5lZmZlY3RUYWd8PTQpLHI9ITEpfWVsc2UgaT10LnN0YXRlTm9kZSxhPXQubWVtb2l6ZWRQcm9wcyxpLnByb3BzPWEsbD1pLmNvbnRleHQsdT1uLmNvbnRleHRUeXBlLCJvYmplY3QiPT10eXBlb2YgdSYmbnVsbCE9PXU/dT1maS5jdXJyZW50RGlzcGF0Y2hlci5yZWFkQ29udGV4dCh1KToodT1idChuKT9uaTplaS5jdXJyZW50LHU9Z3QodCx1KSksYz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywoZD0iZnVuY3Rpb24iPT10eXBlb2YgY3x8ImZ1bmN0aW9uIj09dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHwiZnVuY3Rpb24iIT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmImZ1bmN0aW9uIiE9dHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGEhPT1yfHxsIT09dSkmJl9uKHQsaSxyLHUpLHNpPSExLGw9dC5tZW1vaXplZFN0YXRlLF89aS5zdGF0ZT1sLHA9dC51cGRhdGVRdWV1ZSxudWxsIT09cCYmKFh0KHQscCxyLGksbyksXz10Lm1lbW9pemVkU3RhdGUpLGEhPT1yfHxsIT09X3x8dGkuY3VycmVudHx8c2k/KCJmdW5jdGlvbiI9PXR5cGVvZiBjJiYodW4odCxuLGMsciksXz10Lm1lbW9pemVkU3RhdGUpLChjPXNpfHxjbih0LG4sYSxyLGwsXyx1KSk/KGR8fCJmdW5jdGlvbiIhPXR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiYiZnVuY3Rpb24iIT10eXBlb2YgaS5jb21wb25lbnRXaWxsVXBkYXRlfHwoImZ1bmN0aW9uIj09dHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZSYmaS5jb21wb25lbnRXaWxsVXBkYXRlKHIsXyx1KSwiZnVuY3Rpb24iPT10eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyLF8sdSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBpLmNvbXBvbmVudERpZFVwZGF0ZSYmKHQuZWZmZWN0VGFnfD00KSwiZnVuY3Rpb24iPT10eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKHQuZWZmZWN0VGFnfD0yNTYpKTooImZ1bmN0aW9uIiE9dHlwZW9mIGkuY29tcG9uZW50RGlkVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTI1NiksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPV8pLGkucHJvcHM9cixpLnN0YXRlPV8saS5jb250ZXh0PXUscj1jKTooImZ1bmN0aW9uIiE9dHlwZW9mIGkuY29tcG9uZW50RGlkVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxhPT09ZS5tZW1vaXplZFByb3BzJiZsPT09ZS5tZW1vaXplZFN0YXRlfHwodC5lZmZlY3RUYWd8PTI1Nikscj0hMSk7cmV0dXJuIERuKGUsdCxuLHIscyxvKX1mdW5jdGlvbiBEbihlLHQsbixyLG8scyl7am4oZSx0KTt2YXIgaT0wIT0oNjQmdC5lZmZlY3RUYWcpO2lmKCFyJiYhaSlyZXR1cm4gbyYmQ3QodCxuLCExKSxJbihlLHQscyk7cj10LnN0YXRlTm9kZSxBaS5jdXJyZW50PXQ7dmFyIGE9aSYmImZ1bmN0aW9uIiE9dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5lZmZlY3RUYWd8PTEsbnVsbCE9PWUmJmk/KHQuY2hpbGQ9YmkodCxlLmNoaWxkLG51bGwscyksdC5jaGlsZD1iaSh0LG51bGwsYSxzKSk6Q24oZSx0LGEscyksdC5tZW1vaXplZFN0YXRlPXIuc3RhdGUsbyYmQ3QodCxuLCEwKSx0LmNoaWxkfWZ1bmN0aW9uIHduKGUpe3ZhciB0PWUuc3RhdGVOb2RlO3QucGVuZGluZ0NvbnRleHQ/dnQoZSx0LnBlbmRpbmdDb250ZXh0LHQucGVuZGluZ0NvbnRleHQhPT10LmNvbnRleHQpOnQuY29udGV4dCYmdnQoZSx0LmNvbnRleHQsITEpLG9uKGUsdC5jb250YWluZXJJbmZvKX1mdW5jdGlvbiBNbihlLHQpe2lmKGUmJmUuZGVmYXVsdFByb3BzKXt0PU1yKHt9LHQpLGU9ZS5kZWZhdWx0UHJvcHM7Zm9yKHZhciBuIGluIGUpdm9pZCAwPT09dFtuXSYmKHRbbl09ZVtuXSl9cmV0dXJuIHR9ZnVuY3Rpb24ga24oZSx0LG4pe3ZhciByPXQubW9kZSxvPXQucGVuZGluZ1Byb3BzLHM9dC5tZW1vaXplZFN0YXRlO251bGwhPT1zJiYocy5hbHJlYWR5Q2FwdHVyZWQ/bnVsbCE9PWUmJnM9PT1lLm1lbW9pemVkU3RhdGU/cz17YWxyZWFkeUNhcHR1cmVkOiEwLGRpZFRpbWVvdXQ6ITAsdGltZWRPdXRBdDpzLnRpbWVkT3V0QXR9OihzLmFscmVhZHlDYXB0dXJlZD0hMCxzLmRpZFRpbWVvdXQ9ITApOnM9bnVsbCk7dmFyIGk9bnVsbCE9PXMmJnMuZGlkVGltZW91dDtpZihudWxsPT09ZSlpPyhpPW8uZmFsbGJhY2ssbz1NdChudWxsLHIsMCxudWxsKSxyPU10KGkscixuLG51bGwpLG8uc2libGluZz1yLG49byxuLnJldHVybj1yLnJldHVybj10KTpuPXI9RWkodCxudWxsLG8uY2hpbGRyZW4sbik7ZWxzZXt2YXIgYT1lLm1lbW9pemVkU3RhdGU7bnVsbCE9PWEmJmEuZGlkVGltZW91dD8ocj1lLmNoaWxkLGU9ci5zaWJsaW5nLGk/KG49by5mYWxsYmFjayxyPUR0KHIsci5wZW5kaW5nUHJvcHMsMCksci5lZmZlY3RUYWd8PTIsbz1yLnNpYmxpbmc9RHQoZSxuLGUuZXhwaXJhdGlvblRpbWUpLG8uZWZmZWN0VGFnfD0yLG49cixyLmNoaWxkRXhwaXJhdGlvblRpbWU9MCxyPW8sbi5yZXR1cm49ci5yZXR1cm49dCk6KGk9ZS5jaGlsZCxyPWJpKHQsci5jaGlsZCxvLmNoaWxkcmVuLG4pLGJpKHQsaSxudWxsLG4pLG49cikpOihlPWUuY2hpbGQsaT8oaT1vLmZhbGxiYWNrLG89TXQobnVsbCxyLDAsbnVsbCksby5lZmZlY3RUYWd8PTIsby5jaGlsZD1lLGUucmV0dXJuPW8scj1vLnNpYmxpbmc9TXQoaSxyLG4sbnVsbCksci5lZmZlY3RUYWd8PTIsbj1vLG8uY2hpbGRFeHBpcmF0aW9uVGltZT0wLG4ucmV0dXJuPXIucmV0dXJuPXQpOnI9bj1iaSh0LGUsby5jaGlsZHJlbixuKSl9cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1zLHQuY2hpbGQ9bixyfWZ1bmN0aW9uIEluKGUsdCxuKXtudWxsIT09ZSYmKHQuZmlyc3RDb250ZXh0RGVwZW5kZW5jeT1lLmZpcnN0Q29udGV4dERlcGVuZGVuY3kpO3ZhciByPXQuY2hpbGRFeHBpcmF0aW9uVGltZTtpZigwPT09cnx8cj5uKXJldHVybiBudWxsO2lmKG51bGwhPT1lJiZ0LmNoaWxkIT09ZS5jaGlsZCYmbygiMTUzIiksbnVsbCE9PXQuY2hpbGQpe2ZvcihlPXQuY2hpbGQsbj1EdChlLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpLHQuY2hpbGQ9bixuLnJldHVybj10O251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLG49bi5zaWJsaW5nPUR0KGUsZS5wZW5kaW5nUHJvcHMsZS5leHBpcmF0aW9uVGltZSksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBQbihlLHQsbil7dmFyIHI9dC5leHBpcmF0aW9uVGltZTtpZihudWxsIT09ZSYmZS5tZW1vaXplZFByb3BzPT09dC5wZW5kaW5nUHJvcHMmJiF0aS5jdXJyZW50JiYoMD09PXJ8fHI+bikpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnduKHQpLFRuKCk7YnJlYWs7Y2FzZSA1OmFuKHQpO2JyZWFrO2Nhc2UgMTpidCh0LnR5cGUpJiZBdCh0KTticmVhaztjYXNlIDQ6b24odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOlp0KHQsdC5tZW1vaXplZFByb3BzLnZhbHVlKTticmVhaztjYXNlIDEzOmlmKG51bGwhPT0ocj10Lm1lbW9pemVkU3RhdGUpJiZyLmRpZFRpbWVvdXQpcmV0dXJuIDAhPT0ocj10LmNoaWxkLmNoaWxkRXhwaXJhdGlvblRpbWUpJiZyPD1uP2tuKGUsdCxuKToodD1JbihlLHQsbiksbnVsbCE9PXQ/dC5zaWJsaW5nOm51bGwpfXJldHVybiBJbihlLHQsbil9c3dpdGNoKHQuZXhwaXJhdGlvblRpbWU9MCx0LnRhZyl7Y2FzZSAyOnI9dC5lbGVtZW50VHlwZSxudWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksZT10LnBlbmRpbmdQcm9wczt2YXIgcz1ndCh0LGVpLmN1cnJlbnQpO2lmKHRuKHQsbikscz1yKGUscyksdC5lZmZlY3RUYWd8PTEsIm9iamVjdCI9PXR5cGVvZiBzJiZudWxsIT09cyYmImZ1bmN0aW9uIj09dHlwZW9mIHMucmVuZGVyJiZ2b2lkIDA9PT1zLiQkdHlwZW9mKXtpZih0LnRhZz0xLGJ0KHIpKXt2YXIgaT0hMDtBdCh0KX1lbHNlIGk9ITE7dC5tZW1vaXplZFN0YXRlPW51bGwhPT1zLnN0YXRlJiZ2b2lkIDAhPT1zLnN0YXRlP3Muc3RhdGU6bnVsbDt2YXIgYT1yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsiZnVuY3Rpb24iPT10eXBlb2YgYSYmdW4odCxyLGEsZSkscy51cGRhdGVyPWhpLHQuc3RhdGVOb2RlPXMscy5fcmVhY3RJbnRlcm5hbEZpYmVyPXQscG4odCxyLGUsbiksdD1EbihudWxsLHQsciwhMCxpLG4pfWVsc2UgdC50YWc9MCxDbihudWxsLHQscyxuKSx0PXQuY2hpbGQ7cmV0dXJuIHQ7Y2FzZSAxNjpzd2l0Y2gocz10LmVsZW1lbnRUeXBlLG51bGwhPT1lJiYoZS5hbHRlcm5hdGU9bnVsbCx0LmFsdGVybmF0ZT1udWxsLHQuZWZmZWN0VGFnfD0yKSxpPXQucGVuZGluZ1Byb3BzLGU9QW4ocyksdC50eXBlPWUscz10LnRhZz1MdChlKSxpPU1uKGUsaSksYT12b2lkIDAscyl7Y2FzZSAwOmE9eG4obnVsbCx0LGUsaSxuKTticmVhaztjYXNlIDE6YT1MbihudWxsLHQsZSxpLG4pO2JyZWFrO2Nhc2UgMTE6YT1PbihudWxsLHQsZSxpLG4pO2JyZWFrO2Nhc2UgMTQ6YT1TbihudWxsLHQsZSxNbihlLnR5cGUsaSkscixuKTticmVhaztkZWZhdWx0Om8oIjI4MyIsZSl9cmV0dXJuIGE7Y2FzZSAwOnJldHVybiByPXQudHlwZSxzPXQucGVuZGluZ1Byb3BzLHM9dC5lbGVtZW50VHlwZT09PXI/czpNbihyLHMpLHhuKGUsdCxyLHMsbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxzPXQucGVuZGluZ1Byb3BzLHM9dC5lbGVtZW50VHlwZT09PXI/czpNbihyLHMpLExuKGUsdCxyLHMsbik7Y2FzZSAzOnJldHVybiB3bih0KSxyPXQudXBkYXRlUXVldWUsbnVsbD09PXImJm8oIjI4MiIpLHM9dC5tZW1vaXplZFN0YXRlLHM9bnVsbCE9PXM/cy5lbGVtZW50Om51bGwsWHQodCxyLHQucGVuZGluZ1Byb3BzLG51bGwsbikscj10Lm1lbW9pemVkU3RhdGUuZWxlbWVudCxyPT09cz8oVG4oKSx0PUluKGUsdCxuKSk6KHM9dC5zdGF0ZU5vZGUsKHM9KG51bGw9PT1lfHxudWxsPT09ZS5jaGlsZCkmJnMuaHlkcmF0ZSkmJih2aT1mdCh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSx5aT10LHM9VGk9ITApLHM/KHQuZWZmZWN0VGFnfD0yLHQuY2hpbGQ9RWkodCxudWxsLHIsbikpOihDbihlLHQscixuKSxUbigpKSx0PXQuY2hpbGQpLHQ7Y2FzZSA1OnJldHVybiBhbih0KSxudWxsPT09ZSYmRW4odCkscj10LnR5cGUscz10LnBlbmRpbmdQcm9wcyxpPW51bGwhPT1lP2UubWVtb2l6ZWRQcm9wczpudWxsLGE9cy5jaGlsZHJlbixfdChyLHMpP2E9bnVsbDpudWxsIT09aSYmX3QocixpKSYmKHQuZWZmZWN0VGFnfD0xNiksam4oZSx0KSwxMDczNzQxODIzIT09biYmMSZ0Lm1vZGUmJnMuaGlkZGVuPyh0LmV4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjMsdD1udWxsKTooQ24oZSx0LGEsbiksdD10LmNoaWxkKSx0O2Nhc2UgNjpyZXR1cm4gbnVsbD09PWUmJkVuKHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4ga24oZSx0LG4pO2Nhc2UgNDpyZXR1cm4gb24odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLG51bGw9PT1lP3QuY2hpbGQ9YmkodCxudWxsLHIsbik6Q24oZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxzPXQucGVuZGluZ1Byb3BzLHM9dC5lbGVtZW50VHlwZT09PXI/czpNbihyLHMpLE9uKGUsdCxyLHMsbik7Y2FzZSA3OnJldHVybiBDbihlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gQ24oZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihyPXQudHlwZS5fY29udGV4dCxzPXQucGVuZGluZ1Byb3BzLGE9dC5tZW1vaXplZFByb3BzLGk9cy52YWx1ZSxadCh0LGkpLG51bGwhPT1hKXt2YXIgbD1hLnZhbHVlO2lmKDA9PT0oaT1sPT09aSYmKDAhPT1sfHwxL2w9PTEvaSl8fGwhPT1sJiZpIT09aT8wOjB8KCJmdW5jdGlvbiI9PXR5cGVvZiByLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9yLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhsLGkpOjEwNzM3NDE4MjMpKSl7aWYoYS5jaGlsZHJlbj09PXMuY2hpbGRyZW4mJiF0aS5jdXJyZW50KXt0PUluKGUsdCxuKTticmVhayBlfX1lbHNlIGZvcihudWxsIT09KGE9dC5jaGlsZCkmJihhLnJldHVybj10KTtudWxsIT09YTspe2lmKG51bGwhPT0obD1hLmZpcnN0Q29udGV4dERlcGVuZGVuY3kpKWRve2lmKGwuY29udGV4dD09PXImJjAhPShsLm9ic2VydmVkQml0cyZpKSl7aWYoMT09PWEudGFnKXt2YXIgdT16dChuKTt1LnRhZz0yLFd0KGEsdSl9KDA9PT1hLmV4cGlyYXRpb25UaW1lfHxhLmV4cGlyYXRpb25UaW1lPm4pJiYoYS5leHBpcmF0aW9uVGltZT1uKSx1PWEuYWx0ZXJuYXRlLG51bGwhPT11JiYoMD09PXUuZXhwaXJhdGlvblRpbWV8fHUuZXhwaXJhdGlvblRpbWU+bikmJih1LmV4cGlyYXRpb25UaW1lPW4pO2Zvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKHU9Yy5hbHRlcm5hdGUsMD09PWMuY2hpbGRFeHBpcmF0aW9uVGltZXx8Yy5jaGlsZEV4cGlyYXRpb25UaW1lPm4pYy5jaGlsZEV4cGlyYXRpb25UaW1lPW4sbnVsbCE9PXUmJigwPT09dS5jaGlsZEV4cGlyYXRpb25UaW1lfHx1LmNoaWxkRXhwaXJhdGlvblRpbWU+bikmJih1LmNoaWxkRXhwaXJhdGlvblRpbWU9bik7ZWxzZXtpZihudWxsPT09dXx8ISgwPT09dS5jaGlsZEV4cGlyYXRpb25UaW1lfHx1LmNoaWxkRXhwaXJhdGlvblRpbWU+bikpYnJlYWs7dS5jaGlsZEV4cGlyYXRpb25UaW1lPW59Yz1jLnJldHVybn19dT1hLmNoaWxkLGw9bC5uZXh0fXdoaWxlKG51bGwhPT1sKTtlbHNlIHU9MTA9PT1hLnRhZyYmYS50eXBlPT09dC50eXBlP251bGw6YS5jaGlsZDtpZihudWxsIT09dSl1LnJldHVybj1hO2Vsc2UgZm9yKHU9YTtudWxsIT09dTspe2lmKHU9PT10KXt1PW51bGw7YnJlYWt9aWYobnVsbCE9PShhPXUuc2libGluZykpe2EucmV0dXJuPXUucmV0dXJuLHU9YTticmVha311PXUucmV0dXJufWE9dX19Q24oZSx0LHMuY2hpbGRyZW4sbiksdD10LmNoaWxkfXJldHVybiB0O2Nhc2UgOTpyZXR1cm4gcz10LnR5cGUsaT10LnBlbmRpbmdQcm9wcyxyPWkuY2hpbGRyZW4sdG4odCxuKSxzPW5uKHMsaS51bnN0YWJsZV9vYnNlcnZlZEJpdHMpLHI9cihzKSx0LmVmZmVjdFRhZ3w9MSxDbihlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHM9dC50eXBlLGk9TW4ocy50eXBlLHQucGVuZGluZ1Byb3BzKSxTbihlLHQscyxpLHIsbik7Y2FzZSAxNTpyZXR1cm4gUm4oZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxyLG4pO2Nhc2UgMTc6cmV0dXJuIHI9dC50eXBlLHM9dC5wZW5kaW5nUHJvcHMscz10LmVsZW1lbnRUeXBlPT09cj9zOk1uKHIscyksbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLHQudGFnPTEsYnQocik/KGU9ITAsQXQodCkpOmU9ITEsdG4odCxuKSxkbih0LHIscyxuKSxwbih0LHIscyxuKSxEbihudWxsLHQsciwhMCxlLG4pO2RlZmF1bHQ6bygiMTU2Iil9fWZ1bmN0aW9uIE5uKGUpe2UuZWZmZWN0VGFnfD00fWZ1bmN0aW9uIEhuKGUsdCl7dmFyIG49dC5zb3VyY2Uscj10LnN0YWNrO251bGw9PT1yJiZudWxsIT09biYmKHI9cmUobikpLG51bGwhPT1uJiZuZShuLnR5cGUpLHQ9dC52YWx1ZSxudWxsIT09ZSYmMT09PWUudGFnJiZuZShlLnR5cGUpO3RyeXtjb25zb2xlLmVycm9yKHQpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fWZ1bmN0aW9uIEZuKGUpe3ZhciB0PWUucmVmO2lmKG51bGwhPT10KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXRyeXt0KG51bGwpfWNhdGNoKHQpe0puKGUsdCl9ZWxzZSB0LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBCbihlKXtzd2l0Y2goImZ1bmN0aW9uIj09dHlwZW9mIG9pJiZvaShlKSxlLnRhZyl7Y2FzZSAxOkZuKGUpO3ZhciB0PWUuc3RhdGVOb2RlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXt0LnByb3BzPWUubWVtb2l6ZWRQcm9wcyx0LnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSx0LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godCl7Sm4oZSx0KX1icmVhaztjYXNlIDU6Rm4oZSk7YnJlYWs7Y2FzZSA0OnpuKGUpfX1mdW5jdGlvbiBVbihlKXtyZXR1cm4gNT09PWUudGFnfHwzPT09ZS50YWd8fDQ9PT1lLnRhZ31mdW5jdGlvbiBHbihlKXtlOntmb3IodmFyIHQ9ZS5yZXR1cm47bnVsbCE9PXQ7KXtpZihVbih0KSl7dmFyIG49dDticmVhayBlfXQ9dC5yZXR1cm59bygiMTYwIiksbj12b2lkIDB9dmFyIHI9dD12b2lkIDA7c3dpdGNoKG4udGFnKXtjYXNlIDU6dD1uLnN0YXRlTm9kZSxyPSExO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHI9ITA7YnJlYWs7ZGVmYXVsdDpvKCIxNjEiKX0xNiZuLmVmZmVjdFRhZyYmKHN0KHQsIiIpLG4uZWZmZWN0VGFnJj0tMTcpO2U6dDpmb3Iobj1lOzspe2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8VW4obi5yZXR1cm4pKXtuPW51bGw7YnJlYWsgZX1uPW4ucmV0dXJufWZvcihuLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nOzUhPT1uLnRhZyYmNiE9PW4udGFnOyl7aWYoMiZuLmVmZmVjdFRhZyljb250aW51ZSB0O2lmKG51bGw9PT1uLmNoaWxkfHw0PT09bi50YWcpY29udGludWUgdDtuLmNoaWxkLnJldHVybj1uLG49bi5jaGlsZH1pZighKDImbi5lZmZlY3RUYWcpKXtuPW4uc3RhdGVOb2RlO2JyZWFrIGV9fWZvcih2YXIgcz1lOzspe2lmKDU9PT1zLnRhZ3x8Nj09PXMudGFnKWlmKG4paWYocil7dmFyIGk9dCxhPXMuc3RhdGVOb2RlLGw9bjs4PT09aS5ub2RlVHlwZT9pLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbCk6aS5pbnNlcnRCZWZvcmUoYSxsKX1lbHNlIHQuaW5zZXJ0QmVmb3JlKHMuc3RhdGVOb2RlLG4pO2Vsc2Ugcj8oYT10LGw9cy5zdGF0ZU5vZGUsOD09PWEubm9kZVR5cGU/KGk9YS5wYXJlbnROb2RlLGkuaW5zZXJ0QmVmb3JlKGwsYSkpOihpPWEsaS5hcHBlbmRDaGlsZChsKSksbnVsbCE9PShhPWEuX3JlYWN0Um9vdENvbnRhaW5lcikmJnZvaWQgMCE9PWF8fG51bGwhPT1pLm9uY2xpY2t8fChpLm9uY2xpY2s9Y3QpKTp0LmFwcGVuZENoaWxkKHMuc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1zLnRhZyYmbnVsbCE9PXMuY2hpbGQpe3MuY2hpbGQucmV0dXJuPXMscz1zLmNoaWxkO2NvbnRpbnVlfWlmKHM9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXMuc2libGluZzspe2lmKG51bGw9PT1zLnJldHVybnx8cy5yZXR1cm49PT1lKXJldHVybjtzPXMucmV0dXJufXMuc2libGluZy5yZXR1cm49cy5yZXR1cm4scz1zLnNpYmxpbmd9fWZ1bmN0aW9uIHpuKGUpe2Zvcih2YXIgdD1lLG49ITEscj12b2lkIDAscz12b2lkIDA7Oyl7aWYoIW4pe249dC5yZXR1cm47ZTpmb3IoOzspe3N3aXRjaChudWxsPT09biYmbygiMTYwIiksbi50YWcpe2Nhc2UgNTpyPW4uc3RhdGVOb2RlLHM9ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OnI9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxzPSEwO2JyZWFrIGV9bj1uLnJldHVybn1uPSEwfWlmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXtlOmZvcih2YXIgaT10LGE9aTs7KWlmKEJuKGEpLG51bGwhPT1hLmNoaWxkJiY0IT09YS50YWcpYS5jaGlsZC5yZXR1cm49YSxhPWEuY2hpbGQ7ZWxzZXtpZihhPT09aSlicmVhaztmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09aSlicmVhayBlO2E9YS5yZXR1cm59YS5zaWJsaW5nLnJldHVybj1hLnJldHVybixhPWEuc2libGluZ31zPyhpPXIsYT10LnN0YXRlTm9kZSw4PT09aS5ub2RlVHlwZT9pLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk6aS5yZW1vdmVDaGlsZChhKSk6ci5yZW1vdmVDaGlsZCh0LnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09dC50YWc/KHI9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxzPSEwKTpCbih0KSxudWxsIT09dC5jaGlsZCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWs7Zm9yKDtudWxsPT09dC5zaWJsaW5nOyl7aWYobnVsbD09PXQucmV0dXJufHx0LnJldHVybj09PWUpcmV0dXJuO3Q9dC5yZXR1cm4sND09PXQudGFnJiYobj0hMSl9dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319ZnVuY3Rpb24gVm4oZSx0KXtzd2l0Y2godC50YWcpe2Nhc2UgMTpicmVhaztjYXNlIDU6dmFyIG49dC5zdGF0ZU5vZGU7aWYobnVsbCE9bil7dmFyIHI9dC5tZW1vaXplZFByb3BzLHM9bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOnI7ZT10LnR5cGU7dmFyIGk9dC51cGRhdGVRdWV1ZTtpZih0LnVwZGF0ZVF1ZXVlPW51bGwsbnVsbCE9PWkpe2ZvcihuW1pyXT1yLCJpbnB1dCI9PT1lJiYicmFkaW8iPT09ci50eXBlJiZudWxsIT1yLm5hbWUmJnBlKG4sciksbHQoZSxzKSx0PWx0KGUscikscz0wO3M8aS5sZW5ndGg7cys9Mil7dmFyIGE9aVtzXSxsPWlbcysxXTsic3R5bGUiPT09YT9pdChuLGwpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT1hP3pzKG4sbCk6ImNoaWxkcmVuIj09PWE/c3QobixsKTp1ZShuLGEsbCx0KX1zd2l0Y2goZSl7Y2FzZSJpbnB1dCI6ZmUobixyKTticmVhaztjYXNlInRleHRhcmVhIjp0dChuLHIpO2JyZWFrO2Nhc2Uic2VsZWN0IjplPW4uX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxuLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFyLm11bHRpcGxlLGk9ci52YWx1ZSxudWxsIT1pP0plKG4sISFyLm11bHRpcGxlLGksITEpOmUhPT0hIXIubXVsdGlwbGUmJihudWxsIT1yLmRlZmF1bHRWYWx1ZT9KZShuLCEhci5tdWx0aXBsZSxyLmRlZmF1bHRWYWx1ZSwhMCk6SmUobiwhIXIubXVsdGlwbGUsci5tdWx0aXBsZT9bXToiIiwhMSkpfX19YnJlYWs7Y2FzZSA2Om51bGw9PT10LnN0YXRlTm9kZSYmbygiMTYyIiksdC5zdGF0ZU5vZGUubm9kZVZhbHVlPXQubWVtb2l6ZWRQcm9wczticmVhaztjYXNlIDM6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMTc6YnJlYWs7ZGVmYXVsdDpvKCIxNjMiKX19ZnVuY3Rpb24gV24oZSx0LG4pe249enQobiksbi50YWc9MyxuLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIHI9dC52YWx1ZTtyZXR1cm4gbi5jYWxsYmFjaz1mdW5jdGlvbigpe2dyKHIpLEhuKGUsdCl9LG59ZnVuY3Rpb24gWW4oZSx0LG4pe249enQobiksbi50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt2YXIgbz10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKG8pfX12YXIgcz1lLnN0YXRlTm9kZTtyZXR1cm4gbnVsbCE9PXMmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmNvbXBvbmVudERpZENhdGNoJiYobi5jYWxsYmFjaz1mdW5jdGlvbigpeyJmdW5jdGlvbiIhPXR5cGVvZiByJiYobnVsbD09PUJpP0JpPW5ldyBTZXQoW3RoaXNdKTpCaS5hZGQodGhpcykpO3ZhciBuPXQudmFsdWUsbz10LnN0YWNrO0huKGUsdCksdGhpcy5jb21wb25lbnREaWRDYXRjaChuLHtjb21wb25lbnRTdGFjazpudWxsIT09bz9vOiIifSl9KSxufWZ1bmN0aW9uIHFuKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAxOmJ0KGUudHlwZSkmJkV0KGUpO3ZhciB0PWUuZWZmZWN0VGFnO3JldHVybiAxMDI0JnQ/KGUuZWZmZWN0VGFnPS0xMDI1JnR8NjQsZSk6bnVsbDtjYXNlIDM6cmV0dXJuIHNuKGUpLHl0KGUpLHQ9ZS5lZmZlY3RUYWcsMCE9KDY0JnQpJiZvKCIyODUiKSxlLmVmZmVjdFRhZz0tMTAyNSZ0fDY0LGU7Y2FzZSA1OnJldHVybiBsbihlKSxudWxsO2Nhc2UgMTM6aWYoMTAyNCYodD1lLmVmZmVjdFRhZykpe2UuZWZmZWN0VGFnPS0xMDI1JnR8NjQsdD1lLmFsdGVybmF0ZSx0PW51bGwhPT10P3QubWVtb2l6ZWRTdGF0ZTpudWxsO3ZhciBuPWUubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbnVsbD09PW4/bj17YWxyZWFkeUNhcHR1cmVkOiEwLGRpZFRpbWVvdXQ6ITEsdGltZWRPdXRBdDowfTp0PT09bj9uPXthbHJlYWR5Q2FwdHVyZWQ6ITAsZGlkVGltZW91dDpuLmRpZFRpbWVvdXQsdGltZWRPdXRBdDpuLnRpbWVkT3V0QXR9Om4uYWxyZWFkeUNhcHR1cmVkPSEwLGUubWVtb2l6ZWRTdGF0ZT1uLGV9cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBzbihlKSxudWxsO2Nhc2UgMTA6cmV0dXJuIGVuKGUpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gS24oKXtpZihudWxsIT09TWkpZm9yKHZhciBlPU1pLnJldHVybjtudWxsIT09ZTspe3ZhciB0PWU7c3dpdGNoKHQudGFnKXtjYXNlIDE6dmFyIG49dC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPT1uJiZ2b2lkIDAhPT1uJiZFdCh0KTticmVhaztjYXNlIDM6c24odCkseXQodCk7YnJlYWs7Y2FzZSA1OmxuKHQpO2JyZWFrO2Nhc2UgNDpzbih0KTticmVhaztjYXNlIDEwOmVuKHQpfWU9ZS5yZXR1cm59a2k9bnVsbCxJaT0wLFBpPS0xLE5pPSExLE1pPW51bGx9ZnVuY3Rpb24gWG4oZSl7Zm9yKDs7KXt2YXIgdD1lLmFsdGVybmF0ZSxuPWUucmV0dXJuLHI9ZS5zaWJsaW5nO2lmKDA9PSg1MTImZS5lZmZlY3RUYWcpKXt2YXIgcz10O3Q9ZTt2YXIgaT10LnBlbmRpbmdQcm9wcztzd2l0Y2godC50YWcpe2Nhc2UgMjpjYXNlIDE2OmJyZWFrO2Nhc2UgMTU6Y2FzZSAwOmJyZWFrO2Nhc2UgMTpidCh0LnR5cGUpJiZFdCh0KTticmVhaztjYXNlIDM6c24odCkseXQodCksaT10LnN0YXRlTm9kZSxpLnBlbmRpbmdDb250ZXh0JiYoaS5jb250ZXh0PWkucGVuZGluZ0NvbnRleHQsaS5wZW5kaW5nQ29udGV4dD1udWxsKSxudWxsIT09cyYmbnVsbCE9PXMuY2hpbGR8fCh2bih0KSx0LmVmZmVjdFRhZyY9LTMpLE9pKHQpO2JyZWFrO2Nhc2UgNTpsbih0KTt2YXIgYT1ybihwaS5jdXJyZW50KSxsPXQudHlwZTtpZihudWxsIT09cyYmbnVsbCE9dC5zdGF0ZU5vZGUpU2kocyx0LGwsaSxhKSxzLnJlZiE9PXQucmVmJiYodC5lZmZlY3RUYWd8PTEyOCk7ZWxzZSBpZihpKXt2YXIgdT1ybihkaS5jdXJyZW50KTtpZih2bih0KSl7aT10LHM9aS5zdGF0ZU5vZGU7dmFyIGM9aS50eXBlLGQ9aS5tZW1vaXplZFByb3BzLF89YTtzd2l0Y2goc1tKcl09aSxzW1pyXT1kLGw9dm9pZCAwLGE9Yyl7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpIZSgibG9hZCIscyk7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGM9MDtjPGxvLmxlbmd0aDtjKyspSGUobG9bY10scyk7YnJlYWs7Y2FzZSJzb3VyY2UiOkhlKCJlcnJvciIscyk7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6SGUoImVycm9yIixzKSxIZSgibG9hZCIscyk7YnJlYWs7Y2FzZSJmb3JtIjpIZSgicmVzZXQiLHMpLEhlKCJzdWJtaXQiLHMpO2JyZWFrO2Nhc2UiZGV0YWlscyI6SGUoInRvZ2dsZSIscyk7YnJlYWs7Y2FzZSJpbnB1dCI6X2UocyxkKSxIZSgiaW52YWxpZCIscyksdXQoXywib25DaGFuZ2UiKTticmVhaztjYXNlInNlbGVjdCI6cy5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWQubXVsdGlwbGV9LEhlKCJpbnZhbGlkIixzKSx1dChfLCJvbkNoYW5nZSIpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOmV0KHMsZCksSGUoImludmFsaWQiLHMpLHV0KF8sIm9uQ2hhbmdlIil9YXQoYSxkKSxjPW51bGw7Zm9yKGwgaW4gZClkLmhhc093blByb3BlcnR5KGwpJiYodT1kW2xdLCJjaGlsZHJlbiI9PT1sPyJzdHJpbmciPT10eXBlb2YgdT9zLnRleHRDb250ZW50IT09dSYmKGM9WyJjaGlsZHJlbiIsdV0pOiJudW1iZXIiPT10eXBlb2YgdSYmcy50ZXh0Q29udGVudCE9PSIiK3UmJihjPVsiY2hpbGRyZW4iLCIiK3VdKTpWci5oYXNPd25Qcm9wZXJ0eShsKSYmbnVsbCE9dSYmdXQoXyxsKSk7c3dpdGNoKGEpe2Nhc2UiaW5wdXQiOloocyksbWUocyxkLCEwKTticmVhaztjYXNlInRleHRhcmVhIjpaKHMpLG50KHMsZCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiBkLm9uQ2xpY2smJihzLm9uY2xpY2s9Y3QpfWw9YyxpLnVwZGF0ZVF1ZXVlPWwsaT1udWxsIT09bCxpJiZObih0KX1lbHNle2Q9dCxzPWwsXz1pLGM9OT09PWEubm9kZVR5cGU/YTphLm93bmVyRG9jdW1lbnQsdT09PVVzLmh0bWwmJih1PXJ0KHMpKSx1PT09VXMuaHRtbD8ic2NyaXB0Ij09PXM/KHM9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxzLmlubmVySFRNTD0iPHNjcmlwdD48XC9zY3JpcHQ+IixjPXMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKSk6InN0cmluZyI9PXR5cGVvZiBfLmlzP2M9Yy5jcmVhdGVFbGVtZW50KHMse2lzOl8uaXN9KTooYz1jLmNyZWF0ZUVsZW1lbnQocyksInNlbGVjdCI9PT1zJiZfLm11bHRpcGxlJiYoYy5tdWx0aXBsZT0hMCkpOmM9Yy5jcmVhdGVFbGVtZW50TlModSxzKSxzPWMsc1tKcl09ZCxzW1pyXT1pLENpKHMsdCwhMSwhMSksXz1zLGM9bCxkPWk7dmFyIHA9YSxmPWx0KGMsZCk7c3dpdGNoKGMpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6SGUoImxvYWQiLF8pLGE9ZDticmVhaztjYXNlInZpZGVvIjpjYXNlImF1ZGlvIjpmb3IoYT0wO2E8bG8ubGVuZ3RoO2ErKylIZShsb1thXSxfKTthPWQ7YnJlYWs7Y2FzZSJzb3VyY2UiOkhlKCJlcnJvciIsXyksYT1kO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOkhlKCJlcnJvciIsXyksSGUoImxvYWQiLF8pLGE9ZDticmVhaztjYXNlImZvcm0iOkhlKCJyZXNldCIsXyksSGUoInN1Ym1pdCIsXyksYT1kO2JyZWFrO2Nhc2UiZGV0YWlscyI6SGUoInRvZ2dsZSIsXyksYT1kO2JyZWFrO2Nhc2UiaW5wdXQiOl9lKF8sZCksYT1kZShfLGQpLEhlKCJpbnZhbGlkIixfKSx1dChwLCJvbkNoYW5nZSIpO2JyZWFrO2Nhc2Uib3B0aW9uIjphPVFlKF8sZCk7YnJlYWs7Y2FzZSJzZWxlY3QiOl8uX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfSxhPU1yKHt9LGQse3ZhbHVlOnZvaWQgMH0pLEhlKCJpbnZhbGlkIixfKSx1dChwLCJvbkNoYW5nZSIpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOmV0KF8sZCksYT1aZShfLGQpLEhlKCJpbnZhbGlkIixfKSx1dChwLCJvbkNoYW5nZSIpO2JyZWFrO2RlZmF1bHQ6YT1kfWF0KGMsYSksdT12b2lkIDA7dmFyIG09YyxoPV8sZz1hO2Zvcih1IGluIGcpaWYoZy5oYXNPd25Qcm9wZXJ0eSh1KSl7dmFyIGI9Z1t1XTsic3R5bGUiPT09dT9pdChoLGIpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT11P251bGwhPShiPWI/Yi5fX2h0bWw6dm9pZCAwKSYmenMoaCxiKToiY2hpbGRyZW4iPT09dT8ic3RyaW5nIj09dHlwZW9mIGI/KCJ0ZXh0YXJlYSIhPT1tfHwiIiE9PWIpJiZzdChoLGIpOiJudW1iZXIiPT10eXBlb2YgYiYmc3QoaCwiIitiKToic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiE9PXUmJiJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciIT09dSYmImF1dG9Gb2N1cyIhPT11JiYoVnIuaGFzT3duUHJvcGVydHkodSk/bnVsbCE9YiYmdXQocCx1KTpudWxsIT1iJiZ1ZShoLHUsYixmKSl9c3dpdGNoKGMpe2Nhc2UiaW5wdXQiOlooXyksbWUoXyxkLCExKTticmVhaztjYXNlInRleHRhcmVhIjpaKF8pLG50KF8sZCk7YnJlYWs7Y2FzZSJvcHRpb24iOm51bGwhPWQudmFsdWUmJl8uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrY2UoZC52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0IjphPV8sYS5tdWx0aXBsZT0hIWQubXVsdGlwbGUsXz1kLnZhbHVlLG51bGwhPV8/SmUoYSwhIWQubXVsdGlwbGUsXywhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJkplKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiBhLm9uQ2xpY2smJihfLm9uY2xpY2s9Y3QpfShpPWR0KGwsaSkpJiZObih0KSx0LnN0YXRlTm9kZT1zfW51bGwhPT10LnJlZiYmKHQuZWZmZWN0VGFnfD0xMjgpfWVsc2UgbnVsbD09PXQuc3RhdGVOb2RlJiZvKCIxNjYiKTticmVhaztjYXNlIDY6cyYmbnVsbCE9dC5zdGF0ZU5vZGU/Umkocyx0LHMubWVtb2l6ZWRQcm9wcyxpKTooInN0cmluZyIhPXR5cGVvZiBpJiYobnVsbD09PXQuc3RhdGVOb2RlJiZvKCIxNjYiKSkscz1ybihwaS5jdXJyZW50KSxybihkaS5jdXJyZW50KSx2bih0KT8oaT10LGw9aS5zdGF0ZU5vZGUscz1pLm1lbW9pemVkUHJvcHMsbFtKcl09aSwoaT1sLm5vZGVWYWx1ZSE9PXMpJiZObih0KSk6KGw9dCxpPSg5PT09cy5ub2RlVHlwZT9zOnMub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoaSksaVtKcl09dCxsLnN0YXRlTm9kZT1pKSk7YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEzOmk9dC5tZW1vaXplZFN0YXRlLGw9bnVsbCE9PXM/cy5tZW1vaXplZFN0YXRlOm51bGwsKG51bGwhPT1pJiZpLmRpZFRpbWVvdXQpIT09KG51bGwhPT1sJiZsLmRpZFRpbWVvdXQpJiYodC5lZmZlY3RUYWd8PTQpO2JyZWFrO2Nhc2UgNzpjYXNlIDg6Y2FzZSAxMjpicmVhaztjYXNlIDQ6c24odCksT2kodCk7YnJlYWs7Y2FzZSAxMDplbih0KTticmVhaztjYXNlIDk6Y2FzZSAxNDpicmVhaztjYXNlIDE3OmJ0KHQudHlwZSkmJkV0KHQpO2JyZWFrO2RlZmF1bHQ6bygiMTU2Iil9aWYoTWk9bnVsbCx0PWUsMTA3Mzc0MTgyMz09PUlpfHwxMDczNzQxODIzIT09dC5jaGlsZEV4cGlyYXRpb25UaW1lKXtmb3IoaT0wLGw9dC5jaGlsZDtudWxsIT09bDspcz1sLmV4cGlyYXRpb25UaW1lLGE9bC5jaGlsZEV4cGlyYXRpb25UaW1lLCgwPT09aXx8MCE9PXMmJnM8aSkmJihpPXMpLCgwPT09aXx8MCE9PWEmJmE8aSkmJihpPWEpLGw9bC5zaWJsaW5nO3QuY2hpbGRFeHBpcmF0aW9uVGltZT1pfW51bGwhPT1uJiYwPT0oNTEyJm4uZWZmZWN0VGFnKSYmKG51bGw9PT1uLmZpcnN0RWZmZWN0JiYobi5maXJzdEVmZmVjdD1lLmZpcnN0RWZmZWN0KSxudWxsIT09ZS5sYXN0RWZmZWN0JiYobnVsbCE9PW4ubGFzdEVmZmVjdCYmKG4ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWUuZmlyc3RFZmZlY3QpLG4ubGFzdEVmZmVjdD1lLmxhc3RFZmZlY3QpLDE8ZS5lZmZlY3RUYWcmJihudWxsIT09bi5sYXN0RWZmZWN0P24ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWU6bi5maXJzdEVmZmVjdD1lLG4ubGFzdEVmZmVjdD1lKSl9ZWxzZXtpZihudWxsIT09KGU9cW4oZSxJaSkpKXJldHVybiBlLmVmZmVjdFRhZyY9NTExLGU7bnVsbCE9PW4mJihuLmZpcnN0RWZmZWN0PW4ubGFzdEVmZmVjdD1udWxsLG4uZWZmZWN0VGFnfD01MTIpfWlmKG51bGwhPT1yKXJldHVybiByO2lmKG51bGw9PT1uKWJyZWFrO2U9bn1yZXR1cm4gbnVsbH1mdW5jdGlvbiAkbihlKXt2YXIgdD1QbihlLmFsdGVybmF0ZSxlLElpKTtyZXR1cm4gZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG51bGw9PT10JiYodD1YbihlKSkseGkuY3VycmVudD1udWxsLHR9ZnVuY3Rpb24gUW4oZSx0LG4pe3dpJiZvKCIyNDMiKSx3aT0hMCx4aS5jdXJyZW50RGlzcGF0Y2hlcj1qaTt2YXIgcj1lLm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uO3I9PT1JaSYmZT09PWtpJiZudWxsIT09TWl8fChLbigpLGtpPWUsSWk9cixNaT1EdChraS5jdXJyZW50LG51bGwsSWkpLGUucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lPTApO2Zvcih2YXIgcz0hMTs7KXt0cnl7aWYodClmb3IoO251bGwhPT1NaSYmIWhyKCk7KU1pPSRuKE1pKTtlbHNlIGZvcig7bnVsbCE9PU1pOylNaT0kbihNaSl9Y2F0Y2godCl7aWYobnVsbD09PU1pKXM9ITAsZ3IodCk7ZWxzZXtudWxsPT09TWkmJm8oIjI3MSIpO3ZhciBpPU1pLGE9aS5yZXR1cm47aWYobnVsbCE9PWEpe2U6e3ZhciBsPWUsdT1hLGM9aSxkPXQ7aWYoYT1JaSxjLmVmZmVjdFRhZ3w9NTEyLGMuZmlyc3RFZmZlY3Q9Yy5sYXN0RWZmZWN0PW51bGwsbnVsbCE9PWQmJiJvYmplY3QiPT10eXBlb2YgZCYmImZ1bmN0aW9uIj09dHlwZW9mIGQudGhlbil7dmFyIF89ZDtkPXU7dmFyIHA9LTEsZj0tMTtkb3tpZigxMz09PWQudGFnKXt2YXIgbT1kLmFsdGVybmF0ZTtpZihudWxsIT09bSYmbnVsbCE9PShtPW0ubWVtb2l6ZWRTdGF0ZSkmJm0uZGlkVGltZW91dCl7Zj0xMCoobS50aW1lZE91dEF0LTIpO2JyZWFrfW09ZC5wZW5kaW5nUHJvcHMubWF4RHVyYXRpb24sIm51bWJlciI9PXR5cGVvZiBtJiYoMD49bT9wPTA6KC0xPT09cHx8bTxwKSYmKHA9bSkpfWQ9ZC5yZXR1cm59d2hpbGUobnVsbCE9PWQpO2Q9dTtkb3tpZigobT0xMz09PWQudGFnKSYmKHZvaWQgMD09PWQubWVtb2l6ZWRQcm9wcy5mYWxsYmFjaz9tPSExOihtPWQubWVtb2l6ZWRTdGF0ZSxtPW51bGw9PT1tfHwhbS5kaWRUaW1lb3V0KSksbSl7aWYodT1lci5iaW5kKG51bGwsbCxkLGMsMD09KDEmZC5tb2RlKT8xOmEpLF8udGhlbih1LHUpLDA9PSgxJmQubW9kZSkpe2QuZWZmZWN0VGFnfD0zMixDbihjLmFsdGVybmF0ZSxjLG51bGwsYSksYy5lZmZlY3RUYWcmPS01MTMsMT09PWMudGFnJiYoYy5lZmZlY3RUYWcmPS00MjEsbnVsbD09PWMuYWx0ZXJuYXRlJiYoYy50YWc9MTcpKTticmVhayBlfS0xPT09cD9sPTEwNzM3NDE4MjM6KC0xPT09ZiYmKGY9MTAqKEZ0KGwsYSktMiktNWUzKSxsPWYrcCksMDw9bCYmUGk8bCYmKFBpPWwpLGQuZWZmZWN0VGFnfD0xMDI0LGQuZXhwaXJhdGlvblRpbWU9YTticmVhayBlfWQ9ZC5yZXR1cm59d2hpbGUobnVsbCE9PWQpO2Q9RXJyb3IoIkFuIHVwZGF0ZSB3YXMgc3VzcGVuZGVkLCBidXQgbm8gcGxhY2Vob2xkZXIgVUkgd2FzIHByb3ZpZGVkLiIpfU5pPSEwLGQ9SnQoZCxjKSxsPXU7ZG97c3dpdGNoKGwudGFnKXtjYXNlIDM6Yz1kLGwuZWZmZWN0VGFnfD0xMDI0LGwuZXhwaXJhdGlvblRpbWU9YSxhPVduKGwsYyxhKSxZdChsLGEpO2JyZWFrIGU7Y2FzZSAxOmlmKGM9ZCx1PWwudHlwZSxfPWwuc3RhdGVOb2RlLDA9PSg2NCZsLmVmZmVjdFRhZykmJigiZnVuY3Rpb24iPT10eXBlb2YgdS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1CaXx8IUJpLmhhcyhfKSkpKXtsLmVmZmVjdFRhZ3w9MTAyNCxsLmV4cGlyYXRpb25UaW1lPWEsYT1ZbihsLGMsYSksWXQobCxhKTticmVhayBlfX1sPWwucmV0dXJufXdoaWxlKG51bGwhPT1sKX1NaT1YbihpKTtjb250aW51ZX1zPSEwLGdyKHQpfX1icmVha31pZih3aT0hMSx1aT1saT1haT14aS5jdXJyZW50RGlzcGF0Y2hlcj1udWxsLHMpa2k9bnVsbCxlLmZpbmlzaGVkV29yaz1udWxsO2Vsc2UgaWYobnVsbCE9PU1pKWUuZmluaXNoZWRXb3JrPW51bGw7ZWxzZXtpZih0PWUuY3VycmVudC5hbHRlcm5hdGUsbnVsbD09PXQmJm8oIjI4MSIpLGtpPW51bGwsTmkpe2lmKHM9ZS5sYXRlc3RQZW5kaW5nVGltZSxpPWUubGF0ZXN0U3VzcGVuZGVkVGltZSxhPWUubGF0ZXN0UGluZ2VkVGltZSwwIT09cyYmcz5yfHwwIT09aSYmaT5yfHwwIT09YSYmYT5yKXJldHVybiBIdChlLHIpLHZvaWQgaXIoZSx0LHIsZS5leHBpcmF0aW9uVGltZSwtMSk7aWYoIWUuZGlkRXJyb3ImJiFuKXJldHVybiBlLmRpZEVycm9yPSEwLHI9ZS5uZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbj1yLG49ZS5leHBpcmF0aW9uVGltZT0xLHZvaWQgaXIoZSx0LHIsbiwtMSl9bnx8LTE9PT1QaT8oZS5wZW5kaW5nQ29tbWl0RXhwaXJhdGlvblRpbWU9cixlLmZpbmlzaGVkV29yaz10KTooSHQoZSxyKSxuPTEwKihGdChlLHIpLTIpLG48UGkmJihQaT1uKSxuPTEwKihscigpLTIpLG49UGktbixpcihlLHQscixlLmV4cGlyYXRpb25UaW1lLDA+bj8wOm4pKX19ZnVuY3Rpb24gSm4oZSx0KXt2YXIgbjtlOntmb3Iod2kmJiFGaSYmbygiMjYzIiksbj1lLnJldHVybjtudWxsIT09bjspe3N3aXRjaChuLnRhZyl7Y2FzZSAxOnZhciByPW4uc3RhdGVOb2RlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHwiZnVuY3Rpb24iPT10eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1CaXx8IUJpLmhhcyhyKSkpe2U9SnQodCxlKSxlPVluKG4sZSwxKSxXdChuLGUpLG5yKG4sMSksbj12b2lkIDA7YnJlYWsgZX1icmVhaztjYXNlIDM6ZT1KdCh0LGUpLGU9V24obixlLDEpLFd0KG4sZSksbnIobiwxKSxuPXZvaWQgMDticmVhayBlfW49bi5yZXR1cm59Mz09PWUudGFnJiYobj1KdCh0LGUpLG49V24oZSxuLDEpLFd0KGUsbiksbnIoZSwxKSksbj12b2lkIDB9cmV0dXJuIG59ZnVuY3Rpb24gWm4oZSx0KXtyZXR1cm4gMCE9PURpP2U9RGk6d2k/ZT1GaT8xOklpOjEmdC5tb2RlPyhlPXRhPzIrMTAqKDErKChlLTIrMTUpLzEwfDApKToyKzI1KigxKygoZS0yKzUwMCkvMjV8MCkpLG51bGwhPT1raSYmZT09PUlpJiYoZSs9MSkpOmU9MSx0YSYmZT5LaSYmKEtpPWUpLGV9ZnVuY3Rpb24gZXIoZSx0LG4scil7dmFyIG89ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWUscz1lLmxhdGVzdFN1c3BlbmRlZFRpbWU7aWYoMCE9PW8mJnI+PW8mJnI8PXMpe3M9bz1yLGUuZGlkRXJyb3I9ITE7dmFyIGk9ZS5sYXRlc3RQaW5nZWRUaW1lOygwPT09aXx8aTxzKSYmKGUubGF0ZXN0UGluZ2VkVGltZT1zKSxCdChzLGUpfWVsc2Ugbz1scigpLG89Wm4obyx0KSxOdChlLG8pOzAhPSgxJnQubW9kZSkmJmU9PT1raSYmSWk9PT1yJiYoa2k9bnVsbCksdHIodCxvKSwwPT0oMSZ0Lm1vZGUpJiYodHIobixvKSwxPT09bi50YWcmJm51bGwhPT1uLnN0YXRlTm9kZSYmKHQ9enQobyksdC50YWc9MixXdChuLHQpKSksMCE9PShuPWUuZXhwaXJhdGlvblRpbWUpJiZ1cihlLG4pfWZ1bmN0aW9uIHRyKGUsdCl7KDA9PT1lLmV4cGlyYXRpb25UaW1lfHxlLmV4cGlyYXRpb25UaW1lPnQpJiYoZS5leHBpcmF0aW9uVGltZT10KTt2YXIgbj1lLmFsdGVybmF0ZTtudWxsIT09biYmKDA9PT1uLmV4cGlyYXRpb25UaW1lfHxuLmV4cGlyYXRpb25UaW1lPnQpJiYobi5leHBpcmF0aW9uVGltZT10KTt2YXIgcj1lLnJldHVybixvPW51bGw7aWYobnVsbD09PXImJjM9PT1lLnRhZylvPWUuc3RhdGVOb2RlO2Vsc2UgZm9yKDtudWxsIT09cjspe2lmKG49ci5hbHRlcm5hdGUsKDA9PT1yLmNoaWxkRXhwaXJhdGlvblRpbWV8fHIuY2hpbGRFeHBpcmF0aW9uVGltZT50KSYmKHIuY2hpbGRFeHBpcmF0aW9uVGltZT10KSxudWxsIT09biYmKDA9PT1uLmNoaWxkRXhwaXJhdGlvblRpbWV8fG4uY2hpbGRFeHBpcmF0aW9uVGltZT50KSYmKG4uY2hpbGRFeHBpcmF0aW9uVGltZT10KSxudWxsPT09ci5yZXR1cm4mJjM9PT1yLnRhZyl7bz1yLnN0YXRlTm9kZTticmVha31yPXIucmV0dXJufXJldHVybiBudWxsPT09bz9udWxsOm99ZnVuY3Rpb24gbnIoZSx0KXtudWxsIT09KGU9dHIoZSx0KSkmJighd2kmJjAhPT1JaSYmdDxJaSYmS24oKSxOdChlLHQpLHdpJiYhRmkmJmtpPT09ZXx8dXIoZSxlLmV4cGlyYXRpb25UaW1lKSxhYT5pYSYmKGFhPTAsbygiMTg1IikpKX1mdW5jdGlvbiBycihlLHQsbixyLG8pe3ZhciBzPURpO0RpPTE7dHJ5e3JldHVybiBlKHQsbixyLG8pfWZpbmFsbHl7RGk9c319ZnVuY3Rpb24gb3IoKXtvYT0yKygoa3IudW5zdGFibGVfbm93KCktcmEpLzEwfDApfWZ1bmN0aW9uIHNyKGUsdCl7aWYoMCE9PXppKXtpZih0PnppKXJldHVybjtudWxsIT09VmkmJmtyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKFZpKX16aT10LGU9a3IudW5zdGFibGVfbm93KCktcmEsVmk9a3IudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhkcix7dGltZW91dDoxMCoodC0yKS1lfSl9ZnVuY3Rpb24gaXIoZSx0LG4scixvKXtlLmV4cGlyYXRpb25UaW1lPXIsMCE9PW98fGhyKCk/MDxvJiYoZS50aW1lb3V0SGFuZGxlPVhzKGFyLmJpbmQobnVsbCxlLHQsbiksbykpOihlLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT1uLGUuZmluaXNoZWRXb3JrPXQpfWZ1bmN0aW9uIGFyKGUsdCxuKXtlLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT1uLGUuZmluaXNoZWRXb3JrPXQsb3IoKSxzYT1vYSxwcihlLG4pfWZ1bmN0aW9uIGxyKCl7cmV0dXJuIFdpP3NhOihjcigpLDAhPT1xaSYmMTA3Mzc0MTgyMyE9PXFpfHwob3IoKSxzYT1vYSksc2EpfWZ1bmN0aW9uIHVyKGUsdCl7aWYobnVsbD09PWUubmV4dFNjaGVkdWxlZFJvb3QpZS5leHBpcmF0aW9uVGltZT10LG51bGw9PT1HaT8oVWk9R2k9ZSxlLm5leHRTY2hlZHVsZWRSb290PWUpOihHaT1HaS5uZXh0U2NoZWR1bGVkUm9vdD1lLEdpLm5leHRTY2hlZHVsZWRSb290PVVpKTtlbHNle3ZhciBuPWUuZXhwaXJhdGlvblRpbWU7KDA9PT1ufHx0PG4pJiYoZS5leHBpcmF0aW9uVGltZT10KX1XaXx8KFppP2VhJiYoWWk9ZSxxaT0xLGZyKGUsMSwhMCkpOjE9PT10P19yKDEsbnVsbCk6c3IoZSx0KSl9ZnVuY3Rpb24gY3IoKXt2YXIgZT0wLHQ9bnVsbDtpZihudWxsIT09R2kpZm9yKHZhciBuPUdpLHI9VWk7bnVsbCE9PXI7KXt2YXIgcz1yLmV4cGlyYXRpb25UaW1lO2lmKDA9PT1zKXtpZigobnVsbD09PW58fG51bGw9PT1HaSkmJm8oIjI0NCIpLHI9PT1yLm5leHRTY2hlZHVsZWRSb290KXtVaT1HaT1yLm5leHRTY2hlZHVsZWRSb290PW51bGw7YnJlYWt9aWYocj09PVVpKVVpPXM9ci5uZXh0U2NoZWR1bGVkUm9vdCxHaS5uZXh0U2NoZWR1bGVkUm9vdD1zLHIubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbDtlbHNle2lmKHI9PT1HaSl7R2k9bixHaS5uZXh0U2NoZWR1bGVkUm9vdD1VaSxyLm5leHRTY2hlZHVsZWRSb290PW51bGw7YnJlYWt9bi5uZXh0U2NoZWR1bGVkUm9vdD1yLm5leHRTY2hlZHVsZWRSb290LHIubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbH1yPW4ubmV4dFNjaGVkdWxlZFJvb3R9ZWxzZXtpZigoMD09PWV8fHM8ZSkmJihlPXMsdD1yKSxyPT09R2kpYnJlYWs7aWYoMT09PWUpYnJlYWs7bj1yLHI9ci5uZXh0U2NoZWR1bGVkUm9vdH19WWk9dCxxaT1lfWZ1bmN0aW9uIGRyKGUpe2lmKGUuZGlkVGltZW91dCYmbnVsbCE9PVVpKXtvcigpO3ZhciB0PVVpO2Rve3ZhciBuPXQuZXhwaXJhdGlvblRpbWU7MCE9PW4mJm9hPj1uJiYodC5uZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbj1vYSksdD10Lm5leHRTY2hlZHVsZWRSb290fXdoaWxlKHQhPT1VaSl9X3IoMCxlKX1mdW5jdGlvbiBfcihlLHQpe2lmKEppPXQsY3IoKSxudWxsIT09SmkpZm9yKG9yKCksc2E9b2E7bnVsbCE9PVlpJiYwIT09cWkmJigwPT09ZXx8ZT49cWkpJiYoIVhpfHxvYT49cWkpOylmcihZaSxxaSxvYT49cWkpLGNyKCksb3IoKSxzYT1vYTtlbHNlIGZvcig7bnVsbCE9PVlpJiYwIT09cWkmJigwPT09ZXx8ZT49cWkpOylmcihZaSxxaSwhMCksY3IoKTtpZihudWxsIT09SmkmJih6aT0wLFZpPW51bGwpLDAhPT1xaSYmc3IoWWkscWkpLEppPW51bGwsWGk9ITEsYWE9MCxsYT1udWxsLG51bGwhPT1uYSlmb3IoZT1uYSxuYT1udWxsLHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTt0cnl7bi5fb25Db21wbGV0ZSgpfWNhdGNoKGUpeyRpfHwoJGk9ITAsUWk9ZSl9fWlmKCRpKXRocm93IGU9UWksUWk9bnVsbCwkaT0hMSxlfWZ1bmN0aW9uIHByKGUsdCl7V2kmJm8oIjI1MyIpLFlpPWUscWk9dCxmcihlLHQsITApLF9yKDEsbnVsbCl9ZnVuY3Rpb24gZnIoZSx0LG4pe2lmKFdpJiZvKCIyNDUiKSxXaT0hMCxudWxsPT09Sml8fG4pe3ZhciByPWUuZmluaXNoZWRXb3JrO251bGwhPT1yP21yKGUscix0KTooZS5maW5pc2hlZFdvcms9bnVsbCxyPWUudGltZW91dEhhbmRsZSwtMSE9PXImJihlLnRpbWVvdXRIYW5kbGU9LTEsJHMocikpLFFuKGUsITEsbiksbnVsbCE9PShyPWUuZmluaXNoZWRXb3JrKSYmbXIoZSxyLHQpKX1lbHNlIHI9ZS5maW5pc2hlZFdvcmssbnVsbCE9PXI/bXIoZSxyLHQpOihlLmZpbmlzaGVkV29yaz1udWxsLHI9ZS50aW1lb3V0SGFuZGxlLC0xIT09ciYmKGUudGltZW91dEhhbmRsZT0tMSwkcyhyKSksUW4oZSwhMCxuKSxudWxsIT09KHI9ZS5maW5pc2hlZFdvcmspJiYoaHIoKT9lLmZpbmlzaGVkV29yaz1yOm1yKGUscix0KSkpO1dpPSExfWZ1bmN0aW9uIG1yKGUsdCxuKXt2YXIgcj1lLmZpcnN0QmF0Y2g7aWYobnVsbCE9PXImJnIuX2V4cGlyYXRpb25UaW1lPD1uJiYobnVsbD09PW5hP25hPVtyXTpuYS5wdXNoKHIpLHIuX2RlZmVyKSlyZXR1cm4gZS5maW5pc2hlZFdvcms9dCx2b2lkKGUuZXhwaXJhdGlvblRpbWU9MCk7ZS5maW5pc2hlZFdvcms9bnVsbCxlPT09bGE/YWErKzoobGE9ZSxhYT0wKSxGaT13aT0hMCxlLmN1cnJlbnQ9PT10JiZvKCIxNzciKTt2YXIgcz1lLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZTswPT09cyYmbygiMjYxIiksZS5wZW5kaW5nQ29tbWl0RXhwaXJhdGlvblRpbWU9MDt2YXIgaT10LmV4cGlyYXRpb25UaW1lLGE9dC5jaGlsZEV4cGlyYXRpb25UaW1lLGw9MD09PWl8fDAhPT1hJiZhPGk/YTppO2lmKGUuZGlkRXJyb3I9ITEsMD09PWwpZS5lYXJsaWVzdFBlbmRpbmdUaW1lPTAsZS5sYXRlc3RQZW5kaW5nVGltZT0wLGUuZWFybGllc3RTdXNwZW5kZWRUaW1lPTAsZS5sYXRlc3RTdXNwZW5kZWRUaW1lPTAsZS5sYXRlc3RQaW5nZWRUaW1lPTA7ZWxzZXt2YXIgdT1lLmxhdGVzdFBlbmRpbmdUaW1lOzAhPT11JiYodTxsP2UuZWFybGllc3RQZW5kaW5nVGltZT1lLmxhdGVzdFBlbmRpbmdUaW1lPTA6ZS5lYXJsaWVzdFBlbmRpbmdUaW1lPGwmJihlLmVhcmxpZXN0UGVuZGluZ1RpbWU9ZS5sYXRlc3RQZW5kaW5nVGltZSkpO3ZhciBjPWUuZWFybGllc3RTdXNwZW5kZWRUaW1lOzA9PT1jP050KGUsbCk6bD5lLmxhdGVzdFN1c3BlbmRlZFRpbWU/KGUuZWFybGllc3RTdXNwZW5kZWRUaW1lPTAsZS5sYXRlc3RTdXNwZW5kZWRUaW1lPTAsZS5sYXRlc3RQaW5nZWRUaW1lPTAsTnQoZSxsKSk6bDxjJiZOdChlLGwpfWlmKEJ0KDAsZSkseGkuY3VycmVudD1udWxsLDE8dC5lZmZlY3RUYWcpaWYobnVsbCE9PXQubGFzdEVmZmVjdCl7dC5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9dDt2YXIgZD10LmZpcnN0RWZmZWN0fWVsc2UgZD10O2Vsc2UgZD10LmZpcnN0RWZmZWN0O3FzPUxzO3ZhciBfPXFlKCk7aWYoS2UoXykpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBfKXZhciBwPXtzdGFydDpfLnNlbGVjdGlvblN0YXJ0LGVuZDpfLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgZj1fLm93bmVyRG9jdW1lbnQsbT1mJiZmLmRlZmF1bHRWaWV3fHx3aW5kb3csaD1tLmdldFNlbGVjdGlvbiYmbS5nZXRTZWxlY3Rpb24oKTtpZihoJiYwIT09aC5yYW5nZUNvdW50KXt2YXIgZz1oLmFuY2hvck5vZGUsYj1oLmFuY2hvck9mZnNldCxFPWguZm9jdXNOb2RlLHk9aC5mb2N1c09mZnNldDt0cnl7Zy5ub2RlVHlwZSxFLm5vZGVUeXBlfWNhdGNoKGUpe3A9bnVsbDticmVhayBlfXZhciB2PTAsVD0tMSxBPS0xLEM9MCxPPTAsUz1fLFI9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBqO1MhPT1nfHwwIT09YiYmMyE9PVMubm9kZVR5cGV8fChUPXYrYiksUyE9PUV8fDAhPT15JiYzIT09Uy5ub2RlVHlwZXx8KEE9dit5KSwzPT09Uy5ub2RlVHlwZSYmKHYrPVMubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShqPVMuZmlyc3RDaGlsZCk7KVI9UyxTPWo7Zm9yKDs7KXtpZihTPT09XylicmVhayB0O2lmKFI9PT1nJiYrK0M9PT1iJiYoVD12KSxSPT09RSYmKytPPT09eSYmKEE9diksbnVsbCE9PShqPVMubmV4dFNpYmxpbmcpKWJyZWFrO1M9UixSPVMucGFyZW50Tm9kZX1TPWp9cD0tMT09PVR8fC0xPT09QT9udWxsOntzdGFydDpULGVuZDpBfX1lbHNlIHA9bnVsbH12YXIgeD1wfHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSB4PW51bGw7Zm9yKEtzPXtmb2N1c2VkRWxlbTpfLHNlbGVjdGlvblJhbmdlOnh9LExzPSExLEhpPWQ7bnVsbCE9PUhpOyl7dmFyIEw9ITEsRD12b2lkIDA7dHJ5e2Zvcig7bnVsbCE9PUhpOyl7aWYoMjU2JkhpLmVmZmVjdFRhZyl7dmFyIHc9SGkuYWx0ZXJuYXRlO2U6e3ZhciBNPUhpO3N3aXRjaChNLnRhZyl7Y2FzZSAxOmlmKDI1NiZNLmVmZmVjdFRhZyYmbnVsbCE9PXcpe3ZhciBrPXcubWVtb2l6ZWRQcm9wcyxJPXcubWVtb2l6ZWRTdGF0ZSxQPU0uc3RhdGVOb2RlO1AucHJvcHM9TS5tZW1vaXplZFByb3BzLFAuc3RhdGU9TS5tZW1vaXplZFN0YXRlO3ZhciBOPVAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoayxJKTtQLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPU59YnJlYWsgZTtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhayBlO2RlZmF1bHQ6bygiMTYzIil9fX1IaT1IaS5uZXh0RWZmZWN0fX1jYXRjaChlKXtMPSEwLEQ9ZX1MJiYobnVsbD09PUhpJiZvKCIxNzgiKSxKbihIaSxEKSxudWxsIT09SGkmJihIaT1IaS5uZXh0RWZmZWN0KSl9Zm9yKEhpPWQ7bnVsbCE9PUhpOyl7dmFyIEg9ITEsRj12b2lkIDA7dHJ5e2Zvcig7bnVsbCE9PUhpOyl7dmFyIEI9SGkuZWZmZWN0VGFnO2lmKDE2JkImJnN0KEhpLnN0YXRlTm9kZSwiIiksMTI4JkIpe3ZhciBVPUhpLmFsdGVybmF0ZTtpZihudWxsIT09VSl7dmFyIEc9VS5yZWY7bnVsbCE9PUcmJigiZnVuY3Rpb24iPT10eXBlb2YgRz9HKG51bGwpOkcuY3VycmVudD1udWxsKX19c3dpdGNoKDE0JkIpe2Nhc2UgMjpHbihIaSksSGkuZWZmZWN0VGFnJj0tMzticmVhaztjYXNlIDY6R24oSGkpLEhpLmVmZmVjdFRhZyY9LTMsVm4oSGkuYWx0ZXJuYXRlLEhpKTticmVhaztjYXNlIDQ6Vm4oSGkuYWx0ZXJuYXRlLEhpKTticmVhaztjYXNlIDg6dmFyIHo9SGk7em4oeik7dmFyIFY9ejtWLnJldHVybj1udWxsLFYuY2hpbGQ9bnVsbCxWLmFsdGVybmF0ZSYmKFYuYWx0ZXJuYXRlLmNoaWxkPW51bGwsVi5hbHRlcm5hdGUucmV0dXJuPW51bGwpfUhpPUhpLm5leHRFZmZlY3R9fWNhdGNoKGUpe0g9ITAsRj1lfUgmJihudWxsPT09SGkmJm8oIjE3OCIpLEpuKEhpLEYpLG51bGwhPT1IaSYmKEhpPUhpLm5leHRFZmZlY3QpKX12YXIgVz1LcyxZPXFlKCkscT1XLmZvY3VzZWRFbGVtLEs9Vy5zZWxlY3Rpb25SYW5nZTtpZihZIT09cSYmcSYmcS5vd25lckRvY3VtZW50JiZZZShxLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHEpKXtpZihudWxsIT09SyYmS2UocSkpe3ZhciBYPUsuc3RhcnQsJD1LLmVuZDtpZih2b2lkIDA9PT0kJiYoJD1YKSwic2VsZWN0aW9uU3RhcnQiaW4gcSlxLnNlbGVjdGlvblN0YXJ0PVgscS5zZWxlY3Rpb25FbmQ9TWF0aC5taW4oJCxxLnZhbHVlLmxlbmd0aCk7ZWxzZXt2YXIgUT1xLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50LEo9KFEmJlEuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCksWj1xLnRleHRDb250ZW50Lmxlbmd0aCxlZT1NYXRoLm1pbihLLnN0YXJ0LFopLHRlPXZvaWQgMD09PUsuZW5kP2VlOk1hdGgubWluKEsuZW5kLFopO2lmKCFKLmV4dGVuZCYmZWU+dGUpe3ZhciBuZT10ZTt0ZT1lZSxlZT1uZX12YXIgcmU9V2UocSxlZSksb2U9V2UocSx0ZSk7aWYocmUmJm9lJiYoMSE9PUoucmFuZ2VDb3VudHx8Si5hbmNob3JOb2RlIT09cmUubm9kZXx8Si5hbmNob3JPZmZzZXQhPT1yZS5vZmZzZXR8fEouZm9jdXNOb2RlIT09b2Uubm9kZXx8Si5mb2N1c09mZnNldCE9PW9lLm9mZnNldCkpe3ZhciBzZT1RLmNyZWF0ZVJhbmdlKCk7c2Uuc2V0U3RhcnQocmUubm9kZSxyZS5vZmZzZXQpLEoucmVtb3ZlQWxsUmFuZ2VzKCksZWU+dGU/KEouYWRkUmFuZ2Uoc2UpLEouZXh0ZW5kKG9lLm5vZGUsb2Uub2Zmc2V0KSk6KHNlLnNldEVuZChvZS5ub2RlLG9lLm9mZnNldCksSi5hZGRSYW5nZShzZSkpfX19Zm9yKHZhciBpZT1bXSxhZT1xO2FlPWFlLnBhcmVudE5vZGU7KTE9PT1hZS5ub2RlVHlwZSYmaWUucHVzaCh7ZWxlbWVudDphZSxsZWZ0OmFlLnNjcm9sbExlZnQsdG9wOmFlLnNjcm9sbFRvcH0pOyJmdW5jdGlvbiI9PXR5cGVvZiBxLmZvY3VzJiZxLmZvY3VzKCk7Zm9yKHZhciBsZT0wO2xlPGllLmxlbmd0aDtsZSsrKXt2YXIgdWU9aWVbbGVdO3VlLmVsZW1lbnQuc2Nyb2xsTGVmdD11ZS5sZWZ0LHVlLmVsZW1lbnQuc2Nyb2xsVG9wPXVlLnRvcH19Zm9yKEtzPW51bGwsTHM9ISFxcyxxcz1udWxsLGUuY3VycmVudD10LEhpPWQ7bnVsbCE9PUhpOyl7dmFyIGNlPSExLGRlPXZvaWQgMDt0cnl7Zm9yKHZhciBfZT1zO251bGwhPT1IaTspe3ZhciBwZT1IaS5lZmZlY3RUYWc7aWYoMzYmcGUpe3ZhciBmZT12b2lkIDAsbWU9SGkuYWx0ZXJuYXRlLGhlPUhpLGdlPV9lO3N3aXRjaChoZS50YWcpe2Nhc2UgMTp2YXIgYmU9aGUuc3RhdGVOb2RlO2lmKDQmaGUuZWZmZWN0VGFnKWlmKG51bGw9PT1tZSliZS5wcm9wcz1oZS5tZW1vaXplZFByb3BzLGJlLnN0YXRlPWhlLm1lbW9pemVkU3RhdGUsYmUuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBFZT1tZS5tZW1vaXplZFByb3BzLHllPW1lLm1lbW9pemVkU3RhdGU7YmUucHJvcHM9aGUubWVtb2l6ZWRQcm9wcyxiZS5zdGF0ZT1oZS5tZW1vaXplZFN0YXRlLGJlLmNvbXBvbmVudERpZFVwZGF0ZShFZSx5ZSxiZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9dmFyIHZlPWhlLnVwZGF0ZVF1ZXVlO251bGwhPT12ZSYmKGJlLnByb3BzPWhlLm1lbW9pemVkUHJvcHMsYmUuc3RhdGU9aGUubWVtb2l6ZWRTdGF0ZSwkdChoZSx2ZSxiZSxnZSkpO2JyZWFrO2Nhc2UgMzp2YXIgVGU9aGUudXBkYXRlUXVldWU7aWYobnVsbCE9PVRlKXt2YXIgQWU9bnVsbDtpZihudWxsIT09aGUuY2hpbGQpc3dpdGNoKGhlLmNoaWxkLnRhZyl7Y2FzZSA1OkFlPWhlLmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6QWU9aGUuY2hpbGQuc3RhdGVOb2RlfSR0KGhlLFRlLEFlLGdlKX1icmVhaztjYXNlIDU6dmFyIENlPWhlLnN0YXRlTm9kZTtudWxsPT09bWUmJjQmaGUuZWZmZWN0VGFnJiZkdChoZS50eXBlLGhlLm1lbW9pemVkUHJvcHMpJiZDZS5mb2N1cygpO2JyZWFrO2Nhc2UgNjpjYXNlIDQ6Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKDMyJmhlLmVmZmVjdFRhZyl7aGUubWVtb2l6ZWRTdGF0ZT17YWxyZWFkeUNhcHR1cmVkOiEwLGRpZFRpbWVvdXQ6ITEsdGltZWRPdXRBdDowfSxucihoZSwxKTticmVha312YXIgT2U9bnVsbCE9PW1lP21lLm1lbW9pemVkU3RhdGU6bnVsbCxTZT1oZS5tZW1vaXplZFN0YXRlLFJlPW51bGwhPT1PZSYmT2UuZGlkVGltZW91dCxqZT1oZTtpZihudWxsPT09U2U/ZmU9ITE6KGZlPVNlLmRpZFRpbWVvdXQpJiYoamU9aGUuY2hpbGQsU2UuYWxyZWFkeUNhcHR1cmVkPSExLDA9PT1TZS50aW1lZE91dEF0JiYoU2UudGltZWRPdXRBdD1scigpKSksZmUhPT1SZSYmbnVsbCE9PWplKWU6Zm9yKHZhciB4ZT1qZSxMZT1mZSxEZT14ZTs7KXtpZig1PT09RGUudGFnKXt2YXIgd2U9RGUuc3RhdGVOb2RlO2lmKExlKXdlLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dmFyIE1lPURlLnN0YXRlTm9kZSxrZT1EZS5tZW1vaXplZFByb3BzLnN0eWxlLEllPXZvaWQgMCE9PWtlJiZudWxsIT09a2UmJmtlLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/a2UuZGlzcGxheTpudWxsO01lLnN0eWxlLmRpc3BsYXk9SWV9fWVsc2UgaWYoNj09PURlLnRhZylEZS5zdGF0ZU5vZGUubm9kZVZhbHVlPUxlPyIiOkRlLm1lbW9pemVkUHJvcHM7ZWxzZSBpZihudWxsIT09RGUuY2hpbGQpe0RlLmNoaWxkLnJldHVybj1EZSxEZT1EZS5jaGlsZDtjb250aW51ZX1pZihEZT09PXhlKWJyZWFrIGU7Zm9yKDtudWxsPT09RGUuc2libGluZzspe2lmKG51bGw9PT1EZS5yZXR1cm58fERlLnJldHVybj09PXhlKWJyZWFrIGU7RGU9RGUucmV0dXJufURlLnNpYmxpbmcucmV0dXJuPURlLnJldHVybixEZT1EZS5zaWJsaW5nfWJyZWFrO2Nhc2UgMTc6YnJlYWs7ZGVmYXVsdDpvKCIxNjMiKX19aWYoMTI4JnBlKXt2YXIgUGU9SGkucmVmO2lmKG51bGwhPT1QZSl7dmFyIE5lPUhpLnN0YXRlTm9kZTtzd2l0Y2goSGkudGFnKXtjYXNlIDU6dmFyIEhlPU5lO2JyZWFrO2RlZmF1bHQ6SGU9TmV9ImZ1bmN0aW9uIj09dHlwZW9mIFBlP1BlKEhlKTpQZS5jdXJyZW50PUhlfX12YXIgRmU9SGkubmV4dEVmZmVjdDtIaS5uZXh0RWZmZWN0PW51bGwsSGk9RmV9fWNhdGNoKGUpe2NlPSEwLGRlPWV9Y2UmJihudWxsPT09SGkmJm8oIjE3OCIpLEpuKEhpLGRlKSxudWxsIT09SGkmJihIaT1IaS5uZXh0RWZmZWN0KSl9d2k9Rmk9ITEsImZ1bmN0aW9uIj09dHlwZW9mIHJpJiZyaSh0LnN0YXRlTm9kZSk7dmFyIEJlPXQuZXhwaXJhdGlvblRpbWUsVWU9dC5jaGlsZEV4cGlyYXRpb25UaW1lLEdlPTA9PT1CZXx8MCE9PVVlJiZVZTxCZT9VZTpCZTswPT09R2UmJihCaT1udWxsKSxlLmV4cGlyYXRpb25UaW1lPUdlLGUuZmluaXNoZWRXb3JrPW51bGx9ZnVuY3Rpb24gaHIoKXtyZXR1cm4hIVhpfHwhKG51bGw9PT1KaXx8SmkudGltZVJlbWFpbmluZygpPnVhKSYmKFhpPSEwKX1mdW5jdGlvbiBncihlKXtudWxsPT09WWkmJm8oIjI0NiIpLFlpLmV4cGlyYXRpb25UaW1lPTAsJGl8fCgkaT0hMCxRaT1lKX1mdW5jdGlvbiBicihlLHQpe3ZhciBuPVppO1ppPSEwO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5eyhaaT1uKXx8V2l8fF9yKDEsbnVsbCl9fWZ1bmN0aW9uIEVyKGUsdCl7aWYoWmkmJiFlYSl7ZWE9ITA7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7ZWE9ITF9fXJldHVybiBlKHQpfWZ1bmN0aW9uIHlyKGUsdCxuKXtpZih0YSlyZXR1cm4gZSh0LG4pO1ppfHxXaXx8MD09PUtpfHwoX3IoS2ksbnVsbCksS2k9MCk7dmFyIHI9dGEsbz1aaTtaaT10YT0hMDt0cnl7cmV0dXJuIGUodCxuKX1maW5hbGx5e3RhPXIsKFppPW8pfHxXaXx8X3IoMSxudWxsKX19ZnVuY3Rpb24gdnIoZSx0LG4scixzKXt2YXIgaT10LmN1cnJlbnQ7ZTppZihuKXtuPW4uX3JlYWN0SW50ZXJuYWxGaWJlcjt0OnsyPT09RGUobikmJjE9PT1uLnRhZ3x8bygiMTcwIik7dmFyIGE9bjtkb3tzd2l0Y2goYS50YWcpe2Nhc2UgMzphPWEuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgdDtjYXNlIDE6aWYoYnQoYS50eXBlKSl7YT1hLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayB0fX1hPWEucmV0dXJufXdoaWxlKG51bGwhPT1hKTtvKCIxNzEiKSxhPXZvaWQgMH1pZigxPT09bi50YWcpe3ZhciBsPW4udHlwZTtpZihidChsKSl7bj1UdChuLGwsYSk7YnJlYWsgZX19bj1hfWVsc2Ugbj1acztyZXR1cm4gbnVsbD09PXQuY29udGV4dD90LmNvbnRleHQ9bjp0LnBlbmRpbmdDb250ZXh0PW4sdD1zLHM9enQocikscy5wYXlsb2FkPXtlbGVtZW50OmV9LHQ9dm9pZCAwPT09dD9udWxsOnQsbnVsbCE9PXQmJihzLmNhbGxiYWNrPXQpLFd0KGkscyksbnIoaSxyKSxyfWZ1bmN0aW9uIFRyKGUsdCxuLHIpe3ZhciBvPXQuY3VycmVudDtyZXR1cm4gbz1abihscigpLG8pLHZyKGUsdCxuLG8scil9ZnVuY3Rpb24gQXIoZSl7aWYoZT1lLmN1cnJlbnQsIWUuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGUuY2hpbGQudGFnKXtjYXNlIDU6ZGVmYXVsdDpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIENyKGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6a28sa2V5Om51bGw9PXI/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fWZ1bmN0aW9uIE9yKGUpe3ZhciB0PTIrMjUqKDErKChscigpLTIrNTAwKS8yNXwwKSk7dDw9TGkmJih0PUxpKzEpLHRoaXMuX2V4cGlyYXRpb25UaW1lPUxpPXQsdGhpcy5fcm9vdD1lLHRoaXMuX2NhbGxiYWNrcz10aGlzLl9uZXh0PW51bGwsdGhpcy5faGFzQ2hpbGRyZW49dGhpcy5fZGlkQ29tcGxldGU9ITEsdGhpcy5fY2hpbGRyZW49bnVsbCx0aGlzLl9kZWZlcj0hMH1mdW5jdGlvbiBTcigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2RpZENvbW1pdD0hMSx0aGlzLl9vbkNvbW1pdD10aGlzLl9vbkNvbW1pdC5iaW5kKHRoaXMpfWZ1bmN0aW9uIFJyKGUsdCxuKXt0PWp0KDMsbnVsbCxudWxsLHQ/MzowKSxlPXtjdXJyZW50OnQsY29udGFpbmVySW5mbzplLHBlbmRpbmdDaGlsZHJlbjpudWxsLGVhcmxpZXN0UGVuZGluZ1RpbWU6MCxsYXRlc3RQZW5kaW5nVGltZTowLGVhcmxpZXN0U3VzcGVuZGVkVGltZTowLGxhdGVzdFN1c3BlbmRlZFRpbWU6MCxsYXRlc3RQaW5nZWRUaW1lOjAsZGlkRXJyb3I6ITEscGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lOjAsZmluaXNoZWRXb3JrOm51bGwsdGltZW91dEhhbmRsZTotMSxjb250ZXh0Om51bGwscGVuZGluZ0NvbnRleHQ6bnVsbCxoeWRyYXRlOm4sbmV4dEV4cGlyYXRpb25UaW1lVG9Xb3JrT246MCxleHBpcmF0aW9uVGltZTowLGZpcnN0QmF0Y2g6bnVsbCxuZXh0U2NoZWR1bGVkUm9vdDpudWxsfSx0aGlzLl9pbnRlcm5hbFJvb3Q9dC5zdGF0ZU5vZGU9ZX1mdW5jdGlvbiBqcihlKXtyZXR1cm4hKCFlfHwxIT09ZS5ub2RlVHlwZSYmOSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZSYmKDghPT1lLm5vZGVUeXBlfHwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICIhPT1lLm5vZGVWYWx1ZSkpfWZ1bmN0aW9uIHhyKGUsdCl7aWYodHx8KHQ9ZT85PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLmZpcnN0Q2hpbGQ6bnVsbCx0PSEoIXR8fDEhPT10Lm5vZGVUeXBlfHwhdC5oYXNBdHRyaWJ1dGUoImRhdGEtcmVhY3Ryb290IikpKSwhdClmb3IodmFyIG47bj1lLmxhc3RDaGlsZDspZS5yZW1vdmVDaGlsZChuKTtyZXR1cm4gbmV3IFJyKGUsITEsdCl9ZnVuY3Rpb24gTHIoZSx0LG4scixzKXtqcihuKXx8bygiMjAwIik7dmFyIGk9bi5fcmVhY3RSb290Q29udGFpbmVyO2lmKGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKXt2YXIgYT1zO3M9ZnVuY3Rpb24oKXt2YXIgZT1BcihpLl9pbnRlcm5hbFJvb3QpO2EuY2FsbChlKX19bnVsbCE9ZT9pLmxlZ2FjeV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihlLHQscyk6aS5yZW5kZXIodCxzKX1lbHNle2lmKGk9bi5fcmVhY3RSb290Q29udGFpbmVyPXhyKG4sciksImZ1bmN0aW9uIj09dHlwZW9mIHMpe3ZhciBsPXM7cz1mdW5jdGlvbigpe3ZhciBlPUFyKGkuX2ludGVybmFsUm9vdCk7bC5jYWxsKGUpfX1FcihmdW5jdGlvbigpe251bGwhPWU/aS5sZWdhY3lfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoZSx0LHMpOmkucmVuZGVyKHQscyl9KX1yZXR1cm4gQXIoaS5faW50ZXJuYWxSb290KX1mdW5jdGlvbiBEcihlLHQpe3ZhciBuPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBqcih0KXx8bygiMjAwIiksQ3IoZSx0LG51bGwsbil9LyoqIEBsaWNlbnNlIFJlYWN0IHYxNi42LjAKICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8KdmFyIHdyPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTXI9bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLGtyPW4oIi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIpO3dyfHxvKCIyMjciKTt2YXIgSXI9ITEsUHI9bnVsbCxOcj0hMSxIcj1udWxsLEZyPXtvbkVycm9yOmZ1bmN0aW9uKGUpe0lyPSEwLFByPWV9fSxCcj1udWxsLFVyPXt9LEdyPVtdLHpyPXt9LFZyPXt9LFdyPXt9LFlyPW51bGwscXI9bnVsbCxLcj1udWxsLFhyPW51bGwsJHI9e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6ZnVuY3Rpb24oZSl7QnImJm8oIjEwMSIpLEJyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLGwoKX0saW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG49ITE7Zm9yKHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgcj1lW3RdO1VyLmhhc093blByb3BlcnR5KHQpJiZVclt0XT09PXJ8fChVclt0XSYmbygiMTAyIix0KSxVclt0XT1yLG49ITApfW4mJmwoKX19LFFyPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLEpyPSJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQiK1FyLFpyPSJfX3JlYWN0RXZlbnRIYW5kbGVycyQiK1FyLGVvPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksdG89e2FuaW1hdGlvbmVuZDpqKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246aigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6aigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOmooIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LG5vPXt9LHJvPXt9O2VvJiYocm89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSB0by5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSB0by5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSB0by5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgdG8udHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTt2YXIgb289eCgiYW5pbWF0aW9uZW5kIiksc289eCgiYW5pbWF0aW9uaXRlcmF0aW9uIiksaW89eCgiYW5pbWF0aW9uc3RhcnQiKSxhbz14KCJ0cmFuc2l0aW9uZW5kIiksbG89ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksdW89bnVsbCxjbz1udWxsLF9vPW51bGw7TXIoTS5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9dHlwZW9mIGUucmV0dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1EKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5zdG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKToidW5rbm93biIhPXR5cGVvZiBlLmNhbmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNpc3RlbnQ9RH0saXNQZXJzaXN0ZW50OncsZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKGUgaW4gdCl0aGlzW2VdPW51bGw7dGhpcy5uYXRpdmVFdmVudD10aGlzLl90YXJnZXRJbnN0PXRoaXMuZGlzcGF0Y2hDb25maWc9bnVsbCx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXcsdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXM9dGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbH19KSxNLkludGVyZmFjZT17dHlwZTpudWxsLHRhcmdldDpudWxsLGN1cnJlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfSxNLmV4dGVuZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7fWZ1bmN0aW9uIG4oKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHI9dGhpczt0LnByb3RvdHlwZT1yLnByb3RvdHlwZTt2YXIgbz1uZXcgdDtyZXR1cm4gTXIobyxuLnByb3RvdHlwZSksbi5wcm90b3R5cGU9byxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4uSW50ZXJmYWNlPU1yKHt9LHIuSW50ZXJmYWNlLGUpLG4uZXh0ZW5kPXIuZXh0ZW5kLFAobiksbn0sUChNKTt2YXIgcG89TS5leHRlbmQoe2RhdGE6bnVsbH0pLGZvPU0uZXh0ZW5kKHtkYXRhOm51bGx9KSxtbz1bOSwxMywyNywzMl0saG89ZW8mJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxnbz1udWxsO2VvJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYoZ289ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgYm89ZW8mJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhZ28sRW89ZW8mJighaG98fGdvJiY4PGdvJiYxMT49Z28pLHlvPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLHZvPXtiZWZvcmVJbnB1dDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQmVmb3JlSW5wdXQiLGNhcHR1cmVkOiJvbkJlZm9yZUlucHV0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdfSxjb21wb3NpdGlvbkVuZDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25FbmQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjb21wb3NpdGlvbmVuZCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKX0sY29tcG9zaXRpb25TdGFydDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25TdGFydCIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25TdGFydENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb251cGRhdGUga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9fSxUbz0hMSxBbz0hMSxDbz17ZXZlbnRUeXBlczp2byxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXZvaWQgMCxzPXZvaWQgMDtpZihobyllOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpvPXZvLmNvbXBvc2l0aW9uU3RhcnQ7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpvPXZvLmNvbXBvc2l0aW9uRW5kO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6bz12by5jb21wb3NpdGlvblVwZGF0ZTticmVhayBlfW89dm9pZCAwfWVsc2UgQW8/TihlLG4pJiYobz12by5jb21wb3NpdGlvbkVuZCk6ImtleWRvd24iPT09ZSYmMjI5PT09bi5rZXlDb2RlJiYobz12by5jb21wb3NpdGlvblN0YXJ0KTtyZXR1cm4gbz8oRW8mJiJrbyIhPT1uLmxvY2FsZSYmKEFvfHxvIT09dm8uY29tcG9zaXRpb25TdGFydD9vPT09dm8uY29tcG9zaXRpb25FbmQmJkFvJiYocz1MKCkpOih1bz1yLGNvPSJ2YWx1ZSJpbiB1bz91by52YWx1ZTp1by50ZXh0Q29udGVudCxBbz0hMCkpLG89cG8uZ2V0UG9vbGVkKG8sdCxuLHIpLHM/by5kYXRhPXM6bnVsbCE9PShzPUgobikpJiYoby5kYXRhPXMpLFIobykscz1vKTpzPW51bGwsKGU9Ym8/RihlLG4pOkIoZSxuKSk/KHQ9Zm8uZ2V0UG9vbGVkKHZvLmJlZm9yZUlucHV0LHQsbixyKSx0LmRhdGE9ZSxSKHQpKTp0PW51bGwsbnVsbD09PXM/dDpudWxsPT09dD9zOltzLHRdfX0sT289bnVsbCxTbz1udWxsLFJvPW51bGwsam89ITEseG89e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsImRhdGV0aW1lLWxvY2FsIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9LExvPXdyLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELERvPS9eKC4qKVtcXFwvXS8sd289ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixNbz13bz9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsa289d28/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsSW89d28/U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKTo2MDEwNyxQbz13bz9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LE5vPXdvP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQsSG89d28/U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKTo2MDEwOSxGbz13bz9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsQm89d28/U3ltYm9sLmZvcigicmVhY3QuY29uY3VycmVudF9tb2RlIik6NjAxMTEsVW89d28/U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKTo2MDExMixHbz13bz9TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpOjYwMTEzLHpvPXdvP1N5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKTo2MDExNSxWbz13bz9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTYsV289ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLFlvPS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8scW89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxLbz17fSxYbz17fSwkbz17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7JG9bZV09bmV3IGFlKGUsMCwhMSxlLG51bGwpfSksW1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07JG9bdF09bmV3IGFlKHQsMSwhMSxlWzFdLG51bGwpfSksWyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyRvW2VdPW5ldyBhZShlLDIsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSksWyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlKXskb1tlXT1uZXcgYWUoZSwyLCExLGUsbnVsbCl9KSwiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7JG9bZV09bmV3IGFlKGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCl9KSxbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyRvW2VdPW5ldyBhZShlLDMsITAsZSxudWxsKX0pLFsiY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaChmdW5jdGlvbihlKXskb1tlXT1uZXcgYWUoZSw0LCExLGUsbnVsbCl9KSxbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyRvW2VdPW5ldyBhZShlLDYsITEsZSxudWxsKX0pLFsicm93U3BhbiIsInN0YXJ0Il0uZm9yRWFjaChmdW5jdGlvbihlKXskb1tlXT1uZXcgYWUoZSw1LCExLGUudG9Mb3dlckNhc2UoKSxudWxsKX0pO3ZhciBRbz0vW1wtOl0oW2Etel0pL2c7ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFFvLGxlKTskb1t0XT1uZXcgYWUodCwxLCExLGUsbnVsbCl9KSwieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOmhyZWYgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUW8sbGUpOyRvW3RdPW5ldyBhZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpfSksWyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUW8sbGUpOyRvW3RdPW5ldyBhZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIil9KSwkby50YWJJbmRleD1uZXcgYWUoInRhYkluZGV4IiwxLCExLCJ0YWJpbmRleCIsbnVsbCk7dmFyIEpvPXtjaGFuZ2U6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNoYW5nZSIsY2FwdHVyZWQ6Im9uQ2hhbmdlQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjaGFuZ2UgY2xpY2sgZm9jdXMgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIil9fSxabz1udWxsLGVzPW51bGwsdHM9ITE7ZW8mJih0cz0kKCJpbnB1dCIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpKTt2YXIgbnM9e2V2ZW50VHlwZXM6Sm8sX2lzSW5wdXRFdmVudFN1cHBvcnRlZDp0cyxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXQ/eSh0KTp3aW5kb3cscz12b2lkIDAsaT12b2lkIDAsYT1vLm5vZGVOYW1lJiZvLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoInNlbGVjdCI9PT1hfHwiaW5wdXQiPT09YSYmImZpbGUiPT09by50eXBlP3M9eWU6SyhvKT90cz9zPVNlOihzPUNlLGk9QWUpOihhPW8ubm9kZU5hbWUpJiYiaW5wdXQiPT09YS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PW8udHlwZXx8InJhZGlvIj09PW8udHlwZSkmJihzPU9lKSxzJiYocz1zKGUsdCkpKXJldHVybiBnZShzLG4scik7aSYmaShlLG8sdCksImJsdXIiPT09ZSYmKGU9by5fd3JhcHBlclN0YXRlKSYmZS5jb250cm9sbGVkJiYibnVtYmVyIj09PW8udHlwZSYmaGUobywibnVtYmVyIixvLnZhbHVlKX19LHJzPU0uZXh0ZW5kKHt2aWV3Om51bGwsZGV0YWlsOm51bGx9KSxvcz17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9LHNzPTAsaXM9MCxhcz0hMSxscz0hMSx1cz1ycy5leHRlbmQoe3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxwYWdlWDpudWxsLHBhZ2VZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6amUsYnV0dG9uOm51bGwsYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9LG1vdmVtZW50WDpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRYImluIGUpcmV0dXJuIGUubW92ZW1lbnRYO3ZhciB0PXNzO3JldHVybiBzcz1lLnNjcmVlblgsYXM/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5YLXQ6MDooYXM9ITAsMCl9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRZImluIGUpcmV0dXJuIGUubW92ZW1lbnRZO3ZhciB0PWlzO3JldHVybiBpcz1lLnNjcmVlblksbHM/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5ZLXQ6MDoobHM9ITAsMCl9fSksY3M9dXMuZXh0ZW5kKHtwb2ludGVySWQ6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHByZXNzdXJlOm51bGwsdGFuZ2VudGlhbFByZXNzdXJlOm51bGwsdGlsdFg6bnVsbCx0aWx0WTpudWxsLHR3aXN0Om51bGwscG9pbnRlclR5cGU6bnVsbCxpc1ByaW1hcnk6bnVsbH0pLGRzPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlRW50ZXIiLGRlcGVuZGVuY2llczpbIm1vdXNlb3V0IiwibW91c2VvdmVyIl19LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VMZWF2ZSIsZGVwZW5kZW5jaWVzOlsibW91c2VvdXQiLCJtb3VzZW92ZXIiXX0scG9pbnRlckVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvblBvaW50ZXJFbnRlciIsZGVwZW5kZW5jaWVzOlsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl19LHBvaW50ZXJMZWF2ZTp7cmVnaXN0cmF0aW9uTmFtZToib25Qb2ludGVyTGVhdmUiLGRlcGVuZGVuY2llczpbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdfX0sX3M9e2V2ZW50VHlwZXM6ZHMsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz0ibW91c2VvdmVyIj09PWV8fCJwb2ludGVyb3ZlciI9PT1lLHM9Im1vdXNlb3V0Ij09PWV8fCJwb2ludGVyb3V0Ij09PWU7aWYobyYmKG4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCl8fCFzJiYhbylyZXR1cm4gbnVsbDtpZihvPXIud2luZG93PT09cj9yOihvPXIub3duZXJEb2N1bWVudCk/by5kZWZhdWx0Vmlld3x8by5wYXJlbnRXaW5kb3c6d2luZG93LHM/KHM9dCx0PSh0PW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQpP2IodCk6bnVsbCk6cz1udWxsLHM9PT10KXJldHVybiBudWxsO3ZhciBpPXZvaWQgMCxhPXZvaWQgMCxsPXZvaWQgMCx1PXZvaWQgMDsibW91c2VvdXQiPT09ZXx8Im1vdXNlb3ZlciI9PT1lPyhpPXVzLGE9ZHMubW91c2VMZWF2ZSxsPWRzLm1vdXNlRW50ZXIsdT0ibW91c2UiKToicG9pbnRlcm91dCIhPT1lJiYicG9pbnRlcm92ZXIiIT09ZXx8KGk9Y3MsYT1kcy5wb2ludGVyTGVhdmUsbD1kcy5wb2ludGVyRW50ZXIsdT0icG9pbnRlciIpO3ZhciBjPW51bGw9PXM/bzp5KHMpO2lmKG89bnVsbD09dD9vOnkodCksZT1pLmdldFBvb2xlZChhLHMsbixyKSxlLnR5cGU9dSsibGVhdmUiLGUudGFyZ2V0PWMsZS5yZWxhdGVkVGFyZ2V0PW8sbj1pLmdldFBvb2xlZChsLHQsbixyKSxuLnR5cGU9dSsiZW50ZXIiLG4udGFyZ2V0PW8sbi5yZWxhdGVkVGFyZ2V0PWMscj10LHMmJnIpZTp7Zm9yKHQ9cyxvPXIsdT0wLGk9dDtpO2k9VChpKSl1Kys7Zm9yKGk9MCxsPW87bDtsPVQobCkpaSsrO2Zvcig7MDx1LWk7KXQ9VCh0KSx1LS07Zm9yKDswPGktdTspbz1UKG8pLGktLTtmb3IoO3UtLTspe2lmKHQ9PT1vfHx0PT09by5hbHRlcm5hdGUpYnJlYWsgZTt0PVQodCksbz1UKG8pfXQ9bnVsbH1lbHNlIHQ9bnVsbDtmb3Iobz10LHQ9W107cyYmcyE9PW8mJihudWxsPT09KHU9cy5hbHRlcm5hdGUpfHx1IT09byk7KXQucHVzaChzKSxzPVQocyk7Zm9yKHM9W107ciYmciE9PW8mJihudWxsPT09KHU9ci5hbHRlcm5hdGUpfHx1IT09byk7KXMucHVzaChyKSxyPVQocik7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylPKHRbcl0sImJ1YmJsZWQiLGUpO2ZvcihyPXMubGVuZ3RoOzA8ci0tOylPKHNbcl0sImNhcHR1cmVkIixuKTtyZXR1cm5bZSxuXX19LHBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZnM9TS5leHRlbmQoe2FuaW1hdGlvbk5hbWU6bnVsbCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH0pLG1zPU0uZXh0ZW5kKHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLGhzPXJzLmV4dGVuZCh7cmVsYXRlZFRhcmdldDpudWxsfSksZ3M9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LGJzPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sRXM9cnMuZXh0ZW5kKHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PWdzW2Uua2V5XXx8ZS5rZXk7aWYoIlVuaWRlbnRpZmllZCIhPT10KXJldHVybiB0fXJldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/KGU9SWUoZSksMTM9PT1lPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2JzW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmllclN0YXRlOmplLGNoYXJDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SWUoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SWUoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfX0pLHlzPXVzLmV4dGVuZCh7ZGF0YVRyYW5zZmVyOm51bGx9KSx2cz1ycy5leHRlbmQoe3RvdWNoZXM6bnVsbCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpqZX0pLFRzPU0uZXh0ZW5kKHtwcm9wZXJ0eU5hbWU6bnVsbCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH0pLEFzPXVzLmV4dGVuZCh7ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBlP2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6bnVsbH0pLENzPVtbImFib3J0IiwiYWJvcnQiXSxbb28sImFuaW1hdGlvbkVuZCJdLFtzbywiYW5pbWF0aW9uSXRlcmF0aW9uIl0sW2lvLCJhbmltYXRpb25TdGFydCJdLFsiY2FucGxheSIsImNhblBsYXkiXSxbImNhbnBsYXl0aHJvdWdoIiwiY2FuUGxheVRocm91Z2giXSxbImRyYWciLCJkcmFnIl0sWyJkcmFnZW50ZXIiLCJkcmFnRW50ZXIiXSxbImRyYWdleGl0IiwiZHJhZ0V4aXQiXSxbImRyYWdsZWF2ZSIsImRyYWdMZWF2ZSJdLFsiZHJhZ292ZXIiLCJkcmFnT3ZlciJdLFsiZHVyYXRpb25jaGFuZ2UiLCJkdXJhdGlvbkNoYW5nZSJdLFsiZW1wdGllZCIsImVtcHRpZWQiXSxbImVuY3J5cHRlZCIsImVuY3J5cHRlZCJdLFsiZW5kZWQiLCJlbmRlZCJdLFsiZXJyb3IiLCJlcnJvciJdLFsiZ290cG9pbnRlcmNhcHR1cmUiLCJnb3RQb2ludGVyQ2FwdHVyZSJdLFsibG9hZCIsImxvYWQiXSxbImxvYWRlZGRhdGEiLCJsb2FkZWREYXRhIl0sWyJsb2FkZWRtZXRhZGF0YSIsImxvYWRlZE1ldGFkYXRhIl0sWyJsb2Fkc3RhcnQiLCJsb2FkU3RhcnQiXSxbImxvc3Rwb2ludGVyY2FwdHVyZSIsImxvc3RQb2ludGVyQ2FwdHVyZSJdLFsibW91c2Vtb3ZlIiwibW91c2VNb3ZlIl0sWyJtb3VzZW91dCIsIm1vdXNlT3V0Il0sWyJtb3VzZW92ZXIiLCJtb3VzZU92ZXIiXSxbInBsYXlpbmciLCJwbGF5aW5nIl0sWyJwb2ludGVybW92ZSIsInBvaW50ZXJNb3ZlIl0sWyJwb2ludGVyb3V0IiwicG9pbnRlck91dCJdLFsicG9pbnRlcm92ZXIiLCJwb2ludGVyT3ZlciJdLFsicHJvZ3Jlc3MiLCJwcm9ncmVzcyJdLFsic2Nyb2xsIiwic2Nyb2xsIl0sWyJzZWVraW5nIiwic2Vla2luZyJdLFsic3RhbGxlZCIsInN0YWxsZWQiXSxbInN1c3BlbmQiLCJzdXNwZW5kIl0sWyJ0aW1ldXBkYXRlIiwidGltZVVwZGF0ZSJdLFsidG9nZ2xlIiwidG9nZ2xlIl0sWyJ0b3VjaG1vdmUiLCJ0b3VjaE1vdmUiXSxbYW8sInRyYW5zaXRpb25FbmQiXSxbIndhaXRpbmciLCJ3YWl0aW5nIl0sWyJ3aGVlbCIsIndoZWVsIl1dLE9zPXt9LFNzPXt9O1tbImJsdXIiLCJibHVyIl0sWyJjYW5jZWwiLCJjYW5jZWwiXSxbImNsaWNrIiwiY2xpY2siXSxbImNsb3NlIiwiY2xvc2UiXSxbImNvbnRleHRtZW51IiwiY29udGV4dE1lbnUiXSxbImNvcHkiLCJjb3B5Il0sWyJjdXQiLCJjdXQiXSxbImF1eGNsaWNrIiwiYXV4Q2xpY2siXSxbImRibGNsaWNrIiwiZG91YmxlQ2xpY2siXSxbImRyYWdlbmQiLCJkcmFnRW5kIl0sWyJkcmFnc3RhcnQiLCJkcmFnU3RhcnQiXSxbImRyb3AiLCJkcm9wIl0sWyJmb2N1cyIsImZvY3VzIl0sWyJpbnB1dCIsImlucHV0Il0sWyJpbnZhbGlkIiwiaW52YWxpZCJdLFsia2V5ZG93biIsImtleURvd24iXSxbImtleXByZXNzIiwia2V5UHJlc3MiXSxbImtleXVwIiwia2V5VXAiXSxbIm1vdXNlZG93biIsIm1vdXNlRG93biJdLFsibW91c2V1cCIsIm1vdXNlVXAiXSxbInBhc3RlIiwicGFzdGUiXSxbInBhdXNlIiwicGF1c2UiXSxbInBsYXkiLCJwbGF5Il0sWyJwb2ludGVyY2FuY2VsIiwicG9pbnRlckNhbmNlbCJdLFsicG9pbnRlcmRvd24iLCJwb2ludGVyRG93biJdLFsicG9pbnRlcnVwIiwicG9pbnRlclVwIl0sWyJyYXRlY2hhbmdlIiwicmF0ZUNoYW5nZSJdLFsicmVzZXQiLCJyZXNldCJdLFsic2Vla2VkIiwic2Vla2VkIl0sWyJzdWJtaXQiLCJzdWJtaXQiXSxbInRvdWNoY2FuY2VsIiwidG91Y2hDYW5jZWwiXSxbInRvdWNoZW5kIiwidG91Y2hFbmQiXSxbInRvdWNoc3RhcnQiLCJ0b3VjaFN0YXJ0Il0sWyJ2b2x1bWVjaGFuZ2UiLCJ2b2x1bWVDaGFuZ2UiXV0uZm9yRWFjaChmdW5jdGlvbihlKXtQZShlLCEwKX0pLENzLmZvckVhY2goZnVuY3Rpb24oZSl7UGUoZSwhMSl9KTt2YXIgUnM9e2V2ZW50VHlwZXM6T3MsaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT0oZT1Tc1tlXSkmJiEwPT09ZS5pc0ludGVyYWN0aXZlfSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVNzW2VdO2lmKCFvKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZigwPT09SWUobikpcmV0dXJuIG51bGw7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjplPUVzO2JyZWFrO2Nhc2UiYmx1ciI6Y2FzZSJmb2N1cyI6ZT1oczticmVhaztjYXNlImNsaWNrIjppZigyPT09bi5idXR0b24pcmV0dXJuIG51bGw7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjplPXVzO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmU9eXM7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6ZT12czticmVhaztjYXNlIG9vOmNhc2Ugc286Y2FzZSBpbzplPWZzO2JyZWFrO2Nhc2UgYW86ZT1UczticmVhaztjYXNlInNjcm9sbCI6ZT1yczticmVhaztjYXNlIndoZWVsIjplPUFzO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UicGFzdGUiOmU9bXM7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJ1cCI6ZT1jczticmVhaztkZWZhdWx0OmU9TX1yZXR1cm4gdD1lLmdldFBvb2xlZChvLHQsbixyKSxSKHQpLHR9fSxqcz1Scy5pc0ludGVyYWN0aXZlVG9wTGV2ZWxFdmVudFR5cGUseHM9W10sTHM9ITAsRHM9e30sd3M9MCxNcz0iX3JlYWN0TGlzdGVuZXJzSUQiKygiIitNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSxrcz1lbyYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxJcz17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19LFBzPW51bGwsTnM9bnVsbCxIcz1udWxsLEZzPSExLEJzPXtldmVudFR5cGVzOklzLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scz1yLndpbmRvdz09PXI/ci5kb2N1bWVudDo5PT09ci5ub2RlVHlwZT9yOnIub3duZXJEb2N1bWVudDtpZighKG89IXMpKXtlOntzPUdlKHMpLG89V3Iub25TZWxlY3Q7Zm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIXMuaGFzT3duUHJvcGVydHkoYSl8fCFzW2FdKXtzPSExO2JyZWFrIGV9fXM9ITB9bz0hc31pZihvKXJldHVybiBudWxsO3N3aXRjaChzPXQ/eSh0KTp3aW5kb3csZSl7Y2FzZSJmb2N1cyI6KEsocyl8fCJ0cnVlIj09PXMuY29udGVudEVkaXRhYmxlKSYmKFBzPXMsTnM9dCxIcz1udWxsKTticmVhaztjYXNlImJsdXIiOkhzPU5zPVBzPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOkZzPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpyZXR1cm4gRnM9ITEsWGUobixyKTtjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYoa3MpYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpyZXR1cm4gWGUobixyKX1yZXR1cm4gbnVsbH19OyRyLmluamVjdEV2ZW50UGx1Z2luT3JkZXIoIlJlc3BvbmRlckV2ZW50UGx1Z2luIFNpbXBsZUV2ZW50UGx1Z2luIEVudGVyTGVhdmVFdmVudFBsdWdpbiBDaGFuZ2VFdmVudFBsdWdpbiBTZWxlY3RFdmVudFBsdWdpbiBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luIi5zcGxpdCgiICIpKSxZcj12LHFyPUUsS3I9eSwkci5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1NpbXBsZUV2ZW50UGx1Z2luOlJzLEVudGVyTGVhdmVFdmVudFBsdWdpbjpfcyxDaGFuZ2VFdmVudFBsdWdpbjpucyxTZWxlY3RFdmVudFBsdWdpbjpCcyxCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOkNvfSk7dmFyIFVzPXtodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixtYXRobWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHN2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxHcz12b2lkIDAsenM9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24odCxuLHIsbyl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4pfSl9OmV9KGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT1Vcy5zdmd8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKEdzPUdzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxHcy5pbm5lckhUTUw9Ijxzdmc+Iit0KyI8L3N2Zz4iLHQ9R3MuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pLFZzPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxXcz1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKFZzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dzLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksVnNbdF09VnNbZV19KX0pO3ZhciBZcz1Ncih7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KSxxcz1udWxsLEtzPW51bGwsWHM9c2V0VGltZW91dCwkcz1jbGVhclRpbWVvdXQ7bmV3IFNldDt2YXIgUXM9W10sSnM9LTEsWnM9e30sZWk9e2N1cnJlbnQ6WnN9LHRpPXtjdXJyZW50OiExfSxuaT1acyxyaT1udWxsLG9pPW51bGwsc2k9ITEsaWk9e2N1cnJlbnQ6bnVsbH0sYWk9bnVsbCxsaT1udWxsLHVpPW51bGwsY2k9e30sZGk9e2N1cnJlbnQ6Y2l9LF9pPXtjdXJyZW50OmNpfSxwaT17Y3VycmVudDpjaX0sZmk9TG8uUmVhY3RDdXJyZW50T3duZXIsbWk9KG5ldyB3ci5Db21wb25lbnQpLnJlZnMsaGk9e2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4hIShlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcikmJjI9PT1EZShlKX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCxuKXtlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgcj1scigpO3I9Wm4ocixlKTt2YXIgbz16dChyKTtvLnBheWxvYWQ9dCx2b2lkIDAhPT1uJiZudWxsIT09biYmKG8uY2FsbGJhY2s9biksV3QoZSxvKSxucihlLHIpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsdCxuKXtlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgcj1scigpO3I9Wm4ocixlKTt2YXIgbz16dChyKTtvLnRhZz0xLG8ucGF5bG9hZD10LHZvaWQgMCE9PW4mJm51bGwhPT1uJiYoby5jYWxsYmFjaz1uKSxXdChlLG8pLG5yKGUscil9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciBuPWxyKCk7bj1abihuLGUpO3ZhciByPXp0KG4pO3IudGFnPTIsdm9pZCAwIT09dCYmbnVsbCE9PXQmJihyLmNhbGxiYWNrPXQpLFd0KGUsciksbnIoZSxuKX19LGdpPUFycmF5LmlzQXJyYXksYmk9aG4oITApLEVpPWhuKCExKSx5aT1udWxsLHZpPW51bGwsVGk9ITEsQWk9TG8uUmVhY3RDdXJyZW50T3duZXIsQ2k9dm9pZCAwLE9pPXZvaWQgMCxTaT12b2lkIDAsUmk9dm9pZCAwO0NpPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuY2hpbGQ7bnVsbCE9PW47KXtpZig1PT09bi50YWd8fDY9PT1uLnRhZyllLmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1uLnRhZyYmbnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT10KWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT10KXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fSxPaT1mdW5jdGlvbigpe30sU2k9ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz1lLm1lbW9pemVkUHJvcHM7aWYocyE9PXIpe3ZhciBpPXQuc3RhdGVOb2RlO3N3aXRjaChybihkaS5jdXJyZW50KSxlPW51bGwsbil7Y2FzZSJpbnB1dCI6cz1kZShpLHMpLHI9ZGUoaSxyKSxlPVtdO2JyZWFrO2Nhc2Uib3B0aW9uIjpzPVFlKGkscykscj1RZShpLHIpLGU9W107YnJlYWs7Y2FzZSJzZWxlY3QiOnM9TXIoe30scyx7dmFsdWU6dm9pZCAwfSkscj1Ncih7fSxyLHt2YWx1ZTp2b2lkIDB9KSxlPVtdO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnM9WmUoaSxzKSxyPVplKGksciksZT1bXTticmVhaztkZWZhdWx0OiJmdW5jdGlvbiIhPXR5cGVvZiBzLm9uQ2xpY2smJiJmdW5jdGlvbiI9PXR5cGVvZiByLm9uQ2xpY2smJihpLm9uY2xpY2s9Y3QpfWF0KG4sciksaT1uPXZvaWQgMDt2YXIgYT1udWxsO2ZvcihuIGluIHMpaWYoIXIuaGFzT3duUHJvcGVydHkobikmJnMuaGFzT3duUHJvcGVydHkobikmJm51bGwhPXNbbl0paWYoInN0eWxlIj09PW4pe3ZhciBsPXNbbl07Zm9yKGkgaW4gbClsLmhhc093blByb3BlcnR5KGkpJiYoYXx8KGE9e30pLGFbaV09IiIpfWVsc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiIT09biYmImNoaWxkcmVuIiE9PW4mJiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09biYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1uJiYiYXV0b0ZvY3VzIiE9PW4mJihWci5oYXNPd25Qcm9wZXJ0eShuKT9lfHwoZT1bXSk6KGU9ZXx8W10pLnB1c2gobixudWxsKSk7Zm9yKG4gaW4gcil7dmFyIHU9cltuXTtpZihsPW51bGwhPXM/c1tuXTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eShuKSYmdSE9PWwmJihudWxsIT11fHxudWxsIT1sKSlpZigic3R5bGUiPT09bilpZihsKXtmb3IoaSBpbiBsKSFsLmhhc093blByb3BlcnR5KGkpfHx1JiZ1Lmhhc093blByb3BlcnR5KGkpfHwoYXx8KGE9e30pLGFbaV09IiIpO2ZvcihpIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShpKSYmbFtpXSE9PXVbaV0mJihhfHwoYT17fSksYVtpXT11W2ldKX1lbHNlIGF8fChlfHwoZT1bXSksZS5wdXNoKG4sYSkpLGE9dTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PW4/KHU9dT91Ll9faHRtbDp2b2lkIDAsbD1sP2wuX19odG1sOnZvaWQgMCxudWxsIT11JiZsIT09dSYmKGU9ZXx8W10pLnB1c2gobiwiIit1KSk6ImNoaWxkcmVuIj09PW4/bD09PXV8fCJzdHJpbmciIT10eXBlb2YgdSYmIm51bWJlciIhPXR5cGVvZiB1fHwoZT1lfHxbXSkucHVzaChuLCIiK3UpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09biYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1uJiYoVnIuaGFzT3duUHJvcGVydHkobik/KG51bGwhPXUmJnV0KG8sbiksZXx8bD09PXV8fChlPVtdKSk6KGU9ZXx8W10pLnB1c2gobix1KSl9YSYmKGU9ZXx8W10pLnB1c2goInN0eWxlIixhKSxvPWUsKHQudXBkYXRlUXVldWU9bykmJk5uKHQpfX0sUmk9ZnVuY3Rpb24oZSx0LG4scil7biE9PXImJk5uKHQpfTt2YXIgamk9e3JlYWRDb250ZXh0Om5ufSx4aT1Mby5SZWFjdEN1cnJlbnRPd25lcixMaT0wLERpPTAsd2k9ITEsTWk9bnVsbCxraT1udWxsLElpPTAsUGk9LTEsTmk9ITEsSGk9bnVsbCxGaT0hMSxCaT1udWxsLFVpPW51bGwsR2k9bnVsbCx6aT0wLFZpPXZvaWQgMCxXaT0hMSxZaT1udWxsLHFpPTAsS2k9MCxYaT0hMSwkaT0hMSxRaT1udWxsLEppPW51bGwsWmk9ITEsZWE9ITEsdGE9ITEsbmE9bnVsbCxyYT1rci51bnN0YWJsZV9ub3coKSxvYT0yKyhyYS8xMHwwKSxzYT1vYSxpYT01MCxhYT0wLGxhPW51bGwsdWE9MTtPbz1mdW5jdGlvbihlLHQsbil7c3dpdGNoKHQpe2Nhc2UiaW5wdXQiOmlmKGZlKGUsbiksdD1uLm5hbWUsInJhZGlvIj09PW4udHlwZSYmbnVsbCE9dCl7Zm9yKG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO2ZvcihuPW4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04uc3RyaW5naWZ5KCIiK3QpKyddW3R5cGU9InJhZGlvIl0nKSx0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07aWYociE9PWUmJnIuZm9ybT09PWUuZm9ybSl7dmFyIHM9dihyKTtzfHxvKCI5MCIpLGVlKHIpLGZlKHIscyl9fX1icmVhaztjYXNlInRleHRhcmVhIjp0dChlLG4pO2JyZWFrO2Nhc2Uic2VsZWN0IjpudWxsIT0odD1uLnZhbHVlKSYmSmUoZSwhIW4ubXVsdGlwbGUsdCwhMSl9fSxPci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3RoaXMuX2RlZmVyfHxvKCIyNTAiKSx0aGlzLl9oYXNDaGlsZHJlbj0hMCx0aGlzLl9jaGlsZHJlbj1lO3ZhciB0PXRoaXMuX3Jvb3QuX2ludGVybmFsUm9vdCxuPXRoaXMuX2V4cGlyYXRpb25UaW1lLHI9bmV3IFNyO3JldHVybiB2cihlLHQsbnVsbCxuLHIuX29uQ29tbWl0KSxyfSxPci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlKXtpZih0aGlzLl9kaWRDb21wbGV0ZSllKCk7ZWxzZXt2YXIgdD10aGlzLl9jYWxsYmFja3M7bnVsbD09PXQmJih0PXRoaXMuX2NhbGxiYWNrcz1bXSksdC5wdXNoKGUpfX0sT3IucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3Jvb3QuX2ludGVybmFsUm9vdCx0PWUuZmlyc3RCYXRjaDtpZih0aGlzLl9kZWZlciYmbnVsbCE9PXR8fG8oIjI1MSIpLHRoaXMuX2hhc0NoaWxkcmVuKXt2YXIgbj10aGlzLl9leHBpcmF0aW9uVGltZTtpZih0IT09dGhpcyl7dGhpcy5faGFzQ2hpbGRyZW4mJihuPXRoaXMuX2V4cGlyYXRpb25UaW1lPXQuX2V4cGlyYXRpb25UaW1lLHRoaXMucmVuZGVyKHRoaXMuX2NoaWxkcmVuKSk7Zm9yKHZhciByPW51bGwscz10O3MhPT10aGlzOylyPXMscz1zLl9uZXh0O251bGw9PT1yJiZvKCIyNTEiKSxyLl9uZXh0PXMuX25leHQsdGhpcy5fbmV4dD10LGUuZmlyc3RCYXRjaD10aGlzfXRoaXMuX2RlZmVyPSExLHByKGUsbiksdD10aGlzLl9uZXh0LHRoaXMuX25leHQ9bnVsbCx0PWUuZmlyc3RCYXRjaD10LG51bGwhPT10JiZ0Ll9oYXNDaGlsZHJlbiYmdC5yZW5kZXIodC5fY2hpbGRyZW4pfWVsc2UgdGhpcy5fbmV4dD1udWxsLHRoaXMuX2RlZmVyPSExfSxPci5wcm90b3R5cGUuX29uQ29tcGxldGU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGlkQ29tcGxldGUpe3RoaXMuX2RpZENvbXBsZXRlPSEwO3ZhciBlPXRoaXMuX2NhbGxiYWNrcztpZihudWxsIT09ZSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX0sU3IucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGlkQ29tbWl0KWUoKTtlbHNle3ZhciB0PXRoaXMuX2NhbGxiYWNrcztudWxsPT09dCYmKHQ9dGhpcy5fY2FsbGJhY2tzPVtdKSx0LnB1c2goZSl9fSxTci5wcm90b3R5cGUuX29uQ29tbWl0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RpZENvbW1pdCl7dGhpcy5fZGlkQ29tbWl0PSEwO3ZhciBlPXRoaXMuX2NhbGxiYWNrcztpZihudWxsIT09ZSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmbygiMTkxIixuKSxuKCl9fX0sUnIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2ludGVybmFsUm9vdCxyPW5ldyBTcjtyZXR1cm4gdD12b2lkIDA9PT10P251bGw6dCxudWxsIT09dCYmci50aGVuKHQpLFRyKGUsbixudWxsLHIuX29uQ29tbWl0KSxyfSxSci5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcm5hbFJvb3Qsbj1uZXcgU3I7cmV0dXJuIGU9dm9pZCAwPT09ZT9udWxsOmUsbnVsbCE9PWUmJm4udGhlbihlKSxUcihudWxsLHQsbnVsbCxuLl9vbkNvbW1pdCksbn0sUnIucHJvdG90eXBlLmxlZ2FjeV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5faW50ZXJuYWxSb290LG89bmV3IFNyO3JldHVybiBuPXZvaWQgMD09PW4/bnVsbDpuLG51bGwhPT1uJiZvLnRoZW4obiksVHIodCxyLGUsby5fb25Db21taXQpLG99LFJyLnByb3RvdHlwZS5jcmVhdGVCYXRjaD1mdW5jdGlvbigpe3ZhciBlPW5ldyBPcih0aGlzKSx0PWUuX2V4cGlyYXRpb25UaW1lLG49dGhpcy5faW50ZXJuYWxSb290LHI9bi5maXJzdEJhdGNoO2lmKG51bGw9PT1yKW4uZmlyc3RCYXRjaD1lLGUuX25leHQ9bnVsbDtlbHNle2ZvcihuPW51bGw7bnVsbCE9PXImJnIuX2V4cGlyYXRpb25UaW1lPD10OyluPXIscj1yLl9uZXh0O2UuX25leHQ9cixudWxsIT09biYmKG4uX25leHQ9ZSl9cmV0dXJuIGV9LFY9YnIsVz15cixZPWZ1bmN0aW9uKCl7V2l8fDA9PT1LaXx8KF9yKEtpLG51bGwpLEtpPTApfTt2YXIgY2E9e2NyZWF0ZVBvcnRhbDpEcixmaW5kRE9NTm9kZTpmdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKDE9PT1lLm5vZGVUeXBlKXJldHVybiBlO3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxGaWJlcjtyZXR1cm4gdm9pZCAwPT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlbmRlcj9vKCIxODgiKTpvKCIyNjgiLE9iamVjdC5rZXlzKGUpKSksZT1rZSh0KSxlPW51bGw9PT1lP251bGw6ZS5zdGF0ZU5vZGV9LGh5ZHJhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMcihudWxsLGUsdCwhMCxuKX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTHIobnVsbCxlLHQsITEsbil9LHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybihudWxsPT1lfHx2b2lkIDA9PT1lLl9yZWFjdEludGVybmFsRmliZXIpJiZvKCIzOCIpLExyKGUsdCxuLCExLHIpfSx1bm1vdW50Q29tcG9uZW50QXROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBqcihlKXx8bygiNDAiKSwhIWUuX3JlYWN0Um9vdENvbnRhaW5lciYmKEVyKGZ1bmN0aW9uKCl7THIobnVsbCxudWxsLGUsITEsZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbH0pfSksITApfSx1bnN0YWJsZV9jcmVhdGVQb3J0YWw6ZnVuY3Rpb24oKXtyZXR1cm4gRHIuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9LHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmJyLHVuc3RhYmxlX2ludGVyYWN0aXZlVXBkYXRlczp5cixmbHVzaFN5bmM6ZnVuY3Rpb24oZSx0KXtXaSYmbygiMTg3Iik7dmFyIG49Wmk7Wmk9ITA7dHJ5e3JldHVybiBycihlLHQpfWZpbmFsbHl7Wmk9bixfcigxLG51bGwpfX0sdW5zdGFibGVfZmx1c2hDb250cm9sbGVkOmZ1bmN0aW9uKGUpe3ZhciB0PVppO1ppPSEwO3RyeXtycihlKX1maW5hbGx5eyhaaT10KXx8V2l8fF9yKDEsbnVsbCl9fSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7RXZlbnRzOltFLHksdiwkci5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUsenIsUixmdW5jdGlvbihlKXtfKGUsUyl9LEcseixVZSxnXX0sdW5zdGFibGVfY3JlYXRlUm9vdDpmdW5jdGlvbihlLHQpe3JldHVybiBqcihlKXx8bygiMjc4IiksbmV3IFJyKGUsITAsbnVsbCE9dCYmITA9PT10Lmh5ZHJhdGUpfX07IWZ1bmN0aW9uKGUpe3ZhciB0PWUuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7U3QoTXIoe30sZSx7ZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9a2UoZSksbnVsbD09PWU/bnVsbDplLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ/dChlKTpudWxsfX0pKX0oe2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmIsYnVuZGxlVHlwZTowLHZlcnNpb246IjE2LjYuMCIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0pO3ZhciBkYT17ZGVmYXVsdDpjYX0sX2E9ZGEmJmNhfHxkYTtlLmV4cG9ydHM9X2EuZGVmYXVsdHx8X2F9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fJiYiZnVuY3Rpb24iPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0Uocil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19cigpLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1zZXJ2ZXIuYnJvd3Nlci5wcm9kdWN0aW9uLm1pbi5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZHJhZ2dhYmxlL2Rpc3QvcmVhY3QtZHJhZ2dhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQscil7ZS5leHBvcnRzPXIobigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9KDAsZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiB0PXtleHBvcnRzOnt9fSxlKHQsdC5leHBvcnRzKSx0LmV4cG9ydHN9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbyhlLHQsbixyLG8scyxpLGEpe2lmKFYodCksIWUpe3ZhciBsO2lmKHZvaWQgMD09PXQpbD1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgdT1bbixyLG8scyxpLGFdLGM9MDtsPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gdVtjKytdfSkpLGwubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgbC5mcmFtZXNUb1BvcD0xLGx9fWZ1bmN0aW9uIHMoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KGUpfWZ1bmN0aW9uIGkoZSx0LG4scixvKXtmb3IodmFyIHMgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHMpKXt2YXIgaTt0cnl7ZWUoImZ1bmN0aW9uIj09dHlwZW9mIGVbc10sIiVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCVzYC4iLHJ8fCJSZWFjdCBjbGFzcyIsbixzLHR5cGVvZiBlW3NdKSxpPWVbc10odCxzLHIsbixudWxsLG5lKX1jYXRjaChlKXtpPWV9aWYodGUoIWl8fGkgaW5zdGFuY2VvZiBFcnJvciwiJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyIGNyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLiIscnx8IlJlYWN0IGNsYXNzIixuLHMsdHlwZW9mIGkpLGkgaW5zdGFuY2VvZiBFcnJvciYmIShpLm1lc3NhZ2UgaW4gcmUpKXtyZVtpLm1lc3NhZ2VdPSEwO3ZhciBhPW8/bygpOiIiO3RlKCExLCJGYWlsZWQgJXMgdHlwZTogJXMlcyIsbixpLm1lc3NhZ2UsbnVsbCE9YT9hOiIiKX19fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYodC5hcHBseSh0LFtlW25dLG4sZV0pKXJldHVybiBlW25dfWZ1bmN0aW9uIGwoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBjKGUpe3JldHVybiBwYXJzZUludChlLDEwKX1mdW5jdGlvbiBkKGUsdCxuKXtpZihlW3RdKXJldHVybiBuZXcgRXJyb3IoIkludmFsaWQgcHJvcCAiK3QrIiBwYXNzZWQgdG8gIituKyIgLSBkbyBub3Qgc2V0IHRoaXMsIHNldCBpdCBvbiB0aGUgY2hpbGQuIil9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiB0PyIiK3QrcChlKTplfWZ1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PSIiLG49ITAscj0wO3I8ZS5sZW5ndGg7cisrKW4/KHQrPWVbcl0udG9VcHBlckNhc2UoKSxuPSExKToiLSI9PT1lW3JdP249ITA6dCs9ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGdlfHwoZ2U9YShbIm1hdGNoZXMiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiXSxmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pKSwhIWwoZVtnZV0pJiZlW2dlXSh0KX1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgcj1lO2Rve2lmKGYocix0KSlyZXR1cm4hMDtpZihyPT09bilyZXR1cm4hMTtyPXIucGFyZW50Tm9kZX13aGlsZShyKTtyZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCxuKXtlJiYoZS5hdHRhY2hFdmVudD9lLmF0dGFjaEV2ZW50KCJvbiIrdCxuKTplLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6ZVsib24iK3RdPW4pfWZ1bmN0aW9uIGcoZSx0LG4pe2UmJihlLmRldGFjaEV2ZW50P2UuZGV0YWNoRXZlbnQoIm9uIit0LG4pOmUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCEwKTplWyJvbiIrdF09bnVsbCl9ZnVuY3Rpb24gYihlKXt2YXIgdD1lLmNsaWVudEhlaWdodCxuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiB0Kz1jKG4uYm9yZGVyVG9wV2lkdGgpLHQrPWMobi5ib3JkZXJCb3R0b21XaWR0aCl9ZnVuY3Rpb24gRShlKXt2YXIgdD1lLmNsaWVudFdpZHRoLG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQrPWMobi5ib3JkZXJMZWZ0V2lkdGgpLHQrPWMobi5ib3JkZXJSaWdodFdpZHRoKX1mdW5jdGlvbiB5KGUpe3ZhciB0PWUuY2xpZW50SGVpZ2h0LG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQtPWMobi5wYWRkaW5nVG9wKSx0LT1jKG4ucGFkZGluZ0JvdHRvbSl9ZnVuY3Rpb24gdihlKXt2YXIgdD1lLmNsaWVudFdpZHRoLG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQtPWMobi5wYWRkaW5nTGVmdCksdC09YyhuLnBhZGRpbmdSaWdodCl9ZnVuY3Rpb24gVChlLHQpe3ZhciBuPXQ9PT10Lm93bmVyRG9jdW1lbnQuYm9keSxyPW4/e2xlZnQ6MCx0b3A6MH06dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDplLmNsaWVudFgrdC5zY3JvbGxMZWZ0LXIubGVmdCx5OmUuY2xpZW50WSt0LnNjcm9sbFRvcC1yLnRvcH19ZnVuY3Rpb24gQShlKXt2YXIgdD1lLngsbj1lLnk7cmV0dXJuIF9lKHt9LF8oInRyYW5zZm9ybSIsdWUpLCJ0cmFuc2xhdGUoIit0KyJweCwiK24rInB4KSIpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuInRyYW5zbGF0ZSgiK2UueCsiLCIrZS55KyIpIn1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIGUudGFyZ2V0VG91Y2hlcyYmYShlLnRhcmdldFRvdWNoZXMsZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PT1lLmlkZW50aWZpZXJ9KXx8ZS5jaGFuZ2VkVG91Y2hlcyYmYShlLmNoYW5nZWRUb3VjaGVzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5pZGVudGlmaWVyfSl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZS50YXJnZXRUb3VjaGVzJiZlLnRhcmdldFRvdWNoZXNbMF0/ZS50YXJnZXRUb3VjaGVzWzBdLmlkZW50aWZpZXI6ZS5jaGFuZ2VkVG91Y2hlcyYmZS5jaGFuZ2VkVG91Y2hlc1swXT9lLmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXI6dm9pZCAwfWZ1bmN0aW9uIFIoZSl7aWYoZSl7dmFyIHQ9ZS5nZXRFbGVtZW50QnlJZCgicmVhY3QtZHJhZ2dhYmxlLXN0eWxlLWVsIik7dHx8KHQ9ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHQudHlwZT0idGV4dC9jc3MiLHQuaWQ9InJlYWN0LWRyYWdnYWJsZS1zdHlsZS1lbCIsdC5pbm5lckhUTUw9Ii5yZWFjdC1kcmFnZ2FibGUtdHJhbnNwYXJlbnQtc2VsZWN0aW9uICo6Oi1tb3otc2VsZWN0aW9uIHtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDt9XG4iLHQuaW5uZXJIVE1MKz0iLnJlYWN0LWRyYWdnYWJsZS10cmFuc3BhcmVudC1zZWxlY3Rpb24gKjo6c2VsZWN0aW9uIHtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDt9XG4iLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0KSksZS5ib2R5JiZMKGUuYm9keSwicmVhY3QtZHJhZ2dhYmxlLXRyYW5zcGFyZW50LXNlbGVjdGlvbiIpfX1mdW5jdGlvbiBqKGUpe3RyeXtlJiZlLmJvZHkmJkQoZS5ib2R5LCJyZWFjdC1kcmFnZ2FibGUtdHJhbnNwYXJlbnQtc2VsZWN0aW9uIiksZS5zZWxlY3Rpb24/ZS5zZWxlY3Rpb24uZW1wdHkoKTp3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB4KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiBwZSh7dG91Y2hBY3Rpb246Im5vbmUifSxlKX1mdW5jdGlvbiBMKGUsdCl7ZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QuYWRkKHQpOmUuY2xhc3NOYW1lLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrdCsiKD8hXFxTKSIpKXx8KGUuY2xhc3NOYW1lKz0iICIrdCl9ZnVuY3Rpb24gRChlLHQpe2UuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LnJlbW92ZSh0KTplLmNsYXNzTmFtZT1lLmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrdCsiKD8hXFxTKSIsImciKSwiIil9ZnVuY3Rpb24gdyhlLHQsbil7aWYoIWUucHJvcHMuYm91bmRzKXJldHVyblt0LG5dO3ZhciByPWUucHJvcHMuYm91bmRzO3I9InN0cmluZyI9PXR5cGVvZiByP3I6RihyKTt2YXIgbz1CKGUpO2lmKCJzdHJpbmciPT10eXBlb2Ygcil7dmFyIHM9by5vd25lckRvY3VtZW50LGk9cy5kZWZhdWx0VmlldyxhPXZvaWQgMDtpZighKChhPSJwYXJlbnQiPT09cj9vLnBhcmVudE5vZGU6cy5xdWVyeVNlbGVjdG9yKHIpKWluc3RhbmNlb2YgaS5IVE1MRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgc2VsZWN0b3IgIicrcisnIiBjb3VsZCBub3QgZmluZCBhbiBlbGVtZW50LicpO3ZhciBsPWkuZ2V0Q29tcHV0ZWRTdHlsZShvKSxkPWkuZ2V0Q29tcHV0ZWRTdHlsZShhKTtyPXtsZWZ0Oi1vLm9mZnNldExlZnQrYyhkLnBhZGRpbmdMZWZ0KStjKGwubWFyZ2luTGVmdCksdG9wOi1vLm9mZnNldFRvcCtjKGQucGFkZGluZ1RvcCkrYyhsLm1hcmdpblRvcCkscmlnaHQ6dihhKS1FKG8pLW8ub2Zmc2V0TGVmdCtjKGQucGFkZGluZ1JpZ2h0KS1jKGwubWFyZ2luUmlnaHQpLGJvdHRvbTp5KGEpLWIobyktby5vZmZzZXRUb3ArYyhkLnBhZGRpbmdCb3R0b20pLWMobC5tYXJnaW5Cb3R0b20pfX1yZXR1cm4gdShyLnJpZ2h0KSYmKHQ9TWF0aC5taW4odCxyLnJpZ2h0KSksdShyLmJvdHRvbSkmJihuPU1hdGgubWluKG4sci5ib3R0b20pKSx1KHIubGVmdCkmJih0PU1hdGgubWF4KHQsci5sZWZ0KSksdShyLnRvcCkmJihuPU1hdGgubWF4KG4sci50b3ApKSxbdCxuXX1mdW5jdGlvbiBNKGUsdCxuKXtyZXR1cm5bTWF0aC5yb3VuZCh0L2VbMF0pKmVbMF0sTWF0aC5yb3VuZChuL2VbMV0pKmVbMV1dfWZ1bmN0aW9uIGsoZSl7cmV0dXJuImJvdGgiPT09ZS5wcm9wcy5heGlzfHwieCI9PT1lLnByb3BzLmF4aXN9ZnVuY3Rpb24gSShlKXtyZXR1cm4iYm90aCI9PT1lLnByb3BzLmF4aXN8fCJ5Ij09PWUucHJvcHMuYXhpc31mdW5jdGlvbiBQKGUsdCxuKXt2YXIgcj0ibnVtYmVyIj09dHlwZW9mIHQ/TyhlLHQpOm51bGw7aWYoIm51bWJlciI9PXR5cGVvZiB0JiYhcilyZXR1cm4gbnVsbDt2YXIgbz1CKG4pLHM9bi5wcm9wcy5vZmZzZXRQYXJlbnR8fG8ub2Zmc2V0UGFyZW50fHxvLm93bmVyRG9jdW1lbnQuYm9keTtyZXR1cm4gVChyfHxlLHMpfWZ1bmN0aW9uIE4oZSx0LG4pe3ZhciByPWUuc3RhdGUsbz0hdShyLmxhc3RYKSxzPUIoZSk7cmV0dXJuIG8/e25vZGU6cyxkZWx0YVg6MCxkZWx0YVk6MCxsYXN0WDp0LGxhc3RZOm4seDp0LHk6bn06e25vZGU6cyxkZWx0YVg6dC1yLmxhc3RYLGRlbHRhWTpuLXIubGFzdFksbGFzdFg6ci5sYXN0WCxsYXN0WTpyLmxhc3RZLHg6dCx5Om59fWZ1bmN0aW9uIEgoZSx0KXt2YXIgbj1lLnByb3BzLnNjYWxlO3JldHVybntub2RlOnQubm9kZSx4OmUuc3RhdGUueCt0LmRlbHRhWC9uLHk6ZS5zdGF0ZS55K3QuZGVsdGFZL24sZGVsdGFYOnQuZGVsdGFYL24sZGVsdGFZOnQuZGVsdGFZL24sbGFzdFg6ZS5zdGF0ZS54LGxhc3RZOmUuc3RhdGUueX19ZnVuY3Rpb24gRihlKXtyZXR1cm57bGVmdDplLmxlZnQsdG9wOmUudG9wLHJpZ2h0OmUucmlnaHQsYm90dG9tOmUuYm90dG9tfX1mdW5jdGlvbiBCKHQpe3ZhciBuPWUuZmluZERPTU5vZGUodCk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCI8RHJhZ2dhYmxlQ29yZT46IFVubW91bnRlZCBkdXJpbmcgZXZlbnQhIik7cmV0dXJuIG59ZnVuY3Rpb24gVSgpe31lPWUmJmUuaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZSx0PXQmJnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT90LmRlZmF1bHQ6dDt2YXIgRz1mdW5jdGlvbigpe307Ry50aGF0UmV0dXJucz1yLEcudGhhdFJldHVybnNGYWxzZT1yKCExKSxHLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxHLnRoYXRSZXR1cm5zTnVsbD1yKG51bGwpLEcudGhhdFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEcudGhhdFJldHVybnNBcmd1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX07dmFyIHo9RyxWPWZ1bmN0aW9uKGUpe307Vj1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQiKX07dmFyIFc9byxZPXoscT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz0wLHM9Ildhcm5pbmc6ICIrZS5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIG5bbysrXX0pOyJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS5lcnJvcihzKTt0cnl7dGhyb3cgbmV3IEVycm9yKHMpfWNhdGNoKGUpe319O1k9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgbWVzc2FnZSBhcmd1bWVudCIpO2lmKDAhPT10LmluZGV4T2YoIkZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICIpJiYhZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjI/bi0yOjApLG89MjtvPG47bysrKXJbby0yXT1hcmd1bWVudHNbb107cS5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChyKSl9fTt2YXIgSz1ZLFg9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scywkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksUT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEo9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG89cyhlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7bj1PYmplY3QoYXJndW1lbnRzW2ldKTtmb3IodmFyIGEgaW4gbikkLmNhbGwobixhKSYmKG9bYV09blthXSk7aWYoWCl7cj1YKG4pO2Zvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKVEuY2FsbChuLHJbbF0pJiYob1tyW2xdXT1uW3JbbF1dKX19cmV0dXJuIG99LFo9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIixlZT1XLHRlPUssbmU9WixyZT17fSxvZT1pLHNlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lJiYoeSYmZVt5XXx8ZVt2XSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIG8oZSl7dGhpcy5tZXNzYWdlPWUsdGhpcy5zdGFjaz0iIn1mdW5jdGlvbiBzKGUpe2Z1bmN0aW9uIG4obixpLGEsbCx1LGMsZCl7aWYobD1sfHxULGM9Y3x8YSxkIT09WilpZih0KVcoITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlKXt2YXIgXz1sKyI6IithOyFyW19dJiZzPDMmJihLKCExLCJZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFlvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzIGZvciBkZXRhaWxzLiIsYyxsKSxyW19dPSEwLHMrKyl9cmV0dXJuIG51bGw9PWlbYV0/bj9uZXcgbyhudWxsPT09aVthXT8iVGhlICIrdSsiIGAiK2MrImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK2wrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLiI6IlRoZSAiK3UrIiBgIitjKyJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitsKyJgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLiIpOm51bGw6ZShpLGEsbCx1LGMpfXZhciByPXt9LHM9MCxpPW4uYmluZChudWxsLCExKTtyZXR1cm4gaS5pc1JlcXVpcmVkPW4uYmluZChudWxsLCEwKSxpfWZ1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gdCh0LG4scixzLGksYSl7dmFyIGw9dFtuXTtpZihoKGwpIT09ZSlyZXR1cm4gbmV3IG8oIkludmFsaWQgIitzKyIgYCIraSsiYCBvZiB0eXBlIGAiK2cobCkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYCIrZSsiYC4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gcyh0KX1mdW5jdGlvbiBhKGUpe2Z1bmN0aW9uIHQodCxuLHIscyxpKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3IG8oIlByb3BlcnR5IGAiK2krImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuIik7dmFyIGE9dFtuXTtpZighQXJyYXkuaXNBcnJheShhKSl7cmV0dXJuIG5ldyBvKCJJbnZhbGlkICIrcysiIGAiK2krImAgb2YgdHlwZSBgIitoKGEpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIGFycmF5LiIpfWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1lKGEsbCxyLHMsaSsiWyIrbCsiXSIsWik7aWYodSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiB1fXJldHVybiBudWxsfXJldHVybiBzKHQpfWZ1bmN0aW9uIGwoZSl7ZnVuY3Rpb24gdCh0LG4scixzLGkpe2lmKCEodFtuXWluc3RhbmNlb2YgZSkpe3ZhciBhPWUubmFtZXx8VDtyZXR1cm4gbmV3IG8oIkludmFsaWQgIitzKyIgYCIraSsiYCBvZiB0eXBlIGAiK0UodFtuXSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYCIrYSsiYC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gcyh0KX1mdW5jdGlvbiB1KGUpe2Z1bmN0aW9uIHQodCxuLHMsaSxhKXtmb3IodmFyIGw9dFtuXSx1PTA7dTxlLmxlbmd0aDt1KyspaWYocihsLGVbdV0pKXJldHVybiBudWxsO3JldHVybiBuZXcgbygiSW52YWxpZCAiK2krIiBgIithKyJgIG9mIHZhbHVlIGAiK2wrImAgc3VwcGxpZWQgdG8gYCIrcysiYCwgZXhwZWN0ZWQgb25lIG9mICIrSlNPTi5zdHJpbmdpZnkoZSkrIi4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9zKHQpOihLKCExLCJJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4iKSx6LnRoYXRSZXR1cm5zTnVsbCl9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiB0KHQsbixyLHMsaSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5ldyBvKCJQcm9wZXJ0eSBgIitpKyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgYT10W25dLGw9aChhKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyBvKCJJbnZhbGlkICIrcysiIGAiK2krImAgb2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVjdC4iKTtmb3IodmFyIHUgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHUpKXt2YXIgYz1lKGEsdSxyLHMsaSsiLiIrdSxaKTtpZihjIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGN9cmV0dXJuIG51bGx9cmV0dXJuIHModCl9ZnVuY3Rpb24gZChlKXtmdW5jdGlvbiB0KHQsbixyLHMsaSl7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe2lmKG51bGw9PSgwLGVbYV0pKHQsbixyLHMsaSxaKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IG8oIkludmFsaWQgIitzKyIgYCIraSsiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfWlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBLKCExLCJJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuIiksei50aGF0UmV0dXJuc051bGw7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHIpcmV0dXJuIEsoITEsIkludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCByZWNlaXZlZCAlcyBhdCBpbmRleCAlcy4iLGIociksbiksei50aGF0UmV0dXJuc051bGx9cmV0dXJuIHModCl9ZnVuY3Rpb24gXyhlKXtmdW5jdGlvbiB0KHQsbixyLHMsaSl7dmFyIGE9dFtuXSxsPWgoYSk7aWYoIm9iamVjdCIhPT1sKXJldHVybiBuZXcgbygiSW52YWxpZCAiK3MrIiBgIitpKyJgIG9mIHR5cGUgYCIrbCsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIHUgaW4gZSl7dmFyIGM9ZVt1XTtpZihjKXt2YXIgZD1jKGEsdSxyLHMsaSsiLiIrdSxaKTtpZihkKXJldHVybiBkfX1yZXR1cm4gbnVsbH1yZXR1cm4gcyh0KX1mdW5jdGlvbiBwKGUpe2Z1bmN0aW9uIHQodCxuLHIscyxpKXt2YXIgYT10W25dLGw9aChhKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyBvKCJJbnZhbGlkICIrcysiIGAiK2krImAgb2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGBvYmplY3RgLiIpO3ZhciB1PUooe30sdFtuXSxlKTtmb3IodmFyIGMgaW4gdSl7dmFyIGQ9ZVtjXTtpZighZClyZXR1cm4gbmV3IG8oIkludmFsaWQgIitzKyIgYCIraSsiYCBrZXkgYCIrYysiYCBzdXBwbGllZCB0byBgIityKyJgLlxuQmFkIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0W25dLG51bGwsIiAgIikrIlxuVmFsaWQga2V5czogIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhlKSxudWxsLCIgICIpKTt2YXIgXz1kKGEsYyxyLHMsaSsiLiIrYyxaKTtpZihfKXJldHVybiBffXJldHVybiBudWxsfXJldHVybiBzKHQpfWZ1bmN0aW9uIGYodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2UidW5kZWZpbmVkIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2JqZWN0IjppZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LmV2ZXJ5KGYpO2lmKG51bGw9PT10fHxlKHQpKXJldHVybiEwO3ZhciByPW4odCk7aWYoIXIpcmV0dXJuITE7dmFyIG8scz1yLmNhbGwodCk7aWYociE9PXQuZW50cmllcyl7Zm9yKDshKG89cy5uZXh0KCkpLmRvbmU7KWlmKCFmKG8udmFsdWUpKXJldHVybiExfWVsc2UgZm9yKDshKG89cy5uZXh0KCkpLmRvbmU7KXt2YXIgaT1vLnZhbHVlO2lmKGkmJiFmKGlbMV0pKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4ic3ltYm9sIj09PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWciXXx8ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rpb24gaChlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5zdGFuY2VvZiBSZWdFeHA/Im9iamVjdCI6bSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gZyhlKXtpZih2b2lkIDA9PT1lfHxudWxsPT09ZSlyZXR1cm4iIitlO3ZhciB0PWgoZSk7aWYoIm9iamVjdCI9PT10KXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iZGF0ZSI7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4icmVnZXhwIn1yZXR1cm4gdH1mdW5jdGlvbiBiKGUpe3ZhciB0PWcoZSk7c3dpdGNoKHQpe2Nhc2UiYXJyYXkiOmNhc2Uib2JqZWN0IjpyZXR1cm4iYW4gIit0O2Nhc2UiYm9vbGVhbiI6Y2FzZSJkYXRlIjpjYXNlInJlZ2V4cCI6cmV0dXJuImEgIit0O2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIEUoZSl7cmV0dXJuIGUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZT9lLmNvbnN0cnVjdG9yLm5hbWU6VH12YXIgeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isdj0iQEBpdGVyYXRvciIsVD0iPDxhbm9ueW1vdXM+PiIsQT17YXJyYXk6aSgiYXJyYXkiKSxib29sOmkoImJvb2xlYW4iKSxmdW5jOmkoImZ1bmN0aW9uIiksbnVtYmVyOmkoIm51bWJlciIpLG9iamVjdDppKCJvYmplY3QiKSxzdHJpbmc6aSgic3RyaW5nIiksc3ltYm9sOmkoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBzKHoudGhhdFJldHVybnNOdWxsKX0oKSxhcnJheU9mOmEsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuLHIscyxpKXt2YXIgYT10W25dO2lmKCFlKGEpKXtyZXR1cm4gbmV3IG8oIkludmFsaWQgIitzKyIgYCIraSsiYCBvZiB0eXBlIGAiK2goYSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBzKHQpfSgpLGluc3RhbmNlT2Y6bCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLHMpe3JldHVybiBmKGVbdF0pP251bGw6bmV3IG8oIkludmFsaWQgIityKyIgYCIrcysiYCBzdXBwbGllZCB0byBgIituKyJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gcyhlKX0oKSxvYmplY3RPZjpjLG9uZU9mOnUsb25lT2ZUeXBlOmQsc2hhcGU6XyxleGFjdDpwfTtyZXR1cm4gby5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLEEuY2hlY2tQcm9wVHlwZXM9b2UsQS5Qcm9wVHlwZXM9QSxBfSxpZT1uKGZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsbj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09dH07ZS5leHBvcnRzPXNlKG4sITApfSksYWU9bihmdW5jdGlvbihlKXsvKiEKCSAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uCgkgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCgkgIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKCSovCiFmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciBvPWFyZ3VtZW50c1tyXTtpZihvKXt2YXIgcz10eXBlb2YgbztpZigic3RyaW5nIj09PXN8fCJudW1iZXIiPT09cyllLnB1c2gobyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG8pKWUucHVzaCh0LmFwcGx5KG51bGwsbykpO2Vsc2UgaWYoIm9iamVjdCI9PT1zKWZvcih2YXIgaSBpbiBvKW4uY2FsbChvLGkpJiZvW2ldJiZlLnB1c2goaSl9fXJldHVybiBlLmpvaW4oIiAiKX12YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6d2luZG93LmNsYXNzTmFtZXM9dH0oKX0pLGxlPVsiTW96IiwiV2Via2l0IiwiTyIsIm1zIl0sdWU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06InRyYW5zZm9ybSI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fHZvaWQgMD09PXdpbmRvdy5kb2N1bWVudClyZXR1cm4iIjt2YXIgdD13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2lmKGUgaW4gdClyZXR1cm4iIjtmb3IodmFyIG49MDtuPGxlLmxlbmd0aDtuKyspaWYoXyhlLGxlW25dKWluIHQpcmV0dXJuIGxlW25dO3JldHVybiIifSgpLGNlPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9LGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLF9lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX0scGU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZmU9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSxtZT1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fSxoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj1bXSxyPSEwLG89ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgaSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2goaS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe289ITAscz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgc319cmV0dXJuIG59cmV0dXJuIGZ1bmN0aW9uKHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxnZT0iIixiZT17dG91Y2g6e3N0YXJ0OiJ0b3VjaHN0YXJ0Iixtb3ZlOiJ0b3VjaG1vdmUiLHN0b3A6InRvdWNoZW5kIn0sbW91c2U6e3N0YXJ0OiJtb3VzZWRvd24iLG1vdmU6Im1vdXNlbW92ZSIsc3RvcDoibW91c2V1cCJ9fSxFZT1iZS5tb3VzZSx5ZT1mdW5jdGlvbihuKXtmdW5jdGlvbiByKCl7dmFyIHQsbixvLHM7Y2UodGhpcyxyKTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPUFycmF5KGkpLGw9MDtsPGk7bCsrKWFbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPW89bWUodGhpcywodD1yLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsLmFwcGx5KHQsW3RoaXNdLmNvbmNhdChhKSkpLG8uc3RhdGU9e2RyYWdnaW5nOiExLGxhc3RYOk5hTixsYXN0WTpOYU4sdG91Y2hJZGVudGlmaWVyOm51bGx9LG8uaGFuZGxlRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe2lmKG8ucHJvcHMub25Nb3VzZURvd24odCksIW8ucHJvcHMuYWxsb3dBbnlDbGljayYmIm51bWJlciI9PXR5cGVvZiB0LmJ1dHRvbiYmMCE9PXQuYnV0dG9uKXJldHVybiExO3ZhciBuPWUuZmluZERPTU5vZGUobyk7aWYoIW58fCFuLm93bmVyRG9jdW1lbnR8fCFuLm93bmVyRG9jdW1lbnQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIjxEcmFnZ2FibGVDb3JlPiBub3QgbW91bnRlZCBvbiBEcmFnU3RhcnQhIik7dmFyIHI9bi5vd25lckRvY3VtZW50O2lmKCEoby5wcm9wcy5kaXNhYmxlZHx8ISh0LnRhcmdldCBpbnN0YW5jZW9mIHIuZGVmYXVsdFZpZXcuTm9kZSl8fG8ucHJvcHMuaGFuZGxlJiYhbSh0LnRhcmdldCxvLnByb3BzLmhhbmRsZSxuKXx8by5wcm9wcy5jYW5jZWwmJm0odC50YXJnZXQsby5wcm9wcy5jYW5jZWwsbikpKXt2YXIgcz1TKHQpO28uc2V0U3RhdGUoe3RvdWNoSWRlbnRpZmllcjpzfSk7dmFyIGk9UCh0LHMsbyk7aWYobnVsbCE9aSl7dmFyIGE9aS54LGw9aS55LHU9TihvLGEsbCk7VSgiY2FsbGluZyIsby5wcm9wcy5vblN0YXJ0KTshMSE9PW8ucHJvcHMub25TdGFydCh0LHUpJiYoby5wcm9wcy5lbmFibGVVc2VyU2VsZWN0SGFjayYmUihyKSxvLnNldFN0YXRlKHtkcmFnZ2luZzohMCxsYXN0WDphLGxhc3RZOmx9KSxoKHIsRWUubW92ZSxvLmhhbmRsZURyYWcpLGgocixFZS5zdG9wLG8uaGFuZGxlRHJhZ1N0b3ApKX19fSxvLmhhbmRsZURyYWc9ZnVuY3Rpb24oZSl7InRvdWNobW92ZSI9PT1lLnR5cGUmJmUucHJldmVudERlZmF1bHQoKTt2YXIgdD1QKGUsby5zdGF0ZS50b3VjaElkZW50aWZpZXIsbyk7aWYobnVsbCE9dCl7dmFyIG49dC54LHI9dC55O2lmKEFycmF5LmlzQXJyYXkoby5wcm9wcy5ncmlkKSl7dmFyIHM9bi1vLnN0YXRlLmxhc3RYLGk9ci1vLnN0YXRlLmxhc3RZLGE9TShvLnByb3BzLmdyaWQscyxpKSxsPWhlKGEsMik7aWYocz1sWzBdLGk9bFsxXSwhcyYmIWkpcmV0dXJuO249by5zdGF0ZS5sYXN0WCtzLHI9by5zdGF0ZS5sYXN0WStpfXZhciB1PU4obyxuLHIpO2lmKCExIT09by5wcm9wcy5vbkRyYWcoZSx1KSlvLnNldFN0YXRlKHtsYXN0WDpuLGxhc3RZOnJ9KTtlbHNlIHRyeXtvLmhhbmRsZURyYWdTdG9wKG5ldyBNb3VzZUV2ZW50KCJtb3VzZXVwIikpfWNhdGNoKGUpe3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO2MuaW5pdE1vdXNlRXZlbnQoIm1vdXNldXAiLCEwLCEwLHdpbmRvdywwLDAsMCwwLDAsITEsITEsITEsITEsMCxudWxsKSxvLmhhbmRsZURyYWdTdG9wKGMpfX19LG8uaGFuZGxlRHJhZ1N0b3A9ZnVuY3Rpb24odCl7aWYoby5zdGF0ZS5kcmFnZ2luZyl7dmFyIG49UCh0LG8uc3RhdGUudG91Y2hJZGVudGlmaWVyLG8pO2lmKG51bGwhPW4pe3ZhciByPW4ueCxzPW4ueSxpPU4obyxyLHMpLGE9ZS5maW5kRE9NTm9kZShvKTthJiZvLnByb3BzLmVuYWJsZVVzZXJTZWxlY3RIYWNrJiZqKGEub3duZXJEb2N1bWVudCksby5zZXRTdGF0ZSh7ZHJhZ2dpbmc6ITEsbGFzdFg6TmFOLGxhc3RZOk5hTn0pLG8ucHJvcHMub25TdG9wKHQsaSksYSYmKGcoYS5vd25lckRvY3VtZW50LEVlLm1vdmUsby5oYW5kbGVEcmFnKSxnKGEub3duZXJEb2N1bWVudCxFZS5zdG9wLG8uaGFuZGxlRHJhZ1N0b3ApKX19fSxvLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe3JldHVybiBFZT1iZS5tb3VzZSxvLmhhbmRsZURyYWdTdGFydChlKX0sby5vbk1vdXNlVXA9ZnVuY3Rpb24oZSl7cmV0dXJuIEVlPWJlLm1vdXNlLG8uaGFuZGxlRHJhZ1N0b3AoZSl9LG8ub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBFZT1iZS50b3VjaCxvLmhhbmRsZURyYWdTdGFydChlKX0sby5vblRvdWNoRW5kPWZ1bmN0aW9uKGUpe3JldHVybiBFZT1iZS50b3VjaCxvLmhhbmRsZURyYWdTdG9wKGUpfSxzPW4sbWUobyxzKX1yZXR1cm4gZmUocixuKSxkZShyLFt7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1lLmZpbmRET01Ob2RlKHRoaXMpO2lmKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudDtnKG4sYmUubW91c2UubW92ZSx0aGlzLmhhbmRsZURyYWcpLGcobixiZS50b3VjaC5tb3ZlLHRoaXMuaGFuZGxlRHJhZyksZyhuLGJlLm1vdXNlLnN0b3AsdGhpcy5oYW5kbGVEcmFnU3RvcCksZyhuLGJlLnRvdWNoLnN0b3AsdGhpcy5oYW5kbGVEcmFnU3RvcCksdGhpcy5wcm9wcy5lbmFibGVVc2VyU2VsZWN0SGFjayYmaihuKX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHQuY2xvbmVFbGVtZW50KHQuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKSx7c3R5bGU6eCh0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzLnN0eWxlKSxvbk1vdXNlRG93bjp0aGlzLm9uTW91c2VEb3duLG9uVG91Y2hTdGFydDp0aGlzLm9uVG91Y2hTdGFydCxvbk1vdXNlVXA6dGhpcy5vbk1vdXNlVXAsb25Ub3VjaEVuZDp0aGlzLm9uVG91Y2hFbmR9KX19XSkscn0odC5Db21wb25lbnQpO3llLmRpc3BsYXlOYW1lPSJEcmFnZ2FibGVDb3JlIix5ZS5wcm9wVHlwZXM9e2FsbG93QW55Q2xpY2s6aWUuYm9vbCxkaXNhYmxlZDppZS5ib29sLGVuYWJsZVVzZXJTZWxlY3RIYWNrOmllLmJvb2wsb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKGUsdCl7aWYoZVt0XSYmMSE9PWVbdF0ubm9kZVR5cGUpdGhyb3cgbmV3IEVycm9yKCJEcmFnZ2FibGUncyBvZmZzZXRQYXJlbnQgbXVzdCBiZSBhIERPTSBOb2RlLiIpfSxncmlkOmllLmFycmF5T2YoaWUubnVtYmVyKSxzY2FsZTppZS5udW1iZXIsaGFuZGxlOmllLnN0cmluZyxjYW5jZWw6aWUuc3RyaW5nLG9uU3RhcnQ6aWUuZnVuYyxvbkRyYWc6aWUuZnVuYyxvblN0b3A6aWUuZnVuYyxvbk1vdXNlRG93bjppZS5mdW5jLGNsYXNzTmFtZTpkLHN0eWxlOmQsdHJhbnNmb3JtOmR9LHllLmRlZmF1bHRQcm9wcz17YWxsb3dBbnlDbGljazohMSxjYW5jZWw6bnVsbCxkaXNhYmxlZDohMSxlbmFibGVVc2VyU2VsZWN0SGFjazohMCxvZmZzZXRQYXJlbnQ6bnVsbCxoYW5kbGU6bnVsbCxncmlkOm51bGwsdHJhbnNmb3JtOm51bGwsb25TdGFydDpmdW5jdGlvbigpe30sb25EcmFnOmZ1bmN0aW9uKCl7fSxvblN0b3A6ZnVuY3Rpb24oKXt9LG9uTW91c2VEb3duOmZ1bmN0aW9uKCl7fX07dmFyIHZlPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSl7Y2UodGhpcyxyKTt2YXIgdD1tZSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMsZSkpO3JldHVybiB0Lm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKGUsbil7aWYoITE9PT10LnByb3BzLm9uU3RhcnQoZSxIKHQsbikpKXJldHVybiExO3Quc2V0U3RhdGUoe2RyYWdnaW5nOiEwLGRyYWdnZWQ6ITB9KX0sdC5vbkRyYWc9ZnVuY3Rpb24oZSxuKXtpZighdC5zdGF0ZS5kcmFnZ2luZylyZXR1cm4hMTt2YXIgcj1IKHQsbiksbz17eDpyLngseTpyLnl9O2lmKHQucHJvcHMuYm91bmRzKXt2YXIgcz1vLngsaT1vLnk7by54Kz10LnN0YXRlLnNsYWNrWCxvLnkrPXQuc3RhdGUuc2xhY2tZO3ZhciBhPXcodCxvLngsby55KSxsPWhlKGEsMiksdT1sWzBdLGM9bFsxXTtvLng9dSxvLnk9YyxvLnNsYWNrWD10LnN0YXRlLnNsYWNrWCsocy1vLngpLG8uc2xhY2tZPXQuc3RhdGUuc2xhY2tZKyhpLW8ueSksci54PW8ueCxyLnk9by55LHIuZGVsdGFYPW8ueC10LnN0YXRlLngsci5kZWx0YVk9by55LXQuc3RhdGUueX1pZighMT09PXQucHJvcHMub25EcmFnKGUscikpcmV0dXJuITE7dC5zZXRTdGF0ZShvKX0sdC5vbkRyYWdTdG9wPWZ1bmN0aW9uKGUsbil7aWYoIXQuc3RhdGUuZHJhZ2dpbmcpcmV0dXJuITE7aWYoITE9PT10LnByb3BzLm9uU3RvcChlLEgodCxuKSkpcmV0dXJuITE7dmFyIHI9e2RyYWdnaW5nOiExLHNsYWNrWDowLHNsYWNrWTowfTtpZihCb29sZWFuKHQucHJvcHMucG9zaXRpb24pKXt2YXIgbz10LnByb3BzLnBvc2l0aW9uLHM9by54LGk9by55O3IueD1zLHIueT1pfXQuc2V0U3RhdGUocil9LHQuc3RhdGU9e2RyYWdnaW5nOiExLGRyYWdnZWQ6ITEseDplLnBvc2l0aW9uP2UucG9zaXRpb24ueDplLmRlZmF1bHRQb3NpdGlvbi54LHk6ZS5wb3NpdGlvbj9lLnBvc2l0aW9uLnk6ZS5kZWZhdWx0UG9zaXRpb24ueSxzbGFja1g6MCxzbGFja1k6MCxpc0VsZW1lbnRTVkc6ITF9LHR9cmV0dXJuIGZlKHIsbiksZGUocixbe2tleToiY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpeyF0aGlzLnByb3BzLnBvc2l0aW9ufHx0aGlzLnByb3BzLm9uRHJhZ3x8dGhpcy5wcm9wcy5vblN0b3B8fGNvbnNvbGUud2FybigiQSBgcG9zaXRpb25gIHdhcyBhcHBsaWVkIHRvIHRoaXMgPERyYWdnYWJsZT4sIHdpdGhvdXQgZHJhZyBoYW5kbGVycy4gVGhpcyB3aWxsIG1ha2UgdGhpcyBjb21wb25lbnQgZWZmZWN0aXZlbHkgdW5kcmFnZ2FibGUuIFBsZWFzZSBhdHRhY2ggYG9uRHJhZ2Agb3IgYG9uU3RvcGAgaGFuZGxlcnMgc28geW91IGNhbiBhZGp1c3QgdGhlIGBwb3NpdGlvbmAgb2YgdGhpcyBlbGVtZW50LiIpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dm9pZCAwIT09d2luZG93LlNWR0VsZW1lbnQmJmUuZmluZERPTU5vZGUodGhpcylpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50JiZ0aGlzLnNldFN0YXRlKHtpc0VsZW1lbnRTVkc6ITB9KX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyFlLnBvc2l0aW9ufHx0aGlzLnByb3BzLnBvc2l0aW9uJiZlLnBvc2l0aW9uLng9PT10aGlzLnByb3BzLnBvc2l0aW9uLngmJmUucG9zaXRpb24ueT09PXRoaXMucHJvcHMucG9zaXRpb24ueXx8dGhpcy5zZXRTdGF0ZSh7eDplLnBvc2l0aW9uLngseTplLnBvc2l0aW9uLnl9KX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe2RyYWdnaW5nOiExfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsbj17fSxyPW51bGwsbz1Cb29sZWFuKHRoaXMucHJvcHMucG9zaXRpb24pLHM9IW98fHRoaXMuc3RhdGUuZHJhZ2dpbmcsaT10aGlzLnByb3BzLnBvc2l0aW9ufHx0aGlzLnByb3BzLmRlZmF1bHRQb3NpdGlvbixhPXt4OmsodGhpcykmJnM/dGhpcy5zdGF0ZS54OmkueCx5OkkodGhpcykmJnM/dGhpcy5zdGF0ZS55OmkueX07dGhpcy5zdGF0ZS5pc0VsZW1lbnRTVkc/cj1DKGEpOm49QShhKTt2YXIgbD10aGlzLnByb3BzLHU9bC5kZWZhdWx0Q2xhc3NOYW1lLGM9bC5kZWZhdWx0Q2xhc3NOYW1lRHJhZ2dpbmcsZD1sLmRlZmF1bHRDbGFzc05hbWVEcmFnZ2VkLF89dC5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pLHA9YWUoXy5wcm9wcy5jbGFzc05hbWV8fCIiLHUsKGU9e30sX2UoZSxjLHRoaXMuc3RhdGUuZHJhZ2dpbmcpLF9lKGUsZCx0aGlzLnN0YXRlLmRyYWdnZWQpLGUpKTtyZXR1cm4gdC5jcmVhdGVFbGVtZW50KHllLHBlKHt9LHRoaXMucHJvcHMse29uU3RhcnQ6dGhpcy5vbkRyYWdTdGFydCxvbkRyYWc6dGhpcy5vbkRyYWcsb25TdG9wOnRoaXMub25EcmFnU3RvcH0pLHQuY2xvbmVFbGVtZW50KF8se2NsYXNzTmFtZTpwLHN0eWxlOnBlKHt9LF8ucHJvcHMuc3R5bGUsbiksdHJhbnNmb3JtOnJ9KSl9fV0pLHJ9KHQuQ29tcG9uZW50KTtyZXR1cm4gdmUuZGlzcGxheU5hbWU9IkRyYWdnYWJsZSIsdmUucHJvcFR5cGVzPXBlKHt9LHllLnByb3BUeXBlcyx7YXhpczppZS5vbmVPZihbImJvdGgiLCJ4IiwieSIsIm5vbmUiXSksYm91bmRzOmllLm9uZU9mVHlwZShbaWUuc2hhcGUoe2xlZnQ6aWUubnVtYmVyLHJpZ2h0OmllLm51bWJlcix0b3A6aWUubnVtYmVyLGJvdHRvbTppZS5udW1iZXJ9KSxpZS5zdHJpbmcsaWUub25lT2YoWyExXSldKSxkZWZhdWx0Q2xhc3NOYW1lOmllLnN0cmluZyxkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dpbmc6aWUuc3RyaW5nLGRlZmF1bHRDbGFzc05hbWVEcmFnZ2VkOmllLnN0cmluZyxkZWZhdWx0UG9zaXRpb246aWUuc2hhcGUoe3g6aWUubnVtYmVyLHk6aWUubnVtYmVyfSkscG9zaXRpb246aWUuc2hhcGUoe3g6aWUubnVtYmVyLHk6aWUubnVtYmVyfSksY2xhc3NOYW1lOmQsc3R5bGU6ZCx0cmFuc2Zvcm06ZH0pLHZlLmRlZmF1bHRQcm9wcz1wZSh7fSx5ZS5kZWZhdWx0UHJvcHMse2F4aXM6ImJvdGgiLGJvdW5kczohMSxkZWZhdWx0Q2xhc3NOYW1lOiJyZWFjdC1kcmFnZ2FibGUiLGRlZmF1bHRDbGFzc05hbWVEcmFnZ2luZzoicmVhY3QtZHJhZ2dhYmxlLWRyYWdnaW5nIixkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dlZDoicmVhY3QtZHJhZ2dhYmxlLWRyYWdnZWQiLGRlZmF1bHRQb3NpdGlvbjp7eDowLHk6MH0scG9zaXRpb246bnVsbCxzY2FsZToxfSksdmUuZGVmYXVsdD12ZSx2ZS5EcmFnZ2FibGVDb3JlPXllLHZlfSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kcm9wem9uZS9kaXN0L2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG49QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHU9bi5uKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGQ9bi5uKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZHJvcHpvbmUvZGlzdC9lcy91dGlscy9pbmRleC5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZHJvcHpvbmUvZGlzdC9lcy91dGlscy9zdHlsZXMuanMiKSxmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7cyh0aGlzLHQpO3ZhciByPWkodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiByLnJlbmRlckNoaWxkcmVuPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2UoZih7fSxyLnN0YXRlLHtpc0RyYWdBY3RpdmU6dCxpc0RyYWdBY2NlcHQ6bixpc0RyYWdSZWplY3Q6b30pKTplfSxyLmNvbXBvc2VIYW5kbGVycz1yLmNvbXBvc2VIYW5kbGVycy5iaW5kKHIpLHIub25DbGljaz1yLm9uQ2xpY2suYmluZChyKSxyLm9uRG9jdW1lbnREcm9wPXIub25Eb2N1bWVudERyb3AuYmluZChyKSxyLm9uRHJhZ0VudGVyPXIub25EcmFnRW50ZXIuYmluZChyKSxyLm9uRHJhZ0xlYXZlPXIub25EcmFnTGVhdmUuYmluZChyKSxyLm9uRHJhZ092ZXI9ci5vbkRyYWdPdmVyLmJpbmQociksci5vbkRyYWdTdGFydD1yLm9uRHJhZ1N0YXJ0LmJpbmQociksci5vbkRyb3A9ci5vbkRyb3AuYmluZChyKSxyLm9uRmlsZURpYWxvZ0NhbmNlbD1yLm9uRmlsZURpYWxvZ0NhbmNlbC5iaW5kKHIpLHIub25JbnB1dEVsZW1lbnRDbGljaz1yLm9uSW5wdXRFbGVtZW50Q2xpY2suYmluZChyKSxyLnNldFJlZj1yLnNldFJlZi5iaW5kKHIpLHIuc2V0UmVmcz1yLnNldFJlZnMuYmluZChyKSxyLmlzRmlsZURpYWxvZ0FjdGl2ZT0hMSxyLnN0YXRlPXtkcmFnZ2VkRmlsZXM6W10sYWNjZXB0ZWRGaWxlczpbXSxyZWplY3RlZEZpbGVzOltdfSxyfXJldHVybiBhKHQsZSksbSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnByZXZlbnREcm9wT25Eb2N1bWVudDt0aGlzLmRyYWdUYXJnZXRzPVtdLGUmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsXy5mLCExKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcm9wIix0aGlzLm9uRG9jdW1lbnREcm9wLCExKSksdGhpcy5maWxlSW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCExKSxkb2N1bWVudC5ib2R5Lm9uZm9jdXM9dGhpcy5vbkZpbGVEaWFsb2dDYW5jZWx9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnByZXZlbnREcm9wT25Eb2N1bWVudCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixfLmYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyb3AiLHRoaXMub25Eb2N1bWVudERyb3ApKSxudWxsIT10aGlzLmZpbGVJbnB1dEVsJiZ0aGlzLmZpbGVJbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssITEpLG51bGwhPWRvY3VtZW50JiYoZG9jdW1lbnQuYm9keS5vbmZvY3VzPW51bGwpfX0se2tleToiY29tcG9zZUhhbmRsZXJzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wcy5kaXNhYmxlZD9udWxsOmV9fSx7a2V5OiJvbkRvY3VtZW50RHJvcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5ub2RlJiZ0aGlzLm5vZGUuY29udGFpbnMoZS50YXJnZXQpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZHJhZ1RhcmdldHM9W10pfX0se2tleToib25EcmFnU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMub25EcmFnU3RhcnQmJnRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLGUpfX0se2tleToib25EcmFnRW50ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSwtMT09PXRoaXMuZHJhZ1RhcmdldHMuaW5kZXhPZihlLnRhcmdldCkmJnRoaXMuZHJhZ1RhcmdldHMucHVzaChlLnRhcmdldCksdGhpcy5zZXRTdGF0ZSh7aXNEcmFnQWN0aXZlOiEwLGRyYWdnZWRGaWxlczpPYmplY3QoXy5kKShlKX0pLHRoaXMucHJvcHMub25EcmFnRW50ZXImJnRoaXMucHJvcHMub25EcmFnRW50ZXIuY2FsbCh0aGlzLGUpfX0se2tleToib25EcmFnT3ZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7dHJ5e2UuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9dGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmU/Im5vbmUiOiJjb3B5In1jYXRjaChlKXt9cmV0dXJuIHRoaXMucHJvcHMub25EcmFnT3ZlciYmdGhpcy5wcm9wcy5vbkRyYWdPdmVyLmNhbGwodGhpcyxlKSwhMX19LHtrZXk6Im9uRHJhZ0xlYXZlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UucHJldmVudERlZmF1bHQoKSx0aGlzLmRyYWdUYXJnZXRzPXRoaXMuZHJhZ1RhcmdldHMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuIT09ZS50YXJnZXQmJnQubm9kZS5jb250YWlucyhuKX0pLHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoPjB8fCh0aGlzLnNldFN0YXRlKHtpc0RyYWdBY3RpdmU6ITEsZHJhZ2dlZEZpbGVzOltdfSksdGhpcy5wcm9wcy5vbkRyYWdMZWF2ZSYmdGhpcy5wcm9wcy5vbkRyYWdMZWF2ZS5jYWxsKHRoaXMsZSkpfX0se2tleToib25Ecm9wIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxyPW4ub25Ecm9wLHM9bi5vbkRyb3BBY2NlcHRlZCxpPW4ub25Ecm9wUmVqZWN0ZWQsYT1uLm11bHRpcGxlLGw9bi5kaXNhYmxlUHJldmlldyx1PW4uYWNjZXB0LGM9T2JqZWN0KF8uZCkoZSksZD1bXSxwPVtdO2UucHJldmVudERlZmF1bHQoKSx0aGlzLmRyYWdUYXJnZXRzPVtdLHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlPSExLGMuZm9yRWFjaChmdW5jdGlvbihlKXtpZighbCl0cnl7ZS5wcmV2aWV3PXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGUpfWNhdGNoKGUpe31PYmplY3QoXy5iKShlLHUpJiZPYmplY3QoXy5jKShlLHQucHJvcHMubWF4U2l6ZSx0LnByb3BzLm1pblNpemUpP2QucHVzaChlKTpwLnB1c2goZSl9KSxhfHxwLnB1c2guYXBwbHkocCxvKGQuc3BsaWNlKDEpKSksciYmci5jYWxsKHRoaXMsZCxwLGUpLHAubGVuZ3RoPjAmJmkmJmkuY2FsbCh0aGlzLHAsZSksZC5sZW5ndGg+MCYmcyYmcy5jYWxsKHRoaXMsZCxlKSx0aGlzLmRyYWdnZWRGaWxlcz1udWxsLHRoaXMuc2V0U3RhdGUoe2lzRHJhZ0FjdGl2ZTohMSxkcmFnZ2VkRmlsZXM6W10sYWNjZXB0ZWRGaWxlczpkLHJlamVjdGVkRmlsZXM6cH0pfX0se2tleToib25DbGljayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQub25DbGljazt0LmRpc2FibGVDbGlja3x8KGUuc3RvcFByb3BhZ2F0aW9uKCksbiYmbi5jYWxsKHRoaXMsZSksT2JqZWN0KF8uZSkoKT9zZXRUaW1lb3V0KHRoaXMub3Blbi5iaW5kKHRoaXMpLDApOnRoaXMub3BlbigpKX19LHtrZXk6Im9uSW5wdXRFbGVtZW50Q2xpY2siLHZhbHVlOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcm9wcy5pbnB1dFByb3BzJiZ0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljayYmdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soKX19LHtrZXk6Im9uRmlsZURpYWxvZ0NhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5vbkZpbGVEaWFsb2dDYW5jZWw7dGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1lLmZpbGVJbnB1dEVsKXtlLmZpbGVJbnB1dEVsLmZpbGVzLmxlbmd0aHx8KGUuaXNGaWxlRGlhbG9nQWN0aXZlPSExKX0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdCgpfSwzMDApfX0se2tleToic2V0UmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGU9ZX19LHtrZXk6InNldFJlZnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZmlsZUlucHV0RWw9ZX19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmU9ITAsdGhpcy5maWxlSW5wdXRFbC52YWx1ZT1udWxsLHRoaXMuZmlsZUlucHV0RWwuY2xpY2soKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY2NlcHQsbj1lLmFjY2VwdENsYXNzTmFtZSxvPWUuYWN0aXZlQ2xhc3NOYW1lLHM9ZS5jaGlsZHJlbixpPWUuZGlzYWJsZWQsYT1lLmRpc2FibGVkQ2xhc3NOYW1lLGw9ZS5pbnB1dFByb3BzLGM9ZS5tdWx0aXBsZSxkPWUubmFtZSxtPWUucmVqZWN0Q2xhc3NOYW1lLGg9cihlLFsiYWNjZXB0IiwiYWNjZXB0Q2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJkaXNhYmxlZCIsImRpc2FibGVkQ2xhc3NOYW1lIiwiaW5wdXRQcm9wcyIsIm11bHRpcGxlIiwibmFtZSIsInJlamVjdENsYXNzTmFtZSJdKSxnPWguYWNjZXB0U3R5bGUsYj1oLmFjdGl2ZVN0eWxlLEU9aC5jbGFzc05hbWUseT12b2lkIDA9PT1FPyIiOkUsdj1oLmRpc2FibGVkU3R5bGUsVD1oLnJlamVjdFN0eWxlLEE9aC5zdHlsZSxDPXIoaCxbImFjY2VwdFN0eWxlIiwiYWN0aXZlU3R5bGUiLCJjbGFzc05hbWUiLCJkaXNhYmxlZFN0eWxlIiwicmVqZWN0U3R5bGUiLCJzdHlsZSJdKSxPPXRoaXMuc3RhdGUsUz1PLmlzRHJhZ0FjdGl2ZSxSPU8uZHJhZ2dlZEZpbGVzLGo9Ui5sZW5ndGgseD1jfHxqPD0xLEw9aj4wJiZPYmplY3QoXy5hKShSLHRoaXMucHJvcHMuYWNjZXB0KSxEPWo+MCYmKCFMfHwheCksdz0hKHl8fEF8fGJ8fGd8fFR8fHYpO1MmJm8mJih5Kz0iICIrbyksTCYmbiYmKHkrPSIgIituKSxEJiZtJiYoeSs9IiAiK20pLGkmJmEmJih5Kz0iICIrYSksdyYmKEE9cC5hLmRlZmF1bHQsYj1wLmEuYWN0aXZlLGc9QS5hY3RpdmUsVD1wLmEucmVqZWN0ZWQsdj1wLmEuZGlzYWJsZWQpO3ZhciBNPWYoe30sQSk7YiYmUyYmKE09Zih7fSxBLGIpKSxnJiZMJiYoTT1mKHt9LE0sZykpLFQmJkQmJihNPWYoe30sTSxUKSksdiYmaSYmKE09Zih7fSxBLHYpKTt2YXIgaz17YWNjZXB0OnQsZGlzYWJsZWQ6aSx0eXBlOiJmaWxlIixzdHlsZTp7ZGlzcGxheToibm9uZSJ9LG11bHRpcGxlOl8uZyYmYyxyZWY6dGhpcy5zZXRSZWZzLG9uQ2hhbmdlOnRoaXMub25Ecm9wLGF1dG9Db21wbGV0ZToib2ZmIn07ZCYmZC5sZW5ndGgmJihrLm5hbWU9ZCk7dmFyIEk9KEMuYWNjZXB0ZWRGaWxlcyxDLnByZXZlbnREcm9wT25Eb2N1bWVudCxDLmRpc2FibGVQcmV2aWV3LEMuZGlzYWJsZUNsaWNrLEMub25Ecm9wQWNjZXB0ZWQsQy5vbkRyb3BSZWplY3RlZCxDLm9uRmlsZURpYWxvZ0NhbmNlbCxDLm1heFNpemUsQy5taW5TaXplLHIoQyxbImFjY2VwdGVkRmlsZXMiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJkaXNhYmxlUHJldmlldyIsImRpc2FibGVDbGljayIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJvbkZpbGVEaWFsb2dDYW5jZWwiLCJtYXhTaXplIiwibWluU2l6ZSJdKSk7cmV0dXJuIHUuYS5jcmVhdGVFbGVtZW50KCJkaXYiLGYoe2NsYXNzTmFtZTp5LHN0eWxlOk19LEkse29uQ2xpY2s6dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKSxvbkRyYWdTdGFydDp0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ1N0YXJ0KSxvbkRyYWdFbnRlcjp0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ0VudGVyKSxvbkRyYWdPdmVyOnRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3Zlciksb25EcmFnTGVhdmU6dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdMZWF2ZSksb25Ecm9wOnRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25Ecm9wKSxyZWY6dGhpcy5zZXRSZWYsImFyaWEtZGlzYWJsZWQiOml9KSx0aGlzLnJlbmRlckNoaWxkcmVuKHMsUyxMLEQpLHUuYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIsZih7fSxsLGspKSl9fV0pLHR9KHUuYS5Db21wb25lbnQpO3QuZGVmYXVsdD1oLGgucHJvcFR5cGVzPXthY2NlcHQ6ZC5hLnN0cmluZyxjaGlsZHJlbjpkLmEub25lT2ZUeXBlKFtkLmEubm9kZSxkLmEuZnVuY10pLGRpc2FibGVDbGljazpkLmEuYm9vbCxkaXNhYmxlZDpkLmEuYm9vbCxkaXNhYmxlUHJldmlldzpkLmEuYm9vbCxwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6ZC5hLmJvb2wsaW5wdXRQcm9wczpkLmEub2JqZWN0LG11bHRpcGxlOmQuYS5ib29sLG5hbWU6ZC5hLnN0cmluZyxtYXhTaXplOmQuYS5udW1iZXIsbWluU2l6ZTpkLmEubnVtYmVyLGNsYXNzTmFtZTpkLmEuc3RyaW5nLGFjdGl2ZUNsYXNzTmFtZTpkLmEuc3RyaW5nLGFjY2VwdENsYXNzTmFtZTpkLmEuc3RyaW5nLHJlamVjdENsYXNzTmFtZTpkLmEuc3RyaW5nLGRpc2FibGVkQ2xhc3NOYW1lOmQuYS5zdHJpbmcsc3R5bGU6ZC5hLm9iamVjdCxhY3RpdmVTdHlsZTpkLmEub2JqZWN0LGFjY2VwdFN0eWxlOmQuYS5vYmplY3QscmVqZWN0U3R5bGU6ZC5hLm9iamVjdCxkaXNhYmxlZFN0eWxlOmQuYS5vYmplY3Qsb25DbGljazpkLmEuZnVuYyxvbkRyb3A6ZC5hLmZ1bmMsb25Ecm9wQWNjZXB0ZWQ6ZC5hLmZ1bmMsb25Ecm9wUmVqZWN0ZWQ6ZC5hLmZ1bmMsb25EcmFnU3RhcnQ6ZC5hLmZ1bmMsb25EcmFnRW50ZXI6ZC5hLmZ1bmMsb25EcmFnT3ZlcjpkLmEuZnVuYyxvbkRyYWdMZWF2ZTpkLmEuZnVuYyxvbkZpbGVEaWFsb2dDYW5jZWw6ZC5hLmZ1bmN9LGguZGVmYXVsdFByb3BzPXtwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6ITAsZGlzYWJsZWQ6ITEsZGlzYWJsZVByZXZpZXc6ITEsZGlzYWJsZUNsaWNrOiExLG11bHRpcGxlOiEwLG1heFNpemU6MS8wLG1pblNpemU6MH19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kcm9wem9uZS9kaXN0L2VzL3V0aWxzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9W107aWYoZS5kYXRhVHJhbnNmZXIpe3ZhciBuPWUuZGF0YVRyYW5zZmVyO24uZmlsZXMmJm4uZmlsZXMubGVuZ3RoP3Q9bi5maWxlczpuLml0ZW1zJiZuLml0ZW1zLmxlbmd0aCYmKHQ9bi5pdGVtcyl9ZWxzZSBlLnRhcmdldCYmZS50YXJnZXQuZmlsZXMmJih0PWUudGFyZ2V0LmZpbGVzKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiJhcHBsaWNhdGlvbi94LW1vei1maWxlIj09PWUudHlwZXx8XygpKGUsdCl9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIGUuc2l6ZTw9dCYmZS5zaXplPj1ufWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gbyhlLHQpfSl9ZnVuY3Rpb24gYShlKXtlLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZigiTVNJRSIpfHwtMSE9PWUuaW5kZXhPZigiVHJpZGVudC8iKX1mdW5jdGlvbiB1KGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCJFZGdlLyIpfWZ1bmN0aW9uIGMoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGwoZSl8fHUoZSl9bi5kKHQsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSx0LmQ9cix0LmI9byx0LmM9cyx0LmE9aSx0LmY9YSx0LmU9Yzt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiksXz1uLm4oZCkscD0idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCFkb2N1bWVudC5jcmVhdGVFbGVtZW50fHwibXVsdGlwbGUiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRyb3B6b25lL2Rpc3QvZXMvdXRpbHMvc3R5bGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT17cmVqZWN0ZWQ6e2JvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6IiNjNjYiLGJhY2tncm91bmRDb2xvcjoiI2VlZSJ9LGRpc2FibGVkOntvcGFjaXR5Oi41fSxhY3RpdmU6e2JvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6IiM2YzYiLGJhY2tncm91bmRDb2xvcjoiI2VlZSJ9LGRlZmF1bHQ6e3dpZHRoOjIwMCxoZWlnaHQ6MjAwLGJvcmRlcldpZHRoOjIsYm9yZGVyQ29sb3I6IiM2NjYiLGJvcmRlclN0eWxlOiJkYXNoZWQiLGJvcmRlclJhZGl1czo1fX19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1lYXN5LXN3aXBlL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sczshZnVuY3Rpb24oaSxhKXtvPVt0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWVhc3ktc3dpcGUvbGliL3JlYWN0LXN3aXBlLmpzIildLHI9YSx2b2lkIDAhPT0ocz0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHQsbyk6cikmJihlLmV4cG9ydHM9cyl9KDAsZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0odCk7ZS5kZWZhdWx0PW4uZGVmYXVsdH0pfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZWFzeS1zd2lwZS9saWIvcmVhY3Qtc3dpcGUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHM7IWZ1bmN0aW9uKGksYSl7bz1bdCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKV0scj1hLHZvaWQgMCE9PShzPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodCxvKTpyKSYmKGUuZXhwb3J0cz1zKX0oMCxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYShlKXtwPWV9ZnVuY3Rpb24gbCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7Y2FwdHVyZTohMH07cmV0dXJuIHA/ZTplLmNhcHR1cmV9ZnVuY3Rpb24gdShlKXtpZigidG91Y2hlcyJpbiBlKXt2YXIgdD1lLnRvdWNoZXNbMF07cmV0dXJue3g6dC5wYWdlWCx5OnQucGFnZVl9fXJldHVybnt4OmUuc2NyZWVuWCx5OmUuc2NyZWVuWX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuc2V0SGFzU3VwcG9ydFRvQ2FwdHVyZU9wdGlvbj1hO3ZhciBjPXIodCksZD1yKG4pLF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCkscD0hMTt0cnl7YWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImNhcHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXthKCEwKX19KSl9Y2F0Y2goZSl7fXZhciBmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZTtvKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuKSxpPTA7aTxuO2krKylyW2ldPWFyZ3VtZW50c1tpXTt2YXIgYT1zKHRoaXMsKGU9dC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQocikpKTtyZXR1cm4gYS5faGFuZGxlU3dpcGVTdGFydD1hLl9oYW5kbGVTd2lwZVN0YXJ0LmJpbmQoYSksYS5faGFuZGxlU3dpcGVNb3ZlPWEuX2hhbmRsZVN3aXBlTW92ZS5iaW5kKGEpLGEuX2hhbmRsZVN3aXBlRW5kPWEuX2hhbmRsZVN3aXBlRW5kLmJpbmQoYSksYS5fb25Nb3VzZURvd249YS5fb25Nb3VzZURvd24uYmluZChhKSxhLl9vbk1vdXNlTW92ZT1hLl9vbk1vdXNlTW92ZS5iaW5kKGEpLGEuX29uTW91c2VVcD1hLl9vbk1vdXNlVXAuYmluZChhKSxhfXJldHVybiBpKHQsZSksXyh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN3aXBlciYmdGhpcy5zd2lwZXIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9oYW5kbGVTd2lwZU1vdmUsbCh7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zd2lwZXImJnRoaXMuc3dpcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5faGFuZGxlU3dpcGVNb3ZlLGwoe2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pKX19LHtrZXk6Il9vbk1vdXNlRG93biIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5hbGxvd01vdXNlRXZlbnRzJiYodGhpcy5tb3VzZURvd249ITAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9oYW5kbGVTd2lwZVN0YXJ0KGUpKX19LHtrZXk6Il9vbk1vdXNlTW92ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb3VzZURvd24mJnRoaXMuX2hhbmRsZVN3aXBlTW92ZShlKX19LHtrZXk6Il9vbk1vdXNlVXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubW91c2VEb3duPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5faGFuZGxlU3dpcGVFbmQoZSl9fSx7a2V5OiJfaGFuZGxlU3dpcGVTdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dShlKSxuPXQueCxyPXQueTt0aGlzLm1vdmVTdGFydD17eDpuLHk6cn0sdGhpcy5wcm9wcy5vblN3aXBlU3RhcnQoZSl9fSx7a2V5OiJfaGFuZGxlU3dpcGVNb3ZlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLm1vdmVTdGFydCl7dmFyIHQ9dShlKSxuPXQueCxyPXQueSxvPW4tdGhpcy5tb3ZlU3RhcnQueCxzPXItdGhpcy5tb3ZlU3RhcnQueTt0aGlzLm1vdmluZz0hMDt0aGlzLnByb3BzLm9uU3dpcGVNb3ZlKHt4Om8seTpzfSxlKSYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubW92ZVBvc2l0aW9uPXtkZWx0YVg6byxkZWx0YVk6c319fX0se2tleToiX2hhbmRsZVN3aXBlRW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uU3dpcGVFbmQoZSk7dmFyIHQ9dGhpcy5wcm9wcy50b2xlcmFuY2U7dGhpcy5tb3ZpbmcmJnRoaXMubW92ZVBvc2l0aW9uJiYodGhpcy5tb3ZlUG9zaXRpb24uZGVsdGFYPC10P3RoaXMucHJvcHMub25Td2lwZUxlZnQoMSxlKTp0aGlzLm1vdmVQb3NpdGlvbi5kZWx0YVg+dCYmdGhpcy5wcm9wcy5vblN3aXBlUmlnaHQoMSxlKSx0aGlzLm1vdmVQb3NpdGlvbi5kZWx0YVk8LXQ/dGhpcy5wcm9wcy5vblN3aXBlVXAoMSxlKTp0aGlzLm1vdmVQb3NpdGlvbi5kZWx0YVk+dCYmdGhpcy5wcm9wcy5vblN3aXBlRG93bigxLGUpKSx0aGlzLm1vdmVTdGFydD1udWxsLHRoaXMubW92aW5nPSExLHRoaXMubW92ZVBvc2l0aW9uPW51bGx9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodGhpcy5wcm9wcy50YWdOYW1lLHtyZWY6ZnVuY3Rpb24odCl7cmV0dXJuIGUuc3dpcGVyPXR9LG9uTW91c2VEb3duOnRoaXMuX29uTW91c2VEb3duLG9uVG91Y2hTdGFydDp0aGlzLl9oYW5kbGVTd2lwZVN0YXJ0LG9uVG91Y2hFbmQ6dGhpcy5faGFuZGxlU3dpcGVFbmQsY2xhc3NOYW1lOnRoaXMucHJvcHMuY2xhc3NOYW1lLHN0eWxlOnRoaXMucHJvcHMuc3R5bGV9LHRoaXMucHJvcHMuY2hpbGRyZW4pfX1dKSx0fSh0LkNvbXBvbmVudCk7Zi5kaXNwbGF5TmFtZT0iUmVhY3RTd2lwZSIsZi5wcm9wVHlwZXM9e3RhZ05hbWU6ZC5kZWZhdWx0LnN0cmluZyxjbGFzc05hbWU6ZC5kZWZhdWx0LnN0cmluZyxzdHlsZTpkLmRlZmF1bHQub2JqZWN0LGNoaWxkcmVuOmQuZGVmYXVsdC5ub2RlLGFsbG93TW91c2VFdmVudHM6ZC5kZWZhdWx0LmJvb2wsb25Td2lwZVVwOmQuZGVmYXVsdC5mdW5jLG9uU3dpcGVEb3duOmQuZGVmYXVsdC5mdW5jLG9uU3dpcGVMZWZ0OmQuZGVmYXVsdC5mdW5jLG9uU3dpcGVSaWdodDpkLmRlZmF1bHQuZnVuYyxvblN3aXBlU3RhcnQ6ZC5kZWZhdWx0LmZ1bmMsb25Td2lwZU1vdmU6ZC5kZWZhdWx0LmZ1bmMsb25Td2lwZUVuZDpkLmRlZmF1bHQuZnVuYyx0b2xlcmFuY2U6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfSxmLmRlZmF1bHRQcm9wcz17dGFnTmFtZToiZGl2IixhbGxvd01vdXNlRXZlbnRzOiExLG9uU3dpcGVVcDpmdW5jdGlvbigpe30sb25Td2lwZURvd246ZnVuY3Rpb24oKXt9LG9uU3dpcGVMZWZ0OmZ1bmN0aW9uKCl7fSxvblN3aXBlUmlnaHQ6ZnVuY3Rpb24oKXt9LG9uU3dpcGVTdGFydDpmdW5jdGlvbigpe30sb25Td2lwZU1vdmU6ZnVuY3Rpb24oKXt9LG9uU3dpcGVFbmQ6ZnVuY3Rpb24oKXt9LHRvbGVyYW5jZTowfSxlLmRlZmF1bHQ9Zn0pfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZXZlbnQtb2JzZXJ2ZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ldmVudC1vYnNlcnZlci9saWIvRXZlbnRTeXN0ZW0uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcjtyZXR1cm57b246ZS5vbixzdWJzY3JpYmU6ZS5vbixvZmY6ZS5vZmYsdW5zdWJzY3JpYmU6ZS5vZmYscHVibGlzaDplLnRyaWdnZXIsdHJpZ2dlcjplLnRyaWdnZXIsZW1pdDplLnRyaWdnZXIsYXNrOmUuYXNrLHJlcXVlc3Q6ZS5hc2sscmVzcG9uZDplLnJlc3BvbmQsYW5zd2VyOmUucmVzcG9uZCxzaWxlbmNlOmUuc2lsZW5jZSxsZWF2ZTplLnNpbGVuY2UsZ2V0RXZlbnRzOmUuZ2V0RXZlbnRzLGdldEFsbEV2ZW50czplLmdldEFsbEV2ZW50cyxnZXRMaXN0ZW5lcnM6ZS5nZXRMaXN0ZW5lcnN9fX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWV2ZW50LW9ic2VydmVyL2xpYi9FdmVudFN5c3RlbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt0aGlzLmV2ZW50cz17ZXJyb3I6W10sc3VjY2VlZDpbXX0sdGhpcy5jYWxsYmFjaz1lLHRoaXMub249dGhpcy5vbi5iaW5kKHRoaXMpfTtyLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3RoaXMuZXZlbnRzW2VdJiZ0aGlzLmV2ZW50c1tlXS5wdXNoKHQpfTt2YXIgbz1mdW5jdGlvbigpe3RoaXMubGlzdD1bXSx0aGlzLm9uPXRoaXMub24uYmluZCh0aGlzKSx0aGlzLm9mZj10aGlzLm9mZi5iaW5kKHRoaXMpLHRoaXMuYXNrPXRoaXMuYXNrLmJpbmQodGhpcyksdGhpcy5yZXNwb25kPXRoaXMucmVzcG9uZC5iaW5kKHRoaXMpLHRoaXMuc2lsZW5jZT10aGlzLnNpbGVuY2UuYmluZCh0aGlzKSx0aGlzLnRyaWdnZXI9dGhpcy50cmlnZ2VyLmJpbmQodGhpcyksdGhpcy5nZXRFdmVudHM9dGhpcy5nZXRFdmVudHMuYmluZCh0aGlzKSx0aGlzLmdldEFsbEV2ZW50cz10aGlzLmdldEFsbEV2ZW50cy5iaW5kKHRoaXMpLHRoaXMuZ2V0TGlzdGVuZXJzPXRoaXMuZ2V0TGlzdGVuZXJzLmJpbmQodGhpcyksdGhpcy5hc2twcmVmaXg9IiIsdGhpcy5yYW5kb21QcmVmaXgoKX07by5wcm90b3R5cGU9e3JlZ1JlcDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLVxbXF1cL1x7XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywiXFwkJiIpfSxnZXRBbGxFdmVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5saXN0KX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl4iK3RoaXMucmVnUmVwKGUpKyIkIiksbj1uZXcgUmVnRXhwKCJeIit0aGlzLnJlZ1JlcChlKSsiLiIpLHI9W107Zm9yKHZhciBvIGluIHRoaXMubGlzdCkoby5tYXRjaCh0KXx8by5tYXRjaChuKSkmJnIucHVzaChvKTtyZXR1cm4gcn0sZ2V0TGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpc3RbZV0/dGhpcy5saXN0W2VdOltdfSxyYW5kb21TdHJpbmc6ZnVuY3Rpb24oKXtmb3IodmFyIGU9IjEyMzQ1Njc4OTBRV0VSVFlVSU9QQVNERkdISktMWlhDVkJOTXF3ZXJ0eXVpb3Bhc2RmZ2hqa2x6eGN2Ym5tIix0PSIiLG49MDtuPDI1O24rKyl0Kz1lW01hdGgucm91bmQoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO3JldHVybiB0fSxyYW5kb21QcmVmaXg6ZnVuY3Rpb24oKXt0aGlzLmFza3ByZWZpeD10aGlzLnJhbmRvbVN0cmluZygpfSxvbjpmdW5jdGlvbihlLHQpe2lmKCFlfHwhdClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJSZWFjdE9ic2VydmVyOiAnb24nIGFuZCAnc3Vic2NyaWJlJyBtZXRob2Qgc2hvdWxkIGhhdmUgYSB2YWxpZCBldmVudCAmIGNhbGxiYWNrIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlYWN0T2JzZXJ2ZXI6IGV2ZW50IG5hbWUgc2hvdWxkIGJlIHN0cmluZyIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlYWN0T2JzZXJ2ZXI6IGV2ZW50IGNhbGxiYWNrIHNob3VsZCBiZSBmdW5jdGlvbiIpO3ZvaWQgMD09PXRoaXMubGlzdFtlXSYmKHRoaXMubGlzdFtlXT1bXSk7dmFyIG49dGhpcyxvPW5ldyByKHQpO3JldHVybiBvLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7bi5vZmYoZSxvKX0sby5vZmY9by51bnN1YnNjcmliZSx0aGlzLmxpc3RbZV0ucHVzaChvKSxvfSxvZmY6ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10aGlzLmxpc3RbZV0pe3ZhciBuPW5ldyBSZWdFeHAoIl4iK3RoaXMucmVnUmVwKGUpKyIkIikscj1uZXcgUmVnRXhwKCJeIit0aGlzLnJlZ1JlcChlKSsiLiIpO2Zvcih2YXIgbyBpbiB0aGlzLmxpc3QpaWYoby5tYXRjaChuKXx8by5tYXRjaChyKSlpZih0KWZvcih2YXIgcz10aGlzLmxpc3Rbb10ubGVuZ3RoO3MtLTspdD09PXRoaXMubGlzdFtvXVtzXSYmdGhpcy5saXN0W29dLnNwbGljZShzLDEpO2Vsc2UgZGVsZXRlIHRoaXMubGlzdFtvXX19LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgUmVnRXhwKCJeIit0aGlzLnJlZ1JlcChlKSsiJCIpLHI9bmV3IFJlZ0V4cCgiXiIrdGhpcy5yZWdSZXAoZSkrIi4iKSxvPXRoaXM7Zm9yKHZhciBzIGluIHRoaXMubGlzdClpZihzLm1hdGNoKG4pfHxzLm1hdGNoKHIpKXt2YXIgaT1Qcm9taXNlLnJlc29sdmUoMCksYT1zO2Zvcih2YXIgbCBpbiB0aGlzLmxpc3RbYV0paT1pLnRoZW4oZnVuY3Rpb24oZSl7dHJ5e28ubGlzdFthXVtlXS5jYWxsYmFjayh0KSxvLmxpc3RbYV1bZV0uZXZlbnRzLnN1Y2NlZWQuZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KX1jYXRjaCh0KXtvLmxpc3RbYV1bZV0uZXZlbnRzLmVycm9yLmZvckVhY2goZnVuY3Rpb24oZSl7ZSh0KX0pfXJldHVybiBlKzF9KX19LGFzazpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmFuZG9tU3RyaW5nKCkscj10aGlzLG89ITE7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsaSl7ci5vbihuK3IuYXNrcHJlZml4K2UsZnVuY3Rpb24oYSl7YS5lcnI/aShhLmVycik6cyhhLmRhdGEpLG8mJmNsZWFyVGltZW91dChvKSxvPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9mZihuK3IuYXNrcHJlZml4K2UpfSwxMDApLHQmJihhLmVycj90KG51bGwsYS5lcnIpOnQoYS5kYXRhKSl9KSxyLnRyaWdnZXIoci5hc2twcmVmaXgrZSxuKX0pfSxyZXNwb25kOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLm9uKHRoaXMuYXNrcHJlZml4K2UsZnVuY3Rpb24ocil7dmFyIG87dHJ5e289dCgpfWNhdGNoKHQpe3JldHVybiB2b2lkIG4udHJpZ2dlcihyK24uYXNrcHJlZml4K2Use2RhdGE6bnVsbCxlcnI6dH0pfSJmdW5jdGlvbiI9PXR5cGVvZiBvLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBvLmNhdGNoP28udGhlbihmdW5jdGlvbih0KXtuLnRyaWdnZXIocituLmFza3ByZWZpeCtlLHtkYXRhOnQsZXJyOm51bGx9KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe24udHJpZ2dlcihyK24uYXNrcHJlZml4K2Use2RhdGE6bnVsbCxlcnI6dH0pfSk6bi50cmlnZ2VyKHIrbi5hc2twcmVmaXgrZSx7ZGF0YTpvLGVycjpudWxsfSl9KX0sc2lsZW5jZTpmdW5jdGlvbihlKXt0aGlzLm9mZih0aGlzLmFza3ByZWZpeCtlKX19LGUuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vZGlzdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9yZWFjdC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9mc2NyZWVuL2xpYi9pbmRleC5qcyIpLHA9cihfKSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5kZXRlY3RGdWxsU2NyZWVuPW4uZGV0ZWN0RnVsbFNjcmVlbi5iaW5kKG4pLG4uZW50ZXJGdWxsU2NyZWVuPW4uZW50ZXJGdWxsU2NyZWVuLmJpbmQobiksbi5sZWF2ZUZ1bGxTY3JlZW49bi5sZWF2ZUZ1bGxTY3JlZW4uYmluZChuKSxufXJldHVybiBpKHQsZSksYSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtwLmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsdGhpcy5kZXRlY3RGdWxsU2NyZWVuKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3AuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIix0aGlzLmRldGVjdEZ1bGxTY3JlZW4pfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVQcm9wcyhlKX19LHtrZXk6ImhhbmRsZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1wLmRlZmF1bHQuZnVsbHNjcmVlbkVsZW1lbnQ7dCYmIWUuZW5hYmxlZD90aGlzLmxlYXZlRnVsbFNjcmVlbigpOiF0JiZlLmVuYWJsZWQmJnRoaXMuZW50ZXJGdWxsU2NyZWVuKCl9fSx7a2V5OiJkZXRlY3RGdWxsU2NyZWVuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMub25DaGFuZ2UmJnRoaXMucHJvcHMub25DaGFuZ2UoISFwLmRlZmF1bHQuZnVsbHNjcmVlbkVsZW1lbnQpfX0se2tleToiZW50ZXJGdWxsU2NyZWVuIix2YWx1ZTpmdW5jdGlvbigpe3AuZGVmYXVsdC5mdWxsc2NyZWVuRW5hYmxlZCYmcC5kZWZhdWx0LnJlcXVlc3RGdWxsc2NyZWVuKHRoaXMubm9kZSl9fSx7a2V5OiJsZWF2ZUZ1bGxTY3JlZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cC5kZWZhdWx0LmZ1bGxzY3JlZW5FbmFibGVkJiZwLmRlZmF1bHQuZXhpdEZ1bGxzY3JlZW4oKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9WyJmdWxsc2NyZWVuIl07cmV0dXJuIHRoaXMucHJvcHMuZW5hYmxlZCYmdC5wdXNoKCJmdWxsc2NyZWVuLWVuYWJsZWQiKSx1LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnQuam9pbigiICIpLHJlZjpmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlPXR9LHN0eWxlOnRoaXMucHJvcHMuZW5hYmxlZD97aGVpZ2h0OiIxMDAlIix3aWR0aDoiMTAwJSJ9OnZvaWQgMH0sdGhpcy5wcm9wcy5jaGlsZHJlbil9fV0pLHR9KGwuQ29tcG9uZW50KTtmLnByb3BUeXBlcz17Y2hpbGRyZW46ZC5kZWZhdWx0Lm5vZGUuaXNSZXF1aXJlZCxlbmFibGVkOmQuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsb25DaGFuZ2U6ZC5kZWZhdWx0LmZ1bmN9LGYuZGVmYXVsdFByb3BzPXtlbmFibGVkOiExfSx0LmRlZmF1bHQ9Zn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvPWZ1bmN0aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhhdFJldHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJuc1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlfSxlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eU9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLHMsaSxhLGwpe2lmKG8odCksIWUpe3ZhciB1O2lmKHZvaWQgMD09PXQpdT1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYz1bbixyLHMsaSxhLGxdLGQ9MDt1PW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gY1tkKytdfSkpLHUubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgdS5mcmFtZXNUb1BvcD0xLHV9fXZhciBvPWZ1bmN0aW9uKGUpe307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIpLG89cjtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvS2V5RXNjYXBlVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD0vKD0wfD0yKS9nLG49eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PWVbMF0mJiIkIj09PWVbMV0/ZS5zdWJzdHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKHQsZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX12YXIgcz17ZXNjYXBlOnIsdW5lc2NhcGU6b307ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksbz0obigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodC5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbj10Lmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gdC5jYWxsKG4sZSksbn1yZXR1cm4gbmV3IHQoZSl9KSxzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBuLmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LGk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5ldyByKGUsdCxuKX0sYT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzO2lmKG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIHM9by5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG8uY2FsbChzLGUsdCxuLHIpLHN9cmV0dXJuIG5ldyBvKGUsdCxuLHIpfSxsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSBpbnN0YW5jZW9mIHR8fHIoIjI1IiksZS5kZXN0cnVjdG9yKCksdC5pbnN0YW5jZVBvb2wubGVuZ3RoPHQucG9vbFNpemUmJnQuaW5zdGFuY2VQb29sLnB1c2goZSl9LHU9byxjPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtyZXR1cm4gbi5pbnN0YW5jZVBvb2w9W10sbi5nZXRQb29sZWQ9dHx8dSxuLnBvb2xTaXplfHwobi5wb29sU2l6ZT0xMCksbi5yZWxlYXNlPWwsbn0sZD17YWRkUG9vbGluZ1RvOmMsb25lQXJndW1lbnRQb29sZXI6byx0d29Bcmd1bWVudFBvb2xlcjpzLHRocmVlQXJndW1lbnRQb29sZXI6aSxmb3VyQXJndW1lbnRQb29sZXI6YX07ZS5leHBvcnRzPWR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RCYXNlQ2xhc3Nlcy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkcmVuLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlcy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFZlcnNpb24uanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlQ2xhc3MuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvb25seUNoaWxkLmpzIiksXz1hLmNyZWF0ZUVsZW1lbnQscD1hLmNyZWF0ZUZhY3RvcnksZj1hLmNsb25lRWxlbWVudCxtPXIsaD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZz17Q2hpbGRyZW46e21hcDpzLm1hcCxmb3JFYWNoOnMuZm9yRWFjaCxjb3VudDpzLmNvdW50LHRvQXJyYXk6cy50b0FycmF5LG9ubHk6ZH0sQ29tcG9uZW50Om8uQ29tcG9uZW50LFB1cmVDb21wb25lbnQ6by5QdXJlQ29tcG9uZW50LGNyZWF0ZUVsZW1lbnQ6XyxjbG9uZUVsZW1lbnQ6Zixpc1ZhbGlkRWxlbWVudDphLmlzVmFsaWRFbGVtZW50LFByb3BUeXBlczpsLGNyZWF0ZUNsYXNzOmMsY3JlYXRlRmFjdG9yeTpwLGNyZWF0ZU1peGluOmgsRE9NOmksdmVyc2lvbjp1LF9fc3ByZWFkOm19O2UuZXhwb3J0cz1nfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJhc2VDbGFzc2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9dSx0aGlzLnVwZGF0ZXI9bnx8bH1mdW5jdGlvbiBvKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPXUsdGhpcy51cGRhdGVyPW58fGx9ZnVuY3Rpb24gcygpe312YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVRdWV1ZS5qcyIpLHU9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlPYmplY3QuanMiKSk7bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvbG93UHJpb3JpdHlXYXJuaW5nLmpzIik7ci5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpeyJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPWUmJmkoIjg1IiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUpLHQmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyx0LCJzZXRTdGF0ZSIpfSxyLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpLGUmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfTtzLnByb3RvdHlwZT1yLnByb3RvdHlwZSxvLnByb3RvdHlwZT1uZXcgcyxvLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vLGEoby5wcm90b3R5cGUsci5wcm90b3R5cGUpLG8ucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGUuZXhwb3J0cz17Q29tcG9uZW50OnIsUHVyZUNvbXBvbmVudDpvfX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigiIitlKS5yZXBsYWNlKHksIiQmLyIpfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLmZ1bmM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLmNvdW50PTB9ZnVuY3Rpb24gcyhlLHQsbil7dmFyIHI9ZS5mdW5jLG89ZS5jb250ZXh0O3IuY2FsbChvLHQsZS5jb3VudCsrKX1mdW5jdGlvbiBpKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPW8uZ2V0UG9vbGVkKHQsbik7ZyhlLHMsciksby5yZWxlYXNlKHIpfWZ1bmN0aW9uIGEoZSx0LG4scil7dGhpcy5yZXN1bHQ9ZSx0aGlzLmtleVByZWZpeD10LHRoaXMuZnVuYz1uLHRoaXMuY29udGV4dD1yLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBsKGUsdCxuKXt2YXIgbz1lLnJlc3VsdCxzPWUua2V5UHJlZml4LGk9ZS5mdW5jLGE9ZS5jb250ZXh0LGw9aS5jYWxsKGEsdCxlLmNvdW50KyspO0FycmF5LmlzQXJyYXkobCk/dShsLG8sbixoLnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPWwmJihtLmlzVmFsaWRFbGVtZW50KGwpJiYobD1tLmNsb25lQW5kUmVwbGFjZUtleShsLHMrKCFsLmtleXx8dCYmdC5rZXk9PT1sLmtleT8iIjpyKGwua2V5KSsiLyIpK24pKSxvLnB1c2gobCkpfWZ1bmN0aW9uIHUoZSx0LG4sbyxzKXt2YXIgaT0iIjtudWxsIT1uJiYoaT1yKG4pKyIvIik7dmFyIHU9YS5nZXRQb29sZWQodCxpLG8scyk7ZyhlLGwsdSksYS5yZWxlYXNlKHUpfWZ1bmN0aW9uIGMoZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W107cmV0dXJuIHUoZSxyLG51bGwsdCxuKSxyfWZ1bmN0aW9uIGQoZSx0LG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZyhlLGQsbnVsbCl9ZnVuY3Rpb24gcChlKXt2YXIgdD1bXTtyZXR1cm4gdShlLHQsbnVsbCxoLnRoYXRSZXR1cm5zQXJndW1lbnQpLHR9dmFyIGY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Qb29sZWRDbGFzcy5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiKSxiPWYudHdvQXJndW1lbnRQb29sZXIsRT1mLmZvdXJBcmd1bWVudFBvb2xlcix5PS9cLysvZztvLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5mdW5jPW51bGwsdGhpcy5jb250ZXh0PW51bGwsdGhpcy5jb3VudD0wfSxmLmFkZFBvb2xpbmdUbyhvLGIpLGEucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdD1udWxsLHRoaXMua2V5UHJlZml4PW51bGwsdGhpcy5mdW5jPW51bGwsdGhpcy5jb250ZXh0PW51bGwsdGhpcy5jb3VudD0wfSxmLmFkZFBvb2xpbmdUbyhhLEUpO3ZhciB2PXtmb3JFYWNoOmksbWFwOmMsbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbDp1LGNvdW50Ol8sdG9BcnJheTpwfTtlLmV4cG9ydHM9dn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnQ6bnVsbH07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiksbz1yLmNyZWF0ZUZhY3Rvcnkscz17YTpvKCJhIiksYWJicjpvKCJhYmJyIiksYWRkcmVzczpvKCJhZGRyZXNzIiksYXJlYTpvKCJhcmVhIiksYXJ0aWNsZTpvKCJhcnRpY2xlIiksYXNpZGU6bygiYXNpZGUiKSxhdWRpbzpvKCJhdWRpbyIpLGI6bygiYiIpLGJhc2U6bygiYmFzZSIpLGJkaTpvKCJiZGkiKSxiZG86bygiYmRvIiksYmlnOm8oImJpZyIpLGJsb2NrcXVvdGU6bygiYmxvY2txdW90ZSIpLGJvZHk6bygiYm9keSIpLGJyOm8oImJyIiksYnV0dG9uOm8oImJ1dHRvbiIpLGNhbnZhczpvKCJjYW52YXMiKSxjYXB0aW9uOm8oImNhcHRpb24iKSxjaXRlOm8oImNpdGUiKSxjb2RlOm8oImNvZGUiKSxjb2w6bygiY29sIiksY29sZ3JvdXA6bygiY29sZ3JvdXAiKSxkYXRhOm8oImRhdGEiKSxkYXRhbGlzdDpvKCJkYXRhbGlzdCIpLGRkOm8oImRkIiksZGVsOm8oImRlbCIpLGRldGFpbHM6bygiZGV0YWlscyIpLGRmbjpvKCJkZm4iKSxkaWFsb2c6bygiZGlhbG9nIiksZGl2Om8oImRpdiIpLGRsOm8oImRsIiksZHQ6bygiZHQiKSxlbTpvKCJlbSIpLGVtYmVkOm8oImVtYmVkIiksZmllbGRzZXQ6bygiZmllbGRzZXQiKSxmaWdjYXB0aW9uOm8oImZpZ2NhcHRpb24iKSxmaWd1cmU6bygiZmlndXJlIiksZm9vdGVyOm8oImZvb3RlciIpLGZvcm06bygiZm9ybSIpLGgxOm8oImgxIiksaDI6bygiaDIiKSxoMzpvKCJoMyIpLGg0Om8oImg0IiksaDU6bygiaDUiKSxoNjpvKCJoNiIpLGhlYWQ6bygiaGVhZCIpLGhlYWRlcjpvKCJoZWFkZXIiKSxoZ3JvdXA6bygiaGdyb3VwIiksaHI6bygiaHIiKSxodG1sOm8oImh0bWwiKSxpOm8oImkiKSxpZnJhbWU6bygiaWZyYW1lIiksaW1nOm8oImltZyIpLGlucHV0Om8oImlucHV0IiksaW5zOm8oImlucyIpLGtiZDpvKCJrYmQiKSxrZXlnZW46bygia2V5Z2VuIiksbGFiZWw6bygibGFiZWwiKSxsZWdlbmQ6bygibGVnZW5kIiksbGk6bygibGkiKSxsaW5rOm8oImxpbmsiKSxtYWluOm8oIm1haW4iKSxtYXA6bygibWFwIiksbWFyazpvKCJtYXJrIiksbWVudTpvKCJtZW51IiksbWVudWl0ZW06bygibWVudWl0ZW0iKSxtZXRhOm8oIm1ldGEiKSxtZXRlcjpvKCJtZXRlciIpLG5hdjpvKCJuYXYiKSxub3NjcmlwdDpvKCJub3NjcmlwdCIpLG9iamVjdDpvKCJvYmplY3QiKSxvbDpvKCJvbCIpLG9wdGdyb3VwOm8oIm9wdGdyb3VwIiksb3B0aW9uOm8oIm9wdGlvbiIpLG91dHB1dDpvKCJvdXRwdXQiKSxwOm8oInAiKSxwYXJhbTpvKCJwYXJhbSIpLHBpY3R1cmU6bygicGljdHVyZSIpLHByZTpvKCJwcmUiKSxwcm9ncmVzczpvKCJwcm9ncmVzcyIpLHE6bygicSIpLHJwOm8oInJwIikscnQ6bygicnQiKSxydWJ5Om8oInJ1YnkiKSxzOm8oInMiKSxzYW1wOm8oInNhbXAiKSxzY3JpcHQ6bygic2NyaXB0Iiksc2VjdGlvbjpvKCJzZWN0aW9uIiksc2VsZWN0Om8oInNlbGVjdCIpLHNtYWxsOm8oInNtYWxsIiksc291cmNlOm8oInNvdXJjZSIpLHNwYW46bygic3BhbiIpLHN0cm9uZzpvKCJzdHJvbmciKSxzdHlsZTpvKCJzdHlsZSIpLHN1YjpvKCJzdWIiKSxzdW1tYXJ5Om8oInN1bW1hcnkiKSxzdXA6bygic3VwIiksdGFibGU6bygidGFibGUiKSx0Ym9keTpvKCJ0Ym9keSIpLHRkOm8oInRkIiksdGV4dGFyZWE6bygidGV4dGFyZWEiKSx0Zm9vdDpvKCJ0Zm9vdCIpLHRoOm8oInRoIiksdGhlYWQ6bygidGhlYWQiKSx0aW1lOm8oInRpbWUiKSx0aXRsZTpvKCJ0aXRsZSIpLHRyOm8oInRyIiksdHJhY2s6bygidHJhY2siKSx1Om8oInUiKSx1bDpvKCJ1bCIpLHZhcjpvKCJ2YXIiKSx2aWRlbzpvKCJ2aWRlbyIpLHdicjpvKCJ3YnIiKSxjaXJjbGU6bygiY2lyY2xlIiksY2xpcFBhdGg6bygiY2xpcFBhdGgiKSxkZWZzOm8oImRlZnMiKSxlbGxpcHNlOm8oImVsbGlwc2UiKSxnOm8oImciKSxpbWFnZTpvKCJpbWFnZSIpLGxpbmU6bygibGluZSIpLGxpbmVhckdyYWRpZW50Om8oImxpbmVhckdyYWRpZW50IiksbWFzazpvKCJtYXNrIikscGF0aDpvKCJwYXRoIikscGF0dGVybjpvKCJwYXR0ZXJuIikscG9seWdvbjpvKCJwb2x5Z29uIikscG9seWxpbmU6bygicG9seWxpbmUiKSxyYWRpYWxHcmFkaWVudDpvKCJyYWRpYWxHcmFkaWVudCIpLHJlY3Q6bygicmVjdCIpLHN0b3A6bygic3RvcCIpLHN2ZzpvKCJzdmciKSx0ZXh0Om8oInRleHQiKSx0c3BhbjpvKCJ0c3BhbiIpfTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMCE9PWUucmVmfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHZvaWQgMCE9PWUua2V5fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanMiKSxhPShuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIiksdT17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9LGM9ZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7dmFyIGE9eyQkdHlwZW9mOmwsdHlwZTplLGtleTp0LHJlZjpuLHByb3BzOmksX293bmVyOnN9O3JldHVybiBhfTtjLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLGw9e30sZD1udWxsLF89bnVsbDtpZihudWxsIT10KXtyKHQpJiYoXz10LnJlZiksbyh0KSYmKGQ9IiIrdC5rZXkpLHZvaWQgMD09PXQuX19zZWxmP251bGw6dC5fX3NlbGYsdm9pZCAwPT09dC5fX3NvdXJjZT9udWxsOnQuX19zb3VyY2U7Zm9yKHMgaW4gdClhLmNhbGwodCxzKSYmIXUuaGFzT3duUHJvcGVydHkocykmJihsW3NdPXRbc10pfXZhciBwPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09cClsLmNoaWxkcmVuPW47ZWxzZSBpZihwPjEpe2Zvcih2YXIgZj1BcnJheShwKSxtPTA7bTxwO20rKylmW21dPWFyZ3VtZW50c1ttKzJdO2wuY2hpbGRyZW49Zn1pZihlJiZlLmRlZmF1bHRQcm9wcyl7dmFyIGg9ZS5kZWZhdWx0UHJvcHM7Zm9yKHMgaW4gaCl2b2lkIDA9PT1sW3NdJiYobFtzXT1oW3NdKX1yZXR1cm4gYyhlLGQsXywwLDAsaS5jdXJyZW50LGwpfSxjLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9Yy5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0sYy5jbG9uZUFuZFJlcGxhY2VLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLnR5cGUsdCxlLnJlZixlLl9zZWxmLGUuX3NvdXJjZSxlLl9vd25lcixlLnByb3BzKX0sYy5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsLGQ9cyh7fSxlLnByb3BzKSxfPWUua2V5LHA9ZS5yZWYsZj0oZS5fc2VsZixlLl9zb3VyY2UsZS5fb3duZXIpO2lmKG51bGwhPXQpe3IodCkmJihwPXQucmVmLGY9aS5jdXJyZW50KSxvKHQpJiYoXz0iIit0LmtleSk7dmFyIG07ZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzJiYobT1lLnR5cGUuZGVmYXVsdFByb3BzKTtmb3IobCBpbiB0KWEuY2FsbCh0LGwpJiYhdS5oYXNPd25Qcm9wZXJ0eShsKSYmKHZvaWQgMD09PXRbbF0mJnZvaWQgMCE9PW0/ZFtsXT1tW2xdOmRbbF09dFtsXSl9dmFyIGg9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1oKWQuY2hpbGRyZW49bjtlbHNlIGlmKGg+MSl7Zm9yKHZhciBnPUFycmF5KGgpLGI9MDtiPGg7YisrKWdbYl09YXJndW1lbnRzW2IrMl07ZC5jaGlsZHJlbj1nfXJldHVybiBjKGUudHlwZSxfLHAsMCwwLGYsZCl9LGMuaXNWYWxpZEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PWx9LGUuZXhwb3J0cz1jfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMztlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3ROb29wVXBkYXRlUXVldWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIikse2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4hMX0sZW5xdWV1ZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7fSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsdCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0KXt9fSk7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiksbz1yLmlzVmFsaWRFbGVtZW50LHM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5LmpzIik7ZS5leHBvcnRzPXMobyl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VmVyc2lvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IjE1LjYuMiJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL2NhbkRlZmluZVByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSExO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0QmFzZUNsYXNzZXMuanMiKSxvPXIuQ29tcG9uZW50LHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanMiKSxpPXMuaXNWYWxpZEVsZW1lbnQsYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeS5qcyIpO2UuZXhwb3J0cz1sKG8saSxhKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0SXRlcmF0b3JGbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUmJihvJiZlW29dfHxlW3NdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdH12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Iscz0iQEBpdGVyYXRvciI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL2xvd1ByaW9yaXR5V2FybmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL29ubHlDaGlsZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBzLmlzVmFsaWRFbGVtZW50KGUpfHxvKCIxNDMiKSxlfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZS5rZXk/dS5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4scyl7dmFyIF89dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1fJiYiYm9vbGVhbiIhPT1ffHwoZT1udWxsKSxudWxsPT09ZXx8InN0cmluZyI9PT1ffHwibnVtYmVyIj09PV98fCJvYmplY3QiPT09XyYmZS4kJHR5cGVvZj09PWEpcmV0dXJuIG4ocyxlLCIiPT09dD9jK3IoZSwwKTp0KSwxO3ZhciBwLGYsbT0wLGg9IiI9PT10P2M6dCtkO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspcD1lW2ddLGY9aCtyKHAsZyksbSs9byhwLGYsbixzKTtlbHNle3ZhciBiPWwoZSk7aWYoYil7dmFyIEUseT1iLmNhbGwoZSk7aWYoYiE9PWUuZW50cmllcylmb3IodmFyIHY9MDshKEU9eS5uZXh0KCkpLmRvbmU7KXA9RS52YWx1ZSxmPWgrcihwLHYrKyksbSs9byhwLGYsbixzKTtlbHNlIGZvcig7IShFPXkubmV4dCgpKS5kb25lOyl7dmFyIFQ9RS52YWx1ZTtUJiYocD1UWzFdLGY9aCt1LmVzY2FwZShUWzBdKStkK3IocCwwKSxtKz1vKHAsZixuLHMpKX19ZWxzZSBpZigib2JqZWN0Ij09PV8pe3ZhciBBPSIiLEM9U3RyaW5nKGUpO2koIjMxIiwiW29iamVjdCBPYmplY3RdIj09PUM/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAiKSsifSI6QyxBKX19cmV0dXJuIG19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIG51bGw9PWU/MDpvKGUsIiIsdCxuKX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGE9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudFN5bWJvbC5qcyIpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0SXRlcmF0b3JGbi5qcyIpLHU9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1mdWxsLXNjcmVlbi9ub2RlX21vZHVsZXMvcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIikpLGM9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksIi4iKSxkPSI6IjtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZ1bGwtc2NyZWVuL25vZGVfbW9kdWxlcy9yZWFjdC9yZWFjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9yZWFjdC1nYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbih0LHIpe2UuZXhwb3J0cz1yKG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciBvPW5bcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHQpLG8ubD0hMCxvLmV4cG9ydHN9dmFyIG49e307cmV0dXJuIHQubT1lLHQuYz1uLHQuZD1mdW5jdGlvbihlLG4scil7dC5vKGUsbil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LHQubj1mdW5jdGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gdC5kKG4sImEiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPSIiLHQodC5zPTIpfShbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2NvbnNvbGUud2FybigiW3JlYWN0LWdhXSIsZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4oMCxULmRlZmF1bHQpKGUsSCl9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1uWzBdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVKXtpZigic3RyaW5nIiE9dHlwZW9mIG8pcmV0dXJuIHZvaWQoMCxMLmRlZmF1bHQpKCJnYSBjb21tYW5kIG11c3QgYmUgYSBzdHJpbmciKTshQiYmQXJyYXkuaXNBcnJheShlKXx8VS5hcHBseSh2b2lkIDAsbiksQXJyYXkuaXNBcnJheShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1UuYXBwbHkodm9pZCAwLHMoW2UrIi4iK29dLmNvbmNhdChuLnNsaWNlKDEpKSkpfSl9fWZ1bmN0aW9uIGwoZSx0KXtpZighZSlyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoImdhVHJhY2tpbmdJRCBpcyByZXF1aXJlZCBpbiBpbml0aWFsaXplKCkiKTt0JiYodC5kZWJ1ZyYmITA9PT10LmRlYnVnJiYoTj0hMCksITE9PT10LnRpdGxlQ2FzZSYmKEg9ITEpKSx0JiZ0LmdhT3B0aW9ucz9VKCJjcmVhdGUiLGUsdC5nYU9wdGlvbnMpOlUoImNyZWF0ZSIsZSwiYXV0byIpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYhMD09PXQudGVzdE1vZGUpRj0hMDtlbHNle2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93KXJldHVybiExOygwLGouZGVmYXVsdCkodCl9cmV0dXJuIEI9IXR8fCJib29sZWFuIiE9dHlwZW9mIHQuYWx3YXlzU2VuZFRvRGVmYXVsdFRyYWNrZXJ8fHQuYWx3YXlzU2VuZFRvRGVmYXVsdFRyYWNrZXIsQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjp5KGUpKSlyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoIkFsbCBjb25maWdzIG11c3QgYmUgYW4gb2JqZWN0Iik7bChlLnRyYWNraW5nSWQsZSl9KTpsKGUsdCksITB9ZnVuY3Rpb24gYygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHQubGVuZ3RoPjAmJihVLmFwcGx5KHZvaWQgMCx0KSxOJiYoKDAsdy5kZWZhdWx0KSgiY2FsbGVkIGdhKCdhcmd1bWVudHMnKTsiKSwoMCx3LmRlZmF1bHQpKCJ3aXRoIGFyZ3VtZW50czogIitKU09OLnN0cmluZ2lmeSh0KSkpKSx3aW5kb3cuZ2F9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBlPyJvYmplY3QiIT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6eShlKSk/dm9pZCgwLEwuZGVmYXVsdCkoIkV4cGVjdGVkIGBmaWVsZHNPYmplY3RgIGFyZyB0byBiZSBhbiBPYmplY3QiKTooMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKDAsTC5kZWZhdWx0KSgiZW1wdHkgYGZpZWxkc09iamVjdGAgZ2l2ZW4gdG8gLnNldCgpIiksYSh0LCJzZXQiLGUpLHZvaWQoTiYmKCgwLHcuZGVmYXVsdCkoImNhbGxlZCBnYSgnc2V0JywgZmllbGRzT2JqZWN0KTsiKSwoMCx3LmRlZmF1bHQpKCJ3aXRoIGZpZWxkc09iamVjdDogIitKU09OLnN0cmluZ2lmeShlKSkpKSk6dm9pZCgwLEwuZGVmYXVsdCkoImBmaWVsZHNPYmplY3RgIGlzIHJlcXVpcmVkIGluIC5zZXQoKSIpfWZ1bmN0aW9uIF8oZSx0KXthKHQsInNlbmQiLGUpLE4mJigoMCx3LmRlZmF1bHQpKCJjYWxsZWQgZ2EoJ3NlbmQnLCBmaWVsZE9iamVjdCk7IiksKDAsdy5kZWZhdWx0KSgid2l0aCBmaWVsZE9iamVjdDogIitKU09OLnN0cmluZ2lmeShlKSksKDAsdy5kZWZhdWx0KSgid2l0aCB0cmFja2VyczogIitKU09OLnN0cmluZ2lmeSh0KSkpfWZ1bmN0aW9uIHAoZSx0LG4pe2lmKCFlKXJldHVybiB2b2lkKDAsTC5kZWZhdWx0KSgicGF0aCBpcyByZXF1aXJlZCBpbiAucGFnZXZpZXcoKSIpO3ZhciByPSgwLFMuZGVmYXVsdCkoZSk7aWYoIiI9PT1yKXJldHVybiB2b2lkKDAsTC5kZWZhdWx0KSgicGF0aCBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIGluIC5wYWdldmlldygpIik7dmFyIG89e307aWYobiYmKG8udGl0bGU9biksImZ1bmN0aW9uIj09dHlwZW9mIGMmJihhKHQsInNlbmQiLEUoe2hpdFR5cGU6InBhZ2V2aWV3IixwYWdlOnJ9LG8pKSxOKSl7KDAsdy5kZWZhdWx0KSgiY2FsbGVkIGdhKCdzZW5kJywgJ3BhZ2V2aWV3JywgcGF0aCk7Iik7dmFyIHM9IiI7biYmKHM9IiBhbmQgdGl0bGU6ICIrbiksKDAsdy5kZWZhdWx0KSgid2l0aCBwYXRoOiAiK3Ircyl9fWZ1bmN0aW9uIGYoZSx0KXtpZighZSlyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoIm1vZGFsTmFtZSBpcyByZXF1aXJlZCBpbiAubW9kYWx2aWV3KG1vZGFsTmFtZSkiKTt2YXIgbj0oMCxDLmRlZmF1bHQpKCgwLFMuZGVmYXVsdCkoZSkpO2lmKCIiPT09bilyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoIm1vZGFsTmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc2luZ2xlIC8gaW4gLm1vZGFsdmlldygpIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpe3ZhciByPSIvbW9kYWwvIituO2EodCwic2VuZCIsInBhZ2V2aWV3IixyKSxOJiYoKDAsdy5kZWZhdWx0KSgiY2FsbGVkIGdhKCdzZW5kJywgJ3BhZ2V2aWV3JywgcGF0aCk7IiksKDAsdy5kZWZhdWx0KSgid2l0aCBwYXRoOiAiK3IpKX19ZnVuY3Rpb24gbSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUuY2F0ZWdvcnksbj1lLnZhcmlhYmxlLHI9ZS52YWx1ZSxvPWUubGFiZWwscz1hcmd1bWVudHNbMV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpe2lmKCF0fHwhbnx8IXJ8fCJudW1iZXIiIT10eXBlb2YgcilyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoImFyZ3MuY2F0ZWdvcnksIGFyZ3MudmFyaWFibGUgQU5EIGFyZ3MudmFsdWUgYXJlIHJlcXVpcmVkIGluIHRpbWluZygpIEFORCBhcmdzLnZhbHVlIGhhcyB0byBiZSBhIG51bWJlciIpO3ZhciBhPXtoaXRUeXBlOiJ0aW1pbmciLHRpbWluZ0NhdGVnb3J5OmkodCksdGltaW5nVmFyOmkobiksdGltaW5nVmFsdWU6cn07byYmKGEudGltaW5nTGFiZWw9aShvKSksXyhhLHMpfX1mdW5jdGlvbiBoKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzWzFdLG49ZS5jYXRlZ29yeSxyPWUuYWN0aW9uLHM9ZS5sYWJlbCxhPWUudmFsdWUsbD1lLm5vbkludGVyYWN0aW9uLHU9ZS50cmFuc3BvcnQsZD1vKGUsWyJjYXRlZ29yeSIsImFjdGlvbiIsImxhYmVsIiwidmFsdWUiLCJub25JbnRlcmFjdGlvbiIsInRyYW5zcG9ydCJdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyl7aWYoIW58fCFyKXJldHVybiB2b2lkKDAsTC5kZWZhdWx0KSgiYXJncy5jYXRlZ29yeSBBTkQgYXJncy5hY3Rpb24gYXJlIHJlcXVpcmVkIGluIGV2ZW50KCkiKTt2YXIgcD17aGl0VHlwZToiZXZlbnQiLGV2ZW50Q2F0ZWdvcnk6aShuKSxldmVudEFjdGlvbjppKHIpfTtzJiYocC5ldmVudExhYmVsPWkocykpLHZvaWQgMCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGE/KDAsTC5kZWZhdWx0KSgiRXhwZWN0ZWQgYGFyZ3MudmFsdWVgIGFyZyB0byBiZSBhIE51bWJlci4iKTpwLmV2ZW50VmFsdWU9YSksdm9pZCAwIT09bCYmKCJib29sZWFuIiE9dHlwZW9mIGw/KDAsTC5kZWZhdWx0KSgiYGFyZ3Mubm9uSW50ZXJhY3Rpb25gIG11c3QgYmUgYSBib29sZWFuLiIpOnAubm9uSW50ZXJhY3Rpb249bCksdm9pZCAwIT09dSYmKCJzdHJpbmciIT10eXBlb2YgdT8oMCxMLmRlZmF1bHQpKCJgYXJncy50cmFuc3BvcnRgIG11c3QgYmUgYSBzdHJpbmcuIik6KC0xPT09WyJiZWFjb24iLCJ4aHIiLCJpbWFnZSJdLmluZGV4T2YodSkmJigwLEwuZGVmYXVsdCkoImBhcmdzLnRyYW5zcG9ydGAgbXVzdCBiZSBlaXRoZXIgb25lIG9mIHRoZXNlIHZhbHVlczogYGJlYWNvbmAsIGB4aHJgIG9yIGBpbWFnZWAiKSxwLnRyYW5zcG9ydD11KSksT2JqZWN0LmtleXMoZCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJkaW1lbnNpb24iPT09ZS5zdWJzdHIoMCwiZGltZW5zaW9uIi5sZW5ndGgpfSkuZm9yRWFjaChmdW5jdGlvbihlKXtwW2VdPWRbZV19KSxPYmplY3Qua2V5cyhkKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIm1ldHJpYyI9PT1lLnN1YnN0cigwLCJtZXRyaWMiLmxlbmd0aCl9KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3BbZV09ZFtlXX0pLF8ocCx0KX19ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPWUuZGVzY3JpcHRpb24scj1lLmZhdGFsO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXt2YXIgbz17aGl0VHlwZToiZXhjZXB0aW9uIn07biYmKG8uZXhEZXNjcmlwdGlvbj1pKG4pKSx2b2lkIDAhPT1yJiYoImJvb2xlYW4iIT10eXBlb2Ygcj8oMCxMLmRlZmF1bHQpKCJgYXJncy5mYXRhbGAgbXVzdCBiZSBhIGJvb2xlYW4uIik6by5leEZhdGFsPXIpLF8obyx0KX19ZnVuY3Rpb24gYihlLHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIHZvaWQoMCxMLmRlZmF1bHQpKCJoaXRDYWxsYmFjayBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXtpZighZXx8IWUubGFiZWwpcmV0dXJuIHZvaWQoMCxMLmRlZmF1bHQpKCJhcmdzLmxhYmVsIGlzIHJlcXVpcmVkIGluIG91dGJvdW5kTGluaygpIik7dmFyIHI9e2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJPdXRib3VuZCIsZXZlbnRBY3Rpb246IkNsaWNrIixldmVudExhYmVsOmkoZS5sYWJlbCl9LG89ITEscz1mdW5jdGlvbigpe289ITAsdCgpfSxhPXNldFRpbWVvdXQocywyNTApLGw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYSksb3x8dCgpfTtyLmhpdENhbGxiYWNrPWwsXyhyLG4pfWVsc2Ugc2V0VGltZW91dCh0LDApfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnRlc3RNb2RlQVBJPXQuT3V0Ym91bmRMaW5rPXQucGx1Z2luPXZvaWQgMDt2YXIgRT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmluaXRpYWxpemU9dSx0LmdhPWMsdC5zZXQ9ZCx0LnNlbmQ9Xyx0LnBhZ2V2aWV3PXAsdC5tb2RhbHZpZXc9Zix0LnRpbWluZz1tLHQuZXZlbnQ9aCx0LmV4Y2VwdGlvbj1nLHQub3V0Ym91bmRMaW5rPWI7dmFyIHY9bigzKSxUPXIodiksQT1uKDYpLEM9cihBKSxPPW4oMSksUz1yKE8pLFI9big3KSxqPXIoUikseD1uKDApLEw9cih4KSxEPW4oOCksdz1yKEQpLE09big5KSxrPXIoTSksST1uKDEwKSxQPXIoSSksTj0hMSxIPSEwLEY9ITEsQj0hMCxVPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEY/ay5kZWZhdWx0LmdhLmFwcGx5KGsuZGVmYXVsdCxhcmd1bWVudHMpOndpbmRvdy5nYT8oZT13aW5kb3cpLmdhLmFwcGx5KGUsYXJndW1lbnRzKTooMCxMLmRlZmF1bHQpKCJSZWFjdEdBLmluaXRpYWxpemUgbXVzdCBiZSBjYWxsZWQgZmlyc3Qgb3IgR29vZ2xlQW5hbHl0aWNzIHNob3VsZCBiZSBsb2FkZWQgbWFudWFsbHkiKX0sRz10LnBsdWdpbj17cmVxdWlyZTpmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXtpZighZSlyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoImBuYW1lYCBpcyByZXF1aXJlZCBpbiAucmVxdWlyZSgpIik7dmFyIG49KDAsUy5kZWZhdWx0KShlKTtpZigiIj09PW4pcmV0dXJuIHZvaWQoMCxMLmRlZmF1bHQpKCJgbmFtZWAgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZyBpbiAucmVxdWlyZSgpIik7aWYodCl7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjp5KHQpKSlyZXR1cm4gdm9pZCgwLEwuZGVmYXVsdCkoIkV4cGVjdGVkIGBvcHRpb25zYCBhcmcgdG8gYmUgYW4gT2JqZWN0Iik7MD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKDAsTC5kZWZhdWx0KSgiRW1wdHkgYG9wdGlvbnNgIGdpdmVuIHRvIC5yZXF1aXJlKCkiKSxjKCJyZXF1aXJlIixuLHQpLE4mJigwLHcuZGVmYXVsdCkoImNhbGxlZCBnYSgncmVxdWlyZScsICciK24rIicsICIrSlNPTi5zdHJpbmdpZnkodCkpfWVsc2UgYygicmVxdWlyZSIsbiksTiYmKDAsdy5kZWZhdWx0KSgiY2FsbGVkIGdhKCdyZXF1aXJlJywgJyIrbisiJyk7Iil9fSxleGVjdXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwO2lmKDE9PShhcmd1bWVudHMubGVuZ3RoPD0yPzA6YXJndW1lbnRzLmxlbmd0aC0yKT9uPWFyZ3VtZW50cy5sZW5ndGg8PTI/dm9pZCAwOmFyZ3VtZW50c1syXToocj1hcmd1bWVudHMubGVuZ3RoPD0yP3ZvaWQgMDphcmd1bWVudHNbMl0sbj1hcmd1bWVudHMubGVuZ3RoPD0zP3ZvaWQgMDphcmd1bWVudHNbM10pLCJmdW5jdGlvbiI9PXR5cGVvZiBjKWlmKCJzdHJpbmciIT10eXBlb2YgZSkoMCxMLmRlZmF1bHQpKCJFeHBlY3RlZCBgcGx1Z2luTmFtZWAgYXJnIHRvIGJlIGEgU3RyaW5nLiIpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiB0KSgwLEwuZGVmYXVsdCkoIkV4cGVjdGVkIGBhY3Rpb25gIGFyZyB0byBiZSBhIFN0cmluZy4iKTtlbHNle3ZhciBvPWUrIjoiK3Q7bj1ufHxudWxsLHImJm4/KGMobyxyLG4pLE4mJigoMCx3LmRlZmF1bHQpKCJjYWxsZWQgZ2EoJyIrbysiJyk7IiksKDAsdy5kZWZhdWx0KSgnYWN0aW9uVHlwZTogIicrcisnIiB3aXRoIHBheWxvYWQ6ICcrSlNPTi5zdHJpbmdpZnkobikpKSk6bj8oYyhvLG4pLE4mJigoMCx3LmRlZmF1bHQpKCJjYWxsZWQgZ2EoJyIrbysiJyk7IiksKDAsdy5kZWZhdWx0KSgid2l0aCBwYXlsb2FkOiAiK0pTT04uc3RyaW5naWZ5KG4pKSkpOihjKG8pLE4mJigwLHcuZGVmYXVsdCkoImNhbGxlZCBnYSgnIitvKyInKTsiKSl9fX07UC5kZWZhdWx0Lm9yaWdUcmFja0xpbms9UC5kZWZhdWx0LnRyYWNrTGluayxQLmRlZmF1bHQudHJhY2tMaW5rPWI7dmFyIHo9dC5PdXRib3VuZExpbms9UC5kZWZhdWx0O3QudGVzdE1vZGVBUEk9ay5kZWZhdWx0O3QuZGVmYXVsdD17aW5pdGlhbGl6ZTp1LGdhOmMsc2V0OmQsc2VuZDpfLHBhZ2V2aWV3OnAsbW9kYWx2aWV3OmYsdGltaW5nOm0sZXZlbnQ6aCxleGNlcHRpb246ZyxwbHVnaW46RyxvdXRib3VuZExpbms6YixPdXRib3VuZExpbms6eix0ZXN0TW9kZUFQSTprLmRlZmF1bHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4oMCxpLmRlZmF1bHQpKGUpPygoMCxjLmRlZmF1bHQpKCJUaGlzIGFyZyBsb29rcyBsaWtlIGFuIGVtYWlsIGFkZHJlc3MsIHJlZGFjdGluZy4iKSxkKTp0PygwLGwuZGVmYXVsdCkoZSk6ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PW87dmFyIHM9big0KSxpPXIocyksYT1uKDUpLGw9cihhKSx1PW4oMCksYz1yKHUpLGQ9IlJFREFDVEVEIChQb3RlbnRpYWwgRW1haWwgQWRkcmVzcykifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuL1teQF0rQFteQF0rLy50ZXN0KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigwLHMuZGVmYXVsdCkoZSkucmVwbGFjZSgvW0EtWmEtejAtOVx1MDBDMC1cdTAwRkZdK1teXHMtXSovZyxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ+MCYmdCtlLmxlbmd0aCE9PW4ubGVuZ3RoJiZlLnNlYXJjaChpKT4tMSYmIjoiIT09bi5jaGFyQXQodC0yKSYmKCItIiE9PW4uY2hhckF0KHQrZS5sZW5ndGgpfHwiLSI9PT1uLmNoYXJBdCh0LTEpKSYmbi5jaGFyQXQodC0xKS5zZWFyY2goL1teXHMtXS8pPDA/ZS50b0xvd2VyQ2FzZSgpOmUuc3Vic3RyKDEpLnNlYXJjaCgvW0EtWl18XC4uLyk+LTE/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPW4oMSkscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9L14oYXxhbnxhbmR8YXN8YXR8YnV0fGJ5fGVufGZvcnxpZnxpbnxub3J8b2Z8b258b3J8cGVyfHRoZXx0b3x2cz9cLj98dmlhKSQvaX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiIvIj09PWUuc3Vic3RyaW5nKDAsMSk/ZS5zdWJzdHJpbmcoMSk6ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0LG4scixvLHMsaSl7ZS5Hb29nbGVBbmFseXRpY3NPYmplY3Q9byxlW29dPWVbb118fGZ1bmN0aW9uKCl7KGVbb10ucT1lW29dLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGVbb10ubD0xKm5ldyBEYXRlLHM9dC5jcmVhdGVFbGVtZW50KG4pLGk9dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuKVswXSxzLmFzeW5jPTEscy5zcmM9cixpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsaSl9KHdpbmRvdyxkb2N1bWVudCwic2NyaXB0IixlJiZlLmdhQWRkcmVzcz9lLmdhQWRkcmVzczoiaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzIiwiZ2EiKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtjb25zb2xlLmluZm8oIltyZWFjdC1nYV0iLGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5nYUNhbGxzPVtdO3QuZGVmYXVsdD17Y2FsbHM6cixnYTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07ci5wdXNoKFtdLmNvbmNhdCh0KSl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigxMSksYz1yKHUpLGQ9bigxMiksXz1yKGQpLHA9bigwKSxmPXIocCksbT0iX2JsYW5rIixoPTEsZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLGk7byh0aGlzLHQpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoYSksdT0wO3U8YTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj1zKHRoaXMsKGU9dC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciBuPXIucHJvcHMsbz1uLnRhcmdldCxzPW4uZXZlbnRMYWJlbCxpPW4udG8sYT1uLm9uQ2xpY2ssbD17bGFiZWw6c30sdT1vIT09bSxjPSEoZS5jdHJsS2V5fHxlLnNoaWZ0S2V5fHxlLm1ldGFLZXl8fGUuYnV0dG9uPT09aCk7dSYmYz8oZS5wcmV2ZW50RGVmYXVsdCgpLHQudHJhY2tMaW5rKGwsZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24uaHJlZj1pfSkpOnQudHJhY2tMaW5rKGwsZnVuY3Rpb24oKXt9KSxhJiZhKGUpfSxpPW4scyhyLGkpfXJldHVybiBpKHQsZSksbCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YSh7fSx0aGlzLnByb3BzLHtocmVmOnRoaXMucHJvcHMudG8sb25DbGljazp0aGlzLmhhbmRsZUNsaWNrfSk7cmV0dXJuIGRlbGV0ZSBlLmV2ZW50TGFiZWwsYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLGUpfX1dKSx0fSh1LkNvbXBvbmVudCk7Zy5wcm9wVHlwZXM9e2V2ZW50TGFiZWw6Xy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHRhcmdldDpfLmRlZmF1bHQuc3RyaW5nLHRvOl8uZGVmYXVsdC5zdHJpbmcsb25DbGljazpfLmRlZmF1bHQuZnVuY30sZy5kZWZhdWx0UHJvcHM9e3RhcmdldDpudWxsLHRvOm51bGwsb25DbGljazpudWxsfSxnLnRyYWNrTGluaz1mdW5jdGlvbigpeygwLGYuZGVmYXVsdCkoImdhIHRyYWNraW5nIG5vdCBlbmFibGVkIil9LHQuZGVmYXVsdD1nfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1lfSxmdW5jdGlvbihlLG4pe2UuZXhwb3J0cz10fV0pfSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC9HcmlkSXRlbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMDt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRyYWdnYWJsZS9kaXN0L3JlYWN0LWRyYWdnYWJsZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzaXphYmxlL2luZGV4LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC91dGlscy5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLGg9cihtKSxnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyLGk7byh0aGlzLHQpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoYSksdT0wO3U8YTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj1zKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIuc3RhdGU9e3Jlc2l6aW5nOm51bGwsZHJhZ2dpbmc6bnVsbCxjbGFzc05hbWU6IiJ9LGk9bixzKHIsaSl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5jYWxjQ29sV2lkdGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5tYXJnaW4sbj1lLmNvbnRhaW5lclBhZGRpbmcscj1lLmNvbnRhaW5lcldpZHRoLG89ZS5jb2xzO3JldHVybihyLXRbMF0qKG8tMSktMipuWzBdKS9vfSx0LnByb3RvdHlwZS5jYWxjUG9zaXRpb249ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz10aGlzLnByb3BzLGk9cy5tYXJnaW4sYT1zLmNvbnRhaW5lclBhZGRpbmcsbD1zLnJvd0hlaWdodCx1PXRoaXMuY2FsY0NvbFdpZHRoKCksYz17bGVmdDpNYXRoLnJvdW5kKCh1K2lbMF0pKmUrYVswXSksdG9wOk1hdGgucm91bmQoKGwraVsxXSkqdCthWzFdKSx3aWR0aDpuPT09MS8wP246TWF0aC5yb3VuZCh1Km4rTWF0aC5tYXgoMCxuLTEpKmlbMF0pLGhlaWdodDpyPT09MS8wP3I6TWF0aC5yb3VuZChsKnIrTWF0aC5tYXgoMCxyLTEpKmlbMV0pfTtyZXR1cm4gbyYmby5yZXNpemluZyYmKGMud2lkdGg9TWF0aC5yb3VuZChvLnJlc2l6aW5nLndpZHRoKSxjLmhlaWdodD1NYXRoLnJvdW5kKG8ucmVzaXppbmcuaGVpZ2h0KSksbyYmby5kcmFnZ2luZyYmKGMudG9wPU1hdGgucm91bmQoby5kcmFnZ2luZy50b3ApLGMubGVmdD1NYXRoLnJvdW5kKG8uZHJhZ2dpbmcubGVmdCkpLGN9LHQucHJvdG90eXBlLmNhbGNYWT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLm1hcmdpbixvPW4uY29scyxzPW4ucm93SGVpZ2h0LGk9bi53LGE9bi5oLGw9bi5tYXhSb3dzLHU9dGhpcy5jYWxjQ29sV2lkdGgoKSxjPU1hdGgucm91bmQoKHQtclswXSkvKHUrclswXSkpLGQ9TWF0aC5yb3VuZCgoZS1yWzFdKS8ocytyWzFdKSk7cmV0dXJuIGM9TWF0aC5tYXgoTWF0aC5taW4oYyxvLWkpLDApLGQ9TWF0aC5tYXgoTWF0aC5taW4oZCxsLWEpLDApLHt4OmMseTpkfX0sdC5wcm90b3R5cGUuY2FsY1dIPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaGVpZ2h0LG49ZS53aWR0aCxyPXRoaXMucHJvcHMsbz1yLm1hcmdpbixzPXIubWF4Um93cyxpPXIuY29scyxhPXIucm93SGVpZ2h0LGw9ci54LHU9ci55LGM9dGhpcy5jYWxjQ29sV2lkdGgoKSxkPU1hdGgucm91bmQoKG4rb1swXSkvKGMrb1swXSkpLF89TWF0aC5yb3VuZCgodCtvWzFdKS8oYStvWzFdKSk7cmV0dXJuIGQ9TWF0aC5tYXgoTWF0aC5taW4oZCxpLWwpLDApLF89TWF0aC5tYXgoTWF0aC5taW4oXyxzLXUpLDApLHt3OmQsaDpffX0sdC5wcm90b3R5cGUuY3JlYXRlU3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQudXNlUGVyY2VudGFnZXMscj10LmNvbnRhaW5lcldpZHRoLG89dC51c2VDU1NUcmFuc2Zvcm1zLHM9dm9pZCAwO3JldHVybiBvP3M9KDAsZi5zZXRUcmFuc2Zvcm0pKGUpOihzPSgwLGYuc2V0VG9wTGVmdCkoZSksbiYmKHMubGVmdD0oMCxmLnBlcmMpKGUubGVmdC9yKSxzLndpZHRoPSgwLGYucGVyYykoZS53aWR0aC9yKSkpLHN9LHQucHJvdG90eXBlLm1peGluRHJhZ2dhYmxlPWZ1bmN0aW9uKGUpe3JldHVybiB1LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLkRyYWdnYWJsZUNvcmUse29uU3RhcnQ6dGhpcy5vbkRyYWdIYW5kbGVyKCJvbkRyYWdTdGFydCIpLG9uRHJhZzp0aGlzLm9uRHJhZ0hhbmRsZXIoIm9uRHJhZyIpLG9uU3RvcDp0aGlzLm9uRHJhZ0hhbmRsZXIoIm9uRHJhZ1N0b3AiKSxoYW5kbGU6dGhpcy5wcm9wcy5oYW5kbGUsY2FuY2VsOiIucmVhY3QtcmVzaXphYmxlLWhhbmRsZSIrKHRoaXMucHJvcHMuY2FuY2VsPyIsIit0aGlzLnByb3BzLmNhbmNlbDoiIil9LGUpfSx0LnByb3RvdHlwZS5taXhpblJlc2l6YWJsZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLmNvbHMsbz1uLngscz1uLm1pblcsaT1uLm1pbkgsYT1uLm1heFcsbD1uLm1heEgsYz10aGlzLmNhbGNQb3NpdGlvbigwLDAsci1vLDApLndpZHRoLGQ9dGhpcy5jYWxjUG9zaXRpb24oMCwwLHMsaSksXz10aGlzLmNhbGNQb3NpdGlvbigwLDAsYSxsKSxmPVtkLndpZHRoLGQuaGVpZ2h0XSxtPVtNYXRoLm1pbihfLndpZHRoLGMpLE1hdGgubWluKF8uaGVpZ2h0LDEvMCldO3JldHVybiB1LmRlZmF1bHQuY3JlYXRlRWxlbWVudChwLlJlc2l6YWJsZSx7d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsbWluQ29uc3RyYWludHM6ZixtYXhDb25zdHJhaW50czptLG9uUmVzaXplU3RvcDp0aGlzLm9uUmVzaXplSGFuZGxlcigib25SZXNpemVTdG9wIiksb25SZXNpemVTdGFydDp0aGlzLm9uUmVzaXplSGFuZGxlcigib25SZXNpemVTdGFydCIpLG9uUmVzaXplOnRoaXMub25SZXNpemVIYW5kbGVyKCJvblJlc2l6ZSIpfSxlKX0sdC5wcm90b3R5cGUub25EcmFnSGFuZGxlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIubm9kZSxzPXIuZGVsdGFYLGk9ci5kZWx0YVksYT10LnByb3BzW2VdO2lmKGEpe3ZhciBsPXt0b3A6MCxsZWZ0OjB9O3N3aXRjaChlKXtjYXNlIm9uRHJhZ1N0YXJ0Ijp2YXIgdT1vLm9mZnNldFBhcmVudDtpZighdSlyZXR1cm47dmFyIGM9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bC5sZWZ0PWQubGVmdC1jLmxlZnQrdS5zY3JvbGxMZWZ0LGwudG9wPWQudG9wLWMudG9wK3Uuc2Nyb2xsVG9wLHQuc2V0U3RhdGUoe2RyYWdnaW5nOmx9KTticmVhaztjYXNlIm9uRHJhZyI6aWYoIXQuc3RhdGUuZHJhZ2dpbmcpdGhyb3cgbmV3IEVycm9yKCJvbkRyYWcgY2FsbGVkIGJlZm9yZSBvbkRyYWdTdGFydC4iKTtsLmxlZnQ9dC5zdGF0ZS5kcmFnZ2luZy5sZWZ0K3MsbC50b3A9dC5zdGF0ZS5kcmFnZ2luZy50b3AraSx0LnNldFN0YXRlKHtkcmFnZ2luZzpsfSk7YnJlYWs7Y2FzZSJvbkRyYWdTdG9wIjppZighdC5zdGF0ZS5kcmFnZ2luZyl0aHJvdyBuZXcgRXJyb3IoIm9uRHJhZ0VuZCBjYWxsZWQgYmVmb3JlIG9uRHJhZ1N0YXJ0LiIpO2wubGVmdD10LnN0YXRlLmRyYWdnaW5nLmxlZnQsbC50b3A9dC5zdGF0ZS5kcmFnZ2luZy50b3AsdC5zZXRTdGF0ZSh7ZHJhZ2dpbmc6bnVsbH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJvbkRyYWdIYW5kbGVyIGNhbGxlZCB3aXRoIHVucmVjb2duaXplZCBoYW5kbGVyTmFtZTogIitlKX12YXIgXz10LmNhbGNYWShsLnRvcCxsLmxlZnQpLHA9Xy54LGY9Xy55O3JldHVybiBhLmNhbGwodCx0LnByb3BzLmkscCxmLHtlOm4sbm9kZTpvLG5ld1Bvc2l0aW9uOmx9KX19fSx0LnByb3RvdHlwZS5vblJlc2l6ZUhhbmRsZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbz1yLm5vZGUscz1yLnNpemUsaT10LnByb3BzW2VdO2lmKGkpe3ZhciBhPXQucHJvcHMsbD1hLmNvbHMsdT1hLngsYz1hLmksZD1hLm1heFcsXz1hLm1pblcscD1hLm1heEgsZj1hLm1pbkgsbT10LmNhbGNXSChzKSxoPW0udyxnPW0uaDtoPU1hdGgubWluKGgsbC11KSxoPU1hdGgubWF4KGgsMSksaD1NYXRoLm1heChNYXRoLm1pbihoLGQpLF8pLGc9TWF0aC5tYXgoTWF0aC5taW4oZyxwKSxmKSx0LnNldFN0YXRlKHtyZXNpemluZzoib25SZXNpemVTdG9wIj09PWU/bnVsbDpzfSksaS5jYWxsKHQsYyxoLGcse2U6bixub2RlOm8sc2l6ZTpzfSl9fX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUueCxuPWUueSxyPWUudyxvPWUuaCxzPWUuaXNEcmFnZ2FibGUsaT1lLmlzUmVzaXphYmxlLGw9ZS51c2VDU1NUcmFuc2Zvcm1zLGM9dGhpcy5jYWxjUG9zaXRpb24odCxuLHIsbyx0aGlzLnN0YXRlKSxkPXUuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pLF89dS5kZWZhdWx0LmNsb25lRWxlbWVudChkLHtjbGFzc05hbWU6KDAsaC5kZWZhdWx0KSgicmVhY3QtZ3JpZC1pdGVtIixkLnByb3BzLmNsYXNzTmFtZSx0aGlzLnByb3BzLmNsYXNzTmFtZSx7c3RhdGljOnRoaXMucHJvcHMuc3RhdGljLHJlc2l6aW5nOkJvb2xlYW4odGhpcy5zdGF0ZS5yZXNpemluZyksInJlYWN0LWRyYWdnYWJsZSI6cywicmVhY3QtZHJhZ2dhYmxlLWRyYWdnaW5nIjpCb29sZWFuKHRoaXMuc3RhdGUuZHJhZ2dpbmcpLGNzc1RyYW5zZm9ybXM6bH0pLHN0eWxlOmEoe30sdGhpcy5wcm9wcy5zdHlsZSxkLnByb3BzLnN0eWxlLHRoaXMuY3JlYXRlU3R5bGUoYykpfSk7cmV0dXJuIGkmJihfPXRoaXMubWl4aW5SZXNpemFibGUoXyxjKSkscyYmKF89dGhpcy5taXhpbkRyYWdnYWJsZShfKSksX30sdH0odS5kZWZhdWx0LkNvbXBvbmVudCk7Zy5wcm9wVHlwZXM9e2NoaWxkcmVuOmQuZGVmYXVsdC5lbGVtZW50LGNvbHM6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLGNvbnRhaW5lcldpZHRoOmQuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxyb3dIZWlnaHQ6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLG1hcmdpbjpkLmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxtYXhSb3dzOmQuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxjb250YWluZXJQYWRkaW5nOmQuZGVmYXVsdC5hcnJheS5pc1JlcXVpcmVkLHg6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHk6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHc6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLGg6ZC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLG1pblc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiJudW1iZXIiIT10eXBlb2Ygbj9uZXcgRXJyb3IoIm1pbldpZHRoIG5vdCBOdW1iZXIiKTpuPmUud3x8bj5lLm1heFc/bmV3IEVycm9yKCJtaW5XaWR0aCBsYXJnZXIgdGhhbiBpdGVtIHdpZHRoL21heFdpZHRoIik6dm9pZCAwfSxtYXhXOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIG4/bmV3IEVycm9yKCJtYXhXaWR0aCBub3QgTnVtYmVyIik6bjxlLnd8fG48ZS5taW5XP25ldyBFcnJvcigibWF4V2lkdGggc21hbGxlciB0aGFuIGl0ZW0gd2lkdGgvbWluV2lkdGgiKTp2b2lkIDB9LG1pbkg6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiJudW1iZXIiIT10eXBlb2Ygbj9uZXcgRXJyb3IoIm1pbkhlaWdodCBub3QgTnVtYmVyIik6bj5lLmh8fG4+ZS5tYXhIP25ldyBFcnJvcigibWluSGVpZ2h0IGxhcmdlciB0aGFuIGl0ZW0gaGVpZ2h0L21heEhlaWdodCIpOnZvaWQgMH0sbWF4SDpmdW5jdGlvbihlLHQpe3ZhciBuPWVbdF07cmV0dXJuIm51bWJlciIhPXR5cGVvZiBuP25ldyBFcnJvcigibWF4SGVpZ2h0IG5vdCBOdW1iZXIiKTpuPGUuaHx8bjxlLm1pbkg/bmV3IEVycm9yKCJtYXhIZWlnaHQgc21hbGxlciB0aGFuIGl0ZW0gaGVpZ2h0L21pbkhlaWdodCIpOnZvaWQgMH0saTpkLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsb25EcmFnU3RvcDpkLmRlZmF1bHQuZnVuYyxvbkRyYWdTdGFydDpkLmRlZmF1bHQuZnVuYyxvbkRyYWc6ZC5kZWZhdWx0LmZ1bmMsb25SZXNpemVTdG9wOmQuZGVmYXVsdC5mdW5jLG9uUmVzaXplU3RhcnQ6ZC5kZWZhdWx0LmZ1bmMsb25SZXNpemU6ZC5kZWZhdWx0LmZ1bmMsaXNEcmFnZ2FibGU6ZC5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxpc1Jlc2l6YWJsZTpkLmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLHN0YXRpYzpkLmRlZmF1bHQuYm9vbCx1c2VDU1NUcmFuc2Zvcm1zOmQuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsY2xhc3NOYW1lOmQuZGVmYXVsdC5zdHJpbmcsaGFuZGxlOmQuZGVmYXVsdC5zdHJpbmcsY2FuY2VsOmQuZGVmYXVsdC5zdHJpbmd9LGcuZGVmYXVsdFByb3BzPXtjbGFzc05hbWU6IiIsY2FuY2VsOiIiLGhhbmRsZToiIixtaW5IOjEsbWluVzoxLG1heEg6MS8wLG1heFc6MS8wfSx0LmRlZmF1bHQ9Z30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL1JlYWN0R3JpZExheW91dC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMDt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2VxdWFsL2luZGV4LmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL3V0aWxzLmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC9HcmlkSXRlbS5qcyIpLGI9cihnKSxFPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtvKHRoaXMsdCk7dmFyIGk9cyh0aGlzLGUuY2FsbCh0aGlzLG4scikpO3JldHVybiB5LmNhbGwoaSksKDAsaC5hdXRvQmluZEhhbmRsZXJzKShpLFsib25EcmFnU3RhcnQiLCJvbkRyYWciLCJvbkRyYWdTdG9wIiwib25SZXNpemVTdGFydCIsIm9uUmVzaXplIiwib25SZXNpemVTdG9wIl0pLGl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe21vdW50ZWQ6ITB9KSx0aGlzLm9uTGF5b3V0TWF5YmVDaGFuZ2VkKHRoaXMuc3RhdGUubGF5b3V0LHRoaXMucHJvcHMubGF5b3V0KX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDA7aWYoKDAscC5kZWZhdWx0KShlLmxheW91dCx0aGlzLnByb3BzLmxheW91dCkmJmUuY29tcGFjdFR5cGU9PT10aGlzLnByb3BzLmNvbXBhY3RUeXBlPygwLGguY2hpbGRyZW5FcXVhbCkodGhpcy5wcm9wcy5jaGlsZHJlbixlLmNoaWxkcmVuKXx8KHQ9dGhpcy5zdGF0ZS5sYXlvdXQpOnQ9ZS5sYXlvdXQsdCl7dmFyIG49KDAsaC5zeW5jaHJvbml6ZUxheW91dFdpdGhDaGlsZHJlbikodCxlLmNoaWxkcmVuLGUuY29scyx0aGlzLmNvbXBhY3RUeXBlKGUpKSxyPXRoaXMuc3RhdGUubGF5b3V0O3RoaXMuc2V0U3RhdGUoe2xheW91dDpufSksdGhpcy5vbkxheW91dE1heWJlQ2hhbmdlZChuLHIpfX0sdC5wcm90b3R5cGUuY29udGFpbmVySGVpZ2h0PWZ1bmN0aW9uKCl7aWYodGhpcy5wcm9wcy5hdXRvU2l6ZSl7dmFyIGU9KDAsaC5ib3R0b20pKHRoaXMuc3RhdGUubGF5b3V0KSx0PXRoaXMucHJvcHMuY29udGFpbmVyUGFkZGluZz90aGlzLnByb3BzLmNvbnRhaW5lclBhZGRpbmdbMV06dGhpcy5wcm9wcy5tYXJnaW5bMV07cmV0dXJuIGUqdGhpcy5wcm9wcy5yb3dIZWlnaHQrKGUtMSkqdGhpcy5wcm9wcy5tYXJnaW5bMV0rMip0KyJweCJ9fSx0LnByb3RvdHlwZS5jb21wYWN0VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KGU9dGhpcy5wcm9wcyksITE9PT1lLnZlcnRpY2FsQ29tcGFjdD9udWxsOmUuY29tcGFjdFR5cGV9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXIuZSxzPXIubm9kZSxpPXRoaXMuc3RhdGUubGF5b3V0LGE9KDAsaC5nZXRMYXlvdXRJdGVtKShpLGUpO2lmKGEpcmV0dXJuIHRoaXMuc2V0U3RhdGUoe29sZERyYWdJdGVtOigwLGguY2xvbmVMYXlvdXRJdGVtKShhKSxvbGRMYXlvdXQ6dGhpcy5zdGF0ZS5sYXlvdXR9KSx0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0KGksYSxhLG51bGwsbyxzKX0sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXIuZSxzPXIubm9kZSxpPXRoaXMuc3RhdGUub2xkRHJhZ0l0ZW0sYT10aGlzLnN0YXRlLmxheW91dCxsPXRoaXMucHJvcHMuY29scyx1PSgwLGguZ2V0TGF5b3V0SXRlbSkoYSxlKTtpZih1KXt2YXIgYz17dzp1LncsaDp1LmgseDp1LngseTp1LnkscGxhY2Vob2xkZXI6ITAsaTplfTthPSgwLGgubW92ZUVsZW1lbnQpKGEsdSx0LG4sITAsdGhpcy5wcm9wcy5wcmV2ZW50Q29sbGlzaW9uLHRoaXMuY29tcGFjdFR5cGUoKSxsKSx0aGlzLnByb3BzLm9uRHJhZyhhLGksdSxjLG8scyksdGhpcy5zZXRTdGF0ZSh7bGF5b3V0OigwLGguY29tcGFjdCkoYSx0aGlzLmNvbXBhY3RUeXBlKCksbCksYWN0aXZlRHJhZzpjfSl9fSx0LnByb3RvdHlwZS5vbkRyYWdTdG9wPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXIuZSxzPXIubm9kZSxpPXRoaXMuc3RhdGUub2xkRHJhZ0l0ZW0sYT10aGlzLnN0YXRlLmxheW91dCxsPXRoaXMucHJvcHMsdT1sLmNvbHMsYz1sLnByZXZlbnRDb2xsaXNpb24sZD0oMCxoLmdldExheW91dEl0ZW0pKGEsZSk7aWYoZCl7YT0oMCxoLm1vdmVFbGVtZW50KShhLGQsdCxuLCEwLGMsdGhpcy5jb21wYWN0VHlwZSgpLHUpLHRoaXMucHJvcHMub25EcmFnU3RvcChhLGksZCxudWxsLG8scyk7dmFyIF89KDAsaC5jb21wYWN0KShhLHRoaXMuY29tcGFjdFR5cGUoKSx1KSxwPXRoaXMuc3RhdGUub2xkTGF5b3V0O3RoaXMuc2V0U3RhdGUoe2FjdGl2ZURyYWc6bnVsbCxsYXlvdXQ6XyxvbGREcmFnSXRlbTpudWxsLG9sZExheW91dDpudWxsfSksdGhpcy5vbkxheW91dE1heWJlQ2hhbmdlZChfLHApfX0sdC5wcm90b3R5cGUub25MYXlvdXRNYXliZUNoYW5nZWQ9ZnVuY3Rpb24oZSx0KXt0fHwodD10aGlzLnN0YXRlLmxheW91dCksKDAscC5kZWZhdWx0KSh0LGUpfHx0aGlzLnByb3BzLm9uTGF5b3V0Q2hhbmdlKGUpfSx0LnByb3RvdHlwZS5vblJlc2l6ZVN0YXJ0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXIuZSxzPXIubm9kZSxpPXRoaXMuc3RhdGUubGF5b3V0LGE9KDAsaC5nZXRMYXlvdXRJdGVtKShpLGUpO2EmJih0aGlzLnNldFN0YXRlKHtvbGRSZXNpemVJdGVtOigwLGguY2xvbmVMYXlvdXRJdGVtKShhKSxvbGRMYXlvdXQ6dGhpcy5zdGF0ZS5sYXlvdXR9KSx0aGlzLnByb3BzLm9uUmVzaXplU3RhcnQoaSxhLGEsbnVsbCxvLHMpKX0sdC5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ci5lLHM9ci5ub2RlLGk9dGhpcy5zdGF0ZSxsPWkubGF5b3V0LHU9aS5vbGRSZXNpemVJdGVtLGM9dGhpcy5wcm9wcyxkPWMuY29scyxfPWMucHJldmVudENvbGxpc2lvbixwPSgwLGguZ2V0TGF5b3V0SXRlbSkobCxlKTtpZihwKXt2YXIgZj12b2lkIDA7aWYoXyl7dmFyIG09KDAsaC5nZXRBbGxDb2xsaXNpb25zKShsLGEoe30scCx7dzp0LGg6bn0pKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaSE9PXAuaX0pO2lmKGY9bS5sZW5ndGg+MCl7dmFyIGc9MS8wLGI9MS8wO20uZm9yRWFjaChmdW5jdGlvbihlKXtlLng+cC54JiYoZz1NYXRoLm1pbihnLGUueCkpLGUueT5wLnkmJihiPU1hdGgubWluKGIsZS55KSl9KSxOdW1iZXIuaXNGaW5pdGUoZykmJihwLnc9Zy1wLngpLE51bWJlci5pc0Zpbml0ZShiKSYmKHAuaD1iLXAueSl9fWZ8fChwLnc9dCxwLmg9bik7dmFyIEU9e3c6cC53LGg6cC5oLHg6cC54LHk6cC55LHN0YXRpYzohMCxpOmV9O3RoaXMucHJvcHMub25SZXNpemUobCx1LHAsRSxvLHMpLHRoaXMuc2V0U3RhdGUoe2xheW91dDooMCxoLmNvbXBhY3QpKGwsdGhpcy5jb21wYWN0VHlwZSgpLGQpLGFjdGl2ZURyYWc6RX0pfX0sdC5wcm90b3R5cGUub25SZXNpemVTdG9wPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXIuZSxzPXIubm9kZSxpPXRoaXMuc3RhdGUsYT1pLmxheW91dCxsPWkub2xkUmVzaXplSXRlbSx1PXRoaXMucHJvcHMuY29scyxjPSgwLGguZ2V0TGF5b3V0SXRlbSkoYSxlKTt0aGlzLnByb3BzLm9uUmVzaXplU3RvcChhLGwsYyxudWxsLG8scyk7dmFyIGQ9KDAsaC5jb21wYWN0KShhLHRoaXMuY29tcGFjdFR5cGUoKSx1KSxfPXRoaXMuc3RhdGUub2xkTGF5b3V0O3RoaXMuc2V0U3RhdGUoe2FjdGl2ZURyYWc6bnVsbCxsYXlvdXQ6ZCxvbGRSZXNpemVJdGVtOm51bGwsb2xkTGF5b3V0Om51bGx9KSx0aGlzLm9uTGF5b3V0TWF5YmVDaGFuZ2VkKGQsXyl9LHQucHJvdG90eXBlLnBsYWNlaG9sZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5hY3RpdmVEcmFnO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PXRoaXMucHJvcHMsbj10LndpZHRoLHI9dC5jb2xzLG89dC5tYXJnaW4scz10LmNvbnRhaW5lclBhZGRpbmcsaT10LnJvd0hlaWdodCxhPXQubWF4Um93cyxsPXQudXNlQ1NTVHJhbnNmb3JtcztyZXR1cm4gdS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYi5kZWZhdWx0LHt3OmUudyxoOmUuaCx4OmUueCx5OmUueSxpOmUuaSxjbGFzc05hbWU6InJlYWN0LWdyaWQtcGxhY2Vob2xkZXIiLGNvbnRhaW5lcldpZHRoOm4sY29sczpyLG1hcmdpbjpvLGNvbnRhaW5lclBhZGRpbmc6c3x8byxtYXhSb3dzOmEscm93SGVpZ2h0OmksaXNEcmFnZ2FibGU6ITEsaXNSZXNpemFibGU6ITEsdXNlQ1NTVHJhbnNmb3JtczpsfSx1LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsKSl9LHQucHJvdG90eXBlLnByb2Nlc3NHcmlkSXRlbT1mdW5jdGlvbihlKXtpZihlJiZlLmtleSl7dmFyIHQ9KDAsaC5nZXRMYXlvdXRJdGVtKSh0aGlzLnN0YXRlLmxheW91dCxTdHJpbmcoZS5rZXkpKTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLnByb3BzLHI9bi53aWR0aCxvPW4uY29scyxzPW4ubWFyZ2luLGk9bi5jb250YWluZXJQYWRkaW5nLGE9bi5yb3dIZWlnaHQsbD1uLm1heFJvd3MsYz1uLmlzRHJhZ2dhYmxlLGQ9bi5pc1Jlc2l6YWJsZSxfPW4udXNlQ1NTVHJhbnNmb3JtcyxwPW4uZHJhZ2dhYmxlQ2FuY2VsLGY9bi5kcmFnZ2FibGVIYW5kbGUsbT10aGlzLnN0YXRlLm1vdW50ZWQsZz1Cb29sZWFuKCF0LnN0YXRpYyYmYyYmKHQuaXNEcmFnZ2FibGV8fG51bGw9PXQuaXNEcmFnZ2FibGUpKSxFPUJvb2xlYW4oIXQuc3RhdGljJiZkJiYodC5pc1Jlc2l6YWJsZXx8bnVsbD09dC5pc1Jlc2l6YWJsZSkpO3JldHVybiB1LmRlZmF1bHQuY3JlYXRlRWxlbWVudChiLmRlZmF1bHQse2NvbnRhaW5lcldpZHRoOnIsY29sczpvLG1hcmdpbjpzLGNvbnRhaW5lclBhZGRpbmc6aXx8cyxtYXhSb3dzOmwscm93SGVpZ2h0OmEsY2FuY2VsOnAsaGFuZGxlOmYsb25EcmFnU3RvcDp0aGlzLm9uRHJhZ1N0b3Asb25EcmFnU3RhcnQ6dGhpcy5vbkRyYWdTdGFydCxvbkRyYWc6dGhpcy5vbkRyYWcsb25SZXNpemVTdGFydDp0aGlzLm9uUmVzaXplU3RhcnQsb25SZXNpemU6dGhpcy5vblJlc2l6ZSxvblJlc2l6ZVN0b3A6dGhpcy5vblJlc2l6ZVN0b3AsaXNEcmFnZ2FibGU6Zyxpc1Jlc2l6YWJsZTpFLHVzZUNTU1RyYW5zZm9ybXM6XyYmbSx1c2VQZXJjZW50YWdlczohbSx3OnQudyxoOnQuaCx4OnQueCx5OnQueSxpOnQuaSxtaW5IOnQubWluSCxtaW5XOnQubWluVyxtYXhIOnQubWF4SCxtYXhXOnQubWF4VyxzdGF0aWM6dC5zdGF0aWN9LGUpfX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNsYXNzTmFtZSxyPXQuc3R5bGUsbz0oMCxtLmRlZmF1bHQpKCJyZWFjdC1ncmlkLWxheW91dCIsbikscz1hKHtoZWlnaHQ6dGhpcy5jb250YWluZXJIZWlnaHQoKX0scik7cmV0dXJuIHUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6byxzdHlsZTpzfSx1LmRlZmF1bHQuQ2hpbGRyZW4ubWFwKHRoaXMucHJvcHMuY2hpbGRyZW4sZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvY2Vzc0dyaWRJdGVtKHQpfSksdGhpcy5wbGFjZWhvbGRlcigpKX0sdH0odS5kZWZhdWx0LkNvbXBvbmVudCk7RS5kaXNwbGF5TmFtZT0iUmVhY3RHcmlkTGF5b3V0IixFLnByb3BUeXBlcz17Y2xhc3NOYW1lOmQuZGVmYXVsdC5zdHJpbmcsc3R5bGU6ZC5kZWZhdWx0Lm9iamVjdCx3aWR0aDpkLmRlZmF1bHQubnVtYmVyLGF1dG9TaXplOmQuZGVmYXVsdC5ib29sLGNvbHM6ZC5kZWZhdWx0Lm51bWJlcixkcmFnZ2FibGVDYW5jZWw6ZC5kZWZhdWx0LnN0cmluZyxkcmFnZ2FibGVIYW5kbGU6ZC5kZWZhdWx0LnN0cmluZyx2ZXJ0aWNhbENvbXBhY3Q6ZnVuY3Rpb24oZSl7ZS52ZXJ0aWNhbENvbXBhY3QsMX0sY29tcGFjdFR5cGU6ZC5kZWZhdWx0Lm9uZU9mKFsidmVydGljYWwiLCJob3Jpem9udGFsIl0pLGxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dDt2b2lkIDAhPT10JiYoMCxoLnZhbGlkYXRlTGF5b3V0KSh0LCJsYXlvdXQiKX0sbWFyZ2luOmQuZGVmYXVsdC5hcnJheU9mKGQuZGVmYXVsdC5udW1iZXIpLGNvbnRhaW5lclBhZGRpbmc6ZC5kZWZhdWx0LmFycmF5T2YoZC5kZWZhdWx0Lm51bWJlcikscm93SGVpZ2h0OmQuZGVmYXVsdC5udW1iZXIsbWF4Um93czpkLmRlZmF1bHQubnVtYmVyLGlzRHJhZ2dhYmxlOmQuZGVmYXVsdC5ib29sLGlzUmVzaXphYmxlOmQuZGVmYXVsdC5ib29sLHByZXZlbnRDb2xsaXNpb246ZC5kZWZhdWx0LmJvb2wsdXNlQ1NTVHJhbnNmb3JtczpkLmRlZmF1bHQuYm9vbCxvbkxheW91dENoYW5nZTpkLmRlZmF1bHQuZnVuYyxvbkRyYWdTdGFydDpkLmRlZmF1bHQuZnVuYyxvbkRyYWc6ZC5kZWZhdWx0LmZ1bmMsb25EcmFnU3RvcDpkLmRlZmF1bHQuZnVuYyxvblJlc2l6ZVN0YXJ0OmQuZGVmYXVsdC5mdW5jLG9uUmVzaXplOmQuZGVmYXVsdC5mdW5jLG9uUmVzaXplU3RvcDpkLmRlZmF1bHQuZnVuYyxjaGlsZHJlbjpmdW5jdGlvbihlLHQpe3ZhciBuPWVbdF0scj17fTt1LmRlZmF1bHQuQ2hpbGRyZW4uZm9yRWFjaChuLGZ1bmN0aW9uKGUpe2lmKHJbZS5rZXldKXRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGNoaWxkIGtleSAiJytlLmtleSsnIiBmb3VuZCEgVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGluIFJlYWN0R3JpZExheW91dC4nKTtyW2Uua2V5XT0hMH0pfX0sRS5kZWZhdWx0UHJvcHM9e2F1dG9TaXplOiEwLGNvbHM6MTIsY2xhc3NOYW1lOiIiLHN0eWxlOnt9LGRyYWdnYWJsZUhhbmRsZToiIixkcmFnZ2FibGVDYW5jZWw6IiIsY29udGFpbmVyUGFkZGluZzpudWxsLHJvd0hlaWdodDoxNTAsbWF4Um93czoxLzAsbGF5b3V0OltdLG1hcmdpbjpbMTAsMTBdLGlzRHJhZ2dhYmxlOiEwLGlzUmVzaXphYmxlOiEwLHVzZUNTU1RyYW5zZm9ybXM6ITAsdmVydGljYWxDb21wYWN0OiEwLGNvbXBhY3RUeXBlOiJ2ZXJ0aWNhbCIscHJldmVudENvbGxpc2lvbjohMSxvbkxheW91dENoYW5nZTpoLm5vb3Asb25EcmFnU3RhcnQ6aC5ub29wLG9uRHJhZzpoLm5vb3Asb25EcmFnU3RvcDpoLm5vb3Asb25SZXNpemVTdGFydDpoLm5vb3Asb25SZXNpemU6aC5ub29wLG9uUmVzaXplU3RvcDpoLm5vb3B9O3ZhciB5PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17YWN0aXZlRHJhZzpudWxsLGxheW91dDooMCxoLnN5bmNocm9uaXplTGF5b3V0V2l0aENoaWxkcmVuKSh0aGlzLnByb3BzLmxheW91dCx0aGlzLnByb3BzLmNoaWxkcmVuLHRoaXMucHJvcHMuY29scyx0aGlzLmNvbXBhY3RUeXBlKCkpLG1vdW50ZWQ6ITEsb2xkRHJhZ0l0ZW06bnVsbCxvbGRMYXlvdXQ6bnVsbCxvbGRSZXNpemVJdGVtOm51bGx9fTt0LmRlZmF1bHQ9RX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL1Jlc3BvbnNpdmVSZWFjdEdyaWRMYXlvdXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gYShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dC5fX2VzTW9kdWxlPSEwO3ZhciBsPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmlzZXF1YWwvaW5kZXguanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC91dGlscy5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZ3JpZC1sYXlvdXQvYnVpbGQvcmVzcG9uc2l2ZVV0aWxzLmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC9SZWFjdEdyaWRMYXlvdXQuanMiKSxiPXIoZyksRT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyLG87cyh0aGlzLHQpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHU9QXJyYXkoYSksYz0wO2M8YTtjKyspdVtjXT1hcmd1bWVudHNbY107cmV0dXJuIG49cj1pKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdCh1KSkpLHIuc3RhdGU9ci5nZW5lcmF0ZUluaXRpYWxTdGF0ZSgpLHIub25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ7ci5wcm9wcy5vbkxheW91dENoYW5nZShlLGwoe30sci5wcm9wcy5sYXlvdXRzLCh0PXt9LHRbci5zdGF0ZS5icmVha3BvaW50XT1lLHQpKSl9LG89bixpKHIsbyl9cmV0dXJuIGEodCxlKSx0LnByb3RvdHlwZS5nZW5lcmF0ZUluaXRpYWxTdGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLndpZHRoLG49ZS5icmVha3BvaW50cyxyPWUubGF5b3V0cyxvPWUuY29scyxzPSgwLGguZ2V0QnJlYWtwb2ludEZyb21XaWR0aCkobix0KSxpPSgwLGguZ2V0Q29sc0Zyb21CcmVha3BvaW50KShzLG8pLGE9ITE9PT10aGlzLnByb3BzLnZlcnRpY2FsQ29tcGFjdD9udWxsOnRoaXMucHJvcHMuY29tcGFjdFR5cGU7cmV0dXJue2xheW91dDooMCxoLmZpbmRPckdlbmVyYXRlUmVzcG9uc2l2ZUxheW91dCkocixuLHMscyxpLGEpLGJyZWFrcG9pbnQ6cyxjb2xzOml9fSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe2lmKGUud2lkdGg9PXRoaXMucHJvcHMud2lkdGgmJmUuYnJlYWtwb2ludD09PXRoaXMucHJvcHMuYnJlYWtwb2ludCYmKDAsZi5kZWZhdWx0KShlLmJyZWFrcG9pbnRzLHRoaXMucHJvcHMuYnJlYWtwb2ludHMpJiYoMCxmLmRlZmF1bHQpKGUuY29scyx0aGlzLnByb3BzLmNvbHMpKXtpZighKDAsZi5kZWZhdWx0KShlLmxheW91dHMsdGhpcy5wcm9wcy5sYXlvdXRzKSl7dmFyIHQ9dGhpcy5zdGF0ZSxuPXQuYnJlYWtwb2ludCxyPXQuY29scyxvPSgwLGguZmluZE9yR2VuZXJhdGVSZXNwb25zaXZlTGF5b3V0KShlLmxheW91dHMsZS5icmVha3BvaW50cyxuLG4scixlLmNvbXBhY3RUeXBlKTt0aGlzLnNldFN0YXRlKHtsYXlvdXQ6b30pfX1lbHNlIHRoaXMub25XaWR0aENoYW5nZShlKX0sdC5wcm90b3R5cGUub25XaWR0aENoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLmJyZWFrcG9pbnRzLG49ZS5jb2xzLHI9ZS5sYXlvdXRzLG89ZS5jb21wYWN0VHlwZSxzPWUuYnJlYWtwb2ludHx8KDAsaC5nZXRCcmVha3BvaW50RnJvbVdpZHRoKShlLmJyZWFrcG9pbnRzLGUud2lkdGgpLGk9dGhpcy5zdGF0ZS5icmVha3BvaW50O2lmKGkhPT1zfHx0aGlzLnByb3BzLmJyZWFrcG9pbnRzIT09dHx8dGhpcy5wcm9wcy5jb2xzIT09bil7aSBpbiByfHwocltpXT0oMCxtLmNsb25lTGF5b3V0KSh0aGlzLnN0YXRlLmxheW91dCkpO3ZhciBhPSgwLGguZ2V0Q29sc0Zyb21CcmVha3BvaW50KShzLG4pLGw9KDAsaC5maW5kT3JHZW5lcmF0ZVJlc3BvbnNpdmVMYXlvdXQpKHIsdCxzLGksYSxvKTtsPSgwLG0uc3luY2hyb25pemVMYXlvdXRXaXRoQ2hpbGRyZW4pKGwsZS5jaGlsZHJlbixhLG8pLHJbc109bCx0aGlzLnByb3BzLm9uTGF5b3V0Q2hhbmdlKGwsciksdGhpcy5wcm9wcy5vbkJyZWFrcG9pbnRDaGFuZ2UocyxhKSx0aGlzLnByb3BzLm9uV2lkdGhDaGFuZ2UoZS53aWR0aCxlLm1hcmdpbixhLGUuY29udGFpbmVyUGFkZGluZyksdGhpcy5zZXRTdGF0ZSh7YnJlYWtwb2ludDpzLGxheW91dDpsLGNvbHM6YX0pfX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PShlLmJyZWFrcG9pbnQsZS5icmVha3BvaW50cyxlLmNvbHMsZS5sYXlvdXRzLGUub25CcmVha3BvaW50Q2hhbmdlLGUub25MYXlvdXRDaGFuZ2UsZS5vbldpZHRoQ2hhbmdlLG8oZSxbImJyZWFrcG9pbnQiLCJicmVha3BvaW50cyIsImNvbHMiLCJsYXlvdXRzIiwib25CcmVha3BvaW50Q2hhbmdlIiwib25MYXlvdXRDaGFuZ2UiLCJvbldpZHRoQ2hhbmdlIl0pKTtyZXR1cm4gYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYi5kZWZhdWx0LGwoe30sdCx7b25MYXlvdXRDaGFuZ2U6dGhpcy5vbkxheW91dENoYW5nZSxsYXlvdXQ6dGhpcy5zdGF0ZS5sYXlvdXQsY29sczp0aGlzLnN0YXRlLmNvbHN9KSl9LHR9KGMuZGVmYXVsdC5Db21wb25lbnQpO3kucHJvcFR5cGVzPXticmVha3BvaW50Ol8uZGVmYXVsdC5zdHJpbmcsYnJlYWtwb2ludHM6Xy5kZWZhdWx0Lm9iamVjdCxjb2xzOl8uZGVmYXVsdC5vYmplY3QsbGF5b3V0czpmdW5jdGlvbihlLHQpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09RShlW3RdKSl0aHJvdyBuZXcgRXJyb3IoIkxheW91dCBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdC4gUmVjZWl2ZWQ6ICIrRShlW3RdKSk7T2JqZWN0LmtleXMoZVt0XSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKHQgaW4gZS5icmVha3BvaW50cykpdGhyb3cgbmV3IEVycm9yKCJFYWNoIGtleSBpbiBsYXlvdXRzIG11c3QgYWxpZ24gd2l0aCBhIGtleSBpbiBicmVha3BvaW50cy4iKTsoMCxtLnZhbGlkYXRlTGF5b3V0KShlLmxheW91dHNbdF0sImxheW91dHMuIit0KX0pfSx3aWR0aDpfLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsb25CcmVha3BvaW50Q2hhbmdlOl8uZGVmYXVsdC5mdW5jLG9uTGF5b3V0Q2hhbmdlOl8uZGVmYXVsdC5mdW5jLG9uV2lkdGhDaGFuZ2U6Xy5kZWZhdWx0LmZ1bmN9LHkuZGVmYXVsdFByb3BzPXticmVha3BvaW50czp7bGc6MTIwMCxtZDo5OTYsc206NzY4LHhzOjQ4MCx4eHM6MH0sY29sczp7bGc6MTIsbWQ6MTAsc206Nix4czo0LHh4czoyfSxsYXlvdXRzOnt9LG9uQnJlYWtwb2ludENoYW5nZTptLm5vb3Asb25MYXlvdXRDaGFuZ2U6bS5ub29wLG9uV2lkdGhDaGFuZ2U6bS5ub29wfSx0LmRlZmF1bHQ9eX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL2NvbXBvbmVudHMvV2lkdGhQcm92aWRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBsKGUpe3ZhciB0LG47cmV0dXJuIG49dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7dmFyIGUscixvO3ModGhpcyxuKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGEpLHU9MDt1PGE7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBlPXI9aSh0aGlzLHQuY2FsbC5hcHBseSh0LFt0aGlzXS5jb25jYXQobCkpKSxyLnN0YXRlPXt3aWR0aDoxMjgwfSxyLm1vdW50ZWQ9ITEsci5vbldpbmRvd1Jlc2l6ZT1mdW5jdGlvbigpe2lmKHIubW91bnRlZCl7dmFyIGU9bS5kZWZhdWx0LmZpbmRET01Ob2RlKHIpO2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmci5zZXRTdGF0ZSh7d2lkdGg6ZS5vZmZzZXRXaWR0aH0pfX0sbz1lLGkocixvKX1yZXR1cm4gYShuLHQpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5tb3VudGVkPSEwLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMub25XaW5kb3dSZXNpemUpLHRoaXMub25XaW5kb3dSZXNpemUoKX0sbi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITEsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5vbldpbmRvd1Jlc2l6ZSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcHMsbj10Lm1lYXN1cmVCZWZvcmVNb3VudCxyPW8odCxbIm1lYXN1cmVCZWZvcmVNb3VudCJdKTtyZXR1cm4gbiYmIXRoaXMubW91bnRlZD9kLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRoaXMucHJvcHMuY2xhc3NOYW1lLHN0eWxlOnRoaXMucHJvcHMuc3R5bGV9KTpkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLHUoe30scix0aGlzLnN0YXRlKSl9LG59KGQuZGVmYXVsdC5Db21wb25lbnQpLHQuZGVmYXVsdFByb3BzPXttZWFzdXJlQmVmb3JlTW91bnQ6ITF9LHQucHJvcFR5cGVzPXttZWFzdXJlQmVmb3JlTW91bnQ6cC5kZWZhdWx0LmJvb2x9LG59dC5fX2VzTW9kdWxlPSEwO3ZhciB1PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuZGVmYXVsdD1sO3ZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLG09cihmKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL3Jlc3BvbnNpdmVVdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWkoZSkscj1uWzBdLG89MSxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107dD5lW2FdJiYocj1hKX1yZXR1cm4gcn1mdW5jdGlvbiBvKGUsdCl7aWYoIXRbZV0pdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zaXZlUmVhY3RHcmlkTGF5b3V0OiBgY29sc2AgZW50cnkgZm9yIGJyZWFrcG9pbnQgIitlKyIgaXMgbWlzc2luZyEiKTtyZXR1cm4gdFtlXX1mdW5jdGlvbiBzKGUsdCxuLHIsbyxzKXtpZihlW25dKXJldHVybigwLGEuY2xvbmVMYXlvdXQpKGVbbl0pO2Zvcih2YXIgbD1lW3JdLHU9aSh0KSxjPXUuc2xpY2UodS5pbmRleE9mKG4pKSxkPTAsXz1jLmxlbmd0aDtkPF87ZCsrKXt2YXIgcD1jW2RdO2lmKGVbcF0pe2w9ZVtwXTticmVha319cmV0dXJuIGw9KDAsYS5jbG9uZUxheW91dCkobHx8W10pLCgwLGEuY29tcGFjdCkoKDAsYS5jb3JyZWN0Qm91bmRzKShsLHtjb2xzOm99KSxzLG8pfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSl9dC5fX2VzTW9kdWxlPSEwLHQuZ2V0QnJlYWtwb2ludEZyb21XaWR0aD1yLHQuZ2V0Q29sc0Zyb21CcmVha3BvaW50PW8sdC5maW5kT3JHZW5lcmF0ZVJlc3BvbnNpdmVMYXlvdXQ9cyx0LnNvcnRCcmVha3BvaW50cz1pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL3V0aWxzLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD0wLG49dm9pZCAwLHI9MCxvPWUubGVuZ3RoO3I8bztyKyspKG49ZVtyXS55K2Vbcl0uaCk+dCYmKHQ9bik7cmV0dXJuIHR9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9QXJyYXkoZS5sZW5ndGgpLG49MCxyPWUubGVuZ3RoO248cjtuKyspdFtuXT1pKGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIGkoZSl7cmV0dXJue3c6ZS53LGg6ZS5oLHg6ZS54LHk6ZS55LGk6ZS5pLG1pblc6ZS5taW5XLG1heFc6ZS5tYXhXLG1pbkg6ZS5taW5ILG1heEg6ZS5tYXhILG1vdmVkOkJvb2xlYW4oZS5tb3ZlZCksc3RhdGljOkJvb2xlYW4oZS5zdGF0aWMpLGlzRHJhZ2dhYmxlOmUuaXNEcmFnZ2FibGUsaXNSZXNpemFibGU6ZS5pc1Jlc2l6YWJsZX19ZnVuY3Rpb24gYShlLHQpe3JldHVybigwLEQuZGVmYXVsdCkoTS5kZWZhdWx0LkNoaWxkcmVuLm1hcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pLE0uZGVmYXVsdC5DaGlsZHJlbi5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KSl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlIT09dCYmKCEoZS54K2Uudzw9dC54KSYmKCEoZS54Pj10LngrdC53KSYmKCEoZS55K2UuaDw9dC55KSYmIShlLnk+PXQueSt0LmgpKSkpfWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcih2YXIgcj1oKGUpLG89VChlLHQpLHM9QXJyYXkoZS5sZW5ndGgpLGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe3ZhciB1PWkob1thXSk7dS5zdGF0aWN8fCh1PWQocix1LHQsbixvKSxyLnB1c2godSkpLHNbZS5pbmRleE9mKG9bYV0pXT11LHUubW92ZWQ9ITF9cmV0dXJuIHN9ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgbz1QW3JdO3Rbcl0rPTE7Zm9yKHZhciBzPWUuaW5kZXhPZih0KSxpPXMrMTtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtpZighYS5zdGF0aWMpe2lmKGEueT50LnkrdC5oKWJyZWFrO2wodCxhKSYmYyhlLGEsbit0W29dLHIpfX10W3JdPW59ZnVuY3Rpb24gZChlLHQsbixyLHMpe3ZhciBpPSJ2ZXJ0aWNhbCI9PT1uLGE9Imhvcml6b250YWwiPT09bjtpZihpKWZvcih0Lnk9TWF0aC5taW4obyhlKSx0LnkpO3QueT4wJiYhZihlLHQpOyl0LnktLTtlbHNlIGlmKGEpZm9yKHQueT1NYXRoLm1pbihvKGUpLHQueSk7dC54PjAmJiFmKGUsdCk7KXQueC0tO2Zvcih2YXIgbD12b2lkIDA7bD1mKGUsdCk7KWE/YyhzLHQsbC54K2wudywieCIpOmMocyx0LGwueStsLmgsInkiKSxhJiZ0LngrdC53PnImJih0Lng9ci10LncsdC55KyspO3JldHVybiB0fWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIG49aChlKSxyPTAsbz1lLmxlbmd0aDtyPG87cisrKXt2YXIgcz1lW3JdO2lmKHMueCtzLnc+dC5jb2xzJiYocy54PXQuY29scy1zLncpLHMueDwwJiYocy54PTAscy53PXQuY29scykscy5zdGF0aWMpZm9yKDtmKG4scyk7KXMueSsrO2Vsc2Ugbi5wdXNoKHMpfXJldHVybiBlfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXS5pPT09dClyZXR1cm4gZVtuXX1mdW5jdGlvbiBmKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGwoZVtuXSx0KSlyZXR1cm4gZVtuXX1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUsdCl9KX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGF0aWN9KX1mdW5jdGlvbiBnKGUsdCxuLHIsbyxzLGksYSl7aWYodC5zdGF0aWMpcmV0dXJuIGU7aWYodC55PT09ciYmdC54PT09bilyZXR1cm4gZTtqKCJNb3ZpbmcgZWxlbWVudCAiK3QuaSsiIHRvIFsiK1N0cmluZyhuKSsiLCIrU3RyaW5nKHIpKyJdIGZyb20gWyIrdC54KyIsIit0LnkrIl0iKTt2YXIgbD10LngsdT10Lnk7Im51bWJlciI9PXR5cGVvZiBuJiYodC54PW4pLCJudW1iZXIiPT10eXBlb2YgciYmKHQueT1yKSx0Lm1vdmVkPSEwO3ZhciBjPVQoZSxpKTsoInZlcnRpY2FsIj09PWkmJiJudW1iZXIiPT10eXBlb2Ygcj91Pj1yOiJob3Jpem9udGFsIj09PWkmJiJudW1iZXIiPT10eXBlb2YgbiYmbD49bikmJihjPWMucmV2ZXJzZSgpKTt2YXIgZD1tKGMsdCk7aWYocyYmZC5sZW5ndGgpcmV0dXJuIGooIkNvbGxpc2lvbiBwcmV2ZW50ZWQgb24gIit0LmkrIiwgcmV2ZXJ0aW5nLiIpLHQueD1sLHQueT11LHQubW92ZWQ9ITEsZTtmb3IodmFyIF89MCxwPWQubGVuZ3RoO188cDtfKyspe3ZhciBmPWRbX107aigiUmVzb2x2aW5nIGNvbGxpc2lvbiBiZXR3ZWVuICIrdC5pKyIgYXQgWyIrdC54KyIsIit0LnkrIl0gYW5kICIrZi5pKyIgYXQgWyIrZi54KyIsIitmLnkrIl0iKSxmLm1vdmVkfHwoZT1mLnN0YXRpYz9iKGUsZix0LG8saSxhKTpiKGUsdCxmLG8saSxhKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYihlLHQsbixyLG8scyl7dmFyIGk9Imhvcml6b250YWwiPT09byxhPSJ2ZXJ0aWNhbCI9PT1vO2lmKHIpe3I9ITE7dmFyIGw9e3g6aT9NYXRoLm1heCh0Lngtbi53LDApOm4ueCx5OmE/TWF0aC5tYXgodC55LW4uaCwwKTpuLnksdzpuLncsaDpuLmgsaToiLTEifTtpZighZihlLGwpKXJldHVybiBqKCJEb2luZyByZXZlcnNlIGNvbGxpc2lvbiBvbiAiK24uaSsiIHVwIHRvIFsiK2wueCsiLCIrbC55KyJdLiIpLGcoZSxuLGk/bC54OnZvaWQgMCxhP2wueTp2b2lkIDAsciwhMSxvLHMpfXJldHVybiBnKGUsbixpP24ueCsxOnZvaWQgMCxhP24ueSsxOnZvaWQgMCxyLCExLG8scyl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gMTAwKmUrIiUifWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS50b3Asbj1lLmxlZnQscj1lLndpZHRoLG89ZS5oZWlnaHQscz0idHJhbnNsYXRlKCIrbisicHgsIit0KyJweCkiO3JldHVybnt0cmFuc2Zvcm06cyxXZWJraXRUcmFuc2Zvcm06cyxNb3pUcmFuc2Zvcm06cyxtc1RyYW5zZm9ybTpzLE9UcmFuc2Zvcm06cyx3aWR0aDpyKyJweCIsaGVpZ2h0Om8rInB4Iixwb3NpdGlvbjoiYWJzb2x1dGUifX1mdW5jdGlvbiB2KGUpe3JldHVybnt0b3A6ZS50b3ArInB4IixsZWZ0OmUubGVmdCsicHgiLHdpZHRoOmUud2lkdGgrInB4IixoZWlnaHQ6ZS5oZWlnaHQrInB4Iixwb3NpdGlvbjoiYWJzb2x1dGUifX1mdW5jdGlvbiBUKGUsdCl7cmV0dXJuImhvcml6b250YWwiPT09dD9DKGUpOkEoZSl9ZnVuY3Rpb24gQShlKXtyZXR1cm5bXS5jb25jYXQoZSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnk+dC55fHxlLnk9PT10LnkmJmUueD50Lng/MTplLnk9PT10LnkmJmUueD09PXQueD8wOi0xfSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm5bXS5jb25jYXQoZSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLng+dC54fHxlLng9PT10LngmJmUueT50Lnk/MTotMX0pfWZ1bmN0aW9uIE8oZSx0LG4scil7ZT1lfHxbXTt2YXIgcz1bXTtyZXR1cm4gTS5kZWZhdWx0LkNoaWxkcmVuLmZvckVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXAoZSxTdHJpbmcodC5rZXkpKTtpZihyKXNbbl09aShyKTtlbHNleyFrJiZ0LnByb3BzLl9ncmlkJiZjb25zb2xlLndhcm4oImBfZ3JpZGAgcHJvcGVydGllcyBvbiBjaGlsZHJlbiBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiBSZWFjdCAxNS4yLiBQbGVhc2UgdXNlIGBkYXRhLWdyaWRgIG9yIGFkZCB5b3VyIHByb3BlcnRpZXMgZGlyZWN0bHkgdG8gdGhlIGBsYXlvdXRgLiIpO3ZhciBhPXQucHJvcHNbImRhdGEtZ3JpZCJdfHx0LnByb3BzLl9ncmlkO2E/KGt8fFMoW2FdLCJSZWFjdEdyaWRMYXlvdXQuY2hpbGRyZW4iKSxzW25dPWkoeCh7fSxhLHtpOnQua2V5fSkpKTpzW25dPWkoe3c6MSxoOjEseDowLHk6byhzKSxpOlN0cmluZyh0LmtleSl9KX19KSxzPV8ocyx7Y29sczpufSkscz11KHMscixuKX1mdW5jdGlvbiBTKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiTGF5b3V0IixuPVsieCIsInkiLCJ3IiwiaCJdO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcih0KyIgbXVzdCBiZSBhbiBhcnJheSEiKTtmb3IodmFyIHI9MCxvPWUubGVuZ3RoO3I8bztyKyspe2Zvcih2YXIgcz1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKylpZigibnVtYmVyIiE9dHlwZW9mIHNbbltpXV0pdGhyb3cgbmV3IEVycm9yKCJSZWFjdEdyaWRMYXlvdXQ6ICIrdCsiWyIrcisiXS4iK25baV0rIiBtdXN0IGJlIGEgbnVtYmVyISIpO2lmKHMuaSYmInN0cmluZyIhPXR5cGVvZiBzLmkpdGhyb3cgbmV3IEVycm9yKCJSZWFjdEdyaWRMYXlvdXQ6ICIrdCsiWyIrcisiXS5pIG11c3QgYmUgYSBzdHJpbmchIik7aWYodm9pZCAwIT09cy5zdGF0aWMmJiJib29sZWFuIiE9dHlwZW9mIHMuc3RhdGljKXRocm93IG5ldyBFcnJvcigiUmVhY3RHcmlkTGF5b3V0OiAiK3QrIlsiK3IrIl0uc3RhdGljIG11c3QgYmUgYSBib29sZWFuISIpfX1mdW5jdGlvbiBSKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPWVbdF0uYmluZChlKX0pfWZ1bmN0aW9uIGooKXt2YXIgZTtJJiYoZT1jb25zb2xlKS5sb2cuYXBwbHkoZSxhcmd1bWVudHMpfXQuX19lc01vZHVsZT0hMCx0Lm5vb3A9dm9pZCAwO3ZhciB4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuYm90dG9tPW8sdC5jbG9uZUxheW91dD1zLHQuY2xvbmVMYXlvdXRJdGVtPWksdC5jaGlsZHJlbkVxdWFsPWEsdC5jb2xsaWRlcz1sLHQuY29tcGFjdD11LHQuY29tcGFjdEl0ZW09ZCx0LmNvcnJlY3RCb3VuZHM9Xyx0LmdldExheW91dEl0ZW09cCx0LmdldEZpcnN0Q29sbGlzaW9uPWYsdC5nZXRBbGxDb2xsaXNpb25zPW0sdC5nZXRTdGF0aWNzPWgsdC5tb3ZlRWxlbWVudD1nLHQubW92ZUVsZW1lbnRBd2F5RnJvbUNvbGxpc2lvbj1iLHQucGVyYz1FLHQuc2V0VHJhbnNmb3JtPXksdC5zZXRUb3BMZWZ0PXYsdC5zb3J0TGF5b3V0SXRlbXM9VCx0LnNvcnRMYXlvdXRJdGVtc0J5Um93Q29sPUEsdC5zb3J0TGF5b3V0SXRlbXNCeUNvbFJvdz1DLHQuc3luY2hyb25pemVMYXlvdXRXaXRoQ2hpbGRyZW49Tyx0LnZhbGlkYXRlTGF5b3V0PVMsdC5hdXRvQmluZEhhbmRsZXJzPVI7dmFyIEw9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmlzZXF1YWwvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE09cih3KSxrPSEwLEk9ITEsUD17eDoidyIseToiaCJ9O3Qubm9vcD1mdW5jdGlvbigpe319LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC9SZWFjdEdyaWRMYXlvdXQuanMiKS5kZWZhdWx0LGUuZXhwb3J0cy51dGlscz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1ncmlkLWxheW91dC9idWlsZC91dGlscy5qcyIpLGUuZXhwb3J0cy5SZXNwb25zaXZlPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL1Jlc3BvbnNpdmVSZWFjdEdyaWRMYXlvdXQuanMiKS5kZWZhdWx0LGUuZXhwb3J0cy5SZXNwb25zaXZlLnV0aWxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL3Jlc3BvbnNpdmVVdGlscy5qcyIpLGUuZXhwb3J0cy5XaWR0aFByb3ZpZGVyPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWdyaWQtbGF5b3V0L2J1aWxkL2NvbXBvbmVudHMvV2lkdGhQcm92aWRlci5qcyIpLmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1oaWdobGlnaHQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaGlnaGxpZ2h0L2xpYi9pbmRleC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtaGlnaGxpZ2h0L2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGQ9cihjKSxfPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5zZXRFbD1uLnNldEVsLmJpbmQobiksbn1yZXR1cm4gaSh0LGUpLGEodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWdobGlnaHRDb2RlKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWdobGlnaHRDb2RlKCl9fSx7a2V5OiJoaWdobGlnaHRDb2RlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoInByZSBjb2RlIiksdD0wO3Q8ZS5sZW5ndGg7dCsrKXUuZGVmYXVsdC5oaWdobGlnaHRCbG9jayhlW3RdKX19LHtrZXk6InNldEVsIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmVsPWV9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZWxlbWVudCxvPWUuaW5uZXJIVE1MLHM9e3JlZjp0aGlzLnNldEVsLGNsYXNzTmFtZTpufTtyZXR1cm4gbz8ocy5kYW5nZXJvdXNseVNldElubmVySFRNTD17X19odG1sOnR9LHI/ZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocixzKTpkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixzKSk6cj9kLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyLHMsdCk6ZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIse3JlZjp0aGlzLnNldEVsfSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY29kZSIse2NsYXNzTmFtZTpufSx0KSl9fV0pLHR9KGQuZGVmYXVsdC5Db21wb25lbnQpO18uZGVmYXVsdFByb3BzPXtpbm5lckhUTUw6ITEsY2xhc3NOYW1lOm51bGwsZWxlbWVudDpudWxsfSx0LmRlZmF1bHQ9X30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWltbXV0YWJsZS1wcm9wdHlwZXMvZGlzdC9JbW11dGFibGVQcm9wVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5zdGFuY2VvZiBSZWdFeHA/Im9iamVjdCI6ZSBpbnN0YW5jZW9mIHkuSXRlcmFibGU/IkltbXV0YWJsZS4iK2UudG9Tb3VyY2UoKS5zcGxpdCgiICIpWzBdOnR9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiB0KHQsbixyLG8scyxpKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGE+Nj9hLTY6MCksdT02O3U8YTt1KyspbFt1LTZdPWFyZ3VtZW50c1t1XTtpZihpPWl8fHIsbz1vfHx2LG51bGwhPW5bcl0pcmV0dXJuIGUuYXBwbHkodm9pZCAwLFtuLHIsbyxzLGldLmNvbmNhdChsKSk7dmFyIGM9cztyZXR1cm4gdD9uZXcgRXJyb3IoIlJlcXVpcmVkICIrYysiIGAiK2krImAgd2FzIG5vdCBzcGVjaWZpZWQgaW4gYCIrbysiYC4iKTp2b2lkIDB9dmFyIG49dC5iaW5kKG51bGwsITEpO3JldHVybiBuLmlzUmVxdWlyZWQ9dC5iaW5kKG51bGwsITApLG59ZnVuY3Rpb24gcyhlLHQpe2Z1bmN0aW9uIG4obixvLHMsaSxhKXt2YXIgbD1uW29dO2lmKCF0KGwpKXt2YXIgdT1yKGwpO3JldHVybiBuZXcgRXJyb3IoIkludmFsaWQgIitpKyIgYCIrYSsiYCBvZiB0eXBlIGAiK3UrImAgc3VwcGxpZWQgdG8gYCIrcysiYCwgZXhwZWN0ZWQgYCIrZSsiYC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gbyhuKX1mdW5jdGlvbiBpKGUsdCxuKXtmdW5jdGlvbiBzKG8scyxpLGEsbCl7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheSh1PjU/dS01OjApLGQ9NTtkPHU7ZCsrKWNbZC01XT1hcmd1bWVudHNbZF07dmFyIF89b1tzXTtpZighbihfKSl7dmFyIHA9YSxmPXIoXyk7cmV0dXJuIG5ldyBFcnJvcigiSW52YWxpZCAiK3ArIiBgIitsKyJgIG9mIHR5cGUgYCIrZisiYCBzdXBwbGllZCB0byBgIitpKyJgLCBleHBlY3RlZCBhbiBJbW11dGFibGUuanMgIit0KyIuIil9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5ldyBFcnJvcigiSW52YWxpZCB0eXBlQ2hlY2tlciBzdXBwbGllZCB0byBgIitpKyJgIGZvciBwcm9wVHlwZSBgIitsKyJgLCBleHBlY3RlZCBhIGZ1bmN0aW9uLiIpO2Zvcih2YXIgbT1fLnRvQXJyYXkoKSxoPTAsZz1tLmxlbmd0aDtoPGc7aCsrKXt2YXIgYj1lLmFwcGx5KHZvaWQgMCxbbSxoLGksYSxsKyJbIitoKyJdIl0uY29uY2F0KGMpKTtpZihiIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGJ9fXJldHVybiBvKHMpfWZ1bmN0aW9uIGEoZSl7ZnVuY3Rpb24gdCh0LG4scixvLHMpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9QXJyYXkoaT41P2ktNTowKSxsPTU7bDxpO2wrKylhW2wtNV09YXJndW1lbnRzW2xdO3ZhciB1PXRbbl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5ldyBFcnJvcigiSW52YWxpZCBrZXlzVHlwZUNoZWNrZXIgKG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCkgc3VwcGxpZWQgdG8gYCIrcisiYCBmb3IgcHJvcFR5cGUgYCIrcysiYCwgZXhwZWN0ZWQgYSBmdW5jdGlvbi4iKTtmb3IodmFyIGM9dS5rZXlTZXEoKS50b0FycmF5KCksZD0wLF89Yy5sZW5ndGg7ZDxfO2QrKyl7dmFyIHA9ZS5hcHBseSh2b2lkIDAsW2MsZCxyLG8scysiIC0+IGtleSgiK2NbZF0rIikiXS5jb25jYXQoYSkpO2lmKHAgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gcH19cmV0dXJuIG8odCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gaShlLCJMaXN0Iix5Lkxpc3QuaXNMaXN0KX1mdW5jdGlvbiB1KGUsdCxuLHIpe2Z1bmN0aW9uIHMoKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxzPUFycmF5KG8pLGw9MDtsPG87bCsrKXNbbF09YXJndW1lbnRzW2xdO3JldHVybiBpKGUsbixyKS5hcHBseSh2b2lkIDAscyl8fHQmJmEodCkuYXBwbHkodm9pZCAwLHMpfXJldHVybiBvKHMpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdShlLHQsIk1hcCIseS5NYXAuaXNNYXApfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdShlLHQsIk9yZGVyZWRNYXAiLHkuT3JkZXJlZE1hcC5pc09yZGVyZWRNYXApfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGkoZSwiU2V0Iix5LlNldC5pc1NldCl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gaShlLCJPcmRlcmVkU2V0Iix5Lk9yZGVyZWRTZXQuaXNPcmRlcmVkU2V0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBpKGUsIlN0YWNrIix5LlN0YWNrLmlzU3RhY2spfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGkoZSwiSXRlcmFibGUiLHkuSXRlcmFibGUuaXNJdGVyYWJsZSl9ZnVuY3Rpb24gaChlKXtmdW5jdGlvbiB0KHQsbixvLHMsaSl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShhPjU/YS01OjApLHU9NTt1PGE7dSsrKWxbdS01XT1hcmd1bWVudHNbdV07dmFyIGM9dFtuXTtpZighKGMgaW5zdGFuY2VvZiB5LlJlY29yZCkpe3ZhciBkPXIoYyksXz1zO3JldHVybiBuZXcgRXJyb3IoIkludmFsaWQgIitfKyIgYCIraSsiYCBvZiB0eXBlIGAiK2QrImAgc3VwcGxpZWQgdG8gYCIrbysiYCwgZXhwZWN0ZWQgYW4gSW1tdXRhYmxlLmpzIFJlY29yZC4iKX1mb3IodmFyIHAgaW4gZSl7dmFyIGY9ZVtwXTtpZihmKXt2YXIgbT1jLnRvT2JqZWN0KCksaD1mLmFwcGx5KHZvaWQgMCxbbSxwLG8scyxpKyIuIitwXS5jb25jYXQobCkpO2lmKGgpcmV0dXJuIGh9fX1yZXR1cm4gbyh0KX1mdW5jdGlvbiBnKGUpe2Z1bmN0aW9uIHQodCxvLGksYSxsKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxjPUFycmF5KHU+NT91LTU6MCksZD01O2Q8dTtkKyspY1tkLTVdPWFyZ3VtZW50c1tkXTt2YXIgXz10W29dO2lmKCFzKF8pKXt2YXIgcD1yKF8pLGY9YTtyZXR1cm4gbmV3IEVycm9yKCJJbnZhbGlkICIrZisiIGAiK2wrImAgb2YgdHlwZSBgIitwKyJgIHN1cHBsaWVkIHRvIGAiK2krImAsIGV4cGVjdGVkIGFuIEltbXV0YWJsZS5qcyAiK24rIi4iKX12YXIgbT1fLnRvT2JqZWN0KCk7Zm9yKHZhciBoIGluIGUpe3ZhciBnPWVbaF07aWYoZyl7dmFyIGI9Zy5hcHBseSh2b2lkIDAsW20saCxpLGEsbCsiLiIraF0uY29uY2F0KGMpKTtpZihiKXJldHVybiBifX19dmFyIG49dm9pZCAwPT09YXJndW1lbnRzWzFdPyJJdGVyYWJsZSI6YXJndW1lbnRzWzFdLHM9dm9pZCAwPT09YXJndW1lbnRzWzJdP3kuSXRlcmFibGUuaXNJdGVyYWJsZTphcmd1bWVudHNbMl07cmV0dXJuIG8odCl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZyhlKX1mdW5jdGlvbiBFKGUpe3JldHVybiBnKGUsIk1hcCIseS5NYXAuaXNNYXApfXZhciB5PW4oIi4vbm9kZV9tb2R1bGVzL2ltbXV0YWJsZS9kaXN0L2ltbXV0YWJsZS5qcyIpLHY9Ijw8YW5vbnltb3VzPj4iLFQ9e2xpc3RPZjpsLG1hcE9mOmMsb3JkZXJlZE1hcE9mOmQsc2V0T2Y6XyxvcmRlcmVkU2V0T2Y6cCxzdGFja09mOmYsaXRlcmFibGVPZjptLHJlY29yZE9mOmgsc2hhcGU6Yixjb250YWluczpiLG1hcENvbnRhaW5zOkUsbGlzdDpzKCJMaXN0Iix5Lkxpc3QuaXNMaXN0KSxtYXA6cygiTWFwIix5Lk1hcC5pc01hcCksb3JkZXJlZE1hcDpzKCJPcmRlcmVkTWFwIix5Lk9yZGVyZWRNYXAuaXNPcmRlcmVkTWFwKSxzZXQ6cygiU2V0Iix5LlNldC5pc1NldCksb3JkZXJlZFNldDpzKCJPcmRlcmVkU2V0Iix5Lk9yZGVyZWRTZXQuaXNPcmRlcmVkU2V0KSxzdGFjazpzKCJTdGFjayIseS5TdGFjay5pc1N0YWNrKSxzZXE6cygiU2VxIix5LlNlcS5pc1NlcSkscmVjb3JkOnMoIlJlY29yZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5LlJlY29yZH0pLGl0ZXJhYmxlOnMoIkl0ZXJhYmxlIix5Lkl0ZXJhYmxlLmlzSXRlcmFibGUpfTtlLmV4cG9ydHM9VH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWltbXV0YWJsZS1wdXJlLWNvbXBvbmVudC9saWIvcmVhY3QtaW1tdXRhYmxlLXB1cmUtY29tcG9uZW50LmVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uZCh0LCJJbW11dGFibGVQdXJlQ29tcG9uZW50IixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxhPW4ubihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2ltbXV0YWJsZS9kaXN0L2ltbXV0YWJsZS5qcyIpLHU9KG4ubihsKSxPYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gcih0aGlzLHQpLG8odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gcyh0LGUpLGModCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dGhpcy5zdGF0ZXx8e307cmV0dXJuISh0aGlzLnVwZGF0ZU9uUHJvcHN8fE9iamVjdC5rZXlzKHUoe30sZSx0aGlzLnByb3BzKSkpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QobC5pcykoZVtuXSx0LnByb3BzW25dKX0pfHwhKHRoaXMudXBkYXRlT25TdGF0ZXN8fE9iamVjdC5rZXlzKHUoe30sbixyKSkpLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobC5pcykobltlXSxyW2VdKX0pfX1dKSx0fShhLmEuQ29tcG9uZW50KTt0LmRlZmF1bHQ9ZH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlucHV0LWF1dG9zaXplL2xpYi9BdXRvc2l6ZUlucHV0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscD1yKF8pLGY9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHZpc2liaWxpdHk6ImhpZGRlbiIsaGVpZ2h0OjAsb3ZlcmZsb3c6InNjcm9sbCIsd2hpdGVTcGFjZToicHJlIn0sbT1bImV4dHJhV2lkdGgiLCJpbmplY3RTdHlsZXMiLCJpbnB1dENsYXNzTmFtZSIsImlucHV0UmVmIiwiaW5wdXRTdHlsZSIsIm1pbldpZHRoIiwib25BdXRvc2l6ZSIsInBsYWNlaG9sZGVySXNNaW5XaWR0aCJdLGg9ZnVuY3Rpb24oZSl7cmV0dXJuIG0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIGVbdF19KSxlfSxnPWZ1bmN0aW9uKGUsdCl7dC5zdHlsZS5mb250U2l6ZT1lLmZvbnRTaXplLHQuc3R5bGUuZm9udEZhbWlseT1lLmZvbnRGYW1pbHksdC5zdHlsZS5mb250V2VpZ2h0PWUuZm9udFdlaWdodCx0LnN0eWxlLmZvbnRTdHlsZT1lLmZvbnRTdHlsZSx0LnN0eWxlLmxldHRlclNwYWNpbmc9ZS5sZXR0ZXJTcGFjaW5nLHQuc3R5bGUudGV4dFRyYW5zZm9ybT1lLnRleHRUcmFuc2Zvcm19LGI9ISgidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5uYXZpZ2F0b3IpJiYvTVNJRSB8VHJpZGVudFwvfEVkZ2VcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksRT1mdW5jdGlvbigpe3JldHVybiBiPyJfIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwxMik6dm9pZCAwfSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cyh0aGlzLHQpO3ZhciBuPWkodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5pbnB1dFJlZj1mdW5jdGlvbihlKXtuLmlucHV0PWUsImZ1bmN0aW9uIj09dHlwZW9mIG4ucHJvcHMuaW5wdXRSZWYmJm4ucHJvcHMuaW5wdXRSZWYoZSl9LG4ucGxhY2VIb2xkZXJTaXplclJlZj1mdW5jdGlvbihlKXtuLnBsYWNlSG9sZGVyU2l6ZXI9ZX0sbi5zaXplclJlZj1mdW5jdGlvbihlKXtuLnNpemVyPWV9LG4uc3RhdGU9e2lucHV0V2lkdGg6ZS5taW5XaWR0aCxpbnB1dElkOmUuaWR8fEUoKX0sbn1yZXR1cm4gYSh0LGUpLHUodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3VudGVkPSEwLHRoaXMuY29weUlucHV0U3R5bGVzKCksdGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkO3QhPT10aGlzLnByb3BzLmlkJiZ0aGlzLnNldFN0YXRlKHtpbnB1dElkOnR8fEUoKX0pfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3QuaW5wdXRXaWR0aCE9PXRoaXMuc3RhdGUuaW5wdXRXaWR0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSYmdGhpcy5wcm9wcy5vbkF1dG9zaXplKHRoaXMuc3RhdGUuaW5wdXRXaWR0aCksdGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITF9fSx7a2V5OiJjb3B5SW5wdXRTdHlsZXMiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5tb3VudGVkJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSl7dmFyIGU9dGhpcy5pbnB1dCYmd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7ZSYmKGcoZSx0aGlzLnNpemVyKSx0aGlzLnBsYWNlSG9sZGVyU2l6ZXImJmcoZSx0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpKX19fSx7a2V5OiJ1cGRhdGVJbnB1dFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubW91bnRlZCYmdGhpcy5zaXplciYmdm9pZCAwIT09dGhpcy5zaXplci5zY3JvbGxXaWR0aCl7dmFyIGU9dm9pZCAwO2U9dGhpcy5wcm9wcy5wbGFjZWhvbGRlciYmKCF0aGlzLnByb3BzLnZhbHVlfHx0aGlzLnByb3BzLnZhbHVlJiZ0aGlzLnByb3BzLnBsYWNlaG9sZGVySXNNaW5XaWR0aCk/TWF0aC5tYXgodGhpcy5zaXplci5zY3JvbGxXaWR0aCx0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpKzI6dGhpcy5zaXplci5zY3JvbGxXaWR0aCsyO2UrPSJudW1iZXIiPT09dGhpcy5wcm9wcy50eXBlJiZ2b2lkIDA9PT10aGlzLnByb3BzLmV4dHJhV2lkdGg/MTY6cGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKXx8MCxlPHRoaXMucHJvcHMubWluV2lkdGgmJihlPXRoaXMucHJvcHMubWluV2lkdGgpLGUhPT10aGlzLnN0YXRlLmlucHV0V2lkdGgmJnRoaXMuc2V0U3RhdGUoe2lucHV0V2lkdGg6ZX0pfX19LHtrZXk6ImdldElucHV0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0fX0se2tleToiZm9jdXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pbnB1dC5mb2N1cygpfX0se2tleToiYmx1ciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LmJsdXIoKX19LHtrZXk6InNlbGVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LnNlbGVjdCgpfX0se2tleToicmVuZGVyU3R5bGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW5qZWN0U3R5bGVzO3JldHVybiBiJiZlP2QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6ImlucHV0IyIrdGhpcy5zdGF0ZS5pbnB1dElkKyI6Oi1tcy1jbGVhciB7ZGlzcGxheTogbm9uZTt9In19KTpudWxsfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPVt0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSx0aGlzLnByb3BzLnZhbHVlLCIiXS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9PWUmJnZvaWQgMCE9PWU/ZTp0fSksdD1sKHt9LHRoaXMucHJvcHMuc3R5bGUpO3QuZGlzcGxheXx8KHQuZGlzcGxheT0iaW5saW5lLWJsb2NrIik7dmFyIG49bCh7Ym94U2l6aW5nOiJjb250ZW50LWJveCIsd2lkdGg6dGhpcy5zdGF0ZS5pbnB1dFdpZHRoKyJweCJ9LHRoaXMucHJvcHMuaW5wdXRTdHlsZSkscj1vKHRoaXMucHJvcHMsW10pO3JldHVybiBoKHIpLHIuY2xhc3NOYW1lPXRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWUsci5pZD10aGlzLnN0YXRlLmlucHV0SWQsci5zdHlsZT1uLGQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWUsc3R5bGU6dH0sdGhpcy5yZW5kZXJTdHlsZXMoKSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLGwoe30scix7cmVmOnRoaXMuaW5wdXRSZWZ9KSksZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnNpemVyUmVmLHN0eWxlOmZ9LGUpLHRoaXMucHJvcHMucGxhY2Vob2xkZXI/ZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYsc3R5bGU6Zn0sdGhpcy5wcm9wcy5wbGFjZWhvbGRlcik6bnVsbCl9fV0pLHR9KGMuQ29tcG9uZW50KTt5LnByb3BUeXBlcz17Y2xhc3NOYW1lOnAuZGVmYXVsdC5zdHJpbmcsZGVmYXVsdFZhbHVlOnAuZGVmYXVsdC5hbnksZXh0cmFXaWR0aDpwLmRlZmF1bHQub25lT2ZUeXBlKFtwLmRlZmF1bHQubnVtYmVyLHAuZGVmYXVsdC5zdHJpbmddKSxpZDpwLmRlZmF1bHQuc3RyaW5nLGluamVjdFN0eWxlczpwLmRlZmF1bHQuYm9vbCxpbnB1dENsYXNzTmFtZTpwLmRlZmF1bHQuc3RyaW5nLGlucHV0UmVmOnAuZGVmYXVsdC5mdW5jLGlucHV0U3R5bGU6cC5kZWZhdWx0Lm9iamVjdCxtaW5XaWR0aDpwLmRlZmF1bHQub25lT2ZUeXBlKFtwLmRlZmF1bHQubnVtYmVyLHAuZGVmYXVsdC5zdHJpbmddKSxvbkF1dG9zaXplOnAuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlOnAuZGVmYXVsdC5mdW5jLHBsYWNlaG9sZGVyOnAuZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXJJc01pbldpZHRoOnAuZGVmYXVsdC5ib29sLHN0eWxlOnAuZGVmYXVsdC5vYmplY3QsdmFsdWU6cC5kZWZhdWx0LmFueX0seS5kZWZhdWx0UHJvcHM9e21pbldpZHRoOjEsaW5qZWN0U3R5bGVzOiEwfSx0LmRlZmF1bHQ9eX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107KEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLmZvckVhY2goZnVuY3Rpb24oZSl7ZSYmZS5sb2NhbGUmJihELmEuX19hZGRMb2NhbGVEYXRhKGUpLE0uYS5fX2FkZExvY2FsZURhdGEoZSkpfSl9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9KGV8fCIiKS5zcGxpdCgiLSIpO3QubGVuZ3RoPjA7KXtpZihzKHQuam9pbigiLSIpKSlyZXR1cm4hMDt0LnBvcCgpfXJldHVybiExfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZSYmZS50b0xvd2VyQ2FzZSgpO3JldHVybiEoIUQuYS5fX2xvY2FsZURhdGFfX1t0XXx8IU0uYS5fX2xvY2FsZURhdGFfX1t0XSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4oIiIrZSkucmVwbGFjZSh5ZSxmdW5jdGlvbihlKXtyZXR1cm4gRWVbZV19KX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBlLmhhc093blByb3BlcnR5KHIpP3Rbcl09ZVtyXTpuLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1uW3JdKSx0fSx7fSl9ZnVuY3Rpb24gbCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUuaW50bDtGKCkodCwiW1JlYWN0IEludGxdIENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGBpbnRsYCBvYmplY3QuIDxJbnRsUHJvdmlkZXI+IG5lZWRzIHRvIGV4aXN0IGluIHRoZSBjb21wb25lbnQgYW5jZXN0cnkuIil9ZnVuY3Rpb24gdShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCJvYmplY3QiIT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6eihlKSl8fG51bGw9PT1lfHwib2JqZWN0IiE9PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnoodCkpfHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZCh0KSxzPTA7czxuLmxlbmd0aDtzKyspaWYoIW8obltzXSl8fGVbbltzXV0hPT10W25bc11dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGMoZSx0LG4pe3ZhciByPWUucHJvcHMsbz1lLnN0YXRlLHM9ZS5jb250ZXh0LGk9dm9pZCAwPT09cz97fTpzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LGM9aS5pbnRsLGQ9dm9pZCAwPT09Yz97fTpjLF89bC5pbnRsLHA9dm9pZCAwPT09Xz97fTpfO3JldHVybiF1KHQscil8fCF1KG4sbyl8fCEocD09PWR8fHUoYShwLGJlKSxhKGQsYmUpKSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHwiQ29tcG9uZW50In1mdW5jdGlvbiBfKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQuaW50bFByb3BOYW1lLHI9dm9pZCAwPT09bj8iaW50bCI6bixvPXQud2l0aFJlZixzPXZvaWQgMCE9PW8mJm8saT1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsdCl7Vih0aGlzLG4pO3ZhciByPSQodGhpcywobi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSkuY2FsbCh0aGlzLGUsdCkpO3JldHVybiBsKHQpLHJ9cmV0dXJuIEsobix0KSxXKG4sW3trZXk6ImdldFdyYXBwZWRJbnN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gRigpKHMsIltSZWFjdCBJbnRsXSBUbyBhY2Nlc3MgdGhlIHdyYXBwZWQgaW5zdGFuY2UsIHRoZSBge3dpdGhSZWY6IHRydWV9YCBvcHRpb24gbXVzdCBiZSBzZXQgd2hlbiBjYWxsaW5nOiBgaW5qZWN0SW50bCgpYCIpLHRoaXMucmVmcy53cmFwcGVkSW5zdGFuY2V9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE4uYS5jcmVhdGVFbGVtZW50KGUscSh7fSx0aGlzLnByb3BzLFkoe30scix0aGlzLmNvbnRleHQuaW50bCkse3JlZjpzPyJ3cmFwcGVkSW5zdGFuY2UiOm51bGx9KSl9fV0pLG59KFAuQ29tcG9uZW50KTtyZXR1cm4gaS5kaXNwbGF5TmFtZT0iSW5qZWN0SW50bCgiK2QoZSkrIikiLGkuY29udGV4dFR5cGVzPXtpbnRsOnBlfSxpLldyYXBwZWRDb21wb25lbnQ9ZSxpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gZihlKXtyZXR1cm4gRC5hLnByb3RvdHlwZS5fcmVzb2x2ZUxvY2FsZShlKX1mdW5jdGlvbiBtKGUpe3JldHVybiBELmEucHJvdG90eXBlLl9maW5kUGx1cmFsUnVsZUZ1bmN0aW9uKGUpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9TS5hLnRocmVzaG9sZHM7dC5zZWNvbmQ9ZS5zZWNvbmQsdC5taW51dGU9ZS5taW51dGUsdC5ob3VyPWUuaG91cix0LmRheT1lLmRheSx0Lm1vbnRoPWUubW9udGh9ZnVuY3Rpb24gZyhlLHQsbil7dmFyIHI9ZSYmZVt0XSYmZVt0XVtuXTtpZihyKXJldHVybiByfWZ1bmN0aW9uIGIoZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxvPWUubG9jYWxlLHM9ZS5mb3JtYXRzLGk9ci5mb3JtYXQsbD1uZXcgRGF0ZShuKSx1PWkmJmcocywiZGF0ZSIsaSksYz1hKHIsVGUsdSk7dHJ5e3JldHVybiB0LmdldERhdGVUaW1lRm9ybWF0KG8sYykuZm9ybWF0KGwpfWNhdGNoKGUpe31yZXR1cm4gU3RyaW5nKGwpfWZ1bmN0aW9uIEUoZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxvPWUubG9jYWxlLHM9ZS5mb3JtYXRzLGk9ci5mb3JtYXQsbD1uZXcgRGF0ZShuKSx1PWkmJmcocywidGltZSIsaSksYz1hKHIsVGUsdSk7Yy5ob3VyfHxjLm1pbnV0ZXx8Yy5zZWNvbmR8fChjPXEoe30sYyx7aG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIn0pKTt0cnl7cmV0dXJuIHQuZ2V0RGF0ZVRpbWVGb3JtYXQobyxjKS5mb3JtYXQobCl9Y2F0Y2goZSl7fXJldHVybiBTdHJpbmcobCl9ZnVuY3Rpb24geShlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LG89ZS5sb2NhbGUscz1lLmZvcm1hdHMsaT1yLmZvcm1hdCxsPW5ldyBEYXRlKG4pLHU9bmV3IERhdGUoci5ub3cpLGM9aSYmZyhzLCJyZWxhdGl2ZSIsaSksZD1hKHIsQ2UsYyksXz1xKHt9LE0uYS50aHJlc2hvbGRzKTtoKFNlKTt0cnl7cmV0dXJuIHQuZ2V0UmVsYXRpdmVGb3JtYXQobyxkKS5mb3JtYXQobCx7bm93OmlzRmluaXRlKHUpP3U6dC5ub3coKX0pfWNhdGNoKGUpe31maW5hbGx5e2goXyl9cmV0dXJuIFN0cmluZyhsKX1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e30sbz1lLmxvY2FsZSxzPWUuZm9ybWF0cyxpPXIuZm9ybWF0LGw9aSYmZyhzLCJudW1iZXIiLGkpLHU9YShyLEFlLGwpO3RyeXtyZXR1cm4gdC5nZXROdW1iZXJGb3JtYXQobyx1KS5mb3JtYXQobil9Y2F0Y2goZSl7fXJldHVybiBTdHJpbmcobil9ZnVuY3Rpb24gVChlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LG89ZS5sb2NhbGUscz1hKHIsT2UpO3RyeXtyZXR1cm4gdC5nZXRQbHVyYWxGb3JtYXQobyxzKS5mb3JtYXQobil9Y2F0Y2goZSl7fXJldHVybiJvdGhlciJ9ZnVuY3Rpb24gQShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxvPWUubG9jYWxlLHM9ZS5mb3JtYXRzLGk9ZS5tZXNzYWdlcyxhPWUuZGVmYXVsdExvY2FsZSxsPWUuZGVmYXVsdEZvcm1hdHMsdT1uLmlkLGM9bi5kZWZhdWx0TWVzc2FnZTtGKCkodSwiW1JlYWN0IEludGxdIEFuIGBpZGAgbXVzdCBiZSBwcm92aWRlZCB0byBmb3JtYXQgYSBtZXNzYWdlLiIpO3ZhciBkPWkmJmlbdV07aWYoIShPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCkpcmV0dXJuIGR8fGN8fHU7dmFyIF89dm9pZCAwO2lmKGQpdHJ5e189dC5nZXRNZXNzYWdlRm9ybWF0KGQsbyxzKS5mb3JtYXQocil9Y2F0Y2goZSl7fWlmKCFfJiZjKXRyeXtfPXQuZ2V0TWVzc2FnZUZvcm1hdChjLGEsbCkuZm9ybWF0KHIpfWNhdGNoKGUpe31yZXR1cm4gX3x8ZHx8Y3x8dX1mdW5jdGlvbiBDKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIEEoZSx0LG4sT2JqZWN0LmtleXMocikucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49clt0XTtyZXR1cm4gZVt0XT0ic3RyaW5nIj09dHlwZW9mIG4/aShuKTpuLGV9LHt9KSl9ZnVuY3Rpb24gTyhlKXt2YXIgdD1NYXRoLmFicyhlKTtyZXR1cm4gdDxJZT8ic2Vjb25kIjp0PFBlPyJtaW51dGUiOnQ8TmU/ImhvdXIiOiJkYXkifWZ1bmN0aW9uIFMoZSl7c3dpdGNoKGUpe2Nhc2Uic2Vjb25kIjpyZXR1cm4ga2U7Y2FzZSJtaW51dGUiOnJldHVybiBJZTtjYXNlImhvdXIiOnJldHVybiBQZTtjYXNlImRheSI6cmV0dXJuIE5lO2RlZmF1bHQ6cmV0dXJuIEhlfX1mdW5jdGlvbiBSKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7dmFyIG49bmV3IERhdGUoZSkuZ2V0VGltZSgpLHI9bmV3IERhdGUodCkuZ2V0VGltZSgpO3JldHVybiBpc0Zpbml0ZShuKSYmaXNGaW5pdGUocikmJm49PT1yfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuLmQodCwiYWRkTG9jYWxlRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZCh0LCJpbnRsU2hhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSksbi5kKHQsImluamVjdEludGwiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQodCwiZGVmaW5lTWVzc2FnZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQodCwiSW50bFByb3ZpZGVyIixmdW5jdGlvbigpe3JldHVybiBEZX0pLG4uZCh0LCJGb3JtYXR0ZWREYXRlIixmdW5jdGlvbigpe3JldHVybiB3ZX0pLG4uZCh0LCJGb3JtYXR0ZWRUaW1lIixmdW5jdGlvbigpe3JldHVybiBNZX0pLG4uZCh0LCJGb3JtYXR0ZWRSZWxhdGl2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gRmV9KSxuLmQodCwiRm9ybWF0dGVkTnVtYmVyIixmdW5jdGlvbigpe3JldHVybiBCZX0pLG4uZCh0LCJGb3JtYXR0ZWRQbHVyYWwiLGZ1bmN0aW9uKCl7cmV0dXJuIFVlfSksbi5kKHQsIkZvcm1hdHRlZE1lc3NhZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKHQsIkZvcm1hdHRlZEhUTUxNZXNzYWdlIixmdW5jdGlvbigpe3JldHVybiB6ZX0pO3ZhciBqPW4oMSkseD1uLm4oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQvaW5kZXguanMiKSxEPW4ubihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2ludGwtcmVsYXRpdmVmb3JtYXQvaW5kZXguanMiKSxNPW4ubih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxJPW4ubihrKSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTj1uLm4oUCksSD1uKCIuL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcyIpLEY9bi5uKEgpLEI9bigiLi9ub2RlX21vZHVsZXMvaW50bC1mb3JtYXQtY2FjaGUvaW5kZXguanMiKSxVPW4ubihCKSxHPXtsb2NhbGU6ImVuIixwbHVyYWxSdWxlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPSFuWzFdLG89TnVtYmVyKG5bMF0pPT1lLHM9byYmblswXS5zbGljZSgtMSksaT1vJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD8xPT1zJiYxMSE9aT8ib25lIjoyPT1zJiYxMiE9aT8idHdvIjozPT1zJiYxMyE9aT8iZmV3Ijoib3RoZXIiOjE9PWUmJnI/Im9uZSI6Im90aGVyIn0sZmllbGRzOnt5ZWFyOntkaXNwbGF5TmFtZToieWVhciIscmVsYXRpdmU6ezA6InRoaXMgeWVhciIsMToibmV4dCB5ZWFyIiwiLTEiOiJsYXN0IHllYXIifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0geWVhciIsb3RoZXI6ImluIHswfSB5ZWFycyJ9LHBhc3Q6e29uZToiezB9IHllYXIgYWdvIixvdGhlcjoiezB9IHllYXJzIGFnbyJ9fX0sbW9udGg6e2Rpc3BsYXlOYW1lOiJtb250aCIscmVsYXRpdmU6ezA6InRoaXMgbW9udGgiLDE6Im5leHQgbW9udGgiLCItMSI6Imxhc3QgbW9udGgifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gbW9udGgiLG90aGVyOiJpbiB7MH0gbW9udGhzIn0scGFzdDp7b25lOiJ7MH0gbW9udGggYWdvIixvdGhlcjoiezB9IG1vbnRocyBhZ28ifX19LGRheTp7ZGlzcGxheU5hbWU6ImRheSIscmVsYXRpdmU6ezA6InRvZGF5IiwxOiJ0b21vcnJvdyIsIi0xIjoieWVzdGVyZGF5In0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IGRheSIsb3RoZXI6ImluIHswfSBkYXlzIn0scGFzdDp7b25lOiJ7MH0gZGF5IGFnbyIsb3RoZXI6InswfSBkYXlzIGFnbyJ9fX0saG91cjp7ZGlzcGxheU5hbWU6ImhvdXIiLHJlbGF0aXZlOnswOiJ0aGlzIGhvdXIifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gaG91ciIsb3RoZXI6ImluIHswfSBob3VycyJ9LHBhc3Q6e29uZToiezB9IGhvdXIgYWdvIixvdGhlcjoiezB9IGhvdXJzIGFnbyJ9fX0sbWludXRlOntkaXNwbGF5TmFtZToibWludXRlIixyZWxhdGl2ZTp7MDoidGhpcyBtaW51dGUifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gbWludXRlIixvdGhlcjoiaW4gezB9IG1pbnV0ZXMifSxwYXN0OntvbmU6InswfSBtaW51dGUgYWdvIixvdGhlcjoiezB9IG1pbnV0ZXMgYWdvIn19fSxzZWNvbmQ6e2Rpc3BsYXlOYW1lOiJzZWNvbmQiLHJlbGF0aXZlOnswOiJub3cifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiJpbiB7MH0gc2Vjb25kIixvdGhlcjoiaW4gezB9IHNlY29uZHMifSxwYXN0OntvbmU6InswfSBzZWNvbmQgYWdvIixvdGhlcjoiezB9IHNlY29uZHMgYWdvIn19fX19LHo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LFY9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0sVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxZPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX0scT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxLPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sWD1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSwkPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9LFE9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfSxKPUkuYS5ib29sLFo9SS5hLm51bWJlcixlZT1JLmEuc3RyaW5nLHRlPUkuYS5mdW5jLG5lPUkuYS5vYmplY3QscmU9SS5hLm9uZU9mLG9lPUkuYS5zaGFwZSxzZT1JLmEuYW55LGllPUkuYS5vbmVPZlR5cGUsYWU9cmUoWyJiZXN0IGZpdCIsImxvb2t1cCJdKSxsZT1yZShbIm5hcnJvdyIsInNob3J0IiwibG9uZyJdKSx1ZT1yZShbIm51bWVyaWMiLCIyLWRpZ2l0Il0pLGNlPXRlLmlzUmVxdWlyZWQsZGU9e2xvY2FsZTplZSxmb3JtYXRzOm5lLG1lc3NhZ2VzOm5lLHRleHRDb21wb25lbnQ6c2UsZGVmYXVsdExvY2FsZTplZSxkZWZhdWx0Rm9ybWF0czpuZX0sX2U9e2Zvcm1hdERhdGU6Y2UsZm9ybWF0VGltZTpjZSxmb3JtYXRSZWxhdGl2ZTpjZSxmb3JtYXROdW1iZXI6Y2UsZm9ybWF0UGx1cmFsOmNlLGZvcm1hdE1lc3NhZ2U6Y2UsZm9ybWF0SFRNTE1lc3NhZ2U6Y2V9LHBlPW9lKHEoe30sZGUsX2Use2Zvcm1hdHRlcnM6bmUsbm93OmNlfSkpLGZlPShlZS5pc1JlcXVpcmVkLGllKFtlZSxuZV0pLHtsb2NhbGVNYXRjaGVyOmFlLGZvcm1hdE1hdGNoZXI6cmUoWyJiYXNpYyIsImJlc3QgZml0Il0pLHRpbWVab25lOmVlLGhvdXIxMjpKLHdlZWtkYXk6bGUsZXJhOmxlLHllYXI6dWUsbW9udGg6cmUoWyJudW1lcmljIiwiMi1kaWdpdCIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdKSxkYXk6dWUsaG91cjp1ZSxtaW51dGU6dWUsc2Vjb25kOnVlLHRpbWVab25lTmFtZTpyZShbInNob3J0IiwibG9uZyJdKX0pLG1lPXtsb2NhbGVNYXRjaGVyOmFlLHN0eWxlOnJlKFsiZGVjaW1hbCIsImN1cnJlbmN5IiwicGVyY2VudCJdKSxjdXJyZW5jeTplZSxjdXJyZW5jeURpc3BsYXk6cmUoWyJzeW1ib2wiLCJjb2RlIiwibmFtZSJdKSx1c2VHcm91cGluZzpKLG1pbmltdW1JbnRlZ2VyRGlnaXRzOlosbWluaW11bUZyYWN0aW9uRGlnaXRzOlosbWF4aW11bUZyYWN0aW9uRGlnaXRzOlosbWluaW11bVNpZ25pZmljYW50RGlnaXRzOlosbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOlp9LGhlPXtzdHlsZTpyZShbImJlc3QgZml0IiwibnVtZXJpYyJdKSx1bml0czpyZShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJtb250aCIsInllYXIiXSl9LGdlPXtzdHlsZTpyZShbImNhcmRpbmFsIiwib3JkaW5hbCJdKX0sYmU9T2JqZWN0LmtleXMoZGUpLEVlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0seWU9L1smPjwiJ10vZyx2ZT1mdW5jdGlvbiBlKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtWKHRoaXMsZSk7dmFyIHI9Im9yZGluYWwiPT09bi5zdHlsZSxvPW0oZih0KSk7dGhpcy5mb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSxyKX19LFRlPU9iamVjdC5rZXlzKGZlKSxBZT1PYmplY3Qua2V5cyhtZSksQ2U9T2JqZWN0LmtleXMoaGUpLE9lPU9iamVjdC5rZXlzKGdlKSxTZT17c2Vjb25kOjYwLG1pbnV0ZTo2MCxob3VyOjI0LGRheTozMCxtb250aDoxMn0sUmU9T2JqZWN0LmZyZWV6ZSh7Zm9ybWF0RGF0ZTpiLGZvcm1hdFRpbWU6RSxmb3JtYXRSZWxhdGl2ZTp5LGZvcm1hdE51bWJlcjp2LGZvcm1hdFBsdXJhbDpULGZvcm1hdE1lc3NhZ2U6QSxmb3JtYXRIVE1MTWVzc2FnZTpDfSksamU9T2JqZWN0LmtleXMoZGUpLHhlPU9iamVjdC5rZXlzKF9lKSxMZT17Zm9ybWF0czp7fSxtZXNzYWdlczp7fSx0ZXh0Q29tcG9uZW50OiJzcGFuIixkZWZhdWx0TG9jYWxlOiJlbiIsZGVmYXVsdEZvcm1hdHM6e319LERlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1YodGhpcyx0KTt2YXIgcj0kKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlLG4pKTtGKCkoInVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsLCJbUmVhY3QgSW50bF0gVGhlIGBJbnRsYCBBUElzIG11c3QgYmUgYXZhaWxhYmxlIGluIHRoZSBydW50aW1lLCBhbmQgZG8gbm90IGFwcGVhciB0byBiZSBidWlsdC1pbi4gQW4gYEludGxgIHBvbHlmaWxsIHNob3VsZCBiZSBsb2FkZWQuXG5TZWU6IGh0dHA6Ly9mb3JtYXRqcy5pby9ndWlkZXMvcnVudGltZS1lbnZpcm9ubWVudHMvIik7dmFyIG89bi5pbnRsLHM9dm9pZCAwO3M9aXNGaW5pdGUoZS5pbml0aWFsTm93KT9OdW1iZXIoZS5pbml0aWFsTm93KTpvP28ubm93KCk6RGF0ZS5ub3coKTt2YXIgaT1vfHx7fSxhPWkuZm9ybWF0dGVycyxsPXZvaWQgMD09PWE/e2dldERhdGVUaW1lRm9ybWF0OlUoKShJbnRsLkRhdGVUaW1lRm9ybWF0KSxnZXROdW1iZXJGb3JtYXQ6VSgpKEludGwuTnVtYmVyRm9ybWF0KSxnZXRNZXNzYWdlRm9ybWF0OlUoKShELmEpLGdldFJlbGF0aXZlRm9ybWF0OlUoKShNLmEpLGdldFBsdXJhbEZvcm1hdDpVKCkodmUpfTphO3JldHVybiByLnN0YXRlPXEoe30sbCx7bm93OmZ1bmN0aW9uKCl7cmV0dXJuIHIuX2RpZERpc3BsYXk/RGF0ZS5ub3coKTpzfX0pLHJ9cmV0dXJuIEsodCxlKSxXKHQsW3trZXk6ImdldENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuaW50bCx0PWEodGhpcy5wcm9wcyxqZSxlKTtmb3IodmFyIG4gaW4gTGUpdm9pZCAwPT09dFtuXSYmKHRbbl09TGVbbl0pO2lmKCFvKHQubG9jYWxlKSl7dmFyIHI9dCxzPShyLmxvY2FsZSxyLmRlZmF1bHRMb2NhbGUpLGk9ci5kZWZhdWx0Rm9ybWF0czt0PXEoe30sdCx7bG9jYWxlOnMsZm9ybWF0czppLG1lc3NhZ2VzOkxlLm1lc3NhZ2VzfSl9cmV0dXJuIHR9fSx7a2V5OiJnZXRCb3VuZEZvcm1hdEZucyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geGUucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG5bcl09UmVbcl0uYmluZChudWxsLGUsdCksbn0se30pfX0se2tleToiZ2V0Q2hpbGRDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Q29uZmlnKCksdD10aGlzLmdldEJvdW5kRm9ybWF0Rm5zKGUsdGhpcy5zdGF0ZSksbj10aGlzLnN0YXRlLHI9bi5ub3csbz1YKG4sWyJub3ciXSk7cmV0dXJue2ludGw6cSh7fSxlLHQse2Zvcm1hdHRlcnM6byxub3c6cn0pfX19LHtrZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBjLmFwcGx5KHZvaWQgMCxbdGhpc10uY29uY2F0KHQpKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RpZERpc3BsYXk9ITB9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFAuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKX19XSksdH0oUC5Db21wb25lbnQpO0RlLmRpc3BsYXlOYW1lPSJJbnRsUHJvdmlkZXIiLERlLmNvbnRleHRUeXBlcz17aW50bDpwZX0sRGUuY2hpbGRDb250ZXh0VHlwZXM9e2ludGw6cGUuaXNSZXF1aXJlZH07dmFyIHdlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtWKHRoaXMsdCk7dmFyIHI9JCh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSxuKSk7cmV0dXJuIGwobikscn1yZXR1cm4gSyh0LGUpLFcodCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGMuYXBwbHkodm9pZCAwLFt0aGlzXS5jb25jYXQodCkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5pbnRsLHQ9ZS5mb3JtYXREYXRlLG49ZS50ZXh0Q29tcG9uZW50LHI9dGhpcy5wcm9wcyxvPXIudmFsdWUscz1yLmNoaWxkcmVuLGk9dChvLHRoaXMucHJvcHMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MoaSk6Ti5hLmNyZWF0ZUVsZW1lbnQobixudWxsLGkpfX1dKSx0fShQLkNvbXBvbmVudCk7d2UuZGlzcGxheU5hbWU9IkZvcm1hdHRlZERhdGUiLHdlLmNvbnRleHRUeXBlcz17aW50bDpwZX07dmFyIE1lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtWKHRoaXMsdCk7dmFyIHI9JCh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSxuKSk7cmV0dXJuIGwobikscn1yZXR1cm4gSyh0LGUpLFcodCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGMuYXBwbHkodm9pZCAwLFt0aGlzXS5jb25jYXQodCkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5pbnRsLHQ9ZS5mb3JtYXRUaW1lLG49ZS50ZXh0Q29tcG9uZW50LHI9dGhpcy5wcm9wcyxvPXIudmFsdWUscz1yLmNoaWxkcmVuLGk9dChvLHRoaXMucHJvcHMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MoaSk6Ti5hLmNyZWF0ZUVsZW1lbnQobixudWxsLGkpfX1dKSx0fShQLkNvbXBvbmVudCk7TWUuZGlzcGxheU5hbWU9IkZvcm1hdHRlZFRpbWUiLE1lLmNvbnRleHRUeXBlcz17aW50bDpwZX07dmFyIGtlPTFlMyxJZT02ZTQsUGU9MzZlNSxOZT04NjRlNSxIZT0yMTQ3NDgzNjQ3LEZlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtWKHRoaXMsdCk7dmFyIHI9JCh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSxuKSk7bChuKTt2YXIgbz1pc0Zpbml0ZShlLmluaXRpYWxOb3cpP051bWJlcihlLmluaXRpYWxOb3cpOm4uaW50bC5ub3coKTtyZXR1cm4gci5zdGF0ZT17bm93Om99LHJ9cmV0dXJuIEsodCxlKSxXKHQsW3trZXk6InNjaGVkdWxlTmV4dFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2NsZWFyVGltZW91dCh0aGlzLl90aW1lcik7dmFyIHI9ZS52YWx1ZSxvPWUudW5pdHMscz1lLnVwZGF0ZUludGVydmFsLGk9bmV3IERhdGUocikuZ2V0VGltZSgpO2lmKHMmJmlzRmluaXRlKGkpKXt2YXIgYT1pLXQubm93LGw9UyhvfHxPKGEpKSx1PU1hdGguYWJzKGElbCksYz1hPDA/TWF0aC5tYXgocyxsLXUpOk1hdGgubWF4KHMsdSk7dGhpcy5fdGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe24uc2V0U3RhdGUoe25vdzpuLmNvbnRleHQuaW50bC5ub3coKX0pfSxjKX19fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlTmV4dFVwZGF0ZSh0aGlzLnByb3BzLHRoaXMuc3RhdGUpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7UihlLnZhbHVlLHRoaXMucHJvcHMudmFsdWUpfHx0aGlzLnNldFN0YXRlKHtub3c6dGhpcy5jb250ZXh0LmludGwubm93KCl9KX19LHtrZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBjLmFwcGx5KHZvaWQgMCxbdGhpc10uY29uY2F0KHQpKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5zY2hlZHVsZU5leHRVcGRhdGUoZSx0KX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lcil9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmludGwsdD1lLmZvcm1hdFJlbGF0aXZlLG49ZS50ZXh0Q29tcG9uZW50LHI9dGhpcy5wcm9wcyxvPXIudmFsdWUscz1yLmNoaWxkcmVuLGk9dChvLHEoe30sdGhpcy5wcm9wcyx0aGlzLnN0YXRlKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/cyhpKTpOLmEuY3JlYXRlRWxlbWVudChuLG51bGwsaSl9fV0pLHR9KFAuQ29tcG9uZW50KTtGZS5kaXNwbGF5TmFtZT0iRm9ybWF0dGVkUmVsYXRpdmUiLEZlLmNvbnRleHRUeXBlcz17aW50bDpwZX0sRmUuZGVmYXVsdFByb3BzPXt1cGRhdGVJbnRlcnZhbDoxZTR9O3ZhciBCZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7Vih0aGlzLHQpO3ZhciByPSQodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiBsKG4pLHJ9cmV0dXJuIEsodCxlKSxXKHQsW3trZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBjLmFwcGx5KHZvaWQgMCxbdGhpc10uY29uY2F0KHQpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuaW50bCx0PWUuZm9ybWF0TnVtYmVyLG49ZS50ZXh0Q29tcG9uZW50LHI9dGhpcy5wcm9wcyxvPXIudmFsdWUscz1yLmNoaWxkcmVuLGk9dChvLHRoaXMucHJvcHMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MoaSk6Ti5hLmNyZWF0ZUVsZW1lbnQobixudWxsLGkpfX1dKSx0fShQLkNvbXBvbmVudCk7QmUuZGlzcGxheU5hbWU9IkZvcm1hdHRlZE51bWJlciIsQmUuY29udGV4dFR5cGVzPXtpbnRsOnBlfTt2YXIgVWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe1YodGhpcyx0KTt2YXIgcj0kKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcyxlLG4pKTtyZXR1cm4gbChuKSxyfXJldHVybiBLKHQsZSksVyh0LFt7a2V5OiJzaG91bGRDb21wb25lbnRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gYy5hcHBseSh2b2lkIDAsW3RoaXNdLmNvbmNhdCh0KSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmludGwsdD1lLmZvcm1hdFBsdXJhbCxuPWUudGV4dENvbXBvbmVudCxyPXRoaXMucHJvcHMsbz1yLnZhbHVlLHM9ci5vdGhlcixpPXIuY2hpbGRyZW4sYT10KG8sdGhpcy5wcm9wcyksbD10aGlzLnByb3BzW2FdfHxzO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP2kobCk6Ti5hLmNyZWF0ZUVsZW1lbnQobixudWxsLGwpfX1dKSx0fShQLkNvbXBvbmVudCk7VWUuZGlzcGxheU5hbWU9IkZvcm1hdHRlZFBsdXJhbCIsVWUuY29udGV4dFR5cGVzPXtpbnRsOnBlfSxVZS5kZWZhdWx0UHJvcHM9e3N0eWxlOiJjYXJkaW5hbCJ9O3ZhciBHZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7Vih0aGlzLHQpO3ZhciByPSQodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiBsKG4pLHJ9cmV0dXJuIEsodCxlKSxXKHQsW3trZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy52YWx1ZXM7aWYoIXUoZS52YWx1ZXMsdCkpcmV0dXJuITA7Zm9yKHZhciBuPXEoe30sZSx7dmFsdWVzOnR9KSxyPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShyPjE/ci0xOjApLHM9MTtzPHI7cysrKW9bcy0xXT1hcmd1bWVudHNbc107cmV0dXJuIGMuYXBwbHkodm9pZCAwLFt0aGlzLG5dLmNvbmNhdChvKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmludGwsdD1lLmZvcm1hdE1lc3NhZ2Usbj1lLnRleHRDb21wb25lbnQscj10aGlzLnByb3BzLG89ci5pZCxzPXIuZGVzY3JpcHRpb24saT1yLmRlZmF1bHRNZXNzYWdlLGE9ci52YWx1ZXMsbD1yLnRhZ05hbWUsdT12b2lkIDA9PT1sP246bCxjPXIuY2hpbGRyZW4sZD12b2lkIDAsXz12b2lkIDAscD12b2lkIDA7aWYoYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoPjApe3ZhciBmPU1hdGguZmxvb3IoMTA5OTUxMTYyNzc3NipNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNiksbT1mdW5jdGlvbigpe3ZhciBlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIkVMRU1FTlQtIitmKyItIisoZSs9MSl9fSgpO2Q9IkBfXyIrZisiX19AIixfPXt9LHA9e30sT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hW2VdO2lmKE9iamVjdChQLmlzVmFsaWRFbGVtZW50KSh0KSl7dmFyIG49bSgpO19bZV09ZCtuK2QscFtuXT10fWVsc2UgX1tlXT10fSl9dmFyIGg9e2lkOm8sZGVzY3JpcHRpb246cyxkZWZhdWx0TWVzc2FnZTppfSxnPXQoaCxffHxhKSxiPXZvaWQgMDtyZXR1cm4gYj1wJiZPYmplY3Qua2V5cyhwKS5sZW5ndGg+MD9nLnNwbGl0KGQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWV9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHBbZV18fGV9KTpbZ10sImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5hcHBseSh2b2lkIDAsUShiKSk6UC5jcmVhdGVFbGVtZW50LmFwcGx5KHZvaWQgMCxbdSxudWxsXS5jb25jYXQoUShiKSkpfX1dKSx0fShQLkNvbXBvbmVudCk7R2UuZGlzcGxheU5hbWU9IkZvcm1hdHRlZE1lc3NhZ2UiLEdlLmNvbnRleHRUeXBlcz17aW50bDpwZX0sR2UuZGVmYXVsdFByb3BzPXt2YWx1ZXM6e319O3ZhciB6ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7Vih0aGlzLHQpO3ZhciByPSQodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiBsKG4pLHJ9cmV0dXJuIEsodCxlKSxXKHQsW3trZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy52YWx1ZXM7aWYoIXUoZS52YWx1ZXMsdCkpcmV0dXJuITA7Zm9yKHZhciBuPXEoe30sZSx7dmFsdWVzOnR9KSxyPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShyPjE/ci0xOjApLHM9MTtzPHI7cysrKW9bcy0xXT1hcmd1bWVudHNbc107cmV0dXJuIGMuYXBwbHkodm9pZCAwLFt0aGlzLG5dLmNvbmNhdChvKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmludGwsdD1lLmZvcm1hdEhUTUxNZXNzYWdlLG49ZS50ZXh0Q29tcG9uZW50LHI9dGhpcy5wcm9wcyxvPXIuaWQscz1yLmRlc2NyaXB0aW9uLGk9ci5kZWZhdWx0TWVzc2FnZSxhPXIudmFsdWVzLGw9ci50YWdOYW1lLHU9dm9pZCAwPT09bD9uOmwsYz1yLmNoaWxkcmVuLGQ9e2lkOm8sZGVzY3JpcHRpb246cyxkZWZhdWx0TWVzc2FnZTppfSxfPXQoZCxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYyhfKTt2YXIgcD17X19odG1sOl99O3JldHVybiBOLmEuY3JlYXRlRWxlbWVudCh1LHtkYW5nZXJvdXNseVNldElubmVySFRNTDpwfSl9fV0pLHR9KFAuQ29tcG9uZW50KTt6ZS5kaXNwbGF5TmFtZT0iRm9ybWF0dGVkSFRNTE1lc3NhZ2UiLHplLmNvbnRleHRUeXBlcz17aW50bDpwZX0semUuZGVmYXVsdFByb3BzPXt2YWx1ZXM6e319LHIoRykscih4LmEpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9sb2NhbGUtZGF0YS9iZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbih0LG4pe2UuZXhwb3J0cz1uKCl9KDAsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7cmV0dXJuW3tsb2NhbGU6ImJlIixwbHVyYWxSdWxlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZSxvPXImJm5bMF0uc2xpY2UoLTEpLHM9ciYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/MiE9byYmMyE9b3x8MTI9PXN8fDEzPT1zPyJvdGhlciI6ImZldyI6MT09byYmMTEhPXM/Im9uZSI6bz49MiYmbzw9NCYmKHM8MTJ8fHM+MTQpPyJmZXciOnImJjA9PW98fG8+PTUmJm88PTl8fHM+PTExJiZzPD0xND8ibWFueSI6Im90aGVyIn0sZmllbGRzOnt5ZWFyOntkaXNwbGF5TmFtZToi0LPQvtC0IixyZWxhdGl2ZTp7MDoi0YMg0LPRjdGC0YvQvCDQs9C+0LTQt9C1IiwxOiLRgyDQvdCw0YHRgtGD0L/QvdGL0Lwg0LPQvtC00LfQtSIsIi0xIjoi0YMg0LzRltC90YPQu9GL0Lwg0LPQvtC00LfQtSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ItC/0YDQsNC3IHswfSDQs9C+0LQiLGZldzoi0L/RgNCw0LcgezB9INCz0LDQtNGLIixtYW55OiLQv9GA0LDQtyB7MH0g0LPQsNC00L7RniIsb3RoZXI6ItC/0YDQsNC3IHswfSDQs9C+0LTQsCJ9LHBhc3Q6e29uZToiezB9INCz0L7QtCDRgtCw0LzRgyIsZmV3OiJ7MH0g0LPQsNC00Ysg0YLQsNC80YMiLG1hbnk6InswfSDQs9Cw0LTQvtGeINGC0LDQvNGDIixvdGhlcjoiezB9INCz0L7QtNCwINGC0LDQvNGDIn19fSxtb250aDp7ZGlzcGxheU5hbWU6ItC80LXRgdGP0YYiLHJlbGF0aXZlOnswOiLRgyDQs9GN0YLRi9C8INC80LXRgdGP0YbRiyIsMToi0YMg0L3QsNGB0YLRg9C/0L3Ri9C8INC80LXRgdGP0YbRiyIsIi0xIjoi0YMg0LzRltC90YPQu9GL0Lwg0LzQtdGB0Y/RhtGLIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToi0L/RgNCw0LcgezB9INC80LXRgdGP0YYiLGZldzoi0L/RgNCw0LcgezB9INC80LXRgdGP0YbRiyIsbWFueToi0L/RgNCw0LcgezB9INC80LXRgdGP0YbQsNGeIixvdGhlcjoi0L/RgNCw0LcgezB9INC80LXRgdGP0YbQsCJ9LHBhc3Q6e29uZToiezB9INC80LXRgdGP0YYg0YLQsNC80YMiLGZldzoiezB9INC80LXRgdGP0YbRiyDRgtCw0LzRgyIsbWFueToiezB9INC80LXRgdGP0YbQsNGeINGC0LDQvNGDIixvdGhlcjoiezB9INC80LXRgdGP0YbQsCDRgtCw0LzRgyJ9fX0sZGF5OntkaXNwbGF5TmFtZToi0LTQt9C10L3RjCIscmVsYXRpdmU6ezA6ItGB0ZHQvdC90Y8iLDE6ItC30LDRntGC0YDQsCIsMjoi0L/QsNGB0LvRj9C30LDRntGC0YDQsCIsIi0yIjoi0L/QsNC30LDRntGH0L7RgNCwIiwiLTEiOiLRg9GH0L7RgNCwIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToi0L/RgNCw0LcgezB9INC00LfQtdC90YwiLGZldzoi0L/RgNCw0LcgezB9INC00L3RliIsbWFueToi0L/RgNCw0LcgezB9INC00LfRkdC9IixvdGhlcjoi0L/RgNCw0LcgezB9INC00L3RjyJ9LHBhc3Q6e29uZToiezB9INC00LfQtdC90Ywg0YLQsNC80YMiLGZldzoiezB9INC00L3RliDRgtCw0LzRgyIsbWFueToiezB9INC00LfRkdC9INGC0LDQvNGDIixvdGhlcjoiezB9INC00L3RjyDRgtCw0LzRgyJ9fX0saG91cjp7ZGlzcGxheU5hbWU6ItCz0LDQtNC30ZbQvdCwIixyZWxhdGl2ZTp7MDoi0YMg0LPRjdGC0YMg0LPQsNC00LfRltC90YMifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiLQv9GA0LDQtyB7MH0g0LPQsNC00LfRltC90YMiLGZldzoi0L/RgNCw0LcgezB9INCz0LDQtNC30ZbQvdGLIixtYW55OiLQv9GA0LDQtyB7MH0g0LPQsNC00LfRltC9IixvdGhlcjoi0L/RgNCw0LcgezB9INCz0LDQtNC30ZbQvdGLIn0scGFzdDp7b25lOiJ7MH0g0LPQsNC00LfRltC90YMg0YLQsNC80YMiLGZldzoiezB9INCz0LDQtNC30ZbQvdGLINGC0LDQvNGDIixtYW55OiJ7MH0g0LPQsNC00LfRltC9INGC0LDQvNGDIixvdGhlcjoiezB9INCz0LDQtNC30ZbQvdGLINGC0LDQvNGDIn19fSxtaW51dGU6e2Rpc3BsYXlOYW1lOiLRhdCy0ZbQu9GW0L3QsCIscmVsYXRpdmU6ezA6ItGDINCz0Y3RgtGDINGF0LLRltC70ZbQvdGDIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToi0L/RgNCw0LcgezB9INGF0LLRltC70ZbQvdGDIixmZXc6ItC/0YDQsNC3IHswfSDRhdCy0ZbQu9GW0L3RiyIsbWFueToi0L/RgNCw0LcgezB9INGF0LLRltC70ZbQvSIsb3RoZXI6ItC/0YDQsNC3IHswfSDRhdCy0ZbQu9GW0L3RiyJ9LHBhc3Q6e29uZToiezB9INGF0LLRltC70ZbQvdGDINGC0LDQvNGDIixmZXc6InswfSDRhdCy0ZbQu9GW0L3RiyDRgtCw0LzRgyIsbWFueToiezB9INGF0LLRltC70ZbQvSDRgtCw0LzRgyIsb3RoZXI6InswfSDRhdCy0ZbQu9GW0L3RiyDRgtCw0LzRgyJ9fX0sc2Vjb25kOntkaXNwbGF5TmFtZToi0YHQtdC60YPQvdC00LAiLHJlbGF0aXZlOnswOiLRhtGP0L/QtdGAIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToi0L/RgNCw0LcgezB9INGB0LXQutGD0L3QtNGDIixmZXc6ItC/0YDQsNC3IHswfSDRgdC10LrRg9C90LTRiyIsbWFueToi0L/RgNCw0LcgezB9INGB0LXQutGD0L3QtCIsb3RoZXI6ItC/0YDQsNC3IHswfSDRgdC10LrRg9C90LTRiyJ9LHBhc3Q6e29uZToiezB9INGB0LXQutGD0L3QtNGDINGC0LDQvNGDIixmZXc6InswfSDRgdC10LrRg9C90LTRiyDRgtCw0LzRgyIsbWFueToiezB9INGB0LXQutGD0L3QtCDRgtCw0LzRgyIsb3RoZXI6InswfSDRgdC10LrRg9C90LTRiyDRgtCw0LzRgyJ9fX19fV19KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbG9jYWxlLWRhdGEvZW4uanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3JldHVyblt7bG9jYWxlOiJlbiIscGx1cmFsUnVsZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj0hblsxXSxvPU51bWJlcihuWzBdKT09ZSxzPW8mJm5bMF0uc2xpY2UoLTEpLGk9byYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/MT09cyYmMTEhPWk/Im9uZSI6Mj09cyYmMTIhPWk/InR3byI6Mz09cyYmMTMhPWk/ImZldyI6Im90aGVyIjoxPT1lJiZyPyJvbmUiOiJvdGhlciJ9LGZpZWxkczp7eWVhcjp7ZGlzcGxheU5hbWU6InllYXIiLHJlbGF0aXZlOnswOiJ0aGlzIHllYXIiLDE6Im5leHQgeWVhciIsIi0xIjoibGFzdCB5ZWFyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IHllYXIiLG90aGVyOiJpbiB7MH0geWVhcnMifSxwYXN0OntvbmU6InswfSB5ZWFyIGFnbyIsb3RoZXI6InswfSB5ZWFycyBhZ28ifX19LG1vbnRoOntkaXNwbGF5TmFtZToibW9udGgiLHJlbGF0aXZlOnswOiJ0aGlzIG1vbnRoIiwxOiJuZXh0IG1vbnRoIiwiLTEiOiJsYXN0IG1vbnRoIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IG1vbnRoIixvdGhlcjoiaW4gezB9IG1vbnRocyJ9LHBhc3Q6e29uZToiezB9IG1vbnRoIGFnbyIsb3RoZXI6InswfSBtb250aHMgYWdvIn19fSxkYXk6e2Rpc3BsYXlOYW1lOiJkYXkiLHJlbGF0aXZlOnswOiJ0b2RheSIsMToidG9tb3Jyb3ciLCItMSI6Inllc3RlcmRheSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ImluIHswfSBkYXkiLG90aGVyOiJpbiB7MH0gZGF5cyJ9LHBhc3Q6e29uZToiezB9IGRheSBhZ28iLG90aGVyOiJ7MH0gZGF5cyBhZ28ifX19LGhvdXI6e2Rpc3BsYXlOYW1lOiJob3VyIixyZWxhdGl2ZTp7MDoidGhpcyBob3VyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IGhvdXIiLG90aGVyOiJpbiB7MH0gaG91cnMifSxwYXN0OntvbmU6InswfSBob3VyIGFnbyIsb3RoZXI6InswfSBob3VycyBhZ28ifX19LG1pbnV0ZTp7ZGlzcGxheU5hbWU6Im1pbnV0ZSIscmVsYXRpdmU6ezA6InRoaXMgbWludXRlIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IG1pbnV0ZSIsb3RoZXI6ImluIHswfSBtaW51dGVzIn0scGFzdDp7b25lOiJ7MH0gbWludXRlIGFnbyIsb3RoZXI6InswfSBtaW51dGVzIGFnbyJ9fX0sc2Vjb25kOntkaXNwbGF5TmFtZToic2Vjb25kIixyZWxhdGl2ZTp7MDoibm93In0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToiaW4gezB9IHNlY29uZCIsb3RoZXI6ImluIHswfSBzZWNvbmRzIn0scGFzdDp7b25lOiJ7MH0gc2Vjb25kIGFnbyIsb3RoZXI6InswfSBzZWNvbmRzIGFnbyJ9fX19fSx7bG9jYWxlOiJlbi0wMDEiLHBhcmVudExvY2FsZToiZW4ifSx7bG9jYWxlOiJlbi0xNTAiLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tQUciLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tQUkiLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tQVMiLHBhcmVudExvY2FsZToiZW4ifSx7bG9jYWxlOiJlbi1BVCIscGFyZW50TG9jYWxlOiJlbi0xNTAifSx7bG9jYWxlOiJlbi1BVSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1CQiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1CRSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1CSSIscGFyZW50TG9jYWxlOiJlbiJ9LHtsb2NhbGU6ImVuLUJNIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUJTIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUJXIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUJaIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNBIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNDIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNIIixwYXJlbnRMb2NhbGU6ImVuLTE1MCJ9LHtsb2NhbGU6ImVuLUNLIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNNIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNYIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUNZIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLURFIixwYXJlbnRMb2NhbGU6ImVuLTE1MCJ9LHtsb2NhbGU6ImVuLURHIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLURLIixwYXJlbnRMb2NhbGU6ImVuLTE1MCJ9LHtsb2NhbGU6ImVuLURNIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLURzcnQiLHBsdXJhbFJ1bGVGdW5jdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiJvdGhlciJ9LGZpZWxkczp7eWVhcjp7ZGlzcGxheU5hbWU6IlllYXIiLHJlbGF0aXZlOnswOiJ0aGlzIHllYXIiLDE6Im5leHQgeWVhciIsIi0xIjoibGFzdCB5ZWFyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e290aGVyOiIrezB9IHkifSxwYXN0OntvdGhlcjoiLXswfSB5In19fSxtb250aDp7ZGlzcGxheU5hbWU6Ik1vbnRoIixyZWxhdGl2ZTp7MDoidGhpcyBtb250aCIsMToibmV4dCBtb250aCIsIi0xIjoibGFzdCBtb250aCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBtIn0scGFzdDp7b3RoZXI6Ii17MH0gbSJ9fX0sZGF5OntkaXNwbGF5TmFtZToiRGF5IixyZWxhdGl2ZTp7MDoidG9kYXkiLDE6InRvbW9ycm93IiwiLTEiOiJ5ZXN0ZXJkYXkifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b3RoZXI6Iit7MH0gZCJ9LHBhc3Q6e290aGVyOiItezB9IGQifX19LGhvdXI6e2Rpc3BsYXlOYW1lOiJIb3VyIixyZWxhdGl2ZTp7MDoidGhpcyBob3VyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e290aGVyOiIrezB9IGgifSxwYXN0OntvdGhlcjoiLXswfSBoIn19fSxtaW51dGU6e2Rpc3BsYXlOYW1lOiJNaW51dGUiLHJlbGF0aXZlOnswOiJ0aGlzIG1pbnV0ZSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBtaW4ifSxwYXN0OntvdGhlcjoiLXswfSBtaW4ifX19LHNlY29uZDp7ZGlzcGxheU5hbWU6IlNlY29uZCIscmVsYXRpdmU6ezA6Im5vdyJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBzIn0scGFzdDp7b3RoZXI6Ii17MH0gcyJ9fX19fSx7bG9jYWxlOiJlbi1FUiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1GSSIscGFyZW50TG9jYWxlOiJlbi0xNTAifSx7bG9jYWxlOiJlbi1GSiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1GSyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1GTSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HQiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HRCIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HRyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HSCIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HSSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HTSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1HVSIscGFyZW50TG9jYWxlOiJlbiJ9LHtsb2NhbGU6ImVuLUdZIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUhLIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUlFIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUlMIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUlNIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUlOIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUlPIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUpFIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUpNIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUtFIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUtJIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUtOIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUtZIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUxDIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUxSIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLUxTIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLU1HIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLU1IIixwYXJlbnRMb2NhbGU6ImVuIn0se2xvY2FsZToiZW4tTU8iLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tTVAiLHBhcmVudExvY2FsZToiZW4ifSx7bG9jYWxlOiJlbi1NUyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1NVCIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1NVSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1NVyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1NWSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1OQSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1ORiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1ORyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1OTCIscGFyZW50TG9jYWxlOiJlbi0xNTAifSx7bG9jYWxlOiJlbi1OUiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1OVSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1OWiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1QRyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1QSCIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1QSyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1QTiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1QUiIscGFyZW50TG9jYWxlOiJlbiJ9LHtsb2NhbGU6ImVuLVBXIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVJXIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNCIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNDIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNEIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNFIixwYXJlbnRMb2NhbGU6ImVuLTE1MCJ9LHtsb2NhbGU6ImVuLVNHIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNIIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNJIixwYXJlbnRMb2NhbGU6ImVuLTE1MCJ9LHtsb2NhbGU6ImVuLVNMIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNTIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNYIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNaIixwYXJlbnRMb2NhbGU6ImVuLTAwMSJ9LHtsb2NhbGU6ImVuLVNoYXciLHBsdXJhbFJ1bGVGdW5jdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiJvdGhlciJ9LGZpZWxkczp7eWVhcjp7ZGlzcGxheU5hbWU6IlllYXIiLHJlbGF0aXZlOnswOiJ0aGlzIHllYXIiLDE6Im5leHQgeWVhciIsIi0xIjoibGFzdCB5ZWFyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e290aGVyOiIrezB9IHkifSxwYXN0OntvdGhlcjoiLXswfSB5In19fSxtb250aDp7ZGlzcGxheU5hbWU6Ik1vbnRoIixyZWxhdGl2ZTp7MDoidGhpcyBtb250aCIsMToibmV4dCBtb250aCIsIi0xIjoibGFzdCBtb250aCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBtIn0scGFzdDp7b3RoZXI6Ii17MH0gbSJ9fX0sZGF5OntkaXNwbGF5TmFtZToiRGF5IixyZWxhdGl2ZTp7MDoidG9kYXkiLDE6InRvbW9ycm93IiwiLTEiOiJ5ZXN0ZXJkYXkifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b3RoZXI6Iit7MH0gZCJ9LHBhc3Q6e290aGVyOiItezB9IGQifX19LGhvdXI6e2Rpc3BsYXlOYW1lOiJIb3VyIixyZWxhdGl2ZTp7MDoidGhpcyBob3VyIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e290aGVyOiIrezB9IGgifSxwYXN0OntvdGhlcjoiLXswfSBoIn19fSxtaW51dGU6e2Rpc3BsYXlOYW1lOiJNaW51dGUiLHJlbGF0aXZlOnswOiJ0aGlzIG1pbnV0ZSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBtaW4ifSxwYXN0OntvdGhlcjoiLXswfSBtaW4ifX19LHNlY29uZDp7ZGlzcGxheU5hbWU6IlNlY29uZCIscmVsYXRpdmU6ezA6Im5vdyJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvdGhlcjoiK3swfSBzIn0scGFzdDp7b3RoZXI6Ii17MH0gcyJ9fX19fSx7bG9jYWxlOiJlbi1UQyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1USyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1UTyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1UVCIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1UViIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1UWiIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1VRyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1VTSIscGFyZW50TG9jYWxlOiJlbiJ9LHtsb2NhbGU6ImVuLVVTIixwYXJlbnRMb2NhbGU6ImVuIn0se2xvY2FsZToiZW4tVkMiLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tVkciLHBhcmVudExvY2FsZToiZW4tMDAxIn0se2xvY2FsZToiZW4tVkkiLHBhcmVudExvY2FsZToiZW4ifSx7bG9jYWxlOiJlbi1WVSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1XUyIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1aQSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1aTSIscGFyZW50TG9jYWxlOiJlbi0wMDEifSx7bG9jYWxlOiJlbi1aVyIscGFyZW50TG9jYWxlOiJlbi0wMDEifV19KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbG9jYWxlLWRhdGEvcnUuanMiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3JldHVyblt7bG9jYWxlOiJydSIscGx1cmFsUnVsZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89IW5bMV0scz1yLnNsaWNlKC0xKSxpPXIuc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6byYmMT09cyYmMTEhPWk/Im9uZSI6byYmcz49MiYmczw9NCYmKGk8MTJ8fGk+MTQpPyJmZXciOm8mJjA9PXN8fG8mJnM+PTUmJnM8PTl8fG8mJmk+PTExJiZpPD0xND8ibWFueSI6Im90aGVyIn0sZmllbGRzOnt5ZWFyOntkaXNwbGF5TmFtZToi0LPQvtC0IixyZWxhdGl2ZTp7MDoi0LIg0Y3RgtC+0Lwg0LPQvtC00YMiLDE6ItCyINGB0LvQtdC00YPRjtGJ0LXQvCDQs9C+0LTRgyIsIi0xIjoi0LIg0L/RgNC+0YjQu9C+0Lwg0LPQvtC00YMifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTp7b25lOiLRh9C10YDQtdC3IHswfSDQs9C+0LQiLGZldzoi0YfQtdGA0LXQtyB7MH0g0LPQvtC00LAiLG1hbnk6ItGH0LXRgNC10LcgezB9INC70LXRgiIsb3RoZXI6ItGH0LXRgNC10LcgezB9INCz0L7QtNCwIn0scGFzdDp7b25lOiJ7MH0g0LPQvtC0INC90LDQt9Cw0LQiLGZldzoiezB9INCz0L7QtNCwINC90LDQt9Cw0LQiLG1hbnk6InswfSDQu9C10YIg0L3QsNC30LDQtCIsb3RoZXI6InswfSDQs9C+0LTQsCDQvdCw0LfQsNC0In19fSxtb250aDp7ZGlzcGxheU5hbWU6ItC80LXRgdGP0YYiLHJlbGF0aXZlOnswOiLQsiDRjdGC0L7QvCDQvNC10YHRj9GG0LUiLDE6ItCyINGB0LvQtdC00YPRjtGJ0LXQvCDQvNC10YHRj9GG0LUiLCItMSI6ItCyINC/0YDQvtGI0LvQvtC8INC80LXRgdGP0YbQtSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ItGH0LXRgNC10LcgezB9INC80LXRgdGP0YYiLGZldzoi0YfQtdGA0LXQtyB7MH0g0LzQtdGB0Y/RhtCwIixtYW55OiLRh9C10YDQtdC3IHswfSDQvNC10YHRj9GG0LXQsiIsb3RoZXI6ItGH0LXRgNC10LcgezB9INC80LXRgdGP0YbQsCJ9LHBhc3Q6e29uZToiezB9INC80LXRgdGP0YYg0L3QsNC30LDQtCIsZmV3OiJ7MH0g0LzQtdGB0Y/RhtCwINC90LDQt9Cw0LQiLG1hbnk6InswfSDQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0IixvdGhlcjoiezB9INC80LXRgdGP0YbQsCDQvdCw0LfQsNC0In19fSxkYXk6e2Rpc3BsYXlOYW1lOiLQtNC10L3RjCIscmVsYXRpdmU6ezA6ItGB0LXQs9C+0LTQvdGPIiwxOiLQt9Cw0LLRgtGA0LAiLDI6ItC/0L7RgdC70LXQt9Cw0LLRgtGA0LAiLCItMiI6ItC/0L7Qt9Cw0LLRh9C10YDQsCIsIi0xIjoi0LLRh9C10YDQsCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ItGH0LXRgNC10LcgezB9INC00LXQvdGMIixmZXc6ItGH0LXRgNC10LcgezB9INC00L3RjyIsbWFueToi0YfQtdGA0LXQtyB7MH0g0LTQvdC10LkiLG90aGVyOiLRh9C10YDQtdC3IHswfSDQtNC90Y8ifSxwYXN0OntvbmU6InswfSDQtNC10L3RjCDQvdCw0LfQsNC0IixmZXc6InswfSDQtNC90Y8g0L3QsNC30LDQtCIsbWFueToiezB9INC00L3QtdC5INC90LDQt9Cw0LQiLG90aGVyOiJ7MH0g0LTQvdGPINC90LDQt9Cw0LQifX19LGhvdXI6e2Rpc3BsYXlOYW1lOiLRh9Cw0YEiLHJlbGF0aXZlOnswOiLQsiDRjdGC0L7QvCDRh9Cw0YHQtSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ItGH0LXRgNC10LcgezB9INGH0LDRgSIsZmV3OiLRh9C10YDQtdC3IHswfSDRh9Cw0YHQsCIsbWFueToi0YfQtdGA0LXQtyB7MH0g0YfQsNGB0L7QsiIsb3RoZXI6ItGH0LXRgNC10LcgezB9INGH0LDRgdCwIn0scGFzdDp7b25lOiJ7MH0g0YfQsNGBINC90LDQt9Cw0LQiLGZldzoiezB9INGH0LDRgdCwINC90LDQt9Cw0LQiLG1hbnk6InswfSDRh9Cw0YHQvtCyINC90LDQt9Cw0LQiLG90aGVyOiJ7MH0g0YfQsNGB0LAg0L3QsNC30LDQtCJ9fX0sbWludXRlOntkaXNwbGF5TmFtZToi0LzQuNC90YPRgtCwIixyZWxhdGl2ZTp7MDoi0LIg0Y3RgtGDINC80LjQvdGD0YLRgyJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOntvbmU6ItGH0LXRgNC10LcgezB9INC80LjQvdGD0YLRgyIsZmV3OiLRh9C10YDQtdC3IHswfSDQvNC40L3Rg9GC0YsiLG1hbnk6ItGH0LXRgNC10LcgezB9INC80LjQvdGD0YIiLG90aGVyOiLRh9C10YDQtdC3IHswfSDQvNC40L3Rg9GC0YsifSxwYXN0OntvbmU6InswfSDQvNC40L3Rg9GC0YMg0L3QsNC30LDQtCIsZmV3OiJ7MH0g0LzQuNC90YPRgtGLINC90LDQt9Cw0LQiLG1hbnk6InswfSDQvNC40L3Rg9GCINC90LDQt9Cw0LQiLG90aGVyOiJ7MH0g0LzQuNC90YPRgtGLINC90LDQt9Cw0LQifX19LHNlY29uZDp7ZGlzcGxheU5hbWU6ItGB0LXQutGD0L3QtNCwIixyZWxhdGl2ZTp7MDoi0YHQtdC50YfQsNGBIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6e29uZToi0YfQtdGA0LXQtyB7MH0g0YHQtdC60YPQvdC00YMiLGZldzoi0YfQtdGA0LXQtyB7MH0g0YHQtdC60YPQvdC00YsiLG1hbnk6ItGH0LXRgNC10LcgezB9INGB0LXQutGD0L3QtCIsb3RoZXI6ItGH0LXRgNC10LcgezB9INGB0LXQutGD0L3QtNGLIn0scGFzdDp7b25lOiJ7MH0g0YHQtdC60YPQvdC00YMg0L3QsNC30LDQtCIsZmV3OiJ7MH0g0YHQtdC60YPQvdC00Ysg0L3QsNC30LDQtCIsbWFueToiezB9INGB0LXQutGD0L3QtCDQvdCw0LfQsNC0IixvdGhlcjoiezB9INGB0LXQutGD0L3QtNGLINC90LDQt9Cw0LQifX19fX0se2xvY2FsZToicnUtQlkiLHBhcmVudExvY2FsZToicnUifSx7bG9jYWxlOiJydS1LRyIscGFyZW50TG9jYWxlOiJydSJ9LHtsb2NhbGU6InJ1LUtaIixwYXJlbnRMb2NhbGU6InJ1In0se2xvY2FsZToicnUtTUQiLHBhcmVudExvY2FsZToicnUifSx7bG9jYWxlOiJydS1VQSIscGFyZW50TG9jYWxlOiJydSJ9XX0pfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIHQ9ZS4kJHR5cGVvZjtzd2l0Y2godCl7Y2FzZSBpOnN3aXRjaChlPWUudHlwZSl7Y2FzZSBwOmNhc2UgZjpjYXNlIGw6Y2FzZSBjOmNhc2UgdTpjYXNlIGg6cmV0dXJuIGU7ZGVmYXVsdDpzd2l0Y2goZT1lJiZlLiQkdHlwZW9mKXtjYXNlIF86Y2FzZSBtOmNhc2UgZDpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIGI6Y2FzZSBnOmNhc2UgYTpyZXR1cm4gdH19fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHIoZSk9PT1mfS8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC40CiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsaT1zP1N5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKTo2MDEwMyxhPXM/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsbD1zP1N5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik6NjAxMDcsdT1zP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsYz1zP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQsZD1zP1N5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIik6NjAxMDksXz1zP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxwPXM/U3ltYm9sLmZvcigicmVhY3QuYXN5bmNfbW9kZSIpOjYwMTExLGY9cz9TeW1ib2wuZm9yKCJyZWFjdC5jb25jdXJyZW50X21vZGUiKTo2MDExMSxtPXM/U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKTo2MDExMixoPXM/U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKTo2MDExMyxnPXM/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LGI9cz9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTY7dC50eXBlT2Y9cix0LkFzeW5jTW9kZT1wLHQuQ29uY3VycmVudE1vZGU9Zix0LkNvbnRleHRDb25zdW1lcj1fLHQuQ29udGV4dFByb3ZpZGVyPWQsdC5FbGVtZW50PWksdC5Gb3J3YXJkUmVmPW0sdC5GcmFnbWVudD1sLHQuTGF6eT1iLHQuTWVtbz1nLHQuUG9ydGFsPWEsdC5Qcm9maWxlcj1jLHQuU3RyaWN0TW9kZT11LHQuU3VzcGVuc2U9aCx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfHxlPT09bHx8ZT09PWZ8fGU9PT1jfHxlPT09dXx8ZT09PWh8fCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJihlLiQkdHlwZW9mPT09Ynx8ZS4kJHR5cGVvZj09PWd8fGUuJCR0eXBlb2Y9PT1kfHxlLiQkdHlwZW9mPT09X3x8ZS4kJHR5cGVvZj09PW0pfSx0LmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpfHxyKGUpPT09cH0sdC5pc0NvbmN1cnJlbnRNb2RlPW8sdC5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PV99LHQuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSk9PT1kfSx0LmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09aX0sdC5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSk9PT1tfSx0LmlzRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSk9PT1sfSx0LmlzTGF6eT1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWJ9LHQuaXNNZW1vPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpPT09Z30sdC5pc1BvcnRhbD1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWF9LHQuaXNQcm9maWxlcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKT09PWN9LHQuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpPT09dX0sdC5pc1N1c3BlbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpPT09aH19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvYmxvY2tzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJue2RvYzpuZXcgSCxibG9ja3M6TCxibG9ja1N0YXJ0czpELHRpcDp0aGlzLmRvYyxvbGR0aXA6dGhpcy5kb2MsY3VycmVudExpbmU6IiIsbGluZU51bWJlcjowLG9mZnNldDowLGNvbHVtbjowLG5leHROb25zcGFjZTowLG5leHROb25zcGFjZUNvbHVtbjowLGluZGVudDowLGluZGVudGVkOiExLGJsYW5rOiExLGFsbENsb3NlZDohMCxsYXN0TWF0Y2hlZENvbnRhaW5lcjp0aGlzLmRvYyxyZWZtYXA6e30sbGFzdExpbmVMZW5ndGg6MCxpbmxpbmVQYXJzZXI6bmV3IGwoZSksZmluZE5leHROb25zcGFjZTprLGFkdmFuY2VPZmZzZXQ6dyxhZHZhbmNlTmV4dE5vbnNwYWNlOk0sYnJlYWtPdXRPZkxpc3RzOkMsYWRkTGluZTpPLGFkZENoaWxkOlMsaW5jb3Jwb3JhdGVMaW5lOkksZmluYWxpemU6UCxwcm9jZXNzSW5saW5lczpOLGNsb3NlVW5tYXRjaGVkQmxvY2tzOngscGFyc2U6RixvcHRpb25zOmV8fHt9fX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvbm9kZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLnVuZXNjYXBlU3RyaW5nLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLk9QRU5UQUcsYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvY29tbW9uLmpzIikuQ0xPU0VUQUcsbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaW5saW5lcy5qcyIpLHU9Wy8uLywvXjwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/OlxzfD58JCkvaSwvXjwhLS0vLC9ePFs/XS8sL148IVtBLVpdLywvXjwhXFtDREFUQVxbLywvXjxbXC9dPyg/OmFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8dGl0bGV8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCkoPzpcc3xbXC9dP1s+XXwkKS9pLG5ldyBSZWdFeHAoIl4oPzoiK2krInwiK2ErIilzKiQiLCJpIildLGM9Wy8uLywvPFwvKD86c2NyaXB0fHByZXxzdHlsZSk+L2ksLy0tPi8sL1w/Pi8sLz4vLC9cXVxdPi9dLGQ9L14oPzooPzpcKiAqKXszLH18KD86XyAqKXszLH18KD86LSAqKXszLH0pICokLyxfPS9eWyNgfiorXz08PjAtOS1dLyxwPS9bXiBcdFxmXHZcclxuXS8sZj0vXlsqKy1dLyxtPS9eKFxkezEsOX0pKFsuKV0pLyxoPS9eI3sxLDZ9KD86ICt8JCkvLGc9L15gezMsfSg/IS4qYCl8Xn57Myx9KD8hLip+KS8sYj0vXig/OmB7Myx9fH57Myx9KSg/PSAqJCkvLEU9L14oPzo9K3wtKykgKiQvLHk9L1xyXG58XG58XHIvLHY9ZnVuY3Rpb24oZSl7cmV0dXJuIXAudGVzdChlKX0sVD1mdW5jdGlvbihlLHQpe3JldHVybiB0PGUubGVuZ3RoP2UuY2hhckNvZGVBdCh0KTotMX0sQT1mdW5jdGlvbihlKXtmb3IoO2U7KXtpZihlLl9sYXN0TGluZUJsYW5rKXJldHVybiEwO3ZhciB0PWUudHlwZTtpZigiTGlzdCIhPT10JiYiSXRlbSIhPT10KWJyZWFrO2U9ZS5fbGFzdENoaWxkfXJldHVybiExfSxDPWZ1bmN0aW9uKGUpe3ZhciB0PWUsbj1udWxsO2RveyJMaXN0Ij09PXQudHlwZSYmKG49dCksdD10Ll9wYXJlbnR9d2hpbGUodCk7aWYobil7Zm9yKDtlIT09bjspdGhpcy5maW5hbGl6ZShlLHRoaXMubGluZU51bWJlciksZT1lLl9wYXJlbnQ7dGhpcy5maW5hbGl6ZShuLHRoaXMubGluZU51bWJlciksdGhpcy50aXA9bi5fcGFyZW50fX0sTz1mdW5jdGlvbigpe3RoaXMudGlwLl9zdHJpbmdfY29udGVudCs9dGhpcy5jdXJyZW50TGluZS5zbGljZSh0aGlzLm9mZnNldCkrIlxuIn0sUz1mdW5jdGlvbihlLHQpe2Zvcig7IXRoaXMuYmxvY2tzW3RoaXMudGlwLnR5cGVdLmNhbkNvbnRhaW4oZSk7KXRoaXMuZmluYWxpemUodGhpcy50aXAsdGhpcy5saW5lTnVtYmVyLTEpO3ZhciBuPXQrMSxyPW5ldyBvKGUsW1t0aGlzLmxpbmVOdW1iZXIsbl0sWzAsMF1dKTtyZXR1cm4gci5fc3RyaW5nX2NvbnRlbnQ9IiIsdGhpcy50aXAuYXBwZW5kQ2hpbGQociksdGhpcy50aXA9cixyfSxSPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHM9ZS5jdXJyZW50TGluZS5zbGljZShlLm5leHROb25zcGFjZSksaT17dHlwZTpudWxsLHRpZ2h0OiEwLGJ1bGxldENoYXI6bnVsbCxzdGFydDpudWxsLGRlbGltaXRlcjpudWxsLHBhZGRpbmc6bnVsbCxtYXJrZXJPZmZzZXQ6ZS5pbmRlbnR9O2lmKHQ9cy5tYXRjaChmKSlpLnR5cGU9IkJ1bGxldCIsaS5idWxsZXRDaGFyPXRbMF1bMF07ZWxzZXtpZighKHQ9cy5tYXRjaChtKSkpcmV0dXJuIG51bGw7aS50eXBlPSJPcmRlcmVkIixpLnN0YXJ0PXBhcnNlSW50KHRbMV0pLGkuZGVsaW1pdGVyPXRbMl19aWYoLTEhPT0obj1UKGUuY3VycmVudExpbmUsZS5uZXh0Tm9uc3BhY2UrdFswXS5sZW5ndGgpKSYmOSE9PW4mJjMyIT09bilyZXR1cm4gbnVsbDtlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQodFswXS5sZW5ndGgsITApLHI9ZS5jb2x1bW4sbz1lLm9mZnNldDtkb3tlLmFkdmFuY2VPZmZzZXQoMSwhMCksbj1UKGUuY3VycmVudExpbmUsZS5vZmZzZXQpfXdoaWxlKGUuY29sdW1uLXI8NSYmKDMyPT09bnx8OT09PW4pKTt2YXIgYT0tMT09PVQoZS5jdXJyZW50TGluZSxlLm9mZnNldCksbD1lLmNvbHVtbi1yO3JldHVybiBsPj01fHxsPDF8fGE/KGkucGFkZGluZz10WzBdLmxlbmd0aCsxLGUuY29sdW1uPXIsZS5vZmZzZXQ9bywzMj09PVQoZS5jdXJyZW50TGluZSxlLm9mZnNldCkmJmUuYWR2YW5jZU9mZnNldCgxLCEwKSk6aS5wYWRkaW5nPXRbMF0ubGVuZ3RoK2wsaX0saj1mdW5jdGlvbihlLHQpe3JldHVybiBlLnR5cGU9PT10LnR5cGUmJmUuZGVsaW1pdGVyPT09dC5kZWxpbWl0ZXImJmUuYnVsbGV0Q2hhcj09PXQuYnVsbGV0Q2hhcn0seD1mdW5jdGlvbigpe2lmKCF0aGlzLmFsbENsb3NlZCl7Zm9yKDt0aGlzLm9sZHRpcCE9PXRoaXMubGFzdE1hdGNoZWRDb250YWluZXI7KXt2YXIgZT10aGlzLm9sZHRpcC5fcGFyZW50O3RoaXMuZmluYWxpemUodGhpcy5vbGR0aXAsdGhpcy5saW5lTnVtYmVyLTEpLHRoaXMub2xkdGlwPWV9dGhpcy5hbGxDbG9zZWQ9ITB9fSxMPXtEb2N1bWVudDp7Y29udGludWU6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZmluYWxpemU6ZnVuY3Rpb24oKXt9LGNhbkNvbnRhaW46ZnVuY3Rpb24oZSl7cmV0dXJuIkl0ZW0iIT09ZX0sYWNjZXB0c0xpbmVzOiExfSxMaXN0Ontjb250aW51ZTpmdW5jdGlvbigpe3JldHVybiAwfSxmaW5hbGl6ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10Ll9maXJzdENoaWxkO247KXtpZihBKG4pJiZuLl9uZXh0KXt0Ll9saXN0RGF0YS50aWdodD0hMTticmVha31mb3IodmFyIHI9bi5fZmlyc3RDaGlsZDtyOyl7aWYoQShyKSYmKG4uX25leHR8fHIuX25leHQpKXt0Ll9saXN0RGF0YS50aWdodD0hMTticmVha31yPXIuX25leHR9bj1uLl9uZXh0fX0sY2FuQ29udGFpbjpmdW5jdGlvbihlKXtyZXR1cm4iSXRlbSI9PT1lfSxhY2NlcHRzTGluZXM6ITF9LEJsb2NrUXVvdGU6e2NvbnRpbnVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VycmVudExpbmU7cmV0dXJuIGUuaW5kZW50ZWR8fDYyIT09VCh0LGUubmV4dE5vbnNwYWNlKT8xOihlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQoMSwhMSksMzI9PT1UKHQsZS5vZmZzZXQpJiZlLm9mZnNldCsrLDApfSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2FuQ29udGFpbjpmdW5jdGlvbihlKXtyZXR1cm4iSXRlbSIhPT1lfSxhY2NlcHRzTGluZXM6ITF9LEl0ZW06e2NvbnRpbnVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5ibGFuayYmbnVsbCE9PXQuX2ZpcnN0Q2hpbGQpZS5hZHZhbmNlTmV4dE5vbnNwYWNlKCk7ZWxzZXtpZighKGUuaW5kZW50Pj10Ll9saXN0RGF0YS5tYXJrZXJPZmZzZXQrdC5fbGlzdERhdGEucGFkZGluZykpcmV0dXJuIDE7ZS5hZHZhbmNlT2Zmc2V0KHQuX2xpc3REYXRhLm1hcmtlck9mZnNldCt0Ll9saXN0RGF0YS5wYWRkaW5nLCEwKX1yZXR1cm4gMH0sZmluYWxpemU6ZnVuY3Rpb24oKXt9LGNhbkNvbnRhaW46ZnVuY3Rpb24oZSl7cmV0dXJuIkl0ZW0iIT09ZX0sYWNjZXB0c0xpbmVzOiExfSxIZWFkaW5nOntjb250aW51ZTpmdW5jdGlvbigpe3JldHVybiAxfSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2FuQ29udGFpbjpmdW5jdGlvbigpe3JldHVybiExfSxhY2NlcHRzTGluZXM6ITF9LFRoZW1hdGljQnJlYWs6e2NvbnRpbnVlOmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGZpbmFsaXplOmZ1bmN0aW9uKCl7fSxjYW5Db250YWluOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGFjY2VwdHNMaW5lczohMX0sQ29kZUJsb2NrOntjb250aW51ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuY3VycmVudExpbmUscj1lLmluZGVudDtpZih0Ll9pc0ZlbmNlZCl7dmFyIG89cjw9MyYmbi5jaGFyQXQoZS5uZXh0Tm9uc3BhY2UpPT09dC5fZmVuY2VDaGFyJiZuLnNsaWNlKGUubmV4dE5vbnNwYWNlKS5tYXRjaChiKTtpZihvJiZvWzBdLmxlbmd0aD49dC5fZmVuY2VMZW5ndGgpcmV0dXJuIGUuZmluYWxpemUodCxlLmxpbmVOdW1iZXIpLDI7Zm9yKHZhciBzPXQuX2ZlbmNlT2Zmc2V0O3M+MCYmMzI9PT1UKG4sZS5vZmZzZXQpOyllLmFkdmFuY2VPZmZzZXQoMSwhMSkscy0tfWVsc2UgaWYocj49NCllLmFkdmFuY2VPZmZzZXQoNCwhMCk7ZWxzZXtpZighZS5ibGFuaylyZXR1cm4gMTtlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKX1yZXR1cm4gMH0sZmluYWxpemU6ZnVuY3Rpb24oZSx0KXtpZih0Ll9pc0ZlbmNlZCl7dmFyIG49dC5fc3RyaW5nX2NvbnRlbnQscj1uLmluZGV4T2YoIlxuIiksbz1uLnNsaWNlKDAsciksaT1uLnNsaWNlKHIrMSk7dC5pbmZvPXMoby50cmltKCkpLHQuX2xpdGVyYWw9aX1lbHNlIHQuX2xpdGVyYWw9dC5fc3RyaW5nX2NvbnRlbnQucmVwbGFjZSgvKFxuICopKyQvLCJcbiIpO3QuX3N0cmluZ19jb250ZW50PW51bGx9LGNhbkNvbnRhaW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYWNjZXB0c0xpbmVzOiEwfSxIdG1sQmxvY2s6e2NvbnRpbnVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuYmxhbmt8fDYhPT10Ll9odG1sQmxvY2tUeXBlJiY3IT09dC5faHRtbEJsb2NrVHlwZT8wOjF9LGZpbmFsaXplOmZ1bmN0aW9uKGUsdCl7dC5fbGl0ZXJhbD10Ll9zdHJpbmdfY29udGVudC5yZXBsYWNlKC8oXG4gKikrJC8sIiIpLHQuX3N0cmluZ19jb250ZW50PW51bGx9LGNhbkNvbnRhaW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYWNjZXB0c0xpbmVzOiEwfSxQYXJhZ3JhcGg6e2NvbnRpbnVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJsYW5rPzE6MH0sZmluYWxpemU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj0hMTs5MT09PVQodC5fc3RyaW5nX2NvbnRlbnQsMCkmJihuPWUuaW5saW5lUGFyc2VyLnBhcnNlUmVmZXJlbmNlKHQuX3N0cmluZ19jb250ZW50LGUucmVmbWFwKSk7KXQuX3N0cmluZ19jb250ZW50PXQuX3N0cmluZ19jb250ZW50LnNsaWNlKG4pLHI9ITA7ciYmdih0Ll9zdHJpbmdfY29udGVudCkmJnQudW5saW5rKCl9LGNhbkNvbnRhaW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYWNjZXB0c0xpbmVzOiEwfX0sRD1bZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZW50ZWR8fDYyIT09VChlLmN1cnJlbnRMaW5lLGUubmV4dE5vbnNwYWNlKT8wOihlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQoMSwhMSksMzI9PT1UKGUuY3VycmVudExpbmUsZS5vZmZzZXQpJiZlLmFkdmFuY2VPZmZzZXQoMSwhMSksZS5jbG9zZVVubWF0Y2hlZEJsb2NrcygpLGUuYWRkQ2hpbGQoIkJsb2NrUXVvdGUiLGUubmV4dE5vbnNwYWNlKSwxKX0sZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIWUuaW5kZW50ZWQmJih0PWUuY3VycmVudExpbmUuc2xpY2UoZS5uZXh0Tm9uc3BhY2UpLm1hdGNoKGgpKSl7ZS5hZHZhbmNlTmV4dE5vbnNwYWNlKCksZS5hZHZhbmNlT2Zmc2V0KHRbMF0ubGVuZ3RoLCExKSxlLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCk7dmFyIG49ZS5hZGRDaGlsZCgiSGVhZGluZyIsZS5uZXh0Tm9uc3BhY2UpO3JldHVybiBuLmxldmVsPXRbMF0udHJpbSgpLmxlbmd0aCxuLl9zdHJpbmdfY29udGVudD1lLmN1cnJlbnRMaW5lLnNsaWNlKGUub2Zmc2V0KS5yZXBsYWNlKC9eICojKyAqJC8sIiIpLnJlcGxhY2UoLyArIysgKiQvLCIiKSxlLmFkdmFuY2VPZmZzZXQoZS5jdXJyZW50TGluZS5sZW5ndGgtZS5vZmZzZXQpLDJ9cmV0dXJuIDB9LGZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlLmluZGVudGVkJiYodD1lLmN1cnJlbnRMaW5lLnNsaWNlKGUubmV4dE5vbnNwYWNlKS5tYXRjaChnKSkpe3ZhciBuPXRbMF0ubGVuZ3RoO2UuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKTt2YXIgcj1lLmFkZENoaWxkKCJDb2RlQmxvY2siLGUubmV4dE5vbnNwYWNlKTtyZXR1cm4gci5faXNGZW5jZWQ9ITAsci5fZmVuY2VMZW5ndGg9bixyLl9mZW5jZUNoYXI9dFswXVswXSxyLl9mZW5jZU9mZnNldD1lLmluZGVudCxlLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSxlLmFkdmFuY2VPZmZzZXQobiwhMSksMn1yZXR1cm4gMH0sZnVuY3Rpb24oZSx0KXtpZighZS5pbmRlbnRlZCYmNjA9PT1UKGUuY3VycmVudExpbmUsZS5uZXh0Tm9uc3BhY2UpKXt2YXIgbixyPWUuY3VycmVudExpbmUuc2xpY2UoZS5uZXh0Tm9uc3BhY2UpO2ZvcihuPTE7bjw9NztuKyspaWYodVtuXS50ZXN0KHIpJiYobjw3fHwiUGFyYWdyYXBoIiE9PXQudHlwZSkpe2UuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKTt2YXIgbz1lLmFkZENoaWxkKCJIdG1sQmxvY2siLGUub2Zmc2V0KTtyZXR1cm4gby5faHRtbEJsb2NrVHlwZT1uLDJ9fXJldHVybiAwfSxmdW5jdGlvbihlLHQpe3ZhciBuO2lmKCFlLmluZGVudGVkJiYiUGFyYWdyYXBoIj09PXQudHlwZSYmKG49ZS5jdXJyZW50TGluZS5zbGljZShlLm5leHROb25zcGFjZSkubWF0Y2goRSkpKXtlLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCk7dmFyIHI9bmV3IG8oIkhlYWRpbmciLHQuc291cmNlcG9zKTtyZXR1cm4gci5sZXZlbD0iPSI9PT1uWzBdWzBdPzE6MixyLl9zdHJpbmdfY29udGVudD10Ll9zdHJpbmdfY29udGVudCx0Lmluc2VydEFmdGVyKHIpLHQudW5saW5rKCksZS50aXA9cixlLmFkdmFuY2VPZmZzZXQoZS5jdXJyZW50TGluZS5sZW5ndGgtZS5vZmZzZXQsITEpLDJ9cmV0dXJuIDB9LGZ1bmN0aW9uKGUpe3JldHVybiFlLmluZGVudGVkJiZkLnRlc3QoZS5jdXJyZW50TGluZS5zbGljZShlLm5leHROb25zcGFjZSkpPyhlLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCksZS5hZGRDaGlsZCgiVGhlbWF0aWNCcmVhayIsZS5uZXh0Tm9uc3BhY2UpLGUuYWR2YW5jZU9mZnNldChlLmN1cnJlbnRMaW5lLmxlbmd0aC1lLm9mZnNldCwhMSksMik6MH0sZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gZS5pbmRlbnRlZCYmIkxpc3QiIT09dC50eXBlfHwhKG49UihlKSk/MDooZS5jbG9zZVVubWF0Y2hlZEJsb2NrcygpLCJMaXN0Ij09PWUudGlwLnR5cGUmJmoodC5fbGlzdERhdGEsbil8fCh0PWUuYWRkQ2hpbGQoIkxpc3QiLGUubmV4dE5vbnNwYWNlKSx0Ll9saXN0RGF0YT1uKSx0PWUuYWRkQ2hpbGQoIkl0ZW0iLGUubmV4dE5vbnNwYWNlKSx0Ll9saXN0RGF0YT1uLDEpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRlbnRlZCYmIlBhcmFncmFwaCIhPT1lLnRpcC50eXBlJiYhZS5ibGFuaz8oZS5hZHZhbmNlT2Zmc2V0KDQsITApLGUuY2xvc2VVbm1hdGNoZWRCbG9ja3MoKSxlLmFkZENoaWxkKCJDb2RlQmxvY2siLGUub2Zmc2V0KSwyKTowfV0sdz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG89MCxzPXRoaXMuY3VycmVudExpbmU7ZT4wJiYocj1zW3RoaXMub2Zmc2V0XSk7KSJcdCI9PT1yPyhuPTQtdGhpcy5jb2x1bW4lNCx0aGlzLmNvbHVtbis9bix0aGlzLm9mZnNldCs9MSxlLT10P246MSk6KG8rPTEsdGhpcy5vZmZzZXQrPTEsdGhpcy5jb2x1bW4rPTEsZS09MSl9LE09ZnVuY3Rpb24oKXt0aGlzLm9mZnNldD10aGlzLm5leHROb25zcGFjZSx0aGlzLmNvbHVtbj10aGlzLm5leHROb25zcGFjZUNvbHVtbn0saz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuY3VycmVudExpbmUsbj10aGlzLm9mZnNldCxyPXRoaXMuY29sdW1uOyIiIT09KGU9dC5jaGFyQXQobikpOylpZigiICI9PT1lKW4rKyxyKys7ZWxzZXtpZigiXHQiIT09ZSlicmVhaztuKysscis9NC1yJTR9dGhpcy5ibGFuaz0iXG4iPT09ZXx8IlxyIj09PWV8fCIiPT09ZSx0aGlzLm5leHROb25zcGFjZT1uLHRoaXMubmV4dE5vbnNwYWNlQ29sdW1uPXIsdGhpcy5pbmRlbnQ9dGhpcy5uZXh0Tm9uc3BhY2VDb2x1bW4tdGhpcy5jb2x1bW4sdGhpcy5pbmRlbnRlZD10aGlzLmluZGVudD49NH0sST1mdW5jdGlvbihlKXt2YXIgdCxuPSEwLHI9dGhpcy5kb2M7dGhpcy5vbGR0aXA9dGhpcy50aXAsdGhpcy5vZmZzZXQ9MCx0aGlzLmNvbHVtbj0wLHRoaXMubGluZU51bWJlcis9MSwtMSE9PWUuaW5kZXhPZigiXDAiKSYmKGU9ZS5yZXBsYWNlKC9cMC9nLCLvv70iKSksdGhpcy5jdXJyZW50TGluZT1lO2Zvcih2YXIgbzsobz1yLl9sYXN0Q2hpbGQpJiZvLl9vcGVuOyl7c3dpdGNoKHI9byx0aGlzLmZpbmROZXh0Tm9uc3BhY2UoKSx0aGlzLmJsb2Nrc1tyLnR5cGVdLmNvbnRpbnVlKHRoaXMscikpe2Nhc2UgMDpicmVhaztjYXNlIDE6bj0hMTticmVhaztjYXNlIDI6cmV0dXJuIHZvaWQodGhpcy5sYXN0TGluZUxlbmd0aD1lLmxlbmd0aCk7ZGVmYXVsdDp0aHJvdyJjb250aW51ZSByZXR1cm5lZCBpbGxlZ2FsIHZhbHVlLCBtdXN0IGJlIDAsIDEsIG9yIDIifWlmKCFuKXtyPXIuX3BhcmVudDticmVha319dGhpcy5hbGxDbG9zZWQ9cj09PXRoaXMub2xkdGlwLHRoaXMubGFzdE1hdGNoZWRDb250YWluZXI9cix0aGlzLmJsYW5rJiZyLl9sYXN0TGluZUJsYW5rJiYodGhpcy5icmVha091dE9mTGlzdHMocikscj10aGlzLnRpcCk7Zm9yKHZhciBzPSJQYXJhZ3JhcGgiIT09ci50eXBlJiZMW3IudHlwZV0uYWNjZXB0c0xpbmVzLGk9dGhpcy5ibG9ja1N0YXJ0cyxhPWkubGVuZ3RoOyFzOyl7aWYodGhpcy5maW5kTmV4dE5vbnNwYWNlKCksIXRoaXMuaW5kZW50ZWQmJiFfLnRlc3QoZS5zbGljZSh0aGlzLm5leHROb25zcGFjZSkpKXt0aGlzLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKTticmVha31mb3IodmFyIGw9MDtsPGE7KXt2YXIgdT1pW2xdKHRoaXMscik7aWYoMT09PXUpe3I9dGhpcy50aXA7YnJlYWt9aWYoMj09PXUpe3I9dGhpcy50aXAscz0hMDticmVha31sKyt9aWYobD09PWEpe3RoaXMuYWR2YW5jZU5leHROb25zcGFjZSgpO2JyZWFrfX1pZih0aGlzLmFsbENsb3NlZHx8dGhpcy5ibGFua3x8IlBhcmFncmFwaCIhPT10aGlzLnRpcC50eXBlKXt0aGlzLmNsb3NlVW5tYXRjaGVkQmxvY2tzKCksdGhpcy5ibGFuayYmci5sYXN0Q2hpbGQmJihyLmxhc3RDaGlsZC5fbGFzdExpbmVCbGFuaz0hMCksdD1yLnR5cGU7Zm9yKHZhciBkPXRoaXMuYmxhbmsmJiEoIkJsb2NrUXVvdGUiPT09dHx8IkNvZGVCbG9jayI9PT10JiZyLl9pc0ZlbmNlZHx8Ikl0ZW0iPT09dCYmIXIuX2ZpcnN0Q2hpbGQmJnIuc291cmNlcG9zWzBdWzBdPT09dGhpcy5saW5lTnVtYmVyKSxwPXI7cDspcC5fbGFzdExpbmVCbGFuaz1kLHA9cC5fcGFyZW50O3RoaXMuYmxvY2tzW3RdLmFjY2VwdHNMaW5lcz8odGhpcy5hZGRMaW5lKCksIkh0bWxCbG9jayI9PT10JiZyLl9odG1sQmxvY2tUeXBlPj0xJiZyLl9odG1sQmxvY2tUeXBlPD01JiZjW3IuX2h0bWxCbG9ja1R5cGVdLnRlc3QodGhpcy5jdXJyZW50TGluZS5zbGljZSh0aGlzLm9mZnNldCkpJiZ0aGlzLmZpbmFsaXplKHIsdGhpcy5saW5lTnVtYmVyKSk6dGhpcy5vZmZzZXQ8ZS5sZW5ndGgmJiF0aGlzLmJsYW5rJiYocj10aGlzLmFkZENoaWxkKCJQYXJhZ3JhcGgiLHRoaXMub2Zmc2V0KSx0aGlzLmFkdmFuY2VOZXh0Tm9uc3BhY2UoKSx0aGlzLmFkZExpbmUoKSl9ZWxzZSB0aGlzLmFkZExpbmUoKTt0aGlzLmxhc3RMaW5lTGVuZ3RoPWUubGVuZ3RofSxQPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fcGFyZW50O2UuX29wZW49ITEsZS5zb3VyY2Vwb3NbMV09W3QsdGhpcy5sYXN0TGluZUxlbmd0aF0sdGhpcy5ibG9ja3NbZS50eXBlXS5maW5hbGl6ZSh0aGlzLGUpLHRoaXMudGlwPW59LE49ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG89ZS53YWxrZXIoKTtmb3IodGhpcy5pbmxpbmVQYXJzZXIucmVmbWFwPXRoaXMucmVmbWFwLHRoaXMuaW5saW5lUGFyc2VyLm9wdGlvbnM9dGhpcy5vcHRpb25zO249by5uZXh0KCk7KXQ9bi5ub2RlLHI9dC50eXBlLG4uZW50ZXJpbmd8fCJQYXJhZ3JhcGgiIT09ciYmIkhlYWRpbmciIT09cnx8dGhpcy5pbmxpbmVQYXJzZXIucGFyc2UodCl9LEg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8oIkRvY3VtZW50IixbWzEsMV0sWzAsMF1dKX0sRj1mdW5jdGlvbihlKXt0aGlzLmRvYz1uZXcgSCx0aGlzLnRpcD10aGlzLmRvYyx0aGlzLnJlZm1hcD17fSx0aGlzLmxpbmVOdW1iZXI9MCx0aGlzLmxhc3RMaW5lTGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmNvbHVtbj0wLHRoaXMubGFzdE1hdGNoZWRDb250YWluZXI9dGhpcy5kb2MsdGhpcy5jdXJyZW50TGluZT0iIix0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lKCJwcmVwYXJpbmcgaW5wdXQiKTt2YXIgdD1lLnNwbGl0KHkpLG49dC5sZW5ndGg7MTA9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkmJihuLT0xKSx0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lRW5kKCJwcmVwYXJpbmcgaW5wdXQiKSx0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lKCJibG9jayBwYXJzaW5nIik7Zm9yKHZhciByPTA7cjxuO3IrKyl0aGlzLmluY29ycG9yYXRlTGluZSh0W3JdKTtmb3IoO3RoaXMudGlwOyl0aGlzLmZpbmFsaXplKHRoaXMudGlwLG4pO3JldHVybiB0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lRW5kKCJibG9jayBwYXJzaW5nIiksdGhpcy5vcHRpb25zLnRpbWUmJmNvbnNvbGUudGltZSgiaW5saW5lIHBhcnNpbmciKSx0aGlzLnByb2Nlc3NJbmxpbmVzKHRoaXMuZG9jKSx0aGlzLm9wdGlvbnMudGltZSYmY29uc29sZS50aW1lRW5kKCJpbmxpbmUgcGFyc2luZyIpLHRoaXMuZG9jfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9jb21tb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbWR1cmwvZW5jb2RlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9tZHVybC9kZWNvZGUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2luZGV4LmpzIikuZGVjb2RlSFRNTCxpPSImKD86I3hbYS1mMC05XXsxLDh9fCNbMC05XXsxLDh9fFthLXpdW2EtejAtOV17MSwzMX0pOyIsYT0iPFtBLVphLXpdW0EtWmEtejAtOS1dKig/OlxccytbYS16QS1aXzpdW2EtekEtWjAtOTouXy1dKig/Olxccyo9XFxzKig/OlteXCInPTw+YFxceDAwLVxceDIwXSt8J1teJ10qJ3xcIlteXCJdKlwiKSk/KSpcXHMqLz8+IixsPSI8L1tBLVphLXpdW0EtWmEtejAtOS1dKlxccypbPl0iLHU9bmV3IFJlZ0V4cCgiXig/OjxbQS1aYS16XVtBLVphLXowLTktXSooPzpcXHMrW2EtekEtWl86XVthLXpBLVowLTk6Ll8tXSooPzpcXHMqPVxccyooPzpbXlwiJz08PmBcXHgwMC1cXHgyMF0rfCdbXiddKid8XCJbXlwiXSpcIikpPykqXFxzKi8/Pnw8L1tBLVphLXpdW0EtWmEtejAtOS1dKlxccypbPl18XHgzYyEtLS0tXHgzZXxceDNjIS0tKD86LT9bXj4tXSkoPzotP1teLV0pKi0tXHgzZXxbPF1bP10uKj9bP11bPl18PCFbQS1aXStcXHMrW14+XSo+fDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPikiLCJpIiksYz0vW1xcJl0vLGQ9IlshXCIjJCUmJygpKissLi86Ozw9Pj9AW1xcXFxcXF1eX2B7fH1+LV0iLF89bmV3IFJlZ0V4cCgiXFxcXCIrZCsifCIraSwiZ2kiKSxwPW5ldyBSZWdFeHAoJ1smPD4iXScsImciKSxmPW5ldyBSZWdFeHAoaSsnfFsmPD4iXScsImdpIiksbT1mdW5jdGlvbihlKXtyZXR1cm4gOTI9PT1lLmNoYXJDb2RlQXQoMCk/ZS5jaGFyQXQoMSk6cyhlKX0saD1mdW5jdGlvbihlKXtyZXR1cm4gYy50ZXN0KGUpP2UucmVwbGFjZShfLG0pOmV9LGc9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiByKG8oZSkpfWNhdGNoKHQpe3JldHVybiBlfX0sYj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSImIjpyZXR1cm4iJmFtcDsiO2Nhc2UiPCI6cmV0dXJuIiZsdDsiO2Nhc2UiPiI6cmV0dXJuIiZndDsiO2Nhc2UnIic6cmV0dXJuIiZxdW90OyI7ZGVmYXVsdDpyZXR1cm4gZX19LEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC50ZXN0KGUpP3Q/ZS5yZXBsYWNlKGYsYik6ZS5yZXBsYWNlKHAsYik6ZX07ZS5leHBvcnRzPXt1bmVzY2FwZVN0cmluZzpoLG5vcm1hbGl6ZVVSSTpnLGVzY2FwZVhtbDpFLHJlSHRtbFRhZzp1LE9QRU5UQUc6YSxDTE9TRVRBRzpsLEVOVElUWTppLEVTQ0FQQUJMRTpkfX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9mcm9tLWNvZGUtcG9pbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7LyohIGh0dHA6Ly9tdGhzLmJlL2Zyb21jb2RlcG9pbnQgdjAuMi4xIGJ5IEBtYXRoaWFzICovCmlmKFN0cmluZy5mcm9tQ29kZVBvaW50KWUuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMzKTt0aHJvdyBlfX07ZWxzZXt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlLG89TWF0aC5mbG9vcixzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPVtdLHM9LTEsaT1hcmd1bWVudHMubGVuZ3RoO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT0iIjsrK3M8aTspe3ZhciBsPU51bWJlcihhcmd1bWVudHNbc10pO2lmKCFpc0Zpbml0ZShsKXx8bDwwfHxsPjExMTQxMTF8fG8obCkhPT1sKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMzKTtsPD02NTUzNT9uLnB1c2gobCk6KGwtPTY1NTM2LGU9NTUyOTYrKGw+PjEwKSx0PWwlMTAyNCs1NjMyMCxuLnB1c2goZSx0KSksKHMrMT09PWl8fG4ubGVuZ3RoPjE2Mzg0KSYmKGErPXIuYXBwbHkobnVsbCxuKSxuLmxlbmd0aD0wKX1yZXR1cm4gYX07ZS5leHBvcnRzPXN9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2h0bWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57c29mdGJyZWFrOiJcbiIsZXNjYXBlOm8sb3B0aW9uczplfHx7fSxyZW5kZXI6Y319dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLmVzY2FwZVhtbCxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iPCIrZTtpZih0JiZ0Lmxlbmd0aD4wKWZvcih2YXIgbyxzPTA7dm9pZCAwIT09KG89dFtzXSk7KXIrPSIgIitvWzBdKyc9Iicrb1sxXSsnIicscysrO3JldHVybiBuJiYocis9IiAvIikscis9Ij4ifSxpPS9cPFtePl0qXD4vLGE9L15qYXZhc2NyaXB0Onx2YnNjcmlwdDp8ZmlsZTp8ZGF0YTovaSxsPS9eZGF0YTppbWFnZVwvKD86cG5nfGdpZnxqcGVnfHdlYnApL2ksdT1mdW5jdGlvbihlKXtyZXR1cm4gYS50ZXN0KGUpJiYhbC50ZXN0KGUpfSxjPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsbCxjLGQ9ZS53YWxrZXIoKSxfPSIiLHA9IlxuIixmPTAsbT1mdW5jdGlvbihlKXtfKz1mPjA/ZS5yZXBsYWNlKGksIiIpOmUscD1lfSxoPXRoaXMuZXNjYXBlLGc9ZnVuY3Rpb24oKXsiXG4iIT09cCYmKF8rPSJcbiIscD0iXG4iKX0sYj10aGlzLm9wdGlvbnM7Zm9yKGIudGltZSYmY29uc29sZS50aW1lKCJyZW5kZXJpbmciKTtvPWQubmV4dCgpOyl7aWYobD1vLmVudGVyaW5nLGE9by5ub2RlLHQ9W10sYi5zb3VyY2Vwb3Mpe3ZhciBFPWEuc291cmNlcG9zO0UmJnQucHVzaChbImRhdGEtc291cmNlcG9zIixTdHJpbmcoRVswXVswXSkrIjoiK1N0cmluZyhFWzBdWzFdKSsiLSIrU3RyaW5nKEVbMV1bMF0pKyI6IitTdHJpbmcoRVsxXVsxXSldKX1zd2l0Y2goYS50eXBlKXtjYXNlIlRleHQiOm0oaChhLmxpdGVyYWwsITEpKTticmVhaztjYXNlIlNvZnRicmVhayI6bSh0aGlzLnNvZnRicmVhayk7YnJlYWs7Y2FzZSJIYXJkYnJlYWsiOm0ocygiYnIiLFtdLCEwKSksZygpO2JyZWFrO2Nhc2UiRW1waCI6bShzKGw/ImVtIjoiL2VtIikpO2JyZWFrO2Nhc2UiU3Ryb25nIjptKHMobD8ic3Ryb25nIjoiL3N0cm9uZyIpKTticmVhaztjYXNlIkh0bWxJbmxpbmUiOm0oYi5zYWZlPyJceDNjIS0tIHJhdyBIVE1MIG9taXR0ZWQgLS1ceDNlIjphLmxpdGVyYWwpO2JyZWFrO2Nhc2UiQ3VzdG9tSW5saW5lIjpsJiZhLm9uRW50ZXI/bShhLm9uRW50ZXIpOiFsJiZhLm9uRXhpdCYmbShhLm9uRXhpdCk7YnJlYWs7Y2FzZSJMaW5rIjpsPyhiLnNhZmUmJnUoYS5kZXN0aW5hdGlvbil8fHQucHVzaChbImhyZWYiLGgoYS5kZXN0aW5hdGlvbiwhMCldKSxhLnRpdGxlJiZ0LnB1c2goWyJ0aXRsZSIsaChhLnRpdGxlLCEwKV0pLG0ocygiYSIsdCkpKTptKHMoIi9hIikpO2JyZWFrO2Nhc2UiSW1hZ2UiOmw/KDA9PT1mJiZtKGIuc2FmZSYmdShhLmRlc3RpbmF0aW9uKT8nPGltZyBzcmM9IiIgYWx0PSInOic8aW1nIHNyYz0iJytoKGEuZGVzdGluYXRpb24sITApKyciIGFsdD0iJyksZis9MSk6MD09PShmLT0xKSYmKGEudGl0bGUmJm0oJyIgdGl0bGU9IicraChhLnRpdGxlLCEwKSksbSgnIiAvPicpKTticmVhaztjYXNlIkNvZGUiOm0ocygiY29kZSIpK2goYS5saXRlcmFsLCExKStzKCIvY29kZSIpKTticmVhaztjYXNlIkRvY3VtZW50IjpicmVhaztjYXNlIlBhcmFncmFwaCI6aWYobnVsbCE9PShjPWEucGFyZW50LnBhcmVudCkmJiJMaXN0Ij09PWMudHlwZSYmYy5saXN0VGlnaHQpYnJlYWs7bD8oZygpLG0ocygicCIsdCkpKToobShzKCIvcCIpKSxnKCkpO2JyZWFrO2Nhc2UiQmxvY2tRdW90ZSI6bD8oZygpLG0ocygiYmxvY2txdW90ZSIsdCkpLGcoKSk6KGcoKSxtKHMoIi9ibG9ja3F1b3RlIikpLGcoKSk7YnJlYWs7Y2FzZSJJdGVtIjpsP20ocygibGkiLHQpKToobShzKCIvbGkiKSksZygpKTticmVhaztjYXNlIkxpc3QiOmlmKHI9IkJ1bGxldCI9PT1hLmxpc3RUeXBlPyJ1bCI6Im9sIixsKXt2YXIgeT1hLmxpc3RTdGFydDtudWxsIT09eSYmMSE9PXkmJnQucHVzaChbInN0YXJ0Iix5LnRvU3RyaW5nKCldKSxnKCksbShzKHIsdCkpLGcoKX1lbHNlIGcoKSxtKHMoIi8iK3IpKSxnKCk7YnJlYWs7Y2FzZSJIZWFkaW5nIjpyPSJoIithLmxldmVsLGw/KGcoKSxtKHMocix0KSkpOihtKHMoIi8iK3IpKSxnKCkpO2JyZWFrO2Nhc2UiQ29kZUJsb2NrIjpuPWEuaW5mbz9hLmluZm8uc3BsaXQoL1xzKy8pOltdLG4ubGVuZ3RoPjAmJm5bMF0ubGVuZ3RoPjAmJnQucHVzaChbImNsYXNzIiwibGFuZ3VhZ2UtIitoKG5bMF0sITApXSksZygpLG0ocygicHJlIikrcygiY29kZSIsdCkpLG0oaChhLmxpdGVyYWwsITEpKSxtKHMoIi9jb2RlIikrcygiL3ByZSIpKSxnKCk7YnJlYWs7Y2FzZSJIdG1sQmxvY2siOmcoKSxtKGIuc2FmZT8iXHgzYyEtLSByYXcgSFRNTCBvbWl0dGVkIC0tXHgzZSI6YS5saXRlcmFsKSxnKCk7YnJlYWs7Y2FzZSJDdXN0b21CbG9jayI6ZygpLGwmJmEub25FbnRlcj9tKGEub25FbnRlcik6IWwmJmEub25FeGl0JiZtKGEub25FeGl0KSxnKCk7YnJlYWs7Y2FzZSJUaGVtYXRpY0JyZWFrIjpnKCksbShzKCJociIsdCwhMCkpLGcoKTticmVhaztkZWZhdWx0OnRocm93IlVua25vd24gbm9kZSB0eXBlICIrYS50eXBlfX1yZXR1cm4gYi50aW1lJiZjb25zb2xlLnRpbWVFbmQoInJlbmRlcmluZyIpLF99O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cy52ZXJzaW9uPSIwLjI0LjAiLGUuZXhwb3J0cy5Ob2RlPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ub2RlLmpzIiksZS5leHBvcnRzLlBhcnNlcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvYmxvY2tzLmpzIiksZS5leHBvcnRzLkh0bWxSZW5kZXJlcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaHRtbC5qcyIpLGUuZXhwb3J0cy5YbWxSZW5kZXJlcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIveG1sLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaW5saW5lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybntzdWJqZWN0OiIiLGRlbGltaXRlcnM6bnVsbCxwb3M6MCxyZWZtYXA6e30sbWF0Y2g6TixwZWVrOkgsc3BubDpGLHBhcnNlQmFja3RpY2tzOkIscGFyc2VCYWNrc2xhc2g6VSxwYXJzZUF1dG9saW5rOkcscGFyc2VIdG1sVGFnOnosc2NhbkRlbGltczpWLGhhbmRsZURlbGltOlcscGFyc2VMaW5rVGl0bGU6WCxwYXJzZUxpbmtEZXN0aW5hdGlvbjokLHBhcnNlTGlua0xhYmVsOlEscGFyc2VPcGVuQnJhY2tldDpKLHBhcnNlQ2xvc2VCcmFja2V0OmVlLHBhcnNlQmFuZzpaLHBhcnNlRW50aXR5OnRlLHBhcnNlU3RyaW5nOm5lLHBhcnNlTmV3bGluZTpyZSxwYXJzZVJlZmVyZW5jZTpvZSxwYXJzZUlubGluZTpzZSxwcm9jZXNzRW1waGFzaXM6SyxyZW1vdmVEZWxpbWl0ZXI6WSxvcHRpb25zOmV8fHt9LHBhcnNlOmllfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvbm9kZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL25vcm1hbGl6ZS1yZWZlcmVuY2UuanMiKSxhPXMubm9ybWFsaXplVVJJLGw9cy51bmVzY2FwZVN0cmluZyx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9mcm9tLWNvZGUtcG9pbnQuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2VudGl0aWVzL2luZGV4LmpzIikuZGVjb2RlSFRNTDtuKCIuL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnJlcGVhdC9yZXBlYXQuanMiKTt2YXIgZD1zLkVTQ0FQQUJMRSxfPSJcXFxcIitkLHA9IlxcKChbXlxcXFwoKVxceDAwLVxceDIwXXwiK18rInxcXFxcKSpcXCkiLGY9cy5FTlRJVFksbT1zLnJlSHRtbFRhZyxoPW5ldyBSZWdFeHAoL15bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiNcJCUmXChcKVwqXCssXC1cLlwvOjs8PT5cP0BcW1xdXF5fYFx7XHxcfX5dLyksZz1uZXcgUmVnRXhwKCdeKD86IignK18rJ3xbXiJcXHgwMF0pKiJ8XCcoJytfKyJ8W14nXFx4MDBdKSonfFxcKCgiK18rInxbXilcXHgwMF0pKlxcKSkiKSxiPW5ldyBSZWdFeHAoIl4oPzpbPF0oPzpbXiA8PlxcdFxcblxcXFxcXHgwMF18IitfKyJ8XFxcXCkqWz5dKSIpLEU9bmV3IFJlZ0V4cCgiXig/OlteXFxcXCgpXFx4MDAtXFx4MjBdK3wiK18rInxcXFxcfCIrcCsiKSoiKSx5PW5ldyBSZWdFeHAoIl4iK2QpLHY9bmV3IFJlZ0V4cCgiXiIrZiwiaSIpLFQ9L2ArLyxBPS9eYCsvLEM9L1wuXC5cLi9nLE89Ly0tKy9nLFM9L148KFthLXpBLVowLTkuISMkJSYnKitcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqKT4vLFI9L148W0EtWmEtel1bQS1aYS16MC05ListXXsxLDMxfTpbXjw+XHgwMC1ceDIwXSo+L2ksaj0vXiAqKD86XG4gKik/Lyx4PS9eXHMvLEw9L1xzKy9nLEQ9LyAqJC8sdz0vXiAqLyxNPS9eICooPzpcbnwkKS8saz1uZXcgUmVnRXhwKCJeXFxbKD86W15cXFxcXFxbXFxdXXwiK18rInxcXFxcKXswLDEwMDB9XFxdIiksST0vXlteXG5gXFtcXVxcITwmKl8nIl0rL20sUD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgbygiVGV4dCIpO3JldHVybiB0Ll9saXRlcmFsPWUsdH0sTj1mdW5jdGlvbihlKXt2YXIgdD1lLmV4ZWModGhpcy5zdWJqZWN0LnNsaWNlKHRoaXMucG9zKSk7cmV0dXJuIG51bGw9PT10P251bGw6KHRoaXMucG9zKz10LmluZGV4K3RbMF0ubGVuZ3RoLHRbMF0pfSxIPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3ViamVjdC5sZW5ndGg/dGhpcy5zdWJqZWN0LmNoYXJDb2RlQXQodGhpcy5wb3MpOi0xfSxGPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goaiksITB9LEI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXRjaChBKTtpZihudWxsPT09dClyZXR1cm4hMTtmb3IodmFyIG4scixzPXRoaXMucG9zO251bGwhPT0obj10aGlzLm1hdGNoKFQpKTspaWYobj09PXQpcmV0dXJuIHI9bmV3IG8oIkNvZGUiKSxyLl9saXRlcmFsPXRoaXMuc3ViamVjdC5zbGljZShzLHRoaXMucG9zLXQubGVuZ3RoKS50cmltKCkucmVwbGFjZShMLCIgIiksZS5hcHBlbmRDaGlsZChyKSwhMDtyZXR1cm4gdGhpcy5wb3M9cyxlLmFwcGVuZENoaWxkKFAodCkpLCEwfSxVPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5zdWJqZWN0O3JldHVybiB0aGlzLnBvcys9MSwxMD09PXRoaXMucGVlaygpPyh0aGlzLnBvcys9MSx0PW5ldyBvKCJIYXJkYnJlYWsiKSxlLmFwcGVuZENoaWxkKHQpKTp5LnRlc3Qobi5jaGFyQXQodGhpcy5wb3MpKT8oZS5hcHBlbmRDaGlsZChQKG4uY2hhckF0KHRoaXMucG9zKSkpLHRoaXMucG9zKz0xKTplLmFwcGVuZENoaWxkKFAoIlxcIikpLCEwfSxHPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtyZXR1cm4odD10aGlzLm1hdGNoKFMpKT8obj10LnNsaWNlKDEsdC5sZW5ndGgtMSkscj1uZXcgbygiTGluayIpLHIuX2Rlc3RpbmF0aW9uPWEoIm1haWx0bzoiK24pLHIuX3RpdGxlPSIiLHIuYXBwZW5kQ2hpbGQoUChuKSksZS5hcHBlbmRDaGlsZChyKSwhMCk6ISEodD10aGlzLm1hdGNoKFIpKSYmKG49dC5zbGljZSgxLHQubGVuZ3RoLTEpLHI9bmV3IG8oIkxpbmsiKSxyLl9kZXN0aW5hdGlvbj1hKG4pLHIuX3RpdGxlPSIiLHIuYXBwZW5kQ2hpbGQoUChuKSksZS5hcHBlbmRDaGlsZChyKSwhMCl9LHo9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXRjaChtKTtpZihudWxsPT09dClyZXR1cm4hMTt2YXIgbj1uZXcgbygiSHRtbElubGluZSIpO3JldHVybiBuLl9saXRlcmFsPXQsZS5hcHBlbmRDaGlsZChuKSwhMH0sVj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYSxsLGMsZCxfLHA9MCxmPXRoaXMucG9zO2lmKDM5PT09ZXx8MzQ9PT1lKXArKyx0aGlzLnBvcysrO2Vsc2UgZm9yKDt0aGlzLnBlZWsoKT09PWU7KXArKyx0aGlzLnBvcysrO3JldHVybiAwPT09cD9udWxsOih0PTA9PT1mPyJcbiI6dGhpcy5zdWJqZWN0LmNoYXJBdChmLTEpLHI9dGhpcy5wZWVrKCksbj0tMT09PXI/IlxuIjp1KHIpLGw9eC50ZXN0KG4pLGM9aC50ZXN0KG4pLGQ9eC50ZXN0KHQpLF89aC50ZXN0KHQpLG89IShsfHxjJiYhZCYmIV8pLHM9IShkfHxfJiYhbCYmIWMpLDk1PT09ZT8oaT1vJiYoIXN8fF8pLGE9cyYmKCFvfHxjKSk6Mzk9PT1lfHwzND09PWU/KGk9byYmIXMsYT1zKTooaT1vLGE9cyksdGhpcy5wb3M9Zix7bnVtZGVsaW1zOnAsY2FuX29wZW46aSxjYW5fY2xvc2U6YX0pfSxXPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zY2FuRGVsaW1zKGUpO2lmKCFuKXJldHVybiExO3ZhciByLG89bi5udW1kZWxpbXMscz10aGlzLnBvczt0aGlzLnBvcys9byxyPTM5PT09ZT8i4oCZIjozND09PWU/IuKAnCI6dGhpcy5zdWJqZWN0LnNsaWNlKHMsdGhpcy5wb3MpO3ZhciBpPVAocik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoaSksdGhpcy5kZWxpbWl0ZXJzPXtjYzplLG51bWRlbGltczpvLG5vZGU6aSxwcmV2aW91czp0aGlzLmRlbGltaXRlcnMsbmV4dDpudWxsLGNhbl9vcGVuOm4uY2FuX29wZW4sY2FuX2Nsb3NlOm4uY2FuX2Nsb3NlLGFjdGl2ZTohMH0sbnVsbCE9PXRoaXMuZGVsaW1pdGVycy5wcmV2aW91cyYmKHRoaXMuZGVsaW1pdGVycy5wcmV2aW91cy5uZXh0PXRoaXMuZGVsaW1pdGVycyksITB9LFk9ZnVuY3Rpb24oZSl7bnVsbCE9PWUucHJldmlvdXMmJihlLnByZXZpb3VzLm5leHQ9ZS5uZXh0KSxudWxsPT09ZS5uZXh0P3RoaXMuZGVsaW1pdGVycz1lLnByZXZpb3VzOmUubmV4dC5wcmV2aW91cz1lLnByZXZpb3VzfSxxPWZ1bmN0aW9uKGUsdCl7ZS5uZXh0IT09dCYmKGUubmV4dD10LHQucHJldmlvdXM9ZSl9LEs9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLHMsaSxhLGwsdSxjLGQsXz1bXTtmb3IoX1s5NV09ZSxfWzQyXT1lLF9bMzldPWUsX1szNF09ZSxuPXRoaXMuZGVsaW1pdGVycztudWxsIT09biYmbi5wcmV2aW91cyE9PWU7KW49bi5wcmV2aW91cztmb3IoO251bGwhPT1uOyl7dmFyIHA9bi5jYztpZighbi5jYW5fY2xvc2V8fDk1IT09cCYmNDIhPT1wJiYzOSE9PXAmJjM0IT09cCluPW4ubmV4dDtlbHNle2Zvcih0PW4ucHJldmlvdXMsZD0hMTtudWxsIT09dCYmdCE9PWUmJnQhPT1fW3BdOyl7aWYodC5jYz09PW4uY2MmJnQuY2FuX29wZW4pe2Q9ITA7YnJlYWt9dD10LnByZXZpb3VzfWlmKHI9biw0Mj09PXB8fDk1PT09cClpZihkKXtsPW4ubnVtZGVsaW1zPDN8fHQubnVtZGVsaW1zPDM/bi5udW1kZWxpbXM8PXQubnVtZGVsaW1zP24ubnVtZGVsaW1zOnQubnVtZGVsaW1zOm4ubnVtZGVsaW1zJTI9PTA/MjoxLHM9dC5ub2RlLGk9bi5ub2RlLHQubnVtZGVsaW1zLT1sLG4ubnVtZGVsaW1zLT1sLHMuX2xpdGVyYWw9cy5fbGl0ZXJhbC5zbGljZSgwLHMuX2xpdGVyYWwubGVuZ3RoLWwpLGkuX2xpdGVyYWw9aS5fbGl0ZXJhbC5zbGljZSgwLGkuX2xpdGVyYWwubGVuZ3RoLWwpO3ZhciBmPW5ldyBvKDE9PT1sPyJFbXBoIjoiU3Ryb25nIik7Zm9yKHU9cy5fbmV4dDt1JiZ1IT09aTspYz11Ll9uZXh0LHUudW5saW5rKCksZi5hcHBlbmRDaGlsZCh1KSx1PWM7cy5pbnNlcnRBZnRlcihmKSxxKHQsbiksMD09PXQubnVtZGVsaW1zJiYocy51bmxpbmsoKSx0aGlzLnJlbW92ZURlbGltaXRlcih0KSksMD09PW4ubnVtZGVsaW1zJiYoaS51bmxpbmsoKSxhPW4ubmV4dCx0aGlzLnJlbW92ZURlbGltaXRlcihuKSxuPWEpfWVsc2Ugbj1uLm5leHQ7ZWxzZSAzOT09PXA/KG4ubm9kZS5fbGl0ZXJhbD0i4oCZIixkJiYodC5ub2RlLl9saXRlcmFsPSLigJgiKSxuPW4ubmV4dCk6MzQ9PT1wJiYobi5ub2RlLl9saXRlcmFsPSLigJ0iLGQmJih0Lm5vZGUubGl0ZXJhbD0i4oCcIiksbj1uLm5leHQpO2R8fChfW3BdPXIucHJldmlvdXMsci5jYW5fb3Blbnx8dGhpcy5yZW1vdmVEZWxpbWl0ZXIocikpfX1mb3IoO251bGwhPT10aGlzLmRlbGltaXRlcnMmJnRoaXMuZGVsaW1pdGVycyE9PWU7KXRoaXMucmVtb3ZlRGVsaW1pdGVyKHRoaXMuZGVsaW1pdGVycyl9LFg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hdGNoKGcpO3JldHVybiBudWxsPT09ZT9udWxsOmwoZS5zdWJzdHIoMSxlLmxlbmd0aC0yKSl9LCQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hdGNoKGIpO3JldHVybiBudWxsPT09ZT8oZT10aGlzLm1hdGNoKEUpLG51bGw9PT1lP251bGw6YShsKGUpKSk6YShsKGUuc3Vic3RyKDEsZS5sZW5ndGgtMikpKX0sUT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubWF0Y2goayk7cmV0dXJuIG51bGw9PT1lfHxlLmxlbmd0aD4xMDAxPzA6ZS5sZW5ndGh9LEo9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3M7dGhpcy5wb3MrPTE7dmFyIG49UCgiWyIpO3JldHVybiBlLmFwcGVuZENoaWxkKG4pLHRoaXMuZGVsaW1pdGVycz17Y2M6OTEsbnVtZGVsaW1zOjEsbm9kZTpuLHByZXZpb3VzOnRoaXMuZGVsaW1pdGVycyxuZXh0Om51bGwsY2FuX29wZW46ITAsY2FuX2Nsb3NlOiExLGluZGV4OnQsYWN0aXZlOiEwfSxudWxsIT09dGhpcy5kZWxpbWl0ZXJzLnByZXZpb3VzJiYodGhpcy5kZWxpbWl0ZXJzLnByZXZpb3VzLm5leHQ9dGhpcy5kZWxpbWl0ZXJzKSwhMH0sWj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvcztpZih0aGlzLnBvcys9MSw5MT09PXRoaXMucGVlaygpKXt0aGlzLnBvcys9MTt2YXIgbj1QKCIhWyIpO2UuYXBwZW5kQ2hpbGQobiksdGhpcy5kZWxpbWl0ZXJzPXtjYzozMyxudW1kZWxpbXM6MSxub2RlOm4scHJldmlvdXM6dGhpcy5kZWxpbWl0ZXJzLG5leHQ6bnVsbCxjYW5fb3BlbjohMCxjYW5fY2xvc2U6ITEsaW5kZXg6dCsxLGFjdGl2ZTohMH0sbnVsbCE9PXRoaXMuZGVsaW1pdGVycy5wcmV2aW91cyYmKHRoaXMuZGVsaW1pdGVycy5wcmV2aW91cy5uZXh0PXRoaXMuZGVsaW1pdGVycyl9ZWxzZSBlLmFwcGVuZENoaWxkKFAoIiEiKSk7cmV0dXJuITB9LGVlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLGEsbCx1PSExO2Zvcih0aGlzLnBvcys9MSx0PXRoaXMucG9zLGw9dGhpcy5kZWxpbWl0ZXJzO251bGwhPT1sJiY5MSE9PWwuY2MmJjMzIT09bC5jYzspbD1sLnByZXZpb3VzO2lmKG51bGw9PT1sKXJldHVybiBlLmFwcGVuZENoaWxkKFAoIl0iKSksITA7aWYoIWwuYWN0aXZlKXJldHVybiBlLmFwcGVuZENoaWxkKFAoIl0iKSksdGhpcy5yZW1vdmVEZWxpbWl0ZXIobCksITA7aWYobj0zMz09PWwuY2MsNDA9PT10aGlzLnBlZWsoKSl0aGlzLnBvcysrLHRoaXMuc3BubCgpJiZudWxsIT09KHI9dGhpcy5wYXJzZUxpbmtEZXN0aW5hdGlvbigpKSYmdGhpcy5zcG5sKCkmJih4LnRlc3QodGhpcy5zdWJqZWN0LmNoYXJBdCh0aGlzLnBvcy0xKSkmJihzPXRoaXMucGFyc2VMaW5rVGl0bGUoKSksITApJiZ0aGlzLnNwbmwoKSYmNDE9PT10aGlzLnBlZWsoKSYmKHRoaXMucG9zKz0xLHU9ITApO2Vsc2V7dmFyIGM9dGhpcy5wb3MsZD10aGlzLnBvcyxfPXRoaXMucGFyc2VMaW5rTGFiZWwoKTthPTA9PT1ffHwyPT09Xz90aGlzLnN1YmplY3Quc2xpY2UobC5pbmRleCx0KTp0aGlzLnN1YmplY3Quc2xpY2UoZCxkK18pLDA9PT1fJiYodGhpcy5wb3M9Yyk7dmFyIHA9dGhpcy5yZWZtYXBbaShhKV07cCYmKHI9cC5kZXN0aW5hdGlvbixzPXAudGl0bGUsdT0hMCl9aWYodSl7dmFyIGY9bmV3IG8obj8iSW1hZ2UiOiJMaW5rIik7Zi5fZGVzdGluYXRpb249cixmLl90aXRsZT1zfHwiIjt2YXIgbSxoO2ZvcihtPWwubm9kZS5fbmV4dDttOyloPW0uX25leHQsbS51bmxpbmsoKSxmLmFwcGVuZENoaWxkKG0pLG09aDtpZihlLmFwcGVuZENoaWxkKGYpLHRoaXMucHJvY2Vzc0VtcGhhc2lzKGwucHJldmlvdXMpLGwubm9kZS51bmxpbmsoKSwhbilmb3IobD10aGlzLmRlbGltaXRlcnM7bnVsbCE9PWw7KTkxPT09bC5jYyYmKGwuYWN0aXZlPSExKSxsPWwucHJldmlvdXM7cmV0dXJuITB9cmV0dXJuIHRoaXMucmVtb3ZlRGVsaW1pdGVyKGwpLHRoaXMucG9zPXQsZS5hcHBlbmRDaGlsZChQKCJdIikpLCEwfSx0ZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hISh0PXRoaXMubWF0Y2godikpJiYoZS5hcHBlbmRDaGlsZChQKGModCkpKSwhMCl9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEhKHQ9dGhpcy5tYXRjaChJKSkmJih0aGlzLm9wdGlvbnMuc21hcnQ/ZS5hcHBlbmRDaGlsZChQKHQucmVwbGFjZShDLCLigKYiKS5yZXBsYWNlKE8sZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGUubGVuZ3RoJTM9PTA/bj1lLmxlbmd0aC8zOmUubGVuZ3RoJTI9PTA/dD1lLmxlbmd0aC8yOmUubGVuZ3RoJTM9PTI/KHQ9MSxuPShlLmxlbmd0aC0yKS8zKToodD0yLG49KGUubGVuZ3RoLTQpLzMpLCLigJQiLnJlcGVhdChuKSsi4oCTIi5yZXBlYXQodCl9KSkpOmUuYXBwZW5kQ2hpbGQoUCh0KSksITApfSxyZT1mdW5jdGlvbihlKXt0aGlzLnBvcys9MTt2YXIgdD1lLl9sYXN0Q2hpbGQ7aWYodCYmIlRleHQiPT09dC50eXBlJiYiICI9PT10Ll9saXRlcmFsW3QuX2xpdGVyYWwubGVuZ3RoLTFdKXt2YXIgbj0iICI9PT10Ll9saXRlcmFsW3QuX2xpdGVyYWwubGVuZ3RoLTJdO3QuX2xpdGVyYWw9dC5fbGl0ZXJhbC5yZXBsYWNlKEQsIiIpLGUuYXBwZW5kQ2hpbGQobmV3IG8obj8iSGFyZGJyZWFrIjoiU29mdGJyZWFrIikpfWVsc2UgZS5hcHBlbmRDaGlsZChuZXcgbygiU29mdGJyZWFrIikpO3JldHVybiB0aGlzLm1hdGNoKHcpLCEwfSxvZT1mdW5jdGlvbihlLHQpe3RoaXMuc3ViamVjdD1lLHRoaXMucG9zPTA7dmFyIG4scixvLHMsYT10aGlzLnBvcztpZigwPT09KHM9dGhpcy5wYXJzZUxpbmtMYWJlbCgpKSlyZXR1cm4gMDtpZihuPXRoaXMuc3ViamVjdC5zdWJzdHIoMCxzKSw1OCE9PXRoaXMucGVlaygpKXJldHVybiB0aGlzLnBvcz1hLDA7aWYodGhpcy5wb3MrKyx0aGlzLnNwbmwoKSxudWxsPT09KHI9dGhpcy5wYXJzZUxpbmtEZXN0aW5hdGlvbigpKXx8MD09PXIubGVuZ3RoKXJldHVybiB0aGlzLnBvcz1hLDA7dmFyIGw9dGhpcy5wb3M7dGhpcy5zcG5sKCksbnVsbD09PShvPXRoaXMucGFyc2VMaW5rVGl0bGUoKSkmJihvPSIiLHRoaXMucG9zPWwpO3ZhciB1PSEwO2lmKG51bGw9PT10aGlzLm1hdGNoKE0pJiYoIiI9PT1vP3U9ITE6KG89IiIsdGhpcy5wb3M9bCx1PW51bGwhPT10aGlzLm1hdGNoKE0pKSksIXUpcmV0dXJuIHRoaXMucG9zPWEsMDt2YXIgYz1pKG4pO3JldHVybiIiPT09Yz8odGhpcy5wb3M9YSwwKToodFtjXXx8KHRbY109e2Rlc3RpbmF0aW9uOnIsdGl0bGU6b30pLHRoaXMucG9zLWEpfSxzZT1mdW5jdGlvbihlKXt2YXIgdD0hMSxuPXRoaXMucGVlaygpO2lmKC0xPT09bilyZXR1cm4hMTtzd2l0Y2gobil7Y2FzZSAxMDp0PXRoaXMucGFyc2VOZXdsaW5lKGUpO2JyZWFrO2Nhc2UgOTI6dD10aGlzLnBhcnNlQmFja3NsYXNoKGUpO2JyZWFrO2Nhc2UgOTY6dD10aGlzLnBhcnNlQmFja3RpY2tzKGUpO2JyZWFrO2Nhc2UgNDI6Y2FzZSA5NTp0PXRoaXMuaGFuZGxlRGVsaW0obixlKTticmVhaztjYXNlIDM5OmNhc2UgMzQ6dD10aGlzLm9wdGlvbnMuc21hcnQmJnRoaXMuaGFuZGxlRGVsaW0obixlKTticmVhaztjYXNlIDkxOnQ9dGhpcy5wYXJzZU9wZW5CcmFja2V0KGUpO2JyZWFrO2Nhc2UgMzM6dD10aGlzLnBhcnNlQmFuZyhlKTticmVhaztjYXNlIDkzOnQ9dGhpcy5wYXJzZUNsb3NlQnJhY2tldChlKTticmVhaztjYXNlIDYwOnQ9dGhpcy5wYXJzZUF1dG9saW5rKGUpfHx0aGlzLnBhcnNlSHRtbFRhZyhlKTticmVhaztjYXNlIDM4OnQ9dGhpcy5wYXJzZUVudGl0eShlKTticmVhaztkZWZhdWx0OnQ9dGhpcy5wYXJzZVN0cmluZyhlKX1yZXR1cm4gdHx8KHRoaXMucG9zKz0xLGUuYXBwZW5kQ2hpbGQoUCh1KG4pKSkpLCEwfSxpZT1mdW5jdGlvbihlKXtmb3IodGhpcy5zdWJqZWN0PWUuX3N0cmluZ19jb250ZW50LnRyaW0oKSx0aGlzLnBvcz0wLHRoaXMuZGVsaW1pdGVycz1udWxsO3RoaXMucGFyc2VJbmxpbmUoZSk7KTtlLl9zdHJpbmdfY29udGVudD1udWxsLHRoaXMucHJvY2Vzc0VtcGhhc2lzKG51bGwpfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ub2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7c3dpdGNoKGUuX3R5cGUpe2Nhc2UiRG9jdW1lbnQiOmNhc2UiQmxvY2tRdW90ZSI6Y2FzZSJMaXN0IjpjYXNlIkl0ZW0iOmNhc2UiUGFyYWdyYXBoIjpjYXNlIkhlYWRpbmciOmNhc2UiRW1waCI6Y2FzZSJTdHJvbmciOmNhc2UiTGluayI6Y2FzZSJJbWFnZSI6Y2FzZSJDdXN0b21JbmxpbmUiOmNhc2UiQ3VzdG9tQmxvY2siOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBvPWZ1bmN0aW9uKGUsdCl7dGhpcy5jdXJyZW50PWUsdGhpcy5lbnRlcmluZz0hMD09PXR9LHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsdD10aGlzLmVudGVyaW5nO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBuPXIoZSk7cmV0dXJuIHQmJm4/ZS5fZmlyc3RDaGlsZD8odGhpcy5jdXJyZW50PWUuX2ZpcnN0Q2hpbGQsdGhpcy5lbnRlcmluZz0hMCk6dGhpcy5lbnRlcmluZz0hMTplPT09dGhpcy5yb290P3RoaXMuY3VycmVudD1udWxsOm51bGw9PT1lLl9uZXh0Pyh0aGlzLmN1cnJlbnQ9ZS5fcGFyZW50LHRoaXMuZW50ZXJpbmc9ITEpOih0aGlzLmN1cnJlbnQ9ZS5fbmV4dCx0aGlzLmVudGVyaW5nPSEwKSx7ZW50ZXJpbmc6dCxub2RlOmV9fSxpPWZ1bmN0aW9uKGUpe3JldHVybntjdXJyZW50OmUscm9vdDplLGVudGVyaW5nOiEwLG5leHQ6cyxyZXN1bWVBdDpvfX0sYT1mdW5jdGlvbihlLHQpe3RoaXMuX3R5cGU9ZSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9maXJzdENoaWxkPW51bGwsdGhpcy5fbGFzdENoaWxkPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9zb3VyY2Vwb3M9dCx0aGlzLl9sYXN0TGluZUJsYW5rPSExLHRoaXMuX29wZW49ITAsdGhpcy5fc3RyaW5nX2NvbnRlbnQ9bnVsbCx0aGlzLl9saXRlcmFsPW51bGwsdGhpcy5fbGlzdERhdGE9e30sdGhpcy5faW5mbz1udWxsLHRoaXMuX2Rlc3RpbmF0aW9uPW51bGwsdGhpcy5fdGl0bGU9bnVsbCx0aGlzLl9pc0ZlbmNlZD0hMSx0aGlzLl9mZW5jZUNoYXI9bnVsbCx0aGlzLl9mZW5jZUxlbmd0aD0wLHRoaXMuX2ZlbmNlT2Zmc2V0PW51bGwsdGhpcy5fbGV2ZWw9bnVsbCx0aGlzLl9vbkVudGVyPW51bGwsdGhpcy5fb25FeGl0PW51bGx9LGw9YS5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImlzQ29udGFpbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXJzdENoaWxkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsYXN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdENoaWxkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJuZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25leHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByZXYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJldn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwic291cmNlcG9zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZXBvc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibGl0ZXJhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXRlcmFsfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGl0ZXJhbD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJkZXN0aW5hdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0aW5hdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2Rlc3RpbmF0aW9uPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInRpdGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpdGxlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fdGl0bGU9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiaW5mbyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmZvfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5faW5mbz1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJsZXZlbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZXZlbH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2xldmVsPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxpc3RUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xpc3REYXRhLnR5cGV9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9saXN0RGF0YS50eXBlPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxpc3RUaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0RGF0YS50aWdodH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2xpc3REYXRhLnRpZ2h0PWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxpc3RTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0RGF0YS5zdGFydH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2xpc3REYXRhLnN0YXJ0PWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxpc3REZWxpbWl0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGlzdERhdGEuZGVsaW1pdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGlzdERhdGEuZGVsaW1pdGVyPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIm9uRW50ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25FbnRlcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uRW50ZXI9ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwib25FeGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRXhpdH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uRXhpdD1lfX0pLGEucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUpe2UudW5saW5rKCksZS5fcGFyZW50PXRoaXMsdGhpcy5fbGFzdENoaWxkPyh0aGlzLl9sYXN0Q2hpbGQuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2xhc3RDaGlsZCx0aGlzLl9sYXN0Q2hpbGQ9ZSk6KHRoaXMuX2ZpcnN0Q2hpbGQ9ZSx0aGlzLl9sYXN0Q2hpbGQ9ZSl9LGEucHJvdG90eXBlLnByZXBlbmRDaGlsZD1mdW5jdGlvbihlKXtlLnVubGluaygpLGUuX3BhcmVudD10aGlzLHRoaXMuX2ZpcnN0Q2hpbGQ/KHRoaXMuX2ZpcnN0Q2hpbGQuX3ByZXY9ZSxlLl9uZXh0PXRoaXMuX2ZpcnN0Q2hpbGQsdGhpcy5fZmlyc3RDaGlsZD1lKToodGhpcy5fZmlyc3RDaGlsZD1lLHRoaXMuX2xhc3RDaGlsZD1lKX0sYS5wcm90b3R5cGUudW5saW5rPWZ1bmN0aW9uKCl7dGhpcy5fcHJldj90aGlzLl9wcmV2Ll9uZXh0PXRoaXMuX25leHQ6dGhpcy5fcGFyZW50JiYodGhpcy5fcGFyZW50Ll9maXJzdENoaWxkPXRoaXMuX25leHQpLHRoaXMuX25leHQ/dGhpcy5fbmV4dC5fcHJldj10aGlzLl9wcmV2OnRoaXMuX3BhcmVudCYmKHRoaXMuX3BhcmVudC5fbGFzdENoaWxkPXRoaXMuX3ByZXYpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGx9LGEucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKGUpe2UudW5saW5rKCksZS5fbmV4dD10aGlzLl9uZXh0LGUuX25leHQmJihlLl9uZXh0Ll9wcmV2PWUpLGUuX3ByZXY9dGhpcyx0aGlzLl9uZXh0PWUsZS5fcGFyZW50PXRoaXMuX3BhcmVudCxlLl9uZXh0fHwoZS5fcGFyZW50Ll9sYXN0Q2hpbGQ9ZSl9LGEucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlKXtlLnVubGluaygpLGUuX3ByZXY9dGhpcy5fcHJldixlLl9wcmV2JiYoZS5fcHJldi5fbmV4dD1lKSxlLl9uZXh0PXRoaXMsdGhpcy5fcHJldj1lLGUuX3BhcmVudD10aGlzLl9wYXJlbnQsZS5fcHJldnx8KGUuX3BhcmVudC5fZmlyc3RDaGlsZD1lKX0sYS5wcm90b3R5cGUud2Fsa2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHRoaXMpfSxlLmV4cG9ydHM9YX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9ub3JtYWxpemUtcmVmZXJlbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS9bIFx0XHJcbl0rfFtBLVpceEI1XHhDMC1ceEQ2XHhEOC1ceERGXHUwMTAwXHUwMTAyXHUwMTA0XHUwMTA2XHUwMTA4XHUwMTBBXHUwMTBDXHUwMTBFXHUwMTEwXHUwMTEyXHUwMTE0XHUwMTE2XHUwMTE4XHUwMTFBXHUwMTFDXHUwMTFFXHUwMTIwXHUwMTIyXHUwMTI0XHUwMTI2XHUwMTI4XHUwMTJBXHUwMTJDXHUwMTJFXHUwMTMwXHUwMTMyXHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNCXHUwMTNEXHUwMTNGXHUwMTQxXHUwMTQzXHUwMTQ1XHUwMTQ3XHUwMTQ5XHUwMTRBXHUwMTRDXHUwMTRFXHUwMTUwXHUwMTUyXHUwMTU0XHUwMTU2XHUwMTU4XHUwMTVBXHUwMTVDXHUwMTVFXHUwMTYwXHUwMTYyXHUwMTY0XHUwMTY2XHUwMTY4XHUwMTZBXHUwMTZDXHUwMTZFXHUwMTcwXHUwMTcyXHUwMTc0XHUwMTc2XHUwMTc4XHUwMTc5XHUwMTdCXHUwMTdEXHUwMTdGXHUwMTgxXHUwMTgyXHUwMTg0XHUwMTg2XHUwMTg3XHUwMTg5LVx1MDE4Qlx1MDE4RS1cdTAxOTFcdTAxOTNcdTAxOTRcdTAxOTYtXHUwMTk4XHUwMTlDXHUwMTlEXHUwMTlGXHUwMUEwXHUwMUEyXHUwMUE0XHUwMUE2XHUwMUE3XHUwMUE5XHUwMUFDXHUwMUFFXHUwMUFGXHUwMUIxLVx1MDFCM1x1MDFCNVx1MDFCN1x1MDFCOFx1MDFCQ1x1MDFDNFx1MDFDNVx1MDFDN1x1MDFDOFx1MDFDQVx1MDFDQlx1MDFDRFx1MDFDRlx1MDFEMVx1MDFEM1x1MDFENVx1MDFEN1x1MDFEOVx1MDFEQlx1MDFERVx1MDFFMFx1MDFFMlx1MDFFNFx1MDFFNlx1MDFFOFx1MDFFQVx1MDFFQ1x1MDFFRVx1MDFGMC1cdTAxRjJcdTAxRjRcdTAxRjYtXHUwMUY4XHUwMUZBXHUwMUZDXHUwMUZFXHUwMjAwXHUwMjAyXHUwMjA0XHUwMjA2XHUwMjA4XHUwMjBBXHUwMjBDXHUwMjBFXHUwMjEwXHUwMjEyXHUwMjE0XHUwMjE2XHUwMjE4XHUwMjFBXHUwMjFDXHUwMjFFXHUwMjIwXHUwMjIyXHUwMjI0XHUwMjI2XHUwMjI4XHUwMjJBXHUwMjJDXHUwMjJFXHUwMjMwXHUwMjMyXHUwMjNBXHUwMjNCXHUwMjNEXHUwMjNFXHUwMjQxXHUwMjQzLVx1MDI0Nlx1MDI0OFx1MDI0QVx1MDI0Q1x1MDI0RVx1MDM0NVx1MDM3MFx1MDM3Mlx1MDM3Nlx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNBQlx1MDNCMFx1MDNDMlx1MDNDRi1cdTAzRDFcdTAzRDVcdTAzRDZcdTAzRDhcdTAzREFcdTAzRENcdTAzREVcdTAzRTBcdTAzRTJcdTAzRTRcdTAzRTZcdTAzRThcdTAzRUFcdTAzRUNcdTAzRUVcdTAzRjBcdTAzRjFcdTAzRjRcdTAzRjVcdTAzRjdcdTAzRjlcdTAzRkFcdTAzRkQtXHUwNDJGXHUwNDYwXHUwNDYyXHUwNDY0XHUwNDY2XHUwNDY4XHUwNDZBXHUwNDZDXHUwNDZFXHUwNDcwXHUwNDcyXHUwNDc0XHUwNDc2XHUwNDc4XHUwNDdBXHUwNDdDXHUwNDdFXHUwNDgwXHUwNDhBXHUwNDhDXHUwNDhFXHUwNDkwXHUwNDkyXHUwNDk0XHUwNDk2XHUwNDk4XHUwNDlBXHUwNDlDXHUwNDlFXHUwNEEwXHUwNEEyXHUwNEE0XHUwNEE2XHUwNEE4XHUwNEFBXHUwNEFDXHUwNEFFXHUwNEIwXHUwNEIyXHUwNEI0XHUwNEI2XHUwNEI4XHUwNEJBXHUwNEJDXHUwNEJFXHUwNEMwXHUwNEMxXHUwNEMzXHUwNEM1XHUwNEM3XHUwNEM5XHUwNENCXHUwNENEXHUwNEQwXHUwNEQyXHUwNEQ0XHUwNEQ2XHUwNEQ4XHUwNERBXHUwNERDXHUwNERFXHUwNEUwXHUwNEUyXHUwNEU0XHUwNEU2XHUwNEU4XHUwNEVBXHUwNEVDXHUwNEVFXHUwNEYwXHUwNEYyXHUwNEY0XHUwNEY2XHUwNEY4XHUwNEZBXHUwNEZDXHUwNEZFXHUwNTAwXHUwNTAyXHUwNTA0XHUwNTA2XHUwNTA4XHUwNTBBXHUwNTBDXHUwNTBFXHUwNTEwXHUwNTEyXHUwNTE0XHUwNTE2XHUwNTE4XHUwNTFBXHUwNTFDXHUwNTFFXHUwNTIwXHUwNTIyXHUwNTI0XHUwNTI2XHUwNTI4XHUwNTJBXHUwNTJDXHUwNTJFXHUwNTMxLVx1MDU1Nlx1MDU4N1x1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTFFMDBcdTFFMDJcdTFFMDRcdTFFMDZcdTFFMDhcdTFFMEFcdTFFMENcdTFFMEVcdTFFMTBcdTFFMTJcdTFFMTRcdTFFMTZcdTFFMThcdTFFMUFcdTFFMUNcdTFFMUVcdTFFMjBcdTFFMjJcdTFFMjRcdTFFMjZcdTFFMjhcdTFFMkFcdTFFMkNcdTFFMkVcdTFFMzBcdTFFMzJcdTFFMzRcdTFFMzZcdTFFMzhcdTFFM0FcdTFFM0NcdTFFM0VcdTFFNDBcdTFFNDJcdTFFNDRcdTFFNDZcdTFFNDhcdTFFNEFcdTFFNENcdTFFNEVcdTFFNTBcdTFFNTJcdTFFNTRcdTFFNTZcdTFFNThcdTFFNUFcdTFFNUNcdTFFNUVcdTFFNjBcdTFFNjJcdTFFNjRcdTFFNjZcdTFFNjhcdTFFNkFcdTFFNkNcdTFFNkVcdTFFNzBcdTFFNzJcdTFFNzRcdTFFNzZcdTFFNzhcdTFFN0FcdTFFN0NcdTFFN0VcdTFFODBcdTFFODJcdTFFODRcdTFFODZcdTFFODhcdTFFOEFcdTFFOENcdTFFOEVcdTFFOTBcdTFFOTJcdTFFOTRcdTFFOTYtXHUxRTlCXHUxRTlFXHUxRUEwXHUxRUEyXHUxRUE0XHUxRUE2XHUxRUE4XHUxRUFBXHUxRUFDXHUxRUFFXHUxRUIwXHUxRUIyXHUxRUI0XHUxRUI2XHUxRUI4XHUxRUJBXHUxRUJDXHUxRUJFXHUxRUMwXHUxRUMyXHUxRUM0XHUxRUM2XHUxRUM4XHUxRUNBXHUxRUNDXHUxRUNFXHUxRUQwXHUxRUQyXHUxRUQ0XHUxRUQ2XHUxRUQ4XHUxRURBXHUxRURDXHUxRURFXHUxRUUwXHUxRUUyXHUxRUU0XHUxRUU2XHUxRUU4XHUxRUVBXHUxRUVDXHUxRUVFXHUxRUYwXHUxRUYyXHUxRUY0XHUxRUY2XHUxRUY4XHUxRUZBXHUxRUZDXHUxRUZFXHUxRjA4LVx1MUYwRlx1MUYxOC1cdTFGMURcdTFGMjgtXHUxRjJGXHUxRjM4LVx1MUYzRlx1MUY0OC1cdTFGNERcdTFGNTBcdTFGNTJcdTFGNTRcdTFGNTZcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjgtXHUxRjZGXHUxRjgwLVx1MUZBRlx1MUZCMi1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDJcdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUyLVx1MUZFNFx1MUZFNi1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjEyNlx1MjEyQVx1MjEyQlx1MjEzMlx1MjE2MC1cdTIxNkZcdTIxODNcdTI0QjYtXHUyNENGXHUyQzAwLVx1MkMyRVx1MkM2MFx1MkM2Mi1cdTJDNjRcdTJDNjdcdTJDNjlcdTJDNkJcdTJDNkQtXHUyQzcwXHUyQzcyXHUyQzc1XHUyQzdFLVx1MkM4MFx1MkM4Mlx1MkM4NFx1MkM4Nlx1MkM4OFx1MkM4QVx1MkM4Q1x1MkM4RVx1MkM5MFx1MkM5Mlx1MkM5NFx1MkM5Nlx1MkM5OFx1MkM5QVx1MkM5Q1x1MkM5RVx1MkNBMFx1MkNBMlx1MkNBNFx1MkNBNlx1MkNBOFx1MkNBQVx1MkNBQ1x1MkNBRVx1MkNCMFx1MkNCMlx1MkNCNFx1MkNCNlx1MkNCOFx1MkNCQVx1MkNCQ1x1MkNCRVx1MkNDMFx1MkNDMlx1MkNDNFx1MkNDNlx1MkNDOFx1MkNDQVx1MkNDQ1x1MkNDRVx1MkNEMFx1MkNEMlx1MkNENFx1MkNENlx1MkNEOFx1MkNEQVx1MkNEQ1x1MkNERVx1MkNFMFx1MkNFMlx1MkNFQlx1MkNFRFx1MkNGMlx1QTY0MFx1QTY0Mlx1QTY0NFx1QTY0Nlx1QTY0OFx1QTY0QVx1QTY0Q1x1QTY0RVx1QTY1MFx1QTY1Mlx1QTY1NFx1QTY1Nlx1QTY1OFx1QTY1QVx1QTY1Q1x1QTY1RVx1QTY2MFx1QTY2Mlx1QTY2NFx1QTY2Nlx1QTY2OFx1QTY2QVx1QTY2Q1x1QTY4MFx1QTY4Mlx1QTY4NFx1QTY4Nlx1QTY4OFx1QTY4QVx1QTY4Q1x1QTY4RVx1QTY5MFx1QTY5Mlx1QTY5NFx1QTY5Nlx1QTY5OFx1QTY5QVx1QTcyMlx1QTcyNFx1QTcyNlx1QTcyOFx1QTcyQVx1QTcyQ1x1QTcyRVx1QTczMlx1QTczNFx1QTczNlx1QTczOFx1QTczQVx1QTczQ1x1QTczRVx1QTc0MFx1QTc0Mlx1QTc0NFx1QTc0Nlx1QTc0OFx1QTc0QVx1QTc0Q1x1QTc0RVx1QTc1MFx1QTc1Mlx1QTc1NFx1QTc1Nlx1QTc1OFx1QTc1QVx1QTc1Q1x1QTc1RVx1QTc2MFx1QTc2Mlx1QTc2NFx1QTc2Nlx1QTc2OFx1QTc2QVx1QTc2Q1x1QTc2RVx1QTc3OVx1QTc3Qlx1QTc3RFx1QTc3RVx1QTc4MFx1QTc4Mlx1QTc4NFx1QTc4Nlx1QTc4Qlx1QTc4RFx1QTc5MFx1QTc5Mlx1QTc5Nlx1QTc5OFx1QTc5QVx1QTc5Q1x1QTc5RVx1QTdBMFx1QTdBMlx1QTdBNFx1QTdBNlx1QTdBOFx1QTdBQS1cdUE3QURcdUE3QjBcdUE3QjFcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkYyMS1cdUZGM0FdfFx1RDgwMVtcdURDMDAtXHVEQzI3XXxcdUQ4MDZbXHVEQ0EwLVx1RENCRl0vZyxvPXtBOiJhIixCOiJiIixDOiJjIixEOiJkIixFOiJlIixGOiJmIixHOiJnIixIOiJoIixJOiJpIixKOiJqIixLOiJrIixMOiJsIixNOiJtIixOOiJuIixPOiJvIixQOiJwIixROiJxIixSOiJyIixTOiJzIixUOiJ0IixVOiJ1IixWOiJ2IixXOiJ3IixYOiJ4IixZOiJ5IixaOiJ6IiwiwrUiOiLOvCIsIsOAIjoiw6AiLCLDgSI6IsOhIiwiw4IiOiLDoiIsIsODIjoiw6MiLCLDhCI6IsOkIiwiw4UiOiLDpSIsIsOGIjoiw6YiLCLDhyI6IsOnIiwiw4giOiLDqCIsIsOJIjoiw6kiLCLDiiI6IsOqIiwiw4siOiLDqyIsIsOMIjoiw6wiLCLDjSI6IsOtIiwiw44iOiLDriIsIsOPIjoiw68iLCLDkCI6IsOwIiwiw5EiOiLDsSIsIsOSIjoiw7IiLCLDkyI6IsOzIiwiw5QiOiLDtCIsIsOVIjoiw7UiLCLDliI6IsO2Iiwiw5giOiLDuCIsIsOZIjoiw7kiLCLDmiI6IsO6Iiwiw5siOiLDuyIsIsOcIjoiw7wiLCLDnSI6IsO9Iiwiw54iOiLDviIsIsSAIjoixIEiLCLEgiI6IsSDIiwixIQiOiLEhSIsIsSGIjoixIciLCLEiCI6IsSJIiwixIoiOiLEiyIsIsSMIjoixI0iLCLEjiI6IsSPIiwixJAiOiLEkSIsIsSSIjoixJMiLCLElCI6IsSVIiwixJYiOiLElyIsIsSYIjoixJkiLCLEmiI6IsSbIiwixJwiOiLEnSIsIsSeIjoixJ8iLCLEoCI6IsShIiwixKIiOiLEoyIsIsSkIjoixKUiLCLEpiI6IsSnIiwixKgiOiLEqSIsIsSqIjoixKsiLCLErCI6IsStIiwixK4iOiLEryIsIsSyIjoixLMiLCLEtCI6IsS1IiwixLYiOiLEtyIsIsS5IjoixLoiLCLEuyI6IsS8IiwixL0iOiLEviIsIsS/IjoixYAiLCLFgSI6IsWCIiwixYMiOiLFhCIsIsWFIjoixYYiLCLFhyI6IsWIIiwixYoiOiLFiyIsIsWMIjoixY0iLCLFjiI6IsWPIiwixZAiOiLFkSIsIsWSIjoixZMiLCLFlCI6IsWVIiwixZYiOiLFlyIsIsWYIjoixZkiLCLFmiI6IsWbIiwixZwiOiLFnSIsIsWeIjoixZ8iLCLFoCI6IsWhIiwixaIiOiLFoyIsIsWkIjoixaUiLCLFpiI6IsWnIiwixagiOiLFqSIsIsWqIjoixasiLCLFrCI6IsWtIiwixa4iOiLFryIsIsWwIjoixbEiLCLFsiI6IsWzIiwixbQiOiLFtSIsIsW2IjoixbciLCLFuCI6IsO/IiwixbkiOiLFuiIsIsW7IjoixbwiLCLFvSI6IsW+Iiwixb8iOiJzIiwixoEiOiLJkyIsIsaCIjoixoMiLCLGhCI6IsaFIiwixoYiOiLJlCIsIsaHIjoixogiLCLGiSI6IsmWIiwixooiOiLJlyIsIsaLIjoixowiLCLGjiI6IsedIiwixo8iOiLJmSIsIsaQIjoiyZsiLCLGkSI6IsaSIiwixpMiOiLJoCIsIsaUIjoiyaMiLCLGliI6IsmpIiwixpciOiLJqCIsIsaYIjoixpkiLCLGnCI6IsmvIiwixp0iOiLJsiIsIsafIjoiybUiLCLGoCI6IsahIiwixqIiOiLGoyIsIsakIjoixqUiLCLGpiI6IsqAIiwixqciOiLGqCIsIsapIjoiyoMiLCLGrCI6IsatIiwixq4iOiLKiCIsIsavIjoixrAiLCLGsSI6IsqKIiwixrIiOiLKiyIsIsazIjoixrQiLCLGtSI6Isa2IiwixrciOiLKkiIsIsa4IjoixrkiLCLGvCI6Isa9Iiwix4QiOiLHhiIsIseFIjoix4YiLCLHhyI6IseJIiwix4giOiLHiSIsIseKIjoix4wiLCLHiyI6IseMIiwix40iOiLHjiIsIsePIjoix5AiLCLHkSI6IseSIiwix5MiOiLHlCIsIseVIjoix5YiLCLHlyI6IseYIiwix5kiOiLHmiIsIsebIjoix5wiLCLHniI6IsefIiwix6AiOiLHoSIsIseiIjoix6MiLCLHpCI6IselIiwix6YiOiLHpyIsIseoIjoix6kiLCLHqiI6IserIiwix6wiOiLHrSIsIseuIjoix68iLCLHsSI6IsezIiwix7IiOiLHsyIsIse0Ijoix7UiLCLHtiI6IsaVIiwix7ciOiLGvyIsIse4Ijoix7kiLCLHuiI6Ise7Iiwix7wiOiLHvSIsIse+Ijoix78iLCLIgCI6IsiBIiwiyIIiOiLIgyIsIsiEIjoiyIUiLCLIhiI6IsiHIiwiyIgiOiLIiSIsIsiKIjoiyIsiLCLIjCI6IsiNIiwiyI4iOiLIjyIsIsiQIjoiyJEiLCLIkiI6IsiTIiwiyJQiOiLIlSIsIsiWIjoiyJciLCLImCI6IsiZIiwiyJoiOiLImyIsIsicIjoiyJ0iLCLIniI6IsifIiwiyKAiOiLGniIsIsiiIjoiyKMiLCLIpCI6IsilIiwiyKYiOiLIpyIsIsioIjoiyKkiLCLIqiI6IsirIiwiyKwiOiLIrSIsIsiuIjoiyK8iLCLIsCI6IsixIiwiyLIiOiLIsyIsIsi6Ijoi4rGlIiwiyLsiOiLIvCIsIsi9IjoixpoiLCLIviI6IuKxpiIsIsmBIjoiyYIiLCLJgyI6IsaAIiwiyYQiOiLKiSIsIsmFIjoiyowiLCLJhiI6IsmHIiwiyYgiOiLJiSIsIsmKIjoiyYsiLCLJjCI6IsmNIiwiyY4iOiLJjyIsIs2FIjoizrkiLCLNsCI6Is2xIiwizbIiOiLNsyIsIs22IjoizbciLCLNvyI6Is+zIiwizoYiOiLOrCIsIs6IIjoizq0iLCLOiSI6Is6uIiwizooiOiLOryIsIs6MIjoiz4wiLCLOjiI6Is+NIiwizo8iOiLPjiIsIs6RIjoizrEiLCLOkiI6Is6yIiwizpMiOiLOsyIsIs6UIjoizrQiLCLOlSI6Is61IiwizpYiOiLOtiIsIs6XIjoizrciLCLOmCI6Is64IiwizpkiOiLOuSIsIs6aIjoizroiLCLOmyI6Is67IiwizpwiOiLOvCIsIs6dIjoizr0iLCLOniI6Is6+Iiwizp8iOiLOvyIsIs6gIjoiz4AiLCLOoSI6Is+BIiwizqMiOiLPgyIsIs6kIjoiz4QiLCLOpSI6Is+FIiwizqYiOiLPhiIsIs6nIjoiz4ciLCLOqCI6Is+IIiwizqkiOiLPiSIsIs6qIjoiz4oiLCLOqyI6Is+LIiwiz4IiOiLPgyIsIs+PIjoiz5ciLCLPkCI6Is6yIiwiz5EiOiLOuCIsIs+VIjoiz4YiLCLPliI6Is+AIiwiz5giOiLPmSIsIs+aIjoiz5siLCLPnCI6Is+dIiwiz54iOiLPnyIsIs+gIjoiz6EiLCLPoiI6Is+jIiwiz6QiOiLPpSIsIs+mIjoiz6ciLCLPqCI6Is+pIiwiz6oiOiLPqyIsIs+sIjoiz60iLCLPriI6Is+vIiwiz7AiOiLOuiIsIs+xIjoiz4EiLCLPtCI6Is64Iiwiz7UiOiLOtSIsIs+3Ijoiz7giLCLPuSI6Is+yIiwiz7oiOiLPuyIsIs+9IjoizbsiLCLPviI6Is28Iiwiz78iOiLNvSIsItCAIjoi0ZAiLCLQgSI6ItGRIiwi0IIiOiLRkiIsItCDIjoi0ZMiLCLQhCI6ItGUIiwi0IUiOiLRlSIsItCGIjoi0ZYiLCLQhyI6ItGXIiwi0IgiOiLRmCIsItCJIjoi0ZkiLCLQiiI6ItGaIiwi0IsiOiLRmyIsItCMIjoi0ZwiLCLQjSI6ItGdIiwi0I4iOiLRniIsItCPIjoi0Z8iLCLQkCI6ItCwIiwi0JEiOiLQsSIsItCSIjoi0LIiLCLQkyI6ItCzIiwi0JQiOiLQtCIsItCVIjoi0LUiLCLQliI6ItC2Iiwi0JciOiLQtyIsItCYIjoi0LgiLCLQmSI6ItC5Iiwi0JoiOiLQuiIsItCbIjoi0LsiLCLQnCI6ItC8Iiwi0J0iOiLQvSIsItCeIjoi0L4iLCLQnyI6ItC/Iiwi0KAiOiLRgCIsItChIjoi0YEiLCLQoiI6ItGCIiwi0KMiOiLRgyIsItCkIjoi0YQiLCLQpSI6ItGFIiwi0KYiOiLRhiIsItCnIjoi0YciLCLQqCI6ItGIIiwi0KkiOiLRiSIsItCqIjoi0YoiLCLQqyI6ItGLIiwi0KwiOiLRjCIsItCtIjoi0Y0iLCLQriI6ItGOIiwi0K8iOiLRjyIsItGgIjoi0aEiLCLRoiI6ItGjIiwi0aQiOiLRpSIsItGmIjoi0aciLCLRqCI6ItGpIiwi0aoiOiLRqyIsItGsIjoi0a0iLCLRriI6ItGvIiwi0bAiOiLRsSIsItGyIjoi0bMiLCLRtCI6ItG1Iiwi0bYiOiLRtyIsItG4Ijoi0bkiLCLRuiI6ItG7Iiwi0bwiOiLRvSIsItG+Ijoi0b8iLCLSgCI6ItKBIiwi0ooiOiLSiyIsItKMIjoi0o0iLCLSjiI6ItKPIiwi0pAiOiLSkSIsItKSIjoi0pMiLCLSlCI6ItKVIiwi0pYiOiLSlyIsItKYIjoi0pkiLCLSmiI6ItKbIiwi0pwiOiLSnSIsItKeIjoi0p8iLCLSoCI6ItKhIiwi0qIiOiLSoyIsItKkIjoi0qUiLCLSpiI6ItKnIiwi0qgiOiLSqSIsItKqIjoi0qsiLCLSrCI6ItKtIiwi0q4iOiLSryIsItKwIjoi0rEiLCLSsiI6ItKzIiwi0rQiOiLStSIsItK2Ijoi0rciLCLSuCI6ItK5Iiwi0roiOiLSuyIsItK8Ijoi0r0iLCLSviI6ItK/Iiwi04AiOiLTjyIsItOBIjoi04IiLCLTgyI6ItOEIiwi04UiOiLThiIsItOHIjoi04giLCLTiSI6ItOKIiwi04siOiLTjCIsItONIjoi044iLCLTkCI6ItORIiwi05IiOiLTkyIsItOUIjoi05UiLCLTliI6ItOXIiwi05giOiLTmSIsItOaIjoi05siLCLTnCI6ItOdIiwi054iOiLTnyIsItOgIjoi06EiLCLToiI6ItOjIiwi06QiOiLTpSIsItOmIjoi06ciLCLTqCI6ItOpIiwi06oiOiLTqyIsItOsIjoi060iLCLTriI6ItOvIiwi07AiOiLTsSIsItOyIjoi07MiLCLTtCI6ItO1Iiwi07YiOiLTtyIsItO4Ijoi07kiLCLTuiI6ItO7Iiwi07wiOiLTvSIsItO+Ijoi078iLCLUgCI6ItSBIiwi1IIiOiLUgyIsItSEIjoi1IUiLCLUhiI6ItSHIiwi1IgiOiLUiSIsItSKIjoi1IsiLCLUjCI6ItSNIiwi1I4iOiLUjyIsItSQIjoi1JEiLCLUkiI6ItSTIiwi1JQiOiLUlSIsItSWIjoi1JciLCLUmCI6ItSZIiwi1JoiOiLUmyIsItScIjoi1J0iLCLUniI6ItSfIiwi1KAiOiLUoSIsItSiIjoi1KMiLCLUpCI6ItSlIiwi1KYiOiLUpyIsItSoIjoi1KkiLCLUqiI6ItSrIiwi1KwiOiLUrSIsItSuIjoi1K8iLCLUsSI6ItWhIiwi1LIiOiLVoiIsItSzIjoi1aMiLCLUtCI6ItWkIiwi1LUiOiLVpSIsItS2Ijoi1aYiLCLUtyI6ItWnIiwi1LgiOiLVqCIsItS5Ijoi1akiLCLUuiI6ItWqIiwi1LsiOiLVqyIsItS8Ijoi1awiLCLUvSI6ItWtIiwi1L4iOiLVriIsItS/Ijoi1a8iLCLVgCI6ItWwIiwi1YEiOiLVsSIsItWCIjoi1bIiLCLVgyI6ItWzIiwi1YQiOiLVtCIsItWFIjoi1bUiLCLVhiI6ItW2Iiwi1YciOiLVtyIsItWIIjoi1bgiLCLViSI6ItW5Iiwi1YoiOiLVuiIsItWLIjoi1bsiLCLVjCI6ItW8Iiwi1Y0iOiLVvSIsItWOIjoi1b4iLCLVjyI6ItW/Iiwi1ZAiOiLWgCIsItWRIjoi1oEiLCLVkiI6ItaCIiwi1ZMiOiLWgyIsItWUIjoi1oQiLCLVlSI6ItaFIiwi1ZYiOiLWhiIsIuGCoCI6IuK0gCIsIuGCoSI6IuK0gSIsIuGCoiI6IuK0giIsIuGCoyI6IuK0gyIsIuGCpCI6IuK0hCIsIuGCpSI6IuK0hSIsIuGCpiI6IuK0hiIsIuGCpyI6IuK0hyIsIuGCqCI6IuK0iCIsIuGCqSI6IuK0iSIsIuGCqiI6IuK0iiIsIuGCqyI6IuK0iyIsIuGCrCI6IuK0jCIsIuGCrSI6IuK0jSIsIuGCriI6IuK0jiIsIuGCryI6IuK0jyIsIuGCsCI6IuK0kCIsIuGCsSI6IuK0kSIsIuGCsiI6IuK0kiIsIuGCsyI6IuK0kyIsIuGCtCI6IuK0lCIsIuGCtSI6IuK0lSIsIuGCtiI6IuK0liIsIuGCtyI6IuK0lyIsIuGCuCI6IuK0mCIsIuGCuSI6IuK0mSIsIuGCuiI6IuK0miIsIuGCuyI6IuK0myIsIuGCvCI6IuK0nCIsIuGCvSI6IuK0nSIsIuGCviI6IuK0niIsIuGCvyI6IuK0nyIsIuGDgCI6IuK0oCIsIuGDgSI6IuK0oSIsIuGDgiI6IuK0oiIsIuGDgyI6IuK0oyIsIuGDhCI6IuK0pCIsIuGDhSI6IuK0pSIsIuGDhyI6IuK0pyIsIuGDjSI6IuK0rSIsIuG4gCI6IuG4gSIsIuG4giI6IuG4gyIsIuG4hCI6IuG4hSIsIuG4hiI6IuG4hyIsIuG4iCI6IuG4iSIsIuG4iiI6IuG4iyIsIuG4jCI6IuG4jSIsIuG4jiI6IuG4jyIsIuG4kCI6IuG4kSIsIuG4kiI6IuG4kyIsIuG4lCI6IuG4lSIsIuG4liI6IuG4lyIsIuG4mCI6IuG4mSIsIuG4miI6IuG4myIsIuG4nCI6IuG4nSIsIuG4niI6IuG4nyIsIuG4oCI6IuG4oSIsIuG4oiI6IuG4oyIsIuG4pCI6IuG4pSIsIuG4piI6IuG4pyIsIuG4qCI6IuG4qSIsIuG4qiI6IuG4qyIsIuG4rCI6IuG4rSIsIuG4riI6IuG4ryIsIuG4sCI6IuG4sSIsIuG4siI6IuG4syIsIuG4tCI6IuG4tSIsIuG4tiI6IuG4tyIsIuG4uCI6IuG4uSIsIuG4uiI6IuG4uyIsIuG4vCI6IuG4vSIsIuG4viI6IuG4vyIsIuG5gCI6IuG5gSIsIuG5giI6IuG5gyIsIuG5hCI6IuG5hSIsIuG5hiI6IuG5hyIsIuG5iCI6IuG5iSIsIuG5iiI6IuG5iyIsIuG5jCI6IuG5jSIsIuG5jiI6IuG5jyIsIuG5kCI6IuG5kSIsIuG5kiI6IuG5kyIsIuG5lCI6IuG5lSIsIuG5liI6IuG5lyIsIuG5mCI6IuG5mSIsIuG5miI6IuG5myIsIuG5nCI6IuG5nSIsIuG5niI6IuG5nyIsIuG5oCI6IuG5oSIsIuG5oiI6IuG5oyIsIuG5pCI6IuG5pSIsIuG5piI6IuG5pyIsIuG5qCI6IuG5qSIsIuG5qiI6IuG5qyIsIuG5rCI6IuG5rSIsIuG5riI6IuG5ryIsIuG5sCI6IuG5sSIsIuG5siI6IuG5syIsIuG5tCI6IuG5tSIsIuG5tiI6IuG5tyIsIuG5uCI6IuG5uSIsIuG5uiI6IuG5uyIsIuG5vCI6IuG5vSIsIuG5viI6IuG5vyIsIuG6gCI6IuG6gSIsIuG6giI6IuG6gyIsIuG6hCI6IuG6hSIsIuG6hiI6IuG6hyIsIuG6iCI6IuG6iSIsIuG6iiI6IuG6iyIsIuG6jCI6IuG6jSIsIuG6jiI6IuG6jyIsIuG6kCI6IuG6kSIsIuG6kiI6IuG6kyIsIuG6lCI6IuG6lSIsIuG6myI6IuG5oSIsIuG6oCI6IuG6oSIsIuG6oiI6IuG6oyIsIuG6pCI6IuG6pSIsIuG6piI6IuG6pyIsIuG6qCI6IuG6qSIsIuG6qiI6IuG6qyIsIuG6rCI6IuG6rSIsIuG6riI6IuG6ryIsIuG6sCI6IuG6sSIsIuG6siI6IuG6syIsIuG6tCI6IuG6tSIsIuG6tiI6IuG6tyIsIuG6uCI6IuG6uSIsIuG6uiI6IuG6uyIsIuG6vCI6IuG6vSIsIuG6viI6IuG6vyIsIuG7gCI6IuG7gSIsIuG7giI6IuG7gyIsIuG7hCI6IuG7hSIsIuG7hiI6IuG7hyIsIuG7iCI6IuG7iSIsIuG7iiI6IuG7iyIsIuG7jCI6IuG7jSIsIuG7jiI6IuG7jyIsIuG7kCI6IuG7kSIsIuG7kiI6IuG7kyIsIuG7lCI6IuG7lSIsIuG7liI6IuG7lyIsIuG7mCI6IuG7mSIsIuG7miI6IuG7myIsIuG7nCI6IuG7nSIsIuG7niI6IuG7nyIsIuG7oCI6IuG7oSIsIuG7oiI6IuG7oyIsIuG7pCI6IuG7pSIsIuG7piI6IuG7pyIsIuG7qCI6IuG7qSIsIuG7qiI6IuG7qyIsIuG7rCI6IuG7rSIsIuG7riI6IuG7ryIsIuG7sCI6IuG7sSIsIuG7siI6IuG7syIsIuG7tCI6IuG7tSIsIuG7tiI6IuG7tyIsIuG7uCI6IuG7uSIsIuG7uiI6IuG7uyIsIuG7vCI6IuG7vSIsIuG7viI6IuG7vyIsIuG8iCI6IuG8gCIsIuG8iSI6IuG8gSIsIuG8iiI6IuG8giIsIuG8iyI6IuG8gyIsIuG8jCI6IuG8hCIsIuG8jSI6IuG8hSIsIuG8jiI6IuG8hiIsIuG8jyI6IuG8hyIsIuG8mCI6IuG8kCIsIuG8mSI6IuG8kSIsIuG8miI6IuG8kiIsIuG8myI6IuG8kyIsIuG8nCI6IuG8lCIsIuG8nSI6IuG8lSIsIuG8qCI6IuG8oCIsIuG8qSI6IuG8oSIsIuG8qiI6IuG8oiIsIuG8qyI6IuG8oyIsIuG8rCI6IuG8pCIsIuG8rSI6IuG8pSIsIuG8riI6IuG8piIsIuG8ryI6IuG8pyIsIuG8uCI6IuG8sCIsIuG8uSI6IuG8sSIsIuG8uiI6IuG8siIsIuG8uyI6IuG8syIsIuG8vCI6IuG8tCIsIuG8vSI6IuG8tSIsIuG8viI6IuG8tiIsIuG8vyI6IuG8tyIsIuG9iCI6IuG9gCIsIuG9iSI6IuG9gSIsIuG9iiI6IuG9giIsIuG9iyI6IuG9gyIsIuG9jCI6IuG9hCIsIuG9jSI6IuG9hSIsIuG9mSI6IuG9kSIsIuG9myI6IuG9kyIsIuG9nSI6IuG9lSIsIuG9nyI6IuG9lyIsIuG9qCI6IuG9oCIsIuG9qSI6IuG9oSIsIuG9qiI6IuG9oiIsIuG9qyI6IuG9oyIsIuG9rCI6IuG9pCIsIuG9rSI6IuG9pSIsIuG9riI6IuG9piIsIuG9ryI6IuG9pyIsIuG+uCI6IuG+sCIsIuG+uSI6IuG+sSIsIuG+uiI6IuG9sCIsIuG+uyI6IuG9sSIsIuG+viI6Is65Iiwi4b+IIjoi4b2yIiwi4b+JIjoi4b2zIiwi4b+KIjoi4b20Iiwi4b+LIjoi4b21Iiwi4b+YIjoi4b+QIiwi4b+ZIjoi4b+RIiwi4b+aIjoi4b22Iiwi4b+bIjoi4b23Iiwi4b+oIjoi4b+gIiwi4b+pIjoi4b+hIiwi4b+qIjoi4b26Iiwi4b+rIjoi4b27Iiwi4b+sIjoi4b+lIiwi4b+4Ijoi4b24Iiwi4b+5Ijoi4b25Iiwi4b+6Ijoi4b28Iiwi4b+7Ijoi4b29Iiwi4oSmIjoiz4kiLCLihKoiOiJrIiwi4oSrIjoiw6UiLCLihLIiOiLihY4iLCLihaAiOiLihbAiLCLihaEiOiLihbEiLCLihaIiOiLihbIiLCLihaMiOiLihbMiLCLihaQiOiLihbQiLCLihaUiOiLihbUiLCLihaYiOiLihbYiLCLihaciOiLihbciLCLihagiOiLihbgiLCLihakiOiLihbkiLCLihaoiOiLihboiLCLihasiOiLihbsiLCLihawiOiLihbwiLCLiha0iOiLihb0iLCLiha4iOiLihb4iLCLiha8iOiLihb8iLCLihoMiOiLihoQiLCLikrYiOiLik5AiLCLikrciOiLik5EiLCLikrgiOiLik5IiLCLikrkiOiLik5MiLCLikroiOiLik5QiLCLikrsiOiLik5UiLCLikrwiOiLik5YiLCLikr0iOiLik5ciLCLikr4iOiLik5giLCLikr8iOiLik5kiLCLik4AiOiLik5oiLCLik4EiOiLik5siLCLik4IiOiLik5wiLCLik4MiOiLik50iLCLik4QiOiLik54iLCLik4UiOiLik58iLCLik4YiOiLik6AiLCLik4ciOiLik6EiLCLik4giOiLik6IiLCLik4kiOiLik6MiLCLik4oiOiLik6QiLCLik4siOiLik6UiLCLik4wiOiLik6YiLCLik40iOiLik6ciLCLik44iOiLik6giLCLik48iOiLik6kiLCLisIAiOiLisLAiLCLisIEiOiLisLEiLCLisIIiOiLisLIiLCLisIMiOiLisLMiLCLisIQiOiLisLQiLCLisIUiOiLisLUiLCLisIYiOiLisLYiLCLisIciOiLisLciLCLisIgiOiLisLgiLCLisIkiOiLisLkiLCLisIoiOiLisLoiLCLisIsiOiLisLsiLCLisIwiOiLisLwiLCLisI0iOiLisL0iLCLisI4iOiLisL4iLCLisI8iOiLisL8iLCLisJAiOiLisYAiLCLisJEiOiLisYEiLCLisJIiOiLisYIiLCLisJMiOiLisYMiLCLisJQiOiLisYQiLCLisJUiOiLisYUiLCLisJYiOiLisYYiLCLisJciOiLisYciLCLisJgiOiLisYgiLCLisJkiOiLisYkiLCLisJoiOiLisYoiLCLisJsiOiLisYsiLCLisJwiOiLisYwiLCLisJ0iOiLisY0iLCLisJ4iOiLisY4iLCLisJ8iOiLisY8iLCLisKAiOiLisZAiLCLisKEiOiLisZEiLCLisKIiOiLisZIiLCLisKMiOiLisZMiLCLisKQiOiLisZQiLCLisKUiOiLisZUiLCLisKYiOiLisZYiLCLisKciOiLisZciLCLisKgiOiLisZgiLCLisKkiOiLisZkiLCLisKoiOiLisZoiLCLisKsiOiLisZsiLCLisKwiOiLisZwiLCLisK0iOiLisZ0iLCLisK4iOiLisZ4iLCLisaAiOiLisaEiLCLisaIiOiLJqyIsIuKxoyI6IuG1vSIsIuKxpCI6Ism9Iiwi4rGnIjoi4rGoIiwi4rGpIjoi4rGqIiwi4rGrIjoi4rGsIiwi4rGtIjoiyZEiLCLisa4iOiLJsSIsIuKxryI6IsmQIiwi4rGwIjoiyZIiLCLisbIiOiLisbMiLCLisbUiOiLisbYiLCLisb4iOiLIvyIsIuKxvyI6IsmAIiwi4rKAIjoi4rKBIiwi4rKCIjoi4rKDIiwi4rKEIjoi4rKFIiwi4rKGIjoi4rKHIiwi4rKIIjoi4rKJIiwi4rKKIjoi4rKLIiwi4rKMIjoi4rKNIiwi4rKOIjoi4rKPIiwi4rKQIjoi4rKRIiwi4rKSIjoi4rKTIiwi4rKUIjoi4rKVIiwi4rKWIjoi4rKXIiwi4rKYIjoi4rKZIiwi4rKaIjoi4rKbIiwi4rKcIjoi4rKdIiwi4rKeIjoi4rKfIiwi4rKgIjoi4rKhIiwi4rKiIjoi4rKjIiwi4rKkIjoi4rKlIiwi4rKmIjoi4rKnIiwi4rKoIjoi4rKpIiwi4rKqIjoi4rKrIiwi4rKsIjoi4rKtIiwi4rKuIjoi4rKvIiwi4rKwIjoi4rKxIiwi4rKyIjoi4rKzIiwi4rK0Ijoi4rK1Iiwi4rK2Ijoi4rK3Iiwi4rK4Ijoi4rK5Iiwi4rK6Ijoi4rK7Iiwi4rK8Ijoi4rK9Iiwi4rK+Ijoi4rK/Iiwi4rOAIjoi4rOBIiwi4rOCIjoi4rODIiwi4rOEIjoi4rOFIiwi4rOGIjoi4rOHIiwi4rOIIjoi4rOJIiwi4rOKIjoi4rOLIiwi4rOMIjoi4rONIiwi4rOOIjoi4rOPIiwi4rOQIjoi4rORIiwi4rOSIjoi4rOTIiwi4rOUIjoi4rOVIiwi4rOWIjoi4rOXIiwi4rOYIjoi4rOZIiwi4rOaIjoi4rObIiwi4rOcIjoi4rOdIiwi4rOeIjoi4rOfIiwi4rOgIjoi4rOhIiwi4rOiIjoi4rOjIiwi4rOrIjoi4rOsIiwi4rOtIjoi4rOuIiwi4rOyIjoi4rOzIiwi6pmAIjoi6pmBIiwi6pmCIjoi6pmDIiwi6pmEIjoi6pmFIiwi6pmGIjoi6pmHIiwi6pmIIjoi6pmJIiwi6pmKIjoi6pmLIiwi6pmMIjoi6pmNIiwi6pmOIjoi6pmPIiwi6pmQIjoi6pmRIiwi6pmSIjoi6pmTIiwi6pmUIjoi6pmVIiwi6pmWIjoi6pmXIiwi6pmYIjoi6pmZIiwi6pmaIjoi6pmbIiwi6pmcIjoi6pmdIiwi6pmeIjoi6pmfIiwi6pmgIjoi6pmhIiwi6pmiIjoi6pmjIiwi6pmkIjoi6pmlIiwi6pmmIjoi6pmnIiwi6pmoIjoi6pmpIiwi6pmqIjoi6pmrIiwi6pmsIjoi6pmtIiwi6pqAIjoi6pqBIiwi6pqCIjoi6pqDIiwi6pqEIjoi6pqFIiwi6pqGIjoi6pqHIiwi6pqIIjoi6pqJIiwi6pqKIjoi6pqLIiwi6pqMIjoi6pqNIiwi6pqOIjoi6pqPIiwi6pqQIjoi6pqRIiwi6pqSIjoi6pqTIiwi6pqUIjoi6pqVIiwi6pqWIjoi6pqXIiwi6pqYIjoi6pqZIiwi6pqaIjoi6pqbIiwi6pyiIjoi6pyjIiwi6pykIjoi6pylIiwi6pymIjoi6pynIiwi6pyoIjoi6pypIiwi6pyqIjoi6pyrIiwi6pysIjoi6pytIiwi6pyuIjoi6pyvIiwi6pyyIjoi6pyzIiwi6py0Ijoi6py1Iiwi6py2Ijoi6py3Iiwi6py4Ijoi6py5Iiwi6py6Ijoi6py7Iiwi6py8Ijoi6py9Iiwi6py+Ijoi6py/Iiwi6p2AIjoi6p2BIiwi6p2CIjoi6p2DIiwi6p2EIjoi6p2FIiwi6p2GIjoi6p2HIiwi6p2IIjoi6p2JIiwi6p2KIjoi6p2LIiwi6p2MIjoi6p2NIiwi6p2OIjoi6p2PIiwi6p2QIjoi6p2RIiwi6p2SIjoi6p2TIiwi6p2UIjoi6p2VIiwi6p2WIjoi6p2XIiwi6p2YIjoi6p2ZIiwi6p2aIjoi6p2bIiwi6p2cIjoi6p2dIiwi6p2eIjoi6p2fIiwi6p2gIjoi6p2hIiwi6p2iIjoi6p2jIiwi6p2kIjoi6p2lIiwi6p2mIjoi6p2nIiwi6p2oIjoi6p2pIiwi6p2qIjoi6p2rIiwi6p2sIjoi6p2tIiwi6p2uIjoi6p2vIiwi6p25Ijoi6p26Iiwi6p27Ijoi6p28Iiwi6p29Ijoi4bW5Iiwi6p2+Ijoi6p2/Iiwi6p6AIjoi6p6BIiwi6p6CIjoi6p6DIiwi6p6EIjoi6p6FIiwi6p6GIjoi6p6HIiwi6p6LIjoi6p6MIiwi6p6NIjoiyaUiLCLqnpAiOiLqnpEiLCLqnpIiOiLqnpMiLCLqnpYiOiLqnpciLCLqnpgiOiLqnpkiLCLqnpoiOiLqnpsiLCLqnpwiOiLqnp0iLCLqnp4iOiLqnp8iLCLqnqAiOiLqnqEiLCLqnqIiOiLqnqMiLCLqnqQiOiLqnqUiLCLqnqYiOiLqnqciLCLqnqgiOiLqnqkiLCLqnqoiOiLJpiIsIuqeqyI6IsmcIiwi6p6sIjoiyaEiLCLqnq0iOiLJrCIsIuqesCI6IsqeIiwi6p6xIjoiyociLCLvvKEiOiLvvYEiLCLvvKIiOiLvvYIiLCLvvKMiOiLvvYMiLCLvvKQiOiLvvYQiLCLvvKUiOiLvvYUiLCLvvKYiOiLvvYYiLCLvvKciOiLvvYciLCLvvKgiOiLvvYgiLCLvvKkiOiLvvYkiLCLvvKoiOiLvvYoiLCLvvKsiOiLvvYsiLCLvvKwiOiLvvYwiLCLvvK0iOiLvvY0iLCLvvK4iOiLvvY4iLCLvvK8iOiLvvY8iLCLvvLAiOiLvvZAiLCLvvLEiOiLvvZEiLCLvvLIiOiLvvZIiLCLvvLMiOiLvvZMiLCLvvLQiOiLvvZQiLCLvvLUiOiLvvZUiLCLvvLYiOiLvvZYiLCLvvLciOiLvvZciLCLvvLgiOiLvvZgiLCLvvLkiOiLvvZkiLCLvvLoiOiLvvZoiLCLwkJCAIjoi8JCQqCIsIvCQkIEiOiLwkJCpIiwi8JCQgiI6IvCQkKoiLCLwkJCDIjoi8JCQqyIsIvCQkIQiOiLwkJCsIiwi8JCQhSI6IvCQkK0iLCLwkJCGIjoi8JCQriIsIvCQkIciOiLwkJCvIiwi8JCQiCI6IvCQkLAiLCLwkJCJIjoi8JCQsSIsIvCQkIoiOiLwkJCyIiwi8JCQiyI6IvCQkLMiLCLwkJCMIjoi8JCQtCIsIvCQkI0iOiLwkJC1Iiwi8JCQjiI6IvCQkLYiLCLwkJCPIjoi8JCQtyIsIvCQkJAiOiLwkJC4Iiwi8JCQkSI6IvCQkLkiLCLwkJCSIjoi8JCQuiIsIvCQkJMiOiLwkJC7Iiwi8JCQlCI6IvCQkLwiLCLwkJCVIjoi8JCQvSIsIvCQkJYiOiLwkJC+Iiwi8JCQlyI6IvCQkL8iLCLwkJCYIjoi8JCRgCIsIvCQkJkiOiLwkJGBIiwi8JCQmiI6IvCQkYIiLCLwkJCbIjoi8JCRgyIsIvCQkJwiOiLwkJGEIiwi8JCQnSI6IvCQkYUiLCLwkJCeIjoi8JCRhiIsIvCQkJ8iOiLwkJGHIiwi8JCQoCI6IvCQkYgiLCLwkJChIjoi8JCRiSIsIvCQkKIiOiLwkJGKIiwi8JCQoyI6IvCQkYsiLCLwkJCkIjoi8JCRjCIsIvCQkKUiOiLwkJGNIiwi8JCQpiI6IvCQkY4iLCLwkJCnIjoi8JCRjyIsIvCRoqAiOiLwkaOAIiwi8JGioSI6IvCRo4EiLCLwkaKiIjoi8JGjgiIsIvCRoqMiOiLwkaODIiwi8JGipCI6IvCRo4QiLCLwkaKlIjoi8JGjhSIsIvCRoqYiOiLwkaOGIiwi8JGipyI6IvCRo4ciLCLwkaKoIjoi8JGjiCIsIvCRoqkiOiLwkaOJIiwi8JGiqiI6IvCRo4oiLCLwkaKrIjoi8JGjiyIsIvCRoqwiOiLwkaOMIiwi8JGirSI6IvCRo40iLCLwkaKuIjoi8JGjjiIsIvCRoq8iOiLwkaOPIiwi8JGisCI6IvCRo5AiLCLwkaKxIjoi8JGjkSIsIvCRorIiOiLwkaOSIiwi8JGisyI6IvCRo5MiLCLwkaK0Ijoi8JGjlCIsIvCRorUiOiLwkaOVIiwi8JGitiI6IvCRo5YiLCLwkaK3Ijoi8JGjlyIsIvCRorgiOiLwkaOYIiwi8JGiuSI6IvCRo5kiLCLwkaK6Ijoi8JGjmiIsIvCRorsiOiLwkaObIiwi8JGivCI6IvCRo5wiLCLwkaK9Ijoi8JGjnSIsIvCRor4iOiLwkaOeIiwi8JGivyI6IvCRo58iLCLDnyI6InNzIiwixLAiOiJpzIciLCLFiSI6Isq8biIsIsewIjoiasyMIiwizpAiOiLOucyIzIEiLCLOsCI6Is+FzIjMgSIsItaHIjoi1aXWgiIsIuG6liI6ImjMsSIsIuG6lyI6InTMiCIsIuG6mCI6InfMiiIsIuG6mSI6InnMiiIsIuG6miI6ImHKviIsIuG6niI6InNzIiwi4b2QIjoiz4XMkyIsIuG9kiI6Is+FzJPMgCIsIuG9lCI6Is+FzJPMgSIsIuG9liI6Is+FzJPNgiIsIuG+gCI6IuG8gM65Iiwi4b6BIjoi4byBzrkiLCLhvoIiOiLhvILOuSIsIuG+gyI6IuG8g865Iiwi4b6EIjoi4byEzrkiLCLhvoUiOiLhvIXOuSIsIuG+hiI6IuG8hs65Iiwi4b6HIjoi4byHzrkiLCLhvogiOiLhvIDOuSIsIuG+iSI6IuG8gc65Iiwi4b6KIjoi4byCzrkiLCLhvosiOiLhvIPOuSIsIuG+jCI6IuG8hM65Iiwi4b6NIjoi4byFzrkiLCLhvo4iOiLhvIbOuSIsIuG+jyI6IuG8h865Iiwi4b6QIjoi4bygzrkiLCLhvpEiOiLhvKHOuSIsIuG+kiI6IuG8os65Iiwi4b6TIjoi4byjzrkiLCLhvpQiOiLhvKTOuSIsIuG+lSI6IuG8pc65Iiwi4b6WIjoi4bymzrkiLCLhvpciOiLhvKfOuSIsIuG+mCI6IuG8oM65Iiwi4b6ZIjoi4byhzrkiLCLhvpoiOiLhvKLOuSIsIuG+myI6IuG8o865Iiwi4b6cIjoi4bykzrkiLCLhvp0iOiLhvKXOuSIsIuG+niI6IuG8ps65Iiwi4b6fIjoi4bynzrkiLCLhvqAiOiLhvaDOuSIsIuG+oSI6IuG9oc65Iiwi4b6iIjoi4b2izrkiLCLhvqMiOiLhvaPOuSIsIuG+pCI6IuG9pM65Iiwi4b6lIjoi4b2lzrkiLCLhvqYiOiLhvabOuSIsIuG+pyI6IuG9p865Iiwi4b6oIjoi4b2gzrkiLCLhvqkiOiLhvaHOuSIsIuG+qiI6IuG9os65Iiwi4b6rIjoi4b2jzrkiLCLhvqwiOiLhvaTOuSIsIuG+rSI6IuG9pc65Iiwi4b6uIjoi4b2mzrkiLCLhvq8iOiLhvafOuSIsIuG+siI6IuG9sM65Iiwi4b6zIjoizrHOuSIsIuG+tCI6Is6szrkiLCLhvrYiOiLOsc2CIiwi4b63IjoizrHNgs65Iiwi4b68IjoizrHOuSIsIuG/giI6IuG9tM65Iiwi4b+DIjoizrfOuSIsIuG/hCI6Is6uzrkiLCLhv4YiOiLOt82CIiwi4b+HIjoizrfNgs65Iiwi4b+MIjoizrfOuSIsIuG/kiI6Is65zIjMgCIsIuG/kyI6Is65zIjMgSIsIuG/liI6Is65zYIiLCLhv5ciOiLOucyIzYIiLCLhv6IiOiLPhcyIzIAiLCLhv6MiOiLPhcyIzIEiLCLhv6QiOiLPgcyTIiwi4b+mIjoiz4XNgiIsIuG/pyI6Is+FzIjNgiIsIuG/siI6IuG9vM65Iiwi4b+zIjoiz4nOuSIsIuG/tCI6Is+OzrkiLCLhv7YiOiLPic2CIiwi4b+3Ijoiz4nNgs65Iiwi4b+8Ijoiz4nOuSIsIu+sgCI6ImZmIiwi76yBIjoiZmkiLCLvrIIiOiJmbCIsIu+sgyI6ImZmaSIsIu+shCI6ImZmbCIsIu+shSI6InN0Iiwi76yGIjoic3QiLCLvrJMiOiLVtNW2Iiwi76yUIjoi1bTVpSIsIu+slSI6ItW01asiLCLvrJYiOiLVvtW2Iiwi76yXIjoi1bTVrSJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgxLGUubGVuZ3RoLTEpLnRyaW0oKS5yZXBsYWNlKHIsZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV18fCIgIn0pfX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi94bWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57c29mdGJyZWFrOiJcbiIsZXNjYXBlOm8sb3B0aW9uczplfHx7fSxyZW5kZXI6YX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2NvbW1vbi5qcyIpLmVzY2FwZVhtbCxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iPCIrZTtpZih0JiZ0Lmxlbmd0aD4wKWZvcih2YXIgbyxzPTA7dm9pZCAwIT09KG89dFtzXSk7KXIrPSIgIitvWzBdKyc9Iicrb1sxXSsnIicscysrO3JldHVybiBuJiYocis9IiAvIikscis9Ij4ifSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxXyQyIikudG9Mb3dlckNhc2UoKX0sYT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxhLGwsdSxjLGQ9ZS53YWxrZXIoKSxfPSIiLHA9IlxuIixmPTAsbT1mdW5jdGlvbihlKXtfKz1lLHA9ZX0saD10aGlzLmVzY2FwZSxnPWZ1bmN0aW9uKCl7aWYoIlxuIiE9PXApe18rPSJcbiIscD0iXG4iO2Zvcih2YXIgZT1mO2U+MDtlLS0pXys9IiAgIn19LGI9dGhpcy5vcHRpb25zO2ZvcihiLnRpbWUmJmNvbnNvbGUudGltZSgicmVuZGVyaW5nIiksXys9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+XG4nLF8rPSc8IURPQ1RZUEUgQ29tbW9uTWFyayBTWVNURU0gIkNvbW1vbk1hcmsuZHRkIj5cbic7cj1kLm5leHQoKTspaWYoYT1yLmVudGVyaW5nLG89ci5ub2RlLGM9by50eXBlLGw9by5pc0NvbnRhaW5lcix1PSJUaGVtYXRpY0JyZWFrIj09PWN8fCJIYXJkYnJlYWsiPT09Y3x8IlNvZnRicmVhayI9PT1jLG49aShjKSxhKXtzd2l0Y2godD1bXSxjKXtjYXNlIkRvY3VtZW50Ijp0LnB1c2goWyJ4bWxucyIsImh0dHA6Ly9jb21tb25tYXJrLm9yZy94bWwvMS4wIl0pO2JyZWFrO2Nhc2UiTGlzdCI6bnVsbCE9PW8ubGlzdFR5cGUmJnQucHVzaChbInR5cGUiLG8ubGlzdFR5cGUudG9Mb3dlckNhc2UoKV0pLG51bGwhPT1vLmxpc3RTdGFydCYmdC5wdXNoKFsic3RhcnQiLFN0cmluZyhvLmxpc3RTdGFydCldKSxudWxsIT09by5saXN0VGlnaHQmJnQucHVzaChbInRpZ2h0IixvLmxpc3RUaWdodD8idHJ1ZSI6ImZhbHNlIl0pO3ZhciBFPW8ubGlzdERlbGltaXRlcjtpZihudWxsIT09RSl7dmFyIHk9IiI7eT0iLiI9PT1FPyJwZXJpb2QiOiJwYXJlbiIsdC5wdXNoKFsiZGVsaW1pdGVyIix5XSl9YnJlYWs7Y2FzZSJDb2RlQmxvY2siOm8uaW5mbyYmdC5wdXNoKFsiaW5mbyIsby5pbmZvXSk7YnJlYWs7Y2FzZSJIZWFkaW5nIjp0LnB1c2goWyJsZXZlbCIsU3RyaW5nKG8ubGV2ZWwpXSk7YnJlYWs7Y2FzZSJMaW5rIjpjYXNlIkltYWdlIjp0LnB1c2goWyJkZXN0aW5hdGlvbiIsby5kZXN0aW5hdGlvbl0pLHQucHVzaChbInRpdGxlIixvLnRpdGxlXSk7YnJlYWs7Y2FzZSJDdXN0b21JbmxpbmUiOmNhc2UiQ3VzdG9tQmxvY2siOnQucHVzaChbIm9uX2VudGVyIixvLm9uRW50ZXJdKSx0LnB1c2goWyJvbl9leGl0IixvLm9uRXhpdF0pfWlmKGIuc291cmNlcG9zKXt2YXIgdj1vLnNvdXJjZXBvczt2JiZ0LnB1c2goWyJzb3VyY2Vwb3MiLFN0cmluZyh2WzBdWzBdKSsiOiIrU3RyaW5nKHZbMF1bMV0pKyItIitTdHJpbmcodlsxXVswXSkrIjoiK1N0cmluZyh2WzFdWzFdKV0pfWlmKGcoKSxtKHMobix0LHUpKSxsKWYrPTE7ZWxzZSBpZighbCYmIXUpe3ZhciBUPW8ubGl0ZXJhbDtUJiZtKGgoVCkpLG0ocygiLyIrbikpfX1lbHNlIGYtPTEsZygpLG0ocygiLyIrbikpO3JldHVybiBiLnRpbWUmJmNvbnNvbGUudGltZUVuZCgicmVuZGVyaW5nIiksXys9IlxuIn07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tYXJrZG93bi9zcmMvcmVhY3QtbWFya2Rvd24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtvLkNvbXBvbmVudC5jYWxsKHRoaXMsZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcmtkb3duL25vZGVfbW9kdWxlcy9jb21tb25tYXJrL2xpYi9pbmRleC5qcyIpLlBhcnNlcixpPW4oIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmstcmVhY3QtcmVuZGVyZXIvc3JjL2NvbW1vbm1hcmstcmVhY3QtcmVuZGVyZXIuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKTtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG8uQ29tcG9uZW50LnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRhaW5lclByb3BzfHx7fSx0PW5ldyBpKHRoaXMucHJvcHMpLG49bmV3IHModGhpcy5wcm9wcy5wYXJzZXJPcHRpb25zKSxyPW4ucGFyc2UodGhpcy5wcm9wcy5zb3VyY2V8fCIiKTtpZih0aGlzLnByb3BzLndhbGtlcilmb3IodmFyIGEsbD1yLndhbGtlcigpO2E9bC5uZXh0KCk7KXRoaXMucHJvcHMud2Fsa2VyLmNhbGwodGhpcyxhLGwpO3JldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSYmKGUuY2xhc3NOYW1lPXRoaXMucHJvcHMuY2xhc3NOYW1lKSxvLmNyZWF0ZUVsZW1lbnQuYXBwbHkobyxbdGhpcy5wcm9wcy5jb250YWluZXJUYWdOYW1lLGUsdGhpcy5wcm9wcy5jaGlsZEJlZm9yZV0uY29uY2F0KHQucmVuZGVyKHIpLmNvbmNhdChbdGhpcy5wcm9wcy5jaGlsZEFmdGVyXSkpKX0sci5wcm9wVHlwZXM9e2NsYXNzTmFtZTphLnN0cmluZyxjb250YWluZXJQcm9wczphLm9iamVjdCxzb3VyY2U6YS5zdHJpbmcuaXNSZXF1aXJlZCxjb250YWluZXJUYWdOYW1lOmEuc3RyaW5nLGNoaWxkQmVmb3JlOmEub2JqZWN0LGNoaWxkQWZ0ZXI6YS5vYmplY3Qsc291cmNlUG9zOmEuYm9vbCxlc2NhcGVIdG1sOmEuYm9vbCxza2lwSHRtbDphLmJvb2wsc29mdEJyZWFrOmEuc3RyaW5nLGFsbG93Tm9kZTphLmZ1bmMsYWxsb3dlZFR5cGVzOmEuYXJyYXksZGlzYWxsb3dlZFR5cGVzOmEuYXJyYXksdHJhbnNmb3JtTGlua1VyaTphLmZ1bmMsdHJhbnNmb3JtSW1hZ2VVcmk6YS5mdW5jLHVud3JhcERpc2FsbG93ZWQ6YS5ib29sLHJlbmRlcmVyczphLm9iamVjdCx3YWxrZXI6YS5mdW5jLHBhcnNlck9wdGlvbnM6YS5vYmplY3R9LHIuZGVmYXVsdFByb3BzPXtjb250YWluZXJUYWdOYW1lOiJkaXYiLHBhcnNlck9wdGlvbnM6e319LHIudHlwZXM9aS50eXBlcyxyLnJlbmRlcmVycz1pLnJlbmRlcmVycyxyLnVyaVRyYW5zZm9ybWVyPWkudXJpVHJhbnNmb3JtZXIsZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL01vdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dC5fX2VzTW9kdWxlPSEwO3ZhciBpPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL21hcFRvWmVyby5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3RyaXBTdHlsZS5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3RlcHBlci5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9ub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9yYWYvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3Nob3VsZFN0b3BBbmltYXRpb24uanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxBPXIoVCksQz0xZTMvNjAsTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPXRoaXM7byh0aGlzLHQpLGUuY2FsbCh0aGlzLG4pLHRoaXMud2FzQW5pbWF0aW5nPSExLHRoaXMuYW5pbWF0aW9uSUQ9bnVsbCx0aGlzLnByZXZUaW1lPTAsdGhpcy5hY2N1bXVsYXRlZFRpbWU9MCx0aGlzLnVucmVhZFByb3BTdHlsZT1udWxsLHRoaXMuY2xlYXJVbnJlYWRQcm9wU3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ITEsbj1yLnN0YXRlLG89bi5jdXJyZW50U3R5bGUscz1uLmN1cnJlbnRWZWxvY2l0eSxhPW4ubGFzdElkZWFsU3R5bGUsbD1uLmxhc3RJZGVhbFZlbG9jaXR5O2Zvcih2YXIgdSBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHUpKXt2YXIgYz1lW3VdOyJudW1iZXIiPT10eXBlb2YgYyYmKHR8fCh0PSEwLG89aSh7fSxvKSxzPWkoe30scyksYT1pKHt9LGEpLGw9aSh7fSxsKSksb1t1XT1jLHNbdV09MCxhW3VdPWMsbFt1XT0wKX10JiZyLnNldFN0YXRlKHtjdXJyZW50U3R5bGU6byxjdXJyZW50VmVsb2NpdHk6cyxsYXN0SWRlYWxTdHlsZTphLGxhc3RJZGVhbFZlbG9jaXR5Omx9KX0sdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5PWZ1bmN0aW9uKCl7ci5hbmltYXRpb25JRD1nLmRlZmF1bHQoZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5zdHlsZTtpZihFLmRlZmF1bHQoci5zdGF0ZS5jdXJyZW50U3R5bGUsdCxyLnN0YXRlLmN1cnJlbnRWZWxvY2l0eSkpcmV0dXJuIHIud2FzQW5pbWF0aW5nJiZyLnByb3BzLm9uUmVzdCYmci5wcm9wcy5vblJlc3QoKSxyLmFuaW1hdGlvbklEPW51bGwsci53YXNBbmltYXRpbmc9ITEsdm9pZChyLmFjY3VtdWxhdGVkVGltZT0wKTtyLndhc0FuaW1hdGluZz0hMDt2YXIgbj1lfHxtLmRlZmF1bHQoKSxvPW4tci5wcmV2VGltZTtpZihyLnByZXZUaW1lPW4sci5hY2N1bXVsYXRlZFRpbWU9ci5hY2N1bXVsYXRlZFRpbWUrbyxyLmFjY3VtdWxhdGVkVGltZT4xMCpDJiYoci5hY2N1bXVsYXRlZFRpbWU9MCksMD09PXIuYWNjdW11bGF0ZWRUaW1lKXJldHVybiByLmFuaW1hdGlvbklEPW51bGwsdm9pZCByLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTt2YXIgcz0oci5hY2N1bXVsYXRlZFRpbWUtTWF0aC5mbG9vcihyLmFjY3VtdWxhdGVkVGltZS9DKSpDKS9DLGk9TWF0aC5mbG9vcihyLmFjY3VtdWxhdGVkVGltZS9DKSxhPXt9LGw9e30sdT17fSxjPXt9O2Zvcih2YXIgZCBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGQpKXt2YXIgXz10W2RdO2lmKCJudW1iZXIiPT10eXBlb2YgXyl1W2RdPV8sY1tkXT0wLGFbZF09XyxsW2RdPTA7ZWxzZXtmb3IodmFyIGY9ci5zdGF0ZS5sYXN0SWRlYWxTdHlsZVtkXSxoPXIuc3RhdGUubGFzdElkZWFsVmVsb2NpdHlbZF0sZz0wO2c8aTtnKyspe3ZhciBiPXAuZGVmYXVsdChDLzFlMyxmLGgsXy52YWwsXy5zdGlmZm5lc3MsXy5kYW1waW5nLF8ucHJlY2lzaW9uKTtmPWJbMF0saD1iWzFdfXZhciB5PXAuZGVmYXVsdChDLzFlMyxmLGgsXy52YWwsXy5zdGlmZm5lc3MsXy5kYW1waW5nLF8ucHJlY2lzaW9uKSx2PXlbMF0sVD15WzFdO3VbZF09Zisodi1mKSpzLGNbZF09aCsoVC1oKSpzLGFbZF09ZixsW2RdPWh9fXIuYW5pbWF0aW9uSUQ9bnVsbCxyLmFjY3VtdWxhdGVkVGltZS09aSpDLHIuc2V0U3RhdGUoe2N1cnJlbnRTdHlsZTp1LGN1cnJlbnRWZWxvY2l0eTpjLGxhc3RJZGVhbFN0eWxlOmEsbGFzdElkZWFsVmVsb2NpdHk6bH0pLHIudW5yZWFkUHJvcFN0eWxlPW51bGwsci5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCl9KX0sdGhpcy5zdGF0ZT10aGlzLmRlZmF1bHRTdGF0ZSgpfXJldHVybiBzKHQsZSksYSh0LG51bGwsW3trZXk6InByb3BUeXBlcyIsdmFsdWU6e2RlZmF1bHRTdHlsZTpBLmRlZmF1bHQub2JqZWN0T2YoQS5kZWZhdWx0Lm51bWJlciksc3R5bGU6QS5kZWZhdWx0Lm9iamVjdE9mKEEuZGVmYXVsdC5vbmVPZlR5cGUoW0EuZGVmYXVsdC5udW1iZXIsQS5kZWZhdWx0Lm9iamVjdF0pKS5pc1JlcXVpcmVkLGNoaWxkcmVuOkEuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25SZXN0OkEuZGVmYXVsdC5mdW5jfSxlbnVtZXJhYmxlOiEwfV0pLHQucHJvdG90eXBlLmRlZmF1bHRTdGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmRlZmF1bHRTdHlsZSxuPWUuc3R5bGUscj10fHxkLmRlZmF1bHQobiksbz11LmRlZmF1bHQocik7cmV0dXJue2N1cnJlbnRTdHlsZTpyLGN1cnJlbnRWZWxvY2l0eTpvLGxhc3RJZGVhbFN0eWxlOnIsbGFzdElkZWFsVmVsb2NpdHk6b319LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5wcmV2VGltZT1tLmRlZmF1bHQoKSx0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtudWxsIT10aGlzLnVucmVhZFByb3BTdHlsZSYmdGhpcy5jbGVhclVucmVhZFByb3BTdHlsZSh0aGlzLnVucmVhZFByb3BTdHlsZSksdGhpcy51bnJlYWRQcm9wU3R5bGU9ZS5zdHlsZSxudWxsPT10aGlzLmFuaW1hdGlvbklEJiYodGhpcy5wcmV2VGltZT1tLmRlZmF1bHQoKSx0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKSl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5hbmltYXRpb25JRCYmKGcuZGVmYXVsdC5jYW5jZWwodGhpcy5hbmltYXRpb25JRCksdGhpcy5hbmltYXRpb25JRD1udWxsKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnN0YXRlLmN1cnJlbnRTdHlsZSk7cmV0dXJuIGUmJnYuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KGUpfSx0fSh2LmRlZmF1bHQuQ29tcG9uZW50KTt0LmRlZmF1bHQ9TyxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9TdGFnZ2VyZWRNb3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIGkoZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKCF5LmRlZmF1bHQoZVtyXSx0W3JdLG5bcl0pKXJldHVybiExO3JldHVybiEwfXQuX19lc01vZHVsZT0hMDt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9tYXBUb1plcm8uanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3N0cmlwU3R5bGUuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3N0ZXBwZXIuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zaG91bGRTdG9wQW5pbWF0aW9uLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksQz1yKEEpLE89MWUzLzYwLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj10aGlzO28odGhpcyx0KSxlLmNhbGwodGhpcyxuKSx0aGlzLmFuaW1hdGlvbklEPW51bGwsdGhpcy5wcmV2VGltZT0wLHRoaXMuYWNjdW11bGF0ZWRUaW1lPTAsdGhpcy51bnJlYWRQcm9wU3R5bGVzPW51bGwsdGhpcy5jbGVhclVucmVhZFByb3BTdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ci5zdGF0ZSxuPXQuY3VycmVudFN0eWxlcyxvPXQuY3VycmVudFZlbG9jaXRpZXMscz10Lmxhc3RJZGVhbFN0eWxlcyxpPXQubGFzdElkZWFsVmVsb2NpdGllcyxsPSExLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGM9ZVt1XSxkPSExO2Zvcih2YXIgXyBpbiBjKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLF8pKXt2YXIgcD1jW19dOyJudW1iZXIiPT10eXBlb2YgcCYmKGR8fChkPSEwLGw9ITAsblt1XT1hKHt9LG5bdV0pLG9bdV09YSh7fSxvW3VdKSxzW3VdPWEoe30sc1t1XSksaVt1XT1hKHt9LGlbdV0pKSxuW3VdW19dPXAsb1t1XVtfXT0wLHNbdV1bX109cCxpW3VdW19dPTApfX1sJiZyLnNldFN0YXRlKHtjdXJyZW50U3R5bGVzOm4sY3VycmVudFZlbG9jaXRpZXM6byxsYXN0SWRlYWxTdHlsZXM6cyxsYXN0SWRlYWxWZWxvY2l0aWVzOml9KX0sdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5PWZ1bmN0aW9uKCl7ci5hbmltYXRpb25JRD1iLmRlZmF1bHQoZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5zdHlsZXMoci5zdGF0ZS5sYXN0SWRlYWxTdHlsZXMpO2lmKGkoci5zdGF0ZS5jdXJyZW50U3R5bGVzLHQsci5zdGF0ZS5jdXJyZW50VmVsb2NpdGllcykpcmV0dXJuIHIuYW5pbWF0aW9uSUQ9bnVsbCx2b2lkKHIuYWNjdW11bGF0ZWRUaW1lPTApO3ZhciBuPWV8fGguZGVmYXVsdCgpLG89bi1yLnByZXZUaW1lO2lmKHIucHJldlRpbWU9bixyLmFjY3VtdWxhdGVkVGltZT1yLmFjY3VtdWxhdGVkVGltZStvLHIuYWNjdW11bGF0ZWRUaW1lPjEwKk8mJihyLmFjY3VtdWxhdGVkVGltZT0wKSwwPT09ci5hY2N1bXVsYXRlZFRpbWUpcmV0dXJuIHIuYW5pbWF0aW9uSUQ9bnVsbCx2b2lkIHIuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpO2Zvcih2YXIgcz0oci5hY2N1bXVsYXRlZFRpbWUtTWF0aC5mbG9vcihyLmFjY3VtdWxhdGVkVGltZS9PKSpPKS9PLGE9TWF0aC5mbG9vcihyLmFjY3VtdWxhdGVkVGltZS9PKSxsPVtdLHU9W10sYz1bXSxkPVtdLF89MDtfPHQubGVuZ3RoO18rKyl7dmFyIHA9dFtfXSxtPXt9LGc9e30sYj17fSxFPXt9O2Zvcih2YXIgeSBpbiBwKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHkpKXt2YXIgdj1wW3ldO2lmKCJudW1iZXIiPT10eXBlb2YgdiltW3ldPXYsZ1t5XT0wLGJbeV09dixFW3ldPTA7ZWxzZXtmb3IodmFyIFQ9ci5zdGF0ZS5sYXN0SWRlYWxTdHlsZXNbX11beV0sQT1yLnN0YXRlLmxhc3RJZGVhbFZlbG9jaXRpZXNbX11beV0sQz0wO0M8YTtDKyspe3ZhciBTPWYuZGVmYXVsdChPLzFlMyxULEEsdi52YWwsdi5zdGlmZm5lc3Msdi5kYW1waW5nLHYucHJlY2lzaW9uKTtUPVNbMF0sQT1TWzFdfXZhciBSPWYuZGVmYXVsdChPLzFlMyxULEEsdi52YWwsdi5zdGlmZm5lc3Msdi5kYW1waW5nLHYucHJlY2lzaW9uKSxqPVJbMF0seD1SWzFdO21beV09VCsoai1UKSpzLGdbeV09QSsoeC1BKSpzLGJbeV09VCxFW3ldPUF9fWNbX109bSxkW19dPWcsbFtfXT1iLHVbX109RX1yLmFuaW1hdGlvbklEPW51bGwsci5hY2N1bXVsYXRlZFRpbWUtPWEqTyxyLnNldFN0YXRlKHtjdXJyZW50U3R5bGVzOmMsY3VycmVudFZlbG9jaXRpZXM6ZCxsYXN0SWRlYWxTdHlsZXM6bCxsYXN0SWRlYWxWZWxvY2l0aWVzOnV9KSxyLnVucmVhZFByb3BTdHlsZXM9bnVsbCxyLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKX0pfSx0aGlzLnN0YXRlPXRoaXMuZGVmYXVsdFN0YXRlKCl9cmV0dXJuIHModCxlKSxsKHQsbnVsbCxbe2tleToicHJvcFR5cGVzIix2YWx1ZTp7ZGVmYXVsdFN0eWxlczpDLmRlZmF1bHQuYXJyYXlPZihDLmRlZmF1bHQub2JqZWN0T2YoQy5kZWZhdWx0Lm51bWJlcikpLHN0eWxlczpDLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGNoaWxkcmVuOkMuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LGVudW1lcmFibGU6ITB9XSksdC5wcm90b3R5cGUuZGVmYXVsdFN0YXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGVmYXVsdFN0eWxlcyxuPWUuc3R5bGVzLHI9dHx8bigpLm1hcChfLmRlZmF1bHQpLG89ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGMuZGVmYXVsdChlKX0pO3JldHVybntjdXJyZW50U3R5bGVzOnIsY3VycmVudFZlbG9jaXRpZXM6byxsYXN0SWRlYWxTdHlsZXM6cixsYXN0SWRlYWxWZWxvY2l0aWVzOm99fSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMucHJldlRpbWU9aC5kZWZhdWx0KCksdGhpcy5zdGFydEFuaW1hdGlvbklmTmVjZXNzYXJ5KCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy51bnJlYWRQcm9wU3R5bGVzJiZ0aGlzLmNsZWFyVW5yZWFkUHJvcFN0eWxlKHRoaXMudW5yZWFkUHJvcFN0eWxlcyksdGhpcy51bnJlYWRQcm9wU3R5bGVzPWUuc3R5bGVzKHRoaXMuc3RhdGUubGFzdElkZWFsU3R5bGVzKSxudWxsPT10aGlzLmFuaW1hdGlvbklEJiYodGhpcy5wcmV2VGltZT1oLmRlZmF1bHQoKSx0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKSl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5hbmltYXRpb25JRCYmKGIuZGVmYXVsdC5jYW5jZWwodGhpcy5hbmltYXRpb25JRCksdGhpcy5hbmltYXRpb25JRD1udWxsKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnN0YXRlLmN1cnJlbnRTdHlsZXMpO3JldHVybiBlJiZULmRlZmF1bHQuQ2hpbGRyZW4ub25seShlKX0sdH0oVC5kZWZhdWx0LkNvbXBvbmVudCk7dC5kZWZhdWx0PVMsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvVHJhbnNpdGlvbk1vdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9dDtyZXR1cm4gbnVsbD09cj9lLm1hcChmdW5jdGlvbihlLHQpe3JldHVybntrZXk6ZS5rZXksZGF0YTplLmRhdGEsc3R5bGU6blt0XX19KTplLm1hcChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWlmKHJbb10ua2V5PT09ZS5rZXkpcmV0dXJue2tleTpyW29dLmtleSxkYXRhOnJbb10uZGF0YSxzdHlsZTpuW3RdfTtyZXR1cm57a2V5OmUua2V5LGRhdGE6ZS5kYXRhLHN0eWxlOm5bdF19fSl9ZnVuY3Rpb24gYShlLHQsbixyKXtpZihyLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWlmKHJbb10ua2V5IT09dFtvXS5rZXkpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYoIUMuZGVmYXVsdChlW29dLHRbb10uc3R5bGUsbltvXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbChlLHQsbixyLG8scyxpLGEsbCl7Zm9yKHZhciB1PWIuZGVmYXVsdChyLG8sZnVuY3Rpb24oZSxyKXt2YXIgbz10KHIpO3JldHVybiBudWxsPT1vPyhuKHtrZXk6ci5rZXksZGF0YTpyLmRhdGF9KSxudWxsKTpDLmRlZmF1bHQoc1tlXSxvLGlbZV0pPyhuKHtrZXk6ci5rZXksZGF0YTpyLmRhdGF9KSxudWxsKTp7a2V5OnIua2V5LGRhdGE6ci5kYXRhLHN0eWxlOm99fSksYz1bXSxkPVtdLHA9W10sZj1bXSxtPTA7bTx1Lmxlbmd0aDttKyspe2Zvcih2YXIgaD11W21dLGc9bnVsbCxFPTA7RTxyLmxlbmd0aDtFKyspaWYocltFXS5rZXk9PT1oLmtleSl7Zz1FO2JyZWFrfWlmKG51bGw9PWcpe3ZhciB5PWUoaCk7Y1ttXT15LHBbbV09eTt2YXIgdj1fLmRlZmF1bHQoaC5zdHlsZSk7ZFttXT12LGZbbV09dn1lbHNlIGNbbV09c1tnXSxwW21dPWFbZ10sZFttXT1pW2ddLGZbbV09bFtnXX1yZXR1cm5bdSxjLGQscCxmXX10Ll9fZXNNb2R1bGU9ITA7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvbWFwVG9aZXJvLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zdHJpcFN0eWxlLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zdGVwcGVyLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9tZXJnZURpZmYuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zaG91bGRTdG9wQW5pbWF0aW9uLmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9MWUzLzYwLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj10aGlzO28odGhpcyx0KSxlLmNhbGwodGhpcyxuKSx0aGlzLnVubW91bnRpbmc9ITEsdGhpcy5hbmltYXRpb25JRD1udWxsLHRoaXMucHJldlRpbWU9MCx0aGlzLmFjY3VtdWxhdGVkVGltZT0wLHRoaXMudW5yZWFkUHJvcFN0eWxlcz1udWxsLHRoaXMuY2xlYXJVbnJlYWRQcm9wU3R5bGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWwoci5wcm9wcy53aWxsRW50ZXIsci5wcm9wcy53aWxsTGVhdmUsci5wcm9wcy5kaWRMZWF2ZSxyLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLGUsci5zdGF0ZS5jdXJyZW50U3R5bGVzLHIuc3RhdGUuY3VycmVudFZlbG9jaXRpZXMsci5zdGF0ZS5sYXN0SWRlYWxTdHlsZXMsci5zdGF0ZS5sYXN0SWRlYWxWZWxvY2l0aWVzKSxuPXRbMF0sbz10WzFdLHM9dFsyXSxpPXRbM10sYT10WzRdLGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIGQ9ZVtjXS5zdHlsZSxfPSExO2Zvcih2YXIgcCBpbiBkKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLHApKXt2YXIgZj1kW3BdOyJudW1iZXIiPT10eXBlb2YgZiYmKF98fChfPSEwLG9bY109dSh7fSxvW2NdKSxzW2NdPXUoe30sc1tjXSksaVtjXT11KHt9LGlbY10pLGFbY109dSh7fSxhW2NdKSxuW2NdPXtrZXk6bltjXS5rZXksZGF0YTpuW2NdLmRhdGEsc3R5bGU6dSh7fSxuW2NdLnN0eWxlKX0pLG9bY11bcF09ZixzW2NdW3BdPTAsaVtjXVtwXT1mLGFbY11bcF09MCxuW2NdLnN0eWxlW3BdPWYpfX1yLnNldFN0YXRlKHtjdXJyZW50U3R5bGVzOm8sY3VycmVudFZlbG9jaXRpZXM6cyxtZXJnZWRQcm9wc1N0eWxlczpuLGxhc3RJZGVhbFN0eWxlczppLGxhc3RJZGVhbFZlbG9jaXRpZXM6YX0pfSx0aGlzLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3Nhcnk9ZnVuY3Rpb24oKXtyLnVubW91bnRpbmd8fChyLmFuaW1hdGlvbklEPVQuZGVmYXVsdChmdW5jdGlvbihlKXtpZighci51bm1vdW50aW5nKXt2YXIgdD1yLnByb3BzLnN0eWxlcyxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaShyLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLHIudW5yZWFkUHJvcFN0eWxlcyxyLnN0YXRlLmxhc3RJZGVhbFN0eWxlcykpOnQ7aWYoYShyLnN0YXRlLmN1cnJlbnRTdHlsZXMsbixyLnN0YXRlLmN1cnJlbnRWZWxvY2l0aWVzLHIuc3RhdGUubWVyZ2VkUHJvcHNTdHlsZXMpKXJldHVybiByLmFuaW1hdGlvbklEPW51bGwsdm9pZChyLmFjY3VtdWxhdGVkVGltZT0wKTt2YXIgbz1lfHx5LmRlZmF1bHQoKSxzPW8tci5wcmV2VGltZTtpZihyLnByZXZUaW1lPW8sci5hY2N1bXVsYXRlZFRpbWU9ci5hY2N1bXVsYXRlZFRpbWUrcyxyLmFjY3VtdWxhdGVkVGltZT4xMCp4JiYoci5hY2N1bXVsYXRlZFRpbWU9MCksMD09PXIuYWNjdW11bGF0ZWRUaW1lKXJldHVybiByLmFuaW1hdGlvbklEPW51bGwsdm9pZCByLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKTtmb3IodmFyIHU9KHIuYWNjdW11bGF0ZWRUaW1lLU1hdGguZmxvb3Ioci5hY2N1bXVsYXRlZFRpbWUveCkqeCkveCxjPU1hdGguZmxvb3Ioci5hY2N1bXVsYXRlZFRpbWUveCksZD1sKHIucHJvcHMud2lsbEVudGVyLHIucHJvcHMud2lsbExlYXZlLHIucHJvcHMuZGlkTGVhdmUsci5zdGF0ZS5tZXJnZWRQcm9wc1N0eWxlcyxuLHIuc3RhdGUuY3VycmVudFN0eWxlcyxyLnN0YXRlLmN1cnJlbnRWZWxvY2l0aWVzLHIuc3RhdGUubGFzdElkZWFsU3R5bGVzLHIuc3RhdGUubGFzdElkZWFsVmVsb2NpdGllcyksXz1kWzBdLHA9ZFsxXSxmPWRbMl0sbT1kWzNdLGc9ZFs0XSxiPTA7YjxfLmxlbmd0aDtiKyspe3ZhciBFPV9bYl0uc3R5bGUsdj17fSxUPXt9LEE9e30sQz17fTtmb3IodmFyIE8gaW4gRSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxPKSl7dmFyIFM9RVtPXTtpZigibnVtYmVyIj09dHlwZW9mIFMpdltPXT1TLFRbT109MCxBW09dPVMsQ1tPXT0wO2Vsc2V7Zm9yKHZhciBSPW1bYl1bT10saj1nW2JdW09dLEw9MDtMPGM7TCsrKXt2YXIgRD1oLmRlZmF1bHQoeC8xZTMsUixqLFMudmFsLFMuc3RpZmZuZXNzLFMuZGFtcGluZyxTLnByZWNpc2lvbik7Uj1EWzBdLGo9RFsxXX12YXIgdz1oLmRlZmF1bHQoeC8xZTMsUixqLFMudmFsLFMuc3RpZmZuZXNzLFMuZGFtcGluZyxTLnByZWNpc2lvbiksTT13WzBdLGs9d1sxXTt2W09dPVIrKE0tUikqdSxUW09dPWorKGstaikqdSxBW09dPVIsQ1tPXT1qfX1tW2JdPUEsZ1tiXT1DLHBbYl09dixmW2JdPVR9ci5hbmltYXRpb25JRD1udWxsLHIuYWNjdW11bGF0ZWRUaW1lLT1jKngsci5zZXRTdGF0ZSh7Y3VycmVudFN0eWxlczpwLGN1cnJlbnRWZWxvY2l0aWVzOmYsbGFzdElkZWFsU3R5bGVzOm0sbGFzdElkZWFsVmVsb2NpdGllczpnLG1lcmdlZFByb3BzU3R5bGVzOl99KSxyLnVucmVhZFByb3BTdHlsZXM9bnVsbCxyLnN0YXJ0QW5pbWF0aW9uSWZOZWNlc3NhcnkoKX19KSl9LHRoaXMuc3RhdGU9dGhpcy5kZWZhdWx0U3RhdGUoKX1yZXR1cm4gcyh0LGUpLGModCxudWxsLFt7a2V5OiJwcm9wVHlwZXMiLHZhbHVlOntkZWZhdWx0U3R5bGVzOmouZGVmYXVsdC5hcnJheU9mKGouZGVmYXVsdC5zaGFwZSh7a2V5OmouZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkYXRhOmouZGVmYXVsdC5hbnksc3R5bGU6ai5kZWZhdWx0Lm9iamVjdE9mKGouZGVmYXVsdC5udW1iZXIpLmlzUmVxdWlyZWR9KSksc3R5bGVzOmouZGVmYXVsdC5vbmVPZlR5cGUoW2ouZGVmYXVsdC5mdW5jLGouZGVmYXVsdC5hcnJheU9mKGouZGVmYXVsdC5zaGFwZSh7a2V5OmouZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkYXRhOmouZGVmYXVsdC5hbnksc3R5bGU6ai5kZWZhdWx0Lm9iamVjdE9mKGouZGVmYXVsdC5vbmVPZlR5cGUoW2ouZGVmYXVsdC5udW1iZXIsai5kZWZhdWx0Lm9iamVjdF0pKS5pc1JlcXVpcmVkfSkpXSkuaXNSZXF1aXJlZCxjaGlsZHJlbjpqLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHdpbGxFbnRlcjpqLmRlZmF1bHQuZnVuYyx3aWxsTGVhdmU6ai5kZWZhdWx0LmZ1bmMsZGlkTGVhdmU6ai5kZWZhdWx0LmZ1bmN9LGVudW1lcmFibGU6ITB9LHtrZXk6ImRlZmF1bHRQcm9wcyIsdmFsdWU6e3dpbGxFbnRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZi5kZWZhdWx0KGUuc3R5bGUpfSx3aWxsTGVhdmU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZGlkTGVhdmU6ZnVuY3Rpb24oKXt9fSxlbnVtZXJhYmxlOiEwfV0pLHQucHJvdG90eXBlLmRlZmF1bHRTdGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmRlZmF1bHRTdHlsZXMsbj1lLnN0eWxlcyxyPWUud2lsbEVudGVyLG89ZS53aWxsTGVhdmUscz1lLmRpZExlYXZlLGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bih0KTpuLGE9dm9pZCAwO2E9bnVsbD09dD9pOnQubWFwKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKWlmKGlbdF0ua2V5PT09ZS5rZXkpcmV0dXJuIGlbdF07cmV0dXJuIGV9KTt2YXIgdT1udWxsPT10P2kubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBmLmRlZmF1bHQoZS5zdHlsZSl9KTp0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZi5kZWZhdWx0KGUuc3R5bGUpfSksYz1udWxsPT10P2kubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBfLmRlZmF1bHQoZS5zdHlsZSl9KTp0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gXy5kZWZhdWx0KGUuc3R5bGUpfSksZD1sKHIsbyxzLGEsaSx1LGMsdSxjKSxwPWRbMF07cmV0dXJue2N1cnJlbnRTdHlsZXM6ZFsxXSxjdXJyZW50VmVsb2NpdGllczpkWzJdLGxhc3RJZGVhbFN0eWxlczpkWzNdLGxhc3RJZGVhbFZlbG9jaXRpZXM6ZFs0XSxtZXJnZWRQcm9wc1N0eWxlczpwfX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnByZXZUaW1lPXkuZGVmYXVsdCgpLHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3RoaXMudW5yZWFkUHJvcFN0eWxlcyYmdGhpcy5jbGVhclVucmVhZFByb3BTdHlsZSh0aGlzLnVucmVhZFByb3BTdHlsZXMpO3ZhciB0PWUuc3R5bGVzO3RoaXMudW5yZWFkUHJvcFN0eWxlcz0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkodGhpcy5zdGF0ZS5tZXJnZWRQcm9wc1N0eWxlcyx0aGlzLnVucmVhZFByb3BTdHlsZXMsdGhpcy5zdGF0ZS5sYXN0SWRlYWxTdHlsZXMpKTp0LG51bGw9PXRoaXMuYW5pbWF0aW9uSUQmJih0aGlzLnByZXZUaW1lPXkuZGVmYXVsdCgpLHRoaXMuc3RhcnRBbmltYXRpb25JZk5lY2Vzc2FyeSgpKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnVubW91bnRpbmc9ITAsbnVsbCE9dGhpcy5hbmltYXRpb25JRCYmKFQuZGVmYXVsdC5jYW5jZWwodGhpcy5hbmltYXRpb25JRCksdGhpcy5hbmltYXRpb25JRD1udWxsKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzLnN0YXRlLm1lcmdlZFByb3BzU3R5bGVzLHRoaXMudW5yZWFkUHJvcFN0eWxlcyx0aGlzLnN0YXRlLmN1cnJlbnRTdHlsZXMpLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbihlKTtyZXR1cm4gdCYmUy5kZWZhdWx0LkNoaWxkcmVuLm9ubHkodCl9LHR9KFMuZGVmYXVsdC5Db21wb25lbnQpO3QuZGVmYXVsdD1MLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL21hcFRvWmVyby5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT0wKTtyZXR1cm4gdH10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvbWVyZ2VEaWZmLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgcj17fSxvPTA7bzxlLmxlbmd0aDtvKyspcltlW29dLmtleV09bztmb3IodmFyIHM9e30sbz0wO288dC5sZW5ndGg7bysrKXNbdFtvXS5rZXldPW87Zm9yKHZhciBpPVtdLG89MDtvPHQubGVuZ3RoO28rKylpW29dPXRbb107Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGVbb10ua2V5KSl7dmFyIGE9bihvLGVbb10pO251bGwhPWEmJmkucHVzaChhKX1yZXR1cm4gaS5zb3J0KGZ1bmN0aW9uKGUsbil7dmFyIG89c1tlLmtleV0saT1zW24ua2V5XSxhPXJbZS5rZXldLGw9cltuLmtleV07aWYobnVsbCE9byYmbnVsbCE9aSlyZXR1cm4gc1tlLmtleV0tc1tuLmtleV07aWYobnVsbCE9YSYmbnVsbCE9bClyZXR1cm4gcltlLmtleV0tcltuLmtleV07aWYobnVsbCE9byl7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBjPXRbdV0ua2V5O2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGMpKXtpZihvPHNbY10mJmw+cltjXSlyZXR1cm4tMTtpZihvPnNbY10mJmw8cltjXSlyZXR1cm4gMX19cmV0dXJuIDF9Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBjPXRbdV0ua2V5O2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGMpKXtpZihpPHNbY10mJmE+cltjXSlyZXR1cm4gMTtpZihpPnNbY10mJmE8cltjXSlyZXR1cm4tMX19cmV0dXJuLTF9KX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvcHJlc2V0cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXtub1dvYmJsZTp7c3RpZmZuZXNzOjE3MCxkYW1waW5nOjI2fSxnZW50bGU6e3N0aWZmbmVzczoxMjAsZGFtcGluZzoxNH0sd29iYmx5OntzdGlmZm5lc3M6MTgwLGRhbXBpbmc6MTJ9LHN0aWZmOntzdGlmZm5lc3M6MjEwLGRhbXBpbmc6MjB9fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9yZWFjdC1tb3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2UuZGVmYXVsdDplfXQuX19lc01vZHVsZT0hMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL01vdGlvbi5qcyIpO3QuTW90aW9uPXIobyk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9TdGFnZ2VyZWRNb3Rpb24uanMiKTt0LlN0YWdnZXJlZE1vdGlvbj1yKHMpO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvVHJhbnNpdGlvbk1vdGlvbi5qcyIpO3QuVHJhbnNpdGlvbk1vdGlvbj1yKGkpO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3ByaW5nLmpzIik7dC5zcHJpbmc9cihhKTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3ByZXNldHMuanMiKTt0LnByZXNldHM9cihsKTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3N0cmlwU3R5bGUuanMiKTt0LnN0cmlwU3R5bGU9cih1KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbGliL3Jlb3JkZXJLZXlzLmpzIik7dC5yZW9yZGVyS2V5cz1yKGMpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9yZW9yZGVyS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7fXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9cjtlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtbW90aW9uL2xpYi9zaG91bGRTdG9wQW5pbWF0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgciBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpKXtpZigwIT09bltyXSlyZXR1cm4hMTt2YXIgbz0ibnVtYmVyIj09dHlwZW9mIHRbcl0/dFtyXTp0W3JdLnZhbDtpZihlW3JdIT09bylyZXR1cm4hMX1yZXR1cm4hMH10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3ByaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbyh7fSxhLHQse3ZhbDplfSl9dC5fX2VzTW9kdWxlPSEwO3ZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O3QuZGVmYXVsdD1yO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvcHJlc2V0cy5qcyIpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShzKSxhPW8oe30saS5kZWZhdWx0Lm5vV29iYmxlLHtwcmVjaXNpb246LjAxfSk7ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3RlcHBlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIscyxpLGEpe3ZhciBsPS1zKih0LXIpLHU9LWkqbixjPWwrdSxkPW4rYyplLF89dCtkKmU7cmV0dXJuIE1hdGguYWJzKGQpPGEmJk1hdGguYWJzKF8tcik8YT8ob1swXT1yLG9bMV09MCxvKToob1swXT1fLG9bMV09ZCxvKX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXI7dmFyIG89WzAsMF07ZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LW1vdGlvbi9saWIvc3RyaXBTdHlsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT0ibnVtYmVyIj09dHlwZW9mIGVbbl0/ZVtuXTplW25dLnZhbCk7cmV0dXJuIHR9dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1tb3Rpb24vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciBuLHIsbzsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OnZvaWQgMCE9PXQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG4oKS1vKS8xZTZ9LHI9dC5ocnRpbWUsbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXIoKSwxZTkqZVswXStlWzFdfSxvPW4oKSk6RGF0ZS5ub3c/KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpLW99LG89RGF0ZS5ub3coKSk6KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpLW99LG89KG5ldyBEYXRlKS5nZXRUaW1lKCkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3Qtb25jbGlja291dHNpZGUvZGlzdC9yZWFjdC1vbmNsaWNrb3V0c2lkZS5lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLl9fcHJvdG9fXz10fWZ1bmN0aW9uIG8oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxzPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspbj1zW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb31mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gZT09PXR8fChlLmNvcnJlc3BvbmRpbmdFbGVtZW50P2UuY29ycmVzcG9uZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKG4pOmUuY2xhc3NMaXN0LmNvbnRhaW5zKG4pKX1mdW5jdGlvbiBpKGUsdCxuKXtpZihlPT09dClyZXR1cm4hMDtmb3IoO2UucGFyZW50Tm9kZTspe2lmKHMoZSx0LG4pKXJldHVybiEwO2U9ZS5wYXJlbnROb2RlfXJldHVybiBlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDw9ZS5jbGllbnRYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0PD1lLmNsaWVudFl9ZnVuY3Rpb24gbChlLHQpe3ZhciBuPW51bGw7cmV0dXJuLTEhPT1nLmluZGV4T2YodCkmJmMmJihuPXtwYXNzaXZlOiFlLnByb3BzLnByZXZlbnREZWZhdWx0fSksbn1mdW5jdGlvbiB1KGUsdCl7dmFyIG4scyx1PWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IkNvbXBvbmVudCI7cmV0dXJuIHM9bj1mdW5jdGlvbihuKXtmdW5jdGlvbiBzKGUpe3ZhciB0O3JldHVybiB0PW4uY2FsbCh0aGlzLGUpfHx0aGlzLHQuX19vdXRzaWRlQ2xpY2tIYW5kbGVyPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Ll9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3ApcmV0dXJuIHZvaWQgdC5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wKGUpO3ZhciBuPXQuZ2V0SW5zdGFuY2UoKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi5wcm9wcy5oYW5kbGVDbGlja091dHNpZGUpcmV0dXJuIHZvaWQgbi5wcm9wcy5oYW5kbGVDbGlja091dHNpZGUoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4uaGFuZGxlQ2xpY2tPdXRzaWRlKXJldHVybiB2b2lkIG4uaGFuZGxlQ2xpY2tPdXRzaWRlKGUpO3Rocm93IG5ldyBFcnJvcigiV3JhcHBlZENvbXBvbmVudDogIit1KyIgbGFja3MgYSBoYW5kbGVDbGlja091dHNpZGUoZXZlbnQpIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzLiIpfSx0LmVuYWJsZU9uQ2xpY2tPdXRzaWRlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmIWhbdC5fdWlkXSl7dm9pZCAwPT09YyYmKGM9cCgpKSxoW3QuX3VpZF09ITA7dmFyIGU9dC5wcm9wcy5ldmVudFR5cGVzO2UuZm9yRWFjaHx8KGU9W2VdKSxtW3QuX3VpZF09ZnVuY3Rpb24oZSl7aWYobnVsbCE9PXQuY29tcG9uZW50Tm9kZSYmKHQucHJvcHMucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKSx0LnByb3BzLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSwhdC5wcm9wcy5leGNsdWRlU2Nyb2xsYmFyfHwhYShlKSkpe2koZS50YXJnZXQsdC5jb21wb25lbnROb2RlLHQucHJvcHMub3V0c2lkZUNsaWNrSWdub3JlQ2xhc3MpPT09ZG9jdW1lbnQmJnQuX19vdXRzaWRlQ2xpY2tIYW5kbGVyKGUpfX0sZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSxtW3QuX3VpZF0sbCh0LGUpKX0pfX0sdC5kaXNhYmxlT25DbGlja091dHNpZGU9ZnVuY3Rpb24oKXtkZWxldGUgaFt0Ll91aWRdO3ZhciBlPW1bdC5fdWlkXTtpZihlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgbj10LnByb3BzLmV2ZW50VHlwZXM7bi5mb3JFYWNofHwobj1bbl0pLG4uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGUsbCh0LG4pKX0pLGRlbGV0ZSBtW3QuX3VpZF19fSx0LmdldFJlZj1mdW5jdGlvbihlKXtyZXR1cm4gdC5pbnN0YW5jZVJlZj1lfSx0Ll91aWQ9ZigpLHR9cihzLG4pO3ZhciBnPXMucHJvdG90eXBlO3JldHVybiBnLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7aWYoIWUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy5pbnN0YW5jZVJlZjtyZXR1cm4gdC5nZXRJbnN0YW5jZT90LmdldEluc3RhbmNlKCk6dH0sZy5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpe3ZhciBlPXRoaXMuZ2V0SW5zdGFuY2UoKTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5oYW5kbGVDbGlja091dHNpZGUmJih0aGlzLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3A9dC5oYW5kbGVDbGlja091dHNpZGUoZSksImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCkpdGhyb3cgbmV3IEVycm9yKCJXcmFwcGVkQ29tcG9uZW50OiAiK3UrIiBsYWNrcyBhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzIHNwZWNpZmllZCBieSB0aGUgaGFuZGxlQ2xpY2tPdXRzaWRlIGNvbmZpZyBvcHRpb24uIik7dGhpcy5jb21wb25lbnROb2RlPU9iamVjdChfLmZpbmRET01Ob2RlKSh0aGlzLmdldEluc3RhbmNlKCkpLHRoaXMucHJvcHMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlfHx0aGlzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlKCl9fSxnLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuY29tcG9uZW50Tm9kZT1PYmplY3QoXy5maW5kRE9NTm9kZSkodGhpcy5nZXRJbnN0YW5jZSgpKX0sZy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlKCl9LGcucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxuPSh0LmV4Y2x1ZGVTY3JvbGxiYXIsbyh0LFsiZXhjbHVkZVNjcm9sbGJhciJdKSk7cmV0dXJuIGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ/bi5yZWY9dGhpcy5nZXRSZWY6bi53cmFwcGVkUmVmPXRoaXMuZ2V0UmVmLG4uZGlzYWJsZU9uQ2xpY2tPdXRzaWRlPXRoaXMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlLG4uZW5hYmxlT25DbGlja091dHNpZGU9dGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZSxPYmplY3QoZC5jcmVhdGVFbGVtZW50KShlLG4pfSxzfShkLkNvbXBvbmVudCksbi5kaXNwbGF5TmFtZT0iT25DbGlja091dHNpZGUoIit1KyIpIixuLmRlZmF1bHRQcm9wcz17ZXZlbnRUeXBlczpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxleGNsdWRlU2Nyb2xsYmFyOnQmJnQuZXhjbHVkZVNjcm9sbGJhcnx8ITEsb3V0c2lkZUNsaWNrSWdub3JlQ2xhc3M6YixwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITF9LG4uZ2V0Q2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRDbGFzcz9lLmdldENsYXNzKCk6ZX0sc312YXIgYyxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksXz0obi5uKGQpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpKSxwPShuLm4oXyksZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXt2YXIgZT0hMSx0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2U9ITB9fSksbj1mdW5jdGlvbigpe307cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCIsbix0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdFBhc3NpdmVFdmVudFN1cHBvcnQiLG4sdCksZX19KSxmPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxmdW5jdGlvbigpe3JldHVybisrZX19KCksbT17fSxoPXt9LGc9WyJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIl0sYj0iaWdub3JlLXJlYWN0LW9uY2xpY2tvdXRzaWRlIjt0LmE9dX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcHBlci9saWIvQXJyb3cuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz0obi5uKG8pLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSksaT1uLm4ocyksYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb21wb25lbnQscz12b2lkIDA9PT1uPyJzcGFuIjpuLGk9ZS5pbm5lclJlZixsPWUuY2hpbGRyZW4sdT1yKGUsWyJjb21wb25lbnQiLCJpbm5lclJlZiIsImNoaWxkcmVuIl0pLGM9dC5wb3BwZXIsZD1mdW5jdGlvbihlKXtjLnNldEFycm93Tm9kZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgaSYmaShlKX0sXz1jLmdldEFycm93U3R5bGUoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7cmV0dXJuIGwoe2Fycm93UHJvcHM6e3JlZjpkLHN0eWxlOl99LHJlc3RQcm9wczp1fSl9dmFyIHA9YSh7fSx1LHtzdHlsZTphKHt9LF8sdS5zdHlsZSl9KTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHM/cC5yZWY9ZDpwLmlubmVyUmVmPWQsT2JqZWN0KG8uY3JlYXRlRWxlbWVudCkocyxwLGwpfTtsLmNvbnRleHRUeXBlcz17cG9wcGVyOmkuYS5vYmplY3QuaXNSZXF1aXJlZH0sbC5wcm9wVHlwZXM9e2NvbXBvbmVudDppLmEub25lT2ZUeXBlKFtpLmEubm9kZSxpLmEuZnVuY10pLGlubmVyUmVmOmkuYS5mdW5jLGNoaWxkcmVuOmkuYS5vbmVPZlR5cGUoW2kuYS5ub2RlLGkuYS5mdW5jXSl9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9NYW5hZ2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbD0obi5uKGEpLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSksdT1uLm4obCksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsaTtvKHRoaXMsdCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShhKSx1PTA7dTxhO3UrKylsW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbj1yPXModGhpcywoZT10Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIuX3NldFRhcmdldE5vZGU9ZnVuY3Rpb24oZSl7ci5fdGFyZ2V0Tm9kZT1lfSxyLl9nZXRUYXJnZXROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX3RhcmdldE5vZGV9LGk9bixzKHIsaSl9cmV0dXJuIGkodCxlKSxjKHQsW3trZXk6ImdldENoaWxkQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57cG9wcGVyTWFuYWdlcjp7c2V0VGFyZ2V0Tm9kZTp0aGlzLl9zZXRUYXJnZXROb2RlLGdldFRhcmdldE5vZGU6dGhpcy5fZ2V0VGFyZ2V0Tm9kZX19fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnRhZyxuPWUuY2hpbGRyZW4sbz1yKGUsWyJ0YWciLCJjaGlsZHJlbiJdKTtyZXR1cm4hMSE9PXQ/T2JqZWN0KGEuY3JlYXRlRWxlbWVudCkodCxvLG4pOm59fV0pLHR9KGEuQ29tcG9uZW50KTtkLmNoaWxkQ29udGV4dFR5cGVzPXtwb3BwZXJNYW5hZ2VyOnUuYS5vYmplY3QuaXNSZXF1aXJlZH0sZC5wcm9wVHlwZXM9e3RhZzp1LmEub25lT2ZUeXBlKFt1LmEuc3RyaW5nLHUuYS5ib29sXSksY2hpbGRyZW46dS5hLm9uZU9mVHlwZShbdS5hLm5vZGUsdS5hLmZ1bmNdKX0sZC5kZWZhdWx0UHJvcHM9e3RhZzoiZGl2In0sdC5hPWR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL1BvcHBlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGw9KG4ubihhKSxuKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikpLHU9bi5uKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qcyIpLGQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxwPWMuYS5wbGFjZW1lbnRzLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixpO28odGhpcyx0KTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGEpLHU9MDt1PGE7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9cyh0aGlzLChlPXQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5zdGF0ZT17fSxyLl9zZXRBcnJvd05vZGU9ZnVuY3Rpb24oZSl7ci5fYXJyb3dOb2RlPWV9LHIuX2dldFRhcmdldE5vZGU9ZnVuY3Rpb24oKXtpZihyLnByb3BzLnRhcmdldClyZXR1cm4gci5wcm9wcy50YXJnZXQ7aWYoIXIuY29udGV4dC5wb3BwZXJNYW5hZ2VyfHwhci5jb250ZXh0LnBvcHBlck1hbmFnZXIuZ2V0VGFyZ2V0Tm9kZSgpKXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IG1pc3NpbmcuIFBvcHBlciBtdXN0IGJlIGdpdmVuIGEgdGFyZ2V0IGZyb20gdGhlIFBvcHBlciBNYW5hZ2VyLCBvciBhcyBhIHByb3AuIik7cmV0dXJuIHIuY29udGV4dC5wb3BwZXJNYW5hZ2VyLmdldFRhcmdldE5vZGUoKX0sci5fZ2V0T2Zmc2V0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZS5vZmZzZXRzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUub2Zmc2V0c1t0XX0pfSxyLl9pc0RhdGFEaXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4hci5zdGF0ZS5kYXRhfHxKU09OLnN0cmluZ2lmeShyLl9nZXRPZmZzZXRzKHIuc3RhdGUuZGF0YSkpIT09SlNPTi5zdHJpbmdpZnkoci5fZ2V0T2Zmc2V0cyhlKSl9LHIuX3VwZGF0ZVN0YXRlTW9kaWZpZXI9e2VuYWJsZWQ6ITAsb3JkZXI6OTAwLGZuOmZ1bmN0aW9uKGUpe3JldHVybiByLl9pc0RhdGFEaXJ0eShlKSYmci5zZXRTdGF0ZSh7ZGF0YTplfSksZX19LHIuX2dldFBvcHBlclN0eWxlPWZ1bmN0aW9uKCl7dmFyIGU9ci5zdGF0ZS5kYXRhO3JldHVybiByLl9wb3BwZXImJmU/ZCh7cG9zaXRpb246ZS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbn0sZS5zdHlsZXMpOntwb3NpdGlvbjoiYWJzb2x1dGUiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG9wYWNpdHk6MH19LHIuX2dldFBvcHBlclBsYWNlbWVudD1mdW5jdGlvbigpe3JldHVybiByLnN0YXRlLmRhdGE/ci5zdGF0ZS5kYXRhLnBsYWNlbWVudDp2b2lkIDB9LHIuX2dldFBvcHBlckhpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5zdGF0ZS5kYXRhJiZyLnN0YXRlLmRhdGEuaGlkZT8iIjp2b2lkIDB9LHIuX2dldEFycm93U3R5bGU9ZnVuY3Rpb24oKXtpZihyLnN0YXRlLmRhdGEmJnIuc3RhdGUuZGF0YS5vZmZzZXRzLmFycm93KXt2YXIgZT1yLnN0YXRlLmRhdGEub2Zmc2V0cy5hcnJvdztyZXR1cm57dG9wOmUudG9wLGxlZnQ6ZS5sZWZ0fX1yZXR1cm57fX0sci5faGFuZGxlUG9wcGVyUmVmPWZ1bmN0aW9uKGUpe3IuX3BvcHBlck5vZGU9ZSxlP3IuX2NyZWF0ZVBvcHBlcigpOnIuX2Rlc3Ryb3lQb3BwZXIoKSxyLnByb3BzLmlubmVyUmVmJiZyLnByb3BzLmlubmVyUmVmKGUpfSxyLl9zY2hlZHVsZVVwZGF0ZT1mdW5jdGlvbigpe3IuX3BvcHBlciYmci5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCl9LGk9bixzKHIsaSl9cmV0dXJuIGkodCxlKSxfKHQsW3trZXk6ImdldENoaWxkQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57cG9wcGVyOntzZXRBcnJvd05vZGU6dGhpcy5fc2V0QXJyb3dOb2RlLGdldEFycm93U3R5bGU6dGhpcy5fZ2V0QXJyb3dTdHlsZX19fX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtlLnBsYWNlbWVudD09PXRoaXMucHJvcHMucGxhY2VtZW50JiZlLmV2ZW50c0VuYWJsZWQ9PT10aGlzLnByb3BzLmV2ZW50c0VuYWJsZWQmJmUudGFyZ2V0PT09dGhpcy5wcm9wcy50YXJnZXR8fCh0aGlzLl9kZXN0cm95UG9wcGVyKCksdGhpcy5fY3JlYXRlUG9wcGVyKCkpLGUuY2hpbGRyZW4hPT10aGlzLnByb3BzLmNoaWxkcmVuJiZ0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveVBvcHBlcigpfX0se2tleToiX2NyZWF0ZVBvcHBlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQucGxhY2VtZW50LHI9dC5ldmVudHNFbmFibGVkLG89ZCh7fSx0aGlzLnByb3BzLm1vZGlmaWVycyx7YXBwbHlTdHlsZTp7ZW5hYmxlZDohMX0sdXBkYXRlU3RhdGU6dGhpcy5fdXBkYXRlU3RhdGVNb2RpZmllcn0pO3RoaXMuX2Fycm93Tm9kZSYmKG8uYXJyb3c9ZCh7fSx0aGlzLnByb3BzLm1vZGlmaWVycy5hcnJvd3x8e30se2VsZW1lbnQ6dGhpcy5fYXJyb3dOb2RlfSkpLHRoaXMuX3BvcHBlcj1uZXcgYy5hKHRoaXMuX2dldFRhcmdldE5vZGUoKSx0aGlzLl9wb3BwZXJOb2RlLHtwbGFjZW1lbnQ6bixldmVudHNFbmFibGVkOnIsbW9kaWZpZXJzOm99KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NjaGVkdWxlVXBkYXRlKCl9KX19LHtrZXk6Il9kZXN0cm95UG9wcGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLmRlc3Ryb3koKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jb21wb25lbnQsbj0oZS5pbm5lclJlZixlLnBsYWNlbWVudCxlLmV2ZW50c0VuYWJsZWQsZS5tb2RpZmllcnMsZS5jaGlsZHJlbiksbz1yKGUsWyJjb21wb25lbnQiLCJpbm5lclJlZiIsInBsYWNlbWVudCIsImV2ZW50c0VuYWJsZWQiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiJdKSxzPXRoaXMuX2dldFBvcHBlclN0eWxlKCksaT10aGlzLl9nZXRQb3BwZXJQbGFjZW1lbnQoKSxsPXRoaXMuX2dldFBvcHBlckhpZGUoKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7cmV0dXJuIG4oe3BvcHBlclByb3BzOntyZWY6dGhpcy5faGFuZGxlUG9wcGVyUmVmLHN0eWxlOnMsImRhdGEtcGxhY2VtZW50IjppLCJkYXRhLXgtb3V0LW9mLWJvdW5kYXJpZXMiOmx9LHJlc3RQcm9wczpvLHNjaGVkdWxlVXBkYXRlOnRoaXMuX3NjaGVkdWxlVXBkYXRlfSl9dmFyIHU9ZCh7fSxvLHtzdHlsZTpkKHt9LG8uc3R5bGUscyksImRhdGEtcGxhY2VtZW50IjppLCJkYXRhLXgtb3V0LW9mLWJvdW5kYXJpZXMiOmx9KTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dS5yZWY9dGhpcy5faGFuZGxlUG9wcGVyUmVmOnUuaW5uZXJSZWY9dGhpcy5faGFuZGxlUG9wcGVyUmVmLE9iamVjdChhLmNyZWF0ZUVsZW1lbnQpKHQsdSxuKX19XSksdH0oYS5Db21wb25lbnQpO2YuY29udGV4dFR5cGVzPXtwb3BwZXJNYW5hZ2VyOnUuYS5vYmplY3R9LGYuY2hpbGRDb250ZXh0VHlwZXM9e3BvcHBlcjp1LmEub2JqZWN0LmlzUmVxdWlyZWR9LGYucHJvcFR5cGVzPXtjb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLm5vZGUsdS5hLmZ1bmNdKSxpbm5lclJlZjp1LmEuZnVuYyxwbGFjZW1lbnQ6dS5hLm9uZU9mKHApLGV2ZW50c0VuYWJsZWQ6dS5hLmJvb2wsbW9kaWZpZXJzOnUuYS5vYmplY3QsY2hpbGRyZW46dS5hLm9uZU9mVHlwZShbdS5hLm5vZGUsdS5hLmZ1bmNdKSx0YXJnZXQ6dS5hLm9uZU9mVHlwZShbdS5hLmluc3RhbmNlT2YoInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50P0VsZW1lbnQ6T2JqZWN0KSx1LmEuc2hhcGUoe2dldEJvdW5kaW5nQ2xpZW50UmVjdDp1LmEuZnVuYy5pc1JlcXVpcmVkLGNsaWVudFdpZHRoOnUuYS5udW1iZXIuaXNSZXF1aXJlZCxjbGllbnRIZWlnaHQ6dS5hLm51bWJlci5pc1JlcXVpcmVkfSldKX0sZi5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoiZGl2IixwbGFjZW1lbnQ6ImJvdHRvbSIsZXZlbnRzRW5hYmxlZDohMCxtb2RpZmllcnM6e319LHQuYT1mfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9UYXJnZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz0obi5uKG8pLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSksaT1uLm4ocyksYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb21wb25lbnQscz12b2lkIDA9PT1uPyJkaXYiOm4saT1lLmlubmVyUmVmLGw9ZS5jaGlsZHJlbix1PXIoZSxbImNvbXBvbmVudCIsImlubmVyUmVmIiwiY2hpbGRyZW4iXSksYz10LnBvcHBlck1hbmFnZXIsZD1mdW5jdGlvbihlKXtjLnNldFRhcmdldE5vZGUoZSksImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkoZSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXtyZXR1cm4gbCh7dGFyZ2V0UHJvcHM6e3JlZjpkfSxyZXN0UHJvcHM6dX0pfXZhciBfPWEoe30sdSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzP18ucmVmPWQ6Xy5pbm5lclJlZj1kLE9iamVjdChvLmNyZWF0ZUVsZW1lbnQpKHMsXyxsKX07bC5jb250ZXh0VHlwZXM9e3BvcHBlck1hbmFnZXI6aS5hLm9iamVjdC5pc1JlcXVpcmVkfSxsLnByb3BUeXBlcz17Y29tcG9uZW50OmkuYS5vbmVPZlR5cGUoW2kuYS5ub2RlLGkuYS5mdW5jXSksaW5uZXJSZWY6aS5hLmZ1bmMsY2hpbGRyZW46aS5hLm9uZU9mVHlwZShbaS5hLm5vZGUsaS5hLmZ1bmNdKX0sdC5hPWx9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL3JlYWN0LXBvcHBlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL01hbmFnZXIuanMiKTtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9UYXJnZXQuanMiKTtuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9Qb3BwZXIuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSk7bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9BcnJvdy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9Qcm92aWRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIGkoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToic3RvcmUiLG49YXJndW1lbnRzWzFdLGk9bnx8dCsiU3Vic2NyaXB0aW9uIixsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocyxpKXtyKHRoaXMsbik7dmFyIGE9byh0aGlzLGUuY2FsbCh0aGlzLHMsaSkpO3JldHVybiBhW3RdPXMuc3RvcmUsYX1yZXR1cm4gcyhuLGUpLG4ucHJvdG90eXBlLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXt9LGVbdF09dGhpc1t0XSxlW2ldPW51bGwsZX0sbi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKX0sbn0oYS5Db21wb25lbnQpO3JldHVybiBsLnByb3BUeXBlcz17c3RvcmU6Yy5hLmlzUmVxdWlyZWQsY2hpbGRyZW46dS5hLmVsZW1lbnQuaXNSZXF1aXJlZH0sbC5jaGlsZENvbnRleHRUeXBlcz0oZT17fSxlW3RdPWMuYS5pc1JlcXVpcmVkLGVbaV09Yy5iLGUpLGx9dC5hPWk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxsPShuLm4oYSksbigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpKSx1PW4ubihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3dhcm5pbmcuanMiKTt0LmI9aSgpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29tcG9uZW50cy9jb25uZWN0QWR2YW5jZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gYSgpe31mdW5jdGlvbiBsKGUsdCl7dmFyIG49e3J1bjpmdW5jdGlvbihyKXt0cnl7dmFyIG89ZSh0LmdldFN0YXRlKCkscik7KG8hPT1uLnByb3BzfHxuLmVycm9yKSYmKG4uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEwLG4ucHJvcHM9byxuLmVycm9yPW51bGwpfWNhdGNoKGUpe24uc2hvdWxkQ29tcG9uZW50VXBkYXRlPSEwLG4uZXJyb3I9ZX19fTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUpe3ZhciB0LG4sdT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sYz11LmdldERpc3BsYXlOYW1lLF89dm9pZCAwPT09Yz9mdW5jdGlvbihlKXtyZXR1cm4iQ29ubmVjdEFkdmFuY2VkKCIrZSsiKSJ9OmMseT11Lm1ldGhvZE5hbWUsdj12b2lkIDA9PT15PyJjb25uZWN0QWR2YW5jZWQiOnksVD11LnJlbmRlckNvdW50UHJvcCxBPXZvaWQgMD09PVQ/dm9pZCAwOlQsQz11LnNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxPPXZvaWQgMD09PUN8fEMsUz11LnN0b3JlS2V5LFI9dm9pZCAwPT09Uz8ic3RvcmUiOlMsaj11LndpdGhSZWYseD12b2lkIDAhPT1qJiZqLEw9aSh1LFsiZ2V0RGlzcGxheU5hbWUiLCJtZXRob2ROYW1lIiwicmVuZGVyQ291bnRQcm9wIiwic2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzIiwic3RvcmVLZXkiLCJ3aXRoUmVmIl0pLEQ9UisiU3Vic2NyaXB0aW9uIix3PWIrKyxNPSh0PXt9LHRbUl09aC5hLHRbRF09aC5iLHQpLGs9KG49e30sbltEXT1oLmIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3AoKSgiZnVuY3Rpb24iPT10eXBlb2YgdCwiWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgIit2KyIuIEluc3RlYWQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSk7dmFyIG49dC5kaXNwbGF5TmFtZXx8dC5uYW1lfHwiQ29tcG9uZW50IixpPV8obiksdT1nKHt9LEwse2dldERpc3BsYXlOYW1lOl8sbWV0aG9kTmFtZTp2LHJlbmRlckNvdW50UHJvcDpBLHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczpPLHN0b3JlS2V5OlIsd2l0aFJlZjp4LGRpc3BsYXlOYW1lOmksd3JhcHBlZENvbXBvbmVudE5hbWU6bixXcmFwcGVkQ29tcG9uZW50OnR9KSxjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGMoZSx0KXtyKHRoaXMsYyk7dmFyIHM9byh0aGlzLG4uY2FsbCh0aGlzLGUsdCkpO3JldHVybiBzLnZlcnNpb249dyxzLnN0YXRlPXt9LHMucmVuZGVyQ291bnQ9MCxzLnN0b3JlPWVbUl18fHRbUl0scy5wcm9wc01vZGU9Qm9vbGVhbihlW1JdKSxzLnNldFdyYXBwZWRJbnN0YW5jZT1zLnNldFdyYXBwZWRJbnN0YW5jZS5iaW5kKHMpLHAoKShzLnN0b3JlLCdDb3VsZCBub3QgZmluZCAiJytSKyciIGluIGVpdGhlciB0aGUgY29udGV4dCBvciBwcm9wcyBvZiAiJytpKyciLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCBvciBleHBsaWNpdGx5IHBhc3MgIicrUisnIiBhcyBhIHByb3AgdG8gIicraSsnIi4nKSxzLmluaXRTZWxlY3RvcigpLHMuaW5pdFN1YnNjcmlwdGlvbigpLHN9cmV0dXJuIHMoYyxuKSxjLnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMucHJvcHNNb2RlP251bGw6dGhpcy5zdWJzY3JpcHRpb247cmV0dXJuIGU9e30sZVtEXT10fHx0aGlzLmNvbnRleHRbRF0sZX0sYy5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXtPJiYodGhpcy5zdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCksdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyksdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUmJnRoaXMuZm9yY2VVcGRhdGUoKSl9LGMucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3Rvci5ydW4oZSl9LGMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZX0sYy5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKSx0aGlzLnN1YnNjcmlwdGlvbj1udWxsLHRoaXMubm90aWZ5TmVzdGVkU3Vicz1hLHRoaXMuc3RvcmU9bnVsbCx0aGlzLnNlbGVjdG9yLnJ1bj1hLHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlPSExfSxjLnByb3RvdHlwZS5nZXRXcmFwcGVkSW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcCgpKHgsIlRvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB7IHdpdGhSZWY6IHRydWUgfSBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBvZiB0aGUgIit2KyIoKSBjYWxsLiIpLHRoaXMud3JhcHBlZEluc3RhbmNlfSxjLnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2U9ZnVuY3Rpb24oZSl7dGhpcy53cmFwcGVkSW5zdGFuY2U9ZX0sYy5wcm90b3R5cGUuaW5pdFNlbGVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzLnN0b3JlLmRpc3BhdGNoLHUpO3RoaXMuc2VsZWN0b3I9bCh0LHRoaXMuc3RvcmUpLHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpfSxjLnByb3RvdHlwZS5pbml0U3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7aWYoTyl7dmFyIGU9KHRoaXMucHJvcHNNb2RlP3RoaXMucHJvcHM6dGhpcy5jb250ZXh0KVtEXTt0aGlzLnN1YnNjcmlwdGlvbj1uZXcgbS5hKHRoaXMuc3RvcmUsZSx0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSksdGhpcy5ub3RpZnlOZXN0ZWRTdWJzPXRoaXMuc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZCh0aGlzLnN1YnNjcmlwdGlvbil9fSxjLnByb3RvdHlwZS5vblN0YXRlQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyksdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU/KHRoaXMuY29tcG9uZW50RGlkVXBkYXRlPXRoaXMubm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlLHRoaXMuc2V0U3RhdGUoRSkpOnRoaXMubm90aWZ5TmVzdGVkU3VicygpfSxjLnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvbmVudERpZFVwZGF0ZT12b2lkIDAsdGhpcy5ub3RpZnlOZXN0ZWRTdWJzKCl9LGMucHJvdG90eXBlLmlzU3Vic2NyaWJlZD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuc3Vic2NyaXB0aW9uKSYmdGhpcy5zdWJzY3JpcHRpb24uaXNTdWJzY3JpYmVkKCl9LGMucHJvdG90eXBlLmFkZEV4dHJhUHJvcHM9ZnVuY3Rpb24oZSl7aWYoISh4fHxBfHx0aGlzLnByb3BzTW9kZSYmdGhpcy5zdWJzY3JpcHRpb24pKXJldHVybiBlO3ZhciB0PWcoe30sZSk7cmV0dXJuIHgmJih0LnJlZj10aGlzLnNldFdyYXBwZWRJbnN0YW5jZSksQSYmKHRbQV09dGhpcy5yZW5kZXJDb3VudCsrKSx0aGlzLnByb3BzTW9kZSYmdGhpcy5zdWJzY3JpcHRpb24mJih0W0RdPXRoaXMuc3Vic2NyaXB0aW9uKSx0fSxjLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdG9yO2lmKGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPSExLGUuZXJyb3IpdGhyb3cgZS5lcnJvcjtyZXR1cm4gT2JqZWN0KGYuY3JlYXRlRWxlbWVudCkodCx0aGlzLmFkZEV4dHJhUHJvcHMoZS5wcm9wcykpfSxjfShmLkNvbXBvbmVudCk7cmV0dXJuIGMuV3JhcHBlZENvbXBvbmVudD10LGMuZGlzcGxheU5hbWU9aSxjLmNoaWxkQ29udGV4dFR5cGVzPWssYy5jb250ZXh0VHlwZXM9TSxjLnByb3BUeXBlcz1NLGQoKShjLHQpfX10LmE9dTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIpLGQ9bi5uKGMpLF89bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSxwPW4ubihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbT0obi5uKGYpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlwdGlvbi5qcyIpKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyIpLGc9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYj0wLEU9e319LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L2Nvbm5lY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0LG4pe2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbz10W3JdKGUpO2lmKG8pcmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKHQscil7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgIit0eXBlb2YgZSsiIGZvciAiK24rIiBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICIrci53cmFwcGVkQ29tcG9uZW50TmFtZSsiLiIpfX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGU9PT10fXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9zaGFsbG93RXF1YWwuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeS5qcyIpLF89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dC5hPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5jb25uZWN0SE9DLG49dm9pZCAwPT09dD9pLmE6dCxwPWUubWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLGY9dm9pZCAwPT09cD91LmE6cCxtPWUubWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLGg9dm9pZCAwPT09bT9sLmE6bSxnPWUubWVyZ2VQcm9wc0ZhY3RvcmllcyxiPXZvaWQgMD09PWc/Yy5hOmcsRT1lLnNlbGVjdG9yRmFjdG9yeSx5PXZvaWQgMD09PUU/ZC5hOkU7cmV0dXJuIGZ1bmN0aW9uKGUsdCxpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e30sdT1sLnB1cmUsYz12b2lkIDA9PT11fHx1LGQ9bC5hcmVTdGF0ZXNFcXVhbCxwPXZvaWQgMD09PWQ/czpkLG09bC5hcmVPd25Qcm9wc0VxdWFsLGc9dm9pZCAwPT09bT9hLmE6bSxFPWwuYXJlU3RhdGVQcm9wc0VxdWFsLHY9dm9pZCAwPT09RT9hLmE6RSxUPWwuYXJlTWVyZ2VkUHJvcHNFcXVhbCxBPXZvaWQgMD09PVQ/YS5hOlQsQz1yKGwsWyJwdXJlIiwiYXJlU3RhdGVzRXF1YWwiLCJhcmVPd25Qcm9wc0VxdWFsIiwiYXJlU3RhdGVQcm9wc0VxdWFsIiwiYXJlTWVyZ2VkUHJvcHNFcXVhbCJdKSxPPW8oZSxmLCJtYXBTdGF0ZVRvUHJvcHMiKSxTPW8odCxoLCJtYXBEaXNwYXRjaFRvUHJvcHMiKSxSPW8oaSxiLCJtZXJnZVByb3BzIik7cmV0dXJuIG4oeSxfKHttZXRob2ROYW1lOiJjb25uZWN0IixnZXREaXNwbGF5TmFtZTpmdW5jdGlvbihlKXtyZXR1cm4iQ29ubmVjdCgiK2UrIikifSxzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6Qm9vbGVhbihlKSxpbml0TWFwU3RhdGVUb1Byb3BzOk8saW5pdE1hcERpc3BhdGNoVG9Qcm9wczpTLGluaXRNZXJnZVByb3BzOlIscHVyZTpjLGFyZVN0YXRlc0VxdWFsOnAsYXJlT3duUHJvcHNFcXVhbDpnLGFyZVN0YXRlUHJvcHNFcXVhbDp2LGFyZU1lcmdlZFByb3BzRXF1YWw6QX0sQykpfX0oKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/T2JqZWN0KGEuYikoZSwibWFwRGlzcGF0Y2hUb1Byb3BzIik6dm9pZCAwfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/dm9pZCAwOk9iamVjdChhLmEpKGZ1bmN0aW9uKGUpe3JldHVybntkaXNwYXRjaDplfX0pfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZT9PYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGkuYmluZEFjdGlvbkNyZWF0b3JzKShlLHQpfSk6dm9pZCAwfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3dyYXBNYXBUb1Byb3BzLmpzIik7dC5hPVtyLG8sc119LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP09iamVjdChzLmIpKGUsIm1hcFN0YXRlVG9Qcm9wcyIpOnZvaWQgMH1mdW5jdGlvbiBvKGUpe3JldHVybiBlP3ZvaWQgMDpPYmplY3Qocy5hKShmdW5jdGlvbigpe3JldHVybnt9fSl9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC93cmFwTWFwVG9Qcm9wcy5qcyIpO3QuYT1bcixvXX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gYSh7fSxuLGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj0obi5kaXNwbGF5TmFtZSxuLnB1cmUpLG89bi5hcmVNZXJnZWRQcm9wc0VxdWFsLHM9ITEsaT12b2lkIDA7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgbD1lKHQsbixhKTtyZXR1cm4gcz9yJiZvKGwsaSl8fChpPWwpOihzPSEwLGk9bCksaX19fWZ1bmN0aW9uIHMoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/byhlKTp2b2lkIDB9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gcn19dmFyIGE9KG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0LmpzIiksT2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0pO3QuYT1bcyxpXX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbihvLHMpe3JldHVybiBuKGUobyxzKSx0KHIscykscyl9fWZ1bmN0aW9uIHMoZSx0LG4scixvKXtmdW5jdGlvbiBzKG8scyl7cmV0dXJuIGY9byxtPXMsaD1lKGYsbSksZz10KHIsbSksYj1uKGgsZyxtKSxwPSEwLGJ9ZnVuY3Rpb24gaSgpe3JldHVybiBoPWUoZixtKSx0LmRlcGVuZHNPbk93blByb3BzJiYoZz10KHIsbSkpLGI9bihoLGcsbSl9ZnVuY3Rpb24gYSgpe3JldHVybiBlLmRlcGVuZHNPbk93blByb3BzJiYoaD1lKGYsbSkpLHQuZGVwZW5kc09uT3duUHJvcHMmJihnPXQocixtKSksYj1uKGgsZyxtKX1mdW5jdGlvbiBsKCl7dmFyIHQ9ZShmLG0pLHI9IV8odCxoKTtyZXR1cm4gaD10LHImJihiPW4oaCxnLG0pKSxifWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj0hZCh0LG0pLHI9IWMoZSxmKTtyZXR1cm4gZj1lLG09dCxuJiZyP2koKTpuP2EoKTpyP2woKTpifXZhciBjPW8uYXJlU3RhdGVzRXF1YWwsZD1vLmFyZU93blByb3BzRXF1YWwsXz1vLmFyZVN0YXRlUHJvcHNFcXVhbCxwPSExLGY9dm9pZCAwLG09dm9pZCAwLGg9dm9pZCAwLGc9dm9pZCAwLGI9dm9pZCAwO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBwP3UoZSx0KTpzKGUsdCl9fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj10LmluaXRNYXBTdGF0ZVRvUHJvcHMsaT10LmluaXRNYXBEaXNwYXRjaFRvUHJvcHMsYT10LmluaXRNZXJnZVByb3BzLGw9cih0LFsiaW5pdE1hcFN0YXRlVG9Qcm9wcyIsImluaXRNYXBEaXNwYXRjaFRvUHJvcHMiLCJpbml0TWVyZ2VQcm9wcyJdKSx1PW4oZSxsKSxjPWkoZSxsKSxkPWEoZSxsKTtyZXR1cm4obC5wdXJlP3M6bykodSxjLGQsZSxsKX10LmE9aTtuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC92ZXJpZnlTdWJzZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC93cmFwTWFwVG9Qcm9wcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gb312YXIgbz1lKHQsbik7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM9ITEscn19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9PWUuZGVwZW5kc09uT3duUHJvcHMmJnZvaWQgMCE9PWUuZGVwZW5kc09uT3duUHJvcHM/Qm9vbGVhbihlLmRlcGVuZHNPbk93blByb3BzKToxIT09ZS5sZW5ndGh9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPShuLmRpc3BsYXlOYW1lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM/ci5tYXBUb1Byb3BzKGUsdCk6ci5tYXBUb1Byb3BzKGUpfSk7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM9ITAsci5tYXBUb1Byb3BzPWZ1bmN0aW9uKHQsbil7ci5tYXBUb1Byb3BzPWUsci5kZXBlbmRzT25Pd25Qcm9wcz1vKGUpO3ZhciBzPXIodCxuKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcyYmKHIubWFwVG9Qcm9wcz1zLHIuZGVwZW5kc09uT3duUHJvcHM9byhzKSxzPXIodCxuKSksc30scn19dC5hPXIsdC5iPXM7bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdmVyaWZ5UGxhaW5PYmplY3QuanMiKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9jb25uZWN0LmpzIik7bi5kKHQsIlByb3ZpZGVyIixmdW5jdGlvbigpe3JldHVybiByLmJ9KSxuLmQodCwiY3JlYXRlUHJvdmlkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJjb25uZWN0QWR2YW5jZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJjb25uZWN0IixmdW5jdGlvbigpe3JldHVybiBzLmF9KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLG89bi5uKHIpLHM9by5hLnNoYXBlKHt0cnlTdWJzY3JpYmU6by5hLmZ1bmMuaXNSZXF1aXJlZCx0cnlVbnN1YnNjcmliZTpvLmEuZnVuYy5pc1JlcXVpcmVkLG5vdGlmeU5lc3RlZFN1YnM6by5hLmZ1bmMuaXNSZXF1aXJlZCxpc1N1YnNjcmliZWQ6by5hLmZ1bmMuaXNSZXF1aXJlZH0pLGk9by5hLnNoYXBlKHtzdWJzY3JpYmU6by5hLmZ1bmMuaXNSZXF1aXJlZCxkaXNwYXRjaDpvLmEuZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRlOm8uYS5mdW5jLmlzUmVxdWlyZWR9KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlwdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbygpe3ZhciBlPVtdLHQ9W107cmV0dXJue2NsZWFyOmZ1bmN0aW9uKCl7dD1zLGU9c30sbm90aWZ5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPWU9dCxyPTA7cjxuLmxlbmd0aDtyKyspbltyXSgpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc3Vic2NyaWJlOmZ1bmN0aW9uKG4pe3ZhciByPSEwO3JldHVybiB0PT09ZSYmKHQ9ZS5zbGljZSgpKSx0LnB1c2gobiksZnVuY3Rpb24oKXtyJiZlIT09cyYmKHI9ITEsdD09PWUmJih0PWUuc2xpY2UoKSksdC5zcGxpY2UodC5pbmRleE9mKG4pLDEpKX19fX1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBzPW51bGwsaT17bm90aWZ5OmZ1bmN0aW9uKCl7fX0sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLG8pe3IodGhpcyxlKSx0aGlzLnN0b3JlPXQsdGhpcy5wYXJlbnRTdWI9bix0aGlzLm9uU3RhdGVDaGFuZ2U9byx0aGlzLnVuc3Vic2NyaWJlPW51bGwsdGhpcy5saXN0ZW5lcnM9aX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkTmVzdGVkU3ViPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyeVN1YnNjcmliZSgpLHRoaXMubGlzdGVuZXJzLnN1YnNjcmliZShlKX0sZS5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3Vicz1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzLm5vdGlmeSgpfSxlLnByb3RvdHlwZS5pc1N1YnNjcmliZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKX0sZS5wcm90b3R5cGUudHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy51bnN1YnNjcmliZXx8KHRoaXMudW5zdWJzY3JpYmU9dGhpcy5wYXJlbnRTdWI/dGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSk6dGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKSx0aGlzLmxpc3RlbmVycz1vKCkpfSxlLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMudW5zdWJzY3JpYmUmJih0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy51bnN1YnNjcmliZT1udWxsLHRoaXMubGlzdGVuZXJzLmNsZWFyKCksdGhpcy5saXN0ZW5lcnM9aSl9LGV9KCl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9zaGFsbG93RXF1YWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MCE9PXR8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUsdCl7aWYocihlLHQpKXJldHVybiEwO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbz1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKCFzLmNhbGwodCxuW2ldKXx8IXIoZVtuW2ldXSx0W25baV1dKSlyZXR1cm4hMTtyZXR1cm4hMH10LmE9bzt2YXIgcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdmVyaWZ5UGxhaW5PYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy93YXJuaW5nLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy93YXJuaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihlKTt0cnl7dGhyb3cgbmV3IEVycm9yKGUpfWNhdGNoKGUpe319dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNpemFibGUvYnVpbGQvUmVzaXphYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMDt2YXIgbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRyYWdnYWJsZS9kaXN0L3JlYWN0LWRyYWdnYWJsZS5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzaXphYmxlL2J1aWxkL2Nsb25lRWxlbWVudC5qcyIpLG09cihmKSxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyLG87cyh0aGlzLHQpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoYSksdT0wO3U8YTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj1pKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIuc3RhdGU9e3Jlc2l6aW5nOiExLHdpZHRoOnIucHJvcHMud2lkdGgsaGVpZ2h0OnIucHJvcHMuaGVpZ2h0LHNsYWNrVzowLHNsYWNrSDowfSxvPW4saShyLG8pfXJldHVybiBhKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt0aGlzLnN0YXRlLnJlc2l6aW5nfHxlLndpZHRoPT09dGhpcy5wcm9wcy53aWR0aCYmZS5oZWlnaHQ9PT10aGlzLnByb3BzLmhlaWdodHx8dGhpcy5zZXRTdGF0ZSh7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KX0sdC5wcm90b3R5cGUubG9ja0FzcGVjdFJhdGlvPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1lL24sZT10Km4sW2UsdF19LHQucHJvdG90eXBlLnJ1bkNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49W3RoaXMucHJvcHMubWluQ29uc3RyYWludHMsdGhpcy5wcm9wcy5tYXhDb25zdHJhaW50c10scj1uWzBdLG89blsxXTtpZih0aGlzLnByb3BzLmxvY2tBc3BlY3RSYXRpbyl7dmFyIHM9dGhpcy5zdGF0ZS53aWR0aC90aGlzLnN0YXRlLmhlaWdodDt0PWUvcyxlPXQqc31pZighciYmIW8pcmV0dXJuW2UsdF07dmFyIGk9ZSxhPXQsbD10aGlzLnN0YXRlLHU9bC5zbGFja1csYz1sLnNsYWNrSDtyZXR1cm4gZSs9dSx0Kz1jLHImJihlPU1hdGgubWF4KHJbMF0sZSksdD1NYXRoLm1heChyWzFdLHQpKSxvJiYoZT1NYXRoLm1pbihvWzBdLGUpLHQ9TWF0aC5taW4ob1sxXSx0KSksdSs9aS1lLGMrPWEtdCx1PT09dGhpcy5zdGF0ZS5zbGFja1cmJmM9PT10aGlzLnN0YXRlLnNsYWNrSHx8dGhpcy5zZXRTdGF0ZSh7c2xhY2tXOnUsc2xhY2tIOmN9KSxbZSx0XX0sdC5wcm90b3R5cGUucmVzaXplSGFuZGxlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIubm9kZSxzPXIuZGVsdGFYLGk9ci5kZWx0YVksYT0iYm90aCI9PT10LnByb3BzLmF4aXN8fCJ4Ij09PXQucHJvcHMuYXhpcyxsPSJib3RoIj09PXQucHJvcHMuYXhpc3x8InkiPT09dC5wcm9wcy5heGlzLHU9dC5zdGF0ZS53aWR0aCsoYT9zOjApLGM9dC5zdGF0ZS5oZWlnaHQrKGw/aTowKSxkPXUhPT10LnN0YXRlLndpZHRoLF89YyE9PXQuc3RhdGUuaGVpZ2h0O2lmKCJvblJlc2l6ZSIhPT1lfHxkfHxfKXt2YXIgcD10LnJ1bkNvbnN0cmFpbnRzKHUsYyk7dT1wWzBdLGM9cFsxXTt2YXIgZj17fTtpZigib25SZXNpemVTdGFydCI9PT1lKWYucmVzaXppbmc9ITA7ZWxzZSBpZigib25SZXNpemVTdG9wIj09PWUpZi5yZXNpemluZz0hMSxmLnNsYWNrVz1mLnNsYWNrSD0wO2Vsc2V7aWYodT09PXQuc3RhdGUud2lkdGgmJmM9PT10LnN0YXRlLmhlaWdodClyZXR1cm47Zi53aWR0aD11LGYuaGVpZ2h0PWN9ImZ1bmN0aW9uIj09dHlwZW9mIHQucHJvcHNbZV0/KCJmdW5jdGlvbiI9PXR5cGVvZiBuLnBlcnNpc3QmJm4ucGVyc2lzdCgpLHQuc2V0U3RhdGUoZixmdW5jdGlvbigpe3JldHVybiB0LnByb3BzW2VdKG4se25vZGU6byxzaXplOnt3aWR0aDp1LGhlaWdodDpjfX0pfSkpOnQuc2V0U3RhdGUoZil9fX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLmRyYWdnYWJsZU9wdHMscj0oZS53aWR0aCxlLmhlaWdodCxlLmhhbmRsZVNpemUsZS5sb2NrQXNwZWN0UmF0aW8sZS5heGlzLGUubWluQ29uc3RyYWludHMsZS5tYXhDb25zdHJhaW50cyxlLm9uUmVzaXplLGUub25SZXNpemVTdG9wLGUub25SZXNpemVTdGFydCxvKGUsWyJjaGlsZHJlbiIsImRyYWdnYWJsZU9wdHMiLCJ3aWR0aCIsImhlaWdodCIsImhhbmRsZVNpemUiLCJsb2NrQXNwZWN0UmF0aW8iLCJheGlzIiwibWluQ29uc3RyYWludHMiLCJtYXhDb25zdHJhaW50cyIsIm9uUmVzaXplIiwib25SZXNpemVTdG9wIiwib25SZXNpemVTdGFydCJdKSkscz1yLmNsYXNzTmFtZT9yLmNsYXNzTmFtZSsiIHJlYWN0LXJlc2l6YWJsZSI6InJlYWN0LXJlc2l6YWJsZSI7cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGwoe30scix7Y2xhc3NOYW1lOnMsY2hpbGRyZW46W3QucHJvcHMuY2hpbGRyZW4sYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocC5EcmFnZ2FibGVDb3JlLGwoe30sbix7a2V5OiJyZXNpemFibGVIYW5kbGUiLG9uU3RvcDp0aGlzLnJlc2l6ZUhhbmRsZXIoIm9uUmVzaXplU3RvcCIpLG9uU3RhcnQ6dGhpcy5yZXNpemVIYW5kbGVyKCJvblJlc2l6ZVN0YXJ0Iiksb25EcmFnOnRoaXMucmVzaXplSGFuZGxlcigib25SZXNpemUiKX0pLGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJyZWFjdC1yZXNpemFibGUtaGFuZGxlIn0pKV19KSl9LHR9KGMuZGVmYXVsdC5Db21wb25lbnQpO2gucHJvcFR5cGVzPXtjaGlsZHJlbjpfLmRlZmF1bHQuZWxlbWVudC5pc1JlcXVpcmVkLHdpZHRoOl8uZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxoZWlnaHQ6Xy5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLGhhbmRsZVNpemU6Xy5kZWZhdWx0LmFycmF5LGxvY2tBc3BlY3RSYXRpbzpfLmRlZmF1bHQuYm9vbCxheGlzOl8uZGVmYXVsdC5vbmVPZihbImJvdGgiLCJ4IiwieSIsIm5vbmUiXSksbWluQ29uc3RyYWludHM6Xy5kZWZhdWx0LmFycmF5T2YoXy5kZWZhdWx0Lm51bWJlciksbWF4Q29uc3RyYWludHM6Xy5kZWZhdWx0LmFycmF5T2YoXy5kZWZhdWx0Lm51bWJlciksb25SZXNpemVTdG9wOl8uZGVmYXVsdC5mdW5jLG9uUmVzaXplU3RhcnQ6Xy5kZWZhdWx0LmZ1bmMsb25SZXNpemU6Xy5kZWZhdWx0LmZ1bmMsZHJhZ2dhYmxlT3B0czpfLmRlZmF1bHQub2JqZWN0fSxoLmRlZmF1bHRQcm9wcz17aGFuZGxlU2l6ZTpbMjAsMjBdLGxvY2tBc3BlY3RSYXRpbzohMSxheGlzOiJib3RoIixtaW5Db25zdHJhaW50czpbMjAsMjBdLG1heENvbnN0cmFpbnRzOlsxLzAsMS8wXX0sdC5kZWZhdWx0PWh9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNpemFibGUvYnVpbGQvUmVzaXphYmxlQm94LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMDt2YXIgbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc2l6YWJsZS9idWlsZC9SZXNpemFibGUuanMiKSxmPXIocCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scixvO3ModGhpcyx0KTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGEpLHU9MDt1PGE7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9aSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLnN0YXRlPXt3aWR0aDpyLnByb3BzLndpZHRoLGhlaWdodDpyLnByb3BzLmhlaWdodH0sci5vblJlc2l6ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc2l6ZTtuLndpZHRoLG4uaGVpZ2h0O3IucHJvcHMub25SZXNpemU/KGUucGVyc2lzdCYmZS5wZXJzaXN0KCksci5zZXRTdGF0ZShuLGZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMub25SZXNpemUmJnIucHJvcHMub25SZXNpemUoZSx0KX0pKTpyLnNldFN0YXRlKG4pfSxvPW4saShyLG8pfXJldHVybiBhKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtlLndpZHRoPT09dGhpcy5wcm9wcy53aWR0aCYmZS5oZWlnaHQ9PT10aGlzLnByb3BzLmhlaWdodHx8dGhpcy5zZXRTdGF0ZSh7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaGFuZGxlU2l6ZSxuPShlLm9uUmVzaXplLGUub25SZXNpemVTdGFydCkscj1lLm9uUmVzaXplU3RvcCxzPWUuZHJhZ2dhYmxlT3B0cyxpPWUubWluQ29uc3RyYWludHMsYT1lLm1heENvbnN0cmFpbnRzLHU9ZS5sb2NrQXNwZWN0UmF0aW8sZD1lLmF4aXMsXz0oZS53aWR0aCxlLmhlaWdodCxvKGUsWyJoYW5kbGVTaXplIiwib25SZXNpemUiLCJvblJlc2l6ZVN0YXJ0Iiwib25SZXNpemVTdG9wIiwiZHJhZ2dhYmxlT3B0cyIsIm1pbkNvbnN0cmFpbnRzIiwibWF4Q29uc3RyYWludHMiLCJsb2NrQXNwZWN0UmF0aW8iLCJheGlzIiwid2lkdGgiLCJoZWlnaHQiXSkpO3JldHVybiBjLmRlZmF1bHQuY3JlYXRlRWxlbWVudChmLmRlZmF1bHQse2hhbmRsZVNpemU6dCx3aWR0aDp0aGlzLnN0YXRlLndpZHRoLGhlaWdodDp0aGlzLnN0YXRlLmhlaWdodCxvblJlc2l6ZVN0YXJ0Om4sb25SZXNpemU6dGhpcy5vblJlc2l6ZSxvblJlc2l6ZVN0b3A6cixkcmFnZ2FibGVPcHRzOnMsbWluQ29uc3RyYWludHM6aSxtYXhDb25zdHJhaW50czphLGxvY2tBc3BlY3RSYXRpbzp1LGF4aXM6ZH0sYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbCh7c3R5bGU6e3dpZHRoOnRoaXMuc3RhdGUud2lkdGgrInB4IixoZWlnaHQ6dGhpcy5zdGF0ZS5oZWlnaHQrInB4In19LF8pKSl9LHR9KGMuZGVmYXVsdC5Db21wb25lbnQpO20ucHJvcFR5cGVzPXtoZWlnaHQ6Xy5kZWZhdWx0Lm51bWJlcix3aWR0aDpfLmRlZmF1bHQubnVtYmVyfSxtLmRlZmF1bHRQcm9wcz17aGFuZGxlU2l6ZTpbMjAsMjBdfSx0LmRlZmF1bHQ9bX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc2l6YWJsZS9idWlsZC9jbG9uZUVsZW1lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5zdHlsZSYmZS5wcm9wcy5zdHlsZSYmKHQuc3R5bGU9cih7fSxlLnByb3BzLnN0eWxlLHQuc3R5bGUpKSx0LmNsYXNzTmFtZSYmZS5wcm9wcy5jbGFzc05hbWUmJih0LmNsYXNzTmFtZT1lLnByb3BzLmNsYXNzTmFtZSsiICIrdC5jbGFzc05hbWUpLHMuZGVmYXVsdC5jbG9uZUVsZW1lbnQoZSx0KX19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNpemFibGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJEb24ndCBpbnN0YW50aWF0ZSBSZXNpemFibGUgZGlyZWN0bHkhIFVzZSByZXF1aXJlKCdyZWFjdC1yZXNpemFibGUnKS5SZXNpemFibGUiKX0sZS5leHBvcnRzLlJlc2l6YWJsZT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNpemFibGUvYnVpbGQvUmVzaXphYmxlLmpzIikuZGVmYXVsdCxlLmV4cG9ydHMuUmVzaXphYmxlQm94PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc2l6YWJsZS9idWlsZC9SZXNpemFibGVCb3guanMiKS5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvQ1NTVHJhbnNsYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlM2QoIisoImhvcml6b250YWwiPT09dD9bZSwwLDBdOlswLGUsMF0pLmpvaW4oIiwiKSsiKSJ9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvY29tcG9uZW50cy9DYXJvdXNlbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvY3NzQ2xhc3Nlcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc3BvbnNpdmUtY2Fyb3VzZWwvbGliL0NTU1RyYW5zbGF0ZS5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWVhc3ktc3dpcGUvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvY29tcG9uZW50cy9UaHVtYnMuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9jdXN0b21Qcm9wVHlwZXMuanMiKSxDPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oQSksTz1mdW5jdGlvbigpe30sUz1mdW5jdGlvbihlLHQpe3JldHVybiBlKyIgb2YgIit0fSxSPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gai5jYWxsKG4pLG4uc3RhdGU9e2luaXRpYWxpemVkOiExLHNlbGVjdGVkSXRlbTplLnNlbGVjdGVkSXRlbSxoYXNNb3VudDohMSxpc01vdXNlRW50ZXJlZDohMSxhdXRvUGxheTplLmF1dG9QbGF5fSxufXJldHVybiBpKHQsZSksbCh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmNoaWxkcmVuJiZ0aGlzLnNldHVwQ2Fyb3VzZWwoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5zZWxlY3RlZEl0ZW0hPT10aGlzLnN0YXRlLnNlbGVjdGVkSXRlbSYmKHRoaXMudXBkYXRlU2l6ZXMoKSx0aGlzLm1vdmVUbyhlLnNlbGVjdGVkSXRlbSkpLGUuYXV0b1BsYXkhPT10aGlzLnN0YXRlLmF1dG9QbGF5JiZ0aGlzLnNldFN0YXRlKHthdXRvUGxheTplLmF1dG9QbGF5fSxmdW5jdGlvbigpe3Quc3RhdGUuYXV0b1BsYXk/dC5zZXR1cEF1dG9QbGF5KCk6dC5kZXN0cm95QXV0b1BsYXkoKX0pfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2UuY2hpbGRyZW58fCF0aGlzLnByb3BzLmNoaWxkcmVufHx0aGlzLnN0YXRlLmluaXRpYWxpemVkfHx0aGlzLnNldHVwQ2Fyb3VzZWwoKSx0LnN3aXBpbmcmJiF0aGlzLnN0YXRlLnN3aXBpbmcmJnRoaXMucmVzZXRQb3NpdGlvbigpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95Q2Fyb3VzZWwoKX19LHtrZXk6InNldHVwQ2Fyb3VzZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kRXZlbnRzKCksdGhpcy5zdGF0ZS5hdXRvUGxheSYmdS5DaGlsZHJlbi5jb3VudCh0aGlzLnByb3BzLmNoaWxkcmVuKT4xJiZ0aGlzLnNldHVwQXV0b1BsYXkoKSx0aGlzLnNldFN0YXRlKHtpbml0aWFsaXplZDohMH0pO3ZhciBlPXRoaXMuZ2V0SW5pdGlhbEltYWdlKCk7ZT9lLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuc2V0TW91bnRTdGF0ZSk6dGhpcy5zZXRNb3VudFN0YXRlKCl9fSx7a2V5OiJkZXN0cm95Q2Fyb3VzZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZS5pbml0aWFsaXplZCYmKHRoaXMudW5iaW5kRXZlbnRzKCksdGhpcy5kZXN0cm95QXV0b1BsYXkoKSl9fSx7a2V5OiJzZXR1cEF1dG9QbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYXV0b1BsYXkoKTt2YXIgZT10aGlzLmNhcm91c2VsV3JhcHBlclJlZjt0aGlzLnByb3BzLnN0b3BPbkhvdmVyJiZlJiYoZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix0aGlzLnN0b3BPbkhvdmVyKSxlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHRoaXMuc3RhcnRPbkxlYXZlKSl9fSx7a2V5OiJkZXN0cm95QXV0b1BsYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhckF1dG9QbGF5KCk7dmFyIGU9dGhpcy5jYXJvdXNlbFdyYXBwZXJSZWY7dGhpcy5wcm9wcy5zdG9wT25Ib3ZlciYmZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdGhpcy5zdG9wT25Ib3ZlciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix0aGlzLnN0YXJ0T25MZWF2ZSkpfX0se2tleToiYmluZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLnVwZGF0ZVNpemVzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdGhpcy51cGRhdGVTaXplcyksdGhpcy5wcm9wcy51c2VLZXlib2FyZEFycm93cyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5uYXZpZ2F0ZVdpdGhLZXlib2FyZCl9fSx7a2V5OiJ1bmJpbmRFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy51cGRhdGVTaXplcyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHRoaXMudXBkYXRlU2l6ZXMpO3ZhciBlPXRoaXMuZ2V0SW5pdGlhbEltYWdlKCk7ZSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLnNldE1vdW50U3RhdGUpLHRoaXMucHJvcHMudXNlS2V5Ym9hcmRBcnJvd3MmJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMubmF2aWdhdGVXaXRoS2V5Ym9hcmQpfX0se2tleToiZ2V0UG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuaW5maW5pdGVMb29wJiYrK2U7dmFyIHQ9dS5DaGlsZHJlbi5jb3VudCh0aGlzLnByb3BzLmNoaWxkcmVuKTtpZih0aGlzLnByb3BzLmNlbnRlck1vZGUmJiJob3Jpem9udGFsIj09PXRoaXMucHJvcHMuYXhpcyl7dmFyIG49LWUqdGhpcy5wcm9wcy5jZW50ZXJTbGlkZVBlcmNlbnRhZ2Uscj10LTE7cmV0dXJuIGUmJihlIT09cnx8dGhpcy5wcm9wcy5pbmZpbml0ZUxvb3ApP24rPSgxMDAtdGhpcy5wcm9wcy5jZW50ZXJTbGlkZVBlcmNlbnRhZ2UpLzI6ZT09PXImJihuKz0xMDAtdGhpcy5wcm9wcy5jZW50ZXJTbGlkZVBlcmNlbnRhZ2UpLG59cmV0dXJuIDEwMCotZX19LHtrZXk6InJlbmRlckl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB1LkNoaWxkcmVuLm1hcCh0aGlzLnByb3BzLmNoaWxkcmVuLGZ1bmN0aW9uKG4scil7dmFyIG89e3JlZjpmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXRJdGVtc1JlZihlLHIpfSxrZXk6Iml0ZW1LZXkiK3IrKGU/ImNsb25lIjoiIiksY2xhc3NOYW1lOmguZGVmYXVsdC5JVEVNKCEwLHI9PT10LnN0YXRlLnNlbGVjdGVkSXRlbSksb25DbGljazp0LmhhbmRsZUNsaWNrSXRlbS5iaW5kKHQscixuKX07cmV0dXJuIHQucHJvcHMuY2VudGVyTW9kZSYmImhvcml6b250YWwiPT09dC5wcm9wcy5heGlzJiYoby5zdHlsZT17bWluV2lkdGg6dC5wcm9wcy5jZW50ZXJTbGlkZVBlcmNlbnRhZ2UrIiUifSksYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxpIixvLG4pfSl9fSx7a2V5OiJyZW5kZXJDb250cm9scyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnByb3BzLnNob3dJbmRpY2F0b3JzP2MuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToiY29udHJvbC1kb3RzIn0sdS5DaGlsZHJlbi5tYXAodGhpcy5wcm9wcy5jaGlsZHJlbixmdW5jdGlvbih0LG4pe3JldHVybiBjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6aC5kZWZhdWx0LkRPVChuPT09ZS5zdGF0ZS5zZWxlY3RlZEl0ZW0pLG9uQ2xpY2s6ZS5jaGFuZ2VJdGVtLG9uS2V5RG93bjplLmNoYW5nZUl0ZW0sdmFsdWU6bixrZXk6bixyb2xlOiJidXR0b24iLHRhYkluZGV4OjB9KX0pKTpudWxsfX0se2tleToicmVuZGVyU3RhdHVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLnNob3dTdGF0dXM/Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6ImNhcm91c2VsLXN0YXR1cyJ9LHRoaXMucHJvcHMuc3RhdHVzRm9ybWF0dGVyKHRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtKzEsdS5DaGlsZHJlbi5jb3VudCh0aGlzLnByb3BzLmNoaWxkcmVuKSkpOm51bGx9fSx7a2V5OiJyZW5kZXJUaHVtYnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuc2hvd1RodW1icyYmMCE9PXUuQ2hpbGRyZW4uY291bnQodGhpcy5wcm9wcy5jaGlsZHJlbik/Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVC5kZWZhdWx0LHtyZWY6dGhpcy5zZXRUaHVtYnNSZWYsb25TZWxlY3RJdGVtOnRoaXMuaGFuZGxlQ2xpY2tUaHVtYixzZWxlY3RlZEl0ZW06dGhpcy5zdGF0ZS5zZWxlY3RlZEl0ZW0sdHJhbnNpdGlvblRpbWU6dGhpcy5wcm9wcy50cmFuc2l0aW9uVGltZSx0aHVtYldpZHRoOnRoaXMucHJvcHMudGh1bWJXaWR0aH0sdGhpcy5wcm9wcy5jaGlsZHJlbik6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5wcm9wcy5jaGlsZHJlbnx8MD09PXUuQ2hpbGRyZW4uY291bnQodGhpcy5wcm9wcy5jaGlsZHJlbikpcmV0dXJuIG51bGw7dmFyIGU9Imhvcml6b250YWwiPT09dGhpcy5wcm9wcy5heGlzLHQ9dGhpcy5wcm9wcy5zaG93QXJyb3dzJiZ1LkNoaWxkcmVuLmNvdW50KHRoaXMucHJvcHMuY2hpbGRyZW4pPjEsbj10JiYodGhpcy5zdGF0ZS5zZWxlY3RlZEl0ZW0+MHx8dGhpcy5wcm9wcy5pbmZpbml0ZUxvb3ApLHI9dCYmKHRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtPHUuQ2hpbGRyZW4uY291bnQodGhpcy5wcm9wcy5jaGlsZHJlbiktMXx8dGhpcy5wcm9wcy5pbmZpbml0ZUxvb3ApLG89e30scz10aGlzLmdldFBvc2l0aW9uKHRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtKSxpPSgwLGIuZGVmYXVsdCkocysiJSIsdGhpcy5wcm9wcy5heGlzKSxsPXRoaXMucHJvcHMudHJhbnNpdGlvblRpbWUrIm1zIjtvPXtXZWJraXRUcmFuc2Zvcm06aSxNb3pUcmFuc2Zvcm06aSxNc1RyYW5zZm9ybTppLE9UcmFuc2Zvcm06aSx0cmFuc2Zvcm06aSxtc1RyYW5zZm9ybTppfSx0aGlzLnN0YXRlLnN3aXBpbmd8fChvPWEoe30sbyx7V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOmwsTW96VHJhbnNpdGlvbkR1cmF0aW9uOmwsTXNUcmFuc2l0aW9uRHVyYXRpb246bCxPVHJhbnNpdGlvbkR1cmF0aW9uOmwsdHJhbnNpdGlvbkR1cmF0aW9uOmwsbXNUcmFuc2l0aW9uRHVyYXRpb246bH0pKTt2YXIgZD10aGlzLnJlbmRlckl0ZW1zKCEwKSxfPWQuc2hpZnQoKSxwPWQucG9wKCksZj17c2VsZWN0ZWRJdGVtOnRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtLGNsYXNzTmFtZTpoLmRlZmF1bHQuU0xJREVSKCEwLHRoaXMuc3RhdGUuc3dpcGluZyksb25Td2lwZU1vdmU6dGhpcy5vblN3aXBlTW92ZSxvblN3aXBlU3RhcnQ6dGhpcy5vblN3aXBlU3RhcnQsb25Td2lwZUVuZDp0aGlzLm9uU3dpcGVFbmQsc3R5bGU6byx0b2xlcmFuY2U6dGhpcy5wcm9wcy5zd2lwZVNjcm9sbFRvbGVyYW5jZX0sbT17fTtpZihlKXtpZihmLm9uU3dpcGVMZWZ0PXRoaXMub25Td2lwZUJhY2t3YXJkcyxmLm9uU3dpcGVSaWdodD10aGlzLm9uU3dpcGVGb3J3YXJkLHRoaXMucHJvcHMuZHluYW1pY0hlaWdodCl7dmFyIGc9dGhpcy5nZXRWYXJpYWJsZUltYWdlSGVpZ2h0KHRoaXMuc3RhdGUuc2VsZWN0ZWRJdGVtKTtmLnN0eWxlLmhlaWdodD1nfHwiYXV0byIsbS5oZWlnaHQ9Z3x8ImF1dG8ifX1lbHNlIGYub25Td2lwZVVwPSJuYXR1cmFsIj09PXRoaXMucHJvcHMudmVydGljYWxTd2lwZT90aGlzLm9uU3dpcGVGb3J3YXJkOnRoaXMub25Td2lwZUJhY2t3YXJkcyxmLm9uU3dpcGVEb3duPSJuYXR1cmFsIj09PXRoaXMucHJvcHMudmVydGljYWxTd2lwZT90aGlzLm9uU3dpcGVCYWNrd2FyZHM6dGhpcy5vblN3aXBlRm9yd2FyZCxmLnN0eWxlLmhlaWdodD10aGlzLnN0YXRlLml0ZW1TaXplLG0uaGVpZ2h0PXRoaXMuc3RhdGUuaXRlbVNpemU7cmV0dXJuIGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWUscmVmOnRoaXMuc2V0Q2Fyb3VzZWxXcmFwcGVyUmVmfSxjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmguZGVmYXVsdC5DQVJPVVNFTCghMCksc3R5bGU6e3dpZHRoOnRoaXMucHJvcHMud2lkdGh9fSxjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixjbGFzc05hbWU6aC5kZWZhdWx0LkFSUk9XX1BSRVYoIW4pLG9uQ2xpY2s6dGhpcy5vbkNsaWNrUHJldn0pLGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6aC5kZWZhdWx0LldSQVBQRVIoITAsdGhpcy5wcm9wcy5heGlzKSxzdHlsZTptLHJlZjp0aGlzLnNldEl0ZW1zV3JhcHBlclJlZn0sdGhpcy5wcm9wcy5zd2lwZWFibGU/Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LGEoe3RhZ05hbWU6InVsIixyZWY6dGhpcy5zZXRMaXN0UmVmfSxmLHthbGxvd01vdXNlRXZlbnRzOnRoaXMucHJvcHMuZW11bGF0ZVRvdWNofSksdGhpcy5wcm9wcy5pbmZpbml0ZUxvb3AmJnAsdGhpcy5yZW5kZXJJdGVtcygpLHRoaXMucHJvcHMuaW5maW5pdGVMb29wJiZfKTpjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6aC5kZWZhdWx0LlNMSURFUighMCx0aGlzLnN0YXRlLnN3aXBpbmcpLHJlZjp0aGlzLnNldExpc3RSZWYsc3R5bGU6b30sdGhpcy5wcm9wcy5pbmZpbml0ZUxvb3AmJnAsdGhpcy5yZW5kZXJJdGVtcygpLHRoaXMucHJvcHMuaW5maW5pdGVMb29wJiZfKSksYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOmguZGVmYXVsdC5BUlJPV19ORVhUKCFyKSxvbkNsaWNrOnRoaXMub25DbGlja05leHR9KSx0aGlzLnJlbmRlckNvbnRyb2xzKCksdGhpcy5yZW5kZXJTdGF0dXMoKSksdGhpcy5yZW5kZXJUaHVtYnMoKSl9fV0pLHR9KHUuQ29tcG9uZW50KTtSLmRpc3BsYXlOYW1lPSJDYXJvdXNlbCIsUi5wcm9wVHlwZXM9e2NsYXNzTmFtZTpmLmRlZmF1bHQuc3RyaW5nLGNoaWxkcmVuOmYuZGVmYXVsdC5ub2RlLHNob3dBcnJvd3M6Zi5kZWZhdWx0LmJvb2wsc2hvd1N0YXR1czpmLmRlZmF1bHQuYm9vbCxzaG93SW5kaWNhdG9yczpmLmRlZmF1bHQuYm9vbCxpbmZpbml0ZUxvb3A6Zi5kZWZhdWx0LmJvb2wsc2hvd1RodW1iczpmLmRlZmF1bHQuYm9vbCx0aHVtYldpZHRoOmYuZGVmYXVsdC5udW1iZXIsc2VsZWN0ZWRJdGVtOmYuZGVmYXVsdC5udW1iZXIsb25DbGlja0l0ZW06Zi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkNsaWNrVGh1bWI6Zi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkNoYW5nZTpmLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGF4aXM6Zi5kZWZhdWx0Lm9uZU9mKFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl0pLHZlcnRpY2FsU3dpcGU6Zi5kZWZhdWx0Lm9uZU9mKFsibmF0dXJhbCIsInN0YW5kYXJkIl0pLHdpZHRoOkMudW5pdCx1c2VLZXlib2FyZEFycm93czpmLmRlZmF1bHQuYm9vbCxhdXRvUGxheTpmLmRlZmF1bHQuYm9vbCxzdG9wT25Ib3ZlcjpmLmRlZmF1bHQuYm9vbCxpbnRlcnZhbDpmLmRlZmF1bHQubnVtYmVyLHRyYW5zaXRpb25UaW1lOmYuZGVmYXVsdC5udW1iZXIsc3dpcGVTY3JvbGxUb2xlcmFuY2U6Zi5kZWZhdWx0Lm51bWJlcixzd2lwZWFibGU6Zi5kZWZhdWx0LmJvb2wsZHluYW1pY0hlaWdodDpmLmRlZmF1bHQuYm9vbCxlbXVsYXRlVG91Y2g6Zi5kZWZhdWx0LmJvb2wsc3RhdHVzRm9ybWF0dGVyOmYuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsY2VudGVyTW9kZTpmLmRlZmF1bHQuYm9vbCxjZW50ZXJTbGlkZVBlcmNlbnRhZ2U6Zi5kZWZhdWx0Lm51bWJlcn0sUi5kZWZhdWx0UHJvcHM9e3Nob3dJbmRpY2F0b3JzOiEwLHNob3dBcnJvd3M6ITAsc2hvd1N0YXR1czohMCxzaG93VGh1bWJzOiEwLGluZmluaXRlTG9vcDohMSxzZWxlY3RlZEl0ZW06MCxheGlzOiJob3Jpem9udGFsIix2ZXJ0aWNhbFN3aXBlOiJzdGFuZGFyZCIsd2lkdGg6IjEwMCUiLHVzZUtleWJvYXJkQXJyb3dzOiExLGF1dG9QbGF5OiExLHN0b3BPbkhvdmVyOiEwLGludGVydmFsOjNlMyx0cmFuc2l0aW9uVGltZTozNTAsc3dpcGVTY3JvbGxUb2xlcmFuY2U6NSxzd2lwZWFibGU6ITAsZHluYW1pY0hlaWdodDohMSxlbXVsYXRlVG91Y2g6ITEsb25DbGlja0l0ZW06TyxvbkNsaWNrVGh1bWI6TyxvbkNoYW5nZTpPLHN0YXR1c0Zvcm1hdHRlcjpTLGNlbnRlck1vZGU6ITEsY2VudGVyU2xpZGVQZXJjZW50YWdlOjgwfTt2YXIgaj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zZXRUaHVtYnNSZWY9ZnVuY3Rpb24odCl7ZS50aHVtYnNSZWY9dH0sdGhpcy5zZXRDYXJvdXNlbFdyYXBwZXJSZWY9ZnVuY3Rpb24odCl7ZS5jYXJvdXNlbFdyYXBwZXJSZWY9dH0sdGhpcy5zZXRMaXN0UmVmPWZ1bmN0aW9uKHQpe2UubGlzdFJlZj10fSx0aGlzLnNldEl0ZW1zV3JhcHBlclJlZj1mdW5jdGlvbih0KXtlLml0ZW1zV3JhcHBlclJlZj10fSx0aGlzLnNldEl0ZW1zUmVmPWZ1bmN0aW9uKHQsbil7ZS5pdGVtc1JlZnx8KGUuaXRlbXNSZWY9W10pLGUuaXRlbXNSZWZbbl09dH0sdGhpcy5hdXRvUGxheT1mdW5jdGlvbigpeyFlLnN0YXRlLmF1dG9QbGF5fHx1LkNoaWxkcmVuLmNvdW50KGUucHJvcHMuY2hpbGRyZW4pPD0xfHwoY2xlYXJUaW1lb3V0KGUudGltZXIpLGUudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuaW5jcmVtZW50KCl9LGUucHJvcHMuaW50ZXJ2YWwpKX0sdGhpcy5jbGVhckF1dG9QbGF5PWZ1bmN0aW9uKCl7ZS5zdGF0ZS5hdXRvUGxheSYmY2xlYXJUaW1lb3V0KGUudGltZXIpfSx0aGlzLnJlc2V0QXV0b1BsYXk9ZnVuY3Rpb24oKXtlLmNsZWFyQXV0b1BsYXkoKSxlLmF1dG9QbGF5KCl9LHRoaXMuc3RvcE9uSG92ZXI9ZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtpc01vdXNlRW50ZXJlZDohMH0pLGUuY2xlYXJBdXRvUGxheSgpfSx0aGlzLnN0YXJ0T25MZWF2ZT1mdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2lzTW91c2VFbnRlcmVkOiExfSksZS5hdXRvUGxheSgpfSx0aGlzLm5hdmlnYXRlV2l0aEtleWJvYXJkPWZ1bmN0aW9uKHQpe3ZhciBuPWUucHJvcHMuYXhpcyxyPSJob3Jpem9udGFsIj09PW4sbz17QXJyb3dVcDozOCxBcnJvd1JpZ2h0OjM5LEFycm93RG93bjo0MCxBcnJvd0xlZnQ6Mzd9LHM9cj9vLkFycm93UmlnaHQ6by5BcnJvd0Rvd24saT1yP28uQXJyb3dMZWZ0Om8uQXJyb3dVcDtzPT09dC5rZXlDb2RlP2UuaW5jcmVtZW50KCk6aT09PXQua2V5Q29kZSYmZS5kZWNyZW1lbnQoKX0sdGhpcy51cGRhdGVTaXplcz1mdW5jdGlvbigpe2lmKGUuc3RhdGUuaW5pdGlhbGl6ZWQpe3ZhciB0PSJob3Jpem9udGFsIj09PWUucHJvcHMuYXhpcyxuPWUuaXRlbXNSZWZbMF0scj10P24uY2xpZW50V2lkdGg6bi5jbGllbnRIZWlnaHQ7ZS5zZXRTdGF0ZShmdW5jdGlvbihlLG4pe3JldHVybntpdGVtU2l6ZTpyLHdyYXBwZXJTaXplOnQ/cip1LkNoaWxkcmVuLmNvdW50KG4uY2hpbGRyZW4pOnJ9fSksZS50aHVtYnNSZWYmJmUudGh1bWJzUmVmLnVwZGF0ZVNpemVzKCl9fSx0aGlzLnNldE1vdW50U3RhdGU9ZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtoYXNNb3VudDohMH0pLGUudXBkYXRlU2l6ZXMoKX0sdGhpcy5oYW5kbGVDbGlja0l0ZW09ZnVuY3Rpb24odCxuKXtpZighKHUuQ2hpbGRyZW4uY291bnQoZS5wcm9wcy5jaGlsZHJlbik8PTEpKXtpZihlLnN0YXRlLmNhbmNlbENsaWNrKXJldHVybiB2b2lkIGUuc2V0U3RhdGUoe2NhbmNlbENsaWNrOiExfSk7ZS5wcm9wcy5vbkNsaWNrSXRlbSh0LG4pLHQhPT1lLnN0YXRlLnNlbGVjdGVkSXRlbSYmZS5zZXRTdGF0ZSh7c2VsZWN0ZWRJdGVtOnR9KX19LHRoaXMuaGFuZGxlT25DaGFuZ2U9ZnVuY3Rpb24odCxuKXt1LkNoaWxkcmVuLmNvdW50KGUucHJvcHMuY2hpbGRyZW4pPD0xfHxlLnByb3BzLm9uQ2hhbmdlKHQsbil9LHRoaXMuaGFuZGxlQ2xpY2tUaHVtYj1mdW5jdGlvbih0LG4pe2UucHJvcHMub25DbGlja1RodW1iKHQsbiksZS5zZWxlY3RJdGVtKHtzZWxlY3RlZEl0ZW06dH0pfSx0aGlzLm9uU3dpcGVTdGFydD1mdW5jdGlvbigpe2Uuc2V0U3RhdGUoe3N3aXBpbmc6ITB9KSxlLmNsZWFyQXV0b1BsYXkoKX0sdGhpcy5vblN3aXBlRW5kPWZ1bmN0aW9uKCl7ZS5zZXRTdGF0ZSh7c3dpcGluZzohMX0pLGUuYXV0b1BsYXkoKX0sdGhpcy5vblN3aXBlTW92ZT1mdW5jdGlvbih0KXt2YXIgbj0iaG9yaXpvbnRhbCI9PT1lLnByb3BzLmF4aXMscj11LkNoaWxkcmVuLmNvdW50KGUucHJvcHMuY2hpbGRyZW4pLG89ZS5nZXRQb3NpdGlvbihlLnN0YXRlLnNlbGVjdGVkSXRlbSkscz1lLnByb3BzLmluZmluaXRlTG9vcD9lLmdldFBvc2l0aW9uKHItMSktMTAwOmUuZ2V0UG9zaXRpb24oci0xKSxpPW4/dC54OnQueSxhPWk7MD09PW8mJmk+MCYmKGE9MCksbz09PXMmJmk8MCYmKGE9MCk7dmFyIGw9bysxMDAvKGUuc3RhdGUuaXRlbVNpemUvYSk7ZS5wcm9wcy5pbmZpbml0ZUxvb3AmJigwPT09ZS5zdGF0ZS5zZWxlY3RlZEl0ZW0mJmw+LTEwMD9sLT0xMDAqcjplLnN0YXRlLnNlbGVjdGVkSXRlbT09PXItMSYmbDwxMDAqLXImJihsKz0xMDAqcikpLGwrPSIlIixlLnNldFBvc2l0aW9uKGwpO3ZhciBjPU1hdGguYWJzKGkpPmUucHJvcHMuc3dpcGVTY3JvbGxUb2xlcmFuY2U7cmV0dXJuIGMmJiFlLnN0YXRlLmNhbmNlbENsaWNrJiZlLnNldFN0YXRlKHtjYW5jZWxDbGljazohMH0pLGN9LHRoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxuKXt2YXIgcj1fLmRlZmF1bHQuZmluZERPTU5vZGUoZS5saXN0UmVmKTtbIldlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIk1zVHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIl0uZm9yRWFjaChmdW5jdGlvbihuKXtyLnN0eWxlW25dPSgwLGIuZGVmYXVsdCkodCxlLnByb3BzLmF4aXMpfSksbiYmci5vZmZzZXRMZWZ0fSx0aGlzLnJlc2V0UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD1lLmdldFBvc2l0aW9uKGUuc3RhdGUuc2VsZWN0ZWRJdGVtKSsiJSI7ZS5zZXRQb3NpdGlvbih0KX0sdGhpcy5kZWNyZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MSxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07ZS5tb3ZlVG8oZS5zdGF0ZS5zZWxlY3RlZEl0ZW0tKCJudW1iZXIiPT10eXBlb2YgdD90OjEpLG4pfSx0aGlzLmluY3JlbWVudD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtlLm1vdmVUbyhlLnN0YXRlLnNlbGVjdGVkSXRlbSsoIm51bWJlciI9PXR5cGVvZiB0P3Q6MSksbil9LHRoaXMubW92ZVRvPWZ1bmN0aW9uKHQsbil7dmFyIHI9dS5DaGlsZHJlbi5jb3VudChlLnByb3BzLmNoaWxkcmVuKS0xLG89ZS5wcm9wcy5pbmZpbml0ZUxvb3AmJiFuJiYodDwwfHx0PnIpLHM9dDt0PDAmJih0PWUucHJvcHMuaW5maW5pdGVMb29wP3I6MCksdD5yJiYodD1lLnByb3BzLmluZmluaXRlTG9vcD8wOnIpLG8/ZS5zZXRTdGF0ZSh7c3dpcGluZzohMH0sZnVuY3Rpb24oKXtzPDA/ZS5wcm9wcy5jZW50ZXJNb2RlJiYiaG9yaXpvbnRhbCI9PT1lLnByb3BzLmF4aXM/ZS5zZXRQb3NpdGlvbigiLSIrKChyKzIpKmUucHJvcHMuY2VudGVyU2xpZGVQZXJjZW50YWdlLSgxMDAtZS5wcm9wcy5jZW50ZXJTbGlkZVBlcmNlbnRhZ2UpLzIpKyIlIiwhMCk6ZS5zZXRQb3NpdGlvbigiLSIrMTAwKihyKzIpKyIlIiwhMCk6cz5yJiZlLnNldFBvc2l0aW9uKDAsITApLGUuc2VsZWN0SXRlbSh7c2VsZWN0ZWRJdGVtOnQsc3dpcGluZzohMX0pfSk6ZS5zZWxlY3RJdGVtKHtzZWxlY3RlZEl0ZW06dH0pLGUuc3RhdGUuYXV0b1BsYXkmJiExPT09ZS5zdGF0ZS5pc01vdXNlRW50ZXJlZCYmZS5yZXNldEF1dG9QbGF5KCl9LHRoaXMub25DbGlja05leHQ9ZnVuY3Rpb24oKXtlLmluY3JlbWVudCgxLCExKX0sdGhpcy5vbkNsaWNrUHJldj1mdW5jdGlvbigpe2UuZGVjcmVtZW50KDEsITEpfSx0aGlzLm9uU3dpcGVGb3J3YXJkPWZ1bmN0aW9uKCl7ZS5pbmNyZW1lbnQoMSwhMCl9LHRoaXMub25Td2lwZUJhY2t3YXJkcz1mdW5jdGlvbigpe2UuZGVjcmVtZW50KDEsITApfSx0aGlzLmNoYW5nZUl0ZW09ZnVuY3Rpb24odCl7aWYoIXQua2V5fHwiRW50ZXIiPT09dC5rZXkpe3ZhciBuPXQudGFyZ2V0LnZhbHVlO2Uuc2VsZWN0SXRlbSh7c2VsZWN0ZWRJdGVtOm59KX19LHRoaXMuc2VsZWN0SXRlbT1mdW5jdGlvbih0LG4pe2Uuc2V0U3RhdGUodCxuKSxlLmhhbmRsZU9uQ2hhbmdlKHQuc2VsZWN0ZWRJdGVtLHUuQ2hpbGRyZW4udG9BcnJheShlLnByb3BzLmNoaWxkcmVuKVt0LnNlbGVjdGVkSXRlbV0pfSx0aGlzLmdldEluaXRpYWxJbWFnZT1mdW5jdGlvbigpe3ZhciB0PWUucHJvcHMuc2VsZWN0ZWRJdGVtLG49ZS5pdGVtc1JlZiYmZS5pdGVtc1JlZlt0XSxyPW4mJm4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO3JldHVybiByJiZyW3RdfSx0aGlzLmdldFZhcmlhYmxlSW1hZ2VIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIG49ZS5pdGVtc1JlZiYmZS5pdGVtc1JlZlt0XSxyPW4mJm4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKGUuc3RhdGUuaGFzTW91bnQmJnIubGVuZ3RoPjApe3ZhciBvPXJbMF07aWYoIW8uY29tcGxldGUpe3ZhciBzPWZ1bmN0aW9uIHQoKXtlLmZvcmNlVXBkYXRlKCksby5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIix0KX07by5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzKX12YXIgaT1vLmNsaWVudEhlaWdodDtyZXR1cm4gaT4wP2k6bnVsbH1yZXR1cm4gbnVsbH19O3QuZGVmYXVsdD1SfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvY29tcG9uZW50cy9UaHVtYnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc3BvbnNpdmUtY2Fyb3VzZWwvbGliL2Nzc0NsYXNzZXMuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9kaW1lbnNpb25zLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9DU1NUcmFuc2xhdGUuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1lYXN5LXN3aXBlL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gdi5jYWxsKG4pLG4uc3RhdGU9e3NlbGVjdGVkSXRlbTplLnNlbGVjdGVkSXRlbSxoYXNNb3VudDohMSxmaXJzdEl0ZW06MCxpdGVtU2l6ZTpudWxsLHZpc2libGVJdGVtczowLGxhc3RQb3NpdGlvbjowLHNob3dBcnJvd3M6ITEsaW1hZ2VzOm4uZ2V0SW1hZ2VzKCl9LG59cmV0dXJuIGkodCxlKSxsKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldHVwVGh1bWJzKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Uuc2VsZWN0ZWRJdGVtIT09dGhpcy5zdGF0ZS5zZWxlY3RlZEl0ZW0mJnRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSXRlbTplLnNlbGVjdGVkSXRlbSxmaXJzdEl0ZW06dGhpcy5nZXRGaXJzdEl0ZW0oZS5zZWxlY3RlZEl0ZW0pfSksZS5jaGlsZHJlbiE9PXRoaXMucHJvcHMuY2hpbGRyZW4mJnRoaXMuc2V0U3RhdGUoe2ltYWdlczp0aGlzLmdldEltYWdlcygpfSl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuY2hpbGRyZW4hPT1lLmNoaWxkcmVuJiZ0aGlzLnVwZGF0ZVNpemVzKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3lUaHVtYnMoKX19LHtrZXk6InNldHVwVGh1bWJzIix2YWx1ZTpmdW5jdGlvbigpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMudXBkYXRlU2l6ZXMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix0aGlzLnVwZGF0ZVNpemVzKSx0aGlzLnVwZGF0ZVNpemVzKCl9fSx7a2V5OiJkZXN0cm95VGh1bWJzIix2YWx1ZTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMudXBkYXRlU2l6ZXMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix0aGlzLnVwZGF0ZVNpemVzKX19LHtrZXk6ImdldEltYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT11LkNoaWxkcmVuLm1hcCh0aGlzLnByb3BzLmNoaWxkcmVuLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtyZXR1cm4iaW1nIiE9PWUudHlwZSYmKG49dS5DaGlsZHJlbi50b0FycmF5KGUucHJvcHMuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iaW1nIj09PWUudHlwZX0pWzBdKSxuJiYwIT09bi5sZW5ndGg/bjpudWxsfSk7cmV0dXJuIDA9PT1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWV9KS5sZW5ndGg/KGNvbnNvbGUud2FybigiTm8gaW1hZ2VzIGZvdW5kISBDYW4ndCBidWlsZCB0aGUgdGh1bWIgbGlzdCB3aXRob3V0IGltYWdlcy4gSWYgeW91IGRvbid0IG5lZWQgdGh1bWJzLCBzZXQgc2hvd1RodW1icz17ZmFsc2V9IGluIHRoZSBDYXJvdXNlbC4gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGdldCBpbWFnZXMgcmVuZGVyZWQgaW5zaWRlIGN1c3RvbSBjb21wb25lbnRzLiBNb3JlIGluZm8gYXQgaHR0cHM6Ly9naXRodWIuY29tL2xlYW5kcm93ZC9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2Jsb2IvbWFzdGVyL1RST1VCTEVTSE9PVElORy5tZCIpLG51bGwpOmV9fSx7a2V5OiJnZXRGaXJzdEl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGU+PXRoaXMuc3RhdGUubGFzdFBvc2l0aW9uJiYodD10aGlzLnN0YXRlLmxhc3RQb3NpdGlvbiksZTx0aGlzLnN0YXRlLmZpcnN0SXRlbSt0aGlzLnN0YXRlLnZpc2libGVJdGVtcyYmKHQ9dGhpcy5zdGF0ZS5maXJzdEl0ZW0pLGU8dGhpcy5zdGF0ZS5maXJzdEl0ZW0mJih0PWUpLHR9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnN0YXRlLmltYWdlcy5tYXAoZnVuY3Rpb24odCxuKXt2YXIgcj1mLmRlZmF1bHQuSVRFTSghMSxuPT09ZS5zdGF0ZS5zZWxlY3RlZEl0ZW0mJmUuc3RhdGUuaGFzTW91bnQpLG89e2tleTpuLHJlZjpmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRUaHVtYnNSZWYodCxuKX0sY2xhc3NOYW1lOnIsb25DbGljazplLmhhbmRsZUNsaWNrSXRlbS5iaW5kKGUsbixlLnByb3BzLmNoaWxkcmVuW25dKSxvbktleURvd246ZS5oYW5kbGVDbGlja0l0ZW0uYmluZChlLG4sZS5wcm9wcy5jaGlsZHJlbltuXSl9O3JldHVybiAwPT09biYmKHQ9Yy5kZWZhdWx0LmNsb25lRWxlbWVudCh0LHtvbkxvYWQ6ZS5zZXRNb3VudFN0YXRlfSkpLGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsaSIsYSh7fSxvLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjB9KSx0KX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLmNoaWxkcmVuKXJldHVybiBudWxsO3ZhciBlPXRoaXMuc3RhdGUuc2hvd0Fycm93cyYmdGhpcy5zdGF0ZS5maXJzdEl0ZW0+MCx0PXRoaXMuc3RhdGUuc2hvd0Fycm93cyYmdGhpcy5zdGF0ZS5maXJzdEl0ZW08dGhpcy5zdGF0ZS5sYXN0UG9zaXRpb24sbj17fSxyPS10aGlzLnN0YXRlLmZpcnN0SXRlbSp0aGlzLnN0YXRlLml0ZW1TaXplKyJweCIsbz0oMCxnLmRlZmF1bHQpKHIsdGhpcy5wcm9wcy5heGlzKSxzPXRoaXMucHJvcHMudHJhbnNpdGlvblRpbWUrIm1zIjtyZXR1cm4gbj17V2Via2l0VHJhbnNmb3JtOm8sTW96VHJhbnNmb3JtOm8sTXNUcmFuc2Zvcm06byxPVHJhbnNmb3JtOm8sdHJhbnNmb3JtOm8sbXNUcmFuc2Zvcm06byxXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246cyxNb3pUcmFuc2l0aW9uRHVyYXRpb246cyxNc1RyYW5zaXRpb25EdXJhdGlvbjpzLE9UcmFuc2l0aW9uRHVyYXRpb246cyx0cmFuc2l0aW9uRHVyYXRpb246cyxtc1RyYW5zaXRpb25EdXJhdGlvbjpzfSxjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmYuZGVmYXVsdC5DQVJPVVNFTCghMSl9LGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Zi5kZWZhdWx0LldSQVBQRVIoITEpLHJlZjp0aGlzLnNldEl0ZW1zV3JhcHBlclJlZn0sYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOmYuZGVmYXVsdC5BUlJPV19QUkVWKCFlKSxvbkNsaWNrOnRoaXMuc2xpZGVSaWdodH0pLGMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEUuZGVmYXVsdCx7dGFnTmFtZToidWwiLHNlbGVjdGVkSXRlbTp0aGlzLnN0YXRlLnNlbGVjdGVkSXRlbSxjbGFzc05hbWU6Zi5kZWZhdWx0LlNMSURFUighMSx0aGlzLnN0YXRlLnN3aXBpbmcpLG9uU3dpcGVMZWZ0OnRoaXMuc2xpZGVMZWZ0LG9uU3dpcGVSaWdodDp0aGlzLnNsaWRlUmlnaHQsb25Td2lwZU1vdmU6dGhpcy5vblN3aXBlTW92ZSxvblN3aXBlU3RhcnQ6dGhpcy5vblN3aXBlU3RhcnQsb25Td2lwZUVuZDp0aGlzLm9uU3dpcGVFbmQsc3R5bGU6bixyZWY6dGhpcy5zZXRJdGVtc0xpc3RSZWZ9LHRoaXMucmVuZGVySXRlbXMoKSksYy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOmYuZGVmYXVsdC5BUlJPV19ORVhUKCF0KSxvbkNsaWNrOnRoaXMuc2xpZGVMZWZ0fSkpKX19XSksdH0odS5Db21wb25lbnQpO3kuZGlzcGxheU5hbWU9IlRodW1icyIseS5wcm9wc1R5cGVzPXtjaGlsZHJlbjpfLmRlZmF1bHQuZWxlbWVudC5pc1JlcXVpcmVkLHRyYW5zaXRpb25UaW1lOl8uZGVmYXVsdC5udW1iZXIsc2VsZWN0ZWRJdGVtOl8uZGVmYXVsdC5udW1iZXIsdGh1bWJXaWR0aDpfLmRlZmF1bHQubnVtYmVyfSx5LmRlZmF1bHRQcm9wcz17c2VsZWN0ZWRJdGVtOjAsdHJhbnNpdGlvblRpbWU6MzUwLGF4aXM6Imhvcml6b250YWwifTt2YXIgdj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zZXRJdGVtc1dyYXBwZXJSZWY9ZnVuY3Rpb24odCl7ZS5pdGVtc1dyYXBwZXJSZWY9dH0sdGhpcy5zZXRJdGVtc0xpc3RSZWY9ZnVuY3Rpb24odCl7ZS5pdGVtc0xpc3RSZWY9dH0sdGhpcy5zZXRUaHVtYnNSZWY9ZnVuY3Rpb24odCxuKXtlLnRodW1ic1JlZnx8KGUudGh1bWJzUmVmPVtdKSxlLnRodW1ic1JlZltuXT10fSx0aGlzLnVwZGF0ZVNpemVzPWZ1bmN0aW9uKCl7aWYoZS5wcm9wcy5jaGlsZHJlbiYmZS5pdGVtc1dyYXBwZXJSZWYpe3ZhciB0PWUucHJvcHMuY2hpbGRyZW4ubGVuZ3RoLG49ZS5pdGVtc1dyYXBwZXJSZWYuY2xpZW50V2lkdGgscj1lLnByb3BzLnRodW1iV2lkdGg/ZS5wcm9wcy50aHVtYldpZHRoOigwLG0ub3V0ZXJXaWR0aCkoZS50aHVtYnNSZWZbMF0pLG89TWF0aC5mbG9vcihuL3IpLHM9dC1vLGk9bzx0O2Uuc2V0U3RhdGUoZnVuY3Rpb24odCxuKXtyZXR1cm57aXRlbVNpemU6cix2aXNpYmxlSXRlbXM6byxmaXJzdEl0ZW06aT9lLmdldEZpcnN0SXRlbShuLnNlbGVjdGVkSXRlbSk6MCxsYXN0UG9zaXRpb246cyxzaG93QXJyb3dzOml9fSl9fSx0aGlzLnNldE1vdW50U3RhdGU9ZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtoYXNNb3VudDohMH0pLGUudXBkYXRlU2l6ZXMoKX0sdGhpcy5oYW5kbGVDbGlja0l0ZW09ZnVuY3Rpb24odCxuLHIpe2lmKCFyLmtleUNvZGV8fCJFbnRlciI9PT1yLmtleSl7dmFyIG89ZS5wcm9wcy5vblNlbGVjdEl0ZW07ImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8odCxuKX19LHRoaXMub25Td2lwZVN0YXJ0PWZ1bmN0aW9uKCl7ZS5zZXRTdGF0ZSh7c3dpcGluZzohMH0pfSx0aGlzLm9uU3dpcGVFbmQ9ZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtzd2lwaW5nOiExfSl9LHRoaXMub25Td2lwZU1vdmU9ZnVuY3Rpb24odCl7dmFyIG49LWUuc3RhdGUuZmlyc3RJdGVtKmUuc3RhdGUuaXRlbVNpemUscj0tZS5zdGF0ZS52aXNpYmxlSXRlbXMqZS5zdGF0ZS5pdGVtU2l6ZTswPT09biYmdD4wJiYodD0wKSxuPT09ciYmdDwwJiYodD0wKTt2YXIgbz1lLml0ZW1zV3JhcHBlclJlZi5jbGllbnRXaWR0aCxzPW4rMTAwLyhvL3QpKyIlIjtlLml0ZW1zTGlzdFJlZiYmWyJXZWJraXRUcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJNc1RyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdLmZvckVhY2goZnVuY3Rpb24odCl7ZS5pdGVtc0xpc3RSZWYuc3R5bGVbdF09KDAsZy5kZWZhdWx0KShzLGUucHJvcHMuYXhpcyl9KX0sdGhpcy5zbGlkZVJpZ2h0PWZ1bmN0aW9uKHQpe2UubW92ZVRvKGUuc3RhdGUuZmlyc3RJdGVtLSgibnVtYmVyIj09dHlwZW9mIHQ/dDoxKSl9LHRoaXMuc2xpZGVMZWZ0PWZ1bmN0aW9uKHQpe2UubW92ZVRvKGUuc3RhdGUuZmlyc3RJdGVtKygibnVtYmVyIj09dHlwZW9mIHQ/dDoxKSl9LHRoaXMubW92ZVRvPWZ1bmN0aW9uKHQpe3Q9dDwwPzA6dCx0PXQ+PWUubGFzdFBvc2l0aW9uP2UubGFzdFBvc2l0aW9uOnQsZS5zZXRTdGF0ZSh7Zmlyc3RJdGVtOnQsc2VsZWN0ZWRJdGVtOmUuc3RhdGUuc2VsZWN0ZWRJdGVtfSl9fTt0LmRlZmF1bHQ9eX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc3BvbnNpdmUtY2Fyb3VzZWwvbGliL2Nzc0NsYXNzZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5kZWZhdWx0PXtDQVJPVVNFTDpmdW5jdGlvbihlKXtyZXR1cm4oMCxvLmRlZmF1bHQpKHtjYXJvdXNlbDohMCwiY2Fyb3VzZWwtc2xpZGVyIjplfSl9LFdSQVBQRVI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxvLmRlZmF1bHQpKHsidGh1bWJzLXdyYXBwZXIiOiFlLCJzbGlkZXItd3JhcHBlciI6ZSwiYXhpcy1ob3Jpem9udGFsIjoiaG9yaXpvbnRhbCI9PT10LCJheGlzLXZlcnRpY2FsIjoiaG9yaXpvbnRhbCIhPT10fSl9LFNMSURFUjpmdW5jdGlvbihlLHQpe3JldHVybigwLG8uZGVmYXVsdCkoe3RodW1iczohZSxzbGlkZXI6ZSxhbmltYXRlZDohdH0pfSxJVEVNOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsby5kZWZhdWx0KSh7dGh1bWI6IWUsc2xpZGU6ZSxzZWxlY3RlZDp0fSl9LEFSUk9XX1BSRVY6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5kZWZhdWx0KSh7ImNvbnRyb2wtYXJyb3cgY29udHJvbC1wcmV2IjohMCwiY29udHJvbC1kaXNhYmxlZCI6ZX0pfSxBUlJPV19ORVhUOmZ1bmN0aW9uKGUpe3JldHVybigwLG8uZGVmYXVsdCkoeyJjb250cm9sLWFycm93IGNvbnRyb2wtbmV4dCI6ITAsImNvbnRyb2wtZGlzYWJsZWQiOmV9KX0sRE9UOmZ1bmN0aW9uKGUpe3JldHVybigwLG8uZGVmYXVsdCkoe2RvdDohMCxzZWxlY3RlZDplfSl9fX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc3BvbnNpdmUtY2Fyb3VzZWwvbGliL2N1c3RvbVByb3BUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC51bml0PWZ1bmN0aW9uKGUsdCxuKXtpZighLyhwdHxweHxlbXxyZW18dnd8dmh8JSkkLy50ZXN0KGVbdF0pKXJldHVybiBuZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgIit0KyJgIHN1cHBsaWVkIHRvIGAiK24rImAuIFZhbGlkYXRpb24gZmFpbGVkLiBJdCBuZWVkcyB0byBiZSBhIHNpemUgdW5pdCBsaWtlIHB0LCBweCwgZW0sIHJlbSwgdncsICUiKX19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9kaW1lbnNpb25zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lm91dGVyV2lkdGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vZmZzZXRXaWR0aCxuPWdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQrPXBhcnNlSW50KG4ubWFyZ2luTGVmdCkrcGFyc2VJbnQobi5tYXJnaW5SaWdodCl9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS1jYXJvdXNlbC9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGh1bWJzPXQuQ2Fyb3VzZWw9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlc3BvbnNpdmUtY2Fyb3VzZWwvbGliL2NvbXBvbmVudHMvQ2Fyb3VzZWwuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9jb21wb25lbnRzL1RodW1icy5qcyIpLGE9cihpKTt0LkNhcm91c2VsPXMuZGVmYXVsdCx0LlRodW1icz1hLmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNwb25zaXZlLWNhcm91c2VsL2xpYi9zdHlsZXMvY2Fyb3VzZWwuY3NzIjpmdW5jdGlvbihlLHQpe30sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L3JlYWN0LXNlbGVjdC5lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5kKHQsIkFzeW5jIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKHQsIkFzeW5jQ3JlYXRhYmxlIixmdW5jdGlvbigpe3JldHVybiBKfSksbi5kKHQsIkNyZWF0YWJsZSIsZnVuY3Rpb24oKXtyZXR1cm4gV30pLG4uZCh0LCJWYWx1ZSIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZCh0LCJPcHRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQodCwiZGVmYXVsdE1lbnVSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZCh0LCJkZWZhdWx0QXJyb3dSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZCh0LCJkZWZhdWx0Q2xlYXJSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZCh0LCJkZWZhdWx0RmlsdGVyT3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlucHV0LWF1dG9zaXplL2xpYi9BdXRvc2l6ZUlucHV0LmpzIiksbz1uLm4ocikscz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiksaT1uLm4ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbD1uLm4oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksXz0obi5uKGQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUub25Nb3VzZURvd247cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJTZWxlY3QtYXJyb3ciLG9uTW91c2VEb3duOnR9KX0pO18ucHJvcFR5cGVzPXtvbk1vdXNlRG93bjpsLmEuZnVuY307dmFyIHA9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6IlNlbGVjdC1jbGVhciIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiJnRpbWVzOyJ9fSl9LGY9W3tiYXNlOiJBIixsZXR0ZXJzOi9bXHUwMDQxXHUyNEI2XHVGRjIxXHUwMEMwXHUwMEMxXHUwMEMyXHUxRUE2XHUxRUE0XHUxRUFBXHUxRUE4XHUwMEMzXHUwMTAwXHUwMTAyXHUxRUIwXHUxRUFFXHUxRUI0XHUxRUIyXHUwMjI2XHUwMUUwXHUwMEM0XHUwMURFXHUxRUEyXHUwMEM1XHUwMUZBXHUwMUNEXHUwMjAwXHUwMjAyXHUxRUEwXHUxRUFDXHUxRUI2XHUxRTAwXHUwMTA0XHUwMjNBXHUyQzZGXS9nfSx7YmFzZToiQUEiLGxldHRlcnM6L1tcdUE3MzJdL2d9LHtiYXNlOiJBRSIsbGV0dGVyczovW1x1MDBDNlx1MDFGQ1x1MDFFMl0vZ30se2Jhc2U6IkFPIixsZXR0ZXJzOi9bXHVBNzM0XS9nfSx7YmFzZToiQVUiLGxldHRlcnM6L1tcdUE3MzZdL2d9LHtiYXNlOiJBViIsbGV0dGVyczovW1x1QTczOFx1QTczQV0vZ30se2Jhc2U6IkFZIixsZXR0ZXJzOi9bXHVBNzNDXS9nfSx7YmFzZToiQiIsbGV0dGVyczovW1x1MDA0Mlx1MjRCN1x1RkYyMlx1MUUwMlx1MUUwNFx1MUUwNlx1MDI0M1x1MDE4Mlx1MDE4MV0vZ30se2Jhc2U6IkMiLGxldHRlcnM6L1tcdTAwNDNcdTI0QjhcdUZGMjNcdTAxMDZcdTAxMDhcdTAxMEFcdTAxMENcdTAwQzdcdTFFMDhcdTAxODdcdTAyM0JcdUE3M0VdL2d9LHtiYXNlOiJEIixsZXR0ZXJzOi9bXHUwMDQ0XHUyNEI5XHVGRjI0XHUxRTBBXHUwMTBFXHUxRTBDXHUxRTEwXHUxRTEyXHUxRTBFXHUwMTEwXHUwMThCXHUwMThBXHUwMTg5XHVBNzc5XS9nfSx7YmFzZToiRFoiLGxldHRlcnM6L1tcdTAxRjFcdTAxQzRdL2d9LHtiYXNlOiJEeiIsbGV0dGVyczovW1x1MDFGMlx1MDFDNV0vZ30se2Jhc2U6IkUiLGxldHRlcnM6L1tcdTAwNDVcdTI0QkFcdUZGMjVcdTAwQzhcdTAwQzlcdTAwQ0FcdTFFQzBcdTFFQkVcdTFFQzRcdTFFQzJcdTFFQkNcdTAxMTJcdTFFMTRcdTFFMTZcdTAxMTRcdTAxMTZcdTAwQ0JcdTFFQkFcdTAxMUFcdTAyMDRcdTAyMDZcdTFFQjhcdTFFQzZcdTAyMjhcdTFFMUNcdTAxMThcdTFFMThcdTFFMUFcdTAxOTBcdTAxOEVdL2d9LHtiYXNlOiJGIixsZXR0ZXJzOi9bXHUwMDQ2XHUyNEJCXHVGRjI2XHUxRTFFXHUwMTkxXHVBNzdCXS9nfSx7YmFzZToiRyIsbGV0dGVyczovW1x1MDA0N1x1MjRCQ1x1RkYyN1x1MDFGNFx1MDExQ1x1MUUyMFx1MDExRVx1MDEyMFx1MDFFNlx1MDEyMlx1MDFFNFx1MDE5M1x1QTdBMFx1QTc3RFx1QTc3RV0vZ30se2Jhc2U6IkgiLGxldHRlcnM6L1tcdTAwNDhcdTI0QkRcdUZGMjhcdTAxMjRcdTFFMjJcdTFFMjZcdTAyMUVcdTFFMjRcdTFFMjhcdTFFMkFcdTAxMjZcdTJDNjdcdTJDNzVcdUE3OERdL2d9LHtiYXNlOiJJIixsZXR0ZXJzOi9bXHUwMDQ5XHUyNEJFXHVGRjI5XHUwMENDXHUwMENEXHUwMENFXHUwMTI4XHUwMTJBXHUwMTJDXHUwMTMwXHUwMENGXHUxRTJFXHUxRUM4XHUwMUNGXHUwMjA4XHUwMjBBXHUxRUNBXHUwMTJFXHUxRTJDXHUwMTk3XS9nfSx7YmFzZToiSiIsbGV0dGVyczovW1x1MDA0QVx1MjRCRlx1RkYyQVx1MDEzNFx1MDI0OF0vZ30se2Jhc2U6IksiLGxldHRlcnM6L1tcdTAwNEJcdTI0QzBcdUZGMkJcdTFFMzBcdTAxRThcdTFFMzJcdTAxMzZcdTFFMzRcdTAxOThcdTJDNjlcdUE3NDBcdUE3NDJcdUE3NDRcdUE3QTJdL2d9LHtiYXNlOiJMIixsZXR0ZXJzOi9bXHUwMDRDXHUyNEMxXHVGRjJDXHUwMTNGXHUwMTM5XHUwMTNEXHUxRTM2XHUxRTM4XHUwMTNCXHUxRTNDXHUxRTNBXHUwMTQxXHUwMjNEXHUyQzYyXHUyQzYwXHVBNzQ4XHVBNzQ2XHVBNzgwXS9nfSx7YmFzZToiTEoiLGxldHRlcnM6L1tcdTAxQzddL2d9LHtiYXNlOiJMaiIsbGV0dGVyczovW1x1MDFDOF0vZ30se2Jhc2U6Ik0iLGxldHRlcnM6L1tcdTAwNERcdTI0QzJcdUZGMkRcdTFFM0VcdTFFNDBcdTFFNDJcdTJDNkVcdTAxOUNdL2d9LHtiYXNlOiJOIixsZXR0ZXJzOi9bXHUwMDRFXHUyNEMzXHVGRjJFXHUwMUY4XHUwMTQzXHUwMEQxXHUxRTQ0XHUwMTQ3XHUxRTQ2XHUwMTQ1XHUxRTRBXHUxRTQ4XHUwMjIwXHUwMTlEXHVBNzkwXHVBN0E0XS9nfSx7YmFzZToiTkoiLGxldHRlcnM6L1tcdTAxQ0FdL2d9LHtiYXNlOiJOaiIsbGV0dGVyczovW1x1MDFDQl0vZ30se2Jhc2U6Ik8iLGxldHRlcnM6L1tcdTAwNEZcdTI0QzRcdUZGMkZcdTAwRDJcdTAwRDNcdTAwRDRcdTFFRDJcdTFFRDBcdTFFRDZcdTFFRDRcdTAwRDVcdTFFNENcdTAyMkNcdTFFNEVcdTAxNENcdTFFNTBcdTFFNTJcdTAxNEVcdTAyMkVcdTAyMzBcdTAwRDZcdTAyMkFcdTFFQ0VcdTAxNTBcdTAxRDFcdTAyMENcdTAyMEVcdTAxQTBcdTFFRENcdTFFREFcdTFFRTBcdTFFREVcdTFFRTJcdTFFQ0NcdTFFRDhcdTAxRUFcdTAxRUNcdTAwRDhcdTAxRkVcdTAxODZcdTAxOUZcdUE3NEFcdUE3NENdL2d9LHtiYXNlOiJPSSIsbGV0dGVyczovW1x1MDFBMl0vZ30se2Jhc2U6Ik9PIixsZXR0ZXJzOi9bXHVBNzRFXS9nfSx7YmFzZToiT1UiLGxldHRlcnM6L1tcdTAyMjJdL2d9LHtiYXNlOiJQIixsZXR0ZXJzOi9bXHUwMDUwXHUyNEM1XHVGRjMwXHUxRTU0XHUxRTU2XHUwMUE0XHUyQzYzXHVBNzUwXHVBNzUyXHVBNzU0XS9nfSx7YmFzZToiUSIsbGV0dGVyczovW1x1MDA1MVx1MjRDNlx1RkYzMVx1QTc1Nlx1QTc1OFx1MDI0QV0vZ30se2Jhc2U6IlIiLGxldHRlcnM6L1tcdTAwNTJcdTI0QzdcdUZGMzJcdTAxNTRcdTFFNThcdTAxNThcdTAyMTBcdTAyMTJcdTFFNUFcdTFFNUNcdTAxNTZcdTFFNUVcdTAyNENcdTJDNjRcdUE3NUFcdUE3QTZcdUE3ODJdL2d9LHtiYXNlOiJTIixsZXR0ZXJzOi9bXHUwMDUzXHUyNEM4XHVGRjMzXHUxRTlFXHUwMTVBXHUxRTY0XHUwMTVDXHUxRTYwXHUwMTYwXHUxRTY2XHUxRTYyXHUxRTY4XHUwMjE4XHUwMTVFXHUyQzdFXHVBN0E4XHVBNzg0XS9nfSx7YmFzZToiVCIsbGV0dGVyczovW1x1MDA1NFx1MjRDOVx1RkYzNFx1MUU2QVx1MDE2NFx1MUU2Q1x1MDIxQVx1MDE2Mlx1MUU3MFx1MUU2RVx1MDE2Nlx1MDFBQ1x1MDFBRVx1MDIzRVx1QTc4Nl0vZ30se2Jhc2U6IlRaIixsZXR0ZXJzOi9bXHVBNzI4XS9nfSx7YmFzZToiVSIsbGV0dGVyczovW1x1MDA1NVx1MjRDQVx1RkYzNVx1MDBEOVx1MDBEQVx1MDBEQlx1MDE2OFx1MUU3OFx1MDE2QVx1MUU3QVx1MDE2Q1x1MDBEQ1x1MDFEQlx1MDFEN1x1MDFENVx1MDFEOVx1MUVFNlx1MDE2RVx1MDE3MFx1MDFEM1x1MDIxNFx1MDIxNlx1MDFBRlx1MUVFQVx1MUVFOFx1MUVFRVx1MUVFQ1x1MUVGMFx1MUVFNFx1MUU3Mlx1MDE3Mlx1MUU3Nlx1MUU3NFx1MDI0NF0vZ30se2Jhc2U6IlYiLGxldHRlcnM6L1tcdTAwNTZcdTI0Q0JcdUZGMzZcdTFFN0NcdTFFN0VcdTAxQjJcdUE3NUVcdTAyNDVdL2d9LHtiYXNlOiJWWSIsbGV0dGVyczovW1x1QTc2MF0vZ30se2Jhc2U6IlciLGxldHRlcnM6L1tcdTAwNTdcdTI0Q0NcdUZGMzdcdTFFODBcdTFFODJcdTAxNzRcdTFFODZcdTFFODRcdTFFODhcdTJDNzJdL2d9LHtiYXNlOiJYIixsZXR0ZXJzOi9bXHUwMDU4XHUyNENEXHVGRjM4XHUxRThBXHUxRThDXS9nfSx7YmFzZToiWSIsbGV0dGVyczovW1x1MDA1OVx1MjRDRVx1RkYzOVx1MUVGMlx1MDBERFx1MDE3Nlx1MUVGOFx1MDIzMlx1MUU4RVx1MDE3OFx1MUVGNlx1MUVGNFx1MDFCM1x1MDI0RVx1MUVGRV0vZ30se2Jhc2U6IloiLGxldHRlcnM6L1tcdTAwNUFcdTI0Q0ZcdUZGM0FcdTAxNzlcdTFFOTBcdTAxN0JcdTAxN0RcdTFFOTJcdTFFOTRcdTAxQjVcdTAyMjRcdTJDN0ZcdTJDNkJcdUE3NjJdL2d9LHtiYXNlOiJhIixsZXR0ZXJzOi9bXHUwMDYxXHUyNEQwXHVGRjQxXHUxRTlBXHUwMEUwXHUwMEUxXHUwMEUyXHUxRUE3XHUxRUE1XHUxRUFCXHUxRUE5XHUwMEUzXHUwMTAxXHUwMTAzXHUxRUIxXHUxRUFGXHUxRUI1XHUxRUIzXHUwMjI3XHUwMUUxXHUwMEU0XHUwMURGXHUxRUEzXHUwMEU1XHUwMUZCXHUwMUNFXHUwMjAxXHUwMjAzXHUxRUExXHUxRUFEXHUxRUI3XHUxRTAxXHUwMTA1XHUyQzY1XHUwMjUwXS9nfSx7YmFzZToiYWEiLGxldHRlcnM6L1tcdUE3MzNdL2d9LHtiYXNlOiJhZSIsbGV0dGVyczovW1x1MDBFNlx1MDFGRFx1MDFFM10vZ30se2Jhc2U6ImFvIixsZXR0ZXJzOi9bXHVBNzM1XS9nfSx7YmFzZToiYXUiLGxldHRlcnM6L1tcdUE3MzddL2d9LHtiYXNlOiJhdiIsbGV0dGVyczovW1x1QTczOVx1QTczQl0vZ30se2Jhc2U6ImF5IixsZXR0ZXJzOi9bXHVBNzNEXS9nfSx7YmFzZToiYiIsbGV0dGVyczovW1x1MDA2Mlx1MjREMVx1RkY0Mlx1MUUwM1x1MUUwNVx1MUUwN1x1MDE4MFx1MDE4M1x1MDI1M10vZ30se2Jhc2U6ImMiLGxldHRlcnM6L1tcdTAwNjNcdTI0RDJcdUZGNDNcdTAxMDdcdTAxMDlcdTAxMEJcdTAxMERcdTAwRTdcdTFFMDlcdTAxODhcdTAyM0NcdUE3M0ZcdTIxODRdL2d9LHtiYXNlOiJkIixsZXR0ZXJzOi9bXHUwMDY0XHUyNEQzXHVGRjQ0XHUxRTBCXHUwMTBGXHUxRTBEXHUxRTExXHUxRTEzXHUxRTBGXHUwMTExXHUwMThDXHUwMjU2XHUwMjU3XHVBNzdBXS9nfSx7YmFzZToiZHoiLGxldHRlcnM6L1tcdTAxRjNcdTAxQzZdL2d9LHtiYXNlOiJlIixsZXR0ZXJzOi9bXHUwMDY1XHUyNEQ0XHVGRjQ1XHUwMEU4XHUwMEU5XHUwMEVBXHUxRUMxXHUxRUJGXHUxRUM1XHUxRUMzXHUxRUJEXHUwMTEzXHUxRTE1XHUxRTE3XHUwMTE1XHUwMTE3XHUwMEVCXHUxRUJCXHUwMTFCXHUwMjA1XHUwMjA3XHUxRUI5XHUxRUM3XHUwMjI5XHUxRTFEXHUwMTE5XHUxRTE5XHUxRTFCXHUwMjQ3XHUwMjVCXHUwMUREXS9nfSx7YmFzZToiZiIsbGV0dGVyczovW1x1MDA2Nlx1MjRENVx1RkY0Nlx1MUUxRlx1MDE5Mlx1QTc3Q10vZ30se2Jhc2U6ImciLGxldHRlcnM6L1tcdTAwNjdcdTI0RDZcdUZGNDdcdTAxRjVcdTAxMURcdTFFMjFcdTAxMUZcdTAxMjFcdTAxRTdcdTAxMjNcdTAxRTVcdTAyNjBcdUE3QTFcdTFENzlcdUE3N0ZdL2d9LHtiYXNlOiJoIixsZXR0ZXJzOi9bXHUwMDY4XHUyNEQ3XHVGRjQ4XHUwMTI1XHUxRTIzXHUxRTI3XHUwMjFGXHUxRTI1XHUxRTI5XHUxRTJCXHUxRTk2XHUwMTI3XHUyQzY4XHUyQzc2XHUwMjY1XS9nfSx7YmFzZToiaHYiLGxldHRlcnM6L1tcdTAxOTVdL2d9LHtiYXNlOiJpIixsZXR0ZXJzOi9bXHUwMDY5XHUyNEQ4XHVGRjQ5XHUwMEVDXHUwMEVEXHUwMEVFXHUwMTI5XHUwMTJCXHUwMTJEXHUwMEVGXHUxRTJGXHUxRUM5XHUwMUQwXHUwMjA5XHUwMjBCXHUxRUNCXHUwMTJGXHUxRTJEXHUwMjY4XHUwMTMxXS9nfSx7YmFzZToiaiIsbGV0dGVyczovW1x1MDA2QVx1MjREOVx1RkY0QVx1MDEzNVx1MDFGMFx1MDI0OV0vZ30se2Jhc2U6ImsiLGxldHRlcnM6L1tcdTAwNkJcdTI0REFcdUZGNEJcdTFFMzFcdTAxRTlcdTFFMzNcdTAxMzdcdTFFMzVcdTAxOTlcdTJDNkFcdUE3NDFcdUE3NDNcdUE3NDVcdUE3QTNdL2d9LHtiYXNlOiJsIixsZXR0ZXJzOi9bXHUwMDZDXHUyNERCXHVGRjRDXHUwMTQwXHUwMTNBXHUwMTNFXHUxRTM3XHUxRTM5XHUwMTNDXHUxRTNEXHUxRTNCXHUwMTdGXHUwMTQyXHUwMTlBXHUwMjZCXHUyQzYxXHVBNzQ5XHVBNzgxXHVBNzQ3XS9nfSx7YmFzZToibGoiLGxldHRlcnM6L1tcdTAxQzldL2d9LHtiYXNlOiJtIixsZXR0ZXJzOi9bXHUwMDZEXHUyNERDXHVGRjREXHUxRTNGXHUxRTQxXHUxRTQzXHUwMjcxXHUwMjZGXS9nfSx7YmFzZToibiIsbGV0dGVyczovW1x1MDA2RVx1MjRERFx1RkY0RVx1MDFGOVx1MDE0NFx1MDBGMVx1MUU0NVx1MDE0OFx1MUU0N1x1MDE0Nlx1MUU0Qlx1MUU0OVx1MDE5RVx1MDI3Mlx1MDE0OVx1QTc5MVx1QTdBNV0vZ30se2Jhc2U6Im5qIixsZXR0ZXJzOi9bXHUwMUNDXS9nfSx7YmFzZToibyIsbGV0dGVyczovW1x1MDA2Rlx1MjRERVx1RkY0Rlx1MDBGMlx1MDBGM1x1MDBGNFx1MUVEM1x1MUVEMVx1MUVEN1x1MUVENVx1MDBGNVx1MUU0RFx1MDIyRFx1MUU0Rlx1MDE0RFx1MUU1MVx1MUU1M1x1MDE0Rlx1MDIyRlx1MDIzMVx1MDBGNlx1MDIyQlx1MUVDRlx1MDE1MVx1MDFEMlx1MDIwRFx1MDIwRlx1MDFBMVx1MUVERFx1MUVEQlx1MUVFMVx1MUVERlx1MUVFM1x1MUVDRFx1MUVEOVx1MDFFQlx1MDFFRFx1MDBGOFx1MDFGRlx1MDI1NFx1QTc0Qlx1QTc0RFx1MDI3NV0vZ30se2Jhc2U6Im9pIixsZXR0ZXJzOi9bXHUwMUEzXS9nfSx7YmFzZToib3UiLGxldHRlcnM6L1tcdTAyMjNdL2d9LHtiYXNlOiJvbyIsbGV0dGVyczovW1x1QTc0Rl0vZ30se2Jhc2U6InAiLGxldHRlcnM6L1tcdTAwNzBcdTI0REZcdUZGNTBcdTFFNTVcdTFFNTdcdTAxQTVcdTFEN0RcdUE3NTFcdUE3NTNcdUE3NTVdL2d9LHtiYXNlOiJxIixsZXR0ZXJzOi9bXHUwMDcxXHUyNEUwXHVGRjUxXHUwMjRCXHVBNzU3XHVBNzU5XS9nfSx7YmFzZToiciIsbGV0dGVyczovW1x1MDA3Mlx1MjRFMVx1RkY1Mlx1MDE1NVx1MUU1OVx1MDE1OVx1MDIxMVx1MDIxM1x1MUU1Qlx1MUU1RFx1MDE1N1x1MUU1Rlx1MDI0RFx1MDI3RFx1QTc1Qlx1QTdBN1x1QTc4M10vZ30se2Jhc2U6InMiLGxldHRlcnM6L1tcdTAwNzNcdTI0RTJcdUZGNTNcdTAwREZcdTAxNUJcdTFFNjVcdTAxNURcdTFFNjFcdTAxNjFcdTFFNjdcdTFFNjNcdTFFNjlcdTAyMTlcdTAxNUZcdTAyM0ZcdUE3QTlcdUE3ODVcdTFFOUJdL2d9LHtiYXNlOiJ0IixsZXR0ZXJzOi9bXHUwMDc0XHUyNEUzXHVGRjU0XHUxRTZCXHUxRTk3XHUwMTY1XHUxRTZEXHUwMjFCXHUwMTYzXHUxRTcxXHUxRTZGXHUwMTY3XHUwMUFEXHUwMjg4XHUyQzY2XHVBNzg3XS9nfSx7YmFzZToidHoiLGxldHRlcnM6L1tcdUE3MjldL2d9LHtiYXNlOiJ1IixsZXR0ZXJzOi9bXHUwMDc1XHUyNEU0XHVGRjU1XHUwMEY5XHUwMEZBXHUwMEZCXHUwMTY5XHUxRTc5XHUwMTZCXHUxRTdCXHUwMTZEXHUwMEZDXHUwMURDXHUwMUQ4XHUwMUQ2XHUwMURBXHUxRUU3XHUwMTZGXHUwMTcxXHUwMUQ0XHUwMjE1XHUwMjE3XHUwMUIwXHUxRUVCXHUxRUU5XHUxRUVGXHUxRUVEXHUxRUYxXHUxRUU1XHUxRTczXHUwMTczXHUxRTc3XHUxRTc1XHUwMjg5XS9nfSx7YmFzZToidiIsbGV0dGVyczovW1x1MDA3Nlx1MjRFNVx1RkY1Nlx1MUU3RFx1MUU3Rlx1MDI4Qlx1QTc1Rlx1MDI4Q10vZ30se2Jhc2U6InZ5IixsZXR0ZXJzOi9bXHVBNzYxXS9nfSx7YmFzZToidyIsbGV0dGVyczovW1x1MDA3N1x1MjRFNlx1RkY1N1x1MUU4MVx1MUU4M1x1MDE3NVx1MUU4N1x1MUU4NVx1MUU5OFx1MUU4OVx1MkM3M10vZ30se2Jhc2U6IngiLGxldHRlcnM6L1tcdTAwNzhcdTI0RTdcdUZGNThcdTFFOEJcdTFFOERdL2d9LHtiYXNlOiJ5IixsZXR0ZXJzOi9bXHUwMDc5XHUyNEU4XHVGRjU5XHUxRUYzXHUwMEZEXHUwMTc3XHUxRUY5XHUwMjMzXHUxRThGXHUwMEZGXHUxRUY3XHUxRTk5XHUxRUY1XHUwMUI0XHUwMjRGXHUxRUZGXS9nfSx7YmFzZToieiIsbGV0dGVyczovW1x1MDA3QVx1MjRFOVx1RkY1QVx1MDE3QVx1MUU5MVx1MDE3Q1x1MDE3RVx1MUU5M1x1MUU5NVx1MDFCNlx1MDIyNVx1MDI0MFx1MkM2Q1x1QTc2M10vZ31dLG09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxmLmxlbmd0aDt0KyspZT1lLnJlcGxhY2UoZlt0XS5sZXR0ZXJzLGZbdF0uYmFzZSk7cmV0dXJuIGV9LGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxnPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiZudWxsIT09ZSYmIiIhPT1lfSxiPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByLmlnbm9yZUFjY2VudHMmJih0PW0odCkpLHIuaWdub3JlQ2FzZSYmKHQ9dC50b0xvd2VyQ2FzZSgpKSxyLnRyaW1GaWx0ZXImJih0PWgodCkpLG4mJihuPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3IudmFsdWVLZXldfSkpLGUuZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKG4mJm4uaW5kZXhPZihlW3IudmFsdWVLZXldKT4tMSlyZXR1cm4hMTtpZihyLmZpbHRlck9wdGlvbilyZXR1cm4gci5maWx0ZXJPcHRpb24uY2FsbCh2b2lkIDAsZSx0KTtpZighdClyZXR1cm4hMDt2YXIgbz1lW3IudmFsdWVLZXldLHM9ZVtyLmxhYmVsS2V5XSxpPWcobyksYT1nKHMpO2lmKCFpJiYhYSlyZXR1cm4hMTt2YXIgbD1pP1N0cmluZyhvKTpudWxsLHU9YT9TdHJpbmcocyk6bnVsbDtyZXR1cm4gci5pZ25vcmVBY2NlbnRzJiYobCYmImxhYmVsIiE9PXIubWF0Y2hQcm9wJiYobD1tKGwpKSx1JiYidmFsdWUiIT09ci5tYXRjaFByb3AmJih1PW0odSkpKSxyLmlnbm9yZUNhc2UmJihsJiYibGFiZWwiIT09ci5tYXRjaFByb3AmJihsPWwudG9Mb3dlckNhc2UoKSksdSYmInZhbHVlIiE9PXIubWF0Y2hQcm9wJiYodT11LnRvTG93ZXJDYXNlKCkpKSwic3RhcnQiPT09ci5tYXRjaFBvcz9sJiYibGFiZWwiIT09ci5tYXRjaFByb3AmJmwuc3Vic3RyKDAsdC5sZW5ndGgpPT09dHx8dSYmInZhbHVlIiE9PXIubWF0Y2hQcm9wJiZ1LnN1YnN0cigwLHQubGVuZ3RoKT09PXQ6bCYmImxhYmVsIiE9PXIubWF0Y2hQcm9wJiZsLmluZGV4T2YodCk+PTB8fHUmJiJ2YWx1ZSIhPT1yLm1hdGNoUHJvcCYmdS5pbmRleE9mKHQpPj0wfSl9LEU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mb2N1c2VkT3B0aW9uLG49ZS5mb2N1c09wdGlvbixyPWUuaW5wdXRWYWx1ZSxvPWUuaW5zdGFuY2VQcmVmaXgscz1lLm9uRm9jdXMsYT1lLm9uT3B0aW9uUmVmLGw9ZS5vblNlbGVjdCx1PWUub3B0aW9uQ2xhc3NOYW1lLGQ9ZS5vcHRpb25Db21wb25lbnQsXz1lLm9wdGlvblJlbmRlcmVyLHA9ZS5vcHRpb25zLGY9ZS5yZW1vdmVWYWx1ZSxtPWUuc2VsZWN0VmFsdWUsaD1lLnZhbHVlQXJyYXksZz1lLnZhbHVlS2V5LGI9ZDtyZXR1cm4gcC5tYXAoZnVuY3Rpb24oZSxkKXt2YXIgcD1oJiZoLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ109PT1lW2ddfSksRT1lPT09dCx5PWkoKSh1LHsiU2VsZWN0LW9wdGlvbiI6ITAsImlzLXNlbGVjdGVkIjpwLCJpcy1mb2N1c2VkIjpFLCJpcy1kaXNhYmxlZCI6ZS5kaXNhYmxlZH0pO3JldHVybiBjLmEuY3JlYXRlRWxlbWVudChiLHtjbGFzc05hbWU6eSxmb2N1c09wdGlvbjpuLGlucHV0VmFsdWU6cixpbnN0YW5jZVByZWZpeDpvLGlzRGlzYWJsZWQ6ZS5kaXNhYmxlZCxpc0ZvY3VzZWQ6RSxpc1NlbGVjdGVkOnAsa2V5OiJvcHRpb24tIitkKyItIitlW2ddLG9uRm9jdXM6cyxvblNlbGVjdDpsLG9wdGlvbjplLG9wdGlvbkluZGV4OmQscmVmOmZ1bmN0aW9uKGUpe2EoZSxFKX0scmVtb3ZlVmFsdWU6ZixzZWxlY3RWYWx1ZTptfSxfKGUsZCxyKSl9KX07RS5wcm9wVHlwZXM9e2ZvY3VzT3B0aW9uOmwuYS5mdW5jLGZvY3VzZWRPcHRpb246bC5hLm9iamVjdCxpbnB1dFZhbHVlOmwuYS5zdHJpbmcsaW5zdGFuY2VQcmVmaXg6bC5hLnN0cmluZyxvbkZvY3VzOmwuYS5mdW5jLG9uT3B0aW9uUmVmOmwuYS5mdW5jLG9uU2VsZWN0OmwuYS5mdW5jLG9wdGlvbkNsYXNzTmFtZTpsLmEuc3RyaW5nLG9wdGlvbkNvbXBvbmVudDpsLmEuZnVuYyxvcHRpb25SZW5kZXJlcjpsLmEuZnVuYyxvcHRpb25zOmwuYS5hcnJheSxyZW1vdmVWYWx1ZTpsLmEuZnVuYyxzZWxlY3RWYWx1ZTpsLmEuZnVuYyx2YWx1ZUFycmF5OmwuYS5hcnJheSx2YWx1ZUtleTpsLmEuc3RyaW5nfTt2YXIgeT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSwiQSI9PT1lLnRhcmdldC50YWdOYW1lJiYiaHJlZiJpbiBlLnRhcmdldCYmKGUudGFyZ2V0LnRhcmdldD93aW5kb3cub3BlbihlLnRhcmdldC5ocmVmLGUudGFyZ2V0LnRhcmdldCk6d2luZG93LmxvY2F0aW9uLmhyZWY9ZS50YXJnZXQuaHJlZil9LHY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LFQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnZhbHVlPWV9ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9e2tleTplLGFyZzp0LHJlc29sdmU6bixyZWplY3Q6byxuZXh0Om51bGx9O2k/aT1pLm5leHQ9YToocz1pPWEscihlLHQpKX0pfWZ1bmN0aW9uIHIobixzKXt0cnl7dmFyIGk9dFtuXShzKSxhPWkudmFsdWU7YSBpbnN0YW5jZW9mIGU/UHJvbWlzZS5yZXNvbHZlKGEudmFsdWUpLnRoZW4oZnVuY3Rpb24oZSl7cigibmV4dCIsZSl9LGZ1bmN0aW9uKGUpe3IoInRocm93IixlKX0pOm8oaS5kb25lPyJyZXR1cm4iOiJub3JtYWwiLGkudmFsdWUpfWNhdGNoKGUpe28oInRocm93IixlKX19ZnVuY3Rpb24gbyhlLHQpe3N3aXRjaChlKXtjYXNlInJldHVybiI6cy5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITB9KTticmVhaztjYXNlInRocm93IjpzLnJlamVjdCh0KTticmVhaztkZWZhdWx0OnMucmVzb2x2ZSh7dmFsdWU6dCxkb25lOiExfSl9cz1zLm5leHQscz9yKHMua2V5LHMuYXJnKTppPW51bGx9dmFyIHMsaTt0aGlzLl9pbnZva2U9biwiZnVuY3Rpb24iIT10eXBlb2YgdC5yZXR1cm4mJih0aGlzLnJldHVybj12b2lkIDApfSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0ZXJhdG9yJiYodC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLGUpfSx0LnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0aHJvdyIsZSl9LHQucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLGUpfX0oKSxmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxDPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX0sTz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxTPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sUj1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSxqPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9LHg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtUKHRoaXMsdCk7dmFyIG49aih0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBuLmhhbmRsZU1vdXNlRG93bj1uLmhhbmRsZU1vdXNlRG93bi5iaW5kKG4pLG4uaGFuZGxlTW91c2VFbnRlcj1uLmhhbmRsZU1vdXNlRW50ZXIuYmluZChuKSxuLmhhbmRsZU1vdXNlTW92ZT1uLmhhbmRsZU1vdXNlTW92ZS5iaW5kKG4pLG4uaGFuZGxlVG91Y2hTdGFydD1uLmhhbmRsZVRvdWNoU3RhcnQuYmluZChuKSxuLmhhbmRsZVRvdWNoRW5kPW4uaGFuZGxlVG91Y2hFbmQuYmluZChuKSxuLmhhbmRsZVRvdWNoTW92ZT1uLmhhbmRsZVRvdWNoTW92ZS5iaW5kKG4pLG4ub25Gb2N1cz1uLm9uRm9jdXMuYmluZChuKSxufXJldHVybiBTKHQsZSksQSh0LFt7a2V5OiJoYW5kbGVNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMucHJvcHMub25TZWxlY3QodGhpcy5wcm9wcy5vcHRpb24sZSl9fSx7a2V5OiJoYW5kbGVNb3VzZUVudGVyIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9uRm9jdXMoZSl9fSx7a2V5OiJoYW5kbGVNb3VzZU1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub25Gb2N1cyhlKX19LHtrZXk6ImhhbmRsZVRvdWNoRW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRyYWdnaW5nfHx0aGlzLmhhbmRsZU1vdXNlRG93bihlKX19LHtrZXk6ImhhbmRsZVRvdWNoTW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPSEwfX0se2tleToiaGFuZGxlVG91Y2hTdGFydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPSExfX0se2tleToib25Gb2N1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5pc0ZvY3VzZWR8fHRoaXMucHJvcHMub25Gb2N1cyh0aGlzLnByb3BzLm9wdGlvbixlKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5vcHRpb24sbj1lLmluc3RhbmNlUHJlZml4LHI9ZS5vcHRpb25JbmRleCxvPWkoKSh0aGlzLnByb3BzLmNsYXNzTmFtZSx0LmNsYXNzTmFtZSk7cmV0dXJuIHQuZGlzYWJsZWQ/Yy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvLG9uTW91c2VEb3duOnksb25DbGljazp5fSx0aGlzLnByb3BzLmNoaWxkcmVuKTpjLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm8sc3R5bGU6dC5zdHlsZSxyb2xlOiJvcHRpb24iLCJhcmlhLWxhYmVsIjp0LmxhYmVsLG9uTW91c2VEb3duOnRoaXMuaGFuZGxlTW91c2VEb3duLG9uTW91c2VFbnRlcjp0aGlzLmhhbmRsZU1vdXNlRW50ZXIsb25Nb3VzZU1vdmU6dGhpcy5oYW5kbGVNb3VzZU1vdmUsb25Ub3VjaFN0YXJ0OnRoaXMuaGFuZGxlVG91Y2hTdGFydCxvblRvdWNoTW92ZTp0aGlzLmhhbmRsZVRvdWNoTW92ZSxvblRvdWNoRW5kOnRoaXMuaGFuZGxlVG91Y2hFbmQsaWQ6bisiLW9wdGlvbi0iK3IsdGl0bGU6dC50aXRsZX0sdGhpcy5wcm9wcy5jaGlsZHJlbil9fV0pLHR9KGMuYS5Db21wb25lbnQpO3gucHJvcFR5cGVzPXtjaGlsZHJlbjpsLmEubm9kZSxjbGFzc05hbWU6bC5hLnN0cmluZyxpbnN0YW5jZVByZWZpeDpsLmEuc3RyaW5nLmlzUmVxdWlyZWQsaXNEaXNhYmxlZDpsLmEuYm9vbCxpc0ZvY3VzZWQ6bC5hLmJvb2wsaXNTZWxlY3RlZDpsLmEuYm9vbCxvbkZvY3VzOmwuYS5mdW5jLG9uU2VsZWN0OmwuYS5mdW5jLG9uVW5mb2N1czpsLmEuZnVuYyxvcHRpb246bC5hLm9iamVjdC5pc1JlcXVpcmVkLG9wdGlvbkluZGV4OmwuYS5udW1iZXJ9O3ZhciBMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7VCh0aGlzLHQpO3ZhciBuPWoodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5oYW5kbGVNb3VzZURvd249bi5oYW5kbGVNb3VzZURvd24uYmluZChuKSxuLm9uUmVtb3ZlPW4ub25SZW1vdmUuYmluZChuKSxuLmhhbmRsZVRvdWNoRW5kUmVtb3ZlPW4uaGFuZGxlVG91Y2hFbmRSZW1vdmUuYmluZChuKSxuLmhhbmRsZVRvdWNoTW92ZT1uLmhhbmRsZVRvdWNoTW92ZS5iaW5kKG4pLG4uaGFuZGxlVG91Y2hTdGFydD1uLmhhbmRsZVRvdWNoU3RhcnQuYmluZChuKSxufXJldHVybiBTKHQsZSksQSh0LFt7a2V5OiJoYW5kbGVNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJtb3VzZWRvd24iIT09ZS50eXBlfHwwPT09ZS5idXR0b24pcmV0dXJuIHRoaXMucHJvcHMub25DbGljaz8oZS5zdG9wUHJvcGFnYXRpb24oKSx2b2lkIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLnZhbHVlLGUpKTp2b2lkKHRoaXMucHJvcHMudmFsdWUuaHJlZiYmZS5zdG9wUHJvcGFnYXRpb24oKSl9fSx7a2V5OiJvblJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcm9wcy5vblJlbW92ZSh0aGlzLnByb3BzLnZhbHVlKX19LHtrZXk6ImhhbmRsZVRvdWNoRW5kUmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRyYWdnaW5nfHx0aGlzLm9uUmVtb3ZlKGUpfX0se2tleToiaGFuZGxlVG91Y2hNb3ZlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZHJhZ2dpbmc9ITB9fSx7a2V5OiJoYW5kbGVUb3VjaFN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZHJhZ2dpbmc9ITF9fSx7a2V5OiJyZW5kZXJSZW1vdmVJY29uIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLmRpc2FibGVkJiZ0aGlzLnByb3BzLm9uUmVtb3ZlKXJldHVybiBjLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiU2VsZWN0LXZhbHVlLWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUiLG9uTW91c2VEb3duOnRoaXMub25SZW1vdmUsb25Ub3VjaEVuZDp0aGlzLmhhbmRsZVRvdWNoRW5kUmVtb3ZlLG9uVG91Y2hTdGFydDp0aGlzLmhhbmRsZVRvdWNoU3RhcnQsb25Ub3VjaE1vdmU6dGhpcy5oYW5kbGVUb3VjaE1vdmV9LCLDlyIpfX0se2tleToicmVuZGVyTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMub25DbGlja3x8dGhpcy5wcm9wcy52YWx1ZS5ocmVmP2MuYS5jcmVhdGVFbGVtZW50KCJhIix7Y2xhc3NOYW1lOiJTZWxlY3QtdmFsdWUtbGFiZWwiLGhyZWY6dGhpcy5wcm9wcy52YWx1ZS5ocmVmLHRhcmdldDp0aGlzLnByb3BzLnZhbHVlLnRhcmdldCxvbk1vdXNlRG93bjp0aGlzLmhhbmRsZU1vdXNlRG93bixvblRvdWNoRW5kOnRoaXMuaGFuZGxlTW91c2VEb3dufSx0aGlzLnByb3BzLmNoaWxkcmVuKTpjLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiU2VsZWN0LXZhbHVlLWxhYmVsIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsaWQ6dGhpcy5wcm9wcy5pZH0sdGhpcy5wcm9wcy5jaGlsZHJlbil9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6aSgpKCJTZWxlY3QtdmFsdWUiLHRoaXMucHJvcHMudmFsdWUuY2xhc3NOYW1lKSxzdHlsZTp0aGlzLnByb3BzLnZhbHVlLnN0eWxlLHRpdGxlOnRoaXMucHJvcHMudmFsdWUudGl0bGV9LHRoaXMucmVuZGVyUmVtb3ZlSWNvbigpLHRoaXMucmVuZGVyTGFiZWwoKSl9fV0pLHR9KGMuYS5Db21wb25lbnQpO0wucHJvcFR5cGVzPXtjaGlsZHJlbjpsLmEubm9kZSxkaXNhYmxlZDpsLmEuYm9vbCxpZDpsLmEuc3RyaW5nLG9uQ2xpY2s6bC5hLmZ1bmMsb25SZW1vdmU6bC5hLmZ1bmMsdmFsdWU6bC5hLm9iamVjdC5pc1JlcXVpcmVkfTsvKiEKICBDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi4KICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQogIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL3JlYWN0LXNlbGVjdAoqLwp2YXIgRD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsIT09ZSYmSlNPTi5zdHJpbmdpZnkoZSl8fCIifSx3PWwuYS5vbmVPZlR5cGUoW2wuYS5zdHJpbmcsbC5hLm5vZGVdKSxNPWwuYS5vbmVPZlR5cGUoW2wuYS5zdHJpbmcsbC5hLm51bWJlcl0pLGs9MSxJPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbnB1dFZhbHVlLHI9ZS5pc1BzZXVkb0ZvY3VzZWQsbz1lLmlzRm9jdXNlZCxzPXQub25TZWxlY3RSZXNldHNJbnB1dDtyZXR1cm4hbnx8IXMmJiEoIW8mJnJ8fG8mJiFyKX0sUD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5pbnB1dFZhbHVlLG89ZS5pc1BzZXVkb0ZvY3VzZWQscz1lLmlzRm9jdXNlZCxpPXQub25TZWxlY3RSZXNldHNJbnB1dDtyZXR1cm4hcnx8IWkmJiFuJiYhbyYmIXN9LE49ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDA9PT1lPyJ1bmRlZmluZWQiOnYoZSk7aWYoInN0cmluZyIhPT1uJiYibnVtYmVyIiE9PW4mJiJib29sZWFuIiE9PW4pcmV0dXJuIGU7dmFyIHI9dC5vcHRpb25zLG89dC52YWx1ZUtleTtpZihyKWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWlmKFN0cmluZyhyW3NdW29dKT09PVN0cmluZyhlKSlyZXR1cm4gcltzXX0sSD1mdW5jdGlvbihlLHQpe3JldHVybiFlfHwodD8wPT09ZS5sZW5ndGg6MD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCl9LEY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtUKHRoaXMsdCk7dmFyIG49aih0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVyblsiY2xlYXJWYWx1ZSIsImZvY3VzT3B0aW9uIiwiZ2V0T3B0aW9uTGFiZWwiLCJoYW5kbGVJbnB1dEJsdXIiLCJoYW5kbGVJbnB1dENoYW5nZSIsImhhbmRsZUlucHV0Rm9jdXMiLCJoYW5kbGVJbnB1dFZhbHVlQ2hhbmdlIiwiaGFuZGxlS2V5RG93biIsImhhbmRsZU1lbnVTY3JvbGwiLCJoYW5kbGVNb3VzZURvd24iLCJoYW5kbGVNb3VzZURvd25PbkFycm93IiwiaGFuZGxlTW91c2VEb3duT25NZW51IiwiaGFuZGxlVG91Y2hFbmQiLCJoYW5kbGVUb3VjaEVuZENsZWFyVmFsdWUiLCJoYW5kbGVUb3VjaE1vdmUiLCJoYW5kbGVUb3VjaE91dHNpZGUiLCJoYW5kbGVUb3VjaFN0YXJ0IiwiaGFuZGxlVmFsdWVDbGljayIsIm9uT3B0aW9uUmVmIiwicmVtb3ZlVmFsdWUiLCJzZWxlY3RWYWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV09bltlXS5iaW5kKG4pfSksbi5zdGF0ZT17aW5wdXRWYWx1ZToiIixpc0ZvY3VzZWQ6ITEsaXNPcGVuOiExLGlzUHNldWRvRm9jdXNlZDohMSxyZXF1aXJlZDohMX0sbn1yZXR1cm4gUyh0LGUpLEEodCxbe2tleToiY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2luc3RhbmNlUHJlZml4PSJyZWFjdC1zZWxlY3QtIisodGhpcy5wcm9wcy5pbnN0YW5jZUlkfHwrK2spKyItIjt2YXIgZT10aGlzLmdldFZhbHVlQXJyYXkodGhpcy5wcm9wcy52YWx1ZSk7dGhpcy5wcm9wcy5yZXF1aXJlZCYmdGhpcy5zZXRTdGF0ZSh7cmVxdWlyZWQ6SChlWzBdLHRoaXMucHJvcHMubXVsdGkpfSl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLnByb3BzLmF1dG9mb2N1cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IFRoZSBhdXRvZm9jdXMgcHJvcCBoYXMgY2hhbmdlZCB0byBhdXRvRm9jdXMsIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIHJlYWN0LXNlbGVjdEAxLjAiKSwodGhpcy5wcm9wcy5hdXRvRm9jdXN8fHRoaXMucHJvcHMuYXV0b2ZvY3VzKSYmdGhpcy5mb2N1cygpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRWYWx1ZUFycmF5KGUudmFsdWUsZSk7ZS5yZXF1aXJlZD90aGlzLnNldFN0YXRlKHtyZXF1aXJlZDpIKHRbMF0sZS5tdWx0aSl9KTp0aGlzLnByb3BzLnJlcXVpcmVkJiZ0aGlzLnNldFN0YXRlKHtyZXF1aXJlZDohMX0pLHRoaXMuc3RhdGUuaW5wdXRWYWx1ZSYmdGhpcy5wcm9wcy52YWx1ZSE9PWUudmFsdWUmJmUub25TZWxlY3RSZXNldHNJbnB1dCYmdGhpcy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTp0aGlzLmhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoIiIpfSl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5tZW51JiZ0aGlzLmZvY3VzZWQmJnRoaXMuc3RhdGUuaXNPcGVuJiYhdGhpcy5oYXNTY3JvbGxlZFRvT3B0aW9uKXt2YXIgbj1PYmplY3QoZC5maW5kRE9NTm9kZSkodGhpcy5mb2N1c2VkKSxyPU9iamVjdChkLmZpbmRET01Ob2RlKSh0aGlzLm1lbnUpLG89ci5zY3JvbGxUb3Ascz1vK3Iub2Zmc2V0SGVpZ2h0LGk9bi5vZmZzZXRUb3AsYT1pK24ub2Zmc2V0SGVpZ2h0OyhvPml8fHM8YSkmJihyLnNjcm9sbFRvcD1uLm9mZnNldFRvcCksdGhpcy5oYXNTY3JvbGxlZFRvT3B0aW9uPSEwfWVsc2UgdGhpcy5zdGF0ZS5pc09wZW58fCh0aGlzLmhhc1Njcm9sbGVkVG9PcHRpb249ITEpO2lmKHRoaXMuX3Njcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlJiZ0aGlzLmZvY3VzZWQmJnRoaXMubWVudSl7dGhpcy5fc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGU9ITE7dmFyIGw9T2JqZWN0KGQuZmluZERPTU5vZGUpKHRoaXMuZm9jdXNlZCksdT1PYmplY3QoZC5maW5kRE9NTm9kZSkodGhpcy5tZW51KSxjPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2MuYm90dG9tPl8uYm90dG9tP3Uuc2Nyb2xsVG9wPWwub2Zmc2V0VG9wK2wuY2xpZW50SGVpZ2h0LXUub2Zmc2V0SGVpZ2h0OmMudG9wPF8udG9wJiYodS5zY3JvbGxUb3A9bC5vZmZzZXRUb3ApfWlmKHRoaXMucHJvcHMuc2Nyb2xsTWVudUludG9WaWV3JiZ0aGlzLm1lbnVDb250YWluZXIpe3ZhciBwPXRoaXMubWVudUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt3aW5kb3cuaW5uZXJIZWlnaHQ8cC5ib3R0b20rdGhpcy5wcm9wcy5tZW51QnVmZmVyJiZ3aW5kb3cuc2Nyb2xsQnkoMCxwLmJvdHRvbSt0aGlzLnByb3BzLm1lbnVCdWZmZXItd2luZG93LmlubmVySGVpZ2h0KX1pZihlLmRpc2FibGVkIT09dGhpcy5wcm9wcy5kaXNhYmxlZCYmKHRoaXMuc2V0U3RhdGUoe2lzRm9jdXNlZDohMX0pLHRoaXMuY2xvc2VNZW51KCkpLHQuaXNPcGVuIT09dGhpcy5zdGF0ZS5pc09wZW4pe3RoaXMudG9nZ2xlVG91Y2hPdXRzaWRlRXZlbnQodGhpcy5zdGF0ZS5pc09wZW4pO3ZhciBmPXRoaXMuc3RhdGUuaXNPcGVuP3RoaXMucHJvcHMub25PcGVuOnRoaXMucHJvcHMub25DbG9zZTtmJiZmKCl9fX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVUb3VjaE91dHNpZGVFdmVudCghMSl9fSx7a2V5OiJ0b2dnbGVUb3VjaE91dHNpZGVFdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT8hZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuYXR0YWNoRXZlbnQ/ZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9udG91Y2hzdGFydCIsdGhpcy5oYW5kbGVUb3VjaE91dHNpZGUpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuaGFuZGxlVG91Y2hPdXRzaWRlKTohZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuZGV0YWNoRXZlbnQ/ZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9udG91Y2hzdGFydCIsdGhpcy5oYW5kbGVUb3VjaE91dHNpZGUpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuaGFuZGxlVG91Y2hPdXRzaWRlKX19LHtrZXk6ImhhbmRsZVRvdWNoT3V0c2lkZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy53cmFwcGVyJiYhdGhpcy53cmFwcGVyLmNvbnRhaW5zKGUudGFyZ2V0KSYmdGhpcy5jbG9zZU1lbnUoKX19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaW5wdXQmJnRoaXMuaW5wdXQuZm9jdXMoKX19LHtrZXk6ImJsdXJJbnB1dCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlucHV0JiZ0aGlzLmlucHV0LmJsdXIoKX19LHtrZXk6ImhhbmRsZVRvdWNoTW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPSEwfX0se2tleToiaGFuZGxlVG91Y2hTdGFydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPSExfX0se2tleToiaGFuZGxlVG91Y2hFbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuaGFuZGxlTW91c2VEb3duKGUpfX0se2tleToiaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRyYWdnaW5nfHx0aGlzLmNsZWFyVmFsdWUoZSl9fSx7a2V5OiJoYW5kbGVNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEodGhpcy5wcm9wcy5kaXNhYmxlZHx8Im1vdXNlZG93biI9PT1lLnR5cGUmJjAhPT1lLmJ1dHRvbikpe2lmKCJJTlBVVCI9PT1lLnRhcmdldC50YWdOYW1lKXJldHVybiB2b2lkKHRoaXMuc3RhdGUuaXNGb2N1c2VkP3RoaXMuc3RhdGUuaXNPcGVufHx0aGlzLnNldFN0YXRlKHtpc09wZW46ITAsaXNQc2V1ZG9Gb2N1c2VkOiExfSk6KHRoaXMuX29wZW5BZnRlckZvY3VzPXRoaXMucHJvcHMub3Blbk9uQ2xpY2ssdGhpcy5mb2N1cygpKSk7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLnByb3BzLnNlYXJjaGFibGUpcmV0dXJuIHRoaXMuZm9jdXMoKSx0aGlzLnNldFN0YXRlKHtpc09wZW46IXRoaXMuc3RhdGUuaXNPcGVufSk7aWYodGhpcy5zdGF0ZS5pc0ZvY3VzZWQpe3RoaXMuZm9jdXMoKTt2YXIgdD10aGlzLmlucHV0LG49ITA7ImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0SW5wdXQmJih0PXQuZ2V0SW5wdXQoKSksdC52YWx1ZT0iIix0aGlzLl9mb2N1c0FmdGVyQ2xlYXImJihuPSExLHRoaXMuX2ZvY3VzQWZ0ZXJDbGVhcj0hMSksdGhpcy5zZXRTdGF0ZSh7aXNPcGVuOm4saXNQc2V1ZG9Gb2N1c2VkOiExLGZvY3VzZWRPcHRpb246bnVsbH0pfWVsc2UgdGhpcy5fb3BlbkFmdGVyRm9jdXM9dGhpcy5wcm9wcy5vcGVuT25DbGljayx0aGlzLmZvY3VzKCksdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZE9wdGlvbjpudWxsfSl9fX0se2tleToiaGFuZGxlTW91c2VEb3duT25BcnJvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5kaXNhYmxlZHx8Im1vdXNlZG93biI9PT1lLnR5cGUmJjAhPT1lLmJ1dHRvbnx8KHRoaXMuc3RhdGUuaXNPcGVuPyhlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlTWVudSgpKTp0aGlzLnNldFN0YXRlKHtpc09wZW46ITB9KSl9fSx7a2V5OiJoYW5kbGVNb3VzZURvd25Pbk1lbnUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuZGlzYWJsZWR8fCJtb3VzZWRvd24iPT09ZS50eXBlJiYwIT09ZS5idXR0b258fChlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9vcGVuQWZ0ZXJGb2N1cz0hMCx0aGlzLmZvY3VzKCkpfX0se2tleToiY2xvc2VNZW51Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMub25DbG9zZVJlc2V0c0lucHV0P3RoaXMuc2V0U3RhdGUoe2lucHV0VmFsdWU6dGhpcy5oYW5kbGVJbnB1dFZhbHVlQ2hhbmdlKCIiKSxpc09wZW46ITEsaXNQc2V1ZG9Gb2N1c2VkOnRoaXMuc3RhdGUuaXNGb2N1c2VkJiYhdGhpcy5wcm9wcy5tdWx0aX0pOnRoaXMuc2V0U3RhdGUoe2lzT3BlbjohMSxpc1BzZXVkb0ZvY3VzZWQ6dGhpcy5zdGF0ZS5pc0ZvY3VzZWQmJiF0aGlzLnByb3BzLm11bHRpfSksdGhpcy5oYXNTY3JvbGxlZFRvT3B0aW9uPSExfX0se2tleToiaGFuZGxlSW5wdXRGb2N1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMucHJvcHMuZGlzYWJsZWQpe3ZhciB0PXRoaXMuc3RhdGUuaXNPcGVufHx0aGlzLl9vcGVuQWZ0ZXJGb2N1c3x8dGhpcy5wcm9wcy5vcGVuT25Gb2N1czt0PSF0aGlzLl9mb2N1c0FmdGVyQ2xlYXImJnQsdGhpcy5wcm9wcy5vbkZvY3VzJiZ0aGlzLnByb3BzLm9uRm9jdXMoZSksdGhpcy5zZXRTdGF0ZSh7aXNGb2N1c2VkOiEwLGlzT3BlbjohIXR9KSx0aGlzLl9mb2N1c0FmdGVyQ2xlYXI9ITEsdGhpcy5fb3BlbkFmdGVyRm9jdXM9ITF9fX0se2tleToiaGFuZGxlSW5wdXRCbHVyIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLm1lbnUmJih0aGlzLm1lbnU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fHx0aGlzLm1lbnUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKXJldHVybiB2b2lkIHRoaXMuZm9jdXMoKTt0aGlzLnByb3BzLm9uQmx1ciYmdGhpcy5wcm9wcy5vbkJsdXIoZSk7dmFyIHQ9e2lzRm9jdXNlZDohMSxpc09wZW46ITEsaXNQc2V1ZG9Gb2N1c2VkOiExfTt0aGlzLnByb3BzLm9uQmx1clJlc2V0c0lucHV0JiYodC5pbnB1dFZhbHVlPXRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSgiIikpLHRoaXMuc2V0U3RhdGUodCl9fSx7a2V5OiJoYW5kbGVJbnB1dENoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWU7dGhpcy5zdGF0ZS5pbnB1dFZhbHVlIT09ZS50YXJnZXQudmFsdWUmJih0PXRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSh0KSksdGhpcy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTp0LGlzT3BlbjohMCxpc1BzZXVkb0ZvY3VzZWQ6ITF9KX19LHtrZXk6InNldElucHV0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJvcHMub25JbnB1dENoYW5nZSl7dmFyIHQ9dGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlKGUpO251bGwhPXQmJiJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6dih0KSkmJihlPSIiK3QpfXRoaXMuc2V0U3RhdGUoe2lucHV0VmFsdWU6ZX0pfX0se2tleToiaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlKXt2YXIgdD10aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UoZSk7bnVsbCE9dCYmIm9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjp2KHQpKSYmKGU9IiIrdCl9cmV0dXJuIGV9fSx7a2V5OiJoYW5kbGVLZXlEb3duIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKHRoaXMucHJvcHMuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnByb3BzLm9uSW5wdXRLZXlEb3duJiYodGhpcy5wcm9wcy5vbklucHV0S2V5RG93bihlKSxlLmRlZmF1bHRQcmV2ZW50ZWQpKSlzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDg6IXRoaXMuc3RhdGUuaW5wdXRWYWx1ZSYmdGhpcy5wcm9wcy5iYWNrc3BhY2VSZW1vdmVzJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucG9wVmFsdWUoKSk7YnJlYWs7Y2FzZSA5OmlmKGUuc2hpZnRLZXl8fCF0aGlzLnN0YXRlLmlzT3Blbnx8IXRoaXMucHJvcHMudGFiU2VsZWN0c1ZhbHVlKWJyZWFrO2UucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKTticmVhaztjYXNlIDEzOmUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc3RhdGUuaXNPcGVuP3RoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpOnRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7YnJlYWs7Y2FzZSAyNzplLnByZXZlbnREZWZhdWx0KCksdGhpcy5zdGF0ZS5pc09wZW4/KHRoaXMuY2xvc2VNZW51KCksZS5zdG9wUHJvcGFnYXRpb24oKSk6dGhpcy5wcm9wcy5jbGVhcmFibGUmJnRoaXMucHJvcHMuZXNjYXBlQ2xlYXJzVmFsdWUmJih0aGlzLmNsZWFyVmFsdWUoZSksZS5zdG9wUHJvcGFnYXRpb24oKSk7YnJlYWs7Y2FzZSAzMjppZih0aGlzLnByb3BzLnNlYXJjaGFibGUpYnJlYWs7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLnN0YXRlLmlzT3Blbil7dGhpcy5mb2N1c05leHRPcHRpb24oKTticmVha31lLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpO2JyZWFrO2Nhc2UgMzg6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNQcmV2aW91c09wdGlvbigpO2JyZWFrO2Nhc2UgNDA6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7YnJlYWs7Y2FzZSAzMzplLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c1BhZ2VVcE9wdGlvbigpO2JyZWFrO2Nhc2UgMzQ6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNQYWdlRG93bk9wdGlvbigpO2JyZWFrO2Nhc2UgMzU6aWYoZS5zaGlmdEtleSlicmVhaztlLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c0VuZE9wdGlvbigpO2JyZWFrO2Nhc2UgMzY6aWYoZS5zaGlmdEtleSlicmVhaztlLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c1N0YXJ0T3B0aW9uKCk7YnJlYWs7Y2FzZSA0NjohdGhpcy5zdGF0ZS5pbnB1dFZhbHVlJiZ0aGlzLnByb3BzLmRlbGV0ZVJlbW92ZXMmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb3BWYWx1ZSgpKX19fSx7a2V5OiJoYW5kbGVWYWx1ZUNsaWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucHJvcHMub25WYWx1ZUNsaWNrJiZ0aGlzLnByb3BzLm9uVmFsdWVDbGljayhlLHQpfX0se2tleToiaGFuZGxlTWVudVNjcm9sbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcm9wcy5vbk1lbnVTY3JvbGxUb0JvdHRvbSl7dmFyIHQ9ZS50YXJnZXQ7dC5zY3JvbGxIZWlnaHQ+dC5vZmZzZXRIZWlnaHQmJnQuc2Nyb2xsSGVpZ2h0LXQub2Zmc2V0SGVpZ2h0LXQuc2Nyb2xsVG9wPD0wJiZ0aGlzLnByb3BzLm9uTWVudVNjcm9sbFRvQm90dG9tKCl9fX0se2tleToiZ2V0T3B0aW9uTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlW3RoaXMucHJvcHMubGFiZWxLZXldfX0se2tleToiZ2V0VmFsdWVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMCxuPSJvYmplY3QiPT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6dih0KSk/dDp0aGlzLnByb3BzO2lmKG4ubXVsdGkpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5zcGxpdChuLmRlbGltaXRlcikpLCFBcnJheS5pc0FycmF5KGUpKXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZSlyZXR1cm5bXTtlPVtlXX1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIE4oZSxuKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfXZhciByPU4oZSxuKTtyZXR1cm4gcj9bcl06W119fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLnByb3BzLmF1dG9CbHVyJiZ0aGlzLmJsdXJJbnB1dCgpLHRoaXMucHJvcHMucmVxdWlyZWQpe3ZhciBuPUgoZSx0aGlzLnByb3BzLm11bHRpKTt0aGlzLnNldFN0YXRlKHtyZXF1aXJlZDpufSl9dGhpcy5wcm9wcy5zaW1wbGVWYWx1ZSYmZSYmKGU9dGhpcy5wcm9wcy5tdWx0aT9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0LnByb3BzLnZhbHVlS2V5XX0pLmpvaW4odGhpcy5wcm9wcy5kZWxpbWl0ZXIpOmVbdGhpcy5wcm9wcy52YWx1ZUtleV0pLHRoaXMucHJvcHMub25DaGFuZ2UmJnRoaXMucHJvcHMub25DaGFuZ2UoZSl9fSx7a2V5OiJzZWxlY3RWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QmJih0aGlzLmhhc1Njcm9sbGVkVG9PcHRpb249ITEpO3ZhciBuPXRoaXMucHJvcHMub25TZWxlY3RSZXNldHNJbnB1dD8iIjp0aGlzLnN0YXRlLmlucHV0VmFsdWU7dGhpcy5wcm9wcy5tdWx0aT90aGlzLnNldFN0YXRlKHtmb2N1c2VkSW5kZXg6bnVsbCxpbnB1dFZhbHVlOnRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZShuKSxpc09wZW46IXRoaXMucHJvcHMuY2xvc2VPblNlbGVjdH0sZnVuY3Rpb24oKXt0LmdldFZhbHVlQXJyYXkodC5wcm9wcy52YWx1ZSkuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gblt0LnByb3BzLnZhbHVlS2V5XT09PWVbdC5wcm9wcy52YWx1ZUtleV19KT90LnJlbW92ZVZhbHVlKGUpOnQuYWRkVmFsdWUoZSl9KTp0aGlzLnNldFN0YXRlKHtpbnB1dFZhbHVlOnRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZShuKSxpc09wZW46IXRoaXMucHJvcHMuY2xvc2VPblNlbGVjdCxpc1BzZXVkb0ZvY3VzZWQ6dGhpcy5zdGF0ZS5pc0ZvY3VzZWR9LGZ1bmN0aW9uKCl7dC5zZXRWYWx1ZShlKX0pfX0se2tleToiYWRkVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKSxuPXRoaXMuX3Zpc2libGVPcHRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLHI9bi5pbmRleE9mKGUpO3RoaXMuc2V0VmFsdWUodC5jb25jYXQoZSkpLG4ubGVuZ3RoLTE9PT1yP3RoaXMuZm9jdXNPcHRpb24obltyLTFdKTpuLmxlbmd0aD5yJiZ0aGlzLmZvY3VzT3B0aW9uKG5bcisxXSl9fSx7a2V5OiJwb3BWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFZhbHVlQXJyYXkodGhpcy5wcm9wcy52YWx1ZSk7ZS5sZW5ndGgmJiExIT09ZVtlLmxlbmd0aC0xXS5jbGVhcmFibGVWYWx1ZSYmdGhpcy5zZXRWYWx1ZSh0aGlzLnByb3BzLm11bHRpP2Uuc2xpY2UoMCxlLmxlbmd0aC0xKTpudWxsKX19LHtrZXk6InJlbW92ZVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5nZXRWYWx1ZUFycmF5KHRoaXMucHJvcHMudmFsdWUpO3RoaXMuc2V0VmFsdWUobi5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG5bdC5wcm9wcy52YWx1ZUtleV0hPT1lW3QucHJvcHMudmFsdWVLZXldfSkpLHRoaXMuZm9jdXMoKX19LHtrZXk6ImNsZWFyVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2UmJiJtb3VzZWRvd24iPT09ZS50eXBlJiYwIT09ZS5idXR0b258fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRWYWx1ZSh0aGlzLmdldFJlc2V0VmFsdWUoKSksdGhpcy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTp0aGlzLmhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoIiIpLGlzT3BlbjohMX0sdGhpcy5mb2N1cyksdGhpcy5fZm9jdXNBZnRlckNsZWFyPSEwKX19LHtrZXk6ImdldFJlc2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMucHJvcHMucmVzZXRWYWx1ZT90aGlzLnByb3BzLnJlc2V0VmFsdWU6dGhpcy5wcm9wcy5tdWx0aT9bXTpudWxsfX0se2tleToiZm9jdXNPcHRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe2ZvY3VzZWRPcHRpb246ZX0pfX0se2tleToiZm9jdXNOZXh0T3B0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9jdXNBZGphY2VudE9wdGlvbigibmV4dCIpfX0se2tleToiZm9jdXNQcmV2aW91c09wdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzQWRqYWNlbnRPcHRpb24oInByZXZpb3VzIil9fSx7a2V5OiJmb2N1c1BhZ2VVcE9wdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzQWRqYWNlbnRPcHRpb24oInBhZ2VfdXAiKX19LHtrZXk6ImZvY3VzUGFnZURvd25PcHRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c0FkamFjZW50T3B0aW9uKCJwYWdlX2Rvd24iKX19LHtrZXk6ImZvY3VzU3RhcnRPcHRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c0FkamFjZW50T3B0aW9uKCJzdGFydCIpfX0se2tleToiZm9jdXNFbmRPcHRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c0FkamFjZW50T3B0aW9uKCJlbmQiKX19LHtrZXk6ImZvY3VzQWRqYWNlbnRPcHRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Zpc2libGVPcHRpb25zLm1hcChmdW5jdGlvbihlLHQpe3JldHVybntvcHRpb246ZSxpbmRleDp0fX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5vcHRpb24uZGlzYWJsZWR9KTtpZih0aGlzLl9zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZT0hMCwhdGhpcy5zdGF0ZS5pc09wZW4pe3ZhciBuPXtmb2N1c2VkT3B0aW9uOnRoaXMuX2ZvY3VzZWRPcHRpb258fCh0Lmxlbmd0aD90WyJuZXh0Ij09PWU/MDp0Lmxlbmd0aC0xXS5vcHRpb246bnVsbCksaXNPcGVuOiEwfTtyZXR1cm4gdGhpcy5wcm9wcy5vblNlbGVjdFJlc2V0c0lucHV0JiYobi5pbnB1dFZhbHVlPSIiKSx2b2lkIHRoaXMuc2V0U3RhdGUobil9aWYodC5sZW5ndGgpe2Zvcih2YXIgcj0tMSxvPTA7bzx0Lmxlbmd0aDtvKyspaWYodGhpcy5fZm9jdXNlZE9wdGlvbj09PXRbb10ub3B0aW9uKXtyPW87YnJlYWt9aWYoIm5leHQiPT09ZSYmLTEhPT1yKXI9KHIrMSkldC5sZW5ndGg7ZWxzZSBpZigicHJldmlvdXMiPT09ZSlyPjA/ci09MTpyPXQubGVuZ3RoLTE7ZWxzZSBpZigic3RhcnQiPT09ZSlyPTA7ZWxzZSBpZigiZW5kIj09PWUpcj10Lmxlbmd0aC0xO2Vsc2UgaWYoInBhZ2VfdXAiPT09ZSl7dmFyIHM9ci10aGlzLnByb3BzLnBhZ2VTaXplO3I9czwwPzA6c31lbHNlIGlmKCJwYWdlX2Rvd24iPT09ZSl7dmFyIGk9cit0aGlzLnByb3BzLnBhZ2VTaXplO3I9aT50Lmxlbmd0aC0xP3QubGVuZ3RoLTE6aX0tMT09PXImJihyPTApLHRoaXMuc2V0U3RhdGUoe2ZvY3VzZWRJbmRleDp0W3JdLmluZGV4LGZvY3VzZWRPcHRpb246dFtyXS5vcHRpb259KX19fSx7a2V5OiJnZXRGb2N1c2VkT3B0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2N1c2VkT3B0aW9ufX0se2tleToic2VsZWN0Rm9jdXNlZE9wdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLl9mb2N1c2VkT3B0aW9uKXJldHVybiB0aGlzLnNlbGVjdFZhbHVlKHRoaXMuX2ZvY3VzZWRPcHRpb24pfX0se2tleToicmVuZGVyTG9hZGluZyIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnByb3BzLmlzTG9hZGluZylyZXR1cm4gYy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6IlNlbGVjdC1sb2FkaW5nLXpvbmUiLCJhcmlhLWhpZGRlbiI6InRydWUifSxjLmEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiU2VsZWN0LWxvYWRpbmcifSkpfX0se2tleToicmVuZGVyVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMucHJvcHMudmFsdWVSZW5kZXJlcnx8dGhpcy5nZXRPcHRpb25MYWJlbCxvPXRoaXMucHJvcHMudmFsdWVDb21wb25lbnQ7aWYoIWUubGVuZ3RoKXtyZXR1cm4gUCh0aGlzLnN0YXRlLHRoaXMucHJvcHMsdCk/Yy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiU2VsZWN0LXBsYWNlaG9sZGVyIn0sdGhpcy5wcm9wcy5wbGFjZWhvbGRlcik6bnVsbH12YXIgcz10aGlzLnByb3BzLm9uVmFsdWVDbGljaz90aGlzLmhhbmRsZVZhbHVlQ2xpY2s6bnVsbDtyZXR1cm4gdGhpcy5wcm9wcy5tdWx0aT9lLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBjLmEuY3JlYXRlRWxlbWVudChvLHtkaXNhYmxlZDpuLnByb3BzLmRpc2FibGVkfHwhMT09PWUuY2xlYXJhYmxlVmFsdWUsaWQ6bi5faW5zdGFuY2VQcmVmaXgrIi12YWx1ZS0iK3QsaW5zdGFuY2VQcmVmaXg6bi5faW5zdGFuY2VQcmVmaXgsa2V5OiJ2YWx1ZS0iK3QrIi0iK2Vbbi5wcm9wcy52YWx1ZUtleV0sb25DbGljazpzLG9uUmVtb3ZlOm4ucmVtb3ZlVmFsdWUscGxhY2Vob2xkZXI6bi5wcm9wcy5wbGFjZWhvbGRlcix2YWx1ZTplfSxyKGUsdCksYy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6IlNlbGVjdC1hcmlhLW9ubHkifSwiwqAiKSl9KTpJKHRoaXMuc3RhdGUsdGhpcy5wcm9wcyk/KHQmJihzPW51bGwpLGMuYS5jcmVhdGVFbGVtZW50KG8se2Rpc2FibGVkOnRoaXMucHJvcHMuZGlzYWJsZWQsaWQ6dGhpcy5faW5zdGFuY2VQcmVmaXgrIi12YWx1ZS1pdGVtIixpbnN0YW5jZVByZWZpeDp0aGlzLl9pbnN0YW5jZVByZWZpeCxvbkNsaWNrOnMscGxhY2Vob2xkZXI6dGhpcy5wcm9wcy5wbGFjZWhvbGRlcix2YWx1ZTplWzBdfSxyKGVbMF0pKSk6dm9pZCAwfX0se2tleToicmVuZGVySW5wdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLHM9aSgpKCJTZWxlY3QtaW5wdXQiLHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jbGFzc05hbWUpLGE9dGhpcy5zdGF0ZS5pc09wZW4sbD1pKCkoKG49e30sQyhuLHRoaXMuX2luc3RhbmNlUHJlZml4KyItbGlzdCIsYSksQyhuLHRoaXMuX2luc3RhbmNlUHJlZml4KyItYmFja3NwYWNlLXJlbW92ZS1tZXNzYWdlIix0aGlzLnByb3BzLm11bHRpJiYhdGhpcy5wcm9wcy5kaXNhYmxlZCYmdGhpcy5zdGF0ZS5pc0ZvY3VzZWQmJiF0aGlzLnN0YXRlLmlucHV0VmFsdWUpLG4pKSx1PXRoaXMuc3RhdGUuaW5wdXRWYWx1ZTshdXx8dGhpcy5wcm9wcy5vblNlbGVjdFJlc2V0c0lucHV0fHx0aGlzLnN0YXRlLmlzRm9jdXNlZHx8KHU9IiIpO3ZhciBkPU8oe30sdGhpcy5wcm9wcy5pbnB1dFByb3BzLHsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjphP3RoaXMuX2luc3RhbmNlUHJlZml4KyItb3B0aW9uLSIrdDp0aGlzLl9pbnN0YW5jZVByZWZpeCsiLXZhbHVlIiwiYXJpYS1kZXNjcmliZWRieSI6dGhpcy5wcm9wc1siYXJpYS1kZXNjcmliZWRieSJdLCJhcmlhLWV4cGFuZGVkIjoiIithLCJhcmlhLWhhc3BvcHVwIjoiIithLCJhcmlhLWxhYmVsIjp0aGlzLnByb3BzWyJhcmlhLWxhYmVsIl0sImFyaWEtbGFiZWxsZWRieSI6dGhpcy5wcm9wc1siYXJpYS1sYWJlbGxlZGJ5Il0sImFyaWEtb3ducyI6bCxjbGFzc05hbWU6cyxvbkJsdXI6dGhpcy5oYW5kbGVJbnB1dEJsdXIsb25DaGFuZ2U6dGhpcy5oYW5kbGVJbnB1dENoYW5nZSxvbkZvY3VzOnRoaXMuaGFuZGxlSW5wdXRGb2N1cyxyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaW5wdXQ9ZX0scm9sZToiY29tYm9ib3giLHJlcXVpcmVkOnRoaXMuc3RhdGUucmVxdWlyZWQsdGFiSW5kZXg6dGhpcy5wcm9wcy50YWJJbmRleCx2YWx1ZTp1fSk7aWYodGhpcy5wcm9wcy5pbnB1dFJlbmRlcmVyKXJldHVybiB0aGlzLnByb3BzLmlucHV0UmVuZGVyZXIoZCk7aWYodGhpcy5wcm9wcy5kaXNhYmxlZHx8IXRoaXMucHJvcHMuc2VhcmNoYWJsZSl7dmFyIF89Uih0aGlzLnByb3BzLmlucHV0UHJvcHMsW10pLHA9aSgpKEMoe30sdGhpcy5faW5zdGFuY2VQcmVmaXgrIi1saXN0IixhKSk7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KCJkaXYiLE8oe30sXyx7ImFyaWEtZXhwYW5kZWQiOmEsImFyaWEtb3ducyI6cCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjphP3RoaXMuX2luc3RhbmNlUHJlZml4KyItb3B0aW9uLSIrdDp0aGlzLl9pbnN0YW5jZVByZWZpeCsiLXZhbHVlIiwiYXJpYS1kaXNhYmxlZCI6IiIrdGhpcy5wcm9wcy5kaXNhYmxlZCwiYXJpYS1sYWJlbCI6dGhpcy5wcm9wc1siYXJpYS1sYWJlbCJdLCJhcmlhLWxhYmVsbGVkYnkiOnRoaXMucHJvcHNbImFyaWEtbGFiZWxsZWRieSJdLGNsYXNzTmFtZTpzLG9uQmx1cjp0aGlzLmhhbmRsZUlucHV0Qmx1cixvbkZvY3VzOnRoaXMuaGFuZGxlSW5wdXRGb2N1cyxyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaW5wdXQ9ZX0scm9sZToiY29tYm9ib3giLHN0eWxlOntib3JkZXI6MCx3aWR0aDoxLGRpc3BsYXk6ImlubGluZS1ibG9jayJ9LHRhYkluZGV4OnRoaXMucHJvcHMudGFiSW5kZXh8fDB9KSl9cmV0dXJuIHRoaXMucHJvcHMuYXV0b3NpemU/Yy5hLmNyZWF0ZUVsZW1lbnQoby5hLE8oe2lkOnRoaXMucHJvcHMuaWR9LGQse21pbldpZHRoOiI1In0pKTpjLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnMsa2V5OiJpbnB1dC13cmFwIixzdHlsZTp7ZGlzcGxheToiaW5saW5lLWJsb2NrIn19LGMuYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIsTyh7aWQ6dGhpcy5wcm9wcy5pZH0sZCkpKX19LHtrZXk6InJlbmRlckNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKTtpZih0aGlzLnByb3BzLmNsZWFyYWJsZSYmZS5sZW5ndGgmJiF0aGlzLnByb3BzLmRpc2FibGVkJiYhdGhpcy5wcm9wcy5pc0xvYWRpbmcpe3ZhciB0PXRoaXMucHJvcHMubXVsdGk/dGhpcy5wcm9wcy5jbGVhckFsbFRleHQ6dGhpcy5wcm9wcy5jbGVhclZhbHVlVGV4dCxuPXRoaXMucHJvcHMuY2xlYXJSZW5kZXJlcigpO3JldHVybiBjLmEuY3JlYXRlRWxlbWVudCgic3BhbiIseyJhcmlhLWxhYmVsIjp0LGNsYXNzTmFtZToiU2VsZWN0LWNsZWFyLXpvbmUiLG9uTW91c2VEb3duOnRoaXMuY2xlYXJWYWx1ZSxvblRvdWNoRW5kOnRoaXMuaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlLG9uVG91Y2hNb3ZlOnRoaXMuaGFuZGxlVG91Y2hNb3ZlLG9uVG91Y2hTdGFydDp0aGlzLmhhbmRsZVRvdWNoU3RhcnQsdGl0bGU6dH0sbil9fX0se2tleToicmVuZGVyQXJyb3ciLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5wcm9wcy5hcnJvd1JlbmRlcmVyKXt2YXIgZT10aGlzLmhhbmRsZU1vdXNlRG93bk9uQXJyb3csdD10aGlzLnN0YXRlLmlzT3BlbixuPXRoaXMucHJvcHMuYXJyb3dSZW5kZXJlcih7b25Nb3VzZURvd246ZSxpc09wZW46dH0pO3JldHVybiBuP2MuYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJTZWxlY3QtYXJyb3ctem9uZSIsb25Nb3VzZURvd246ZX0sbik6bnVsbH19fSx7a2V5OiJmaWx0ZXJPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0YXRlLmlucHV0VmFsdWUsbj10aGlzLnByb3BzLm9wdGlvbnN8fFtdO2lmKHRoaXMucHJvcHMuZmlsdGVyT3B0aW9ucyl7cmV0dXJuKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnByb3BzLmZpbHRlck9wdGlvbnM/dGhpcy5wcm9wcy5maWx0ZXJPcHRpb25zOmIpKG4sdCxlLHtmaWx0ZXJPcHRpb246dGhpcy5wcm9wcy5maWx0ZXJPcHRpb24saWdub3JlQWNjZW50czp0aGlzLnByb3BzLmlnbm9yZUFjY2VudHMsaWdub3JlQ2FzZTp0aGlzLnByb3BzLmlnbm9yZUNhc2UsbGFiZWxLZXk6dGhpcy5wcm9wcy5sYWJlbEtleSxtYXRjaFBvczp0aGlzLnByb3BzLm1hdGNoUG9zLG1hdGNoUHJvcDp0aGlzLnByb3BzLm1hdGNoUHJvcCx0cmltRmlsdGVyOnRoaXMucHJvcHMudHJpbUZpbHRlcix2YWx1ZUtleTp0aGlzLnByb3BzLnZhbHVlS2V5fSl9cmV0dXJuIG59fSx7a2V5OiJvbk9wdGlvblJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0JiYodGhpcy5mb2N1c2VkPWUpfX0se2tleToicmVuZGVyTWVudSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLnByb3BzLm1lbnVSZW5kZXJlcih7Zm9jdXNlZE9wdGlvbjpuLGZvY3VzT3B0aW9uOnRoaXMuZm9jdXNPcHRpb24saW5wdXRWYWx1ZTp0aGlzLnN0YXRlLmlucHV0VmFsdWUsaW5zdGFuY2VQcmVmaXg6dGhpcy5faW5zdGFuY2VQcmVmaXgsbGFiZWxLZXk6dGhpcy5wcm9wcy5sYWJlbEtleSxvbkZvY3VzOnRoaXMuZm9jdXNPcHRpb24sb25PcHRpb25SZWY6dGhpcy5vbk9wdGlvblJlZixvblNlbGVjdDp0aGlzLnNlbGVjdFZhbHVlLG9wdGlvbkNsYXNzTmFtZTp0aGlzLnByb3BzLm9wdGlvbkNsYXNzTmFtZSxvcHRpb25Db21wb25lbnQ6dGhpcy5wcm9wcy5vcHRpb25Db21wb25lbnQsb3B0aW9uUmVuZGVyZXI6dGhpcy5wcm9wcy5vcHRpb25SZW5kZXJlcnx8dGhpcy5nZXRPcHRpb25MYWJlbCxvcHRpb25zOmUscmVtb3ZlVmFsdWU6dGhpcy5yZW1vdmVWYWx1ZSxzZWxlY3RWYWx1ZTp0aGlzLnNlbGVjdFZhbHVlLHZhbHVlQXJyYXk6dCx2YWx1ZUtleTp0aGlzLnByb3BzLnZhbHVlS2V5fSk6dGhpcy5wcm9wcy5ub1Jlc3VsdHNUZXh0P2MuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlNlbGVjdC1ub3Jlc3VsdHMifSx0aGlzLnByb3BzLm5vUmVzdWx0c1RleHQpOm51bGx9fSx7a2V5OiJyZW5kZXJIaWRkZW5GaWVsZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLnByb3BzLm5hbWUpe2lmKHRoaXMucHJvcHMuam9pblZhbHVlcyl7dmFyIG49ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEQoZVt0LnByb3BzLnZhbHVlS2V5XSl9KS5qb2luKHRoaXMucHJvcHMuZGVsaW1pdGVyKTtyZXR1cm4gYy5hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7ZGlzYWJsZWQ6dGhpcy5wcm9wcy5kaXNhYmxlZCxuYW1lOnRoaXMucHJvcHMubmFtZSxyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsdWU9ZX0sdHlwZToiaGlkZGVuIix2YWx1ZTpufSl9cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2Rpc2FibGVkOnQucHJvcHMuZGlzYWJsZWQsa2V5OiJoaWRkZW4uIituLG5hbWU6dC5wcm9wcy5uYW1lLHJlZjoidmFsdWUiK24sdHlwZToiaGlkZGVuIix2YWx1ZTpEKGVbdC5wcm9wcy52YWx1ZUtleV0pfSl9KX19fSx7a2V5OiJnZXRGb2N1c2FibGVPcHRpb25JbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdmlzaWJsZU9wdGlvbnM7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuPXRoaXMucHJvcHMudmFsdWVLZXkscj10aGlzLnN0YXRlLmZvY3VzZWRPcHRpb258fGU7aWYociYmIXIuZGlzYWJsZWQpe3ZhciBvPS0xO2lmKHQuc29tZShmdW5jdGlvbihlLHQpe3ZhciBzPWVbbl09PT1yW25dO3JldHVybiBzJiYobz10KSxzfSksLTEhPT1vKXJldHVybiBvfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKWlmKCF0W3NdLmRpc2FibGVkKXJldHVybiBzO3JldHVybiBudWxsfX0se2tleToicmVuZGVyT3V0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89dGhpcy5yZW5kZXJNZW51KGUsdCxuKTtyZXR1cm4gbz9jLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKGUpe3JldHVybiByLm1lbnVDb250YWluZXI9ZX0sY2xhc3NOYW1lOiJTZWxlY3QtbWVudS1vdXRlciIsc3R5bGU6dGhpcy5wcm9wcy5tZW51Q29udGFpbmVyU3R5bGV9LGMuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlNlbGVjdC1tZW51IixpZDp0aGlzLl9pbnN0YW5jZVByZWZpeCsiLWxpc3QiLG9uTW91c2VEb3duOnRoaXMuaGFuZGxlTW91c2VEb3duT25NZW51LG9uU2Nyb2xsOnRoaXMuaGFuZGxlTWVudVNjcm9sbCxyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIHIubWVudT1lfSxyb2xlOiJsaXN0Ym94IixzdHlsZTp0aGlzLnByb3BzLm1lbnVTdHlsZSx0YWJJbmRleDotMX0sbykpOm51bGx9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKSxuPXRoaXMuX3Zpc2libGVPcHRpb25zPXRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnByb3BzLm11bHRpJiZ0aGlzLnByb3BzLnJlbW92ZVNlbGVjdGVkP3Q6bnVsbCkscj10aGlzLnN0YXRlLmlzT3Blbjt0aGlzLnByb3BzLm11bHRpJiYhbi5sZW5ndGgmJnQubGVuZ3RoJiYhdGhpcy5zdGF0ZS5pbnB1dFZhbHVlJiYocj0hMSk7dmFyIG89dGhpcy5nZXRGb2N1c2FibGVPcHRpb25JbmRleCh0WzBdKSxzPW51bGw7cz10aGlzLl9mb2N1c2VkT3B0aW9uPW51bGwhPT1vP25bb106bnVsbDt2YXIgYT1pKCkoIlNlbGVjdCIsdGhpcy5wcm9wcy5jbGFzc05hbWUseyJoYXMtdmFsdWUiOnQubGVuZ3RoLCJpcy1jbGVhcmFibGUiOnRoaXMucHJvcHMuY2xlYXJhYmxlLCJpcy1kaXNhYmxlZCI6dGhpcy5wcm9wcy5kaXNhYmxlZCwiaXMtZm9jdXNlZCI6dGhpcy5zdGF0ZS5pc0ZvY3VzZWQsImlzLWxvYWRpbmciOnRoaXMucHJvcHMuaXNMb2FkaW5nLCJpcy1vcGVuIjpyLCJpcy1wc2V1ZG8tZm9jdXNlZCI6dGhpcy5zdGF0ZS5pc1BzZXVkb0ZvY3VzZWQsImlzLXNlYXJjaGFibGUiOnRoaXMucHJvcHMuc2VhcmNoYWJsZSwiU2VsZWN0LS1tdWx0aSI6dGhpcy5wcm9wcy5tdWx0aSwiU2VsZWN0LS1ydGwiOnRoaXMucHJvcHMucnRsLCJTZWxlY3QtLXNpbmdsZSI6IXRoaXMucHJvcHMubXVsdGl9KSxsPW51bGw7cmV0dXJuIHRoaXMucHJvcHMubXVsdGkmJiF0aGlzLnByb3BzLmRpc2FibGVkJiZ0Lmxlbmd0aCYmIXRoaXMuc3RhdGUuaW5wdXRWYWx1ZSYmdGhpcy5zdGF0ZS5pc0ZvY3VzZWQmJnRoaXMucHJvcHMuYmFja3NwYWNlUmVtb3ZlcyYmKGw9Yy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtpZDp0aGlzLl9pbnN0YW5jZVByZWZpeCsiLWJhY2tzcGFjZS1yZW1vdmUtbWVzc2FnZSIsY2xhc3NOYW1lOiJTZWxlY3QtYXJpYS1vbmx5IiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIn0sdGhpcy5wcm9wcy5iYWNrc3BhY2VUb1JlbW92ZU1lc3NhZ2UucmVwbGFjZSgie2xhYmVsfSIsdFt0Lmxlbmd0aC0xXVt0aGlzLnByb3BzLmxhYmVsS2V5XSkpKSxjLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKHQpe3JldHVybiBlLndyYXBwZXI9dH0sY2xhc3NOYW1lOmEsc3R5bGU6dGhpcy5wcm9wcy53cmFwcGVyU3R5bGV9LHRoaXMucmVuZGVySGlkZGVuRmllbGQodCksYy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpmdW5jdGlvbih0KXtyZXR1cm4gZS5jb250cm9sPXR9LGNsYXNzTmFtZToiU2VsZWN0LWNvbnRyb2wiLG9uS2V5RG93bjp0aGlzLmhhbmRsZUtleURvd24sb25Nb3VzZURvd246dGhpcy5oYW5kbGVNb3VzZURvd24sb25Ub3VjaEVuZDp0aGlzLmhhbmRsZVRvdWNoRW5kLG9uVG91Y2hNb3ZlOnRoaXMuaGFuZGxlVG91Y2hNb3ZlLG9uVG91Y2hTdGFydDp0aGlzLmhhbmRsZVRvdWNoU3RhcnQsc3R5bGU6dGhpcy5wcm9wcy5zdHlsZX0sYy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6IlNlbGVjdC1tdWx0aS12YWx1ZS13cmFwcGVyIixpZDp0aGlzLl9pbnN0YW5jZVByZWZpeCsiLXZhbHVlIn0sdGhpcy5yZW5kZXJWYWx1ZSh0LHIpLHRoaXMucmVuZGVySW5wdXQodCxvKSksbCx0aGlzLnJlbmRlckxvYWRpbmcoKSx0aGlzLnJlbmRlckNsZWFyKCksdGhpcy5yZW5kZXJBcnJvdygpKSxyP3RoaXMucmVuZGVyT3V0ZXIobix0LHMpOm51bGwpfX1dKSx0fShjLmEuQ29tcG9uZW50KTtGLnByb3BUeXBlcz17ImFyaWEtZGVzY3JpYmVkYnkiOmwuYS5zdHJpbmcsImFyaWEtbGFiZWwiOmwuYS5zdHJpbmcsImFyaWEtbGFiZWxsZWRieSI6bC5hLnN0cmluZyxhcnJvd1JlbmRlcmVyOmwuYS5mdW5jLGF1dG9CbHVyOmwuYS5ib29sLGF1dG9Gb2N1czpsLmEuYm9vbCxhdXRvZm9jdXM6bC5hLmJvb2wsYXV0b3NpemU6bC5hLmJvb2wsYmFja3NwYWNlUmVtb3ZlczpsLmEuYm9vbCxiYWNrc3BhY2VUb1JlbW92ZU1lc3NhZ2U6bC5hLnN0cmluZyxjbGFzc05hbWU6bC5hLnN0cmluZyxjbGVhckFsbFRleHQ6dyxjbGVhclJlbmRlcmVyOmwuYS5mdW5jLGNsZWFyVmFsdWVUZXh0OncsY2xlYXJhYmxlOmwuYS5ib29sLGNsb3NlT25TZWxlY3Q6bC5hLmJvb2wsZGVsZXRlUmVtb3ZlczpsLmEuYm9vbCxkZWxpbWl0ZXI6bC5hLnN0cmluZyxkaXNhYmxlZDpsLmEuYm9vbCxlc2NhcGVDbGVhcnNWYWx1ZTpsLmEuYm9vbCxmaWx0ZXJPcHRpb246bC5hLmZ1bmMsZmlsdGVyT3B0aW9uczpsLmEuYW55LGlkOmwuYS5zdHJpbmcsaWdub3JlQWNjZW50czpsLmEuYm9vbCxpZ25vcmVDYXNlOmwuYS5ib29sLGlucHV0UHJvcHM6bC5hLm9iamVjdCxpbnB1dFJlbmRlcmVyOmwuYS5mdW5jLGluc3RhbmNlSWQ6bC5hLnN0cmluZyxpc0xvYWRpbmc6bC5hLmJvb2wsam9pblZhbHVlczpsLmEuYm9vbCxsYWJlbEtleTpsLmEuc3RyaW5nLG1hdGNoUG9zOmwuYS5zdHJpbmcsbWF0Y2hQcm9wOmwuYS5zdHJpbmcsbWVudUJ1ZmZlcjpsLmEubnVtYmVyLG1lbnVDb250YWluZXJTdHlsZTpsLmEub2JqZWN0LG1lbnVSZW5kZXJlcjpsLmEuZnVuYyxtZW51U3R5bGU6bC5hLm9iamVjdCxtdWx0aTpsLmEuYm9vbCxuYW1lOmwuYS5zdHJpbmcsbm9SZXN1bHRzVGV4dDp3LG9uQmx1cjpsLmEuZnVuYyxvbkJsdXJSZXNldHNJbnB1dDpsLmEuYm9vbCxvbkNoYW5nZTpsLmEuZnVuYyxvbkNsb3NlOmwuYS5mdW5jLG9uQ2xvc2VSZXNldHNJbnB1dDpsLmEuYm9vbCxvbkZvY3VzOmwuYS5mdW5jLG9uSW5wdXRDaGFuZ2U6bC5hLmZ1bmMsb25JbnB1dEtleURvd246bC5hLmZ1bmMsb25NZW51U2Nyb2xsVG9Cb3R0b206bC5hLmZ1bmMsb25PcGVuOmwuYS5mdW5jLG9uU2VsZWN0UmVzZXRzSW5wdXQ6bC5hLmJvb2wsb25WYWx1ZUNsaWNrOmwuYS5mdW5jLG9wZW5PbkNsaWNrOmwuYS5ib29sLG9wZW5PbkZvY3VzOmwuYS5ib29sLG9wdGlvbkNsYXNzTmFtZTpsLmEuc3RyaW5nLG9wdGlvbkNvbXBvbmVudDpsLmEuZnVuYyxvcHRpb25SZW5kZXJlcjpsLmEuZnVuYyxvcHRpb25zOmwuYS5hcnJheSxwYWdlU2l6ZTpsLmEubnVtYmVyLHBsYWNlaG9sZGVyOncscmVtb3ZlU2VsZWN0ZWQ6bC5hLmJvb2wscmVxdWlyZWQ6bC5hLmJvb2wscmVzZXRWYWx1ZTpsLmEuYW55LHJ0bDpsLmEuYm9vbCxzY3JvbGxNZW51SW50b1ZpZXc6bC5hLmJvb2wsc2VhcmNoYWJsZTpsLmEuYm9vbCxzaW1wbGVWYWx1ZTpsLmEuYm9vbCxzdHlsZTpsLmEub2JqZWN0LHRhYkluZGV4Ok0sdGFiU2VsZWN0c1ZhbHVlOmwuYS5ib29sLHRyaW1GaWx0ZXI6bC5hLmJvb2wsdmFsdWU6bC5hLmFueSx2YWx1ZUNvbXBvbmVudDpsLmEuZnVuYyx2YWx1ZUtleTpsLmEuc3RyaW5nLHZhbHVlUmVuZGVyZXI6bC5hLmZ1bmMsd3JhcHBlclN0eWxlOmwuYS5vYmplY3R9LEYuZGVmYXVsdFByb3BzPXthcnJvd1JlbmRlcmVyOl8sYXV0b3NpemU6ITAsYmFja3NwYWNlUmVtb3ZlczohMCxiYWNrc3BhY2VUb1JlbW92ZU1lc3NhZ2U6IlByZXNzIGJhY2tzcGFjZSB0byByZW1vdmUge2xhYmVsfSIsY2xlYXJhYmxlOiEwLGNsZWFyQWxsVGV4dDoiQ2xlYXIgYWxsIixjbGVhclJlbmRlcmVyOnAsY2xlYXJWYWx1ZVRleHQ6IkNsZWFyIHZhbHVlIixjbG9zZU9uU2VsZWN0OiEwLGRlbGV0ZVJlbW92ZXM6ITAsZGVsaW1pdGVyOiIsIixkaXNhYmxlZDohMSxlc2NhcGVDbGVhcnNWYWx1ZTohMCxmaWx0ZXJPcHRpb25zOmIsaWdub3JlQWNjZW50czohMCxpZ25vcmVDYXNlOiEwLGlucHV0UHJvcHM6e30saXNMb2FkaW5nOiExLGpvaW5WYWx1ZXM6ITEsbGFiZWxLZXk6ImxhYmVsIixtYXRjaFBvczoiYW55IixtYXRjaFByb3A6ImFueSIsbWVudUJ1ZmZlcjowLG1lbnVSZW5kZXJlcjpFLG11bHRpOiExLG5vUmVzdWx0c1RleHQ6Ik5vIHJlc3VsdHMgZm91bmQiLG9uQmx1clJlc2V0c0lucHV0OiEwLG9uQ2xvc2VSZXNldHNJbnB1dDohMCxvblNlbGVjdFJlc2V0c0lucHV0OiEwLG9wZW5PbkNsaWNrOiEwLG9wdGlvbkNvbXBvbmVudDp4LHBhZ2VTaXplOjUscGxhY2Vob2xkZXI6IlNlbGVjdC4uLiIscmVtb3ZlU2VsZWN0ZWQ6ITAscmVxdWlyZWQ6ITEscnRsOiExLHNjcm9sbE1lbnVJbnRvVmlldzohMCxzZWFyY2hhYmxlOiEwLHNpbXBsZVZhbHVlOiExLHRhYlNlbGVjdHNWYWx1ZTohMCx0cmltRmlsdGVyOiEwLHZhbHVlQ29tcG9uZW50OkwsdmFsdWVLZXk6InZhbHVlIn07dmFyIEI9e2F1dG9sb2FkOmwuYS5ib29sLmlzUmVxdWlyZWQsY2FjaGU6bC5hLmFueSxjaGlsZHJlbjpsLmEuZnVuYy5pc1JlcXVpcmVkLGlnbm9yZUFjY2VudHM6bC5hLmJvb2wsaWdub3JlQ2FzZTpsLmEuYm9vbCxsb2FkT3B0aW9uczpsLmEuZnVuYy5pc1JlcXVpcmVkLGxvYWRpbmdQbGFjZWhvbGRlcjpsLmEub25lT2ZUeXBlKFtsLmEuc3RyaW5nLGwuYS5ub2RlXSksbXVsdGk6bC5hLmJvb2wsbm9SZXN1bHRzVGV4dDpsLmEub25lT2ZUeXBlKFtsLmEuc3RyaW5nLGwuYS5ub2RlXSksb25DaGFuZ2U6bC5hLmZ1bmMsb25JbnB1dENoYW5nZTpsLmEuZnVuYyxvcHRpb25zOmwuYS5hcnJheS5pc1JlcXVpcmVkLHBsYWNlaG9sZGVyOmwuYS5vbmVPZlR5cGUoW2wuYS5zdHJpbmcsbC5hLm5vZGVdKSxzZWFyY2hQcm9tcHRUZXh0OmwuYS5vbmVPZlR5cGUoW2wuYS5zdHJpbmcsbC5hLm5vZGVdKSx2YWx1ZTpsLmEuYW55fSxVPXt9LEc9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KEYsZSl9LHo9e2F1dG9sb2FkOiEwLGNhY2hlOlUsY2hpbGRyZW46RyxpZ25vcmVBY2NlbnRzOiEwLGlnbm9yZUNhc2U6ITAsbG9hZGluZ1BsYWNlaG9sZGVyOiJMb2FkaW5nLi4uIixvcHRpb25zOltdLHNlYXJjaFByb21wdFRleHQ6IlR5cGUgdG8gc2VhcmNoIn0sVj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7VCh0aGlzLHQpO3ZhciByPWoodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiByLl9jYWNoZT1lLmNhY2hlPT09VT97fTplLmNhY2hlLHIuc3RhdGU9e2lucHV0VmFsdWU6IiIsaXNMb2FkaW5nOiExLG9wdGlvbnM6ZS5vcHRpb25zfSxyLm9uSW5wdXRDaGFuZ2U9ci5vbklucHV0Q2hhbmdlLmJpbmQocikscn1yZXR1cm4gUyh0LGUpLEEodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hdXRvbG9hZCYmdGhpcy5sb2FkT3B0aW9ucygiIil9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXtlLm9wdGlvbnMhPT10aGlzLnByb3BzLm9wdGlvbnMmJnRoaXMuc2V0U3RhdGUoe29wdGlvbnM6ZS5vcHRpb25zfSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsYmFjaz1udWxsfX0se2tleToibG9hZE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLmxvYWRPcHRpb25zLHI9dGhpcy5fY2FjaGU7aWYociYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSkpcmV0dXJuIHRoaXMuX2NhbGxiYWNrPW51bGwsdm9pZCB0aGlzLnNldFN0YXRlKHtpc0xvYWRpbmc6ITEsb3B0aW9uczpyW2VdfSk7dmFyIG89ZnVuY3Rpb24gbihvLHMpe3ZhciBpPXMmJnMub3B0aW9uc3x8W107ciYmKHJbZV09aSksbj09PXQuX2NhbGxiYWNrJiYodC5fY2FsbGJhY2s9bnVsbCx0LnNldFN0YXRlKHtpc0xvYWRpbmc6ITEsb3B0aW9uczppfSkpfTt0aGlzLl9jYWxsYmFjaz1vO3ZhciBzPW4oZSxvKTtzJiZzLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIG8oMCxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIG8oKX0pLHRoaXMuX2NhbGxiYWNrJiYhdGhpcy5zdGF0ZS5pc0xvYWRpbmcmJnRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzohMH0pfX0se2tleToib25JbnB1dENoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuaWdub3JlQWNjZW50cyxyPXQuaWdub3JlQ2FzZSxvPXQub25JbnB1dENoYW5nZSxzPWU7aWYobyl7dmFyIGk9byhzKTtudWxsIT1pJiYib2JqZWN0IiE9PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOnYoaSkpJiYocz0iIitpKX12YXIgYT1zO3JldHVybiBuJiYoYT1tKGEpKSxyJiYoYT1hLnRvTG93ZXJDYXNlKCkpLHRoaXMuc2V0U3RhdGUoe2lucHV0VmFsdWU6c30pLHRoaXMubG9hZE9wdGlvbnMoYSksc319LHtrZXk6Im5vUmVzdWx0c1RleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubG9hZGluZ1BsYWNlaG9sZGVyLG49ZS5ub1Jlc3VsdHNUZXh0LHI9ZS5zZWFyY2hQcm9tcHRUZXh0LG89dGhpcy5zdGF0ZSxzPW8uaW5wdXRWYWx1ZTtyZXR1cm4gby5pc0xvYWRpbmc/dDpzJiZuP246cn19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0LmZvY3VzKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNoaWxkcmVuLHI9dC5sb2FkaW5nUGxhY2Vob2xkZXIsbz10LnBsYWNlaG9sZGVyLHM9dGhpcy5zdGF0ZSxpPXMuaXNMb2FkaW5nLGE9cy5vcHRpb25zLGw9e25vUmVzdWx0c1RleHQ6dGhpcy5ub1Jlc3VsdHNUZXh0KCkscGxhY2Vob2xkZXI6aT9yOm8sb3B0aW9uczppJiZyP1tdOmEscmVmOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbGVjdD10fX07cmV0dXJuIG4oTyh7fSx0aGlzLnByb3BzLGwse2lzTG9hZGluZzppLG9uSW5wdXRDaGFuZ2U6dGhpcy5vbklucHV0Q2hhbmdlfSkpfX1dKSx0fSh1LkNvbXBvbmVudCk7Vi5wcm9wVHlwZXM9QixWLmRlZmF1bHRQcm9wcz16O3ZhciBXPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtUKHRoaXMsdCk7dmFyIHI9aih0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSxuKSk7cmV0dXJuIHIuZmlsdGVyT3B0aW9ucz1yLmZpbHRlck9wdGlvbnMuYmluZChyKSxyLm1lbnVSZW5kZXJlcj1yLm1lbnVSZW5kZXJlci5iaW5kKHIpLHIub25JbnB1dEtleURvd249ci5vbklucHV0S2V5RG93bi5iaW5kKHIpLHIub25JbnB1dENoYW5nZT1yLm9uSW5wdXRDaGFuZ2UuYmluZChyKSxyLm9uT3B0aW9uU2VsZWN0PXIub25PcHRpb25TZWxlY3QuYmluZChyKSxyfXJldHVybiBTKHQsZSksQSh0LFt7a2V5OiJjcmVhdGVOZXdPcHRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaXNWYWxpZE5ld09wdGlvbixuPWUubmV3T3B0aW9uQ3JlYXRvcixyPWUub25OZXdPcHRpb25DbGljayxvPWUub3B0aW9ucyxzPXZvaWQgMD09PW8/W106bztpZih0KHtsYWJlbDp0aGlzLmlucHV0VmFsdWV9KSl7dmFyIGk9bih7bGFiZWw6dGhpcy5pbnB1dFZhbHVlLGxhYmVsS2V5OnRoaXMubGFiZWxLZXksdmFsdWVLZXk6dGhpcy52YWx1ZUtleX0pO3RoaXMuaXNPcHRpb25VbmlxdWUoe29wdGlvbjppLG9wdGlvbnM6c30pJiYocj9yKGkpOihzLnVuc2hpZnQoaSksdGhpcy5zZWxlY3Quc2VsZWN0VmFsdWUoaSkpKX19fSx7a2V5OiJmaWx0ZXJPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmZpbHRlck9wdGlvbnMsbj1lLmlzVmFsaWROZXdPcHRpb24scj1lLnByb21wdFRleHRDcmVhdG9yLG89KGFyZ3VtZW50cy5sZW5ndGg8PTI/dm9pZCAwOmFyZ3VtZW50c1syXSl8fFtdLHM9dC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKXx8W107aWYobih7bGFiZWw6dGhpcy5pbnB1dFZhbHVlfSkpe3ZhciBpPXRoaXMucHJvcHMubmV3T3B0aW9uQ3JlYXRvcixhPWkoe2xhYmVsOnRoaXMuaW5wdXRWYWx1ZSxsYWJlbEtleTp0aGlzLmxhYmVsS2V5LHZhbHVlS2V5OnRoaXMudmFsdWVLZXl9KTtpZih0aGlzLmlzT3B0aW9uVW5pcXVlKHtvcHRpb246YSxvcHRpb25zOm8uY29uY2F0KHMpfSkpe3ZhciBsPXIodGhpcy5pbnB1dFZhbHVlKTt0aGlzLl9jcmVhdGVQbGFjZWhvbGRlck9wdGlvbj1pKHtsYWJlbDpsLGxhYmVsS2V5OnRoaXMubGFiZWxLZXksdmFsdWVLZXk6dGhpcy52YWx1ZUtleX0pLHMudW5zaGlmdCh0aGlzLl9jcmVhdGVQbGFjZWhvbGRlck9wdGlvbil9fXJldHVybiBzfX0se2tleToiaXNPcHRpb25VbmlxdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9uLG49ZS5vcHRpb25zLHI9dGhpcy5wcm9wcy5pc09wdGlvblVuaXF1ZTtyZXR1cm4gbj1ufHx0aGlzLnByb3BzLm9wdGlvbnMscih7bGFiZWxLZXk6dGhpcy5sYWJlbEtleSxvcHRpb246dCxvcHRpb25zOm4sdmFsdWVLZXk6dGhpcy52YWx1ZUtleX0pfX0se2tleToibWVudVJlbmRlcmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCx0aGlzLnByb3BzLm1lbnVSZW5kZXJlcikoTyh7fSxlLHtvblNlbGVjdDp0aGlzLm9uT3B0aW9uU2VsZWN0LHNlbGVjdFZhbHVlOnRoaXMub25PcHRpb25TZWxlY3R9KSl9fSx7a2V5OiJvbklucHV0Q2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2U7cmV0dXJuIHRoaXMuaW5wdXRWYWx1ZT1lLHQmJih0aGlzLmlucHV0VmFsdWU9dChlKSksdGhpcy5pbnB1dFZhbHVlfX0se2tleToib25JbnB1dEtleURvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LnNob3VsZEtleURvd25FdmVudENyZWF0ZU5ld09wdGlvbixyPXQub25JbnB1dEtleURvd24sbz10aGlzLnNlbGVjdC5nZXRGb2N1c2VkT3B0aW9uKCk7byYmbz09PXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyT3B0aW9uJiZuKHtrZXlDb2RlOmUua2V5Q29kZX0pPyh0aGlzLmNyZWF0ZU5ld09wdGlvbigpLGUucHJldmVudERlZmF1bHQoKSk6ciYmcihlKX19LHtrZXk6Im9uT3B0aW9uU2VsZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtlPT09dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJPcHRpb24/dGhpcy5jcmVhdGVOZXdPcHRpb24oKTp0aGlzLnNlbGVjdC5zZWxlY3RWYWx1ZShlKX19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0LmZvY3VzKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LnJlZixyPVIodCxbInJlZiJdKSxvPXRoaXMucHJvcHMuY2hpbGRyZW47cmV0dXJuIG98fChvPVkpLG8oTyh7fSxyLHthbGxvd0NyZWF0ZTohMCxmaWx0ZXJPcHRpb25zOnRoaXMuZmlsdGVyT3B0aW9ucyxtZW51UmVuZGVyZXI6dGhpcy5tZW51UmVuZGVyZXIsb25JbnB1dENoYW5nZTp0aGlzLm9uSW5wdXRDaGFuZ2Usb25JbnB1dEtleURvd246dGhpcy5vbklucHV0S2V5RG93bixyZWY6ZnVuY3Rpb24odCl7ZS5zZWxlY3Q9dCx0JiYoZS5sYWJlbEtleT10LnByb3BzLmxhYmVsS2V5LGUudmFsdWVLZXk9dC5wcm9wcy52YWx1ZUtleSksbiYmbih0KX19KSl9fV0pLHR9KGMuYS5Db21wb25lbnQpLFk9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KEYsZSl9LHE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb24sbj1lLm9wdGlvbnMscj1lLmxhYmVsS2V5LG89ZS52YWx1ZUtleTtyZXR1cm4hbnx8IW4ubGVuZ3RofHwwPT09bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGVbcl09PT10W3JdfHxlW29dPT09dFtvXX0pLmxlbmd0aH0sSz1mdW5jdGlvbihlKXtyZXR1cm4hIWUubGFiZWx9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxuPWUubGFiZWxLZXkscj1lLnZhbHVlS2V5LG89e307cmV0dXJuIG9bcl09dCxvW25dPXQsby5jbGFzc05hbWU9IlNlbGVjdC1jcmVhdGUtb3B0aW9uLXBsYWNlaG9sZGVyIixvfSwkPWZ1bmN0aW9uKGUpe3JldHVybidDcmVhdGUgb3B0aW9uICInK2UrJyInfSxRPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTpjYXNlIDEzOmNhc2UgMTg4OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtXLmlzT3B0aW9uVW5pcXVlPXEsVy5pc1ZhbGlkTmV3T3B0aW9uPUssVy5uZXdPcHRpb25DcmVhdG9yPVgsVy5wcm9tcHRUZXh0Q3JlYXRvcj0kLFcuc2hvdWxkS2V5RG93bkV2ZW50Q3JlYXRlTmV3T3B0aW9uPVEsVy5kZWZhdWx0UHJvcHM9e2ZpbHRlck9wdGlvbnM6Yixpc09wdGlvblVuaXF1ZTpxLGlzVmFsaWROZXdPcHRpb246SyxtZW51UmVuZGVyZXI6RSxuZXdPcHRpb25DcmVhdG9yOlgscHJvbXB0VGV4dENyZWF0b3I6JCxzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb246UX0sVy5wcm9wVHlwZXM9e2NoaWxkcmVuOmwuYS5mdW5jLGZpbHRlck9wdGlvbnM6bC5hLmFueSxpc09wdGlvblVuaXF1ZTpsLmEuZnVuYyxpc1ZhbGlkTmV3T3B0aW9uOmwuYS5mdW5jLG1lbnVSZW5kZXJlcjpsLmEuYW55LG5ld09wdGlvbkNyZWF0b3I6bC5hLmZ1bmMsb25JbnB1dENoYW5nZTpsLmEuZnVuYyxvbklucHV0S2V5RG93bjpsLmEuZnVuYyxvbk5ld09wdGlvbkNsaWNrOmwuYS5mdW5jLG9wdGlvbnM6bC5hLmFycmF5LHByb21wdFRleHRDcmVhdG9yOmwuYS5mdW5jLHJlZjpsLmEuZnVuYyxzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb246bC5hLmZ1bmN9O3ZhciBKPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gVCh0aGlzLHQpLGoodGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gUyh0LGUpLEEodCxbe2tleToiZm9jdXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBjLmEuY3JlYXRlRWxlbWVudChWLHRoaXMucHJvcHMsZnVuY3Rpb24odCl7dmFyIG49dC5yZWYscj1SKHQsWyJyZWYiXSksbz1uO3JldHVybiBjLmEuY3JlYXRlRWxlbWVudChXLHIsZnVuY3Rpb24odCl7dmFyIG49dC5yZWYscj1SKHQsWyJyZWYiXSkscz1uO3JldHVybiBlLnByb3BzLmNoaWxkcmVuKE8oe30scix7cmVmOmZ1bmN0aW9uKHQpe3ModCksbyh0KSxlLnNlbGVjdD10fX0pKX0pfSl9fV0pLHR9KGMuYS5Db21wb25lbnQpLFo9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuYS5jcmVhdGVFbGVtZW50KEYsZSl9O0oucHJvcFR5cGVzPXtjaGlsZHJlbjpsLmEuZnVuYy5pc1JlcXVpcmVkfSxKLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46Wn0sRi5Bc3luYz1WLEYuQXN5bmNDcmVhdGFibGU9SixGLkNyZWF0YWJsZT1XLEYuVmFsdWU9TCxGLk9wdGlvbj14LHQuZGVmYXVsdD1GfSwiLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3BsaXQtcGFuZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNwbGl0LXBhbmUvbGliL1NwbGl0UGFuZS5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3BsaXQtcGFuZS9saWIvUGFuZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvaW5saW5lLXN0eWxlLXByZWZpeGVyL2R5bmFtaWMvaW5kZXguanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1wcm9wdHlwZS9zcmMvaW5kZXguanMiKSxoPXIobSksZz0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvcj9uYXZpZ2F0b3IudXNlckFnZW50OiJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjEpIEFwcGxlV2ViS2l0LzUzNy4yIChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJpLzUzNy4yIixiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpO3ZhciBuPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5zdGF0ZT17c2l6ZTpuLnByb3BzLnNpemV9LG59cmV0dXJuIGkodCxlKSxsKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixuPWUuY2xhc3NOYW1lLHI9ZS5wcmVmaXhlcixvPWUuc3BsaXQscz1lLnN0eWxlLGk9dGhpcy5zdGF0ZS5zaXplLGw9WyJQYW5lIixvLG5dLHU9YSh7fSxzfHx7fSx7ZmxleDoxLHBvc2l0aW9uOiJyZWxhdGl2ZSIsb3V0bGluZToibm9uZSJ9KTtyZXR1cm4gdm9pZCAwIT09aSYmKCJ2ZXJ0aWNhbCI9PT1vP3Uud2lkdGg9aToodS5oZWlnaHQ9aSx1LmRpc3BsYXk9ImZsZXgiKSx1LmZsZXg9Im5vbmUiKSxjLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmwuam9pbigiICIpLHN0eWxlOnIucHJlZml4KHUpfSx0KX19XSksdH0oYy5kZWZhdWx0LkNvbXBvbmVudCk7Yi5wcm9wVHlwZXM9e2NsYXNzTmFtZTpfLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsY2hpbGRyZW46Xy5kZWZhdWx0Lm5vZGUuaXNSZXF1aXJlZCxwcmVmaXhlcjpfLmRlZmF1bHQuaW5zdGFuY2VPZihmLmRlZmF1bHQpLmlzUmVxdWlyZWQsc2l6ZTpfLmRlZmF1bHQub25lT2ZUeXBlKFtfLmRlZmF1bHQuc3RyaW5nLF8uZGVmYXVsdC5udW1iZXJdKSxzcGxpdDpfLmRlZmF1bHQub25lT2YoWyJ2ZXJ0aWNhbCIsImhvcml6b250YWwiXSksc3R5bGU6aC5kZWZhdWx0fSxiLmRlZmF1bHRQcm9wcz17cHJlZml4ZXI6bmV3IGYuZGVmYXVsdCh7dXNlckFnZW50Omd9KX0sdC5kZWZhdWx0PWIsZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNwbGl0LXBhbmUvbGliL1Jlc2l6ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SRVNJWkVSX0RFRkFVTFRfQ0xBU1NOQU1FPXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2lubGluZS1zdHlsZS1wcmVmaXhlci9keW5hbWljL2luZGV4LmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtcHJvcHR5cGUvc3JjL2luZGV4LmpzIiksbT1yKGYpLGg9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLnVzZXJBZ2VudDoiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xKSBBcHBsZVdlYktpdC81MzcuMiAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS81MzcuMiIsZz10LlJFU0laRVJfREVGQVVMVF9DTEFTU05BTUU9IlJlc2l6ZXIiLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBvKHRoaXMsdCkscyh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBpKHQsZSksYSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5vbkNsaWNrLHI9ZS5vbkRvdWJsZUNsaWNrLG89ZS5vbk1vdXNlRG93bixzPWUub25Ub3VjaEVuZCxpPWUub25Ub3VjaFN0YXJ0LGE9ZS5wcmVmaXhlcixsPWUucmVzaXplckNsYXNzTmFtZSxjPWUuc3BsaXQsZD1lLnN0eWxlLF89W2wsYyx0XTtyZXR1cm4gdS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Xy5qb2luKCIgIiksc3R5bGU6YS5wcmVmaXgoZCl8fHt9LG9uTW91c2VEb3duOmZ1bmN0aW9uKGUpe3JldHVybiBvKGUpfSxvblRvdWNoU3RhcnQ6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGkoZSl9LG9uVG91Y2hFbmQ6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHMoZSl9LG9uQ2xpY2s6ZnVuY3Rpb24oZSl7biYmKGUucHJldmVudERlZmF1bHQoKSxuKGUpKX0sb25Eb3VibGVDbGljazpmdW5jdGlvbihlKXtyJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHIoZSkpfX0pfX1dKSx0fSh1LmRlZmF1bHQuQ29tcG9uZW50KTtiLnByb3BUeXBlcz17Y2xhc3NOYW1lOmQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkNsaWNrOmQuZGVmYXVsdC5mdW5jLG9uRG91YmxlQ2xpY2s6ZC5kZWZhdWx0LmZ1bmMsb25Nb3VzZURvd246ZC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvblRvdWNoU3RhcnQ6ZC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvblRvdWNoRW5kOmQuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQscHJlZml4ZXI6ZC5kZWZhdWx0Lmluc3RhbmNlT2YocC5kZWZhdWx0KS5pc1JlcXVpcmVkLHNwbGl0OmQuZGVmYXVsdC5vbmVPZihbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKSxzdHlsZTptLmRlZmF1bHQscmVzaXplckNsYXNzTmFtZTpkLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LGIuZGVmYXVsdFByb3BzPXtwcmVmaXhlcjpuZXcgcC5kZWZhdWx0KHt1c2VyQWdlbnQ6aH0pLHJlc2l6ZXJDbGFzc05hbWU6Z30sdC5kZWZhdWx0PWJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC1zcGxpdC1wYW5lL2xpYi9TcGxpdFBhbmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUsdCl7aWYoZS5zZWxlY3Rpb24pZS5zZWxlY3Rpb24uZW1wdHkoKTtlbHNlIHRyeXt0LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpfWNhdGNoKGUpe319T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9pbmxpbmUtc3R5bGUtcHJlZml4ZXIvZHluYW1pYy9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXByb3B0eXBlL3NyYy9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNwbGl0LXBhbmUvbGliL1BhbmUuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1zcGxpdC1wYW5lL2xpYi9SZXNpemVyLmpzIiksQT1yKFQpLEM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLnVzZXJBZ2VudDoiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xKSBBcHBsZVdlYktpdC81MzcuMiAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS81MzcuMiIsTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7byh0aGlzLHQpO3ZhciBlPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzKSk7cmV0dXJuIGUub25Nb3VzZURvd249ZS5vbk1vdXNlRG93bi5iaW5kKGUpLGUub25Ub3VjaFN0YXJ0PWUub25Ub3VjaFN0YXJ0LmJpbmQoZSksZS5vbk1vdXNlTW92ZT1lLm9uTW91c2VNb3ZlLmJpbmQoZSksZS5vblRvdWNoTW92ZT1lLm9uVG91Y2hNb3ZlLmJpbmQoZSksZS5vbk1vdXNlVXA9ZS5vbk1vdXNlVXAuYmluZChlKSxlLnN0YXRlPXthY3RpdmU6ITEscmVzaXplZDohMX0sZX1yZXR1cm4gaSh0LGUpLHUodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTaXplKHRoaXMucHJvcHMsdGhpcy5zdGF0ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5vbk1vdXNlVXApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U2l6ZShlLHRoaXMuc3RhdGUpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5vbk1vdXNlVXApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlKX19LHtrZXk6Im9uTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1sKHt9LGUse3RvdWNoZXM6W3tjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WX1dfSk7dGhpcy5vblRvdWNoU3RhcnQodCl9fSx7a2V5OiJvblRvdWNoU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmFsbG93UmVzaXplLHI9dC5vbkRyYWdTdGFydGVkLG89dC5zcGxpdDtpZihuKXthKGRvY3VtZW50LHdpbmRvdyk7dmFyIHM9InZlcnRpY2FsIj09PW8/ZS50b3VjaGVzWzBdLmNsaWVudFg6ZS50b3VjaGVzWzBdLmNsaWVudFk7ImZ1bmN0aW9uIj09dHlwZW9mIHImJnIoKSx0aGlzLnNldFN0YXRlKHthY3RpdmU6ITAscG9zaXRpb246c30pfX19LHtrZXk6Im9uTW91c2VNb3ZlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1sKHt9LGUse3RvdWNoZXM6W3tjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WX1dfSk7dGhpcy5vblRvdWNoTW92ZSh0KX19LHtrZXk6Im9uVG91Y2hNb3ZlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5hbGxvd1Jlc2l6ZSxyPXQubWF4U2l6ZSxvPXQubWluU2l6ZSxzPXQub25DaGFuZ2UsaT10LnNwbGl0LGw9dC5zdGVwLHU9dGhpcy5zdGF0ZSxjPXUuYWN0aXZlLGQ9dS5wb3NpdGlvbjtpZihuJiZjKXthKGRvY3VtZW50LHdpbmRvdyk7dmFyIF89ImZpcnN0Ij09PXRoaXMucHJvcHMucHJpbWFyeSxwPV8/dGhpcy5wYW5lMTp0aGlzLnBhbmUyO2lmKHApe3ZhciBmPW0uZGVmYXVsdC5maW5kRE9NTm9kZShwKTtpZihmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGg9Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxnPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LGI9InZlcnRpY2FsIj09PWk/ZS50b3VjaGVzWzBdLmNsaWVudFg6ZS50b3VjaGVzWzBdLmNsaWVudFksRT0idmVydGljYWwiPT09aT9oOmcseT1kLWI7aWYobCl7aWYoTWF0aC5hYnMoeSk8bClyZXR1cm47eT1+fih5L2wpKmx9dmFyIHY9Xz95Oi15LFQ9cjtpZih2b2lkIDAhPT1yJiZyPD0wKXt2YXIgQT10aGlzLnNwbGl0UGFuZTtUPSJ2ZXJ0aWNhbCI9PT1pP0EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgrcjpBLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCtyfXZhciBDPUUtdixPPWQteTtDPG8/Qz1vOnZvaWQgMCE9PXImJkM+VD9DPVQ6dGhpcy5zZXRTdGF0ZSh7cG9zaXRpb246TyxyZXNpemVkOiEwfSkscyYmcyhDKSx0aGlzLnNldFN0YXRlKHtkcmFnZ2VkU2l6ZTpDfSkscC5zZXRTdGF0ZSh7c2l6ZTpDfSl9fX19fSx7a2V5OiJvbk1vdXNlVXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWxsb3dSZXNpemUsbj1lLm9uRHJhZ0ZpbmlzaGVkLHI9dGhpcy5zdGF0ZSxvPXIuYWN0aXZlLHM9ci5kcmFnZ2VkU2l6ZTt0JiZvJiYoImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4ocyksdGhpcy5zZXRTdGF0ZSh7YWN0aXZlOiExfSkpfX0se2tleToic2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnByb3BzLnByaW1hcnkscj0iZmlyc3QiPT09bj90aGlzLnBhbmUxOnRoaXMucGFuZTIsbz12b2lkIDA7ciYmKG89ZS5zaXplfHx0JiZ0LmRyYWdnZWRTaXplfHxlLmRlZmF1bHRTaXplfHxlLm1pblNpemUsci5zZXRTdGF0ZSh7c2l6ZTpvfSksZS5zaXplIT09dC5kcmFnZ2VkU2l6ZSYmdGhpcy5zZXRTdGF0ZSh7ZHJhZ2dlZFNpemU6b30pKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuYWxsb3dSZXNpemUscj10LmNoaWxkcmVuLG89dC5jbGFzc05hbWUscz10LmRlZmF1bHRTaXplLGk9dC5taW5TaXplLGE9dC5vblJlc2l6ZXJDbGljayx1PXQub25SZXNpemVyRG91YmxlQ2xpY2ssYz10LnBhbmVDbGFzc05hbWUsXz10LnBhbmUxQ2xhc3NOYW1lLHA9dC5wYW5lMkNsYXNzTmFtZSxmPXQucGFuZVN0eWxlLG09dC5wYW5lMVN0eWxlLGg9dC5wYW5lMlN0eWxlLGc9dC5wcmltYXJ5LGI9dC5wcmVmaXhlcixFPXQucmVzaXplckNsYXNzTmFtZSx5PXQucmVzaXplclN0eWxlLEM9dC5zaXplLE89dC5zcGxpdCxTPXQuc3R5bGUsUj1uPyIiOiJkaXNhYmxlZCIsaj1FP0UrIiAiK1QuUkVTSVpFUl9ERUZBVUxUX0NMQVNTTkFNRTpFLHg9bCh7fSx7ZGlzcGxheToiZmxleCIsZmxleDoxLGhlaWdodDoiMTAwJSIscG9zaXRpb246ImFic29sdXRlIixvdXRsaW5lOiJub25lIixvdmVyZmxvdzoiaGlkZGVuIixNb3pVc2VyU2VsZWN0OiJ0ZXh0IixXZWJraXRVc2VyU2VsZWN0OiJ0ZXh0Iixtc1VzZXJTZWxlY3Q6InRleHQiLHVzZXJTZWxlY3Q6InRleHQifSxTfHx7fSk7InZlcnRpY2FsIj09PU8/bCh4LHtmbGV4RGlyZWN0aW9uOiJyb3ciLGxlZnQ6MCxyaWdodDowfSk6bCh4LHtib3R0b206MCxmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG1pbkhlaWdodDoiMTAwJSIsdG9wOjAsd2lkdGg6IjEwMCUifSk7dmFyIEw9WyJTcGxpdFBhbmUiLG8sTyxSXSxEPWIucHJlZml4KGwoe30sZnx8e30sbXx8e30pKSx3PWIucHJlZml4KGwoe30sZnx8e30saHx8e30pKSxNPVsiUGFuZTEiLGMsX10uam9pbigiICIpLGs9WyJQYW5lMiIsYyxwXS5qb2luKCIgIik7cmV0dXJuIGQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TC5qb2luKCIgIikscmVmOmZ1bmN0aW9uKHQpe2Uuc3BsaXRQYW5lPXR9LHN0eWxlOmIucHJlZml4KHgpfSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh2LmRlZmF1bHQse2NsYXNzTmFtZTpNLGtleToicGFuZTEiLHJlZjpmdW5jdGlvbih0KXtlLnBhbmUxPXR9LHNpemU6ImZpcnN0Ij09PWc/Q3x8c3x8aTp2b2lkIDAsc3BsaXQ6TyxzdHlsZTpEfSxyWzBdKSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLmRlZmF1bHQse2NsYXNzTmFtZTpSLG9uQ2xpY2s6YSxvbkRvdWJsZUNsaWNrOnUsb25Nb3VzZURvd246dGhpcy5vbk1vdXNlRG93bixvblRvdWNoU3RhcnQ6dGhpcy5vblRvdWNoU3RhcnQsb25Ub3VjaEVuZDp0aGlzLm9uTW91c2VVcCxrZXk6InJlc2l6ZXIiLHJlZjpmdW5jdGlvbih0KXtlLnJlc2l6ZXI9dH0scmVzaXplckNsYXNzTmFtZTpqLHNwbGl0Ok8sc3R5bGU6eXx8e319KSxkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh2LmRlZmF1bHQse2NsYXNzTmFtZTprLGtleToicGFuZTIiLHJlZjpmdW5jdGlvbih0KXtlLnBhbmUyPXR9LHNpemU6InNlY29uZCI9PT1nP0N8fHN8fGk6dm9pZCAwLHNwbGl0Ok8sc3R5bGU6d30sclsxXSkpfX1dKSx0fShkLmRlZmF1bHQuQ29tcG9uZW50KTtPLnByb3BUeXBlcz17YWxsb3dSZXNpemU6cC5kZWZhdWx0LmJvb2wsY2hpbGRyZW46cC5kZWZhdWx0LmFycmF5T2YocC5kZWZhdWx0Lm5vZGUpLmlzUmVxdWlyZWQsY2xhc3NOYW1lOnAuZGVmYXVsdC5zdHJpbmcscHJpbWFyeTpwLmRlZmF1bHQub25lT2YoWyJmaXJzdCIsInNlY29uZCJdKSxtaW5TaXplOnAuZGVmYXVsdC5vbmVPZlR5cGUoW3AuZGVmYXVsdC5zdHJpbmcscC5kZWZhdWx0Lm51bWJlcl0pLG1heFNpemU6cC5kZWZhdWx0Lm9uZU9mVHlwZShbcC5kZWZhdWx0LnN0cmluZyxwLmRlZmF1bHQubnVtYmVyXSksZGVmYXVsdFNpemU6cC5kZWZhdWx0Lm9uZU9mVHlwZShbcC5kZWZhdWx0LnN0cmluZyxwLmRlZmF1bHQubnVtYmVyXSksc2l6ZTpwLmRlZmF1bHQub25lT2ZUeXBlKFtwLmRlZmF1bHQuc3RyaW5nLHAuZGVmYXVsdC5udW1iZXJdKSxzcGxpdDpwLmRlZmF1bHQub25lT2YoWyJ2ZXJ0aWNhbCIsImhvcml6b250YWwiXSksb25EcmFnU3RhcnRlZDpwLmRlZmF1bHQuZnVuYyxvbkRyYWdGaW5pc2hlZDpwLmRlZmF1bHQuZnVuYyxvbkNoYW5nZTpwLmRlZmF1bHQuZnVuYyxvblJlc2l6ZXJDbGljazpwLmRlZmF1bHQuZnVuYyxvblJlc2l6ZXJEb3VibGVDbGljazpwLmRlZmF1bHQuZnVuYyxwcmVmaXhlcjpwLmRlZmF1bHQuaW5zdGFuY2VPZihnLmRlZmF1bHQpLmlzUmVxdWlyZWQsc3R5bGU6RS5kZWZhdWx0LHJlc2l6ZXJTdHlsZTpFLmRlZmF1bHQscGFuZUNsYXNzTmFtZTpwLmRlZmF1bHQuc3RyaW5nLHBhbmUxQ2xhc3NOYW1lOnAuZGVmYXVsdC5zdHJpbmcscGFuZTJDbGFzc05hbWU6cC5kZWZhdWx0LnN0cmluZyxwYW5lU3R5bGU6RS5kZWZhdWx0LHBhbmUxU3R5bGU6RS5kZWZhdWx0LHBhbmUyU3R5bGU6RS5kZWZhdWx0LHJlc2l6ZXJDbGFzc05hbWU6cC5kZWZhdWx0LnN0cmluZyxzdGVwOnAuZGVmYXVsdC5udW1iZXJ9LE8uZGVmYXVsdFByb3BzPXthbGxvd1Jlc2l6ZTohMCxtaW5TaXplOjUwLHByZWZpeGVyOm5ldyBnLmRlZmF1bHQoe3VzZXJBZ2VudDpDfSkscHJpbWFyeToiZmlyc3QiLHNwbGl0OiJ2ZXJ0aWNhbCIscGFuZUNsYXNzTmFtZToiIixwYW5lMUNsYXNzTmFtZToiIixwYW5lMkNsYXNzTmFtZToiIn0sdC5kZWZhdWx0PU8sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXByb3B0eXBlL3NyYy9jc3MtcHJvcGVydGllcy5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9WyJhbGlnbkNvbnRlbnQiLCJNb3pBbGlnbkNvbnRlbnQiLCJXZWJraXRBbGlnbkNvbnRlbnQiLCJNU0FsaWduQ29udGVudCIsIk9BbGlnbkNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiTW96QWxpZ25JdGVtcyIsIldlYmtpdEFsaWduSXRlbXMiLCJNU0FsaWduSXRlbXMiLCJPQWxpZ25JdGVtcyIsImFsaWduU2VsZiIsIk1vekFsaWduU2VsZiIsIldlYmtpdEFsaWduU2VsZiIsIk1TQWxpZ25TZWxmIiwiT0FsaWduU2VsZiIsImFsbCIsIk1vekFsbCIsIldlYmtpdEFsbCIsIk1TQWxsIiwiT0FsbCIsImFuaW1hdGlvbiIsIk1vekFuaW1hdGlvbiIsIldlYmtpdEFuaW1hdGlvbiIsIk1TQW5pbWF0aW9uIiwiT0FuaW1hdGlvbiIsImFuaW1hdGlvbkRlbGF5IiwiTW96QW5pbWF0aW9uRGVsYXkiLCJXZWJraXRBbmltYXRpb25EZWxheSIsIk1TQW5pbWF0aW9uRGVsYXkiLCJPQW5pbWF0aW9uRGVsYXkiLCJhbmltYXRpb25EaXJlY3Rpb24iLCJNb3pBbmltYXRpb25EaXJlY3Rpb24iLCJXZWJraXRBbmltYXRpb25EaXJlY3Rpb24iLCJNU0FuaW1hdGlvbkRpcmVjdGlvbiIsIk9BbmltYXRpb25EaXJlY3Rpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsIk1vekFuaW1hdGlvbkR1cmF0aW9uIiwiV2Via2l0QW5pbWF0aW9uRHVyYXRpb24iLCJNU0FuaW1hdGlvbkR1cmF0aW9uIiwiT0FuaW1hdGlvbkR1cmF0aW9uIiwiYW5pbWF0aW9uRmlsbE1vZGUiLCJNb3pBbmltYXRpb25GaWxsTW9kZSIsIldlYmtpdEFuaW1hdGlvbkZpbGxNb2RlIiwiTVNBbmltYXRpb25GaWxsTW9kZSIsIk9BbmltYXRpb25GaWxsTW9kZSIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCIsIk1TQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJPQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJhbmltYXRpb25OYW1lIiwiTW96QW5pbWF0aW9uTmFtZSIsIldlYmtpdEFuaW1hdGlvbk5hbWUiLCJNU0FuaW1hdGlvbk5hbWUiLCJPQW5pbWF0aW9uTmFtZSIsImFuaW1hdGlvblBsYXlTdGF0ZSIsIk1vekFuaW1hdGlvblBsYXlTdGF0ZSIsIldlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZSIsIk1TQW5pbWF0aW9uUGxheVN0YXRlIiwiT0FuaW1hdGlvblBsYXlTdGF0ZSIsImFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uIiwiTW96QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24iLCJXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbiIsIk1TQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24iLCJPQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJNb3pCYWNrZmFjZVZpc2liaWxpdHkiLCJXZWJraXRCYWNrZmFjZVZpc2liaWxpdHkiLCJNU0JhY2tmYWNlVmlzaWJpbGl0eSIsIk9CYWNrZmFjZVZpc2liaWxpdHkiLCJiYWNrZ3JvdW5kIiwiTW96QmFja2dyb3VuZCIsIldlYmtpdEJhY2tncm91bmQiLCJNU0JhY2tncm91bmQiLCJPQmFja2dyb3VuZCIsImJhY2tncm91bmRBdHRhY2htZW50IiwiTW96QmFja2dyb3VuZEF0dGFjaG1lbnQiLCJXZWJraXRCYWNrZ3JvdW5kQXR0YWNobWVudCIsIk1TQmFja2dyb3VuZEF0dGFjaG1lbnQiLCJPQmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kQmxlbmRNb2RlIiwiTW96QmFja2dyb3VuZEJsZW5kTW9kZSIsIldlYmtpdEJhY2tncm91bmRCbGVuZE1vZGUiLCJNU0JhY2tncm91bmRCbGVuZE1vZGUiLCJPQmFja2dyb3VuZEJsZW5kTW9kZSIsImJhY2tncm91bmRDbGlwIiwiTW96QmFja2dyb3VuZENsaXAiLCJXZWJraXRCYWNrZ3JvdW5kQ2xpcCIsIk1TQmFja2dyb3VuZENsaXAiLCJPQmFja2dyb3VuZENsaXAiLCJiYWNrZ3JvdW5kQ29sb3IiLCJNb3pCYWNrZ3JvdW5kQ29sb3IiLCJXZWJraXRCYWNrZ3JvdW5kQ29sb3IiLCJNU0JhY2tncm91bmRDb2xvciIsIk9CYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJNb3pCYWNrZ3JvdW5kSW1hZ2UiLCJXZWJraXRCYWNrZ3JvdW5kSW1hZ2UiLCJNU0JhY2tncm91bmRJbWFnZSIsIk9CYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kT3JpZ2luIiwiTW96QmFja2dyb3VuZE9yaWdpbiIsIldlYmtpdEJhY2tncm91bmRPcmlnaW4iLCJNU0JhY2tncm91bmRPcmlnaW4iLCJPQmFja2dyb3VuZE9yaWdpbiIsImJhY2tncm91bmRQb3NpdGlvbiIsIk1vekJhY2tncm91bmRQb3NpdGlvbiIsIldlYmtpdEJhY2tncm91bmRQb3NpdGlvbiIsIk1TQmFja2dyb3VuZFBvc2l0aW9uIiwiT0JhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJNb3pCYWNrZ3JvdW5kUmVwZWF0IiwiV2Via2l0QmFja2dyb3VuZFJlcGVhdCIsIk1TQmFja2dyb3VuZFJlcGVhdCIsIk9CYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJNb3pCYWNrZ3JvdW5kU2l6ZSIsIldlYmtpdEJhY2tncm91bmRTaXplIiwiTVNCYWNrZ3JvdW5kU2l6ZSIsIk9CYWNrZ3JvdW5kU2l6ZSIsImJsb2NrU2l6ZSIsIk1vekJsb2NrU2l6ZSIsIldlYmtpdEJsb2NrU2l6ZSIsIk1TQmxvY2tTaXplIiwiT0Jsb2NrU2l6ZSIsImJvcmRlciIsIk1vekJvcmRlciIsIldlYmtpdEJvcmRlciIsIk1TQm9yZGVyIiwiT0JvcmRlciIsImJvcmRlckJsb2NrRW5kIiwiTW96Qm9yZGVyQmxvY2tFbmQiLCJXZWJraXRCb3JkZXJCbG9ja0VuZCIsIk1TQm9yZGVyQmxvY2tFbmQiLCJPQm9yZGVyQmxvY2tFbmQiLCJib3JkZXJCbG9ja0VuZENvbG9yIiwiTW96Qm9yZGVyQmxvY2tFbmRDb2xvciIsIldlYmtpdEJvcmRlckJsb2NrRW5kQ29sb3IiLCJNU0JvcmRlckJsb2NrRW5kQ29sb3IiLCJPQm9yZGVyQmxvY2tFbmRDb2xvciIsImJvcmRlckJsb2NrRW5kU3R5bGUiLCJNb3pCb3JkZXJCbG9ja0VuZFN0eWxlIiwiV2Via2l0Qm9yZGVyQmxvY2tFbmRTdHlsZSIsIk1TQm9yZGVyQmxvY2tFbmRTdHlsZSIsIk9Cb3JkZXJCbG9ja0VuZFN0eWxlIiwiYm9yZGVyQmxvY2tFbmRXaWR0aCIsIk1vekJvcmRlckJsb2NrRW5kV2lkdGgiLCJXZWJraXRCb3JkZXJCbG9ja0VuZFdpZHRoIiwiTVNCb3JkZXJCbG9ja0VuZFdpZHRoIiwiT0JvcmRlckJsb2NrRW5kV2lkdGgiLCJib3JkZXJCbG9ja1N0YXJ0IiwiTW96Qm9yZGVyQmxvY2tTdGFydCIsIldlYmtpdEJvcmRlckJsb2NrU3RhcnQiLCJNU0JvcmRlckJsb2NrU3RhcnQiLCJPQm9yZGVyQmxvY2tTdGFydCIsImJvcmRlckJsb2NrU3RhcnRDb2xvciIsIk1vekJvcmRlckJsb2NrU3RhcnRDb2xvciIsIldlYmtpdEJvcmRlckJsb2NrU3RhcnRDb2xvciIsIk1TQm9yZGVyQmxvY2tTdGFydENvbG9yIiwiT0JvcmRlckJsb2NrU3RhcnRDb2xvciIsImJvcmRlckJsb2NrU3RhcnRTdHlsZSIsIk1vekJvcmRlckJsb2NrU3RhcnRTdHlsZSIsIldlYmtpdEJvcmRlckJsb2NrU3RhcnRTdHlsZSIsIk1TQm9yZGVyQmxvY2tTdGFydFN0eWxlIiwiT0JvcmRlckJsb2NrU3RhcnRTdHlsZSIsImJvcmRlckJsb2NrU3RhcnRXaWR0aCIsIk1vekJvcmRlckJsb2NrU3RhcnRXaWR0aCIsIldlYmtpdEJvcmRlckJsb2NrU3RhcnRXaWR0aCIsIk1TQm9yZGVyQmxvY2tTdGFydFdpZHRoIiwiT0JvcmRlckJsb2NrU3RhcnRXaWR0aCIsImJvcmRlckJvdHRvbSIsIk1vekJvcmRlckJvdHRvbSIsIldlYmtpdEJvcmRlckJvdHRvbSIsIk1TQm9yZGVyQm90dG9tIiwiT0JvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbUNvbG9yIiwiTW96Qm9yZGVyQm90dG9tQ29sb3IiLCJXZWJraXRCb3JkZXJCb3R0b21Db2xvciIsIk1TQm9yZGVyQm90dG9tQ29sb3IiLCJPQm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIiwiTW96Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyIsIldlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMiLCJNU0JvcmRlckJvdHRvbUxlZnRSYWRpdXMiLCJPQm9yZGVyQm90dG9tTGVmdFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiTW96Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJXZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyIsIk1TQm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJPQm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21TdHlsZSIsIk1vekJvcmRlckJvdHRvbVN0eWxlIiwiV2Via2l0Qm9yZGVyQm90dG9tU3R5bGUiLCJNU0JvcmRlckJvdHRvbVN0eWxlIiwiT0JvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJNb3pCb3JkZXJCb3R0b21XaWR0aCIsIldlYmtpdEJvcmRlckJvdHRvbVdpZHRoIiwiTVNCb3JkZXJCb3R0b21XaWR0aCIsIk9Cb3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckNvbGxhcHNlIiwiTW96Qm9yZGVyQ29sbGFwc2UiLCJXZWJraXRCb3JkZXJDb2xsYXBzZSIsIk1TQm9yZGVyQ29sbGFwc2UiLCJPQm9yZGVyQ29sbGFwc2UiLCJib3JkZXJDb2xvciIsIk1vekJvcmRlckNvbG9yIiwiV2Via2l0Qm9yZGVyQ29sb3IiLCJNU0JvcmRlckNvbG9yIiwiT0JvcmRlckNvbG9yIiwiYm9yZGVySW1hZ2UiLCJNb3pCb3JkZXJJbWFnZSIsIldlYmtpdEJvcmRlckltYWdlIiwiTVNCb3JkZXJJbWFnZSIsIk9Cb3JkZXJJbWFnZSIsImJvcmRlckltYWdlT3V0c2V0IiwiTW96Qm9yZGVySW1hZ2VPdXRzZXQiLCJXZWJraXRCb3JkZXJJbWFnZU91dHNldCIsIk1TQm9yZGVySW1hZ2VPdXRzZXQiLCJPQm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVJlcGVhdCIsIk1vekJvcmRlckltYWdlUmVwZWF0IiwiV2Via2l0Qm9yZGVySW1hZ2VSZXBlYXQiLCJNU0JvcmRlckltYWdlUmVwZWF0IiwiT0JvcmRlckltYWdlUmVwZWF0IiwiYm9yZGVySW1hZ2VTbGljZSIsIk1vekJvcmRlckltYWdlU2xpY2UiLCJXZWJraXRCb3JkZXJJbWFnZVNsaWNlIiwiTVNCb3JkZXJJbWFnZVNsaWNlIiwiT0JvcmRlckltYWdlU2xpY2UiLCJib3JkZXJJbWFnZVNvdXJjZSIsIk1vekJvcmRlckltYWdlU291cmNlIiwiV2Via2l0Qm9yZGVySW1hZ2VTb3VyY2UiLCJNU0JvcmRlckltYWdlU291cmNlIiwiT0JvcmRlckltYWdlU291cmNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsIk1vekJvcmRlckltYWdlV2lkdGgiLCJXZWJraXRCb3JkZXJJbWFnZVdpZHRoIiwiTVNCb3JkZXJJbWFnZVdpZHRoIiwiT0JvcmRlckltYWdlV2lkdGgiLCJib3JkZXJJbmxpbmVFbmQiLCJNb3pCb3JkZXJJbmxpbmVFbmQiLCJXZWJraXRCb3JkZXJJbmxpbmVFbmQiLCJNU0JvcmRlcklubGluZUVuZCIsIk9Cb3JkZXJJbmxpbmVFbmQiLCJib3JkZXJJbmxpbmVFbmRDb2xvciIsIk1vekJvcmRlcklubGluZUVuZENvbG9yIiwiV2Via2l0Qm9yZGVySW5saW5lRW5kQ29sb3IiLCJNU0JvcmRlcklubGluZUVuZENvbG9yIiwiT0JvcmRlcklubGluZUVuZENvbG9yIiwiYm9yZGVySW5saW5lRW5kU3R5bGUiLCJNb3pCb3JkZXJJbmxpbmVFbmRTdHlsZSIsIldlYmtpdEJvcmRlcklubGluZUVuZFN0eWxlIiwiTVNCb3JkZXJJbmxpbmVFbmRTdHlsZSIsIk9Cb3JkZXJJbmxpbmVFbmRTdHlsZSIsImJvcmRlcklubGluZUVuZFdpZHRoIiwiTW96Qm9yZGVySW5saW5lRW5kV2lkdGgiLCJXZWJraXRCb3JkZXJJbmxpbmVFbmRXaWR0aCIsIk1TQm9yZGVySW5saW5lRW5kV2lkdGgiLCJPQm9yZGVySW5saW5lRW5kV2lkdGgiLCJib3JkZXJJbmxpbmVTdGFydCIsIk1vekJvcmRlcklubGluZVN0YXJ0IiwiV2Via2l0Qm9yZGVySW5saW5lU3RhcnQiLCJNU0JvcmRlcklubGluZVN0YXJ0IiwiT0JvcmRlcklubGluZVN0YXJ0IiwiYm9yZGVySW5saW5lU3RhcnRDb2xvciIsIk1vekJvcmRlcklubGluZVN0YXJ0Q29sb3IiLCJXZWJraXRCb3JkZXJJbmxpbmVTdGFydENvbG9yIiwiTVNCb3JkZXJJbmxpbmVTdGFydENvbG9yIiwiT0JvcmRlcklubGluZVN0YXJ0Q29sb3IiLCJib3JkZXJJbmxpbmVTdGFydFN0eWxlIiwiTW96Qm9yZGVySW5saW5lU3RhcnRTdHlsZSIsIldlYmtpdEJvcmRlcklubGluZVN0YXJ0U3R5bGUiLCJNU0JvcmRlcklubGluZVN0YXJ0U3R5bGUiLCJPQm9yZGVySW5saW5lU3RhcnRTdHlsZSIsImJvcmRlcklubGluZVN0YXJ0V2lkdGgiLCJNb3pCb3JkZXJJbmxpbmVTdGFydFdpZHRoIiwiV2Via2l0Qm9yZGVySW5saW5lU3RhcnRXaWR0aCIsIk1TQm9yZGVySW5saW5lU3RhcnRXaWR0aCIsIk9Cb3JkZXJJbmxpbmVTdGFydFdpZHRoIiwiYm9yZGVyTGVmdCIsIk1vekJvcmRlckxlZnQiLCJXZWJraXRCb3JkZXJMZWZ0IiwiTVNCb3JkZXJMZWZ0IiwiT0JvcmRlckxlZnQiLCJib3JkZXJMZWZ0Q29sb3IiLCJNb3pCb3JkZXJMZWZ0Q29sb3IiLCJXZWJraXRCb3JkZXJMZWZ0Q29sb3IiLCJNU0JvcmRlckxlZnRDb2xvciIsIk9Cb3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJNb3pCb3JkZXJMZWZ0U3R5bGUiLCJXZWJraXRCb3JkZXJMZWZ0U3R5bGUiLCJNU0JvcmRlckxlZnRTdHlsZSIsIk9Cb3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJNb3pCb3JkZXJMZWZ0V2lkdGgiLCJXZWJraXRCb3JkZXJMZWZ0V2lkdGgiLCJNU0JvcmRlckxlZnRXaWR0aCIsIk9Cb3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJNb3pCb3JkZXJSYWRpdXMiLCJXZWJraXRCb3JkZXJSYWRpdXMiLCJNU0JvcmRlclJhZGl1cyIsIk9Cb3JkZXJSYWRpdXMiLCJib3JkZXJSaWdodCIsIk1vekJvcmRlclJpZ2h0IiwiV2Via2l0Qm9yZGVyUmlnaHQiLCJNU0JvcmRlclJpZ2h0IiwiT0JvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRDb2xvciIsIk1vekJvcmRlclJpZ2h0Q29sb3IiLCJXZWJraXRCb3JkZXJSaWdodENvbG9yIiwiTVNCb3JkZXJSaWdodENvbG9yIiwiT0JvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiTW96Qm9yZGVyUmlnaHRTdHlsZSIsIldlYmtpdEJvcmRlclJpZ2h0U3R5bGUiLCJNU0JvcmRlclJpZ2h0U3R5bGUiLCJPQm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0V2lkdGgiLCJNb3pCb3JkZXJSaWdodFdpZHRoIiwiV2Via2l0Qm9yZGVyUmlnaHRXaWR0aCIsIk1TQm9yZGVyUmlnaHRXaWR0aCIsIk9Cb3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyU3BhY2luZyIsIk1vekJvcmRlclNwYWNpbmciLCJXZWJraXRCb3JkZXJTcGFjaW5nIiwiTVNCb3JkZXJTcGFjaW5nIiwiT0JvcmRlclNwYWNpbmciLCJib3JkZXJTdHlsZSIsIk1vekJvcmRlclN0eWxlIiwiV2Via2l0Qm9yZGVyU3R5bGUiLCJNU0JvcmRlclN0eWxlIiwiT0JvcmRlclN0eWxlIiwiYm9yZGVyVG9wIiwiTW96Qm9yZGVyVG9wIiwiV2Via2l0Qm9yZGVyVG9wIiwiTVNCb3JkZXJUb3AiLCJPQm9yZGVyVG9wIiwiYm9yZGVyVG9wQ29sb3IiLCJNb3pCb3JkZXJUb3BDb2xvciIsIldlYmtpdEJvcmRlclRvcENvbG9yIiwiTVNCb3JkZXJUb3BDb2xvciIsIk9Cb3JkZXJUb3BDb2xvciIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJNb3pCb3JkZXJUb3BMZWZ0UmFkaXVzIiwiV2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cyIsIk1TQm9yZGVyVG9wTGVmdFJhZGl1cyIsIk9Cb3JkZXJUb3BMZWZ0UmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJNb3pCb3JkZXJUb3BSaWdodFJhZGl1cyIsIldlYmtpdEJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiTVNCb3JkZXJUb3BSaWdodFJhZGl1cyIsIk9Cb3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlclRvcFN0eWxlIiwiTW96Qm9yZGVyVG9wU3R5bGUiLCJXZWJraXRCb3JkZXJUb3BTdHlsZSIsIk1TQm9yZGVyVG9wU3R5bGUiLCJPQm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsIk1vekJvcmRlclRvcFdpZHRoIiwiV2Via2l0Qm9yZGVyVG9wV2lkdGgiLCJNU0JvcmRlclRvcFdpZHRoIiwiT0JvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJNb3pCb3JkZXJXaWR0aCIsIldlYmtpdEJvcmRlcldpZHRoIiwiTVNCb3JkZXJXaWR0aCIsIk9Cb3JkZXJXaWR0aCIsImJvdHRvbSIsIk1vekJvdHRvbSIsIldlYmtpdEJvdHRvbSIsIk1TQm90dG9tIiwiT0JvdHRvbSIsImJveERlY29yYXRpb25CcmVhayIsIk1vekJveERlY29yYXRpb25CcmVhayIsIldlYmtpdEJveERlY29yYXRpb25CcmVhayIsIk1TQm94RGVjb3JhdGlvbkJyZWFrIiwiT0JveERlY29yYXRpb25CcmVhayIsImJveFNoYWRvdyIsIk1vekJveFNoYWRvdyIsIldlYmtpdEJveFNoYWRvdyIsIk1TQm94U2hhZG93IiwiT0JveFNoYWRvdyIsImJveFNpemluZyIsIk1vekJveFNpemluZyIsIldlYmtpdEJveFNpemluZyIsIk1TQm94U2l6aW5nIiwiT0JveFNpemluZyIsImJyZWFrQWZ0ZXIiLCJNb3pCcmVha0FmdGVyIiwiV2Via2l0QnJlYWtBZnRlciIsIk1TQnJlYWtBZnRlciIsIk9CcmVha0FmdGVyIiwiYnJlYWtCZWZvcmUiLCJNb3pCcmVha0JlZm9yZSIsIldlYmtpdEJyZWFrQmVmb3JlIiwiTVNCcmVha0JlZm9yZSIsIk9CcmVha0JlZm9yZSIsImJyZWFrSW5zaWRlIiwiTW96QnJlYWtJbnNpZGUiLCJXZWJraXRCcmVha0luc2lkZSIsIk1TQnJlYWtJbnNpZGUiLCJPQnJlYWtJbnNpZGUiLCJjYXB0aW9uU2lkZSIsIk1vekNhcHRpb25TaWRlIiwiV2Via2l0Q2FwdGlvblNpZGUiLCJNU0NhcHRpb25TaWRlIiwiT0NhcHRpb25TaWRlIiwiY2FyZXRDb2xvciIsIk1vekNhcmV0Q29sb3IiLCJXZWJraXRDYXJldENvbG9yIiwiTVNDYXJldENvbG9yIiwiT0NhcmV0Q29sb3IiLCJjaCIsIk1vekNoIiwiV2Via2l0Q2giLCJNU0NoIiwiT0NoIiwiY2xlYXIiLCJNb3pDbGVhciIsIldlYmtpdENsZWFyIiwiTVNDbGVhciIsIk9DbGVhciIsImNsaXAiLCJNb3pDbGlwIiwiV2Via2l0Q2xpcCIsIk1TQ2xpcCIsIk9DbGlwIiwiY2xpcFBhdGgiLCJNb3pDbGlwUGF0aCIsIldlYmtpdENsaXBQYXRoIiwiTVNDbGlwUGF0aCIsIk9DbGlwUGF0aCIsImNtIiwiTW96Q20iLCJXZWJraXRDbSIsIk1TQ20iLCJPQ20iLCJjb2xvciIsIk1vekNvbG9yIiwiV2Via2l0Q29sb3IiLCJNU0NvbG9yIiwiT0NvbG9yIiwiY29sdW1uQ291bnQiLCJNb3pDb2x1bW5Db3VudCIsIldlYmtpdENvbHVtbkNvdW50IiwiTVNDb2x1bW5Db3VudCIsIk9Db2x1bW5Db3VudCIsImNvbHVtbkZpbGwiLCJNb3pDb2x1bW5GaWxsIiwiV2Via2l0Q29sdW1uRmlsbCIsIk1TQ29sdW1uRmlsbCIsIk9Db2x1bW5GaWxsIiwiY29sdW1uR2FwIiwiTW96Q29sdW1uR2FwIiwiV2Via2l0Q29sdW1uR2FwIiwiTVNDb2x1bW5HYXAiLCJPQ29sdW1uR2FwIiwiY29sdW1uUnVsZSIsIk1vekNvbHVtblJ1bGUiLCJXZWJraXRDb2x1bW5SdWxlIiwiTVNDb2x1bW5SdWxlIiwiT0NvbHVtblJ1bGUiLCJjb2x1bW5SdWxlQ29sb3IiLCJNb3pDb2x1bW5SdWxlQ29sb3IiLCJXZWJraXRDb2x1bW5SdWxlQ29sb3IiLCJNU0NvbHVtblJ1bGVDb2xvciIsIk9Db2x1bW5SdWxlQ29sb3IiLCJjb2x1bW5SdWxlU3R5bGUiLCJNb3pDb2x1bW5SdWxlU3R5bGUiLCJXZWJraXRDb2x1bW5SdWxlU3R5bGUiLCJNU0NvbHVtblJ1bGVTdHlsZSIsIk9Db2x1bW5SdWxlU3R5bGUiLCJjb2x1bW5SdWxlV2lkdGgiLCJNb3pDb2x1bW5SdWxlV2lkdGgiLCJXZWJraXRDb2x1bW5SdWxlV2lkdGgiLCJNU0NvbHVtblJ1bGVXaWR0aCIsIk9Db2x1bW5SdWxlV2lkdGgiLCJjb2x1bW5TcGFuIiwiTW96Q29sdW1uU3BhbiIsIldlYmtpdENvbHVtblNwYW4iLCJNU0NvbHVtblNwYW4iLCJPQ29sdW1uU3BhbiIsImNvbHVtbldpZHRoIiwiTW96Q29sdW1uV2lkdGgiLCJXZWJraXRDb2x1bW5XaWR0aCIsIk1TQ29sdW1uV2lkdGgiLCJPQ29sdW1uV2lkdGgiLCJjb2x1bW5zIiwiTW96Q29sdW1ucyIsIldlYmtpdENvbHVtbnMiLCJNU0NvbHVtbnMiLCJPQ29sdW1ucyIsImNvbnRlbnQiLCJNb3pDb250ZW50IiwiV2Via2l0Q29udGVudCIsIk1TQ29udGVudCIsIk9Db250ZW50IiwiY291bnRlckluY3JlbWVudCIsIk1vekNvdW50ZXJJbmNyZW1lbnQiLCJXZWJraXRDb3VudGVySW5jcmVtZW50IiwiTVNDb3VudGVySW5jcmVtZW50IiwiT0NvdW50ZXJJbmNyZW1lbnQiLCJjb3VudGVyUmVzZXQiLCJNb3pDb3VudGVyUmVzZXQiLCJXZWJraXRDb3VudGVyUmVzZXQiLCJNU0NvdW50ZXJSZXNldCIsIk9Db3VudGVyUmVzZXQiLCJjdXJzb3IiLCJNb3pDdXJzb3IiLCJXZWJraXRDdXJzb3IiLCJNU0N1cnNvciIsIk9DdXJzb3IiLCJkZWciLCJNb3pEZWciLCJXZWJraXREZWciLCJNU0RlZyIsIk9EZWciLCJkaXJlY3Rpb24iLCJNb3pEaXJlY3Rpb24iLCJXZWJraXREaXJlY3Rpb24iLCJNU0RpcmVjdGlvbiIsIk9EaXJlY3Rpb24iLCJkaXNwbGF5IiwiTW96RGlzcGxheSIsIldlYmtpdERpc3BsYXkiLCJNU0Rpc3BsYXkiLCJPRGlzcGxheSIsImRwY20iLCJNb3pEcGNtIiwiV2Via2l0RHBjbSIsIk1TRHBjbSIsIk9EcGNtIiwiZHBpIiwiTW96RHBpIiwiV2Via2l0RHBpIiwiTVNEcGkiLCJPRHBpIiwiZHBweCIsIk1vekRwcHgiLCJXZWJraXREcHB4IiwiTVNEcHB4IiwiT0RwcHgiLCJlbSIsIk1vekVtIiwiV2Via2l0RW0iLCJNU0VtIiwiT0VtIiwiZW1wdHlDZWxscyIsIk1vekVtcHR5Q2VsbHMiLCJXZWJraXRFbXB0eUNlbGxzIiwiTVNFbXB0eUNlbGxzIiwiT0VtcHR5Q2VsbHMiLCJleCIsIk1vekV4IiwiV2Via2l0RXgiLCJNU0V4IiwiT0V4IiwiZmlsdGVyIiwiTW96RmlsdGVyIiwiV2Via2l0RmlsdGVyIiwiTVNGaWx0ZXIiLCJPRmlsdGVyIiwiZmxleEJhc2lzIiwiTW96RmxleEJhc2lzIiwiV2Via2l0RmxleEJhc2lzIiwiTVNGbGV4QmFzaXMiLCJPRmxleEJhc2lzIiwiZmxleERpcmVjdGlvbiIsIk1vekZsZXhEaXJlY3Rpb24iLCJXZWJraXRGbGV4RGlyZWN0aW9uIiwiTVNGbGV4RGlyZWN0aW9uIiwiT0ZsZXhEaXJlY3Rpb24iLCJmbGV4RmxvdyIsIk1vekZsZXhGbG93IiwiV2Via2l0RmxleEZsb3ciLCJNU0ZsZXhGbG93IiwiT0ZsZXhGbG93IiwiZmxleEdyb3ciLCJNb3pGbGV4R3JvdyIsIldlYmtpdEZsZXhHcm93IiwiTVNGbGV4R3JvdyIsIk9GbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJNb3pGbGV4U2hyaW5rIiwiV2Via2l0RmxleFNocmluayIsIk1TRmxleFNocmluayIsIk9GbGV4U2hyaW5rIiwiZmxleFdyYXAiLCJNb3pGbGV4V3JhcCIsIldlYmtpdEZsZXhXcmFwIiwiTVNGbGV4V3JhcCIsIk9GbGV4V3JhcCIsImZsb2F0IiwiTW96RmxvYXQiLCJXZWJraXRGbG9hdCIsIk1TRmxvYXQiLCJPRmxvYXQiLCJmb250IiwiTW96Rm9udCIsIldlYmtpdEZvbnQiLCJNU0ZvbnQiLCJPRm9udCIsImZvbnRGYW1pbHkiLCJNb3pGb250RmFtaWx5IiwiV2Via2l0Rm9udEZhbWlseSIsIk1TRm9udEZhbWlseSIsIk9Gb250RmFtaWx5IiwiZm9udEZlYXR1cmVTZXR0aW5ncyIsIk1vekZvbnRGZWF0dXJlU2V0dGluZ3MiLCJXZWJraXRGb250RmVhdHVyZVNldHRpbmdzIiwiTVNGb250RmVhdHVyZVNldHRpbmdzIiwiT0ZvbnRGZWF0dXJlU2V0dGluZ3MiLCJmb250S2VybmluZyIsIk1vekZvbnRLZXJuaW5nIiwiV2Via2l0Rm9udEtlcm5pbmciLCJNU0ZvbnRLZXJuaW5nIiwiT0ZvbnRLZXJuaW5nIiwiZm9udExhbmd1YWdlT3ZlcnJpZGUiLCJNb3pGb250TGFuZ3VhZ2VPdmVycmlkZSIsIldlYmtpdEZvbnRMYW5ndWFnZU92ZXJyaWRlIiwiTVNGb250TGFuZ3VhZ2VPdmVycmlkZSIsIk9Gb250TGFuZ3VhZ2VPdmVycmlkZSIsImZvbnRTaXplIiwiTW96Rm9udFNpemUiLCJXZWJraXRGb250U2l6ZSIsIk1TRm9udFNpemUiLCJPRm9udFNpemUiLCJmb250U2l6ZUFkanVzdCIsIk1vekZvbnRTaXplQWRqdXN0IiwiV2Via2l0Rm9udFNpemVBZGp1c3QiLCJNU0ZvbnRTaXplQWRqdXN0IiwiT0ZvbnRTaXplQWRqdXN0IiwiZm9udFN0cmV0Y2giLCJNb3pGb250U3RyZXRjaCIsIldlYmtpdEZvbnRTdHJldGNoIiwiTVNGb250U3RyZXRjaCIsIk9Gb250U3RyZXRjaCIsImZvbnRTdHlsZSIsIk1vekZvbnRTdHlsZSIsIldlYmtpdEZvbnRTdHlsZSIsIk1TRm9udFN0eWxlIiwiT0ZvbnRTdHlsZSIsImZvbnRTeW50aGVzaXMiLCJNb3pGb250U3ludGhlc2lzIiwiV2Via2l0Rm9udFN5bnRoZXNpcyIsIk1TRm9udFN5bnRoZXNpcyIsIk9Gb250U3ludGhlc2lzIiwiZm9udFZhcmlhbnQiLCJNb3pGb250VmFyaWFudCIsIldlYmtpdEZvbnRWYXJpYW50IiwiTVNGb250VmFyaWFudCIsIk9Gb250VmFyaWFudCIsImZvbnRWYXJpYW50QWx0ZXJuYXRlcyIsIk1vekZvbnRWYXJpYW50QWx0ZXJuYXRlcyIsIldlYmtpdEZvbnRWYXJpYW50QWx0ZXJuYXRlcyIsIk1TRm9udFZhcmlhbnRBbHRlcm5hdGVzIiwiT0ZvbnRWYXJpYW50QWx0ZXJuYXRlcyIsImZvbnRWYXJpYW50Q2FwcyIsIk1vekZvbnRWYXJpYW50Q2FwcyIsIldlYmtpdEZvbnRWYXJpYW50Q2FwcyIsIk1TRm9udFZhcmlhbnRDYXBzIiwiT0ZvbnRWYXJpYW50Q2FwcyIsImZvbnRWYXJpYW50RWFzdEFzaWFuIiwiTW96Rm9udFZhcmlhbnRFYXN0QXNpYW4iLCJXZWJraXRGb250VmFyaWFudEVhc3RBc2lhbiIsIk1TRm9udFZhcmlhbnRFYXN0QXNpYW4iLCJPRm9udFZhcmlhbnRFYXN0QXNpYW4iLCJmb250VmFyaWFudExpZ2F0dXJlcyIsIk1vekZvbnRWYXJpYW50TGlnYXR1cmVzIiwiV2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXMiLCJNU0ZvbnRWYXJpYW50TGlnYXR1cmVzIiwiT0ZvbnRWYXJpYW50TGlnYXR1cmVzIiwiZm9udFZhcmlhbnROdW1lcmljIiwiTW96Rm9udFZhcmlhbnROdW1lcmljIiwiV2Via2l0Rm9udFZhcmlhbnROdW1lcmljIiwiTVNGb250VmFyaWFudE51bWVyaWMiLCJPRm9udFZhcmlhbnROdW1lcmljIiwiZm9udFZhcmlhbnRQb3NpdGlvbiIsIk1vekZvbnRWYXJpYW50UG9zaXRpb24iLCJXZWJraXRGb250VmFyaWFudFBvc2l0aW9uIiwiTVNGb250VmFyaWFudFBvc2l0aW9uIiwiT0ZvbnRWYXJpYW50UG9zaXRpb24iLCJmb250V2VpZ2h0IiwiTW96Rm9udFdlaWdodCIsIldlYmtpdEZvbnRXZWlnaHQiLCJNU0ZvbnRXZWlnaHQiLCJPRm9udFdlaWdodCIsImZyIiwiTW96RnIiLCJXZWJraXRGciIsIk1TRnIiLCJPRnIiLCJncmFkIiwiTW96R3JhZCIsIldlYmtpdEdyYWQiLCJNU0dyYWQiLCJPR3JhZCIsImdyaWQiLCJNb3pHcmlkIiwiV2Via2l0R3JpZCIsIk1TR3JpZCIsIk9HcmlkIiwiZ3JpZEFyZWEiLCJNb3pHcmlkQXJlYSIsIldlYmtpdEdyaWRBcmVhIiwiTVNHcmlkQXJlYSIsIk9HcmlkQXJlYSIsImdyaWRBdXRvQ29sdW1ucyIsIk1vekdyaWRBdXRvQ29sdW1ucyIsIldlYmtpdEdyaWRBdXRvQ29sdW1ucyIsIk1TR3JpZEF1dG9Db2x1bW5zIiwiT0dyaWRBdXRvQ29sdW1ucyIsImdyaWRBdXRvRmxvdyIsIk1vekdyaWRBdXRvRmxvdyIsIldlYmtpdEdyaWRBdXRvRmxvdyIsIk1TR3JpZEF1dG9GbG93IiwiT0dyaWRBdXRvRmxvdyIsImdyaWRBdXRvUm93cyIsIk1vekdyaWRBdXRvUm93cyIsIldlYmtpdEdyaWRBdXRvUm93cyIsIk1TR3JpZEF1dG9Sb3dzIiwiT0dyaWRBdXRvUm93cyIsImdyaWRDb2x1bW4iLCJNb3pHcmlkQ29sdW1uIiwiV2Via2l0R3JpZENvbHVtbiIsIk1TR3JpZENvbHVtbiIsIk9HcmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsIk1vekdyaWRDb2x1bW5FbmQiLCJXZWJraXRHcmlkQ29sdW1uRW5kIiwiTVNHcmlkQ29sdW1uRW5kIiwiT0dyaWRDb2x1bW5FbmQiLCJncmlkQ29sdW1uR2FwIiwiTW96R3JpZENvbHVtbkdhcCIsIldlYmtpdEdyaWRDb2x1bW5HYXAiLCJNU0dyaWRDb2x1bW5HYXAiLCJPR3JpZENvbHVtbkdhcCIsImdyaWRDb2x1bW5TdGFydCIsIk1vekdyaWRDb2x1bW5TdGFydCIsIldlYmtpdEdyaWRDb2x1bW5TdGFydCIsIk1TR3JpZENvbHVtblN0YXJ0IiwiT0dyaWRDb2x1bW5TdGFydCIsImdyaWRHYXAiLCJNb3pHcmlkR2FwIiwiV2Via2l0R3JpZEdhcCIsIk1TR3JpZEdhcCIsIk9HcmlkR2FwIiwiZ3JpZFJvdyIsIk1vekdyaWRSb3ciLCJXZWJraXRHcmlkUm93IiwiTVNHcmlkUm93IiwiT0dyaWRSb3ciLCJncmlkUm93RW5kIiwiTW96R3JpZFJvd0VuZCIsIldlYmtpdEdyaWRSb3dFbmQiLCJNU0dyaWRSb3dFbmQiLCJPR3JpZFJvd0VuZCIsImdyaWRSb3dHYXAiLCJNb3pHcmlkUm93R2FwIiwiV2Via2l0R3JpZFJvd0dhcCIsIk1TR3JpZFJvd0dhcCIsIk9HcmlkUm93R2FwIiwiZ3JpZFJvd1N0YXJ0IiwiTW96R3JpZFJvd1N0YXJ0IiwiV2Via2l0R3JpZFJvd1N0YXJ0IiwiTVNHcmlkUm93U3RhcnQiLCJPR3JpZFJvd1N0YXJ0IiwiZ3JpZFRlbXBsYXRlIiwiTW96R3JpZFRlbXBsYXRlIiwiV2Via2l0R3JpZFRlbXBsYXRlIiwiTVNHcmlkVGVtcGxhdGUiLCJPR3JpZFRlbXBsYXRlIiwiZ3JpZFRlbXBsYXRlQXJlYXMiLCJNb3pHcmlkVGVtcGxhdGVBcmVhcyIsIldlYmtpdEdyaWRUZW1wbGF0ZUFyZWFzIiwiTVNHcmlkVGVtcGxhdGVBcmVhcyIsIk9HcmlkVGVtcGxhdGVBcmVhcyIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJNb3pHcmlkVGVtcGxhdGVDb2x1bW5zIiwiV2Via2l0R3JpZFRlbXBsYXRlQ29sdW1ucyIsIk1TR3JpZFRlbXBsYXRlQ29sdW1ucyIsIk9HcmlkVGVtcGxhdGVDb2x1bW5zIiwiZ3JpZFRlbXBsYXRlUm93cyIsIk1vekdyaWRUZW1wbGF0ZVJvd3MiLCJXZWJraXRHcmlkVGVtcGxhdGVSb3dzIiwiTVNHcmlkVGVtcGxhdGVSb3dzIiwiT0dyaWRUZW1wbGF0ZVJvd3MiLCJoZWlnaHQiLCJNb3pIZWlnaHQiLCJXZWJraXRIZWlnaHQiLCJNU0hlaWdodCIsIk9IZWlnaHQiLCJoeXBoZW5zIiwiTW96SHlwaGVucyIsIldlYmtpdEh5cGhlbnMiLCJNU0h5cGhlbnMiLCJPSHlwaGVucyIsImh6IiwiTW96SHoiLCJXZWJraXRIeiIsIk1TSHoiLCJPSHoiLCJpbWFnZU9yaWVudGF0aW9uIiwiTW96SW1hZ2VPcmllbnRhdGlvbiIsIldlYmtpdEltYWdlT3JpZW50YXRpb24iLCJNU0ltYWdlT3JpZW50YXRpb24iLCJPSW1hZ2VPcmllbnRhdGlvbiIsImltYWdlUmVuZGVyaW5nIiwiTW96SW1hZ2VSZW5kZXJpbmciLCJXZWJraXRJbWFnZVJlbmRlcmluZyIsIk1TSW1hZ2VSZW5kZXJpbmciLCJPSW1hZ2VSZW5kZXJpbmciLCJpbWFnZVJlc29sdXRpb24iLCJNb3pJbWFnZVJlc29sdXRpb24iLCJXZWJraXRJbWFnZVJlc29sdXRpb24iLCJNU0ltYWdlUmVzb2x1dGlvbiIsIk9JbWFnZVJlc29sdXRpb24iLCJpbWVNb2RlIiwiTW96SW1lTW9kZSIsIldlYmtpdEltZU1vZGUiLCJNU0ltZU1vZGUiLCJPSW1lTW9kZSIsImluIiwiTW96SW4iLCJXZWJraXRJbiIsIk1TSW4iLCJPSW4iLCJpbmhlcml0IiwiTW96SW5oZXJpdCIsIldlYmtpdEluaGVyaXQiLCJNU0luaGVyaXQiLCJPSW5oZXJpdCIsImluaXRpYWwiLCJNb3pJbml0aWFsIiwiV2Via2l0SW5pdGlhbCIsIk1TSW5pdGlhbCIsIk9Jbml0aWFsIiwiaW5saW5lU2l6ZSIsIk1veklubGluZVNpemUiLCJXZWJraXRJbmxpbmVTaXplIiwiTVNJbmxpbmVTaXplIiwiT0lubGluZVNpemUiLCJpc29sYXRpb24iLCJNb3pJc29sYXRpb24iLCJXZWJraXRJc29sYXRpb24iLCJNU0lzb2xhdGlvbiIsIk9Jc29sYXRpb24iLCJqdXN0aWZ5Q29udGVudCIsIk1vekp1c3RpZnlDb250ZW50IiwiV2Via2l0SnVzdGlmeUNvbnRlbnQiLCJNU0p1c3RpZnlDb250ZW50IiwiT0p1c3RpZnlDb250ZW50Iiwia2h6IiwiTW96S2h6IiwiV2Via2l0S2h6IiwiTVNLaHoiLCJPS2h6IiwibGVmdCIsIk1vekxlZnQiLCJXZWJraXRMZWZ0IiwiTVNMZWZ0IiwiT0xlZnQiLCJsZXR0ZXJTcGFjaW5nIiwiTW96TGV0dGVyU3BhY2luZyIsIldlYmtpdExldHRlclNwYWNpbmciLCJNU0xldHRlclNwYWNpbmciLCJPTGV0dGVyU3BhY2luZyIsImxpbmVCcmVhayIsIk1vekxpbmVCcmVhayIsIldlYmtpdExpbmVCcmVhayIsIk1TTGluZUJyZWFrIiwiT0xpbmVCcmVhayIsImxpbmVIZWlnaHQiLCJNb3pMaW5lSGVpZ2h0IiwiV2Via2l0TGluZUhlaWdodCIsIk1TTGluZUhlaWdodCIsIk9MaW5lSGVpZ2h0IiwibGlzdFN0eWxlIiwiTW96TGlzdFN0eWxlIiwiV2Via2l0TGlzdFN0eWxlIiwiTVNMaXN0U3R5bGUiLCJPTGlzdFN0eWxlIiwibGlzdFN0eWxlSW1hZ2UiLCJNb3pMaXN0U3R5bGVJbWFnZSIsIldlYmtpdExpc3RTdHlsZUltYWdlIiwiTVNMaXN0U3R5bGVJbWFnZSIsIk9MaXN0U3R5bGVJbWFnZSIsImxpc3RTdHlsZVBvc2l0aW9uIiwiTW96TGlzdFN0eWxlUG9zaXRpb24iLCJXZWJraXRMaXN0U3R5bGVQb3NpdGlvbiIsIk1TTGlzdFN0eWxlUG9zaXRpb24iLCJPTGlzdFN0eWxlUG9zaXRpb24iLCJsaXN0U3R5bGVUeXBlIiwiTW96TGlzdFN0eWxlVHlwZSIsIldlYmtpdExpc3RTdHlsZVR5cGUiLCJNU0xpc3RTdHlsZVR5cGUiLCJPTGlzdFN0eWxlVHlwZSIsIm1hcmdpbiIsIk1vek1hcmdpbiIsIldlYmtpdE1hcmdpbiIsIk1TTWFyZ2luIiwiT01hcmdpbiIsIm1hcmdpbkJsb2NrRW5kIiwiTW96TWFyZ2luQmxvY2tFbmQiLCJXZWJraXRNYXJnaW5CbG9ja0VuZCIsIk1TTWFyZ2luQmxvY2tFbmQiLCJPTWFyZ2luQmxvY2tFbmQiLCJtYXJnaW5CbG9ja1N0YXJ0IiwiTW96TWFyZ2luQmxvY2tTdGFydCIsIldlYmtpdE1hcmdpbkJsb2NrU3RhcnQiLCJNU01hcmdpbkJsb2NrU3RhcnQiLCJPTWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJvdHRvbSIsIk1vek1hcmdpbkJvdHRvbSIsIldlYmtpdE1hcmdpbkJvdHRvbSIsIk1TTWFyZ2luQm90dG9tIiwiT01hcmdpbkJvdHRvbSIsIm1hcmdpbklubGluZUVuZCIsIk1vek1hcmdpbklubGluZUVuZCIsIldlYmtpdE1hcmdpbklubGluZUVuZCIsIk1TTWFyZ2luSW5saW5lRW5kIiwiT01hcmdpbklubGluZUVuZCIsIm1hcmdpbklubGluZVN0YXJ0IiwiTW96TWFyZ2luSW5saW5lU3RhcnQiLCJXZWJraXRNYXJnaW5JbmxpbmVTdGFydCIsIk1TTWFyZ2luSW5saW5lU3RhcnQiLCJPTWFyZ2luSW5saW5lU3RhcnQiLCJtYXJnaW5MZWZ0IiwiTW96TWFyZ2luTGVmdCIsIldlYmtpdE1hcmdpbkxlZnQiLCJNU01hcmdpbkxlZnQiLCJPTWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwiTW96TWFyZ2luUmlnaHQiLCJXZWJraXRNYXJnaW5SaWdodCIsIk1TTWFyZ2luUmlnaHQiLCJPTWFyZ2luUmlnaHQiLCJtYXJnaW5Ub3AiLCJNb3pNYXJnaW5Ub3AiLCJXZWJraXRNYXJnaW5Ub3AiLCJNU01hcmdpblRvcCIsIk9NYXJnaW5Ub3AiLCJtYXNrIiwiTW96TWFzayIsIldlYmtpdE1hc2siLCJNU01hc2siLCJPTWFzayIsIm1hc2tDbGlwIiwiTW96TWFza0NsaXAiLCJXZWJraXRNYXNrQ2xpcCIsIk1TTWFza0NsaXAiLCJPTWFza0NsaXAiLCJtYXNrQ29tcG9zaXRlIiwiTW96TWFza0NvbXBvc2l0ZSIsIldlYmtpdE1hc2tDb21wb3NpdGUiLCJNU01hc2tDb21wb3NpdGUiLCJPTWFza0NvbXBvc2l0ZSIsIm1hc2tJbWFnZSIsIk1vek1hc2tJbWFnZSIsIldlYmtpdE1hc2tJbWFnZSIsIk1TTWFza0ltYWdlIiwiT01hc2tJbWFnZSIsIm1hc2tNb2RlIiwiTW96TWFza01vZGUiLCJXZWJraXRNYXNrTW9kZSIsIk1TTWFza01vZGUiLCJPTWFza01vZGUiLCJtYXNrT3JpZ2luIiwiTW96TWFza09yaWdpbiIsIldlYmtpdE1hc2tPcmlnaW4iLCJNU01hc2tPcmlnaW4iLCJPTWFza09yaWdpbiIsIm1hc2tQb3NpdGlvbiIsIk1vek1hc2tQb3NpdGlvbiIsIldlYmtpdE1hc2tQb3NpdGlvbiIsIk1TTWFza1Bvc2l0aW9uIiwiT01hc2tQb3NpdGlvbiIsIm1hc2tSZXBlYXQiLCJNb3pNYXNrUmVwZWF0IiwiV2Via2l0TWFza1JlcGVhdCIsIk1TTWFza1JlcGVhdCIsIk9NYXNrUmVwZWF0IiwibWFza1NpemUiLCJNb3pNYXNrU2l6ZSIsIldlYmtpdE1hc2tTaXplIiwiTVNNYXNrU2l6ZSIsIk9NYXNrU2l6ZSIsIm1hc2tUeXBlIiwiTW96TWFza1R5cGUiLCJXZWJraXRNYXNrVHlwZSIsIk1TTWFza1R5cGUiLCJPTWFza1R5cGUiLCJtYXhIZWlnaHQiLCJNb3pNYXhIZWlnaHQiLCJXZWJraXRNYXhIZWlnaHQiLCJNU01heEhlaWdodCIsIk9NYXhIZWlnaHQiLCJtYXhXaWR0aCIsIk1vek1heFdpZHRoIiwiV2Via2l0TWF4V2lkdGgiLCJNU01heFdpZHRoIiwiT01heFdpZHRoIiwibWluQmxvY2tTaXplIiwiTW96TWluQmxvY2tTaXplIiwiV2Via2l0TWluQmxvY2tTaXplIiwiTVNNaW5CbG9ja1NpemUiLCJPTWluQmxvY2tTaXplIiwibWluSGVpZ2h0IiwiTW96TWluSGVpZ2h0IiwiV2Via2l0TWluSGVpZ2h0IiwiTVNNaW5IZWlnaHQiLCJPTWluSGVpZ2h0IiwibWluSW5saW5lU2l6ZSIsIk1vek1pbklubGluZVNpemUiLCJXZWJraXRNaW5JbmxpbmVTaXplIiwiTVNNaW5JbmxpbmVTaXplIiwiT01pbklubGluZVNpemUiLCJtaW5XaWR0aCIsIk1vek1pbldpZHRoIiwiV2Via2l0TWluV2lkdGgiLCJNU01pbldpZHRoIiwiT01pbldpZHRoIiwibWl4QmxlbmRNb2RlIiwiTW96TWl4QmxlbmRNb2RlIiwiV2Via2l0TWl4QmxlbmRNb2RlIiwiTVNNaXhCbGVuZE1vZGUiLCJPTWl4QmxlbmRNb2RlIiwibW0iLCJNb3pNbSIsIldlYmtpdE1tIiwiTVNNbSIsIk9NbSIsIm1zIiwiTW96TXMiLCJXZWJraXRNcyIsIk1TTXMiLCJPTXMiLCJvYmplY3RGaXQiLCJNb3pPYmplY3RGaXQiLCJXZWJraXRPYmplY3RGaXQiLCJNU09iamVjdEZpdCIsIk9PYmplY3RGaXQiLCJvYmplY3RQb3NpdGlvbiIsIk1vek9iamVjdFBvc2l0aW9uIiwiV2Via2l0T2JqZWN0UG9zaXRpb24iLCJNU09iamVjdFBvc2l0aW9uIiwiT09iamVjdFBvc2l0aW9uIiwib2Zmc2V0QmxvY2tFbmQiLCJNb3pPZmZzZXRCbG9ja0VuZCIsIldlYmtpdE9mZnNldEJsb2NrRW5kIiwiTVNPZmZzZXRCbG9ja0VuZCIsIk9PZmZzZXRCbG9ja0VuZCIsIm9mZnNldEJsb2NrU3RhcnQiLCJNb3pPZmZzZXRCbG9ja1N0YXJ0IiwiV2Via2l0T2Zmc2V0QmxvY2tTdGFydCIsIk1TT2Zmc2V0QmxvY2tTdGFydCIsIk9PZmZzZXRCbG9ja1N0YXJ0Iiwib2Zmc2V0SW5saW5lRW5kIiwiTW96T2Zmc2V0SW5saW5lRW5kIiwiV2Via2l0T2Zmc2V0SW5saW5lRW5kIiwiTVNPZmZzZXRJbmxpbmVFbmQiLCJPT2Zmc2V0SW5saW5lRW5kIiwib2Zmc2V0SW5saW5lU3RhcnQiLCJNb3pPZmZzZXRJbmxpbmVTdGFydCIsIldlYmtpdE9mZnNldElubGluZVN0YXJ0IiwiTVNPZmZzZXRJbmxpbmVTdGFydCIsIk9PZmZzZXRJbmxpbmVTdGFydCIsIm9wYWNpdHkiLCJNb3pPcGFjaXR5IiwiV2Via2l0T3BhY2l0eSIsIk1TT3BhY2l0eSIsIk9PcGFjaXR5Iiwib3JkZXIiLCJNb3pPcmRlciIsIldlYmtpdE9yZGVyIiwiTVNPcmRlciIsIk9PcmRlciIsIm9ycGhhbnMiLCJNb3pPcnBoYW5zIiwiV2Via2l0T3JwaGFucyIsIk1TT3JwaGFucyIsIk9PcnBoYW5zIiwib3V0bGluZSIsIk1vek91dGxpbmUiLCJXZWJraXRPdXRsaW5lIiwiTVNPdXRsaW5lIiwiT091dGxpbmUiLCJvdXRsaW5lQ29sb3IiLCJNb3pPdXRsaW5lQ29sb3IiLCJXZWJraXRPdXRsaW5lQ29sb3IiLCJNU091dGxpbmVDb2xvciIsIk9PdXRsaW5lQ29sb3IiLCJvdXRsaW5lT2Zmc2V0IiwiTW96T3V0bGluZU9mZnNldCIsIldlYmtpdE91dGxpbmVPZmZzZXQiLCJNU091dGxpbmVPZmZzZXQiLCJPT3V0bGluZU9mZnNldCIsIm91dGxpbmVTdHlsZSIsIk1vek91dGxpbmVTdHlsZSIsIldlYmtpdE91dGxpbmVTdHlsZSIsIk1TT3V0bGluZVN0eWxlIiwiT091dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCIsIk1vek91dGxpbmVXaWR0aCIsIldlYmtpdE91dGxpbmVXaWR0aCIsIk1TT3V0bGluZVdpZHRoIiwiT091dGxpbmVXaWR0aCIsIm92ZXJmbG93IiwiTW96T3ZlcmZsb3ciLCJXZWJraXRPdmVyZmxvdyIsIk1TT3ZlcmZsb3ciLCJPT3ZlcmZsb3ciLCJvdmVyZmxvd1dyYXAiLCJNb3pPdmVyZmxvd1dyYXAiLCJXZWJraXRPdmVyZmxvd1dyYXAiLCJNU092ZXJmbG93V3JhcCIsIk9PdmVyZmxvd1dyYXAiLCJvdmVyZmxvd1giLCJNb3pPdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1giLCJNU092ZXJmbG93WCIsIk9PdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJNb3pPdmVyZmxvd1kiLCJXZWJraXRPdmVyZmxvd1kiLCJNU092ZXJmbG93WSIsIk9PdmVyZmxvd1kiLCJwYWRkaW5nIiwiTW96UGFkZGluZyIsIldlYmtpdFBhZGRpbmciLCJNU1BhZGRpbmciLCJPUGFkZGluZyIsInBhZGRpbmdCbG9ja0VuZCIsIk1velBhZGRpbmdCbG9ja0VuZCIsIldlYmtpdFBhZGRpbmdCbG9ja0VuZCIsIk1TUGFkZGluZ0Jsb2NrRW5kIiwiT1BhZGRpbmdCbG9ja0VuZCIsInBhZGRpbmdCbG9ja1N0YXJ0IiwiTW96UGFkZGluZ0Jsb2NrU3RhcnQiLCJXZWJraXRQYWRkaW5nQmxvY2tTdGFydCIsIk1TUGFkZGluZ0Jsb2NrU3RhcnQiLCJPUGFkZGluZ0Jsb2NrU3RhcnQiLCJwYWRkaW5nQm90dG9tIiwiTW96UGFkZGluZ0JvdHRvbSIsIldlYmtpdFBhZGRpbmdCb3R0b20iLCJNU1BhZGRpbmdCb3R0b20iLCJPUGFkZGluZ0JvdHRvbSIsInBhZGRpbmdJbmxpbmVFbmQiLCJNb3pQYWRkaW5nSW5saW5lRW5kIiwiV2Via2l0UGFkZGluZ0lubGluZUVuZCIsIk1TUGFkZGluZ0lubGluZUVuZCIsIk9QYWRkaW5nSW5saW5lRW5kIiwicGFkZGluZ0lubGluZVN0YXJ0IiwiTW96UGFkZGluZ0lubGluZVN0YXJ0IiwiV2Via2l0UGFkZGluZ0lubGluZVN0YXJ0IiwiTVNQYWRkaW5nSW5saW5lU3RhcnQiLCJPUGFkZGluZ0lubGluZVN0YXJ0IiwicGFkZGluZ0xlZnQiLCJNb3pQYWRkaW5nTGVmdCIsIldlYmtpdFBhZGRpbmdMZWZ0IiwiTVNQYWRkaW5nTGVmdCIsIk9QYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsIk1velBhZGRpbmdSaWdodCIsIldlYmtpdFBhZGRpbmdSaWdodCIsIk1TUGFkZGluZ1JpZ2h0IiwiT1BhZGRpbmdSaWdodCIsInBhZGRpbmdUb3AiLCJNb3pQYWRkaW5nVG9wIiwiV2Via2l0UGFkZGluZ1RvcCIsIk1TUGFkZGluZ1RvcCIsIk9QYWRkaW5nVG9wIiwicGFnZUJyZWFrQWZ0ZXIiLCJNb3pQYWdlQnJlYWtBZnRlciIsIldlYmtpdFBhZ2VCcmVha0FmdGVyIiwiTVNQYWdlQnJlYWtBZnRlciIsIk9QYWdlQnJlYWtBZnRlciIsInBhZ2VCcmVha0JlZm9yZSIsIk1velBhZ2VCcmVha0JlZm9yZSIsIldlYmtpdFBhZ2VCcmVha0JlZm9yZSIsIk1TUGFnZUJyZWFrQmVmb3JlIiwiT1BhZ2VCcmVha0JlZm9yZSIsInBhZ2VCcmVha0luc2lkZSIsIk1velBhZ2VCcmVha0luc2lkZSIsIldlYmtpdFBhZ2VCcmVha0luc2lkZSIsIk1TUGFnZUJyZWFrSW5zaWRlIiwiT1BhZ2VCcmVha0luc2lkZSIsInBjIiwiTW96UGMiLCJXZWJraXRQYyIsIk1TUGMiLCJPUGMiLCJwZXJzcGVjdGl2ZSIsIk1velBlcnNwZWN0aXZlIiwiV2Via2l0UGVyc3BlY3RpdmUiLCJNU1BlcnNwZWN0aXZlIiwiT1BlcnNwZWN0aXZlIiwicGVyc3BlY3RpdmVPcmlnaW4iLCJNb3pQZXJzcGVjdGl2ZU9yaWdpbiIsIldlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIiwiTVNQZXJzcGVjdGl2ZU9yaWdpbiIsIk9QZXJzcGVjdGl2ZU9yaWdpbiIsInBvaW50ZXJFdmVudHMiLCJNb3pQb2ludGVyRXZlbnRzIiwiV2Via2l0UG9pbnRlckV2ZW50cyIsIk1TUG9pbnRlckV2ZW50cyIsIk9Qb2ludGVyRXZlbnRzIiwicG9zaXRpb24iLCJNb3pQb3NpdGlvbiIsIldlYmtpdFBvc2l0aW9uIiwiTVNQb3NpdGlvbiIsIk9Qb3NpdGlvbiIsInB0IiwiTW96UHQiLCJXZWJraXRQdCIsIk1TUHQiLCJPUHQiLCJweCIsIk1velB4IiwiV2Via2l0UHgiLCJNU1B4IiwiT1B4IiwicSIsIk1velEiLCJXZWJraXRRIiwiTVNRIiwiT1EiLCJxdW90ZXMiLCJNb3pRdW90ZXMiLCJXZWJraXRRdW90ZXMiLCJNU1F1b3RlcyIsIk9RdW90ZXMiLCJyYWQiLCJNb3pSYWQiLCJXZWJraXRSYWQiLCJNU1JhZCIsIk9SYWQiLCJyZW0iLCJNb3pSZW0iLCJXZWJraXRSZW0iLCJNU1JlbSIsIk9SZW0iLCJyZXNpemUiLCJNb3pSZXNpemUiLCJXZWJraXRSZXNpemUiLCJNU1Jlc2l6ZSIsIk9SZXNpemUiLCJyZXZlcnQiLCJNb3pSZXZlcnQiLCJXZWJraXRSZXZlcnQiLCJNU1JldmVydCIsIk9SZXZlcnQiLCJyaWdodCIsIk1velJpZ2h0IiwiV2Via2l0UmlnaHQiLCJNU1JpZ2h0IiwiT1JpZ2h0IiwicnVieUFsaWduIiwiTW96UnVieUFsaWduIiwiV2Via2l0UnVieUFsaWduIiwiTVNSdWJ5QWxpZ24iLCJPUnVieUFsaWduIiwicnVieU1lcmdlIiwiTW96UnVieU1lcmdlIiwiV2Via2l0UnVieU1lcmdlIiwiTVNSdWJ5TWVyZ2UiLCJPUnVieU1lcmdlIiwicnVieVBvc2l0aW9uIiwiTW96UnVieVBvc2l0aW9uIiwiV2Via2l0UnVieVBvc2l0aW9uIiwiTVNSdWJ5UG9zaXRpb24iLCJPUnVieVBvc2l0aW9uIiwicyIsIk1velMiLCJXZWJraXRTIiwiTVNTIiwiT1MiLCJzY3JvbGxCZWhhdmlvciIsIk1velNjcm9sbEJlaGF2aW9yIiwiV2Via2l0U2Nyb2xsQmVoYXZpb3IiLCJNU1Njcm9sbEJlaGF2aW9yIiwiT1Njcm9sbEJlaGF2aW9yIiwic2Nyb2xsU25hcENvb3JkaW5hdGUiLCJNb3pTY3JvbGxTbmFwQ29vcmRpbmF0ZSIsIldlYmtpdFNjcm9sbFNuYXBDb29yZGluYXRlIiwiTVNTY3JvbGxTbmFwQ29vcmRpbmF0ZSIsIk9TY3JvbGxTbmFwQ29vcmRpbmF0ZSIsInNjcm9sbFNuYXBEZXN0aW5hdGlvbiIsIk1velNjcm9sbFNuYXBEZXN0aW5hdGlvbiIsIldlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbiIsIk1TU2Nyb2xsU25hcERlc3RpbmF0aW9uIiwiT1Njcm9sbFNuYXBEZXN0aW5hdGlvbiIsInNjcm9sbFNuYXBUeXBlIiwiTW96U2Nyb2xsU25hcFR5cGUiLCJXZWJraXRTY3JvbGxTbmFwVHlwZSIsIk1TU2Nyb2xsU25hcFR5cGUiLCJPU2Nyb2xsU25hcFR5cGUiLCJzaGFwZUltYWdlVGhyZXNob2xkIiwiTW96U2hhcGVJbWFnZVRocmVzaG9sZCIsIldlYmtpdFNoYXBlSW1hZ2VUaHJlc2hvbGQiLCJNU1NoYXBlSW1hZ2VUaHJlc2hvbGQiLCJPU2hhcGVJbWFnZVRocmVzaG9sZCIsInNoYXBlTWFyZ2luIiwiTW96U2hhcGVNYXJnaW4iLCJXZWJraXRTaGFwZU1hcmdpbiIsIk1TU2hhcGVNYXJnaW4iLCJPU2hhcGVNYXJnaW4iLCJzaGFwZU91dHNpZGUiLCJNb3pTaGFwZU91dHNpZGUiLCJXZWJraXRTaGFwZU91dHNpZGUiLCJNU1NoYXBlT3V0c2lkZSIsIk9TaGFwZU91dHNpZGUiLCJ0YWJTaXplIiwiTW96VGFiU2l6ZSIsIldlYmtpdFRhYlNpemUiLCJNU1RhYlNpemUiLCJPVGFiU2l6ZSIsInRhYmxlTGF5b3V0IiwiTW96VGFibGVMYXlvdXQiLCJXZWJraXRUYWJsZUxheW91dCIsIk1TVGFibGVMYXlvdXQiLCJPVGFibGVMYXlvdXQiLCJ0ZXh0QWxpZ24iLCJNb3pUZXh0QWxpZ24iLCJXZWJraXRUZXh0QWxpZ24iLCJNU1RleHRBbGlnbiIsIk9UZXh0QWxpZ24iLCJ0ZXh0QWxpZ25MYXN0IiwiTW96VGV4dEFsaWduTGFzdCIsIldlYmtpdFRleHRBbGlnbkxhc3QiLCJNU1RleHRBbGlnbkxhc3QiLCJPVGV4dEFsaWduTGFzdCIsInRleHRDb21iaW5lVXByaWdodCIsIk1velRleHRDb21iaW5lVXByaWdodCIsIldlYmtpdFRleHRDb21iaW5lVXByaWdodCIsIk1TVGV4dENvbWJpbmVVcHJpZ2h0IiwiT1RleHRDb21iaW5lVXByaWdodCIsInRleHREZWNvcmF0aW9uIiwiTW96VGV4dERlY29yYXRpb24iLCJXZWJraXRUZXh0RGVjb3JhdGlvbiIsIk1TVGV4dERlY29yYXRpb24iLCJPVGV4dERlY29yYXRpb24iLCJ0ZXh0RGVjb3JhdGlvbkNvbG9yIiwiTW96VGV4dERlY29yYXRpb25Db2xvciIsIldlYmtpdFRleHREZWNvcmF0aW9uQ29sb3IiLCJNU1RleHREZWNvcmF0aW9uQ29sb3IiLCJPVGV4dERlY29yYXRpb25Db2xvciIsInRleHREZWNvcmF0aW9uTGluZSIsIk1velRleHREZWNvcmF0aW9uTGluZSIsIldlYmtpdFRleHREZWNvcmF0aW9uTGluZSIsIk1TVGV4dERlY29yYXRpb25MaW5lIiwiT1RleHREZWNvcmF0aW9uTGluZSIsInRleHREZWNvcmF0aW9uU3R5bGUiLCJNb3pUZXh0RGVjb3JhdGlvblN0eWxlIiwiV2Via2l0VGV4dERlY29yYXRpb25TdHlsZSIsIk1TVGV4dERlY29yYXRpb25TdHlsZSIsIk9UZXh0RGVjb3JhdGlvblN0eWxlIiwidGV4dEVtcGhhc2lzIiwiTW96VGV4dEVtcGhhc2lzIiwiV2Via2l0VGV4dEVtcGhhc2lzIiwiTVNUZXh0RW1waGFzaXMiLCJPVGV4dEVtcGhhc2lzIiwidGV4dEVtcGhhc2lzQ29sb3IiLCJNb3pUZXh0RW1waGFzaXNDb2xvciIsIldlYmtpdFRleHRFbXBoYXNpc0NvbG9yIiwiTVNUZXh0RW1waGFzaXNDb2xvciIsIk9UZXh0RW1waGFzaXNDb2xvciIsInRleHRFbXBoYXNpc1Bvc2l0aW9uIiwiTW96VGV4dEVtcGhhc2lzUG9zaXRpb24iLCJXZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbiIsIk1TVGV4dEVtcGhhc2lzUG9zaXRpb24iLCJPVGV4dEVtcGhhc2lzUG9zaXRpb24iLCJ0ZXh0RW1waGFzaXNTdHlsZSIsIk1velRleHRFbXBoYXNpc1N0eWxlIiwiV2Via2l0VGV4dEVtcGhhc2lzU3R5bGUiLCJNU1RleHRFbXBoYXNpc1N0eWxlIiwiT1RleHRFbXBoYXNpc1N0eWxlIiwidGV4dEluZGVudCIsIk1velRleHRJbmRlbnQiLCJXZWJraXRUZXh0SW5kZW50IiwiTVNUZXh0SW5kZW50IiwiT1RleHRJbmRlbnQiLCJ0ZXh0T3JpZW50YXRpb24iLCJNb3pUZXh0T3JpZW50YXRpb24iLCJXZWJraXRUZXh0T3JpZW50YXRpb24iLCJNU1RleHRPcmllbnRhdGlvbiIsIk9UZXh0T3JpZW50YXRpb24iLCJ0ZXh0T3ZlcmZsb3ciLCJNb3pUZXh0T3ZlcmZsb3ciLCJXZWJraXRUZXh0T3ZlcmZsb3ciLCJNU1RleHRPdmVyZmxvdyIsIk9UZXh0T3ZlcmZsb3ciLCJ0ZXh0UmVuZGVyaW5nIiwiTW96VGV4dFJlbmRlcmluZyIsIldlYmtpdFRleHRSZW5kZXJpbmciLCJNU1RleHRSZW5kZXJpbmciLCJPVGV4dFJlbmRlcmluZyIsInRleHRTaGFkb3ciLCJNb3pUZXh0U2hhZG93IiwiV2Via2l0VGV4dFNoYWRvdyIsIk1TVGV4dFNoYWRvdyIsIk9UZXh0U2hhZG93IiwidGV4dFRyYW5zZm9ybSIsIk1velRleHRUcmFuc2Zvcm0iLCJXZWJraXRUZXh0VHJhbnNmb3JtIiwiTVNUZXh0VHJhbnNmb3JtIiwiT1RleHRUcmFuc2Zvcm0iLCJ0ZXh0VW5kZXJsaW5lUG9zaXRpb24iLCJNb3pUZXh0VW5kZXJsaW5lUG9zaXRpb24iLCJXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24iLCJNU1RleHRVbmRlcmxpbmVQb3NpdGlvbiIsIk9UZXh0VW5kZXJsaW5lUG9zaXRpb24iLCJ0b3AiLCJNb3pUb3AiLCJXZWJraXRUb3AiLCJNU1RvcCIsIk9Ub3AiLCJ0b3VjaEFjdGlvbiIsIk1velRvdWNoQWN0aW9uIiwiV2Via2l0VG91Y2hBY3Rpb24iLCJNU1RvdWNoQWN0aW9uIiwiT1RvdWNoQWN0aW9uIiwidHJhbnNmb3JtIiwiTW96VHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIiwibXNUcmFuc2Zvcm0iLCJPVHJhbnNmb3JtIiwidHJhbnNmb3JtQm94IiwiTW96VHJhbnNmb3JtQm94IiwiV2Via2l0VHJhbnNmb3JtQm94IiwiTVNUcmFuc2Zvcm1Cb3giLCJPVHJhbnNmb3JtQm94IiwidHJhbnNmb3JtT3JpZ2luIiwiTW96VHJhbnNmb3JtT3JpZ2luIiwiV2Via2l0VHJhbnNmb3JtT3JpZ2luIiwiTVNUcmFuc2Zvcm1PcmlnaW4iLCJPVHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtU3R5bGUiLCJNb3pUcmFuc2Zvcm1TdHlsZSIsIldlYmtpdFRyYW5zZm9ybVN0eWxlIiwiTVNUcmFuc2Zvcm1TdHlsZSIsIk9UcmFuc2Zvcm1TdHlsZSIsInRyYW5zaXRpb24iLCJNb3pUcmFuc2l0aW9uIiwiV2Via2l0VHJhbnNpdGlvbiIsIk1TVHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiTW96VHJhbnNpdGlvbkRlbGF5IiwiV2Via2l0VHJhbnNpdGlvbkRlbGF5IiwiTVNUcmFuc2l0aW9uRGVsYXkiLCJPVHJhbnNpdGlvbkRlbGF5IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiTW96VHJhbnNpdGlvbkR1cmF0aW9uIiwiV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uIiwiTVNUcmFuc2l0aW9uRHVyYXRpb24iLCJPVHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvblByb3BlcnR5IiwiTW96VHJhbnNpdGlvblByb3BlcnR5IiwiV2Via2l0VHJhbnNpdGlvblByb3BlcnR5IiwiTVNUcmFuc2l0aW9uUHJvcGVydHkiLCJPVHJhbnNpdGlvblByb3BlcnR5IiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwiTW96VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwiV2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwiTVNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJPVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwidHVybiIsIk1velR1cm4iLCJXZWJraXRUdXJuIiwiTVNUdXJuIiwiT1R1cm4iLCJ1bmljb2RlQmlkaSIsIk1velVuaWNvZGVCaWRpIiwiV2Via2l0VW5pY29kZUJpZGkiLCJNU1VuaWNvZGVCaWRpIiwiT1VuaWNvZGVCaWRpIiwidW5zZXQiLCJNb3pVbnNldCIsIldlYmtpdFVuc2V0IiwiTVNVbnNldCIsIk9VbnNldCIsInZlcnRpY2FsQWxpZ24iLCJNb3pWZXJ0aWNhbEFsaWduIiwiV2Via2l0VmVydGljYWxBbGlnbiIsIk1TVmVydGljYWxBbGlnbiIsIk9WZXJ0aWNhbEFsaWduIiwidmgiLCJNb3pWaCIsIldlYmtpdFZoIiwiTVNWaCIsIk9WaCIsInZpc2liaWxpdHkiLCJNb3pWaXNpYmlsaXR5IiwiV2Via2l0VmlzaWJpbGl0eSIsIk1TVmlzaWJpbGl0eSIsIk9WaXNpYmlsaXR5Iiwidm1heCIsIk1velZtYXgiLCJXZWJraXRWbWF4IiwiTVNWbWF4IiwiT1ZtYXgiLCJ2bWluIiwiTW96Vm1pbiIsIldlYmtpdFZtaW4iLCJNU1ZtaW4iLCJPVm1pbiIsInZ3IiwiTW96VnciLCJXZWJraXRWdyIsIk1TVnciLCJPVnciLCJ3aGl0ZVNwYWNlIiwiTW96V2hpdGVTcGFjZSIsIldlYmtpdFdoaXRlU3BhY2UiLCJNU1doaXRlU3BhY2UiLCJPV2hpdGVTcGFjZSIsIndpZG93cyIsIk1veldpZG93cyIsIldlYmtpdFdpZG93cyIsIk1TV2lkb3dzIiwiT1dpZG93cyIsIndpZHRoIiwiTW96V2lkdGgiLCJXZWJraXRXaWR0aCIsIk1TV2lkdGgiLCJPV2lkdGgiLCJ3aWxsQ2hhbmdlIiwiTW96V2lsbENoYW5nZSIsIldlYmtpdFdpbGxDaGFuZ2UiLCJNU1dpbGxDaGFuZ2UiLCJPV2lsbENoYW5nZSIsIndvcmRCcmVhayIsIk1veldvcmRCcmVhayIsIldlYmtpdFdvcmRCcmVhayIsIk1TV29yZEJyZWFrIiwiT1dvcmRCcmVhayIsIndvcmRTcGFjaW5nIiwiTW96V29yZFNwYWNpbmciLCJXZWJraXRXb3JkU3BhY2luZyIsIk1TV29yZFNwYWNpbmciLCJPV29yZFNwYWNpbmciLCJ3b3JkV3JhcCIsIk1veldvcmRXcmFwIiwiV2Via2l0V29yZFdyYXAiLCJNU1dvcmRXcmFwIiwiT1dvcmRXcmFwIiwid3JpdGluZ01vZGUiLCJNb3pXcml0aW5nTW9kZSIsIldlYmtpdFdyaXRpbmdNb2RlIiwiTVNXcml0aW5nTW9kZSIsIk9Xcml0aW5nTW9kZSIsInpJbmRleCIsIk1velpJbmRleCIsIldlYmtpdFpJbmRleCIsIk1TWkluZGV4IiwiT1pJbmRleCIsImZvbnRTaXplIiwiTW96Rm9udFNpemUiLCJXZWJraXRGb250U2l6ZSIsIk1TRm9udFNpemUiLCJPRm9udFNpemUiLCJmbGV4IiwiTW96RmxleCIsIldlYmtpdEZsZXgiLCJNU0ZsZXgiLCJPRmxleCIsImZyIiwiTW96RnIiLCJXZWJraXRGciIsIk1TRnIiLCJPRnIiLCJvdmVyZmxvd1Njcm9sbGluZyIsIk1vek92ZXJmbG93U2Nyb2xsaW5nIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNU092ZXJmbG93U2Nyb2xsaW5nIiwiT092ZXJmbG93U2Nyb2xsaW5nIiwidXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiTVNVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiXX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXByb3B0eXBlL3NyYy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXByb3B0eXBlL3NyYy9jc3MtcHJvcGVydGllcy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIG89ZVt0XTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpey0xPT09ci5pbmRleE9mKGUpJiZzLnB1c2goZSl9KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3AgIit0KyIgcGFzc2VkIHRvICIrbisiLiBIYXMgaW52YWxpZCBrZXlzICIrcy5qb2luKCIsICIpKX19LGUuZXhwb3J0cy5pc1JlcXVpcmVkPWZ1bmN0aW9uKHQsbixyKXtpZighdFtuXSl0aHJvdyBuZXcgRXJyb3IoIlByb3AgIituKyIgcGFzc2VkIHRvICIrcisiIGlzIHJlcXVpcmVkIik7cmV0dXJuIGUuZXhwb3J0cyh0LG4scil9LGUuZXhwb3J0cy5zdXBwb3J0aW5nQXJyYXlzPW8ub25lT2ZUeXBlKFtvLmFycmF5T2YoZS5leHBvcnRzKSxlLmV4cG9ydHNdKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL1RyYWNraW5nUHJvcFR5cGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5kZWZhdWx0PW8uZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpvLmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6by5kZWZhdWx0LmZ1bmN9KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2Rpc3BhdGNoVHJhY2tpbmdFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpeygwLHMuZGVmYXVsdCkoZSkubGVuZ3RoPjAmJih3aW5kb3cuZGF0YUxheWVyPXdpbmRvdy5kYXRhTGF5ZXJ8fFtdKS5wdXNoKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7dC5kZWZhdWx0PXJ9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvd2l0aFRyYWNraW5nQ29tcG9uZW50RGVjb3JhdG9yLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIndpdGhUcmFja2luZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIobykuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVHJhY2tpbmdDb250ZXh0VHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uVHJhY2tpbmdDb250ZXh0VHlwZX19KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC90cmFja0V2ZW50TWV0aG9kRGVjb3JhdG9yLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRyYWNrRXZlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKHMpLmRlZmF1bHR9fSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvVHJhY2tpbmdQcm9wVHlwZS5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUcmFja2luZ1Byb3BUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcihpKS5kZWZhdWx0fX0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL3RyYWNraW5nSG9DLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKGEpLmRlZmF1bHR9fSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9tYWtlQ2xhc3NNZW1iZXJEZWNvcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBvPXIuY29uZmlndXJhYmxlLHM9ci5lbnVtZXJhYmxlLGE9ci52YWx1ZSx1PXIuZ2V0LGM9ci5pbml0aWFsaXplcjtpZihhKXJldHVybntjb25maWd1cmFibGU6byxlbnVtZXJhYmxlOnMsdmFsdWU6ZShhKX07aWYodXx8YylyZXR1cm57Y29uZmlndXJhYmxlOm8sZW51bWVyYWJsZTpzLGdldDpmdW5jdGlvbigpe2lmKHRoaXM9PT10KXJldHVybiBudWxsO3ZhciByPWM/KDAsbC5kZWZhdWx0KShjLHRoaXMsW10pOigwLGwuZGVmYXVsdCkodSx0aGlzLFtdKSxhPWUocikuYmluZCh0aGlzKTtyZXR1cm4oMCxpLmRlZmF1bHQpKHRoaXMsbix7Y29uZmlndXJhYmxlOm8sZW51bWVyYWJsZTpzLHZhbHVlOmF9KSxhfX07dGhyb3cgbmV3IEVycm9yKCJjYWxsZWQgbWFrZUNsYXNzTWVtYmVyRGVjb3JhdG9yIG9uIHVuc3VwcG9ydGVkIGRlc2NyaXB0b3IiKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9yZWZsZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9yZWZsZWN0L2FwcGx5LmpzIiksbD1yKGEpO3QuZGVmYXVsdD1vfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvdHJhY2tFdmVudE1ldGhvZERlY29yYXRvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybigwLGMuZGVmYXVsdCkoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMscj1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkocikscz0wO3M8cjtzKyspb1tzXT1hcmd1bWVudHNbc107dmFyIGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KHQpLHM9MDtzPHQ7cysrKXJbc109YXJndW1lbnRzW3NdO2lmKG4ucHJvcHMmJm4ucHJvcHMudHJhY2tpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQpe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2Uobi5wcm9wcyxuLnN0YXRlLG8scik6ZTtuLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoaSl9fSx1PSgwLGwuZGVmYXVsdCkodCx0aGlzLG8pO3JldHVybiBpLmRlZmF1bHQmJmkuZGVmYXVsdC5yZXNvbHZlKHUpPT09dT91LnRoZW4oYS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlKXt0aHJvdyBhKG51bGwsZSksZX0pOihhKCksdSl9fSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlLmpzIiksaT1yKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3JlZmxlY3QvYXBwbHkuanMiKSxsPXIoYSk7dC5kZWZhdWx0PW87dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvbWFrZUNsYXNzTWVtYmVyRGVjb3JhdG9yLmpzIiksYz1yKHUpfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvdHJhY2tpbmdIb0MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD8oMCxpLmRlZmF1bHQpKGUsdCkuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyk6KDAsbC5kZWZhdWx0KShlKS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1vO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL3dpdGhUcmFja2luZ0NvbXBvbmVudERlY29yYXRvci5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL3RyYWNrRXZlbnRNZXRob2REZWNvcmF0b3IuanMiKSxsPXIoYSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC93aXRoVHJhY2tpbmdDb21wb25lbnREZWNvcmF0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQuZGlzcGF0Y2gscj12b2lkIDA9PT1uP1MuZGVmYXVsdDpuLG89dC5kaXNwYXRjaE9uTW91bnQscz12b2lkIDAhPT1vJiZvLGE9dC5wcm9jZXNzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbixvLHU9dC5kaXNwbGF5TmFtZXx8dC5uYW1lfHwiQ29tcG9uZW50IixkPShvPW49ZnVuY3Rpb24obil7ZnVuY3Rpb24gbyhlLHQpeygwLGMuZGVmYXVsdCkodGhpcyxvKTt2YXIgbj0oMCxmLmRlZmF1bHQpKHRoaXMsKG8uX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKG8pKS5jYWxsKHRoaXMsZSx0KSk7cmV0dXJuIG4udHJhY2tFdmVudD1mdW5jdGlvbihlKXtuLmdldFRyYWNraW5nRGlzcGF0Y2hlcigpKCgwLFQuZGVmYXVsdCkobi50cmFja2luZ0RhdGF8fHt9LGV8fHt9KSl9LHQudHJhY2tpbmcmJnQudHJhY2tpbmcucHJvY2VzcyYmYSYmY29uc29sZS5lcnJvcigiW3JlYWN0LXRyYWNraW5nXSBvcHRpb25zLnByb2Nlc3Mgc2hvdWxkIGJlIHVzZWQgb25jZSBvbiB0b3AgbGV2ZWwgY29tcG9uZW50Iiksbi5jb21wdXRlVHJhY2tpbmdEYXRhKGUsdCksbi50cmFja2luZz17dHJhY2tFdmVudDpuLnRyYWNrRXZlbnQsZ2V0VHJhY2tpbmdEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIG4udHJhY2tpbmdEYXRhfX0sbn1yZXR1cm4oMCxoLmRlZmF1bHQpKG8sbiksKDAsXy5kZWZhdWx0KShvLFt7a2V5OiJnZXRDaGlsZENvbnRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LnRyYWNraW5nO3JldHVybnt0cmFja2luZzp7ZGF0YTooMCxULmRlZmF1bHQpKHRoaXMuY29udGV4dFRyYWNraW5nRGF0YXx8e30sdGhpcy5vd25UcmFja2luZ0RhdGF8fHt9KSxkaXNwYXRjaDp0aGlzLmdldFRyYWNraW5nRGlzcGF0Y2hlcigpLHByb2Nlc3M6ZSYmZS5wcm9jZXNzfHxhfX19fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQudHJhY2tpbmcsdD1lJiZlLnByb2Nlc3M7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBzKXRoaXMudHJhY2tFdmVudCgoMCxULmRlZmF1bHQpKHQodGhpcy5vd25UcmFja2luZ0RhdGEpfHx7fSxzKHRoaXMudHJhY2tpbmdEYXRhKXx8e30pKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXt2YXIgbj10KHRoaXMub3duVHJhY2tpbmdEYXRhKTtuJiZ0aGlzLnRyYWNrRXZlbnQobil9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBzP3RoaXMudHJhY2tFdmVudChzKHRoaXMudHJhY2tpbmdEYXRhKSk6ITA9PT1zJiZ0aGlzLnRyYWNrRXZlbnQoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5jb21wdXRlVHJhY2tpbmdEYXRhKGUsdCl9fSx7a2V5OiJnZXRUcmFja2luZ0Rpc3BhdGNoZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LnRyYWNraW5nO3JldHVybiBlJiZlLmRpc3BhdGNofHxyfX0se2tleToiY29tcHV0ZVRyYWNraW5nRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt0aGlzLm93blRyYWNraW5nRGF0YT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQpOmUsdGhpcy5jb250ZXh0VHJhY2tpbmdEYXRhPW4udHJhY2tpbmcmJm4udHJhY2tpbmcuZGF0YXx8e30sdGhpcy50cmFja2luZ0RhdGE9KDAsVC5kZWZhdWx0KSh0aGlzLmNvbnRleHRUcmFja2luZ0RhdGF8fHt9LHRoaXMub3duVHJhY2tpbmdEYXRhfHx7fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQsKDAsaS5kZWZhdWx0KSh7fSx0aGlzLnByb3BzLHt0cmFja2luZzp0aGlzLnRyYWNraW5nfSkpfX1dKSxvfShnLkNvbXBvbmVudCksbi5kaXNwbGF5TmFtZT0iV2l0aFRyYWNraW5nKCIrdSsiKSIsbi5jb250ZXh0VHlwZXM9e3RyYWNraW5nOlJ9LG4uY2hpbGRDb250ZXh0VHlwZXM9e3RyYWNraW5nOlJ9LG8pO3JldHVybigwLEMuZGVmYXVsdCkoZCx0KSxkfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UcmFja2luZ0NvbnRleHRUeXBlPXZvaWQgMDt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pO3QuZGVmYXVsdD1vO3ZhciBnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2RlZXBtZXJnZS9kaXN0L2VzLmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvZGlzcGF0Y2hUcmFja2luZ0V2ZW50LmpzIiksUz1yKE8pLFI9dC5UcmFja2luZ0NvbnRleHRUeXBlPXkuZGVmYXVsdC5zaGFwZSh7ZGF0YTp5LmRlZmF1bHQub2JqZWN0LGRpc3BhdGNoOnkuZGVmYXVsdC5mdW5jLHByb2Nlc3M6eS5kZWZhdWx0LmZ1bmN9KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBzLmlzTWVtbyhlKT91OmNbZS4kJHR5cGVvZl18fGl9ZnVuY3Rpb24gbyhlLHQsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtpZihoKXt2YXIgcz1tKHQpO3MmJnMhPT1oJiZvKGUscyxuKX12YXIgaT1fKHQpO3AmJihpPWkuY29uY2F0KHAodCkpKTtmb3IodmFyIGw9cihlKSx1PXIodCksYz0wO2M8aS5sZW5ndGg7KytjKXt2YXIgZz1pW2NdO2lmKCEoYVtnXXx8biYmbltnXXx8dSYmdVtnXXx8bCYmbFtnXSkpe3ZhciBiPWYodCxnKTt0cnl7ZChlLGcsYil9Y2F0Y2goZSl7fX19cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiKSxpPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZTohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlZmF1bHRQcm9wczohMCxnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiEwLG1peGluczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sYT17bmFtZTohMCxsZW5ndGg6ITAscHJvdG90eXBlOiEwLGNhbGxlcjohMCxjYWxsZWU6ITAsYXJndW1lbnRzOiEwLGFyaXR5OiEwfSxsPXskJHR5cGVvZjohMCxyZW5kZXI6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLHByb3BUeXBlczohMH0sdT17JCR0eXBlb2Y6ITAsY29tcGFyZTohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LGM9e307Y1tzLkZvcndhcmRSZWZdPWw7dmFyIGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LF89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMscD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixtPU9iamVjdC5nZXRQcm90b3R5cGVPZixoPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuZmlsZW5hbWUsbj0oZS5jb21wb25lbnRzLGUuaW1wb3J0cykscj1zKG4sMyksaT1yWzBdLGE9clsxXSxsPXJbMl07aWYoIWl8fCFpLkNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoImltcG9ydHNbMF0gZm9yIHJlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMgZG9lcyBub3QgbG9vayBsaWtlIFJlYWN0LiIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigiaW1wb3J0c1sxXSBmb3IgcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycyBkb2VzIG5vdCBsb29rIGxpa2UgYSBSZWFjdCBjb21wb25lbnQuIik7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5wcm90b3R5cGUucmVuZGVyO3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGUpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09Y29uc29sZS5yZXBvcnRFcnJvcnNBc0V4Y2VwdGlvbnMpdGhyb3cgZTt2YXIgdD1jb25zb2xlLnJlcG9ydEVycm9yc0FzRXhjZXB0aW9ucztjb25zb2xlLnJlcG9ydEVycm9yc0FzRXhjZXB0aW9ucz0hMSxjb25zb2xlLmVycm9yKGUpLGNvbnNvbGUucmVwb3J0RXJyb3JzQXNFeGNlcHRpb25zPXR9KSxpLmNyZWF0ZUVsZW1lbnQoYSxvKHtlcnJvcjplLGZpbGVuYW1lOnR9LGwpKX19LGV9fXZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49W10scj0hMCxvPSExLHM9dm9pZCAwO3RyeXtmb3IodmFyIGksYT1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGk9YS5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGkudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtvPSEwLHM9ZX1maW5hbGx5e3RyeXshciYmYS5yZXR1cm4mJmEucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IHN9fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmZpbGVuYW1lLG49ZS5jb21wb25lbnRzLHI9ZS5pbXBvcnRzLGk9ZS5sb2NhbHMsYT1vKHIsMSksdT1hWzBdLGM9byhpLDEpLGQ9Y1swXS5ob3Q7aWYoIXUuQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiaW1wb3J0c1swXSBmb3IgcmVhY3QtdHJhbnNmb3JtLWhtciBkb2VzIG5vdCBsb29rIGxpa2UgUmVhY3QuIik7aWYoIWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBkLmFjY2VwdCl0aHJvdyBuZXcgRXJyb3IoImxvY2Fsc1swXSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBgbW9kdWxlYCBvYmplY3Qgd2l0aCBIb3QgTW9kdWxlIHJlcGxhY2VtZW50IEFQSSBlbmFibGVkLiBZb3Ugc2hvdWxkIGRpc2FibGUgcmVhY3QtdHJhbnNmb3JtLWhtciBpbiBwcm9kdWN0aW9uIGJ5IHVzaW5nIGBlbnZgIHNlY3Rpb24gaW4gQmFiZWwgY29uZmlndXJhdGlvbi4gU2VlIHRoZSBleGFtcGxlIGluIFJFQURNRTogaHR0cHM6Ly9naXRodWIuY29tL2dhZWFyb24vcmVhY3QtdHJhbnNmb3JtLWhtciIpO09iamVjdC5rZXlzKG4pLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIW5bZV0uaXNJbkZ1bmN0aW9ufSkmJmQuYWNjZXB0KGZ1bmN0aW9uKGUpe2UmJihjb25zb2xlLndhcm4oIltSZWFjdCBUcmFuc2Zvcm0gSE1SXSBUaGVyZSB3YXMgYW4gZXJyb3IgdXBkYXRpbmcgIit0KyI6IiksY29uc29sZS5lcnJvcihlKSl9KTt2YXIgXz0oMCxzLmdldEZvcmNlVXBkYXRlKSh1KTtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uW3JdLGk9by5pc0luRnVuY3Rpb24sYT12b2lkIDAhPT1pJiZpLHU9by5kaXNwbGF5TmFtZSxjPXZvaWQgMD09PXU/cjp1O2lmKGEpcmV0dXJuIGU7dmFyIGQ9dCsiJCIrcjtyZXR1cm4gbFtkXT9mdW5jdGlvbigpe2NvbnNvbGUuaW5mbygiW1JlYWN0IFRyYW5zZm9ybSBITVJdIFBhdGNoaW5nICIrYyk7dmFyIHQ9bFtkXS51cGRhdGUoZSk7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0LmZvckVhY2goXyl9KX0oKTpsW2RdPSgwLHMuY3JlYXRlUHJveHkpKGUpLGxbZF0uZ2V0KCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj1bXSxyPSEwLG89ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgaSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2goaS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe289ITAscz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgc319cmV0dXJuIG59cmV0dXJuIGZ1bmN0aW9uKHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKTt0LmRlZmF1bHQ9cjt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2luZGV4LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIiksYT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGkpLGw9dm9pZCAwO2EuZGVmYXVsdC5fX3JlYWN0Q29tcG9uZW50UHJveGllcz9sPWEuZGVmYXVsdC5fX3JlYWN0Q29tcG9uZW50UHJveGllczoobD17fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5kZWZhdWx0LCJfX3JlYWN0Q29tcG9uZW50UHJveGllcyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOmx9KSksZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbm9kZV9tb2R1bGVzL3JlYWN0LWRlZXAtZm9yY2UtdXBkYXRlL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtpZih0KGUsbiksZS5fcmVuZGVyZWRDb21wb25lbnQpcihlLl9yZW5kZXJlZENvbXBvbmVudCx0LG4pO2Vsc2UgZm9yKHZhciBvIGluIGUuX3JlbmRlcmVkQ2hpbGRyZW4pZS5fcmVuZGVyZWRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShvKSYmcihlLl9yZW5kZXJlZENoaWxkcmVuW29dLHQsbil9ZnVuY3Rpb24gbyhlKXshMT09PWUuX3BlbmRpbmdGb3JjZVVwZGF0ZSYmKGUuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMCl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEwPT09ZS5fcGVuZGluZ0ZvcmNlVXBkYXRlKXt2YXIgbj1lLl9pbnN0YW5jZTt0LkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUuY2FsbChuKX19ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWUuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZTtyKG4sbykscihuLHMsdCl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPWUuX3JlYWN0SW50ZXJuYWxGaWJlcnx8ZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlO2lmKCJudW1iZXIiIT10eXBlb2Ygbi50YWcpcmV0dXJuIGkoZSx0KTtmb3IodmFyIHI9bjs7KXtpZihudWxsIT09ci5zdGF0ZU5vZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiByLnR5cGUpe3ZhciBvPXIuc3RhdGVOb2RlLHM9by51cGRhdGVyOyJmdW5jdGlvbiI9PXR5cGVvZiBvLmZvcmNlVXBkYXRlP28uZm9yY2VVcGRhdGUoKTpzJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5lbnF1ZXVlRm9yY2VVcGRhdGUmJnMuZW5xdWV1ZUZvcmNlVXBkYXRlKG8pfWlmKHIuY2hpbGQpci5jaGlsZC5yZXR1cm49cixyPXIuY2hpbGQ7ZWxzZXtpZihyPT09bilyZXR1cm47Zm9yKDshci5zaWJsaW5nOyl7aWYoIXIucmV0dXJufHxyLnJldHVybj09PW4pcmV0dXJuO3I9ci5yZXR1cm59ci5zaWJsaW5nLnJldHVybj1yLnJldHVybixyPXIuc2libGluZ319fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2EodCxlKX19dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1sLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2JpbmRBdXRvQmluZE1ldGhvZHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQuYmluZChlKTtuLl9fcmVhY3RCb3VuZENvbnRleHQ9ZSxuLl9fcmVhY3RCb3VuZE1ldGhvZD10LG4uX19yZWFjdEJvdW5kQXJndW1lbnRzPW51bGw7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSxvPW4uYmluZDtyZXR1cm4gbi5iaW5kPWZ1bmN0aW9uKHMpe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihzIT09ZSYmbnVsbCE9PXMpY29uc29sZS53YXJuKCJiaW5kKCk6IFJlYWN0IGNvbXBvbmVudCBtZXRob2RzIG1heSBvbmx5IGJlIGJvdW5kIHRvIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuIFNlZSAiK3IpO2Vsc2UgaWYoIWkubGVuZ3RoKXJldHVybiBjb25zb2xlLndhcm4oImJpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiBSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSB3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNhbGwuIFNlZSAiK3IpLG47dmFyIGE9by5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGEuX19yZWFjdEJvdW5kQ29udGV4dD1lLGEuX19yZWFjdEJvdW5kTWV0aG9kPXQsYS5fX3JlYWN0Qm91bmRBcmd1bWVudHM9aSxhfSxufWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0IGluIGUuX19yZWFjdEF1dG9CaW5kTWFwKXtpZighZS5fX3JlYWN0QXV0b0JpbmRNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2lmKCFlLmhhc093blByb3BlcnR5KHQpfHxlW3RdLl9fcmVhY3RCb3VuZENvbnRleHQhPT1lKXt2YXIgbj1lLl9fcmVhY3RBdXRvQmluZE1hcFt0XTtlW3RdPXIoZSxuKX19fWZ1bmN0aW9uIHMoZSl7ZS5fX3JlYWN0QXV0b0JpbmRQYWlycz9pKGUpOmUuX19yZWFjdEF1dG9CaW5kTWFwJiZvKGUpfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5fX3JlYWN0QXV0b0JpbmRQYWlycztpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIG89dFtuXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8ZVtvXS5fX3JlYWN0Qm91bmRDb250ZXh0IT09ZSl7dmFyIHM9dFtuKzFdO2Vbb109cihlLHMpfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1zfSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9ub2RlX21vZHVsZXMvcmVhY3QtcHJveHkvbW9kdWxlcy9jcmVhdGVDbGFzc1Byb3h5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSYmIXQpcmV0dXJuITA7aWYoIWV8fCF0KXJldHVybiExO2Zvcih2YXIgbiBpbiBlKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9KDAsZi5kZWZhdWx0KShDLGZ1bmN0aW9uKHQpe3JldHVybiBfKHQsMSlbMF09PT1lfSk7cmV0dXJuIHQ/dFsxXTpudWxsfWZ1bmN0aW9uIGEoZSx0KXtDLnB1c2goW2UsdF0pfWZ1bmN0aW9uIGwoZSl7ZnVuY3Rpb24gdChlKXt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGYsZSk7cmV0dXJuIXMobVtlXSx0KX1mdW5jdGlvbiBuKGUsdCxuKXt2YXIgcj1lKCk7dHJ5e3JldHVybiByLmFwcGx5KHQsbil9Y2F0Y2goZSl7IWZ1bmN0aW9uKCl7dmFyIGU9bmV3KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KHIsW251bGxdLmNvbmNhdChvKG4pKSkpO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7QS5pbmRleE9mKG4pPi0xfHwodFtuXT1lW25dKX0pfSgpfX1mdW5jdGlvbiByKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYSBjb25zdHJ1Y3Rvci4iKTt2YXIgbj1pKGUpO2lmKG4pcmV0dXJuIHIobi5fX2dldEN1cnJlbnQoKSk7cD1lO3ZhciBvPV8udXBkYXRlKGUucHJvdG90eXBlKTtyZXR1cm4gZi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZixmLl9fcHJvdG9fXz1lLl9fcHJvdG9fXyxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoQS5pbmRleE9mKG4pPi0xKSl7dmFyIHI9ZCh7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbikse2NvbmZpZ3VyYWJsZTohMH0pO3Qobil8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZixuLHIpLG1bbl09cil9fSksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZikuZm9yRWFjaChmdW5jdGlvbihuKXtpZighKEEuaW5kZXhPZihuKT4tMXx8ZS5oYXNPd25Qcm9wZXJ0eShuKSkpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixuKTtyJiYhci5jb25maWd1cmFibGV8fHQobil8fChkZWxldGUgZltuXSxkZWxldGUgbVtuXSl9fSksZi5kaXNwbGF5TmFtZT1lLmRpc3BsYXlOYW1lfHxlLm5hbWUsby5mb3JFYWNoKGIuZGVmYXVsdCksby5mb3JFYWNoKHkuZGVmYXVsdCksb31mdW5jdGlvbiBsKCl7cmV0dXJuIGZ9ZnVuY3Rpb24gdSgpe3JldHVybiBwfXZhciBjPWkoZSk7aWYoYylyZXR1cm4gYzt2YXIgXz0oMCxoLmRlZmF1bHQpKCkscD12b2lkIDAsZj12b2lkIDAsbT17fTt0cnl7Zj1uZXcgRnVuY3Rpb24oImZhY3RvcnkiLCJpbnN0YW50aWF0ZSIsInJldHVybiBmdW5jdGlvbiAiKyhlLm5hbWV8fCJQcm94eUNvbXBvbmVudCIpKyIoKSB7XG4gICAgICAgICByZXR1cm4gaW5zdGFudGlhdGUoZmFjdG9yeSwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0iKShmdW5jdGlvbigpe3JldHVybiBwfSxuKX1jYXRjaChlKXtmPWZ1bmN0aW9uKCl7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcyxhcmd1bWVudHMpfX1mLnByb3RvdHlwZT1fLmdldCgpLGYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcC50b1N0cmluZygpfSxyKGUpO3ZhciBnPXtnZXQ6bCx1cGRhdGU6cn07cmV0dXJuIGEoZixnKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZywiX19nZXRDdXJyZW50Iix7Y29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITEsdmFsdWU6dX0pLGd9ZnVuY3Rpb24gdShlKXt2YXIgdD1lO3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdXBkYXRlOmZ1bmN0aW9uKGUpe3Q9ZX19fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUuX19wcm90b19fJiYoMCxULmRlZmF1bHQpKCk/bChlKTp1KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPVtdLHI9ITAsbz0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciBpLGE9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShpPWEubmV4dCgpKS5kb25lKSYmKG4ucHVzaChpLnZhbHVlKSwhdHx8bi5sZW5ndGghPT10KTtyPSEwKTt9Y2F0Y2goZSl7bz0hMCxzPWV9ZmluYWxseXt0cnl7IXImJmEucmV0dXJuJiZhLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBzfX1yZXR1cm4gbn1yZXR1cm4gZnVuY3Rpb24odCxuKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGUodCxuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpO3QuZGVmYXVsdD1sLHQuZGVmYXVsdD1jO3ZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9ub2RlX21vZHVsZXMvcmVhY3QtcHJveHkvbW9kdWxlcy9jcmVhdGVQcm90b3R5cGVQcm94eS5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbm9kZV9tb2R1bGVzL3JlYWN0LXByb3h5L21vZHVsZXMvYmluZEF1dG9CaW5kTWV0aG9kcy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbm9kZV9tb2R1bGVzL3JlYWN0LXByb3h5L21vZHVsZXMvZGVsZXRlVW5rbm93bkF1dG9CaW5kTWV0aG9kcy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbm9kZV9tb2R1bGVzL3JlYWN0LXByb3h5L21vZHVsZXMvc3VwcG9ydHNQcm90b0Fzc2lnbm1lbnQuanMiKSxUPXIodiksQT1bImxlbmd0aCIsIm5hbWUiLCJhcmd1bWVudHMiLCJjYWxsZXIiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLEM9W119LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2NyZWF0ZVByb3RvdHlwZVByb3h5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBwW2VdP3BbZV0udG9TdHJpbmcoKToiPG1ldGhvZCB3YXMgZGVsZXRlZD4ifX1mdW5jdGlvbiB0KHQpe3ZhciBuPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHBbdF0pcmV0dXJuIHBbdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4oMCxpLmRlZmF1bHQpKG4scFt0XSksbi50b1N0cmluZz1lKHQpLG59ZnVuY3Rpb24gbigpe2lmKGYucHVzaCh0aGlzKSwiZnVuY3Rpb24iPT10eXBlb2YgcC5jb21wb25lbnREaWRNb3VudClyZXR1cm4gcC5jb21wb25lbnREaWRNb3VudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcigpe3ZhciBlPWYuaW5kZXhPZih0aGlzKTtpZigtMSE9PWUmJmYuc3BsaWNlKGUsMSksImZ1bmN0aW9uIj09dHlwZW9mIHAuY29tcG9uZW50V2lsbFVubW91bnQpcmV0dXJuIHAuY29tcG9uZW50V2lsbFVubW91bnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG8oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxlLHQpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsZSl8fHt9LHI9bi5lbnVtZXJhYmxlLHM9dm9pZCAwIT09ciYmcixpPW4ud3JpdGFibGU7byhlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTpzLHdyaXRhYmxlOnZvaWQgMD09PWl8fGksdmFsdWU6dH0pfWZ1bmN0aW9uIGEoKXtpZihwLl9fcmVhY3RBdXRvQmluZE1hcCl7dmFyIGU9e307Zm9yKHZhciB0IGluIHAuX19yZWFjdEF1dG9CaW5kTWFwKSJmdW5jdGlvbiI9PXR5cGVvZiBfW3RdJiZwLl9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09X1t0XSk7cmV0dXJuIGV9fWZ1bmN0aW9uIHUoKXtmb3IodmFyIGU9W10sdD0wO3Q8cC5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGg7dCs9Mil7dmFyIG49cC5fX3JlYWN0QXV0b0JpbmRQYWlyc1t0XSxyPV9bbl07ImZ1bmN0aW9uIj09dHlwZW9mIHImJmUucHVzaChuLHIpfXJldHVybiBlfWZ1bmN0aW9uIGMoZSl7cD1lO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHApLGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXyk7cmV0dXJuKDAsbC5kZWZhdWx0KShjLGkpLmZvckVhY2goZnVuY3Rpb24oZSl7ZGVsZXRlIF9bZV19KSxpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlP3MoZSx0KGUpKTpvKGUsbil9KSxzKCJjb21wb25lbnREaWRNb3VudCIsbikscygiY29tcG9uZW50V2lsbFVubW91bnQiLHIpLHAuaGFzT3duUHJvcGVydHkoIl9fcmVhY3RBdXRvQmluZE1hcCIpJiZzKCJfX3JlYWN0QXV0b0JpbmRNYXAiLGEoKSkscC5oYXNPd25Qcm9wZXJ0eSgiX19yZWFjdEF1dG9CaW5kUGFpcnMiKSYmcygiX19yZWFjdEF1dG9CaW5kUGFpcnMiLHUoKSksXy5fX3Byb3RvX189ZSxmfWZ1bmN0aW9uIGQoKXtyZXR1cm4gX312YXIgXz17fSxwPW51bGwsZj1bXTtyZXR1cm4gbi50b1N0cmluZz1lKCJjb21wb25lbnREaWRNb3VudCIpLHIudG9TdHJpbmc9ZSgiY29tcG9uZW50V2lsbFVubW91bnQiKSx7dXBkYXRlOmMsZ2V0OmR9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9bzt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvYXNzaWduLmpzIiksaT1yKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RpZmZlcmVuY2UuanMiKSxsPXIoYSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2RlbGV0ZVVua25vd25BdXRvQmluZE1ldGhvZHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybighZS5fX3JlYWN0QXV0b0JpbmRNYXB8fCFlLl9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eSh0KSkmJighKGUuX19yZWFjdEF1dG9CaW5kUGFpcnMmJmUuX19yZWFjdEF1dG9CaW5kUGFpcnMuaW5kZXhPZih0KT49MCkmJm51bGw9PT1lW3RdLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUuY29uc3RydWN0b3IucHJvdG90eXBlLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiEoIXJ8fCFyLmdldCkmJnIuZ2V0KCkubGVuZ3RoPT09ZVt0XS5sZW5ndGh9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkudmFsdWUpcmV0dXJuIGUuX19yZWFjdEF1dG9CaW5kTWFwfHxlLl9fcmVhY3RBdXRvQmluZFBhaXJzP3IoZSx0KTpvKGUsdCl9ZnVuY3Rpb24gaShlKXtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoZSx0KSYmZGVsZXRlIGVbdF19KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEZvcmNlVXBkYXRlPXQuY3JlYXRlUHJveHk9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbm9kZV9tb2R1bGVzL3JlYWN0LXByb3h5L21vZHVsZXMvc3VwcG9ydHNQcm90b0Fzc2lnbm1lbnQuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL2NyZWF0ZUNsYXNzUHJveHkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1kZWVwLWZvcmNlLXVwZGF0ZS9saWIvaW5kZXguanMiKSx1PXIobCk7KDAscy5kZWZhdWx0KSgpfHxjb25zb2xlLndhcm4oIlRoaXMgSmF2YVNjcmlwdCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IF9fcHJvdG9fXy4gVGhpcyBtZWFucyB0aGF0IHJlYWN0LXByb3h5IGlzIHVuYWJsZSB0byBwcm94eSBSZWFjdCBjb21wb25lbnRzLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gcmVhY3QtcHJveHksIHN1Y2ggYXMgcmVhY3QtdHJhbnNmb3JtLWhtciwgd2lsbCBub3QgZnVuY3Rpb24gYXMgZXhwZWN0ZWQuIiksdC5jcmVhdGVQcm94eT1hLmRlZmF1bHQsdC5nZXRGb3JjZVVwZGF0ZT11LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL25vZGVfbW9kdWxlcy9yZWFjdC1wcm94eS9tb2R1bGVzL3N1cHBvcnRzUHJvdG9Bc3NpZ25tZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gby5zdXBwb3J0c3x8ITF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBvPXt9LHM9e3N1cHBvcnRzOiEwfTt0cnl7by5fX3Byb3RvX189c31jYXRjaChlKXt9fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9DU1NUcmFuc2l0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dC5fX2VzTW9kdWxlPSEwO3ZhciBhPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHU9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2FkZENsYXNzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvY2xhc3MvcmVtb3ZlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvVHJhbnNpdGlvbi5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdXRpbHMvUHJvcFR5cGVzLmpzIiksRT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZ0JiZ0LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4oMCxkLmRlZmF1bHQpKGUsdCl9KX0seT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZ0JiZ0LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4oMCxwLmRlZmF1bHQpKGUsdCl9KX0sdj0oYSh7fSxnLmRlZmF1bHQucHJvcFR5cGVzLHtjbGFzc05hbWVzOmIuY2xhc3NOYW1lc1NoYXBlLG9uRW50ZXI6dS5mdW5jLG9uRW50ZXJpbmc6dS5mdW5jLG9uRW50ZXJlZDp1LmZ1bmMsb25FeGl0OnUuZnVuYyxvbkV4aXRpbmc6dS5mdW5jLG9uRXhpdGVkOnUuZnVuY30pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyLGk7byh0aGlzLHQpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoYSksdT0wO3U8YTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj1zKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIub25FbnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZ2V0Q2xhc3NOYW1lcyh0PyJhcHBlYXIiOiJlbnRlciIpLG89bi5jbGFzc05hbWU7ci5yZW1vdmVDbGFzc2VzKGUsImV4aXQiKSxFKGUsbyksci5wcm9wcy5vbkVudGVyJiZyLnByb3BzLm9uRW50ZXIoZSl9LHIub25FbnRlcmluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZ2V0Q2xhc3NOYW1lcyh0PyJhcHBlYXIiOiJlbnRlciIpLG89bi5hY3RpdmVDbGFzc05hbWU7ci5yZWZsb3dBbmRBZGRDbGFzcyhlLG8pLHIucHJvcHMub25FbnRlcmluZyYmci5wcm9wcy5vbkVudGVyaW5nKGUpfSxyLm9uRW50ZXJlZD1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZ2V0Q2xhc3NOYW1lcygiZW50ZXIiKSxvPW4uZG9uZUNsYXNzTmFtZTtyLnJlbW92ZUNsYXNzZXMoZSx0PyJhcHBlYXIiOiJlbnRlciIpLEUoZSxvKSxyLnByb3BzLm9uRW50ZXJlZCYmci5wcm9wcy5vbkVudGVyZWQoZSl9LHIub25FeGl0PWZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0Q2xhc3NOYW1lcygiZXhpdCIpLG49dC5jbGFzc05hbWU7ci5yZW1vdmVDbGFzc2VzKGUsImFwcGVhciIpLHIucmVtb3ZlQ2xhc3NlcyhlLCJlbnRlciIpLEUoZSxuKSxyLnByb3BzLm9uRXhpdCYmci5wcm9wcy5vbkV4aXQoZSl9LHIub25FeGl0aW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0Q2xhc3NOYW1lcygiZXhpdCIpLG49dC5hY3RpdmVDbGFzc05hbWU7ci5yZWZsb3dBbmRBZGRDbGFzcyhlLG4pLHIucHJvcHMub25FeGl0aW5nJiZyLnByb3BzLm9uRXhpdGluZyhlKX0sci5vbkV4aXRlZD1mdW5jdGlvbihlKXt2YXIgdD1yLmdldENsYXNzTmFtZXMoImV4aXQiKSxuPXQuZG9uZUNsYXNzTmFtZTtyLnJlbW92ZUNsYXNzZXMoZSwiZXhpdCIpLEUoZSxuKSxyLnByb3BzLm9uRXhpdGVkJiZyLnByb3BzLm9uRXhpdGVkKGUpfSxyLmdldENsYXNzTmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5jbGFzc05hbWVzLG49InN0cmluZyIhPXR5cGVvZiB0P3RbZV06dCsiLSIrZTtyZXR1cm57Y2xhc3NOYW1lOm4sYWN0aXZlQ2xhc3NOYW1lOiJzdHJpbmciIT10eXBlb2YgdD90W2UrIkFjdGl2ZSJdOm4rIi1hY3RpdmUiLGRvbmVDbGFzc05hbWU6InN0cmluZyIhPXR5cGVvZiB0P3RbZSsiRG9uZSJdOm4rIi1kb25lIn19LGk9bixzKHIsaSl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzc2VzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRDbGFzc05hbWVzKHQpLHI9bi5jbGFzc05hbWUsbz1uLmFjdGl2ZUNsYXNzTmFtZSxzPW4uZG9uZUNsYXNzTmFtZTtyJiZ5KGUsciksbyYmeShlLG8pLHMmJnkoZSxzKX0sdC5wcm90b3R5cGUucmVmbG93QW5kQWRkQ2xhc3M9ZnVuY3Rpb24oZSx0KXtlJiZlLnNjcm9sbFRvcCxFKGUsdCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPWEoe30sdGhpcy5wcm9wcyk7cmV0dXJuIGRlbGV0ZSBlLmNsYXNzTmFtZXMsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZy5kZWZhdWx0LGEoe30sZSx7b25FbnRlcjp0aGlzLm9uRW50ZXIsb25FbnRlcmVkOnRoaXMub25FbnRlcmVkLG9uRW50ZXJpbmc6dGhpcy5vbkVudGVyaW5nLG9uRXhpdDp0aGlzLm9uRXhpdCxvbkV4aXRpbmc6dGhpcy5vbkV4aXRpbmcsb25FeGl0ZWQ6dGhpcy5vbkV4aXRlZH0pKX0sdH0obS5kZWZhdWx0LkNvbXBvbmVudCkpO3YucHJvcFR5cGVzPXt9LHQuZGVmYXVsdD12LGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL1JlcGxhY2VUcmFuc2l0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGEoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMDt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvVHJhbnNpdGlvbkdyb3VwLmpzIiksZj1yKHApLG09KHUuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHIsbztzKHRoaXMsdCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShhKSx1PTA7dTxhO3UrKylsW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbj1yPWkodGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksaC5jYWxsKHIpLG89bixpKHIsbyl9cmV0dXJuIGEodCxlKSx0LnByb3RvdHlwZS5oYW5kbGVMaWZlY3ljbGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89dGhpcy5wcm9wcy5jaGlsZHJlbixzPWQuZGVmYXVsdC5DaGlsZHJlbi50b0FycmF5KG8pW3RdO3MucHJvcHNbZV0mJihyPXMucHJvcHMpW2VdLmFwcGx5KHIsbiksdGhpcy5wcm9wc1tlXSYmdGhpcy5wcm9wc1tlXSgoMCxfLmZpbmRET01Ob2RlKSh0aGlzKSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNoaWxkcmVuLG49ZS5pbixyPW8oZSxbImNoaWxkcmVuIiwiaW4iXSkscz1kLmRlZmF1bHQuQ2hpbGRyZW4udG9BcnJheSh0KSxpPXNbMF0sYT1zWzFdO3JldHVybiBkZWxldGUgci5vbkVudGVyLGRlbGV0ZSByLm9uRW50ZXJpbmcsZGVsZXRlIHIub25FbnRlcmVkLGRlbGV0ZSByLm9uRXhpdCxkZWxldGUgci5vbkV4aXRpbmcsZGVsZXRlIHIub25FeGl0ZWQsZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZi5kZWZhdWx0LHIsbj9kLmRlZmF1bHQuY2xvbmVFbGVtZW50KGkse2tleToiZmlyc3QiLG9uRW50ZXI6dGhpcy5oYW5kbGVFbnRlcixvbkVudGVyaW5nOnRoaXMuaGFuZGxlRW50ZXJpbmcsb25FbnRlcmVkOnRoaXMuaGFuZGxlRW50ZXJlZH0pOmQuZGVmYXVsdC5jbG9uZUVsZW1lbnQoYSx7a2V5OiJzZWNvbmQiLG9uRW50ZXI6dGhpcy5oYW5kbGVFeGl0LG9uRW50ZXJpbmc6dGhpcy5oYW5kbGVFeGl0aW5nLG9uRW50ZXJlZDp0aGlzLmhhbmRsZUV4aXRlZH0pKX0sdH0oZC5kZWZhdWx0LkNvbXBvbmVudCkpLGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuaGFuZGxlRW50ZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmhhbmRsZUxpZmVjeWNsZSgib25FbnRlciIsMCxuKX0sdGhpcy5oYW5kbGVFbnRlcmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGUuaGFuZGxlTGlmZWN5Y2xlKCJvbkVudGVyaW5nIiwwLG4pfSx0aGlzLmhhbmRsZUVudGVyZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmhhbmRsZUxpZmVjeWNsZSgib25FbnRlcmVkIiwwLG4pfSx0aGlzLmhhbmRsZUV4aXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmhhbmRsZUxpZmVjeWNsZSgib25FeGl0IiwxLG4pfSx0aGlzLmhhbmRsZUV4aXRpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmhhbmRsZUxpZmVjeWNsZSgib25FeGl0aW5nIiwxLG4pfSx0aGlzLmhhbmRsZUV4aXRlZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGUuaGFuZGxlTGlmZWN5Y2xlKCJvbkV4aXRlZCIsMSxuKX19O20ucHJvcFR5cGVzPXt9LHQuZGVmYXVsdD1tLGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL1RyYW5zaXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBpKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gYShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gbCgpe310Ll9fZXNNb2R1bGU9ITAsdC5FWElUSU5HPXQuRU5URVJFRD10LkVOVEVSSU5HPXQuRVhJVEVEPXQuVU5NT1VOVEVEPXZvaWQgMDt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxmPXIocCksbT0obigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC91dGlscy9Qcm9wVHlwZXMuanMiKSx0LlVOTU9VTlRFRD0idW5tb3VudGVkIiksaD10LkVYSVRFRD0iZXhpdGVkIixnPXQuRU5URVJJTkc9ImVudGVyaW5nIixiPXQuRU5URVJFRD0iZW50ZXJlZCIsRT10LkVYSVRJTkc9ImV4aXRpbmciLHk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe3ModGhpcyx0KTt2YXIgbz1pKHRoaXMsZS5jYWxsKHRoaXMsbixyKSksYT1yLnRyYW5zaXRpb25Hcm91cCxsPWEmJiFhLmlzTW91bnRpbmc/bi5lbnRlcjpuLmFwcGVhcix1PXZvaWQgMDtyZXR1cm4gby5uZXh0U3RhdHVzPW51bGwsbi5pbj9sPyh1PWgsby5uZXh0U3RhdHVzPWcpOnU9Yjp1PW4udW5tb3VudE9uRXhpdHx8bi5tb3VudE9uRW50ZXI/bTpoLG8uc3RhdGU9e3N0YXR1czp1fSxvLm5leHRDYWxsYmFjaz1udWxsLG99cmV0dXJuIGEodCxlKSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm57dHJhbnNpdGlvbkdyb3VwOm51bGx9fSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3RhdHVzKCEwKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBlbmRpbmdTdGF0ZXx8dGhpcy5zdGF0ZSxuPXQuc3RhdHVzO2UuaW4/KG49PT1tJiZ0aGlzLnNldFN0YXRlKHtzdGF0dXM6aH0pLG4hPT1nJiZuIT09YiYmKHRoaXMubmV4dFN0YXR1cz1nKSk6biE9PWcmJm4hPT1ifHwodGhpcy5uZXh0U3RhdHVzPUUpfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVN0YXR1cygpfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCl9LHQucHJvdG90eXBlLmdldFRpbWVvdXRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50aW1lb3V0LHQ9dm9pZCAwLG49dm9pZCAwLHI9dm9pZCAwO3JldHVybiB0PW49cj1lLG51bGwhPWUmJiJudW1iZXIiIT10eXBlb2YgZSYmKHQ9ZS5leGl0LG49ZS5lbnRlcixyPWUuYXBwZWFyKSx7ZXhpdDp0LGVudGVyOm4sYXBwZWFyOnJ9fSx0LnByb3RvdHlwZS51cGRhdGVTdGF0dXM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5uZXh0U3RhdHVzO2lmKG51bGwhPT10KXt0aGlzLm5leHRTdGF0dXM9bnVsbCx0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO3ZhciBuPWYuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKTt0PT09Zz90aGlzLnBlcmZvcm1FbnRlcihuLGUpOnRoaXMucGVyZm9ybUV4aXQobil9ZWxzZSB0aGlzLnByb3BzLnVubW91bnRPbkV4aXQmJnRoaXMuc3RhdGUuc3RhdHVzPT09aCYmdGhpcy5zZXRTdGF0ZSh7c3RhdHVzOm19KX0sdC5wcm90b3R5cGUucGVyZm9ybUVudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMucHJvcHMuZW50ZXIsbz10aGlzLmNvbnRleHQudHJhbnNpdGlvbkdyb3VwP3RoaXMuY29udGV4dC50cmFuc2l0aW9uR3JvdXAuaXNNb3VudGluZzp0LHM9dGhpcy5nZXRUaW1lb3V0cygpO2lmKCF0JiYhcilyZXR1cm4gdm9pZCB0aGlzLnNhZmVTZXRTdGF0ZSh7c3RhdHVzOmJ9LGZ1bmN0aW9uKCl7bi5wcm9wcy5vbkVudGVyZWQoZSl9KTt0aGlzLnByb3BzLm9uRW50ZXIoZSxvKSx0aGlzLnNhZmVTZXRTdGF0ZSh7c3RhdHVzOmd9LGZ1bmN0aW9uKCl7bi5wcm9wcy5vbkVudGVyaW5nKGUsbyksbi5vblRyYW5zaXRpb25FbmQoZSxzLmVudGVyLGZ1bmN0aW9uKCl7bi5zYWZlU2V0U3RhdGUoe3N0YXR1czpifSxmdW5jdGlvbigpe24ucHJvcHMub25FbnRlcmVkKGUsbyl9KX0pfSl9LHQucHJvdG90eXBlLnBlcmZvcm1FeGl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLmV4aXQscj10aGlzLmdldFRpbWVvdXRzKCk7aWYoIW4pcmV0dXJuIHZvaWQgdGhpcy5zYWZlU2V0U3RhdGUoe3N0YXR1czpofSxmdW5jdGlvbigpe3QucHJvcHMub25FeGl0ZWQoZSl9KTt0aGlzLnByb3BzLm9uRXhpdChlKSx0aGlzLnNhZmVTZXRTdGF0ZSh7c3RhdHVzOkV9LGZ1bmN0aW9uKCl7dC5wcm9wcy5vbkV4aXRpbmcoZSksdC5vblRyYW5zaXRpb25FbmQoZSxyLmV4aXQsZnVuY3Rpb24oKXt0LnNhZmVTZXRTdGF0ZSh7c3RhdHVzOmh9LGZ1bmN0aW9uKCl7dC5wcm9wcy5vbkV4aXRlZChlKX0pfSl9KX0sdC5wcm90b3R5cGUuY2FuY2VsTmV4dENhbGxiYWNrPWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMubmV4dENhbGxiYWNrJiYodGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCksdGhpcy5uZXh0Q2FsbGJhY2s9bnVsbCl9LHQucHJvdG90eXBlLnNhZmVTZXRTdGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5wZW5kaW5nU3RhdGU9ZSx0PXRoaXMuc2V0TmV4dENhbGxiYWNrKHQpLHRoaXMuc2V0U3RhdGUoZSxmdW5jdGlvbigpe24ucGVuZGluZ1N0YXRlPW51bGwsdCgpfSl9LHQucHJvdG90eXBlLnNldE5leHRDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ITA7cmV0dXJuIHRoaXMubmV4dENhbGxiYWNrPWZ1bmN0aW9uKHIpe24mJihuPSExLHQubmV4dENhbGxiYWNrPW51bGwsZShyKSl9LHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbD1mdW5jdGlvbigpe249ITF9LHRoaXMubmV4dENhbGxiYWNrfSx0LnByb3RvdHlwZS5vblRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2V0TmV4dENhbGxiYWNrKG4pLGU/KHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXImJnRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIoZSx0aGlzLm5leHRDYWxsYmFjayksbnVsbCE9dCYmc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjayx0KSk6c2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywwKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5zdGF0dXM7aWYoZT09PW0pcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuY2hpbGRyZW4scj1vKHQsWyJjaGlsZHJlbiJdKTtpZihkZWxldGUgci5pbixkZWxldGUgci5tb3VudE9uRW50ZXIsZGVsZXRlIHIudW5tb3VudE9uRXhpdCxkZWxldGUgci5hcHBlYXIsZGVsZXRlIHIuZW50ZXIsZGVsZXRlIHIuZXhpdCxkZWxldGUgci50aW1lb3V0LGRlbGV0ZSByLmFkZEVuZExpc3RlbmVyLGRlbGV0ZSByLm9uRW50ZXIsZGVsZXRlIHIub25FbnRlcmluZyxkZWxldGUgci5vbkVudGVyZWQsZGVsZXRlIHIub25FeGl0LGRlbGV0ZSByLm9uRXhpdGluZyxkZWxldGUgci5vbkV4aXRlZCwiZnVuY3Rpb24iPT10eXBlb2YgbilyZXR1cm4gbihlLHIpO3ZhciBzPV8uZGVmYXVsdC5DaGlsZHJlbi5vbmx5KG4pO3JldHVybiBfLmRlZmF1bHQuY2xvbmVFbGVtZW50KHMscil9LHR9KF8uZGVmYXVsdC5Db21wb25lbnQpO3kuY29udGV4dFR5cGVzPXt0cmFuc2l0aW9uR3JvdXA6Yy5vYmplY3R9LHkuY2hpbGRDb250ZXh0VHlwZXM9e3RyYW5zaXRpb25Hcm91cDpmdW5jdGlvbigpe319LHkucHJvcFR5cGVzPXt9LHkuZGVmYXVsdFByb3BzPXtpbjohMSxtb3VudE9uRW50ZXI6ITEsdW5tb3VudE9uRXhpdDohMSxhcHBlYXI6ITEsZW50ZXI6ITAsZXhpdDohMCxvbkVudGVyOmwsb25FbnRlcmluZzpsLG9uRW50ZXJlZDpsLG9uRXhpdDpsLG9uRXhpdGluZzpsLG9uRXhpdGVkOmx9LHkuVU5NT1VOVEVEPTAseS5FWElURUQ9MSx5LkVOVEVSSU5HPTIseS5FTlRFUkVEPTMseS5FWElUSU5HPTQsdC5kZWZhdWx0PXl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL1RyYW5zaXRpb25Hcm91cC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX10Ll9fZXNNb2R1bGU9ITA7dmFyIGw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sdT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIpLGY9T2JqZWN0LnZhbHVlc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfSxtPShjLmRlZmF1bHQuYW55LGMuZGVmYXVsdC5ub2RlLGMuZGVmYXVsdC5ib29sLGMuZGVmYXVsdC5ib29sLGMuZGVmYXVsdC5ib29sLGMuZGVmYXVsdC5mdW5jLHtjb21wb25lbnQ6ImRpdiIsY2hpbGRGYWN0b3J5OmZ1bmN0aW9uKGUpe3JldHVybiBlfX0pLGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe3ModGhpcyx0KTt2YXIgbz1pKHRoaXMsZS5jYWxsKHRoaXMsbixyKSk7cmV0dXJuIG8uc3RhdGU9e2NoaWxkcmVuOigwLHAuZ2V0Q2hpbGRNYXBwaW5nKShuLmNoaWxkcmVuLGZ1bmN0aW9uKGUpe3JldHVybigwLGQuY2xvbmVFbGVtZW50KShlLHtvbkV4aXRlZDpvLmhhbmRsZUV4aXRlZC5iaW5kKG8sZSksaW46ITAsYXBwZWFyOm8uZ2V0UHJvcChlLCJhcHBlYXIiKSxlbnRlcjpvLmdldFByb3AoZSwiZW50ZXIiKSxleGl0Om8uZ2V0UHJvcChlLCJleGl0Iil9KX0pfSxvfXJldHVybiBhKHQsZSksdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJue3RyYW5zaXRpb25Hcm91cDp7aXNNb3VudGluZzohdGhpcy5hcHBlYXJlZH19fSx0LnByb3RvdHlwZS5nZXRQcm9wPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMucHJvcHM7cmV0dXJuIG51bGwhPW5bdF0/blt0XTplLnByb3BzW3RdfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuYXBwZWFyZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuc3RhdGUuY2hpbGRyZW4scj0oMCxwLmdldENoaWxkTWFwcGluZykoZS5jaGlsZHJlbiksbz0oMCxwLm1lcmdlQ2hpbGRNYXBwaW5ncykobixyKTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBpPW9bc107aWYoKDAsZC5pc1ZhbGlkRWxlbWVudCkoaSkpe3ZhciBhPXMgaW4gbixsPXMgaW4gcix1PW5bc10sYz0oMCxkLmlzVmFsaWRFbGVtZW50KSh1KSYmIXUucHJvcHMuaW47IWx8fGEmJiFjP2x8fCFhfHxjP2wmJmEmJigwLGQuaXNWYWxpZEVsZW1lbnQpKHUpJiYob1tzXT0oMCxkLmNsb25lRWxlbWVudCkoaSx7b25FeGl0ZWQ6dC5oYW5kbGVFeGl0ZWQuYmluZCh0LGkpLGluOnUucHJvcHMuaW4sZXhpdDp0LmdldFByb3AoaSwiZXhpdCIsZSksZW50ZXI6dC5nZXRQcm9wKGksImVudGVyIixlKX0pKTpvW3NdPSgwLGQuY2xvbmVFbGVtZW50KShpLHtpbjohMX0pOm9bc109KDAsZC5jbG9uZUVsZW1lbnQpKGkse29uRXhpdGVkOnQuaGFuZGxlRXhpdGVkLmJpbmQodCxpKSxpbjohMCxleGl0OnQuZ2V0UHJvcChpLCJleGl0IixlKSxlbnRlcjp0LmdldFByb3AoaSwiZW50ZXIiLGUpfSl9fSksdGhpcy5zZXRTdGF0ZSh7Y2hpbGRyZW46b30pfSx0LnByb3RvdHlwZS5oYW5kbGVFeGl0ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxwLmdldENoaWxkTWFwcGluZykodGhpcy5wcm9wcy5jaGlsZHJlbik7ZS5rZXkgaW4gbnx8KGUucHJvcHMub25FeGl0ZWQmJmUucHJvcHMub25FeGl0ZWQodCksdGhpcy5zZXRTdGF0ZShmdW5jdGlvbih0KXt2YXIgbj1sKHt9LHQuY2hpbGRyZW4pO3JldHVybiBkZWxldGUgbltlLmtleV0se2NoaWxkcmVuOm59fSkpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jb21wb25lbnQsbj1lLmNoaWxkRmFjdG9yeSxyPW8oZSxbImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSJdKSxzPWYodGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKG4pO3JldHVybiBkZWxldGUgci5hcHBlYXIsZGVsZXRlIHIuZW50ZXIsZGVsZXRlIHIuZXhpdCxudWxsPT09dD9zOl8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQscixzKX0sdH0oXy5kZWZhdWx0LkNvbXBvbmVudCk7aC5jaGlsZENvbnRleHRUeXBlcz17dHJhbnNpdGlvbkdyb3VwOmMuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH0saC5wcm9wVHlwZXM9e30saC5kZWZhdWx0UHJvcHM9bSx0LmRlZmF1bHQ9aCxlLmV4cG9ydHM9dC5kZWZhdWx0fSwiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL0NTU1RyYW5zaXRpb24uanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9UcmFuc2l0aW9uR3JvdXAuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL1RyYW5zaXRpb24uanMiKSxkPXIoYyk7ZS5leHBvcnRzPXtUcmFuc2l0aW9uOmQuZGVmYXVsdCxUcmFuc2l0aW9uR3JvdXA6dS5kZWZhdWx0LFJlcGxhY2VUcmFuc2l0aW9uOmEuZGVmYXVsdCxDU1NUcmFuc2l0aW9uOnMuZGVmYXVsdH19LCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3V0aWxzL0NoaWxkTWFwcGluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJigwLHMuaXNWYWxpZEVsZW1lbnQpKGUpP3QoZSk6ZX0scj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlJiZzLkNoaWxkcmVuLm1hcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlfSkuZm9yRWFjaChmdW5jdGlvbihlKXtyW2Uua2V5XT1uKGUpfSkscn1mdW5jdGlvbiBvKGUsdCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbiBpbiB0P3Rbbl06ZVtuXX1lPWV8fHt9LHQ9dHx8e307dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdO2Zvcih2YXIgcyBpbiBlKXMgaW4gdD9vLmxlbmd0aCYmKHJbc109byxvPVtdKTpvLnB1c2gocyk7dmFyIGk9dm9pZCAwLGE9e307Zm9yKHZhciBsIGluIHQpe2lmKHJbbF0pZm9yKGk9MDtpPHJbbF0ubGVuZ3RoO2krKyl7dmFyIHU9cltsXVtpXTthW3JbbF1baV1dPW4odSl9YVtsXT1uKGwpfWZvcihpPTA7aTxvLmxlbmd0aDtpKyspYVtvW2ldXT1uKG9baV0pO3JldHVybiBhfXQuX19lc01vZHVsZT0hMCx0LmdldENoaWxkTWFwcGluZz1yLHQubWVyZ2VDaGlsZE1hcHBpbmdzPW87dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKX0sIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdXRpbHMvUHJvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9InRyYW5zaXRpb24iK2UrIlRpbWVvdXQiLG49InRyYW5zaXRpb24iK2U7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGVbbl0pe2lmKG51bGw9PWVbdF0pcmV0dXJuIG5ldyBFcnJvcih0KyIgd2Fzbid0IHN1cHBsaWVkIHRvIENTU1RyYW5zaXRpb25Hcm91cDogdGhpcyBjYW4gY2F1c2UgdW5yZWxpYWJsZSBhbmltYXRpb25zIGFuZCB3b24ndCBiZSBzdXBwb3J0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdC4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtYW5pbWF0aW9uLXRyYW5zaXRpb24tZ3JvdXAtdGltZW91dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtpZigibnVtYmVyIiE9dHlwZW9mIGVbdF0pcmV0dXJuIG5ldyBFcnJvcih0KyIgbXVzdCBiZSBhIG51bWJlciAoaW4gbWlsbGlzZWNvbmRzKSIpfXJldHVybiBudWxsfX10Ll9fZXNNb2R1bGU9ITAsdC5jbGFzc05hbWVzU2hhcGU9dC50aW1lb3V0c1NoYXBlPXZvaWQgMCx0LnRyYW5zaXRpb25UaW1lb3V0PXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKTt0LnRpbWVvdXRzU2hhcGU9cy5kZWZhdWx0Lm9uZU9mVHlwZShbcy5kZWZhdWx0Lm51bWJlcixzLmRlZmF1bHQuc2hhcGUoe2VudGVyOnMuZGVmYXVsdC5udW1iZXIsZXhpdDpzLmRlZmF1bHQubnVtYmVyfSkuaXNSZXF1aXJlZF0pLHQuY2xhc3NOYW1lc1NoYXBlPXMuZGVmYXVsdC5vbmVPZlR5cGUoW3MuZGVmYXVsdC5zdHJpbmcscy5kZWZhdWx0LnNoYXBlKHtlbnRlcjpzLmRlZmF1bHQuc3RyaW5nLGV4aXQ6cy5kZWZhdWx0LnN0cmluZyxhY3RpdmU6cy5kZWZhdWx0LnN0cmluZ30pLHMuZGVmYXVsdC5zaGFwZSh7ZW50ZXI6cy5kZWZhdWx0LnN0cmluZyxlbnRlckRvbmU6cy5kZWZhdWx0LnN0cmluZyxlbnRlckFjdGl2ZTpzLmRlZmF1bHQuc3RyaW5nLGV4aXQ6cy5kZWZhdWx0LnN0cmluZyxleGl0RG9uZTpzLmRlZmF1bHQuc3RyaW5nLGV4aXRBY3RpdmU6cy5kZWZhdWx0LnN0cmluZ30pXSl9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLG8scyxpLGEpe2lmKCFlKXtpZihlPXZvaWQgMCx2b2lkIDA9PT10KWU9RXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgbD1bbixyLG8scyxpLGFdLHU9MDtlPUVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBsW3UrK119KSksZS5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyBlLmZyYW1lc1RvUG9wPTEsZX19ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xLG49Imh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxvPTA7bzx0O28rKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbysxXSk7cighMSwiTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuICIsbil9ZnVuY3Rpb24gcyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1QLHRoaXMudXBkYXRlcj1ufHxJfWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gYShlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1QLHRoaXMudXBkYXRlcj1ufHxJfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPXZvaWQgMCxvPXt9LHM9bnVsbCxpPW51bGw7aWYobnVsbCE9dClmb3IociBpbiB2b2lkIDAhPT10LnJlZiYmKGk9dC5yZWYpLHZvaWQgMCE9PXQua2V5JiYocz0iIit0LmtleSksdClGLmNhbGwodCxyKSYmIUIuaGFzT3duUHJvcGVydHkocikmJihvW3JdPXRbcl0pO3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09YSlvLmNoaWxkcmVuPW47ZWxzZSBpZigxPGEpe2Zvcih2YXIgbD1BcnJheShhKSx1PTA7dTxhO3UrKylsW3VdPWFyZ3VtZW50c1t1KzJdO28uY2hpbGRyZW49bH1pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBhPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PW9bcl0mJihvW3JdPWFbcl0pO3JldHVybnskJHR5cGVvZjpULHR5cGU6ZSxrZXk6cyxyZWY6aSxwcm9wczpvLF9vd25lcjpILmN1cnJlbnR9fWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm57JCR0eXBlb2Y6VCx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PVR9ZnVuY3Rpb24gZChlKXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gXyhlLHQsbixyKXtpZihHLmxlbmd0aCl7dmFyIG89Ry5wb3AoKTtyZXR1cm4gby5yZXN1bHQ9ZSxvLmtleVByZWZpeD10LG8uZnVuYz1uLG8uY29udGV4dD1yLG8uY291bnQ9MCxvfXJldHVybntyZXN1bHQ6ZSxrZXlQcmVmaXg6dCxmdW5jOm4sY29udGV4dDpyLGNvdW50OjB9fWZ1bmN0aW9uIHAoZSl7ZS5yZXN1bHQ9bnVsbCxlLmtleVByZWZpeD1udWxsLGUuZnVuYz1udWxsLGUuY29udGV4dD1udWxsLGUuY291bnQ9MCwxMD5HLmxlbmd0aCYmRy5wdXNoKGUpfWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIHM9dHlwZW9mIGU7InVuZGVmaW5lZCIhPT1zJiYiYm9vbGVhbiIhPT1zfHwoZT1udWxsKTt2YXIgaT0hMTtpZihudWxsPT09ZSlpPSEwO2Vsc2Ugc3dpdGNoKHMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6aT0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgVDpjYXNlIEE6aT0hMH19aWYoaSlyZXR1cm4gbihyLGUsIiI9PT10PyIuIitoKGUsMCk6dCksMTtpZihpPTAsdD0iIj09PXQ/Ii4iOnQrIjoiLEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3M9ZVthXTt2YXIgbD10K2gocyxhKTtpKz1mKHMsbCxuLHIpfWVsc2UgaWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZT9sPW51bGw6KGw9ayYmZVtrXXx8ZVsiQEBpdGVyYXRvciJdLGw9ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDpudWxsKSwiZnVuY3Rpb24iPT10eXBlb2YgbClmb3IoZT1sLmNhbGwoZSksYT0wOyEocz1lLm5leHQoKSkuZG9uZTspcz1zLnZhbHVlLGw9dCtoKHMsYSsrKSxpKz1mKHMsbCxuLHIpO2Vsc2Uib2JqZWN0Ij09PXMmJihuPSIiK2UsbygiMzEiLCJbb2JqZWN0IE9iamVjdF0iPT09bj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9IjpuLCIiKSk7cmV0dXJuIGl9ZnVuY3Rpb24gbShlLHQsbil7cmV0dXJuIG51bGw9PWU/MDpmKGUsIiIsdCxuKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZChlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gZyhlLHQpe2UuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyl9ZnVuY3Rpb24gYihlLHQsbil7dmFyIHI9ZS5yZXN1bHQsbz1lLmtleVByZWZpeDtlPWUuZnVuYy5jYWxsKGUuY29udGV4dCx0LGUuY291bnQrKyksQXJyYXkuaXNBcnJheShlKT9FKGUscixuLGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6bnVsbCE9ZSYmKGMoZSkmJihlPXUoZSxvKyghZS5rZXl8fHQmJnQua2V5PT09ZS5rZXk/IiI6KCIiK2Uua2V5KS5yZXBsYWNlKFUsIiQmLyIpKyIvIikrbikpLHIucHVzaChlKSl9ZnVuY3Rpb24gRShlLHQsbixyLG8pe3ZhciBzPSIiO251bGwhPW4mJihzPSgiIituKS5yZXBsYWNlKFUsIiQmLyIpKyIvIiksdD1fKHQscyxyLG8pLG0oZSxiLHQpLHAodCl9LyoqIEBsaWNlbnNlIFJlYWN0IHYxNi42LjAKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqLwp2YXIgeT1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksdj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLFQ9dj9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsQT12P1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LEM9dj9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LE89dj9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LFM9dj9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LFI9dj9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LGo9dj9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAseD12P1N5bWJvbC5mb3IoInJlYWN0LmNvbmN1cnJlbnRfbW9kZSIpOjYwMTExLEw9dj9TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpOjYwMTEyLEQ9dj9TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpOjYwMTEzLHc9dj9TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIik6NjAxMTUsTT12P1N5bWJvbC5mb3IoInJlYWN0LmxhenkiKTo2MDExNixrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixJPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxQPXt9O3MucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30scy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXsib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lJiZvKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9LHMucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfSxpLnByb3RvdHlwZT1zLnByb3RvdHlwZTt2YXIgTj1hLnByb3RvdHlwZT1uZXcgaTtOLmNvbnN0cnVjdG9yPWEseShOLHMucHJvdG90eXBlKSxOLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBIPXtjdXJyZW50Om51bGwsY3VycmVudERpc3BhdGNoZXI6bnVsbH0sRj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEI9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfSxVPS9cLysvZyxHPVtdLHo9e0NoaWxkcmVuOnttYXA6ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W107cmV0dXJuIEUoZSxyLG51bGwsdCxuKSxyfSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3Q9XyhudWxsLG51bGwsdCxuKSxtKGUsZyx0KSxwKHQpfSxjb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gbShlLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBFKGUsdCxudWxsLGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdH0sb25seTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlKXx8bygiMTQzIiksZX19LGNyZWF0ZVJlZjpmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxDb21wb25lbnQ6cyxQdXJlQ29tcG9uZW50OmEsY3JlYXRlQ29udGV4dDpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSxlPXskJHR5cGVvZjpqLF9jYWxjdWxhdGVDaGFuZ2VkQml0czp0LF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0sZS5Qcm92aWRlcj17JCR0eXBlb2Y6UixfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LGZvcndhcmRSZWY6ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOkwscmVuZGVyOmV9fSxsYXp5OmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpNLF9jdG9yOmUsX3N0YXR1czotMSxfcmVzdWx0Om51bGx9fSxtZW1vOmZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOncsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSxGcmFnbWVudDpDLFN0cmljdE1vZGU6Tyx1bnN0YWJsZV9Db25jdXJyZW50TW9kZTp4LFN1c3BlbnNlOkQsdW5zdGFibGVfUHJvZmlsZXI6UyxjcmVhdGVFbGVtZW50OmwsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxuKXsobnVsbD09PWV8fHZvaWQgMD09PWUpJiZvKCIyNjciLGUpO3ZhciByPXZvaWQgMCxzPXkoe30sZS5wcm9wcyksaT1lLmtleSxhPWUucmVmLGw9ZS5fb3duZXI7aWYobnVsbCE9dCl7dm9pZCAwIT09dC5yZWYmJihhPXQucmVmLGw9SC5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGk9IiIrdC5rZXkpO3ZhciB1PXZvaWQgMDtlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJih1PWUudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihyIGluIHQpRi5jYWxsKHQscikmJiFCLmhhc093blByb3BlcnR5KHIpJiYoc1tyXT12b2lkIDA9PT10W3JdJiZ2b2lkIDAhPT11P3Vbcl06dFtyXSl9aWYoMT09PShyPWFyZ3VtZW50cy5sZW5ndGgtMikpcy5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxyKXt1PUFycmF5KHIpO2Zvcih2YXIgYz0wO2M8cjtjKyspdVtjXT1hcmd1bWVudHNbYysyXTtzLmNoaWxkcmVuPXV9cmV0dXJueyQkdHlwZW9mOlQsdHlwZTplLnR5cGUsa2V5OmkscmVmOmEscHJvcHM6cyxfb3duZXI6bH19LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9bC5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LGlzVmFsaWRFbGVtZW50OmMsdmVyc2lvbjoiMTYuNi4wIixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6SCxhc3NpZ246eX19LFY9e2RlZmF1bHQ6en0sVz1WJiZ6fHxWO2UuZXhwb3J0cz1XLmRlZmF1bHR8fFd9LCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihlKTt1LmNhbGwodGhpcyxlKSxjLmNhbGwodGhpcyxlKSxlJiYhMT09PWUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxlJiYhMT09PWUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsZSYmITE9PT1lLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixvKX1mdW5jdGlvbiBvKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxpLm5leHRUaWNrKHMsdGhpcyl9ZnVuY3Rpb24gcyhlKXtlLmVuZCgpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiksYT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0fTtlLmV4cG9ydHM9cjt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiKTtsLmluaGVyaXRzPW4oIi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKTt2YXIgdT1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpO2wuaW5oZXJpdHMocix1KTtmb3IodmFyIGQ9YShjLnByb3RvdHlwZSksXz0wO188ZC5sZW5ndGg7XysrKXt2YXIgcD1kW19dO3IucHJvdG90eXBlW3BdfHwoci5wcm90b3R5cGVbcF09Yy5wcm90b3R5cGVbcF0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQpfSxzZXQ6ZnVuY3Rpb24oZSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSksci5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxpLm5leHRUaWNrKHQsZSl9fSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKGUpO28uY2FsbCh0aGlzLGUpfWUuZXhwb3J0cz1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpO3MuaW5oZXJpdHM9bigiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLHMuaW5oZXJpdHMocixvKSxyLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXtuKG51bGwsZSl9fSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIE4uZnJvbShlKX1mdW5jdGlvbiBzKGUpe3JldHVybiBOLmlzQnVmZmVyKGUpfHxlIGluc3RhbmNlb2YgSH1mdW5jdGlvbiBpKGUsdCxuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGUucHJlcGVuZExpc3RlbmVyKHQsbik7ZS5fZXZlbnRzJiZlLl9ldmVudHNbdF0/ayhlLl9ldmVudHNbdF0pP2UuX2V2ZW50c1t0XS51bnNoaWZ0KG4pOmUuX2V2ZW50c1t0XT1bbixlLl9ldmVudHNbdF1dOmUub24odCxuKX1mdW5jdGlvbiBhKGUsdCl7TT1NfHxuKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksZT1lfHx7fTt2YXIgcj10IGluc3RhbmNlb2YgTTt0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBvPWUuaGlnaFdhdGVyTWFyayxzPWUucmVhZGFibGVIaWdoV2F0ZXJNYXJrLGk9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1vfHwwPT09bz9vOnImJihzfHwwPT09cyk/czppLHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IHosdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsZS5lbmNvZGluZyYmKEd8fChHPW4oIi4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgRyhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWUuZW5jb2RpbmcpfWZ1bmN0aW9uIGwoZSl7aWYoTT1NfHxuKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksISh0aGlzIGluc3RhbmNlb2YgbCkpcmV0dXJuIG5ldyBsKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGEoZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkJiYodGhpcy5fcmVhZD1lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSkpLFAuY2FsbCh0aGlzKX1mdW5jdGlvbiB1KGUsdCxuLHIscyl7dmFyIGk9ZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09dClpLnJlYWRpbmc9ITEsbShlLGkpO2Vsc2V7dmFyIGE7c3x8KGE9ZChpLHQpKSxhP2UuZW1pdCgiZXJyb3IiLGEpOmkub2JqZWN0TW9kZXx8dCYmdC5sZW5ndGg+MD8oInN0cmluZyI9PXR5cGVvZiB0fHxpLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PU4ucHJvdG90eXBlfHwodD1vKHQpKSxyP2kuZW5kRW1pdHRlZD9lLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOmMoZSxpLHQsITApOmkuZW5kZWQ/ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooaS5yZWFkaW5nPSExLGkuZGVjb2RlciYmIW4/KHQ9aS5kZWNvZGVyLndyaXRlKHQpLGkub2JqZWN0TW9kZXx8MCE9PXQubGVuZ3RoP2MoZSxpLHQsITEpOmIoZSxpKSk6YyhlLGksdCwhMSkpKTpyfHwoaS5yZWFkaW5nPSExKX1yZXR1cm4gXyhpKX1mdW5jdGlvbiBjKGUsdCxuLHIpe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jPyhlLmVtaXQoImRhdGEiLG4pLGUucmVhZCgwKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmaChlKSksYihlLHQpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbjtyZXR1cm4gcyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fHxlLm9iamVjdE1vZGV8fChuPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksbn1mdW5jdGlvbiBfKGUpe3JldHVybiFlLmVuZGVkJiYoZS5uZWVkUmVhZGFibGV8fGUubGVuZ3RoPGUuaGlnaFdhdGVyTWFya3x8MD09PWUubGVuZ3RoKX1mdW5jdGlvbiBwKGUpe3JldHVybiBlPj1ZP2U9WTooZS0tLGV8PWU+Pj4xLGV8PWU+Pj4yLGV8PWU+Pj40LGV8PWU+Pj44LGV8PWU+Pj4xNixlKyspLGV9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/MDp0Lm9iamVjdE1vZGU/MTplIT09ZT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6dC5sZW5ndGg6KGU+dC5oaWdoV2F0ZXJNYXJrJiYodC5oaWdoV2F0ZXJNYXJrPXAoZSkpLGU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIG0oZSx0KXtpZighdC5lbmRlZCl7aWYodC5kZWNvZGVyKXt2YXIgbj10LmRlY29kZXIuZW5kKCk7biYmbi5sZW5ndGgmJih0LmJ1ZmZlci5wdXNoKG4pLHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCl9dC5lbmRlZD0hMCxoKGUpfX1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fChVKCJlbWl0UmVhZGFibGUiLHQuZmxvd2luZyksdC5lbWl0dGVkUmVhZGFibGU9ITAsdC5zeW5jP3cubmV4dFRpY2soZyxlKTpnKGUpKX1mdW5jdGlvbiBnKGUpe1UoImVtaXQgcmVhZGFibGUiKSxlLmVtaXQoInJlYWRhYmxlIiksQyhlKX1mdW5jdGlvbiBiKGUsdCl7dC5yZWFkaW5nTW9yZXx8KHQucmVhZGluZ01vcmU9ITAsdy5uZXh0VGljayhFLGUsdCkpfWZ1bmN0aW9uIEUoZSx0KXtmb3IodmFyIG49dC5sZW5ndGg7IXQucmVhZGluZyYmIXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyayYmKFUoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksZS5yZWFkKDApLG4hPT10Lmxlbmd0aCk7KW49dC5sZW5ndGg7dC5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7VSgicGlwZU9uRHJhaW4iLHQuYXdhaXREcmFpbiksdC5hd2FpdERyYWluJiZ0LmF3YWl0RHJhaW4tLSwwPT09dC5hd2FpdERyYWluJiZJKGUsImRhdGEiKSYmKHQuZmxvd2luZz0hMCxDKGUpKX19ZnVuY3Rpb24gdihlKXtVKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxlLnJlYWQoMCl9ZnVuY3Rpb24gVChlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsdy5uZXh0VGljayhBLGUsdCkpfWZ1bmN0aW9uIEEoZSx0KXt0LnJlYWRpbmd8fChVKCJyZXN1bWUgcmVhZCAwIiksZS5yZWFkKDApKSx0LnJlc3VtZVNjaGVkdWxlZD0hMSx0LmF3YWl0RHJhaW49MCxlLmVtaXQoInJlc3VtZSIpLEMoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2ZvcihVKCJmbG93Iix0LmZsb3dpbmcpO3QuZmxvd2luZyYmbnVsbCE9PWUucmVhZCgpOyk7fWZ1bmN0aW9uIE8oZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG47cmV0dXJuIHQub2JqZWN0TW9kZT9uPXQuYnVmZmVyLnNoaWZ0KCk6IWV8fGU+PXQubGVuZ3RoPyhuPXQuZGVjb2Rlcj90LmJ1ZmZlci5qb2luKCIiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YTp0LmJ1ZmZlci5jb25jYXQodC5sZW5ndGgpLHQuYnVmZmVyLmNsZWFyKCkpOm49UyhlLHQuYnVmZmVyLHQuZGVjb2Rlciksbn1mdW5jdGlvbiBTKGUsdCxuKXt2YXIgcjtyZXR1cm4gZTx0LmhlYWQuZGF0YS5sZW5ndGg/KHI9dC5oZWFkLmRhdGEuc2xpY2UoMCxlKSx0LmhlYWQuZGF0YT10LmhlYWQuZGF0YS5zbGljZShlKSk6cj1lPT09dC5oZWFkLmRhdGEubGVuZ3RoP3Quc2hpZnQoKTpuP1IoZSx0KTpqKGUsdCkscn1mdW5jdGlvbiBSKGUsdCl7dmFyIG49dC5oZWFkLHI9MSxvPW4uZGF0YTtmb3IoZS09by5sZW5ndGg7bj1uLm5leHQ7KXt2YXIgcz1uLmRhdGEsaT1lPnMubGVuZ3RoP3MubGVuZ3RoOmU7aWYoaT09PXMubGVuZ3RoP28rPXM6bys9cy5zbGljZSgwLGUpLDA9PT0oZS09aSkpe2k9PT1zLmxlbmd0aD8oKytyLG4ubmV4dD90LmhlYWQ9bi5uZXh0OnQuaGVhZD10LnRhaWw9bnVsbCk6KHQuaGVhZD1uLG4uZGF0YT1zLnNsaWNlKGkpKTticmVha30rK3J9cmV0dXJuIHQubGVuZ3RoLT1yLG99ZnVuY3Rpb24gaihlLHQpe3ZhciBuPU4uYWxsb2NVbnNhZmUoZSkscj10LmhlYWQsbz0xO2ZvcihyLmRhdGEuY29weShuKSxlLT1yLmRhdGEubGVuZ3RoO3I9ci5uZXh0Oyl7dmFyIHM9ci5kYXRhLGk9ZT5zLmxlbmd0aD9zLmxlbmd0aDplO2lmKHMuY29weShuLG4ubGVuZ3RoLWUsMCxpKSwwPT09KGUtPWkpKXtpPT09cy5sZW5ndGg/KCsrbyxyLm5leHQ/dC5oZWFkPXIubmV4dDp0LmhlYWQ9dC50YWlsPW51bGwpOih0LmhlYWQ9cixyLmRhdGE9cy5zbGljZShpKSk7YnJlYWt9KytvfXJldHVybiB0Lmxlbmd0aC09byxufWZ1bmN0aW9uIHgoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTtpZih0Lmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7dC5lbmRFbWl0dGVkfHwodC5lbmRlZD0hMCx3Lm5leHRUaWNrKEwsdCxlKSl9ZnVuY3Rpb24gTChlLHQpe2UuZW5kRW1pdHRlZHx8MCE9PWUubGVuZ3RofHwoZS5lbmRFbWl0dGVkPSEwLHQucmVhZGFibGU9ITEsdC5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24gRChlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX12YXIgdz1uKCIuL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIpO2UuZXhwb3J0cz1sO3ZhciBNLGs9bigiLi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIpO2wuUmVhZGFibGVTdGF0ZT1hO3ZhciBJPShuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIpLkV2ZW50RW1pdHRlcixmdW5jdGlvbihlLHQpe3JldHVybiBlLmxpc3RlbmVycyh0KS5sZW5ndGh9KSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIpLE49bigiLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsSD10LlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxGPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpO0YuaW5oZXJpdHM9bigiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpO3ZhciBCPW4oOSksVT12b2lkIDA7VT1CJiZCLmRlYnVnbG9nP0IuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgRyx6PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiksVj1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIpO0YuaW5oZXJpdHMobCxQKTt2YXIgVz1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxsLnByb3RvdHlwZS5kZXN0cm95PVYuZGVzdHJveSxsLnByb3RvdHlwZS5fdW5kZXN0cm95PVYudW5kZXN0cm95LGwucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dGhpcy5wdXNoKG51bGwpLHQoZSl9LGwucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHIub2JqZWN0TW9kZT9uPSEwOiJzdHJpbmciPT10eXBlb2YgZSYmKHQ9dHx8ci5kZWZhdWx0RW5jb2RpbmcsdCE9PXIuZW5jb2RpbmcmJihlPU4uZnJvbShlLHQpLHQ9IiIpLG49ITApLHUodGhpcyxlLHQsITEsbil9LGwucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyxlLG51bGwsITAsITEpfSxsLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxsLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gR3x8KEc9bigiLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIikuU3RyaW5nRGVjb2RlciksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBHKGUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9ZSx0aGlzfTt2YXIgWT04Mzg4NjA4O2wucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7VSgicmVhZCIsZSksZT1wYXJzZUludChlLDEwKTt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZigwIT09ZSYmKHQuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ZSYmdC5uZWVkUmVhZGFibGUmJih0Lmxlbmd0aD49dC5oaWdoV2F0ZXJNYXJrfHx0LmVuZGVkKSlyZXR1cm4gVSgicmVhZDogZW1pdFJlYWRhYmxlIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/eCh0aGlzKTpoKHRoaXMpLG51bGw7aWYoMD09PShlPWYoZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmeCh0aGlzKSxudWxsO3ZhciByPXQubmVlZFJlYWRhYmxlO1UoIm5lZWQgcmVhZGFibGUiLHIpLCgwPT09dC5sZW5ndGh8fHQubGVuZ3RoLWU8dC5oaWdoV2F0ZXJNYXJrKSYmKHI9ITAsVSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLHIpKSx0LmVuZGVkfHx0LnJlYWRpbmc/KHI9ITEsVSgicmVhZGluZyBvciBlbmRlZCIscikpOnImJihVKCJkbyByZWFkIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh0LmhpZ2hXYXRlck1hcmspLHQuc3luYz0hMSx0LnJlYWRpbmd8fChlPWYobix0KSkpO3ZhciBvO3JldHVybiBvPWU+MD9PKGUsdCk6bnVsbCxudWxsPT09bz8odC5uZWVkUmVhZGFibGU9ITAsZT0wKTp0Lmxlbmd0aC09ZSwwPT09dC5sZW5ndGgmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLG4hPT1lJiZ0LmVuZGVkJiZ4KHRoaXMpKSxudWxsIT09byYmdGhpcy5lbWl0KCJkYXRhIixvKSxvfSxsLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxsLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe1UoIm9udW5waXBlIiksZT09PV8mJnQmJiExPT09dC5oYXNVbnBpcGVkJiYodC5oYXNVbnBpcGVkPSEwLHMoKSl9ZnVuY3Rpb24gbygpe1UoIm9uZW5kIiksZS5lbmQoKX1mdW5jdGlvbiBzKCl7VSgiY2xlYW51cCIpLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGMpLGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixoKSxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbCksZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixuKSxfLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG8pLF8ucmVtb3ZlTGlzdGVuZXIoImVuZCIsZCksXy5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsYSksZz0hMCwhcC5hd2FpdERyYWlufHxlLl93cml0YWJsZVN0YXRlJiYhZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fGgoKX1mdW5jdGlvbiBhKHQpe1UoIm9uZGF0YSIpLGI9ITEsITEhPT1lLndyaXRlKHQpfHxifHwoKDE9PT1wLnBpcGVzQ291bnQmJnAucGlwZXM9PT1lfHxwLnBpcGVzQ291bnQ+MSYmLTEhPT1EKHAucGlwZXMsZSkpJiYhZyYmKFUoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsXy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKSxfLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKyxiPSEwKSxfLnBhdXNlKCkpfWZ1bmN0aW9uIGwodCl7VSgib25lcnJvciIsdCksZCgpLGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixsKSwwPT09SShlLCJlcnJvciIpJiZlLmVtaXQoImVycm9yIix0KX1mdW5jdGlvbiB1KCl7ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixjKSxkKCl9ZnVuY3Rpb24gYygpe1UoIm9uZmluaXNoIiksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHUpLGQoKX1mdW5jdGlvbiBkKCl7VSgidW5waXBlIiksXy51bnBpcGUoZSl9dmFyIF89dGhpcyxwPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKHAucGlwZXNDb3VudCl7Y2FzZSAwOnAucGlwZXM9ZTticmVhaztjYXNlIDE6cC5waXBlcz1bcC5waXBlcyxlXTticmVhaztkZWZhdWx0OnAucGlwZXMucHVzaChlKX1wLnBpcGVzQ291bnQrPTEsVSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixwLnBpcGVzQ291bnQsdCk7dmFyIGY9KCF0fHwhMSE9PXQuZW5kKSYmZSE9PXIuc3Rkb3V0JiZlIT09ci5zdGRlcnIsbT1mP286ZDtwLmVuZEVtaXR0ZWQ/dy5uZXh0VGljayhtKTpfLm9uY2UoImVuZCIsbSksZS5vbigidW5waXBlIixuKTt2YXIgaD15KF8pO2Uub24oImRyYWluIixoKTt2YXIgZz0hMSxiPSExO3JldHVybiBfLm9uKCJkYXRhIixhKSxpKGUsImVycm9yIixsKSxlLm9uY2UoImNsb3NlIix1KSxlLm9uY2UoImZpbmlzaCIsYyksZS5lbWl0KCJwaXBlIixfKSxwLmZsb3dpbmd8fChVKCJwaXBlIHJlc3VtZSIpLF8ucmVzdW1lKCkpLGV9LGwucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT10LnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXQucGlwZXNDb3VudClyZXR1cm4gZSYmZSE9PXQucGlwZXM/dGhpczooZXx8KGU9dC5waXBlcyksdC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMSxlJiZlLmVtaXQoInVucGlwZSIsdGhpcyxuKSx0aGlzKTtpZighZSl7dmFyIHI9dC5waXBlcyxvPXQucGlwZXNDb3VudDt0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExO2Zvcih2YXIgcz0wO3M8bztzKyspcltzXS5lbWl0KCJ1bnBpcGUiLHRoaXMsbik7cmV0dXJuIHRoaXN9dmFyIGk9RCh0LnBpcGVzLGUpO3JldHVybi0xPT09aT90aGlzOih0LnBpcGVzLnNwbGljZShpLDEpLHQucGlwZXNDb3VudC09MSwxPT09dC5waXBlc0NvdW50JiYodC5waXBlcz10LnBpcGVzWzBdKSxlLmVtaXQoInVucGlwZSIsdGhpcyxuKSx0aGlzKX0sbC5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXt2YXIgbj1QLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsZSx0KTtpZigiZGF0YSI9PT1lKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PWUpe3ZhciByPXRoaXMuX3JlYWRhYmxlU3RhdGU7ci5lbmRFbWl0dGVkfHxyLnJlYWRhYmxlTGlzdGVuaW5nfHwoci5yZWFkYWJsZUxpc3RlbmluZz1yLm5lZWRSZWFkYWJsZT0hMCxyLmVtaXR0ZWRSZWFkYWJsZT0hMSxyLnJlYWRpbmc/ci5sZW5ndGgmJmgodGhpcyk6dy5uZXh0VGljayh2LHRoaXMpKX1yZXR1cm4gbn0sbC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9bC5wcm90b3R5cGUub24sbC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZS5mbG93aW5nfHwoVSgicmVzdW1lIiksZS5mbG93aW5nPSEwLFQodGhpcyxlKSksdGhpc30sbC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVSgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVSgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxsLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLl9yZWFkYWJsZVN0YXRlLHI9ITE7ZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFUoIndyYXBwZWQgZW5kIiksbi5kZWNvZGVyJiYhbi5lbmRlZCl7dmFyIGU9bi5kZWNvZGVyLmVuZCgpO2UmJmUubGVuZ3RoJiZ0LnB1c2goZSl9dC5wdXNoKG51bGwpfSksZS5vbigiZGF0YSIsZnVuY3Rpb24obyl7aWYoVSgid3JhcHBlZCBkYXRhIiksbi5kZWNvZGVyJiYobz1uLmRlY29kZXIud3JpdGUobykpLCghbi5vYmplY3RNb2RlfHxudWxsIT09byYmdm9pZCAwIT09bykmJihuLm9iamVjdE1vZGV8fG8mJm8ubGVuZ3RoKSl7dC5wdXNoKG8pfHwocj0hMCxlLnBhdXNlKCkpfX0pO2Zvcih2YXIgbyBpbiBlKXZvaWQgMD09PXRoaXNbb10mJiJmdW5jdGlvbiI9PXR5cGVvZiBlW29dJiYodGhpc1tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5hcHBseShlLGFyZ3VtZW50cyl9fShvKSk7Zm9yKHZhciBzPTA7czxXLmxlbmd0aDtzKyspZS5vbihXW3NdLHRoaXMuZW1pdC5iaW5kKHRoaXMsV1tzXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKHQpe1UoIndyYXBwZWQgX3JlYWQiLHQpLHImJihyPSExLGUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxsLl9mcm9tTGlzdD1PfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7bi50cmFuc2Zvcm1pbmc9ITE7dmFyIHI9bi53cml0ZWNiO2lmKCFyKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTtuLndyaXRlY2h1bms9bnVsbCxuLndyaXRlY2I9bnVsbCxudWxsIT10JiZ0aGlzLnB1c2godCkscihlKTt2YXIgbz10aGlzLl9yZWFkYWJsZVN0YXRlO28ucmVhZGluZz0hMSwoby5uZWVkUmVhZGFibGV8fG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoby5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBvKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhlKTthLmNhbGwodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06ci5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1lLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmx1c2gmJih0aGlzLl9mbHVzaD1lLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIixzKX1mdW5jdGlvbiBzKCl7dmFyIGU9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24odCxuKXtpKGUsdCxuKX0pOmkodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKHQpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLHQpO2lmKG51bGwhPW4mJmUucHVzaChuKSxlLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKGUuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gZS5wdXNoKG51bGwpfWUuZXhwb3J0cz1vO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpO2wuaW5oZXJpdHM9bigiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLGwuaW5oZXJpdHMobyxhKSxvLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsYS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sby5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LG8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoci53cml0ZWNiPW4sci53cml0ZWNodW5rPWUsci53cml0ZWVuY29kaW5nPXQsIXIudHJhbnNmb3JtaW5nKXt2YXIgbz10aGlzLl9yZWFkYWJsZVN0YXRlOyhyLm5lZWRUcmFuc2Zvcm18fG8ubmVlZFJlYWRhYmxlfHxvLmxlbmd0aDxvLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKG8uaGlnaFdhdGVyTWFyayl9fSxvLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09dC53cml0ZWNodW5rJiZ0LndyaXRlY2ImJiF0LnRyYW5zZm9ybWluZz8odC50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHQud3JpdGVjaHVuayx0LndyaXRlZW5jb2RpbmcsdC5hZnRlclRyYW5zZm9ybSkpOnQubmVlZFRyYW5zZm9ybT0hMH0sby5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2EucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxlLGZ1bmN0aW9uKGUpe3QoZSksbi5lbWl0KCJjbG9zZSIpfSl9fSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LHIsbyl7ZnVuY3Rpb24gcyhlKXt2YXIgdD10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpe1IodCxlKX19ZnVuY3Rpb24gaShlKXtyZXR1cm4gay5mcm9tKGUpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGsuaXNCdWZmZXIoZSl8fGUgaW5zdGFuY2VvZiBJfWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gdShlLHQpe3g9eHx8bigiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLGU9ZXx8e307dmFyIHI9dCBpbnN0YW5jZW9mIHg7dGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgbz1lLmhpZ2hXYXRlck1hcmssaT1lLndyaXRhYmxlSGlnaFdhdGVyTWFyayxhPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9b3x8MD09PW8/bzpyJiYoaXx8MD09PWkpP2k6YSx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBsPSExPT09ZS5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlU3RyaW5ncz0hbCx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oZSl7Yih0LGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBzKHRoaXMpfWZ1bmN0aW9uIGMoZSl7aWYoeD14fHxuKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksIShOLmNhbGwoYyx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHgpKXJldHVybiBuZXcgYyhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyB1KGUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSksTS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbj1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO2UuZW1pdCgiZXJyb3IiLG4pLGoubmV4dFRpY2sodCxuKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3ZhciBvPSEwLHM9ITE7cmV0dXJuIG51bGw9PT1uP3M9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIj09dHlwZW9mIG58fHZvaWQgMD09PW58fHQub2JqZWN0TW9kZXx8KHM9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxzJiYoZS5lbWl0KCJlcnJvciIscyksai5uZXh0VGljayhyLHMpLG89ITEpLG99ZnVuY3Rpb24gcChlLHQsbil7cmV0dXJuIGUub2JqZWN0TW9kZXx8ITE9PT1lLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgdHx8KHQ9ay5mcm9tKHQsbikpLHR9ZnVuY3Rpb24gZihlLHQsbixyLG8scyl7aWYoIW4pe3ZhciBpPXAodCxyLG8pO3IhPT1pJiYobj0hMCxvPSJidWZmZXIiLHI9aSl9dmFyIGE9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGg7dC5sZW5ndGgrPWE7dmFyIGw9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO2lmKGx8fCh0Lm5lZWREcmFpbj0hMCksdC53cml0aW5nfHx0LmNvcmtlZCl7dmFyIHU9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0O3QubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6cixlbmNvZGluZzpvLGlzQnVmOm4sY2FsbGJhY2s6cyxuZXh0Om51bGx9LHU/dS5uZXh0PXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDp0LmJ1ZmZlcmVkUmVxdWVzdD10Lmxhc3RCdWZmZXJlZFJlcXVlc3QsdC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIG0oZSx0LCExLGEscixvLHMpO3JldHVybiBsfWZ1bmN0aW9uIG0oZSx0LG4scixvLHMsaSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1pLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsbj9lLl93cml0ZXYobyx0Lm9ud3JpdGUpOmUuX3dyaXRlKG8scyx0Lm9ud3JpdGUpLHQuc3luYz0hMX1mdW5jdGlvbiBoKGUsdCxuLHIsbyl7LS10LnBlbmRpbmdjYixuPyhqLm5leHRUaWNrKG8sciksai5uZXh0VGljayhPLGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5lbWl0KCJlcnJvciIscikpOihvKHIpLGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGUuZW1pdCgiZXJyb3IiLHIpLE8oZSx0KSl9ZnVuY3Rpb24gZyhlKXtlLndyaXRpbmc9ITEsZS53cml0ZWNiPW51bGwsZS5sZW5ndGgtPWUud3JpdGVsZW4sZS53cml0ZWxlbj0wfWZ1bmN0aW9uIGIoZSx0KXt2YXIgbj1lLl93cml0YWJsZVN0YXRlLHI9bi5zeW5jLG89bi53cml0ZWNiO2lmKGcobiksdCloKGUsbixyLHQsbyk7ZWxzZXt2YXIgcz1UKG4pO3N8fG4uY29ya2VkfHxuLmJ1ZmZlclByb2Nlc3Npbmd8fCFuLmJ1ZmZlcmVkUmVxdWVzdHx8dihlLG4pLHI/TChFLGUsbixzLG8pOkUoZSxuLHMsbyl9fWZ1bmN0aW9uIEUoZSx0LG4scil7bnx8eShlLHQpLHQucGVuZGluZ2NiLS0scigpLE8oZSx0KX1mdW5jdGlvbiB5KGUsdCl7MD09PXQubGVuZ3RoJiZ0Lm5lZWREcmFpbiYmKHQubmVlZERyYWluPSExLGUuZW1pdCgiZHJhaW4iKSl9ZnVuY3Rpb24gdihlLHQpe3QuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgbj10LmJ1ZmZlcmVkUmVxdWVzdDtpZihlLl93cml0ZXYmJm4mJm4ubmV4dCl7dmFyIHI9dC5idWZmZXJlZFJlcXVlc3RDb3VudCxvPW5ldyBBcnJheShyKSxpPXQuY29ya2VkUmVxdWVzdHNGcmVlO2kuZW50cnk9bjtmb3IodmFyIGE9MCxsPSEwO247KW9bYV09bixuLmlzQnVmfHwobD0hMSksbj1uLm5leHQsYSs9MTtvLmFsbEJ1ZmZlcnM9bCxtKGUsdCwhMCx0Lmxlbmd0aCxvLCIiLGkuZmluaXNoKSx0LnBlbmRpbmdjYisrLHQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLGkubmV4dD8odC5jb3JrZWRSZXF1ZXN0c0ZyZWU9aS5uZXh0LGkubmV4dD1udWxsKTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcyh0KSx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO247KXt2YXIgdT1uLmNodW5rLGM9bi5lbmNvZGluZyxkPW4uY2FsbGJhY2s7aWYobShlLHQsITEsdC5vYmplY3RNb2RlPzE6dS5sZW5ndGgsdSxjLGQpLG49bi5uZXh0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx0LndyaXRpbmcpYnJlYWt9bnVsbD09PW4mJih0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dC5idWZmZXJlZFJlcXVlc3Q9bix0LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5lbmRpbmcmJjA9PT1lLmxlbmd0aCYmbnVsbD09PWUuYnVmZmVyZWRSZXF1ZXN0JiYhZS5maW5pc2hlZCYmIWUud3JpdGluZ31mdW5jdGlvbiBBKGUsdCl7ZS5fZmluYWwoZnVuY3Rpb24obil7dC5wZW5kaW5nY2ItLSxuJiZlLmVtaXQoImVycm9yIixuKSx0LnByZWZpbmlzaGVkPSEwLGUuZW1pdCgicHJlZmluaXNoIiksTyhlLHQpfSl9ZnVuY3Rpb24gQyhlLHQpe3QucHJlZmluaXNoZWR8fHQuZmluYWxDYWxsZWR8fCgiZnVuY3Rpb24iPT10eXBlb2YgZS5fZmluYWw/KHQucGVuZGluZ2NiKyssdC5maW5hbENhbGxlZD0hMCxqLm5leHRUaWNrKEEsZSx0KSk6KHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KCJwcmVmaW5pc2giKSkpfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbj1UKHQpO3JldHVybiBuJiYoQyhlLHQpLDA9PT10LnBlbmRpbmdjYiYmKHQuZmluaXNoZWQ9ITAsZS5lbWl0KCJmaW5pc2giKSkpLG59ZnVuY3Rpb24gUyhlLHQsbil7dC5lbmRpbmc9ITAsTyhlLHQpLG4mJih0LmZpbmlzaGVkP2oubmV4dFRpY2sobik6ZS5vbmNlKCJmaW5pc2giLG4pKSx0LmVuZGVkPSEwLGUud3JpdGFibGU9ITF9ZnVuY3Rpb24gUihlLHQsbil7dmFyIHI9ZS5lbnRyeTtmb3IoZS5lbnRyeT1udWxsO3I7KXt2YXIgbz1yLmNhbGxiYWNrO3QucGVuZGluZ2NiLS0sbyhuKSxyPXIubmV4dH10LmNvcmtlZFJlcXVlc3RzRnJlZT90LmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWU6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9ZX12YXIgaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIpO2UuZXhwb3J0cz1jO3ZhciB4LEw9IXQuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZih0LnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/cjpqLm5leHRUaWNrO2MuV3JpdGFibGVTdGF0ZT11O3ZhciBEPW4oIi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpO0QuaW5oZXJpdHM9bigiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpO3ZhciB3PXtkZXByZWNhdGU6bigiLi9ub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUvYnJvd3Nlci5qcyIpfSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsST1vLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIik7RC5pbmhlcml0cyhjLE0pLHUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx0PVtdO2U7KXQucHVzaChlKSxlPWUubmV4dDtyZXR1cm4gdH0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6dy5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2goZSl7fX0oKTt2YXIgTjsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oTj1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEhTi5jYWxsKHRoaXMsZSl8fHRoaXM9PT1jJiYoZSYmZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHUpfX0pKTpOPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpc30sYy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sYy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz0hMSxzPSFyLm9iamVjdE1vZGUmJmEoZSk7cmV0dXJuIHMmJiFrLmlzQnVmZmVyKGUpJiYoZT1pKGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLHM/dD0iYnVmZmVyIjp0fHwodD1yLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWwpLHIuZW5kZWQ/ZCh0aGlzLG4pOihzfHxfKHRoaXMscixlLG4pKSYmKHIucGVuZGluZ2NiKyssbz1mKHRoaXMscixzLGUsdCxuKSksb30sYy5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGMucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS5jb3JrZWQmJihlLmNvcmtlZC0tLGUud3JpdGluZ3x8ZS5jb3JrZWR8fGUuZmluaXNoZWR8fGUuYnVmZmVyUHJvY2Vzc2luZ3x8IWUuYnVmZmVyZWRSZXF1ZXN0fHx2KHRoaXMsZSkpfSxjLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKGUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLGMucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7bihuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sYy5wcm90b3R5cGUuX3dyaXRldj1udWxsLGMucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgZT8obj1lLGU9bnVsbCx0PW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbnVsbCE9PWUmJnZvaWQgMCE9PWUmJnRoaXMud3JpdGUoZSx0KSxyLmNvcmtlZCYmKHIuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksci5lbmRpbmd8fHIuZmluaXNoZWR8fFModGhpcyxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxjLnByb3RvdHlwZS5kZXN0cm95PVAuZGVzdHJveSxjLnByb3RvdHlwZS5fdW5kZXN0cm95PVAudW5kZXN0cm95LGMucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dGhpcy5lbmQoKSx0KGUpfX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiksbigiLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIpLnNldEltbWVkaWF0ZSxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL0J1ZmZlckxpc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0LG4pe2UuY29weSh0LG4pfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLGk9bigxMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH0sZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9dCksdGhpcy5oZWFkPXQsKyt0aGlzLmxlbmd0aH0sZS5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlPXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGV9fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHQ9dGhpcy5oZWFkLG49IiIrdC5kYXRhO3Q9dC5uZXh0OyluKz1lK3QuZGF0YTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTtpZigxPT09dGhpcy5sZW5ndGgpcmV0dXJuIHRoaXMuaGVhZC5kYXRhO2Zvcih2YXIgdD1zLmFsbG9jVW5zYWZlKGU+Pj4wKSxuPXRoaXMuaGVhZCxyPTA7bjspbyhuLmRhdGEsdCxyKSxyKz1uLmRhdGEubGVuZ3RoLG49bi5uZXh0O3JldHVybiB0fSxlfSgpLGkmJmkuaW5zcGVjdCYmaS5pbnNwZWN0LmN1c3RvbSYmKGUuZXhwb3J0cy5wcm90b3R5cGVbaS5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgZT1pLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK2V9KX0sIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsbz10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gcnx8bz8odD90KGUpOiFlfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8aS5uZXh0VGljayhzLHRoaXMsZSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGV8fG51bGwsZnVuY3Rpb24oZSl7IXQmJmU/KGkubmV4dFRpY2socyxuLGUpLG4uX3dyaXRhYmxlU3RhdGUmJihuLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCkpOnQmJnQoZSl9KSx0aGlzKX1mdW5jdGlvbiBvKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9ZnVuY3Rpb24gcyhlLHQpe2UuZW1pdCgiZXJyb3IiLHQpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIik7ZS5leHBvcnRzPXtkZXN0cm95OnIsdW5kZXN0cm95Om99fSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIikuRXZlbnRFbWl0dGVyfSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIikuUGFzc1Rocm91Z2h9LCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0LG4pe3Q9ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIpLHQuU3RyZWFtPXQsdC5SZWFkYWJsZT10LHQuV3JpdGFibGU9bigiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiksdC5EdXBsZXg9bigiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLHQuVHJhbnNmb3JtPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKSx0LlBhc3NUaHJvdWdoPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIpLlRyYW5zZm9ybX0sIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS93cml0YWJsZS1icm93c2VyLmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVib3VuZC9kaXN0L3JlYm91bmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgwLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+Mj9uLTI6MCksbz0yO288bjtvKyspcltvLTJdPWFyZ3VtZW50c1tvXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KG4pLHM9MDtzPG47cysrKW9bc109YXJndW1lbnRzW3NdO2UuYXBwbHkodCxFLmNhbGwocix5LmNhbGwobykpKX19ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGIoZSl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gaShlKXtpZih2W2VdKXJldHVybiB2W2VdO3ZhciB0PWUucmVwbGFjZSgiIyIsIiIpOzM9PT10Lmxlbmd0aCYmKHQ9dFswXSt0WzBdK3RbMV0rdFsxXSt0WzJdK3RbMl0pO3ZhciBuPXQubWF0Y2goLy57Mn0vZyk7aWYoIW58fG4ubGVuZ3RoPDMpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBhIGNvbG9yIHN0cmluZyBvZiBmb3JtYXQgI3JyZ2diYiIpO3ZhciByPXtyOnBhcnNlSW50KG5bMF0sMTYpLGc6cGFyc2VJbnQoblsxXSwxNiksYjpwYXJzZUludChuWzJdLDE2KX07cmV0dXJuIHZbZV09cixyfWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPWUudG9TdHJpbmcoMTYpLG89dC50b1N0cmluZygxNikscz1uLnRvU3RyaW5nKDE2KTtyZXR1cm4gcj1yLmxlbmd0aDwyPyIwIityOnIsbz1vLmxlbmd0aDwyPyIwIitvOm8scz1zLmxlbmd0aDwyPyIwIitzOnMsIiMiK3IrbytzfWZ1bmN0aW9uIGwoZSx0LG4scixvKXtyZXR1cm4gcisoZS10KS8obi10KSooby1yKX1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToxLHM9YXJndW1lbnRzWzVdLHU9aSh0KSxjPWkobiksZD1NYXRoLmZsb29yKGwoZSxyLG8sdS5yLGMucikpLF89TWF0aC5mbG9vcihsKGUscixvLHUuZyxjLmcpKSxwPU1hdGguZmxvb3IobChlLHIsbyx1LmIsYy5iKSk7cmV0dXJuIHM/InJnYigiK2QrIiwiK18rIiwiK3ArIikiOmEoZCxfLHApfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUqTWF0aC5QSS8xODB9ZnVuY3Rpb24gZChlKXtyZXR1cm4gMTgwKmUvTWF0aC5QSX1mdW5jdGlvbiBfKGUpe3JldHVybiAzLjYyKihlLTMwKSsxOTR9ZnVuY3Rpb24gcChlKXtyZXR1cm4oZS0xOTQpLzMuNjIrMzB9ZnVuY3Rpb24gZihlKXtyZXR1cm4gMyooZS04KSsyNX1mdW5jdGlvbiBtKGUpe3JldHVybihlLTI1KS8zKzh9ZnVuY3Rpb24gaCgpe2lmKG51bGw9PXRoaXMuc3ByaW5nU3lzdGVtKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJ1biBsb29wZXIgd2l0aG91dCBhIHNwcmluZ1N5c3RlbSIpO3JldHVybiB0aGlzLnNwcmluZ1N5c3RlbX12YXIgZz12b2lkIDA7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJihnPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLGd8fHZvaWQgMD09PXR8fCJub2RlIiE9PXQudGl0bGV8fChnPW4pLGc9Z3x8ZnVuY3Rpb24oZSl7d2luZG93LnNldFRpbWVvdXQoZSwxZTMvNjApfTt2YXIgYj1nLEU9QXJyYXkucHJvdG90eXBlLmNvbmNhdCx5PUFycmF5LnByb3RvdHlwZS5zbGljZSx2PXt9LFQ9T2JqZWN0LmZyZWV6ZSh7YmluZDplLGV4dGVuZDpyLG9uRnJhbWU6byxyZW1vdmVGaXJzdDpzLGhleFRvUkdCOmkscmdiVG9IZXg6YX0pLEE9T2JqZWN0LmZyZWV6ZSh7bWFwVmFsdWVJblJhbmdlOmwsaW50ZXJwb2xhdGVDb2xvcjp1LGRlZ3JlZXNUb1JhZGlhbnM6YyxyYWRpYW5zVG9EZWdyZWVzOmR9KSxDPU9iamVjdC5mcmVlemUoe3RlbnNpb25Gcm9tT3JpZ2FtaVZhbHVlOl8sb3JpZ2FtaVZhbHVlRnJvbVRlbnNpb246cCxmcmljdGlvbkZyb21PcmlnYW1pVmFsdWU6ZixvcmlnYW1pRnJvbUZyaWN0aW9uOm19KSxPPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9LFM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtPKHRoaXMsZSksdGhpcy5zcHJpbmdTeXN0ZW09bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIGU9aC5jYWxsKHRoaXMpO28oZnVuY3Rpb24oKXtlLmxvb3AoRGF0ZS5ub3coKSl9KX0sZX0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtPKHRoaXMsZSksdGhpcy5zcHJpbmdTeXN0ZW09bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnJ1bm5pbmc9ITEsdGhpcy50aW1lc3RlcD10fHwxNi42Njd9cmV0dXJuIGUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciBlPWguY2FsbCh0aGlzKTtpZighdGhpcy5ydW5uaW5nKXtmb3IodGhpcy5ydW5uaW5nPSEwOyFlLmdldElzSWRsZSgpOyllLmxvb3AodGhpcy50aW1lKz10aGlzLnRpbWVzdGVwKTt0aGlzLnJ1bm5pbmc9ITF9fSxlfSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Tyh0aGlzLGUpLHRoaXMuc3ByaW5nU3lzdGVtPW51bGwsdGhpcy50aW1lPTAsdGhpcy5ydW5uaW5nPSExfXJldHVybiBlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0ZXA9ZnVuY3Rpb24oZSl7aC5jYWxsKHRoaXMpLmxvb3AodGhpcy50aW1lKz1lKX0sZX0oKSxMPU9iamVjdC5mcmVlemUoe0FuaW1hdGlvbkxvb3BlcjpSLFNpbXVsYXRpb25Mb29wZXI6aixTdGVwcGluZ1NpbXVsYXRpb25Mb29wZXI6eH0pLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7Tyh0aGlzLGUpLHRoaXMuYm91bmNpbmVzcz10LHRoaXMuc3BlZWQ9bjt2YXIgcj10aGlzLm5vcm1hbGl6ZSh0LzEuNywwLDIwKTtyPXRoaXMucHJvamVjdE5vcm1hbChyLDAsLjgpO3ZhciBvPXRoaXMubm9ybWFsaXplKG4vMS43LDAsMjApO3RoaXMuYm91bmN5VGVuc2lvbj10aGlzLnByb2plY3ROb3JtYWwobywuNSwyMDApLHRoaXMuYm91bmN5RnJpY3Rpb249dGhpcy5xdWFkcmF0aWNPdXRJbnRlcnBvbGF0aW9uKHIsdGhpcy5iM05vYm91bmNlKHRoaXMuYm91bmN5VGVuc2lvbiksLjAxKX1yZXR1cm4gZS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oZS10KS8obi10KX0sZS5wcm90b3R5cGUucHJvamVjdE5vcm1hbD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQrZSoobi10KX0sZS5wcm90b3R5cGUubGluZWFySW50ZXJwb2xhdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUqbisoMS1lKSp0fSxlLnByb3RvdHlwZS5xdWFkcmF0aWNPdXRJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5saW5lYXJJbnRlcnBvbGF0aW9uKDIqZS1lKmUsdCxuKX0sZS5wcm90b3R5cGUuYjNGcmljdGlvbjE9ZnVuY3Rpb24oZSl7cmV0dXJuIDdlLTQqTWF0aC5wb3coZSwzKS0uMDMxKk1hdGgucG93KGUsMikrLjY0KmUrMS4yOH0sZS5wcm90b3R5cGUuYjNGcmljdGlvbjI9ZnVuY3Rpb24oZSl7cmV0dXJuIDQ0ZS02Kk1hdGgucG93KGUsMyktLjAwNipNYXRoLnBvdyhlLDIpKy4zNiplKzJ9LGUucHJvdG90eXBlLmIzRnJpY3Rpb24zPWZ1bmN0aW9uKGUpe3JldHVybiA0LjVlLTcqTWF0aC5wb3coZSwzKS0zMzJlLTYqTWF0aC5wb3coZSwyKSsuMTA3OCplKzUuODR9LGUucHJvdG90eXBlLmIzTm9ib3VuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTE4P3RoaXMuYjNGcmljdGlvbjEoZSk6ZT4xOCYmZTw9NDQ/dGhpcy5iM0ZyaWN0aW9uMihlKTp0aGlzLmIzRnJpY3Rpb24zKGUpfSxlfSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7Tyh0aGlzLGUpLHRoaXMudGVuc2lvbj10LHRoaXMuZnJpY3Rpb249bn1yZXR1cm4gZS5mcm9tT3JpZ2FtaVRlbnNpb25BbmRGcmljdGlvbj1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZShfKHQpLGYobikpfSxlLmZyb21Cb3VuY2luZXNzQW5kU3BlZWQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgRCh0LG4pO3JldHVybiBlLmZyb21PcmlnYW1pVGVuc2lvbkFuZEZyaWN0aW9uKHIuYm91bmN5VGVuc2lvbixyLmJvdW5jeUZyaWN0aW9uKX0sZS5jb2FzdGluZ0NvbmZpZ1dpdGhPcmlnYW1pRnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKDAsZih0KSl9LGV9KCk7dy5ERUZBVUxUX09SSUdBTUlfU1BSSU5HX0NPTkZJRz13LmZyb21PcmlnYW1pVGVuc2lvbkFuZEZyaWN0aW9uKDQwLDcpO3ZhciBNPWZ1bmN0aW9uIGUoKXtPKHRoaXMsZSksdGhpcy5wb3NpdGlvbj0wLHRoaXMudmVsb2NpdHk9MH0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Tyh0aGlzLGUpLHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuX3N0YXJ0VmFsdWU9MCx0aGlzLl9jdXJyZW50U3RhdGU9bmV3IE0sdGhpcy5fZGlzcGxhY2VtZW50RnJvbVJlc3RUaHJlc2hvbGQ9LjAwMSx0aGlzLl9lbmRWYWx1ZT0wLHRoaXMuX292ZXJzaG9vdENsYW1waW5nRW5hYmxlZD0hMSx0aGlzLl9wcmV2aW91c1N0YXRlPW5ldyBNLHRoaXMuX3Jlc3RTcGVlZFRocmVzaG9sZD0uMDAxLHRoaXMuX3RlbXBTdGF0ZT1uZXcgTSx0aGlzLl90aW1lQWNjdW11bGF0b3I9MCx0aGlzLl93YXNBdFJlc3Q9ITAsdGhpcy5faWQ9InMiK2UuX0lEKyssdGhpcy5fc3ByaW5nU3lzdGVtPXR9cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLl9zcHJpbmdTeXN0ZW0uZGVyZWdpc3RlclNwcmluZyh0aGlzKX0sZS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LGUucHJvdG90eXBlLnNldFNwcmluZ0NvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc3ByaW5nQ29uZmlnPWUsdGhpc30sZS5wcm90b3R5cGUuZ2V0U3ByaW5nQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NwcmluZ0NvbmZpZ30sZS5wcm90b3R5cGUuc2V0Q3VycmVudFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3N0YXJ0VmFsdWU9ZSx0aGlzLl9jdXJyZW50U3RhdGUucG9zaXRpb249ZSx0fHx0aGlzLnNldEF0UmVzdCgpLHRoaXMubm90aWZ5UG9zaXRpb25VcGRhdGVkKCExLCExKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRTdGFydFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0VmFsdWV9LGUucHJvdG90eXBlLmdldEN1cnJlbnRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucG9zaXRpb259LGUucHJvdG90eXBlLmdldEN1cnJlbnREaXNwbGFjZW1lbnREaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldERpc3BsYWNlbWVudERpc3RhbmNlRm9yU3RhdGUodGhpcy5fY3VycmVudFN0YXRlKX0sZS5wcm90b3R5cGUuZ2V0RGlzcGxhY2VtZW50RGlzdGFuY2VGb3JTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5fZW5kVmFsdWUtZS5wb3NpdGlvbil9LGUucHJvdG90eXBlLnNldEVuZFZhbHVlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2VuZFZhbHVlPT09ZSYmdGhpcy5pc0F0UmVzdCgpKXJldHVybiB0aGlzO3RoaXMuX3N0YXJ0VmFsdWU9dGhpcy5nZXRDdXJyZW50VmFsdWUoKSx0aGlzLl9lbmRWYWx1ZT1lLHRoaXMuX3NwcmluZ1N5c3RlbS5hY3RpdmF0ZVNwcmluZyh0aGlzLmdldElkKCkpO2Zvcih2YXIgdD0wLG49dGhpcy5saXN0ZW5lcnMubGVuZ3RoO3Q8bjt0Kyspe3ZhciByPXRoaXMubGlzdGVuZXJzW3RdLG89ci5vblNwcmluZ0VuZFN0YXRlQ2hhbmdlO28mJm8odGhpcyl9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmdldEVuZFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZFZhbHVlfSxlLnByb3RvdHlwZS5zZXRWZWxvY2l0eT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMuX2N1cnJlbnRTdGF0ZS52ZWxvY2l0eT90aGlzOih0aGlzLl9jdXJyZW50U3RhdGUudmVsb2NpdHk9ZSx0aGlzLl9zcHJpbmdTeXN0ZW0uYWN0aXZhdGVTcHJpbmcodGhpcy5nZXRJZCgpKSx0aGlzKX0sZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnZlbG9jaXR5fSxlLnByb3RvdHlwZS5zZXRSZXN0U3BlZWRUaHJlc2hvbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Jlc3RTcGVlZFRocmVzaG9sZD1lLHRoaXN9LGUucHJvdG90eXBlLmdldFJlc3RTcGVlZFRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN0U3BlZWRUaHJlc2hvbGR9LGUucHJvdG90eXBlLnNldFJlc3REaXNwbGFjZW1lbnRUaHJlc2hvbGQ9ZnVuY3Rpb24oZSl7dGhpcy5fZGlzcGxhY2VtZW50RnJvbVJlc3RUaHJlc2hvbGQ9ZX0sZS5wcm90b3R5cGUuZ2V0UmVzdERpc3BsYWNlbWVudFRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNwbGFjZW1lbnRGcm9tUmVzdFRocmVzaG9sZH0sZS5wcm90b3R5cGUuc2V0T3ZlcnNob290Q2xhbXBpbmdFbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vdmVyc2hvb3RDbGFtcGluZ0VuYWJsZWQ9ZSx0aGlzfSxlLnByb3RvdHlwZS5pc092ZXJzaG9vdENsYW1waW5nRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdmVyc2hvb3RDbGFtcGluZ0VuYWJsZWR9LGUucHJvdG90eXBlLmlzT3ZlcnNob290aW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3RhcnRWYWx1ZSx0PXRoaXMuX2VuZFZhbHVlO3JldHVybiB0aGlzLl9zcHJpbmdDb25maWcudGVuc2lvbj4wJiYoZTx0JiZ0aGlzLmdldEN1cnJlbnRWYWx1ZSgpPnR8fGU+dCYmdGhpcy5nZXRDdXJyZW50VmFsdWUoKTx0KX0sZS5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuaXNBdFJlc3QoKTtpZighcnx8IXRoaXMuX3dhc0F0UmVzdCl7dmFyIG89bjtuPmUuTUFYX0RFTFRBX1RJTUVfU0VDJiYobz1lLk1BWF9ERUxUQV9USU1FX1NFQyksdGhpcy5fdGltZUFjY3VtdWxhdG9yKz1vO2Zvcih2YXIgcz10aGlzLl9zcHJpbmdDb25maWcudGVuc2lvbixpPXRoaXMuX3NwcmluZ0NvbmZpZy5mcmljdGlvbixhPXRoaXMuX2N1cnJlbnRTdGF0ZS5wb3NpdGlvbixsPXRoaXMuX2N1cnJlbnRTdGF0ZS52ZWxvY2l0eSx1PXRoaXMuX3RlbXBTdGF0ZS5wb3NpdGlvbixjPXRoaXMuX3RlbXBTdGF0ZS52ZWxvY2l0eSxkPXZvaWQgMCxfPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQgMCxtPXZvaWQgMCxoPXZvaWQgMCxnPXZvaWQgMCxiPXZvaWQgMCxFPXZvaWQgMCx5PXZvaWQgMDt0aGlzLl90aW1lQWNjdW11bGF0b3I+PWUuU09MVkVSX1RJTUVTVEVQX1NFQzspdGhpcy5fdGltZUFjY3VtdWxhdG9yLT1lLlNPTFZFUl9USU1FU1RFUF9TRUMsdGhpcy5fdGltZUFjY3VtdWxhdG9yPGUuU09MVkVSX1RJTUVTVEVQX1NFQyYmKHRoaXMuX3ByZXZpb3VzU3RhdGUucG9zaXRpb249YSx0aGlzLl9wcmV2aW91c1N0YXRlLnZlbG9jaXR5PWwpLGQ9bCxfPXMqKHRoaXMuX2VuZFZhbHVlLXUpLWkqbCx1PWErZCplLlNPTFZFUl9USU1FU1RFUF9TRUMqLjUsYz1sK18qZS5TT0xWRVJfVElNRVNURVBfU0VDKi41LHA9YyxmPXMqKHRoaXMuX2VuZFZhbHVlLXUpLWkqYyx1PWErcCplLlNPTFZFUl9USU1FU1RFUF9TRUMqLjUsYz1sK2YqZS5TT0xWRVJfVElNRVNURVBfU0VDKi41LG09YyxoPXMqKHRoaXMuX2VuZFZhbHVlLXUpLWkqYyx1PWErbSplLlNPTFZFUl9USU1FU1RFUF9TRUMsYz1sK2gqZS5TT0xWRVJfVElNRVNURVBfU0VDLGc9YyxiPXMqKHRoaXMuX2VuZFZhbHVlLXUpLWkqYyxFPTEvNiooZCsyKihwK20pK2cpLHk9MS82KihfKzIqKGYraCkrYiksYSs9RSplLlNPTFZFUl9USU1FU1RFUF9TRUMsbCs9eSplLlNPTFZFUl9USU1FU1RFUF9TRUM7dGhpcy5fdGVtcFN0YXRlLnBvc2l0aW9uPXUsdGhpcy5fdGVtcFN0YXRlLnZlbG9jaXR5PWMsdGhpcy5fY3VycmVudFN0YXRlLnBvc2l0aW9uPWEsdGhpcy5fY3VycmVudFN0YXRlLnZlbG9jaXR5PWwsdGhpcy5fdGltZUFjY3VtdWxhdG9yPjAmJnRoaXMuX2ludGVycG9sYXRlKHRoaXMuX3RpbWVBY2N1bXVsYXRvci9lLlNPTFZFUl9USU1FU1RFUF9TRUMpLCh0aGlzLmlzQXRSZXN0KCl8fHRoaXMuX292ZXJzaG9vdENsYW1waW5nRW5hYmxlZCYmdGhpcy5pc092ZXJzaG9vdGluZygpKSYmKHRoaXMuX3NwcmluZ0NvbmZpZy50ZW5zaW9uPjA/KHRoaXMuX3N0YXJ0VmFsdWU9dGhpcy5fZW5kVmFsdWUsdGhpcy5fY3VycmVudFN0YXRlLnBvc2l0aW9uPXRoaXMuX2VuZFZhbHVlKToodGhpcy5fZW5kVmFsdWU9dGhpcy5fY3VycmVudFN0YXRlLnBvc2l0aW9uLHRoaXMuX3N0YXJ0VmFsdWU9dGhpcy5fZW5kVmFsdWUpLHRoaXMuc2V0VmVsb2NpdHkoMCkscj0hMCk7dmFyIHY9ITE7dGhpcy5fd2FzQXRSZXN0JiYodGhpcy5fd2FzQXRSZXN0PSExLHY9ITApO3ZhciBUPSExO3ImJih0aGlzLl93YXNBdFJlc3Q9ITAsVD0hMCksdGhpcy5ub3RpZnlQb3NpdGlvblVwZGF0ZWQodixUKX19LGUucHJvdG90eXBlLm5vdGlmeVBvc2l0aW9uVXBkYXRlZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO248cjtuKyspe3ZhciBvPXRoaXMubGlzdGVuZXJzW25dO2UmJm8ub25TcHJpbmdBY3RpdmF0ZSYmby5vblNwcmluZ0FjdGl2YXRlKHRoaXMpLG8ub25TcHJpbmdVcGRhdGUmJm8ub25TcHJpbmdVcGRhdGUodGhpcyksdCYmby5vblNwcmluZ0F0UmVzdCYmby5vblNwcmluZ0F0UmVzdCh0aGlzKX19LGUucHJvdG90eXBlLnN5c3RlbVNob3VsZEFkdmFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0F0UmVzdCgpfHwhdGhpcy53YXNBdFJlc3QoKX0sZS5wcm90b3R5cGUud2FzQXRSZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dhc0F0UmVzdH0sZS5wcm90b3R5cGUuaXNBdFJlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy5fY3VycmVudFN0YXRlLnZlbG9jaXR5KTx0aGlzLl9yZXN0U3BlZWRUaHJlc2hvbGQmJih0aGlzLmdldERpc3BsYWNlbWVudERpc3RhbmNlRm9yU3RhdGUodGhpcy5fY3VycmVudFN0YXRlKTw9dGhpcy5fZGlzcGxhY2VtZW50RnJvbVJlc3RUaHJlc2hvbGR8fDA9PT10aGlzLl9zcHJpbmdDb25maWcudGVuc2lvbil9LGUucHJvdG90eXBlLnNldEF0UmVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmRWYWx1ZT10aGlzLl9jdXJyZW50U3RhdGUucG9zaXRpb24sdGhpcy5fdGVtcFN0YXRlLnBvc2l0aW9uPXRoaXMuX2N1cnJlbnRTdGF0ZS5wb3NpdGlvbix0aGlzLl9jdXJyZW50U3RhdGUudmVsb2NpdHk9MCx0aGlzfSxlLnByb3RvdHlwZS5faW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudFN0YXRlLnBvc2l0aW9uPXRoaXMuX2N1cnJlbnRTdGF0ZS5wb3NpdGlvbiplK3RoaXMuX3ByZXZpb3VzU3RhdGUucG9zaXRpb24qKDEtZSksdGhpcy5fY3VycmVudFN0YXRlLnZlbG9jaXR5PXRoaXMuX2N1cnJlbnRTdGF0ZS52ZWxvY2l0eSplK3RoaXMuX3ByZXZpb3VzU3RhdGUudmVsb2NpdHkqKDEtZSl9LGUucHJvdG90eXBlLmdldExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpc3RlbmVyc30sZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLnB1c2goZSksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5saXN0ZW5lcnMsZSksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlzdGVuZXJzPVtdLHRoaXN9LGUucHJvdG90eXBlLmN1cnJlbnRWYWx1ZUlzQXBwcm94aW1hdGVseT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRDdXJyZW50VmFsdWUoKS1lKTw9dGhpcy5nZXRSZXN0RGlzcGxhY2VtZW50VGhyZXNob2xkKCl9LGV9KCk7ay5fSUQ9MCxrLk1BWF9ERUxUQV9USU1FX1NFQz0uMDY0LGsuU09MVkVSX1RJTUVTVEVQX1NFQz0uMDAxO3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtPKHRoaXMsZSksdGhpcy5saXN0ZW5lcnM9W10sdGhpcy5fYWN0aXZlU3ByaW5ncz1bXSx0aGlzLl9pZGxlU3ByaW5nSW5kaWNlcz1bXSx0aGlzLl9pc0lkbGU9ITAsdGhpcy5fbGFzdFRpbWVNaWxsaXM9LTEsdGhpcy5fc3ByaW5nUmVnaXN0cnk9e30sdGhpcy5sb29wZXI9dHx8bmV3IFIsdGhpcy5sb29wZXIuc3ByaW5nU3lzdGVtPXRoaXN9cmV0dXJuIGUucHJvdG90eXBlLnNldExvb3Blcj1mdW5jdGlvbihlKXt0aGlzLmxvb3Blcj1lLGUuc3ByaW5nU3lzdGVtPXRoaXN9LGUucHJvdG90eXBlLmNyZWF0ZVNwcmluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMDtyZXR1cm4gbj12b2lkIDA9PT1lfHx2b2lkIDA9PT10P3cuREVGQVVMVF9PUklHQU1JX1NQUklOR19DT05GSUc6dy5mcm9tT3JpZ2FtaVRlbnNpb25BbmRGcmljdGlvbihlLHQpLHRoaXMuY3JlYXRlU3ByaW5nV2l0aENvbmZpZyhuKX0sZS5wcm90b3R5cGUuY3JlYXRlU3ByaW5nV2l0aEJvdW5jaW5lc3NBbmRTcGVlZD1mdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMDtyZXR1cm4gbj12b2lkIDA9PT1lfHx2b2lkIDA9PT10P3cuREVGQVVMVF9PUklHQU1JX1NQUklOR19DT05GSUc6dy5mcm9tQm91bmNpbmVzc0FuZFNwZWVkKGUsdCksdGhpcy5jcmVhdGVTcHJpbmdXaXRoQ29uZmlnKG4pfSxlLnByb3RvdHlwZS5jcmVhdGVTcHJpbmdXaXRoQ29uZmlnPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBrKHRoaXMpO3JldHVybiB0aGlzLnJlZ2lzdGVyU3ByaW5nKHQpLHQuc2V0U3ByaW5nQ29uZmlnKGUpLHR9LGUucHJvdG90eXBlLmdldElzSWRsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0lkbGV9LGUucHJvdG90eXBlLmdldFNwcmluZ0J5SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3NwcmluZ1JlZ2lzdHJ5W2VdfSxlLnByb3RvdHlwZS5nZXRBbGxTcHJpbmdzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuX3NwcmluZ1JlZ2lzdHJ5KXRoaXMuX3NwcmluZ1JlZ2lzdHJ5Lmhhc093blByb3BlcnR5KHQpJiZlLnB1c2godGhpcy5fc3ByaW5nUmVnaXN0cnlbdF0pO3JldHVybiBlfSxlLnByb3RvdHlwZS5yZWdpc3RlclNwcmluZz1mdW5jdGlvbihlKXt0aGlzLl9zcHJpbmdSZWdpc3RyeVtlLmdldElkKCldPWV9LGUucHJvdG90eXBlLmRlcmVnaXN0ZXJTcHJpbmc9ZnVuY3Rpb24oZSl7cyh0aGlzLl9hY3RpdmVTcHJpbmdzLGUpLGRlbGV0ZSB0aGlzLl9zcHJpbmdSZWdpc3RyeVtlLmdldElkKCldfSxlLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0aGlzLl9pZGxlU3ByaW5nSW5kaWNlcy5sZW5ndGg+MDspdGhpcy5faWRsZVNwcmluZ0luZGljZXMucG9wKCk7Zm9yKHZhciBuPTAscj10aGlzLl9hY3RpdmVTcHJpbmdzLmxlbmd0aDtuPHI7bisrKXt2YXIgbz10aGlzLl9hY3RpdmVTcHJpbmdzW25dO28uc3lzdGVtU2hvdWxkQWR2YW5jZSgpP28uYWR2YW5jZShlLzFlMyx0LzFlMyk6dGhpcy5faWRsZVNwcmluZ0luZGljZXMucHVzaCh0aGlzLl9hY3RpdmVTcHJpbmdzLmluZGV4T2YobykpfWZvcig7dGhpcy5faWRsZVNwcmluZ0luZGljZXMubGVuZ3RoPjA7KXt2YXIgcz10aGlzLl9pZGxlU3ByaW5nSW5kaWNlcy5wb3AoKTtzPj0wJiZ0aGlzLl9hY3RpdmVTcHJpbmdzLnNwbGljZShzLDEpfX0sZS5wcm90b3R5cGUubG9vcD1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDA7LTE9PT10aGlzLl9sYXN0VGltZU1pbGxpcyYmKHRoaXMuX2xhc3RUaW1lTWlsbGlzPWUtMSk7dmFyIG49ZS10aGlzLl9sYXN0VGltZU1pbGxpczt0aGlzLl9sYXN0VGltZU1pbGxpcz1lO3ZhciByPTAsbz10aGlzLmxpc3RlbmVycy5sZW5ndGg7Zm9yKHI9MDtyPG87cisrKXQ9dGhpcy5saXN0ZW5lcnNbcl0sdC5vbkJlZm9yZUludGVncmF0ZSYmdC5vbkJlZm9yZUludGVncmF0ZSh0aGlzKTtmb3IodGhpcy5hZHZhbmNlKGUsbiksMD09PXRoaXMuX2FjdGl2ZVNwcmluZ3MubGVuZ3RoJiYodGhpcy5faXNJZGxlPSEwLHRoaXMuX2xhc3RUaW1lTWlsbGlzPS0xKSxyPTA7cjxvO3IrKyl0PXRoaXMubGlzdGVuZXJzW3JdLHQub25BZnRlckludGVncmF0ZSYmdC5vbkFmdGVySW50ZWdyYXRlKHRoaXMpO3RoaXMuX2lzSWRsZXx8dGhpcy5sb29wZXIucnVuKCl9LGUucHJvdG90eXBlLmFjdGl2YXRlU3ByaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NwcmluZ1JlZ2lzdHJ5W2VdOy0xPT09dGhpcy5fYWN0aXZlU3ByaW5ncy5pbmRleE9mKHQpJiZ0aGlzLl9hY3RpdmVTcHJpbmdzLnB1c2godCksdGhpcy5nZXRJc0lkbGUoKSYmKHRoaXMuX2lzSWRsZT0hMSx0aGlzLmxvb3Blci5ydW4oKSl9LGUucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUpe3RoaXMubGlzdGVuZXJzLnB1c2goZSl9LGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUpe3ModGhpcy5saXN0ZW5lcnMsZSl9LGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzPVtdfSxlfSgpO3JldHVybiBTKHt9LEwse09yaWdhbWlWYWx1ZUNvbnZlcnRlcjpDLE1hdGhVdGlsOkEsU3ByaW5nOmssU3ByaW5nQ29uZmlnOncsU3ByaW5nU3lzdGVtOkksdXRpbDpTKHt9LFQsQSl9KX0pfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIikuc2V0SW1tZWRpYXRlKX0sIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1mdW5jdGlvbiBhKGUpe2lmKHZvaWQgMD09PXd8fHZvaWQgMD09PXdbZV0pcmV0dXJuIGwoZSk7dmFyIHQ9d1tlXTtyZXR1cm4gdD09PU0/dm9pZCAwOnR9ZnVuY3Rpb24gbChlKXtzd2l0Y2goZSl7Y2FzZSJQcm9wVHlwZXMiOnJldHVybiBnLmRlZmF1bHQ7Y2FzZSJtYXBTdGFja1RyYWNlIjpyZXR1cm4geC5tYXBTdGFja1RyYWNlO2Nhc2UiYXNzaWduIjpyZXR1cm4gUi5kZWZhdWx0O2Nhc2Uic3R5bGUiOnJldHVybiBBLmRlZmF1bHQ7Y2FzZSJpc0ZpbGVuYW1lQWJzb2x1dGUiOnJldHVybiBqLmlzRmlsZW5hbWVBYnNvbHV0ZTtjYXNlIm1ha2VVcmwiOnJldHVybiBqLm1ha2VVcmw7Y2FzZSJtYWtlTGlua1RleHQiOnJldHVybiBqLm1ha2VMaW5rVGV4dDtjYXNlIkVycm9yU3RhY2tQYXJzZXIiOnJldHVybiBPLmRlZmF1bHQ7Y2FzZSJDb21wb25lbnQiOnJldHVybiBiLkNvbXBvbmVudDtjYXNlIlJlYWN0RE9NIjpyZXR1cm4gdi5kZWZhdWx0O2Nhc2UiUmVhY3QiOnJldHVybiBFLmRlZmF1bHQ7Y2FzZSJSZWRCb3hFcnJvciI6cmV0dXJuIEx9fWZ1bmN0aW9uIHUoZSx0KXtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOnAoZSkpKXJldHVybiB3W2VdPXZvaWQgMD09PXQ/TTp0LGZ1bmN0aW9uKCl7YyhlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt3W3RdPWVbdF19KX1mdW5jdGlvbiBjKGUpe2RlbGV0ZSB3W2VdfWZ1bmN0aW9uIGQoZSl7ZnVuY3Rpb24gdCgpe24uZm9yRWFjaChmdW5jdGlvbihlKXt3W2VdPXJbZV19KX12YXIgbj1PYmplY3Qua2V5cyhlKSxyPXt9O3JldHVybiBmdW5jdGlvbihvKXtuLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT13W3RdLHdbdF09ZVt0XX0pO3ZhciBzPW8oKTtyZXR1cm4gcyYmImZ1bmN0aW9uIj09dHlwZW9mIHMudGhlbj9zLnRoZW4odCkuY2F0Y2godCk6dCgpLHN9fWZ1bmN0aW9uIF8oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRCxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuX19SZXdpcmVBUElfXz10Ll9fUmVzZXREZXBlbmRlbmN5X189dC5fX3NldF9fPXQuX19SZXdpcmVfXz10Ll9fR2V0RGVwZW5kZW5jeV9fPXQuX19nZXRfXz10LlJlZEJveEVycm9yPXZvaWQgMDt2YXIgcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj1bXSxyPSEwLG89ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgaSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2goaS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe289ITAscz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgc319cmV0dXJuIG59cmV0dXJuIGZ1bmN0aW9uKHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9zdHlsZS5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2Vycm9yLXN0YWNrLXBhcnNlci9lcnJvci1zdGFjay1wYXJzZXIuanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9saWIuanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3NvdXJjZW1hcHBlZC1zdGFja3RyYWNlL2Rpc3Qvc291cmNlbWFwcGVkLXN0YWNrdHJhY2UuanMiKSxMPXQuUmVkQm94RXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtvKHRoaXMsdCk7dmFyIG49cyh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBuLnN0YXRlPXtlcnJvcjpudWxsLG1hcHBlZDohMX0sbi5tYXBPbkNvbnN0cnVjdGlvbihlLmVycm9yKSxufXJldHVybiBpKHQsZSksbSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YXRlLm1hcHBlZHx8dGhpcy5tYXBFcnJvcih0aGlzLnByb3BzLmVycm9yKX19LHtrZXk6Im1hcE9uQ29uc3RydWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnN0YWNrLnNwbGl0KCJcbiIpO2lmKHQubGVuZ3RoPDIpcmV0dXJuIHZvaWQodGhpcy5zdGF0ZT17ZXJyb3I6ZSxtYXBwZWQ6ITB9KTtpZigtMSE9PXRbMV0uc2VhcmNoKC9cKHdlYnBhY2s6XC97M30vKSlyZXR1cm4gdm9pZCh0aGlzLnN0YXRlPXtlcnJvcjplLG1hcHBlZDohMH0pO2lmKC0xPT09dFsxXS5zZWFyY2goL1woZXZhbCBhdC8pKXJldHVybiB2b2lkKHRoaXMuc3RhdGU9e2Vycm9yOmUsbWFwcGVkOiExfSk7dmFyIG49W3Quc2hpZnQoKV0scj0hMCxvPSExLHM9dm9pZCAwO3RyeXtmb3IodmFyIGksYT10W1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGk9YS5uZXh0KCkpLmRvbmUpO3I9ITApe3ZhciBsPWkudmFsdWUsdT1sLm1hdGNoKC8oLispXChldmFsIGF0ICguKykgXCguKz9cKSwgLisoXDpbMC05XStcOlswLTldKylcKS8pO2lmKHUpe3ZhciBjPWYodSw0KSxkPWNbMV0sXz1jWzJdLHA9Y1szXTtuLnB1c2goZCsiICgiK18rcCsiKSIpfWVsc2Ugbi5wdXNoKGwpfX1jYXRjaChlKXtvPSEwLHM9ZX1maW5hbGx5e3RyeXshciYmYS5yZXR1cm4mJmEucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IHN9fWUuc3RhY2s9bi5qb2luKCJcbiIpLHRoaXMuc3RhdGU9e2Vycm9yOmUsbWFwcGVkOiEwfX19LHtrZXk6Im1hcEVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2EoIm1hcFN0YWNrVHJhY2UiKShlLnN0YWNrLGZ1bmN0aW9uKG4pe2Uuc3RhY2s9bi5qb2luKCJcbiIpLHQuc2V0U3RhdGUoe2Vycm9yOmUsbWFwcGVkOiEwfSl9KX19LHtrZXk6InJlbmRlckZyYW1lcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuZmlsZW5hbWUscj10LmVkaXRvclNjaGVtZSxvPXQudXNlTGluZXMscz10LnVzZUNvbHVtbnMsaT1hKCJhc3NpZ24iKSh7fSxhKCJzdHlsZSIpLHRoaXMucHJvcHMuc3R5bGUpLGw9aS5mcmFtZSx1PWkuZmlsZSxjPWkubGlua1RvRmlsZTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgaT12b2lkIDAsZD12b2lkIDA7aWYoMD09PXQmJm4mJiFhKCJpc0ZpbGVuYW1lQWJzb2x1dGUiKShlLmZpbGVOYW1lKSlkPWEoIm1ha2VVcmwiKShuLHIpLGk9YSgibWFrZUxpbmtUZXh0Iikobik7ZWxzZXt2YXIgXz1vP2UubGluZU51bWJlcjpudWxsLHA9cz9lLmNvbHVtbk51bWJlcjpudWxsO2Q9YSgibWFrZVVybCIpKGUuZmlsZU5hbWUscixfLHApLGk9YSgibWFrZUxpbmtUZXh0IikoZS5maWxlTmFtZSxfLHApfXJldHVybiBhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOmwsa2V5OnR9LGEoIlJlYWN0IikuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGUuZnVuY3Rpb25OYW1lKSxhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOnV9LGEoIlJlYWN0IikuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6ZCxzdHlsZTpjfSxpKSkpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5lcnJvcix0PXRoaXMucHJvcHMuY2xhc3NOYW1lLG49YSgiYXNzaWduIikoe30sYSgic3R5bGUiKSx0aGlzLnByb3BzLnN0eWxlKSxyPW4ucmVkYm94LG89bi5tZXNzYWdlLHM9bi5zdGFjayxpPW4uZnJhbWUsbD12b2lkIDAsdT12b2lkIDA7dHJ5e2w9YSgiRXJyb3JTdGFja1BhcnNlciIpLnBhcnNlKGUpfWNhdGNoKGUpe3U9bmV3IEVycm9yKCJGYWlsZWQgdG8gcGFyc2Ugc3RhY2sgdHJhY2UuIFN0YWNrIHRyYWNlIGluZm9ybWF0aW9uIHVuYXZhaWxhYmxlLiIpfXJldHVybiBsPXU/YSgiUmVhY3QiKS5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTppLGtleTowfSxhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCx1Lm1lc3NhZ2UpKTp0aGlzLnJlbmRlckZyYW1lcyhsKSxhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOnIsY2xhc3NOYW1lOnR9LGEoIlJlYWN0IikuY3JlYXRlRWxlbWVudCgiZGl2Iix7c3R5bGU6b30sZS5uYW1lLCI6ICIsZS5tZXNzYWdlKSxhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOnN9LGwpKX19XSksdH0oYSgiQ29tcG9uZW50IikpO0wucHJvcFR5cGVzPXtlcnJvcjphKCJQcm9wVHlwZXMiKS5pbnN0YW5jZU9mKEVycm9yKS5pc1JlcXVpcmVkLGZpbGVuYW1lOmEoIlByb3BUeXBlcyIpLnN0cmluZyxlZGl0b3JTY2hlbWU6YSgiUHJvcFR5cGVzIikuc3RyaW5nLHVzZUxpbmVzOmEoIlByb3BUeXBlcyIpLmJvb2wsdXNlQ29sdW1uczphKCJQcm9wVHlwZXMiKS5ib29sLHN0eWxlOmEoIlByb3BUeXBlcyIpLm9iamVjdCxjbGFzc05hbWU6YSgiUHJvcFR5cGVzIikuc3RyaW5nfSxMLmRpc3BsYXlOYW1lPSJSZWRCb3hFcnJvciIsTC5kZWZhdWx0UHJvcHM9e3VzZUxpbmVzOiEwLHVzZUNvbHVtbnM6ITB9O3ZhciBEPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbyh0aGlzLHQpLHModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gaSh0LGUpLG0odCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWwpLHRoaXMucmVuZGVyUmVkQm94RXJyb3IoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclJlZEJveEVycm9yKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXthKCJSZWFjdERPTSIpLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5lbCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmVsKSx0aGlzLmVsPW51bGx9fSx7a2V5OiJyZW5kZXJSZWRCb3hFcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXthKCJSZWFjdERPTSIpLnJlbmRlcihhKCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQoYSgiUmVkQm94RXJyb3IiKSx0aGlzLnByb3BzKSx0aGlzLmVsKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSksdH0oYSgiQ29tcG9uZW50IikpO0QucHJvcFR5cGVzPXtlcnJvcjphKCJQcm9wVHlwZXMiKS5pbnN0YW5jZU9mKEVycm9yKS5pc1JlcXVpcmVkfSxELmRpc3BsYXlOYW1lPSJSZWRCb3giLHQuZGVmYXVsdD1EO3ZhciB3PU9iamVjdC5jcmVhdGUobnVsbCksTT0iX19JTlRFTlRJT05BTF9VTkRFRklORURfXyIsaz17fTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWUoIl9fZ2V0X18iLGEpLGUoIl9fR2V0RGVwZW5kZW5jeV9fIixhKSxlKCJfX1Jld2lyZV9fIix1KSxlKCJfX3NldF9fIix1KSxlKCJfX3Jlc2V0X18iLGMpLGUoIl9fUmVzZXREZXBlbmRlbmN5X18iLGMpLGUoIl9fd2l0aF9fIixkKX0oKTt2YXIgST12b2lkIDA9PT1EPyJ1bmRlZmluZWQiOnAoRCk7Im9iamVjdCIhPT1JJiYiZnVuY3Rpb24iIT09SXx8IU9iamVjdC5pc0V4dGVuc2libGUoRCl8fChfKCJfX2dldF9fIixhKSxfKCJfX0dldERlcGVuZGVuY3lfXyIsYSksXygiX19SZXdpcmVfXyIsdSksXygiX19zZXRfXyIsdSksXygiX19yZXNldF9fIixjKSxfKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixjKSxfKCJfX3dpdGhfXyIsZCksXygiX19SZXdpcmVBUElfXyIsaykpLHQuX19nZXRfXz1hLHQuX19HZXREZXBlbmRlbmN5X189YSx0Ll9fUmV3aXJlX189dSx0Ll9fc2V0X189dSx0Ll9fUmVzZXREZXBlbmRlbmN5X189Yyx0Ll9fUmV3aXJlQVBJX189a30sIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvbGliLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYodm9pZCAwPT09ZHx8dm9pZCAwPT09ZFtlXSlyZXR1cm4gbyhlKTt2YXIgdD1kW2VdO3JldHVybiB0PT09Xz92b2lkIDA6dH1mdW5jdGlvbiBvKGUpe3N3aXRjaChlKXtjYXNlImZpbGVuYW1lV2l0aG91dExvYWRlcnMiOnJldHVybiB1O2Nhc2UiZmlsZW5hbWVIYXNTY2hlbWEiOnJldHVybiBjfX1mdW5jdGlvbiBzKGUsdCl7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpsKGUpKSlyZXR1cm4gZFtlXT12b2lkIDA9PT10P186dCxmdW5jdGlvbigpe2koZSl9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7ZFt0XT1lW3RdfSl9ZnVuY3Rpb24gaShlKXtkZWxldGUgZFtlXX1mdW5jdGlvbiBhKGUpe2Z1bmN0aW9uIHQoKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1yW2VdfSl9dmFyIG49T2JqZWN0LmtleXMoZSkscj17fTtyZXR1cm4gZnVuY3Rpb24obyl7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZFt0XSxkW3RdPWVbdF19KTt2YXIgcz1vKCk7cmV0dXJuIHMmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLnRoZW4/cy50aGVuKHQpLmNhdGNoKHQpOnQoKSxzfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHU9dC5maWxlbmFtZVdpdGhvdXRMb2FkZXJzPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLHQ9ZS5sYXN0SW5kZXhPZigiISIpO3JldHVybiB0PDA/ZTplLnN1YnN0cih0KzEpfSxjPSh0LmZpbGVuYW1lSGFzTG9hZGVycz1mdW5jdGlvbihlKXtyZXR1cm4gcigiZmlsZW5hbWVXaXRob3V0TG9hZGVycyIpKGUpIT09ZX0sdC5maWxlbmFtZUhhc1NjaGVtYT1mdW5jdGlvbihlKXtyZXR1cm4vXltcd10rXDovLnRlc3QoZSl9KSxkPSh0LmlzRmlsZW5hbWVBYnNvbHV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gMD09PXIoImZpbGVuYW1lV2l0aG91dExvYWRlcnMiKShlKS5pbmRleE9mKCIvIil9LHQubWFrZVVybD1mdW5jdGlvbihlLHQsbixvKXt2YXIgcz1yKCJmaWxlbmFtZVdpdGhvdXRMb2FkZXJzIikoZSk7aWYocigiZmlsZW5hbWVIYXNTY2hlbWEiKShlKSlyZXR1cm4gczt2YXIgaT0iZmlsZTovLyIrcztyZXR1cm4idnNjb2RlIj09PXQ/KGk9dCsiOi8vZmlsZS8iK2ksaT1pLnJlcGxhY2UoL2ZpbGU6XC9cL1wvLywiIiksbiYmcz09PWUmJihpPWkrIjoiK24sbyYmKGk9aSsiOiIrbykpKTp0JiYoaT10KyI6Ly9vcGVuP3VybD0iK2ksbiYmcz09PWUmJihpPWkrIiZsaW5lPSIrbixvJiYoaT1pKyImY29sdW1uPSIrbykpKSxpfSx0Lm1ha2VMaW5rVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIG89cigiZmlsZW5hbWVXaXRob3V0TG9hZGVycyIpKGUpO3JldHVybiB0JiZvPT09ZSYmKG89bysiOiIrdCxuJiYobz1vKyI6IituKSksb30sT2JqZWN0LmNyZWF0ZShudWxsKSksXz0iX19JTlRFTlRJT05BTF9VTkRFRklORURfXyIscD17fTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWUoIl9fZ2V0X18iLHIpLGUoIl9fR2V0RGVwZW5kZW5jeV9fIixyKSxlKCJfX1Jld2lyZV9fIixzKSxlKCJfX3NldF9fIixzKSxlKCJfX3Jlc2V0X18iLGkpLGUoIl9fUmVzZXREZXBlbmRlbmN5X18iLGkpLGUoIl9fd2l0aF9fIixhKX0oKSx0Ll9fZ2V0X189cix0Ll9fR2V0RGVwZW5kZW5jeV9fPXIsdC5fX1Jld2lyZV9fPXMsdC5fX3NldF9fPXMsdC5fX1Jlc2V0RGVwZW5kZW5jeV9fPWksdC5fX1Jld2lyZUFQSV9fPXAsdC5kZWZhdWx0PXB9LCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL3N0eWxlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17cmVkYm94Ontib3hTaXppbmc6ImJvcmRlci1ib3giLGZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLHBvc2l0aW9uOiJmaXhlZCIscGFkZGluZzoxMCx0b3A6IjBweCIsbGVmdDoiMHB4Iixib3R0b206IjBweCIscmlnaHQ6IjBweCIsd2lkdGg6IjEwMCUiLGJhY2tncm91bmQ6InJnYigyMDQsIDAsIDApIixjb2xvcjoid2hpdGUiLHpJbmRleDoyMTQ3NDgzNjQ3LHRleHRBbGlnbjoibGVmdCIsZm9udFNpemU6IjE2cHgiLGxpbmVIZWlnaHQ6MS4yLG92ZXJmbG93OiJhdXRvIn0sbWVzc2FnZTp7Zm9udFdlaWdodDoiYm9sZCJ9LHN0YWNrOntmb250RmFtaWx5OiJtb25vc3BhY2UiLG1hcmdpblRvcDoiMmVtIn0sZnJhbWU6e21hcmdpblRvcDoiMWVtIn0sZmlsZTp7Zm9udFNpemU6IjAuOGVtIixjb2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIn0sbGlua1RvRmlsZTp7dGV4dERlY29yYXRpb246Im5vbmUiLGNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykifX07dC5kZWZhdWx0PXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1kZXZ0b29scy1leHRlbnNpb24vbG9nT25seS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dmFyIGU9YXJndW1lbnRzWzBdfHx7fTtyZXR1cm4gZS5mZWF0dXJlcz17cGF1c2U6ITAsZXhwb3J0OiEwLHRlc3Q6ITB9LGUudHlwZT0icmVkdXgiLHZvaWQgMD09PWUuYXV0b1BhdXNlJiYoZS5hdXRvUGF1c2U9ITApLHZvaWQgMD09PWUubGF0ZW5jeSYmKGUubGF0ZW5jeT01MDApLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHIsbyl7dmFyIGk9dChuLHIsbyksYT1pLmRpc3BhdGNoLGw9d2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18uY29ubmVjdChlKTtsLmluaXQoaS5nZXRTdGF0ZSgpKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgdD1hKGUpO3JldHVybiBsLnNlbmQoZSxpLmdldFN0YXRlKCkpLHR9O3JldHVybiBPYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24oaSx7ZGlzcGF0Y2g6dX0pOnMoaSwiZGlzcGF0Y2giLHUpfX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaShpLmFwcGx5KG51bGwsYXJndW1lbnRzKSxyKGUpKX19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZGV2dG9vbHMtZXh0ZW5zaW9uL3V0aWxzL2Fzc2lnbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKS5jb21wb3NlO3QuX19lc01vZHVsZT0hMCx0LmNvbXBvc2VXaXRoRGV2VG9vbHM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18pcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3IoKToib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1swXT9vKGFyZ3VtZW50c1swXSk6bygpLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZigwIT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1swXT9pOmkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0LmRldlRvb2xzRW5oYW5jZXI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fP3I6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGV9fX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWRldnRvb2xzLWV4dGVuc2lvbi9sb2dPbmx5SW5Qcm9kdWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPShuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLmNvbXBvc2UsbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZGV2dG9vbHMtZXh0ZW5zaW9uL2xvZ09ubHkuanMiKSk7dC5fX2VzTW9kdWxlPSEwLHQuY29tcG9zZVdpdGhEZXZUb29scz1yLmNvbXBvc2VXaXRoRGV2VG9vbHMsdC5kZXZUb29sc0VuaGFuY2VyPXIuZGV2VG9vbHNFbmhhbmNlcn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWRldnRvb2xzLWV4dGVuc2lvbi91dGlscy9hc3NpZ24uanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7Zm9yKHZhciBvPXIoZSkscz17fSxpPTAsYT1vLmxlbmd0aDtpPGE7aSsrKXt2YXIgbD1vW2ldO3NbbF09ZVtsXX1yZXR1cm4gc1t0XT1uLHN9dmFyIHI9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9O2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9MaW5rLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5MaW5rPXZvaWQgMDt2YXIgcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvdG9VcmwuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2hhbmRsZVByZXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9wcmV2ZW50RGVmYXVsdC5qcyIpLGc9cihoKSxiPShuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1N0b3JlfHxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFueSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX0Nvbm5lY3Rvcnx8bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnksbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC90b1VybC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1RvfHxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFueSksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2hhbmRsZVByZXNzLmpzIikuYmFiZWxQbHVnaW5GbG93UmVhY3RQcm9wVHlwZXNfcHJvcHR5cGVfT25DbGlja3x8bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnkseT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RvcmUscj1lLnRvLGk9ZS5ocmVmLGw9ZS5yZWRpcmVjdCx1PWUucmVwbGFjZSxjPWUudGFnTmFtZSxfPXZvaWQgMD09PWM/ImEiOmMsZj1lLmNoaWxkcmVuLGg9ZS5vblByZXNzLGI9ZS5vbkNsaWNrLEU9ZS5kb3duLHk9dm9pZCAwIT09RSYmRSx2PWUuc2hvdWxkRGlzcGF0Y2gsVD12b2lkIDA9PT12fHx2LEE9ZS50YXJnZXQsQz1lLmRpc3BhdGNoLE89byhlLFsidG8iLCJocmVmIiwicmVkaXJlY3QiLCJyZXBsYWNlIiwidGFnTmFtZSIsImNoaWxkcmVuIiwib25QcmVzcyIsIm9uQ2xpY2siLCJkb3duIiwic2hvdWxkRGlzcGF0Y2giLCJ0YXJnZXQiLCJkaXNwYXRjaCJdKTtyPWl8fHI7dmFyIFM9KDAsZC5zZWxlY3RMb2NhdGlvblN0YXRlKShuLmdldFN0YXRlKCkpLFI9Uy5yb3V0ZXNNYXAsaj0oMCxwLmRlZmF1bHQpKHIsUikseD1tLmRlZmF1bHQuYmluZChudWxsLGosUixofHxiLFQsQSxDLHIsdXx8bCksTD1fLEQ9e307cmV0dXJuImEiPT09XyYmaiYmKEQuaHJlZj1qKSx5JiZ4JiYoRC5vbk1vdXNlRG93bj14LEQub25Ub3VjaFN0YXJ0PXgpLEEmJihELnRhcmdldD1BKSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLHMoe29uQ2xpY2s6IXkmJnh8fGcuZGVmYXVsdH0sRCxPKSxmKX07eS5wcm9wVHlwZXM9e2Rpc3BhdGNoOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuZnVuYy5pc1JlcXVpcmVkLHRvOiJmdW5jdGlvbiI9PXR5cGVvZiBiP2IuaXNSZXF1aXJlZD9iLmlzUmVxdWlyZWQ6YjpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnNoYXBlKGIpLmlzUmVxdWlyZWQsaHJlZjoiZnVuY3Rpb24iPT10eXBlb2YgYj9iOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuc2hhcGUoYikscmVkaXJlY3Q6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLHJlcGxhY2U6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLHRhZ05hbWU6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5zdHJpbmcsY2hpbGRyZW46bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnksb25QcmVzczoiZnVuY3Rpb24iPT10eXBlb2YgRT9FOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuc2hhcGUoRSksb25DbGljazoiZnVuY3Rpb24iPT10eXBlb2YgRT9FOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuc2hhcGUoRSksZG93bjpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmJvb2wsc2hvdWxkRGlzcGF0Y2g6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLHRhcmdldDpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnN0cmluZ30sdC5MaW5rPXkseS5jb250ZXh0VHlwZXM9e3N0b3JlOnUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH07dmFyIHY9KDAsYy5jb25uZWN0KSgpO3QuZGVmYXVsdD12KHkpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9OYXZMaW5rLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3J1ZHktbWF0Y2gtcGF0aC9kaXN0L2luZGV4LmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvTGluay5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC90b1VybC5qcyIpLGg9cihtKSxnPShuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1N0b3JlfHxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFueSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX0Nvbm5lY3Rvcnx8bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnksbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC90b1VybC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1RvfHxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFueSksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2hhbmRsZVByZXNzLmpzIikuYmFiZWxQbHVnaW5GbG93UmVhY3RQcm9wVHlwZXNfcHJvcHR5cGVfT25DbGlja3x8bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnksRT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RvcmUscj1lLnRvLGk9ZS5ocmVmLGw9ZS5wYXRobmFtZSx1PWUuY2xhc3NOYW1lLGM9ZS5zdHlsZSxkPWUuYWN0aXZlQ2xhc3NOYW1lLG09dm9pZCAwPT09ZD8iYWN0aXZlIjpkLGc9ZS5hY3RpdmVTdHlsZSxiPWUuYXJpYUN1cnJlbnQsRT12b2lkIDA9PT1iPyJ0cnVlIjpiLHk9ZS5leGFjdCx2PWUuc3RyaWN0LFQ9ZS5pc0FjdGl2ZSxBPW8oZSxbInRvIiwiaHJlZiIsInBhdGhuYW1lIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJhY3RpdmVDbGFzc05hbWUiLCJhY3RpdmVTdHlsZSIsImFyaWFDdXJyZW50IiwiZXhhY3QiLCJzdHJpY3QiLCJpc0FjdGl2ZSJdKTtyPWl8fHI7dmFyIEM9KDAscC5zZWxlY3RMb2NhdGlvblN0YXRlKShuLmdldFN0YXRlKCkpLE89KDAsaC5kZWZhdWx0KShyLEMucm91dGVzTWFwKS5zcGxpdCgiPyIpWzBdLFM9KDAsXy5kZWZhdWx0KShsLHtwYXRoOk8sZXhhY3Q6eSxzdHJpY3Q6dn0pLFI9ISEoVD9UKFMsQyk6Uyksaj1SP1t1LG1dLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmpvaW4oIiAiKTp1LHg9Uj9zKHt9LGMsZyk6YztyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZi5MaW5rLHMoe3RvOnIsY2xhc3NOYW1lOmosc3R5bGU6eCwiYXJpYS1jdXJyZW50IjpSJiZFfSxBKSl9O0UucHJvcFR5cGVzPXtkaXNwYXRjaDpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmZ1bmMuaXNSZXF1aXJlZCxwYXRobmFtZTpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnN0cmluZy5pc1JlcXVpcmVkLHRvOiJmdW5jdGlvbiI9PXR5cGVvZiBnP2cuaXNSZXF1aXJlZD9nLmlzUmVxdWlyZWQ6ZzpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnNoYXBlKGcpLmlzUmVxdWlyZWQsaHJlZjoiZnVuY3Rpb24iPT10eXBlb2YgZz9nOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuc2hhcGUoZykscmVkaXJlY3Q6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLHJlcGxhY2U6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLGNoaWxkcmVuOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuYW55LG9uUHJlc3M6ImZ1bmN0aW9uIj09dHlwZW9mIGI/YjpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnNoYXBlKGIpLG9uQ2xpY2s6ImZ1bmN0aW9uIj09dHlwZW9mIGI/YjpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnNoYXBlKGIpLGRvd246bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5ib29sLHNob3VsZERpc3BhdGNoOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuYm9vbCx0YXJnZXQ6bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5zdHJpbmcsY2xhc3NOYW1lOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuc3RyaW5nLHN0eWxlOm4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikub2JqZWN0LGFjdGl2ZUNsYXNzTmFtZTpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnN0cmluZyxhY3RpdmVTdHlsZTpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLm9iamVjdCxhcmlhQ3VycmVudDpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnN0cmluZyxleGFjdDpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmJvb2wsc3RyaWN0Om4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuYm9vbCxpc0FjdGl2ZTpuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmZ1bmN9LEUuY29udGV4dFR5cGVzPXtzdG9yZTp1LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9O3ZhciB5PWZ1bmN0aW9uKGUpe3JldHVybntwYXRobmFtZTooMCxwLnNlbGVjdExvY2F0aW9uU3RhdGUpKGUpLnBhdGhuYW1lfX0sdj0oMCxjLmNvbm5lY3QpKHkpO3QuZGVmYXVsdD12KEUpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9oYW5kbGVQcmVzcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxzPShuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1JvdXRlc01hcHx8bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5hbnksbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC90b1VybC5qcyIpLmJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX1RvfHxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFueSxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLm9uZU9mVHlwZShbbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5vbmVPZihbITFdKSxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmZ1bmNdKSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJhYmVsUGx1Z2luRmxvd1JlYWN0UHJvcFR5cGVzX3Byb3B0eXBlX09uQ2xpY2siLHt2YWx1ZTpzLGNvbmZpZ3VyYWJsZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbixyLHMsbCx1LGMsZCl7dmFyIF89ITA7biYmKF89bihkKSxfPXZvaWQgMD09PV98fF8pO3ZhciBwPWQuZGVmYXVsdFByZXZlbnRlZDtpZighcyYmZCYmZC5wcmV2ZW50RGVmYXVsdCYmIWEoZCkmJmQucHJldmVudERlZmF1bHQoKSxfJiZyJiYhcyYmIXAmJjA9PT1kLmJ1dHRvbiYmIWEoZCkpe3ZhciBmPSgwLG8uZ2V0T3B0aW9ucykoKSxtPWYucXVlcnlTZXJpYWxpemVyLGg9aSh1KT91OigwLG8ucGF0aFRvQWN0aW9uKShlLHQsbSk7aD1jPygwLG8ucmVkaXJlY3QpKGgpOmgsbChoKX19O3ZhciBpPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6cihlKSkmJiFBcnJheS5pc0FycmF5KGUpfSxhPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUubWV0YUtleXx8ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5zaGlmdEtleSl9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYXZMaW5rPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L05hdkxpbmsuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTmF2TGluayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIobykuZGVmYXVsdH19KTt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L0xpbmsuanMiKSxpPXIocyk7dC5kZWZhdWx0PWkuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvcHJldmVudERlZmF1bHQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvdG9VcmwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIikscz0obigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKS5iYWJlbFBsdWdpbkZsb3dSZWFjdFByb3BUeXBlc19wcm9wdHlwZV9Sb3V0ZXNNYXB8fG4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikuYW55LG4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikub25lT2ZUeXBlKFtuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLnN0cmluZyxuKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLmFycmF5T2YobigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKS5zdHJpbmcpLG4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikub2JqZWN0XSkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJiYWJlbFBsdWdpbkZsb3dSZWFjdFByb3BUeXBlc19wcm9wdHlwZV9UbyIse3ZhbHVlOnMsY29uZmlndXJhYmxlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoZSYmInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIi8iK2Uuam9pbigiLyIpO2lmKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6cihlKSkpe3ZhciBuPWU7dHJ5e3ZhciBzPSgwLG8uZ2V0T3B0aW9ucykoKSxpPXMucXVlcnlTZXJpYWxpemVyO3JldHVybigwLG8uYWN0aW9uVG9QYXRoKShuLHQsaSl9Y2F0Y2goZSl7cmV0dXJuIiMifX1yZXR1cm4iIyJ9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG89ZnVuY3Rpb24oKXt9O28udGhhdFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJuc1RydWU9cighMCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIscyxpLGEsbCl7aWYobyh0KSwhZSl7dmFyIHU7aWYodm9pZCAwPT09dCl1PW5ldyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBjPVtuLHIscyxpLGEsbF0sZD0wO3U9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBjW2QrK119KSksdS5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyB1LmZyYW1lc1RvUG9wPTEsdX19dmFyIG89ZnVuY3Rpb24oZSl7fTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGksYSl7YSE9PXMmJm8oITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKX1mdW5jdGlvbiB0KCl7cmV0dXJuIGV9ZS5pc1JlcXVpcmVkPWU7dmFyIG49e2FycmF5OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnQsZWxlbWVudDplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnR9O3JldHVybiBuLmNoZWNrUHJvcFR5cGVzPXIsbi5Qcm9wVHlwZXM9bixufX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIpKCl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9hY3Rpb24tY3JlYXRvcnMvaGlzdG9yeUNyZWF0ZUFjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9wYXRoVG9BY3Rpb24uanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL25lc3RBY3Rpb24uanMiKSxhPXIoaSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuLHIsbyxpLHUsYyl7dmFyIGQ9KDAscy5kZWZhdWx0KShlLHQsaSk7cmV0dXJuIG89bCghIXIuZW50cmllcyxyLG8sdSxjKSwoMCxhLmRlZmF1bHQpKGUsZCxuLHIsbyl9O3ZhciBsPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGUmJnImJiJwb3AiPT09bj91KHQscik/ImJhY2siOmModCxyLG8pPyJuZXh0IjpuOm59LHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmVudHJpZXNbZS5pbmRleCsxXTtyZXR1cm4gbiYmbi5wYXRobmFtZT09PXR9LGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZW50cmllc1tlLmluZGV4LTFdLG89bj09PWUubGVuZ3RoO3JldHVybiByJiZyLnBhdGhuYW1lPT09dCYmb319LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9hY3Rpb24tY3JlYXRvcnMvbWlkZGxld2FyZUNyZWF0ZUFjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2FjdGlvblRvUGF0aC5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvbmVzdEFjdGlvbi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuLHIscyxhKXt0cnl7dmFyIGQ9KDAsaS5kZWZhdWx0KShlLHQsYSksXz1jKCEhci5lbnRyaWVzLGQscixlKTtyZXR1cm4oMCxsLmRlZmF1bHQpKGQsZSxuLHIsXyl9Y2F0Y2godCl7dmFyIHA9byh7fSxlLnBheWxvYWQpO3JldHVybigwLGwuZGVmYXVsdCkoc3x8bi5wYXRobmFtZXx8Ii8iLG8oe30sZSx7dHlwZTp1Lk5PVF9GT1VORCxwYXlsb2FkOnB9KSxuLHIpfX07dmFyIGM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ci5tZXRhJiZyLm1ldGEubG9jYXRpb24mJnIubWV0YS5sb2NhdGlvbi5raW5kO3JldHVybiBvfHwoZT9kKG4sdCk/KG4uaW5kZXgtLSwiYmFjayIpOl8obix0KT8obi5pbmRleCsrLCJuZXh0Iik6InB1c2giOiJwdXNoIil9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmVudHJpZXNbZS5pbmRleC0xXTtyZXR1cm4gbiYmbi5wYXRobmFtZT09PXR9LF89ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmVudHJpZXNbZS5pbmRleCsxXTtyZXR1cm4gbiYmbi5wYXRobmFtZT09PXR9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvYWN0aW9uLWNyZWF0b3JzL21pZGRsZXdhcmVDcmVhdGVOb3RGb3VuZEFjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9uZXN0QWN0aW9uLmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT1lLnBheWxvYWQsbD1lLm1ldGEsdT10LnBhdGhuYW1lLGM9bCYmbC5sb2NhdGlvbiYmbC5sb2NhdGlvbi5raW5kfHwibG9hZCI9PT10LmtpbmQmJiJsb2FkInx8InB1c2giLGQ9bCYmbC5ub3RGb3VuZFBhdGh8fCJyZWRpcmVjdCI9PT1jJiZpfHx1fHwiLyI7cmV0dXJuKDAsby5kZWZhdWx0KShkLHt0eXBlOnMuTk9UX0ZPVU5ELHBheWxvYWQ6YX0sbixyLGMpfX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2FjdGlvbi1jcmVhdG9ycy9yZWRpcmVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9zZXRLaW5kLmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9KDAsby5kZWZhdWx0KShlLCJyZWRpcmVjdCIpLHQmJihlLnR5cGU9dCksbiYmKGUucGF5bG9hZD1uKSxlfX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2Nvbm5lY3RSb3V0ZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0T3B0aW9ucz10LnNlbGVjdExvY2F0aW9uU3RhdGU9dC51cGRhdGVTY3JvbGw9dC5zY3JvbGxCZWhhdmlvcj10Lmhpc3Rvcnk9dC5uZXh0UGF0aD10LnByZXZQYXRoPXQuY2FuR29Gb3J3YXJkPXQuY2FuR29CYWNrPXQuY2FuR289dC5nbz10Lm5leHQ9dC5iYWNrPXQucmVwbGFjZT10LnB1c2g9dm9pZCAwO3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvcGF0aFRvQWN0aW9uLmpzIiksaT1yKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9uZXN0QWN0aW9uLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2lzTG9jYXRpb25BY3Rpb24uanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2lzU2VydmVyLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9pc1JlYWN0TmF0aXZlLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9jaGFuZ2VQYWdlVGl0bGUuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2F0dGVtcHRDYWxsUm91dGVUaHVuay5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvY3JlYXRlVGh1bmsuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL3BhdGhuYW1lUGx1c1NlYXJjaC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvY29uZmlybUxlYXZlLmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9hY3Rpb24tY3JlYXRvcnMvaGlzdG9yeUNyZWF0ZUFjdGlvbi5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2FjdGlvbi1jcmVhdG9ycy9taWRkbGV3YXJlQ3JlYXRlQWN0aW9uLmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvYWN0aW9uLWNyZWF0b3JzL21pZGRsZXdhcmVDcmVhdGVOb3RGb3VuZEFjdGlvbi5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3JlZHVjZXIvY3JlYXRlTG9jYXRpb25SZWR1Y2VyLmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9KDAsdi5kZWZhdWx0KShlLmxvY2F0aW9uKSxzPXtwYXRobmFtZToiIix0eXBlOiIiLHBheWxvYWQ6e319LGw9bi5ub3RGb3VuZFBhdGgsYz12b2lkIDA9PT1sPyIvbm90LWZvdW5kIjpsLF89bi5zY3JvbGxUb3AsaD12b2lkIDAhPT1fJiZfLGI9bi5sb2NhdGlvbix5PW4udGl0bGUsQT1uLm9uQmVmb3JlQ2hhbmdlLE89bi5vbkFmdGVyQ2hhbmdlLFI9bi5vbkJhY2tOZXh0LE49bi5yZXN0b3JlU2Nyb2xsLEg9bi5pbml0aWFsRGlzcGF0Y2gsRj12b2lkIDA9PT1IfHxILEI9bi5xdWVyeVNlcmlhbGl6ZXIsVT1uLmRpc3BsYXlDb25maXJtTGVhdmUsRz1uLmV4dHJhOygwLFQuc2V0RGlzcGxheUNvbmZpcm1MZWF2ZSkoVSk7dmFyIHo9ImZ1bmN0aW9uIj09dHlwZW9mIGI/YjpiP2Z1bmN0aW9uKGUpe3JldHVybiBlW2JdfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdGlvbn0sVj0iZnVuY3Rpb24iPT10eXBlb2YgeT95Onk/ZnVuY3Rpb24oZSl7cmV0dXJuIGVbeV19OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpdGxlfSxXPU4mJk4oZSksWT0oMCxpLmRlZmF1bHQpKHIsdCkscT1ZLnR5cGUsSz1ZLnBheWxvYWQsWD1ZLm1ldGEsJD0oMCx4LmdldEluaXRpYWxTdGF0ZSkocixYLHEsSyx0LGUpLFE9JCxKPXt9LFo9MSxlZT0oMCxMLmRlZmF1bHQpKCQsdCksdGU9e2FjdGlvbjpZLGV4dHJhOkd9LG5lPSgwLEUuZGVmYXVsdCkodCx6LHRlKSxyZT1mdW5jdGlvbigpe3JldHVybiBoZSYmaGUoKX0sb2U9KDAsZi5nZXREb2N1bWVudCkoKSxzZT12b2lkIDAsaWU9dm9pZCAwLGFlPXZvaWQgMCxsZT12b2lkIDAsdWU9dm9pZCAwO24ubmF2aWdhdG9ycyYmKHNlPW4ubmF2aWdhdG9ycy5uYXZpZ2F0b3JzLGllPW4ubmF2aWdhdG9ycy5wYXRjaE5hdmlnYXRvcnMsYWU9bi5uYXZpZ2F0b3JzLmFjdGlvblRvTmF2aWdhdGlvbixsZT1uLm5hdmlnYXRvcnMubmF2aWdhdGlvblRvQWN0aW9uLGllKHNlKSk7dmFyIGNlPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYoaS5lcnJvcilyZXR1cm4gcihpKTt2YXIgYT12b2lkIDA7aWYoc2UmJjA9PT1pLnR5cGUuaW5kZXhPZigiTmF2aWdhdGlvbi8iKSl7dmFyIGw9bGUoc2Usbix0LGkpO2E9bC5uYXZpZ2F0aW9uQWN0aW9uLGk9bC5hY3Rpb259dmFyIGQ9dFtpLnR5cGVdO2lmKCJvYmplY3QiPT09KHZvaWQgMD09PWQ/InVuZGVmaW5lZCI6byhkKSkmJiFkLnBhdGgpe3ZhciBfPXIoaSk7cmV0dXJuKDAsZy5kZWZhdWx0KShuLmRpc3BhdGNoLG4uZ2V0U3RhdGUsZCx6LHthY3Rpb246XyxleHRyYTpHfSksX31pLnR5cGUhPT1ELk5PVF9GT1VORHx8KDAsdS5kZWZhdWx0KShpKT9kJiYhKDAsdS5kZWZhdWx0KShpKSYmKGk9KDAsUy5kZWZhdWx0KShpLHQscyxlLGMsQikpOmk9KDAsai5kZWZhdWx0KShpLG4uZ2V0U3RhdGUoKS5sb2NhdGlvbixzLGUsYyksc2UmJihpPWFlKHNlLGksYSxkKSk7dmFyIHA9dm9pZCAwO2lmKChkfHxpLnR5cGU9PT1ELk5PVF9GT1VORCkmJmkubWV0YSYmKHA9ZGUobixlLGkpKSwhcCl7dmFyIGY9cihpKTtyZXR1cm4oZHx8aS50eXBlPT09RC5OT1RfRk9VTkQpJiZfZShuLGQsZiksZn19fX0sZGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4ubWV0YS5sb2NhdGlvbjtpZihnZSl7dmFyIGk9Z2Uoby5jdXJyZW50KTtpZihpKXJldHVybigwLFQuY29uZmlybVVJKShpLGUsbiksITA7Z2U9bnVsbH1pZihBKXt2YXIgbD12b2lkIDAsdT1mdW5jdGlvbih0KXtpZih0JiZ0Lm1ldGEmJnQubWV0YS5sb2NhdGlvbiYmInJlZGlyZWN0Ij09PXQubWV0YS5sb2NhdGlvbi5raW5kKXtsPSEwLHM9by5jdXJyZW50OygwLHYuZGVmYXVsdCkoby5jdXJyZW50KT09PXJ8fCgwLGQuZGVmYXVsdCkoKXx8KHVlPSJvbkJlZm9yZUNoYW5nZSIpfWUuZGlzcGF0Y2godCl9LGM9e2FjdGlvbjpuLGV4dHJhOkd9O2lmKEEodSxlLmdldFN0YXRlLGMpLGwpcmV0dXJuITB9UT16KGUuZ2V0U3RhdGUoKSkscz1vLmN1cnJlbnQsWj10Lmxlbmd0aCxwZShvLHQpLCgwLHAuZGVmYXVsdCkoKSYmKG8uaGlzdG9yeT0oMCxhLm5lc3RIaXN0b3J5KSh0KSl9LF9lPWZ1bmN0aW9uKHQsbixyKXt2YXIgcz10LmRpc3BhdGNoLGk9dC5nZXRTdGF0ZSgpLGE9eihpKS5raW5kLGw9VihpKSx1PXthY3Rpb246cixleHRyYTpHfTtKPXooaSksIm9iamVjdCI9PT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjpvKG4pKSYmKDAsZy5kZWZhdWx0KShzLHQuZ2V0U3RhdGUsbix6LHUpLE8mJk8ocyx0LmdldFN0YXRlLHUpLCgwLGQuZGVmYXVsdCkoKXx8KGEmJigiZnVuY3Rpb24iPT10eXBlb2YgUiYmL2JhY2t8bmV4dHxwb3AvLnRlc3QoYSkmJlIocyx0LmdldFN0YXRlLHUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZigoMCxtLmRlZmF1bHQpKG9lLGwpLGgpcmV0dXJuIHdpbmRvdy5zY3JvbGxUbygwLDApO2soITEpfSkpLCJvYmplY3QiPT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6byhuKSkmJm4uY29uZmlybUxlYXZlJiYoZ2U9KDAsVC5jcmVhdGVDb25maXJtKShuLmNvbmZpcm1MZWF2ZSx0LHosZSxCLGZ1bmN0aW9uKCl7cmV0dXJuIGdlPW51bGx9KSkpfSxwZT1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLHYuZGVmYXVsdCkoZS5jdXJyZW50KTtpZihuIT09cil7cj1uO3ZhciBvPWUua2luZDtpZighKG8mJi9iYWNrfG5leHR8cG9wfHN0ZWFsdGgvLnRlc3QobykpKXt0WyJyZWRpcmVjdCI9PT1vJiYib25CZWZvcmVDaGFuZ2UiIT09dWU/InJlcGxhY2UiOiJwdXNoIl0ocil9fX0sZmU9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGksYSxsKXshKDAsZC5kZWZhdWx0KSgpJiZhJiZ6KGEpJiYoeihhKS5yb3V0ZXNNYXA9dCk7dmFyIHU9bihpLGEsbCksYz11LmdldFN0YXRlKCksXz1jJiZ6KGMpO2lmKCFffHwhXy5wYXRobmFtZSl0aHJvdyBuZXcgRXJyb3IoIltyZWR1eC1maXJzdC1yb3V0ZXJdIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGtleSBvZiB0aGUgbG9jYXRpb25cbiAgICAgICAgcmVkdWNlciBzdGF0ZSBhbmQgcHJvcGVybHkgYXNzaWduZWQgdGhlIGxvY2F0aW9uIHJlZHVjZXIgdG8gdGhhdCBrZXkuIik7aWYoZS5saXN0ZW4obWUuYmluZChudWxsLHUpKSwhXy5oYXNTU1J8fCgwLGQuZGVmYXVsdCkoKSloZT1mdW5jdGlvbigpe3ZhciBuPSgwLEMuZGVmYXVsdCkocix0LHMsZSwibG9hZCIsQik7dS5kaXNwYXRjaChuKX0sITEhPT1GJiZoZSgpO2Vsc2V7cz1fO3ZhciBwPXRbXy50eXBlXTsib2JqZWN0Ij09PSh2b2lkIDA9PT1wPyJ1bmRlZmluZWQiOm8ocCkpJiZwLmNvbmZpcm1MZWF2ZSYmKGdlPSgwLFQuY3JlYXRlQ29uZmlybSkocC5jb25maXJtTGVhdmUsdSx6LGUsQixmdW5jdGlvbigpe3JldHVybiBnZT1udWxsfSkpfXJldHVybigwLGQuZGVmYXVsdCkoKXx8c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBrKCExKX0pLHV9fSxtZT1mdW5jdGlvbihuLG8saSl7dmFyIGE9KDAsdi5kZWZhdWx0KShvKTtpZihhIT09cil7dmFyIGw9IlJFUExBQ0UiPT09aT8icmVkaXJlY3QiOmksdT0oMCxDLmRlZmF1bHQpKGEsdCxzLGUsbC50b0xvd2VyQ2FzZSgpLEIscixaKTtyPWEsbi5kaXNwYXRjaCh1KX19O3c9ZSxNPVcsST16LFA9bjt2YXIgaGU9dm9pZCAwLGdlPXZvaWQgMDtyZXR1cm4gaz1mdW5jdGlvbigpeyEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07VyYmKFcubWFudWFsfHxXLnVwZGF0ZVNjcm9sbChRLEopKX0se3JlZHVjZXI6ZWUsbWlkZGxld2FyZTpjZSxlbmhhbmNlcjpmZSx0aHVuazpuZSxpbml0aWFsRGlzcGF0Y2g6cmUsX21pZGRsZXdhcmVBdHRlbXB0Q2hhbmdlVXJsOnBlLF9hZnRlclJvdXRlQ2hhbmdlOl9lLF9oaXN0b3J5QXR0ZW1wdERpc3BhdGNoQWN0aW9uOm1lLHdpbmRvd0RvY3VtZW50Om9lLGhpc3Rvcnk6ZX19O3ZhciB3PXZvaWQgMCxNPXZvaWQgMCxrPXZvaWQgMCxJPXZvaWQgMCxQPXZvaWQgMDt0LnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHcucHVzaChlKX0sdC5yZXBsYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB3LnJlcGxhY2UoZSl9LHQuYmFjaz1mdW5jdGlvbigpe3JldHVybiB3LmdvQmFjaygpfSx0Lm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdy5nb0ZvcndhcmQoKX0sdC5nbz1mdW5jdGlvbihlKXtyZXR1cm4gdy5nbyhlKX0sdC5jYW5Hbz1mdW5jdGlvbihlKXtyZXR1cm4gdy5jYW5HbyhlKX0sdC5jYW5Hb0JhY2s9ZnVuY3Rpb24oKXtyZXR1cm4hIXcuZW50cmllc1t3LmluZGV4LTFdfSx0LmNhbkdvRm9yd2FyZD1mdW5jdGlvbigpe3JldHVybiEhdy5lbnRyaWVzW3cuaW5kZXgrMV19LHQucHJldlBhdGg9ZnVuY3Rpb24oKXt2YXIgZT13LmVudHJpZXNbdy5pbmRleC0xXTtyZXR1cm4gZSYmZS5wYXRobmFtZX0sdC5uZXh0UGF0aD1mdW5jdGlvbigpe3ZhciBlPXcuZW50cmllc1t3LmluZGV4KzFdO3JldHVybiBlJiZlLnBhdGhuYW1lfSx0Lmhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd30sdC5zY3JvbGxCZWhhdmlvcj1mdW5jdGlvbigpe3JldHVybiBNfSx0LnVwZGF0ZVNjcm9sbD1mdW5jdGlvbigpe3JldHVybiBrJiZrKCl9LHQuc2VsZWN0TG9jYXRpb25TdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gSShlKX0sdC5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIFB9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2Nvbm5lY3RSb3V0ZXMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY29ubmVjdFJvdXRlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIobykuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHVzaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucHVzaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVwbGFjZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVwbGFjZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYmFjayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYmFja319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibmV4dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubmV4dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ28iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmdvfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5HbyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FuR299fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhbkdvQmFjayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FuR29CYWNrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5Hb0ZvcndhcmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmNhbkdvRm9yd2FyZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJldlBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnByZXZQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJuZXh0UGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubmV4dFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImhpc3RvcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmhpc3Rvcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNjcm9sbEJlaGF2aW9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zY3JvbGxCZWhhdmlvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlU2Nyb2xsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby51cGRhdGVTY3JvbGx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNlbGVjdExvY2F0aW9uU3RhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnNlbGVjdExvY2F0aW9uU3RhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldE9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmdldE9wdGlvbnN9fSk7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvYWN0aW9uLWNyZWF0b3JzL3JlZGlyZWN0LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZGlyZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcihzKS5kZWZhdWx0fX0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvYWN0aW9uVG9QYXRoLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGlvblRvUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIoaSkuZGVmYXVsdH19KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL3BhdGhUb0FjdGlvbi5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXRoVG9BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKGEpLmRlZmF1bHR9fSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9pc0xvY2F0aW9uQWN0aW9uLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzTG9jYXRpb25BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKGwpLmRlZmF1bHR9fSk7dmFyIHU9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9zZXRLaW5kLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldEtpbmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKHUpLmRlZmF1bHR9fSk7dC5OT1RfRk9VTkQ9IkBAcmVkdXgtZmlyc3Qtcm91dGVyL05PVF9GT1VORCJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2FjdGlvblRvUGF0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89bigiLi9ub2RlX21vZHVsZXMvcnVkeS1tYXRjaC1wYXRoL2Rpc3QvaW5kZXguanMiKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRbZS50eXBlXSxhPSJvYmplY3QiPT09KHZvaWQgMD09PWk/InVuZGVmaW5lZCI6cihpKSk/aS5wYXRoOmksbD0ib2JqZWN0Ij09PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOnIoaSkpP3MoaSxlLnBheWxvYWQpOmUucGF5bG9hZCx1PSgwLG8uY29tcGlsZVBhcmFtc1RvUGF0aCkoYSxsKXx8Ii8iLGM9ZS5xdWVyeXx8ZS5tZXRhJiZlLm1ldGEucXVlcnl8fGUucGF5bG9hZCYmZS5wYXlsb2FkLnF1ZXJ5LGQ9YyYmbiYmbi5zdHJpbmdpZnkoYyk7cmV0dXJuIGQ/dSsiPyIrZDp1fTt2YXIgcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihuLHIpe3ZhciBvPXRbcl07cmV0dXJuIG5bcl09aShvLGUsciksbn0se30pfSxpPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZS5pbmRleE9mKCIvIik+LTE/ZS5zcGxpdCgiLyIpOiEwPT09dC5jYXBpdGFsaXplZFdvcmRzP2UucmVwbGFjZSgvIC9nLCItIikudG9Mb3dlckNhc2UoKToiZnVuY3Rpb24iPT10eXBlb2YgdC50b1BhdGg/dC50b1BhdGgoZSxuKTplOiJudW1iZXIiPT10eXBlb2YgZT9lOnZvaWQgMH19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2F0dGVtcHRDYWxsUm91dGVUaHVuay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvY29ubmVjdFJvdXRlcy5qcyIpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQsbixvLHMpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXt2YXIgaT1uLnRodW5rO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXt2YXIgYT1vKHQoKSksbD1hLmtpbmQsdT1hLmhhc1NTUjtpZigibG9hZCIhPT1sfHwibG9hZCI9PT1sJiYhdSl7dmFyIGM9aShlLHQscyk7YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmV4dCYmYy5uZXh0KHIudXBkYXRlU2Nyb2xsKX19fX19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2NoYW5nZVBhZ2VUaXRsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZlLnRpdGxlIT09dD9lLnRpdGxlPXQ6bnVsbH07dC5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6e319fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9jb25maXJtTGVhdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2V0RGlzcGxheUNvbmZpcm1MZWF2ZT10LmNvbmZpcm1VST10LmNyZWF0ZUNvbmZpcm09dm9pZCAwO3ZhciByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9wYXRoVG9BY3Rpb24uanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT12b2lkIDAsYT12b2lkIDAsbD12b2lkIDAsdT1mdW5jdGlvbigpe2kmJmkoKSxhJiZhKCl9LGM9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5jb25maXJtKXRocm93IG5ldyBFcnJvcigiW3J1ZHldIGVudmlyb25tZW50IHJlcXVpcmVzIGBkaXNwbGF5Q29uZmlybUxlYXZlYCBvcHRpb24iKTt0KHdpbmRvdy5jb25maXJtKGUpKX0sZD0odC5jcmVhdGVDb25maXJtPWZ1bmN0aW9uKGUsdCxuLHIsbyxsKXt2YXIgYz1mdW5jdGlvbihyKXt2YXIgaT10LmdldFN0YXRlKCksYT1uKGkpLnJvdXRlc01hcCxsPXIucGF0aG5hbWUsYz0oMCxzLmRlZmF1bHQpKGwsYSxvKSxkPWUoaSxjKTtyZXR1cm4gZHx8dSgpLGR9O3JldHVybiBpPXIuYmxvY2soYyksYT1sLGN9LHQuY29uZmlybVVJPWZ1bmN0aW9uKGUsdCxuKXtsKGUsZnVuY3Rpb24oZSl7ZSYmKHUoKSx0LmRpc3BhdGNoKG4pKX0pfSx0LnNldERpc3BsYXlDb25maXJtTGVhdmU9ZnVuY3Rpb24oZSl7bD1lfHxjfSxuKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2NyZWF0ZUJyb3dzZXJIaXN0b3J5LmpzIikuZGVmYXVsdCk7bigiLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9jcmVhdGVCcm93c2VySGlzdG9yeS5qcyIpLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGQocih7fSxlLHtnZXRVc2VyQ29uZmlybWF0aW9uOmZ1bmN0aW9uKGUsdCl7bChlLGZ1bmN0aW9uKGUpe2UmJnUoKSx0KGUpfSl9fSkpfTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2NyZWF0ZU1lbW9yeUhpc3RvcnkuanMiKS5kZWZhdWx0O24oIi4vbm9kZV9tb2R1bGVzL2hpc3RvcnkvY3JlYXRlTWVtb3J5SGlzdG9yeS5qcyIpLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIF8ocih7fSxlLHtnZXRVc2VyQ29uZmlybWF0aW9uOmZ1bmN0aW9uKGUsdCl7bChlLGZ1bmN0aW9uKGUpe2UmJnUoKSx0KGUpfSl9fSkpfX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvY3JlYXRlVGh1bmsuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPXIuZGlzcGF0Y2gscz1yLmdldFN0YXRlLGk9dChzKCkpLGE9aS50eXBlLGw9ZVthXTtyZXR1cm4gbCYmImZ1bmN0aW9uIj09dHlwZW9mIGwudGh1bms/UHJvbWlzZS5yZXNvbHZlKGwudGh1bmsobyxzLG4pKTpQcm9taXNlLnJlc29sdmUoKX19fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9pc0xvY2F0aW9uQWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZS5tZXRhJiZlLm1ldGEubG9jYXRpb24mJmUubWV0YS5sb2NhdGlvbi5jdXJyZW50KX19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2lzUmVhY3ROYXRpdmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cubmF2aWdhdG9yJiYiUmVhY3ROYXRpdmUiPT09d2luZG93Lm5hdmlnYXRvci5wcm9kdWN0fX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvaXNTZXJ2ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhIXdpbmRvdy5TU1J0ZXN0fX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvbmVzdEFjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuLG8scyl7dmFyIGk9dC50eXBlLGE9dC5wYXlsb2FkLGw9dm9pZCAwPT09YT97fTphLHU9dC5tZXRhLGM9dm9pZCAwPT09dT97fTp1LGQ9dC5xdWVyeXx8Yy5xdWVyeXx8bC5xdWVyeSxfPWUuc3BsaXQoIj8iKSxwPV9bMV07cmV0dXJuIHIoe30sdCx0LnF1ZXJ5JiZ7cXVlcnk6ZH0se3R5cGU6aSxwYXlsb2FkOmwsbWV0YTpyKHt9LGMsYy5xdWVyeSYme3F1ZXJ5OmR9LHtsb2NhdGlvbjp7Y3VycmVudDpyKHtwYXRobmFtZTpfWzBdLHR5cGU6aSxwYXlsb2FkOmx9LGQmJntxdWVyeTpkLHNlYXJjaDpwfSkscHJldjpuLGtpbmQ6cyxoaXN0b3J5OnZvaWQgMH19KX0pfTt0Lm5lc3RIaXN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmVudHJpZXM/e2luZGV4OmUuaW5kZXgsbGVuZ3RoOmUuZW50cmllcy5sZW5ndGgsZW50cmllczplLmVudHJpZXMuc2xpY2UoMCl9OnZvaWQgMH19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL29iamVjdFZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL3BhdGhUb0FjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scz1uKCIuL25vZGVfbW9kdWxlcy9ydWR5LW1hdGNoLXBhdGgvZGlzdC9pbmRleC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L3B1cmUtdXRpbHMvb2JqZWN0VmFsdWVzLmpzIiksbD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGEpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7dmFyIGE9ZS5zcGxpdCgiPyIpLHU9YVsxXSxjPXUmJm4mJm4ucGFyc2UodSksZD0oMCxsLmRlZmF1bHQpKHQpLF89T2JqZWN0LmtleXModCk7ZT1hWzBdO2Zvcih2YXIgcD0wLGY9dm9pZCAwLG09dm9pZCAwOyFmJiZwPGQubGVuZ3RoOyl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBkW3BdP2RbcF06ZFtwXS5wYXRoLGc9KDAscy5jb21waWxlUGF0aCkoaCksYj1nLnJlLEU9Zy5rZXlzO2Y9Yi5leGVjKGUpLG09RSxwKyt9aWYoZil7cC0tO3ZhciB5PSJvYmplY3QiPT09byhkW3BdKSYmZFtwXS5jYXBpdGFsaXplZFdvcmRzLHY9ZFtwXSYmImZ1bmN0aW9uIj09dHlwZW9mIGRbcF0uZnJvbVBhdGgmJmRbcF0uZnJvbVBhdGg7cmV0dXJue3R5cGU6X1twXSxwYXlsb2FkOihtfHxbXSkucmVkdWNlKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mJiZmW24rMV07cmV0dXJuIHI9InN0cmluZyIhPXR5cGVvZiByfHxyLm1hdGNoKC9eXHMqJC8pfHxpc05hTihyKT9yOnBhcnNlRmxvYXQocikscj15JiYic3RyaW5nIj09dHlwZW9mIHI/ci5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9cYlx3L2csZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pOnIscj12JiYic3RyaW5nIj09dHlwZW9mIHI/dihyLHQubmFtZSk6cixlW3QubmFtZV09cixlfSx7fSksbWV0YTpjP3txdWVyeTpjfTp7fX19dmFyIFQ9cih7bm90Rm91bmRQYXRoOmV9LGM/e3F1ZXJ5OmN9Ont9KTtyZXR1cm57dHlwZTppLk5PVF9GT1VORCxwYXlsb2FkOnt9LG1ldGE6VH19fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9wYXRobmFtZVBsdXNTZWFyY2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLnBhdGhuYW1lLG49ZS5zZWFyY2g7cmV0dXJuIG4/KDAhPT1uLmluZGV4T2YoIj8iKSYmKG49Ij8iK24pLCIiK3Qrbik6dH19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL3NldEtpbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1ldGE9ZS5tZXRhfHx7fSxlLm1ldGEubG9jYXRpb249ZS5tZXRhLmxvY2F0aW9ufHx7fSxlLm1ldGEubG9jYXRpb24ua2luZD10LGV9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcmVkdWNlci9jcmVhdGVMb2NhdGlvblJlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0SW5pdGlhbFN0YXRlPXZvaWQgMDt2YXIgcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9wdXJlLXV0aWxzL2lzU2VydmVyLmpzIiksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHMpLGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvcHVyZS11dGlscy9uZXN0QWN0aW9uLmpzIik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmUscz1hcmd1bWVudHNbMV0saT10W3MudHlwZV07aWYocy50eXBlPT09by5OT1RfRk9VTkR8fGkmJiFzLmVycm9yJiYoInN0cmluZyI9PXR5cGVvZiBpfHxpLnBhdGgpJiYocy5tZXRhLmxvY2F0aW9uLmN1cnJlbnQucGF0aG5hbWUhPT1uLnBhdGhuYW1lfHxzLm1ldGEubG9jYXRpb24uY3VycmVudC5zZWFyY2ghPT1uLnNlYXJjaHx8ImxvYWQiPT09cy5tZXRhLmxvY2F0aW9uLmtpbmQpKXt2YXIgYT1zLm1ldGEubG9jYXRpb24uY3VycmVudC5xdWVyeSxsPXMubWV0YS5sb2NhdGlvbi5jdXJyZW50LnNlYXJjaDtyZXR1cm4gcih7cGF0aG5hbWU6cy5tZXRhLmxvY2F0aW9uLmN1cnJlbnQucGF0aG5hbWUsdHlwZTpzLnR5cGUscGF5bG9hZDpyKHt9LHMucGF5bG9hZCl9LGEmJntxdWVyeTphLHNlYXJjaDpsfSx7cHJldjpzLm1ldGEubG9jYXRpb24ucHJldixraW5kOnMubWV0YS5sb2NhdGlvbi5raW5kLGhpc3Rvcnk6cy5tZXRhLmxvY2F0aW9uLmhpc3RvcnksaGFzU1NSOm4uaGFzU1NSLHJvdXRlc01hcDp0fSl9cmV0dXJuIG59fTt0LmdldEluaXRpYWxTdGF0ZT1mdW5jdGlvbihlLHQsbixvLHMsbCl7cmV0dXJuIHIoe3BhdGhuYW1lOmUuc3BsaXQoIj8iKVswXSx0eXBlOm4scGF5bG9hZDpvfSx0LHtwcmV2OntwYXRobmFtZToiIix0eXBlOiIiLHBheWxvYWQ6e319LGtpbmQ6dm9pZCAwLGhpc3Rvcnk6KDAsYS5uZXN0SGlzdG9yeSkobCksaGFzU1NSOiEhKDAsaS5kZWZhdWx0KSgpfHx2b2lkIDAscm91dGVzTWFwOnN9KX19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0Nvbm5lY3RlZEZpZWxkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbD0obi5uKGEpLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSksdT1uLm4obCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGaWVsZFByb3BzLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9vbkNoYW5nZVZhbHVlLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvZXZlbnRDb25zdHMuanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2lzUmVhY3ROYXRpdmUuanMiKSxoPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksYj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sRT1bIl9yZWR1eEZvcm0iXSx5PWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmIoZSkpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZX0sVD1mdW5jdGlvbihlKXt5KGUpJiZ2KGUucHJldmVudERlZmF1bHQpJiZlLnByZXZlbnREZWZhdWx0KCl9LEE9ZnVuY3Rpb24oZSx0KXtpZih5KGUpJiZ5KGUuZGF0YVRyYW5zZmVyKSYmdihlLmRhdGFUcmFuc2Zlci5nZXREYXRhKSlyZXR1cm4gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSh0KX0sQz1mdW5jdGlvbihlLHQsbil7eShlKSYmeShlLmRhdGFUcmFuc2ZlcikmJnYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSkmJmUuZGF0YVRyYW5zZmVyLnNldERhdGEodCxuKX0sTz1mdW5jdGlvbihlKXt2YXIgdD1lLmRlZXBFcXVhbCxuPWUuZ2V0SW4sbD1mdW5jdGlvbihlLHQpe3ZhciBuPWYuYS5nZXRJbihlLHQpO3JldHVybiBuJiZuLl9lcnJvcj9uLl9lcnJvcjpufSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bihlLHQpO3JldHVybiByJiZyLl93YXJuaW5nP3IuX3dhcm5pbmc6cn0seT1mdW5jdGlvbihuKXtmdW5jdGlvbiBsKCl7dmFyIGUsdCxuLHI7byh0aGlzLGwpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9QXJyYXkoaSksdT0wO3U8aTt1KyspYVt1XT1hcmd1bWVudHNbdV07cmV0dXJuIHQ9bj1zKHRoaXMsKGU9bC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihsKSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSxuLnNhdmVSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVmPWV9LG4uaXNQcmlzdGluZT1mdW5jdGlvbigpe3JldHVybiBuLnByb3BzLnByaXN0aW5lfSxuLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucHJvcHMudmFsdWV9LG4uaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucHJvcHMscj10Lm5hbWUsbz10LmRpc3BhdGNoLHM9dC5wYXJzZSxpPXQubm9ybWFsaXplLGE9dC5vbkNoYW5nZSxsPXQuX3JlZHV4Rm9ybSx1PXQudmFsdWUsYz1PYmplY3QoXy5hKShlLHtuYW1lOnIscGFyc2U6cyxub3JtYWxpemU6aX0pLGQ9ITE7YSYmKG0uYT9hKGUsYyx1LHIpOmEoaCh7fSxlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBkPSEwLFQoZSl9fSksYyx1LHIpKSxkfHwobyhsLmNoYW5nZShyLGMpKSxsLmFzeW5jVmFsaWRhdGUmJmwuYXN5bmNWYWxpZGF0ZShyLGMsImNoYW5nZSIpKX0sbi5oYW5kbGVGb2N1cz1mdW5jdGlvbihlKXt2YXIgdD1uLnByb3BzLHI9dC5uYW1lLG89dC5kaXNwYXRjaCxzPXQub25Gb2N1cyxpPXQuX3JlZHV4Rm9ybSxhPSExO3MmJihtLmE/cyhlLHIpOnMoaCh7fSxlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBhPSEwLFQoZSl9fSkscikpLGF8fG8oaS5mb2N1cyhyKSl9LG4uaGFuZGxlQmx1cj1mdW5jdGlvbihlKXt2YXIgdD1uLnByb3BzLHI9dC5uYW1lLG89dC5kaXNwYXRjaCxzPXQucGFyc2UsaT10Lm5vcm1hbGl6ZSxhPXQub25CbHVyLGw9dC5fcmVkdXhGb3JtLHU9dC5fdmFsdWUsYz10LnZhbHVlLGQ9T2JqZWN0KF8uYSkoZSx7bmFtZTpyLHBhcnNlOnMsbm9ybWFsaXplOml9KTtkPT09dSYmdm9pZCAwIT09dSYmKGQ9Yyk7dmFyIHA9ITE7YSYmKG0uYT9hKGUsZCxjLHIpOmEoaCh7fSxlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBwPSEwLFQoZSl9fSksZCxjLHIpKSxwfHwobyhsLmJsdXIocixkKSksbC5hc3luY1ZhbGlkYXRlJiZsLmFzeW5jVmFsaWRhdGUocixkLCJibHVyIikpfSxuLmhhbmRsZURyYWdTdGFydD1mdW5jdGlvbihlKXt2YXIgdD1uLnByb3BzLHI9dC5uYW1lLG89dC5vbkRyYWdTdGFydCxzPXQudmFsdWU7QyhlLHAuYSxudWxsPT1zPyIiOnMpLG8mJm8oZSxyKX0sbi5oYW5kbGVEcm9wPWZ1bmN0aW9uKGUpe3ZhciB0PW4ucHJvcHMscj10Lm5hbWUsbz10LmRpc3BhdGNoLHM9dC5vbkRyb3AsaT10Ll9yZWR1eEZvcm0sYT10LnZhbHVlLGw9QShlLHAuYSksdT0hMTtzJiZzKGgoe30sZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdT0hMCxUKGUpfX0pLGwsYSxyKSx1fHwobyhpLmNoYW5nZShyLGwpKSxUKGUpKX0scj10LHMobixyKX1yZXR1cm4gaShsLG4pLGcobCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgbj10aGlzLHI9T2JqZWN0LmtleXMoZSksbz1PYmplY3Qua2V5cyh0aGlzLnByb3BzKTtyZXR1cm4hISh0aGlzLnByb3BzLmNoaWxkcmVufHxlLmNoaWxkcmVufHxyLmxlbmd0aCE9PW8ubGVuZ3RofHxyLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIX5FLmluZGV4T2YocikmJiF0KG4ucHJvcHNbcl0sZVtyXSl9KSl9fSx7a2V5OiJnZXRSZW5kZXJlZENvbXBvbmVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWZ9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuY29tcG9uZW50LG89dC53aXRoUmVmLHM9dC5uYW1lLGk9dC5fcmVkdXhGb3JtLGw9KHQubm9ybWFsaXplLHQub25CbHVyLHQub25DaGFuZ2UsdC5vbkZvY3VzLHQub25EcmFnU3RhcnQsdC5vbkRyb3Ascih0LFsiY29tcG9uZW50Iiwid2l0aFJlZiIsIm5hbWUiLCJfcmVkdXhGb3JtIiwibm9ybWFsaXplIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25EcmFnU3RhcnQiLCJvbkRyb3AiXSkpLHU9T2JqZWN0KGQuYSkoZSxzLGgoe30sbCx7Zm9ybTppLmZvcm0sb25CbHVyOnRoaXMuaGFuZGxlQmx1cixvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxvbkRyb3A6dGhpcy5oYW5kbGVEcm9wLG9uRHJhZ1N0YXJ0OnRoaXMuaGFuZGxlRHJhZ1N0YXJ0LG9uRm9jdXM6dGhpcy5oYW5kbGVGb2N1c30pKSxjPXUuY3VzdG9tLF89cih1LFsiY3VzdG9tIl0pO2lmKG8mJihjLnJlZj10aGlzLnNhdmVSZWYpLCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIHA9Xy5pbnB1dDtfLm1ldGE7cmV0dXJuIE9iamVjdChhLmNyZWF0ZUVsZW1lbnQpKG4saCh7fSxwLGMpKX1yZXR1cm4gT2JqZWN0KGEuY3JlYXRlRWxlbWVudCkobixoKHt9LF8sYykpfX1dKSxsfShhLkNvbXBvbmVudCk7cmV0dXJuIHkucHJvcFR5cGVzPXtjb21wb25lbnQ6dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLnN0cmluZ10pLmlzUmVxdWlyZWQscHJvcHM6dS5hLm9iamVjdH0sT2JqZWN0KGMuY29ubmVjdCkoZnVuY3Rpb24oZSxyKXt2YXIgbz1yLm5hbWUscz1yLl9yZWR1eEZvcm0saT1zLmluaXRpYWxWYWx1ZXMsYT1zLmdldEZvcm1TdGF0ZSx1PWEoZSksYz1uKHUsImluaXRpYWwuIitvKSxkPXZvaWQgMCE9PWM/YzppJiZuKGksbyksXz1uKHUsInZhbHVlcy4iK28pLHA9bih1LCJzdWJtaXR0aW5nIiksZj1sKG4odSwic3luY0Vycm9ycyIpLG8pLG09YihuKHUsInN5bmNXYXJuaW5ncyIpLG8pLGg9dChfLGQpO3JldHVybnthc3luY0Vycm9yOm4odSwiYXN5bmNFcnJvcnMuIitvKSxhc3luY1ZhbGlkYXRpbmc6bih1LCJhc3luY1ZhbGlkYXRpbmciKT09PW8sZGlydHk6IWgscHJpc3RpbmU6aCxzdGF0ZTpuKHUsImZpZWxkcy4iK28pLHN1Ym1pdEVycm9yOm4odSwic3VibWl0RXJyb3JzLiIrbyksc3VibWl0RmFpbGVkOm4odSwic3VibWl0RmFpbGVkIiksc3VibWl0dGluZzpwLHN5bmNFcnJvcjpmLHN5bmNXYXJuaW5nOm0saW5pdGlhbDpkLHZhbHVlOl8sX3ZhbHVlOnIudmFsdWV9fSx2b2lkIDAsdm9pZCAwLHt3aXRoUmVmOiEwfSkoeSl9O3QuYT1PfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9Db25uZWN0ZWRGaWVsZEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXBWYWx1ZXMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT0obi5uKGwpLG4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSksYz1uLm4odSksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlRmllbGRBcnJheVByb3BzLmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksaD1bIl9yZWR1eEZvcm0iLCJ2YWx1ZSJdLGc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWVwRXF1YWwsbj1lLmdldEluLHU9ZS5zaXplLGc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hLmdldEluKGUsdCsiLl9lcnJvciIpfSxiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0KyIuX3dhcm5pbmciKX0sRT1mdW5jdGlvbihhKXtmdW5jdGlvbiB1KCl7dmFyIGUsdCxyLGk7byh0aGlzLHUpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoYSksYz0wO2M8YTtjKyspbFtjXT1hcmd1bWVudHNbY107cmV0dXJuIHQ9cj1zKHRoaXMsKGU9dS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih1KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLnNhdmVSZWY9ZnVuY3Rpb24oZSl7ci5yZWY9ZX0sci5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5wcm9wcy52YWx1ZSYmbihyLnByb3BzLnZhbHVlLFN0cmluZyhlKSl9LGk9dCxzKHIsaSl9cmV0dXJuIGkodSxhKSxtKHUsW3trZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxyPXRoaXMucHJvcHMudmFsdWUsbz1lLnZhbHVlO2lmKHImJm8pe3ZhciBzPW8uZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJufnIuaW5kZXhPZihlKX0pLGk9by5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUhPT1yW3RdfSk7aWYoci5sZW5ndGghPT1vLmxlbmd0aHx8cyYmaXx8ZS5yZXJlbmRlck9uRXZlcnlDaGFuZ2UmJnIuc29tZShmdW5jdGlvbihlLG4pe3JldHVybiF0KGUsb1tuXSl9KSlyZXR1cm4hMH12YXIgYT1PYmplY3Qua2V5cyhlKSxsPU9iamVjdC5rZXlzKHRoaXMucHJvcHMpO3JldHVybiEhKHRoaXMucHJvcHMuY2hpbGRyZW58fGUuY2hpbGRyZW58fGEubGVuZ3RoIT09bC5sZW5ndGh8fGEuc29tZShmdW5jdGlvbihyKXtyZXR1cm4hfmguaW5kZXhPZihyKSYmIXQobi5wcm9wc1tyXSxlW3JdKX0pKX19LHtrZXk6ImdldFJlbmRlcmVkQ29tcG9uZW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZn19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLG49dC5jb21wb25lbnQsbz10LndpdGhSZWYscz10Lm5hbWUsaT10Ll9yZWR1eEZvcm0sYT0odC52YWxpZGF0ZSx0Lndhcm4sdC5yZXJlbmRlck9uRXZlcnlDaGFuZ2Uscih0LFsiY29tcG9uZW50Iiwid2l0aFJlZiIsIm5hbWUiLCJfcmVkdXhGb3JtIiwidmFsaWRhdGUiLCJ3YXJuIiwicmVyZW5kZXJPbkV2ZXJ5Q2hhbmdlIl0pKSx1PU9iamVjdChwLmEpKGUscyxpLmZvcm0saS5zZWN0aW9uUHJlZml4LHRoaXMuZ2V0VmFsdWUsYSk7cmV0dXJuIG8mJih1LnJlZj10aGlzLnNhdmVSZWYpLE9iamVjdChsLmNyZWF0ZUVsZW1lbnQpKG4sdSl9fSx7a2V5OiJkaXJ0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuZGlydHl9fSx7a2V5OiJwcmlzdGluZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMucHJpc3RpbmV9fSx7a2V5OiJ2YWx1ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMudmFsdWV9fV0pLHV9KGwuQ29tcG9uZW50KTtyZXR1cm4gRS5wcm9wVHlwZXM9e2NvbXBvbmVudDpjLmEub25lT2ZUeXBlKFtjLmEuZnVuYyxjLmEuc3RyaW5nXSkuaXNSZXF1aXJlZCxwcm9wczpjLmEub2JqZWN0LHJlcmVuZGVyT25FdmVyeUNoYW5nZTpjLmEuYm9vbH0sRS5kZWZhdWx0UHJvcHM9e3JlcmVuZGVyT25FdmVyeUNoYW5nZTohMX0sRS5jb250ZXh0VHlwZXM9e19yZWR1eEZvcm06Yy5hLm9iamVjdH0sT2JqZWN0KGQuY29ubmVjdCkoZnVuY3Rpb24oZSxyKXt2YXIgbz1yLm5hbWUscz1yLl9yZWR1eEZvcm0saT1zLmluaXRpYWxWYWx1ZXMsYT1zLmdldEZvcm1TdGF0ZSxsPWEoZSksYz1uKGwsImluaXRpYWwuIitvKXx8aSYmbihpLG8pLGQ9bihsLCJ2YWx1ZXMuIitvKSxfPW4obCwic3VibWl0dGluZyIpLHA9ZyhuKGwsInN5bmNFcnJvcnMiKSxvKSxmPWIobihsLCJzeW5jV2FybmluZ3MiKSxvKSxtPXQoZCxjKTtyZXR1cm57YXN5bmNFcnJvcjpuKGwsImFzeW5jRXJyb3JzLiIrbysiLl9lcnJvciIpLGRpcnR5OiFtLHByaXN0aW5lOm0sc3RhdGU6bihsLCJmaWVsZHMuIitvKSxzdWJtaXRFcnJvcjpuKGwsInN1Ym1pdEVycm9ycy4iK28rIi5fZXJyb3IiKSxzdWJtaXRGYWlsZWQ6bihsLCJzdWJtaXRGYWlsZWQiKSxzdWJtaXR0aW5nOl8sc3luY0Vycm9yOnAsc3luY1dhcm5pbmc6Zix2YWx1ZTpkLGxlbmd0aDp1KGQpfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm5hbWUscj10Ll9yZWR1eEZvcm0sbz1yLmFycmF5SW5zZXJ0LHM9ci5hcnJheU1vdmUsaT1yLmFycmF5UG9wLGw9ci5hcnJheVB1c2gsdT1yLmFycmF5UmVtb3ZlLGM9ci5hcnJheVJlbW92ZUFsbCxkPXIuYXJyYXlTaGlmdCxwPXIuYXJyYXlTcGxpY2UsZj1yLmFycmF5U3dhcCxtPXIuYXJyYXlVbnNoaWZ0O3JldHVybiBPYmplY3QoYS5hKSh7YXJyYXlJbnNlcnQ6byxhcnJheU1vdmU6cyxhcnJheVBvcDppLGFycmF5UHVzaDpsLGFycmF5UmVtb3ZlOnUsYXJyYXlSZW1vdmVBbGw6YyxhcnJheVNoaWZ0OmQsYXJyYXlTcGxpY2U6cCxhcnJheVN3YXA6ZixhcnJheVVuc2hpZnQ6bX0sZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChfLmJpbmRBY3Rpb25DcmVhdG9ycykodC5iaW5kKG51bGwsbiksZSl9KX0sdm9pZCAwLHt3aXRoUmVmOiEwfSkoRSl9O3QuYT1nfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9Db25uZWN0ZWRGaWVsZHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxsPShuLm4oYSksbigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpKSx1PW4ubihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2NyZWF0ZUZpZWxkUHJvcHMuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9vbkNoYW5nZVZhbHVlLmpzIiksZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGg9WyJfcmVkdXhGb3JtIl0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLmRlZXBFcXVhbCxuPWUuZ2V0SW4sbD1lLnNpemUsZz1mdW5jdGlvbihlLHQpe3JldHVybiBfLmEuZ2V0SW4oZSx0KyIuX2Vycm9yIil8fF8uYS5nZXRJbihlLHQpfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bihlLHQpO3JldHVybiByJiZyLl93YXJuaW5nP3IuX3dhcm5pbmc6cn0sRT1mdW5jdGlvbihuKXtmdW5jdGlvbiB1KGUpe28odGhpcyx1KTt2YXIgdD1zKHRoaXMsKHUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodSkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIHQub25DaGFuZ2VGbnM9e30sdC5vbkZvY3VzRm5zPXt9LHQub25CbHVyRm5zPXt9LHQucHJlcGFyZUV2ZW50SGFuZGxlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0Lm9uQ2hhbmdlRm5zW2VdPWZ1bmN0aW9uKG4pe3JldHVybiB0LmhhbmRsZUNoYW5nZShlLG4pfSx0Lm9uRm9jdXNGbnNbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVGb2N1cyhlKX0sdC5vbkJsdXJGbnNbZV09ZnVuY3Rpb24obil7cmV0dXJuIHQuaGFuZGxlQmx1cihlLG4pfX0pfSx0LmhhbmRsZUNoYW5nZT1mdW5jdGlvbihlLG4pe3ZhciByPXQucHJvcHMsbz1yLmRpc3BhdGNoLHM9ci5wYXJzZSxpPXIuX3JlZHV4Rm9ybSxhPU9iamVjdChwLmEpKG4se25hbWU6ZSxwYXJzZTpzfSk7byhpLmNoYW5nZShlLGEpKSxpLmFzeW5jVmFsaWRhdGUmJmkuYXN5bmNWYWxpZGF0ZShlLGEsImNoYW5nZSIpfSx0LmhhbmRsZUZvY3VzPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvcHM7KDAsbi5kaXNwYXRjaCkobi5fcmVkdXhGb3JtLmZvY3VzKGUpKX0sdC5oYW5kbGVCbHVyPWZ1bmN0aW9uKGUsbil7dmFyIHI9dC5wcm9wcyxvPXIuZGlzcGF0Y2gscz1yLnBhcnNlLGk9ci5fcmVkdXhGb3JtLGE9T2JqZWN0KHAuYSkobix7bmFtZTplLHBhcnNlOnN9KTtvKGkuYmx1cihlLGEpKSxpLmFzeW5jVmFsaWRhdGUmJmkuYXN5bmNWYWxpZGF0ZShlLGEsImJsdXIiKX0sdC5wcmVwYXJlRXZlbnRIYW5kbGVycyhlKSx0fXJldHVybiBpKHUsbiksbSh1LFt7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucHJvcHMubmFtZXM9PT1lLm5hbWVzfHxsKHRoaXMucHJvcHMubmFtZXMpPT09bChlLm5hbWVzKSYmIWUubmFtZXMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4hdC5wcm9wcy5fZmllbGRzW2VdfSl8fHRoaXMucHJlcGFyZUV2ZW50SGFuZGxlcnMoZSl9fSx7a2V5OiJzaG91bGRDb21wb25lbnRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMscj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHRoaXMucHJvcHMpO3JldHVybiEhKHRoaXMucHJvcHMuY2hpbGRyZW58fGUuY2hpbGRyZW58fHIubGVuZ3RoIT09by5sZW5ndGh8fHIuc29tZShmdW5jdGlvbihyKXtyZXR1cm4hfmguaW5kZXhPZihyKSYmIXQobi5wcm9wc1tyXSxlW3JdKX0pKX19LHtrZXk6ImlzRGlydHkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5fZmllbGRzO3JldHVybiBPYmplY3Qua2V5cyhlKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdLmRpcnR5fSl9fSx7a2V5OiJnZXRWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5fZmllbGRzO3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gXy5hLnNldEluKHQsbixlW25dLnZhbHVlKX0se30pfX0se2tleToiZ2V0UmVuZGVyZWRDb21wb25lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxvPW4uY29tcG9uZW50LHM9bi53aXRoUmVmLGk9bi5fZmllbGRzLGw9bi5fcmVkdXhGb3JtLHU9cihuLFsiY29tcG9uZW50Iiwid2l0aFJlZiIsIl9maWVsZHMiLCJfcmVkdXhGb3JtIl0pLGM9bC5zZWN0aW9uUHJlZml4LHA9bC5mb3JtLG09T2JqZWN0LmtleXMoaSkucmVkdWNlKGZ1bmN0aW9uKG4sbyl7dmFyIHM9aVtvXSxhPU9iamVjdChkLmEpKGUsbyxmKHt9LHMsdSx7Zm9ybTpwLG9uQmx1cjp0Lm9uQmx1ckZuc1tvXSxvbkNoYW5nZTp0Lm9uQ2hhbmdlRm5zW29dLG9uRm9jdXM6dC5vbkZvY3VzRm5zW29dfSkpLGw9YS5jdXN0b20sbT1yKGEsWyJjdXN0b20iXSk7bi5jdXN0b209bDt2YXIgaD1jP28ucmVwbGFjZShjKyIuIiwiIik6bztyZXR1cm4gXy5hLnNldEluKG4saCxtKX0se30pLGg9bS5jdXN0b20sZz1yKG0sWyJjdXN0b20iXSk7cmV0dXJuIHMmJihnLnJlZj0icmVuZGVyZWRDb21wb25lbnQiKSxPYmplY3QoYS5jcmVhdGVFbGVtZW50KShvLGYoe30sZyxoKSl9fV0pLHV9KGEuQ29tcG9uZW50KTtyZXR1cm4gRS5wcm9wVHlwZXM9e2NvbXBvbmVudDp1LmEub25lT2ZUeXBlKFt1LmEuZnVuYyx1LmEuc3RyaW5nXSkuaXNSZXF1aXJlZCxfZmllbGRzOnUuYS5vYmplY3QuaXNSZXF1aXJlZCxwcm9wczp1LmEub2JqZWN0fSxPYmplY3QoYy5jb25uZWN0KShmdW5jdGlvbihlLHQpe3ZhciByPXQubmFtZXMsbz10Ll9yZWR1eEZvcm0scz1vLmluaXRpYWxWYWx1ZXMsaT1vLmdldEZvcm1TdGF0ZSxhPWkoZSk7cmV0dXJue19maWVsZHM6ci5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbz1uKGEsImluaXRpYWwuIityKSxpPXZvaWQgMCE9PW8/bzpzJiZuKHMsciksbD1uKGEsInZhbHVlcy4iK3IpLHU9ZyhuKGEsInN5bmNFcnJvcnMiKSxyKSxjPWIobihhLCJzeW5jV2FybmluZ3MiKSxyKSxkPW4oYSwic3VibWl0dGluZyIpLF89bD09PWk7cmV0dXJuIGVbcl09e2FzeW5jRXJyb3I6bihhLCJhc3luY0Vycm9ycy4iK3IpLGFzeW5jVmFsaWRhdGluZzpuKGEsImFzeW5jVmFsaWRhdGluZyIpPT09cixkaXJ0eTohXyxpbml0aWFsOmkscHJpc3RpbmU6XyxzdGF0ZTpuKGEsImZpZWxkcy4iK3IpLHN1Ym1pdEVycm9yOm4oYSwic3VibWl0RXJyb3JzLiIrciksc3VibWl0RmFpbGVkOm4oYSwic3VibWl0RmFpbGVkIiksc3VibWl0dGluZzpkLHN5bmNFcnJvcjp1LHN5bmNXYXJuaW5nOmMsdmFsdWU6bCxfdmFsdWU6dC52YWx1ZX0sZX0se30pfX0sdm9pZCAwLHZvaWQgMCx7d2l0aFJlZjohMH0pKEUpfTt0LmE9Z30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvRmllbGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGaWVsZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvRmllbGRBcnJheS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2NyZWF0ZUZpZWxkQXJyYXkuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0ZpZWxkcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2NyZWF0ZUZpZWxkcy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvRm9ybS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYT1uLm4oaSksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1uLm4obCksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtyKHRoaXMsdCk7dmFyIHM9byh0aGlzLCh0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsKHRoaXMsZSxuKSk7aWYoIW4uX3JlZHV4Rm9ybSl0aHJvdyBuZXcgRXJyb3IoIkZvcm0gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCkiKTtyZXR1cm4gc31yZXR1cm4gcyh0LGUpLGModCxbe2tleToiY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hLmNyZWF0ZUVsZW1lbnQoImZvcm0iLHRoaXMucHJvcHMpfX1dKSx0fShpLkNvbXBvbmVudCk7ZC5wcm9wVHlwZXM9e29uU3VibWl0OnUuYS5mdW5jLmlzUmVxdWlyZWR9LGQuY29udGV4dFR5cGVzPXtfcmVkdXhGb3JtOnUuYS5vYmplY3R9LHQuYT1kfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9Gb3JtU2VjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGM9bi5uKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy91dGlsL3ByZWZpeE5hbWUuanMiKSxfPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7byh0aGlzLHQpO3ZhciByPXModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsbikpO2lmKCFuLl9yZWR1eEZvcm0pdGhyb3cgbmV3IEVycm9yKCJGb3JtU2VjdGlvbiBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKSIpO3JldHVybiByfXJldHVybiBpKHQsZSkscCh0LFt7a2V5OiJnZXRDaGlsZENvbnRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHQ9dGhpcy5wcm9wcy5uYW1lO3JldHVybntfcmVkdXhGb3JtOl8oe30sZS5fcmVkdXhGb3JtLHtzZWN0aW9uUHJlZml4Ok9iamVjdChkLmEpKGUsdCl9KX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj0oZS5uYW1lLGUuY29tcG9uZW50KSxvPXIoZSxbImNoaWxkcmVuIiwibmFtZSIsImNvbXBvbmVudCJdKTtyZXR1cm4gbC5hLmlzVmFsaWRFbGVtZW50KHQpP3Q6T2JqZWN0KGEuY3JlYXRlRWxlbWVudCkobixfKHt9LG8se2NoaWxkcmVuOnR9KSl9fV0pLHR9KGEuQ29tcG9uZW50KTtmLnByb3BUeXBlcz17bmFtZTpjLmEuc3RyaW5nLmlzUmVxdWlyZWQsY29tcG9uZW50OmMuYS5vbmVPZlR5cGUoW2MuYS5mdW5jLGMuYS5zdHJpbmddKX0sZi5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoiZGl2In0sZi5jaGlsZENvbnRleHRUeXBlcz17X3JlZHV4Rm9ybTpjLmEub2JqZWN0LmlzUmVxdWlyZWR9LGYuY29udGV4dFR5cGVzPXtfcmVkdXhGb3JtOmMuYS5vYmplY3R9LHQuYT1mfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9TdWJtaXNzaW9uRXJyb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9lczYtZXJyb3IvZXM2L2luZGV4LmpzIiksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3IodGhpcyx0KTt2YXIgbj1vKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcywiU3VibWl0IFZhbGlkYXRpb24gRmFpbGVkIikpO3JldHVybiBuLmVycm9ycz1lLG59cmV0dXJuIHModCxlKSx0fShpLmEpO3QuYT1hfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9hY3Rpb25UeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5kKHQsInByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZCh0LCJBUlJBWV9JTlNFUlQiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQodCwiQVJSQVlfTU9WRSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJBUlJBWV9QT1AiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQodCwiQVJSQVlfUFVTSCIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZCh0LCJBUlJBWV9SRU1PVkUiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQodCwiQVJSQVlfUkVNT1ZFX0FMTCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZCh0LCJBUlJBWV9TSElGVCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZCh0LCJBUlJBWV9TUExJQ0UiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQodCwiQVJSQVlfVU5TSElGVCIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZCh0LCJBUlJBWV9TV0FQIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKHQsIkFVVE9GSUxMIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKHQsIkJMVVIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQodCwiQ0hBTkdFIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKHQsIkNMRUFSX0ZJRUxEUyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZCh0LCJDTEVBUl9TVUJNSVQiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQodCwiQ0xFQVJfU1VCTUlUX0VSUk9SUyIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZCh0LCJDTEVBUl9BU1lOQ19FUlJPUiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZCh0LCJERVNUUk9ZIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKHQsIkZPQ1VTIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKHQsIklOSVRJQUxJWkUiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQodCwiUkVHSVNURVJfRklFTEQiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQodCwiUkVTRVQiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQodCwiUkVTRVRfU0VDVElPTiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZCh0LCJTRVRfU1VCTUlUX0ZBSUxFRCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZCh0LCJTRVRfU1VCTUlUX1NVQ0NFRURFRCIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZCh0LCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKHQsIlNUQVJUX1NVQk1JVCIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZCh0LCJTVE9QX0FTWU5DX1ZBTElEQVRJT04iLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQodCwiU1RPUF9TVUJNSVQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQodCwiU1VCTUlUIixmdW5jdGlvbigpe3JldHVybiBNfSksbi5kKHQsIlRPVUNIIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKHQsIlVOUkVHSVNURVJfRklFTEQiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQodCwiVU5UT1VDSCIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZCh0LCJVUERBVEVfU1lOQ19FUlJPUlMiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQodCwiVVBEQVRFX1NZTkNfV0FSTklOR1MiLGZ1bmN0aW9uKCl7cmV0dXJuIEh9KTt2YXIgcj0iQEByZWR1eC1mb3JtLyIsbz1yKyJBUlJBWV9JTlNFUlQiLHM9cisiQVJSQVlfTU9WRSIsaT1yKyJBUlJBWV9QT1AiLGE9cisiQVJSQVlfUFVTSCIsbD1yKyJBUlJBWV9SRU1PVkUiLHU9cisiQVJSQVlfUkVNT1ZFX0FMTCIsYz1yKyJBUlJBWV9TSElGVCIsZD1yKyJBUlJBWV9TUExJQ0UiLF89cisiQVJSQVlfVU5TSElGVCIscD1yKyJBUlJBWV9TV0FQIixmPXIrIkFVVE9GSUxMIixtPXIrIkJMVVIiLGg9cisiQ0hBTkdFIixnPXIrIkNMRUFSX0ZJRUxEUyIsYj1yKyJDTEVBUl9TVUJNSVQiLEU9cisiQ0xFQVJfU1VCTUlUX0VSUk9SUyIseT1yKyJDTEVBUl9BU1lOQ19FUlJPUiIsdj1yKyJERVNUUk9ZIixUPXIrIkZPQ1VTIixBPXIrIklOSVRJQUxJWkUiLEM9cisiUkVHSVNURVJfRklFTEQiLE89cisiUkVTRVQiLFM9cisiUkVTRVRfU0VDVElPTiIsUj1yKyJTRVRfU1VCTUlUX0ZBSUxFRCIsaj1yKyJTRVRfU1VCTUlUX1NVQ0NFRURFRCIseD1yKyJTVEFSVF9BU1lOQ19WQUxJREFUSU9OIixMPXIrIlNUQVJUX1NVQk1JVCIsRD1yKyJTVE9QX0FTWU5DX1ZBTElEQVRJT04iLHc9cisiU1RPUF9TVUJNSVQiLE09cisiU1VCTUlUIixrPXIrIlRPVUNIIixJPXIrIlVOUkVHSVNURVJfRklFTEQiLFA9cisiVU5UT1VDSCIsTj1yKyJVUERBVEVfU1lOQ19FUlJPUlMiLEg9cisiVVBEQVRFX1NZTkNfV0FSTklOR1MifSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9hY3Rpb25zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvYWN0aW9uVHlwZXMuanMiKSxvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHM9ZnVuY3Rpb24oZSx0LG4sbyl7cmV0dXJue3R5cGU6ci5BUlJBWV9JTlNFUlQsbWV0YTp7Zm9ybTplLGZpZWxkOnQsaW5kZXg6bn0scGF5bG9hZDpvfX0saT1mdW5jdGlvbihlLHQsbixvKXtyZXR1cm57dHlwZTpyLkFSUkFZX01PVkUsbWV0YTp7Zm9ybTplLGZpZWxkOnQsZnJvbTpuLHRvOm99fX0sYT1mdW5jdGlvbihlLHQpe3JldHVybnt0eXBlOnIuQVJSQVlfUE9QLG1ldGE6e2Zvcm06ZSxmaWVsZDp0fX19LGw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt0eXBlOnIuQVJSQVlfUFVTSCxtZXRhOntmb3JtOmUsZmllbGQ6dH0scGF5bG9hZDpufX0sdT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3R5cGU6ci5BUlJBWV9SRU1PVkUsbWV0YTp7Zm9ybTplLGZpZWxkOnQsaW5kZXg6bn19fSxjPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5BUlJBWV9SRU1PVkVfQUxMLG1ldGE6e2Zvcm06ZSxmaWVsZDp0fX19LGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZTpyLkFSUkFZX1NISUZULG1ldGE6e2Zvcm06ZSxmaWVsZDp0fX19LF89ZnVuY3Rpb24oZSx0LG4sbyxzKXt2YXIgaT17dHlwZTpyLkFSUkFZX1NQTElDRSxtZXRhOntmb3JtOmUsZmllbGQ6dCxpbmRleDpuLHJlbW92ZU51bTpvfX07cmV0dXJuIHZvaWQgMCE9PXMmJihpLnBheWxvYWQ9cyksaX0scD1mdW5jdGlvbihlLHQsbixvKXtpZihuPT09byl0aHJvdyBuZXcgRXJyb3IoIlN3YXAgaW5kaWNlcyBjYW5ub3QgYmUgZXF1YWwiKTtpZihuPDB8fG88MCl0aHJvdyBuZXcgRXJyb3IoIlN3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUiKTtyZXR1cm57dHlwZTpyLkFSUkFZX1NXQVAsbWV0YTp7Zm9ybTplLGZpZWxkOnQsaW5kZXhBOm4saW5kZXhCOm99fX0sZj1mdW5jdGlvbihlLHQsbil7cmV0dXJue3R5cGU6ci5BUlJBWV9VTlNISUZULG1ldGE6e2Zvcm06ZSxmaWVsZDp0fSxwYXlsb2FkOm59fSxtPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57dHlwZTpyLkFVVE9GSUxMLG1ldGE6e2Zvcm06ZSxmaWVsZDp0fSxwYXlsb2FkOm59fSxoPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybnt0eXBlOnIuQkxVUixtZXRhOntmb3JtOmUsZmllbGQ6dCx0b3VjaDpvfSxwYXlsb2FkOm59fSxnPWZ1bmN0aW9uKGUsdCxuLG8scyl7cmV0dXJue3R5cGU6ci5DSEFOR0UsbWV0YTp7Zm9ybTplLGZpZWxkOnQsdG91Y2g6byxwZXJzaXN0ZW50U3VibWl0RXJyb3JzOnN9LHBheWxvYWQ6bn19LGI9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5DTEVBUl9TVUJNSVQsbWV0YTp7Zm9ybTplfX19LEU9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5DTEVBUl9TVUJNSVRfRVJST1JTLG1ldGE6e2Zvcm06ZX19fSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5DTEVBUl9BU1lOQ19FUlJPUixtZXRhOntmb3JtOmUsZmllbGQ6dH19fSx2PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxzPUFycmF5KG8+Mz9vLTM6MCksaT0zO2k8bztpKyspc1tpLTNdPWFyZ3VtZW50c1tpXTtyZXR1cm57dHlwZTpyLkNMRUFSX0ZJRUxEUyxtZXRhOntmb3JtOmUsa2VlcFRvdWNoZWQ6dCxwZXJzaXN0ZW50U3VibWl0RXJyb3JzOm4sZmllbGRzOnN9fX0sVD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJue3R5cGU6ci5ERVNUUk9ZLG1ldGE6e2Zvcm06dH19fSxBPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5GT0NVUyxtZXRhOntmb3JtOmUsZmllbGQ6dH19fSxDPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIG4gaW5zdGFuY2VvZiBPYmplY3QmJihzPW4sbj0hMSkse3R5cGU6ci5JTklUSUFMSVpFLG1ldGE6byh7Zm9ybTplLGtlZXBEaXJ0eTpufSxzKSxwYXlsb2FkOnR9fSxPPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57dHlwZTpyLlJFR0lTVEVSX0ZJRUxELG1ldGE6e2Zvcm06ZX0scGF5bG9hZDp7bmFtZTp0LHR5cGU6bn19fSxTPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuUkVTRVQsbWV0YTp7Zm9ybTplfX19LFI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKW5bby0xXT1hcmd1bWVudHNbb107cmV0dXJue3R5cGU6ci5SRVNFVF9TRUNUSU9OLG1ldGE6e2Zvcm06ZSxzZWN0aW9uczpufX19LGo9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZTpyLlNUQVJUX0FTWU5DX1ZBTElEQVRJT04sbWV0YTp7Zm9ybTplLGZpZWxkOnR9fX0seD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLlNUQVJUX1NVQk1JVCxtZXRhOntmb3JtOmV9fX0sTD1mdW5jdGlvbihlLHQpe3JldHVybnt0eXBlOnIuU1RPUF9BU1lOQ19WQUxJREFUSU9OLG1ldGE6e2Zvcm06ZX0scGF5bG9hZDp0LGVycm9yOiEoIXR8fCFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfX0sRD1mdW5jdGlvbihlLHQpe3JldHVybnt0eXBlOnIuU1RPUF9TVUJNSVQsbWV0YTp7Zm9ybTplfSxwYXlsb2FkOnQsZXJyb3I6ISghdHx8IU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9fSx3PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuU1VCTUlULG1ldGE6e2Zvcm06ZX19fSxNPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxvPTE7bzx0O28rKyluW28tMV09YXJndW1lbnRzW29dO3JldHVybnt0eXBlOnIuU0VUX1NVQk1JVF9GQUlMRUQsbWV0YTp7Zm9ybTplLGZpZWxkczpufSxlcnJvcjohMH19LGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKW5bby0xXT1hcmd1bWVudHNbb107cmV0dXJue3R5cGU6ci5TRVRfU1VCTUlUX1NVQ0NFRURFRCxtZXRhOntmb3JtOmUsZmllbGRzOm59LGVycm9yOiExfX0sST1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCksbz0xO288dDtvKyspbltvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm57dHlwZTpyLlRPVUNILG1ldGE6e2Zvcm06ZSxmaWVsZHM6bn19fSxQPWZ1bmN0aW9uKGUsdCl7dmFyIG49IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtyZXR1cm57dHlwZTpyLlVOUkVHSVNURVJfRklFTEQsbWV0YTp7Zm9ybTplfSxwYXlsb2FkOntuYW1lOnQsZGVzdHJveU9uVW5tb3VudDpufX19LE49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKW5bby0xXT1hcmd1bWVudHNbb107cmV0dXJue3R5cGU6ci5VTlRPVUNILG1ldGE6e2Zvcm06ZSxmaWVsZHM6bn19fSxIPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPWFyZ3VtZW50c1syXTtyZXR1cm57dHlwZTpyLlVQREFURV9TWU5DX0VSUk9SUyxtZXRhOntmb3JtOmV9LHBheWxvYWQ6e3N5bmNFcnJvcnM6dCxlcnJvcjpufX19LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzWzJdO3JldHVybnt0eXBlOnIuVVBEQVRFX1NZTkNfV0FSTklOR1MsbWV0YTp7Zm9ybTplfSxwYXlsb2FkOntzeW5jV2FybmluZ3M6dCx3YXJuaW5nOm59fX0sQj17YXJyYXlJbnNlcnQ6cyxhcnJheU1vdmU6aSxhcnJheVBvcDphLGFycmF5UHVzaDpsLGFycmF5UmVtb3ZlOnUsYXJyYXlSZW1vdmVBbGw6YyxhcnJheVNoaWZ0OmQsYXJyYXlTcGxpY2U6XyxhcnJheVN3YXA6cCxhcnJheVVuc2hpZnQ6ZixhdXRvZmlsbDptLGJsdXI6aCxjaGFuZ2U6ZyxjbGVhckZpZWxkczp2LGNsZWFyU3VibWl0OmIsY2xlYXJTdWJtaXRFcnJvcnM6RSxjbGVhckFzeW5jRXJyb3I6eSxkZXN0cm95OlQsZm9jdXM6QSxpbml0aWFsaXplOkMscmVnaXN0ZXJGaWVsZDpPLHJlc2V0OlMscmVzZXRTZWN0aW9uOlIsc3RhcnRBc3luY1ZhbGlkYXRpb246aixzdGFydFN1Ym1pdDp4LHN0b3BBc3luY1ZhbGlkYXRpb246TCxzdG9wU3VibWl0OkQsc3VibWl0Oncsc2V0U3VibWl0RmFpbGVkOk0sc2V0U3VibWl0U3VjY2VlZGVkOmssdG91Y2g6SSx1bnJlZ2lzdGVyRmllbGQ6UCx1bnRvdWNoOk4sdXBkYXRlU3luY0Vycm9yczpILHVwZGF0ZVN5bmNXYXJuaW5nczpGfTt0LmE9Qn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvYXN5bmNWYWxpZGF0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiKSxvPW4ubihyKSxzPWZ1bmN0aW9uKGUsdCxuLHIpe3Qocik7dmFyIHM9ZSgpO2lmKCFvKCkocykpdGhyb3cgbmV3IEVycm9yKCJhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlIik7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQmJk9iamVjdC5rZXlzKHQpLmxlbmd0aClyZXR1cm4gbih0KSx0O2lmKGUpdGhyb3cgbigpLG5ldyBFcnJvcigiQXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aG91dCBlcnJvcnMuIik7cmV0dXJuIG4oKSxQcm9taXNlLnJlc29sdmUoKX19O3JldHVybiBzLnRoZW4oaSghMSksaSghMCkpfTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlRmllbGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGE9KG4ubihpKSxuKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvQ29ubmVjdGVkRmllbGQuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvdXRpbC9zaGFsbG93Q29tcGFyZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy91dGlsL3ByZWZpeE5hbWUuanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksbT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGc9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGQuYSkoZSksbj1lLnNldEluLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQpe3IodGhpcyxhKTt2YXIgcz1vKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcyxlLHQpKTtpZihzLnNhdmVSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHMucmVmPWV9LHMubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCl7dmFyIHI9cy5wcm9wcy5ub3JtYWxpemU7aWYoIXIpcmV0dXJuIHQ7dmFyIG89cy5jb250ZXh0Ll9yZWR1eEZvcm0uZ2V0VmFsdWVzKCk7cmV0dXJuIHIodCxzLnZhbHVlLG4obyxlLHQpLG8pfSwhdC5fcmVkdXhGb3JtKXRocm93IG5ldyBFcnJvcigiRmllbGQgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCkiKTtyZXR1cm4gc31yZXR1cm4gcyhhLGUpLGgoYSxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QoXy5hKSh0aGlzLGUsdCl9fSx7a2V5OiJjb21wb25lbnRXaWxsTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3Rlcih0aGlzLm5hbWUsIkZpZWxkIixmdW5jdGlvbigpe3JldHVybiBlLnByb3BzLnZhbGlkYXRlfSxmdW5jdGlvbigpe3JldHVybiBlLnByb3BzLndhcm59KX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0KHAuYSkodGhpcy5jb250ZXh0LHRoaXMucHJvcHMubmFtZSkscj1PYmplY3QocC5hKSh0LGUubmFtZSk7bj09PXImJmYuYS5kZWVwRXF1YWwodGhpcy5wcm9wcy52YWxpZGF0ZSxlLnZhbGlkYXRlKSYmZi5hLmRlZXBFcXVhbCh0aGlzLnByb3BzLndhcm4sZS53YXJuKXx8KHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIobiksdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIociwiRmllbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGUudmFsaWRhdGV9LGZ1bmN0aW9uKCl7cmV0dXJuIGUud2Fybn0pKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKX19LHtrZXk6ImdldFJlbmRlcmVkQ29tcG9uZW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjKCkodGhpcy5wcm9wcy53aXRoUmVmLCJJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgeW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZCIpLHRoaXMucmVmP3RoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk6dm9pZCAwfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QoaS5jcmVhdGVFbGVtZW50KSh0LG0oe30sdGhpcy5wcm9wcyx7bmFtZTp0aGlzLm5hbWUsbm9ybWFsaXplOnRoaXMubm9ybWFsaXplLF9yZWR1eEZvcm06dGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0scmVmOnRoaXMuc2F2ZVJlZn0pKX19LHtrZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QocC5hKSh0aGlzLmNvbnRleHQsdGhpcy5wcm9wcy5uYW1lKX19LHtrZXk6ImRpcnR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcmlzdGluZX19LHtrZXk6InByaXN0aW5lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLnJlZnx8IXRoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKSl9fSx7a2V5OiJ2YWx1ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVmJiZ0aGlzLnJlZi5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZSgpfX1dKSxhfShpLkNvbXBvbmVudCk7cmV0dXJuIGEucHJvcFR5cGVzPXtuYW1lOmwuYS5zdHJpbmcuaXNSZXF1aXJlZCxjb21wb25lbnQ6bC5hLm9uZU9mVHlwZShbbC5hLmZ1bmMsbC5hLnN0cmluZ10pLmlzUmVxdWlyZWQsZm9ybWF0OmwuYS5mdW5jLG5vcm1hbGl6ZTpsLmEuZnVuYyxvbkJsdXI6bC5hLmZ1bmMsb25DaGFuZ2U6bC5hLmZ1bmMsb25Gb2N1czpsLmEuZnVuYyxvbkRyYWdTdGFydDpsLmEuZnVuYyxvbkRyb3A6bC5hLmZ1bmMscGFyc2U6bC5hLmZ1bmMscHJvcHM6bC5hLm9iamVjdCx2YWxpZGF0ZTpsLmEub25lT2ZUeXBlKFtsLmEuZnVuYyxsLmEuYXJyYXlPZihsLmEuZnVuYyldKSx3YXJuOmwuYS5vbmVPZlR5cGUoW2wuYS5mdW5jLGwuYS5hcnJheU9mKGwuYS5mdW5jKV0pLHdpdGhSZWY6bC5hLmJvb2x9LGEuY29udGV4dFR5cGVzPXtfcmVkdXhGb3JtOmwuYS5vYmplY3R9LGF9O3QuYT1nfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGaWVsZEFycmF5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gcyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxsPShuLm4oYSksbigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpKSx1PW4ubihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIiksZD1uLm4oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0Nvbm5lY3RlZEZpZWxkQXJyYXkuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvdXRpbC9wcmVmaXhOYW1lLmpzIiksZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLGg9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19LGc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZnVuY3Rpb24oKXtmb3IodmFyIG49aChlKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl0uYXBwbHkobixhcmd1bWVudHMpO2lmKG8pcmV0dXJuIGkoe30sdCxvKX19fSxiPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChfLmEpKGUpLG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe3IodGhpcyxuKTt2YXIgcz1vKHRoaXMsKG4uX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLmNhbGwodGhpcyxlLHQpKTtpZihzLnNhdmVSZWY9ZnVuY3Rpb24oZSl7cy5yZWY9ZX0sIXQuX3JlZHV4Rm9ybSl0aHJvdyBuZXcgRXJyb3IoIkZpZWxkQXJyYXkgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCkiKTtyZXR1cm4gc31yZXR1cm4gcyhuLGUpLG0obixbe2tleToiY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCJGaWVsZEFycmF5IixmdW5jdGlvbigpe3JldHVybiBnKGUucHJvcHMudmFsaWRhdGUsIl9lcnJvciIpfSxmdW5jdGlvbigpe3JldHVybiBnKGUucHJvcHMud2FybiwiX3dhcm5pbmciKX0pfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QocC5hKSh0aGlzLmNvbnRleHQsdGhpcy5wcm9wcy5uYW1lKSxyPU9iamVjdChwLmEpKHQsZS5uYW1lKTtuIT09ciYmKHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIobiksdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIociwiRmllbGRBcnJheSIpKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKX19LHtrZXk6ImdldFJlbmRlcmVkQ29tcG9uZW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKCkodGhpcy5wcm9wcy53aXRoUmVmLCJJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgeW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5IiksdGhpcy5yZWYmJnRoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChhLmNyZWF0ZUVsZW1lbnQpKHQsZih7fSx0aGlzLnByb3BzLHtuYW1lOnRoaXMubmFtZSxfcmVkdXhGb3JtOnRoaXMuY29udGV4dC5fcmVkdXhGb3JtLHJlZjp0aGlzLnNhdmVSZWZ9KSl9fSx7a2V5OiJuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHAuYSkodGhpcy5jb250ZXh0LHRoaXMucHJvcHMubmFtZSl9fSx7a2V5OiJkaXJ0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmVmfHx0aGlzLnJlZi5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eX19LHtrZXk6InByaXN0aW5lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLnJlZnx8IXRoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLnByaXN0aW5lKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWY/dGhpcy5yZWYuZ2V0V3JhcHBlZEluc3RhbmNlKCkudmFsdWU6dm9pZCAwfX1dKSxufShhLkNvbXBvbmVudCk7cmV0dXJuIG4ucHJvcFR5cGVzPXtuYW1lOnUuYS5zdHJpbmcuaXNSZXF1aXJlZCxjb21wb25lbnQ6dS5hLmZ1bmMuaXNSZXF1aXJlZCxwcm9wczp1LmEub2JqZWN0LHZhbGlkYXRlOnUuYS5vbmVPZlR5cGUoW3UuYS5mdW5jLHUuYS5hcnJheU9mKHUuYS5mdW5jKV0pLHdhcm46dS5hLm9uZU9mVHlwZShbdS5hLmZ1bmMsdS5hLmFycmF5T2YodS5hLmZ1bmMpXSksd2l0aFJlZjp1LmEuYm9vbH0sbi5jb250ZXh0VHlwZXM9e19yZWR1eEZvcm06dS5hLm9iamVjdH0sbn07dC5hPWJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2NyZWF0ZUZpZWxkQXJyYXlQcm9wcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59dmFyIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scz1mdW5jdGlvbihlLHQsbixzLGksYSl7dmFyIGw9ZS5nZXRJbix1PWEuYXJyYXlJbnNlcnQsYz1hLmFycmF5TW92ZSxkPWEuYXJyYXlQb3AsXz1hLmFycmF5UHVzaCxwPWEuYXJyYXlSZW1vdmUsZj1hLmFycmF5UmVtb3ZlQWxsLG09YS5hcnJheVNoaWZ0LGg9KGEuYXJyYXlTcGxpY2UsYS5hcnJheVN3YXApLGc9YS5hcnJheVVuc2hpZnQsYj1hLmFzeW5jRXJyb3IsRT1hLmRpcnR5LHk9YS5sZW5ndGgsdj1hLnByaXN0aW5lLFQ9YS5zdWJtaXRFcnJvcixBPShhLnN0YXRlLGEuc3VibWl0RmFpbGVkKSxDPWEuc3VibWl0dGluZyxPPWEuc3luY0Vycm9yLFM9YS5zeW5jV2FybmluZyxSPWEudmFsdWUsaj1hLnByb3BzLHg9cihhLFsiYXJyYXlJbnNlcnQiLCJhcnJheU1vdmUiLCJhcnJheVBvcCIsImFycmF5UHVzaCIsImFycmF5UmVtb3ZlIiwiYXJyYXlSZW1vdmVBbGwiLCJhcnJheVNoaWZ0IiwiYXJyYXlTcGxpY2UiLCJhcnJheVN3YXAiLCJhcnJheVVuc2hpZnQiLCJhc3luY0Vycm9yIiwiZGlydHkiLCJsZW5ndGgiLCJwcmlzdGluZSIsInN1Ym1pdEVycm9yIiwic3RhdGUiLCJzdWJtaXRGYWlsZWQiLCJzdWJtaXR0aW5nIiwic3luY0Vycm9yIiwic3luY1dhcm5pbmciLCJ2YWx1ZSIsInByb3BzIl0pLEw9T3x8Ynx8VCxEPVMsdz1zP3QucmVwbGFjZShzKyIuIiwiIik6dCxNPW8oe2ZpZWxkczp7X2lzRmllbGRBcnJheTohMCxmb3JFYWNoOmZ1bmN0aW9uKGUpe3JldHVybihSfHxbXSkuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlKHcrIlsiK24rIl0iLG4sTS5maWVsZHMpfSl9LGdldDppLGdldEFsbDpmdW5jdGlvbigpe3JldHVybiBSfSxpbnNlcnQ6dSxsZW5ndGg6eSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuKFJ8fFtdKS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh3KyJbIituKyJdIixuLE0uZmllbGRzKX0pfSxtb3ZlOmMsbmFtZTp0LHBvcDpmdW5jdGlvbigpe3JldHVybiBkKCksbChSLFN0cmluZyh5LTEpKX0scHVzaDpfLHJlZHVjZTpmdW5jdGlvbihlLHQpe3JldHVybihSfHxbXSkucmVkdWNlKGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZSh0LHcrIlsiK3IrIl0iLHIsTS5maWVsZHMpfSx0KX0scmVtb3ZlOnAscmVtb3ZlQWxsOmYsc2hpZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSgpLGwoUiwiMCIpfSxzd2FwOmgsdW5zaGlmdDpnfSxtZXRhOntkaXJ0eTpFLGVycm9yOkwsZm9ybTpuLHdhcm5pbmc6RCxpbnZhbGlkOiEhTCxwcmlzdGluZTp2LHN1Ym1pdHRpbmc6QyxzdWJtaXRGYWlsZWQ6QSx2YWxpZDohTH19LGoseCk7cmV0dXJuIE19O3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGaWVsZFByb3BzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBzPXQudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWU/byh7fSx0LHtjaGVja2VkOiEhc30pOiJyYWRpbyI9PT1lP28oe30sdCx7Y2hlY2tlZDpyKHMsbiksdmFsdWU6bn0pOiJzZWxlY3QtbXVsdGlwbGUiPT09ZT9vKHt9LHQse3ZhbHVlOnN8fFtdfSk6ImZpbGUiPT09ZT9vKHt9LHQse3ZhbHVlOnN8fHZvaWQgMH0pOnR9LGk9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUuZ2V0SW4sYT1lLnRvSlMsbD1lLmRlZXBFcXVhbCx1PW4uYXN5bmNFcnJvcixjPW4uYXN5bmNWYWxpZGF0aW5nLGQ9bi5vbkJsdXIsXz1uLm9uQ2hhbmdlLHA9bi5vbkRyb3AsZj1uLm9uRHJhZ1N0YXJ0LG09bi5kaXJ0eSxoPW4uZGlzcGF0Y2gsZz1uLm9uRm9jdXMsYj1uLmZvcm0sRT1uLmZvcm1hdCx5PW4uaW5pdGlhbCx2PShuLnBhcnNlLG4ucHJpc3RpbmUpLFQ9bi5wcm9wcyxBPW4uc3RhdGUsQz1uLnN1Ym1pdEVycm9yLE89bi5zdWJtaXRGYWlsZWQsUz1uLnN1Ym1pdHRpbmcsUj1uLnN5bmNFcnJvcixqPW4uc3luY1dhcm5pbmcseD0obi52YWxpZGF0ZSxuLnZhbHVlKSxMPW4uX3ZhbHVlLEQ9KG4ud2FybixyKG4sWyJhc3luY0Vycm9yIiwiYXN5bmNWYWxpZGF0aW5nIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkRyb3AiLCJvbkRyYWdTdGFydCIsImRpcnR5IiwiZGlzcGF0Y2giLCJvbkZvY3VzIiwiZm9ybSIsImZvcm1hdCIsImluaXRpYWwiLCJwYXJzZSIsInByaXN0aW5lIiwicHJvcHMiLCJzdGF0ZSIsInN1Ym1pdEVycm9yIiwic3VibWl0RmFpbGVkIiwic3VibWl0dGluZyIsInN5bmNFcnJvciIsInN5bmNXYXJuaW5nIiwidmFsaWRhdGUiLCJ2YWx1ZSIsIl92YWx1ZSIsIndhcm4iXSkpLHc9Unx8dXx8QyxNPWosaz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PT1uKXJldHVybiBlO3ZhciByPW51bGw9PWU/IiI6ZTtyZXR1cm4gbj9uKGUsdCk6cn0oeCxFKTtyZXR1cm57aW5wdXQ6cyhELnR5cGUse25hbWU6dCxvbkJsdXI6ZCxvbkNoYW5nZTpfLG9uRHJhZ1N0YXJ0OmYsb25Ecm9wOnAsb25Gb2N1czpnLHZhbHVlOmt9LEwsbCksbWV0YTpvKHt9LGEoQSkse2FjdGl2ZTohKCFBfHwhaShBLCJhY3RpdmUiKSksYXN5bmNWYWxpZGF0aW5nOmMsYXV0b2ZpbGxlZDohKCFBfHwhaShBLCJhdXRvZmlsbGVkIikpLGRpcnR5Om0sZGlzcGF0Y2g6aCxlcnJvcjp3LGZvcm06Yixpbml0aWFsOnksd2FybmluZzpNLGludmFsaWQ6ISF3LHByaXN0aW5lOnYsc3VibWl0dGluZzohIVMsc3VibWl0RmFpbGVkOiEhTyx0b3VjaGVkOiEoIUF8fCFpKEEsInRvdWNoZWQiKSksdmFsaWQ6IXcsdmlzaXRlZDohKCFBfHwhaShBLCJ2aXNpdGVkIikpfSksY3VzdG9tOm8oe30sRCxUKX19O3QuYT1pfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGaWVsZHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGE9KG4ubihpKSxuKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikpLGw9bi5uKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSxjPW4ubih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvQ29ubmVjdGVkRmllbGRzLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvc2hhbGxvd0NvbXBhcmUuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvcHJlZml4TmFtZS5qcyIpLG09T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxnPWZ1bmN0aW9uKGUpe3JldHVybiBlP0FycmF5LmlzQXJyYXkoZSl8fGUuX2lzRmllbGRBcnJheT92b2lkIDA6bmV3IEVycm9yKCdJbnZhbGlkIHByb3AgIm5hbWVzIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTpuZXcgRXJyb3IoJ05vICJuYW1lcyIgcHJvcCB3YXMgc3BlY2lmaWVkIDxGaWVsZHMvPicpfSxiPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChkLmEpKGUpLG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe3IodGhpcyxuKTt2YXIgcz1vKHRoaXMsKG4uX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLmNhbGwodGhpcyxlLHQpKTtpZighdC5fcmVkdXhGb3JtKXRocm93IG5ldyBFcnJvcigiRmllbGRzIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpIik7cmV0dXJuIHN9cmV0dXJuIHMobixlKSxoKG4sW3trZXk6InNob3VsZENvbXBvbmVudFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChfLmEpKHRoaXMsZSl9fSx7a2V5OiJjb21wb25lbnRXaWxsTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9Zyh0aGlzLnByb3BzLm5hbWVzKTtpZihlKXRocm93IGU7dmFyIHQ9dGhpcy5jb250ZXh0LG49dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbihlLCJGaWVsZCIpfSl9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXtpZighcC5hLmRlZXBFcXVhbCh0aGlzLnByb3BzLm5hbWVzLGUubmFtZXMpKXt2YXIgdD10aGlzLmNvbnRleHQsbj10Ll9yZWR1eEZvcm0scj1uLnJlZ2lzdGVyLG89bi51bnJlZ2lzdGVyO3RoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbyhPYmplY3QoZi5hKSh0LGUpKX0pLGUubmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gcihPYmplY3QoZi5hKSh0LGUpLCJGaWVsZCIpfSl9fX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHQ9ZS5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7dGhpcy5wcm9wcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0KE9iamVjdChmLmEpKGUsbikpfSl9fSx7a2V5OiJnZXRSZW5kZXJlZENvbXBvbmVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYygpKHRoaXMucHJvcHMud2l0aFJlZiwiSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksIHlvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGRzIiksdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dDtyZXR1cm4gT2JqZWN0KGkuY3JlYXRlRWxlbWVudCkodCxtKHt9LHRoaXMucHJvcHMse25hbWVzOnRoaXMucHJvcHMubmFtZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZi5hKShlLHQpfSksX3JlZHV4Rm9ybTp0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybSxyZWY6ImNvbm5lY3RlZCJ9KSl9fSx7a2V5OiJuYW1lcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0O3JldHVybiB0aGlzLnByb3BzLm5hbWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGYuYSkoZSx0KX0pfX0se2tleToiZGlydHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzRGlydHkoKX19LHtrZXk6InByaXN0aW5lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXJ0eX19LHtrZXk6InZhbHVlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQmJnRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCl9fV0pLG59KGkuQ29tcG9uZW50KTtyZXR1cm4gbi5wcm9wVHlwZXM9e25hbWVzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcoZVt0XSl9LGNvbXBvbmVudDpsLmEub25lT2ZUeXBlKFtsLmEuZnVuYyxsLmEuc3RyaW5nXSkuaXNSZXF1aXJlZCxmb3JtYXQ6bC5hLmZ1bmMscGFyc2U6bC5hLmZ1bmMscHJvcHM6bC5hLm9iamVjdCx3aXRoUmVmOmwuYS5ib29sfSxuLmNvbnRleHRUeXBlcz17X3JlZHV4Rm9ybTpsLmEub2JqZWN0fSxufTt0LmE9Yn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlRm9ybVZhbHVlU2VsZWN0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKSxvPW4ubihyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksaT1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEluO3JldHVybiBmdW5jdGlvbihlLG4pe28oKShlLCJGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIik7dmFyIHI9bnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwiZm9ybSIpfTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1BcnJheShpPjE/aS0xOjApLGw9MTtsPGk7bCsrKWFbbC0xXT1hcmd1bWVudHNbbF07cmV0dXJuIG8oKShhLmxlbmd0aCwiTm8gZmllbGRzIHNwZWNpZmllZCIpLDE9PT1hLmxlbmd0aD90KHIobiksZSsiLnZhbHVlcy4iK2FbMF0pOmEucmVkdWNlKGZ1bmN0aW9uKG8saSl7dmFyIGE9dChyKG4pLGUrIi52YWx1ZXMuIitpKTtyZXR1cm4gdm9pZCAwPT09YT9vOnMuYS5zZXRJbihvLGksYSl9LHt9KX19fTt0LmE9aX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlRm9ybVZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBhKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWFwVmFsdWVzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcXVhbC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRW1wdHkuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksXz1uLm4oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZj1uLm4ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy91dGlsL3ByZWZpeE5hbWUuanMiKSxnPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksRT1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEluO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxkPUFycmF5KG4+MT9uLTE6MCkscD0xO3A8bjtwKyspZFtwLTFdPWFyZ3VtZW50c1twXTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHA9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gZihlLHQpe3ModGhpcyxmKTt2YXIgbj1pKHRoaXMsKGYuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZikpLmNhbGwodGhpcyxlLHQpKTtpZighdC5fcmVkdXhGb3JtKXRocm93IG5ldyBFcnJvcigiZm9ybVZhbHVlcygpIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSZWFjdCB0cmVlIGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpIik7cmV0dXJuIG4udXBkYXRlQ29tcG9uZW50KGUpLG59cmV0dXJuIGEoZixwKSxiKGYsW3trZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiZ0aGlzLnVwZGF0ZUNvbXBvbmVudCh0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLkNvbXBvbmVudDtyZXR1cm4gXy5hLmNyZWF0ZUVsZW1lbnQoZSxnKHtzZWN0aW9uUHJlZml4OnRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXh9LHRoaXMucHJvcHMpKX19LHtrZXk6InVwZGF0ZUNvbXBvbmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSh0KTplO2lmKG49InN0cmluZyI9PXR5cGVvZiByP2QucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dCxlfSxvKHt9LHIscikpOnIsT2JqZWN0KGMuYSkobikpdGhyb3cgbmV3IEVycm9yKCJmb3JtVmFsdWVzKCk6IFlvdSBtdXN0IHNwZWNpZnkgdmFsdWVzIHRvIGdldCBhcyBmb3JtVmFsdWVzKG5hbWUxLCBuYW1lMiwgLi4uKSBvciBmb3JtVmFsdWVzKHtwcm9wTmFtZTE6IHByb3BQYXRoMSwgLi4ufSkgb3IgZm9ybVZhbHVlcygocHJvcHMpID0+IG5hbWUpIG9yIGZvcm1WYWx1ZXMoKHByb3BzKSA9PiAoe3Byb3BOYW1lMTogcHJvcFBhdGgxLCAuLi59KSkiKTtPYmplY3QodS5hKShuLHRoaXMuX3ZhbHVlc01hcCl8fCh0aGlzLl92YWx1ZXNNYXA9bix0aGlzLnNldENvbXBvbmVudCgpKX19LHtrZXk6InNldENvbXBvbmVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG89ZnVuY3Rpb24obixyKXt2YXIgbz0oci5zZWN0aW9uUHJlZml4LGUuY29udGV4dC5fcmVkdXhGb3JtLmdldFZhbHVlcykscz1vKCk7cmV0dXJuIE9iamVjdChsLmEpKGUuX3ZhbHVlc01hcCxmdW5jdGlvbihuKXtyZXR1cm4gdChzLE9iamVjdChoLmEpKGUuY29udGV4dCxuKSl9KX07dGhpcy5Db21wb25lbnQ9T2JqZWN0KG0uY29ubmVjdCkobyxmdW5jdGlvbigpe3JldHVybnt9fSkoZnVuY3Rpb24oZSl7dmFyIHQ9KGUuc2VjdGlvblByZWZpeCxyKGUsWyJzZWN0aW9uUHJlZml4Il0pKTtyZXR1cm4gXy5hLmNyZWF0ZUVsZW1lbnQobix0KX0pfX1dKSxmfShfLmEuQ29tcG9uZW50KTtyZXR1cm4gcC5jb250ZXh0VHlwZXM9e19yZWR1eEZvcm06Zi5hLm9iamVjdH0scH19fTt0LmE9RX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlUmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyhlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBlLnBsdWdpbj1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3JldHVybiB0KGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmMscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e3R5cGU6Ik5PTkUifSxvPWZ1bmN0aW9uKG4sbyl7dmFyIHM9XyhuLG8pLGk9ZVtvXShzLHIsXyh0LG8pKTtyZXR1cm4gaSE9PXM/cChuLG8saSk6bn0scz1uKHQsciksaT1yJiZyLm1ldGEmJnIubWV0YS5mb3JtO3JldHVybiBpP2VbaV0/byhzLGkpOnM6T2JqZWN0LmtleXMoZSkucmVkdWNlKG8scyl9KX0sZX12YXIgbixzPWUuZGVlcEVxdWFsLGM9ZS5lbXB0eSxkPWUuZm9yRWFjaCxfPWUuZ2V0SW4scD1lLnNldEluLGY9ZS5kZWxldGVJbixtPWUuZnJvbUpTLGg9ZS5rZXlzLGc9ZS5zaXplLGI9ZS5zb21lLEU9ZS5zcGxpY2UseT1PYmplY3QoYS5hKShlKSx2PU9iamVjdChhLmEpKGwuYSksVD1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2YXIgYT1fKGUsdCsiLiIrbik7cmV0dXJuIGF8fGk/cChlLHQrIi4iK24sRShhLHIsbyxzKSk6ZX0sQT1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2YXIgYT1fKGUsdCksdT1sLmEuZ2V0SW4oYSxuKTtyZXR1cm4gdXx8aT9wKGUsdCxsLmEuc2V0SW4oYSxuLGwuYS5zcGxpY2UodSxyLG8scykpKTplfSxDPVsidmFsdWVzIiwiZmllbGRzIiwic3VibWl0RXJyb3JzIiwiYXN5bmNFcnJvcnMiXSxPPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHM9ZSxpPW51bGwhPW8/Yzp2b2lkIDA7cmV0dXJuIHM9VChzLCJ2YWx1ZXMiLHQsbixyLG8sITApLHM9VChzLCJmaWVsZHMiLHQsbixyLGkpLHM9QShzLCJzeW5jRXJyb3JzIix0LG4scix2b2lkIDApLHM9QShzLCJzeW5jV2FybmluZ3MiLHQsbixyLHZvaWQgMCkscz1UKHMsInN1Ym1pdEVycm9ycyIsdCxuLHIsdm9pZCAwKSxzPVQocywiYXN5bmNFcnJvcnMiLHQsbixyLHZvaWQgMCl9LFM9KG49e30scihuLGkuQVJSQVlfSU5TRVJULGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLHI9bi5maWVsZCxvPW4uaW5kZXgscz10LnBheWxvYWQ7cmV0dXJuIE8oZSxyLG8sMCxzKX0pLHIobixpLkFSUkFZX01PVkUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1ldGEscj1uLmZpZWxkLG89bi5mcm9tLHM9bi50byxpPV8oZSwidmFsdWVzLiIrciksYT1pP2coaSk6MCxsPWU7cmV0dXJuIGEmJkMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lKyIuIityO2lmKF8obCx0KSl7dmFyIG49XyhsLHQrIlsiK28rIl0iKTtsPXAobCx0LEUoXyhsLHQpLG8sMSkpLGw9cChsLHQsRShfKGwsdCkscywwLG4pKX19KSxsfSkscihuLGkuQVJSQVlfUE9QLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkLHI9XyhlLCJ2YWx1ZXMuIituKSxvPXI/ZyhyKTowO3JldHVybiBvP08oZSxuLG8tMSwxKTplfSkscihuLGkuQVJSQVlfUFVTSCxmdW5jdGlvbihlLHQpe3ZhciBuPXQubWV0YS5maWVsZCxyPXQucGF5bG9hZCxvPV8oZSwidmFsdWVzLiIrbikscz1vP2cobyk6MDtyZXR1cm4gTyhlLG4scywwLHIpfSkscihuLGkuQVJSQVlfUkVNT1ZFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLHI9bi5maWVsZCxvPW4uaW5kZXg7cmV0dXJuIE8oZSxyLG8sMSl9KSxyKG4saS5BUlJBWV9SRU1PVkVfQUxMLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkLHI9XyhlLCJ2YWx1ZXMuIituKSxvPXI/ZyhyKTowO3JldHVybiBvP08oZSxuLDAsbyk6ZX0pLHIobixpLkFSUkFZX1NISUZULGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkO3JldHVybiBPKGUsbiwwLDEpfSkscihuLGkuQVJSQVlfU1BMSUNFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLHI9bi5maWVsZCxvPW4uaW5kZXgscz1uLnJlbW92ZU51bSxpPXQucGF5bG9hZDtyZXR1cm4gTyhlLHIsbyxzLGkpfSkscihuLGkuQVJSQVlfU1dBUCxmdW5jdGlvbihlLHQpe3ZhciBuPXQubWV0YSxyPW4uZmllbGQsbz1uLmluZGV4QSxzPW4uaW5kZXhCLGk9ZTtyZXR1cm4gQy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PV8oaSxlKyIuIityKyJbIitvKyJdIiksbj1fKGksZSsiLiIrcisiWyIrcysiXSIpO3ZvaWQgMD09PXQmJnZvaWQgMD09PW58fChpPXAoaSxlKyIuIityKyJbIitvKyJdIixuKSxpPXAoaSxlKyIuIityKyJbIitzKyJdIix0KSl9KSxpfSkscihuLGkuQVJSQVlfVU5TSElGVCxmdW5jdGlvbihlLHQpe3ZhciBuPXQubWV0YS5maWVsZCxyPXQucGF5bG9hZDtyZXR1cm4gTyhlLG4sMCwwLHIpfSkscihuLGkuQVVUT0ZJTEwsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1ldGEuZmllbGQscj10LnBheWxvYWQsbz1lO3JldHVybiBvPXkobywiYXN5bmNFcnJvcnMuIituKSxvPXkobywic3VibWl0RXJyb3JzLiIrbiksbz1wKG8sImZpZWxkcy4iK24rIi5hdXRvZmlsbGVkIiwhMCksbz1wKG8sInZhbHVlcy4iK24scil9KSxyKG4saS5CTFVSLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLHI9bi5maWVsZCxvPW4udG91Y2gscz10LnBheWxvYWQsaT1lO3JldHVybiB2b2lkIDA9PT1fKGksImluaXRpYWwuIityKSYmIiI9PT1zP2k9eShpLCJ2YWx1ZXMuIityKTp2b2lkIDAhPT1zJiYoaT1wKGksInZhbHVlcy4iK3IscykpLHI9PT1fKGksImFjdGl2ZSIpJiYoaT1mKGksImFjdGl2ZSIpKSxpPWYoaSwiZmllbGRzLiIrcisiLmFjdGl2ZSIpLG8mJihpPXAoaSwiZmllbGRzLiIrcisiLnRvdWNoZWQiLCEwKSxpPXAoaSwiYW55VG91Y2hlZCIsITApKSxpfSkscihuLGkuQ0hBTkdFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLHI9bi5maWVsZCxvPW4udG91Y2gscz1uLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsaT10LnBheWxvYWQsYT1lO3JldHVybiB2b2lkIDA9PT1fKGEsImluaXRpYWwuIityKSYmIiI9PT1pP2E9eShhLCJ2YWx1ZXMuIityKTp2b2lkIDAhPT1pJiYoYT1wKGEsInZhbHVlcy4iK3IsaSkpLGE9eShhLCJhc3luY0Vycm9ycy4iK3IpLHN8fChhPXkoYSwic3VibWl0RXJyb3JzLiIrcikpLGE9eShhLCJmaWVsZHMuIityKyIuYXV0b2ZpbGxlZCIpLG8mJihhPXAoYSwiZmllbGRzLiIrcisiLnRvdWNoZWQiLCEwKSxhPXAoYSwiYW55VG91Y2hlZCIsITApKSxhfSkscihuLGkuQ0xFQVJfU1VCTUlULGZ1bmN0aW9uKGUpe3JldHVybiBmKGUsInRyaWdnZXJTdWJtaXQiKX0pLHIobixpLkNMRUFSX1NVQk1JVF9FUlJPUlMsZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdD15KHQsInN1Ym1pdEVycm9ycyIpLHQ9Zih0LCJlcnJvciIpfSkscihuLGkuQ0xFQVJfQVNZTkNfRVJST1IsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1ldGEuZmllbGQ7cmV0dXJuIGYoZSwiYXN5bmNFcnJvcnMuIituKX0pLHIobixpLkNMRUFSX0ZJRUxEUyxmdW5jdGlvbihlLHQpe3ZhciBuPXQubWV0YSxyPW4ua2VlcFRvdWNoZWQsbz1uLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMscz1uLmZpZWxkcyxpPWU7cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2k9eShpLCJ2YWx1ZXMuIitlKSxpPXkoaSwiYXN5bmNFcnJvcnMuIitlKSxvfHwoaT15KGksInN1Ym1pdEVycm9ycy4iK2UpKSxpPXkoaSwiZmllbGRzLiIrZSsiLmF1dG9maWxsZWQiKSxyfHwoaT1mKGksImZpZWxkcy4iK2UrIi50b3VjaGVkIikpfSk7dmFyIGE9YihoKF8oaSwicmVnaXN0ZXJlZEZpZWxkcyIpKSxmdW5jdGlvbihlKXtyZXR1cm4gXyhpLCJmaWVsZHMuIitlKyIudG91Y2hlZCIpfSk7cmV0dXJuIGk9YT9wKGksImFueVRvdWNoZWQiLCEwKTpmKGksImFueVRvdWNoZWQiKX0pLHIobixpLkZPQ1VTLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkLHI9ZSxvPV8oZSwiYWN0aXZlIik7cmV0dXJuIHI9ZihyLCJmaWVsZHMuIitvKyIuYWN0aXZlIikscj1wKHIsImZpZWxkcy4iK24rIi52aXNpdGVkIiwhMCkscj1wKHIsImZpZWxkcy4iK24rIi5hY3RpdmUiLCEwKSxyPXAociwiYWN0aXZlIixuKX0pLHIobixpLklOSVRJQUxJWkUsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj10Lm1ldGEsbz1yLmtlZXBEaXJ0eSxpPXIua2VlcFN1Ym1pdFN1Y2NlZWRlZCxhPXIudXBkYXRlVW5yZWdpc3RlcmVkRmllbGRzLGw9ci5rZWVwVmFsdWVzLHU9bShuKSxmPWMsZz1fKGUsIndhcm5pbmciKTtnJiYoZj1wKGYsIndhcm5pbmciLGcpKTt2YXIgYj1fKGUsInN5bmNXYXJuaW5ncyIpO2ImJihmPXAoZiwic3luY1dhcm5pbmdzIixiKSk7dmFyIEU9XyhlLCJlcnJvciIpO0UmJihmPXAoZiwiZXJyb3IiLEUpKTt2YXIgeT1fKGUsInN5bmNFcnJvcnMiKTt5JiYoZj1wKGYsInN5bmNFcnJvcnMiLHkpKTt2YXIgdj1fKGUsInJlZ2lzdGVyZWRGaWVsZHMiKTt2JiYoZj1wKGYsInJlZ2lzdGVyZWRGaWVsZHMiLHYpKTt2YXIgVD1fKGUsInZhbHVlcyIpLEE9XyhlLCJpbml0aWFsIiksQz11LE89VDtpZihvJiZ2KXtpZighcyhDLEEpKXt2YXIgUz1mdW5jdGlvbihlKXt2YXIgdD1fKEEsZSksbj1fKFQsZSk7aWYocyhuLHQpKXt2YXIgcj1fKEMsZSk7XyhPLGUpIT09ciYmKE89cChPLGUscikpfX07YXx8ZChoKHYpLGZ1bmN0aW9uKGUpe3JldHVybiBTKGUpfSksZChoKEMpLGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PV8oQSxlKSl7dmFyIHQ9XyhDLGUpO089cChPLGUsdCl9YSYmUyhlKX0pfX1lbHNlIE89QztyZXR1cm4gbCYmKGQoaChUKSxmdW5jdGlvbihlKXt2YXIgdD1fKFQsZSk7Tz1wKE8sZSx0KX0pLGQoaChBKSxmdW5jdGlvbihlKXt2YXIgdD1fKEEsZSk7Qz1wKEMsZSx0KX0pKSxpJiZfKGUsInN1Ym1pdFN1Y2NlZWRlZCIpJiYoZj1wKGYsInN1Ym1pdFN1Y2NlZWRlZCIsITApKSxmPXAoZiwidmFsdWVzIixPKSxmPXAoZiwiaW5pdGlhbCIsQyl9KSxyKG4saS5SRUdJU1RFUl9GSUVMRCxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ubmFtZSxvPW4udHlwZSxzPSJyZWdpc3RlcmVkRmllbGRzWyciK3IrIiddIixpPV8oZSxzKTtpZihpKXt2YXIgYT1fKGksImNvdW50IikrMTtpPXAoaSwiY291bnQiLGEpfWVsc2UgaT1tKHtuYW1lOnIsdHlwZTpvLGNvdW50OjF9KTtyZXR1cm4gcChlLHMsaSl9KSxyKG4saS5SRVNFVCxmdW5jdGlvbihlKXt2YXIgdD1jLG49XyhlLCJyZWdpc3RlcmVkRmllbGRzIik7biYmKHQ9cCh0LCJyZWdpc3RlcmVkRmllbGRzIixuKSk7dmFyIHI9XyhlLCJpbml0aWFsIik7cmV0dXJuIHImJih0PXAodCwidmFsdWVzIixyKSx0PXAodCwiaW5pdGlhbCIscikpLHR9KSxyKG4saS5SRVNFVF9TRUNUSU9OLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLnNlY3Rpb25zLHI9ZTtuLmZvckVhY2goZnVuY3Rpb24odCl7cj15KHIsImFzeW5jRXJyb3JzLiIrdCkscj15KHIsInN1Ym1pdEVycm9ycy4iK3QpLHI9eShyLCJmaWVsZHMuIit0KTt2YXIgbj1fKGUsImluaXRpYWwuIit0KTtyPW4/cChyLCJ2YWx1ZXMuIit0LG4pOnkociwidmFsdWVzLiIrdCl9KTt2YXIgbz1iKGgoXyhyLCJyZWdpc3RlcmVkRmllbGRzIikpLGZ1bmN0aW9uKGUpe3JldHVybiBfKHIsImZpZWxkcy4iK2UrIi50b3VjaGVkIil9KTtyZXR1cm4gcj1vP3AociwiYW55VG91Y2hlZCIsITApOmYociwiYW55VG91Y2hlZCIpfSkscihuLGkuU1VCTUlULGZ1bmN0aW9uKGUpe3JldHVybiBwKGUsInRyaWdnZXJTdWJtaXQiLCEwKX0pLHIobixpLlNUQVJUX0FTWU5DX1ZBTElEQVRJT04sZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1ldGEuZmllbGQ7cmV0dXJuIHAoZSwiYXN5bmNWYWxpZGF0aW5nIixufHwhMCl9KSxyKG4saS5TVEFSVF9TVUJNSVQsZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSwic3VibWl0dGluZyIsITApfSkscihuLGkuU1RPUF9BU1lOQ19WQUxJREFUSU9OLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9ZTtpZihyPWYociwiYXN5bmNWYWxpZGF0aW5nIiksbiYmT2JqZWN0LmtleXMobikubGVuZ3RoKXt2YXIgcz1uLl9lcnJvcixpPW8obixbIl9lcnJvciJdKTtzJiYocj1wKHIsImVycm9yIixzKSksT2JqZWN0LmtleXMoaSkubGVuZ3RoJiYocj1wKHIsImFzeW5jRXJyb3JzIixtKGkpKSl9ZWxzZSByPWYociwiZXJyb3IiKSxyPWYociwiYXN5bmNFcnJvcnMiKTtyZXR1cm4gcn0pLHIobixpLlNUT1BfU1VCTUlULGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9ZTtpZihyPWYociwic3VibWl0dGluZyIpLHI9ZihyLCJzdWJtaXRGYWlsZWQiKSxyPWYociwic3VibWl0U3VjY2VlZGVkIiksbiYmT2JqZWN0LmtleXMobikubGVuZ3RoKXt2YXIgcz1uLl9lcnJvcixpPW8obixbIl9lcnJvciJdKTtyPXM/cChyLCJlcnJvciIscyk6ZihyLCJlcnJvciIpLHI9T2JqZWN0LmtleXMoaSkubGVuZ3RoP3Aociwic3VibWl0RXJyb3JzIixtKGkpKTpmKHIsInN1Ym1pdEVycm9ycyIpLHI9cChyLCJzdWJtaXRGYWlsZWQiLCEwKX1lbHNlIHI9ZihyLCJlcnJvciIpLHI9ZihyLCJzdWJtaXRFcnJvcnMiKTtyZXR1cm4gcn0pLHIobixpLlNFVF9TVUJNSVRfRkFJTEVELGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkcyxyPWU7cmV0dXJuIHI9cChyLCJzdWJtaXRGYWlsZWQiLCEwKSxyPWYociwic3VibWl0U3VjY2VlZGVkIikscj1mKHIsInN1Ym1pdHRpbmciKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHI9cChyLCJmaWVsZHMuIitlKyIudG91Y2hlZCIsITApfSksbi5sZW5ndGgmJihyPXAociwiYW55VG91Y2hlZCIsITApKSxyfSkscihuLGkuU0VUX1NVQk1JVF9TVUNDRUVERUQsZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdD1mKHQsInN1Ym1pdEZhaWxlZCIpLHQ9cCh0LCJzdWJtaXRTdWNjZWVkZWQiLCEwKX0pLHIobixpLlRPVUNILGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5tZXRhLmZpZWxkcyxyPWU7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gcj1wKHIsImZpZWxkcy4iK2UrIi50b3VjaGVkIiwhMCl9KSxyPXAociwiYW55VG91Y2hlZCIsITApfSkscihuLGkuVU5SRUdJU1RFUl9GSUVMRCxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ubmFtZSxvPW4uZGVzdHJveU9uVW5tb3VudCxpPWUsYT0icmVnaXN0ZXJlZEZpZWxkc1snIityKyInXSIsdT1fKGksYSk7aWYoIXUpcmV0dXJuIGk7dmFyIGQ9Xyh1LCJjb3VudCIpLTE7aWYoZDw9MCYmbyl7aT1mKGksYSkscyhfKGksInJlZ2lzdGVyZWRGaWVsZHMiKSxjKSYmKGk9ZihpLCJyZWdpc3RlcmVkRmllbGRzIikpO3ZhciBtPV8oaSwic3luY0Vycm9ycyIpO20mJihtPXYobSxyKSxpPWwuYS5kZWVwRXF1YWwobSxsLmEuZW1wdHkpP2YoaSwic3luY0Vycm9ycyIpOnAoaSwic3luY0Vycm9ycyIsbSkpO3ZhciBoPV8oaSwic3luY1dhcm5pbmdzIik7aCYmKGg9dihoLHIpLGk9bC5hLmRlZXBFcXVhbChoLGwuYS5lbXB0eSk/ZihpLCJzeW5jV2FybmluZ3MiKTpwKGksInN5bmNXYXJuaW5ncyIsaCkpLGk9eShpLCJzdWJtaXRFcnJvcnMuIityKSxpPXkoaSwiYXN5bmNFcnJvcnMuIityKX1lbHNlIHU9cCh1LCJjb3VudCIsZCksaT1wKGksYSx1KTtyZXR1cm4gaX0pLHIobixpLlVOVE9VQ0gsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm1ldGEuZmllbGRzLHI9ZTtuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZihyLCJmaWVsZHMuIitlKyIudG91Y2hlZCIpfSk7dmFyIG89YihoKF8ociwicmVnaXN0ZXJlZEZpZWxkcyIpKSxmdW5jdGlvbihlKXtyZXR1cm4gXyhyLCJmaWVsZHMuIitlKyIudG91Y2hlZCIpfSk7cmV0dXJuIHI9bz9wKHIsImFueVRvdWNoZWQiLCEwKTpmKHIsImFueVRvdWNoZWQiKX0pLHIobixpLlVQREFURV9TWU5DX0VSUk9SUyxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4uc3luY0Vycm9ycyxvPW4uZXJyb3Iscz1lO3JldHVybiBvPyhzPXAocywiZXJyb3IiLG8pLHM9cChzLCJzeW5jRXJyb3IiLCEwKSk6KHM9ZihzLCJlcnJvciIpLHM9ZihzLCJzeW5jRXJyb3IiKSkscz1PYmplY3Qua2V5cyhyKS5sZW5ndGg/cChzLCJzeW5jRXJyb3JzIixyKTpmKHMsInN5bmNFcnJvcnMiKX0pLHIobixpLlVQREFURV9TWU5DX1dBUk5JTkdTLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi5zeW5jV2FybmluZ3Msbz1uLndhcm5pbmcscz1lO3JldHVybiBzPW8/cChzLCJ3YXJuaW5nIixvKTpmKHMsIndhcm5pbmciKSxzPU9iamVjdC5rZXlzKHIpLmxlbmd0aD9wKHMsInN5bmNXYXJuaW5ncyIscik6ZihzLCJzeW5jV2FybmluZ3MiKX0pLG4pLFI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06Yyx0PWFyZ3VtZW50c1sxXSxuPVNbdC50eXBlXTtyZXR1cm4gbj9uKGUsdCk6ZX07cmV0dXJuIHQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e3R5cGU6Ik5PTkUifSxyPW4mJm4ubWV0YSYmbi5tZXRhLmZvcm07aWYoIXJ8fCF1KG4pKXJldHVybiB0O2lmKG4udHlwZT09PWkuREVTVFJPWSYmbi5tZXRhJiZuLm1ldGEuZm9ybSlyZXR1cm4gbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHkoZSx0KX0sdCk7dmFyIG89Xyh0LHIpLHM9ZShvLG4pO3JldHVybiBzPT09bz90OnAodCxyLHMpfX0oUikpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvYWN0aW9uVHlwZXMuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZGVsZXRlSW5XaXRoQ2xlYW5VcC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnR5cGUmJmUudHlwZS5sZW5ndGg+aS5wcmVmaXgubGVuZ3RoJiZlLnR5cGUuc3Vic3RyaW5nKDAsaS5wcmVmaXgubGVuZ3RoKT09PWkucHJlZml4fTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlUmVkdXhGb3JtLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufXZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZXJnZS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL21hcFZhbHVlcy5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiKSxkPW4ubihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIikscD1uLm4oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9pcy1wcm9taXNlL2luZGV4LmpzIiksbT1uLm4oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZz1uLm4oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEU9KG4ubihiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2FjdGlvbnMuanMiKSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvYXN5bmNWYWxpZGF0aW9uLmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlLmpzIiksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRWYWxpZGF0ZS5qcyIpLE89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9kZWZhdWx0U2hvdWxkRXJyb3IuanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZGVmYXVsdFNob3VsZFdhcm4uanMiKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZXZlbnRzL3NpbGVuY2VFdmVudC5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9ldmVudHMvc2lsZW5jZUV2ZW50cy5qcyIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9nZW5lcmF0ZVZhbGlkYXRvci5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9oYW5kbGVTdWJtaXQuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2lzVmFsaWQuanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvZ2V0RGlzcGxheU5hbWUuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvdXRpbC9pc0hvdFJlbG9hZGluZy5qcyIpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksUD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxOPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxIPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJmUucHJvdG90eXBlJiYib2JqZWN0Ij09PU4oZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkpfSxGPXYuYS5hcnJheUluc2VydCxCPXYuYS5hcnJheU1vdmUsVT12LmEuYXJyYXlQb3AsRz12LmEuYXJyYXlQdXNoLHo9di5hLmFycmF5UmVtb3ZlLFY9di5hLmFycmF5UmVtb3ZlQWxsLFc9di5hLmFycmF5U2hpZnQsWT12LmEuYXJyYXlTcGxpY2UscT12LmEuYXJyYXlTd2FwLEs9di5hLmFycmF5VW5zaGlmdCxYPXYuYS5ibHVyLCQ9di5hLmNoYW5nZSxRPXYuYS5mb2N1cyxKPWEodi5hLFsiYXJyYXlJbnNlcnQiLCJhcnJheU1vdmUiLCJhcnJheVBvcCIsImFycmF5UHVzaCIsImFycmF5UmVtb3ZlIiwiYXJyYXlSZW1vdmVBbGwiLCJhcnJheVNoaWZ0IiwiYXJyYXlTcGxpY2UiLCJhcnJheVN3YXAiLCJhcnJheVVuc2hpZnQiLCJibHVyIiwiY2hhbmdlIiwiZm9jdXMiXSksWj17YXJyYXlJbnNlcnQ6RixhcnJheU1vdmU6QixhcnJheVBvcDpVLGFycmF5UHVzaDpHLGFycmF5UmVtb3ZlOnosYXJyYXlSZW1vdmVBbGw6VixhcnJheVNoaWZ0OlcsYXJyYXlTcGxpY2U6WSxhcnJheVN3YXA6cSxhcnJheVVuc2hpZnQ6S30sZWU9W10uY29uY2F0KGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG49QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbShlKX0oT2JqZWN0LmtleXModi5hKSksWyJhcnJheSIsImFzeW5jRXJyb3JzIiwiaW5pdGlhbFZhbHVlcyIsInN5bmNFcnJvcnMiLCJzeW5jV2FybmluZ3MiLCJ2YWx1ZXMiLCJyZWdpc3RlcmVkRmllbGRzIl0pLHRlPWZ1bmN0aW9uKGUpe2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBtdXN0IGVpdGhlciBwYXNzIGhhbmRsZVN1Ym1pdCgpIGFuIG9uU3VibWl0IGZ1bmN0aW9uIG9yIHBhc3Mgb25TdWJtaXQgYXMgYSBwcm9wIik7cmV0dXJuIGV9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVlcEVxdWFsLG49ZS5lbXB0eSxjPWUuZ2V0SW4sXz1lLnNldEluLGY9ZS5rZXlzLGg9ZS5mcm9tSlMsdj1PYmplY3QoRC5hKShlKTtyZXR1cm4gZnVuY3Rpb24oRCl7dmFyIE49UCh7dG91Y2hPbkJsdXI6ITAsdG91Y2hPbkNoYW5nZTohMSxwZXJzaXN0ZW50U3VibWl0RXJyb3JzOiExLGRlc3Ryb3lPblVubW91bnQ6ITAsc2hvdWxkQXN5bmNWYWxpZGF0ZTpBLmEsc2hvdWxkVmFsaWRhdGU6Qy5hLHNob3VsZEVycm9yOk8uYSxzaG91bGRXYXJuOlMuYSxlbmFibGVSZWluaXRpYWxpemU6ITEsa2VlcERpcnR5T25SZWluaXRpYWxpemU6ITEsdXBkYXRlVW5yZWdpc3RlcmVkRmllbGRzOiExLGdldEZvcm1TdGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJmb3JtIil9LHB1cmU6ITAsZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiExfSxEKTtyZXR1cm4gZnVuY3Rpb24oQSl7dmFyIEQ9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdSgpe3ZhciB0LG4scixpO28odGhpcyx1KTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGEpLGQ9MDtkPGE7ZCsrKWxbZF09YXJndW1lbnRzW2RdO3JldHVybiBuPXI9cyh0aGlzLCh0PXUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodSkpLmNhbGwuYXBwbHkodCxbdGhpc10uY29uY2F0KGwpKSksci5kZXN0cm95ZWQ9ITEsci5maWVsZENvdW50cz17fSxyLmZpZWxkVmFsaWRhdG9ycz17fSxyLmxhc3RGaWVsZFZhbGlkYXRvcktleXM9W10sci5maWVsZFdhcm5lcnM9e30sci5sYXN0RmllbGRXYXJuZXJLZXlzPVtdLHIuaW5uZXJPblN1Ym1pdD12b2lkIDAsci5zdWJtaXRQcm9taXNlPXZvaWQgMCxyLmdldFZhbHVlcz1mdW5jdGlvbigpe3JldHVybiByLnByb3BzLnZhbHVlc30sci5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMudmFsaWR9LHIuaXNQcmlzdGluZT1mdW5jdGlvbigpe3JldHVybiByLnByb3BzLnByaXN0aW5lfSxyLnJlZ2lzdGVyPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBzPXIuZmllbGRDb3VudHNbZV0saT0oc3x8MCkrMTtyLmZpZWxkQ291bnRzW2VdPWksci5wcm9wcy5yZWdpc3RlckZpZWxkKGUsdCksbiYmKHIuZmllbGRWYWxpZGF0b3JzW2VdPW4pLG8mJihyLmZpZWxkV2FybmVyc1tlXT1vKX0sci51bnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXIuZmllbGRDb3VudHNbZV07aWYoMT09PXQ/ZGVsZXRlIHIuZmllbGRDb3VudHNbZV06bnVsbCE9dCYmKHIuZmllbGRDb3VudHNbZV09dC0xKSwhci5kZXN0cm95ZWQpe3ZhciBuPXIucHJvcHMsbz1uLmRlc3Ryb3lPblVubW91bnQscz1uLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCxpPW4udW5yZWdpc3RlckZpZWxkO298fHM/KGkoZSxvKSxyLmZpZWxkQ291bnRzW2VdfHwoZGVsZXRlIHIuZmllbGRWYWxpZGF0b3JzW2VdLGRlbGV0ZSByLmZpZWxkV2FybmVyc1tlXSkpOmkoZSwhMSl9fSxyLmdldEZpZWxkTGlzdD1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLnJlZ2lzdGVyZWRGaWVsZHMsbj1bXTtpZighdClyZXR1cm4gbjt2YXIgbz1mKHQpO3JldHVybiBlJiZlLmV4Y2x1ZGVGaWVsZEFycmF5JiYobz1vLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iRmllbGRBcnJheSIhPT1jKHQsIlsnIitlKyInXS50eXBlIil9KSksaChvLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLnB1c2godCksZX0sbikpfSxyLmdldFZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXMoci5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ci5maWVsZFZhbGlkYXRvcnNbdF0oKTtuJiYoZVt0XT1uKX0pLGV9LHIuZ2VuZXJhdGVWYWxpZGF0b3I9ZnVuY3Rpb24oKXt2YXIgdD1yLmdldFZhbGlkYXRvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP09iamVjdCh4LmEpKHQsZSk6dm9pZCAwfSxyLmdldFdhcm5lcnM9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXMoci5maWVsZFdhcm5lcnMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ci5maWVsZFdhcm5lcnNbdF0oKTtuJiYoZVt0XT1uKX0pLGV9LHIuZ2VuZXJhdGVXYXJuZXI9ZnVuY3Rpb24oKXt2YXIgdD1yLmdldFdhcm5lcnMoKTtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP09iamVjdCh4LmEpKHQsZSk6dm9pZCAwfSxyLmFzeW5jVmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXIucHJvcHMscz1vLmFzeW5jQmx1ckZpZWxkcyxpPW8uYXN5bmNDaGFuZ2VGaWVsZHMsYT1vLmFzeW5jRXJyb3JzLGw9by5hc3luY1ZhbGlkYXRlLHU9by5kaXNwYXRjaCxkPW8uaW5pdGlhbGl6ZWQscD1vLnByaXN0aW5lLGY9by5zaG91bGRBc3luY1ZhbGlkYXRlLG09by5zdGFydEFzeW5jVmFsaWRhdGlvbixoPW8uc3RvcEFzeW5jVmFsaWRhdGlvbixnPW8uc3luY0Vycm9ycyxiPW8udmFsdWVzLEU9IWU7aWYobCl7dmFyIHk9RT9iOl8oYixlLHQpLHY9RXx8IWMoZyxlKTtpZihmdW5jdGlvbigpe3ZhciB0PXMmJmUmJn5zLmluZGV4T2YoZS5yZXBsYWNlKC9cW1swLTldK1xdL2csIltdIikpLHI9aSYmZSYmfmkuaW5kZXhPZihlLnJlcGxhY2UoL1xbWzAtOV0rXF0vZywiW10iKSksbz0hKHN8fGkpO3JldHVybiBFfHxvfHwoImJsdXIiPT09bj90OnIpfSgpJiZmKHthc3luY0Vycm9yczphLGluaXRpYWxpemVkOmQsdHJpZ2dlcjpFPyJzdWJtaXQiOm4sYmx1cnJlZEZpZWxkOmUscHJpc3RpbmU6cCxzeW5jVmFsaWRhdGlvblBhc3Nlczp2fSkpcmV0dXJuIE9iamVjdChULmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGwoeSx1LHIucHJvcHMsZSl9LG0saCxlKX19LHIuc3VibWl0Q29tcGxldGVkPWZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgci5zdWJtaXRQcm9taXNlLGV9LHIuc3VibWl0RmFpbGVkPWZ1bmN0aW9uKGUpe3Rocm93IGRlbGV0ZSByLnN1Ym1pdFByb21pc2UsZX0sci5saXN0ZW5Ub1N1Ym1pdD1mdW5jdGlvbihlKXtyZXR1cm4gbSgpKGUpPyhyLnN1Ym1pdFByb21pc2U9ZSxlLnRoZW4oci5zdWJtaXRDb21wbGV0ZWQsci5zdWJtaXRGYWlsZWQpKTplfSxyLnN1Ym1pdD1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5vblN1Ym1pdCxvPXQuYmx1cixzPXQuY2hhbmdlLGk9dC5kaXNwYXRjaDtyZXR1cm4gZSYmIU9iamVjdChSLmEpKGUpP09iamVjdChqLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIXIuc3VibWl0UHJvbWlzZSYmci5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoTC5hKSh0ZShlKSxQKHt9LHIucHJvcHMsT2JqZWN0KHkuYmluZEFjdGlvbkNyZWF0b3JzKSh7Ymx1cjpvLGNoYW5nZTpzfSxpKSksci5wcm9wcy52YWxpZEV4Y2VwdFN1Ym1pdCxyLmFzeW5jVmFsaWRhdGUsci5nZXRGaWVsZExpc3Qoe2V4Y2x1ZGVGaWVsZEFycmF5OiEwfSkpKX0pOnIuc3VibWl0UHJvbWlzZT92b2lkIDA6ci5pbm5lck9uU3VibWl0JiZyLmlubmVyT25TdWJtaXQhPT1yLnN1Ym1pdD9yLmlubmVyT25TdWJtaXQoKTpyLmxpc3RlblRvU3VibWl0KE9iamVjdChMLmEpKHRlKG4pLFAoe30sci5wcm9wcyxPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKHtibHVyOm8sY2hhbmdlOnN9LGkpKSxyLnByb3BzLnZhbGlkRXhjZXB0U3VibWl0LHIuYXN5bmNWYWxpZGF0ZSxyLmdldEZpZWxkTGlzdCh7ZXhjbHVkZUZpZWxkQXJyYXk6ITB9KSkpfSxyLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMucmVzZXQoKX0saT1uLHMocixpKX1yZXR1cm4gaSh1LG4pLEkodSxbe2tleToiZ2V0Q2hpbGRDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJue19yZWR1eEZvcm06UCh7fSx0aGlzLnByb3BzLHtnZXRGb3JtU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGMoZS5wcm9wcy5nZXRGb3JtU3RhdGUodCksZS5wcm9wcy5mb3JtKX0sYXN5bmNWYWxpZGF0ZTp0aGlzLmFzeW5jVmFsaWRhdGUsZ2V0VmFsdWVzOnRoaXMuZ2V0VmFsdWVzLHNlY3Rpb25QcmVmaXg6dm9pZCAwLHJlZ2lzdGVyOnRoaXMucmVnaXN0ZXIsdW5yZWdpc3Rlcjp0aGlzLnVucmVnaXN0ZXIscmVnaXN0ZXJJbm5lck9uU3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiBlLmlubmVyT25TdWJtaXQ9dH19KX19fSx7a2V5OiJpbml0SWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO2lmKGUpe2lmKChufHwhZS5pbml0aWFsaXplZCkmJiF0KHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlcyxlLmluaXRpYWxWYWx1ZXMpKXt2YXIgcj1lLmluaXRpYWxpemVkJiZ0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO3RoaXMucHJvcHMuaW5pdGlhbGl6ZShlLmluaXRpYWxWYWx1ZXMscix7bGFzdEluaXRpYWxWYWx1ZXM6dGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLHVwZGF0ZVVucmVnaXN0ZXJlZEZpZWxkczplLnVwZGF0ZVVucmVnaXN0ZXJlZEZpZWxkc30pfX1lbHNlIXRoaXMucHJvcHMuaW5pdGlhbFZhbHVlc3x8dGhpcy5wcm9wcy5pbml0aWFsaXplZCYmIW58fHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsdGhpcy5wcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZSx7dXBkYXRlVW5yZWdpc3RlcmVkRmllbGRzOnRoaXMucHJvcHMudXBkYXRlVW5yZWdpc3RlcmVkRmllbGRzfSl9fSx7a2V5OiJ1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnByb3BzLG89ci5lcnJvcixzPXIudXBkYXRlU3luY0Vycm9ycyxpPSEobiYmT2JqZWN0LmtleXMobikubGVuZ3RofHxvKSxhPSEoZSYmT2JqZWN0LmtleXMoZSkubGVuZ3RofHx0KTtpJiZhfHx3LmEuZGVlcEVxdWFsKG4sZSkmJncuYS5kZWVwRXF1YWwobyx0KXx8cyhlLHQpfX0se2tleToiY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuc3VibWl0dGluZzt0aGlzLnN1Ym1pdFByb21pc2UmJnQmJiFlLnN1Ym1pdHRpbmcmJmRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2V9fSx7a2V5OiJzdWJtaXRJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuY2xlYXJTdWJtaXQ7IXQudHJpZ2dlclN1Ym1pdCYmZS50cmlnZ2VyU3VibWl0JiYobigpLHRoaXMuc3VibWl0KCkpfX0se2tleToic2hvdWxkRXJyb3JGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaG91bGRWYWxpZGF0ZSxuPWUuc2hvdWxkRXJyb3Iscj10IT09Qy5hLG89biE9PU8uYTtyZXR1cm4gciYmIW8/dDpufX0se2tleToidmFsaWRhdGVJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wcm9wcyxyPW4udmFsaWRhdGUsbz1uLnZhbHVlcyxzPXRoaXMuc2hvdWxkRXJyb3JGdW5jdGlvbigpLGk9dGhpcy5nZW5lcmF0ZVZhbGlkYXRvcigpO2lmKHJ8fGkpe3ZhciB1PXZvaWQgMD09PXQsYz1PYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7aWYocyh7dmFsdWVzOm8sbmV4dFByb3BzOnQscHJvcHM6dGhpcy5wcm9wcyxpbml0aWFsUmVuZGVyOnUsbGFzdEZpZWxkVmFsaWRhdG9yS2V5czp0aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMsZmllbGRWYWxpZGF0b3JLZXlzOmMsc3RydWN0dXJlOmV9KSl7dmFyIGQ9dXx8IXQ/dGhpcy5wcm9wczp0LF89T2JqZWN0KGwuYSkocj9yKGQudmFsdWVzLGQpfHx7fTp7fSxpP2koZC52YWx1ZXMsZCl8fHt9Ont9KSxwPV8uX2Vycm9yLGY9YShfLFsiX2Vycm9yIl0pO3RoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cz1jLHRoaXMudXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKGYscCxkLnN5bmNFcnJvcnMpfX1lbHNlIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cz1bXX19LHtrZXk6InVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5wcm9wcyxvPXIud2FybmluZyxzPXIuc3luY1dhcm5pbmdzLGk9ci51cGRhdGVTeW5jV2FybmluZ3MsYT0hKHMmJk9iamVjdC5rZXlzKHMpLmxlbmd0aHx8byksbD0hKGUmJk9iamVjdC5rZXlzKGUpLmxlbmd0aHx8dCk7YSYmbHx8dy5hLmRlZXBFcXVhbChuLGUpJiZ3LmEuZGVlcEVxdWFsKG8sdCl8fGkoZSx0KX19LHtrZXk6InNob3VsZFdhcm5GdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaG91bGRWYWxpZGF0ZSxuPWUuc2hvdWxkV2FybixyPXQhPT1DLmEsbz1uIT09Uy5hO3JldHVybiByJiYhbz90Om59fSx7a2V5OiJ3YXJuSWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLndhcm4sbz1uLnZhbHVlcyxzPXRoaXMuc2hvdWxkV2FybkZ1bmN0aW9uKCksaT10aGlzLmdlbmVyYXRlV2FybmVyKCk7aWYocnx8aSl7dmFyIHU9dm9pZCAwPT09dCxjPU9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtpZihzKHt2YWx1ZXM6byxuZXh0UHJvcHM6dCxwcm9wczp0aGlzLnByb3BzLGluaXRpYWxSZW5kZXI6dSxsYXN0RmllbGRWYWxpZGF0b3JLZXlzOnRoaXMubGFzdEZpZWxkV2FybmVyS2V5cyxmaWVsZFZhbGlkYXRvcktleXM6YyxzdHJ1Y3R1cmU6ZX0pKXt2YXIgZD11fHwhdD90aGlzLnByb3BzOnQsXz1PYmplY3QobC5hKShyP3IoZC52YWx1ZXMsZCk6e30saT9pKGQudmFsdWVzLGQpOnt9KSxwPV8uX3dhcm5pbmcsZj1hKF8sWyJfd2FybmluZyJdKTt0aGlzLmxhc3RGaWVsZFdhcm5lcktleXM9Yyx0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKGYscCxkLnN5bmNXYXJuaW5ncyl9fX19LHtrZXk6ImNvbXBvbmVudFdpbGxNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtPYmplY3Qoay5hKSgpfHwodGhpcy5pbml0SWZOZWVkZWQoKSx0aGlzLnZhbGlkYXRlSWZOZWVkZWQoKSx0aGlzLndhcm5JZk5lZWRlZCgpKSxwKCkodGhpcy5wcm9wcy5zaG91bGRWYWxpZGF0ZSwic2hvdWxkVmFsaWRhdGUoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjguMC4wLiBVc2Ugc2hvdWxkV2FybigpIG9yIHNob3VsZEVycm9yKCkgaW5zdGVhZC4iKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuaW5pdElmTmVlZGVkKGUpLHRoaXMudmFsaWRhdGVJZk5lZWRlZChlKSx0aGlzLndhcm5JZk5lZWRlZChlKSx0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKGUpLHRoaXMuc3VibWl0SWZOZWVkZWQoZSk7dmFyIG49ZS5vbkNoYW5nZSxyPWUudmFsdWVzLG89ZS5kaXNwYXRjaDtuJiYhdChyLHRoaXMucHJvcHMudmFsdWVzKSYmbihyLG8sZSx0aGlzLnByb3BzLnZhbHVlcyl9fSx7a2V5OiJzaG91bGRDb21wb25lbnRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYoIXRoaXMucHJvcHMucHVyZSlyZXR1cm4hMDt2YXIgcj1OLmltbXV0YWJsZVByb3BzLG89dm9pZCAwPT09cj9bXTpyO3JldHVybiEhKHRoaXMucHJvcHMuY2hpbGRyZW58fGUuY2hpbGRyZW58fE9iamVjdC5rZXlzKGUpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJufm8uaW5kZXhPZihyKT9uLnByb3BzW3JdIT09ZVtyXTohfmVlLmluZGV4T2YocikmJiF0KG4ucHJvcHNbcl0sZVtyXSl9KSl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtPYmplY3Qoay5hKSgpfHwodGhpcy5pbml0SWZOZWVkZWQodGhpcy5wcm9wcyksdGhpcy52YWxpZGF0ZUlmTmVlZGVkKCksdGhpcy53YXJuSWZOZWVkZWQoKSkscCgpKHRoaXMucHJvcHMuc2hvdWxkVmFsaWRhdGUsInNob3VsZFZhbGlkYXRlKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY4LjAuMC4gVXNlIHNob3VsZFdhcm4oKSBvciBzaG91bGRFcnJvcigpIGluc3RlYWQuIil9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5kZXN0cm95T25Vbm1vdW50LG49ZS5kZXN0cm95O3QmJiFPYmplY3Qoay5hKSgpJiYodGhpcy5kZXN0cm95ZWQ9ITAsbigpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hbnlUb3VjaGVkLG49ZS5hcnJheSxvPShlLmFycmF5SW5zZXJ0LGUuYXJyYXlNb3ZlLGUuYXJyYXlQb3AsZS5hcnJheVB1c2gsZS5hcnJheVJlbW92ZSxlLmFycmF5UmVtb3ZlQWxsLGUuYXJyYXlTaGlmdCxlLmFycmF5U3BsaWNlLGUuYXJyYXlTd2FwLGUuYXJyYXlVbnNoaWZ0LGUuYXN5bmNFcnJvcnMsZS5hc3luY1ZhbGlkYXRlLGUuYXN5bmNWYWxpZGF0aW5nKSxzPWUuYmx1cixpPWUuY2hhbmdlLGw9ZS5jbGVhclN1Ym1pdCx1PWUuZGVzdHJveSxjPShlLmRlc3Ryb3lPblVubW91bnQsZS5mb3JjZVVucmVnaXN0ZXJPblVubW91bnQsZS5kaXJ0eSksZD1lLmRpc3BhdGNoLF89KGUuZW5hYmxlUmVpbml0aWFsaXplLGUuZXJyb3IpLHA9KGUuZm9jdXMsZS5mb3JtKSxmPShlLmdldEZvcm1TdGF0ZSxlLmluaXRpYWxpemUpLG09ZS5pbml0aWFsaXplZCxoPWUuaW5pdGlhbFZhbHVlcyxnPWUuaW52YWxpZCxFPShlLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplLGUudXBkYXRlVW5yZWdpc3RlcmVkRmllbGRzLGUucHJpc3RpbmUpLHY9ZS5wcm9wTmFtZXNwYWNlLFQ9KGUucmVnaXN0ZXJlZEZpZWxkcyxlLnJlZ2lzdGVyRmllbGQsZS5yZXNldCksQz1lLnJlc2V0U2VjdGlvbixPPShlLnNldFN1Ym1pdEZhaWxlZCxlLnNldFN1Ym1pdFN1Y2NlZWRlZCxlLnNob3VsZEFzeW5jVmFsaWRhdGUsZS5zaG91bGRWYWxpZGF0ZSxlLnNob3VsZEVycm9yLGUuc2hvdWxkV2FybixlLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLGUuc3RhcnRTdWJtaXQsZS5zdG9wQXN5bmNWYWxpZGF0aW9uLGUuc3RvcFN1Ym1pdCxlLnN1Ym1pdHRpbmcpLFM9ZS5zdWJtaXRGYWlsZWQsUj1lLnN1Ym1pdFN1Y2NlZWRlZCxqPWUudG91Y2gseD0oZS50b3VjaE9uQmx1cixlLnRvdWNoT25DaGFuZ2UsZS5wZXJzaXN0ZW50U3VibWl0RXJyb3JzLGUuc3luY0Vycm9ycyxlLnN5bmNXYXJuaW5ncyxlLnVucmVnaXN0ZXJGaWVsZCxlLnVudG91Y2gpLEw9KGUudXBkYXRlU3luY0Vycm9ycyxlLnVwZGF0ZVN5bmNXYXJuaW5ncyxlLnZhbGlkKSxEPShlLnZhbGlkRXhjZXB0U3VibWl0LGUudmFsdWVzLGUud2FybmluZyksdz1hKGUsWyJhbnlUb3VjaGVkIiwiYXJyYXkiLCJhcnJheUluc2VydCIsImFycmF5TW92ZSIsImFycmF5UG9wIiwiYXJyYXlQdXNoIiwiYXJyYXlSZW1vdmUiLCJhcnJheVJlbW92ZUFsbCIsImFycmF5U2hpZnQiLCJhcnJheVNwbGljZSIsImFycmF5U3dhcCIsImFycmF5VW5zaGlmdCIsImFzeW5jRXJyb3JzIiwiYXN5bmNWYWxpZGF0ZSIsImFzeW5jVmFsaWRhdGluZyIsImJsdXIiLCJjaGFuZ2UiLCJjbGVhclN1Ym1pdCIsImRlc3Ryb3kiLCJkZXN0cm95T25Vbm1vdW50IiwiZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50IiwiZGlydHkiLCJkaXNwYXRjaCIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImVycm9yIiwiZm9jdXMiLCJmb3JtIiwiZ2V0Rm9ybVN0YXRlIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVkIiwiaW5pdGlhbFZhbHVlcyIsImludmFsaWQiLCJrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSIsInVwZGF0ZVVucmVnaXN0ZXJlZEZpZWxkcyIsInByaXN0aW5lIiwicHJvcE5hbWVzcGFjZSIsInJlZ2lzdGVyZWRGaWVsZHMiLCJyZWdpc3RlckZpZWxkIiwicmVzZXQiLCJyZXNldFNlY3Rpb24iLCJzZXRTdWJtaXRGYWlsZWQiLCJzZXRTdWJtaXRTdWNjZWVkZWQiLCJzaG91bGRBc3luY1ZhbGlkYXRlIiwic2hvdWxkVmFsaWRhdGUiLCJzaG91bGRFcnJvciIsInNob3VsZFdhcm4iLCJzdGFydEFzeW5jVmFsaWRhdGlvbiIsInN0YXJ0U3VibWl0Iiwic3RvcEFzeW5jVmFsaWRhdGlvbiIsInN0b3BTdWJtaXQiLCJzdWJtaXR0aW5nIiwic3VibWl0RmFpbGVkIiwic3VibWl0U3VjY2VlZGVkIiwidG91Y2giLCJ0b3VjaE9uQmx1ciIsInRvdWNoT25DaGFuZ2UiLCJwZXJzaXN0ZW50U3VibWl0RXJyb3JzIiwic3luY0Vycm9ycyIsInN5bmNXYXJuaW5ncyIsInVucmVnaXN0ZXJGaWVsZCIsInVudG91Y2giLCJ1cGRhdGVTeW5jRXJyb3JzIiwidXBkYXRlU3luY1dhcm5pbmdzIiwidmFsaWQiLCJ2YWxpZEV4Y2VwdFN1Ym1pdCIsInZhbHVlcyIsIndhcm5pbmciXSksTT1QKHthcnJheTpuLGFueVRvdWNoZWQ6dCxhc3luY1ZhbGlkYXRlOnRoaXMuYXN5bmNWYWxpZGF0ZSxhc3luY1ZhbGlkYXRpbmc6b30sT2JqZWN0KHkuYmluZEFjdGlvbkNyZWF0b3JzKSh7Ymx1cjpzLGNoYW5nZTppfSxkKSx7Y2xlYXJTdWJtaXQ6bCxkZXN0cm95OnUsZGlydHk6YyxkaXNwYXRjaDpkLGVycm9yOl8sZm9ybTpwLGhhbmRsZVN1Ym1pdDp0aGlzLnN1Ym1pdCxpbml0aWFsaXplOmYsaW5pdGlhbGl6ZWQ6bSxpbml0aWFsVmFsdWVzOmgsaW52YWxpZDpnLHByaXN0aW5lOkUscmVzZXQ6VCxyZXNldFNlY3Rpb246QyxzdWJtaXR0aW5nOk8sc3VibWl0RmFpbGVkOlMsc3VibWl0U3VjY2VlZGVkOlIsdG91Y2g6aix1bnRvdWNoOngsdmFsaWQ6TCx3YXJuaW5nOkR9KSxrPVAoe30sdj9yKHt9LHYsTSk6TSx3KTtyZXR1cm4gSChBKSYmKGsucmVmPSJ3cmFwcGVkIiksT2JqZWN0KGIuY3JlYXRlRWxlbWVudCkoQSxrKX19XSksdX0oYi5Db21wb25lbnQpO0QuZGlzcGxheU5hbWU9IkZvcm0oIitPYmplY3QoTS5hKShBKSsiKSIsRC5XcmFwcGVkQ29tcG9uZW50PUEsRC5jaGlsZENvbnRleHRUeXBlcz17X3JlZHV4Rm9ybTpnLmEub2JqZWN0LmlzUmVxdWlyZWR9LEQucHJvcFR5cGVzPXtkZXN0cm95T25Vbm1vdW50OmcuYS5ib29sLGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudDpnLmEuYm9vbCxmb3JtOmcuYS5zdHJpbmcuaXNSZXF1aXJlZCxpbml0aWFsVmFsdWVzOmcuYS5vbmVPZlR5cGUoW2cuYS5hcnJheSxnLmEub2JqZWN0XSksZ2V0Rm9ybVN0YXRlOmcuYS5mdW5jLG9uU3VibWl0RmFpbDpnLmEuZnVuYyxvblN1Ym1pdFN1Y2Nlc3M6Zy5hLmZ1bmMscHJvcE5hbWVzcGFjZTpnLmEuc3RyaW5nLHZhbGlkYXRlOmcuYS5mdW5jLHdhcm46Zy5hLmZ1bmMsdG91Y2hPbkJsdXI6Zy5hLmJvb2wsdG91Y2hPbkNoYW5nZTpnLmEuYm9vbCx0cmlnZ2VyU3VibWl0OmcuYS5ib29sLHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6Zy5hLmJvb2wscmVnaXN0ZXJlZEZpZWxkczpnLmEuYW55fTt2YXIgRj1PYmplY3QoRS5jb25uZWN0KShmdW5jdGlvbihlLHIpe3ZhciBvPXIuZm9ybSxzPXIuZ2V0Rm9ybVN0YXRlLGk9ci5pbml0aWFsVmFsdWVzLGE9ci5lbmFibGVSZWluaXRpYWxpemUsbD1yLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplLHU9YyhzKGUpfHxuLG8pfHxuLGQ9Yyh1LCJpbml0aWFsIiksXz0hIWQscD1hJiZfJiYhdChpLGQpLGY9cCYmIWwsbT1pfHxkfHxuO3AmJihtPWR8fG4pO3ZhciBoPWModSwidmFsdWVzIil8fG07ZiYmKGg9bSk7dmFyIGc9Znx8dChtLGgpLGI9Yyh1LCJhc3luY0Vycm9ycyIpLEU9Yyh1LCJzeW5jRXJyb3JzIil8fHt9LHk9Yyh1LCJzeW5jV2FybmluZ3MiKXx8e30sVD1jKHUsInJlZ2lzdGVyZWRGaWVsZHMiKSxBPXYobyxzLCExKShlKSxDPXYobyxzLCEwKShlKSxPPSEhYyh1LCJhbnlUb3VjaGVkIiksUz0hIWModSwic3VibWl0dGluZyIpLFI9ISFjKHUsInN1Ym1pdEZhaWxlZCIpLGo9ISFjKHUsInN1Ym1pdFN1Y2NlZWRlZCIpLHg9Yyh1LCJlcnJvciIpLEw9Yyh1LCJ3YXJuaW5nIiksRD1jKHUsInRyaWdnZXJTdWJtaXQiKTtyZXR1cm57YW55VG91Y2hlZDpPLGFzeW5jRXJyb3JzOmIsYXN5bmNWYWxpZGF0aW5nOmModSwiYXN5bmNWYWxpZGF0aW5nIil8fCExLGRpcnR5OiFnLGVycm9yOngsaW5pdGlhbGl6ZWQ6XyxpbnZhbGlkOiFBLHByaXN0aW5lOmcscmVnaXN0ZXJlZEZpZWxkczpULHN1Ym1pdHRpbmc6UyxzdWJtaXRGYWlsZWQ6UixzdWJtaXRTdWNjZWVkZWQ6aixzeW5jRXJyb3JzOkUsc3luY1dhcm5pbmdzOnksdHJpZ2dlclN1Ym1pdDpELHZhbHVlczpoLHZhbGlkOkEsdmFsaWRFeGNlcHRTdWJtaXQ6Qyx3YXJuaW5nOkx9fSxmdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBlLmJpbmQobnVsbCx0LmZvcm0pfSxyPU9iamVjdCh1LmEpKEosbiksbz1PYmplY3QodS5hKShaLG4pLHM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWCh0LmZvcm0sZSxuLCEhdC50b3VjaE9uQmx1cil9LGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJCh0LmZvcm0sZSxuLCEhdC50b3VjaE9uQ2hhbmdlLCEhdC5wZXJzaXN0ZW50U3VibWl0RXJyb3JzKX0sYT1uKFEpLGw9T2JqZWN0KHkuYmluZEFjdGlvbkNyZWF0b3JzKShyLGUpLGM9e2luc2VydDpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlJbnNlcnQsZSksbW92ZTpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlNb3ZlLGUpLHBvcDpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlQb3AsZSkscHVzaDpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlQdXNoLGUpLHJlbW92ZTpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlSZW1vdmUsZSkscmVtb3ZlQWxsOk9iamVjdCh5LmJpbmRBY3Rpb25DcmVhdG9ycykoby5hcnJheVJlbW92ZUFsbCxlKSxzaGlmdDpPYmplY3QoeS5iaW5kQWN0aW9uQ3JlYXRvcnMpKG8uYXJyYXlTaGlmdCxlKSxzcGxpY2U6T2JqZWN0KHkuYmluZEFjdGlvbkNyZWF0b3JzKShvLmFycmF5U3BsaWNlLGUpLHN3YXA6T2JqZWN0KHkuYmluZEFjdGlvbkNyZWF0b3JzKShvLmFycmF5U3dhcCxlKSx1bnNoaWZ0Ok9iamVjdCh5LmJpbmRBY3Rpb25DcmVhdG9ycykoby5hcnJheVVuc2hpZnQsZSl9LGQ9UCh7fSxsLG8se2JsdXI6cyxjaGFuZ2U6aSxhcnJheTpjLGZvY3VzOmEsZGlzcGF0Y2g6ZX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkfX0sdm9pZCAwLHt3aXRoUmVmOiEwfSksQj1kKCkoRihEKSxBKTtCLmRlZmF1bHRQcm9wcz1OO3ZhciBVPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbyh0aGlzLHQpLHModGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gaSh0LGUpLEkodCxbe2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZiYmdGhpcy5yZWYuZ2V0V3JhcHBlZEluc3RhbmNlKCkuc3VibWl0KCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlZiYmdGhpcy5yZWYuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuaW5pdGlhbFZhbHVlcyxyPWEodCxbImluaXRpYWxWYWx1ZXMiXSk7cmV0dXJuIE9iamVjdChiLmNyZWF0ZUVsZW1lbnQpKEIsUCh7fSxyLHtyZWY6ZnVuY3Rpb24odCl7cmV0dXJuIGUucmVmPXR9LGluaXRpYWxWYWx1ZXM6aChuKX0pKX19LHtrZXk6InZhbGlkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLnJlZnx8IXRoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKSl9fSx7a2V5OiJpbnZhbGlkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy52YWxpZH19LHtrZXk6InByaXN0aW5lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLnJlZnx8IXRoaXMucmVmLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKSl9fSx7a2V5OiJkaXJ0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9fSx7a2V5OiJ2YWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZj90aGlzLnJlZi5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZXMoKTpufX0se2tleToiZmllbGRMaXN0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWY/dGhpcy5yZWYuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0RmllbGRMaXN0KCk6W119fSx7a2V5OiJ3cmFwcGVkSW5zdGFuY2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZiYmdGhpcy5yZWYuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVmcy53cmFwcGVkfX1dKSx0fShiLkNvbXBvbmVudCk7cmV0dXJuIGQoKShVLEEpfX19O3QuYT1uZX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvY3JlYXRlVmFsdWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIikscz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXMoe3Byb3A6InZhbHVlcyIsZ2V0Rm9ybVN0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUsImZvcm0iKX19LGUpLGk9bi5mb3JtLGE9bi5wcm9wLGw9bi5nZXRGb3JtU3RhdGU7cmV0dXJuIE9iamVjdChvLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybiByKHt9LGEsdChsKGUpLGkrIi52YWx1ZXMiKSl9KX19O3QuYT1pfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9kZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLmluaXRpYWxpemVkLG49ZS50cmlnZ2VyLHI9ZS5wcmlzdGluZTtpZighZS5zeW5jVmFsaWRhdGlvblBhc3NlcylyZXR1cm4hMTtzd2l0Y2gobil7Y2FzZSJibHVyIjpjYXNlImNoYW5nZSI6cmV0dXJuITA7Y2FzZSJzdWJtaXQiOnJldHVybiFyfHwhdDtkZWZhdWx0OnJldHVybiExfX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRFcnJvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlcyxuPWUubmV4dFByb3BzLHI9ZS5pbml0aWFsUmVuZGVyLG89ZS5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLHM9ZS5maWVsZFZhbGlkYXRvcktleXMsaT1lLnN0cnVjdHVyZTtyZXR1cm4hIXJ8fCghaS5kZWVwRXF1YWwodCxuJiZuLnZhbHVlcyl8fCFpLmRlZXBFcXVhbChvLHMpKX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRWYWxpZGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlcyxuPWUubmV4dFByb3BzLHI9ZS5pbml0aWFsUmVuZGVyLG89ZS5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLHM9ZS5maWVsZFZhbGlkYXRvcktleXMsaT1lLnN0cnVjdHVyZTtyZXR1cm4hIXJ8fCghaS5kZWVwRXF1YWwodCxuJiZuLnZhbHVlcyl8fCFpLmRlZXBFcXVhbChvLHMpKX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRXYXJuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWVzLG49ZS5uZXh0UHJvcHMscj1lLmluaXRpYWxSZW5kZXIsbz1lLmxhc3RGaWVsZFZhbGlkYXRvcktleXMscz1lLmZpZWxkVmFsaWRhdG9yS2V5cyxpPWUuc3RydWN0dXJlO3JldHVybiEhcnx8KCFpLmRlZXBFcXVhbCh0LG4mJm4udmFsdWVzKXx8IWkuZGVlcEVxdWFsKG8scykpfTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZGVsZXRlSW5XaXRoQ2xlYW5VcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUuZGVlcEVxdWFsLG49ZS5lbXB0eSxyPWUuZ2V0SW4scz1lLmRlbGV0ZUluLGk9ZS5zZXRJbjtyZXR1cm4gZnVuY3Rpb24gZShhLGwpe2lmKCJdIj09PWxbbC5sZW5ndGgtMV0pe3ZhciB1PU9iamVjdChvLmEpKGwpO3UucG9wKCk7cmV0dXJuIHIoYSx1LmpvaW4oIi4iKSk/aShhLGwpOmF9dmFyIGM9YTt2b2lkIDAhPT1yKGEsbCkmJihjPXMoYSxsKSk7dmFyIGQ9bC5sYXN0SW5kZXhPZigiLiIpO2lmKGQ+MCl7dmFyIF89bC5zdWJzdHJpbmcoMCxkKTtpZigiXSIhPT1fW18ubGVuZ3RoLTFdKXt2YXIgcD1yKGMsXyk7aWYodChwLG4pKXJldHVybiBlKGMsXyl9fXJldHVybiBjfX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9QYXRoLmpzIik7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9nZXRWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9pc0V2ZW50LmpzIiksbz1mdW5jdGlvbihlKXt2YXIgdD1bXTtpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3Iuc2VsZWN0ZWQmJnQucHVzaChyLnZhbHVlKX1yZXR1cm4gdH0scz1mdW5jdGlvbihlLHQpe2lmKE9iamVjdChyLmEpKGUpKXtpZighdCYmZS5uYXRpdmVFdmVudCYmdm9pZCAwIT09ZS5uYXRpdmVFdmVudC50ZXh0KXJldHVybiBlLm5hdGl2ZUV2ZW50LnRleHQ7aWYodCYmdm9pZCAwIT09ZS5uYXRpdmVFdmVudClyZXR1cm4gZS5uYXRpdmVFdmVudC50ZXh0O3ZhciBuPWUscz1uLnRhcmdldCxpPXMudHlwZSxhPXMudmFsdWUsbD1zLmNoZWNrZWQsdT1zLmZpbGVzLGM9bi5kYXRhVHJhbnNmZXI7cmV0dXJuImNoZWNrYm94Ij09PWk/ISFsOiJmaWxlIj09PWk/dXx8YyYmYy5maWxlczoic2VsZWN0LW11bHRpcGxlIj09PWk/byhlLnRhcmdldC5vcHRpb25zKTphfXJldHVybiBlfTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZXZlbnRzL2lzRXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUucHJldmVudERlZmF1bHQpfTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZXZlbnRzL29uQ2hhbmdlVmFsdWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9ldmVudHMvZ2V0VmFsdWUuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaXNSZWFjdE5hdGl2ZS5qcyIpLHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm5hbWUscz10LnBhcnNlLGk9dC5ub3JtYWxpemUsYT1PYmplY3Qoci5hKShlLG8uYSk7cmV0dXJuIHMmJihhPXMoYSxuKSksaSYmKGE9aShuLGEpKSxhfTt0LmE9c30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZXZlbnRzL3NpbGVuY2VFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9pc0V2ZW50LmpzIiksbz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3Qoci5hKShlKTtyZXR1cm4gdCYmZS5wcmV2ZW50RGVmYXVsdCgpLHR9O3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9ldmVudHMvc2lsZW5jZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2V2ZW50cy9zaWxlbmNlRXZlbnQuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KG4+MT9uLTE6MCkscz0xO3M8bjtzKyspb1tzLTFdPWFyZ3VtZW50c1tzXTtyZXR1cm4gT2JqZWN0KHIuYSkodCk/ZS5hcHBseSh2b2lkIDAsbyk6ZS5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChvKSl9fTt0LmE9b30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZm9ybVZhbHVlU2VsZWN0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVGb3JtVmFsdWVTZWxlY3Rvci5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZm9ybVZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2NyZWF0ZUZvcm1WYWx1ZXMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dlbmVyYXRlVmFsaWRhdG9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOltlXX0scz1mdW5jdGlvbihlLHQsbixyLHMpe2Zvcih2YXIgaT1vKHIpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGw9aVthXShlLHQsbixzKTtpZihsKXJldHVybiBsfX0saT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKHQsbyl7dmFyIGk9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGw9bih0LGEpLHU9cyhsLHQsbyxlW2FdLGEpO3UmJihpPXIuYS5zZXRJbihpLGEsdSkpfSksaX19O3QuYT1pfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9nZXRGb3JtQXN5bmNFcnJvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybUFzeW5jRXJyb3JzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpO3QuYT1PYmplY3Qoci5hKShvLmEpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9nZXRGb3JtRXJyb3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybUVycm9yLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpO3QuYT1PYmplY3Qoci5hKShvLmEpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9nZXRGb3JtSW5pdGlhbFZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtSW5pdGlhbFZhbHVlcy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZ2V0Rm9ybU1ldGEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybU1ldGEuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1OYW1lcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtTmFtZXMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1TdWJtaXRFcnJvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybVN1Ym1pdEVycm9ycy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZ2V0Rm9ybVN5bmNFcnJvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybVN5bmNFcnJvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1TeW5jV2FybmluZ3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybVN5bmNXYXJuaW5ncy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZ2V0Rm9ybVZhbHVlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtVmFsdWVzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpO3QuYT1PYmplY3Qoci5hKShvLmEpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9oYW5kbGVTdWJtaXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIpLHM9bi5uKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9TdWJtaXNzaW9uRXJyb3IuanMiKSxhPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGw9ZnVuY3Rpb24oZSx0LG4sbyxsKXt2YXIgdT10LmRpc3BhdGNoLGM9dC5vblN1Ym1pdEZhaWwsZD10Lm9uU3VibWl0U3VjY2VzcyxfPXQuc3RhcnRTdWJtaXQscD10LnN0b3BTdWJtaXQsZj10LnNldFN1Ym1pdEZhaWxlZCxtPXQuc2V0U3VibWl0U3VjY2VlZGVkLGg9dC5zeW5jRXJyb3JzLGc9dC5hc3luY0Vycm9ycyxiPXQudG91Y2gsRT10LnZhbHVlcyx5PXQucGVyc2lzdGVudFN1Ym1pdEVycm9ycztpZihiLmFwcGx5KHZvaWQgMCxyKGwpKSxufHx5KXt2YXIgdj1mdW5jdGlvbigpe3ZhciBuPXZvaWQgMDt0cnl7bj1lKEUsdSx0KX1jYXRjaChlKXt2YXIgbz1lIGluc3RhbmNlb2YgaS5hP2UuZXJyb3JzOnZvaWQgMDtpZihwKG8pLGYuYXBwbHkodm9pZCAwLHIobCkpLGMmJmMobyx1LGUsdCksb3x8YylyZXR1cm4gbzt0aHJvdyBlfXJldHVybiBzKCkobik/KF8oKSxuLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHAoKSxtKCksZCYmZChlLHUsdCksZX0sZnVuY3Rpb24oZSl7dmFyIG49ZSBpbnN0YW5jZW9mIGkuYT9lLmVycm9yczp2b2lkIDA7aWYocChuKSxmLmFwcGx5KHZvaWQgMCxyKGwpKSxjJiZjKG4sdSxlLHQpLG58fGMpcmV0dXJuIG47dGhyb3cgZX0pKToobSgpLGQmJmQobix1LHQpLG4pfSxUPW8mJm8oKTtyZXR1cm4gVD9ULnRoZW4oZnVuY3Rpb24oZSl7aWYoZSl0aHJvdyBlO3JldHVybiB2KCl9KS5jYXRjaChmdW5jdGlvbihlKXtyZXR1cm4gZi5hcHBseSh2b2lkIDAscihsKSksYyYmYyhlLHUsbnVsbCx0KSxQcm9taXNlLnJlamVjdChlKX0pOnYoKX1mLmFwcGx5KHZvaWQgMCxyKGwpKTt2YXIgQT1hKHt9LGcsaCk7cmV0dXJuIGMmJmMoQSx1LG51bGwsdCksQX07dC5hPWx9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2hhc0Vycm9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiRmllbGQiOnJldHVybltlLGUrIi5fZXJyb3IiXTtjYXNlIkZpZWxkQXJyYXkiOnJldHVybltlKyIuX2Vycm9yIl07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmllbGQgdHlwZSIpfX0sbz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEluO3JldHVybiBmdW5jdGlvbihlLG4sbyxzKXtpZighbiYmIW8mJiFzKXJldHVybiExO3ZhciBpPXQoZSwibmFtZSIpLGE9dChlLCJ0eXBlIik7cmV0dXJuIHIoaSxhKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl8fHQobyxlKXx8dChzLGUpfSl9fTt0LmE9b30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaGFzU3VibWl0RmFpbGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2hhc1N1Ym1pdEZhaWxlZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaGFzU3VibWl0U3VjY2VlZGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2hhc1N1Ym1pdFN1Y2NlZWRlZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uZCh0LCJhY3Rpb25UeXBlcyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZCh0LCJhcnJheUluc2VydCIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pLG4uZCh0LCJhcnJheU1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQodCwiYXJyYXlQb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQodCwiYXJyYXlQdXNoIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKHQsImFycmF5UmVtb3ZlIixmdW5jdGlvbigpe3JldHVybiBHfSksbi5kKHQsImFycmF5UmVtb3ZlQWxsIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKHQsImFycmF5U2hpZnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQodCwiYXJyYXlTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFd9KSxuLmQodCwiYXJyYXlTd2FwIixmdW5jdGlvbigpe3JldHVybiBZfSksbi5kKHQsImFycmF5VW5zaGlmdCIsZnVuY3Rpb24oKXtyZXR1cm4gcX0pLG4uZCh0LCJhdXRvZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gS30pLG4uZCh0LCJibHVyIixmdW5jdGlvbigpe3JldHVybiBYfSksbi5kKHQsImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gJH0pLG4uZCh0LCJjbGVhckFzeW5jRXJyb3IiLGZ1bmN0aW9uKCl7cmV0dXJuIFF9KSxuLmQodCwiY2xlYXJGaWVsZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIEp9KSxuLmQodCwiY2xlYXJTdWJtaXRFcnJvcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIFp9KSxuLmQodCwiZGVzdHJveSIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQodCwiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRlfSksbi5kKHQsImluaXRpYWxpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lfSksbi5kKHQsInJlZ2lzdGVyRmllbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSksbi5kKHQsInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZCh0LCJyZXNldFNlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIHNlfSksbi5kKHQsInNldFN1Ym1pdEZhaWxlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaWV9KSxuLmQodCwic2V0U3VibWl0U3VjY2VlZGVkIixmdW5jdGlvbigpe3JldHVybiBhZX0pLG4uZCh0LCJzdGFydEFzeW5jVmFsaWRhdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gbGV9KSxuLmQodCwic3RhcnRTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKHQsInN0b3BBc3luY1ZhbGlkYXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSksbi5kKHQsInN0b3BTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKHQsInN1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gX2V9KSxuLmQodCwidG91Y2giLGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSksbi5kKHQsInVucmVnaXN0ZXJGaWVsZCIsZnVuY3Rpb24oKXtyZXR1cm4gZmV9KSxuLmQodCwidW50b3VjaCIsZnVuY3Rpb24oKXtyZXR1cm4gbWV9KSxuLmQodCwidXBkYXRlU3luY1dhcm5pbmdzIixmdW5jdGlvbigpe3JldHVybiBoZX0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvYWN0aW9ucy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9hY3Rpb25UeXBlcy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9kZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZS5qcyIpO24uZCh0LCJkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9kZWZhdWx0U2hvdWxkVmFsaWRhdGUuanMiKTtuLmQodCwiZGVmYXVsdFNob3VsZFZhbGlkYXRlIixmdW5jdGlvbigpe3JldHVybiBpLmF9KTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2RlZmF1bHRTaG91bGRFcnJvci5qcyIpO24uZCh0LCJkZWZhdWx0U2hvdWxkRXJyb3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZGVmYXVsdFNob3VsZFdhcm4uanMiKTtuLmQodCwiZGVmYXVsdFNob3VsZFdhcm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvRm9ybS5qcyIpO24uZCh0LCJGb3JtIixmdW5jdGlvbigpe3JldHVybiB1LmF9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0Zvcm1TZWN0aW9uLmpzIik7bi5kKHQsIkZvcm1TZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBjLmF9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL1N1Ym1pc3Npb25FcnJvci5qcyIpO24uZCh0LCJTdWJtaXNzaW9uRXJyb3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYX0pO3ZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvcHJvcFR5cGVzLmpzIik7bi5kKHQsInByb3BUeXBlcyIsZnVuY3Rpb24oKXtyZXR1cm4gXy5hfSksbi5kKHQsImZpZWxkSW5wdXRQcm9wVHlwZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uZX0pLG4uZCh0LCJmaWVsZE1ldGFQcm9wVHlwZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uZn0pLG4uZCh0LCJmaWVsZFByb3BUeXBlcyIsZnVuY3Rpb24oKXtyZXR1cm4gXy5nfSksbi5kKHQsImZpZWxkQXJyYXlGaWVsZHNQcm9wVHlwZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uYn0pLG4uZCh0LCJmaWVsZEFycmF5TWV0YVByb3BUeXBlcyIsZnVuY3Rpb24oKXtyZXR1cm4gXy5jfSksbi5kKHQsImZpZWxkQXJyYXlQcm9wVHlwZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIF8uZH0pLG4uZCh0LCJmb3JtUHJvcFR5cGVzIixmdW5jdGlvbigpe3JldHVybiBfLmh9KTt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0ZpZWxkLmpzIik7bi5kKHQsIkZpZWxkIixmdW5jdGlvbigpe3JldHVybiBwLmF9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL0ZpZWxkcy5qcyIpO24uZCh0LCJGaWVsZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuYX0pO3ZhciBtPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvRmllbGRBcnJheS5qcyIpO24uZCh0LCJGaWVsZEFycmF5IixmdW5jdGlvbigpe3JldHVybiBtLmF9KTt2YXIgaD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2Zvcm1WYWx1ZVNlbGVjdG9yLmpzIik7bi5kKHQsImZvcm1WYWx1ZVNlbGVjdG9yIixmdW5jdGlvbigpe3JldHVybiBoLmF9KTt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2Zvcm1WYWx1ZXMuanMiKTtuLmQodCwiZm9ybVZhbHVlcyIsZnVuY3Rpb24oKXtyZXR1cm4gZy5hfSk7dmFyIGI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9nZXRGb3JtRXJyb3IuanMiKTtuLmQodCwiZ2V0Rm9ybUVycm9yIixmdW5jdGlvbigpe3JldHVybiBiLmF9KTt2YXIgRT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1OYW1lcy5qcyIpO24uZCh0LCJnZXRGb3JtTmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEUuYX0pO3ZhciB5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZ2V0Rm9ybVZhbHVlcy5qcyIpO24uZCh0LCJnZXRGb3JtVmFsdWVzIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1Jbml0aWFsVmFsdWVzLmpzIik7bi5kKHQsImdldEZvcm1Jbml0aWFsVmFsdWVzIixmdW5jdGlvbigpe3JldHVybiB2LmF9KTt2YXIgVD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1TeW5jRXJyb3JzLmpzIik7bi5kKHQsImdldEZvcm1TeW5jRXJyb3JzIixmdW5jdGlvbigpe3JldHVybiBULmF9KTt2YXIgQT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1NZXRhLmpzIik7bi5kKHQsImdldEZvcm1NZXRhIixmdW5jdGlvbigpe3JldHVybiBBLmF9KTt2YXIgQz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1Bc3luY0Vycm9ycy5qcyIpO24uZCh0LCJnZXRGb3JtQXN5bmNFcnJvcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIEMuYX0pO3ZhciBPPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvZ2V0Rm9ybVN5bmNXYXJuaW5ncy5qcyIpO24uZCh0LCJnZXRGb3JtU3luY1dhcm5pbmdzIixmdW5jdGlvbigpe3JldHVybiBPLmF9KTt2YXIgUz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2dldEZvcm1TdWJtaXRFcnJvcnMuanMiKTtuLmQodCwiZ2V0Rm9ybVN1Ym1pdEVycm9ycyIsZnVuY3Rpb24oKXtyZXR1cm4gUy5hfSk7dmFyIFI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pc0RpcnR5LmpzIik7bi5kKHQsImlzRGlydHkiLGZ1bmN0aW9uKCl7cmV0dXJuIFIuYX0pO3ZhciBqPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaXNJbnZhbGlkLmpzIik7bi5kKHQsImlzSW52YWxpZCIsZnVuY3Rpb24oKXtyZXR1cm4gai5hfSk7dmFyIHg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pc1ByaXN0aW5lLmpzIik7bi5kKHQsImlzUHJpc3RpbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHguYX0pO3ZhciBMPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaXNWYWxpZC5qcyIpO24uZCh0LCJpc1ZhbGlkIixmdW5jdGlvbigpe3JldHVybiBMLmF9KTt2YXIgRD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2lzU3VibWl0dGluZy5qcyIpO24uZCh0LCJpc1N1Ym1pdHRpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIEQuYX0pO3ZhciB3PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaGFzU3VibWl0U3VjY2VlZGVkLmpzIik7bi5kKHQsImhhc1N1Ym1pdFN1Y2NlZWRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdy5hfSk7dmFyIE09bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9oYXNTdWJtaXRGYWlsZWQuanMiKTtuLmQodCwiaGFzU3VibWl0RmFpbGVkIixmdW5jdGlvbigpe3JldHVybiBNLmF9KTt2YXIgaz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3JlZHV4Rm9ybS5qcyIpO24uZCh0LCJyZWR1eEZvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGsuYX0pO3ZhciBJPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvcmVkdWNlci5qcyIpO24uZCh0LCJyZWR1Y2VyIixmdW5jdGlvbigpe3JldHVybiBJLmF9KTt2YXIgUD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3ZhbHVlcy5qcyIpO24uZCh0LCJ2YWx1ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYX0pO3ZhciBOPW8sSD1yLmEuYXJyYXlJbnNlcnQsRj1yLmEuYXJyYXlNb3ZlLEI9ci5hLmFycmF5UG9wLFU9ci5hLmFycmF5UHVzaCxHPXIuYS5hcnJheVJlbW92ZSx6PXIuYS5hcnJheVJlbW92ZUFsbCxWPXIuYS5hcnJheVNoaWZ0LFc9ci5hLmFycmF5U3BsaWNlLFk9ci5hLmFycmF5U3dhcCxxPXIuYS5hcnJheVVuc2hpZnQsSz1yLmEuYXV0b2ZpbGwsWD1yLmEuYmx1ciwkPXIuYS5jaGFuZ2UsUT1yLmEuY2xlYXJBc3luY0Vycm9yLEo9ci5hLmNsZWFyRmllbGRzLFo9ci5hLmNsZWFyU3VibWl0RXJyb3JzLGVlPXIuYS5kZXN0cm95LHRlPXIuYS5mb2N1cyxuZT1yLmEuaW5pdGlhbGl6ZSxyZT1yLmEucmVnaXN0ZXJGaWVsZCxvZT1yLmEucmVzZXQsc2U9ci5hLnJlc2V0U2VjdGlvbixpZT1yLmEuc2V0U3VibWl0RmFpbGVkLGFlPXIuYS5zZXRTdWJtaXRTdWNjZWVkZWQsbGU9ci5hLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLHVlPXIuYS5zdGFydFN1Ym1pdCxjZT1yLmEuc3RvcEFzeW5jVmFsaWRhdGlvbixkZT1yLmEuc3RvcFN1Ym1pdCxfZT1yLmEuc3VibWl0LHBlPXIuYS50b3VjaCxmZT1yLmEudW5yZWdpc3RlckZpZWxkLG1lPXIuYS51bnRvdWNoLGhlPXIuYS51cGRhdGVTeW5jV2FybmluZ3N9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2lzRGlydHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvaXNEaXJ0eS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaXNJbnZhbGlkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2lzSW52YWxpZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaXNQcmlzdGluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9pc1ByaXN0aW5lLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpO3QuYT1PYmplY3Qoci5hKShvLmEpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pc1JlYWN0TmF0aXZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cubmF2aWdhdG9yJiZ3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QmJiJSZWFjdE5hdGl2ZSI9PT13aW5kb3cubmF2aWdhdG9yLnByb2R1Y3Q7dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2lzU3VibWl0dGluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9pc1N1Ym1pdHRpbmcuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2lzVmFsaWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvaXNWYWxpZC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiKTt0LmE9T2JqZWN0KHIuYSkoby5hKX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvcHJvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBFfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLG89bi5uKHIpLHM9by5hLmFueSxpPW8uYS5ib29sLGE9by5hLmZ1bmMsbD1vLmEuc2hhcGUsdT1vLmEuc3RyaW5nLGM9by5hLm9uZU9mVHlwZSxkPW8uYS5vYmplY3QsXz1vLmEubnVtYmVyLHA9e2FueVRvdWNoZWQ6aS5pc1JlcXVpcmVkLGFzeW5jVmFsaWRhdGluZzpjKFtpLHVdKS5pc1JlcXVpcmVkLGRpcnR5OmkuaXNSZXF1aXJlZCxlcnJvcjpzLGZvcm06dS5pc1JlcXVpcmVkLGludmFsaWQ6aS5pc1JlcXVpcmVkLGluaXRpYWxpemVkOmkuaXNSZXF1aXJlZCxpbml0aWFsVmFsdWVzOmQscHJpc3RpbmU6aS5pc1JlcXVpcmVkLHB1cmU6aS5pc1JlcXVpcmVkLHN1Ym1pdHRpbmc6aS5pc1JlcXVpcmVkLHN1Ym1pdEZhaWxlZDppLmlzUmVxdWlyZWQsc3VibWl0U3VjY2VlZGVkOmkuaXNSZXF1aXJlZCx2YWxpZDppLmlzUmVxdWlyZWQsd2FybmluZzpzLGFycmF5Omwoe2luc2VydDphLmlzUmVxdWlyZWQsbW92ZTphLmlzUmVxdWlyZWQscG9wOmEuaXNSZXF1aXJlZCxwdXNoOmEuaXNSZXF1aXJlZCxyZW1vdmU6YS5pc1JlcXVpcmVkLHJlbW92ZUFsbDphLmlzUmVxdWlyZWQsc2hpZnQ6YS5pc1JlcXVpcmVkLHNwbGljZTphLmlzUmVxdWlyZWQsc3dhcDphLmlzUmVxdWlyZWQsdW5zaGlmdDphLmlzUmVxdWlyZWR9KSxhc3luY1ZhbGlkYXRlOmEuaXNSZXF1aXJlZCxhdXRvZmlsbDphLmlzUmVxdWlyZWQsYmx1cjphLmlzUmVxdWlyZWQsY2hhbmdlOmEuaXNSZXF1aXJlZCxjbGVhckFzeW5jRXJyb3I6YS5pc1JlcXVpcmVkLGNsZWFyRmllbGRzOmEuaXNSZXF1aXJlZCxjbGVhclN1Ym1pdEVycm9yczphLmlzUmVxdWlyZWQsZGVzdHJveTphLmlzUmVxdWlyZWQsZGlzcGF0Y2g6YS5pc1JlcXVpcmVkLGhhbmRsZVN1Ym1pdDphLmlzUmVxdWlyZWQsaW5pdGlhbGl6ZTphLmlzUmVxdWlyZWQscmVzZXQ6YS5pc1JlcXVpcmVkLHJlc2V0U2VjdGlvbjphLmlzUmVxdWlyZWQsdG91Y2g6YS5pc1JlcXVpcmVkLHN1Ym1pdDphLmlzUmVxdWlyZWQsdW50b3VjaDphLmlzUmVxdWlyZWQsdHJpZ2dlclN1Ym1pdDppLGNsZWFyU3VibWl0OmEuaXNSZXF1aXJlZH0sZj17Y2hlY2tlZDppLG5hbWU6dS5pc1JlcXVpcmVkLG9uQmx1cjphLmlzUmVxdWlyZWQsb25DaGFuZ2U6YS5pc1JlcXVpcmVkLG9uRHJhZ1N0YXJ0OmEuaXNSZXF1aXJlZCxvbkRyb3A6YS5pc1JlcXVpcmVkLG9uRm9jdXM6YS5pc1JlcXVpcmVkLHZhbHVlOnN9LG09e2FjdGl2ZTppLmlzUmVxdWlyZWQsYXN5bmNWYWxpZGF0aW5nOmkuaXNSZXF1aXJlZCxhdXRvZmlsbGVkOmkuaXNSZXF1aXJlZCxkaXJ0eTppLmlzUmVxdWlyZWQsZGlzcGF0Y2g6YS5pc1JlcXVpcmVkLGVycm9yOnMsZm9ybTp1LmlzUmVxdWlyZWQsaW52YWxpZDppLmlzUmVxdWlyZWQscHJpc3RpbmU6aS5pc1JlcXVpcmVkLHN1Ym1pdHRpbmc6aS5pc1JlcXVpcmVkLHN1Ym1pdEZhaWxlZDppLmlzUmVxdWlyZWQsdG91Y2hlZDppLmlzUmVxdWlyZWQsdmFsaWQ6aS5pc1JlcXVpcmVkLHZpc2l0ZWQ6aS5pc1JlcXVpcmVkLHdhcm5pbmc6dX0saD17ZGlydHk6aS5pc1JlcXVpcmVkLGVycm9yOnMsZm9ybTp1LmlzUmVxdWlyZWQsaW52YWxpZDppLmlzUmVxdWlyZWQscHJpc3RpbmU6aS5pc1JlcXVpcmVkLHN1Ym1pdEZhaWxlZDppLHN1Ym1pdHRpbmc6aSx2YWxpZDppLmlzUmVxdWlyZWQsd2FybmluZzp1fSxnPXtuYW1lOnUuaXNSZXF1aXJlZCxmb3JFYWNoOmEuaXNSZXF1aXJlZCxnZXQ6YS5pc1JlcXVpcmVkLGdldEFsbDphLmlzUmVxdWlyZWQsaW5zZXJ0OmEuaXNSZXF1aXJlZCxsZW5ndGg6Xy5pc1JlcXVpcmVkLG1hcDphLmlzUmVxdWlyZWQsbW92ZTphLmlzUmVxdWlyZWQscG9wOmEuaXNSZXF1aXJlZCxwdXNoOmEuaXNSZXF1aXJlZCxyZWR1Y2U6YS5pc1JlcXVpcmVkLHJlbW92ZTphLmlzUmVxdWlyZWQscmVtb3ZlQWxsOmEuaXNSZXF1aXJlZCxzaGlmdDphLmlzUmVxdWlyZWQsc3dhcDphLmlzUmVxdWlyZWQsdW5zaGlmdDphLmlzUmVxdWlyZWR9LGI9e2lucHV0OmwoZikuaXNSZXF1aXJlZCxtZXRhOmwobSkuaXNSZXF1aXJlZH0sRT17ZmllbGRzOmwoZykuaXNSZXF1aXJlZCxtZXRhOmwoaCkuaXNSZXF1aXJlZH07dC5hPXB9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVSZWR1Y2VyLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9pbmRleC5qcyIpO3QuYT1PYmplY3Qoci5hKShvLmEpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9yZWR1eEZvcm0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVSZWR1eEZvcm0uanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtQXN5bmNFcnJvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbjtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoKG58fGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsImZvcm0iKX0pKHIpLGUrIi5hc3luY0Vycm9ycyIpfX19O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybUVycm9yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KChufHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShyKSxlKyIuZXJyb3IiKX19fTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2dldEZvcm1Jbml0aWFsVmFsdWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KChufHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShyKSxlKyIuaW5pdGlhbCIpfX19O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybU1ldGEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbixuPWUuZW1wdHk7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiB0KChyfHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShvKSxlKyIuZmllbGRzIil8fG59fX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtTmFtZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmdldEluLG49ZS5rZXlzO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG4oKGV8fGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsImZvcm0iKX0pKHIpKX19fXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvZ2V0Rm9ybVN1Ym1pdEVycm9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEluLG49ZS5lbXB0eTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIHQoKHJ8fGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsImZvcm0iKX0pKG8pLGUrIi5zdWJtaXRFcnJvcnMiKXx8bn19fTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2dldEZvcm1TeW5jRXJyb3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW4sbj1lLmVtcHR5O3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4gdCgocnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwiZm9ybSIpfSkobyksZSsiLnN5bmNFcnJvcnMiKXx8bn19fTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2dldEZvcm1TeW5jV2FybmluZ3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbixuPWUuZW1wdHk7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiB0KChyfHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShvKSxlKyIuc3luY1dhcm5pbmdzIil8fG59fX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9nZXRGb3JtVmFsdWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KChufHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShyKSxlKyIudmFsdWVzIil9fX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9oYXNTdWJtaXRGYWlsZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbjtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuISF0KChufHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShyKSxlKyIuc3VibWl0RmFpbGVkIil9fX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9oYXNTdWJtaXRTdWNjZWVkZWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbjtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuISF0KChufHxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCJmb3JtIil9KShyKSxlKyIuc3VibWl0U3VjY2VlZGVkIil9fX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3NlbGVjdG9ycy9pc0RpcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2lzUHJpc3RpbmUuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBvPU9iamVjdChyLmEpKGUpKHQsbik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiFvKGUpfX19O3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvaXNJbnZhbGlkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2lzVmFsaWQuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBvPU9iamVjdChyLmEpKGUpKHQsbik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiFvKGUpfX19O3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvaXNQcmlzdGluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLmRlZXBFcXVhbCxuPWUuZW1wdHkscj1lLmdldEluO3JldHVybiBmdW5jdGlvbihlLG8pe3JldHVybiBmdW5jdGlvbihzKXt2YXIgaT1vfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLCJmb3JtIil9LGE9aShzKSxsPXIoYSxlKyIuaW5pdGlhbCIpfHxuLHU9cihhLGUrIi52YWx1ZXMiKXx8bDtyZXR1cm4gdChsLHUpfX19O3QuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zZWxlY3RvcnMvaXNTdWJtaXR0aW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW47cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiEhdCgobnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwiZm9ybSIpfSkociksZSsiLnN1Ym1pdHRpbmciKX19fTt0LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc2VsZWN0b3JzL2lzVmFsaWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9oYXNFcnJvci5qcyIpLG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRJbixuPWUua2V5cyxvPU9iamVjdChyLmEpKGUpO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhPXJ8fGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsImZvcm0iKX0sbD1hKGkpO2lmKHQobCxlKyIuc3luY0Vycm9yIikpcmV0dXJuITE7aWYoIXMpe2lmKHQobCxlKyIuZXJyb3IiKSlyZXR1cm4hMX12YXIgdT10KGwsZSsiLnN5bmNFcnJvcnMiKSxjPXQobCxlKyIuYXN5bmNFcnJvcnMiKSxkPXM/dm9pZCAwOnQobCxlKyIuc3VibWl0RXJyb3JzIik7aWYoIXUmJiFjJiYhZClyZXR1cm4hMDt2YXIgXz10KGwsZSsiLnJlZ2lzdGVyZWRGaWVsZHMiKTtyZXR1cm4hX3x8IW4oXykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0KF8sIlsnIitlKyInXS5jb3VudCIpPjB9KS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBvKHQoXywiWyciK2UrIiddIiksdSxjLGQpfSl9fX07dC5hPW99LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9kZWVwRXF1YWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXF1YWxXaXRoLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9bi5uKG8pLGk9ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZighZSYmIXQpe3JldHVybihudWxsPT09ZXx8dm9pZCAwPT09ZXx8IiI9PT1lKT09PShudWxsPT09dHx8dm9pZCAwPT09dHx8IiI9PT10KX1yZXR1cm4oIWV8fCF0fHxlLl9lcnJvcj09PXQuX2Vycm9yKSYmKCghZXx8IXR8fGUuX3dhcm5pbmc9PT10Ll93YXJuaW5nKSYmKCFzLmEuaXNWYWxpZEVsZW1lbnQoZSkmJiFzLmEuaXNWYWxpZEVsZW1lbnQodCkmJnZvaWQgMCkpfSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChyLmEpKGUsdCxpKX07dC5hPWF9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9kZWxldGVJbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBvKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG49QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBzKGUsdCl7aWYodm9pZCAwPT09ZXx8bnVsbD09PWV8fHZvaWQgMD09PXR8fG51bGw9PT10KXJldHVybiBlO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkobj4yP24tMjowKSxsPTI7bDxuO2wrKylpW2wtMl09YXJndW1lbnRzW2xdO2lmKGkubGVuZ3RoKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoJ011c3QgYWNjZXNzIGFycmF5IGVsZW1lbnRzIHdpdGggYSBudW1iZXIsIG5vdCAiJytTdHJpbmcodCkrJyIuJyk7dmFyIHU9TnVtYmVyKHQpO2lmKHU8ZS5sZW5ndGgpe3ZhciBjPXMuYXBwbHkodm9pZCAwLFtlJiZlW3VdXS5jb25jYXQobyhpKSkpO2lmKGMhPT1lW3VdKXt2YXIgZD1bXS5jb25jYXQobyhlKSk7cmV0dXJuIGRbdV09YyxkfX1yZXR1cm4gZX1pZih0IGluIGUpe3ZhciBfPXMuYXBwbHkodm9pZCAwLFtlJiZlW3RdXS5jb25jYXQobyhpKSkpO3JldHVybiBlW3RdPT09Xz9lOmEoe30sZSxyKHt9LHQsXykpfXJldHVybiBlfWlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlbGV0ZSBub24tbnVtZXJpY2FsIGluZGV4IGZyb20gYW4gYXJyYXkuIEdpdmVuOiAiJytTdHJpbmcodCkpO3ZhciBwPU51bWJlcih0KTtpZihwPGUubGVuZ3RoKXt2YXIgZj1bXS5jb25jYXQobyhlKSk7cmV0dXJuIGYuc3BsaWNlKHAsMSksZn1yZXR1cm4gZX1pZih0IGluIGUpe3ZhciBtPWEoe30sZSk7cmV0dXJuIGRlbGV0ZSBtW3RdLG19cmV0dXJuIGV9dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvUGF0aC5qcyIpLGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbD1mdW5jdGlvbihlLHQpe3JldHVybiBzLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG8oT2JqZWN0KGkuYSkodCkpKSl9O3QuYT1sfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vZ2V0SW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvUGF0aC5qcyIpLG89ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gZTt2YXIgbj1PYmplY3Qoci5hKSh0KSxvPW4ubGVuZ3RoO2lmKG8pe2Zvcih2YXIgcz1lLGk9MDtpPG8mJnM7KytpKXM9c1tuW2ldXTtyZXR1cm4gc319O3QuYT1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vc3BsaWNlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3N0cnVjdHVyZS9wbGFpbi9nZXRJbi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vc2V0SW4uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2RlZXBFcXVhbC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vZGVsZXRlSW4uanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2tleXMuanMiKSx1PXthbGxvd3NBcnJheUVycm9yczohMCxlbXB0eTp7fSxlbXB0eUxpc3Q6W10sZ2V0SW46by5hLHNldEluOnMuYSxkZWVwRXF1YWw6aS5hLGRlbGV0ZUluOmEuYSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZm9yRWFjaCh0KX0sZnJvbUpTOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxrZXlzOmwuYSxzaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UubGVuZ3RoOjB9LHNvbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zb21lKHQpfSxzcGxpY2U6ci5hLHRvSlM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fTt0LmE9dX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2tleXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT9BcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWV9KTpPYmplY3Qua2V5cyhlKTpbXX10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL3NldEluLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1BhdGguanMiKSxzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGk9ZnVuY3Rpb24gZSh0LG4sbyxpKXtpZihpPj1vLmxlbmd0aClyZXR1cm4gbjt2YXIgYT1vW2ldLGw9dCYmKEFycmF5LmlzQXJyYXkodCk/dFtOdW1iZXIoYSldOnRbYV0pLHU9ZShsLG4sbyxpKzEpO2lmKCF0KXtpZihpc05hTihhKSlyZXR1cm4gcih7fSxhLHUpO3ZhciBjPVtdO3JldHVybiBjW3BhcnNlSW50KGEsMTApXT11LGN9aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGQ9W10uY29uY2F0KHQpO3JldHVybiBkW3BhcnNlSW50KGEsMTApXT11LGR9cmV0dXJuIHMoe30sdCxyKHt9LGEsdSkpfSxhPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaShlLG4sT2JqZWN0KG8uYSkodCksMCl9O3QuYT1hfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9zdHJ1Y3R1cmUvcGxhaW4vc3BsaWNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfXZhciBvPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKGU9ZXx8W10sdDxlLmxlbmd0aCl7aWYodm9pZCAwPT09byYmIW4pe3ZhciBzPVtdLmNvbmNhdChyKGUpKTtyZXR1cm4gcy5zcGxpY2UodCwwLCEwKSxzW3RdPXZvaWQgMCxzfWlmKG51bGwhPW8pe3ZhciBpPVtdLmNvbmNhdChyKGUpKTtyZXR1cm4gaS5zcGxpY2UodCxuLG8pLGl9dmFyIGE9W10uY29uY2F0KHIoZSkpO3JldHVybiBhLnNwbGljZSh0LG4pLGF9aWYobilyZXR1cm4gZTt2YXIgbD1bXS5jb25jYXQocihlKSk7cmV0dXJuIGxbdF09byxsfTt0LmE9b30sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvdXRpbC9ldmVudENvbnN0cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPSJ0ZXh0In0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvdXRpbC9nZXREaXNwbGF5TmFtZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHwiQ29tcG9uZW50In07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvaXNIb3RSZWxvYWRpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4hKHZvaWQgMD09PWV8fCFlLmhvdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuaG90LnN0YXR1c3x8ImFwcGx5IiE9PWUuaG90LnN0YXR1cygpKX07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvcHJlZml4TmFtZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3JlZHV4Rm9ybS5zZWN0aW9uUHJlZml4O3JldHVybiBuP24rIi4iK3Q6dH07dC5hPXJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL3V0aWwvc2hhbGxvd0NvbXBhcmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXF1YWxXaXRoLmpzIiksbz1mdW5jdGlvbihlLHQsbixyLG8scyl7aWYocylyZXR1cm4gZT09PXR9LHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPU9iamVjdChyLmEpKGUucHJvcHMsdCxvKSxpPU9iamVjdChyLmEpKGUuc3RhdGUsbixvKTtyZXR1cm4hc3x8IWl9O3QuYT1zfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy92YWx1ZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9jcmVhdGVWYWx1ZXMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvc3RydWN0dXJlL3BsYWluL2luZGV4LmpzIik7dC5hPU9iamVjdChyLmEpKG8uYSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1pbW11dGFibGUvZGlzdC9jb21iaW5lUmVkdWNlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2ltbXV0YWJsZS9kaXN0L2ltbXV0YWJsZS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L3V0aWxpdGllcy9pbmRleC5qcyIpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/by5kZWZhdWx0Lk1hcCgpOmFyZ3VtZW50c1swXSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gbi53aXRoTXV0YXRpb25zKGZ1bmN0aW9uKG4pe3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1lW3RdLGk9bi5nZXQodCksYT1vKGkscik7KDAscy52YWxpZGF0ZU5leHRTdGF0ZSkoYSx0LHIpLG4uc2V0KHQsYSl9KX0pfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbWJpbmVSZWR1Y2Vycz12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtaW1tdXRhYmxlL2Rpc3QvY29tYmluZVJlZHVjZXJzLmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpO3QuY29tYmluZVJlZHVjZXJzPW8uZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L3V0aWxpdGllcy9nZXRTdGF0ZU5hbWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIkBAcmVkdXgvSU5JVCI9PT1lLnR5cGU/ImluaXRpYWxTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUiOiJwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlciJ9LGUuZXhwb3J0cz10LmRlZmF1bHR9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1pbW11dGFibGUvZGlzdC91dGlsaXRpZXMvZ2V0VW5leHBlY3RlZEludm9jYXRpb25QYXJhbWV0ZXJNZXNzYWdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9pbW11dGFibGUvZGlzdC9pbW11dGFibGUuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1pbW11dGFibGUvZGlzdC91dGlsaXRpZXMvZ2V0U3RhdGVOYW1lLmpzIiksYT1yKGkpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoIXIubGVuZ3RoKXJldHVybiJTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLiI7dmFyIG89KDAsYS5kZWZhdWx0KShuKTtpZighcy5kZWZhdWx0Lkl0ZXJhYmxlLmlzSXRlcmFibGUoZSkpcmV0dXJuIlRoZSAiK28rJyBpcyBvZiB1bmV4cGVjdGVkIHR5cGUuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIGluc3RhbmNlIG9mIEltbXV0YWJsZS5JdGVyYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogIicrci5qb2luKCciLCAiJykrJyIuJzt2YXIgaT1lLmtleVNlcSgpLnRvQXJyYXkoKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaGFzT3duUHJvcGVydHkoZSl9KTtyZXR1cm4gaS5sZW5ndGg+MD8iVW5leHBlY3RlZCAiKygxPT09aS5sZW5ndGg/InByb3BlcnR5IjoicHJvcGVydGllcyIpKycgIicraS5qb2luKCciLCAiJykrJyIgZm91bmQgaW4gJytvKycuIEV4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBrbm93biByZWR1Y2VyIHByb3BlcnR5IG5hbWVzIGluc3RlYWQ6ICInK3Iuam9pbignIiwgIicpKyciLiBVbmV4cGVjdGVkIHByb3BlcnRpZXMgd2lsbCBiZSBpZ25vcmVkLic6bnVsbH0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L3V0aWxpdGllcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsiY3JlYXRlIGluZGV4IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZU5leHRTdGF0ZT10LmdldFVuZXhwZWN0ZWRJbnZvY2F0aW9uUGFyYW1ldGVyTWVzc2FnZT10LmdldFN0YXRlTmFtZT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtaW1tdXRhYmxlL2Rpc3QvdXRpbGl0aWVzL2dldFN0YXRlTmFtZS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L3V0aWxpdGllcy9nZXRVbmV4cGVjdGVkSW52b2NhdGlvblBhcmFtZXRlck1lc3NhZ2UuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1pbW11dGFibGUvZGlzdC91dGlsaXRpZXMvdmFsaWRhdGVOZXh0U3RhdGUuanMiKSx1PXIobCk7dC5nZXRTdGF0ZU5hbWU9cy5kZWZhdWx0LHQuZ2V0VW5leHBlY3RlZEludm9jYXRpb25QYXJhbWV0ZXJNZXNzYWdlPWEuZGVmYXVsdCx0LnZhbGlkYXRlTmV4dFN0YXRlPXUuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L3V0aWxpdGllcy92YWxpZGF0ZU5leHRTdGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcignUmVkdWNlciAiJyt0KyciIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIGhhbmRsaW5nICInK24udHlwZSsnIiBhY3Rpb24uIFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4nKTtyZXR1cm4gbnVsbH0sZS5leHBvcnRzPXQuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9pby5qcyIpO24uZCh0LCJ0YWtlIixmdW5jdGlvbigpe3JldHVybiByLnN9KSxuLmQodCwidGFrZW0iLGZ1bmN0aW9uKCl7cmV0dXJuIHIudn0pLG4uZCh0LCJwdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIubn0pLG4uZCh0LCJhbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pLG4uZCh0LCJyYWNlIixmdW5jdGlvbigpe3JldHVybiByLm99KSxuLmQodCwiY2FsbCIsZnVuY3Rpb24oKXtyZXR1cm4gci5lfSksbi5kKHQsImFwcGx5IixmdW5jdGlvbigpe3JldHVybiByLmN9KSxuLmQodCwiY3BzIixmdW5jdGlvbigpe3JldHVybiByLmh9KSxuLmQodCwiZm9yayIsZnVuY3Rpb24oKXtyZXR1cm4gci5rfSksbi5kKHQsInNwYXduIixmdW5jdGlvbigpe3JldHVybiByLnJ9KSxuLmQodCwiam9pbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5tfSksbi5kKHQsImNhbmNlbCIsZnVuY3Rpb24oKXtyZXR1cm4gci5mfSksbi5kKHQsInNlbGVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gci5wfSksbi5kKHQsImFjdGlvbkNoYW5uZWwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pLG4uZCh0LCJjYW5jZWxsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZ30pLG4uZCh0LCJmbHVzaCIsZnVuY3Rpb24oKXtyZXR1cm4gci5qfSksbi5kKHQsImdldENvbnRleHQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIubH0pLG4uZCh0LCJzZXRDb250ZXh0IixmdW5jdGlvbigpe3JldHVybiByLnF9KSxuLmQodCwidGFrZUV2ZXJ5IixmdW5jdGlvbigpe3JldHVybiByLnR9KSxuLmQodCwidGFrZUxhdGVzdCIsZnVuY3Rpb24oKXtyZXR1cm4gci51fSksbi5kKHQsInRocm90dGxlIixmdW5jdGlvbigpe3JldHVybiByLnd9KX0sIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvbWlkZGxld2FyZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9ydW5TYWdhLmpzIik7bi5kKHQsInJ1blNhZ2EiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvY2hhbm5lbC5qcyIpO24uZCh0LCJFTkQiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pLG4uZCh0LCJldmVudENoYW5uZWwiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZH0pLG4uZCh0LCJjaGFubmVsIixmdW5jdGlvbigpe3JldHVybiBzLmJ9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL2J1ZmZlcnMuanMiKTtuLmQodCwiYnVmZmVycyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9zYWdhSGVscGVycy9pbmRleC5qcyIpO24uZCh0LCJ0YWtlRXZlcnkiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pLG4uZCh0LCJ0YWtlTGF0ZXN0IixmdW5jdGlvbigpe3JldHVybiBhLmN9KSxuLmQodCwidGhyb3R0bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZX0pO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvdXRpbHMuanMiKTtuLmQodCwiZGVsYXkiLGZ1bmN0aW9uKCl7cmV0dXJuIGwubX0pLG4uZCh0LCJDQU5DRUwiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvaW8uanMiKTtuLmQodCwiZGV0YWNoIixmdW5jdGlvbigpe3JldHVybiB1Lml9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvdXRpbHMuanMiKTtuLmQodCwiZWZmZWN0cyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZCh0LCJ1dGlscyIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLHQuZGVmYXVsdD1yLmF9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL2J1ZmZlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMCx0PWFyZ3VtZW50c1sxXSxuPW5ldyBBcnJheShlKSxyPTAsbz0wLHU9MCxjPWZ1bmN0aW9uKHQpe25bb109dCxvPShvKzEpJWUscisrfSxkPWZ1bmN0aW9uKCl7aWYoMCE9cil7dmFyIHQ9blt1XTtyZXR1cm4gblt1XT1udWxsLHItLSx1PSh1KzEpJWUsdH19LF89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W107cjspZS5wdXNoKGQoKSk7cmV0dXJuIGV9O3JldHVybntpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXJ9LHB1dDpmdW5jdGlvbihkKXtpZihyPGUpYyhkKTtlbHNle3ZhciBwPXZvaWQgMDtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcihzKTtjYXNlIGE6bltvXT1kLG89KG8rMSklZSx1PW87YnJlYWs7Y2FzZSBsOnA9MiplLG49XygpLHI9bi5sZW5ndGgsbz1uLmxlbmd0aCx1PTAsbi5sZW5ndGg9cCxlPXAsYyhkKX19fSx0YWtlOmQsZmx1c2g6X319bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIikscz0iQ2hhbm5lbCdzIEJ1ZmZlciBvdmVyZmxvdyEiLGk9MSxhPTMsbD00LHU9e2lzRW1wdHk6by5yLHB1dDpvLnUsdGFrZTpvLnV9LGM9e25vbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZml4ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxpKX0sZHJvcHBpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwyKX0sc2xpZGluZzpmdW5jdGlvbihlKXtyZXR1cm4gcihlLGEpfSxleHBhbmRpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxsKX19fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9jaGFubmVsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKGUpe3JldHVybiBuLnB1c2goZSksZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGEudykobixlKX19ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9bi5zbGljZSgpLHI9MCxvPXQubGVuZ3RoO3I8bztyKyspdFtyXShlKX12YXIgbj1bXTtyZXR1cm57c3Vic2NyaWJlOmUsZW1pdDp0fX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gZSgpe2lmKGkmJnUubGVuZ3RoKXRocm93IE9iamVjdChhLnApKCJDYW5ub3QgaGF2ZSBhIGNsb3NlZCBjaGFubmVsIHdpdGggcGVuZGluZyB0YWtlcnMiKTtpZih1Lmxlbmd0aCYmIXMuaXNFbXB0eSgpKXRocm93IE9iamVjdChhLnApKCJDYW5ub3QgaGF2ZSBwZW5kaW5nIHRha2VycyB3aXRoIG5vbiBlbXB0eSBidWZmZXIiKX1mdW5jdGlvbiB0KHQpe2lmKGUoKSxPYmplY3QoYS5oKSh0LGEucS5ub3RVbmRlZixmKSwhaSl7aWYoIXUubGVuZ3RoKXJldHVybiBzLnB1dCh0KTtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIHI9dVtuXTtpZighclthLmJdfHxyW2EuYl0odCkpcmV0dXJuIHUuc3BsaWNlKG4sMSkscih0KX19fWZ1bmN0aW9uIG4odCl7ZSgpLE9iamVjdChhLmgpKHQsYS5xLmZ1bmMsImNoYW5uZWwudGFrZSdzIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpLGkmJnMuaXNFbXB0eSgpP3QoZCk6cy5pc0VtcHR5KCk/KHUucHVzaCh0KSx0LmNhbmNlbD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoYS53KSh1LHQpfSk6dChzLnRha2UoKSl9ZnVuY3Rpb24gcih0KXtpZihlKCksT2JqZWN0KGEuaCkodCxhLnEuZnVuYywiY2hhbm5lbC5mbHVzaCcgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIiksaSYmcy5pc0VtcHR5KCkpcmV0dXJuIHZvaWQgdChkKTt0KHMuZmx1c2goKSl9ZnVuY3Rpb24gbygpe2lmKGUoKSwhaSYmKGk9ITAsdS5sZW5ndGgpKXt2YXIgdD11O3U9W107Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKXRbbl0oZCl9fXZhciBzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpsLmEuZml4ZWQoKSxpPSExLHU9W107cmV0dXJuIE9iamVjdChhLmgpKHMsYS5xLmJ1ZmZlcixwKSx7dGFrZTpuLHB1dDp0LGZsdXNoOnIsY2xvc2U6byxnZXQgX190YWtlcnNfXygpe3JldHVybiB1fSxnZXQgX19jbG9zZWRfXygpe3JldHVybiBpfX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5hLm5vbmUoKSxuPWFyZ3VtZW50c1syXTthcmd1bWVudHMubGVuZ3RoPjImJk9iamVjdChhLmgpKG4sYS5xLmZ1bmMsIkludmFsaWQgbWF0Y2ggZnVuY3Rpb24gcGFzc2VkIHRvIGV2ZW50Q2hhbm5lbCIpO3ZhciByPW8odCkscz1mdW5jdGlvbigpe3IuX19jbG9zZWRfX3x8KGkmJmkoKSxyLmNsb3NlKCkpfSxpPWUoZnVuY3Rpb24oZSl7aWYoXyhlKSlyZXR1cm4gdm9pZCBzKCk7biYmIW4oZSl8fHIucHV0KGUpfSk7aWYoci5fX2Nsb3NlZF9fJiZpKCksIWEucS5mdW5jKGkpKXRocm93IG5ldyBFcnJvcigiaW4gZXZlbnRDaGFubmVsOiBzdWJzY3JpYmUgc2hvdWxkIHJldHVybiBhIGZ1bmN0aW9uIHRvIHVuc3Vic2NyaWJlIik7cmV0dXJue3Rha2U6ci50YWtlLGZsdXNoOnIuZmx1c2gsY2xvc2U6c319ZnVuY3Rpb24gaShlKXt2YXIgdD1zKGZ1bmN0aW9uKHQpe3JldHVybiBlKGZ1bmN0aW9uKGUpe2lmKGVbYS5jXSlyZXR1cm4gdm9pZCB0KGUpO09iamVjdCh1LmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9KX0pfSk7cmV0dXJuIGMoe30sdCx7dGFrZTpmdW5jdGlvbihlLG4pe2FyZ3VtZW50cy5sZW5ndGg+MSYmKE9iamVjdChhLmgpKG4sYS5xLmZ1bmMsImNoYW5uZWwudGFrZSdzIG1hdGNoZXIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uIiksZVthLmJdPW4pLHQudGFrZShlKX19KX1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiBffSksdC5jPXIsdC5iPW8sdC5kPXMsdC5mPWk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC91dGlscy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9idWZmZXJzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NjaGVkdWxlci5qcyIpLGM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZD17dHlwZToiQEByZWR1eC1zYWdhL0NIQU5ORUxfRU5EIn0sXz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIkBAcmVkdXgtc2FnYS9DSEFOTkVMX0VORCI9PT1lLnR5cGV9LHA9ImludmFsaWQgYnVmZmVyIHBhc3NlZCB0byBjaGFubmVsIGZhY3RvcnkgZnVuY3Rpb24iLGY9IlNhZ2Egd2FzIHByb3ZpZGVkIHdpdGggYW4gdW5kZWZpbmVkIGFjdGlvbiJ9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL2lvLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IioiO2lmKGFyZ3VtZW50cy5sZW5ndGgmJk9iamVjdChDLmgpKGFyZ3VtZW50c1swXSxDLnEubm90VW5kZWYsInRha2UocGF0dGVybk9yQ2hhbm5lbCk6IHBhdHRlcm5PckNoYW5uZWwgaXMgdW5kZWZpbmVkIiksQy5xLnBhdHRlcm4oZSkpcmV0dXJuIHooUix7cGF0dGVybjplfSk7aWYoQy5xLmNoYW5uZWwoZSkpcmV0dXJuIHooUix7Y2hhbm5lbDplfSk7dGhyb3cgbmV3IEVycm9yKCJ0YWtlKHBhdHRlcm5PckNoYW5uZWwpOiBhcmd1bWVudCAiK1N0cmluZyhlKSsiIGlzIG5vdCB2YWxpZCBjaGFubmVsIG9yIGEgdmFsaWQgcGF0dGVybiIpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhPYmplY3QoQy5oKShlLEMucS5ub3RVbmRlZiwicHV0KGNoYW5uZWwsIGFjdGlvbik6IGFyZ3VtZW50IGNoYW5uZWwgaXMgdW5kZWZpbmVkIiksT2JqZWN0KEMuaCkoZSxDLnEuY2hhbm5lbCwicHV0KGNoYW5uZWwsIGFjdGlvbik6IGFyZ3VtZW50ICIrZSsiIGlzIG5vdCBhIHZhbGlkIGNoYW5uZWwiKSxPYmplY3QoQy5oKSh0LEMucS5ub3RVbmRlZiwicHV0KGNoYW5uZWwsIGFjdGlvbik6IGFyZ3VtZW50IGFjdGlvbiBpcyB1bmRlZmluZWQiKSk6KE9iamVjdChDLmgpKGUsQy5xLm5vdFVuZGVmLCJwdXQoYWN0aW9uKTogYXJndW1lbnQgYWN0aW9uIGlzIHVuZGVmaW5lZCIpLHQ9ZSxlPW51bGwpLHooaix7Y2hhbm5lbDplLGFjdGlvbjp0fSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4geih4LGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHooTCxlKX1mdW5jdGlvbiBhKGUsdCxuKXtPYmplY3QoQy5oKSh0LEMucS5ub3RVbmRlZixlKyI6IGFyZ3VtZW50IGZuIGlzIHVuZGVmaW5lZCIpO3ZhciByPW51bGw7aWYoQy5xLmFycmF5KHQpKXt2YXIgbz10O3I9b1swXSx0PW9bMV19ZWxzZSBpZih0LmZuKXt2YXIgcz10O3I9cy5jb250ZXh0LHQ9cy5mbn1yZXR1cm4gciYmQy5xLnN0cmluZyh0KSYmQy5xLmZ1bmMoclt0XSkmJih0PXJbdF0pLE9iamVjdChDLmgpKHQsQy5xLmZ1bmMsZSsiOiBhcmd1bWVudCAiK3QrIiBpcyBub3QgYSBmdW5jdGlvbiIpLHtjb250ZXh0OnIsZm46dCxhcmdzOm59fWZ1bmN0aW9uIGwoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIHooRCxhKCJjYWxsIixlLG4pKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3JldHVybiB6KEQsYSgiYXBwbHkiLHtjb250ZXh0OmUsZm46dH0sbikpfWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIHoodyxhKCJjcHMiLGUsbikpfWZ1bmN0aW9uIGQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIHooTSxhKCJmb3JrIixlLG4pKX1mdW5jdGlvbiBfKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBWKGQuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpKX1mdW5jdGlvbiBwKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtpZih0Lmxlbmd0aD4xKXJldHVybiBzKHQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBwKGUpfSkpO3ZhciByPXRbMF07cmV0dXJuIE9iamVjdChDLmgpKHIsQy5xLm5vdFVuZGVmLCJqb2luKHRhc2spOiBhcmd1bWVudCB0YXNrIGlzIHVuZGVmaW5lZCIpLE9iamVjdChDLmgpKHIsQy5xLnRhc2ssImpvaW4odGFzayk6IGFyZ3VtZW50ICIrcisiIGlzIG5vdCBhIHZhbGlkIFRhc2sgb2JqZWN0ICIrRykseihrLHIpfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2lmKHQubGVuZ3RoPjEpcmV0dXJuIHModC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSl9KSk7dmFyIHI9dFswXTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoT2JqZWN0KEMuaCkocixDLnEubm90VW5kZWYsImNhbmNlbCh0YXNrKTogYXJndW1lbnQgdGFzayBpcyB1bmRlZmluZWQiKSxPYmplY3QoQy5oKShyLEMucS50YXNrLCJjYW5jZWwodGFzayk6IGFyZ3VtZW50ICIrcisiIGlzIG5vdCBhIHZhbGlkIFRhc2sgb2JqZWN0ICIrRykpLHooSSxyfHxDLmQpfWZ1bmN0aW9uIG0oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP2U9Qy5vOihPYmplY3QoQy5oKShlLEMucS5ub3RVbmRlZiwic2VsZWN0KHNlbGVjdG9yLFsuLi5dKTogYXJndW1lbnQgc2VsZWN0b3IgaXMgdW5kZWZpbmVkIiksT2JqZWN0KEMuaCkoZSxDLnEuZnVuYywic2VsZWN0KHNlbGVjdG9yLFsuLi5dKTogYXJndW1lbnQgIitlKyIgaXMgbm90IGEgZnVuY3Rpb24iKSkseihQLHtzZWxlY3RvcjplLGFyZ3M6bn0pfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gT2JqZWN0KEMuaCkoZSxDLnEubm90VW5kZWYsImFjdGlvbkNoYW5uZWwocGF0dGVybiwuLi4pOiBhcmd1bWVudCBwYXR0ZXJuIGlzIHVuZGVmaW5lZCIpLGFyZ3VtZW50cy5sZW5ndGg+MSYmKE9iamVjdChDLmgpKHQsQy5xLm5vdFVuZGVmLCJhY3Rpb25DaGFubmVsKHBhdHRlcm4sIGJ1ZmZlcik6IGFyZ3VtZW50IGJ1ZmZlciBpcyB1bmRlZmluZWQiKSxPYmplY3QoQy5oKSh0LEMucS5idWZmZXIsImFjdGlvbkNoYW5uZWwocGF0dGVybiwgYnVmZmVyKTogYXJndW1lbnQgIit0KyIgaXMgbm90IGEgdmFsaWQgYnVmZmVyIikpLHooTix7cGF0dGVybjplLGJ1ZmZlcjp0fSl9ZnVuY3Rpb24gZygpe3JldHVybiB6KEgse30pfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIE9iamVjdChDLmgpKGUsQy5xLmNoYW5uZWwsImZsdXNoKGNoYW5uZWwpOiBhcmd1bWVudCAiK2UrIiBpcyBub3QgdmFsaWQgY2hhbm5lbCIpLHooRixlKX1mdW5jdGlvbiBFKGUpe3JldHVybiBPYmplY3QoQy5oKShlLEMucS5zdHJpbmcsImdldENvbnRleHQocHJvcCk6IGFyZ3VtZW50ICIrZSsiIGlzIG5vdCBhIHN0cmluZyIpLHooQixlKX1mdW5jdGlvbiB5KGUpe3JldHVybiBPYmplY3QoQy5oKShlLEMucS5vYmplY3QsT2JqZWN0KEMuaykobnVsbCxlKSkseihVLGUpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+Mj9uLTI6MCksbz0yO288bjtvKyspcltvLTJdPWFyZ3VtZW50c1tvXTtyZXR1cm4gZC5hcHBseSh2b2lkIDAsW08uYixlLHRdLmNvbmNhdChyKSl9ZnVuY3Rpb24gVChlLHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4yP24tMjowKSxvPTI7bzxuO28rKylyW28tMl09YXJndW1lbnRzW29dO3JldHVybiBkLmFwcGx5KHZvaWQgMCxbTy5kLGUsdF0uY29uY2F0KHIpKX1mdW5jdGlvbiBBKGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+Mz9yLTM6MCkscz0zO3M8cjtzKyspb1tzLTNdPWFyZ3VtZW50c1tzXTtyZXR1cm4gZC5hcHBseSh2b2lkIDAsW08uZixlLHQsbl0uY29uY2F0KG8pKX1uLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLHQucz1yLG4uZCh0LCJ2IixmdW5jdGlvbigpe3JldHVybiBXfSksdC5uPW8sdC5iPXMsdC5vPWksdC5lPWwsdC5jPXUsdC5oPWMsdC5rPWQsdC5yPV8sdC5tPXAsdC5mPWYsdC5wPW0sdC5hPWgsdC5nPWcsdC5qPWIsdC5sPUUsdC5xPXksdC50PXYsdC51PVQsdC53PUEsbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHF9KTt2YXIgQz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIiksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NhZ2FIZWxwZXJzL2luZGV4LmpzIiksUz1PYmplY3QoQy54KSgiSU8iKSxSPSJUQUtFIixqPSJQVVQiLHg9IkFMTCIsTD0iUkFDRSIsRD0iQ0FMTCIsdz0iQ1BTIixNPSJGT1JLIixrPSJKT0lOIixJPSJDQU5DRUwiLFA9IlNFTEVDVCIsTj0iQUNUSU9OX0NIQU5ORUwiLEg9IkNBTkNFTExFRCIsRj0iRkxVU0giLEI9IkdFVF9DT05URVhUIixVPSJTRVRfQ09OVEVYVCIsRz0iXG4oSElOVDogaWYgeW91IGFyZSBnZXR0aW5nIHRoaXMgZXJyb3JzIGluIHRlc3RzLCBjb25zaWRlciB1c2luZyBjcmVhdGVNb2NrVGFzayBmcm9tIHJlZHV4LXNhZ2EvdXRpbHMpIix6PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49e30sbltTXT0hMCxuW2VdPXQsbn0sVj1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KEMuaCkocS5mb3JrKGUpLEMucS5vYmplY3QsImRldGFjaChlZmYpOiBhcmd1bWVudCBtdXN0IGJlIGEgZm9yayBlZmZlY3QiKSxlW01dLmRldGFjaGVkPSEwLGV9O3IubWF5YmU9ZnVuY3Rpb24oKXt2YXIgZT1yLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpO3JldHVybiBlW1JdLm1heWJlPSEwLGV9O3ZhciBXPU9iamVjdChDLm4pKHIubWF5YmUsT2JqZWN0KEMueikoInRha2VtIiwidGFrZS5tYXliZSIpKTtvLnJlc29sdmU9ZnVuY3Rpb24oKXt2YXIgZT1vLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpO3JldHVybiBlW2pdLnJlc29sdmU9ITAsZX0sby5zeW5jPU9iamVjdChDLm4pKG8ucmVzb2x2ZSxPYmplY3QoQy56KSgicHV0LnN5bmMiLCJwdXQucmVzb2x2ZSIpKTt2YXIgWT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRbU10mJnRbZV19fSxxPXt0YWtlOlkoUikscHV0OlkoaiksYWxsOlkoeCkscmFjZTpZKEwpLGNhbGw6WShEKSxjcHM6WSh3KSxmb3JrOlkoTSksam9pbjpZKGspLGNhbmNlbDpZKEkpLHNlbGVjdDpZKFApLGFjdGlvbkNoYW5uZWw6WShOKSxjYW5jZWxsZWQ6WShIKSxmbHVzaDpZKEYpLGdldENvbnRleHQ6WShCKSxzZXRDb250ZXh0OlkoVSl9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9taWRkbGV3YXJlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10LmdldFN0YXRlLHI9dC5kaXNwYXRjaCxfPU9iamVjdChpLmMpKCk7cmV0dXJuIF8uZW1pdD0obC5lbWl0dGVyfHxzLm8pKF8uZW1pdCksZS5ydW49YS5hLmJpbmQobnVsbCx7Y29udGV4dDpvLHN1YnNjcmliZTpfLnN1YnNjcmliZSxkaXNwYXRjaDpyLGdldFN0YXRlOm4sc2FnYU1vbml0b3I6dSxsb2dnZXI6YyxvbkVycm9yOmR9KSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dSYmdS5hY3Rpb25EaXNwYXRjaGVkJiZ1LmFjdGlvbkRpc3BhdGNoZWQodCk7dmFyIG49ZSh0KTtyZXR1cm4gXy5lbWl0KHQpLG59fX12YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj10LmNvbnRleHQsbz12b2lkIDA9PT1uP3t9Om4sbD1yKHQsWyJjb250ZXh0Il0pLHU9bC5zYWdhTW9uaXRvcixjPWwubG9nZ2VyLGQ9bC5vbkVycm9yO2lmKHMucS5mdW5jKGwpKXRocm93IG5ldyBFcnJvcigiU2FnYSBtaWRkbGV3YXJlIG5vIGxvbmdlciBhY2NlcHQgR2VuZXJhdG9yIGZ1bmN0aW9ucy4gVXNlIHNhZ2FNaWRkbGV3YXJlLnJ1biBpbnN0ZWFkIik7aWYoYyYmIXMucS5mdW5jKGMpKXRocm93IG5ldyBFcnJvcigiYG9wdGlvbnMubG9nZ2VyYCBwYXNzZWQgdG8gdGhlIFNhZ2EgbWlkZGxld2FyZSBpcyBub3QgYSBmdW5jdGlvbiEiKTtpZihkJiYhcy5xLmZ1bmMoZCkpdGhyb3cgbmV3IEVycm9yKCJgb3B0aW9ucy5vbkVycm9yYCBwYXNzZWQgdG8gdGhlIFNhZ2EgbWlkZGxld2FyZSBpcyBub3QgYSBmdW5jdGlvbiEiKTtpZihsLmVtaXR0ZXImJiFzLnEuZnVuYyhsLmVtaXR0ZXIpKXRocm93IG5ldyBFcnJvcigiYG9wdGlvbnMuZW1pdHRlcmAgcGFzc2VkIHRvIHRoZSBTYWdhIG1pZGRsZXdhcmUgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGUucnVuPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJCZWZvcmUgcnVubmluZyBhIFNhZ2EsIHlvdSBtdXN0IG1vdW50IHRoZSBTYWdhIG1pZGRsZXdhcmUgb24gdGhlIFN0b3JlIHVzaW5nIGFwcGx5TWlkZGxld2FyZSIpfSxlLnNldENvbnRleHQ9ZnVuY3Rpb24oZSl7T2JqZWN0KHMuaCkoZSxzLnEub2JqZWN0LE9iamVjdChzLmspKCJzYWdhTWlkZGxld2FyZSIsZSkpLHMudi5hc3NpZ24obyxlKX0sZX10LmE9bzt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL2NoYW5uZWwuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvcnVuU2FnYS5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9wcm9jLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtyLmNvbmZpZ3VyYWJsZT1yLmVudW1lcmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHIpfXJldHVybiBlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKCIqIj09PWU/Yi53aWxkY2FyZDpsLnEuYXJyYXkoZSk/Yi5hcnJheTpsLnEuc3RyaW5nYWJsZUZ1bmMoZSk/Yi5kZWZhdWx0OmwucS5mdW5jKGUpP2IucHJlZGljYXRlOmIuZGVmYXVsdCkoZSl9ZnVuY3Rpb24gcyhlLHQsbil7ZnVuY3Rpb24gcihlKXtzKCksbihlLCEwKX1mdW5jdGlvbiBvKGUpe2kucHVzaChlKSxlLmNvbnQ9ZnVuY3Rpb24obyxzKXt1fHwoT2JqZWN0KGwudykoaSxlKSxlLmNvbnQ9bC51LHM/cihvKTooZT09PXQmJihhPW8pLGkubGVuZ3RofHwodT0hMCxuKGEpKSkpfX1mdW5jdGlvbiBzKCl7dXx8KHU9ITAsaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY29udD1sLnUsZS5jYW5jZWwoKX0pLGk9W10pfXZhciBpPVtdLGE9dm9pZCAwLHU9ITE7cmV0dXJuIG8odCkse2FkZFRhc2s6byxjYW5jZWxBbGw6cyxhYm9ydDpyLGdldFRhc2tzOmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHRhc2tOYW1lczpmdW5jdGlvbigpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lfSl9fX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUuY29udGV4dCxuPWUuZm4scj1lLmFyZ3M7aWYobC5xLml0ZXJhdG9yKG4pKXJldHVybiBuO3ZhciBvPXZvaWQgMCxzPXZvaWQgMDt0cnl7bz1uLmFwcGx5KHQscil9Y2F0Y2goZSl7cz1lfXJldHVybiBsLnEuaXRlcmF0b3Iobyk/bzpzP09iamVjdChsLnQpKGZ1bmN0aW9uKCl7dGhyb3cgc30pOk9iamVjdChsLnQpKGZ1bmN0aW9uKCl7dmFyIGU9dm9pZCAwLHQ9e2RvbmU6ITEsdmFsdWU6b30sbj1mdW5jdGlvbihlKXtyZXR1cm57ZG9uZTohMCx2YWx1ZTplfX07cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlP24ocik6KGU9ITAsdCl9fSgpKX1mdW5jdGlvbiBhKGUpe2Z1bmN0aW9uIHQoKXt0ZS5pc1J1bm5pbmcmJiF0ZS5pc0NhbmNlbGxlZCYmKHRlLmlzQ2FuY2VsbGVkPSEwLGYoZykpfWZ1bmN0aW9uIG4oKXtlLl9pc1J1bm5pbmcmJiFlLl9pc0NhbmNlbGxlZCYmKGUuX2lzQ2FuY2VsbGVkPSEwLG5lLmNhbmNlbEFsbCgpLGIoZykpfWZ1bmN0aW9uIGYodCxuKXtpZighdGUuaXNSdW5uaW5nKXRocm93IG5ldyBFcnJvcigiVHJ5aW5nIHRvIHJlc3VtZSBhbiBhbHJlYWR5IGZpbmlzaGVkIGdlbmVyYXRvciIpO3RyeXt2YXIgcj12b2lkIDA7bj9yPWUudGhyb3codCk6dD09PWc/KHRlLmlzQ2FuY2VsbGVkPSEwLGYuY2FuY2VsKCkscj1sLnEuZnVuYyhlLnJldHVybik/ZS5yZXR1cm4oZyk6e2RvbmU6ITAsdmFsdWU6Z30pOnI9dD09PWg/bC5xLmZ1bmMoZS5yZXR1cm4pP2UucmV0dXJuKCk6e2RvbmU6ITB9OmUubmV4dCh0KSxyLmRvbmU/KHRlLmlzTWFpblJ1bm5pbmc9ITEsdGUuY29udCYmdGUuY29udChyLnZhbHVlKSk6eShyLnZhbHVlLHosIiIsZil9Y2F0Y2goZSl7dGUuaXNDYW5jZWxsZWQmJlEoZSksdGUuaXNNYWluUnVubmluZz0hMSx0ZS5jb250KGUsITApfX1mdW5jdGlvbiBiKHQsbil7ZS5faXNSdW5uaW5nPSExLEouY2xvc2UoKSxuPyh0IGluc3RhbmNlb2YgRXJyb3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzYWdhU3RhY2siLHt2YWx1ZToiYXQgIitWKyIgXG4gIisodC5zYWdhU3RhY2t8fHQuc3RhY2spLGNvbmZpZ3VyYWJsZTohMH0pLGVlLmNvbnR8fCh0IGluc3RhbmNlb2YgRXJyb3ImJlg/WCh0KTpRKHQpKSxlLl9lcnJvcj10LGUuX2lzQWJvcnRlZD0hMCxlLl9kZWZlcnJlZEVuZCYmZS5fZGVmZXJyZWRFbmQucmVqZWN0KHQpKTooZS5fcmVzdWx0PXQsZS5fZGVmZXJyZWRFbmQmJmUuX2RlZmVycmVkRW5kLnJlc29sdmUodCkpLGVlLmNvbnQmJmVlLmNvbnQodCxuKSxlZS5qb2luZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2IodCxuKX0pLGVlLmpvaW5lcnM9bnVsbH1mdW5jdGlvbiB5KGUsdCl7ZnVuY3Rpb24gbihlLHQpe2l8fChpPSEwLG8uY2FuY2VsPWwudSxxJiYodD9xLmVmZmVjdFJlamVjdGVkKHMsZSk6cS5lZmZlY3RSZXNvbHZlZChzLGUpKSxvKGUsdCkpfXZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIixvPWFyZ3VtZW50c1szXSxzPU9iamVjdChsLnkpKCk7cSYmcS5lZmZlY3RUcmlnZ2VyZWQoe2VmZmVjdElkOnMscGFyZW50RWZmZWN0SWQ6dCxsYWJlbDpyLGVmZmVjdDplfSk7dmFyIGk9dm9pZCAwO24uY2FuY2VsPWwudSxvLmNhbmNlbD1mdW5jdGlvbigpe2lmKCFpKXtpPSEwO3RyeXtuLmNhbmNlbCgpfWNhdGNoKGUpe1EoZSl9bi5jYW5jZWw9bC51LHEmJnEuZWZmZWN0Q2FuY2VsbGVkKHMpfX07dmFyIGE9dm9pZCAwO3JldHVybiBsLnEucHJvbWlzZShlKT92KGUsbik6bC5xLmhlbHBlcihlKT9SKEUoZSkscyxuKTpsLnEuaXRlcmF0b3IoZSk/VChlLHMsVixuKTpsLnEuYXJyYXkoZSk/WShlLHMsbik6KGE9Yy5kLnRha2UoZSkpP0EoYSxuKTooYT1jLmQucHV0KGUpKT9DKGEsbik6KGE9Yy5kLmFsbChlKSk/TChhLHMsbik6KGE9Yy5kLnJhY2UoZSkpP0QoYSxzLG4pOihhPWMuZC5jYWxsKGUpKT9PKGEscyxuKTooYT1jLmQuY3BzKGUpKT9TKGEsbik6KGE9Yy5kLmZvcmsoZSkpP1IoYSxzLG4pOihhPWMuZC5qb2luKGUpKT9qKGEsbik6KGE9Yy5kLmNhbmNlbChlKSk/eChhLG4pOihhPWMuZC5zZWxlY3QoZSkpP3coYSxuKTooYT1jLmQuYWN0aW9uQ2hhbm5lbChlKSk/TShhLG4pOihhPWMuZC5mbHVzaChlKSk/SShhLG4pOihhPWMuZC5jYW5jZWxsZWQoZSkpP2soYSxuKTooYT1jLmQuZ2V0Q29udGV4dChlKSk/UChhLG4pOihhPWMuZC5zZXRDb250ZXh0KGUpKT9OKGEsbik6bihlKX1mdW5jdGlvbiB2KGUsdCl7dmFyIG49ZVtsLmFdO2wucS5mdW5jKG4pP3QuY2FuY2VsPW46bC5xLmZ1bmMoZS5hYm9ydCkmJih0LmNhbmNlbD1mdW5jdGlvbigpe3JldHVybiBlLmFib3J0KCl9KSxlLnRoZW4odCxmdW5jdGlvbihlKXtyZXR1cm4gdChlLCEwKX0pfWZ1bmN0aW9uIFQoZSx0LG4scil7YShlLEgsRixCLFosRyx0LG4scil9ZnVuY3Rpb24gQShlLHQpe3ZhciBuPWUuY2hhbm5lbCxyPWUucGF0dGVybixzPWUubWF5YmU7bj1ufHxKO3ZhciBpPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3I/dChlLCEwKTp0KE9iamVjdChkLmUpKGUpJiYhcz9oOmUpfTt0cnl7bi50YWtlKGksbyhyKSl9Y2F0Y2goZSl7cmV0dXJuIHQoZSwhMCl9dC5jYW5jZWw9aS5jYW5jZWx9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPWUuY2hhbm5lbCxyPWUuYWN0aW9uLG89ZS5yZXNvbHZlO09iamVjdCh1LmEpKGZ1bmN0aW9uKCl7dmFyIGU9dm9pZCAwO3RyeXtlPShuP24ucHV0OkYpKHIpfWNhdGNoKGUpe2lmKG58fG8pcmV0dXJuIHQoZSwhMCk7UShlKX1pZighb3x8IWwucS5wcm9taXNlKGUpKXJldHVybiB0KGUpO3YoZSx0KX0pfWZ1bmN0aW9uIE8oZSx0LG4pe3ZhciByPWUuY29udGV4dCxvPWUuZm4scz1lLmFyZ3MsaT12b2lkIDA7dHJ5e2k9by5hcHBseShyLHMpfWNhdGNoKGUpe3JldHVybiBuKGUsITApfXJldHVybiBsLnEucHJvbWlzZShpKT92KGksbik6bC5xLml0ZXJhdG9yKGkpP1QoaSx0LG8ubmFtZSxuKTpuKGkpfWZ1bmN0aW9uIFMoZSx0KXt2YXIgbj1lLmNvbnRleHQscj1lLmZuLG89ZS5hcmdzO3RyeXt2YXIgcz1mdW5jdGlvbihlLG4pe3JldHVybiBsLnEudW5kZWYoZSk/dChuKTp0KGUsITApfTtyLmFwcGx5KG4sby5jb25jYXQocykpLHMuY2FuY2VsJiYodC5jYW5jZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYW5jZWwoKX0pfWNhdGNoKGUpe3JldHVybiB0KGUsITApfX1mdW5jdGlvbiBSKGUsdCxuKXt2YXIgcj1lLmNvbnRleHQsbz1lLmZuLHM9ZS5hcmdzLGM9ZS5kZXRhY2hlZCxkPWkoe2NvbnRleHQ6cixmbjpvLGFyZ3M6c30pO3RyeXtPYmplY3QodS5jKSgpO3ZhciBfPWEoZCxILEYsQixaLEcsdCxvLm5hbWUsYz9udWxsOmwudSk7Yz9uKF8pOmQuX2lzUnVubmluZz8obmUuYWRkVGFzayhfKSxuKF8pKTpkLl9lcnJvcj9uZS5hYm9ydChkLl9lcnJvcik6bihfKX1maW5hbGx5e09iamVjdCh1LmIpKCl9fWZ1bmN0aW9uIGooZSx0KXtpZihlLmlzUnVubmluZygpKXt2YXIgbj17dGFzazplZSxjYjp0fTt0LmNhbmNlbD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QobC53KShlLmpvaW5lcnMsbil9LGUuam9pbmVycy5wdXNoKG4pfWVsc2UgZS5pc0Fib3J0ZWQoKT90KGUuZXJyb3IoKSwhMCk6dChlLnJlc3VsdCgpKX1mdW5jdGlvbiB4KGUsdCl7ZT09PWwuZCYmKGU9ZWUpLGUuaXNSdW5uaW5nKCkmJmUuY2FuY2VsKCksdCgpfWZ1bmN0aW9uIEwoZSx0LG4pe2Z1bmN0aW9uIHIoKXtzPT09by5sZW5ndGgmJihpPSEwLG4obC5xLmFycmF5KGUpP2wuZi5mcm9tKHAoe30sYSx7bGVuZ3RoOm8ubGVuZ3RofSkpOmEpKX12YXIgbz1PYmplY3Qua2V5cyhlKTtpZighby5sZW5ndGgpcmV0dXJuIG4obC5xLmFycmF5KGUpP1tdOnt9KTt2YXIgcz0wLGk9dm9pZCAwLGE9e30sdT17fTtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCxvKXtpfHwob3x8T2JqZWN0KGQuZSkodCl8fHQ9PT1ofHx0PT09Zz8obi5jYW5jZWwoKSxuKHQsbykpOihhW2VdPXQscysrLHIoKSkpfTt0LmNhbmNlbD1sLnUsdVtlXT10fSksbi5jYW5jZWw9ZnVuY3Rpb24oKXtpfHwoaT0hMCxvLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHVbZV0uY2FuY2VsKCl9KSl9LG8uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4geShlW25dLHQsbix1W25dKX0pfWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciByPXZvaWQgMCxvPU9iamVjdC5rZXlzKGUpLHM9e307by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWZ1bmN0aW9uKHMsaSl7aWYoIXIpaWYoaSluLmNhbmNlbCgpLG4ocywhMCk7ZWxzZSBpZighT2JqZWN0KGQuZSkocykmJnMhPT1oJiZzIT09Zyl7dmFyIGE7bi5jYW5jZWwoKSxyPSEwO3ZhciB1PShhPXt9LGFbdF09cyxhKTtuKGwucS5hcnJheShlKT9bXS5zbGljZS5jYWxsKHAoe30sdSx7bGVuZ3RoOm8ubGVuZ3RofSkpOnUpfX07aS5jYW5jZWw9bC51LHNbdF09aX0pLG4uY2FuY2VsPWZ1bmN0aW9uKCl7cnx8KHI9ITAsby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBzW2VdLmNhbmNlbCgpfSkpfSxvLmZvckVhY2goZnVuY3Rpb24obil7cnx8eShlW25dLHQsbixzW25dKX0pfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbj1lLnNlbGVjdG9yLHI9ZS5hcmdzO3RyeXt2YXIgbz1uLmFwcGx5KHZvaWQgMCxbQigpXS5jb25jYXQocikpO3Qobyl9Y2F0Y2goZSl7dChlLCEwKX19ZnVuY3Rpb24gTShlLHQpe3ZhciBuPWUucGF0dGVybixyPWUuYnVmZmVyLHM9byhuKTtzLnBhdHRlcm49bix0KE9iamVjdChkLmQpKEgscnx8Xy5hLmZpeGVkKCkscykpfWZ1bmN0aW9uIGsoZSx0KXt0KCEhdGUuaXNDYW5jZWxsZWQpfWZ1bmN0aW9uIEkoZSx0KXtlLmZsdXNoKHQpfWZ1bmN0aW9uIFAoZSx0KXt0KFpbZV0pfWZ1bmN0aW9uIE4oZSx0KXtsLnYuYXNzaWduKFosZSksdCgpfXZhciBIPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmdW5jdGlvbigpe3JldHVybiBsLnV9LEY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwudSxCPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpsLnUsVT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e30sRz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06e30sej1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06MCxWPWFyZ3VtZW50cy5sZW5ndGg+NyYmdm9pZCAwIT09YXJndW1lbnRzWzddP2FyZ3VtZW50c1s3XToiYW5vbnltb3VzIixXPWFyZ3VtZW50c1s4XTtPYmplY3QobC5oKShlLGwucS5pdGVyYXRvcixtKTt2YXIgWT1PYmplY3QobC5uKShMLE9iamVjdChsLnopKCJbLi4uZWZmZWN0c10iLCJhbGwoWy4uLmVmZmVjdHNdKSIpKSxxPUcuc2FnYU1vbml0b3IsSz1HLmxvZ2dlcixYPUcub25FcnJvciwkPUt8fGwucyxRPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2FnYVN0YWNrOyF0JiZlLnN0YWNrJiYodD0tMSE9PWUuc3RhY2suc3BsaXQoIlxuIilbMF0uaW5kZXhPZihlLm1lc3NhZ2UpP2Uuc3RhY2s6IkVycm9yOiAiK2UubWVzc2FnZSsiXG4iK2Uuc3RhY2spLCQoImVycm9yIiwidW5jYXVnaHQgYXQgIitWLHR8fGUubWVzc2FnZXx8ZSl9LEo9T2JqZWN0KGQuZikoSCksWj1PYmplY3QuY3JlYXRlKFUpO2YuY2FuY2VsPWwudTt2YXIgZWU9ZnVuY3Rpb24oZSx0LG8scyl7dmFyIGksYSx1O3JldHVybiBvLl9kZWZlcnJlZEVuZD1udWxsLGE9e30sYVtsLmVdPSEwLGEuaWQ9ZSxhLm5hbWU9dCxpPSJkb25lIix1PXt9LHVbaV09dVtpXXx8e30sdVtpXS5nZXQ9ZnVuY3Rpb24oKXtpZihvLl9kZWZlcnJlZEVuZClyZXR1cm4gby5fZGVmZXJyZWRFbmQucHJvbWlzZTt2YXIgZT1PYmplY3QobC5sKSgpO3JldHVybiBvLl9kZWZlcnJlZEVuZD1lLG8uX2lzUnVubmluZ3x8KG8uX2Vycm9yP2UucmVqZWN0KG8uX2Vycm9yKTplLnJlc29sdmUoby5fcmVzdWx0KSksZS5wcm9taXNlfSxhLmNvbnQ9cyxhLmpvaW5lcnM9W10sYS5jYW5jZWw9bixhLmlzUnVubmluZz1mdW5jdGlvbigpe3JldHVybiBvLl9pc1J1bm5pbmd9LGEuaXNDYW5jZWxsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5faXNDYW5jZWxsZWR9LGEuaXNBYm9ydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8uX2lzQWJvcnRlZH0sYS5yZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5fcmVzdWx0fSxhLmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG8uX2Vycm9yfSxhLnNldENvbnRleHQ9ZnVuY3Rpb24oZSl7T2JqZWN0KGwuaCkoZSxsLnEub2JqZWN0LE9iamVjdChsLmspKCJ0YXNrIixlKSksbC52LmFzc2lnbihaLGUpfSxyKGEsdSksYX0oeixWLGUsVyksdGU9e25hbWU6VixjYW5jZWw6dCxpc1J1bm5pbmc6ITB9LG5lPXMoVix0ZSxiKTtyZXR1cm4gVyYmKFcuY2FuY2VsPW4pLGUuX2lzUnVubmluZz0hMCxmKCksZWV9bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSx0LmI9YTt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NjaGVkdWxlci5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9pby5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9jaGFubmVsLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL2J1ZmZlcnMuanMiKSxwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG09InByb2MgZmlyc3QgYXJndW1lbnQgKFNhZ2EgZnVuY3Rpb24gcmVzdWx0KSBtdXN0IGJlIGFuIGl0ZXJhdG9yIixoPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJAQHJlZHV4LXNhZ2EvQ0hBTk5FTF9FTkQifX0sZz17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQEByZWR1eC1zYWdhL1RBU0tfQ0FOQ0VMIn19LGI9e3dpbGRjYXJkOmZ1bmN0aW9uKCl7cmV0dXJuIGwucn0sZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4ic3ltYm9sIj09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmYoZSkpP2Z1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1lfTpmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09U3RyaW5nKGUpfX0sYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkodCl9KX19LHByZWRpY2F0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fX0sRT1mdW5jdGlvbihlKXtyZXR1cm57Zm46ZX19fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9ydW5TYWdhLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgbD12b2lkIDA7by5xLml0ZXJhdG9yKGUpPyhsPWUsZT10KTooT2JqZWN0KG8uaCkodCxvLnEuZnVuYyxhKSxsPXQuYXBwbHkodm9pZCAwLHIpLE9iamVjdChvLmgpKGwsby5xLml0ZXJhdG9yLGEpKTt2YXIgdT1lLGM9dS5zdWJzY3JpYmUsZD11LmRpc3BhdGNoLF89dS5nZXRTdGF0ZSxwPXUuY29udGV4dCxmPXUuc2FnYU1vbml0b3IsbT11LmxvZ2dlcixoPXUub25FcnJvcixnPU9iamVjdChvLnkpKCk7ZiYmKGYuZWZmZWN0VHJpZ2dlcmVkPWYuZWZmZWN0VHJpZ2dlcmVkfHxvLnUsZi5lZmZlY3RSZXNvbHZlZD1mLmVmZmVjdFJlc29sdmVkfHxvLnUsZi5lZmZlY3RSZWplY3RlZD1mLmVmZmVjdFJlamVjdGVkfHxvLnUsZi5lZmZlY3RDYW5jZWxsZWQ9Zi5lZmZlY3RDYW5jZWxsZWR8fG8udSxmLmFjdGlvbkRpc3BhdGNoZWQ9Zi5hY3Rpb25EaXNwYXRjaGVkfHxvLnUsZi5lZmZlY3RUcmlnZ2VyZWQoe2VmZmVjdElkOmcscm9vdDohMCxwYXJlbnRFZmZlY3RJZDowLGVmZmVjdDp7cm9vdDohMCxzYWdhOnQsYXJnczpyfX0pKTt2YXIgYj1PYmplY3Qocy5iKShsLGMsT2JqZWN0KG8uQSkoZCksXyxwLHtzYWdhTW9uaXRvcjpmLGxvZ2dlcjptLG9uRXJyb3I6aH0sZyx0Lm5hbWUpO3JldHVybiBmJiZmLmVmZmVjdFJlc29sdmVkKGcsYiksYn10LmE9cjt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3Byb2MuanMiKSxpPSJydW5TYWdhKHN0b3JlSW50ZXJmYWNlLCBzYWdhLCAuLi5hcmdzKSIsYT1pKyI6IHNhZ2EgYXJndW1lbnQgbXVzdCBiZSBhIEdlbmVyYXRvciBmdW5jdGlvbiEifSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9zYWdhSGVscGVycy9mc21JdGVyYXRvci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBzLnEuY2hhbm5lbChlKT8iY2hhbm5lbCI6QXJyYXkuaXNBcnJheShlKT9TdHJpbmcoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKX0pKTpTdHJpbmcoZSl9ZnVuY3Rpb24gbyhlLHQpe2Z1bmN0aW9uIG4odCxuKXtpZihsPT09YSlyZXR1cm4gaTtpZihuKXRocm93IGw9YSxuO28mJm8odCk7dmFyIHI9ZVtsXSgpLHM9clswXSx1PXJbMV0sYz1yWzJdO3JldHVybiBsPXMsbz1jLGw9PT1hP2k6dX12YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Iml0ZXJhdG9yIixvPXZvaWQgMCxsPXQ7cmV0dXJuIE9iamVjdChzLnQpKG4sZnVuY3Rpb24oZSl7cmV0dXJuIG4obnVsbCxlKX0sciwhMCl9bi5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSx0LmM9cix0LmE9bzt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIiksaT17ZG9uZTohMCx2YWx1ZTp2b2lkIDB9LGE9e319LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NhZ2FIZWxwZXJzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvc2FnYUhlbHBlcnMvdGFrZUV2ZXJ5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NhZ2FIZWxwZXJzL3Rha2VMYXRlc3QuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvc2FnYUhlbHBlcnMvdGhyb3R0bGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvdXRpbHMuanMiKTtuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pLG4uZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBzLmF9KTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4iaW1wb3J0IHsgIitlKyIgfSBmcm9tICdyZWR1eC1zYWdhJyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGltcG9ydCB7ICIrZSsiIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJy5cblRoZSBsYXR0ZXIgd2lsbCBub3Qgd29yayB3aXRoIHlpZWxkKiwgYXMgaGVscGVyIGVmZmVjdHMgYXJlIHdyYXBwZWQgYXV0b21hdGljYWxseSBmb3IgeW91IGluIGZvcmsgZWZmZWN0LlxuVGhlcmVmb3JlIHlpZWxkICIrZSsiIHdpbGwgcmV0dXJuIHRhc2sgZGVzY3JpcHRvciB0byB5b3VyIHNhZ2EgYW5kIGV4ZWN1dGUgbmV4dCBsaW5lcyBvZiBjb2RlLiJ9LGw9T2JqZWN0KGkubikoci5hLGEoInRha2VFdmVyeSIpKSx1PU9iamVjdChpLm4pKG8uYSxhKCJ0YWtlTGF0ZXN0IikpLGM9T2JqZWN0KGkubikocy5hLGEoInRocm90dGxlIikpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9zYWdhSGVscGVycy90YWtlRXZlcnkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4yP24tMjowKSxhPTI7YTxuO2ErKylyW2EtMl09YXJndW1lbnRzW2FdO3ZhciBsPXtkb25lOiExLHZhbHVlOk9iamVjdChzLnMpKGUpfSx1PWZ1bmN0aW9uKGUpe3JldHVybntkb25lOiExLHZhbHVlOnMuay5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChyLFtlXSkpfX0sYz12b2lkIDAsZD1mdW5jdGlvbihlKXtyZXR1cm4gYz1lfTtyZXR1cm4gT2JqZWN0KG8uYSkoe3ExOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMiIsbCxkXX0scTI6ZnVuY3Rpb24oKXtyZXR1cm4gYz09PWkuYT9bby5iXTpbInExIix1KGMpXX19LCJxMSIsInRha2VFdmVyeSgiK09iamVjdChvLmMpKGUpKyIsICIrdC5uYW1lKyIpIil9dC5hPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9zYWdhSGVscGVycy9mc21JdGVyYXRvci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9pby5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9jaGFubmVsLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NhZ2FIZWxwZXJzL3Rha2VMYXRlc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4yP24tMjowKSxhPTI7YTxuO2ErKylyW2EtMl09YXJndW1lbnRzW2FdO3ZhciBsPXtkb25lOiExLHZhbHVlOk9iamVjdChzLnMpKGUpfSx1PWZ1bmN0aW9uKGUpe3JldHVybntkb25lOiExLHZhbHVlOnMuay5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChyLFtlXSkpfX0sYz1mdW5jdGlvbihlKXtyZXR1cm57ZG9uZTohMSx2YWx1ZTpPYmplY3Qocy5mKShlKX19LGQ9dm9pZCAwLF89dm9pZCAwLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGQ9ZX0sZj1mdW5jdGlvbihlKXtyZXR1cm4gXz1lfTtyZXR1cm4gT2JqZWN0KG8uYSkoe3ExOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMiIsbCxmXX0scTI6ZnVuY3Rpb24oKXtyZXR1cm4gXz09PWkuYT9bby5iXTpkP1sicTMiLGMoZCldOlsicTEiLHUoXykscF19LHEzOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMSIsdShfKSxwXX19LCJxMSIsInRha2VMYXRlc3QoIitPYmplY3Qoby5jKShlKSsiLCAiK3QubmFtZSsiKSIpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvc2FnYUhlbHBlcnMvZnNtSXRlcmF0b3IuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvaW8uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvY2hhbm5lbC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9zYWdhSGVscGVycy90aHJvdHRsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCx1PUFycmF5KHI+Mz9yLTM6MCksYz0zO2M8cjtjKyspdVtjLTNdPWFyZ3VtZW50c1tjXTt2YXIgZD12b2lkIDAsXz12b2lkIDAscD17ZG9uZTohMSx2YWx1ZTpPYmplY3Qocy5hKSh0LGEuYS5zbGlkaW5nKDEpKX0sZj1mdW5jdGlvbigpe3JldHVybntkb25lOiExLHZhbHVlOk9iamVjdChzLnMpKF8pfX0sbT1mdW5jdGlvbihlKXtyZXR1cm57ZG9uZTohMSx2YWx1ZTpzLmsuYXBwbHkodm9pZCAwLFtuXS5jb25jYXQodSxbZV0pKX19LGg9e2RvbmU6ITEsdmFsdWU6T2JqZWN0KHMuZSkobC5tLGUpfSxnPWZ1bmN0aW9uKGUpe3JldHVybiBkPWV9LGI9ZnVuY3Rpb24oZSl7cmV0dXJuIF89ZX07cmV0dXJuIE9iamVjdChvLmEpKHtxMTpmdW5jdGlvbigpe3JldHVyblsicTIiLHAsYl19LHEyOmZ1bmN0aW9uKCl7cmV0dXJuWyJxMyIsZigpLGddfSxxMzpmdW5jdGlvbigpe3JldHVybiBkPT09aS5hP1tvLmJdOlsicTQiLG0oZCldfSxxNDpmdW5jdGlvbigpe3JldHVyblsicTIiLGhdfX0sInExIiwidGhyb3R0bGUoIitPYmplY3Qoby5jKSh0KSsiLCAiK24ubmFtZSsiKSIpfXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvc2FnYUhlbHBlcnMvZnNtSXRlcmF0b3IuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvaW8uanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvY2hhbm5lbC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9pbnRlcm5hbC9idWZmZXJzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3NjaGVkdWxlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RyeXtzKCksZSgpfWZpbmFsbHl7aSgpfX1mdW5jdGlvbiBvKGUpe2wucHVzaChlKSx1fHwocygpLGEoKSl9ZnVuY3Rpb24gcygpe3UrK31mdW5jdGlvbiBpKCl7dS0tfWZ1bmN0aW9uIGEoKXtpKCk7Zm9yKHZhciBlPXZvaWQgMDshdSYmdm9pZCAwIT09KGU9bC5zaGlmdCgpKTspcihlKX10LmE9byx0LmM9cyx0LmI9YTt2YXIgbD1bXSx1PTB9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2lmKCF0KGUpKXRocm93IGQoImVycm9yIiwidW5jYXVnaHQgYXQgY2hlY2siLG4pLG5ldyBFcnJvcihuKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIFIubm90VW5kZWYoZSkmJlMuY2FsbChlLHQpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1lLmluZGV4T2YodCk7bj49MCYmZS5zcGxpY2UobiwxKX1mdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9cCh7fSxlKSxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7dC5yZXNvbHZlPWUsdC5yZWplY3Q9bn0pO3JldHVybiB0LnByb21pc2U9bix0fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciB0PVtdLG49MDtuPGU7bisrKXQucHVzaChpKCkpO3JldHVybiB0fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxuPXZvaWQgMCxyPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe249c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKHQpfSxlKX0pO3JldHVybiByW0VdPWZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dChuKX0scn1mdW5jdGlvbiB1KCl7dmFyIGUsdD0hMCxuPXZvaWQgMCxyPXZvaWQgMDtyZXR1cm4gZT17fSxlW2hdPSEwLGUuaXNSdW5uaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUucmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59LGUuZXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZS5zZXRSdW5uaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0PWV9LGUuc2V0UmVzdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBuPWV9LGUuc2V0RXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZX0sZX1mdW5jdGlvbiBjKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpELG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiLHI9YXJndW1lbnRzWzNdLG89e25hbWU6bixuZXh0OmUsdGhyb3c6dCxyZXR1cm46d307cmV0dXJuIHImJihvW2ddPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmKG9bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBvfSksb31mdW5jdGlvbiBkKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P2NvbnNvbGUubG9nKCJyZWR1eC1zYWdhICIrZSsiOiAiK3QrIlxuIisobiYmbi5zdGFja3x8bikpOmNvbnNvbGVbZV0odCxuKX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fW4uZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZCh0LCJyIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQodCwibyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLHQuaD1yLG4uZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKHQsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSx0Lnc9cyxuLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLHQubD1pLHQuZz1hLHQubT1sLHQuaj11LG4uZCh0LCJ5IixmdW5jdGlvbigpe3JldHVybiBMfSksdC50PWMsdC5zPWQsdC5uPV8sbi5kKHQsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQodCwicCIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKHQsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQodCwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pO3ZhciBwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG09ZnVuY3Rpb24oZSl7cmV0dXJuIkBAcmVkdXgtc2FnYS8iK2V9LGg9bSgiVEFTSyIpLGc9bSgiSEVMUEVSIiksYj1tKCJNQVRDSCIpLEU9bSgiQ0FOQ0VMX1BST01JU0UiKSx5PW0oIlNBR0FfQUNUSU9OIiksdj1tKCJTRUxGX0NBTkNFTExBVElPTiIpLFQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fSxBPVQoITApLEM9ZnVuY3Rpb24oKXt9LE89ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxSPXt1bmRlZjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWV9LG5vdFVuZGVmOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmdm9pZCAwIT09ZX0sZnVuYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sYXJyYXk6QXJyYXkuaXNBcnJheSxvYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFSLmFycmF5KGUpJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmYoZSkpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZSLmZ1bmMoZS50aGVuKX0saXRlcmF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlIuZnVuYyhlLm5leHQpJiZSLmZ1bmMoZS50aHJvdyl9LGl0ZXJhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZSLmZ1bmMoU3ltYm9sKT9SLmZ1bmMoZVtTeW1ib2wuaXRlcmF0b3JdKTpSLmFycmF5KGUpfSx0YXNrOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlW2hdfSxvYnNlcnZhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZSLmZ1bmMoZS5zdWJzY3JpYmUpfSxidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlIuZnVuYyhlLmlzRW1wdHkpJiZSLmZ1bmMoZS50YWtlKSYmUi5mdW5jKGUucHV0KX0scGF0dGVybjpmdW5jdGlvbihlKXtyZXR1cm4gZSYmKFIuc3RyaW5nKGUpfHwic3ltYm9sIj09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmYoZSkpfHxSLmZ1bmMoZSl8fFIuYXJyYXkoZSkpfSxjaGFubmVsOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZSLmZ1bmMoZS50YWtlKSYmUi5mdW5jKGUuY2xvc2UpfSxoZWxwZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmVbZ119LHN0cmluZ2FibGVGdW5jOmZ1bmN0aW9uKGUpe3JldHVybiBSLmZ1bmMoZSkmJm8oZSwidG9TdHJpbmciKX19LGo9e2Fzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KW8odCxuKSYmKGVbbl09dFtuXSl9fSx4PXtmcm9tOmZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5KGUubGVuZ3RoKTtmb3IodmFyIG4gaW4gZSlvKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0fX0sTD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiBmdW5jdGlvbigpe3JldHVybisrZX19KCksRD1mdW5jdGlvbihlKXt0aHJvdyBlfSx3PWZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fSxNPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mICIrdCsiLCBwbGVhc2UgdXBkYXRlIHlvdXIgY29kZSJ9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFcnJvcigiXG4gIHJlZHV4LXNhZ2E6IEVycm9yIGNoZWNraW5nIGhvb2tzIGRldGVjdGVkIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWdcbiAgaW4gcmVkdXgtc2FnYSBjb2RlIGFuZCBub3QgeW91cnMuIFRoYW5rcyBmb3IgcmVwb3J0aW5nIHRoaXMgaW4gdGhlIHByb2plY3QncyBnaXRodWIgcmVwby5cbiAgRXJyb3I6ICIrZSsiXG4iKX0sST1mdW5jdGlvbihlLHQpe3JldHVybihlP2UrIi4iOiIiKSsic2V0Q29udGV4dChwcm9wcyk6IGFyZ3VtZW50ICIrdCsiIGlzIG5vdCBhIHBsYWluIG9iamVjdCJ9LFA9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHkse3ZhbHVlOiEwfSkpfX0sTj1mdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobiksbz0wO288bjtvKyspcltvXT1hcmd1bWVudHNbb107dmFyIHM9W10saT10LmFwcGx5KHZvaWQgMCxyKTtyZXR1cm57bmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gcy5wdXNoKGUpLGkubmV4dChlKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgbj1lKHQpLmFwcGx5KHZvaWQgMCxyKTtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm5leHQoZSl9KSxufSxyZXR1cm46ZnVuY3Rpb24oZSl7cmV0dXJuIGkucmV0dXJuKGUpfSx0aHJvdzpmdW5jdGlvbihlKXtyZXR1cm4gaS50aHJvdyhlKX19fX19LCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2ludGVybmFsL3V0aWxzLmpzIik7bi5kKHQsIlRBU0siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZX0pLG4uZCh0LCJTQUdBX0FDVElPTiIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSksbi5kKHQsIm5vb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIHIudX0pLG4uZCh0LCJpcyIsZnVuY3Rpb24oKXtyZXR1cm4gci5xfSksbi5kKHQsImRlZmVycmVkIixmdW5jdGlvbigpe3JldHVybiByLmx9KSxuLmQodCwiYXJyYXlPZkRlZmZlcmVkIixmdW5jdGlvbigpe3JldHVybiByLmd9KSxuLmQodCwiY3JlYXRlTW9ja1Rhc2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuan0pLG4uZCh0LCJjbG9uZWFibGVHZW5lcmF0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuaX0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvaW8uanMiKTtuLmQodCwiYXNFZmZlY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIG8uZH0pO3ZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvaW50ZXJuYWwvcHJvYy5qcyIpO24uZCh0LCJDSEFOTkVMX0VORCIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSl9LCIuL25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5kaXNwYXRjaCxyPXQuZ2V0U3RhdGU7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbz9vKG4scixlKTp0KG8pfX19fXQuX19lc01vZHVsZT0hMDt2YXIgbz1yKCk7by53aXRoRXh0cmFBcmd1bWVudD1yLHQuZGVmYXVsdD1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvYXBwbHlNaWRkbGV3YXJlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhPWUobixyLGkpLGw9YS5kaXNwYXRjaCx1PVtdLGM9e2dldFN0YXRlOmEuZ2V0U3RhdGUsZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9fTtyZXR1cm4gdT10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZShjKX0pLGw9by5hLmFwcGx5KHZvaWQgMCx1KShhLmRpc3BhdGNoKSxzKHt9LGEse2Rpc3BhdGNoOmx9KX19fXQuYT1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NvbXBvc2UuanMiKSxzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvYmluZEFjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdChlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiByKGUsdCk7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZSl0aHJvdyBuZXcgRXJyb3IoImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAiKyhudWxsPT09ZT8ibnVsbCI6dHlwZW9mIGUpKycuIERpZCB5b3Ugd3JpdGUgImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tIiBpbnN0ZWFkIG9mICJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tIj8nKTtmb3IodmFyIG49T2JqZWN0LmtleXMoZSksbz17fSxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBpPW5bc10sYT1lW2ldOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYob1tpXT1yKGEsdCkpfXJldHVybiBvfXQuYT1vfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvY29tYmluZVJlZHVjZXJzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10JiZ0LnR5cGU7cmV0dXJuIkdpdmVuIGFjdGlvbiAiKyhuJiYnIicrbi50b1N0cmluZygpKyciJ3x8ImFuIGFjdGlvbiIpKycsIHJlZHVjZXIgIicrZSsnIiByZXR1cm5lZCB1bmRlZmluZWQuIFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuJ31mdW5jdGlvbiBvKGUpe09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtpZih2b2lkIDA9PT1uKHZvaWQgMCx7dHlwZTppLmEuSU5JVH0pKXRocm93IG5ldyBFcnJvcignUmVkdWNlciAiJyt0KyJcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLiIpO2lmKHZvaWQgMD09PW4odm9pZCAwLHt0eXBlOiJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KCIiKS5qb2luKCIuIil9KSl0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgIicrdCsiXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gRG9uJ3QgdHJ5IHRvIGhhbmRsZSAiK2kuYS5JTklUKycgb3Igb3RoZXIgYWN0aW9ucyBpbiAicmVkdXgvKiIgbmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLicpfSl9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSksbj17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBpPXRbc107ImZ1bmN0aW9uIj09dHlwZW9mIGVbaV0mJihuW2ldPWVbaV0pfXZhciBhPU9iamVjdC5rZXlzKG4pLGw9dm9pZCAwO3RyeXtvKG4pfWNhdGNoKGUpe2w9ZX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHNbMV07aWYobCl0aHJvdyBsO2Zvcih2YXIgbz0hMSxzPXt9LGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXSxjPW5bdV0sZD1lW3VdLF89YyhkLHQpO2lmKHZvaWQgMD09PV8pe3ZhciBwPXIodSx0KTt0aHJvdyBuZXcgRXJyb3IocCl9c1t1XT1fLG89b3x8XyE9PWR9cmV0dXJuIG8/czplfX10LmE9czt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jcmVhdGVTdG9yZS5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIpfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvY29tcG9zZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gMD09PXQubGVuZ3RoP2Z1bmN0aW9uKGUpe3JldHVybiBlfToxPT09dC5sZW5ndGg/dFswXTp0LnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0pfXQuYT1yfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvY3JlYXRlU3RvcmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7ZnVuY3Rpb24gYSgpe2c9PT1oJiYoZz1oLnNsaWNlKCkpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbX1mdW5jdGlvbiB1KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4iKTt2YXIgdD0hMDtyZXR1cm4gYSgpLGcucHVzaChlKSxmdW5jdGlvbigpe2lmKHQpe3Q9ITEsYSgpO3ZhciBuPWcuaW5kZXhPZihlKTtnLnNwbGljZShuLDEpfX19ZnVuY3Rpb24gYyhlKXtpZighT2JqZWN0KG8uYSkoZSkpdGhyb3cgbmV3IEVycm9yKCJBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gVXNlIGN1c3RvbSBtaWRkbGV3YXJlIGZvciBhc3luYyBhY3Rpb25zLiIpO2lmKHZvaWQgMD09PWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCAidHlwZSIgcHJvcGVydHkuIEhhdmUgeW91IG1pc3NwZWxsZWQgYSBjb25zdGFudD8nKTtpZihiKXRocm93IG5ldyBFcnJvcigiUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLiIpO3RyeXtiPSEwLG09ZihtLGUpfWZpbmFsbHl7Yj0hMX1mb3IodmFyIHQ9aD1nLG49MDtuPHQubGVuZ3RoO24rKyl7KDAsdFtuXSkoKX1yZXR1cm4gZX1mdW5jdGlvbiBkKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7Zj1lLGMoe3R5cGU6aS5JTklUfSl9ZnVuY3Rpb24gXygpe3ZhciBlLHQ9dTtyZXR1cm4gZT17c3Vic2NyaWJlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtlLm5leHQmJmUubmV4dChsKCkpfWlmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiIpO3JldHVybiBuKCkse3Vuc3Vic2NyaWJlOnQobil9fX0sZVtzLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGV9dmFyIHA7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJnZvaWQgMD09PW4mJihuPXQsdD12b2lkIDApLHZvaWQgMCE9PW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7cmV0dXJuIG4ocikoZSx0KX1pZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIGY9ZSxtPXQsaD1bXSxnPWgsYj0hMTtyZXR1cm4gYyh7dHlwZTppLklOSVR9KSxwPXtkaXNwYXRjaDpjLHN1YnNjcmliZTp1LGdldFN0YXRlOmwscmVwbGFjZVJlZHVjZXI6ZH0scFtzLmFdPV8scH1uLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLHQuYj1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9lcy9pbmRleC5qcyIpLGk9e0lOSVQ6IkBAcmVkdXgvSU5JVCJ9fSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2NyZWF0ZVN0b3JlLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jb21iaW5lUmVkdWNlcnMuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvYXBwbHlNaWRkbGV3YXJlLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9jb21wb3NlLmpzIik7bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIpO24uZCh0LCJjcmVhdGVTdG9yZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5ifSksbi5kKHQsImNvbWJpbmVSZWR1Y2VycyIsZnVuY3Rpb24oKXtyZXR1cm4gby5hfSksbi5kKHQsImJpbmRBY3Rpb25DcmVhdG9ycyIsZnVuY3Rpb24oKXtyZXR1cm4gcy5hfSksbi5kKHQsImFwcGx5TWlkZGxld2FyZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSksbi5kKHQsImNvbXBvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pfSwiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0In0sIi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLG89ci5yZWdlbmVyYXRvclJ1bnRpbWUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmluZGV4T2YoInJlZ2VuZXJhdG9yUnVudGltZSIpPj0wLHM9byYmci5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoci5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwLGUuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiKSxvKXIucmVnZW5lcmF0b3JSdW50aW1lPXM7ZWxzZSB0cnl7ZGVsZXRlIHIucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKGUpe3IucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19LCIuL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiOmZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxuLHIpe3ZhciBzPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygbz90Om8saT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlKSxhPW5ldyBwKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPXUoZSxuLGEpLGl9ZnVuY3Rpb24gcihlLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxuKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gcygpe31mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIGEoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfX0pfWZ1bmN0aW9uIGwoZSl7ZnVuY3Rpb24gdChuLG8scyxpKXt2YXIgYT1yKGVbbl0sZSxvKTtpZigidGhyb3ciIT09YS50eXBlKXt2YXIgbD1hLmFyZyx1PWwudmFsdWU7cmV0dXJuIHUmJiJvYmplY3QiPT10eXBlb2YgdSYmYi5jYWxsKHUsIl9fYXdhaXQiKT9Qcm9taXNlLnJlc29sdmUodS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKGUpe3QoIm5leHQiLGUscyxpKX0sZnVuY3Rpb24oZSl7dCgidGhyb3ciLGUscyxpKX0pOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxzKGwpfSxpKX1pKGEuYXJnKX1mdW5jdGlvbiBuKGUsbil7ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe3QoZSxuLHIsbyl9KX1yZXR1cm4gbz1vP28udGhlbihyLHIpOnIoKX12YXIgbzt0aGlzLl9pbnZva2U9bn1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgbz1PO3JldHVybiBmdW5jdGlvbihzLGkpe2lmKG89PT1SKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKG89PT1qKXtpZigidGhyb3ciPT09cyl0aHJvdyBpO3JldHVybiBtKCl9Zm9yKG4ubWV0aG9kPXMsbi5hcmc9aTs7KXt2YXIgYT1uLmRlbGVnYXRlO2lmKGEpe3ZhciBsPWMoYSxuKTtpZihsKXtpZihsPT09eCljb250aW51ZTtyZXR1cm4gbH19aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKG89PT1PKXRocm93IG89aixuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO289Ujt2YXIgdT1yKGUsdCxuKTtpZigibm9ybWFsIj09PXUudHlwZSl7aWYobz1uLmRvbmU/ajpTLHUuYXJnPT09eCljb250aW51ZTtyZXR1cm57dmFsdWU6dS5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT11LnR5cGUmJihvPWosbi5tZXRob2Q9InRocm93IixuLmFyZz11LmFyZyl9fX1mdW5jdGlvbiBjKGUsdCl7dmFyIG49ZS5pdGVyYXRvclt0Lm1ldGhvZF07aWYobj09PWgpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9aCxjKGUsdCksInRocm93Ij09PXQubWV0aG9kKSlyZXR1cm4geDt0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4geH12YXIgbz1yKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PW8udHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1vLmFyZyx0LmRlbGVnYXRlPW51bGwseDt2YXIgcz1vLmFyZztyZXR1cm4gcz9zLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1zLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz1oKSx0LmRlbGVnYXRlPW51bGwseCk6czoodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCx4KX1mdW5jdGlvbiBkKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIHAoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChkLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIGYoZSl7aWYoZSl7dmFyIHQ9ZVt5XTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxyPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoYi5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT1oLHQuZG9uZT0hMCx0fTtyZXR1cm4gci5uZXh0PXJ9fXJldHVybntuZXh0Om19fWZ1bmN0aW9uIG0oKXtyZXR1cm57dmFsdWU6aCxkb25lOiEwfX12YXIgaCxnPU9iamVjdC5wcm90b3R5cGUsYj1nLmhhc093blByb3BlcnR5LEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30seT1FLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsdj1FLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLFQ9RS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciLEE9Im9iamVjdCI9PXR5cGVvZiBlLEM9dC5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoQylyZXR1cm4gdm9pZChBJiYoZS5leHBvcnRzPUMpKTtDPXQucmVnZW5lcmF0b3JSdW50aW1lPUE/ZS5leHBvcnRzOnt9LEMud3JhcD1uO3ZhciBPPSJzdXNwZW5kZWRTdGFydCIsUz0ic3VzcGVuZGVkWWllbGQiLFI9ImV4ZWN1dGluZyIsaj0iY29tcGxldGVkIix4PXt9LEw9e307TFt5XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgRD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz1EJiZEKEQoZihbXSkpKTt3JiZ3IT09ZyYmYi5jYWxsKHcseSkmJihMPXcpO3ZhciBNPWkucHJvdG90eXBlPW8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTCk7cy5wcm90b3R5cGU9TS5jb25zdHJ1Y3Rvcj1pLGkuY29uc3RydWN0b3I9cyxpW1RdPXMuZGlzcGxheU5hbWU9IkdlbmVyYXRvckZ1bmN0aW9uIixDLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PXN8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LEMubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLGkpOihlLl9fcHJvdG9fXz1pLFQgaW4gZXx8KGVbVF09IkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTSksZX0sQy5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYShsLnByb3RvdHlwZSksbC5wcm90b3R5cGVbdl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQy5Bc3luY0l0ZXJhdG9yPWwsQy5hc3luYz1mdW5jdGlvbihlLHQscixvKXt2YXIgcz1uZXcgbChuKGUsdCxyLG8pKTtyZXR1cm4gQy5pc0dlbmVyYXRvckZ1bmN0aW9uKHQpP3M6cy5uZXh0KCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6cy5uZXh0KCl9KX0sYShNKSxNW1RdPSJHZW5lcmF0b3IiLE1beV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sTS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSxDLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7aWYociBpbiBlKXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sQy52YWx1ZXM9ZixwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCxyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1oLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWgsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goXyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJmIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT1oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0sdD1lLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7cmV0dXJuIHMudHlwZT0idGhyb3ciLHMuYXJnPWUsbi5uZXh0PXQsciYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz1oKSwhIXJ9aWYodGhpcy5kb25lKXRocm93IGU7Zm9yKHZhciBuPXRoaXMscj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBvPXRoaXMudHJ5RW50cmllc1tyXSxzPW8uY29tcGxldGlvbjtpZigicm9vdCI9PT1vLnRyeUxvYylyZXR1cm4gdCgiZW5kIik7aWYoby50cnlMb2M8PXRoaXMucHJldil7dmFyIGk9Yi5jYWxsKG8sImNhdGNoTG9jIiksYT1iLmNhbGwobywiZmluYWxseUxvYyIpO2lmKGkmJmEpe2lmKHRoaXMucHJldjxvLmNhdGNoTG9jKXJldHVybiB0KG8uY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxvLmZpbmFsbHlMb2MpcmV0dXJuIHQoby5maW5hbGx5TG9jKX1lbHNlIGlmKGkpe2lmKHRoaXMucHJldjxvLmNhdGNoTG9jKXJldHVybiB0KG8uY2F0Y2hMb2MsITApfWVsc2V7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxvLmZpbmFsbHlMb2MpcmV0dXJuIHQoby5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIHI9dGhpcy50cnlFbnRyaWVzW25dO2lmKHIudHJ5TG9jPD10aGlzLnByZXYmJmIuY2FsbChyLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxyLmZpbmFsbHlMb2Mpe3ZhciBvPXI7YnJlYWt9fW8mJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZvLnRyeUxvYzw9dCYmdDw9by5maW5hbGx5TG9jJiYobz1udWxsKTt2YXIgcz1vP28uY29tcGxldGlvbjp7fTtyZXR1cm4gcy50eXBlPWUscy5hcmc9dCxvPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PW8uZmluYWxseUxvYyx4KTp0aGlzLmNvbXBsZXRlKHMpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLHh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksXyhuKSx4fX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIG49dGhpcy50cnlFbnRyaWVzW3RdO2lmKG4udHJ5TG9jPT09ZSl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1yLnR5cGUpe3ZhciBvPXIuYXJnO18obil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpmKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOm59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9aCkseH19fShmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpKX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2luZGV4LmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vZW50aXRpZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtBYWN1dGU6IsOBIixhYWN1dGU6IsOhIixBYnJldmU6IsSCIixhYnJldmU6IsSDIixhYzoi4oi+IixhY2Q6IuKIvyIsYWNFOiLiiL7MsyIsQWNpcmM6IsOCIixhY2lyYzoiw6IiLGFjdXRlOiLCtCIsQWN5OiLQkCIsYWN5OiLQsCIsQUVsaWc6IsOGIixhZWxpZzoiw6YiLGFmOiLigaEiLEFmcjoi8J2UhCIsYWZyOiLwnZSeIixBZ3JhdmU6IsOAIixhZ3JhdmU6IsOgIixhbGVmc3ltOiLihLUiLGFsZXBoOiLihLUiLEFscGhhOiLOkSIsYWxwaGE6Is6xIixBbWFjcjoixIAiLGFtYWNyOiLEgSIsYW1hbGc6IuKovyIsQU1QOiImIixhbXA6IiYiLEFuZDoi4qmTIixhbmQ6IuKIpyIsYW5kYW5kOiLiqZUiLGFuZGQ6IuKpnCIsYW5kc2xvcGU6IuKpmCIsYW5kdjoi4qmaIixhbmc6IuKIoCIsYW5nZToi4qakIixhbmdsZToi4oigIixhbmdtc2Q6IuKIoSIsYW5nbXNkYWE6IuKmqCIsYW5nbXNkYWI6IuKmqSIsYW5nbXNkYWM6IuKmqiIsYW5nbXNkYWQ6IuKmqyIsYW5nbXNkYWU6IuKmrCIsYW5nbXNkYWY6IuKmrSIsYW5nbXNkYWc6IuKmriIsYW5nbXNkYWg6IuKmryIsYW5ncnQ6IuKInyIsYW5ncnR2Yjoi4oq+IixhbmdydHZiZDoi4qadIixhbmdzcGg6IuKIoiIsYW5nc3Q6IsOFIixhbmd6YXJyOiLijbwiLEFvZ29uOiLEhCIsYW9nb246IsSFIixBb3BmOiLwnZS4Iixhb3BmOiLwnZWSIixhcDoi4omIIixhcGFjaXI6IuKpryIsYXBFOiLiqbAiLGFwZToi4omKIixhcGlkOiLiiYsiLGFwb3M6IiciLEFwcGx5RnVuY3Rpb246IuKBoSIsYXBwcm94OiLiiYgiLGFwcHJveGVxOiLiiYoiLEFyaW5nOiLDhSIsYXJpbmc6IsOlIixBc2NyOiLwnZKcIixhc2NyOiLwnZK2IixBc3NpZ246IuKJlCIsYXN0OiIqIixhc3ltcDoi4omIIixhc3ltcGVxOiLiiY0iLEF0aWxkZToiw4MiLGF0aWxkZToiw6MiLEF1bWw6IsOEIixhdW1sOiLDpCIsYXdjb25pbnQ6IuKIsyIsYXdpbnQ6IuKokSIsYmFja2Nvbmc6IuKJjCIsYmFja2Vwc2lsb246Is+2IixiYWNrcHJpbWU6IuKAtSIsYmFja3NpbToi4oi9IixiYWNrc2ltZXE6IuKLjSIsQmFja3NsYXNoOiLiiJYiLEJhcnY6IuKrpyIsYmFydmVlOiLiir0iLEJhcndlZDoi4oyGIixiYXJ3ZWQ6IuKMhSIsYmFyd2VkZ2U6IuKMhSIsYmJyazoi4o61IixiYnJrdGJyazoi4o62IixiY29uZzoi4omMIixCY3k6ItCRIixiY3k6ItCxIixiZHF1bzoi4oCeIixiZWNhdXM6IuKItSIsQmVjYXVzZToi4oi1IixiZWNhdXNlOiLiiLUiLGJlbXB0eXY6IuKmsCIsYmVwc2k6Is+2IixiZXJub3U6IuKErCIsQmVybm91bGxpczoi4oSsIixCZXRhOiLOkiIsYmV0YToizrIiLGJldGg6IuKEtiIsYmV0d2Vlbjoi4omsIixCZnI6IvCdlIUiLGJmcjoi8J2UnyIsYmlnY2FwOiLii4IiLGJpZ2NpcmM6IuKXryIsYmlnY3VwOiLii4MiLGJpZ29kb3Q6IuKogCIsYmlnb3BsdXM6IuKogSIsYmlnb3RpbWVzOiLiqIIiLGJpZ3NxY3VwOiLiqIYiLGJpZ3N0YXI6IuKYhSIsYmlndHJpYW5nbGVkb3duOiLilr0iLGJpZ3RyaWFuZ2xldXA6IuKWsyIsYmlndXBsdXM6IuKohCIsYmlndmVlOiLii4EiLGJpZ3dlZGdlOiLii4AiLGJrYXJvdzoi4qSNIixibGFja2xvemVuZ2U6IuKnqyIsYmxhY2tzcXVhcmU6IuKWqiIsYmxhY2t0cmlhbmdsZToi4pa0IixibGFja3RyaWFuZ2xlZG93bjoi4pa+IixibGFja3RyaWFuZ2xlbGVmdDoi4peCIixibGFja3RyaWFuZ2xlcmlnaHQ6IuKWuCIsYmxhbms6IuKQoyIsYmxrMTI6IuKWkiIsYmxrMTQ6IuKWkSIsYmxrMzQ6IuKWkyIsYmxvY2s6IuKWiCIsYm5lOiI94oOlIixibmVxdWl2OiLiiaHig6UiLGJOb3Q6IuKrrSIsYm5vdDoi4oyQIixCb3BmOiLwnZS5Iixib3BmOiLwnZWTIixib3Q6IuKKpSIsYm90dG9tOiLiiqUiLGJvd3RpZToi4ouIIixib3hib3g6IuKniSIsYm94REw6IuKVlyIsYm94RGw6IuKVliIsYm94ZEw6IuKVlSIsYm94ZGw6IuKUkCIsYm94RFI6IuKVlCIsYm94RHI6IuKVkyIsYm94ZFI6IuKVkiIsYm94ZHI6IuKUjCIsYm94SDoi4pWQIixib3hoOiLilIAiLGJveEhEOiLilaYiLGJveEhkOiLilaQiLGJveGhEOiLilaUiLGJveGhkOiLilKwiLGJveEhVOiLilakiLGJveEh1OiLilaciLGJveGhVOiLilagiLGJveGh1OiLilLQiLGJveG1pbnVzOiLiip8iLGJveHBsdXM6IuKKniIsYm94dGltZXM6IuKKoCIsYm94VUw6IuKVnSIsYm94VWw6IuKVnCIsYm94dUw6IuKVmyIsYm94dWw6IuKUmCIsYm94VVI6IuKVmiIsYm94VXI6IuKVmSIsYm94dVI6IuKVmCIsYm94dXI6IuKUlCIsYm94Vjoi4pWRIixib3h2OiLilIIiLGJveFZIOiLilawiLGJveFZoOiLilasiLGJveHZIOiLilaoiLGJveHZoOiLilLwiLGJveFZMOiLilaMiLGJveFZsOiLilaIiLGJveHZMOiLilaEiLGJveHZsOiLilKQiLGJveFZSOiLilaAiLGJveFZyOiLilZ8iLGJveHZSOiLilZ4iLGJveHZyOiLilJwiLGJwcmltZToi4oC1IixCcmV2ZToiy5giLGJyZXZlOiLLmCIsYnJ2YmFyOiLCpiIsQnNjcjoi4oSsIixic2NyOiLwnZK3Iixic2VtaToi4oGPIixic2ltOiLiiL0iLGJzaW1lOiLii40iLGJzb2w6IlxcIixic29sYjoi4qeFIixic29saHN1Yjoi4p+IIixidWxsOiLigKIiLGJ1bGxldDoi4oCiIixidW1wOiLiiY4iLGJ1bXBFOiLiqq4iLGJ1bXBlOiLiiY8iLEJ1bXBlcToi4omOIixidW1wZXE6IuKJjyIsQ2FjdXRlOiLEhiIsY2FjdXRlOiLEhyIsQ2FwOiLii5IiLGNhcDoi4oipIixjYXBhbmQ6IuKphCIsY2FwYnJjdXA6IuKpiSIsY2FwY2FwOiLiqYsiLGNhcGN1cDoi4qmHIixjYXBkb3Q6IuKpgCIsQ2FwaXRhbERpZmZlcmVudGlhbEQ6IuKFhSIsY2Fwczoi4oip77iAIixjYXJldDoi4oGBIixjYXJvbjoiy4ciLENheWxleXM6IuKErSIsY2NhcHM6IuKpjSIsQ2Nhcm9uOiLEjCIsY2Nhcm9uOiLEjSIsQ2NlZGlsOiLDhyIsY2NlZGlsOiLDpyIsQ2NpcmM6IsSIIixjY2lyYzoixIkiLENjb25pbnQ6IuKIsCIsY2N1cHM6IuKpjCIsY2N1cHNzbToi4qmQIixDZG90OiLEiiIsY2RvdDoixIsiLGNlZGlsOiLCuCIsQ2VkaWxsYToiwrgiLGNlbXB0eXY6IuKmsiIsY2VudDoiwqIiLENlbnRlckRvdDoiwrciLGNlbnRlcmRvdDoiwrciLENmcjoi4oStIixjZnI6IvCdlKAiLENIY3k6ItCnIixjaGN5OiLRhyIsY2hlY2s6IuKckyIsY2hlY2ttYXJrOiLinJMiLENoaToizqciLGNoaToiz4ciLGNpcjoi4peLIixjaXJjOiLLhiIsY2lyY2VxOiLiiZciLGNpcmNsZWFycm93bGVmdDoi4oa6IixjaXJjbGVhcnJvd3JpZ2h0OiLihrsiLGNpcmNsZWRhc3Q6IuKKmyIsY2lyY2xlZGNpcmM6IuKKmiIsY2lyY2xlZGRhc2g6IuKKnSIsQ2lyY2xlRG90OiLiipkiLGNpcmNsZWRSOiLCriIsY2lyY2xlZFM6IuKTiCIsQ2lyY2xlTWludXM6IuKKliIsQ2lyY2xlUGx1czoi4oqVIixDaXJjbGVUaW1lczoi4oqXIixjaXJFOiLip4MiLGNpcmU6IuKJlyIsY2lyZm5pbnQ6IuKokCIsY2lybWlkOiLiq68iLGNpcnNjaXI6IuKngiIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToi4oCdIixDbG9zZUN1cmx5UXVvdGU6IuKAmSIsY2x1YnM6IuKZoyIsY2x1YnN1aXQ6IuKZoyIsQ29sb246IuKItyIsY29sb246IjoiLENvbG9uZToi4qm0Iixjb2xvbmU6IuKJlCIsY29sb25lcToi4omUIixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiLiiIEiLGNvbXBmbjoi4oiYIixjb21wbGVtZW50OiLiiIEiLGNvbXBsZXhlczoi4oSCIixjb25nOiLiiYUiLGNvbmdkb3Q6IuKprSIsQ29uZ3J1ZW50OiLiiaEiLENvbmludDoi4oivIixjb25pbnQ6IuKIriIsQ29udG91ckludGVncmFsOiLiiK4iLENvcGY6IuKEgiIsY29wZjoi8J2VlCIsY29wcm9kOiLiiJAiLENvcHJvZHVjdDoi4oiQIixDT1BZOiLCqSIsY29weToiwqkiLGNvcHlzcjoi4oSXIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLMiLGNyYXJyOiLihrUiLENyb3NzOiLiqK8iLGNyb3NzOiLinJciLENzY3I6IvCdkp4iLGNzY3I6IvCdkrgiLGNzdWI6IuKrjyIsY3N1YmU6IuKrkSIsY3N1cDoi4quQIixjc3VwZToi4quSIixjdGRvdDoi4ouvIixjdWRhcnJsOiLipLgiLGN1ZGFycnI6IuKktSIsY3VlcHI6IuKLniIsY3Vlc2M6IuKLnyIsY3VsYXJyOiLihrYiLGN1bGFycnA6IuKkvSIsQ3VwOiLii5MiLGN1cDoi4oiqIixjdXBicmNhcDoi4qmIIixDdXBDYXA6IuKJjSIsY3VwY2FwOiLiqYYiLGN1cGN1cDoi4qmKIixjdXBkb3Q6IuKKjSIsY3Vwb3I6IuKphSIsY3Vwczoi4oiq77iAIixjdXJhcnI6IuKGtyIsY3VyYXJybToi4qS8IixjdXJseWVxcHJlYzoi4oueIixjdXJseWVxc3VjYzoi4oufIixjdXJseXZlZToi4ouOIixjdXJseXdlZGdlOiLii48iLGN1cnJlbjoiwqQiLGN1cnZlYXJyb3dsZWZ0OiLihrYiLGN1cnZlYXJyb3dyaWdodDoi4oa3IixjdXZlZToi4ouOIixjdXdlZDoi4ouPIixjd2NvbmludDoi4oiyIixjd2ludDoi4oixIixjeWxjdHk6IuKMrSIsRGFnZ2VyOiLigKEiLGRhZ2dlcjoi4oCgIixkYWxldGg6IuKEuCIsRGFycjoi4oahIixkQXJyOiLih5MiLGRhcnI6IuKGkyIsZGFzaDoi4oCQIixEYXNodjoi4qukIixkYXNodjoi4oqjIixkYmthcm93OiLipI8iLGRibGFjOiLLnSIsRGNhcm9uOiLEjiIsZGNhcm9uOiLEjyIsRGN5OiLQlCIsZGN5OiLQtCIsREQ6IuKFhSIsZGQ6IuKFhiIsZGRhZ2dlcjoi4oChIixkZGFycjoi4oeKIixERG90cmFoZDoi4qSRIixkZG90c2VxOiLiqbciLGRlZzoiwrAiLERlbDoi4oiHIixEZWx0YToizpQiLGRlbHRhOiLOtCIsZGVtcHR5djoi4qaxIixkZmlzaHQ6IuKlvyIsRGZyOiLwnZSHIixkZnI6IvCdlKEiLGRIYXI6IuKlpSIsZGhhcmw6IuKHgyIsZGhhcnI6IuKHgiIsRGlhY3JpdGljYWxBY3V0ZToiwrQiLERpYWNyaXRpY2FsRG90OiLLmSIsRGlhY3JpdGljYWxEb3VibGVBY3V0ZToiy50iLERpYWNyaXRpY2FsR3JhdmU6ImAiLERpYWNyaXRpY2FsVGlsZGU6IsucIixkaWFtOiLii4QiLERpYW1vbmQ6IuKLhCIsZGlhbW9uZDoi4ouEIixkaWFtb25kc3VpdDoi4pmmIixkaWFtczoi4pmmIixkaWU6IsKoIixEaWZmZXJlbnRpYWxEOiLihYYiLGRpZ2FtbWE6Is+dIixkaXNpbjoi4ouyIixkaXY6IsO3IixkaXZpZGU6IsO3IixkaXZpZGVvbnRpbWVzOiLii4ciLGRpdm9ueDoi4ouHIixESmN5OiLQgiIsZGpjeToi0ZIiLGRsY29ybjoi4oyeIixkbGNyb3A6IuKMjSIsZG9sbGFyOiIkIixEb3BmOiLwnZS7Iixkb3BmOiLwnZWVIixEb3Q6IsKoIixkb3Q6IsuZIixEb3REb3Q6IuKDnCIsZG90ZXE6IuKJkCIsZG90ZXFkb3Q6IuKJkSIsRG90RXF1YWw6IuKJkCIsZG90bWludXM6IuKIuCIsZG90cGx1czoi4oiUIixkb3RzcXVhcmU6IuKKoSIsZG91YmxlYmFyd2VkZ2U6IuKMhiIsRG91YmxlQ29udG91ckludGVncmFsOiLiiK8iLERvdWJsZURvdDoiwqgiLERvdWJsZURvd25BcnJvdzoi4oeTIixEb3VibGVMZWZ0QXJyb3c6IuKHkCIsRG91YmxlTGVmdFJpZ2h0QXJyb3c6IuKHlCIsRG91YmxlTGVmdFRlZToi4qukIixEb3VibGVMb25nTGVmdEFycm93OiLin7giLERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdzoi4p+6IixEb3VibGVMb25nUmlnaHRBcnJvdzoi4p+5IixEb3VibGVSaWdodEFycm93OiLih5IiLERvdWJsZVJpZ2h0VGVlOiLiiqgiLERvdWJsZVVwQXJyb3c6IuKHkSIsRG91YmxlVXBEb3duQXJyb3c6IuKHlSIsRG91YmxlVmVydGljYWxCYXI6IuKIpSIsRG93bkFycm93OiLihpMiLERvd25hcnJvdzoi4oeTIixkb3duYXJyb3c6IuKGkyIsRG93bkFycm93QmFyOiLipJMiLERvd25BcnJvd1VwQXJyb3c6IuKHtSIsRG93bkJyZXZlOiLMkSIsZG93bmRvd25hcnJvd3M6IuKHiiIsZG93bmhhcnBvb25sZWZ0OiLih4MiLGRvd25oYXJwb29ucmlnaHQ6IuKHgiIsRG93bkxlZnRSaWdodFZlY3Rvcjoi4qWQIixEb3duTGVmdFRlZVZlY3Rvcjoi4qWeIixEb3duTGVmdFZlY3Rvcjoi4oa9IixEb3duTGVmdFZlY3RvckJhcjoi4qWWIixEb3duUmlnaHRUZWVWZWN0b3I6IuKlnyIsRG93blJpZ2h0VmVjdG9yOiLih4EiLERvd25SaWdodFZlY3RvckJhcjoi4qWXIixEb3duVGVlOiLiiqQiLERvd25UZWVBcnJvdzoi4oanIixkcmJrYXJvdzoi4qSQIixkcmNvcm46IuKMnyIsZHJjcm9wOiLijIwiLERzY3I6IvCdkp8iLGRzY3I6IvCdkrkiLERTY3k6ItCFIixkc2N5OiLRlSIsZHNvbDoi4qe2IixEc3Ryb2s6IsSQIixkc3Ryb2s6IsSRIixkdGRvdDoi4ouxIixkdHJpOiLilr8iLGR0cmlmOiLilr4iLGR1YXJyOiLih7UiLGR1aGFyOiLipa8iLGR3YW5nbGU6IuKmpiIsRFpjeToi0I8iLGR6Y3k6ItGfIixkemlncmFycjoi4p+/IixFYWN1dGU6IsOJIixlYWN1dGU6IsOpIixlYXN0ZXI6IuKpriIsRWNhcm9uOiLEmiIsZWNhcm9uOiLEmyIsZWNpcjoi4omWIixFY2lyYzoiw4oiLGVjaXJjOiLDqiIsZWNvbG9uOiLiiZUiLEVjeToi0K0iLGVjeToi0Y0iLGVERG90OiLiqbciLEVkb3Q6IsSWIixlRG90OiLiiZEiLGVkb3Q6IsSXIixlZToi4oWHIixlZkRvdDoi4omSIixFZnI6IvCdlIgiLGVmcjoi8J2UoiIsZWc6IuKqmiIsRWdyYXZlOiLDiCIsZWdyYXZlOiLDqCIsZWdzOiLiqpYiLGVnc2RvdDoi4qqYIixlbDoi4qqZIixFbGVtZW50OiLiiIgiLGVsaW50ZXJzOiLij6ciLGVsbDoi4oSTIixlbHM6IuKqlSIsZWxzZG90OiLiqpciLEVtYWNyOiLEkiIsZW1hY3I6IsSTIixlbXB0eToi4oiFIixlbXB0eXNldDoi4oiFIixFbXB0eVNtYWxsU3F1YXJlOiLil7siLGVtcHR5djoi4oiFIixFbXB0eVZlcnlTbWFsbFNxdWFyZToi4parIixlbXNwOiLigIMiLGVtc3AxMzoi4oCEIixlbXNwMTQ6IuKAhSIsRU5HOiLFiiIsZW5nOiLFiyIsZW5zcDoi4oCCIixFb2dvbjoixJgiLGVvZ29uOiLEmSIsRW9wZjoi8J2UvCIsZW9wZjoi8J2VliIsZXBhcjoi4ouVIixlcGFyc2w6IuKnoyIsZXBsdXM6IuKpsSIsZXBzaToizrUiLEVwc2lsb246Is6VIixlcHNpbG9uOiLOtSIsZXBzaXY6Is+1IixlcWNpcmM6IuKJliIsZXFjb2xvbjoi4omVIixlcXNpbToi4omCIixlcXNsYW50Z3RyOiLiqpYiLGVxc2xhbnRsZXNzOiLiqpUiLEVxdWFsOiLiqbUiLGVxdWFsczoiPSIsRXF1YWxUaWxkZToi4omCIixlcXVlc3Q6IuKJnyIsRXF1aWxpYnJpdW06IuKHjCIsZXF1aXY6IuKJoSIsZXF1aXZERDoi4qm4IixlcXZwYXJzbDoi4qelIixlcmFycjoi4qWxIixlckRvdDoi4omTIixFc2NyOiLihLAiLGVzY3I6IuKEryIsZXNkb3Q6IuKJkCIsRXNpbToi4qmzIixlc2ltOiLiiYIiLEV0YToizpciLGV0YToizrciLEVUSDoiw5AiLGV0aDoiw7AiLEV1bWw6IsOLIixldW1sOiLDqyIsZXVybzoi4oKsIixleGNsOiIhIixleGlzdDoi4oiDIixFeGlzdHM6IuKIgyIsZXhwZWN0YXRpb246IuKEsCIsRXhwb25lbnRpYWxFOiLihYciLGV4cG9uZW50aWFsZToi4oWHIixmYWxsaW5nZG90c2VxOiLiiZIiLEZjeToi0KQiLGZjeToi0YQiLGZlbWFsZToi4pmAIixmZmlsaWc6Iu+sgyIsZmZsaWc6Iu+sgCIsZmZsbGlnOiLvrIQiLEZmcjoi8J2UiSIsZmZyOiLwnZSjIixmaWxpZzoi76yBIixGaWxsZWRTbWFsbFNxdWFyZToi4pe8IixGaWxsZWRWZXJ5U21hbGxTcXVhcmU6IuKWqiIsZmpsaWc6ImZqIixmbGF0OiLima0iLGZsbGlnOiLvrIIiLGZsdG5zOiLilrEiLGZub2Y6IsaSIixGb3BmOiLwnZS9Iixmb3BmOiLwnZWXIixGb3JBbGw6IuKIgCIsZm9yYWxsOiLiiIAiLGZvcms6IuKLlCIsZm9ya3Y6IuKrmSIsRm91cmllcnRyZjoi4oSxIixmcGFydGludDoi4qiNIixmcmFjMTI6IsK9IixmcmFjMTM6IuKFkyIsZnJhYzE0OiLCvCIsZnJhYzE1OiLihZUiLGZyYWMxNjoi4oWZIixmcmFjMTg6IuKFmyIsZnJhYzIzOiLihZQiLGZyYWMyNToi4oWWIixmcmFjMzQ6IsK+IixmcmFjMzU6IuKFlyIsZnJhYzM4OiLihZwiLGZyYWM0NToi4oWYIixmcmFjNTY6IuKFmiIsZnJhYzU4OiLihZ0iLGZyYWM3ODoi4oWeIixmcmFzbDoi4oGEIixmcm93bjoi4oyiIixGc2NyOiLihLEiLGZzY3I6IvCdkrsiLGdhY3V0ZToix7UiLEdhbW1hOiLOkyIsZ2FtbWE6Is6zIixHYW1tYWQ6Is+cIixnYW1tYWQ6Is+dIixnYXA6IuKqhiIsR2JyZXZlOiLEniIsZ2JyZXZlOiLEnyIsR2NlZGlsOiLEoiIsR2NpcmM6IsScIixnY2lyYzoixJ0iLEdjeToi0JMiLGdjeToi0LMiLEdkb3Q6IsSgIixnZG90OiLEoSIsZ0U6IuKJpyIsZ2U6IuKJpSIsZ0VsOiLiqowiLGdlbDoi4oubIixnZXE6IuKJpSIsZ2VxcToi4omnIixnZXFzbGFudDoi4qm+IixnZXM6IuKpviIsZ2VzY2M6IuKqqSIsZ2VzZG90OiLiqoAiLGdlc2RvdG86IuKqgiIsZ2VzZG90b2w6IuKqhCIsZ2VzbDoi4oub77iAIixnZXNsZXM6IuKqlCIsR2ZyOiLwnZSKIixnZnI6IvCdlKQiLEdnOiLii5kiLGdnOiLiiasiLGdnZzoi4ouZIixnaW1lbDoi4oS3IixHSmN5OiLQgyIsZ2pjeToi0ZMiLGdsOiLiibciLGdsYToi4qqlIixnbEU6IuKqkiIsZ2xqOiLiqqQiLGduYXA6IuKqiiIsZ25hcHByb3g6IuKqiiIsZ25FOiLiiakiLGduZToi4qqIIixnbmVxOiLiqogiLGduZXFxOiLiiakiLGduc2ltOiLii6ciLEdvcGY6IvCdlL4iLGdvcGY6IvCdlZgiLGdyYXZlOiJgIixHcmVhdGVyRXF1YWw6IuKJpSIsR3JlYXRlckVxdWFsTGVzczoi4oubIixHcmVhdGVyRnVsbEVxdWFsOiLiiaciLEdyZWF0ZXJHcmVhdGVyOiLiqqIiLEdyZWF0ZXJMZXNzOiLiibciLEdyZWF0ZXJTbGFudEVxdWFsOiLiqb4iLEdyZWF0ZXJUaWxkZToi4omzIixHc2NyOiLwnZKiIixnc2NyOiLihIoiLGdzaW06IuKJsyIsZ3NpbWU6IuKqjiIsZ3NpbWw6IuKqkCIsR1Q6Ij4iLEd0OiLiiasiLGd0OiI+IixndGNjOiLiqqciLGd0Y2lyOiLiqboiLGd0ZG90OiLii5ciLGd0bFBhcjoi4qaVIixndHF1ZXN0OiLiqbwiLGd0cmFwcHJveDoi4qqGIixndHJhcnI6IuKluCIsZ3RyZG90OiLii5ciLGd0cmVxbGVzczoi4oubIixndHJlcXFsZXNzOiLiqowiLGd0cmxlc3M6IuKJtyIsZ3Ryc2ltOiLiibMiLGd2ZXJ0bmVxcToi4omp77iAIixndm5FOiLiianvuIAiLEhhY2VrOiLLhyIsaGFpcnNwOiLigIoiLGhhbGY6IsK9IixoYW1pbHQ6IuKEiyIsSEFSRGN5OiLQqiIsaGFyZGN5OiLRiiIsaEFycjoi4oeUIixoYXJyOiLihpQiLGhhcnJjaXI6IuKliCIsaGFycnc6IuKGrSIsSGF0OiJeIixoYmFyOiLihI8iLEhjaXJjOiLEpCIsaGNpcmM6IsSlIixoZWFydHM6IuKZpSIsaGVhcnRzdWl0OiLimaUiLGhlbGxpcDoi4oCmIixoZXJjb246IuKKuSIsSGZyOiLihIwiLGhmcjoi8J2UpSIsSGlsYmVydFNwYWNlOiLihIsiLGhrc2Vhcm93OiLipKUiLGhrc3dhcm93OiLipKYiLGhvYXJyOiLih78iLGhvbXRodDoi4oi7Iixob29rbGVmdGFycm93OiLihqkiLGhvb2tyaWdodGFycm93OiLihqoiLEhvcGY6IuKEjSIsaG9wZjoi8J2VmSIsaG9yYmFyOiLigJUiLEhvcml6b250YWxMaW5lOiLilIAiLEhzY3I6IuKEiyIsaHNjcjoi8J2SvSIsaHNsYXNoOiLihI8iLEhzdHJvazoixKYiLGhzdHJvazoixKciLEh1bXBEb3duSHVtcDoi4omOIixIdW1wRXF1YWw6IuKJjyIsaHlidWxsOiLigYMiLGh5cGhlbjoi4oCQIixJYWN1dGU6IsONIixpYWN1dGU6IsOtIixpYzoi4oGjIixJY2lyYzoiw44iLGljaXJjOiLDriIsSWN5OiLQmCIsaWN5OiLQuCIsSWRvdDoixLAiLElFY3k6ItCVIixpZWN5OiLQtSIsaWV4Y2w6IsKhIixpZmY6IuKHlCIsSWZyOiLihJEiLGlmcjoi8J2UpiIsSWdyYXZlOiLDjCIsaWdyYXZlOiLDrCIsaWk6IuKFiCIsaWlpaW50OiLiqIwiLGlpaW50OiLiiK0iLGlpbmZpbjoi4qecIixpaW90YToi4oSpIixJSmxpZzoixLIiLGlqbGlnOiLEsyIsSW06IuKEkSIsSW1hY3I6IsSqIixpbWFjcjoixKsiLGltYWdlOiLihJEiLEltYWdpbmFyeUk6IuKFiCIsaW1hZ2xpbmU6IuKEkCIsaW1hZ3BhcnQ6IuKEkSIsaW1hdGg6IsSxIixpbW9mOiLiirciLGltcGVkOiLGtSIsSW1wbGllczoi4oeSIixpbjoi4oiIIixpbmNhcmU6IuKEhSIsaW5maW46IuKIniIsaW5maW50aWU6IuKnnSIsaW5vZG90OiLEsSIsSW50OiLiiKwiLGludDoi4oirIixpbnRjYWw6IuKKuiIsaW50ZWdlcnM6IuKEpCIsSW50ZWdyYWw6IuKIqyIsaW50ZXJjYWw6IuKKuiIsSW50ZXJzZWN0aW9uOiLii4IiLGludGxhcmhrOiLiqJciLGludHByb2Q6IuKovCIsSW52aXNpYmxlQ29tbWE6IuKBoyIsSW52aXNpYmxlVGltZXM6IuKBoiIsSU9jeToi0IEiLGlvY3k6ItGRIixJb2dvbjoixK4iLGlvZ29uOiLEryIsSW9wZjoi8J2VgCIsaW9wZjoi8J2VmiIsSW90YToizpkiLGlvdGE6Is65IixpcHJvZDoi4qi8IixpcXVlc3Q6IsK/IixJc2NyOiLihJAiLGlzY3I6IvCdkr4iLGlzaW46IuKIiCIsaXNpbmRvdDoi4ou1Iixpc2luRToi4ou5Iixpc2luczoi4ou0Iixpc2luc3Y6IuKLsyIsaXNpbnY6IuKIiCIsaXQ6IuKBoiIsSXRpbGRlOiLEqCIsaXRpbGRlOiLEqSIsSXVrY3k6ItCGIixpdWtjeToi0ZYiLEl1bWw6IsOPIixpdW1sOiLDryIsSmNpcmM6IsS0IixqY2lyYzoixLUiLEpjeToi0JkiLGpjeToi0LkiLEpmcjoi8J2UjSIsamZyOiLwnZSnIixqbWF0aDoiyLciLEpvcGY6IvCdlYEiLGpvcGY6IvCdlZsiLEpzY3I6IvCdkqUiLGpzY3I6IvCdkr8iLEpzZXJjeToi0IgiLGpzZXJjeToi0ZgiLEp1a2N5OiLQhCIsanVrY3k6ItGUIixLYXBwYToizpoiLGthcHBhOiLOuiIsa2FwcGF2OiLPsCIsS2NlZGlsOiLEtiIsa2NlZGlsOiLEtyIsS2N5OiLQmiIsa2N5OiLQuiIsS2ZyOiLwnZSOIixrZnI6IvCdlKgiLGtncmVlbjoixLgiLEtIY3k6ItClIixraGN5OiLRhSIsS0pjeToi0IwiLGtqY3k6ItGcIixLb3BmOiLwnZWCIixrb3BmOiLwnZWcIixLc2NyOiLwnZKmIixrc2NyOiLwnZOAIixsQWFycjoi4oeaIixMYWN1dGU6IsS5IixsYWN1dGU6IsS6IixsYWVtcHR5djoi4qa0IixsYWdyYW46IuKEkiIsTGFtYmRhOiLOmyIsbGFtYmRhOiLOuyIsTGFuZzoi4p+qIixsYW5nOiLin6giLGxhbmdkOiLippEiLGxhbmdsZToi4p+oIixsYXA6IuKqhSIsTGFwbGFjZXRyZjoi4oSSIixsYXF1bzoiwqsiLExhcnI6IuKGniIsbEFycjoi4oeQIixsYXJyOiLihpAiLGxhcnJiOiLih6QiLGxhcnJiZnM6IuKknyIsbGFycmZzOiLipJ0iLGxhcnJoazoi4oapIixsYXJybHA6IuKGqyIsbGFycnBsOiLipLkiLGxhcnJzaW06IuKlsyIsbGFycnRsOiLihqIiLGxhdDoi4qqrIixsQXRhaWw6IuKkmyIsbGF0YWlsOiLipJkiLGxhdGU6IuKqrSIsbGF0ZXM6IuKqre+4gCIsbEJhcnI6IuKkjiIsbGJhcnI6IuKkjCIsbGJicms6IuKdsiIsbGJyYWNlOiJ7IixsYnJhY2s6IlsiLGxicmtlOiLiposiLGxicmtzbGQ6IuKmjyIsbGJya3NsdToi4qaNIixMY2Fyb246IsS9IixsY2Fyb246IsS+IixMY2VkaWw6IsS7IixsY2VkaWw6IsS8IixsY2VpbDoi4oyIIixsY3ViOiJ7IixMY3k6ItCbIixsY3k6ItC7IixsZGNhOiLipLYiLGxkcXVvOiLigJwiLGxkcXVvcjoi4oCeIixsZHJkaGFyOiLipaciLGxkcnVzaGFyOiLipYsiLGxkc2g6IuKGsiIsbEU6IuKJpiIsbGU6IuKJpCIsTGVmdEFuZ2xlQnJhY2tldDoi4p+oIixMZWZ0QXJyb3c6IuKGkCIsTGVmdGFycm93OiLih5AiLGxlZnRhcnJvdzoi4oaQIixMZWZ0QXJyb3dCYXI6IuKHpCIsTGVmdEFycm93UmlnaHRBcnJvdzoi4oeGIixsZWZ0YXJyb3d0YWlsOiLihqIiLExlZnRDZWlsaW5nOiLijIgiLExlZnREb3VibGVCcmFja2V0OiLin6YiLExlZnREb3duVGVlVmVjdG9yOiLipaEiLExlZnREb3duVmVjdG9yOiLih4MiLExlZnREb3duVmVjdG9yQmFyOiLipZkiLExlZnRGbG9vcjoi4oyKIixsZWZ0aGFycG9vbmRvd246IuKGvSIsbGVmdGhhcnBvb251cDoi4oa8IixsZWZ0bGVmdGFycm93czoi4oeHIixMZWZ0UmlnaHRBcnJvdzoi4oaUIixMZWZ0cmlnaHRhcnJvdzoi4oeUIixsZWZ0cmlnaHRhcnJvdzoi4oaUIixsZWZ0cmlnaHRhcnJvd3M6IuKHhiIsbGVmdHJpZ2h0aGFycG9vbnM6IuKHiyIsbGVmdHJpZ2h0c3F1aWdhcnJvdzoi4oatIixMZWZ0UmlnaHRWZWN0b3I6IuKljiIsTGVmdFRlZToi4oqjIixMZWZ0VGVlQXJyb3c6IuKGpCIsTGVmdFRlZVZlY3Rvcjoi4qWaIixsZWZ0dGhyZWV0aW1lczoi4ouLIixMZWZ0VHJpYW5nbGU6IuKKsiIsTGVmdFRyaWFuZ2xlQmFyOiLip48iLExlZnRUcmlhbmdsZUVxdWFsOiLiirQiLExlZnRVcERvd25WZWN0b3I6IuKlkSIsTGVmdFVwVGVlVmVjdG9yOiLipaAiLExlZnRVcFZlY3Rvcjoi4oa/IixMZWZ0VXBWZWN0b3JCYXI6IuKlmCIsTGVmdFZlY3Rvcjoi4oa8IixMZWZ0VmVjdG9yQmFyOiLipZIiLGxFZzoi4qqLIixsZWc6IuKLmiIsbGVxOiLiiaQiLGxlcXE6IuKJpiIsbGVxc2xhbnQ6IuKpvSIsbGVzOiLiqb0iLGxlc2NjOiLiqqgiLGxlc2RvdDoi4qm/IixsZXNkb3RvOiLiqoEiLGxlc2RvdG9yOiLiqoMiLGxlc2c6IuKLmu+4gCIsbGVzZ2VzOiLiqpMiLGxlc3NhcHByb3g6IuKqhSIsbGVzc2RvdDoi4ouWIixsZXNzZXFndHI6IuKLmiIsbGVzc2VxcWd0cjoi4qqLIixMZXNzRXF1YWxHcmVhdGVyOiLii5oiLExlc3NGdWxsRXF1YWw6IuKJpiIsTGVzc0dyZWF0ZXI6IuKJtiIsbGVzc2d0cjoi4om2IixMZXNzTGVzczoi4qqhIixsZXNzc2ltOiLiibIiLExlc3NTbGFudEVxdWFsOiLiqb0iLExlc3NUaWxkZToi4omyIixsZmlzaHQ6IuKlvCIsbGZsb29yOiLijIoiLExmcjoi8J2UjyIsbGZyOiLwnZSpIixsZzoi4om2IixsZ0U6IuKqkSIsbEhhcjoi4qWiIixsaGFyZDoi4oa9IixsaGFydToi4oa8IixsaGFydWw6IuKlqiIsbGhibGs6IuKWhCIsTEpjeToi0IkiLGxqY3k6ItGZIixMbDoi4ouYIixsbDoi4omqIixsbGFycjoi4oeHIixsbGNvcm5lcjoi4oyeIixMbGVmdGFycm93OiLih5oiLGxsaGFyZDoi4qWrIixsbHRyaToi4pe6IixMbWlkb3Q6IsS/IixsbWlkb3Q6IsWAIixsbW91c3Q6IuKOsCIsbG1vdXN0YWNoZToi4o6wIixsbmFwOiLiqokiLGxuYXBwcm94OiLiqokiLGxuRToi4omoIixsbmU6IuKqhyIsbG5lcToi4qqHIixsbmVxcToi4omoIixsbnNpbToi4oumIixsb2FuZzoi4p+sIixsb2Fycjoi4oe9Iixsb2Jyazoi4p+mIixMb25nTGVmdEFycm93OiLin7UiLExvbmdsZWZ0YXJyb3c6IuKfuCIsbG9uZ2xlZnRhcnJvdzoi4p+1IixMb25nTGVmdFJpZ2h0QXJyb3c6IuKftyIsTG9uZ2xlZnRyaWdodGFycm93OiLin7oiLGxvbmdsZWZ0cmlnaHRhcnJvdzoi4p+3Iixsb25nbWFwc3RvOiLin7wiLExvbmdSaWdodEFycm93OiLin7YiLExvbmdyaWdodGFycm93OiLin7kiLGxvbmdyaWdodGFycm93OiLin7YiLGxvb3BhcnJvd2xlZnQ6IuKGqyIsbG9vcGFycm93cmlnaHQ6IuKGrCIsbG9wYXI6IuKmhSIsTG9wZjoi8J2VgyIsbG9wZjoi8J2VnSIsbG9wbHVzOiLiqK0iLGxvdGltZXM6IuKotCIsbG93YXN0OiLiiJciLGxvd2JhcjoiXyIsTG93ZXJMZWZ0QXJyb3c6IuKGmSIsTG93ZXJSaWdodEFycm93OiLihpgiLGxvejoi4peKIixsb3plbmdlOiLil4oiLGxvemY6IuKnqyIsbHBhcjoiKCIsbHBhcmx0OiLippMiLGxyYXJyOiLih4YiLGxyY29ybmVyOiLijJ8iLGxyaGFyOiLih4siLGxyaGFyZDoi4qWtIixscm06IuKAjiIsbHJ0cmk6IuKKvyIsbHNhcXVvOiLigLkiLExzY3I6IuKEkiIsbHNjcjoi8J2TgSIsTHNoOiLihrAiLGxzaDoi4oawIixsc2ltOiLiibIiLGxzaW1lOiLiqo0iLGxzaW1nOiLiqo8iLGxzcWI6IlsiLGxzcXVvOiLigJgiLGxzcXVvcjoi4oCaIixMc3Ryb2s6IsWBIixsc3Ryb2s6IsWCIixMVDoiPCIsTHQ6IuKJqiIsbHQ6IjwiLGx0Y2M6IuKqpiIsbHRjaXI6IuKpuSIsbHRkb3Q6IuKLliIsbHRocmVlOiLii4siLGx0aW1lczoi4ouJIixsdGxhcnI6IuKltiIsbHRxdWVzdDoi4qm7IixsdHJpOiLil4MiLGx0cmllOiLiirQiLGx0cmlmOiLil4IiLGx0clBhcjoi4qaWIixsdXJkc2hhcjoi4qWKIixsdXJ1aGFyOiLipaYiLGx2ZXJ0bmVxcToi4omo77iAIixsdm5FOiLiiajvuIAiLG1hY3I6IsKvIixtYWxlOiLimYIiLG1hbHQ6IuKcoCIsbWFsdGVzZToi4pygIixNYXA6IuKkhSIsbWFwOiLihqYiLG1hcHN0bzoi4oamIixtYXBzdG9kb3duOiLihqciLG1hcHN0b2xlZnQ6IuKGpCIsbWFwc3RvdXA6IuKGpSIsbWFya2VyOiLilq4iLG1jb21tYToi4qipIixNY3k6ItCcIixtY3k6ItC8IixtZGFzaDoi4oCUIixtRERvdDoi4oi6IixtZWFzdXJlZGFuZ2xlOiLiiKEiLE1lZGl1bVNwYWNlOiLigZ8iLE1lbGxpbnRyZjoi4oSzIixNZnI6IvCdlJAiLG1mcjoi8J2UqiIsbWhvOiLihKciLG1pY3JvOiLCtSIsbWlkOiLiiKMiLG1pZGFzdDoiKiIsbWlkY2lyOiLiq7AiLG1pZGRvdDoiwrciLG1pbnVzOiLiiJIiLG1pbnVzYjoi4oqfIixtaW51c2Q6IuKIuCIsbWludXNkdToi4qiqIixNaW51c1BsdXM6IuKIkyIsbWxjcDoi4qubIixtbGRyOiLigKYiLG1ucGx1czoi4oiTIixtb2RlbHM6IuKKpyIsTW9wZjoi8J2VhCIsbW9wZjoi8J2VniIsbXA6IuKIkyIsTXNjcjoi4oSzIixtc2NyOiLwnZOCIixtc3Rwb3M6IuKIviIsTXU6Is6cIixtdToizrwiLG11bHRpbWFwOiLiirgiLG11bWFwOiLiirgiLG5hYmxhOiLiiIciLE5hY3V0ZToixYMiLG5hY3V0ZToixYQiLG5hbmc6IuKIoOKDkiIsbmFwOiLiiYkiLG5hcEU6IuKpsMy4IixuYXBpZDoi4omLzLgiLG5hcG9zOiLFiSIsbmFwcHJveDoi4omJIixuYXR1cjoi4pmuIixuYXR1cmFsOiLima4iLG5hdHVyYWxzOiLihJUiLG5ic3A6IsKgIixuYnVtcDoi4omOzLgiLG5idW1wZToi4omPzLgiLG5jYXA6IuKpgyIsTmNhcm9uOiLFhyIsbmNhcm9uOiLFiCIsTmNlZGlsOiLFhSIsbmNlZGlsOiLFhiIsbmNvbmc6IuKJhyIsbmNvbmdkb3Q6IuKprcy4IixuY3VwOiLiqYIiLE5jeToi0J0iLG5jeToi0L0iLG5kYXNoOiLigJMiLG5lOiLiiaAiLG5lYXJoazoi4qSkIixuZUFycjoi4oeXIixuZWFycjoi4oaXIixuZWFycm93OiLihpciLG5lZG90OiLiiZDMuCIsTmVnYXRpdmVNZWRpdW1TcGFjZToi4oCLIixOZWdhdGl2ZVRoaWNrU3BhY2U6IuKAiyIsTmVnYXRpdmVUaGluU3BhY2U6IuKAiyIsTmVnYXRpdmVWZXJ5VGhpblNwYWNlOiLigIsiLG5lcXVpdjoi4omiIixuZXNlYXI6IuKkqCIsbmVzaW06IuKJgsy4IixOZXN0ZWRHcmVhdGVyR3JlYXRlcjoi4omrIixOZXN0ZWRMZXNzTGVzczoi4omqIixOZXdMaW5lOiJcbiIsbmV4aXN0OiLiiIQiLG5leGlzdHM6IuKIhCIsTmZyOiLwnZSRIixuZnI6IvCdlKsiLG5nRToi4omnzLgiLG5nZToi4omxIixuZ2VxOiLiibEiLG5nZXFxOiLiiafMuCIsbmdlcXNsYW50OiLiqb7MuCIsbmdlczoi4qm+zLgiLG5HZzoi4ouZzLgiLG5nc2ltOiLiibUiLG5HdDoi4omr4oOSIixuZ3Q6IuKJryIsbmd0cjoi4omvIixuR3R2OiLiiavMuCIsbmhBcnI6IuKHjiIsbmhhcnI6IuKGriIsbmhwYXI6IuKrsiIsbmk6IuKIiyIsbmlzOiLii7wiLG5pc2Q6IuKLuiIsbml2OiLiiIsiLE5KY3k6ItCKIixuamN5OiLRmiIsbmxBcnI6IuKHjSIsbmxhcnI6IuKGmiIsbmxkcjoi4oClIixubEU6IuKJpsy4IixubGU6IuKJsCIsbkxlZnRhcnJvdzoi4oeNIixubGVmdGFycm93OiLihpoiLG5MZWZ0cmlnaHRhcnJvdzoi4oeOIixubGVmdHJpZ2h0YXJyb3c6IuKGriIsbmxlcToi4omwIixubGVxcToi4ommzLgiLG5sZXFzbGFudDoi4qm9zLgiLG5sZXM6IuKpvcy4IixubGVzczoi4omuIixuTGw6IuKLmMy4IixubHNpbToi4om0IixuTHQ6IuKJquKDkiIsbmx0OiLiia4iLG5sdHJpOiLii6oiLG5sdHJpZToi4ousIixuTHR2OiLiiarMuCIsbm1pZDoi4oikIixOb0JyZWFrOiLigaAiLE5vbkJyZWFraW5nU3BhY2U6IsKgIixOb3BmOiLihJUiLG5vcGY6IvCdlZ8iLE5vdDoi4qusIixub3Q6IsKsIixOb3RDb25ncnVlbnQ6IuKJoiIsTm90Q3VwQ2FwOiLiia0iLE5vdERvdWJsZVZlcnRpY2FsQmFyOiLiiKYiLE5vdEVsZW1lbnQ6IuKIiSIsTm90RXF1YWw6IuKJoCIsTm90RXF1YWxUaWxkZToi4omCzLgiLE5vdEV4aXN0czoi4oiEIixOb3RHcmVhdGVyOiLiia8iLE5vdEdyZWF0ZXJFcXVhbDoi4omxIixOb3RHcmVhdGVyRnVsbEVxdWFsOiLiiafMuCIsTm90R3JlYXRlckdyZWF0ZXI6IuKJq8y4IixOb3RHcmVhdGVyTGVzczoi4om5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoi4qm+zLgiLE5vdEdyZWF0ZXJUaWxkZToi4om1IixOb3RIdW1wRG93bkh1bXA6IuKJjsy4IixOb3RIdW1wRXF1YWw6IuKJj8y4Iixub3Rpbjoi4oiJIixub3RpbmRvdDoi4ou1zLgiLG5vdGluRToi4ou5zLgiLG5vdGludmE6IuKIiSIsbm90aW52Yjoi4ou3Iixub3RpbnZjOiLii7YiLE5vdExlZnRUcmlhbmdsZToi4ouqIixOb3RMZWZ0VHJpYW5nbGVCYXI6IuKnj8y4IixOb3RMZWZ0VHJpYW5nbGVFcXVhbDoi4ousIixOb3RMZXNzOiLiia4iLE5vdExlc3NFcXVhbDoi4omwIixOb3RMZXNzR3JlYXRlcjoi4om4IixOb3RMZXNzTGVzczoi4omqzLgiLE5vdExlc3NTbGFudEVxdWFsOiLiqb3MuCIsTm90TGVzc1RpbGRlOiLiibQiLE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiLiqqLMuCIsTm90TmVzdGVkTGVzc0xlc3M6IuKqocy4Iixub3RuaToi4oiMIixub3RuaXZhOiLiiIwiLG5vdG5pdmI6IuKLviIsbm90bml2Yzoi4ou9IixOb3RQcmVjZWRlczoi4oqAIixOb3RQcmVjZWRlc0VxdWFsOiLiqq/MuCIsTm90UHJlY2VkZXNTbGFudEVxdWFsOiLii6AiLE5vdFJldmVyc2VFbGVtZW50OiLiiIwiLE5vdFJpZ2h0VHJpYW5nbGU6IuKLqyIsTm90UmlnaHRUcmlhbmdsZUJhcjoi4qeQzLgiLE5vdFJpZ2h0VHJpYW5nbGVFcXVhbDoi4outIixOb3RTcXVhcmVTdWJzZXQ6IuKKj8y4IixOb3RTcXVhcmVTdWJzZXRFcXVhbDoi4ouiIixOb3RTcXVhcmVTdXBlcnNldDoi4oqQzLgiLE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6IuKLoyIsTm90U3Vic2V0OiLiioLig5IiLE5vdFN1YnNldEVxdWFsOiLiiogiLE5vdFN1Y2NlZWRzOiLiioEiLE5vdFN1Y2NlZWRzRXF1YWw6IuKqsMy4IixOb3RTdWNjZWVkc1NsYW50RXF1YWw6IuKLoSIsTm90U3VjY2VlZHNUaWxkZToi4om/zLgiLE5vdFN1cGVyc2V0OiLiioPig5IiLE5vdFN1cGVyc2V0RXF1YWw6IuKKiSIsTm90VGlsZGU6IuKJgSIsTm90VGlsZGVFcXVhbDoi4omEIixOb3RUaWxkZUZ1bGxFcXVhbDoi4omHIixOb3RUaWxkZVRpbGRlOiLiiYkiLE5vdFZlcnRpY2FsQmFyOiLiiKQiLG5wYXI6IuKIpiIsbnBhcmFsbGVsOiLiiKYiLG5wYXJzbDoi4qu94oOlIixucGFydDoi4oiCzLgiLG5wb2xpbnQ6IuKolCIsbnByOiLiioAiLG5wcmN1ZToi4ougIixucHJlOiLiqq/MuCIsbnByZWM6IuKKgCIsbnByZWNlcToi4qqvzLgiLG5yQXJyOiLih48iLG5yYXJyOiLihpsiLG5yYXJyYzoi4qSzzLgiLG5yYXJydzoi4oadzLgiLG5SaWdodGFycm93OiLih48iLG5yaWdodGFycm93OiLihpsiLG5ydHJpOiLii6siLG5ydHJpZToi4outIixuc2M6IuKKgSIsbnNjY3VlOiLii6EiLG5zY2U6IuKqsMy4IixOc2NyOiLwnZKpIixuc2NyOiLwnZODIixuc2hvcnRtaWQ6IuKIpCIsbnNob3J0cGFyYWxsZWw6IuKIpiIsbnNpbToi4omBIixuc2ltZToi4omEIixuc2ltZXE6IuKJhCIsbnNtaWQ6IuKIpCIsbnNwYXI6IuKIpiIsbnNxc3ViZToi4ouiIixuc3FzdXBlOiLii6MiLG5zdWI6IuKKhCIsbnN1YkU6IuKrhcy4Iixuc3ViZToi4oqIIixuc3Vic2V0OiLiioLig5IiLG5zdWJzZXRlcToi4oqIIixuc3Vic2V0ZXFxOiLiq4XMuCIsbnN1Y2M6IuKKgSIsbnN1Y2NlcToi4qqwzLgiLG5zdXA6IuKKhSIsbnN1cEU6IuKrhsy4Iixuc3VwZToi4oqJIixuc3Vwc2V0OiLiioPig5IiLG5zdXBzZXRlcToi4oqJIixuc3Vwc2V0ZXFxOiLiq4bMuCIsbnRnbDoi4om5IixOdGlsZGU6IsORIixudGlsZGU6IsOxIixudGxnOiLiibgiLG50cmlhbmdsZWxlZnQ6IuKLqiIsbnRyaWFuZ2xlbGVmdGVxOiLii6wiLG50cmlhbmdsZXJpZ2h0OiLii6siLG50cmlhbmdsZXJpZ2h0ZXE6IuKLrSIsTnU6Is6dIixudToizr0iLG51bToiIyIsbnVtZXJvOiLihJYiLG51bXNwOiLigIciLG52YXA6IuKJjeKDkiIsblZEYXNoOiLiiq8iLG5WZGFzaDoi4oquIixudkRhc2g6IuKKrSIsbnZkYXNoOiLiiqwiLG52Z2U6IuKJpeKDkiIsbnZndDoiPuKDkiIsbnZIYXJyOiLipIQiLG52aW5maW46IuKnniIsbnZsQXJyOiLipIIiLG52bGU6IuKJpOKDkiIsbnZsdDoiPOKDkiIsbnZsdHJpZToi4oq04oOSIixudnJBcnI6IuKkgyIsbnZydHJpZToi4oq14oOSIixudnNpbToi4oi84oOSIixud2FyaGs6IuKkoyIsbndBcnI6IuKHliIsbndhcnI6IuKGliIsbndhcnJvdzoi4oaWIixud25lYXI6IuKkpyIsT2FjdXRlOiLDkyIsb2FjdXRlOiLDsyIsb2FzdDoi4oqbIixvY2lyOiLiipoiLE9jaXJjOiLDlCIsb2NpcmM6IsO0IixPY3k6ItCeIixvY3k6ItC+IixvZGFzaDoi4oqdIixPZGJsYWM6IsWQIixvZGJsYWM6IsWRIixvZGl2OiLiqLgiLG9kb3Q6IuKKmSIsb2Rzb2xkOiLiprwiLE9FbGlnOiLFkiIsb2VsaWc6IsWTIixvZmNpcjoi4qa/IixPZnI6IvCdlJIiLG9mcjoi8J2UrCIsb2dvbjoiy5siLE9ncmF2ZToiw5IiLG9ncmF2ZToiw7IiLG9ndDoi4qeBIixvaGJhcjoi4qa1IixvaG06Is6pIixvaW50OiLiiK4iLG9sYXJyOiLihroiLG9sY2lyOiLipr4iLG9sY3Jvc3M6IuKmuyIsb2xpbmU6IuKAviIsb2x0OiLip4AiLE9tYWNyOiLFjCIsb21hY3I6IsWNIixPbWVnYToizqkiLG9tZWdhOiLPiSIsT21pY3Jvbjoizp8iLG9taWNyb246Is6/IixvbWlkOiLiprYiLG9taW51czoi4oqWIixPb3BmOiLwnZWGIixvb3BmOiLwnZWgIixvcGFyOiLiprciLE9wZW5DdXJseURvdWJsZVF1b3RlOiLigJwiLE9wZW5DdXJseVF1b3RlOiLigJgiLG9wZXJwOiLiprkiLG9wbHVzOiLiipUiLE9yOiLiqZQiLG9yOiLiiKgiLG9yYXJyOiLihrsiLG9yZDoi4qmdIixvcmRlcjoi4oS0IixvcmRlcm9mOiLihLQiLG9yZGY6IsKqIixvcmRtOiLCuiIsb3JpZ29mOiLiirYiLG9yb3I6IuKpliIsb3JzbG9wZToi4qmXIixvcnY6IuKpmyIsb1M6IuKTiCIsT3Njcjoi8J2SqiIsb3Njcjoi4oS0IixPc2xhc2g6IsOYIixvc2xhc2g6IsO4Iixvc29sOiLiipgiLE90aWxkZToiw5UiLG90aWxkZToiw7UiLE90aW1lczoi4qi3IixvdGltZXM6IuKKlyIsb3RpbWVzYXM6IuKotiIsT3VtbDoiw5YiLG91bWw6IsO2IixvdmJhcjoi4oy9IixPdmVyQmFyOiLigL4iLE92ZXJCcmFjZToi4o+eIixPdmVyQnJhY2tldDoi4o60IixPdmVyUGFyZW50aGVzaXM6IuKPnCIscGFyOiLiiKUiLHBhcmE6IsK2IixwYXJhbGxlbDoi4oilIixwYXJzaW06IuKrsyIscGFyc2w6IuKrvSIscGFydDoi4oiCIixQYXJ0aWFsRDoi4oiCIixQY3k6ItCfIixwY3k6ItC/IixwZXJjbnQ6IiUiLHBlcmlvZDoiLiIscGVybWlsOiLigLAiLHBlcnA6IuKKpSIscGVydGVuazoi4oCxIixQZnI6IvCdlJMiLHBmcjoi8J2UrSIsUGhpOiLOpiIscGhpOiLPhiIscGhpdjoiz5UiLHBobW1hdDoi4oSzIixwaG9uZToi4piOIixQaToizqAiLHBpOiLPgCIscGl0Y2hmb3JrOiLii5QiLHBpdjoiz5YiLHBsYW5jazoi4oSPIixwbGFuY2toOiLihI4iLHBsYW5rdjoi4oSPIixwbHVzOiIrIixwbHVzYWNpcjoi4qijIixwbHVzYjoi4oqeIixwbHVzY2lyOiLiqKIiLHBsdXNkbzoi4oiUIixwbHVzZHU6IuKopSIscGx1c2U6IuKpsiIsUGx1c01pbnVzOiLCsSIscGx1c21uOiLCsSIscGx1c3NpbToi4qimIixwbHVzdHdvOiLiqKciLHBtOiLCsSIsUG9pbmNhcmVwbGFuZToi4oSMIixwb2ludGludDoi4qiVIixQb3BmOiLihJkiLHBvcGY6IvCdlaEiLHBvdW5kOiLCoyIsUHI6IuKquyIscHI6IuKJuiIscHJhcDoi4qq3IixwcmN1ZToi4om8IixwckU6IuKqsyIscHJlOiLiqq8iLHByZWM6IuKJuiIscHJlY2FwcHJveDoi4qq3IixwcmVjY3VybHllcToi4om8IixQcmVjZWRlczoi4om6IixQcmVjZWRlc0VxdWFsOiLiqq8iLFByZWNlZGVzU2xhbnRFcXVhbDoi4om8IixQcmVjZWRlc1RpbGRlOiLiib4iLHByZWNlcToi4qqvIixwcmVjbmFwcHJveDoi4qq5IixwcmVjbmVxcToi4qq1IixwcmVjbnNpbToi4ouoIixwcmVjc2ltOiLiib4iLFByaW1lOiLigLMiLHByaW1lOiLigLIiLHByaW1lczoi4oSZIixwcm5hcDoi4qq5Iixwcm5FOiLiqrUiLHBybnNpbToi4ouoIixwcm9kOiLiiI8iLFByb2R1Y3Q6IuKIjyIscHJvZmFsYXI6IuKMriIscHJvZmxpbmU6IuKMkiIscHJvZnN1cmY6IuKMkyIscHJvcDoi4oidIixQcm9wb3J0aW9uOiLiiLciLFByb3BvcnRpb25hbDoi4oidIixwcm9wdG86IuKInSIscHJzaW06IuKJviIscHJ1cmVsOiLiirAiLFBzY3I6IvCdkqsiLHBzY3I6IvCdk4UiLFBzaToizqgiLHBzaToiz4giLHB1bmNzcDoi4oCIIixRZnI6IvCdlJQiLHFmcjoi8J2UriIscWludDoi4qiMIixRb3BmOiLihJoiLHFvcGY6IvCdlaIiLHFwcmltZToi4oGXIixRc2NyOiLwnZKsIixxc2NyOiLwnZOGIixxdWF0ZXJuaW9uczoi4oSNIixxdWF0aW50OiLiqJYiLHF1ZXN0OiI/IixxdWVzdGVxOiLiiZ8iLFFVT1Q6JyInLHF1b3Q6JyInLHJBYXJyOiLih5siLHJhY2U6IuKIvcyxIixSYWN1dGU6IsWUIixyYWN1dGU6IsWVIixyYWRpYzoi4oiaIixyYWVtcHR5djoi4qazIixSYW5nOiLin6siLHJhbmc6IuKfqSIscmFuZ2Q6IuKmkiIscmFuZ2U6IuKmpSIscmFuZ2xlOiLin6kiLHJhcXVvOiLCuyIsUmFycjoi4oagIixyQXJyOiLih5IiLHJhcnI6IuKGkiIscmFycmFwOiLipbUiLHJhcnJiOiLih6UiLHJhcnJiZnM6IuKkoCIscmFycmM6IuKksyIscmFycmZzOiLipJ4iLHJhcnJoazoi4oaqIixyYXJybHA6IuKGrCIscmFycnBsOiLipYUiLHJhcnJzaW06IuKltCIsUmFycnRsOiLipJYiLHJhcnJ0bDoi4oajIixyYXJydzoi4oadIixyQXRhaWw6IuKknCIscmF0YWlsOiLipJoiLHJhdGlvOiLiiLYiLHJhdGlvbmFsczoi4oSaIixSQmFycjoi4qSQIixyQmFycjoi4qSPIixyYmFycjoi4qSNIixyYmJyazoi4p2zIixyYnJhY2U6In0iLHJicmFjazoiXSIscmJya2U6IuKmjCIscmJya3NsZDoi4qaOIixyYnJrc2x1OiLippAiLFJjYXJvbjoixZgiLHJjYXJvbjoixZkiLFJjZWRpbDoixZYiLHJjZWRpbDoixZciLHJjZWlsOiLijIkiLHJjdWI6In0iLFJjeToi0KAiLHJjeToi0YAiLHJkY2E6IuKktyIscmRsZGhhcjoi4qWpIixyZHF1bzoi4oCdIixyZHF1b3I6IuKAnSIscmRzaDoi4oazIixSZToi4oScIixyZWFsOiLihJwiLHJlYWxpbmU6IuKEmyIscmVhbHBhcnQ6IuKEnCIscmVhbHM6IuKEnSIscmVjdDoi4patIixSRUc6IsKuIixyZWc6IsKuIixSZXZlcnNlRWxlbWVudDoi4oiLIixSZXZlcnNlRXF1aWxpYnJpdW06IuKHiyIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06IuKlryIscmZpc2h0OiLipb0iLHJmbG9vcjoi4oyLIixSZnI6IuKEnCIscmZyOiLwnZSvIixySGFyOiLipaQiLHJoYXJkOiLih4EiLHJoYXJ1OiLih4AiLHJoYXJ1bDoi4qWsIixSaG86Is6hIixyaG86Is+BIixyaG92OiLPsSIsUmlnaHRBbmdsZUJyYWNrZXQ6IuKfqSIsUmlnaHRBcnJvdzoi4oaSIixSaWdodGFycm93OiLih5IiLHJpZ2h0YXJyb3c6IuKGkiIsUmlnaHRBcnJvd0Jhcjoi4oelIixSaWdodEFycm93TGVmdEFycm93OiLih4QiLHJpZ2h0YXJyb3d0YWlsOiLihqMiLFJpZ2h0Q2VpbGluZzoi4oyJIixSaWdodERvdWJsZUJyYWNrZXQ6IuKfpyIsUmlnaHREb3duVGVlVmVjdG9yOiLipZ0iLFJpZ2h0RG93blZlY3Rvcjoi4oeCIixSaWdodERvd25WZWN0b3JCYXI6IuKllSIsUmlnaHRGbG9vcjoi4oyLIixyaWdodGhhcnBvb25kb3duOiLih4EiLHJpZ2h0aGFycG9vbnVwOiLih4AiLHJpZ2h0bGVmdGFycm93czoi4oeEIixyaWdodGxlZnRoYXJwb29uczoi4oeMIixyaWdodHJpZ2h0YXJyb3dzOiLih4kiLHJpZ2h0c3F1aWdhcnJvdzoi4oadIixSaWdodFRlZToi4oqiIixSaWdodFRlZUFycm93OiLihqYiLFJpZ2h0VGVlVmVjdG9yOiLipZsiLHJpZ2h0dGhyZWV0aW1lczoi4ouMIixSaWdodFRyaWFuZ2xlOiLiirMiLFJpZ2h0VHJpYW5nbGVCYXI6IuKnkCIsUmlnaHRUcmlhbmdsZUVxdWFsOiLiirUiLFJpZ2h0VXBEb3duVmVjdG9yOiLipY8iLFJpZ2h0VXBUZWVWZWN0b3I6IuKlnCIsUmlnaHRVcFZlY3Rvcjoi4oa+IixSaWdodFVwVmVjdG9yQmFyOiLipZQiLFJpZ2h0VmVjdG9yOiLih4AiLFJpZ2h0VmVjdG9yQmFyOiLipZMiLHJpbmc6IsuaIixyaXNpbmdkb3RzZXE6IuKJkyIscmxhcnI6IuKHhCIscmxoYXI6IuKHjCIscmxtOiLigI8iLHJtb3VzdDoi4o6xIixybW91c3RhY2hlOiLijrEiLHJubWlkOiLiq64iLHJvYW5nOiLin60iLHJvYXJyOiLih74iLHJvYnJrOiLin6ciLHJvcGFyOiLipoYiLFJvcGY6IuKEnSIscm9wZjoi8J2VoyIscm9wbHVzOiLiqK4iLHJvdGltZXM6IuKotSIsUm91bmRJbXBsaWVzOiLipbAiLHJwYXI6IikiLHJwYXJndDoi4qaUIixycHBvbGludDoi4qiSIixycmFycjoi4oeJIixScmlnaHRhcnJvdzoi4oebIixyc2FxdW86IuKAuiIsUnNjcjoi4oSbIixyc2NyOiLwnZOHIixSc2g6IuKGsSIscnNoOiLihrEiLHJzcWI6Il0iLHJzcXVvOiLigJkiLHJzcXVvcjoi4oCZIixydGhyZWU6IuKLjCIscnRpbWVzOiLii4oiLHJ0cmk6IuKWuSIscnRyaWU6IuKKtSIscnRyaWY6IuKWuCIscnRyaWx0cmk6IuKnjiIsUnVsZURlbGF5ZWQ6IuKntCIscnVsdWhhcjoi4qWoIixyeDoi4oSeIixTYWN1dGU6IsWaIixzYWN1dGU6IsWbIixzYnF1bzoi4oCaIixTYzoi4qq8IixzYzoi4om7IixzY2FwOiLiqrgiLFNjYXJvbjoixaAiLHNjYXJvbjoixaEiLHNjY3VlOiLiib0iLHNjRToi4qq0IixzY2U6IuKqsCIsU2NlZGlsOiLFniIsc2NlZGlsOiLFnyIsU2NpcmM6IsWcIixzY2lyYzoixZ0iLHNjbmFwOiLiqroiLHNjbkU6IuKqtiIsc2Nuc2ltOiLii6kiLHNjcG9saW50OiLiqJMiLHNjc2ltOiLiib8iLFNjeToi0KEiLHNjeToi0YEiLHNkb3Q6IuKLhSIsc2RvdGI6IuKKoSIsc2RvdGU6IuKppiIsc2VhcmhrOiLipKUiLHNlQXJyOiLih5giLHNlYXJyOiLihpgiLHNlYXJyb3c6IuKGmCIsc2VjdDoiwqciLHNlbWk6IjsiLHNlc3dhcjoi4qSpIixzZXRtaW51czoi4oiWIixzZXRtbjoi4oiWIixzZXh0OiLinLYiLFNmcjoi8J2UliIsc2ZyOiLwnZSwIixzZnJvd246IuKMoiIsc2hhcnA6IuKZryIsU0hDSGN5OiLQqSIsc2hjaGN5OiLRiSIsU0hjeToi0KgiLHNoY3k6ItGIIixTaG9ydERvd25BcnJvdzoi4oaTIixTaG9ydExlZnRBcnJvdzoi4oaQIixzaG9ydG1pZDoi4oijIixzaG9ydHBhcmFsbGVsOiLiiKUiLFNob3J0UmlnaHRBcnJvdzoi4oaSIixTaG9ydFVwQXJyb3c6IuKGkSIsc2h5OiLCrSIsU2lnbWE6Is6jIixzaWdtYToiz4MiLHNpZ21hZjoiz4IiLHNpZ21hdjoiz4IiLHNpbToi4oi8IixzaW1kb3Q6IuKpqiIsc2ltZToi4omDIixzaW1lcToi4omDIixzaW1nOiLiqp4iLHNpbWdFOiLiqqAiLHNpbWw6IuKqnSIsc2ltbEU6IuKqnyIsc2ltbmU6IuKJhiIsc2ltcGx1czoi4qikIixzaW1yYXJyOiLipbIiLHNsYXJyOiLihpAiLFNtYWxsQ2lyY2xlOiLiiJgiLHNtYWxsc2V0bWludXM6IuKIliIsc21hc2hwOiLiqLMiLHNtZXBhcnNsOiLip6QiLHNtaWQ6IuKIoyIsc21pbGU6IuKMoyIsc210OiLiqqoiLHNtdGU6IuKqrCIsc210ZXM6IuKqrO+4gCIsU09GVGN5OiLQrCIsc29mdGN5OiLRjCIsc29sOiIvIixzb2xiOiLip4QiLHNvbGJhcjoi4oy/IixTb3BmOiLwnZWKIixzb3BmOiLwnZWkIixzcGFkZXM6IuKZoCIsc3BhZGVzdWl0OiLimaAiLHNwYXI6IuKIpSIsc3FjYXA6IuKKkyIsc3FjYXBzOiLiipPvuIAiLHNxY3VwOiLiipQiLHNxY3Vwczoi4oqU77iAIixTcXJ0OiLiiJoiLHNxc3ViOiLiio8iLHNxc3ViZToi4oqRIixzcXN1YnNldDoi4oqPIixzcXN1YnNldGVxOiLiipEiLHNxc3VwOiLiipAiLHNxc3VwZToi4oqSIixzcXN1cHNldDoi4oqQIixzcXN1cHNldGVxOiLiipIiLHNxdToi4pahIixTcXVhcmU6IuKWoSIsc3F1YXJlOiLilqEiLFNxdWFyZUludGVyc2VjdGlvbjoi4oqTIixTcXVhcmVTdWJzZXQ6IuKKjyIsU3F1YXJlU3Vic2V0RXF1YWw6IuKKkSIsU3F1YXJlU3VwZXJzZXQ6IuKKkCIsU3F1YXJlU3VwZXJzZXRFcXVhbDoi4oqSIixTcXVhcmVVbmlvbjoi4oqUIixzcXVhcmY6IuKWqiIsc3F1Zjoi4paqIixzcmFycjoi4oaSIixTc2NyOiLwnZKuIixzc2NyOiLwnZOIIixzc2V0bW46IuKIliIsc3NtaWxlOiLijKMiLHNzdGFyZjoi4ouGIixTdGFyOiLii4YiLHN0YXI6IuKYhiIsc3RhcmY6IuKYhSIsc3RyYWlnaHRlcHNpbG9uOiLPtSIsc3RyYWlnaHRwaGk6Is+VIixzdHJuczoiwq8iLFN1Yjoi4ouQIixzdWI6IuKKgiIsc3ViZG90OiLiqr0iLHN1YkU6IuKrhSIsc3ViZToi4oqGIixzdWJlZG90OiLiq4MiLHN1Ym11bHQ6IuKrgSIsc3VibkU6IuKriyIsc3VibmU6IuKKiiIsc3VicGx1czoi4qq/IixzdWJyYXJyOiLipbkiLFN1YnNldDoi4ouQIixzdWJzZXQ6IuKKgiIsc3Vic2V0ZXE6IuKKhiIsc3Vic2V0ZXFxOiLiq4UiLFN1YnNldEVxdWFsOiLiioYiLHN1YnNldG5lcToi4oqKIixzdWJzZXRuZXFxOiLiq4siLHN1YnNpbToi4quHIixzdWJzdWI6IuKrlSIsc3Vic3VwOiLiq5MiLHN1Y2M6IuKJuyIsc3VjY2FwcHJveDoi4qq4IixzdWNjY3VybHllcToi4om9IixTdWNjZWVkczoi4om7IixTdWNjZWVkc0VxdWFsOiLiqrAiLFN1Y2NlZWRzU2xhbnRFcXVhbDoi4om9IixTdWNjZWVkc1RpbGRlOiLiib8iLHN1Y2NlcToi4qqwIixzdWNjbmFwcHJveDoi4qq6IixzdWNjbmVxcToi4qq2IixzdWNjbnNpbToi4oupIixzdWNjc2ltOiLiib8iLFN1Y2hUaGF0OiLiiIsiLFN1bToi4oiRIixzdW06IuKIkSIsc3VuZzoi4pmqIixTdXA6IuKLkSIsc3VwOiLiioMiLHN1cDE6IsK5IixzdXAyOiLCsiIsc3VwMzoiwrMiLHN1cGRvdDoi4qq+IixzdXBkc3ViOiLiq5giLHN1cEU6IuKrhiIsc3VwZToi4oqHIixzdXBlZG90OiLiq4QiLFN1cGVyc2V0OiLiioMiLFN1cGVyc2V0RXF1YWw6IuKKhyIsc3VwaHNvbDoi4p+JIixzdXBoc3ViOiLiq5ciLHN1cGxhcnI6IuKluyIsc3VwbXVsdDoi4quCIixzdXBuRToi4quMIixzdXBuZToi4oqLIixzdXBwbHVzOiLiq4AiLFN1cHNldDoi4ouRIixzdXBzZXQ6IuKKgyIsc3Vwc2V0ZXE6IuKKhyIsc3Vwc2V0ZXFxOiLiq4YiLHN1cHNldG5lcToi4oqLIixzdXBzZXRuZXFxOiLiq4wiLHN1cHNpbToi4quIIixzdXBzdWI6IuKrlCIsc3Vwc3VwOiLiq5YiLHN3YXJoazoi4qSmIixzd0Fycjoi4oeZIixzd2Fycjoi4oaZIixzd2Fycm93OiLihpkiLHN3bndhcjoi4qSqIixzemxpZzoiw58iLFRhYjoiXHQiLHRhcmdldDoi4oyWIixUYXU6Is6kIix0YXU6Is+EIix0YnJrOiLijrQiLFRjYXJvbjoixaQiLHRjYXJvbjoixaUiLFRjZWRpbDoixaIiLHRjZWRpbDoixaMiLFRjeToi0KIiLHRjeToi0YIiLHRkb3Q6IuKDmyIsdGVscmVjOiLijJUiLFRmcjoi8J2UlyIsdGZyOiLwnZSxIix0aGVyZTQ6IuKItCIsVGhlcmVmb3JlOiLiiLQiLHRoZXJlZm9yZToi4oi0IixUaGV0YToizpgiLHRoZXRhOiLOuCIsdGhldGFzeW06Is+RIix0aGV0YXY6Is+RIix0aGlja2FwcHJveDoi4omIIix0aGlja3NpbToi4oi8IixUaGlja1NwYWNlOiLigZ/igIoiLHRoaW5zcDoi4oCJIixUaGluU3BhY2U6IuKAiSIsdGhrYXA6IuKJiCIsdGhrc2ltOiLiiLwiLFRIT1JOOiLDniIsdGhvcm46IsO+IixUaWxkZToi4oi8Iix0aWxkZToiy5wiLFRpbGRlRXF1YWw6IuKJgyIsVGlsZGVGdWxsRXF1YWw6IuKJhSIsVGlsZGVUaWxkZToi4omIIix0aW1lczoiw5ciLHRpbWVzYjoi4oqgIix0aW1lc2Jhcjoi4qixIix0aW1lc2Q6IuKosCIsdGludDoi4oitIix0b2VhOiLipKgiLHRvcDoi4oqkIix0b3Bib3Q6IuKMtiIsdG9wY2lyOiLiq7EiLFRvcGY6IvCdlYsiLHRvcGY6IvCdlaUiLHRvcGZvcms6IuKrmiIsdG9zYToi4qSpIix0cHJpbWU6IuKAtCIsVFJBREU6IuKEoiIsdHJhZGU6IuKEoiIsdHJpYW5nbGU6IuKWtSIsdHJpYW5nbGVkb3duOiLilr8iLHRyaWFuZ2xlbGVmdDoi4peDIix0cmlhbmdsZWxlZnRlcToi4oq0Iix0cmlhbmdsZXE6IuKJnCIsdHJpYW5nbGVyaWdodDoi4pa5Iix0cmlhbmdsZXJpZ2h0ZXE6IuKKtSIsdHJpZG90OiLil6wiLHRyaWU6IuKJnCIsdHJpbWludXM6IuKouiIsVHJpcGxlRG90OiLig5siLHRyaXBsdXM6IuKouSIsdHJpc2I6IuKnjSIsdHJpdGltZToi4qi7Iix0cnBleml1bToi4o+iIixUc2NyOiLwnZKvIix0c2NyOiLwnZOJIixUU2N5OiLQpiIsdHNjeToi0YYiLFRTSGN5OiLQiyIsdHNoY3k6ItGbIixUc3Ryb2s6IsWmIix0c3Ryb2s6IsWnIix0d2l4dDoi4omsIix0d29oZWFkbGVmdGFycm93OiLihp4iLHR3b2hlYWRyaWdodGFycm93OiLihqAiLFVhY3V0ZToiw5oiLHVhY3V0ZToiw7oiLFVhcnI6IuKGnyIsdUFycjoi4oeRIix1YXJyOiLihpEiLFVhcnJvY2lyOiLipYkiLFVicmN5OiLQjiIsdWJyY3k6ItGeIixVYnJldmU6IsWsIix1YnJldmU6IsWtIixVY2lyYzoiw5siLHVjaXJjOiLDuyIsVWN5OiLQoyIsdWN5OiLRgyIsdWRhcnI6IuKHhSIsVWRibGFjOiLFsCIsdWRibGFjOiLFsSIsdWRoYXI6IuKlriIsdWZpc2h0OiLipb4iLFVmcjoi8J2UmCIsdWZyOiLwnZSyIixVZ3JhdmU6IsOZIix1Z3JhdmU6IsO5Iix1SGFyOiLipaMiLHVoYXJsOiLihr8iLHVoYXJyOiLihr4iLHVoYmxrOiLiloAiLHVsY29ybjoi4oycIix1bGNvcm5lcjoi4oycIix1bGNyb3A6IuKMjyIsdWx0cmk6IuKXuCIsVW1hY3I6IsWqIix1bWFjcjoixasiLHVtbDoiwqgiLFVuZGVyQmFyOiJfIixVbmRlckJyYWNlOiLij58iLFVuZGVyQnJhY2tldDoi4o61IixVbmRlclBhcmVudGhlc2lzOiLij50iLFVuaW9uOiLii4MiLFVuaW9uUGx1czoi4oqOIixVb2dvbjoixbIiLHVvZ29uOiLFsyIsVW9wZjoi8J2VjCIsdW9wZjoi8J2VpiIsVXBBcnJvdzoi4oaRIixVcGFycm93OiLih5EiLHVwYXJyb3c6IuKGkSIsVXBBcnJvd0Jhcjoi4qSSIixVcEFycm93RG93bkFycm93OiLih4UiLFVwRG93bkFycm93OiLihpUiLFVwZG93bmFycm93OiLih5UiLHVwZG93bmFycm93OiLihpUiLFVwRXF1aWxpYnJpdW06IuKlriIsdXBoYXJwb29ubGVmdDoi4oa/Iix1cGhhcnBvb25yaWdodDoi4oa+Iix1cGx1czoi4oqOIixVcHBlckxlZnRBcnJvdzoi4oaWIixVcHBlclJpZ2h0QXJyb3c6IuKGlyIsVXBzaToiz5IiLHVwc2k6Is+FIix1cHNpaDoiz5IiLFVwc2lsb246Is6lIix1cHNpbG9uOiLPhSIsVXBUZWU6IuKKpSIsVXBUZWVBcnJvdzoi4oalIix1cHVwYXJyb3dzOiLih4giLHVyY29ybjoi4oydIix1cmNvcm5lcjoi4oydIix1cmNyb3A6IuKMjiIsVXJpbmc6IsWuIix1cmluZzoixa8iLHVydHJpOiLil7kiLFVzY3I6IvCdkrAiLHVzY3I6IvCdk4oiLHV0ZG90OiLii7AiLFV0aWxkZToixagiLHV0aWxkZToixakiLHV0cmk6IuKWtSIsdXRyaWY6IuKWtCIsdXVhcnI6IuKHiCIsVXVtbDoiw5wiLHV1bWw6IsO8Iix1d2FuZ2xlOiLipqciLHZhbmdydDoi4qacIix2YXJlcHNpbG9uOiLPtSIsdmFya2FwcGE6Is+wIix2YXJub3RoaW5nOiLiiIUiLHZhcnBoaToiz5UiLHZhcnBpOiLPliIsdmFycHJvcHRvOiLiiJ0iLHZBcnI6IuKHlSIsdmFycjoi4oaVIix2YXJyaG86Is+xIix2YXJzaWdtYToiz4IiLHZhcnN1YnNldG5lcToi4oqK77iAIix2YXJzdWJzZXRuZXFxOiLiq4vvuIAiLHZhcnN1cHNldG5lcToi4oqL77iAIix2YXJzdXBzZXRuZXFxOiLiq4zvuIAiLHZhcnRoZXRhOiLPkSIsdmFydHJpYW5nbGVsZWZ0OiLiirIiLHZhcnRyaWFuZ2xlcmlnaHQ6IuKKsyIsVmJhcjoi4qurIix2QmFyOiLiq6giLHZCYXJ2OiLiq6kiLFZjeToi0JIiLHZjeToi0LIiLFZEYXNoOiLiiqsiLFZkYXNoOiLiiqkiLHZEYXNoOiLiiqgiLHZkYXNoOiLiiqIiLFZkYXNobDoi4qumIixWZWU6IuKLgSIsdmVlOiLiiKgiLHZlZWJhcjoi4oq7Iix2ZWVlcToi4omaIix2ZWxsaXA6IuKLriIsVmVyYmFyOiLigJYiLHZlcmJhcjoifCIsVmVydDoi4oCWIix2ZXJ0OiJ8IixWZXJ0aWNhbEJhcjoi4oijIixWZXJ0aWNhbExpbmU6InwiLFZlcnRpY2FsU2VwYXJhdG9yOiLinZgiLFZlcnRpY2FsVGlsZGU6IuKJgCIsVmVyeVRoaW5TcGFjZToi4oCKIixWZnI6IvCdlJkiLHZmcjoi8J2UsyIsdmx0cmk6IuKKsiIsdm5zdWI6IuKKguKDkiIsdm5zdXA6IuKKg+KDkiIsVm9wZjoi8J2VjSIsdm9wZjoi8J2VpyIsdnByb3A6IuKInSIsdnJ0cmk6IuKKsyIsVnNjcjoi8J2SsSIsdnNjcjoi8J2TiyIsdnN1Ym5FOiLiq4vvuIAiLHZzdWJuZToi4oqK77iAIix2c3VwbkU6IuKrjO+4gCIsdnN1cG5lOiLiiovvuIAiLFZ2ZGFzaDoi4oqqIix2emlnemFnOiLippoiLFdjaXJjOiLFtCIsd2NpcmM6IsW1Iix3ZWRiYXI6IuKpnyIsV2VkZ2U6IuKLgCIsd2VkZ2U6IuKIpyIsd2VkZ2VxOiLiiZkiLHdlaWVycDoi4oSYIixXZnI6IvCdlJoiLHdmcjoi8J2UtCIsV29wZjoi8J2VjiIsd29wZjoi8J2VqCIsd3A6IuKEmCIsd3I6IuKJgCIsd3JlYXRoOiLiiYAiLFdzY3I6IvCdkrIiLHdzY3I6IvCdk4wiLHhjYXA6IuKLgiIseGNpcmM6IuKXryIseGN1cDoi4ouDIix4ZHRyaToi4pa9IixYZnI6IvCdlJsiLHhmcjoi8J2UtSIseGhBcnI6IuKfuiIseGhhcnI6IuKftyIsWGk6Is6eIix4aToizr4iLHhsQXJyOiLin7giLHhsYXJyOiLin7UiLHhtYXA6IuKfvCIseG5pczoi4ou7Iix4b2RvdDoi4qiAIixYb3BmOiLwnZWPIix4b3BmOiLwnZWpIix4b3BsdXM6IuKogSIseG90aW1lOiLiqIIiLHhyQXJyOiLin7kiLHhyYXJyOiLin7YiLFhzY3I6IvCdkrMiLHhzY3I6IvCdk40iLHhzcWN1cDoi4qiGIix4dXBsdXM6IuKohCIseHV0cmk6IuKWsyIseHZlZToi4ouBIix4d2VkZ2U6IuKLgCIsWWFjdXRlOiLDnSIseWFjdXRlOiLDvSIsWUFjeToi0K8iLHlhY3k6ItGPIixZY2lyYzoixbYiLHljaXJjOiLFtyIsWWN5OiLQqyIseWN5OiLRiyIseWVuOiLCpSIsWWZyOiLwnZScIix5ZnI6IvCdlLYiLFlJY3k6ItCHIix5aWN5OiLRlyIsWW9wZjoi8J2VkCIseW9wZjoi8J2VqiIsWXNjcjoi8J2StCIseXNjcjoi8J2TjiIsWVVjeToi0K4iLHl1Y3k6ItGOIixZdW1sOiLFuCIseXVtbDoiw78iLFphY3V0ZToixbkiLHphY3V0ZToixboiLFpjYXJvbjoixb0iLHpjYXJvbjoixb4iLFpjeToi0JciLHpjeToi0LciLFpkb3Q6IsW7Iix6ZG90OiLFvCIsemVldHJmOiLihKgiLFplcm9XaWR0aFNwYWNlOiLigIsiLFpldGE6Is6WIix6ZXRhOiLOtiIsWmZyOiLihKgiLHpmcjoi8J2UtyIsWkhjeToi0JYiLHpoY3k6ItC2Iix6aWdyYXJyOiLih50iLFpvcGY6IuKEpCIsem9wZjoi8J2VqyIsWnNjcjoi8J2StSIsenNjcjoi8J2TjyIsendqOiLigI0iLHp3bmo6IuKAjCJ9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL2h0bWxfYmxvY2tzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O1siYXJ0aWNsZSIsImFzaWRlIiwiYnV0dG9uIiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYW52YXMiLCJjYXB0aW9uIiwiY29sIiwiY29sZ3JvdXAiLCJkZCIsImRpdiIsImRsIiwiZHQiLCJlbWJlZCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImlmcmFtZSIsImxpIiwibWFwIiwib2JqZWN0Iiwib2wiLCJvdXRwdXQiLCJwIiwicHJlIiwicHJvZ3Jlc3MiLCJzY3JpcHQiLCJzZWN0aW9uIiwic3R5bGUiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0ciIsInRoZWFkIiwidWwiLCJ2aWRlbyJdLmZvckVhY2goZnVuY3Rpb24oZSl7cltlXT0hMH0pLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL2h0bWxfcmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLG8pe3JldHVybiByPyhvPW8uc291cmNlfHxvLGU9ZS5yZXBsYWNlKHIsbyksbik6bmV3IFJlZ0V4cChlLHQpfX12YXIgbz0vW2EtekEtWl86XVthLXpBLVowLTk6Ll8tXSovLHM9L1teIic9PD5gXHgwMC1ceDIwXSsvLGk9LydbXiddKicvLGE9LyJbXiJdKiIvLGw9cigvKD86dW5xdW90ZWR8c2luZ2xlX3F1b3RlZHxkb3VibGVfcXVvdGVkKS8pKCJ1bnF1b3RlZCIscykoInNpbmdsZV9xdW90ZWQiLGkpKCJkb3VibGVfcXVvdGVkIixhKSgpLHU9cigvKD86XHMrYXR0cl9uYW1lKD86XHMqPVxzKmF0dHJfdmFsdWUpPykvKSgiYXR0cl9uYW1lIixvKSgiYXR0cl92YWx1ZSIsbCkoKSxjPXIoLzxbQS1aYS16XVtBLVphLXowLTldKmF0dHJpYnV0ZSpccypcLz8+LykoImF0dHJpYnV0ZSIsdSkoKSxkPS88XC9bQS1aYS16XVtBLVphLXowLTldKlxzKj4vLF89LzwhLS0oW14tXSt8Wy1dW14tXSspKi0tPi8scD0vPFs/XS4qP1s/XT4vLGY9LzwhW0EtWl0rXHMrW14+XSo+LyxtPS88IVxbQ0RBVEFcWyhbXlxdXSt8XF1bXlxdXXxcXVxdW14+XSkqXF1cXT4vLGg9cigvXig/Om9wZW5fdGFnfGNsb3NlX3RhZ3xjb21tZW50fHByb2Nlc3Npbmd8ZGVjbGFyYXRpb258Y2RhdGEpLykoIm9wZW5fdGFnIixjKSgiY2xvc2VfdGFnIixkKSgiY29tbWVudCIsXykoInByb2Nlc3NpbmciLHApKCJkZWNsYXJhdGlvbiIsZikoImNkYXRhIixtKSgpO2UuZXhwb3J0cy5IVE1MX1RBR19SRT1ofSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3VybF9zY2hlbWFzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1bImNvYXAiLCJkb2kiLCJqYXZhc2NyaXB0IiwiYWFhIiwiYWFhcyIsImFib3V0IiwiYWNhcCIsImNhcCIsImNpZCIsImNyaWQiLCJkYXRhIiwiZGF2IiwiZGljdCIsImRucyIsImZpbGUiLCJmdHAiLCJnZW8iLCJnbyIsImdvcGhlciIsImgzMjMiLCJodHRwIiwiaHR0cHMiLCJpYXgiLCJpY2FwIiwiaW0iLCJpbWFwIiwiaW5mbyIsImlwcCIsImlyaXMiLCJpcmlzLmJlZXAiLCJpcmlzLnhwYyIsImlyaXMueHBjcyIsImlyaXMubHd6IiwibGRhcCIsIm1haWx0byIsIm1pZCIsIm1zcnAiLCJtc3JwcyIsIm10cXAiLCJtdXBkYXRlIiwibmV3cyIsIm5mcyIsIm5pIiwibmloIiwibm50cCIsIm9wYXF1ZWxvY2t0b2tlbiIsInBvcCIsInByZXMiLCJydHNwIiwic2VydmljZSIsInNlc3Npb24iLCJzaHR0cCIsInNpZXZlIiwic2lwIiwic2lwcyIsInNtcyIsInNubXAiLCJzb2FwLmJlZXAiLCJzb2FwLmJlZXBzIiwidGFnIiwidGVsIiwidGVsbmV0IiwidGZ0cCIsInRoaXNtZXNzYWdlIiwidG4zMjcwIiwidGlwIiwidHYiLCJ1cm4iLCJ2ZW1taSIsIndzIiwid3NzIiwieGNvbiIsInhjb24tdXNlcmlkIiwieG1scnBjLmJlZXAiLCJ4bWxycGMuYmVlcHMiLCJ4bXBwIiwiejM5LjUwciIsInozOS41MHMiLCJhZGl1bXh0cmEiLCJhZnAiLCJhZnMiLCJhaW0iLCJhcHQiLCJhdHRhY2htZW50IiwiYXciLCJiZXNoYXJlIiwiYml0Y29pbiIsImJvbG8iLCJjYWxsdG8iLCJjaHJvbWUiLCJjaHJvbWUtZXh0ZW5zaW9uIiwiY29tLWV2ZW50YnJpdGUtYXR0ZW5kZWUiLCJjb250ZW50IiwiY3ZzIiwiZGxuYS1wbGF5c2luZ2xlIiwiZGxuYS1wbGF5Y29udGFpbmVyIiwiZHRuIiwiZHZiIiwiZWQyayIsImZhY2V0aW1lIiwiZmVlZCIsImZpbmdlciIsImZpc2giLCJnZyIsImdpdCIsImdpem1vcHJvamVjdCIsImd0YWxrIiwiaGNwIiwiaWNvbiIsImlwbiIsImlyYyIsImlyYzYiLCJpcmNzIiwiaXRtcyIsImphciIsImptcyIsImtleXBhcmMiLCJsYXN0Zm0iLCJsZGFwcyIsIm1hZ25ldCIsIm1hcHMiLCJtYXJrZXQiLCJtZXNzYWdlIiwibW1zIiwibXMtaGVscCIsIm1zbmltIiwibXVtYmxlIiwibXZuIiwibm90ZXMiLCJvaWQiLCJwYWxtIiwicGFwYXJhenppIiwicGxhdGZvcm0iLCJwcm94eSIsInBzeWMiLCJxdWVyeSIsInJlcyIsInJlc291cmNlIiwicm1pIiwicnN5bmMiLCJydG1wIiwic2Vjb25kbGlmZSIsInNmdHAiLCJzZ24iLCJza3lwZSIsInNtYiIsInNvbGRhdCIsInNwb3RpZnkiLCJzc2giLCJzdGVhbSIsInN2biIsInRlYW1zcGVhayIsInRoaW5ncyIsInVkcCIsInVucmVhbCIsInV0MjAwNCIsInZlbnRyaWxvIiwidmlldy1zb3VyY2UiLCJ3ZWJjYWwiLCJ3dGFpIiwid3ljaXd5ZyIsInhmaXJlIiwieHJpIiwieW1zZ3IiXX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PXIoZSl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiEhZSYmZi5jYWxsKGUsdCl9ZnVuY3Rpb24gaShlKXtyZXR1cm5bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQpe2lmKCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIm11c3QgYmUgb2JqZWN0Iik7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlW25dPXRbbl19KX19KSxlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUuaW5kZXhPZigiXFwiKTwwP2U6ZS5yZXBsYWNlKG0sIiQxIil9ZnVuY3Rpb24gbChlKXtyZXR1cm4hKGU+PTU1Mjk2JiZlPD01NzM0MykmJighKGU+PTY0OTc2JiZlPD02NTAwNykmJig2NTUzNSE9KDY1NTM1JmUpJiY2NTUzNCE9KDY1NTM1JmUpJiYoIShlPj0wJiZlPD04KSYmKDExIT09ZSYmKCEoZT49MTQmJmU8PTMxKSYmKCEoZT49MTI3JiZlPD0xNTkpJiYhKGU+MTExNDExMSkpKSkpKSl9ZnVuY3Rpb24gdShlKXtpZihlPjY1NTM1KXtlLT02NTUzNjt2YXIgdD01NTI5NisoZT4+MTApLG49NTYzMjArKDEwMjMmZSk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCxuKX1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKX1mdW5jdGlvbiBjKGUsdCl7dmFyIG49MDtyZXR1cm4gcyhiLHQpP2JbdF06MzU9PT10LmNoYXJDb2RlQXQoMCkmJmcudGVzdCh0KSYmKG49IngiPT09dFsxXS50b0xvd2VyQ2FzZSgpP3BhcnNlSW50KHQuc2xpY2UoMiksMTYpOnBhcnNlSW50KHQuc2xpY2UoMSksMTApLGwobikpP3Uobik6ZX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluZGV4T2YoIiYiKTwwP2U6ZS5yZXBsYWNlKGgsYyl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdltlXX1mdW5jdGlvbiBwKGUpe3JldHVybiBFLnRlc3QoZSk/ZS5yZXBsYWNlKHksXyk6ZX12YXIgZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG09L1xcKFtcXCEiIyQlJicoKSorLC5cLzo7PD0+P0BbXF1eX2B7fH1+LV0pL2csaD0vJihbYS16I11bYS16MC05XXsxLDMxfSk7L2dpLGc9L14jKCg/OnhbYS1mMC05XXsxLDh9fFswLTldezEsOH0pKS9pLGI9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL2VudGl0aWVzLmpzIiksRT0vWyY8PiJdLyx5PS9bJjw+Il0vZyx2PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsifTt0LmFzc2lnbj1pLHQuaXNTdHJpbmc9byx0Lmhhcz1zLHQudW5lc2NhcGVNZD1hLHQuaXNWYWxpZEVudGl0eUNvZGU9bCx0LmZyb21Db2RlUG9pbnQ9dSx0LnJlcGxhY2VFbnRpdGllcz1kLHQuZXNjYXBlSHRtbD1wfSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29uZmlncy9jb21tb25tYXJrLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMCx4aHRtbE91dDohMCxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ITEscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e3J1bGVzOlsiYmxvY2siLCJpbmxpbmUiLCJyZWZlcmVuY2VzIiwiYWJicjIiXX0sYmxvY2s6e3J1bGVzOlsiYmxvY2txdW90ZSIsImNvZGUiLCJmZW5jZXMiLCJoZWFkaW5nIiwiaHIiLCJodG1sYmxvY2siLCJsaGVhZGluZyIsImxpc3QiLCJwYXJhZ3JhcGgiXX0saW5saW5lOntydWxlczpbImF1dG9saW5rIiwiYmFja3RpY2tzIiwiZW1waGFzaXMiLCJlbnRpdHkiLCJlc2NhcGUiLCJodG1sdGFnIiwibGlua3MiLCJuZXdsaW5lIiwidGV4dCJdfX19fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29uZmlncy9kZWZhdWx0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMSx4aHRtbE91dDohMSxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ITEscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e3J1bGVzOlsiYmxvY2siLCJpbmxpbmUiLCJyZWZlcmVuY2VzIiwicmVwbGFjZW1lbnRzIiwibGlua2lmeSIsInNtYXJ0cXVvdGVzIiwicmVmZXJlbmNlcyIsImFiYnIyIiwiZm9vdG5vdGVfdGFpbCJdfSxibG9jazp7cnVsZXM6WyJibG9ja3F1b3RlIiwiY29kZSIsImZlbmNlcyIsImZvb3Rub3RlIiwiaGVhZGluZyIsImhyIiwiaHRtbGJsb2NrIiwibGhlYWRpbmciLCJsaXN0IiwicGFyYWdyYXBoIiwidGFibGUiXX0saW5saW5lOntydWxlczpbImF1dG9saW5rIiwiYmFja3RpY2tzIiwiZGVsIiwiZW1waGFzaXMiLCJlbnRpdHkiLCJlc2NhcGUiLCJmb290bm90ZV9yZWYiLCJodG1sdGFnIiwibGlua3MiLCJuZXdsaW5lIiwidGV4dCJdfX19fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29uZmlncy9mdWxsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17b3B0aW9uczp7aHRtbDohMSx4aHRtbE91dDohMSxicmVha3M6ITEsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OiExLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ITEscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e30sYmxvY2s6e30saW5saW5lOnt9fX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL25vcm1hbGl6ZV9saW5rLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLnJlcGxhY2VFbnRpdGllcztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTt0cnl7dD1kZWNvZGVVUkkodCl9Y2F0Y2goZSl7fXJldHVybiBlbmNvZGVVUkkodCl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9ub3JtYWxpemVfcmVmZXJlbmNlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKS50b1VwcGVyQ2FzZSgpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2hlbHBlcnMvcGFyc2VfbGlua19kZXN0aW5hdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL25vcm1hbGl6ZV9saW5rLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vdXRpbHMuanMiKS51bmVzY2FwZU1kO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHMsaSxhPXQsbD1lLnBvc01heDtpZig2MD09PWUuc3JjLmNoYXJDb2RlQXQodCkpe2Zvcih0Kys7dDxsOyl7aWYoMTA9PT0obj1lLnNyYy5jaGFyQ29kZUF0KHQpKSlyZXR1cm4hMTtpZig2Mj09PW4pcmV0dXJuIGk9cihvKGUuc3JjLnNsaWNlKGErMSx0KSkpLCEhZS5wYXJzZXIudmFsaWRhdGVMaW5rKGkpJiYoZS5wb3M9dCsxLGUubGlua0NvbnRlbnQ9aSwhMCk7OTI9PT1uJiZ0KzE8bD90Kz0yOnQrK31yZXR1cm4hMX1mb3Iocz0wO3Q8bCYmMzIhPT0obj1lLnNyYy5jaGFyQ29kZUF0KHQpKSYmIShuPjgmJm48MTQpOylpZig5Mj09PW4mJnQrMTxsKXQrPTI7ZWxzZXtpZig0MD09PW4mJisrcz4xKWJyZWFrO2lmKDQxPT09biYmLS1zPDApYnJlYWs7dCsrfXJldHVybiBhIT09dCYmKGk9byhlLnNyYy5zbGljZShhLHQpKSwhIWUucGFyc2VyLnZhbGlkYXRlTGluayhpKSYmKGUubGlua0NvbnRlbnQ9aSxlLnBvcz10LCEwKSl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9wYXJzZV9saW5rX2xhYmVsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzPS0xLGk9ZS5wb3NNYXgsYT1lLnBvcyxsPWUuaXNJbkxhYmVsO2lmKGUuaXNJbkxhYmVsKXJldHVybi0xO2lmKGUubGFiZWxVbm1hdGNoZWRTY29wZXMpcmV0dXJuIGUubGFiZWxVbm1hdGNoZWRTY29wZXMtLSwtMTtmb3IoZS5wb3M9dCsxLGUuaXNJbkxhYmVsPSEwLG49MTtlLnBvczxpOyl7aWYoOTE9PT0obz1lLnNyYy5jaGFyQ29kZUF0KGUucG9zKSkpbisrO2Vsc2UgaWYoOTM9PT1vJiYwPT09LS1uKXtyPSEwO2JyZWFrfWUucGFyc2VyLnNraXBUb2tlbihlKX1yZXR1cm4gcj8ocz1lLnBvcyxlLmxhYmVsVW5tYXRjaGVkU2NvcGVzPTApOmUubGFiZWxVbm1hdGNoZWRTY29wZXM9bi0xLGUucG9zPWEsZS5pc0luTGFiZWw9bCxzfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2hlbHBlcnMvcGFyc2VfbGlua190aXRsZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vdXRpbHMuanMiKS51bmVzY2FwZU1kO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG89dCxzPWUucG9zTWF4LGk9ZS5zcmMuY2hhckNvZGVBdCh0KTtpZigzNCE9PWkmJjM5IT09aSYmNDAhPT1pKXJldHVybiExO2Zvcih0KyssNDA9PT1pJiYoaT00MSk7dDxzOyl7aWYoKG49ZS5zcmMuY2hhckNvZGVBdCh0KSk9PT1pKXJldHVybiBlLnBvcz10KzEsZS5saW5rQ29udGVudD1yKGUuc3JjLnNsaWNlKG8rMSx0KSksITA7OTI9PT1uJiZ0KzE8cz90Kz0yOnQrK31yZXR1cm4hMX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt0aGlzLnNyYz10LHRoaXMuZW52PW4sdGhpcy5vcHRpb25zPWUub3B0aW9ucyx0aGlzLnRva2Vucz1bXSx0aGlzLmlubGluZU1vZGU9ITEsdGhpcy5pbmxpbmU9ZS5pbmxpbmUsdGhpcy5ibG9jaz1lLmJsb2NrLHRoaXMucmVuZGVyZXI9ZS5yZW5kZXJlcix0aGlzLnR5cG9ncmFwaGVyPWUudHlwb2dyYXBoZXJ9ZnVuY3Rpb24gbyhlLHQpeyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJkZWZhdWx0IiksdGhpcy5pbmxpbmU9bmV3IHUsdGhpcy5ibG9jaz1uZXcgbCx0aGlzLmNvcmU9bmV3IGEsdGhpcy5yZW5kZXJlcj1uZXcgaSx0aGlzLnJ1bGVyPW5ldyBjLHRoaXMub3B0aW9ucz17fSx0aGlzLmNvbmZpZ3VyZShkW2VdKSx0aGlzLnNldCh0fHx7fSl9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3V0aWxzLmpzIikuYXNzaWduLGk9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcmVuZGVyZXIuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3BhcnNlcl9jb3JlLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9wYXJzZXJfYmxvY2suanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3BhcnNlcl9pbmxpbmUuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVyLmpzIiksZD17ZGVmYXVsdDpuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb25maWdzL2RlZmF1bHQuanMiKSxmdWxsOm4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbmZpZ3MvZnVsbC5qcyIpLGNvbW1vbm1hcms6bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29uZmlncy9jb21tb25tYXJrLmpzIil9O28ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXtzKHRoaXMub3B0aW9ucyxlKX0sby5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBgcmVtYXJrYWJsZWAgcHJlc2V0LCBjaGVjayBuYW1lL2NvbnRlbnQiKTtlLm9wdGlvbnMmJnQuc2V0KGUub3B0aW9ucyksZS5jb21wb25lbnRzJiZPYmplY3Qua2V5cyhlLmNvbXBvbmVudHMpLmZvckVhY2goZnVuY3Rpb24obil7ZS5jb21wb25lbnRzW25dLnJ1bGVzJiZ0W25dLnJ1bGVyLmVuYWJsZShlLmNvbXBvbmVudHNbbl0ucnVsZXMsITApfSl9LG8ucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQpe3JldHVybiBlKHRoaXMsdCksdGhpc30sby5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgcih0aGlzLGUsdCk7cmV0dXJuIHRoaXMuY29yZS5wcm9jZXNzKG4pLG4udG9rZW5zfSxvLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHx7fSx0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnBhcnNlKGUsdCksdGhpcy5vcHRpb25zLHQpfSxvLnByb3RvdHlwZS5wYXJzZUlubGluZT1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyByKHRoaXMsZSx0KTtyZXR1cm4gbi5pbmxpbmVNb2RlPSEwLHRoaXMuY29yZS5wcm9jZXNzKG4pLG4udG9rZW5zfSxvLnByb3RvdHlwZS5yZW5kZXJJbmxpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHx7fSx0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnBhcnNlSW5saW5lKGUsdCksdGhpcy5vcHRpb25zLHQpfSxlLmV4cG9ydHM9byxlLmV4cG9ydHMudXRpbHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3V0aWxzLmpzIil9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9wYXJzZXJfYmxvY2suanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucnVsZXI9bmV3IG87Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDtlKyspdGhpcy5ydWxlci5wdXNoKGlbZV1bMF0saVtlXVsxXSx7YWx0OihpW2VdWzJdfHxbXSkuc2xpY2UoKX0pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVyLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9zdGF0ZV9ibG9jay5qcyIpLGk9W1siY29kZSIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svY29kZS5qcyIpXSxbImZlbmNlcyIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svZmVuY2VzLmpzIiksWyJwYXJhZ3JhcGgiLCJibG9ja3F1b3RlIiwibGlzdCJdXSxbImJsb2NrcXVvdGUiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2Jsb2NrcXVvdGUuanMiKSxbInBhcmFncmFwaCIsImJsb2NrcXVvdGUiLCJsaXN0Il1dLFsiaHIiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2hyLmpzIiksWyJwYXJhZ3JhcGgiLCJibG9ja3F1b3RlIiwibGlzdCJdXSxbImxpc3QiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2xpc3QuanMiKSxbInBhcmFncmFwaCIsImJsb2NrcXVvdGUiXV0sWyJmb290bm90ZSIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svZm9vdG5vdGUuanMiKSxbInBhcmFncmFwaCJdXSxbImhlYWRpbmciLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2hlYWRpbmcuanMiKSxbInBhcmFncmFwaCIsImJsb2NrcXVvdGUiXV0sWyJsaGVhZGluZyIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svbGhlYWRpbmcuanMiKV0sWyJodG1sYmxvY2siLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2h0bWxibG9jay5qcyIpLFsicGFyYWdyYXBoIiwiYmxvY2txdW90ZSJdXSxbInRhYmxlIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay90YWJsZS5qcyIpLFsicGFyYWdyYXBoIl1dLFsiZGVmbGlzdCIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svZGVmbGlzdC5qcyIpLFsicGFyYWdyYXBoIl1dLFsicGFyYWdyYXBoIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9wYXJhZ3JhcGguanMiKV1dO3IucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz10aGlzLnJ1bGVyLmdldFJ1bGVzKCIiKSxzPW8ubGVuZ3RoLGk9dCxhPSExO2k8biYmKGUubGluZT1pPWUuc2tpcEVtcHR5TGluZXMoaSksIShpPj1uKSkmJiEoZS50U2hpZnRbaV08ZS5ibGtJbmRlbnQpOyl7Zm9yKHI9MDtyPHMmJiFvW3JdKGUsaSxuLCExKTtyKyspO2lmKGUudGlnaHQ9IWEsZS5pc0VtcHR5KGUubGluZS0xKSYmKGE9ITApLChpPWUubGluZSk8biYmZS5pc0VtcHR5KGkpKXtpZihhPSEwLCsraTxuJiYibGlzdCI9PT1lLnBhcmVudFR5cGUmJmUuaXNFbXB0eShpKSlicmVhaztlLmxpbmU9aX19fTt2YXIgYT0vW1xuXHRdL2csbD0vXHJbXG5cdTAwODVdfFtcdTI0MjRcdTIwMjhcdTAwODVdL2csdT0vXHUwMGEwL2c7ci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saT0wLGM9MDtpZighZSlyZXR1cm5bXTtlPWUucmVwbGFjZSh1LCIgIiksZT1lLnJlcGxhY2UobCwiXG4iKSxlLmluZGV4T2YoIlx0Iik+PTAmJihlPWUucmVwbGFjZShhLGZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIDEwPT09ZS5jaGFyQ29kZUF0KG4pPyhpPW4rMSxjPTAsdCk6KHI9IiAgICAiLnNsaWNlKChuLWktYyklNCksYz1uLWkrMSxyKX0pKSxvPW5ldyBzKGUsdGhpcyx0LG4sciksdGhpcy50b2tlbml6ZShvLG8ubGluZSxvLmxpbmVNYXgpfSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3BhcnNlcl9jb3JlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLm9wdGlvbnM9e30sdGhpcy5ydWxlcj1uZXcgbztmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKyl0aGlzLnJ1bGVyLnB1c2goc1tlXVswXSxzW2VdWzFdKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlci5qcyIpLHM9W1siYmxvY2siLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvYmxvY2suanMiKV0sWyJhYmJyIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19jb3JlL2FiYnIuanMiKV0sWyJyZWZlcmVuY2VzIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19jb3JlL3JlZmVyZW5jZXMuanMiKV0sWyJpbmxpbmUiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvaW5saW5lLmpzIildLFsiZm9vdG5vdGVfdGFpbCIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9mb290bm90ZV90YWlsLmpzIildLFsiYWJicjIiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvYWJicjIuanMiKV0sWyJyZXBsYWNlbWVudHMiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvcmVwbGFjZW1lbnRzLmpzIildLFsic21hcnRxdW90ZXMiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvc21hcnRxdW90ZXMuanMiKV0sWyJsaW5raWZ5IixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19jb3JlL2xpbmtpZnkuanMiKV1dO3IucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2ZvcihyPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpLHQ9MCxuPXIubGVuZ3RoO3Q8bjt0Kyspclt0XShlKX0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9wYXJzZXJfaW5saW5lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLnJ1bGVyPW5ldyBzO2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKXRoaXMucnVsZXIucHVzaChsW2VdWzBdLGxbZV1bMV0pO3RoaXMudmFsaWRhdGVMaW5rPW99ZnVuY3Rpb24gbyhlKXt2YXIgdD1bInZic2NyaXB0IiwiamF2YXNjcmlwdCIsImZpbGUiLCJkYXRhIl0sbj1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybiBuPWEucmVwbGFjZUVudGl0aWVzKG4pLC0xPT09bi5pbmRleE9mKCI6Iil8fC0xPT09dC5pbmRleE9mKG4uc3BsaXQoIjoiKVswXSl9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXIuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9zdGF0ZV9pbmxpbmUuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLGw9W1sidGV4dCIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL3RleHQuanMiKV0sWyJuZXdsaW5lIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvbmV3bGluZS5qcyIpXSxbImVzY2FwZSIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2VzY2FwZS5qcyIpXSxbImJhY2t0aWNrcyIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2JhY2t0aWNrcy5qcyIpXSxbImRlbCIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2RlbC5qcyIpXSxbImlucyIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2lucy5qcyIpXSxbIm1hcmsiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9tYXJrLmpzIildLFsiZW1waGFzaXMiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9lbXBoYXNpcy5qcyIpXSxbInN1YiIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL3N1Yi5qcyIpXSxbInN1cCIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL3N1cC5qcyIpXSxbImxpbmtzIixuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvbGlua3MuanMiKV0sWyJmb290bm90ZV9pbmxpbmUiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9mb290bm90ZV9pbmxpbmUuanMiKV0sWyJmb290bm90ZV9yZWYiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9mb290bm90ZV9yZWYuanMiKV0sWyJhdXRvbGluayIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2F1dG9saW5rLmpzIildLFsiaHRtbHRhZyIsbigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2h0bWx0YWcuanMiKV0sWyJlbnRpdHkiLG4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9lbnRpdHkuanMiKV1dO3IucHJvdG90eXBlLnNraXBUb2tlbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5ydWxlci5nZXRSdWxlcygiIiksbz1yLmxlbmd0aCxzPWUucG9zO2lmKChuPWUuY2FjaGVHZXQocykpPjApcmV0dXJuIHZvaWQoZS5wb3M9bik7Zm9yKHQ9MDt0PG87dCsrKWlmKHJbdF0oZSwhMCkpcmV0dXJuIHZvaWQgZS5jYWNoZVNldChzLGUucG9zKTtlLnBvcysrLGUuY2FjaGVTZXQocyxlLnBvcyl9LHIucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9dGhpcy5ydWxlci5nZXRSdWxlcygiIiksbz1yLmxlbmd0aCxzPWUucG9zTWF4O2UucG9zPHM7KXtmb3Iobj0wO248byYmISh0PXJbbl0oZSwhMSkpO24rKyk7aWYodCl7aWYoZS5wb3M+PXMpYnJlYWt9ZWxzZSBlLnBlbmRpbmcrPWUuc3JjW2UucG9zKytdfWUucGVuZGluZyYmZS5wdXNoUGVuZGluZygpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1uZXcgaShlLHRoaXMsdCxuLHIpO3RoaXMudG9rZW5pemUobyl9LGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcmVuZGVyZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucnVsZXM9by5hc3NpZ24oe30scyksdGhpcy5nZXRCcmVhaz1zLmdldEJyZWFrfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXMuanMiKTtlLmV4cG9ydHM9cixyLnByb3RvdHlwZS5yZW5kZXJJbmxpbmU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10aGlzLnJ1bGVzLG89ZS5sZW5ndGgscz0wLGk9IiI7by0tOylpKz1yW2Vbc10udHlwZV0oZSxzKyssdCxuLHRoaXMpO3JldHVybiBpfSxyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10aGlzLnJ1bGVzLG89ZS5sZW5ndGgscz0tMSxpPSIiOysrczxvOykiaW5saW5lIj09PWVbc10udHlwZT9pKz10aGlzLnJlbmRlcklubGluZShlW3NdLmNoaWxkcmVuLHQsbik6aSs9cltlW3NdLnR5cGVdKGUscyx0LG4sdGhpcyk7cmV0dXJuIGl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX19ydWxlc19fPVtdLHRoaXMuX19jYWNoZV9fPW51bGx9ci5wcm90b3R5cGUuX19maW5kX189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX19ydWxlc19fLmxlbmd0aCxuPS0xO3QtLTspaWYodGhpcy5fX3J1bGVzX19bKytuXS5uYW1lPT09ZSlyZXR1cm4gbjtyZXR1cm4tMX0sci5wcm90b3R5cGUuX19jb21waWxlX189ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9WyIiXTtlLl9fcnVsZXNfXy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZW5hYmxlZCYmZS5hbHQuZm9yRWFjaChmdW5jdGlvbihlKXt0LmluZGV4T2YoZSk8MCYmdC5wdXNoKGUpfSl9KSxlLl9fY2FjaGVfXz17fSx0LmZvckVhY2goZnVuY3Rpb24odCl7ZS5fX2NhY2hlX19bdF09W10sZS5fX3J1bGVzX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLmVuYWJsZWQmJih0JiZuLmFsdC5pbmRleE9mKHQpPDB8fGUuX19jYWNoZV9fW3RdLnB1c2gobi5mbikpfSl9KX0sci5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX19maW5kX18oZSksbz1ufHx7fTtpZigtMT09PXIpdGhyb3cgbmV3IEVycm9yKCJQYXJzZXIgcnVsZSBub3QgZm91bmQ6ICIrZSk7dGhpcy5fX3J1bGVzX19bcl0uZm49dCx0aGlzLl9fcnVsZXNfX1tyXS5hbHQ9by5hbHR8fFtdLHRoaXMuX19jYWNoZV9fPW51bGx9LHIucHJvdG90eXBlLmJlZm9yZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLl9fZmluZF9fKGUpLHM9cnx8e307aWYoLTE9PT1vKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHJ1bGUgbm90IGZvdW5kOiAiK2UpO3RoaXMuX19ydWxlc19fLnNwbGljZShvLDAse25hbWU6dCxlbmFibGVkOiEwLGZuOm4sYWx0OnMuYWx0fHxbXX0pLHRoaXMuX19jYWNoZV9fPW51bGx9LHIucHJvdG90eXBlLmFmdGVyPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMuX19maW5kX18oZSkscz1yfHx7fTtpZigtMT09PW8pdGhyb3cgbmV3IEVycm9yKCJQYXJzZXIgcnVsZSBub3QgZm91bmQ6ICIrZSk7dGhpcy5fX3J1bGVzX18uc3BsaWNlKG8rMSwwLHtuYW1lOnQsZW5hYmxlZDohMCxmbjpuLGFsdDpzLmFsdHx8W119KSx0aGlzLl9fY2FjaGVfXz1udWxsfSxyLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ufHx7fTt0aGlzLl9fcnVsZXNfXy5wdXNoKHtuYW1lOmUsZW5hYmxlZDohMCxmbjp0LGFsdDpyLmFsdHx8W119KSx0aGlzLl9fY2FjaGVfXz1udWxsfSxyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oZSx0KXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sdCYmdGhpcy5fX3J1bGVzX18uZm9yRWFjaChmdW5jdGlvbihlKXtlLmVuYWJsZWQ9ITF9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2ZpbmRfXyhlKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJSdWxlcyBtYW5hZ2VyOiBpbnZhbGlkIHJ1bGUgbmFtZSAiK2UpO3RoaXMuX19ydWxlc19fW3RdLmVuYWJsZWQ9ITB9LHRoaXMpLHRoaXMuX19jYWNoZV9fPW51bGx9LHIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZmluZF9fKGUpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIlJ1bGVzIG1hbmFnZXI6IGludmFsaWQgcnVsZSBuYW1lICIrZSk7dGhpcy5fX3J1bGVzX19bdF0uZW5hYmxlZD0hMX0sdGhpcyksdGhpcy5fX2NhY2hlX189bnVsbH0sci5wcm90b3R5cGUuZ2V0UnVsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT10aGlzLl9fY2FjaGVfXyYmdGhpcy5fX2NvbXBpbGVfXygpLHRoaXMuX19jYWNoZV9fW2VdfHxbXX0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuKyt0Pj1lLmxlbmd0aC0yP3Q6InBhcmFncmFwaF9vcGVuIj09PWVbdF0udHlwZSYmZVt0XS50aWdodCYmImlubGluZSI9PT1lW3QrMV0udHlwZSYmMD09PWVbdCsxXS5jb250ZW50Lmxlbmd0aCYmInBhcmFncmFwaF9jbG9zZSI9PT1lW3QrMl0udHlwZSYmZVt0KzJdLnRpZ2h0P3IoZSx0KzIpOnR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3V0aWxzLmpzIikuaGFzLHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3V0aWxzLmpzIikudW5lc2NhcGVNZCxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLnJlcGxhY2VFbnRpdGllcyxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLmVzY2FwZUh0bWwsbD17fTtsLmJsb2NrcXVvdGVfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8YmxvY2txdW90ZT5cbiJ9LGwuYmxvY2txdW90ZV9jbG9zZT1mdW5jdGlvbihlLHQpe3JldHVybiI8L2Jsb2NrcXVvdGU+Iit1KGUsdCl9LGwuY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdLmJsb2NrPyI8cHJlPjxjb2RlPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+PC9wcmU+Iit1KGUsdCk6Ijxjb2RlPiIrYShlW3RdLmNvbnRlbnQpKyI8L2NvZGU+In0sbC5mZW5jZT1mdW5jdGlvbihlLHQsbixyLGwpe3ZhciBjLGQsXyxwPWVbdF0sZj0iIixtPW4ubGFuZ1ByZWZpeCxoPSIiO2lmKHAucGFyYW1zKXtpZihjPXAucGFyYW1zLnNwbGl0KC9ccysvZyksZD1jLmpvaW4oIiAiKSxvKGwucnVsZXMuZmVuY2VfY3VzdG9tLGNbMF0pKXJldHVybiBsLnJ1bGVzLmZlbmNlX2N1c3RvbVtjWzBdXShlLHQsbixyLGwpO2g9YShpKHMoZCkpKSxmPScgY2xhc3M9IicrbStoKyciJ31yZXR1cm4gXz1uLmhpZ2hsaWdodD9uLmhpZ2hsaWdodC5hcHBseShuLmhpZ2hsaWdodCxbcC5jb250ZW50XS5jb25jYXQoYykpfHxhKHAuY29udGVudCk6YShwLmNvbnRlbnQpLCI8cHJlPjxjb2RlIitmKyI+IitfKyI8L2NvZGU+PC9wcmU+Iit1KGUsdCl9LGwuZmVuY2VfY3VzdG9tPXt9LGwuaGVhZGluZ19vcGVuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjxoIitlW3RdLmhMZXZlbCsiPiJ9LGwuaGVhZGluZ19jbG9zZT1mdW5jdGlvbihlLHQpe3JldHVybiI8L2giK2VbdF0uaExldmVsKyI+XG4ifSxsLmhyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obi54aHRtbE91dD8iPGhyIC8+IjoiPGhyPiIpK3UoZSx0KX0sbC5idWxsZXRfbGlzdF9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjx1bD5cbiJ9LGwuYnVsbGV0X2xpc3RfY2xvc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPC91bD4iK3UoZSx0KX0sbC5saXN0X2l0ZW1fb3Blbj1mdW5jdGlvbigpe3JldHVybiI8bGk+In0sbC5saXN0X2l0ZW1fY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9saT5cbiJ9LGwub3JkZXJlZF9saXN0X29wZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiI8b2wiKyhuLm9yZGVyPjE/JyBzdGFydD0iJytuLm9yZGVyKyciJzoiIikrIj5cbiJ9LGwub3JkZXJlZF9saXN0X2Nsb3NlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjwvb2w+Iit1KGUsdCl9LGwucGFyYWdyYXBoX29wZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XS50aWdodD8iIjoiPHA+In0sbC5wYXJhZ3JhcGhfY2xvc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hKGVbdF0udGlnaHQmJnQmJiJpbmxpbmUiPT09ZVt0LTFdLnR5cGUmJiFlW3QtMV0uY29udGVudCk7cmV0dXJuKGVbdF0udGlnaHQ/IiI6IjwvcD4iKSsobj91KGUsdCk6IiIpfSxsLmxpbmtfb3Blbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XS50aXRsZT8nIHRpdGxlPSInK2EoaShlW3RdLnRpdGxlKSkrJyInOiIiLG89bi5saW5rVGFyZ2V0PycgdGFyZ2V0PSInK24ubGlua1RhcmdldCsnIic6IiI7cmV0dXJuJzxhIGhyZWY9IicrYShlW3RdLmhyZWYpKyciJytyK28rIj4ifSxsLmxpbmtfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9hPiJ9LGwuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPScgc3JjPSInK2EoZVt0XS5zcmMpKyciJyxvPWVbdF0udGl0bGU/JyB0aXRsZT0iJythKGkoZVt0XS50aXRsZSkpKyciJzoiIjtyZXR1cm4iPGltZyIrcisnIGFsdD0iJysoZVt0XS5hbHQ/YShpKHMoZVt0XS5hbHQpKSk6IiIpKyciJytvKyhuLnhodG1sT3V0PyIgLyI6IiIpKyI+In0sbC50YWJsZV9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjx0YWJsZT5cbiJ9LGwudGFibGVfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC90YWJsZT5cbiJ9LGwudGhlYWRfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8dGhlYWQ+XG4ifSxsLnRoZWFkX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvdGhlYWQ+XG4ifSxsLnRib2R5X29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHRib2R5PlxuIn0sbC50Ym9keV9jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L3Rib2R5PlxuIn0sbC50cl9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjx0cj4ifSxsLnRyX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvdHI+XG4ifSxsLnRoX29wZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiI8dGgiKyhuLmFsaWduPycgc3R5bGU9InRleHQtYWxpZ246JytuLmFsaWduKyciJzoiIikrIj4ifSxsLnRoX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvdGg+In0sbC50ZF9vcGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4iPHRkIisobi5hbGlnbj8nIHN0eWxlPSJ0ZXh0LWFsaWduOicrbi5hbGlnbisnIic6IiIpKyI+In0sbC50ZF9jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L3RkPiJ9LGwuc3Ryb25nX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHN0cm9uZz4ifSxsLnN0cm9uZ19jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L3N0cm9uZz4ifSxsLmVtX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPGVtPiJ9LGwuZW1fY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9lbT4ifSxsLmRlbF9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjxkZWw+In0sbC5kZWxfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9kZWw+In0sbC5pbnNfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8aW5zPiJ9LGwuaW5zX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvaW5zPiJ9LGwubWFya19vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjxtYXJrPiJ9LGwubWFya19jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L21hcms+In0sbC5zdWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHN1Yj4iK2EoZVt0XS5jb250ZW50KSsiPC9zdWI+In0sbC5zdXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHN1cD4iK2EoZVt0XS5jb250ZW50KSsiPC9zdXA+In0sbC5oYXJkYnJlYWs9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnhodG1sT3V0PyI8YnIgLz5cbiI6Ijxicj5cbiJ9LGwuc29mdGJyZWFrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5icmVha3M/bi54aHRtbE91dD8iPGJyIC8+XG4iOiI8YnI+XG4iOiJcbiJ9LGwudGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiBhKGVbdF0uY29udGVudCl9LGwuaHRtbGJsb2NrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0uY29udGVudH0sbC5odG1sdGFnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0uY29udGVudH0sbC5hYmJyX29wZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4nPGFiYnIgdGl0bGU9IicrYShpKGVbdF0udGl0bGUpKSsnIj4nfSxsLmFiYnJfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9hYmJyPiJ9LGwuZm9vdG5vdGVfcmVmPWZ1bmN0aW9uKGUsdCl7dmFyIG49TnVtYmVyKGVbdF0uaWQrMSkudG9TdHJpbmcoKSxyPSJmbnJlZiIrbjtyZXR1cm4gZVt0XS5zdWJJZD4wJiYocis9IjoiK2VbdF0uc3ViSWQpLCc8c3VwIGNsYXNzPSJmb290bm90ZS1yZWYiPjxhIGhyZWY9IiNmbicrbisnIiBpZD0iJytyKyciPlsnK24rIl08L2E+PC9zdXA+In0sbC5mb290bm90ZV9ibG9ja19vcGVuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obi54aHRtbE91dD8nPGhyIGNsYXNzPSJmb290bm90ZXMtc2VwIiAvPlxuJzonPGhyIGNsYXNzPSJmb290bm90ZXMtc2VwIj5cbicpKyc8c2VjdGlvbiBjbGFzcz0iZm9vdG5vdGVzIj5cbjxvbCBjbGFzcz0iZm9vdG5vdGVzLWxpc3QiPlxuJ30sbC5mb290bm90ZV9ibG9ja19jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L29sPlxuPC9zZWN0aW9uPlxuIn0sbC5mb290bm90ZV9vcGVuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuJzxsaSBpZD0iZm4nK051bWJlcihlW3RdLmlkKzEpLnRvU3RyaW5nKCkrJyIgIGNsYXNzPSJmb290bm90ZS1pdGVtIj4nfSxsLmZvb3Rub3RlX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvbGk+XG4ifSxsLmZvb3Rub3RlX2FuY2hvcj1mdW5jdGlvbihlLHQpe3ZhciBuPU51bWJlcihlW3RdLmlkKzEpLnRvU3RyaW5nKCkscj0iZm5yZWYiK247cmV0dXJuIGVbdF0uc3ViSWQ+MCYmKHIrPSI6IitlW3RdLnN1YklkKSwnIDxhIGhyZWY9IiMnK3IrJyIgY2xhc3M9ImZvb3Rub3RlLWJhY2tyZWYiPuKGqTwvYT4nfSxsLmRsX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPGRsPlxuIn0sbC5kdF9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjxkdD4ifSxsLmRkX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPGRkPiJ9LGwuZGxfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9kbD5cbiJ9LGwuZHRfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9kdD5cbiJ9LGwuZGRfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9kZD5cbiJ9O3ZhciB1PWwuZ2V0QnJlYWs9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1yKGUsdCksdDxlLmxlbmd0aCYmImxpc3RfaXRlbV9jbG9zZSI9PT1lW3RdLnR5cGU/IiI6IlxuIn07ZS5leHBvcnRzPWx9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9ibG9ja3F1b3RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxzLGksYSxsLHUsYyxkLF8scCxmLG09ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0saD1lLmVNYXJrc1t0XTtpZihtPmgpcmV0dXJuITE7aWYoNjIhPT1lLnNyYy5jaGFyQ29kZUF0KG0rKykpcmV0dXJuITE7aWYoZS5sZXZlbD49ZS5vcHRpb25zLm1heE5lc3RpbmcpcmV0dXJuITE7aWYocilyZXR1cm4hMDtmb3IoMzI9PT1lLnNyYy5jaGFyQ29kZUF0KG0pJiZtKyssbD1lLmJsa0luZGVudCxlLmJsa0luZGVudD0wLGE9W2UuYk1hcmtzW3RdXSxlLmJNYXJrc1t0XT1tLG09bTxoP2Uuc2tpcFNwYWNlcyhtKTptLHM9bT49aCxpPVtlLnRTaGlmdFt0XV0sZS50U2hpZnRbdF09bS1lLmJNYXJrc1t0XSxkPWUucGFyc2VyLnJ1bGVyLmdldFJ1bGVzKCJibG9ja3F1b3RlIiksbz10KzE7bzxuJiYobT1lLmJNYXJrc1tvXStlLnRTaGlmdFtvXSxoPWUuZU1hcmtzW29dLCEobT49aCkpO28rKylpZig2MiE9PWUuc3JjLmNoYXJDb2RlQXQobSsrKSl7aWYocylicmVhaztmb3IoZj0hMSxfPTAscD1kLmxlbmd0aDtfPHA7XysrKWlmKGRbX10oZSxvLG4sITApKXtmPSEwO2JyZWFrfWlmKGYpYnJlYWs7YS5wdXNoKGUuYk1hcmtzW29dKSxpLnB1c2goZS50U2hpZnRbb10pLGUudFNoaWZ0W29dPS0xMzM3fWVsc2UgMzI9PT1lLnNyYy5jaGFyQ29kZUF0KG0pJiZtKyssYS5wdXNoKGUuYk1hcmtzW29dKSxlLmJNYXJrc1tvXT1tLG09bTxoP2Uuc2tpcFNwYWNlcyhtKTptLHM9bT49aCxpLnB1c2goZS50U2hpZnRbb10pLGUudFNoaWZ0W29dPW0tZS5iTWFya3Nbb107Zm9yKHU9ZS5wYXJlbnRUeXBlLGUucGFyZW50VHlwZT0iYmxvY2txdW90ZSIsZS50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9vcGVuIixsaW5lczpjPVt0LDBdLGxldmVsOmUubGV2ZWwrK30pLGUucGFyc2VyLnRva2VuaXplKGUsdCxvKSxlLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KSxlLnBhcmVudFR5cGU9dSxjWzFdPWUubGluZSxfPTA7XzxpLmxlbmd0aDtfKyspZS5iTWFya3NbXyt0XT1hW19dLGUudFNoaWZ0W18rdF09aVtfXTtyZXR1cm4gZS5ibGtJbmRlbnQ9bCwhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9jb2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbztpZihlLnRTaGlmdFt0XS1lLmJsa0luZGVudDw0KXJldHVybiExO2ZvcihvPXI9dCsxO3I8bjspaWYoZS5pc0VtcHR5KHIpKXIrKztlbHNle2lmKCEoZS50U2hpZnRbcl0tZS5ibGtJbmRlbnQ+PTQpKWJyZWFrO3IrKyxvPXJ9cmV0dXJuIGUubGluZT1yLGUudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLGNvbnRlbnQ6ZS5nZXRMaW5lcyh0LG8sNCtlLmJsa0luZGVudCwhMCksYmxvY2s6ITAsbGluZXM6W3QsZS5saW5lXSxsZXZlbDplLmxldmVsfSksITB9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svZGVmbGlzdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG4scixvPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLHM9ZS5lTWFya3NbdF07cmV0dXJuIG8+PXM/LTE6MTI2IT09KHI9ZS5zcmMuY2hhckNvZGVBdChvKyspKSYmNTghPT1yPy0xOihuPWUuc2tpcFNwYWNlcyhvKSxvPT09bj8tMTpuPj1zPy0xOm4pfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbixyLG89ZS5sZXZlbCsyO2ZvcihuPXQrMixyPWUudG9rZW5zLmxlbmd0aC0yO248cjtuKyspZS50b2tlbnNbbl0ubGV2ZWw9PT1vJiYicGFyYWdyYXBoX29wZW4iPT09ZS50b2tlbnNbbl0udHlwZSYmKGUudG9rZW5zW24rMl0udGlnaHQ9ITAsZS50b2tlbnNbbl0udGlnaHQ9ITAsbis9Mil9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpLGEsbCx1LGMsZCxfLHAsZixtLGgsZyxiLEU7aWYocylyZXR1cm4hKGUuZGRJbmRlbnQ8MCkmJnIoZSx0KT49MDtpZihfPXQrMSxlLmlzRW1wdHkoXykmJisrXz5uKXJldHVybiExO2lmKGUudFNoaWZ0W19dPGUuYmxrSW5kZW50KXJldHVybiExO2lmKChpPXIoZSxfKSk8MClyZXR1cm4hMTtpZihlLmxldmVsPj1lLm9wdGlvbnMubWF4TmVzdGluZylyZXR1cm4hMTtkPWUudG9rZW5zLmxlbmd0aCxlLnRva2Vucy5wdXNoKHt0eXBlOiJkbF9vcGVuIixsaW5lczpjPVt0LDBdLGxldmVsOmUubGV2ZWwrK30pLGw9dCxhPV87ZTpmb3IoOzspe2ZvcihFPSEwLGI9ITEsZS50b2tlbnMucHVzaCh7dHlwZToiZHRfb3BlbiIsbGluZXM6W2wsbF0sbGV2ZWw6ZS5sZXZlbCsrfSksZS50b2tlbnMucHVzaCh7dHlwZToiaW5saW5lIixjb250ZW50OmUuZ2V0TGluZXMobCxsKzEsZS5ibGtJbmRlbnQsITEpLnRyaW0oKSxsZXZlbDplLmxldmVsKzEsbGluZXM6W2wsbF0sY2hpbGRyZW46W119KSxlLnRva2Vucy5wdXNoKHt0eXBlOiJkdF9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSk7Oyl7aWYoZS50b2tlbnMucHVzaCh7dHlwZToiZGRfb3BlbiIsbGluZXM6dT1bXywwXSxsZXZlbDplLmxldmVsKyt9KSxnPWUudGlnaHQsZj1lLmRkSW5kZW50LHA9ZS5ibGtJbmRlbnQsaD1lLnRTaGlmdFthXSxtPWUucGFyZW50VHlwZSxlLmJsa0luZGVudD1lLmRkSW5kZW50PWUudFNoaWZ0W2FdKzIsZS50U2hpZnRbYV09aS1lLmJNYXJrc1thXSxlLnRpZ2h0PSEwLGUucGFyZW50VHlwZT0iZGVmbGlzdCIsZS5wYXJzZXIudG9rZW5pemUoZSxhLG4sITApLGUudGlnaHQmJiFifHwoRT0hMSksYj1lLmxpbmUtYT4xJiZlLmlzRW1wdHkoZS5saW5lLTEpLGUudFNoaWZ0W2FdPWgsZS50aWdodD1nLGUucGFyZW50VHlwZT1tLGUuYmxrSW5kZW50PXAsZS5kZEluZGVudD1mLGUudG9rZW5zLnB1c2goe3R5cGU6ImRkX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KSx1WzFdPV89ZS5saW5lLF8+PW4pYnJlYWsgZTtpZihlLnRTaGlmdFtfXTxlLmJsa0luZGVudClicmVhayBlO2lmKChpPXIoZSxfKSk8MClicmVhazthPV99aWYoXz49bilicmVhaztpZihsPV8sZS5pc0VtcHR5KGwpKWJyZWFrO2lmKGUudFNoaWZ0W2xdPGUuYmxrSW5kZW50KWJyZWFrO2lmKChhPWwrMSk+PW4pYnJlYWs7aWYoZS5pc0VtcHR5KGEpJiZhKyssYT49bilicmVhaztpZihlLnRTaGlmdFthXTxlLmJsa0luZGVudClicmVhaztpZigoaT1yKGUsYSkpPDApYnJlYWt9cmV0dXJuIGUudG9rZW5zLnB1c2goe3R5cGU6ImRsX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KSxjWzFdPV8sZS5saW5lPV8sRSYmbyhlLGQpLCEwfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2ZlbmNlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scyxpLGEsbCx1PSExLGM9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sZD1lLmVNYXJrc1t0XTtpZihjKzM+ZClyZXR1cm4hMTtpZigxMjYhPT0obz1lLnNyYy5jaGFyQ29kZUF0KGMpKSYmOTYhPT1vKXJldHVybiExO2lmKGw9YyxjPWUuc2tpcENoYXJzKGMsbyksKHM9Yy1sKTwzKXJldHVybiExO2lmKGk9ZS5zcmMuc2xpY2UoYyxkKS50cmltKCksaS5pbmRleE9mKCJgIik+PTApcmV0dXJuITE7aWYocilyZXR1cm4hMDtmb3IoYT10OyEoKythPj1uKSYmKGM9bD1lLmJNYXJrc1thXStlLnRTaGlmdFthXSxkPWUuZU1hcmtzW2FdLCEoYzxkJiZlLnRTaGlmdFthXTxlLmJsa0luZGVudCkpOylpZihlLnNyYy5jaGFyQ29kZUF0KGMpPT09byYmIShlLnRTaGlmdFthXS1lLmJsa0luZGVudD49NHx8KGM9ZS5za2lwQ2hhcnMoYyxvKSktbDxzfHwoYz1lLnNraXBTcGFjZXMoYykpPGQpKXt1PSEwO2JyZWFrfXJldHVybiBzPWUudFNoaWZ0W3RdLGUubGluZT1hKyh1PzE6MCksZS50b2tlbnMucHVzaCh7dHlwZToiZmVuY2UiLHBhcmFtczppLGNvbnRlbnQ6ZS5nZXRMaW5lcyh0KzEsYSxzLCEwKSxsaW5lczpbdCxlLmxpbmVdLGxldmVsOmUubGV2ZWx9KSwhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9mb290bm90ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8scyxpLGEsbCx1PWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGM9ZS5lTWFya3NbdF07aWYodSs0PmMpcmV0dXJuITE7aWYoOTEhPT1lLnNyYy5jaGFyQ29kZUF0KHUpKXJldHVybiExO2lmKDk0IT09ZS5zcmMuY2hhckNvZGVBdCh1KzEpKXJldHVybiExO2lmKGUubGV2ZWw+PWUub3B0aW9ucy5tYXhOZXN0aW5nKXJldHVybiExO2ZvcihhPXUrMjthPGM7YSsrKXtpZigzMj09PWUuc3JjLmNoYXJDb2RlQXQoYSkpcmV0dXJuITE7aWYoOTM9PT1lLnNyYy5jaGFyQ29kZUF0KGEpKWJyZWFrfXJldHVybiBhIT09dSsyJiYoIShhKzE+PWN8fDU4IT09ZS5zcmMuY2hhckNvZGVBdCgrK2EpKSYmKCEhcnx8KGErKyxlLmVudi5mb290bm90ZXN8fChlLmVudi5mb290bm90ZXM9e30pLGUuZW52LmZvb3Rub3Rlcy5yZWZzfHwoZS5lbnYuZm9vdG5vdGVzLnJlZnM9e30pLGw9ZS5zcmMuc2xpY2UodSsyLGEtMiksZS5lbnYuZm9vdG5vdGVzLnJlZnNbIjoiK2xdPS0xLGUudG9rZW5zLnB1c2goe3R5cGU6ImZvb3Rub3RlX3JlZmVyZW5jZV9vcGVuIixsYWJlbDpsLGxldmVsOmUubGV2ZWwrK30pLG89ZS5iTWFya3NbdF0scz1lLnRTaGlmdFt0XSxpPWUucGFyZW50VHlwZSxlLnRTaGlmdFt0XT1lLnNraXBTcGFjZXMoYSktYSxlLmJNYXJrc1t0XT1hLGUuYmxrSW5kZW50Kz00LGUucGFyZW50VHlwZT0iZm9vdG5vdGUiLGUudFNoaWZ0W3RdPGUuYmxrSW5kZW50JiYoZS50U2hpZnRbdF0rPWUuYmxrSW5kZW50LGUuYk1hcmtzW3RdLT1lLmJsa0luZGVudCksZS5wYXJzZXIudG9rZW5pemUoZSx0LG4sITApLGUucGFyZW50VHlwZT1pLGUuYmxrSW5kZW50LT00LGUudFNoaWZ0W3RdPXMsZS5iTWFya3NbdF09byxlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9yZWZlcmVuY2VfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pLCEwKSkpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2hlYWRpbmcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLHMsaSxhPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLGw9ZS5lTWFya3NbdF07aWYoYT49bClyZXR1cm4hMTtpZigzNSE9PShvPWUuc3JjLmNoYXJDb2RlQXQoYSkpfHxhPj1sKXJldHVybiExO2ZvcihzPTEsbz1lLnNyYy5jaGFyQ29kZUF0KCsrYSk7MzU9PT1vJiZhPGwmJnM8PTY7KXMrKyxvPWUuc3JjLmNoYXJDb2RlQXQoKythKTtyZXR1cm4hKHM+Nnx8YTxsJiYzMiE9PW8pJiYoISFyfHwobD1lLnNraXBDaGFyc0JhY2sobCwzMixhKSxpPWUuc2tpcENoYXJzQmFjayhsLDM1LGEpLGk+YSYmMzI9PT1lLnNyYy5jaGFyQ29kZUF0KGktMSkmJihsPWkpLGUubGluZT10KzEsZS50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZ19vcGVuIixoTGV2ZWw6cyxsaW5lczpbdCxlLmxpbmVdLGxldmVsOmUubGV2ZWx9KSxhPGwmJmUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDplLnNyYy5zbGljZShhLGwpLnRyaW0oKSxsZXZlbDplLmxldmVsKzEsbGluZXM6W3QsZS5saW5lXSxjaGlsZHJlbjpbXX0pLGUudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmdfY2xvc2UiLGhMZXZlbDpzLGxldmVsOmUubGV2ZWx9KSwhMCkpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2hyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxzLGksYT1lLmJNYXJrc1t0XSxsPWUuZU1hcmtzW3RdO2lmKChhKz1lLnRTaGlmdFt0XSk+bClyZXR1cm4hMTtpZig0MiE9PShvPWUuc3JjLmNoYXJDb2RlQXQoYSsrKSkmJjQ1IT09byYmOTUhPT1vKXJldHVybiExO2ZvcihzPTE7YTxsOyl7aWYoKGk9ZS5zcmMuY2hhckNvZGVBdChhKyspKSE9PW8mJjMyIT09aSlyZXR1cm4hMTtpPT09byYmcysrfXJldHVybiEoczwzKSYmKCEhcnx8KGUubGluZT10KzEsZS50b2tlbnMucHVzaCh7dHlwZToiaHIiLGxpbmVzOlt0LGUubGluZV0sbGV2ZWw6ZS5sZXZlbH0pLCEwKSl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svaHRtbGJsb2NrLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9MzJ8ZTtyZXR1cm4gdD49OTcmJnQ8PTEyMn12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vaHRtbF9ibG9ja3MuanMiKSxzPS9ePChbYS16QS1aXXsxLDE1fSlbXHNcLz5dLyxpPS9ePFwvKFthLXpBLVpdezEsMTV9KVtccz5dLztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGwsdSxjLGQ9ZS5iTWFya3NbdF0sXz1lLmVNYXJrc1t0XSxwPWUudFNoaWZ0W3RdO2lmKGQrPXAsIWUub3B0aW9ucy5odG1sKXJldHVybiExO2lmKHA+M3x8ZCsyPj1fKXJldHVybiExO2lmKDYwIT09ZS5zcmMuY2hhckNvZGVBdChkKSlyZXR1cm4hMTtpZigzMz09PShsPWUuc3JjLmNoYXJDb2RlQXQoZCsxKSl8fDYzPT09bCl7aWYoYSlyZXR1cm4hMH1lbHNle2lmKDQ3IT09bCYmIXIobCkpcmV0dXJuITE7aWYoNDc9PT1sKXtpZighKHU9ZS5zcmMuc2xpY2UoZCxfKS5tYXRjaChpKSkpcmV0dXJuITF9ZWxzZSBpZighKHU9ZS5zcmMuc2xpY2UoZCxfKS5tYXRjaChzKSkpcmV0dXJuITE7aWYoITAhPT1vW3VbMV0udG9Mb3dlckNhc2UoKV0pcmV0dXJuITE7aWYoYSlyZXR1cm4hMH1mb3IoYz10KzE7YzxlLmxpbmVNYXgmJiFlLmlzRW1wdHkoYyk7KWMrKztyZXR1cm4gZS5saW5lPWMsZS50b2tlbnMucHVzaCh7dHlwZToiaHRtbGJsb2NrIixsZXZlbDplLmxldmVsLGxpbmVzOlt0LGUubGluZV0sY29udGVudDplLmdldExpbmVzKHQsYywwLCEwKX0pLCEwfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2Jsb2NrL2xoZWFkaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzLGk9dCsxO3JldHVybiEoaT49bikmJighKGUudFNoaWZ0W2ldPGUuYmxrSW5kZW50KSYmKCEoZS50U2hpZnRbaV0tZS5ibGtJbmRlbnQ+MykmJihvPWUuYk1hcmtzW2ldK2UudFNoaWZ0W2ldLHM9ZS5lTWFya3NbaV0sIShvPj1zKSYmKCg0NT09PShyPWUuc3JjLmNoYXJDb2RlQXQobykpfHw2MT09PXIpJiYobz1lLnNraXBDaGFycyhvLHIpLCEoKG89ZS5za2lwU3BhY2VzKG8pKTxzKSYmKG89ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sZS5saW5lPWkrMSxlLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nX29wZW4iLGhMZXZlbDo2MT09PXI/MToyLGxpbmVzOlt0LGUubGluZV0sbGV2ZWw6ZS5sZXZlbH0pLGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDplLnNyYy5zbGljZShvLGUuZU1hcmtzW3RdKS50cmltKCksbGV2ZWw6ZS5sZXZlbCsxLGxpbmVzOlt0LGUubGluZS0xXSxjaGlsZHJlbjpbXX0pLGUudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmdfY2xvc2UiLGhMZXZlbDo2MT09PXI/MToyLGxldmVsOmUubGV2ZWx9KSwhMCkpKSkpKX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9saXN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbixyLG87cmV0dXJuIHI9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sbz1lLmVNYXJrc1t0XSxyPj1vPy0xOihuPWUuc3JjLmNoYXJDb2RlQXQocisrKSw0MiE9PW4mJjQ1IT09biYmNDMhPT1uPy0xOnI8byYmMzIhPT1lLnNyYy5jaGFyQ29kZUF0KHIpPy0xOnIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbixyPWUuYk1hcmtzW3RdK2UudFNoaWZ0W3RdLG89ZS5lTWFya3NbdF07aWYocisxPj1vKXJldHVybi0xO2lmKChuPWUuc3JjLmNoYXJDb2RlQXQocisrKSk8NDh8fG4+NTcpcmV0dXJuLTE7Zm9yKDs7KXtpZihyPj1vKXJldHVybi0xO2lmKCEoKG49ZS5zcmMuY2hhckNvZGVBdChyKyspKT49NDgmJm48PTU3KSl7aWYoNDE9PT1ufHw0Nj09PW4pYnJlYWs7cmV0dXJuLTF9fXJldHVybiByPG8mJjMyIT09ZS5zcmMuY2hhckNvZGVBdChyKT8tMTpyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbixyLG89ZS5sZXZlbCsyO2ZvcihuPXQrMixyPWUudG9rZW5zLmxlbmd0aC0yO248cjtuKyspZS50b2tlbnNbbl0ubGV2ZWw9PT1vJiYicGFyYWdyYXBoX29wZW4iPT09ZS50b2tlbnNbbl0udHlwZSYmKGUudG9rZW5zW24rMl0udGlnaHQ9ITAsZS50b2tlbnNbbl0udGlnaHQ9ITAsbis9Mil9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBhLGwsdSxjLGQsXyxwLGYsbSxoLGcsYixFLHksdixULEEsQyxPLFMsUixqLHg9ITA7aWYoKGY9byhlLHQpKT49MClFPSEwO2Vsc2V7aWYoISgoZj1yKGUsdCkpPj0wKSlyZXR1cm4hMTtFPSExfWlmKGUubGV2ZWw+PWUub3B0aW9ucy5tYXhOZXN0aW5nKXJldHVybiExO2lmKGI9ZS5zcmMuY2hhckNvZGVBdChmLTEpLGkpcmV0dXJuITA7Zm9yKHY9ZS50b2tlbnMubGVuZ3RoLEU/KHA9ZS5iTWFya3NbdF0rZS50U2hpZnRbdF0sZz1OdW1iZXIoZS5zcmMuc3Vic3RyKHAsZi1wLTEpKSxlLnRva2Vucy5wdXNoKHt0eXBlOiJvcmRlcmVkX2xpc3Rfb3BlbiIsb3JkZXI6ZyxsaW5lczpBPVt0LDBdLGxldmVsOmUubGV2ZWwrK30pKTplLnRva2Vucy5wdXNoKHt0eXBlOiJidWxsZXRfbGlzdF9vcGVuIixsaW5lczpBPVt0LDBdLGxldmVsOmUubGV2ZWwrK30pLGE9dCxUPSExLE89ZS5wYXJzZXIucnVsZXIuZ2V0UnVsZXMoImxpc3QiKTshKCEoYTxuKXx8KHk9ZS5za2lwU3BhY2VzKGYpLG09ZS5lTWFya3NbYV0saD15Pj1tPzE6eS1mLGg+NCYmKGg9MSksaDwxJiYoaD0xKSxsPWYtZS5iTWFya3NbYV0raCxlLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fb3BlbiIsbGluZXM6Qz1bdCwwXSxsZXZlbDplLmxldmVsKyt9KSxjPWUuYmxrSW5kZW50LGQ9ZS50aWdodCx1PWUudFNoaWZ0W3RdLF89ZS5wYXJlbnRUeXBlLGUudFNoaWZ0W3RdPXktZS5iTWFya3NbdF0sZS5ibGtJbmRlbnQ9bCxlLnRpZ2h0PSEwLGUucGFyZW50VHlwZT0ibGlzdCIsZS5wYXJzZXIudG9rZW5pemUoZSx0LG4sITApLGUudGlnaHQmJiFUfHwoeD0hMSksVD1lLmxpbmUtdD4xJiZlLmlzRW1wdHkoZS5saW5lLTEpLGUuYmxrSW5kZW50PWMsZS50U2hpZnRbdF09dSxlLnRpZ2h0PWQsZS5wYXJlbnRUeXBlPV8sZS50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KSxhPXQ9ZS5saW5lLENbMV09YSx5PWUuYk1hcmtzW3RdLGE+PW4pfHxlLmlzRW1wdHkoYSl8fGUudFNoaWZ0W2FdPGUuYmxrSW5kZW50KTspe2ZvcihqPSExLFM9MCxSPU8ubGVuZ3RoO1M8UjtTKyspaWYoT1tTXShlLGEsbiwhMCkpe2o9ITA7YnJlYWt9aWYoailicmVhaztpZihFKXtpZigoZj1vKGUsYSkpPDApYnJlYWt9ZWxzZSBpZigoZj1yKGUsYSkpPDApYnJlYWs7aWYoYiE9PWUuc3JjLmNoYXJDb2RlQXQoZi0xKSlicmVha31yZXR1cm4gZS50b2tlbnMucHVzaCh7dHlwZTpFPyJvcmRlcmVkX2xpc3RfY2xvc2UiOiJidWxsZXRfbGlzdF9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSksQVsxXT1hLGUubGluZT1hLHgmJnMoZSx2KSwhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9wYXJhZ3JhcGguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhLGw9dCsxO2lmKG49ZS5saW5lTWF4LGw8biYmIWUuaXNFbXB0eShsKSlmb3IoYT1lLnBhcnNlci5ydWxlci5nZXRSdWxlcygicGFyYWdyYXBoIik7bDxuJiYhZS5pc0VtcHR5KGwpO2wrKylpZighKGUudFNoaWZ0W2xdLWUuYmxrSW5kZW50PjMpKXtmb3Iobz0hMSxzPTAsaT1hLmxlbmd0aDtzPGk7cysrKWlmKGFbc10oZSxsLG4sITApKXtvPSEwO2JyZWFrfWlmKG8pYnJlYWt9cmV0dXJuIHI9ZS5nZXRMaW5lcyh0LGwsZS5ibGtJbmRlbnQsITEpLnRyaW0oKSxlLmxpbmU9bCxyLmxlbmd0aCYmKGUudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaF9vcGVuIix0aWdodDohMSxsaW5lczpbdCxlLmxpbmVdLGxldmVsOmUubGV2ZWx9KSxlLnRva2Vucy5wdXNoKHt0eXBlOiJpbmxpbmUiLGNvbnRlbnQ6cixsZXZlbDplLmxldmVsKzEsbGluZXM6W3QsZS5saW5lXSxjaGlsZHJlbjpbXX0pLGUudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaF9jbG9zZSIsdGlnaHQ6ITEsbGV2ZWw6ZS5sZXZlbH0pKSwhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19ibG9jay9zdGF0ZV9ibG9jay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7dmFyIHMsaSxhLGwsdSxjLGQ7Zm9yKHRoaXMuc3JjPWUsdGhpcy5wYXJzZXI9dCx0aGlzLm9wdGlvbnM9bix0aGlzLmVudj1yLHRoaXMudG9rZW5zPW8sdGhpcy5iTWFya3M9W10sdGhpcy5lTWFya3M9W10sdGhpcy50U2hpZnQ9W10sdGhpcy5ibGtJbmRlbnQ9MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVNYXg9MCx0aGlzLnRpZ2h0PSExLHRoaXMucGFyZW50VHlwZT0icm9vdCIsdGhpcy5kZEluZGVudD0tMSx0aGlzLmxldmVsPTAsdGhpcy5yZXN1bHQ9IiIsaT10aGlzLnNyYyxjPTAsZD0hMSxhPWw9Yz0wLHU9aS5sZW5ndGg7bDx1O2wrKyl7aWYocz1pLmNoYXJDb2RlQXQobCksIWQpe2lmKDMyPT09cyl7YysrO2NvbnRpbnVlfWQ9ITB9MTAhPT1zJiZsIT09dS0xfHwoMTAhPT1zJiZsKyssdGhpcy5iTWFya3MucHVzaChhKSx0aGlzLmVNYXJrcy5wdXNoKGwpLHRoaXMudFNoaWZ0LnB1c2goYyksZD0hMSxjPTAsYT1sKzEpfXRoaXMuYk1hcmtzLnB1c2goaS5sZW5ndGgpLHRoaXMuZU1hcmtzLnB1c2goaS5sZW5ndGgpLHRoaXMudFNoaWZ0LnB1c2goMCksdGhpcy5saW5lTWF4PXRoaXMuYk1hcmtzLmxlbmd0aC0xfXIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYk1hcmtzW2VdK3RoaXMudFNoaWZ0W2VdPj10aGlzLmVNYXJrc1tlXX0sci5wcm90b3R5cGUuc2tpcEVtcHR5TGluZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubGluZU1heDtlPHQmJiEodGhpcy5iTWFya3NbZV0rdGhpcy50U2hpZnRbZV08dGhpcy5lTWFya3NbZV0pO2UrKyk7cmV0dXJuIGV9LHIucHJvdG90eXBlLnNraXBTcGFjZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3JjLmxlbmd0aDtlPHQmJjMyPT09dGhpcy5zcmMuY2hhckNvZGVBdChlKTtlKyspO3JldHVybiBlfSxyLnByb3RvdHlwZS5za2lwQ2hhcnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5zcmMubGVuZ3RoO2U8biYmdGhpcy5zcmMuY2hhckNvZGVBdChlKT09PXQ7ZSsrKTtyZXR1cm4gZX0sci5wcm90b3R5cGUuc2tpcENoYXJzQmFjaz1mdW5jdGlvbihlLHQsbil7aWYoZTw9bilyZXR1cm4gZTtmb3IoO2U+bjspaWYodCE9PXRoaXMuc3JjLmNoYXJDb2RlQXQoLS1lKSlyZXR1cm4gZSsxO3JldHVybiBlfSxyLnByb3RvdHlwZS5nZXRMaW5lcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxzLGksYSxsLHU9ZTtpZihlPj10KXJldHVybiIiO2lmKHUrMT09PXQpcmV0dXJuIHM9dGhpcy5iTWFya3NbdV0rTWF0aC5taW4odGhpcy50U2hpZnRbdV0sbiksaT1yP3RoaXMuZU1hcmtzW3VdKzE6dGhpcy5lTWFya3NbdV0sdGhpcy5zcmMuc2xpY2UocyxpKTtmb3IoYT1uZXcgQXJyYXkodC1lKSxvPTA7dTx0O3UrKyxvKyspbD10aGlzLnRTaGlmdFt1XSxsPm4mJihsPW4pLGw8MCYmKGw9MCkscz10aGlzLmJNYXJrc1t1XStsLGk9dSsxPHR8fHI/dGhpcy5lTWFya3NbdV0rMTp0aGlzLmVNYXJrc1t1XSxhW29dPXRoaXMuc3JjLnNsaWNlKHMsaSk7cmV0dXJuIGEuam9pbigiIil9LGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfYmxvY2svdGFibGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuYk1hcmtzW3RdK2UuYmxrSW5kZW50LHI9ZS5lTWFya3NbdF07cmV0dXJuIGUuc3JjLnN1YnN0cihuLHItbil9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBzLGksYSxsLHUsYyxkLF8scCxmLG07aWYodCsyPm4pcmV0dXJuITE7aWYodT10KzEsZS50U2hpZnRbdV08ZS5ibGtJbmRlbnQpcmV0dXJuITE7aWYoKGE9ZS5iTWFya3NbdV0rZS50U2hpZnRbdV0pPj1lLmVNYXJrc1t1XSlyZXR1cm4hMTtpZigxMjQhPT0ocz1lLnNyYy5jaGFyQ29kZUF0KGEpKSYmNDUhPT1zJiY1OCE9PXMpcmV0dXJuITE7aWYoaT1yKGUsdCsxKSwhL15bLTp8IF0rJC8udGVzdChpKSlyZXR1cm4hMTtpZigoYz1pLnNwbGl0KCJ8IikpPD0yKXJldHVybiExO2ZvcihfPVtdLGw9MDtsPGMubGVuZ3RoO2wrKyl7aWYoIShwPWNbbF0udHJpbSgpKSl7aWYoMD09PWx8fGw9PT1jLmxlbmd0aC0xKWNvbnRpbnVlO3JldHVybiExfWlmKCEvXjo/LSs6PyQvLnRlc3QocCkpcmV0dXJuITE7NTg9PT1wLmNoYXJDb2RlQXQocC5sZW5ndGgtMSk/Xy5wdXNoKDU4PT09cC5jaGFyQ29kZUF0KDApPyJjZW50ZXIiOiJyaWdodCIpOjU4PT09cC5jaGFyQ29kZUF0KDApP18ucHVzaCgibGVmdCIpOl8ucHVzaCgiIil9aWYoaT1yKGUsdCkudHJpbSgpLC0xPT09aS5pbmRleE9mKCJ8IikpcmV0dXJuITE7aWYoYz1pLnJlcGxhY2UoL15cfHxcfCQvZywiIikuc3BsaXQoInwiKSxfLmxlbmd0aCE9PWMubGVuZ3RoKXJldHVybiExO2lmKG8pcmV0dXJuITA7Zm9yKGUudG9rZW5zLnB1c2goe3R5cGU6InRhYmxlX29wZW4iLGxpbmVzOmY9W3QsMF0sbGV2ZWw6ZS5sZXZlbCsrfSksZS50b2tlbnMucHVzaCh7dHlwZToidGhlYWRfb3BlbiIsbGluZXM6W3QsdCsxXSxsZXZlbDplLmxldmVsKyt9KSxlLnRva2Vucy5wdXNoKHt0eXBlOiJ0cl9vcGVuIixsaW5lczpbdCx0KzFdLGxldmVsOmUubGV2ZWwrK30pLGw9MDtsPGMubGVuZ3RoO2wrKyllLnRva2Vucy5wdXNoKHt0eXBlOiJ0aF9vcGVuIixhbGlnbjpfW2xdLGxpbmVzOlt0LHQrMV0sbGV2ZWw6ZS5sZXZlbCsrfSksZS50b2tlbnMucHVzaCh7dHlwZToiaW5saW5lIixjb250ZW50OmNbbF0udHJpbSgpLGxpbmVzOlt0LHQrMV0sbGV2ZWw6ZS5sZXZlbCxjaGlsZHJlbjpbXX0pLGUudG9rZW5zLnB1c2goe3R5cGU6InRoX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KTtmb3IoZS50b2tlbnMucHVzaCh7dHlwZToidHJfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pLGUudG9rZW5zLnB1c2goe3R5cGU6InRoZWFkX2Nsb3NlIixsZXZlbDotLWUubGV2ZWx9KSxlLnRva2Vucy5wdXNoKHt0eXBlOiJ0Ym9keV9vcGVuIixsaW5lczptPVt0KzIsMF0sbGV2ZWw6ZS5sZXZlbCsrfSksdT10KzI7dTxuJiYhKGUudFNoaWZ0W3VdPGUuYmxrSW5kZW50KSYmKGk9cihlLHUpLnRyaW0oKSwtMSE9PWkuaW5kZXhPZigifCIpKTt1Kyspe2ZvcihjPWkucmVwbGFjZSgvXlx8fFx8JC9nLCIiKS5zcGxpdCgifCIpLGUudG9rZW5zLnB1c2goe3R5cGU6InRyX29wZW4iLGxldmVsOmUubGV2ZWwrK30pLGw9MDtsPGMubGVuZ3RoO2wrKyllLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZF9vcGVuIixhbGlnbjpfW2xdLGxldmVsOmUubGV2ZWwrK30pLGQ9Y1tsXS5zdWJzdHJpbmcoMTI0PT09Y1tsXS5jaGFyQ29kZUF0KDApPzE6MCwxMjQ9PT1jW2xdLmNoYXJDb2RlQXQoY1tsXS5sZW5ndGgtMSk/Y1tsXS5sZW5ndGgtMTpjW2xdLmxlbmd0aCkudHJpbSgpLGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpkLGxldmVsOmUubGV2ZWwsY2hpbGRyZW46W119KSxlLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZF9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSk7ZS50b2tlbnMucHVzaCh7dHlwZToidHJfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pfXJldHVybiBlLnRva2Vucy5wdXNoKHt0eXBlOiJ0Ym9keV9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSksZS50b2tlbnMucHVzaCh7dHlwZToidGFibGVfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pLGZbMV09bVsxXT11LGUubGluZT11LCEwfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvYWJici5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBpLGEsbCx1LGMsZDtpZig0MiE9PWUuY2hhckNvZGVBdCgwKSlyZXR1cm4tMTtpZig5MSE9PWUuY2hhckNvZGVBdCgxKSlyZXR1cm4tMTtpZigtMT09PWUuaW5kZXhPZigiXToiKSlyZXR1cm4tMTtpZihpPW5ldyBvKGUsdCxuLHIsW10pLChhPXMoaSwxKSk8MHx8NTghPT1lLmNoYXJDb2RlQXQoYSsxKSlyZXR1cm4tMTtmb3IodT1pLnBvc01heCxsPWErMjtsPHUmJjEwIT09aS5zcmMuY2hhckNvZGVBdChsKTtsKyspO3JldHVybiBjPWUuc2xpY2UoMixhKSxkPWUuc2xpY2UoYSsyLGwpLnRyaW0oKSwwPT09ZC5sZW5ndGg/LTE6KHIuYWJicmV2aWF0aW9uc3x8KHIuYWJicmV2aWF0aW9ucz17fSksdm9pZCAwPT09ci5hYmJyZXZpYXRpb25zWyI6IitjXSYmKHIuYWJicmV2aWF0aW9uc1siOiIrY109ZCksbCl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL3N0YXRlX2lubGluZS5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9wYXJzZV9saW5rX2xhYmVsLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxzLGk9ZS50b2tlbnM7aWYoIWUuaW5saW5lTW9kZSlmb3IodD0xLG49aS5sZW5ndGgtMTt0PG47dCsrKWlmKCJwYXJhZ3JhcGhfb3BlbiI9PT1pW3QtMV0udHlwZSYmImlubGluZSI9PT1pW3RdLnR5cGUmJiJwYXJhZ3JhcGhfY2xvc2UiPT09aVt0KzFdLnR5cGUpe2ZvcihvPWlbdF0uY29udGVudDtvLmxlbmd0aCYmISgocz1yKG8sZS5pbmxpbmUsZS5vcHRpb25zLGUuZW52KSk8MCk7KW89by5zbGljZShzKS50cmltKCk7aVt0XS5jb250ZW50PW8sby5sZW5ndGh8fChpW3QtMV0udGlnaHQ9ITAsaVt0KzFdLnRpZ2h0PSEwKX19fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9hYmJyMi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbLSgpXFtcXXt9Kz8qLiRcXnwsOiM8IVxcXSkvZywiXFwkMSIpfXZhciBvPSIgXG4oKVtdJ1wiLiwhPy0iO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHMsaSxhLGwsdSxjLGQsXyxwLGYsbT1lLnRva2VucztpZihlLmVudi5hYmJyZXZpYXRpb25zKWZvcihlLmVudi5hYmJyUmVnRXhwfHwoZj0iKF58WyIrby5zcGxpdCgiIikubWFwKHIpLmpvaW4oIiIpKyJdKSgiK09iamVjdC5rZXlzKGUuZW52LmFiYnJldmlhdGlvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJzdHIoMSl9KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSkubWFwKHIpLmpvaW4oInwiKSsiKSgkfFsiK28uc3BsaXQoIiIpLm1hcChyKS5qb2luKCIiKSsiXSkiLGUuZW52LmFiYnJSZWdFeHA9bmV3IFJlZ0V4cChmLCJnIikpLF89ZS5lbnYuYWJiclJlZ0V4cCxuPTAscz1tLmxlbmd0aDtuPHM7bisrKWlmKCJpbmxpbmUiPT09bVtuXS50eXBlKWZvcihpPW1bbl0uY2hpbGRyZW4sdD1pLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKGE9aVt0XSwidGV4dCI9PT1hLnR5cGUpe2ZvcihjPTAsbD1hLmNvbnRlbnQsXy5sYXN0SW5kZXg9MCxkPWEubGV2ZWwsdT1bXTtwPV8uZXhlYyhsKTspXy5sYXN0SW5kZXg+YyYmdS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50Omwuc2xpY2UoYyxwLmluZGV4K3BbMV0ubGVuZ3RoKSxsZXZlbDpkfSksdS5wdXNoKHt0eXBlOiJhYmJyX29wZW4iLHRpdGxlOmUuZW52LmFiYnJldmlhdGlvbnNbIjoiK3BbMl1dLGxldmVsOmQrK30pLHUucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpwWzJdLGxldmVsOmR9KSx1LnB1c2goe3R5cGU6ImFiYnJfY2xvc2UiLGxldmVsOi0tZH0pLGM9Xy5sYXN0SW5kZXgtcFszXS5sZW5ndGg7dS5sZW5ndGgmJihjPGwubGVuZ3RoJiZ1LnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6bC5zbGljZShjKSxsZXZlbDpkfSksbVtuXS5jaGlsZHJlbj1pPVtdLmNvbmNhdChpLnNsaWNlKDAsdCksdSxpLnNsaWNlKHQrMSkpKX19fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9ibG9jay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZS5pbmxpbmVNb2RlP2UudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDplLnNyYy5yZXBsYWNlKC9cbi9nLCIgIikudHJpbSgpLGxldmVsOjAsbGluZXM6WzAsMV0sY2hpbGRyZW46W119KTplLmJsb2NrLnBhcnNlKGUuc3JjLGUub3B0aW9ucyxlLmVudixlLnRva2Vucyl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9mb290bm90ZV90YWlsLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYSxsLHUsYz0wLGQ9ITEsXz17fTtpZihlLmVudi5mb290bm90ZXMmJihlLnRva2Vucz1lLnRva2Vucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuImZvb3Rub3RlX3JlZmVyZW5jZV9vcGVuIj09PWUudHlwZT8oZD0hMCxsPVtdLHU9ZS5sYWJlbCwhMSk6ImZvb3Rub3RlX3JlZmVyZW5jZV9jbG9zZSI9PT1lLnR5cGU/KGQ9ITEsX1siOiIrdV09bCwhMSk6KGQmJmwucHVzaChlKSwhZCl9KSxlLmVudi5mb290bm90ZXMubGlzdCkpe2ZvcihpPWUuZW52LmZvb3Rub3Rlcy5saXN0LGUudG9rZW5zLnB1c2goe3R5cGU6ImZvb3Rub3RlX2Jsb2NrX29wZW4iLGxldmVsOmMrK30pLHQ9MCxuPWkubGVuZ3RoO3Q8bjt0Kyspe2ZvcihlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9vcGVuIixpZDp0LGxldmVsOmMrK30pLGlbdF0udG9rZW5zPyhhPVtdLGEucHVzaCh7dHlwZToicGFyYWdyYXBoX29wZW4iLHRpZ2h0OiExLGxldmVsOmMrK30pLGEucHVzaCh7dHlwZToiaW5saW5lIixjb250ZW50OiIiLGxldmVsOmMsY2hpbGRyZW46aVt0XS50b2tlbnN9KSxhLnB1c2goe3R5cGU6InBhcmFncmFwaF9jbG9zZSIsdGlnaHQ6ITEsbGV2ZWw6LS1jfSkpOmlbdF0ubGFiZWwmJihhPV9bIjoiK2lbdF0ubGFiZWxdKSxlLnRva2Vucz1lLnRva2Vucy5jb25jYXQoYSkscz0icGFyYWdyYXBoX2Nsb3NlIj09PWUudG9rZW5zW2UudG9rZW5zLmxlbmd0aC0xXS50eXBlP2UudG9rZW5zLnBvcCgpOm51bGwsbz1pW3RdLmNvdW50PjA/aVt0XS5jb3VudDoxLHI9MDtyPG87cisrKWUudG9rZW5zLnB1c2goe3R5cGU6ImZvb3Rub3RlX2FuY2hvciIsaWQ6dCxzdWJJZDpyLGxldmVsOmN9KTtzJiZlLnRva2Vucy5wdXNoKHMpLGUudG9rZW5zLnB1c2goe3R5cGU6ImZvb3Rub3RlX2Nsb3NlIixsZXZlbDotLWN9KX1lLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9ibG9ja19jbG9zZSIsbGV2ZWw6LS1jfSl9fX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvaW5saW5lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz1lLnRva2Vucztmb3Iobj0wLHI9by5sZW5ndGg7bjxyO24rKyl0PW9bbl0sImlubGluZSI9PT10LnR5cGUmJmUuaW5saW5lLnBhcnNlKHQuY29udGVudCxlLm9wdGlvbnMsZS5lbnYsdC5jaGlsZHJlbil9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9saW5raWZ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuL148YVs+XHNdL2kudGVzdChlKX1mdW5jdGlvbiBvKGUpe3JldHVybi9ePFwvYVxzKj4vaS50ZXN0KGUpfWZ1bmN0aW9uIHMoKXt2YXIgZT1bXSx0PW5ldyBpKHtzdHJpcFByZWZpeDohMSx1cmw6ITAsZW1haWw6ITAsdHdpdHRlcjohMSxyZXBsYWNlRm46ZnVuY3Rpb24odCxuKXtzd2l0Y2gobi5nZXRUeXBlKCkpe2Nhc2UidXJsIjplLnB1c2goe3RleHQ6bi5tYXRjaGVkVGV4dCx1cmw6bi5nZXRVcmwoKX0pO2JyZWFrO2Nhc2UiZW1haWwiOmUucHVzaCh7dGV4dDpuLm1hdGNoZWRUZXh0LHVybDoibWFpbHRvOiIrbi5nZXRFbWFpbCgpLnJlcGxhY2UoL15tYWlsdG86L2ksIiIpfSl9cmV0dXJuITF9fSk7cmV0dXJue2xpbmtzOmUsYXV0b2xpbmtlcjp0fX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9hdXRvbGlua2VyL2Rpc3QvQXV0b2xpbmtlci5qcyIpLGE9L3d3d3xAfFw6XC9cLy87ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4saSxsLHUsYyxkLF8scCxmLG0saCxnLGI9ZS50b2tlbnMsRT1udWxsO2lmKGUub3B0aW9ucy5saW5raWZ5KWZvcihuPTAsaT1iLmxlbmd0aDtuPGk7bisrKWlmKCJpbmxpbmUiPT09YltuXS50eXBlKWZvcihsPWJbbl0uY2hpbGRyZW4sbT0wLHQ9bC5sZW5ndGgtMTt0Pj0wO3QtLSlpZih1PWxbdF0sImxpbmtfY2xvc2UiIT09dS50eXBlKXtpZigiaHRtbHRhZyI9PT11LnR5cGUmJihyKHUuY29udGVudCkmJm0+MCYmbS0tLG8odS5jb250ZW50KSYmbSsrKSwhKG0+MCkmJiJ0ZXh0Ij09PXUudHlwZSYmYS50ZXN0KHUuY29udGVudCkpe2lmKEV8fChFPXMoKSxoPUUubGlua3MsZz1FLmF1dG9saW5rZXIpLGM9dS5jb250ZW50LGgubGVuZ3RoPTAsZy5saW5rKGMpLCFoLmxlbmd0aCljb250aW51ZTtmb3IoZD1bXSxmPXUubGV2ZWwsXz0wO188aC5sZW5ndGg7XysrKWUuaW5saW5lLnZhbGlkYXRlTGluayhoW19dLnVybCkmJihwPWMuaW5kZXhPZihoW19dLnRleHQpLHAmJihmPWYsZC5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmMuc2xpY2UoMCxwKSxsZXZlbDpmfSkpLGQucHVzaCh7dHlwZToibGlua19vcGVuIixocmVmOmhbX10udXJsLHRpdGxlOiIiLGxldmVsOmYrK30pLGQucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpoW19dLnRleHQsbGV2ZWw6Zn0pLGQucHVzaCh7dHlwZToibGlua19jbG9zZSIsbGV2ZWw6LS1mfSksYz1jLnNsaWNlKHAraFtfXS50ZXh0Lmxlbmd0aCkpO2MubGVuZ3RoJiZkLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6YyxsZXZlbDpmfSksYltuXS5jaGlsZHJlbj1sPVtdLmNvbmNhdChsLnNsaWNlKDAsdCksZCxsLnNsaWNlKHQrMSkpfX1lbHNlIGZvcih0LS07bFt0XS5sZXZlbCE9PXUubGV2ZWwmJiJsaW5rX29wZW4iIT09bFt0XS50eXBlOyl0LS19fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfY29yZS9yZWZlcmVuY2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIHUsYyxkLF8scCxmLG0saCxnO2lmKDkxIT09ZS5jaGFyQ29kZUF0KDApKXJldHVybi0xO2lmKC0xPT09ZS5pbmRleE9mKCJdOiIpKXJldHVybi0xO2lmKHU9bmV3IG8oZSx0LG4scixbXSksKGM9cyh1LDApKTwwfHw1OCE9PWUuY2hhckNvZGVBdChjKzEpKXJldHVybi0xO2ZvcihfPXUucG9zTWF4LGQ9YysyO2Q8XyYmKDMyPT09KHA9dS5zcmMuY2hhckNvZGVBdChkKSl8fDEwPT09cCk7ZCsrKTtpZighaSh1LGQpKXJldHVybi0xO2ZvcihtPXUubGlua0NvbnRlbnQsZD11LnBvcyxmPWQsZCs9MTtkPF8mJigzMj09PShwPXUuc3JjLmNoYXJDb2RlQXQoZCkpfHwxMD09PXApO2QrKyk7Zm9yKGQ8XyYmZiE9PWQmJmEodSxkKT8oaD11LmxpbmtDb250ZW50LGQ9dS5wb3MpOihoPSIiLGQ9Zik7ZDxfJiYzMj09PXUuc3JjLmNoYXJDb2RlQXQoZCk7KWQrKztyZXR1cm4gZDxfJiYxMCE9PXUuc3JjLmNoYXJDb2RlQXQoZCk/LTE6KGc9bChlLnNsaWNlKDEsYykpLHZvaWQgMD09PXIucmVmZXJlbmNlc1tnXSYmKHIucmVmZXJlbmNlc1tnXT17dGl0bGU6aCxocmVmOm19KSxkKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvc3RhdGVfaW5saW5lLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2hlbHBlcnMvcGFyc2VfbGlua19kZXN0aW5hdGlvbi5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9wYXJzZV9saW5rX3RpdGxlLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL25vcm1hbGl6ZV9yZWZlcmVuY2UuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixvLHMsaT1lLnRva2VucztpZihlLmVudi5yZWZlcmVuY2VzPWUuZW52LnJlZmVyZW5jZXN8fHt9LCFlLmlubGluZU1vZGUpZm9yKHQ9MSxuPWkubGVuZ3RoLTE7dDxuO3QrKylpZigiaW5saW5lIj09PWlbdF0udHlwZSYmInBhcmFncmFwaF9vcGVuIj09PWlbdC0xXS50eXBlJiYicGFyYWdyYXBoX2Nsb3NlIj09PWlbdCsxXS50eXBlKXtmb3Iobz1pW3RdLmNvbnRlbnQ7by5sZW5ndGgmJiEoKHM9cihvLGUuaW5saW5lLGUub3B0aW9ucyxlLmVudikpPDApOylvPW8uc2xpY2UocykudHJpbSgpO2lbdF0uY29udGVudD1vLG8ubGVuZ3RofHwoaVt0LTFdLnRpZ2h0PSEwLGlbdCsxXS50aWdodD0hMCl9fX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvcmVwbGFjZW1lbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuaW5kZXhPZigiKCIpPDA/ZTplLnJlcGxhY2UocyxmdW5jdGlvbihlLHQpe3JldHVybiBpW3QudG9Mb3dlckNhc2UoKV19KX12YXIgbz0vXCstfFwuXC58XD9cP1w/XD98ISEhIXwsLHwtLS8scz0vXCgoY3x0bXxyfHApXCkvZ2ksaT17YzoiwqkiLHI6IsKuIixwOiLCpyIsdG06IuKEoiJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHMsaSxhO2lmKGUub3B0aW9ucy50eXBvZ3JhcGhlcilmb3IoYT1lLnRva2Vucy5sZW5ndGgtMTthPj0wO2EtLSlpZigiaW5saW5lIj09PWUudG9rZW5zW2FdLnR5cGUpZm9yKGk9ZS50b2tlbnNbYV0uY2hpbGRyZW4sdD1pLmxlbmd0aC0xO3Q+PTA7dC0tKW49aVt0XSwidGV4dCI9PT1uLnR5cGUmJihzPW4uY29udGVudCxzPXIocyksby50ZXN0KHMpJiYocz1zLnJlcGxhY2UoL1wrLS9nLCLCsSIpLnJlcGxhY2UoL1wuezIsfS9nLCLigKYiKS5yZXBsYWNlKC8oWz8hXSnigKYvZywiJDEuLiIpLnJlcGxhY2UoLyhbPyFdKXs0LH0vZywiJDEkMSQxIikucmVwbGFjZSgvLHsyLH0vZywiLCIpLnJlcGxhY2UoLyhefFteLV0pLS0tKFteLV18JCkvZ20sIiQx4oCUJDIiKS5yZXBsYWNlKC8oXnxccyktLShcc3wkKS9nbSwiJDHigJMkMiIpLnJlcGxhY2UoLyhefFteLVxzXSktLShbXi1cc118JCkvZ20sIiQx4oCTJDIiKSksbi5jb250ZW50PXMpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2NvcmUvc21hcnRxdW90ZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiEodDwwfHx0Pj1lLmxlbmd0aCkmJiFhLnRlc3QoZVt0XSl9ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIGUuc3Vic3RyKDAsdCkrbitlLnN1YnN0cih0KzEpfXZhciBzPS9bJyJdLyxpPS9bJyJdL2csYT0vWy1ccygpXFtcXV0vO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGEsbCx1LGMsZCxfLHAsZixtLGgsZyxiLEUseSx2O2lmKGUub3B0aW9ucy50eXBvZ3JhcGhlcilmb3Iodj1bXSxFPWUudG9rZW5zLmxlbmd0aC0xO0U+PTA7RS0tKWlmKCJpbmxpbmUiPT09ZS50b2tlbnNbRV0udHlwZSlmb3IoeT1lLnRva2Vuc1tFXS5jaGlsZHJlbix2Lmxlbmd0aD0wLHQ9MDt0PHkubGVuZ3RoO3QrKylpZihuPXlbdF0sInRleHQiPT09bi50eXBlJiYhcy50ZXN0KG4udGV4dCkpe2ZvcihkPXlbdF0ubGV2ZWwsZz12Lmxlbmd0aC0xO2c+PTAmJiEodltnXS5sZXZlbDw9ZCk7Zy0tKTt2Lmxlbmd0aD1nKzEsYT1uLmNvbnRlbnQsdT0wLGM9YS5sZW5ndGg7ZTpmb3IoO3U8YyYmKGkubGFzdEluZGV4PXUsbD1pLmV4ZWMoYSkpOylpZihfPSFyKGEsbC5pbmRleC0xKSx1PWwuaW5kZXgrMSxiPSInIj09PWxbMF0sKHA9IXIoYSx1KSl8fF8pe2lmKG09IXAsaD0hXylmb3IoZz12Lmxlbmd0aC0xO2c+PTAmJihmPXZbZ10sISh2W2ddLmxldmVsPGQpKTtnLS0paWYoZi5zaW5nbGU9PT1iJiZ2W2ddLmxldmVsPT09ZCl7Zj12W2ddLGI/KHlbZi50b2tlbl0uY29udGVudD1vKHlbZi50b2tlbl0uY29udGVudCxmLnBvcyxlLm9wdGlvbnMucXVvdGVzWzJdKSxuLmNvbnRlbnQ9byhuLmNvbnRlbnQsbC5pbmRleCxlLm9wdGlvbnMucXVvdGVzWzNdKSk6KHlbZi50b2tlbl0uY29udGVudD1vKHlbZi50b2tlbl0uY29udGVudCxmLnBvcyxlLm9wdGlvbnMucXVvdGVzWzBdKSxuLmNvbnRlbnQ9byhuLmNvbnRlbnQsbC5pbmRleCxlLm9wdGlvbnMucXVvdGVzWzFdKSksdi5sZW5ndGg9Zztjb250aW51ZSBlfW0/di5wdXNoKHt0b2tlbjp0LHBvczpsLmluZGV4LHNpbmdsZTpiLGxldmVsOmR9KTpoJiZiJiYobi5jb250ZW50PW8obi5jb250ZW50LGwuaW5kZXgsIuKAmSIpKX1lbHNlIGImJihuLmNvbnRlbnQ9byhuLmNvbnRlbnQsbC5pbmRleCwi4oCZIikpfX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvYXV0b2xpbmsuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL3VybF9zY2hlbWFzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL25vcm1hbGl6ZV9saW5rLmpzIikscz0vXjwoW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSopPi8saT0vXjwoW2EtekEtWi5cLV17MSwyNX0pOihbXjw+XHgwMC1ceDIwXSopPi87ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYSxsLHUsYyxkPWUucG9zO3JldHVybiA2MD09PWUuc3JjLmNoYXJDb2RlQXQoZCkmJihuPWUuc3JjLnNsaWNlKGQpLCEobi5pbmRleE9mKCI+Iik8MCkmJigoYT1uLm1hdGNoKGkpKT8hKHIuaW5kZXhPZihhWzFdLnRvTG93ZXJDYXNlKCkpPDApJiYodT1hWzBdLnNsaWNlKDEsLTEpLGM9byh1KSwhIWUucGFyc2VyLnZhbGlkYXRlTGluayh1KSYmKHR8fChlLnB1c2goe3R5cGU6Imxpbmtfb3BlbiIsaHJlZjpjLGxldmVsOmUubGV2ZWx9KSxlLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6dSxsZXZlbDplLmxldmVsKzF9KSxlLnB1c2goe3R5cGU6ImxpbmtfY2xvc2UiLGxldmVsOmUubGV2ZWx9KSksZS5wb3MrPWFbMF0ubGVuZ3RoLCEwKSk6ISEobD1uLm1hdGNoKHMpKSYmKHU9bFswXS5zbGljZSgxLC0xKSxjPW8oIm1haWx0bzoiK3UpLCEhZS5wYXJzZXIudmFsaWRhdGVMaW5rKGMpJiYodHx8KGUucHVzaCh7dHlwZToibGlua19vcGVuIixocmVmOmMsbGV2ZWw6ZS5sZXZlbH0pLGUucHVzaCh7dHlwZToidGV4dCIsY29udGVudDp1LGxldmVsOmUubGV2ZWwrMX0pLGUucHVzaCh7dHlwZToibGlua19jbG9zZSIsbGV2ZWw6ZS5sZXZlbH0pKSxlLnBvcys9bFswXS5sZW5ndGgsITApKSkpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9iYWNrdGlja3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhPWUucG9zO2lmKDk2IT09ZS5zcmMuY2hhckNvZGVBdChhKSlyZXR1cm4hMTtmb3Iobj1hLGErKyxyPWUucG9zTWF4O2E8ciYmOTY9PT1lLnNyYy5jaGFyQ29kZUF0KGEpOylhKys7Zm9yKG89ZS5zcmMuc2xpY2UobixhKSxzPWk9YTstMSE9PShzPWUuc3JjLmluZGV4T2YoImAiLGkpKTspe2ZvcihpPXMrMTtpPHImJjk2PT09ZS5zcmMuY2hhckNvZGVBdChpKTspaSsrO2lmKGktcz09PW8ubGVuZ3RoKXJldHVybiB0fHxlLnB1c2goe3R5cGU6ImNvZGUiLGNvbnRlbnQ6ZS5zcmMuc2xpY2UoYSxzKS5yZXBsYWNlKC9bIFxuXSsvZywiICIpLnRyaW0oKSxibG9jazohMSxsZXZlbDplLmxldmVsfSksZS5wb3M9aSwhMH1yZXR1cm4gdHx8KGUucGVuZGluZys9byksZS5wb3MrPW8ubGVuZ3RoLCEwfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9kZWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhPWUucG9zTWF4LGw9ZS5wb3M7aWYoMTI2IT09ZS5zcmMuY2hhckNvZGVBdChsKSlyZXR1cm4hMTtpZih0KXJldHVybiExO2lmKGwrND49YSlyZXR1cm4hMTtpZigxMjYhPT1lLnNyYy5jaGFyQ29kZUF0KGwrMSkpcmV0dXJuITE7aWYoZS5sZXZlbD49ZS5vcHRpb25zLm1heE5lc3RpbmcpcmV0dXJuITE7aWYocz1sPjA/ZS5zcmMuY2hhckNvZGVBdChsLTEpOi0xLGk9ZS5zcmMuY2hhckNvZGVBdChsKzIpLDEyNj09PXMpcmV0dXJuITE7aWYoMTI2PT09aSlyZXR1cm4hMTtpZigzMj09PWl8fDEwPT09aSlyZXR1cm4hMTtmb3Iocj1sKzI7cjxhJiYxMjY9PT1lLnNyYy5jaGFyQ29kZUF0KHIpOylyKys7aWYocj5sKzMpcmV0dXJuIGUucG9zKz1yLWwsdHx8KGUucGVuZGluZys9ZS5zcmMuc2xpY2UobCxyKSksITA7Zm9yKGUucG9zPWwrMixvPTE7ZS5wb3MrMTxhOyl7aWYoMTI2PT09ZS5zcmMuY2hhckNvZGVBdChlLnBvcykmJjEyNj09PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MrMSkmJihzPWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MtMSksMTI2IT09KGk9ZS5wb3MrMjxhP2Uuc3JjLmNoYXJDb2RlQXQoZS5wb3MrMik6LTEpJiYxMjYhPT1zJiYoMzIhPT1zJiYxMCE9PXM/by0tOjMyIT09aSYmMTAhPT1pJiZvKyssbzw9MCkpKXtuPSEwO2JyZWFrfWUucGFyc2VyLnNraXBUb2tlbihlKX1yZXR1cm4gbj8oZS5wb3NNYXg9ZS5wb3MsZS5wb3M9bCsyLHR8fChlLnB1c2goe3R5cGU6ImRlbF9vcGVuIixsZXZlbDplLmxldmVsKyt9KSxlLnBhcnNlci50b2tlbml6ZShlKSxlLnB1c2goe3R5cGU6ImRlbF9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSkpLGUucG9zPWUucG9zTWF4KzIsZS5wb3NNYXg9YSwhMCk6KGUucG9zPWwsITEpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9lbXBoYXNpcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlPj00OCYmZTw9NTd8fGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMn1mdW5jdGlvbiBvKGUsdCl7dmFyIG4sbyxzLGk9dCxhPSEwLGw9ITAsdT1lLnBvc01heCxjPWUuc3JjLmNoYXJDb2RlQXQodCk7Zm9yKG49dD4wP2Uuc3JjLmNoYXJDb2RlQXQodC0xKTotMTtpPHUmJmUuc3JjLmNoYXJDb2RlQXQoaSk9PT1jOylpKys7cmV0dXJuIGk+PXUmJihhPSExKSxzPWktdCxzPj00P2E9bD0hMToobz1pPHU/ZS5zcmMuY2hhckNvZGVBdChpKTotMSwzMiE9PW8mJjEwIT09b3x8KGE9ITEpLDMyIT09biYmMTAhPT1ufHwobD0hMSksOTU9PT1jJiYocihuKSYmKGE9ITEpLHIobykmJihsPSExKSkpLHtjYW5fb3BlbjphLGNhbl9jbG9zZTpsLGRlbGltczpzfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLHMsaSxhLGwsdSxjPWUucG9zTWF4LGQ9ZS5wb3MsXz1lLnNyYy5jaGFyQ29kZUF0KGQpO2lmKDk1IT09XyYmNDIhPT1fKXJldHVybiExO2lmKHQpcmV0dXJuITE7aWYodT1vKGUsZCksbj11LmRlbGltcywhdS5jYW5fb3BlbilyZXR1cm4gZS5wb3MrPW4sdHx8KGUucGVuZGluZys9ZS5zcmMuc2xpY2UoZCxlLnBvcykpLCEwO2lmKGUubGV2ZWw+PWUub3B0aW9ucy5tYXhOZXN0aW5nKXJldHVybiExO2ZvcihlLnBvcz1kK24sbD1bbl07ZS5wb3M8YzspaWYoZS5zcmMuY2hhckNvZGVBdChlLnBvcykhPT1fKWUucGFyc2VyLnNraXBUb2tlbihlKTtlbHNle2lmKHU9byhlLGUucG9zKSxyPXUuZGVsaW1zLHUuY2FuX2Nsb3NlKXtmb3IoaT1sLnBvcCgpLGE9cjtpIT09YTspe2lmKGE8aSl7bC5wdXNoKGktYSk7YnJlYWt9aWYoYS09aSwwPT09bC5sZW5ndGgpYnJlYWs7ZS5wb3MrPWksaT1sLnBvcCgpfWlmKDA9PT1sLmxlbmd0aCl7bj1pLHM9ITA7YnJlYWt9ZS5wb3MrPXI7Y29udGludWV9dS5jYW5fb3BlbiYmbC5wdXNoKHIpLGUucG9zKz1yfXJldHVybiBzPyhlLnBvc01heD1lLnBvcyxlLnBvcz1kK24sdHx8KDIhPT1uJiYzIT09bnx8ZS5wdXNoKHt0eXBlOiJzdHJvbmdfb3BlbiIsbGV2ZWw6ZS5sZXZlbCsrfSksMSE9PW4mJjMhPT1ufHxlLnB1c2goe3R5cGU6ImVtX29wZW4iLGxldmVsOmUubGV2ZWwrK30pLGUucGFyc2VyLnRva2VuaXplKGUpLDEhPT1uJiYzIT09bnx8ZS5wdXNoKHt0eXBlOiJlbV9jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSksMiE9PW4mJjMhPT1ufHxlLnB1c2goe3R5cGU6InN0cm9uZ19jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSkpLGUucG9zPWUucG9zTWF4K24sZS5wb3NNYXg9YywhMCk6KGUucG9zPWQsITEpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9lbnRpdHkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvY29tbW9uL2VudGl0aWVzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vdXRpbHMuanMiKS5oYXMscz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9jb21tb24vdXRpbHMuanMiKS5pc1ZhbGlkRW50aXR5Q29kZSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi91dGlscy5qcyIpLmZyb21Db2RlUG9pbnQsYT0vXiYjKCg/OnhbYS1mMC05XXsxLDh9fFswLTldezEsOH0pKTsvaSxsPS9eJihbYS16XVthLXowLTldezEsMzF9KTsvaTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbix1LGM9ZS5wb3MsZD1lLnBvc01heDtpZigzOCE9PWUuc3JjLmNoYXJDb2RlQXQoYykpcmV0dXJuITE7aWYoYysxPGQpaWYoMzU9PT1lLnNyYy5jaGFyQ29kZUF0KGMrMSkpe2lmKHU9ZS5zcmMuc2xpY2UoYykubWF0Y2goYSkpcmV0dXJuIHR8fChuPSJ4Ij09PXVbMV1bMF0udG9Mb3dlckNhc2UoKT9wYXJzZUludCh1WzFdLnNsaWNlKDEpLDE2KTpwYXJzZUludCh1WzFdLDEwKSxlLnBlbmRpbmcrPWkocyhuKT9uOjY1NTMzKSksZS5wb3MrPXVbMF0ubGVuZ3RoLCEwfWVsc2UgaWYoKHU9ZS5zcmMuc2xpY2UoYykubWF0Y2gobCkpJiZvKHIsdVsxXSkpcmV0dXJuIHR8fChlLnBlbmRpbmcrPXJbdVsxXV0pLGUucG9zKz11WzBdLmxlbmd0aCwhMDtyZXR1cm4gdHx8KGUucGVuZGluZys9IiYiKSxlLnBvcysrLCEwfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9lc2NhcGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7Zm9yKHZhciByPVtdLG89MDtvPDI1NjtvKyspci5wdXNoKDApOyJcXCFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXV5fYHt8fX4tIi5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtyW2UuY2hhckNvZGVBdCgwKV09MX0pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG89ZS5wb3Mscz1lLnBvc01heDtpZig5MiE9PWUuc3JjLmNoYXJDb2RlQXQobykpcmV0dXJuITE7aWYoKytvPHMpe2lmKChuPWUuc3JjLmNoYXJDb2RlQXQobykpPDI1NiYmMCE9PXJbbl0pcmV0dXJuIHR8fChlLnBlbmRpbmcrPWUuc3JjW29dKSxlLnBvcys9MiwhMDtpZigxMD09PW4pe2Zvcih0fHxlLnB1c2goe3R5cGU6ImhhcmRicmVhayIsbGV2ZWw6ZS5sZXZlbH0pLG8rKztvPHMmJjMyPT09ZS5zcmMuY2hhckNvZGVBdChvKTspbysrO3JldHVybiBlLnBvcz1vLCEwfX1yZXR1cm4gdHx8KGUucGVuZGluZys9IlxcIiksZS5wb3MrKywhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvZm9vdG5vdGVfaW5saW5lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2hlbHBlcnMvcGFyc2VfbGlua19sYWJlbC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG8scyxpLGE9ZS5wb3NNYXgsbD1lLnBvcztyZXR1cm4hKGwrMj49YSkmJig5ND09PWUuc3JjLmNoYXJDb2RlQXQobCkmJig5MT09PWUuc3JjLmNoYXJDb2RlQXQobCsxKSYmKCEoZS5sZXZlbD49ZS5vcHRpb25zLm1heE5lc3RpbmcpJiYobj1sKzIsISgobz1yKGUsbCsxKSk8MCkmJih0fHwoZS5lbnYuZm9vdG5vdGVzfHwoZS5lbnYuZm9vdG5vdGVzPXt9KSxlLmVudi5mb290bm90ZXMubGlzdHx8KGUuZW52LmZvb3Rub3Rlcy5saXN0PVtdKSxzPWUuZW52LmZvb3Rub3Rlcy5saXN0Lmxlbmd0aCxlLnBvcz1uLGUucG9zTWF4PW8sZS5wdXNoKHt0eXBlOiJmb290bm90ZV9yZWYiLGlkOnMsbGV2ZWw6ZS5sZXZlbH0pLGUubGlua0xldmVsKyssaT1lLnRva2Vucy5sZW5ndGgsZS5wYXJzZXIudG9rZW5pemUoZSksZS5lbnYuZm9vdG5vdGVzLmxpc3Rbc109e3Rva2VuczplLnRva2Vucy5zcGxpY2UoaSl9LGUubGlua0xldmVsLS0pLGUucG9zPW8rMSxlLnBvc01heD1hLCEwKSkpKSl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2Zvb3Rub3RlX3JlZi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scyxpPWUucG9zTWF4LGE9ZS5wb3M7aWYoYSszPmkpcmV0dXJuITE7aWYoIWUuZW52LmZvb3Rub3Rlc3x8IWUuZW52LmZvb3Rub3Rlcy5yZWZzKXJldHVybiExO2lmKDkxIT09ZS5zcmMuY2hhckNvZGVBdChhKSlyZXR1cm4hMTtpZig5NCE9PWUuc3JjLmNoYXJDb2RlQXQoYSsxKSlyZXR1cm4hMTtpZihlLmxldmVsPj1lLm9wdGlvbnMubWF4TmVzdGluZylyZXR1cm4hMTtmb3Iocj1hKzI7cjxpO3IrKyl7aWYoMzI9PT1lLnNyYy5jaGFyQ29kZUF0KHIpKXJldHVybiExO2lmKDEwPT09ZS5zcmMuY2hhckNvZGVBdChyKSlyZXR1cm4hMTtpZig5Mz09PWUuc3JjLmNoYXJDb2RlQXQocikpYnJlYWt9cmV0dXJuIHIhPT1hKzImJighKHI+PWkpJiYocisrLG49ZS5zcmMuc2xpY2UoYSsyLHItMSksdm9pZCAwIT09ZS5lbnYuZm9vdG5vdGVzLnJlZnNbIjoiK25dJiYodHx8KGUuZW52LmZvb3Rub3Rlcy5saXN0fHwoZS5lbnYuZm9vdG5vdGVzLmxpc3Q9W10pLGUuZW52LmZvb3Rub3Rlcy5yZWZzWyI6IituXTwwPyhvPWUuZW52LmZvb3Rub3Rlcy5saXN0Lmxlbmd0aCxlLmVudi5mb290bm90ZXMubGlzdFtvXT17bGFiZWw6bixjb3VudDowfSxlLmVudi5mb290bm90ZXMucmVmc1siOiIrbl09byk6bz1lLmVudi5mb290bm90ZXMucmVmc1siOiIrbl0scz1lLmVudi5mb290bm90ZXMubGlzdFtvXS5jb3VudCxlLmVudi5mb290bm90ZXMubGlzdFtvXS5jb3VudCsrLGUucHVzaCh7dHlwZToiZm9vdG5vdGVfcmVmIixpZDpvLHN1YklkOnMsbGV2ZWw6ZS5sZXZlbH0pKSxlLnBvcz1yLGUucG9zTWF4PWksITApKSl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2h0bWx0YWcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0zMnxlO3JldHVybiB0Pj05NyYmdDw9MTIyfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2NvbW1vbi9odG1sX3JlLmpzIikuSFRNTF9UQUdfUkU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scyxpLGE9ZS5wb3M7cmV0dXJuISFlLm9wdGlvbnMuaHRtbCYmKGk9ZS5wb3NNYXgsISg2MCE9PWUuc3JjLmNoYXJDb2RlQXQoYSl8fGErMj49aSkmJighKDMzIT09KG49ZS5zcmMuY2hhckNvZGVBdChhKzEpKSYmNjMhPT1uJiY0NyE9PW4mJiFyKG4pKSYmKCEhKHM9ZS5zcmMuc2xpY2UoYSkubWF0Y2gobykpJiYodHx8ZS5wdXNoKHt0eXBlOiJodG1sdGFnIixjb250ZW50OmUuc3JjLnNsaWNlKGEsYStzWzBdLmxlbmd0aCksbGV2ZWw6ZS5sZXZlbH0pLGUucG9zKz1zWzBdLmxlbmd0aCwhMCkpKSl9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL2lucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8scyxpLGE9ZS5wb3NNYXgsbD1lLnBvcztpZig0MyE9PWUuc3JjLmNoYXJDb2RlQXQobCkpcmV0dXJuITE7aWYodClyZXR1cm4hMTtpZihsKzQ+PWEpcmV0dXJuITE7aWYoNDMhPT1lLnNyYy5jaGFyQ29kZUF0KGwrMSkpcmV0dXJuITE7aWYoZS5sZXZlbD49ZS5vcHRpb25zLm1heE5lc3RpbmcpcmV0dXJuITE7aWYocz1sPjA/ZS5zcmMuY2hhckNvZGVBdChsLTEpOi0xLGk9ZS5zcmMuY2hhckNvZGVBdChsKzIpLDQzPT09cylyZXR1cm4hMTtpZig0Mz09PWkpcmV0dXJuITE7aWYoMzI9PT1pfHwxMD09PWkpcmV0dXJuITE7Zm9yKHI9bCsyO3I8YSYmNDM9PT1lLnNyYy5jaGFyQ29kZUF0KHIpOylyKys7aWYociE9PWwrMilyZXR1cm4gZS5wb3MrPXItbCx0fHwoZS5wZW5kaW5nKz1lLnNyYy5zbGljZShsLHIpKSwhMDtmb3IoZS5wb3M9bCsyLG89MTtlLnBvcysxPGE7KXtpZig0Mz09PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MpJiY0Mz09PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MrMSkmJihzPWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MtMSksNDMhPT0oaT1lLnBvcysyPGE/ZS5zcmMuY2hhckNvZGVBdChlLnBvcysyKTotMSkmJjQzIT09cyYmKDMyIT09cyYmMTAhPT1zP28tLTozMiE9PWkmJjEwIT09aSYmbysrLG88PTApKSl7bj0hMDticmVha31lLnBhcnNlci5za2lwVG9rZW4oZSl9cmV0dXJuIG4/KGUucG9zTWF4PWUucG9zLGUucG9zPWwrMix0fHwoZS5wdXNoKHt0eXBlOiJpbnNfb3BlbiIsbGV2ZWw6ZS5sZXZlbCsrfSksZS5wYXJzZXIudG9rZW5pemUoZSksZS5wdXNoKHt0eXBlOiJpbnNfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pKSxlLnBvcz1lLnBvc01heCsyLGUucG9zTWF4PWEsITApOihlLnBvcz1sLCExKX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvbGlua3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9wYXJzZV9saW5rX2xhYmVsLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9oZWxwZXJzL3BhcnNlX2xpbmtfZGVzdGluYXRpb24uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL2hlbHBlcnMvcGFyc2VfbGlua190aXRsZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvaGVscGVycy9ub3JtYWxpemVfcmVmZXJlbmNlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYSxsLHUsYyxkLF8scCxmPSExLG09ZS5wb3MsaD1lLnBvc01heCxnPWUucG9zLGI9ZS5zcmMuY2hhckNvZGVBdChnKTtpZigzMz09PWImJihmPSEwLGI9ZS5zcmMuY2hhckNvZGVBdCgrK2cpKSw5MSE9PWIpcmV0dXJuITE7aWYoZS5sZXZlbD49ZS5vcHRpb25zLm1heE5lc3RpbmcpcmV0dXJuITE7aWYobj1nKzEsKGE9cihlLGcpKTwwKXJldHVybiExO2lmKChkPWErMSk8aCYmNDA9PT1lLnNyYy5jaGFyQ29kZUF0KGQpKXtmb3IoZCsrO2Q8aCYmKDMyPT09KHA9ZS5zcmMuY2hhckNvZGVBdChkKSl8fDEwPT09cCk7ZCsrKTtpZihkPj1oKXJldHVybiExO2ZvcihnPWQsbyhlLGQpPyh1PWUubGlua0NvbnRlbnQsZD1lLnBvcyk6dT0iIixnPWQ7ZDxoJiYoMzI9PT0ocD1lLnNyYy5jaGFyQ29kZUF0KGQpKXx8MTA9PT1wKTtkKyspO2lmKGQ8aCYmZyE9PWQmJnMoZSxkKSlmb3IoYz1lLmxpbmtDb250ZW50LGQ9ZS5wb3M7ZDxoJiYoMzI9PT0ocD1lLnNyYy5jaGFyQ29kZUF0KGQpKXx8MTA9PT1wKTtkKyspO2Vsc2UgYz0iIjtpZihkPj1ofHw0MSE9PWUuc3JjLmNoYXJDb2RlQXQoZCkpcmV0dXJuIGUucG9zPW0sITE7ZCsrfWVsc2V7aWYoZS5saW5rTGV2ZWw+MClyZXR1cm4hMTtmb3IoO2Q8aCYmKDMyPT09KHA9ZS5zcmMuY2hhckNvZGVBdChkKSl8fDEwPT09cCk7ZCsrKTtpZihkPGgmJjkxPT09ZS5zcmMuY2hhckNvZGVBdChkKSYmKGc9ZCsxLGQ9cihlLGQpLGQ+PTA/bD1lLnNyYy5zbGljZShnLGQrKyk6ZD1nLTEpLGx8fCh2b2lkIDA9PT1sJiYoZD1hKzEpLGw9ZS5zcmMuc2xpY2UobixhKSksIShfPWUuZW52LnJlZmVyZW5jZXNbaShsKV0pKXJldHVybiBlLnBvcz1tLCExO3U9Xy5ocmVmLGM9Xy50aXRsZX1yZXR1cm4gdHx8KGUucG9zPW4sZS5wb3NNYXg9YSxmP2UucHVzaCh7dHlwZToiaW1hZ2UiLHNyYzp1LHRpdGxlOmMsYWx0OmUuc3JjLnN1YnN0cihuLGEtbiksbGV2ZWw6ZS5sZXZlbH0pOihlLnB1c2goe3R5cGU6Imxpbmtfb3BlbiIsaHJlZjp1LHRpdGxlOmMsbGV2ZWw6ZS5sZXZlbCsrfSksZS5saW5rTGV2ZWwrKyxlLnBhcnNlci50b2tlbml6ZShlKSxlLmxpbmtMZXZlbC0tLGUucHVzaCh7dHlwZToibGlua19jbG9zZSIsbGV2ZWw6LS1lLmxldmVsfSkpKSxlLnBvcz1kLGUucG9zTWF4PWgsITB9fSwiLi9ub2RlX21vZHVsZXMvcmVtYXJrYWJsZS9saWIvcnVsZXNfaW5saW5lL21hcmsuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhPWUucG9zTWF4LGw9ZS5wb3M7aWYoNjEhPT1lLnNyYy5jaGFyQ29kZUF0KGwpKXJldHVybiExO2lmKHQpcmV0dXJuITE7aWYobCs0Pj1hKXJldHVybiExO2lmKDYxIT09ZS5zcmMuY2hhckNvZGVBdChsKzEpKXJldHVybiExO2lmKGUubGV2ZWw+PWUub3B0aW9ucy5tYXhOZXN0aW5nKXJldHVybiExO2lmKHM9bD4wP2Uuc3JjLmNoYXJDb2RlQXQobC0xKTotMSxpPWUuc3JjLmNoYXJDb2RlQXQobCsyKSw2MT09PXMpcmV0dXJuITE7aWYoNjE9PT1pKXJldHVybiExO2lmKDMyPT09aXx8MTA9PT1pKXJldHVybiExO2ZvcihyPWwrMjtyPGEmJjYxPT09ZS5zcmMuY2hhckNvZGVBdChyKTspcisrO2lmKHIhPT1sKzIpcmV0dXJuIGUucG9zKz1yLWwsdHx8KGUucGVuZGluZys9ZS5zcmMuc2xpY2UobCxyKSksITA7Zm9yKGUucG9zPWwrMixvPTE7ZS5wb3MrMTxhOyl7aWYoNjE9PT1lLnNyYy5jaGFyQ29kZUF0KGUucG9zKSYmNjE9PT1lLnNyYy5jaGFyQ29kZUF0KGUucG9zKzEpJiYocz1lLnNyYy5jaGFyQ29kZUF0KGUucG9zLTEpLDYxIT09KGk9ZS5wb3MrMjxhP2Uuc3JjLmNoYXJDb2RlQXQoZS5wb3MrMik6LTEpJiY2MSE9PXMmJigzMiE9PXMmJjEwIT09cz9vLS06MzIhPT1pJiYxMCE9PWkmJm8rKyxvPD0wKSkpe249ITA7YnJlYWt9ZS5wYXJzZXIuc2tpcFRva2VuKGUpfXJldHVybiBuPyhlLnBvc01heD1lLnBvcyxlLnBvcz1sKzIsdHx8KGUucHVzaCh7dHlwZToibWFya19vcGVuIixsZXZlbDplLmxldmVsKyt9KSxlLnBhcnNlci50b2tlbml6ZShlKSxlLnB1c2goe3R5cGU6Im1hcmtfY2xvc2UiLGxldmVsOi0tZS5sZXZlbH0pKSxlLnBvcz1lLnBvc01heCsyLGUucG9zTWF4PWEsITApOihlLnBvcz1sLCExKX19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvbmV3bGluZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89ZS5wb3M7aWYoMTAhPT1lLnNyYy5jaGFyQ29kZUF0KG8pKXJldHVybiExO2lmKG49ZS5wZW5kaW5nLmxlbmd0aC0xLHI9ZS5wb3NNYXgsIXQpaWYobj49MCYmMzI9PT1lLnBlbmRpbmcuY2hhckNvZGVBdChuKSlpZihuPj0xJiYzMj09PWUucGVuZGluZy5jaGFyQ29kZUF0KG4tMSkpe2Zvcih2YXIgcz1uLTI7cz49MDtzLS0paWYoMzIhPT1lLnBlbmRpbmcuY2hhckNvZGVBdChzKSl7ZS5wZW5kaW5nPWUucGVuZGluZy5zdWJzdHJpbmcoMCxzKzEpO2JyZWFrfWUucHVzaCh7dHlwZToiaGFyZGJyZWFrIixsZXZlbDplLmxldmVsfSl9ZWxzZSBlLnBlbmRpbmc9ZS5wZW5kaW5nLnNsaWNlKDAsLTEpLGUucHVzaCh7dHlwZToic29mdGJyZWFrIixsZXZlbDplLmxldmVsfSk7ZWxzZSBlLnB1c2goe3R5cGU6InNvZnRicmVhayIsbGV2ZWw6ZS5sZXZlbH0pO2ZvcihvKys7bzxyJiYzMj09PWUuc3JjLmNoYXJDb2RlQXQobyk7KW8rKztyZXR1cm4gZS5wb3M9bywhMH19LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvc3RhdGVfaW5saW5lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixvKXt0aGlzLnNyYz1lLHRoaXMuZW52PXIsdGhpcy5vcHRpb25zPW4sdGhpcy5wYXJzZXI9dCx0aGlzLnRva2Vucz1vLHRoaXMucG9zPTAsdGhpcy5wb3NNYXg9dGhpcy5zcmMubGVuZ3RoLHRoaXMubGV2ZWw9MCx0aGlzLnBlbmRpbmc9IiIsdGhpcy5wZW5kaW5nTGV2ZWw9MCx0aGlzLmNhY2hlPVtdLHRoaXMuaXNJbkxhYmVsPSExLHRoaXMubGlua0xldmVsPTAsdGhpcy5saW5rQ29udGVudD0iIix0aGlzLmxhYmVsVW5tYXRjaGVkU2NvcGVzPTB9ci5wcm90b3R5cGUucHVzaFBlbmRpbmc9ZnVuY3Rpb24oKXt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnRoaXMucGVuZGluZyxsZXZlbDp0aGlzLnBlbmRpbmdMZXZlbH0pLHRoaXMucGVuZGluZz0iIn0sci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcmJnRoaXMucHVzaFBlbmRpbmcoKSx0aGlzLnRva2Vucy5wdXNoKGUpLHRoaXMucGVuZGluZ0xldmVsPXRoaXMubGV2ZWx9LHIucHJvdG90eXBlLmNhY2hlU2V0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuY2FjaGUubGVuZ3RoO248PWU7bisrKXRoaXMuY2FjaGUucHVzaCgwKTt0aGlzLmNhY2hlW2VdPXR9LHIucHJvdG90eXBlLmNhY2hlR2V0PWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMuY2FjaGUubGVuZ3RoP3RoaXMuY2FjaGVbZV06MH0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2xpYi9ydWxlc19pbmxpbmUvc3ViLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPS9cXChbIFxcISIjJCUmJygpKissLlwvOjs8PT4/QFtcXV5fYHt8fX4tXSkvZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixvLHM9ZS5wb3NNYXgsaT1lLnBvcztpZigxMjYhPT1lLnNyYy5jaGFyQ29kZUF0KGkpKXJldHVybiExO2lmKHQpcmV0dXJuITE7aWYoaSsyPj1zKXJldHVybiExO2lmKGUubGV2ZWw+PWUub3B0aW9ucy5tYXhOZXN0aW5nKXJldHVybiExO2ZvcihlLnBvcz1pKzE7ZS5wb3M8czspe2lmKDEyNj09PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MpKXtuPSEwO2JyZWFrfWUucGFyc2VyLnNraXBUb2tlbihlKX1yZXR1cm4gbiYmaSsxIT09ZS5wb3M/KG89ZS5zcmMuc2xpY2UoaSsxLGUucG9zKSxvLm1hdGNoKC8oXnxbXlxcXSkoXFxcXCkqXHMvKT8oZS5wb3M9aSwhMSk6KGUucG9zTWF4PWUucG9zLGUucG9zPWkrMSx0fHxlLnB1c2goe3R5cGU6InN1YiIsbGV2ZWw6ZS5sZXZlbCxjb250ZW50Om8ucmVwbGFjZShyLCIkMSIpfSksZS5wb3M9ZS5wb3NNYXgrMSxlLnBvc01heD1zLCEwKSk6KGUucG9zPWksITEpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS9zdXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9L1xcKFsgXFwhIiMkJSYnKCkqKywuXC86Ozw9Pj9AW1xdXl9ge3x9fi1dKS9nO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLG8scz1lLnBvc01heCxpPWUucG9zO2lmKDk0IT09ZS5zcmMuY2hhckNvZGVBdChpKSlyZXR1cm4hMTtpZih0KXJldHVybiExO2lmKGkrMj49cylyZXR1cm4hMTtpZihlLmxldmVsPj1lLm9wdGlvbnMubWF4TmVzdGluZylyZXR1cm4hMTtmb3IoZS5wb3M9aSsxO2UucG9zPHM7KXtpZig5ND09PWUuc3JjLmNoYXJDb2RlQXQoZS5wb3MpKXtuPSEwO2JyZWFrfWUucGFyc2VyLnNraXBUb2tlbihlKX1yZXR1cm4gbiYmaSsxIT09ZS5wb3M/KG89ZS5zcmMuc2xpY2UoaSsxLGUucG9zKSxvLm1hdGNoKC8oXnxbXlxcXSkoXFxcXCkqXHMvKT8oZS5wb3M9aSwhMSk6KGUucG9zTWF4PWUucG9zLGUucG9zPWkrMSx0fHxlLnB1c2goe3R5cGU6InN1cCIsbGV2ZWw6ZS5sZXZlbCxjb250ZW50Om8ucmVwbGFjZShyLCIkMSIpfSksZS5wb3M9ZS5wb3NNYXgrMSxlLnBvc01heD1zLCEwKSk6KGUucG9zPWksITEpfX0sIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvbGliL3J1bGVzX2lubGluZS90ZXh0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7c3dpdGNoKGUpe2Nhc2UgMTA6Y2FzZSA5MjpjYXNlIDk2OmNhc2UgNDI6Y2FzZSA5NTpjYXNlIDk0OmNhc2UgOTE6Y2FzZSA5MzpjYXNlIDMzOmNhc2UgMzg6Y2FzZSA2MDpjYXNlIDYyOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgMzY6Y2FzZSAzNzpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNDM6Y2FzZSA2MTpjYXNlIDU4OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLnBvcztuPGUucG9zTWF4JiYhcihlLnNyYy5jaGFyQ29kZUF0KG4pKTspbisrO3JldHVybiBuIT09ZS5wb3MmJih0fHwoZS5wZW5kaW5nKz1lLnNyYy5zbGljZShlLnBvcyxuKSksZS5wb3M9biwhMCl9fSwiLi9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PXQpcmV0dXJuIGU7aWYoMj09PXQpcmV0dXJuIGUrZTt2YXIgbj1lLmxlbmd0aCp0O2lmKG8hPT1lfHx2b2lkIDA9PT1vKW89ZSxzPSIiO2Vsc2UgaWYocy5sZW5ndGg+PW4pcmV0dXJuIHMuc3Vic3RyKDAsbik7Zm9yKDtuPnMubGVuZ3RoJiZ0PjE7KTEmdCYmKHMrPWUpLHQ+Pj0xLGUrPWU7cmV0dXJuIHMrPWUscz1zLnN1YnN0cigwLG4pfS8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCnZhciBvLHM9IiI7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9yZXF1aXJlcy1wb3J0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQ9dC5zcGxpdCgiOiIpWzBdLCEoZT0rZSkpcmV0dXJuITE7c3dpdGNoKHQpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09ZTtjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PWU7Y2FzZSJmdHAiOnJldHVybiAyMSE9PWU7Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PWU7Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PWV9fSwiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gbyhlLHQsbil7aWYobnVsbD09PXR8fG51bGw9PT1ufHx0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj10Lmxlbmd0aCxvPTA7bzxyO28rKylpZighZSh0W29dLG5bb10pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnIsbj1udWxsLHM9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbyh0LG4sYXJndW1lbnRzKXx8KHM9ZS5hcHBseShudWxsLGFyZ3VtZW50cykpLG49YXJndW1lbnRzLHN9fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9QXJyYXkuaXNBcnJheShlWzBdKT9lWzBdOmU7aWYoIXQuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9KSl7dmFyIG49dC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdG9yIGNyZWF0b3JzIGV4cGVjdCBhbGwgaW5wdXQtc2VsZWN0b3JzIHRvIGJlIGZ1bmN0aW9ucywgaW5zdGVhZCByZWNlaXZlZCB0aGUgZm9sbG93aW5nIHR5cGVzOiBbIituKyJdIil9cmV0dXJuIHR9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KHQpLG89MDtvPHQ7bysrKXJbb109YXJndW1lbnRzW29dO3ZhciBhPTAsbD1yLnBvcCgpLHU9aShyKSxjPWUuYXBwbHkodm9pZCAwLFtmdW5jdGlvbigpe3JldHVybiBhKyssbC5hcHBseShudWxsLGFyZ3VtZW50cyl9XS5jb25jYXQobikpLGQ9cyhmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXUubGVuZ3RoLG49MDtuPHQ7bisrKWUucHVzaCh1W25dLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7cmV0dXJuIGMuYXBwbHkobnVsbCxlKX0pO3JldHVybiBkLnJlc3VsdEZ1bmM9bCxkLnJlY29tcHV0YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGQucmVzZXRSZWNvbXB1dGF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBhPTB9LGR9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnU7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yIGV4cGVjdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzZWxlY3RvciwgaW5zdGVhZCByZWNlaXZlZCBhICIrdHlwZW9mIGUpO3ZhciBuPU9iamVjdC5rZXlzKGUpO3JldHVybiB0KG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiB0LnJlZHVjZShmdW5jdGlvbihlLHQscil7cmV0dXJuIGVbbltyXV09dCxlfSx7fSl9KX10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0TWVtb2l6ZT1zLHQuY3JlYXRlU2VsZWN0b3JDcmVhdG9yPWEsdC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3I9bDt2YXIgdT10LmNyZWF0ZVNlbGVjdG9yPWEocyl9LCIuL25vZGVfbW9kdWxlcy9yZXNldC1jc3MvcmVzZXQuY3NzIjpmdW5jdGlvbihlLHQpe30sIi4vbm9kZV9tb2R1bGVzL3Jlc29sdmUtcGF0aG5hbWUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPXQscj1uKzEsbz1lLmxlbmd0aDtyPG87bis9MSxyKz0xKWVbbl09ZVtyXTtlLnBvcCgpfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLG49ZSYmZS5zcGxpdCgiLyIpfHxbXSxzPXQmJnQuc3BsaXQoIi8iKXx8W10saT1lJiZyKGUpLGE9dCYmcih0KSxsPWl8fGE7aWYoZSYmcihlKT9zPW46bi5sZW5ndGgmJihzLnBvcCgpLHM9cy5jb25jYXQobikpLCFzLmxlbmd0aClyZXR1cm4iLyI7dmFyIHU9dm9pZCAwO2lmKHMubGVuZ3RoKXt2YXIgYz1zW3MubGVuZ3RoLTFdO3U9Ii4iPT09Y3x8Ii4uIj09PWN8fCIiPT09Y31lbHNlIHU9ITE7Zm9yKHZhciBkPTAsXz1zLmxlbmd0aDtfPj0wO18tLSl7dmFyIHA9c1tfXTsiLiI9PT1wP28ocyxfKToiLi4iPT09cD8obyhzLF8pLGQrKyk6ZCYmKG8ocyxfKSxkLS0pfWlmKCFsKWZvcig7ZC0tO2Qpcy51bnNoaWZ0KCIuLiIpOyFsfHwiIj09PXNbMF18fHNbMF0mJnIoc1swXSl8fHMudW5zaGlmdCgiIik7dmFyIGY9cy5qb2luKCIvIik7cmV0dXJuIHUmJiIvIiE9PWYuc3Vic3RyKC0xKSYmKGYrPSIvIiksZn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXN9LCIuL25vZGVfbW9kdWxlcy9ydWR5LW1hdGNoLXBhdGgvZGlzdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6QXJyYXkuZnJvbShlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21waWxlUGFyYW1zVG9QYXRoPXQuY29tcGlsZVBhdGg9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9e30sYT0wLGw9dC5jb21waWxlUGF0aD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj10LmVuZCxyPXZvaWQgMD09PW58fG4sbz10LnN0cmljdCxsPXZvaWQgMCE9PW8mJm8sdT0ocj8idCI6ImYiKSsobD8idCI6ImYiKSxjPWlbdV18fChpW3VdPXt9KTtpZihjW2VdKXJldHVybiBjW2VdO3ZhciBkPVtdLF89KDAscy5kZWZhdWx0KShlLGQsdCkscD17cmU6XyxrZXlzOmR9O3JldHVybiBhPDFlNCYmKGNbZV09cCxhKyspLHB9LHU9e30sYz0odC5jb21waWxlUGFyYW1zVG9QYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXVbZV18fHMuZGVmYXVsdC5jb21waWxlKGUpO3JldHVybiB1W2VdPW4sbih0KX0sZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9OyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9e3BhdGg6dCxleGFjdDohMSxzdHJpY3Q6ITF9KTt2YXIgbj10LG89bi5wYXRoLHM9dm9pZCAwPT09bz8iLyI6byxpPW4uZXhhY3QsYT12b2lkIDAhPT1pJiZpLHU9bi5zdHJpY3QsYz12b2lkIDAhPT11JiZ1LGQ9bChzLHtlbmQ6YSxzdHJpY3Q6Y30pLF89ZC5yZSxwPWQua2V5cyxmPV8uZXhlYyhlKTtpZighZilyZXR1cm4gbnVsbDt2YXIgbT1yKGYpLGg9bVswXSxnPW0uc2xpY2UoMSksYj1lPT09aDtyZXR1cm4gYSYmIWI/bnVsbDp7cGF0aDpzLHVybDoiLyI9PT1zJiYiIj09PWg/Ii8iOmgsaXNFeGFjdDpiLHBhcmFtczpwLnJlZHVjZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdC5uYW1lXT1nW25dLGV9LHt9KX19KTt0LmRlZmF1bHQ9Y30sIi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gaShlLHQsbil9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLGk9cy5CdWZmZXI7aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9czoocihzLHQpLHQuQnVmZmVyPW8pLHIoaSxvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgcj1pKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9yLmZpbGwodCxuKTpyLmZpbGwodCk6ci5maWxsKDApLHJ9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcy5TbG93QnVmZmVyKGUpfX0sIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvZGlzdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXt0KGVbbl0sbil9KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJue30uaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLGZ1bmN0aW9uKGUpe3QoZSkmJm4ucHVzaChlKX0pLG59ZnVuY3Rpb24gaShlLHQsbil7ZnVuY3Rpb24gRShlLHQpe3ZhciBuPXRoaXM7dGhpcy50YWc9ZSx0aGlzLmF0dHJpYnM9dHx8e30sdGhpcy50YWdQb3NpdGlvbj1TLmxlbmd0aCx0aGlzLnRleHQ9IiIsdGhpcy51cGRhdGVQYXJlbnROb2RlVGV4dD1mdW5jdGlvbigpe2lmKGsubGVuZ3RoKXtrW2subGVuZ3RoLTFdLnRleHQrPW4udGV4dH19fWZ1bmN0aW9uIHkoZSxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihlKz0iIiksdC5wYXJzZXIuZGVjb2RlRW50aXRpZXMmJihlPWUucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoL1w+L2csIiZndDsiKSxuJiYoZT1lLnJlcGxhY2UoL1wiL2csIiZxdW90OyIpKSksZT1lLnJlcGxhY2UoLyYoPyFbYS16QS1aMC05I117MSwyMH07KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoL1w+L2csIiZndDsiKSxuJiYoZT1lLnJlcGxhY2UoL1wiL2csIiZxdW90OyIpKSxlfWZ1bmN0aW9uIHYoZSxuKXtuPW4ucmVwbGFjZSgvW1x4MDAtXHgyMF0rL2csIiIpLG49bi5yZXBsYWNlKC88XCFcLVwtLio/XC1cLVw+L2csIiIpO3ZhciByPW4ubWF0Y2goL14oW2EtekEtWl0rKVw6Lyk7aWYoIXIpcmV0dXJuISFuLm1hdGNoKC9eW1wvXFxdezJ9LykmJiF0LmFsbG93UHJvdG9jb2xSZWxhdGl2ZTt2YXIgcz1yWzFdLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG8odC5hbGxvd2VkU2NoZW1lc0J5VGFnLGUpPy0xPT09dC5hbGxvd2VkU2NoZW1lc0J5VGFnW2VdLmluZGV4T2Yocyk6IXQuYWxsb3dlZFNjaGVtZXN8fC0xPT09dC5hbGxvd2VkU2NoZW1lcy5pbmRleE9mKHMpfWZ1bmN0aW9uIFQoZSx0KXtpZighdClyZXR1cm4gZTt2YXIgbixyPWMoZSksbz1lLm5vZGVzWzBdO3JldHVybiBuPXRbby5zZWxlY3Rvcl0mJnRbIioiXT9kKGModFtvLnNlbGVjdG9yXSksdFsiKiJdLGZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5jb25jYXQodCl9KTp0W28uc2VsZWN0b3JdfHx0WyIqIl0sbiYmKHIubm9kZXNbMF0ubm9kZXM9by5ub2Rlcy5yZWR1Y2UoQyhuKSxbXSkpLHJ9ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS5ub2Rlc1swXS5ub2Rlcy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHQucHJvcCsiOiIrdC52YWx1ZSsiOyIpLGV9LFtdKS5qb2luKCIiKX1mdW5jdGlvbiBDKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe2lmKGUuaGFzT3duUHJvcGVydHkobi5wcm9wKSl7ZVtuLnByb3BdLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVzdChuLnZhbHVlKX0pJiZ0LnB1c2gobil9cmV0dXJuIHR9fWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gdD8oZT1lLnNwbGl0KC9ccysvKSxlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlKX0pLmpvaW4oIiAiKSk6ZX12YXIgUz0iIjt0Pyh0PWwoaS5kZWZhdWx0cyx0KSx0LnBhcnNlcj90LnBhcnNlcj1sKGIsdC5wYXJzZXIpOnQucGFyc2VyPWIpOih0PWkuZGVmYXVsdHMsdC5wYXJzZXI9Yik7dmFyIFIsaix4PXQubm9uVGV4dFRhZ3N8fFsic2NyaXB0Iiwic3R5bGUiLCJ0ZXh0YXJlYSJdO3QuYWxsb3dlZEF0dHJpYnV0ZXMmJihSPXt9LGo9e30scih0LmFsbG93ZWRBdHRyaWJ1dGVzLGZ1bmN0aW9uKGUsdCl7Ult0XT1bXTt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oZSl7XyhlKSYmZS5pbmRleE9mKCIqIik+PTA/bi5wdXNoKHUoZSkucmVwbGFjZSgvXFxcKi9nLCIuKiIpKTpSW3RdLnB1c2goZSl9KSxqW3RdPW5ldyBSZWdFeHAoIl4oIituLmpvaW4oInwiKSsiKSQiKX0pKTt2YXIgTD17fTtyKHQuYWxsb3dlZENsYXNzZXMsZnVuY3Rpb24oZSx0KXtSJiYobyhSLHQpfHwoUlt0XT1bXSksUlt0XS5wdXNoKCJjbGFzcyIpKSxMW3RdPWV9KTt2YXIgRCx3PXt9O3IodC50cmFuc2Zvcm1UYWdzLGZ1bmN0aW9uKGUsdCl7dmFyIG47ImZ1bmN0aW9uIj09dHlwZW9mIGU/bj1lOiJzdHJpbmciPT10eXBlb2YgZSYmKG49aS5zaW1wbGVUcmFuc2Zvcm0oZSkpLCIqIj09PXQ/RD1uOndbdF09bn0pO3ZhciBNPTAsaz1bXSxJPXt9LFA9e30sTj0hMSxIPTAsRj1uZXcgYS5QYXJzZXIoe29ub3BlbnRhZzpmdW5jdGlvbihlLG4pe2lmKE4pcmV0dXJuIHZvaWQgSCsrO3ZhciBpPW5ldyBFKGUsbik7ay5wdXNoKGkpO3ZhciBhLGw9ITEsdT0hIWkudGV4dDtvKHcsZSkmJihhPXdbZV0oZSxuKSxpLmF0dHJpYnM9bj1hLmF0dHJpYnMsdm9pZCAwIT09YS50ZXh0JiYoaS5pbm5lclRleHQ9YS50ZXh0KSxlIT09YS50YWdOYW1lJiYoaS5uYW1lPWU9YS50YWdOYW1lLFBbTV09YS50YWdOYW1lKSksRCYmKGE9RChlLG4pLGkuYXR0cmlicz1uPWEuYXR0cmlicyxlIT09YS50YWdOYW1lJiYoaS5uYW1lPWU9YS50YWdOYW1lLFBbTV09YS50YWdOYW1lKSksdC5hbGxvd2VkVGFncyYmLTE9PT10LmFsbG93ZWRUYWdzLmluZGV4T2YoZSkmJihsPSEwLC0xIT09eC5pbmRleE9mKGUpJiYoTj0hMCxIPTEpLElbTV09ITApLE0rKyxsfHwoUys9IjwiK2UsKCFSfHxvKFIsZSl8fFJbIioiXSkmJnIobixmdW5jdGlvbihuLGEpe2lmKCFnLnRlc3QoYSkpcmV0dXJuIHZvaWQgZGVsZXRlIGkuYXR0cmlic1thXTt2YXIgbCx1PSExO2lmKCFSfHxvKFIsZSkmJi0xIT09UltlXS5pbmRleE9mKGEpfHxSWyIqIl0mJi0xIT09UlsiKiJdLmluZGV4T2YoYSl8fG8oaixlKSYmaltlXS50ZXN0KGEpfHxqWyIqIl0mJmpbIioiXS50ZXN0KGEpKXU9ITA7ZWxzZSBpZihSJiZSW2VdKXt2YXIgYz0hMCxkPSExLF89dm9pZCAwO3RyeXtmb3IodmFyIGIsRT1SW2VdW1N5bWJvbC5pdGVyYXRvcl0oKTshKGM9KGI9RS5uZXh0KCkpLmRvbmUpO2M9ITApe3ZhciBDPWIudmFsdWU7aWYocChDKSYmQy5uYW1lJiZDLm5hbWU9PT1hKXt1PSEwO3ZhciB4PSIiO2lmKCEwPT09Qy5tdWx0aXBsZSl7dmFyIEQ9bi5zcGxpdCgiICIpLHc9ITAsTT0hMSxrPXZvaWQgMDt0cnl7Zm9yKHZhciBJLFA9RFtTeW1ib2wuaXRlcmF0b3JdKCk7ISh3PShJPVAubmV4dCgpKS5kb25lKTt3PSEwKXt2YXIgTj1JLnZhbHVlOy0xIT09Qy52YWx1ZXMuaW5kZXhPZihOKSYmKCIiPT09eD94PU46eCs9IiAiK04pfX1jYXRjaChlKXtNPSEwLGs9ZX1maW5hbGx5e3RyeXshdyYmUC5yZXR1cm4mJlAucmV0dXJuKCl9ZmluYWxseXtpZihNKXRocm93IGt9fX1lbHNlIEMudmFsdWVzLmluZGV4T2Yobik+PTAmJih4PW4pO249eH19fWNhdGNoKGUpe2Q9ITAsXz1lfWZpbmFsbHl7dHJ5eyFjJiZFLnJldHVybiYmRS5yZXR1cm4oKX1maW5hbGx5e2lmKGQpdGhyb3cgX319fWlmKHUpe2lmKC0xIT09dC5hbGxvd2VkU2NoZW1lc0FwcGxpZWRUb0F0dHJpYnV0ZXMuaW5kZXhPZihhKSYmdihlLG4pKXJldHVybiB2b2lkIGRlbGV0ZSBpLmF0dHJpYnNbYV07aWYoImlmcmFtZSI9PT1lJiYic3JjIj09PWEpe3ZhciBIPSEwO3RyeXtsPWgucGFyc2UobiwhMSwhMCk7bCYmbnVsbD09PWwuaG9zdCYmbnVsbD09PWwucHJvdG9jb2w/SD1vKHQsImFsbG93SWZyYW1lUmVsYXRpdmVVcmxzIik/dC5hbGxvd0lmcmFtZVJlbGF0aXZlVXJsczohdC5hbGxvd2VkSWZyYW1lSG9zdG5hbWVzOnQuYWxsb3dlZElmcmFtZUhvc3RuYW1lcyYmKEg9dC5hbGxvd2VkSWZyYW1lSG9zdG5hbWVzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1sLmhvc3RuYW1lfSkpfWNhdGNoKGUpe0g9ITF9aWYoIUgpcmV0dXJuIHZvaWQgZGVsZXRlIGkuYXR0cmlic1thXX1pZigic3Jjc2V0Ij09PWEpdHJ5e2lmKGw9Zi5wYXJzZShuKSxyKGwsZnVuY3Rpb24oZSl7digic3Jjc2V0IixlLnVybCkmJihlLmV2aWw9ITApfSksbD1zKGwsZnVuY3Rpb24oZSl7cmV0dXJuIWUuZXZpbH0pLCFsLmxlbmd0aClyZXR1cm4gdm9pZCBkZWxldGUgaS5hdHRyaWJzW2FdO249Zi5zdHJpbmdpZnkocyhsLGZ1bmN0aW9uKGUpe3JldHVybiFlLmV2aWx9KSksaS5hdHRyaWJzW2FdPW59Y2F0Y2goZSl7cmV0dXJuIHZvaWQgZGVsZXRlIGkuYXR0cmlic1thXX1pZigiY2xhc3MiPT09YSYmKG49TyhuLExbZV0pLCFuLmxlbmd0aCkpcmV0dXJuIHZvaWQgZGVsZXRlIGkuYXR0cmlic1thXTtpZigic3R5bGUiPT09YSl0cnl7aWYobj1BKFQobS5wYXJzZShlKyIgeyIrbisifSIpLHQuYWxsb3dlZFN0eWxlcykpLDA9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCBkZWxldGUgaS5hdHRyaWJzW2FdfWNhdGNoKGUpe3JldHVybiB2b2lkIGRlbGV0ZSBpLmF0dHJpYnNbYV19Uys9IiAiK2Esbi5sZW5ndGgmJihTKz0nPSInK3kobiwhMCkrJyInKX1lbHNlIGRlbGV0ZSBpLmF0dHJpYnNbYV19KSwtMSE9PXQuc2VsZkNsb3NpbmcuaW5kZXhPZihlKT9TKz0iIC8+IjooUys9Ij4iLCFpLmlubmVyVGV4dHx8dXx8dC50ZXh0RmlsdGVyfHwoUys9aS5pbm5lclRleHQpKSl9LG9udGV4dDpmdW5jdGlvbihlKXtpZighTil7dmFyIG4scj1rW2subGVuZ3RoLTFdO2lmKHImJihuPXIudGFnLGU9dm9pZCAwIT09ci5pbm5lclRleHQ/ci5pbm5lclRleHQ6ZSksInNjcmlwdCI9PT1ufHwic3R5bGUiPT09bilTKz1lO2Vsc2V7dmFyIG89eShlLCExKTt0LnRleHRGaWx0ZXI/Uys9dC50ZXh0RmlsdGVyKG8pOlMrPW99aWYoay5sZW5ndGgpe2tbay5sZW5ndGgtMV0udGV4dCs9ZX19fSxvbmNsb3NldGFnOmZ1bmN0aW9uKGUpe2lmKE4pe2lmKC0tSClyZXR1cm47Tj0hMX12YXIgbj1rLnBvcCgpO2lmKG4pe2lmKE49ITEsTS0tLElbTV0pcmV0dXJuIGRlbGV0ZSBJW01dLHZvaWQgbi51cGRhdGVQYXJlbnROb2RlVGV4dCgpO2lmKFBbTV0mJihlPVBbTV0sZGVsZXRlIFBbTV0pLHQuZXhjbHVzaXZlRmlsdGVyJiZ0LmV4Y2x1c2l2ZUZpbHRlcihuKSlyZXR1cm4gdm9pZChTPVMuc3Vic3RyKDAsbi50YWdQb3NpdGlvbikpO24udXBkYXRlUGFyZW50Tm9kZVRleHQoKSwtMT09PXQuc2VsZkNsb3NpbmcuaW5kZXhPZihlKSYmKFMrPSI8LyIrZSsiPiIpfX19LHQucGFyc2VyKTtyZXR1cm4gRi53cml0ZShlKSxGLmVuZCgpLFN9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy94dGVuZC9pbW11dGFibGUuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5lc2NhcGVyZWdleHAvaW5kZXguanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5jbG9uZWRlZXAvaW5kZXguanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5tZXJnZXdpdGgvaW5kZXguanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc3N0cmluZy9pbmRleC5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmlzcGxhaW5vYmplY3QvaW5kZXguanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3NyY3NldC9pbmRleC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvcG9zdGNzcy9saWIvcG9zdGNzcy5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIpO2UuZXhwb3J0cz1pO3ZhciBnPS9eW15cMFx0XG5cZlxyIFwvPD0+XSskLyxiPXtkZWNvZGVFbnRpdGllczohMH07aS5kZWZhdWx0cz17YWxsb3dlZFRhZ3M6WyJoMyIsImg0IiwiaDUiLCJoNiIsImJsb2NrcXVvdGUiLCJwIiwiYSIsInVsIiwib2wiLCJubCIsImxpIiwiYiIsImkiLCJzdHJvbmciLCJlbSIsInN0cmlrZSIsImNvZGUiLCJociIsImJyIiwiZGl2IiwidGFibGUiLCJ0aGVhZCIsImNhcHRpb24iLCJ0Ym9keSIsInRyIiwidGgiLCJ0ZCIsInByZSIsImlmcmFtZSJdLGFsbG93ZWRBdHRyaWJ1dGVzOnthOlsiaHJlZiIsIm5hbWUiLCJ0YXJnZXQiXSxpbWc6WyJzcmMiXX0sc2VsZkNsb3Npbmc6WyJpbWciLCJiciIsImhyIiwiYXJlYSIsImJhc2UiLCJiYXNlZm9udCIsImlucHV0IiwibGluayIsIm1ldGEiXSxhbGxvd2VkU2NoZW1lczpbImh0dHAiLCJodHRwcyIsImZ0cCIsIm1haWx0byJdLGFsbG93ZWRTY2hlbWVzQnlUYWc6e30sYWxsb3dlZFNjaGVtZXNBcHBsaWVkVG9BdHRyaWJ1dGVzOlsiaHJlZiIsInNyYyIsImNpdGUiXSxhbGxvd1Byb3RvY29sUmVsYXRpdmU6ITB9LGkuc2ltcGxlVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj12b2lkIDA9PT1ufHxuLHQ9dHx8e30sZnVuY3Rpb24ocixvKXt2YXIgcztpZihuKWZvcihzIGluIHQpb1tzXT10W3NdO2Vsc2Ugbz10O3JldHVybnt0YWdOYW1lOmUsYXR0cmliczpvfX19fSwiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL0NvbGxlY3RpbmdIYW5kbGVyLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt0aGlzLl9jYnM9ZXx8e30sdGhpcy5ldmVudHM9W119ZS5leHBvcnRzPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL2luZGV4LmpzIikuRVZFTlRTO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoMD09PW9bZV0pZT0ib24iK2Usci5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt0aGlzLmV2ZW50cy5wdXNoKFtlXSksdGhpcy5fY2JzW2VdJiZ0aGlzLl9jYnNbZV0oKX07ZWxzZSBpZigxPT09b1tlXSllPSJvbiIrZSxyLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0KXt0aGlzLmV2ZW50cy5wdXNoKFtlLHRdKSx0aGlzLl9jYnNbZV0mJnRoaXMuX2Nic1tlXSh0KX07ZWxzZXtpZigyIT09b1tlXSl0aHJvdyBFcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpO2U9Im9uIitlLHIucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7dGhpcy5ldmVudHMucHVzaChbZSx0LG5dKSx0aGlzLl9jYnNbZV0mJnRoaXMuX2Nic1tlXSh0LG4pfX19KSxyLnByb3RvdHlwZS5vbnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5ldmVudHM9W10sdGhpcy5fY2JzLm9ucmVzZXQmJnRoaXMuX2Nicy5vbnJlc2V0KCl9LHIucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9jYnMub25yZXNldCYmdGhpcy5fY2JzLm9ucmVzZXQoKTtmb3IodmFyIGU9MCx0PXRoaXMuZXZlbnRzLmxlbmd0aDtlPHQ7ZSsrKWlmKHRoaXMuX2Nic1t0aGlzLmV2ZW50c1tlXVswXV0pe3ZhciBuPXRoaXMuZXZlbnRzW2VdLmxlbmd0aDsxPT09bj90aGlzLl9jYnNbdGhpcy5ldmVudHNbZV1bMF1dKCk6Mj09PW4/dGhpcy5fY2JzW3RoaXMuZXZlbnRzW2VdWzBdXSh0aGlzLmV2ZW50c1tlXVsxXSk6dGhpcy5fY2JzW3RoaXMuZXZlbnRzW2VdWzBdXSh0aGlzLmV2ZW50c1tlXVsxXSx0aGlzLmV2ZW50c1tlXVsyXSl9fX0sIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9GZWVkSGFuZGxlci5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt0aGlzLmluaXQoZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSx0LCEwKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSx0LCEwLDEpWzBdfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiB1LmdldFRleHQodS5nZXRFbGVtZW50c0J5VGFnTmFtZShlLHQsbiwxKSkudHJpbSgpfWZ1bmN0aW9uIGEoZSx0LG4scixvKXt2YXIgcz1pKG4scixvKTtzJiYoZVt0XT1zKX12YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9kb21oYW5kbGVyL2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9kb211dGlscy9pbmRleC5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShyLGwpLHIucHJvdG90eXBlLmluaXQ9bDt2YXIgYz1mdW5jdGlvbihlKXtyZXR1cm4icnNzIj09PWV8fCJmZWVkIj09PWV8fCJyZGY6UkRGIj09PWV9O3IucHJvdG90eXBlLm9uZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPXt9LHI9cyhjLHRoaXMuZG9tKTtyJiYoImZlZWQiPT09ci5uYW1lPyh0PXIuY2hpbGRyZW4sbi50eXBlPSJhdG9tIixhKG4sImlkIiwiaWQiLHQpLGEobiwidGl0bGUiLCJ0aXRsZSIsdCksKGU9cygibGluayIsdCkpJiYoZT1lLmF0dHJpYnMpJiYoZT1lLmhyZWYpJiYobi5saW5rPWUpLGEobiwiZGVzY3JpcHRpb24iLCJzdWJ0aXRsZSIsdCksKGU9aSgidXBkYXRlZCIsdCkpJiYobi51cGRhdGVkPW5ldyBEYXRlKGUpKSxhKG4sImF1dGhvciIsImVtYWlsIix0LCEwKSxuLml0ZW1zPW8oImVudHJ5Iix0KS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQsbj17fTtyZXR1cm4gZT1lLmNoaWxkcmVuLGEobiwiaWQiLCJpZCIsZSksYShuLCJ0aXRsZSIsInRpdGxlIixlKSwodD1zKCJsaW5rIixlKSkmJih0PXQuYXR0cmlicykmJih0PXQuaHJlZikmJihuLmxpbms9dCksKHQ9aSgic3VtbWFyeSIsZSl8fGkoImNvbnRlbnQiLGUpKSYmKG4uZGVzY3JpcHRpb249dCksKHQ9aSgidXBkYXRlZCIsZSkpJiYobi5wdWJEYXRlPW5ldyBEYXRlKHQpKSxufSkpOih0PXMoImNoYW5uZWwiLHIuY2hpbGRyZW4pLmNoaWxkcmVuLG4udHlwZT1yLm5hbWUuc3Vic3RyKDAsMyksbi5pZD0iIixhKG4sInRpdGxlIiwidGl0bGUiLHQpLGEobiwibGluayIsImxpbmsiLHQpLGEobiwiZGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsdCksKGU9aSgibGFzdEJ1aWxkRGF0ZSIsdCkpJiYobi51cGRhdGVkPW5ldyBEYXRlKGUpKSxhKG4sImF1dGhvciIsIm1hbmFnaW5nRWRpdG9yIix0LCEwKSxuLml0ZW1zPW8oIml0ZW0iLHIuY2hpbGRyZW4pLm1hcChmdW5jdGlvbihlKXt2YXIgdCxuPXt9O3JldHVybiBlPWUuY2hpbGRyZW4sYShuLCJpZCIsImd1aWQiLGUpLGEobiwidGl0bGUiLCJ0aXRsZSIsZSksYShuLCJsaW5rIiwibGluayIsZSksYShuLCJkZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIixlKSwodD1pKCJwdWJEYXRlIixlKSkmJihuLnB1YkRhdGU9bmV3IERhdGUodCkpLG59KSkpLHRoaXMuZG9tPW4sbC5wcm90b3R5cGUuX2hhbmRsZUNhbGxiYWNrLmNhbGwodGhpcyxyP251bGw6RXJyb3IoImNvdWxkbid0IGZpbmQgcm9vdCBvZiBmZWVkIikpfSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9QYXJzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dGhpcy5fb3B0aW9ucz10fHx7fSx0aGlzLl9jYnM9ZXx8e30sdGhpcy5fdGFnbmFtZT0iIix0aGlzLl9hdHRyaWJuYW1lPSIiLHRoaXMuX2F0dHJpYnZhbHVlPSIiLHRoaXMuX2F0dHJpYnM9bnVsbCx0aGlzLl9zdGFjaz1bXSx0aGlzLl9mb3JlaWduQ29udGV4dD1bXSx0aGlzLnN0YXJ0SW5kZXg9MCx0aGlzLmVuZEluZGV4PW51bGwsdGhpcy5fbG93ZXJDYXNlVGFnTmFtZXM9Imxvd2VyQ2FzZVRhZ3MiaW4gdGhpcy5fb3B0aW9ucz8hIXRoaXMuX29wdGlvbnMubG93ZXJDYXNlVGFnczohdGhpcy5fb3B0aW9ucy54bWxNb2RlLHRoaXMuX2xvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzPSJsb3dlckNhc2VBdHRyaWJ1dGVOYW1lcyJpbiB0aGlzLl9vcHRpb25zPyEhdGhpcy5fb3B0aW9ucy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lczohdGhpcy5fb3B0aW9ucy54bWxNb2RlLHRoaXMuX29wdGlvbnMuVG9rZW5pemVyJiYobz10aGlzLl9vcHRpb25zLlRva2VuaXplciksdGhpcy5fdG9rZW5pemVyPW5ldyBvKHRoaXMuX29wdGlvbnMsdGhpcyksdGhpcy5fY2JzLm9ucGFyc2VyaW5pdCYmdGhpcy5fY2JzLm9ucGFyc2VyaW5pdCh0aGlzKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvVG9rZW5pemVyLmpzIikscz17aW5wdXQ6ITAsb3B0aW9uOiEwLG9wdGdyb3VwOiEwLHNlbGVjdDohMCxidXR0b246ITAsZGF0YWxpc3Q6ITAsdGV4dGFyZWE6ITB9LGk9e3RyOnt0cjohMCx0aDohMCx0ZDohMH0sdGg6e3RoOiEwfSx0ZDp7dGhlYWQ6ITAsdGg6ITAsdGQ6ITB9LGJvZHk6e2hlYWQ6ITAsbGluazohMCxzY3JpcHQ6ITB9LGxpOntsaTohMH0scDp7cDohMH0saDE6e3A6ITB9LGgyOntwOiEwfSxoMzp7cDohMH0saDQ6e3A6ITB9LGg1OntwOiEwfSxoNjp7cDohMH0sc2VsZWN0OnMsaW5wdXQ6cyxvdXRwdXQ6cyxidXR0b246cyxkYXRhbGlzdDpzLHRleHRhcmVhOnMsb3B0aW9uOntvcHRpb246ITB9LG9wdGdyb3VwOntvcHRncm91cDohMH19LGE9e19fcHJvdG9fXzpudWxsLGFyZWE6ITAsYmFzZTohMCxiYXNlZm9udDohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsaXNpbmRleDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGw9e19fcHJvdG9fXzpudWxsLG1hdGg6ITAsc3ZnOiEwfSx1PXtfX3Byb3RvX186bnVsbCxtaTohMCxtbzohMCxtbjohMCxtczohMCxtdGV4dDohMCwiYW5ub3RhdGlvbi14bWwiOiEwLGZvcmVpZ25PYmplY3Q6ITAsZGVzYzohMCx0aXRsZTohMH0sYz0vXHN8XC8vO24oIi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShyLG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIikuRXZlbnRFbWl0dGVyKSxyLnByb3RvdHlwZS5fdXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuZW5kSW5kZXg/dGhpcy5fdG9rZW5pemVyLl9zZWN0aW9uU3RhcnQ8PWU/dGhpcy5zdGFydEluZGV4PTA6dGhpcy5zdGFydEluZGV4PXRoaXMuX3Rva2VuaXplci5fc2VjdGlvblN0YXJ0LWU6dGhpcy5zdGFydEluZGV4PXRoaXMuZW5kSW5kZXgrMSx0aGlzLmVuZEluZGV4PXRoaXMuX3Rva2VuaXplci5nZXRBYnNvbHV0ZUluZGV4KCl9LHIucHJvdG90eXBlLm9udGV4dD1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGVQb3NpdGlvbigxKSx0aGlzLmVuZEluZGV4LS0sdGhpcy5fY2JzLm9udGV4dCYmdGhpcy5fY2JzLm9udGV4dChlKX0sci5wcm90b3R5cGUub25vcGVudGFnbmFtZT1mdW5jdGlvbihlKXtpZih0aGlzLl9sb3dlckNhc2VUYWdOYW1lcyYmKGU9ZS50b0xvd2VyQ2FzZSgpKSx0aGlzLl90YWduYW1lPWUsIXRoaXMuX29wdGlvbnMueG1sTW9kZSYmZSBpbiBpKWZvcih2YXIgdDsodD10aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0paW4gaVtlXTt0aGlzLm9uY2xvc2V0YWcodCkpOyF0aGlzLl9vcHRpb25zLnhtbE1vZGUmJmUgaW4gYXx8KHRoaXMuX3N0YWNrLnB1c2goZSksZSBpbiBsP3RoaXMuX2ZvcmVpZ25Db250ZXh0LnB1c2goITApOmUgaW4gdSYmdGhpcy5fZm9yZWlnbkNvbnRleHQucHVzaCghMSkpLHRoaXMuX2Nicy5vbm9wZW50YWduYW1lJiZ0aGlzLl9jYnMub25vcGVudGFnbmFtZShlKSx0aGlzLl9jYnMub25vcGVudGFnJiYodGhpcy5fYXR0cmlicz17fSl9LHIucHJvdG90eXBlLm9ub3BlbnRhZ2VuZD1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVBvc2l0aW9uKDEpLHRoaXMuX2F0dHJpYnMmJih0aGlzLl9jYnMub25vcGVudGFnJiZ0aGlzLl9jYnMub25vcGVudGFnKHRoaXMuX3RhZ25hbWUsdGhpcy5fYXR0cmlicyksdGhpcy5fYXR0cmlicz1udWxsKSwhdGhpcy5fb3B0aW9ucy54bWxNb2RlJiZ0aGlzLl9jYnMub25jbG9zZXRhZyYmdGhpcy5fdGFnbmFtZSBpbiBhJiZ0aGlzLl9jYnMub25jbG9zZXRhZyh0aGlzLl90YWduYW1lKSx0aGlzLl90YWduYW1lPSIifSxyLnByb3RvdHlwZS5vbmNsb3NldGFnPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKDEpLHRoaXMuX2xvd2VyQ2FzZVRhZ05hbWVzJiYoZT1lLnRvTG93ZXJDYXNlKCkpLChlIGluIGx8fGUgaW4gdSkmJnRoaXMuX2ZvcmVpZ25Db250ZXh0LnBvcCgpLCF0aGlzLl9zdGFjay5sZW5ndGh8fGUgaW4gYSYmIXRoaXMuX29wdGlvbnMueG1sTW9kZSl0aGlzLl9vcHRpb25zLnhtbE1vZGV8fCJiciIhPT1lJiYicCIhPT1lfHwodGhpcy5vbm9wZW50YWduYW1lKGUpLHRoaXMuX2Nsb3NlQ3VycmVudFRhZygpKTtlbHNle3ZhciB0PXRoaXMuX3N0YWNrLmxhc3RJbmRleE9mKGUpO2lmKC0xIT09dClpZih0aGlzLl9jYnMub25jbG9zZXRhZylmb3IodD10aGlzLl9zdGFjay5sZW5ndGgtdDt0LS07KXRoaXMuX2Nicy5vbmNsb3NldGFnKHRoaXMuX3N0YWNrLnBvcCgpKTtlbHNlIHRoaXMuX3N0YWNrLmxlbmd0aD10O2Vsc2UicCIhPT1lfHx0aGlzLl9vcHRpb25zLnhtbE1vZGV8fCh0aGlzLm9ub3BlbnRhZ25hbWUoZSksdGhpcy5fY2xvc2VDdXJyZW50VGFnKCkpfX0sci5wcm90b3R5cGUub25zZWxmY2xvc2luZ3RhZz1mdW5jdGlvbigpe3RoaXMuX29wdGlvbnMueG1sTW9kZXx8dGhpcy5fb3B0aW9ucy5yZWNvZ25pemVTZWxmQ2xvc2luZ3x8dGhpcy5fZm9yZWlnbkNvbnRleHRbdGhpcy5fZm9yZWlnbkNvbnRleHQubGVuZ3RoLTFdP3RoaXMuX2Nsb3NlQ3VycmVudFRhZygpOnRoaXMub25vcGVudGFnZW5kKCl9LHIucHJvdG90eXBlLl9jbG9zZUN1cnJlbnRUYWc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90YWduYW1lO3RoaXMub25vcGVudGFnZW5kKCksdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdPT09ZSYmKHRoaXMuX2Nicy5vbmNsb3NldGFnJiZ0aGlzLl9jYnMub25jbG9zZXRhZyhlKSx0aGlzLl9zdGFjay5wb3AoKSl9LHIucHJvdG90eXBlLm9uYXR0cmlibmFtZT1mdW5jdGlvbihlKXt0aGlzLl9sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcyYmKGU9ZS50b0xvd2VyQ2FzZSgpKSx0aGlzLl9hdHRyaWJuYW1lPWV9LHIucHJvdG90eXBlLm9uYXR0cmliZGF0YT1mdW5jdGlvbihlKXt0aGlzLl9hdHRyaWJ2YWx1ZSs9ZX0sci5wcm90b3R5cGUub25hdHRyaWJlbmQ9ZnVuY3Rpb24oKXt0aGlzLl9jYnMub25hdHRyaWJ1dGUmJnRoaXMuX2Nicy5vbmF0dHJpYnV0ZSh0aGlzLl9hdHRyaWJuYW1lLHRoaXMuX2F0dHJpYnZhbHVlKSx0aGlzLl9hdHRyaWJzJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2F0dHJpYnMsdGhpcy5fYXR0cmlibmFtZSkmJih0aGlzLl9hdHRyaWJzW3RoaXMuX2F0dHJpYm5hbWVdPXRoaXMuX2F0dHJpYnZhbHVlKSx0aGlzLl9hdHRyaWJuYW1lPSIiLHRoaXMuX2F0dHJpYnZhbHVlPSIifSxyLnByb3RvdHlwZS5fZ2V0SW5zdHJ1Y3Rpb25OYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VhcmNoKGMpLG49dDwwP2U6ZS5zdWJzdHIoMCx0KTtyZXR1cm4gdGhpcy5fbG93ZXJDYXNlVGFnTmFtZXMmJihuPW4udG9Mb3dlckNhc2UoKSksbn0sci5wcm90b3R5cGUub25kZWNsYXJhdGlvbj1mdW5jdGlvbihlKXtpZih0aGlzLl9jYnMub25wcm9jZXNzaW5naW5zdHJ1Y3Rpb24pe3ZhciB0PXRoaXMuX2dldEluc3RydWN0aW9uTmFtZShlKTt0aGlzLl9jYnMub25wcm9jZXNzaW5naW5zdHJ1Y3Rpb24oIiEiK3QsIiEiK2UpfX0sci5wcm90b3R5cGUub25wcm9jZXNzaW5naW5zdHJ1Y3Rpb249ZnVuY3Rpb24oZSl7aWYodGhpcy5fY2JzLm9ucHJvY2Vzc2luZ2luc3RydWN0aW9uKXt2YXIgdD10aGlzLl9nZXRJbnN0cnVjdGlvbk5hbWUoZSk7dGhpcy5fY2JzLm9ucHJvY2Vzc2luZ2luc3RydWN0aW9uKCI/Iit0LCI/IitlKX19LHIucHJvdG90eXBlLm9uY29tbWVudD1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGVQb3NpdGlvbig0KSx0aGlzLl9jYnMub25jb21tZW50JiZ0aGlzLl9jYnMub25jb21tZW50KGUpLHRoaXMuX2Nicy5vbmNvbW1lbnRlbmQmJnRoaXMuX2Nicy5vbmNvbW1lbnRlbmQoKX0sci5wcm90b3R5cGUub25jZGF0YT1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGVQb3NpdGlvbigxKSx0aGlzLl9vcHRpb25zLnhtbE1vZGV8fHRoaXMuX29wdGlvbnMucmVjb2duaXplQ0RBVEE/KHRoaXMuX2Nicy5vbmNkYXRhc3RhcnQmJnRoaXMuX2Nicy5vbmNkYXRhc3RhcnQoKSx0aGlzLl9jYnMub250ZXh0JiZ0aGlzLl9jYnMub250ZXh0KGUpLHRoaXMuX2Nicy5vbmNkYXRhZW5kJiZ0aGlzLl9jYnMub25jZGF0YWVuZCgpKTp0aGlzLm9uY29tbWVudCgiW0NEQVRBWyIrZSsiXV0iKX0sci5wcm90b3R5cGUub25lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl9jYnMub25lcnJvciYmdGhpcy5fY2JzLm9uZXJyb3IoZSl9LHIucHJvdG90eXBlLm9uZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5fY2JzLm9uY2xvc2V0YWcpZm9yKHZhciBlPXRoaXMuX3N0YWNrLmxlbmd0aDtlPjA7dGhpcy5fY2JzLm9uY2xvc2V0YWcodGhpcy5fc3RhY2tbLS1lXSkpO3RoaXMuX2Nicy5vbmVuZCYmdGhpcy5fY2JzLm9uZW5kKCl9LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY2JzLm9ucmVzZXQmJnRoaXMuX2Nicy5vbnJlc2V0KCksdGhpcy5fdG9rZW5pemVyLnJlc2V0KCksdGhpcy5fdGFnbmFtZT0iIix0aGlzLl9hdHRyaWJuYW1lPSIiLHRoaXMuX2F0dHJpYnM9bnVsbCx0aGlzLl9zdGFjaz1bXSx0aGlzLl9jYnMub25wYXJzZXJpbml0JiZ0aGlzLl9jYnMub25wYXJzZXJpbml0KHRoaXMpfSxyLnByb3RvdHlwZS5wYXJzZUNvbXBsZXRlPWZ1bmN0aW9uKGUpe3RoaXMucmVzZXQoKSx0aGlzLmVuZChlKX0sci5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7dGhpcy5fdG9rZW5pemVyLndyaXRlKGUpfSxyLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7dGhpcy5fdG9rZW5pemVyLmVuZChlKX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl90b2tlbml6ZXIucGF1c2UoKX0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dGhpcy5fdG9rZW5pemVyLnJlc3VtZSgpfSxyLnByb3RvdHlwZS5wYXJzZUNodW5rPXIucHJvdG90eXBlLndyaXRlLHIucHJvdG90eXBlLmRvbmU9ci5wcm90b3R5cGUuZW5kLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL1Byb3h5SGFuZGxlci5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dGhpcy5fY2JzPWV8fHt9fWUuZXhwb3J0cz1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9pbmRleC5qcyIpLkVWRU5UUztPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKDA9PT1vW2VdKWU9Im9uIitlLHIucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dGhpcy5fY2JzW2VdJiZ0aGlzLl9jYnNbZV0oKX07ZWxzZSBpZigxPT09b1tlXSllPSJvbiIrZSxyLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0KXt0aGlzLl9jYnNbZV0mJnRoaXMuX2Nic1tlXSh0KX07ZWxzZXtpZigyIT09b1tlXSl0aHJvdyBFcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpO2U9Im9uIitlLHIucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7dGhpcy5fY2JzW2VdJiZ0aGlzLl9jYnNbZV0odCxuKX19fSl9LCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvU3RyZWFtLmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtzLmNhbGwodGhpcyxuZXcgbyh0aGlzKSxlKX1mdW5jdGlvbiBvKGUpe3RoaXMuc2NvcGU9ZX1lLmV4cG9ydHM9cjt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvV3JpdGFibGVTdHJlYW0uanMiKTtuKCIuL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikocixzKSxyLnByb3RvdHlwZS5yZWFkYWJsZT0hMDt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvaW5kZXguanMiKS5FVkVOVFM7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZigwPT09aVtlXSlvLnByb3RvdHlwZVsib24iK2VdPWZ1bmN0aW9uKCl7dGhpcy5zY29wZS5lbWl0KGUpfTtlbHNlIGlmKDE9PT1pW2VdKW8ucHJvdG90eXBlWyJvbiIrZV09ZnVuY3Rpb24odCl7dGhpcy5zY29wZS5lbWl0KGUsdCl9O2Vsc2V7aWYoMiE9PWlbZV0pdGhyb3cgRXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMhIik7by5wcm90b3R5cGVbIm9uIitlXT1mdW5jdGlvbih0LG4pe3RoaXMuc2NvcGUuZW1pdChlLHQsbil9fX0pfSwiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL1Rva2VuaXplci5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfHwiXGYiPT09ZXx8IlxyIj09PWV9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBlPT09cj9mdW5jdGlvbihlKXtlPT09cj90aGlzLl9zdGF0ZT10Oih0aGlzLl9zdGF0ZT1uLHRoaXMuX2luZGV4LS0pfTpmdW5jdGlvbihvKXtvPT09cnx8bz09PWU/dGhpcy5fc3RhdGU9dDoodGhpcy5fc3RhdGU9bix0aGlzLl9pbmRleC0tKX19ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gZnVuY3Rpb24ocil7cj09PW58fHI9PT1lP3RoaXMuX3N0YXRlPXQ6KHRoaXMuX3N0YXRlPWYsdGhpcy5faW5kZXgtLSl9fWZ1bmN0aW9uIGkoZSx0KXt0aGlzLl9zdGF0ZT1fLHRoaXMuX2J1ZmZlcj0iIix0aGlzLl9zZWN0aW9uU3RhcnQ9MCx0aGlzLl9pbmRleD0wLHRoaXMuX2J1ZmZlck9mZnNldD0wLHRoaXMuX2Jhc2VTdGF0ZT1fLHRoaXMuX3NwZWNpYWw9ZmUsdGhpcy5fY2JzPXQsdGhpcy5fcnVubmluZz0hMCx0aGlzLl9lbmRlZD0hMSx0aGlzLl94bWxNb2RlPSEoIWV8fCFlLnhtbE1vZGUpLHRoaXMuX2RlY29kZUVudGl0aWVzPSEoIWV8fCFlLmRlY29kZUVudGl0aWVzKX1lLmV4cG9ydHM9aTt2YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZGVjb2RlX2NvZGVwb2ludC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvZW50aXRpZXMvbWFwcy9lbnRpdGllcy5qc29uIiksdT1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL2xlZ2FjeS5qc29uIiksYz1uKCIuL25vZGVfbW9kdWxlcy9lbnRpdGllcy9tYXBzL3htbC5qc29uIiksZD0wLF89ZCsrLHA9ZCsrLGY9ZCsrLG09ZCsrLGg9ZCsrLGc9ZCsrLGI9ZCsrLEU9ZCsrLHk9ZCsrLHY9ZCsrLFQ9ZCsrLEE9ZCsrLEM9ZCsrLE89ZCsrLFM9ZCsrLFI9ZCsrLGo9ZCsrLHg9ZCsrLEw9ZCsrLEQ9ZCsrLHc9ZCsrLE09ZCsrLGs9ZCsrLEk9ZCsrLFA9ZCsrLE49ZCsrLEg9ZCsrLEY9ZCsrLEI9ZCsrLFU9ZCsrLEc9ZCsrLHo9ZCsrLFY9ZCsrLFc9ZCsrLFk9ZCsrLHE9ZCsrLEs9ZCsrLFg9ZCsrLCQ9ZCsrLFE9ZCsrLEo9ZCsrLFo9ZCsrLGVlPWQrKyx0ZT1kKyssbmU9ZCsrLHJlPWQrKyxvZT1kKyssc2U9ZCsrLGllPWQrKyxhZT1kKyssbGU9ZCsrLHVlPWQrKyxjZT1kKyssZGU9ZCsrLF9lPWQrKyxwZT0wLGZlPXBlKyssbWU9cGUrKyxoZT1wZSsrO2kucHJvdG90eXBlLl9zdGF0ZVRleHQ9ZnVuY3Rpb24oZSl7IjwiPT09ZT8odGhpcy5faW5kZXg+dGhpcy5fc2VjdGlvblN0YXJ0JiZ0aGlzLl9jYnMub250ZXh0KHRoaXMuX2dldFNlY3Rpb24oKSksdGhpcy5fc3RhdGU9cCx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgpOnRoaXMuX2RlY29kZUVudGl0aWVzJiZ0aGlzLl9zcGVjaWFsPT09ZmUmJiImIj09PWUmJih0aGlzLl9pbmRleD50aGlzLl9zZWN0aW9uU3RhcnQmJnRoaXMuX2Nicy5vbnRleHQodGhpcy5fZ2V0U2VjdGlvbigpKSx0aGlzLl9iYXNlU3RhdGU9Xyx0aGlzLl9zdGF0ZT1sZSx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgpfSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVUYWdOYW1lPWZ1bmN0aW9uKGUpeyIvIj09PWU/dGhpcy5fc3RhdGU9aDoiPCI9PT1lPyh0aGlzLl9jYnMub250ZXh0KHRoaXMuX2dldFNlY3Rpb24oKSksdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KToiPiI9PT1lfHx0aGlzLl9zcGVjaWFsIT09ZmV8fHIoZSk/dGhpcy5fc3RhdGU9XzoiISI9PT1lPyh0aGlzLl9zdGF0ZT1TLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCsxKToiPyI9PT1lPyh0aGlzLl9zdGF0ZT1qLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCsxKToodGhpcy5fc3RhdGU9dGhpcy5feG1sTW9kZXx8InMiIT09ZSYmIlMiIT09ZT9mOkcsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KX0saS5wcm90b3R5cGUuX3N0YXRlSW5UYWdOYW1lPWZ1bmN0aW9uKGUpeygiLyI9PT1lfHwiPiI9PT1lfHxyKGUpKSYmKHRoaXMuX2VtaXRUb2tlbigib25vcGVudGFnbmFtZSIpLHRoaXMuX3N0YXRlPUUsdGhpcy5faW5kZXgtLSl9LGkucHJvdG90eXBlLl9zdGF0ZUJlZm9yZUNsb3NlaW5nVGFnTmFtZT1mdW5jdGlvbihlKXtyKGUpfHwoIj4iPT09ZT90aGlzLl9zdGF0ZT1fOnRoaXMuX3NwZWNpYWwhPT1mZT8icyI9PT1lfHwiUyI9PT1lP3RoaXMuX3N0YXRlPXo6KHRoaXMuX3N0YXRlPV8sdGhpcy5faW5kZXgtLSk6KHRoaXMuX3N0YXRlPWcsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KSl9LGkucHJvdG90eXBlLl9zdGF0ZUluQ2xvc2VpbmdUYWdOYW1lPWZ1bmN0aW9uKGUpeygiPiI9PT1lfHxyKGUpKSYmKHRoaXMuX2VtaXRUb2tlbigib25jbG9zZXRhZyIpLHRoaXMuX3N0YXRlPWIsdGhpcy5faW5kZXgtLSl9LGkucHJvdG90eXBlLl9zdGF0ZUFmdGVyQ2xvc2VpbmdUYWdOYW1lPWZ1bmN0aW9uKGUpeyI+Ij09PWUmJih0aGlzLl9zdGF0ZT1fLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCsxKX0saS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZT1mdW5jdGlvbihlKXsiPiI9PT1lPyh0aGlzLl9jYnMub25vcGVudGFnZW5kKCksdGhpcy5fc3RhdGU9Xyx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgrMSk6Ii8iPT09ZT90aGlzLl9zdGF0ZT1tOnIoZSl8fCh0aGlzLl9zdGF0ZT15LHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCl9LGkucHJvdG90eXBlLl9zdGF0ZUluU2VsZkNsb3NpbmdUYWc9ZnVuY3Rpb24oZSl7Ij4iPT09ZT8odGhpcy5fY2JzLm9uc2VsZmNsb3Npbmd0YWcoKSx0aGlzLl9zdGF0ZT1fLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCsxKTpyKGUpfHwodGhpcy5fc3RhdGU9RSx0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX3N0YXRlSW5BdHRyaWJ1dGVOYW1lPWZ1bmN0aW9uKGUpeygiPSI9PT1lfHwiLyI9PT1lfHwiPiI9PT1lfHxyKGUpKSYmKHRoaXMuX2Nicy5vbmF0dHJpYm5hbWUodGhpcy5fZ2V0U2VjdGlvbigpKSx0aGlzLl9zZWN0aW9uU3RhcnQ9LTEsdGhpcy5fc3RhdGU9dix0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJBdHRyaWJ1dGVOYW1lPWZ1bmN0aW9uKGUpeyI9Ij09PWU/dGhpcy5fc3RhdGU9VDoiLyI9PT1lfHwiPiI9PT1lPyh0aGlzLl9jYnMub25hdHRyaWJlbmQoKSx0aGlzLl9zdGF0ZT1FLHRoaXMuX2luZGV4LS0pOnIoZSl8fCh0aGlzLl9jYnMub25hdHRyaWJlbmQoKSx0aGlzLl9zdGF0ZT15LHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCl9LGkucHJvdG90eXBlLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKGUpeyciJz09PWU/KHRoaXMuX3N0YXRlPUEsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KzEpOiInIj09PWU/KHRoaXMuX3N0YXRlPUMsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KzEpOnIoZSl8fCh0aGlzLl9zdGF0ZT1PLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCx0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX3N0YXRlSW5BdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3Rlcz1mdW5jdGlvbihlKXsnIic9PT1lPyh0aGlzLl9lbWl0VG9rZW4oIm9uYXR0cmliZGF0YSIpLHRoaXMuX2Nicy5vbmF0dHJpYmVuZCgpLHRoaXMuX3N0YXRlPUUpOnRoaXMuX2RlY29kZUVudGl0aWVzJiYiJiI9PT1lJiYodGhpcy5fZW1pdFRva2VuKCJvbmF0dHJpYmRhdGEiKSx0aGlzLl9iYXNlU3RhdGU9dGhpcy5fc3RhdGUsdGhpcy5fc3RhdGU9bGUsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KX0saS5wcm90b3R5cGUuX3N0YXRlSW5BdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3Rlcz1mdW5jdGlvbihlKXsiJyI9PT1lPyh0aGlzLl9lbWl0VG9rZW4oIm9uYXR0cmliZGF0YSIpLHRoaXMuX2Nicy5vbmF0dHJpYmVuZCgpLHRoaXMuX3N0YXRlPUUpOnRoaXMuX2RlY29kZUVudGl0aWVzJiYiJiI9PT1lJiYodGhpcy5fZW1pdFRva2VuKCJvbmF0dHJpYmRhdGEiKSx0aGlzLl9iYXNlU3RhdGU9dGhpcy5fc3RhdGUsdGhpcy5fc3RhdGU9bGUsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KX0saS5wcm90b3R5cGUuX3N0YXRlSW5BdHRyaWJ1dGVWYWx1ZU5vUXVvdGVzPWZ1bmN0aW9uKGUpe3IoZSl8fCI+Ij09PWU/KHRoaXMuX2VtaXRUb2tlbigib25hdHRyaWJkYXRhIiksdGhpcy5fY2JzLm9uYXR0cmliZW5kKCksdGhpcy5fc3RhdGU9RSx0aGlzLl9pbmRleC0tKTp0aGlzLl9kZWNvZGVFbnRpdGllcyYmIiYiPT09ZSYmKHRoaXMuX2VtaXRUb2tlbigib25hdHRyaWJkYXRhIiksdGhpcy5fYmFzZVN0YXRlPXRoaXMuX3N0YXRlLHRoaXMuX3N0YXRlPWxlLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCl9LGkucHJvdG90eXBlLl9zdGF0ZUJlZm9yZURlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3RoaXMuX3N0YXRlPSJbIj09PWU/TToiLSI9PT1lP3g6Un0saS5wcm90b3R5cGUuX3N0YXRlSW5EZWNsYXJhdGlvbj1mdW5jdGlvbihlKXsiPiI9PT1lJiYodGhpcy5fY2JzLm9uZGVjbGFyYXRpb24odGhpcy5fZ2V0U2VjdGlvbigpKSx0aGlzLl9zdGF0ZT1fLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleCsxKX0saS5wcm90b3R5cGUuX3N0YXRlSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb249ZnVuY3Rpb24oZSl7Ij4iPT09ZSYmKHRoaXMuX2Nicy5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbih0aGlzLl9nZXRTZWN0aW9uKCkpLHRoaXMuX3N0YXRlPV8sdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KzEpfSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDb21tZW50PWZ1bmN0aW9uKGUpeyItIj09PWU/KHRoaXMuX3N0YXRlPUwsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KzEpOnRoaXMuX3N0YXRlPVJ9LGkucHJvdG90eXBlLl9zdGF0ZUluQ29tbWVudD1mdW5jdGlvbihlKXsiLSI9PT1lJiYodGhpcy5fc3RhdGU9RCl9LGkucHJvdG90eXBlLl9zdGF0ZUFmdGVyQ29tbWVudDE9ZnVuY3Rpb24oZSl7dGhpcy5fc3RhdGU9Ii0iPT09ZT93Okx9LGkucHJvdG90eXBlLl9zdGF0ZUFmdGVyQ29tbWVudDI9ZnVuY3Rpb24oZSl7Ij4iPT09ZT8odGhpcy5fY2JzLm9uY29tbWVudCh0aGlzLl9idWZmZXIuc3Vic3RyaW5nKHRoaXMuX3NlY3Rpb25TdGFydCx0aGlzLl9pbmRleC0yKSksdGhpcy5fc3RhdGU9Xyx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgrMSk6Ii0iIT09ZSYmKHRoaXMuX3N0YXRlPUwpfSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTE9bygiQyIsayxSKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTI9bygiRCIsSSxSKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTM9bygiQSIsUCxSKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTQ9bygiVCIsTixSKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTU9bygiQSIsSCxSKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVDZGF0YTY9ZnVuY3Rpb24oZSl7IlsiPT09ZT8odGhpcy5fc3RhdGU9Rix0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgrMSk6KHRoaXMuX3N0YXRlPVIsdGhpcy5faW5kZXgtLSl9LGkucHJvdG90eXBlLl9zdGF0ZUluQ2RhdGE9ZnVuY3Rpb24oZSl7Il0iPT09ZSYmKHRoaXMuX3N0YXRlPUIpfSxpLnByb3RvdHlwZS5fc3RhdGVBZnRlckNkYXRhMT1mdW5jdGlvbihlKXt0aGlzLl9zdGF0ZT0iXSI9PT1lP1U6Rn0saS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJDZGF0YTI9ZnVuY3Rpb24oZSl7Ij4iPT09ZT8odGhpcy5fY2JzLm9uY2RhdGEodGhpcy5fYnVmZmVyLnN1YnN0cmluZyh0aGlzLl9zZWN0aW9uU3RhcnQsdGhpcy5faW5kZXgtMikpLHRoaXMuX3N0YXRlPV8sdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4KzEpOiJdIiE9PWUmJih0aGlzLl9zdGF0ZT1GKX0saS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlU3BlY2lhbD1mdW5jdGlvbihlKXsiYyI9PT1lfHwiQyI9PT1lP3RoaXMuX3N0YXRlPVY6InQiPT09ZXx8IlQiPT09ZT90aGlzLl9zdGF0ZT1lZToodGhpcy5fc3RhdGU9Zix0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlU3BlY2lhbEVuZD1mdW5jdGlvbihlKXt0aGlzLl9zcGVjaWFsIT09bWV8fCJjIiE9PWUmJiJDIiE9PWU/dGhpcy5fc3BlY2lhbCE9PWhlfHwidCIhPT1lJiYiVCIhPT1lP3RoaXMuX3N0YXRlPV86dGhpcy5fc3RhdGU9b2U6dGhpcy5fc3RhdGU9WH0saS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlU2NyaXB0MT1zKCJSIixXKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVTY3JpcHQyPXMoIkkiLFkpLGkucHJvdG90eXBlLl9zdGF0ZUJlZm9yZVNjcmlwdDM9cygiUCIscSksaS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlU2NyaXB0ND1zKCJUIixLKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVTY3JpcHQ1PWZ1bmN0aW9uKGUpeygiLyI9PT1lfHwiPiI9PT1lfHxyKGUpKSYmKHRoaXMuX3NwZWNpYWw9bWUpLHRoaXMuX3N0YXRlPWYsdGhpcy5faW5kZXgtLX0saS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJTY3JpcHQxPW8oIlIiLCQsXyksaS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJTY3JpcHQyPW8oIkkiLFEsXyksaS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJTY3JpcHQzPW8oIlAiLEosXyksaS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJTY3JpcHQ0PW8oIlQiLFosXyksaS5wcm90b3R5cGUuX3N0YXRlQWZ0ZXJTY3JpcHQ1PWZ1bmN0aW9uKGUpeyI+Ij09PWV8fHIoZSk/KHRoaXMuX3NwZWNpYWw9ZmUsdGhpcy5fc3RhdGU9Zyx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgtNix0aGlzLl9pbmRleC0tKTp0aGlzLl9zdGF0ZT1ffSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVTdHlsZTE9cygiWSIsdGUpLGkucHJvdG90eXBlLl9zdGF0ZUJlZm9yZVN0eWxlMj1zKCJMIixuZSksaS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlU3R5bGUzPXMoIkUiLHJlKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVTdHlsZTQ9ZnVuY3Rpb24oZSl7KCIvIj09PWV8fCI+Ij09PWV8fHIoZSkpJiYodGhpcy5fc3BlY2lhbD1oZSksdGhpcy5fc3RhdGU9Zix0aGlzLl9pbmRleC0tfSxpLnByb3RvdHlwZS5fc3RhdGVBZnRlclN0eWxlMT1vKCJZIixzZSxfKSxpLnByb3RvdHlwZS5fc3RhdGVBZnRlclN0eWxlMj1vKCJMIixpZSxfKSxpLnByb3RvdHlwZS5fc3RhdGVBZnRlclN0eWxlMz1vKCJFIixhZSxfKSxpLnByb3RvdHlwZS5fc3RhdGVBZnRlclN0eWxlND1mdW5jdGlvbihlKXsiPiI9PT1lfHxyKGUpPyh0aGlzLl9zcGVjaWFsPWZlLHRoaXMuX3N0YXRlPWcsdGhpcy5fc2VjdGlvblN0YXJ0PXRoaXMuX2luZGV4LTUsdGhpcy5faW5kZXgtLSk6dGhpcy5fc3RhdGU9X30saS5wcm90b3R5cGUuX3N0YXRlQmVmb3JlRW50aXR5PW8oIiMiLHVlLGNlKSxpLnByb3RvdHlwZS5fc3RhdGVCZWZvcmVOdW1lcmljRW50aXR5PW8oIlgiLF9lLGRlKSxpLnByb3RvdHlwZS5fcGFyc2VOYW1lZEVudGl0eVN0cmljdD1mdW5jdGlvbigpe2lmKHRoaXMuX3NlY3Rpb25TdGFydCsxPHRoaXMuX2luZGV4KXt2YXIgZT10aGlzLl9idWZmZXIuc3Vic3RyaW5nKHRoaXMuX3NlY3Rpb25TdGFydCsxLHRoaXMuX2luZGV4KSx0PXRoaXMuX3htbE1vZGU/YzpsO3QuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLl9lbWl0UGFydGlhbCh0W2VdKSx0aGlzLl9zZWN0aW9uU3RhcnQ9dGhpcy5faW5kZXgrMSl9fSxpLnByb3RvdHlwZS5fcGFyc2VMZWdhY3lFbnRpdHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWN0aW9uU3RhcnQrMSx0PXRoaXMuX2luZGV4LWU7Zm9yKHQ+NiYmKHQ9Nik7dD49Mjspe3ZhciBuPXRoaXMuX2J1ZmZlci5zdWJzdHIoZSx0KTtpZih1Lmhhc093blByb3BlcnR5KG4pKXJldHVybiB0aGlzLl9lbWl0UGFydGlhbCh1W25dKSx2b2lkKHRoaXMuX3NlY3Rpb25TdGFydCs9dCsxKTt0LS19fSxpLnByb3RvdHlwZS5fc3RhdGVJbk5hbWVkRW50aXR5PWZ1bmN0aW9uKGUpeyI7Ij09PWU/KHRoaXMuX3BhcnNlTmFtZWRFbnRpdHlTdHJpY3QoKSx0aGlzLl9zZWN0aW9uU3RhcnQrMTx0aGlzLl9pbmRleCYmIXRoaXMuX3htbE1vZGUmJnRoaXMuX3BhcnNlTGVnYWN5RW50aXR5KCksdGhpcy5fc3RhdGU9dGhpcy5fYmFzZVN0YXRlKTooZTwiYSJ8fGU+InoiKSYmKGU8IkEifHxlPiJaIikmJihlPCIwInx8ZT4iOSIpJiYodGhpcy5feG1sTW9kZXx8dGhpcy5fc2VjdGlvblN0YXJ0KzE9PT10aGlzLl9pbmRleHx8KHRoaXMuX2Jhc2VTdGF0ZSE9PV8/Ij0iIT09ZSYmdGhpcy5fcGFyc2VOYW1lZEVudGl0eVN0cmljdCgpOnRoaXMuX3BhcnNlTGVnYWN5RW50aXR5KCkpLHRoaXMuX3N0YXRlPXRoaXMuX2Jhc2VTdGF0ZSx0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX2RlY29kZU51bWVyaWNFbnRpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9zZWN0aW9uU3RhcnQrZTtpZihuIT09dGhpcy5faW5kZXgpe3ZhciByPXRoaXMuX2J1ZmZlci5zdWJzdHJpbmcobix0aGlzLl9pbmRleCksbz1wYXJzZUludChyLHQpO3RoaXMuX2VtaXRQYXJ0aWFsKGEobykpLHRoaXMuX3NlY3Rpb25TdGFydD10aGlzLl9pbmRleH1lbHNlIHRoaXMuX3NlY3Rpb25TdGFydC0tO3RoaXMuX3N0YXRlPXRoaXMuX2Jhc2VTdGF0ZX0saS5wcm90b3R5cGUuX3N0YXRlSW5OdW1lcmljRW50aXR5PWZ1bmN0aW9uKGUpeyI7Ij09PWU/KHRoaXMuX2RlY29kZU51bWVyaWNFbnRpdHkoMiwxMCksdGhpcy5fc2VjdGlvblN0YXJ0KyspOihlPCIwInx8ZT4iOSIpJiYodGhpcy5feG1sTW9kZT90aGlzLl9zdGF0ZT10aGlzLl9iYXNlU3RhdGU6dGhpcy5fZGVjb2RlTnVtZXJpY0VudGl0eSgyLDEwKSx0aGlzLl9pbmRleC0tKX0saS5wcm90b3R5cGUuX3N0YXRlSW5IZXhFbnRpdHk9ZnVuY3Rpb24oZSl7IjsiPT09ZT8odGhpcy5fZGVjb2RlTnVtZXJpY0VudGl0eSgzLDE2KSx0aGlzLl9zZWN0aW9uU3RhcnQrKyk6KGU8ImEifHxlPiJmIikmJihlPCJBInx8ZT4iRiIpJiYoZTwiMCJ8fGU+IjkiKSYmKHRoaXMuX3htbE1vZGU/dGhpcy5fc3RhdGU9dGhpcy5fYmFzZVN0YXRlOnRoaXMuX2RlY29kZU51bWVyaWNFbnRpdHkoMywxNiksdGhpcy5faW5kZXgtLSl9LGkucHJvdG90eXBlLl9jbGVhbnVwPWZ1bmN0aW9uKCl7dGhpcy5fc2VjdGlvblN0YXJ0PDA/KHRoaXMuX2J1ZmZlcj0iIix0aGlzLl9idWZmZXJPZmZzZXQrPXRoaXMuX2luZGV4LHRoaXMuX2luZGV4PTApOnRoaXMuX3J1bm5pbmcmJih0aGlzLl9zdGF0ZT09PV8/KHRoaXMuX3NlY3Rpb25TdGFydCE9PXRoaXMuX2luZGV4JiZ0aGlzLl9jYnMub250ZXh0KHRoaXMuX2J1ZmZlci5zdWJzdHIodGhpcy5fc2VjdGlvblN0YXJ0KSksdGhpcy5fYnVmZmVyPSIiLHRoaXMuX2J1ZmZlck9mZnNldCs9dGhpcy5faW5kZXgsdGhpcy5faW5kZXg9MCk6dGhpcy5fc2VjdGlvblN0YXJ0PT09dGhpcy5faW5kZXg/KHRoaXMuX2J1ZmZlcj0iIix0aGlzLl9idWZmZXJPZmZzZXQrPXRoaXMuX2luZGV4LHRoaXMuX2luZGV4PTApOih0aGlzLl9idWZmZXI9dGhpcy5fYnVmZmVyLnN1YnN0cih0aGlzLl9zZWN0aW9uU3RhcnQpLHRoaXMuX2luZGV4LT10aGlzLl9zZWN0aW9uU3RhcnQsdGhpcy5fYnVmZmVyT2Zmc2V0Kz10aGlzLl9zZWN0aW9uU3RhcnQpLHRoaXMuX3NlY3Rpb25TdGFydD0wKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7dGhpcy5fZW5kZWQmJnRoaXMuX2Nicy5vbmVycm9yKEVycm9yKCIud3JpdGUoKSBhZnRlciBkb25lISIpKSx0aGlzLl9idWZmZXIrPWUsdGhpcy5fcGFyc2UoKX0saS5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9pbmRleDx0aGlzLl9idWZmZXIubGVuZ3RoJiZ0aGlzLl9ydW5uaW5nOyl7dmFyIGU9dGhpcy5fYnVmZmVyLmNoYXJBdCh0aGlzLl9pbmRleCk7dGhpcy5fc3RhdGU9PT1fP3RoaXMuX3N0YXRlVGV4dChlKTp0aGlzLl9zdGF0ZT09PXA/dGhpcy5fc3RhdGVCZWZvcmVUYWdOYW1lKGUpOnRoaXMuX3N0YXRlPT09Zj90aGlzLl9zdGF0ZUluVGFnTmFtZShlKTp0aGlzLl9zdGF0ZT09PWg/dGhpcy5fc3RhdGVCZWZvcmVDbG9zZWluZ1RhZ05hbWUoZSk6dGhpcy5fc3RhdGU9PT1nP3RoaXMuX3N0YXRlSW5DbG9zZWluZ1RhZ05hbWUoZSk6dGhpcy5fc3RhdGU9PT1iP3RoaXMuX3N0YXRlQWZ0ZXJDbG9zZWluZ1RhZ05hbWUoZSk6dGhpcy5fc3RhdGU9PT1tP3RoaXMuX3N0YXRlSW5TZWxmQ2xvc2luZ1RhZyhlKTp0aGlzLl9zdGF0ZT09PUU/dGhpcy5fc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGUpOnRoaXMuX3N0YXRlPT09eT90aGlzLl9zdGF0ZUluQXR0cmlidXRlTmFtZShlKTp0aGlzLl9zdGF0ZT09PXY/dGhpcy5fc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoZSk6dGhpcy5fc3RhdGU9PT1UP3RoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlVmFsdWUoZSk6dGhpcy5fc3RhdGU9PT1BP3RoaXMuX3N0YXRlSW5BdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlcyhlKTp0aGlzLl9zdGF0ZT09PUM/dGhpcy5fc3RhdGVJbkF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVzKGUpOnRoaXMuX3N0YXRlPT09Tz90aGlzLl9zdGF0ZUluQXR0cmlidXRlVmFsdWVOb1F1b3RlcyhlKTp0aGlzLl9zdGF0ZT09PVM/dGhpcy5fc3RhdGVCZWZvcmVEZWNsYXJhdGlvbihlKTp0aGlzLl9zdGF0ZT09PVI/dGhpcy5fc3RhdGVJbkRlY2xhcmF0aW9uKGUpOnRoaXMuX3N0YXRlPT09aj90aGlzLl9zdGF0ZUluUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUpOnRoaXMuX3N0YXRlPT09eD90aGlzLl9zdGF0ZUJlZm9yZUNvbW1lbnQoZSk6dGhpcy5fc3RhdGU9PT1MP3RoaXMuX3N0YXRlSW5Db21tZW50KGUpOnRoaXMuX3N0YXRlPT09RD90aGlzLl9zdGF0ZUFmdGVyQ29tbWVudDEoZSk6dGhpcy5fc3RhdGU9PT13P3RoaXMuX3N0YXRlQWZ0ZXJDb21tZW50MihlKTp0aGlzLl9zdGF0ZT09PU0/dGhpcy5fc3RhdGVCZWZvcmVDZGF0YTEoZSk6dGhpcy5fc3RhdGU9PT1rP3RoaXMuX3N0YXRlQmVmb3JlQ2RhdGEyKGUpOnRoaXMuX3N0YXRlPT09ST90aGlzLl9zdGF0ZUJlZm9yZUNkYXRhMyhlKTp0aGlzLl9zdGF0ZT09PVA/dGhpcy5fc3RhdGVCZWZvcmVDZGF0YTQoZSk6dGhpcy5fc3RhdGU9PT1OP3RoaXMuX3N0YXRlQmVmb3JlQ2RhdGE1KGUpOnRoaXMuX3N0YXRlPT09SD90aGlzLl9zdGF0ZUJlZm9yZUNkYXRhNihlKTp0aGlzLl9zdGF0ZT09PUY/dGhpcy5fc3RhdGVJbkNkYXRhKGUpOnRoaXMuX3N0YXRlPT09Qj90aGlzLl9zdGF0ZUFmdGVyQ2RhdGExKGUpOnRoaXMuX3N0YXRlPT09VT90aGlzLl9zdGF0ZUFmdGVyQ2RhdGEyKGUpOnRoaXMuX3N0YXRlPT09Rz90aGlzLl9zdGF0ZUJlZm9yZVNwZWNpYWwoZSk6dGhpcy5fc3RhdGU9PT16P3RoaXMuX3N0YXRlQmVmb3JlU3BlY2lhbEVuZChlKTp0aGlzLl9zdGF0ZT09PVY/dGhpcy5fc3RhdGVCZWZvcmVTY3JpcHQxKGUpOnRoaXMuX3N0YXRlPT09Vz90aGlzLl9zdGF0ZUJlZm9yZVNjcmlwdDIoZSk6dGhpcy5fc3RhdGU9PT1ZP3RoaXMuX3N0YXRlQmVmb3JlU2NyaXB0MyhlKTp0aGlzLl9zdGF0ZT09PXE/dGhpcy5fc3RhdGVCZWZvcmVTY3JpcHQ0KGUpOnRoaXMuX3N0YXRlPT09Sz90aGlzLl9zdGF0ZUJlZm9yZVNjcmlwdDUoZSk6dGhpcy5fc3RhdGU9PT1YP3RoaXMuX3N0YXRlQWZ0ZXJTY3JpcHQxKGUpOnRoaXMuX3N0YXRlPT09JD90aGlzLl9zdGF0ZUFmdGVyU2NyaXB0MihlKTp0aGlzLl9zdGF0ZT09PVE/dGhpcy5fc3RhdGVBZnRlclNjcmlwdDMoZSk6dGhpcy5fc3RhdGU9PT1KP3RoaXMuX3N0YXRlQWZ0ZXJTY3JpcHQ0KGUpOnRoaXMuX3N0YXRlPT09Wj90aGlzLl9zdGF0ZUFmdGVyU2NyaXB0NShlKTp0aGlzLl9zdGF0ZT09PWVlP3RoaXMuX3N0YXRlQmVmb3JlU3R5bGUxKGUpOnRoaXMuX3N0YXRlPT09dGU/dGhpcy5fc3RhdGVCZWZvcmVTdHlsZTIoZSk6dGhpcy5fc3RhdGU9PT1uZT90aGlzLl9zdGF0ZUJlZm9yZVN0eWxlMyhlKTp0aGlzLl9zdGF0ZT09PXJlP3RoaXMuX3N0YXRlQmVmb3JlU3R5bGU0KGUpOnRoaXMuX3N0YXRlPT09b2U/dGhpcy5fc3RhdGVBZnRlclN0eWxlMShlKTp0aGlzLl9zdGF0ZT09PXNlP3RoaXMuX3N0YXRlQWZ0ZXJTdHlsZTIoZSk6dGhpcy5fc3RhdGU9PT1pZT90aGlzLl9zdGF0ZUFmdGVyU3R5bGUzKGUpOnRoaXMuX3N0YXRlPT09YWU/dGhpcy5fc3RhdGVBZnRlclN0eWxlNChlKTp0aGlzLl9zdGF0ZT09PWxlP3RoaXMuX3N0YXRlQmVmb3JlRW50aXR5KGUpOnRoaXMuX3N0YXRlPT09dWU/dGhpcy5fc3RhdGVCZWZvcmVOdW1lcmljRW50aXR5KGUpOnRoaXMuX3N0YXRlPT09Y2U/dGhpcy5fc3RhdGVJbk5hbWVkRW50aXR5KGUpOnRoaXMuX3N0YXRlPT09ZGU/dGhpcy5fc3RhdGVJbk51bWVyaWNFbnRpdHkoZSk6dGhpcy5fc3RhdGU9PT1fZT90aGlzLl9zdGF0ZUluSGV4RW50aXR5KGUpOnRoaXMuX2Nicy5vbmVycm9yKEVycm9yKCJ1bmtub3duIF9zdGF0ZSIpLHRoaXMuX3N0YXRlKSx0aGlzLl9pbmRleCsrfXRoaXMuX2NsZWFudXAoKX0saS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9ydW5uaW5nPSExfSxpLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt0aGlzLl9ydW5uaW5nPSEwLHRoaXMuX2luZGV4PHRoaXMuX2J1ZmZlci5sZW5ndGgmJnRoaXMuX3BhcnNlKCksdGhpcy5fZW5kZWQmJnRoaXMuX2ZpbmlzaCgpfSxpLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7dGhpcy5fZW5kZWQmJnRoaXMuX2Nicy5vbmVycm9yKEVycm9yKCIuZW5kKCkgYWZ0ZXIgZG9uZSEiKSksZSYmdGhpcy53cml0ZShlKSx0aGlzLl9lbmRlZD0hMCx0aGlzLl9ydW5uaW5nJiZ0aGlzLl9maW5pc2goKX0saS5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3NlY3Rpb25TdGFydDx0aGlzLl9pbmRleCYmdGhpcy5faGFuZGxlVHJhaWxpbmdEYXRhKCksdGhpcy5fY2JzLm9uZW5kKCl9LGkucHJvdG90eXBlLl9oYW5kbGVUcmFpbGluZ0RhdGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9idWZmZXIuc3Vic3RyKHRoaXMuX3NlY3Rpb25TdGFydCk7dGhpcy5fc3RhdGU9PT1GfHx0aGlzLl9zdGF0ZT09PUJ8fHRoaXMuX3N0YXRlPT09VT90aGlzLl9jYnMub25jZGF0YShlKTp0aGlzLl9zdGF0ZT09PUx8fHRoaXMuX3N0YXRlPT09RHx8dGhpcy5fc3RhdGU9PT13P3RoaXMuX2Nicy5vbmNvbW1lbnQoZSk6dGhpcy5fc3RhdGUhPT1jZXx8dGhpcy5feG1sTW9kZT90aGlzLl9zdGF0ZSE9PWRlfHx0aGlzLl94bWxNb2RlP3RoaXMuX3N0YXRlIT09X2V8fHRoaXMuX3htbE1vZGU/dGhpcy5fc3RhdGUhPT1mJiZ0aGlzLl9zdGF0ZSE9PUUmJnRoaXMuX3N0YXRlIT09VCYmdGhpcy5fc3RhdGUhPT12JiZ0aGlzLl9zdGF0ZSE9PXkmJnRoaXMuX3N0YXRlIT09QyYmdGhpcy5fc3RhdGUhPT1BJiZ0aGlzLl9zdGF0ZSE9PU8mJnRoaXMuX3N0YXRlIT09ZyYmdGhpcy5fY2JzLm9udGV4dChlKToodGhpcy5fZGVjb2RlTnVtZXJpY0VudGl0eSgzLDE2KSx0aGlzLl9zZWN0aW9uU3RhcnQ8dGhpcy5faW5kZXgmJih0aGlzLl9zdGF0ZT10aGlzLl9iYXNlU3RhdGUsdGhpcy5faGFuZGxlVHJhaWxpbmdEYXRhKCkpKToodGhpcy5fZGVjb2RlTnVtZXJpY0VudGl0eSgyLDEwKSx0aGlzLl9zZWN0aW9uU3RhcnQ8dGhpcy5faW5kZXgmJih0aGlzLl9zdGF0ZT10aGlzLl9iYXNlU3RhdGUsdGhpcy5faGFuZGxlVHJhaWxpbmdEYXRhKCkpKToodGhpcy5fcGFyc2VMZWdhY3lFbnRpdHkoKSx0aGlzLl9zZWN0aW9uU3RhcnQ8dGhpcy5faW5kZXgmJih0aGlzLl9zdGF0ZT10aGlzLl9iYXNlU3RhdGUsdGhpcy5faGFuZGxlVHJhaWxpbmdEYXRhKCkpKX0saS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtpLmNhbGwodGhpcyx7eG1sTW9kZTp0aGlzLl94bWxNb2RlLGRlY29kZUVudGl0aWVzOnRoaXMuX2RlY29kZUVudGl0aWVzfSx0aGlzLl9jYnMpfSxpLnByb3RvdHlwZS5nZXRBYnNvbHV0ZUluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlck9mZnNldCt0aGlzLl9pbmRleH0saS5wcm90b3R5cGUuX2dldFNlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyLnN1YnN0cmluZyh0aGlzLl9zZWN0aW9uU3RhcnQsdGhpcy5faW5kZXgpfSxpLnByb3RvdHlwZS5fZW1pdFRva2VuPWZ1bmN0aW9uKGUpe3RoaXMuX2Nic1tlXSh0aGlzLl9nZXRTZWN0aW9uKCkpLHRoaXMuX3NlY3Rpb25TdGFydD0tMX0saS5wcm90b3R5cGUuX2VtaXRQYXJ0aWFsPWZ1bmN0aW9uKGUpe3RoaXMuX2Jhc2VTdGF0ZSE9PV8/dGhpcy5fY2JzLm9uYXR0cmliZGF0YShlKTp0aGlzLl9jYnMub250ZXh0KGUpfX0sIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9Xcml0YWJsZVN0cmVhbS5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLl9wYXJzZXI9bmV3IG8oZSx0KSxyPXRoaXMuX2RlY29kZXI9bmV3IGk7cy5jYWxsKHRoaXMse2RlY29kZVN0cmluZ3M6ITF9KSx0aGlzLm9uY2UoImZpbmlzaCIsZnVuY3Rpb24oKXtuLmVuZChyLmVuZCgpKX0pfWUuZXhwb3J0cz1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9QYXJzZXIuanMiKSxzPW4oNCkuV3JpdGFibGUsaT1uKCIuL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiKS5TdHJpbmdEZWNvZGVyLGE9bigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcjtuKCIuL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikocixzKSxyLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LG4pe2UgaW5zdGFuY2VvZiBhJiYoZT10aGlzLl9kZWNvZGVyLndyaXRlKGUpKSx0aGlzLl9wYXJzZXIud3JpdGUoZSksbigpfX0sIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIodCxuKXtyZXR1cm4gZGVsZXRlIGUuZXhwb3J0c1t0XSxlLmV4cG9ydHNbdF09bixufXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9QYXJzZXIuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvaW5kZXguanMiKTtlLmV4cG9ydHM9e1BhcnNlcjpvLFRva2VuaXplcjpuKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvVG9rZW5pemVyLmpzIiksRWxlbWVudFR5cGU6bigiLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvaW5kZXguanMiKSxEb21IYW5kbGVyOnMsZ2V0IEZlZWRIYW5kbGVyKCl7cmV0dXJuIHIoIkZlZWRIYW5kbGVyIixuKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvRmVlZEhhbmRsZXIuanMiKSl9LGdldCBTdHJlYW0oKXtyZXR1cm4gcigiU3RyZWFtIixuKCIuL25vZGVfbW9kdWxlcy9zYW5pdGl6ZS1odG1sL25vZGVfbW9kdWxlcy9odG1scGFyc2VyMi9saWIvU3RyZWFtLmpzIikpfSxnZXQgV3JpdGFibGVTdHJlYW0oKXtyZXR1cm4gcigiV3JpdGFibGVTdHJlYW0iLG4oIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9Xcml0YWJsZVN0cmVhbS5qcyIpKX0sZ2V0IFByb3h5SGFuZGxlcigpe3JldHVybiByKCJQcm94eUhhbmRsZXIiLG4oIi4vbm9kZV9tb2R1bGVzL3Nhbml0aXplLWh0bWwvbm9kZV9tb2R1bGVzL2h0bWxwYXJzZXIyL2xpYi9Qcm94eUhhbmRsZXIuanMiKSl9LGdldCBEb21VdGlscygpe3JldHVybiByKCJEb21VdGlscyIsbigiLi9ub2RlX21vZHVsZXMvZG9tdXRpbHMvaW5kZXguanMiKSl9LGdldCBDb2xsZWN0aW5nSGFuZGxlcigpe3JldHVybiByKCJDb2xsZWN0aW5nSGFuZGxlciIsbigiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9ub2RlX21vZHVsZXMvaHRtbHBhcnNlcjIvbGliL0NvbGxlY3RpbmdIYW5kbGVyLmpzIikpfSxEZWZhdWx0SGFuZGxlcjpzLGdldCBSc3NIYW5kbGVyKCl7cmV0dXJuIHIoIlJzc0hhbmRsZXIiLHRoaXMuRmVlZEhhbmRsZXIpfSxwYXJzZURPTTpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBzKHQpO3JldHVybiBuZXcgbyhuLHQpLmVuZChlKSxuLmRvbX0scGFyc2VGZWVkOmZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUuZXhwb3J0cy5GZWVkSGFuZGxlcihuKTtyZXR1cm4gbmV3IG8ocixuKS5lbmQodCksci5kb219LGNyZWF0ZURvbVN0cmVhbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IHMoZSx0LG4pO3JldHVybiBuZXcgbyhyLHQpfSxFVkVOVFM6e2F0dHJpYnV0ZToyLGNkYXRhc3RhcnQ6MCxjZGF0YWVuZDowLHRleHQ6MSxwcm9jZXNzaW5naW5zdHJ1Y3Rpb246Mixjb21tZW50OjEsY29tbWVudGVuZDowLGNsb3NldGFnOjEsb3BlbnRhZzoyLG9wZW50YWduYW1lOjEsZXJyb3I6MSxlbmQ6MH19fSwiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCFmKXt2YXIgZT1jLmV4cGlyYXRpb25UaW1lO20/TygpOm09ITAsQyhpLGUpfX1mdW5jdGlvbiBvKCl7dmFyIGU9Yyx0PWMubmV4dDtpZihjPT09dCljPW51bGw7ZWxzZXt2YXIgbj1jLnByZXZpb3VzO2M9bi5uZXh0PXQsdC5wcmV2aW91cz1ufWUubmV4dD1lLnByZXZpb3VzPW51bGwsbj1lLmNhbGxiYWNrLHQ9ZS5leHBpcmF0aW9uVGltZSxlPWUucHJpb3JpdHlMZXZlbDt2YXIgbz1kLHM9cDtkPWUscD10O3RyeXt2YXIgaT1uKGcpfWZpbmFsbHl7ZD1vLHA9c31pZigiZnVuY3Rpb24iPT10eXBlb2YgaSlpZihpPXtjYWxsYmFjazppLHByaW9yaXR5TGV2ZWw6ZSxleHBpcmF0aW9uVGltZTp0LG5leHQ6bnVsbCxwcmV2aW91czpudWxsfSxudWxsPT09YyljPWkubmV4dD1pLnByZXZpb3VzPWk7ZWxzZXtuPW51bGwsZT1jO2Rve2lmKGUuZXhwaXJhdGlvblRpbWU+PXQpe249ZTticmVha31lPWUubmV4dH13aGlsZShlIT09Yyk7bnVsbD09PW4/bj1jOm49PT1jJiYoYz1pLHIoKSksdD1uLnByZXZpb3VzLHQubmV4dD1uLnByZXZpb3VzPWksaS5uZXh0PW4saS5wcmV2aW91cz10fX1mdW5jdGlvbiBzKCl7aWYoLTE9PT1fJiZudWxsIT09YyYmMT09PWMucHJpb3JpdHlMZXZlbCl7Zj0hMCxnLmRpZFRpbWVvdXQ9ITA7dHJ5e2Rve28oKX13aGlsZShudWxsIT09YyYmMT09PWMucHJpb3JpdHlMZXZlbCl9ZmluYWxseXtmPSExLG51bGwhPT1jP3IoKTptPSExfX19ZnVuY3Rpb24gaShlKXtmPSEwLGcuZGlkVGltZW91dD1lO3RyeXtpZihlKWZvcig7bnVsbCE9PWM7KXt2YXIgbj10LnVuc3RhYmxlX25vdygpO2lmKCEoYy5leHBpcmF0aW9uVGltZTw9bikpYnJlYWs7ZG97bygpfXdoaWxlKG51bGwhPT1jJiZjLmV4cGlyYXRpb25UaW1lPD1uKX1lbHNlIGlmKG51bGwhPT1jKWRve28oKX13aGlsZShudWxsIT09YyYmMDxTKCktdC51bnN0YWJsZV9ub3coKSl9ZmluYWxseXtmPSExLG51bGwhPT1jP3IoKTptPSExLHMoKX19ZnVuY3Rpb24gYShlKXtsPXYoZnVuY3Rpb24odCl7eSh1KSxlKHQpfSksdT1FKGZ1bmN0aW9uKCl7VChsKSxlKHQudW5zdGFibGVfbm93KCkpfSwxMDApfS8qKiBAbGljZW5zZSBSZWFjdCB2MTYuNi4wCiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbCx1LGM9bnVsbCxkPTMsXz0tMSxwPS0xLGY9ITEsbT0hMSxoPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3csZz17dGltZVJlbWFpbmluZzpoP2Z1bmN0aW9uKCl7aWYobnVsbCE9PWMmJmMuZXhwaXJhdGlvblRpbWU8cClyZXR1cm4gMDt2YXIgZT1TKCktcGVyZm9ybWFuY2Uubm93KCk7cmV0dXJuIDA8ZT9lOjB9OmZ1bmN0aW9uKCl7aWYobnVsbCE9PWMmJmMuZXhwaXJhdGlvblRpbWU8cClyZXR1cm4gMDt2YXIgZT1TKCktRGF0ZS5ub3coKTtyZXR1cm4gMDxlP2U6MH0sZGlkVGltZW91dDohMX0sYj1EYXRlLEU9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp2b2lkIDAseT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDAsdj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTp2b2lkIDAsVD0iZnVuY3Rpb24iPT10eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU/Y2FuY2VsQW5pbWF0aW9uRnJhbWU6dm9pZCAwO2lmKGgpe3ZhciBBPXBlcmZvcm1hbmNlO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIEEubm93KCl9fWVsc2UgdC51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gYi5ub3coKX07dmFyIEMsTyxTO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuX3NjaGVkTW9jayl7dmFyIFI9d2luZG93Ll9zY2hlZE1vY2s7Qz1SWzBdLE89UlsxXSxTPVJbMl19ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXt2YXIgaj1udWxsLHg9LTEsTD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT1qKXt2YXIgbj1qO2o9bnVsbDt0cnl7eD10LG4oZSl9ZmluYWxseXt4PS0xfX19O0M9ZnVuY3Rpb24oZSx0KXstMSE9PXg/c2V0VGltZW91dChDLDAsZSx0KTooaj1lLHNldFRpbWVvdXQoTCx0LCEwLHQpLHNldFRpbWVvdXQoTCwxMDczNzQxODIzLCExLDEwNzM3NDE4MjMpKX0sTz1mdW5jdGlvbigpe2o9bnVsbH0sUz1mdW5jdGlvbigpe3JldHVybiAxLzB9LHQudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuLTE9PT14PzA6eH19ZWxzZXsidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJigiZnVuY3Rpb24iIT10eXBlb2YgdiYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzIiksImZ1bmN0aW9uIiE9dHlwZW9mIFQmJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzIikpO3ZhciBEPW51bGwsdz0hMSxNPS0xLGs9ITEsST0hMSxQPTAsTj0zMyxIPTMzO1M9ZnVuY3Rpb24oKXtyZXR1cm4gUH07dmFyIEY9Il9fcmVhY3RJZGxlQ2FsbGJhY2skIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oZSl7aWYoZS5zb3VyY2U9PT13aW5kb3cmJmUuZGF0YT09PUYpe3c9ITEsZT1EO3ZhciBuPU07RD1udWxsLE09LTE7dmFyIHI9dC51bnN0YWJsZV9ub3coKSxvPSExO2lmKDA+PVAtcil7aWYoISgtMSE9PW4mJm48PXIpKXJldHVybiBrfHwoaz0hMCxhKEIpKSxEPWUsdm9pZChNPW4pO289ITB9aWYobnVsbCE9PWUpe0k9ITA7dHJ5e2Uobyl9ZmluYWxseXtJPSExfX19fSwhMSk7dmFyIEI9ZnVuY3Rpb24oZSl7aWYobnVsbCE9PUQpe2EoQik7dmFyIHQ9ZS1QK0g7dDxIJiZOPEg/KDg+dCYmKHQ9OCksSD10PE4/Tjp0KTpOPXQsUD1lK0gsd3x8KHc9ITAsd2luZG93LnBvc3RNZXNzYWdlKEYsIioiKSl9ZWxzZSBrPSExfTtDPWZ1bmN0aW9uKGUsdCl7RD1lLE09dCxJfHwwPnQ/d2luZG93LnBvc3RNZXNzYWdlKEYsIioiKTprfHwoaz0hMCxhKEIpKX0sTz1mdW5jdGlvbigpe0Q9bnVsbCx3PSExLE09LTF9fXQudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSx0LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsdC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLHQudW5zdGFibGVfSWRsZVByaW9yaXR5PTQsdC51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmJyZWFrO2RlZmF1bHQ6ZT0zfXZhciByPWQsbz1fO2Q9ZSxfPXQudW5zdGFibGVfbm93KCk7dHJ5e3JldHVybiBuKCl9ZmluYWxseXtkPXIsXz1vLHMoKX19LHQudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihlLG4pe3ZhciBvPS0xIT09Xz9fOnQudW5zdGFibGVfbm93KCk7aWYoIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmIm51bWJlciI9PXR5cGVvZiBuLnRpbWVvdXQpbj1vK24udGltZW91dDtlbHNlIHN3aXRjaChkKXtjYXNlIDE6bj1vKy0xO2JyZWFrO2Nhc2UgMjpuPW8rMjUwO2JyZWFrO2Nhc2UgNDpuPW8rMTA3Mzc0MTgyMzticmVhaztkZWZhdWx0Om49bys1ZTN9aWYoZT17Y2FsbGJhY2s6ZSxwcmlvcml0eUxldmVsOmQsZXhwaXJhdGlvblRpbWU6bixuZXh0Om51bGwscHJldmlvdXM6bnVsbH0sbnVsbD09PWMpYz1lLm5leHQ9ZS5wcmV2aW91cz1lLHIoKTtlbHNle289bnVsbDt2YXIgcz1jO2Rve2lmKHMuZXhwaXJhdGlvblRpbWU+bil7bz1zO2JyZWFrfXM9cy5uZXh0fXdoaWxlKHMhPT1jKTtudWxsPT09bz9vPWM6bz09PWMmJihjPWUscigpKSxuPW8ucHJldmlvdXMsbi5uZXh0PW8ucHJldmlvdXM9ZSxlLm5leHQ9byxlLnByZXZpb3VzPW59cmV0dXJuIGV9LHQudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uZXh0O2lmKG51bGwhPT10KXtpZih0PT09ZSljPW51bGw7ZWxzZXtlPT09YyYmKGM9dCk7dmFyIG49ZS5wcmV2aW91cztuLm5leHQ9dCx0LnByZXZpb3VzPW59ZS5uZXh0PWUucHJldmlvdXM9bnVsbH19LHQudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGUpe3ZhciBuPWQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZCxvPV87ZD1uLF89dC51bnN0YWJsZV9ub3coKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7ZD1yLF89byxzKCl9fX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBkfX0sIi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiKX0sIi4vbm9kZV9tb2R1bGVzL3NlbXZlci1kaWZmL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3NlbXZlci9zZW12ZXIuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihyLmd0KGUsdCkpcmV0dXJuIG51bGw7ZT1yLnBhcnNlKGUpLHQ9ci5wYXJzZSh0KTtmb3IodmFyIG4gaW4gZSl7aWYoKCJtYWpvciI9PT1ufHwibWlub3IiPT09bnx8InBhdGNoIj09PW4pJiZlW25dIT09dFtuXSlyZXR1cm4gbjtpZigoInByZXJlbGVhc2UiPT09bnx8ImJ1aWxkIj09PW4pJiZKU09OLnN0cmluZ2lmeShlW25dKSE9PUpTT04uc3RyaW5naWZ5KHRbbl0pKXJldHVybiBufXJldHVybiBudWxsfX0sIi4vbm9kZV9tb2R1bGVzL3NlbXZlci9zZW12ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7ZnVuY3Rpb24gcihlLHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e2xvb3NlOiEhdCxpbmNsdWRlUHJlcmVsZWFzZTohMX0pLGUgaW5zdGFuY2VvZiBpKXJldHVybiBlO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDtpZihlLmxlbmd0aD5RKXJldHVybiBudWxsO2lmKCEodC5sb29zZT9aW2hlXTpaW3BlXSkudGVzdChlKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIG5ldyBpKGUsdCl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1yKGUsdCk7cmV0dXJuIG4/bi52ZXJzaW9uOm51bGx9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXIoZS50cmltKCkucmVwbGFjZSgvXls9dl0rLywiIiksdCk7cmV0dXJuIG4/bi52ZXJzaW9uOm51bGx9ZnVuY3Rpb24gaShlLHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e2xvb3NlOiEhdCxpbmNsdWRlUHJlcmVsZWFzZTohMX0pLGUgaW5zdGFuY2VvZiBpKXtpZihlLmxvb3NlPT09dC5sb29zZSlyZXR1cm4gZTtlPWUudmVyc2lvbn1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIFZlcnNpb246ICIrZSk7aWYoZS5sZW5ndGg+USl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICIrUSsiIGNoYXJhY3RlcnMiKTtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSx0KTskKCJTZW1WZXIiLGUsdCksdGhpcy5vcHRpb25zPXQsdGhpcy5sb29zZT0hIXQubG9vc2U7dmFyIG49ZS50cmltKCkubWF0Y2godC5sb29zZT9aW2hlXTpaW3BlXSk7aWYoIW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBWZXJzaW9uOiAiK2UpO2lmKHRoaXMucmF3PWUsdGhpcy5tYWpvcj0rblsxXSx0aGlzLm1pbm9yPStuWzJdLHRoaXMucGF0Y2g9K25bM10sdGhpcy5tYWpvcj5KfHx0aGlzLm1ham9yPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBtYWpvciB2ZXJzaW9uIik7aWYodGhpcy5taW5vcj5KfHx0aGlzLm1pbm9yPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBtaW5vciB2ZXJzaW9uIik7aWYodGhpcy5wYXRjaD5KfHx0aGlzLnBhdGNoPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRjaCB2ZXJzaW9uIik7bls0XT90aGlzLnByZXJlbGVhc2U9bls0XS5zcGxpdCgiLiIpLm1hcChmdW5jdGlvbihlKXtpZigvXlswLTldKyQvLnRlc3QoZSkpe3ZhciB0PStlO2lmKHQ+PTAmJnQ8SilyZXR1cm4gdH1yZXR1cm4gZX0pOnRoaXMucHJlcmVsZWFzZT1bXSx0aGlzLmJ1aWxkPW5bNV0/bls1XS5zcGxpdCgiLiIpOltdLHRoaXMuZm9ybWF0KCl9ZnVuY3Rpb24gYShlLHQsbixyKXsic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3RyeXtyZXR1cm4gbmV3IGkoZSxuKS5pbmModCxyKS52ZXJzaW9ufWNhdGNoKGUpe3JldHVybiBudWxsfX1mdW5jdGlvbiBsKGUsdCl7aWYodihlLHQpKXJldHVybiBudWxsO3ZhciBuPXIoZSksbz1yKHQpO2lmKG4ucHJlcmVsZWFzZS5sZW5ndGh8fG8ucHJlcmVsZWFzZS5sZW5ndGgpe2Zvcih2YXIgcyBpbiBuKWlmKCgibWFqb3IiPT09c3x8Im1pbm9yIj09PXN8fCJwYXRjaCI9PT1zKSYmbltzXSE9PW9bc10pcmV0dXJuInByZSIrcztyZXR1cm4icHJlcmVsZWFzZSJ9Zm9yKHZhciBzIGluIG4paWYoKCJtYWpvciI9PT1zfHwibWlub3IiPT09c3x8InBhdGNoIj09PXMpJiZuW3NdIT09b1tzXSlyZXR1cm4gc31mdW5jdGlvbiB1KGUsdCl7dmFyIG49QmUudGVzdChlKSxyPUJlLnRlc3QodCk7cmV0dXJuIG4mJnImJihlPStlLHQ9K3QpLG4mJiFyPy0xOnImJiFuPzE6ZTx0Py0xOmU+dD8xOjB9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB1KHQsZSl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBuZXcgaShlLHQpLm1ham9yfWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gbmV3IGkoZSx0KS5taW5vcn1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG5ldyBpKGUsdCkucGF0Y2h9ZnVuY3Rpb24gZihlLHQsbil7cmV0dXJuIG5ldyBpKGUsbikuY29tcGFyZShuZXcgaSh0LG4pKX1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuIGYoZSx0LCEwKX1mdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4gZih0LGUsbil9ZnVuY3Rpb24gZyhlLG4pe3JldHVybiBlLnNvcnQoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jb21wYXJlKGUscixuKX0pfWZ1bmN0aW9uIGIoZSxuKXtyZXR1cm4gZS5zb3J0KGZ1bmN0aW9uKGUscil7cmV0dXJuIHQucmNvbXBhcmUoZSxyLG4pfSl9ZnVuY3Rpb24gRShlLHQsbil7cmV0dXJuIGYoZSx0LG4pPjB9ZnVuY3Rpb24geShlLHQsbil7cmV0dXJuIGYoZSx0LG4pPDB9ZnVuY3Rpb24gdihlLHQsbil7cmV0dXJuIDA9PT1mKGUsdCxuKX1mdW5jdGlvbiBUKGUsdCxuKXtyZXR1cm4gMCE9PWYoZSx0LG4pfWZ1bmN0aW9uIEEoZSx0LG4pe3JldHVybiBmKGUsdCxuKT49MH1mdW5jdGlvbiBDKGUsdCxuKXtyZXR1cm4gZihlLHQsbik8PTB9ZnVuY3Rpb24gTyhlLHQsbixyKXt2YXIgbztzd2l0Y2godCl7Y2FzZSI9PT0iOiJvYmplY3QiPT10eXBlb2YgZSYmKGU9ZS52ZXJzaW9uKSwib2JqZWN0Ij09dHlwZW9mIG4mJihuPW4udmVyc2lvbiksbz1lPT09bjticmVhaztjYXNlIiE9PSI6Im9iamVjdCI9PXR5cGVvZiBlJiYoZT1lLnZlcnNpb24pLCJvYmplY3QiPT10eXBlb2YgbiYmKG49bi52ZXJzaW9uKSxvPWUhPT1uO2JyZWFrO2Nhc2UiIjpjYXNlIj0iOmNhc2UiPT0iOm89dihlLG4scik7YnJlYWs7Y2FzZSIhPSI6bz1UKGUsbixyKTticmVhaztjYXNlIj4iOm89RShlLG4scik7YnJlYWs7Y2FzZSI+PSI6bz1BKGUsbixyKTticmVhaztjYXNlIjwiOm89eShlLG4scik7YnJlYWs7Y2FzZSI8PSI6bz1DKGUsbixyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgb3BlcmF0b3I6ICIrdCl9cmV0dXJuIG99ZnVuY3Rpb24gUyhlLHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e2xvb3NlOiEhdCxpbmNsdWRlUHJlcmVsZWFzZTohMX0pLGUgaW5zdGFuY2VvZiBTKXtpZihlLmxvb3NlPT09ISF0Lmxvb3NlKXJldHVybiBlO2U9ZS52YWx1ZX1pZighKHRoaXMgaW5zdGFuY2VvZiBTKSlyZXR1cm4gbmV3IFMoZSx0KTskKCJjb21wYXJhdG9yIixlLHQpLHRoaXMub3B0aW9ucz10LHRoaXMubG9vc2U9ISF0Lmxvb3NlLHRoaXMucGFyc2UoZSksdGhpcy5zZW12ZXI9PT1VZT90aGlzLnZhbHVlPSIiOnRoaXMudmFsdWU9dGhpcy5vcGVyYXRvcit0aGlzLnNlbXZlci52ZXJzaW9uLCQoImNvbXAiLHRoaXMpfWZ1bmN0aW9uIFIoZSx0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXtsb29zZTohIXQsaW5jbHVkZVByZXJlbGVhc2U6ITF9KSxlIGluc3RhbmNlb2YgUilyZXR1cm4gZS5sb29zZT09PSEhdC5sb29zZSYmZS5pbmNsdWRlUHJlcmVsZWFzZT09PSEhdC5pbmNsdWRlUHJlcmVsZWFzZT9lOm5ldyBSKGUucmF3LHQpO2lmKGUgaW5zdGFuY2VvZiBTKXJldHVybiBuZXcgUihlLnZhbHVlLHQpO2lmKCEodGhpcyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUihlLHQpO2lmKHRoaXMub3B0aW9ucz10LHRoaXMubG9vc2U9ISF0Lmxvb3NlLHRoaXMuaW5jbHVkZVByZXJlbGVhc2U9ISF0LmluY2x1ZGVQcmVyZWxlYXNlLHRoaXMucmF3PWUsdGhpcy5zZXQ9ZS5zcGxpdCgvXHMqXHxcfFxzKi8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJzZVJhbmdlKGUudHJpbSgpKX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0pLCF0aGlzLnNldC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICIrZSk7dGhpcy5mb3JtYXQoKX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJuIG5ldyBSKGUsdCkuc2V0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KS5qb2luKCIgIikudHJpbSgpLnNwbGl0KCIgIil9KX1mdW5jdGlvbiB4KGUsdCl7cmV0dXJuICQoImNvbXAiLGUsdCksZT1NKGUsdCksJCgiY2FyZXQiLGUpLGU9RChlLHQpLCQoInRpbGRlcyIsZSksZT1JKGUsdCksJCgieHJhbmdlIixlKSxlPU4oZSx0KSwkKCJzdGFycyIsZSksZX1mdW5jdGlvbiBMKGUpe3JldHVybiFlfHwieCI9PT1lLnRvTG93ZXJDYXNlKCl8fCIqIj09PWV9ZnVuY3Rpb24gRChlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB3KGUsdCl9KS5qb2luKCIgIil9ZnVuY3Rpb24gdyhlLHQpe3QmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e2xvb3NlOiEhdCxpbmNsdWRlUHJlcmVsZWFzZTohMX0pO3ZhciBuPXQubG9vc2U/WltqZV06WltSZV07cmV0dXJuIGUucmVwbGFjZShuLGZ1bmN0aW9uKHQsbixyLG8scyl7JCgidGlsZGUiLGUsdCxuLHIsbyxzKTt2YXIgaTtyZXR1cm4gTChuKT9pPSIiOkwocik/aT0iPj0iK24rIi4wLjAgPCIrKCtuKzEpKyIuMC4wIjpMKG8pP2k9Ij49IituKyIuIityKyIuMCA8IituKyIuIisoK3IrMSkrIi4wIjpzPygkKCJyZXBsYWNlVGlsZGUgcHIiLHMpLCItIiE9PXMuY2hhckF0KDApJiYocz0iLSIrcyksaT0iPj0iK24rIi4iK3IrIi4iK28rcysiIDwiK24rIi4iKygrcisxKSsiLjAiKTppPSI+PSIrbisiLiIrcisiLiIrbysiIDwiK24rIi4iKygrcisxKSsiLjAiLCQoInRpbGRlIHJldHVybiIsaSksaX0pfWZ1bmN0aW9uIE0oZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gayhlLHQpfSkuam9pbigiICIpfWZ1bmN0aW9uIGsoZSx0KXskKCJjYXJldCIsZSx0KSx0JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXtsb29zZTohIXQsaW5jbHVkZVByZXJlbGVhc2U6ITF9KTt2YXIgbj10Lmxvb3NlP1pbd2VdOlpbRGVdO3JldHVybiBlLnJlcGxhY2UobixmdW5jdGlvbih0LG4scixvLHMpeyQoImNhcmV0IixlLHQsbixyLG8scyk7dmFyIGk7cmV0dXJuIEwobik/aT0iIjpMKHIpP2k9Ij49IituKyIuMC4wIDwiKygrbisxKSsiLjAuMCI6TChvKT9pPSIwIj09PW4/Ij49IituKyIuIityKyIuMCA8IituKyIuIisoK3IrMSkrIi4wIjoiPj0iK24rIi4iK3IrIi4wIDwiKygrbisxKSsiLjAuMCI6cz8oJCgicmVwbGFjZUNhcmV0IHByIixzKSwiLSIhPT1zLmNoYXJBdCgwKSYmKHM9Ii0iK3MpLGk9IjAiPT09bj8iMCI9PT1yPyI+PSIrbisiLiIrcisiLiIrbytzKyIgPCIrbisiLiIrcisiLiIrKCtvKzEpOiI+PSIrbisiLiIrcisiLiIrbytzKyIgPCIrbisiLiIrKCtyKzEpKyIuMCI6Ij49IituKyIuIityKyIuIitvK3MrIiA8IisoK24rMSkrIi4wLjAiKTooJCgibm8gcHIiKSxpPSIwIj09PW4/IjAiPT09cj8iPj0iK24rIi4iK3IrIi4iK28rIiA8IituKyIuIityKyIuIisoK28rMSk6Ij49IituKyIuIityKyIuIitvKyIgPCIrbisiLiIrKCtyKzEpKyIuMCI6Ij49IituKyIuIityKyIuIitvKyIgPCIrKCtuKzEpKyIuMC4wIiksJCgiY2FyZXQgcmV0dXJuIixpKSxpfSl9ZnVuY3Rpb24gSShlLHQpe3JldHVybiAkKCJyZXBsYWNlWFJhbmdlcyIsZSx0KSxlLnNwbGl0KC9ccysvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSx0KX0pLmpvaW4oIiAiKX1mdW5jdGlvbiBQKGUsdCl7ZT1lLnRyaW0oKSx0JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXtsb29zZTohIXQsaW5jbHVkZVByZXJlbGVhc2U6ITF9KTt2YXIgbj10Lmxvb3NlP1pbQWVdOlpbVGVdO3JldHVybiBlLnJlcGxhY2UobixmdW5jdGlvbih0LG4scixvLHMsaSl7JCgieFJhbmdlIixlLHQsbixyLG8scyxpKTt2YXIgYT1MKHIpLGw9YXx8TChvKSx1PWx8fEwocyksYz11O3JldHVybiI9Ij09PW4mJmMmJihuPSIiKSxhP3Q9Ij4iPT09bnx8IjwiPT09bj8iPDAuMC4wIjoiKiI6biYmYz8obCYmKG89MCksdSYmKHM9MCksIj4iPT09bj8obj0iPj0iLGw/KHI9K3IrMSxvPTAscz0wKTp1JiYobz0rbysxLHM9MCkpOiI8PSI9PT1uJiYobj0iPCIsbD9yPStyKzE6bz0rbysxKSx0PW4rcisiLiIrbysiLiIrcyk6bD90PSI+PSIrcisiLjAuMCA8IisoK3IrMSkrIi4wLjAiOnUmJih0PSI+PSIrcisiLiIrbysiLjAgPCIrcisiLiIrKCtvKzEpKyIuMCIpLCQoInhSYW5nZSByZXR1cm4iLHQpLHR9KX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuICQoInJlcGxhY2VTdGFycyIsZSx0KSxlLnRyaW0oKS5yZXBsYWNlKFpbSGVdLCIiKX1mdW5jdGlvbiBIKGUsdCxuLHIsbyxzLGksYSxsLHUsYyxkLF8pe3JldHVybiB0PUwobik/IiI6TChyKT8iPj0iK24rIi4wLjAiOkwobyk/Ij49IituKyIuIityKyIuMCI6Ij49Iit0LGE9TChsKT8iIjpMKHUpPyI8IisoK2wrMSkrIi4wLjAiOkwoYyk/IjwiK2wrIi4iKygrdSsxKSsiLjAiOmQ/Ijw9IitsKyIuIit1KyIuIitjKyItIitkOiI8PSIrYSwodCsiICIrYSkudHJpbSgpfWZ1bmN0aW9uIEYoZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLnRlc3QodCkpcmV0dXJuITE7aWYobnx8KG49e30pLHQucHJlcmVsZWFzZS5sZW5ndGgmJiFuLmluY2x1ZGVQcmVyZWxlYXNlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZigkKGVbcl0uc2VtdmVyKSxlW3JdLnNlbXZlciE9PVVlJiZlW3JdLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aD4wKXt2YXIgbz1lW3JdLnNlbXZlcjtpZihvLm1ham9yPT09dC5tYWpvciYmby5taW5vcj09PXQubWlub3ImJm8ucGF0Y2g9PT10LnBhdGNoKXJldHVybiEwfXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIEIoZSx0LG4pe3RyeXt0PW5ldyBSKHQsbil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuIHQudGVzdChlKX1mdW5jdGlvbiBVKGUsdCxuKXt2YXIgcj1udWxsLG89bnVsbDt0cnl7dmFyIHM9bmV3IFIodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3MudGVzdChlKSYmKHImJi0xIT09by5jb21wYXJlKGUpfHwocj1lLG89bmV3IGkocixuKSkpfSkscn1mdW5jdGlvbiBHKGUsdCxuKXt2YXIgcj1udWxsLG89bnVsbDt0cnl7dmFyIHM9bmV3IFIodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3MudGVzdChlKSYmKHImJjEhPT1vLmNvbXBhcmUoZSl8fChyPWUsbz1uZXcgaShyLG4pKSl9KSxyfWZ1bmN0aW9uIHooZSx0KXt0cnl7cmV0dXJuIG5ldyBSKGUsdCkucmFuZ2V8fCIqIn1jYXRjaChlKXtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gVihlLHQsbil7cmV0dXJuIFkoZSx0LCI8IixuKX1mdW5jdGlvbiBXKGUsdCxuKXtyZXR1cm4gWShlLHQsIj4iLG4pfWZ1bmN0aW9uIFkoZSx0LG4scil7ZT1uZXcgaShlLHIpLHQ9bmV3IFIodCxyKTt2YXIgbyxzLGEsbCx1O3N3aXRjaChuKXtjYXNlIj4iOm89RSxzPUMsYT15LGw9Ij4iLHU9Ij49IjticmVhaztjYXNlIjwiOm89eSxzPUEsYT1FLGw9IjwiLHU9Ijw9IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcHJvdmlkZSBhIGhpbG8gdmFsIG9mICI8IiBvciAiPiInKX1pZihCKGUsdCxyKSlyZXR1cm4hMTtmb3IodmFyIGM9MDtjPHQuc2V0Lmxlbmd0aDsrK2Mpe3ZhciBkPXQuc2V0W2NdLF89bnVsbCxwPW51bGw7aWYoZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VtdmVyPT09VWUmJihlPW5ldyBTKCI+PTAuMC4wIikpLF89X3x8ZSxwPXB8fGUsbyhlLnNlbXZlcixfLnNlbXZlcixyKT9fPWU6YShlLnNlbXZlcixwLnNlbXZlcixyKSYmKHA9ZSl9KSxfLm9wZXJhdG9yPT09bHx8Xy5vcGVyYXRvcj09PXUpcmV0dXJuITE7aWYoKCFwLm9wZXJhdG9yfHxwLm9wZXJhdG9yPT09bCkmJnMoZSxwLnNlbXZlcikpcmV0dXJuITE7aWYocC5vcGVyYXRvcj09PXUmJmEoZSxwLnNlbXZlcikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gcShlLHQpe3ZhciBuPXIoZSx0KTtyZXR1cm4gbiYmbi5wcmVyZWxlYXNlLmxlbmd0aD9uLnByZXJlbGVhc2U6bnVsbH1mdW5jdGlvbiBLKGUsdCxuKXtyZXR1cm4gZT1uZXcgUihlLG4pLHQ9bmV3IFIodCxuKSxlLmludGVyc2VjdHModCl9ZnVuY3Rpb24gWChlKXtpZihlIGluc3RhbmNlb2YgaSlyZXR1cm4gZTtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dmFyIHQ9ZS5tYXRjaChaW0NlXSk7cmV0dXJuIG51bGw9PXQ/bnVsbDpyKCh0WzFdfHwiMCIpKyIuIisodFsyXXx8IjAiKSsiLiIrKHRbM118fCIwIikpfXQ9ZS5leHBvcnRzPWk7dmFyICQ7JD0ib2JqZWN0Ij09dHlwZW9mIG4mJm4uZW52JiZuLmVudi5OT0RFX0RFQlVHJiYvXGJzZW12ZXJcYi9pLnRlc3Qobi5lbnYuTk9ERV9ERUJVRyk/ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7ZS51bnNoaWZ0KCJTRU1WRVIiKSxjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLGUpfTpmdW5jdGlvbigpe30sdC5TRU1WRVJfU1BFQ19WRVJTSU9OPSIyLjAuMCI7dmFyIFE9MjU2LEo9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsWj10LnJlPVtdLGVlPXQuc3JjPVtdLHRlPTAsbmU9dGUrKztlZVtuZV09IjB8WzEtOV1cXGQqIjt2YXIgcmU9dGUrKztlZVtyZV09IlswLTldKyI7dmFyIG9lPXRlKys7ZWVbb2VdPSJcXGQqW2EtekEtWi1dW2EtekEtWjAtOS1dKiI7dmFyIHNlPXRlKys7ZWVbc2VdPSIoIitlZVtuZV0rIilcXC4oIitlZVtuZV0rIilcXC4oIitlZVtuZV0rIikiO3ZhciBpZT10ZSsrO2VlW2llXT0iKCIrZWVbcmVdKyIpXFwuKCIrZWVbcmVdKyIpXFwuKCIrZWVbcmVdKyIpIjt2YXIgYWU9dGUrKztlZVthZV09Iig/OiIrZWVbbmVdKyJ8IitlZVtvZV0rIikiO3ZhciBsZT10ZSsrO2VlW2xlXT0iKD86IitlZVtyZV0rInwiK2VlW29lXSsiKSI7dmFyIHVlPXRlKys7ZWVbdWVdPSIoPzotKCIrZWVbYWVdKyIoPzpcXC4iK2VlW2FlXSsiKSopKSI7dmFyIGNlPXRlKys7ZWVbY2VdPSIoPzotPygiK2VlW2xlXSsiKD86XFwuIitlZVtsZV0rIikqKSkiO3ZhciBkZT10ZSsrO2VlW2RlXT0iWzAtOUEtWmEtei1dKyI7dmFyIF9lPXRlKys7ZWVbX2VdPSIoPzpcXCsoIitlZVtkZV0rIig/OlxcLiIrZWVbZGVdKyIpKikpIjt2YXIgcGU9dGUrKyxmZT0idj8iK2VlW3NlXStlZVt1ZV0rIj8iK2VlW19lXSsiPyI7ZWVbcGVdPSJeIitmZSsiJCI7dmFyIG1lPSJbdj1cXHNdKiIrZWVbaWVdK2VlW2NlXSsiPyIrZWVbX2VdKyI/IixoZT10ZSsrO2VlW2hlXT0iXiIrbWUrIiQiO3ZhciBnZT10ZSsrO2VlW2dlXT0iKCg/Ojx8Pik/PT8pIjt2YXIgYmU9dGUrKztlZVtiZV09ZWVbcmVdKyJ8eHxYfFxcKiI7dmFyIEVlPXRlKys7ZWVbRWVdPWVlW25lXSsifHh8WHxcXCoiO3ZhciB5ZT10ZSsrO2VlW3llXT0iW3Y9XFxzXSooIitlZVtFZV0rIikoPzpcXC4oIitlZVtFZV0rIikoPzpcXC4oIitlZVtFZV0rIikoPzoiK2VlW3VlXSsiKT8iK2VlW19lXSsiPyk/KT8iO3ZhciB2ZT10ZSsrO2VlW3ZlXT0iW3Y9XFxzXSooIitlZVtiZV0rIikoPzpcXC4oIitlZVtiZV0rIikoPzpcXC4oIitlZVtiZV0rIikoPzoiK2VlW2NlXSsiKT8iK2VlW19lXSsiPyk/KT8iO3ZhciBUZT10ZSsrO2VlW1RlXT0iXiIrZWVbZ2VdKyJcXHMqIitlZVt5ZV0rIiQiO3ZhciBBZT10ZSsrO2VlW0FlXT0iXiIrZWVbZ2VdKyJcXHMqIitlZVt2ZV0rIiQiO3ZhciBDZT10ZSsrO2VlW0NlXT0iKD86XnxbXlxcZF0pKFxcZHsxLDE2fSkoPzpcXC4oXFxkezEsMTZ9KSk/KD86XFwuKFxcZHsxLDE2fSkpPyg/OiR8W15cXGRdKSI7dmFyIE9lPXRlKys7ZWVbT2VdPSIoPzp+Pj8pIjt2YXIgU2U9dGUrKztlZVtTZV09IihcXHMqKSIrZWVbT2VdKyJcXHMrIixaW1NlXT1uZXcgUmVnRXhwKGVlW1NlXSwiZyIpO3ZhciBSZT10ZSsrO2VlW1JlXT0iXiIrZWVbT2VdK2VlW3llXSsiJCI7dmFyIGplPXRlKys7ZWVbamVdPSJeIitlZVtPZV0rZWVbdmVdKyIkIjt2YXIgeGU9dGUrKztlZVt4ZV09Iig/OlxcXikiO3ZhciBMZT10ZSsrO2VlW0xlXT0iKFxccyopIitlZVt4ZV0rIlxccysiLFpbTGVdPW5ldyBSZWdFeHAoZWVbTGVdLCJnIik7dmFyIERlPXRlKys7ZWVbRGVdPSJeIitlZVt4ZV0rZWVbeWVdKyIkIjt2YXIgd2U9dGUrKztlZVt3ZV09Il4iK2VlW3hlXStlZVt2ZV0rIiQiO3ZhciBNZT10ZSsrO2VlW01lXT0iXiIrZWVbZ2VdKyJcXHMqKCIrbWUrIikkfF4kIjt2YXIga2U9dGUrKztlZVtrZV09Il4iK2VlW2dlXSsiXFxzKigiK2ZlKyIpJHxeJCI7dmFyIEllPXRlKys7ZWVbSWVdPSIoXFxzKikiK2VlW2dlXSsiXFxzKigiK21lKyJ8IitlZVt5ZV0rIikiLFpbSWVdPW5ldyBSZWdFeHAoZWVbSWVdLCJnIik7dmFyIFBlPXRlKys7ZWVbUGVdPSJeXFxzKigiK2VlW3llXSsiKVxccystXFxzKygiK2VlW3llXSsiKVxccyokIjt2YXIgTmU9dGUrKztlZVtOZV09Il5cXHMqKCIrZWVbdmVdKyIpXFxzKy1cXHMrKCIrZWVbdmVdKyIpXFxzKiQiO3ZhciBIZT10ZSsrO2VlW0hlXT0iKDx8Pik/PT9cXHMqXFwqIjtmb3IodmFyIEZlPTA7RmU8dGU7RmUrKykkKEZlLGVlW0ZlXSksWltGZV18fChaW0ZlXT1uZXcgUmVnRXhwKGVlW0ZlXSkpO3QucGFyc2U9cix0LnZhbGlkPW8sdC5jbGVhbj1zLHQuU2VtVmVyPWksaS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbj10aGlzLm1ham9yKyIuIit0aGlzLm1pbm9yKyIuIit0aGlzLnBhdGNoLHRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJih0aGlzLnZlcnNpb24rPSItIit0aGlzLnByZXJlbGVhc2Uuam9pbigiLiIpKSx0aGlzLnZlcnNpb259LGkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbn0saS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlKXtyZXR1cm4gJCgiU2VtVmVyLmNvbXBhcmUiLHRoaXMudmVyc2lvbix0aGlzLm9wdGlvbnMsZSksZSBpbnN0YW5jZW9mIGl8fChlPW5ldyBpKGUsdGhpcy5vcHRpb25zKSksdGhpcy5jb21wYXJlTWFpbihlKXx8dGhpcy5jb21wYXJlUHJlKGUpfSxpLnByb3RvdHlwZS5jb21wYXJlTWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGl8fChlPW5ldyBpKGUsdGhpcy5vcHRpb25zKSksdSh0aGlzLm1ham9yLGUubWFqb3IpfHx1KHRoaXMubWlub3IsZS5taW5vcil8fHUodGhpcy5wYXRjaCxlLnBhdGNoKX0saS5wcm90b3R5cGUuY29tcGFyZVByZT1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgaXx8KGU9bmV3IGkoZSx0aGlzLm9wdGlvbnMpKSx0aGlzLnByZXJlbGVhc2UubGVuZ3RoJiYhZS5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4tMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmZS5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4gMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmIWUucHJlcmVsZWFzZS5sZW5ndGgpcmV0dXJuIDA7dmFyIHQ9MDtkb3t2YXIgbj10aGlzLnByZXJlbGVhc2VbdF0scj1lLnByZXJlbGVhc2VbdF07aWYoJCgicHJlcmVsZWFzZSBjb21wYXJlIix0LG4sciksdm9pZCAwPT09biYmdm9pZCAwPT09cilyZXR1cm4gMDtpZih2b2lkIDA9PT1yKXJldHVybiAxO2lmKHZvaWQgMD09PW4pcmV0dXJuLTE7aWYobiE9PXIpcmV0dXJuIHUobixyKX13aGlsZSgrK3QpfSxpLnByb3RvdHlwZS5pbmM9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJwcmVtYWpvciI6dGhpcy5wcmVyZWxlYXNlLmxlbmd0aD0wLHRoaXMucGF0Y2g9MCx0aGlzLm1pbm9yPTAsdGhpcy5tYWpvcisrLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlbWlub3IiOnRoaXMucHJlcmVsZWFzZS5sZW5ndGg9MCx0aGlzLnBhdGNoPTAsdGhpcy5taW5vcisrLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlcGF0Y2giOnRoaXMucHJlcmVsZWFzZS5sZW5ndGg9MCx0aGlzLmluYygicGF0Y2giLHQpLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlcmVsZWFzZSI6MD09PXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJnRoaXMuaW5jKCJwYXRjaCIsdCksdGhpcy5pbmMoInByZSIsdCk7YnJlYWs7Y2FzZSJtYWpvciI6MD09PXRoaXMubWlub3ImJjA9PT10aGlzLnBhdGNoJiYwIT09dGhpcy5wcmVyZWxlYXNlLmxlbmd0aHx8dGhpcy5tYWpvcisrLHRoaXMubWlub3I9MCx0aGlzLnBhdGNoPTAsdGhpcy5wcmVyZWxlYXNlPVtdO2JyZWFrO2Nhc2UibWlub3IiOjA9PT10aGlzLnBhdGNoJiYwIT09dGhpcy5wcmVyZWxlYXNlLmxlbmd0aHx8dGhpcy5taW5vcisrLHRoaXMucGF0Y2g9MCx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwYXRjaCI6MD09PXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJnRoaXMucGF0Y2grKyx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwcmUiOmlmKDA9PT10aGlzLnByZXJlbGVhc2UubGVuZ3RoKXRoaXMucHJlcmVsZWFzZT1bMF07ZWxzZXtmb3IodmFyIG49dGhpcy5wcmVyZWxlYXNlLmxlbmd0aDstLW4+PTA7KSJudW1iZXIiPT10eXBlb2YgdGhpcy5wcmVyZWxlYXNlW25dJiYodGhpcy5wcmVyZWxlYXNlW25dKyssbj0tMik7LTE9PT1uJiZ0aGlzLnByZXJlbGVhc2UucHVzaCgwKX10JiYodGhpcy5wcmVyZWxlYXNlWzBdPT09dD9pc05hTih0aGlzLnByZXJlbGVhc2VbMV0pJiYodGhpcy5wcmVyZWxlYXNlPVt0LDBdKTp0aGlzLnByZXJlbGVhc2U9W3QsMF0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGluY3JlbWVudCBhcmd1bWVudDogIitlKX1yZXR1cm4gdGhpcy5mb3JtYXQoKSx0aGlzLnJhdz10aGlzLnZlcnNpb24sdGhpc30sdC5pbmM9YSx0LmRpZmY9bCx0LmNvbXBhcmVJZGVudGlmaWVycz11O3ZhciBCZT0vXlswLTldKyQvO3QucmNvbXBhcmVJZGVudGlmaWVycz1jLHQubWFqb3I9ZCx0Lm1pbm9yPV8sdC5wYXRjaD1wLHQuY29tcGFyZT1mLHQuY29tcGFyZUxvb3NlPW0sdC5yY29tcGFyZT1oLHQuc29ydD1nLHQucnNvcnQ9Yix0Lmd0PUUsdC5sdD15LHQuZXE9dix0Lm5lcT1ULHQuZ3RlPUEsdC5sdGU9Qyx0LmNtcD1PLHQuQ29tcGFyYXRvcj1TO3ZhciBVZT17fTtTLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnMubG9vc2U/WltNZV06WltrZV0sbj1lLm1hdGNoKHQpO2lmKCFuKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY29tcGFyYXRvcjogIitlKTt0aGlzLm9wZXJhdG9yPW5bMV0sIj0iPT09dGhpcy5vcGVyYXRvciYmKHRoaXMub3BlcmF0b3I9IiIpLG5bMl0/dGhpcy5zZW12ZXI9bmV3IGkoblsyXSx0aGlzLm9wdGlvbnMubG9vc2UpOnRoaXMuc2VtdmVyPVVlfSxTLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxTLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiAkKCJDb21wYXJhdG9yLnRlc3QiLGUsdGhpcy5vcHRpb25zLmxvb3NlKSx0aGlzLnNlbXZlcj09PVVlfHwoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1uZXcgaShlLHRoaXMub3B0aW9ucykpLE8oZSx0aGlzLm9wZXJhdG9yLHRoaXMuc2VtdmVyLHRoaXMub3B0aW9ucykpfSxTLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgUykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYSBDb21wYXJhdG9yIGlzIHJlcXVpcmVkIik7dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17bG9vc2U6ISF0LGluY2x1ZGVQcmVyZWxlYXNlOiExfSk7dmFyIG47aWYoIiI9PT10aGlzLm9wZXJhdG9yKXJldHVybiBuPW5ldyBSKGUudmFsdWUsdCksQih0aGlzLnZhbHVlLG4sdCk7aWYoIiI9PT1lLm9wZXJhdG9yKXJldHVybiBuPW5ldyBSKHRoaXMudmFsdWUsdCksQihlLnNlbXZlcixuLHQpO3ZhciByPSEoIj49IiE9PXRoaXMub3BlcmF0b3ImJiI+IiE9PXRoaXMub3BlcmF0b3J8fCI+PSIhPT1lLm9wZXJhdG9yJiYiPiIhPT1lLm9wZXJhdG9yKSxvPSEoIjw9IiE9PXRoaXMub3BlcmF0b3ImJiI8IiE9PXRoaXMub3BlcmF0b3J8fCI8PSIhPT1lLm9wZXJhdG9yJiYiPCIhPT1lLm9wZXJhdG9yKSxzPXRoaXMuc2VtdmVyLnZlcnNpb249PT1lLnNlbXZlci52ZXJzaW9uLGk9ISgiPj0iIT09dGhpcy5vcGVyYXRvciYmIjw9IiE9PXRoaXMub3BlcmF0b3J8fCI+PSIhPT1lLm9wZXJhdG9yJiYiPD0iIT09ZS5vcGVyYXRvciksYT1PKHRoaXMuc2VtdmVyLCI8IixlLnNlbXZlcix0KSYmKCI+PSI9PT10aGlzLm9wZXJhdG9yfHwiPiI9PT10aGlzLm9wZXJhdG9yKSYmKCI8PSI9PT1lLm9wZXJhdG9yfHwiPCI9PT1lLm9wZXJhdG9yKSxsPU8odGhpcy5zZW12ZXIsIj4iLGUuc2VtdmVyLHQpJiYoIjw9Ij09PXRoaXMub3BlcmF0b3J8fCI8Ij09PXRoaXMub3BlcmF0b3IpJiYoIj49Ij09PWUub3BlcmF0b3J8fCI+Ij09PWUub3BlcmF0b3IpO3JldHVybiByfHxvfHxzJiZpfHxhfHxsfSx0LlJhbmdlPVIsUi5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2U9dGhpcy5zZXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIiAiKS50cmltKCl9KS5qb2luKCJ8fCIpLnRyaW0oKSx0aGlzLnJhbmdlfSxSLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmdlfSxSLnByb3RvdHlwZS5wYXJzZVJhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucy5sb29zZTtlPWUudHJpbSgpO3ZhciBuPXQ/WltOZV06WltQZV07ZT1lLnJlcGxhY2UobixIKSwkKCJoeXBoZW4gcmVwbGFjZSIsZSksZT1lLnJlcGxhY2UoWltJZV0sIiQxJDIkMyIpLCQoImNvbXBhcmF0b3IgdHJpbSIsZSxaW0llXSksZT1lLnJlcGxhY2UoWltTZV0sIiQxfiIpLGU9ZS5yZXBsYWNlKFpbTGVdLCIkMV4iKSxlPWUuc3BsaXQoL1xzKy8pLmpvaW4oIiAiKTt2YXIgcj10P1pbTWVdOlpba2VdLG89ZS5zcGxpdCgiICIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geChlLHRoaXMub3B0aW9ucyl9LHRoaXMpLmpvaW4oIiAiKS5zcGxpdCgvXHMrLyk7cmV0dXJuIHRoaXMub3B0aW9ucy5sb29zZSYmKG89by5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlLm1hdGNoKHIpfSkpLG89by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTKGUsdGhpcy5vcHRpb25zKX0sdGhpcyl9LFIucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiBSKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhIFJhbmdlIGlzIHJlcXVpcmVkIik7cmV0dXJuIHRoaXMuc2V0LnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIG4uZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGUuc2V0LnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIG4uaW50ZXJzZWN0cyhlLHQpfSl9KX0pfSl9LHQudG9Db21wYXJhdG9ycz1qLFIucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1uZXcgaShlLHRoaXMub3B0aW9ucykpO2Zvcih2YXIgdD0wO3Q8dGhpcy5zZXQubGVuZ3RoO3QrKylpZihGKHRoaXMuc2V0W3RdLGUsdGhpcy5vcHRpb25zKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5zYXRpc2ZpZXM9Qix0Lm1heFNhdGlzZnlpbmc9VSx0Lm1pblNhdGlzZnlpbmc9Ryx0LnZhbGlkUmFuZ2U9eix0Lmx0cj1WLHQuZ3RyPVcsdC5vdXRzaWRlPVksdC5wcmVyZWxlYXNlPXEsdC5pbnRlcnNlY3RzPUssdC5jb2VyY2U9WH0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvc2VyaWFsaXplLWVycm9yL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbjtyZXR1cm4gbj1BcnJheS5pc0FycmF5KGUpP1tdOnt9LHQucHVzaChlKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPWVbb107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHMpcmV0dXJuIHMmJiJvYmplY3QiPT10eXBlb2Ygcz8tMT09PXQuaW5kZXhPZihlW29dKT92b2lkKG5bb109cihlW29dLHQuc2xpY2UoMCkpKTp2b2lkKG5bb109IltDaXJjdWxhcl0iKTp2b2lkKG5bb109cyl9KSxufWUuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciB0PXIoZSxbXSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJih0Lm5hbWU9ZS5uYW1lKSwic3RyaW5nIj09dHlwZW9mIGUubWVzc2FnZSYmKHQubWVzc2FnZT1lLm1lc3NhZ2UpLCJzdHJpbmciPT10eXBlb2YgZS5zdGFjayYmKHQuc3RhY2s9ZS5zdGFjayksdH1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT8iW0Z1bmN0aW9uOiAiKyhlLm5hbWV8fCJhbm9ueW1vdXMiKSsiXSI6ZX19LCIuL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPW5ldyBGdW5jdGlvbigiIitlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLG49MDtuPHQubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuKzFdO3ZhciByPXtjYWxsYmFjazplLGFyZ3M6dH07cmV0dXJuIHVbbF09cixhKGwpLGwrK31mdW5jdGlvbiBvKGUpe2RlbGV0ZSB1W2VdfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5jYWxsYmFjayxyPWUuYXJncztzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDp0KCk7YnJlYWs7Y2FzZSAxOnQoclswXSk7YnJlYWs7Y2FzZSAyOnQoclswXSxyWzFdKTticmVhaztjYXNlIDM6dChyWzBdLHJbMV0sclsyXSk7YnJlYWs7ZGVmYXVsdDp0LmFwcGx5KG4scil9fWZ1bmN0aW9uIGkoZSl7aWYoYylzZXRUaW1lb3V0KGksMCxlKTtlbHNle3ZhciB0PXVbZV07aWYodCl7Yz0hMDt0cnl7cyh0KX1maW5hbGx5e28oZSksYz0hMX19fX1pZighZS5zZXRJbW1lZGlhdGUpe3ZhciBhLGw9MSx1PXt9LGM9ITEsZD1lLmRvY3VtZW50LF89T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7Xz1fJiZfLnNldFRpbWVvdXQ/XzplLCJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoZS5wcm9jZXNzKT9mdW5jdGlvbigpe2E9ZnVuY3Rpb24oZSl7dC5uZXh0VGljayhmdW5jdGlvbigpe2koZSl9KX19KCk6ZnVuY3Rpb24oKXtpZihlLnBvc3RNZXNzYWdlJiYhZS5pbXBvcnRTY3JpcHRzKXt2YXIgdD0hMCxuPWUub25tZXNzYWdlO3JldHVybiBlLm9ubWVzc2FnZT1mdW5jdGlvbigpe3Q9ITF9LGUucG9zdE1lc3NhZ2UoIiIsIioiKSxlLm9ubWVzc2FnZT1uLHR9fSgpP2Z1bmN0aW9uKCl7dmFyIHQ9InNldEltbWVkaWF0ZSQiK01hdGgucmFuZG9tKCkrIiQiLG49ZnVuY3Rpb24obil7bi5zb3VyY2U9PT1lJiYic3RyaW5nIj09dHlwZW9mIG4uZGF0YSYmMD09PW4uZGF0YS5pbmRleE9mKHQpJiZpKCtuLmRhdGEuc2xpY2UodC5sZW5ndGgpKX07ZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbiwhMSk6ZS5hdHRhY2hFdmVudCgib25tZXNzYWdlIixuKSxhPWZ1bmN0aW9uKG4pe2UucG9zdE1lc3NhZ2UodCtuLCIqIil9fSgpOmUuTWVzc2FnZUNoYW5uZWw/ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7aShlLmRhdGEpfSxhPWZ1bmN0aW9uKHQpe2UucG9ydDIucG9zdE1lc3NhZ2UodCl9fSgpOmQmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT9mdW5jdGlvbigpe3ZhciBlPWQuZG9jdW1lbnRFbGVtZW50O2E9ZnVuY3Rpb24odCl7dmFyIG49ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2kodCksbi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxlLnJlbW92ZUNoaWxkKG4pLG49bnVsbH0sZS5hcHBlbmRDaGlsZChuKX19KCk6ZnVuY3Rpb24oKXthPWZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoaSwwLGUpfX0oKSxfLnNldEltbWVkaWF0ZT1yLF8uY2xlYXJJbW1lZGlhdGU9b319KCJ1bmRlZmluZWQiPT10eXBlb2Ygc2VsZj92b2lkIDA9PT1lP3RoaXM6ZTpzZWxmKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3NoYWxsb3dlcXVhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bj9uLmNhbGwocixlLHQpOnZvaWQgMDtpZih2b2lkIDAhPT1vKXJldHVybiEhbztpZihlPT09dClyZXR1cm4hMDtpZigib2JqZWN0IiE9dHlwZW9mIGV8fCFlfHwib2JqZWN0IiE9dHlwZW9mIHR8fCF0KXJldHVybiExO3ZhciBzPU9iamVjdC5rZXlzKGUpLGk9T2JqZWN0LmtleXModCk7aWYocy5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKHQpLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXTtpZighYSh1KSlyZXR1cm4hMTt2YXIgYz1lW3VdLGQ9dFt1XTtpZighMT09PShvPW4/bi5jYWxsKHIsYyxkLHUpOnZvaWQgMCl8fHZvaWQgMD09PW8mJmMhPT1kKXJldHVybiExfXJldHVybiEwfX0sIi4vbm9kZV9tb2R1bGVzL3NpbXBsZW1kZS9kaXN0L3NpbXBsZW1kZS5taW4uY3NzIjpmdW5jdGlvbihlLHQpe30sIi4vbm9kZV9tb2R1bGVzL3NpbXBsZW1kZS9zcmMvanMvY29kZW1pcnJvci90YWJsaXN0LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5qcyIpO3IuY29tbWFuZHMudGFiQW5kSW5kZW50TWFya2Rvd25MaXN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdFNlbGVjdGlvbnMoKSxuPXRbMF0uaGVhZDtpZighMSE9PWUuZ2V0U3RhdGVBZnRlcihuLmxpbmUpLmxpc3QpcmV0dXJuIHZvaWQgZS5leGVjQ29tbWFuZCgiaW5kZW50TW9yZSIpO2lmKGUub3B0aW9ucy5pbmRlbnRXaXRoVGFicyllLmV4ZWNDb21tYW5kKCJpbnNlcnRUYWIiKTtlbHNle3ZhciByPUFycmF5KGUub3B0aW9ucy50YWJTaXplKzEpLmpvaW4oIiAiKTtlLnJlcGxhY2VTZWxlY3Rpb24ocil9fSxyLmNvbW1hbmRzLnNoaWZ0VGFiQW5kVW5pbmRlbnRNYXJrZG93bkxpc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5saXN0U2VsZWN0aW9ucygpLG49dFswXS5oZWFkO2lmKCExIT09ZS5nZXRTdGF0ZUFmdGVyKG4ubGluZSkubGlzdClyZXR1cm4gdm9pZCBlLmV4ZWNDb21tYW5kKCJpbmRlbnRMZXNzIik7aWYoZS5vcHRpb25zLmluZGVudFdpdGhUYWJzKWUuZXhlY0NvbW1hbmQoImluc2VydFRhYiIpO2Vsc2V7dmFyIHI9QXJyYXkoZS5vcHRpb25zLnRhYlNpemUrMSkuam9pbigiICIpO2UucmVwbGFjZVNlbGVjdGlvbihyKX19fSwiLi9ub2RlX21vZHVsZXMvc2ltcGxlbWRlL3NyYy9qcy9zaW1wbGVtZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT16P2UucmVwbGFjZSgiQ3RybCIsIkNtZCIpOmUucmVwbGFjZSgiQ21kIiwiQ3RybCIpfWZ1bmN0aW9uIG8oZSx0LG4pe2U9ZXx8e307dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiB0PXZvaWQgMD09dHx8dCxlLnRpdGxlJiZ0JiYoci50aXRsZT1pKGUudGl0bGUsZS5hY3Rpb24sbikseiYmKHIudGl0bGU9ci50aXRsZS5yZXBsYWNlKCJDdHJsIiwi4oyYIiksci50aXRsZT1yLnRpdGxlLnJlcGxhY2UoIkFsdCIsIuKMpSIpKSksci50YWJJbmRleD0tMSxyLmNsYXNzTmFtZT1lLmNsYXNzTmFtZSxyfWZ1bmN0aW9uIHMoKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7cmV0dXJuIGUuY2xhc3NOYW1lPSJzZXBhcmF0b3IiLGUuaW5uZXJIVE1MPSJ8IixlfWZ1bmN0aW9uIGkoZSx0LG4pe3ZhciBvLHM9ZTtyZXR1cm4gdCYmKG89WSh0KSxuW29dJiYocys9IiAoIityKG5bb10pKyIpIikpLHN9ZnVuY3Rpb24gYShlLHQpe3Q9dHx8ZS5nZXRDdXJzb3IoInN0YXJ0Iik7dmFyIG49ZS5nZXRUb2tlbkF0KHQpO2lmKCFuLnR5cGUpcmV0dXJue307Zm9yKHZhciByLG8scz1uLnR5cGUuc3BsaXQoIiAiKSxpPXt9LGE9MDthPHMubGVuZ3RoO2ErKylyPXNbYV0sInN0cm9uZyI9PT1yP2kuYm9sZD0hMDoidmFyaWFibGUtMiI9PT1yPyhvPWUuZ2V0TGluZSh0LmxpbmUpLC9eXHMqXGQrXC5ccy8udGVzdChvKT9pWyJvcmRlcmVkLWxpc3QiXT0hMDppWyJ1bm9yZGVyZWQtbGlzdCJdPSEwKToiYXRvbSI9PT1yP2kucXVvdGU9ITA6ImVtIj09PXI/aS5pdGFsaWM9ITA6InF1b3RlIj09PXI/aS5xdW90ZT0hMDoic3RyaWtldGhyb3VnaCI9PT1yP2kuc3RyaWtldGhyb3VnaD0hMDoiY29tbWVudCI9PT1yP2kuY29kZT0hMDoibGluayI9PT1yP2kubGluaz0hMDoidGFnIj09PXI/aS5pbWFnZT0hMDpyLm1hdGNoKC9eaGVhZGVyKFwtWzEtNl0pPyQvKSYmKGlbci5yZXBsYWNlKCJoZWFkZXIiLCJoZWFkaW5nIildPSEwKTtyZXR1cm4gaX1mdW5jdGlvbiBsKGUpe3ZhciB0PWUuY29kZW1pcnJvcjt0LnNldE9wdGlvbigiZnVsbFNjcmVlbiIsIXQuZ2V0T3B0aW9uKCJmdWxsU2NyZWVuIikpLHQuZ2V0T3B0aW9uKCJmdWxsU2NyZWVuIik/KEs9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTpkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PUs7dmFyIG49dC5nZXRXcmFwcGVyRWxlbWVudCgpOy9mdWxsc2NyZWVuLy50ZXN0KG4ucHJldmlvdXNTaWJsaW5nLmNsYXNzTmFtZSk/bi5wcmV2aW91c1NpYmxpbmcuY2xhc3NOYW1lPW4ucHJldmlvdXNTaWJsaW5nLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypmdWxsc2NyZWVuXGIvLCIiKTpuLnByZXZpb3VzU2libGluZy5jbGFzc05hbWUrPSIgZnVsbHNjcmVlbiI7dmFyIHI9ZS50b29sYmFyRWxlbWVudHMuZnVsbHNjcmVlbjsvYWN0aXZlLy50ZXN0KHIuY2xhc3NOYW1lKT9yLmNsYXNzTmFtZT1yLmNsYXNzTmFtZS5yZXBsYWNlKC9ccyphY3RpdmVccyovZywiIik6ci5jbGFzc05hbWUrPSIgYWN0aXZlIiwvZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGUvLnRlc3QodC5nZXRXcmFwcGVyRWxlbWVudCgpLm5leHRTaWJsaW5nLmNsYXNzTmFtZSkmJmooZSl9ZnVuY3Rpb24gdShlKXtNKGUsImJvbGQiLGUub3B0aW9ucy5ibG9ja1N0eWxlcy5ib2xkKX1mdW5jdGlvbiBjKGUpe00oZSwiaXRhbGljIixlLm9wdGlvbnMuYmxvY2tTdHlsZXMuaXRhbGljKX1mdW5jdGlvbiBkKGUpe00oZSwic3RyaWtldGhyb3VnaCIsIn5+Iil9ZnVuY3Rpb24gXyhlKXtmdW5jdGlvbiB0KGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyJmZW5jaW5nX2xpbmUoKSB0YWtlcyBhICdsaW5lJyBvYmplY3QgKG5vdCBhIGxpbmUgbnVtYmVyLCBvciBsaW5lIHRleHQpLiAgR290OiAiK3R5cGVvZiBlKyI6ICIrZTtyZXR1cm4gZS5zdHlsZXMmJmUuc3R5bGVzWzJdJiYtMSE9PWUuc3R5bGVzWzJdLmluZGV4T2YoImZvcm1hdHRpbmctY29kZS1ibG9jayIpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIGUuc3RhdGUuYmFzZS5iYXNlfHxlLnN0YXRlLmJhc2V9ZnVuY3Rpb24gcihlLHIsbyxzLGkpe289b3x8ZS5nZXRMaW5lSGFuZGxlKHIpLHM9c3x8ZS5nZXRUb2tlbkF0KHtsaW5lOnIsY2g6MX0pLGk9aXx8ISFvLnRleHQmJmUuZ2V0VG9rZW5BdCh7bGluZTpyLGNoOm8udGV4dC5sZW5ndGgtMX0pO3ZhciBhPXMudHlwZT9zLnR5cGUuc3BsaXQoIiAiKTpbXTtyZXR1cm4gaSYmbihpKS5pbmRlbnRlZENvZGU/ImluZGVudGVkIjotMSE9PWEuaW5kZXhPZigiY29tbWVudCIpJiYobihzKS5mZW5jZWRDaGFyc3x8bihpKS5mZW5jZWRDaGFyc3x8dChvKT8iZmVuY2VkIjoic2luZ2xlIil9dmFyIG8scyxpLGE9ZS5vcHRpb25zLmJsb2NrU3R5bGVzLmNvZGUsbD1lLmNvZGVtaXJyb3IsdT1sLmdldEN1cnNvcigic3RhcnQiKSxjPWwuZ2V0Q3Vyc29yKCJlbmQiKSxkPWwuZ2V0VG9rZW5BdCh7bGluZTp1LmxpbmUsY2g6dS5jaHx8MX0pLF89bC5nZXRMaW5lSGFuZGxlKHUubGluZSkscD1yKGwsdS5saW5lLF8sZCk7aWYoInNpbmdsZSI9PT1wKXt2YXIgZj1fLnRleHQuc2xpY2UoMCx1LmNoKS5yZXBsYWNlKCJgIiwiIiksbT1fLnRleHQuc2xpY2UodS5jaCkucmVwbGFjZSgiYCIsIiIpO2wucmVwbGFjZVJhbmdlKGYrbSx7bGluZTp1LmxpbmUsY2g6MH0se2xpbmU6dS5saW5lLGNoOjk5OTk5OTk5OTk5OTk5fSksdS5jaC0tLHUhPT1jJiZjLmNoLS0sbC5zZXRTZWxlY3Rpb24odSxjKSxsLmZvY3VzKCl9ZWxzZSBpZigiZmVuY2VkIj09PXApaWYodS5saW5lIT09Yy5saW5lfHx1LmNoIT09Yy5jaCl7Zm9yKG89dS5saW5lO28+PTAmJihfPWwuZ2V0TGluZUhhbmRsZShvKSwhdChfKSk7by0tKTt2YXIgaCxnLGIsRSx5PWwuZ2V0VG9rZW5BdCh7bGluZTpvLGNoOjF9KSx2PW4oeSkuZmVuY2VkQ2hhcnM7dChsLmdldExpbmVIYW5kbGUodS5saW5lKSk/KGg9IiIsZz11LmxpbmUpOnQobC5nZXRMaW5lSGFuZGxlKHUubGluZS0xKSk/KGg9IiIsZz11LmxpbmUtMSk6KGg9disiXG4iLGc9dS5saW5lKSx0KGwuZ2V0TGluZUhhbmRsZShjLmxpbmUpKT8oYj0iIixFPWMubGluZSwwPT09Yy5jaCYmKEUrPTEpKTowIT09Yy5jaCYmdChsLmdldExpbmVIYW5kbGUoYy5saW5lKzEpKT8oYj0iIixFPWMubGluZSsxKTooYj12KyJcbiIsRT1jLmxpbmUrMSksMD09PWMuY2gmJihFLT0xKSxsLm9wZXJhdGlvbihmdW5jdGlvbigpe2wucmVwbGFjZVJhbmdlKGIse2xpbmU6RSxjaDowfSx7bGluZTpFKyhiPzA6MSksY2g6MH0pLGwucmVwbGFjZVJhbmdlKGgse2xpbmU6ZyxjaDowfSx7bGluZTpnKyhoPzA6MSksY2g6MH0pfSksbC5zZXRTZWxlY3Rpb24oe2xpbmU6ZysoaD8xOjApLGNoOjB9LHtsaW5lOkUrKGg/MTotMSksY2g6MH0pLGwuZm9jdXMoKX1lbHNle3ZhciBUPXUubGluZTtpZih0KGwuZ2V0TGluZUhhbmRsZSh1LmxpbmUpKSYmKCJmZW5jZWQiPT09cihsLHUubGluZSsxKT8obz11LmxpbmUsVD11LmxpbmUrMSk6KHM9dS5saW5lLFQ9dS5saW5lLTEpKSx2b2lkIDA9PT1vKWZvcihvPVQ7bz49MCYmKF89bC5nZXRMaW5lSGFuZGxlKG8pLCF0KF8pKTtvLS0pO2lmKHZvaWQgMD09PXMpZm9yKGk9bC5saW5lQ291bnQoKSxzPVQ7czxpJiYoXz1sLmdldExpbmVIYW5kbGUocyksIXQoXykpO3MrKyk7bC5vcGVyYXRpb24oZnVuY3Rpb24oKXtsLnJlcGxhY2VSYW5nZSgiIix7bGluZTpvLGNoOjB9LHtsaW5lOm8rMSxjaDowfSksbC5yZXBsYWNlUmFuZ2UoIiIse2xpbmU6cy0xLGNoOjB9LHtsaW5lOnMsY2g6MH0pfSksbC5mb2N1cygpfWVsc2UgaWYoImluZGVudGVkIj09PXApe2lmKHUubGluZSE9PWMubGluZXx8dS5jaCE9PWMuY2gpbz11LmxpbmUscz1jLmxpbmUsMD09PWMuY2gmJnMtLTtlbHNle2ZvcihvPXUubGluZTtvPj0wO28tLSlpZihfPWwuZ2V0TGluZUhhbmRsZShvKSwhXy50ZXh0Lm1hdGNoKC9eXHMqJC8pJiYiaW5kZW50ZWQiIT09cihsLG8sXykpe28rPTE7YnJlYWt9Zm9yKGk9bC5saW5lQ291bnQoKSxzPXUubGluZTtzPGk7cysrKWlmKF89bC5nZXRMaW5lSGFuZGxlKHMpLCFfLnRleHQubWF0Y2goL15ccyokLykmJiJpbmRlbnRlZCIhPT1yKGwscyxfKSl7cy09MTticmVha319dmFyIEE9bC5nZXRMaW5lSGFuZGxlKHMrMSksQz1BJiZsLmdldFRva2VuQXQoe2xpbmU6cysxLGNoOkEudGV4dC5sZW5ndGgtMX0pLE89QyYmbihDKS5pbmRlbnRlZENvZGU7TyYmbC5yZXBsYWNlUmFuZ2UoIlxuIix7bGluZTpzKzEsY2g6MH0pO2Zvcih2YXIgUz1vO1M8PXM7UysrKWwuaW5kZW50TGluZShTLCJzdWJ0cmFjdCIpO2wuZm9jdXMoKX1lbHNle3ZhciBSPXUubGluZT09PWMubGluZSYmdS5jaD09PWMuY2gmJjA9PT11LmNoLGo9dS5saW5lIT09Yy5saW5lO1J8fGo/ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dC5saW5lKzEscz1uLmxpbmUrMSxpPXQubGluZSE9PW4ubGluZSxhPXIrIlxuIixsPSJcbiIrcjtpJiZzKyssaSYmMD09PW4uY2gmJihsPXIrIlxuIixzLS0pLEwoZSwhMSxbYSxsXSksZS5zZXRTZWxlY3Rpb24oe2xpbmU6byxjaDowfSx7bGluZTpzLGNoOjB9KX0obCx1LGMsYSk6TChsLCExLFsiYCIsImAiXSl9fWZ1bmN0aW9uIHAoZSl7dyhlLmNvZGVtaXJyb3IsInF1b3RlIil9ZnVuY3Rpb24gZihlKXtEKGUuY29kZW1pcnJvciwic21hbGxlciIpfWZ1bmN0aW9uIG0oZSl7RChlLmNvZGVtaXJyb3IsImJpZ2dlciIpfWZ1bmN0aW9uIGgoZSl7RChlLmNvZGVtaXJyb3Isdm9pZCAwLDEpfWZ1bmN0aW9uIGcoZSl7RChlLmNvZGVtaXJyb3Isdm9pZCAwLDIpfWZ1bmN0aW9uIGIoZSl7RChlLmNvZGVtaXJyb3Isdm9pZCAwLDMpfWZ1bmN0aW9uIEUoZSl7dyhlLmNvZGVtaXJyb3IsInVub3JkZXJlZC1saXN0Iil9ZnVuY3Rpb24geShlKXt3KGUuY29kZW1pcnJvciwib3JkZXJlZC1saXN0Iil9ZnVuY3Rpb24gdihlKXtrKGUuY29kZW1pcnJvcil9ZnVuY3Rpb24gVChlKXt2YXIgdD1lLmNvZGVtaXJyb3Isbj1hKHQpLHI9ZS5vcHRpb25zLG89Imh0dHA6Ly8iO2lmKHIucHJvbXB0VVJMcyYmIShvPXByb21wdChyLnByb21wdFRleHRzLmxpbmspKSlyZXR1cm4hMTtMKHQsbi5saW5rLHIuaW5zZXJ0VGV4dHMubGluayxvKX1mdW5jdGlvbiBBKGUpe3ZhciB0PWUuY29kZW1pcnJvcixuPWEodCkscj1lLm9wdGlvbnMsbz0iaHR0cDovLyI7aWYoci5wcm9tcHRVUkxzJiYhKG89cHJvbXB0KHIucHJvbXB0VGV4dHMuaW1hZ2UpKSlyZXR1cm4hMTtMKHQsbi5pbWFnZSxyLmluc2VydFRleHRzLmltYWdlLG8pfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb2RlbWlycm9yLG49YSh0KSxyPWUub3B0aW9ucztMKHQsbi50YWJsZSxyLmluc2VydFRleHRzLnRhYmxlKX1mdW5jdGlvbiBPKGUpe3ZhciB0PWUuY29kZW1pcnJvcixuPWEodCkscj1lLm9wdGlvbnM7TCh0LG4uaW1hZ2Usci5pbnNlcnRUZXh0cy5ob3Jpem9udGFsUnVsZSl9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lLmNvZGVtaXJyb3I7dC51bmRvKCksdC5mb2N1cygpfWZ1bmN0aW9uIFIoZSl7dmFyIHQ9ZS5jb2RlbWlycm9yO3QucmVkbygpLHQuZm9jdXMoKX1mdW5jdGlvbiBqKGUpe3ZhciB0PWUuY29kZW1pcnJvcixuPXQuZ2V0V3JhcHBlckVsZW1lbnQoKSxyPW4ubmV4dFNpYmxpbmcsbz1lLnRvb2xiYXJFbGVtZW50c1sic2lkZS1ieS1zaWRlIl0scz0hMTsvZWRpdG9yLXByZXZpZXctYWN0aXZlLXNpZGUvLnRlc3Qoci5jbGFzc05hbWUpPyhyLmNsYXNzTmFtZT1yLmNsYXNzTmFtZS5yZXBsYWNlKC9ccyplZGl0b3ItcHJldmlldy1hY3RpdmUtc2lkZVxzKi9nLCIiKSxvLmNsYXNzTmFtZT1vLmNsYXNzTmFtZS5yZXBsYWNlKC9ccyphY3RpdmVccyovZywiIiksbi5jbGFzc05hbWU9bi5jbGFzc05hbWUucmVwbGFjZSgvXHMqQ29kZU1pcnJvci1zaWRlZFxzKi9nLCIgIikpOihzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5nZXRPcHRpb24oImZ1bGxTY3JlZW4iKXx8bChlKSxyLmNsYXNzTmFtZSs9IiBlZGl0b3ItcHJldmlldy1hY3RpdmUtc2lkZSJ9LDEpLG8uY2xhc3NOYW1lKz0iIGFjdGl2ZSIsbi5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1zaWRlZCIscz0hMCk7dmFyIGk9bi5sYXN0Q2hpbGQ7aWYoL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChpLmNsYXNzTmFtZSkpe2kuY2xhc3NOYW1lPWkuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmVkaXRvci1wcmV2aWV3LWFjdGl2ZVxzKi9nLCIiKTt2YXIgYT1lLnRvb2xiYXJFbGVtZW50cy5wcmV2aWV3LHU9bi5wcmV2aW91c1NpYmxpbmc7YS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgvXHMqYWN0aXZlXHMqL2csIiIpLHUuY2xhc3NOYW1lPXUuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmRpc2FibGVkLWZvci1wcmV2aWV3Ki9nLCIiKX12YXIgYz1mdW5jdGlvbigpe3IuaW5uZXJIVE1MPWUub3B0aW9ucy5wcmV2aWV3UmVuZGVyKGUudmFsdWUoKSxyKX07dC5zaWRlQnlTaWRlUmVuZGVyaW5nRnVuY3Rpb258fCh0LnNpZGVCeVNpZGVSZW5kZXJpbmdGdW5jdGlvbj1jKSxzPyhyLmlubmVySFRNTD1lLm9wdGlvbnMucHJldmlld1JlbmRlcihlLnZhbHVlKCksciksdC5vbigidXBkYXRlIix0LnNpZGVCeVNpZGVSZW5kZXJpbmdGdW5jdGlvbikpOnQub2ZmKCJ1cGRhdGUiLHQuc2lkZUJ5U2lkZVJlbmRlcmluZ0Z1bmN0aW9uKSx0LnJlZnJlc2goKX1mdW5jdGlvbiB4KGUpe3ZhciB0PWUuY29kZW1pcnJvcixuPXQuZ2V0V3JhcHBlckVsZW1lbnQoKSxyPW4ucHJldmlvdXNTaWJsaW5nLG89ISFlLm9wdGlvbnMudG9vbGJhciYmZS50b29sYmFyRWxlbWVudHMucHJldmlldyxzPW4ubGFzdENoaWxkO3MmJi9lZGl0b3ItcHJldmlldy8udGVzdChzLmNsYXNzTmFtZSl8fChzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHMuY2xhc3NOYW1lPSJlZGl0b3ItcHJldmlldyIsbi5hcHBlbmRDaGlsZChzKSksL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChzLmNsYXNzTmFtZSk/KHMuY2xhc3NOYW1lPXMuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmVkaXRvci1wcmV2aWV3LWFjdGl2ZVxzKi9nLCIiKSxvJiYoby5jbGFzc05hbWU9by5jbGFzc05hbWUucmVwbGFjZSgvXHMqYWN0aXZlXHMqL2csIiIpLHIuY2xhc3NOYW1lPXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmRpc2FibGVkLWZvci1wcmV2aWV3Ki9nLCIiKSkpOihzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5jbGFzc05hbWUrPSIgZWRpdG9yLXByZXZpZXctYWN0aXZlIn0sMSksbyYmKG8uY2xhc3NOYW1lKz0iIGFjdGl2ZSIsci5jbGFzc05hbWUrPSIgZGlzYWJsZWQtZm9yLXByZXZpZXciKSkscy5pbm5lckhUTUw9ZS5vcHRpb25zLnByZXZpZXdSZW5kZXIoZS52YWx1ZSgpLHMpLC9lZGl0b3ItcHJldmlldy1hY3RpdmUtc2lkZS8udGVzdCh0LmdldFdyYXBwZXJFbGVtZW50KCkubmV4dFNpYmxpbmcuY2xhc3NOYW1lKSYmaihlKX1mdW5jdGlvbiBMKGUsdCxuLHIpe2lmKCEvZWRpdG9yLXByZXZpZXctYWN0aXZlLy50ZXN0KGUuZ2V0V3JhcHBlckVsZW1lbnQoKS5sYXN0Q2hpbGQuY2xhc3NOYW1lKSl7dmFyIG8scz1uWzBdLGk9blsxXSxhPWUuZ2V0Q3Vyc29yKCJzdGFydCIpLGw9ZS5nZXRDdXJzb3IoImVuZCIpO3ImJihpPWkucmVwbGFjZSgiI3VybCMiLHIpKSx0PyhvPWUuZ2V0TGluZShhLmxpbmUpLHM9by5zbGljZSgwLGEuY2gpLGk9by5zbGljZShhLmNoKSxlLnJlcGxhY2VSYW5nZShzK2kse2xpbmU6YS5saW5lLGNoOjB9KSk6KG89ZS5nZXRTZWxlY3Rpb24oKSxlLnJlcGxhY2VTZWxlY3Rpb24ocytvK2kpLGEuY2grPXMubGVuZ3RoLGEhPT1sJiYobC5jaCs9cy5sZW5ndGgpKSxlLnNldFNlbGVjdGlvbihhLGwpLGUuZm9jdXMoKX19ZnVuY3Rpb24gRChlLHQsbil7aWYoIS9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QoZS5nZXRXcmFwcGVyRWxlbWVudCgpLmxhc3RDaGlsZC5jbGFzc05hbWUpKXtmb3IodmFyIHI9ZS5nZXRDdXJzb3IoInN0YXJ0Iiksbz1lLmdldEN1cnNvcigiZW5kIikscz1yLmxpbmU7czw9by5saW5lO3MrKykhZnVuY3Rpb24ocil7dmFyIG89ZS5nZXRMaW5lKHIpLHM9by5zZWFyY2goL1teI10vKTtvPXZvaWQgMCE9PXQ/czw9MD8iYmlnZ2VyIj09dD8iIyMjIyMjICIrbzoiIyAiK286Nj09cyYmInNtYWxsZXIiPT10P28uc3Vic3RyKDcpOjE9PXMmJiJiaWdnZXIiPT10P28uc3Vic3RyKDIpOiJiaWdnZXIiPT10P28uc3Vic3RyKDEpOiIjIitvOjE9PW4/czw9MD8iIyAiK286cz09bj9vLnN1YnN0cihzKzEpOiIjICIrby5zdWJzdHIocysxKToyPT1uP3M8PTA/IiMjICIrbzpzPT1uP28uc3Vic3RyKHMrMSk6IiMjICIrby5zdWJzdHIocysxKTpzPD0wPyIjIyMgIitvOnM9PW4/by5zdWJzdHIocysxKToiIyMjICIrby5zdWJzdHIocysxKSxlLnJlcGxhY2VSYW5nZShvLHtsaW5lOnIsY2g6MH0se2xpbmU6cixjaDo5OTk5OTk5OTk5OTk5OX0pfShzKTtlLmZvY3VzKCl9fWZ1bmN0aW9uIHcoZSx0KXtpZighL2VkaXRvci1wcmV2aWV3LWFjdGl2ZS8udGVzdChlLmdldFdyYXBwZXJFbGVtZW50KCkubGFzdENoaWxkLmNsYXNzTmFtZSkpe2Zvcih2YXIgbj1hKGUpLHI9ZS5nZXRDdXJzb3IoInN0YXJ0Iiksbz1lLmdldEN1cnNvcigiZW5kIikscz17cXVvdGU6L14oXHMqKVw+XHMrLywidW5vcmRlcmVkLWxpc3QiOi9eKFxzKikoXCp8XC18XCspXHMrLywib3JkZXJlZC1saXN0IjovXihccyopXGQrXC5ccysvfSxpPXtxdW90ZToiPiAiLCJ1bm9yZGVyZWQtbGlzdCI6IiogIiwib3JkZXJlZC1saXN0IjoiMS4gIn0sbD1yLmxpbmU7bDw9by5saW5lO2wrKykhZnVuY3Rpb24ocil7dmFyIG89ZS5nZXRMaW5lKHIpO289blt0XT9vLnJlcGxhY2Uoc1t0XSwiJDEiKTppW3RdK28sZS5yZXBsYWNlUmFuZ2Uobyx7bGluZTpyLGNoOjB9LHtsaW5lOnIsY2g6OTk5OTk5OTk5OTk5OTl9KX0obCk7ZS5mb2N1cygpfX1mdW5jdGlvbiBNKGUsdCxuLHIpe2lmKCEvZWRpdG9yLXByZXZpZXctYWN0aXZlLy50ZXN0KGUuY29kZW1pcnJvci5nZXRXcmFwcGVyRWxlbWVudCgpLmxhc3RDaGlsZC5jbGFzc05hbWUpKXtyPXZvaWQgMD09PXI/bjpyO3ZhciBvLHM9ZS5jb2RlbWlycm9yLGk9YShzKSxsPW4sdT1yLGM9cy5nZXRDdXJzb3IoInN0YXJ0IiksZD1zLmdldEN1cnNvcigiZW5kIik7aVt0XT8obz1zLmdldExpbmUoYy5saW5lKSxsPW8uc2xpY2UoMCxjLmNoKSx1PW8uc2xpY2UoYy5jaCksImJvbGQiPT10PyhsPWwucmVwbGFjZSgvKFwqXCp8X18pKD8hW1xzXFNdKihcKlwqfF9fKSkvLCIiKSx1PXUucmVwbGFjZSgvKFwqXCp8X18pLywiIikpOiJpdGFsaWMiPT10PyhsPWwucmVwbGFjZSgvKFwqfF8pKD8hW1xzXFNdKihcKnxfKSkvLCIiKSx1PXUucmVwbGFjZSgvKFwqfF8pLywiIikpOiJzdHJpa2V0aHJvdWdoIj09dCYmKGw9bC5yZXBsYWNlKC8oXCpcKnx+fikoPyFbXHNcU10qKFwqXCp8fn4pKS8sIiIpLHU9dS5yZXBsYWNlKC8oXCpcKnx+fikvLCIiKSkscy5yZXBsYWNlUmFuZ2UobCt1LHtsaW5lOmMubGluZSxjaDowfSx7bGluZTpjLmxpbmUsY2g6OTk5OTk5OTk5OTk5OTl9KSwiYm9sZCI9PXR8fCJzdHJpa2V0aHJvdWdoIj09dD8oYy5jaC09MixjIT09ZCYmKGQuY2gtPTIpKToiaXRhbGljIj09dCYmKGMuY2gtPTEsYyE9PWQmJihkLmNoLT0xKSkpOihvPXMuZ2V0U2VsZWN0aW9uKCksImJvbGQiPT10PyhvPW8uc3BsaXQoIioqIikuam9pbigiIiksbz1vLnNwbGl0KCJfXyIpLmpvaW4oIiIpKToiaXRhbGljIj09dD8obz1vLnNwbGl0KCIqIikuam9pbigiIiksbz1vLnNwbGl0KCJfIikuam9pbigiIikpOiJzdHJpa2V0aHJvdWdoIj09dCYmKG89by5zcGxpdCgifn4iKS5qb2luKCIiKSkscy5yZXBsYWNlU2VsZWN0aW9uKGwrbyt1KSxjLmNoKz1uLmxlbmd0aCxkLmNoPWMuY2grby5sZW5ndGgpLHMuc2V0U2VsZWN0aW9uKGMsZCkscy5mb2N1cygpfX1mdW5jdGlvbiBrKGUpe2lmKCEvZWRpdG9yLXByZXZpZXctYWN0aXZlLy50ZXN0KGUuZ2V0V3JhcHBlckVsZW1lbnQoKS5sYXN0Q2hpbGQuY2xhc3NOYW1lKSlmb3IodmFyIHQsbj1lLmdldEN1cnNvcigic3RhcnQiKSxyPWUuZ2V0Q3Vyc29yKCJlbmQiKSxvPW4ubGluZTtvPD1yLmxpbmU7bysrKXQ9ZS5nZXRMaW5lKG8pLHQ9dC5yZXBsYWNlKC9eWyBdKihbIyBdK3xcKnxcLXxbPiBdK3xbMC05XSsoLnxcKSkpWyBdKi8sIiIpLGUucmVwbGFjZVJhbmdlKHQse2xpbmU6byxjaDowfSx7bGluZTpvLGNoOjk5OTk5OTk5OTk5OTk5fSl9ZnVuY3Rpb24gSShlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJih0W25daW5zdGFuY2VvZiBBcnJheT9lW25dPXRbbl0uY29uY2F0KGVbbl1pbnN0YW5jZW9mIEFycmF5P2Vbbl06W10pOm51bGwhPT10W25dJiYib2JqZWN0Ij09dHlwZW9mIHRbbl0mJnRbbl0uY29uc3RydWN0b3I9PT1PYmplY3Q/ZVtuXT1JKGVbbl18fHt9LHRbbl0pOmVbbl09dFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gUChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9SShlLGFyZ3VtZW50c1t0XSk7cmV0dXJuIGV9ZnVuY3Rpb24gTihlKXt2YXIgdD0vW2EtekEtWjAtOV9cdTAzOTItXHUwM2M5XHUwNDEwLVx1MDRGOV0rfFtcdTRFMDAtXHU5RkZGXHUzNDAwLVx1NGRiZlx1ZjkwMC1cdWZhZmZcdTMwNDAtXHUzMDlmXHVhYzAwLVx1ZDdhZl0rL2csbj1lLm1hdGNoKHQpLHI9MDtpZihudWxsPT09bilyZXR1cm4gcjtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyluW29dLmNoYXJDb2RlQXQoMCk+PTE5OTY4P3IrPW5bb10ubGVuZ3RoOnIrPTE7cmV0dXJuIHJ9ZnVuY3Rpb24gSChlKXtlPWV8fHt9LGUucGFyZW50PXRoaXM7dmFyIHQ9ITA7aWYoITE9PT1lLmF1dG9Eb3dubG9hZEZvbnRBd2Vzb21lJiYodD0hMSksITAhPT1lLmF1dG9Eb3dubG9hZEZvbnRBd2Vzb21lKWZvcih2YXIgbj1kb2N1bWVudC5zdHlsZVNoZWV0cyxyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5ocmVmJiZuW3JdLmhyZWYuaW5kZXhPZigiLy9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvIik+LTEmJih0PSExKTtpZih0KXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7by5yZWw9InN0eWxlc2hlZXQiLG8uaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvbGF0ZXN0L2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChvKX1pZihlLmVsZW1lbnQpdGhpcy5lbGVtZW50PWUuZWxlbWVudDtlbHNlIGlmKG51bGw9PT1lLmVsZW1lbnQpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coIlNpbXBsZU1ERTogRXJyb3IuIE5vIGVsZW1lbnQgd2FzIGZvdW5kLiIpO2lmKHZvaWQgMD09PWUudG9vbGJhcil7ZS50b29sYmFyPVtdO2Zvcih2YXIgcyBpbiBYKVguaGFzT3duUHJvcGVydHkocykmJigtMSE9cy5pbmRleE9mKCJzZXBhcmF0b3ItIikmJmUudG9vbGJhci5wdXNoKCJ8IiksKCEwPT09WFtzXS5kZWZhdWx0fHxlLnNob3dJY29ucyYmZS5zaG93SWNvbnMuY29uc3RydWN0b3I9PT1BcnJheSYmLTEhPWUuc2hvd0ljb25zLmluZGV4T2YocykpJiZlLnRvb2xiYXIucHVzaChzKSl9ZS5oYXNPd25Qcm9wZXJ0eSgic3RhdHVzIil8fChlLnN0YXR1cz1bImF1dG9zYXZlIiwibGluZXMiLCJ3b3JkcyIsImN1cnNvciJdKSxlLnByZXZpZXdSZW5kZXJ8fChlLnByZXZpZXdSZW5kZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50Lm1hcmtkb3duKGUpfSksZS5wYXJzaW5nQ29uZmlnPVAoe2hpZ2hsaWdodEZvcm1hdHRpbmc6ITB9LGUucGFyc2luZ0NvbmZpZ3x8e30pLGUuaW5zZXJ0VGV4dHM9UCh7fSwkLGUuaW5zZXJ0VGV4dHN8fHt9KSxlLnByb21wdFRleHRzPVEsZS5ibG9ja1N0eWxlcz1QKHt9LEosZS5ibG9ja1N0eWxlc3x8e30pLGUuc2hvcnRjdXRzPVAoe30sVyxlLnNob3J0Y3V0c3x8e30pLHZvaWQgMCE9ZS5hdXRvc2F2ZSYmdm9pZCAwIT1lLmF1dG9zYXZlLnVuaXF1ZV9pZCYmIiIhPWUuYXV0b3NhdmUudW5pcXVlX2lkJiYoZS5hdXRvc2F2ZS51bmlxdWVJZD1lLmF1dG9zYXZlLnVuaXF1ZV9pZCksdGhpcy5vcHRpb25zPWUsdGhpcy5yZW5kZXIoKSwhZS5pbml0aWFsVmFsdWV8fHRoaXMub3B0aW9ucy5hdXRvc2F2ZSYmITA9PT10aGlzLm9wdGlvbnMuYXV0b3NhdmUuZm91bmRTYXZlZFZhbHVlfHx0aGlzLnZhbHVlKGUuaW5pdGlhbFZhbHVlKX1mdW5jdGlvbiBGKCl7aWYoIm9iamVjdCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UpcmV0dXJuITE7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJzbWRlX2xvY2FsU3RvcmFnZSIsMSksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oInNtZGVfbG9jYWxTdG9yYWdlIil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9dmFyIEI9bigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zaW1wbGVtZGUvc3JjL2pzL2NvZGVtaXJyb3IvdGFibGlzdC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZGlzcGxheS9mdWxsc2NyZWVuLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9tb2RlL292ZXJsYXkuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL2Rpc3BsYXkvcGxhY2Vob2xkZXIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbi5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9nZm0vZ2ZtLmpzIiksbigiLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL3htbC94bWwuanMiKTt2YXIgVT1uKCIuL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yLXNwZWxsLWNoZWNrZXIvc3JjL2pzL3NwZWxsLWNoZWNrZXIuanMiKSxHPW4oIi4vbm9kZV9tb2R1bGVzL21hcmtlZC9saWIvbWFya2VkLmpzIiksej0vTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVj17dG9nZ2xlQm9sZDp1LHRvZ2dsZUl0YWxpYzpjLGRyYXdMaW5rOlQsdG9nZ2xlSGVhZGluZ1NtYWxsZXI6Zix0b2dnbGVIZWFkaW5nQmlnZ2VyOm0sZHJhd0ltYWdlOkEsdG9nZ2xlQmxvY2txdW90ZTpwLHRvZ2dsZU9yZGVyZWRMaXN0OnksdG9nZ2xlVW5vcmRlcmVkTGlzdDpFLHRvZ2dsZUNvZGVCbG9jazpfLHRvZ2dsZVByZXZpZXc6eCx0b2dnbGVTdHJpa2V0aHJvdWdoOmQsdG9nZ2xlSGVhZGluZzE6aCx0b2dnbGVIZWFkaW5nMjpnLHRvZ2dsZUhlYWRpbmczOmIsY2xlYW5CbG9jazp2LGRyYXdUYWJsZTpDLGRyYXdIb3Jpem9udGFsUnVsZTpPLHVuZG86UyxyZWRvOlIsdG9nZ2xlU2lkZUJ5U2lkZTpqLHRvZ2dsZUZ1bGxTY3JlZW46bH0sVz17dG9nZ2xlQm9sZDoiQ21kLUIiLHRvZ2dsZUl0YWxpYzoiQ21kLUkiLGRyYXdMaW5rOiJDbWQtSyIsdG9nZ2xlSGVhZGluZ1NtYWxsZXI6IkNtZC1IIix0b2dnbGVIZWFkaW5nQmlnZ2VyOiJTaGlmdC1DbWQtSCIsY2xlYW5CbG9jazoiQ21kLUUiLGRyYXdJbWFnZToiQ21kLUFsdC1JIix0b2dnbGVCbG9ja3F1b3RlOiJDbWQtJyIsdG9nZ2xlT3JkZXJlZExpc3Q6IkNtZC1BbHQtTCIsdG9nZ2xlVW5vcmRlcmVkTGlzdDoiQ21kLUwiLHRvZ2dsZUNvZGVCbG9jazoiQ21kLUFsdC1DIix0b2dnbGVQcmV2aWV3OiJDbWQtUCIsdG9nZ2xlU2lkZUJ5U2lkZToiRjkiLHRvZ2dsZUZ1bGxTY3JlZW46IkYxMSJ9LFk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIFYpaWYoVlt0XT09PWUpcmV0dXJuIHQ7cmV0dXJuIG51bGx9LHE9ZnVuY3Rpb24oKXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24odCl7KC8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWlub3xhbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pLnRlc3QodCl8fC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcLShufHUpfGM1NVwvfGNhcGl8Y2N3YXxjZG1cLXxjZWxsfGNodG18Y2xkY3xjbWRcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1wtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlwtNXxnXC1tb3xnbyhcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcLShtfHB8dCl8aGVpXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1wtY3xodChjKFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFwtfFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFwvKXxrbG9ufGtwdCB8a3djXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFwvKGt8bHx1KXw1MHw1NHxcLVthLXddKXxsaWJ3fGx5bnh8bTFcLXd8bTNnYXxtNTBcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFwtZ3xxYVwtYXxxYygwN3wxMnwyMXwzMnw2MHxcLVsyLTddfGlcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFwtfG9vfHBcLSl8c2RrXC98c2UoYyhcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcLXxzaGFyfHNpZShcLXxtKXxza1wtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXC18dlwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXC18dGRnXC18dGVsKGl8bSl8dGltXC18dFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cLXxtM3xtNSl8dHhcLTl8dXAoXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXC18eW91cnx6ZXRvfHp0ZVwtL2kudGVzdCh0LnN1YnN0cigwLDQpKSkmJihlPSEwKX0obmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhKSxlfSxLPSIiLFg9e2JvbGQ6e25hbWU6ImJvbGQiLGFjdGlvbjp1LGNsYXNzTmFtZToiZmEgZmEtYm9sZCIsdGl0bGU6IkJvbGQiLGRlZmF1bHQ6ITB9LGl0YWxpYzp7bmFtZToiaXRhbGljIixhY3Rpb246YyxjbGFzc05hbWU6ImZhIGZhLWl0YWxpYyIsdGl0bGU6Ikl0YWxpYyIsZGVmYXVsdDohMH0sc3RyaWtldGhyb3VnaDp7bmFtZToic3RyaWtldGhyb3VnaCIsYWN0aW9uOmQsY2xhc3NOYW1lOiJmYSBmYS1zdHJpa2V0aHJvdWdoIix0aXRsZToiU3RyaWtldGhyb3VnaCJ9LGhlYWRpbmc6e25hbWU6ImhlYWRpbmciLGFjdGlvbjpmLGNsYXNzTmFtZToiZmEgZmEtaGVhZGVyIix0aXRsZToiSGVhZGluZyIsZGVmYXVsdDohMH0sImhlYWRpbmctc21hbGxlciI6e25hbWU6ImhlYWRpbmctc21hbGxlciIsYWN0aW9uOmYsY2xhc3NOYW1lOiJmYSBmYS1oZWFkZXIgZmEtaGVhZGVyLXggZmEtaGVhZGVyLXNtYWxsZXIiLHRpdGxlOiJTbWFsbGVyIEhlYWRpbmcifSwiaGVhZGluZy1iaWdnZXIiOntuYW1lOiJoZWFkaW5nLWJpZ2dlciIsYWN0aW9uOm0sY2xhc3NOYW1lOiJmYSBmYS1oZWFkZXIgZmEtaGVhZGVyLXggZmEtaGVhZGVyLWJpZ2dlciIsdGl0bGU6IkJpZ2dlciBIZWFkaW5nIn0sImhlYWRpbmctMSI6e25hbWU6ImhlYWRpbmctMSIsYWN0aW9uOmgsY2xhc3NOYW1lOiJmYSBmYS1oZWFkZXIgZmEtaGVhZGVyLXggZmEtaGVhZGVyLTEiLHRpdGxlOiJCaWcgSGVhZGluZyJ9LCJoZWFkaW5nLTIiOntuYW1lOiJoZWFkaW5nLTIiLGFjdGlvbjpnLGNsYXNzTmFtZToiZmEgZmEtaGVhZGVyIGZhLWhlYWRlci14IGZhLWhlYWRlci0yIix0aXRsZToiTWVkaXVtIEhlYWRpbmcifSwiaGVhZGluZy0zIjp7bmFtZToiaGVhZGluZy0zIixhY3Rpb246YixjbGFzc05hbWU6ImZhIGZhLWhlYWRlciBmYS1oZWFkZXIteCBmYS1oZWFkZXItMyIsdGl0bGU6IlNtYWxsIEhlYWRpbmcifSwic2VwYXJhdG9yLTEiOntuYW1lOiJzZXBhcmF0b3ItMSJ9LGNvZGU6e25hbWU6ImNvZGUiLGFjdGlvbjpfLGNsYXNzTmFtZToiZmEgZmEtY29kZSIsdGl0bGU6IkNvZGUifSxxdW90ZTp7bmFtZToicXVvdGUiLGFjdGlvbjpwLGNsYXNzTmFtZToiZmEgZmEtcXVvdGUtbGVmdCIsdGl0bGU6IlF1b3RlIixkZWZhdWx0OiEwfSwidW5vcmRlcmVkLWxpc3QiOntuYW1lOiJ1bm9yZGVyZWQtbGlzdCIsYWN0aW9uOkUsY2xhc3NOYW1lOiJmYSBmYS1saXN0LXVsIix0aXRsZToiR2VuZXJpYyBMaXN0IixkZWZhdWx0OiEwfSwib3JkZXJlZC1saXN0Ijp7bmFtZToib3JkZXJlZC1saXN0IixhY3Rpb246eSxjbGFzc05hbWU6ImZhIGZhLWxpc3Qtb2wiLHRpdGxlOiJOdW1iZXJlZCBMaXN0IixkZWZhdWx0OiEwfSwiY2xlYW4tYmxvY2siOntuYW1lOiJjbGVhbi1ibG9jayIsYWN0aW9uOnYsY2xhc3NOYW1lOiJmYSBmYS1lcmFzZXIgZmEtY2xlYW4tYmxvY2siLHRpdGxlOiJDbGVhbiBibG9jayJ9LCJzZXBhcmF0b3ItMiI6e25hbWU6InNlcGFyYXRvci0yIn0sbGluazp7bmFtZToibGluayIsYWN0aW9uOlQsY2xhc3NOYW1lOiJmYSBmYS1saW5rIix0aXRsZToiQ3JlYXRlIExpbmsiLGRlZmF1bHQ6ITB9LGltYWdlOntuYW1lOiJpbWFnZSIsYWN0aW9uOkEsY2xhc3NOYW1lOiJmYSBmYS1waWN0dXJlLW8iLHRpdGxlOiJJbnNlcnQgSW1hZ2UiLGRlZmF1bHQ6ITB9LHRhYmxlOntuYW1lOiJ0YWJsZSIsYWN0aW9uOkMsY2xhc3NOYW1lOiJmYSBmYS10YWJsZSIsdGl0bGU6Ikluc2VydCBUYWJsZSJ9LCJob3Jpem9udGFsLXJ1bGUiOntuYW1lOiJob3Jpem9udGFsLXJ1bGUiLGFjdGlvbjpPLGNsYXNzTmFtZToiZmEgZmEtbWludXMiLHRpdGxlOiJJbnNlcnQgSG9yaXpvbnRhbCBMaW5lIn0sInNlcGFyYXRvci0zIjp7bmFtZToic2VwYXJhdG9yLTMifSxwcmV2aWV3OntuYW1lOiJwcmV2aWV3IixhY3Rpb246eCxjbGFzc05hbWU6ImZhIGZhLWV5ZSBuby1kaXNhYmxlIix0aXRsZToiVG9nZ2xlIFByZXZpZXciLGRlZmF1bHQ6ITB9LCJzaWRlLWJ5LXNpZGUiOntuYW1lOiJzaWRlLWJ5LXNpZGUiLGFjdGlvbjpqLGNsYXNzTmFtZToiZmEgZmEtY29sdW1ucyBuby1kaXNhYmxlIG5vLW1vYmlsZSIsdGl0bGU6IlRvZ2dsZSBTaWRlIGJ5IFNpZGUiLGRlZmF1bHQ6ITB9LGZ1bGxzY3JlZW46e25hbWU6ImZ1bGxzY3JlZW4iLGFjdGlvbjpsLGNsYXNzTmFtZToiZmEgZmEtYXJyb3dzLWFsdCBuby1kaXNhYmxlIG5vLW1vYmlsZSIsdGl0bGU6IlRvZ2dsZSBGdWxsc2NyZWVuIixkZWZhdWx0OiEwfSwic2VwYXJhdG9yLTQiOntuYW1lOiJzZXBhcmF0b3ItNCJ9LGd1aWRlOntuYW1lOiJndWlkZSIsYWN0aW9uOiJodHRwczovL3NpbXBsZW1kZS5jb20vbWFya2Rvd24tZ3VpZGUiLGNsYXNzTmFtZToiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIix0aXRsZToiTWFya2Rvd24gR3VpZGUiLGRlZmF1bHQ6ITB9LCJzZXBhcmF0b3ItNSI6e25hbWU6InNlcGFyYXRvci01In0sdW5kbzp7bmFtZToidW5kbyIsYWN0aW9uOlMsY2xhc3NOYW1lOiJmYSBmYS11bmRvIG5vLWRpc2FibGUiLHRpdGxlOiJVbmRvIn0scmVkbzp7bmFtZToicmVkbyIsYWN0aW9uOlIsY2xhc3NOYW1lOiJmYSBmYS1yZXBlYXQgbm8tZGlzYWJsZSIsdGl0bGU6IlJlZG8ifX0sJD17bGluazpbIlsiLCJdKCN1cmwjKSJdLGltYWdlOlsiIVtdKCIsIiN1cmwjKSJdLHRhYmxlOlsiIiwiXG5cbnwgQ29sdW1uIDEgfCBDb2x1bW4gMiB8IENvbHVtbiAzIHxcbnwgLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tIHxcbnwgVGV4dCAgICAgfCBUZXh0ICAgICB8IFRleHQgICAgIHxcblxuIl0saG9yaXpvbnRhbFJ1bGU6WyIiLCJcblxuLS0tLS1cblxuIl19LFE9e2xpbms6IlVSTCBmb3IgdGhlIGxpbms6IixpbWFnZToiVVJMIG9mIHRoZSBpbWFnZToifSxKPXtib2xkOiIqKiIsY29kZToiYGBgIixpdGFsaWM6IioifTtILnByb3RvdHlwZS5tYXJrZG93bj1mdW5jdGlvbihlKXtpZihHKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucmVuZGVyaW5nQ29uZmlnJiYhMT09PXRoaXMub3B0aW9ucy5yZW5kZXJpbmdDb25maWcuc2luZ2xlTGluZUJyZWFrcz90LmJyZWFrcz0hMTp0LmJyZWFrcz0hMCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5yZW5kZXJpbmdDb25maWcmJiEwPT09dGhpcy5vcHRpb25zLnJlbmRlcmluZ0NvbmZpZy5jb2RlU3ludGF4SGlnaGxpZ2h0aW5nJiZ3aW5kb3cuaGxqcyYmKHQuaGlnaGxpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cuaGxqcy5oaWdobGlnaHRBdXRvKGUpLnZhbHVlfSksRy5zZXRPcHRpb25zKHQpLEcoZSl9fSxILnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7aWYoZXx8KGU9dGhpcy5lbGVtZW50fHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXSksIXRoaXMuX3JlbmRlcmVkfHx0aGlzLl9yZW5kZXJlZCE9PWUpe3RoaXMuZWxlbWVudD1lO3ZhciB0PXRoaXMub3B0aW9ucyxuPXRoaXMsbz17fTtmb3IodmFyIHMgaW4gdC5zaG9ydGN1dHMpbnVsbCE9PXQuc2hvcnRjdXRzW3NdJiZudWxsIT09VltzXSYmZnVuY3Rpb24oZSl7b1tyKHQuc2hvcnRjdXRzW2VdKV09ZnVuY3Rpb24oKXtWW2VdKG4pfX0ocyk7by5FbnRlcj0ibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0IixvLlRhYj0idGFiQW5kSW5kZW50TWFya2Rvd25MaXN0IixvWyJTaGlmdC1UYWIiXT0ic2hpZnRUYWJBbmRVbmluZGVudE1hcmtkb3duTGlzdCIsby5Fc2M9ZnVuY3Rpb24oZSl7ZS5nZXRPcHRpb24oImZ1bGxTY3JlZW4iKSYmbChuKX0sZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7ZT1lfHx3aW5kb3cuZXZlbnQsMjc9PWUua2V5Q29kZSYmbi5jb2RlbWlycm9yLmdldE9wdGlvbigiZnVsbFNjcmVlbiIpJiZsKG4pfSwhMSk7dmFyIGksYTtpZighMSE9PXQuc3BlbGxDaGVja2VyPyhpPSJzcGVsbC1jaGVja2VyIixhPXQucGFyc2luZ0NvbmZpZyxhLm5hbWU9ImdmbSIsYS5naXRIdWJTcGljZT0hMSxVKHtjb2RlTWlycm9ySW5zdGFuY2U6Qn0pKTooaT10LnBhcnNpbmdDb25maWcsaS5uYW1lPSJnZm0iLGkuZ2l0SHViU3BpY2U9ITEpLHRoaXMuY29kZW1pcnJvcj1CLmZyb21UZXh0QXJlYShlLHttb2RlOmksYmFja2Ryb3A6YSx0aGVtZToicGFwZXIiLHRhYlNpemU6dm9pZCAwIT10LnRhYlNpemU/dC50YWJTaXplOjIsaW5kZW50VW5pdDp2b2lkIDAhPXQudGFiU2l6ZT90LnRhYlNpemU6MixpbmRlbnRXaXRoVGFiczohMSE9PXQuaW5kZW50V2l0aFRhYnMsbGluZU51bWJlcnM6ITEsYXV0b2ZvY3VzOiEwPT09dC5hdXRvZm9jdXMsZXh0cmFLZXlzOm8sbGluZVdyYXBwaW5nOiExIT09dC5saW5lV3JhcHBpbmcsYWxsb3dEcm9wRmlsZVR5cGVzOlsidGV4dC9wbGFpbiJdLHBsYWNlaG9sZGVyOnQucGxhY2Vob2xkZXJ8fGUuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfHwiIixzdHlsZVNlbGVjdGVkVGV4dDp2b2lkIDA9PXQuc3R5bGVTZWxlY3RlZFRleHR8fHQuc3R5bGVTZWxlY3RlZFRleHR9KSwhMD09PXQuZm9yY2VTeW5jKXt2YXIgdT10aGlzLmNvZGVtaXJyb3I7dS5vbigiY2hhbmdlIixmdW5jdGlvbigpe3Uuc2F2ZSgpfSl9dGhpcy5ndWk9e30sITEhPT10LnRvb2xiYXImJih0aGlzLmd1aS50b29sYmFyPXRoaXMuY3JlYXRlVG9vbGJhcigpKSwhMSE9PXQuc3RhdHVzJiYodGhpcy5ndWkuc3RhdHVzYmFyPXRoaXMuY3JlYXRlU3RhdHVzYmFyKCkpLHZvaWQgMCE9dC5hdXRvc2F2ZSYmITA9PT10LmF1dG9zYXZlLmVuYWJsZWQmJnRoaXMuYXV0b3NhdmUoKSx0aGlzLmd1aS5zaWRlQnlTaWRlPXRoaXMuY3JlYXRlU2lkZUJ5U2lkZSgpLHRoaXMuX3JlbmRlcmVkPXRoaXMuZWxlbWVudDt2YXIgYz10aGlzLmNvZGVtaXJyb3I7c2V0VGltZW91dChmdW5jdGlvbigpe2MucmVmcmVzaCgpfS5iaW5kKGMpLDApfX0sSC5wcm90b3R5cGUuYXV0b3NhdmU9ZnVuY3Rpb24oKXtpZihGKCkpe3ZhciBlPXRoaXM7aWYodm9pZCAwPT10aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWR8fCIiPT10aGlzLm9wdGlvbnMuYXV0b3NhdmUudW5pcXVlSWQpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coIlNpbXBsZU1ERTogWW91IG11c3Qgc2V0IGEgdW5pcXVlSWQgdG8gdXNlIHRoZSBhdXRvc2F2ZSBmZWF0dXJlIik7bnVsbCE9ZS5lbGVtZW50LmZvcm0mJnZvaWQgMCE9ZS5lbGVtZW50LmZvcm0mJmUuZWxlbWVudC5mb3JtLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgic21kZV8iK2Uub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCl9KSwhMCE9PXRoaXMub3B0aW9ucy5hdXRvc2F2ZS5sb2FkZWQmJigic3RyaW5nIj09dHlwZW9mIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzbWRlXyIrdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkKSYmIiIhPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzbWRlXyIrdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkKSYmKHRoaXMuY29kZW1pcnJvci5zZXRWYWx1ZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic21kZV8iK3RoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCkpLHRoaXMub3B0aW9ucy5hdXRvc2F2ZS5mb3VuZFNhdmVkVmFsdWU9ITApLHRoaXMub3B0aW9ucy5hdXRvc2F2ZS5sb2FkZWQ9ITApLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzbWRlXyIrdGhpcy5vcHRpb25zLmF1dG9zYXZlLnVuaXF1ZUlkLGUudmFsdWUoKSk7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImF1dG9zYXZlZCIpO2lmKG51bGwhPXQmJnZvaWQgMCE9dCYmIiIhPXQpe3ZhciBuPW5ldyBEYXRlLHI9bi5nZXRIb3VycygpLG89bi5nZXRNaW51dGVzKCkscz0iYW0iLGk9cjtpPj0xMiYmKGk9ci0xMixzPSJwbSIpLDA9PWkmJihpPTEyKSxvPW88MTA/IjAiK286byx0LmlubmVySFRNTD0iQXV0b3NhdmVkOiAiK2krIjoiK28rIiAiK3N9dGhpcy5hdXRvc2F2ZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5hdXRvc2F2ZSgpfSx0aGlzLm9wdGlvbnMuYXV0b3NhdmUuZGVsYXl8fDFlNCl9ZWxzZSBjb25zb2xlLmxvZygiU2ltcGxlTURFOiBsb2NhbFN0b3JhZ2Ugbm90IGF2YWlsYWJsZSwgY2Fubm90IGF1dG9zYXZlIil9LEgucHJvdG90eXBlLmNsZWFyQXV0b3NhdmVkVmFsdWU9ZnVuY3Rpb24oKXtpZihGKCkpe2lmKHZvaWQgMD09dGhpcy5vcHRpb25zLmF1dG9zYXZlfHx2b2lkIDA9PXRoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZHx8IiI9PXRoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZClyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiU2ltcGxlTURFOiBZb3UgbXVzdCBzZXQgYSB1bmlxdWVJZCB0byBjbGVhciB0aGUgYXV0b3NhdmUgdmFsdWUiKTtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgic21kZV8iK3RoaXMub3B0aW9ucy5hdXRvc2F2ZS51bmlxdWVJZCl9ZWxzZSBjb25zb2xlLmxvZygiU2ltcGxlTURFOiBsb2NhbFN0b3JhZ2Ugbm90IGF2YWlsYWJsZSwgY2Fubm90IGF1dG9zYXZlIil9LEgucHJvdG90eXBlLmNyZWF0ZVNpZGVCeVNpZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvZGVtaXJyb3IsdD1lLmdldFdyYXBwZXJFbGVtZW50KCksbj10Lm5leHRTaWJsaW5nO24mJi9lZGl0b3ItcHJldmlldy1zaWRlLy50ZXN0KG4uY2xhc3NOYW1lKXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5jbGFzc05hbWU9ImVkaXRvci1wcmV2aWV3LXNpZGUiLHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobix0Lm5leHRTaWJsaW5nKSk7dmFyIHI9ITEsbz0hMTtyZXR1cm4gZS5vbigic2Nyb2xsIixmdW5jdGlvbihlKXtpZihyKXJldHVybiB2b2lkKHI9ITEpO289ITA7dmFyIHQ9ZS5nZXRTY3JvbGxJbmZvKCkuaGVpZ2h0LWUuZ2V0U2Nyb2xsSW5mbygpLmNsaWVudEhlaWdodCxzPXBhcnNlRmxvYXQoZS5nZXRTY3JvbGxJbmZvKCkudG9wKS90LGk9KG4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0KSpzO24uc2Nyb2xsVG9wPWl9KSxuLm9uc2Nyb2xsPWZ1bmN0aW9uKCl7aWYobylyZXR1cm4gdm9pZChvPSExKTtyPSEwO3ZhciB0PW4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0LHM9cGFyc2VGbG9hdChuLnNjcm9sbFRvcCkvdCxpPShlLmdldFNjcm9sbEluZm8oKS5oZWlnaHQtZS5nZXRTY3JvbGxJbmZvKCkuY2xpZW50SGVpZ2h0KSpzO2Uuc2Nyb2xsVG8oMCxpKX0sbn0sSC5wcm90b3R5cGUuY3JlYXRlVG9vbGJhcj1mdW5jdGlvbihlKXtpZigoZT1lfHx0aGlzLm9wdGlvbnMudG9vbGJhcikmJjAhPT1lLmxlbmd0aCl7dmFyIHQ7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyl2b2lkIDAhPVhbZVt0XV0mJihlW3RdPVhbZVt0XV0pO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uY2xhc3NOYW1lPSJlZGl0b3ItdG9vbGJhciI7dmFyIHI9dGhpcyxpPXt9O2ZvcihyLnRvb2xiYXI9ZSx0PTA7dDxlLmxlbmd0aDt0KyspaWYoKCJndWlkZSIhPWVbdF0ubmFtZXx8ITEhPT1yLm9wdGlvbnMudG9vbGJhckd1aWRlSWNvbikmJiEoci5vcHRpb25zLmhpZGVJY29ucyYmLTEhPXIub3B0aW9ucy5oaWRlSWNvbnMuaW5kZXhPZihlW3RdLm5hbWUpfHwoImZ1bGxzY3JlZW4iPT1lW3RdLm5hbWV8fCJzaWRlLWJ5LXNpZGUiPT1lW3RdLm5hbWUpJiZxKCkpKXtpZigifCI9PT1lW3RdKXtmb3IodmFyIGw9ITEsdT10KzE7dTxlLmxlbmd0aDt1KyspInwiPT09ZVt1XXx8ci5vcHRpb25zLmhpZGVJY29ucyYmLTEhPXIub3B0aW9ucy5oaWRlSWNvbnMuaW5kZXhPZihlW3VdLm5hbWUpfHwobD0hMCk7aWYoIWwpY29udGludWV9IWZ1bmN0aW9uKGUpe3ZhciB0O3Q9InwiPT09ZT9zKCk6byhlLHIub3B0aW9ucy50b29sYmFyVGlwcyxyLm9wdGlvbnMuc2hvcnRjdXRzKSxlLmFjdGlvbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmFjdGlvbj90Lm9uY2xpY2s9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUuYWN0aW9uKHIpfToic3RyaW5nIj09dHlwZW9mIGUuYWN0aW9uJiYodC5ocmVmPWUuYWN0aW9uLHQudGFyZ2V0PSJfYmxhbmsiKSksaVtlLm5hbWV8fGVdPXQsbi5hcHBlbmRDaGlsZCh0KX0oZVt0XSl9ci50b29sYmFyRWxlbWVudHM9aTt2YXIgYz10aGlzLmNvZGVtaXJyb3I7Yy5vbigiY3Vyc29yQWN0aXZpdHkiLGZ1bmN0aW9uKCl7dmFyIGU9YShjKTtmb3IodmFyIHQgaW4gaSkhZnVuY3Rpb24odCl7dmFyIG49aVt0XTtlW3RdP24uY2xhc3NOYW1lKz0iIGFjdGl2ZSI6ImZ1bGxzY3JlZW4iIT10JiYic2lkZS1ieS1zaWRlIiE9dCYmKG4uY2xhc3NOYW1lPW4uY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmFjdGl2ZVxzKi9nLCIiKSl9KHQpfSk7dmFyIGQ9Yy5nZXRXcmFwcGVyRWxlbWVudCgpO3JldHVybiBkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sZCksbn19LEgucHJvdG90eXBlLmNyZWF0ZVN0YXR1c2Jhcj1mdW5jdGlvbihlKXtlPWV8fHRoaXMub3B0aW9ucy5zdGF0dXM7dmFyIHQ9dGhpcy5vcHRpb25zLG49dGhpcy5jb2RlbWlycm9yO2lmKGUmJjAhPT1lLmxlbmd0aCl7dmFyIHIsbyxzLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihvPXZvaWQgMCxzPXZvaWQgMCwib2JqZWN0Ij09dHlwZW9mIGVbcl0paS5wdXNoKHtjbGFzc05hbWU6ZVtyXS5jbGFzc05hbWUsZGVmYXVsdFZhbHVlOmVbcl0uZGVmYXVsdFZhbHVlLG9uVXBkYXRlOmVbcl0ub25VcGRhdGV9KTtlbHNle3ZhciBhPWVbcl07IndvcmRzIj09PWE/KHM9ZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9TihuLmdldFZhbHVlKCkpfSxvPWZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPU4obi5nZXRWYWx1ZSgpKX0pOiJsaW5lcyI9PT1hPyhzPWZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPW4ubGluZUNvdW50KCl9LG89ZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9bi5saW5lQ291bnQoKX0pOiJjdXJzb3IiPT09YT8ocz1mdW5jdGlvbihlKXtlLmlubmVySFRNTD0iMDowIn0sbz1mdW5jdGlvbihlKXt2YXIgdD1uLmdldEN1cnNvcigpO2UuaW5uZXJIVE1MPXQubGluZSsiOiIrdC5jaH0pOiJhdXRvc2F2ZSI9PT1hJiYocz1mdW5jdGlvbihlKXt2b2lkIDAhPXQuYXV0b3NhdmUmJiEwPT09dC5hdXRvc2F2ZS5lbmFibGVkJiZlLnNldEF0dHJpYnV0ZSgiaWQiLCJhdXRvc2F2ZWQiKX0pLGkucHVzaCh7Y2xhc3NOYW1lOmEsZGVmYXVsdFZhbHVlOnMsb25VcGRhdGU6b30pfXZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihsLmNsYXNzTmFtZT0iZWRpdG9yLXN0YXR1c2JhciIscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgdT1pW3JdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2MuY2xhc3NOYW1lPXUuY2xhc3NOYW1lLCJmdW5jdGlvbiI9PXR5cGVvZiB1LmRlZmF1bHRWYWx1ZSYmdS5kZWZhdWx0VmFsdWUoYyksImZ1bmN0aW9uIj09dHlwZW9mIHUub25VcGRhdGUmJnRoaXMuY29kZW1pcnJvci5vbigidXBkYXRlIixmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Qub25VcGRhdGUoZSl9fShjLHUpKSxsLmFwcGVuZENoaWxkKGMpfXZhciBkPXRoaXMuY29kZW1pcnJvci5nZXRXcmFwcGVyRWxlbWVudCgpO3JldHVybiBkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsZC5uZXh0U2libGluZyksbH19LEgucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMuY29kZW1pcnJvci5nZXRWYWx1ZSgpOih0aGlzLmNvZGVtaXJyb3IuZ2V0RG9jKCkuc2V0VmFsdWUoZSksdGhpcyl9LEgudG9nZ2xlQm9sZD11LEgudG9nZ2xlSXRhbGljPWMsSC50b2dnbGVTdHJpa2V0aHJvdWdoPWQsSC50b2dnbGVCbG9ja3F1b3RlPXAsSC50b2dnbGVIZWFkaW5nU21hbGxlcj1mLEgudG9nZ2xlSGVhZGluZ0JpZ2dlcj1tLEgudG9nZ2xlSGVhZGluZzE9aCxILnRvZ2dsZUhlYWRpbmcyPWcsSC50b2dnbGVIZWFkaW5nMz1iLEgudG9nZ2xlQ29kZUJsb2NrPV8sSC50b2dnbGVVbm9yZGVyZWRMaXN0PUUsSC50b2dnbGVPcmRlcmVkTGlzdD15LEguY2xlYW5CbG9jaz12LEguZHJhd0xpbms9VCxILmRyYXdJbWFnZT1BLEguZHJhd1RhYmxlPUMsSC5kcmF3SG9yaXpvbnRhbFJ1bGU9TyxILnVuZG89UyxILnJlZG89UixILnRvZ2dsZVByZXZpZXc9eCxILnRvZ2dsZVNpZGVCeVNpZGU9aixILnRvZ2dsZUZ1bGxTY3JlZW49bCxILnByb3RvdHlwZS50b2dnbGVCb2xkPWZ1bmN0aW9uKCl7dSh0aGlzKX0sSC5wcm90b3R5cGUudG9nZ2xlSXRhbGljPWZ1bmN0aW9uKCl7Yyh0aGlzKX0sSC5wcm90b3R5cGUudG9nZ2xlU3RyaWtldGhyb3VnaD1mdW5jdGlvbigpe2QodGhpcyl9LEgucHJvdG90eXBlLnRvZ2dsZUJsb2NrcXVvdGU9ZnVuY3Rpb24oKXtwKHRoaXMpfSxILnByb3RvdHlwZS50b2dnbGVIZWFkaW5nU21hbGxlcj1mdW5jdGlvbigpe2YodGhpcyl9LEgucHJvdG90eXBlLnRvZ2dsZUhlYWRpbmdCaWdnZXI9ZnVuY3Rpb24oKXttKHRoaXMpfSxILnByb3RvdHlwZS50b2dnbGVIZWFkaW5nMT1mdW5jdGlvbigpe2godGhpcyl9LEgucHJvdG90eXBlLnRvZ2dsZUhlYWRpbmcyPWZ1bmN0aW9uKCl7Zyh0aGlzKX0sSC5wcm90b3R5cGUudG9nZ2xlSGVhZGluZzM9ZnVuY3Rpb24oKXtiKHRoaXMpfSxILnByb3RvdHlwZS50b2dnbGVDb2RlQmxvY2s9ZnVuY3Rpb24oKXtfKHRoaXMpfSxILnByb3RvdHlwZS50b2dnbGVVbm9yZGVyZWRMaXN0PWZ1bmN0aW9uKCl7RSh0aGlzKX0sSC5wcm90b3R5cGUudG9nZ2xlT3JkZXJlZExpc3Q9ZnVuY3Rpb24oKXt5KHRoaXMpfSxILnByb3RvdHlwZS5jbGVhbkJsb2NrPWZ1bmN0aW9uKCl7dih0aGlzKX0sSC5wcm90b3R5cGUuZHJhd0xpbms9ZnVuY3Rpb24oKXtUKHRoaXMpfSxILnByb3RvdHlwZS5kcmF3SW1hZ2U9ZnVuY3Rpb24oKXtBKHRoaXMpfSxILnByb3RvdHlwZS5kcmF3VGFibGU9ZnVuY3Rpb24oKXtDKHRoaXMpfSxILnByb3RvdHlwZS5kcmF3SG9yaXpvbnRhbFJ1bGU9ZnVuY3Rpb24oKXtPKHRoaXMpfSxILnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7Uyh0aGlzKX0sSC5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe1IodGhpcyl9LEgucHJvdG90eXBlLnRvZ2dsZVByZXZpZXc9ZnVuY3Rpb24oKXt4KHRoaXMpfSxILnByb3RvdHlwZS50b2dnbGVTaWRlQnlTaWRlPWZ1bmN0aW9uKCl7aih0aGlzKX0sSC5wcm90b3R5cGUudG9nZ2xlRnVsbFNjcmVlbj1mdW5jdGlvbigpe2wodGhpcyl9LEgucHJvdG90eXBlLmlzUHJldmlld0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybi9lZGl0b3ItcHJldmlldy1hY3RpdmUvLnRlc3QodGhpcy5jb2RlbWlycm9yLmdldFdyYXBwZXJFbGVtZW50KCkubGFzdENoaWxkLmNsYXNzTmFtZSl9LEgucHJvdG90eXBlLmlzU2lkZUJ5U2lkZUFjdGl2ZT1mdW5jdGlvbigpe3JldHVybi9lZGl0b3ItcHJldmlldy1hY3RpdmUtc2lkZS8udGVzdCh0aGlzLmNvZGVtaXJyb3IuZ2V0V3JhcHBlckVsZW1lbnQoKS5uZXh0U2libGluZy5jbGFzc05hbWUpfSxILnByb3RvdHlwZS5pc0Z1bGxzY3JlZW5BY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2RlbWlycm9yLmdldE9wdGlvbigiZnVsbFNjcmVlbiIpfSxILnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMuY29kZW1pcnJvcil9LEgucHJvdG90eXBlLnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvZGVtaXJyb3IsdD1lLmdldFdyYXBwZXJFbGVtZW50KCk7dC5wYXJlbnROb2RlJiYodGhpcy5ndWkudG9vbGJhciYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZ3VpLnRvb2xiYXIpLHRoaXMuZ3VpLnN0YXR1c2JhciYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZ3VpLnN0YXR1c2JhciksdGhpcy5ndWkuc2lkZUJ5U2lkZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZ3VpLnNpZGVCeVNpZGUpKSxlLnRvVGV4dEFyZWEoKSx0aGlzLmF1dG9zYXZlVGltZW91dElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuYXV0b3NhdmVUaW1lb3V0SWQpLHRoaXMuYXV0b3NhdmVUaW1lb3V0SWQ9dm9pZCAwLHRoaXMuY2xlYXJBdXRvc2F2ZWRWYWx1ZSgpKX0sZS5leHBvcnRzPUh9LCIuL25vZGVfbW9kdWxlcy9zb3VyY2VtYXBwZWQtc3RhY2t0cmFjZS9kaXN0L3NvdXJjZW1hcHBlZC1zdGFja3RyYWNlLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQsbil7ZS5leHBvcnRzPW4oKX0oMCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgbz1uW3JdPXtleHBvcnRzOnt9LGlkOnIsbG9hZGVkOiExfTtyZXR1cm4gZVtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyx0KSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIG49e307cmV0dXJuIHQubT1lLHQuYz1uLHQucD0iIix0KDApfShbZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87cj1bbigxKV0sdm9pZCAwIT09KG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgdD1TdHJpbmcoZSkubWF0Y2gocygpfHxsKCk/LyArYXQgKyhbXiBdKikuKi86LyhbXkBdKilALiovKTtyZXR1cm4gdCYmdFsxXX1mdW5jdGlvbiBuKCl7Zm9yKHZhciBlPSExLHQ9MDt0PGYubGVuZ3RoO3QrKyl7dHJ5e2U9Zlt0XSgpfWNhdGNoKGUpe2NvbnRpbnVlfWJyZWFrfXJldHVybiBlfXZhciByPXt9LG89ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sdSxkLHAsZixtLGg9e30sZz1uZXcgYyhuKTtpZihzKCl8fGwoKSlmPS9eICthdC4rXCgoLiopOihbMC05XSspOihbMC05XSspLyxwPTQsbT0xO2Vsc2V7aWYoIWkoKSYmIWEoKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYnJvd3NlciA6KCIpO2Y9L0AoLiopOihbMC05XSspOihbMC05XSspLyxwPTQsbT0wfXI9ZS5zcGxpdCgiXG4iKS5zbGljZShtKTtmb3IodmFyIGI9MDtiPHIubGVuZ3RoO2IrKylvPXJbYl0sbiYmbi5maWx0ZXImJiFuLmZpbHRlcihvKXx8KHU9by5tYXRjaChmKSkmJnUubGVuZ3RoPT09cCYmKGhbYl09dSxkPXVbMV0sZC5tYXRjaCgvPGFub255bW91cz4vKXx8Zy5mZXRjaFNjcmlwdChkKSk7Zy5zZW0ud2hlblJlYWR5KGZ1bmN0aW9uKCl7dmFyIGU9XyhyLGgsZy5tYXBGb3JVcmkpO3QoZSl9KX0scz1mdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiY2hyb21lIik+LTF9LGk9ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sYT1mdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigic2FmYXJpIik+LTF9LGw9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRNb2RlJiZkb2N1bWVudC5kb2N1bWVudE1vZGU+PTExfSx1PWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMucGVuZGluZz1bXX07dS5wcm90b3R5cGUuaW5jcj1mdW5jdGlvbigpe3RoaXMuY291bnQrK30sdS5wcm90b3R5cGUuZGVjcj1mdW5jdGlvbigpe3RoaXMuY291bnQtLSx0aGlzLmZsdXNoKCl9LHUucHJvdG90eXBlLndoZW5SZWFkeT1mdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcucHVzaChlKSx0aGlzLmZsdXNoKCl9LHUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7MD09PXRoaXMuY291bnQmJih0aGlzLnBlbmRpbmcuZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KSx0aGlzLnBlbmRpbmc9W10pfTt2YXIgYz1mdW5jdGlvbihlKXt0aGlzLnNlbT1uZXcgdSx0aGlzLnN5bmM9ZSYmZS5zeW5jLHRoaXMubWFwRm9yVXJpPWUmJmUuY2FjaGVHbG9iYWxseT9yOnt9fTtjLnByb3RvdHlwZS5hamF4PWZ1bmN0aW9uKGUsdCl7dmFyIHI9bigpLG89dGhpcztyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PXIucmVhZHlTdGF0ZSYmdC5jYWxsKG8scixlKX0sci5vcGVuKCJHRVQiLGUsIXRoaXMuc3luYyksci5zZW5kKCl9LGMucHJvdG90eXBlLmZldGNoU2NyaXB0PWZ1bmN0aW9uKGUpe2UgaW4gdGhpcy5tYXBGb3JVcml8fCh0aGlzLnNlbS5pbmNyKCksdGhpcy5tYXBGb3JVcmlbZV09bnVsbCx0aGlzLmFqYXgoZSx0aGlzLm9uU2NyaXB0TG9hZCkpfTt2YXIgZD1uZXcgUmVnRXhwKCJeKD86W2Etel0rOik/Ly8iLCJpIik7Yy5wcm90b3R5cGUub25TY3JpcHRMb2FkPWZ1bmN0aW9uKHQsbil7aWYoMjAwPT09dC5zdGF0dXN8fCJmaWxlOi8vIj09PW4uc2xpY2UoMCw3KSYmMD09PXQuc3RhdHVzKXt2YXIgcj10LnJlc3BvbnNlVGV4dC5tYXRjaCgiLy8jIFtzXW91cmNlTWFwcGluZ1VSTD0oLiopW1xcc10qJCIsIm0iKTtpZihyJiYyPT09ci5sZW5ndGgpe3ZhciBvPXJbMV0scz1vLm1hdGNoKCJkYXRhOmFwcGxpY2F0aW9uL2pzb247KGNoYXJzZXQ9W147XSs7KT9iYXNlNjQsKC4qKSIpO2lmKHMmJnNbMl0pdGhpcy5tYXBGb3JVcmlbbl09bmV3IGUuU291cmNlTWFwQ29uc3VtZXIoYXRvYihzWzJdKSksdGhpcy5zZW0uZGVjcigpO2Vsc2V7aWYoIWQudGVzdChvKSl7dmFyIGksYT1uLmxhc3RJbmRleE9mKCIvIik7LTEhPT1hJiYoaT1uLnNsaWNlKDAsYSsxKSxvPWkrbyl9dGhpcy5hamF4KG8sZnVuY3Rpb24odCl7KDIwMD09PXQuc3RhdHVzfHwiZmlsZTovLyI9PT1vLnNsaWNlKDAsNykmJjA9PT10LnN0YXR1cykmJih0aGlzLm1hcEZvclVyaVtuXT1uZXcgZS5Tb3VyY2VNYXBDb25zdW1lcih0LnJlc3BvbnNlVGV4dCkpLHRoaXMuc2VtLmRlY3IoKX0pfX1lbHNlIHRoaXMuc2VtLmRlY3IoKX1lbHNlIHRoaXMuc2VtLmRlY3IoKX07dmFyIF89ZnVuY3Rpb24oZSxuLHIpe2Zvcih2YXIgbyxzPVtdLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtpZihhKXt2YXIgbD1hWzFdLHU9cGFyc2VJbnQoYVsyXSwxMCksYz1wYXJzZUludChhWzNdLDEwKTtpZihvPXJbbF0pe3ZhciBkPW8ub3JpZ2luYWxQb3NpdGlvbkZvcih7bGluZTp1LGNvbHVtbjpjfSk7cy5wdXNoKHAoZC5zb3VyY2UsZC5saW5lLGQuY29sdW1uLGQubmFtZXx8dChlW2ldKSkpfWVsc2Ugcy5wdXNoKHAobCx1LGMsdChlW2ldKSkpfWVsc2Ugcy5wdXNoKGVbaV0pfXJldHVybiBzfSxwPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiIgICAgYXQgIisocnx8Iih1bmtub3duKSIpKyIgKCIrZSsiOiIrdCsiOiIrbisiKSJ9LGY9W2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIil9LGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDMuWE1MSFRUUCIpfSxmdW5jdGlvbigpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1dO3JldHVybnttYXBTdGFja1RyYWNlOm99fS5hcHBseSh0LHIpKSYmKGUuZXhwb3J0cz1vKX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJih0PUpTT04ucGFyc2UoZS5yZXBsYWNlKC9eXClcXVx9Jy8sIiIpKSksbnVsbCE9dC5zZWN0aW9ucz9uZXcgaSh0KTpuZXcgbyh0KX1mdW5jdGlvbiBvKGUpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiBlJiYodD1KU09OLnBhcnNlKGUucmVwbGFjZSgvXlwpXF1cfScvLCIiKSkpO3ZhciBuPWEuZ2V0QXJnKHQsInZlcnNpb24iKSxyPWEuZ2V0QXJnKHQsInNvdXJjZXMiKSxvPWEuZ2V0QXJnKHQsIm5hbWVzIixbXSkscz1hLmdldEFyZyh0LCJzb3VyY2VSb290IixudWxsKSxpPWEuZ2V0QXJnKHQsInNvdXJjZXNDb250ZW50IixudWxsKSxsPWEuZ2V0QXJnKHQsIm1hcHBpbmdzIiksYz1hLmdldEFyZyh0LCJmaWxlIixudWxsKTtpZihuIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIituKTtyPXIubWFwKFN0cmluZykubWFwKGEubm9ybWFsaXplKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHMmJmEuaXNBYnNvbHV0ZShzKSYmYS5pc0Fic29sdXRlKGUpP2EucmVsYXRpdmUocyxlKTplfSksdGhpcy5fbmFtZXM9dS5mcm9tQXJyYXkoby5tYXAoU3RyaW5nKSwhMCksdGhpcy5fc291cmNlcz11LmZyb21BcnJheShyLCEwKSx0aGlzLnNvdXJjZVJvb3Q9cyx0aGlzLnNvdXJjZXNDb250ZW50PWksdGhpcy5fbWFwcGluZ3M9bCx0aGlzLmZpbGU9Y31mdW5jdGlvbiBzKCl7dGhpcy5nZW5lcmF0ZWRMaW5lPTAsdGhpcy5nZW5lcmF0ZWRDb2x1bW49MCx0aGlzLnNvdXJjZT1udWxsLHRoaXMub3JpZ2luYWxMaW5lPW51bGwsdGhpcy5vcmlnaW5hbENvbHVtbj1udWxsLHRoaXMubmFtZT1udWxsfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZTsic3RyaW5nIj09dHlwZW9mIGUmJih0PUpTT04ucGFyc2UoZS5yZXBsYWNlKC9eXClcXVx9Jy8sIiIpKSk7dmFyIG49YS5nZXRBcmcodCwidmVyc2lvbiIpLG89YS5nZXRBcmcodCwic2VjdGlvbnMiKTtpZihuIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIituKTt0aGlzLl9zb3VyY2VzPW5ldyB1LHRoaXMuX25hbWVzPW5ldyB1O3ZhciBzPXtsaW5lOi0xLGNvbHVtbjowfTt0aGlzLl9zZWN0aW9ucz1vLm1hcChmdW5jdGlvbihlKXtpZihlLnVybCl0aHJvdyBuZXcgRXJyb3IoIlN1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuIik7dmFyIHQ9YS5nZXRBcmcoZSwib2Zmc2V0Iiksbj1hLmdldEFyZyh0LCJsaW5lIiksbz1hLmdldEFyZyh0LCJjb2x1bW4iKTtpZihuPHMubGluZXx8bj09PXMubGluZSYmbzxzLmNvbHVtbil0aHJvdyBuZXcgRXJyb3IoIlNlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4iKTtyZXR1cm4gcz10LHtnZW5lcmF0ZWRPZmZzZXQ6e2dlbmVyYXRlZExpbmU6bisxLGdlbmVyYXRlZENvbHVtbjpvKzF9LGNvbnN1bWVyOm5ldyByKGEuZ2V0QXJnKGUsIm1hcCIpKX19KX12YXIgYT1uKDIpLGw9bigzKSx1PW4oNCkuQXJyYXlTZXQsYz1uKDUpLGQ9big3KS5xdWlja1NvcnQ7ci5mcm9tU291cmNlTWFwPWZ1bmN0aW9uKGUpe3JldHVybiBvLmZyb21Tb3VyY2VNYXAoZSl9LHIucHJvdG90eXBlLl92ZXJzaW9uPTMsci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiX2dlbmVyYXRlZE1hcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc3x8dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpLHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc319KSxyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3M9bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIl9vcmlnaW5hbE1hcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfHx0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCksdGhpcy5fX29yaWdpbmFsTWFwcGluZ3N9fSksci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJBdCh0KTtyZXR1cm4iOyI9PT1ufHwiLCI9PT1ufSxyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5ncyIpfSxyLkdFTkVSQVRFRF9PUkRFUj0xLHIuT1JJR0lOQUxfT1JERVI9MixyLkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsci5MRUFTVF9VUFBFUl9CT1VORD0yLHIucHJvdG90eXBlLmVhY2hNYXBwaW5nPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxzPXR8fG51bGwsaT1ufHxyLkdFTkVSQVRFRF9PUkRFUjtzd2l0Y2goaSl7Y2FzZSByLkdFTkVSQVRFRF9PUkRFUjpvPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO2JyZWFrO2Nhc2Ugci5PUklHSU5BTF9PUkRFUjpvPXRoaXMuX29yaWdpbmFsTWFwcGluZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLiIpfXZhciBsPXRoaXMuc291cmNlUm9vdDtvLm1hcChmdW5jdGlvbihlKXt2YXIgdD1udWxsPT09ZS5zb3VyY2U/bnVsbDp0aGlzLl9zb3VyY2VzLmF0KGUuc291cmNlKTtyZXR1cm4gbnVsbCE9dCYmbnVsbCE9bCYmKHQ9YS5qb2luKGwsdCkpLHtzb3VyY2U6dCxnZW5lcmF0ZWRMaW5lOmUuZ2VuZXJhdGVkTGluZSxnZW5lcmF0ZWRDb2x1bW46ZS5nZW5lcmF0ZWRDb2x1bW4sb3JpZ2luYWxMaW5lOmUub3JpZ2luYWxMaW5lLG9yaWdpbmFsQ29sdW1uOmUub3JpZ2luYWxDb2x1bW4sbmFtZTpudWxsPT09ZS5uYW1lP251bGw6dGhpcy5fbmFtZXMuYXQoZS5uYW1lKX19LHRoaXMpLmZvckVhY2goZSxzKX0sci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWEuZ2V0QXJnKGUsImxpbmUiKSxuPXtzb3VyY2U6YS5nZXRBcmcoZSwic291cmNlIiksb3JpZ2luYWxMaW5lOnQsb3JpZ2luYWxDb2x1bW46YS5nZXRBcmcoZSwiY29sdW1uIiwwKX07aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYobi5zb3VyY2U9YS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3Qsbi5zb3VyY2UpKSwhdGhpcy5fc291cmNlcy5oYXMobi5zb3VyY2UpKXJldHVybltdO24uc291cmNlPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihuLnNvdXJjZSk7dmFyIHI9W10sbz10aGlzLl9maW5kTWFwcGluZyhuLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsIm9yaWdpbmFsTGluZSIsIm9yaWdpbmFsQ29sdW1uIixhLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLGwuTEVBU1RfVVBQRVJfQk9VTkQpO2lmKG8+PTApe3ZhciBzPXRoaXMuX29yaWdpbmFsTWFwcGluZ3Nbb107aWYodm9pZCAwPT09ZS5jb2x1bW4pZm9yKHZhciBpPXMub3JpZ2luYWxMaW5lO3MmJnMub3JpZ2luYWxMaW5lPT09aTspci5wdXNoKHtsaW5lOmEuZ2V0QXJnKHMsImdlbmVyYXRlZExpbmUiLG51bGwpLGNvbHVtbjphLmdldEFyZyhzLCJnZW5lcmF0ZWRDb2x1bW4iLG51bGwpLGxhc3RDb2x1bW46YS5nZXRBcmcocywibGFzdEdlbmVyYXRlZENvbHVtbiIsbnVsbCl9KSxzPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytvXTtlbHNlIGZvcih2YXIgdT1zLm9yaWdpbmFsQ29sdW1uO3MmJnMub3JpZ2luYWxMaW5lPT09dCYmcy5vcmlnaW5hbENvbHVtbj09dTspci5wdXNoKHtsaW5lOmEuZ2V0QXJnKHMsImdlbmVyYXRlZExpbmUiLG51bGwpLGNvbHVtbjphLmdldEFyZyhzLCJnZW5lcmF0ZWRDb2x1bW4iLG51bGwpLGxhc3RDb2x1bW46YS5nZXRBcmcocywibGFzdEdlbmVyYXRlZENvbHVtbiIsbnVsbCl9KSxzPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytvXX1yZXR1cm4gcn0sdC5Tb3VyY2VNYXBDb25zdW1lcj1yLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLG8ucHJvdG90eXBlLmNvbnN1bWVyPXIsby5mcm9tU291cmNlTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLG49dC5fbmFtZXM9dS5mcm9tQXJyYXkoZS5fbmFtZXMudG9BcnJheSgpLCEwKSxyPXQuX3NvdXJjZXM9dS5mcm9tQXJyYXkoZS5fc291cmNlcy50b0FycmF5KCksITApO3Quc291cmNlUm9vdD1lLl9zb3VyY2VSb290LHQuc291cmNlc0NvbnRlbnQ9ZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCh0Ll9zb3VyY2VzLnRvQXJyYXkoKSx0LnNvdXJjZVJvb3QpLHQuZmlsZT1lLl9maWxlO2Zvcih2YXIgaT1lLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKSxsPXQuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSxjPXQuX19vcmlnaW5hbE1hcHBpbmdzPVtdLF89MCxwPWkubGVuZ3RoO188cDtfKyspe3ZhciBmPWlbX10sbT1uZXcgczttLmdlbmVyYXRlZExpbmU9Zi5nZW5lcmF0ZWRMaW5lLG0uZ2VuZXJhdGVkQ29sdW1uPWYuZ2VuZXJhdGVkQ29sdW1uLGYuc291cmNlJiYobS5zb3VyY2U9ci5pbmRleE9mKGYuc291cmNlKSxtLm9yaWdpbmFsTGluZT1mLm9yaWdpbmFsTGluZSxtLm9yaWdpbmFsQ29sdW1uPWYub3JpZ2luYWxDb2x1bW4sZi5uYW1lJiYobS5uYW1lPW4uaW5kZXhPZihmLm5hbWUpKSxjLnB1c2gobSkpLGwucHVzaChtKX1yZXR1cm4gZCh0Ll9fb3JpZ2luYWxNYXBwaW5ncyxhLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKSx0fSxvLnByb3RvdHlwZS5fdmVyc2lvbj0zLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnByb3RvdHlwZSwic291cmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPXRoaXMuc291cmNlUm9vdD9hLmpvaW4odGhpcy5zb3VyY2VSb290LGUpOmV9LHRoaXMpfX0pLG8ucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsbyxpLGwsdT0xLF89MCxwPTAsZj0wLG09MCxoPTAsZz1lLmxlbmd0aCxiPTAsRT17fSx5PXt9LHY9W10sVD1bXTtiPGc7KWlmKCI7Ij09PWUuY2hhckF0KGIpKXUrKyxiKyssXz0wO2Vsc2UgaWYoIiwiPT09ZS5jaGFyQXQoYikpYisrO2Vsc2V7Zm9yKG49bmV3IHMsbi5nZW5lcmF0ZWRMaW5lPXUsaT1iO2k8ZyYmIXRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoZSxpKTtpKyspO2lmKHI9ZS5zbGljZShiLGkpLG89RVtyXSliKz1yLmxlbmd0aDtlbHNle2ZvcihvPVtdO2I8aTspYy5kZWNvZGUoZSxiLHkpLGw9eS52YWx1ZSxiPXkucmVzdCxvLnB1c2gobCk7aWYoMj09PW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4iKTtpZigzPT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbiIpO0Vbcl09b31uLmdlbmVyYXRlZENvbHVtbj1fK29bMF0sXz1uLmdlbmVyYXRlZENvbHVtbixvLmxlbmd0aD4xJiYobi5zb3VyY2U9bStvWzFdLG0rPW9bMV0sbi5vcmlnaW5hbExpbmU9cCtvWzJdLHA9bi5vcmlnaW5hbExpbmUsbi5vcmlnaW5hbExpbmUrPTEsbi5vcmlnaW5hbENvbHVtbj1mK29bM10sZj1uLm9yaWdpbmFsQ29sdW1uLG8ubGVuZ3RoPjQmJihuLm5hbWU9aCtvWzRdLGgrPW9bNF0pKSxULnB1c2gobiksIm51bWJlciI9PXR5cGVvZiBuLm9yaWdpbmFsTGluZSYmdi5wdXNoKG4pfWQoVCxhLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKSx0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M9VCxkKHYsYS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyksdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M9dn0sby5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nPWZ1bmN0aW9uKGUsdCxuLHIsbyxzKXtpZihlW25dPD0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkxpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICIrZVtuXSk7aWYoZVtyXTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgIitlW3JdKTtyZXR1cm4gbC5zZWFyY2goZSx0LG8scyl9LG8ucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucz1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOysrZSl7dmFyIHQ9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbZV07aWYoZSsxPHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCl7dmFyIG49dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbZSsxXTtpZih0LmdlbmVyYXRlZExpbmU9PT1uLmdlbmVyYXRlZExpbmUpe3QubGFzdEdlbmVyYXRlZENvbHVtbj1uLmdlbmVyYXRlZENvbHVtbi0xO2NvbnRpbnVlfX10Lmxhc3RHZW5lcmF0ZWRDb2x1bW49MS8wfX0sby5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD17Z2VuZXJhdGVkTGluZTphLmdldEFyZyhlLCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOmEuZ2V0QXJnKGUsImNvbHVtbiIpfSxuPXRoaXMuX2ZpbmRNYXBwaW5nKHQsdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsImdlbmVyYXRlZExpbmUiLCJnZW5lcmF0ZWRDb2x1bW4iLGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsYS5nZXRBcmcoZSwiYmlhcyIsci5HUkVBVEVTVF9MT1dFUl9CT1VORCkpO2lmKG4+PTApe3ZhciBvPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW25dO2lmKG8uZ2VuZXJhdGVkTGluZT09PXQuZ2VuZXJhdGVkTGluZSl7dmFyIHM9YS5nZXRBcmcobywic291cmNlIixudWxsKTtudWxsIT09cyYmKHM9dGhpcy5fc291cmNlcy5hdChzKSxudWxsIT10aGlzLnNvdXJjZVJvb3QmJihzPWEuam9pbih0aGlzLnNvdXJjZVJvb3QscykpKTt2YXIgaT1hLmdldEFyZyhvLCJuYW1lIixudWxsKTtyZXR1cm4gbnVsbCE9PWkmJihpPXRoaXMuX25hbWVzLmF0KGkpKSx7c291cmNlOnMsbGluZTphLmdldEFyZyhvLCJvcmlnaW5hbExpbmUiLG51bGwpLGNvbHVtbjphLmdldEFyZyhvLCJvcmlnaW5hbENvbHVtbiIsbnVsbCksbmFtZTppfX19cmV0dXJue3NvdXJjZTpudWxsLGxpbmU6bnVsbCxjb2x1bW46bnVsbCxuYW1lOm51bGx9fSxvLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5zb3VyY2VzQ29udGVudCYmKHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoPj10aGlzLl9zb3VyY2VzLnNpemUoKSYmIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0pKX0sby5wcm90b3R5cGUuc291cmNlQ29udGVudEZvcj1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLnNvdXJjZXNDb250ZW50KXJldHVybiBudWxsO2lmKG51bGwhPXRoaXMuc291cmNlUm9vdCYmKGU9YS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsZSkpLHRoaXMuX3NvdXJjZXMuaGFzKGUpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihlKV07dmFyIG47aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYobj1hLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKXt2YXIgcj1lLnJlcGxhY2UoL15maWxlOlwvXC8vLCIiKTtpZigiZmlsZSI9PW4uc2NoZW1lJiZ0aGlzLl9zb3VyY2VzLmhhcyhyKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YocildO2lmKCghbi5wYXRofHwiLyI9PW4ucGF0aCkmJnRoaXMuX3NvdXJjZXMuaGFzKCIvIitlKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoIi8iK2UpXX1pZih0KXJldHVybiBudWxsO3Rocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0sby5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5nZXRBcmcoZSwic291cmNlIik7aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYodD1hLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCx0KSksIXRoaXMuX3NvdXJjZXMuaGFzKHQpKXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGwsbGFzdENvbHVtbjpudWxsfTt0PXRoaXMuX3NvdXJjZXMuaW5kZXhPZih0KTt2YXIgbj17c291cmNlOnQsb3JpZ2luYWxMaW5lOmEuZ2V0QXJnKGUsImxpbmUiKSxvcmlnaW5hbENvbHVtbjphLmdldEFyZyhlLCJjb2x1bW4iKX0sbz10aGlzLl9maW5kTWFwcGluZyhuLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsIm9yaWdpbmFsTGluZSIsIm9yaWdpbmFsQ29sdW1uIixhLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLGEuZ2V0QXJnKGUsImJpYXMiLHIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZihvPj0wKXt2YXIgcz10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW29dO2lmKHMuc291cmNlPT09bi5zb3VyY2UpcmV0dXJue2xpbmU6YS5nZXRBcmcocywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOmEuZ2V0QXJnKHMsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjphLmdldEFyZyhzLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fSx0LkJhc2ljU291cmNlTWFwQ29uc3VtZXI9byxpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGkucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJzb3VyY2VzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PHRoaXMuX3NlY3Rpb25zLmxlbmd0aDt0KyspZm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9uc1t0XS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDtuKyspZS5wdXNoKHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXNbbl0pO3JldHVybiBlfX0pLGkucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9e2dlbmVyYXRlZExpbmU6YS5nZXRBcmcoZSwibGluZSIpLGdlbmVyYXRlZENvbHVtbjphLmdldEFyZyhlLCJjb2x1bW4iKX0sbj1sLnNlYXJjaCh0LHRoaXMuX3NlY3Rpb25zLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7cmV0dXJuIG58fGUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbn0pLHI9dGhpcy5fc2VjdGlvbnNbbl07cmV0dXJuIHI/ci5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOnQuZ2VuZXJhdGVkTGluZS0oci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxjb2x1bW46dC5nZW5lcmF0ZWRDb2x1bW4tKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT10LmdlbmVyYXRlZExpbmU/ci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCksYmlhczplLmJpYXN9KTp7c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19LGkucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCl9KX0saS5wcm90b3R5cGUuc291cmNlQ29udGVudEZvcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5fc2VjdGlvbnMubGVuZ3RoO24rKyl7dmFyIHI9dGhpcy5fc2VjdGlvbnNbbl0sbz1yLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoZSwhMCk7aWYobylyZXR1cm4gb31pZih0KXJldHVybiBudWxsO3Rocm93IG5ldyBFcnJvcignIicrZSsnIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0saS5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7dCsrKXt2YXIgbj10aGlzLl9zZWN0aW9uc1t0XTtpZigtMSE9PW4uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKGEuZ2V0QXJnKGUsInNvdXJjZSIpKSl7dmFyIHI9bi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihlKTtpZihyKXtyZXR1cm57bGluZTpyLmxpbmUrKG4uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOnIuY29sdW1uKyhuLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09ci5saW5lP24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApfX19fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGx9fSxpLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtuKyspZm9yKHZhciByPXRoaXMuX3NlY3Rpb25zW25dLG89ci5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3Mscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgaT1vW3NdLGw9ci5jb25zdW1lci5fc291cmNlcy5hdChpLnNvdXJjZSk7bnVsbCE9PXIuY29uc3VtZXIuc291cmNlUm9vdCYmKGw9YS5qb2luKHIuY29uc3VtZXIuc291cmNlUm9vdCxsKSksdGhpcy5fc291cmNlcy5hZGQobCksbD10aGlzLl9zb3VyY2VzLmluZGV4T2YobCk7dmFyIHU9ci5jb25zdW1lci5fbmFtZXMuYXQoaS5uYW1lKTt0aGlzLl9uYW1lcy5hZGQodSksdT10aGlzLl9uYW1lcy5pbmRleE9mKHUpO3ZhciBjPXtzb3VyY2U6bCxnZW5lcmF0ZWRMaW5lOmkuZ2VuZXJhdGVkTGluZSsoci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxnZW5lcmF0ZWRDb2x1bW46aS5nZW5lcmF0ZWRDb2x1bW4rKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT1pLmdlbmVyYXRlZExpbmU/ci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCksb3JpZ2luYWxMaW5lOmkub3JpZ2luYWxMaW5lLG9yaWdpbmFsQ29sdW1uOmkub3JpZ2luYWxDb2x1bW4sbmFtZTp1fTt0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChjKSwibnVtYmVyIj09dHlwZW9mIGMub3JpZ2luYWxMaW5lJiZ0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGMpfWQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpLGQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsYS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyl9LHQuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyPWl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7aWYodCBpbiBlKXJldHVybiBlW3RdO2lmKDM9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcignIicrdCsnIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5tYXRjaChoKTtyZXR1cm4gdD97c2NoZW1lOnRbMV0sYXV0aDp0WzJdLGhvc3Q6dFszXSxwb3J0OnRbNF0scGF0aDp0WzVdfTpudWxsfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc2NoZW1lJiYodCs9ZS5zY2hlbWUrIjoiKSx0Kz0iLy8iLGUuYXV0aCYmKHQrPWUuYXV0aCsiQCIpLGUuaG9zdCYmKHQrPWUuaG9zdCksZS5wb3J0JiYodCs9IjoiK2UucG9ydCksZS5wYXRoJiYodCs9ZS5wYXRoKSx0fWZ1bmN0aW9uIHMoZSl7dmFyIG49ZSxzPXIoZSk7aWYocyl7aWYoIXMucGF0aClyZXR1cm4gZTtuPXMucGF0aH1mb3IodmFyIGksYT10LmlzQWJzb2x1dGUobiksbD1uLnNwbGl0KC9cLysvKSx1PTAsYz1sLmxlbmd0aC0xO2M+PTA7Yy0tKWk9bFtjXSwiLiI9PT1pP2wuc3BsaWNlKGMsMSk6Ii4uIj09PWk/dSsrOnU+MCYmKCIiPT09aT8obC5zcGxpY2UoYysxLHUpLHU9MCk6KGwuc3BsaWNlKGMsMiksdS0tKSk7cmV0dXJuIG49bC5qb2luKCIvIiksIiI9PT1uJiYobj1hPyIvIjoiLiIpLHM/KHMucGF0aD1uLG8ocykpOm59ZnVuY3Rpb24gaShlLHQpeyIiPT09ZSYmKGU9Ii4iKSwiIj09PXQmJih0PSIuIik7dmFyIG49cih0KSxpPXIoZSk7aWYoaSYmKGU9aS5wYXRofHwiLyIpLG4mJiFuLnNjaGVtZSlyZXR1cm4gaSYmKG4uc2NoZW1lPWkuc2NoZW1lKSxvKG4pO2lmKG58fHQubWF0Y2goZykpcmV0dXJuIHQ7aWYoaSYmIWkuaG9zdCYmIWkucGF0aClyZXR1cm4gaS5ob3N0PXQsbyhpKTt2YXIgYT0iLyI9PT10LmNoYXJBdCgwKT90OnMoZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QpO3JldHVybiBpPyhpLnBhdGg9YSxvKGkpKTphfWZ1bmN0aW9uIGEoZSx0KXsiIj09PWUmJihlPSIuIiksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO2Zvcih2YXIgbj0wOzAhPT10LmluZGV4T2YoZSsiLyIpOyl7dmFyIHI9ZS5sYXN0SW5kZXhPZigiLyIpO2lmKHI8MClyZXR1cm4gdDtpZihlPWUuc2xpY2UoMCxyKSxlLm1hdGNoKC9eKFteXC9dKzpcLyk/XC8qJC8pKXJldHVybiB0Oysrbn1yZXR1cm4gQXJyYXkobisxKS5qb2luKCIuLi8iKSt0LnN1YnN0cihlLmxlbmd0aCsxKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGQoZSk/IiQiK2U6ZX1mdW5jdGlvbiBjKGUpe3JldHVybiBkKGUpP2Uuc2xpY2UoMSk6ZX1mdW5jdGlvbiBkKGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO2lmKHQ8OSlyZXR1cm4hMTtpZig5NSE9PWUuY2hhckNvZGVBdCh0LTEpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTIpfHwxMTEhPT1lLmNoYXJDb2RlQXQodC0zKXx8MTE2IT09ZS5jaGFyQ29kZUF0KHQtNCl8fDExMSE9PWUuY2hhckNvZGVBdCh0LTUpfHwxMTQhPT1lLmNoYXJDb2RlQXQodC02KXx8MTEyIT09ZS5jaGFyQ29kZUF0KHQtNyl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOCl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOSkpcmV0dXJuITE7Zm9yKHZhciBuPXQtMTA7bj49MDtuLS0paWYoMzYhPT1lLmNoYXJDb2RlQXQobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gXyhlLHQsbil7dmFyIHI9ZS5zb3VyY2UtdC5zb3VyY2U7cmV0dXJuIDAhPT1yP3I6MCE9PShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOjAhPT0ocj1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW4pfHxuP3I6MCE9PShyPWUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkQ29sdW1uKT9yOihyPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmUsMCE9PXI/cjplLm5hbWUtdC5uYW1lKX1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lO3JldHVybiAwIT09cj9yOjAhPT0ocj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbil8fG4/cjowIT09KHI9ZS5zb3VyY2UtdC5zb3VyY2UpP3I6MCE9PShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOihyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbiwwIT09cj9yOmUubmFtZS10Lm5hbWUpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZT09PXQ/MDplPnQ/MTotMX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PW4/bjowIT09KG49ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pP246MCE9PShuPWYoZS5zb3VyY2UsdC5zb3VyY2UpKT9uOjAhPT0obj1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZSk/bjoobj1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW4sMCE9PW4/bjpmKGUubmFtZSx0Lm5hbWUpKX10LmdldEFyZz1uO3ZhciBoPS9eKD86KFtcdytcLS5dKyk6KT9cL1wvKD86KFx3KzpcdyspQCk/KFtcdy5dKikoPzo6KFxkKykpPyhcUyopJC8sZz0vXmRhdGE6LitcLC4rJC87dC51cmxQYXJzZT1yLHQudXJsR2VuZXJhdGU9byx0Lm5vcm1hbGl6ZT1zLHQuam9pbj1pLHQuaXNBYnNvbHV0ZT1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKXx8ISFlLm1hdGNoKGgpfSx0LnJlbGF0aXZlPWE7dmFyIGI9ZnVuY3Rpb24oKXtyZXR1cm4hKCJfX3Byb3RvX18iaW4gT2JqZWN0LmNyZWF0ZShudWxsKSl9KCk7dC50b1NldFN0cmluZz1iP2w6dSx0LmZyb21TZXRTdHJpbmc9Yj9sOmMsdC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucz1fLHQuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ9cCx0LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkPW19LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHIsbyxzLGksYSl7dmFyIGw9TWF0aC5mbG9vcigoci1lKS8yKStlLHU9aShvLHNbbF0sITApO3JldHVybiAwPT09dT9sOnU+MD9yLWw+MT9uKGwscixvLHMsaSxhKTphPT10LkxFQVNUX1VQUEVSX0JPVU5EP3I8cy5sZW5ndGg/cjotMTpsOmwtZT4xP24oZSxsLG8scyxpLGEpOmE9PXQuTEVBU1RfVVBQRVJfQk9VTkQ/bDplPDA/LTE6ZX10LkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsdC5MRUFTVF9VUFBFUl9CT1VORD0yLHQuc2VhcmNoPWZ1bmN0aW9uKGUscixvLHMpe2lmKDA9PT1yLmxlbmd0aClyZXR1cm4tMTt2YXIgaT1uKC0xLHIubGVuZ3RoLGUscixvLHN8fHQuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO2lmKGk8MClyZXR1cm4tMTtmb3IoO2ktMT49MCYmMD09PW8ocltpXSxyW2ktMV0sITApOyktLWk7cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuX2FycmF5PVtdLHRoaXMuX3NldD1PYmplY3QuY3JlYXRlKG51bGwpfXZhciBvPW4oMikscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3IuZnJvbUFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyByLG89MCxzPWUubGVuZ3RoO288cztvKyspbi5hZGQoZVtvXSx0KTtyZXR1cm4gbn0sci5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aH0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dmFyIG49by50b1NldFN0cmluZyhlKSxyPXMuY2FsbCh0aGlzLl9zZXQsbiksaT10aGlzLl9hcnJheS5sZW5ndGg7ciYmIXR8fHRoaXMuX2FycmF5LnB1c2goZSkscnx8KHRoaXMuX3NldFtuXT1pKX0sci5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PW8udG9TZXRTdHJpbmcoZSk7cmV0dXJuIHMuY2FsbCh0aGlzLl9zZXQsdCl9LHIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSl7dmFyIHQ9by50b1NldFN0cmluZyhlKTtpZihzLmNhbGwodGhpcy5fc2V0LHQpKXJldHVybiB0aGlzLl9zZXRbdF07dGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBpbiB0aGUgc2V0LicpfSxyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXtpZihlPj0wJiZlPHRoaXMuX2FycmF5Lmxlbmd0aClyZXR1cm4gdGhpcy5fYXJyYXlbZV07dGhyb3cgbmV3IEVycm9yKCJObyBlbGVtZW50IGluZGV4ZWQgYnkgIitlKX0sci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheS5zbGljZSgpfSx0LkFycmF5U2V0PXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlPDA/MSsoLWU8PDEpOjArKGU8PDEpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9MT09KDEmZSksbj1lPj4xO3JldHVybiB0Py1uOm59dmFyIHM9big2KTt0LmVuY29kZT1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLG89cihlKTtkb3t0PTMxJm8sbz4+Pj01LG8+MCYmKHR8PTMyKSxuKz1zLmVuY29kZSh0KX13aGlsZShvPjApO3JldHVybiBufSx0LmRlY29kZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxhPWUubGVuZ3RoLGw9MCx1PTA7ZG97aWYodD49YSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLiIpO2lmKC0xPT09KGk9cy5kZWNvZGUoZS5jaGFyQ29kZUF0KHQrKykpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGRpZ2l0OiAiK2UuY2hhckF0KHQtMSkpO3I9ISEoMzImaSksaSY9MzEsbCs9aTw8dSx1Kz01fXdoaWxlKHIpO24udmFsdWU9byhsKSxuLnJlc3Q9dH19LGZ1bmN0aW9uKGUsdCl7dmFyIG49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLnNwbGl0KCIiKTt0LmVuY29kZT1mdW5jdGlvbihlKXtpZigwPD1lJiZlPG4ubGVuZ3RoKXJldHVybiBuW2VdO3Rocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogIitlKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIDY1PD1lJiZlPD05MD9lLTY1Ojk3PD1lJiZlPD0xMjI/ZS05NysyNjo0ODw9ZSYmZTw9NTc/ZS00OCs1Mjo0Mz09ZT82Mjo0Nz09ZT82MzotMX19LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4gTWF0aC5yb3VuZChlK01hdGgucmFuZG9tKCkqKHQtZSkpfWZ1bmN0aW9uIG8oZSx0LHMsaSl7aWYoczxpKXt2YXIgYT1yKHMsaSksbD1zLTE7bihlLGEsaSk7Zm9yKHZhciB1PWVbaV0sYz1zO2M8aTtjKyspdChlW2NdLHUpPD0wJiYobCs9MSxuKGUsbCxjKSk7bihlLGwrMSxjKTt2YXIgZD1sKzE7byhlLHQscyxkLTEpLG8oZSx0LGQrMSxpKX19dC5xdWlja1NvcnQ9ZnVuY3Rpb24oZSx0KXtvKGUsdCwwLGUubGVuZ3RoLTEpfX1dKX0pfSwiLi9ub2RlX21vZHVsZXMvc3Jjc2V0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuc29ydCgpLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGVbbi0xXSl9KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9udW1iZXItaXMtbmFuL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9hcnJheS11bmlxL2luZGV4LmpzIiksaT0vXlxkKyQvO3QucGFyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gZS50cmltKCkuc3BsaXQoL1xzKy8pLmZvckVhY2goZnVuY3Rpb24oZSxuKXtpZigwPT09bilyZXR1cm4gdC51cmw9ZTt2YXIgcj1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpLHM9ZVtlLmxlbmd0aC0xXSxhPXBhcnNlSW50KHIsMTApLGw9cGFyc2VGbG9hdChyKTtpZigidyI9PT1zJiZpLnRlc3QocikpdC53aWR0aD1hO2Vsc2UgaWYoImgiPT09cyYmaS50ZXN0KHIpKXQuaGVpZ2h0PWE7ZWxzZXtpZigieCIhPT1zfHxvKGwpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzcmNzZXQgZGVzY3JpcHRvcjogIitlKyIuIik7dC5kZW5zaXR5PWx9fSksdH0pKX0sdC5zdHJpbmdpZnk9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZS5tYXAoZnVuY3Rpb24oZSl7aWYoIWUudXJsKXRocm93IG5ldyBFcnJvcigiVVJMIGlzIHJlcXVpcmVkLiIpO3ZhciB0PVtlLnVybF07cmV0dXJuIGUud2lkdGgmJnQucHVzaChlLndpZHRoKyJ3IiksZS5oZWlnaHQmJnQucHVzaChlLmhlaWdodCsiaCIpLGUuZGVuc2l0eSYmdC5wdXNoKGUuZGVuc2l0eSsieCIpLHQuam9pbigiICIpfSkpLmpvaW4oIiwgIil9fSwiLi9ub2RlX21vZHVsZXMvc3RhY2tmcmFtZS9zdGFja2ZyYW1lLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzOyFmdW5jdGlvbihuLGkpeyJ1c2Ugc3RyaWN0IjtvPVtdLHI9aSx2b2lkIDAhPT0ocz0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHQsbyk6cikmJihlLmV4cG9ydHM9cyl9KDAsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfWZ1bmN0aW9uIHQoZSx0LG4scixvLHMpe3ZvaWQgMCE9PWUmJnRoaXMuc2V0RnVuY3Rpb25OYW1lKGUpLHZvaWQgMCE9PXQmJnRoaXMuc2V0QXJncyh0KSx2b2lkIDAhPT1uJiZ0aGlzLnNldEZpbGVOYW1lKG4pLHZvaWQgMCE9PXImJnRoaXMuc2V0TGluZU51bWJlcihyKSx2b2lkIDAhPT1vJiZ0aGlzLnNldENvbHVtbk51bWJlcihvKSx2b2lkIDAhPT1zJiZ0aGlzLnNldFNvdXJjZShzKX1yZXR1cm4gdC5wcm90b3R5cGU9e2dldEZ1bmN0aW9uTmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZ1bmN0aW9uTmFtZX0sc2V0RnVuY3Rpb25OYW1lOmZ1bmN0aW9uKGUpe3RoaXMuZnVuY3Rpb25OYW1lPVN0cmluZyhlKX0sZ2V0QXJnczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3N9LHNldEFyZ3M6ZnVuY3Rpb24oZSl7aWYoIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmdzIG11c3QgYmUgYW4gQXJyYXkiKTt0aGlzLmFyZ3M9ZX0sZ2V0RmlsZU5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxlTmFtZX0sc2V0RmlsZU5hbWU6ZnVuY3Rpb24oZSl7dGhpcy5maWxlTmFtZT1TdHJpbmcoZSl9LGdldExpbmVOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lTnVtYmVyfSxzZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe2lmKCFlKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkxpbmUgTnVtYmVyIG11c3QgYmUgYSBOdW1iZXIiKTt0aGlzLmxpbmVOdW1iZXI9TnVtYmVyKHQpfSxnZXRDb2x1bW5OdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5OdW1iZXJ9LHNldENvbHVtbk51bWJlcjpmdW5jdGlvbih0KXtpZighZSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb2x1bW4gTnVtYmVyIG11c3QgYmUgYSBOdW1iZXIiKTt0aGlzLmNvbHVtbk51bWJlcj1OdW1iZXIodCl9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0sc2V0U291cmNlOmZ1bmN0aW9uKGUpe3RoaXMuc291cmNlPVN0cmluZyhlKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5nZXRGdW5jdGlvbk5hbWUoKXx8Inthbm9ueW1vdXN9IikrIigiKyh0aGlzLmdldEFyZ3MoKXx8W10pLmpvaW4oIiwiKSsiKSIrKHRoaXMuZ2V0RmlsZU5hbWUoKT8iQCIrdGhpcy5nZXRGaWxlTmFtZSgpOiIiKSsoZSh0aGlzLmdldExpbmVOdW1iZXIoKSk/IjoiK3RoaXMuZ2V0TGluZU51bWJlcigpOiIiKSsoZSh0aGlzLmdldENvbHVtbk51bWJlcigpKT8iOiIrdGhpcy5nZXRDb2x1bW5OdW1iZXIoKToiIil9fSx0fSl9LCIuL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoKXtvLmNhbGwodGhpcyl9ZS5leHBvcnRzPXI7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiKS5FdmVudEVtaXR0ZXI7bigiLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKHIsbyksci5SZWFkYWJsZT1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIpLHIuV3JpdGFibGU9bigiLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLWJyb3dzZXIuanMiKSxyLkR1cGxleD1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiKSxyLlRyYW5zZm9ybT1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzIiksci5QYXNzVGhyb3VnaD1uKCIuL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiKSxyLlN0cmVhbT1yLHIucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe2Uud3JpdGFibGUmJiExPT09ZS53cml0ZSh0KSYmdS5wYXVzZSYmdS5wYXVzZSgpfWZ1bmN0aW9uIHIoKXt1LnJlYWRhYmxlJiZ1LnJlc3VtZSYmdS5yZXN1bWUoKX1mdW5jdGlvbiBzKCl7Y3x8KGM9ITAsZS5lbmQoKSl9ZnVuY3Rpb24gaSgpe2N8fChjPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiBhKGUpe2lmKGwoKSwwPT09by5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgZX1mdW5jdGlvbiBsKCl7dS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsbiksZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHIpLHUucmVtb3ZlTGlzdGVuZXIoImVuZCIscyksdS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGkpLHUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixhKSxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsYSksdS5yZW1vdmVMaXN0ZW5lcigiZW5kIixsKSx1LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGwpfXZhciB1PXRoaXM7dS5vbigiZGF0YSIsbiksZS5vbigiZHJhaW4iLHIpLGUuX2lzU3RkaW98fHQmJiExPT09dC5lbmR8fCh1Lm9uKCJlbmQiLHMpLHUub24oImNsb3NlIixpKSk7dmFyIGM9ITE7cmV0dXJuIHUub24oImVycm9yIixhKSxlLm9uKCJlcnJvciIsYSksdS5vbigiZW5kIixsKSx1Lm9uKCJjbG9zZSIsbCksZS5vbigiY2xvc2UiLGwpLGUuZW1pdCgicGlwZSIsdSksZX19LCIuL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnJlcGVhdC9yZXBlYXQuanMiOmZ1bmN0aW9uKGUsdCl7LyohIGh0dHA6Ly9tdGhzLmJlL3JlcGVhdCB2MC4yLjAgYnkgQG1hdGhpYXMgKi8KU3RyaW5nLnByb3RvdHlwZS5yZXBlYXR8fGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXt9LHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG49dChlLGUsZSkmJnR9Y2F0Y2goZSl7fXJldHVybiBufSgpLHQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09dGhpcyl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1TdHJpbmcodGhpcyksbj1lP051bWJlcihlKTowO2lmKG4hPW4mJihuPTApLG48MHx8bj09MS8wKXRocm93IFJhbmdlRXJyb3IoKTtmb3IodmFyIHI9IiI7bjspbiUyPT0xJiYocis9dCksbj4xJiYodCs9dCksbj4+PTE7cmV0dXJuIHJ9O2U/ZShTdHJpbmcucHJvdG90eXBlLCJyZXBlYXQiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOlN0cmluZy5wcm90b3R5cGUucmVwZWF0PXR9KCl9LCIuL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZighZSlyZXR1cm4idXRmOCI7Zm9yKHZhciB0Ozspc3dpdGNoKGUpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSx0PSEwfX1mdW5jdGlvbiBvKGUpe3ZhciB0PXIoZSk7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYoYi5pc0VuY29kaW5nPT09RXx8IUUoZSkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtyZXR1cm4gdHx8ZX1mdW5jdGlvbiBzKGUpe3RoaXMuZW5jb2Rpbmc9byhlKTt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Xyx0aGlzLmVuZD1wLHQ9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9dSx0PTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1mLHRoaXMuZW5kPW0sdD0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9aCx2b2lkKHRoaXMuZW5kPWcpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9Yi5hbGxvY1Vuc2FmZSh0KX1mdW5jdGlvbiBpKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT02PzI6ZT4+ND09MTQ/MzplPj4zPT0zMD80OmU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gYShlLHQsbil7dmFyIHI9dC5sZW5ndGgtMTtpZihyPG4pcmV0dXJuIDA7dmFyIG89aSh0W3JdKTtyZXR1cm4gbz49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTEpLG8pOi0tcjxufHwtMj09PW8/MDoobz1pKHRbcl0pKT49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTIpLG8pOi0tcjxufHwtMj09PW8/MDoobz1pKHRbcl0pLG8+PTA/KG8+MCYmKDI9PT1vP289MDplLmxhc3ROZWVkPW8tMyksbyk6MCl9ZnVuY3Rpb24gbChlLHQsbil7aWYoMTI4IT0oMTkyJnRbMF0pKXJldHVybiBlLmxhc3ROZWVkPTAsIu+/vSI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSwi77+9IjtpZihlLmxhc3ROZWVkPjImJnQubGVuZ3RoPjImJjEyOCE9KDE5MiZ0WzJdKSlyZXR1cm4gZS5sYXN0TmVlZD0yLCLvv70ifX1mdW5jdGlvbiB1KGUpe3ZhciB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsbj1sKHRoaXMsZSx0KTtyZXR1cm4gdm9pZCAwIT09bj9uOnRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoPyhlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPWUubGVuZ3RoKSl9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPWEodGhpcyxlLHQpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iix0KTt0aGlzLmxhc3RUb3RhbD1uO3ZhciByPWUubGVuZ3RoLShuLXRoaXMubGFzdE5lZWQpO3JldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhciwwLHIpLGUudG9TdHJpbmcoInV0ZjgiLHQscil9ZnVuY3Rpb24gZChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3QrIu+/vSI6dH1mdW5jdGlvbiBfKGUsdCl7aWYoKGUubGVuZ3RoLXQpJTI9PTApe3ZhciBuPWUudG9TdHJpbmcoInV0ZjE2bGUiLHQpO2lmKG4pe3ZhciByPW4uY2hhckNvZGVBdChuLmxlbmd0aC0xKTtpZihyPj01NTI5NiYmcjw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWVbZS5sZW5ndGgtMV0sbi5zbGljZSgwLC0xKX1yZXR1cm4gbn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdLGUudG9TdHJpbmcoInV0ZjE2bGUiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gcChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciBuPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIHQrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxuKX1yZXR1cm4gdH1mdW5jdGlvbiBmKGUsdCl7dmFyIG49KGUubGVuZ3RoLXQpJTM7cmV0dXJuIDA9PT1uP2UudG9TdHJpbmcoImJhc2U2NCIsdCk6KHRoaXMubGFzdE5lZWQ9My1uLHRoaXMubGFzdFRvdGFsPTMsMT09PW4/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKCJiYXNlNjQiLHQsZS5sZW5ndGgtbikpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIifXZhciBiPW4oIi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLEU9Yi5pc0VuY29kaW5nfHxmdW5jdGlvbihlKXtzd2l0Y2goKGU9IiIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTt0LlN0cmluZ0RlY29kZXI9cyxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIiI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm4iIjtuPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugbj0wO3JldHVybiBuPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxuKTp0aGlzLnRleHQoZSxuKTp0fHwiIn0scy5wcm90b3R5cGUuZW5kPWQscy5wcm90b3R5cGUudGV4dD1jLHMucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSwiLi9ub2RlX21vZHVsZXMvc3R5bGUtdG8tb2JqZWN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvY3NzL2xpYi9wYXJzZS9pbmRleC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7Zm9yKHZhciBuLG8scyxpPXIoInB7IitlKyJ9Iikuc3R5bGVzaGVldC5ydWxlc1swXS5kZWNsYXJhdGlvbnMsYT1udWxsLGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQsdT0wLGM9aS5sZW5ndGg7dTxjO3UrKyluPWlbdV0sbz1uLnByb3BlcnR5LHM9bi52YWx1ZSxsP3QobyxzLG4pOnMmJihhfHwoYT17fSksYVtvXT1zKTtyZXR1cm4gYX19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9kaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciBvPW5bcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHQpLG8ubD0hMCxvLmV4cG9ydHN9dmFyIG49e307cmV0dXJuIHQubT1lLHQuYz1uLHQuZD1mdW5jdGlvbihlLG4scil7dC5vKGUsbil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LHQubj1mdW5jdGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gdC5kKG4sImEiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPSIiLHQodC5zPTIzKX0oW2Z1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUub3BlbmFwaTtyZXR1cm4hIXQmJigwLHkuZGVmYXVsdCkodCwiMyIpfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5zd2FnZ2VyO3JldHVybiEhdCYmKDAseS5kZWZhdWx0KSh0LCIyIil9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIixyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxvPXIudjJPcGVyYXRpb25JZENvbXBhdGliaWxpdHlNb2RlO3JldHVybiBlJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOigwLGguZGVmYXVsdCkoZSkpPyhlLm9wZXJhdGlvbklkfHwiIikucmVwbGFjZSgvXHMvZywiIikubGVuZ3RoP1QoZS5vcGVyYXRpb25JZCk6YSh0LG4se3YyT3BlcmF0aW9uSWRDb21wYXRpYmlsaXR5TW9kZTpvfSk6bnVsbH1mdW5jdGlvbiBhKGUsdCl7aWYoKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSkudjJPcGVyYXRpb25JZENvbXBhdGliaWxpdHlNb2RlKXt2YXIgbj0odC50b0xvd2VyQ2FzZSgpKyJfIitlKS5yZXBsYWNlKC9bXHMhQCMkJV4mKigpXys9W3tcXX07Ojw+fC5cLz8sXFwnIiItXS9nLCJfIik7cmV0dXJuIG49bnx8ZS5zdWJzdHJpbmcoMSkrIl8iK3Qsbi5yZXBsYWNlKC8oKF8pezIsfSkvZywiXyIpLnJlcGxhY2UoL14oXykqL2csIiIpLnJlcGxhY2UoLyhbX10pKiQvZywiIil9cmV0dXJuIiIrdih0KStUKGUpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gdih0KSsiLSIrZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGUmJmUucGF0aHM/YyhlLGZ1bmN0aW9uKGUpe3ZhciBuPWUucGF0aE5hbWUscj1lLm1ldGhvZCxvPWUub3BlcmF0aW9uO2lmKCFvfHwib2JqZWN0IiE9PSh2b2lkIDA9PT1vPyJ1bmRlZmluZWQiOigwLGguZGVmYXVsdCkobykpKXJldHVybiExO3ZhciBzPW8ub3BlcmF0aW9uSWQ7cmV0dXJuW2kobyxuLHIpLGwobixyKSxzXS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlPT09dH0pfSk6bnVsbH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGQoZSx0LCEwKXx8bnVsbH1mdW5jdGlvbiBkKGUsdCxuKXtpZighZXx8Im9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjooMCxoLmRlZmF1bHQpKGUpKXx8IWUucGF0aHN8fCJvYmplY3QiIT09KDAsaC5kZWZhdWx0KShlLnBhdGhzKSlyZXR1cm4gbnVsbDt2YXIgcj1lLnBhdGhzO2Zvcih2YXIgbyBpbiByKWZvcih2YXIgcyBpbiByW29dKWlmKCJQQVJBTUVURVJTIiE9PXMudG9VcHBlckNhc2UoKSl7dmFyIGk9cltvXVtzXTtpZihpJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOigwLGguZGVmYXVsdCkoaSkpKXt2YXIgYT17c3BlYzplLHBhdGhOYW1lOm8sbWV0aG9kOnMudG9VcHBlckNhc2UoKSxvcGVyYXRpb246aX0sbD10KGEpO2lmKG4mJmwpcmV0dXJuIGF9fX1mdW5jdGlvbiBfKGUpe3ZhciB0PWUuc3BlYyxuPXQucGF0aHMscj17fTtpZighbnx8dC4kJG5vcm1hbGl6ZWQpcmV0dXJuIGU7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107aWYoKDAsYi5kZWZhdWx0KShzKSl7dmFyIGE9cy5wYXJhbWV0ZXJzO2Zvcih2YXIgbCBpbiBzKSFmdW5jdGlvbihlKXt2YXIgbj1zW2VdO2lmKCEoMCxiLmRlZmF1bHQpKG4pKXJldHVybiJjb250aW51ZSI7dmFyIGw9aShuLG8sZSk7aWYobCl7cltsXT9yW2xdLnB1c2gobik6cltsXT1bbl07dmFyIHU9cltsXTtpZih1Lmxlbmd0aD4xKXUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuX19vcmlnaW5hbE9wZXJhdGlvbklkPWUuX19vcmlnaW5hbE9wZXJhdGlvbklkfHxlLm9wZXJhdGlvbklkLGUub3BlcmF0aW9uSWQ9IiIrbCsodCsxKX0pO2Vsc2UgaWYodm9pZCAwIT09bi5vcGVyYXRpb25JZCl7dmFyIGM9dVswXTtjLl9fb3JpZ2luYWxPcGVyYXRpb25JZD1jLl9fb3JpZ2luYWxPcGVyYXRpb25JZHx8bi5vcGVyYXRpb25JZCxjLm9wZXJhdGlvbklkPWx9fWlmKCJwYXJhbWV0ZXJzIiE9PWUpe3ZhciBkPVtdLF89e307Zm9yKHZhciBwIGluIHQpInByb2R1Y2VzIiE9PXAmJiJjb25zdW1lcyIhPT1wJiYic2VjdXJpdHkiIT09cHx8KF9bcF09dFtwXSxkLnB1c2goXykpO2lmKGEmJihfLnBhcmFtZXRlcnM9YSxkLnB1c2goXykpLGQubGVuZ3RoKXt2YXIgbT0hMCxoPSExLGc9dm9pZCAwO3RyeXtmb3IodmFyIEUseT0oMCxmLmRlZmF1bHQpKGQpOyEobT0oRT15Lm5leHQoKSkuZG9uZSk7bT0hMCl7dmFyIHY9RS52YWx1ZTtmb3IodmFyIFQgaW4gdilpZihuW1RdKXtpZigicGFyYW1ldGVycyI9PT1UKXt2YXIgQT0hMCxDPSExLE89dm9pZCAwO3RyeXtmb3IodmFyIFMsUj0oMCxmLmRlZmF1bHQpKHZbVF0pOyEoQT0oUz1SLm5leHQoKSkuZG9uZSk7QT0hMCkhZnVuY3Rpb24oKXt2YXIgZT1TLnZhbHVlO25bVF0uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lJiZ0Lm5hbWU9PT1lLm5hbWV8fHQuJHJlZiYmdC4kcmVmPT09ZS4kcmVmfHx0LiQkcmVmJiZ0LiQkcmVmPT09ZS4kJHJlZnx8dD09PWV9KXx8bltUXS5wdXNoKGUpfSgpfWNhdGNoKGUpe0M9ITAsTz1lfWZpbmFsbHl7dHJ5eyFBJiZSLnJldHVybiYmUi5yZXR1cm4oKX1maW5hbGx5e2lmKEMpdGhyb3cgT319fX1lbHNlIG5bVF09dltUXX19Y2F0Y2goZSl7aD0hMCxnPWV9ZmluYWxseXt0cnl7IW0mJnkucmV0dXJuJiZ5LnJldHVybigpfWZpbmFsbHl7aWYoaCl0aHJvdyBnfX19fX0obCl9fXJldHVybiB0LiQkbm9ybWFsaXplZD0hMCxlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcD1uKDE4KSxmPXIocCksbT1uKDEpLGg9cihtKTt0LmlzT0FTMz1vLHQuaXNTd2FnZ2VyMj1zLHQub3BJZD1pLHQuaWRGcm9tUGF0aE1ldGhvZD1hLHQubGVnYWN5SWRGcm9tUGF0aE1ldGhvZD1sLHQuZ2V0T3BlcmF0aW9uUmF3PXUsdC5maW5kT3BlcmF0aW9uPWMsdC5lYWNoT3BlcmF0aW9uPWQsdC5ub3JtYWxpemVTd2FnZ2VyPV87dmFyIGc9big0NyksYj1yKGcpLEU9bigxNCkseT1yKEUpLHY9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UuY2FsbChlKX0sVD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXlx3XS9naSwiXyIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2Fzc2lnbi5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdCYmKDA9PT10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKXx8dC5pbmRleE9mKCIranNvbiIpPjApP0pTT04ucGFyc2UoZSk6Ui5kZWZhdWx0LnNhZmVMb2FkKGUpfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1uLmxvYWRTcGVjLHM9dm9pZCAwIT09ciYmcixhPXtvazplLm9rLHVybDplLnVybHx8dCxzdGF0dXM6ZS5zdGF0dXMsc3RhdHVzVGV4dDplLnN0YXR1c1RleHQsaGVhZGVyczppKGUuaGVhZGVycyl9LGw9YS5oZWFkZXJzWyJjb250ZW50LXR5cGUiXSx1PXN8fEQobCk7cmV0dXJuKHU/ZS50ZXh0OmUuYmxvYnx8ZS5idWZmZXIpLmNhbGwoZSkudGhlbihmdW5jdGlvbihlKXtpZihhLnRleHQ9ZSxhLmRhdGE9ZSx1KXRyeXt2YXIgdD1vKGUsbCk7YS5ib2R5PXQsYS5vYmo9dH1jYXRjaChlKXthLnBhcnNlRXJyb3I9ZX1yZXR1cm4gYX0pfWZ1bmN0aW9uIGkoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD17fTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JFYWNoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt2b2lkIDAhPT10W25dPyh0W25dPUFycmF5LmlzQXJyYXkodFtuXSk/dFtuXTpbdFtuXV0sdFtuXS5wdXNoKGUpKTp0W25dPWV9KSx0KTp0fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gdHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCh0PW5hdmlnYXRvciksdCYmIlJlYWN0TmF0aXZlIj09PXQucHJvZHVjdD8hKCFlfHwib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOigwLHYuZGVmYXVsdCkoZSkpfHwic3RyaW5nIiE9dHlwZW9mIGUudXJpKToidW5kZWZpbmVkIiE9dHlwZW9mIEZpbGU/ZSBpbnN0YW5jZW9mIEZpbGU6bnVsbCE9PWUmJiJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6KDAsdi5kZWZhdWx0KShlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnBpcGV9ZnVuY3Rpb24gbChlLHQpe3ZhciBuPWUuY29sbGVjdGlvbkZvcm1hdCxyPWUuYWxsb3dFbXB0eVZhbHVlLG89Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjooMCx2LmRlZmF1bHQpKGUpKT9lLnZhbHVlOmUscz17Y3N2OiIsIixzc3Y6IiUyMCIsdHN2OiIlMDkiLHBpcGVzOiJ8In07aWYodm9pZCAwPT09byYmcilyZXR1cm4iIjtpZihhKG8pfHwiYm9vbGVhbiI9PXR5cGVvZiBvKXJldHVybiBvO3ZhciBpPWVuY29kZVVSSUNvbXBvbmVudDtyZXR1cm4gdCYmKGk9KDAseC5kZWZhdWx0KShvKT9mdW5jdGlvbihlKXtyZXR1cm4gZX06ZnVuY3Rpb24oZSl7cmV0dXJuKDAsZy5kZWZhdWx0KShlKX0pLCJvYmplY3QiIT09KHZvaWQgMD09PW8/InVuZGVmaW5lZCI6KDAsdi5kZWZhdWx0KShvKSl8fEFycmF5LmlzQXJyYXkobyk/QXJyYXkuaXNBcnJheShvKT9BcnJheS5pc0FycmF5KG8pJiYhbj9vLm1hcChpKS5qb2luKCIsIik6Im11bHRpIj09PW4/by5tYXAoaSk6by5tYXAoaSkuam9pbihzW25dKTppKG8pOiIifWZ1bmN0aW9uIHUoZSl7dmFyIHQ9KDAsbS5kZWZhdWx0KShlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj1lW25dLG89ISFyLnNraXBFbmNvZGluZyxzPW8/bjplbmNvZGVVUklDb21wb25lbnQobiksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjooMCx2LmRlZmF1bHQpKGUpKX0ocikmJiFBcnJheS5pc0FycmF5KHIpO3JldHVybiB0W3NdPWwoaT9yOnt2YWx1ZTpyfSxvKSx0fSx7fSk7cmV0dXJuIE8uZGVmYXVsdC5zdHJpbmdpZnkodCx7ZW5jb2RlOiExLGluZGljZXM6ITF9KXx8IiJ9ZnVuY3Rpb24gYygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudXJsLHI9dm9pZCAwPT09dD8iIjp0LG89ZS5xdWVyeSxzPWUuZm9ybTtpZihzKXt2YXIgaT0oMCxtLmRlZmF1bHQpKHMpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGEoc1tlXS52YWx1ZSl9KSxjPWUuaGVhZGVyc1siY29udGVudC10eXBlIl18fGUuaGVhZGVyc1siQ29udGVudC1UeXBlIl07aWYoaXx8L211bHRpcGFydFwvZm9ybS1kYXRhL2kudGVzdChjKSl7dmFyIGQ9bigzMCk7ZS5ib2R5PW5ldyBkLCgwLG0uZGVmYXVsdCkocykuZm9yRWFjaChmdW5jdGlvbih0KXtlLmJvZHkuYXBwZW5kKHQsbChzW3RdLCEwKSl9KX1lbHNlIGUuYm9keT11KHMpO2RlbGV0ZSBlLmZvcm19aWYobyl7dmFyIF89ci5zcGxpdCgiPyIpLGY9KDAscC5kZWZhdWx0KShfLDIpLGg9ZlswXSxnPWZbMV0sYj0iIjtpZihnKXt2YXIgRT1PLmRlZmF1bHQucGFyc2UoZyk7KDAsbS5kZWZhdWx0KShvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgRVtlXX0pLGI9Ty5kZWZhdWx0LnN0cmluZ2lmeShFLHtlbmNvZGU6ITB9KX12YXIgeT1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5qb2luKCImIik7cmV0dXJuIHI/Ij8iK3I6IiJ9KGIsdShvKSk7ZS51cmw9aCt5LGRlbGV0ZSBlLnF1ZXJ5fXJldHVybiBlfWZ1bmN0aW9uIGQoZSx0LG4pe3JldHVybiBuPW58fGZ1bmN0aW9uKGUpe3JldHVybiBlfSx0PXR8fGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihyKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHImJihyPXt1cmw6cn0pLEwubWVyZ2VJblF1ZXJ5T3JGb3JtKHIpLHI9dChyKSxuKGUocikpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zaG91bGREb3dubG9hZEFzVGV4dD10LnNlbGY9dm9pZCAwO3ZhciBfPW4oMjYpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9big4KSxnPXIoaCksYj1uKDQpLEU9cihiKSx5PW4oMSksdj1yKHkpLFQ9bigxMSksQT1yKFQpO3Quc2VyaWFsaXplUmVzPXMsdC5zZXJpYWxpemVIZWFkZXJzPWksdC5pc0ZpbGU9YSx0LmVuY29kZUZvcm1PclF1ZXJ5PXUsdC5tZXJnZUluUXVlcnlPckZvcm09Yyx0Lm1ha2VIdHRwPWQsbigyNyk7dmFyIEM9bigyOCksTz1yKEMpLFM9bigxNSksUj1yKFMpLGo9bigyOSkseD1yKGopLEw9dC5zZWxmPXtzZXJpYWxpemVSZXM6cyxtZXJnZUluUXVlcnlPckZvcm06Y307dC5kZWZhdWx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHQ9KDAsQS5kZWZhdWx0KShFLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuLHIsbyxzLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiBFLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOigwLHYuZGVmYXVsdCkodCkpJiYoaT10LHQ9aS51cmwpLGkuaGVhZGVycz1pLmhlYWRlcnN8fHt9LEwubWVyZ2VJblF1ZXJ5T3JGb3JtKGkpLCFpLnJlcXVlc3RJbnRlcmNlcHRvcil7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLm5leHQ9NixpLnJlcXVlc3RJbnRlcmNlcHRvcihpKTtjYXNlIDY6aWYoZS50MD1lLnNlbnQsZS50MCl7ZS5uZXh0PTk7YnJlYWt9ZS50MD1pO2Nhc2UgOTppPWUudDA7Y2FzZSAxMDpyZXR1cm4gbj1pLmhlYWRlcnNbImNvbnRlbnQtdHlwZSJdfHxpLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdLC9tdWx0aXBhcnRcL2Zvcm0tZGF0YS9pLnRlc3QobikmJihkZWxldGUgaS5oZWFkZXJzWyJjb250ZW50LXR5cGUiXSxkZWxldGUgaS5oZWFkZXJzWyJDb250ZW50LVR5cGUiXSkscj12b2lkIDAsZS5wcmV2PTEzLGUubmV4dD0xNiwoaS51c2VyRmV0Y2h8fGZldGNoKShpLnVybCxpKTtjYXNlIDE2OnJldHVybiByPWUuc2VudCxlLm5leHQ9MTksTC5zZXJpYWxpemVSZXMocix0LGkpO2Nhc2UgMTk6aWYocj1lLnNlbnQsIWkucmVzcG9uc2VJbnRlcmNlcHRvcil7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLm5leHQ9MjMsaS5yZXNwb25zZUludGVyY2VwdG9yKHIpO2Nhc2UgMjM6aWYoZS50MT1lLnNlbnQsZS50MSl7ZS5uZXh0PTI2O2JyZWFrfWUudDE9cjtjYXNlIDI2OnI9ZS50MTtjYXNlIDI3OmUubmV4dD0zNzticmVhaztjYXNlIDI5OmlmKGUucHJldj0yOSxlLnQyPWUuY2F0Y2goMTMpLHIpe2UubmV4dD0zMzticmVha310aHJvdyBlLnQyO2Nhc2UgMzM6dGhyb3cgbz1uZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSxvLnN0YXR1c0NvZGU9by5zdGF0dXM9ci5zdGF0dXMsby5yZXNwb25zZUVycm9yPWUudDIsbztjYXNlIDM3OmlmKHIub2spe2UubmV4dD00MjticmVha310aHJvdyBzPW5ldyBFcnJvcihyLnN0YXR1c1RleHQpLHMuc3RhdHVzQ29kZT1zLnN0YXR1cz1yLnN0YXR1cyxzLnJlc3BvbnNlPXIscztjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixyKTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxlLHRoaXMsW1sxMywyOV1dKX0pKTtyZXR1cm4gZX0oKTt2YXIgRD10LnNob3VsZERvd25sb2FkQXNUZXh0PWZ1bmN0aW9uKCl7cmV0dXJuLyhqc29ufHhtbHx5YW1sfHRleHQpXGIvLnRlc3QoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeS5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0LG4pe2lmKG49bnx8e30sdD0oMCx6LmRlZmF1bHQpKHt9LHQse3BhdGg6dC5wYXRoJiZzKHQucGF0aCl9KSwibWVyZ2UiPT09dC5vcCl7dmFyIHI9TShlLHQucGF0aCk7KDAsei5kZWZhdWx0KShyLHQudmFsdWUpLFcuZGVmYXVsdC5hcHBseVBhdGNoKGUsW2EodC5wYXRoLHIpXSl9ZWxzZSBpZigibWVyZ2VEZWVwIj09PXQub3Ape3ZhciBvPU0oZSx0LnBhdGgpO2Zvcih2YXIgaSBpbiB0LnZhbHVlKXt2YXIgbD10LnZhbHVlW2ldLHU9QXJyYXkuaXNBcnJheShsKTtpZih1KXt2YXIgYz1vW2ldfHxbXTtvW2ldPWMuY29uY2F0KGwpfWVsc2UgaWYoQShsKSYmIXUpe3ZhciBkPSgwLHouZGVmYXVsdCkoe30sb1tpXSk7Zm9yKHZhciBfIGluIGwpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLF8pKXtkPSgwLFguZGVmYXVsdCkoKDAsUS5kZWZhdWx0KSh7fSxkKSxsKTticmVha30oMCx6LmRlZmF1bHQpKGQsKDAsVS5kZWZhdWx0KSh7fSxfLGxbX10pKX1vW2ldPWR9ZWxzZSBvW2ldPWx9fWVsc2UgaWYoImFkZCI9PT10Lm9wJiYiIj09PXQucGF0aCYmQSh0LnZhbHVlKSl7dmFyIHA9KDAsRi5kZWZhdWx0KSh0LnZhbHVlKS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5wdXNoKHtvcDoiYWRkIixwYXRoOiIvIitzKG4pLHZhbHVlOnQudmFsdWVbbl19KSxlfSxbXSk7Vy5kZWZhdWx0LmFwcGx5UGF0Y2goZSxwKX1lbHNlIGlmKCJyZXBsYWNlIj09PXQub3AmJiIiPT09dC5wYXRoKXt2YXIgZj10LnZhbHVlO24uYWxsb3dNZXRhUGF0Y2hlcyYmdC5tZXRhJiZMKHQpJiYoQXJyYXkuaXNBcnJheSh0LnZhbHVlKXx8QSh0LnZhbHVlKSkmJihmPSgwLHouZGVmYXVsdCkoe30sZix0Lm1ldGEpKSxlPWZ9ZWxzZSBpZihXLmRlZmF1bHQuYXBwbHlQYXRjaChlLFt0XSksbi5hbGxvd01ldGFQYXRjaGVzJiZ0Lm1ldGEmJkwodCkmJihBcnJheS5pc0FycmF5KHQudmFsdWUpfHxBKHQudmFsdWUpKSl7dmFyIG09TShlLHQucGF0aCksaD0oMCx6LmRlZmF1bHQpKHt9LG0sdC5tZXRhKTtXLmRlZmF1bHQuYXBwbHlQYXRjaChlLFthKHQucGF0aCxoKV0pfXJldHVybiBlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg8MT8iIjoiLyIrZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UoL34vZywifjAiKS5yZXBsYWNlKC9cLy9nLCJ+MSIpfSkuam9pbigiLyIpOmV9ZnVuY3Rpb24gaShlLHQpe3JldHVybntvcDoiYWRkIixwYXRoOmUsdmFsdWU6dH19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJue29wOiJyZXBsYWNlIixwYXRoOmUsdmFsdWU6dCxtZXRhOm59fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm57b3A6InJlbW92ZSIscGF0aDplfX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJue3R5cGU6Im11dGF0aW9uIixvcDoibWVyZ2UiLHBhdGg6ZSx2YWx1ZTp0fX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJue3R5cGU6Im11dGF0aW9uIixvcDoibWVyZ2VEZWVwIixwYXRoOmUsdmFsdWU6dH19ZnVuY3Rpb24gZChlLHQpe3JldHVybnt0eXBlOiJjb250ZXh0IixwYXRoOmUsdmFsdWU6dH19ZnVuY3Rpb24gXyhlLHQpe3RyeXtyZXR1cm4gZihlLGgsdCl9Y2F0Y2goZSl7cmV0dXJuIGV9fWZ1bmN0aW9uIHAoZSx0KXt0cnl7cmV0dXJuIGYoZSxtLHQpfWNhdGNoKGUpe3JldHVybiBlfX1mdW5jdGlvbiBmKGUsdCxuKXtyZXR1cm4gVCh2KGUuZmlsdGVyKEwpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLnZhbHVlLG4sZS5wYXRoKX0pfHxbXSkpfWZ1bmN0aW9uIG0oZSx0LG4pe3JldHVybiBuPW58fFtdLEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbShlLHQsbi5jb25jYXQocikpfSk6QShlKT8oMCxGLmRlZmF1bHQpKGUpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gbShlW3JdLHQsbi5jb25jYXQocikpfSk6dChlLG5bbi5sZW5ndGgtMV0sbil9ZnVuY3Rpb24gaChlLHQsbil7bj1ufHxbXTt2YXIgcj1bXTtpZihuLmxlbmd0aD4wKXt2YXIgbz10KGUsbltuLmxlbmd0aC0xXSxuKTtvJiYocj1yLmNvbmNhdChvKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9ZS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gaChlLHQsbi5jb25jYXQocikpfSk7cyYmKHI9ci5jb25jYXQocykpfWVsc2UgaWYoQShlKSl7dmFyIGk9KDAsRi5kZWZhdWx0KShlKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGgoZVtyXSx0LG4uY29uY2F0KHIpKX0pO2kmJihyPXIuY29uY2F0KGkpKX1yZXR1cm4gcj12KHIpfWZ1bmN0aW9uIGcoZSx0KXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodFtuXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYihlLHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT10JiZlP2VbdF06ZX0sZSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gVCh2KHkoZSkpKX1mdW5jdGlvbiB5KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIHYoZSl7dmFyIHQ7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LCgwLE4uZGVmYXVsdCkoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/dihlKTplfSkpKX1mdW5jdGlvbiBUKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0pfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6KDAsSS5kZWZhdWx0KShlKSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQShlKSYmTyhlLnRoZW4pfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcn1mdW5jdGlvbiBSKGUpe2lmKHcoZSkpe3ZhciB0PWUub3A7cmV0dXJuImFkZCI9PT10fHwicmVtb3ZlIj09PXR8fCJyZXBsYWNlIj09PXR9cmV0dXJuITF9ZnVuY3Rpb24gaihlKXtyZXR1cm4gcS5kZWZhdWx0LmlzR2VuZXJhdG9yRnVuY3Rpb24oZSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gUihlKXx8dyhlKSYmIm11dGF0aW9uIj09PWUudHlwZX1mdW5jdGlvbiBMKGUpe3JldHVybiB4KGUpJiYoImFkZCI9PT1lLm9wfHwicmVwbGFjZSI9PT1lLm9wfHwibWVyZ2UiPT09ZS5vcHx8Im1lcmdlRGVlcCI9PT1lLm9wKX1mdW5jdGlvbiBEKGUpe3JldHVybiB3KGUpJiYiY29udGV4dCI9PT1lLnR5cGV9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZSYmIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjooMCxJLmRlZmF1bHQpKGUpKX1mdW5jdGlvbiBNKGUsdCl7dHJ5e3JldHVybiBXLmRlZmF1bHQuZ2V0VmFsdWVCeVBvaW50ZXIoZSx0KX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihlKSx7fX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrPW4oMSksST1yKGspLFA9bigzNCksTj1yKFApLEg9bigwKSxGPXIoSCksQj1uKDM1KSxVPXIoQiksRz1uKDIpLHo9cihHKSxWPW4oMzYpLFc9cihWKSxZPW4oNCkscT1yKFkpLEs9bigzNyksWD1yKEspLCQ9bigzOCksUT1yKCQpO3QuZGVmYXVsdD17YWRkOmkscmVwbGFjZTphLHJlbW92ZTpsLG1lcmdlOnUsbWVyZ2VEZWVwOmMsY29udGV4dDpkLGdldEluOmIsYXBwbHlQYXRjaDpvLHBhcmVudFBhdGhNYXRjaDpnLGZsYXR0ZW46dixmdWxseU5vcm1hbGl6ZUFycmF5OkUsbm9ybWFsaXplQXJyYXk6eSxpc1Byb21pc2U6Qyxmb3JFYWNoTmV3Ol8sZm9yRWFjaE5ld1ByaW1pdGl2ZTpwLGlzSnNvblBhdGNoOlIsaXNDb250ZXh0UGF0Y2g6RCxpc1BhdGNoOncsaXNNdXRhdGlvbjp4LGlzQWRkaXRpdmVNdXRhdGlvbjpMLGlzR2VuZXJhdG9yOmosaXNGdW5jdGlvbjpPLGlzT2JqZWN0OkEsaXNFcnJvcjpTfSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy91cmwvdXJsLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYnRvYS9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3RhcnRzV2l0aC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQucmVxdWVzdEludGVyY2VwdG9yLHI9dC5yZXNwb25zZUludGVyY2VwdG9yLG89ZS53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiI7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHt1cmw6dCxsb2FkU3BlYzohMCxyZXF1ZXN0SW50ZXJjZXB0b3I6bixyZXNwb25zZUludGVyY2VwdG9yOnIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sY3JlZGVudGlhbHM6b30pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuYm9keX0pfX1mdW5jdGlvbiBzKCl7cC5wbHVnaW5zLnJlZnMuY2xlYXJDYWNoZSgpfWZ1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gdChlKXt2YXIgdD10aGlzO1QmJihwLnBsdWdpbnMucmVmcy5kb2NDYWNoZVtUXT1lKSxwLnBsdWdpbnMucmVmcy5mZXRjaEpTT049byh2LHtyZXF1ZXN0SW50ZXJjZXB0b3I6YixyZXNwb25zZUludGVyY2VwdG9yOkV9KTt2YXIgbj1bcC5wbHVnaW5zLnJlZnNdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBnJiZuLnB1c2gocC5wbHVnaW5zLnBhcmFtZXRlcnMpLCJmdW5jdGlvbiI9PXR5cGVvZiBoJiZuLnB1c2gocC5wbHVnaW5zLnByb3BlcnRpZXMpLCJzdHJpY3QiIT09aSYmbi5wdXNoKHAucGx1Z2lucy5hbGxPZiksKDAsZi5kZWZhdWx0KSh7c3BlYzplLGNvbnRleHQ6e2Jhc2VEb2M6VH0scGx1Z2luczpuLGFsbG93TWV0YVBhdGNoZXM6dSxwYXRoRGlzY3JpbWluYXRvcjpkLHBhcmFtZXRlck1hY3JvOmcsbW9kZWxQcm9wZXJ0eU1hY3JvOmh9KS50aGVuKHk/ZnVuY3Rpb24oKXt2YXIgZT0oMCxjLmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIGUobil7cmV0dXJuIGwuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixuKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGUsdCl9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk6bS5ub3JtYWxpemVTd2FnZ2VyKX12YXIgbj1lLmZldGNoLHI9ZS5zcGVjLHM9ZS51cmwsaT1lLm1vZGUsYT1lLmFsbG93TWV0YVBhdGNoZXMsdT12b2lkIDA9PT1hfHxhLGQ9ZS5wYXRoRGlzY3JpbWluYXRvcixoPWUubW9kZWxQcm9wZXJ0eU1hY3JvLGc9ZS5wYXJhbWV0ZXJNYWNybyxiPWUucmVxdWVzdEludGVyY2VwdG9yLEU9ZS5yZXNwb25zZUludGVyY2VwdG9yLHk9ZS5za2lwTm9ybWFsaXphdGlvbix2PWUuaHR0cCxUPWUuYmFzZURvYztyZXR1cm4gVD1UfHxzLHY9bnx8dnx8Xy5kZWZhdWx0LHI/dChyKTpvKHYse3JlcXVlc3RJbnRlcmNlcHRvcjpiLHJlc3BvbnNlSW50ZXJjZXB0b3I6RX0pKFQpLnRoZW4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPW4oNCksbD1yKGEpLHU9bigxMSksYz1yKHUpO3QubWFrZUZldGNoSlNPTj1vLHQuY2xlYXJDYWNoZT1zLHQuZGVmYXVsdD1pO3ZhciBkPW4oNyksXz1yKGQpLHA9bigzMSksZj1yKHApLG09big1KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Z1bmN0aW9uIG4oKXtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2s7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPWFyZ3VtZW50c1tyXTt0aGlzLm1lc3NhZ2U9blswXSx0JiZ0LmFwcGx5KHRoaXMsbil9cmV0dXJuIG4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPWUsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cixlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZVtlLmxlbmd0aC0xXSxuPWVbZS5sZW5ndGgtMl0scj1lLmpvaW4oIi8iKTtyZXR1cm4gby5pbmRleE9mKHQpPi0xJiYtMT09PXMuaW5kZXhPZihuKXx8aS5pbmRleE9mKHIpPi0xfHxhLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaW5kZXhPZihlKT4tMX0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzRnJlZWx5TmFtZWQ9cjt2YXIgbz1bInByb3BlcnRpZXMiXSxzPVsicHJvcGVydGllcyJdLGk9WyJkZWZpbml0aW9ucyIsInBhcmFtZXRlcnMiLCJyZXNwb25zZXMiLCJzZWN1cml0eURlZmluaXRpb25zIiwiY29tcG9uZW50cy9zY2hlbWFzIiwiY29tcG9uZW50cy9yZXNwb25zZXMiLCJjb21wb25lbnRzL3BhcmFtZXRlcnMiLCJjb21wb25lbnRzL3NlY3VyaXR5U2NoZW1lcyJdLGE9WyJzY2hlbWEvZXhhbXBsZSIsIml0ZW1zL2V4YW1wbGUiXX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDI0KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoInN0cmluZyI9PXR5cGVvZiBlP24udXJsPWU6bj1lLCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhuKTsoMCx1LmRlZmF1bHQpKHRoaXMsbik7dmFyIHI9dGhpcy5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmRpc2FibGVJbnRlcmZhY2VzfHwoMCx1LmRlZmF1bHQpKHQsby5tYWtlQXBpc1RhZ09wZXJhdGlvbih0KSksdH0pO3JldHVybiByLmNsaWVudD10aGlzLHJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPW4oMyksaT1yKHMpLGE9bigyNSksbD0ocihhKSxuKDYpKSx1PXIobCksYz1uKDE0KSxkPXIoYyksXz1uKDEwKSxwPXIoXyksZj1uKDcpLG09cihmKSxoPW4oMTYpLGc9cihoKSxiPW4oNDgpLEU9cihiKSx5PW4oNDkpLHY9big1MSksVD1uKDUpO28uaHR0cD1tLmRlZmF1bHQsby5tYWtlSHR0cD1mLm1ha2VIdHRwLmJpbmQobnVsbCxvLmh0dHApLG8ucmVzb2x2ZT1nLmRlZmF1bHQsby5yZXNvbHZlU3VidHJlZT1FLmRlZmF1bHQsby5leGVjdXRlPXYuZXhlY3V0ZSxvLnNlcmlhbGl6ZVJlcz1mLnNlcmlhbGl6ZVJlcyxvLnNlcmlhbGl6ZUhlYWRlcnM9Zi5zZXJpYWxpemVIZWFkZXJzLG8uY2xlYXJDYWNoZT1oLmNsZWFyQ2FjaGUsby5wYXJhbWV0ZXJCdWlsZGVycz12LlBBUkFNRVRFUl9CVUlMREVSUyxvLm1ha2VBcGlzVGFnT3BlcmF0aW9uPXkubWFrZUFwaXNUYWdPcGVyYXRpb24sby5idWlsZFJlcXVlc3Q9di5idWlsZFJlcXVlc3Qsby5oZWxwZXJzPXtvcElkOlQub3BJZH0sby5wcm90b3R5cGU9e2h0dHA6bS5kZWZhdWx0LGV4ZWN1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXBwbHlEZWZhdWx0cygpLG8uZXhlY3V0ZSgoMCxpLmRlZmF1bHQpKHtzcGVjOnRoaXMuc3BlYyxodHRwOnRoaXMuaHR0cCxzZWN1cml0aWVzOnthdXRob3JpemVkOnRoaXMuYXV0aG9yaXphdGlvbnN9LGNvbnRleHRVcmw6InN0cmluZyI9PXR5cGVvZiB0aGlzLnVybD90aGlzLnVybDp2b2lkIDB9LGUpKX0scmVzb2x2ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG8ucmVzb2x2ZSh7c3BlYzp0aGlzLnNwZWMsdXJsOnRoaXMudXJsLGFsbG93TWV0YVBhdGNoZXM6dGhpcy5hbGxvd01ldGFQYXRjaGVzLHJlcXVlc3RJbnRlcmNlcHRvcjp0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnx8bnVsbCxyZXNwb25zZUludGVyY2VwdG9yOnRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnx8bnVsbH0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUub3JpZ2luYWxTcGVjPWUuc3BlYyxlLnNwZWM9dC5zcGVjLGUuZXJyb3JzPXQuZXJyb3JzLGV9KX19LG8ucHJvdG90eXBlLmFwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNwZWMsdD10aGlzLnVybDtpZih0JiYoMCxkLmRlZmF1bHQpKHQsImh0dHAiKSl7dmFyIG49cC5kZWZhdWx0LnBhcnNlKHQpO2UuaG9zdHx8KGUuaG9zdD1uLmhvc3QpLGUuc2NoZW1lc3x8KGUuc2NoZW1lcz1bbi5wcm90b2NvbC5yZXBsYWNlKCI6IiwiIildKSxlLmJhc2VQYXRofHwoZS5iYXNlUGF0aD0iLyIpfX0sdC5kZWZhdWx0PW8sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2Nsb25lRGVlcC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L2ZldGNoLWJyb3dzZXItcG9seWZpbGwuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9pc29tb3JwaGljLWZvcm0tZGF0YS9saWIvYnJvd3Nlci5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG5ldyBGKGUpLmRpc3BhdGNoKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGx1Z2lucz10LlNwZWNNYXA9dm9pZCAwO3ZhciBzPW4oOCksaT1yKHMpLGE9bigxKSxsPXIoYSksdT1uKDE3KSxjPXIodSksZD1uKDQpLF89cihkKSxwPW4oMCksZj1yKHApLG09bigxOCksaD1yKG0pLGc9bigzMiksYj1yKGcpLEU9bigyKSx5PXIoRSksdj1uKDE5KSxUPXIodiksQT1uKDIwKSxDPXIoQSk7dC5kZWZhdWx0PW87dmFyIE89bigzMyksUz1yKE8pLFI9big5KSxqPXIoUikseD1uKDM5KSxMPXIoeCksRD1uKDQzKSx3PXIoRCksTT1uKDQ0KSxrPXIoTSksST1uKDQ1KSxQPXIoSSksTj1uKDQ2KSxIPXIoTiksRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7KDAsVC5kZWZhdWx0KSh0aGlzLGUpLCgwLHkuZGVmYXVsdCkodGhpcyx7c3BlYzoiIixkZWJ1Z0xldmVsOiJpbmZvIixwbHVnaW5zOltdLHBsdWdpbkhpc3Rvcnk6e30sZXJyb3JzOltdLG11dGF0aW9uczpbXSxwcm9taXNlZFBhdGNoZXM6W10sc3RhdGU6e30scGF0Y2hlczpbXSxjb250ZXh0Ont9LGNvbnRleHRUcmVlOm5ldyBILmRlZmF1bHQsc2hvd0RlYnVnOiExLGFsbFBhdGNoZXM6W10scGx1Z2luUHJvcDoic3BlY01hcCIsbGliTWV0aG9kczooMCx5LmRlZmF1bHQpKCgwLGIuZGVmYXVsdCkodGhpcyksai5kZWZhdWx0KSxhbGxvd01ldGFQYXRjaGVzOiExfSx0KSx0aGlzLmdldD10aGlzLl9nZXQuYmluZCh0aGlzKSx0aGlzLmdldENvbnRleHQ9dGhpcy5fZ2V0Q29udGV4dC5iaW5kKHRoaXMpLHRoaXMuaGFzUnVuPXRoaXMuX2hhc1J1bi5iaW5kKHRoaXMpLHRoaXMud3JhcHBlZFBsdWdpbnM9dGhpcy5wbHVnaW5zLm1hcCh0aGlzLndyYXBQbHVnaW4uYmluZCh0aGlzKSkuZmlsdGVyKGouZGVmYXVsdC5pc0Z1bmN0aW9uKSx0aGlzLnBhdGNoZXMucHVzaChqLmRlZmF1bHQuYWRkKFtdLHRoaXMuc3BlYykpLHRoaXMucGF0Y2hlcy5wdXNoKGouZGVmYXVsdC5jb250ZXh0KFtdLHRoaXMuY29udGV4dCkpLHRoaXMudXBkYXRlUGF0Y2hlcyh0aGlzLnBhdGNoZXMpfXJldHVybigwLEMuZGVmYXVsdCkoZSxbe2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZGVidWdMZXZlbD09PWUpe2Zvcih2YXIgdCxuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107KHQ9Y29uc29sZSkubG9nLmFwcGx5KHQscil9fX0se2tleToidmVyYm9zZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoInZlcmJvc2UiPT09dGhpcy5kZWJ1Z0xldmVsKXtmb3IodmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dOyh0PWNvbnNvbGUpLmxvZy5hcHBseSh0LFsiWyIrZSsiXSAgICJdLmNvbmNhdChyKSl9fX0se2tleToid3JhcFBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnBhdGhEaXNjcmltaW5hdG9yLHI9bnVsbCxvPXZvaWQgMDtyZXR1cm4gZVt0aGlzLnBsdWdpblByb3BdPyhyPWUsbz1lW3RoaXMucGx1Z2luUHJvcF0pOmouZGVmYXVsdC5pc0Z1bmN0aW9uKGUpP289ZTpqLmRlZmF1bHQuaXNPYmplY3QoZSkmJihvPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fGUuZXZlcnkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbbl19KX07cmV0dXJuIF8uZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIHIobyxzKXt2YXIgaSxhLGwsdSxjLGQscCxtLGc7cmV0dXJuIF8uZGVmYXVsdC53cmFwKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmc9ZnVuY3Rpb24gcihvLGwsdSl7dmFyIGMsZCxwLG0sZyxiLEUseSx2LFQsQSxDLE8sUyxSLHg7cmV0dXJuIF8uZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGkpe2Zvcig7Oylzd2l0Y2goaS5wcmV2PWkubmV4dCl7Y2FzZSAwOmlmKGouZGVmYXVsdC5pc09iamVjdChvKSl7aS5uZXh0PTY7YnJlYWt9aWYoZS5rZXkhPT1sW2wubGVuZ3RoLTFdKXtpLm5leHQ9NDticmVha31yZXR1cm4gaS5uZXh0PTQsZS5wbHVnaW4obyxlLmtleSxsLHMpO2Nhc2UgNDppLm5leHQ9NDg7YnJlYWs7Y2FzZSA2OmM9bC5sZW5ndGgtMSxkPWxbY10scD1sLmluZGV4T2YoInByb3BlcnRpZXMiKSxtPSJwcm9wZXJ0aWVzIj09PWQmJmM9PT1wLGc9cy5hbGxvd01ldGFQYXRjaGVzJiZhW28uJCRyZWZdLGI9ITAsRT0hMSx5PXZvaWQgMCxpLnByZXY9MTQsdj0oMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkobykpO2Nhc2UgMTY6aWYoYj0oVD12Lm5leHQoKSkuZG9uZSl7aS5uZXh0PTM0O2JyZWFrfWlmKEE9VC52YWx1ZSxDPW9bQV0sTz1sLmNvbmNhdChBKSxTPWouZGVmYXVsdC5pc09iamVjdChDKSxSPW8uJCRyZWYsZyl7aS5uZXh0PTI2O2JyZWFrfWlmKCFTKXtpLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHMuYWxsb3dNZXRhUGF0Y2hlcyYmUiYmKGFbUl09ITApLGkuZGVsZWdhdGVZaWVsZChyKEMsTyx1KSwidDAiLDI2KTtjYXNlIDI2OmlmKG18fEEhPT1lLmtleSl7aS5uZXh0PTMxO2JyZWFrfWlmKHg9dChuLGwpLG4mJiF4KXtpLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGkubmV4dD0zMSxlLnBsdWdpbihDLEEsTyxzLHUpO2Nhc2UgMzE6Yj0hMCxpLm5leHQ9MTY7YnJlYWs7Y2FzZSAzNDppLm5leHQ9NDA7YnJlYWs7Y2FzZSAzNjppLnByZXY9MzYsaS50MT1pLmNhdGNoKDE0KSxFPSEwLHk9aS50MTtjYXNlIDQwOmkucHJldj00MCxpLnByZXY9NDEsIWImJnYucmV0dXJuJiZ2LnJldHVybigpO2Nhc2UgNDM6aWYoaS5wcmV2PTQzLCFFKXtpLm5leHQ9NDY7YnJlYWt9dGhyb3cgeTtjYXNlIDQ2OnJldHVybiBpLmZpbmlzaCg0Myk7Y2FzZSA0NzpyZXR1cm4gaS5maW5pc2goNDApO2Nhc2UgNDg6Y2FzZSJlbmQiOnJldHVybiBpLnN0b3AoKX19LGksdGhpcyxbWzE0LDM2LDQwLDQ4XSxbNDEsLDQzLDQ3XV0pfSxpPV8uZGVmYXVsdC5tYXJrKGcpLGE9e30sbD0hMCx1PSExLGM9dm9pZCAwLHIucHJldj02LGQ9KDAsaC5kZWZhdWx0KShvLmZpbHRlcihqLmRlZmF1bHQuaXNBZGRpdGl2ZU11dGF0aW9uKSk7Y2FzZSA4OmlmKGw9KHA9ZC5uZXh0KCkpLmRvbmUpe3IubmV4dD0xNDticmVha31yZXR1cm4gbT1wLnZhbHVlLHIuZGVsZWdhdGVZaWVsZChnKG0udmFsdWUsbS5wYXRoLG0pLCJ0MCIsMTEpO2Nhc2UgMTE6bD0hMCxyLm5leHQ9ODticmVhaztjYXNlIDE0OnIubmV4dD0yMDticmVhaztjYXNlIDE2OnIucHJldj0xNixyLnQxPXIuY2F0Y2goNiksdT0hMCxjPXIudDE7Y2FzZSAyMDpyLnByZXY9MjAsci5wcmV2PTIxLCFsJiZkLnJldHVybiYmZC5yZXR1cm4oKTtjYXNlIDIzOmlmKHIucHJldj0yMywhdSl7ci5uZXh0PTI2O2JyZWFrfXRocm93IGM7Y2FzZSAyNjpyZXR1cm4gci5maW5pc2goMjMpO2Nhc2UgMjc6cmV0dXJuIHIuZmluaXNoKDIwKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSxyLHRoaXMsW1s2LDE2LDIwLDI4XSxbMjEsLDIzLDI3XV0pfSl9KGUpKSwoMCx5LmRlZmF1bHQpKG8uYmluZChyKSx7cGx1Z2luTmFtZTplLm5hbWV8fHQsaXNHZW5lcmF0b3I6ai5kZWZhdWx0LmlzR2VuZXJhdG9yKG8pfSl9fSx7a2V5OiJuZXh0UGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuKDAsUy5kZWZhdWx0KSh0aGlzLndyYXBwZWRQbHVnaW5zLGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldE11dGF0aW9uc0ZvclBsdWdpbih0KS5sZW5ndGg+MH0pfX0se2tleToibmV4dFByb21pc2VkUGF0Y2giLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5wcm9taXNlZFBhdGNoZXMubGVuZ3RoPjApcmV0dXJuIGMuZGVmYXVsdC5yYWNlKHRoaXMucHJvbWlzZWRQYXRjaGVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pKX19LHtrZXk6ImdldFBsdWdpbkhpc3RvcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0UGx1Z2luTmFtZShlKTtyZXR1cm4gdGhpcy5wbHVnaW5IaXN0b3J5W3RdfHxbXX19LHtrZXk6ImdldFBsdWdpblJ1bkNvdW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQbHVnaW5IaXN0b3J5KGUpLmxlbmd0aH19LHtrZXk6ImdldFBsdWdpbkhpc3RvcnlUaXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0UGx1Z2luSGlzdG9yeShlKTtyZXR1cm4gdCYmdFt0Lmxlbmd0aC0xXXx8e319fSx7a2V5OiJnZXRQbHVnaW5NdXRhdGlvbkluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFBsdWdpbkhpc3RvcnlUaXAoZSkubXV0YXRpb25JbmRleDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQ/LTE6dH19LHtrZXk6ImdldFBsdWdpbk5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBsdWdpbk5hbWV9fSx7a2V5OiJ1cGRhdGVQbHVnaW5IaXN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0UGx1Z2luTmFtZShlKTsodGhpcy5wbHVnaW5IaXN0b3J5W25dPXRoaXMucGx1Z2luSGlzdG9yeVtuXXx8W10pLnB1c2godCl9fSx7a2V5OiJ1cGRhdGVQYXRjaGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ai5kZWZhdWx0Lm5vcm1hbGl6ZUFycmF5KGUpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiB2b2lkIG4uZXJyb3JzLnB1c2goZSk7dHJ5e2lmKCFqLmRlZmF1bHQuaXNPYmplY3QoZSkpcmV0dXJuIHZvaWQgbi5kZWJ1ZygidXBkYXRlUGF0Y2hlcyIsIkdvdCBhIG5vbi1vYmplY3QgcGF0Y2giLGUpO2lmKG4uc2hvd0RlYnVnJiZuLmFsbFBhdGNoZXMucHVzaChlKSxqLmRlZmF1bHQuaXNQcm9taXNlKGUudmFsdWUpKXJldHVybiBuLnByb21pc2VkUGF0Y2hlcy5wdXNoKGUpLHZvaWQgbi5wcm9taXNlZFBhdGNoVGhlbihlKTtpZihqLmRlZmF1bHQuaXNDb250ZXh0UGF0Y2goZSkpcmV0dXJuIHZvaWQgbi5zZXRDb250ZXh0KGUucGF0aCxlLnZhbHVlKTtpZihqLmRlZmF1bHQuaXNNdXRhdGlvbihlKSlyZXR1cm4gdm9pZCBuLnVwZGF0ZU11dGF0aW9ucyhlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpLG4uZXJyb3JzLnB1c2goZSl9fSl9fSx7a2V5OiJ1cGRhdGVNdXRhdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpeyJvYmplY3QiPT09KDAsbC5kZWZhdWx0KShlLnZhbHVlKSYmIUFycmF5LmlzQXJyYXkoZS52YWx1ZSkmJnRoaXMuYWxsb3dNZXRhUGF0Y2hlcyYmKGUudmFsdWU9KDAseS5kZWZhdWx0KSh7fSxlLnZhbHVlKSk7dmFyIHQ9ai5kZWZhdWx0LmFwcGx5UGF0Y2godGhpcy5zdGF0ZSxlLHthbGxvd01ldGFQYXRjaGVzOnRoaXMuYWxsb3dNZXRhUGF0Y2hlc30pO3QmJih0aGlzLm11dGF0aW9ucy5wdXNoKGUpLHRoaXMuc3RhdGU9dCl9fSx7a2V5OiJyZW1vdmVQcm9taXNlZFBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb21pc2VkUGF0Y2hlcy5pbmRleE9mKGUpO2lmKHQ8MClyZXR1cm4gdm9pZCB0aGlzLmRlYnVnKCJUcmllZCB0byByZW1vdmUgYSBwcm9taXNlZFBhdGNoIHRoYXQgaXNuJ3QgdGhlcmUhIik7dGhpcy5wcm9taXNlZFBhdGNoZXMuc3BsaWNlKHQsMSl9fSx7a2V5OiJwcm9taXNlZFBhdGNoVGhlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZS52YWx1ZT1lLnZhbHVlLnRoZW4oZnVuY3Rpb24obil7dmFyIHI9KDAseS5kZWZhdWx0KSh7fSxlLHt2YWx1ZTpufSk7dC5yZW1vdmVQcm9taXNlZFBhdGNoKGUpLHQudXBkYXRlUGF0Y2hlcyhyKX0pLmNhdGNoKGZ1bmN0aW9uKG4pe3QucmVtb3ZlUHJvbWlzZWRQYXRjaChlKSx0LnVwZGF0ZVBhdGNoZXMobil9KX19LHtrZXk6ImdldE11dGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lfHwwLCJudW1iZXIiIT10eXBlb2YgdCYmKHQ9dGhpcy5tdXRhdGlvbnMubGVuZ3RoKSx0aGlzLm11dGF0aW9ucy5zbGljZShlLHQpfX0se2tleToiZ2V0Q3VycmVudE11dGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRNdXRhdGlvbnNGb3JQbHVnaW4odGhpcy5nZXRDdXJyZW50UGx1Z2luKCkpfX0se2tleToiZ2V0TXV0YXRpb25zRm9yUGx1Z2luIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFBsdWdpbk11dGF0aW9uSW5kZXgoZSk7cmV0dXJuIHRoaXMuZ2V0TXV0YXRpb25zKHQrMSl9fSx7a2V5OiJnZXRDdXJyZW50UGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRQbHVnaW59fSx7a2V5OiJnZXRQYXRjaGVzT2ZUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmZpbHRlcih0KX19LHtrZXk6ImdldExpYiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWJNZXRob2RzfX0se2tleToiX2dldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGouZGVmYXVsdC5nZXRJbih0aGlzLnN0YXRlLGUpfX0se2tleToiX2dldENvbnRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnRleHRUcmVlLmdldChlKX19LHtrZXk6InNldENvbnRleHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29udGV4dFRyZWUuc2V0KGUsdCl9fSx7a2V5OiJfaGFzUnVuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQbHVnaW5SdW5Db3VudCh0aGlzLmdldEN1cnJlbnRQbHVnaW4oKSk+KGV8fDApfX0se2tleToiX2Nsb25lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZSgoMCxpLmRlZmF1bHQpKGUpKX19LHtrZXk6ImRpc3BhdGNoIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZSYmKGU9ai5kZWZhdWx0LmZ1bGx5Tm9ybWFsaXplQXJyYXkoZSksbi51cGRhdGVQYXRjaGVzKGUscikpfXZhciB0PXRoaXMsbj10aGlzLHI9dGhpcy5uZXh0UGx1Z2luKCk7aWYoIXIpe3ZhciBvPXRoaXMubmV4dFByb21pc2VkUGF0Y2goKTtpZihvKXJldHVybiBvLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNwYXRjaCgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNwYXRjaCgpfSk7dmFyIHM9e3NwZWM6dGhpcy5zdGF0ZSxlcnJvcnM6dGhpcy5lcnJvcnN9O3JldHVybiB0aGlzLnNob3dEZWJ1ZyYmKHMucGF0Y2hlcz10aGlzLmFsbFBhdGNoZXMpLGMuZGVmYXVsdC5yZXNvbHZlKHMpfWlmKG4ucGx1Z2luQ291bnQ9bi5wbHVnaW5Db3VudHx8e30sbi5wbHVnaW5Db3VudFtyXT0obi5wbHVnaW5Db3VudFtyXXx8MCkrMSxuLnBsdWdpbkNvdW50W3JdPjEwMClyZXR1cm4gYy5kZWZhdWx0LnJlc29sdmUoe3NwZWM6bi5zdGF0ZSxlcnJvcnM6bi5lcnJvcnMuY29uY2F0KG5ldyBFcnJvcigiV2UndmUgcmVhY2hlZCBhIGhhcmQgbGltaXQgb2YgMTAwIHBsdWdpbiBydW5zIikpfSk7aWYociE9PXRoaXMuY3VycmVudFBsdWdpbiYmdGhpcy5wcm9taXNlZFBhdGNoZXMubGVuZ3RoKXt2YXIgaT10aGlzLnByb21pc2VkUGF0Y2hlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KTtyZXR1cm4gYy5kZWZhdWx0LmFsbChpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGVuKEZ1bmN0aW9uLEZ1bmN0aW9uKX0pKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGlzcGF0Y2goKX0pfXJldHVybiBmdW5jdGlvbigpe24uY3VycmVudFBsdWdpbj1yO3ZhciB0PW4uZ2V0Q3VycmVudE11dGF0aW9ucygpLG89bi5tdXRhdGlvbnMubGVuZ3RoLTE7dHJ5e2lmKHIuaXNHZW5lcmF0b3Ipe3ZhciBzPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbCx1PSgwLGguZGVmYXVsdCkocih0LG4uZ2V0TGliKCkpKTshKHM9KGw9dS5uZXh0KCkpLmRvbmUpO3M9ITApZShsLnZhbHVlKX1jYXRjaChlKXtpPSEwLGE9ZX1maW5hbGx5e3RyeXshcyYmdS5yZXR1cm4mJnUucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fX1lbHNlIGUocih0LG4uZ2V0TGliKCkpKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpLGUoWygwLHkuZGVmYXVsdCkoKDAsYi5kZWZhdWx0KSh0KSx7cGx1Z2luOnJ9KV0pfWZpbmFsbHl7bi51cGRhdGVQbHVnaW5IaXN0b3J5KHIse211dGF0aW9uSW5kZXg6b30pfXJldHVybiBuLmRpc3BhdGNoKCl9KCl9fV0pLGV9KCksQj17cmVmczpMLmRlZmF1bHQsYWxsT2Y6dy5kZWZhdWx0LHBhcmFtZXRlcnM6ay5kZWZhdWx0LHByb3BlcnRpZXM6UC5kZWZhdWx0fTt0LlNwZWNNYXA9Rix0LnBsdWdpbnM9Qn0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGUuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmQuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tcGF0Y2gvbGliL2R1cGxleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvZGVlcC1leHRlbmQvbGliL2RlZXAtZXh0ZW5kLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9vYmplY3QtYXNzaWduLWRlZXAvZGlzdC9vYmplY3RBc3NpZ25EZWVwLmpzIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlLHQpe2lmKCFVLnRlc3QoZSkpe2lmKCF0KXRocm93IG5ldyBHKCJUcmllZCB0byByZXNvbHZlIGEgcmVsYXRpdmUgVVJMLCB3aXRob3V0IGhhdmluZyBhIGJhc2VQYXRoLiBwYXRoOiAnIitlKyInIGJhc2VQYXRoOiAnIit0KyInIik7cmV0dXJuIEkuZGVmYXVsdC5yZXNvbHZlKHQsZSl9cmV0dXJuIGV9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXZvaWQgMDtyZXR1cm4gbj1lJiZlLnJlc3BvbnNlJiZlLnJlc3BvbnNlLmJvZHk/ZS5yZXNwb25zZS5ib2R5LmNvZGUrIiAiK2UucmVzcG9uc2UuYm9keS5tZXNzYWdlOmUubWVzc2FnZSxuZXcgRygiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlOiAiK24sdCxlKX1mdW5jdGlvbiBpKGUpe3JldHVybihlKyIiKS5zcGxpdCgiIyIpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj16W2VdO2lmKG4mJiFOLmRlZmF1bHQuaXNQcm9taXNlKG4pKXRyeXt2YXIgcj1kKHQsbik7cmV0dXJuKDAsai5kZWZhdWx0KShDLmRlZmF1bHQucmVzb2x2ZShyKSx7X192YWx1ZTpyfSl9Y2F0Y2goZSl7cmV0dXJuIEMuZGVmYXVsdC5yZWplY3QoZSl9cmV0dXJuIHUoZSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZCh0LGUpfSl9ZnVuY3Rpb24gbChlKXt2b2lkIDAhPT1lP2RlbGV0ZSB6W2VdOigwLFQuZGVmYXVsdCkoeikuZm9yRWFjaChmdW5jdGlvbihlKXtkZWxldGUgeltlXX0pfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9eltlXTtyZXR1cm4gdD9OLmRlZmF1bHQuaXNQcm9taXNlKHQpP3Q6Qy5kZWZhdWx0LnJlc29sdmUodCk6KHpbZV09WS5mZXRjaEpTT04oZSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geltlXT10LHR9KSx6W2VdKX1mdW5jdGlvbiBjKGUpe3JldHVybigwLHguZmV0Y2gpKGUse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veWFtbCJ9LGxvYWRTcGVjOiEwfSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0KCl9KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBELmRlZmF1bHQuc2FmZUxvYWQoZSl9KX1mdW5jdGlvbiBkKGUsdCl7dmFyIG49XyhlKTtpZihuLmxlbmd0aDwxKXJldHVybiB0O3ZhciByPU4uZGVmYXVsdC5nZXRJbih0LG4pO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEcoIkNvdWxkIG5vdCByZXNvbHZlIHBvaW50ZXI6ICIrZSsiIGRvZXMgbm90IGV4aXN0IGluIGRvY3VtZW50Iix7cG9pbnRlcjplfSk7cmV0dXJuIHJ9ZnVuY3Rpb24gXyhlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmcsIGdvdCBhICIrKHZvaWQgMD09PWU/InVuZGVmaW5lZCI6KDAseS5kZWZhdWx0KShlKSkpO3JldHVybiIvIj09PWVbMF0mJihlPWUuc3Vic3RyKDEpKSwiIj09PWU/W106ZS5zcGxpdCgiLyIpLm1hcChwKX1mdW5jdGlvbiBwKGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOk0uZGVmYXVsdC51bmVzY2FwZShlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+IikpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIE0uZGVmYXVsdC5lc2NhcGUoZS5yZXBsYWNlKC9+L2csIn4wIikucmVwbGFjZSgvXC8vZywifjEiKSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4gMD09PWUubGVuZ3RoPyIiOiIvIitlLm1hcChmKS5qb2luKCIvIil9ZnVuY3Rpb24gaChlLHQpe2lmKHEodCkpcmV0dXJuITA7dmFyIG49ZS5jaGFyQXQodC5sZW5ndGgpLHI9dC5zbGljZSgtMSk7cmV0dXJuIDA9PT1lLmluZGV4T2YodCkmJighbnx8Ii8iPT09bnx8IiMiPT09bikmJiIjIiE9PXJ9ZnVuY3Rpb24gZyhlLHQsbixyKXt2YXIgbz1WLmdldChyKTtvfHwobz17fSxWLnNldChyLG8pKTt2YXIgcz1tKG4pLGk9KHR8fCI8c3BlY21hcC1iYXNlPiIpKyIjIitlO2lmKHQ9PXIuY29udGV4dFRyZWUuZ2V0KFtdKS5iYXNlRG9jJiZoKHMsZSkpcmV0dXJuITA7dmFyIGE9IiI7aWYobi5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBhPWErIi8iK2YoZSksb1thXSYmb1thXS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBoKGUsaSl8fGgoaSxlKX0pfSkpcmV0dXJuITA7b1tzXT0ob1tzXXx8W10pLmNvbmNhdChpKX1mdW5jdGlvbiBiKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gTi5kZWZhdWx0LmlzT2JqZWN0KGUpJiYoci5pbmRleE9mKGUpPj0wfHwoMCxULmRlZmF1bHQpKGUpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG4oZVt0XSl9KSl9dmFyIHI9W2VdO3JldHVybiB0LnBhdGgucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIucHVzaChlW3RdKSxlW3RdfSxlKSxuKHQudmFsdWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRT1uKDEpLHk9cihFKSx2PW4oMCksVD1yKHYpLEE9bigxNyksQz1yKEEpLE89big0MCksUz1yKE8pLFI9bigyKSxqPXIoUikseD1uKDQxKSxMPW4oMTUpLEQ9cihMKSx3PW4oNDIpLE09cih3KSxrPW4oMTApLEk9cihrKSxQPW4oOSksTj1yKFApLEg9bigyMSksRj1yKEgpLEI9bigyMiksVT1uZXcgUmVnRXhwKCJeKFthLXpdKzovL3wvLykiLCJpIiksRz0oMCxGLmRlZmF1bHQpKCJKU09OUmVmRXJyb3IiLGZ1bmN0aW9uKGUsdCxuKXt0aGlzLm9yaWdpbmFsRXJyb3I9biwoMCxqLmRlZmF1bHQpKHRoaXMsdHx8e30pfSksej17fSxWPW5ldyBTLmRlZmF1bHQsVz17a2V5OiIkcmVmIixwbHVnaW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGw9bi5zbGljZSgwLC0xKTtpZighKDAsQi5pc0ZyZWVseU5hbWVkKShsKSl7dmFyIHU9ci5nZXRDb250ZXh0KG4pLmJhc2VEb2M7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBuZXcgRygiJHJlZjogbXVzdCBiZSBhIHN0cmluZyAoSlNPTi1SZWYpIix7JHJlZjplLGJhc2VEb2M6dSxmdWxsUGF0aDpufSk7dmFyIGM9aShlKSxkPWNbMF0scD1jWzFdfHwiIixmPXZvaWQgMDt0cnl7Zj11fHxkP28oZCx1KTpudWxsfWNhdGNoKHQpe3JldHVybiBzKHQse3BvaW50ZXI6cCwkcmVmOmUsYmFzZVBhdGg6ZixmdWxsUGF0aDpufSl9dmFyIG09dm9pZCAwLGg9dm9pZCAwO2lmKCFnKHAsZixsLHIpKXtpZihudWxsPT1mPyhoPV8ocCksdm9pZCAwPT09KG09ci5nZXQoaCkpJiYobT1uZXcgRygiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlOiAiK2Use3BvaW50ZXI6cCwkcmVmOmUsYmFzZURvYzp1LGZ1bGxQYXRoOm59KSkpOihtPWEoZixwKSxtPW51bGwhPW0uX192YWx1ZT9tLl9fdmFsdWU6bS5jYXRjaChmdW5jdGlvbih0KXt0aHJvdyBzKHQse3BvaW50ZXI6cCwkcmVmOmUsYmFzZURvYzp1LGZ1bGxQYXRoOm59KX0pKSxtIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuW04uZGVmYXVsdC5yZW1vdmUobiksbV07dmFyIEU9Ti5kZWZhdWx0LnJlcGxhY2UobCxtLHskJHJlZjplfSk7aWYoZiYmZiE9PXUpcmV0dXJuW0UsTi5kZWZhdWx0LmNvbnRleHQobCx7YmFzZURvYzpmfSldO3RyeXtpZighYihyLnN0YXRlLEUpKXJldHVybiBFfWNhdGNoKGUpe3JldHVybiBudWxsfX19fX0sWT0oMCxqLmRlZmF1bHQpKFcse2RvY0NhY2hlOnosYWJzb2x1dGVpZnk6byxjbGVhckNhY2hlOmwsSlNPTlJlZkVycm9yOkcsd3JhcEVycm9yOnMsZ2V0RG9jOnUsc3BsaXQ6aSxleHRyYWN0RnJvbURvYzphLGZldGNoSlNPTjpjLGV4dHJhY3Q6ZCxqc29uUG9pbnRlclRvQXJyYXk6Xyx1bmVzY2FwZUpzb25Qb2ludGVyVG9rZW46cH0pO3QuZGVmYXVsdD1ZO3ZhciBxPWZ1bmN0aW9uKGUpe3JldHVybiFlfHwiLyI9PT1lfHwiIyI9PT1lfTtlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvd2Vhay1tYXAuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY3Jvc3MtZmV0Y2gvZGlzdC9mZXRjaC1icm93c2VyLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWJyb3dzZXIvcXVlcnlzdHJpbmcuanMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKDIyKTt0LmRlZmF1bHQ9e2tleToiYWxsT2YiLHBsdWdpbjpmdW5jdGlvbihlLHQsbixyLGkpe2lmKCFpLm1ldGF8fCFpLm1ldGEuJCRyZWYpe3ZhciBhPW4uc2xpY2UoMCwtMSk7aWYoISgwLHMuaXNGcmVlbHlOYW1lZCkoYSkpe2lmKCFBcnJheS5pc0FycmF5KGUpKXt2YXIgbD1uZXcgVHlwZUVycm9yKCJhbGxPZiBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuIGwuZnVsbFBhdGg9bixsfXZhciB1PSExLGM9aS52YWx1ZTthLmZvckVhY2goZnVuY3Rpb24oZSl7YyYmKGM9Y1tlXSl9KSxjPSgwLG8uZGVmYXVsdCkoe30sYyksZGVsZXRlIGMuYWxsT2Y7dmFyIGQ9W3IucmVwbGFjZShhLHt9KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUsdCl7aWYoIXIuaXNPYmplY3QoZSkpe2lmKHUpcmV0dXJuIG51bGw7dT0hMDt2YXIgbz1uZXcgVHlwZUVycm9yKCJFbGVtZW50cyBpbiBhbGxPZiBtdXN0IGJlIG9iamVjdHMiKTtyZXR1cm4gby5mdWxsUGF0aD1uLG99cmV0dXJuIHIubWVyZ2VEZWVwKGEsZSl9KSk7cmV0dXJuIGQucHVzaChyLm1lcmdlRGVlcChhLGMpKSxjLiQkcmVmfHxkLnB1c2goci5yZW1vdmUoW10uY29uY2F0KGEsIiQkcmVmIikpKSxkfX19fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDIpLHM9cihvKSxpPW4oOSksYT1yKGkpO3QuZGVmYXVsdD17a2V5OiJwYXJhbWV0ZXJzIixwbHVnaW46ZnVuY3Rpb24oZSx0LG4scixvKXtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCl7dmFyIGk9KDAscy5kZWZhdWx0KShbXSxlKSxsPW4uc2xpY2UoMCwtMSksdT0oMCxzLmRlZmF1bHQpKHt9LGEuZGVmYXVsdC5nZXRJbihyLnNwZWMsbCkpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0cnl7aVt0XS5kZWZhdWx0PXIucGFyYW1ldGVyTWFjcm8odSxlKX1jYXRjaChlKXt2YXIgbz1uZXcgRXJyb3IoZSk7cmV0dXJuIG8uZnVsbFBhdGg9bixvfX0pLGEuZGVmYXVsdC5yZXBsYWNlKG4saSl9cmV0dXJuIGEuZGVmYXVsdC5yZXBsYWNlKG4sZSl9fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDIpLHM9cihvKSxpPW4oOSksYT1yKGkpO3QuZGVmYXVsdD17a2V5OiJwcm9wZXJ0aWVzIixwbHVnaW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89KDAscy5kZWZhdWx0KSh7fSxlKTtmb3IodmFyIGkgaW4gZSl0cnl7b1tpXS5kZWZhdWx0PXIubW9kZWxQcm9wZXJ0eU1hY3JvKG9baV0pfWNhdGNoKGUpe3ZhciBsPW5ldyBFcnJvcihlKTtyZXR1cm4gbC5mdWxsUGF0aD1uLGx9cmV0dXJuIGEuZGVmYXVsdC5yZXBsYWNlKG4sbyl9fSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gcyh7Y2hpbGRyZW46e319LGUsdCl9ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIGUudmFsdWU9dHx8e30sZS5wcm90b1ZhbHVlPW4/KDAsdS5kZWZhdWx0KSh7fSxuLnByb3RvVmFsdWUsZS52YWx1ZSk6ZS52YWx1ZSwoMCxhLmRlZmF1bHQpKGUuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5jaGlsZHJlblt0XTtlLmNoaWxkcmVuW3RdPXMobixuLnZhbHVlLGUpfSksZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigwKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oMTkpLGQ9cihjKSxfPW4oMjApLHA9cihfKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXsoMCxkLmRlZmF1bHQpKHRoaXMsZSksdGhpcy5yb290PW8odHx8e30pfXJldHVybigwLHAuZGVmYXVsdCkoZSxbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0UGFyZW50KGUsITApO2lmKCFuKXJldHVybiB2b2lkIHModGhpcy5yb290LHQsbnVsbCk7dmFyIHI9ZVtlLmxlbmd0aC0xXSxpPW4uY2hpbGRyZW47aWYoaVtyXSlyZXR1cm4gdm9pZCBzKGlbcl0sdCxuKTtpW3JdPW8odCxuKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZT1lfHxbXSxlLmxlbmd0aDwxKXJldHVybiB0aGlzLnJvb3QudmFsdWU7Zm9yKHZhciB0PXRoaXMucm9vdCxuPXZvaWQgMCxyPXZvaWQgMCxvPTA7bzxlLmxlbmd0aCYmKHI9ZVtvXSxuPXQuY2hpbGRyZW4sbltyXSk7bysrKXQ9bltyXTtyZXR1cm4gdCYmdC5wcm90b1ZhbHVlfX0se2tleToiZ2V0UGFyZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiFlfHxlLmxlbmd0aDwxP251bGw6ZS5sZW5ndGg8Mj90aGlzLnJvb3Q6ZS5zbGljZSgwLC0xKS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtpZighZSlyZXR1cm4gZTt2YXIgcj1lLmNoaWxkcmVuO3JldHVybiFyW25dJiZ0JiYocltuXT1vKG51bGwsZSkpLHJbbl19LHRoaXMucm9vdCl9fV0pLGV9KCk7dC5kZWZhdWx0PWYsZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigzKSxhPXIoaSksbD1uKDExKSx1PXIobCksYz1uKDEyKSxkPXIoYyksXz1uKDE2KSxwPXIoXyksZj1uKDUpO3QuZGVmYXVsdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHQ9KDAsdS5kZWZhdWx0KShzLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKHQsbil7dmFyIHIsbyxpLGwsdSxjLF8sbSxoLGcsYj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHMuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiByPWIucmV0dXJuRW50aXJlVHJlZSxvPWIuYmFzZURvYyxpPWIucmVxdWVzdEludGVyY2VwdG9yLGw9Yi5yZXNwb25zZUludGVyY2VwdG9yLHU9Yi5wYXJhbWV0ZXJNYWNybyxjPWIubW9kZWxQcm9wZXJ0eU1hY3JvLF89e3BhdGhEaXNjcmltaW5hdG9yOm4sYmFzZURvYzpvLHJlcXVlc3RJbnRlcmNlcHRvcjppLHJlc3BvbnNlSW50ZXJjZXB0b3I6bCxwYXJhbWV0ZXJNYWNybzp1LG1vZGVsUHJvcGVydHlNYWNybzpjfSxtPSgwLGYubm9ybWFsaXplU3dhZ2dlcikoe3NwZWM6dH0pLGg9bS5zcGVjLGUubmV4dD01LCgwLHAuZGVmYXVsdCkoKDAsYS5kZWZhdWx0KSh7fSxfLHtzcGVjOmgsYWxsb3dNZXRhUGF0Y2hlczohMCxza2lwTm9ybWFsaXphdGlvbjohMH0pKTtjYXNlIDU6cmV0dXJuIGc9ZS5zZW50LCFyJiZBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aCYmKGcuc3BlYz0oMCxkLmRlZmF1bHQpKGcuc3BlYyxuKXx8bnVsbCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxlLHRoaXMpfSkpO3JldHVybiBlfSgpLGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5wYXRoTmFtZSxyPXQubWV0aG9kLG89dC5vcGVyYXRpb25JZDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiBlLmV4ZWN1dGUoKDAsdS5kZWZhdWx0KSh7c3BlYzplLnNwZWN9LCgwLGQuZGVmYXVsdCkoZSwicmVxdWVzdEludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInVzZXJGZXRjaCIpLHtwYXRoTmFtZTpuLG1ldGhvZDpyLHBhcmFtZXRlcnM6dCxvcGVyYXRpb25JZDpvfSxzKSl9fX1mdW5jdGlvbiBzKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9bS5tYWtlRXhlY3V0ZShlKSxuPW0ubWFwVGFnT3BlcmF0aW9ucyh7djJPcGVyYXRpb25JZENvbXBhdGliaWxpdHlNb2RlOmUudjJPcGVyYXRpb25JZENvbXBhdGliaWxpdHlNb2RlLHNwZWM6ZS5zcGVjLGNiOnR9KSxyPXt9O2Zvcih2YXIgbyBpbiBuKXtyW29dPXtvcGVyYXRpb25zOnt9fTtmb3IodmFyIHMgaW4gbltvXSlyW29dLm9wZXJhdGlvbnNbc109e2V4ZWN1dGU6bltvXVtzXX19cmV0dXJue2FwaXM6cn19ZnVuY3Rpb24gaSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PW0ubWFrZUV4ZWN1dGUoZSk7cmV0dXJue2FwaXM6bS5tYXBUYWdPcGVyYXRpb25zKHt2Mk9wZXJhdGlvbklkQ29tcGF0aWJpbGl0eU1vZGU6ZS52Mk9wZXJhdGlvbklkQ29tcGF0aWJpbGl0eU1vZGUsc3BlYzplLnNwZWMsY2I6dH0pfX1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuc3BlYyxuPWUuY2Iscj12b2lkIDA9PT1uP3A6bixvPWUuZGVmYXVsdFRhZyxzPXZvaWQgMD09PW8/ImRlZmF1bHQiOm8saT1lLnYyT3BlcmF0aW9uSWRDb21wYXRpYmlsaXR5TW9kZSxhPXt9LGw9e307cmV0dXJuKDAsXy5lYWNoT3BlcmF0aW9uKSh0LGZ1bmN0aW9uKGUpe3ZhciBuPWUucGF0aE5hbWUsbz1lLm1ldGhvZCx1PWUub3BlcmF0aW9uOyh1LnRhZ3M/Zih1LnRhZ3MpOltzXSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBzPWxbZV09bFtlXXx8e30sYz0oMCxfLm9wSWQpKHUsbixvLHt2Mk9wZXJhdGlvbklkQ29tcGF0aWJpbGl0eU1vZGU6aX0pLGQ9cih7c3BlYzp0LHBhdGhOYW1lOm4sbWV0aG9kOm8sb3BlcmF0aW9uOnUsb3BlcmF0aW9uSWQ6Y30pO2lmKGFbY10pYVtjXSsrLHNbIiIrYythW2NdXT1kO2Vsc2UgaWYodm9pZCAwIT09c1tjXSl7dmFyIHA9YVtjXXx8MTthW2NdPXArMSxzWyIiK2MrYVtjXV09ZDt2YXIgZj1zW2NdO2RlbGV0ZSBzW2NdLHNbIiIrYytwXT1mfWVsc2Ugc1tjXT1kfX0pfSksbH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zZWxmPXZvaWQgMDt2YXIgbD1uKDMpLHU9cihsKTt0Lm1ha2VFeGVjdXRlPW8sdC5tYWtlQXBpc1RhZ09wZXJhdGlvbnNPcGVyYXRpb25FeGVjdXRlPXMsdC5tYWtlQXBpc1RhZ09wZXJhdGlvbj1pLHQubWFwVGFnT3BlcmF0aW9ucz1hO3ZhciBjPW4oNTApLGQ9cihjKSxfPW4oNSkscD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfSxtPXQuc2VsZj17bWFwVGFnT3BlcmF0aW9uczphLG1ha2VFeGVjdXRlOm99fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvcGljay5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5odHRwLG49ZS5mZXRjaCxyPWUuc3BlYyxvPWUub3BlcmF0aW9uSWQscz1lLnBhdGhOYW1lLGk9ZS5tZXRob2QsYT1lLnBhcmFtZXRlcnMsbD1lLnNlY3VyaXRpZXMsdT0oMCxoLmRlZmF1bHQpKGUsWyJodHRwIiwiZmV0Y2giLCJzcGVjIiwib3BlcmF0aW9uSWQiLCJwYXRoTmFtZSIsIm1ldGhvZCIsInBhcmFtZXRlcnMiLCJzZWN1cml0aWVzIl0pLGM9dHx8bnx8ay5kZWZhdWx0O3MmJmkmJiFvJiYobz0oMCxXLmxlZ2FjeUlkRnJvbVBhdGhNZXRob2QpKHMsaSkpO3ZhciBkPSQuYnVpbGRSZXF1ZXN0KCgwLGYuZGVmYXVsdCkoe3NwZWM6cixvcGVyYXRpb25JZDpvLHBhcmFtZXRlcnM6YSxzZWN1cml0aWVzOmwsaHR0cDpjfSx1KSk7cmV0dXJuIGQuYm9keSYmKCgwLE8uZGVmYXVsdCkoZC5ib2R5KXx8KDAsUi5kZWZhdWx0KShkLmJvZHkpKSYmKGQuYm9keT0oMCxfLmRlZmF1bHQpKGQuYm9keSkpLGMoZCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnNwZWMsbj1lLm9wZXJhdGlvbklkLHI9KGUuc2VjdXJpdGllcyxlLnJlcXVlc3RDb250ZW50VHlwZSxlLnJlc3BvbnNlQ29udGVudFR5cGUpLG89ZS5zY2hlbWUscz1lLnJlcXVlc3RJbnRlcmNlcHRvcixhPWUucmVzcG9uc2VJbnRlcmNlcHRvcixsPWUuY29udGV4dFVybCx1PWUudXNlckZldGNoLGM9KGUucmVxdWVzdEJvZHksZS5zZXJ2ZXIpLGQ9ZS5zZXJ2ZXJWYXJpYWJsZXMsXz1lLmh0dHAscD1lLnBhcmFtZXRlcnMsbT1lLnBhcmFtZXRlckJ1aWxkZXJzLGg9KDAsVy5pc09BUzMpKHQpO218fChtPWg/Qi5kZWZhdWx0OkguZGVmYXVsdCk7dmFyIGc9XyYmXy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiIsRT17dXJsOiIiLGNyZWRlbnRpYWxzOmcsaGVhZGVyczp7fSxjb29raWVzOnt9fTtzJiYoRS5yZXF1ZXN0SW50ZXJjZXB0b3I9cyksYSYmKEUucmVzcG9uc2VJbnRlcmNlcHRvcj1hKSx1JiYoRS51c2VyRmV0Y2g9dSk7dmFyIHk9KDAsVy5nZXRPcGVyYXRpb25SYXcpKHQsbik7aWYoIXkpdGhyb3cgbmV3IHEoIk9wZXJhdGlvbiAiK24rIiBub3QgZm91bmQiKTt2YXIgdj15Lm9wZXJhdGlvbixUPXZvaWQgMD09PXY/e306dixBPXkubWV0aG9kLEM9eS5wYXRoTmFtZTtpZihFLnVybCs9aSh7c3BlYzp0LHNjaGVtZTpvLGNvbnRleHRVcmw6bCxzZXJ2ZXI6YyxzZXJ2ZXJWYXJpYWJsZXM6ZCxwYXRoTmFtZTpDLG1ldGhvZDpBfSksIW4pcmV0dXJuIGRlbGV0ZSBFLmNvb2tpZXMsRTtFLnVybCs9QyxFLm1ldGhvZD0oIiIrQSkudG9VcHBlckNhc2UoKSxwPXB8fHt9O3ZhciBPPXQucGF0aHNbQ118fHt9O3ImJihFLmhlYWRlcnMuYWNjZXB0PXIpO3ZhciBTPVgoW10uY29uY2F0KFkoVC5wYXJhbWV0ZXJzKSkuY29uY2F0KFkoTy5wYXJhbWV0ZXJzKSkpO1MuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1tW2UuaW5dLHI9dm9pZCAwO2lmKCJib2R5Ij09PWUuaW4mJmUuc2NoZW1hJiZlLnNjaGVtYS5wcm9wZXJ0aWVzJiYocj1wKSxyPWUmJmUubmFtZSYmcFtlLm5hbWVdLHZvaWQgMD09PXI/cj1lJiZlLm5hbWUmJnBbZS5pbisiLiIrZS5uYW1lXTpLKGUubmFtZSxTKS5sZW5ndGg+MSYmY29uc29sZS53YXJuKCJQYXJhbWV0ZXIgJyIrZS5uYW1lKyInIGlzIGFtYmlndW91cyBiZWNhdXNlIHRoZSBkZWZpbmVkIHNwZWMgaGFzIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWU6ICciK2UubmFtZSsiJyBhbmQgdGhlIHBhc3NlZC1pbiBwYXJhbWV0ZXIgdmFsdWVzIGRpZCBub3QgZGVmaW5lIGFuICdpbicgdmFsdWUuIiksbnVsbCE9PXIpe2lmKHZvaWQgMCE9PWUuZGVmYXVsdCYmdm9pZCAwPT09ciYmKHI9ZS5kZWZhdWx0KSx2b2lkIDA9PT1yJiZlLnJlcXVpcmVkJiYhZS5hbGxvd0VtcHR5VmFsdWUpdGhyb3cgbmV3IEVycm9yKCJSZXF1aXJlZCBwYXJhbWV0ZXIgIitlLm5hbWUrIiBpcyBub3QgcHJvdmlkZWQiKTtpZihoJiZlLnNjaGVtYSYmIm9iamVjdCI9PT1lLnNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIHIpdHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgcGFyYW1ldGVyIHZhbHVlIHN0cmluZyBhcyBKU09OIil9biYmbih7cmVxOkUscGFyYW1ldGVyOmUsdmFsdWU6cixvcGVyYXRpb246VCxzcGVjOnR9KX19KTt2YXIgUj0oMCxmLmRlZmF1bHQpKHt9LGUse29wZXJhdGlvbjpUfSk7aWYoRT1oPygwLEcuZGVmYXVsdCkoUixFKTooMCxWLmRlZmF1bHQpKFIsRSksRS5jb29raWVzJiYoMCxiLmRlZmF1bHQpKEUuY29va2llcykubGVuZ3RoKXt2YXIgaj0oMCxiLmRlZmF1bHQpKEUuY29va2llcykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49RS5jb29raWVzW3RdO3JldHVybiBlKyhlPyImIjoiIikrdy5kZWZhdWx0LnNlcmlhbGl6ZSh0LG4pfSwiIik7RS5oZWFkZXJzLkNvb2tpZT1qfXJldHVybiBFLmNvb2tpZXMmJmRlbGV0ZSBFLmNvb2tpZXMsKDAsTS5tZXJnZUluUXVlcnlPckZvcm0pKEUpLEV9ZnVuY3Rpb24gaShlKXtyZXR1cm4oMCxXLmlzT0FTMykoZS5zcGVjKT9hKGUpOmMoZSl9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnNwZWMsbj1lLnBhdGhOYW1lLHI9ZS5tZXRob2Qsbz1lLnNlcnZlcixzPWUuY29udGV4dFVybCxpPWUuc2VydmVyVmFyaWFibGVzLGE9dm9pZCAwPT09aT97fTppLGM9KDAsQS5kZWZhdWx0KSh0LFsicGF0aHMiLG4sKHJ8fCIiKS50b0xvd2VyQ2FzZSgpLCJzZXJ2ZXJzIl0pfHwoMCxBLmRlZmF1bHQpKHQsWyJwYXRocyIsbiwic2VydmVycyJdKXx8KDAsQS5kZWZhdWx0KSh0LFsic2VydmVycyJdKSxkPSIiLF89bnVsbDtpZihvJiZjJiZjLmxlbmd0aCl7dmFyIHA9Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudXJsfSk7cC5pbmRleE9mKG8pPi0xJiYoZD1vLF89Y1twLmluZGV4T2YobyldKX1yZXR1cm4hZCYmYyYmYy5sZW5ndGgmJihkPWNbMF0udXJsLF89Y1swXSksZC5pbmRleE9mKCJ7Iik+LTEmJnUoZCkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihfLnZhcmlhYmxlcyYmXy52YXJpYWJsZXNbZV0pe3ZhciB0PV8udmFyaWFibGVzW2VdLG49YVtlXXx8dC5kZWZhdWx0LHI9bmV3IFJlZ0V4cCgieyIrZSsifSIsImciKTtkPWQucmVwbGFjZShyLG4pfX0pLGwoZCxzKX1mdW5jdGlvbiBsKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLG49TC5kZWZhdWx0LnBhcnNlKGUpLHI9TC5kZWZhdWx0LnBhcnNlKHQpLG89UShuLnByb3RvY29sKXx8UShyLnByb3RvY29sKXx8IiIscz1uLmhvc3R8fHIuaG9zdCxpPW4ucGF0aG5hbWV8fCIiLGE9dm9pZCAwO3JldHVybiBhPW8mJnM/bysiOi8vIisocytpKTppLCIvIj09PWFbYS5sZW5ndGgtMV0/YS5zbGljZSgwLC0xKTphfWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PVtdLG49L3soW159XSspfS9nLHI9dm9pZCAwO3I9bi5leGVjKGUpOyl0LnB1c2goclsxXSk7cmV0dXJuIHR9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLnNwZWMsbj1lLnNjaGVtZSxyPWUuY29udGV4dFVybCxvPXZvaWQgMD09PXI/IiI6cixzPUwuZGVmYXVsdC5wYXJzZShvKSxpPUFycmF5LmlzQXJyYXkodC5zY2hlbWVzKT90LnNjaGVtZXNbMF06bnVsbCxhPW58fGl8fFEocy5wcm90b2NvbCl8fCJodHRwIixsPXQuaG9zdHx8cy5ob3N0fHwiIix1PXQuYmFzZVBhdGh8fCIiLGM9dm9pZCAwO3JldHVybiBjPWEmJmw/YSsiOi8vIisobCt1KTp1LCIvIj09PWNbYy5sZW5ndGgtMV0/Yy5zbGljZSgwLC0xKTpjfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNlbGY9dm9pZCAwO3ZhciBkPW4oOCksXz1yKGQpLHA9bigzKSxmPXIocCksbT1uKDUyKSxoPXIobSksZz1uKDApLGI9cihnKSxFPW4oMikseT1yKEUpO3QuZXhlY3V0ZT1vLHQuYnVpbGRSZXF1ZXN0PXMsdC5iYXNlVXJsPWk7dmFyIHY9big2KSxUPShyKHYpLG4oMTIpKSxBPXIoVCksQz1uKDUzKSxPPXIoQyksUz1uKDU0KSxSPXIoUyksaj1uKDEzKSx4PShyKGopLG4oMTApKSxMPXIoeCksRD1uKDU1KSx3PXIoRCksTT1uKDcpLGs9cihNKSxJPW4oMjEpLFA9cihJKSxOPW4oNTYpLEg9cihOKSxGPW4oNTcpLEI9cihGKSxVPW4oNjIpLEc9cihVKSx6PW4oNjQpLFY9cih6KSxXPW4oNSksWT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOltdfSxxPSgwLFAuZGVmYXVsdCkoIk9wZXJhdGlvbk5vdEZvdW5kRXJyb3IiLGZ1bmN0aW9uKGUsdCxuKXt0aGlzLm9yaWdpbmFsRXJyb3I9biwoMCx5LmRlZmF1bHQpKHRoaXMsdHx8e30pfSksSz1mdW5jdGlvbihlLHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pfSxYPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2UuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UuaW5dfHwodFtlLmluXT17fSksdFtlLmluXVtlLm5hbWVdPWV9KTt2YXIgbj1bXTtyZXR1cm4oMCxiLmRlZmF1bHQpKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7KDAsYi5kZWZhdWx0KSh0W2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe24ucHVzaCh0W2VdW3JdKX0pfSksbn0sJD10LnNlbGY9e2J1aWxkUmVxdWVzdDpzfSxRPWZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvXFcvZywiIik6bnVsbH19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUucmVxLG49ZS52YWx1ZTt0LmJvZHk9bn1mdW5jdGlvbiBvKGUpe3ZhciB0PWUucmVxLG49ZS52YWx1ZSxyPWUucGFyYW1ldGVyOyhufHxyLmFsbG93RW1wdHlWYWx1ZSkmJih0LmZvcm09dC5mb3JtfHx7fSx0LmZvcm1bci5uYW1lXT17dmFsdWU6bixhbGxvd0VtcHR5VmFsdWU6ci5hbGxvd0VtcHR5VmFsdWUsY29sbGVjdGlvbkZvcm1hdDpyLmNvbGxlY3Rpb25Gb3JtYXR9KX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUucmVxLG49ZS5wYXJhbWV0ZXIscj1lLnZhbHVlO3QuaGVhZGVycz10LmhlYWRlcnN8fHt9LHZvaWQgMCE9PXImJih0LmhlYWRlcnNbbi5uYW1lXT1yKX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUucmVxLG49ZS52YWx1ZSxyPWUucGFyYW1ldGVyO3QudXJsPXQudXJsLnNwbGl0KCJ7IityLm5hbWUrIn0iKS5qb2luKGVuY29kZVVSSUNvbXBvbmVudChuKSl9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnJlcSxuPWUudmFsdWUscj1lLnBhcmFtZXRlcjtpZih0LnF1ZXJ5PXQucXVlcnl8fHt9LCExPT09biYmImJvb2xlYW4iPT09ci50eXBlJiYobj0iZmFsc2UiKSwwPT09biYmWyJudW1iZXIiLCJpbnRlZ2VyIl0uaW5kZXhPZihyLnR5cGUpPi0xJiYobj0iMCIpLG4pdC5xdWVyeVtyLm5hbWVdPXtjb2xsZWN0aW9uRm9ybWF0OnIuY29sbGVjdGlvbkZvcm1hdCx2YWx1ZTpufTtlbHNlIGlmKHIuYWxsb3dFbXB0eVZhbHVlJiZ2b2lkIDAhPT1uKXt2YXIgbz1yLm5hbWU7dC5xdWVyeVtvXT10LnF1ZXJ5W29dfHx7fSx0LnF1ZXJ5W29dLmFsbG93RW1wdHlWYWx1ZT0hMH19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD17Ym9keTpyLGhlYWRlcjpzLHF1ZXJ5OmEscGF0aDppLGZvcm1EYXRhOm99LGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLnJlcSxuPWUudmFsdWUscj1lLnBhcmFtZXRlcixvPXIubmFtZSxzPXIuc3R5bGUsaT1yLmV4cGxvZGUsYT0oMCxwLmRlZmF1bHQpKHtrZXk6ci5uYW1lLHZhbHVlOm4sc3R5bGU6c3x8InNpbXBsZSIsZXhwbG9kZTppfHwhMSxlc2NhcGU6ITB9KTt0LnVybD10LnVybC5zcGxpdCgieyIrbysifSIpLmpvaW4oYSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnJlcSxuPWUudmFsdWUscj1lLnBhcmFtZXRlcjtpZih0LnF1ZXJ5PXQucXVlcnl8fHt9LCExPT09biYmKG49ImZhbHNlIiksMD09PW4mJihuPSIwIiksbil7dmFyIG89dm9pZCAwPT09bj8idW5kZWZpbmVkIjooMCxkLmRlZmF1bHQpKG4pO2lmKCJkZWVwT2JqZWN0Ij09PXIuc3R5bGUpKDAsdS5kZWZhdWx0KShuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPW5bZV07dC5xdWVyeVtyLm5hbWUrIlsiK2UrIl0iXT17dmFsdWU6KDAscC5kZWZhdWx0KSh7a2V5OmUsdmFsdWU6byxzdHlsZToiZGVlcE9iamVjdCIsZXNjYXBlOnIuYWxsb3dSZXNlcnZlZD8idW5zYWZlIjoicmVzZXJ2ZWQifSksc2tpcEVuY29kaW5nOiEwfX0pO2Vsc2UgaWYoIm9iamVjdCIhPT1vfHxBcnJheS5pc0FycmF5KG4pfHwiZm9ybSIhPT1yLnN0eWxlJiZyLnN0eWxlfHwhci5leHBsb2RlJiZ2b2lkIDAhPT1yLmV4cGxvZGUpdC5xdWVyeVtyLm5hbWVdPXt2YWx1ZTooMCxwLmRlZmF1bHQpKHtrZXk6ci5uYW1lLHZhbHVlOm4sc3R5bGU6ci5zdHlsZXx8ImZvcm0iLGV4cGxvZGU6dm9pZCAwPT09ci5leHBsb2RlfHxyLmV4cGxvZGUsZXNjYXBlOnIuYWxsb3dSZXNlcnZlZD8idW5zYWZlIjoicmVzZXJ2ZWQifSksc2tpcEVuY29kaW5nOiEwfTtlbHNle3ZhciBzPSgwLHUuZGVmYXVsdCkobik7cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPW5bZV07dC5xdWVyeVtlXT17dmFsdWU6KDAscC5kZWZhdWx0KSh7a2V5OmUsdmFsdWU6byxzdHlsZTpyLnN0eWxlfHwiZm9ybSIsZXNjYXBlOnIuYWxsb3dSZXNlcnZlZD8idW5zYWZlIjoicmVzZXJ2ZWQifSksc2tpcEVuY29kaW5nOiEwfX0pfX1lbHNlIGlmKHIuYWxsb3dFbXB0eVZhbHVlJiZ2b2lkIDAhPT1uKXt2YXIgaT1yLm5hbWU7dC5xdWVyeVtpXT10LnF1ZXJ5W2ldfHx7fSx0LnF1ZXJ5W2ldLmFsbG93RW1wdHlWYWx1ZT0hMH19ZnVuY3Rpb24gaShlKXt2YXIgdD1lLnJlcSxuPWUucGFyYW1ldGVyLHI9ZS52YWx1ZTt0LmhlYWRlcnM9dC5oZWFkZXJzfHx7fSxmLmluZGV4T2Yobi5uYW1lLnRvTG93ZXJDYXNlKCkpPi0xfHx2b2lkIDAhPT1yJiYodC5oZWFkZXJzW24ubmFtZV09KDAscC5kZWZhdWx0KSh7a2V5Om4ubmFtZSx2YWx1ZTpyLHN0eWxlOm4uc3R5bGV8fCJzaW1wbGUiLGV4cGxvZGU6dm9pZCAwIT09bi5leHBsb2RlJiZuLmV4cGxvZGUsZXNjYXBlOiExfSkpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5yZXEsbj1lLnBhcmFtZXRlcixyPWUudmFsdWU7dC5oZWFkZXJzPXQuaGVhZGVyc3x8e307dmFyIG89dm9pZCAwPT09cj8idW5kZWZpbmVkIjooMCxkLmRlZmF1bHQpKHIpO2lmKCJ1bmRlZmluZWQiIT09byl7dmFyIHM9Im9iamVjdCI9PT1vJiYhQXJyYXkuaXNBcnJheShyKSYmbi5leHBsb2RlPyIiOm4ubmFtZSsiPSI7dC5oZWFkZXJzLkNvb2tpZT1zKygwLHAuZGVmYXVsdCkoe2tleTpuLm5hbWUsdmFsdWU6cixlc2NhcGU6ITEsc3R5bGU6bi5zdHlsZXx8ImZvcm0iLGV4cGxvZGU6dm9pZCAwIT09bi5leHBsb2RlJiZuLmV4cGxvZGV9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsPW4oMCksdT1yKGwpLGM9bigxKSxkPXIoYyksXz1uKDU4KSxwPXIoXyk7dC5kZWZhdWx0PXtwYXRoOm8scXVlcnk6cyxoZWFkZXI6aSxjb29raWU6YX07dmFyIGY9WyJhY2NlcHQiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC10eXBlIl07ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQuZXNjYXBlLHI9YXJndW1lbnRzWzJdO3JldHVybiJudW1iZXIiPT10eXBlb2YgZSYmKGU9ZS50b1N0cmluZygpKSwic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoJiZuP3I/SlNPTi5wYXJzZShlKTooMCxtLnN0cmluZ1RvQ2hhckFycmF5KShlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSk/ZTpoKGUpJiYidW5zYWZlIj09PW4/ZTooKDAsZi5kZWZhdWx0KShlKXx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oIjAiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkpLnNsaWNlKC0yKX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iJSIrZX0pLmpvaW4oIiIpfSkuam9pbigiIik6ZX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUua2V5LG49ZS52YWx1ZSxyPWUuc3R5bGUscz1lLmV4cGxvZGUsaT1lLmVzY2FwZSxhPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUse2VzY2FwZTppfSl9O2lmKCJzaW1wbGUiPT09cilyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KS5qb2luKCIsIik7aWYoImxhYmVsIj09PXIpcmV0dXJuIi4iK24ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkuam9pbigiLiIpO2lmKCJtYXRyaXgiPT09cilyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4hZXx8cz8oZXx8IiIpKyI7Iit0KyI9IituOmUrIiwiK259LCIiKTtpZigiZm9ybSI9PT1yKXt2YXIgbD1zPyImIit0KyI9IjoiLCI7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkuam9pbihsKX1pZigic3BhY2VEZWxpbWl0ZWQiPT09cil7dmFyIHU9cz90KyI9IjoiIjtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KS5qb2luKCIgIit1KX1pZigicGlwZURlbGltaXRlZCI9PT1yKXt2YXIgYz1zP3QrIj0iOiIiO3JldHVybiBuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0pLmpvaW4oInwiK2MpfX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUua2V5LG49ZS52YWx1ZSxyPWUuc3R5bGUscz1lLmV4cGxvZGUsaT1lLmVzY2FwZSxhPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUse2VzY2FwZTppfSl9LGw9KDAsdS5kZWZhdWx0KShuKTtyZXR1cm4ic2ltcGxlIj09PXI/bC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1hKG5bdF0pLG89cz8iPSI6IiwiO3JldHVybihlP2UrIiwiOiIiKSt0K28rcn0sIiIpOiJsYWJlbCI9PT1yP2wucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIHI9YShuW3RdKSxvPXM/Ij0iOiIuIjtyZXR1cm4oZT9lKyIuIjoiLiIpK3QrbytyfSwiIik6Im1hdHJpeCI9PT1yJiZzP2wucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIHI9YShuW3RdKTtyZXR1cm4oZT9lKyI7IjoiOyIpK3QrIj0iK3J9LCIiKToibWF0cml4Ij09PXI/bC5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbz1hKG5bcl0pO3JldHVybihlP2UrIiwiOiI7Iit0KyI9IikrcisiLCIrb30sIiIpOiJmb3JtIj09PXI/bC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1hKG5bdF0pO3JldHVybihlP2UrKHM/IiYiOiIsIik6IiIpK3QrKHM/Ij0iOiIsIikrcn0sIiIpOnZvaWQgMH1mdW5jdGlvbiBhKGUpe3ZhciB0PWUua2V5LG49ZS52YWx1ZSxyPWUuc3R5bGUscz1lLmVzY2FwZSxpPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUse2VzY2FwZTpzfSl9O3JldHVybiJzaW1wbGUiPT09cj9pKG4pOiJsYWJlbCI9PT1yPyIuIitpKG4pOiJtYXRyaXgiPT09cj8iOyIrdCsiPSIraShuKToiZm9ybSI9PT1yP2kobik6ImRlZXBPYmplY3QiPT09cj9pKG4pOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGw9bigwKSx1PXIobCksYz1uKDEpLGQ9cihjKTt0LmVuY29kZURpc2FsbG93ZWRDaGFyYWN0ZXJzPW8sdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/cyhlKToib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOigwLGQuZGVmYXVsdCkodCkpP2koZSk6YShlKX07dmFyIF89big1OSkscD0ocihfKSxuKDYwKSksZj1yKHApLG09big2MSksaD1mdW5jdGlvbihlKXtyZXR1cm4iOi8/I1tdQCEkJicoKSorLDs9Ii5pbmRleE9mKGUpPi0xfSxnPWZ1bmN0aW9uKGUpe3JldHVybi9eW2EtejAtOVwtLl9+XSskL2kudGVzdChlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2VuY29kZS0zOTg2L2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3V0ZjgtYnl0ZXMvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvdXRmc3RyaW5nL3V0ZnN0cmluZy5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5yZXF1ZXN0LG49ZS5zZWN1cml0aWVzLHI9dm9pZCAwPT09bj97fTpuLG89ZS5vcGVyYXRpb24scz12b2lkIDA9PT1vP3t9Om8saT1lLnNwZWMsYT0oMCxfLmRlZmF1bHQpKHt9LHQpLGw9ci5hdXRob3JpemVkLHU9dm9pZCAwPT09bD97fTpsLGQ9cy5zZWN1cml0eXx8aS5zZWN1cml0eXx8W10scD11JiYhISgwLGMuZGVmYXVsdCkodSkubGVuZ3RoLG09KDAsZi5kZWZhdWx0KShpLFsiY29tcG9uZW50cyIsInNlY3VyaXR5U2NoZW1lcyJdKXx8e307cmV0dXJuIGEuaGVhZGVycz1hLmhlYWRlcnN8fHt9LGEucXVlcnk9YS5xdWVyeXx8e30sKDAsYy5kZWZhdWx0KShyKS5sZW5ndGgmJnAmJmQmJighQXJyYXkuaXNBcnJheShzLnNlY3VyaXR5KXx8cy5zZWN1cml0eS5sZW5ndGgpPyhkLmZvckVhY2goZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSl7dmFyIHI9dVtuXSxvPW1bbl07aWYocil7dmFyIHM9ci52YWx1ZXx8cixpPW8udHlwZTtpZihyKWlmKCJhcGlLZXkiPT09aSkicXVlcnkiPT09by5pbiYmKGEucXVlcnlbby5uYW1lXT1zKSwiaGVhZGVyIj09PW8uaW4mJihhLmhlYWRlcnNbby5uYW1lXT1zKSwiY29va2llIj09PW8uaW4mJihhLmNvb2tpZXNbby5uYW1lXT1zKTtlbHNlIGlmKCJodHRwIj09PWkpe2lmKCJiYXNpYyI9PT1vLnNjaGVtZSl7dmFyIGw9cy51c2VybmFtZSxjPXMucGFzc3dvcmQsZD0oMCxoLmRlZmF1bHQpKGwrIjoiK2MpO2EuaGVhZGVycy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2R9ImJlYXJlciI9PT1vLnNjaGVtZSYmKGEuaGVhZGVycy5BdXRob3JpemF0aW9uPSJCZWFyZXIgIitzKX1lbHNlIGlmKCJvYXV0aDIiPT09aSl7dmFyIF89ci50b2tlbnx8e30scD1fLmFjY2Vzc190b2tlbixmPV8udG9rZW5fdHlwZTtmJiYiYmVhcmVyIiE9PWYudG9Mb3dlckNhc2UoKXx8KGY9IkJlYXJlciIpLGEuaGVhZGVycy5BdXRob3JpemF0aW9uPWYrIiAiK3B9fX19KSxhKTp0fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1uKDgpLGk9cihzKSxhPW4oMSksbD1yKGEpLHU9bigwKSxjPXIodSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5vcGVyYXRpb24scj1lLnJlcXVlc3RCb2R5LHM9ZS5zZWN1cml0aWVzLGE9ZS5zcGVjLHU9ZS5hdHRhY2hDb250ZW50VHlwZUZvckVtcHR5UGF5bG9hZCxkPWUucmVxdWVzdENvbnRlbnRUeXBlO3Q9byh7cmVxdWVzdDp0LHNlY3VyaXRpZXM6cyxvcGVyYXRpb246bixzcGVjOmF9KTt2YXIgXz1uLnJlcXVlc3RCb2R5fHx7fSxwPSgwLGMuZGVmYXVsdCkoXy5jb250ZW50fHx7fSksZj1kJiZwLmluZGV4T2YoZCk+LTE7aWYocnx8dSl7aWYoZCYmZil0LmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdPWQ7ZWxzZSBpZighZCl7dmFyIG09cFswXTttJiYodC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT1tLGQ9bSl9fWVsc2UgZCYmZiYmKHQuaGVhZGVyc1siQ29udGVudC1UeXBlIl09ZCk7cmV0dXJuIHImJihkP3AuaW5kZXhPZihkKT4tMSYmKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiPT09ZHx8MD09PWQuaW5kZXhPZigibXVsdGlwYXJ0LyIpPyJvYmplY3QiPT09KHZvaWQgMD09PXI/InVuZGVmaW5lZCI6KDAsbC5kZWZhdWx0KShyKSk/KHQuZm9ybT17fSwoMCxjLmRlZmF1bHQpKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXSxvPXZvaWQgMCxzPXZvaWQgMDsidW5kZWZpbmVkIiE9dHlwZW9mIEZpbGUmJihzPW4gaW5zdGFuY2VvZiBGaWxlKSwidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJihzPXN8fG4gaW5zdGFuY2VvZiBCbG9iKSx2b2lkIDAhPT1nLkJ1ZmZlciYmKHM9c3x8Zy5CdWZmZXIuaXNCdWZmZXIobikpLG89Im9iamVjdCIhPT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjooMCxsLmRlZmF1bHQpKG4pKXx8cz9uOkFycmF5LmlzQXJyYXkobik/bi50b1N0cmluZygpOigwLGkuZGVmYXVsdCkobiksdC5mb3JtW2VdPXt2YWx1ZTpvfX0pKTp0LmZvcm09cjp0LmJvZHk9cik6dC5ib2R5PXIpLHR9LHQuYXBwbHlTZWN1cml0aWVzPW87dmFyIGQ9big2KSxfPXIoZCkscD1uKDEyKSxmPXIocCksbT1uKDEzKSxoPXIobSksZz1uKDYzKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5yZXF1ZXN0LG49ZS5zZWN1cml0aWVzLHI9dm9pZCAwPT09bj97fTpuLG89ZS5vcGVyYXRpb24scz12b2lkIDA9PT1vP3t9Om8sYT1lLnNwZWMsdT0oMCxjLmRlZmF1bHQpKHt9LHQpLGQ9ci5hdXRob3JpemVkLF89dm9pZCAwPT09ZD97fTpkLHA9ci5zcGVjU2VjdXJpdHksZj12b2lkIDA9PT1wP1tdOnAsbT1zLnNlY3VyaXR5fHxmLGg9XyYmISEoMCxpLmRlZmF1bHQpKF8pLmxlbmd0aCxnPWEuc2VjdXJpdHlEZWZpbml0aW9ucztyZXR1cm4gdS5oZWFkZXJzPXUuaGVhZGVyc3x8e30sdS5xdWVyeT11LnF1ZXJ5fHx7fSwoMCxpLmRlZmF1bHQpKHIpLmxlbmd0aCYmaCYmbSYmKCFBcnJheS5pc0FycmF5KHMuc2VjdXJpdHkpfHxzLnNlY3VyaXR5Lmxlbmd0aCk/KG0uZm9yRWFjaChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKXt2YXIgcj1fW25dO2lmKHIpe3ZhciBvPXIudG9rZW4scz1yLnZhbHVlfHxyLGk9Z1tuXSxhPWkudHlwZSxjPWlbIngtdG9rZW5OYW1lIl18fCJhY2Nlc3NfdG9rZW4iLGQ9byYmb1tjXSxwPW8mJm8udG9rZW5fdHlwZTtpZihyKWlmKCJhcGlLZXkiPT09YSl7dmFyIGY9InF1ZXJ5Ij09PWkuaW4/InF1ZXJ5IjoiaGVhZGVycyI7dVtmXT11W2ZdfHx7fSx1W2ZdW2kubmFtZV09c31lbHNlImJhc2ljIj09PWE/cy5oZWFkZXI/dS5oZWFkZXJzLmF1dGhvcml6YXRpb249cy5oZWFkZXI6KHMuYmFzZTY0PSgwLGwuZGVmYXVsdCkocy51c2VybmFtZSsiOiIrcy5wYXNzd29yZCksdS5oZWFkZXJzLmF1dGhvcml6YXRpb249IkJhc2ljICIrcy5iYXNlNjQpOiJvYXV0aDIiPT09YSYmZCYmKHA9cCYmImJlYXJlciIhPT1wLnRvTG93ZXJDYXNlKCk/cDoiQmVhcmVyIix1LmhlYWRlcnMuYXV0aG9yaXphdGlvbj1wKyIgIitkKX19fSksdSk6dH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9bigwKSxpPXIocyk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zcGVjLHI9ZS5vcGVyYXRpb24scz1lLnNlY3VyaXRpZXMsaT1lLnJlcXVlc3RDb250ZW50VHlwZSxhPWUuYXR0YWNoQ29udGVudFR5cGVGb3JFbXB0eVBheWxvYWQ7aWYodD1vKHtyZXF1ZXN0OnQsc2VjdXJpdGllczpzLG9wZXJhdGlvbjpyLHNwZWM6bn0pLHQuYm9keXx8dC5mb3JtfHxhKWk/dC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT1pOkFycmF5LmlzQXJyYXkoci5jb25zdW1lcyk/dC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT1yLmNvbnN1bWVzWzBdOkFycmF5LmlzQXJyYXkobi5jb25zdW1lcyk/dC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT1uLmNvbnN1bWVzWzBdOnIucGFyYW1ldGVycyYmci5wYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iZmlsZSI9PT1lLnR5cGV9KS5sZW5ndGg/dC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6ci5wYXJhbWV0ZXJzJiZyLnBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtRGF0YSI9PT1lLmlufSkubGVuZ3RoJiYodC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7ZWxzZSBpZihpKXt2YXIgbD1yLnBhcmFtZXRlcnMmJnIucGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuImJvZHkiPT09ZS5pbn0pLmxlbmd0aD4wLHU9ci5wYXJhbWV0ZXJzJiZyLnBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtRGF0YSI9PT1lLmlufSkubGVuZ3RoPjA7KGx8fHUpJiYodC5oZWFkZXJzWyJDb250ZW50LVR5cGUiXT1pKX1yZXR1cm4gdH0sdC5hcHBseVNlY3VyaXRpZXM9bzt2YXIgYT1uKDEzKSxsPXIoYSksdT1uKDYpLGM9cih1KTtyKG4oNykpfV0pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiAiK2UrIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2xvYWRlci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2R1bXBlci5qcyIpO2UuZXhwb3J0cy5UeXBlPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksZS5leHBvcnRzLlNjaGVtYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIiksZS5leHBvcnRzLkZBSUxTQUZFX1NDSEVNQT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzIiksZS5leHBvcnRzLkpTT05fU0NIRU1BPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIpLGUuZXhwb3J0cy5DT1JFX1NDSEVNQT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMiKSxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIpLGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIiksZS5leHBvcnRzLmxvYWQ9by5sb2FkLGUuZXhwb3J0cy5sb2FkQWxsPW8ubG9hZEFsbCxlLmV4cG9ydHMuc2FmZUxvYWQ9by5zYWZlTG9hZCxlLmV4cG9ydHMuc2FmZUxvYWRBbGw9by5zYWZlTG9hZEFsbCxlLmV4cG9ydHMuZHVtcD1zLmR1bXAsZS5leHBvcnRzLnNhZmVEdW1wPXMuc2FmZUR1bXAsZS5leHBvcnRzLllBTUxFeGNlcHRpb249bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIpLGUuZXhwb3J0cy5NSU5JTUFMX1NDSEVNQT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzIiksZS5leHBvcnRzLlNBRkVfU0NIRU1BPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIiksZS5leHBvcnRzLkRFRkFVTFRfU0NIRU1BPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIiksZS5leHBvcnRzLnNjYW49cigic2NhbiIpLGUuZXhwb3J0cy5wYXJzZT1yKCJwYXJzZSIpLGUuZXhwb3J0cy5jb21wb3NlPXIoImNvbXBvc2UiKSxlLmV4cG9ydHMuYWRkQ29uc3RydWN0b3I9cigiYWRkQ29uc3RydWN0b3IiKX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpyKGUpP1tdOltlXX1mdW5jdGlvbiBpKGUsdCl7dmFyIG4scixvLHM7aWYodClmb3Iocz1PYmplY3Qua2V5cyh0KSxuPTAscj1zLmxlbmd0aDtuPHI7bis9MSlvPXNbbl0sZVtvXT10W29dO3JldHVybiBlfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbixyPSIiO2ZvcihuPTA7bjx0O24rPTEpcis9ZTtyZXR1cm4gcn1mdW5jdGlvbiBsKGUpe3JldHVybiAwPT09ZSYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS9lfWUuZXhwb3J0cy5pc05vdGhpbmc9cixlLmV4cG9ydHMuaXNPYmplY3Q9byxlLmV4cG9ydHMudG9BcnJheT1zLGUuZXhwb3J0cy5yZXBlYXQ9YSxlLmV4cG9ydHMuaXNOZWdhdGl2ZVplcm89bCxlLmV4cG9ydHMuZXh0ZW5kPWl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvZHVtcGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbixyLG8scyxpLGEsbDtpZihudWxsPT09dClyZXR1cm57fTtmb3Iobj17fSxyPU9iamVjdC5rZXlzKHQpLG89MCxzPXIubGVuZ3RoO288cztvKz0xKWk9cltvXSxhPVN0cmluZyh0W2ldKSwiISEiPT09aS5zbGljZSgwLDIpJiYoaT0idGFnOnlhbWwub3JnLDIwMDI6IitpLnNsaWNlKDIpKSxsPWUuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW2ldLGwmJlAuY2FsbChsLnN0eWxlQWxpYXNlcyxhKSYmKGE9bC5zdHlsZUFsaWFzZXNbYV0pLG5baV09YTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scjtpZih0PWUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksZTw9MjU1KW49IngiLHI9MjtlbHNlIGlmKGU8PTY1NTM1KW49InUiLHI9NDtlbHNle2lmKCEoZTw9NDI5NDk2NzI5NSkpdGhyb3cgbmV3IHcoImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTtuPSJVIixyPTh9cmV0dXJuIlxcIituK0QucmVwZWF0KCIwIixyLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIHMoZSl7dGhpcy5zY2hlbWE9ZS5zY2hlbWF8fE0sdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSxlLmluZGVudHx8MiksdGhpcy5za2lwSW52YWxpZD1lLnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1ELmlzTm90aGluZyhlLmZsb3dMZXZlbCk/LTE6ZS5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1yKHRoaXMuc2NoZW1hLGUuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPWUuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPWUubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz1lLm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9ZS5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PWUuY29uZGVuc2VGbG93fHwhMSx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbixyPUQucmVwZWF0KCIgIix0KSxvPTAscz0tMSxpPSIiLGE9ZS5sZW5ndGg7bzxhOylzPWUuaW5kZXhPZigiXG4iLG8pLC0xPT09cz8obj1lLnNsaWNlKG8pLG89YSk6KG49ZS5zbGljZShvLHMrMSksbz1zKzEpLG4ubGVuZ3RoJiYiXG4iIT09biYmKGkrPXIpLGkrPW47cmV0dXJuIGl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiJcbiIrRC5yZXBlYXQoIiAiLGUuaW5kZW50KnQpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbixyLG87Zm9yKG49MCxyPWUuaW1wbGljaXRUeXBlcy5sZW5ndGg7bjxyO24rPTEpaWYobz1lLmltcGxpY2l0VHlwZXNbbl0sby5yZXNvbHZlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU9PT1GfHxlPT09Tn1mdW5jdGlvbiBjKGUpe3JldHVybiAzMjw9ZSYmZTw9MTI2fHwxNjE8PWUmJmU8PTU1Mjk1JiY4MjMyIT09ZSYmODIzMyE9PWV8fDU3MzQ0PD1lJiZlPD02NTUzMyYmNjUyNzkhPT1lfHw2NTUzNjw9ZSYmZTw9MTExNDExMX1mdW5jdGlvbiBkKGUpe3JldHVybiBjKGUpJiY2NTI3OSE9PWUmJmUhPT1xJiZlIT09WiYmZSE9PWVlJiZlIT09bmUmJmUhPT1vZSYmZSE9PVgmJmUhPT1HfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGMoZSkmJjY1Mjc5IT09ZSYmIXUoZSkmJmUhPT1LJiZlIT09USYmZSE9PVgmJmUhPT1xJiZlIT09WiYmZSE9PWVlJiZlIT09bmUmJmUhPT1vZSYmZSE9PUcmJmUhPT1WJiZlIT09WSYmZSE9PUImJmUhPT1yZSYmZSE9PSQmJmUhPT1XJiZlIT09VSYmZSE9PXomJmUhPT1KJiZlIT09dGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4vXlxuKiAvLnRlc3QoZSl9ZnVuY3Rpb24gZihlLHQsbixyLG8pe3ZhciBzLGksYT0hMSxsPSExLGY9LTEhPT1yLG09LTEsaD1fKGUuY2hhckNvZGVBdCgwKSkmJiF1KGUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSk7aWYodClmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtpZihpPWUuY2hhckNvZGVBdChzKSwhYyhpKSlyZXR1cm4gZGU7aD1oJiZkKGkpfWVsc2V7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYoKGk9ZS5jaGFyQ29kZUF0KHMpKT09PUgpYT0hMCxmJiYobD1sfHxzLW0tMT5yJiYiICIhPT1lW20rMV0sbT1zKTtlbHNlIGlmKCFjKGkpKXJldHVybiBkZTtoPWgmJmQoaSl9bD1sfHxmJiZzLW0tMT5yJiYiICIhPT1lW20rMV19cmV0dXJuIGF8fGw/bj45JiZwKGUpP2RlOmw/Y2U6dWU6aCYmIW8oZSk/YWU6bGV9ZnVuY3Rpb24gbShlLHQsbixyKXtlLmR1bXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvKHQpe3JldHVybiBsKGUsdCl9aWYoMD09PXQubGVuZ3RoKXJldHVybiInJyI7aWYoIWUubm9Db21wYXRNb2RlJiYtMSE9PWllLmluZGV4T2YodCkpcmV0dXJuIiciK3QrIiciO3ZhciBzPWUuaW5kZW50Kk1hdGgubWF4KDEsbiksYT0tMT09PWUubGluZVdpZHRoPy0xOk1hdGgubWF4KE1hdGgubWluKGUubGluZVdpZHRoLDQwKSxlLmxpbmVXaWR0aC1zKSx1PXJ8fGUuZmxvd0xldmVsPi0xJiZuPj1lLmZsb3dMZXZlbDtzd2l0Y2goZih0LHUsZS5pbmRlbnQsYSxvKSl7Y2FzZSBhZTpyZXR1cm4gdDtjYXNlIGxlOnJldHVybiInIit0LnJlcGxhY2UoLycvZywiJyciKSsiJyI7Y2FzZSB1ZTpyZXR1cm4ifCIraCh0LGUuaW5kZW50KStnKGkodCxzKSk7Y2FzZSBjZTpyZXR1cm4iPiIraCh0LGUuaW5kZW50KStnKGkoYih0LGEpLHMpKTtjYXNlIGRlOnJldHVybiciJyt5KHQpKyciJztkZWZhdWx0OnRocm93IG5ldyB3KCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpfX0oKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cChlKT9TdHJpbmcodCk6IiIscj0iXG4iPT09ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbisoIXJ8fCJcbiIhPT1lW2UubGVuZ3RoLTJdJiYiXG4iIT09ZT9yPyIiOiItIjoiKyIpKyJcbiJ9ZnVuY3Rpb24gZyhlKXtyZXR1cm4iXG4iPT09ZVtlLmxlbmd0aC0xXT9lLnNsaWNlKDAsLTEpOmV9ZnVuY3Rpb24gYihlLHQpe2Zvcih2YXIgbixyLG89LyhcbispKFteXG5dKikvZyxzPWZ1bmN0aW9uKCl7dmFyIG49ZS5pbmRleE9mKCJcbiIpO3JldHVybiBuPS0xIT09bj9uOmUubGVuZ3RoLG8ubGFzdEluZGV4PW4sRShlLnNsaWNlKDAsbiksdCl9KCksaT0iXG4iPT09ZVswXXx8IiAiPT09ZVswXTtyPW8uZXhlYyhlKTspe3ZhciBhPXJbMV0sbD1yWzJdO249IiAiPT09bFswXSxzKz1hKyhpfHxufHwiIj09PWw/IiI6IlxuIikrRShsLHQpLGk9bn1yZXR1cm4gc31mdW5jdGlvbiBFKGUsdCl7aWYoIiI9PT1lfHwiICI9PT1lWzBdKXJldHVybiBlO2Zvcih2YXIgbixyLG89LyBbXiBdL2cscz0wLGk9MCxhPTAsbD0iIjtuPW8uZXhlYyhlKTspYT1uLmluZGV4LGEtcz50JiYocj1pPnM/aTphLGwrPSJcbiIrZS5zbGljZShzLHIpLHM9cisxKSxpPWE7cmV0dXJuIGwrPSJcbiIsZS5sZW5ndGgtcz50JiZpPnM/bCs9ZS5zbGljZShzLGkpKyJcbiIrZS5zbGljZShpKzEpOmwrPWUuc2xpY2UocyksbC5zbGljZSgxKX1mdW5jdGlvbiB5KGUpe2Zvcih2YXIgdCxuLHIscz0iIixpPTA7aTxlLmxlbmd0aDtpKyspdD1lLmNoYXJDb2RlQXQoaSksdD49NTUyOTYmJnQ8PTU2MzE5JiYobj1lLmNoYXJDb2RlQXQoaSsxKSk+PTU2MzIwJiZuPD01NzM0Mz8ocys9bygxMDI0Kih0LTU1Mjk2KStuLTU2MzIwKzY1NTM2KSxpKyspOihyPXNlW3RdLHMrPSFyJiZjKHQpP2VbaV06cnx8byh0KSk7cmV0dXJuIHN9ZnVuY3Rpb24gdihlLHQsbil7dmFyIHIsbyxzPSIiLGk9ZS50YWc7Zm9yKHI9MCxvPW4ubGVuZ3RoO3I8bztyKz0xKVMoZSx0LG5bcl0sITEsITEpJiYoMCE9PXImJihzKz0iLCIrKGUuY29uZGVuc2VGbG93PyIiOiIgIikpLHMrPWUuZHVtcCk7ZS50YWc9aSxlLmR1bXA9IlsiK3MrIl0ifWZ1bmN0aW9uIFQoZSx0LG4scil7dmFyIG8scyxpPSIiLGw9ZS50YWc7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKz0xKVMoZSx0KzEsbltvXSwhMCwhMCkmJihyJiYwPT09b3x8KGkrPWEoZSx0KSksZS5kdW1wJiZIPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/aSs9Ii0iOmkrPSItICIsaSs9ZS5kdW1wKTtlLnRhZz1sLGUuZHVtcD1pfHwiW10ifWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByLG8scyxpLGEsbD0iIix1PWUudGFnLGM9T2JqZWN0LmtleXMobik7Zm9yKHI9MCxvPWMubGVuZ3RoO3I8bztyKz0xKWE9ZS5jb25kZW5zZUZsb3c/JyInOiIiLDAhPT1yJiYoYSs9IiwgIikscz1jW3JdLGk9bltzXSxTKGUsdCxzLCExLCExKSYmKGUuZHVtcC5sZW5ndGg+MTAyNCYmKGErPSI/ICIpLGErPWUuZHVtcCsoZS5jb25kZW5zZUZsb3c/JyInOiIiKSsiOiIrKGUuY29uZGVuc2VGbG93PyIiOiIgIiksUyhlLHQsaSwhMSwhMSkmJihhKz1lLmR1bXAsbCs9YSkpO2UudGFnPXUsZS5kdW1wPSJ7IitsKyJ9In1mdW5jdGlvbiBDKGUsdCxuLHIpe3ZhciBvLHMsaSxsLHUsYyxkPSIiLF89ZS50YWcscD1PYmplY3Qua2V5cyhuKTtpZighMD09PWUuc29ydEtleXMpcC5zb3J0KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5zb3J0S2V5cylwLnNvcnQoZS5zb3J0S2V5cyk7ZWxzZSBpZihlLnNvcnRLZXlzKXRocm93IG5ldyB3KCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKG89MCxzPXAubGVuZ3RoO288cztvKz0xKWM9IiIsciYmMD09PW98fChjKz1hKGUsdCkpLGk9cFtvXSxsPW5baV0sUyhlLHQrMSxpLCEwLCEwLCEwKSYmKHU9bnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZ3x8ZS5kdW1wJiZlLmR1bXAubGVuZ3RoPjEwMjQsdSYmKGUuZHVtcCYmSD09PWUuZHVtcC5jaGFyQ29kZUF0KDApP2MrPSI/IjpjKz0iPyAiKSxjKz1lLmR1bXAsdSYmKGMrPWEoZSx0KSksUyhlLHQrMSxsLCEwLHUpJiYoZS5kdW1wJiZIPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/Yys9IjoiOmMrPSI6ICIsYys9ZS5kdW1wLGQrPWMpKTtlLnRhZz1fLGUuZHVtcD1kfHwie30ifWZ1bmN0aW9uIE8oZSx0LG4pe3ZhciByLG8scyxpLGEsbDtmb3Iobz1uP2UuZXhwbGljaXRUeXBlczplLmltcGxpY2l0VHlwZXMscz0wLGk9by5sZW5ndGg7czxpO3MrPTEpaWYoYT1vW3NdLChhLmluc3RhbmNlT2Z8fGEucHJlZGljYXRlKSYmKCFhLmluc3RhbmNlT2Z8fCJvYmplY3QiPT10eXBlb2YgdCYmdCBpbnN0YW5jZW9mIGEuaW5zdGFuY2VPZikmJighYS5wcmVkaWNhdGV8fGEucHJlZGljYXRlKHQpKSl7aWYoZS50YWc9bj9hLnRhZzoiPyIsYS5yZXByZXNlbnQpe2lmKGw9ZS5zdHlsZU1hcFthLnRhZ118fGEuZGVmYXVsdFN0eWxlLCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1JLmNhbGwoYS5yZXByZXNlbnQpKXI9YS5yZXByZXNlbnQodCxsKTtlbHNle2lmKCFQLmNhbGwoYS5yZXByZXNlbnQsbCkpdGhyb3cgbmV3IHcoIiE8IithLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrbCsnIiBzdHlsZScpO3I9YS5yZXByZXNlbnRbbF0odCxsKX1lLmR1bXA9cn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTKGUsdCxuLHIsbyxzKXtlLnRhZz1udWxsLGUuZHVtcD1uLE8oZSxuLCExKXx8TyhlLG4sITApO3ZhciBpPUkuY2FsbChlLmR1bXApO3ImJihyPWUuZmxvd0xldmVsPDB8fGUuZmxvd0xldmVsPnQpO3ZhciBhLGwsdT0iW29iamVjdCBPYmplY3RdIj09PWl8fCJbb2JqZWN0IEFycmF5XSI9PT1pO2lmKHUmJihhPWUuZHVwbGljYXRlcy5pbmRleE9mKG4pLGw9LTEhPT1hKSwobnVsbCE9PWUudGFnJiYiPyIhPT1lLnRhZ3x8bHx8MiE9PWUuaW5kZW50JiZ0PjApJiYobz0hMSksbCYmZS51c2VkRHVwbGljYXRlc1thXSllLmR1bXA9IipyZWZfIithO2Vsc2V7aWYodSYmbCYmIWUudXNlZER1cGxpY2F0ZXNbYV0mJihlLnVzZWREdXBsaWNhdGVzW2FdPSEwKSwiW29iamVjdCBPYmplY3RdIj09PWkpciYmMCE9PU9iamVjdC5rZXlzKGUuZHVtcCkubGVuZ3RoPyhDKGUsdCxlLmR1bXAsbyksbCYmKGUuZHVtcD0iJnJlZl8iK2ErZS5kdW1wKSk6KEEoZSx0LGUuZHVtcCksbCYmKGUuZHVtcD0iJnJlZl8iK2ErIiAiK2UuZHVtcCkpO2Vsc2UgaWYoIltvYmplY3QgQXJyYXldIj09PWkpciYmMCE9PWUuZHVtcC5sZW5ndGg/KFQoZSx0LGUuZHVtcCxvKSxsJiYoZS5kdW1wPSImcmVmXyIrYStlLmR1bXApKToodihlLHQsZS5kdW1wKSxsJiYoZS5kdW1wPSImcmVmXyIrYSsiICIrZS5kdW1wKSk7ZWxzZXtpZigiW29iamVjdCBTdHJpbmddIiE9PWkpe2lmKGUuc2tpcEludmFsaWQpcmV0dXJuITE7dGhyb3cgbmV3IHcoInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIraSl9Ij8iIT09ZS50YWcmJm0oZSxlLmR1bXAsdCxzKX1udWxsIT09ZS50YWcmJiI/IiE9PWUudGFnJiYoZS5kdW1wPSIhPCIrZS50YWcrIj4gIitlLmR1bXApfXJldHVybiEwfWZ1bmN0aW9uIFIoZSx0KXt2YXIgbixyLG89W10scz1bXTtmb3IoaihlLG8scyksbj0wLHI9cy5sZW5ndGg7bjxyO24rPTEpdC5kdXBsaWNhdGVzLnB1c2gob1tzW25dXSk7dC51c2VkRHVwbGljYXRlcz1uZXcgQXJyYXkocil9ZnVuY3Rpb24gaihlLHQsbil7dmFyIHIsbyxzO2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpaWYoLTEhPT0obz10LmluZGV4T2YoZSkpKS0xPT09bi5pbmRleE9mKG8pJiZuLnB1c2gobyk7ZWxzZSBpZih0LnB1c2goZSksQXJyYXkuaXNBcnJheShlKSlmb3Iobz0wLHM9ZS5sZW5ndGg7bzxzO28rPTEpaihlW29dLHQsbik7ZWxzZSBmb3Iocj1PYmplY3Qua2V5cyhlKSxvPTAscz1yLmxlbmd0aDtvPHM7bys9MSlqKGVbcltvXV0sdCxuKX1mdW5jdGlvbiB4KGUsdCl7dD10fHx7fTt2YXIgbj1uZXcgcyh0KTtyZXR1cm4gbi5ub1JlZnN8fFIoZSxuKSxTKG4sMCxlLCEwLCEwKT9uLmR1bXArIlxuIjoiIn1mdW5jdGlvbiBMKGUsdCl7cmV0dXJuIHgoZSxELmV4dGVuZCh7c2NoZW1hOmt9LHQpKX12YXIgRD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiKSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsUD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LE49OSxIPTEwLEY9MzIsQj0zMyxVPTM0LEc9MzUsej0zNyxWPTM4LFc9MzksWT00MixxPTQ0LEs9NDUsWD01OCwkPTYyLFE9NjMsSj02NCxaPTkxLGVlPTkzLHRlPTk2LG5lPTEyMyxyZT0xMjQsb2U9MTI1LHNlPXt9O3NlWzBdPSJcXDAiLHNlWzddPSJcXGEiLHNlWzhdPSJcXGIiLHNlWzldPSJcXHQiLHNlWzEwXT0iXFxuIixzZVsxMV09IlxcdiIsc2VbMTJdPSJcXGYiLHNlWzEzXT0iXFxyIixzZVsyN109IlxcZSIsc2VbMzRdPSdcXCInLHNlWzkyXT0iXFxcXCIsc2VbMTMzXT0iXFxOIixzZVsxNjBdPSJcXF8iLHNlWzgyMzJdPSJcXEwiLHNlWzgyMzNdPSJcXFAiO3ZhciBpZT1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXSxhZT0xLGxlPTIsdWU9MyxjZT00LGRlPTU7ZS5leHBvcnRzLmR1bXA9eCxlLmV4cG9ydHMuc2FmZUR1bXA9TH0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1lLHRoaXMubWFyaz10LHRoaXMubWVzc2FnZT0odGhpcy5yZWFzb258fCIodW5rbm93biByZWFzb24pIikrKHRoaXMubWFyaz8iICIrdGhpcy5tYXJrLnRvU3RyaW5nKCk6IiIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja3x8IiJ9ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uYW1lKyI6ICI7cmV0dXJuIHQrPXRoaXMucmVhc29ufHwiKHVua25vd24gcmVhc29uKSIsIWUmJnRoaXMubWFyayYmKHQrPSIgIit0aGlzLm1hcmsudG9TdHJpbmcoKSksdH0sZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIDk9PT1lfHwzMj09PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gOT09PWV8fDMyPT09ZXx8MTA9PT1lfHwxMz09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm4gNDQ9PT1lfHw5MT09PWV8fDkzPT09ZXx8MTIzPT09ZXx8MTI1PT09ZX1mdW5jdGlvbiBhKGUpe3ZhciB0O3JldHVybiA0ODw9ZSYmZTw9NTc/ZS00ODoodD0zMnxlLDk3PD10JiZ0PD0xMDI/dC05NysxMDotMSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gMTIwPT09ZT8yOjExNz09PWU/NDo4NT09PWU/ODowfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDQ4PD1lJiZlPD01Nz9lLTQ4Oi0xfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIDQ4PT09ZT8iXDAiOjk3PT09ZT8iByI6OTg9PT1lPyJcYiI6MTE2PT09ZT8iXHQiOjk9PT1lPyJcdCI6MTEwPT09ZT8iXG4iOjExOD09PWU/Ilx2IjoxMDI9PT1lPyJcZiI6MTE0PT09ZT8iXHIiOjEwMT09PWU/IhsiOjMyPT09ZT8iICI6MzQ9PT1lPyciJzo0Nz09PWU/Ii8iOjkyPT09ZT8iXFwiOjc4PT09ZT8iwoUiOjk1PT09ZT8iwqAiOjc2PT09ZT8iXHUyMDI4Ijo4MD09PWU/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShlKTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4xMCksNTYzMjArKGUtNjU1MzYmMTAyMykpfWZ1bmN0aW9uIF8oZSx0KXt0aGlzLmlucHV0PWUsdGhpcy5maWxlbmFtZT10LmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPXQuc2NoZW1hfHxWLHRoaXMub25XYXJuaW5nPXQub25XYXJuaW5nfHxudWxsLHRoaXMubGVnYWN5PXQubGVnYWN5fHwhMSx0aGlzLmpzb249dC5qc29ufHwhMSx0aGlzLmxpc3RlbmVyPXQubGlzdGVuZXJ8fG51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy50eXBlTWFwPXRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcCx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5saW5lPTAsdGhpcy5saW5lU3RhcnQ9MCx0aGlzLmxpbmVJbmRlbnQ9MCx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG5ldyBVKHQsbmV3IEcoZS5maWxlbmFtZSxlLmlucHV0LGUucG9zaXRpb24sZS5saW5lLGUucG9zaXRpb24tZS5saW5lU3RhcnQpKX1mdW5jdGlvbiBmKGUsdCl7dGhyb3cgcChlLHQpfWZ1bmN0aW9uIG0oZSx0KXtlLm9uV2FybmluZyYmZS5vbldhcm5pbmcuY2FsbChudWxsLHAoZSx0KSl9ZnVuY3Rpb24gaChlLHQsbixyKXt2YXIgbyxzLGksYTtpZih0PG4pe2lmKGE9ZS5pbnB1dC5zbGljZSh0LG4pLHIpZm9yKG89MCxzPWEubGVuZ3RoO288cztvKz0xKTk9PT0oaT1hLmNoYXJDb2RlQXQobykpfHwzMjw9aSYmaTw9MTExNDExMXx8ZihlLCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgWi50ZXN0KGEpJiZmKGUsInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7ZS5yZXN1bHQrPWF9fWZ1bmN0aW9uIGcoZSx0LG4scil7dmFyIG8scyxpLGE7Zm9yKEIuaXNPYmplY3Qobil8fGYoZSwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSxvPU9iamVjdC5rZXlzKG4pLGk9MCxhPW8ubGVuZ3RoO2k8YTtpKz0xKXM9b1tpXSxXLmNhbGwodCxzKXx8KHRbc109bltzXSxyW3NdPSEwKX1mdW5jdGlvbiBiKGUsdCxuLHIsbyxzLGksYSl7dmFyIGwsdTtpZihvPVN0cmluZyhvKSxudWxsPT09dCYmKHQ9e30pLCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSI9PT1yKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKz0xKWcoZSx0LHNbbF0sbik7ZWxzZSBnKGUsdCxzLG4pO2Vsc2UgZS5qc29ufHxXLmNhbGwobixvKXx8IVcuY2FsbCh0LG8pfHwoZS5saW5lPWl8fGUubGluZSxlLnBvc2l0aW9uPWF8fGUucG9zaXRpb24sZihlLCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5IikpLHRbb109cyxkZWxldGUgbltvXTtyZXR1cm4gdH1mdW5jdGlvbiBFKGUpe3ZhciB0O3Q9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLDEwPT09dD9lLnBvc2l0aW9uKys6MTM9PT10PyhlLnBvc2l0aW9uKyssMTA9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikmJmUucG9zaXRpb24rKyk6ZihlLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxlLmxpbmUrPTEsZS5saW5lU3RhcnQ9ZS5wb3NpdGlvbn1mdW5jdGlvbiB5KGUsdCxuKXtmb3IodmFyIHM9MCxpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTswIT09aTspe2Zvcig7byhpKTspaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZih0JiYzNT09PWkpZG97aT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX13aGlsZSgxMCE9PWkmJjEzIT09aSYmMCE9PWkpO2lmKCFyKGkpKWJyZWFrO2ZvcihFKGUpLGk9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLHMrKyxlLmxpbmVJbmRlbnQ9MDszMj09PWk7KWUubGluZUluZGVudCsrLGk9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9cmV0dXJuLTEhPT1uJiYwIT09cyYmZS5saW5lSW5kZW50PG4mJm0oZSwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksc31mdW5jdGlvbiB2KGUpe3ZhciB0LG49ZS5wb3NpdGlvbjtyZXR1cm4hKDQ1IT09KHQ9ZS5pbnB1dC5jaGFyQ29kZUF0KG4pKSYmNDYhPT10fHx0IT09ZS5pbnB1dC5jaGFyQ29kZUF0KG4rMSl8fHQhPT1lLmlucHV0LmNoYXJDb2RlQXQobisyKXx8KG4rPTMsMCE9PSh0PWUuaW5wdXQuY2hhckNvZGVBdChuKSkmJiFzKHQpKSl9ZnVuY3Rpb24gVChlLHQpezE9PT10P2UucmVzdWx0Kz0iICI6dD4xJiYoZS5yZXN1bHQrPUIucmVwZWF0KCJcbiIsdC0xKSl9ZnVuY3Rpb24gQShlLHQsbil7dmFyIGEsbCx1LGMsZCxfLHAsZixtLGc9ZS5raW5kLGI9ZS5yZXN1bHQ7aWYobT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikscyhtKXx8aShtKXx8MzU9PT1tfHwzOD09PW18fDQyPT09bXx8MzM9PT1tfHwxMjQ9PT1tfHw2Mj09PW18fDM5PT09bXx8MzQ9PT1tfHwzNz09PW18fDY0PT09bXx8OTY9PT1tKXJldHVybiExO2lmKCg2Mz09PW18fDQ1PT09bSkmJihsPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLHMobCl8fG4mJmkobCkpKXJldHVybiExO2ZvcihlLmtpbmQ9InNjYWxhciIsZS5yZXN1bHQ9IiIsdT1jPWUucG9zaXRpb24sZD0hMTswIT09bTspe2lmKDU4PT09bSl7aWYobD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxzKGwpfHxuJiZpKGwpKWJyZWFrfWVsc2UgaWYoMzU9PT1tKXtpZihhPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uLTEpLHMoYSkpYnJlYWt9ZWxzZXtpZihlLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJnYoZSl8fG4mJmkobSkpYnJlYWs7aWYocihtKSl7aWYoXz1lLmxpbmUscD1lLmxpbmVTdGFydCxmPWUubGluZUluZGVudCx5KGUsITEsLTEpLGUubGluZUluZGVudD49dCl7ZD0hMCxtPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtjb250aW51ZX1lLnBvc2l0aW9uPWMsZS5saW5lPV8sZS5saW5lU3RhcnQ9cCxlLmxpbmVJbmRlbnQ9ZjticmVha319ZCYmKGgoZSx1LGMsITEpLFQoZSxlLmxpbmUtXyksdT1jPWUucG9zaXRpb24sZD0hMSksbyhtKXx8KGM9ZS5wb3NpdGlvbisxKSxtPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfXJldHVybiBoKGUsdSxjLCExKSwhIWUucmVzdWx0fHwoZS5raW5kPWcsZS5yZXN1bHQ9YiwhMSl9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuLG8scztpZigzOSE9PShuPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpcmV0dXJuITE7Zm9yKGUua2luZD0ic2NhbGFyIixlLnJlc3VsdD0iIixlLnBvc2l0aW9uKyssbz1zPWUucG9zaXRpb247MCE9PShuPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSk7KWlmKDM5PT09bil7aWYoaChlLG8sZS5wb3NpdGlvbiwhMCksMzkhPT0obj1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSkpcmV0dXJuITA7bz1lLnBvc2l0aW9uLGUucG9zaXRpb24rKyxzPWUucG9zaXRpb259ZWxzZSByKG4pPyhoKGUsbyxzLCEwKSxUKGUseShlLCExLHQpKSxvPXM9ZS5wb3NpdGlvbik6ZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZ2KGUpP2YoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KGUucG9zaXRpb24rKyxzPWUucG9zaXRpb24pO2YoZSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbixvLHMsaSx1LGM7aWYoMzQhPT0oYz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXJldHVybiExO2ZvcihlLmtpbmQ9InNjYWxhciIsZS5yZXN1bHQ9IiIsZS5wb3NpdGlvbisrLG49bz1lLnBvc2l0aW9uOzAhPT0oYz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpOyl7aWYoMzQ9PT1jKXJldHVybiBoKGUsbixlLnBvc2l0aW9uLCEwKSxlLnBvc2l0aW9uKyssITA7aWYoOTI9PT1jKXtpZihoKGUsbixlLnBvc2l0aW9uLCEwKSxjPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHIoYykpeShlLCExLHQpO2Vsc2UgaWYoYzwyNTYmJm9lW2NdKWUucmVzdWx0Kz1zZVtjXSxlLnBvc2l0aW9uKys7ZWxzZSBpZigodT1sKGMpKT4wKXtmb3Iocz11LGk9MDtzPjA7cy0tKWM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksKHU9YShjKSk+PTA/aT0oaTw8NCkrdTpmKGUsImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO2UucmVzdWx0Kz1kKGkpLGUucG9zaXRpb24rK31lbHNlIGYoZSwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTtuPW89ZS5wb3NpdGlvbn1lbHNlIHIoYyk/KGgoZSxuLG8sITApLFQoZSx5KGUsITEsdCkpLG49bz1lLnBvc2l0aW9uKTplLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJnYoZSk/ZihlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTooZS5wb3NpdGlvbisrLG89ZS5wb3NpdGlvbil9ZihlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLHIsbyxpLGEsbCx1LGMsZCxfLHAsbT0hMCxoPWUudGFnLGc9ZS5hbmNob3IsRT17fTtpZig5MT09PShwPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpaT05Myx1PSExLHI9W107ZWxzZXtpZigxMjMhPT1wKXJldHVybiExO2k9MTI1LHU9ITAscj17fX1mb3IobnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPXIpLHA9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7MCE9PXA7KXtpZih5KGUsITAsdCksKHA9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKT09PWkpcmV0dXJuIGUucG9zaXRpb24rKyxlLnRhZz1oLGUuYW5jaG9yPWcsZS5raW5kPXU/Im1hcHBpbmciOiJzZXF1ZW5jZSIsZS5yZXN1bHQ9ciwhMDttfHxmKGUsIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksZD1jPV89bnVsbCxhPWw9ITEsNjM9PT1wJiYobz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxzKG8pJiYoYT1sPSEwLGUucG9zaXRpb24rKyx5KGUsITAsdCkpKSxuPWUubGluZSxNKGUsdCxZLCExLCEwKSxkPWUudGFnLGM9ZS5yZXN1bHQseShlLCEwLHQpLHA9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLCFsJiZlLmxpbmUhPT1ufHw1OCE9PXB8fChhPSEwLHA9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikseShlLCEwLHQpLE0oZSx0LFksITEsITApLF89ZS5yZXN1bHQpLHU/YihlLHIsRSxkLGMsXyk6YT9yLnB1c2goYihlLG51bGwsRSxkLGMsXykpOnIucHVzaChjKSx5KGUsITAsdCkscD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksNDQ9PT1wPyhtPSEwLHA9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpOm09ITF9ZihlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIFIoZSx0KXt2YXIgbixzLGksYSxsPSQsYz0hMSxkPSExLF89dCxwPTAsbT0hMTtpZigxMjQ9PT0oYT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXM9ITE7ZWxzZXtpZig2MiE9PWEpcmV0dXJuITE7cz0hMH1mb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiOzAhPT1hOylpZig0Mz09PShhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKXx8NDU9PT1hKSQ9PT1sP2w9NDM9PT1hP0o6UTpmKGUsInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpO2Vsc2V7aWYoISgoaT11KGEpKT49MCkpYnJlYWs7MD09PWk/ZihlLCJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lIik6ZD9mKGUsInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KF89dCtpLTEsZD0hMCl9aWYobyhhKSl7ZG97YT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX13aGlsZShvKGEpKTtpZigzNT09PWEpZG97YT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX13aGlsZSghcihhKSYmMCE9PWEpfWZvcig7MCE9PWE7KXtmb3IoRShlKSxlLmxpbmVJbmRlbnQ9MCxhPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTsoIWR8fGUubGluZUluZGVudDxfKSYmMzI9PT1hOyllLmxpbmVJbmRlbnQrKyxhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKCFkJiZlLmxpbmVJbmRlbnQ+XyYmKF89ZS5saW5lSW5kZW50KSxyKGEpKXArKztlbHNle2lmKGUubGluZUluZGVudDxfKXtsPT09Sj9lLnJlc3VsdCs9Qi5yZXBlYXQoIlxuIixjPzErcDpwKTpsPT09JCYmYyYmKGUucmVzdWx0Kz0iXG4iKTticmVha31mb3Iocz9vKGEpPyhtPSEwLGUucmVzdWx0Kz1CLnJlcGVhdCgiXG4iLGM/MStwOnApKTptPyhtPSExLGUucmVzdWx0Kz1CLnJlcGVhdCgiXG4iLHArMSkpOjA9PT1wP2MmJihlLnJlc3VsdCs9IiAiKTplLnJlc3VsdCs9Qi5yZXBlYXQoIlxuIixwKTplLnJlc3VsdCs9Qi5yZXBlYXQoIlxuIixjPzErcDpwKSxjPSEwLGQ9ITAscD0wLG49ZS5wb3NpdGlvbjshcihhKSYmMCE9PWE7KWE9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aChlLG4sZS5wb3NpdGlvbiwhMSl9fXJldHVybiEwfWZ1bmN0aW9uIGooZSx0KXt2YXIgbixyLG8saT1lLnRhZyxhPWUuYW5jaG9yLGw9W10sdT0hMTtmb3IobnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPWwpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOzAhPT1vJiY0NT09PW8mJihyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLHMocikpOylpZih1PSEwLGUucG9zaXRpb24rKyx5KGUsITAsLTEpJiZlLmxpbmVJbmRlbnQ8PXQpbC5wdXNoKG51bGwpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO2Vsc2UgaWYobj1lLmxpbmUsTShlLHQsSywhMSwhMCksbC5wdXNoKGUucmVzdWx0KSx5KGUsITAsLTEpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLChlLmxpbmU9PT1ufHxlLmxpbmVJbmRlbnQ+dCkmJjAhPT1vKWYoZSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGUubGluZUluZGVudDx0KWJyZWFrO3JldHVybiEhdSYmKGUudGFnPWksZS5hbmNob3I9YSxlLmtpbmQ9InNlcXVlbmNlIixlLnJlc3VsdD1sLCEwKX1mdW5jdGlvbiB4KGUsdCxuKXt2YXIgcixpLGEsbCx1LGM9ZS50YWcsZD1lLmFuY2hvcixfPXt9LHA9e30sbT1udWxsLGg9bnVsbCxnPW51bGwsRT0hMSx2PSExO2ZvcihudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09XyksdT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7MCE9PXU7KXtpZihyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLGE9ZS5saW5lLGw9ZS5wb3NpdGlvbiw2MyE9PXUmJjU4IT09dXx8IXMocikpe2lmKCFNKGUsbixxLCExLCEwKSlicmVhaztpZihlLmxpbmU9PT1hKXtmb3IodT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7byh1KTspdT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZig1OD09PXUpdT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSxzKHUpfHxmKGUsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLEUmJihiKGUsXyxwLG0saCxudWxsKSxtPWg9Zz1udWxsKSx2PSEwLEU9ITEsaT0hMSxtPWUudGFnLGg9ZS5yZXN1bHQ7ZWxzZXtpZighdilyZXR1cm4gZS50YWc9YyxlLmFuY2hvcj1kLCEwO2YoZSwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKX19ZWxzZXtpZighdilyZXR1cm4gZS50YWc9YyxlLmFuY2hvcj1kLCEwO2YoZSwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iil9fWVsc2UgNjM9PT11PyhFJiYoYihlLF8scCxtLGgsbnVsbCksbT1oPWc9bnVsbCksdj0hMCxFPSEwLGk9ITApOkU/KEU9ITEsaT0hMCk6ZihlLCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIiksZS5wb3NpdGlvbis9MSx1PXI7aWYoKGUubGluZT09PWF8fGUubGluZUluZGVudD50KSYmKE0oZSx0LFgsITAsaSkmJihFP2g9ZS5yZXN1bHQ6Zz1lLnJlc3VsdCksRXx8KGIoZSxfLHAsbSxoLGcsYSxsKSxtPWg9Zz1udWxsKSx5KGUsITAsLTEpLHU9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSxlLmxpbmVJbmRlbnQ+dCYmMCE9PXUpZihlLCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Iik7ZWxzZSBpZihlLmxpbmVJbmRlbnQ8dClicmVha31yZXR1cm4gRSYmYihlLF8scCxtLGgsbnVsbCksdiYmKGUudGFnPWMsZS5hbmNob3I9ZCxlLmtpbmQ9Im1hcHBpbmciLGUucmVzdWx0PV8pLHZ9ZnVuY3Rpb24gTChlKXt2YXIgdCxuLHIsbyxpPSExLGE9ITE7aWYoMzMhPT0obz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpKXJldHVybiExO2lmKG51bGwhPT1lLnRhZyYmZihlLCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksNjA9PT1vPyhpPSEwLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpOjMzPT09bz8oYT0hMCxuPSIhISIsbz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6bj0iISIsdD1lLnBvc2l0aW9uLGkpe2Rve289ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9d2hpbGUoMCE9PW8mJjYyIT09byk7ZS5wb3NpdGlvbjxlLmxlbmd0aD8ocj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksbz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6ZihlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDswIT09byYmIXMobyk7KTMzPT09byYmKGE/ZihlLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KG49ZS5pbnB1dC5zbGljZSh0LTEsZS5wb3NpdGlvbisxKSxuZS50ZXN0KG4pfHxmKGUsIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIiksYT0hMCx0PWUucG9zaXRpb24rMSkpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksdGUudGVzdChyKSYmZihlLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1yZXR1cm4gciYmIXJlLnRlc3QocikmJmYoZSwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAiK3IpLGk/ZS50YWc9cjpXLmNhbGwoZS50YWdNYXAsbik/ZS50YWc9ZS50YWdNYXBbbl0rcjoiISI9PT1uP2UudGFnPSIhIityOiIhISI9PT1uP2UudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3I6ZihlLCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicrbisnIicpLCEwfWZ1bmN0aW9uIEQoZSl7dmFyIHQsbjtpZigzOCE9PShuPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkpcmV0dXJuITE7Zm9yKG51bGwhPT1lLmFuY2hvciYmZihlLCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxuPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHQ9ZS5wb3NpdGlvbjswIT09biYmIXMobikmJiFpKG4pOyluPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3JldHVybiBlLnBvc2l0aW9uPT09dCYmZihlLCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksZS5hbmNob3I9ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLCEwfWZ1bmN0aW9uIHcoZSl7dmFyIHQsbixyO2lmKDQyIT09KHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSlyZXR1cm4hMTtmb3Iocj1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSx0PWUucG9zaXRpb247MCE9PXImJiFzKHIpJiYhaShyKTspcj1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtyZXR1cm4gZS5wb3NpdGlvbj09PXQmJmYoZSwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksbj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksZS5hbmNob3JNYXAuaGFzT3duUHJvcGVydHkobil8fGYoZSwndW5pZGVudGlmaWVkIGFsaWFzICInK24rJyInKSxlLnJlc3VsdD1lLmFuY2hvck1hcFtuXSx5KGUsITAsLTEpLCEwfWZ1bmN0aW9uIE0oZSx0LG4scixvKXt2YXIgcyxpLGEsbCx1LGMsZCxfLHA9MSxtPSExLGg9ITE7aWYobnVsbCE9PWUubGlzdGVuZXImJmUubGlzdGVuZXIoIm9wZW4iLGUpLGUudGFnPW51bGwsZS5hbmNob3I9bnVsbCxlLmtpbmQ9bnVsbCxlLnJlc3VsdD1udWxsLHM9aT1hPVg9PT1ufHxLPT09bixyJiZ5KGUsITAsLTEpJiYobT0hMCxlLmxpbmVJbmRlbnQ+dD9wPTE6ZS5saW5lSW5kZW50PT09dD9wPTA6ZS5saW5lSW5kZW50PHQmJihwPS0xKSksMT09PXApZm9yKDtMKGUpfHxEKGUpOyl5KGUsITAsLTEpPyhtPSEwLGE9cyxlLmxpbmVJbmRlbnQ+dD9wPTE6ZS5saW5lSW5kZW50PT09dD9wPTA6ZS5saW5lSW5kZW50PHQmJihwPS0xKSk6YT0hMTtpZihhJiYoYT1tfHxvKSwxIT09cCYmWCE9PW58fChkPVk9PT1ufHxxPT09bj90OnQrMSxfPWUucG9zaXRpb24tZS5saW5lU3RhcnQsMT09PXA/YSYmKGooZSxfKXx8eChlLF8sZCkpfHxTKGUsZCk/aD0hMDooaSYmUihlLGQpfHxDKGUsZCl8fE8oZSxkKT9oPSEwOncoZSk/KGg9ITAsbnVsbD09PWUudGFnJiZudWxsPT09ZS5hbmNob3J8fGYoZSwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKSk6QShlLGQsWT09PW4pJiYoaD0hMCxudWxsPT09ZS50YWcmJihlLnRhZz0iPyIpKSxudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpKTowPT09cCYmKGg9YSYmaihlLF8pKSksbnVsbCE9PWUudGFnJiYiISIhPT1lLnRhZylpZigiPyI9PT1lLnRhZyl7Zm9yKGw9MCx1PWUuaW1wbGljaXRUeXBlcy5sZW5ndGg7bDx1O2wrPTEpaWYoYz1lLmltcGxpY2l0VHlwZXNbbF0sYy5yZXNvbHZlKGUucmVzdWx0KSl7ZS5yZXN1bHQ9Yy5jb25zdHJ1Y3QoZS5yZXN1bHQpLGUudGFnPWMudGFnLG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1lLnJlc3VsdCk7YnJlYWt9fWVsc2UgVy5jYWxsKGUudHlwZU1hcFtlLmtpbmR8fCJmYWxsYmFjayJdLGUudGFnKT8oYz1lLnR5cGVNYXBbZS5raW5kfHwiZmFsbGJhY2siXVtlLnRhZ10sbnVsbCE9PWUucmVzdWx0JiZjLmtpbmQhPT1lLmtpbmQmJmYoZSwidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiK2UudGFnKyc+IHRhZzsgaXQgc2hvdWxkIGJlICInK2Mua2luZCsnIiwgbm90ICInK2Uua2luZCsnIicpLGMucmVzb2x2ZShlLnJlc3VsdCk/KGUucmVzdWx0PWMuY29uc3RydWN0KGUucmVzdWx0KSxudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpKTpmKGUsImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IitlLnRhZysiPiBleHBsaWNpdCB0YWciKSk6ZihlLCJ1bmtub3duIHRhZyAhPCIrZS50YWcrIj4iKTtyZXR1cm4gbnVsbCE9PWUubGlzdGVuZXImJmUubGlzdGVuZXIoImNsb3NlIixlKSxudWxsIT09ZS50YWd8fG51bGwhPT1lLmFuY2hvcnx8aH1mdW5jdGlvbiBrKGUpe3ZhciB0LG4saSxhLGw9ZS5wb3NpdGlvbix1PSExO2ZvcihlLnZlcnNpb249bnVsbCxlLmNoZWNrTGluZUJyZWFrcz1lLmxlZ2FjeSxlLnRhZ01hcD17fSxlLmFuY2hvck1hcD17fTswIT09KGE9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSYmKHkoZSwhMCwtMSksYT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksIShlLmxpbmVJbmRlbnQ+MHx8MzchPT1hKSk7KXtmb3IodT0hMCxhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHQ9ZS5wb3NpdGlvbjswIT09YSYmIXMoYSk7KWE9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7Zm9yKG49ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLGk9W10sbi5sZW5ndGg8MSYmZihlLCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTswIT09YTspe2Zvcig7byhhKTspYT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZigzNT09PWEpe2Rve2E9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9d2hpbGUoMCE9PWEmJiFyKGEpKTticmVha31pZihyKGEpKWJyZWFrO2Zvcih0PWUucG9zaXRpb247MCE9PWEmJiFzKGEpOylhPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2kucHVzaChlLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbikpfTAhPT1hJiZFKGUpLFcuY2FsbChhZSxuKT9hZVtuXShlLG4saSk6bShlLCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytuKyciJyl9aWYoeShlLCEwLC0xKSwwPT09ZS5saW5lSW5kZW50JiY0NT09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSYmNDU9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSYmNDU9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisyKT8oZS5wb3NpdGlvbis9Myx5KGUsITAsLTEpKTp1JiZmKGUsImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxNKGUsZS5saW5lSW5kZW50LTEsWCwhMSwhMCkseShlLCEwLC0xKSxlLmNoZWNrTGluZUJyZWFrcyYmZWUudGVzdChlLmlucHV0LnNsaWNlKGwsZS5wb3NpdGlvbikpJiZtKGUsIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLGUuZG9jdW1lbnRzLnB1c2goZS5yZXN1bHQpLGUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmdihlKSlyZXR1cm4gdm9pZCg0Nj09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSYmKGUucG9zaXRpb24rPTMseShlLCEwLC0xKSkpO2UucG9zaXRpb248ZS5sZW5ndGgtMSYmZihlLCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpfWZ1bmN0aW9uIEkoZSx0KXtlPVN0cmluZyhlKSx0PXR8fHt9LDAhPT1lLmxlbmd0aCYmKDEwIT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpJiYxMyE9PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSYmKGUrPSJcbiIpLDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSk7dmFyIG49bmV3IF8oZSx0KTtmb3Iobi5pbnB1dCs9IlwwIjszMj09PW4uaW5wdXQuY2hhckNvZGVBdChuLnBvc2l0aW9uKTspbi5saW5lSW5kZW50Kz0xLG4ucG9zaXRpb24rPTE7Zm9yKDtuLnBvc2l0aW9uPG4ubGVuZ3RoLTE7KWsobik7cmV0dXJuIG4uZG9jdW1lbnRzfWZ1bmN0aW9uIFAoZSx0LG4pe3ZhciByLG8scz1JKGUsbik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIHM7Zm9yKHI9MCxvPXMubGVuZ3RoO3I8bztyKz0xKXQoc1tyXSl9ZnVuY3Rpb24gTihlLHQpe3ZhciBuPUkoZSx0KTtpZigwIT09bi5sZW5ndGgpe2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gblswXTt0aHJvdyBuZXcgVSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gSChlLHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIFAoZSxCLmV4dGVuZCh7c2NoZW1hOnp9LG4pKTtQKGUsdCxCLmV4dGVuZCh7c2NoZW1hOnp9LG4pKX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIE4oZSxCLmV4dGVuZCh7c2NoZW1hOnp9LHQpKX1mb3IodmFyIEI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIpLFU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIpLEc9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL21hcmsuanMiKSx6PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIiksVj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIpLFc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxZPTEscT0yLEs9MyxYPTQsJD0xLFE9MixKPTMsWj0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLGVlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLHRlPS9bLFxbXF1ce1x9XS8sbmU9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLHJlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2ksb2U9bmV3IEFycmF5KDI1Niksc2U9bmV3IEFycmF5KDI1NiksaWU9MDtpZTwyNTY7aWUrKylvZVtpZV09YyhpZSk/MTowLHNlW2llXT1jKGllKTt2YXIgYWU9e1lBTUw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scztudWxsIT09ZS52ZXJzaW9uJiZmKGUsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLDEhPT1uLmxlbmd0aCYmZihlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iikscj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoblswXSksbnVsbD09PXImJmYoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxvPXBhcnNlSW50KHJbMV0sMTApLHM9cGFyc2VJbnQoclsyXSwxMCksMSE9PW8mJmYoZSwidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxlLnZlcnNpb249blswXSxlLmNoZWNrTGluZUJyZWFrcz1zPDIsMSE9PXMmJjIhPT1zJiZtKGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvOzIhPT1uLmxlbmd0aCYmZihlLCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzIikscj1uWzBdLG89blsxXSxuZS50ZXN0KHIpfHxmKGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksVy5jYWxsKGUudGFnTWFwLHIpJiZmKGUsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3IrJyIgdGFnIGhhbmRsZScpLHJlLnRlc3Qobyl8fGYoZSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksZS50YWdNYXBbcl09b319O2UuZXhwb3J0cy5sb2FkQWxsPVAsZS5leHBvcnRzLmxvYWQ9TixlLmV4cG9ydHMuc2FmZUxvYWRBbGw9SCxlLmV4cG9ydHMuc2FmZUxvYWQ9Rn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixvKXt0aGlzLm5hbWU9ZSx0aGlzLmJ1ZmZlcj10LHRoaXMucG9zaXRpb249bix0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1vfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiKTtyLnByb3RvdHlwZS5nZXRTbmlwcGV0PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixzLGksYTtpZighdGhpcy5idWZmZXIpcmV0dXJuIG51bGw7Zm9yKGU9ZXx8NCx0PXR8fDc1LG49IiIscj10aGlzLnBvc2l0aW9uO3I+MCYmLTE9PT0iXDBcclxuwoVcdTIwMjhcdTIwMjkiLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KHItMSkpOylpZihyLT0xLHRoaXMucG9zaXRpb24tcj50LzItMSl7bj0iIC4uLiAiLHIrPTU7YnJlYWt9Zm9yKHM9IiIsaT10aGlzLnBvc2l0aW9uO2k8dGhpcy5idWZmZXIubGVuZ3RoJiYtMT09PSJcMFxyXG7ChVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoaSkpOylpZigoaSs9MSktdGhpcy5wb3NpdGlvbj50LzItMSl7cz0iIC4uLiAiLGktPTU7YnJlYWt9cmV0dXJuIGE9dGhpcy5idWZmZXIuc2xpY2UocixpKSxvLnJlcGVhdCgiICIsZSkrbithK3MrIlxuIitvLnJlcGVhdCgiICIsZSt0aGlzLnBvc2l0aW9uLXIrbi5sZW5ndGgpKyJeIn0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIjtyZXR1cm4gdGhpcy5uYW1lJiYobis9J2luICInK3RoaXMubmFtZSsnIiAnKSxuKz0iYXQgbGluZSAiKyh0aGlzLmxpbmUrMSkrIiwgY29sdW1uICIrKHRoaXMuY29sdW1uKzEpLGV8fCh0PXRoaXMuZ2V0U25pcHBldCgpKSYmKG4rPSI6XG4iK3QpLG59LGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgbz1bXTtyZXR1cm4gZS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oZSl7bj1yKGUsdCxuKX0pLGVbdF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LnRhZz09PWUudGFnJiZ0LmtpbmQ9PT1lLmtpbmQmJm8ucHVzaChuKX0pLG4ucHVzaChlKX0pLG4uZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT1vLmluZGV4T2YodCl9KX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gZShlKXtyW2Uua2luZF1bZS50YWddPXIuZmFsbGJhY2tbZS50YWddPWV9dmFyIHQsbixyPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fX07Zm9yKHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrPTEpYXJndW1lbnRzW3RdLmZvckVhY2goZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyhlKXt0aGlzLmluY2x1ZGU9ZS5pbmNsdWRlfHxbXSx0aGlzLmltcGxpY2l0PWUuaW1wbGljaXR8fFtdLHRoaXMuZXhwbGljaXQ9ZS5leHBsaWNpdHx8W10sdGhpcy5pbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubG9hZEtpbmQmJiJzY2FsYXIiIT09ZS5sb2FkS2luZCl0aHJvdyBuZXcgYSgiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIil9KSx0aGlzLmNvbXBpbGVkSW1wbGljaXQ9cih0aGlzLCJpbXBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRFeHBsaWNpdD1yKHRoaXMsImV4cGxpY2l0IixbXSksdGhpcy5jb21waWxlZFR5cGVNYXA9byh0aGlzLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5jb21waWxlZEV4cGxpY2l0KX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO3MuREVGQVVMVD1udWxsLHMuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGUsdDtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmU9cy5ERUZBVUxULHQ9YXJndW1lbnRzWzBdO2JyZWFrO2Nhc2UgMjplPWFyZ3VtZW50c1swXSx0PWFyZ3VtZW50c1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uIil9aWYoZT1pLnRvQXJyYXkoZSksdD1pLnRvQXJyYXkodCksIWUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBzfSkpdGhyb3cgbmV3IGEoIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7aWYoIXQuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfSkpdGhyb3cgbmV3IGEoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtyZXR1cm4gbmV3IHMoe2luY2x1ZGU6ZSxleHBsaWNpdDp0fSl9LGUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMiKTtlLmV4cG9ydHM9bmV3IHIoe2luY2x1ZGU6W24oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIpXX0pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpO2UuZXhwb3J0cz1yLkRFRkFVTFQ9bmV3IHIoe2luY2x1ZGU6W24oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIildLGV4cGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIpXX0pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIpO2UuZXhwb3J0cz1uZXcgcih7aW5jbHVkZTpbbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIildLGltcGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tZXJnZS5qcyIpXSxleHBsaWNpdDpbbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzIildfSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMiKTtlLmV4cG9ydHM9bmV3IHIoe2V4cGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zdHIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMiKV19KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIik7ZS5leHBvcnRzPW5ldyByKHtpbmNsdWRlOltuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzIildLGltcGxpY2l0OltuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Zsb2F0LmpzIildfSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O3JldHVybiBudWxsIT09ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtlW25dLmZvckVhY2goZnVuY3Rpb24oZSl7dFtTdHJpbmcoZSldPW59KX0pLHR9ZnVuY3Rpb24gbyhlLHQpe2lmKHQ9dHx8e30sT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZigtMT09PWkuaW5kZXhPZih0KSl0aHJvdyBuZXcgcygnVW5rbm93biBvcHRpb24gIicrdCsnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytlKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMudGFnPWUsdGhpcy5raW5kPXQua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9dC5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD10LmNvbnN0cnVjdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRoaXMuaW5zdGFuY2VPZj10Lmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9dC5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9dC5yZXByZXNlbnR8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9dC5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5zdHlsZUFsaWFzZXM9cih0LnN0eWxlQWxpYXNlc3x8bnVsbCksLTE9PT1hLmluZGV4T2YodGhpcy5raW5kKSl0aHJvdyBuZXcgcygnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2UrJyIgWUFNTCB0eXBlLicpfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiKSxpPVsia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sYT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQsbixyPTAsbz1lLmxlbmd0aCxzPXU7Zm9yKG49MDtuPG87bisrKWlmKCEoKHQ9cy5pbmRleE9mKGUuY2hhckF0KG4pKSk+NjQpKXtpZih0PDApcmV0dXJuITE7cis9Nn1yZXR1cm4gciU4PT0wfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyPWUucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxvPXIubGVuZ3RoLHM9dSxpPTAsbD1bXTtmb3IodD0wO3Q8bzt0KyspdCU0PT0wJiZ0JiYobC5wdXNoKGk+PjE2JjI1NSksbC5wdXNoKGk+PjgmMjU1KSxsLnB1c2goMjU1JmkpKSxpPWk8PDZ8cy5pbmRleE9mKHIuY2hhckF0KHQpKTtyZXR1cm4gbj1vJTQqNiwwPT09bj8obC5wdXNoKGk+PjE2JjI1NSksbC5wdXNoKGk+PjgmMjU1KSxsLnB1c2goMjU1JmkpKToxOD09PW4/KGwucHVzaChpPj4xMCYyNTUpLGwucHVzaChpPj4yJjI1NSkpOjEyPT09biYmbC5wdXNoKGk+PjQmMjU1KSxhP2EuZnJvbT9hLmZyb20obCk6bmV3IGEobCk6bH1mdW5jdGlvbiBzKGUpe3ZhciB0LG4scj0iIixvPTAscz1lLmxlbmd0aCxpPXU7Zm9yKHQ9MDt0PHM7dCsrKXQlMz09MCYmdCYmKHIrPWlbbz4+MTgmNjNdLHIrPWlbbz4+MTImNjNdLHIrPWlbbz4+NiY2M10scis9aVs2MyZvXSksbz0obzw8OCkrZVt0XTtyZXR1cm4gbj1zJTMsMD09PW4/KHIrPWlbbz4+MTgmNjNdLHIrPWlbbz4+MTImNjNdLHIrPWlbbz4+NiY2M10scis9aVs2MyZvXSk6Mj09PW4/KHIrPWlbbz4+MTAmNjNdLHIrPWlbbz4+NCY2M10scis9aVtvPDwyJjYzXSxyKz1pWzY0XSk6MT09PW4mJihyKz1pW28+PjImNjNdLHIrPWlbbzw8NCY2M10scis9aVs2NF0scis9aVs2NF0pLHJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gYSYmYS5pc0J1ZmZlcihlKX12YXIgYTt0cnl7YT1uKCIuL25vZGVfbW9kdWxlcy9ub2RlLWxpYnMtYnJvd3Nlci9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyfWNhdGNoKGUpe312YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpLHU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7ZS5leHBvcnRzPW5ldyBsKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxwcmVkaWNhdGU6aSxyZXByZXNlbnQ6c30pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO3JldHVybiA0PT09dCYmKCJ0cnVlIj09PWV8fCJUcnVlIj09PWV8fCJUUlVFIj09PWUpfHw1PT09dCYmKCJmYWxzZSI9PT1lfHwiRmFsc2UiPT09ZXx8IkZBTFNFIj09PWUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRydWUiPT09ZXx8IlRydWUiPT09ZXx8IlRSVUUiPT09ZX1mdW5jdGlvbiBzKGUpe3JldHVybiJbb2JqZWN0IEJvb2xlYW5dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgaSgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvLHByZWRpY2F0ZTpzLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbCE9PWUmJiEoIXUudGVzdChlKXx8Il8iPT09ZVtlLmxlbmd0aC0xXSl9ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHIsbztyZXR1cm4gdD1lLnJlcGxhY2UoL18vZywiIikudG9Mb3dlckNhc2UoKSxuPSItIj09PXRbMF0/LTE6MSxvPVtdLCIrLSIuaW5kZXhPZih0WzBdKT49MCYmKHQ9dC5zbGljZSgxKSksIi5pbmYiPT09dD8xPT09bj9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOiIubmFuIj09PXQ/TmFOOnQuaW5kZXhPZigiOiIpPj0wPyh0LnNwbGl0KCI6IikuZm9yRWFjaChmdW5jdGlvbihlKXtvLnVuc2hpZnQocGFyc2VGbG9hdChlLDEwKSl9KSx0PTAscj0xLG8uZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1lKnIscio9NjB9KSxuKnQpOm4qcGFyc2VGbG9hdCh0LDEwKX1mdW5jdGlvbiBzKGUsdCl7dmFyIG47aWYoaXNOYU4oZSkpc3dpdGNoKHQpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLm5hbiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuTkFOIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5OYU4ifWVsc2UgaWYoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPT09ZSlzd2l0Y2godCl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIuaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLkluZiJ9ZWxzZSBpZihOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT1lKXN3aXRjaCh0KXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi0uaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi0uSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi0uSW5mIn1lbHNlIGlmKGEuaXNOZWdhdGl2ZVplcm8oZSkpcmV0dXJuIi0wLjAiO3JldHVybiBuPWUudG9TdHJpbmcoMTApLGMudGVzdChuKT9uLnJlcGxhY2UoImUiLCIuZSIpOm59ZnVuY3Rpb24gaShlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmKGUlMSE9MHx8YS5pc05lZ2F0aXZlWmVybyhlKSl9dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKSx1PW5ldyBSZWdFeHAoIl4oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFwuWzAtOV9dKnxbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpLGM9L15bLStdP1swLTldK2UvO2UuZXhwb3J0cz1uZXcgbCgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxwcmVkaWNhdGU6aSxyZXByZXNlbnQ6cyxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiA0ODw9ZSYmZTw9NTd8fDY1PD1lJiZlPD03MHx8OTc8PWUmJmU8PTEwMn1mdW5jdGlvbiBvKGUpe3JldHVybiA0ODw9ZSYmZTw9NTV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fWZ1bmN0aW9uIGkoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQsbj1lLmxlbmd0aCxpPTAsYT0hMTtpZighbilyZXR1cm4hMTtpZih0PWVbaV0sIi0iIT09dCYmIisiIT09dHx8KHQ9ZVsrK2ldKSwiMCI9PT10KXtpZihpKzE9PT1uKXJldHVybiEwO2lmKCJiIj09PSh0PWVbKytpXSkpe2ZvcihpKys7aTxuO2krKylpZigiXyIhPT0odD1lW2ldKSl7aWYoIjAiIT09dCYmIjEiIT09dClyZXR1cm4hMTthPSEwfXJldHVybiBhJiYiXyIhPT10fWlmKCJ4Ij09PXQpe2ZvcihpKys7aTxuO2krKylpZigiXyIhPT0odD1lW2ldKSl7aWYoIXIoZS5jaGFyQ29kZUF0KGkpKSlyZXR1cm4hMTthPSEwfXJldHVybiBhJiYiXyIhPT10fWZvcig7aTxuO2krKylpZigiXyIhPT0odD1lW2ldKSl7aWYoIW8oZS5jaGFyQ29kZUF0KGkpKSlyZXR1cm4hMTthPSEwfXJldHVybiBhJiYiXyIhPT10fWlmKCJfIj09PXQpcmV0dXJuITE7Zm9yKDtpPG47aSsrKWlmKCJfIiE9PSh0PWVbaV0pKXtpZigiOiI9PT10KWJyZWFrO2lmKCFzKGUuY2hhckNvZGVBdChpKSkpcmV0dXJuITE7YT0hMH1yZXR1cm4hKCFhfHwiXyI9PT10KSYmKCI6IiE9PXR8fC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChlLnNsaWNlKGkpKSl9ZnVuY3Rpb24gYShlKXt2YXIgdCxuLHI9ZSxvPTEscz1bXTtyZXR1cm4tMSE9PXIuaW5kZXhPZigiXyIpJiYocj1yLnJlcGxhY2UoL18vZywiIikpLHQ9clswXSwiLSIhPT10JiYiKyIhPT10fHwoIi0iPT09dCYmKG89LTEpLHI9ci5zbGljZSgxKSx0PXJbMF0pLCIwIj09PXI/MDoiMCI9PT10PyJiIj09PXJbMV0/bypwYXJzZUludChyLnNsaWNlKDIpLDIpOiJ4Ij09PXJbMV0/bypwYXJzZUludChyLDE2KTpvKnBhcnNlSW50KHIsOCk6LTEhPT1yLmluZGV4T2YoIjoiKT8oci5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24oZSl7cy51bnNoaWZ0KHBhcnNlSW50KGUsMTApKX0pLHI9MCxuPTEscy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IrPWUqbixuKj02MH0pLG8qcik6bypwYXJzZUludChyLDEwKX1mdW5jdGlvbiBsKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpJiZlJTE9PTAmJiF1LmlzTmVnYXRpdmVaZXJvKGUpfXZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyBjKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6aSxjb25zdHJ1Y3Q6YSxwcmVkaWNhdGU6bCxyZXByZXNlbnQ6e2JpbmFyeTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MD8iMGIiK2UudG9TdHJpbmcoMik6Ii0wYiIrZS50b1N0cmluZygyKS5zbGljZSgxKX0sb2N0YWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTA/IjAiK2UudG9TdHJpbmcoOCk6Ii0wIitlLnRvU3RyaW5nKDgpLnNsaWNlKDEpfSxkZWNpbWFsOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKDEwKX0saGV4YWRlY2ltYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTA/IjB4IitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOiItMHgiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9fSxkZWZhdWx0U3R5bGU6ImRlY2ltYWwiLHN0eWxlQWxpYXNlczp7YmluYXJ5OlsyLCJiaW4iXSxvY3RhbDpbOCwib2N0Il0sZGVjaW1hbDpbMTAsImRlYyJdLGhleGFkZWNpbWFsOlsxNiwiaGV4Il19fSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3RyeXt2YXIgdD0iKCIrZSsiKSIsbj1hLnBhcnNlKHQse3JhbmdlOiEwfSk7cmV0dXJuIlByb2dyYW0iPT09bi50eXBlJiYxPT09bi5ib2R5Lmxlbmd0aCYmIkV4cHJlc3Npb25TdGF0ZW1lbnQiPT09bi5ib2R5WzBdLnR5cGUmJigiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iPT09bi5ib2R5WzBdLmV4cHJlc3Npb24udHlwZXx8IkZ1bmN0aW9uRXhwcmVzc2lvbiI9PT1uLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlKX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPSIoIitlKyIpIixyPWEucGFyc2Uobix7cmFuZ2U6ITB9KSxvPVtdO2lmKCJQcm9ncmFtIiE9PXIudHlwZXx8MSE9PXIuYm9keS5sZW5ndGh8fCJFeHByZXNzaW9uU3RhdGVtZW50IiE9PXIuYm9keVswXS50eXBlfHwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iIT09ci5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSYmIkZ1bmN0aW9uRXhwcmVzc2lvbiIhPT1yLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24iKTtyZXR1cm4gci5ib2R5WzBdLmV4cHJlc3Npb24ucGFyYW1zLmZvckVhY2goZnVuY3Rpb24oZSl7by5wdXNoKGUubmFtZSl9KSx0PXIuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2UsIkJsb2NrU3RhdGVtZW50Ij09PXIuYm9keVswXS5leHByZXNzaW9uLmJvZHkudHlwZT9uZXcgRnVuY3Rpb24obyxuLnNsaWNlKHRbMF0rMSx0WzFdLTEpKTpuZXcgRnVuY3Rpb24obywicmV0dXJuICIrbi5zbGljZSh0WzBdLHRbMV0pKX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9ZnVuY3Rpb24gaShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBhOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYoYT13aW5kb3cuZXNwcmltYSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IGwoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOmkscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTt2YXIgdD1lLG49L1wvKFtnaW1dKikkLy5leGVjKGUpLHI9IiI7aWYoIi8iPT09dFswXSl7aWYobiYmKHI9blsxXSksci5sZW5ndGg+MylyZXR1cm4hMTtpZigiLyIhPT10W3QubGVuZ3RoLXIubGVuZ3RoLTFdKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZSxuPS9cLyhbZ2ltXSopJC8uZXhlYyhlKSxyPSIiO3JldHVybiIvIj09PXRbMF0mJihuJiYocj1uWzFdKSx0PXQuc2xpY2UoMSx0Lmxlbmd0aC1yLmxlbmd0aC0xKSksbmV3IFJlZ0V4cCh0LHIpfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9Ii8iK2Uuc291cmNlKyIvIjtyZXR1cm4gZS5nbG9iYWwmJih0Kz0iZyIpLGUubXVsdGlsaW5lJiYodCs9Im0iKSxlLmlnbm9yZUNhc2UmJih0Kz0iaSIpLHR9ZnVuY3Rpb24gaShlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgYSgidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOmkscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuITB9ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBzKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gdm9pZCAwPT09ZX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgYSgidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOmkscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpO2UuZXhwb3J0cz1uZXcgcigidGFnOnlhbWwub3JnLDIwMDI6bWFwIix7a2luZDoibWFwcGluZyIsY29uc3RydWN0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZT9lOnt9fX0pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iPDwiPT09ZXx8bnVsbD09PWV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IG8oInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnJ9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gMT09PXQmJiJ+Ij09PWV8fDQ9PT10JiYoIm51bGwiPT09ZXx8Ik51bGwiPT09ZXx8Ik5VTEwiPT09ZSl9ZnVuY3Rpb24gbygpe3JldHVybiBudWxsfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG51bGw9PT1lfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyBpKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0Om8scHJlZGljYXRlOnMscmVwcmVzZW50OntjYW5vbmljYWw6ZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LGxvd2VyY2FzZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSxjYW1lbGNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgdCxuLHIsbyxzLGw9W10sdT1lO2Zvcih0PTAsbj11Lmxlbmd0aDt0PG47dCs9MSl7aWYocj11W3RdLHM9ITEsIltvYmplY3QgT2JqZWN0XSIhPT1hLmNhbGwocikpcmV0dXJuITE7Zm9yKG8gaW4gcilpZihpLmNhbGwocixvKSl7aWYocylyZXR1cm4hMTtzPSEwfWlmKCFzKXJldHVybiExO2lmKC0xIT09bC5pbmRleE9mKG8pKXJldHVybiExO2wucHVzaChvKX1yZXR1cm4hMH1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsIT09ZT9lOltdfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9bmV3IHMoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvfSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0LG4scixvLHMsYT1lO2ZvcihzPW5ldyBBcnJheShhLmxlbmd0aCksdD0wLG49YS5sZW5ndGg7dDxuO3QrPTEpe2lmKHI9YVt0XSwiW29iamVjdCBPYmplY3RdIiE9PWkuY2FsbChyKSlyZXR1cm4hMTtpZihvPU9iamVjdC5rZXlzKHIpLDEhPT1vLmxlbmd0aClyZXR1cm4hMTtzW3RdPVtvWzBdLHJbb1swXV1dfXJldHVybiEwfWZ1bmN0aW9uIG8oZSl7aWYobnVsbD09PWUpcmV0dXJuW107dmFyIHQsbixyLG8scyxpPWU7Zm9yKHM9bmV3IEFycmF5KGkubGVuZ3RoKSx0PTAsbj1pLmxlbmd0aDt0PG47dCs9MSlyPWlbdF0sbz1PYmplY3Qua2V5cyhyKSxzW3RdPVtvWzBdLHJbb1swXV1dO3JldHVybiBzfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIiksaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1uZXcgcygidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpyLGNvbnN0cnVjdDpvfSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKTtlLmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lP2U6W119fSl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgdCxuPWU7Zm9yKHQgaW4gbilpZihpLmNhbGwobix0KSYmbnVsbCE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9PWU/ZTp7fX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9bmV3IHMoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6cixjb25zdHJ1Y3Q6b30pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci1jbGllbnQvbm9kZV9tb2R1bGVzL0BreWxlc2hvY2tleS9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIik7ZS5leHBvcnRzPW5ldyByKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZToiIn19KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9Aa3lsZXNob2NrZXkvanMteWFtbC9saWIvanMteWFtbC90eXBlL3RpbWVzdGFtcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsIT09ZSYmKG51bGwhPT1hLmV4ZWMoZSl8fG51bGwhPT1sLmV4ZWMoZSkpfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyLG8scyxpLHUsYyxkLF8scD0wLGY9bnVsbDtpZih0PWEuZXhlYyhlKSxudWxsPT09dCYmKHQ9bC5leGVjKGUpKSxudWxsPT09dCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKG49K3RbMV0scj0rdFsyXS0xLG89K3RbM10sIXRbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4scixvKSk7aWYocz0rdFs0XSxpPSt0WzVdLHU9K3RbNl0sdFs3XSl7Zm9yKHA9dFs3XS5zbGljZSgwLDMpO3AubGVuZ3RoPDM7KXArPSIwIjtwPStwfXJldHVybiB0WzldJiYoYz0rdFsxMF0sZD0rKHRbMTFdfHwwKSxmPTZlNCooNjAqYytkKSwiLSI9PT10WzldJiYoZj0tZikpLF89bmV3IERhdGUoRGF0ZS5VVEMobixyLG8scyxpLHUscCkpLGYmJl8uc2V0VGltZShfLmdldFRpbWUoKS1mKSxffWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9ub2RlX21vZHVsZXMvQGt5bGVzaG9ja2V5L2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIpLGE9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSxsPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIik7ZS5leHBvcnRzPW5ldyBpKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6byxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50OnN9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L25vZGVfbW9kdWxlcy9kZWVwLWV4dGVuZC9saWIvZGVlcC1leHRlbmQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpey8qIQogKiBAZGVzY3JpcHRpb24gUmVjdXJzaXZlIG9iamVjdCBleHRlbmRpbmcKICogQGF1dGhvciBWaWFjaGVzbGF2IExvdHNtYW5vdiA8bG90c21hbm92ODlAZ21haWwuY29tPgogKiBAbGljZW5zZSBNSVQKICoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE4IFZpYWNoZXNsYXYgTG90c21hbm92CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwogKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgogKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCiAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SCiAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgogKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgogKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KZnVuY3Rpb24gbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBEYXRlfHxlIGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIHIoZSl7aWYoZSBpbnN0YW5jZW9mIHQpe3ZhciBuPXQuYWxsb2M/dC5hbGxvYyhlLmxlbmd0aCk6bmV3IHQoZS5sZW5ndGgpO3JldHVybiBlLmNvcHkobiksbn1pZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZS5nZXRUaW1lKCkpO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG5ldyBSZWdFeHAoZSk7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHNpdHVhdGlvbiIpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHMpeyJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWU/QXJyYXkuaXNBcnJheShlKT90W3NdPW8oZSk6bihlKT90W3NdPXIoZSk6dFtzXT1pKHt9LGUpOnRbc109ZX0pLHR9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiJfX3Byb3RvX18iPT09dD92b2lkIDA6ZVt0XX12YXIgaT1lLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPDF8fCJvYmplY3QiIT10eXBlb2YgYXJndW1lbnRzWzBdKXJldHVybiExO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4gYXJndW1lbnRzWzBdO3ZhciBlLHQsYT1hcmd1bWVudHNbMF0sbD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGwuZm9yRWFjaChmdW5jdGlvbihsKXsib2JqZWN0IiE9dHlwZW9mIGx8fG51bGw9PT1sfHxBcnJheS5pc0FycmF5KGwpfHxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3JldHVybiB0PXMoYSx1KSxlPXMobCx1KSxlPT09YT92b2lkIDA6Im9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZT92b2lkKGFbdV09ZSk6QXJyYXkuaXNBcnJheShlKT92b2lkKGFbdV09byhlKSk6bihlKT92b2lkKGFbdV09cihlKSk6Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dHx8QXJyYXkuaXNBcnJheSh0KT92b2lkKGFbdV09aSh7fSxlKSk6dm9pZChhW3VdPWkodCxlKSl9KX0pLGF9fSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIpfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9kaXN0L3N3YWdnZXItdWkuY3NzIjpmdW5jdGlvbihlLHQpe30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvZGlzdC9zd2FnZ2VyLXVpLmpzIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKHQscil7ZS5leHBvcnRzPXIobigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvaW1tdXRhYmxlL2Rpc3QvaW1tdXRhYmxlLmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1tdXRhYmxlLXByb3B0eXBlcy9kaXN0L0ltbXV0YWJsZVByb3BUeXBlcy5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3Jlc2VsZWN0L2xpYi9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3NlcmlhbGl6ZS1lcnJvci9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2RlZXAtZXh0ZW5kL2xpYi9kZWVwLWV4dGVuZC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jb2xsYXBzZS9saWIvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLWNsaWVudC9kaXN0L2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2NvbW1vbm1hcmsvbGliL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzIiksbigiLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWltbXV0YWJsZS1wdXJlLWNvbXBvbmVudC9saWIvcmVhY3QtaW1tdXRhYmxlLXB1cmUtY29tcG9uZW50LmVzLmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vc3JjL3JlYWN0LW1hcmtkb3duLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbGliL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3BsaXQtcGFuZS9pbmRleC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvcmVkdXgtaW1tdXRhYmxlL2Rpc3QvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZW1hcmthYmxlL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9kaXN0L2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvdXJsLXBhcnNlL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMveG1sL2xpYi94bWwuanMiKSxuKCIuL25vZGVfbW9kdWxlcy94bWwtYnV0LXByZXR0aWVyL2Rpc3QvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi95YW1sLmpzIiksbigiLi9ub2RlX21vZHVsZXMvemVuc2Nyb2xsL3plbnNjcm9sbC5qcyIpKX0oMCxmdW5jdGlvbihlLHQscixvLHMsaSxhLGwsdSxjLGQsXyxwLGYsbSxoLGcsYixFLHksdixULEEsQyxPLFMsUixqLHgsTCxEKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtpZihuW3JdKXJldHVybiBuW3JdLmV4cG9ydHM7dmFyIG89bltyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbcl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsdCksby5sPSEwLG8uZXhwb3J0c312YXIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmQ9ZnVuY3Rpb24oZSxuLHIpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLCJhIixuKSxufSx0Lm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHQucD0iL2Rpc3QiLHQodC5zPTU5OSl9KFtmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9yZWFjdC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigyMDApLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSwoMCxvLmRlZmF1bHQpKGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQzKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIG89bigzMzIpLHM9cihvKSxpPW4oMzMxKSxhPXIoaSksbD1uKDMxKSx1PXIobCk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIisodm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCx1LmRlZmF1bHQpKHQpKSk7ZS5wcm90b3R5cGU9KDAsYS5kZWZhdWx0KSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKHMuZGVmYXVsdD8oMCxzLmRlZmF1bHQpKGUsdCk6ZS5fX3Byb3RvX189dCl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKDMxKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCxvLmRlZmF1bHQpKHQpKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvaW1tdXRhYmxlL2Rpc3QvaW1tdXRhYmxlLmpzIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7dHJ5e3ZhciB0PUpTT04ucGFyc2UoZSk7aWYodCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCxOLmRlZmF1bHQpKHQpKSlyZXR1cm4gdH1jYXRjaChlKXt9cmV0dXJuITF9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZChlKT9zZShlKT9lLnRvT2JqZWN0KCk6ZTp7fX1mdW5jdGlvbiBpKGUpe3JldHVybiBlP2UudG9BcnJheT9lLnRvQXJyYXkoKTp1KGUpOltdfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIHNlKGUpP2U6ZSBpbnN0YW5jZW9mIHRlLmRlZmF1bHQuRmlsZT9lOmQoZSk/QXJyYXkuaXNBcnJheShlKT9GLmRlZmF1bHQuU2VxKGUpLm1hcChhKS50b0xpc3QoKTpGLmRlZmF1bHQuT3JkZXJlZE1hcChlKS5tYXAoYSk6ZX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49e307cmV0dXJuKDAsSS5kZWZhdWx0KShlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVbdF19KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBuW3JdPWVbcl0uYmluZChudWxsLHQpfSksbn1mdW5jdGlvbiB1KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIGMoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gZChlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6KDAsTi5kZWZhdWx0KShlKSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX1mdW5jdGlvbiBwKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4oMCxJLmRlZmF1bHQpKGUpLnJlZHVjZShmdW5jdGlvbihuLHIpe3JldHVybiBuW3JdPXQoZVtyXSxyKSxufSx7fSl9ZnVuY3Rpb24gbShlLHQpe3JldHVybigwLEkuZGVmYXVsdCkoZSkucmVkdWNlKGZ1bmN0aW9uKG4scil7dmFyIG89dChlW3JdLHIpO3JldHVybiBvJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1vPyJ1bmRlZmluZWQiOigwLE4uZGVmYXVsdCkobykpJiYoMCxNLmRlZmF1bHQpKG4sbyksbn0se30pfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BhdGNoLHQuZ2V0U3RhdGUsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oZSgpKTp0KG4pfX19fWZ1bmN0aW9uIGcoZSl7dmFyIHQ9ZS5rZXlTZXEoKTtyZXR1cm4gdC5jb250YWlucyhvZSk/b2U6dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIjIiPT09KGUrIiIpWzBdfSkuc29ydCgpLmZpcnN0KCl9ZnVuY3Rpb24gYihlLHQpe2lmKCFGLmRlZmF1bHQuSXRlcmFibGUuaXNJdGVyYWJsZShlKSlyZXR1cm4gRi5kZWZhdWx0Lkxpc3QoKTt2YXIgbj1lLmdldEluKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pO3JldHVybiBGLmRlZmF1bHQuTGlzdC5pc0xpc3Qobik/bjpGLmRlZmF1bHQuTGlzdCgpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZG9jdW1lbnQ7cmV0dXJuIGU/ZS50ZXh0Q29udGVudC5sZW5ndGg+NWUzP2UudGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuLHIsbyxzLGksYT1lLnRleHRDb250ZW50LGw9MCx1PWFbMF0sYz0xLGQ9ZS5pbm5lckhUTUw9IiIsXz0wO3I9bixuPV88NyYmIlxcIj09bj8xOmM7KXtpZihjPXUsdT1hWysrbF0scz1kLmxlbmd0aD4xLCFjfHxfPjgmJiJcbiI9PWN8fFsvXFMvLnRlc3QoYyksMSwxLCEvWyRcd10vLnRlc3QoYyksKCIvIj09bnx8IlxuIj09bikmJnMsJyInPT1uJiZzLCInIj09biYmcyxhW2wtNF0rcituPT0iLS1ceDNlIixyK249PSIqLyJdW19dKWZvcihkJiYoZS5hcHBlbmRDaGlsZChpPXQuY3JlYXRlRWxlbWVudCgic3BhbiIpKS5zZXRBdHRyaWJ1dGUoInN0eWxlIixbImNvbG9yOiAjNTU1OyBmb250LXdlaWdodDogYm9sZDsiLCIiLCIiLCJjb2xvcjogIzU1NTsiLCIiXVtfP188Mz8yOl8+Nj80Ol8+Mz8zOisvXihhKGJzdHJhY3R8bGlhc3xuZHxyZ3VtZW50c3xycmF5fHMobXxzZXJ0KT98dXRvKXxiKGFzZXxlZ2lufG9vbChlYW4pP3xyZWFrfHl0ZSl8Yyhhc2V8YXRjaHxoYXJ8aGVja2VkfGxhc3N8bG9uZXxvbXBsfG9uc3R8b250aW51ZSl8ZGUoYnVnZ2VyfGNpbWFsfGNsYXJlfGYoYXVsdHxlcik/fGluaXR8bChlZ2F0ZXxldGUpPyl8ZG98ZG91YmxlfGUoY2hvfGxzP2lmfGxzZShpZik/fG5kfG5zdXJlfG51bXx2ZW50fHgoY2VwdHxlY3xwKGxpY2l0fG9ydCl8dGUobmRzfG5zaW9ufHJuKSkpfGYoYWxsdGhyb3VnaHxhbHNlfGluYWwobHkpP3xpeGVkfGxvYXR8b3IoZWFjaCk/fHJpZW5kfHJvbXx1bmModGlvbik/KXxnbG9iYWx8Z290b3xndWFyZHxpKGZ8bXAobGVtZW50c3xsaWNpdHxvcnQpfG4oaXR8Y2x1ZGUoX29uY2UpP3xsaW5lfG91dHxzdGFuY2VvZnx0KGVyZmFjZXxlcm5hbCk/KT98cyl8bChhbWJkYXxldHxvY2t8b25nKXxtKGljcm9saWdodHxvZHVsZXx1dGFibGUpfE5hTnxuKGFtZXNwYWNlfGF0aXZlfGV4dHxld3xpbHxvdHx1bGwpfG8oYmplY3R8cGVyYXRvcnxyfHV0fHZlcnJpZGUpfHAoYWNrYWdlfGFyYW1zfHJpdmF0ZXxyb3RlY3RlZHxyb3RvY29sfHVibGljKXxyKGFpc2V8ZShhZG9ubHl8ZG98ZnxnaXN0ZXJ8cGVhdHxxdWlyZShfb25jZSk/fHNjdWV8c3RyaWN0fHRyeXx0dXJuKSl8cyhieXRlfGVhbGVkfGVsZnxob3J0fGlnbmVkfGl6ZW9mfHRhdGljfHRyaW5nfHRydWN0fHVic2NyaXB0fHVwZXJ8eW5jaHJvbml6ZWR8d2l0Y2gpfHQoZW1wbGF0ZXxoZW58aGlzfGhyb3dzP3xyYW5zaWVudHxydWV8cnl8eXBlKGFsaWFzfGRlZnxpZHxuYW1lfG9mKSl8dShuKGNoZWNrZWR8ZGVmKGluZWQpP3xpb258bGVzc3xzaWduZWR8dGlsKXxzZXxzaW5nKXx2KGFyfGlydHVhbHxvaWR8b2xhdGlsZSl8dyhjaGFyX3R8aGVufGhlcmV8aGlsZXxpdGgpfHhvcnx5aWVsZCkkLy50ZXN0KGQpOjBdKSxpLmFwcGVuZENoaWxkKHQuY3JlYXRlVGV4dE5vZGUoZCkpKSxvPV8mJl88Nz9fOm8sZD0iIixfPTExOyFbMSwvW1wve31bKFwtKyo9PD46O3xcXC4sPyEmQH5dLy50ZXN0KGMpLC9bXF0pXS8udGVzdChjKSwvWyRcd10vLnRlc3QoYyksIi8iPT1jJiZvPDImJiI8IiE9biwnIic9PWMsIiciPT1jLGMrdSthW2wrMV0rYVtsKzJdPT0iXHgzYyEtLSIsYyt1PT0iLyoiLGMrdT09Ii8vIiwiIyI9PWNdWy0tX107KTtkKz1jfX0oZSk6IiJ9ZnVuY3Rpb24geShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImtleSIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ri5kZWZhdWx0Lk1hcCgpO2lmKCFGLmRlZmF1bHQuTWFwLmlzTWFwKGUpfHwhZS5zaXplKXJldHVybiBGLmRlZmF1bHQuTGlzdCgpO2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSksdC5sZW5ndGg8MSlyZXR1cm4gZS5tZXJnZShuKTt2YXIgcj1GLmRlZmF1bHQuTGlzdCgpLG89dFswXSxzPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbCx1PSgwLEQuZGVmYXVsdCkoZS5lbnRyaWVzKCkpOyEocz0obD11Lm5leHQoKSkuZG9uZSk7cz0hMCl7dmFyIGM9bC52YWx1ZSxkPSgwLHguZGVmYXVsdCkoYywyKSxfPWRbMF0scD1kWzFdLGY9eShwLHQuc2xpY2UoMSksbi5zZXQobyxfKSk7cj1GLmRlZmF1bHQuTGlzdC5pc0xpc3QoZik/ci5jb25jYXQoZik6ci5wdXNoKGYpfX1jYXRjaChlKXtpPSEwLGE9ZX1maW5hbGx5e3RyeXshcyYmdS5yZXR1cm4mJnUucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9L2ZpbGVuYW1lPSIoW147XSopOz8iL2kuZXhlYyhlKTtyZXR1cm4gbnVsbD09PXQmJih0PS9maWxlbmFtZT0oW147XSopOz8vaS5leGVjKGUpKSxudWxsIT09dCYmdC5sZW5ndGg+MT90WzFdOm51bGx9ZnVuY3Rpb24gVChlKXtyZXR1cm4oMCxWLmRlZmF1bHQpKCgwLEcuZGVmYXVsdCkoZSkpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIFQoZS5yZXBsYWNlKC9cLlteLlwvXSokLywiIikpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlfHwiIj09PWU/IiI6KDAsQi5zYW5pdGl6ZVVybCkoZSl9ZnVuY3Rpb24gTyhlKXtpZighRi5kZWZhdWx0Lk9yZGVyZWRNYXAuaXNPcmRlcmVkTWFwKGUpKXJldHVybiBudWxsO2lmKCFlLnNpemUpcmV0dXJuIG51bGw7dmFyIHQ9ZS5maW5kKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuc3RhcnRzV2l0aCgiMiIpJiYoMCxJLmRlZmF1bHQpKGUuZ2V0KCJjb250ZW50Iil8fHt9KS5sZW5ndGg+MH0pLG49ZS5nZXQoImRlZmF1bHQiKXx8Ri5kZWZhdWx0Lk9yZGVyZWRNYXAoKSxyPShuLmdldCgiY29udGVudCIpfHxGLmRlZmF1bHQuT3JkZXJlZE1hcCgpKS5rZXlTZXEoKS50b0pTKCksbz1yLmxlbmd0aD9uOm51bGw7cmV0dXJuIHR8fG99T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RXh0ZW5zaW9ucz10LmVzY2FwZURlZXBMaW5rUGF0aD10LmNyZWF0ZURlZXBMaW5rUGF0aD10LnNoYWxsb3dFcXVhbEtleXM9dC5idWlsZEZvcm1EYXRhPXQuc29ydGVycz10LmJ0b2E9dC5wYXJzZVNlYXJjaD10LmdldFNhbXBsZVNjaGVtYT10LnZhbGlkYXRlUGFyYW09dC52YWxpZGF0ZVBhdHRlcm49dC52YWxpZGF0ZU1pbkxlbmd0aD10LnZhbGlkYXRlTWF4TGVuZ3RoPXQudmFsaWRhdGVHdWlkPXQudmFsaWRhdGVEYXRlVGltZT10LnZhbGlkYXRlU3RyaW5nPXQudmFsaWRhdGVCb29sZWFuPXQudmFsaWRhdGVGaWxlPXQudmFsaWRhdGVJbnRlZ2VyPXQudmFsaWRhdGVOdW1iZXI9dC52YWxpZGF0ZU1pbmltdW09dC52YWxpZGF0ZU1heGltdW09dC5wcm9wQ2hlY2tlcj10Lm1lbW9pemU9dC5pc0ltbXV0YWJsZT12b2lkIDA7dmFyIFM9bigyNCksUj1yKFMpLGo9bigxMSkseD1yKGopLEw9big3MCksRD1yKEwpLHc9bigyMSksTT1yKHcpLGs9bigzMCksST1yKGspLFA9bigzMSksTj1yKFApO3QuaXNKU09OT2JqZWN0PW8sdC5vYmplY3RpZnk9cyx0LmFycmF5aWZ5PWksdC5mcm9tSlNPcmRlcmVkPWEsdC5iaW5kVG9TdGF0ZT1sLHQubm9ybWFsaXplQXJyYXk9dSx0LmlzRm49Yyx0LmlzT2JqZWN0PWQsdC5pc0Z1bmM9Xyx0LmlzQXJyYXk9cCx0Lm9iak1hcD1mLHQub2JqUmVkdWNlPW0sdC5zeXN0ZW1UaHVua01pZGRsZXdhcmU9aCx0LmRlZmF1bHRTdGF0dXNDb2RlPWcsdC5nZXRMaXN0PWIsdC5oaWdobGlnaHQ9RSx0Lm1hcFRvTGlzdD15LHQuZXh0cmFjdEZpbGVOYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcj12LHQucGFzY2FsQ2FzZT1ULHQucGFzY2FsQ2FzZUZpbGVuYW1lPUEsdC5zYW5pdGl6ZVVybD1DLHQuZ2V0QWNjZXB0Q29udHJvbGxpbmdSZXNwb25zZT1PO3ZhciBIPW4oNyksRj1yKEgpLEI9bigyNzQpLFU9big1NTUpLEc9cihVKSx6PW4oMjY1KSxWPXIoeiksVz1uKDI2MyksWT1yKFcpLHE9bigyNTcpLEs9cihxKSxYPW4oNTcwKSwkPXIoWCksUT1uKDY2KSxKPXIoUSksWj1uKDk2KSxlZT1uKDI3KSx0ZT1yKGVlKSxuZT1uKDU4MSkscmU9cihuZSksb2U9ImRlZmF1bHQiLHNlPXQuaXNJbW11dGFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEYuZGVmYXVsdC5JdGVyYWJsZS5pc0l0ZXJhYmxlKGUpfSxpZT0odC5tZW1vaXplPVkuZGVmYXVsdCx0LnByb3BDaGVja2VyPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdLHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOltdO3JldHVybigwLEkuZGVmYXVsdCkoZSkubGVuZ3RoIT09KDAsSS5kZWZhdWx0KSh0KS5sZW5ndGh8fCgwLCQuZGVmYXVsdCkoZSxmdW5jdGlvbihlLG4pe2lmKHIuaW5jbHVkZXMobikpcmV0dXJuITE7dmFyIG89dFtuXTtyZXR1cm4gRi5kZWZhdWx0Lkl0ZXJhYmxlLmlzSXRlcmFibGUoZSk/IUYuZGVmYXVsdC5pcyhlLG8pOigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOigwLE4uZGVmYXVsdCkoZSkpfHwib2JqZWN0IiE9PSh2b2lkIDA9PT1vPyJ1bmRlZmluZWQiOigwLE4uZGVmYXVsdCkobykpKSYmZSE9PW99KXx8bi5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiEoMCxKLmRlZmF1bHQpKGVbbl0sdFtuXSl9KX0sdC52YWxpZGF0ZU1heGltdW09ZnVuY3Rpb24oZSx0KXtpZihlPnQpcmV0dXJuIlZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIE1heGltdW0ifSksYWU9dC52YWxpZGF0ZU1pbmltdW09ZnVuY3Rpb24oZSx0KXtpZihlPHQpcmV0dXJuIlZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIE1pbmltdW0ifSxsZT10LnZhbGlkYXRlTnVtYmVyPWZ1bmN0aW9uKGUpe2lmKCEvXi0/XGQrKFwuP1xkKyk/JC8udGVzdChlKSlyZXR1cm4iVmFsdWUgbXVzdCBiZSBhIG51bWJlciJ9LHVlPXQudmFsaWRhdGVJbnRlZ2VyPWZ1bmN0aW9uKGUpe2lmKCEvXi0/XGQrJC8udGVzdChlKSlyZXR1cm4iVmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyIn0sY2U9dC52YWxpZGF0ZUZpbGU9ZnVuY3Rpb24oZSl7aWYoZSYmIShlIGluc3RhbmNlb2YgdGUuZGVmYXVsdC5GaWxlKSlyZXR1cm4iVmFsdWUgbXVzdCBiZSBhIGZpbGUifSxkZT10LnZhbGlkYXRlQm9vbGVhbj1mdW5jdGlvbihlKXtpZigidHJ1ZSIhPT1lJiYiZmFsc2UiIT09ZSYmITAhPT1lJiYhMSE9PWUpcmV0dXJuIlZhbHVlIG11c3QgYmUgYSBib29sZWFuIn0sX2U9dC52YWxpZGF0ZVN0cmluZz1mdW5jdGlvbihlKXtpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIlZhbHVlIG11c3QgYmUgYSBzdHJpbmcifSxwZT10LnZhbGlkYXRlRGF0ZVRpbWU9ZnVuY3Rpb24oZSl7aWYoaXNOYU4oRGF0ZS5wYXJzZShlKSkpcmV0dXJuIlZhbHVlIG11c3QgYmUgYSBEYXRlVGltZSJ9LGZlPXQudmFsaWRhdGVHdWlkPWZ1bmN0aW9uKGUpe2lmKGU9ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksIS9eW3soXT9bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfVspfV0/JC8udGVzdChlKSlyZXR1cm4iVmFsdWUgbXVzdCBiZSBhIEd1aWQifSxtZT10LnZhbGlkYXRlTWF4TGVuZ3RoPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg+dClyZXR1cm4iVmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gTWF4TGVuZ3RoIn0saGU9dC52YWxpZGF0ZU1pbkxlbmd0aD1mdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQpcmV0dXJuIlZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIE1pbkxlbmd0aCJ9LGdlPXQudmFsaWRhdGVQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7aWYoIW5ldyBSZWdFeHAodCkudGVzdChlKSlyZXR1cm4iVmFsdWUgbXVzdCBmb2xsb3cgcGF0dGVybiAiK3R9LGJlPSh0LnZhbGlkYXRlUGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHI9W10sbz10JiYiYm9keSI9PT1lLmdldCgiaW4iKT9lLmdldCgidmFsdWVfeG1sIik6ZS5nZXQoInZhbHVlIikscz1lLmdldCgicmVxdWlyZWQiKSxpPW4/ZS5nZXQoInNjaGVtYSIpOmU7aWYoIWkpcmV0dXJuIHI7dmFyIGE9aS5nZXQoIm1heGltdW0iKSxsPWkuZ2V0KCJtaW5pbXVtIiksdT1pLmdldCgidHlwZSIpLGM9aS5nZXQoImZvcm1hdCIpLGQ9aS5nZXQoIm1heExlbmd0aCIpLF89aS5nZXQoIm1pbkxlbmd0aCIpLHA9aS5nZXQoInBhdHRlcm4iKTtpZih1JiYoc3x8bykpe3ZhciBmPSJzdHJpbmciPT09dSYmbyxtPSJhcnJheSI9PT11JiZBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aCxoPSJhcnJheSI9PT11JiZGLmRlZmF1bHQuTGlzdC5pc0xpc3QobykmJm8uY291bnQoKSxnPSJmaWxlIj09PXUmJm8gaW5zdGFuY2VvZiB0ZS5kZWZhdWx0LkZpbGUsYj0iYm9vbGVhbiI9PT11JiYob3x8ITE9PT1vKSxFPSJudW1iZXIiPT09dSYmKG98fDA9PT1vKSx5PSJpbnRlZ2VyIj09PXUmJihvfHwwPT09byk7aWYocyYmIShmfHxtfHxofHxnfHxifHxFfHx5KSlyZXR1cm4gci5wdXNoKCJSZXF1aXJlZCBmaWVsZCBpcyBub3QgcHJvdmlkZWQiKSxyO2lmKHApe3ZhciB2PWdlKG8scCk7diYmci5wdXNoKHYpfWlmKGR8fDA9PT1kKXt2YXIgVD1tZShvLGQpO1QmJnIucHVzaChUKX1pZihfKXt2YXIgQT1oZShvLF8pO0EmJnIucHVzaChBKX1pZihhfHwwPT09YSl7dmFyIEM9aWUobyxhKTtDJiZyLnB1c2goQyl9aWYobHx8MD09PWwpe3ZhciBPPWFlKG8sbCk7TyYmci5wdXNoKE8pfWlmKCJzdHJpbmciPT09dSl7dmFyIFM9dm9pZCAwO2lmKCEoUz0iZGF0ZS10aW1lIj09PWM/cGUobyk6InV1aWQiPT09Yz9mZShvKTpfZShvKSkpcmV0dXJuIHI7ci5wdXNoKFMpfWVsc2UgaWYoImJvb2xlYW4iPT09dSl7dmFyIFI9ZGUobyk7aWYoIVIpcmV0dXJuIHI7ci5wdXNoKFIpfWVsc2UgaWYoIm51bWJlciI9PT11KXt2YXIgaj1sZShvKTtpZighailyZXR1cm4gcjtyLnB1c2goail9ZWxzZSBpZigiaW50ZWdlciI9PT11KXt2YXIgeD11ZShvKTtpZigheClyZXR1cm4gcjtyLnB1c2goeCl9ZWxzZSBpZigiYXJyYXkiPT09dSl7dmFyIEw9dm9pZCAwO2lmKCFvLmNvdW50KCkpcmV0dXJuIHI7TD1pLmdldEluKFsiaXRlbXMiLCJ0eXBlIl0pLG8uZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMDsibnVtYmVyIj09PUw/bj1sZShlKToiaW50ZWdlciI9PT1MP249dWUoZSk6InN0cmluZyI9PT1MJiYobj1fZShlKSksbiYmci5wdXNoKHtpbmRleDp0LGVycm9yOm59KX0pfWVsc2UgaWYoImZpbGUiPT09dSl7dmFyIEQ9Y2Uobyk7aWYoIUQpcmV0dXJuIHI7ci5wdXNoKEQpfX1yZXR1cm4gcn0sdC5nZXRTYW1wbGVTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKC94bWwvLnRlc3QodCkpe2lmKCFlLnhtbHx8IWUueG1sLm5hbWUpe2lmKGUueG1sPWUueG1sfHx7fSwhZS4kJHJlZilyZXR1cm4gZS50eXBlfHxlLml0ZW1zfHxlLnByb3BlcnRpZXN8fGUuYWRkaXRpb25hbFByb3BlcnRpZXM/Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+XG5ceDNjIS0tIFhNTCBleGFtcGxlIGNhbm5vdCBiZSBnZW5lcmF0ZWQgLS1ceDNlJzpudWxsO3ZhciByPWUuJCRyZWYubWF0Y2goL1xTKlwvKFxTKykkLyk7ZS54bWwubmFtZT1yWzFdfXJldHVybigwLFoubWVtb2l6ZWRDcmVhdGVYTUxFeGFtcGxlKShlLG4pfXJldHVybigwLFIuZGVmYXVsdCkoKDAsWi5tZW1vaXplZFNhbXBsZUZyb21TY2hlbWEpKGUsbiksbnVsbCwyKX0sdC5wYXJzZVNlYXJjaD1mdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGUuZGVmYXVsdC5sb2NhdGlvbi5zZWFyY2g7aWYoIXQpcmV0dXJue307aWYoIiIhPXQpe3ZhciBuPXQuc3Vic3RyKDEpLnNwbGl0KCImIik7Zm9yKHZhciByIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHI9bltyXS5zcGxpdCgiPSIpLGVbZGVjb2RlVVJJQ29tcG9uZW50KHJbMF0pXT1kZWNvZGVVUklDb21wb25lbnQoclsxXSkpfXJldHVybiBlfSx0LmJ0b2E9ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwO3JldHVybiBuPXQgaW5zdGFuY2VvZiBlP3Q6bmV3IGUodC50b1N0cmluZygpLCJ1dGYtOCIpLG4udG9TdHJpbmcoImJhc2U2NCIpfSx0LnNvcnRlcnM9e29wZXJhdGlvbnNTb3J0ZXI6e2FscGhhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0KCJwYXRoIikubG9jYWxlQ29tcGFyZSh0LmdldCgicGF0aCIpKX0sbWV0aG9kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0KCJtZXRob2QiKS5sb2NhbGVDb21wYXJlKHQuZ2V0KCJtZXRob2QiKSl9fSx0YWdzU29ydGVyOnthbHBoYTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxvY2FsZUNvbXBhcmUodCl9fX0sdC5idWlsZEZvcm1EYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO3ZvaWQgMCE9PXImJiIiIT09ciYmdC5wdXNoKFtuLCI9IixlbmNvZGVVUklDb21wb25lbnQocikucmVwbGFjZSgvJTIwL2csIisiKV0uam9pbigiIikpfXJldHVybiB0LmpvaW4oIiYiKX0sdC5zaGFsbG93RXF1YWxLZXlzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hISgwLEsuZGVmYXVsdCkobixmdW5jdGlvbihuKXtyZXR1cm4oMCxKLmRlZmF1bHQpKGVbbl0sdFtuXSl9KX0sdC5jcmVhdGVEZWVwTGlua1BhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgU3RyaW5nP2UudHJpbSgpLnJlcGxhY2UoL1xzL2csIl8iKToiIn0pO3QuZXNjYXBlRGVlcExpbmtQYXRoPWZ1bmN0aW9uKGUpe3JldHVybigwLHJlLmRlZmF1bHQpKGJlKGUpKX0sdC5nZXRFeHRlbnNpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybi9eeC0vLnRlc3QodCl9KX19KS5jYWxsKHQsbigzODUpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWltbXV0YWJsZS1wcm9wdHlwZXMvZGlzdC9JbW11dGFibGVQcm9wVHlwZXMuanMiKX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS4xIn07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwO3ZhciBvPW4oMzMwKSxzPXIobyksaT1uKDcwKSxhPXIoaSk7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPVtdLHI9ITAsbz0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciBpLGw9KDAsYS5kZWZhdWx0KShlKTshKHI9KGk9bC5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKGkudmFsdWUpLCF0fHxuLmxlbmd0aCE9PXQpO3I9ITApO31jYXRjaChlKXtvPSEwLHM9ZX1maW5hbGx5e3RyeXshciYmbC5yZXR1cm4mJmwucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IHN9fXJldHVybiBufXJldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYoKDAscy5kZWZhdWx0KShPYmplY3QodCkpKXJldHVybiBlKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjI4KSgid2tzIiksbz1uKDEyMCkscz1uKDE5KS5TeW1ib2wsaT0iZnVuY3Rpb24iPT10eXBlb2YgczsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1pJiZzW2VdfHwoaT9zOm8pKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1yfSxmdW5jdGlvbihlLHQpe3ZhciBuPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciByPW4oMjEpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9by5kZWZhdWx0fHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTA2KSgid2tzIiksbz1uKDc3KSxzPW4oMTYpLlN5bWJvbCxpPSJmdW5jdGlvbiI9PXR5cGVvZiBzOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWkmJnNbZV18fChpP3M6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxOSksbz1uKDM5KSxzPW4oNDApLGk9big0OCksYT1uKDgwKSxsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgdSxjLGQsXyxwPWUmbC5GLGY9ZSZsLkcsbT1lJmwuUyxoPWUmbC5QLGc9ZSZsLkIsYj1mP3I6bT9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsRT1mP286b1t0XXx8KG9bdF09e30pLHk9RS5wcm90b3R5cGV8fChFLnByb3RvdHlwZT17fSk7ZiYmKG49dCk7Zm9yKHUgaW4gbiljPSFwJiZiJiZ2b2lkIDAhPT1iW3VdLGQ9KGM/YjpuKVt1XSxfPWcmJmM/YShkLHIpOmgmJiJmdW5jdGlvbiI9PXR5cGVvZiBkP2EoRnVuY3Rpb24uY2FsbCxkKTpkLGImJmkoYix1LGQsZSZsLlUpLEVbdV0hPWQmJnMoRSx1LF8pLGgmJnlbdV0hPWQmJih5W3VdPWQpfTtyLmNvcmU9byxsLkY9MSxsLkc9MixsLlM9NCxsLlA9OCxsLkI9MTYsbC5XPTMyLGwuVT02NCxsLlI9MTI4LGUuZXhwb3J0cz1sfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxNyksbz1uKDU5KSxzPW4oMzMpLGk9LyIvZyxhPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVN0cmluZyhzKGUpKSxhPSI8Iit0O3JldHVybiIiIT09biYmKGErPSIgIituKyc9IicrU3RyaW5nKHIpLnJlcGxhY2UoaSwiJnF1b3Q7IikrJyInKSxhKyI+IitvKyI8LyIrdCsiPiJ9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O25bZV09dChhKSxyKHIuUCtyLkYqbyhmdW5jdGlvbigpe3ZhciB0PSIiW2VdKCciJyk7cmV0dXJuIHQhPT10LnRvTG93ZXJDYXNlKCl8fHQuc3BsaXQoJyInKS5sZW5ndGg+M30pLCJTdHJpbmciLG4pfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLmdldCgib3BlbmFwaSIpO3JldHVybiEhdCYmdC5zdGFydHNXaXRoKCIzIil9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmdldCgic3dhZ2dlciIpO3JldHVybiEhdCYmdC5zdGFydHNXaXRoKCIyIil9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG4mJm4uc3BlY1NlbGVjdG9ycyYmbi5zcGVjU2VsZWN0b3JzLnNwZWNKc29uP28obi5zcGVjU2VsZWN0b3JzLnNwZWNKc29uKCkpP2MuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGUsKDAsbC5kZWZhdWx0KSh7fSxyLG4se09yaTp0fSkpOmMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQscik6KGNvbnNvbGUud2FybigiT0FTMyB3cmFwcGVyOiBjb3VsZG4ndCBnZXQgc3BlYyIpLG51bGwpfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPW4oMTQpLGw9cihhKTt0LmlzT0FTMz1vLHQuaXNTd2FnZ2VyMj1zLHQuT0FTM0NvbXBvbmVudFdyYXBGYWN0b3J5PWk7dmFyIHU9bigwKSxjPXIodSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzNDApLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgcj1uKDIwMCksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQgaW4gZT8oMCxvLmRlZmF1bHQpKGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTYpLG89bigxMCkscz1uKDQzKSxpPW4oMzYpLGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsLHUsYyxkPWUmYS5GLF89ZSZhLkcscD1lJmEuUyxmPWUmYS5QLG09ZSZhLkIsaD1lJmEuVyxnPV8/bzpvW3RdfHwob1t0XT17fSksYj1nLnByb3RvdHlwZSxFPV8/cjpwP3JbdF06KHJbdF18fHt9KS5wcm90b3R5cGU7XyYmKG49dCk7Zm9yKGwgaW4gbikodT0hZCYmRSYmdm9pZCAwIT09RVtsXSkmJmwgaW4gZ3x8KGM9dT9FW2xdOm5bbF0sZ1tsXT1fJiYiZnVuY3Rpb24iIT10eXBlb2YgRVtsXT9uW2xdOm0mJnU/cyhjLHIpOmgmJkVbbF09PWM/ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCxuLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHQpO2Nhc2UgMjpyZXR1cm4gbmV3IGUodCxuKX1yZXR1cm4gbmV3IGUodCxuLHIpfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIHQucHJvdG90eXBlPWUucHJvdG90eXBlLHR9KGMpOmYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjP3MoRnVuY3Rpb24uY2FsbCxjKTpjLGYmJigoZy52aXJ0dWFsfHwoZy52aXJ0dWFsPXt9KSlbbF09YyxlJmEuUiYmYiYmIWJbbF0mJmkoYixsLGMpKSl9O2EuRj0xLGEuRz0yLGEuUz00LGEuUD04LGEuQj0xNixhLlc9MzIsYS5VPTY0LGEuUj0xMjgsZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzMzkpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI0Niksbz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9cnx8b3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcwKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9e2xvY2F0aW9uOnt9LGhpc3Rvcnk6e30sb3BlbjpmdW5jdGlvbigpe30sY2xvc2U6ZnVuY3Rpb24oKXt9LEZpbGU6ZnVuY3Rpb24oKXt9fTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gZTt0cnl7ZT13aW5kb3c7dmFyIHQ9WyJGaWxlIiwiQmxvYiIsIkZvcm1EYXRhIl0sbj0hMCxyPSExLHM9dm9pZCAwO3RyeXtmb3IodmFyIGksYT0oMCxvLmRlZmF1bHQpKHQpOyEobj0oaT1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGw9aS52YWx1ZTtsIGluIHdpbmRvdyYmKGVbbF09d2luZG93W2xdKX19Y2F0Y2goZSl7cj0hMCxzPWV9ZmluYWxseXt0cnl7IW4mJmEucmV0dXJuJiZhLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBzfX19Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX1yZXR1cm4gZX0oKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjUpLG89bigyMDIpLHM9bigxMDkpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKDMyKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1zKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGkoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQ0KSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIG89bigzMzUpLHM9cihvKSxpPW4oMzM0KSxhPXIoaSksbD0iZnVuY3Rpb24iPT10eXBlb2YgYS5kZWZhdWx0JiYic3ltYm9sIj09dHlwZW9mIHMuZGVmYXVsdD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5kZWZhdWx0JiZlLmNvbnN0cnVjdG9yPT09YS5kZWZhdWx0JiZlIT09YS5kZWZhdWx0LnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07dC5kZWZhdWx0PSJmdW5jdGlvbiI9PXR5cGVvZiBhLmRlZmF1bHQmJiJzeW1ib2wiPT09bChzLmRlZmF1bHQpP2Z1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5kZWZhdWx0JiZlLmNvbnN0cnVjdG9yPT09YS5kZWZhdWx0JiZlIT09YS5kZWZhdWx0LnByb3RvdHlwZT8ic3ltYm9sIjp2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOmwoZSl9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKDQ0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICAiK2UpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjgpLG89big1NCk7ZS5leHBvcnRzPW4oMzIpP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5mKGUsdCxvKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjMifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODIpLG89bigyMjcpO2UuZXhwb3J0cz1uKDU4KT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG49cyhlLHQpO3JldHVybiBvKG4pP246dm9pZCAwfXZhciBvPW4oNDcwKSxzPW4oNTEwKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSk/byhlKTpzKGUpfXZhciBvPW4oMjM1KSxzPW4oNDcyKSxpPW4oNjcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big3Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIwMyksbz1uKDk5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIobyhlKSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxOSksbz1uKDQwKSxzPW4oNjApLGk9bigxMjApKCJzcmMiKSxhPUZ1bmN0aW9uLnRvU3RyaW5nLGw9KCIiK2EpLnNwbGl0KCJ0b1N0cmluZyIpO24oMzkpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbChlKX0sKGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixhKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2Ygbjt1JiYocyhuLCJuYW1lIil8fG8obiwibmFtZSIsdCkpLGVbdF0hPT1uJiYodSYmKHMobixpKXx8byhuLGksZVt0XT8iIitlW3RdOmwuam9pbihTdHJpbmcodCkpKSksZT09PXI/ZVt0XT1uOmE/ZVt0XT9lW3RdPW46byhlLHQsbik6KGRlbGV0ZSBlW3RdLG8oZSx0LG4pKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW2ldfHxhLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjYpLG89ci5TeW1ib2w7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMD09PWU/bDphOihlPU9iamVjdChlKSx1JiZ1IGluIGU/cyhlKTppKGUpKX12YXIgbz1uKDQ5KSxzPW4oNTA5KSxpPW4oNTM5KSxhPSJbb2JqZWN0IE51bGxdIixsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHU9bz9vLnRvU3RyaW5nVGFnOnZvaWQgMDtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMTEpLG89bigxMDEpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM2NykoITApO24oMjA2KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fdCxuPXRoaXMuX2k7cmV0dXJuIG4+PXQubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9cih0LG4pLHRoaXMuX2krPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pfSxmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbig1OSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODMpLG89TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/byhyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGw9PWU/aToib2JqZWN0Ij09dHlwZW9mIGU/YShlKT9zKGVbMF0sZVsxXSk6byhlKTpsKGUpfXZhciBvPW4oNDc0KSxzPW4oNDc1KSxpPW4oMjU5KSxhPW4oMTMpLGw9big1NjcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgdT10W2FdLGM9cj9yKG5bdV0sZVt1XSx1LG4sZSk6dm9pZCAwO3ZvaWQgMD09PWMmJihjPWVbdV0pLGk/cyhuLHUsYyk6byhuLHUsYyl9cmV0dXJuIG59dmFyIG89bigyMzgpLHM9bigyMzkpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtpZigic3RyaW5nIj09dHlwZW9mIGV8fG8oZSkpcmV0dXJuIGU7dmFyIHQ9ZSsiIjtyZXR1cm4iMCI9PXQmJjEvZT09LXM/Ii0wIjp0fXZhciBvPW4oOTEpLHM9MS8wO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZT09PXR8fGUhPT1lJiZ0IT09dH1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGwhPWUmJnMoZS5sZW5ndGgpJiYhbyhlKX12YXIgbz1uKDI2MCkscz1uKDEzNSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lPyIiOm8oZSl9dmFyIG89big0ODMpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJue3R5cGU6ZCxwYXlsb2FkOigwLGMuZGVmYXVsdCkoZSl9fWZ1bmN0aW9uIG8oZSl7cmV0dXJue3R5cGU6XyxwYXlsb2FkOmV9fWZ1bmN0aW9uIHMoZSl7cmV0dXJue3R5cGU6cCxwYXlsb2FkOmV9fWZ1bmN0aW9uIGkoZSl7cmV0dXJue3R5cGU6ZixwYXlsb2FkOmV9fWZ1bmN0aW9uIGEoZSl7cmV0dXJue3R5cGU6bSxwYXlsb2FkOmV9fWZ1bmN0aW9uIGwoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJue3R5cGU6aCxwYXlsb2FkOmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNMRUFSPXQuTkVXX0FVVEhfRVJSPXQuTkVXX1NQRUNfRVJSX0JBVENIPXQuTkVXX1NQRUNfRVJSPXQuTkVXX1RIUk9XTl9FUlJfQkFUQ0g9dC5ORVdfVEhST1dOX0VSUj12b2lkIDAsdC5uZXdUaHJvd25FcnI9cix0Lm5ld1Rocm93bkVyckJhdGNoPW8sdC5uZXdTcGVjRXJyPXMsdC5uZXdTcGVjRXJyQmF0Y2g9aSx0Lm5ld0F1dGhFcnI9YSx0LmNsZWFyPWw7dmFyIHU9bigxMzcpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSh1KSxkPXQuTkVXX1RIUk9XTl9FUlI9ImVycl9uZXdfdGhyb3duX2VyciIsXz10Lk5FV19USFJPV05fRVJSX0JBVENIPSJlcnJfbmV3X3Rocm93bl9lcnJfYmF0Y2giLHA9dC5ORVdfU1BFQ19FUlI9ImVycl9uZXdfc3BlY19lcnIiLGY9dC5ORVdfU1BFQ19FUlJfQkFUQ0g9ImVycl9uZXdfc3BlY19lcnJfYmF0Y2giLG09dC5ORVdfQVVUSF9FUlI9ImVycl9uZXdfYXV0aF9lcnIiLGg9dC5DTEVBUj0iZXJyX2NsZWFyIn0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDMzNyksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigzMjkpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybigwLG8uZGVmYXVsdCkoZSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITB9LGZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyOCkuZixvPW4oMzUpLHM9bigxNSkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhlPW4/ZTplLnByb3RvdHlwZSxzKSYmcihlLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rcikudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCxuKXtuKDM3Mik7Zm9yKHZhciByPW4oMTYpLG89bigzNikscz1uKDQ1KSxpPW4oMTUpKCJ0b1N0cmluZ1RhZyIpLGE9IkNTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsRE9NVG9rZW5MaXN0LERhdGFUcmFuc2Zlckl0ZW1MaXN0LEZpbGVMaXN0LEhUTUxBbGxDb2xsZWN0aW9uLEhUTUxDb2xsZWN0aW9uLEhUTUxGb3JtRWxlbWVudCxIVE1MU2VsZWN0RWxlbWVudCxNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LFNWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LFRleHRUcmFja0xpc3QsVG91Y2hMaXN0Ii5zcGxpdCgiLCIpLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxjPXJbdV0sZD1jJiZjLnByb3RvdHlwZTtkJiYhZFtpXSYmbyhkLGksdSksc1t1XT1zLkFycmF5fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdm9pZCAwPT09dClyZXR1cm4gZTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MCksbz1uKDQ4KSxzPW4oNTkpLGk9bigzMyksYT1uKDEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsPWEoZSksdT1uKGksbCwiIltlXSksYz11WzBdLGQ9dVsxXTtzKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbbF09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZV0odCl9KSYmKG8oU3RyaW5nLnByb3RvdHlwZSxlLGMpLHIoUmVnRXhwLnByb3RvdHlwZSxsLDI9PXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZC5jYWxsKGUsdGhpcyx0KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGQuY2FsbChlLHRoaXMpfSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzgpLG89bigzOTIpLHM9big0MTEpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKDU4KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1zKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGkoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP3I6bikoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzOTQpLG89bigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKG8oZSkpfX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19dmFyIG89big1MjUpLHM9big1MjYpLGk9big1MjcpLGE9big1MjgpLGw9big1MjkpO3IucHJvdG90eXBlLmNsZWFyPW8sci5wcm90b3R5cGUuZGVsZXRlPXMsci5wcm90b3R5cGUuZ2V0PWksci5wcm90b3R5cGUuaGFzPWEsci5wcm90b3R5cGUuc2V0PWwsZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbixyKXt2YXIgbz0tMSxzPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmcyYmKG49ZVsrK29dKTsrK288czspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKG8oZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX12YXIgbz1uKDY2KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbyhlKT9lOnMoZSx0KT9bZV06aShhKGUpKX12YXIgbz1uKDEzKSxzPW4oMTMwKSxpPW4oNTUyKSxhPW4oNjgpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuX19kYXRhX187cmV0dXJuIG8odCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH12YXIgbz1uKDUyMyk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQxKSxvPXIoT2JqZWN0LCJjcmVhdGUiKTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxzKGUpJiZvKGUpPT1pfXZhciBvPW4oNTApLHM9big1MSksaT0iW29iamVjdCBTeW1ib2xdIjtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3JldHVybnt0eXBlOmgscGF5bG9hZDplfX1mdW5jdGlvbiBzKGUpe3JldHVybnt0eXBlOmcscGF5bG9hZDplfX1mdW5jdGlvbiBpKGUpe3JldHVybnt0eXBlOmIscGF5bG9hZDplfX1mdW5jdGlvbiBhKGUpe3JldHVybnt0eXBlOkUscGF5bG9hZDplfX1mdW5jdGlvbiBsKGUpe3JldHVybnt0eXBlOnkscGF5bG9hZDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hdXRob3JpemVSZXF1ZXN0PXQuYXV0aG9yaXplQWNjZXNzQ29kZVdpdGhCYXNpY0F1dGhlbnRpY2F0aW9uPXQuYXV0aG9yaXplQWNjZXNzQ29kZVdpdGhGb3JtUGFyYW1zPXQuYXV0aG9yaXplQXBwbGljYXRpb249dC5hdXRob3JpemVQYXNzd29yZD10LnByZUF1dGhvcml6ZUltcGxpY2l0PXQuQ09ORklHVVJFX0FVVEg9dC5WQUxJREFURT10LkFVVEhPUklaRV9PQVVUSDI9dC5QUkVfQVVUSE9SSVpFX09BVVRIMj10LkxPR09VVD10LkFVVEhPUklaRT10LlNIT1dfQVVUSF9QT1BVUD12b2lkIDA7dmFyIHU9bigyMSksYz1yKHUpLGQ9bigyNCksXz1yKGQpO3Quc2hvd0RlZmluaXRpb25zPW8sdC5hdXRob3JpemU9cyx0LmxvZ291dD1pLHQuYXV0aG9yaXplT2F1dGgyPWEsdC5jb25maWd1cmVBdXRoPWw7dmFyIHA9bigyNyksZj1yKHApLG09big4KSxoPXQuU0hPV19BVVRIX1BPUFVQPSJzaG93X3BvcHVwIixnPXQuQVVUSE9SSVpFPSJhdXRob3JpemUiLGI9dC5MT0dPVVQ9ImxvZ291dCIsRT0odC5QUkVfQVVUSE9SSVpFX09BVVRIMj0icHJlX2F1dGhvcml6ZV9vYXV0aDIiLHQuQVVUSE9SSVpFX09BVVRIMj0iYXV0aG9yaXplX29hdXRoMiIpLHk9KHQuVkFMSURBVEU9InZhbGlkYXRlIix0LkNPTkZJR1VSRV9BVVRIPSJjb25maWd1cmVfYXV0aCIpO3QucHJlQXV0aG9yaXplSW1wbGljaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQuYXV0aEFjdGlvbnMscj10LmVyckFjdGlvbnMsbz1lLmF1dGgscz1lLnRva2VuLGk9ZS5pc1ZhbGlkLGE9by5zY2hlbWEsbD1vLm5hbWUsdT1hLmdldCgiZmxvdyIpO2lmKGRlbGV0ZSBmLmRlZmF1bHQuc3dhZ2dlclVJUmVkaXJlY3RPYXV0aDIsImFjY2Vzc0NvZGUiPT09dXx8aXx8ci5uZXdBdXRoRXJyKHthdXRoSWQ6bCxzb3VyY2U6ImF1dGgiLGxldmVsOiJ3YXJuaW5nIixtZXNzYWdlOiJBdXRob3JpemF0aW9uIG1heSBiZSB1bnNhZmUsIHBhc3NlZCBzdGF0ZSB3YXMgY2hhbmdlZCBpbiBzZXJ2ZXIgUGFzc2VkIHN0YXRlIHdhc24ndCByZXR1cm5lZCBmcm9tIGF1dGggc2VydmVyIn0pLHMuZXJyb3IpcmV0dXJuIHZvaWQgci5uZXdBdXRoRXJyKHthdXRoSWQ6bCxzb3VyY2U6ImF1dGgiLGxldmVsOiJlcnJvciIsbWVzc2FnZTooMCxfLmRlZmF1bHQpKHMpfSk7bi5hdXRob3JpemVPYXV0aDIoe2F1dGg6byx0b2tlbjpzfSl9fSx0LmF1dGhvcml6ZVBhc3N3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmF1dGhBY3Rpb25zLHI9ZS5zY2hlbWEsbz1lLm5hbWUscz1lLnVzZXJuYW1lLGk9ZS5wYXNzd29yZCxhPWUucGFzc3dvcmRUeXBlLGw9ZS5jbGllbnRJZCx1PWUuY2xpZW50U2VjcmV0LGQ9e2dyYW50X3R5cGU6InBhc3N3b3JkIixzY29wZTplLnNjb3Blcy5qb2luKCIgIil9LF89e30scD17fTtyZXR1cm4iYmFzaWMiPT09YT9wLkF1dGhvcml6YXRpb249IkJhc2ljICIrKDAsbS5idG9hKShzKyI6IitpKTooKDAsYy5kZWZhdWx0KShkLHt1c2VybmFtZTpzfSx7cGFzc3dvcmQ6aX0pLCJxdWVyeSI9PT1hPyhsJiYoXy5jbGllbnRfaWQ9bCksdSYmKF8uY2xpZW50X3NlY3JldD11KSk6cC5BdXRob3JpemF0aW9uPSJCYXNpYyAiKygwLG0uYnRvYSkobCsiOiIrdSkpLG4uYXV0aG9yaXplUmVxdWVzdCh7Ym9keTooMCxtLmJ1aWxkRm9ybURhdGEpKGQpLHVybDpyLmdldCgidG9rZW5VcmwiKSxuYW1lOm8saGVhZGVyczpwLHF1ZXJ5Ol8sYXV0aDplfSl9fSx0LmF1dGhvcml6ZUFwcGxpY2F0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmF1dGhBY3Rpb25zLHI9ZS5zY2hlbWEsbz1lLnNjb3BlcyxzPWUubmFtZSxpPWUuY2xpZW50SWQsYT1lLmNsaWVudFNlY3JldCxsPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiKygwLG0uYnRvYSkoaSsiOiIrYSl9LHU9e2dyYW50X3R5cGU6ImNsaWVudF9jcmVkZW50aWFscyIsc2NvcGU6by5qb2luKCIgIil9O3JldHVybiBuLmF1dGhvcml6ZVJlcXVlc3Qoe2JvZHk6KDAsbS5idWlsZEZvcm1EYXRhKSh1KSxuYW1lOnMsdXJsOnIuZ2V0KCJ0b2tlblVybCIpLGF1dGg6ZSxoZWFkZXJzOmx9KX19LHQuYXV0aG9yaXplQWNjZXNzQ29kZVdpdGhGb3JtUGFyYW1zPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYXV0aCxuPWUucmVkaXJlY3RVcmw7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUuYXV0aEFjdGlvbnMsbz10LnNjaGVtYSxzPXQubmFtZSxpPXQuY2xpZW50SWQsYT10LmNsaWVudFNlY3JldCxsPXtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6dC5jb2RlLGNsaWVudF9pZDppLGNsaWVudF9zZWNyZXQ6YSxyZWRpcmVjdF91cmk6bn07cmV0dXJuIHIuYXV0aG9yaXplUmVxdWVzdCh7Ym9keTooMCxtLmJ1aWxkRm9ybURhdGEpKGwpLG5hbWU6cyx1cmw6by5nZXQoInRva2VuVXJsIiksYXV0aDp0fSl9fSx0LmF1dGhvcml6ZUFjY2Vzc0NvZGVXaXRoQmFzaWNBdXRoZW50aWNhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmF1dGgsbj1lLnJlZGlyZWN0VXJsO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLmF1dGhBY3Rpb25zLG89dC5zY2hlbWEscz10Lm5hbWUsaT10LmNsaWVudElkLGE9dC5jbGllbnRTZWNyZXQsbD17QXV0aG9yaXphdGlvbjoiQmFzaWMgIisoMCxtLmJ0b2EpKGkrIjoiK2EpfSx1PXtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6dC5jb2RlLGNsaWVudF9pZDppLHJlZGlyZWN0X3VyaTpufTtyZXR1cm4gci5hdXRob3JpemVSZXF1ZXN0KHtib2R5OigwLG0uYnVpbGRGb3JtRGF0YSkodSksbmFtZTpzLHVybDpvLmdldCgidG9rZW5VcmwiKSxhdXRoOnQsaGVhZGVyczpsfSl9fSx0LmF1dGhvcml6ZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQuZm4scj10LmdldENvbmZpZ3Msbz10LmF1dGhBY3Rpb25zLHM9dC5lcnJBY3Rpb25zLGk9dC5hdXRoU2VsZWN0b3JzLGE9ZS5ib2R5LGw9ZS5xdWVyeSx1PXZvaWQgMD09PWw/e306bCxkPWUuaGVhZGVycyxwPXZvaWQgMD09PWQ/e306ZCxmPWUubmFtZSxtPWUudXJsLGg9ZS5hdXRoLGc9aS5nZXRDb25maWdzKCl8fHt9LGI9Zy5hZGRpdGlvbmFsUXVlcnlTdHJpbmdQYXJhbXMsRT1tO2Zvcih2YXIgeSBpbiBiKW0rPSImIit5KyI9IitlbmNvZGVVUklDb21wb25lbnQoYlt5XSk7dmFyIHY9KDAsYy5kZWZhdWx0KSh7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxwKTtuLmZldGNoKHt1cmw6RSxtZXRob2Q6InBvc3QiLGhlYWRlcnM6dixxdWVyeTp1LGJvZHk6YSxyZXF1ZXN0SW50ZXJjZXB0b3I6cigpLnJlcXVlc3RJbnRlcmNlcHRvcixyZXNwb25zZUludGVyY2VwdG9yOnIoKS5yZXNwb25zZUludGVyY2VwdG9yfSkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1KU09OLnBhcnNlKGUuZGF0YSksbj10JiYodC5lcnJvcnx8IiIpLHI9dCYmKHQucGFyc2VFcnJvcnx8IiIpO3JldHVybiBlLm9rP258fHI/dm9pZCBzLm5ld0F1dGhFcnIoe2F1dGhJZDpmLGxldmVsOiJlcnJvciIsc291cmNlOiJhdXRoIixtZXNzYWdlOigwLF8uZGVmYXVsdCkodCl9KTp2b2lkIG8uYXV0aG9yaXplT2F1dGgyKHthdXRoOmgsdG9rZW46dH0pOnZvaWQgcy5uZXdBdXRoRXJyKHthdXRoSWQ6ZixsZXZlbDoiZXJyb3IiLHNvdXJjZToiYXV0aCIsbWVzc2FnZTplLnN0YXR1c1RleHR9KX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBFcnJvcihlKTtzLm5ld0F1dGhFcnIoe2F1dGhJZDpmLGxldmVsOiJlcnJvciIsc291cmNlOiJhdXRoIixtZXNzYWdlOnQubWVzc2FnZX0pfSl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJue3R5cGU6YSxwYXlsb2FkOigwLGkuZGVmYXVsdCkoe30sZSx0KX19ZnVuY3Rpb24gbyhlKXtyZXR1cm57dHlwZTpsLHBheWxvYWQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVE9HR0xFX0NPTkZJR1M9dC5VUERBVEVfQ09ORklHUz12b2lkIDA7dmFyIHM9bigyMiksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHMpO3QudXBkYXRlPXIsdC50b2dnbGU9bzt2YXIgYT10LlVQREFURV9DT05GSUdTPSJjb25maWdzX3VwZGF0ZSIsbD10LlRPR0dMRV9DT05GSUdTPSJjb25maWdzX3RvZ2dsZSJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm57dHlwZTpsLHBheWxvYWQ6ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm57dHlwZTp1LHBheWxvYWQ6ZX19ZnVuY3Rpb24gcyhlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3JldHVybiBlPSgwLGEubm9ybWFsaXplQXJyYXkpKGUpLHt0eXBlOmQscGF5bG9hZDp7dGhpbmc6ZSxzaG93bjp0fX19ZnVuY3Rpb24gaShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIGU9KDAsYS5ub3JtYWxpemVBcnJheSkoZSkse3R5cGU6YyxwYXlsb2FkOnt0aGluZzplLG1vZGU6dH19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNIT1c9dC5VUERBVEVfTU9ERT10LlVQREFURV9GSUxURVI9dC5VUERBVEVfTEFZT1VUPXZvaWQgMCx0LnVwZGF0ZUxheW91dD1yLHQudXBkYXRlRmlsdGVyPW8sdC5zaG93PXMsdC5jaGFuZ2VNb2RlPWk7dmFyIGE9big4KSxsPXQuVVBEQVRFX0xBWU9VVD0ibGF5b3V0X3VwZGF0ZV9sYXlvdXQiLHU9dC5VUERBVEVfRklMVEVSPSJsYXlvdXRfdXBkYXRlX2ZpbHRlciIsYz10LlVQREFURV9NT0RFPSJsYXlvdXRfdXBkYXRlX21vZGUiLGQ9dC5TSE9XPSJsYXlvdXRfc2hvdyJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybnt0eXBlOmwscGF5bG9hZDp7c2VsZWN0ZWRTZXJ2ZXJVcmw6ZSxuYW1lc3BhY2U6dH19fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS52YWx1ZSxuPWUucGF0aE1ldGhvZDtyZXR1cm57dHlwZTp1LHBheWxvYWQ6e3ZhbHVlOnQscGF0aE1ldGhvZDpufX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnZhbHVlLG49ZS5wYXRoTWV0aG9kO3JldHVybnt0eXBlOmMscGF5bG9hZDp7dmFsdWU6dCxwYXRoTWV0aG9kOm59fX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUudmFsdWUsbj1lLnBhdGgscj1lLm1ldGhvZDtyZXR1cm57dHlwZTpkLHBheWxvYWQ6e3ZhbHVlOnQscGF0aDpuLG1ldGhvZDpyfX19ZnVuY3Rpb24gYShlKXt2YXIgdD1lLnNlcnZlcixuPWUubmFtZXNwYWNlLHI9ZS5rZXksbz1lLnZhbDtyZXR1cm57dHlwZTpfLHBheWxvYWQ6e3NlcnZlcjp0LG5hbWVzcGFjZTpuLGtleTpyLHZhbDpvfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2V0U2VsZWN0ZWRTZXJ2ZXI9cix0LnNldFJlcXVlc3RCb2R5VmFsdWU9byx0LnNldFJlcXVlc3RDb250ZW50VHlwZT1zLHQuc2V0UmVzcG9uc2VDb250ZW50VHlwZT1pLHQuc2V0U2VydmVyVmFyaWFibGVWYWx1ZT1hO3ZhciBsPXQuVVBEQVRFX1NFTEVDVEVEX1NFUlZFUj0ib2FzM19zZXRfc2VydmVycyIsdT10LlVQREFURV9SRVFVRVNUX0JPRFlfVkFMVUU9Im9hczNfc2V0X3JlcXVlc3RfYm9keV92YWx1ZSIsYz10LlVQREFURV9SRVFVRVNUX0NPTlRFTlRfVFlQRT0ib2FzM19zZXRfcmVxdWVzdF9jb250ZW50X3R5cGUiLGQ9dC5VUERBVEVfUkVTUE9OU0VfQ09OVEVOVF9UWVBFPSJvYXMzX3NldF9yZXNwb25zZV9jb250ZW50X3R5cGUiLF89dC5VUERBVEVfU0VSVkVSX1ZBUklBQkxFX1ZBTFVFPSJvYXMzX3NldF9zZXJ2ZXJfdmFyaWFibGVfdmFsdWUifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1wKGUsdCk7aWYobilyZXR1cm4oMCxhLmRlZmF1bHQpKG4se2RlY2xhcmF0aW9uOiEwLGluZGVudDoiXHQifSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWVtb2l6ZWRTYW1wbGVGcm9tU2NoZW1hPXQubWVtb2l6ZWRDcmVhdGVYTUxFeGFtcGxlPXQuc2FtcGxlWG1sRnJvbVNjaGVtYT10LmluZmVyU2NoZW1hPXQuc2FtcGxlRnJvbVNjaGVtYT12b2lkIDAsdC5jcmVhdGVYTUxFeGFtcGxlPW87dmFyIHM9big4KSxpPW4oNTk1KSxhPXIoaSksbD1uKDU4NCksdT1yKGwpLGM9e3N0cmluZzpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxzdHJpbmdfZW1haWw6ZnVuY3Rpb24oKXtyZXR1cm4idXNlckBleGFtcGxlLmNvbSJ9LCJzdHJpbmdfZGF0ZS10aW1lIjpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKX0sbnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LG51bWJlcl9mbG9hdDpmdW5jdGlvbigpe3JldHVybiAwfSxpbnRlZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGJvb2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgZS5kZWZhdWx0fHxlLmRlZmF1bHR9fSxkPWZ1bmN0aW9uKGUpe2U9KDAscy5vYmplY3RpZnkpKGUpO3ZhciB0PWUsbj10LnR5cGUscj10LmZvcm1hdCxvPWNbbisiXyIrcl18fGNbbl07cmV0dXJuKDAscy5pc0Z1bmMpKG8pP28oZSk6IlVua25vd24gVHlwZTogIitlLnR5cGV9LF89dC5zYW1wbGVGcm9tU2NoZW1hPWZ1bmN0aW9uIGUodCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9KDAscy5vYmplY3RpZnkpKHQpLG89ci50eXBlLGk9ci5leGFtcGxlLGE9ci5wcm9wZXJ0aWVzLGw9ci5hZGRpdGlvbmFsUHJvcGVydGllcyx1PXIuaXRlbXMsYz1uLmluY2x1ZGVSZWFkT25seSxfPW4uaW5jbHVkZVdyaXRlT25seTtpZih2b2lkIDAhPT1pKXJldHVybiBpO2lmKCFvKWlmKGEpbz0ib2JqZWN0IjtlbHNle2lmKCF1KXJldHVybjtvPSJhcnJheSJ9aWYoIm9iamVjdCI9PT1vKXt2YXIgcD0oMCxzLm9iamVjdGlmeSkoYSksZj17fTtmb3IodmFyIG0gaW4gcClwW21dLnJlYWRPbmx5JiYhY3x8cFttXS53cml0ZU9ubHkmJiFffHwoZlttXT1lKHBbbV0sbikpO2lmKCEwPT09bClmLmFkZGl0aW9uYWxQcm9wMT17fTtlbHNlIGlmKGwpZm9yKHZhciBoPSgwLHMub2JqZWN0aWZ5KShsKSxnPWUoaCxuKSxiPTE7Yjw0O2IrKylmWyJhZGRpdGlvbmFsUHJvcCIrYl09ZztyZXR1cm4gZn1yZXR1cm4iYXJyYXkiPT09bz9bZSh1LG4pXTp0LmVudW0/dC5kZWZhdWx0P3QuZGVmYXVsdDooMCxzLm5vcm1hbGl6ZUFycmF5KSh0LmVudW0pWzBdOiJmaWxlIiE9PW8/ZCh0KTp2b2lkIDB9LHA9KHQuaW5mZXJTY2hlbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NoZW1hJiYoZT1lLnNjaGVtYSksZS5wcm9wZXJ0aWVzJiYoZS50eXBlPSJvYmplY3QiKSxlfSx0LnNhbXBsZVhtbEZyb21TY2hlbWE9ZnVuY3Rpb24gZSh0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj0oMCxzLm9iamVjdGlmeSkodCksbz1yLnR5cGUsaT1yLnByb3BlcnRpZXMsYT1yLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLGw9ci5pdGVtcyx1PXIuZXhhbXBsZSxjPW4uaW5jbHVkZVJlYWRPbmx5LF89bi5pbmNsdWRlV3JpdGVPbmx5LHA9ci5kZWZhdWx0LGY9e30sbT17fSxoPXQueG1sLGc9aC5uYW1lLGI9aC5wcmVmaXgsRT1oLm5hbWVzcGFjZSx5PXIuZW51bSx2PXZvaWQgMCxUPXZvaWQgMDtpZighbylpZihpfHxhKW89Im9iamVjdCI7ZWxzZXtpZighbClyZXR1cm47bz0iYXJyYXkifWlmKGc9Z3x8Im5vdGFnbmFtZSIsdj0oYj9iKyI6IjoiIikrZyxFJiYobVtiPyJ4bWxuczoiK2I6InhtbG5zIl09RSksImFycmF5Ij09PW8mJmwpe2lmKGwueG1sPWwueG1sfHxofHx7fSxsLnhtbC5uYW1lPWwueG1sLm5hbWV8fGgubmFtZSxoLndyYXBwZWQpcmV0dXJuIGZbdl09W10sQXJyYXkuaXNBcnJheSh1KT91LmZvckVhY2goZnVuY3Rpb24odCl7bC5leGFtcGxlPXQsZlt2XS5wdXNoKGUobCxuKSl9KTpBcnJheS5pc0FycmF5KHApP3AuZm9yRWFjaChmdW5jdGlvbih0KXtsLmRlZmF1bHQ9dCxmW3ZdLnB1c2goZShsLG4pKX0pOmZbdl09W2UobCxuKV0sbSYmZlt2XS5wdXNoKHtfYXR0cjptfSksZjt2YXIgQT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT8odS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wuZXhhbXBsZT10LEEucHVzaChlKGwsbikpfSksQSk6QXJyYXkuaXNBcnJheShwKT8ocC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wuZGVmYXVsdD10LEEucHVzaChlKGwsbikpfSksQSk6ZShsLG4pfWlmKCJvYmplY3QiPT09byl7dmFyIEM9KDAscy5vYmplY3RpZnkpKGkpO2Zbdl09W10sdT11fHx7fTtmb3IodmFyIE8gaW4gQylpZihDLmhhc093blByb3BlcnR5KE8pJiYoIUNbT10ucmVhZE9ubHl8fGMpJiYoIUNbT10ud3JpdGVPbmx5fHxfKSlpZihDW09dLnhtbD1DW09dLnhtbHx8e30sQ1tPXS54bWwuYXR0cmlidXRlKXt2YXIgUz1BcnJheS5pc0FycmF5KENbT10uZW51bSkmJkNbT10uZW51bVswXSxSPUNbT10uZXhhbXBsZSxqPUNbT10uZGVmYXVsdDttW0NbT10ueG1sLm5hbWV8fE9dPXZvaWQgMCE9PVImJlJ8fHZvaWQgMCE9PXVbT10mJnVbT118fHZvaWQgMCE9PWomJmp8fFN8fGQoQ1tPXSl9ZWxzZXtDW09dLnhtbC5uYW1lPUNbT10ueG1sLm5hbWV8fE8sQ1tPXS5leGFtcGxlPXZvaWQgMCE9PUNbT10uZXhhbXBsZT9DW09dLmV4YW1wbGU6dVtPXTt2YXIgeD1lKENbT10pO0FycmF5LmlzQXJyYXkoeCk/Zlt2XT1mW3ZdLmNvbmNhdCh4KTpmW3ZdLnB1c2goeCl9cmV0dXJuITA9PT1hP2Zbdl0ucHVzaCh7YWRkaXRpb25hbFByb3A6IkFueXRoaW5nIGNhbiBiZSBoZXJlIn0pOmEmJmZbdl0ucHVzaCh7YWRkaXRpb25hbFByb3A6ZChhKX0pLG0mJmZbdl0ucHVzaCh7X2F0dHI6bX0pLGZ9cmV0dXJuIFQ9dm9pZCAwIT09dT91OnZvaWQgMCE9PXA/cDpBcnJheS5pc0FycmF5KHkpP3lbMF06ZCh0KSxmW3ZdPW0/W3tfYXR0cjptfSxUXTpULGZ9KTt0Lm1lbW9pemVkQ3JlYXRlWE1MRXhhbXBsZT0oMCx1LmRlZmF1bHQpKG8pLHQubWVtb2l6ZWRTYW1wbGVGcm9tU2NoZW1hPSgwLHUuZGVmYXVsdCkoXyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1YKGUpLnJlcGxhY2UoL1x0L2csIiAgIik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybnt0eXBlOmsscGF5bG9hZDp0fX1mdW5jdGlvbiBzKGUpe3JldHVybnt0eXBlOnEscGF5bG9hZDplfX1mdW5jdGlvbiBpKGUpe3JldHVybnt0eXBlOkkscGF5bG9hZDplfX1mdW5jdGlvbiBhKGUpe3JldHVybnt0eXBlOlAscGF5bG9hZDplfX1mdW5jdGlvbiBsKGUsdCxuLHIsbyl7cmV0dXJue3R5cGU6TixwYXlsb2FkOntwYXRoOmUsdmFsdWU6cixwYXJhbU5hbWU6dCxwYXJhbUluOm4saXNYbWw6b319fWZ1bmN0aW9uIHUoZSl7cmV0dXJue3R5cGU6VyxwYXlsb2FkOntwYXRoTWV0aG9kOmV9fX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJue3R5cGU6WSxwYXlsb2FkOntwYXRoOmUsdmFsdWU6dCxrZXk6ImNvbnN1bWVzX3ZhbHVlIn19fWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm57dHlwZTpZLHBheWxvYWQ6e3BhdGg6ZSx2YWx1ZTp0LGtleToicHJvZHVjZXNfdmFsdWUifX19ZnVuY3Rpb24gXyhlLHQpe3JldHVybnt0eXBlOnoscGF5bG9hZDp7cGF0aDplLG1ldGhvZDp0fX19ZnVuY3Rpb24gcChlLHQpe3JldHVybnt0eXBlOlYscGF5bG9hZDp7cGF0aDplLG1ldGhvZDp0fX19ZnVuY3Rpb24gZihlLHQsbil7cmV0dXJue3R5cGU6SyxwYXlsb2FkOntzY2hlbWU6ZSxwYXRoOnQsbWV0aG9kOm59fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5leGVjdXRlPXQuZXhlY3V0ZVJlcXVlc3Q9dC5sb2dSZXF1ZXN0PXQuc2V0TXV0YXRlZFJlcXVlc3Q9dC5zZXRSZXF1ZXN0PXQuc2V0UmVzcG9uc2U9dC52YWxpZGF0ZVBhcmFtcz10LnJlc29sdmVTcGVjPXQucGFyc2VUb0pzb249dC5TRVRfU0NIRU1FPXQuVVBEQVRFX1JFU09MVkVEPXQuVVBEQVRFX09QRVJBVElPTl9NRVRBX1ZBTFVFPXQuQ0xFQVJfVkFMSURBVEVfUEFSQU1TPXQuQ0xFQVJfUkVRVUVTVD10LkNMRUFSX1JFU1BPTlNFPXQuTE9HX1JFUVVFU1Q9dC5TRVRfTVVUQVRFRF9SRVFVRVNUPXQuU0VUX1JFUVVFU1Q9dC5TRVRfUkVTUE9OU0U9dC5WQUxJREFURV9QQVJBTVM9dC5VUERBVEVfUEFSQU09dC5VUERBVEVfSlNPTj10LlVQREFURV9VUkw9dC5VUERBVEVfU1BFQz12b2lkIDA7dmFyIG09bigxNCksaD1yKG0pLGc9big3MSksYj1yKGcpLEU9bigyMSkseT1yKEUpLHY9bigzMCksVD1yKHYpLEE9bigzMSksQz1yKEEpO3QudXBkYXRlU3BlYz1vLHQudXBkYXRlUmVzb2x2ZWQ9cyx0LnVwZGF0ZVVybD1pLHQudXBkYXRlSnNvblNwZWM9YSx0LmNoYW5nZVBhcmFtPWwsdC5jbGVhclZhbGlkYXRlUGFyYW1zPXUsdC5jaGFuZ2VDb25zdW1lc1ZhbHVlPWMsdC5jaGFuZ2VQcm9kdWNlc1ZhbHVlPWQsdC5jbGVhclJlc3BvbnNlPV8sdC5jbGVhclJlcXVlc3Q9cCx0LnNldFNjaGVtZT1mO3ZhciBPPW4oMjY4KSxTPXIoTyksUj1uKDU5NCksaj1yKFIpLHg9bigxMzcpLEw9cih4KSxEPW4oNTYyKSx3PXIoRCksTT1uKDgpLGs9dC5VUERBVEVfU1BFQz0ic3BlY191cGRhdGVfc3BlYyIsST10LlVQREFURV9VUkw9InNwZWNfdXBkYXRlX3VybCIsUD10LlVQREFURV9KU09OPSJzcGVjX3VwZGF0ZV9qc29uIixOPXQuVVBEQVRFX1BBUkFNPSJzcGVjX3VwZGF0ZV9wYXJhbSIsSD10LlZBTElEQVRFX1BBUkFNUz0ic3BlY192YWxpZGF0ZV9wYXJhbSIsRj10LlNFVF9SRVNQT05TRT0ic3BlY19zZXRfcmVzcG9uc2UiLEI9dC5TRVRfUkVRVUVTVD0ic3BlY19zZXRfcmVxdWVzdCIsVT10LlNFVF9NVVRBVEVEX1JFUVVFU1Q9InNwZWNfc2V0X211dGF0ZWRfcmVxdWVzdCIsRz10LkxPR19SRVFVRVNUPSJzcGVjX2xvZ19yZXF1ZXN0Iix6PXQuQ0xFQVJfUkVTUE9OU0U9InNwZWNfY2xlYXJfcmVzcG9uc2UiLFY9dC5DTEVBUl9SRVFVRVNUPSJzcGVjX2NsZWFyX3JlcXVlc3QiLFc9dC5DTEVBUl9WQUxJREFURV9QQVJBTVM9InNwZWNfY2xlYXJfdmFsaWRhdGVfcGFyYW0iLFk9dC5VUERBVEVfT1BFUkFUSU9OX01FVEFfVkFMVUU9InNwZWNfdXBkYXRlX29wZXJhdGlvbl9tZXRhX3ZhbHVlIixxPXQuVVBEQVRFX1JFU09MVkVEPSJzcGVjX3VwZGF0ZV9yZXNvbHZlZCIsSz10LlNFVF9TQ0hFTUU9InNldF9zY2hlbWUiLFg9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdy5kZWZhdWx0KShlKT9lOiIifSwkPSh0LnBhcnNlVG9Kc29uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LnNwZWNBY3Rpb25zLHI9dC5zcGVjU2VsZWN0b3JzLG89dC5lcnJBY3Rpb25zLHM9ci5zcGVjU3RyLGk9bnVsbDt0cnl7ZT1lfHxzKCksby5jbGVhcih7c291cmNlOiJwYXJzZXIifSksaT1TLmRlZmF1bHQuc2FmZUxvYWQoZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoZSksby5uZXdTcGVjRXJyKHtzb3VyY2U6InBhcnNlciIsbGV2ZWw6ImVycm9yIixtZXNzYWdlOmUucmVhc29uLGxpbmU6ZS5tYXJrJiZlLm1hcmsubGluZT9lLm1hcmsubGluZSsxOnZvaWQgMH0pfXJldHVybiBpJiYib2JqZWN0Ij09PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOigwLEMuZGVmYXVsdCkoaSkpP24udXBkYXRlSnNvblNwZWMoaSk6e319fSx0LnJlc29sdmVTcGVjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW4uc3BlY0FjdGlvbnMsbz1uLnNwZWNTZWxlY3RvcnMscz1uLmVyckFjdGlvbnMsaT1uLmZuLGE9aS5mZXRjaCxsPWkucmVzb2x2ZSx1PWkuQVNULGM9bi5nZXRDb25maWdzLGQ9YygpLF89ZC5tb2RlbFByb3BlcnR5TWFjcm8scD1kLnBhcmFtZXRlck1hY3JvLGY9ZC5yZXF1ZXN0SW50ZXJjZXB0b3IsbT1kLnJlc3BvbnNlSW50ZXJjZXB0b3I7dm9pZCAwPT09ZSYmKGU9by5zcGVjSnNvbigpKSx2b2lkIDA9PT10JiYodD1vLnVybCgpKTt2YXIgaD11LmdldExpbmVOdW1iZXJGb3JQYXRoLGc9by5zcGVjU3RyKCk7cmV0dXJuIGwoe2ZldGNoOmEsc3BlYzplLGJhc2VEb2M6dCxtb2RlbFByb3BlcnR5TWFjcm86XyxwYXJhbWV0ZXJNYWNybzpwLHJlcXVlc3RJbnRlcmNlcHRvcjpmLHJlc3BvbnNlSW50ZXJjZXB0b3I6bX0pLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGVjLG49ZS5lcnJvcnM7aWYocy5jbGVhcih7dHlwZToidGhyb3duIn0pLEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApe3ZhciBvPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLmVycm9yKGUpLGUubGluZT1lLmZ1bGxQYXRoP2goZyxlLmZ1bGxQYXRoKTpudWxsLGUucGF0aD1lLmZ1bGxQYXRoP2UuZnVsbFBhdGguam9pbigiLiIpOm51bGwsZS5sZXZlbD0iZXJyb3IiLGUudHlwZT0idGhyb3duIixlLnNvdXJjZT0icmVzb2x2ZXIiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplLm1lc3NhZ2V9KSxlfSk7cy5uZXdUaHJvd25FcnJCYXRjaChvKX1yZXR1cm4gci51cGRhdGVSZXNvbHZlZCh0KX0pfX0sdC52YWxpZGF0ZVBhcmFtcz1mdW5jdGlvbihlLHQpe3JldHVybnt0eXBlOkgscGF5bG9hZDp7cGF0aE1ldGhvZDplLGlzT0FTMzp0fX19LHQuc2V0UmVzcG9uc2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntwYXlsb2FkOntwYXRoOmUsbWV0aG9kOnQscmVzOm59LHR5cGU6Rn19LHQuc2V0UmVxdWVzdD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3BheWxvYWQ6e3BhdGg6ZSxtZXRob2Q6dCxyZXE6bn0sdHlwZTpCfX0sdC5zZXRNdXRhdGVkUmVxdWVzdD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3BheWxvYWQ6e3BhdGg6ZSxtZXRob2Q6dCxyZXE6bn0sdHlwZTpVfX0sdC5sb2dSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybntwYXlsb2FkOmUsdHlwZTpHfX0sdC5leGVjdXRlUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5mbixyPXQuc3BlY0FjdGlvbnMsbz10LnNwZWNTZWxlY3RvcnMscz10LmdldENvbmZpZ3MsaT10Lm9hczNTZWxlY3RvcnMsYT1lLnBhdGhOYW1lLGw9ZS5tZXRob2QsdT1lLm9wZXJhdGlvbixjPXMoKSxkPWMucmVxdWVzdEludGVyY2VwdG9yLF89Yy5yZXNwb25zZUludGVyY2VwdG9yLHA9dS50b0pTKCk7aWYoZS5jb250ZXh0VXJsPSgwLGouZGVmYXVsdCkoby51cmwoKSkudG9TdHJpbmcoKSxwJiZwLm9wZXJhdGlvbklkP2Uub3BlcmF0aW9uSWQ9cC5vcGVyYXRpb25JZDpwJiZhJiZsJiYoZS5vcGVyYXRpb25JZD1uLm9wSWQocCxhLGwpKSxvLmlzT0FTMygpKXt2YXIgZj1hKyI6IitsO2Uuc2VydmVyPWkuc2VsZWN0ZWRTZXJ2ZXIoZil8fGkuc2VsZWN0ZWRTZXJ2ZXIoKTt2YXIgbT1pLnNlcnZlclZhcmlhYmxlcyh7c2VydmVyOmUuc2VydmVyLG5hbWVzcGFjZTpmfSkudG9KUygpLGg9aS5zZXJ2ZXJWYXJpYWJsZXMoe3NlcnZlcjplLnNlcnZlcn0pLnRvSlMoKTtlLnNlcnZlclZhcmlhYmxlcz0oMCxULmRlZmF1bHQpKG0pLmxlbmd0aD9tOmgsZS5yZXF1ZXN0Q29udGVudFR5cGU9aS5yZXF1ZXN0Q29udGVudFR5cGUoYSxsKSxlLnJlc3BvbnNlQ29udGVudFR5cGU9aS5yZXNwb25zZUNvbnRlbnRUeXBlKGEsbCl8fCIqLyoiO3ZhciBnPWkucmVxdWVzdEJvZHlWYWx1ZShhLGwpOygwLE0uaXNKU09OT2JqZWN0KShnKT9lLnJlcXVlc3RCb2R5PUpTT04ucGFyc2UoZyk6ZS5yZXF1ZXN0Qm9keT1nfXZhciBiPSgwLHkuZGVmYXVsdCkoe30sZSk7Yj1uLmJ1aWxkUmVxdWVzdChiKSxyLnNldFJlcXVlc3QoZS5wYXRoTmFtZSxlLm1ldGhvZCxiKTt2YXIgRT1mdW5jdGlvbih0KXt2YXIgbj1kLmFwcGx5KHRoaXMsW3RdKSxvPSgwLHkuZGVmYXVsdCkoe30sbik7cmV0dXJuIHIuc2V0TXV0YXRlZFJlcXVlc3QoZS5wYXRoTmFtZSxlLm1ldGhvZCxvKSxufTtlLnJlcXVlc3RJbnRlcmNlcHRvcj1FLGUucmVzcG9uc2VJbnRlcmNlcHRvcj1fO3ZhciB2PURhdGUubm93KCk7cmV0dXJuIG4uZXhlY3V0ZShlKS50aGVuKGZ1bmN0aW9uKHQpe3QuZHVyYXRpb249RGF0ZS5ub3coKS12LHIuc2V0UmVzcG9uc2UoZS5wYXRoTmFtZSxlLm1ldGhvZCx0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiByLnNldFJlc3BvbnNlKGUucGF0aE5hbWUsZS5tZXRob2Qse2Vycm9yOiEwLGVycjooMCxMLmRlZmF1bHQpKHQpfSl9KX19LGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5wYXRoLG49ZS5tZXRob2Qscj0oMCxiLmRlZmF1bHQpKGUsWyJwYXRoIiwibWV0aG9kIl0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbz1lLmZuLmZldGNoLHM9ZS5zcGVjU2VsZWN0b3JzLGk9ZS5zcGVjQWN0aW9ucyxhPXMuc3BlYygpLnRvSlMoKSxsPXMub3BlcmF0aW9uU2NoZW1lKHQsbiksdT1zLmNvbnRlbnRUeXBlVmFsdWVzKFt0LG5dKS50b0pTKCksYz11LnJlcXVlc3RDb250ZW50VHlwZSxkPXUucmVzcG9uc2VDb250ZW50VHlwZSxfPS94bWwvaS50ZXN0KGMpLHA9cy5wYXJhbWV0ZXJWYWx1ZXMoW3Qsbl0sXykudG9KUygpO3JldHVybiBpLmV4ZWN1dGVSZXF1ZXN0KCgwLGguZGVmYXVsdCkoe2ZldGNoOm8sc3BlYzphLHBhdGhOYW1lOnQsbWV0aG9kOm4scGFyYW1ldGVyczpwLHJlcXVlc3RDb250ZW50VHlwZTpjLHNjaGVtZTpsLHJlc3BvbnNlQ29udGVudFR5cGU6ZH0scikpfX0pO3QuZXhlY3V0ZT0kfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1Miksbz1uKDE1KSgidG9TdHJpbmdUYWciKSxzPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksaT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixhO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49aSh0PU9iamVjdChlKSxvKSk/bjpzP3IodCk6Ik9iamVjdCI9PShhPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFyZ3VtZW50cyI6YX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICAiK2UpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzcpLG89bigxNikuZG9jdW1lbnQscz1yKG8pJiZyKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzP28uY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgZShmdW5jdGlvbihlLHIpe2lmKHZvaWQgMCE9PXR8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO3Q9ZSxuPXJ9KSx0aGlzLnJlc29sdmU9byh0KSx0aGlzLnJlamVjdD1vKG4pfXZhciBvPW4oNzMpO2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KSxvPW4oMzYyKSxzPW4oMTAxKSxpPW4oMTA1KSgiSUVfUFJPVE8iKSxhPWZ1bmN0aW9uKCl7fSxsPWZ1bmN0aW9uKCl7dmFyIGUsdD1uKDEwMCkoImlmcmFtZSIpLHI9cy5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsbigyMDEpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsZS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksbD1lLkY7ci0tOylkZWxldGUgbC5wcm90b3R5cGVbc1tyXV07cmV0dXJuIGwoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhhLnByb3RvdHlwZT1yKGUpLG49bmV3IGEsYS5wcm90b3R5cGU9bnVsbCxuW2ldPWUpOm49bCgpLHZvaWQgMD09PXQ/bjpvKG4sdCl9fSxmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMDYpKCJrZXlzIiksbz1uKDc3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTYpLG89clsiX19jb3JlLWpzX3NoYXJlZF9fIl18fChyWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvW2VdfHwob1tlXT17fSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/cjpuKShlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEwNyksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKSlyZXR1cm4gZTt2YXIgbixvO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCF0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxNiksbz1uKDEwKSxzPW4oNzQpLGk9bigxMTEpLGE9bigyOCkuZjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9by5TeW1ib2x8fChvLlN5bWJvbD1zP3t9OnIuU3ltYm9sfHx7fSk7Il8iPT1lLmNoYXJBdCgwKXx8ZSBpbiB0fHxhKHQsZSx7dmFsdWU6aS5mKGUpfSl9fSxmdW5jdGlvbihlLHQsbil7dC5mPW4oMTUpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big5OCksbz1uKDE1KSgiaXRlcmF0b3IiKSxzPW4oNDUpO2UuZXhwb3J0cz1uKDEwKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihlKXtpZih2b2lkIDAhPWUpcmV0dXJuIGVbb118fGVbIkBAaXRlcmF0b3IiXXx8c1tyKGUpXX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDU3KSxvPW4oMTIpKCJ0b1N0cmluZ1RhZyIpLHM9IkFyZ3VtZW50cyI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxpPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIHZvaWQgMD09PWU/IlVuZGVmaW5lZCI6bnVsbD09PWU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1pKHQ9T2JqZWN0KGUpLG8pKT9uOnM/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDcpLG89bigxOSkuZG9jdW1lbnQscz1yKG8pJiZyKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzP28uY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEyKSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9Ly4vO3RyeXsiLy4vIltlXSh0KX1jYXRjaChuKXt0cnl7cmV0dXJuIHRbcl09ITEsISIvLi8iW2VdKHQpfWNhdGNoKGUpe319cmV0dXJuITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbjt0aGlzLnByb21pc2U9bmV3IGUoZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWUsbj1yfSksdGhpcy5yZXNvbHZlPW8odCksdGhpcy5yZWplY3Q9byhuKX12YXIgbz1uKDc5KTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4MikuZixvPW4oNjApLHM9bigxMikoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhlPW4/ZTplLnByb3RvdHlwZSxzKSYmcihlLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMjgpKCJrZXlzIiksbz1uKDEyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1vKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIyMSksbz1uKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIodCkpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmcjIituKyIgZG9lc24ndCBhY2NlcHQgcmVnZXghIik7cmV0dXJuIFN0cmluZyhvKGUpKX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDEpLG89bigyNikscz1yKG8sIk1hcCIpO2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX12YXIgbz1uKDUzMCkscz1uKDUzMSksaT1uKDUzMiksYT1uKDUzMyksbD1uKDUzNCk7ci5wcm90b3R5cGUuY2xlYXI9byxyLnByb3RvdHlwZS5kZWxldGU9cyxyLnByb3RvdHlwZS5nZXQ9aSxyLnByb3RvdHlwZS5oYXM9YSxyLnByb3RvdHlwZS5zZXQ9bCxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgbyhlKTt0aGlzLnNpemU9dC5zaXplfXZhciBvPW4oODUpLHM9big1NDYpLGk9big1NDcpLGE9big1NDgpLGw9big1NDkpLHU9big1NTApO3IucHJvdG90eXBlLmNsZWFyPXMsci5wcm90b3R5cGUuZGVsZXRlPWksci5wcm90b3R5cGUuZ2V0PWEsci5wcm90b3R5cGUuaGFzPWwsci5wcm90b3R5cGUuc2V0PXUsZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0NjUpLG89big0OTkpLHM9byhyKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt0PW8odCxlKTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW3ModFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTp2b2lkIDB9dmFyIG89big4OCkscz1uKDY1KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IG8odCkuc2V0KG5ldyBvKGUpKSx0fXZhciBvPW4oMjM0KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMyKSxvPW4oMjY0KSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1zP3IocyxPYmplY3QpOm87ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiEhKHQ9bnVsbD09dD9yOnQpJiYoIm51bWJlciI9PXR5cGVvZiBlfHxvLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH12YXIgcj05MDA3MTk5MjU0NzQwOTkxLG89L14oPzowfFsxLTldXGQqKSQvO2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2lmKG8oZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9ZSYmIXMoZSkpfHxhLnRlc3QoZSl8fCFpLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpfXZhciBvPW4oMTMpLHM9big5MSksaT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxhPS9eXHcqJC87ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8cil9dmFyIHI9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDY3KSxvPW4oNTEpLHM9T2JqZWN0LnByb3RvdHlwZSxpPXMuaGFzT3duUHJvcGVydHksYT1zLnByb3BlcnR5SXNFbnVtZXJhYmxlLGw9cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3I6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJmkuY2FsbChlLCJjYWxsZWUiKSYmIWEuY2FsbChlLCJjYWxsZWUiKX07ZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7dmFyIHI9bigyNiksbz1uKDU3MSkscz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LGk9cyYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPWkmJmkuZXhwb3J0cz09PXMsbD1hP3IuQnVmZmVyOnZvaWQgMCx1PWw/bC5pc0J1ZmZlcjp2b2lkIDAsYz11fHxvO2UuZXhwb3J0cz1jfSkuY2FsbCh0LG4oMTM2KShlKSl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9cn12YXIgcj05MDA3MTk5MjU0NzQwOTkxO2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3NlcmlhbGl6ZS1lcnJvci9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWV9KS5qb2luKCIgIikudHJpbSgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNvbGxhcHNlPXQuTGluaz10LlNlbGVjdD10LklucHV0PXQuVGV4dEFyZWE9dC5CdXR0b249dC5Sb3c9dC5Db2w9dC5Db250YWluZXI9dm9pZCAwO3ZhciBzPW4oMTQpLGk9cihzKSxhPW4oNzEpLGw9cihhKSx1PW4oNCksYz1yKHUpLGQ9bigyKSxfPXIoZCkscD1uKDMpLGY9cihwKSxtPW4oNiksaD1yKG0pLGc9big1KSxiPXIoZyksRT1uKDApLHk9cihFKSx2PW4oMSksVD1yKHYpLEE9bigyNjkpOyh0LkNvbnRhaW5lcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsXy5kZWZhdWx0KSh0aGlzLHQpLCgwLGguZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmZ1bGxzY3JlZW4sbj1lLmZ1bGwscj0oMCxsLmRlZmF1bHQpKGUsWyJmdWxsc2NyZWVuIiwiZnVsbCJdKTtpZih0KXJldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIscik7dmFyIHM9InN3YWdnZXItY29udGFpbmVyIisobj8iLWZ1bGwiOiIiKTtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLCgwLGkuZGVmYXVsdCkoe30scix7Y2xhc3NOYW1lOm8oci5jbGFzc05hbWUscyl9KSl9fV0pLHR9KHkuZGVmYXVsdC5Db21wb25lbnQpKS5wcm9wVHlwZXM9e2Z1bGxzY3JlZW46VC5kZWZhdWx0LmJvb2wsZnVsbDpULmRlZmF1bHQuYm9vbCxjbGFzc05hbWU6VC5kZWZhdWx0LnN0cmluZ307dmFyIEM9e21vYmlsZToiIix0YWJsZXQ6Ii10YWJsZXQiLGRlc2t0b3A6Ii1kZXNrdG9wIixsYXJnZToiLWhkIn07KHQuQ29sPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxfLmRlZmF1bHQpKHRoaXMsdCksKDAsaC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaGlkZSxuPWUua2VlcENvbnRlbnRzLHI9KGUubW9iaWxlLGUudGFibGV0LGUuZGVza3RvcCxlLmxhcmdlLCgwLGwuZGVmYXVsdCkoZSxbImhpZGUiLCJrZWVwQ29udGVudHMiLCJtb2JpbGUiLCJ0YWJsZXQiLCJkZXNrdG9wIiwibGFyZ2UiXSkpO2lmKHQmJiFuKXJldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCk7dmFyIHM9W107Zm9yKHZhciBhIGluIEMpaWYoQy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHU9Q1thXTtpZihhIGluIHRoaXMucHJvcHMpe3ZhciBjPXRoaXMucHJvcHNbYV07aWYoYzwxKXtzLnB1c2goIm5vbmUiK3UpO2NvbnRpbnVlfXMucHVzaCgiYmxvY2siK3UpLHMucHVzaCgiY29sLSIrYyt1KX19dmFyIGQ9by5hcHBseSh2b2lkIDAsW3IuY2xhc3NOYW1lXS5jb25jYXQocykpO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIsKDAsaS5kZWZhdWx0KSh7fSxyLHtzdHlsZTp7ZGlzcGxheTp0PyJub25lIjpudWxsfSxjbGFzc05hbWU6ZH0pKX19XSksdH0oeS5kZWZhdWx0LkNvbXBvbmVudCkpLnByb3BUeXBlcz17aGlkZTpULmRlZmF1bHQuYm9vbCxrZWVwQ29udGVudHM6VC5kZWZhdWx0LmJvb2wsbW9iaWxlOlQuZGVmYXVsdC5udW1iZXIsdGFibGV0OlQuZGVmYXVsdC5udW1iZXIsZGVza3RvcDpULmRlZmF1bHQubnVtYmVyLGxhcmdlOlQuZGVmYXVsdC5udW1iZXIsY2xhc3NOYW1lOlQuZGVmYXVsdC5zdHJpbmd9LCh0LlJvdz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsXy5kZWZhdWx0KSh0aGlzLHQpLCgwLGguZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IiwoMCxpLmRlZmF1bHQpKHt9LHRoaXMucHJvcHMse2NsYXNzTmFtZTpvKHRoaXMucHJvcHMuY2xhc3NOYW1lLCJ3cmFwcGVyIil9KSl9fV0pLHR9KHkuZGVmYXVsdC5Db21wb25lbnQpKS5wcm9wVHlwZXM9e2NsYXNzTmFtZTpULmRlZmF1bHQuc3RyaW5nfTt2YXIgTz10LkJ1dHRvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsXy5kZWZhdWx0KSh0aGlzLHQpLCgwLGguZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwoMCxpLmRlZmF1bHQpKHt9LHRoaXMucHJvcHMse2NsYXNzTmFtZTpvKHRoaXMucHJvcHMuY2xhc3NOYW1lLCJidXR0b24iKX0pKX19XSksdH0oeS5kZWZhdWx0LkNvbXBvbmVudCk7Ty5wcm9wVHlwZXM9e2NsYXNzTmFtZTpULmRlZmF1bHQuc3RyaW5nfSxPLmRlZmF1bHRQcm9wcz17Y2xhc3NOYW1lOiIifTt2YXIgUz0odC5UZXh0QXJlYT1mdW5jdGlvbihlKXtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIixlKX0sdC5JbnB1dD1mdW5jdGlvbihlKXtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImlucHV0IixlKX0sdC5TZWxlY3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4peygwLF8uZGVmYXVsdCkodGhpcyx0KTt2YXIgcj0oMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSxuKSk7Ui5jYWxsKHIpO3ZhciBvPXZvaWQgMDtyZXR1cm4gbz1lLnZhbHVlP2UudmFsdWU6ZS5tdWx0aXBsZT9bIiJdOiIiLHIuc3RhdGU9e3ZhbHVlOm99LHJ9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFsbG93ZWRWYWx1ZXMsbj1lLm11bHRpcGxlLHI9ZS5hbGxvd0VtcHR5VmFsdWUsbz10aGlzLnN0YXRlLnZhbHVlLnRvSlM/dGhpcy5zdGF0ZS52YWx1ZS50b0pTKCk6dGhpcy5zdGF0ZS52YWx1ZTtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIse2NsYXNzTmFtZTp0aGlzLnByb3BzLmNsYXNzTmFtZSxtdWx0aXBsZTpuLHZhbHVlOm8sb25DaGFuZ2U6dGhpcy5vbkNoYW5nZX0scj95LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgib3B0aW9uIix7dmFsdWU6IiJ9LCItLSIpOm51bGwsdC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse2tleTp0LHZhbHVlOlN0cmluZyhlKX0sU3RyaW5nKGUpKX0pKX19XSksdH0oeS5kZWZhdWx0LkNvbXBvbmVudCkpO1MucHJvcFR5cGVzPXthbGxvd2VkVmFsdWVzOlQuZGVmYXVsdC5hcnJheSx2YWx1ZTpULmRlZmF1bHQuYW55LG9uQ2hhbmdlOlQuZGVmYXVsdC5mdW5jLG11bHRpcGxlOlQuZGVmYXVsdC5ib29sLGFsbG93RW1wdHlWYWx1ZTpULmRlZmF1bHQuYm9vbCxjbGFzc05hbWU6VC5kZWZhdWx0LnN0cmluZ30sUy5kZWZhdWx0UHJvcHM9e211bHRpcGxlOiExLGFsbG93RW1wdHlWYWx1ZTohMH07dmFyIFI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49ZS5wcm9wcyxyPW4ub25DaGFuZ2Usbz1uLm11bHRpcGxlLHM9W10uc2xpY2UuY2FsbCh0LnRhcmdldC5vcHRpb25zKSxpPXZvaWQgMDtpPW8/cy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KTp0LnRhcmdldC52YWx1ZSxlLnNldFN0YXRlKHt2YWx1ZTppfSksciYmcihpKX19Oyh0Lkxpbms9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLCgwLGkuZGVmYXVsdCkoe30sdGhpcy5wcm9wcyx7Y2xhc3NOYW1lOm8odGhpcy5wcm9wcy5jbGFzc05hbWUsImxpbmsiKX0pKX19XSksdH0oeS5kZWZhdWx0LkNvbXBvbmVudCkpLnByb3BUeXBlcz17Y2xhc3NOYW1lOlQuZGVmYXVsdC5zdHJpbmd9O3ZhciBqPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7aGVpZ2h0OiJhdXRvIixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH19LCIgIix0LCIgIil9O2oucHJvcFR5cGVzPXtjaGlsZHJlbjpULmRlZmF1bHQubm9kZX07dmFyIHg9dC5Db2xsYXBzZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsXy5kZWZhdWx0KSh0aGlzLHQpLCgwLGguZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToicmVuZGVyTm90QW5pbWF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuaXNPcGVuZWQ/eS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaixudWxsLHRoaXMucHJvcHMuY2hpbGRyZW4pOnkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJub3NjcmlwdCIsbnVsbCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYW5pbWF0ZWQsbj1lLmlzT3BlbmVkLHI9ZS5jaGlsZHJlbjtyZXR1cm4gdD8ocj1uP3I6bnVsbCx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLkNvbGxhcHNlLHtpc09wZW5lZDpufSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLG51bGwscikpKTp0aGlzLnJlbmRlck5vdEFuaW1hdGVkKCl9fV0pLHR9KHkuZGVmYXVsdC5Db21wb25lbnQpO3gucHJvcFR5cGVzPXtpc09wZW5lZDpULmRlZmF1bHQuYm9vbCxjaGlsZHJlbjpULmRlZmF1bHQubm9kZS5pc1JlcXVpcmVkLGFuaW1hdGVkOlQuZGVmYXVsdC5ib29sfSx4LmRlZmF1bHRQcm9wcz17aXNPcGVuZWQ6ITEsYW5pbWF0ZWQ6ITF9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE0KSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDU4NiksRT1yKGIpLHk9big5KSx2PXIoeSksVD1uKDEpLEE9cihUKSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxsPTA7bDxzO2wrKylpW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gbj1yPSgwLHAuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldE1vZGVsTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZigiIy9kZWZpbml0aW9ucy8iKT9lLnJlcGxhY2UoL14uKiNcL2RlZmluaXRpb25zXC8vLCIiKTotMSE9PWUuaW5kZXhPZigiIy9jb21wb25lbnRzL3NjaGVtYXMvIik/ZS5yZXBsYWNlKCIjL2NvbXBvbmVudHMvc2NoZW1hcy8iLCIiKTp2b2lkIDB9LHIuZ2V0UmVmU2NoZW1hPWZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLnNwZWNTZWxlY3RvcnMuZmluZERlZmluaXRpb24oZSl9LG89biwoMCxwLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmdldENvbXBvbmVudCxuPWUuZ2V0Q29uZmlncyxyPWUuc3BlY1NlbGVjdG9ycyxvPWUuc2NoZW1hLGk9ZS5yZXF1aXJlZCxhPWUubmFtZSxsPWUuaXNSZWYsdT1lLnNwZWNQYXRoLGM9dCgiT2JqZWN0TW9kZWwiKSxkPXQoIkFycmF5TW9kZWwiKSxfPXQoIlByaW1pdGl2ZU1vZGVsIikscD0ib2JqZWN0IixmPW8mJm8uZ2V0KCIkJHJlZiIpOyFhJiZmJiYoYT10aGlzLmdldE1vZGVsTmFtZShmKSksIW8mJmYmJihvPXRoaXMuZ2V0UmVmU2NoZW1hKGEpKTt2YXIgbT1yLmlzT0FTMygpJiZvLmdldCgiZGVwcmVjYXRlZCIpO3N3aXRjaChsPXZvaWQgMCE9PWw/bDohIWYscD1vJiZvLmdldCgidHlwZSIpfHxwKXtjYXNlIm9iamVjdCI6cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMsKDAscy5kZWZhdWx0KSh7Y2xhc3NOYW1lOiJvYmplY3QifSx0aGlzLnByb3BzLHtzcGVjUGF0aDp1LGdldENvbmZpZ3M6bixzY2hlbWE6byxuYW1lOmEsZGVwcmVjYXRlZDptLGlzUmVmOmx9KSk7Y2FzZSJhcnJheSI6cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQsKDAscy5kZWZhdWx0KSh7Y2xhc3NOYW1lOiJhcnJheSJ9LHRoaXMucHJvcHMse2dldENvbmZpZ3M6bixzY2hlbWE6byxuYW1lOmEsZGVwcmVjYXRlZDptLHJlcXVpcmVkOml9KSk7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOmNhc2UiYm9vbGVhbiI6ZGVmYXVsdDpyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXywoMCxzLmRlZmF1bHQpKHt9LHRoaXMucHJvcHMse2dldENvbXBvbmVudDp0LGdldENvbmZpZ3M6bixzY2hlbWE6byxuYW1lOmEsZGVwcmVjYXRlZDptLHJlcXVpcmVkOml9KSl9fX1dKSx0fShFLmRlZmF1bHQpO0MucHJvcFR5cGVzPXtzY2hlbWE6di5kZWZhdWx0Lm9yZGVyZWRNYXAuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6QS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRDb25maWdzOkEuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpBLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbmFtZTpBLmRlZmF1bHQuc3RyaW5nLGlzUmVmOkEuZGVmYXVsdC5ib29sLHJlcXVpcmVkOkEuZGVmYXVsdC5ib29sLGV4cGFuZERlcHRoOkEuZGVmYXVsdC5udW1iZXIsZGVwdGg6QS5kZWZhdWx0Lm51bWJlcixzcGVjUGF0aDp2LmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9Q30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PWUuc291cmNlLG49bmV3IHAuZGVmYXVsdCh7aHRtbDohMCx0eXBvZ3JhcGhlcjohMCxicmVha3M6ITAsbGlua2lmeTohMCxsaW5rVGFyZ2V0OiJfYmxhbmsifSkucmVuZGVyKHQpLHI9cyhuKTtyZXR1cm4gdCYmbiYmcj91LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXJrZG93biIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpyfX0pOm51bGx9ZnVuY3Rpb24gcyhlKXtyZXR1cm4oMCxtLmRlZmF1bHQpKGUsaCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMTQpLGE9cihpKTt0LnNhbml0aXplcj1zO3ZhciBsPW4oMCksdT1yKGwpLGM9bigxKSxkPXIoYyksXz1uKDU5MikscD1yKF8pLGY9big1OTMpLG09cihmKTtvLnByb3BUeXBlcz17c291cmNlOmQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PW87dmFyIGg9e2FsbG93ZWRUYWdzOm0uZGVmYXVsdC5kZWZhdWx0cy5hbGxvd2VkVGFncy5jb25jYXQoWyJoMSIsImgyIiwiaW1nIiwic3BhbiJdKSxhbGxvd2VkQXR0cmlidXRlczooMCxhLmRlZmF1bHQpKHt9LG0uZGVmYXVsdC5kZWZhdWx0cy5hbGxvd2VkQXR0cmlidXRlcyx7aW1nOm0uZGVmYXVsdC5kZWZhdWx0cy5hbGxvd2VkQXR0cmlidXRlcy5pbWcuY29uY2F0KFsidGl0bGUiXSksdGQ6WyJjb2xzcGFuIl0sIioiOlsiY2xhc3MiXX0pLHRleHRGaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvJnF1b3Q7L2csJyInKX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOCksbz1uKDU3Nyk7by5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZigiLi9pbmRleC5qcyIhPT10KXt2YXIgbj1vKHQpO2UuZXhwb3J0c1soMCxyLnBhc2NhbENhc2VGaWxlbmFtZSkodCldPW4uZGVmYXVsdD9uLmRlZmF1bHQ6bn19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7ZnVuY3Rpb24gbihlLHQsbyl7aWYoIWUpcmV0dXJuIG8mJm8uc3RhcnRfbWFyaz9vLnN0YXJ0X21hcmsubGluZTowO2lmKHQubGVuZ3RoJiZlLnRhZz09PXkpZm9yKHI9MDtyPGUudmFsdWUubGVuZ3RoO3IrKyl7dmFyIHM9ZS52YWx1ZVtyXSxpPXNbMF0sYT1zWzFdO2lmKGkudmFsdWU9PT10WzBdKXJldHVybiBuKGEsdC5zbGljZSgxKSxlKTtpZihpLnZhbHVlPT09dFswXS5yZXBsYWNlKC9cWy4qLywiIikpe3ZhciBsPXBhcnNlSW50KHRbMF0ubWF0Y2goL1xbKC4qKVxdLylbMV0pO2lmKDE9PT1hLnZhbHVlLmxlbmd0aCYmMCE9PWwmJmwpdmFyIHU9KDAsZy5kZWZhdWx0KShhLnZhbHVlWzBdLHt2YWx1ZTpsLnRvU3RyaW5nKCl9KTtlbHNlIHZhciB1PWEudmFsdWVbbF07cmV0dXJuIG4odSx0LnNsaWNlKDEpLGEudmFsdWUpfX1pZih0Lmxlbmd0aCYmZS50YWc9PT12KXt2YXIgYz1lLnZhbHVlW3RbMF1dO2lmKGMmJmMudGFnKXJldHVybiBuKGMsdC5zbGljZSgxKSxlLnZhbHVlKX1yZXR1cm4gZS50YWchPT15fHxBcnJheS5pc0FycmF5KG8pP2Uuc3RhcnRfbWFyay5saW5lKzE6ZS5zdGFydF9tYXJrLmxpbmV9aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInlhbWwgc2hvdWxkIGJlIGEgc3RyaW5nIik7aWYoISgwLG0uZGVmYXVsdCkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigicGF0aCBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO3ZhciByPTA7cmV0dXJuIG4oRShlKSx0KX1mdW5jdGlvbiBzKGUsdCl7ZnVuY3Rpb24gbihlLHMpe2lmKGUudGFnPT09eSlmb3Iobz0wO288ZS52YWx1ZS5sZW5ndGg7bysrKXt2YXIgaT1lLnZhbHVlW29dLGE9aVswXSxsPWlbMV07aWYoYS52YWx1ZT09PXRbMF0pcmV0dXJuIHQuc2hpZnQoKSxuKGwsYSl9aWYoZS50YWc9PT12KXt2YXIgdT1lLnZhbHVlW3RbMF1dO2lmKHUmJnUudGFnKXJldHVybiB0LnNoaWZ0KCksbih1LHMpfWlmKHQubGVuZ3RoKXJldHVybiByO3ZhciBjPXtzdGFydDp7bGluZTplLnN0YXJ0X21hcmsubGluZSxjb2x1bW46ZS5zdGFydF9tYXJrLmNvbHVtbixwb2ludGVyOmUuc3RhcnRfbWFyay5wb2ludGVyfSxlbmQ6e2xpbmU6ZS5lbmRfbWFyay5saW5lLGNvbHVtbjplLmVuZF9tYXJrLmNvbHVtbixwb2ludGVyOmUuZW5kX21hcmsucG9pbnRlcn19O3JldHVybiBzJiYoYy5rZXlfc3RhcnQ9e2xpbmU6cy5zdGFydF9tYXJrLmxpbmUsY29sdW1uOnMuc3RhcnRfbWFyay5jb2x1bW4scG9pbnRlcjpzLnN0YXJ0X21hcmsucG9pbnRlcn0sYy5rZXlfZW5kPXtsaW5lOnMuZW5kX21hcmsubGluZSxjb2x1bW46cy5lbmRfbWFyay5jb2x1bW4scG9pbnRlcjpzLmVuZF9tYXJrLnBvaW50ZXJ9KSxjfWlmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ5YW1sIHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKCEoMCxtLmRlZmF1bHQpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoInBhdGggc2hvdWxkIGJlIGFuIGFycmF5IG9mIHN0cmluZ3MiKTt2YXIgcj17c3RhcnQ6e2xpbmU6LTEsY29sdW1uOi0xfSxlbmQ6e2xpbmU6LTEsY29sdW1uOi0xfX0sbz0wO3JldHVybiBuKEUoZSkpfWZ1bmN0aW9uIGkoZSx0KXtmdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuc3RhcnRfbWFyay5saW5lPT09ZS5lbmRfbWFyay5saW5lP3QubGluZT09PWUuc3RhcnRfbWFyay5saW5lJiZlLnN0YXJ0X21hcmsuY29sdW1uPD10LmNvbHVtbiYmZS5lbmRfbWFyay5jb2x1bW4+PXQuY29sdW1uOnQubGluZT09PWUuc3RhcnRfbWFyay5saW5lP3QuY29sdW1uPj1lLnN0YXJ0X21hcmsuY29sdW1uOnQubGluZT09PWUuZW5kX21hcmsubGluZT90LmNvbHVtbjw9ZS5lbmRfbWFyay5jb2x1bW46ZS5zdGFydF9tYXJrLmxpbmU8dC5saW5lJiZlLmVuZF9tYXJrLmxpbmU+dC5saW5lfXZhciBzPTA7aWYoIWV8fC0xPT09W3ksdl0uaW5kZXhPZihlLnRhZykpcmV0dXJuIG87aWYoZS50YWc9PT15KWZvcihzPTA7czxlLnZhbHVlLmxlbmd0aDtzKyspe3ZhciBpPWUudmFsdWVbc10sYT1pWzBdLGw9aVsxXTtpZihyKGEpKXJldHVybiBvO2lmKHIobCkpcmV0dXJuIG8ucHVzaChhLnZhbHVlKSxuKGwpfWlmKGUudGFnPT09dilmb3Iocz0wO3M8ZS52YWx1ZS5sZW5ndGg7cysrKXt2YXIgdT1lLnZhbHVlW3NdO2lmKHIodSkpcmV0dXJuIG8ucHVzaChzLnRvU3RyaW5nKCkpLG4odSl9cmV0dXJuIG99aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInlhbWwgc2hvdWxkIGJlIGEgc3RyaW5nIik7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCxkLmRlZmF1bHQpKHQpKXx8Im51bWJlciIhPXR5cGVvZiB0LmxpbmV8fCJudW1iZXIiIT10eXBlb2YgdC5jb2x1bW4pdGhyb3cgbmV3IFR5cGVFcnJvcigicG9zaXRpb24gc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIGxpbmUgYW5kIGNvbHVtbiBwcm9wZXJ0aWVzIik7dHJ5e3ZhciByPUUoZSl9Y2F0Y2gobil7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkVycm9yIGNvbXBvc2luZyBBU1QiLG4pLGNvbnNvbGUuZXJyb3IoIlByb2JsZW0gYXJlYTpcbiIsZS5zcGxpdCgiXG4iKS5zbGljZSh0LmxpbmUtNSx0LmxpbmUrNSkuam9pbigiXG4iKSksbnVsbH12YXIgbz1bXTtyZXR1cm4gbihyKX1mdW5jdGlvbiBhKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIG5ldyB1LmRlZmF1bHQoZnVuY3Rpb24odCl7cmV0dXJuIHQoZS5hcHBseSh2b2lkIDAsbikpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldExpbmVOdW1iZXJGb3JQYXRoQXN5bmM9dC5wb3NpdGlvblJhbmdlRm9yUGF0aEFzeW5jPXQucGF0aEZvclBvc2l0aW9uQXN5bmM9dm9pZCAwO3ZhciBsPW4oMzMzKSx1PXIobCksYz1uKDMxKSxkPXIoYyk7dC5nZXRMaW5lTnVtYmVyRm9yUGF0aD1vLHQucG9zaXRpb25SYW5nZUZvclBhdGg9cyx0LnBhdGhGb3JQb3NpdGlvbj1pO3ZhciBfPW4oNTk3KSxwPXIoXyksZj1uKDEzKSxtPXIoZiksaD1uKDI1NyksZz1yKGgpLGI9big4KSxFPSgwLGIubWVtb2l6ZSkocC5kZWZhdWx0LmNvbXBvc2UpLHk9InRhZzp5YW1sLm9yZywyMDAyOm1hcCIsdj0idGFnOnlhbWwub3JnLDIwMDI6c2VxIjt0LnBhdGhGb3JQb3NpdGlvbkFzeW5jPWEoaSksdC5wb3NpdGlvblJhbmdlRm9yUGF0aEFzeW5jPWEocyksdC5nZXRMaW5lTnVtYmVyRm9yUGF0aEFzeW5jPWEobyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntmbjp7QVNUOm99LGNvbXBvbmVudHM6e0p1bXBUb1BhdGg6aS5kZWZhdWx0fX19O3ZhciByPW4oMTQyKSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0ocikscz1uKDE0NCksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsYS5kZWZhdWx0KSh0aGlzLHQpLCgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTt0LmRlZmF1bHQ9aH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2FmdGVyTG9hZDpmdW5jdGlvbihlKXt0aGlzLnJvb3RJbmplY3RzPXRoaXMucm9vdEluamVjdHN8fHt9LHRoaXMucm9vdEluamVjdHMuaW5pdE9BdXRoPWUuYXV0aEFjdGlvbnMuY29uZmlndXJlQXV0aH0sc3RhdGVQbHVnaW5zOnthdXRoOntyZWR1Y2VyczpzLmRlZmF1bHQsYWN0aW9uczphLHNlbGVjdG9yczp1fSxzcGVjOnt3cmFwQWN0aW9uczpkfX19fTt2YXIgbz1uKDE0Nikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9big5MiksYT1yKGkpLGw9bigxNDcpLHU9cihsKSxjPW4oMTQ4KSxkPXIoYyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvLHM9bigyMiksaT1yKHMpLGE9bigyMSksbD1yKGEpLHU9bigxMSksYz1yKHUpLGQ9big3KSxfPW4oOCkscD1uKDkyKTt0LmRlZmF1bHQ9KG89e30sKDAsaS5kZWZhdWx0KShvLHAuU0hPV19BVVRIX1BPUFVQLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkO3JldHVybiBlLnNldCgic2hvd0RlZmluaXRpb25zIixuKX0pLCgwLGkuZGVmYXVsdCkobyxwLkFVVEhPUklaRSxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPSgwLGQuZnJvbUpTKShuKSxvPWUuZ2V0KCJhdXRob3JpemVkIil8fCgwLGQuTWFwKSgpO3JldHVybiByLmVudHJ5U2VxKCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0oMCxjLmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXSxzPXIuZ2V0SW4oWyJzY2hlbWEiLCJ0eXBlIl0pO2lmKCJhcGlLZXkiPT09c3x8Imh0dHAiPT09cylvPW8uc2V0KG4scik7ZWxzZSBpZigiYmFzaWMiPT09cyl7dmFyIGk9ci5nZXRJbihbInZhbHVlIiwidXNlcm5hbWUiXSksYT1yLmdldEluKFsidmFsdWUiLCJwYXNzd29yZCJdKTtvPW8uc2V0SW4oW24sInZhbHVlIl0se3VzZXJuYW1lOmksaGVhZGVyOiJCYXNpYyAiKygwLF8uYnRvYSkoaSsiOiIrYSl9KSxvPW8uc2V0SW4oW24sInNjaGVtYSJdLHIuZ2V0KCJzY2hlbWEiKSl9fSksZS5zZXQoImF1dGhvcml6ZWQiLG8pfSksKDAsaS5kZWZhdWx0KShvLHAuQVVUSE9SSVpFX09BVVRIMixmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4uYXV0aCxvPW4udG9rZW4scz12b2lkIDA7cmV0dXJuIHIudG9rZW49KDAsbC5kZWZhdWx0KSh7fSxvKSxzPSgwLGQuZnJvbUpTKShyKSxlLnNldEluKFsiYXV0aG9yaXplZCIscy5nZXQoIm5hbWUiKV0scyl9KSwoMCxpLmRlZmF1bHQpKG8scC5MT0dPVVQsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1lLmdldCgiYXV0aG9yaXplZCIpLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24oZSl7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuZGVsZXRlKHQpfSl9KTtyZXR1cm4gZS5zZXQoImF1dGhvcml6ZWQiLHIpfSksKDAsaS5kZWZhdWx0KShvLHAuQ09ORklHVVJFX0FVVEgsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQ7cmV0dXJuIGUuc2V0KCJjb25maWdzIixuKX0pLG8pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldENvbmZpZ3M9dC5pc0F1dGhvcml6ZWQ9dC5hdXRob3JpemVkPXQuZGVmaW5pdGlvbnNGb3JSZXF1aXJlbWVudHM9dC5nZXREZWZpbml0aW9uc0J5TmFtZXM9dC5kZWZpbml0aW9uc1RvQXV0aG9yaXplPXQuc2hvd25EZWZpbml0aW9ucz12b2lkIDA7dmFyIG89bigzMCkscz1yKG8pLGk9bigxMSksYT1yKGkpLGw9bigzNCksdT1uKDcpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O3Quc2hvd25EZWZpbml0aW9ucz0oMCxsLmNyZWF0ZVNlbGVjdG9yKShjLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgic2hvd0RlZmluaXRpb25zIil9KSx0LmRlZmluaXRpb25zVG9BdXRob3JpemU9KDAsbC5jcmVhdGVTZWxlY3RvcikoYyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnNwZWNTZWxlY3RvcnMsbj10LnNlY3VyaXR5RGVmaW5pdGlvbnMoKXx8KDAsdS5NYXApKHt9KSxyPSgwLHUuTGlzdCkoKTtyZXR1cm4gbi5lbnRyeVNlcSgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9KDAsYS5kZWZhdWx0KShlLDIpLG49dFswXSxvPXRbMV0scz0oMCx1Lk1hcCkoKTtzPXMuc2V0KG4sbykscj1yLnB1c2gocyl9KSxyfX0pLHQuZ2V0RGVmaW5pdGlvbnNCeU5hbWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUuc3BlY1NlbGVjdG9ycztjb25zb2xlLndhcm4oIldBUk5JTkc6IGdldERlZmluaXRpb25zQnlOYW1lcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi4iKTt2YXIgcj1uLnNlY3VyaXR5RGVmaW5pdGlvbnMoKSxvPSgwLHUuTGlzdCkoKTtyZXR1cm4gdC52YWx1ZVNlcSgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9KDAsdS5NYXApKCk7ZS5lbnRyeVNlcSgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49KDAsYS5kZWZhdWx0KShlLDIpLG89blswXSxzPW5bMV0saT1yLmdldChvKSxsPXZvaWQgMDsib2F1dGgyIj09PWkuZ2V0KCJ0eXBlIikmJnMuc2l6ZSYmKGw9aS5nZXQoInNjb3BlcyIpLGwua2V5U2VxKCkuZm9yRWFjaChmdW5jdGlvbihlKXtzLmNvbnRhaW5zKGUpfHwobD1sLmRlbGV0ZShlKSl9KSxpPWkuc2V0KCJhbGxvd2VkU2NvcGVzIixsKSksdD10LnNldChvLGkpfSksbz1vLnB1c2godCl9KSxvfX0sdC5kZWZpbml0aW9uc0ZvclJlcXVpcmVtZW50cz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KDAsdS5MaXN0KSgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZS5hdXRoU2VsZWN0b3JzLmRlZmluaXRpb25zVG9BdXRob3JpemUoKXx8KDAsdS5MaXN0KSgpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXQoZS5rZXlTZXEoKS5maXJzdCgpKX0pfSl9fSx0LmF1dGhvcml6ZWQ9KDAsbC5jcmVhdGVTZWxlY3RvcikoYyxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoImF1dGhvcml6ZWQiKXx8KDAsdS5NYXApKCl9KSx0LmlzQXV0aG9yaXplZD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmF1dGhTZWxlY3RvcnMscj1uLmF1dGhvcml6ZWQoKTtyZXR1cm4gdS5MaXN0LmlzTGlzdCh0KT8hIXQudG9KUygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PSgwLHMuZGVmYXVsdCkoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhci5nZXQoZSl9KS5pbmRleE9mKCExKX0pLmxlbmd0aDpudWxsfX0sdC5nZXRDb25maWdzPSgwLGwuY3JlYXRlU2VsZWN0b3IpKGMsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJjb25maWdzIil9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5leGVjdXRlPXZvaWQgMDt2YXIgcj1uKDE0KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7dC5leGVjdXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hdXRoU2VsZWN0b3JzLHI9dC5zcGVjU2VsZWN0b3JzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcz10LnBhdGgsaT10Lm1ldGhvZCxhPXQub3BlcmF0aW9uLGw9dC5leHRyYXMsdT17YXV0aG9yaXplZDpuLmF1dGhvcml6ZWQoKSYmbi5hdXRob3JpemVkKCkudG9KUygpLGRlZmluaXRpb25zOnIuc2VjdXJpdHlEZWZpbml0aW9ucygpJiZyLnNlY3VyaXR5RGVmaW5pdGlvbnMoKS50b0pTKCksc3BlY1NlY3VyaXR5OnIuc2VjdXJpdHkoKSYmci5zZWN1cml0eSgpLnRvSlMoKX07cmV0dXJuIGUoKDAsby5kZWZhdWx0KSh7cGF0aDpzLG1ldGhvZDppLG9wZXJhdGlvbjphLHNlY3VyaXRpZXM6dX0sbCkpfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcygpe3JldHVybntzdGF0ZVBsdWdpbnM6e3NwZWM6e2FjdGlvbnM6ZyxzZWxlY3RvcnM6Yn0sY29uZmlnczp7cmVkdWNlcnM6bS5kZWZhdWx0LGFjdGlvbnM6ZCxzZWxlY3RvcnM6cH19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXM7dmFyIGk9bigyNjgpLGE9byhpKSxsPW4oNTc2KSx1PW8obCksYz1uKDkzKSxkPXIoYyksXz1uKDE1MSkscD1yKF8pLGY9bigxNTApLG09byhmKSxoPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBhLmRlZmF1bHQuc2FmZUxvYWQoZSl9Y2F0Y2goZSl7cmV0dXJuIHQmJnQuZXJyQWN0aW9ucy5uZXdUaHJvd25FcnIobmV3IEVycm9yKGUpKSx7fX19LGc9e2Rvd25sb2FkQ29uZmlnOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4oMCx0LmZuLmZldGNoKShlKX19LGdldENvbmZpZ0J5VXJsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIobil7biBpbnN0YW5jZW9mIEVycm9yfHxuLnN0YXR1cz49NDAwPyhvLnVwZGF0ZUxvYWRpbmdTdGF0dXMoImZhaWxlZENvbmZpZyIpLG8udXBkYXRlTG9hZGluZ1N0YXR1cygiZmFpbGVkQ29uZmlnIiksby51cGRhdGVVcmwoIiIpLGNvbnNvbGUuZXJyb3Iobi5zdGF0dXNUZXh0KyIgIitlKSx0KG51bGwpKTp0KGgobi50ZXh0KSl9dmFyIG89bi5zcGVjQWN0aW9ucztpZihlKXJldHVybiBvLmRvd25sb2FkQ29uZmlnKGUpLnRoZW4ocixyKX19fSxiPXtnZXRMb2NhbENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoKHUuZGVmYXVsdCl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHIsbz1uKDIyKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKDcpLGE9big5Myk7dC5kZWZhdWx0PShyPXt9LCgwLHMuZGVmYXVsdCkocixhLlVQREFURV9DT05GSUdTLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWVyZ2UoKDAsaS5mcm9tSlMpKHQucGF5bG9hZCkpfSksKDAscy5kZWZhdWx0KShyLGEuVE9HR0xFX0NPTkZJR1MsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1lLmdldChuKTtyZXR1cm4gZS5zZXQobiwhcil9KSxyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5nZXRJbihBcnJheS5pc0FycmF5KHQpP3Q6W3RdKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2V0SGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZT9oaXN0b3J5LnB1c2hTdGF0ZShudWxsLG51bGwsIiMiK2UpOndpbmRvdy5sb2NhdGlvbi5oYXNoPSIifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue3N0YXRlUGx1Z2luczp7c3BlYzp7d3JhcEFjdGlvbnM6c30sbGF5b3V0Ont3cmFwQWN0aW9uczphfX19fTt2YXIgbz1uKDE1NSkscz1yKG8pLGk9bigxNTQpLGE9cihpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zaG93PXZvaWQgMDt2YXIgcj1uKDExKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKDE1MiksaT1uKDgpO3Quc2hvdz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0Q29uZmlncztyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KHQpLGE9MDthPHQ7YSsrKXJbYV09YXJndW1lbnRzW2FdO2UuYXBwbHkodm9pZCAwLHIpO3ZhciBsPW4oKS5kZWVwTGlua2luZztpZihsJiYiZmFsc2UiIT09bCl0cnl7dmFyIHU9clswXSxjPXJbMV0sZD0oMCxvLmRlZmF1bHQpKHUsMSksXz1kWzBdO2lmKCJvcGVyYXRpb25zLXRhZyI9PT1ffHwib3BlcmF0aW9ucyI9PT1fKXtpZighYylyZXR1cm4oMCxzLnNldEhhc2gpKCIvIik7aWYoIm9wZXJhdGlvbnMiPT09Xyl7dmFyIHA9KDAsby5kZWZhdWx0KSh1LDMpLGY9cFsxXSxtPXBbMl07KDAscy5zZXRIYXNoKSgiLyIrKDAsaS5jcmVhdGVEZWVwTGlua1BhdGgpKGYpKyIvIisoMCxpLmNyZWF0ZURlZXBMaW5rUGF0aCkobSkpfWlmKCJvcGVyYXRpb25zLXRhZyI9PT1fKXt2YXIgaD0oMCxvLmRlZmF1bHQpKHUsMiksZz1oWzFdOygwLHMuc2V0SGFzaCkoIi8iKygwLGkuY3JlYXRlRGVlcExpbmtQYXRoKShnKSl9fX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVwZGF0ZVJlc29sdmVkPXZvaWQgMDt2YXIgbz1uKDExKSxzPXIobyksaT1uKDU5OCksYT1yKGkpLGw9big4KSx1PSExO3QudXBkYXRlUmVzb2x2ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmxheW91dEFjdGlvbnMscj10LmdldENvbmZpZ3M7cmV0dXJuIGZ1bmN0aW9uKCl7ZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKTt2YXIgdD1yKCkuZGVlcExpbmtpbmc7aWYodCYmImZhbHNlIiE9PXQpe2lmKHdpbmRvdy5sb2NhdGlvbi5oYXNoJiYhdSl7dmFyIG89d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk7IiEiPT09b1swXSYmKG89by5zbGljZSgxKSksIi8iPT09b1swXSYmKG89by5zbGljZSgxKSk7dmFyIGk9by5zcGxpdCgiLyIpLGM9KDAscy5kZWZhdWx0KShpLDIpLGQ9Y1swXSxfPWNbMV0scD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuc3dhZ2dlci11aSIpLGY9YS5kZWZhdWx0LmNyZWF0ZVNjcm9sbGVyKHApLG09dm9pZCAwO2QmJl8/KG4uc2hvdyhbIm9wZXJhdGlvbnMtdGFnIixkXSwhMCksbi5zaG93KFsib3BlcmF0aW9ucyIsZCxfXSwhMCksbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlcmF0aW9ucy0iKygwLGwuZXNjYXBlRGVlcExpbmtQYXRoKShkKSsiLSIrKDAsbC5lc2NhcGVEZWVwTGlua1BhdGgpKF8pKSk6ZCYmKG4uc2hvdyhbIm9wZXJhdGlvbnMtdGFnIixkXSwhMCksbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlcmF0aW9ucy10YWctIisoMCxsLmVzY2FwZURlZXBMaW5rUGF0aCkoZCkpKSxtJiYoZi50byhtKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7MD09PWEuZGVmYXVsdC5nZXRZKCkmJmEuZGVmYXVsdC50byhtKX0sNTApKX11PSEwfX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5mbjtyZXR1cm57c3RhdGVQbHVnaW5zOntzcGVjOnthY3Rpb25zOntkb3dubG9hZDpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7ZnVuY3Rpb24gcih0KXtpZih0IGluc3RhbmNlb2YgRXJyb3J8fHQuc3RhdHVzPj00MDApcmV0dXJuIGkudXBkYXRlTG9hZGluZ1N0YXR1cygiZmFpbGVkIiksby5uZXdUaHJvd25FcnIobmV3IEVycm9yKCh0Lm1lc3NhZ2V8fHQuc3RhdHVzVGV4dCkrIiAiK2UpKTtpLnVwZGF0ZUxvYWRpbmdTdGF0dXMoInN1Y2Nlc3MiKSxpLnVwZGF0ZVNwZWModC50ZXh0KSxpLnVwZGF0ZVVybChlKX12YXIgbz1uLmVyckFjdGlvbnMscz1uLnNwZWNTZWxlY3RvcnMsaT1uLnNwZWNBY3Rpb25zLGE9bi5nZXRDb25maWdzLGw9dC5mZXRjaCx1PWEoKTtlPWV8fHMudXJsKCksaS51cGRhdGVMb2FkaW5nU3RhdHVzKCJsb2FkaW5nIiksbCh7dXJsOmUsbG9hZFNwZWM6ITAscmVxdWVzdEludGVyY2VwdG9yOnUucmVxdWVzdEludGVyY2VwdG9yfHxmdW5jdGlvbihlKXtyZXR1cm4gZX0scmVzcG9uc2VJbnRlcmNlcHRvcjp1LnJlc3BvbnNlSW50ZXJjZXB0b3J8fGZ1bmN0aW9uKGUpe3JldHVybiBlfSxjcmVkZW50aWFsczoic2FtZS1vcmlnaW4iLGhlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwqLyoifX0pLnRoZW4ocixyKX19LHVwZGF0ZUxvYWRpbmdTdGF0dXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W251bGwsImxvYWRpbmciLCJmYWlsZWQiLCJzdWNjZXNzIiwiZmFpbGVkQ29uZmlnIl07cmV0dXJuLTE9PT10LmluZGV4T2YoZSkmJmNvbnNvbGUuZXJyb3IoIkVycm9yOiAiK2UrIiBpcyBub3Qgb25lIG9mICIrKDAscy5kZWZhdWx0KSh0KSkse3R5cGU6InNwZWNfdXBkYXRlX2xvYWRpbmdfc3RhdHVzIixwYXlsb2FkOmV9fX0scmVkdWNlcnM6e3NwZWNfdXBkYXRlX2xvYWRpbmdfc3RhdHVzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0LnBheWxvYWQ/ZS5zZXQoImxvYWRpbmdTdGF0dXMiLHQucGF5bG9hZCk6ZX19LHNlbGVjdG9yczp7bG9hZGluZ1N0YXR1czooMCxpLmNyZWF0ZVNlbGVjdG9yKShmdW5jdGlvbihlKXtyZXR1cm4gZXx8KDAsYS5NYXApKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgibG9hZGluZ1N0YXR1cyIpfHxudWxsfSl9fX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDI0KSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7dC5kZWZhdWx0PXI7dmFyIGk9bigzNCksYT1uKDcpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj17anNTcGVjOnQuc3BlY1NlbGVjdG9ycy5zcGVjSnNvbigpLnRvSlMoKX07cmV0dXJuKDAsaS5kZWZhdWx0KShwLGZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiB0LnRyYW5zZm9ybShlLG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWV9KX1jYXRjaCh0KXtyZXR1cm4gY29uc29sZS5lcnJvcigiVHJhbnNmb3JtZXIgZXJyb3I6Iix0KSxlfX0sZSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hZS5nZXQoImxpbmUiKSYmZS5nZXQoInBhdGgiKSxlfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1vO3ZhciBzPW4oNTY4KSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocyksYT1uKDE1OCksbD1yKGEpLHU9bigxNTkpLGM9cih1KSxkPW4oMTYwKSxfPXIoZCkscD1bbCxjLF9dfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCJtZXNzYWdlIikuaW5kZXhPZigiaXMgbm90IG9mIGEgdHlwZShzKSIpO2lmKHQ+LTEpe3ZhciBuPWUuZ2V0KCJtZXNzYWdlIikuc2xpY2UodCsiaXMgbm90IG9mIGEgdHlwZShzKSIubGVuZ3RoKS5zcGxpdCgiLCIpO3JldHVybiBlLnNldCgibWVzc2FnZSIsZS5nZXQoIm1lc3NhZ2UiKS5zbGljZSgwLHQpK28obikpfXJldHVybiBlfSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG49PT1yLmxlbmd0aC0xJiZyLmxlbmd0aD4xP2UrIm9yICIrdDpyW24rMV0mJnIubGVuZ3RoPjI/ZSt0KyIsICI6cltuKzFdP2UrdCsiICI6ZSt0fSwic2hvdWxkIGJlIGEiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC50cmFuc2Zvcm09cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHQuanNTcGVjLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudHJhbnNmb3JtPXI7dmFyIG89bigyNTgpOyhmdW5jdGlvbihlKXtlJiZlLl9fZXNNb2R1bGV9KShvKSxuKDcpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldCgibWVzc2FnZSIsbyhlLmdldCgibWVzc2FnZSIpLCJpbnN0YW5jZS4iKSl9KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKHQsImciKSwiIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudHJhbnNmb3JtPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm57c3RhdGVQbHVnaW5zOntlcnI6e3JlZHVjZXJzOigwLHMuZGVmYXVsdCkoZSksYWN0aW9uczphLHNlbGVjdG9yczp1fX19fTt2YXIgbz1uKDE2Mikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9big2OSksYT1yKGkpLGw9bigxNjMpLHU9cihsKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigyMikscz1yKG8pLGk9bigyMSksYT1yKGkpO3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdD17fSwoMCxzLmRlZmF1bHQpKHQsbC5ORVdfVEhST1dOX0VSUixmdW5jdGlvbih0LG4pe3ZhciByPW4ucGF5bG9hZCxvPSgwLGEuZGVmYXVsdCkobSxyLHt0eXBlOiJ0aHJvd24ifSk7cmV0dXJuIHQudXBkYXRlKCJlcnJvcnMiLGZ1bmN0aW9uKGUpe3JldHVybihlfHwoMCxkLkxpc3QpKCkpLnB1c2goKDAsZC5mcm9tSlMpKG8pKX0pLnVwZGF0ZSgiZXJyb3JzIixmdW5jdGlvbih0KXtyZXR1cm4oMCxmLmRlZmF1bHQpKHQsZS5nZXRTeXN0ZW0oKSl9KX0pLCgwLHMuZGVmYXVsdCkodCxsLk5FV19USFJPV05fRVJSX0JBVENILGZ1bmN0aW9uKHQsbil7dmFyIHI9bi5wYXlsb2FkO3JldHVybiByPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLGQuZnJvbUpTKSgoMCxhLmRlZmF1bHQpKG0sZSx7dHlwZToidGhyb3duIn0pKX0pLHQudXBkYXRlKCJlcnJvcnMiLGZ1bmN0aW9uKGUpe3JldHVybihlfHwoMCxkLkxpc3QpKCkpLmNvbmNhdCgoMCxkLmZyb21KUykocikpfSkudXBkYXRlKCJlcnJvcnMiLGZ1bmN0aW9uKHQpe3JldHVybigwLGYuZGVmYXVsdCkodCxlLmdldFN5c3RlbSgpKX0pfSksKDAscy5kZWZhdWx0KSh0LGwuTkVXX1NQRUNfRVJSLGZ1bmN0aW9uKHQsbil7dmFyIHI9bi5wYXlsb2FkLG89KDAsZC5mcm9tSlMpKHIpO3JldHVybiBvPW8uc2V0KCJ0eXBlIiwic3BlYyIpLHQudXBkYXRlKCJlcnJvcnMiLGZ1bmN0aW9uKGUpe3JldHVybihlfHwoMCxkLkxpc3QpKCkpLnB1c2goKDAsZC5mcm9tSlMpKG8pKS5zb3J0QnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJsaW5lIil9KX0pLnVwZGF0ZSgiZXJyb3JzIixmdW5jdGlvbih0KXtyZXR1cm4oMCxmLmRlZmF1bHQpKHQsZS5nZXRTeXN0ZW0oKSl9KX0pLCgwLHMuZGVmYXVsdCkodCxsLk5FV19TUEVDX0VSUl9CQVRDSCxmdW5jdGlvbih0LG4pe3ZhciByPW4ucGF5bG9hZDtyZXR1cm4gcj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCxkLmZyb21KUykoKDAsYS5kZWZhdWx0KShtLGUse3R5cGU6InNwZWMifSkpfSksdC51cGRhdGUoImVycm9ycyIsZnVuY3Rpb24oZSl7cmV0dXJuKGV8fCgwLGQuTGlzdCkoKSkuY29uY2F0KCgwLGQuZnJvbUpTKShyKSl9KS51cGRhdGUoImVycm9ycyIsZnVuY3Rpb24odCl7cmV0dXJuKDAsZi5kZWZhdWx0KSh0LGUuZ2V0U3lzdGVtKCkpfSl9KSwoMCxzLmRlZmF1bHQpKHQsbC5ORVdfQVVUSF9FUlIsZnVuY3Rpb24odCxuKXt2YXIgcj1uLnBheWxvYWQsbz0oMCxkLmZyb21KUykoKDAsYS5kZWZhdWx0KSh7fSxyKSk7cmV0dXJuIG89by5zZXQoInR5cGUiLCJhdXRoIiksdC51cGRhdGUoImVycm9ycyIsZnVuY3Rpb24oZSl7cmV0dXJuKGV8fCgwLGQuTGlzdCkoKSkucHVzaCgoMCxkLmZyb21KUykobykpfSkudXBkYXRlKCJlcnJvcnMiLGZ1bmN0aW9uKHQpe3JldHVybigwLGYuZGVmYXVsdCkodCxlLmdldFN5c3RlbSgpKX0pfSksKDAscy5kZWZhdWx0KSh0LGwuQ0xFQVIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQ7aWYobil7dmFyIHI9Xy5kZWZhdWx0LmZyb21KUygoMCxjLmRlZmF1bHQpKChlLmdldCgiZXJyb3JzIil8fCgwLGQuTGlzdCkoKSkudG9KUygpLG4pKTtyZXR1cm4gZS5tZXJnZSh7ZXJyb3JzOnJ9KX19KSx0fTt2YXIgbD1uKDY5KSx1PW4oNTY5KSxjPXIodSksZD1uKDcpLF89cihkKSxwPW4oMTU3KSxmPXIocCksbT17bGluZTowLGxldmVsOiJlcnJvciIsbWVzc2FnZToiVW5rbm93biBlcnJvciJ9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmxhc3RFcnJvcj10LmFsbEVycm9ycz12b2lkIDA7dmFyIHI9big3KSxvPW4oMzQpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGk9dC5hbGxFcnJvcnM9KDAsby5jcmVhdGVTZWxlY3RvcikocyxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoImVycm9ycyIsKDAsci5MaXN0KSgpKX0pO3QubGFzdEVycm9yPSgwLG8uY3JlYXRlU2VsZWN0b3IpKGksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGFzdCgpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntzdGF0ZVBsdWdpbnM6e2xheW91dDp7cmVkdWNlcnM6cy5kZWZhdWx0LGFjdGlvbnM6YSxzZWxlY3RvcnM6dX19fX07dmFyIG89bigxNjUpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oOTQpLGE9cihpKSxsPW4oMTY2KSx1PXIobCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByLG89bigyMikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9big3KSxhPW4oOTQpO3QuZGVmYXVsdD0ocj17fSwoMCxzLmRlZmF1bHQpKHIsYS5VUERBVEVfTEFZT1VULGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0KCJsYXlvdXQiLHQucGF5bG9hZCl9KSwoMCxzLmRlZmF1bHQpKHIsYS5VUERBVEVfRklMVEVSLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0KCJmaWx0ZXIiLHQucGF5bG9hZCl9KSwoMCxzLmRlZmF1bHQpKHIsYS5TSE9XLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnNob3duLHI9KDAsaS5mcm9tSlMpKHQucGF5bG9hZC50aGluZyk7cmV0dXJuIGUudXBkYXRlKCJzaG93biIsKDAsaS5mcm9tSlMpKHt9KSxmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXQocixuKX0pfSksKDAscy5kZWZhdWx0KShyLGEuVVBEQVRFX01PREUsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQudGhpbmcscj10LnBheWxvYWQubW9kZTtyZXR1cm4gZS5zZXRJbihbIm1vZGVzIl0uY29uY2F0KG4pLChyfHwiIikrIiIpfSkscil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2hvd1N1bW1hcnk9dC53aGF0TW9kZT10LmlzU2hvd249dC5jdXJyZW50RmlsdGVyPXQuY3VycmVudD12b2lkIDA7dmFyIHI9big3Miksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigzNCksaT1uKDgpLGE9big3KSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx1PSh0LmN1cnJlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJsYXlvdXQiKX0sdC5jdXJyZW50RmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiZmlsdGVyIil9LHQuaXNTaG93bj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KDAsaS5ub3JtYWxpemVBcnJheSkodCksZS5nZXQoInNob3duIiwoMCxhLmZyb21KUykoe30pKS5nZXQoKDAsYS5mcm9tSlMpKHQpLG4pfSk7dC53aGF0TW9kZT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtyZXR1cm4gdD0oMCxpLm5vcm1hbGl6ZUFycmF5KSh0KSxlLmdldEluKFsibW9kZXMiXS5jb25jYXQoKDAsby5kZWZhdWx0KSh0KSksbil9LHQuc2hvd1N1bW1hcnk9KDAscy5jcmVhdGVTZWxlY3RvcikobCxmdW5jdGlvbihlKXtyZXR1cm4hdShlLCJlZGl0b3IiKX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxzPTE7czxuO3MrKylyW3MtMV09YXJndW1lbnRzW3NdO28oZSk+PWkmJih0PWNvbnNvbGUpW2VdLmFwcGx5KHQscil9dmFyIG49ZS5jb25maWdzLHI9e2RlYnVnOjAsaW5mbzoxLGxvZzoyLHdhcm46MyxlcnJvcjo0fSxvPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwtMX0scz1uLmxvZ0xldmVsLGk9byhzKTtyZXR1cm4gdC53YXJuPXQuYmluZChudWxsLCJ3YXJuIiksdC5lcnJvcj10LmJpbmQobnVsbCwiZXJyb3IiKSx0LmluZm89dC5iaW5kKG51bGwsImluZm8iKSx0LmRlYnVnPXQuYmluZChudWxsLCJkZWJ1ZyIpLHtyb290SW5qZWN0czp7bG9nOnR9fX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmaW5pdGlvbnNUb0F1dGhvcml6ZT12b2lkIDA7dmFyIG89bigyMikscz1yKG8pLGk9bigxMSksYT1yKGkpLGw9bigzNCksdT1uKDcpLGM9bigyMCksZD1mdW5jdGlvbihlKXtyZXR1cm4gZX07dC5kZWZpbml0aW9uc1RvQXV0aG9yaXplPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxzPUFycmF5KG8+MT9vLTE6MCksaT0xO2k8bztpKyspc1tpLTFdPWFyZ3VtZW50c1tpXTt2YXIgYT1uLmdldFN5c3RlbSgpLnNwZWNTZWxlY3RvcnMuc3BlY0pzb24oKTtyZXR1cm4oMCxjLmlzT0FTMykoYSk/ZS5hcHBseSh2b2lkIDAsW25dLmNvbmNhdChzKSk6dC5hcHBseSh2b2lkIDAscyl9fX0oKDAsbC5jcmVhdGVTZWxlY3RvcikoZCxmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGVjU2VsZWN0b3JzLnNlY3VyaXR5RGVmaW5pdGlvbnMoKX0sZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCx1Lkxpc3QpKCk7cmV0dXJuIHQuZW50cnlTZXEoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGEuZGVmYXVsdCkoZSwyKSxyPXRbMF0sbz10WzFdLGk9by5nZXQoInR5cGUiKTsib2F1dGgyIj09PWkmJm8uZ2V0KCJmbG93cyIpLmVudHJ5U2VxKCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmRlZmF1bHQpKGUsMiksaT10WzBdLGw9dFsxXSxjPSgwLHUuZnJvbUpTKSh7ZmxvdzppLGF1dGhvcml6YXRpb25Vcmw6bC5nZXQoImF1dGhvcml6YXRpb25VcmwiKSx0b2tlblVybDpsLmdldCgidG9rZW5VcmwiKSxzY29wZXM6bC5nZXQoInNjb3BlcyIpLHR5cGU6by5nZXQoInR5cGUiKX0pO249bi5wdXNoKG5ldyB1Lk1hcCgoMCxzLmRlZmF1bHQpKHt9LHIsYy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9KSkpKX0pLCJodHRwIiE9PWkmJiJhcGlLZXkiIT09aXx8KG49bi5wdXNoKG5ldyB1Lk1hcCgoMCxzLmRlZmF1bHQpKHt9LHIsbykpKSl9KSxufSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE0KSxzPXIobyksaT1uKDApLGE9cihpKSxsPW4oMSksdT1yKGwpLGM9big5KSxkPXIoYyksXz1uKDcpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYWxsYmFja3Msbj1lLmdldENvbXBvbmVudCxyPW4oIk9wZXJhdGlvbkNvbnRhaW5lciIsITApO2lmKCF0KXJldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiTm8gY2FsbGJhY2tzIik7dmFyIG89dC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTpufSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDIiLG51bGwsbiksdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTpufSx0Lm1hcChmdW5jdGlvbih0LG8pe3ZhciBpPSgwLF8uZnJvbUpTKSh7b3BlcmF0aW9uOnR9KTtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQociwoMCxzLmRlZmF1bHQpKHt9LGUse29wOmksa2V5Om8sdGFnOiIiLG1ldGhvZDpvLHBhdGg6bixhbGxvd1RyeUl0T3V0OiExfSkpfSkpfSkpfSk7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbyl9O3AucHJvcFR5cGVzPXtnZXRDb21wb25lbnQ6dS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxjYWxsYmFja3M6ZC5kZWZhdWx0Lml0ZXJhYmxlLmlzUmVxdWlyZWR9LHQuZGVmYXVsdD1wfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO0UuY2FsbChyKTt2YXIgbz1yLnByb3BzLGk9by5uYW1lLGw9by5zY2hlbWEsdT1yLmdldFZhbHVlKCk7cmV0dXJuIHIuc3RhdGU9e25hbWU6aSxzY2hlbWE6bCx2YWx1ZTp1fSxyfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm5hbWUsbj1lLmF1dGhvcml6ZWQ7cmV0dXJuIG4mJm4uZ2V0SW4oW3QsInZhbHVlIl0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNjaGVtYSxuPWUuZ2V0Q29tcG9uZW50LHI9ZS5lcnJTZWxlY3RvcnMsbz1lLm5hbWUscz1uKCJJbnB1dCIpLGk9bigiUm93IiksYT1uKCJDb2wiKSxsPW4oImF1dGhFcnJvciIpLHU9bigiTWFya2Rvd24iKSxjPW4oIkp1bXBUb1BhdGgiLCEwKSxkPXQuZ2V0KCJzY2hlbWUiKSxfPXRoaXMuZ2V0VmFsdWUoKSxwPXIuYWxsRXJyb3JzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiYXV0aElkIik9PT1vfSk7aWYoImJhc2ljIj09PWQpe3ZhciBmPV8/Xy5nZXQoInVzZXJuYW1lIik6bnVsbDtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsb3x8dC5nZXQoIm5hbWUiKSksIsKgIChodHRwLCBCYXNpYykiLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3BhdGg6WyJzZWN1cml0eURlZmluaXRpb25zIixvXX0pKSxmJiZtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDYiLG51bGwsIkF1dGhvcml6ZWQiKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChpLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodSx7c291cmNlOnQuZ2V0KCJkZXNjcmlwdGlvbiIpfSkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGksbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLG51bGwsIlVzZXJuYW1lOiIpLGY/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsIiAiLGYsIiAiKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudChhLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocyx7dHlwZToidGV4dCIscmVxdWlyZWQ6InJlcXVpcmVkIixuYW1lOiJ1c2VybmFtZSIsb25DaGFuZ2U6dGhpcy5vbkNoYW5nZX0pKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsYWJlbCIsbnVsbCwiUGFzc3dvcmQ6IiksZj9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY29kZSIsbnVsbCwiICoqKioqKiAiKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudChhLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocyx7cmVxdWlyZWQ6InJlcXVpcmVkIixhdXRvQ29tcGxldGU6Im5ldy1wYXNzd29yZCIsbmFtZToicGFzc3dvcmQiLHR5cGU6InBhc3N3b3JkIixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlfSkpKSxwLnZhbHVlU2VxKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse2Vycm9yOmUsa2V5OnR9KX0pKX1yZXR1cm4iYmVhcmVyIj09PWQ/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsb3x8dC5nZXQoIm5hbWUiKSksIsKgIChodHRwLCBCZWFyZXIpIixtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHtwYXRoOlsic2VjdXJpdHlEZWZpbml0aW9ucyIsb119KSksXyYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg2IixudWxsLCJBdXRob3JpemVkIiksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHUse3NvdXJjZTp0LmdldCgiZGVzY3JpcHRpb24iKX0pKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChpLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIixudWxsLCJWYWx1ZToiKSxfP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgKioqKioqICIpOm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGEsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChzLHt0eXBlOiJ0ZXh0IixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlfSkpKSxwLnZhbHVlU2VxKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse2Vycm9yOmUsa2V5OnR9KX0pKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJlbSIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYiIsbnVsbCxvKSwiIEhUVFAgYXV0aGVudGljYXRpb246IHVuc3VwcG9ydGVkIG9yIG1pc3Npbmcgc2NoZW1lIikpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTtiLnByb3BUeXBlcz17YXV0aG9yaXplZDpnLmRlZmF1bHQub2JqZWN0LGdldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGVyclNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc2NoZW1hOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxuYW1lOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuY307dmFyIEU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49ZS5wcm9wcy5vbkNoYW5nZSxyPXQudGFyZ2V0LG89ci52YWx1ZSxzPXIubmFtZSxpPWUuc3RhdGUudmFsdWV8fHt9O3M/aVtzXT1vOmk9byxlLnNldFN0YXRlKHt2YWx1ZTppfSxmdW5jdGlvbigpe3JldHVybiBuKGUuc3RhdGUpfSl9fTt0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigxNjkpLHM9cihvKSxpPW4oMTc1KSxhPXIoaSksbD1uKDE3MiksdT1yKGwpLGM9bigxNzYpLGQ9cihjKSxfPW4oMTc0KSxwPXIoXyksZj1uKDE3MCksbT1yKGYpLGg9bigxNzMpLGc9cihoKTt0LmRlZmF1bHQ9e0NhbGxiYWNrczpzLmRlZmF1bHQsSHR0cEF1dGg6bS5kZWZhdWx0LFJlcXVlc3RCb2R5OmEuZGVmYXVsdCxTZXJ2ZXJzOmQuZGVmYXVsdCxSZXF1ZXN0Qm9keUVkaXRvcjpwLmRlZmF1bHQsT3BlcmF0aW9uU2VydmVyczpnLmRlZmF1bHQsb3BlcmF0aW9uTGluazp1LmRlZmF1bHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/IiI6dC5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gbj4wP0FycmF5KGUrMSkuam9pbigiICIpK3Q6dH0pLmpvaW4oIlxuIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPW4oMjQpLGk9cihzKSxhPW4oNCksbD1yKGEpLHU9bigyKSxjPXIodSksZD1uKDMpLF89cihkKSxwPW4oNiksZj1yKHApLG09big1KSxoPXIobSksZz1uKDApLGI9cihnKSxFPW4oMSkseT1yKEUpLHY9big5KSxUPXIodiksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsYy5kZWZhdWx0KSh0aGlzLHQpLCgwLGYuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGwuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmxpbmssbj1lLm5hbWUscj1lLmdldENvbXBvbmVudCxzPXIoIk1hcmtkb3duIiksYT10LmdldCgib3BlcmF0aW9uSWQiKXx8dC5nZXQoIm9wZXJhdGlvblJlZiIpLGw9dC5nZXQoInBhcmFtZXRlcnMiKSYmdC5nZXQoInBhcmFtZXRlcnMiKS50b0pTKCksdT10LmdldCgiZGVzY3JpcHRpb24iKTtyZXR1cm4gYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOnttYXJnaW5Cb3R0b206IjEuNWVtIn19LGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7bWFyZ2luQm90dG9tOiIuNWVtIn19LGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJiIixudWxsLGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLG4pKSx1P2IuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHMse3NvdXJjZTp1fSk6bnVsbCksYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIsbnVsbCwiT3BlcmF0aW9uIGAiLGEsImAiLGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJiciIsbnVsbCksYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJyIixudWxsKSwiUGFyYW1ldGVycyAiLG8oMCwoMCxpLmRlZmF1bHQpKGwsbnVsbCwyKSl8fCJ7fSIsYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJyIixudWxsKSkpfX1dKSx0fShnLkNvbXBvbmVudCk7QS5wcm9wVHlwZXM9e2dldENvbXBvbmVudDp5LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGxpbms6VC5kZWZhdWx0Lm9yZGVyZWRNYXAuaXNSZXF1aXJlZCxuYW1lOnkuZGVmYXVsdC5TdHJpbmd9LHQuZGVmYXVsdD1BfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE0KSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDEpLEU9cihiKSx5PW4oOSksdj1yKHkpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLGM9MDtjPGk7YysrKWxbY109YXJndW1lbnRzW2NdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIuc2V0U2VsZWN0ZWRTZXJ2ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQucGF0aCxvPXQubWV0aG9kO3JldHVybiByLmZvcmNlVXBkYXRlKCksci5wcm9wcy5zZXRTZWxlY3RlZFNlcnZlcihlLG4rIjoiK28pfSxyLnNldFNlcnZlclZhcmlhYmxlVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQucGF0aCxvPXQubWV0aG9kO3JldHVybiByLmZvcmNlVXBkYXRlKCksci5wcm9wcy5zZXRTZXJ2ZXJWYXJpYWJsZVZhbHVlKCgwLHMuZGVmYXVsdCkoe30sZSx7bmFtZXNwYWNlOm4rIjoiK299KSl9LHIuZ2V0U2VsZWN0ZWRTZXJ2ZXI9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5wYXRoLG49ZS5tZXRob2Q7cmV0dXJuIHIucHJvcHMuZ2V0U2VsZWN0ZWRTZXJ2ZXIodCsiOiIrbil9LHIuZ2V0U2VydmVyVmFyaWFibGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLnByb3BzLG89bi5wYXRoLHM9bi5tZXRob2Q7cmV0dXJuIHIucHJvcHMuZ2V0U2VydmVyVmFyaWFibGUoe25hbWVzcGFjZTpvKyI6IitzLHNlcnZlcjplfSx0KX0sci5nZXRFZmZlY3RpdmVTZXJ2ZXJWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5wYXRoLG89dC5tZXRob2Q7cmV0dXJuIHIucHJvcHMuZ2V0RWZmZWN0aXZlU2VydmVyVmFsdWUoe3NlcnZlcjplLG5hbWVzcGFjZTpuKyI6IitvfSl9LG89biwoMCxwLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9wZXJhdGlvblNlcnZlcnMsbj1lLnBhdGhTZXJ2ZXJzLHI9ZS5nZXRDb21wb25lbnQ7aWYoIXQmJiFuKXJldHVybiBudWxsO3ZhciBvPXIoIlNlcnZlcnMiKSxzPXR8fG4saT10PyJvcGVyYXRpb24iOiJwYXRoIjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uIG9wZXJhdGlvbi1zZXJ2ZXJzIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InRhYi1oZWFkZXIifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6Im9wYmxvY2stdGl0bGUifSwiU2VydmVycyIpKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1kZXNjcmlwdGlvbi13cmFwcGVyIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0Iix7Y2xhc3NOYW1lOiJtZXNzYWdlIn0sIlRoZXNlICIsaSwiLWxldmVsIG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGdsb2JhbCBzZXJ2ZXIgb3B0aW9ucy4iKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChvLHtzZXJ2ZXJzOnMsY3VycmVudFNlcnZlcjp0aGlzLmdldFNlbGVjdGVkU2VydmVyKCksc2V0U2VsZWN0ZWRTZXJ2ZXI6dGhpcy5zZXRTZWxlY3RlZFNlcnZlcixzZXRTZXJ2ZXJWYXJpYWJsZVZhbHVlOnRoaXMuc2V0U2VydmVyVmFyaWFibGVWYWx1ZSxnZXRTZXJ2ZXJWYXJpYWJsZTp0aGlzLmdldFNlcnZlclZhcmlhYmxlLGdldEVmZmVjdGl2ZVNlcnZlclZhbHVlOnRoaXMuZ2V0RWZmZWN0aXZlU2VydmVyVmFsdWV9KSkpfX1dKSx0fShnLmRlZmF1bHQuQ29tcG9uZW50KTtULnByb3BUeXBlcz17cGF0aDpFLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsbWV0aG9kOkUuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvcGVyYXRpb25TZXJ2ZXJzOnYuZGVmYXVsdC5saXN0LHBhdGhTZXJ2ZXJzOnYuZGVmYXVsdC5saXN0LHNldFNlbGVjdGVkU2VydmVyOkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc2V0U2VydmVyVmFyaWFibGVWYWx1ZTpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFNlbGVjdGVkU2VydmVyOkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0U2VydmVyVmFyaWFibGU6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRFZmZlY3RpdmVTZXJ2ZXJWYWx1ZTpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9VH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1uKDcpLEU9big4KSx5PUZ1bmN0aW9uLnByb3RvdHlwZSx2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiByLnNldFZhbHVlVG9TYW1wbGU9ZnVuY3Rpb24oZSl7ci5vbkNoYW5nZShyLnNhbXBsZShlKSl9LHIuc2FtcGxlPWZ1bmN0aW9uKGUpe3ZhciB0PXIucHJvcHMsbj10LnJlcXVlc3RCb2R5LG89dC5tZWRpYVR5cGUscz1uLmdldEluKFsiY29udGVudCIsZXx8bywic2NoZW1hIl0pLnRvSlMoKTtyZXR1cm4oMCxFLmdldFNhbXBsZVNjaGVtYSkocyxlfHxvLHtpbmNsdWRlV3JpdGVPbmx5OiEwfSl9LHIub25DaGFuZ2U9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZSh7dmFsdWU6ZX0pLHIucHJvcHMub25DaGFuZ2UoZSl9LHIuaGFuZGxlT25DaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5tZWRpYVR5cGUsbj0vanNvbi9pLnRlc3QodCksbz1uP2UudGFyZ2V0LnZhbHVlLnRyaW0oKTplLnRhcmdldC52YWx1ZTtyLm9uQ2hhbmdlKG8pfSxyLnRvZ2dsZUlzRWRpdEJveD1mdW5jdGlvbigpe3JldHVybiByLnNldFN0YXRlKGZ1bmN0aW9uKGUpe3JldHVybntpc0VkaXRCb3g6IWUuaXNFZGl0Qm94fX0pfSxyLnN0YXRlPXtpc0VkaXRCb3g6ITEsdmFsdWU6IiJ9LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZVRvU2FtcGxlLmNhbGwodGhpcyl9fSx7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm1lZGlhVHlwZSE9PWUubWVkaWFUeXBlJiZ0aGlzLnNldFZhbHVlVG9TYW1wbGUoZS5tZWRpYVR5cGUpLCF0aGlzLnByb3BzLmlzRXhlY3V0ZSYmZS5pc0V4ZWN1dGUmJnRoaXMuc2V0U3RhdGUoe2lzRWRpdEJveDohMH0pfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLnJlcXVlc3RCb2R5IT09ZS5yZXF1ZXN0Qm9keSYmdGhpcy5zZXRWYWx1ZVRvU2FtcGxlKHRoaXMucHJvcHMubWVkaWFUeXBlKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pc0V4ZWN1dGUsbj1lLmdldENvbXBvbmVudCxyPW4oIkJ1dHRvbiIpLG89bigiVGV4dEFyZWEiKSxzPW4oImhpZ2hsaWdodENvZGUiKSxpPXRoaXMuc3RhdGUsYT1pLnZhbHVlLGw9aS5pc0VkaXRCb3g7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJvZHktcGFyYW0ifSxsJiZ0P20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KG8se2NsYXNzTmFtZToiYm9keS1wYXJhbV9fdGV4dCIsdmFsdWU6YSxvbkNoYW5nZTp0aGlzLmhhbmRsZU9uQ2hhbmdlfSk6YSYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocyx7Y2xhc3NOYW1lOiJib2R5LXBhcmFtX19leGFtcGxlIix2YWx1ZTphfSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYm9keS1wYXJhbS1vcHRpb25zIn0sdD9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJib2R5LXBhcmFtLWVkaXQifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyLHtjbGFzc05hbWU6bD8iYnRuIGNhbmNlbCBib2R5LXBhcmFtX19leGFtcGxlLWVkaXQiOiJidG4gZWRpdCBib2R5LXBhcmFtX19leGFtcGxlLWVkaXQiLG9uQ2xpY2s6dGhpcy50b2dnbGVJc0VkaXRCb3h9LGw/IkNhbmNlbCI6IkVkaXQiKSk6bnVsbCkpfX1dKSx0fShmLlB1cmVDb21wb25lbnQpO3YucHJvcFR5cGVzPXtyZXF1ZXN0Qm9keTpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbWVkaWFUeXBlOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuYyxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpc0V4ZWN1dGU6Zy5kZWZhdWx0LmJvb2wsc3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LHYuZGVmYXVsdFByb3BzPXttZWRpYVR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLHJlcXVlc3RCb2R5OigwLGIuZnJvbUpTKSh7fSksb25DaGFuZ2U6eX0sdC5kZWZhdWx0PXZ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCkscz1yKG8pLGk9bigxKSxhPXIoaSksbD1uKDkpLHU9cihsKSxjPW4oNyksZD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcXVlc3RCb2R5LG49ZS5nZXRDb21wb25lbnQscj1lLmdldENvbmZpZ3Msbz1lLnNwZWNTZWxlY3RvcnMsaT1lLmNvbnRlbnRUeXBlLGE9ZS5pc0V4ZWN1dGUsbD1lLnNwZWNQYXRoLHU9ZS5vbkNoYW5nZSxkPW4oIk1hcmtkb3duIiksXz1uKCJtb2RlbEV4YW1wbGUiKSxwPW4oIlJlcXVlc3RCb2R5RWRpdG9yIiksZj10JiZ0LmdldCgiZGVzY3JpcHRpb24iKXx8bnVsbCxtPXQmJnQuZ2V0KCJjb250ZW50Iil8fG5ldyBjLk9yZGVyZWRNYXA7aT1pfHxtLmtleVNlcSgpLmZpcnN0KCk7dmFyIGg9bS5nZXQoaSk7cmV0dXJuIGg/cy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxmJiZzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkLHtzb3VyY2U6Zn0pLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8se2dldENvbXBvbmVudDpuLGdldENvbmZpZ3M6cixzcGVjU2VsZWN0b3JzOm8sZXhwYW5kRGVwdGg6MSxpc0V4ZWN1dGU6YSxzY2hlbWE6aC5nZXQoInNjaGVtYSIpLHNwZWNQYXRoOmwucHVzaCgiY29udGVudCIsaSksZXhhbXBsZTpzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChwLHtyZXF1ZXN0Qm9keTp0LG9uQ2hhbmdlOnUsbWVkaWFUeXBlOmksZ2V0Q29tcG9uZW50Om4saXNFeGVjdXRlOmEsc3BlY1NlbGVjdG9yczpvfSl9KSk6bnVsbH07ZC5wcm9wVHlwZXM9e3JlcXVlc3RCb2R5OnUuZGVmYXVsdC5vcmRlcmVkTWFwLmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OmEuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Q29uZmlnczphLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6YS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGNvbnRlbnRUeXBlOmEuZGVmYXVsdC5zdHJpbmcsaXNFeGVjdXRlOmEuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsb25DaGFuZ2U6YS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjUGF0aDphLmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PWR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oNyksZz1uKDEpLGI9cihnKSxFPW4oOSkseT1yKEUpLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGEuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLHU9MDt1PGk7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9KDAsZC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIub25TZXJ2ZXJDaGFuZ2U9ZnVuY3Rpb24oZSl7ci5zZXRTZXJ2ZXIoZS50YXJnZXQudmFsdWUpfSxyLm9uU2VydmVyVmFyaWFibGVWYWx1ZUNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5zZXRTZXJ2ZXJWYXJpYWJsZVZhbHVlLG89dC5jdXJyZW50U2VydmVyLHM9ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhcmlhYmxlIiksaT1lLnRhcmdldC52YWx1ZTsiZnVuY3Rpb24iPT10eXBlb2YgbiYmbih7c2VydmVyOm8sa2V5OnMsdmFsOml9KX0sci5zZXRTZXJ2ZXI9ZnVuY3Rpb24oZSl7KDAsci5wcm9wcy5zZXRTZWxlY3RlZFNlcnZlcikoZSl9LG89biwoMCxkLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc2VydmVycztlLmN1cnJlbnRTZXJ2ZXJ8fHRoaXMuc2V0U2VydmVyKHQuZmlyc3QoKS5nZXQoInVybCIpKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LnNlcnZlcnMscj10LnNldFNlcnZlclZhcmlhYmxlVmFsdWUsbz10LmdldFNlcnZlclZhcmlhYmxlO2lmKHRoaXMucHJvcHMuY3VycmVudFNlcnZlciE9PWUuY3VycmVudFNlcnZlcil7dmFyIHM9bi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldCgidXJsIik9PT1lLmN1cnJlbnRTZXJ2ZXJ9KTtpZighcylyZXR1cm4gdGhpcy5zZXRTZXJ2ZXIobi5maXJzdCgpLmdldCgidXJsIikpOyhzLmdldCgidmFyaWFibGVzIil8fCgwLGguT3JkZXJlZE1hcCkoKSkubWFwKGZ1bmN0aW9uKHQsbil7byhlLmN1cnJlbnRTZXJ2ZXIsbil8fHIoe3NlcnZlcjplLmN1cnJlbnRTZXJ2ZXIsa2V5Om4sdmFsOnQuZ2V0KCJkZWZhdWx0Iil8fCIifSl9KX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LnNlcnZlcnMscj10LmN1cnJlbnRTZXJ2ZXIsbz10LmdldFNlcnZlclZhcmlhYmxlLHM9dC5nZXRFZmZlY3RpdmVTZXJ2ZXJWYWx1ZSxpPW4uZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInVybCIpPT09cn0pfHwoMCxoLk9yZGVyZWRNYXApKCksYT1pLmdldCgidmFyaWFibGVzIil8fCgwLGguT3JkZXJlZE1hcCkoKSxsPTAhPT1hLnNpemU7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNlcnZlcnMifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOiJzZXJ2ZXJzIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIse29uQ2hhbmdlOnRoaXMub25TZXJ2ZXJDaGFuZ2V9LG4udmFsdWVTZXEoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHt2YWx1ZTplLmdldCgidXJsIiksa2V5OmUuZ2V0KCJ1cmwiKX0sZS5nZXQoInVybCIpKX0pLnRvQXJyYXkoKSkpLGw/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJjb21wdXRlZC11cmwifSwiQ29tcHV0ZWQgVVJMOiIsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwscyhyKSkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIsbnVsbCwiU2VydmVyIHZhcmlhYmxlcyIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGJvZHkiLG51bGwsYS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIix7a2V5Om59LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIsbnVsbCxuKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsdC5nZXQoImVudW0iKT9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7ImRhdGEtdmFyaWFibGUiOm4sb25DaGFuZ2U6ZS5vblNlcnZlclZhcmlhYmxlVmFsdWVDaGFuZ2V9LHQuZ2V0KCJlbnVtIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgib3B0aW9uIix7c2VsZWN0ZWQ6ZT09PW8ocixuKSxrZXk6ZSx2YWx1ZTplfSxlKX0pKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHt0eXBlOiJ0ZXh0Iix2YWx1ZTpvKHIsbil8fCIiLG9uQ2hhbmdlOmUub25TZXJ2ZXJWYXJpYWJsZVZhbHVlQ2hhbmdlLCJkYXRhLXZhcmlhYmxlIjpufSkpKX0pKSkpOm51bGwpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTt2LnByb3BUeXBlcz17c2VydmVyczp5LmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLGN1cnJlbnRTZXJ2ZXI6Yi5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHNldFNlbGVjdGVkU2VydmVyOmIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc2V0U2VydmVyVmFyaWFibGVWYWx1ZTpiLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFNlcnZlclZhcmlhYmxlOmIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0RWZmZWN0aXZlU2VydmVyVmFsdWU6Yi5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PXZ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntjb21wb25lbnRzOl8uZGVmYXVsdCx3cmFwQ29tcG9uZW50czpmLmRlZmF1bHQsc3RhdGVQbHVnaW5zOntzcGVjOnt3cmFwU2VsZWN0b3JzOmksc2VsZWN0b3JzOmN9LGF1dGg6e3dyYXBTZWxlY3RvcnM6bH0sb2FzMzp7YWN0aW9uczpoLHJlZHVjZXJzOnkuZGVmYXVsdCxzZWxlY3RvcnM6Yn19fX07dmFyIHM9bigxODEpLGk9byhzKSxhPW4oMTY4KSxsPW8oYSksdT1uKDE4MCksYz1vKHUpLGQ9bigxNzEpLF89cihkKSxwPW4oMTgzKSxmPXIocCksbT1uKDk1KSxoPW8obSksZz1uKDE3OSksYj1vKGcpLEU9bigxNzgpLHk9cihFKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG8scz1uKDIyKSxpPXIocyksYT1uKDExKSxsPXIoYSksdT1uKDk1KTt0LmRlZmF1bHQ9KG89e30sKDAsaS5kZWZhdWx0KShvLHUuVVBEQVRFX1NFTEVDVEVEX1NFUlZFUixmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4uc2VsZWN0ZWRTZXJ2ZXJVcmwsbz1uLm5hbWVzcGFjZSxzPW8/W28sInNlbGVjdGVkU2VydmVyIl06WyJzZWxlY3RlZFNlcnZlciJdO3JldHVybiBlLnNldEluKHMscil9KSwoMCxpLmRlZmF1bHQpKG8sdS5VUERBVEVfUkVRVUVTVF9CT0RZX1ZBTFVFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi52YWx1ZSxvPW4ucGF0aE1ldGhvZCxzPSgwLGwuZGVmYXVsdCkobywyKSxpPXNbMF0sYT1zWzFdO3JldHVybiBlLnNldEluKFsicmVxdWVzdERhdGEiLGksYSwiYm9keVZhbHVlIl0scil9KSwoMCxpLmRlZmF1bHQpKG8sdS5VUERBVEVfUkVRVUVTVF9DT05URU5UX1RZUEUsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnZhbHVlLG89bi5wYXRoTWV0aG9kLHM9KDAsbC5kZWZhdWx0KShvLDIpLGk9c1swXSxhPXNbMV07cmV0dXJuIGUuc2V0SW4oWyJyZXF1ZXN0RGF0YSIsaSxhLCJyZXF1ZXN0Q29udGVudFR5cGUiXSxyKX0pLCgwLGkuZGVmYXVsdCkobyx1LlVQREFURV9SRVNQT05TRV9DT05URU5UX1RZUEUsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnZhbHVlLG89bi5wYXRoLHM9bi5tZXRob2Q7cmV0dXJuIGUuc2V0SW4oWyJyZXF1ZXN0RGF0YSIsbyxzLCJyZXNwb25zZUNvbnRlbnRUeXBlIl0scil9KSwoMCxpLmRlZmF1bHQpKG8sdS5VUERBVEVfU0VSVkVSX1ZBUklBQkxFX1ZBTFVFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi5zZXJ2ZXIsbz1uLm5hbWVzcGFjZSxzPW4ua2V5LGk9bi52YWwsYT1vP1tvLCJzZXJ2ZXJWYXJpYWJsZVZhbHVlcyIscixzXTpbInNlcnZlclZhcmlhYmxlVmFsdWVzIixyLHNdO3JldHVybiBlLnNldEluKGEsaSl9KSxvKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQuZ2V0U3lzdGVtKCkuc3BlY1NlbGVjdG9ycy5zcGVjSnNvbigpO3JldHVybigwLHMuaXNPQVMzKShyKT9lLmFwcGx5KHZvaWQgMCxuKTpudWxsfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2VydmVyRWZmZWN0aXZlVmFsdWU9dC5zZXJ2ZXJWYXJpYWJsZXM9dC5zZXJ2ZXJWYXJpYWJsZVZhbHVlPXQucmVzcG9uc2VDb250ZW50VHlwZT10LnJlcXVlc3RDb250ZW50VHlwZT10LnJlcXVlc3RCb2R5VmFsdWU9dC5zZWxlY3RlZFNlcnZlcj12b2lkIDA7dmFyIG89big3KSxzPW4oMjApO3Quc2VsZWN0ZWRTZXJ2ZXI9cihmdW5jdGlvbihlLHQpe3ZhciBuPXQ/W3QsInNlbGVjdGVkU2VydmVyIl06WyJzZWxlY3RlZFNlcnZlciJdO3JldHVybiBlLmdldEluKG4pfHwiIn0pLHQucmVxdWVzdEJvZHlWYWx1ZT1yKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5nZXRJbihbInJlcXVlc3REYXRhIix0LG4sImJvZHlWYWx1ZSJdKXx8bnVsbH0pLHQucmVxdWVzdENvbnRlbnRUeXBlPXIoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmdldEluKFsicmVxdWVzdERhdGEiLHQsbiwicmVxdWVzdENvbnRlbnRUeXBlIl0pfHxudWxsfSksdC5yZXNwb25zZUNvbnRlbnRUeXBlPXIoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmdldEluKFsicmVxdWVzdERhdGEiLHQsbiwicmVzcG9uc2VDb250ZW50VHlwZSJdKXx8bnVsbH0pLHQuc2VydmVyVmFyaWFibGVWYWx1ZT1yKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgbz10LnNlcnZlcixzPXQubmFtZXNwYWNlO3I9cz9bcywic2VydmVyVmFyaWFibGVWYWx1ZXMiLG8sbl06WyJzZXJ2ZXJWYXJpYWJsZVZhbHVlcyIsbyxuXX1lbHNlIHI9WyJzZXJ2ZXJWYXJpYWJsZVZhbHVlcyIsdCxuXTtyZXR1cm4gZS5nZXRJbihyKXx8bnVsbH0pLHQuc2VydmVyVmFyaWFibGVzPXIoZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgcj10LnNlcnZlcixzPXQubmFtZXNwYWNlO249cz9bcywic2VydmVyVmFyaWFibGVWYWx1ZXMiLHJdOlsic2VydmVyVmFyaWFibGVWYWx1ZXMiLHJdfWVsc2Ugbj1bInNlcnZlclZhcmlhYmxlVmFsdWVzIix0XTtyZXR1cm4gZS5nZXRJbihuKXx8KDAsby5PcmRlcmVkTWFwKSgpfSksdC5zZXJ2ZXJFZmZlY3RpdmVWYWx1ZT1yKGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBzPXQuc2VydmVyLGk9dC5uYW1lc3BhY2U7cj1zLG49aT9lLmdldEluKFtpLCJzZXJ2ZXJWYXJpYWJsZVZhbHVlcyIscl0pOmUuZ2V0SW4oWyJzZXJ2ZXJWYXJpYWJsZVZhbHVlcyIscl0pfWVsc2Ugcj10LG49ZS5nZXRJbihbInNlcnZlclZhcmlhYmxlVmFsdWVzIixyXSk7bj1ufHwoMCxvLk9yZGVyZWRNYXApKCk7dmFyIGE9cjtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSx0KXthPWEucmVwbGFjZShuZXcgUmVnRXhwKCJ7Iit0KyJ9IiwiZyIpLGUpfSksYX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzU3dhZ2dlcjI9dC5zZXJ2ZXJzPXZvaWQgMDt2YXIgcj1uKDM0KSxvPW4oNykscz1uKDIwKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlfHwoMCxvLk1hcCkoKX0sYT0oMCxyLmNyZWF0ZVNlbGVjdG9yKShpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgianNvbiIsKDAsby5NYXApKCkpfSksbD0oMCxyLmNyZWF0ZVNlbGVjdG9yKShpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgicmVzb2x2ZWQiLCgwLG8uTWFwKSgpKX0pLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bChlKTtyZXR1cm4gdC5jb3VudCgpPDEmJih0PWEoZSkpLHR9O3Quc2VydmVycz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107dmFyIGk9dC5nZXRTeXN0ZW0oKS5zcGVjU2VsZWN0b3JzLnNwZWNKc29uKCk7cmV0dXJuKDAscy5pc09BUzMpKGkpP2UuYXBwbHkodm9pZCAwLHIpOm51bGx9fX0oKDAsci5jcmVhdGVTZWxlY3RvcikodSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRJbihbInNlcnZlcnMiXSl8fCgwLG8uTWFwKSgpfSkpLHQuaXNTd2FnZ2VyMj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuZ2V0U3lzdGVtKCkuc3BlY1NlbGVjdG9ycy5zcGVjSnNvbigpO3JldHVybigwLHMuaXNTd2FnZ2VyMikoZSl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uZ2V0U3lzdGVtKCkuc3BlY1NlbGVjdG9ycy5zcGVjSnNvbigpO3JldHVybigwLGkuaXNPQVMzKShyKT9lLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpOnQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1N3YWdnZXIyPXQuaXNPQVMzPXQuc2VydmVycz10LnNjaGVtZXM9dC5wcm9kdWNlcz10LmNvbnN1bWVzPXQuYmFzZVBhdGg9dC5ob3N0PXQuc2VjdXJpdHlEZWZpbml0aW9ucz10Lmhhc0hvc3Q9dC5kZWZpbml0aW9ucz12b2lkIDA7dmFyIG89bigzNCkscz1uKDcpLGk9bigyMCksYT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KDAscy5NYXApKCl9LGw9KDAsby5jcmVhdGVTZWxlY3RvcikoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLHU9cihsKSxjPSgwLG8uY3JlYXRlU2VsZWN0b3IpKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJqc29uIiwoMCxzLk1hcCkoKSl9KSxkPSgwLG8uY3JlYXRlU2VsZWN0b3IpKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJyZXNvbHZlZCIsKDAscy5NYXApKCkpfSksXz1mdW5jdGlvbihlKXt2YXIgdD1kKGUpO3JldHVybiB0LmNvdW50KCk8MSYmKHQ9YyhlKSksdH07dC5kZWZpbml0aW9ucz1yKCgwLG8uY3JlYXRlU2VsZWN0b3IpKF8sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SW4oWyJjb21wb25lbnRzIiwic2NoZW1hcyJdKXx8KDAscy5NYXApKCl9KSksdC5oYXNIb3N0PXIoZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSkuaGFzSW4oWyJzZXJ2ZXJzIiwwXSl9KSx0LnNlY3VyaXR5RGVmaW5pdGlvbnM9cigoMCxvLmNyZWF0ZVNlbGVjdG9yKShfLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEluKFsiY29tcG9uZW50cyIsInNlY3VyaXR5U2NoZW1lcyJdKXx8bnVsbH0pKSx0Lmhvc3Q9dSx0LmJhc2VQYXRoPXUsdC5jb25zdW1lcz11LHQucHJvZHVjZXM9dSx0LnNjaGVtZXM9dSx0LnNlcnZlcnM9cigoMCxvLmNyZWF0ZVNlbGVjdG9yKShfLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEluKFsic2VydmVycyJdKXx8KDAscy5NYXApKCl9KSksdC5pc09BUzM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmdldFN5c3RlbSgpLnNwZWNTZWxlY3RvcnMuc3BlY0pzb24oKTtyZXR1cm4oMCxpLmlzT0FTMykocy5NYXAuaXNNYXAoZSk/ZTooMCxzLk1hcCkoKSl9fSx0LmlzU3dhZ2dlcjI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmdldFN5c3RlbSgpLnNwZWNTZWxlY3RvcnMuc3BlY0pzb24oKTtyZXR1cm4oMCxpLmlzU3dhZ2dlcjIpKHMuTWFwLmlzTWFwKGUpP2U6KDAscy5NYXApKCkpfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNzEpLHM9cihvKSxpPW4oMCksYT1yKGkpLGw9bigyMCk7dC5kZWZhdWx0PSgwLGwuT0FTM0NvbXBvbmVudFdyYXBGYWN0b3J5KShmdW5jdGlvbihlKXt2YXIgdD1lLk9yaSxuPSgwLHMuZGVmYXVsdCkoZSxbIk9yaSJdKSxyPW4uc2NoZW1hLG89bi5nZXRDb21wb25lbnQsaT1uLmVyclNlbGVjdG9ycyxsPW4uYXV0aG9yaXplZCx1PW4ub25BdXRoQ2hhbmdlLGM9bi5uYW1lLGQ9bygiSHR0cEF1dGgiKTtyZXR1cm4iaHR0cCI9PT1yLmdldCgidHlwZSIpP2EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQse2tleTpjLHNjaGVtYTpyLG5hbWU6YyxlcnJTZWxlY3RvcnM6aSxhdXRob3JpemVkOmwsZ2V0Q29tcG9uZW50Om8sb25DaGFuZ2U6dX0pOmEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQsbil9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigxODQpLHM9cihvKSxpPW4oMTgyKSxhPXIoaSksbD1uKDE4NyksdT1yKGwpLGM9bigxODgpLGQ9cihjKSxfPW4oMTg2KSxwPXIoXyksZj1uKDE4NSksbT1yKGYpO3QuZGVmYXVsdD17TWFya2Rvd246cy5kZWZhdWx0LEF1dGhJdGVtOmEuZGVmYXVsdCxwYXJhbWV0ZXJzOnUuZGVmYXVsdCxWZXJzaW9uU3RhbXA6ZC5kZWZhdWx0LG1vZGVsOm0uZGVmYXVsdCxvbmxpbmVWYWxpZGF0b3JCYWRnZTpwLmRlZmF1bHR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1hcmtkb3duPXZvaWQgMDt2YXIgbz1uKDApLHM9cihvKSxpPW4oMSksYT1yKGkpLGw9big1ODcpLHU9cihsKSxjPW4oNTgwKSxkPW4oMjApLF89bigxNDApLHA9dC5NYXJrZG93bj1mdW5jdGlvbihlKXt2YXIgdD1lLnNvdXJjZTtpZih0KXt2YXIgbj1uZXcgYy5QYXJzZXIscj1uZXcgYy5IdG1sUmVuZGVyZXIsbz1yLnJlbmRlcihuLnBhcnNlKHR8fCIiKSksaT0oMCxfLnNhbml0aXplcikobyk7cmV0dXJuIHQmJm8mJmk/cy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodS5kZWZhdWx0LHtzb3VyY2U6aSxjbGFzc05hbWU6InJlbmRlcmVkTWFya2Rvd24ifSk6bnVsbH1yZXR1cm4gbnVsbH07cC5wcm9wVHlwZXM9e3NvdXJjZTphLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9KDAsZC5PQVMzQ29tcG9uZW50V3JhcEZhY3RvcnkpKHApfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE0KSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDEpLEU9cihiKSx5PW4oMjApLHY9bigxMzkpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLHUuZGVmYXVsdCkodGhpcyx0KSwoMCxwLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5nZXRDb25maWdzLG49ZS5zY2hlbWEscj1bIm1vZGVsLWJveCJdLG89ITA9PT1uLmdldCgiZGVwcmVjYXRlZCIpLGk9bnVsbDtyZXR1cm4gbyYmKHIucHVzaCgiZGVwcmVjYXRlZCIpLGk9Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im1vZGVsLWRlcHJlY2F0ZWQtd2FybmluZyJ9LCJEZXByZWNhdGVkOiIpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnIuam9pbigiICIpfSxpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYuTW9kZWwsKDAscy5kZWZhdWx0KSh7fSx0aGlzLnByb3BzLHtnZXRDb25maWdzOnQsZGVwdGg6MSxleHBhbmREZXB0aDp0aGlzLnByb3BzLmV4cGFuZERlcHRofHwwfSkpKX19XSksdH0oaC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXtzY2hlbWE6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLG5hbWU6RS5kZWZhdWx0LnN0cmluZyxnZXRDb21wb25lbnQ6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRDb25maWdzOkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZXhwYW5kRGVwdGg6RS5kZWZhdWx0Lm51bWJlcn0sdC5kZWZhdWx0PSgwLHkuT0FTM0NvbXBvbmVudFdyYXBGYWN0b3J5KShUKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMCk7dC5kZWZhdWx0PSgwLHIuT0FTM0NvbXBvbmVudFdyYXBGYWN0b3J5KShmdW5jdGlvbigpe3JldHVybiBudWxsfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNzIpLHM9cihvKSxpPW4oNCksYT1yKGkpLGw9bigyKSx1PXIobCksYz1uKDMpLGQ9cihjKSxfPW4oNikscD1yKF8pLGY9big1KSxtPXIoZiksaD1uKDApLGc9cihoKSxiPW4oMSksRT1yKGIpLHk9big3KSx2PXIoeSksVD1uKDkpLEE9cihUKSxDPW4oMjApLE89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZVNlcSgpLmZpbHRlcih2LmRlZmF1bHQuTWFwLmlzTWFwKS5tYXAodCl9LFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5vbkNoYW5nZT1mdW5jdGlvbihlLHQscil7dmFyIG89bi5wcm9wczsoMCxvLnNwZWNBY3Rpb25zLmNoYW5nZVBhcmFtKShvLm9uQ2hhbmdlS2V5LGUuZ2V0KCJuYW1lIiksZS5nZXQoImluIiksdCxyKX0sbi5vbkNoYW5nZUNvbnN1bWVzV3JhcHBlcj1mdW5jdGlvbihlKXt2YXIgdD1uLnByb3BzOygwLHQuc3BlY0FjdGlvbnMuY2hhbmdlQ29uc3VtZXNWYWx1ZSkodC5vbkNoYW5nZUtleSxlKX0sbi50b2dnbGVUYWI9ZnVuY3Rpb24oZSl7cmV0dXJuInBhcmFtZXRlcnMiPT09ZT9uLnNldFN0YXRlKHtwYXJhbWV0ZXJzVmlzaWJsZTohMCxjYWxsYmFja1Zpc2libGU6ITF9KToiY2FsbGJhY2tzIj09PWU/bi5zZXRTdGF0ZSh7Y2FsbGJhY2tWaXNpYmxlOiEwLHBhcmFtZXRlcnNWaXNpYmxlOiExfSk6dm9pZCAwfSxuLnN0YXRlPXtjYWxsYmFja1Zpc2libGU6ITEscGFyYW1ldGVyc1Zpc2libGU6ITB9LG59cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5vblRyeW91dENsaWNrLHI9dC5vbkNhbmNlbENsaWNrLG89dC5wYXJhbWV0ZXJzLGk9dC5hbGxvd1RyeUl0T3V0LGE9dC50cnlJdE91dEVuYWJsZWQsbD10LmZuLHU9dC5nZXRDb21wb25lbnQsYz10LmdldENvbmZpZ3MsZD10LnNwZWNTZWxlY3RvcnMsXz10Lm9hczNBY3Rpb25zLHA9dC5vYXMzU2VsZWN0b3JzLGY9dC5wYXRoTWV0aG9kLG09dC5zcGVjUGF0aCxoPXQub3BlcmF0aW9uLGI9dSgicGFyYW1ldGVyUm93IiksRT11KCJUcnlJdE91dEJ1dHRvbiIpLHY9dSgiY29udGVudFR5cGUiKSxUPXUoIkNhbGxiYWNrcyIsITApLEE9dSgiUmVxdWVzdEJvZHkiLCEwKSxDPWEmJmksUz1kLmlzT0FTMyxSPWguZ2V0KCJyZXF1ZXN0Qm9keSIpLGo9bS5zbGljZSgwLC0xKS5wdXNoKCJyZXF1ZXN0Qm9keSIpO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLXNlY3Rpb24ifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLXNlY3Rpb24taGVhZGVyIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToidGFiLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9nZ2xlVGFiKCJwYXJhbWV0ZXJzIil9LGNsYXNzTmFtZToidGFiLWl0ZW0gIisodGhpcy5zdGF0ZS5wYXJhbWV0ZXJzVmlzaWJsZSYmImFjdGl2ZSIpfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6Im9wYmxvY2stdGl0bGUifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiUGFyYW1ldGVycyIpKSksaC5nZXQoImNhbGxiYWNrcyIpP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9nZ2xlVGFiKCJjYWxsYmFja3MiKX0sY2xhc3NOYW1lOiJ0YWItaXRlbSAiKyh0aGlzLnN0YXRlLmNhbGxiYWNrVmlzaWJsZSYmImFjdGl2ZSIpfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6Im9wYmxvY2stdGl0bGUifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiQ2FsbGJhY2tzIikpKTpudWxsKSxpP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEUse2VuYWJsZWQ6YSxvbkNhbmNlbENsaWNrOnIsb25UcnlvdXRDbGljazpufSk6bnVsbCksdGhpcy5zdGF0ZS5wYXJhbWV0ZXJzVmlzaWJsZT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwYXJhbWV0ZXJzLWNvbnRhaW5lciJ9LG8uY291bnQoKT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJ0YWJsZS1jb250YWluZXIifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGFibGUiLHtjbGFzc05hbWU6InBhcmFtZXRlcnMifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGhlYWQiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0aCIse2NsYXNzTmFtZToiY29sIGNvbF9oZWFkZXIgcGFyYW1ldGVycy1jb2xfbmFtZSJ9LCJOYW1lIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoIix7Y2xhc3NOYW1lOiJjb2wgY29sX2hlYWRlciBwYXJhbWV0ZXJzLWNvbF9kZXNjcmlwdGlvbiJ9LCJEZXNjcmlwdGlvbiIpKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRib2R5IixudWxsLE8obyxmdW5jdGlvbih0LG4pe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChiLHtmbjpsLGdldENvbXBvbmVudDp1LHNwZWNQYXRoOm0ucHVzaChuKSxnZXRDb25maWdzOmMscGFyYW06dCxrZXk6dC5nZXQoIm5hbWUiKSxvbkNoYW5nZTplLm9uQ2hhbmdlLG9uQ2hhbmdlQ29uc3VtZXM6ZS5vbkNoYW5nZUNvbnN1bWVzV3JhcHBlcixzcGVjU2VsZWN0b3JzOmQscGF0aE1ldGhvZDpmLGlzRXhlY3V0ZTpDfSl9KS50b0FycmF5KCkpKSk6Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1kZXNjcmlwdGlvbi13cmFwcGVyIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsIk5vIHBhcmFtZXRlcnMiKSkpOiIiLHRoaXMuc3RhdGUuY2FsbGJhY2tWaXNpYmxlP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImNhbGxiYWNrcy1jb250YWluZXIgb3BibG9jay1kZXNjcmlwdGlvbi13cmFwcGVyIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVCx7Y2FsbGJhY2tzOigwLHkuTWFwKShoLmdldCgiY2FsbGJhY2tzIikpfSkpOiIiLFMoKSYmUiYmdGhpcy5zdGF0ZS5wYXJhbWV0ZXJzVmlzaWJsZSYmZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIse2NsYXNzTmFtZToib3BibG9jay10aXRsZSBwYXJhbWV0ZXJfX25hbWUgIisoUi5nZXQoInJlcXVpcmVkIikmJiJyZXF1aXJlZCIpfSwiUmVxdWVzdCBib2R5IiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYse3ZhbHVlOnAucmVxdWVzdENvbnRlbnRUeXBlLmFwcGx5KHAsKDAscy5kZWZhdWx0KShmKSksY29udGVudFR5cGVzOlIuZ2V0KCJjb250ZW50Iikua2V5U2VxKCksb25DaGFuZ2U6ZnVuY3Rpb24oZSl7Xy5zZXRSZXF1ZXN0Q29udGVudFR5cGUoe3ZhbHVlOmUscGF0aE1ldGhvZDpmfSl9LGNsYXNzTmFtZToiYm9keS1wYXJhbS1jb250ZW50LXR5cGUifSkpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLWRlc2NyaXB0aW9uLXdyYXBwZXIifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLHtzcGVjUGF0aDpqLHJlcXVlc3RCb2R5OlIsaXNFeGVjdXRlOkMsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7Xy5zZXRSZXF1ZXN0Qm9keVZhbHVlKHt2YWx1ZTplLHBhdGhNZXRob2Q6Zn0pfSxjb250ZW50VHlwZTpwLnJlcXVlc3RDb250ZW50VHlwZS5hcHBseShwLCgwLHMuZGVmYXVsdCkoZikpfSkpKSl9fV0pLHR9KGguQ29tcG9uZW50KTtTLnByb3BUeXBlcz17cGFyYW1ldGVyczpBLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLHNwZWNBY3Rpb25zOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxvcGVyYXRpb246RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbmZpZ3M6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxvYXMzQWN0aW9uczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsb2FzM1NlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZm46RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHRyeUl0T3V0RW5hYmxlZDpFLmRlZmF1bHQuYm9vbCxhbGxvd1RyeUl0T3V0OkUuZGVmYXVsdC5ib29sLHNwZWNQYXRoOkEuZGVmYXVsdC5saXN0LmlzUmVxdWlyZWQsb25UcnlvdXRDbGljazpFLmRlZmF1bHQuZnVuYyxvbkNhbmNlbENsaWNrOkUuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlS2V5OkUuZGVmYXVsdC5hcnJheSxwYXRoTWV0aG9kOkUuZGVmYXVsdC5hcnJheS5pc1JlcXVpcmVkfSxTLmRlZmF1bHRQcm9wcz17b25UcnlvdXRDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsb25DYW5jZWxDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsdHJ5SXRPdXRFbmFibGVkOiExLGFsbG93VHJ5SXRPdXQ6ITAsb25DaGFuZ2VLZXk6W119LHQuZGVmYXVsdD0oMCxDLk9BUzNDb21wb25lbnRXcmFwRmFjdG9yeSkoUyl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMCksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigyMCk7dC5kZWZhdWx0PSgwLHMuT0FTM0NvbXBvbmVudFdyYXBGYWN0b3J5KShmdW5jdGlvbihlKXt2YXIgdD1lLk9yaTtyZXR1cm4gby5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsby5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodCxlKSxvLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic21hbGwiLHtzdHlsZTp7YmFja2dyb3VuZENvbG9yOiIjODliZjA0In19LG8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwcmUiLHtjbGFzc05hbWU6InZlcnNpb24ifSwiT0FTMyIpKSl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2ZuOm99fTt2YXIgcj1uKDk2KSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0ocil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntzdGF0ZVBsdWdpbnM6e3NwZWM6e3dyYXBBY3Rpb25zOmQscmVkdWNlcnM6cy5kZWZhdWx0LGFjdGlvbnM6YSxzZWxlY3RvcnM6dX19fX07dmFyIG89bigxOTEpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oOTcpLGE9cihpKSxsPW4oMTkyKSx1PXIobCksYz1uKDE5MyksZD1yKGMpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbyxzPW4oMjIpLGk9cihzKSxhPW4oMjEpLGw9cihhKSx1PW4oNzIpLGM9cih1KSxkPW4oNyksXz1uKDgpLHA9bigyNyksZj1yKHApLG09big5Nyk7dC5kZWZhdWx0PShvPXt9LCgwLGkuZGVmYXVsdCkobyxtLlVQREFURV9TUEVDLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0LnBheWxvYWQ/ZS5zZXQoInNwZWMiLHQucGF5bG9hZCk6ZX0pLCgwLGkuZGVmYXVsdCkobyxtLlVQREFURV9VUkwsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXQoInVybCIsdC5wYXlsb2FkKyIiKX0pLCgwLGkuZGVmYXVsdCkobyxtLlVQREFURV9KU09OLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0KCJqc29uIiwoMCxfLmZyb21KU09yZGVyZWQpKHQucGF5bG9hZCkpfSksKDAsaS5kZWZhdWx0KShvLG0uVVBEQVRFX1JFU09MVkVELGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0SW4oWyJyZXNvbHZlZCJdLCgwLF8uZnJvbUpTT3JkZXJlZCkodC5wYXlsb2FkKSl9KSwoMCxpLmRlZmF1bHQpKG8sbS5VUERBVEVfUEFSQU0sZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnBhdGgsbz1uLnBhcmFtTmFtZSxzPW4ucGFyYW1JbixpPW4udmFsdWUsYT1uLmlzWG1sO3JldHVybiBlLnVwZGF0ZUluKFsicmVzb2x2ZWQiLCJwYXRocyJdLmNvbmNhdCgoMCxjLmRlZmF1bHQpKHIpLFsicGFyYW1ldGVycyJdKSwoMCxkLmZyb21KUykoW10pLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgibmFtZSIpPT09byYmZS5nZXQoImluIik9PT1zfSk7cmV0dXJuIGkgaW5zdGFuY2VvZiBmLmRlZmF1bHQuRmlsZXx8KGk9KDAsXy5mcm9tSlNPcmRlcmVkKShpKSksZS5zZXRJbihbdCxhPyJ2YWx1ZV94bWwiOiJ2YWx1ZSJdLGkpfSl9KSwoMCxpLmRlZmF1bHQpKG8sbS5WQUxJREFURV9QQVJBTVMsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnBhdGhNZXRob2Qsbz1uLmlzT0FTMyxzPWUuZ2V0SW4oWyJtZXRhIiwicGF0aHMiXS5jb25jYXQoKDAsYy5kZWZhdWx0KShyKSksKDAsZC5mcm9tSlMpKHt9KSksaT0veG1sL2kudGVzdChzLmdldCgiY29uc3VtZXNfdmFsdWUiKSk7cmV0dXJuIGUudXBkYXRlSW4oWyJyZXNvbHZlZCIsInBhdGhzIl0uY29uY2F0KCgwLGMuZGVmYXVsdCkociksWyJwYXJhbWV0ZXJzIl0pLCgwLGQuZnJvbUpTKShbXSksZnVuY3Rpb24oZSl7cmV0dXJuIGUud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUuY291bnQoKTt0PG47dCsrKXt2YXIgcj0oMCxfLnZhbGlkYXRlUGFyYW0pKGUuZ2V0KHQpLGksbyk7ZS5zZXRJbihbdCwiZXJyb3JzIl0sKDAsZC5mcm9tSlMpKHIpKX19KX0pfSksKDAsaS5kZWZhdWx0KShvLG0uQ0xFQVJfVkFMSURBVEVfUEFSQU1TLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLnBhdGhNZXRob2Q7cmV0dXJuIGUudXBkYXRlSW4oWyJyZXNvbHZlZCIsInBhdGhzIl0uY29uY2F0KCgwLGMuZGVmYXVsdCkobiksWyJwYXJhbWV0ZXJzIl0pLCgwLGQuZnJvbUpTKShbXSksZnVuY3Rpb24oZSl7cmV0dXJuIGUud2l0aE11dGF0aW9ucyhmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUuY291bnQoKTt0PG47dCsrKWUuc2V0SW4oW3QsImVycm9ycyJdLCgwLGQuZnJvbUpTKShbXSkpfSl9KX0pLCgwLGkuZGVmYXVsdCkobyxtLlNFVF9SRVNQT05TRSxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ucmVzLG89bi5wYXRoLHM9bi5tZXRob2QsaT12b2lkIDA7aT1yLmVycm9yPygwLGwuZGVmYXVsdCkoe2Vycm9yOiEwLG5hbWU6ci5lcnIubmFtZSxtZXNzYWdlOnIuZXJyLm1lc3NhZ2Usc3RhdHVzQ29kZTpyLmVyci5zdGF0dXNDb2RlfSxyLmVyci5yZXNwb25zZSk6cixpLmhlYWRlcnM9aS5oZWFkZXJzfHx7fTt2YXIgYT1lLnNldEluKFsicmVzcG9uc2VzIixvLHNdLCgwLF8uZnJvbUpTT3JkZXJlZCkoaSkpO3JldHVybiBmLmRlZmF1bHQuQmxvYiYmci5kYXRhIGluc3RhbmNlb2YgZi5kZWZhdWx0LkJsb2ImJihhPWEuc2V0SW4oWyJyZXNwb25zZXMiLG8scywidGV4dCJdLHIuZGF0YSkpLGF9KSwoMCxpLmRlZmF1bHQpKG8sbS5TRVRfUkVRVUVTVCxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ucmVxLG89bi5wYXRoLHM9bi5tZXRob2Q7cmV0dXJuIGUuc2V0SW4oWyJyZXF1ZXN0cyIsbyxzXSwoMCxfLmZyb21KU09yZGVyZWQpKHIpKX0pLCgwLGkuZGVmYXVsdCkobyxtLlNFVF9NVVRBVEVEX1JFUVVFU1QsZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBheWxvYWQscj1uLnJlcSxvPW4ucGF0aCxzPW4ubWV0aG9kO3JldHVybiBlLnNldEluKFsibXV0YXRlZFJlcXVlc3RzIixvLHNdLCgwLF8uZnJvbUpTT3JkZXJlZCkocikpfSksKDAsaS5kZWZhdWx0KShvLG0uVVBEQVRFX09QRVJBVElPTl9NRVRBX1ZBTFVFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi5wYXRoLG89bi52YWx1ZSxzPW4ua2V5LGk9WyJyZXNvbHZlZCIsInBhdGhzIl0uY29uY2F0KCgwLGMuZGVmYXVsdCkocikpLGE9WyJtZXRhIiwicGF0aHMiXS5jb25jYXQoKDAsYy5kZWZhdWx0KShyKSk7cmV0dXJuIGUuZ2V0SW4oaSk/ZS5zZXRJbihbXS5jb25jYXQoKDAsYy5kZWZhdWx0KShhKSxbc10pLCgwLGQuZnJvbUpTKShvKSk6ZX0pLCgwLGkuZGVmYXVsdCkobyxtLkNMRUFSX1JFU1BPTlNFLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wYXlsb2FkLHI9bi5wYXRoLG89bi5tZXRob2Q7cmV0dXJuIGUuZGVsZXRlSW4oWyJyZXNwb25zZXMiLHIsb10pfSksKDAsaS5kZWZhdWx0KShvLG0uQ0xFQVJfUkVRVUVTVCxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4ucGF0aCxvPW4ubWV0aG9kO3JldHVybiBlLmRlbGV0ZUluKFsicmVxdWVzdHMiLHIsb10pfSksKDAsaS5kZWZhdWx0KShvLG0uU0VUX1NDSEVNRSxmdW5jdGlvbihlLHQpe3ZhciBuPXQucGF5bG9hZCxyPW4uc2NoZW1lLG89bi5wYXRoLHM9bi5tZXRob2Q7cmV0dXJuIG8mJnM/ZS5zZXRJbihbInNjaGVtZSIsbyxzXSxyKTpvfHxzP3ZvaWQgMDplLnNldEluKFsic2NoZW1lIiwiX2RlZmF1bHRTY2hlbWUiXSxyKX0pLG8pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIHQ9dHx8W10sRShlKS5nZXRJbihbInBhdGhzIl0uY29uY2F0KCgwLF8uZGVmYXVsdCkodCksWyJwYXJhbWV0ZXJzIl0pLCgwLG0uZnJvbUpTKShbXSkpLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG0uTWFwLmlzTWFwKGUpJiZlLmdldCgibmFtZSIpPT09biYmZS5nZXQoImluIik9PT1yfSl8fCgwLG0uTWFwKSgpfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiB0PXR8fFtdLEUoZSkuZ2V0SW4oWyJwYXRocyJdLmNvbmNhdCgoMCxfLmRlZmF1bHQpKHQpLFsicGFyYW1ldGVycyJdKSwoMCxtLmZyb21KUykoW10pKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1uJiYiYm9keSI9PT10LmdldCgiaW4iKT90LmdldCgidmFsdWVfeG1sIik6dC5nZXQoInZhbHVlIik7cmV0dXJuIGUuc2V0KHQuZ2V0KCJpbiIpKyIuIit0LmdldCgibmFtZSIpLHIpfSwoMCxtLmZyb21KUykoe30pKX1mdW5jdGlvbiBzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIjtpZihtLkxpc3QuaXNMaXN0KGUpKXJldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG0uTWFwLmlzTWFwKGUpJiZlLmdldCgiaW4iKT09PXR9KX1mdW5jdGlvbiBpKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIjtpZihtLkxpc3QuaXNMaXN0KGUpKXJldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG0uTWFwLmlzTWFwKGUpJiZlLmdldCgidHlwZSIpPT09dH0pfWZ1bmN0aW9uIGEoZSx0KXt0PXR8fFtdO3ZhciBuPUUoZSkuZ2V0SW4oWyJwYXRocyJdLmNvbmNhdCgoMCxfLmRlZmF1bHQpKHQpKSwoMCxtLmZyb21KUykoe30pKSxyPWUuZ2V0SW4oWyJtZXRhIiwicGF0aHMiXS5jb25jYXQoKDAsXy5kZWZhdWx0KSh0KSksKDAsbS5mcm9tSlMpKHt9KSksbz11KGUsdCkscz1uLmdldCgicGFyYW1ldGVycyIpfHxuZXcgbS5MaXN0LGE9ci5nZXQoImNvbnN1bWVzX3ZhbHVlIik/ci5nZXQoImNvbnN1bWVzX3ZhbHVlIik6aShzLCJmaWxlIik/Im11bHRpcGFydC9mb3JtLWRhdGEiOmkocywiZm9ybURhdGEiKT8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjp2b2lkIDA7cmV0dXJuKDAsbS5mcm9tSlMpKHtyZXF1ZXN0Q29udGVudFR5cGU6YSxyZXNwb25zZUNvbnRlbnRUeXBlOm99KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHQ9dHx8W10sRShlKS5nZXRJbihbInBhdGhzIl0uY29uY2F0KCgwLF8uZGVmYXVsdCkodCksWyJjb25zdW1lcyJdKSwoMCxtLmZyb21KUykoe30pKX1mdW5jdGlvbiB1KGUsdCl7dD10fHxbXTt2YXIgbj1FKGUpLmdldEluKFsicGF0aHMiXS5jb25jYXQoKDAsXy5kZWZhdWx0KSh0KSksbnVsbCk7aWYobnVsbCE9PW4pe3ZhciByPWUuZ2V0SW4oWyJtZXRhIiwicGF0aHMiXS5jb25jYXQoKDAsXy5kZWZhdWx0KSh0KSxbInByb2R1Y2VzX3ZhbHVlIl0pLG51bGwpLG89bi5nZXRJbihbInByb2R1Y2VzIiwwXSxudWxsKTtyZXR1cm4gcnx8b3x8ImFwcGxpY2F0aW9uL2pzb24ifX1mdW5jdGlvbiBjKGUpe3JldHVybiBtLk1hcC5pc01hcChlKT9lOm5ldyBtLk1hcH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZUJlZm9yZUV4ZWN1dGU9dC5jYW5FeGVjdXRlU2NoZW1lPXQub3BlcmF0aW9uU2NoZW1lPXQuaGFzSG9zdD10LmFsbG93VHJ5SXRPdXRGb3I9dC5tdXRhdGVkUmVxdWVzdEZvcj10LnJlcXVlc3RGb3I9dC5yZXNwb25zZUZvcj10Lm11dGF0ZWRSZXF1ZXN0cz10LnJlcXVlc3RzPXQucmVzcG9uc2VzPXQudGFnZ2VkT3BlcmF0aW9ucz10Lm9wZXJhdGlvbnNXaXRoVGFncz10LnRhZ0RldGFpbHM9dC50YWdzPXQub3BlcmF0aW9uc1dpdGhSb290SW5oZXJpdGVkPXQuc2NoZW1lcz10Lmhvc3Q9dC5iYXNlUGF0aD10LmRlZmluaXRpb25zPXQuZmluZERlZmluaXRpb249dC5zZWN1cml0eURlZmluaXRpb25zPXQuc2VjdXJpdHk9dC5wcm9kdWNlcz10LmNvbnN1bWVzPXQub3BlcmF0aW9ucz10LnBhdGhzPXQuc2VtdmVyPXQudmVyc2lvbj10LmV4dGVybmFsRG9jcz10LmluZm89dC5pc09BUzM9dC5zcGVjPXQuc3BlY1Jlc29sdmVkPXQuc3BlY0pzb249dC5zcGVjU291cmNlPXQuc3BlY1N0cj10LnVybD10Lmxhc3RFcnJvcj12b2lkIDA7dmFyIGQ9big3MiksXz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGQpO3QuZ2V0UGFyYW1ldGVyPXIsdC5wYXJhbWV0ZXJWYWx1ZXM9byx0LnBhcmFtZXRlcnNJbmNsdWRlSW49cyx0LnBhcmFtZXRlcnNJbmNsdWRlVHlwZT1pLHQuY29udGVudFR5cGVWYWx1ZXM9YSx0Lm9wZXJhdGlvbkNvbnN1bWVzPWwsdC5jdXJyZW50UHJvZHVjZXNGb3I9dTt2YXIgcD1uKDM0KSxmPW4oOCksbT1uKDcpLGg9WyJnZXQiLCJwdXQiLCJwb3N0IiwiZGVsZXRlIiwib3B0aW9ucyIsImhlYWQiLCJwYXRjaCIsInRyYWNlIl0sZz1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KDAsbS5NYXApKCl9LGI9KHQubGFzdEVycm9yPSgwLHAuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJsYXN0RXJyb3IiKX0pLHQudXJsPSgwLHAuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJ1cmwiKX0pLHQuc3BlY1N0cj0oMCxwLmNyZWF0ZVNlbGVjdG9yKShnLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgic3BlYyIpfHwiIn0pLHQuc3BlY1NvdXJjZT0oMCxwLmNyZWF0ZVNlbGVjdG9yKShnLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgic3BlY1NvdXJjZSIpfHwibm90LWVkaXRvciJ9KSx0LnNwZWNKc29uPSgwLHAuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJqc29uIiwoMCxtLk1hcCkoKSl9KSx0LnNwZWNSZXNvbHZlZD0oMCxwLmNyZWF0ZVNlbGVjdG9yKShnLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgicmVzb2x2ZWQiLCgwLG0uTWFwKSgpKX0pKSxFPXQuc3BlYz1mdW5jdGlvbihlKXtyZXR1cm4gYihlKX0seT0odC5pc09BUzM9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbigpe3JldHVybiExfSksdC5pbmZvPSgwLHAuY3JlYXRlU2VsZWN0b3IpKEUsZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSYmZS5nZXQoImluZm8iKSl9KSksdj0odC5leHRlcm5hbERvY3M9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4gYyhlJiZlLmdldCgiZXh0ZXJuYWxEb2NzIikpfSksdC52ZXJzaW9uPSgwLHAuY3JlYXRlU2VsZWN0b3IpKHksZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuZ2V0KCJ2ZXJzaW9uIil9KSksVD0odC5zZW12ZXI9KDAscC5jcmVhdGVTZWxlY3RvcikodixmdW5jdGlvbihlKXtyZXR1cm4vdj8oWzAtOV0qKVwuKFswLTldKilcLihbMC05XSopL2kuZXhlYyhlKS5zbGljZSgxKX0pLHQucGF0aHM9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInBhdGhzIil9KSksQT10Lm9wZXJhdGlvbnM9KDAscC5jcmVhdGVTZWxlY3RvcikoVCxmdW5jdGlvbihlKXtpZighZXx8ZS5zaXplPDEpcmV0dXJuKDAsbS5MaXN0KSgpO3ZhciB0PSgwLG0uTGlzdCkoKTtyZXR1cm4gZSYmZS5mb3JFYWNoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxuKXtpZighZXx8IWUuZm9yRWFjaClyZXR1cm57fTtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtoLmluZGV4T2Yocik8MHx8KHQ9dC5wdXNoKCgwLG0uZnJvbUpTKSh7cGF0aDpuLG1ldGhvZDpyLG9wZXJhdGlvbjplLGlkOnIrIi0iK259KSkpfSl9KSx0KTooMCxtLkxpc3QpKCl9KSxDPXQuY29uc3VtZXM9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4oMCxtLlNldCkoZS5nZXQoImNvbnN1bWVzIikpfSksTz10LnByb2R1Y2VzPSgwLHAuY3JlYXRlU2VsZWN0b3IpKEUsZnVuY3Rpb24oZSl7cmV0dXJuKDAsbS5TZXQpKGUuZ2V0KCJwcm9kdWNlcyIpKX0pLFM9KHQuc2VjdXJpdHk9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInNlY3VyaXR5IiwoMCxtLkxpc3QpKCkpfSksdC5zZWN1cml0eURlZmluaXRpb25zPSgwLHAuY3JlYXRlU2VsZWN0b3IpKEUsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJzZWN1cml0eURlZmluaXRpb25zIil9KSx0LmZpbmREZWZpbml0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZSkuZ2V0SW4oWyJkZWZpbml0aW9ucyIsdF0sbnVsbCl9LHQuZGVmaW5pdGlvbnM9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoImRlZmluaXRpb25zIil8fCgwLG0uTWFwKSgpfSksdC5iYXNlUGF0aD0oMCxwLmNyZWF0ZVNlbGVjdG9yKShFLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiYmFzZVBhdGgiKX0pLHQuaG9zdD0oMCxwLmNyZWF0ZVNlbGVjdG9yKShFLGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiaG9zdCIpfSksdC5zY2hlbWVzPSgwLHAuY3JlYXRlU2VsZWN0b3IpKEUsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJzY2hlbWVzIiwoMCxtLk1hcCkoKSl9KSx0Lm9wZXJhdGlvbnNXaXRoUm9vdEluaGVyaXRlZD0oMCxwLmNyZWF0ZVNlbGVjdG9yKShBLEMsTyxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZSgib3BlcmF0aW9uIixmdW5jdGlvbihlKXtpZihlKXtpZighbS5NYXAuaXNNYXAoZSkpcmV0dXJuO3JldHVybiBlLndpdGhNdXRhdGlvbnMoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJjb25zdW1lcyIpfHxlLnVwZGF0ZSgiY29uc3VtZXMiLGZ1bmN0aW9uKGUpe3JldHVybigwLG0uU2V0KShlKS5tZXJnZSh0KX0pLGUuZ2V0KCJwcm9kdWNlcyIpfHxlLnVwZGF0ZSgicHJvZHVjZXMiLGZ1bmN0aW9uKGUpe3JldHVybigwLG0uU2V0KShlKS5tZXJnZShuKX0pLGV9KX1yZXR1cm4oMCxtLk1hcCkoKX0pfSl9KSksUj10LnRhZ3M9KDAscC5jcmVhdGVTZWxlY3RvcikoRSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInRhZ3MiLCgwLG0uTGlzdCkoKSl9KSxqPXQudGFnRGV0YWlscz1mdW5jdGlvbihlLHQpe3JldHVybihSKGUpfHwoMCxtLkxpc3QpKCkpLmZpbHRlcihtLk1hcC5pc01hcCkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoIm5hbWUiKT09PXR9LCgwLG0uTWFwKSgpKX0seD10Lm9wZXJhdGlvbnNXaXRoVGFncz0oMCxwLmNyZWF0ZVNlbGVjdG9yKShTLFIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxtLlNldCkodC5nZXRJbihbIm9wZXJhdGlvbiIsInRhZ3MiXSkpO3JldHVybiBuLmNvdW50KCk8MT9lLnVwZGF0ZSgiZGVmYXVsdCIsKDAsbS5MaXN0KSgpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2godCl9KTpuLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlLnVwZGF0ZShuLCgwLG0uTGlzdCkoKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKHQpfSl9LGUpfSx0LnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLnNldCh0LmdldCgibmFtZSIpLCgwLG0uTGlzdCkoKSl9LCgwLG0uT3JkZXJlZE1hcCkoKSkpfSksTD0odC50YWdnZWRPcGVyYXRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmdldENvbmZpZ3Mscj1uKCksbz1yLnRhZ3NTb3J0ZXIscz1yLm9wZXJhdGlvbnNTb3J0ZXI7cmV0dXJuIHgoZSkuc29ydEJ5KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIG8/bzpmLnNvcnRlcnMudGFnc1NvcnRlcltvXTtyZXR1cm4gbj9uKGUsdCk6bnVsbH0pLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBzP3M6Zi5zb3J0ZXJzLm9wZXJhdGlvbnNTb3J0ZXJbc10sbz1yP3Quc29ydChyKTp0O3JldHVybigwLG0uTWFwKSh7dGFnRGV0YWlsczpqKGUsbiksb3BlcmF0aW9uczpvfSl9KX19LHQucmVzcG9uc2VzPSgwLHAuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJyZXNwb25zZXMiLCgwLG0uTWFwKSgpKX0pKSxEPXQucmVxdWVzdHM9KDAscC5jcmVhdGVTZWxlY3RvcikoZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoInJlcXVlc3RzIiwoMCxtLk1hcCkoKSl9KSx3PXQubXV0YXRlZFJlcXVlc3RzPSgwLHAuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJtdXRhdGVkUmVxdWVzdHMiLCgwLG0uTWFwKSgpKX0pLE09KHQucmVzcG9uc2VGb3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMKGUpLmdldEluKFt0LG5dLG51bGwpfSx0LnJlcXVlc3RGb3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEKGUpLmdldEluKFt0LG5dLG51bGwpfSx0Lm11dGF0ZWRSZXF1ZXN0Rm9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdyhlKS5nZXRJbihbdCxuXSxudWxsKX0sdC5hbGxvd1RyeUl0T3V0Rm9yPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQuaGFzSG9zdD0oMCxwLmNyZWF0ZVNlbGVjdG9yKShFLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCJob3N0Iik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZ0Lmxlbmd0aD4wJiYiLyIhPT10WzBdfSksdC5vcGVyYXRpb25TY2hlbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0KCJ1cmwiKSxvPXIubWF0Y2goL14oW2Etel1bYS16MC05K1wtLl0qKTovKSxzPUFycmF5LmlzQXJyYXkobyk/b1sxXTpudWxsO3JldHVybiBlLmdldEluKFsic2NoZW1lIix0LG5dKXx8ZS5nZXRJbihbInNjaGVtZSIsIl9kZWZhdWx0U2NoZW1lIl0pfHxzfHwiIn0pO3QuY2FuRXhlY3V0ZVNjaGVtZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuWyJodHRwIiwiaHR0cHMiXS5pbmRleE9mKE0oZSx0LG4pKT4tMX0sdC52YWxpZGF0ZUJlZm9yZUV4ZWN1dGU9ZnVuY3Rpb24oZSx0KXt0PXR8fFtdO3ZhciBuPUUoZSkuZ2V0SW4oWyJwYXRocyJdLmNvbmNhdCgoMCxfLmRlZmF1bHQpKHQpLFsicGFyYW1ldGVycyJdKSwoMCxtLmZyb21KUykoW10pKSxyPSEwO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXQoImVycm9ycyIpO3QmJnQuY291bnQoKSYmKHI9ITEpfSkscn19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudXBkYXRlU3BlYz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlY0FjdGlvbnM7cmV0dXJuIGZ1bmN0aW9uKCl7ZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSxuLnBhcnNlVG9Kc29uLmFwcGx5KG4sYXJndW1lbnRzKX19LHQudXBkYXRlSnNvblNwZWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWNBY3Rpb25zO3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyksbi5yZXNvbHZlU3BlYy5hcHBseShuLGFyZ3VtZW50cyl9fSx0LmV4ZWN1dGVSZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGVjQWN0aW9ucztyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubG9nUmVxdWVzdCh0KSxlKHQpfX0sdC52YWxpZGF0ZVBhcmFtcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlY1NlbGVjdG9ycztyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCxuLmlzT0FTMygpKX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPW4oNTg5KSxFPXIoYikseT1bInNwbGl0LXBhbmUtbW9kZSJdLHY9ImxlZnQiLFQ9InJpZ2h0IixBPSJib3RoIixDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShpKSx1PTA7dTxpO3UrKylsW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbj1yPSgwLGQuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLmluaXRpYWxpemVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7ci5zcGxpdFBhbmU9ZX0sci5vbkRyYWdGaW5pc2hlZD1mdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLnRocmVzaG9sZCxuPWUubGF5b3V0QWN0aW9ucyxvPXIuc3BsaXRQYW5lLnN0YXRlLHM9by5wb3NpdGlvbixpPW8uZHJhZ2dlZFNpemU7ci5kcmFnZ2VkU2l6ZT1pO3ZhciBhPXM8PXQsbD1pPD10O24uY2hhbmdlTW9kZSh5LGE/VDpsP3Y6QSl9LHIuc2l6ZUZyb21Nb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT12PyhyLmRyYWdnZWRTaXplPW51bGwsIjBweCIpOmU9PT1UPyhyLmRyYWdnZWRTaXplPW51bGwsIjEwMCUiKTpyLmRyYWdnZWRTaXplfHx0fSxvPW4sKDAsZC5kZWZhdWx0KShyLG8pfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixuPWUubGF5b3V0U2VsZWN0b3JzLHI9bi53aGF0TW9kZSh5KSxvPXI9PT1UP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJub3NjcmlwdCIsbnVsbCk6dFswXSxzPXI9PT12P20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJub3NjcmlwdCIsbnVsbCk6dFsxXSxpPXRoaXMuc2l6ZUZyb21Nb2RlKHIsIjUwJSIpO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFLmRlZmF1bHQse2Rpc2FibGVkQ2xhc3M6IiIscmVmOnRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCxzcGxpdDoidmVydGljYWwiLGRlZmF1bHRTaXplOiI1MCUiLHByaW1hcnk6InNlY29uZCIsbWluU2l6ZTowLHNpemU6aSxvbkRyYWdGaW5pc2hlZDp0aGlzLm9uRHJhZ0ZpbmlzaGVkLGFsbG93UmVzaXplOnIhPT12JiZyIT09VCxyZXNpemVyU3R5bGU6e2ZsZXg6IjAgMCBhdXRvIixwb3NpdGlvbjoicmVsYXRpdmUifX0sbyxzKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Qy5wcm9wVHlwZXM9e3RocmVzaG9sZDpnLmRlZmF1bHQubnVtYmVyLGNoaWxkcmVuOmcuZGVmYXVsdC5hcnJheSxsYXlvdXRTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxDLmRlZmF1bHRQcm9wcz17dGhyZXNob2xkOjEwMCxjaGlsZHJlbjpbXX0sdC5kZWZhdWx0PUN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybntjb21wb25lbnRzOntTcGxpdFBhbmVNb2RlOnMuZGVmYXVsdH19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9cjt2YXIgbz1uKDE5NCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjcwKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlncztyZXR1cm57Zm46e2ZldGNoOm8uZGVmYXVsdC5tYWtlSHR0cCh0LnByZUZldGNoLHQucG9zdEZldGNoKSxidWlsZFJlcXVlc3Q6by5kZWZhdWx0LmJ1aWxkUmVxdWVzdCxleGVjdXRlOm8uZGVmYXVsdC5leGVjdXRlLHJlc29sdmU6by5kZWZhdWx0LnJlc29sdmUsc2VyaWFsaXplUmVzOm8uZGVmYXVsdC5zZXJpYWxpemVSZXMsb3BJZDpvLmRlZmF1bHQuaGVscGVycy5vcElkfX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm57Zm46e3NoYWxsb3dFcXVhbEtleXM6ci5zaGFsbG93RXF1YWxLZXlzfX19O3ZhciByPW4oOCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmdldENvbXBvbmVudHMsbj1lLmdldFN0b3JlLHI9ZS5nZXRTeXN0ZW0saT1vLmdldENvbXBvbmVudCxhPW8ucmVuZGVyLGw9by5tYWtlTWFwcGVkQ29udGFpbmVyLHU9KDAscy5tZW1vaXplKShpLmJpbmQobnVsbCxyLG4sdCkpO3JldHVybntyb290SW5qZWN0czp7Z2V0Q29tcG9uZW50OnUsbWFrZU1hcHBlZENvbnRhaW5lcjooMCxzLm1lbW9pemUpKGwuYmluZChudWxsLHIsbix1LHQpKSxyZW5kZXI6YS5iaW5kKG51bGwscixuLGksdCl9fX07dmFyIHI9bigxOTkpLG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShyKSxzPW4oOCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0Q29tcG9uZW50PXQucmVuZGVyPXQubWFrZU1hcHBlZENvbnRhaW5lcj12b2lkIDA7dmFyIG89bigzMSkscz1yKG8pLGk9bigzMCksYT1yKGkpLGw9bigyMSksdT1yKGwpLGM9bigxNCksZD1yKGMpLF89big0KSxwPXIoXyksZj1uKDIpLG09cihmKSxoPW4oMyksZz1yKGgpLGI9big2KSxFPXIoYikseT1uKDUpLHY9cih5KSxUPW4oMCksQT1yKFQpLEM9big1ODUpLE89cihDKSxTPW4oNTg4KSxSPW4oNTY2KSxqPXIoUikseD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtmdW5jdGlvbiByKCl7cmV0dXJuKDAsbS5kZWZhdWx0KSh0aGlzLHIpLCgwLEUuZGVmYXVsdCkodGhpcywoci5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkocikpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdi5kZWZhdWx0KShyLG4pLCgwLGcuZGVmYXVsdCkocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh0LCgwLGQuZGVmYXVsdCkoe30sZSgpLHRoaXMucHJvcHMsdGhpcy5jb250ZXh0KSl9fV0pLHJ9KFQuQ29tcG9uZW50KX0sTD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtmdW5jdGlvbiByKCl7cmV0dXJuKDAsbS5kZWZhdWx0KSh0aGlzLHIpLCgwLEUuZGVmYXVsdCkodGhpcywoci5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkocikpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdi5kZWZhdWx0KShyLG4pLCgwLGcuZGVmYXVsdCkocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLlByb3ZpZGVyLHtzdG9yZTplfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh0LCgwLGQuZGVmYXVsdCkoe30sdGhpcy5wcm9wcyx0aGlzLmNvbnRleHQpKSl9fV0pLHJ9KFQuQ29tcG9uZW50KX0sRD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24obixyKXt2YXIgbz0oMCx1LmRlZmF1bHQpKHt9LHIsZSgpKTtyZXR1cm4odC5wcm90b3R5cGUubWFwU3RhdGVUb1Byb3BzfHxmdW5jdGlvbihlKXtyZXR1cm57c3RhdGU6ZX19KShuLG8pfSxvPXgoZSx0KSxzPSgwLFMuY29ubmVjdCkocikobyk7cmV0dXJuIG4/TChuLHMpOnN9LHc9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvIGluIHQpe3ZhciBzPXRbb107ImZ1bmN0aW9uIj09dHlwZW9mIHMmJnMobltvXSxyW29dLGUoKSl9fSxNPSh0Lm1ha2VNYXBwZWRDb250YWluZXI9ZnVuY3Rpb24oZSx0LG4scixvLHMpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsbil7KDAsbS5kZWZhdWx0KSh0aGlzLHIpO3ZhciBvPSgwLEUuZGVmYXVsdCkodGhpcywoci5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkocikpLmNhbGwodGhpcyx0LG4pKTtyZXR1cm4gdyhlLHMsdCx7fSksb31yZXR1cm4oMCx2LmRlZmF1bHQpKHIsdCksKDAsZy5kZWZhdWx0KShyLFt7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbih0KXt3KGUscyx0LHRoaXMucHJvcHMpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLGouZGVmYXVsdCkodGhpcy5wcm9wcyxzPygwLGEuZGVmYXVsdCkocyk6W10pLHQ9bihvLCJyb290Iik7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQsZSl9fV0pLHJ9KFQuQ29tcG9uZW50KX0sdC5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz1uKGUsdCxyLCJBcHAiLCJyb290Iik7Ty5kZWZhdWx0LnJlbmRlcihBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChzLG51bGwpLG8pfSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybigwLG0uZGVmYXVsdCkodGhpcyxuKSwoMCxFLmRlZmF1bHQpKHRoaXMsKG4uX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKG4pKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHYuZGVmYXVsdCkobix0KSwoMCxnLmRlZmF1bHQpKG4sW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLnByb3BzKX19XSksbn0oVC5Db21wb25lbnQpfSksaz1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWU7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7cGFkZGluZzoiMWVtIixjb2xvcjoiI2FhYSJ9fSwi8J+YsSAiLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIixudWxsLCJDb3VsZCBub3QgcmVuZGVyICIsInQiPT09dD8idGhpcyBjb21wb25lbnQiOnQsIiwgc2VlIHRoZSBjb25zb2xlLiIpKX0sST1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4hKGUucHJvdG90eXBlJiZlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KX0oZSk/TShlKTplLG49dC5wcm90b3R5cGUucmVuZGVyO3JldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt0cnl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShlKSxvPTA7bzxlO28rKylyW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4gbi5hcHBseSh0aGlzLHIpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKGUpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsse2Vycm9yOmUsbmFtZTp0Lm5hbWV9KX19LHR9O3QuZ2V0Q29tcG9uZW50PWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoIk5lZWQgYSBzdHJpbmcsIHRvIGZldGNoIGEgY29tcG9uZW50LiBXYXMgZ2l2ZW4gYSAiKyh2b2lkIDA9PT1yPyJ1bmRlZmluZWQiOigwLHMuZGVmYXVsdCkocikpKTt2YXIgaT1uKHIpO3JldHVybiBpP28/InJvb3QiPT09bz9EKGUsaSx0KCkpOkQoZSxJKGkpKTpJKGkpOihlKCkubG9nLndhcm4oIkNvdWxkIG5vdCBmaW5kIGNvbXBvbmVudCIsciksbnVsbCl9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQyKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTYpLmRvY3VtZW50O2UuZXhwb3J0cz1yJiZyLmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigzMikmJiFuKDQ0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigxMDApKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDUpLG89bigxNSkoIml0ZXJhdG9yIikscz1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYoci5BcnJheT09PWV8fHNbb109PT1lKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7dHJ5e3JldHVybiBvP3QocihuKVswXSxuWzFdKTp0KG4pfWNhdGNoKHQpe3ZhciBzPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PXMmJnIocy5jYWxsKGUpKSx0fX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3NCksbz1uKDIzKSxzPW4oMjE1KSxpPW4oMzYpLGE9bigzNSksbD1uKDQ1KSx1PW4oMzU3KSxjPW4oNzYpLGQ9bigyMTApLF89bigxNSkoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixtLGgsZyxiKXt1KG4sdCxtKTt2YXIgRSx5LHYsVD1mdW5jdGlvbihlKXtpZighcCYmZSBpbiBTKXJldHVybiBTW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxBPXQrIiBJdGVyYXRvciIsQz0idmFsdWVzIj09aCxPPSExLFM9ZS5wcm90b3R5cGUsUj1TW19dfHxTWyJAQGl0ZXJhdG9yIl18fGgmJlNbaF0saj1SfHxUKGgpLHg9aD9DP1QoImVudHJpZXMiKTpqOnZvaWQgMCxMPSJBcnJheSI9PXQ/Uy5lbnRyaWVzfHxSOlI7aWYoTCYmKHY9ZChMLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ2Lm5leHQmJihjKHYsQSwhMCkscnx8YSh2LF8pfHxpKHYsXyxmKSksQyYmUiYmInZhbHVlcyIhPT1SLm5hbWUmJihPPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMpfSksciYmIWJ8fCFwJiYhTyYmU1tfXXx8aShTLF8saiksbFt0XT1qLGxbQV09ZixoKWlmKEU9e3ZhbHVlczpDP2o6VCgidmFsdWVzIiksa2V5czpnP2o6VCgia2V5cyIpLGVudHJpZXM6eH0sYilmb3IoeSBpbiBFKXkgaW4gU3x8cyhTLHksRVt5XSk7ZWxzZSBvKG8uUCtvLkYqKHB8fE8pLHQsRSk7cmV0dXJuIEV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxNSkoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIHM9WzddW3JdKCk7cy5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKHMsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIHM9WzddLGk9c1tyXSgpO2kubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxzW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUocyl9Y2F0Y2goZSl7fXJldHVybiBufX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzUpLG89big1NCkscz1uKDQ2KSxpPW4oMTA5KSxhPW4oMzUpLGw9bigyMDIpLHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigzMik/dTpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWkodCwhMCksbCl0cnl7cmV0dXJuIHUoZSx0KX1jYXRjaChlKXt9aWYoYShlLHQpKXJldHVybiBvKCFyLmYuY2FsbChlLHQpLGVbdF0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjExKSxvPW4oMTAxKS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM1KSxvPW4oNTUpLHM9bigxMDUpKCJJRV9QUk9UTyIpLGk9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxzKT9lW3NdOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2k6bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM1KSxvPW4oNDYpLHM9bigzNTEpKCExKSxpPW4oMTA1KSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixhPW8oZSksbD0wLHU9W107Zm9yKG4gaW4gYSluIT1pJiZyKGEsbikmJnUucHVzaChuKTtmb3IoO3QubGVuZ3RoPmw7KXIoYSxuPXRbbCsrXSkmJih+cyh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjMpLG89bigxMCkscz1uKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oby5PYmplY3R8fHt9KVtlXXx8T2JqZWN0W2VdLGk9e307aVtlXT10KG4pLHIoci5TK3IuRipzKGZ1bmN0aW9uKCl7bigxKX0pLCJPYmplY3QiLGkpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlOiExLHY6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZTohMCx2OmV9fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KSxvPW4oMzcpLHM9bigxMDIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHIoZSksbyh0KSYmdC5jb25zdHJ1Y3Rvcj09PWUpcmV0dXJuIHQ7dmFyIG49cy5mKGUpO3JldHVybigwLG4ucmVzb2x2ZSkodCksbi5wcm9taXNlfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDM2KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjUpLG89big3Mykscz1uKDE1KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGk9cihlKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09aXx8dm9pZCAwPT0obj1yKGkpW3NdKT90Om8obil9fSxmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzLGk9big0MyksYT1uKDM1NSksbD1uKDIwMSksdT1uKDEwMCksYz1uKDE2KSxkPWMucHJvY2VzcyxfPWMuc2V0SW1tZWRpYXRlLHA9Yy5jbGVhckltbWVkaWF0ZSxmPWMuTWVzc2FnZUNoYW5uZWwsbT1jLkRpc3BhdGNoLGg9MCxnPXt9LGI9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZihnLmhhc093blByb3BlcnR5KGUpKXt2YXIgdD1nW2VdO2RlbGV0ZSBnW2VdLHQoKX19LEU9ZnVuY3Rpb24oZSl7Yi5jYWxsKGUuZGF0YSl9O18mJnB8fChfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyl0LnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBnWysraF09ZnVuY3Rpb24oKXthKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LHIoaCksaH0scD1mdW5jdGlvbihlKXtkZWxldGUgZ1tlXX0sInByb2Nlc3MiPT1uKDUyKShkKT9yPWZ1bmN0aW9uKGUpe2QubmV4dFRpY2soaShiLGUsMSkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKGUpe20ubm93KGkoYixlLDEpKX06Zj8obz1uZXcgZixzPW8ucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9RSxyPWkocy5wb3N0TWVzc2FnZSxzLDEpKTpjLmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWMuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbihlKXtjLnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixFLCExKSk6cj0ib25yZWFkeXN0YXRlY2hhbmdlImluIHUoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQodSgic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcyksYi5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChpKGIsZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0Ol8sY2xlYXI6cH19LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxOSkuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0Nyksbz1uKDU3KSxzPW4oMTIpKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gcihlKSYmKHZvaWQgMCE9PSh0PWVbc10pPyEhdDoiUmVnRXhwIj09byhlKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjIzKSxvPW4oMTcpLHM9big0OCksaT1uKDQwKSxhPW4oNjApLGw9big2MSksdT1uKDM5NyksYz1uKDExNyksZD1uKDQwMyksXz1uKDEyKSgiaXRlcmF0b3IiKSxwPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG0saCxnLGIpe3Uobix0LG0pO3ZhciBFLHksdixUPWZ1bmN0aW9uKGUpe2lmKCFwJiZlIGluIFMpcmV0dXJuIFNbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19LEE9dCsiIEl0ZXJhdG9yIixDPSJ2YWx1ZXMiPT1oLE89ITEsUz1lLnByb3RvdHlwZSxSPVNbX118fFNbIkBAaXRlcmF0b3IiXXx8aCYmU1toXSxqPSFwJiZSfHxUKGgpLHg9aD9DP1QoImVudHJpZXMiKTpqOnZvaWQgMCxMPSJBcnJheSI9PXQ/Uy5lbnRyaWVzfHxSOlI7aWYoTCYmKHY9ZChMLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ2Lm5leHQmJihjKHYsQSwhMCkscnx8YSh2LF8pfHxpKHYsXyxmKSksQyYmUiYmInZhbHVlcyIhPT1SLm5hbWUmJihPPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMpfSksciYmIWJ8fCFwJiYhTyYmU1tfXXx8aShTLF8saiksbFt0XT1qLGxbQV09ZixoKWlmKEU9e3ZhbHVlczpDP2o6VCgidmFsdWVzIiksa2V5czpnP2o6VCgia2V5cyIpLGVudHJpZXM6eH0sYilmb3IoeSBpbiBFKXkgaW4gU3x8cyhTLHksRVt5XSk7ZWxzZSBvKG8uUCtvLkYqKHB8fE8pLHQsRSk7cmV0dXJuIEV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDA0KSxvPW4oMjE5KTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJue2U6ITEsdjplKCl9fWNhdGNoKGUpe3JldHVybntlOiEwLHY6ZX19fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzgpLG89big0Nykscz1uKDExNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocihlKSxvKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1zLmYoZSk7cmV0dXJuKDAsbi5yZXNvbHZlKSh0KSxuLnByb21pc2V9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE5KSxvPXJbIl9fY29yZS1qc19zaGFyZWRfXyJdfHwoclsiX19jb3JlLWpzX3NoYXJlZF9fIl09e30pO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gb1tlXXx8KG9bZV09e30pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzgpLG89big3OSkscz1uKDEyKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGk9cihlKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09aXx8dm9pZCAwPT0obj1yKGkpW3NdKT90Om8obil9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4Myksbz1uKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHMsaSxhPVN0cmluZyhvKHQpKSxsPXIobiksdT1hLmxlbmd0aDtyZXR1cm4gbDwwfHxsPj11P2U/IiI6dm9pZCAwOihzPWEuY2hhckNvZGVBdChsKSxzPDU1Mjk2fHxzPjU2MzE5fHxsKzE9PT11fHwoaT1hLmNoYXJDb2RlQXQobCsxKSk8NTYzMjB8fGk+NTczNDM/ZT9hLmNoYXJBdChsKTpzOmU/YS5zbGljZShsLGwrMik6aS01NjMyMCsocy01NTI5Njw8MTApKzY1NTM2KX19fSxmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxzLGk9big4MCksYT1uKDM5MyksbD1uKDIyMCksdT1uKDExNCksYz1uKDE5KSxkPWMucHJvY2VzcyxfPWMuc2V0SW1tZWRpYXRlLHA9Yy5jbGVhckltbWVkaWF0ZSxmPWMuTWVzc2FnZUNoYW5uZWwsbT1jLkRpc3BhdGNoLGg9MCxnPXt9LGI9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZihnLmhhc093blByb3BlcnR5KGUpKXt2YXIgdD1nW2VdO2RlbGV0ZSBnW2VdLHQoKX19LEU9ZnVuY3Rpb24oZSl7Yi5jYWxsKGUuZGF0YSl9O18mJnB8fChfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyl0LnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBnWysraF09ZnVuY3Rpb24oKXthKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LHIoaCksaH0scD1mdW5jdGlvbihlKXtkZWxldGUgZ1tlXX0sInByb2Nlc3MiPT1uKDU3KShkKT9yPWZ1bmN0aW9uKGUpe2QubmV4dFRpY2soaShiLGUsMSkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKGUpe20ubm93KGkoYixlLDEpKX06Zj8obz1uZXcgZixzPW8ucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9RSxyPWkocy5wb3N0TWVzc2FnZSxzLDEpKTpjLmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWMuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbihlKXtjLnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixFLCExKSk6cj0ib25yZWFkeXN0YXRlY2hhbmdlImluIHUoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQodSgic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcyksYi5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChpKGIsZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0Ol8sY2xlYXI6cH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDgzKSxvPU1hdGgubWF4LHM9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9cihlKSxlPDA/byhlK3QsMCk6cyhlLHQpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIzMCkoITApO24oMjIyKShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fdCxuPXRoaXMuX2k7cmV0dXJuIG4+PXQubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9cih0LG4pLHRoaXMuX2krPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyNiksbz1yLlVpbnQ4QXJyYXk7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG49aShlKSxyPSFuJiZzKGUpLGM9IW4mJiFyJiZhKGUpLF89IW4mJiFyJiYhYyYmdShlKSxwPW58fHJ8fGN8fF8sZj1wP28oZS5sZW5ndGgsU3RyaW5nKTpbXSxtPWYubGVuZ3RoO2Zvcih2YXIgaCBpbiBlKSF0JiYhZC5jYWxsKGUsaCl8fHAmJigibGVuZ3RoIj09aHx8YyYmKCJvZmZzZXQiPT1ofHwicGFyZW50Ij09aCl8fF8mJigiYnVmZmVyIj09aHx8ImJ5dGVMZW5ndGgiPT1ofHwiYnl0ZU9mZnNldCI9PWgpfHxsKGgsbSkpfHxmLnB1c2goaCk7cmV0dXJuIGZ9dmFyIG89big0ODIpLHM9bigxMzMpLGk9bigxMyksYT1uKDEzNCksbD1uKDEyOSksdT1uKDI2MSksYz1PYmplY3QucHJvdG90eXBlLGQ9Yy5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1lW3RdO2EuY2FsbChlLHQpJiZzKHIsbikmJih2b2lkIDAhPT1ufHx0IGluIGUpfHxvKGUsdCxuKX12YXIgbz1uKDIzOSkscz1uKDY2KSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7Il9fcHJvdG9fXyI9PXQmJm8/byhlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59dmFyIG89bigyNDQpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gcyhlKT9yOm8ocixuKGUpKX12YXIgbz1uKDEyNCkscz1uKDEzKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4sYSxsKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhcyhlKSYmIWkodCk/ZSE9PWUmJnQhPT10Om8oZSx0LG4sYSxyLGwpKX12YXIgbz1uKDQ2OCkscz1uKDI5KSxpPW4oNTEpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3ZhciByPS0xLG89ZS5sZW5ndGg7dDwwJiYodD0tdD5vPzA6byt0KSxuPW4+bz9vOm4sbjwwJiYobis9byksbz10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIHM9QXJyYXkobyk7KytyPG87KXNbcl09ZVtyK3RdO3JldHVybiBzfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8oaShzKHQpLnJlcGxhY2UoYSwiIikpLGUsIiIpfX12YXIgbz1uKDg2KSxzPW4oNTU4KSxpPW4oNTc1KSxhPVJlZ0V4cCgiWyfigJldIiwiZyIpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MSksbz1mdW5jdGlvbigpe3RyeXt2YXIgZT1yKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gZSh7fSwiIix7fSksZX1jYXRjaChlKXt9fSgpO2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyLHUsYyl7dmFyIGQ9biZhLF89ZS5sZW5ndGgscD10Lmxlbmd0aDtpZihfIT1wJiYhKGQmJnA+XykpcmV0dXJuITE7dmFyIGY9Yy5nZXQoZSk7aWYoZiYmYy5nZXQodCkpcmV0dXJuIGY9PXQ7dmFyIG09LTEsaD0hMCxnPW4mbD9uZXcgbzp2b2lkIDA7Zm9yKGMuc2V0KGUsdCksYy5zZXQodCxlKTsrK208Xzspe3ZhciBiPWVbbV0sRT10W21dO2lmKHIpdmFyIHk9ZD9yKEUsYixtLHQsZSxjKTpyKGIsRSxtLGUsdCxjKTtpZih2b2lkIDAhPT15KXtpZih5KWNvbnRpbnVlO2g9ITE7YnJlYWt9aWYoZyl7aWYoIXModCxmdW5jdGlvbihlLHQpe2lmKCFpKGcsdCkmJihiPT09ZXx8dShiLGUsbixyLGMpKSlyZXR1cm4gZy5wdXNoKHQpfSkpe2g9ITE7YnJlYWt9fWVsc2UgaWYoYiE9PUUmJiF1KGIsRSxuLHIsYykpe2g9ITE7YnJlYWt9fXJldHVybiBjLmRlbGV0ZShlKSxjLmRlbGV0ZSh0KSxofXZhciBvPW4oNDQ4KSxzPW4oMjM3KSxpPW4oNDg2KSxhPTEsbD0yO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQ7ZS5leHBvcnRzPW59KS5jYWxsKHQsbigyNjYpKX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSxpLHMpfXZhciBvPW4oMjQwKSxzPW4oMjQ5KSxpPW4oMjYyKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMyKSxvPXIoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEyNCksbz1uKDI0OCkscz1uKDEyOCksaT1uKDI2NCksYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGw9YT9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107ZTspcih0LHMoZSkpLGU9byhlKTtyZXR1cm4gdH06aTtlLmV4cG9ydHM9bH0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDQ0KSxvPW4oMTIxKSxzPW4oNDQ2KSxpPW4oNDQ3KSxhPW4oNDQ5KSxsPW4oNTApLHU9bigyNTYpLGM9dShyKSxkPXUobyksXz11KHMpLHA9dShpKSxmPXUoYSksbT1sOyhyJiYiW29iamVjdCBEYXRhVmlld10iIT1tKG5ldyByKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxvJiYiW29iamVjdCBNYXBdIiE9bShuZXcgbyl8fHMmJiJbb2JqZWN0IFByb21pc2VdIiE9bShzLnJlc29sdmUoKSl8fGkmJiJbb2JqZWN0IFNldF0iIT1tKG5ldyBpKXx8YSYmIltvYmplY3QgV2Vha01hcF0iIT1tKG5ldyBhKSkmJihtPWZ1bmN0aW9uKGUpe3ZhciB0PWwoZSksbj0iW29iamVjdCBPYmplY3RdIj09dD9lLmNvbnN0cnVjdG9yOnZvaWQgMCxyPW4/dShuKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIGM6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIGQ6cmV0dXJuIltvYmplY3QgTWFwXSI7Y2FzZSBfOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgU2V0XSI7Y2FzZSBmOnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gdH0pLGUuZXhwb3J0cz1tfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHIudGVzdChlKX12YXIgcj1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlPT09ZSYmIW8oZSl9dmFyIG89bigyOSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pLG59ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmbltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChuKSl9fWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7blsrK3RdPWV9KSxufWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBvLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaChlKXt9fXJldHVybiIifXZhciByPUZ1bmN0aW9uLnByb3RvdHlwZSxvPXIudG9TdHJpbmc7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUwMiksbz1uKDU1OSkscz1yKG8pO2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9bnVsbD09ZT92b2lkIDA6byhlLHQpO3JldHVybiB2b2lkIDA9PT1yP246cn12YXIgbz1uKDEyNik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIXMoZSkpcmV0dXJuITE7dmFyIHQ9byhlKTtyZXR1cm4gdD09YXx8dD09bHx8dD09aXx8dD09dX12YXIgbz1uKDUwKSxzPW4oMjkpLGk9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGE9IltvYmplY3QgRnVuY3Rpb25dIixsPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsdT0iW29iamVjdCBQcm94eV0iO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0NzEpLG89big0ODQpLHM9big1MzgpLGk9cyYmcy5pc1R5cGVkQXJyYXksYT1pP28oaSk6cjtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSk/byhlLCEwKTpzKGUpfXZhciBvPW4oMjM1KSxzPW4oNDczKSxpPW4oNjcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHxudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKHMpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxzPW4uY2FjaGU7aWYocy5oYXMobykpcmV0dXJuIHMuZ2V0KG8pO3ZhciBpPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1zLnNldChvLGkpfHxzLGl9O3JldHVybiBuLmNhY2hlPW5ldyhyLkNhY2hlfHxvKSxufXZhciBvPW4oMTIyKSxzPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtyLkNhY2hlPW8sZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3JldHVybltdfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1MDEpLG89cigidG9VcHBlckNhc2UiKTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0KXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKXx8KDAsZXZhbCkoInRoaXMiKX1jYXRjaChlKXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvZGVlcC1leHRlbmQvbGliL2RlZXAtZXh0ZW5kLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtY29sbGFwc2UvbGliL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItY2xpZW50L2Rpc3QvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgbz1uKDI0KSxzPXIobyksaT1uKDMwKSxhPXIoaSksbD1uKDMxKSx1PXIobCksYz1uKDI2NyksZD1yKGMpLF89bigzMjgpLHA9cihfKSxmPW4oMjcpLG09cihmKSxoPW4oMzI2KSxnPXIoaCksYj1uKDE0MSksRT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KGIpLHk9big4KSx2PXtQQUNLQUdFX1ZFUlNJT046IjMuMTAuMCIsR0lUX0NPTU1JVDoiZzEwMTNkMTYiLEdJVF9ESVJUWTohMSxIT1NUTkFNRToidHJhdmlzLWpvYi0wZjczMmUzZC1lMDIyLTQ2M2QtODdlOS1hNTVhODAzMmMzYzciLEJVSUxEX1RJTUU6IlNhdCwgMTAgRmViIDIwMTggMDQ6NTE6MDEgR01UIn0sVD12LkdJVF9ESVJUWSxBPXYuR0lUX0NPTU1JVCxDPXYuUEFDS0FHRV9WRVJTSU9OLE89di5IT1NUTkFNRSxTPXYuQlVJTERfVElNRTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7bS5kZWZhdWx0LnZlcnNpb25zPW0uZGVmYXVsdC52ZXJzaW9uc3x8e30sbS5kZWZhdWx0LnZlcnNpb25zLnN3YWdnZXJVaT17dmVyc2lvbjpDLGdpdFJldmlzaW9uOkEsZ2l0RGlydHk6VCxidWlsZFRpbWVzdGFtcDpTLG1hY2hpbmU6T307dmFyIHQ9e2RvbV9pZDpudWxsLGRvbU5vZGU6bnVsbCxzcGVjOnt9LHVybDoiIix1cmxzOm51bGwsbGF5b3V0OiJCYXNlTGF5b3V0Iixkb2NFeHBhbnNpb246Imxpc3QiLG1heERpc3BsYXllZFRhZ3M6bnVsbCxmaWx0ZXI6bnVsbCx2YWxpZGF0b3JVcmw6Imh0dHBzOi8vb25saW5lLnN3YWdnZXIuaW8vdmFsaWRhdG9yIixjb25maWdzOnt9LGN1c3RvbTp7fSxkaXNwbGF5T3BlcmF0aW9uSWQ6ITEsZGlzcGxheVJlcXVlc3REdXJhdGlvbjohMSxkZWVwTGlua2luZzohMSxyZXF1ZXN0SW50ZXJjZXB0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHJlc3BvbnNlSW50ZXJjZXB0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHNob3dNdXRhdGVkUmVxdWVzdDohMCxkZWZhdWx0TW9kZWxSZW5kZXJpbmc6ImV4YW1wbGUiLGRlZmF1bHRNb2RlbEV4cGFuZERlcHRoOjEsZGVmYXVsdE1vZGVsc0V4cGFuZERlcHRoOjEsc2hvd0V4dGVuc2lvbnM6ITEsc3VwcG9ydGVkU3VibWl0TWV0aG9kczpbImdldCIsInB1dCIsInBvc3QiLCJkZWxldGUiLCJvcHRpb25zIiwiaGVhZCIsInBhdGNoIiwidHJhY2UiXSxwcmVzZXRzOltnLmRlZmF1bHRdLHBsdWdpbnM6W10saW5pdGlhbFN0YXRlOnt9LGZuOnt9LGNvbXBvbmVudHM6e319LG49KDAseS5wYXJzZVNlYXJjaCkoKSxyPWUuZG9tTm9kZTtkZWxldGUgZS5kb21Ob2RlO3ZhciBvPSgwLGQuZGVmYXVsdCkoe30sdCxlLG4pLGk9e3N5c3RlbTp7Y29uZmlnczpvLmNvbmZpZ3N9LHBsdWdpbnM6by5wcmVzZXRzLHN0YXRlOigwLGQuZGVmYXVsdCkoe2xheW91dDp7bGF5b3V0Om8ubGF5b3V0LGZpbHRlcjpvLmZpbHRlcn0sc3BlYzp7c3BlYzoiIix1cmw6by51cmx9fSxvLmluaXRpYWxTdGF0ZSl9O2lmKG8uaW5pdGlhbFN0YXRlKWZvcih2YXIgbCBpbiBvLmluaXRpYWxTdGF0ZSlvLmluaXRpYWxTdGF0ZS5oYXNPd25Qcm9wZXJ0eShsKSYmdm9pZCAwPT09by5pbml0aWFsU3RhdGVbbF0mJmRlbGV0ZSBpLnN0YXRlW2xdO3ZhciBjPWZ1bmN0aW9uKCl7cmV0dXJue2ZuOm8uZm4sY29tcG9uZW50czpvLmNvbXBvbmVudHMsc3RhdGU6by5zdGF0ZX19LF89bmV3IHAuZGVmYXVsdChpKTtfLnJlZ2lzdGVyKFtvLnBsdWdpbnMsY10pO3ZhciBmPV8uZ2V0U3lzdGVtKCksaD1mdW5jdGlvbihlKXtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1vPyJ1bmRlZmluZWQiOigwLHUuZGVmYXVsdCkobykpKXJldHVybiBmO3ZhciB0PWYuc3BlY1NlbGVjdG9ycy5nZXRMb2NhbENvbmZpZz9mLnNwZWNTZWxlY3RvcnMuZ2V0TG9jYWxDb25maWcoKTp7fSxpPSgwLGQuZGVmYXVsdCkoe30sdCxvLGV8fHt9LG4pO2lmKHImJihpLmRvbU5vZGU9ciksXy5zZXRDb25maWdzKGkpLG51bGwhPT1lJiYoIW4udXJsJiYib2JqZWN0Ij09PSgwLHUuZGVmYXVsdCkoaS5zcGVjKSYmKDAsYS5kZWZhdWx0KShpLnNwZWMpLmxlbmd0aD8oZi5zcGVjQWN0aW9ucy51cGRhdGVVcmwoIiIpLGYuc3BlY0FjdGlvbnMudXBkYXRlTG9hZGluZ1N0YXR1cygic3VjY2VzcyIpLGYuc3BlY0FjdGlvbnMudXBkYXRlU3BlYygoMCxzLmRlZmF1bHQpKGkuc3BlYykpKTpmLnNwZWNBY3Rpb25zLmRvd25sb2FkJiZpLnVybCYmKGYuc3BlY0FjdGlvbnMudXBkYXRlVXJsKGkudXJsKSxmLnNwZWNBY3Rpb25zLmRvd25sb2FkKGkudXJsKSkpLGkuZG9tTm9kZSlmLnJlbmRlcihpLmRvbU5vZGUsIkFwcCIpO2Vsc2UgaWYoaS5kb21faWQpe3ZhciBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaS5kb21faWQpO2YucmVuZGVyKGwsIkFwcCIpfWVsc2UgbnVsbD09PWkuZG9tX2lkfHxudWxsPT09aS5kb21Ob2RlfHxjb25zb2xlLmVycm9yKCJTa2lwcGVkIHJlbmRlcmluZzogbm8gYGRvbV9pZGAgb3IgYGRvbU5vZGVgIHdhcyBzcGVjaWZpZWQiKTtyZXR1cm4gZn0sYj1uLmNvbmZpZ3x8by5jb25maWdVcmw7cmV0dXJuIWJ8fCFmLnNwZWNBY3Rpb25zLmdldENvbmZpZ0J5VXJsfHxmLnNwZWNBY3Rpb25zLmdldENvbmZpZ0J5VXJsJiYhZi5zcGVjQWN0aW9ucy5nZXRDb25maWdCeVVybChiLGgpP2goKTpmfSxlLmV4cG9ydHMucHJlc2V0cz17YXBpczpnLmRlZmF1bHR9LGUuZXhwb3J0cy5wbHVnaW5zPUV9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNyk7dm9pZCAwPT09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKS5kZWZhdWx0LlByb21pc2UmJm4oMzg3KSxTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGh8fG4oMzg2KX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbC5pbmRleE9mKGVbMF0pPi0xfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixvPWUucmVwbGFjZShpLCIiKTtyZXR1cm4gcihvKT9vOihuPW8ubWF0Y2goYSkpPyh0PW5bMF0scy50ZXN0KHQpPyJhYm91dDpibGFuayI6byk6ImFib3V0OmJsYW5rIn12YXIgcz0vXiglMjB8XHMpKihqYXZhc2NyaXB0fGRhdGEpL2ltLGk9L1teXHgyMC1ceDdFXS9naW0sYT0vXihbXjpdKyk6L2dtLGw9WyIuIiwiLyJdO2UuZXhwb3J0cz17c2FuaXRpemVVcmw6b319LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGEuZGVmYXVsdCkodGhpcyx0KSwoMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImdldExheW91dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5nZXRDb21wb25lbnQsbj1lLmxheW91dFNlbGVjdG9ycyxyPW4uY3VycmVudCgpO3JldHVybiB0KHIsITApfHxmdW5jdGlvbigpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDEiLG51bGwsJyBObyBsYXlvdXQgZGVmaW5lZCBmb3IgIicsciwnIiAnKX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRMYXlvdXQoKTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZSxudWxsKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7dC5kZWZhdWx0PWIsYi5wcm9wVHlwZXM9e2dldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGxheW91dFNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LGIuZGVmYXVsdFByb3BzPXt9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE0KSxzPXIobyksaT1uKDExKSxhPXIoaSksbD1uKDQpLHU9cihsKSxjPW4oMiksZD1yKGMpLF89bigzKSxwPXIoXyksZj1uKDYpLG09cihmKSxoPW4oNSksZz1yKGgpLGI9bigwKSxFPXIoYikseT1uKDEpLHY9cih5KSxUPW4oOSksQT1yKFQpLEM9e2NvbG9yOiIjOTk5Iixmb250U3R5bGU6Iml0YWxpYyJ9LE89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGQuZGVmYXVsdCkodGhpcyx0KSwoMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5nZXRDb21wb25lbnQsbj1lLmdldENvbmZpZ3Mscj1lLnNjaGVtYSxvPWUuZGVwdGgsaT1lLmV4cGFuZERlcHRoLGw9ZS5uYW1lLHU9ZS5zcGVjUGF0aCxjPXIuZ2V0KCJkZXNjcmlwdGlvbiIpLGQ9ci5nZXQoIml0ZW1zIiksXz1yLmdldCgidGl0bGUiKXx8bCxwPXIuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT1bInR5cGUiLCJpdGVtcyIsImRlc2NyaXB0aW9uIiwiJCRyZWYiXS5pbmRleE9mKHQpfSksZj10KCJNYXJrZG93biIpLG09dCgiTW9kZWxDb2xsYXBzZSIpLGg9dCgiTW9kZWwiKSxnPXQoIlByb3BlcnR5IiksYj1fJiZFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kZWwtdGl0bGUifSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kZWwtdGl0bGVfX3RleHQifSxfKSk7cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJtb2RlbCJ9LEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KG0se3RpdGxlOmIsZXhwYW5kZWQ6bzw9aSxjb2xsYXBzZWRDb250ZW50OiJbLi4uXSJ9LCJbIixwLnNpemU/cC5lbnRyeVNlcSgpLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXTtyZXR1cm4gRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZyx7a2V5Om4rIi0iK3IscHJvcEtleTpuLHByb3BWYWw6cixwcm9wU3R5bGU6Q30pfSk6bnVsbCxjP0UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYse3NvdXJjZTpjfSk6bnVsbCxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudChoLCgwLHMuZGVmYXVsdCkoe30sdGhpcy5wcm9wcyx7Z2V0Q29uZmlnczpuLHNwZWNQYXRoOnUucHVzaCgiaXRlbXMiKSxuYW1lOm51bGwsc2NoZW1hOmQscmVxdWlyZWQ6ITEsZGVwdGg6bysxfSkpKSwiXSIpKX19XSksdH0oYi5Db21wb25lbnQpO08ucHJvcFR5cGVzPXtzY2hlbWE6di5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDp2LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbmZpZ3M6di5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOnYuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxuYW1lOnYuZGVmYXVsdC5zdHJpbmcscmVxdWlyZWQ6di5kZWZhdWx0LmJvb2wsZXhwYW5kRGVwdGg6di5kZWZhdWx0Lm51bWJlcixzcGVjUGF0aDpBLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLGRlcHRoOnYuZGVmYXVsdC5udW1iZXJ9LHQuZGVmYXVsdD1PfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDIxKSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDEpLEU9cihiKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO3YuY2FsbChyKTt2YXIgbz1yLnByb3BzLHM9by5uYW1lLGk9by5zY2hlbWEsbD1yLmdldFZhbHVlKCk7cmV0dXJuIHIuc3RhdGU9e25hbWU6cyxzY2hlbWE6aSx2YWx1ZTpsfSxyfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm5hbWUsbj1lLmF1dGhvcml6ZWQ7cmV0dXJuIG4mJm4uZ2V0SW4oW3QsInZhbHVlIl0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNjaGVtYSxuPWUuZ2V0Q29tcG9uZW50LHI9ZS5lcnJTZWxlY3RvcnMsbz1lLm5hbWUscz1uKCJJbnB1dCIpLGk9bigiUm93IiksYT1uKCJDb2wiKSxsPW4oImF1dGhFcnJvciIpLHU9bigiTWFya2Rvd24iKSxjPW4oIkp1bXBUb1BhdGgiLCEwKSxkPXRoaXMuZ2V0VmFsdWUoKSxfPXIuYWxsRXJyb3JzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiYXV0aElkIik9PT1vfSk7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0IixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLG98fHQuZ2V0KCJuYW1lIikpLCLCoCAoYXBpS2V5KSIsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYyx7cGF0aDpbInNlY3VyaXR5RGVmaW5pdGlvbnMiLG9dfSkpLGQmJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNiIsbnVsbCwiQXV0aG9yaXplZCIpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGksbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1LHtzb3VyY2U6dC5nZXQoImRlc2NyaXB0aW9uIil9KSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaSxudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLCJOYW1lOiAiLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLHQuZ2V0KCJuYW1lIikpKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaSxudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLCJJbjogIixnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY29kZSIsbnVsbCx0LmdldCgiaW4iKSkpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChpLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIixudWxsLCJWYWx1ZToiKSxkP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgKioqKioqICIpOmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGEsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChzLHt0eXBlOiJ0ZXh0IixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlfSkpKSxfLnZhbHVlU2VxKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse2Vycm9yOmUsa2V5OnR9KX0pKX19XSksdH0oZy5kZWZhdWx0LkNvbXBvbmVudCk7eS5wcm9wVHlwZXM9e2F1dGhvcml6ZWQ6RS5kZWZhdWx0Lm9iamVjdCxnZXRDb21wb25lbnQ6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxlcnJTZWxlY3RvcnM6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNjaGVtYTpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbmFtZTpFLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsb25DaGFuZ2U6RS5kZWZhdWx0LmZ1bmN9O3ZhciB2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBuPWUucHJvcHMub25DaGFuZ2Uscj10LnRhcmdldC52YWx1ZSxvPSgwLHMuZGVmYXVsdCkoe30sZS5zdGF0ZSx7dmFsdWU6cn0pO2Uuc2V0U3RhdGUobyksbihvKX19O3QuZGVmYXVsdD15fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPW4oOSksRT1yKGIpLHk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGEuZGVmYXVsdCkodGhpcyx0KSwoMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zY2hlbWEsbj1lLm5hbWUscj1lLmdldENvbXBvbmVudCxvPWUub25BdXRoQ2hhbmdlLHM9ZS5hdXRob3JpemVkLGk9ZS5lcnJTZWxlY3RvcnMsYT1yKCJhcGlLZXlBdXRoIiksbD1yKCJiYXNpY0F1dGgiKSx1PXZvaWQgMCxjPXQuZ2V0KCJ0eXBlIik7c3dpdGNoKGMpe2Nhc2UiYXBpS2V5Ijp1PW0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGEse2tleTpuLHNjaGVtYTp0LG5hbWU6bixlcnJTZWxlY3RvcnM6aSxhdXRob3JpemVkOnMsZ2V0Q29tcG9uZW50OnIsb25DaGFuZ2U6b30pO2JyZWFrO2Nhc2UiYmFzaWMiOnU9bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobCx7a2V5Om4sc2NoZW1hOnQsbmFtZTpuLGVyclNlbGVjdG9yczppLGF1dGhvcml6ZWQ6cyxnZXRDb21wb25lbnQ6cixvbkNoYW5nZTpvfSk7YnJlYWs7ZGVmYXVsdDp1PW0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6bn0sIlVua25vd24gc2VjdXJpdHkgZGVmaW5pdGlvbiB0eXBlICIsYyl9cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6bisiLWp1bXAifSx1KX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7eS5wcm9wVHlwZXM9e3NjaGVtYTpFLmRlZmF1bHQub3JkZXJlZE1hcC5pc1JlcXVpcmVkLG5hbWU6Zy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLG9uQXV0aENoYW5nZTpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGF1dGhvcml6ZWQ6RS5kZWZhdWx0Lm9yZGVyZWRNYXAuaXNSZXF1aXJlZH0seS5wcm9wVHlwZXM9e2VyclNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OmcuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYXV0aFNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsYXV0aEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGRlZmluaXRpb25zOkUuZGVmYXVsdC5pdGVyYWJsZS5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9eX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoaSksdT0wO3U8aTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj0oMCxkLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5jbG9zZT1mdW5jdGlvbigpe3IucHJvcHMuYXV0aEFjdGlvbnMuc2hvd0RlZmluaXRpb25zKCExKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYXV0aFNlbGVjdG9ycyxuPWUuYXV0aEFjdGlvbnMscj1lLmdldENvbXBvbmVudCxvPWUuZXJyU2VsZWN0b3JzLHM9ZS5zcGVjU2VsZWN0b3JzLGk9ZS5mbi5BU1QsYT10LnNob3duRGVmaW5pdGlvbnMoKSxsPXIoImF1dGhzIik7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImRpYWxvZy11eCJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJhY2tkcm9wLXV4In0pLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im1vZGFsLXV4In0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibW9kYWwtZGlhbG9nLXV4In0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibW9kYWwtdXgtaW5uZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJtb2RhbC11eC1oZWFkZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDMiLG51bGwsIkF2YWlsYWJsZSBhdXRob3JpemF0aW9ucyIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToiY2xvc2UtbW9kYWwiLG9uQ2xpY2s6dGhpcy5jbG9zZX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1c2UiLHtocmVmOiIjY2xvc2UiLHhsaW5rSHJlZjoiI2Nsb3NlIn0pKSkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im1vZGFsLXV4LWNvbnRlbnQifSxhLnZhbHVlU2VxKCkubWFwKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse2tleTphLEFTVDppLGRlZmluaXRpb25zOmUsZ2V0Q29tcG9uZW50OnIsZXJyU2VsZWN0b3JzOm8sYXV0aFNlbGVjdG9yczp0LGF1dGhBY3Rpb25zOm4sc3BlY1NlbGVjdG9yczpzfSl9KSkpKSkpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTtiLnByb3BUeXBlcz17Zm46Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGF1dGhTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGVyclNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsYXV0aEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoaSksdT0wO3U8aTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj0oMCxkLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5vbkNsaWNrPWZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcyx0PWUuYXV0aEFjdGlvbnMsbj1lLmF1dGhTZWxlY3RvcnMsbz1uLmRlZmluaXRpb25zVG9BdXRob3JpemUoKTt0LnNob3dEZWZpbml0aW9ucyhvKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYXV0aFNlbGVjdG9ycyxuPWUuZ2V0Q29tcG9uZW50LHI9bigiYXV0aG9yaXphdGlvblBvcHVwIiwhMCksbz0hIXQuc2hvd25EZWZpbml0aW9ucygpLHM9ISF0LmF1dGhvcml6ZWQoKS5zaXplO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJhdXRoLXdyYXBwZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOnM/ImJ0biBhdXRob3JpemUgbG9ja2VkIjoiYnRuIGF1dGhvcml6ZSB1bmxvY2tlZCIsb25DbGljazp0aGlzLm9uQ2xpY2t9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJBdXRob3JpemUiKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3ZnIix7d2lkdGg6IjIwIixoZWlnaHQ6IjIwIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInVzZSIse2hyZWY6cz8iI2xvY2tlZCI6IiN1bmxvY2tlZCIseGxpbmtIcmVmOnM/IiNsb2NrZWQiOiIjdW5sb2NrZWQifSkpKSxvJiZtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyLG51bGwpKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Yi5wcm9wVHlwZXM9e2NsYXNzTmFtZTpnLmRlZmF1bHQuc3RyaW5nfSxiLnByb3BUeXBlcz17Z2V0Q29tcG9uZW50OmcuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYXV0aFNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZXJyQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsYXV0aEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoaSksdT0wO3U8aTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj0oMCxkLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5vbkNsaWNrPWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHQ9ci5wcm9wcy5vbkNsaWNrO3QmJnQoKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pc0F1dGhvcml6ZWQ7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ZT8iYXV0aG9yaXphdGlvbl9fYnRuIGxvY2tlZCI6ImF1dGhvcml6YXRpb25fX2J0biB1bmxvY2tlZCIsImFyaWEtbGFiZWwiOmU/ImF1dGhvcml6YXRpb24gYnV0dG9uIGxvY2tlZCI6ImF1dGhvcml6YXRpb24gYnV0dG9uIHVubG9ja2VkIixvbkNsaWNrOnRoaXMub25DbGlja30sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1c2UiLHtocmVmOmU/IiNsb2NrZWQiOiIjdW5sb2NrZWQiLHhsaW5rSHJlZjplPyIjbG9ja2VkIjoiI3VubG9ja2VkIn0pKSl9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO2IucHJvcFR5cGVzPXtpc0F1dGhvcml6ZWQ6Zy5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxvbkNsaWNrOmcuZGVmYXVsdC5mdW5jfSx0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigyMikscz1yKG8pLGk9big0KSxhPXIoaSksbD1uKDIpLHU9cihsKSxjPW4oMyksZD1yKGMpLF89big2KSxwPXIoXyksZj1uKDUpLG09cihmKSxoPW4oMCksZz1yKGgpLGI9bigxKSxFPXIoYikseT1uKDkpLHY9cih5KSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiByLm9uQXV0aENoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWU7ci5zZXRTdGF0ZSgoMCxzLmRlZmF1bHQpKHt9LHQsZSkpfSxyLnN1Ym1pdEF1dGg9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHIucHJvcHMuYXV0aEFjdGlvbnMuYXV0aG9yaXplKHIuc3RhdGUpfSxyLmxvZ291dENsaWNrPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgdD1yLnByb3BzLG49dC5hdXRoQWN0aW9ucyxvPXQuZGVmaW5pdGlvbnMscz1vLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkudG9BcnJheSgpO24ubG9nb3V0KHMpfSxyLmNsb3NlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxyLnByb3BzLmF1dGhBY3Rpb25zLnNob3dEZWZpbml0aW9ucyghMSl9LHIuc3RhdGU9e30scn1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRlZmluaXRpb25zLHI9dC5nZXRDb21wb25lbnQsbz10LmF1dGhTZWxlY3RvcnMscz10LmVyclNlbGVjdG9ycyxpPXIoIkF1dGhJdGVtIiksYT1yKCJvYXV0aDIiLCEwKSxsPXIoIkJ1dHRvbiIpLHU9by5hdXRob3JpemVkKCksYz1uLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiEhdS5nZXQodCl9KSxkPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJvYXV0aDIiIT09ZS5nZXQoInR5cGUiKX0pLF89bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIm9hdXRoMiI9PT1lLmdldCgidHlwZSIpfSk7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImF1dGgtY29udGFpbmVyIn0sISFkLnNpemUmJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJmb3JtIix7b25TdWJtaXQ6dGhpcy5zdWJtaXRBdXRofSxkLm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChpLHtrZXk6bixzY2hlbWE6dCxuYW1lOm4sZ2V0Q29tcG9uZW50OnIsb25BdXRoQ2hhbmdlOmUub25BdXRoQ2hhbmdlLGF1dGhvcml6ZWQ6dSxlcnJTZWxlY3RvcnM6c30pfSkudG9BcnJheSgpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImF1dGgtYnRuLXdyYXBwZXIifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLHtjbGFzc05hbWU6ImJ0biBtb2RhbC1idG4gYXV0aCBidG4tZG9uZSIsb25DbGljazp0aGlzLmNsb3NlfSwiRG9uZSIpLGQuc2l6ZT09PWMuc2l6ZT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLHtjbGFzc05hbWU6ImJ0biBtb2RhbC1idG4gYXV0aCIsb25DbGljazp0aGlzLmxvZ291dENsaWNrfSwiTG9nb3V0Iik6Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobCx7dHlwZToic3VibWl0IixjbGFzc05hbWU6ImJ0biBtb2RhbC1idG4gYXV0aCBhdXRob3JpemUifSwiQXV0aG9yaXplIikpKSxfJiZfLnNpemU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzY29wZS1kZWYifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCwiU2NvcGVzIGFyZSB1c2VkIHRvIGdyYW50IGFuIGFwcGxpY2F0aW9uIGRpZmZlcmVudCBsZXZlbHMgb2YgYWNjZXNzIHRvIGRhdGEgb24gYmVoYWxmIG9mIHRoZSBlbmQgdXNlci4gRWFjaCBBUEkgbWF5IGRlY2xhcmUgb25lIG9yIG1vcmUgc2NvcGVzLiIpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLCJBUEkgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBzY29wZXMuIFNlbGVjdCB3aGljaCBvbmVzIHlvdSB3YW50IHRvIGdyYW50IHRvIFN3YWdnZXIgVUkuIikpLG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJvYXV0aDIiPT09ZS5nZXQoInR5cGUiKX0pLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnR9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGEse2F1dGhvcml6ZWQ6dSxzY2hlbWE6ZSxuYW1lOnR9KSl9KS50b0FycmF5KCkpOm51bGwpfX1dKSx0fShnLmRlZmF1bHQuQ29tcG9uZW50KTtULnByb3BUeXBlcz17ZGVmaW5pdGlvbnM6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGF1dGhTZWxlY3RvcnM6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGF1dGhBY3Rpb25zOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH0sVC5wcm9wVHlwZXM9e2VyclNlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYXV0aFNlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsYXV0aEFjdGlvbnM6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGRlZmluaXRpb25zOnYuZGVmYXVsdC5pdGVyYWJsZS5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9VH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1uKDkpLEU9cihiKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO3YuY2FsbChyKTt2YXIgbz1yLnByb3BzLGk9by5zY2hlbWEsbD1vLm5hbWUsdT1yLmdldFZhbHVlKCksYz11LnVzZXJuYW1lO3JldHVybiByLnN0YXRlPXtuYW1lOmwsc2NoZW1hOmksdmFsdWU6Yz97dXNlcm5hbWU6Y306e319LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYXV0aG9yaXplZCxuPWUubmFtZTtyZXR1cm4gdCYmdC5nZXRJbihbbiwidmFsdWUiXSl8fHt9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNjaGVtYSxuPWUuZ2V0Q29tcG9uZW50LHI9ZS5uYW1lLG89ZS5lcnJTZWxlY3RvcnMscz1uKCJJbnB1dCIpLGk9bigiUm93IiksYT1uKCJDb2wiKSxsPW4oImF1dGhFcnJvciIpLHU9bigiSnVtcFRvUGF0aCIsITApLGM9bigiTWFya2Rvd24iKSxkPXRoaXMuZ2V0VmFsdWUoKS51c2VybmFtZSxfPW8uYWxsRXJyb3JzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiYXV0aElkIik9PT1yfSk7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0IixudWxsLCJCYXNpYyBhdXRob3JpemF0aW9uIixtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1LHtwYXRoOlsic2VjdXJpdHlEZWZpbml0aW9ucyIscl19KSksZCYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg2IixudWxsLCJBdXRob3JpemVkIiksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3NvdXJjZTp0LmdldCgiZGVzY3JpcHRpb24iKX0pKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChpLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIixudWxsLCJVc2VybmFtZToiKSxkP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgIixkLCIgIik6bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHMse3R5cGU6InRleHQiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbmFtZToidXNlcm5hbWUiLG9uQ2hhbmdlOnRoaXMub25DaGFuZ2V9KSkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGksbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLG51bGwsIlBhc3N3b3JkOiIpLGQ/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsIiAqKioqKiogIik6bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHMse3JlcXVpcmVkOiJyZXF1aXJlZCIsYXV0b0NvbXBsZXRlOiJuZXctcGFzc3dvcmQiLG5hbWU6InBhc3N3b3JkIix0eXBlOiJwYXNzd29yZCIsb25DaGFuZ2U6dGhpcy5vbkNoYW5nZX0pKSksXy52YWx1ZVNlcSgpLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLHtlcnJvcjplLGtleTp0fSl9KSl9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO3kucHJvcFR5cGVzPXthdXRob3JpemVkOmcuZGVmYXVsdC5vYmplY3QsZ2V0Q29tcG9uZW50OmcuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc2NoZW1hOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSx5LnByb3BUeXBlcz17bmFtZTpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsZXJyU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuYyxzY2hlbWE6RS5kZWZhdWx0Lm1hcCxhdXRob3JpemVkOkUuZGVmYXVsdC5tYXB9O3ZhciB2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBuPWUucHJvcHMub25DaGFuZ2Uscj10LnRhcmdldCxvPXIudmFsdWUscz1yLm5hbWUsaT1lLnN0YXRlLnZhbHVlO2lbc109byxlLnNldFN0YXRlKHt2YWx1ZTppfSksbihlLnN0YXRlKX19O3QuZGVmYXVsdD15fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHRoaXMsdCksKDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5lcnJvcix0PWUuZ2V0KCJsZXZlbCIpLG49ZS5nZXQoIm1lc3NhZ2UiKSxyPWUuZ2V0KCJzb3VyY2UiKTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZXJyb3JzIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOiIjZmZlZWVlIixjb2xvcjoicmVkIixtYXJnaW46IjFlbSJ9fSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYiIse3N0eWxlOnt0ZXh0VHJhbnNmb3JtOiJjYXBpdGFsaXplIixtYXJnaW5SaWdodDoiMWVtIn19LHIsIiAiLHQpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLG4pKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Yi5wcm9wVHlwZXM9e2Vycm9yOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PWJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMjIpLHM9cihvKSxpPW4oNCksYT1yKGkpLGw9bigyKSx1PXIobCksYz1uKDMpLGQ9cihjKSxfPW4oNikscD1yKF8pLGY9big1KSxtPXIoZiksaD1uKDApLGc9cihoKSxiPW4oMSksRT1yKGIpLHk9bigzMjUpLHY9cih5KSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO0EuY2FsbChyKTt2YXIgbz1yLnByb3BzLHM9by5uYW1lLGk9by5zY2hlbWEsbD1vLmF1dGhvcml6ZWQsYz1vLmF1dGhTZWxlY3RvcnMsZD1sJiZsLmdldChzKSxfPWMuZ2V0Q29uZmlncygpfHx7fSxmPWQmJmQuZ2V0KCJ1c2VybmFtZSIpfHwiIixtPWQmJmQuZ2V0KCJjbGllbnRJZCIpfHxfLmNsaWVudElkfHwiIixoPWQmJmQuZ2V0KCJjbGllbnRTZWNyZXQiKXx8Xy5jbGllbnRTZWNyZXR8fCIiLGc9ZCYmZC5nZXQoInBhc3N3b3JkVHlwZSIpfHwicmVxdWVzdC1ib2R5IjtyZXR1cm4gci5zdGF0ZT17YXBwTmFtZTpfLmFwcE5hbWUsbmFtZTpzLHNjaGVtYTppLHNjb3BlczpbXSxjbGllbnRJZDptLGNsaWVudFNlY3JldDpoLHVzZXJuYW1lOmYscGFzc3dvcmQ6IiIscGFzc3dvcmRUeXBlOmd9LHJ9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5zY2hlbWEscj10LmdldENvbXBvbmVudCxvPXQuYXV0aFNlbGVjdG9ycyxzPXQuZXJyU2VsZWN0b3JzLGk9dC5uYW1lLGE9dC5zcGVjU2VsZWN0b3JzLGw9cigiSW5wdXQiKSx1PXIoIlJvdyIpLGM9cigiQ29sIiksZD1yKCJCdXR0b24iKSxfPXIoImF1dGhFcnJvciIpLHA9cigiSnVtcFRvUGF0aCIsITApLGY9cigiTWFya2Rvd24iKSxtPWEuaXNPQVMzLGg9bSgpPyJhdXRob3JpemF0aW9uQ29kZSI6ImFjY2Vzc0NvZGUiLGI9bSgpPyJjbGllbnRDcmVkZW50aWFscyI6ImFwcGxpY2F0aW9uIixFPW4uZ2V0KCJmbG93IikseT1uLmdldCgiYWxsb3dlZFNjb3BlcyIpfHxuLmdldCgic2NvcGVzIiksdj1vLmF1dGhvcml6ZWQoKS5nZXQoaSksVD0hIXYsQT1zLmFsbEVycm9ycygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXQoImF1dGhJZCIpPT09aX0pLEM9IUEuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJ2YWxpZGF0aW9uIj09PWUuZ2V0KCJzb3VyY2UiKX0pLnNpemUsTz1uLmdldCgiZGVzY3JpcHRpb24iKTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsaSwiIChPQXV0aDIsICIsbi5nZXQoImZsb3ciKSwiKSAiLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHAse3BhdGg6WyJzZWN1cml0eURlZmluaXRpb25zIixpXX0pKSx0aGlzLnN0YXRlLmFwcE5hbWU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg1IixudWxsLCJBcHBsaWNhdGlvbjogIix0aGlzLnN0YXRlLmFwcE5hbWUsIiAiKTpudWxsLE8mJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYse3NvdXJjZTpuLmdldCgiZGVzY3JpcHRpb24iKX0pLFQmJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNiIsbnVsbCwiQXV0aG9yaXplZCIpLCgiaW1wbGljaXQiPT09RXx8RT09PWgpJiZnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCwiQXV0aG9yaXphdGlvbiBVUkw6ICIsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsbi5nZXQoImF1dGhvcml6YXRpb25VcmwiKSkpLCgicGFzc3dvcmQiPT09RXx8RT09PWh8fEU9PT1iKSYmZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsIlRva2VuIFVSTDoiLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgIixuLmdldCgidG9rZW5VcmwiKSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOiJmbG93In0sIkZsb3c6ICIsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsbi5nZXQoImZsb3ciKSkpLCJwYXNzd29yZCIhPT1FP251bGw6Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodSxudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHUsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOiJvYXV0aF91c2VybmFtZSJ9LCJ1c2VybmFtZToiKSxUP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgIix0aGlzLnN0YXRlLnVzZXJuYW1lLCIgIik6Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYyx7dGFibGV0OjEwLGRlc2t0b3A6MTB9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2lkOiJvYXV0aF91c2VybmFtZSIsdHlwZToidGV4dCIsImRhdGEtbmFtZSI6InVzZXJuYW1lIixvbkNoYW5nZTp0aGlzLm9uSW5wdXRDaGFuZ2V9KSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHUsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOiJvYXV0aF9wYXNzd29yZCJ9LCJwYXNzd29yZDoiKSxUP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgKioqKioqICIpOmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3RhYmxldDoxMCxkZXNrdG9wOjEwfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtpZDoib2F1dGhfcGFzc3dvcmQiLHR5cGU6InBhc3N3b3JkIiwiZGF0YS1uYW1lIjoicGFzc3dvcmQiLG9uQ2hhbmdlOnRoaXMub25JbnB1dENoYW5nZX0pKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodSxudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsYWJlbCIse2h0bWxGb3I6InBhc3N3b3JkX3R5cGUifSwidHlwZToiKSxUP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJjb2RlIixudWxsLCIgIix0aGlzLnN0YXRlLnBhc3N3b3JkVHlwZSwiICIpOmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3RhYmxldDoxMCxkZXNrdG9wOjEwfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7aWQ6InBhc3N3b3JkX3R5cGUiLCJkYXRhLW5hbWUiOiJwYXNzd29yZFR5cGUiLG9uQ2hhbmdlOnRoaXMub25JbnB1dENoYW5nZX0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiJyZXF1ZXN0LWJvZHkifSwiUmVxdWVzdCBib2R5IiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiJiYXNpYyJ9LCJCYXNpYyBhdXRoIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiJxdWVyeSJ9LCJRdWVyeSBwYXJhbWV0ZXJzIikpKSkpLChFPT09Ynx8ImltcGxpY2l0Ij09PUV8fEU9PT1ofHwicGFzc3dvcmQiPT09RSYmImJhc2ljIiE9PXRoaXMuc3RhdGUucGFzc3dvcmRUeXBlKSYmKCFUfHxUJiZ0aGlzLnN0YXRlLmNsaWVudElkKSYmZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodSxudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsYWJlbCIse2h0bWxGb3I6ImNsaWVudF9pZCJ9LCJjbGllbnRfaWQ6IiksVD9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY29kZSIsbnVsbCwiICoqKioqKiAiKTpnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHt0YWJsZXQ6MTAsZGVza3RvcDoxMH0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7aWQ6ImNsaWVudF9pZCIsdHlwZToidGV4dCIscmVxdWlyZWQ6InBhc3N3b3JkIj09PUUsdmFsdWU6dGhpcy5zdGF0ZS5jbGllbnRJZCwiZGF0YS1uYW1lIjoiY2xpZW50SWQiLG9uQ2hhbmdlOnRoaXMub25JbnB1dENoYW5nZX0pKSksKEU9PT1ifHxFPT09aHx8InBhc3N3b3JkIj09PUUmJiJiYXNpYyIhPT10aGlzLnN0YXRlLnBhc3N3b3JkVHlwZSkmJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHUsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOiJjbGllbnRfc2VjcmV0In0sImNsaWVudF9zZWNyZXQ6IiksVD9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY29kZSIsbnVsbCwiICoqKioqKiAiKTpnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHt0YWJsZXQ6MTAsZGVza3RvcDoxMH0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7aWQ6ImNsaWVudF9zZWNyZXQiLHZhbHVlOnRoaXMuc3RhdGUuY2xpZW50U2VjcmV0LHR5cGU6InRleHQiLCJkYXRhLW5hbWUiOiJjbGllbnRTZWNyZXQiLG9uQ2hhbmdlOnRoaXMub25JbnB1dENoYW5nZX0pKSksIVQmJnkmJnkuc2l6ZT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzY29wZXMifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDIiLG51bGwsIlNjb3BlczoiKSx5Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1LHtrZXk6bn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiY2hlY2tib3gifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLHsiZGF0YS12YWx1ZSI6bixpZDpuKyItIitFKyItY2hlY2tib3gtIitlLnN0YXRlLm5hbWUsZGlzYWJsZWQ6VCx0eXBlOiJjaGVja2JveCIsb25DaGFuZ2U6ZS5vblNjb3BlQ2hhbmdlfSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIix7aHRtbEZvcjpuKyItIitFKyItY2hlY2tib3gtIitlLnN0YXRlLm5hbWV9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJpdGVtIn0pLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InRleHQifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZToibmFtZSJ9LG4pLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOiJkZXNjcmlwdGlvbiJ9LHQpKSkpKX0pLnRvQXJyYXkoKSk6bnVsbCxBLnZhbHVlU2VxKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8se2Vycm9yOmUsa2V5OnR9KX0pLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImF1dGgtYnRuLXdyYXBwZXIifSxDJiYoVD9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkLHtjbGFzc05hbWU6ImJ0biBtb2RhbC1idG4gYXV0aCBhdXRob3JpemUiLG9uQ2xpY2s6dGhpcy5sb2dvdXR9LCJMb2dvdXQiKTpnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkLHtjbGFzc05hbWU6ImJ0biBtb2RhbC1idG4gYXV0aCBhdXRob3JpemUiLG9uQ2xpY2s6dGhpcy5hdXRob3JpemV9LCJBdXRob3JpemUiKSkpKX19XSksdH0oZy5kZWZhdWx0LkNvbXBvbmVudCk7VC5wcm9wVHlwZXM9e25hbWU6RS5kZWZhdWx0LnN0cmluZyxhdXRob3JpemVkOkUuZGVmYXVsdC5vYmplY3QsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc2NoZW1hOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxhdXRoU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxhdXRoQWN0aW9uczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZXJyU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxlcnJBY3Rpb25zOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb25maWdzOkUuZGVmYXVsdC5hbnl9O3ZhciBBPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmF1dGhvcml6ZT1mdW5jdGlvbigpe3ZhciB0PWUucHJvcHMsbj10LmF1dGhBY3Rpb25zLHI9dC5lcnJBY3Rpb25zLG89dC5nZXRDb25maWdzLHM9dC5hdXRoU2VsZWN0b3JzLGk9bygpLGE9cy5nZXRDb25maWdzKCk7ci5jbGVhcih7YXV0aElkOm5hbWUsdHlwZToiYXV0aCIsc291cmNlOiJhdXRoIn0pLCgwLHYuZGVmYXVsdCkoe2F1dGg6ZS5zdGF0ZSxhdXRoQWN0aW9uczpuLGVyckFjdGlvbnM6cixjb25maWdzOmksYXV0aENvbmZpZ3M6YX0pfSx0aGlzLm9uU2NvcGVDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49dC50YXJnZXQscj1uLmNoZWNrZWQsbz1uLmRhdGFzZXQudmFsdWU7aWYociYmLTE9PT1lLnN0YXRlLnNjb3Blcy5pbmRleE9mKG8pKXt2YXIgcz1lLnN0YXRlLnNjb3Blcy5jb25jYXQoW29dKTtlLnNldFN0YXRlKHtzY29wZXM6c30pfWVsc2UhciYmZS5zdGF0ZS5zY29wZXMuaW5kZXhPZihvKT4tMSYmZS5zZXRTdGF0ZSh7c2NvcGVzOmUuc3RhdGUuc2NvcGVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PW99KX0pfSx0aGlzLm9uSW5wdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49dC50YXJnZXQscj1uLmRhdGFzZXQubmFtZSxvPW4udmFsdWUsaT0oMCxzLmRlZmF1bHQpKHt9LHIsbyk7ZS5zZXRTdGF0ZShpKX0sdGhpcy5sb2dvdXQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPWUucHJvcHMscj1uLmF1dGhBY3Rpb25zLG89bi5lcnJBY3Rpb25zLHM9bi5uYW1lO28uY2xlYXIoe2F1dGhJZDpzLHR5cGU6ImF1dGgiLHNvdXJjZToiYXV0aCJ9KSxyLmxvZ291dChbc10pfX07dC5kZWZhdWx0PVR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGEuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLHU9MDt1PGk7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9KDAsZC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIub25DbGljaz1mdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLnNwZWNBY3Rpb25zLG49ZS5wYXRoLG89ZS5tZXRob2Q7dC5jbGVhclJlc3BvbnNlKG4sbyksdC5jbGVhclJlcXVlc3QobixvKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImJ0biBidG4tY2xlYXIgb3BibG9jay1jb250cm9sX19idG4iLG9uQ2xpY2s6dGhpcy5vbkNsaWNrfSwiQ2xlYXIiKX19XSksdH0oZi5Db21wb25lbnQpO2IucHJvcFR5cGVzPXtzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQscGF0aDpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsbWV0aG9kOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PWJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9big5KSxFPXIoYikseT1uKDcpLHY9ZnVuY3Rpb24oKXt9LFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGEuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLHU9MDt1PGk7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9KDAsZC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIub25DaGFuZ2VXcmFwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmNvbnRlbnRUeXBlcyYmdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmNvbnRlbnRUeXBlcy5maXJzdCgpKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2UuY29udGVudFR5cGVzJiZlLmNvbnRlbnRUeXBlcy5zaXplJiYoZS5jb250ZW50VHlwZXMuaW5jbHVkZXMoZS52YWx1ZSl8fGUub25DaGFuZ2UoZS5jb250ZW50VHlwZXMuZmlyc3QoKSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNvbnRlbnRUeXBlcyxuPWUuY2xhc3NOYW1lLHI9ZS52YWx1ZTtyZXR1cm4gdCYmdC5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImNvbnRlbnQtdHlwZS13cmFwcGVyICIrKG58fCIiKX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIse2NsYXNzTmFtZToiY29udGVudC10eXBlIix2YWx1ZTpyfHwiIixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlV3JhcHBlcn0sdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHtrZXk6ZSx2YWx1ZTplfSxlKX0pLnRvQXJyYXkoKSkpOm51bGx9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXtjb250ZW50VHlwZXM6Zy5kZWZhdWx0Lm9uZU9mVHlwZShbRS5kZWZhdWx0Lmxpc3QsRS5kZWZhdWx0LnNldCxFLmRlZmF1bHQuc2VxXSksdmFsdWU6Zy5kZWZhdWx0LnN0cmluZyxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuYyxjbGFzc05hbWU6Zy5kZWZhdWx0LnN0cmluZ30sVC5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlOnYsdmFsdWU6bnVsbCxjb250ZW50VHlwZXM6KDAseS5mcm9tSlMpKFsiYXBwbGljYXRpb24vanNvbiJdKX0sdC5kZWZhdWx0PVR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9bigzMjMpLEU9cihiKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHRoaXMsdCksKDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJoYW5kbGVGb2N1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS50YXJnZXQuc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnJlcXVlc3QsdD0oMCxFLmRlZmF1bHQpKGUpO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIsbnVsbCwiQ3VybCIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImNvcHktcGFzdGUifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiLHtvbkZvY3VzOnRoaXMuaGFuZGxlRm9jdXMscmVhZE9ubHk6InRydWUiLGNsYXNzTmFtZToiY3VybCIsc3R5bGU6e3doaXRlU3BhY2U6Im5vcm1hbCJ9LHZhbHVlOnR9KSkpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTt5LnByb3BUeXBlcz17cmVxdWVzdDpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LHQuZGVmYXVsdD15fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZXBMaW5rPXZvaWQgMDt2YXIgbz1uKDApLHM9cihvKSxpPW4oMSksYT1yKGkpLGw9dC5EZWVwTGluaz1mdW5jdGlvbihlKXt2YXIgdD1lLmVuYWJsZWQsbj1lLnBhdGgscj1lLnRleHQ7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7Y2xhc3NOYW1lOiJub3N0eWxlIixvbkNsaWNrOnQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX06bnVsbCxocmVmOnQ/IiMvIituOm51bGx9LHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHIpKX07bC5wcm9wVHlwZXM9e2VuYWJsZWQ6YS5kZWZhdWx0LmJvb2wsaXNTaG93bjphLmRlZmF1bHQuYm9vbCxwYXRoOmEuZGVmYXVsdC5zdHJpbmcsdGV4dDphLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9bH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigwKSxzPXIobyksaT1uKDkpLGE9cihpKSxsPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUsbj1lLmdldENvbXBvbmVudCxyPW4oIk1vZGVsQ29sbGFwc2UiKSxvPXMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJBcnJheSBbICIsdC5jb3VudCgpLCIgXSIpO3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicHJvcC1lbnVtIn0sIkVudW06IixzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnIiLG51bGwpLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHIse2NvbGxhcHNlZENvbnRlbnQ6b30sIlsgIix0LmpvaW4oIiwgIiksIiBdIikpfTtsLnByb3BUeXBlcz17dmFsdWU6YS5kZWZhdWx0Lml0ZXJhYmxlLGdldENvbXBvbmVudDphLmRlZmF1bHQuZnVuY30sdC5kZWZhdWx0PWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4oZXx8IiIpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLmpvaW4oIiAiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9big0KSxpPXIocyksYT1uKDIpLGw9cihhKSx1PW4oMyksYz1yKHUpLGQ9big2KSxfPXIoZCkscD1uKDUpLGY9cihwKSxtPW4oMCksaD1yKG0pLGc9bigxKSxiPXIoZyksRT1uKDcpLHk9bigyNjkpLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGwuZGVmYXVsdCkodGhpcyx0KSwoMCxfLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGYuZGVmYXVsdCkodCxlKSwoMCxjLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5lZGl0b3JBY3Rpb25zLG49ZS5lcnJTZWxlY3RvcnMscj1lLmxheW91dFNlbGVjdG9ycyxvPWUubGF5b3V0QWN0aW9ucztpZih0JiZ0Lmp1bXBUb0xpbmUpdmFyIHM9dC5qdW1wVG9MaW5lO3ZhciBpPW4uYWxsRXJyb3JzKCksYT1pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4idGhyb3duIj09PWUuZ2V0KCJ0eXBlIil8fCJlcnJvciI9PT1lLmdldCgibGV2ZWwiKX0pO2lmKCFhfHxhLmNvdW50KCk8MSlyZXR1cm4gbnVsbDt2YXIgbD1yLmlzU2hvd24oWyJlcnJvclBhbmUiXSwhMCksdT1mdW5jdGlvbigpe3JldHVybiBvLnNob3coWyJlcnJvclBhbmUiXSwhbCl9LGM9YS5zb3J0QnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0KCJsaW5lIil9KTtyZXR1cm4gaC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIse2NsYXNzTmFtZToiZXJyb3JzLXdyYXBwZXIifSxoLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaGdyb3VwIix7Y2xhc3NOYW1lOiJlcnJvciJ9LGguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIse2NsYXNzTmFtZToiZXJyb3JzX190aXRsZSJ9LCJFcnJvcnMiKSxoLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJidG4gZXJyb3JzX19jbGVhci1idG4iLG9uQ2xpY2s6dX0sbD8iSGlkZSI6IlNob3ciKSksaC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5Db2xsYXBzZSx7aXNPcGVuZWQ6bCxhbmltYXRlZDohMH0saC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZXJyb3JzIn0sYy5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldCgidHlwZSIpO3JldHVybiJ0aHJvd24iPT09bnx8ImF1dGgiPT09bj9oLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULHtrZXk6dCxlcnJvcjplLmdldCgiZXJyb3IiKXx8ZSxqdW1wVG9MaW5lOnN9KToic3BlYyI9PT1uP2guZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEse2tleTp0LGVycm9yOmUsanVtcFRvTGluZTpzfSk6dm9pZCAwfSkpKSl9fV0pLHR9KGguZGVmYXVsdC5Db21wb25lbnQpO3YucHJvcFR5cGVzPXtlZGl0b3JBY3Rpb25zOmIuZGVmYXVsdC5vYmplY3QsZXJyU2VsZWN0b3JzOmIuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxsYXlvdXRTZWxlY3RvcnM6Yi5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dEFjdGlvbnM6Yi5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9djt2YXIgVD1mdW5jdGlvbihlKXt2YXIgdD1lLmVycm9yLG49ZS5qdW1wVG9MaW5lO2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQuZ2V0KCJsaW5lIik7cmV0dXJuIGguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImVycm9yLXdyYXBwZXIifSx0P2guZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsaC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0IixudWxsLHQuZ2V0KCJzb3VyY2UiKSYmdC5nZXQoImxldmVsIik/byh0LmdldCgic291cmNlIikpKyIgIit0LmdldCgibGV2ZWwiKToiIix0LmdldCgicGF0aCIpP2guZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzbWFsbCIsbnVsbCwiIGF0ICIsdC5nZXQoInBhdGgiKSk6bnVsbCksaC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtzdHlsZTp7d2hpdGVTcGFjZToicHJlLWxpbmUiLG1heFdpZHRoOiIxMDAlIn19LHQuZ2V0KCJtZXNzYWdlIikpLGguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtzdHlsZTp7InRleHQtZGVjb3JhdGlvbiI6InVuZGVybGluZSIsY3Vyc29yOiJwb2ludGVyIn19LHImJm4/aC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtvbkNsaWNrOm4uYmluZChudWxsLHIpfSwiSnVtcCB0byBsaW5lICIscik6bnVsbCkpOm51bGwpfSxBPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZXJyb3Isbj1lLmp1bXBUb0xpbmUscj1udWxsO3JldHVybiB0LmdldCgicGF0aCIpP3I9RS5MaXN0LmlzTGlzdCh0LmdldCgicGF0aCIpKT9oLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic21hbGwiLG51bGwsImF0ICIsdC5nZXQoInBhdGgiKS5qb2luKCIuIikpOmguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzbWFsbCIsbnVsbCwiYXQgIix0LmdldCgicGF0aCIpKTp0LmdldCgibGluZSIpJiYhbiYmKHI9aC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNtYWxsIixudWxsLCJvbiBsaW5lICIsdC5nZXQoImxpbmUiKSkpLGguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImVycm9yLXdyYXBwZXIifSx0P2guZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsaC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0IixudWxsLG8odC5nZXQoInNvdXJjZSIpKSsiICIrdC5nZXQoImxldmVsIiksIsKgIixyKSxoLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOnt3aGl0ZVNwYWNlOiJwcmUtbGluZSJ9fSx0LmdldCgibWVzc2FnZSIpKSxoLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7c3R5bGU6eyJ0ZXh0LWRlY29yYXRpb24iOiJ1bmRlcmxpbmUiLGN1cnNvcjoicG9pbnRlciJ9fSxuP2guZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7b25DbGljazpuLmJpbmQobnVsbCx0LmdldCgibGluZSIpKX0sIkp1bXAgdG8gbGluZSAiLHQuZ2V0KCJsaW5lIikpOm51bGwpKTpudWxsKX07VC5wcm9wVHlwZXM9e2Vycm9yOmIuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxqdW1wVG9MaW5lOmIuZGVmYXVsdC5mdW5jfSxULmRlZmF1bHRQcm9wcz17anVtcFRvTGluZTpudWxsfSxBLnByb3BUeXBlcz17ZXJyb3I6Yi5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGp1bXBUb0xpbmU6Yi5kZWZhdWx0LmZ1bmN9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShpKSx1PTA7dTxpO3UrKylsW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbj1yPSgwLGQuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLm9uQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5zcGVjU2VsZWN0b3JzLG49ZS5zcGVjQWN0aW9ucyxvPWUub3BlcmF0aW9uLHM9ZS5wYXRoLGk9ZS5tZXRob2Q7bi52YWxpZGF0ZVBhcmFtcyhbcyxpXSksdC52YWxpZGF0ZUJlZm9yZUV4ZWN1dGUoW3MsaV0pJiYoci5wcm9wcy5vbkV4ZWN1dGUmJnIucHJvcHMub25FeGVjdXRlKCksbi5leGVjdXRlKHtvcGVyYXRpb246byxwYXRoOnMsbWV0aG9kOml9KSl9LHIub25DaGFuZ2VQcm9kdWNlc1dyYXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvcHMuc3BlY0FjdGlvbnMuY2hhbmdlUHJvZHVjZXNWYWx1ZShbci5wcm9wcy5wYXRoLHIucHJvcHMubWV0aG9kXSxlKX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImJ0biBleGVjdXRlIG9wYmxvY2stY29udHJvbF9fYnRuIixvbkNsaWNrOnRoaXMub25DbGlja30sIkV4ZWN1dGUiKX19XSksdH0oZi5Db21wb25lbnQpO2IucHJvcFR5cGVzPXtzcGVjU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsb3BlcmF0aW9uOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxwYXRoOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxtZXRob2Q6Zy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLG9uRXhlY3V0ZTpnLmRlZmF1bHQuZnVuY30sdC5kZWZhdWx0PWJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHRoaXMsdCksKDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImZvb3RlciJ9KX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7dC5kZWZhdWx0PWh9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMTEpLHM9cihvKSxpPW4oNCksYT1yKGkpLGw9bigyKSx1PXIobCksYz1uKDMpLGQ9cihjKSxfPW4oNikscD1yKF8pLGY9big1KSxtPXIoZiksaD1uKDApLGc9cihoKSxiPW4oMSksRT1yKGIpLHk9big3KSx2PXIoeSksVD17Y29sb3I6IiM5OTkiLGZvbnRTdHlsZToiaXRhbGljIn0sQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsdS5kZWZhdWx0KSh0aGlzLHQpLCgwLHAuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmhlYWRlcnMsbj1lLmdldENvbXBvbmVudCxyPW4oIlByb3BlcnR5Iik7cmV0dXJuIHQmJnQuc2l6ZT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJoZWFkZXJzLXdyYXBwZXIifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6ImhlYWRlcnNfX3RpdGxlIn0sIkhlYWRlcnM6IiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRhYmxlIix7Y2xhc3NOYW1lOiJoZWFkZXJzIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoZWFkIixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse2NsYXNzTmFtZToiaGVhZGVyLXJvdyJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0aCIse2NsYXNzTmFtZToiaGVhZGVyLWNvbCJ9LCJOYW1lIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoIix7Y2xhc3NOYW1lOiJoZWFkZXItY29sIn0sIkRlc2NyaXB0aW9uIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoIix7Y2xhc3NOYW1lOiJoZWFkZXItY29sIn0sIlR5cGUiKSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIsbnVsbCx0LmVudHJ5U2VxKCkubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PSgwLHMuZGVmYXVsdCkoZSwyKSxuPXRbMF0sbz10WzFdO2lmKCF2LmRlZmF1bHQuTWFwLmlzTWFwKG8pKXJldHVybiBudWxsO3ZhciBpPW8uZ2V0SW4oWyJzY2hlbWEiXSk/by5nZXRJbihbInNjaGVtYSIsInR5cGUiXSk6by5nZXRJbihbInR5cGUiXSksYT1vLmdldEluKFsic2NoZW1hIiwiZXhhbXBsZSJdKTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIix7a2V5Om59LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiaGVhZGVyLWNvbCJ9LG4pLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiaGVhZGVyLWNvbCJ9LG8uZ2V0KCJkZXNjcmlwdGlvbiIpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLHtjbGFzc05hbWU6ImhlYWRlci1jb2wifSxpLCIgIixhP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHIse3Byb3BLZXk6IkV4YW1wbGUiLHByb3BWYWw6YSxwcm9wU3R5bGU6VH0pOm51bGwpKX0pLnRvQXJyYXkoKSkpKTpudWxsfX1dKSx0fShnLmRlZmF1bHQuQ29tcG9uZW50KTtBLnByb3BUeXBlcz17aGVhZGVyczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LHQuZGVmYXVsdD1BfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPW4oOCksRT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoaSksdT0wO3U8aTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj0oMCxkLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5pbml0aWFsaXplQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3IuZWw9ZX0sbz1uLCgwLGQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxiLmhpZ2hsaWdodCkodGhpcy5lbCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYi5oaWdobGlnaHQpKHRoaXMuZWwpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnZhbHVlLG49ZS5jbGFzc05hbWU7cmV0dXJuIG49bnx8IiIsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIse3JlZjp0aGlzLmluaXRpYWxpemVDb21wb25lbnQsY2xhc3NOYW1lOm4rIiBtaWNyb2xpZ2h0In0sdCl9fV0pLHR9KGYuQ29tcG9uZW50KTtFLnByb3BUeXBlcz17dmFsdWU6Zy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGNsYXNzTmFtZTpnLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9RX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1uKDcpLEU9big5KSx5PXIoRSksdj1uKDgpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGEuZGVmYXVsdCkodGhpcyx0KSwoMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5ob3N0LG49ZS5iYXNlUGF0aDtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIse2NsYXNzTmFtZToiYmFzZS11cmwifSwiWyBCYXNlIFVSTDogIix0LG4sIiBdIil9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXtob3N0OmcuZGVmYXVsdC5zdHJpbmcsYmFzZVBhdGg6Zy5kZWZhdWx0LnN0cmluZ307dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGEuZGVmYXVsdCkodGhpcyx0KSwoMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmRhdGEsdD1lLmdldCgibmFtZSIpfHwidGhlIGRldmVsb3BlciIsbj1lLmdldCgidXJsIikscj1lLmdldCgiZW1haWwiKTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxuJiZtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjooMCx2LnNhbml0aXplVXJsKShuKSx0YXJnZXQ6Il9ibGFuayJ9LHQsIiAtIFdlYnNpdGUiKSksciYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOigwLHYuc2FuaXRpemVVcmwpKCJtYWlsdG86IityKX0sbj8iU2VuZCBlbWFpbCB0byAiK3Q6IkNvbnRhY3QgIit0KSl9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO0EucHJvcFR5cGVzPXtkYXRhOmcuZGVmYXVsdC5vYmplY3R9O3ZhciBDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHRoaXMsdCksKDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5saWNlbnNlLHQ9ZS5nZXQoIm5hbWUiKXx8IkxpY2Vuc2UiLG49ZS5nZXQoInVybCIpO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG4/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHt0YXJnZXQ6Il9ibGFuayIsaHJlZjooMCx2LnNhbml0aXplVXJsKShuKX0sdCk6bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsdCkpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTtDLnByb3BUeXBlcz17bGljZW5zZTpnLmRlZmF1bHQub2JqZWN0fTt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsYS5kZWZhdWx0KSh0aGlzLHQpLCgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmluZm8sbj1lLnVybCxyPWUuaG9zdCxvPWUuYmFzZVBhdGgscz1lLmdldENvbXBvbmVudCxpPWUuZXh0ZXJuYWxEb2NzLGE9dC5nZXQoInZlcnNpb24iKSxsPXQuZ2V0KCJkZXNjcmlwdGlvbiIpLHU9dC5nZXQoInRpdGxlIiksYz10LmdldCgidGVybXNPZlNlcnZpY2UiKSxkPXQuZ2V0KCJjb250YWN0IiksXz10LmdldCgibGljZW5zZSIpLHA9KGl8fCgwLGIuZnJvbUpTKSh7fSkpLnRvSlMoKSxmPXAudXJsLGg9cC5kZXNjcmlwdGlvbixnPXMoIk1hcmtkb3duIiksRT1zKCJWZXJzaW9uU3RhbXAiKTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiaW5mbyJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoZ3JvdXAiLHtjbGFzc05hbWU6Im1haW4ifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDIiLHtjbGFzc05hbWU6InRpdGxlIn0sdSxhJiZtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFLHt2ZXJzaW9uOmF9KSkscnx8bz9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULHtob3N0OnIsYmFzZVBhdGg6b30pOm51bGwsbiYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHt0YXJnZXQ6Il9ibGFuayIsaHJlZjooMCx2LnNhbml0aXplVXJsKShuKX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InVybCJ9LCIgIixuLCIgIikpKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJkZXNjcmlwdGlvbiJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGcse3NvdXJjZTpsfSkpLGMmJm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHt0YXJnZXQ6Il9ibGFuayIsaHJlZjooMCx2LnNhbml0aXplVXJsKShjKX0sIlRlcm1zIG9mIHNlcnZpY2UiKSksZCYmZC5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEse2RhdGE6ZH0pOm51bGwsXyYmXy5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMse2xpY2Vuc2U6X30pOm51bGwsZj9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYSIse3RhcmdldDoiX2JsYW5rIixocmVmOigwLHYuc2FuaXRpemVVcmwpKGYpfSxofHxmKTpudWxsKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Ty5wcm9wVHlwZXM9e2luZm86Zy5kZWZhdWx0Lm9iamVjdCx1cmw6Zy5kZWZhdWx0LnN0cmluZyxob3N0OmcuZGVmYXVsdC5zdHJpbmcsYmFzZVBhdGg6Zy5kZWZhdWx0LnN0cmluZyxleHRlcm5hbERvY3M6eS5kZWZhdWx0Lm1hcCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PU8sTy5wcm9wVHlwZXM9e3RpdGxlOmcuZGVmYXVsdC5hbnksZGVzY3JpcHRpb246Zy5kZWZhdWx0LmFueSx2ZXJzaW9uOmcuZGVmYXVsdC5hbnksdXJsOmcuZGVmYXVsdC5zdHJpbmd9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbD1BcnJheShpKSx1PTA7dTxpO3UrKylsW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gbj1yPSgwLGQuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobCkpKSxyLm9uRmlsdGVyQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlO3IucHJvcHMubGF5b3V0QWN0aW9ucy51cGRhdGVGaWx0ZXIodCl9LG89biwoMCxkLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNwZWNTZWxlY3RvcnMsbj1lLnNwZWNBY3Rpb25zLHI9ZS5nZXRDb21wb25lbnQsbz1lLmxheW91dFNlbGVjdG9ycyxzPWUub2FzM1NlbGVjdG9ycyxpPWUub2FzM0FjdGlvbnMsYT10LmluZm8oKSxsPXQudXJsKCksdT10LmJhc2VQYXRoKCksYz10Lmhvc3QoKSxkPXQuc2VjdXJpdHlEZWZpbml0aW9ucygpLF89dC5leHRlcm5hbERvY3MoKSxwPXQuc2NoZW1lcygpLGY9dC5zZXJ2ZXJzKCksaD1yKCJpbmZvIiksZz1yKCJvcGVyYXRpb25zIiwhMCksYj1yKCJNb2RlbHMiLCEwKSxFPXIoImF1dGhvcml6ZUJ0biIsITApLHk9cigiUm93Iiksdj1yKCJDb2wiKSxUPXIoIlNlcnZlcnMiKSxBPXIoImVycm9ycyIsITApLEM9ImxvYWRpbmciPT09dC5sb2FkaW5nU3RhdHVzKCksTz0iZmFpbGVkIj09PXQubG9hZGluZ1N0YXR1cygpLFM9by5jdXJyZW50RmlsdGVyKCksUj17fTtPJiYoUi5jb2xvcj0icmVkIiksQyYmKFIuY29sb3I9IiNhYWEiKTt2YXIgaj1yKCJzY2hlbWVzIik7aWYoIXQuc3BlY1N0cigpKXt2YXIgeD12b2lkIDA7cmV0dXJuIHg9Qz9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJsb2FkaW5nIn0pOm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIsbnVsbCwiTm8gQVBJIGRlZmluaXRpb24gcHJvdmlkZWQuIiksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic3dhZ2dlci11aSJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImxvYWRpbmctY29udGFpbmVyIn0seCkpfXJldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzd2FnZ2VyLXVpIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLG51bGwpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHkse2NsYXNzTmFtZToiaW5mb3JtYXRpb24tY29udGFpbmVyIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodix7bW9iaWxlOjEyfSxhLmNvdW50KCk/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaCx7aW5mbzphLHVybDpsLGhvc3Q6YyxiYXNlUGF0aDp1LGV4dGVybmFsRG9jczpfLGdldENvbXBvbmVudDpyfSk6bnVsbCkpLHAmJnAuc2l6ZXx8ZD9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzY2hlbWUtY29udGFpbmVyIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodix7Y2xhc3NOYW1lOiJzY2hlbWVzIHdyYXBwZXIiLG1vYmlsZToxMn0scCYmcC5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGose2N1cnJlbnRTY2hlbWU6dC5vcGVyYXRpb25TY2hlbWUoKSxzY2hlbWVzOnAsc3BlY0FjdGlvbnM6bn0pOm51bGwsZD9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFLG51bGwpOm51bGwpKTpudWxsLGYmJmYuc2l6ZT9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJnbG9iYWwtc2VydmVyLWNvbnRhaW5lciJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYse2NsYXNzTmFtZToic2VydmVycyB3cmFwcGVyIixtb2JpbGU6MTJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJzZXJ2ZXJzLXRpdGxlIn0sIlNlcnZlciIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQse3NlcnZlcnM6ZixjdXJyZW50U2VydmVyOnMuc2VsZWN0ZWRTZXJ2ZXIoKSxzZXRTZWxlY3RlZFNlcnZlcjppLnNldFNlbGVjdGVkU2VydmVyLHNldFNlcnZlclZhcmlhYmxlVmFsdWU6aS5zZXRTZXJ2ZXJWYXJpYWJsZVZhbHVlLGdldFNlcnZlclZhcmlhYmxlOnMuc2VydmVyVmFyaWFibGVWYWx1ZSxnZXRFZmZlY3RpdmVTZXJ2ZXJWYWx1ZTpzLnNlcnZlckVmZmVjdGl2ZVZhbHVlfSkpKTpudWxsLG51bGw9PT1TfHwhMT09PVM/bnVsbDptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJmaWx0ZXItY29udGFpbmVyIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodix7Y2xhc3NOYW1lOiJmaWx0ZXIgd3JhcHBlciIsbW9iaWxlOjEyfSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6Im9wZXJhdGlvbi1maWx0ZXItaW5wdXQiLHBsYWNlaG9sZGVyOiJGaWx0ZXIgYnkgdGFnIix0eXBlOiJ0ZXh0IixvbkNoYW5nZTp0aGlzLm9uRmlsdGVyQ2hhbmdlLHZhbHVlOiEwPT09U3x8InRydWUiPT09Uz8iIjpTLGRpc2FibGVkOkMsc3R5bGU6Un0pKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYse21vYmlsZToxMixkZXNrdG9wOjEyfSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChnLG51bGwpKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeSxudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYse21vYmlsZToxMixkZXNrdG9wOjEyfSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChiLG51bGwpKSkpKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Yi5wcm9wVHlwZXM9e2VyclNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZXJyQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY0FjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLG9hczNTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLG9hczNBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxsYXlvdXRTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigzMCkscz1yKG8pLGk9big0KSxhPXIoaSksbD1uKDIpLHU9cihsKSxjPW4oMyksZD1yKGMpLF89big2KSxwPXIoXyksZj1uKDUpLG09cihmKSxoPW4oMCksZz1yKGgpLGI9bigxKSxFPXIoYikseT1uKDkpLHY9cih5KSxUPW4oNyksQT1mdW5jdGlvbihlKXt2YXIgdD1lLmhlYWRlcnM7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg1IixudWxsLCJSZXNwb25zZSBoZWFkZXJzIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIsbnVsbCx0KSl9O0EucHJvcFR5cGVzPXtoZWFkZXJzOkUuZGVmYXVsdC5hcnJheS5pc1JlcXVpcmVkfTt2YXIgQz1mdW5jdGlvbihlKXt2YXIgdD1lLmR1cmF0aW9uO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNSIsbnVsbCwiUmVxdWVzdCBkdXJhdGlvbiIpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwcmUiLG51bGwsdCwiIG1zIikpfTtDLnByb3BUeXBlcz17ZHVyYXRpb246RS5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfTt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsdS5kZWZhdWx0KSh0aGlzLHQpLCgwLHAuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToic2hvdWxkQ29tcG9uZW50VXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wcy5yZXNwb25zZSE9PWUucmVzcG9uc2V8fHRoaXMucHJvcHMucGF0aCE9PWUucGF0aHx8dGhpcy5wcm9wcy5tZXRob2QhPT1lLm1ldGhvZHx8dGhpcy5wcm9wcy5kaXNwbGF5UmVxdWVzdER1cmF0aW9uIT09ZS5kaXNwbGF5UmVxdWVzdER1cmF0aW9ufX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnJlc3BvbnNlLG49ZS5nZXRDb21wb25lbnQscj1lLmdldENvbmZpZ3Msbz1lLmRpc3BsYXlSZXF1ZXN0RHVyYXRpb24saT1lLnNwZWNTZWxlY3RvcnMsYT1lLnBhdGgsbD1lLm1ldGhvZCx1PXIoKSxjPXUuc2hvd011dGF0ZWRSZXF1ZXN0LGQ9Yz9pLm11dGF0ZWRSZXF1ZXN0Rm9yKGEsbCk6aS5yZXF1ZXN0Rm9yKGEsbCksXz10LmdldCgic3RhdHVzIikscD1kLmdldCgidXJsIiksZj10LmdldCgiaGVhZGVycyIpLnRvSlMoKSxtPXQuZ2V0KCJub3REb2N1bWVudGVkIiksaD10LmdldCgiZXJyb3IiKSxiPXQuZ2V0KCJ0ZXh0IiksRT10LmdldCgiZHVyYXRpb24iKSx5PSgwLHMuZGVmYXVsdCkoZiksdj1mWyJjb250ZW50LXR5cGUiXSxUPW4oImN1cmwiKSxPPW4oInJlc3BvbnNlQm9keSIpLFM9eS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJoZWFkZXJsaW5lIixrZXk6ZX0sIiAiLGUsIjogIixmW2VdLCIgIil9KSxSPTAhPT1TLmxlbmd0aDtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxkJiZnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULHtyZXF1ZXN0OmR9KSxwJiZnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIsbnVsbCwiUmVxdWVzdCBVUkwiKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZXF1ZXN0LXVybCJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwcmUiLG51bGwscCkpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsIlNlcnZlciByZXNwb25zZSIpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIse2NsYXNzTmFtZToicmVzcG9uc2VzLXRhYmxlIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoZWFkIixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse2NsYXNzTmFtZToicmVzcG9uc2VzLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIGNvbF9oZWFkZXIgcmVzcG9uc2UtY29sX3N0YXR1cyJ9LCJDb2RlIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7Y2xhc3NOYW1lOiJjb2wgY29sX2hlYWRlciByZXNwb25zZS1jb2xfZGVzY3JpcHRpb24ifSwiRGV0YWlscyIpKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRib2R5IixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse2NsYXNzTmFtZToicmVzcG9uc2UifSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLHtjbGFzc05hbWU6ImNvbCByZXNwb25zZS1jb2xfc3RhdHVzIn0sXyxtP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlc3BvbnNlLXVuZG9jdW1lbnRlZCJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIixudWxsLCIgVW5kb2N1bWVudGVkICIpKTpudWxsKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLHtjbGFzc05hbWU6ImNvbCByZXNwb25zZS1jb2xfZGVzY3JpcHRpb24ifSxoP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHQuZ2V0KCJuYW1lIikrIjogIit0LmdldCgibWVzc2FnZSIpKTpudWxsLGI/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTyx7Y29udGVudDpiLGNvbnRlbnRUeXBlOnYsdXJsOnAsaGVhZGVyczpmLGdldENvbXBvbmVudDpufSk6bnVsbCxSP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEse2hlYWRlcnM6U30pOm51bGwsbyYmRT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLHtkdXJhdGlvbjpFfSk6bnVsbCkpKSkpfX1dKSx0fShnLmRlZmF1bHQuQ29tcG9uZW50KTtPLnByb3BUeXBlcz17cmVzcG9uc2U6RS5kZWZhdWx0Lmluc3RhbmNlT2YoVC5JdGVyYWJsZSkuaXNSZXF1aXJlZCxwYXRoOkUuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxtZXRob2Q6RS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGRpc3BsYXlSZXF1ZXN0RHVyYXRpb246RS5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRDb25maWdzOkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LE8ucHJvcFR5cGVzPXtnZXRDb21wb25lbnQ6RS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxyZXNwb25zZTp2LmRlZmF1bHQubWFwfSx0LmRlZmF1bHQ9T30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7KDAsYS5kZWZhdWx0KSh0aGlzLHQpO3ZhciByPSgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlLG4pKTtyLnRvZ2dsZUNvbGxhcHNlZD1mdW5jdGlvbigpe3IucHJvcHMub25Ub2dnbGUmJnIucHJvcHMub25Ub2dnbGUoci5wcm9wcy5tb2RlbE5hbWUsIXIuc3RhdGUuZXhwYW5kZWQpLHIuc2V0U3RhdGUoe2V4cGFuZGVkOiFyLnN0YXRlLmV4cGFuZGVkfSl9O3ZhciBvPXIucHJvcHMsaT1vLmV4cGFuZGVkLGw9by5jb2xsYXBzZWRDb250ZW50O3JldHVybiByLnN0YXRlPXtleHBhbmRlZDppLGNvbGxhcHNlZENvbnRlbnQ6bHx8dC5kZWZhdWx0UHJvcHMuY29sbGFwc2VkQ29udGVudH0scn1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLmV4cGFuZGVkIT1lLmV4cGFuZGVkJiZ0aGlzLnNldFN0YXRlKHtleHBhbmRlZDplLmV4cGFuZGVkfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50aXRsZTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsZSYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtvbkNsaWNrOnRoaXMudG9nZ2xlQ29sbGFwc2VkLHN0eWxlOntjdXJzb3I6InBvaW50ZXIifX0sZSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtvbkNsaWNrOnRoaXMudG9nZ2xlQ29sbGFwc2VkLHN0eWxlOntjdXJzb3I6InBvaW50ZXIifX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im1vZGVsLXRvZ2dsZSIrKHRoaXMuc3RhdGUuZXhwYW5kZWQ/IiI6IiBjb2xsYXBzZWQiKX0pKSx0aGlzLnN0YXRlLmV4cGFuZGVkP3RoaXMucHJvcHMuY2hpbGRyZW46dGhpcy5zdGF0ZS5jb2xsYXBzZWRDb250ZW50KX19XSksdH0oZi5Db21wb25lbnQpO2IucHJvcFR5cGVzPXtjb2xsYXBzZWRDb250ZW50OmcuZGVmYXVsdC5hbnksZXhwYW5kZWQ6Zy5kZWZhdWx0LmJvb2wsY2hpbGRyZW46Zy5kZWZhdWx0LmFueSx0aXRsZTpnLmRlZmF1bHQuZWxlbWVudCxtb2RlbE5hbWU6Zy5kZWZhdWx0LnN0cmluZyxvblRvZ2dsZTpnLmRlZmF1bHQuZnVuY30sYi5kZWZhdWx0UHJvcHM9e2NvbGxhcHNlZENvbnRlbnQ6InsuLi59IixleHBhbmRlZDohMSx0aXRsZTpudWxsLG9uVG9nZ2xlOmZ1bmN0aW9uKCl7fX0sdC5kZWZhdWx0PWJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9big5KSxFPXIoYikseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7KDAsYS5kZWZhdWx0KSh0aGlzLHQpO3ZhciByPSgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlLG4pKTtyLmFjdGl2ZVRhYj1mdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldC5kYXRhc2V0Lm5hbWU7ci5zZXRTdGF0ZSh7YWN0aXZlVGFiOnR9KX07dmFyIG89ci5wcm9wcy5nZXRDb25maWdzLGk9bygpLGw9aS5kZWZhdWx0TW9kZWxSZW5kZXJpbmc7cmV0dXJuImV4YW1wbGUiIT09bCYmIm1vZGVsIiE9PWwmJihsPSJleGFtcGxlIiksci5zdGF0ZT17YWN0aXZlVGFiOmx9LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmdldENvbXBvbmVudCxuPWUuc3BlY1NlbGVjdG9ycyxyPWUuc2NoZW1hLG89ZS5leGFtcGxlLHM9ZS5pc0V4ZWN1dGUsaT1lLmdldENvbmZpZ3MsYT1lLnNwZWNQYXRoLGw9aSgpLHU9bC5kZWZhdWx0TW9kZWxFeHBhbmREZXB0aCxjPXQoIk1vZGVsV3JhcHBlciIpO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToidGFiIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxpIix7Y2xhc3NOYW1lOiJ0YWJpdGVtIisoc3x8ImV4YW1wbGUiPT09dGhpcy5zdGF0ZS5hY3RpdmVUYWI/IiBhY3RpdmUiOiIiKX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtjbGFzc05hbWU6InRhYmxpbmtzIiwiZGF0YS1uYW1lIjoiZXhhbXBsZSIsb25DbGljazp0aGlzLmFjdGl2ZVRhYn0sIkV4YW1wbGUgVmFsdWUiKSkscj9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6InRhYml0ZW0iKyhzfHwibW9kZWwiIT09dGhpcy5zdGF0ZS5hY3RpdmVUYWI/IiI6IiBhY3RpdmUiKX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtjbGFzc05hbWU6InRhYmxpbmtzIisocz8iIGluYWN0aXZlIjoiIiksImRhdGEtbmFtZSI6Im1vZGVsIixvbkNsaWNrOnRoaXMuYWN0aXZlVGFifSwiTW9kZWwiKSk6bnVsbCksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCwoc3x8ImV4YW1wbGUiPT09dGhpcy5zdGF0ZS5hY3RpdmVUYWIpJiZvLCFzJiYibW9kZWwiPT09dGhpcy5zdGF0ZS5hY3RpdmVUYWImJm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3NjaGVtYTpyLGdldENvbXBvbmVudDp0LGdldENvbmZpZ3M6aSxzcGVjU2VsZWN0b3JzOm4sZXhwYW5kRGVwdGg6dSxzcGVjUGF0aDphfSkpKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7eS5wcm9wVHlwZXM9e2dldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNjaGVtYTpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZXhhbXBsZTpnLmRlZmF1bHQuYW55LmlzUmVxdWlyZWQsaXNFeGVjdXRlOmcuZGVmYXVsdC5ib29sLGdldENvbmZpZ3M6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjUGF0aDpFLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9eX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigxNCkscz1yKG8pLGk9big0KSxhPXIoaSksbD1uKDIpLHU9cihsKSxjPW4oMyksZD1yKGMpLF89big2KSxwPXIoXyksZj1uKDUpLG09cihmKSxoPW4oMCksZz1yKGgpLGI9bigxKSxFPXIoYikseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vblRvZ2dsZT1mdW5jdGlvbihlLHQpe3IucHJvcHMubGF5b3V0QWN0aW9ucyYmci5wcm9wcy5sYXlvdXRBY3Rpb25zLnNob3coWyJtb2RlbHMiLGVdLHQpfSxvPW4sKDAscC5kZWZhdWx0KShyLG8pfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5nZXRDb21wb25lbnQsbj1lLmdldENvbmZpZ3Mscj10KCJNb2RlbCIpLG89dm9pZCAwO3JldHVybiB0aGlzLnByb3BzLmxheW91dFNlbGVjdG9ycyYmKG89dGhpcy5wcm9wcy5sYXlvdXRTZWxlY3RvcnMuaXNTaG93bihbIm1vZGVscyIsdGhpcy5wcm9wcy5uYW1lXSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im1vZGVsLWJveCJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHIsKDAscy5kZWZhdWx0KSh7fSx0aGlzLnByb3BzLHtnZXRDb25maWdzOm4sZXhwYW5kZWQ6byxkZXB0aDoxLG9uVG9nZ2xlOnRoaXMub25Ub2dnbGUsZXhwYW5kRGVwdGg6dGhpcy5wcm9wcy5leHBhbmREZXB0aHx8MH0pKSl9fV0pLHR9KGguQ29tcG9uZW50KTt5LnByb3BUeXBlcz17c2NoZW1hOkUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxuYW1lOkUuZGVmYXVsdC5zdHJpbmcsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Q29uZmlnczpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6RS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGV4cGFuZERlcHRoOkUuZGVmYXVsdC5udW1iZXIsbGF5b3V0QWN0aW9uczpFLmRlZmF1bHQub2JqZWN0LGxheW91dFNlbGVjdG9yczpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LHQuZGVmYXVsdD15fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDExKSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDcpLEU9cihiKSx5PW4oMSksdj1yKHkpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLHUuZGVmYXVsdCkodGhpcyx0KSwoMCxwLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zcGVjU2VsZWN0b3JzLG49ZS5nZXRDb21wb25lbnQscj1lLmxheW91dFNlbGVjdG9ycyxvPWUubGF5b3V0QWN0aW9ucyxpPWUuZ2V0Q29uZmlncyxhPXQuZGVmaW5pdGlvbnMoKSxsPWkoKSx1PWwuZG9jRXhwYW5zaW9uLGM9bC5kZWZhdWx0TW9kZWxzRXhwYW5kRGVwdGg7aWYoIWEuc2l6ZXx8YzwwKXJldHVybiBudWxsO3ZhciBkPXIuaXNTaG93bigibW9kZWxzIixjPjAmJiJub25lIiE9PXUpLF89dC5pc09BUzMoKT9bImNvbXBvbmVudHMiLCJzY2hlbWFzIl06WyJkZWZpbml0aW9ucyJdLHA9bigiTW9kZWxXcmFwcGVyIiksZj1uKCJDb2xsYXBzZSIpO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse2NsYXNzTmFtZTpkPyJtb2RlbHMgaXMtb3BlbiI6Im1vZGVscyJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIse29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gby5zaG93KCJtb2RlbHMiLCFkKX19LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJNb2RlbHMiKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3ZnIix7d2lkdGg6IjIwIixoZWlnaHQ6IjIwIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInVzZSIse3hsaW5rSHJlZjpkPyIjbGFyZ2UtYXJyb3ctZG93biI6IiNsYXJnZS1hcnJvdyJ9KSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYse2lzT3BlbmVkOmR9LGEuZW50cnlTZXEoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGE9KDAscy5kZWZhdWx0KShlLDIpLGw9YVswXSx1PWFbMV07cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtpZDoibW9kZWwtIitsLGNsYXNzTmFtZToibW9kZWwtY29udGFpbmVyIixrZXk6Im1vZGVscy1zZWN0aW9uLSIrbH0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocCx7bmFtZTpsLGV4cGFuZERlcHRoOmMsc2NoZW1hOnUsc3BlY1BhdGg6RS5kZWZhdWx0Lkxpc3QoW10uY29uY2F0KF8sW2xdKSksZ2V0Q29tcG9uZW50Om4sc3BlY1NlbGVjdG9yczp0LGdldENvbmZpZ3M6aSxsYXlvdXRTZWxlY3RvcnM6cixsYXlvdXRBY3Rpb25zOm99KSl9KS50b0FycmF5KCkpKX19XSksdH0oaC5Db21wb25lbnQpO1QucHJvcFR5cGVzPXtnZXRDb21wb25lbnQ6di5kZWZhdWx0LmZ1bmMsc3BlY1NlbGVjdG9yczp2LmRlZmF1bHQub2JqZWN0LGxheW91dFNlbGVjdG9yczp2LmRlZmF1bHQub2JqZWN0LGxheW91dEFjdGlvbnM6di5kZWZhdWx0Lm9iamVjdCxnZXRDb25maWdzOnYuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LHQuZGVmYXVsdD1UfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDI0KSxzPXIobyksaT1uKDE0KSxhPXIoaSksbD1uKDExKSx1PXIobCksYz1uKDcxKSxkPXIoYyksXz1uKDQpLHA9cihfKSxmPW4oMiksbT1yKGYpLGg9bigzKSxnPXIoaCksYj1uKDYpLEU9cihiKSx5PW4oNSksdj1yKHkpLFQ9bigwKSxBPXIoVCksQz1uKDEpLE89cihDKSxTPW4oNyksUj1uKDkpLGo9cihSKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxtLmRlZmF1bHQpKHRoaXMsdCksKDAsRS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscC5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx2LmRlZmF1bHQpKHQsZSksKDAsZy5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc2NoZW1hLG49ZS5uYW1lLHI9ZS5pc1JlZixvPWUuZ2V0Q29tcG9uZW50LGk9ZS5nZXRDb25maWdzLGw9ZS5kZXB0aCxjPWUub25Ub2dnbGUsXz1lLmV4cGFuZGVkLHA9ZS5zcGVjUGF0aCxmPSgwLGQuZGVmYXVsdCkoZSxbInNjaGVtYSIsIm5hbWUiLCJpc1JlZiIsImdldENvbXBvbmVudCIsImdldENvbmZpZ3MiLCJkZXB0aCIsIm9uVG9nZ2xlIiwiZXhwYW5kZWQiLCJzcGVjUGF0aCJdKSxtPWYuc3BlY1NlbGVjdG9ycyxoPWYuZXhwYW5kRGVwdGgsZz1tLmlzT0FTMztpZighdClyZXR1cm4gbnVsbDt2YXIgYj1pKCksRT1iLnNob3dFeHRlbnNpb25zLHk9dC5nZXQoImRlc2NyaXB0aW9uIiksdj10LmdldCgicHJvcGVydGllcyIpLFQ9dC5nZXQoImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiksQz10LmdldCgidGl0bGUiKXx8bixPPXQuZ2V0KCJyZXF1aXJlZCIpLFI9bygiSnVtcFRvUGF0aCIsITApLGo9bygiTWFya2Rvd24iKSx4PW8oIk1vZGVsIiksTD1vKCJNb2RlbENvbGxhcHNlIiksRD1mdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kZWwtanVtcC10by1wYXRoIn0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUix7c3BlY1BhdGg6cH0pKX0sdz1BLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwieyIpLCIuLi4iLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJ9Iikscj9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELG51bGwpOiIiKSxNPW0uaXNPQVMzKCk/dC5nZXQoImFueU9mIik6bnVsbCxrPW0uaXNPQVMzKCk/dC5nZXQoIm9uZU9mIik6bnVsbCxJPW0uaXNPQVMzKCk/dC5nZXQoIm5vdCIpOm51bGwsUD1DJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kZWwtdGl0bGUifSxyJiZ0LmdldCgiJCRyZWYiKSYmQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im1vZGVsLWhpbnQifSx0LmdldCgiJCRyZWYiKSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im1vZGVsLXRpdGxlX190ZXh0In0sQykpO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kZWwifSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLHttb2RlbE5hbWU6bix0aXRsZTpQLG9uVG9nZ2xlOmMsZXhwYW5kZWQ6ISFffHxsPD1oLGNvbGxhcHNlZENvbnRlbnQ6d30sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImJyYWNlLW9wZW4gb2JqZWN0In0sInsiKSxyP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQsbnVsbCk6bnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiaW5uZXItb2JqZWN0In0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRhYmxlIix7Y2xhc3NOYW1lOiJtb2RlbCJ9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIsbnVsbCx5P0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse3N0eWxlOntjb2xvcjoiIzk5OSIsZm9udFN0eWxlOiJpdGFsaWMifX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIixudWxsLCJkZXNjcmlwdGlvbjoiKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaix7c291cmNlOnl9KSkpOm51bGwsdiYmdi5zaXplP3YuZW50cnlTZXEoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsdS5kZWZhdWx0KShlLDIpLHI9dFswXSxzPXRbMV0sYz1nKCkmJnMuZ2V0KCJkZXByZWNhdGVkIiksZD1TLkxpc3QuaXNMaXN0KE8pJiZPLmNvbnRhaW5zKHIpLF89e3ZlcnRpY2FsQWxpZ246InRvcCIscGFkZGluZ1JpZ2h0OiIwLjJlbSJ9O3JldHVybiBkJiYoXy5mb250V2VpZ2h0PSJib2xkIiksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIix7a2V5OnIsY2xhc3NOYW1lOmMmJiJkZXByZWNhdGVkIn0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7c3R5bGU6X30scixkJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOntjb2xvcjoicmVkIn19LCIqIikpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse3N0eWxlOnt2ZXJ0aWNhbEFsaWduOiJ0b3AifX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeCwoMCxhLmRlZmF1bHQpKHtrZXk6Im9iamVjdC0iK24rIi0iK3IrIl8iK3N9LGYse3JlcXVpcmVkOmQsZ2V0Q29tcG9uZW50Om8sc3BlY1BhdGg6cC5wdXNoKCJwcm9wZXJ0aWVzIixyKSxnZXRDb25maWdzOmksc2NoZW1hOnMsZGVwdGg6bCsxfSkpKSl9KS50b0FycmF5KCk6bnVsbCxFP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIsbnVsbCwiwqAiKTpudWxsLEU/dC5lbnRyeVNlcSgpLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCx1LmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXTtpZigieC0iPT09bi5zbGljZSgwLDIpKXt2YXIgbz1yP3IudG9KUz9yLnRvSlMoKTpyOm51bGw7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse2tleTpuLHN0eWxlOntjb2xvcjoiIzc3NyJ9fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsbiksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7c3R5bGU6e3ZlcnRpY2FsQWxpZ246InRvcCJ9fSwoMCxzLmRlZmF1bHQpKG8pKSl9fSkudG9BcnJheSgpOm51bGwsVCYmVC5zaXplP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsIjwgKiA+OiIpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LCgwLGEuZGVmYXVsdCkoe30sZix7cmVxdWlyZWQ6ITEsZ2V0Q29tcG9uZW50Om8sc3BlY1BhdGg6cC5wdXNoKCJhZGRpdGlvbmFsUHJvcGVydGllcyIpLGdldENvbmZpZ3M6aSxzY2hlbWE6VCxkZXB0aDpsKzF9KSkpKTpudWxsLE0/QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIixudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIsbnVsbCwiYW55T2YgLT4iKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsTS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LCgwLGEuZGVmYXVsdCkoe30sZix7cmVxdWlyZWQ6ITEsZ2V0Q29tcG9uZW50Om8sc3BlY1BhdGg6cC5wdXNoKCJhbnlPZiIsdCksZ2V0Q29uZmlnczppLHNjaGVtYTplLGRlcHRoOmwrMX0pKSl9KSkpOm51bGwsaz9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidHIiLG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIixudWxsLCJvbmVPZiAtPiIpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIsbnVsbCxrLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnR9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHgsKDAsYS5kZWZhdWx0KSh7fSxmLHtyZXF1aXJlZDohMSxnZXRDb21wb25lbnQ6byxzcGVjUGF0aDpwLnB1c2goIm9uZU9mIix0KSxnZXRDb25maWdzOmksc2NoZW1hOmUsZGVwdGg6bCsxfSkpKX0pKSk6bnVsbCxJP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsIm5vdCAtPiIpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHgsKDAsYS5kZWZhdWx0KSh7fSxmLHtyZXF1aXJlZDohMSxnZXRDb21wb25lbnQ6byxzcGVjUGF0aDpwLnB1c2goIm5vdCIpLGdldENvbmZpZ3M6aSxzY2hlbWE6SSxkZXB0aDpsKzF9KSkpKSk6bnVsbCkpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiYnJhY2UtY2xvc2UifSwifSIpKSl9fV0pLHR9KFQuQ29tcG9uZW50KTt4LnByb3BUeXBlcz17c2NoZW1hOk8uZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Ty5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRDb25maWdzOk8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZXhwYW5kZWQ6Ty5kZWZhdWx0LmJvb2wsb25Ub2dnbGU6Ty5kZWZhdWx0LmZ1bmMsc3BlY1NlbGVjdG9yczpPLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbmFtZTpPLmRlZmF1bHQuc3RyaW5nLGlzUmVmOk8uZGVmYXVsdC5ib29sLGV4cGFuZERlcHRoOk8uZGVmYXVsdC5udW1iZXIsZGVwdGg6Ty5kZWZhdWx0Lm51bWJlcixzcGVjUGF0aDpqLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkfSx0LmRlZmF1bHQ9eH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigzMCkscz1yKG8pLGk9bigzMSksYT1yKGkpLGw9big0KSx1PXIobCksYz1uKDIpLGQ9cihjKSxfPW4oMykscD1yKF8pLGY9big2KSxtPXIoZiksaD1uKDUpLGc9cihoKSxiPW4oMCksRT1yKGIpLHk9bigxKSx2PXIoeSksVD1uKDgpLEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4peygwLGQuZGVmYXVsdCkodGhpcyx0KTt2YXIgcj0oMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSxuKSksbz1lLnNwZWNTZWxlY3RvcnMscz1lLmdldENvbmZpZ3MsaT1zKCksYT1pLnZhbGlkYXRvclVybDtyZXR1cm4gci5zdGF0ZT17dXJsOm8udXJsKCksdmFsaWRhdG9yVXJsOnZvaWQgMD09PWE/Imh0dHBzOi8vb25saW5lLnN3YWdnZXIuaW8vdmFsaWRhdG9yIjphfSxyfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BlY1NlbGVjdG9ycyxuPWUuZ2V0Q29uZmlncyxyPW4oKSxvPXIudmFsaWRhdG9yVXJsO3RoaXMuc2V0U3RhdGUoe3VybDp0LnVybCgpLHZhbGlkYXRvclVybDp2b2lkIDA9PT1vPyJodHRwczovL29ubGluZS5zd2FnZ2VyLmlvL3ZhbGlkYXRvciI6b30pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuZ2V0Q29uZmlncyx0PWUoKSxuPXQuc3BlYyxyPSgwLFQuc2FuaXRpemVVcmwpKHRoaXMuc3RhdGUudmFsaWRhdG9yVXJsKTtyZXR1cm4ib2JqZWN0Ij09PSh2b2lkIDA9PT1uPyJ1bmRlZmluZWQiOigwLGEuZGVmYXVsdCkobikpJiYoMCxzLmRlZmF1bHQpKG4pLmxlbmd0aD9udWxsOiF0aGlzLnN0YXRlLnVybHx8IXRoaXMuc3RhdGUudmFsaWRhdG9yVXJsfHx0aGlzLnN0YXRlLnVybC5pbmRleE9mKCJsb2NhbGhvc3QiKT49MHx8dGhpcy5zdGF0ZS51cmwuaW5kZXhPZigiMTI3LjAuMC4xIik+PTA/bnVsbDpFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOntmbG9hdDoicmlnaHQifX0sRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHt0YXJnZXQ6Il9ibGFuayIsaHJlZjpyKyIvZGVidWc/dXJsPSIrdGhpcy5zdGF0ZS51cmx9LEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMse3NyYzpyKyI/dXJsPSIrdGhpcy5zdGF0ZS51cmwsYWx0OiJPbmxpbmUgdmFsaWRhdG9yIGJhZGdlIn0pKSl9fV0pLHR9KEUuZGVmYXVsdC5Db21wb25lbnQpO0EucHJvcFR5cGVzPXtnZXRDb21wb25lbnQ6di5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxnZXRDb25maWdzOnYuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczp2LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LHQuZGVmYXVsdD1BO3ZhciBDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7KDAsZC5kZWZhdWx0KSh0aGlzLHQpO3ZhciBuPSgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIG4uc3RhdGU9e2xvYWRlZDohMSxlcnJvcjohMX0sbn1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9bmV3IEltYWdlO3Qub25sb2FkPWZ1bmN0aW9uKCl7ZS5zZXRTdGF0ZSh7bG9hZGVkOiEwfSl9LHQub25lcnJvcj1mdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2Vycm9yOiEwfSl9LHQuc3JjPXRoaXMucHJvcHMuc3JjfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlLnNyYyE9PXRoaXMucHJvcHMuc3JjKXt2YXIgbj1uZXcgSW1hZ2U7bi5vbmxvYWQ9ZnVuY3Rpb24oKXt0LnNldFN0YXRlKHtsb2FkZWQ6ITB9KX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dC5zZXRTdGF0ZSh7ZXJyb3I6ITB9KX0sbi5zcmM9ZS5zcmN9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmVycm9yP0UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbWciLHthbHQ6IkVycm9yIn0pOnRoaXMuc3RhdGUubG9hZGVkP0UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbWciLHtzcmM6dGhpcy5wcm9wcy5zcmMsYWx0OnRoaXMucHJvcHMuYWx0fSk6RS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse2FsdDoiTG9hZGluZy4uLiJ9KX19XSksdH0oRS5kZWZhdWx0LkNvbXBvbmVudCk7Qy5wcm9wVHlwZXM9e3NyYzp2LmRlZmF1bHQuc3RyaW5nLGFsdDp2LmRlZmF1bHQuc3RyaW5nfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVyYXRpb25FeHRSb3c9dm9pZCAwO3ZhciBvPW4oMjQpLHM9cihvKSxpPW4oMCksYT1yKGkpLGw9bigxKSx1PXIobCksYz10Lk9wZXJhdGlvbkV4dFJvdz1mdW5jdGlvbihlKXt2YXIgdD1lLnhLZXksbj1lLnhWYWwscj1uP24udG9KUz9uLnRvSlMoKTpuOm51bGw7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIsbnVsbCxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLG51bGwsdCksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIixudWxsLCgwLHMuZGVmYXVsdCkocikpKX07Yy5wcm9wVHlwZXM9e3hLZXk6dS5kZWZhdWx0LnN0cmluZyx4VmFsOnUuZGVmYXVsdC5hbnl9LHQuZGVmYXVsdD1jfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9wZXJhdGlvbkV4dD12b2lkIDA7dmFyIG89bigxMSkscz1yKG8pLGk9bigwKSxhPXIoaSksbD1uKDEpLHU9cihsKSxjPXQuT3BlcmF0aW9uRXh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZXh0ZW5zaW9ucyxuPWUuZ2V0Q29tcG9uZW50LHI9bigiT3BlcmF0aW9uRXh0Um93Iik7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stc2VjdGlvbiJ9LGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stc2VjdGlvbi1oZWFkZXIifSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsIkV4dGVuc2lvbnMiKSksYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToidGFibGUtY29udGFpbmVyIn0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRhYmxlIixudWxsLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIsbnVsbCxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidHIiLG51bGwsYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7Y2xhc3NOYW1lOiJjb2wgY29sX2hlYWRlciJ9LCJGaWVsZCIpLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIGNvbF9oZWFkZXIifSwiVmFsdWUiKSkpLGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIsbnVsbCx0LmVudHJ5U2VxKCkubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PSgwLHMuZGVmYXVsdCkoZSwyKSxuPXRbMF0sbz10WzFdO3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyLHtrZXk6bisiLSIrbyx4S2V5Om4seFZhbDpvfSl9KSkpKSl9O2MucHJvcFR5cGVzPXtleHRlbnNpb25zOnUuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6dS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PWN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9big4KSxFPW4oNykseT1uKDkpLHY9cih5KSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHRoaXMsdCksKDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3BlY1BhdGgsbj1lLnJlc3BvbnNlLHI9ZS5yZXF1ZXN0LG89ZS50b2dnbGVTaG93bixzPWUub25UcnlvdXRDbGljayxpPWUub25DYW5jZWxDbGljayxhPWUub25FeGVjdXRlLGw9ZS5mbix1PWUuZ2V0Q29tcG9uZW50LGM9ZS5nZXRDb25maWdzLGQ9ZS5zcGVjQWN0aW9ucyxfPWUuc3BlY1NlbGVjdG9ycyxwPWUuYXV0aEFjdGlvbnMsZj1lLmF1dGhTZWxlY3RvcnMsaD1lLm9hczNBY3Rpb25zLGc9ZS5vYXMzU2VsZWN0b3JzLEU9dGhpcy5wcm9wcy5vcGVyYXRpb24seT1FLnRvSlMoKSx2PXkuaXNTaG93bixUPXkuaXNBdXRob3JpemVkLEE9eS5wYXRoLEM9eS5tZXRob2QsTz15Lm9wLFM9eS50YWcsUj15LnNob3dTdW1tYXJ5LGo9eS5vcGVyYXRpb25JZCx4PXkuYWxsb3dUcnlJdE91dCxMPXkuZGlzcGxheU9wZXJhdGlvbklkLEQ9eS5kaXNwbGF5UmVxdWVzdER1cmF0aW9uLHc9eS5pc0RlZXBMaW5raW5nRW5hYmxlZCxNPXkudHJ5SXRPdXRFbmFibGVkLGs9eS5leGVjdXRlSW5Qcm9ncmVzcyxJPU8ub3BlcmF0aW9uLFA9SS5zdW1tYXJ5LE49SS5kZXNjcmlwdGlvbixIPUkuZGVwcmVjYXRlZCxGPUkuZXh0ZXJuYWxEb2NzLEI9SS5zY2hlbWVzLFU9RS5nZXRJbihbIm9wIiwib3BlcmF0aW9uIl0pLEc9RS5nZXQoInNlY3VyaXR5Iiksej1VLmdldCgicmVzcG9uc2VzIiksVj1VLmdldCgicHJvZHVjZXMiKSxXPSgwLGIuZ2V0TGlzdCkoVSxbInBhcmFtZXRlcnMiXSksWT1fLm9wZXJhdGlvblNjaGVtZShBLEMpLHE9WyJvcGVyYXRpb25zIixTLGpdLEs9KDAsYi5nZXRFeHRlbnNpb25zKShVKSxYPXUoInJlc3BvbnNlcyIpLCQ9dSgicGFyYW1ldGVycyIpLFE9dSgiZXhlY3V0ZSIpLEo9dSgiY2xlYXIiKSxaPXUoImF1dGhvcml6ZU9wZXJhdGlvbkJ0biIpLGVlPXUoIkp1bXBUb1BhdGgiLCEwKSx0ZT11KCJDb2xsYXBzZSIpLG5lPXUoIk1hcmtkb3duIikscmU9dSgic2NoZW1lcyIpLG9lPXUoIk9wZXJhdGlvblNlcnZlcnMiKSxzZT11KCJPcGVyYXRpb25FeHQiKSxpZT11KCJEZWVwTGluayIpLGFlPWMoKSxsZT1hZS5zaG93RXh0ZW5zaW9ucztpZih6JiZuJiZuLnNpemU+MCl7dmFyIHVlPSF6LmdldChTdHJpbmcobi5nZXQoInN0YXR1cyIpKSkmJiF6LmdldCgiZGVmYXVsdCIpO249bi5zZXQoIm5vdERvY3VtZW50ZWQiLHVlKX12YXIgY2U9W0EsQ107cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SD8ib3BibG9jayBvcGJsb2NrLWRlcHJlY2F0ZWQiOnY/Im9wYmxvY2sgb3BibG9jay0iK0MrIiBpcy1vcGVuIjoib3BibG9jayBvcGJsb2NrLSIrQyxpZDpxLmpvaW4oIi0iKX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zdW1tYXJ5IG9wYmxvY2stc3VtbWFyeS0iK0Msb25DbGljazpvfSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToib3BibG9jay1zdW1tYXJ5LW1ldGhvZCJ9LEMudG9VcHBlckNhc2UoKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6SD8ib3BibG9jay1zdW1tYXJ5LXBhdGhfX2RlcHJlY2F0ZWQiOiJvcGJsb2NrLXN1bW1hcnktcGF0aCJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGllLHtlbmFibGVkOncsaXNTaG93bjp2LHBhdGg6IiIrcS5qb2luKCIvIiksdGV4dDpBfSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZWUse3BhdGg6dH0pLCIgIiksUj9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLXN1bW1hcnktZGVzY3JpcHRpb24ifSxQKTpudWxsLEwmJmo/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im9wYmxvY2stc3VtbWFyeS1vcGVyYXRpb24taWQifSxqKTpudWxsLEcmJkcuY291bnQoKT9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudChaLHtpc0F1dGhvcml6ZWQ6VCxvbkNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU9Zi5kZWZpbml0aW9uc0ZvclJlcXVpcmVtZW50cyhHKTtwLnNob3dEZWZpbml0aW9ucyhlKX19KTpudWxsKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh0ZSx7aXNPcGVuZWQ6dn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1ib2R5In0sSCYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLXRpdGxlX25vcm1hbCJ9LCIgV2FybmluZzogRGVwcmVjYXRlZCIpLE4mJm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stZGVzY3JpcHRpb24td3JhcHBlciJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stZGVzY3JpcHRpb24ifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChuZSx7c291cmNlOk59KSkpLEYmJkYudXJsP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stZXh0ZXJuYWwtZG9jcy13cmFwcGVyIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLXRpdGxlX25vcm1hbCJ9LCJGaW5kIG1vcmUgZGV0YWlscyIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stZXh0ZXJuYWwtZG9jcyJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJvcGJsb2NrLWV4dGVybmFsLWRvY3NfX2Rlc2NyaXB0aW9uIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobmUse3NvdXJjZTpGLmRlc2NyaXB0aW9ufSkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7dGFyZ2V0OiJfYmxhbmsiLGNsYXNzTmFtZToib3BibG9jay1leHRlcm5hbC1kb2NzX19saW5rIixocmVmOigwLGIuc2FuaXRpemVVcmwpKEYudXJsKX0sRi51cmwpKSk6bnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgkLHtwYXJhbWV0ZXJzOlcsc3BlY1BhdGg6dC5wdXNoKCJwYXJhbWV0ZXJzIiksb3BlcmF0aW9uOlUsb25DaGFuZ2VLZXk6Y2Usb25UcnlvdXRDbGljazpzLG9uQ2FuY2VsQ2xpY2s6aSx0cnlJdE91dEVuYWJsZWQ6TSxhbGxvd1RyeUl0T3V0OngsZm46bCxnZXRDb21wb25lbnQ6dSxzcGVjQWN0aW9uczpkLHNwZWNTZWxlY3RvcnM6XyxwYXRoTWV0aG9kOltBLENdLGdldENvbmZpZ3M6Y30pLE0/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQob2Use2dldENvbXBvbmVudDp1LHBhdGg6QSxtZXRob2Q6QyxvcGVyYXRpb25TZXJ2ZXJzOlUuZ2V0KCJzZXJ2ZXJzIikscGF0aFNlcnZlcnM6Xy5wYXRocygpLmdldEluKFtBLCJzZXJ2ZXJzIl0pLGdldFNlbGVjdGVkU2VydmVyOmcuc2VsZWN0ZWRTZXJ2ZXIsc2V0U2VsZWN0ZWRTZXJ2ZXI6aC5zZXRTZWxlY3RlZFNlcnZlcixzZXRTZXJ2ZXJWYXJpYWJsZVZhbHVlOmguc2V0U2VydmVyVmFyaWFibGVWYWx1ZSxnZXRTZXJ2ZXJWYXJpYWJsZTpnLnNlcnZlclZhcmlhYmxlVmFsdWUsZ2V0RWZmZWN0aXZlU2VydmVyVmFsdWU6Zy5zZXJ2ZXJFZmZlY3RpdmVWYWx1ZX0pOm51bGwsTSYmeCYmQiYmQi5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im9wYmxvY2stc2NoZW1lcyJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlLHtzY2hlbWVzOkIscGF0aDpBLG1ldGhvZDpDLHNwZWNBY3Rpb25zOmQsY3VycmVudFNjaGVtZTpZfSkpOm51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpNJiZuJiZ4PyJidG4tZ3JvdXAiOiJleGVjdXRlLXdyYXBwZXIifSxNJiZ4P20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEse29wZXJhdGlvbjpVLHNwZWNBY3Rpb25zOmQsc3BlY1NlbGVjdG9yczpfLHBhdGg6QSxtZXRob2Q6QyxvbkV4ZWN1dGU6YX0pOm51bGwsTSYmbiYmeD9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudChKLHtzcGVjQWN0aW9uczpkLHBhdGg6QSxtZXRob2Q6Q30pOm51bGwpLGs/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibG9hZGluZy1jb250YWluZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJsb2FkaW5nIn0pKTpudWxsLHo/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoWCx7cmVzcG9uc2VzOnoscmVxdWVzdDpyLHRyeUl0T3V0UmVzcG9uc2U6bixnZXRDb21wb25lbnQ6dSxnZXRDb25maWdzOmMsc3BlY1NlbGVjdG9yczpfLG9hczNBY3Rpb25zOmgsc3BlY0FjdGlvbnM6ZCxwcm9kdWNlczpWLHByb2R1Y2VzVmFsdWU6Xy5jdXJyZW50UHJvZHVjZXNGb3IoW0EsQ10pLHNwZWNQYXRoOnQucHVzaCgicmVzcG9uc2VzIikscGF0aDpBLG1ldGhvZDpDLGRpc3BsYXlSZXF1ZXN0RHVyYXRpb246RCxmbjpsfSk6bnVsbCxsZSYmSy5zaXplP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHNlLHtleHRlbnNpb25zOkssZ2V0Q29tcG9uZW50OnV9KTpudWxsKSkpfX1dKSx0fShmLlB1cmVDb21wb25lbnQpO1QucHJvcFR5cGVzPXtzcGVjUGF0aDp2LmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLG9wZXJhdGlvbjpnLmRlZmF1bHQuaW5zdGFuY2VPZihFLkl0ZXJhYmxlKS5pc1JlcXVpcmVkLHJlc3BvbnNlOmcuZGVmYXVsdC5pbnN0YW5jZU9mKEUuSXRlcmFibGUpLHJlcXVlc3Q6Zy5kZWZhdWx0Lmluc3RhbmNlT2YoRS5JdGVyYWJsZSksdG9nZ2xlU2hvd246Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvblRyeW91dENsaWNrOmcuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25DYW5jZWxDbGljazpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG9uRXhlY3V0ZTpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbmZpZ3M6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxhdXRoQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LGF1dGhTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdCxzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsb2FzM0FjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLG9hczNTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dFNlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZm46Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxULmRlZmF1bHRQcm9wcz17b3BlcmF0aW9uOm51bGwscmVzcG9uc2U6bnVsbCxyZXF1ZXN0Om51bGwsc3BlY1BhdGg6KDAsRS5MaXN0KSgpfSx0LmRlZmF1bHQ9VH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1uKDcpLEU9cihiKSx5PW4oOCksdj1bImdldCIsInB1dCIsInBvc3QiLCJkZWxldGUiLCJvcHRpb25zIiwiaGVhZCIsInBhdGNoIl0sVD12LmNvbmNhdChbInRyYWNlIl0pLEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGEuZGVmYXVsdCkodGhpcyx0KSwoMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zcGVjU2VsZWN0b3JzLG49ZS5nZXRDb21wb25lbnQscj1lLmxheW91dFNlbGVjdG9ycyxvPWUubGF5b3V0QWN0aW9ucyxzPWUuZ2V0Q29uZmlncyxpPXQudGFnZ2VkT3BlcmF0aW9ucygpLGE9bigiT3BlcmF0aW9uQ29udGFpbmVyIiwhMCksbD1uKCJDb2xsYXBzZSIpLHU9bigiTWFya2Rvd24iKSxjPW4oIkRlZXBMaW5rIiksZD1zKCksXz1kLmRvY0V4cGFuc2lvbixwPWQubWF4RGlzcGxheWVkVGFncyxmPWQuZGVlcExpbmtpbmcsaD1mJiYiZmFsc2UiIT09ZixnPXIuY3VycmVudEZpbHRlcigpO3JldHVybiBnJiYhMCE9PWcmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPT10LmluZGV4T2YoZyl9KSkscCYmIWlzTmFOKHApJiZwPj0wJiYoaT1pLnNsaWNlKDAscCkpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsaS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgcz1lLmdldCgib3BlcmF0aW9ucyIpLGk9ZS5nZXRJbihbInRhZ0RldGFpbHMiLCJkZXNjcmlwdGlvbiJdLG51bGwpLGQ9ZS5nZXRJbihbInRhZ0RldGFpbHMiLCJleHRlcm5hbERvY3MiLCJkZXNjcmlwdGlvbiJdKSxwPWUuZ2V0SW4oWyJ0YWdEZXRhaWxzIiwiZXh0ZXJuYWxEb2NzIiwidXJsIl0pLGY9WyJvcGVyYXRpb25zLXRhZyIsKDAseS5jcmVhdGVEZWVwTGlua1BhdGgpKG4pXSxnPXIuaXNTaG93bihmLCJmdWxsIj09PV98fCJsaXN0Ij09PV8pO3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmc/Im9wYmxvY2stdGFnLXNlY3Rpb24gaXMtb3BlbiI6Im9wYmxvY2stdGFnLXNlY3Rpb24iLGtleToib3BlcmF0aW9uLSIrbn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0Iix7b25DbGljazpmdW5jdGlvbigpe3JldHVybiBvLnNob3coZiwhZyl9LGNsYXNzTmFtZTppPyJvcGJsb2NrLXRhZyI6Im9wYmxvY2stdGFnIG5vLWRlc2MiLGlkOmYuam9pbigiLSIpfSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHtlbmFibGVkOmgsaXNTaG93bjpnLHBhdGg6bix0ZXh0Om59KSxpP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzbWFsbCIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1LHtzb3VyY2U6aX0pKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic21hbGwiLG51bGwpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZD9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic21hbGwiLG51bGwsZCxwPyI6ICI6bnVsbCxwP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjooMCx5LnNhbml0aXplVXJsKShwKSxvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSx0YXJnZXQ6Il9ibGFuayJ9LHApOm51bGwpOm51bGwpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImV4cGFuZC1vcGVyYXRpb24iLHRpdGxlOmc/IkNvbGxhcHNlIG9wZXJhdGlvbiI6IkV4cGFuZCBvcGVyYXRpb24iLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gby5zaG93KGYsIWcpfX0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInN2ZyIse2NsYXNzTmFtZToiYXJyb3ciLHdpZHRoOiIyMCIsaGVpZ2h0OiIyMCJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1c2UiLHtocmVmOmc/IiNsYXJnZS1hcnJvdy1kb3duIjoiI2xhcmdlLWFycm93Iix4bGlua0hyZWY6Zz8iI2xhcmdlLWFycm93LWRvd24iOiIjbGFyZ2UtYXJyb3cifSkpKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobCx7aXNPcGVuZWQ6Z30scy5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXQoInBhdGgiKSxvPWUuZ2V0KCJtZXRob2QiKSxzPUUuZGVmYXVsdC5MaXN0KFsicGF0aHMiLHIsb10pO3JldHVybi0xPT09KHQuaXNPQVMzKCk/VDp2KS5pbmRleE9mKG8pP251bGw6bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYSx7a2V5OnIrIi0iK28sc3BlY1BhdGg6cyxvcDplLHBhdGg6cixtZXRob2Q6byx0YWc6bn0pfSkudG9BcnJheSgpKSl9KS50b0FycmF5KCksaS5zaXplPDE/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImgzIixudWxsLCIgTm8gb3BlcmF0aW9ucyBkZWZpbmVkIGluIHNwZWMhICIpOm51bGwpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTtBLnByb3BUeXBlcz17c3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY0FjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLG9hczNBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxsYXlvdXRTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGxheW91dEFjdGlvbnM6Zy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGF1dGhBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxhdXRoU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb25maWdzOmcuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LHQuZGVmYXVsdD1BLEEucHJvcFR5cGVzPXtsYXlvdXRBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbGF5b3V0U2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxmbjpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9wZXJhdGlvbkxpbms9dm9pZCAwO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9bigxMzgpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlOygwLGEuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4pLG89MDtvPG47bysrKXJbb109YXJndW1lbnRzW29dO3ZhciBpPSgwLGQuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQocikpKTtyZXR1cm4gaS5zZXRUYWdTaG93bj1pLl9zZXRUYWdTaG93bi5iaW5kKGkpLGl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiX3NldFRhZ1Nob3duIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucHJvcHMubGF5b3V0QWN0aW9ucy5zaG93KGUsdCl9fSx7a2V5OiJzaG93T3AiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5wcm9wcy5sYXlvdXRBY3Rpb25zLnNob3coZSx0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zcGVjU2VsZWN0b3JzLG49ZS5sYXlvdXRTZWxlY3RvcnMscj1lLmxheW91dEFjdGlvbnMsbz1lLmdldENvbXBvbmVudCxzPXQudGFnZ2VkT3BlcmF0aW9ucygpLGk9bygiQ29sbGFwc2UiKTtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6Im92ZXJ2aWV3LXRpdGxlIn0sIk92ZXJ2aWV3Iikscy5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbz1lLmdldCgib3BlcmF0aW9ucyIpLHM9WyJvdmVydmlldy10YWdzIix0XSxhPW4uaXNTaG93bihzLCEwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2hvdyhzLCFhKX07cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6Im92ZXJ2aWV3LSIrdH0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg0Iix7b25DbGljazpsLGNsYXNzTmFtZToibGluayBvdmVydmlldy10YWcifSwiICIsYT8iLSI6IisiLHQpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGkse2lzT3BlbmVkOmEsYW5pbWF0ZWQ6ITB9LG8ubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUudG9PYmplY3QoKSxvPXQucGF0aCxzPXQubWV0aG9kLGk9dC5pZCxhPWksbD1uLmlzU2hvd24oWyJvcGVyYXRpb25zIixhXSk7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHkse2tleTppLHBhdGg6byxtZXRob2Q6cyxpZDpvKyItIitzLHNob3duOmwsc2hvd09wSWQ6YSxzaG93T3BJZFByZWZpeDoib3BlcmF0aW9ucyIsaHJlZjoiI29wZXJhdGlvbi0iK2Esb25DbGljazpyLnNob3d9KX0pLnRvQXJyYXkoKSkpfSkudG9BcnJheSgpLHMuc2l6ZTwxJiZtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDMiLG51bGwsIiBObyBvcGVyYXRpb25zIGRlZmluZWQgaW4gc3BlYyEgIikpfX1dKSx0fShtLmRlZmF1bHQuQ29tcG9uZW50KTt0LmRlZmF1bHQ9RSxFLnByb3BUeXBlcz17bGF5b3V0U2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxsYXlvdXRBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH07dmFyIHk9dC5PcGVyYXRpb25MaW5rPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7KDAsYS5kZWZhdWx0KSh0aGlzLHQpO3ZhciBuPSgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIG4ub25DbGljaz1uLl9vbkNsaWNrLmJpbmQobiksbn1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJfb25DbGljayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaG93T3BJZCxuPWUuc2hvd09wSWRQcmVmaXg7KDAsZS5vbkNsaWNrKShbbix0XSwhZS5zaG93bil9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaWQsbj1lLm1ldGhvZCxyPWUuc2hvd24sbz1lLmhyZWY7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIuTGluayx7aHJlZjpvLHN0eWxlOntmb250V2VpZ2h0OnI/ImJvbGQiOiJub3JtYWwifSxvbkNsaWNrOnRoaXMub25DbGljayxjbGFzc05hbWU6ImJsb2NrIG9wYmxvY2stbGluayJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNtYWxsIix7Y2xhc3NOYW1lOiJib2xkLWxhYmVsLSIrbn0sbi50b1VwcGVyQ2FzZSgpKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiYm9sZC1sYWJlbCJ9LHQpKSl9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO3kucHJvcFR5cGVzPXtocmVmOmcuZGVmYXVsdC5zdHJpbmcsb25DbGljazpnLmRlZmF1bHQuZnVuYyxpZDpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsbWV0aG9kOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxzaG93bjpnLmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLHNob3dPcElkOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxzaG93T3BJZFByZWZpeDpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDQpLHM9cihvKSxpPW4oMiksYT1yKGkpLGw9bigzKSx1PXIobCksYz1uKDYpLGQ9cihjKSxfPW4oNSkscD1yKF8pLGY9bigwKSxtPXIoZiksaD1uKDEpLGc9cihoKSxiPW4oNyksRT1uKDgpLHk9RnVuY3Rpb24ucHJvdG90eXBlLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4peygwLGEuZGVmYXVsdCkodGhpcyx0KTt2YXIgcj0oMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSxuKSk7cmV0dXJuIFQuY2FsbChyKSxyLnN0YXRlPXtpc0VkaXRCb3g6ITEsdmFsdWU6IiJ9LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVWYWx1ZXMuY2FsbCh0aGlzLHRoaXMucHJvcHMpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVWYWx1ZXMuY2FsbCh0aGlzLGUpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsbj1lLm9uQ2hhbmdlQ29uc3VtZXMscj1lLnBhcmFtLG89ZS5pc0V4ZWN1dGUscz1lLnNwZWNTZWxlY3RvcnMsaT1lLnBhdGhNZXRob2QsYT1lLmdldENvbXBvbmVudCxsPWEoIkJ1dHRvbiIpLHU9YSgiVGV4dEFyZWEiKSxjPWEoImhpZ2hsaWdodENvZGUiKSxkPWEoImNvbnRlbnRUeXBlIiksXz1zP3MuZ2V0UGFyYW1ldGVyKGksci5nZXQoIm5hbWUiKSxyLmdldCgiaW4iKSk6cixwPV8uZ2V0KCJlcnJvcnMiLCgwLGIuTGlzdCkoKSksZj1zLmNvbnRlbnRUeXBlVmFsdWVzKGkpLmdldCgicmVxdWVzdENvbnRlbnRUeXBlIiksaD10aGlzLnByb3BzLmNvbnN1bWVzJiZ0aGlzLnByb3BzLmNvbnN1bWVzLnNpemU/dGhpcy5wcm9wcy5jb25zdW1lczp0LmRlZmF1bHRQcm9wLmNvbnN1bWVzLGc9dGhpcy5zdGF0ZSxFPWcudmFsdWUseT1nLmlzRWRpdEJveDtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYm9keS1wYXJhbSJ9LHkmJm8/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodSx7Y2xhc3NOYW1lOiJib2R5LXBhcmFtX190ZXh0IisocC5jb3VudCgpPyIgaW52YWxpZCI6IiIpLHZhbHVlOkUsb25DaGFuZ2U6dGhpcy5oYW5kbGVPbkNoYW5nZX0pOkUmJm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse2NsYXNzTmFtZToiYm9keS1wYXJhbV9fZXhhbXBsZSIsdmFsdWU6RX0pLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJvZHktcGFyYW0tb3B0aW9ucyJ9LG8/bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYm9keS1wYXJhbS1lZGl0In0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobCx7Y2xhc3NOYW1lOnk/ImJ0biBjYW5jZWwgYm9keS1wYXJhbV9fZXhhbXBsZS1lZGl0IjoiYnRuIGVkaXQgYm9keS1wYXJhbV9fZXhhbXBsZS1lZGl0IixvbkNsaWNrOnRoaXMudG9nZ2xlSXNFZGl0Qm94fSx5PyJDYW5jZWwiOiJFZGl0IikpOm51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIix7aHRtbEZvcjoiIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIlBhcmFtZXRlciBjb250ZW50IHR5cGUiKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkLHt2YWx1ZTpmLGNvbnRlbnRUeXBlczpoLG9uQ2hhbmdlOm4sY2xhc3NOYW1lOiJib2R5LXBhcmFtLWNvbnRlbnQtdHlwZSJ9KSkpKX19XSksdH0oZi5QdXJlQ29tcG9uZW50KTt2LnByb3BUeXBlcz17cGFyYW06Zy5kZWZhdWx0Lm9iamVjdCxvbkNoYW5nZTpnLmRlZmF1bHQuZnVuYyxvbkNoYW5nZUNvbnN1bWVzOmcuZGVmYXVsdC5mdW5jLGNvbnN1bWVzOmcuZGVmYXVsdC5vYmplY3QsY29uc3VtZXNWYWx1ZTpnLmRlZmF1bHQuc3RyaW5nLGZuOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpc0V4ZWN1dGU6Zy5kZWZhdWx0LmJvb2wsc3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQscGF0aE1ldGhvZDpnLmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZH0sdi5kZWZhdWx0UHJvcD17Y29uc3VtZXM6KDAsYi5mcm9tSlMpKFsiYXBwbGljYXRpb24vanNvbiJdKSxwYXJhbTooMCxiLmZyb21KUykoe30pLG9uQ2hhbmdlOnksb25DaGFuZ2VDb25zdW1lczp5fTt2YXIgVD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51cGRhdGVWYWx1ZXM9ZnVuY3Rpb24odCl7dmFyIG49dC5zcGVjU2VsZWN0b3JzLHI9dC5wYXRoTWV0aG9kLG89dC5wYXJhbSxzPXQuaXNFeGVjdXRlLGk9dC5jb25zdW1lc1ZhbHVlLGE9dm9pZCAwPT09aT8iIjppLGw9bj9uLmdldFBhcmFtZXRlcihyLG8uZ2V0KCJuYW1lIiksby5nZXQoImluIikpOigwLGIuZnJvbUpTKSh7fSksdT0veG1sL2kudGVzdChhKSxjPS9qc29uL2kudGVzdChhKSxkPXU/bC5nZXQoInZhbHVlX3htbCIpOmwuZ2V0KCJ2YWx1ZSIpO2lmKHZvaWQgMCE9PWQpe3ZhciBfPSFkJiZjPyJ7fSI6ZDtlLnNldFN0YXRlKHt2YWx1ZTpffSksZS5vbkNoYW5nZShfLHtpc1htbDp1LGlzRWRpdEJveDpzfSl9ZWxzZSB1P2Uub25DaGFuZ2UoZS5zYW1wbGUoInhtbCIpLHtpc1htbDp1LGlzRWRpdEJveDpzfSk6ZS5vbkNoYW5nZShlLnNhbXBsZSgpLHtpc0VkaXRCb3g6c30pfSx0aGlzLnNhbXBsZT1mdW5jdGlvbih0KXt2YXIgbj1lLnByb3BzLHI9bi5wYXJhbSxvPW4uZm4uaW5mZXJTY2hlbWEscz1vKHIudG9KUygpKTtyZXR1cm4oMCxFLmdldFNhbXBsZVNjaGVtYSkocyx0LHtpbmNsdWRlV3JpdGVPbmx5OiEwfSl9LHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uLmlzRWRpdEJveCxvPW4uaXNYbWw7ZS5zZXRTdGF0ZSh7dmFsdWU6dCxpc0VkaXRCb3g6cn0pLGUuX29uQ2hhbmdlKHQsbyl9LHRoaXMuX29uQ2hhbmdlPWZ1bmN0aW9uKHQsbil7KGUucHJvcHMub25DaGFuZ2V8fHkpKGUucHJvcHMucGFyYW0sdCxuKX0sdGhpcy5oYW5kbGVPbkNoYW5nZT1mdW5jdGlvbih0KXt2YXIgbj1lLnByb3BzLmNvbnN1bWVzVmFsdWUscj0vanNvbi9pLnRlc3Qobiksbz0veG1sL2kudGVzdChuKSxzPXI/dC50YXJnZXQudmFsdWUudHJpbSgpOnQudGFyZ2V0LnZhbHVlO2Uub25DaGFuZ2Uocyx7aXNYbWw6b30pfSx0aGlzLnRvZ2dsZUlzRWRpdEJveD1mdW5jdGlvbigpe3JldHVybiBlLnNldFN0YXRlKGZ1bmN0aW9uKGUpe3JldHVybntpc0VkaXRCb3g6IWUuaXNFZGl0Qm94fX0pfX07dC5kZWZhdWx0PXZ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyYW1ldGVyRXh0PXZvaWQgMDt2YXIgbz1uKDApLHM9cihvKSxpPW4oMSksYT1yKGkpLGw9dC5QYXJhbWV0ZXJFeHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54S2V5LG49ZS54VmFsO3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwYXJhbWV0ZXJfX2V4dGVuc2lvbiJ9LHQsIjogIixTdHJpbmcobikpfTtsLnByb3BUeXBlcz17eEtleTphLmRlZmF1bHQuc3RyaW5nLHhWYWw6YS5kZWZhdWx0LmFueX0sdC5kZWZhdWx0PWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oNyksZz1uKDEpLGI9cihnKSxFPW4oOSkseT1yKEUpLHY9bigyNyksVD1yKHYpLEE9big4KSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCxhLmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAsZC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAscy5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO08uY2FsbChyKTt2YXIgbz1lLnNwZWNTZWxlY3RvcnMsaT1lLnBhdGhNZXRob2QsbD1lLnBhcmFtLHU9bC5nZXQoImRlZmF1bHQiKSxjPW8uZ2V0UGFyYW1ldGVyKGksbC5nZXQoIm5hbWUiKSxsLmdldCgiaW4iKSksXz1jP2MuZ2V0KCJ2YWx1ZSIpOiIiO3JldHVybiB2b2lkIDAhPT11JiZ2b2lkIDA9PT1fJiZyLm9uQ2hhbmdlV3JhcHBlcih1KSxyfXJldHVybigwLHAuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BlY1NlbGVjdG9ycyxuPWUucGF0aE1ldGhvZCxyPWUucGFyYW0sbz10LmlzT0FTMyxzPXIuZ2V0KCJleGFtcGxlIiksaT1yLmdldCgiZGVmYXVsdCIpLGE9dC5nZXRQYXJhbWV0ZXIobixyLmdldCgibmFtZSIpLHIuZ2V0KCJpbiIpKSxsPXZvaWQgMDtsPW8oKT8oci5nZXQoInNjaGVtYSIpfHwoMCxoLk1hcCkoKSkuZ2V0KCJlbnVtIik6YT9hLmdldCgiZW51bSIpOnZvaWQgMDt2YXIgdT1hP2EuZ2V0KCJ2YWx1ZSIpOnZvaWQgMCxjPXZvaWQgMDt2b2lkIDAhPT11P2M9dTp2b2lkIDAhPT1zP2M9czp2b2lkIDAhPT1pP2M9aTpyLmdldCgicmVxdWlyZWQiKSYmbCYmbC5zaXplJiYoYz1sLmZpcnN0KCkpLHZvaWQgMCE9PWMmJnRoaXMub25DaGFuZ2VXcmFwcGVyKGMpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBhcmFtLG49ZS5vbkNoYW5nZSxyPWUuZ2V0Q29tcG9uZW50LG89ZS5nZXRDb25maWdzLHM9ZS5pc0V4ZWN1dGUsaT1lLmZuLGE9ZS5vbkNoYW5nZUNvbnN1bWVzLGw9ZS5zcGVjU2VsZWN0b3JzLHU9ZS5wYXRoTWV0aG9kLGM9ZS5zcGVjUGF0aCxkPWwuaXNPQVMzLF89bygpLHA9Xy5zaG93RXh0ZW5zaW9ucyxmPXIoIkpzb25TY2hlbWFGb3JtIiksaD1yKCJQYXJhbUJvZHkiKSxnPXQuZ2V0KCJpbiIpLGI9ImJvZHkiIT09Zz9udWxsOm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGgse2dldENvbXBvbmVudDpyLGZuOmkscGFyYW06dCxjb25zdW1lczpsLm9wZXJhdGlvbkNvbnN1bWVzKHUpLGNvbnN1bWVzVmFsdWU6bC5jb250ZW50VHlwZVZhbHVlcyh1KS5nZXQoInJlcXVlc3RDb250ZW50VHlwZSIpLG9uQ2hhbmdlOm4sb25DaGFuZ2VDb25zdW1lczphLGlzRXhlY3V0ZTpzLHNwZWNTZWxlY3RvcnM6bCxwYXRoTWV0aG9kOnV9KSxFPXIoIm1vZGVsRXhhbXBsZSIpLHk9cigiTWFya2Rvd24iKSx2PXIoIlBhcmFtZXRlckV4dCIpLEM9dC5nZXQoInNjaGVtYSIpLE89ZCYmZCgpP3QuZ2V0SW4oWyJzY2hlbWEiLCJ0eXBlIl0pOnQuZ2V0KCJ0eXBlIiksUz0iZm9ybURhdGEiPT09ZyxSPSJGb3JtRGF0YSJpbiBULmRlZmF1bHQsaj10LmdldCgicmVxdWlyZWQiKSx4PXQuZ2V0SW4oZCYmZCgpP1sic2NoZW1hIiwiaXRlbXMiLCJ0eXBlIl06WyJpdGVtcyIsInR5cGUiXSksTD1sLmdldFBhcmFtZXRlcih1LHQuZ2V0KCJuYW1lIiksdC5nZXQoImluIikpLEQ9TD9MLmdldCgidmFsdWUiKToiIix3PSgwLEEuZ2V0RXh0ZW5zaW9ucykodCksTT12b2lkIDAsaz12b2lkIDAsST0hMTt2b2lkIDAhPT10JiYoTT10LmdldCgiaXRlbXMiKSksdm9pZCAwIT09TSYmKGs9dC5nZXQoIml0ZW1zIikuZ2V0KCJlbnVtIikpLHZvaWQgMCE9PWsmJmsuc2l6ZT4wJiYoST0hMCk7dmFyIFA9dm9pZCAwLE49dm9pZCAwO3JldHVybiB2b2lkIDAhPT10JiYoUD10LmdldCgiZGVmYXVsdCIpLE49dC5nZXQoImV4YW1wbGUiKSksSSYmKFA9TS5nZXQoImRlZmF1bHQiKSksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIixudWxsLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIHBhcmFtZXRlcnMtY29sX25hbWUifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmo/InBhcmFtZXRlcl9fbmFtZSByZXF1aXJlZCI6InBhcmFtZXRlcl9fbmFtZSJ9LHQuZ2V0KCJuYW1lIiksaj9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOntjb2xvcjoicmVkIn19LCLCoCoiKTpudWxsKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwYXJhbWV0ZXJfX3R5cGUifSxPLCIgIix4JiYiWyIreCsiXSIpLG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InBhcmFtZXRlcl9fZGVwcmVjYXRlZCJ9LGQmJmQoKSYmdC5nZXQoImRlcHJlY2F0ZWQiKT8iZGVwcmVjYXRlZCI6bnVsbCksbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicGFyYW1ldGVyX19pbiJ9LCIoIix0LmdldCgiaW4iKSwiKSIpLHAmJncuc2l6ZT93Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh2LHtrZXk6dCsiLSIrZSx4S2V5OnQseFZhbDplfSl9KTpudWxsKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLHtjbGFzc05hbWU6ImNvbCBwYXJhbWV0ZXJzLWNvbF9kZXNjcmlwdGlvbiJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHkse3NvdXJjZTp0LmdldCgiZGVzY3JpcHRpb24iKX0pLCFiJiZzfHwhST9udWxsOm0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHkse3NvdXJjZToiPGk+QXZhaWxhYmxlIHZhbHVlczwvaT46ICIray5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS50b0FycmF5KCkuam9pbigiLCAiKX0pLCFiJiZzfHx2b2lkIDA9PT1QP251bGw6bS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeSx7c291cmNlOiI8aT5EZWZhdWx0IHZhbHVlPC9pPjogIitQfSksIWImJnN8fHZvaWQgMD09PU4/bnVsbDptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LHtzb3VyY2U6IjxpPkV4YW1wbGU8L2k+OiAiK059KSxTJiYhUiYmbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCwiRXJyb3I6IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IEZvcm1EYXRhIiksYnx8IXM/bnVsbDptLmRlZmF1bHQuY3JlYXRlRWxlbWVudChmLHtmbjppLGdldENvbXBvbmVudDpyLHZhbHVlOkQscmVxdWlyZWQ6aixkZXNjcmlwdGlvbjp0LmdldCgiZGVzY3JpcHRpb24iKT90LmdldCgibmFtZSIpKyIgLSAiK3QuZ2V0KCJkZXNjcmlwdGlvbiIpOiIiK3QuZ2V0KCJuYW1lIiksb25DaGFuZ2U6dGhpcy5vbkNoYW5nZVdyYXBwZXIsZXJyb3JzOnQuZ2V0KCJlcnJvcnMiKSxzY2hlbWE6ZCYmZCgpP3QuZ2V0KCJzY2hlbWEiKTp0fSksYiYmQz9tLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFLHtnZXRDb21wb25lbnQ6cixzcGVjUGF0aDpjLnB1c2goInNjaGVtYSIpLGdldENvbmZpZ3M6byxpc0V4ZWN1dGU6cyxzcGVjU2VsZWN0b3JzOmwsc2NoZW1hOkMsZXhhbXBsZTpifSk6bnVsbCkpfX1dKSx0fShmLkNvbXBvbmVudCk7Qy5wcm9wVHlwZXM9e29uQ2hhbmdlOmIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQscGFyYW06Yi5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGdldENvbXBvbmVudDpiLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGZuOmIuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxpc0V4ZWN1dGU6Yi5kZWZhdWx0LmJvb2wsb25DaGFuZ2VDb25zdW1lczpiLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6Yi5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHBhdGhNZXRob2Q6Yi5kZWZhdWx0LmFycmF5LmlzUmVxdWlyZWQsZ2V0Q29uZmlnczpiLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNQYXRoOnkuZGVmYXVsdC5saXN0LmlzUmVxdWlyZWR9O3ZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgbj1lLnByb3BzO3JldHVybigwLG4ub25DaGFuZ2UpKG4ucGFyYW0sdCl9fTt0LmRlZmF1bHQ9Q30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1uKDkpLEU9cihiKSx5PW4oNyksdj1yKHkpLFQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZVNlcSgpLmZpbHRlcih2LmRlZmF1bHQuTWFwLmlzTWFwKS5tYXAodCl9LEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGEuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxsPUFycmF5KGkpLHU9MDt1PGk7dSsrKWxbdV09YXJndW1lbnRzW3VdO3JldHVybiBuPXI9KDAsZC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChsKSkpLHIub25DaGFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXIucHJvcHM7KDAsby5zcGVjQWN0aW9ucy5jaGFuZ2VQYXJhbSkoby5vbkNoYW5nZUtleSxlLmdldCgibmFtZSIpLGUuZ2V0KCJpbiIpLHQsbil9LHIub25DaGFuZ2VDb25zdW1lc1dyYXBwZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wczsoMCx0LnNwZWNBY3Rpb25zLmNoYW5nZUNvbnN1bWVzVmFsdWUpKHQub25DaGFuZ2VLZXksZSl9LG89biwoMCxkLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5vblRyeW91dENsaWNrLHI9dC5vbkNhbmNlbENsaWNrLG89dC5wYXJhbWV0ZXJzLHM9dC5hbGxvd1RyeUl0T3V0LGk9dC50cnlJdE91dEVuYWJsZWQsYT10LnNwZWNQYXRoLGw9dC5mbix1PXQuZ2V0Q29tcG9uZW50LGM9dC5nZXRDb25maWdzLGQ9dC5zcGVjU2VsZWN0b3JzLF89dC5wYXRoTWV0aG9kLHA9dSgicGFyYW1ldGVyUm93IiksZj11KCJUcnlJdE91dEJ1dHRvbiIpLGg9aSYmcztyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uIn0sbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uLWhlYWRlciJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InRhYi1oZWFkZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLHtjbGFzc05hbWU6Im9wYmxvY2stdGl0bGUifSwiUGFyYW1ldGVycyIpKSxzP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYse2VuYWJsZWQ6aSxvbkNhbmNlbENsaWNrOnIsb25UcnlvdXRDbGljazpufSk6bnVsbCksby5jb3VudCgpP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InRhYmxlLWNvbnRhaW5lciJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIse2NsYXNzTmFtZToicGFyYW1ldGVycyJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIsbnVsbCxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidHIiLG51bGwsbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoIix7Y2xhc3NOYW1lOiJjb2wgY29sX2hlYWRlciBwYXJhbWV0ZXJzLWNvbF9uYW1lIn0sIk5hbWUiKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGgiLHtjbGFzc05hbWU6ImNvbCBjb2xfaGVhZGVyIHBhcmFtZXRlcnMtY29sX2Rlc2NyaXB0aW9uIn0sIkRlc2NyaXB0aW9uIikpKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGJvZHkiLG51bGwsVChvLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHAse2ZuOmwsc3BlY1BhdGg6YS5wdXNoKG4udG9TdHJpbmcoKSksZ2V0Q29tcG9uZW50OnUsZ2V0Q29uZmlnczpjLHBhcmFtOnQsa2V5OnQuZ2V0KCJpbiIpKyIuIit0LmdldCgibmFtZSIpLG9uQ2hhbmdlOmUub25DaGFuZ2Usb25DaGFuZ2VDb25zdW1lczplLm9uQ2hhbmdlQ29uc3VtZXNXcmFwcGVyLHNwZWNTZWxlY3RvcnM6ZCxwYXRoTWV0aG9kOl8saXNFeGVjdXRlOmh9KX0pLnRvQXJyYXkoKSkpKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJvcGJsb2NrLWRlc2NyaXB0aW9uLXdyYXBwZXIifSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCwiTm8gcGFyYW1ldGVycyIpKSl9fV0pLHR9KGYuQ29tcG9uZW50KTtBLnByb3BUeXBlcz17cGFyYW1ldGVyczpFLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLHNwZWNBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxmbjpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdHJ5SXRPdXRFbmFibGVkOmcuZGVmYXVsdC5ib29sLGFsbG93VHJ5SXRPdXQ6Zy5kZWZhdWx0LmJvb2wsb25UcnlvdXRDbGljazpnLmRlZmF1bHQuZnVuYyxvbkNhbmNlbENsaWNrOmcuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlS2V5OmcuZGVmYXVsdC5hcnJheSxwYXRoTWV0aG9kOmcuZGVmYXVsdC5hcnJheS5pc1JlcXVpcmVkLGdldENvbmZpZ3M6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjUGF0aDpFLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkfSxBLmRlZmF1bHRQcm9wcz17b25UcnlvdXRDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsb25DYW5jZWxDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsdHJ5SXRPdXRFbmFibGVkOiExLGFsbG93VHJ5SXRPdXQ6ITAsb25DaGFuZ2VLZXk6W10sc3BlY1BhdGg6W119LHQuZGVmYXVsdD1BfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDExKSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDEpLEU9cihiKSx5PW4oOCksdj17Y29sb3I6IiM2YjZiNmIiLGZvbnRTdHlsZToiaXRhbGljIn0sVD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsdS5kZWZhdWx0KSh0aGlzLHQpLCgwLHAuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNjaGVtYSxuPWUuZ2V0Q29tcG9uZW50LHI9ZS5nZXRDb25maWdzLG89ZS5uYW1lLGk9ZS5kZXB0aCxhPXIoKSxsPWEuc2hvd0V4dGVuc2lvbnM7aWYoIXR8fCF0LmdldClyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCk7dmFyIHU9dC5nZXQoInR5cGUiKSxjPXQuZ2V0KCJmb3JtYXQiKSxkPXQuZ2V0KCJ4bWwiKSxfPXQuZ2V0KCJlbnVtIikscD10LmdldCgidGl0bGUiKXx8byxmPXQuZ2V0KCJkZXNjcmlwdGlvbiIpLG09KDAseS5nZXRFeHRlbnNpb25zKSh0KSxoPXQuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT1bImVudW0iLCJ0eXBlIiwiZm9ybWF0IiwiZGVzY3JpcHRpb24iLCIkJHJlZiJdLmluZGV4T2YodCl9KS5maWx0ZXJOb3QoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbS5oYXModCl9KSxiPW4oIk1hcmtkb3duIiksRT1uKCJFbnVtTW9kZWwiKSxUPW4oIlByb3BlcnR5Iik7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJtb2RlbCJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJwcm9wIn0sbyYmZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6KDE9PT1pJiYibW9kZWwtdGl0bGUiKSsiIHByb3AtbmFtZSJ9LHApLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJwcm9wLXR5cGUifSx1KSxjJiZnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicHJvcC1mb3JtYXQifSwiKCQiLGMsIikiKSxoLnNpemU/aC5lbnRyeVNlcSgpLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCxzLmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVCx7a2V5Om4rIi0iK3IscHJvcEtleTpuLHByb3BWYWw6cixwcm9wU3R5bGU6dn0pfSk6bnVsbCxsJiZtLnNpemU/bS5lbnRyeVNlcSgpLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCxzLmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVCx7a2V5Om4rIi0iK3IscHJvcEtleTpuLHByb3BWYWw6cixwcm9wU3R5bGU6dn0pfSk6bnVsbCxmP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIse3NvdXJjZTpmfSk6bnVsbCxkJiZkLnNpemU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJyIixudWxsKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOnZ9LCJ4bWw6IiksZC5lbnRyeVNlcSgpLm1hcChmdW5jdGlvbihlKXt2YXIgdD0oMCxzLmRlZmF1bHQpKGUsMiksbj10WzBdLHI9dFsxXTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtrZXk6bisiLSIrcixzdHlsZTp2fSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnIiLG51bGwpLCLCoMKgwqAiLG4sIjogIixTdHJpbmcocikpfSkudG9BcnJheSgpKTpudWxsLF8mJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEUse3ZhbHVlOl8sZ2V0Q29tcG9uZW50Om59KSkpfX1dKSx0fShoLkNvbXBvbmVudCk7VC5wcm9wVHlwZXM9e3NjaGVtYTpFLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Q29uZmlnczpFLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG5hbWU6RS5kZWZhdWx0LnN0cmluZyxkZXB0aDpFLmRlZmF1bHQubnVtYmVyfSx0LmRlZmF1bHQ9VH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9wZXJ0eT12b2lkIDA7dmFyIG89bigwKSxzPXIobyksaT1uKDEpLGE9cihpKSxsPXQuUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcm9wS2V5LG49ZS5wcm9wVmFsLHI9ZS5wcm9wU3R5bGU7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7c3R5bGU6cn0scy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJyIixudWxsKSx0LCI6ICIsU3RyaW5nKG4pKX07bC5wcm9wVHlwZXM9e3Byb3BLZXk6YS5kZWZhdWx0LnN0cmluZyxwcm9wVmFsOmEuZGVmYXVsdC5hbnkscHJvcFN0eWxlOmEuZGVmYXVsdC5vYmplY3R9LHQuZGVmYXVsdD1sfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKDI0KSxzPXIobyksaT1uKDQpLGE9cihpKSxsPW4oMiksdT1yKGwpLGM9bigzKSxkPXIoYyksXz1uKDYpLHA9cihfKSxmPW4oNSksbT1yKGYpLGg9bigwKSxnPXIoaCksYj1uKDEpLEU9cihiKSx5PW4oNTk2KSx2PXIoeSksVD1uKDU2NCksQT1yKFQpLEM9big4KSxPPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHRoaXMsdCksKDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY29udGVudCxuPWUuY29udGVudFR5cGUscj1lLnVybCxvPWUuaGVhZGVycyxpPXZvaWQgMD09PW8/e306byxhPWUuZ2V0Q29tcG9uZW50LGw9YSgiaGlnaGxpZ2h0Q29kZSIpLHU9dm9pZCAwLGM9dm9pZCAwO2lmKHI9cnx8IiIsL15hcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtL2kudGVzdChuKXx8aVsiQ29udGVudC1EaXNwb3NpdGlvbiJdJiYvYXR0YWNobWVudC9pLnRlc3QoaVsiQ29udGVudC1EaXNwb3NpdGlvbiJdKXx8aVsiY29udGVudC1kaXNwb3NpdGlvbiJdJiYvYXR0YWNobWVudC9pLnRlc3QoaVsiY29udGVudC1kaXNwb3NpdGlvbiJdKXx8aVsiQ29udGVudC1EZXNjcmlwdGlvbiJdJiYvRmlsZSBUcmFuc2Zlci9pLnRlc3QoaVsiQ29udGVudC1EZXNjcmlwdGlvbiJdKXx8aVsiY29udGVudC1kZXNjcmlwdGlvbiJdJiYvRmlsZSBUcmFuc2Zlci9pLnRlc3QoaVsiY29udGVudC1kZXNjcmlwdGlvbiJdKSlpZighL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIkJsb2IiaW4gd2luZG93KXt2YXIgZD1ufHwidGV4dC9odG1sIixfPXQgaW5zdGFuY2VvZiBCbG9iP3Q6bmV3IEJsb2IoW3RdLHt0eXBlOmR9KSxwPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKF8pLGY9ci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLyIpKzEpLG09W2QsZixwXS5qb2luKCI6IiksaD1pWyJjb250ZW50LWRpc3Bvc2l0aW9uIl18fGlbIkNvbnRlbnQtRGlzcG9zaXRpb24iXTtpZih2b2lkIDAhPT1oKXt2YXIgYj0oMCxDLmV4dHJhY3RGaWxlTmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXIpKGgpO251bGwhPT1iJiYobT1iKX1jPWcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOnAsZG93bmxvYWQ6bX0sIkRvd25sb2FkIGZpbGUiKSl9ZWxzZSBjPWcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwcmUiLG51bGwsIkRvd25sb2FkIGhlYWRlcnMgZGV0ZWN0ZWQgYnV0IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGJpbmFyeSB2aWEgWEhSIChCbG9iKS4iKTtlbHNlIGlmKC9qc29uL2kudGVzdChuKSl7dHJ5e3U9KDAscy5kZWZhdWx0KShKU09OLnBhcnNlKHQpLG51bGwsIiAgIil9Y2F0Y2goZSl7dT0iY2FuJ3QgcGFyc2UgSlNPTi4gIFJhdyByZXN1bHQ6XG5cbiIrdH1jPWcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse3ZhbHVlOnV9KX1lbHNlL3htbC9pLnRlc3Qobik/KHU9KDAsdi5kZWZhdWx0KSh0LHt0ZXh0Tm9kZXNPblNhbWVMaW5lOiEwLGluZGVudG9yOiIgICJ9KSxjPWcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse3ZhbHVlOnV9KSk6Yz0idGV4dC9odG1sIj09PSgwLEEuZGVmYXVsdCkobil8fC90ZXh0XC9wbGFpbi8udGVzdChuKT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLHt2YWx1ZTp0fSk6L15pbWFnZVwvL2kudGVzdChuKT9uLmluY2x1ZGVzKCJzdmciKT9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLCIgIix0LCIgIik6Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse3N0eWxlOnttYXhXaWR0aDoiMTAwJSJ9LHNyYzp3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh0KX0pOi9eYXVkaW9cLy9pLnRlc3Qobik/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInByZSIsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYXVkaW8iLHtjb250cm9sczohMH0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIse3NyYzpyLHR5cGU6bn0pKSk6InN0cmluZyI9PXR5cGVvZiB0P2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwse3ZhbHVlOnR9KTp0LnNpemU+MD9nLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLCJVbmtub3duIHJlc3BvbnNlIHR5cGUiKTpudWxsO3JldHVybiBjP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg1IixudWxsLCJSZXNwb25zZSBib2R5IiksYyk6bnVsbH19XSksdH0oZy5kZWZhdWx0LkNvbXBvbmVudCk7Ty5wcm9wVHlwZXM9e2NvbnRlbnQ6RS5kZWZhdWx0LmFueS5pc1JlcXVpcmVkLGNvbnRlbnRUeXBlOkUuZGVmYXVsdC5zdHJpbmcsZ2V0Q29tcG9uZW50OkUuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsaGVhZGVyczpFLmRlZmF1bHQub2JqZWN0LHVybDpFLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9T30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMjQpLG09cihmKSxoPW4oMTEpLGc9cihoKSxiPW4oMCksRT1yKGIpLHk9bigxKSx2PXIoeSksVD1uKDkpLEE9cihUKSxDPW4oNTc5KSxPPXIoQyksUz1uKDcpLFI9big4KSxqPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmdC5zaXplP3QuZW50cnlTZXEoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZy5kZWZhdWx0KShlLDIpLHI9dFswXSxvPXRbMV0scz1vO2lmKG8udG9KUyl0cnl7cz0oMCxtLmRlZmF1bHQpKG8udG9KUygpLG51bGwsMil9Y2F0Y2goZSl7cz1TdHJpbmcobyl9cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6cn0sRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImg1IixudWxsLHIpLEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KG4se2NsYXNzTmFtZToiZXhhbXBsZSIsdmFsdWU6c30pKX0pLnRvQXJyYXkoKTplP0UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobix7Y2xhc3NOYW1lOiJleGFtcGxlIix2YWx1ZTplfSkpOm51bGx9LHg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4peygwLGEuZGVmYXVsdCkodGhpcyx0KTt2YXIgcj0oMCxkLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxzLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSxuKSk7cmV0dXJuIHIuX29uQ29udGVudFR5cGVDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcyxuPXQub25Db250ZW50VHlwZUNoYW5nZSxvPXQuY29udHJvbHNBY2NlcHRIZWFkZXI7ci5zZXRTdGF0ZSh7cmVzcG9uc2VDb250ZW50VHlwZTplfSksbih7dmFsdWU6ZSxjb250cm9sc0FjY2VwdEhlYWRlcjpvfSl9LHIuc3RhdGU9e3Jlc3BvbnNlQ29udGVudFR5cGU6IiJ9LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQsbixyPXRoaXMucHJvcHMsbz1yLmNvZGUscz1yLnJlc3BvbnNlLGk9ci5jbGFzc05hbWUsYT1yLnNwZWNQYXRoLGw9ci5mbix1PXIuZ2V0Q29tcG9uZW50LGM9ci5nZXRDb25maWdzLGQ9ci5zcGVjU2VsZWN0b3JzLF89ci5jb250ZW50VHlwZSxwPXIuY29udHJvbHNBY2NlcHRIZWFkZXIsZj1sLmluZmVyU2NoZW1hLG09ZC5pc09BUzMsaD1zLmdldCgiaGVhZGVycyIpLGc9cy5nZXQoImV4YW1wbGVzIiksYj1zLmdldCgibGlua3MiKSx5PXUoImhlYWRlcnMiKSx2PXUoImhpZ2hsaWdodENvZGUiKSxUPXUoIm1vZGVsRXhhbXBsZSIpLEE9dSgiTWFya2Rvd24iKSxDPXUoIm9wZXJhdGlvbkxpbmsiKSx4PXUoImNvbnRlbnRUeXBlIik7aWYobSgpKXt2YXIgTD0oMCxTLkxpc3QpKFsiY29udGVudCIsdGhpcy5zdGF0ZS5yZXNwb25zZUNvbnRlbnRUeXBlLCJzY2hlbWEiXSksRD1zLmdldEluKEwpO2U9RD8oMCxSLmdldFNhbXBsZVNjaGVtYSkoRC50b0pTKCksdGhpcy5zdGF0ZS5yZXNwb25zZUNvbnRlbnRUeXBlLHtpbmNsdWRlUmVhZE9ubHk6ITB9KTpudWxsLHQ9RD9mKEQudG9KUygpKTpudWxsLG49RD9MOmF9ZWxzZSB0PWYocy50b0pTKCkpLG49cy5oYXMoInNjaGVtYSIpP2EucHVzaCgic2NoZW1hIik6YSxlPXQ/KDAsUi5nZXRTYW1wbGVTY2hlbWEpKHQsXyx7aW5jbHVkZVJlYWRPbmx5OiEwLGluY2x1ZGVXcml0ZU9ubHk6ITB9KTpudWxsO2cmJihnPWcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldD9lLnNldCgiJCRyZWYiLHZvaWQgMCk6ZX0pKTt2YXIgdz1qKGUsZyx2KTtyZXR1cm4gRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRyIix7Y2xhc3NOYW1lOiJyZXNwb25zZSAiKyhpfHwiIil9LEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIHJlc3BvbnNlLWNvbF9zdGF0dXMifSxvKSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGQiLHtjbGFzc05hbWU6ImNvbCByZXNwb25zZS1jb2xfZGVzY3JpcHRpb24ifSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZXNwb25zZS1jb2xfZGVzY3JpcHRpb25fX2lubmVyIn0sRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQSx7c291cmNlOnMuZ2V0KCJkZXNjcmlwdGlvbiIpfSkpLG0/RS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTooMCxPLmRlZmF1bHQpKCJyZXNwb25zZS1jb250ZW50LXR5cGUiLHsiY29udHJvbHMtYWNjZXB0LWhlYWRlciI6cH0pfSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LHt2YWx1ZTp0aGlzLnN0YXRlLnJlc3BvbnNlQ29udGVudFR5cGUsY29udGVudFR5cGVzOnMuZ2V0KCJjb250ZW50Iik/cy5nZXQoImNvbnRlbnQiKS5rZXlTZXEoKTooMCxTLlNlcSkoKSxvbkNoYW5nZTp0aGlzLl9vbkNvbnRlbnRUeXBlQ2hhbmdlfSkscD9FLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic21hbGwiLG51bGwsIkNvbnRyb2xzICIsRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImNvZGUiLG51bGwsIkFjY2VwdCIpLCIgaGVhZGVyLiIpOm51bGwpOm51bGwsdz9FLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULHtzcGVjUGF0aDpuLGdldENvbXBvbmVudDp1LGdldENvbmZpZ3M6YyxzcGVjU2VsZWN0b3JzOmQsc2NoZW1hOigwLFIuZnJvbUpTT3JkZXJlZCkodCksZXhhbXBsZTp3fSk6bnVsbCxoP0UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHkse2hlYWRlcnM6aCxnZXRDb21wb25lbnQ6dX0pOm51bGwpLGQuaXNPQVMzKCk/RS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7Y2xhc3NOYW1lOiJjb2wgcmVzcG9uc2UtY29sX2xpbmtzIn0sYj9iLnRvU2VxKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMse2tleTp0LG5hbWU6dCxsaW5rOmUsZ2V0Q29tcG9uZW50OnV9KX0pOkUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIixudWxsLCJObyBsaW5rcyIpKTpudWxsKX19XSksdH0oRS5kZWZhdWx0LkNvbXBvbmVudCk7eC5wcm9wVHlwZXM9e2NvZGU6di5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHJlc3BvbnNlOnYuZGVmYXVsdC5pbnN0YW5jZU9mKFMuSXRlcmFibGUpLGNsYXNzTmFtZTp2LmRlZmF1bHQuc3RyaW5nLGdldENvbXBvbmVudDp2LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldENvbmZpZ3M6di5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzcGVjU2VsZWN0b3JzOnYuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxzcGVjUGF0aDpBLmRlZmF1bHQubGlzdC5pc1JlcXVpcmVkLGZuOnYuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjb250ZW50VHlwZTp2LmRlZmF1bHQuc3RyaW5nLGNvbnRyb2xzQWNjZXB0SGVhZGVyOnYuZGVmYXVsdC5ib29sLG9uQ29udGVudFR5cGVDaGFuZ2U6di5kZWZhdWx0LmZ1bmN9LHguZGVmYXVsdFByb3BzPXtyZXNwb25zZTooMCxTLmZyb21KUykoe30pLG9uQ29udGVudFR5cGVDaGFuZ2U6ZnVuY3Rpb24oKXt9fSx0LmRlZmF1bHQ9eH0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bigxMSkscz1yKG8pLGk9big0KSxhPXIoaSksbD1uKDIpLHU9cihsKSxjPW4oMyksZD1yKGMpLF89big2KSxwPXIoXyksZj1uKDUpLG09cihmKSxoPW4oMCksZz1yKGgpLGI9big3KSxFPW4oMSkseT1yKEUpLHY9big5KSxUPXIodiksQT1uKDgpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGw9MDtsPHM7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25DaGFuZ2VQcm9kdWNlc1dyYXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvcHMuc3BlY0FjdGlvbnMuY2hhbmdlUHJvZHVjZXNWYWx1ZShbci5wcm9wcy5wYXRoLHIucHJvcHMubWV0aG9kXSxlKX0sci5vblJlc3BvbnNlQ29udGVudFR5cGVDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb250cm9sc0FjY2VwdEhlYWRlcixuPWUudmFsdWUsbz1yLnByb3BzLHM9by5vYXMzQWN0aW9ucyxpPW8ucGF0aCxhPW8ubWV0aG9kO3QmJnMuc2V0UmVzcG9uc2VDb250ZW50VHlwZSh7dmFsdWU6bixwYXRoOmksbWV0aG9kOmF9KX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJzaG91bGRDb21wb25lbnRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzLnRyeUl0T3V0UmVzcG9uc2UhPT1lLnRyeUl0T3V0UmVzcG9uc2V8fHRoaXMucHJvcHMucmVzcG9uc2VzIT09ZS5yZXNwb25zZXN8fHRoaXMucHJvcHMucHJvZHVjZXMhPT1lLnByb2R1Y2VzfHx0aGlzLnByb3BzLnByb2R1Y2VzVmFsdWUhPT1lLnByb2R1Y2VzVmFsdWV8fHRoaXMucHJvcHMuZGlzcGxheVJlcXVlc3REdXJhdGlvbiE9PWUuZGlzcGxheVJlcXVlc3REdXJhdGlvbnx8dGhpcy5wcm9wcy5wYXRoIT09ZS5wYXRofHx0aGlzLnByb3BzLm1ldGhvZCE9PWUubWV0aG9kfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsbj10aGlzLnByb3BzLHI9bi5yZXNwb25zZXMsbz1uLnRyeUl0T3V0UmVzcG9uc2UsaT1uLmdldENvbXBvbmVudCxhPW4uZ2V0Q29uZmlncyxsPW4uc3BlY1NlbGVjdG9ycyx1PW4uZm4sYz1uLnByb2R1Y2VzVmFsdWUsZD1uLmRpc3BsYXlSZXF1ZXN0RHVyYXRpb24sXz1uLnNwZWNQYXRoLHA9KDAsQS5kZWZhdWx0U3RhdHVzQ29kZSkociksZj1pKCJjb250ZW50VHlwZSIpLG09aSgibGl2ZVJlc3BvbnNlIiksaD1pKCJyZXNwb25zZSIpLGI9dGhpcy5wcm9wcy5wcm9kdWNlcyYmdGhpcy5wcm9wcy5wcm9kdWNlcy5zaXplP3RoaXMucHJvcHMucHJvZHVjZXM6dC5kZWZhdWx0UHJvcHMucHJvZHVjZXMsRT1sLmlzT0FTMygpLHk9RT8oMCxBLmdldEFjY2VwdENvbnRyb2xsaW5nUmVzcG9uc2UpKHIpOm51bGw7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlc3BvbnNlcy13cmFwcGVyIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToib3BibG9jay1zZWN0aW9uLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoNCIsbnVsbCwiUmVzcG9uc2VzIiksbC5pc09BUzMoKT9udWxsOmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsYWJlbCIsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiUmVzcG9uc2UgY29udGVudCB0eXBlIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZix7dmFsdWU6YyxvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlUHJvZHVjZXNXcmFwcGVyLGNvbnRlbnRUeXBlczpiLGNsYXNzTmFtZToiZXhlY3V0ZS1jb250ZW50LXR5cGUifSkpKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZXNwb25zZXMtaW5uZXIifSxvP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobSx7cmVzcG9uc2U6byxnZXRDb21wb25lbnQ6aSxnZXRDb25maWdzOmEsc3BlY1NlbGVjdG9yczpsLHBhdGg6dGhpcy5wcm9wcy5wYXRoLG1ldGhvZDp0aGlzLnByb3BzLm1ldGhvZCxkaXNwbGF5UmVxdWVzdER1cmF0aW9uOmR9KSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDQiLG51bGwsIlJlc3BvbnNlcyIpKTpudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIse2NsYXNzTmFtZToicmVzcG9uc2VzLXRhYmxlIn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRoZWFkIixudWxsLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ciIse2NsYXNzTmFtZToicmVzcG9uc2VzLWhlYWRlciJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIGNvbF9oZWFkZXIgcmVzcG9uc2UtY29sX3N0YXR1cyJ9LCJDb2RlIiksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInRkIix7Y2xhc3NOYW1lOiJjb2wgY29sX2hlYWRlciByZXNwb25zZS1jb2xfZGVzY3JpcHRpb24ifSwiRGVzY3JpcHRpb24iKSxsLmlzT0FTMygpP2cuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0ZCIse2NsYXNzTmFtZToiY29sIGNvbF9oZWFkZXIgcmVzcG9uc2UtY29sX2xpbmtzIn0sIkxpbmtzIik6bnVsbCkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIsbnVsbCxyLmVudHJ5U2VxKCkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPSgwLHMuZGVmYXVsdCkodCwyKSxyPW5bMF0sZD1uWzFdLGY9byYmby5nZXQoInN0YXR1cyIpPT1yPyJyZXNwb25zZV9jdXJyZW50IjoiIjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaCx7a2V5OnIsc3BlY1BhdGg6Xy5wdXNoKHIpLGlzRGVmYXVsdDpwPT09cixmbjp1LGNsYXNzTmFtZTpmLGNvZGU6cixyZXNwb25zZTpkLHNwZWNTZWxlY3RvcnM6bCxjb250cm9sc0FjY2VwdEhlYWRlcjpkPT09eSxvbkNvbnRlbnRUeXBlQ2hhbmdlOmUub25SZXNwb25zZUNvbnRlbnRUeXBlQ2hhbmdlLGNvbnRlbnRUeXBlOmMsZ2V0Q29uZmlnczphLGdldENvbXBvbmVudDppfSl9KS50b0FycmF5KCkpKSkpfX1dKSx0fShnLmRlZmF1bHQuQ29tcG9uZW50KTtDLnByb3BUeXBlcz17dHJ5SXRPdXRSZXNwb25zZTp5LmRlZmF1bHQuaW5zdGFuY2VPZihiLkl0ZXJhYmxlKSxyZXNwb25zZXM6eS5kZWZhdWx0Lmluc3RhbmNlT2YoYi5JdGVyYWJsZSkuaXNSZXF1aXJlZCxwcm9kdWNlczp5LmRlZmF1bHQuaW5zdGFuY2VPZihiLkl0ZXJhYmxlKSxwcm9kdWNlc1ZhbHVlOnkuZGVmYXVsdC5hbnksZGlzcGxheVJlcXVlc3REdXJhdGlvbjp5LmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLHBhdGg6eS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLG1ldGhvZDp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsZ2V0Q29tcG9uZW50OnkuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Q29uZmlnczp5LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHNwZWNTZWxlY3RvcnM6eS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNwZWNBY3Rpb25zOnkuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxvYXMzQWN0aW9uczp5LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY1BhdGg6VC5kZWZhdWx0Lmxpc3QuaXNSZXF1aXJlZCxmbjp5LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9LEMuZGVmYXVsdFByb3BzPXt0cnlJdE91dFJlc3BvbnNlOm51bGwscHJvZHVjZXM6KDAsYi5mcm9tSlMpKFsiYXBwbGljYXRpb24vanNvbiJdKSxkaXNwbGF5UmVxdWVzdER1cmF0aW9uOiExfSx0LmRlZmF1bHQ9Q30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9QXJyYXkoaSksdT0wO3U8aTt1KyspbFt1XT1hcmd1bWVudHNbdV07cmV0dXJuIG49cj0oMCxkLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGwpKSksci5vbkNoYW5nZT1mdW5jdGlvbihlKXtyLnNldFNjaGVtZShlLnRhcmdldC52YWx1ZSl9LHIuc2V0U2NoZW1lPWZ1bmN0aW9uKGUpe3ZhciB0PXIucHJvcHMsbj10LnBhdGgsbz10Lm1ldGhvZDt0LnNwZWNBY3Rpb25zLnNldFNjaGVtZShlLG4sbyl9LG89biwoMCxkLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50V2lsbE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2NoZW1lczt0aGlzLnNldFNjaGVtZShlLmZpcnN0KCkpfX0se2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5jdXJyZW50U2NoZW1lJiZlLnNjaGVtZXMuaW5jbHVkZXModGhpcy5wcm9wcy5jdXJyZW50U2NoZW1lKXx8dGhpcy5zZXRTY2hlbWUoZS5zY2hlbWVzLmZpcnN0KCkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2NoZW1lcztyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIix7aHRtbEZvcjoic2NoZW1lcyJ9LG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJzY2hlbWVzLXRpdGxlIn0sIlNjaGVtZXMiKSxtLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7b25DaGFuZ2U6dGhpcy5vbkNoYW5nZX0sZS52YWx1ZVNlcSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOmUsa2V5OmV9LGUpfSkudG9BcnJheSgpKSl9fV0pLHR9KG0uZGVmYXVsdC5Db21wb25lbnQpO2IucHJvcFR5cGVzPXtzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc2NoZW1lczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsY3VycmVudFNjaGVtZTpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQscGF0aDpnLmRlZmF1bHQuc3RyaW5nLG1ldGhvZDpnLmRlZmF1bHQuc3RyaW5nfSx0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89big0KSxzPXIobyksaT1uKDIpLGE9cihpKSxsPW4oMyksdT1yKGwpLGM9big2KSxkPXIoYyksXz1uKDUpLHA9cihfKSxmPW4oMCksbT1yKGYpLGg9bigxKSxnPXIoaCksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsYS5kZWZhdWx0KSh0aGlzLHQpLCgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9uVHJ5b3V0Q2xpY2ssbj1lLm9uQ2FuY2VsQ2xpY2sscj1lLmVuYWJsZWQ7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InRyeS1vdXQifSxyP20uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImJ0biB0cnktb3V0X19idG4gY2FuY2VsIixvbkNsaWNrOnR9LCJDYW5jZWwiKTptLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJidG4gdHJ5LW91dF9fYnRuIixvbkNsaWNrOm59LCJUcnkgaXQgb3V0ICIpKX19XSksdH0obS5kZWZhdWx0LkNvbXBvbmVudCk7Yi5wcm9wVHlwZXM9e29uVHJ5b3V0Q2xpY2s6Zy5kZWZhdWx0LmZ1bmMsb25DYW5jZWxDbGljazpnLmRlZmF1bHQuZnVuYyxlbmFibGVkOmcuZGVmYXVsdC5ib29sfSxiLmRlZmF1bHRQcm9wcz17b25UcnlvdXRDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsb25DYW5jZWxDbGljazpGdW5jdGlvbi5wcm90b3R5cGUsZW5hYmxlZDohMX0sdC5kZWZhdWx0PWJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMCkscz1yKG8pLGk9bigxKSxhPXIoaSksbD1mdW5jdGlvbihlKXt2YXIgdD1lLnZlcnNpb247cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzbWFsbCIsbnVsbCxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicHJlIix7Y2xhc3NOYW1lOiJ2ZXJzaW9uIn0sIiAiLHQsIiAiKSl9O2wucHJvcFR5cGVzPXt2ZXJzaW9uOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0sdC5kZWZhdWx0PWx9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oNCkscz1yKG8pLGk9bigyKSxhPXIoaSksbD1uKDMpLHU9cihsKSxjPW4oNiksZD1yKGMpLF89big1KSxwPXIoXyksZj1uKDApLG09cihmKSxoPW4oMSksZz1yKGgpLGI9big5KSxFPXIoYikseT1uKDI3MCksdj1uKDcpLFQ9eS5oZWxwZXJzLm9wSWQsQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7KDAsYS5kZWZhdWx0KSh0aGlzLHQpO3ZhciByPSgwLGQuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHMuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlLG4pKTtyZXR1cm4gci50b2dnbGVTaG93bj1mdW5jdGlvbigpe3ZhciBlPXIucHJvcHMsdD1lLmxheW91dEFjdGlvbnMsbj1lLnRhZyxvPWUub3BlcmF0aW9uSWQscz1lLmlzU2hvd247dC5zaG93KFsib3BlcmF0aW9ucyIsbixvXSwhcyl9LHIub25UcnlvdXRDbGljaz1mdW5jdGlvbigpe3Iuc2V0U3RhdGUoe3RyeUl0T3V0RW5hYmxlZDohci5zdGF0ZS50cnlJdE91dEVuYWJsZWR9KX0sci5vbkNhbmNlbENsaWNrPWZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcyx0PWUuc3BlY0FjdGlvbnMsbj1lLnBhdGgsbz1lLm1ldGhvZDtyLnNldFN0YXRlKHt0cnlJdE91dEVuYWJsZWQ6IXIuc3RhdGUudHJ5SXRPdXRFbmFibGVkfSksdC5jbGVhclZhbGlkYXRlUGFyYW1zKFtuLG9dKX0sci5vbkV4ZWN1dGU9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtleGVjdXRlSW5Qcm9ncmVzczohMH0pfSxyLnN0YXRlPXt0cnlJdE91dEVuYWJsZWQ6ITEsZXhlY3V0ZUluUHJvZ3Jlc3M6ITF9LHJ9cmV0dXJuKDAscC5kZWZhdWx0KSh0LGUpLCgwLHUuZGVmYXVsdCkodCxbe2tleToibWFwU3RhdGVUb1Byb3BzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQub3Ascj10LmxheW91dFNlbGVjdG9ycyxvPXQuZ2V0Q29uZmlncyxzPW8oKSxpPXMuZG9jRXhwYW5zaW9uLGE9cy5kZWVwTGlua2luZyxsPXMuZGlzcGxheU9wZXJhdGlvbklkLHU9cy5kaXNwbGF5UmVxdWVzdER1cmF0aW9uLGM9cy5zdXBwb3J0ZWRTdWJtaXRNZXRob2RzLGQ9ci5zaG93U3VtbWFyeSgpLF89bi5nZXRJbihbIm9wZXJhdGlvbiIsIm9wZXJhdGlvbklkIl0pfHxuLmdldEluKFsib3BlcmF0aW9uIiwiX19vcmlnaW5hbE9wZXJhdGlvbklkIl0pfHxUKG4uZ2V0KCJvcGVyYXRpb24iKSx0LnBhdGgsdC5tZXRob2QpfHxuLmdldCgiaWQiKSxwPVsib3BlcmF0aW9ucyIsdC50YWcsX10sZj1hJiYiZmFsc2UiIT09YSxtPWMuaW5kZXhPZih0Lm1ldGhvZCk+PTAmJih2b2lkIDA9PT10LmFsbG93VHJ5SXRPdXQ/dC5zcGVjU2VsZWN0b3JzLmFsbG93VHJ5SXRPdXRGb3IodC5wYXRoLHQubWV0aG9kKTp0LmFsbG93VHJ5SXRPdXQpLGg9bi5nZXRJbihbIm9wZXJhdGlvbiIsInNlY3VyaXR5Il0pfHx0LnNwZWNTZWxlY3RvcnMuc2VjdXJpdHkoKTtyZXR1cm57b3BlcmF0aW9uSWQ6Xyxpc0RlZXBMaW5raW5nRW5hYmxlZDpmLHNob3dTdW1tYXJ5OmQsZGlzcGxheU9wZXJhdGlvbklkOmwsZGlzcGxheVJlcXVlc3REdXJhdGlvbjp1LGFsbG93VHJ5SXRPdXQ6bSxzZWN1cml0eTpoLGlzQXV0aG9yaXplZDp0LmF1dGhTZWxlY3RvcnMuaXNBdXRob3JpemVkKGgpLGlzU2hvd246ci5pc1Nob3duKHAsImZ1bGwiPT09aSksanVtcFRvS2V5OiJwYXRocy4iK3QucGF0aCsiLiIrdC5tZXRob2QscmVzcG9uc2U6dC5zcGVjU2VsZWN0b3JzLnJlc3BvbnNlRm9yKHQucGF0aCx0Lm1ldGhvZCkscmVxdWVzdDp0LnNwZWNTZWxlY3RvcnMucmVxdWVzdEZvcih0LnBhdGgsdC5tZXRob2QpfX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2UucmVzcG9uc2UhPT10aGlzLnByb3BzLnJlc3BvbnNlJiZ0aGlzLnNldFN0YXRlKHtleGVjdXRlSW5Qcm9ncmVzczohMX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9wLG49ZS50YWcscj1lLnBhdGgsbz1lLm1ldGhvZCxzPWUuc2VjdXJpdHksaT1lLmlzQXV0aG9yaXplZCxhPWUub3BlcmF0aW9uSWQsbD1lLnNob3dTdW1tYXJ5LHU9ZS5pc1Nob3duLGM9ZS5qdW1wVG9LZXksZD1lLmFsbG93VHJ5SXRPdXQsXz1lLnJlc3BvbnNlLHA9ZS5yZXF1ZXN0LGY9ZS5kaXNwbGF5T3BlcmF0aW9uSWQsaD1lLmRpc3BsYXlSZXF1ZXN0RHVyYXRpb24sZz1lLmlzRGVlcExpbmtpbmdFbmFibGVkLGI9ZS5zcGVjUGF0aCxFPWUuc3BlY1NlbGVjdG9ycyx5PWUuc3BlY0FjdGlvbnMsVD1lLmdldENvbXBvbmVudCxBPWUuZ2V0Q29uZmlncyxDPWUubGF5b3V0U2VsZWN0b3JzLE89ZS5sYXlvdXRBY3Rpb25zLFM9ZS5hdXRoQWN0aW9ucyxSPWUuYXV0aFNlbGVjdG9ycyxqPWUub2FzM0FjdGlvbnMseD1lLm9hczNTZWxlY3RvcnMsTD1lLmZuLEQ9VCgib3BlcmF0aW9uIiksdz0oMCx2LmZyb21KUykoe29wOnQsdGFnOm4scGF0aDpyLG1ldGhvZDpvLHNlY3VyaXR5OnMsaXNBdXRob3JpemVkOmksb3BlcmF0aW9uSWQ6YSxzaG93U3VtbWFyeTpsLGlzU2hvd246dSxqdW1wVG9LZXk6YyxhbGxvd1RyeUl0T3V0OmQscmVxdWVzdDpwLGRpc3BsYXlPcGVyYXRpb25JZDpmLGRpc3BsYXlSZXF1ZXN0RHVyYXRpb246aCxpc0RlZXBMaW5raW5nRW5hYmxlZDpnLGV4ZWN1dGVJblByb2dyZXNzOnRoaXMuc3RhdGUuZXhlY3V0ZUluUHJvZ3Jlc3MsdHJ5SXRPdXRFbmFibGVkOnRoaXMuc3RhdGUudHJ5SXRPdXRFbmFibGVkfSk7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQse29wZXJhdGlvbjp3LHJlc3BvbnNlOl8scmVxdWVzdDpwLGlzU2hvd246dSx0b2dnbGVTaG93bjp0aGlzLnRvZ2dsZVNob3duLG9uVHJ5b3V0Q2xpY2s6dGhpcy5vblRyeW91dENsaWNrLG9uQ2FuY2VsQ2xpY2s6dGhpcy5vbkNhbmNlbENsaWNrLG9uRXhlY3V0ZTp0aGlzLm9uRXhlY3V0ZSxzcGVjUGF0aDpiLHNwZWNBY3Rpb25zOnksc3BlY1NlbGVjdG9yczpFLG9hczNBY3Rpb25zOmosb2FzM1NlbGVjdG9yczp4LGxheW91dEFjdGlvbnM6TyxsYXlvdXRTZWxlY3RvcnM6QyxhdXRoQWN0aW9uczpTLGF1dGhTZWxlY3RvcnM6UixnZXRDb21wb25lbnQ6VCxnZXRDb25maWdzOkEsZm46TH0pfX1dKSx0fShmLlB1cmVDb21wb25lbnQpO0EucHJvcFR5cGVzPXtvcDpnLmRlZmF1bHQuaW5zdGFuY2VPZih2Lkl0ZXJhYmxlKS5pc1JlcXVpcmVkLHRhZzpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQscGF0aDpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsbWV0aG9kOmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvcGVyYXRpb25JZDpnLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsc2hvd1N1bW1hcnk6Zy5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxpc1Nob3duOmcuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsanVtcFRvS2V5OmcuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxhbGxvd1RyeUl0T3V0OmcuZGVmYXVsdC5ib29sLGRpc3BsYXlPcGVyYXRpb25JZDpnLmRlZmF1bHQuYm9vbCxpc0F1dGhvcml6ZWQ6Zy5kZWZhdWx0LmJvb2wsZGlzcGxheVJlcXVlc3REdXJhdGlvbjpnLmRlZmF1bHQuYm9vbCxyZXNwb25zZTpnLmRlZmF1bHQuaW5zdGFuY2VPZih2Lkl0ZXJhYmxlKSxyZXF1ZXN0OmcuZGVmYXVsdC5pbnN0YW5jZU9mKHYuSXRlcmFibGUpLHNlY3VyaXR5OmcuZGVmYXVsdC5pbnN0YW5jZU9mKHYuSXRlcmFibGUpLGlzRGVlcExpbmtpbmdFbmFibGVkOmcuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsc3BlY1BhdGg6RS5kZWZhdWx0Lmxpc3QuaXNSZXF1aXJlZCxnZXRDb21wb25lbnQ6Zy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxhdXRoQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LG9hczNBY3Rpb25zOmcuZGVmYXVsdC5vYmplY3Qsb2FzM1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LGF1dGhTZWxlY3RvcnM6Zy5kZWZhdWx0Lm9iamVjdCxzcGVjQWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsc3BlY1NlbGVjdG9yczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbGF5b3V0QWN0aW9uczpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsbGF5b3V0U2VsZWN0b3JzOmcuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxmbjpnLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0Q29uZmlnczpnLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxBLmRlZmF1bHRQcm9wcz17c2hvd1N1bW1hcnk6ITAscmVzcG9uc2U6bnVsbCxhbGxvd1RyeUl0T3V0OiEwLGRpc3BsYXlPcGVyYXRpb25JZDohMSxkaXNwbGF5UmVxdWVzdER1cmF0aW9uOiExfSx0LmRlZmF1bHQ9QX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0PVtdLG49IiIscj1lLmdldCgiaGVhZGVycyIpO2lmKHQucHVzaCgiY3VybCIpLHQucHVzaCgiLVgiLGUuZ2V0KCJtZXRob2QiKSksdC5wdXNoKCciJytlLmdldCgidXJsIikrJyInKSxyJiZyLnNpemUpe3ZhciBvPSEwLHM9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgdSxkPSgwLGMuZGVmYXVsdCkoZS5nZXQoImhlYWRlcnMiKS5lbnRyaWVzKCkpOyEobz0odT1kLm5leHQoKSkuZG9uZSk7bz0hMCl7dmFyIHA9dS52YWx1ZSxmPSgwLGwuZGVmYXVsdCkocCwyKSxtPWZbMF0saD1mWzFdO249aCx0LnB1c2goIi1IICIpLHQucHVzaCgnIicrbSsiOiAiK2grJyInKX19Y2F0Y2goZSl7cz0hMCxhPWV9ZmluYWxseXt0cnl7IW8mJmQucmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19aWYoZS5nZXQoImJvZHkiKSlpZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PT1uJiYiUE9TVCI9PT1lLmdldCgibWV0aG9kIikpe3ZhciBnPSEwLGI9ITEsRT12b2lkIDA7dHJ5e2Zvcih2YXIgeSx2PSgwLGMuZGVmYXVsdCkoZS5nZXQoImJvZHkiKS5lbnRyeVNlcSgpKTshKGc9KHk9di5uZXh0KCkpLmRvbmUpO2c9ITApe3ZhciBUPSgwLGwuZGVmYXVsdCkoeS52YWx1ZSwyKSxBPVRbMF0saD1UWzFdO3QucHVzaCgiLUYiKSxoIGluc3RhbmNlb2YgXy5kZWZhdWx0LkZpbGU/dC5wdXNoKCciJytBKyI9QCIraC5uYW1lKyI7dHlwZT0iK2gudHlwZSsnIicpOnQucHVzaCgnIicrQSsiPSIraCsnIicpfX1jYXRjaChlKXtiPSEwLEU9ZX1maW5hbGx5e3RyeXshZyYmdi5yZXR1cm4mJnYucmV0dXJuKCl9ZmluYWxseXtpZihiKXRocm93IEV9fX1lbHNlIHQucHVzaCgiLWQiKSx0LnB1c2goKDAsaS5kZWZhdWx0KShlLmdldCgiYm9keSIpKS5yZXBsYWNlKC9cXG4vZywiIikpO3JldHVybiB0LmpvaW4oIiAiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9bigyNCksaT1yKHMpLGE9bigxMSksbD1yKGEpLHU9big3MCksYz1yKHUpO3QuZGVmYXVsdD1vO3ZhciBkPW4oMjcpLF89cihkKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Kc29uU2NoZW1hX2Jvb2xlYW49dC5Kc29uU2NoZW1hX2FycmF5PXQuSnNvblNjaGVtYV9zdHJpbmc9dC5Kc29uU2NoZW1hRm9ybT12b2lkIDA7dmFyIG89bigyMSkscz1yKG8pLGk9bigxNCksYT1yKGkpLGw9big0KSx1PXIobCksYz1uKDIpLGQ9cihjKSxfPW4oMykscD1yKF8pLGY9big2KSxtPXIoZiksaD1uKDUpLGc9cihoKSxiPW4oMCksRT1yKGIpLHk9bigxKSx2PXIoeSksVD1uKDcpLEE9big5KSxDPXIoQSksTz1mdW5jdGlvbigpe30sUz17Z2V0Q29tcG9uZW50OnYuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsdmFsdWU6di5kZWZhdWx0LmFueSxvbkNoYW5nZTp2LmRlZmF1bHQuZnVuYyxrZXlOYW1lOnYuZGVmYXVsdC5hbnksZm46di5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNjaGVtYTp2LmRlZmF1bHQub2JqZWN0LGVycm9yczpDLmRlZmF1bHQubGlzdCxyZXF1aXJlZDp2LmRlZmF1bHQuYm9vbCxkZXNjcmlwdGlvbjp2LmRlZmF1bHQuYW55fSxSPXt2YWx1ZToiIixvbkNoYW5nZTpPLHNjaGVtYTp7fSxrZXlOYW1lOiIiLHJlcXVpcmVkOiExLGVycm9yczooMCxULkxpc3QpKCl9LGo9dC5Kc29uU2NoZW1hRm9ybT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNjaGVtYSxuPWUuZXJyb3JzLHI9ZS52YWx1ZSxvPWUub25DaGFuZ2Uscz1lLmdldENvbXBvbmVudCxpPWUuZm47dC50b0pTJiYodD10LnRvSlMoKSk7dmFyIGw9dCx1PWwudHlwZSxjPWwuZm9ybWF0LGQ9dm9pZCAwPT09Yz8iIjpjLF89cyhkPyJKc29uU2NoZW1hXyIrdSsiXyIrZDoiSnNvblNjaGVtYV8iK3UpfHxzKCJKc29uU2NoZW1hX3N0cmluZyIpO3JldHVybiBFLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLCgwLGEuZGVmYXVsdCkoe30sdGhpcy5wcm9wcyx7ZXJyb3JzOm4sZm46aSxnZXRDb21wb25lbnQ6cyx2YWx1ZTpyLG9uQ2hhbmdlOm8sc2NoZW1hOnR9KSl9fV0pLHR9KGIuQ29tcG9uZW50KTtqLnByb3BUeXBlcz1TLGouZGVmYXVsdFByb3BzPVI7dmFyIHg9dC5Kc29uU2NoZW1hX3N0cmluZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD0iZmlsZSI9PT1yLnByb3BzLnNjaGVtYS50eXBlP2UudGFyZ2V0LmZpbGVzWzBdOmUudGFyZ2V0LnZhbHVlO3IucHJvcHMub25DaGFuZ2UodCxyLnByb3BzLmtleU5hbWUpfSxyLm9uRW51bUNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gci5wcm9wcy5vbkNoYW5nZShlKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZ2V0Q29tcG9uZW50LG49ZS52YWx1ZSxyPWUuc2NoZW1hLG89ZS5lcnJvcnMscz1lLnJlcXVpcmVkLGk9ZS5kZXNjcmlwdGlvbixhPXIuZW51bTtpZihvPW8udG9KUz9vLnRvSlMoKTpbXSxhKXt2YXIgbD10KCJTZWxlY3QiKTtyZXR1cm4gRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobCx7Y2xhc3NOYW1lOm8ubGVuZ3RoPyJpbnZhbGlkIjoiIix0aXRsZTpvLmxlbmd0aD9vOiIiLGFsbG93ZWRWYWx1ZXM6YSx2YWx1ZTpuLGFsbG93RW1wdHlWYWx1ZTohcyxvbkNoYW5nZTp0aGlzLm9uRW51bUNoYW5nZX0pfXZhciB1PSJmb3JtRGF0YSI9PT1yLmluJiYhKCJGb3JtRGF0YSJpbiB3aW5kb3cpLGM9dCgiSW5wdXQiKTtyZXR1cm4iZmlsZSI9PT1yLnR5cGU/RS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYyx7dHlwZToiZmlsZSIsY2xhc3NOYW1lOm8ubGVuZ3RoPyJpbnZhbGlkIjoiIix0aXRsZTpvLmxlbmd0aD9vOiIiLG9uQ2hhbmdlOnRoaXMub25DaGFuZ2UsZGlzYWJsZWQ6dX0pOkUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMse3R5cGU6InBhc3N3b3JkIj09PXIuZm9ybWF0PyJwYXNzd29yZCI6InRleHQiLGNsYXNzTmFtZTpvLmxlbmd0aD8iaW52YWxpZCI6IiIsdGl0bGU6by5sZW5ndGg/bzoiIix2YWx1ZTpuLHBsYWNlaG9sZGVyOmksb25DaGFuZ2U6dGhpcy5vbkNoYW5nZSxkaXNhYmxlZDp1fSl9fV0pLHR9KGIuQ29tcG9uZW50KTt4LnByb3BUeXBlcz1TLHguZGVmYXVsdFByb3BzPVI7dmFyIEw9dC5Kc29uU2NoZW1hX2FycmF5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7dmFyIHI9KDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUsbikpO3JldHVybiByLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvcHMub25DaGFuZ2Uoci5zdGF0ZS52YWx1ZSl9LHIub25JdGVtQ2hhbmdlPWZ1bmN0aW9uKGUsdCl7ci5zZXRTdGF0ZShmdW5jdGlvbihuKXtyZXR1cm57dmFsdWU6bi52YWx1ZS5zZXQodCxlKX19LHIub25DaGFuZ2UpfSxyLnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZShmdW5jdGlvbih0KXtyZXR1cm57dmFsdWU6dC52YWx1ZS5yZW1vdmUoZSl9fSxyLm9uQ2hhbmdlKX0sci5hZGRJdGVtPWZ1bmN0aW9uKCl7ci5zZXRTdGF0ZShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT1lLnZhbHVlfHwoMCxULkxpc3QpKCkse3ZhbHVlOmUudmFsdWUucHVzaCgiIil9fSxyLm9uQ2hhbmdlKX0sci5vbkVudW1DaGFuZ2U9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZShmdW5jdGlvbigpe3JldHVybnt2YWx1ZTplfX0sci5vbkNoYW5nZSl9LHIuc3RhdGU9e3ZhbHVlOmUudmFsdWV9LHJ9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52YWx1ZSE9PXRoaXMuc3RhdGUudmFsdWUmJnRoaXMuc2V0U3RhdGUoe3ZhbHVlOmUudmFsdWV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuZ2V0Q29tcG9uZW50LHI9dC5yZXF1aXJlZCxvPXQuc2NoZW1hLGk9dC5lcnJvcnMsYT10LmZuO2k9aS50b0pTP2kudG9KUygpOltdO3ZhciBsPWEuaW5mZXJTY2hlbWEoby5pdGVtcyksdT1uKCJKc29uU2NoZW1hRm9ybSIpLGM9bigiQnV0dG9uIiksZD1sLmVudW0sXz10aGlzLnN0YXRlLnZhbHVlO2lmKGQpe3ZhciBwPW4oIlNlbGVjdCIpO3JldHVybiBFLmRlZmF1bHQuY3JlYXRlRWxlbWVudChwLHtjbGFzc05hbWU6aS5sZW5ndGg/ImludmFsaWQiOiIiLHRpdGxlOmkubGVuZ3RoP2k6IiIsbXVsdGlwbGU6ITAsdmFsdWU6XyxhbGxvd2VkVmFsdWVzOmQsYWxsb3dFbXB0eVZhbHVlOiFyLG9uQ2hhbmdlOnRoaXMub25FbnVtQ2hhbmdlfSl9cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsIV98fF8uY291bnQoKTwxP251bGw6Xy5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbz0oMCxzLmRlZmF1bHQpKHt9LGwpO2lmKGkubGVuZ3RoKXt2YXIgZD1pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleD09PXJ9KTtkLmxlbmd0aCYmKGk9W2RbMF0uZXJyb3Ircl0pfXJldHVybiBFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnIsY2xhc3NOYW1lOiJqc29uLXNjaGVtYS1mb3JtLWl0ZW0ifSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh1LHtmbjphLGdldENvbXBvbmVudDpuLHZhbHVlOnQsb25DaGFuZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGUub25JdGVtQ2hhbmdlKHQscil9LHNjaGVtYTpvfSksRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYyx7Y2xhc3NOYW1lOiJidG4gYnRuLXNtIGpzb24tc2NoZW1hLWZvcm0taXRlbS1yZW1vdmUiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZW1vdmVJdGVtKHIpfX0sIiAtICIpKX0pLnRvQXJyYXkoKSxFLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLHtjbGFzc05hbWU6ImJ0biBidG4tc20ganNvbi1zY2hlbWEtZm9ybS1pdGVtLWFkZCAiKyhpLmxlbmd0aD8iaW52YWxpZCI6bnVsbCksb25DbGljazp0aGlzLmFkZEl0ZW19LCIgQWRkIGl0ZW0gIikpfX1dKSx0fShiLlB1cmVDb21wb25lbnQpO0wucHJvcFR5cGVzPVMsTC5kZWZhdWx0UHJvcHM9Ujt2YXIgRD10Lkpzb25TY2hlbWFfYm9vbGVhbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkVudW1DaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvcHMub25DaGFuZ2UoZSl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmdldENvbXBvbmVudCxuPWUudmFsdWUscj1lLmVycm9ycyxvPWUuc2NoZW1hO3I9ci50b0pTP3IudG9KUygpOltdO3ZhciBzPXQoIlNlbGVjdCIpO3JldHVybiBFLmRlZmF1bHQuY3JlYXRlRWxlbWVudChzLHtjbGFzc05hbWU6ci5sZW5ndGg/ImludmFsaWQiOiIiLHRpdGxlOnIubGVuZ3RoP3I6IiIsdmFsdWU6U3RyaW5nKG4pLGFsbG93ZWRWYWx1ZXM6KDAsVC5mcm9tSlMpKG8uZW51bXx8WyJ0cnVlIiwiZmFsc2UiXSksYWxsb3dFbXB0eVZhbHVlOiF0aGlzLnByb3BzLnJlcXVpcmVkLG9uQ2hhbmdlOnRoaXMub25FbnVtQ2hhbmdlfSl9fV0pLHR9KGIuQ29tcG9uZW50KTtELnByb3BUeXBlcz1TLEQuZGVmYXVsdFByb3BzPVJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmF1dGgsbj1lLmF1dGhBY3Rpb25zLHI9ZS5lcnJBY3Rpb25zLG89ZS5jb25maWdzLGE9ZS5hdXRoQ29uZmlncyxsPXZvaWQgMD09PWE/e306YSx1PXQuc2NoZW1hLGM9dC5zY29wZXMsZD10Lm5hbWUsXz10LmNsaWVudElkLHA9dS5nZXQoImZsb3ciKSxmPVtdO3N3aXRjaChwKXtjYXNlInBhc3N3b3JkIjpyZXR1cm4gdm9pZCBuLmF1dGhvcml6ZVBhc3N3b3JkKHQpO2Nhc2UiYXBwbGljYXRpb24iOnJldHVybiB2b2lkIG4uYXV0aG9yaXplQXBwbGljYXRpb24odCk7Y2FzZSJhY2Nlc3NDb2RlIjpmLnB1c2goInJlc3BvbnNlX3R5cGU9Y29kZSIpO2JyZWFrO2Nhc2UiaW1wbGljaXQiOmYucHVzaCgicmVzcG9uc2VfdHlwZT10b2tlbiIpO2JyZWFrO2Nhc2UiY2xpZW50Q3JlZGVudGlhbHMiOnJldHVybiB2b2lkIG4uYXV0aG9yaXplQXBwbGljYXRpb24odCk7Y2FzZSJhdXRob3JpemF0aW9uQ29kZSI6Zi5wdXNoKCJyZXNwb25zZV90eXBlPWNvZGUiKX0ic3RyaW5nIj09dHlwZW9mIF8mJmYucHVzaCgiY2xpZW50X2lkPSIrZW5jb2RlVVJJQ29tcG9uZW50KF8pKTt2YXIgbT1vLm9hdXRoMlJlZGlyZWN0VXJsO2lmKHZvaWQgMD09PW0pcmV0dXJuIHZvaWQgci5uZXdBdXRoRXJyKHthdXRoSWQ6ZCxzb3VyY2U6InZhbGlkYXRpb24iLGxldmVsOiJlcnJvciIsbWVzc2FnZToib2F1dGgyUmVkaXJlY3RVcmwgY29uZmlndXJhdGlvbiBpcyBub3QgcGFzc2VkLiBPYXV0aDIgYXV0aG9yaXphdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkLiJ9KTtpZihmLnB1c2goInJlZGlyZWN0X3VyaT0iK2VuY29kZVVSSUNvbXBvbmVudChtKSksQXJyYXkuaXNBcnJheShjKSYmMDxjLmxlbmd0aCl7dmFyIGg9bC5zY29wZVNlcGFyYXRvcnx8IiAiO2YucHVzaCgic2NvcGU9IitlbmNvZGVVUklDb21wb25lbnQoYy5qb2luKGgpKSl9dmFyIGc9KDAsaS5idG9hKShuZXcgRGF0ZSk7Zi5wdXNoKCJzdGF0ZT0iK2VuY29kZVVSSUNvbXBvbmVudChnKSksdm9pZCAwIT09bC5yZWFsbSYmZi5wdXNoKCJyZWFsbT0iK2VuY29kZVVSSUNvbXBvbmVudChsLnJlYWxtKSk7dmFyIGI9bC5hZGRpdGlvbmFsUXVlcnlTdHJpbmdQYXJhbXM7Zm9yKHZhciBFIGluIGIpdm9pZCAwIT09YltFXSYmZi5wdXNoKFtFLGJbRV1dLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oIj0iKSk7dmFyIHk9dS5nZXQoImF1dGhvcml6YXRpb25VcmwiKSx2PVt5LGYuam9pbigiJiIpXS5qb2luKC0xPT09eS5pbmRleE9mKCI/Iik/Ij8iOiImIiksVD12b2lkIDA7VD0iaW1wbGljaXQiPT09cD9uLnByZUF1dGhvcml6ZUltcGxpY2l0OmwudXNlQmFzaWNBdXRoZW50aWNhdGlvbldpdGhBY2Nlc3NDb2RlR3JhbnQ/bi5hdXRob3JpemVBY2Nlc3NDb2RlV2l0aEJhc2ljQXV0aGVudGljYXRpb246bi5hdXRob3JpemVBY2Nlc3NDb2RlV2l0aEZvcm1QYXJhbXMscy5kZWZhdWx0LnN3YWdnZXJVSVJlZGlyZWN0T2F1dGgyPXthdXRoOnQsc3RhdGU6ZyxyZWRpcmVjdFVybDptLGNhbGxiYWNrOlQsZXJyQ2I6ci5uZXdBdXRoRXJyfSxzLmRlZmF1bHQub3Blbih2KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXI7dmFyIG89bigyNykscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9big4KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKCl7cmV0dXJuW2kuZGVmYXVsdCxsLmRlZmF1bHRdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9bzt2YXIgcz1uKDMyNyksaT1yKHMpLGE9bigxNzcpLGw9cihhKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIGU9e2NvbXBvbmVudHM6e0FwcDpQLmRlZmF1bHQsYXV0aG9yaXphdGlvblBvcHVwOkguZGVmYXVsdCxhdXRob3JpemVCdG46Qi5kZWZhdWx0LGF1dGhvcml6ZU9wZXJhdGlvbkJ0bjpHLmRlZmF1bHQsYXV0aHM6Vi5kZWZhdWx0LEF1dGhJdGVtOlkuZGVmYXVsdCxhdXRoRXJyb3I6Sy5kZWZhdWx0LG9hdXRoMjplZS5kZWZhdWx0LGFwaUtleUF1dGg6JC5kZWZhdWx0LGJhc2ljQXV0aDpKLmRlZmF1bHQsY2xlYXI6bmUuZGVmYXVsdCxsaXZlUmVzcG9uc2U6b2UuZGVmYXVsdCxpbmZvOkJlLmRlZmF1bHQsb25saW5lVmFsaWRhdG9yQmFkZ2U6aWUuZGVmYXVsdCxvcGVyYXRpb25zOmxlLmRlZmF1bHQsb3BlcmF0aW9uOmNlLmRlZmF1bHQsaGlnaGxpZ2h0Q29kZTpoZS5kZWZhdWx0LHJlc3BvbnNlczpiZS5kZWZhdWx0LHJlc3BvbnNlOnllLmRlZmF1bHQscmVzcG9uc2VCb2R5OlRlLmRlZmF1bHQscGFyYW1ldGVyczpDZS5kZWZhdWx0LHBhcmFtZXRlclJvdzpqZS5kZWZhdWx0LGV4ZWN1dGU6TGUuZGVmYXVsdCxoZWFkZXJzOndlLmRlZmF1bHQsZXJyb3JzOmtlLmRlZmF1bHQsY29udGVudFR5cGU6UGUuZGVmYXVsdCxvdmVydmlldzpIZS5kZWZhdWx0LGZvb3RlcjpHZS5kZWZhdWx0LFBhcmFtQm9keTpWZS5kZWZhdWx0LGN1cmw6WWUuZGVmYXVsdCxzY2hlbWVzOktlLmRlZmF1bHQsbW9kZWxFeGFtcGxlOkplLmRlZmF1bHQsTW9kZWxXcmFwcGVyOmV0LmRlZmF1bHQsTW9kZWxDb2xsYXBzZTokZS5kZWZhdWx0LE1vZGVsOm50LmRlZmF1bHQsTW9kZWxzOm90LmRlZmF1bHQsRW51bU1vZGVsOml0LmRlZmF1bHQsT2JqZWN0TW9kZWw6bHQuZGVmYXVsdCxBcnJheU1vZGVsOmN0LmRlZmF1bHQsUHJpbWl0aXZlTW9kZWw6X3QuZGVmYXVsdCxQcm9wZXJ0eTpmdC5kZWZhdWx0LFRyeUl0T3V0QnV0dG9uOmh0LmRlZmF1bHQsTWFya2Rvd246VHQuZGVmYXVsdCxCYXNlTGF5b3V0OkN0LmRlZmF1bHQsVmVyc2lvblN0YW1wOmJ0LmRlZmF1bHQsT3BlcmF0aW9uRXh0Ol9lLmRlZmF1bHQsT3BlcmF0aW9uRXh0Um93OmZlLmRlZmF1bHQsUGFyYW1ldGVyRXh0OlNlLmRlZmF1bHQsT3BlcmF0aW9uQ29udGFpbmVyOmsuZGVmYXVsdCxEZWVwTGluazp5dC5kZWZhdWx0fX0sdD17Y29tcG9uZW50czpTdH0sbj17Y29tcG9uZW50czpqdH07cmV0dXJuW0wuZGVmYXVsdCxDLmRlZmF1bHQsaC5kZWZhdWx0LF8uZGVmYXVsdCxjLmRlZmF1bHQsaS5kZWZhdWx0LGwuZGVmYXVsdCxmLmRlZmF1bHQsZSx0LHkuZGVmYXVsdCxuLFQuZGVmYXVsdCxiLmRlZmF1bHQsUy5kZWZhdWx0LGouZGVmYXVsdCx3LmRlZmF1bHRdfTt2YXIgcz1uKDE2MSksaT1vKHMpLGE9bigxNjQpLGw9byhhKSx1PW4oMTkwKSxjPW8odSksZD1uKDE5OCksXz1vKGQpLHA9bigxODkpLGY9byhwKSxtPW4oMTY3KSxoPW8obSksZz1uKDE0MyksYj1vKGcpLEU9bigxOTYpLHk9byhFKSx2PW4oMTQ1KSxUPW8odiksQT1uKDE5NyksQz1vKEEpLE89bigxOTUpLFM9byhPKSxSPW4oMTU2KSxqPW8oUikseD1uKDE0OSksTD1vKHgpLEQ9bigxNTMpLHc9byhEKSxNPW4oMzIyKSxrPW8oTSksST1uKDI3NSksUD1vKEkpLE49bigyNzkpLEg9byhOKSxGPW4oMjgwKSxCPW8oRiksVT1uKDI4MSksRz1vKFUpLHo9bigyODIpLFY9byh6KSxXPW4oMjc4KSxZPW8oVykscT1uKDI4NCksSz1vKHEpLFg9bigyNzcpLCQ9byhYKSxRPW4oMjgzKSxKPW8oUSksWj1uKDI4NSksZWU9byhaKSx0ZT1uKDI4NiksbmU9byh0ZSkscmU9bigyOTgpLG9lPW8ocmUpLHNlPW4oMzA0KSxpZT1vKHNlKSxhZT1uKDMwOCksbGU9byhhZSksdWU9bigzMDcpLGNlPW8odWUpLGRlPW4oMzA2KSxfZT1vKGRlKSxwZT1uKDMwNSksZmU9byhwZSksbWU9bigyOTUpLGhlPW8obWUpLGdlPW4oMzE4KSxiZT1vKGdlKSxFZT1uKDMxNykseWU9byhFZSksdmU9bigzMTYpLFRlPW8odmUpLEFlPW4oMzEzKSxDZT1vKEFlKSxPZT1uKDMxMSksU2U9byhPZSksUmU9bigzMTIpLGplPW8oUmUpLHhlPW4oMjkyKSxMZT1vKHhlKSxEZT1uKDI5NCksd2U9byhEZSksTWU9bigyOTEpLGtlPW8oTWUpLEllPW4oMjg3KSxQZT1vKEllKSxOZT1uKDMwOSksSGU9byhOZSksRmU9bigyOTYpLEJlPW8oRmUpLFVlPW4oMjkzKSxHZT1vKFVlKSx6ZT1uKDMxMCksVmU9byh6ZSksV2U9bigyODgpLFllPW8oV2UpLHFlPW4oMzE5KSxLZT1vKHFlKSxYZT1uKDI5OSksJGU9byhYZSksUWU9bigzMDApLEplPW8oUWUpLFplPW4oMzAxKSxldD1vKFplKSx0dD1uKDEzOSksbnQ9byh0dCkscnQ9bigzMDIpLG90PW8ocnQpLHN0PW4oMjkwKSxpdD1vKHN0KSxhdD1uKDMwMyksbHQ9byhhdCksdXQ9bigyNzYpLGN0PW8odXQpLGR0PW4oMzE0KSxfdD1vKGR0KSxwdD1uKDMxNSksZnQ9byhwdCksbXQ9bigzMjApLGh0PW8obXQpLGd0PW4oMzIxKSxidD1vKGd0KSxFdD1uKDI4OSkseXQ9byhFdCksdnQ9bigxNDApLFR0PW8odnQpLEF0PW4oMjk3KSxDdD1vKEF0KSxPdD1uKDEzOCksU3Q9cihPdCksUnQ9bigzMjQpLGp0PXIoUnQpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByPVsoMCxQLnN5c3RlbVRodW5rTWlkZGxld2FyZSkobildLG89SS5kZWZhdWx0Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX3x8Ty5jb21wb3NlO3JldHVybigwLE8uY3JlYXRlU3RvcmUpKGUsdCxvKE8uYXBwbHlNaWRkbGV3YXJlLmFwcGx5KHZvaWQgMCxyKSkpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4oMCxQLmlzT2JqZWN0KShlKSYmISgwLFAuaXNBcnJheSkoZSk/ZTooMCxQLmlzRnVuYykoZSk/cyhlKHQpLHQpOigwLFAuaXNBcnJheSkoZSk/ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSx0KX0pLnJlZHVjZShhLHt9KTp7fX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxvPXIuaGFzTG9hZGVkLHM9bztyZXR1cm4oMCxQLmlzT2JqZWN0KShlKSYmISgwLFAuaXNBcnJheSkoZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFmdGVyTG9hZCYmKHM9ITAsZChlLmFmdGVyTG9hZCkuY2FsbCh0aGlzLHQpKSwoMCxQLmlzRnVuYykoZSk/aS5jYWxsKHRoaXMsZSh0KSx0LHtoYXNMb2FkZWQ6c30pOigwLFAuaXNBcnJheSkoZSk/ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChuLGUsdCx7aGFzTG9hZGVkOnN9KX0pOnN9ZnVuY3Rpb24gYSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighKDAsUC5pc09iamVjdCkoZSkpcmV0dXJue307aWYoISgwLFAuaXNPYmplY3QpKHQpKXJldHVybiBlO3Qud3JhcENvbXBvbmVudHMmJigoMCxQLm9iak1hcCkodC53cmFwQ29tcG9uZW50cyxmdW5jdGlvbihuLHIpe3ZhciBvPWUuY29tcG9uZW50cyYmZS5jb21wb25lbnRzW3JdO28mJkFycmF5LmlzQXJyYXkobyk/KGUuY29tcG9uZW50c1tyXT1vLmNvbmNhdChbbl0pLGRlbGV0ZSB0LndyYXBDb21wb25lbnRzW3JdKTpvJiYoZS5jb21wb25lbnRzW3JdPVtvLG5dLGRlbGV0ZSB0LndyYXBDb21wb25lbnRzW3JdKX0pLCgwLGYuZGVmYXVsdCkodC53cmFwQ29tcG9uZW50cykubGVuZ3RofHxkZWxldGUgdC53cmFwQ29tcG9uZW50cyk7dmFyIG49ZS5zdGF0ZVBsdWdpbnM7aWYoKDAsUC5pc09iamVjdCkobikpZm9yKHZhciByIGluIG4pe3ZhciBvPW5bcl07aWYoKDAsUC5pc09iamVjdCkobykmJigwLFAuaXNPYmplY3QpKG8ud3JhcEFjdGlvbnMpKXt2YXIgcz1vLndyYXBBY3Rpb25zO2Zvcih2YXIgaSBpbiBzKXt2YXIgYT1zW2ldO0FycmF5LmlzQXJyYXkoYSl8fChhPVthXSxzW2ldPWEpLHQmJnQuc3RhdGVQbHVnaW5zJiZ0LnN0YXRlUGx1Z2luc1tyXSYmdC5zdGF0ZVBsdWdpbnNbcl0ud3JhcEFjdGlvbnMmJnQuc3RhdGVQbHVnaW5zW3JdLndyYXBBY3Rpb25zW2ldJiYodC5zdGF0ZVBsdWdpbnNbcl0ud3JhcEFjdGlvbnNbaV09c1tpXS5jb25jYXQodC5zdGF0ZVBsdWdpbnNbcl0ud3JhcEFjdGlvbnNbaV0pKX19fXJldHVybigwLHguZGVmYXVsdCkoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiB1KCgwLFAub2JqTWFwKShlLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZHVjZXJzfSkpfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9KDAsZi5kZWZhdWx0KShlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdFtuXT1jKGVbbl0pLHR9LHt9KTtyZXR1cm4oMCxmLmRlZmF1bHQpKHQpLmxlbmd0aD8oMCxMLmNvbWJpbmVSZWR1Y2VycykodCk6Tn1mdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgUy5NYXAsbj1hcmd1bWVudHNbMV07aWYoIWUpcmV0dXJuIHQ7dmFyIHI9ZVtuLnR5cGVdO2lmKHIpe3ZhciBvPWQocikodCxuKTtyZXR1cm4gbnVsbD09PW8/dDpvfXJldHVybiB0fX1mdW5jdGlvbiBkKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQubG9nRXJyb3JzLHI9dm9pZCAwPT09bnx8bjtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7dHJ5e2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCksbz0wO288dDtvKyspbltvXT1hcmd1bWVudHNbb107cmV0dXJuIGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobikpfWNhdGNoKGUpe3JldHVybiByJiZjb25zb2xlLmVycm9yKGUpLG51bGx9fX1mdW5jdGlvbiBfKGUsdCxuKXtyZXR1cm4gbyhlLHQsbil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBwPW4oMzApLGY9cihwKSxtPW4oMjIpLGg9cihtKSxnPW4oMjEpLGI9cihnKSxFPW4oMikseT1yKEUpLHY9bigzKSxUPXIodiksQT1uKDApLEM9cihBKSxPPW4oNTkwKSxTPW4oNyksUj1yKFMpLGo9bigyNjcpLHg9cihqKSxMPW4oNTkxKSxEPW4oMTM3KSx3PXIoRCksTT1uKDY5KSxrPW4oMjcpLEk9cihrKSxQPW4oOCksTj1mdW5jdGlvbihlKXtyZXR1cm4gZX0sSD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307KDAseS5kZWZhdWx0KSh0aGlzLGUpLCgwLHguZGVmYXVsdCkodGhpcyx7c3RhdGU6e30scGx1Z2luczpbXSxzeXN0ZW06e2NvbmZpZ3M6e30sZm46e30sY29tcG9uZW50czp7fSxyb290SW5qZWN0czp7fSxzdGF0ZVBsdWdpbnM6e319LGJvdW5kU3lzdGVtOnt9LHRvb2xib3g6e319LHQpLHRoaXMuZ2V0U3lzdGVtPXRoaXMuX2dldFN5c3RlbS5iaW5kKHRoaXMpLHRoaXMuc3RvcmU9XyhOLCgwLFMuZnJvbUpTKSh0aGlzLnN0YXRlKSx0aGlzLmdldFN5c3RlbSksdGhpcy5idWlsZFN5c3RlbSghMSksdGhpcy5yZWdpc3Rlcih0aGlzLnBsdWdpbnMpfXJldHVybigwLFQuZGVmYXVsdCkoZSxbe2tleToiZ2V0U3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmV9fSx7a2V5OiJyZWdpc3RlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxuPXMoZSx0aGlzLmdldFN5c3RlbSgpKTthKHRoaXMuc3lzdGVtLG4pLHQmJnRoaXMuYnVpbGRTeXN0ZW0oKSxpLmNhbGwodGhpcy5zeXN0ZW0sZSx0aGlzLmdldFN5c3RlbSgpKSYmdGhpcy5idWlsZFN5c3RlbSgpfX0se2tleToiYnVpbGRTeXN0ZW0iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSx0PXRoaXMuZ2V0U3RvcmUoKS5kaXNwYXRjaCxuPXRoaXMuZ2V0U3RvcmUoKS5nZXRTdGF0ZTt0aGlzLmJvdW5kU3lzdGVtPSgwLGIuZGVmYXVsdCkoe30sdGhpcy5nZXRSb290SW5qZWN0cygpLHRoaXMuZ2V0V3JhcHBlZEFuZEJvdW5kQWN0aW9ucyh0KSx0aGlzLmdldFdyYXBwZWRBbmRCb3VuZFNlbGVjdG9ycyhuLHRoaXMuZ2V0U3lzdGVtKSx0aGlzLmdldFN0YXRlVGh1bmtzKG4pLHRoaXMuZ2V0Rm4oKSx0aGlzLmdldENvbmZpZ3MoKSksZSYmdGhpcy5yZWJ1aWxkUmVkdWNlcigpfX0se2tleToiX2dldFN5c3RlbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZFN5c3RlbX19LHtrZXk6ImdldFJvb3RJbmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLGIuZGVmYXVsdCkoe2dldFN5c3RlbTp0aGlzLmdldFN5c3RlbSxnZXRTdG9yZTp0aGlzLmdldFN0b3JlLmJpbmQodGhpcyksZ2V0Q29tcG9uZW50czp0aGlzLmdldENvbXBvbmVudHMuYmluZCh0aGlzKSxnZXRTdGF0ZTp0aGlzLmdldFN0b3JlKCkuZ2V0U3RhdGUsZ2V0Q29uZmlnczp0aGlzLl9nZXRDb25maWdzLmJpbmQodGhpcyksSW06Ui5kZWZhdWx0LFJlYWN0OkMuZGVmYXVsdH0sdGhpcy5zeXN0ZW0ucm9vdEluamVjdHN8fHt9KX19LHtrZXk6Il9nZXRDb25maWdzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN5c3RlbS5jb25maWdzfX0se2tleToiZ2V0Q29uZmlncyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57Y29uZmlnczp0aGlzLnN5c3RlbS5jb25maWdzfX19LHtrZXk6InNldENvbmZpZ3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3lzdGVtLmNvbmZpZ3M9ZX19LHtrZXk6InJlYnVpbGRSZWR1Y2VyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RvcmUucmVwbGFjZVJlZHVjZXIobCh0aGlzLnN5c3RlbS5zdGF0ZVBsdWdpbnMpKX19LHtrZXk6ImdldFR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybigwLFAub2JqUmVkdWNlKSh0aGlzLnN5c3RlbS5zdGF0ZVBsdWdpbnMsZnVuY3Rpb24obixyKXt2YXIgbz1uW2VdO2lmKG8pcmV0dXJuKDAsaC5kZWZhdWx0KSh7fSxyK3Qsbyl9KX19LHtrZXk6ImdldFNlbGVjdG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUeXBlKCJzZWxlY3RvcnMiKX19LHtrZXk6ImdldEFjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRUeXBlKCJhY3Rpb25zIik7cmV0dXJuKDAsUC5vYmpNYXApKGUsZnVuY3Rpb24oZSl7cmV0dXJuKDAsUC5vYmpSZWR1Y2UpKGUsZnVuY3Rpb24oZSx0KXtpZigoMCxQLmlzRm4pKGUpKXJldHVybigwLGguZGVmYXVsdCkoe30sdCxlKX0pfSl9fSx7a2V5OiJnZXRXcmFwcGVkQW5kQm91bmRBY3Rpb25zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5nZXRCb3VuZEFjdGlvbnMoZSk7cmV0dXJuKDAsUC5vYmpNYXApKG4sZnVuY3Rpb24oZSxuKXt2YXIgcj10LnN5c3RlbS5zdGF0ZVBsdWdpbnNbbi5zbGljZSgwLC03KV0ud3JhcEFjdGlvbnM7cmV0dXJuIHI/KDAsUC5vYmpNYXApKGUsZnVuY3Rpb24oZSxuKXt2YXIgbz1yW25dO3JldHVybiBvPyhBcnJheS5pc0FycmF5KG8pfHwobz1bb10pLG8ucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gbihlLHQuZ2V0U3lzdGVtKCkpLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfTtpZighKDAsUC5pc0ZuKShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ3cmFwQWN0aW9ucyBuZWVkcyB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBuZXcgZnVuY3Rpb24gKGllIHRoZSB3cmFwcGVkIGFjdGlvbikiKTtyZXR1cm4gZChyKX0sZXx8RnVuY3Rpb24ucHJvdG90eXBlKSk6ZX0pOmV9KX19LHtrZXk6ImdldFdyYXBwZWRBbmRCb3VuZFNlbGVjdG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5nZXRCb3VuZFNlbGVjdG9ycyhlLHQpO3JldHVybigwLFAub2JqTWFwKShyLGZ1bmN0aW9uKHQscil7dmFyIG89W3Iuc2xpY2UoMCwtOSldLHM9bi5zeXN0ZW0uc3RhdGVQbHVnaW5zW29dLndyYXBTZWxlY3RvcnM7cmV0dXJuIHM/KDAsUC5vYmpNYXApKHQsZnVuY3Rpb24odCxyKXt2YXIgaT1zW3JdO3JldHVybiBpPyhBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pLGkucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIHM9ZnVuY3Rpb24oKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiByKHQsbi5nZXRTeXN0ZW0oKSkuYXBwbHkodm9pZCAwLFtlKCkuZ2V0SW4obyldLmNvbmNhdChpKSl9O2lmKCEoMCxQLmlzRm4pKHMpKXRocm93IG5ldyBUeXBlRXJyb3IoIndyYXBTZWxlY3RvciBuZWVkcyB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBuZXcgZnVuY3Rpb24gKGllIHRoZSB3cmFwcGVkIGFjdGlvbikiKTtyZXR1cm4gc30sdHx8RnVuY3Rpb24ucHJvdG90eXBlKSk6dH0pOnR9KX19LHtrZXk6ImdldFN0YXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsZi5kZWZhdWx0KSh0aGlzLnN5c3RlbS5zdGF0ZVBsdWdpbnMpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0W25dPWUuZ2V0KG4pLHR9LHt9KX19LHtrZXk6ImdldFN0YXRlVGh1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxmLmRlZmF1bHQpKHRoaXMuc3lzdGVtLnN0YXRlUGx1Z2lucykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLmdldChuKX0sdH0se30pfX0se2tleToiZ2V0Rm4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2ZuOnRoaXMuc3lzdGVtLmZufX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnN5c3RlbS5jb21wb25lbnRzW2VdO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24ucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG4oZSx0LmdldFN5c3RlbSgpKX0pOnZvaWQgMCE9PWU/dGhpcy5zeXN0ZW0uY29tcG9uZW50c1tlXTp0aGlzLnN5c3RlbS5jb21wb25lbnRzfX0se2tleToiZ2V0Qm91bmRTZWxlY3RvcnMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsUC5vYmpNYXApKHRoaXMuZ2V0U2VsZWN0b3JzKCksZnVuY3Rpb24obixyKXt2YXIgbz1bci5zbGljZSgwLC05KV0scz1mdW5jdGlvbigpe3JldHVybiBlKCkuZ2V0SW4obyl9O3JldHVybigwLFAub2JqTWFwKShuLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobiksbz0wO288bjtvKyspcltvXT1hcmd1bWVudHNbb107dmFyIGk9ZChlKS5hcHBseShudWxsLFtzKCldLmNvbmNhdChyKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWQoaSkodCgpKSksaX19KX0pfX0se2tleToiZ2V0Qm91bmRBY3Rpb25zIix2YWx1ZTpmdW5jdGlvbihlKXtlPWV8fHRoaXMuZ2V0U3RvcmUoKS5kaXNwYXRjaDt2YXIgdD10aGlzLmdldEFjdGlvbnMoKSxuPWZ1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KDAsUC5vYmpNYXApKHQsZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9KTpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX1jYXRjaCh0KXtlPXt0eXBlOk0uTkVXX1RIUk9XTl9FUlIsZXJyb3I6ITAscGF5bG9hZDooMCx3LmRlZmF1bHQpKHQpfX1maW5hbGx5e3JldHVybiBlfX19O3JldHVybigwLFAub2JqTWFwKSh0LGZ1bmN0aW9uKHQpe3JldHVybigwLE8uYmluZEFjdGlvbkNyZWF0b3JzKShuKHQpLGUpfSl9fSx7a2V5OiJnZXRNYXBTdGF0ZVRvUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4oMCxiLmRlZmF1bHQpKHt9LGUuZ2V0U3lzdGVtKCkpfX19LHtrZXk6ImdldE1hcERpc3BhdGNoVG9Qcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuKDAseC5kZWZhdWx0KSh7fSx0LmdldFdyYXBwZWRBbmRCb3VuZEFjdGlvbnMobiksdC5nZXRGbigpLGUpfX19XSksZX0oKTt0LmRlZmF1bHQ9SH0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDMzNiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzMzgpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQxKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDM0NSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzNDYpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQ3KSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDM0OCksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtuKDU2KSxuKDM3MSksZS5leHBvcnRzPW4oMTApLkFycmF5LmZyb219LGZ1bmN0aW9uKGUsdCxuKXtuKDc4KSxuKDU2KSxlLmV4cG9ydHM9bigzNjkpfSxmdW5jdGlvbihlLHQsbil7big3OCksbig1NiksZS5leHBvcnRzPW4oMzcwKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTApLG89ci5KU09OfHwoci5KU09OPXtzdHJpbmdpZnk6SlNPTi5zdHJpbmdpZnl9KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uc3RyaW5naWZ5LmFwcGx5KG8sYXJndW1lbnRzKX19LGZ1bmN0aW9uKGUsdCxuKXtuKDM3MyksZS5leHBvcnRzPW4oMTApLk9iamVjdC5hc3NpZ259LGZ1bmN0aW9uKGUsdCxuKXtuKDM3NCk7dmFyIHI9bigxMCkuT2JqZWN0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiByLmNyZWF0ZShlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe24oMzc1KTt2YXIgcj1uKDEwKS5PYmplY3Q7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5kZWZpbmVQcm9wZXJ0eShlLHQsbil9fSxmdW5jdGlvbihlLHQsbil7bigzNzYpLGUuZXhwb3J0cz1uKDEwKS5PYmplY3QuZ2V0UHJvdG90eXBlT2Z9LGZ1bmN0aW9uKGUsdCxuKXtuKDM3NyksZS5leHBvcnRzPW4oMTApLk9iamVjdC5rZXlzfSxmdW5jdGlvbihlLHQsbil7bigzNzgpLGUuZXhwb3J0cz1uKDEwKS5PYmplY3Quc2V0UHJvdG90eXBlT2Z9LGZ1bmN0aW9uKGUsdCxuKXtuKDIxOCksbig1Niksbig3OCksbigzNzkpLG4oMzgxKSxuKDM4MiksZS5leHBvcnRzPW4oMTApLlByb21pc2V9LGZ1bmN0aW9uKGUsdCxuKXtuKDM4MCksbigyMTgpLG4oMzgzKSxuKDM4NCksZS5leHBvcnRzPW4oMTApLlN5bWJvbH0sZnVuY3Rpb24oZSx0LG4pe24oNTYpLG4oNzgpLGUuZXhwb3J0cz1uKDExMSkuZigiaXRlcmF0b3IiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09ciYmciBpbiBlKXRocm93IFR5cGVFcnJvcihuKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDYpLG89bigxMDgpLHM9bigzNjgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3ZhciBhLGw9cih0KSx1PW8obC5sZW5ndGgpLGM9cyhpLHUpO2lmKGUmJm4hPW4pe2Zvcig7dT5jOylpZigoYT1sW2MrK10pIT1hKXJldHVybiEwfWVsc2UgZm9yKDt1PmM7YysrKWlmKChlfHxjIGluIGwpJiZsW2NdPT09bilyZXR1cm4gZXx8Y3x8MDtyZXR1cm4hZSYmLTF9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI4KSxvPW4oNTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dCBpbiBlP3IuZihlLHQsbygwLG4pKTplW3RdPW59fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1Myksbz1uKDEwNCkscz1uKDc1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKSxuPW8uZjtpZihuKWZvcih2YXIgaSxhPW4oZSksbD1zLmYsdT0wO2EubGVuZ3RoPnU7KWwuY2FsbChlLGk9YVt1KytdKSYmdC5wdXNoKGkpO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDMpLG89bigyMDUpLHM9bigyMDQpLGk9bigyNSksYT1uKDEwOCksbD1uKDExMiksdT17fSxjPXt9LHQ9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGQsXyl7dmFyIHAsZixtLGgsZz1fP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OmwoZSksYj1yKG4sZCx0PzI6MSksRT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHMoZykpe2ZvcihwPWEoZS5sZW5ndGgpO3A+RTtFKyspaWYoKGg9dD9iKGkoZj1lW0VdKVswXSxmWzFdKTpiKGVbRV0pKT09PXV8fGg9PT1jKXJldHVybiBofWVsc2UgZm9yKG09Zy5jYWxsKGUpOyEoZj1tLm5leHQoKSkuZG9uZTspaWYoKGg9byhtLGIsZi52YWx1ZSx0KSk9PT11fHxoPT09YylyZXR1cm4gaH07dC5CUkVBSz11LHQuUkVUVVJOPWN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiByP2UoKTplLmNhbGwobik7Y2FzZSAxOnJldHVybiByP2UodFswXSk6ZS5jYWxsKG4sdFswXSk7Y2FzZSAyOnJldHVybiByP2UodFswXSx0WzFdKTplLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gcj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiByP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKG4sdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGUuYXBwbHkobix0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUyKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMDMpLG89big1NCkscz1uKDc2KSxpPXt9O24oMzYpKGksbigxNSkoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZS5wcm90b3R5cGU9cihpLHtuZXh0Om8oMSxuKX0pLHMoZSx0KyIgSXRlcmF0b3IiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzcpKCJtZXRhIiksbz1uKDM3KSxzPW4oMzUpLGk9bigyOCkuZixhPTAsbD1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFuKDQ0KShmdW5jdGlvbigpe3JldHVybiBsKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksYz1mdW5jdGlvbihlKXtpKGUscix7dmFsdWU6e2k6Ik8iKyArK2Esdzp7fX19KX0sZD1mdW5jdGlvbihlLHQpe2lmKCFvKGUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOigic3RyaW5nIj09dHlwZW9mIGU/IlMiOiJQIikrZTtpZighcyhlLHIpKXtpZighbChlKSlyZXR1cm4iRiI7aWYoIXQpcmV0dXJuIkUiO2MoZSl9cmV0dXJuIGVbcl0uaX0sXz1mdW5jdGlvbihlLHQpe2lmKCFzKGUscikpe2lmKCFsKGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO2MoZSl9cmV0dXJuIGVbcl0ud30scD1mdW5jdGlvbihlKXtyZXR1cm4gdSYmZi5ORUVEJiZsKGUpJiYhcyhlLHIpJiZjKGUpLGV9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZCxnZXRXZWFrOl8sb25GcmVlemU6cH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE2KSxvPW4oMjE3KS5zZXQscz1yLk11dGF0aW9uT2JzZXJ2ZXJ8fHIuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixpPXIucHJvY2VzcyxhPXIuUHJvbWlzZSxsPSJwcm9jZXNzIj09big1MikoaSk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHU9ZnVuY3Rpb24oKXt2YXIgcixvO2ZvcihsJiYocj1pLmRvbWFpbikmJnIuZXhpdCgpO2U7KXtvPWUuZm4sZT1lLm5leHQ7dHJ5e28oKX1jYXRjaChyKXt0aHJvdyBlP24oKTp0PXZvaWQgMCxyfX10PXZvaWQgMCxyJiZyLmVudGVyKCl9O2lmKGwpbj1mdW5jdGlvbigpe2kubmV4dFRpY2sodSl9O2Vsc2UgaWYocyl7dmFyIGM9ITAsZD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IHModSkub2JzZXJ2ZShkLHtjaGFyYWN0ZXJEYXRhOiEwfSksbj1mdW5jdGlvbigpe2QuZGF0YT1jPSFjfX1lbHNlIGlmKGEmJmEucmVzb2x2ZSl7dmFyIF89YS5yZXNvbHZlKCk7bj1mdW5jdGlvbigpe18udGhlbih1KX19ZWxzZSBuPWZ1bmN0aW9uKCl7by5jYWxsKHIsdSl9O3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz17Zm46cixuZXh0OnZvaWQgMH07dCYmKHQubmV4dD1vKSxlfHwoZT1vLG4oKSksdD1vfX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1Myksbz1uKDEwNCkscz1uKDc1KSxpPW4oNTUpLGE9bigyMDMpLGw9T2JqZWN0LmFzc2lnbjtlLmV4cG9ydHM9IWx8fG4oNDQpKGZ1bmN0aW9uKCl7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLHI9ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtuXT03LHIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1lfSksNyE9bCh7fSxlKVtuXXx8T2JqZWN0LmtleXMobCh7fSx0KSkuam9pbigiIikhPXJ9KT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1pKGUpLGw9YXJndW1lbnRzLmxlbmd0aCx1PTEsYz1vLmYsZD1zLmY7bD51Oylmb3IodmFyIF8scD1hKGFyZ3VtZW50c1t1KytdKSxmPWM/cihwKS5jb25jYXQoYyhwKSk6cihwKSxtPWYubGVuZ3RoLGg9MDttPmg7KWQuY2FsbChwLF89ZltoKytdKSYmKG5bX109cFtfXSk7cmV0dXJuIG59Omx9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI4KSxvPW4oMjUpLHM9big1Myk7ZS5leHBvcnRzPW4oMzIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7byhlKTtmb3IodmFyIG4saT1zKHQpLGE9aS5sZW5ndGgsbD0wO2E+bDspci5mKGUsbj1pW2wrK10sdFtuXSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0Niksbz1uKDIwOSkuZixzPXt9LnRvU3RyaW5nLGk9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxhPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbyhlKX1jYXRjaChlKXtyZXR1cm4gaS5zbGljZSgpfX07ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGkmJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoZSk/YShlKTpvKHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzYpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpbiYmZVtvXT9lW29dPXRbb106cihlLG8sdFtvXSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNyksbz1uKDI1KSxzPWZ1bmN0aW9uKGUsdCl7aWYobyhlKSwhcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxyKXt0cnl7cj1uKDQzKShGdW5jdGlvbi5jYWxsLG4oMjA4KS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSxyKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHMoZSxuKSx0P2UuX19wcm90b19fPW46cihlLG4pLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE2KSxvPW4oMTApLHM9bigyOCksaT1uKDMyKSxhPW4oMTUpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBvW2VdP29bZV06cltlXTtpJiZ0JiYhdFthXSYmcy5mKHQsYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTA3KSxvPW4oOTkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcyxpLGE9U3RyaW5nKG8odCkpLGw9cihuKSx1PWEubGVuZ3RoO3JldHVybiBsPDB8fGw+PXU/ZT8iIjp2b2lkIDA6KHM9YS5jaGFyQ29kZUF0KGwpLHM8NTUyOTZ8fHM+NTYzMTl8fGwrMT09PXV8fChpPWEuY2hhckNvZGVBdChsKzEpKTw1NjMyMHx8aT41NzM0Mz9lP2EuY2hhckF0KGwpOnM6ZT9hLnNsaWNlKGwsbCsyKTppLTU2MzIwKyhzLTU1Mjk2PDwxMCkrNjU1MzYpfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEwNyksbz1NYXRoLm1heCxzPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBlPXIoZSksZTwwP28oZSt0LDApOnMoZSx0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KSxvPW4oMTEyKTtlLmV4cG9ydHM9bigxMCkuZ2V0SXRlcmF0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtyZXR1cm4gcih0LmNhbGwoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTgpLG89bigxNSkoIml0ZXJhdG9yIikscz1uKDQ1KTtlLmV4cG9ydHM9bigxMCkuaXNJdGVyYWJsZT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSk7cmV0dXJuIHZvaWQgMCE9PXRbb118fCJAQGl0ZXJhdG9yImluIHR8fHMuaGFzT3duUHJvcGVydHkocih0KSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDMpLG89bigyMykscz1uKDU1KSxpPW4oMjA1KSxhPW4oMjA0KSxsPW4oMTA4KSx1PW4oMzUyKSxjPW4oMTEyKTtvKG8uUytvLkYqIW4oMjA3KShmdW5jdGlvbihlKXtBcnJheS5mcm9tKGUpfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihlKXt2YXIgdCxuLG8sZCxfPXMoZSkscD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LGY9YXJndW1lbnRzLmxlbmd0aCxtPWY+MT9hcmd1bWVudHNbMV06dm9pZCAwLGg9dm9pZCAwIT09bSxnPTAsYj1jKF8pO2lmKGgmJihtPXIobSxmPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksdm9pZCAwPT1ifHxwPT1BcnJheSYmYShiKSlmb3IodD1sKF8ubGVuZ3RoKSxuPW5ldyBwKHQpO3Q+ZztnKyspdShuLGcsaD9tKF9bZ10sZyk6X1tnXSk7ZWxzZSBmb3IoZD1iLmNhbGwoXyksbj1uZXcgcDshKG89ZC5uZXh0KCkpLmRvbmU7ZysrKXUobixnLGg/aShkLG0sW28udmFsdWUsZ10sITApOm8udmFsdWUpO3JldHVybiBuLmxlbmd0aD1nLG59fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNDkpLG89bigzNTgpLHM9big0NSksaT1uKDQ2KTtlLmV4cG9ydHM9bigyMDYpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24oZSx0KXt0aGlzLl90PWkoZSksdGhpcy5faT0wLHRoaXMuX2s9dH0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hZXx8bj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLG8oMSkpOiJrZXlzIj09dD9vKDAsbik6InZhbHVlcyI9PXQ/bygwLGVbbl0pOm8oMCxbbixlW25dXSl9LCJ2YWx1ZXMiKSxzLkFyZ3VtZW50cz1zLkFycmF5LHIoImtleXMiKSxyKCJ2YWx1ZXMiKSxyKCJlbnRyaWVzIil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIzKTtyKHIuUytyLkYsIk9iamVjdCIse2Fzc2lnbjpuKDM2MSl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjMpO3Ioci5TLCJPYmplY3QiLHtjcmVhdGU6bigxMDMpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIzKTtyKHIuUytyLkYqIW4oMzIpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0eTpuKDI4KS5mfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDU1KSxvPW4oMjEwKTtuKDIxMikoImdldFByb3RvdHlwZU9mIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyhyKGUpKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTUpLG89big1Myk7bigyMTIpKCJrZXlzIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyhyKGUpKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjMpO3Ioci5TLCJPYmplY3QiLHtzZXRQcm90b3R5cGVPZjpuKDM2NSkuc2V0fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxzLGksYT1uKDc0KSxsPW4oMTYpLHU9big0MyksYz1uKDk4KSxkPW4oMjMpLF89bigzNykscD1uKDczKSxmPW4oMzUwKSxtPW4oMzU0KSxoPW4oMjE2KSxnPW4oMjE3KS5zZXQsYj1uKDM2MCkoKSxFPW4oMTAyKSx5PW4oMjEzKSx2PW4oMjE0KSxUPWwuVHlwZUVycm9yLEE9bC5wcm9jZXNzLEM9bC5Qcm9taXNlLE89InByb2Nlc3MiPT1jKEEpLFM9ZnVuY3Rpb24oKXt9LFI9bz1FLmYsaj0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPUMucmVzb2x2ZSgxKSx0PShlLmNvbnN0cnVjdG9yPXt9KVtuKDE1KSgic3BlY2llcyIpXT1mdW5jdGlvbihlKXtlKFMsUyl9O3JldHVybihPfHwiZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KSYmZS50aGVuKFMpaW5zdGFuY2VvZiB0fWNhdGNoKGUpe319KCkseD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKCFfKGUpfHwiZnVuY3Rpb24iIT10eXBlb2YodD1lLnRoZW4pKSYmdH0sTD1mdW5jdGlvbihlLHQpe2lmKCFlLl9uKXtlLl9uPSEwO3ZhciBuPWUuX2M7YihmdW5jdGlvbigpe2Zvcih2YXIgcj1lLl92LG89MT09ZS5fcyxzPTA7bi5sZW5ndGg+czspIWZ1bmN0aW9uKHQpe3ZhciBuLHMsaT1vP3Qub2s6dC5mYWlsLGE9dC5yZXNvbHZlLGw9dC5yZWplY3QsdT10LmRvbWFpbjt0cnl7aT8ob3x8KDI9PWUuX2gmJk0oZSksZS5faD0xKSwhMD09PWk/bj1yOih1JiZ1LmVudGVyKCksbj1pKHIpLHUmJnUuZXhpdCgpKSxuPT09dC5wcm9taXNlP2woVCgiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKToocz14KG4pKT9zLmNhbGwobixhLGwpOmEobikpOmwocil9Y2F0Y2goZSl7bChlKX19KG5bcysrXSk7ZS5fYz1bXSxlLl9uPSExLHQmJiFlLl9oJiZEKGUpfSl9fSxEPWZ1bmN0aW9uKGUpe2cuY2FsbChsLGZ1bmN0aW9uKCl7dmFyIHQsbixyLG89ZS5fdixzPXcoZSk7aWYocyYmKHQ9eShmdW5jdGlvbigpe08/QS5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG8sZSk6KG49bC5vbnVuaGFuZGxlZHJlamVjdGlvbik/bih7cHJvbWlzZTplLHJlYXNvbjpvfSk6KHI9bC5jb25zb2xlKSYmci5lcnJvciYmci5lcnJvcigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixvKX0pLGUuX2g9T3x8dyhlKT8yOjEpLGUuX2E9dm9pZCAwLHMmJnQuZSl0aHJvdyB0LnZ9KX0sdz1mdW5jdGlvbihlKXtpZigxPT1lLl9oKXJldHVybiExO2Zvcih2YXIgdCxuPWUuX2F8fGUuX2Mscj0wO24ubGVuZ3RoPnI7KWlmKHQ9bltyKytdLHQuZmFpbHx8IXcodC5wcm9taXNlKSlyZXR1cm4hMTtyZXR1cm4hMH0sTT1mdW5jdGlvbihlKXtnLmNhbGwobCxmdW5jdGlvbigpe3ZhciB0O08/QS5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIixlKToodD1sLm9ucmVqZWN0aW9uaGFuZGxlZCkmJnQoe3Byb21pc2U6ZSxyZWFzb246ZS5fdn0pfSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0Ll9kfHwodC5fZD0hMCx0PXQuX3d8fHQsdC5fdj1lLHQuX3M9Mix0Ll9hfHwodC5fYT10Ll9jLnNsaWNlKCkpLEwodCwhMCkpfSxJPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcztpZighbi5fZCl7bi5fZD0hMCxuPW4uX3d8fG47dHJ5e2lmKG49PT1lKXRocm93IFQoIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7KHQ9eChlKSk/YihmdW5jdGlvbigpe3ZhciByPXtfdzpuLF9kOiExfTt0cnl7dC5jYWxsKGUsdShJLHIsMSksdShrLHIsMSkpfWNhdGNoKGUpe2suY2FsbChyLGUpfX0pOihuLl92PWUsbi5fcz0xLEwobiwhMSkpfWNhdGNoKGUpe2suY2FsbCh7X3c6bixfZDohMX0sZSl9fX07anx8KEM9ZnVuY3Rpb24oZSl7Zih0aGlzLEMsIlByb21pc2UiLCJfaCIpLHAoZSksci5jYWxsKHRoaXMpO3RyeXtlKHUoSSx0aGlzLDEpLHUoayx0aGlzLDEpKX1jYXRjaChlKXtrLmNhbGwodGhpcyxlKX19LHI9ZnVuY3Rpb24oZSl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0sci5wcm90b3R5cGU9bigzNjQpKEMucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49UihoKHRoaXMsQykpO3JldHVybiBuLm9rPSJmdW5jdGlvbiIhPXR5cGVvZiBlfHxlLG4uZmFpbD0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdCxuLmRvbWFpbj1PP0EuZG9tYWluOnZvaWQgMCx0aGlzLl9jLnB1c2gobiksdGhpcy5fYSYmdGhpcy5fYS5wdXNoKG4pLHRoaXMuX3MmJkwodGhpcywhMSksbi5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxlKX19KSxzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHI7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPXUoSSxlLDEpLHRoaXMucmVqZWN0PXUoayxlLDEpfSxFLmY9Uj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PUN8fGU9PT1pP25ldyBzKGUpOm8oZSl9KSxkKGQuRytkLlcrZC5GKiFqLHtQcm9taXNlOkN9KSxuKDc2KShDLCJQcm9taXNlIiksbigzNjYpKCJQcm9taXNlIiksaT1uKDEwKS5Qcm9taXNlLGQoZC5TK2QuRiohaiwiUHJvbWlzZSIse3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1SKHRoaXMpO3JldHVybigwLHQucmVqZWN0KShlKSx0LnByb21pc2V9fSksZChkLlMrZC5GKihhfHwhaiksIlByb21pc2UiLHtyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiB2KGEmJnRoaXM9PT1pP0M6dGhpcyxlKX19KSxkKGQuUytkLkYqIShqJiZuKDIwNykoZnVuY3Rpb24oZSl7Qy5hbGwoZSkuY2F0Y2goUyl9KSksIlByb21pc2UiLHthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPVIodCkscj1uLnJlc29sdmUsbz1uLnJlamVjdCxzPXkoZnVuY3Rpb24oKXt2YXIgbj1bXSxzPTAsaT0xO20oZSwhMSxmdW5jdGlvbihlKXt2YXIgYT1zKyssbD0hMTtuLnB1c2godm9pZCAwKSxpKyssdC5yZXNvbHZlKGUpLnRoZW4oZnVuY3Rpb24oZSl7bHx8KGw9ITAsblthXT1lLC0taXx8cihuKSl9LG8pfSksLS1pfHxyKG4pfSk7cmV0dXJuIHMuZSYmbyhzLnYpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49Uih0KSxyPW4ucmVqZWN0LG89eShmdW5jdGlvbigpe20oZSwhMSxmdW5jdGlvbihlKXt0LnJlc29sdmUoZSkudGhlbihuLnJlc29sdmUscil9KX0pO3JldHVybiBvLmUmJnIoby52KSxuLnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNiksbz1uKDM1KSxzPW4oMzIpLGk9bigyMyksYT1uKDIxNSksbD1uKDM1OSkuS0VZLHU9big0NCksYz1uKDEwNiksZD1uKDc2KSxfPW4oNzcpLHA9bigxNSksZj1uKDExMSksbT1uKDExMCksaD1uKDM1MyksZz1uKDM1NiksYj1uKDI1KSxFPW4oNDYpLHk9bigxMDkpLHY9big1NCksVD1uKDEwMyksQT1uKDM2MyksQz1uKDIwOCksTz1uKDI4KSxTPW4oNTMpLFI9Qy5mLGo9Ty5mLHg9QS5mLEw9ci5TeW1ib2wsRD1yLkpTT04sdz1EJiZELnN0cmluZ2lmeSxNPXAoIl9oaWRkZW4iKSxrPXAoInRvUHJpbWl0aXZlIiksST17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPWMoInN5bWJvbC1yZWdpc3RyeSIpLE49Yygic3ltYm9scyIpLEg9Yygib3Atc3ltYm9scyIpLEY9T2JqZWN0LnByb3RvdHlwZSxCPSJmdW5jdGlvbiI9PXR5cGVvZiBMLFU9ci5RT2JqZWN0LEc9IVV8fCFVLnByb3RvdHlwZXx8IVUucHJvdG90eXBlLmZpbmRDaGlsZCx6PXMmJnUoZnVuY3Rpb24oKXtyZXR1cm4gNyE9VChqKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVIoRix0KTtyJiZkZWxldGUgRlt0XSxqKGUsdCxuKSxyJiZlIT09RiYmaihGLHQscil9OmosVj1mdW5jdGlvbihlKXt2YXIgdD1OW2VdPVQoTC5wcm90b3R5cGUpO3JldHVybiB0Ll9rPWUsdH0sVz1CJiYic3ltYm9sIj09dHlwZW9mIEwuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEx9LFk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09RiYmWShILHQsbiksYihlKSx0PXkodCwhMCksYihuKSxvKE4sdCk/KG4uZW51bWVyYWJsZT8obyhlLE0pJiZlW01dW3RdJiYoZVtNXVt0XT0hMSksbj1UKG4se2VudW1lcmFibGU6digwLCExKX0pKToobyhlLE0pfHxqKGUsTSx2KDEse30pKSxlW01dW3RdPSEwKSx6KGUsdCxuKSk6aihlLHQsbil9LHE9ZnVuY3Rpb24oZSx0KXtiKGUpO2Zvcih2YXIgbixyPWgodD1FKHQpKSxvPTAscz1yLmxlbmd0aDtzPm87KVkoZSxuPXJbbysrXSx0W25dKTtyZXR1cm4gZX0sSz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P1QoZSk6cShUKGUpLHQpfSxYPWZ1bmN0aW9uKGUpe3ZhciB0PUkuY2FsbCh0aGlzLGU9eShlLCEwKSk7cmV0dXJuISh0aGlzPT09RiYmbyhOLGUpJiYhbyhILGUpKSYmKCEodHx8IW8odGhpcyxlKXx8IW8oTixlKXx8byh0aGlzLE0pJiZ0aGlzW01dW2VdKXx8dCl9LCQ9ZnVuY3Rpb24oZSx0KXtpZihlPUUoZSksdD15KHQsITApLGUhPT1GfHwhbyhOLHQpfHxvKEgsdCkpe3ZhciBuPVIoZSx0KTtyZXR1cm4hbnx8IW8oTix0KXx8byhlLE0pJiZlW01dW3RdfHwobi5lbnVtZXJhYmxlPSEwKSxufX0sUT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj14KEUoZSkpLHI9W10scz0wO24ubGVuZ3RoPnM7KW8oTix0PW5bcysrXSl8fHQ9PU18fHQ9PWx8fHIucHVzaCh0KTtyZXR1cm4gcn0sSj1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lPT09RixyPXgobj9IOkUoZSkpLHM9W10saT0wO3IubGVuZ3RoPmk7KSFvKE4sdD1yW2krK10pfHxuJiYhbyhGLHQpfHxzLnB1c2goTlt0XSk7cmV0dXJuIHN9O0J8fChMPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEwpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIGU9Xyhhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksdD1mdW5jdGlvbihuKXt0aGlzPT09RiYmdC5jYWxsKEgsbiksbyh0aGlzLE0pJiZvKHRoaXNbTV0sZSkmJih0aGlzW01dW2VdPSExKSx6KHRoaXMsZSx2KDEsbikpfTtyZXR1cm4gcyYmRyYmeihGLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6dH0pLFYoZSl9LGEoTC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksQy5mPSQsTy5mPVksbigyMDkpLmY9QS5mPVEsbig3NSkuZj1YLG4oMTA0KS5mPUoscyYmIW4oNzQpJiZhKEYsInByb3BlcnR5SXNFbnVtZXJhYmxlIixYLCEwKSxmLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFYocChlKSl9KSxpKGkuRytpLlcraS5GKiFCLHtTeW1ib2w6TH0pO2Zvcih2YXIgWj0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIsIiksZWU9MDtaLmxlbmd0aD5lZTspcChaW2VlKytdKTtmb3IodmFyIHRlPVMocC5zdG9yZSksbmU9MDt0ZS5sZW5ndGg+bmU7KW0odGVbbmUrK10pO2koaS5TK2kuRiohQiwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKGUpe3JldHVybiBvKFAsZSs9IiIpP1BbZV06UFtlXT1MKGUpfSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIVcoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciB0IGluIFApaWYoUFt0XT09PWUpcmV0dXJuIHR9LHVzZVNldHRlcjpmdW5jdGlvbigpe0c9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0c9ITF9fSksaShpLlMraS5GKiFCLCJPYmplY3QiLHtjcmVhdGU6SyxkZWZpbmVQcm9wZXJ0eTpZLGRlZmluZVByb3BlcnRpZXM6cSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6JCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlEsZ2V0T3duUHJvcGVydHlTeW1ib2xzOkp9KSxEJiZpKGkuUytpLkYqKCFCfHx1KGZ1bmN0aW9uKCl7dmFyIGU9TCgpO3JldHVybiJbbnVsbF0iIT13KFtlXSl8fCJ7fSIhPXcoe2E6ZX0pfHwie30iIT13KE9iamVjdChlKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09ZSYmIVcoZSkpe2Zvcih2YXIgdCxuLHI9W2VdLG89MTthcmd1bWVudHMubGVuZ3RoPm87KXIucHVzaChhcmd1bWVudHNbbysrXSk7cmV0dXJuIHQ9clsxXSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmKG49dCksIW4mJmcodCl8fCh0PWZ1bmN0aW9uKGUsdCl7aWYobiYmKHQ9bi5jYWxsKHRoaXMsZSx0KSksIVcodCkpcmV0dXJuIHR9KSxyWzFdPXQsdy5hcHBseShELHIpfX19KSxMLnByb3RvdHlwZVtrXXx8bigzNikoTC5wcm90b3R5cGUsayxMLnByb3RvdHlwZS52YWx1ZU9mKSxkKEwsIlN5bWJvbCIpLGQoTWF0aCwiTWF0aCIsITApLGQoci5KU09OLCJKU09OIiwhMCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMyksbz1uKDEwKSxzPW4oMTYpLGk9bigyMTYpLGE9bigyMTQpO3Ioci5QK3IuUiwiUHJvbWlzZSIse2ZpbmFsbHk6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLG8uUHJvbWlzZXx8cy5Qcm9taXNlKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlO3JldHVybiB0aGlzLnRoZW4obj9mdW5jdGlvbihuKXtyZXR1cm4gYSh0LGUoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBufSl9OmUsbj9mdW5jdGlvbihuKXtyZXR1cm4gYSh0LGUoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX06ZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMyksbz1uKDEwMikscz1uKDIxMyk7cihyLlMsIlByb21pc2UiLHt0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9by5mKHRoaXMpLG49cyhlKTtyZXR1cm4obi5lP3QucmVqZWN0OnQucmVzb2x2ZSkobi52KSx0LnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDExMCkoImFzeW5jSXRlcmF0b3IiKX0sZnVuY3Rpb24oZSx0LG4pe24oMTEwKSgib2JzZXJ2YWJsZSIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7cmV0dXJuIHMuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gbyhlLHQpe2lmKHIoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBzLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCksZS5fX3Byb3RvX189cy5wcm90b3R5cGUpOihudWxsPT09ZSYmKGU9bmV3IHModCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gcyhlLHQsbil7aWYoIShzLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBzKSlyZXR1cm4gbmV3IHMoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdSh0aGlzLGUpfXJldHVybiBpKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIGkoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/XyhlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/YyhlLHQsbik6cChlLHQpfWZ1bmN0aW9uIGEoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybiBhKHQpLHQ8PTA/byhlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP28oZSx0KS5maWxsKG4scik6byhlLHQpLmZpbGwobik6byhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZihhKHQpLGU9byhlLHQ8MD8wOjB8Zih0KSksIXMuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBjKGUsdCxuKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKSwhcy5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8aCh0LG4pO2U9byhlLHIpO3ZhciBpPWUud3JpdGUodCxuKTtyZXR1cm4gaSE9PXImJihlPWUuc2xpY2UoMCxpKSksZX1mdW5jdGlvbiBkKGUsdCl7dmFyIG49dC5sZW5ndGg8MD8wOjB8Zih0Lmxlbmd0aCk7ZT1vKGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBfKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09biYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsbik6bmV3IFVpbnQ4QXJyYXkodCxuLHIpLHMuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10LGUuX19wcm90b19fPXMucHJvdG90eXBlKTplPWQoZSx0KSxlfWZ1bmN0aW9uIHAoZSx0KXtpZihzLmlzQnVmZmVyKHQpKXt2YXIgbj0wfGYodC5sZW5ndGgpO3JldHVybiBlPW8oZSxuKSwwPT09ZS5sZW5ndGg/ZToodC5jb3B5KGUsMCwwLG4pLGUpfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxYKHQubGVuZ3RoKT9vKGUsMCk6ZChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZKKHQuZGF0YSkpcmV0dXJuIGQoZSx0LmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX1mdW5jdGlvbiBmKGUpe2lmKGU+PXIoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrcigpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBtKGUpe3JldHVybitlIT1lJiYoZT0wKSxzLmFsbG9jKCtlKX1mdW5jdGlvbiBoKGUsdCl7aWYocy5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIHEoZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gVihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBnKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKG4+Pj49MCx0Pj4+PTAsbjw9dClyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIHcodGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGoodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBMKHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBEKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIFIodGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gTSh0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBiKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gRShlLHQsbixyLG8pe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPW8/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihvKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIW8pcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9cy5mcm9tKHQscikpLHMuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp5KGUsdCxuLHIsbyk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUscy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9vP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6eShlLFt0XSxuLHIsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24geShlLHQsbixyLG8pe2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gMT09PWk/ZVt0XTplLnJlYWRVSW50MTZCRSh0KmkpfXZhciBpPTEsYT1lLmxlbmd0aCxsPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7aT0yLGEvPTIsbC89MixuLz0yfXZhciB1O2lmKG8pe3ZhciBjPS0xO2Zvcih1PW47dTxhO3UrKylpZihzKGUsdSk9PT1zKHQsLTE9PT1jPzA6dS1jKSl7aWYoLTE9PT1jJiYoYz11KSx1LWMrMT09PWwpcmV0dXJuIGMqaX1lbHNlLTEhPT1jJiYodS09dS1jKSxjPS0xfWVsc2UgZm9yKG4rbD5hJiYobj1hLWwpLHU9bjt1Pj0wO3UtLSl7Zm9yKHZhciBkPSEwLF89MDtfPGw7XysrKWlmKHMoZSx1K18pIT09cyh0LF8pKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIHV9cmV0dXJuLTF9ZnVuY3Rpb24gdihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgbz1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5vJiYocj1vKTpyPW87dmFyIHM9dC5sZW5ndGg7aWYocyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+cy8yJiYocj1zLzIpO2Zvcih2YXIgaT0wO2k8cjsrK2kpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqaSwyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIGk7ZVtuK2ldPWF9cmV0dXJuIGl9ZnVuY3Rpb24gVChlLHQsbixyKXtyZXR1cm4gSyhWKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIEEoZSx0LG4scil7cmV0dXJuIEsoVyh0KSxlLG4scil9ZnVuY3Rpb24gQyhlLHQsbixyKXtyZXR1cm4gQShlLHQsbixyKX1mdW5jdGlvbiBPKGUsdCxuLHIpe3JldHVybiBLKHEodCksZSxuLHIpfWZ1bmN0aW9uIFMoZSx0LG4scil7cmV0dXJuIEsoWSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBSKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD8kLmZyb21CeXRlQXJyYXkoZSk6JC5mcm9tQnl0ZUFycmF5KGUuc2xpY2UodCxuKSl9ZnVuY3Rpb24gaihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10sbz10O288bjspe3ZhciBzPWVbb10saT1udWxsLGE9cz4yMzk/NDpzPjIyMz8zOnM+MTkxPzI6MTtpZihvK2E8PW4pe3ZhciBsLHUsYyxkO3N3aXRjaChhKXtjYXNlIDE6czwxMjgmJihpPXMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGw9ZVtvKzFdKSkmJihkPSgzMSZzKTw8Nnw2MyZsKT4xMjcmJihpPWQpO2JyZWFrO2Nhc2UgMzpsPWVbbysxXSx1PWVbbysyXSwxMjg9PSgxOTImbCkmJjEyOD09KDE5MiZ1KSYmKGQ9KDE1JnMpPDwxMnwoNjMmbCk8PDZ8NjMmdSk+MjA0NyYmKGQ8NTUyOTZ8fGQ+NTczNDMpJiYoaT1kKTticmVhaztjYXNlIDQ6bD1lW28rMV0sdT1lW28rMl0sYz1lW28rM10sMTI4PT0oMTkyJmwpJiYxMjg9PSgxOTImdSkmJjEyOD09KDE5MiZjKSYmKGQ9KDE1JnMpPDwxOHwoNjMmbCk8PDEyfCg2MyZ1KTw8Nnw2MyZjKT42NTUzNSYmZDwxMTE0MTEyJiYoaT1kKX19bnVsbD09PWk/KGk9NjU1MzMsYT0xKTppPjY1NTM1JiYoaS09NjU1MzYsci5wdXNoKGk+Pj4xMCYxMDIzfDU1Mjk2KSxpPTU2MzIwfDEwMjMmaSksci5wdXNoKGkpLG8rPWF9cmV0dXJuIHgocil9ZnVuY3Rpb24geChlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1aKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtmb3IodmFyIG49IiIscj0wO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPVopKTtyZXR1cm4gbn1mdW5jdGlvbiBMKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgbz10O288bjsrK28pcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtvXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRChlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIG89dDtvPG47KytvKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtvXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gdyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7Zm9yKHZhciBvPSIiLHM9dDtzPG47KytzKW8rPXooZVtzXSk7cmV0dXJuIG99ZnVuY3Rpb24gTShlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxvPSIiLHM9MDtzPHIubGVuZ3RoO3MrPTIpbys9U3RyaW5nLmZyb21DaGFyQ29kZShyW3NdKzI1NipyW3MrMV0pO3JldHVybiBvfWZ1bmN0aW9uIGsoZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEkoZSx0LG4scixvLGkpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pm98fHQ8aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKGUsdCxuLHIpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIG89MCxzPU1hdGgubWluKGUubGVuZ3RoLW4sMik7bzxzOysrbyllW24rb109KHQmMjU1PDw4KihyP286MS1vKSk+Pj44KihyP286MS1vKX1mdW5jdGlvbiBOKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgbz0wLHM9TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtvPHM7KytvKWVbbitvXT10Pj4+OCoocj9vOjMtbykmMjU1fWZ1bmN0aW9uIEgoZSx0LG4scixvLHMpe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBGKGUsdCxuLHIsbyl7cmV0dXJuIG98fEgoZSx0LG4sNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksUS53cml0ZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBCKGUsdCxuLHIsbyl7cmV0dXJuIG98fEgoZSx0LG4sOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxRLndyaXRlKGUsdCxuLHIsNTIsOCksbis4fWZ1bmN0aW9uIFUoZSl7aWYoZT1HKGUpLnJlcGxhY2UoZWUsIiIpLGUubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfWZ1bmN0aW9uIHooZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFYoZSx0KXt0PXR8fDEvMDtmb3IodmFyIG4scj1lLmxlbmd0aCxvPW51bGwscz1bXSxpPTA7aTxyOysraSl7aWYoKG49ZS5jaGFyQ29kZUF0KGkpKT41NTI5NSYmbjw1NzM0NCl7aWYoIW8pe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihpKzE9PT1yKXsodC09Myk+LTEmJnMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bz1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KSxvPW47Y29udGludWV9bj02NTUzNisoby01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBvJiYodC09Myk+LTEmJnMucHVzaCgyMzksMTkxLDE4OSk7aWYobz1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztzLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO3MucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztzLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO3MucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIHN9ZnVuY3Rpb24gVyhlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBZKGUsdCl7Zm9yKHZhciBuLHIsbyxzPVtdLGk9MDtpPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2kpbj1lLmNoYXJDb2RlQXQoaSkscj1uPj44LG89biUyNTYscy5wdXNoKG8pLHMucHVzaChyKTtyZXR1cm4gc31mdW5jdGlvbiBxKGUpe3JldHVybiAkLnRvQnl0ZUFycmF5KFUoZSkpfWZ1bmN0aW9uIEsoZSx0LG4scil7Zm9yKHZhciBvPTA7bzxyJiYhKG8rbj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK25dPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gWChlKXtyZXR1cm4gZSE9PWV9LyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KdmFyICQ9big1NzgpLFE9big1ODIpLEo9big1ODMpO3QuQnVmZmVyPXMsdC5TbG93QnVmZmVyPW0sdC5JTlNQRUNUX01BWF9CWVRFUz01MCxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09ZS5UWVBFRF9BUlJBWV9TVVBQT1JUP2UuVFlQRURfQVJSQVlfU1VQUE9SVDpmdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZS5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PWUuZm9vKCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1yKCkscy5wb29sU2l6ZT04MTkyLHMuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXMucHJvdG90eXBlLGV9LHMuZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGkobnVsbCxlLHQsbil9LHMuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHMucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxzLl9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuc3BlY2llcyYmc1tTeW1ib2wuc3BlY2llc109PT1zJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocyxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9KSkscy5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwobnVsbCxlLHQsbil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUobnVsbCxlKX0scy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHUobnVsbCxlKX0scy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9LHMuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFzLmlzQnVmZmVyKGUpfHwhcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsbz0wLGk9TWF0aC5taW4obixyKTtvPGk7KytvKWlmKGVbb10hPT10W29dKXtuPWVbb10scj10W29dO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0scy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFKKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHMuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1zLmFsbG9jVW5zYWZlKHQpLG89MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dO2lmKCFzLmlzQnVmZmVyKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpLmNvcHkocixvKSxvKz1pLmxlbmd0aH1yZXR1cm4gcn0scy5ieXRlTGVuZ3RoPWgscy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHMucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MiliKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpYih0aGlzLHQsdCszKSxiKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OCliKHRoaXMsdCx0KzcpLGIodGhpcyx0KzEsdCs2KSxiKHRoaXMsdCsyLHQrNSksYih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2oodGhpcywwLGUpOmcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PXMuY29tcGFyZSh0aGlzLGUpfSxzLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiIsbj10LklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsbikubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPm4mJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0scy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49byYmdD49bilyZXR1cm4gMDtpZihyPj1vKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodD4+Pj0wLG4+Pj49MCxyPj4+PTAsbz4+Pj0wLHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgaT1vLXIsYT1uLXQsbD1NYXRoLm1pbihpLGEpLHU9dGhpcy5zbGljZShyLG8pLGM9ZS5zbGljZSh0LG4pLGQ9MDtkPGw7KytkKWlmKHVbZF0hPT1jW2RdKXtpPXVbZF0sYT1jW2RdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyxlLHQsbiwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRSh0aGlzLGUsdCxuLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIG89dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5vKSYmKG49byksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgcz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIHYodGhpcyxlLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gQSh0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBDKHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTyh0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFModGhpcyxlLHQsbik7ZGVmYXVsdDppZihzKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxzPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgWj00MDk2O3MucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sZW5ndGg7ZT1+fmUsdD12b2lkIDA9PT10P246fn50LGU8MD8oZSs9bik8MCYmKGU9MCk6ZT5uJiYoZT1uKSx0PDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKTt2YXIgcjtpZihzLlRZUEVEX0FSUkFZX1NVUFBPUlQpcj10aGlzLnN1YmFycmF5KGUsdCksci5fX3Byb3RvX189cy5wcm90b3R5cGU7ZWxzZXt2YXIgbz10LWU7cj1uZXcgcyhvLHZvaWQgMCk7Zm9yKHZhciBpPTA7aTxvOysraSlyW2ldPXRoaXNbaStlXX1yZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fGsoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxvPTEscz0wOysrczx0JiYobyo9MjU2KTspcis9dGhpc1tlK3NdKm87cmV0dXJuIHJ9LHMucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLG89MTt0PjAmJihvKj0yNTYpOylyKz10aGlzW2UrLS10XSpvO3JldHVybiByfSxzLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LHMucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LHMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHMucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0scy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0sbz0xLHM9MDsrK3M8dCYmKG8qPTI1Nik7KXIrPXRoaXNbZStzXSpvO3JldHVybiBvKj0xMjgscj49byYmKHItPU1hdGgucG93KDIsOCp0KSkscn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LG89MSxzPXRoaXNbZSstLXJdO3I+MCYmKG8qPTI1Nik7KXMrPXRoaXNbZSstLXJdKm87cmV0dXJuIG8qPTEyOCxzPj1vJiYocy09TWF0aC5wb3coMiw4KnQpKSxzfSxzLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8ayhlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fGsoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0scy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0scy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDQsdGhpcy5sZW5ndGgpLFEucmVhZCh0aGlzLGUsITAsMjMsNCl9LHMucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGsoZSw0LHRoaXMubGVuZ3RoKSxRLnJlYWQodGhpcyxlLCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ayhlLDgsdGhpcy5sZW5ndGgpLFEucmVhZCh0aGlzLGUsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxrKGUsOCx0aGlzLmxlbmd0aCksUS5yZWFkKHRoaXMsZSwhMSw1Miw4KX0scy5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0fD0wLG58PTAscnx8SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBvPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrczxuJiYobyo9MjU2KTspdGhpc1t0K3NdPWUvbyYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0fD0wLG58PTAscnx8SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBvPW4tMSxzPTE7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyl0aGlzW3Qrb109ZS9zJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMSwyNTUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDIsNjU1MzUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMiw2NTUzNSwwKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpQKHRoaXMsZSx0LCExKSx0KzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOk4odGhpcyxlLHQsITApLHQrNH0scy5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Tih0aGlzLGUsdCwhMSksdCs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIG89TWF0aC5wb3coMiw4Km4tMSk7SSh0aGlzLGUsdCxuLG8tMSwtbyl9dmFyIHM9MCxpPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrczxuJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtzLTFdJiYoYT0xKSx0aGlzW3Qrc109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBvPU1hdGgucG93KDIsOCpuLTEpO0kodGhpcyxlLHQsbixvLTEsLW8pfXZhciBzPW4tMSxpPTEsYT0wO2Zvcih0aGlzW3Qrc109MjU1JmU7LS1zPj0wJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtzKzFdJiYoYT0xKSx0aGlzW3Qrc109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fEkodGhpcyxlLHQsMSwxMjcsLTEyOCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6UCh0aGlzLGUsdCwhMSksdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpOKHRoaXMsZSx0LCEwKSx0KzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxJKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSkscy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOk4odGhpcyxlLHQsITEpLHQrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRih0aGlzLGUsdCwhMSxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEIodGhpcyxlLHQsITAsbil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIG8saT1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihvPWktMTtvPj0wOy0tbyllW28rdF09dGhpc1tvK25dO2Vsc2UgaWYoaTwxZTN8fCFzLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK2kpLHQpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09ciYmInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHImJiFzLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKTt2YXIgaTtpZigibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPG47KytpKXRoaXNbaV09ZTtlbHNle3ZhciBhPXMuaXNCdWZmZXIoZSk/ZTpWKG5ldyBzKGUscikudG9TdHJpbmcoKSksbD1hLmxlbmd0aDtmb3IoaT0wO2k8bi10OysraSl0aGlzW2krdF09YVtpJWxdfXJldHVybiB0aGlzfTt2YXIgZWU9L1teK1wvMC05QS1aYS16LV9dL2d9KS5jYWxsKHQsbigyNjYpKX0sZnVuY3Rpb24oZSx0LG4pe24oNDI5KSxuKDQzMyksbig0NDApLG4oMjMzKSxuKDQyNCksbig0MjUpLG4oNDMwKSxuKDQzNCksbig0MzYpLG4oNDIwKSxuKDQyMSksbig0MjIpLG4oNDIzKSxuKDQyNiksbig0MjcpLG4oNDI4KSxuKDQzMSksbig0MzIpLG4oNDM1KSxuKDQzNyksbig0MzgpLG4oNDM5KSxuKDQxNiksbig0MTcpLG4oNDE4KSxuKDQxOSksZS5leHBvcnRzPW4oMzkpLlN0cmluZ30sZnVuY3Rpb24oZSx0LG4pe24oNDE0KSxuKDIzMyksbig0NDMpLG4oNDE1KSxuKDQ0MSksbig0NDIpLGUuZXhwb3J0cz1uKDM5KS5Qcm9taXNlfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMikoInVuc2NvcGFibGVzIiksbz1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1vW3JdJiZuKDQwKShvLHIse30pLGUuZXhwb3J0cz1mdW5jdGlvbihlKXtvW3JdW2VdPSEwfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDg0KSxvPW4oNjIpLHM9bigyMzIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3ZhciBhLGw9cih0KSx1PW8obC5sZW5ndGgpLGM9cyhpLHUpO2lmKGUmJm4hPW4pe2Zvcig7dT5jOylpZigoYT1sW2MrK10pIT1hKXJldHVybiEwfWVsc2UgZm9yKDt1PmM7YysrKWlmKChlfHxjIGluIGwpJiZsW2NdPT09bilyZXR1cm4gZXx8Y3x8MDtyZXR1cm4hZSYmLTF9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODApLG89bigzOTYpLHM9bigzOTUpLGk9bigzOCksYT1uKDYyKSxsPW4oNDEyKSx1PXt9LGM9e30sdD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZCxfKXt2YXIgcCxmLG0saCxnPV8/ZnVuY3Rpb24oKXtyZXR1cm4gZX06bChlKSxiPXIobixkLHQ/MjoxKSxFPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYocyhnKSl7Zm9yKHA9YShlLmxlbmd0aCk7cD5FO0UrKylpZigoaD10P2IoaShmPWVbRV0pWzBdLGZbMV0pOmIoZVtFXSkpPT09dXx8aD09PWMpcmV0dXJuIGh9ZWxzZSBmb3IobT1nLmNhbGwoZSk7IShmPW0ubmV4dCgpKS5kb25lOylpZigoaD1vKG0sYixmLnZhbHVlLHQpKT09PXV8fGg9PT1jKXJldHVybiBofTt0LkJSRUFLPXUsdC5SRVRVUk49Y30sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbig1OCkmJiFuKDU5KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigxMTQpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMD09PW47c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHI/ZSgpOmUuY2FsbChuKTtjYXNlIDE6cmV0dXJuIHI/ZSh0WzBdKTplLmNhbGwobix0WzBdKTtjYXNlIDI6cmV0dXJuIHI/ZSh0WzBdLHRbMV0pOmUuY2FsbChuLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiByP2UodFswXSx0WzFdLHRbMl0pOmUuY2FsbChuLHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIHI/ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTplLmNhbGwobix0WzBdLHRbMV0sdFsyXSx0WzNdKX1yZXR1cm4gZS5hcHBseShuLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTcpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjEpLG89bigxMikoIml0ZXJhdG9yIikscz1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYoci5BcnJheT09PWV8fHNbb109PT1lKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7dHJ5e3JldHVybiBvP3QocihuKVswXSxuWzFdKTp0KG4pfWNhdGNoKHQpe3ZhciBzPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PXMmJnIocy5jYWxsKGUpKSx0fX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MDEpLG89bigyMjcpLHM9bigxMTcpLGk9e307big0MCkoaSxuKDEyKSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1yKGkse25leHQ6bygxLG4pfSkscyhlLHQrIiBJdGVyYXRvciIpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTIpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBzPVs3XVtyXSgpO3MucmV0dXJuPWZ1bmN0aW9uKCl7bz0hMH0sQXJyYXkuZnJvbShzLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBzPVs3XSxpPXNbcl0oKTtpLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX0sc1tyXT1mdW5jdGlvbigpe3JldHVybiBpfSxlKHMpfWNhdGNoKGUpe31yZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTkpLG89bigyMzEpLnNldCxzPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGk9ci5wcm9jZXNzLGE9ci5Qcm9taXNlLGw9InByb2Nlc3MiPT1uKDU3KShpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSx0LG4sdT1mdW5jdGlvbigpe3ZhciByLG87Zm9yKGwmJihyPWkuZG9tYWluKSYmci5leGl0KCk7ZTspe289ZS5mbixlPWUubmV4dDt0cnl7bygpfWNhdGNoKHIpe3Rocm93IGU/bigpOnQ9dm9pZCAwLHJ9fXQ9dm9pZCAwLHImJnIuZW50ZXIoKX07aWYobCluPWZ1bmN0aW9uKCl7aS5uZXh0VGljayh1KX07ZWxzZSBpZighc3x8ci5uYXZpZ2F0b3ImJnIubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYoYSYmYS5yZXNvbHZlKXt2YXIgYz1hLnJlc29sdmUoKTtuPWZ1bmN0aW9uKCl7Yy50aGVuKHUpfX1lbHNlIG49ZnVuY3Rpb24oKXtvLmNhbGwocix1KX07ZWxzZXt2YXIgZD0hMCxfPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgcyh1KS5vYnNlcnZlKF8se2NoYXJhY3RlckRhdGE6ITB9KSxuPWZ1bmN0aW9uKCl7Xy5kYXRhPWQ9IWR9fXJldHVybiBmdW5jdGlvbihyKXt2YXIgbz17Zm46cixuZXh0OnZvaWQgMH07dCYmKHQubmV4dD1vKSxlfHwoZT1vLG4oKSksdD1vfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM4KSxvPW4oNDAyKSxzPW4oMjE5KSxpPW4oMTE4KSgiSUVfUFJPVE8iKSxhPWZ1bmN0aW9uKCl7fSxsPWZ1bmN0aW9uKCl7dmFyIGUsdD1uKDExNCkoImlmcmFtZSIpLHI9cy5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsbigyMjApLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsZS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksbD1lLkY7ci0tOylkZWxldGUgbC5wcm90b3R5cGVbc1tyXV07cmV0dXJuIGwoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhhLnByb3RvdHlwZT1yKGUpLG49bmV3IGEsYS5wcm90b3R5cGU9bnVsbCxuW2ldPWUpOm49bCgpLHZvaWQgMD09PXQ/bjpvKG4sdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4Miksbz1uKDM4KSxzPW4oMjI0KTtlLmV4cG9ydHM9big1OCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixpPXModCksYT1pLmxlbmd0aCxsPTA7YT5sOylyLmYoZSxuPWlbbCsrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDYwKSxvPW4oNDEwKSxzPW4oMTE4KSgiSUVfUFJPVE8iKSxpPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9byhlKSxyKGUscyk/ZVtzXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9pOm51bGx9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big2MCksbz1uKDg0KSxzPW4oMzkwKSghMSksaT1uKDExOCkoIklFX1BST1RPIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYT1vKGUpLGw9MCx1PVtdO2ZvcihuIGluIGEpbiE9aSYmcihhLG4pJiZ1LnB1c2gobik7Zm9yKDt0Lmxlbmd0aD5sOylyKGEsbj10W2wrK10pJiYofnModSxuKXx8dS5wdXNoKG4pKTtyZXR1cm4gdX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQ4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgbyBpbiB0KXIoZSxvLHRbb10sbik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkpLG89big4Mikscz1uKDU4KSxpPW4oMTIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07cyYmdCYmIXRbaV0mJm8uZih0LGkse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4Myksbz1uKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9U3RyaW5nKG8odGhpcykpLG49IiIscz1yKGUpO2lmKHM8MHx8cz09MS8wKXRocm93IFJhbmdlRXJyb3IoIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlIik7Zm9yKDtzPjA7KHM+Pj49MSkmJih0Kz10KSkxJnMmJihuKz10KTtyZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE3KSxvPW4oMzMpLHM9big1OSksaT1uKDQwOSksYT0iWyIraSsiXSIsbD0i4oCLwoUiLHU9UmVnRXhwKCJeIithK2ErIioiKSxjPVJlZ0V4cChhK2ErIiokIiksZD1mdW5jdGlvbihlLHQsbil7dmFyIG89e30sYT1zKGZ1bmN0aW9uKCl7cmV0dXJuISFpW2VdKCl8fGxbZV0oKSE9bH0pLHU9b1tlXT1hP3QoXyk6aVtlXTtuJiYob1tuXT11KSxyKHIuUCtyLkYqYSwiU3RyaW5nIixvKX0sXz1kLnRyaW09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1TdHJpbmcobyhlKSksMSZ0JiYoZT1lLnJlcGxhY2UodSwiIikpLDImdCYmKGU9ZS5yZXBsYWNlKGMsIiIpKSxlfTtlLmV4cG9ydHM9ZH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9Ilx0XG5cdlxmXHIgwqDhmoDhoI7igIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcdTIwMjhcdTIwMjlcdWZlZmYifSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTEzKSxvPW4oMTIpKCJpdGVyYXRvciIpLHM9big2MSk7ZS5leHBvcnRzPW4oMzkpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxzW3IoZSldfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM4OCksbz1uKDM5OSkscz1uKDYxKSxpPW4oODQpO2UuZXhwb3J0cz1uKDIyMikoQXJyYXksIkFycmF5IixmdW5jdGlvbihlLHQpe3RoaXMuX3Q9aShlKSx0aGlzLl9pPTAsdGhpcy5faz10fSxmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3QsdD10aGlzLl9rLG49dGhpcy5faSsrO3JldHVybiFlfHxuPj1lLmxlbmd0aD8odGhpcy5fdD12b2lkIDAsbygxKSk6ImtleXMiPT10P28oMCxuKToidmFsdWVzIj09dD9vKDAsZVtuXSk6bygwLFtuLGVbbl1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXkscigia2V5cyIpLHIoInZhbHVlcyIpLHIoImVudHJpZXMiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDExMyksbz17fTtvW24oMTIpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsbysiIiE9IltvYmplY3Qgel0iJiZuKDQ4KShPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK3IodGhpcykrIl0ifSwhMCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxzLGksYT1uKDIyMyksbD1uKDE5KSx1PW4oODApLGM9bigxMTMpLGQ9bigxNyksXz1uKDQ3KSxwPW4oNzkpLGY9bigzODkpLG09bigzOTEpLGg9bigyMjkpLGc9bigyMzEpLnNldCxiPW4oNDAwKSgpLEU9bigxMTYpLHk9bigyMjUpLHY9bigyMjYpLFQ9bC5UeXBlRXJyb3IsQT1sLnByb2Nlc3MsQz1sLlByb21pc2UsTz0icHJvY2VzcyI9PWMoQSksUz1mdW5jdGlvbigpe30sUj1vPUUuZixqPSEhZnVuY3Rpb24oKXt0cnl7dmFyIGU9Qy5yZXNvbHZlKDEpLHQ9KGUuY29uc3RydWN0b3I9e30pW24oMTIpKCJzcGVjaWVzIildPWZ1bmN0aW9uKGUpe2UoUyxTKX07cmV0dXJuKE98fCJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZlLnRoZW4oUylpbnN0YW5jZW9mIHR9Y2F0Y2goZSl7fX0oKSx4PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIV8oZSl8fCJmdW5jdGlvbiIhPXR5cGVvZih0PWUudGhlbikpJiZ0fSxMPWZ1bmN0aW9uKGUsdCl7aWYoIWUuX24pe2UuX249ITA7dmFyIG49ZS5fYztiKGZ1bmN0aW9uKCl7Zm9yKHZhciByPWUuX3Ysbz0xPT1lLl9zLHM9MDtuLmxlbmd0aD5zOykhZnVuY3Rpb24odCl7dmFyIG4scyxpPW8/dC5vazp0LmZhaWwsYT10LnJlc29sdmUsbD10LnJlamVjdCx1PXQuZG9tYWluO3RyeXtpPyhvfHwoMj09ZS5faCYmTShlKSxlLl9oPTEpLCEwPT09aT9uPXI6KHUmJnUuZW50ZXIoKSxuPWkociksdSYmdS5leGl0KCkpLG49PT10LnByb21pc2U/bChUKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPXgobikpP3MuY2FsbChuLGEsbCk6YShuKSk6bChyKX1jYXRjaChlKXtsKGUpfX0obltzKytdKTtlLl9jPVtdLGUuX249ITEsdCYmIWUuX2gmJkQoZSl9KX19LEQ9ZnVuY3Rpb24oZSl7Zy5jYWxsKGwsZnVuY3Rpb24oKXt2YXIgdCxuLHIsbz1lLl92LHM9dyhlKTtpZihzJiYodD15KGZ1bmN0aW9uKCl7Tz9BLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIsbyxlKToobj1sLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9uKHtwcm9taXNlOmUscmVhc29uOm99KToocj1sLmNvbnNvbGUpJiZyLmVycm9yJiZyLmVycm9yKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG8pfSksZS5faD1PfHx3KGUpPzI6MSksZS5fYT12b2lkIDAscyYmdC5lKXRocm93IHQudn0pfSx3PWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5faCYmMD09PShlLl9hfHxlLl9jKS5sZW5ndGh9LE09ZnVuY3Rpb24oZSl7Zy5jYWxsKGwsZnVuY3Rpb24oKXt2YXIgdDtPP0EuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsZSk6KHQ9bC5vbnJlamVjdGlvbmhhbmRsZWQpJiZ0KHtwcm9taXNlOmUscmVhc29uOmUuX3Z9KX0pfSxrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5fZHx8KHQuX2Q9ITAsdD10Ll93fHx0LHQuX3Y9ZSx0Ll9zPTIsdC5fYXx8KHQuX2E9dC5fYy5zbGljZSgpKSxMKHQsITApKX0sST1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXM7aWYoIW4uX2Qpe24uX2Q9ITAsbj1uLl93fHxuO3RyeXtpZihuPT09ZSl0aHJvdyBUKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpOyh0PXgoZSkpP2IoZnVuY3Rpb24oKXt2YXIgcj17X3c6bixfZDohMX07dHJ5e3QuY2FsbChlLHUoSSxyLDEpLHUoayxyLDEpKX1jYXRjaChlKXtrLmNhbGwocixlKX19KToobi5fdj1lLG4uX3M9MSxMKG4sITEpKX1jYXRjaChlKXtrLmNhbGwoe193Om4sX2Q6ITF9LGUpfX19O2p8fChDPWZ1bmN0aW9uKGUpe2YodGhpcyxDLCJQcm9taXNlIiwiX2giKSxwKGUpLHIuY2FsbCh0aGlzKTt0cnl7ZSh1KEksdGhpcywxKSx1KGssdGhpcywxKSl9Y2F0Y2goZSl7ay5jYWxsKHRoaXMsZSl9fSxyPWZ1bmN0aW9uKGUpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LHIucHJvdG90eXBlPW4oNDA1KShDLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciBuPVIoaCh0aGlzLEMpKTtyZXR1cm4gbi5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxuLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsbi5kb21haW49Tz9BLmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKG4pLHRoaXMuX2EmJnRoaXMuX2EucHVzaChuKSx0aGlzLl9zJiZMKHRoaXMsITEpLG4ucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSkscz1mdW5jdGlvbigpe3ZhciBlPW5ldyByO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT11KEksZSwxKSx0aGlzLnJlamVjdD11KGssZSwxKX0sRS5mPVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1DfHxlPT09aT9uZXcgcyhlKTpvKGUpfSksZChkLkcrZC5XK2QuRiohaix7UHJvbWlzZTpDfSksbigxMTcpKEMsIlByb21pc2UiKSxuKDQwNikoIlByb21pc2UiKSxpPW4oMzkpLlByb21pc2UsZChkLlMrZC5GKiFqLCJQcm9taXNlIix7cmVqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PVIodGhpcyk7cmV0dXJuKDAsdC5yZWplY3QpKGUpLHQucHJvbWlzZX19KSxkKGQuUytkLkYqKGF8fCFqKSwiUHJvbWlzZSIse3Jlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoYSYmdGhpcz09PWk/Qzp0aGlzLGUpfX0pLGQoZC5TK2QuRiohKGomJm4oMzk4KShmdW5jdGlvbihlKXtDLmFsbChlKS5jYXRjaChTKX0pKSwiUHJvbWlzZSIse2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49Uih0KSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LHM9eShmdW5jdGlvbigpe3ZhciBuPVtdLHM9MCxpPTE7bShlLCExLGZ1bmN0aW9uKGUpe3ZhciBhPXMrKyxsPSExO24ucHVzaCh2b2lkIDApLGkrKyx0LnJlc29sdmUoZSkudGhlbihmdW5jdGlvbihlKXtsfHwobD0hMCxuW2FdPWUsLS1pfHxyKG4pKX0sbyl9KSwtLWl8fHIobil9KTtyZXR1cm4gcy5lJiZvKHMudiksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1SKHQpLHI9bi5yZWplY3Qsbz15KGZ1bmN0aW9uKCl7bShlLCExLGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKS50aGVuKG4ucmVzb2x2ZSxyKX0pfSk7cmV0dXJuIG8uZSYmcihvLnYpLG4ucHJvbWlzZX19KX0sZnVuY3Rpb24oZSx0LG4pe24oODEpKCJtYXRjaCIsMSxmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKHRoaXMpLG89dm9pZCAwPT1uP3ZvaWQgMDpuW3RdO3JldHVybiB2b2lkIDAhPT1vP28uY2FsbChuLHIpOm5ldyBSZWdFeHAobilbdF0oU3RyaW5nKHIpKX0sbl19KX0sZnVuY3Rpb24oZSx0LG4pe24oODEpKCJyZXBsYWNlIiwyLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bZnVuY3Rpb24ocixvKXsidXNlIHN0cmljdCI7dmFyIHM9ZSh0aGlzKSxpPXZvaWQgMD09cj92b2lkIDA6clt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwocixzLG8pOm4uY2FsbChTdHJpbmcocykscixvKX0sbl19KX0sZnVuY3Rpb24oZSx0LG4pe24oODEpKCJzZWFyY2giLDEsZnVuY3Rpb24oZSx0LG4pe3JldHVybltmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSh0aGlzKSxvPXZvaWQgMD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09bz9vLmNhbGwobixyKTpuZXcgUmVnRXhwKG4pW3RdKFN0cmluZyhyKSl9LG5dfSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDgxKSgic3BsaXQiLDIsZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz1uKDIyMSkscz1yLGk9W10ucHVzaCxhPSJsZW5ndGgiO2lmKCJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpW2FdfHwyIT0iYWIiLnNwbGl0KC8oPzphYikqLylbYV18fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKVthXXx8Ii4iLnNwbGl0KC8oKSgpLylbYV0+MXx8IiIuc3BsaXQoLy4/LylbYV0pe3ZhciBsPXZvaWQgMD09PS8oKT8/Ly5leGVjKCIiKVsxXTtyPWZ1bmN0aW9uKGUsdCl7dmFyIG49U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PWUmJjA9PT10KXJldHVybltdO2lmKCFvKGUpKXJldHVybiBzLmNhbGwobixlLHQpO3ZhciByLHUsYyxkLF8scD1bXSxmPShlLmlnbm9yZUNhc2U/ImkiOiIiKSsoZS5tdWx0aWxpbmU/Im0iOiIiKSsoZS51bmljb2RlPyJ1IjoiIikrKGUuc3RpY2t5PyJ5IjoiIiksbT0wLGg9dm9pZCAwPT09dD80Mjk0OTY3Mjk1OnQ+Pj4wLGc9bmV3IFJlZ0V4cChlLnNvdXJjZSxmKyJnIik7Zm9yKGx8fChyPW5ldyBSZWdFeHAoIl4iK2cuc291cmNlKyIkKD8hXFxzKSIsZikpOyh1PWcuZXhlYyhuKSkmJiEoKGM9dS5pbmRleCt1WzBdW2FdKT5tJiYocC5wdXNoKG4uc2xpY2UobSx1LmluZGV4KSksIWwmJnVbYV0+MSYmdVswXS5yZXBsYWNlKHIsZnVuY3Rpb24oKXtmb3IoXz0xO188YXJndW1lbnRzW2FdLTI7XysrKXZvaWQgMD09PWFyZ3VtZW50c1tfXSYmKHVbX109dm9pZCAwKX0pLHVbYV0+MSYmdS5pbmRleDxuW2FdJiZpLmFwcGx5KHAsdS5zbGljZSgxKSksZD11WzBdW2FdLG09YyxwW2FdPj1oKSk7KWcubGFzdEluZGV4PT09dS5pbmRleCYmZy5sYXN0SW5kZXgrKztyZXR1cm4gbT09PW5bYV0/IWQmJmcudGVzdCgiIil8fHAucHVzaCgiIik6cC5wdXNoKG4uc2xpY2UobSkpLHBbYV0+aD9wLnNsaWNlKDAsaCk6cH19ZWxzZSIwIi5zcGxpdCh2b2lkIDAsMClbYV0mJihyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUmJjA9PT10P1tdOnMuY2FsbCh0aGlzLGUsdCl9KTtyZXR1cm5bZnVuY3Rpb24obixvKXt2YXIgcz1lKHRoaXMpLGk9dm9pZCAwPT1uP3ZvaWQgMDpuW3RdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChuLHMsbyk6ci5jYWxsKFN0cmluZyhzKSxuLG8pfSxyXX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTgpKCJhbmNob3IiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLCJhIiwibmFtZSIsdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOCkoImJpZyIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcywiYmlnIiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOCkoImJsaW5rIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJibGluayIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTgpKCJib2xkIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJiIiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNyksbz1uKDIzMCkoITEpO3Ioci5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLGUpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTcpLG89big2Mikscz1uKDExOSksaT0iIi5lbmRzV2l0aDtyKHIuUCtyLkYqbigxMTUpKCJlbmRzV2l0aCIpLCJTdHJpbmciLHtlbmRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1zKHRoaXMsZSwiZW5kc1dpdGgiKSxuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9byh0Lmxlbmd0aCksYT12b2lkIDA9PT1uP3I6TWF0aC5taW4obyhuKSxyKSxsPVN0cmluZyhlKTtyZXR1cm4gaT9pLmNhbGwodCxsLGEpOnQuc2xpY2UoYS1sLmxlbmd0aCxhKT09PWx9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOCkoImZpeGVkIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJ0dCIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTgpKCJmb250Y29sb3IiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLCJmb250IiwiY29sb3IiLHQpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTgpKCJmb250c2l6ZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTcpLG89bigyMzIpLHM9U3RyaW5nLmZyb21DaGFyQ29kZSxpPVN0cmluZy5mcm9tQ29kZVBvaW50O3Ioci5TK3IuRiooISFpJiYxIT1pLmxlbmd0aCksIlN0cmluZyIse2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1hcmd1bWVudHMubGVuZ3RoLGk9MDtyPmk7KXtpZih0PSthcmd1bWVudHNbaSsrXSxvKHQsMTExNDExMSkhPT10KXRocm93IFJhbmdlRXJyb3IodCsiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtuLnB1c2godDw2NTUzNj9zKHQpOnMoNTUyOTYrKCh0LT02NTUzNik+PjEwKSx0JTEwMjQrNTYzMjApKX1yZXR1cm4gbi5qb2luKCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE3KSxvPW4oMTE5KTtyKHIuUCtyLkYqbigxMTUpKCJpbmNsdWRlcyIpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4hIX5vKHRoaXMsZSwiaW5jbHVkZXMiKS5pbmRleE9mKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTgpKCJpdGFsaWNzIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJpIiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOCkoImxpbmsiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLCJhIiwiaHJlZiIsdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE3KSxvPW4oODQpLHM9big2Mik7cihyLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbihlKXtmb3IodmFyIHQ9byhlLnJhdyksbj1zKHQubGVuZ3RoKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXSxhPTA7bj5hOylpLnB1c2goU3RyaW5nKHRbYSsrXSkpLGE8ciYmaS5wdXNoKFN0cmluZyhhcmd1bWVudHNbYV0pKTtyZXR1cm4gaS5qb2luKCIiKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTcpO3Ioci5QLCJTdHJpbmciLHtyZXBlYXQ6big0MDcpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOCkoInNtYWxsIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTcpLG89big2Mikscz1uKDExOSksaT0iIi5zdGFydHNXaXRoO3Ioci5QK3IuRipuKDExNSkoInN0YXJ0c1dpdGgiKSwiU3RyaW5nIix7c3RhcnRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1zKHRoaXMsZSwic3RhcnRzV2l0aCIpLG49byhNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0Lmxlbmd0aCkpLHI9U3RyaW5nKGUpO3JldHVybiBpP2kuY2FsbCh0LHIsbik6dC5zbGljZShuLG4rci5sZW5ndGgpPT09cn19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE4KSgic3RyaWtlIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE4KSgic3ViIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJzdWIiLCIiLCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE4KSgic3VwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJzdXAiLCIiLCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDQwOCkoInRyaW0iLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsMyl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNyksbz1uKDM5KSxzPW4oMTkpLGk9bigyMjkpLGE9bigyMjYpO3Ioci5QK3IuUiwiUHJvbWlzZSIse2ZpbmFsbHk6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLG8uUHJvbWlzZXx8cy5Qcm9taXNlKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlO3JldHVybiB0aGlzLnRoZW4obj9mdW5jdGlvbihuKXtyZXR1cm4gYSh0LGUoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBufSl9OmUsbj9mdW5jdGlvbihuKXtyZXR1cm4gYSh0LGUoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX06ZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNyksbz1uKDExNikscz1uKDIyNSk7cihyLlMsIlByb21pc2UiLHt0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9by5mKHRoaXMpLG49cyhlKTtyZXR1cm4obi5lP3QucmVqZWN0OnQucmVzb2x2ZSkobi52KSx0LnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9big0MTMpLG89bigyMjQpLHM9big0OCksaT1uKDE5KSxhPW4oNDApLGw9big2MSksdT1uKDEyKSxjPXUoIml0ZXJhdG9yIiksZD11KCJ0b1N0cmluZ1RhZyIpLF89bC5BcnJheSxwPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRhVHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZlckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0sZj1vKHApLG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGgsZz1mW21dLGI9cFtnXSxFPWlbZ10seT1FJiZFLnByb3RvdHlwZTtpZih5JiYoeVtjXXx8YSh5LGMsXykseVtkXXx8YSh5LGQsZyksbFtnXT1fLGIpKWZvcihoIGluIHIpeVtoXXx8cyh5LGgscltoXSwhMCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MSksbz1uKDI2KSxzPXIobywiRGF0YVZpZXciKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19dmFyIG89big1MTMpLHM9big1MTQpLGk9big1MTUpLGE9big1MTYpLGw9big1MTcpO3IucHJvdG90eXBlLmNsZWFyPW8sci5wcm90b3R5cGUuZGVsZXRlPXMsci5wcm90b3R5cGUuZ2V0PWksci5wcm90b3R5cGUuaGFzPWEsci5wcm90b3R5cGUuc2V0PWwsZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQxKSxvPW4oMjYpLHM9cihvLCJQcm9taXNlIik7ZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQxKSxvPW4oMjYpLHM9cihvLCJTZXQiKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IG87Kyt0PG47KXRoaXMuYWRkKGVbdF0pfXZhciBvPW4oMTIyKSxzPW4oNTQyKSxpPW4oNTQzKTtyLnByb3RvdHlwZS5hZGQ9ci5wcm90b3R5cGUucHVzaD1zLHIucHJvdG90eXBlLmhhcz1pLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MSksbz1uKDI2KSxzPXIobywiV2Vha01hcCIpO2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS5zZXQodFswXSx0WzFdKSxlfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS5hZGQodCksZX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248ciYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLHM9W107KytuPHI7KXt2YXIgaT1lW25dO3QoaSxuLGUpJiYoc1tvKytdPWkpfXJldHVybiBzfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUuc3BsaXQoIiIpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUubWF0Y2gocil8fFtdfXZhciByPS9bXlx4MDAtXHgyZlx4M2EtXHg0MFx4NWItXHg2MFx4N2ItXHg3Zl0rL2c7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJm8odCxzKHQpLGUpfXZhciBvPW4oNjQpLHM9big0Mik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJm8odCxzKHQpLGUpfXZhciBvPW4oNjQpLHM9bigyNjIpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixELHcsTSl7dmFyIGssST10JkEsUD10JkMsTj10Jk87aWYobiYmKGs9dz9uKGUsRCx3LE0pOm4oZSkpLHZvaWQgMCE9PWspcmV0dXJuIGs7aWYoIXYoZSkpcmV0dXJuIGU7dmFyIEg9RShlKTtpZihIKXtpZihrPWgoZSksIUkpcmV0dXJuIGMoZSxrKX1lbHNle3ZhciBGPW0oZSksQj1GPT1SfHxGPT1qO2lmKHkoZSkpcmV0dXJuIHUoZSxJKTtpZihGPT14fHxGPT1TfHxCJiYhdyl7aWYoaz1QfHxCP3t9OmIoZSksIUkpcmV0dXJuIFA/XyhlLGwoayxlKSk6ZChlLGEoayxlKSl9ZWxzZXtpZighTFtGXSlyZXR1cm4gdz9lOnt9O2s9ZyhlLEYscixJKX19TXx8KE09bmV3IG8pO3ZhciBVPU0uZ2V0KGUpO2lmKFUpcmV0dXJuIFU7TS5zZXQoZSxrKTt2YXIgRz1OP1A/ZjpwOlA/a2V5c0luOlQsej1IP3ZvaWQgMDpHKGUpO3JldHVybiBzKHp8fGUsZnVuY3Rpb24obyxzKXt6JiYocz1vLG89ZVtzXSksaShrLHMscihvLHQsbixzLGUsTSkpfSksa312YXIgbz1uKDEyMykscz1uKDQ1MyksaT1uKDIzOCksYT1uKDQ1NyksbD1uKDQ1OCksdT1uKDQ4OCksYz1uKDQ5NSksZD1uKDQ5NiksXz1uKDQ5NykscD1uKDUwNyksZj1uKDI0NyksbT1uKDI1MCksaD1uKDUxOCksZz1uKDUxOSksYj1uKDUyMCksRT1uKDEzKSx5PW4oMTM0KSx2PW4oMjkpLFQ9big0MiksQT0xLEM9MixPPTQsUz0iW29iamVjdCBBcmd1bWVudHNdIixSPSJbb2JqZWN0IEZ1bmN0aW9uXSIsaj0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHg9IltvYmplY3QgT2JqZWN0XSIsTD17fTtMW1NdPUxbIltvYmplY3QgQXJyYXldIl09TFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1MWyJbb2JqZWN0IERhdGFWaWV3XSJdPUxbIltvYmplY3QgQm9vbGVhbl0iXT1MWyJbb2JqZWN0IERhdGVdIl09TFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09TFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09TFsiW29iamVjdCBJbnQ4QXJyYXldIl09TFsiW29iamVjdCBJbnQxNkFycmF5XSJdPUxbIltvYmplY3QgSW50MzJBcnJheV0iXT1MWyJbb2JqZWN0IE1hcF0iXT1MWyJbb2JqZWN0IE51bWJlcl0iXT1MW3hdPUxbIltvYmplY3QgUmVnRXhwXSJdPUxbIltvYmplY3QgU2V0XSJdPUxbIltvYmplY3QgU3RyaW5nXSJdPUxbIltvYmplY3QgU3ltYm9sXSJdPUxbIltvYmplY3QgVWludDhBcnJheV0iXT1MWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUxbIltvYmplY3QgVWludDE2QXJyYXldIl09TFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxMWyJbb2JqZWN0IEVycm9yXSJdPUxbUl09TFsiW29iamVjdCBXZWFrTWFwXSJdPSExLGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyOSksbz1PYmplY3QuY3JlYXRlLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm57fTtpZihvKXJldHVybiBvKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxufX0oKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gbyhlLGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSksbn12YXIgbz1uKDEyNSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgscz1uKyhyPzE6LTEpO3I/cy0tOisrczxvOylpZih0KGVbc10scyxlKSlyZXR1cm4gcztyZXR1cm4tMX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4saSxhKXt2YXIgbD0tMSx1PWUubGVuZ3RoO2ZvcihufHwobj1zKSxhfHwoYT1bXSk7KytsPHU7KXt2YXIgYz1lW2xdO3Q+MCYmbihjKT90PjE/cihjLHQtMSxuLGksYSk6byhhLGMpOml8fChhW2EubGVuZ3RoXT1jKX1yZXR1cm4gYX12YXIgbz1uKDEyNCkscz1uKDUyMSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUwMCksbz1yKCk7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJm8oZSx0LHMpfXZhciBvPW4oNDY0KSxzPW4oNDIpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBzKGUpJiZvKGUpPT1pfXZhciBvPW4oNTApLHM9big1MSksaT0iW29iamVjdCBBcmd1bWVudHNdIjtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scixoLGIpe3ZhciBFPXUoZSkseT11KHQpLHY9ZixUPWY7RXx8KHY9bChlKSx2PXY9PXA/bTp2KSx5fHwoVD1sKHQpLFQ9VD09cD9tOlQpO3ZhciBBPXY9PW0sQz1UPT1tLE89dj09VDtpZihPJiZjKGUpKXtpZighYyh0KSlyZXR1cm4hMTtFPSEwLEE9ITF9aWYoTyYmIUEpcmV0dXJuIGJ8fChiPW5ldyBvKSxFfHxkKGUpP3MoZSx0LG4scixoLGIpOmkoZSx0LHYsbixyLGgsYik7aWYoIShuJl8pKXt2YXIgUz1BJiZnLmNhbGwoZSwiX193cmFwcGVkX18iKSxSPUMmJmcuY2FsbCh0LCJfX3dyYXBwZWRfXyIpO2lmKFN8fFIpe3ZhciBqPVM/ZS52YWx1ZSgpOmUseD1SP3QudmFsdWUoKTp0O3JldHVybiBifHwoYj1uZXcgbyksaChqLHgsbixyLGIpfX1yZXR1cm4hIU8mJihifHwoYj1uZXcgbyksYShlLHQsbixyLGgsYikpfXZhciBvPW4oMTIzKSxzPW4oMjQ1KSxpPW4oNTA0KSxhPW4oNTA1KSxsPW4oMjUwKSx1PW4oMTMpLGM9bigxMzQpLGQ9bigyNjEpLF89MSxwPSJbb2JqZWN0IEFyZ3VtZW50c10iLGY9IltvYmplY3QgQXJyYXldIixtPSJbb2JqZWN0IE9iamVjdF0iLGg9T2JqZWN0LnByb3RvdHlwZSxnPWguaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBsPW4ubGVuZ3RoLHU9bCxjPSFyO2lmKG51bGw9PWUpcmV0dXJuIXU7Zm9yKGU9T2JqZWN0KGUpO2wtLTspe3ZhciBkPW5bbF07aWYoYyYmZFsyXT9kWzFdIT09ZVtkWzBdXTohKGRbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysrbDx1Oyl7ZD1uW2xdO3ZhciBfPWRbMF0scD1lW19dLGY9ZFsxXTtpZihjJiZkWzJdKXtpZih2b2lkIDA9PT1wJiYhKF8gaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgbT1uZXcgbztpZihyKXZhciBoPXIocCxmLF8sZSx0LG0pO2lmKCEodm9pZCAwPT09aD9zKGYscCxpfGEscixtKTpoKSlyZXR1cm4hMX19cmV0dXJuITB9dmFyIG89bigxMjMpLHM9bigyNDEpLGk9MSxhPTI7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiEoIWkoZSl8fHMoZSkpJiYobyhlKT9mOnUpLnRlc3QoYShlKSl9dmFyIG89bigyNjApLHM9big1MjQpLGk9bigyOSksYT1uKDI1NiksbD0vW1xcXiQuKis/KClbXF17fXxdL2csdT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUsXz1jLnRvU3RyaW5nLHA9ZC5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrXy5jYWxsKHApLnJlcGxhY2UobCwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSkmJnMoZS5sZW5ndGgpJiYhIWFbbyhlKV19dmFyIG89big1MCkscz1uKDEzNSksaT1uKDUxKSxhPXt9O2FbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPWFbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWFbIltvYmplY3QgSW50OEFycmF5XSJdPWFbIltvYmplY3QgSW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IEludDMyQXJyYXldIl09YVsiW29iamVjdCBVaW50OEFycmF5XSJdPWFbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09YVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGFbIltvYmplY3QgQXJndW1lbnRzXSJdPWFbIltvYmplY3QgQXJyYXldIl09YVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1hWyJbb2JqZWN0IEJvb2xlYW5dIl09YVsiW29iamVjdCBEYXRhVmlld10iXT1hWyJbb2JqZWN0IERhdGVdIl09YVsiW29iamVjdCBFcnJvcl0iXT1hWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWFbIltvYmplY3QgTWFwXSJdPWFbIltvYmplY3QgTnVtYmVyXSJdPWFbIltvYmplY3QgT2JqZWN0XSJdPWFbIltvYmplY3QgUmVnRXhwXSJdPWFbIltvYmplY3QgU2V0XSJdPWFbIltvYmplY3QgU3RyaW5nXSJdPWFbIltvYmplY3QgV2Vha01hcF0iXT0hMSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIW8oZSkpcmV0dXJuIHMoZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9iamVjdChlKSlhLmNhbGwoZSxuKSYmImNvbnN0cnVjdG9yIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fXZhciBvPW4oMTMxKSxzPW4oNTM2KSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtpZighbyhlKSlyZXR1cm4gaShlKTt2YXIgdD1zKGUpLG49W107Zm9yKHZhciByIGluIGUpKCJjb25zdHJ1Y3RvciIhPXJ8fCF0JiZsLmNhbGwoZSxyKSkmJm4ucHVzaChyKTtyZXR1cm4gbn12YXIgbz1uKDI5KSxzPW4oMTMxKSxpPW4oNTM3KSxhPU9iamVjdC5wcm90b3R5cGUsbD1hLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1zKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT9pKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT1lfHxvKG4sZSx0KX19dmFyIG89big0NjkpLHM9big1MDgpLGk9bigyNTQpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBhKGUpJiZsKHQpP3UoYyhlKSx0KTpmdW5jdGlvbihuKXt2YXIgcj1zKG4sZSk7cmV0dXJuIHZvaWQgMD09PXImJnI9PT10P2kobixlKTpvKHQscixkfF8pfX12YXIgbz1uKDI0MSkscz1uKDI1OCksaT1uKDU2MSksYT1uKDEzMCksbD1uKDI1MiksdT1uKDI1NCksYz1uKDY1KSxkPTEsXz0yO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvKHQsZSl9fXZhciBvPW4oMTI2KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX19ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbixyLG8pe3JldHVybiBvKGUsZnVuY3Rpb24oZSxvLHMpe249cj8ocj0hMSxlKTp0KG4sZSxvLHMpfSksbn1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTU3KSxvPW4oMjQ0KSxzPW4oMjU5KSxpPW8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnIodCksd3JpdGFibGU6ITB9KX06cztlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbjtyZXR1cm4gbyhlLGZ1bmN0aW9uKGUscixvKXtyZXR1cm4hKG49dChlLHIsbykpfSksISFufXZhciBvPW4oMTI1KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGkoZSkpcmV0dXJuIHMoZSxyKSsiIjtpZihhKGUpKXJldHVybiBjP2MuY2FsbChlKToiIjt2YXIgdD1lKyIiO3JldHVybiIwIj09dCYmMS9lPT0tbD8iLTAiOnR9dmFyIG89big0OSkscz1uKDIzNiksaT1uKDEzKSxhPW4oOTEpLGw9MS8wLHU9bz9vLnByb3RvdHlwZTp2b2lkIDAsYz11P3UudG9TdHJpbmc6dm9pZCAwO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdD1vKHQsZSksbnVsbD09KGU9aShlLHQpKXx8ZGVsZXRlIGVbYShzKHQpKV19dmFyIG89big4OCkscz1uKDU2MyksaT1uKDU0MSksYT1uKDY1KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGUuaGFzKHQpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49dm9pZCAwPT09bj9yOm4sIXQmJm4+PXI/ZTpvKGUsdCxuKX12YXIgbz1uKDI0Mik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1lLmxlbmd0aCxyPXU/dShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9dmFyIG89bigyNikscz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LGk9cyYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPWkmJmkuZXhwb3J0cz09PXMsbD1hP28uQnVmZmVyOnZvaWQgMCx1PWw/bC5hbGxvY1Vuc2FmZTp2b2lkIDA7ZS5leHBvcnRzPXJ9KS5jYWxsKHQsbigxMzYpKGUpKX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10P28oZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihuLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXZhciBvPW4oMTI3KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQ/bihpKGUpLGEpOmkoZSk7cmV0dXJuIHMocixvLG5ldyBlLmNvbnN0cnVjdG9yKX12YXIgbz1uKDQ1MCkscz1uKDg2KSxpPW4oMjUzKSxhPTE7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLnNvdXJjZSxyLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fXZhciByPS9cdyokLztlLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQ/bihpKGUpLGEpOmkoZSk7cmV0dXJuIHMocixvLG5ldyBlLmNvbnN0cnVjdG9yKX12YXIgbz1uKDQ1MSkscz1uKDg2KSxpPW4oMjU1KSxhPTE7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBpP09iamVjdChpLmNhbGwoZSkpOnt9fXZhciBvPW4oNDkpLHM9bz9vLnByb3RvdHlwZTp2b2lkIDAsaT1zP3MudmFsdWVPZjp2b2lkIDA7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG49dD9vKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfXZhciBvPW4oMTI3KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aDtmb3IodHx8KHQ9QXJyYXkocikpOysrbjxyOyl0W25dPWVbbl07cmV0dXJuIHR9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG8oZSxzKGUpLHQpfXZhciBvPW4oNjQpLHM9bigxMjgpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBvKGUscyhlKSx0KX12YXIgbz1uKDY0KSxzPW4oMjQ5KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjYpLG89clsiX19jb3JlLWpzX3NoYXJlZF9fIl07ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighbyhuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgcz1uLmxlbmd0aCxpPXQ/czotMSxhPU9iamVjdChuKTsodD9pLS06KytpPHMpJiYhMSE9PXIoYVtpXSxpLGEpOyk7cmV0dXJuIG59fXZhciBvPW4oNjcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEscz1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGw9aVtlP2E6KytvXTtpZighMT09PW4oc1tsXSxsLHMpKWJyZWFrfXJldHVybiB0fX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Q9YSh0KTt2YXIgbj1zKHQpP2kodCk6dm9pZCAwLHI9bj9uWzBdOnQuY2hhckF0KDApLGw9bj9vKG4sMSkuam9pbigiIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2x9fXZhciBvPW4oNDg3KSxzPW4oMjUxKSxpPW4oNTUxKSxhPW4oNjgpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBhPU9iamVjdCh0KTtpZighcyh0KSl7dmFyIGw9byhuLDMpO3Q9aSh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBsKGFbZV0sZSxhKX19dmFyIHU9ZSh0LG4scik7cmV0dXJuIHU+LTE/YVtsP3RbdV06dV06dm9pZCAwfX12YXIgbz1uKDYzKSxzPW4oNjcpLGk9big0Mik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQ3OCksbz17IsOAIjoiQSIsIsOBIjoiQSIsIsOCIjoiQSIsIsODIjoiQSIsIsOEIjoiQSIsIsOFIjoiQSIsIsOgIjoiYSIsIsOhIjoiYSIsIsOiIjoiYSIsIsOjIjoiYSIsIsOkIjoiYSIsIsOlIjoiYSIsIsOHIjoiQyIsIsOnIjoiYyIsIsOQIjoiRCIsIsOwIjoiZCIsIsOIIjoiRSIsIsOJIjoiRSIsIsOKIjoiRSIsIsOLIjoiRSIsIsOoIjoiZSIsIsOpIjoiZSIsIsOqIjoiZSIsIsOrIjoiZSIsIsOMIjoiSSIsIsONIjoiSSIsIsOOIjoiSSIsIsOPIjoiSSIsIsOsIjoiaSIsIsOtIjoiaSIsIsOuIjoiaSIsIsOvIjoiaSIsIsORIjoiTiIsIsOxIjoibiIsIsOSIjoiTyIsIsOTIjoiTyIsIsOUIjoiTyIsIsOVIjoiTyIsIsOWIjoiTyIsIsOYIjoiTyIsIsOyIjoibyIsIsOzIjoibyIsIsO0IjoibyIsIsO1IjoibyIsIsO2IjoibyIsIsO4IjoibyIsIsOZIjoiVSIsIsOaIjoiVSIsIsObIjoiVSIsIsOcIjoiVSIsIsO5IjoidSIsIsO6IjoidSIsIsO7IjoidSIsIsO8IjoidSIsIsOdIjoiWSIsIsO9IjoieSIsIsO/IjoieSIsIsOGIjoiQWUiLCLDpiI6ImFlIiwiw54iOiJUaCIsIsO+IjoidGgiLCLDnyI6InNzIiwixIAiOiJBIiwixIIiOiJBIiwixIQiOiJBIiwixIEiOiJhIiwixIMiOiJhIiwixIUiOiJhIiwixIYiOiJDIiwixIgiOiJDIiwixIoiOiJDIiwixIwiOiJDIiwixIciOiJjIiwixIkiOiJjIiwixIsiOiJjIiwixI0iOiJjIiwixI4iOiJEIiwixJAiOiJEIiwixI8iOiJkIiwixJEiOiJkIiwixJIiOiJFIiwixJQiOiJFIiwixJYiOiJFIiwixJgiOiJFIiwixJoiOiJFIiwixJMiOiJlIiwixJUiOiJlIiwixJciOiJlIiwixJkiOiJlIiwixJsiOiJlIiwixJwiOiJHIiwixJ4iOiJHIiwixKAiOiJHIiwixKIiOiJHIiwixJ0iOiJnIiwixJ8iOiJnIiwixKEiOiJnIiwixKMiOiJnIiwixKQiOiJIIiwixKYiOiJIIiwixKUiOiJoIiwixKciOiJoIiwixKgiOiJJIiwixKoiOiJJIiwixKwiOiJJIiwixK4iOiJJIiwixLAiOiJJIiwixKkiOiJpIiwixKsiOiJpIiwixK0iOiJpIiwixK8iOiJpIiwixLEiOiJpIiwixLQiOiJKIiwixLUiOiJqIiwixLYiOiJLIiwixLciOiJrIiwixLgiOiJrIiwixLkiOiJMIiwixLsiOiJMIiwixL0iOiJMIiwixL8iOiJMIiwixYEiOiJMIiwixLoiOiJsIiwixLwiOiJsIiwixL4iOiJsIiwixYAiOiJsIiwixYIiOiJsIiwixYMiOiJOIiwixYUiOiJOIiwixYciOiJOIiwixYoiOiJOIiwixYQiOiJuIiwixYYiOiJuIiwixYgiOiJuIiwixYsiOiJuIiwixYwiOiJPIiwixY4iOiJPIiwixZAiOiJPIiwixY0iOiJvIiwixY8iOiJvIiwixZEiOiJvIiwixZQiOiJSIiwixZYiOiJSIiwixZgiOiJSIiwixZUiOiJyIiwixZciOiJyIiwixZkiOiJyIiwixZoiOiJTIiwixZwiOiJTIiwixZ4iOiJTIiwixaAiOiJTIiwixZsiOiJzIiwixZ0iOiJzIiwixZ8iOiJzIiwixaEiOiJzIiwixaIiOiJUIiwixaQiOiJUIiwixaYiOiJUIiwixaMiOiJ0IiwixaUiOiJ0IiwixaciOiJ0IiwixagiOiJVIiwixaoiOiJVIiwixawiOiJVIiwixa4iOiJVIiwixbAiOiJVIiwixbIiOiJVIiwixakiOiJ1IiwixasiOiJ1Iiwixa0iOiJ1Iiwixa8iOiJ1IiwixbEiOiJ1IiwixbMiOiJ1IiwixbQiOiJXIiwixbUiOiJ3IiwixbYiOiJZIiwixbciOiJ5IiwixbgiOiJZIiwixbkiOiJaIiwixbsiOiJaIiwixb0iOiJaIiwixboiOiJ6IiwixbwiOiJ6Iiwixb4iOiJ6IiwixLIiOiJJSiIsIsSzIjoiaWoiLCLFkiI6Ik9lIiwixZMiOiJvZSIsIsWJIjoiJ24iLCLFvyI6InMifSxzPXIobyk7ZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIsbyxBLE8pe3N3aXRjaChuKXtjYXNlIFQ6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIHY6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IUEobmV3IHMoZSksbmV3IHModCkpKTtjYXNlIF86Y2FzZSBwOmNhc2UgaDpyZXR1cm4gaSgrZSwrdCk7Y2FzZSBmOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBnOmNhc2UgRTpyZXR1cm4gZT09dCsiIjtjYXNlIG06dmFyIFM9bDtjYXNlIGI6dmFyIFI9ciZjO2lmKFN8fChTPXUpLGUuc2l6ZSE9dC5zaXplJiYhUilyZXR1cm4hMTt2YXIgaj1PLmdldChlKTtpZihqKXJldHVybiBqPT10O3J8PWQsTy5zZXQoZSx0KTt2YXIgeD1hKFMoZSksUyh0KSxyLG8sQSxPKTtyZXR1cm4gTy5kZWxldGUoZSkseDtjYXNlIHk6aWYoQylyZXR1cm4gQy5jYWxsKGUpPT1DLmNhbGwodCl9cmV0dXJuITF9dmFyIG89big0OSkscz1uKDIzNCksaT1uKDY2KSxhPW4oMjQ1KSxsPW4oMjUzKSx1PW4oMjU1KSxjPTEsZD0yLF89IltvYmplY3QgQm9vbGVhbl0iLHA9IltvYmplY3QgRGF0ZV0iLGY9IltvYmplY3QgRXJyb3JdIixtPSJbb2JqZWN0IE1hcF0iLGg9IltvYmplY3QgTnVtYmVyXSIsZz0iW29iamVjdCBSZWdFeHBdIixiPSJbb2JqZWN0IFNldF0iLEU9IltvYmplY3QgU3RyaW5nXSIseT0iW29iamVjdCBTeW1ib2xdIix2PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVD0iW29iamVjdCBEYXRhVmlld10iLEE9bz9vLnByb3RvdHlwZTp2b2lkIDAsQz1BP0EudmFsdWVPZjp2b2lkIDA7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIsaSxsKXt2YXIgdT1uJnMsYz1vKGUpLGQ9Yy5sZW5ndGg7aWYoZCE9byh0KS5sZW5ndGgmJiF1KXJldHVybiExO2Zvcih2YXIgXz1kO18tLTspe3ZhciBwPWNbX107aWYoISh1P3AgaW4gdDphLmNhbGwodCxwKSkpcmV0dXJuITF9dmFyIGY9bC5nZXQoZSk7aWYoZiYmbC5nZXQodCkpcmV0dXJuIGY9PXQ7dmFyIG09ITA7bC5zZXQoZSx0KSxsLnNldCh0LGUpO2Zvcih2YXIgaD11OysrXzxkOyl7cD1jW19dO3ZhciBnPWVbcF0sYj10W3BdO2lmKHIpdmFyIEU9dT9yKGIsZyxwLHQsZSxsKTpyKGcsYixwLGUsdCxsKTtpZighKHZvaWQgMD09PUU/Zz09PWJ8fGkoZyxiLG4scixsKTpFKSl7bT0hMTticmVha31ofHwoaD0iY29uc3RydWN0b3IiPT1wKX1pZihtJiYhaCl7dmFyIHk9ZS5jb25zdHJ1Y3Rvcix2PXQuY29uc3RydWN0b3I7eSE9diYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIHYmJnYgaW5zdGFuY2VvZiB2KSYmKG09ITEpfXJldHVybiBsLmRlbGV0ZShlKSxsLmRlbGV0ZSh0KSxtfXZhciBvPW4oNDIpLHM9MSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaShzKGUsdm9pZCAwLG8pLGUrIiIpfXZhciBvPW4oNTYwKSxzPW4oNTQwKSxpPW4oNTQ0KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSxpLHMpfXZhciBvPW4oMjQwKSxzPW4oMTI4KSxpPW4oNDIpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9cyhlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0saT1lW3JdO3Rbbl09W3IsaSxvKGkpXX1yZXR1cm4gdH12YXIgbz1uKDI1Mikscz1uKDQyKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9aS5jYWxsKGUsbCksbj1lW2xdO3RyeXtlW2xdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89YS5jYWxsKGUpO3JldHVybiByJiYodD9lW2xdPW46ZGVsZXRlIGVbbF0pLG99dmFyIG89big0OSkscz1PYmplY3QucHJvdG90eXBlLGk9cy5oYXNPd25Qcm9wZXJ0eSxhPXMudG9TdHJpbmcsbD1vP28udG9TdHJpbmdUYWc6dm9pZCAwO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3Q9byh0LGUpO2Zvcih2YXIgcj0tMSxjPXQubGVuZ3RoLGQ9ITE7KytyPGM7KXt2YXIgXz11KHRbcl0pO2lmKCEoZD1udWxsIT1lJiZuKGUsXykpKWJyZWFrO2U9ZVtfXX1yZXR1cm4gZHx8KytyIT1jP2Q6ISEoYz1udWxsPT1lPzA6ZS5sZW5ndGgpJiZsKGMpJiZhKF8sYykmJihpKGUpfHxzKGUpKX12YXIgbz1uKDg4KSxzPW4oMTMzKSxpPW4oMTMpLGE9bigxMjkpLGw9bigxMzUpLHU9big2NSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gci50ZXN0KGUpfXZhciByPS9bYS16XVtBLVpdfFtBLVpdezIsfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztlLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLl9fZGF0YV9fPW8/byhudWxsKTp7fSx0aGlzLnNpemU9MH12YXIgbz1uKDkwKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG8pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1zP3ZvaWQgMDpufXJldHVybiBhLmNhbGwodCxlKT90W2VdOnZvaWQgMH12YXIgbz1uKDkwKSxzPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBvP3ZvaWQgMCE9PXRbZV06aS5jYWxsKHQsZSl9dmFyIG89big5MCkscz1PYmplY3QucHJvdG90eXBlLGk9cy5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPW8mJnZvaWQgMD09PXQ/czp0LHRoaXN9dmFyIG89big5MCkscz0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lLmxlbmd0aCxuPWUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgZVswXSYmby5jYWxsKGUsImluZGV4IikmJihuLmluZGV4PWUuaW5kZXgsbi5pbnB1dD1lLmlucHV0KSxufXZhciByPU9iamVjdC5wcm90b3R5cGUsbz1yLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgTD1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIEU6cmV0dXJuIG8oZSk7Y2FzZSBkOmNhc2UgXzpyZXR1cm4gbmV3IEwoK2UpO2Nhc2UgeTpyZXR1cm4gcyhlLHIpO2Nhc2UgdjpjYXNlIFQ6Y2FzZSBBOmNhc2UgQzpjYXNlIE86Y2FzZSBTOmNhc2UgUjpjYXNlIGo6Y2FzZSB4OnJldHVybiBjKGUscik7Y2FzZSBwOnJldHVybiBpKGUscixuKTtjYXNlIGY6Y2FzZSBnOnJldHVybiBuZXcgTChlKTtjYXNlIG06cmV0dXJuIGEoZSk7Y2FzZSBoOnJldHVybiBsKGUscixuKTtjYXNlIGI6cmV0dXJuIHUoZSl9fXZhciBvPW4oMTI3KSxzPW4oNDg5KSxpPW4oNDkwKSxhPW4oNDkxKSxsPW4oNDkyKSx1PW4oNDkzKSxjPW4oNDk0KSxkPSJbb2JqZWN0IEJvb2xlYW5dIixfPSJbb2JqZWN0IERhdGVdIixwPSJbb2JqZWN0IE1hcF0iLGY9IltvYmplY3QgTnVtYmVyXSIsbT0iW29iamVjdCBSZWdFeHBdIixoPSJbb2JqZWN0IFNldF0iLGc9IltvYmplY3QgU3RyaW5nXSIsYj0iW29iamVjdCBTeW1ib2xdIixFPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIseT0iW29iamVjdCBEYXRhVmlld10iLHY9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsVD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixBPSJbb2JqZWN0IEludDhBcnJheV0iLEM9IltvYmplY3QgSW50MTZBcnJheV0iLE89IltvYmplY3QgSW50MzJBcnJheV0iLFM9IltvYmplY3QgVWludDhBcnJheV0iLFI9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixqPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIseD0iW29iamVjdCBVaW50MzJBcnJheV0iO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8aShlKT97fTpvKHMoZSkpfXZhciBvPW4oNDYwKSxzPW4oMjQ4KSxpPW4oMTMxKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSl8fHMoZSl8fCEhKGEmJmUmJmVbYV0pfXZhciBvPW4oNDkpLHM9bigxMzMpLGk9bigxMyksYT1vP28uaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe2lmKCFhKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1yP3MobikmJmkodCxuLmxlbmd0aCk6InN0cmluZyI9PXImJnQgaW4gbikmJm8oblt0XSxlKX12YXIgbz1uKDY2KSxzPW4oNjcpLGk9bigxMjkpLGE9bigyOSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4hIXMmJnMgaW4gZX12YXIgbz1uKDQ5OCkscz1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMobyYmby5rZXlzJiZvLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gZT8iU3ltYm9sKHNyYylfMS4iK2U6IiJ9KCk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1vKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6aS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9dmFyIG89big4Nykscz1BcnJheS5wcm90b3R5cGUsaT1zLnNwbGljZTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPW8odCxlKTtyZXR1cm4gbjwwP3ZvaWQgMDp0W25dWzFdfXZhciBvPW4oODcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyh0aGlzLl9fZGF0YV9fLGUpPi0xfXZhciBvPW4oODcpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1vKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9dmFyIG89big4Nyk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgbyxtYXA6bmV3KGl8fHMpLHN0cmluZzpuZXcgb319dmFyIG89big0NDUpLHM9big4NSksaT1uKDEyMSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW8odGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH12YXIgbz1uKDg5KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxlKS5nZXQoZSl9dmFyIG89big4OSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsZSkuaGFzKGUpfXZhciBvPW4oODkpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPW8odGhpcyxlKSxyPW4uc2l6ZTtyZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemUrPW4uc2l6ZT09cj8wOjEsdGhpc312YXIgbz1uKDg5KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9byhlLGZ1bmN0aW9uKGUpe3JldHVybiBuLnNpemU9PT1zJiZuLmNsZWFyKCksZX0pLG49dC5jYWNoZTtyZXR1cm4gdH12YXIgbz1uKDI2Mykscz01MDA7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEzMiksbz1yKE9iamVjdC5rZXlzLE9iamVjdCk7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPYmplY3QoZSkpdC5wdXNoKG4pO3JldHVybiB0fWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpe3ZhciByPW4oMjQ2KSxvPSJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQscz1vJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGk9cyYmcy5leHBvcnRzPT09byxhPWkmJnIucHJvY2VzcyxsPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhJiZhLmJpbmRpbmcmJmEuYmluZGluZygidXRpbCIpfWNhdGNoKGUpe319KCk7ZS5leHBvcnRzPWx9KS5jYWxsKHQsbigxMzYpKGUpKX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBvLmNhbGwoZSl9dmFyIHI9T2JqZWN0LnByb3RvdHlwZSxvPXIudG9TdHJpbmc7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtyZXR1cm4gdD1zKHZvaWQgMD09PXQ/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cyxpPS0xLGE9cyhyLmxlbmd0aC10LDApLGw9QXJyYXkoYSk7KytpPGE7KWxbaV09clt0K2ldO2k9LTE7Zm9yKHZhciB1PUFycmF5KHQrMSk7KytpPHQ7KXVbaV09cltpXTtyZXR1cm4gdVt0XT1uKGwpLG8oZSx0aGlzLHUpfX12YXIgbz1uKDQ1Mikscz1NYXRoLm1heDtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdC5sZW5ndGg8Mj9lOm8oZSxzKHQsMCwtMSkpfXZhciBvPW4oMTI2KSxzPW4oMjQyKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLHIpLHRoaXN9dmFyIHI9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0ODApLG89big1NDUpLHM9byhyKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PTAsbj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXMoKSxhPW8tKGktbik7aWYobj1pLGE+MCl7aWYoKyt0Pj1yKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciByPTgwMCxvPTE2LHM9RGF0ZS5ub3c7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7dGhpcy5fX2RhdGFfXz1uZXcgbyx0aGlzLnNpemU9MH12YXIgbz1uKDg1KTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIG8pe3ZhciByPW4uX19kYXRhX187aWYoIXN8fHIubGVuZ3RoPGEtMSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGkocil9cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfXZhciBvPW4oODUpLHM9bigxMjEpLGk9bigxMjIpLGE9MjAwO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gcyhlKT9pKGUpOm8oZSl9dmFyIG89big0NTUpLHM9bigyNTEpLGk9big1NTMpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1MzUpLG89L15cLi8scz0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxpPS9cXChcXCk/L2csYT1yKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBvLnRlc3QoZSkmJnQucHVzaCgiIiksZS5yZXBsYWNlKHMsZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKGksIiQxIik6bnx8ZSl9KSx0fSk7ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5tYXRjaChkKXx8W119dmFyIHI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixvPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHM9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLGk9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGE9Iig/OltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdfFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/IixsPSIoPzpcXHUyMDBkKD86IitbIlteXFx1ZDgwMC1cXHVkZmZmXSIscyxpXS5qb2luKCJ8IikrIilbXFx1ZmUwZVxcdWZlMGZdPyIrYSsiKSoiLHU9IltcXHVmZTBlXFx1ZmUwZl0/IithK2wsYz0iKD86IitbIlteXFx1ZDgwMC1cXHVkZmZmXSIrcisiPyIscixzLGksIltcXHVkODAwLVxcdWRmZmZdIl0uam9pbigifCIpKyIpIixkPVJlZ0V4cChvKyIoPz0iK28rIil8IitjK3UsImciKTtlLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBlLm1hdGNoKGYpfHxbXX12YXIgcj0iXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMCIsbz0iWyIrcisiXSIscz0iW2EtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZdIixpPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixhPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixsPSJbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0iLHU9Iig/OiIrcysifFteXFx1ZDgwMC1cXHVkZmZmXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcZCtcXHUyNzAwLVxcdTI3YmZhLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0pIixjPSIoPzpbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXXxcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0pPyIsZD0iKD86XFx1MjAwZCg/OiIrWyJbXlxcdWQ4MDAtXFx1ZGZmZl0iLGksYV0uam9pbigifCIpKyIpW1xcdWZlMGVcXHVmZTBmXT8iK2MrIikqIixfPSJbXFx1ZmUwZVxcdWZlMGZdPyIrYytkLHA9Iig/OiIrWyJbXFx1MjcwMC1cXHUyN2JmXSIsaSxhXS5qb2luKCJ8IikrIikiK18sZj1SZWdFeHAoW2wrIj8iK3MrIisoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/KD89IitbbyxsLCIkIl0uam9pbigifCIpKyIpIiwiKD86W0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdfFteXFx1ZDgwMC1cXHVkZmZmXFx4YWNcXHhiMVxceGQ3XFx4ZjdcXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHhiZlxcdTIwMDAtXFx1MjA2ZiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcZCtcXHUyNzAwLVxcdTI3YmZhLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0pKyg/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT8oPz0iK1tvLGwrdSwiJCJdLmpvaW4oInwiKSsiKSIsbCsiPyIrdSsiKyg/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT8iLGwrIisoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/IiwiXFxkKig/Oig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKVxcYikiLCJcXGQqKD86KD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpXFxiKSIsIlxcZCsiLHBdLmpvaW4oInwiKSwiZyIpO2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1NTYpLG89bigyNDMpLHM9byhmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLGUrKG4/cih0KTp0KX0pO2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gcyhvKGUpLnRvTG93ZXJDYXNlKCkpfXZhciBvPW4oNjgpLHM9bigyNjUpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4oZT1zKGUpKSYmZS5yZXBsYWNlKGksbykucmVwbGFjZShhLCIiKX12YXIgbz1uKDUwMykscz1uKDY4KSxpPS9bXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXHUwMTAwLVx1MDE3Zl0vZyxhPVJlZ0V4cCgiW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLCJnIik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGw9bnVsbD09bj8wOmkobik7cmV0dXJuIGw8MCYmKGw9YShyK2wsMCkpLG8oZSxzKHQsMyksbCl9dmFyIG89big0NjIpLHM9big2MyksaT1uKDU3MyksYT1NYXRoLm1heDtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuKG51bGw9PWU/MDplLmxlbmd0aCk/byhlLDEpOltdfXZhciBvPW4oNDYzKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmcyhlLHQsbyl9dmFyIG89big0NjYpLHM9big1MTEpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fCFzKGUpJiZpKGUpJiZvKGUpPT1hfXZhciBvPW4oNTApLHM9bigxMyksaT1uKDUxKSxhPSJbb2JqZWN0IFN0cmluZ10iO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTp2b2lkIDB9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI0Myksbz1yKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj8iICI6IiIpK3QudG9Mb3dlckNhc2UoKX0pO2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX12YXIgcj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIzNiksbz1uKDQ1OSkscz1uKDQ4NSksaT1uKDg4KSxhPW4oNjQpLGw9big1MDYpLHU9bigyNDcpLGM9bChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2lmKG51bGw9PWUpcmV0dXJuIG47dmFyIGw9ITE7dD1yKHQsZnVuY3Rpb24odCl7cmV0dXJuIHQ9aSh0LGUpLGx8fChsPXQubGVuZ3RoPjEpLHR9KSxhKGUsdShlKSxuKSxsJiYobj1vKG4sNykpO2Zvcih2YXIgYz10Lmxlbmd0aDtjLS07KXMobix0W2NdKTtyZXR1cm4gbn0pO2UuZXhwb3J0cz1jfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaShlKT9vKGEoZSkpOnMoZSl9dmFyIG89big0NzYpLHM9big0NzcpLGk9bigxMzApLGE9big2NSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1sKGUpP286YSx1PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGkodCw0KSxuLHUscyl9dmFyIG89big4Nikscz1uKDEyNSksaT1uKDYzKSxhPW4oNDc5KSxsPW4oMTMpO2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybihhKGUpP286cykoZSxsKGkodCwzKSkpfXZhciBvPW4oNDU0KSxzPW4oNDYxKSxpPW4oNjMpLGE9bigxMyksbD1uKDU2NSk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1hKGUpP286aTtyZXR1cm4gbiYmbChlLHQsbikmJih0PXZvaWQgMCkscihlLHModCwzKSl9dmFyIG89bigyMzcpLHM9big2MyksaT1uKDQ4MSksYT1uKDEzKSxsPW4oNTIyKTtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7cmV0dXJuITF9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlPyhlPW8oZSkpPT09c3x8ZT09PS1zPyhlPDA/LTE6MSkqaTplPT09ZT9lOjA6MD09PWU/ZTowfXZhciBvPW4oNTc0KSxzPTEvMCxpPTEuNzk3NjkzMTM0ODYyMzE1N2UzMDg7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PW8oZSksbj10JTE7cmV0dXJuIHQ9PT10P24/dC1uOnQ6MH12YXIgbz1uKDU3Mik7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihzKGUpKXJldHVybiBpO2lmKG8oZSkpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW8odCk/dCsiIjp0fWlmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShhLCIiKTt2YXIgbj11LnRlc3QoZSk7cmV0dXJuIG58fGMudGVzdChlKT9kKGUuc2xpY2UoMiksbj8yOjgpOmwudGVzdChlKT9pOitlfXZhciBvPW4oMjkpLHM9big5MSksaT1OYU4sYT0vXlxzK3xccyskL2csbD0vXlstK10weFswLTlhLWZdKyQvaSx1PS9eMGJbMDFdKyQvaSxjPS9eMG9bMC03XSskL2ksZD1wYXJzZUludDtlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBlPWkoZSksdD1uP3ZvaWQgMDp0LHZvaWQgMD09PXQ/cyhlKT9hKGUpOm8oZSk6ZS5tYXRjaCh0KXx8W119dmFyIG89big0NTYpLHM9big1MTIpLGk9big2OCksYT1uKDU1NCk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSctLS1cbnVybDogImh0dHA6Ly9wZXRzdG9yZS5zd2FnZ2VyLmlvL3YyL3N3YWdnZXIuanNvbiJcbmRvbV9pZDogIiNzd2FnZ2VyLXVpIlxudmFsaWRhdG9yVXJsOiAiaHR0cHM6Ly9vbmxpbmUuc3dhZ2dlci5pby92YWxpZGF0b3IiXG5vYXV0aDJSZWRpcmVjdFVybDogImh0dHA6Ly9sb2NhbGhvc3Q6MzIwMC9vYXV0aDItcmVkaXJlY3QuaHRtbCJcbid9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBuKG8oZSkpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9c1tlXTtpZighKHQrMSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZSsiJy4iKTtyZXR1cm4gdH12YXIgcz17Ii4vYWxsLmpzIjoxNDEsIi4vYXN0L2FzdC5qcyI6MTQyLCIuL2FzdC9pbmRleC5qcyI6MTQzLCIuL2FzdC9qdW1wLXRvLXBhdGguanN4IjoxNDQsIi4vYXV0aC9hY3Rpb25zLmpzIjo5MiwiLi9hdXRoL2luZGV4LmpzIjoxNDUsIi4vYXV0aC9yZWR1Y2Vycy5qcyI6MTQ2LCIuL2F1dGgvc2VsZWN0b3JzLmpzIjoxNDcsIi4vYXV0aC9zcGVjLXdyYXAtYWN0aW9ucy5qcyI6MTQ4LCIuL2NvbmZpZ3MvYWN0aW9ucy5qcyI6OTMsIi4vY29uZmlncy9pbmRleC5qcyI6MTQ5LCIuL2NvbmZpZ3MvcmVkdWNlcnMuanMiOjE1MCwiLi9jb25maWdzL3NlbGVjdG9ycy5qcyI6MTUxLCIuL2RlZXAtbGlua2luZy9oZWxwZXJzLmpzIjoxNTIsIi4vZGVlcC1saW5raW5nL2luZGV4LmpzIjoxNTMsIi4vZGVlcC1saW5raW5nL2xheW91dC13cmFwLWFjdGlvbnMuanMiOjE1NCwiLi9kZWVwLWxpbmtpbmcvc3BlYy13cmFwLWFjdGlvbnMuanMiOjE1NSwiLi9kb3dubG9hZC11cmwuanMiOjE1NiwiLi9lcnIvYWN0aW9ucy5qcyI6NjksIi4vZXJyL2Vycm9yLXRyYW5zZm9ybWVycy9ob29rLmpzIjoxNTcsIi4vZXJyL2Vycm9yLXRyYW5zZm9ybWVycy90cmFuc2Zvcm1lcnMvbm90LW9mLXR5cGUuanMiOjE1OCwiLi9lcnIvZXJyb3ItdHJhbnNmb3JtZXJzL3RyYW5zZm9ybWVycy9wYXJhbWV0ZXItb25lb2YuanMiOjE1OSwiLi9lcnIvZXJyb3ItdHJhbnNmb3JtZXJzL3RyYW5zZm9ybWVycy9zdHJpcC1pbnN0YW5jZS5qcyI6MTYwLCIuL2Vyci9pbmRleC5qcyI6MTYxLCIuL2Vyci9yZWR1Y2Vycy5qcyI6MTYyLCIuL2Vyci9zZWxlY3RvcnMuanMiOjE2MywiLi9sYXlvdXQvYWN0aW9ucy5qcyI6OTQsIi4vbGF5b3V0L2luZGV4LmpzIjoxNjQsIi4vbGF5b3V0L3JlZHVjZXJzLmpzIjoxNjUsIi4vbGF5b3V0L3NlbGVjdG9ycy5qcyI6MTY2LCIuL2xvZ3MvaW5kZXguanMiOjE2NywiLi9vYXMzL2FjdGlvbnMuanMiOjk1LCIuL29hczMvYXV0aC1leHRlbnNpb25zL3dyYXAtc2VsZWN0b3JzLmpzIjoxNjgsIi4vb2FzMy9jb21wb25lbnRzL2NhbGxiYWNrcy5qc3giOjE2OSwiLi9vYXMzL2NvbXBvbmVudHMvaHR0cC1hdXRoLmpzeCI6MTcwLCIuL29hczMvY29tcG9uZW50cy9pbmRleC5qcyI6MTcxLCIuL29hczMvY29tcG9uZW50cy9vcGVyYXRpb24tbGluay5qc3giOjE3MiwiLi9vYXMzL2NvbXBvbmVudHMvb3BlcmF0aW9uLXNlcnZlcnMuanN4IjoxNzMsIi4vb2FzMy9jb21wb25lbnRzL3JlcXVlc3QtYm9keS1lZGl0b3IuanN4IjoxNzQsIi4vb2FzMy9jb21wb25lbnRzL3JlcXVlc3QtYm9keS5qc3giOjE3NSwiLi9vYXMzL2NvbXBvbmVudHMvc2VydmVycy5qc3giOjE3NiwiLi9vYXMzL2hlbHBlcnMuanMiOjIwLCIuL29hczMvaW5kZXguanMiOjE3NywiLi9vYXMzL3JlZHVjZXJzLmpzIjoxNzgsIi4vb2FzMy9zZWxlY3RvcnMuanMiOjE3OSwiLi9vYXMzL3NwZWMtZXh0ZW5zaW9ucy9zZWxlY3RvcnMuanMiOjE4MCwiLi9vYXMzL3NwZWMtZXh0ZW5zaW9ucy93cmFwLXNlbGVjdG9ycy5qcyI6MTgxLCIuL29hczMvd3JhcC1jb21wb25lbnRzL2F1dGgtaXRlbS5qc3giOjE4MiwiLi9vYXMzL3dyYXAtY29tcG9uZW50cy9pbmRleC5qcyI6MTgzLCIuL29hczMvd3JhcC1jb21wb25lbnRzL21hcmtkb3duLmpzIjoxODQsIi4vb2FzMy93cmFwLWNvbXBvbmVudHMvbW9kZWwuanN4IjoxODUsIi4vb2FzMy93cmFwLWNvbXBvbmVudHMvb25saW5lLXZhbGlkYXRvci1iYWRnZS5qcyI6MTg2LCIuL29hczMvd3JhcC1jb21wb25lbnRzL3BhcmFtZXRlcnMuanN4IjoxODcsIi4vb2FzMy93cmFwLWNvbXBvbmVudHMvdmVyc2lvbi1zdGFtcC5qc3giOjE4OCwiLi9zYW1wbGVzL2ZuLmpzIjo5NiwiLi9zYW1wbGVzL2luZGV4LmpzIjoxODksIi4vc3BlYy9hY3Rpb25zLmpzIjo5NywiLi9zcGVjL2luZGV4LmpzIjoxOTAsIi4vc3BlYy9yZWR1Y2Vycy5qcyI6MTkxLCIuL3NwZWMvc2VsZWN0b3JzLmpzIjoxOTIsIi4vc3BlYy93cmFwLWFjdGlvbnMuanMiOjE5MywiLi9zcGxpdC1wYW5lLW1vZGUvY29tcG9uZW50cy9zcGxpdC1wYW5lLW1vZGUuanN4IjoxOTQsIi4vc3BsaXQtcGFuZS1tb2RlL2luZGV4LmpzIjoxOTUsIi4vc3dhZ2dlci1qcy9pbmRleC5qcyI6MTk2LCIuL3V0aWwvaW5kZXguanMiOjE5NywiLi92aWV3L2luZGV4LmpzIjoxOTgsIi4vdmlldy9yb290LWluamVjdHMuanMiOjE5OX07ci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHMpfSxyLnJlc29sdmU9byxlLmV4cG9ydHM9cixyLmlkPTU3N30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY29tbW9ubWFyay9saWIvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9tZW1vaXplZS9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW1tdXRhYmxlLXB1cmUtY29tcG9uZW50L2xpYi9yZWFjdC1pbW11dGFibGUtcHVyZS1jb21wb25lbnQuZXMuanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFya2Rvd24vc3JjL3JlYWN0LW1hcmtkb3duLmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2xpYi9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1zcGxpdC1wYW5lL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWltbXV0YWJsZS9kaXN0L2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3JlbWFya2FibGUvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMvc2FuaXRpemUtaHRtbC9kaXN0L2luZGV4LmpzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy94bWwvbGliL3htbC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy94bWwtYnV0LXByZXR0aWVyL2Rpc3QvaW5kZXguanMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIveWFtbC5qcyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy96ZW5zY3JvbGwvemVuc2Nyb2xsLmpzIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDI3MyksbigyNzIpLGUuZXhwb3J0cz1uKDI3MSl9XSl9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V2ZW50TGlzdGVuZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIpLG89e2xpc3RlbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj8oZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSkse3JlbW92ZTpmdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfX0pOmUuYXR0YWNoRXZlbnQ/KGUuYXR0YWNoRXZlbnQoIm9uIit0LG4pLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLmRldGFjaEV2ZW50KCJvbiIrdCxuKX19KTp2b2lkIDB9LGNhcHR1cmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXI/KGUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCEwKX19KTp7cmVtb3ZlOnJ9fSxyZWdpc3RlckRlZmF1bHQ6ZnVuY3Rpb24oKXt9fTtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksbz17Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlcixjYW5Vc2VFdmVudExpc3RlbmVyczpyJiYhKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciYmIXdpbmRvdy5hdHRhY2hFdmVudCksY2FuVXNlVmlld3BvcnQ6ciYmISF3aW5kb3cuc2NyZWVuLGlzSW5Xb3JrZXI6IXJ9O2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvY2FtZWxpemUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBsYWNlKG8sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSl9dmFyIG89Ly0oLikvZztlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2NhbWVsaXplU3R5bGVOYW1lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZS5yZXBsYWNlKHMsIm1zLSIpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jYW1lbGl6ZS5qcyIpLHM9L14tbXMtLztlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2NvbnRhaW5zTm9kZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuISghZXx8IXQpJiYoZT09PXR8fCFvKGUpJiYobyh0KT9yKGUsdC5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gZT9lLmNvbnRhaW5zKHQpOiEhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmISEoMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSkpKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pc1RleHROb2RlLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jcmVhdGVBcnJheUZyb21NaXhlZC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubGVuZ3RoO2lmKChBcnJheS5pc0FycmF5KGUpfHwib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKSYmaSghMSksIm51bWJlciIhPXR5cGVvZiB0JiZpKCExKSwwPT09dHx8dC0xIGluIGV8fGkoITEpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZSYmaSghMSksZS5oYXNPd25Qcm9wZXJ0eSl0cnl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpfWNhdGNoKGUpe31mb3IodmFyIG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIG8oZSl7cmV0dXJuISFlJiYoIm9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkmJiJsZW5ndGgiaW4gZSYmISgic2V0SW50ZXJ2YWwiaW4gZSkmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmKEFycmF5LmlzQXJyYXkoZSl8fCJjYWxsZWUiaW4gZXx8Iml0ZW0iaW4gZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbyhlKT9BcnJheS5pc0FycmF5KGUpP2Uuc2xpY2UoKTpyKGUpOltlXX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubWF0Y2goYyk7cmV0dXJuIHQmJnRbMV0udG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49dTt1fHxsKCExKTt2YXIgbz1yKGUpLHM9byYmYShvKTtpZihzKXtuLmlubmVySFRNTD1zWzFdK2Urc1syXTtmb3IodmFyIGM9c1swXTtjLS07KW49bi5sYXN0Q2hpbGR9ZWxzZSBuLmlubmVySFRNTD1lO3ZhciBkPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2QubGVuZ3RoJiYodHx8bCghMSksaShkKS5mb3JFYWNoKHQpKTtmb3IodmFyIF89QXJyYXkuZnJvbShuLmNoaWxkTm9kZXMpO24ubGFzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4ubGFzdENoaWxkKTtyZXR1cm4gX312YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2dldE1hcmt1cFdyYXAuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLHU9cy5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxjPS9eXHMqPChcdyspLztlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG89ZnVuY3Rpb24oKXt9O28udGhhdFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJuc1RydWU9cighMCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlPYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9mb2N1c05vZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0cnl7ZS5mb2N1cygpfWNhdGNoKGUpe319ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRBY3RpdmVFbGVtZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYodm9pZCAwPT09KGU9ZXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKSkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaCh0KXtyZXR1cm4gZS5ib2R5fX1lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2dldE1hcmt1cFdyYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaXx8cyghMSksXy5oYXNPd25Qcm9wZXJ0eShlKXx8KGU9IioiKSxhLmhhc093blByb3BlcnR5KGUpfHwoaS5pbm5lckhUTUw9IioiPT09ZT8iPGxpbmsgLz4iOiI8IitlKyI+PC8iK2UrIj4iLGFbZV09IWkuZmlyc3RDaGlsZCksYVtlXT9fW2VdOm51bGx9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLGk9by5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxhPXt9LGw9WzEsJzxzZWxlY3QgbXVsdGlwbGU9InRydWUiPicsIjwvc2VsZWN0PiJdLHU9WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGM9WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLGQ9WzEsJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nLCI8L3N2Zz4iXSxfPXsiKiI6WzEsIj88ZGl2PiIsIjwvZGl2PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxvcHRncm91cDpsLG9wdGlvbjpsLGNhcHRpb246dSxjb2xncm91cDp1LHRib2R5OnUsdGZvb3Q6dSx0aGVhZDp1LHRkOmMsdGg6Y307WyJjaXJjbGUiLCJjbGlwUGF0aCIsImRlZnMiLCJlbGxpcHNlIiwiZyIsImltYWdlIiwibGluZSIsImxpbmVhckdyYWRpZW50IiwibWFzayIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInRleHQiLCJ0c3BhbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7X1tlXT1kLGFbZV09ITB9KSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuV2luZG93JiZlIGluc3RhbmNlb2YgZS5XaW5kb3c/e3g6ZS5wYWdlWE9mZnNldHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCx5OmUucGFnZVlPZmZzZXR8fGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcH06e3g6ZS5zY3JvbGxMZWZ0LHk6ZS5zY3JvbGxUb3B9fWUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaHlwaGVuYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShvLCItJDEiKS50b0xvd2VyQ2FzZSgpfXZhciBvPS8oW0EtWl0pL2c7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9oeXBoZW5hdGVTdHlsZU5hbWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKS5yZXBsYWNlKHMsIi1tcy0iKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9oeXBoZW5hdGUuanMiKSxzPS9ebXMtLztlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIscyxpLGEsbCl7aWYobyh0KSwhZSl7dmFyIHU7aWYodm9pZCAwPT09dCl1PW5ldyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBjPVtuLHIscyxpLGEsbF0sZD0wO3U9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBjW2QrK119KSksdS5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyB1LmZyYW1lc1RvUG9wPTEsdX19dmFyIG89ZnVuY3Rpb24oZSl7fTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2lzTm9kZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWU/ZS5vd25lckRvY3VtZW50fHxlOmRvY3VtZW50LG49dC5kZWZhdWx0Vmlld3x8d2luZG93O3JldHVybiEoIWV8fCEoImZ1bmN0aW9uIj09dHlwZW9mIG4uTm9kZT9lIGluc3RhbmNlb2Ygbi5Ob2RlOiJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5cGVvZiBlLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIGUubm9kZU5hbWUpKX1lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2lzVGV4dE5vZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKSYmMz09ZS5ub2RlVHlwZX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pc05vZGUuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT1lLmNhbGwodGhpcyxuKSksdFtuXX19ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9zaGFsbG93RXF1YWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MCE9PXR8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUsdCl7aWYocihlLHQpKXJldHVybiEwO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbz1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKCFzLmNhbGwodCxuW2ldKXx8IXIoZVtuW2ldXSx0W25baV1dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiksbz1yO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gcy5pc01lbW8oZSk/dTpjW2UuJCR0eXBlb2ZdfHxpfWZ1bmN0aW9uIG8oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7aWYoaCl7dmFyIHM9bSh0KTtzJiZzIT09aCYmbyhlLHMsbil9dmFyIGk9Xyh0KTtwJiYoaT1pLmNvbmNhdChwKHQpKSk7Zm9yKHZhciBsPXIoZSksdT1yKHQpLGM9MDtjPGkubGVuZ3RoOysrYyl7dmFyIGc9aVtjXTtpZighKGFbZ118fG4mJm5bZ118fHUmJnVbZ118fGwmJmxbZ10pKXt2YXIgYj1mKHQsZyk7dHJ5e2QoZSxnLGIpfWNhdGNoKGUpe319fXJldHVybiBlfXJldHVybiBlfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiksaT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGU6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZWZhdWx0UHJvcHM6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxtaXhpbnM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LGE9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sbD17JCR0eXBlb2Y6ITAscmVuZGVyOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxwcm9wVHlwZXM6ITB9LHU9eyQkdHlwZW9mOiEwLGNvbXBhcmU6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLHByb3BUeXBlczohMCx0eXBlOiEwfSxjPXt9O2Nbcy5Gb3J3YXJkUmVmXT1sO3ZhciBkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHA9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsaD1PYmplY3QucHJvdG90eXBlO2UuZXhwb3J0cz1vfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NLmpzIil9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0FSSUFET01Qcm9wZXJ0eUNvbmZpZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17UHJvcGVydGllczp7ImFyaWEtY3VycmVudCI6MCwiYXJpYS1kZXRhaWxzIjowLCJhcmlhLWRpc2FibGVkIjowLCJhcmlhLWhpZGRlbiI6MCwiYXJpYS1pbnZhbGlkIjowLCJhcmlhLWtleXNob3J0Y3V0cyI6MCwiYXJpYS1sYWJlbCI6MCwiYXJpYS1yb2xlZGVzY3JpcHRpb24iOjAsImFyaWEtYXV0b2NvbXBsZXRlIjowLCJhcmlhLWNoZWNrZWQiOjAsImFyaWEtZXhwYW5kZWQiOjAsImFyaWEtaGFzcG9wdXAiOjAsImFyaWEtbGV2ZWwiOjAsImFyaWEtbW9kYWwiOjAsImFyaWEtbXVsdGlsaW5lIjowLCJhcmlhLW11bHRpc2VsZWN0YWJsZSI6MCwiYXJpYS1vcmllbnRhdGlvbiI6MCwiYXJpYS1wbGFjZWhvbGRlciI6MCwiYXJpYS1wcmVzc2VkIjowLCJhcmlhLXJlYWRvbmx5IjowLCJhcmlhLXJlcXVpcmVkIjowLCJhcmlhLXNlbGVjdGVkIjowLCJhcmlhLXNvcnQiOjAsImFyaWEtdmFsdWVtYXgiOjAsImFyaWEtdmFsdWVtaW4iOjAsImFyaWEtdmFsdWVub3ciOjAsImFyaWEtdmFsdWV0ZXh0IjowLCJhcmlhLWF0b21pYyI6MCwiYXJpYS1idXN5IjowLCJhcmlhLWxpdmUiOjAsImFyaWEtcmVsZXZhbnQiOjAsImFyaWEtZHJvcGVmZmVjdCI6MCwiYXJpYS1ncmFiYmVkIjowLCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiOjAsImFyaWEtY29sY291bnQiOjAsImFyaWEtY29saW5kZXgiOjAsImFyaWEtY29sc3BhbiI6MCwiYXJpYS1jb250cm9scyI6MCwiYXJpYS1kZXNjcmliZWRieSI6MCwiYXJpYS1lcnJvcm1lc3NhZ2UiOjAsImFyaWEtZmxvd3RvIjowLCJhcmlhLWxhYmVsbGVkYnkiOjAsImFyaWEtb3ducyI6MCwiYXJpYS1wb3NpbnNldCI6MCwiYXJpYS1yb3djb3VudCI6MCwiYXJpYS1yb3dpbmRleCI6MCwiYXJpYS1yb3dzcGFuIjowLCJhcmlhLXNldHNpemUiOjB9LERPTUF0dHJpYnV0ZU5hbWVzOnt9LERPTVByb3BlcnR5TmFtZXM6e319O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9BdXRvRm9jdXNVdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZm9jdXNOb2RlLmpzIikscz17Zm9jdXNET01Db21wb25lbnQ6ZnVuY3Rpb24oKXtvKHIuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSl9fTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQmVmb3JlSW5wdXRFdmVudFBsdWdpbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybihlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiYhKGUuY3RybEtleSYmZS5hbHRLZXkpfWZ1bmN0aW9uIG8oZSl7c3dpdGNoKGUpe2Nhc2UidG9wQ29tcG9zaXRpb25TdGFydCI6cmV0dXJuIE8uY29tcG9zaXRpb25TdGFydDtjYXNlInRvcENvbXBvc2l0aW9uRW5kIjpyZXR1cm4gTy5jb21wb3NpdGlvbkVuZDtjYXNlInRvcENvbXBvc2l0aW9uVXBkYXRlIjpyZXR1cm4gTy5jb21wb3NpdGlvblVwZGF0ZX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiJ0b3BLZXlEb3duIj09PWUmJnQua2V5Q29kZT09PWJ9ZnVuY3Rpb24gaShlLHQpe3N3aXRjaChlKXtjYXNlInRvcEtleVVwIjpyZXR1cm4tMSE9PWcuaW5kZXhPZih0LmtleUNvZGUpO2Nhc2UidG9wS2V5RG93biI6cmV0dXJuIHQua2V5Q29kZSE9PWI7Y2FzZSJ0b3BLZXlQcmVzcyI6Y2FzZSJ0b3BNb3VzZURvd24iOmNhc2UidG9wQmx1ciI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gYShlKXt2YXIgdD1lLmRldGFpbDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJkYXRhImluIHQ/dC5kYXRhOm51bGx9ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgbCx1O2lmKEU/bD1vKGUpOlI/aShlLG4pJiYobD1PLmNvbXBvc2l0aW9uRW5kKTpzKGUsbikmJihsPU8uY29tcG9zaXRpb25TdGFydCksIWwpcmV0dXJuIG51bGw7VCYmKFJ8fGwhPT1PLmNvbXBvc2l0aW9uU3RhcnQ/bD09PU8uY29tcG9zaXRpb25FbmQmJlImJih1PVIuZ2V0RGF0YSgpKTpSPWYuZ2V0UG9vbGVkKHIpKTt2YXIgYz1tLmdldFBvb2xlZChsLHQsbixyKTtpZih1KWMuZGF0YT11O2Vsc2V7dmFyIGQ9YShuKTtudWxsIT09ZCYmKGMuZGF0YT1kKX1yZXR1cm4gXy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGMpLGN9ZnVuY3Rpb24gdShlLHQpe3N3aXRjaChlKXtjYXNlInRvcENvbXBvc2l0aW9uRW5kIjpyZXR1cm4gYSh0KTtjYXNlInRvcEtleVByZXNzIjpyZXR1cm4gdC53aGljaCE9PUE/bnVsbDooUz0hMCxDKTtjYXNlInRvcFRleHRJbnB1dCI6dmFyIG49dC5kYXRhO3JldHVybiBuPT09QyYmUz9udWxsOm47ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYyhlLHQpe2lmKFIpe2lmKCJ0b3BDb21wb3NpdGlvbkVuZCI9PT1lfHwhRSYmaShlLHQpKXt2YXIgbj1SLmdldERhdGEoKTtyZXR1cm4gZi5yZWxlYXNlKFIpLFI9bnVsbCxufXJldHVybiBudWxsfXN3aXRjaChlKXtjYXNlInRvcFBhc3RlIjpyZXR1cm4gbnVsbDtjYXNlInRvcEtleVByZXNzIjpyZXR1cm4gdC53aGljaCYmIXIodCk/U3RyaW5nLmZyb21DaGFyQ29kZSh0LndoaWNoKTpudWxsO2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBUP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGQoZSx0LG4scil7dmFyIG87aWYoIShvPXY/dShlLG4pOmMoZSxuKSkpcmV0dXJuIG51bGw7dmFyIHM9aC5nZXRQb29sZWQoTy5iZWZvcmVJbnB1dCx0LG4scik7cmV0dXJuIHMuZGF0YT1vLF8uYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzKSxzfXZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIpLGc9WzksMTMsMjcsMzJdLGI9MjI5LEU9cC5jYW5Vc2VET00mJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyx5PW51bGw7cC5jYW5Vc2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJih5PWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIHY9cC5jYW5Vc2VET00mJiJUZXh0RXZlbnQiaW4gd2luZG93JiYheSYmIWZ1bmN0aW9uKCl7dmFyIGU9d2luZG93Lm9wZXJhO3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudmVyc2lvbiYmcGFyc2VJbnQoZS52ZXJzaW9uKCksMTApPD0xMn0oKSxUPXAuY2FuVXNlRE9NJiYoIUV8fHkmJnk+OCYmeTw9MTEpLEE9MzIsQz1TdHJpbmcuZnJvbUNoYXJDb2RlKEEpLE89e2JlZm9yZUlucHV0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25CZWZvcmVJbnB1dCIsY2FwdHVyZWQ6Im9uQmVmb3JlSW5wdXRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlQcmVzcyIsInRvcFRleHRJbnB1dCIsInRvcFBhc3RlIl19LGNvbXBvc2l0aW9uRW5kOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvbkVuZCIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25FbmRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBvc2l0aW9uRW5kIiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BNb3VzZURvd24iXX0sY29tcG9zaXRpb25TdGFydDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25TdGFydCIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25TdGFydENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25TdGFydCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9wTW91c2VEb3duIl19LGNvbXBvc2l0aW9uVXBkYXRlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblVwZGF0ZSIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBvc2l0aW9uVXBkYXRlIiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BNb3VzZURvd24iXX19LFM9ITEsUj1udWxsLGo9e2V2ZW50VHlwZXM6TyxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybltsKGUsdCxuLHIpLGQoZSx0LG4scildfX07ZS5leHBvcnRzPWp9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSt0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyaW5nKDEpfXZhciBvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxzPVsiV2Via2l0IiwibXMiLCJNb3oiLCJPIl07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtzLmZvckVhY2goZnVuY3Rpb24odCl7b1tyKHQsZSldPW9bZV19KX0pO3ZhciBpPXtiYWNrZ3JvdW5kOntiYWNrZ3JvdW5kQXR0YWNobWVudDohMCxiYWNrZ3JvdW5kQ29sb3I6ITAsYmFja2dyb3VuZEltYWdlOiEwLGJhY2tncm91bmRQb3NpdGlvblg6ITAsYmFja2dyb3VuZFBvc2l0aW9uWTohMCxiYWNrZ3JvdW5kUmVwZWF0OiEwfSxiYWNrZ3JvdW5kUG9zaXRpb246e2JhY2tncm91bmRQb3NpdGlvblg6ITAsYmFja2dyb3VuZFBvc2l0aW9uWTohMH0sYm9yZGVyOntib3JkZXJXaWR0aDohMCxib3JkZXJTdHlsZTohMCxib3JkZXJDb2xvcjohMH0sYm9yZGVyQm90dG9tOntib3JkZXJCb3R0b21XaWR0aDohMCxib3JkZXJCb3R0b21TdHlsZTohMCxib3JkZXJCb3R0b21Db2xvcjohMH0sYm9yZGVyTGVmdDp7Ym9yZGVyTGVmdFdpZHRoOiEwLGJvcmRlckxlZnRTdHlsZTohMCxib3JkZXJMZWZ0Q29sb3I6ITB9LGJvcmRlclJpZ2h0Ontib3JkZXJSaWdodFdpZHRoOiEwLGJvcmRlclJpZ2h0U3R5bGU6ITAsYm9yZGVyUmlnaHRDb2xvcjohMH0sYm9yZGVyVG9wOntib3JkZXJUb3BXaWR0aDohMCxib3JkZXJUb3BTdHlsZTohMCxib3JkZXJUb3BDb2xvcjohMH0sZm9udDp7Zm9udFN0eWxlOiEwLGZvbnRWYXJpYW50OiEwLGZvbnRXZWlnaHQ6ITAsZm9udFNpemU6ITAsbGluZUhlaWdodDohMCxmb250RmFtaWx5OiEwfSxvdXRsaW5lOntvdXRsaW5lV2lkdGg6ITAsb3V0bGluZVN0eWxlOiEwLG91dGxpbmVDb2xvcjohMH19LGE9e2lzVW5pdGxlc3NOdW1iZXI6byxzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6aX07ZS5leHBvcnRzPWF9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5T3BlcmF0aW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIpLHM9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0cnVtZW50YXRpb24uanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZGFuZ2Vyb3VzU3R5bGVWYWx1ZS5qcyIpKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2h5cGhlbmF0ZVN0eWxlTmFtZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvbWVtb2l6ZVN0cmluZ09ubHkuanMiKSxsPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksYShmdW5jdGlvbihlKXtyZXR1cm4gaShlKX0pKSx1PSExLGM9ImNzc0Zsb2F0IjtpZihvLmNhblVzZURPTSl7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7dHJ5e2QuZm9udD0iIn1jYXRjaChlKXt1PSEwfXZvaWQgMD09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jc3NGbG9hdCYmKGM9InN0eWxlRmxvYXQiKX12YXIgXz17Y3JlYXRlTWFya3VwRm9yU3R5bGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG89MD09PXIuaW5kZXhPZigiLS0iKSxpPWVbcl07bnVsbCE9aSYmKG4rPWwocikrIjoiLG4rPXMocixpLHQsbykrIjsiKX1yZXR1cm4gbnx8bnVsbH0sc2V0VmFsdWVGb3JTdHlsZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWUuc3R5bGU7Zm9yKHZhciBpIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIGE9MD09PWkuaW5kZXhPZigiLS0iKSxsPXMoaSx0W2ldLG4sYSk7aWYoImZsb2F0IiE9PWkmJiJjc3NGbG9hdCIhPT1pfHwoaT1jKSxhKW8uc2V0UHJvcGVydHkoaSxsKTtlbHNlIGlmKGwpb1tpXT1sO2Vsc2V7dmFyIGQ9dSYmci5zaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnNbaV07aWYoZClmb3IodmFyIF8gaW4gZClvW19dPSIiO2Vsc2Ugb1tpXT0iIn19fX07ZS5leHBvcnRzPV99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0NhbGxiYWNrUXVldWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiksaT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9jb250ZXh0cz1udWxsLHRoaXMuX2FyZz10fXJldHVybiBlLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8W10sdGhpcy5fY2FsbGJhY2tzLnB1c2goZSksdGhpcy5fY29udGV4dHM9dGhpcy5fY29udGV4dHN8fFtdLHRoaXMuX2NvbnRleHRzLnB1c2godCl9LGUucHJvdG90eXBlLm5vdGlmeUFsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhbGxiYWNrcyx0PXRoaXMuX2NvbnRleHRzLG49dGhpcy5fYXJnO2lmKGUmJnQpe2UubGVuZ3RoIT09dC5sZW5ndGgmJm8oIjI0IiksdGhpcy5fY2FsbGJhY2tzPW51bGwsdGhpcy5fY29udGV4dHM9bnVsbDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmNhbGwodFtyXSxuKTtlLmxlbmd0aD0wLHQubGVuZ3RoPTB9fSxlLnByb3RvdHlwZS5jaGVja3BvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz90aGlzLl9jYWxsYmFja3MubGVuZ3RoOjB9LGUucHJvdG90eXBlLnJvbGxiYWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY29udGV4dHMmJih0aGlzLl9jYWxsYmFja3MubGVuZ3RoPWUsdGhpcy5fY29udGV4dHMubGVuZ3RoPWUpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2NvbnRleHRzPW51bGx9LGUucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LGV9KCkpO2UuZXhwb3J0cz1zLmFkZFBvb2xpbmdUbyhpKX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQ2hhbmdlRXZlbnRQbHVnaW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9Uy5nZXRQb29sZWQoRC5jaGFuZ2UsZSx0LG4pO3JldHVybiByLnR5cGU9ImNoYW5nZSIsVC5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHIpLHJ9ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuInNlbGVjdCI9PT10fHwiaW5wdXQiPT09dCYmImZpbGUiPT09ZS50eXBlfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9cihNLGUsaihlKSk7Ty5iYXRjaGVkVXBkYXRlcyhpLHQpfWZ1bmN0aW9uIGkoZSl7di5lbnF1ZXVlRXZlbnRzKGUpLHYucHJvY2Vzc0V2ZW50UXVldWUoITEpfWZ1bmN0aW9uIGEoZSx0KXt3PWUsTT10LHcuYXR0YWNoRXZlbnQoIm9uY2hhbmdlIixzKX1mdW5jdGlvbiBsKCl7dyYmKHcuZGV0YWNoRXZlbnQoIm9uY2hhbmdlIixzKSx3PW51bGwsTT1udWxsKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49Ui51cGRhdGVWYWx1ZUlmQ2hhbmdlZChlKSxyPSEwPT09dC5zaW11bGF0ZWQmJlAuX2FsbG93U2ltdWxhdGVkUGFzc1Rocm91Z2g7aWYobnx8cilyZXR1cm4gZX1mdW5jdGlvbiBjKGUsdCl7aWYoInRvcENoYW5nZSI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIGQoZSx0LG4peyJ0b3BGb2N1cyI9PT1lPyhsKCksYSh0LG4pKToidG9wQmx1ciI9PT1lJiZsKCl9ZnVuY3Rpb24gXyhlLHQpe3c9ZSxNPXQsdy5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsZil9ZnVuY3Rpb24gcCgpe3cmJih3LmRldGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixmKSx3PW51bGwsTT1udWxsKX1mdW5jdGlvbiBmKGUpeyJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSYmdShNLGUpJiZzKGUpfWZ1bmN0aW9uIG0oZSx0LG4peyJ0b3BGb2N1cyI9PT1lPyhwKCksXyh0LG4pKToidG9wQmx1ciI9PT1lJiZwKCl9ZnVuY3Rpb24gaChlLHQsbil7aWYoInRvcFNlbGVjdGlvbkNoYW5nZSI9PT1lfHwidG9wS2V5VXAiPT09ZXx8InRvcEtleURvd24iPT09ZSlyZXR1cm4gdShNLG4pfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9ZS5ub2RlTmFtZTtyZXR1cm4gdCYmImlucHV0Ij09PXQudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRpbyI9PT1lLnR5cGUpfWZ1bmN0aW9uIGIoZSx0LG4pe2lmKCJ0b3BDbGljayI9PT1lKXJldHVybiB1KHQsbil9ZnVuY3Rpb24gRShlLHQsbil7aWYoInRvcElucHV0Ij09PWV8fCJ0b3BDaGFuZ2UiPT09ZSlyZXR1cm4gdSh0LG4pfWZ1bmN0aW9uIHkoZSx0KXtpZihudWxsIT1lKXt2YXIgbj1lLl93cmFwcGVyU3RhdGV8fHQuX3dyYXBwZXJTdGF0ZTtpZihuJiZuLmNvbnRyb2xsZWQmJiJudW1iZXIiPT09dC50eXBlKXt2YXIgcj0iIit0LnZhbHVlO3QuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIT09ciYmdC5zZXRBdHRyaWJ1dGUoInZhbHVlIixyKX19fXZhciB2PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5IdWIuanMiKSxUPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIpLEE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIiksTz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIpLFM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIpLFI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnB1dFZhbHVlVHJhY2tpbmcuanMiKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRUYXJnZXQuanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvaXNFdmVudFN1cHBvcnRlZC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc1RleHRJbnB1dEVsZW1lbnQuanMiKSxEPXtjaGFuZ2U6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNoYW5nZSIsY2FwdHVyZWQ6Im9uQ2hhbmdlQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDaGFuZ2UiLCJ0b3BDbGljayIsInRvcEZvY3VzIiwidG9wSW5wdXQiLCJ0b3BLZXlEb3duIiwidG9wS2V5VXAiLCJ0b3BTZWxlY3Rpb25DaGFuZ2UiXX19LHc9bnVsbCxNPW51bGwsaz0hMTtBLmNhblVzZURPTSYmKGs9eCgiY2hhbmdlIikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+OCkpO3ZhciBJPSExO0EuY2FuVXNlRE9NJiYoST14KCJpbnB1dCIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjkpKTt2YXIgUD17ZXZlbnRUeXBlczpELF9hbGxvd1NpbXVsYXRlZFBhc3NUaHJvdWdoOiEwLF9pc0lucHV0RXZlbnRTdXBwb3J0ZWQ6SSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpLGEsbD10P0MuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0KTp3aW5kb3c7aWYobyhsKT9rP2k9YzphPWQ6TChsKT9JP2k9RTooaT1oLGE9bSk6ZyhsKSYmKGk9YiksaSl7dmFyIHU9aShlLHQsbik7aWYodSl7cmV0dXJuIHIodSxuLHMpfX1hJiZhKGUsbCx0KSwidG9wQmx1ciI9PT1lJiZ5KHQsbCl9fTtlLmV4cG9ydHM9UH0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKHQ9dFsxXSksdD90Lm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZH1mdW5jdGlvbiBvKGUsdCxuKXtjLmluc2VydFRyZWVCZWZvcmUoZSx0LG4pfWZ1bmN0aW9uIHMoZSx0LG4pe0FycmF5LmlzQXJyYXkodCk/YShlLHRbMF0sdFsxXSxuKTptKGUsdCxuKX1mdW5jdGlvbiBpKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFsxXTt0PXRbMF0sbChlLHQsbiksZS5yZW1vdmVDaGlsZChuKX1lLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIGEoZSx0LG4scil7Zm9yKHZhciBvPXQ7Oyl7dmFyIHM9by5uZXh0U2libGluZztpZihtKGUsbyxyKSxvPT09bilicmVhaztvPXN9fWZ1bmN0aW9uIGwoZSx0LG4pe2Zvcig7Oyl7dmFyIHI9dC5uZXh0U2libGluZztpZihyPT09bilicmVhaztlLnJlbW92ZUNoaWxkKHIpfX1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj1lLnBhcmVudE5vZGUsbz1lLm5leHRTaWJsaW5nO289PT10P24mJm0ocixkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSxvKTpuPyhmKG8sbiksbChyLG8sdCkpOmwocixlLHQpfXZhciBjPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRGFuZ2VyLmpzIiksXz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uLmpzIikpLHA9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiKSxmPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvc2V0VGV4dENvbnRlbnQuanMiKSxtPV8oZnVuY3Rpb24oZSx0LG4pe2UuaW5zZXJ0QmVmb3JlKHQsbil9KSxoPWQuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsZz17ZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6aCxyZXBsYWNlRGVsaW1pdGVkVGV4dDp1LHByb2Nlc3NVcGRhdGVzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPXRbbl07c3dpdGNoKGEudHlwZSl7Y2FzZSJJTlNFUlRfTUFSS1VQIjpvKGUsYS5jb250ZW50LHIoZSxhLmFmdGVyTm9kZSkpO2JyZWFrO2Nhc2UiTU9WRV9FWElTVElORyI6cyhlLGEuZnJvbU5vZGUscihlLGEuYWZ0ZXJOb2RlKSk7YnJlYWs7Y2FzZSJTRVRfTUFSS1VQIjpwKGUsYS5jb250ZW50KTticmVhaztjYXNlIlRFWFRfQ09OVEVOVCI6ZihlLGEuY29udGVudCk7YnJlYWs7Y2FzZSJSRU1PVkVfTk9ERSI6aShlLGEuZnJvbU5vZGUpfX19fTtlLmV4cG9ydHM9Z30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihmKXt2YXIgdD1lLm5vZGUsbj1lLmNoaWxkcmVuO2lmKG4ubGVuZ3RoKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW0odCxuW3JdLG51bGwpO2Vsc2UgbnVsbCE9ZS5odG1sP2QodCxlLmh0bWwpOm51bGwhPWUudGV4dCYmcCh0LGUudGV4dCl9fWZ1bmN0aW9uIG8oZSx0KXtlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHQubm9kZSxlKSxyKHQpfWZ1bmN0aW9uIHMoZSx0KXtmP2UuY2hpbGRyZW4ucHVzaCh0KTplLm5vZGUuYXBwZW5kQ2hpbGQodC5ub2RlKX1mdW5jdGlvbiBpKGUsdCl7Zj9lLmh0bWw9dDpkKGUubm9kZSx0KX1mdW5jdGlvbiBhKGUsdCl7Zj9lLnRleHQ9dDpwKGUubm9kZSx0KX1mdW5jdGlvbiBsKCl7cmV0dXJuIHRoaXMubm9kZS5ub2RlTmFtZX1mdW5jdGlvbiB1KGUpe3JldHVybntub2RlOmUsY2hpbGRyZW46W10saHRtbDpudWxsLHRleHQ6bnVsbCx0b1N0cmluZzpsfX12YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTU5hbWVzcGFjZXMuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvc2V0SW5uZXJIVE1MLmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2NyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24uanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvc2V0VGV4dENvbnRlbnQuanMiKSxmPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJiJudW1iZXIiPT10eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmInN0cmluZyI9PXR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50JiYvXGJFZGdlXC9cZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxtPV8oZnVuY3Rpb24oZSx0LG4pezExPT09dC5ub2RlLm5vZGVUeXBlfHwxPT09dC5ub2RlLm5vZGVUeXBlJiYib2JqZWN0Ij09PXQubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYobnVsbD09dC5ub2RlLm5hbWVzcGFjZVVSSXx8dC5ub2RlLm5hbWVzcGFjZVVSST09PWMuaHRtbCk/KHIodCksZS5pbnNlcnRCZWZvcmUodC5ub2RlLG4pKTooZS5pbnNlcnRCZWZvcmUodC5ub2RlLG4pLHIodCkpfSk7dS5pbnNlcnRUcmVlQmVmb3JlPW0sdS5yZXBsYWNlQ2hpbGRXaXRoVHJlZT1vLHUucXVldWVDaGlsZD1zLHUucXVldWVIVE1MPWksdS5xdWV1ZVRleHQ9YSxlLmV4cG9ydHM9dX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NTmFtZXNwYWNlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbWF0aG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oZSZ0KT09PXR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxzPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSx7TVVTVF9VU0VfUFJPUEVSVFk6MSxIQVNfQk9PTEVBTl9WQUxVRTo0LEhBU19OVU1FUklDX1ZBTFVFOjgsSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU6MjQsSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTozMixpbmplY3RET01Qcm9wZXJ0eUNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD1zLG49ZS5Qcm9wZXJ0aWVzfHx7fSxpPWUuRE9NQXR0cmlidXRlTmFtZXNwYWNlc3x8e30sbD1lLkRPTUF0dHJpYnV0ZU5hbWVzfHx7fSx1PWUuRE9NUHJvcGVydHlOYW1lc3x8e30sYz1lLkRPTU11dGF0aW9uTWV0aG9kc3x8e307ZS5pc0N1c3RvbUF0dHJpYnV0ZSYmYS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMucHVzaChlLmlzQ3VzdG9tQXR0cmlidXRlKTtmb3IodmFyIGQgaW4gbil7YS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGQpJiZvKCI0OCIsZCk7dmFyIF89ZC50b0xvd2VyQ2FzZSgpLHA9bltkXSxmPXthdHRyaWJ1dGVOYW1lOl8sYXR0cmlidXRlTmFtZXNwYWNlOm51bGwscHJvcGVydHlOYW1lOmQsbXV0YXRpb25NZXRob2Q6bnVsbCxtdXN0VXNlUHJvcGVydHk6cihwLHQuTVVTVF9VU0VfUFJPUEVSVFkpLGhhc0Jvb2xlYW5WYWx1ZTpyKHAsdC5IQVNfQk9PTEVBTl9WQUxVRSksaGFzTnVtZXJpY1ZhbHVlOnIocCx0LkhBU19OVU1FUklDX1ZBTFVFKSxoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZTpyKHAsdC5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSksaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZTpyKHAsdC5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKX07aWYoZi5oYXNCb29sZWFuVmFsdWUrZi5oYXNOdW1lcmljVmFsdWUrZi5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlPD0xfHxvKCI1MCIsZCksbC5oYXNPd25Qcm9wZXJ0eShkKSl7dmFyIG09bFtkXTtmLmF0dHJpYnV0ZU5hbWU9bX1pLmhhc093blByb3BlcnR5KGQpJiYoZi5hdHRyaWJ1dGVOYW1lc3BhY2U9aVtkXSksdS5oYXNPd25Qcm9wZXJ0eShkKSYmKGYucHJvcGVydHlOYW1lPXVbZF0pLGMuaGFzT3duUHJvcGVydHkoZCkmJihmLm11dGF0aW9uTWV0aG9kPWNbZF0pLGEucHJvcGVydGllc1tkXT1mfX19KSxpPSI6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRCIsYT17SURfQVRUUklCVVRFX05BTUU6ImRhdGEtcmVhY3RpZCIsUk9PVF9BVFRSSUJVVEVfTkFNRToiZGF0YS1yZWFjdHJvb3QiLEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVI6aSxBVFRSSUJVVEVfTkFNRV9DSEFSOmkrIlxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwIixwcm9wZXJ0aWVzOnt9LGdldFBvc3NpYmxlU3RhbmRhcmROYW1lOm51bGwsX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zOltdLGlzQ3VzdG9tQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8YS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMubGVuZ3RoO3QrKyl7aWYoKDAsYS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnNbdF0pKGUpKXJldHVybiEwfXJldHVybiExfSxpbmplY3Rpb246c307ZS5leHBvcnRzPWF9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5T3BlcmF0aW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEhdS5oYXNPd25Qcm9wZXJ0eShlKXx8IWwuaGFzT3duUHJvcGVydHkoZSkmJihhLnRlc3QoZSk/KHVbZV09ITAsITApOihsW2VdPSEwLCExKSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBudWxsPT10fHxlLmhhc0Jvb2xlYW5WYWx1ZSYmIXR8fGUuaGFzTnVtZXJpY1ZhbHVlJiZpc05hTih0KXx8ZS5oYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSYmdDwxfHxlLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWUmJiExPT09dH12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5LmpzIiksaT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9xdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlci5qcyIpKSxhPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksbmV3IFJlZ0V4cCgiXlsiK3MuQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUisiXVsiK3MuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLGw9e30sdT17fSxjPXtjcmVhdGVNYXJrdXBGb3JJRDpmdW5jdGlvbihlKXtyZXR1cm4gcy5JRF9BVFRSSUJVVEVfTkFNRSsiPSIraShlKX0sc2V0QXR0cmlidXRlRm9ySUQ6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZShzLklEX0FUVFJJQlVURV9OQU1FLHQpfSxjcmVhdGVNYXJrdXBGb3JSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUk9PVF9BVFRSSUJVVEVfTkFNRSsnPSIiJ30sc2V0QXR0cmlidXRlRm9yUm9vdDpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZShzLlJPT1RfQVRUUklCVVRFX05BTUUsIiIpfSxjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBuPXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKT9zLnByb3BlcnRpZXNbZV06bnVsbDtpZihuKXtpZihvKG4sdCkpcmV0dXJuIiI7dmFyIHI9bi5hdHRyaWJ1dGVOYW1lO3JldHVybiBuLmhhc0Jvb2xlYW5WYWx1ZXx8bi5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PXQ/cisnPSIiJzpyKyI9IitpKHQpfXJldHVybiBzLmlzQ3VzdG9tQXR0cmlidXRlKGUpP251bGw9PXQ/IiI6ZSsiPSIraSh0KTpudWxsfSxjcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKSYmbnVsbCE9dD9lKyI9IitpKHQpOiIifSxzZXRWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1zLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/cy5wcm9wZXJ0aWVzW3RdOm51bGw7aWYocil7dmFyIGk9ci5tdXRhdGlvbk1ldGhvZDtpZihpKWkoZSxuKTtlbHNle2lmKG8ocixuKSlyZXR1cm4gdm9pZCB0aGlzLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoZSx0KTtpZihyLm11c3RVc2VQcm9wZXJ0eSllW3IucHJvcGVydHlOYW1lXT1uO2Vsc2V7dmFyIGE9ci5hdHRyaWJ1dGVOYW1lLGw9ci5hdHRyaWJ1dGVOYW1lc3BhY2U7bD9lLnNldEF0dHJpYnV0ZU5TKGwsYSwiIituKTpyLmhhc0Jvb2xlYW5WYWx1ZXx8ci5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PW4/ZS5zZXRBdHRyaWJ1dGUoYSwiIik6ZS5zZXRBdHRyaWJ1dGUoYSwiIituKX19fWVsc2UgaWYocy5pc0N1c3RvbUF0dHJpYnV0ZSh0KSlyZXR1cm4gdm9pZCBjLnNldFZhbHVlRm9yQXR0cmlidXRlKGUsdCxuKX0sc2V0VmFsdWVGb3JBdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0LG4pe2lmKHIodCkpe251bGw9PW4/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6ZS5zZXRBdHRyaWJ1dGUodCwiIituKX19LGRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCl7ZS5yZW1vdmVBdHRyaWJ1dGUodCl9LGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/cy5wcm9wZXJ0aWVzW3RdOm51bGw7aWYobil7dmFyIHI9bi5tdXRhdGlvbk1ldGhvZDtpZihyKXIoZSx2b2lkIDApO2Vsc2UgaWYobi5tdXN0VXNlUHJvcGVydHkpe3ZhciBvPW4ucHJvcGVydHlOYW1lO24uaGFzQm9vbGVhblZhbHVlP2Vbb109ITE6ZVtvXT0iIn1lbHNlIGUucmVtb3ZlQXR0cmlidXRlKG4uYXR0cmlidXRlTmFtZSl9ZWxzZSBzLmlzQ3VzdG9tQXR0cmlidXRlKHQpJiZlLnJlbW92ZUF0dHJpYnV0ZSh0KX19O2UuZXhwb3J0cz1jfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9EYW5nZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXAuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiKSxsPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSx7ZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6ZnVuY3Rpb24oZSx0KXtpZihzLmNhblVzZURPTXx8cigiNTYiKSx0fHxyKCI1NyIpLCJIVE1MIj09PWUubm9kZU5hbWUmJnIoIjU4IiksInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgbj1pKHQsYSlbMF07ZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuLGUpfWVsc2Ugby5yZXBsYWNlQ2hpbGRXaXRoVHJlZShlLHQpfX0pO2UuZXhwb3J0cz1sfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1bIlJlc3BvbmRlckV2ZW50UGx1Z2luIiwiU2ltcGxlRXZlbnRQbHVnaW4iLCJUYXBFdmVudFBsdWdpbiIsIkVudGVyTGVhdmVFdmVudFBsdWdpbiIsIkNoYW5nZUV2ZW50UGx1Z2luIiwiU2VsZWN0RXZlbnRQbHVnaW4iLCJCZWZvcmVJbnB1dEV2ZW50UGx1Z2luIl07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0VudGVyTGVhdmVFdmVudFBsdWdpbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0V2ZW50UHJvcGFnYXRvcnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY01vdXNlRXZlbnQuanMiKSxpPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlRW50ZXIiLGRlcGVuZGVuY2llczpbInRvcE1vdXNlT3V0IiwidG9wTW91c2VPdmVyIl19LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VMZWF2ZSIsZGVwZW5kZW5jaWVzOlsidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX19LGE9e2V2ZW50VHlwZXM6aSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLGEpe2lmKCJ0b3BNb3VzZU92ZXIiPT09ZSYmKG4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkpcmV0dXJuIG51bGw7aWYoInRvcE1vdXNlT3V0IiE9PWUmJiJ0b3BNb3VzZU92ZXIiIT09ZSlyZXR1cm4gbnVsbDt2YXIgbDtpZihhLndpbmRvdz09PWEpbD1hO2Vsc2V7dmFyIHU9YS5vd25lckRvY3VtZW50O2w9dT91LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvdzp3aW5kb3d9dmFyIGMsZDtpZigidG9wTW91c2VPdXQiPT09ZSl7Yz10O3ZhciBfPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQ7ZD1fP28uZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoXyk6bnVsbH1lbHNlIGM9bnVsbCxkPXQ7aWYoYz09PWQpcmV0dXJuIG51bGw7dmFyIHA9bnVsbD09Yz9sOm8uZ2V0Tm9kZUZyb21JbnN0YW5jZShjKSxmPW51bGw9PWQ/bDpvLmdldE5vZGVGcm9tSW5zdGFuY2UoZCksbT1zLmdldFBvb2xlZChpLm1vdXNlTGVhdmUsYyxuLGEpO20udHlwZT0ibW91c2VsZWF2ZSIsbS50YXJnZXQ9cCxtLnJlbGF0ZWRUYXJnZXQ9Zjt2YXIgaD1zLmdldFBvb2xlZChpLm1vdXNlRW50ZXIsZCxuLGEpO3JldHVybiBoLnR5cGU9Im1vdXNlZW50ZXIiLGgudGFyZ2V0PWYsaC5yZWxhdGVkVGFyZ2V0PXAsci5hY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobSxoLGMsZCksW20saF19fTtlLmV4cG9ydHM9YX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5IdWIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfWZ1bmN0aW9uIG8oZSx0LG4pe3N3aXRjaChlKXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjpyZXR1cm4hKCFuLmRpc2FibGVkfHwhcih0KSk7ZGVmYXVsdDpyZXR1cm4hMX19dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXJyb3JVdGlscy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9hY2N1bXVsYXRlSW50by5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9mb3JFYWNoQWNjdW11bGF0ZWQuanMiKSxkPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSx7fSksXz1udWxsLHA9ZnVuY3Rpb24oZSx0KXtlJiYoYS5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZSx0KSxlLmlzUGVyc2lzdGVudCgpfHxlLmNvbnN0cnVjdG9yLnJlbGVhc2UoZSkpfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBwKGUsITApfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBwKGUsITEpfSxoPWZ1bmN0aW9uKGUpe3JldHVybiIuIitlLl9yb290Tm9kZUlEfSxnPXtpbmplY3Rpb246e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6aS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTppLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX0scHV0TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiZzKCI5NCIsdCx0eXBlb2Ygbik7dmFyIHI9aChlKTsoZFt0XXx8KGRbdF09e30pKVtyXT1uO3ZhciBvPWkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbdF07byYmby5kaWRQdXRMaXN0ZW5lciYmby5kaWRQdXRMaXN0ZW5lcihlLHQsbil9LGdldExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZFt0XTtpZihvKHQsZS5fY3VycmVudEVsZW1lbnQudHlwZSxlLl9jdXJyZW50RWxlbWVudC5wcm9wcykpcmV0dXJuIG51bGw7dmFyIHI9aChlKTtyZXR1cm4gbiYmbltyXX0sZGVsZXRlTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3RdO24mJm4ud2lsbERlbGV0ZUxpc3RlbmVyJiZuLndpbGxEZWxldGVMaXN0ZW5lcihlLHQpO3ZhciByPWRbdF07aWYocil7ZGVsZXRlIHJbaChlKV19fSxkZWxldGVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9aChlKTtmb3IodmFyIG4gaW4gZClpZihkLmhhc093blByb3BlcnR5KG4pJiZkW25dW3RdKXt2YXIgcj1pLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW25dO3ImJnIud2lsbERlbGV0ZUxpc3RlbmVyJiZyLndpbGxEZWxldGVMaXN0ZW5lcihlLG4pLGRlbGV0ZSBkW25dW3RdfX0sZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG8scz1pLnBsdWdpbnMsYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgbD1zW2FdO2lmKGwpe3ZhciBjPWwuZXh0cmFjdEV2ZW50cyhlLHQsbixyKTtjJiYobz11KG8sYykpfX1yZXR1cm4gb30sZW5xdWV1ZUV2ZW50czpmdW5jdGlvbihlKXtlJiYoXz11KF8sZSkpfSxwcm9jZXNzRXZlbnRRdWV1ZTpmdW5jdGlvbihlKXt2YXIgdD1fO189bnVsbCxlP2ModCxmKTpjKHQsbSksXyYmcygiOTUiKSxsLnJldGhyb3dDYXVnaHRFcnJvcigpfSxfX3B1cmdlOmZ1bmN0aW9uKCl7ZD17fX0sX19nZXRMaXN0ZW5lckJhbms6ZnVuY3Rpb24oKXtyZXR1cm4gZH19O2UuZXhwb3J0cz1nfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblJlZ2lzdHJ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZihhKWZvcih2YXIgZSBpbiBsKXt2YXIgdD1sW2VdLG49YS5pbmRleE9mKGUpO2lmKG4+LTF8fGkoIjk2IixlKSwhdS5wbHVnaW5zW25dKXt0LmV4dHJhY3RFdmVudHN8fGkoIjk3IixlKSx1LnBsdWdpbnNbbl09dDt2YXIgcj10LmV2ZW50VHlwZXM7Zm9yKHZhciBzIGluIHIpbyhyW3NdLHQscyl8fGkoIjk4IixzLGUpfX19ZnVuY3Rpb24gbyhlLHQsbil7dS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkobikmJmkoIjk5IixuKSx1LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tuXT1lO3ZhciByPWUucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7aWYocil7Zm9yKHZhciBvIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9cltvXTtzKGEsdCxuKX1yZXR1cm4hMH1yZXR1cm4hIWUucmVnaXN0cmF0aW9uTmFtZSYmKHMoZS5yZWdpc3RyYXRpb25OYW1lLHQsbiksITApfWZ1bmN0aW9uIHMoZSx0LG4pe3UucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbZV0mJmkoIjEwMCIsZSksdS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tlXT10LHUucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tlXT10LmV2ZW50VHlwZXNbbl0uZGVwZW5kZW5jaWVzfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbnVsbCksbD17fSx1PXtwbHVnaW5zOltdLGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnczp7fSxyZWdpc3RyYXRpb25OYW1lTW9kdWxlczp7fSxyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOnt9LHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6bnVsbCxpbmplY3RFdmVudFBsdWdpbk9yZGVyOmZ1bmN0aW9uKGUpe2EmJmkoIjEwMSIpLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkscigpfSxpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTtsLmhhc093blByb3BlcnR5KG4pJiZsW25dPT09b3x8KGxbbl0mJmkoIjEwMiIsbiksbFtuXT1vLHQ9ITApfXQmJnIoKX0sZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXNwYXRjaENvbmZpZztpZih0LnJlZ2lzdHJhdGlvbk5hbWUpcmV0dXJuIHUucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbdC5yZWdpc3RyYXRpb25OYW1lXXx8bnVsbDtpZih2b2lkIDAhPT10LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKXt2YXIgbj10LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO2Zvcih2YXIgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikpe3ZhciBvPXUucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbbltyXV07aWYobylyZXR1cm4gb319cmV0dXJuIG51bGx9LF9yZXNldEV2ZW50UGx1Z2luczpmdW5jdGlvbigpe2E9bnVsbDtmb3IodmFyIGUgaW4gbClsLmhhc093blByb3BlcnR5KGUpJiZkZWxldGUgbFtlXTt1LnBsdWdpbnMubGVuZ3RoPTA7dmFyIHQ9dS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZGVsZXRlIHRbbl07dmFyIHI9dS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztmb3IodmFyIG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZkZWxldGUgcltvXX19O2UuZXhwb3J0cz11fSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuInRvcE1vdXNlVXAiPT09ZXx8InRvcFRvdWNoRW5kIj09PWV8fCJ0b3BUb3VjaENhbmNlbCI9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRvcE1vdXNlTW92ZSI9PT1lfHwidG9wVG91Y2hNb3ZlIj09PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4idG9wTW91c2VEb3duIj09PWV8fCJ0b3BUb3VjaFN0YXJ0Ij09PWV9ZnVuY3Rpb24gaShlLHQsbixyKXt2YXIgbz1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9Zy5nZXROb2RlRnJvbUluc3RhbmNlKHIpLHQ/bS5pbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2gobyxuLGUpOm0uaW52b2tlR3VhcmRlZENhbGxiYWNrKG8sbixlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBhKGUsdCl7dmFyIG49ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMscj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgbz0wO288bi5sZW5ndGgmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7bysrKWkoZSx0LG5bb10scltvXSk7ZWxzZSBuJiZpKGUsdCxuLHIpO2UuX2Rpc3BhdGNoTGlzdGVuZXJzPW51bGwsZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbH1mdW5jdGlvbiBsKGUpe3ZhciB0PWUuX2Rpc3BhdGNoTGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspaWYodFtyXShlLG5bcl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9bChlKTtyZXR1cm4gZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLHR9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLl9kaXNwYXRjaExpc3RlbmVycyxuPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO0FycmF5LmlzQXJyYXkodCkmJmYoIjEwMyIpLGUuY3VycmVudFRhcmdldD10P2cuZ2V0Tm9kZUZyb21JbnN0YW5jZShuKTpudWxsO3ZhciByPXQ/dChlKTpudWxsO3JldHVybiBlLmN1cnJlbnRUYXJnZXQ9bnVsbCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwscn1mdW5jdGlvbiBkKGUpe3JldHVybiEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIF8scCxmPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXJyb3JVdGlscy5qcyIpLGg9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSx7aW5qZWN0Q29tcG9uZW50VHJlZTpmdW5jdGlvbihlKXtfPWV9LGluamVjdFRyZWVUcmF2ZXJzYWw6ZnVuY3Rpb24oZSl7cD1lfX0pLGc9e2lzRW5kaXNoOnIsaXNNb3ZlaXNoOm8saXNTdGFydGlzaDpzLGV4ZWN1dGVEaXJlY3REaXNwYXRjaDpjLGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcjphLGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6dSxoYXNEaXNwYXRjaGVzOmQsZ2V0SW5zdGFuY2VGcm9tTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gXy5nZXRJbnN0YW5jZUZyb21Ob2RlKGUpfSxnZXROb2RlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiBfLmdldE5vZGVGcm9tSW5zdGFuY2UoZSl9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5pc0FuY2VzdG9yKGUsdCl9LGdldExvd2VzdENvbW1vbkFuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZSx0KX0sZ2V0UGFyZW50SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHAuZ2V0UGFyZW50SW5zdGFuY2UoZSl9LHRyYXZlcnNlVHdvUGhhc2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwLnRyYXZlcnNlVHdvUGhhc2UoZSx0LG4pfSx0cmF2ZXJzZUVudGVyTGVhdmU6ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gcC50cmF2ZXJzZUVudGVyTGVhdmUoZSx0LG4scixvKX0saW5qZWN0aW9uOmh9O2UuZXhwb3J0cz1nfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFByb3BhZ2F0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbbl07cmV0dXJuIGcoZSxyKX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgbz1yKGUsbix0KTtvJiYobi5fZGlzcGF0Y2hMaXN0ZW5lcnM9bShuLl9kaXNwYXRjaExpc3RlbmVycyxvKSxuLl9kaXNwYXRjaEluc3RhbmNlcz1tKG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX1mdW5jdGlvbiBzKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMmJmYudHJhdmVyc2VUd29QaGFzZShlLl90YXJnZXRJbnN0LG8sZSl9ZnVuY3Rpb24gaShlKXtpZihlJiZlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKXt2YXIgdD1lLl90YXJnZXRJbnN0LG49dD9mLmdldFBhcmVudEluc3RhbmNlKHQpOm51bGw7Zi50cmF2ZXJzZVR3b1BoYXNlKG4sbyxlKX19ZnVuY3Rpb24gYShlLHQsbil7aWYobiYmbi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKXt2YXIgcj1uLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsbz1nKGUscik7byYmKG4uX2Rpc3BhdGNoTGlzdGVuZXJzPW0obi5fZGlzcGF0Y2hMaXN0ZW5lcnMsbyksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9bShuLl9kaXNwYXRjaEluc3RhbmNlcyxlKSl9fWZ1bmN0aW9uIGwoZSl7ZSYmZS5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiZhKGUuX3RhcmdldEluc3QsbnVsbCxlKX1mdW5jdGlvbiB1KGUpe2goZSxzKX1mdW5jdGlvbiBjKGUpe2goZSxpKX1mdW5jdGlvbiBkKGUsdCxuLHIpe2YudHJhdmVyc2VFbnRlckxlYXZlKG4scixhLGUsdCl9ZnVuY3Rpb24gXyhlKXtoKGUsbCl9dmFyIHA9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2FjY3VtdWxhdGVJbnRvLmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIpLGc9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSxwLmdldExpc3RlbmVyKSxiPXthY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzOnUsYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQ6YyxhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczpfLGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlczpkfTtlLmV4cG9ydHM9Yn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5fcm9vdD1lLHRoaXMuX3N0YXJ0VGV4dD10aGlzLmdldFRleHQoKSx0aGlzLl9mYWxsYmFja1RleHQ9bnVsbH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldFRleHRDb250ZW50QWNjZXNzb3IuanMiKTtvKHIucHJvdG90eXBlLHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5fcm9vdD1udWxsLHRoaXMuX3N0YXJ0VGV4dD1udWxsLHRoaXMuX2ZhbGxiYWNrVGV4dD1udWxsfSxnZXRUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuInZhbHVlImluIHRoaXMuX3Jvb3Q/dGhpcy5fcm9vdC52YWx1ZTp0aGlzLl9yb290W2koKV19LGdldERhdGE6ZnVuY3Rpb24oKXtpZih0aGlzLl9mYWxsYmFja1RleHQpcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dDt2YXIgZSx0LG49dGhpcy5fc3RhcnRUZXh0LHI9bi5sZW5ndGgsbz10aGlzLmdldFRleHQoKSxzPW8ubGVuZ3RoO2ZvcihlPTA7ZTxyJiZuW2VdPT09b1tlXTtlKyspO3ZhciBpPXItZTtmb3IodD0xO3Q8PWkmJm5bci10XT09PW9bcy10XTt0KyspO3ZhciBhPXQ+MT8xLXQ6dm9pZCAwO3JldHVybiB0aGlzLl9mYWxsYmFja1RleHQ9by5zbGljZShlLGEpLHRoaXMuX2ZhbGxiYWNrVGV4dH19KSxzLmFkZFBvb2xpbmdUbyhyKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHkuanMiKSxvPXIuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZLHM9ci5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUsaT1yLmluamVjdGlvbi5IQVNfTlVNRVJJQ19WQUxVRSxhPXIuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLGw9ci5pbmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSx1PXtpc0N1c3RvbUF0dHJpYnV0ZTpSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZChuZXcgUmVnRXhwKCJeKGRhdGF8YXJpYSktWyIrci5BVFRSSUJVVEVfTkFNRV9DSEFSKyJdKiQiKSksUHJvcGVydGllczp7YWNjZXB0OjAsYWNjZXB0Q2hhcnNldDowLGFjY2Vzc0tleTowLGFjdGlvbjowLGFsbG93RnVsbFNjcmVlbjpzLGFsbG93VHJhbnNwYXJlbmN5OjAsYWx0OjAsYXM6MCxhc3luYzpzLGF1dG9Db21wbGV0ZTowLGF1dG9QbGF5OnMsY2FwdHVyZTpzLGNlbGxQYWRkaW5nOjAsY2VsbFNwYWNpbmc6MCxjaGFyU2V0OjAsY2hhbGxlbmdlOjAsY2hlY2tlZDpvfHMsY2l0ZTowLGNsYXNzSUQ6MCxjbGFzc05hbWU6MCxjb2xzOmEsY29sU3BhbjowLGNvbnRlbnQ6MCxjb250ZW50RWRpdGFibGU6MCxjb250ZXh0TWVudTowLGNvbnRyb2xzOnMsY29udHJvbHNMaXN0OjAsY29vcmRzOjAsY3Jvc3NPcmlnaW46MCxkYXRhOjAsZGF0ZVRpbWU6MCxkZWZhdWx0OnMsZGVmZXI6cyxkaXI6MCxkaXNhYmxlZDpzLGRvd25sb2FkOmwsZHJhZ2dhYmxlOjAsZW5jVHlwZTowLGZvcm06MCxmb3JtQWN0aW9uOjAsZm9ybUVuY1R5cGU6MCxmb3JtTWV0aG9kOjAsZm9ybU5vVmFsaWRhdGU6cyxmb3JtVGFyZ2V0OjAsZnJhbWVCb3JkZXI6MCxoZWFkZXJzOjAsaGVpZ2h0OjAsaGlkZGVuOnMsaGlnaDowLGhyZWY6MCxocmVmTGFuZzowLGh0bWxGb3I6MCxodHRwRXF1aXY6MCxpY29uOjAsaWQ6MCxpbnB1dE1vZGU6MCxpbnRlZ3JpdHk6MCxpczowLGtleVBhcmFtczowLGtleVR5cGU6MCxraW5kOjAsbGFiZWw6MCxsYW5nOjAsbGlzdDowLGxvb3A6cyxsb3c6MCxtYW5pZmVzdDowLG1hcmdpbkhlaWdodDowLG1hcmdpbldpZHRoOjAsbWF4OjAsbWF4TGVuZ3RoOjAsbWVkaWE6MCxtZWRpYUdyb3VwOjAsbWV0aG9kOjAsbWluOjAsbWluTGVuZ3RoOjAsbXVsdGlwbGU6b3xzLG11dGVkOm98cyxuYW1lOjAsbm9uY2U6MCxub1ZhbGlkYXRlOnMsb3BlbjpzLG9wdGltdW06MCxwYXR0ZXJuOjAscGxhY2Vob2xkZXI6MCxwbGF5c0lubGluZTpzLHBvc3RlcjowLHByZWxvYWQ6MCxwcm9maWxlOjAscmFkaW9Hcm91cDowLHJlYWRPbmx5OnMscmVmZXJyZXJQb2xpY3k6MCxyZWw6MCxyZXF1aXJlZDpzLHJldmVyc2VkOnMscm9sZTowLHJvd3M6YSxyb3dTcGFuOmksc2FuZGJveDowLHNjb3BlOjAsc2NvcGVkOnMsc2Nyb2xsaW5nOjAsc2VhbWxlc3M6cyxzZWxlY3RlZDpvfHMsc2hhcGU6MCxzaXplOmEsc2l6ZXM6MCxzcGFuOmEsc3BlbGxDaGVjazowLHNyYzowLHNyY0RvYzowLHNyY0xhbmc6MCxzcmNTZXQ6MCxzdGFydDppLHN0ZXA6MCxzdHlsZTowLHN1bW1hcnk6MCx0YWJJbmRleDowLHRhcmdldDowLHRpdGxlOjAsdHlwZTowLHVzZU1hcDowLHZhbHVlOjAsd2lkdGg6MCx3bW9kZTowLHdyYXA6MCxhYm91dDowLGRhdGF0eXBlOjAsaW5saXN0OjAscHJlZml4OjAscHJvcGVydHk6MCxyZXNvdXJjZTowLHR5cGVvZjowLHZvY2FiOjAsYXV0b0NhcGl0YWxpemU6MCxhdXRvQ29ycmVjdDowLGF1dG9TYXZlOjAsY29sb3I6MCxpdGVtUHJvcDowLGl0ZW1TY29wZTpzLGl0ZW1UeXBlOjAsaXRlbUlEOjAsaXRlbVJlZjowLHJlc3VsdHM6MCxzZWN1cml0eTowLHVuc2VsZWN0YWJsZTowfSxET01BdHRyaWJ1dGVOYW1lczp7YWNjZXB0Q2hhcnNldDoiYWNjZXB0LWNoYXJzZXQiLGNsYXNzTmFtZToiY2xhc3MiLGh0bWxGb3I6ImZvciIsaHR0cEVxdWl2OiJodHRwLWVxdWl2In0sRE9NUHJvcGVydHlOYW1lczp7fSxET01NdXRhdGlvbk1ldGhvZHM6e3ZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYobnVsbD09dClyZXR1cm4gZS5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik7Im51bWJlciIhPT1lLnR5cGV8fCExPT09ZS5oYXNBdHRyaWJ1dGUoInZhbHVlIik/ZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KTplLnZhbGlkaXR5JiYhZS52YWxpZGl0eS5iYWRJbnB1dCYmZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lJiZlLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiK3QpfX19O2UuZXhwb3J0cz11fSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiBvKGUpe3ZhciB0PS8oPTB8PTIpL2csbj17Ij0wIjoiPSIsIj0yIjoiOiJ9O3JldHVybigiIisoIi4iPT09ZVswXSYmIiQiPT09ZVsxXT9lLnN1YnN0cmluZygyKTplLnN1YnN0cmluZygxKSkpLnJlcGxhY2UodCxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfXZhciBzPXtlc2NhcGU6cix1bmVzY2FwZTpvfTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvTGlua2VkVmFsdWVVdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe251bGwhPWUuY2hlY2tlZExpbmsmJm51bGwhPWUudmFsdWVMaW5rJiZhKCI4NyIpfWZ1bmN0aW9uIG8oZSl7cihlKSwobnVsbCE9ZS52YWx1ZXx8bnVsbCE9ZS5vbkNoYW5nZSkmJmEoIjg4Iil9ZnVuY3Rpb24gcyhlKXtyKGUpLChudWxsIT1lLmNoZWNrZWR8fG51bGwhPWUub25DaGFuZ2UpJiZhKCI4OSIpfWZ1bmN0aW9uIGkoZSl7aWYoZSl7dmFyIHQ9ZS5nZXROYW1lKCk7aWYodClyZXR1cm4iIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAiK3QrImAuIn1yZXR1cm4iIn12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3QuanMiKSxkPXUoYy5pc1ZhbGlkRWxlbWVudCksXz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLHtidXR0b246ITAsY2hlY2tib3g6ITAsaW1hZ2U6ITAsaGlkZGVuOiEwLHJhZGlvOiEwLHJlc2V0OiEwLHN1Ym1pdDohMH0pLHA9e3ZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8X1tlLnR5cGVdfHxlLm9uQ2hhbmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLiIpfSxjaGVja2VkOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxlZD9udWxsOm5ldyBFcnJvcigiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuIil9LG9uQ2hhbmdlOmQuZnVuY30sZj17fSxtPXtjaGVja1Byb3BUeXBlczpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByIGluIHApe2lmKHAuaGFzT3duUHJvcGVydHkocikpdmFyIG89cFtyXSh0LHIsZSwicHJvcCIsbnVsbCxsKTtpZihvIGluc3RhbmNlb2YgRXJyb3ImJiEoby5tZXNzYWdlIGluIGYpKXtmW28ubWVzc2FnZV09ITA7aShuKX19fSxnZXRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxpbmsudmFsdWUpOmUudmFsdWV9LGdldENoZWNrZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hlY2tlZExpbms/KHMoZSksZS5jaGVja2VkTGluay52YWx1ZSk6ZS5jaGVja2VkfSxleGVjdXRlT25DaGFuZ2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxpbmsucmVxdWVzdENoYW5nZSh0LnRhcmdldC52YWx1ZSkpOmUuY2hlY2tlZExpbms/KHMoZSksZS5jaGVja2VkTGluay5yZXF1ZXN0Q2hhbmdlKHQudGFyZ2V0LmNoZWNrZWQpKTplLm9uQ2hhbmdlP2Uub25DaGFuZ2UuY2FsbCh2b2lkIDAsdCk6dm9pZCAwfX07ZS5leHBvcnRzPW19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksbz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0Lmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBuPXQuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiB0LmNhbGwobixlKSxufXJldHVybiBuZXcgdChlKX0pLHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKG4uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIHI9bi5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG4uY2FsbChyLGUsdCkscn1yZXR1cm4gbmV3IG4oZSx0KX0saT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztpZihyLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBvPXIuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiByLmNhbGwobyxlLHQsbiksb31yZXR1cm4gbmV3IHIoZSx0LG4pfSxhPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXM7aWYoby5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcz1vLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gby5jYWxsKHMsZSx0LG4sciksc31yZXR1cm4gbmV3IG8oZSx0LG4scil9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlIGluc3RhbmNlb2YgdHx8cigiMjUiKSxlLmRlc3RydWN0b3IoKSx0Lmluc3RhbmNlUG9vbC5sZW5ndGg8dC5wb29sU2l6ZSYmdC5pbnN0YW5jZVBvb2wucHVzaChlKX0sdT1vLGM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lO3JldHVybiBuLmluc3RhbmNlUG9vbD1bXSxuLmdldFBvb2xlZD10fHx1LG4ucG9vbFNpemV8fChuLnBvb2xTaXplPTEwKSxuLnJlbGVhc2U9bCxufSxkPXthZGRQb29saW5nVG86YyxvbmVBcmd1bWVudFBvb2xlcjpvLHR3b0FyZ3VtZW50UG9vbGVyOnMsdGhyZWVBcmd1bWVudFBvb2xlcjppLGZvdXJBcmd1bWVudFBvb2xlcjphfTtlLmV4cG9ydHM9ZH0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG0pfHwoZVttXT1wKyssZFtlW21dXT17fSksZFtlW21dXX12YXIgbyxzPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEV2ZW50RW1pdHRlck1peGluLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1ZpZXdwb3J0TWV0cmljcy5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIiksZD17fSxfPSExLHA9MCxmPXt0b3BBYm9ydDoiYWJvcnQiLHRvcEFuaW1hdGlvbkVuZDp1KCJhbmltYXRpb25lbmQiKXx8ImFuaW1hdGlvbmVuZCIsdG9wQW5pbWF0aW9uSXRlcmF0aW9uOnUoImFuaW1hdGlvbml0ZXJhdGlvbiIpfHwiYW5pbWF0aW9uaXRlcmF0aW9uIix0b3BBbmltYXRpb25TdGFydDp1KCJhbmltYXRpb25zdGFydCIpfHwiYW5pbWF0aW9uc3RhcnQiLHRvcEJsdXI6ImJsdXIiLHRvcENhblBsYXk6ImNhbnBsYXkiLHRvcENhblBsYXlUaHJvdWdoOiJjYW5wbGF5dGhyb3VnaCIsdG9wQ2hhbmdlOiJjaGFuZ2UiLHRvcENsaWNrOiJjbGljayIsdG9wQ29tcG9zaXRpb25FbmQ6ImNvbXBvc2l0aW9uZW5kIix0b3BDb21wb3NpdGlvblN0YXJ0OiJjb21wb3NpdGlvbnN0YXJ0Iix0b3BDb21wb3NpdGlvblVwZGF0ZToiY29tcG9zaXRpb251cGRhdGUiLHRvcENvbnRleHRNZW51OiJjb250ZXh0bWVudSIsdG9wQ29weToiY29weSIsdG9wQ3V0OiJjdXQiLHRvcERvdWJsZUNsaWNrOiJkYmxjbGljayIsdG9wRHJhZzoiZHJhZyIsdG9wRHJhZ0VuZDoiZHJhZ2VuZCIsdG9wRHJhZ0VudGVyOiJkcmFnZW50ZXIiLHRvcERyYWdFeGl0OiJkcmFnZXhpdCIsdG9wRHJhZ0xlYXZlOiJkcmFnbGVhdmUiLHRvcERyYWdPdmVyOiJkcmFnb3ZlciIsdG9wRHJhZ1N0YXJ0OiJkcmFnc3RhcnQiLHRvcERyb3A6ImRyb3AiLHRvcER1cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5jcnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9yIix0b3BGb2N1czoiZm9jdXMiLHRvcElucHV0OiJpbnB1dCIsdG9wS2V5RG93bjoia2V5ZG93biIsdG9wS2V5UHJlc3M6ImtleXByZXNzIix0b3BLZXlVcDoia2V5dXAiLHRvcExvYWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1ldGFkYXRhOiJsb2FkZWRtZXRhZGF0YSIsdG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcE1vdXNlRG93bjoibW91c2Vkb3duIix0b3BNb3VzZU1vdmU6Im1vdXNlbW92ZSIsdG9wTW91c2VPdXQ6Im1vdXNlb3V0Iix0b3BNb3VzZU92ZXI6Im1vdXNlb3ZlciIsdG9wTW91c2VVcDoibW91c2V1cCIsdG9wUGFzdGU6InBhc3RlIix0b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Nyb2xsOiJzY3JvbGwiLHRvcFNlZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BTZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbmNoYW5nZSIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVuZDoic3VzcGVuZCIsdG9wVGV4dElucHV0OiJ0ZXh0SW5wdXQiLHRvcFRpbWVVcGRhdGU6InRpbWV1cGRhdGUiLHRvcFRvdWNoQ2FuY2VsOiJ0b3VjaGNhbmNlbCIsdG9wVG91Y2hFbmQ6InRvdWNoZW5kIix0b3BUb3VjaE1vdmU6InRvdWNobW92ZSIsdG9wVG91Y2hTdGFydDoidG91Y2hzdGFydCIsdG9wVHJhbnNpdGlvbkVuZDp1KCJ0cmFuc2l0aW9uZW5kIil8fCJ0cmFuc2l0aW9uZW5kIix0b3BWb2x1bWVDaGFuZ2U6InZvbHVtZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyIsdG9wV2hlZWw6IndoZWVsIn0sbT0iX3JlYWN0TGlzdGVuZXJzSUQiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSxoPXMoe30sYSx7UmVhY3RFdmVudExpc3RlbmVyOm51bGwsaW5qZWN0aW9uOntpbmplY3RSZWFjdEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSl7ZS5zZXRIYW5kbGVUb3BMZXZlbChoLmhhbmRsZVRvcExldmVsKSxoLlJlYWN0RXZlbnRMaXN0ZW5lcj1lfX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXtoLlJlYWN0RXZlbnRMaXN0ZW5lciYmaC5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlKX0saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghaC5SZWFjdEV2ZW50TGlzdGVuZXJ8fCFoLlJlYWN0RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSl9LGxpc3RlblRvOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQsbz1yKG4pLHM9aS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2VdLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGw9c1thXTtvLmhhc093blByb3BlcnR5KGwpJiZvW2xdfHwoInRvcFdoZWVsIj09PWw/Yygid2hlZWwiKT9oLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIndoZWVsIixuKTpjKCJtb3VzZXdoZWVsIik/aC5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wV2hlZWwiLCJtb3VzZXdoZWVsIixuKTpoLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIkRPTU1vdXNlU2Nyb2xsIixuKToidG9wU2Nyb2xsIj09PWw/Yygic2Nyb2xsIiwhMCk/aC5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsbik6aC5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wU2Nyb2xsIiwic2Nyb2xsIixoLlJlYWN0RXZlbnRMaXN0ZW5lci5XSU5ET1dfSEFORExFKToidG9wRm9jdXMiPT09bHx8InRvcEJsdXIiPT09bD8oYygiZm9jdXMiLCEwKT8oaC5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEZvY3VzIiwiZm9jdXMiLG4pLGguUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0b3BCbHVyIiwiYmx1ciIsbikpOmMoImZvY3VzaW4iKSYmKGguUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcEZvY3VzIiwiZm9jdXNpbiIsbiksaC5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wQmx1ciIsImZvY3Vzb3V0IixuKSksby50b3BCbHVyPSEwLG8udG9wRm9jdXM9ITApOmYuaGFzT3duUHJvcGVydHkobCkmJmguUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQobCxmW2xdLG4pLG9bbF09ITApfX0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGguUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoZSx0LG4pfSx0cmFwQ2FwdHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGguUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KGUsdCxuKX0sc3VwcG9ydHNFdmVudFBhZ2VYWTpmdW5jdGlvbigpe2lmKCFkb2N1bWVudC5jcmVhdGVFdmVudClyZXR1cm4hMTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBudWxsIT1lJiYicGFnZVgiaW4gZX0sZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09byYmKG89aC5zdXBwb3J0c0V2ZW50UGFnZVhZKCkpLCFvJiYhXyl7dmFyIGU9bC5yZWZyZXNoU2Nyb2xsVmFsdWVzO2guUmVhY3RFdmVudExpc3RlbmVyLm1vbml0b3JTY3JvbGxWYWx1ZShlKSxfPSEwfX19KTtlLmV4cG9ydHM9aH0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDaGlsZFJlY29uY2lsZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIG89dm9pZCAwPT09ZVtuXTtudWxsIT10JiZvJiYoZVtuXT1zKHQsITApKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIiksaT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuanMiKSksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiKTtuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIik7dm9pZCAwIT09dCYmdC5lbnY7dmFyIGw9e2luc3RhbnRpYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4sbyl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcz17fTtyZXR1cm4gYShlLHIscyksc30sdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scixhLGwsdSxjLGQpe2lmKHR8fGUpe3ZhciBfLHA7Zm9yKF8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KF8pKXtwPWUmJmVbX107dmFyIGY9cCYmcC5fY3VycmVudEVsZW1lbnQsbT10W19dO2lmKG51bGwhPXAmJmkoZixtKSlvLnJlY2VpdmVDb21wb25lbnQocCxtLGEsYyksdFtfXT1wO2Vsc2V7cCYmKHJbX109by5nZXRIb3N0Tm9kZShwKSxvLnVubW91bnRDb21wb25lbnQocCwhMSkpO3ZhciBoPXMobSwhMCk7dFtfXT1oO3ZhciBnPW8ubW91bnRDb21wb25lbnQoaCxhLGwsdSxjLGQpO24ucHVzaChnKX19Zm9yKF8gaW4gZSkhZS5oYXNPd25Qcm9wZXJ0eShfKXx8dCYmdC5oYXNPd25Qcm9wZXJ0eShfKXx8KHA9ZVtfXSxyW19dPW8uZ2V0SG9zdE5vZGUocCksby51bm1vdW50Q29tcG9uZW50KHAsITEpKX19LHVubW91bnRDaGlsZHJlbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciByPWVbbl07by51bm1vdW50Q29tcG9uZW50KHIsdCl9fX07ZS5leHBvcnRzPWx9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01DaGlsZHJlbk9wZXJhdGlvbnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01JRE9wZXJhdGlvbnMuanMiKSxzPXtwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOm8uZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLHJlcGxhY2VOb2RlV2l0aE1hcmt1cDpyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwfTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLG89KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLCExKSxzPXtyZXBsYWNlTm9kZVdpdGhNYXJrdXA6bnVsbCxwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOm51bGwsaW5qZWN0aW9uOntpbmplY3RFbnZpcm9ubWVudDpmdW5jdGlvbihlKXtvJiZyKCIxMDQiKSxzLnJlcGxhY2VOb2RlV2l0aE1hcmt1cD1lLnJlcGxhY2VOb2RlV2l0aE1hcmt1cCxzLnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM9ZS5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLG89ITB9fX07ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7fWZ1bmN0aW9uIG8oZSl7cmV0dXJuISghZS5wcm90b3R5cGV8fCFlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBzKGUpe3JldHVybiEoIWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3QuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXJyb3JVdGlscy5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RhbmNlTWFwLmpzIikscD0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3ROb2RlVHlwZXMuanMiKSksZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlci5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlPYmplY3QuanMiKSxoPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9zaGFsbG93RXF1YWwuanMiKSksZz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LmpzIiksYj0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLHtJbXB1cmVDbGFzczowLFB1cmVDbGFzczoxLFN0YXRlbGVzc0Z1bmN0aW9uYWw6Mn0pO3IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPV8uZ2V0KHRoaXMpLl9jdXJyZW50RWxlbWVudC50eXBlLHQ9ZSh0aGlzLnByb3BzLHRoaXMuY29udGV4dCx0aGlzLnVwZGF0ZXIpO3JldHVybiB0fTt2YXIgRT0xLHk9e2NvbnN0cnVjdDpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9jb21wb3NpdGVUeXBlPW51bGwsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxsLHRoaXMuX3BlbmRpbmdFbGVtZW50PW51bGwsdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCx0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMSx0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPW51bGwsdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fbW91bnRPcmRlcj0wLHRoaXMuX3RvcExldmVsV3JhcHBlcj1udWxsLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbCx0aGlzLl9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3VudD0hMX0sbW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4sYSl7dGhpcy5fY29udGV4dD1hLHRoaXMuX21vdW50T3JkZXI9RSsrLHRoaXMuX2hvc3RQYXJlbnQ9dCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1uO3ZhciB1LGM9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsZD10aGlzLl9wcm9jZXNzQ29udGV4dChhKSxwPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUsZj1lLmdldFVwZGF0ZVF1ZXVlKCksaD1vKHApLGc9dGhpcy5fY29uc3RydWN0Q29tcG9uZW50KGgsYyxkLGYpO2h8fG51bGwhPWcmJm51bGwhPWcucmVuZGVyP3MocCk/dGhpcy5fY29tcG9zaXRlVHlwZT1iLlB1cmVDbGFzczp0aGlzLl9jb21wb3NpdGVUeXBlPWIuSW1wdXJlQ2xhc3M6KHU9ZyxudWxsPT09Z3x8ITE9PT1nfHxsLmlzVmFsaWRFbGVtZW50KGcpfHxpKCIxMDUiLHAuZGlzcGxheU5hbWV8fHAubmFtZXx8IkNvbXBvbmVudCIpLGc9bmV3IHIocCksdGhpcy5fY29tcG9zaXRlVHlwZT1iLlN0YXRlbGVzc0Z1bmN0aW9uYWwpO2cucHJvcHM9YyxnLmNvbnRleHQ9ZCxnLnJlZnM9bSxnLnVwZGF0ZXI9Zix0aGlzLl9pbnN0YW5jZT1nLF8uc2V0KGcsdGhpcyk7dmFyIHk9Zy5zdGF0ZTt2b2lkIDA9PT15JiYoZy5zdGF0ZT15PW51bGwpLCgib2JqZWN0IiE9dHlwZW9mIHl8fEFycmF5LmlzQXJyYXkoeSkpJiZpKCIxMDYiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSExO3ZhciB2O3JldHVybiB2PWcudW5zdGFibGVfaGFuZGxlRXJyb3I/dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmcodSx0LG4sZSxhKTp0aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQodSx0LG4sZSxhKSxnLmNvbXBvbmVudERpZE1vdW50JiZlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZy5jb21wb25lbnREaWRNb3VudCxnKSx2fSxfY29uc3RydWN0Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXIoZSx0LG4scil9LF9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtyZXR1cm4gZT9uZXcgbyh0LG4scik6byh0LG4scil9LHBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZzpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBzLGk9ci5jaGVja3BvaW50KCk7dHJ5e3M9dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9Y2F0Y2goYSl7ci5yb2xsYmFjayhpKSx0aGlzLl9pbnN0YW5jZS51bnN0YWJsZV9oYW5kbGVFcnJvcihhKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSYmKHRoaXMuX2luc3RhbmNlLnN0YXRlPXRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUodGhpcy5faW5zdGFuY2UucHJvcHMsdGhpcy5faW5zdGFuY2UuY29udGV4dCkpLGk9ci5jaGVja3BvaW50KCksdGhpcy5fcmVuZGVyZWRDb21wb25lbnQudW5tb3VudENvbXBvbmVudCghMCksci5yb2xsYmFjayhpKSxzPXRoaXMucGVyZm9ybUluaXRpYWxNb3VudChlLHQsbixyLG8pfXJldHVybiBzfSxwZXJmb3JtSW5pdGlhbE1vdW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHM9dGhpcy5faW5zdGFuY2UsaT0wO3MuY29tcG9uZW50V2lsbE1vdW50JiYocy5jb21wb25lbnRXaWxsTW91bnQoKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSYmKHMuc3RhdGU9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShzLnByb3BzLHMuY29udGV4dCkpKSx2b2lkIDA9PT1lJiYoZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKSk7dmFyIGE9cC5nZXRUeXBlKGUpO3RoaXMuX3JlbmRlcmVkTm9kZVR5cGU9YTt2YXIgbD10aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KGUsYSE9PXAuRU1QVFkpO3RoaXMuX3JlbmRlcmVkQ29tcG9uZW50PWw7dmFyIHU9Zi5tb3VudENvbXBvbmVudChsLHIsdCxuLHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQobyksaSk7cmV0dXJuIHV9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZ2V0SG9zdE5vZGUodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50KXt2YXIgdD10aGlzLl9pbnN0YW5jZTtpZih0LmNvbXBvbmVudFdpbGxVbm1vdW50JiYhdC5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQpaWYodC5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQ9ITAsZSl7dmFyIG49dGhpcy5nZXROYW1lKCkrIi5jb21wb25lbnRXaWxsVW5tb3VudCgpIjtkLmludm9rZUd1YXJkZWRDYWxsYmFjayhuLHQuY29tcG9uZW50V2lsbFVubW91bnQuYmluZCh0KSl9ZWxzZSB0LmNvbXBvbmVudFdpbGxVbm1vdW50KCk7dGhpcy5fcmVuZGVyZWRDb21wb25lbnQmJihmLnVubW91bnRDb21wb25lbnQodGhpcy5fcmVuZGVyZWRDb21wb25lbnQsZSksdGhpcy5fcmVuZGVyZWROb2RlVHlwZT1udWxsLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PW51bGwsdGhpcy5faW5zdGFuY2U9bnVsbCksdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCx0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGwsdGhpcy5fcGVuZGluZ0VsZW1lbnQ9bnVsbCx0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX3RvcExldmVsV3JhcHBlcj1udWxsLF8ucmVtb3ZlKHQpfX0sX21hc2tDb250ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUsbj10LmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gbTt2YXIgcj17fTtmb3IodmFyIG8gaW4gbilyW29dPWVbb107cmV0dXJuIHJ9LF9wcm9jZXNzQ29udGV4dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9tYXNrQ29udGV4dChlKTtyZXR1cm4gdH0sX3Byb2Nlc3NDaGlsZENvbnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHI9dGhpcy5faW5zdGFuY2U7aWYoci5nZXRDaGlsZENvbnRleHQmJih0PXIuZ2V0Q2hpbGRDb250ZXh0KCkpLHQpeyJvYmplY3QiIT10eXBlb2Ygbi5jaGlsZENvbnRleHRUeXBlcyYmaSgiMTA3Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7Zm9yKHZhciBvIGluIHQpbyBpbiBuLmNoaWxkQ29udGV4dFR5cGVzfHxpKCIxMDgiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiLG8pO3JldHVybiBhKHt9LGUsdCl9cmV0dXJuIGV9LF9jaGVja0NvbnRleHRUeXBlczpmdW5jdGlvbihlLHQsbil7fSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9jdXJyZW50RWxlbWVudCxvPXRoaXMuX2NvbnRleHQ7dGhpcy5fcGVuZGluZ0VsZW1lbnQ9bnVsbCx0aGlzLnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxvLG4pfSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5fcGVuZGluZ0VsZW1lbnQ/Zi5yZWNlaXZlQ29tcG9uZW50KHRoaXMsdGhpcy5fcGVuZGluZ0VsZW1lbnQsZSx0aGlzLl9jb250ZXh0KTpudWxsIT09dGhpcy5fcGVuZGluZ1N0YXRlUXVldWV8fHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT90aGlzLnVwZGF0ZUNvbXBvbmVudChlLHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2NvbnRleHQsdGhpcy5fY29udGV4dCk6dGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbH0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHM9dGhpcy5faW5zdGFuY2U7bnVsbD09cyYmaSgiMTM2Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7dmFyIGEsbD0hMTt0aGlzLl9jb250ZXh0PT09bz9hPXMuY29udGV4dDooYT10aGlzLl9wcm9jZXNzQ29udGV4dChvKSxsPSEwKTt2YXIgdT10LnByb3BzLGM9bi5wcm9wczt0IT09biYmKGw9ITApLGwmJnMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsYSk7dmFyIGQ9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShjLGEpLF89ITA7dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlfHwocy5zaG91bGRDb21wb25lbnRVcGRhdGU/Xz1zLnNob3VsZENvbXBvbmVudFVwZGF0ZShjLGQsYSk6dGhpcy5fY29tcG9zaXRlVHlwZT09PWIuUHVyZUNsYXNzJiYoXz0haCh1LGMpfHwhaChzLnN0YXRlLGQpKSksdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbCxfPyh0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShuLGMsZCxhLGUsbykpOih0aGlzLl9jdXJyZW50RWxlbWVudD1uLHRoaXMuX2NvbnRleHQ9byxzLnByb3BzPWMscy5zdGF0ZT1kLHMuY29udGV4dD1hKX0sX3Byb2Nlc3NQZW5kaW5nU3RhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZSxyPXRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlLG89dGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtpZih0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsIXIpcmV0dXJuIG4uc3RhdGU7aWYobyYmMT09PXIubGVuZ3RoKXJldHVybiByWzBdO2Zvcih2YXIgcz1hKHt9LG8/clswXTpuLnN0YXRlKSxpPW8/MTowO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2EocywiZnVuY3Rpb24iPT10eXBlb2YgbD9sLmNhbGwobixzLGUsdCk6bCl9cmV0dXJuIHN9LF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCxuLHIsbyxzKXt2YXIgaSxhLGwsdT10aGlzLl9pbnN0YW5jZSxjPUJvb2xlYW4odS5jb21wb25lbnREaWRVcGRhdGUpO2MmJihpPXUucHJvcHMsYT11LnN0YXRlLGw9dS5jb250ZXh0KSx1LmNvbXBvbmVudFdpbGxVcGRhdGUmJnUuY29tcG9uZW50V2lsbFVwZGF0ZSh0LG4sciksdGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLl9jb250ZXh0PXMsdS5wcm9wcz10LHUuc3RhdGU9bix1LmNvbnRleHQ9cix0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudChvLHMpLGMmJm8uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh1LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKHUsaSxhLGwpLHUpfSxfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9yZW5kZXJlZENvbXBvbmVudCxyPW4uX2N1cnJlbnRFbGVtZW50LG89dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCkscz0wO2lmKGcocixvKSlmLnJlY2VpdmVDb21wb25lbnQobixvLGUsdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dCh0KSk7ZWxzZXt2YXIgaT1mLmdldEhvc3ROb2RlKG4pO2YudW5tb3VudENvbXBvbmVudChuLCExKTt2YXIgYT1wLmdldFR5cGUobyk7dGhpcy5fcmVuZGVyZWROb2RlVHlwZT1hO3ZhciBsPXRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQobyxhIT09cC5FTVBUWSk7dGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bDt2YXIgdT1mLm1vdW50Q29tcG9uZW50KGwsZSx0aGlzLl9ob3N0UGFyZW50LHRoaXMuX2hvc3RDb250YWluZXJJbmZvLHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQodCkscyk7dGhpcy5fcmVwbGFjZU5vZGVXaXRoTWFya3VwKGksdSxuKX19LF9yZXBsYWNlTm9kZVdpdGhNYXJrdXA6ZnVuY3Rpb24oZSx0LG4pe3UucmVwbGFjZU5vZGVXaXRoTWFya3VwKGUsdCxuKX0sX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2luc3RhbmNlO3JldHVybiBlLnJlbmRlcigpfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5fY29tcG9zaXRlVHlwZSE9PWIuU3RhdGVsZXNzRnVuY3Rpb25hbCl7Yy5jdXJyZW50PXRoaXM7dHJ5e2U9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCl9ZmluYWxseXtjLmN1cnJlbnQ9bnVsbH19ZWxzZSBlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgpO3JldHVybiBudWxsPT09ZXx8ITE9PT1lfHxsLmlzVmFsaWRFbGVtZW50KGUpfHxpKCIxMDkiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxlfSxhdHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7bnVsbD09biYmaSgiMTEwIik7dmFyIHI9dC5nZXRQdWJsaWNJbnN0YW5jZSgpOyhuLnJlZnM9PT1tP24ucmVmcz17fTpuLnJlZnMpW2VdPXJ9LGRldGFjaFJlZjpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbZV19LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHQ9dGhpcy5faW5zdGFuY2UmJnRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO3JldHVybiBlLmRpc3BsYXlOYW1lfHx0JiZ0LmRpc3BsYXlOYW1lfHxlLm5hbWV8fHQmJnQubmFtZXx8bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pbnN0YW5jZTtyZXR1cm4gdGhpcy5fY29tcG9zaXRlVHlwZT09PWIuU3RhdGVsZXNzRnVuY3Rpb25hbD9udWxsOmV9LF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Om51bGx9O2UuZXhwb3J0cz15fSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERlZmF1bHRJbmplY3Rpb24uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RNb3VudC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZXIuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VmVyc2lvbi5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9maW5kRE9NTm9kZS5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZS5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lci5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKTtvLmluamVjdCgpO3ZhciBfPXtmaW5kRE9NTm9kZTp1LHJlbmRlcjpzLnJlbmRlcix1bm1vdW50Q29tcG9uZW50QXROb2RlOnMudW5tb3VudENvbXBvbmVudEF0Tm9kZSx2ZXJzaW9uOmwsdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6YS5iYXRjaGVkVXBkYXRlcyx1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjpkfTsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3QmJl9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qoe0NvbXBvbmVudFRyZWU6e2dldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOnIuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsZ2V0Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fcmVuZGVyZWRDb21wb25lbnQmJihlPWMoZSkpLGU/ci5nZXROb2RlRnJvbUluc3RhbmNlKGUpOm51bGx9fSxNb3VudDpzLFJlY29uY2lsZXI6aX0pO2UuZXhwb3J0cz1ffSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50Ll9vd25lcnx8bnVsbDtpZih0KXt2YXIgbj10LmdldE5hbWUoKTtpZihuKXJldHVybiIgVGhpcyBET00gbm9kZSB3YXMgcmVuZGVyZWQgYnkgYCIrbisiYC4ifX1yZXR1cm4iIn1mdW5jdGlvbiBvKGUsdCl7dCYmKFhbZS5fdGFnXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZoKCIxMzciLGUuX3RhZyxlLl9jdXJyZW50RWxlbWVudC5fb3duZXI/IiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAiK2UuX2N1cnJlbnRFbGVtZW50Ll9vd25lci5nZXROYW1lKCkrIi4iOiIiKSxudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYobnVsbCE9dC5jaGlsZHJlbiYmaCgiNjAiKSwib2JqZWN0Ij09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJnogaW4gdC5kYW5nZXJvdXNseVNldElubmVySFRNTHx8aCgiNjEiKSksbnVsbCE9dC5zdHlsZSYmIm9iamVjdCIhPXR5cGVvZiB0LnN0eWxlJiZoKCI2MiIscihlKSkpfWZ1bmN0aW9uIHMoZSx0LG4scil7aWYoIShyIGluc3RhbmNlb2Ygaykpe3ZhciBvPWUuX2hvc3RDb250YWluZXJJbmZvLHM9by5fbm9kZSYmby5fbm9kZS5ub2RlVHlwZT09PVcsYT1zP28uX25vZGU6by5fb3duZXJEb2N1bWVudDtCKHQsYSksci5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGkse2luc3Q6ZSxyZWdpc3RyYXRpb25OYW1lOnQsbGlzdGVuZXI6bn0pfX1mdW5jdGlvbiBpKCl7dmFyIGU9dGhpcztDLnB1dExpc3RlbmVyKGUuaW5zdCxlLnJlZ2lzdHJhdGlvbk5hbWUsZS5saXN0ZW5lcil9ZnVuY3Rpb24gYSgpe3ZhciBlPXRoaXM7eC5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIGwoKXt2YXIgZT10aGlzO3cucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiB1KCl7dmFyIGU9dGhpcztMLnBvc3RNb3VudFdyYXBwZXIoZSl9ZnVuY3Rpb24gYygpe1AudHJhY2sodGhpcyl9ZnVuY3Rpb24gZCgpe3ZhciBlPXRoaXM7ZS5fcm9vdE5vZGVJRHx8aCgiNjMiKTt2YXIgdD1GKGUpO3N3aXRjaCh0fHxoKCI2NCIpLGUuX3RhZyl7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtTLnRyYXBCdWJibGVkRXZlbnQoInRvcExvYWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bXTtmb3IodmFyIG4gaW4gWSlZLmhhc093blByb3BlcnR5KG4pJiZlLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2goUy50cmFwQnViYmxlZEV2ZW50KG4sWVtuXSx0KSk7YnJlYWs7Y2FzZSJzb3VyY2UiOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1MudHJhcEJ1YmJsZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIsdCldO2JyZWFrO2Nhc2UiaW1nIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtTLnRyYXBCdWJibGVkRXZlbnQoInRvcEVycm9yIiwiZXJyb3IiLHQpLFMudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9hZCIsImxvYWQiLHQpXTticmVhaztjYXNlImZvcm0iOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1MudHJhcEJ1YmJsZWRFdmVudCgidG9wUmVzZXQiLCJyZXNldCIsdCksUy50cmFwQnViYmxlZEV2ZW50KCJ0b3BTdWJtaXQiLCJzdWJtaXQiLHQpXTticmVhaztjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bUy50cmFwQnViYmxlZEV2ZW50KCJ0b3BJbnZhbGlkIiwiaW52YWxpZCIsdCldfX1mdW5jdGlvbiBfKCl7RC5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBwKGUpe0ouY2FsbChRLGUpfHwoJC50ZXN0KGUpfHxoKCI2NSIsZSksUVtlXT0hMCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlLmluZGV4T2YoIi0iKT49MHx8bnVsbCE9dC5pc31mdW5jdGlvbiBtKGUpe3ZhciB0PWUudHlwZTtwKHQpLHRoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fdGFnPXQudG9Mb3dlckNhc2UoKSx0aGlzLl9uYW1lc3BhY2VVUkk9bnVsbCx0aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGwsdGhpcy5fcHJldmlvdXNTdHlsZT1udWxsLHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl93cmFwcGVyU3RhdGU9bnVsbCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCx0aGlzLl9mbGFncz0wfXZhciBoPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksYj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0F1dG9Gb2N1c1V0aWxzLmpzIiksRT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5T3BlcmF0aW9ucy5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01MYXp5VHJlZS5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01OYW1lc3BhY2VzLmpzIiksVD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5LmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5T3BlcmF0aW9ucy5qcyIpLEM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIpLE89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblJlZ2lzdHJ5LmpzIiksUz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5qcyIpLFI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudEZsYWdzLmpzIiksaj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLHg9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUlucHV0LmpzIiksTD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NT3B0aW9uLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0LmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiKSxNPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE11bHRpQ2hpbGQuanMiKSksaz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiKSxJPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIuanMiKSksUD0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvc2hhbGxvd0VxdWFsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnB1dFZhbHVlVHJhY2tpbmcuanMiKSksTj0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi92YWxpZGF0ZURPTU5lc3RpbmcuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksUiksSD1DLmRlbGV0ZUxpc3RlbmVyLEY9ai5nZXROb2RlRnJvbUluc3RhbmNlLEI9Uy5saXN0ZW5UbyxVPU8ucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsRz17c3RyaW5nOiEwLG51bWJlcjohMH0sej0iX19odG1sIixWPXtjaGlsZHJlbjpudWxsLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOm51bGwsc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nOm51bGx9LFc9MTEsWT17dG9wQWJvcnQ6ImFib3J0Iix0b3BDYW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2FucGxheXRocm91Z2giLHRvcER1cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5jcnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9yIix0b3BMb2FkZWREYXRhOiJsb2FkZWRkYXRhIix0b3BMb2FkZWRNZXRhZGF0YToibG9hZGVkbWV0YWRhdGEiLHRvcExvYWRTdGFydDoibG9hZHN0YXJ0Iix0b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Vla2VkOiJzZWVrZWQiLHRvcFNlZWtpbmc6InNlZWtpbmciLHRvcFN0YWxsZWQ6InN0YWxsZWQiLHRvcFN1c3BlbmQ6InN1c3BlbmQiLHRvcFRpbWVVcGRhdGU6InRpbWV1cGRhdGUiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hhbmdlIix0b3BXYWl0aW5nOiJ3YWl0aW5nIn0scT17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxLPXtsaXN0aW5nOiEwLHByZTohMCx0ZXh0YXJlYTohMH0sWD1nKHttZW51aXRlbTohMH0scSksJD0vXlthLXpBLVpdW2EtekEtWjpfXC5cLVxkXSokLyxRPXt9LEo9e30uaGFzT3duUHJvcGVydHksWj0xO20uZGlzcGxheU5hbWU9IlJlYWN0RE9NQ29tcG9uZW50IixtLk1peGluPXttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9yb290Tm9kZUlEPVorKyx0aGlzLl9kb21JRD1uLl9pZENvdW50ZXIrKyx0aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgcz10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztzd2l0Y2godGhpcy5fdGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2UiaWZyYW1lIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNhc2UidmlkZW8iOnRoaXMuX3dyYXBwZXJTdGF0ZT17bGlzdGVuZXJzOm51bGx9LGUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShkLHRoaXMpO2JyZWFrO2Nhc2UiaW5wdXQiOngubW91bnRXcmFwcGVyKHRoaXMscyx0KSxzPXguZ2V0SG9zdFByb3BzKHRoaXMscyksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhpcyksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGQsdGhpcyk7YnJlYWs7Y2FzZSJvcHRpb24iOkwubW91bnRXcmFwcGVyKHRoaXMscyx0KSxzPUwuZ2V0SG9zdFByb3BzKHRoaXMscyk7YnJlYWs7Y2FzZSJzZWxlY3QiOkQubW91bnRXcmFwcGVyKHRoaXMscyx0KSxzPUQuZ2V0SG9zdFByb3BzKHRoaXMscyksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGQsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6dy5tb3VudFdyYXBwZXIodGhpcyxzLHQpLHM9dy5nZXRIb3N0UHJvcHModGhpcyxzKSxlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYyx0aGlzKSxlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZCx0aGlzKX1vKHRoaXMscyk7dmFyIGksXztudWxsIT10PyhpPXQuX25hbWVzcGFjZVVSSSxfPXQuX3RhZyk6bi5fdGFnJiYoaT1uLl9uYW1lc3BhY2VVUkksXz1uLl90YWcpLChudWxsPT1pfHxpPT09di5zdmcmJiJmb3JlaWdub2JqZWN0Ij09PV8pJiYoaT12Lmh0bWwpLGk9PT12Lmh0bWwmJigic3ZnIj09PXRoaXMuX3RhZz9pPXYuc3ZnOiJtYXRoIj09PXRoaXMuX3RhZyYmKGk9di5tYXRobWwpKSx0aGlzLl9uYW1lc3BhY2VVUkk9aTt2YXIgcDtpZihlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBmLG09bi5fb3duZXJEb2N1bWVudDtpZihpPT09di5odG1sKWlmKCJzY3JpcHQiPT09dGhpcy5fdGFnKXt2YXIgaD1tLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGc9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtoLmlubmVySFRNTD0iPCIrZysiPjwvIitnKyI+IixmPWgucmVtb3ZlQ2hpbGQoaC5maXJzdENoaWxkKX1lbHNlIGY9cy5pcz9tLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxzLmlzKTptLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7ZWxzZSBmPW0uY3JlYXRlRWxlbWVudE5TKGksdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7ai5wcmVjYWNoZU5vZGUodGhpcyxmKSx0aGlzLl9mbGFnc3w9Ti5oYXNDYWNoZWRDaGlsZE5vZGVzLHRoaXMuX2hvc3RQYXJlbnR8fEEuc2V0QXR0cmlidXRlRm9yUm9vdChmKSx0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51bGwscyxlKTt2YXIgRT15KGYpO3RoaXMuX2NyZWF0ZUluaXRpYWxDaGlsZHJlbihlLHMscixFKSxwPUV9ZWxzZXt2YXIgVD10aGlzLl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzKGUscyksQz10aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKGUscyxyKTtwPSFDJiZxW3RoaXMuX3RhZ10/VCsiLz4iOlQrIj4iK0MrIjwvIit0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKyI+In1zd2l0Y2godGhpcy5fdGFnKXtjYXNlImlucHV0IjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYSx0aGlzKSxzLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGIuZm9jdXNET01Db21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGwsdGhpcykscy5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShiLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlImJ1dHRvbiI6cy5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShiLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9uIjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodSx0aGlzKX1yZXR1cm4gcH0sX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iPCIrdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbz10W3JdO2lmKG51bGwhPW8paWYoVS5oYXNPd25Qcm9wZXJ0eShyKSlvJiZzKHRoaXMscixvLGUpO2Vsc2V7InN0eWxlIj09PXImJihvJiYobz10aGlzLl9wcmV2aW91c1N0eWxlQ29weT1nKHt9LHQuc3R5bGUpKSxvPUUuY3JlYXRlTWFya3VwRm9yU3R5bGVzKG8sdGhpcykpO3ZhciBpPW51bGw7bnVsbCE9dGhpcy5fdGFnJiZmKHRoaXMuX3RhZyx0KT9WLmhhc093blByb3BlcnR5KHIpfHwoaT1BLmNyZWF0ZU1hcmt1cEZvckN1c3RvbUF0dHJpYnV0ZShyLG8pKTppPUEuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkocixvKSxpJiYobis9IiAiK2kpfX1yZXR1cm4gZS5yZW5kZXJUb1N0YXRpY01hcmt1cD9uOih0aGlzLl9ob3N0UGFyZW50fHwobis9IiAiK0EuY3JlYXRlTWFya3VwRm9yUm9vdCgpKSxuKz0iICIrQS5jcmVhdGVNYXJrdXBGb3JJRCh0aGlzLl9kb21JRCkpfSxfY3JlYXRlQ29udGVudE1hcmt1cDpmdW5jdGlvbihlLHQsbil7dmFyIHI9IiIsbz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9by5fX2h0bWwmJihyPW8uX19odG1sKTtlbHNle3ZhciBzPUdbdHlwZW9mIHQuY2hpbGRyZW5dP3QuY2hpbGRyZW46bnVsbCxpPW51bGwhPXM/bnVsbDp0LmNoaWxkcmVuO2lmKG51bGwhPXMpcj1JKHMpO2Vsc2UgaWYobnVsbCE9aSl7dmFyIGE9dGhpcy5tb3VudENoaWxkcmVuKGksZSxuKTtyPWEuam9pbigiIil9fXJldHVybiBLW3RoaXMuX3RhZ10mJiJcbiI9PT1yLmNoYXJBdCgwKT8iXG4iK3I6cn0sX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9by5fX2h0bWwmJnkucXVldWVIVE1MKHIsby5fX2h0bWwpO2Vsc2V7dmFyIHM9R1t0eXBlb2YgdC5jaGlsZHJlbl0/dC5jaGlsZHJlbjpudWxsLGk9bnVsbCE9cz9udWxsOnQuY2hpbGRyZW47aWYobnVsbCE9cykiIiE9PXMmJnkucXVldWVUZXh0KHIscyk7ZWxzZSBpZihudWxsIT1pKWZvcih2YXIgYT10aGlzLm1vdW50Q2hpbGRyZW4oaSxlLG4pLGw9MDtsPGEubGVuZ3RoO2wrKyl5LnF1ZXVlQ2hpbGQocixhW2xdKX19LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2N1cnJlbnRFbGVtZW50O3RoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy51cGRhdGVDb21wb25lbnQodCxyLGUsbil9LHVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgcz10LnByb3BzLGk9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6cz14LmdldEhvc3RQcm9wcyh0aGlzLHMpLGk9eC5nZXRIb3N0UHJvcHModGhpcyxpKTticmVhaztjYXNlIm9wdGlvbiI6cz1MLmdldEhvc3RQcm9wcyh0aGlzLHMpLGk9TC5nZXRIb3N0UHJvcHModGhpcyxpKTticmVhaztjYXNlInNlbGVjdCI6cz1ELmdldEhvc3RQcm9wcyh0aGlzLHMpLGk9RC5nZXRIb3N0UHJvcHModGhpcyxpKTticmVhaztjYXNlInRleHRhcmVhIjpzPXcuZ2V0SG9zdFByb3BzKHRoaXMscyksaT13LmdldEhvc3RQcm9wcyh0aGlzLGkpfXN3aXRjaChvKHRoaXMsaSksdGhpcy5fdXBkYXRlRE9NUHJvcGVydGllcyhzLGksZSksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4ocyxpLGUsciksdGhpcy5fdGFnKXtjYXNlImlucHV0Ijp4LnVwZGF0ZVdyYXBwZXIodGhpcyksUC51cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0aGlzKTticmVhaztjYXNlInRleHRhcmVhIjp3LnVwZGF0ZVdyYXBwZXIodGhpcyk7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShfLHRoaXMpfX0sX3VwZGF0ZURPTVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saTtmb3IociBpbiBlKWlmKCF0Lmhhc093blByb3BlcnR5KHIpJiZlLmhhc093blByb3BlcnR5KHIpJiZudWxsIT1lW3JdKWlmKCJzdHlsZSI9PT1yKXt2YXIgYT10aGlzLl9wcmV2aW91c1N0eWxlQ29weTtmb3IobyBpbiBhKWEuaGFzT3duUHJvcGVydHkobykmJihpPWl8fHt9LGlbb109IiIpO3RoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGx9ZWxzZSBVLmhhc093blByb3BlcnR5KHIpP2Vbcl0mJkgodGhpcyxyKTpmKHRoaXMuX3RhZyxlKT9WLmhhc093blByb3BlcnR5KHIpfHxBLmRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlKEYodGhpcykscik6KFQucHJvcGVydGllc1tyXXx8VC5pc0N1c3RvbUF0dHJpYnV0ZShyKSkmJkEuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShGKHRoaXMpLHIpO2ZvcihyIGluIHQpe3ZhciBsPXRbcl0sdT0ic3R5bGUiPT09cj90aGlzLl9wcmV2aW91c1N0eWxlQ29weTpudWxsIT1lP2Vbcl06dm9pZCAwO2lmKHQuaGFzT3duUHJvcGVydHkocikmJmwhPT11JiYobnVsbCE9bHx8bnVsbCE9dSkpaWYoInN0eWxlIj09PXIpaWYobD9sPXRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PWcoe30sbCk6dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9bnVsbCx1KXtmb3IobyBpbiB1KSF1Lmhhc093blByb3BlcnR5KG8pfHxsJiZsLmhhc093blByb3BlcnR5KG8pfHwoaT1pfHx7fSxpW29dPSIiKTtmb3IobyBpbiBsKWwuaGFzT3duUHJvcGVydHkobykmJnVbb10hPT1sW29dJiYoaT1pfHx7fSxpW29dPWxbb10pfWVsc2UgaT1sO2Vsc2UgaWYoVS5oYXNPd25Qcm9wZXJ0eShyKSlsP3ModGhpcyxyLGwsbik6dSYmSCh0aGlzLHIpO2Vsc2UgaWYoZih0aGlzLl90YWcsdCkpVi5oYXNPd25Qcm9wZXJ0eShyKXx8QS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShGKHRoaXMpLHIsbCk7ZWxzZSBpZihULnByb3BlcnRpZXNbcl18fFQuaXNDdXN0b21BdHRyaWJ1dGUocikpe3ZhciBjPUYodGhpcyk7bnVsbCE9bD9BLnNldFZhbHVlRm9yUHJvcGVydHkoYyxyLGwpOkEuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShjLHIpfX1pJiZFLnNldFZhbHVlRm9yU3R5bGVzKEYodGhpcyksaSx0aGlzKX0sX3VwZGF0ZURPTUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPUdbdHlwZW9mIGUuY2hpbGRyZW5dP2UuY2hpbGRyZW46bnVsbCxzPUdbdHlwZW9mIHQuY2hpbGRyZW5dP3QuY2hpbGRyZW46bnVsbCxpPWUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJmUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sLGE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwsbD1udWxsIT1vP251bGw6ZS5jaGlsZHJlbix1PW51bGwhPXM/bnVsbDp0LmNoaWxkcmVuLGM9bnVsbCE9b3x8bnVsbCE9aSxkPW51bGwhPXN8fG51bGwhPWE7bnVsbCE9bCYmbnVsbD09dT90aGlzLnVwZGF0ZUNoaWxkcmVuKG51bGwsbixyKTpjJiYhZCYmdGhpcy51cGRhdGVUZXh0Q29udGVudCgiIiksbnVsbCE9cz9vIT09cyYmdGhpcy51cGRhdGVUZXh0Q29udGVudCgiIitzKTpudWxsIT1hP2khPT1hJiZ0aGlzLnVwZGF0ZU1hcmt1cCgiIithKTpudWxsIT11JiZ0aGlzLnVwZGF0ZUNoaWxkcmVuKHUsbixyKX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtzd2l0Y2godGhpcy5fdGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2UiaWZyYW1lIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNhc2UidmlkZW8iOnZhciB0PXRoaXMuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM7aWYodClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dLnJlbW92ZSgpO2JyZWFrO2Nhc2UiaW5wdXQiOmNhc2UidGV4dGFyZWEiOlAuc3RvcFRyYWNraW5nKHRoaXMpO2JyZWFrO2Nhc2UiaHRtbCI6Y2FzZSJoZWFkIjpjYXNlImJvZHkiOmgoIjY2Iix0aGlzLl90YWcpfXRoaXMudW5tb3VudENoaWxkcmVuKGUpLGoudW5jYWNoZU5vZGUodGhpcyksQy5kZWxldGVBbGxMaXN0ZW5lcnModGhpcyksdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5fd3JhcHBlclN0YXRlPW51bGx9LGdldFB1YmxpY0luc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIEYodGhpcyl9fSxnKG0ucHJvdG90eXBlLG0uTWl4aW4sTS5NaXhpbiksZS5leHBvcnRzPW19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2hhc0NhY2hlZENoaWxkTm9kZXM6MX07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlJiZlLmdldEF0dHJpYnV0ZShmKT09PVN0cmluZyh0KXx8OD09PWUubm9kZVR5cGUmJmUubm9kZVZhbHVlPT09IiByZWFjdC10ZXh0OiAiK3QrIiAifHw4PT09ZS5ub2RlVHlwZSYmZS5ub2RlVmFsdWU9PT0iIHJlYWN0LWVtcHR5OiAiK3QrIiAifWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0O3Q9ZS5fcmVuZGVyZWRDb21wb25lbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBzKGUsdCl7dmFyIG49byhlKTtuLl9ob3N0Tm9kZT10LHRbaF09bn1mdW5jdGlvbiBpKGUpe3ZhciB0PWUuX2hvc3ROb2RlO3QmJihkZWxldGUgdFtoXSxlLl9ob3N0Tm9kZT1udWxsKX1mdW5jdGlvbiBhKGUsdCl7aWYoIShlLl9mbGFncyZtLmhhc0NhY2hlZENoaWxkTm9kZXMpKXt2YXIgbj1lLl9yZW5kZXJlZENoaWxkcmVuLGk9dC5maXJzdENoaWxkO2U6Zm9yKHZhciBhIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGw9blthXSx1PW8obCkuX2RvbUlEO2lmKDAhPT11KXtmb3IoO251bGwhPT1pO2k9aS5uZXh0U2libGluZylpZihyKGksdSkpe3MobCxpKTtjb250aW51ZSBlfWQoIjMyIix1KX19ZS5fZmxhZ3N8PW0uaGFzQ2FjaGVkQ2hpbGROb2Rlc319ZnVuY3Rpb24gbChlKXtpZihlW2hdKXJldHVybiBlW2hdO2Zvcih2YXIgdD1bXTshZVtoXTspe2lmKHQucHVzaChlKSwhZS5wYXJlbnROb2RlKXJldHVybiBudWxsO2U9ZS5wYXJlbnROb2RlfWZvcih2YXIgbixyO2UmJihyPWVbaF0pO2U9dC5wb3AoKSluPXIsdC5sZW5ndGgmJmEocixlKTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUpe3ZhciB0PWwoZSk7cmV0dXJuIG51bGwhPXQmJnQuX2hvc3ROb2RlPT09ZT90Om51bGx9ZnVuY3Rpb24gYyhlKXtpZih2b2lkIDA9PT1lLl9ob3N0Tm9kZSYmZCgiMzMiKSxlLl9ob3N0Tm9kZSlyZXR1cm4gZS5faG9zdE5vZGU7Zm9yKHZhciB0PVtdOyFlLl9ob3N0Tm9kZTspdC5wdXNoKGUpLGUuX2hvc3RQYXJlbnR8fGQoIjM0IiksZT1lLl9ob3N0UGFyZW50O2Zvcig7dC5sZW5ndGg7ZT10LnBvcCgpKWEoZSxlLl9ob3N0Tm9kZSk7cmV0dXJuIGUuX2hvc3ROb2RlfXZhciBkPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5LmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MuanMiKSxmPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxfLklEX0FUVFJJQlVURV9OQU1FKSxtPXAsaD0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxnPXtnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTpsLGdldEluc3RhbmNlRnJvbU5vZGU6dSxnZXROb2RlRnJvbUluc3RhbmNlOmMscHJlY2FjaGVDaGlsZE5vZGVzOmEscHJlY2FjaGVOb2RlOnMsdW5jYWNoZU5vZGU6aX07ZS5leHBvcnRzPWd9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29udGFpbmVySW5mby5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e190b3BMZXZlbFdyYXBwZXI6ZSxfaWRDb3VudGVyOjEsX293bmVyRG9jdW1lbnQ6dD90Lm5vZGVUeXBlPT09bz90OnQub3duZXJEb2N1bWVudDpudWxsLF9ub2RlOnQsX3RhZzp0P3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTpudWxsLF9uYW1lc3BhY2VVUkk6dD90Lm5hbWVzcGFjZVVSSTpudWxsfTtyZXR1cm4gbn12YXIgbz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi92YWxpZGF0ZURPTU5lc3RpbmcuanMiKSw5KTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01FbXB0eUNvbXBvbmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTUxhenlUcmVlLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLGk9ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX2RvbUlEPTB9O3IoaS5wcm90b3R5cGUse21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPW4uX2lkQ291bnRlcisrO3RoaXMuX2RvbUlEPWksdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW47dmFyIGE9IiByZWFjdC1lbXB0eTogIit0aGlzLl9kb21JRCsiICI7aWYoZS51c2VDcmVhdGVFbGVtZW50KXt2YXIgbD1uLl9vd25lckRvY3VtZW50LHU9bC5jcmVhdGVDb21tZW50KGEpO3JldHVybiBzLnByZWNhY2hlTm9kZSh0aGlzLHUpLG8odSl9cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/IiI6Ilx4M2MhLS0iK2ErIi0tXHgzZSJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oKXt9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbigpe3MudW5jYWNoZU5vZGUodGhpcyl9fSksZS5leHBvcnRzPWl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NRmVhdHVyZUZsYWdzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt1c2VDcmVhdGVFbGVtZW50OiEwLHVzZUZpYmVyOiExfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01JRE9wZXJhdGlvbnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01DaGlsZHJlbk9wZXJhdGlvbnMuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIikscz17ZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49by5nZXROb2RlRnJvbUluc3RhbmNlKGUpO3IucHJvY2Vzc1VwZGF0ZXMobix0KX19O2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUlucHV0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLl9yb290Tm9kZUlEJiZfLnVwZGF0ZVdyYXBwZXIodGhpcyl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iY2hlY2tib3giPT09ZS50eXBlfHwicmFkaW8iPT09ZS50eXBlP251bGwhPWUuY2hlY2tlZDpudWxsIT1lLnZhbHVlfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsbj11LmV4ZWN1dGVPbkNoYW5nZSh0LGUpO2QuYXNhcChyLHRoaXMpO3ZhciBvPXQubmFtZTtpZigicmFkaW8iPT09dC50eXBlJiZudWxsIT1vKXtmb3IodmFyIHM9Yy5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpLGE9czthLnBhcmVudE5vZGU7KWE9YS5wYXJlbnROb2RlO2Zvcih2YXIgbD1hLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0cmluZ2lmeSgiIitvKSsnXVt0eXBlPSJyYWRpbyJdJyksXz0wO188bC5sZW5ndGg7XysrKXt2YXIgcD1sW19dO2lmKHAhPT1zJiZwLmZvcm09PT1zLmZvcm0pe3ZhciBmPWMuZ2V0SW5zdGFuY2VGcm9tTm9kZShwKTtmfHxpKCI5MCIpLGQuYXNhcChyLGYpfX19cmV0dXJuIG59dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHlPcGVyYXRpb25zLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0xpbmtlZFZhbHVlVXRpbHMuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIpLF89KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSx7Z2V0SG9zdFByb3BzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dS5nZXRWYWx1ZSh0KSxyPXUuZ2V0Q2hlY2tlZCh0KTtyZXR1cm4gYSh7dHlwZTp2b2lkIDAsc3RlcDp2b2lkIDAsbWluOnZvaWQgMCxtYXg6dm9pZCAwfSx0LHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1ZTpudWxsIT1uP246ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxjaGVja2VkOm51bGwhPXI/cjplLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsb25DaGFuZ2U6ZS5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlfSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGVmYXVsdFZhbHVlO2UuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6bnVsbCE9dC5jaGVja2VkP3QuY2hlY2tlZDp0LmRlZmF1bHRDaGVja2VkLGluaXRpYWxWYWx1ZTpudWxsIT10LnZhbHVlP3QudmFsdWU6bixsaXN0ZW5lcnM6bnVsbCxvbkNoYW5nZTpzLmJpbmQoZSksY29udHJvbGxlZDpvKHQpfX0sdXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXQuY2hlY2tlZDtudWxsIT1uJiZsLnNldFZhbHVlRm9yUHJvcGVydHkoYy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLCJjaGVja2VkIixufHwhMSk7dmFyIHI9Yy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG89dS5nZXRWYWx1ZSh0KTtpZihudWxsIT1vKWlmKDA9PT1vJiYiIj09PXIudmFsdWUpci52YWx1ZT0iMCI7ZWxzZSBpZigibnVtYmVyIj09PXQudHlwZSl7dmFyIHM9cGFyc2VGbG9hdChyLnZhbHVlLDEwKXx8MDsobyE9c3x8bz09cyYmci52YWx1ZSE9bykmJihyLnZhbHVlPSIiK28pfWVsc2Ugci52YWx1ZSE9PSIiK28mJihyLnZhbHVlPSIiK28pO2Vsc2UgbnVsbD09dC52YWx1ZSYmbnVsbCE9dC5kZWZhdWx0VmFsdWUmJnIuZGVmYXVsdFZhbHVlIT09IiIrdC5kZWZhdWx0VmFsdWUmJihyLmRlZmF1bHRWYWx1ZT0iIit0LmRlZmF1bHRWYWx1ZSksbnVsbD09dC5jaGVja2VkJiZudWxsIT10LmRlZmF1bHRDaGVja2VkJiYoci5kZWZhdWx0Q2hlY2tlZD0hIXQuZGVmYXVsdENoZWNrZWQpfSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49Yy5nZXROb2RlRnJvbUluc3RhbmNlKGUpO3N3aXRjaCh0LnR5cGUpe2Nhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztjYXNlImNvbG9yIjpjYXNlImRhdGUiOmNhc2UiZGF0ZXRpbWUiOmNhc2UiZGF0ZXRpbWUtbG9jYWwiOmNhc2UibW9udGgiOmNhc2UidGltZSI6Y2FzZSJ3ZWVrIjpuLnZhbHVlPSIiLG4udmFsdWU9bi5kZWZhdWx0VmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnZhbHVlPW4udmFsdWV9dmFyIHI9bi5uYW1lOyIiIT09ciYmKG4ubmFtZT0iIiksbi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZhdWx0Q2hlY2tlZCxuLmRlZmF1bHRDaGVja2VkPSFuLmRlZmF1bHRDaGVja2VkLCIiIT09ciYmKG4ubmFtZT1yKX19KTtlLmV4cG9ydHM9X30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01PcHRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0iIjtyZXR1cm4gcy5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24oZSl7bnVsbCE9ZSYmKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlP3QrPWU6bHx8KGw9ITApKX0pLHR9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTVNlbGVjdC5qcyIpLGw9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSwhMSksdT17bW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1udWxsO2lmKG51bGwhPW4pe3ZhciBzPW47Im9wdGdyb3VwIj09PXMuX3RhZyYmKHM9cy5faG9zdFBhcmVudCksbnVsbCE9cyYmInNlbGVjdCI9PT1zLl90YWcmJihvPWEuZ2V0U2VsZWN0VmFsdWVDb250ZXh0KHMpKX12YXIgaT1udWxsO2lmKG51bGwhPW8pe3ZhciBsO2lmKGw9bnVsbCE9dC52YWx1ZT90LnZhbHVlKyIiOnIodC5jaGlsZHJlbiksaT0hMSxBcnJheS5pc0FycmF5KG8pKXtmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKylpZigiIitvW3VdPT09bCl7aT0hMDticmVha319ZWxzZSBpPSIiK289PT1sfWUuX3dyYXBwZXJTdGF0ZT17c2VsZWN0ZWQ6aX19LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHM7aWYobnVsbCE9dC52YWx1ZSl7aS5nZXROb2RlRnJvbUluc3RhbmNlKGUpLnNldEF0dHJpYnV0ZSgidmFsdWUiLHQudmFsdWUpfX0sZ2V0SG9zdFByb3BzOmZ1bmN0aW9uKGUsdCl7dmFyIG49byh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZvaWQgMH0sdCk7bnVsbCE9ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkJiYobi5zZWxlY3RlZD1lLl93cmFwcGVyU3RhdGUuc2VsZWN0ZWQpO3ZhciBzPXIodC5jaGlsZHJlbik7cmV0dXJuIHMmJihuLmNoaWxkcmVuPXMpLG59fTtlLmV4cG9ydHM9dX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKHRoaXMuX3Jvb3ROb2RlSUQmJnRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKXt0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMTt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyx0PWEuZ2V0VmFsdWUoZSk7bnVsbCE9dCYmbyh0aGlzLEJvb2xlYW4oZS5tdWx0aXBsZSksdCl9fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByLG8scz1sLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkub3B0aW9ucztpZih0KXtmb3Iocj17fSxvPTA7bzxuLmxlbmd0aDtvKyspclsiIituW29dXT0hMDtmb3Iobz0wO288cy5sZW5ndGg7bysrKXt2YXIgaT1yLmhhc093blByb3BlcnR5KHNbb10udmFsdWUpO3Nbb10uc2VsZWN0ZWQhPT1pJiYoc1tvXS5zZWxlY3RlZD1pKX19ZWxzZXtmb3Iocj0iIituLG89MDtvPHMubGVuZ3RoO28rKylpZihzW29dLnZhbHVlPT09cilyZXR1cm4gdm9pZChzW29dLnNlbGVjdGVkPSEwKTtzLmxlbmd0aCYmKHNbMF0uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBzKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49YS5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4gdGhpcy5fcm9vdE5vZGVJRCYmKHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlPSEwKSx1LmFzYXAocix0aGlzKSxufXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvTGlua2VkVmFsdWVVdGlscy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIiksYz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLCExKSxkPXtnZXRIb3N0UHJvcHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh7fSx0LHtvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2UsdmFsdWU6dm9pZCAwfSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWEuZ2V0VmFsdWUodCk7ZS5fd3JhcHBlclN0YXRlPXtwZW5kaW5nVXBkYXRlOiExLGluaXRpYWxWYWx1ZTpudWxsIT1uP246dC5kZWZhdWx0VmFsdWUsbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6cy5iaW5kKGUpLHdhc011bHRpcGxlOkJvb2xlYW4odC5tdWx0aXBsZSl9LHZvaWQgMD09PXQudmFsdWV8fHZvaWQgMD09PXQuZGVmYXVsdFZhbHVlfHxjfHwoYz0hMCl9LGdldFNlbGVjdFZhbHVlQ29udGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0scG9zdFVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHM7ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZT12b2lkIDA7dmFyIG49ZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO2UuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT1Cb29sZWFuKHQubXVsdGlwbGUpO3ZhciByPWEuZ2V0VmFsdWUodCk7bnVsbCE9cj8oZS5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9ITEsbyhlLEJvb2xlYW4odC5tdWx0aXBsZSkscikpOm4hPT1Cb29sZWFuKHQubXVsdGlwbGUpJiYobnVsbCE9dC5kZWZhdWx0VmFsdWU/byhlLEJvb2xlYW4odC5tdWx0aXBsZSksdC5kZWZhdWx0VmFsdWUpOm8oZSxCb29sZWFuKHQubXVsdGlwbGUpLHQubXVsdGlwbGU/W106IiIpKX19O2UuZXhwb3J0cz1kfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTVNlbGVjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBlPT09biYmdD09PXJ9ZnVuY3Rpb24gbyhlKXt2YXIgdD1kb2N1bWVudC5zZWxlY3Rpb24sbj10LmNyZWF0ZVJhbmdlKCkscj1uLnRleHQubGVuZ3RoLG89bi5kdXBsaWNhdGUoKTtvLm1vdmVUb0VsZW1lbnRUZXh0KGUpLG8uc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLG4pO3ZhciBzPW8udGV4dC5sZW5ndGg7cmV0dXJue3N0YXJ0OnMsZW5kOnMrcn19ZnVuY3Rpb24gcyhlKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIXR8fDA9PT10LnJhbmdlQ291bnQpcmV0dXJuIG51bGw7dmFyIG49dC5hbmNob3JOb2RlLG89dC5hbmNob3JPZmZzZXQscz10LmZvY3VzTm9kZSxpPXQuZm9jdXNPZmZzZXQsYT10LmdldFJhbmdlQXQoMCk7dHJ5e2Euc3RhcnRDb250YWluZXIubm9kZVR5cGUsYS5lbmRDb250YWluZXIubm9kZVR5cGV9Y2F0Y2goZSl7cmV0dXJuIG51bGx9dmFyIGw9cih0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQsdC5mb2N1c05vZGUsdC5mb2N1c09mZnNldCksdT1sPzA6YS50b1N0cmluZygpLmxlbmd0aCxjPWEuY2xvbmVSYW5nZSgpO2Muc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLGMuc2V0RW5kKGEuc3RhcnRDb250YWluZXIsYS5zdGFydE9mZnNldCk7dmFyIGQ9cihjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQsYy5lbmRDb250YWluZXIsYy5lbmRPZmZzZXQpLF89ZD8wOmMudG9TdHJpbmcoKS5sZW5ndGgscD1fK3UsZj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2Yuc2V0U3RhcnQobixvKSxmLnNldEVuZChzLGkpO3ZhciBtPWYuY29sbGFwc2VkO3JldHVybntzdGFydDptP3A6XyxlbmQ6bT9fOnB9fWZ1bmN0aW9uIGkoZSx0KXt2YXIgbixyLG89ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRlKCk7dm9pZCAwPT09dC5lbmQ/KG49dC5zdGFydCxyPW4pOnQuc3RhcnQ+dC5lbmQ/KG49dC5lbmQscj10LnN0YXJ0KToobj10LnN0YXJ0LHI9dC5lbmQpLG8ubW92ZVRvRWxlbWVudFRleHQoZSksby5tb3ZlU3RhcnQoImNoYXJhY3RlciIsbiksby5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIsbyksby5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksby5zZWxlY3QoKX1mdW5jdGlvbiBhKGUsdCl7aWYod2luZG93LmdldFNlbGVjdGlvbil7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpLHI9ZVtjKCldLmxlbmd0aCxvPU1hdGgubWluKHQuc3RhcnQscikscz12b2lkIDA9PT10LmVuZD9vOk1hdGgubWluKHQuZW5kLHIpO2lmKCFuLmV4dGVuZCYmbz5zKXt2YXIgaT1zO3M9byxvPWl9dmFyIGE9dShlLG8pLGw9dShlLHMpO2lmKGEmJmwpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ZC5zZXRTdGFydChhLm5vZGUsYS5vZmZzZXQpLG4ucmVtb3ZlQWxsUmFuZ2VzKCksbz5zPyhuLmFkZFJhbmdlKGQpLG4uZXh0ZW5kKGwubm9kZSxsLm9mZnNldCkpOihkLnNldEVuZChsLm5vZGUsbC5vZmZzZXQpLG4uYWRkUmFuZ2UoZCkpfX19dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRUZXh0Q29udGVudEFjY2Vzc29yLmpzIiksZD1sLmNhblVzZURPTSYmInNlbGVjdGlvbiJpbiBkb2N1bWVudCYmISgiZ2V0U2VsZWN0aW9uImluIHdpbmRvdyksXz17Z2V0T2Zmc2V0czpkP286cyxzZXRPZmZzZXRzOmQ/aTphfTtlLmV4cG9ydHM9X30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01UZXh0Q29tcG9uZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTUNoaWxkcmVuT3BlcmF0aW9ucy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01MYXp5VHJlZS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiksdT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi92YWxpZGF0ZURPTU5lc3RpbmcuanMiKSxmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMuX3N0cmluZ1RleHQ9IiIrZSx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9kb21JRD0wLHRoaXMuX21vdW50SW5kZXg9MCx0aGlzLl9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMuX2NvbW1lbnROb2Rlcz1udWxsfSk7byh1LnByb3RvdHlwZSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bi5faWRDb3VudGVyKysscz0iIHJlYWN0LXRleHQ6ICIrbysiICI7aWYodGhpcy5fZG9tSUQ9byx0aGlzLl9ob3N0UGFyZW50PXQsZS51c2VDcmVhdGVFbGVtZW50KXt2YXIgdT1uLl9vd25lckRvY3VtZW50LGM9dS5jcmVhdGVDb21tZW50KHMpLGQ9dS5jcmVhdGVDb21tZW50KCIgL3JlYWN0LXRleHQgIiksXz1pKHUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtyZXR1cm4gaS5xdWV1ZUNoaWxkKF8saShjKSksdGhpcy5fc3RyaW5nVGV4dCYmaS5xdWV1ZUNoaWxkKF8saSh1LmNyZWF0ZVRleHROb2RlKHRoaXMuX3N0cmluZ1RleHQpKSksaS5xdWV1ZUNoaWxkKF8saShkKSksYS5wcmVjYWNoZU5vZGUodGhpcyxjKSx0aGlzLl9jbG9zaW5nQ29tbWVudD1kLF99dmFyIHA9bCh0aGlzLl9zdHJpbmdUZXh0KTtyZXR1cm4gZS5yZW5kZXJUb1N0YXRpY01hcmt1cD9wOiJceDNjIS0tIitzKyItLVx4M2UiK3ArIlx4M2MhLS0gL3JlYWN0LXRleHQgLS1ceDNlIn0scmVjZWl2ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQpe2lmKGUhPT10aGlzLl9jdXJyZW50RWxlbWVudCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZTt2YXIgbj0iIitlO2lmKG4hPT10aGlzLl9zdHJpbmdUZXh0KXt0aGlzLl9zdHJpbmdUZXh0PW47dmFyIHI9dGhpcy5nZXRIb3N0Tm9kZSgpO3MucmVwbGFjZURlbGltaXRlZFRleHQoclswXSxyWzFdLG4pfX19LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29tbWVudE5vZGVzO2lmKGUpcmV0dXJuIGU7aWYoIXRoaXMuX2Nsb3NpbmdDb21tZW50KWZvcih2YXIgdD1hLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcyksbj10Lm5leHRTaWJsaW5nOzspe2lmKG51bGw9PW4mJnIoIjY3Iix0aGlzLl9kb21JRCksOD09PW4ubm9kZVR5cGUmJiIgL3JlYWN0LXRleHQgIj09PW4ubm9kZVZhbHVlKXt0aGlzLl9jbG9zaW5nQ29tbWVudD1uO2JyZWFrfW49bi5uZXh0U2libGluZ31yZXR1cm4gZT1bdGhpcy5faG9zdE5vZGUsdGhpcy5fY2xvc2luZ0NvbW1lbnRdLHRoaXMuX2NvbW1lbnROb2Rlcz1lLGV9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXt0aGlzLl9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMuX2NvbW1lbnROb2Rlcz1udWxsLGEudW5jYWNoZU5vZGUodGhpcyl9fSksZS5leHBvcnRzPXV9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX3Jvb3ROb2RlSUQmJmMudXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49YS5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4gdS5hc2FwKHIsdGhpcyksbn12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFVwZGF0ZXMuanMiKSxjPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIikse2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZzKCI5MSIpLGkoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2V9KX0sbW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49YS5nZXRWYWx1ZSh0KSxyPW47aWYobnVsbD09bil7dmFyIGk9dC5kZWZhdWx0VmFsdWUsbD10LmNoaWxkcmVuO251bGwhPWwmJihudWxsIT1pJiZzKCI5MiIpLEFycmF5LmlzQXJyYXkobCkmJihsLmxlbmd0aDw9MXx8cygiOTMiKSxsPWxbMF0pLGk9IiIrbCksbnVsbD09aSYmKGk9IiIpLHI9aX1lLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZToiIityLGxpc3RlbmVyczpudWxsLG9uQ2hhbmdlOm8uYmluZChlKX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1sLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkscj1hLmdldFZhbHVlKHQpO2lmKG51bGwhPXIpe3ZhciBvPSIiK3I7byE9PW4udmFsdWUmJihuLnZhbHVlPW8pLG51bGw9PXQuZGVmYXVsdFZhbHVlJiYobi5kZWZhdWx0VmFsdWU9byl9bnVsbCE9dC5kZWZhdWx0VmFsdWUmJihuLmRlZmF1bHRWYWx1ZT10LmRlZmF1bHRWYWx1ZSl9LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9bC5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG49dC50ZXh0Q29udGVudDtuPT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmKHQudmFsdWU9bil9fSk7ZS5leHBvcnRzPWN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NVHJlZVRyYXZlcnNhbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Il9ob3N0Tm9kZSJpbiBlfHxsKCIzMyIpLCJfaG9zdE5vZGUiaW4gdHx8bCgiMzMiKTtmb3IodmFyIG49MCxyPWU7cjtyPXIuX2hvc3RQYXJlbnQpbisrO2Zvcih2YXIgbz0wLHM9dDtzO3M9cy5faG9zdFBhcmVudClvKys7Zm9yKDtuLW8+MDspZT1lLl9ob3N0UGFyZW50LG4tLTtmb3IoO28tbj4wOyl0PXQuX2hvc3RQYXJlbnQsby0tO2Zvcih2YXIgaT1uO2ktLTspe2lmKGU9PT10KXJldHVybiBlO2U9ZS5faG9zdFBhcmVudCx0PXQuX2hvc3RQYXJlbnR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlLHQpeyJfaG9zdE5vZGUiaW4gZXx8bCgiMzUiKSwiX2hvc3ROb2RlImluIHR8fGwoIjM1Iik7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10Ll9ob3N0UGFyZW50fXJldHVybiExfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIl9ob3N0Tm9kZSJpbiBlfHxsKCIzNiIpLGUuX2hvc3RQYXJlbnR9ZnVuY3Rpb24gaShlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIucHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7dmFyIG87Zm9yKG89ci5sZW5ndGg7by0tID4wOyl0KHJbb10sImNhcHR1cmVkIixuKTtmb3Iobz0wO288ci5sZW5ndGg7bysrKXQocltvXSwiYnViYmxlZCIsbil9ZnVuY3Rpb24gYShlLHQsbixvLHMpe2Zvcih2YXIgaT1lJiZ0P3IoZSx0KTpudWxsLGE9W107ZSYmZSE9PWk7KWEucHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7Zm9yKHZhciBsPVtdO3QmJnQhPT1pOylsLnB1c2godCksdD10Ll9ob3N0UGFyZW50O3ZhciB1O2Zvcih1PTA7dTxhLmxlbmd0aDt1KyspbihhW3VdLCJidWJibGVkIixvKTtmb3IodT1sLmxlbmd0aDt1LS0gPjA7KW4obFt1XSwiY2FwdHVyZWQiLHMpfXZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIik7bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIik7ZS5leHBvcnRzPXtpc0FuY2VzdG9yOm8sZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3I6cixnZXRQYXJlbnRJbnN0YW5jZTpzLHRyYXZlcnNlVHdvUGhhc2U6aSx0cmF2ZXJzZUVudGVyTGVhdmU6YX19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9UcmFuc2FjdGlvbi5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIpLGw9e2luaXRpYWxpemU6YSxjbG9zZTpmdW5jdGlvbigpe18uaXNCYXRjaGluZ1VwZGF0ZXM9ITF9fSx1PXtpbml0aWFsaXplOmEsY2xvc2U6cy5mbHVzaEJhdGNoZWRVcGRhdGVzLmJpbmQocyl9LGM9W3UsbF07byhyLnByb3RvdHlwZSxpLHtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGN9fSk7dmFyIGQ9bmV3IHIsXz17aXNCYXRjaGluZ1VwZGF0ZXM6ITEsYmF0Y2hlZFVwZGF0ZXM6ZnVuY3Rpb24oZSx0LG4scixvLHMpe3ZhciBpPV8uaXNCYXRjaGluZ1VwZGF0ZXM7cmV0dXJuIF8uaXNCYXRjaGluZ1VwZGF0ZXM9ITAsaT9lKHQsbixyLG8scyk6ZC5wZXJmb3JtKGUsbnVsbCx0LG4scixvLHMpfX07ZS5leHBvcnRzPV99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RGVmYXVsdEluamVjdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7QXx8KEE9ITAsYi5FdmVudEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKGcpLGIuRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihhKSxiLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0Q29tcG9uZW50VHJlZShfKSxiLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0VHJlZVRyYXZlcnNhbChmKSxiLkV2ZW50UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7U2ltcGxlRXZlbnRQbHVnaW46VCxFbnRlckxlYXZlRXZlbnRQbHVnaW46bCxDaGFuZ2VFdmVudFBsdWdpbjppLFNlbGVjdEV2ZW50UGx1Z2luOnYsQmVmb3JlSW5wdXRFdmVudFBsdWdpbjpzfSksYi5Ib3N0Q29tcG9uZW50LmluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzcyhkKSxiLkhvc3RDb21wb25lbnQuaW5qZWN0VGV4dENvbXBvbmVudENsYXNzKG0pLGIuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcobyksYi5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyh1KSxiLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKHkpLGIuRW1wdHlDb21wb25lbnQuaW5qZWN0RW1wdHlDb21wb25lbnRGYWN0b3J5KGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcChlKX0pLGIuVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbihFKSxiLlVwZGF0ZXMuaW5qZWN0QmF0Y2hpbmdTdHJhdGVneShoKSxiLkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChjKSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9BUklBRE9NUHJvcGVydHlDb25maWcuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQmVmb3JlSW5wdXRFdmVudFBsdWdpbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9DaGFuZ2VFdmVudFBsdWdpbi5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlci5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUVtcHR5Q29tcG9uZW50LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NVHJlZVRyYXZlcnNhbC5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5qcyIpLGc9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEV2ZW50TGlzdGVuZXIuanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TVkdET01Qcm9wZXJ0eUNvbmZpZy5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIpLFQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TaW1wbGVFdmVudFBsdWdpbi5qcyIpLEE9ITE7ZS5leHBvcnRzPXtpbmplY3Q6cn19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RWxlbWVudFN5bWJvbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG89e2luamVjdEVtcHR5Q29tcG9uZW50RmFjdG9yeTpmdW5jdGlvbihlKXtyPWV9fSxzPXtjcmVhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl9fTtzLmluamVjdGlvbj1vLGUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEVycm9yVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dHJ5e3Qobil9Y2F0Y2goZSl7bnVsbD09PW8mJihvPWUpfX12YXIgbz1udWxsLHM9e2ludm9rZUd1YXJkZWRDYWxsYmFjazpyLGludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaDpyLHJldGhyb3dDYXVnaHRFcnJvcjpmdW5jdGlvbigpe2lmKG8pe3ZhciBlPW87dGhyb3cgbz1udWxsLGV9fX07ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RXZlbnRFbWl0dGVyTWl4aW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtvLmVucXVldWVFdmVudHMoZSksby5wcm9jZXNzRXZlbnRRdWV1ZSghMSl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIpLHM9e2hhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUsdCxuLHMpe3Ioby5leHRyYWN0RXZlbnRzKGUsdCxuLHMpKX19O2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEV2ZW50TGlzdGVuZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IoO2UuX2hvc3RQYXJlbnQ7KWU9ZS5faG9zdFBhcmVudDt2YXIgdD1kLmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbj10LnBhcmVudE5vZGU7cmV0dXJuIGQuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobil9ZnVuY3Rpb24gbyhlLHQpe3RoaXMudG9wTGV2ZWxUeXBlPWUsdGhpcy5uYXRpdmVFdmVudD10LHRoaXMuYW5jZXN0b3JzPVtdfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9cChlLm5hdGl2ZUV2ZW50KSxuPWQuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodCksbz1uO2Rve2UuYW5jZXN0b3JzLnB1c2gobyksbz1vJiZyKG8pfXdoaWxlKG8pO2Zvcih2YXIgcz0wO3M8ZS5hbmNlc3RvcnMubGVuZ3RoO3MrKyluPWUuYW5jZXN0b3JzW3NdLG0uX2hhbmRsZVRvcExldmVsKGUudG9wTGV2ZWxUeXBlLG4sZS5uYXRpdmVFdmVudCxwKGUubmF0aXZlRXZlbnQpKX1mdW5jdGlvbiBpKGUpe2UoZih3aW5kb3cpKX12YXIgYT1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FdmVudExpc3RlbmVyLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9Qb29sZWRDbGFzcy5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIikscD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50VGFyZ2V0LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbi5qcyIpO2Eoby5wcm90b3R5cGUse2Rlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnRvcExldmVsVHlwZT1udWxsLHRoaXMubmF0aXZlRXZlbnQ9bnVsbCx0aGlzLmFuY2VzdG9ycy5sZW5ndGg9MH19KSxjLmFkZFBvb2xpbmdUbyhvLGMudHdvQXJndW1lbnRQb29sZXIpO3ZhciBtPXtfZW5hYmxlZDohMCxfaGFuZGxlVG9wTGV2ZWw6bnVsbCxXSU5ET1dfSEFORExFOnUuY2FuVXNlRE9NP3dpbmRvdzpudWxsLHNldEhhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUpe20uX2hhbmRsZVRvcExldmVsPWV9LHNldEVuYWJsZWQ6ZnVuY3Rpb24oZSl7bS5fZW5hYmxlZD0hIWV9LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBtLl9lbmFibGVkfSx0cmFwQnViYmxlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj9sLmxpc3RlbihuLHQsbS5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCxlKSk6bnVsbH0sdHJhcENhcHR1cmVkRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP2wuY2FwdHVyZShuLHQsbS5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCxlKSk6bnVsbH0sbW9uaXRvclNjcm9sbFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuYmluZChudWxsLGUpO2wubGlzdGVuKHdpbmRvdywic2Nyb2xsIix0KX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihlLHQpe2lmKG0uX2VuYWJsZWQpe3ZhciBuPW8uZ2V0UG9vbGVkKGUsdCk7dHJ5e18uYmF0Y2hlZFVwZGF0ZXMocyxuKX1maW5hbGx5e28ucmVsZWFzZShuKX19fX07ZS5leHBvcnRzPW19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RmVhdHVyZUZsYWdzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtsb2dUb3BMZXZlbFJlbmRlcnM6ITF9O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEhvc3RDb21wb25lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYXx8aSgiMTExIixlLnR5cGUpLG5ldyBhKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG5ldyBsKGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbnVsbCksbD1udWxsLHU9e2luamVjdEdlbmVyaWNDb21wb25lbnRDbGFzczpmdW5jdGlvbihlKXthPWV9LGluamVjdFRleHRDb21wb25lbnRDbGFzczpmdW5jdGlvbihlKXtsPWV9fSxjPXtjcmVhdGVJbnRlcm5hbENvbXBvbmVudDpyLGNyZWF0ZUluc3RhbmNlRm9yVGV4dDpvLGlzVGV4dENvbXBvbmVudDpzLGluamVjdGlvbjp1fTtlLmV4cG9ydHM9Y30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9ET01Qcm9wZXJ0eS5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RFbXB0eUNvbXBvbmVudC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RIb3N0Q29tcG9uZW50LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIpLGQ9e0NvbXBvbmVudDppLmluamVjdGlvbixET01Qcm9wZXJ0eTpyLmluamVjdGlvbixFbXB0eUNvbXBvbmVudDphLmluamVjdGlvbixFdmVudFBsdWdpbkh1YjpvLmluamVjdGlvbixFdmVudFBsdWdpblV0aWxzOnMuaW5qZWN0aW9uLEV2ZW50RW1pdHRlcjpsLmluamVjdGlvbixIb3N0Q29tcG9uZW50OnUuaW5qZWN0aW9uLFVwZGF0ZXM6Yy5pbmplY3Rpb259O2UuZXhwb3J0cz1kfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGUpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3Rpb24uanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2NvbnRhaW5zTm9kZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZm9jdXNOb2RlLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9nZXRBY3RpdmVFbGVtZW50LmpzIiksbD17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOmZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYidGV4dCI9PT1lLnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9LGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybntmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOmwuaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGUpP2wuZ2V0U2VsZWN0aW9uKGUpOm51bGx9fSxyZXN0b3JlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWEoKSxuPWUuZm9jdXNlZEVsZW0sbz1lLnNlbGVjdGlvblJhbmdlO3QhPT1uJiZyKG4pJiYobC5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobikmJmwuc2V0U2VsZWN0aW9uKG4sbyksaShuKSl9LGdldFNlbGVjdGlvbjpmdW5jdGlvbihlKXt2YXIgdDtpZigic2VsZWN0aW9uU3RhcnQiaW4gZSl0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO24ucGFyZW50RWxlbWVudCgpPT09ZSYmKHQ9e3N0YXJ0Oi1uLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwtZS52YWx1ZS5sZW5ndGgpLGVuZDotbi5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1lLnZhbHVlLmxlbmd0aCl9KX1lbHNlIHQ9by5nZXRPZmZzZXRzKGUpO3JldHVybiB0fHx7c3RhcnQ6MCxlbmQ6MH19LHNldFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RhcnQscj10LmVuZDtpZih2b2lkIDA9PT1yJiYocj1uKSwic2VsZWN0aW9uU3RhcnQiaW4gZSllLnNlbGVjdGlvblN0YXJ0PW4sZS5zZWxlY3Rpb25FbmQ9TWF0aC5taW4ocixlLnZhbHVlLmxlbmd0aCk7ZWxzZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBzPWUuY3JlYXRlVGV4dFJhbmdlKCk7cy5jb2xsYXBzZSghMCkscy5tb3ZlU3RhcnQoImNoYXJhY3RlciIsbikscy5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbikscy5zZWxlY3QoKX1lbHNlIG8uc2V0T2Zmc2V0cyhlLHQpfX07ZS5leHBvcnRzPWx9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3JlbW92ZTpmdW5jdGlvbihlKXtlLl9yZWFjdEludGVybmFsSW5zdGFuY2U9dm9pZCAwfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLl9yZWFjdEludGVybmFsSW5zdGFuY2V9LHNldDpmdW5jdGlvbihlLHQpe2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZT10fX07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW51bGw7ZS5leHBvcnRzPXtkZWJ1Z1Rvb2w6cn19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0TWFya3VwQ2hlY2tzdW0uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9hZGxlcjMyLmpzIiksbz0vXC8/Pi8scz0vXjxcIVwtXC0vLGk9e0NIRUNLU1VNX0FUVFJfTkFNRToiZGF0YS1yZWFjdC1jaGVja3N1bSIsYWRkQ2hlY2tzdW1Ub01hcmt1cDpmdW5jdGlvbihlKXt2YXIgdD1yKGUpO3JldHVybiBzLnRlc3QoZSk/ZTplLnJlcGxhY2UobywiICIraS5DSEVDS1NVTV9BVFRSX05BTUUrJz0iJyt0KyciJCYnKX0sY2FuUmV1c2VNYXJrdXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShpLkNIRUNLU1VNX0FUVFJfTkFNRSk7cmV0dXJuIG49biYmcGFyc2VJbnQobiwxMCkscihlKT09PW59fTtlLmV4cG9ydHM9aX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RNb3VudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7cjxuO3IrKylpZihlLmNoYXJBdChyKSE9PXQuY2hhckF0KHIpKXJldHVybiByO3JldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoPy0xOm59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9lLm5vZGVUeXBlPT09az9lLmRvY3VtZW50RWxlbWVudDplLmZpcnN0Q2hpbGQ6bnVsbH1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoRCl8fCIifWZ1bmN0aW9uIGkoZSx0LG4scixvKXt2YXIgcztpZih2LmxvZ1RvcExldmVsUmVuZGVycyl7dmFyIGk9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMuY2hpbGQsYT1pLnR5cGU7cz0iUmVhY3QgbW91bnQ6ICIrKCJzdHJpbmciPT10eXBlb2YgYT9hOmEuZGlzcGxheU5hbWV8fGEubmFtZSksY29uc29sZS50aW1lKHMpfXZhciBsPUMubW91bnRDb21wb25lbnQoZSxuLG51bGwsRShlLHQpLG8sMCk7cyYmY29uc29sZS50aW1lRW5kKHMpLGUuX3JlbmRlcmVkQ29tcG9uZW50Ll90b3BMZXZlbFdyYXBwZXI9ZSxGLl9tb3VudEltYWdlSW50b05vZGUobCx0LGUscixuKX1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBvPVMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoIW4mJnkudXNlQ3JlYXRlRWxlbWVudCk7by5wZXJmb3JtKGksbnVsbCxlLHQsbyxuLHIpLFMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKG8pfWZ1bmN0aW9uIGwoZSx0LG4pe2ZvcihDLnVubW91bnRDb21wb25lbnQoZSxuKSx0Lm5vZGVUeXBlPT09ayYmKHQ9dC5kb2N1bWVudEVsZW1lbnQpO3QubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKX1mdW5jdGlvbiB1KGUpe3ZhciB0PW8oZSk7aWYodCl7dmFyIG49Yi5nZXRJbnN0YW5jZUZyb21Ob2RlKHQpO3JldHVybiEoIW58fCFuLl9ob3N0UGFyZW50KX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09TSYmZS5ub2RlVHlwZSE9PWsmJmUubm9kZVR5cGUhPT1JKX1mdW5jdGlvbiBkKGUpe3ZhciB0PW8oZSksbj10JiZiLmdldEluc3RhbmNlRnJvbU5vZGUodCk7cmV0dXJuIG4mJiFuLl9ob3N0UGFyZW50P246bnVsbH1mdW5jdGlvbiBfKGUpe3ZhciB0PWQoZSk7cmV0dXJuIHQ/dC5faG9zdENvbnRhaW5lckluZm8uX3RvcExldmVsV3JhcHBlcjpudWxsfXZhciBwPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTUxhenlUcmVlLmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTVByb3BlcnR5LmpzIiksaD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3QuanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIiksYj0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSksRT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29udGFpbmVySW5mby5qcyIpLHk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUZlYXR1cmVGbGFncy5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEZlYXR1cmVGbGFncy5qcyIpLFQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RhbmNlTWFwLmpzIiksQT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RNYXJrdXBDaGVja3N1bS5qcyIpKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RSZWNvbmNpbGVyLmpzIiksTz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlUXVldWUuanMiKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eU9iamVjdC5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIikseD0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiKSksTD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LmpzIiksRD0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLG0uSURfQVRUUklCVVRFX05BTUUpLHc9bS5ST09UX0FUVFJJQlVURV9OQU1FLE09MSxrPTksST0xMSxQPXt9LE49MSxIPWZ1bmN0aW9uKCl7dGhpcy5yb290SUQ9TisrfTtILnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LEgucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkfSxILmlzUmVhY3RUb3BMZXZlbFdyYXBwZXI9ITA7dmFyIEY9e1RvcExldmVsV3JhcHBlcjpILF9pbnN0YW5jZXNCeVJlYWN0Um9vdElEOlAsc2Nyb2xsTW9uaXRvcjpmdW5jdGlvbihlLHQpe3QoKX0sX3VwZGF0ZVJvb3RDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gRi5zY3JvbGxNb25pdG9yKHIsZnVuY3Rpb24oKXtPLmVucXVldWVFbGVtZW50SW50ZXJuYWwoZSx0LG4pLG8mJk8uZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWwoZSxvKX0pLGV9LF9yZW5kZXJOZXdSb290Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe2ModCl8fHAoIjM3IiksZy5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTt2YXIgbz1qKGUsITEpO1MuYmF0Y2hlZFVwZGF0ZXMoYSxvLHQsbixyKTt2YXIgcz1vLl9pbnN0YW5jZS5yb290SUQ7cmV0dXJuIFBbc109byxvfSxyZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbCE9ZSYmVC5oYXMoZSl8fHAoIjM4IiksRi5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoZSx0LG4scil9LF9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjpmdW5jdGlvbihlLHQsbixyKXtPLnZhbGlkYXRlQ2FsbGJhY2sociwiUmVhY3RET00ucmVuZGVyIiksaC5pc1ZhbGlkRWxlbWVudCh0KXx8cCgiMzkiLCJzdHJpbmciPT10eXBlb2YgdD8iIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdkaXYnLCBwYXNzIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIG9yIDxkaXYgLz4uIjoiZnVuY3Rpb24iPT10eXBlb2YgdD8iIEluc3RlYWQgb2YgcGFzc2luZyBhIGNsYXNzIGxpa2UgRm9vLCBwYXNzIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vKSBvciA8Rm9vIC8+LiI6bnVsbCE9dCYmdm9pZCAwIT09dC5wcm9wcz8iIFRoaXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRlbnQgY29waWVzIG9mIFJlYWN0LiI6IiIpO3ZhciBpLGE9aC5jcmVhdGVFbGVtZW50KEgse2NoaWxkOnR9KTtpZihlKXt2YXIgbD1ULmdldChlKTtpPWwuX3Byb2Nlc3NDaGlsZENvbnRleHQobC5fY29udGV4dCl9ZWxzZSBpPVI7dmFyIGM9XyhuKTtpZihjKXt2YXIgZD1jLl9jdXJyZW50RWxlbWVudCxmPWQucHJvcHMuY2hpbGQ7aWYoTChmLHQpKXt2YXIgbT1jLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpLGc9ciYmZnVuY3Rpb24oKXtyLmNhbGwobSl9O3JldHVybiBGLl91cGRhdGVSb290Q29tcG9uZW50KGMsYSxpLG4sZyksbX1GLnVubW91bnRDb21wb25lbnRBdE5vZGUobil9dmFyIGI9byhuKSxFPWImJiEhcyhiKSx5PXUobiksdj1FJiYhYyYmIXksQT1GLl9yZW5kZXJOZXdSb290Q29tcG9uZW50KGEsbix2LGkpLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO3JldHVybiByJiZyLmNhbGwoQSksQX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRi5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCxlLHQsbil9LHVubW91bnRDb21wb25lbnRBdE5vZGU6ZnVuY3Rpb24oZSl7YyhlKXx8cCgiNDAiKTt2YXIgdD1fKGUpO2lmKCF0KXt1KGUpLDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZSh3KTtyZXR1cm4hMX1yZXR1cm4gZGVsZXRlIFBbdC5faW5zdGFuY2Uucm9vdElEXSxTLmJhdGNoZWRVcGRhdGVzKGwsdCxlLCExKSwhMH0sX21vdW50SW1hZ2VJbnRvTm9kZTpmdW5jdGlvbihlLHQsbixzLGkpe2lmKGModCl8fHAoIjQxIikscyl7dmFyIGE9byh0KTtpZihBLmNhblJldXNlTWFya3VwKGUsYSkpcmV0dXJuIHZvaWQgYi5wcmVjYWNoZU5vZGUobixhKTt2YXIgbD1hLmdldEF0dHJpYnV0ZShBLkNIRUNLU1VNX0FUVFJfTkFNRSk7YS5yZW1vdmVBdHRyaWJ1dGUoQS5DSEVDS1NVTV9BVFRSX05BTUUpO3ZhciB1PWEub3V0ZXJIVE1MO2Euc2V0QXR0cmlidXRlKEEuQ0hFQ0tTVU1fQVRUUl9OQU1FLGwpO3ZhciBkPWUsXz1yKGQsdSksbT0iIChjbGllbnQpICIrZC5zdWJzdHJpbmcoXy0yMCxfKzIwKSsiXG4gKHNlcnZlcikgIit1LnN1YnN0cmluZyhfLTIwLF8rMjApO3Qubm9kZVR5cGU9PT1rJiZwKCI0MiIsbSl9aWYodC5ub2RlVHlwZT09PWsmJnAoIjQzIiksaS51c2VDcmVhdGVFbGVtZW50KXtmb3IoO3QubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKTtmLmluc2VydFRyZWVCZWZvcmUodCxlLG51bGwpfWVsc2UgeCh0LGUpLGIucHJlY2FjaGVOb2RlKG4sdC5maXJzdENoaWxkKX19O2UuZXhwb3J0cz1GfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE11bHRpQ2hpbGQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJue3R5cGU6IklOU0VSVF9NQVJLVVAiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVsbCxmcm9tTm9kZTpudWxsLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJue3R5cGU6Ik1PVkVfRVhJU1RJTkciLGNvbnRlbnQ6bnVsbCxmcm9tSW5kZXg6ZS5fbW91bnRJbmRleCxmcm9tTm9kZTpfLmdldEhvc3ROb2RlKGUpLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gcyhlLHQpe3JldHVybnt0eXBlOiJSRU1PVkVfTk9ERSIsY29udGVudDpudWxsLGZyb21JbmRleDplLl9tb3VudEluZGV4LGZyb21Ob2RlOnQsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBpKGUpe3JldHVybnt0eXBlOiJTRVRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51bGwsZnJvbU5vZGU6bnVsbCx0b0luZGV4Om51bGwsYWZ0ZXJOb2RlOm51bGx9fWZ1bmN0aW9uIGEoZSl7cmV0dXJue3R5cGU6IlRFWFRfQ09OVEVOVCIsY29udGVudDplLGZyb21JbmRleDpudWxsLGZyb21Ob2RlOm51bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHQmJihlPWV8fFtdLGUucHVzaCh0KSksZX1mdW5jdGlvbiB1KGUsdCl7ZC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzKGUsdCl9dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyIpLF89KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0YW5jZU1hcC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0cnVtZW50YXRpb24uanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlci5qcyIpKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RDaGlsZFJlY29uY2lsZXIuanMiKSxmPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9mbGF0dGVuQ2hpbGRyZW4uanMiKSksbT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIikse01peGluOntfcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwLmluc3RhbnRpYXRlQ2hpbGRyZW4oZSx0LG4pfSxfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIsbyxzKXt2YXIgaSxhPTA7cmV0dXJuIGk9Zih0LGEpLHAudXBkYXRlQ2hpbGRyZW4oZSxpLG4scixvLHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8scyxhKSxpfSxtb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbihlLHQsbik7dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1yO3ZhciBvPVtdLHM9MDtmb3IodmFyIGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpKXt2YXIgYT1yW2ldLGw9MCx1PV8ubW91bnRDb21wb25lbnQoYSx0LHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8sbixsKTthLl9tb3VudEluZGV4PXMrKyxvLnB1c2godSl9cmV0dXJuIG99LHVwZGF0ZVRleHRDb250ZW50OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47cC51bm1vdW50Q2hpbGRyZW4odCwhMSk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7dSh0aGlzLFthKGUpXSl9LHVwZGF0ZU1hcmt1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO3AudW5tb3VudENoaWxkcmVuKHQsITEpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmMoIjExOCIpO3UodGhpcyxbaShlKV0pfSx1cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dGhpcy5fdXBkYXRlQ2hpbGRyZW4oZSx0LG4pfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4sbz17fSxzPVtdLGk9dGhpcy5fcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuKHIsZSxzLG8sdCxuKTtpZihpfHxyKXt2YXIgYSxjPW51bGwsZD0wLHA9MCxmPTAsbT1udWxsO2ZvcihhIGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGg9ciYmclthXSxnPWlbYV07aD09PWc/KGM9bChjLHRoaXMubW92ZUNoaWxkKGgsbSxkLHApKSxwPU1hdGgubWF4KGguX21vdW50SW5kZXgscCksaC5fbW91bnRJbmRleD1kKTooaCYmKHA9TWF0aC5tYXgoaC5fbW91bnRJbmRleCxwKSksYz1sKGMsdGhpcy5fbW91bnRDaGlsZEF0SW5kZXgoZyxzW2ZdLG0sZCx0LG4pKSxmKyspLGQrKyxtPV8uZ2V0SG9zdE5vZGUoZyl9Zm9yKGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYoYz1sKGMsdGhpcy5fdW5tb3VudENoaWxkKHJbYV0sb1thXSkpKTtjJiZ1KHRoaXMsYyksdGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1pfX0sdW5tb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47cC51bm1vdW50Q2hpbGRyZW4odCxlKSx0aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGx9LG1vdmVDaGlsZDpmdW5jdGlvbihlLHQsbixyKXtpZihlLl9tb3VudEluZGV4PHIpcmV0dXJuIG8oZSx0LG4pfSxjcmVhdGVDaGlsZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIobix0LGUuX21vdW50SW5kZXgpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9LF9tb3VudENoaWxkQXRJbmRleDpmdW5jdGlvbihlLHQsbixyLG8scyl7cmV0dXJuIGUuX21vdW50SW5kZXg9cix0aGlzLmNyZWF0ZUNoaWxkKGUsbix0KX0sX3VubW91bnRDaGlsZDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVtb3ZlQ2hpbGQoZSx0KTtyZXR1cm4gZS5fbW91bnRJbmRleD1udWxsLG59fX0pO2UuZXhwb3J0cz1tfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE5vZGVUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIikscz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIikse0hPU1Q6MCxDT01QT1NJVEU6MSxFTVBUWToyLGdldFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHwhMT09PWU/cy5FTVBUWTpvLmlzVmFsaWRFbGVtZW50KGUpPyJmdW5jdGlvbiI9PXR5cGVvZiBlLnR5cGU/cy5DT01QT1NJVEU6cy5IT1NUOnZvaWQgcigiMjYiLGUpfX0pO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE93bmVyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuYXR0YWNoUmVmfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5kZXRhY2hSZWYpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIikscz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIikse2FkZENvbXBvbmVudEFzUmVmVG86ZnVuY3Rpb24oZSx0LG4pe3Iobil8fG8oIjExOSIpLG4uYXR0YWNoUmVmKHQsZSl9LHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTpmdW5jdGlvbihlLHQsbil7cihuKXx8bygiMTIwIik7dmFyIHM9bi5nZXRQdWJsaWNJbnN0YW5jZSgpO3MmJnMucmVmc1t0XT09PWUuZ2V0UHVibGljSW5zdGFuY2UoKSYmbi5kZXRhY2hSZWYodCl9fSk7ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpLHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXA9ITEsdGhpcy5yZWFjdE1vdW50UmVhZHk9cy5nZXRQb29sZWQobnVsbCksdGhpcy51c2VDcmVhdGVFbGVtZW50PWV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9DYWxsYmFja1F1ZXVlLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiksdT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvVHJhbnNhY3Rpb24uanMiKSksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlUXVldWUuanMiKSxkPXtpbml0aWFsaXplOmwuZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24sY2xvc2U6bC5yZXN0b3JlU2VsZWN0aW9ufSxfPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9YS5pc0VuYWJsZWQoKTtyZXR1cm4gYS5zZXRFbmFibGVkKCExKSxlfSxjbG9zZTpmdW5jdGlvbihlKXthLnNldEVuYWJsZWQoZSl9fSxwPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKX19LGY9W2QsXyxwXSxtPXtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LGdldFJlYWN0TW91bnRSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeX0sZ2V0VXBkYXRlUXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sY2hlY2twb2ludDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCl9LHJvbGxiYWNrOmZ1bmN0aW9uKGUpe3RoaXMucmVhY3RNb3VudFJlYWR5LnJvbGxiYWNrKGUpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7cy5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KSx0aGlzLnJlYWN0TW91bnRSZWFkeT1udWxsfX07byhyLnByb3RvdHlwZSx1LG0pLGkuYWRkUG9vbGluZ1RvKHIpLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe28uYXR0YWNoUmVmcyh0aGlzLHRoaXMuX2N1cnJlbnRFbGVtZW50KX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0UmVmLmpzIikscz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4sbyxzLGkpe3ZhciBhPWUubW91bnRDb21wb25lbnQodCxuLG8scyxpKTtyZXR1cm4gZS5fY3VycmVudEVsZW1lbnQmJm51bGwhPWUuX2N1cnJlbnRFbGVtZW50LnJlZiYmdC5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHIsZSksYX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG9zdE5vZGUoKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQpe28uZGV0YWNoUmVmcyhlLGUuX2N1cnJlbnRFbGVtZW50KSxlLnVubW91bnRDb21wb25lbnQodCl9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGk9ZS5fY3VycmVudEVsZW1lbnQ7aWYodCE9PWl8fHMhPT1lLl9jb250ZXh0KXt2YXIgYT1vLnNob3VsZFVwZGF0ZVJlZnMoaSx0KTthJiZvLmRldGFjaFJlZnMoZSxpKSxlLnJlY2VpdmVDb21wb25lbnQodCxuLHMpLGEmJmUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1lLl9jdXJyZW50RWxlbWVudC5yZWYmJm4uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUpfX0scGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUsdCxuKXtlLl91cGRhdGVCYXRjaE51bWJlcj09PW4mJmUucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHQpfX0pO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFJlZi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQuZ2V0UHVibGljSW5zdGFuY2UoKSk6cy5hZGRDb21wb25lbnRBc1JlZlRvKHQsZSxuKX1mdW5jdGlvbiBvKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZT9lKG51bGwpOnMucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHQsZSxuKX12YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0T3duZXIuanMiKSxpPXt9O2kuYXR0YWNoUmVmcz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBuPXQucmVmO251bGwhPW4mJnIobixlLHQuX293bmVyKX19LGkuc2hvdWxkVXBkYXRlUmVmcz1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1udWxsO251bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUucmVmLHI9ZS5fb3duZXIpO3ZhciBvPW51bGwscz1udWxsO3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYobz10LnJlZixzPXQuX293bmVyKSxuIT09b3x8InN0cmluZyI9PXR5cGVvZiBvJiZzIT09cn0saS5kZXRhY2hSZWZzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49dC5yZWY7bnVsbCE9biYmbyhuLGUsdC5fb3duZXIpfX0sZS5leHBvcnRzPWl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cD1lLHRoaXMudXNlQ3JlYXRlRWxlbWVudD0hMSx0aGlzLnVwZGF0ZVF1ZXVlPW5ldyBhKHRoaXMpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUG9vbGVkQ2xhc3MuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvVHJhbnNhY3Rpb24uanMiKSxhPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdHJ1bWVudGF0aW9uLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIikpLGw9W10sdT17ZW5xdWV1ZTpmdW5jdGlvbigpe319LGM9e2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZ2V0UmVhY3RNb3VudFJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlUXVldWV9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt9LGNoZWNrcG9pbnQ6ZnVuY3Rpb24oKXt9LHJvbGxiYWNrOmZ1bmN0aW9uKCl7fX07byhyLnByb3RvdHlwZSxpLGMpLHMuYWRkUG9vbGluZ1RvKHIpLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlUXVldWUuanMiKSxzPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLnRyYW5zYWN0aW9uPXR9cmV0dXJuIGUucHJvdG90eXBlLmlzTW91bnRlZD1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVDYWxsYmFjayhlLHQsbil9LGUucHJvdG90eXBlLmVucXVldWVGb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVGb3JjZVVwZGF0ZShlKX0sZS5wcm90b3R5cGUuZW5xdWV1ZVJlcGxhY2VTdGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLHQpfSxlLnByb3RvdHlwZS5lbnF1ZXVlU2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVTZXRTdGF0ZShlLHQpfSxlfSgpKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVRdWV1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2wuZW5xdWV1ZVVwZGF0ZShlKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXR5cGVvZiBlO2lmKCJvYmplY3QiIT09dClyZXR1cm4gdDt2YXIgbj1lLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWV8fHQscj1PYmplY3Qua2V5cyhlKTtyZXR1cm4gci5sZW5ndGg+MCYmci5sZW5ndGg8MjA/bisiIChrZXlzOiAiK3Iuam9pbigiLCAiKSsiKSI6bn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49YS5nZXQoZSk7aWYoIW4pe3JldHVybiBudWxsfXJldHVybiBufXZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RhbmNlTWFwLmpzIikpLGw9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0cnVtZW50YXRpb24uanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIpKSx1PShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIikse2lzTW91bnRlZDpmdW5jdGlvbihlKXt2YXIgdD1hLmdldChlKTtyZXR1cm4hIXQmJiEhdC5fcmVuZGVyZWRDb21wb25lbnR9LGVucXVldWVDYWxsYmFjazpmdW5jdGlvbihlLHQsbil7dS52YWxpZGF0ZUNhbGxiYWNrKHQsbik7dmFyIG89cyhlKTtpZighbylyZXR1cm4gbnVsbDtvLl9wZW5kaW5nQ2FsbGJhY2tzP28uX3BlbmRpbmdDYWxsYmFja3MucHVzaCh0KTpvLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKG8pfSxlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDpmdW5jdGlvbihlLHQpe2UuX3BlbmRpbmdDYWxsYmFja3M/ZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKHQpOmUuX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIoZSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1zKGUsImZvcmNlVXBkYXRlIik7dCYmKHQuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMCxyKHQpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIG89cyhlLCJyZXBsYWNlU3RhdGUiKTtvJiYoby5fcGVuZGluZ1N0YXRlUXVldWU9W3RdLG8uX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITAsdm9pZCAwIT09biYmbnVsbCE9PW4mJih1LnZhbGlkYXRlQ2FsbGJhY2sobiwicmVwbGFjZVN0YXRlIiksby5fcGVuZGluZ0NhbGxiYWNrcz9vLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2gobik6by5fcGVuZGluZ0NhbGxiYWNrcz1bbl0pLHIobykpfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKGUsInNldFN0YXRlIik7aWYobil7KG4uX3BlbmRpbmdTdGF0ZVF1ZXVlfHwobi5fcGVuZGluZ1N0YXRlUXVldWU9W10pKS5wdXNoKHQpLHIobil9fSxlbnF1ZXVlRWxlbWVudEludGVybmFsOmZ1bmN0aW9uKGUsdCxuKXtlLl9wZW5kaW5nRWxlbWVudD10LGUuX2NvbnRleHQ9bixyKGUpfSx2YWxpZGF0ZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJmkoIjEyMiIsdCxvKGUpKX19KTtlLmV4cG9ydHM9dX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtqLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24mJlR8fGMoIjEyMyIpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVsbCx0aGlzLmNhbGxiYWNrUXVldWU9Xy5nZXRQb29sZWQoKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uPWouUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoITApfWZ1bmN0aW9uIHMoZSx0LG4sbyxzLGkpe3JldHVybiByKCksVC5iYXRjaGVkVXBkYXRlcyhlLHQsbixvLHMsaSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlLl9tb3VudE9yZGVyLXQuX21vdW50T3JkZXJ9ZnVuY3Rpb24gYShlKXt2YXIgdD1lLmRpcnR5Q29tcG9uZW50c0xlbmd0aDt0IT09Yi5sZW5ndGgmJmMoIjEyNCIsdCxiLmxlbmd0aCksYi5zb3J0KGkpLEUrKztmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgcj1iW25dLG89ci5fcGVuZGluZ0NhbGxiYWNrcztyLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGw7dmFyIHM7aWYoZi5sb2dUb3BMZXZlbFJlbmRlcnMpe3ZhciBhPXI7ci5fY3VycmVudEVsZW1lbnQudHlwZS5pc1JlYWN0VG9wTGV2ZWxXcmFwcGVyJiYoYT1yLl9yZW5kZXJlZENvbXBvbmVudCkscz0iUmVhY3QgdXBkYXRlOiAiK2EuZ2V0TmFtZSgpLGNvbnNvbGUudGltZShzKX1pZihtLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShyLGUucmVjb25jaWxlVHJhbnNhY3Rpb24sRSkscyYmY29uc29sZS50aW1lRW5kKHMpLG8pZm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspZS5jYWxsYmFja1F1ZXVlLmVucXVldWUob1tsXSxyLmdldFB1YmxpY0luc3RhbmNlKCkpfX1mdW5jdGlvbiBsKGUpe2lmKHIoKSwhVC5pc0JhdGNoaW5nVXBkYXRlcylyZXR1cm4gdm9pZCBULmJhdGNoZWRVcGRhdGVzKGwsZSk7Yi5wdXNoKGUpLG51bGw9PWUuX3VwZGF0ZUJhdGNoTnVtYmVyJiYoZS5fdXBkYXRlQmF0Y2hOdW1iZXI9RSsxKX1mdW5jdGlvbiB1KGUsdCl7ZyhULmlzQmF0Y2hpbmdVcGRhdGVzLCJSZWFjdFVwZGF0ZXMuYXNhcDogQ2FuJ3QgZW5xdWV1ZSBhbiBhc2FwIGNhbGxiYWNrIGluIGEgY29udGV4dCB3aGVyZXVwZGF0ZXMgYXJlIG5vdCBiZWluZyBiYXRjaGVkLiIpLHkuZW5xdWV1ZShlLHQpLHY9ITB9dmFyIGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQ2FsbGJhY2tRdWV1ZS5qcyIpLHA9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9Qb29sZWRDbGFzcy5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEZlYXR1cmVGbGFncy5qcyIpLG09bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZXIuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvVHJhbnNhY3Rpb24uanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLGI9W10sRT0wLHk9Xy5nZXRQb29sZWQoKSx2PSExLFQ9bnVsbCxBPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9Yi5sZW5ndGh9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGghPT1iLmxlbmd0aD8oYi5zcGxpY2UoMCx0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCksUygpKTpiLmxlbmd0aD0wfX0sQz17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tRdWV1ZS5yZXNldCgpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tRdWV1ZS5ub3RpZnlBbGwoKX19LE89W0EsQ107ZChvLnByb3RvdHlwZSxoLHtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIE99LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1udWxsLF8ucmVsZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpLHRoaXMuY2FsbGJhY2tRdWV1ZT1udWxsLGouUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24pLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb249bnVsbH0scGVyZm9ybTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgucGVyZm9ybS5jYWxsKHRoaXMsdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24sZSx0LG4pfX0pLHAuYWRkUG9vbGluZ1RvKG8pO3ZhciBTPWZ1bmN0aW9uKCl7Zm9yKDtiLmxlbmd0aHx8djspe2lmKGIubGVuZ3RoKXt2YXIgZT1vLmdldFBvb2xlZCgpO2UucGVyZm9ybShhLG51bGwsZSksby5yZWxlYXNlKGUpfWlmKHYpe3Y9ITE7dmFyIHQ9eTt5PV8uZ2V0UG9vbGVkKCksdC5ub3RpZnlBbGwoKSxfLnJlbGVhc2UodCl9fX0sUj17aW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246ZnVuY3Rpb24oZSl7ZXx8YygiMTI2Iiksai5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uPWV9LGluamVjdEJhdGNoaW5nU3RyYXRlZ3k6ZnVuY3Rpb24oZSl7ZXx8YygiMTI3IiksImZ1bmN0aW9uIiE9dHlwZW9mIGUuYmF0Y2hlZFVwZGF0ZXMmJmMoIjEyOCIpLCJib29sZWFuIiE9dHlwZW9mIGUuaXNCYXRjaGluZ1VwZGF0ZXMmJmMoIjEyOSIpLFQ9ZX19LGo9e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246bnVsbCxiYXRjaGVkVXBkYXRlczpzLGVucXVldWVVcGRhdGU6bCxmbHVzaEJhdGNoZWRVcGRhdGVzOlMsaW5qZWN0aW9uOlIsYXNhcDp1fTtlLmV4cG9ydHM9an0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RWZXJzaW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iMTUuNi4yIn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU1ZHRE9NUHJvcGVydHlDb25maWcuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3hsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LG89e2FjY2VudEhlaWdodDoiYWNjZW50LWhlaWdodCIsYWNjdW11bGF0ZTowLGFkZGl0aXZlOjAsYWxpZ25tZW50QmFzZWxpbmU6ImFsaWdubWVudC1iYXNlbGluZSIsYWxsb3dSZW9yZGVyOiJhbGxvd1Jlb3JkZXIiLGFscGhhYmV0aWM6MCxhbXBsaXR1ZGU6MCxhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIsYXNjZW50OjAsYXR0cmlidXRlTmFtZToiYXR0cmlidXRlTmFtZSIsYXR0cmlidXRlVHlwZToiYXR0cmlidXRlVHlwZSIsYXV0b1JldmVyc2U6ImF1dG9SZXZlcnNlIixhemltdXRoOjAsYmFzZUZyZXF1ZW5jeToiYmFzZUZyZXF1ZW5jeSIsYmFzZVByb2ZpbGU6ImJhc2VQcm9maWxlIixiYXNlbGluZVNoaWZ0OiJiYXNlbGluZS1zaGlmdCIsYmJveDowLGJlZ2luOjAsYmlhczowLGJ5OjAsY2FsY01vZGU6ImNhbGNNb2RlIixjYXBIZWlnaHQ6ImNhcC1oZWlnaHQiLGNsaXA6MCxjbGlwUGF0aDoiY2xpcC1wYXRoIixjbGlwUnVsZToiY2xpcC1ydWxlIixjbGlwUGF0aFVuaXRzOiJjbGlwUGF0aFVuaXRzIixjb2xvckludGVycG9sYXRpb246ImNvbG9yLWludGVycG9sYXRpb24iLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsY29sb3JQcm9maWxlOiJjb2xvci1wcm9maWxlIixjb2xvclJlbmRlcmluZzoiY29sb3ItcmVuZGVyaW5nIixjb250ZW50U2NyaXB0VHlwZToiY29udGVudFNjcmlwdFR5cGUiLGNvbnRlbnRTdHlsZVR5cGU6ImNvbnRlbnRTdHlsZVR5cGUiLGN1cnNvcjowLGN4OjAsY3k6MCxkOjAsZGVjZWxlcmF0ZTowLGRlc2NlbnQ6MCxkaWZmdXNlQ29uc3RhbnQ6ImRpZmZ1c2VDb25zdGFudCIsZGlyZWN0aW9uOjAsZGlzcGxheTowLGRpdmlzb3I6MCxkb21pbmFudEJhc2VsaW5lOiJkb21pbmFudC1iYXNlbGluZSIsZHVyOjAsZHg6MCxkeTowLGVkZ2VNb2RlOiJlZGdlTW9kZSIsZWxldmF0aW9uOjAsZW5hYmxlQmFja2dyb3VuZDoiZW5hYmxlLWJhY2tncm91bmQiLGVuZDowLGV4cG9uZW50OjAsZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDoiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsZmlsbDowLGZpbGxPcGFjaXR5OiJmaWxsLW9wYWNpdHkiLGZpbGxSdWxlOiJmaWxsLXJ1bGUiLGZpbHRlcjowLGZpbHRlclJlczoiZmlsdGVyUmVzIixmaWx0ZXJVbml0czoiZmlsdGVyVW5pdHMiLGZsb29kQ29sb3I6ImZsb29kLWNvbG9yIixmbG9vZE9wYWNpdHk6ImZsb29kLW9wYWNpdHkiLGZvY3VzYWJsZTowLGZvbnRGYW1pbHk6ImZvbnQtZmFtaWx5Iixmb250U2l6ZToiZm9udC1zaXplIixmb250U2l6ZUFkanVzdDoiZm9udC1zaXplLWFkanVzdCIsZm9udFN0cmV0Y2g6ImZvbnQtc3RyZXRjaCIsZm9udFN0eWxlOiJmb250LXN0eWxlIixmb250VmFyaWFudDoiZm9udC12YXJpYW50Iixmb250V2VpZ2h0OiJmb250LXdlaWdodCIsZm9ybWF0OjAsZnJvbTowLGZ4OjAsZnk6MCxnMTowLGcyOjAsZ2x5cGhOYW1lOiJnbHlwaC1uYW1lIixnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsZ2x5cGhSZWY6ImdseXBoUmVmIixncmFkaWVudFRyYW5zZm9ybToiZ3JhZGllbnRUcmFuc2Zvcm0iLGdyYWRpZW50VW5pdHM6ImdyYWRpZW50VW5pdHMiLGhhbmdpbmc6MCxob3JpekFkdlg6Imhvcml6LWFkdi14Iixob3Jpek9yaWdpblg6Imhvcml6LW9yaWdpbi14IixpZGVvZ3JhcGhpYzowLGltYWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGluOjAsaW4yOjAsaW50ZXJjZXB0OjAsazowLGsxOjAsazI6MCxrMzowLGs0OjAsa2VybmVsTWF0cml4OiJrZXJuZWxNYXRyaXgiLGtlcm5lbFVuaXRMZW5ndGg6Imtlcm5lbFVuaXRMZW5ndGgiLGtlcm5pbmc6MCxrZXlQb2ludHM6ImtleVBvaW50cyIsa2V5U3BsaW5lczoia2V5U3BsaW5lcyIsa2V5VGltZXM6ImtleVRpbWVzIixsZW5ndGhBZGp1c3Q6Imxlbmd0aEFkanVzdCIsbGV0dGVyU3BhY2luZzoibGV0dGVyLXNwYWNpbmciLGxpZ2h0aW5nQ29sb3I6ImxpZ2h0aW5nLWNvbG9yIixsaW1pdGluZ0NvbmVBbmdsZToibGltaXRpbmdDb25lQW5nbGUiLGxvY2FsOjAsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG1hcmtlckhlaWdodDoibWFya2VySGVpZ2h0IixtYXJrZXJVbml0czoibWFya2VyVW5pdHMiLG1hcmtlcldpZHRoOiJtYXJrZXJXaWR0aCIsbWFzazowLG1hc2tDb250ZW50VW5pdHM6Im1hc2tDb250ZW50VW5pdHMiLG1hc2tVbml0czoibWFza1VuaXRzIixtYXRoZW1hdGljYWw6MCxtb2RlOjAsbnVtT2N0YXZlczoibnVtT2N0YXZlcyIsb2Zmc2V0OjAsb3BhY2l0eTowLG9wZXJhdG9yOjAsb3JkZXI6MCxvcmllbnQ6MCxvcmllbnRhdGlvbjowLG9yaWdpbjowLG92ZXJmbG93OjAsb3ZlcmxpbmVQb3NpdGlvbjoib3ZlcmxpbmUtcG9zaXRpb24iLG92ZXJsaW5lVGhpY2tuZXNzOiJvdmVybGluZS10aGlja25lc3MiLHBhaW50T3JkZXI6InBhaW50LW9yZGVyIixwYW5vc2UxOiJwYW5vc2UtMSIscGF0aExlbmd0aDoicGF0aExlbmd0aCIscGF0dGVybkNvbnRlbnRVbml0czoicGF0dGVybkNvbnRlbnRVbml0cyIscGF0dGVyblRyYW5zZm9ybToicGF0dGVyblRyYW5zZm9ybSIscGF0dGVyblVuaXRzOiJwYXR0ZXJuVW5pdHMiLHBvaW50ZXJFdmVudHM6InBvaW50ZXItZXZlbnRzIixwb2ludHM6MCxwb2ludHNBdFg6InBvaW50c0F0WCIscG9pbnRzQXRZOiJwb2ludHNBdFkiLHBvaW50c0F0WjoicG9pbnRzQXRaIixwcmVzZXJ2ZUFscGhhOiJwcmVzZXJ2ZUFscGhhIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJwcmVzZXJ2ZUFzcGVjdFJhdGlvIixwcmltaXRpdmVVbml0czoicHJpbWl0aXZlVW5pdHMiLHI6MCxyYWRpdXM6MCxyZWZYOiJyZWZYIixyZWZZOiJyZWZZIixyZW5kZXJpbmdJbnRlbnQ6InJlbmRlcmluZy1pbnRlbnQiLHJlcGVhdENvdW50OiJyZXBlYXRDb3VudCIscmVwZWF0RHVyOiJyZXBlYXREdXIiLHJlcXVpcmVkRXh0ZW5zaW9uczoicmVxdWlyZWRFeHRlbnNpb25zIixyZXF1aXJlZEZlYXR1cmVzOiJyZXF1aXJlZEZlYXR1cmVzIixyZXN0YXJ0OjAscmVzdWx0OjAscm90YXRlOjAscng6MCxyeTowLHNjYWxlOjAsc2VlZDowLHNoYXBlUmVuZGVyaW5nOiJzaGFwZS1yZW5kZXJpbmciLHNsb3BlOjAsc3BhY2luZzowLHNwZWN1bGFyQ29uc3RhbnQ6InNwZWN1bGFyQ29uc3RhbnQiLHNwZWN1bGFyRXhwb25lbnQ6InNwZWN1bGFyRXhwb25lbnQiLHNwZWVkOjAsc3ByZWFkTWV0aG9kOiJzcHJlYWRNZXRob2QiLHN0YXJ0T2Zmc2V0OiJzdGFydE9mZnNldCIsc3RkRGV2aWF0aW9uOiJzdGREZXZpYXRpb24iLHN0ZW1oOjAsc3RlbXY6MCxzdGl0Y2hUaWxlczoic3RpdGNoVGlsZXMiLHN0b3BDb2xvcjoic3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0b3Atb3BhY2l0eSIsc3RyaWtldGhyb3VnaFBvc2l0aW9uOiJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIixzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsc3RyaW5nOjAsc3Ryb2tlOjAsc3Ryb2tlRGFzaGFycmF5OiJzdHJva2UtZGFzaGFycmF5IixzdHJva2VEYXNob2Zmc2V0OiJzdHJva2UtZGFzaG9mZnNldCIsc3Ryb2tlTGluZWNhcDoic3Ryb2tlLWxpbmVjYXAiLHN0cm9rZUxpbmVqb2luOiJzdHJva2UtbGluZWpvaW4iLHN0cm9rZU1pdGVybGltaXQ6InN0cm9rZS1taXRlcmxpbWl0IixzdHJva2VPcGFjaXR5OiJzdHJva2Utb3BhY2l0eSIsc3Ryb2tlV2lkdGg6InN0cm9rZS13aWR0aCIsc3VyZmFjZVNjYWxlOiJzdXJmYWNlU2NhbGUiLHN5c3RlbUxhbmd1YWdlOiJzeXN0ZW1MYW5ndWFnZSIsdGFibGVWYWx1ZXM6InRhYmxlVmFsdWVzIix0YXJnZXRYOiJ0YXJnZXRYIix0YXJnZXRZOiJ0YXJnZXRZIix0ZXh0QW5jaG9yOiJ0ZXh0LWFuY2hvciIsdGV4dERlY29yYXRpb246InRleHQtZGVjb3JhdGlvbiIsdGV4dFJlbmRlcmluZzoidGV4dC1yZW5kZXJpbmciLHRleHRMZW5ndGg6InRleHRMZW5ndGgiLHRvOjAsdHJhbnNmb3JtOjAsdTE6MCx1MjowLHVuZGVybGluZVBvc2l0aW9uOiJ1bmRlcmxpbmUtcG9zaXRpb24iLHVuZGVybGluZVRoaWNrbmVzczoidW5kZXJsaW5lLXRoaWNrbmVzcyIsdW5pY29kZTowLHVuaWNvZGVCaWRpOiJ1bmljb2RlLWJpZGkiLHVuaWNvZGVSYW5nZToidW5pY29kZS1yYW5nZSIsdW5pdHNQZXJFbToidW5pdHMtcGVyLWVtIix2QWxwaGFiZXRpYzoidi1hbHBoYWJldGljIix2SGFuZ2luZzoidi1oYW5naW5nIix2SWRlb2dyYXBoaWM6InYtaWRlb2dyYXBoaWMiLHZNYXRoZW1hdGljYWw6InYtbWF0aGVtYXRpY2FsIix2YWx1ZXM6MCx2ZWN0b3JFZmZlY3Q6InZlY3Rvci1lZmZlY3QiLHZlcnNpb246MCx2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix2aWV3Qm94OiJ2aWV3Qm94Iix2aWV3VGFyZ2V0OiJ2aWV3VGFyZ2V0Iix2aXNpYmlsaXR5OjAsd2lkdGhzOjAsd29yZFNwYWNpbmc6IndvcmQtc3BhY2luZyIsd3JpdGluZ01vZGU6IndyaXRpbmctbW9kZSIseDowLHhIZWlnaHQ6IngtaGVpZ2h0Iix4MTowLHgyOjAseENoYW5uZWxTZWxlY3RvcjoieENoYW5uZWxTZWxlY3RvciIseGxpbmtBY3R1YXRlOiJ4bGluazphY3R1YXRlIix4bGlua0FyY3JvbGU6InhsaW5rOmFyY3JvbGUiLHhsaW5rSHJlZjoieGxpbms6aHJlZiIseGxpbmtSb2xlOiJ4bGluazpyb2xlIix4bGlua1Nob3c6InhsaW5rOnNob3ciLHhsaW5rVGl0bGU6InhsaW5rOnRpdGxlIix4bGlua1R5cGU6InhsaW5rOnR5cGUiLHhtbEJhc2U6InhtbDpiYXNlIix4bWxuczowLHhtbG5zWGxpbms6InhtbG5zOnhsaW5rIix4bWxMYW5nOiJ4bWw6bGFuZyIseG1sU3BhY2U6InhtbDpzcGFjZSIseTowLHkxOjAseTI6MCx5Q2hhbm5lbFNlbGVjdG9yOiJ5Q2hhbm5lbFNlbGVjdG9yIix6OjAsem9vbUFuZFBhbjoiem9vbUFuZFBhbiJ9LHM9e1Byb3BlcnRpZXM6e30sRE9NQXR0cmlidXRlTmFtZXNwYWNlczp7eGxpbmtBY3R1YXRlOnIueGxpbmsseGxpbmtBcmNyb2xlOnIueGxpbmsseGxpbmtIcmVmOnIueGxpbmsseGxpbmtSb2xlOnIueGxpbmsseGxpbmtTaG93OnIueGxpbmsseGxpbmtUaXRsZTpyLnhsaW5rLHhsaW5rVHlwZTpyLnhsaW5rLHhtbEJhc2U6ci54bWwseG1sTGFuZzpyLnhtbCx4bWxTcGFjZTpyLnhtbH0sRE9NQXR0cmlidXRlTmFtZXM6e319O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7cy5Qcm9wZXJ0aWVzW2VdPTAsb1tlXSYmKHMuRE9NQXR0cmlidXRlTmFtZXNbZV09b1tlXSl9KSxlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU2VsZWN0RXZlbnRQbHVnaW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigic2VsZWN0aW9uU3RhcnQiaW4gZSYmbC5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSkpcmV0dXJue3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJue2FuY2hvck5vZGU6dC5hbmNob3JOb2RlLGFuY2hvck9mZnNldDp0LmFuY2hvck9mZnNldCxmb2N1c05vZGU6dC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6dC5mb2N1c09mZnNldH19aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt2YXIgbj1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtyZXR1cm57cGFyZW50RWxlbWVudDpuLnBhcmVudEVsZW1lbnQoKSx0ZXh0Om4udGV4dCx0b3A6bi5ib3VuZGluZ1RvcCxsZWZ0Om4uYm91bmRpbmdMZWZ0fX19ZnVuY3Rpb24gbyhlLHQpe2lmKGJ8fG51bGw9PW18fG0hPT1jKCkpcmV0dXJuIG51bGw7dmFyIG49cihtKTtpZighZ3x8IV8oZyxuKSl7Zz1uO3ZhciBvPXUuZ2V0UG9vbGVkKGYuc2VsZWN0LGgsZSx0KTtyZXR1cm4gby50eXBlPSJzZWxlY3QiLG8udGFyZ2V0PW0scy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKG8pLG99cmV0dXJuIG51bGx9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9FdmVudFByb3BhZ2F0b3JzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RJbnB1dFNlbGVjdGlvbi5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZ2V0QWN0aXZlRWxlbWVudC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc1RleHRJbnB1dEVsZW1lbnQuanMiKSxfPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3NoYWxsb3dFcXVhbC5qcyIpLHA9aS5jYW5Vc2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50TW9kZTw9MTEsZj17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29udGV4dE1lbnUiLCJ0b3BGb2N1cyIsInRvcEtleURvd24iLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biIsInRvcE1vdXNlVXAiLCJ0b3BTZWxlY3Rpb25DaGFuZ2UiXX19LG09bnVsbCxoPW51bGwsZz1udWxsLGI9ITEsRT0hMSx5PXtldmVudFR5cGVzOmYsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXtpZighRSlyZXR1cm4gbnVsbDt2YXIgcz10P2EuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0KTp3aW5kb3c7c3dpdGNoKGUpe2Nhc2UidG9wRm9jdXMiOihkKHMpfHwidHJ1ZSI9PT1zLmNvbnRlbnRFZGl0YWJsZSkmJihtPXMsaD10LGc9bnVsbCk7YnJlYWs7Y2FzZSJ0b3BCbHVyIjptPW51bGwsaD1udWxsLGc9bnVsbDticmVhaztjYXNlInRvcE1vdXNlRG93biI6Yj0hMDticmVhaztjYXNlInRvcENvbnRleHRNZW51IjpjYXNlInRvcE1vdXNlVXAiOnJldHVybiBiPSExLG8obixyKTtjYXNlInRvcFNlbGVjdGlvbkNoYW5nZSI6aWYocClicmVhaztjYXNlInRvcEtleURvd24iOmNhc2UidG9wS2V5VXAiOnJldHVybiBvKG4scil9cmV0dXJuIG51bGx9LGRpZFB1dExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXsib25TZWxlY3QiPT09dCYmKEU9ITApfX07ZS5leHBvcnRzPXl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1NpbXBsZUV2ZW50UGx1Z2luLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIi4iK2UuX3Jvb3ROb2RlSUR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FdmVudExpc3RlbmVyLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0V2ZW50UHJvcGFnYXRvcnMuanMiKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnRUcmVlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIiksXz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0ZvY3VzRXZlbnQuanMiKSxwPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljS2V5Ym9hcmRFdmVudC5qcyIpLGY9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIiksbT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0RyYWdFdmVudC5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUb3VjaEV2ZW50LmpzIiksZz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1RyYW5zaXRpb25FdmVudC5qcyIpLGI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzIiksRT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1doZWVsRXZlbnQuanMiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIpLFQ9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLHt9KSxBPXt9O1siYWJvcnQiLCJhbmltYXRpb25FbmQiLCJhbmltYXRpb25JdGVyYXRpb24iLCJhbmltYXRpb25TdGFydCIsImJsdXIiLCJjYW5QbGF5IiwiY2FuUGxheVRocm91Z2giLCJjbGljayIsImNvbnRleHRNZW51IiwiY29weSIsImN1dCIsImRvdWJsZUNsaWNrIiwiZHJhZyIsImRyYWdFbmQiLCJkcmFnRW50ZXIiLCJkcmFnRXhpdCIsImRyYWdMZWF2ZSIsImRyYWdPdmVyIiwiZHJhZ1N0YXJ0IiwiZHJvcCIsImR1cmF0aW9uQ2hhbmdlIiwiZW1wdGllZCIsImVuY3J5cHRlZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImlucHV0IiwiaW52YWxpZCIsImtleURvd24iLCJrZXlQcmVzcyIsImtleVVwIiwibG9hZCIsImxvYWRlZERhdGEiLCJsb2FkZWRNZXRhZGF0YSIsImxvYWRTdGFydCIsIm1vdXNlRG93biIsIm1vdXNlTW92ZSIsIm1vdXNlT3V0IiwibW91c2VPdmVyIiwibW91c2VVcCIsInBhc3RlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInByb2dyZXNzIiwicmF0ZUNoYW5nZSIsInJlc2V0Iiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZVVwZGF0ZSIsInRvdWNoQ2FuY2VsIiwidG91Y2hFbmQiLCJ0b3VjaE1vdmUiLCJ0b3VjaFN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInZvbHVtZUNoYW5nZSIsIndhaXRpbmciLCJ3aGVlbCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj0ib24iK3Qscj0idG9wIit0LG89e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOm4sY2FwdHVyZWQ6bisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbcl19O1RbZV09byxBW3JdPW99KTt2YXIgQz17fSxPPXtldmVudFR5cGVzOlQsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1BW2VdO2lmKCFvKXJldHVybiBudWxsO3ZhciBpO3N3aXRjaChlKXtjYXNlInRvcEFib3J0IjpjYXNlInRvcENhblBsYXkiOmNhc2UidG9wQ2FuUGxheVRocm91Z2giOmNhc2UidG9wRHVyYXRpb25DaGFuZ2UiOmNhc2UidG9wRW1wdGllZCI6Y2FzZSJ0b3BFbmNyeXB0ZWQiOmNhc2UidG9wRW5kZWQiOmNhc2UidG9wRXJyb3IiOmNhc2UidG9wSW5wdXQiOmNhc2UidG9wSW52YWxpZCI6Y2FzZSJ0b3BMb2FkIjpjYXNlInRvcExvYWRlZERhdGEiOmNhc2UidG9wTG9hZGVkTWV0YWRhdGEiOmNhc2UidG9wTG9hZFN0YXJ0IjpjYXNlInRvcFBhdXNlIjpjYXNlInRvcFBsYXkiOmNhc2UidG9wUGxheWluZyI6Y2FzZSJ0b3BQcm9ncmVzcyI6Y2FzZSJ0b3BSYXRlQ2hhbmdlIjpjYXNlInRvcFJlc2V0IjpjYXNlInRvcFNlZWtlZCI6Y2FzZSJ0b3BTZWVraW5nIjpjYXNlInRvcFN0YWxsZWQiOmNhc2UidG9wU3VibWl0IjpjYXNlInRvcFN1c3BlbmQiOmNhc2UidG9wVGltZVVwZGF0ZSI6Y2FzZSJ0b3BWb2x1bWVDaGFuZ2UiOmNhc2UidG9wV2FpdGluZyI6aT1kO2JyZWFrO2Nhc2UidG9wS2V5UHJlc3MiOmlmKDA9PT12KG4pKXJldHVybiBudWxsO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0b3BLZXlVcCI6aT1wO2JyZWFrO2Nhc2UidG9wQmx1ciI6Y2FzZSJ0b3BGb2N1cyI6aT1fO2JyZWFrO2Nhc2UidG9wQ2xpY2siOmlmKDI9PT1uLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlInRvcERvdWJsZUNsaWNrIjpjYXNlInRvcE1vdXNlRG93biI6Y2FzZSJ0b3BNb3VzZU1vdmUiOmNhc2UidG9wTW91c2VVcCI6Y2FzZSJ0b3BNb3VzZU91dCI6Y2FzZSJ0b3BNb3VzZU92ZXIiOmNhc2UidG9wQ29udGV4dE1lbnUiOmk9ZjticmVhaztjYXNlInRvcERyYWciOmNhc2UidG9wRHJhZ0VuZCI6Y2FzZSJ0b3BEcmFnRW50ZXIiOmNhc2UidG9wRHJhZ0V4aXQiOmNhc2UidG9wRHJhZ0xlYXZlIjpjYXNlInRvcERyYWdPdmVyIjpjYXNlInRvcERyYWdTdGFydCI6Y2FzZSJ0b3BEcm9wIjppPW07YnJlYWs7Y2FzZSJ0b3BUb3VjaENhbmNlbCI6Y2FzZSJ0b3BUb3VjaEVuZCI6Y2FzZSJ0b3BUb3VjaE1vdmUiOmNhc2UidG9wVG91Y2hTdGFydCI6aT1oO2JyZWFrO2Nhc2UidG9wQW5pbWF0aW9uRW5kIjpjYXNlInRvcEFuaW1hdGlvbkl0ZXJhdGlvbiI6Y2FzZSJ0b3BBbmltYXRpb25TdGFydCI6aT11O2JyZWFrO2Nhc2UidG9wVHJhbnNpdGlvbkVuZCI6aT1nO2JyZWFrO2Nhc2UidG9wU2Nyb2xsIjppPWI7YnJlYWs7Y2FzZSJ0b3BXaGVlbCI6aT1FO2JyZWFrO2Nhc2UidG9wQ29weSI6Y2FzZSJ0b3BDdXQiOmNhc2UidG9wUGFzdGUiOmk9Y31pfHxzKCI4NiIsZSk7dmFyIGw9aS5nZXRQb29sZWQobyx0LG4scik7cmV0dXJuIGEuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhsKSxsfSxkaWRQdXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsbil7aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIHM9cihlKSxhPWwuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKTtDW3NdfHwoQ1tzXT1pLmxpc3RlbihhLCJjbGljayIseSkpfX0sd2lsbERlbGV0ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIG49cihlKTtDW25dLnJlbW92ZSgpLGRlbGV0ZSBDW25dfX19O2UuZXhwb3J0cz1PfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNBbmltYXRpb25FdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIikscz17YW5pbWF0aW9uTmFtZTpudWxsLGVsYXBzZWRUaW1lOm51bGwscHNldWRvRWxlbWVudDpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLHMpLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIikscz17Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19O28uYXVnbWVudENsYXNzKHIscyksZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIpLHM9e2RhdGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixzKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljRHJhZ0V2ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljTW91c2VFdmVudC5qcyIpLHM9e2RhdGFUcmFuc2ZlcjpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLHMpLGUuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3RoaXMuZGlzcGF0Y2hDb25maWc9ZSx0aGlzLl90YXJnZXRJbnN0PXQsdGhpcy5uYXRpdmVFdmVudD1uO3ZhciBvPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe3ZhciBhPW9bc107YT90aGlzW3NdPWEobik6InRhcmdldCI9PT1zP3RoaXMudGFyZ2V0PXI6dGhpc1tzXT1uW3NdfXZhciBsPW51bGwhPW4uZGVmYXVsdFByZXZlbnRlZD9uLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1sP2kudGhhdFJldHVybnNUcnVlOmkudGhhdFJldHVybnNGYWxzZSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWkudGhhdFJldHVybnNGYWxzZSx0aGlzfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUG9vbGVkQ2xhc3MuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiKSxhPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksWyJkaXNwYXRjaENvbmZpZyIsIl90YXJnZXRJbnN0IiwibmF0aXZlRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsIl9kaXNwYXRjaExpc3RlbmVycyIsIl9kaXNwYXRjaEluc3RhbmNlcyJdKSxsPXt0eXBlOm51bGwsdGFyZ2V0Om51bGwsY3VycmVudFRhcmdldDppLnRoYXRSZXR1cm5zTnVsbCxldmVudFBoYXNlOm51bGwsYnViYmxlczpudWxsLGNhbmNlbGFibGU6bnVsbCx0aW1lU3RhbXA6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOm51bGwsaXNUcnVzdGVkOm51bGx9O28oci5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9dHlwZW9mIGUucmV0dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1pLnRoYXRSZXR1cm5zVHJ1ZSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6InVua25vd24iIT10eXBlb2YgZS5jYW5jZWxCdWJibGUmJihlLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1pLnRoYXRSZXR1cm5zVHJ1ZSl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt0aGlzLmlzUGVyc2lzdGVudD1pLnRoYXRSZXR1cm5zVHJ1ZX0saXNQZXJzaXN0ZW50OmkudGhhdFJldHVybnNGYWxzZSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciB0IGluIGUpdGhpc1t0XT1udWxsO2Zvcih2YXIgbj0wO248YS5sZW5ndGg7bisrKXRoaXNbYVtuXV09bnVsbH19KSxyLkludGVyZmFjZT1sLHIuYXVnbWVudENsYXNzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1uLnByb3RvdHlwZTt2YXIgaT1uZXcgcjtvKGksZS5wcm90b3R5cGUpLGUucHJvdG90eXBlPWksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLkludGVyZmFjZT1vKHt9LG4uSW50ZXJmYWNlLHQpLGUuYXVnbWVudENsYXNzPW4uYXVnbWVudENsYXNzLHMuYWRkUG9vbGluZ1RvKGUscy5mb3VyQXJndW1lbnRQb29sZXIpfSxzLmFkZFBvb2xpbmdUbyhyLHMuZm91ckFyZ3VtZW50UG9vbGVyKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljRm9jdXNFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1VJRXZlbnQuanMiKSxzPXtyZWxhdGVkVGFyZ2V0Om51bGx9O28uYXVnbWVudENsYXNzKHIscyksZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0lucHV0RXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIpLHM9e2RhdGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixzKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljS2V5Ym9hcmRFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1VJRXZlbnQuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudEtleS5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanMiKSxsPXtrZXk6aSxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmllclN0YXRlOmEsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9zKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP3MoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfX07by5hdWdtZW50Q2xhc3MocixsKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljTW91c2VFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1VJRXZlbnQuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvVmlld3BvcnRNZXRyaWNzLmpzIiksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50TW9kaWZpZXJTdGF0ZS5qcyIpLGE9e3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTppLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4id2hpY2giaW4gZT90OjI9PT10PzI6ND09PXQ/MTowfSxidXR0b25zOm51bGwscmVsYXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0scGFnZVg6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VYImluIGU/ZS5wYWdlWDplLmNsaWVudFgrcy5jdXJyZW50U2Nyb2xsTGVmdH0scGFnZVk6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VZImluIGU/ZS5wYWdlWTplLmNsaWVudFkrcy5jdXJyZW50U2Nyb2xsVG9wfX07by5hdWdtZW50Q2xhc3MocixhKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvU3ludGhldGljVG91Y2hFdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1VJRXZlbnQuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRNb2RpZmllclN0YXRlLmpzIiksaT17dG91Y2hlczpudWxsLHRhcmdldFRvdWNoZXM6bnVsbCxjaGFuZ2VkVG91Y2hlczpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxnZXRNb2RpZmllclN0YXRlOnN9O28uYXVnbWVudENsYXNzKHIsaSksZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1RyYW5zaXRpb25FdmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIikscz17cHJvcGVydHlOYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENsYXNzKHIscyksZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1VJRXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRFdmVudFRhcmdldC5qcyIpLGk9e3ZpZXc6ZnVuY3Rpb24oZSl7aWYoZS52aWV3KXJldHVybiBlLnZpZXc7dmFyIHQ9cyhlKTtpZih0LndpbmRvdz09PXQpcmV0dXJuIHQ7dmFyIG49dC5vd25lckRvY3VtZW50O3JldHVybiBuP24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93OndpbmRvd30sZGV0YWlsOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRldGFpbHx8MH19O28uYXVnbWVudENsYXNzKHIsaSksZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1doZWVsRXZlbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIikscz17ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBlP2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6bnVsbH07by5hdWdtZW50Q2xhc3MocixzKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvVHJhbnNhY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxvPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSx7fSkscz17cmVpbml0aWFsaXplVHJhbnNhY3Rpb246ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM9dGhpcy5nZXRUcmFuc2FjdGlvbldyYXBwZXJzKCksdGhpcy53cmFwcGVySW5pdERhdGE/dGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoPTA6dGhpcy53cmFwcGVySW5pdERhdGE9W10sdGhpcy5faXNJblRyYW5zYWN0aW9uPSExfSxfaXNJblRyYW5zYWN0aW9uOiExLGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6bnVsbCxpc0luVHJhbnNhY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2lzSW5UcmFuc2FjdGlvbn0scGVyZm9ybTpmdW5jdGlvbihlLHQsbixvLHMsaSxhLGwpe3RoaXMuaXNJblRyYW5zYWN0aW9uKCkmJnIoIjI3Iik7dmFyIHUsYzt0cnl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSEwLHU9ITAsdGhpcy5pbml0aWFsaXplQWxsKDApLGM9ZS5jYWxsKHQsbixvLHMsaSxhLGwpLHU9ITF9ZmluYWxseXt0cnl7aWYodSl0cnl7dGhpcy5jbG9zZUFsbCgwKX1jYXRjaChlKXt9ZWxzZSB0aGlzLmNsb3NlQWxsKDApfWZpbmFsbHl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSExfX1yZXR1cm4gY30saW5pdGlhbGl6ZUFsbDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLG49ZTtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTt0cnl7dGhpcy53cmFwcGVySW5pdERhdGFbbl09byx0aGlzLndyYXBwZXJJbml0RGF0YVtuXT1yLmluaXRpYWxpemU/ci5pbml0aWFsaXplLmNhbGwodGhpcyk6bnVsbH1maW5hbGx5e2lmKHRoaXMud3JhcHBlckluaXREYXRhW25dPT09byl0cnl7dGhpcy5pbml0aWFsaXplQWxsKG4rMSl9Y2F0Y2goZSl7fX19fSxjbG9zZUFsbDpmdW5jdGlvbihlKXt0aGlzLmlzSW5UcmFuc2FjdGlvbigpfHxyKCIyOCIpO2Zvcih2YXIgdD10aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMsbj1lO248dC5sZW5ndGg7bisrKXt2YXIgcyxpPXRbbl0sYT10aGlzLndyYXBwZXJJbml0RGF0YVtuXTt0cnl7cz0hMCxhIT09byYmaS5jbG9zZSYmaS5jbG9zZS5jYWxsKHRoaXMsYSkscz0hMX1maW5hbGx5e2lmKHMpdHJ5e3RoaXMuY2xvc2VBbGwobisxKX1jYXRjaChlKXt9fX10aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9MH19O2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9WaWV3cG9ydE1ldHJpY3MuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnRTY3JvbGxMZWZ0OjAsY3VycmVudFNjcm9sbFRvcDowLHJlZnJlc2hTY3JvbGxWYWx1ZXM6ZnVuY3Rpb24oZSl7ci5jdXJyZW50U2Nyb2xsTGVmdD1lLngsci5jdXJyZW50U2Nyb2xsVG9wPWUueX19O2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9hY2N1bXVsYXRlSW50by5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG51bGw9PXQmJm8oIjMwIiksbnVsbD09ZT90OkFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KT8oZS5wdXNoLmFwcGx5KGUsdCksZSk6KGUucHVzaCh0KSxlKTpBcnJheS5pc0FycmF5KHQpP1tlXS5jb25jYXQodCk6W2UsdF19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKTtuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvYWRsZXIzMi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD0xLG49MCxyPTAscz1lLmxlbmd0aCxpPS00JnM7cjxpOyl7Zm9yKHZhciBhPU1hdGgubWluKHIrNDA5NixpKTtyPGE7cis9NCluKz0odCs9ZS5jaGFyQ29kZUF0KHIpKSsodCs9ZS5jaGFyQ29kZUF0KHIrMSkpKyh0Kz1lLmNoYXJDb2RlQXQocisyKSkrKHQrPWUuY2hhckNvZGVBdChyKzMpKTt0JT1vLG4lPW99Zm9yKDtyPHM7cisrKW4rPXQrPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdCU9byxuJT1vLHR8bjw8MTZ9dmFyIG89NjU1MjE7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2NyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24odCxuLHIsbyl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4scixvKX0pfTplfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZGFuZ2Vyb3VzU3R5bGVWYWx1ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCIiPT09dClyZXR1cm4iIjt2YXIgbz1pc05hTih0KTtpZihyfHxvfHwwPT09dHx8cy5oYXNPd25Qcm9wZXJ0eShlKSYmc1tlXSlyZXR1cm4iIit0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dD10LnRyaW0oKX1yZXR1cm4gdCsicHgifXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvQ1NTUHJvcGVydHkuanMiKSxzPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksby5pc1VuaXRsZXNzTnVtYmVyKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9IiIrZSxuPXMuZXhlYyh0KTtpZighbilyZXR1cm4gdDt2YXIgcixvPSIiLGk9MCxhPTA7Zm9yKGk9bi5pbmRleDtpPHQubGVuZ3RoO2krKyl7c3dpdGNoKHQuY2hhckNvZGVBdChpKSl7Y2FzZSAzNDpyPSImcXVvdDsiO2JyZWFrO2Nhc2UgMzg6cj0iJmFtcDsiO2JyZWFrO2Nhc2UgMzk6cj0iJiN4Mjc7IjticmVhaztjYXNlIDYwOnI9IiZsdDsiO2JyZWFrO2Nhc2UgNjI6cj0iJmd0OyI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1hIT09aSYmKG8rPXQuc3Vic3RyaW5nKGEsaSkpLGE9aSsxLG8rPXJ9cmV0dXJuIGEhPT1pP28rdC5zdWJzdHJpbmcoYSxpKTpvfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlPyIiK2U6cihlKX12YXIgcz0vWyInJjw+XS87ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2ZpbmRET01Ob2RlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZigxPT09ZS5ub2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1pLmdldChlKTtpZih0KXJldHVybiB0PWEodCksdD9zLmdldE5vZGVGcm9tSW5zdGFuY2UodCk6bnVsbDsiZnVuY3Rpb24iPT10eXBlb2YgZS5yZW5kZXI/bygiNDQiKTpvKCI0NSIsT2JqZWN0LmtleXMoZSkpfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIikscz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSksaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiKTtuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2ZsYXR0ZW5DaGlsZHJlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHQsbixyKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciBvPWUscz12b2lkIDA9PT1vW25dO3MmJm51bGwhPXQmJihvW25dPXQpfX1mdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gcyhlLHIsbiksbn12YXIgcz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyIpKTtuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIik7dm9pZCAwIT09dCYmdC5lbnYsZS5leHBvcnRzPW99KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZm9yRWFjaEFjY3VtdWxhdGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKHQsbik6ZSYmdC5jYWxsKG4sZSl9ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50Q2hhckNvZGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuPWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8wPT09KHQ9ZS5jaGFyQ29kZSkmJjEzPT09biYmKHQ9MTMpOnQ9bix0Pj0zMnx8MTM9PT10P3Q6MH1lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRLZXkuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlLmtleSl7dmFyIHQ9c1tlLmtleV18fGUua2V5O2lmKCJVbmlkZW50aWZpZWQiIT09dClyZXR1cm4gdH1pZigia2V5cHJlc3MiPT09ZS50eXBlKXt2YXIgbj1vKGUpO3JldHVybiAxMz09PW4/IkVudGVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfXJldHVybiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9pW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIpLHM9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LGk9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRNb2RpZmllclN0YXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcyxuPXQubmF0aXZlRXZlbnQ7aWYobi5nZXRNb2RpZmllclN0YXRlKXJldHVybiBuLmdldE1vZGlmaWVyU3RhdGUoZSk7dmFyIHI9c1tlXTtyZXR1cm4hIXImJiEhbltyXX1mdW5jdGlvbiBvKGUpe3JldHVybiByfXZhciBzPXtBbHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0S2V5In07ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEV2ZW50VGFyZ2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudHx8d2luZG93O3JldHVybiB0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09dC5ub2RlVHlwZT90LnBhcmVudE5vZGU6dH1lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ7KHQ9ZS5fcmVuZGVyZWROb2RlVHlwZSk9PT1vLkNPTVBPU0lURTspZT1lLl9yZW5kZXJlZENvbXBvbmVudDtyZXR1cm4gdD09PW8uSE9TVD9lLl9yZW5kZXJlZENvbXBvbmVudDp0PT09by5FTVBUWT9udWxsOnZvaWQgMH12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0Tm9kZVR5cGVzLmpzIik7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2dldEl0ZXJhdG9yRm4uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiYobyYmZVtvXXx8ZVtzXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLHM9IkBAaXRlcmF0b3IiO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIG8oZSl7Zm9yKDtlOyl7aWYoZS5uZXh0U2libGluZylyZXR1cm4gZS5uZXh0U2libGluZztlPWUucGFyZW50Tm9kZX19ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbj1yKGUpLHM9MCxpPTA7bjspe2lmKDM9PT1uLm5vZGVUeXBlKXtpZihpPXMrbi50ZXh0Q29udGVudC5sZW5ndGgsczw9dCYmaT49dClyZXR1cm57bm9kZTpuLG9mZnNldDp0LXN9O3M9aX1uPXIobyhuKSl9fWUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRUZXh0Q29udGVudEFjY2Vzc29yLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4hcyYmby5jYW5Vc2VET00mJihzPSJ0ZXh0Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/InRleHRDb250ZW50IjoiaW5uZXJUZXh0Iiksc312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIpLHM9bnVsbDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bIldlYmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3QsblsibXMiK2VdPSJNUyIrdCxuWyJPIitlXT0ibyIrdC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24gbyhlKXtpZihhW2VdKXJldHVybiBhW2VdO2lmKCFpW2VdKXJldHVybiBlO3ZhciB0PWlbZV07Zm9yKHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiBsKXJldHVybiBhW2VdPXRbbl07cmV0dXJuIiJ9dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiKSxpPXthbmltYXRpb25lbmQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uRW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0IiksdHJhbnNpdGlvbmVuZDpyKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxhPXt9LGw9e307cy5jYW5Vc2VET00mJihsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgaS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBpLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIGkuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIGkudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKSxlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvaW5wdXRWYWx1ZVRyYWNraW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS50eXBlLG49ZS5ub2RlTmFtZTtyZXR1cm4gbiYmImlucHV0Ij09PW4udG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT10fHwicmFkaW8iPT09dCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcn1mdW5jdGlvbiBzKGUsdCl7ZS5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcj10fWZ1bmN0aW9uIGkoZSl7ZS5fd3JhcHBlclN0YXRlLnZhbHVlVHJhY2tlcj1udWxsfWZ1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIGUmJih0PXIoZSk/IiIrZS5jaGVja2VkOmUudmFsdWUpLHR9dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiKSx1PXtfZ2V0VHJhY2tlckZyb21Ob2RlOmZ1bmN0aW9uKGUpe3JldHVybiBvKGwuZ2V0SW5zdGFuY2VGcm9tTm9kZShlKSl9LHRyYWNrOmZ1bmN0aW9uKGUpe2lmKCFvKGUpKXt2YXIgdD1sLmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbj1yKHQpPyJjaGVja2VkIjoidmFsdWUiLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxuKSx1PSIiK3Rbbl07dC5oYXNPd25Qcm9wZXJ0eShuKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGEuZ2V0fHwiZnVuY3Rpb24iIT10eXBlb2YgYS5zZXR8fChPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtlbnVtZXJhYmxlOmEuZW51bWVyYWJsZSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXt1PSIiK2UsYS5zZXQuY2FsbCh0aGlzLGUpfX0pLHMoZSx7Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sc2V0VmFsdWU6ZnVuY3Rpb24oZSl7dT0iIitlfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXtpKGUpLGRlbGV0ZSB0W25dfX0pKX19LHVwZGF0ZVZhbHVlSWZDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO3ZhciB0PW8oZSk7aWYoIXQpcmV0dXJuIHUudHJhY2soZSksITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9YShsLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkpO3JldHVybiByIT09biYmKHQuc2V0VmFsdWUociksITApfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKTt0JiZ0LnN0b3BUcmFja2luZygpfX07ZS5leHBvcnRzPXV9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlKXt2YXIgdD1lLmdldE5hbWUoKTtpZih0KXJldHVybiIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCIrdCsiYC4ifXJldHVybiIifWZ1bmN0aW9uIG8oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJnZvaWQgMCE9PWUucHJvdG90eXBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm90b3R5cGUubW91bnRDb21wb25lbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50fWZ1bmN0aW9uIHMoZSx0KXt2YXIgbjtpZihudWxsPT09ZXx8ITE9PT1lKW49dS5jcmVhdGUocyk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciBhPWUsbD1hLnR5cGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwmJiJzdHJpbmciIT10eXBlb2YgbCl7dmFyIF89IiI7Xys9cihhLl9vd25lciksaSgiMTMwIixudWxsPT1sP2w6dHlwZW9mIGwsXyl9InN0cmluZyI9PXR5cGVvZiBhLnR5cGU/bj1jLmNyZWF0ZUludGVybmFsQ29tcG9uZW50KGEpOm8oYS50eXBlKT8obj1uZXcgYS50eXBlKGEpLG4uZ2V0SG9zdE5vZGV8fChuLmdldEhvc3ROb2RlPW4uZ2V0TmF0aXZlTm9kZSkpOm49bmV3IGQoYSl9ZWxzZSJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlP249Yy5jcmVhdGVJbnN0YW5jZUZvclRleHQoZSk6aSgiMTMxIix0eXBlb2YgZSk7cmV0dXJuIG4uX21vdW50SW5kZXg9MCxuLl9tb3VudEltYWdlPW51bGwsbn12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiksYz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL1JlYWN0SG9zdENvbXBvbmVudC5qcyIpLGQ9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSxmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdChlKX0pO2EoZC5wcm90b3R5cGUsbCx7X2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6c30pLGUuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOy8qKgogKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KICoKICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsCiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLgogKgogKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLgogKgogKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gImNsaWNrIi4KICogQHBhcmFtIHs/Ym9vbGVhbn0gY2FwdHVyZSBDaGVjayBpZiB0aGUgY2FwdHVyZSBwaGFzZSBpcyBzdXBwb3J0ZWQuCiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC4KICogQGludGVybmFsCiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVAogKi8KZnVuY3Rpb24gcihlLHQpe2lmKCFzLmNhblVzZURPTXx8dCYmISgiYWRkRXZlbnRMaXN0ZW5lciJpbiBkb2N1bWVudCkpcmV0dXJuITE7dmFyIG49Im9uIitlLHI9biBpbiBkb2N1bWVudDtpZighcil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5zZXRBdHRyaWJ1dGUobiwicmV0dXJuOyIpLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGlbbl19cmV0dXJuIXImJm8mJiJ3aGVlbCI9PT1lJiYocj1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJFdmVudHMud2hlZWwiLCIzLjAiKSkscn12YXIgbyxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIik7cy5jYW5Vc2VET00mJihvPWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlJiYhMCE9PWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIiIsIiIpKSxlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhb1tlLnR5cGVdOiJ0ZXh0YXJlYSI9PT10fXZhciBvPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nIicrbyhlKSsnIid9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIuanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvcmVuZGVyU3VidHJlZUludG9Db250YWluZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9SZWFjdE1vdW50LmpzIik7ZS5leHBvcnRzPXIucmVuZGVyU3VidHJlZUludG9Db250YWluZXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3NldElubmVySFRNTC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL0RPTU5hbWVzcGFjZXMuanMiKSxpPS9eWyBcclxuXHRcZl0vLGE9LzwoIS0tfGxpbmt8bm9zY3JpcHR8bWV0YXxzY3JpcHR8c3R5bGUpWyBcclxuXHRcZlwvPl0vLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uLmpzIiksdT1sKGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT1zLnN2Z3x8ImlubmVySFRNTCJpbiBlKWUuaW5uZXJIVE1MPXQ7ZWxzZXtyPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHIuaW5uZXJIVE1MPSI8c3ZnPiIrdCsiPC9zdmc+Ijtmb3IodmFyIG49ci5maXJzdENoaWxkO24uZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZChuLmZpcnN0Q2hpbGQpfX0pO2lmKG8uY2FuVXNlRE9NKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmlubmVySFRNTD0iICIsIiI9PT1jLmlubmVySFRNTCYmKHU9ZnVuY3Rpb24oZSx0KXtpZihlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSxlKSxpLnRlc3QodCl8fCI8Ij09PXRbMF0mJmEudGVzdCh0KSl7ZS5pbm5lckhUTUw9U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSkrdDt2YXIgbj1lLmZpcnN0Q2hpbGQ7MT09PW4uZGF0YS5sZW5ndGg/ZS5yZW1vdmVDaGlsZChuKTpuLmRlbGV0ZURhdGEoMCwxKX1lbHNlIGUuaW5uZXJIVE1MPXR9KSxjPW51bGx9ZS5leHBvcnRzPXV9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3NldFRleHRDb250ZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiKSxpPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpcmV0dXJuIHZvaWQobi5ub2RlVmFsdWU9dCl9ZS50ZXh0Q29udGVudD10fTtyLmNhblVzZURPTSYmKCJ0ZXh0Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChpPWZ1bmN0aW9uKGUsdCl7aWYoMz09PWUubm9kZVR5cGUpcmV0dXJuIHZvaWQoZS5ub2RlVmFsdWU9dCk7cyhlLG8odCkpfSkpLGUuZXhwb3J0cz1pfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49bnVsbD09PWV8fCExPT09ZSxyPW51bGw9PT10fHwhMT09PXQ7aWYobnx8cilyZXR1cm4gbj09PXI7dmFyIG89dHlwZW9mIGUscz10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09PW98fCJudW1iZXIiPT09bz8ic3RyaW5nIj09PXN8fCJudW1iZXIiPT09czoib2JqZWN0Ij09PXMmJmUudHlwZT09PXQudHlwZSYmZS5rZXk9PT10LmtleX1lLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZS5rZXk/dS5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4scyl7dmFyIF89dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1fJiYiYm9vbGVhbiIhPT1ffHwoZT1udWxsKSxudWxsPT09ZXx8InN0cmluZyI9PT1ffHwibnVtYmVyIj09PV98fCJvYmplY3QiPT09XyYmZS4kJHR5cGVvZj09PWEpcmV0dXJuIG4ocyxlLCIiPT09dD9jK3IoZSwwKTp0KSwxO3ZhciBwLGYsbT0wLGg9IiI9PT10P2M6dCtkO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspcD1lW2ddLGY9aCtyKHAsZyksbSs9byhwLGYsbixzKTtlbHNle3ZhciBiPWwoZSk7aWYoYil7dmFyIEUseT1iLmNhbGwoZSk7aWYoYiE9PWUuZW50cmllcylmb3IodmFyIHY9MDshKEU9eS5uZXh0KCkpLmRvbmU7KXA9RS52YWx1ZSxmPWgrcihwLHYrKyksbSs9byhwLGYsbixzKTtlbHNlIGZvcig7IShFPXkubmV4dCgpKS5kb25lOyl7dmFyIFQ9RS52YWx1ZTtUJiYocD1UWzFdLGY9aCt1LmVzY2FwZShUWzBdKStkK3IocCwwKSxtKz1vKHAsZixuLHMpKX19ZWxzZSBpZigib2JqZWN0Ij09PV8pe3ZhciBBPSIiLEM9U3RyaW5nKGUpO2koIjMxIiwiW29iamVjdCBPYmplY3RdIj09PUM/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAiKSsifSI6QyxBKX19cmV0dXJuIG19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIG51bGw9PWU/MDpvKGUsIiIsdCxuKX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGE9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lci5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIikpLGw9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9nZXRJdGVyYXRvckZuLmpzIiksdT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyIpKSxjPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIiksIi4iKSxkPSI6IjtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9saWIvdmFsaWRhdGVET01OZXN0aW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPShuKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIpKSxvPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi93YXJuaW5nLmpzIikscik7ZS5leHBvcnRzPW99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvY29tcG9uZW50cy9Qcm92aWRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L3JlYWN0LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbGliL3V0aWxzL3N0b3JlU2hhcGUuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvdXRpbHMvd2FybmluZy5qcyIpLHA9KHIoXyksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe28odGhpcyx0KTt2YXIgaT1zKHRoaXMsZS5jYWxsKHRoaXMsbixyKSk7cmV0dXJuIGkuc3RvcmU9bi5zdG9yZSxpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJue3N0b3JlOnRoaXMuc3RvcmV9fSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0fShhLkNvbXBvbmVudCkpO3QuZGVmYXVsdD1wLHAucHJvcFR5cGVzPXtzdG9yZTpkLmRlZmF1bHQuaXNSZXF1aXJlZCxjaGlsZHJlbjp1LmRlZmF1bHQuZWxlbWVudC5pc1JlcXVpcmVkfSxwLmNoaWxkQ29udGV4dFR5cGVzPXtzdG9yZTpkLmRlZmF1bHQuaXNSZXF1aXJlZH19LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvY29tcG9uZW50cy9jb25uZWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHwiQ29tcG9uZW50In1mdW5jdGlvbiBsKGUsdCl7dHJ5e3JldHVybiBlLmFwcGx5KHQpfWNhdGNoKGUpe3JldHVybiBSLnZhbHVlPWUsUn19ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LHU9Qm9vbGVhbihlKSxfPWV8fEMsZj12b2lkIDA7Zj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnQ/KDAsZy5kZWZhdWx0KSh0KTpPO3ZhciBoPW58fFMsYj1yLnB1cmUsRT12b2lkIDA9PT1ifHxiLHk9ci53aXRoUmVmLFQ9dm9pZCAwIT09eSYmeSx4PUUmJmghPT1TLEw9aisrO3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuKXt2YXIgcj1oKGUsdCxuKTtyZXR1cm4gcn12YXIgbj0iQ29ubmVjdCgiK2EoZSkrIikiLHI9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gYShlLHQpe28odGhpcyxhKTt2YXIgaT1zKHRoaXMsci5jYWxsKHRoaXMsZSx0KSk7aS52ZXJzaW9uPUwsaS5zdG9yZT1lLnN0b3JlfHx0LnN0b3JlLCgwLEEuZGVmYXVsdCkoaS5zdG9yZSwnQ291bGQgbm90IGZpbmQgInN0b3JlIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgIicrbisnIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgb3IgZXhwbGljaXRseSBwYXNzICJzdG9yZSIgYXMgYSBwcm9wIHRvICInK24rJyIuJyk7dmFyIGw9aS5zdG9yZS5nZXRTdGF0ZSgpO3JldHVybiBpLnN0YXRlPXtzdG9yZVN0YXRlOmx9LGkuY2xlYXJDYWNoZSgpLGl9cmV0dXJuIGkoYSxyKSxhLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4hRXx8dGhpcy5oYXZlT3duUHJvcHNDaGFuZ2VkfHx0aGlzLmhhc1N0b3JlU3RhdGVDaGFuZ2VkfSxhLnByb3RvdHlwZS5jb21wdXRlU3RhdGVQcm9wcz1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmZpbmFsTWFwU3RhdGVUb1Byb3BzKXJldHVybiB0aGlzLmNvbmZpZ3VyZUZpbmFsTWFwU3RhdGUoZSx0KTt2YXIgbj1lLmdldFN0YXRlKCkscj10aGlzLmRvU3RhdGVQcm9wc0RlcGVuZE9uT3duUHJvcHM/dGhpcy5maW5hbE1hcFN0YXRlVG9Qcm9wcyhuLHQpOnRoaXMuZmluYWxNYXBTdGF0ZVRvUHJvcHMobik7cmV0dXJuIHJ9LGEucHJvdG90eXBlLmNvbmZpZ3VyZUZpbmFsTWFwU3RhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1fKGUuZ2V0U3RhdGUoKSx0KSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3JldHVybiB0aGlzLmZpbmFsTWFwU3RhdGVUb1Byb3BzPXI/bjpfLHRoaXMuZG9TdGF0ZVByb3BzRGVwZW5kT25Pd25Qcm9wcz0xIT09dGhpcy5maW5hbE1hcFN0YXRlVG9Qcm9wcy5sZW5ndGgscj90aGlzLmNvbXB1dGVTdGF0ZVByb3BzKGUsdCk6bn0sYS5wcm90b3R5cGUuY29tcHV0ZURpc3BhdGNoUHJvcHM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5maW5hbE1hcERpc3BhdGNoVG9Qcm9wcylyZXR1cm4gdGhpcy5jb25maWd1cmVGaW5hbE1hcERpc3BhdGNoKGUsdCk7dmFyIG49ZS5kaXNwYXRjaCxyPXRoaXMuZG9EaXNwYXRjaFByb3BzRGVwZW5kT25Pd25Qcm9wcz90aGlzLmZpbmFsTWFwRGlzcGF0Y2hUb1Byb3BzKG4sdCk6dGhpcy5maW5hbE1hcERpc3BhdGNoVG9Qcm9wcyhuKTtyZXR1cm4gcn0sYS5wcm90b3R5cGUuY29uZmlndXJlRmluYWxNYXBEaXNwYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPWYoZS5kaXNwYXRjaCx0KSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3JldHVybiB0aGlzLmZpbmFsTWFwRGlzcGF0Y2hUb1Byb3BzPXI/bjpmLHRoaXMuZG9EaXNwYXRjaFByb3BzRGVwZW5kT25Pd25Qcm9wcz0xIT09dGhpcy5maW5hbE1hcERpc3BhdGNoVG9Qcm9wcy5sZW5ndGgscj90aGlzLmNvbXB1dGVEaXNwYXRjaFByb3BzKGUsdCk6bn0sYS5wcm90b3R5cGUudXBkYXRlU3RhdGVQcm9wc0lmTmVlZGVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb21wdXRlU3RhdGVQcm9wcyh0aGlzLnN0b3JlLHRoaXMucHJvcHMpO3JldHVybighdGhpcy5zdGF0ZVByb3BzfHwhKDAsbS5kZWZhdWx0KShlLHRoaXMuc3RhdGVQcm9wcykpJiYodGhpcy5zdGF0ZVByb3BzPWUsITApfSxhLnByb3RvdHlwZS51cGRhdGVEaXNwYXRjaFByb3BzSWZOZWVkZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbXB1dGVEaXNwYXRjaFByb3BzKHRoaXMuc3RvcmUsdGhpcy5wcm9wcyk7cmV0dXJuKCF0aGlzLmRpc3BhdGNoUHJvcHN8fCEoMCxtLmRlZmF1bHQpKGUsdGhpcy5kaXNwYXRjaFByb3BzKSkmJih0aGlzLmRpc3BhdGNoUHJvcHM9ZSwhMCl9LGEucHJvdG90eXBlLnVwZGF0ZU1lcmdlZFByb3BzSWZOZWVkZWQ9ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMuc3RhdGVQcm9wcyx0aGlzLmRpc3BhdGNoUHJvcHMsdGhpcy5wcm9wcyk7cmV0dXJuISh0aGlzLm1lcmdlZFByb3BzJiZ4JiYoMCxtLmRlZmF1bHQpKGUsdGhpcy5tZXJnZWRQcm9wcykpJiYodGhpcy5tZXJnZWRQcm9wcz1lLCEwKX0sYS5wcm90b3R5cGUuaXNTdWJzY3JpYmVkPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudW5zdWJzY3JpYmV9LGEucHJvdG90eXBlLnRyeVN1YnNjcmliZT1mdW5jdGlvbigpe3UmJiF0aGlzLnVuc3Vic2NyaWJlJiYodGhpcy51bnN1YnNjcmliZT10aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLmhhbmRsZUNoYW5nZSgpKX0sYS5wcm90b3R5cGUudHJ5VW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLnVuc3Vic2NyaWJlJiYodGhpcy51bnN1YnNjcmliZSgpLHRoaXMudW5zdWJzY3JpYmU9bnVsbCl9LGEucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy50cnlTdWJzY3JpYmUoKX0sYS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtFJiYoMCxtLmRlZmF1bHQpKGUsdGhpcy5wcm9wcyl8fCh0aGlzLmhhdmVPd25Qcm9wc0NoYW5nZWQ9ITApfSxhLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudHJ5VW5zdWJzY3JpYmUoKSx0aGlzLmNsZWFyQ2FjaGUoKX0sYS5wcm90b3R5cGUuY2xlYXJDYWNoZT1mdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hQcm9wcz1udWxsLHRoaXMuc3RhdGVQcm9wcz1udWxsLHRoaXMubWVyZ2VkUHJvcHM9bnVsbCx0aGlzLmhhdmVPd25Qcm9wc0NoYW5nZWQ9ITAsdGhpcy5oYXNTdG9yZVN0YXRlQ2hhbmdlZD0hMCx0aGlzLmhhdmVTdGF0ZVByb3BzQmVlblByZWNhbGN1bGF0ZWQ9ITEsdGhpcy5zdGF0ZVByb3BzUHJlY2FsY3VsYXRpb25FcnJvcj1udWxsLHRoaXMucmVuZGVyZWRFbGVtZW50PW51bGwsdGhpcy5maW5hbE1hcERpc3BhdGNoVG9Qcm9wcz1udWxsLHRoaXMuZmluYWxNYXBTdGF0ZVRvUHJvcHM9bnVsbH0sYS5wcm90b3R5cGUuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKCl7aWYodGhpcy51bnN1YnNjcmliZSl7dmFyIGU9dGhpcy5zdG9yZS5nZXRTdGF0ZSgpLHQ9dGhpcy5zdGF0ZS5zdG9yZVN0YXRlO2lmKCFFfHx0IT09ZSl7aWYoRSYmIXRoaXMuZG9TdGF0ZVByb3BzRGVwZW5kT25Pd25Qcm9wcyl7dmFyIG49bCh0aGlzLnVwZGF0ZVN0YXRlUHJvcHNJZk5lZWRlZCx0aGlzKTtpZighbilyZXR1cm47bj09PVImJih0aGlzLnN0YXRlUHJvcHNQcmVjYWxjdWxhdGlvbkVycm9yPVIudmFsdWUpLHRoaXMuaGF2ZVN0YXRlUHJvcHNCZWVuUHJlY2FsY3VsYXRlZD0hMH10aGlzLmhhc1N0b3JlU3RhdGVDaGFuZ2VkPSEwLHRoaXMuc2V0U3RhdGUoe3N0b3JlU3RhdGU6ZX0pfX19LGEucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybigwLEEuZGVmYXVsdCkoVCwiVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHsgd2l0aFJlZjogdHJ1ZSB9IGFzIHRoZSBmb3VydGggYXJndW1lbnQgb2YgdGhlIGNvbm5lY3QoKSBjYWxsLiIpLHRoaXMucmVmcy53cmFwcGVkSW5zdGFuY2V9LGEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaGF2ZU93blByb3BzQ2hhbmdlZCxuPXRoaXMuaGFzU3RvcmVTdGF0ZUNoYW5nZWQscj10aGlzLmhhdmVTdGF0ZVByb3BzQmVlblByZWNhbGN1bGF0ZWQsbz10aGlzLnN0YXRlUHJvcHNQcmVjYWxjdWxhdGlvbkVycm9yLHM9dGhpcy5yZW5kZXJlZEVsZW1lbnQ7aWYodGhpcy5oYXZlT3duUHJvcHNDaGFuZ2VkPSExLHRoaXMuaGFzU3RvcmVTdGF0ZUNoYW5nZWQ9ITEsdGhpcy5oYXZlU3RhdGVQcm9wc0JlZW5QcmVjYWxjdWxhdGVkPSExLHRoaXMuc3RhdGVQcm9wc1ByZWNhbGN1bGF0aW9uRXJyb3I9bnVsbCxvKXRocm93IG87dmFyIGk9ITAsYT0hMDtFJiZzJiYoaT1ufHx0JiZ0aGlzLmRvU3RhdGVQcm9wc0RlcGVuZE9uT3duUHJvcHMsYT10JiZ0aGlzLmRvRGlzcGF0Y2hQcm9wc0RlcGVuZE9uT3duUHJvcHMpO3ZhciBsPSExLHU9ITE7cj9sPSEwOmkmJihsPXRoaXMudXBkYXRlU3RhdGVQcm9wc0lmTmVlZGVkKCkpLGEmJih1PXRoaXMudXBkYXRlRGlzcGF0Y2hQcm9wc0lmTmVlZGVkKCkpO3JldHVybiEoISEobHx8dXx8dCkmJnRoaXMudXBkYXRlTWVyZ2VkUHJvcHNJZk5lZWRlZCgpKSYmcz9zOih0aGlzLnJlbmRlcmVkRWxlbWVudD1UPygwLGQuY3JlYXRlRWxlbWVudCkoZSxjKHt9LHRoaXMubWVyZ2VkUHJvcHMse3JlZjoid3JhcHBlZEluc3RhbmNlIn0pKTooMCxkLmNyZWF0ZUVsZW1lbnQpKGUsdGhpcy5tZXJnZWRQcm9wcyksdGhpcy5yZW5kZXJlZEVsZW1lbnQpfSxhfShkLkNvbXBvbmVudCk7cmV0dXJuIHIuZGlzcGxheU5hbWU9bixyLldyYXBwZWRDb21wb25lbnQ9ZSxyLmNvbnRleHRUeXBlcz17c3RvcmU6cC5kZWZhdWx0fSxyLnByb3BUeXBlcz17c3RvcmU6cC5kZWZhdWx0fSwoMCx2LmRlZmF1bHQpKHIsZSl9fXQuX19lc01vZHVsZT0hMDt2YXIgYz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt0LmRlZmF1bHQ9dTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9yZWFjdC5qcyIpLF89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbGliL3V0aWxzL3N0b3JlU2hhcGUuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvdXRpbHMvc2hhbGxvd0VxdWFsLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbGliL3V0aWxzL3dyYXBBY3Rpb25DcmVhdG9ycy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2xpYi91dGlscy93YXJuaW5nLmpzIiksRT0ocihiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiKSkseT0ocihFKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIpKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcyIpLEE9cihUKSxDPWZ1bmN0aW9uKGUpe3JldHVybnt9fSxPPWZ1bmN0aW9uKGUpe3JldHVybntkaXNwYXRjaDplfX0sUz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGMoe30sbixlLHQpfSxSPXt2YWx1ZTpudWxsfSxqPTB9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5fX2VzTW9kdWxlPSEwLHQuY29ubmVjdD10LlByb3ZpZGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvY29tcG9uZW50cy9Qcm92aWRlci5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2xpYi9jb21wb25lbnRzL2Nvbm5lY3QuanMiKSxhPXIoaSk7dC5Qcm92aWRlcj1zLmRlZmF1bHQsdC5jb25uZWN0PWEuZGVmYXVsdH0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2xpYi91dGlscy9zaGFsbG93RXF1YWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKGU9PT10KXJldHVybiEwO3ZhciBuPU9iamVjdC5rZXlzKGUpLHI9T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPTA7czxuLmxlbmd0aDtzKyspaWYoIW8uY2FsbCh0LG5bc10pfHxlW25bc11dIT09dFtuW3NdXSlyZXR1cm4hMTtyZXR1cm4hMH10Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9saWIvdXRpbHMvc3RvcmVTaGFwZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKTt0LmRlZmF1bHQ9by5kZWZhdWx0LnNoYXBlKHtzdWJzY3JpYmU6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxkaXNwYXRjaDpvLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRlOm8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9KX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2xpYi91dGlscy93YXJuaW5nLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihlKTt0cnl7dGhyb3cgbmV3IEVycm9yKGUpfWNhdGNoKGUpe319dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbGliL3V0aWxzL3dyYXBBY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4oMCxvLmJpbmRBY3Rpb25DcmVhdG9ycykoZSx0KX19dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD1yO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIil9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiksbz1yLlN5bWJvbDtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMD09PWU/bDphOnUmJnUgaW4gT2JqZWN0KGUpP3MoZSk6aShlKX12YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiKSxhPSJbb2JqZWN0IE51bGxdIixsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHU9bz9vLnRvU3RyaW5nVGFnOnZvaWQgMDtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7dmFyIG49Im9iamVjdCI9PXR5cGVvZiB0JiZ0JiZ0Lk9iamVjdD09PU9iamVjdCYmdDtlLmV4cG9ydHM9bn0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIpLG89cihPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTtlLmV4cG9ydHM9b30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9aS5jYWxsKGUsbCksbj1lW2xdO3RyeXtlW2xdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89YS5jYWxsKGUpO3JldHVybiByJiYodD9lW2xdPW46ZGVsZXRlIGVbbF0pLG99dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIikscz1PYmplY3QucHJvdG90eXBlLGk9cy5oYXNPd25Qcm9wZXJ0eSxhPXMudG9TdHJpbmcsbD1vP28udG9TdHJpbmdUYWc6dm9pZCAwO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gby5jYWxsKGUpfXZhciByPU9iamVjdC5wcm90b3R5cGUsbz1yLnRvU3RyaW5nO2UuZXhwb3J0cz1ufSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiksbz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9cnx8b3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtlLmV4cG9ydHM9c30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZX1lLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoIWkoZSl8fG8oZSkhPWEpcmV0dXJuITE7dmFyIHQ9cyhlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1kLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09X312YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiksYT0iW29iamVjdCBPYmplY3RdIixsPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsYz1sLnRvU3RyaW5nLGQ9dS5oYXNPd25Qcm9wZXJ0eSxfPWMuY2FsbChPYmplY3QpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9Lyg9MHw9MikvZyxuPXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJuKCIiKygiLiI9PT1lWzBdJiYiJCI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpOmUuc3Vic3RyaW5nKDEpKSkucmVwbGFjZSh0LGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9dmFyIHM9e2VzY2FwZTpyLHVuZXNjYXBlOm99O2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiKSxvPShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSkscz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihlLHQpfSxpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJldHVybiBuZXcgcihlLHQsbil9LGE9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBzPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNhbGwocyxlLHQsbixyKSxzfXJldHVybiBuZXcgbyhlLHQsbixyKX0sbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQb29sLmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSx1PW8sYz1mdW5jdGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fHUsbi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT1sLG59LGQ9e2FkZFBvb2xpbmdUbzpjLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6cyx0aHJlZUFyZ3VtZW50UG9vbGVyOmksZm91ckFyZ3VtZW50UG9vbGVyOmF9O2UuZXhwb3J0cz1kfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJhc2VDbGFzc2VzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFZlcnNpb24uanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL29ubHlDaGlsZC5qcyIpLF89YS5jcmVhdGVFbGVtZW50LHA9YS5jcmVhdGVGYWN0b3J5LGY9YS5jbG9uZUVsZW1lbnQsbT1yLGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGc9e0NoaWxkcmVuOnttYXA6cy5tYXAsZm9yRWFjaDpzLmZvckVhY2gsY291bnQ6cy5jb3VudCx0b0FycmF5OnMudG9BcnJheSxvbmx5OmR9LENvbXBvbmVudDpvLkNvbXBvbmVudCxQdXJlQ29tcG9uZW50Om8uUHVyZUNvbXBvbmVudCxjcmVhdGVFbGVtZW50Ol8sY2xvbmVFbGVtZW50OmYsaXNWYWxpZEVsZW1lbnQ6YS5pc1ZhbGlkRWxlbWVudCxQcm9wVHlwZXM6bCxjcmVhdGVDbGFzczpjLGNyZWF0ZUZhY3Rvcnk6cCxjcmVhdGVNaXhpbjpoLERPTTppLHZlcnNpb246dSxfX3NwcmVhZDptfTtlLmV4cG9ydHM9Z30sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJhc2VDbGFzc2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9dSx0aGlzLnVwZGF0ZXI9bnx8bH1mdW5jdGlvbiBvKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPXUsdGhpcy51cGRhdGVyPW58fGx9ZnVuY3Rpb24gcygpe312YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3ROb29wVXBkYXRlUXVldWUuanMiKSx1PShuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9lbXB0eU9iamVjdC5qcyIpKTtuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9mYmpzL2xpYi9pbnZhcmlhbnQuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvbG93UHJpb3JpdHlXYXJuaW5nLmpzIik7ci5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpeyJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPWUmJmkoIjg1IiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUpLHQmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyx0LCJzZXRTdGF0ZSIpfSxyLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpLGUmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfTtzLnByb3RvdHlwZT1yLnByb3RvdHlwZSxvLnByb3RvdHlwZT1uZXcgcyxvLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vLGEoby5wcm90b3R5cGUsci5wcm90b3R5cGUpLG8ucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGUuZXhwb3J0cz17Q29tcG9uZW50OnIsUHVyZUNvbXBvbmVudDpvfX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkcmVuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuKCIiK2UpLnJlcGxhY2UoeSwiJCYvIil9ZnVuY3Rpb24gbyhlLHQpe3RoaXMuZnVuYz1lLHRoaXMuY29udGV4dD10LHRoaXMuY291bnQ9MH1mdW5jdGlvbiBzKGUsdCxuKXt2YXIgcj1lLmZ1bmMsbz1lLmNvbnRleHQ7ci5jYWxsKG8sdCxlLmNvdW50KyspfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9by5nZXRQb29sZWQodCxuKTtnKGUscyxyKSxvLnJlbGVhc2Uocil9ZnVuY3Rpb24gYShlLHQsbixyKXt0aGlzLnJlc3VsdD1lLHRoaXMua2V5UHJlZml4PXQsdGhpcy5mdW5jPW4sdGhpcy5jb250ZXh0PXIsdGhpcy5jb3VudD0wfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciBvPWUucmVzdWx0LHM9ZS5rZXlQcmVmaXgsaT1lLmZ1bmMsYT1lLmNvbnRleHQsbD1pLmNhbGwoYSx0LGUuY291bnQrKyk7QXJyYXkuaXNBcnJheShsKT91KGwsbyxuLGgudGhhdFJldHVybnNBcmd1bWVudCk6bnVsbCE9bCYmKG0uaXNWYWxpZEVsZW1lbnQobCkmJihsPW0uY2xvbmVBbmRSZXBsYWNlS2V5KGwscysoIWwua2V5fHx0JiZ0LmtleT09PWwua2V5PyIiOnIobC5rZXkpKyIvIikrbikpLG8ucHVzaChsKSl9ZnVuY3Rpb24gdShlLHQsbixvLHMpe3ZhciBpPSIiO251bGwhPW4mJihpPXIobikrIi8iKTt2YXIgdT1hLmdldFBvb2xlZCh0LGksbyxzKTtnKGUsbCx1KSxhLnJlbGVhc2UodSl9ZnVuY3Rpb24gYyhlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXTtyZXR1cm4gdShlLHIsbnVsbCx0LG4pLHJ9ZnVuY3Rpb24gZChlLHQsbil7cmV0dXJuIG51bGx9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBnKGUsZCxudWxsKX1mdW5jdGlvbiBwKGUpe3ZhciB0PVtdO3JldHVybiB1KGUsdCxudWxsLGgudGhhdFJldHVybnNBcmd1bWVudCksdH12YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUG9vbGVkQ2xhc3MuanMiKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi90cmF2ZXJzZUFsbENoaWxkcmVuLmpzIiksYj1mLnR3b0FyZ3VtZW50UG9vbGVyLEU9Zi5mb3VyQXJndW1lbnRQb29sZXIseT0vXC8rL2c7by5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0sZi5hZGRQb29saW5nVG8obyxiKSxhLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQ9bnVsbCx0aGlzLmtleVByZWZpeD1udWxsLHRoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0sZi5hZGRQb29saW5nVG8oYSxFKTt2YXIgdj17Zm9yRWFjaDppLG1hcDpjLG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWw6dSxjb3VudDpfLHRvQXJyYXk6cH07ZS5leHBvcnRzPXZ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vay5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1SZWdFeHAoIl4iK3QuY2FsbChuKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt0cnl7dmFyIG89dC5jYWxsKGUpO3JldHVybiByLnRlc3Qobyl9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9dShlKTtpZih0KXt2YXIgbj10LmNoaWxkSURzO2MoZSksbi5mb3JFYWNoKG8pfX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4iXG4gICAgaW4gIisoZXx8IlVua25vd24iKSsodD8iIChhdCAiK3QuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXC9dLywiIikrIjoiK3QubGluZU51bWJlcisiKSI6bj8iIChjcmVhdGVkIGJ5ICIrbisiKSI6IiIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIG51bGw9PWU/IiNlbXB0eSI6InN0cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGU/IiN0ZXh0Ijoic3RyaW5nIj09dHlwZW9mIGUudHlwZT9lLnR5cGU6ZS50eXBlLmRpc3BsYXlOYW1lfHxlLnR5cGUubmFtZXx8IlVua25vd24ifWZ1bmN0aW9uIGEoZSl7dmFyIHQsbj1PLmdldERpc3BsYXlOYW1lKGUpLHI9Ty5nZXRFbGVtZW50KGUpLG89Ty5nZXRPd25lcklEKGUpO3JldHVybiBvJiYodD1PLmdldERpc3BsYXlOYW1lKG8pKSxzKG4sciYmci5fc291cmNlLHQpfXZhciBsLHUsYyxkLF8scCxmLG09bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLGg9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksZz0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvd2FybmluZy5qcyIpLCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheS5mcm9tJiYiZnVuY3Rpb24iPT10eXBlb2YgTWFwJiZyKE1hcCkmJm51bGwhPU1hcC5wcm90b3R5cGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNYXAucHJvdG90eXBlLmtleXMmJnIoTWFwLnByb3RvdHlwZS5rZXlzKSYmImZ1bmN0aW9uIj09dHlwZW9mIFNldCYmcihTZXQpJiZudWxsIT1TZXQucHJvdG90eXBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU2V0LnByb3RvdHlwZS5rZXlzJiZyKFNldC5wcm90b3R5cGUua2V5cykpO2lmKGcpe3ZhciBiPW5ldyBNYXAsRT1uZXcgU2V0O2w9ZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBiLmdldChlKX0sYz1mdW5jdGlvbihlKXtiLmRlbGV0ZShlKX0sZD1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKGIua2V5cygpKX0sXz1mdW5jdGlvbihlKXtFLmFkZChlKX0scD1mdW5jdGlvbihlKXtFLmRlbGV0ZShlKX0sZj1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKEUua2V5cygpKX19ZWxzZXt2YXIgeT17fSx2PXt9LFQ9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2V9LEE9ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUuc3Vic3RyKDEpLDEwKX07bD1mdW5jdGlvbihlLHQpe3ZhciBuPVQoZSk7eVtuXT10fSx1PWZ1bmN0aW9uKGUpe3ZhciB0PVQoZSk7cmV0dXJuIHlbdF19LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9VChlKTtkZWxldGUgeVt0XX0sZD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh5KS5tYXAoQSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9VChlKTt2W3RdPSEwfSxwPWZ1bmN0aW9uKGUpe3ZhciB0PVQoZSk7ZGVsZXRlIHZbdF19LGY9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModikubWFwKEEpfX12YXIgQz1bXSxPPXtvblNldENoaWxkcmVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49dShlKTtufHxtKCIxNDQiKSxuLmNoaWxkSURzPXQ7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0scz11KG8pO3N8fG0oIjE0MCIpLG51bGw9PXMuY2hpbGRJRHMmJiJvYmplY3QiPT10eXBlb2Ygcy5lbGVtZW50JiZudWxsIT1zLmVsZW1lbnQmJm0oIjE0MSIpLHMuaXNNb3VudGVkfHxtKCI3MSIpLG51bGw9PXMucGFyZW50SUQmJihzLnBhcmVudElEPWUpLHMucGFyZW50SUQhPT1lJiZtKCIxNDIiLG8scy5wYXJlbnRJRCxlKX19LG9uQmVmb3JlTW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe2woZSx7ZWxlbWVudDp0LHBhcmVudElEOm4sdGV4dDpudWxsLGNoaWxkSURzOltdLGlzTW91bnRlZDohMSx1cGRhdGVDb3VudDowfSl9LG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49dShlKTtuJiZuLmlzTW91bnRlZCYmKG4uZWxlbWVudD10KX0sb25Nb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD11KGUpO3R8fG0oIjE0NCIpLHQuaXNNb3VudGVkPSEwLDA9PT10LnBhcmVudElEJiZfKGUpfSxvblVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD11KGUpO3QmJnQuaXNNb3VudGVkJiZ0LnVwZGF0ZUNvdW50Kyt9LG9uVW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXt2YXIgdD11KGUpO2lmKHQpe3QuaXNNb3VudGVkPSExOzA9PT10LnBhcmVudElEJiZwKGUpfUMucHVzaChlKX0scHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOmZ1bmN0aW9uKCl7aWYoIU8uX3ByZXZlbnRQdXJnaW5nKXtmb3IodmFyIGU9MDtlPEMubGVuZ3RoO2UrKyl7byhDW2VdKX1DLmxlbmd0aD0wfX0saXNNb3VudGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXUoZSk7cmV0dXJuISF0JiZ0LmlzTW91bnRlZH0sZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7aWYoZSl7dmFyIG49aShlKSxyPWUuX293bmVyO3QrPXMobixlLl9zb3VyY2UsciYmci5nZXROYW1lKCkpfXZhciBvPWguY3VycmVudCxhPW8mJm8uX2RlYnVnSUQ7cmV0dXJuIHQrPU8uZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoYSl9LGdldFN0YWNrQWRkZW5kdW1CeUlEOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIjtlOyl0Kz1hKGUpLGU9Ty5nZXRQYXJlbnRJRChlKTtyZXR1cm4gdH0sZ2V0Q2hpbGRJRHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dShlKTtyZXR1cm4gdD90LmNoaWxkSURzOltdfSxnZXREaXNwbGF5TmFtZTpmdW5jdGlvbihlKXt2YXIgdD1PLmdldEVsZW1lbnQoZSk7cmV0dXJuIHQ/aSh0KTpudWxsfSxnZXRFbGVtZW50OmZ1bmN0aW9uKGUpe3ZhciB0PXUoZSk7cmV0dXJuIHQ/dC5lbGVtZW50Om51bGx9LGdldE93bmVySUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Ty5nZXRFbGVtZW50KGUpO3JldHVybiB0JiZ0Ll9vd25lcj90Ll9vd25lci5fZGVidWdJRDpudWxsfSxnZXRQYXJlbnRJRDpmdW5jdGlvbihlKXt2YXIgdD11KGUpO3JldHVybiB0P3QucGFyZW50SUQ6bnVsbH0sZ2V0U291cmNlOmZ1bmN0aW9uKGUpe3ZhciB0PXUoZSksbj10P3QuZWxlbWVudDpudWxsO3JldHVybiBudWxsIT1uP24uX3NvdXJjZTpudWxsfSxnZXRUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PU8uZ2V0RWxlbWVudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dDoibnVtYmVyIj09dHlwZW9mIHQ/IiIrdDpudWxsfSxnZXRVcGRhdGVDb3VudDpmdW5jdGlvbihlKXt2YXIgdD11KGUpO3JldHVybiB0P3QudXBkYXRlQ291bnQ6MH0sZ2V0Um9vdElEczpmLGdldFJlZ2lzdGVyZWRJRHM6ZCxwdXNoTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2s6ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5yZWFjdFN0YWNrKXt2YXIgbj1bXSxyPWguY3VycmVudCxvPXImJnIuX2RlYnVnSUQ7dHJ5e2ZvcihlJiZuLnB1c2goe25hbWU6bz9PLmdldERpc3BsYXlOYW1lKG8pOm51bGwsZmlsZU5hbWU6dD90LmZpbGVOYW1lOm51bGwsbGluZU51bWJlcjp0P3QubGluZU51bWJlcjpudWxsfSk7bzspe3ZhciBzPU8uZ2V0RWxlbWVudChvKSxpPU8uZ2V0UGFyZW50SUQobyksYT1PLmdldE93bmVySUQobyksbD1hP08uZ2V0RGlzcGxheU5hbWUoYSk6bnVsbCx1PXMmJnMuX3NvdXJjZTtuLnB1c2goe25hbWU6bCxmaWxlTmFtZTp1P3UuZmlsZU5hbWU6bnVsbCxsaW5lTnVtYmVyOnU/dS5saW5lTnVtYmVyOm51bGx9KSxvPWl9fWNhdGNoKGUpe31jb25zb2xlLnJlYWN0U3RhY2sobil9fSxwb3BOb25TdGFuZGFyZFdhcm5pbmdTdGFjazpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLnJlYWN0U3RhY2tFbmQmJmNvbnNvbGUucmVhY3RTdGFja0VuZCgpfX07ZS5leHBvcnRzPU99LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnQ6bnVsbH07ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01GYWN0b3JpZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIpLG89ci5jcmVhdGVGYWN0b3J5LHM9e2E6bygiYSIpLGFiYnI6bygiYWJiciIpLGFkZHJlc3M6bygiYWRkcmVzcyIpLGFyZWE6bygiYXJlYSIpLGFydGljbGU6bygiYXJ0aWNsZSIpLGFzaWRlOm8oImFzaWRlIiksYXVkaW86bygiYXVkaW8iKSxiOm8oImIiKSxiYXNlOm8oImJhc2UiKSxiZGk6bygiYmRpIiksYmRvOm8oImJkbyIpLGJpZzpvKCJiaWciKSxibG9ja3F1b3RlOm8oImJsb2NrcXVvdGUiKSxib2R5Om8oImJvZHkiKSxicjpvKCJiciIpLGJ1dHRvbjpvKCJidXR0b24iKSxjYW52YXM6bygiY2FudmFzIiksY2FwdGlvbjpvKCJjYXB0aW9uIiksY2l0ZTpvKCJjaXRlIiksY29kZTpvKCJjb2RlIiksY29sOm8oImNvbCIpLGNvbGdyb3VwOm8oImNvbGdyb3VwIiksZGF0YTpvKCJkYXRhIiksZGF0YWxpc3Q6bygiZGF0YWxpc3QiKSxkZDpvKCJkZCIpLGRlbDpvKCJkZWwiKSxkZXRhaWxzOm8oImRldGFpbHMiKSxkZm46bygiZGZuIiksZGlhbG9nOm8oImRpYWxvZyIpLGRpdjpvKCJkaXYiKSxkbDpvKCJkbCIpLGR0Om8oImR0IiksZW06bygiZW0iKSxlbWJlZDpvKCJlbWJlZCIpLGZpZWxkc2V0Om8oImZpZWxkc2V0IiksZmlnY2FwdGlvbjpvKCJmaWdjYXB0aW9uIiksZmlndXJlOm8oImZpZ3VyZSIpLGZvb3RlcjpvKCJmb290ZXIiKSxmb3JtOm8oImZvcm0iKSxoMTpvKCJoMSIpLGgyOm8oImgyIiksaDM6bygiaDMiKSxoNDpvKCJoNCIpLGg1Om8oImg1IiksaDY6bygiaDYiKSxoZWFkOm8oImhlYWQiKSxoZWFkZXI6bygiaGVhZGVyIiksaGdyb3VwOm8oImhncm91cCIpLGhyOm8oImhyIiksaHRtbDpvKCJodG1sIiksaTpvKCJpIiksaWZyYW1lOm8oImlmcmFtZSIpLGltZzpvKCJpbWciKSxpbnB1dDpvKCJpbnB1dCIpLGluczpvKCJpbnMiKSxrYmQ6bygia2JkIiksa2V5Z2VuOm8oImtleWdlbiIpLGxhYmVsOm8oImxhYmVsIiksbGVnZW5kOm8oImxlZ2VuZCIpLGxpOm8oImxpIiksbGluazpvKCJsaW5rIiksbWFpbjpvKCJtYWluIiksbWFwOm8oIm1hcCIpLG1hcms6bygibWFyayIpLG1lbnU6bygibWVudSIpLG1lbnVpdGVtOm8oIm1lbnVpdGVtIiksbWV0YTpvKCJtZXRhIiksbWV0ZXI6bygibWV0ZXIiKSxuYXY6bygibmF2Iiksbm9zY3JpcHQ6bygibm9zY3JpcHQiKSxvYmplY3Q6bygib2JqZWN0Iiksb2w6bygib2wiKSxvcHRncm91cDpvKCJvcHRncm91cCIpLG9wdGlvbjpvKCJvcHRpb24iKSxvdXRwdXQ6bygib3V0cHV0IikscDpvKCJwIikscGFyYW06bygicGFyYW0iKSxwaWN0dXJlOm8oInBpY3R1cmUiKSxwcmU6bygicHJlIikscHJvZ3Jlc3M6bygicHJvZ3Jlc3MiKSxxOm8oInEiKSxycDpvKCJycCIpLHJ0Om8oInJ0IikscnVieTpvKCJydWJ5IiksczpvKCJzIiksc2FtcDpvKCJzYW1wIiksc2NyaXB0Om8oInNjcmlwdCIpLHNlY3Rpb246bygic2VjdGlvbiIpLHNlbGVjdDpvKCJzZWxlY3QiKSxzbWFsbDpvKCJzbWFsbCIpLHNvdXJjZTpvKCJzb3VyY2UiKSxzcGFuOm8oInNwYW4iKSxzdHJvbmc6bygic3Ryb25nIiksc3R5bGU6bygic3R5bGUiKSxzdWI6bygic3ViIiksc3VtbWFyeTpvKCJzdW1tYXJ5Iiksc3VwOm8oInN1cCIpLHRhYmxlOm8oInRhYmxlIiksdGJvZHk6bygidGJvZHkiKSx0ZDpvKCJ0ZCIpLHRleHRhcmVhOm8oInRleHRhcmVhIiksdGZvb3Q6bygidGZvb3QiKSx0aDpvKCJ0aCIpLHRoZWFkOm8oInRoZWFkIiksdGltZTpvKCJ0aW1lIiksdGl0bGU6bygidGl0bGUiKSx0cjpvKCJ0ciIpLHRyYWNrOm8oInRyYWNrIiksdTpvKCJ1IiksdWw6bygidWwiKSx2YXI6bygidmFyIiksdmlkZW86bygidmlkZW8iKSx3YnI6bygid2JyIiksY2lyY2xlOm8oImNpcmNsZSIpLGNsaXBQYXRoOm8oImNsaXBQYXRoIiksZGVmczpvKCJkZWZzIiksZWxsaXBzZTpvKCJlbGxpcHNlIiksZzpvKCJnIiksaW1hZ2U6bygiaW1hZ2UiKSxsaW5lOm8oImxpbmUiKSxsaW5lYXJHcmFkaWVudDpvKCJsaW5lYXJHcmFkaWVudCIpLG1hc2s6bygibWFzayIpLHBhdGg6bygicGF0aCIpLHBhdHRlcm46bygicGF0dGVybiIpLHBvbHlnb246bygicG9seWdvbiIpLHBvbHlsaW5lOm8oInBvbHlsaW5lIikscmFkaWFsR3JhZGllbnQ6bygicmFkaWFsR3JhZGllbnQiKSxyZWN0Om8oInJlY3QiKSxzdG9wOm8oInN0b3AiKSxzdmc6bygic3ZnIiksdGV4dDpvKCJ0ZXh0IiksdHNwYW46bygidHNwYW4iKX07ZS5leHBvcnRzPXN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMCE9PWUucmVmfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHZvaWQgMCE9PWUua2V5fXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lci5qcyIpLGE9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiKSx1PXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH0sYz1mdW5jdGlvbihlLHQsbixyLG8scyxpKXt2YXIgYT17JCR0eXBlb2Y6bCx0eXBlOmUsa2V5OnQscmVmOm4scHJvcHM6aSxfb3duZXI6c307cmV0dXJuIGF9O2MuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHMsbD17fSxkPW51bGwsXz1udWxsO2lmKG51bGwhPXQpe3IodCkmJihfPXQucmVmKSxvKHQpJiYoZD0iIit0LmtleSksdm9pZCAwPT09dC5fX3NlbGY/bnVsbDp0Ll9fc2VsZix2b2lkIDA9PT10Ll9fc291cmNlP251bGw6dC5fX3NvdXJjZTtmb3IocyBpbiB0KWEuY2FsbCh0LHMpJiYhdS5oYXNPd25Qcm9wZXJ0eShzKSYmKGxbc109dFtzXSl9dmFyIHA9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1wKWwuY2hpbGRyZW49bjtlbHNlIGlmKHA+MSl7Zm9yKHZhciBmPUFycmF5KHApLG09MDttPHA7bSsrKWZbbV09YXJndW1lbnRzW20rMl07bC5jaGlsZHJlbj1mfWlmKGUmJmUuZGVmYXVsdFByb3BzKXt2YXIgaD1lLmRlZmF1bHRQcm9wcztmb3IocyBpbiBoKXZvaWQgMD09PWxbc10mJihsW3NdPWhbc10pfXJldHVybiBjKGUsZCxfLDAsMCxpLmN1cnJlbnQsbCl9LGMuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1jLmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSxjLmNsb25lQW5kUmVwbGFjZUtleT1mdW5jdGlvbihlLHQpe3JldHVybiBjKGUudHlwZSx0LGUucmVmLGUuX3NlbGYsZS5fc291cmNlLGUuX293bmVyLGUucHJvcHMpfSxjLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIGwsZD1zKHt9LGUucHJvcHMpLF89ZS5rZXkscD1lLnJlZixmPShlLl9zZWxmLGUuX3NvdXJjZSxlLl9vd25lcik7aWYobnVsbCE9dCl7cih0KSYmKHA9dC5yZWYsZj1pLmN1cnJlbnQpLG8odCkmJihfPSIiK3Qua2V5KTt2YXIgbTtlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJihtPWUudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihsIGluIHQpYS5jYWxsKHQsbCkmJiF1Lmhhc093blByb3BlcnR5KGwpJiYodm9pZCAwPT09dFtsXSYmdm9pZCAwIT09bT9kW2xdPW1bbF06ZFtsXT10W2xdKX12YXIgaD1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWgpZC5jaGlsZHJlbj1uO2Vsc2UgaWYoaD4xKXtmb3IodmFyIGc9QXJyYXkoaCksYj0wO2I8aDtiKyspZ1tiXT1hcmd1bWVudHNbYisyXTtkLmNoaWxkcmVuPWd9cmV0dXJuIGMoZS50eXBlLF8scCwwLDAsZixkKX0sYy5pc1ZhbGlkRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09bH0sZS5leHBvcnRzPWN9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3ROb29wVXBkYXRlUXVldWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSx7aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0KXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQpe319KTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiksbz1yLmlzVmFsaWRFbGVtZW50LHM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5LmpzIik7ZS5leHBvcnRzPXMobyl9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RWZXJzaW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iMTUuNi4yIn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jYW5EZWZpbmVQcm9wZXJ0eS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0hMTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RCYXNlQ2xhc3Nlcy5qcyIpLG89ci5Db21wb25lbnQscz1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50LmpzIiksaT1zLmlzVmFsaWRFbGVtZW50LGE9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeS5qcyIpO2UuZXhwb3J0cz1sKG8saSxhKX0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9nZXRJdGVyYXRvckZuLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmKG8mJmVbb118fGVbc10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fXZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixzPSJAQGl0ZXJhdG9yIjtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG8rK312YXIgbz0xO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL2xvd1ByaW9yaXR5V2FybmluZy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvb25seUNoaWxkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHMuaXNWYWxpZEVsZW1lbnQoZSl8fG8oIjE0MyIpLGV9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIpO24oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL2ludmFyaWFudC5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKyspbis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89bmV3IEVycm9yKG4pO3Rocm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNUb1BvcD0xLG99ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZS5rZXk/dS5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4scyl7dmFyIF89dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1fJiYiYm9vbGVhbiIhPT1ffHwoZT1udWxsKSxudWxsPT09ZXx8InN0cmluZyI9PT1ffHwibnVtYmVyIj09PV98fCJvYmplY3QiPT09XyYmZS4kJHR5cGVvZj09PWEpcmV0dXJuIG4ocyxlLCIiPT09dD9jK3IoZSwwKTp0KSwxO3ZhciBwLGYsbT0wLGg9IiI9PT10P2M6dCtkO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspcD1lW2ddLGY9aCtyKHAsZyksbSs9byhwLGYsbixzKTtlbHNle3ZhciBiPWwoZSk7aWYoYil7dmFyIEUseT1iLmNhbGwoZSk7aWYoYiE9PWUuZW50cmllcylmb3IodmFyIHY9MDshKEU9eS5uZXh0KCkpLmRvbmU7KXA9RS52YWx1ZSxmPWgrcihwLHYrKyksbSs9byhwLGYsbixzKTtlbHNlIGZvcig7IShFPXkubmV4dCgpKS5kb25lOyl7dmFyIFQ9RS52YWx1ZTtUJiYocD1UWzFdLGY9aCt1LmVzY2FwZShUWzBdKStkK3IocCwwKSxtKz1vKHAsZixuLHMpKX19ZWxzZSBpZigib2JqZWN0Ij09PV8pe3ZhciBBPSIiLEM9U3RyaW5nKGUpO2koIjMxIiwiW29iamVjdCBPYmplY3RdIj09PUM/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAiKSsifSI6QyxBKX19cmV0dXJuIG19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIG51bGw9PWU/MDpvKGUsIiIsdCxuKX12YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9zd2FnZ2VyLXVpL25vZGVfbW9kdWxlcy9yZWFjdC9saWIvcmVhY3RQcm9kSW52YXJpYW50LmpzIiksYT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudFN5bWJvbC5qcyIpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9nZXRJdGVyYXRvckZuLmpzIiksdT0obigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvZmJqcy9saWIvaW52YXJpYW50LmpzIiksbigiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIikpLGM9KG4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL2ZianMvbGliL3dhcm5pbmcuanMiKSwiLiIpLGQ9IjoiO2UuZXhwb3J0cz1zfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvbm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdC5qcyIpfSwiLi9ub2RlX21vZHVsZXMvc3dhZ2dlci11aS9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbj1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/bzphcmd1bWVudHNbMV0sbj1udWxsLHI9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxzPUFycmF5KG8pLGk9MDtpPG87aSsrKXNbaV09YXJndW1lbnRzW2ldO3JldHVybiBudWxsIT09biYmbi5sZW5ndGg9PT1zLmxlbmd0aCYmcy5ldmVyeShmdW5jdGlvbihlLHIpe3JldHVybiB0KGUsbltyXSl9KT9yOihyPWUuYXBwbHkodm9pZCAwLHMpLG49cyxyKX19ZnVuY3Rpb24gaShlKXt2YXIgdD1BcnJheS5pc0FycmF5KGVbMF0pP2VbMF06ZTtpZighdC5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX0pKXt2YXIgbj10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9KS5qb2luKCIsICIpO3Rocm93IG5ldyBFcnJvcigiU2VsZWN0b3IgY3JlYXRvcnMgZXhwZWN0IGFsbCBpbnB1dC1zZWxlY3RvcnMgdG8gYmUgZnVuY3Rpb25zLCBpbnN0ZWFkIHJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdHlwZXM6IFsiK24rIl0iKX1yZXR1cm4gdH1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxvPTE7bzx0O28rKyluW28tMV09YXJndW1lbnRzW29dO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkodCkscz0wO3M8dDtzKyspb1tzXT1hcmd1bWVudHNbc107dmFyIGE9MCxsPW8ucG9wKCksdT1pKG8pLGM9ZS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKCl7cmV0dXJuIGErKyxsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfV0uY29uY2F0KG4pKSxkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShuPjI/bi0yOjApLHM9MjtzPG47cysrKW9bcy0yXT1hcmd1bWVudHNbc107dmFyIGk9dS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4uYXBwbHkodm9pZCAwLFtlLHRdLmNvbmNhdChvKSl9KTtyZXR1cm4gYy5hcHBseSh2b2lkIDAscihpKSl9O3JldHVybiBkLnJlc3VsdEZ1bmM9bCxkLnJlY29tcHV0YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGQucmVzZXRSZWNvbXB1dGF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBhPTB9LGR9fWZ1bmN0aW9uIGwoKXtyZXR1cm4gYShzKS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX1mdW5jdGlvbiB1KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT9sOmFyZ3VtZW50c1sxXTtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJjcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3IgZXhwZWN0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qgd2hlcmUgZWFjaCBwcm9wZXJ0eSBpcyBhIHNlbGVjdG9yLCBpbnN0ZWFkIHJlY2VpdmVkIGEgIit0eXBlb2YgZSk7dmFyIG49T2JqZWN0LmtleXMoZSk7cmV0dXJuIHQobi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSxmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVtuW3JdXT10LGV9LHt9KX0pfXQuX19lc01vZHVsZT0hMCx0LmRlZmF1bHRNZW1vaXplPXMsdC5jcmVhdGVTZWxlY3RvckNyZWF0b3I9YSx0LmNyZWF0ZVNlbGVjdG9yPWwsdC5jcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3I9dX0sIi4vbm9kZV9tb2R1bGVzL3N5bWJvbC1vYnNlcnZhYmxlL2VzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe3ZhciBvLHM9bigiLi9ub2RlX21vZHVsZXMvc3ltYm9sLW9ic2VydmFibGUvZXMvcG9ueWZpbGwuanMiKTtvPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1lP2U6cjt2YXIgaT1PYmplY3Qocy5hKShvKTt0LmE9aX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikoZSkpfSwiLi9ub2RlX21vZHVsZXMvc3ltYm9sLW9ic2VydmFibGUvZXMvcG9ueWZpbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuPWUuU3ltYm9sO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24ub2JzZXJ2YWJsZT90PW4ub2JzZXJ2YWJsZToodD1uKCJvYnNlcnZhYmxlIiksbi5vYnNlcnZhYmxlPXQpOnQ9IkBAb2JzZXJ2YWJsZSIsdH10LmE9cn0sIi4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fY2xlYXJGbj10fXZhciBvPXZvaWQgMCE9PWUmJmV8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8d2luZG93LHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O3Quc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgcihzLmNhbGwoc2V0VGltZW91dCxvLGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sdC5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgcihzLmNhbGwoc2V0SW50ZXJ2YWwsbyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSx0LmNsZWFyVGltZW91dD10LmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24oZSl7ZSYmZS5jbG9zZSgpfSxyLnByb3RvdHlwZS51bnJlZj1yLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LHIucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKG8sdGhpcy5faWQpfSx0LmVucm9sbD1mdW5jdGlvbihlLHQpe2NsZWFyVGltZW91dChlLl9pZGxlVGltZW91dElkKSxlLl9pZGxlVGltZW91dD10fSx0LnVuZW5yb2xsPWZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChlLl9pZGxlVGltZW91dElkKSxlLl9pZGxlVGltZW91dD0tMX0sdC5fdW5yZWZBY3RpdmU9dC5hY3RpdmU9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpO3ZhciB0PWUuX2lkbGVUaW1lb3V0O3Q+PTAmJihlLl9pZGxlVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9vblRpbWVvdXQmJmUuX29uVGltZW91dCgpfSx0KSl9LG4oIi4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiKSx0LnNldEltbWVkaWF0ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuc2V0SW1tZWRpYXRlfHx2b2lkIDAhPT1lJiZlLnNldEltbWVkaWF0ZXx8dGhpcyYmdGhpcy5zZXRJbW1lZGlhdGUsdC5jbGVhckltbWVkaWF0ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuY2xlYXJJbW1lZGlhdGV8fHZvaWQgMCE9PWUmJmUuY2xlYXJJbW1lZGlhdGV8fHRoaXMmJnRoaXMuY2xlYXJJbW1lZGlhdGV9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3RpbWVycy1leHQvbWF4LXRpbWVvdXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPTIxNDc0ODM2NDd9LCIuL25vZGVfbW9kdWxlcy90aW1lcnMtZXh0L3ZhbGlkLXRpbWVvdXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvZXM1LWV4dC9udW1iZXIvdG8tcG9zLWludGVnZXIuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3RpbWVycy1leHQvbWF4LXRpbWVvdXQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoKGU9cihlKSk+byl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBleGNlZWRzIG1heGltdW0gcG9zc2libGUgdGltZW91dCIpO3JldHVybiBlfX0sIi4vbm9kZV9tb2R1bGVzL3RvLWNhbWVsLWNhc2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBvKGUpLnJlcGxhY2UoL1xzKFx3KS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pfXZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3RvLXNwYWNlLWNhc2UvaW5kZXguanMiKTtlLmV4cG9ydHM9cn0sIi4vbm9kZV9tb2R1bGVzL3RvLW5vLWNhc2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gcy50ZXN0KGUpP2UudG9Mb3dlckNhc2UoKTppLnRlc3QoZSk/KHIoZSl8fGUpLnRvTG93ZXJDYXNlKCk6YS50ZXN0KGUpP28oZSkudG9Mb3dlckNhc2UoKTplLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBsYWNlKGwsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iICIrdDoiIn0pfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUucmVwbGFjZSh1LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCsiICIrbi50b0xvd2VyQ2FzZSgpLnNwbGl0KCIiKS5qb2luKCIgIil9KX1lLmV4cG9ydHM9bjt2YXIgcz0vXHMvLGk9LyhffC18XC58OikvLGE9LyhbYS16XVtBLVpdfFtBLVpdW2Etel0pLyxsPS9bXFdfXSsoLnwkKS9nLHU9LyguKShbQS1aXSspL2d9LCIuL25vZGVfbW9kdWxlcy90by1zcGFjZS1jYXNlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKS5yZXBsYWNlKC9bXFdfXSsoLnwkKS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/IiAiK3Q6IiJ9KS50cmltKCl9dmFyIG89bigiLi9ub2RlX21vZHVsZXMvdG8tbm8tY2FzZS9pbmRleC5qcyIpO2UuZXhwb3J0cz1yfSwiLi9ub2RlX21vZHVsZXMvdG9nZ2xlLXNlbGVjdGlvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtpZighZS5yYW5nZUNvdW50KXJldHVybiBmdW5jdGlvbigpe307Zm9yKHZhciB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsbj1bXSxyPTA7cjxlLnJhbmdlQ291bnQ7cisrKW4ucHVzaChlLmdldFJhbmdlQXQocikpO3N3aXRjaCh0LnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJJTlBVVCI6Y2FzZSJURVhUQVJFQSI6dC5ibHVyKCk7YnJlYWs7ZGVmYXVsdDp0PW51bGx9cmV0dXJuIGUucmVtb3ZlQWxsUmFuZ2VzKCksZnVuY3Rpb24oKXsiQ2FyZXQiPT09ZS50eXBlJiZlLnJlbW92ZUFsbFJhbmdlcygpLGUucmFuZ2VDb3VudHx8bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuYWRkUmFuZ2UodCl9KSx0JiZ0LmZvY3VzKCl9fX0sIi4vbm9kZV9tb2R1bGVzL3R5cG8tanMvdHlwby5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0LHIpe3ZhciBvOyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtvPWZ1bmN0aW9uKGUsbixyLG8pe2Z1bmN0aW9uIHMoZSx0KXt2YXIgbj1mLl9yZWFkRmlsZShlLG51bGwsby5hc3luY0xvYWQpO28uYXN5bmNMb2FkP24udGhlbihmdW5jdGlvbihlKXt0KGUpfSk6dChuKX1mdW5jdGlvbiBpKGUpe249ZSxyJiZsKCl9ZnVuY3Rpb24gYShlKXtyPWUsbiYmbCgpfWZ1bmN0aW9uIGwoKXtmb3IoZi5ydWxlcz1mLl9wYXJzZUFGRihuKSxmLmNvbXBvdW5kUnVsZUNvZGVzPXt9LGM9MCxfPWYuY29tcG91bmRSdWxlcy5sZW5ndGg7YzxfO2MrKyl7dmFyIGU9Zi5jb21wb3VuZFJ1bGVzW2NdO2ZvcihkPTAscD1lLmxlbmd0aDtkPHA7ZCsrKWYuY29tcG91bmRSdWxlQ29kZXNbZVtkXV09W119Ik9OTFlJTkNPTVBPVU5EImluIGYuZmxhZ3MmJihmLmNvbXBvdW5kUnVsZUNvZGVzW2YuZmxhZ3MuT05MWUlOQ09NUE9VTkRdPVtdKSxmLmRpY3Rpb25hcnlUYWJsZT1mLl9wYXJzZURJQyhyKTtmb3IoYyBpbiBmLmNvbXBvdW5kUnVsZUNvZGVzKTA9PT1mLmNvbXBvdW5kUnVsZUNvZGVzW2NdLmxlbmd0aCYmZGVsZXRlIGYuY29tcG91bmRSdWxlQ29kZXNbY107Zm9yKGM9MCxfPWYuY29tcG91bmRSdWxlcy5sZW5ndGg7YzxfO2MrKyl7dmFyIHQ9Zi5jb21wb3VuZFJ1bGVzW2NdLHM9IiI7Zm9yKGQ9MCxwPXQubGVuZ3RoO2Q8cDtkKyspe3ZhciBpPXRbZF07aSBpbiBmLmNvbXBvdW5kUnVsZUNvZGVzP3MrPSIoIitmLmNvbXBvdW5kUnVsZUNvZGVzW2ldLmpvaW4oInwiKSsiKSI6cys9aX1mLmNvbXBvdW5kUnVsZXNbY109bmV3IFJlZ0V4cChzLCJpIil9Zi5sb2FkZWQ9ITAsby5hc3luY0xvYWQmJm8ubG9hZGVkQ2FsbGJhY2smJm8ubG9hZGVkQ2FsbGJhY2soZil9bz1vfHx7fSx0aGlzLmRpY3Rpb25hcnk9bnVsbCx0aGlzLnJ1bGVzPXt9LHRoaXMuZGljdGlvbmFyeVRhYmxlPXt9LHRoaXMuY29tcG91bmRSdWxlcz1bXSx0aGlzLmNvbXBvdW5kUnVsZUNvZGVzPXt9LHRoaXMucmVwbGFjZW1lbnRUYWJsZT1bXSx0aGlzLmZsYWdzPW8uZmxhZ3N8fHt9LHRoaXMubWVtb2l6ZWQ9e30sdGhpcy5sb2FkZWQ9ITE7dmFyIHUsYyxkLF8scCxmPXRoaXM7cmV0dXJuIGUmJihmLmRpY3Rpb25hcnk9ZSxuJiZyP2woKToidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmImNocm9tZSJpbiB3aW5kb3cmJiJleHRlbnNpb24iaW4gd2luZG93LmNocm9tZSYmImdldFVSTCJpbiB3aW5kb3cuY2hyb21lLmV4dGVuc2lvbj8odT1vLmRpY3Rpb25hcnlQYXRoP28uZGljdGlvbmFyeVBhdGg6InR5cG8vZGljdGlvbmFyaWVzIixufHxzKGNocm9tZS5leHRlbnNpb24uZ2V0VVJMKHUrIi8iK2UrIi8iK2UrIi5hZmYiKSxpKSxyfHxzKGNocm9tZS5leHRlbnNpb24uZ2V0VVJMKHUrIi8iK2UrIi8iK2UrIi5kaWMiKSxhKSk6KHU9by5kaWN0aW9uYXJ5UGF0aD9vLmRpY3Rpb25hcnlQYXRoOnQrIi9kaWN0aW9uYXJpZXMiLG58fHModSsiLyIrZSsiLyIrZSsiLmFmZiIsaSkscnx8cyh1KyIvIitlKyIvIitlKyIuZGljIixhKSkpLHRoaXN9LG8ucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJih0aGlzW3RdPWVbdF0pO3JldHVybiB0aGlzfSxfcmVhZEZpbGU6ZnVuY3Rpb24oZSx0LG8pe2lmKHQ9dHx8InV0ZjgiLCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3Qpe3ZhciBzLGk9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBpLm9wZW4oIkdFVCIsZSxvKSxvJiYocz1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe2kub25sb2FkPWZ1bmN0aW9uKCl7MjAwPT09aS5zdGF0dXM/ZShpLnJlc3BvbnNlVGV4dCk6dChpLnN0YXR1c1RleHQpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXt0KGkuc3RhdHVzVGV4dCl9fSkpLGkub3ZlcnJpZGVNaW1lVHlwZSYmaS5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PSIrdCksaS5zZW5kKG51bGwpLG8/czppLnJlc3BvbnNlVGV4dH12YXIgYT1uKDExKTt0cnl7aWYoYS5leGlzdHNTeW5jKGUpKXt2YXIgbD1hLnN0YXRTeW5jKGUpLHU9YS5vcGVuU3luYyhlLCJyIiksYz1uZXcgcihsLnNpemUpO3JldHVybiBhLnJlYWRTeW5jKHUsYywwLGMubGVuZ3RoLG51bGwpLGMudG9TdHJpbmcodCwwLGMubGVuZ3RoKX1jb25zb2xlLmxvZygiUGF0aCAiK2UrIiBkb2VzIG5vdCBleGlzdC4iKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5sb2coZSksIiJ9fSxfcGFyc2VBRkY6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLGEsbCx1PXt9O2U9dGhpcy5fcmVtb3ZlQWZmaXhDb21tZW50cyhlKTt2YXIgYz1lLnNwbGl0KCJcbiIpO2ZvcihzPTAsYT1jLmxlbmd0aDtzPGE7cysrKXt0PWNbc107dmFyIGQ9dC5zcGxpdCgvXHMrLyksXz1kWzBdO2lmKCJQRlgiPT1ffHwiU0ZYIj09Xyl7dmFyIHA9ZFsxXSxmPWRbMl07cj1wYXJzZUludChkWzNdLDEwKTt2YXIgbT1bXTtmb3IoaT1zKzEsbD1zKzErcjtpPGw7aSsrKXtuPWNbaV0sbz1uLnNwbGl0KC9ccysvKTt2YXIgaD1vWzJdLGc9b1szXS5zcGxpdCgiLyIpLGI9Z1swXTsiMCI9PT1iJiYoYj0iIik7dmFyIEU9dGhpcy5wYXJzZVJ1bGVDb2RlcyhnWzFdKSx5PW9bNF0sdj17fTt2LmFkZD1iLEUubGVuZ3RoPjAmJih2LmNvbnRpbnVhdGlvbkNsYXNzZXM9RSksIi4iIT09eSYmKHYubWF0Y2g9IlNGWCI9PT1fP25ldyBSZWdFeHAoeSsiJCIpOm5ldyBSZWdFeHAoIl4iK3kpKSwiMCIhPWgmJih2LnJlbW92ZT0iU0ZYIj09PV8/bmV3IFJlZ0V4cChoKyIkIik6aCksbS5wdXNoKHYpfXVbcF09e3R5cGU6Xyxjb21iaW5lYWJsZToiWSI9PWYsZW50cmllczptfSxzKz1yfWVsc2UgaWYoIkNPTVBPVU5EUlVMRSI9PT1fKXtmb3Iocj1wYXJzZUludChkWzFdLDEwKSxpPXMrMSxsPXMrMStyO2k8bDtpKyspdD1jW2ldLG89dC5zcGxpdCgvXHMrLyksdGhpcy5jb21wb3VuZFJ1bGVzLnB1c2gob1sxXSk7cys9cn1lbHNlIlJFUCI9PT1fPyhvPXQuc3BsaXQoL1xzKy8pLDM9PT1vLmxlbmd0aCYmdGhpcy5yZXBsYWNlbWVudFRhYmxlLnB1c2goW29bMV0sb1syXV0pKTp0aGlzLmZsYWdzW19dPWRbMV19cmV0dXJuIHV9LF9yZW1vdmVBZmZpeENvbW1lbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXlxzKiMuKiQvZ20sIiIpLGU9ZS5yZXBsYWNlKC9eXHNccyovbSwiIikucmVwbGFjZSgvXHNccyokL20sIiIpLGU9ZS5yZXBsYWNlKC9cbnsyLH0vZywiXG4iKSxlPWUucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIil9LF9wYXJzZURJQzpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7ci5oYXNPd25Qcm9wZXJ0eShlKXx8KHJbZV09bnVsbCksdC5sZW5ndGg+MCYmKG51bGw9PT1yW2VdJiYocltlXT1bXSkscltlXS5wdXNoKHQpKX1lPXRoaXMuX3JlbW92ZURpY0NvbW1lbnRzKGUpO2Zvcih2YXIgbj1lLnNwbGl0KCJcbiIpLHI9e30sbz0xLHM9bi5sZW5ndGg7bzxzO28rKyl7dmFyIGk9bltvXSxhPWkuc3BsaXQoIi8iLDIpLGw9YVswXTtpZihhLmxlbmd0aD4xKXt2YXIgdT10aGlzLnBhcnNlUnVsZUNvZGVzKGFbMV0pOyJORUVEQUZGSVgiaW4gdGhpcy5mbGFncyYmLTEhPXUuaW5kZXhPZih0aGlzLmZsYWdzLk5FRURBRkZJWCl8fHQobCx1KTtmb3IodmFyIGM9MCxkPXUubGVuZ3RoO2M8ZDtjKyspe3ZhciBfPXVbY10scD10aGlzLnJ1bGVzW19dO2lmKHApZm9yKHZhciBmPXRoaXMuX2FwcGx5UnVsZShsLHApLG09MCxoPWYubGVuZ3RoO208aDttKyspe3ZhciBnPWZbbV07aWYodChnLFtdKSxwLmNvbWJpbmVhYmxlKWZvcih2YXIgYj1jKzE7YjxkO2IrKyl7dmFyIEU9dVtiXSx5PXRoaXMucnVsZXNbRV07aWYoeSYmeS5jb21iaW5lYWJsZSYmcC50eXBlIT15LnR5cGUpZm9yKHZhciB2PXRoaXMuX2FwcGx5UnVsZShnLHkpLFQ9MCxBPXYubGVuZ3RoO1Q8QTtUKyspe3ZhciBDPXZbVF07dChDLFtdKX19fV8gaW4gdGhpcy5jb21wb3VuZFJ1bGVDb2RlcyYmdGhpcy5jb21wb3VuZFJ1bGVDb2Rlc1tfXS5wdXNoKGwpfX1lbHNlIHQobC50cmltKCksW10pfXJldHVybiByfSxfcmVtb3ZlRGljQ29tbWVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9eXHQuKiQvZ20sIiIpfSxwYXJzZVJ1bGVDb2RlczpmdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTtpZighKCJGTEFHImluIHRoaXMuZmxhZ3MpKXJldHVybiBlLnNwbGl0KCIiKTtpZigibG9uZyI9PT10aGlzLmZsYWdzLkZMQUcpe2Zvcih2YXIgdD1bXSxuPTAscj1lLmxlbmd0aDtuPHI7bis9Mil0LnB1c2goZS5zdWJzdHIobiwyKSk7cmV0dXJuIHR9cmV0dXJuIm51bSI9PT10aGlzLmZsYWdzLkZMQUc/ZS5zcGxpdCgiLCIpOnZvaWQgMH0sX2FwcGx5UnVsZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LmVudHJpZXMscj1bXSxvPTAscz1uLmxlbmd0aDtvPHM7bysrKXt2YXIgaT1uW29dO2lmKCFpLm1hdGNofHxlLm1hdGNoKGkubWF0Y2gpKXt2YXIgYT1lO2lmKGkucmVtb3ZlJiYoYT1hLnJlcGxhY2UoaS5yZW1vdmUsIiIpKSwiU0ZYIj09PXQudHlwZT9hKz1pLmFkZDphPWkuYWRkK2Esci5wdXNoKGEpLCJjb250aW51YXRpb25DbGFzc2VzImluIGkpZm9yKHZhciBsPTAsdT1pLmNvbnRpbnVhdGlvbkNsYXNzZXMubGVuZ3RoO2w8dTtsKyspe3ZhciBjPXRoaXMucnVsZXNbaS5jb250aW51YXRpb25DbGFzc2VzW2xdXTtjJiYocj1yLmNvbmNhdCh0aGlzLl9hcHBseVJ1bGUoYSxjKSkpfX19cmV0dXJuIHJ9LGNoZWNrOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxvYWRlZCl0aHJvdyJEaWN0aW9uYXJ5IG5vdCBsb2FkZWQuIjt2YXIgdD1lLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpO2lmKHRoaXMuY2hlY2tFeGFjdCh0KSlyZXR1cm4hMDtpZih0LnRvVXBwZXJDYXNlKCk9PT10KXt2YXIgbj10WzBdK3Quc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5oYXNGbGFnKG4sIktFRVBDQVNFIikpcmV0dXJuITE7aWYodGhpcy5jaGVja0V4YWN0KG4pKXJldHVybiEwfXZhciByPXQudG9Mb3dlckNhc2UoKTtpZihyIT09dCl7aWYodGhpcy5oYXNGbGFnKHIsIktFRVBDQVNFIikpcmV0dXJuITE7aWYodGhpcy5jaGVja0V4YWN0KHIpKXJldHVybiEwfXJldHVybiExfSxjaGVja0V4YWN0OmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxvYWRlZCl0aHJvdyJEaWN0aW9uYXJ5IG5vdCBsb2FkZWQuIjt2YXIgdCxuLHI9dGhpcy5kaWN0aW9uYXJ5VGFibGVbZV07aWYodm9pZCAwPT09cil7aWYoIkNPTVBPVU5ETUlOImluIHRoaXMuZmxhZ3MmJmUubGVuZ3RoPj10aGlzLmZsYWdzLkNPTVBPVU5ETUlOKWZvcih0PTAsbj10aGlzLmNvbXBvdW5kUnVsZXMubGVuZ3RoO3Q8bjt0KyspaWYoZS5tYXRjaCh0aGlzLmNvbXBvdW5kUnVsZXNbdF0pKXJldHVybiEwfWVsc2V7aWYobnVsbD09PXIpcmV0dXJuITA7aWYoIm9iamVjdCI9PXR5cGVvZiByKWZvcih0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWlmKCF0aGlzLmhhc0ZsYWcoZSwiT05MWUlOQ09NUE9VTkQiLHJbdF0pKXJldHVybiEwfXJldHVybiExfSxoYXNGbGFnOmZ1bmN0aW9uKGUsdCxuKXtpZighdGhpcy5sb2FkZWQpdGhyb3ciRGljdGlvbmFyeSBub3QgbG9hZGVkLiI7cmV0dXJuISEodCBpbiB0aGlzLmZsYWdzJiYodm9pZCAwPT09biYmKG49QXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0aGlzLmRpY3Rpb25hcnlUYWJsZVtlXSkpLG4mJi0xIT09bi5pbmRleE9mKHRoaXMuZmxhZ3NbdF0pKSl9LGFscGhhYmV0OiIiLHN1Z2dlc3Q6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0LG4scixvLHMsaSxhPVtdO2Zvcih0PTAsbz1lLmxlbmd0aDt0PG87dCsrKXt2YXIgbD1lW3RdO2ZvcihuPTAscz1sLmxlbmd0aCsxO248cztuKyspe3ZhciBjPVtsLnN1YnN0cmluZygwLG4pLGwuc3Vic3RyaW5nKG4pXTtpZihjWzFdJiZhLnB1c2goY1swXStjWzFdLnN1YnN0cmluZygxKSksY1sxXS5sZW5ndGg+MSYmY1sxXVsxXSE9PWNbMV1bMF0mJmEucHVzaChjWzBdK2NbMV1bMV0rY1sxXVswXStjWzFdLnN1YnN0cmluZygyKSksY1sxXSlmb3Iocj0wLGk9dS5hbHBoYWJldC5sZW5ndGg7cjxpO3IrKyl1LmFscGhhYmV0W3JdIT1jWzFdLnN1YnN0cmluZygwLDEpJiZhLnB1c2goY1swXSt1LmFscGhhYmV0W3JdK2NbMV0uc3Vic3RyaW5nKDEpKTtpZihjWzFdKWZvcihyPTAsaT11LmFscGhhYmV0Lmxlbmd0aDtyPGk7cisrKWEucHVzaChjWzBdK3UuYWxwaGFiZXRbcl0rY1sxXSl9fXJldHVybiBhfWZ1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUubGVuZ3RoO248cjtuKyspdS5jaGVjayhlW25dKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWlmKCF0aGlzLmxvYWRlZCl0aHJvdyJEaWN0aW9uYXJ5IG5vdCBsb2FkZWQuIjtpZih0PXR8fDUsdGhpcy5tZW1vaXplZC5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIG89dGhpcy5tZW1vaXplZFtlXS5saW1pdDtpZih0PD1vfHx0aGlzLm1lbW9pemVkW2VdLnN1Z2dlc3Rpb25zLmxlbmd0aDxvKXJldHVybiB0aGlzLm1lbW9pemVkW2VdLnN1Z2dlc3Rpb25zLnNsaWNlKDAsdCl9aWYodGhpcy5jaGVjayhlKSlyZXR1cm5bXTtmb3IodmFyIHM9MCxpPXRoaXMucmVwbGFjZW1lbnRUYWJsZS5sZW5ndGg7czxpO3MrKyl7dmFyIGE9dGhpcy5yZXBsYWNlbWVudFRhYmxlW3NdO2lmKC0xIT09ZS5pbmRleE9mKGFbMF0pKXt2YXIgbD1lLnJlcGxhY2UoYVswXSxhWzFdKTtpZih0aGlzLmNoZWNrKGwpKXJldHVybltsXX19dmFyIHU9dGhpcztyZXR1cm4gdS5hbHBoYWJldD0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHRoaXMubWVtb2l6ZWRbZV09e3N1Z2dlc3Rpb25zOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZVsxXTx0WzFdPy0xOjF9dmFyIHMsaSxhPW4oW2VdKSxsPW4oYSksYz1yKGEuY29uY2F0KGwpKSxkPXt9O2ZvcihzPTAsaT1jLmxlbmd0aDtzPGk7cysrKWNbc11pbiBkP2RbY1tzXV0rPTE6ZFtjW3NdXT0xO3ZhciBfPVtdO2ZvcihzIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShzKSYmXy5wdXNoKFtzLGRbc11dKTtfLnNvcnQobykucmV2ZXJzZSgpO3ZhciBwPVtdLGY9Imxvd2VyY2FzZSI7Zm9yKGUudG9VcHBlckNhc2UoKT09PWU/Zj0idXBwZXJjYXNlIjplLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKT09PWUmJihmPSJjYXBpdGFsaXplZCIpLHM9MCxpPU1hdGgubWluKHQsXy5sZW5ndGgpO3M8aTtzKyspInVwcGVyY2FzZSI9PT1mP19bc11bMF09X1tzXVswXS50b1VwcGVyQ2FzZSgpOiJjYXBpdGFsaXplZCI9PT1mJiYoX1tzXVswXT1fW3NdWzBdLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrX1tzXVswXS5zdWJzdHIoMSkpLHUuaGFzRmxhZyhfW3NdWzBdLCJOT1NVR0dFU1QiKXx8cC5wdXNoKF9bc11bMF0pO3JldHVybiBwfShlKSxsaW1pdDp0fSx0aGlzLm1lbW9pemVkW2VdLnN1Z2dlc3Rpb25zfX19KCksZS5leHBvcnRzPW99KS5jYWxsKHQsIi8iLG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIpfSwiLi9ub2RlX21vZHVsZXMvdXJsLXBhcnNlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUpe3ZhciBuO249InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTt2YXIgcj1uLmxvY2F0aW9ufHx7fTtlPWV8fHI7dmFyIG8scz17fSxhPXR5cGVvZiBlO2lmKCJibG9iOiI9PT1lLnByb3RvY29sKXM9bmV3IGkodW5lc2NhcGUoZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1hKXtzPW5ldyBpKGUse30pO2ZvcihvIGluIGYpZGVsZXRlIHNbb119ZWxzZSBpZigib2JqZWN0Ij09PWEpe2ZvcihvIGluIGUpbyBpbiBmfHwoc1tvXT1lW29dKTt2b2lkIDA9PT1zLnNsYXNoZXMmJihzLnNsYXNoZXM9Xy50ZXN0KGUuaHJlZikpfXJldHVybiBzfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZC5leGVjKGUpO3JldHVybntwcm90b2NvbDp0WzFdP3RbMV0udG9Mb3dlckNhc2UoKToiIixzbGFzaGVzOiEhdFsyXSxyZXN0OnRbM119fWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49KHR8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQoZS5zcGxpdCgiLyIpKSxyPW4ubGVuZ3RoLG89bltyLTFdLHM9ITEsaT0wO3ItLTspIi4iPT09bltyXT9uLnNwbGljZShyLDEpOiIuLiI9PT1uW3JdPyhuLnNwbGljZShyLDEpLGkrKyk6aSYmKDA9PT1yJiYocz0hMCksbi5zcGxpY2UociwxKSxpLS0pO3JldHVybiBzJiZuLnVuc2hpZnQoIiIpLCIuIiE9PW8mJiIuLiIhPT1vfHxuLnB1c2goIiIpLG4uam9pbigiLyIpfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaShlLHQsbik7dmFyIGEsbCxkLF8sZixtLGg9cC5zbGljZSgpLGc9dHlwZW9mIHQsYj10aGlzLEU9MDtmb3IoIm9iamVjdCIhPT1nJiYic3RyaW5nIiE9PWcmJihuPXQsdD1udWxsKSxuJiYiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Yy5wYXJzZSksdD1yKHQpLGw9byhlfHwiIiksYT0hbC5wcm90b2NvbCYmIWwuc2xhc2hlcyxiLnNsYXNoZXM9bC5zbGFzaGVzfHxhJiZ0LnNsYXNoZXMsYi5wcm90b2NvbD1sLnByb3RvY29sfHx0LnByb3RvY29sfHwiIixlPWwucmVzdCxsLnNsYXNoZXN8fChoWzNdPVsvKC4qKS8sInBhdGhuYW1lIl0pO0U8aC5sZW5ndGg7RSsrKV89aFtFXSwiZnVuY3Rpb24iIT10eXBlb2YgXz8oZD1fWzBdLG09X1sxXSxkIT09ZD9iW21dPWU6InN0cmluZyI9PXR5cGVvZiBkP34oZj1lLmluZGV4T2YoZCkpJiYoIm51bWJlciI9PXR5cGVvZiBfWzJdPyhiW21dPWUuc2xpY2UoMCxmKSxlPWUuc2xpY2UoZitfWzJdKSk6KGJbbV09ZS5zbGljZShmKSxlPWUuc2xpY2UoMCxmKSkpOihmPWQuZXhlYyhlKSkmJihiW21dPWZbMV0sZT1lLnNsaWNlKDAsZi5pbmRleCkpLGJbbV09YlttXXx8KGEmJl9bM10/dFttXXx8IiI6IiIpLF9bNF0mJihiW21dPWJbbV0udG9Mb3dlckNhc2UoKSkpOmU9XyhlKTtuJiYoYi5xdWVyeT1uKGIucXVlcnkpKSxhJiZ0LnNsYXNoZXMmJiIvIiE9PWIucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT1iLnBhdGhuYW1lfHwiIiE9PXQucGF0aG5hbWUpJiYoYi5wYXRobmFtZT1zKGIucGF0aG5hbWUsdC5wYXRobmFtZSkpLHUoYi5wb3J0LGIucHJvdG9jb2wpfHwoYi5ob3N0PWIuaG9zdG5hbWUsYi5wb3J0PSIiKSxiLnVzZXJuYW1lPWIucGFzc3dvcmQ9IiIsYi5hdXRoJiYoXz1iLmF1dGguc3BsaXQoIjoiKSxiLnVzZXJuYW1lPV9bMF18fCIiLGIucGFzc3dvcmQ9X1sxXXx8IiIpLGIub3JpZ2luPWIucHJvdG9jb2wmJmIuaG9zdCYmImZpbGU6IiE9PWIucHJvdG9jb2w/Yi5wcm90b2NvbCsiLy8iK2IuaG9zdDoibnVsbCIsYi5ocmVmPWIudG9TdHJpbmcoKX1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj10aGlzO3N3aXRjaChlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIHQmJnQubGVuZ3RoJiYodD0obnx8Yy5wYXJzZSkodCkpLHJbZV09dDticmVhaztjYXNlInBvcnQiOnJbZV09dCx1KHQsci5wcm90b2NvbCk/dCYmKHIuaG9zdD1yLmhvc3RuYW1lKyI6Iit0KTooci5ob3N0PXIuaG9zdG5hbWUscltlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6cltlXT10LHIucG9ydCYmKHQrPSI6IityLnBvcnQpLHIuaG9zdD10O2JyZWFrO2Nhc2UiaG9zdCI6cltlXT10LC86XGQrJC8udGVzdCh0KT8odD10LnNwbGl0KCI6Iiksci5wb3J0PXQucG9wKCksci5ob3N0bmFtZT10LmpvaW4oIjoiKSk6KHIuaG9zdG5hbWU9dCxyLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOnIucHJvdG9jb2w9dC50b0xvd2VyQ2FzZSgpLHIuc2xhc2hlcz0hbjticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKHQpe3ZhciBvPSJwYXRobmFtZSI9PT1lPyIvIjoiIyI7cltlXT10LmNoYXJBdCgwKSE9PW8/byt0OnR9ZWxzZSByW2VdPXQ7YnJlYWs7ZGVmYXVsdDpyW2VdPXR9Zm9yKHZhciBzPTA7czxwLmxlbmd0aDtzKyspe3ZhciBpPXBbc107aVs0XSYmKHJbaVsxXV09cltpWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gci5vcmlnaW49ci5wcm90b2NvbCYmci5ob3N0JiYiZmlsZToiIT09ci5wcm90b2NvbD9yLnByb3RvY29sKyIvLyIrci5ob3N0OiJudWxsIixyLmhyZWY9ci50b1N0cmluZygpLHJ9ZnVuY3Rpb24gbChlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZXx8KGU9Yy5zdHJpbmdpZnkpO3ZhciB0LG49dGhpcyxyPW4ucHJvdG9jb2w7ciYmIjoiIT09ci5jaGFyQXQoci5sZW5ndGgtMSkmJihyKz0iOiIpO3ZhciBvPXIrKG4uc2xhc2hlcz8iLy8iOiIiKTtyZXR1cm4gbi51c2VybmFtZSYmKG8rPW4udXNlcm5hbWUsbi5wYXNzd29yZCYmKG8rPSI6IituLnBhc3N3b3JkKSxvKz0iQCIpLG8rPW4uaG9zdCtuLnBhdGhuYW1lLHQ9Im9iamVjdCI9PXR5cGVvZiBuLnF1ZXJ5P2Uobi5xdWVyeSk6bi5xdWVyeSx0JiYobys9Ij8iIT09dC5jaGFyQXQoMCk/Ij8iK3Q6dCksbi5oYXNoJiYobys9bi5oYXNoKSxvfXZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL3JlcXVpcmVzLXBvcnQvaW5kZXguanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5naWZ5L2luZGV4LmpzIiksZD0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xTXHNdKikvaSxfPS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8scD1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgiXFwiLCIvIil9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0sWy86KFxkKykkLywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0sZj17aGFzaDoxLHF1ZXJ5OjF9O2kucHJvdG90eXBlPXtzZXQ6YSx0b1N0cmluZzpsfSxpLmV4dHJhY3RQcm90b2NvbD1vLGkubG9jYXRpb249cixpLnFzPWMsZS5leHBvcnRzPWl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3VybC91cmwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucHJvdG9jb2w9bnVsbCx0aGlzLnNsYXNoZXM9bnVsbCx0aGlzLmF1dGg9bnVsbCx0aGlzLmhvc3Q9bnVsbCx0aGlzLnBvcnQ9bnVsbCx0aGlzLmhvc3RuYW1lPW51bGwsdGhpcy5oYXNoPW51bGwsdGhpcy5zZWFyY2g9bnVsbCx0aGlzLnF1ZXJ5PW51bGwsdGhpcy5wYXRobmFtZT1udWxsLHRoaXMucGF0aD1udWxsLHRoaXMuaHJlZj1udWxsfWZ1bmN0aW9uIG8oZSx0LG4pe2lmKGUmJnUuaXNPYmplY3QoZSkmJmUgaW5zdGFuY2VvZiByKXJldHVybiBlO3ZhciBvPW5ldyByO3JldHVybiBvLnBhcnNlKGUsdCxuKSxvfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHUuaXNTdHJpbmcoZSkmJihlPW8oZSkpLGUgaW5zdGFuY2VvZiByP2UuZm9ybWF0KCk6ci5wcm90b3R5cGUuZm9ybWF0LmNhbGwoZSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBvKGUsITEsITApLnJlc29sdmUodCl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBlP28oZSwhMSwhMCkucmVzb2x2ZU9iamVjdCh0KTp0fXZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy91cmwvdXRpbC5qcyIpO3QucGFyc2U9byx0LnJlc29sdmU9aSx0LnJlc29sdmVPYmplY3Q9YSx0LmZvcm1hdD1zLHQuVXJsPXI7dmFyIGM9L14oW2EtejAtOS4rLV0rOikvaSxkPS86WzAtOV0qJC8sXz0vXihcL1wvPyg/IVwvKVteXD9cc10qKShcP1teXHNdKik/JC8scD1bIjwiLCI+IiwnIicsImAiLCIgIiwiXHIiLCJcbiIsIlx0Il0sZj1bInsiLCJ9IiwifCIsIlxcIiwiXiIsImAiXS5jb25jYXQocCksbT1bIiciXS5jb25jYXQoZiksaD1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KG0pLGc9WyIvIiwiPyIsIiMiXSxiPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxFPS9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyx5PXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LHY9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sVD17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9LEE9bigiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIik7ci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LG4pe2lmKCF1LmlzU3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgZSk7dmFyIHI9ZS5pbmRleE9mKCI/Iiksbz0tMSE9PXImJnI8ZS5pbmRleE9mKCIjIik/Ij8iOiIjIixzPWUuc3BsaXQobyksaT0vXFwvZztzWzBdPXNbMF0ucmVwbGFjZShpLCIvIiksZT1zLmpvaW4obyk7dmFyIGE9ZTtpZihhPWEudHJpbSgpLCFuJiYxPT09ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIGQ9Xy5leGVjKGEpO2lmKGQpcmV0dXJuIHRoaXMucGF0aD1hLHRoaXMuaHJlZj1hLHRoaXMucGF0aG5hbWU9ZFsxXSxkWzJdPyh0aGlzLnNlYXJjaD1kWzJdLHRoaXMucXVlcnk9dD9BLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0JiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgcD1jLmV4ZWMoYSk7aWYocCl7cD1wWzBdO3ZhciBmPXAudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPWYsYT1hLnN1YnN0cihwLmxlbmd0aCl9aWYobnx8cHx8YS5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIEM9Ii8vIj09PWEuc3Vic3RyKDAsMik7IUN8fHAmJnZbcF18fChhPWEuc3Vic3RyKDIpLHRoaXMuc2xhc2hlcz0hMCl9aWYoIXZbcF0mJihDfHxwJiYhVFtwXSkpe2Zvcih2YXIgTz0tMSxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciBSPWEuaW5kZXhPZihnW1NdKTstMSE9PVImJigtMT09PU98fFI8TykmJihPPVIpfXZhciBqLHg7eD0tMT09PU8/YS5sYXN0SW5kZXhPZigiQCIpOmEubGFzdEluZGV4T2YoIkAiLE8pLC0xIT09eCYmKGo9YS5zbGljZSgwLHgpLGE9YS5zbGljZSh4KzEpLHRoaXMuYXV0aD1kZWNvZGVVUklDb21wb25lbnQoaikpLE89LTE7Zm9yKHZhciBTPTA7UzxoLmxlbmd0aDtTKyspe3ZhciBSPWEuaW5kZXhPZihoW1NdKTstMSE9PVImJigtMT09PU98fFI8TykmJihPPVIpfS0xPT09TyYmKE89YS5sZW5ndGgpLHRoaXMuaG9zdD1hLnNsaWNlKDAsTyksYT1hLnNsaWNlKE8pLHRoaXMucGFyc2VIb3N0KCksdGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lfHwiIjt2YXIgTD0iWyI9PT10aGlzLmhvc3RuYW1lWzBdJiYiXSI9PT10aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoLTFdO2lmKCFMKWZvcih2YXIgRD10aGlzLmhvc3RuYW1lLnNwbGl0KC9cLi8pLFM9MCx3PUQubGVuZ3RoO1M8dztTKyspe3ZhciBNPURbU107aWYoTSYmIU0ubWF0Y2goYikpe2Zvcih2YXIgaz0iIixJPTAsUD1NLmxlbmd0aDtJPFA7SSsrKU0uY2hhckNvZGVBdChJKT4xMjc/ays9IngiOmsrPU1bSV07aWYoIWsubWF0Y2goYikpe3ZhciBOPUQuc2xpY2UoMCxTKSxIPUQuc2xpY2UoUysxKSxGPU0ubWF0Y2goRSk7RiYmKE4ucHVzaChGWzFdKSxILnVuc2hpZnQoRlsyXSkpLEgubGVuZ3RoJiYoYT0iLyIrSC5qb2luKCIuIikrYSksdGhpcy5ob3N0bmFtZT1OLmpvaW4oIi4iKTticmVha319fXRoaXMuaG9zdG5hbWUubGVuZ3RoPjI1NT90aGlzLmhvc3RuYW1lPSIiOnRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLEx8fCh0aGlzLmhvc3RuYW1lPWwudG9BU0NJSSh0aGlzLmhvc3RuYW1lKSk7dmFyIEI9dGhpcy5wb3J0PyI6Iit0aGlzLnBvcnQ6IiIsVT10aGlzLmhvc3RuYW1lfHwiIjt0aGlzLmhvc3Q9VStCLHRoaXMuaHJlZis9dGhpcy5ob3N0LEwmJih0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsdGhpcy5ob3N0bmFtZS5sZW5ndGgtMiksIi8iIT09YVswXSYmKGE9Ii8iK2EpKX1pZigheVtmXSlmb3IodmFyIFM9MCx3PW0ubGVuZ3RoO1M8dztTKyspe3ZhciBHPW1bU107aWYoLTEhPT1hLmluZGV4T2YoRykpe3ZhciB6PWVuY29kZVVSSUNvbXBvbmVudChHKTt6PT09RyYmKHo9ZXNjYXBlKEcpKSxhPWEuc3BsaXQoRykuam9pbih6KX19dmFyIFY9YS5pbmRleE9mKCIjIik7LTEhPT1WJiYodGhpcy5oYXNoPWEuc3Vic3RyKFYpLGE9YS5zbGljZSgwLFYpKTt2YXIgVz1hLmluZGV4T2YoIj8iKTtpZigtMSE9PVc/KHRoaXMuc2VhcmNoPWEuc3Vic3RyKFcpLHRoaXMucXVlcnk9YS5zdWJzdHIoVysxKSx0JiYodGhpcy5xdWVyeT1BLnBhcnNlKHRoaXMucXVlcnkpKSxhPWEuc2xpY2UoMCxXKSk6dCYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLGEmJih0aGlzLnBhdGhuYW1lPWEpLFRbZl0mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXt2YXIgQj10aGlzLnBhdGhuYW1lfHwiIixZPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9QitZfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxyLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1dGh8fCIiO2UmJihlPWVuY29kZVVSSUNvbXBvbmVudChlKSxlPWUucmVwbGFjZSgvJTNBL2ksIjoiKSxlKz0iQCIpO3ZhciB0PXRoaXMucHJvdG9jb2x8fCIiLG49dGhpcy5wYXRobmFtZXx8IiIscj10aGlzLmhhc2h8fCIiLG89ITEscz0iIjt0aGlzLmhvc3Q/bz1lK3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYobz1lKygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihvKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmdS5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYocz1BLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIGk9dGhpcy5zZWFyY2h8fHMmJiI/IitzfHwiIjtyZXR1cm4gdCYmIjoiIT09dC5zdWJzdHIoLTEpJiYodCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghdHx8VFt0XSkmJiExIT09bz8obz0iLy8iKyhvfHwiIiksbiYmIi8iIT09bi5jaGFyQXQoMCkmJihuPSIvIituKSk6b3x8KG89IiIpLHImJiIjIiE9PXIuY2hhckF0KDApJiYocj0iIyIrciksaSYmIj8iIT09aS5jaGFyQXQoMCkmJihpPSI/IitpKSxuPW4ucmVwbGFjZSgvWz8jXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSl9KSxpPWkucmVwbGFjZSgiIyIsIiUyMyIpLHQrbytuK2krcn0sci5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KG8oZSwhMSwhMCkpLmZvcm1hdCgpfSxyLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKHUuaXNTdHJpbmcoZSkpe3ZhciB0PW5ldyByO3QucGFyc2UoZSwhMSwhMCksZT10fWZvcih2YXIgbj1uZXcgcixvPU9iamVjdC5rZXlzKHRoaXMpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGk9b1tzXTtuW2ldPXRoaXNbaV19aWYobi5oYXNoPWUuaGFzaCwiIj09PWUuaHJlZilyZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbjtpZihlLnNsYXNoZXMmJiFlLnByb3RvY29sKXtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSksbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdOyJwcm90b2NvbCIhPT1jJiYobltjXT1lW2NdKX1yZXR1cm4gVFtuLnByb3RvY29sXSYmbi5ob3N0bmFtZSYmIW4ucGF0aG5hbWUmJihuLnBhdGg9bi5wYXRobmFtZT0iLyIpLG4uaHJlZj1uLmZvcm1hdCgpLG59aWYoZS5wcm90b2NvbCYmZS5wcm90b2NvbCE9PW4ucHJvdG9jb2wpe2lmKCFUW2UucHJvdG9jb2xdKXtmb3IodmFyIGQ9T2JqZWN0LmtleXMoZSksXz0wO188ZC5sZW5ndGg7XysrKXt2YXIgcD1kW19dO25bcF09ZVtwXX1yZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbn1pZihuLnByb3RvY29sPWUucHJvdG9jb2wsZS5ob3N0fHx2W2UucHJvdG9jb2xdKW4ucGF0aG5hbWU9ZS5wYXRobmFtZTtlbHNle2Zvcih2YXIgZj0oZS5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7Zi5sZW5ndGgmJiEoZS5ob3N0PWYuc2hpZnQoKSk7KTtlLmhvc3R8fChlLmhvc3Q9IiIpLGUuaG9zdG5hbWV8fChlLmhvc3RuYW1lPSIiKSwiIiE9PWZbMF0mJmYudW5zaGlmdCgiIiksZi5sZW5ndGg8MiYmZi51bnNoaWZ0KCIiKSxuLnBhdGhuYW1lPWYuam9pbigiLyIpfWlmKG4uc2VhcmNoPWUuc2VhcmNoLG4ucXVlcnk9ZS5xdWVyeSxuLmhvc3Q9ZS5ob3N0fHwiIixuLmF1dGg9ZS5hdXRoLG4uaG9zdG5hbWU9ZS5ob3N0bmFtZXx8ZS5ob3N0LG4ucG9ydD1lLnBvcnQsbi5wYXRobmFtZXx8bi5zZWFyY2gpe3ZhciBtPW4ucGF0aG5hbWV8fCIiLGg9bi5zZWFyY2h8fCIiO24ucGF0aD1tK2h9cmV0dXJuIG4uc2xhc2hlcz1uLnNsYXNoZXN8fGUuc2xhc2hlcyxuLmhyZWY9bi5mb3JtYXQoKSxufXZhciBnPW4ucGF0aG5hbWUmJiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApLGI9ZS5ob3N0fHxlLnBhdGhuYW1lJiYiLyI9PT1lLnBhdGhuYW1lLmNoYXJBdCgwKSxFPWJ8fGd8fG4uaG9zdCYmZS5wYXRobmFtZSx5PUUsQT1uLnBhdGhuYW1lJiZuLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLGY9ZS5wYXRobmFtZSYmZS5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxDPW4ucHJvdG9jb2wmJiFUW24ucHJvdG9jb2xdO2lmKEMmJihuLmhvc3RuYW1lPSIiLG4ucG9ydD1udWxsLG4uaG9zdCYmKCIiPT09QVswXT9BWzBdPW4uaG9zdDpBLnVuc2hpZnQobi5ob3N0KSksbi5ob3N0PSIiLGUucHJvdG9jb2wmJihlLmhvc3RuYW1lPW51bGwsZS5wb3J0PW51bGwsZS5ob3N0JiYoIiI9PT1mWzBdP2ZbMF09ZS5ob3N0OmYudW5zaGlmdChlLmhvc3QpKSxlLmhvc3Q9bnVsbCksRT1FJiYoIiI9PT1mWzBdfHwiIj09PUFbMF0pKSxiKW4uaG9zdD1lLmhvc3R8fCIiPT09ZS5ob3N0P2UuaG9zdDpuLmhvc3Qsbi5ob3N0bmFtZT1lLmhvc3RuYW1lfHwiIj09PWUuaG9zdG5hbWU/ZS5ob3N0bmFtZTpuLmhvc3RuYW1lLG4uc2VhcmNoPWUuc2VhcmNoLG4ucXVlcnk9ZS5xdWVyeSxBPWY7ZWxzZSBpZihmLmxlbmd0aClBfHwoQT1bXSksQS5wb3AoKSxBPUEuY29uY2F0KGYpLG4uc2VhcmNoPWUuc2VhcmNoLG4ucXVlcnk9ZS5xdWVyeTtlbHNlIGlmKCF1LmlzTnVsbE9yVW5kZWZpbmVkKGUuc2VhcmNoKSl7aWYoQyl7bi5ob3N0bmFtZT1uLmhvc3Q9QS5zaGlmdCgpO3ZhciBPPSEhKG4uaG9zdCYmbi5ob3N0LmluZGV4T2YoIkAiKT4wKSYmbi5ob3N0LnNwbGl0KCJAIik7TyYmKG4uYXV0aD1PLnNoaWZ0KCksbi5ob3N0PW4uaG9zdG5hbWU9Ty5zaGlmdCgpKX1yZXR1cm4gbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5LHUuaXNOdWxsKG4ucGF0aG5hbWUpJiZ1LmlzTnVsbChuLnNlYXJjaCl8fChuLnBhdGg9KG4ucGF0aG5hbWU/bi5wYXRobmFtZToiIikrKG4uc2VhcmNoP24uc2VhcmNoOiIiKSksbi5ocmVmPW4uZm9ybWF0KCksbn1pZighQS5sZW5ndGgpcmV0dXJuIG4ucGF0aG5hbWU9bnVsbCxuLnNlYXJjaD9uLnBhdGg9Ii8iK24uc2VhcmNoOm4ucGF0aD1udWxsLG4uaHJlZj1uLmZvcm1hdCgpLG47Zm9yKHZhciBTPUEuc2xpY2UoLTEpWzBdLFI9KG4uaG9zdHx8ZS5ob3N0fHxBLmxlbmd0aD4xKSYmKCIuIj09PVN8fCIuLiI9PT1TKXx8IiI9PT1TLGo9MCx4PUEubGVuZ3RoO3g+PTA7eC0tKVM9QVt4XSwiLiI9PT1TP0Euc3BsaWNlKHgsMSk6Ii4uIj09PVM/KEEuc3BsaWNlKHgsMSksaisrKTpqJiYoQS5zcGxpY2UoeCwxKSxqLS0pO2lmKCFFJiYheSlmb3IoO2otLTtqKUEudW5zaGlmdCgiLi4iKTshRXx8IiI9PT1BWzBdfHxBWzBdJiYiLyI9PT1BWzBdLmNoYXJBdCgwKXx8QS51bnNoaWZ0KCIiKSxSJiYiLyIhPT1BLmpvaW4oIi8iKS5zdWJzdHIoLTEpJiZBLnB1c2goIiIpO3ZhciBMPSIiPT09QVswXXx8QVswXSYmIi8iPT09QVswXS5jaGFyQXQoMCk7aWYoQyl7bi5ob3N0bmFtZT1uLmhvc3Q9TD8iIjpBLmxlbmd0aD9BLnNoaWZ0KCk6IiI7dmFyIE89ISEobi5ob3N0JiZuLmhvc3QuaW5kZXhPZigiQCIpPjApJiZuLmhvc3Quc3BsaXQoIkAiKTtPJiYobi5hdXRoPU8uc2hpZnQoKSxuLmhvc3Q9bi5ob3N0bmFtZT1PLnNoaWZ0KCkpfXJldHVybiBFPUV8fG4uaG9zdCYmQS5sZW5ndGgsRSYmIUwmJkEudW5zaGlmdCgiIiksQS5sZW5ndGg/bi5wYXRobmFtZT1BLmpvaW4oIi8iKToobi5wYXRobmFtZT1udWxsLG4ucGF0aD1udWxsKSx1LmlzTnVsbChuLnBhdGhuYW1lKSYmdS5pc051bGwobi5zZWFyY2gpfHwobi5wYXRoPShuLnBhdGhuYW1lP24ucGF0aG5hbWU6IiIpKyhuLnNlYXJjaD9uLnNlYXJjaDoiIikpLG4uYXV0aD1lLmF1dGh8fG4uYXV0aCxuLnNsYXNoZXM9bi5zbGFzaGVzfHxlLnNsYXNoZXMsbi5ocmVmPW4uZm9ybWF0KCksbn0sci5wcm90b3R5cGUucGFyc2VIb3N0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ob3N0LHQ9ZC5leGVjKGUpO3QmJih0PXRbMF0sIjoiIT09dCYmKHRoaXMucG9ydD10LnN1YnN0cigxKSksZT1lLnN1YnN0cigwLGUubGVuZ3RoLXQubGVuZ3RoKSksZSYmKHRoaXMuaG9zdG5hbWU9ZSl9fSwiLi9ub2RlX21vZHVsZXMvdXJsL3V0aWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzT2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV9LGlzTnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LGlzTnVsbE9yVW5kZWZpbmVkOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfX19LCIuL25vZGVfbW9kdWxlcy91dGY4LWJ5dGVzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7aWYocj49NTUyOTYmJnI8PTU2MzE5JiZuKzE8ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdChuKzEpO2lmKG8+PTU2MzIwJiZvPD01NzM0Myl7dmFyIHM9MTAyNCooci01NTI5Nikrby01NjMyMCs2NTUzNjt0LnB1c2goMjQwK01hdGguZmxvb3Iocy82NC82NC82NCksMTI4K01hdGguZmxvb3Iocy82NC82NCklNjQsMTI4K01hdGguZmxvb3Iocy82NCklNjQsMTI4K3MlNjQpLG4rPTE7Y29udGludWV9fXI+PTIwNDg/dC5wdXNoKDIyNCtNYXRoLmZsb29yKHIvNjQvNjQpLDEyOCtNYXRoLmZsb29yKHIvNjQpJTY0LDEyOCtyJTY0KTpyPj0xMjg/dC5wdXNoKDE5MitNYXRoLmZsb29yKHIvNjQpLDEyOCtyJTY0KTp0LnB1c2gocil9cmV0dXJuIHR9fSwiLi9ub2RlX21vZHVsZXMvdXRmc3RyaW5nL3V0ZnN0cmluZy5qcyI6ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7ZnVuY3Rpb24gbihlLHQpe3JldHVybiByKGUsbmV3IFJlZ0V4cChpLnNvdXJjZSwiZyIpLHQpfWZ1bmN0aW9uIHIoZSx0LG4pe2lmKCFvKGUpKXJldHVybiBuO3ZhciByPTAscz0wO2Rve3ZhciBpPXQuZXhlYyhlKTtpZihudWxsPT09aSlicmVhaztpZighKHM8bikpYnJlYWs7cis9aVswXS5sZW5ndGgscysrfXdoaWxlKG51bGwhPT1pKTtyZXR1cm4gcj49ZS5sZW5ndGg/LTE6cn1mdW5jdGlvbiBvKGUpe3JldHVybiBhLnRlc3QoZSl9ZnVuY3Rpb24gcyhlLG4pe3ZvaWQgMD09ZSYmKGU9WyJbXl0iXSksdm9pZCAwPT1uJiYobj0iZyIpO3ZhciByPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7ci5wdXNoKGUuc291cmNlKX0pLHIucHVzaChpLnNvdXJjZSkscj1yLmNvbmNhdChlKSxuZXcgUmVnRXhwKHIuam9pbigifCIpLG4pfWUuZmluZENoYXJJbmRleD1mdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybi0xO2lmKCFvKGUpKXJldHVybiB0O2Zvcih2YXIgbj1zKCkscj0wO251bGwhPT1uLmV4ZWMoZSkmJiEobi5sYXN0SW5kZXg+dCk7KXIrKztyZXR1cm4gcn0sZS5maW5kQnl0ZUluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ+PXRoaXMubGVuZ3RoKGUpPy0xOnIoZSxzKCksdCl9LGUuY2hhckF0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5maW5kQnl0ZUluZGV4KGUsdCk7aWYobjwwfHxuPj1lLmxlbmd0aClyZXR1cm4iIjt2YXIgcj1lLnNsaWNlKG4sbis4KSxvPWEuZXhlYyhyKTtyZXR1cm4gbnVsbD09PW8/clswXTpvWzBdfSxlLmNoYXJDb2RlQXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUsdCk7aWYocjwwKXJldHVybiBOYU47dmFyIG89ZS5jaGFyQ29kZUF0KHIpO2lmKDU1Mjk2PD1vJiZvPD01NjMxOSl7cmV0dXJuIDEwMjQqKG8tNTUyOTYpKyhlLmNoYXJDb2RlQXQocisxKS01NjMyMCkrNjU1MzZ9cmV0dXJuIG99LGUuZnJvbUNoYXJDb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlPjY1NTM1PyhlLT02NTUzNixTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlPj4xMCksNTYzMjArKDEwMjMmZSkpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSxlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMCE9PW4mJm51bGwhPT1ufHwobj0wKTt2YXIgcj10aGlzLmZpbmRCeXRlSW5kZXgoZSxuKSxvPWUuaW5kZXhPZih0LHIpO3JldHVybiBvPDA/LTE6dGhpcy5maW5kQ2hhckluZGV4KGUsbyl9LGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW58fG51bGw9PT1uKXI9ZS5sYXN0SW5kZXhPZih0KTtlbHNle3ZhciBvPXRoaXMuZmluZEJ5dGVJbmRleChlLG4pO3I9ZS5sYXN0SW5kZXhPZih0LG8pfXJldHVybiByPDA/LTE6dGhpcy5maW5kQ2hhckluZGV4KGUscil9LGUuc2xpY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89dGhpcy5maW5kQnl0ZUluZGV4KGUsdCk7cmV0dXJuIG88MCYmKG89ZS5sZW5ndGgpLHZvaWQgMD09PW58fG51bGw9PT1uP3I9ZS5sZW5ndGg6KHI9dGhpcy5maW5kQnl0ZUluZGV4KGUsbikpPDAmJihyPWUubGVuZ3RoKSxlLnNsaWNlKG8scil9LGUuc3Vic3RyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdDwwJiYodD10aGlzLmxlbmd0aChlKSt0KSx2b2lkIDA9PT1ufHxudWxsPT09bj90aGlzLnNsaWNlKGUsdCk6dGhpcy5zbGljZShlLHQsdCtuKX0sZS5zdWJzdHJpbmc9ZS5zbGljZSxlLmxlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maW5kQ2hhckluZGV4KGUsZS5sZW5ndGgtMSkrMX0sZS5zdHJpbmdUb0NvZGVQb2ludHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoJiYoY29kZVBvaW50PXRoaXMuY2hhckNvZGVBdChlLG4pLGNvZGVQb2ludCk7bisrKXQucHVzaChjb2RlUG9pbnQpO3JldHVybiB0fSxlLmNvZGVQb2ludHNUb1N0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXQucHVzaCh0aGlzLmZyb21DaGFyQ29kZShlW25dKSk7cmV0dXJuIHQuam9pbigiIil9LGUuc3RyaW5nVG9CeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXtmb3IodmFyIHI9ZS5jaGFyQ29kZUF0KG4pLG89W107cj4wOylvLnB1c2goMjU1JnIpLHI+Pj04OzE9PW8ubGVuZ3RoJiZvLnB1c2goMCksdD10LmNvbmNhdChvLnJldmVyc2UoKSl9cmV0dXJuIHR9LGUuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bis9Mil7dmFyIHI9ZVtuXSxvPWVbbisxXSxzPXI8PDh8bzt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzKSl9cmV0dXJuIHQuam9pbigiIil9LGUuc3RyaW5nVG9DaGFyQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1zKCk7ZG97dmFyIHI9bi5leGVjKGUpO2lmKG51bGw9PT1yKWJyZWFrO3QucHVzaChyWzBdKX13aGlsZShudWxsIT09cik7cmV0dXJuIHR9O3ZhciBpPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vLGE9cyhbXSwiIil9dmFyIG47dm9pZCAwIT09dCYmbnVsbCE9PXQ/bj10OiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZudWxsIT09d2luZG93JiYodm9pZCAwIT09d2luZG93LlV0ZlN0cmluZyYmbnVsbCE9PXdpbmRvdy5VdGZTdHJpbmd8fCh3aW5kb3cuVXRmU3RyaW5nPXt9KSxuPXdpbmRvdy5VdGZTdHJpbmcpO3ZhciByPS9cdUQ4M0NbXHVEREU2LVx1RERGRl1cdUQ4M0NbXHVEREU2LVx1RERGRl0vO24udmlzdWFsPXt9LGUobixbXSksZShuLnZpc3VhbCxbcl0pfSgpfSwiLi9ub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUvYnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsdCl7ZnVuY3Rpb24gbigpe2lmKCFvKXtpZihyKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHQpO3IoInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKHQpOmNvbnNvbGUud2Fybih0KSxvPSEwfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihyKCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIGU7dmFyIG89ITE7cmV0dXJuIG59ZnVuY3Rpb24gcihlKXt0cnl7aWYoIXQubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfXZhciBuPXQubG9jYWxTdG9yYWdlW2VdO3JldHVybiBudWxsIT1uJiYidHJ1ZSI9PT1TdHJpbmcobikudG9Mb3dlckNhc2UoKX1lLmV4cG9ydHM9bn0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpfSwiLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZFVJbnQ4fX0sIi4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUsbil7dmFyIHI9e3NlZW46W10sc3R5bGl6ZTpzfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHIuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoci5jb2xvcnM9YXJndW1lbnRzWzNdKSxmKG4pP3Iuc2hvd0hpZGRlbj1uOm4mJnQuX2V4dGVuZChyLG4pLHkoci5zaG93SGlkZGVuKSYmKHIuc2hvd0hpZGRlbj0hMSkseShyLmRlcHRoKSYmKHIuZGVwdGg9MikseShyLmNvbG9ycykmJihyLmNvbG9ycz0hMSkseShyLmN1c3RvbUluc3BlY3QpJiYoci5jdXN0b21JbnNwZWN0PSEwKSxyLmNvbG9ycyYmKHIuc3R5bGl6ZT1vKSxhKHIsZSxyLmRlcHRoKX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49ci5zdHlsZXNbdF07cmV0dXJuIG4/IhtbIityLmNvbG9yc1tuXVswXSsibSIrZSsiG1siK3IuY29sb3JzW25dWzFdKyJtIjplfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZX1mdW5jdGlvbiBpKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0W2VdPSEwfSksdH1mdW5jdGlvbiBhKGUsbixyKXtpZihlLmN1c3RvbUluc3BlY3QmJm4mJk8obi5pbnNwZWN0KSYmbi5pbnNwZWN0IT09dC5pbnNwZWN0JiYoIW4uY29uc3RydWN0b3J8fG4uY29uc3RydWN0b3IucHJvdG90eXBlIT09bikpe3ZhciBvPW4uaW5zcGVjdChyLGUpO3JldHVybiBiKG8pfHwobz1hKGUsbyxyKSksb312YXIgcz1sKGUsbik7aWYocylyZXR1cm4gczt2YXIgZj1PYmplY3Qua2V5cyhuKSxtPWkoZik7aWYoZS5zaG93SGlkZGVuJiYoZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSksQyhuKSYmKGYuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxmLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiB1KG4pO2lmKDA9PT1mLmxlbmd0aCl7aWYoTyhuKSl7dmFyIGg9bi5uYW1lPyI6ICIrbi5uYW1lOiIiO3JldHVybiBlLnN0eWxpemUoIltGdW5jdGlvbiIraCsiXSIsInNwZWNpYWwiKX1pZih2KG4pKXJldHVybiBlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLCJyZWdleHAiKTtpZihBKG4pKXJldHVybiBlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSwiZGF0ZSIpO2lmKEMobikpcmV0dXJuIHUobil9dmFyIGc9IiIsRT0hMSx5PVsieyIsIn0iXTtpZihwKG4pJiYoRT0hMCx5PVsiWyIsIl0iXSksTyhuKSl7Zz0iIFtGdW5jdGlvbiIrKG4ubmFtZT8iOiAiK24ubmFtZToiIikrIl0ifWlmKHYobikmJihnPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikpLEEobikmJihnPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG4pKSxDKG4pJiYoZz0iICIrdShuKSksMD09PWYubGVuZ3RoJiYoIUV8fDA9PW4ubGVuZ3RoKSlyZXR1cm4geVswXStnK3lbMV07aWYocjwwKXJldHVybiB2KG4pP2Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobiksInJlZ2V4cCIpOmUuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik7ZS5zZWVuLnB1c2gobik7dmFyIFQ7cmV0dXJuIFQ9RT9jKGUsbixyLG0sZik6Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGQoZSxuLHIsbSx0LEUpfSksZS5zZWVuLnBvcCgpLF8oVCxnLHkpfWZ1bmN0aW9uIGwoZSx0KXtpZih5KHQpKXJldHVybiBlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGIodCkpe3ZhciBuPSInIitKU09OLnN0cmluZ2lmeSh0KS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBlLnN0eWxpemUobiwic3RyaW5nIil9cmV0dXJuIGcodCk/ZS5zdHlsaXplKCIiK3QsIm51bWJlciIpOmYodCk/ZS5zdHlsaXplKCIiK3QsImJvb2xlYW4iKTptKHQpP2Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9ZnVuY3Rpb24gdShlKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkrIl0ifWZ1bmN0aW9uIGMoZSx0LG4scixvKXtmb3IodmFyIHM9W10saT0wLGE9dC5sZW5ndGg7aTxhOysraSlMKHQsU3RyaW5nKGkpKT9zLnB1c2goZChlLHQsbixyLFN0cmluZyhpKSwhMCkpOnMucHVzaCgiIik7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihvKXtvLm1hdGNoKC9eXGQrJC8pfHxzLnB1c2goZChlLHQsbixyLG8sITApKX0pLHN9ZnVuY3Rpb24gZChlLHQsbixyLG8scyl7dmFyIGksbCx1O2lmKHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG8pfHx7dmFsdWU6dFtvXX0sdS5nZXQ/bD11LnNldD9lLnN0eWxpemUoIltHZXR0ZXIvU2V0dGVyXSIsInNwZWNpYWwiKTplLnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOnUuc2V0JiYobD1lLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxMKHIsbyl8fChpPSJbIitvKyJdIiksbHx8KGUuc2Vlbi5pbmRleE9mKHUudmFsdWUpPDA/KGw9bShuKT9hKGUsdS52YWx1ZSxudWxsKTphKGUsdS52YWx1ZSxuLTEpLGwuaW5kZXhPZigiXG4iKT4tMSYmKGw9cz9sLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iICAiK2V9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK2wuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIgICAiK2V9KS5qb2luKCJcbiIpKSk6bD1lLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkoaSkpe2lmKHMmJm8ubWF0Y2goL15cZCskLykpcmV0dXJuIGw7aT1KU09OLnN0cmluZ2lmeSgiIitvKSxpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KGk9aS5zdWJzdHIoMSxpLmxlbmd0aC0yKSxpPWUuc3R5bGl6ZShpLCJuYW1lIikpOihpPWkucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLGk9ZS5zdHlsaXplKGksInN0cmluZyIpKX1yZXR1cm4gaSsiOiAiK2x9ZnVuY3Rpb24gXyhlLHQsbil7dmFyIHI9MDtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcisrLHQuaW5kZXhPZigiXG4iKT49MCYmcisrLGUrdC5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjA/blswXSsoIiI9PT10PyIiOnQrIlxuICIpKyIgIitlLmpvaW4oIixcbiAgIikrIiAiK25bMV06blswXSt0KyIgIitlLmpvaW4oIiwgIikrIiAiK25bMV19ZnVuY3Rpb24gcChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBmKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gbnVsbD09PWV9ZnVuY3Rpb24gaChlKXtyZXR1cm4gbnVsbD09ZX1mdW5jdGlvbiBnKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBiKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX1mdW5jdGlvbiBFKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX1mdW5jdGlvbiB5KGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIFQoZSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09UihlKX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gQShlKXtyZXR1cm4gVChlKSYmIltvYmplY3QgRGF0ZV0iPT09UihlKX1mdW5jdGlvbiBDKGUpe3JldHVybiBUKGUpJiYoIltvYmplY3QgRXJyb3JdIj09PVIoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gTyhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX1mdW5jdGlvbiBTKGUpe3JldHVybiBudWxsPT09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGV8fCJzeW1ib2wiPT10eXBlb2YgZXx8dm9pZCAwPT09ZX1mdW5jdGlvbiBSKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gaihlKXtyZXR1cm4gZTwxMD8iMCIrZS50b1N0cmluZygxMCk6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24geCgpe3ZhciBlPW5ldyBEYXRlLHQ9W2ooZS5nZXRIb3VycygpKSxqKGUuZ2V0TWludXRlcygpKSxqKGUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltlLmdldERhdGUoKSxOW2UuZ2V0TW9udGgoKV0sdF0uam9pbigiICIpfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gRChlLHQpe2lmKCFlKXt2YXIgbj1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO24ucmVhc29uPWUsZT1ufXJldHVybiB0KGUpfWZ1bmN0aW9uIHcodCl7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluLnB1c2goYXJndW1lbnRzW3JdKTt2YXIgbz1uLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBzPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KHMsYXJndW1lbnRzKX07dC5hcHBseSh0aGlzLG4pLnRoZW4oZnVuY3Rpb24odCl7ZS5uZXh0VGljayhpLG51bGwsdCl9LGZ1bmN0aW9uKHQpe2UubmV4dFRpY2soRCx0LGkpfSl9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuLE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixNKHQpKSxufXZhciBNPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSksbj17fSxyPTA7cjx0Lmxlbmd0aDtyKyspblt0W3JdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdFtyXSk7cmV0dXJuIG59LGs9LyVbc2RqJV0vZzt0LmZvcm1hdD1mdW5jdGlvbihlKXtpZighYihlKSl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQucHVzaChyKGFyZ3VtZW50c1tuXSkpO3JldHVybiB0LmpvaW4oIiAiKX1mb3IodmFyIG49MSxvPWFyZ3VtZW50cyxzPW8ubGVuZ3RoLGk9U3RyaW5nKGUpLnJlcGxhY2UoayxmdW5jdGlvbihlKXtpZigiJSUiPT09ZSlyZXR1cm4iJSI7aWYobj49cylyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhvW24rK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIob1tuKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9bbisrXSl9Y2F0Y2goZSl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGV9fSksYT1vW25dO248czthPW9bKytuXSltKGEpfHwhVChhKT9pKz0iICIrYTppKz0iICIrcihhKTtyZXR1cm4gaX0sdC5kZXByZWNhdGU9ZnVuY3Rpb24obixyKXtmdW5jdGlvbiBvKCl7aWYoIXMpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3Iocik7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2Uocik6Y29uc29sZS5lcnJvcihyKSxzPSEwfXJldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZih2b2lkIDAhPT1lJiYhMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gbjtpZih2b2lkIDA9PT1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmRlcHJlY2F0ZShuLHIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIHM9ITE7cmV0dXJuIG99O3ZhciBJLFA9e307dC5kZWJ1Z2xvZz1mdW5jdGlvbihuKXtpZih5KEkpJiYoST1lLmVudi5OT0RFX0RFQlVHfHwiIiksbj1uLnRvVXBwZXJDYXNlKCksIVBbbl0paWYobmV3IFJlZ0V4cCgiXFxiIituKyJcXGIiLCJpIikudGVzdChJKSl7dmFyIHI9ZS5waWQ7UFtuXT1mdW5jdGlvbigpe3ZhciBlPXQuZm9ybWF0LmFwcGx5KHQsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLG4scixlKX19ZWxzZSBQW25dPWZ1bmN0aW9uKCl7fTtyZXR1cm4gUFtuXX0sdC5pbnNwZWN0PXIsci5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHIuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sdC5pc0FycmF5PXAsdC5pc0Jvb2xlYW49Zix0LmlzTnVsbD1tLHQuaXNOdWxsT3JVbmRlZmluZWQ9aCx0LmlzTnVtYmVyPWcsdC5pc1N0cmluZz1iLHQuaXNTeW1ib2w9RSx0LmlzVW5kZWZpbmVkPXksdC5pc1JlZ0V4cD12LHQuaXNPYmplY3Q9VCx0LmlzRGF0ZT1BLHQuaXNFcnJvcj1DLHQuaXNGdW5jdGlvbj1PLHQuaXNQcmltaXRpdmU9Uyx0LmlzQnVmZmVyPW4oIi4vbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiKTt2YXIgTj1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3QubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLHgoKSx0LmZvcm1hdC5hcHBseSh0LGFyZ3VtZW50cykpfSx0LmluaGVyaXRzPW4oIi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSx0Ll9leHRlbmQ9ZnVuY3Rpb24oZSx0KXtpZighdHx8IVQodCkpcmV0dXJuIGU7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHQpLHI9bi5sZW5ndGg7ci0tOyllW25bcl1dPXRbbltyXV07cmV0dXJuIGV9O3ZhciBIPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO3QucHJvbWlzaWZ5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtmb3IodmFyIHQsbixyPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pLG89W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspby5wdXNoKGFyZ3VtZW50c1tzXSk7by5wdXNoKGZ1bmN0aW9uKGUscil7ZT9uKGUpOnQocil9KTt0cnl7ZS5hcHBseSh0aGlzLG8pfWNhdGNoKGUpe24oZSl9cmV0dXJuIHJ9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYoSCYmZVtIXSl7dmFyIHQ9ZVtIXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEgse3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLEgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEgse3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE0oZSkpfSx0LnByb21pc2lmeS5jdXN0b209SCx0LmNhbGxiYWNraWZ5PXd9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3ZhbHVlLWVxdWFsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZihudWxsPT1lfHxudWxsPT10KXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJmUubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gcihlLHRbbl0pfSk7dmFyIG49dm9pZCAwPT09ZT8idW5kZWZpbmVkIjpvKGUpO2lmKG4hPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpvKHQpKSlyZXR1cm4hMTtpZigib2JqZWN0Ij09PW4pe3ZhciBzPWUudmFsdWVPZigpLGk9dC52YWx1ZU9mKCk7aWYocyE9PWV8fGkhPT10KXJldHVybiByKHMsaSk7dmFyIGE9T2JqZWN0LmtleXMoZSksbD1PYmplY3Qua2V5cyh0KTtyZXR1cm4gYS5sZW5ndGg9PT1sLmxlbmd0aCYmYS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gcihlW25dLHRbbl0pfSl9cmV0dXJuITF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmRlZmF1bHQ9cn0sIi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvYnJvd3Nlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe307ZS5leHBvcnRzPXJ9LCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vYW1kLWRlZmluZS5qcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImRlZmluZSBjYW5ub3QgYmUgdXNlZCBpbmRpcmVjdCIpfX0sIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiOmZ1bmN0aW9uKGUsdCl7dmFyIG47bj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtuPW58fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl8fCgwLGV2YWwpKCJ0aGlzIil9Y2F0Y2goZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9ZS5leHBvcnRzPW59LCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFlLndlYnBhY2tQb2x5ZmlsbCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShlKTt0LmNoaWxkcmVufHwodC5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lml9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4cG9ydHMiLHtlbnVtZXJhYmxlOiEwfSksdC53ZWJwYWNrUG9seWZpbGw9MX1yZXR1cm4gdH19LCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LCIuL25vZGVfbW9kdWxlcy93aHktZGlkLXlvdS11cGRhdGUvbGliL2RlZXBEaWZmLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2guaXNlcXVhbC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2Z1bmN0aW9uL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvd2h5LWRpZC15b3UtdXBkYXRlL25vZGVfbW9kdWxlcy9sb2Rhc2gua2V5cy9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC51bmlvbi9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2xvZGFzaC5maWx0ZXIvaW5kZXguanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2guZXZlcnkvaW5kZXguanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9sb2Rhc2gucGljay9pbmRleC5qcyIpLGc9cihoKSxiPXtVTkFWT0lEQUJMRToidW5hdm9pZGFibGUiLFNBTUU6InNhbWUiLEVRVUFMOiJlcXVhbCIsRlVOQ1RJT05TOiJmdW5jdGlvbnMifTt0LkRJRkZfVFlQRVM9Yjt2YXIgRT1mdW5jdGlvbihlLHQsbil7aWYoZT09PXQpcmV0dXJue3R5cGU6Yi5TQU1FLG5hbWU6bixwcmV2OmUsbmV4dDp0fTtpZigoMCxzLmRlZmF1bHQpKGUsdCkpcmV0dXJue3R5cGU6Yi5FUVVBTCxuYW1lOm4scHJldjplLG5leHQ6dH07aWYoIWV8fCF0KXJldHVybnt0eXBlOmIuVU5BVk9JREFCTEUsbmFtZTpuLHByZXY6ZSxuZXh0OnR9O3ZhciByPWZ1bmN0aW9uKG4pe3JldHVybiBlW25dIT09dFtuXSYmISgwLHMuZGVmYXVsdCkoZVtuXSx0W25dKX0sbz1mdW5jdGlvbihuKXt2YXIgcj1lW25dLG89dFtuXTtyZXR1cm4oMCxhLmRlZmF1bHQpKHIpJiYoMCxhLmRlZmF1bHQpKG8pJiZyLm5hbWU9PT1vLm5hbWV9LGk9KDAsZC5kZWZhdWx0KSgoMCx1LmRlZmF1bHQpKGUpLCgwLHUuZGVmYXVsdCkodCkpLGw9KDAscC5kZWZhdWx0KShpLHIpO3JldHVybiBsLmxlbmd0aCYmKDAsbS5kZWZhdWx0KShsLG8pP3t0eXBlOmIuRlVOQ1RJT05TLG5hbWU6bixwcmV2OigwLGcuZGVmYXVsdCkoZSxsKSxuZXh0OigwLGcuZGVmYXVsdCkodCxsKX06e3R5cGU6Yi5VTkFWT0lEQUJMRSxuYW1lOm4scHJldjplLG5leHQ6dH19O3QuY2xhc3NpZnlEaWZmPUV9LCIuL25vZGVfbW9kdWxlcy93aHktZGlkLXlvdS11cGRhdGUvbGliL2RlZmF1bHROb3RpZmllci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvd2h5LWRpZC15b3UtdXBkYXRlL2xpYi9kZWVwRGlmZi5qcyIpLG89ZnVuY3Rpb24oZSx0LG4scil7ZSYmdD9jb25zb2xlLmdyb3VwQ29sbGFwc2VkJiZjb25zb2xlLmdyb3VwQ29sbGFwc2VkKG4pOmUmJmNvbnNvbGUuZ3JvdXAmJmNvbnNvbGUuZ3JvdXAobiksci5mb3JFYWNoKGkpLGUmJmNvbnNvbGUuZ3JvdXBFbmQmJmNvbnNvbGUuZ3JvdXBFbmQoKX07dC5kZWZhdWx0Tm90aWZpZXI9bzt2YXIgcz1mdW5jdGlvbihlKXt2YXIgdD1jb25zb2xlLmRpc2FibGVZZWxsb3dCb3g7Y29uc29sZS5kaXNhYmxlWWVsbG93Qm94PSEwLGNvbnNvbGUud2FybihlKSxjb25zb2xlLmRpc2FibGVZZWxsb3dCb3g9dH0saT1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLnByZXYsbz1lLm5leHQ7c3dpdGNoKGUudHlwZSl7Y2FzZSByLkRJRkZfVFlQRVMuU0FNRTpzKHQrIjogVmFsdWUgaXMgdGhlIHNhbWUgKGVxdWFsIGJ5IHJlZmVyZW5jZSkuIEF2b2lkYWJsZSByZS1yZW5kZXIhIiksY29uc29sZS5sb2coIlZhbHVlOiIsbik7YnJlYWs7Y2FzZSByLkRJRkZfVFlQRVMuRVFVQUw6cyh0KyI6IFZhbHVlIGRpZCBub3QgY2hhbmdlLiBBdm9pZGFibGUgcmUtcmVuZGVyISIpLGNvbnNvbGUubG9nKCJCZWZvcmU6IixuKSxjb25zb2xlLmxvZygiQWZ0ZXI6IixvKSxuJiZvJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV0hPT1vW2VdJiZjb25zb2xlLmxvZygnIicrZSsnIiBwcm9wZXJ0eSBpcyBub3QgZXF1YWwgYnkgcmVmZXJlbmNlJyl9KTticmVhaztjYXNlIHIuRElGRl9UWVBFUy5GVU5DVElPTlM6cyh0KyI6IENoYW5nZXMgYXJlIGluIGZ1bmN0aW9ucyBvbmx5LiBQb3NzaWJseSBhdm9pZGFibGUgcmUtcmVuZGVyPyIpLGNvbnNvbGUubG9nKCJGdW5jdGlvbnMgYmVmb3JlOiIsbiksY29uc29sZS5sb2coIkZ1bmN0aW9ucyBhZnRlcjoiLG8pfX19LCIuL25vZGVfbW9kdWxlcy93aHktZGlkLXlvdS11cGRhdGUvbGliL2dldERpc3BsYXlOYW1lLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZXx8ZS5jb25zdHJ1Y3Rvci5uYW1lfTt0LmdldERpc3BsYXlOYW1lPXJ9LCIuL25vZGVfbW9kdWxlcy93aHktZGlkLXlvdS11cGRhdGUvbGliL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9KDAscy5nZXREaXNwbGF5TmFtZSkodGhpcyk7aWYoKDAsYS5zaG91bGRJbmNsdWRlKShyLGUpKXt2YXIgaT0oMCxvLmNsYXNzaWZ5RGlmZikodCx0aGlzLnByb3BzLHIrIi5wcm9wcyIpO2lmKGkudHlwZSE9PW8uRElGRl9UWVBFUy5VTkFWT0lEQUJMRSl7dmFyIGw9KDAsby5jbGFzc2lmeURpZmYpKG4sdGhpcy5zdGF0ZSxyKyIuc3RhdGUiKTtsLnR5cGUhPT1vLkRJRkZfVFlQRVMuVU5BVk9JREFCTEUmJmUubm90aWZpZXIoZS5ncm91cEJ5Q29tcG9uZW50LGUuY29sbGFwc2VDb21wb25lbnRHcm91cHMscixbaSxsXSl9fX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3doeS1kaWQteW91LXVwZGF0ZS9saWIvZGVlcERpZmYuanMiKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3doeS1kaWQteW91LXVwZGF0ZS9saWIvZ2V0RGlzcGxheU5hbWUuanMiKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3doeS1kaWQteW91LXVwZGF0ZS9saWIvbm9ybWFsaXplT3B0aW9ucy5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvd2h5LWRpZC15b3UtdXBkYXRlL2xpYi9zaG91bGRJbmNsdWRlLmpzIiksbD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLG49ZS5Db21wb25lbnQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZTt0PSgwLGkubm9ybWFsaXplT3B0aW9ucykodCksZS5Db21wb25lbnQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1yKHQpO3ZhciBvPW51bGw7dHJ5e289ZS5jcmVhdGVDbGFzcyxvJiYoZS5jcmVhdGVDbGFzcz1mdW5jdGlvbihuKXt2YXIgcz17Y29tcG9uZW50RGlkVXBkYXRlOnIodCl9O3JldHVybiBuLm1peGlucz9uLm1peGlucz1bc10uY29uY2F0KG4ubWl4aW5zKTpuLm1peGlucz1bc10sby5jYWxsKGUsbil9KX1jYXRjaChlKXt9cmV0dXJuIGUuX19XSFlfRElEX1lPVV9VUERBVEVfUkVTVE9SRV9GTl9fPWZ1bmN0aW9uKCl7ZS5Db21wb25lbnQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1uLG8mJihlLmNyZWF0ZUNsYXNzPW8pLGRlbGV0ZSBlLl9fV0hZX0RJRF9ZT1VfVVBEQVRFX1JFU1RPUkVfRk5fX30sZX07dC53aHlEaWRZb3VVcGRhdGU9bCx0LmRlZmF1bHQ9bH0sIi4vbm9kZV9tb2R1bGVzL3doeS1kaWQteW91LXVwZGF0ZS9saWIvbm9ybWFsaXplT3B0aW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLmlzc3RyaW5nL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9ub2RlX21vZHVsZXMvd2h5LWRpZC15b3UtdXBkYXRlL2xpYi9kZWZhdWx0Tm90aWZpZXIuanMiKSxpPS8uLzt0LkRFRkFVTFRfSU5DTFVERT1pO3ZhciBhPS9bXmEtekEtWjAtOSgpXS87dC5ERUZBVUxUX0VYQ0xVREU9YTt2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxvLmRlZmF1bHQpKGUpP25ldyBSZWdFeHAoIl4iK2UrIiQiKTplfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlP1tdLmNvbmNhdChlKTpbXX0sYz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8PTB8fHZvaWQgMD09PWFyZ3VtZW50c1swXT97fTphcmd1bWVudHNbMF0sdD1lLmluY2x1ZGUsbj12b2lkIDA9PT10P1tpXTp0LHI9ZS5leGNsdWRlLG89dm9pZCAwPT09cj9bYV06cixjPWUuZ3JvdXBCeUNvbXBvbmVudCxkPXZvaWQgMD09PWN8fGMsXz1lLmNvbGxhcHNlQ29tcG9uZW50R3JvdXBzLHA9dm9pZCAwPT09X3x8XyxmPWUubm90aWZpZXI7cmV0dXJue25vdGlmaWVyOnZvaWQgMD09PWY/cy5kZWZhdWx0Tm90aWZpZXI6ZixpbmNsdWRlOnUobikubWFwKGwpLGV4Y2x1ZGU6dShvKS5tYXAobCksZ3JvdXBCeUNvbXBvbmVudDpkLGNvbGxhcHNlQ29tcG9uZW50R3JvdXBzOnB9fTt0Lm5vcm1hbGl6ZU9wdGlvbnM9Y30sIi4vbm9kZV9tb2R1bGVzL3doeS1kaWQteW91LXVwZGF0ZS9saWIvc2hvdWxkSW5jbHVkZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbG9kYXNoLnNvbWUvaW5kZXguanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuaW5jbHVkZSxyPXQuZXhjbHVkZTtyZXR1cm4oMCxvLmRlZmF1bHQpKG4sZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pJiYhKDAsby5kZWZhdWx0KShyLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KX07dC5zaG91bGRJbmNsdWRlPXN9LCIuL25vZGVfbW9kdWxlcy93aHktZGlkLXlvdS11cGRhdGUvbm9kZV9tb2R1bGVzL2xvZGFzaC5rZXlzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIHIoZSx0KXt2YXIgcj1PKGUpfHxhKGUpP24oZS5sZW5ndGgsU3RyaW5nKTpbXSxvPXIubGVuZ3RoLGk9ISFvO2Zvcih2YXIgbCBpbiBlKSF0JiYhdi5jYWxsKGUsbCl8fGkmJigibGVuZ3RoIj09bHx8cyhsLG8pKXx8ci5wdXNoKGwpO3JldHVybiByfWZ1bmN0aW9uIG8oZSl7aWYoIWkoZSkpcmV0dXJuIEMoZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9iamVjdChlKSl2LmNhbGwoZSxuKSYmImNvbnN0cnVjdG9yIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/bTp0KSYmKCJudW1iZXIiPT10eXBlb2YgZXx8RS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gaShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8eSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gdShlKSYmdi5jYWxsKGUsImNhbGxlZSIpJiYoIUEuY2FsbChlLCJjYWxsZWUiKXx8VC5jYWxsKGUpPT1oKX1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsIT1lJiZkKGUubGVuZ3RoKSYmIWMoZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcChlKSYmbChlKX1mdW5jdGlvbiBjKGUpe3ZhciB0PV8oZSk/VC5jYWxsKGUpOiIiO3JldHVybiB0PT1nfHx0PT1ifWZ1bmN0aW9uIGQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PW19ZnVuY3Rpb24gXyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9ZnVuY3Rpb24gcChlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBmKGUpe3JldHVybiBsKGUpP3IoZSk6byhlKX12YXIgbT05MDA3MTk5MjU0NzQwOTkxLGg9IltvYmplY3QgQXJndW1lbnRzXSIsZz0iW29iamVjdCBGdW5jdGlvbl0iLGI9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixFPS9eKD86MHxbMS05XVxkKikkLyx5PU9iamVjdC5wcm90b3R5cGUsdj15Lmhhc093blByb3BlcnR5LFQ9eS50b1N0cmluZyxBPXkucHJvcGVydHlJc0VudW1lcmFibGUsQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19KE9iamVjdC5rZXlzLE9iamVjdCksTz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mfSwiLi9ub2RlX21vZHVsZXMveG1sLWJ1dC1wcmV0dGllci9kaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLHR5cGU6byhlKX19KX1mdW5jdGlvbiBvKGUpe3JldHVybiBsKGUpPyJDbG9zaW5nVGFnIjpjKGUpPyJPcGVuaW5nVGFnIjp1KGUpPyJTZWxmQ2xvc2luZ1RhZyI6IlRleHQifXZhciBzPW4oIi4vbm9kZV9tb2R1bGVzL3JlcGVhdC1zdHJpbmcvaW5kZXguanMiKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KC8oPFwvP1tePl0rPikvZykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiIiIT09ZS50cmltKCl9KX0sYT1mdW5jdGlvbihlKXtyZXR1cm4vPFtePiFdKz4vLnRlc3QoZSl9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuLzxcLytbXj5dKz4vLnRlc3QoZSl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuLzxbXj5dK1wvPi8udGVzdChlKX0sYz1mdW5jdGlvbihlKXtyZXR1cm4gYShlKSYmIWwoZSkmJiF1KGUpfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dC5pbmRlbnRvcixvPXQudGV4dE5vZGVzT25TYW1lTGluZSxpPTAsYT1bXTtuPW58fCIgICAgIjt2YXIgbD1yKGUpLm1hcChmdW5jdGlvbihlLHQscil7dmFyIGw9ZS52YWx1ZSx1PWUudHlwZTsiQ2xvc2luZ1RhZyI9PT11JiZpLS07dmFyIGM9cyhuLGkpLGQ9YytsO2lmKCJPcGVuaW5nVGFnIj09PXUmJmkrKyxvKXt2YXIgXz1yW3QtMV0scD1yW3QtMl07IkNsb3NpbmdUYWciPT09dSYmIlRleHQiPT09Xy50eXBlJiYiT3BlbmluZ1RhZyI9PT1wLnR5cGUmJihkPSIiK2MrcC52YWx1ZStfLnZhbHVlK2wsYS5wdXNoKHQtMix0LTEpKX1yZXR1cm4gZH0pO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGxbZV09bnVsbH0pLGwuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pLmpvaW4oIlxuIil9fSwiLi9ub2RlX21vZHVsZXMveG1sL2xpYi9lc2NhcGVGb3JYTUwuanMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5yZXBsYWNlP2UucmVwbGFjZSgvKFsmIjw+J10pL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gclt0XX0pOmV9dmFyIHI9eyImIjoiJmFtcDsiLCciJzoiJnF1b3Q7IiwiJyI6IiZhcG9zOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsifTtlLmV4cG9ydHM9bn0sIi4vbm9kZV9tb2R1bGVzL3htbC9saWIveG1sLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxuKXtmdW5jdGlvbiByKGUpe20/dC5uZXh0VGljayhlKTplKCl9ZnVuY3Rpb24gbyhlLHQpe2lmKHZvaWQgMCE9PXQmJihfKz10KSxlJiYhcCYmKHU9dXx8bmV3IGMscD0hMCksZSYmcCl7dmFyIG49XztyKGZ1bmN0aW9uKCl7dS5lbWl0KCJkYXRhIixuKX0pLF89IiJ9fWZ1bmN0aW9uIHMoZSx0KXthKG8saShlLGYsZj8xOjApLHQpfWZ1bmN0aW9uIGwoKXtpZih1KXt2YXIgZT1fO3IoZnVuY3Rpb24oKXt1LmVtaXQoImRhdGEiLGUpLHUuZW1pdCgiZW5kIiksdS5yZWFkYWJsZT0hMSx1LmVtaXQoImNsb3NlIil9KX19Im9iamVjdCIhPXR5cGVvZiBuJiYobj17aW5kZW50Om59KTt2YXIgdT1uLnN0cmVhbT9uZXcgYzpudWxsLF89IiIscD0hMSxmPW4uaW5kZW50PyEwPT09bi5pbmRlbnQ/ZDpuLmluZGVudDoiIixtPSEwO3JldHVybiByKGZ1bmN0aW9uKCl7bT0hMX0pLG4uZGVjbGFyYXRpb24mJmZ1bmN0aW9uKGUpe3ZhciB0PWUuZW5jb2Rpbmd8fCJVVEYtOCIsbj17dmVyc2lvbjoiMS4wIixlbmNvZGluZzp0fTtlLnN0YW5kYWxvbmUmJihuLnN0YW5kYWxvbmU9ZS5zdGFuZGFsb25lKSxzKHsiP3htbCI6e19hdHRyOm59fSksXz1fLnJlcGxhY2UoIi8+IiwiPz4iKX0obi5kZWNsYXJhdGlvbiksZSYmZS5mb3JFYWNoP2UuZm9yRWFjaChmdW5jdGlvbih0LG4pe3ZhciByO24rMT09PWUubGVuZ3RoJiYocj1sKSxzKHQscil9KTpzKGUsbCksdT8odS5yZWFkYWJsZT0hMCx1KTpffWZ1bmN0aW9uIG8oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9e19lbGVtOmkoZSl9O3JldHVybiB0LnB1c2g9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuYXBwZW5kKXRocm93IG5ldyBFcnJvcigibm90IGFzc2lnbmVkIHRvIGEgcGFyZW50ISIpO3ZhciB0PXRoaXMsbj10aGlzLl9lbGVtLmluZGVudDthKHRoaXMuYXBwZW5kLGkoZSxuLHRoaXMuX2VsZW0uaWNvdW50KyhuPzE6MCkpLGZ1bmN0aW9uKCl7dC5hcHBlbmQoITApfSl9LHQuY2xvc2U9ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZSYmdGhpcy5wdXNoKGUpLHRoaXMuZW5kJiZ0aGlzLmVuZCgpfSx0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gbmV3IEFycmF5KHR8fDApLmpvaW4oZXx8IiIpfWZ1bmN0aW9uIGkoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtfLnB1c2gobCh0LGVbdF0pKX0pfW49bnx8MDt2YXIgbyxhPXModCxuKSxjPWU7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZihvPU9iamVjdC5rZXlzKGUpWzBdLChjPWVbb10pJiZjLl9lbGVtKXJldHVybiBjLl9lbGVtLm5hbWU9byxjLl9lbGVtLmljb3VudD1uLGMuX2VsZW0uaW5kZW50PXQsYy5fZWxlbS5pbmRlbnRzPWEsYy5fZWxlbS5pbnRlcnJ1cHQ9YyxjLl9lbGVtfXZhciBkLF89W10scD1bXTtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uib2JqZWN0IjppZihudWxsPT09YylicmVhaztjLl9hdHRyJiZyKGMuX2F0dHIpLGMuX2NkYXRhJiZwLnB1c2goKCI8IVtDREFUQVsiK2MuX2NkYXRhKS5yZXBsYWNlKC9cXVxdPi9nLCJdXV1dPjwhW0NEQVRBWz4iKSsiXV0+IiksYy5mb3JFYWNoJiYoZD0hMSxwLnB1c2goIiIpLGMuZm9yRWFjaChmdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpeyJfYXR0ciI9PU9iamVjdC5rZXlzKGUpWzBdP3IoZS5fYXR0cik6cC5wdXNoKGkoZSx0LG4rMSkpfWVsc2UgcC5wb3AoKSxkPSEwLHAucHVzaCh1KGUpKX0pLGR8fHAucHVzaCgiIikpO2JyZWFrO2RlZmF1bHQ6cC5wdXNoKHUoYykpfXJldHVybntuYW1lOm8saW50ZXJydXB0OiExLGF0dHJpYnV0ZXM6Xyxjb250ZW50OnAsaWNvdW50Om4saW5kZW50czphLGluZGVudDp0fX1mdW5jdGlvbiBhKGUsdCxuKXtmdW5jdGlvbiByKCl7Zm9yKDt0LmNvbnRlbnQubGVuZ3RoOyl7dmFyIHI9dC5jb250ZW50LnNoaWZ0KCk7aWYodm9pZCAwIT09cil7aWYobyhyKSlyZXR1cm47YShlLHIpfX1lKCExLChzPjE/dC5pbmRlbnRzOiIiKSsodC5uYW1lPyI8LyIrdC5uYW1lKyI+IjoiIikrKHQuaW5kZW50JiYhbj8iXG4iOiIiKSksbiYmbigpfWZ1bmN0aW9uIG8odCl7cmV0dXJuISF0LmludGVycnVwdCYmKHQuaW50ZXJydXB0LmFwcGVuZD1lLHQuaW50ZXJydXB0LmVuZD1yLHQuaW50ZXJydXB0PSExLGUoITApLCEwKX1pZigib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuIGUoITEsdCk7dmFyIHM9dC5pbnRlcnJ1cHQ/MTp0LmNvbnRlbnQubGVuZ3RoO2lmKGUoITEsdC5pbmRlbnRzKyh0Lm5hbWU/IjwiK3QubmFtZToiIikrKHQuYXR0cmlidXRlcy5sZW5ndGg/IiAiK3QuYXR0cmlidXRlcy5qb2luKCIgIik6IiIpKyhzP3QubmFtZT8iPiI6IiI6dC5uYW1lPyIvPiI6IiIpKyh0LmluZGVudCYmcz4xPyJcbiI6IiIpKSwhcylyZXR1cm4gZSghMSx0LmluZGVudD8iXG4iOiIiKTtvKHQpfHxyKCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlKyc9IicrdSh0KSsnIid9dmFyIHU9bigiLi9ub2RlX21vZHVsZXMveG1sL2xpYi9lc2NhcGVGb3JYTUwuanMiKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIikuU3RyZWFtLGQ9IiAgICAiO2UuZXhwb3J0cz1yLGUuZXhwb3J0cy5lbGVtZW50PWUuZXhwb3J0cy5FbGVtZW50PW99KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3hzcy1maWx0ZXJzL3NyYy94c3MtZmlsdGVycy5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gci55dWJsKHQoKG58fHIueXVmdWxsKShlKSkpfXQuX2dldFByaXZGaWx0ZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnNwbGl0KEEsMik7cmV0dXJuIXRbMF18fDIhPT10Lmxlbmd0aCYmZS5sZW5ndGg9PT10WzBdLmxlbmd0aD9udWxsOnRbMF19ZnVuY3Rpb24gdChlLHQsbixyKXtmdW5jdGlvbiBvKGUsbixvLGkpe3JldHVybiBuPyhuPU51bWJlcihuWzBdPD0iOSI/bjoiMCIrbikscj9SKG4pOjEyOD09PW4/IuKCrCI6MTMwPT09bj8i4oCaIjoxMzE9PT1uPyLGkiI6MTMyPT09bj8i4oCeIjoxMzM9PT1uPyLigKYiOjEzND09PW4/IuKAoCI6MTM1PT09bj8i4oChIjoxMzY9PT1uPyLLhiI6MTM3PT09bj8i4oCwIjoxMzg9PT1uPyLFoCI6MTM5PT09bj8i4oC5IjoxNDA9PT1uPyLFkiI6MTQyPT09bj8ixb0iOjE0NT09PW4/IuKAmCI6MTQ2PT09bj8i4oCZIjoxNDc9PT1uPyLigJwiOjE0OD09PW4/IuKAnSI6MTQ5PT09bj8i4oCiIjoxNTA9PT1uPyLigJMiOjE1MT09PW4/IuKAlCI6MTUyPT09bj8iy5wiOjE1Mz09PW4/IuKEoiI6MTU0PT09bj8ixaEiOjE1NT09PW4/IuKAuiI6MTU2PT09bj8ixZMiOjE1OD09PW4/IsW+IjoxNTk9PT1uPyLFuCI6bj49NTUyOTYmJm48PTU3MzQzfHwxMz09PW4/Iu+/vSI6cy5mckNvUHQobikpOnRbb3x8aV18fGV9cmV0dXJuIHQ9dHx8bSxuPW58fGYsdm9pZCAwPT09ZT8idW5kZWZpbmVkIjpudWxsPT09ZT8ibnVsbCI6ZS50b1N0cmluZygpLnJlcGxhY2UoYywi77+9IikucmVwbGFjZShuLG8pfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIlxcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCkrIiAifWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShFLGZ1bmN0aW9uKGUpe3JldHVybiIteC0iK2V9KX1mdW5jdGlvbiBvKG4pe249cy55dWZ1bGwodChuKSk7dmFyIHI9ZShuKTtyZXR1cm4gciYmVFtyLnRvTG93ZXJDYXNlKCldPyIjIyIrbjpufXZhciBzLGk9LzwvZyxhPS8iL2csbD0vJy9nLHU9LyYvZyxjPS9ceDAwL2csZD0vKD86XiR8W1x4MDBceDA5LVx4MEQgIidgPTw+XSkvZyxfPS9bJjw+IidgXS9nLHA9Lyg/Olx4MDB8Xi0qIT8+fC0tIT8+fC0tPyE/JHxcXT58XF0kKS9nLGY9LyYoPzojKFt4WF1bMC05QS1GYS1mXSt8XGQrKTs/fChUYWJ8TmV3TGluZXxjb2xvbnxzZW1pfGxwYXJ8cnBhcnxhcG9zfHNvbHxjb21tYXxleGNsfGFzdHxtaWRhc3R8ZW5zcHxlbXNwfHRoaW5zcCk7fChuYnNwfGFtcHxBTVB8bHR8TFR8Z3R8R1R8cXVvdHxRVU9UKTs/KS9nLG09e1RhYjoiXHQiLE5ld0xpbmU6IlxuIixjb2xvbjoiOiIsc2VtaToiOyIsbHBhcjoiKCIscnBhcjoiKSIsYXBvczoiJyIsc29sOiIvIixjb21tYToiLCIsZXhjbDoiISIsYXN0OiIqIixtaWRhc3Q6IioiLGVuc3A6IuKAgiIsZW1zcDoi4oCDIix0aGluc3A6IuKAiSIsbmJzcDoiwqAiLGFtcDoiJiIsbHQ6IjwiLGd0OiI+IixxdW90OiciJyxRVU9UOiciJ30saD0vXig/Oig/IS0qZXhwcmVzc2lvbikjP1stXHddK3xbKy1dPyg/OlxkK3xcZCpcLlxkKykoPzpyP2VtfGV4fGNofGNtfG1tfGlufHB4fHB0fHBjfCV8dmh8dnd8dm1pbnx2bWF4KT98IWltcG9ydGFudHwpJC9pLGc9L1tceDAwLVx4MUZceDdGXFtcXXt9XFwiXS9nLGI9L1tceDAwLVx4MUZceDdGXFtcXXt9XFwnXS9nLEU9L3VybFtcKFx1MjA3RFx1MjA4RF0rL2cseT0vWydcKFwpXS9nLHY9L1wvXC8lNVtCYl0oW0EtRmEtZjAtOTpdKyklNVtEZF0vLFQ9e2phdmFzY3JpcHQ6MSxkYXRhOjEsdmJzY3JpcHQ6MSxtaHRtbDoxLCJ4LXNjaGVtYSI6MX0sQT0vKD86OnwmI1t4WF0wKjNbYUFdOz98JiMwKjU4Oz98JmNvbG9uOykvLEM9Lyg/Ol5bXHgwMC1ceDIwXSt8W1x0XG5cclx4MDBdKykvZyxPPXtUYWI6Ilx0IixOZXdMaW5lOiJcbiJ9LFM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOm51bGw9PT1lPyJudWxsIjplLnRvU3RyaW5nKCkucmVwbGFjZSh0LG4pfSxSPVN0cmluZy5mcm9tQ29kZVBvaW50fHxmdW5jdGlvbihlKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/IiI6ZTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShlKTooZS09NjU1MzYsU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZT4+MTApLGUlMTAyNCs1NjMyMCkpfTtyZXR1cm4gcz17ZnJDb1B0OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHxudWxsPT09ZT8iIjohaXNGaW5pdGUoZT1OdW1iZXIoZSkpfHxlPD0wfHxlPjExMTQxMTF8fGU+PTEmJmU8PTh8fGU+PTE0JiZlPD0zMXx8ZT49MTI3JiZlPD0xNTl8fGU+PTY0OTc2JiZlPD02NTAwN3x8MTE9PT1lfHw2NTUzNT09KDY1NTM1JmUpfHw2NTUzND09KDY1NTM1JmUpPyLvv70iOlIoZSl9LGQ6dCx5dXA6ZnVuY3Rpb24obil7cmV0dXJuIG49ZShuLnJlcGxhY2UoYywiIikpLG4/dChuLE8sbnVsbCwhMCkucmVwbGFjZShDLCIiKS50b0xvd2VyQ2FzZSgpOm51bGx9LHk6ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSxfLGZ1bmN0aW9uKGUpe3JldHVybiImIj09PWU/IiZhbXA7IjoiPCI9PT1lPyImbHQ7IjoiPiI9PT1lPyImZ3Q7IjonIic9PT1lPyImcXVvdDsiOiInIj09PWU/IiYjMzk7IjoiJiM5NjsifSl9LHlhOmZ1bmN0aW9uKGUpe3JldHVybiBTKGUsdSwiJmFtcDsiKX0seWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSxpLCImbHQ7Iil9LHljOmZ1bmN0aW9uKGUpe3JldHVybiBTKGUscCxmdW5jdGlvbihlKXtyZXR1cm4iXDAiPT09ZT8i77+9IjoiLS0hIj09PWV8fCItLSI9PT1lfHwiLSI9PT1lfHwiXSI9PT1lP2UrIiAiOmUuc2xpY2UoMCwtMSkrIiA+In0pfSx5YXZkOmZ1bmN0aW9uKGUpe3JldHVybiBTKGUsYSwiJnF1b3Q7Iil9LHlhdnM6ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSxsLCImIzM5OyIpfSx5YXZ1OmZ1bmN0aW9uKGUpe3JldHVybiBTKGUsZCxmdW5jdGlvbihlKXtyZXR1cm4iXHQiPT09ZT8iJiM5OyI6IlxuIj09PWU/IiYjMTA7IjoiXHYiPT09ZT8iJiMxMTsiOiJcZiI9PT1lPyImIzEyOyI6IlxyIj09PWU/IiYjMTM7IjoiICI9PT1lPyImIzMyOyI6Ij0iPT09ZT8iJiM2MTsiOiI8Ij09PWU/IiZsdDsiOiI+Ij09PWU/IiZndDsiOiciJz09PWU/IiZxdW90OyI6IiciPT09ZT8iJiMzOTsiOiJgIj09PWU/IiYjOTY7Ijoi77+9In0pfSx5dTplbmNvZGVVUkkseXVjOmVuY29kZVVSSUNvbXBvbmVudCx5dWJsOmZ1bmN0aW9uKGUpe3JldHVybiBUW3MueXVwKGUpXT8ieC0iK2U6ZX0seXVmdWxsOmZ1bmN0aW9uKGUpe3JldHVybiBzLnl1KGUpLnJlcGxhY2UodixmdW5jdGlvbihlLHQpe3JldHVybiIvL1siK3QrIl0ifSl9LHl1YmxmOmZ1bmN0aW9uKGUpe3JldHVybiBzLnl1Ymwocy55dWZ1bGwoZSkpfSx5Y2V1OmZ1bmN0aW9uKGUpe3JldHVybiBlPXQoZSksaC50ZXN0KGUpP2U6IjsteDonIityKGUucmVwbGFjZShiLG4pKSsiJzstdjoifSx5Y2VkOmZ1bmN0aW9uKGUpe3JldHVybiByKHQoZSkucmVwbGFjZShnLG4pKX0seWNlczpmdW5jdGlvbihlKXtyZXR1cm4gcih0KGUpLnJlcGxhY2UoYixuKSl9LHljZXV1OmZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLnJlcGxhY2UoeSxmdW5jdGlvbihlKXtyZXR1cm4iJyI9PT1lPyJcXDI3ICI6IigiPT09ZT8iJTI4IjoiJTI5In0pfSx5Y2V1ZDpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0seWNldXM6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkucmVwbGFjZShsLCJcXDI3ICIpfX19O3ZhciByPXQuX3ByaXZGaWx0ZXJzPXQuX2dldFByaXZGaWx0ZXJzKCk7dC5pbkhUTUxEYXRhPXIueWQsdC5pbkhUTUxDb21tZW50PXIueWMsdC5pblNpbmdsZVF1b3RlZEF0dHI9ci55YXZzLHQuaW5Eb3VibGVRdW90ZWRBdHRyPXIueWF2ZCx0LmluVW5RdW90ZWRBdHRyPXIueWF2dSx0LnVyaUluU2luZ2xlUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLHIueWF2cyl9LHQudXJpSW5Eb3VibGVRdW90ZWRBdHRyPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUsci55YXZkKX0sdC51cmlJblVuUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLHIueWF2dSl9LHQudXJpSW5IVE1MRGF0YT1yLnl1ZnVsbCx0LnVyaUluSFRNTENvbW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIueWMoci55dWZ1bGwoZSkpfSx0LnVyaVBhdGhJblNpbmdsZVF1b3RlZEF0dHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxyLnlhdnMsci55dSl9LHQudXJpUGF0aEluRG91YmxlUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLHIueWF2ZCxyLnl1KX0sdC51cmlQYXRoSW5VblF1b3RlZEF0dHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxyLnlhdnUsci55dSl9LHQudXJpUGF0aEluSFRNTERhdGE9ci55dSx0LnVyaVBhdGhJbkhUTUxDb21tZW50PWZ1bmN0aW9uKGUpe3JldHVybiByLnljKHIueXUoZSkpfSx0LnVyaVF1ZXJ5SW5TaW5nbGVRdW90ZWRBdHRyPXQudXJpUGF0aEluU2luZ2xlUXVvdGVkQXR0cix0LnVyaVF1ZXJ5SW5Eb3VibGVRdW90ZWRBdHRyPXQudXJpUGF0aEluRG91YmxlUXVvdGVkQXR0cix0LnVyaVF1ZXJ5SW5VblF1b3RlZEF0dHI9dC51cmlQYXRoSW5VblF1b3RlZEF0dHIsdC51cmlRdWVyeUluSFRNTERhdGE9dC51cmlQYXRoSW5IVE1MRGF0YSx0LnVyaVF1ZXJ5SW5IVE1MQ29tbWVudD10LnVyaVBhdGhJbkhUTUxDb21tZW50LHQudXJpQ29tcG9uZW50SW5TaW5nbGVRdW90ZWRBdHRyPWZ1bmN0aW9uKGUpe3JldHVybiByLnlhdnMoci55dWMoZSkpfSx0LnVyaUNvbXBvbmVudEluRG91YmxlUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gci55YXZkKHIueXVjKGUpKX0sdC51cmlDb21wb25lbnRJblVuUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gci55YXZ1KHIueXVjKGUpKX0sdC51cmlDb21wb25lbnRJbkhUTUxEYXRhPXIueXVjLHQudXJpQ29tcG9uZW50SW5IVE1MQ29tbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gci55YyhyLnl1YyhlKSl9LHQudXJpRnJhZ21lbnRJblNpbmdsZVF1b3RlZEF0dHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIueXVibChyLnlhdnMoci55dWMoZSkpKX0sdC51cmlGcmFnbWVudEluRG91YmxlUXVvdGVkQXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gci55dWJsKHIueWF2ZChyLnl1YyhlKSkpfSx0LnVyaUZyYWdtZW50SW5VblF1b3RlZEF0dHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHIueXVibChyLnlhdnUoci55dWMoZSkpKX0sdC51cmlGcmFnbWVudEluSFRNTERhdGE9dC51cmlDb21wb25lbnRJbkhUTUxEYXRhLHQudXJpRnJhZ21lbnRJbkhUTUxDb21tZW50PXQudXJpQ29tcG9uZW50SW5IVE1MQ29tbWVudH0sIi4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBlPXt9LHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBvIGluIG4pci5jYWxsKG4sbykmJihlW29dPW5bb10pfXJldHVybiBlfWUuZXhwb3J0cz1uO3ZhciByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9LCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9jb21wb3Nlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbigpe3ZhciBlLHIsbyxzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1mb3IodmFyIHIgaW4gdClpLmNhbGwodCxyKSYmKGVbcl09dFtyXSk7cmV0dXJuIG4ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUuX19zdXBlcl9fPXQucHJvdG90eXBlLGV9LGk9e30uaGFzT3duUHJvcGVydHk7cj1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9ldmVudHMuanMiKSxlPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLk1hcmtlZFlBTUxFcnJvcixvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL25vZGVzLmpzIiksdGhpcy5Db21wb3NlckVycm9yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHQsZSksdH0oZSksdGhpcy5Db21wb3Nlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmFuY2hvcnM9e319cmV0dXJuIGUucHJvdG90eXBlLmNoZWNrX25vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGVja19ldmVudChyLlN0cmVhbVN0YXJ0RXZlbnQpJiZ0aGlzLmdldF9ldmVudCgpLCF0aGlzLmNoZWNrX2V2ZW50KHIuU3RyZWFtRW5kRXZlbnQpfSxlLnByb3RvdHlwZS5nZXRfbm9kZT1mdW5jdGlvbigpe2lmKCF0aGlzLmNoZWNrX2V2ZW50KHIuU3RyZWFtRW5kRXZlbnQpKXJldHVybiB0aGlzLmNvbXBvc2VfZG9jdW1lbnQoKX0sZS5wcm90b3R5cGUuZ2V0X3NpbmdsZV9ub2RlPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmdldF9ldmVudCgpLGU9bnVsbCx0aGlzLmNoZWNrX2V2ZW50KHIuU3RyZWFtRW5kRXZlbnQpfHwoZT10aGlzLmNvbXBvc2VfZG9jdW1lbnQoKSksIXRoaXMuY2hlY2tfZXZlbnQoci5TdHJlYW1FbmRFdmVudCkpdGhyb3cgbj10aGlzLmdldF9ldmVudCgpLG5ldyB0LkNvbXBvc2VyRXJyb3IoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0iLGUuc3RhcnRfbWFyaywiYnV0IGZvdW5kIGFub3RoZXIgZG9jdW1lbnQiLG4uc3RhcnRfbWFyayk7cmV0dXJuIHRoaXMuZ2V0X2V2ZW50KCksZX0sZS5wcm90b3R5cGUuY29tcG9zZV9kb2N1bWVudD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmdldF9ldmVudCgpLGU9dGhpcy5jb21wb3NlX25vZGUoKSx0aGlzLmdldF9ldmVudCgpLHRoaXMuYW5jaG9ycz17fSxlfSxlLnByb3RvdHlwZS5jb21wb3NlX25vZGU9ZnVuY3Rpb24oZSxuKXt2YXIgbyxzLGk7aWYodGhpcy5jaGVja19ldmVudChyLkFsaWFzRXZlbnQpKXtpZihzPXRoaXMuZ2V0X2V2ZW50KCksISgobz1zLmFuY2hvcilpbiB0aGlzLmFuY2hvcnMpKXRocm93IG5ldyB0LkNvbXBvc2VyRXJyb3IobnVsbCxudWxsLCJmb3VuZCB1bmRlZmluZWQgYWxpYXMgIitvLHMuc3RhcnRfbWFyayk7cmV0dXJuIHRoaXMuYW5jaG9yc1tvXX1pZihzPXRoaXMucGVla19ldmVudCgpLG51bGwhPT0obz1zLmFuY2hvcikmJm8gaW4gdGhpcy5hbmNob3JzKXRocm93IG5ldyB0LkNvbXBvc2VyRXJyb3IoImZvdW5kIGR1cGxpY2F0ZSBhbmNob3IgIitvKyI7IGZpcnN0IG9jY3VyZW5jZSIsdGhpcy5hbmNob3JzW29dLnN0YXJ0X21hcmssInNlY29uZCBvY2N1cnJlbmNlIixzLnN0YXJ0X21hcmspO3JldHVybiB0aGlzLmRlc2NlbmRfcmVzb2x2ZXIoZSxuKSx0aGlzLmNoZWNrX2V2ZW50KHIuU2NhbGFyRXZlbnQpP2k9dGhpcy5jb21wb3NlX3NjYWxhcl9ub2RlKG8pOnRoaXMuY2hlY2tfZXZlbnQoci5TZXF1ZW5jZVN0YXJ0RXZlbnQpP2k9dGhpcy5jb21wb3NlX3NlcXVlbmNlX25vZGUobyk6dGhpcy5jaGVja19ldmVudChyLk1hcHBpbmdTdGFydEV2ZW50KSYmKGk9dGhpcy5jb21wb3NlX21hcHBpbmdfbm9kZShvKSksdGhpcy5hc2NlbmRfcmVzb2x2ZXIoKSxpfSxlLnByb3RvdHlwZS5jb21wb3NlX3NjYWxhcl9ub2RlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtyZXR1cm4gdD10aGlzLmdldF9ldmVudCgpLHI9dC50YWcsbnVsbCE9PXImJiIhIiE9PXJ8fChyPXRoaXMucmVzb2x2ZShvLlNjYWxhck5vZGUsdC52YWx1ZSx0LmltcGxpY2l0KSksbj1uZXcgby5TY2FsYXJOb2RlKHIsdC52YWx1ZSx0LnN0YXJ0X21hcmssdC5lbmRfbWFyayx0LnN0eWxlKSxudWxsIT09ZSYmKHRoaXMuYW5jaG9yc1tlXT1uKSxufSxlLnByb3RvdHlwZS5jb21wb3NlX3NlcXVlbmNlX25vZGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixzLGksYTtmb3IoaT10aGlzLmdldF9ldmVudCgpLGE9aS50YWcsbnVsbCE9PWEmJiIhIiE9PWF8fChhPXRoaXMucmVzb2x2ZShvLlNlcXVlbmNlTm9kZSxudWxsLGkuaW1wbGljaXQpKSxzPW5ldyBvLlNlcXVlbmNlTm9kZShhLFtdLGkuc3RhcnRfbWFyayxudWxsLGkuZmxvd19zdHlsZSksbnVsbCE9PWUmJih0aGlzLmFuY2hvcnNbZV09cyksbj0wOyF0aGlzLmNoZWNrX2V2ZW50KHIuU2VxdWVuY2VFbmRFdmVudCk7KXMudmFsdWUucHVzaCh0aGlzLmNvbXBvc2Vfbm9kZShzLG4pKSxuKys7cmV0dXJuIHQ9dGhpcy5nZXRfZXZlbnQoKSxzLmVuZF9tYXJrPXQuZW5kX21hcmssc30sZS5wcm90b3R5cGUuY29tcG9zZV9tYXBwaW5nX25vZGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixzLGksYSxsO2ZvcihhPXRoaXMuZ2V0X2V2ZW50KCksbD1hLnRhZyxudWxsIT09bCYmIiEiIT09bHx8KGw9dGhpcy5yZXNvbHZlKG8uTWFwcGluZ05vZGUsbnVsbCxhLmltcGxpY2l0KSksaT1uZXcgby5NYXBwaW5nTm9kZShsLFtdLGEuc3RhcnRfbWFyayxudWxsLGEuZmxvd19zdHlsZSksbnVsbCE9PWUmJih0aGlzLmFuY2hvcnNbZV09aSk7IXRoaXMuY2hlY2tfZXZlbnQoci5NYXBwaW5nRW5kRXZlbnQpOyluPXRoaXMuY29tcG9zZV9ub2RlKGkpLHM9dGhpcy5jb21wb3NlX25vZGUoaSxuKSxpLnZhbHVlLnB1c2goW24sc10pO3JldHVybiB0PXRoaXMuZ2V0X2V2ZW50KCksaS5lbmRfbWFyaz10LmVuZF9tYXJrLGl9LGV9KCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvY29uc3RydWN0b3IuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7dmFyIHIsbyxzLGk9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcih2YXIgciBpbiB0KWEuY2FsbCh0LHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gbi5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG4sZS5fX3N1cGVyX189dC5wcm90b3R5cGUsZX0sYT17fS5oYXNPd25Qcm9wZXJ0eSxsPVtdLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5sZW5ndGg7dDxuO3QrKylpZih0IGluIHRoaXMmJnRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfTtyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLk1hcmtlZFlBTUxFcnJvcixvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL25vZGVzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi91dGlsLmpzIiksdGhpcy5Db25zdHJ1Y3RvckVycm9yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBpKHQsZSksdH0ociksdGhpcy5CYXNlQ29uc3RydWN0b3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5jb25zdHJ1Y3RlZF9vYmplY3RzPXt9LHRoaXMuY29uc3RydWN0aW5nX25vZGVzPVtdLHRoaXMuZGVmZXJyZWRfY29uc3RydWN0b3JzPVtdfXJldHVybiBlLnByb3RvdHlwZS55YW1sX2NvbnN0cnVjdG9ycz17fSxlLnByb3RvdHlwZS55YW1sX211bHRpX2NvbnN0cnVjdG9ycz17fSxlLmFkZF9jb25zdHJ1Y3Rvcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgieWFtbF9jb25zdHJ1Y3RvcnMiKXx8KHRoaXMucHJvdG90eXBlLnlhbWxfY29uc3RydWN0b3JzPXMuZXh0ZW5kKHt9LHRoaXMucHJvdG90eXBlLnlhbWxfY29uc3RydWN0b3JzKSksdGhpcy5wcm90b3R5cGUueWFtbF9jb25zdHJ1Y3RvcnNbZV09dH0sZS5hZGRfbXVsdGlfY29uc3RydWN0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInlhbWxfbXVsdGlfY29uc3RydWN0b3JzIil8fCh0aGlzLnByb3RvdHlwZS55YW1sX211bHRpX2NvbnN0cnVjdG9ycz1zLmV4dGVuZCh7fSx0aGlzLnByb3RvdHlwZS55YW1sX211bHRpX2NvbnN0cnVjdG9ycykpLHRoaXMucHJvdG90eXBlLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzW2VdPXR9LGUucHJvdG90eXBlLmNoZWNrX2RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGVja19ub2RlKCl9LGUucHJvdG90eXBlLmdldF9kYXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jaGVja19ub2RlKCkpcmV0dXJuIHRoaXMuY29uc3RydWN0X2RvY3VtZW50KHRoaXMuZ2V0X25vZGUoKSl9LGUucHJvdG90eXBlLmdldF9zaW5nbGVfZGF0YT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZ2V0X3NpbmdsZV9ub2RlKCksbnVsbCE9ZT90aGlzLmNvbnN0cnVjdF9kb2N1bWVudChlKTpudWxsfSxlLnByb3RvdHlwZS5jb25zdHJ1Y3RfZG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9dGhpcy5jb25zdHJ1Y3Rfb2JqZWN0KGUpOyFzLmlzX2VtcHR5KHRoaXMuZGVmZXJyZWRfY29uc3RydWN0b3JzKTspdGhpcy5kZWZlcnJlZF9jb25zdHJ1Y3RvcnMucG9wKCkoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuZGVmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVmZXJyZWRfY29uc3RydWN0b3JzLnB1c2goZSl9LGUucHJvdG90eXBlLmNvbnN0cnVjdF9vYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIG4scixzLGksYTtpZihlLnVuaXF1ZV9pZCBpbiB0aGlzLmNvbnN0cnVjdGVkX29iamVjdHMpcmV0dXJuIHRoaXMuY29uc3RydWN0ZWRfb2JqZWN0c1tlLnVuaXF1ZV9pZF07aWYocz1lLnVuaXF1ZV9pZCxsLmNhbGwodGhpcy5jb25zdHJ1Y3Rpbmdfbm9kZXMscyk+PTApdGhyb3cgbmV3IHQuQ29uc3RydWN0b3JFcnJvcihudWxsLG51bGwsImZvdW5kIHVuY29uc3RydWN0YWJsZSByZWN1cnNpdmUgbm9kZSIsZS5zdGFydF9tYXJrKTtpZih0aGlzLmNvbnN0cnVjdGluZ19ub2Rlcy5wdXNoKGUudW5pcXVlX2lkKSxuPW51bGwsYT1udWxsLGUudGFnIGluIHRoaXMueWFtbF9jb25zdHJ1Y3RvcnMpbj10aGlzLnlhbWxfY29uc3RydWN0b3JzW2UudGFnXTtlbHNle2ZvcihpIGluIHRoaXMueWFtbF9tdWx0aV9jb25zdHJ1Y3RvcnMpaWYoZS50YWcuaW5kZXhPZigwPT09aSkpe2E9ZS50YWcuc2xpY2UoaS5sZW5ndGgpLG49dGhpcy55YW1sX211bHRpX2NvbnN0cnVjdG9yc1tpXTticmVha31udWxsPT1uJiYobnVsbCBpbiB0aGlzLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzPyhhPWUudGFnLG49dGhpcy55YW1sX211bHRpX2NvbnN0cnVjdG9yc1tudWxsXSk6bnVsbCBpbiB0aGlzLnlhbWxfY29uc3RydWN0b3JzP249dGhpcy55YW1sX2NvbnN0cnVjdG9yc1tudWxsXTplIGluc3RhbmNlb2Ygby5TY2FsYXJOb2RlP249dGhpcy5jb25zdHJ1Y3Rfc2NhbGFyOmUgaW5zdGFuY2VvZiBvLlNlcXVlbmNlTm9kZT9uPXRoaXMuY29uc3RydWN0X3NlcXVlbmNlOmUgaW5zdGFuY2VvZiBvLk1hcHBpbmdOb2RlJiYobj10aGlzLmNvbnN0cnVjdF9tYXBwaW5nKSl9cmV0dXJuIHI9bi5jYWxsKHRoaXMsbnVsbCE9YT9hOmUsZSksdGhpcy5jb25zdHJ1Y3RlZF9vYmplY3RzW2UudW5pcXVlX2lkXT1yLHRoaXMuY29uc3RydWN0aW5nX25vZGVzLnBvcCgpLHJ9LGUucHJvdG90eXBlLmNvbnN0cnVjdF9zY2FsYXI9ZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygby5TY2FsYXJOb2RlKSl0aHJvdyBuZXcgdC5Db25zdHJ1Y3RvckVycm9yKG51bGwsbnVsbCwiZXhwZWN0ZWQgYSBzY2FsYXIgbm9kZSBidXQgZm91bmQgIitlLmlkLGUuc3RhcnRfbWFyayk7cmV0dXJuIGUudmFsdWV9LGUucHJvdG90eXBlLmNvbnN0cnVjdF9zZXF1ZW5jZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsaSxhO2lmKCEoZSBpbnN0YW5jZW9mIG8uU2VxdWVuY2VOb2RlKSl0aHJvdyBuZXcgdC5Db25zdHJ1Y3RvckVycm9yKG51bGwsbnVsbCwiZXhwZWN0ZWQgYSBzZXF1ZW5jZSBub2RlIGJ1dCBmb3VuZCAiK2UuaWQsZS5zdGFydF9tYXJrKTtmb3IoaT1lLnZhbHVlLGE9W10scj0wLHM9aS5sZW5ndGg7cjxzO3IrKyluPWlbcl0sYS5wdXNoKHRoaXMuY29uc3RydWN0X29iamVjdChuKSk7cmV0dXJuIGF9LGUucHJvdG90eXBlLmNvbnN0cnVjdF9tYXBwaW5nPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxpLGEsbCx1LGMsZDtpZighKGUgaW5zdGFuY2VvZiBvLk1hcHBpbmdOb2RlKSl0aHJvdyBuZXcgQ29uc3RydWN0b3JFcnJvcihudWxsLG51bGwsImV4cGVjdGVkIGEgbWFwcGluZyBub2RlIGJ1dCBmb3VuZCAiK2UuaWQsZS5zdGFydF9tYXJrKTtmb3IoYT17fSxsPWUudmFsdWUsbj0wLGk9bC5sZW5ndGg7bjxpO24rKyl7aWYodT1sW25dLHM9dVswXSxkPXVbMV0sIm9iamVjdCI9PXR5cGVvZihyPXRoaXMuY29uc3RydWN0X29iamVjdChzKSkpdGhyb3cgbmV3IHQuQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGEgbWFwcGluZyIsZS5zdGFydF9tYXJrLCJmb3VuZCB1bmhhc2hhYmxlIGtleSIscy5zdGFydF9tYXJrKTtjPXRoaXMuY29uc3RydWN0X29iamVjdChkKSxhW3JdPWN9cmV0dXJuIGF9LGUucHJvdG90eXBlLmNvbnN0cnVjdF9wYWlycz1mdW5jdGlvbihlKXt2YXIgbixyLHMsaSxhLGwsdSxjLGQ7aWYoIShlIGluc3RhbmNlb2Ygby5NYXBwaW5nTm9kZSkpdGhyb3cgbmV3IHQuQ29uc3RydWN0b3JFcnJvcihudWxsLG51bGwsImV4cGVjdGVkIGEgbWFwcGluZyBub2RlIGJ1dCBmb3VuZCAiK2UuaWQsZS5zdGFydF9tYXJrKTtmb3IoYT1bXSxsPWUudmFsdWUsbj0wLGk9bC5sZW5ndGg7bjxpO24rKyl1PWxbbl0scz11WzBdLGQ9dVsxXSxyPXRoaXMuY29uc3RydWN0X29iamVjdChzKSxjPXRoaXMuY29uc3RydWN0X29iamVjdChkKSxhLnB1c2goW3IsY10pO3JldHVybiBhfSxlfSgpLHRoaXMuQ29uc3RydWN0b3I9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcigpe3JldHVybiByLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHMsYSx1O3JldHVybiBpKHIsbikscz17b246ITAsb2ZmOiExLHRydWU6ITAsZmFsc2U6ITEseWVzOiEwLG5vOiExfSx1PS9eKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzooPzpbVHRdfFtceDIwXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcLihbMC05XSopKT8oPzpbXHgyMFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/KT8kLyxhPXt5ZWFyOjEsbW9udGg6MixkYXk6Myxob3VyOjQsbWludXRlOjUsc2Vjb25kOjYsZnJhY3Rpb246Nyx0ejo4LHR6X3NpZ246OSx0el9ob3VyOjEwLHR6X21pbnV0ZToxMX0sci5wcm90b3R5cGUuY29uc3RydWN0X3NjYWxhcj1mdW5jdGlvbihlKXt2YXIgdCxuLHMsaSxhLGw7aWYoZSBpbnN0YW5jZW9mIG8uTWFwcGluZ05vZGUpZm9yKGk9ZS52YWx1ZSx0PTAscz1pLmxlbmd0aDt0PHM7dCsrKWlmKGE9aVt0XSxuPWFbMF0sbD1hWzFdLCJ0YWc6eWFtbC5vcmcsMjAwMjp2YWx1ZSI9PT1uLnRhZylyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rfc2NhbGFyKGwpO3JldHVybiByLl9fc3VwZXJfXy5jb25zdHJ1Y3Rfc2NhbGFyLmNhbGwodGhpcyxlKX0sci5wcm90b3R5cGUuZmxhdHRlbl9tYXBwaW5nPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxpLGEsbCx1LGMsZCxfLHAsZixtO2Zvcih1PVtdLHI9MDtyPGUudmFsdWUubGVuZ3RoOylpZihjPWUudmFsdWVbcl0saT1jWzBdLG09Y1sxXSwidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiPT09aS50YWcpaWYoZS52YWx1ZS5zcGxpY2UociwxKSxtIGluc3RhbmNlb2Ygby5NYXBwaW5nTm9kZSl0aGlzLmZsYXR0ZW5fbWFwcGluZyhtKSx1PXUuY29uY2F0KG0udmFsdWUpO2Vsc2V7aWYoIShtIGluc3RhbmNlb2Ygby5TZXF1ZW5jZU5vZGUpKXRocm93IG5ldyB0LkNvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIG1hcHBpbmciLGUuc3RhcnRfbWFyaywiZXhwZWN0ZWQgYSBtYXBwaW5nIG9yIGxpc3Qgb2YgbWFwcGluZ3MgZm9yIG1lcmdpbmcgYnV0IGZvdW5kICIrbS5pZCxtLnN0YXJ0X21hcmspO2ZvcihfPVtdLGQ9bS52YWx1ZSxuPTAsYT1kLmxlbmd0aDtuPGE7bisrKXtpZighKChwPWRbbl0paW5zdGFuY2VvZiBvLk1hcHBpbmdOb2RlKSl0aHJvdyBuZXcgdC5Db25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYSBtYXBwaW5nIixlLnN0YXJ0X21hcmssImV4cGVjdGVkIGEgbWFwcGluZyBmb3IgbWVyZ2luZywgYnV0IGZvdW5kICIrcC5pZCxwLnN0YXJ0X21hcmspO3RoaXMuZmxhdHRlbl9tYXBwaW5nKHApLF8ucHVzaChwLnZhbHVlKX1mb3IoXy5yZXZlcnNlKCkscz0wLGw9Xy5sZW5ndGg7czxsO3MrKylmPV9bc10sdT11LmNvbmNhdChmKX1lbHNlInRhZzp5YW1sLm9yZywyMDAyOnZhbHVlIj09PWkudGFnPyhpLnRhZz0idGFnOnlhbWwub3JnLDIwMDI6c3RyIixyKyspOnIrKztpZih1Lmxlbmd0aClyZXR1cm4gZS52YWx1ZT11LmNvbmNhdChlLnZhbHVlKX0sci5wcm90b3R5cGUuY29uc3RydWN0X21hcHBpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBvLk1hcHBpbmdOb2RlJiZ0aGlzLmZsYXR0ZW5fbWFwcGluZyhlKSxyLl9fc3VwZXJfXy5jb25zdHJ1Y3RfbWFwcGluZy5jYWxsKHRoaXMsZSl9LHIucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX251bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0X3NjYWxhcihlKSxudWxsfSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9ib29sPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0PXRoaXMuY29uc3RydWN0X3NjYWxhcihlKSxzW3QudG9Mb3dlckNhc2UoKV19LHIucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX2ludD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYSx1LGM7aWYoYz10aGlzLmNvbnN0cnVjdF9zY2FsYXIoZSksYz1jLnJlcGxhY2UoL18vZywiIiksdT0iLSI9PT1jWzBdPy0xOjEsYT1jWzBdLGwuY2FsbCgiKy0iLGEpPj0wJiYoYz1jLnNsaWNlKDEpKSwiMCI9PT1jKXJldHVybiAwO2lmKDA9PT1jLmluZGV4T2YoIjBiIikpcmV0dXJuIHUqcGFyc2VJbnQoYy5zbGljZSgyKSwyKTtpZigwPT09Yy5pbmRleE9mKCIweCIpKXJldHVybiB1KnBhcnNlSW50KGMuc2xpY2UoMiksMTYpO2lmKDA9PT1jLmluZGV4T2YoIjBvIikpcmV0dXJuIHUqcGFyc2VJbnQoYy5zbGljZSgyKSw4KTtpZigiMCI9PT1jWzBdKXJldHVybiB1KnBhcnNlSW50KGMsOCk7aWYobC5jYWxsKGMsIjoiKT49MCl7Zm9yKHI9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtmb3Iobj1jLnNwbGl0KC86L2cpLHI9W10sZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKylpPW5bZV0sci5wdXNoKHBhcnNlSW50KGkpKTtyZXR1cm4gcn0oKSxyLnJldmVyc2UoKSx0PTEsYz0wLG89MCxzPXIubGVuZ3RoO288cztvKyspbj1yW29dLGMrPW4qdCx0Kj02MDtyZXR1cm4gdSpjfXJldHVybiB1KnBhcnNlSW50KGMpfSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9mbG9hdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxzLGksYSx1LGM7aWYoYz10aGlzLmNvbnN0cnVjdF9zY2FsYXIoZSksYz1jLnJlcGxhY2UoL18vZywiIikudG9Mb3dlckNhc2UoKSx1PSItIj09PWNbMF0/LTE6MSxhPWNbMF0sbC5jYWxsKCIrLSIsYSk+PTAmJihjPWMuc2xpY2UoMSkpLCIuaW5mIj09PWMpcmV0dXJuIEluZmluaXR5KnU7aWYoIi5uYW4iPT09YylyZXR1cm4gTmFOO2lmKGwuY2FsbChjLCI6Iik+PTApe2ZvcihyPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7Zm9yKG49Yy5zcGxpdCgvOi9nKSxyPVtdLGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspaT1uW2VdLHIucHVzaChwYXJzZUZsb2F0KGkpKTtyZXR1cm4gcn0oKSxyLnJldmVyc2UoKSx0PTEsYz0wLG89MCxzPXIubGVuZ3RoO288cztvKyspbj1yW29dLGMrPW4qdCx0Kj02MDtyZXR1cm4gdSpjfXJldHVybiB1KnBhcnNlRmxvYXQoYyl9LHIucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX2JpbmFyeT1mdW5jdGlvbihuKXt2YXIgcixvO289dGhpcy5jb25zdHJ1Y3Rfc2NhbGFyKG4pO3RyeXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmbnVsbCE9PXdpbmRvdz9hdG9iKG8pOm5ldyBlKG8sImJhc2U2NCIpLnRvU3RyaW5nKCJhc2NpaSIpfWNhdGNoKGUpe3Rocm93IHI9ZSxuZXcgdC5Db25zdHJ1Y3RvckVycm9yKG51bGwsbnVsbCwiZmFpbGVkIHRvIGRlY29kZSBiYXNlNjQgZGF0YTogIityLG4uc3RhcnRfbWFyayl9fSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF90aW1lc3RhbXA9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLGwsYyxkLF8scCxmLG0saCxnO3RoaXMuY29uc3RydWN0X3NjYWxhcihlKSxpPWUudmFsdWUubWF0Y2godSksaD17fTtmb3IocyBpbiBhKW89YVtzXSxoW3NdPWlbb107aWYoZz1wYXJzZUludChoLnllYXIpLGQ9cGFyc2VJbnQoaC5tb250aCktMSx0PXBhcnNlSW50KGguZGF5KSwhaC5ob3VyKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhnLGQsdCkpO2lmKHI9cGFyc2VJbnQoaC5ob3VyKSxjPXBhcnNlSW50KGgubWludXRlKSxfPXBhcnNlSW50KGguc2Vjb25kKSxsPTAsaC5mcmFjdGlvbil7Zm9yKG49aC5mcmFjdGlvbi5zbGljZSgwLDYpO24ubGVuZ3RoPDY7KW4rPSIwIjtuPXBhcnNlSW50KG4pLGw9TWF0aC5yb3VuZChuLzFlMyl9cmV0dXJuIGgudHpfc2lnbiYmKG09Ii0iPT09aC50el9zaWduPzE6LTEsKHA9cGFyc2VJbnQoaC50el9ob3VyKSkmJihyKz1tKnApLChmPXBhcnNlSW50KGgudHpfbWludXRlKSkmJihjKz1tKmYpKSxuZXcgRGF0ZShEYXRlLlVUQyhnLGQsdCxyLGMsXyxsKSl9LHIucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX3BhaXJfbGlzdD1mdW5jdGlvbihlLG4pe3ZhciByO2lmKHI9W10sIShuIGluc3RhbmNlb2Ygby5TZXF1ZW5jZU5vZGUpKXRocm93IG5ldyB0LkNvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyAiK2Usbi5zdGFydF9tYXJrLCJleHBlY3RlZCBhIHNlcXVlbmNlIGJ1dCBmb3VuZCAiK24uaWQsbi5zdGFydF9tYXJrKTtyZXR1cm4gdGhpcy5kZWZlcihmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaSxhLGwsdSxjLGQsXyxwLGYsbTtmb3IoYz1uLnZhbHVlLF89W10saT0wLHU9Yy5sZW5ndGg7aTx1O2krKyl7aWYoISgocD1jW2ldKWluc3RhbmNlb2Ygby5NYXBwaW5nTm9kZSkpdGhyb3cgbmV3IHQuQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nICIrZSxuLnN0YXJ0X21hcmssImV4cGVjdGVkIGEgbWFwcGluZyBvZiBsZW5ndGggMSBidXQgZm91bmQgIitwLmlkLHAuc3RhcnRfbWFyayk7aWYoMSE9PXAudmFsdWUubGVuZ3RoKXRocm93IG5ldyB0LkNvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyAiK2Usbi5zdGFydF9tYXJrLCJleHBlY3RlZCBhIG1hcHBpbmcgb2YgbGVuZ3RoIDEgYnV0IGZvdW5kICIrcC5pZCxwLnN0YXJ0X21hcmspO2Q9cC52YWx1ZVswXSxsPWRbMF0sbT1kWzFdLGE9cy5jb25zdHJ1Y3Rfb2JqZWN0KGwpLGY9cy5jb25zdHJ1Y3Rfb2JqZWN0KG0pLF8ucHVzaChyLnB1c2goW2EsZl0pKX1yZXR1cm4gX319KHRoaXMpKSxyfSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9vbWFwPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnN0cnVjdF95YW1sX3BhaXJfbGlzdCgiYW4gb3JkZXJlZCBtYXAiLGUpfSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9wYWlycz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RfeWFtbF9wYWlyX2xpc3QoInBhaXJzIixlKX0sci5wcm90b3R5cGUuY29uc3RydWN0X3lhbWxfc2V0PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0PVtdLHRoaXMuZGVmZXIoZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbztvPVtdO2ZvcihyIGluIG4uY29uc3RydWN0X21hcHBpbmcoZSkpby5wdXNoKHQucHVzaChyKSk7cmV0dXJuIG99fSh0aGlzKSksdH0sci5wcm90b3R5cGUuY29uc3RydWN0X3lhbWxfc3RyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnN0cnVjdF9zY2FsYXIoZSl9LHIucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX3NlcT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdD1bXSx0aGlzLmRlZmVyKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLG8scyxpLGE7Zm9yKGk9bi5jb25zdHJ1Y3Rfc2VxdWVuY2UoZSksYT1bXSxyPTAscz1pLmxlbmd0aDtyPHM7cisrKW89aVtyXSxhLnB1c2godC5wdXNoKG8pKTtyZXR1cm4gYX19KHRoaXMpKSx0fSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9tYXA9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHQ9e30sdGhpcy5kZWZlcihmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixvLHMsaTtvPW4uY29uc3RydWN0X21hcHBpbmcoZSkscz1bXTtmb3IociBpbiBvKWk9b1tyXSxzLnB1c2godFtyXT1pKTtyZXR1cm4gc319KHRoaXMpKSx0fSxyLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9vYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgdCx0aGlzLmRlZmVyKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLG8scyxpO289dC5jb25zdHJ1Y3RfbWFwcGluZyhlLCEwKSxzPVtdO2ZvcihyIGluIG8paT1vW3JdLHMucHVzaChuW3JdPWkpO3JldHVybiBzfX0odGhpcykpLG59LHIucHJvdG90eXBlLmNvbnN0cnVjdF91bmRlZmluZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IHQuQ29uc3RydWN0b3JFcnJvcihudWxsLG51bGwsImNvdWxkIG5vdCBkZXRlcm1pbmUgYSBjb25zdHJ1Y3RvciBmb3IgdGhlIHRhZyAiK2UudGFnLGUuc3RhcnRfbWFyayl9LHJ9KHRoaXMuQmFzZUNvbnN0cnVjdG9yKSx0aGlzLkNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIsdGhpcy5Db25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0X3lhbWxfbnVsbCksdGhpcy5Db25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHRoaXMuQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX2Jvb2wpLHRoaXMuQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHRoaXMuQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX2ludCksdGhpcy5Db25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix0aGlzLkNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9mbG9hdCksdGhpcy5Db25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIsdGhpcy5Db25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0X3lhbWxfYmluYXJ5KSx0aGlzLkNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIix0aGlzLkNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF90aW1lc3RhbXApLHRoaXMuQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix0aGlzLkNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9vbWFwKSx0aGlzLkNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHRoaXMuQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX3BhaXJzKSx0aGlzLkNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix0aGlzLkNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9zZXQpLHRoaXMuQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHRoaXMuQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdF95YW1sX3N0ciksdGhpcy5Db25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIsdGhpcy5Db25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0X3lhbWxfc2VxKSx0aGlzLkNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigidGFnOnlhbWwub3JnLDIwMDI6bWFwIix0aGlzLkNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RfeWFtbF9tYXApLHRoaXMuQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKG51bGwsdGhpcy5Db25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0X3VuZGVmaW5lZCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvZHVtcGVyLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKCl7dmFyIGUsdCxyLG8scyxpPVtdLnNsaWNlO3M9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvdXRpbC5qcyIpLGU9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvZW1pdHRlci5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvc2VyaWFsaXplci5qcyIpLHQ9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVwcmVzZW50ZXIuanMiKSxyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3Jlc29sdmVyLmpzIiksdGhpcy5tYWtlX2R1bXBlcj1mdW5jdGlvbihuLGEsbCx1KXt2YXIgYztyZXR1cm4gbnVsbD09biYmKG49ZS5FbWl0dGVyKSxudWxsPT1hJiYoYT1vLlNlcmlhbGl6ZXIpLG51bGw9PWwmJihsPXQuUmVwcmVzZW50ZXIpLG51bGw9PXUmJih1PXIuUmVzb2x2ZXIpLGM9W24sYSxsLHVdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByLG8scztmb3IobnVsbD09biYmKG49e30pLGNbMF0uY2FsbCh0aGlzLGUsbikscz1jLnNsaWNlKDEpLHI9MCxvPXMubGVuZ3RoO3I8bztyKyspdD1zW3JdLHQuY2FsbCh0aGlzLG4pfXZhciB0O3JldHVybiBzLmV4dGVuZC5hcHBseShzLFtlLnByb3RvdHlwZV0uY29uY2F0KGkuY2FsbChmdW5jdGlvbigpe3ZhciBlLG4scjtmb3Iocj1bXSxlPTAsbj1jLmxlbmd0aDtlPG47ZSsrKXQ9Y1tlXSxyLnB1c2godC5wcm90b3R5cGUpO3JldHVybiByfSgpKSkpLGV9KCl9LHRoaXMuRHVtcGVyPXRoaXMubWFrZV9kdW1wZXIoKX0pLmNhbGwodGhpcyl9LCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9lbWl0dGVyLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKCl7dmFyIGUscixvLHMsaT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciByIGluIHQpYS5jYWxsKHQscikmJihlW3JdPXRbcl0pO3JldHVybiBuLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxhPXt9Lmhhc093blByb3BlcnR5LGw9W10uaW5kZXhPZnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj10aGlzLmxlbmd0aDt0PG47dCsrKWlmKHQgaW4gdGhpcyYmdGhpc1t0XT09PWUpcmV0dXJuIHQ7cmV0dXJuLTF9O289bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvZXZlbnRzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi91dGlsLmpzIikscj1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9lcnJvcnMuanMiKS5ZQU1MRXJyb3IsdGhpcy5FbWl0dGVyRXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGkodCxlKSx0fShyKSx0aGlzLkVtaXR0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7dmFyIG47dGhpcy5zdHJlYW09ZSx0aGlzLmVuY29kaW5nPW51bGwsdGhpcy5zdGF0ZXM9W10sdGhpcy5zdGF0ZT10aGlzLmV4cGVjdF9zdHJlYW1fc3RhcnQsdGhpcy5ldmVudHM9W10sdGhpcy5ldmVudD1udWxsLHRoaXMuaW5kZW50cz1bXSx0aGlzLmluZGVudD1udWxsLHRoaXMuZmxvd19sZXZlbD0wLHRoaXMucm9vdF9jb250ZXh0PSExLHRoaXMuc2VxdWVuY2VfY29udGV4dD0hMSx0aGlzLm1hcHBpbmdfY29udGV4dD0hMSx0aGlzLnNpbXBsZV9rZXlfY29udGV4dD0hMSx0aGlzLmxpbmU9MCx0aGlzLmNvbHVtbj0wLHRoaXMud2hpdGVzcGFjZT0hMCx0aGlzLmluZGVudGF0aW9uPSEwLHRoaXMub3Blbl9lbmRlZD0hMSx0aGlzLmNhbm9uaWNhbD10LmNhbm9uaWNhbCx0aGlzLmFsbG93X3VuaWNvZGU9dC5hbGxvd191bmljb2RlLG51bGw9PXRoaXMuY2Fub25pY2FsJiYodGhpcy5jYW5vbmljYWw9ITEpLG51bGw9PXRoaXMuYWxsb3dfdW5pY29kZSYmKHRoaXMuYWxsb3dfdW5pY29kZT0hMCksdGhpcy5iZXN0X2luZGVudD0xPHQuaW5kZW50JiZ0LmluZGVudDwxMD90LmluZGVudDoyLHRoaXMuYmVzdF93aWR0aD10LndpZHRoPjIqdGhpcy5pbmRlbnQ/dC53aWR0aDo4MCx0aGlzLmJlc3RfbGluZV9icmVhaz0iXHIiPT09KG49dC5saW5lX2JyZWFrKXx8IlxuIj09PW58fCJcclxuIj09PW4/dC5saW5lX2JyZWFrOiJcbiIsdGhpcy50YWdfcHJlZml4ZXM9bnVsbCx0aGlzLnByZXBhcmVkX2FuY2hvcj1udWxsLHRoaXMucHJlcGFyZWRfdGFnPW51bGwsdGhpcy5hbmFseXNpcz1udWxsLHRoaXMuc3R5bGU9bnVsbH12YXIgcixpLHU7cmV0dXJuIHI9IlwwIFx0XHJcbsKFXHUyMDI4XHUyMDI5IixpPXsiISI6IiEiLCJ0YWc6eWFtbC5vcmcsMjAwMjoiOiIhISJ9LHU9eyJcMCI6IjAiLCIHIjoiYSIsIlxiIjoiYiIsIlx0IjoidCIsIlxuIjoibiIsIlx2IjoidiIsIlxmIjoiZiIsIlxyIjoiciIsIhsiOiJlIiwnIic6JyInLCJcXCI6IlxcIiwiwoUiOiJOIiwiwqAiOiJfIiwiXHUyMDI4IjoiTCIsIlx1MjAyOSI6IlAifSxuLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVzPVtdLHRoaXMuc3RhdGU9bnVsbH0sbi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt2YXIgdDtmb3IodGhpcy5ldmVudHMucHVzaChlKSx0PVtdOyF0aGlzLm5lZWRfbW9yZV9ldmVudHMoKTspdGhpcy5ldmVudD10aGlzLmV2ZW50cy5zaGlmdCgpLHRoaXMuc3RhdGUoKSx0LnB1c2godGhpcy5ldmVudD1udWxsKTtyZXR1cm4gdH0sbi5wcm90b3R5cGUubmVlZF9tb3JlX2V2ZW50cz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiAwPT09dGhpcy5ldmVudHMubGVuZ3RofHwoZT10aGlzLmV2ZW50c1swXSxlIGluc3RhbmNlb2Ygby5Eb2N1bWVudFN0YXJ0RXZlbnQ/dGhpcy5uZWVkX2V2ZW50cygxKTplIGluc3RhbmNlb2Ygby5TZXF1ZW5jZVN0YXJ0RXZlbnQ/dGhpcy5uZWVkX2V2ZW50cygyKTplIGluc3RhbmNlb2Ygby5NYXBwaW5nU3RhcnRFdmVudCYmdGhpcy5uZWVkX2V2ZW50cygzKSl9LG4ucHJvdG90eXBlLm5lZWRfZXZlbnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLGk7Zm9yKHM9MCxpPXRoaXMuZXZlbnRzLnNsaWNlKDEpLG49MCxyPWkubGVuZ3RoO248cjtuKyspaWYodD1pW25dLHQgaW5zdGFuY2VvZiBvLkRvY3VtZW50U3RhcnRFdmVudHx8dCBpbnN0YW5jZW9mIG8uQ29sbGVjdGlvblN0YXJ0RXZlbnQ/cysrOnQgaW5zdGFuY2VvZiBvLkRvY3VtZW50RW5kRXZlbnR8fHQgaW5zdGFuY2VvZiBvLkNvbGxlY3Rpb25FbmRFdmVudD9zLS06dCBpbnN0YW5jZW9mIG8uU3RyZWFtRW5kRXZlbnQmJihzPS0xKSxzPDApcmV0dXJuITE7cmV0dXJuIHRoaXMuZXZlbnRzLmxlbmd0aDxlKzF9LG4ucHJvdG90eXBlLmluY3JlYXNlX2luZGVudD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZSYmKGU9e30pLHRoaXMuaW5kZW50cy5wdXNoKHRoaXMuaW5kZW50KSxudWxsPT10aGlzLmluZGVudD90aGlzLmluZGVudD1lLmZsb3c/dGhpcy5iZXN0X2luZGVudDowOmUuaW5kZW50bGVzcz92b2lkIDA6dGhpcy5pbmRlbnQrPXRoaXMuYmVzdF9pbmRlbnR9LG4ucHJvdG90eXBlLmV4cGVjdF9zdHJlYW1fc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uU3RyZWFtU3RhcnRFdmVudD8oIXRoaXMuZXZlbnQuZW5jb2Rpbmd8fCJlbmNvZGluZyJpbiB0aGlzLnN0cmVhbXx8KHRoaXMuZW5jb2Rpbmc9dGhpcy5ldmVudC5lbmNvZGluZyksdGhpcy53cml0ZV9zdHJlYW1fc3RhcnQoKSx0aGlzLnN0YXRlPXRoaXMuZXhwZWN0X2ZpcnN0X2RvY3VtZW50X3N0YXJ0KTp0aGlzLmVycm9yKCJleHBlY3RlZCBTdHJlYW1TdGFydEV2ZW50LCBidXQgZ290Iix0aGlzLmV2ZW50KX0sbi5wcm90b3R5cGUuZXhwZWN0X25vdGhpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcigiZXhwZWN0ZWQgbm90aGluZywgYnV0IGdvdCIsdGhpcy5ldmVudCl9LG4ucHJvdG90eXBlLmV4cGVjdF9maXJzdF9kb2N1bWVudF9zdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGVjdF9kb2N1bWVudF9zdGFydCghMCl9LG4ucHJvdG90eXBlLmV4cGVjdF9kb2N1bWVudF9zdGFydD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbCx1LGMsZDtpZihudWxsPT1lJiYoZT0hMSksdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uRG9jdW1lbnRTdGFydEV2ZW50KXtpZigodGhpcy5ldmVudC52ZXJzaW9ufHx0aGlzLmV2ZW50LnRhZ3MpJiZ0aGlzLm9wZW5fZW5kZWQmJih0aGlzLndyaXRlX2luZGljYXRvcigiLi4uIiwhMCksdGhpcy53cml0ZV9pbmRlbnQoKSksdGhpcy5ldmVudC52ZXJzaW9uJiZ0aGlzLndyaXRlX3ZlcnNpb25fZGlyZWN0aXZlKHRoaXMucHJlcGFyZV92ZXJzaW9uKHRoaXMuZXZlbnQudmVyc2lvbikpLHRoaXMudGFnX3ByZWZpeGVzPXMuY2xvbmUoaSksdGhpcy5ldmVudC50YWdzKWZvcihkPWZ1bmN0aW9uKCl7dmFyIGUsdDtlPXRoaXMuZXZlbnQudGFncyx0PVtdO2ZvcihsIGluIGUpYS5jYWxsKGUsbCkmJnQucHVzaChsKTtyZXR1cm4gdH0uY2FsbCh0aGlzKS5zb3J0KCkscj0wLHU9ZC5sZW5ndGg7cjx1O3IrKyluPWRbcl0sYz10aGlzLmV2ZW50LnRhZ3Nbbl0sdGhpcy50YWdfcHJlZml4ZXNbY109bix0aGlzLndyaXRlX3RhZ19kaXJlY3RpdmUodGhpcy5wcmVwYXJlX3RhZ19oYW5kbGUobiksdGhpcy5wcmVwYXJlX3RhZ19wcmVmaXgoYykpO3JldHVybiB0PSFlfHx0aGlzLmV2ZW50LmV4cGxpY2l0fHx0aGlzLmNhbm9uaWNhbHx8dGhpcy5ldmVudC52ZXJzaW9ufHx0aGlzLmV2ZW50LnRhZ3N8fHRoaXMuY2hlY2tfZW1wdHlfZG9jdW1lbnQoKSx0JiYodGhpcy53cml0ZV9pbmRlbnQoKSx0aGlzLndyaXRlX2luZGljYXRvcigiLS0tIiwhMCksdGhpcy5jYW5vbmljYWwmJnRoaXMud3JpdGVfaW5kZW50KCkpLHRoaXMuc3RhdGU9dGhpcy5leHBlY3RfZG9jdW1lbnRfcm9vdH1yZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uU3RyZWFtRW5kRXZlbnQ/KHRoaXMub3Blbl9lbmRlZCYmKHRoaXMud3JpdGVfaW5kaWNhdG9yKCIuLi4iLCEwKSx0aGlzLndyaXRlX2luZGVudCgpKSx0aGlzLndyaXRlX3N0cmVhbV9lbmQoKSx0aGlzLnN0YXRlPXRoaXMuZXhwZWN0X25vdGhpbmcpOnRoaXMuZXJyb3IoImV4cGVjdGVkIERvY3VtZW50U3RhcnRFdmVudCwgYnV0IGdvdCIsdGhpcy5ldmVudCl9LG4ucHJvdG90eXBlLmV4cGVjdF9kb2N1bWVudF9lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uRG9jdW1lbnRFbmRFdmVudD8odGhpcy53cml0ZV9pbmRlbnQoKSx0aGlzLmV2ZW50LmV4cGxpY2l0JiYodGhpcy53cml0ZV9pbmRpY2F0b3IoIi4uLiIsITApLHRoaXMud3JpdGVfaW5kZW50KCkpLHRoaXMuZmx1c2hfc3RyZWFtKCksdGhpcy5zdGF0ZT10aGlzLmV4cGVjdF9kb2N1bWVudF9zdGFydCk6dGhpcy5lcnJvcigiZXhwZWN0ZWQgRG9jdW1lbnRFbmRFdmVudCwgYnV0IGdvdCIsdGhpcy5ldmVudCl9LG4ucHJvdG90eXBlLmV4cGVjdF9kb2N1bWVudF9yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVzLnB1c2godGhpcy5leHBlY3RfZG9jdW1lbnRfZW5kKSx0aGlzLmV4cGVjdF9ub2RlKHtyb290OiEwfSl9LG4ucHJvdG90eXBlLmV4cGVjdF9ub2RlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lJiYoZT17fSksdGhpcy5yb290X2NvbnRleHQ9ISFlLnJvb3QsdGhpcy5zZXF1ZW5jZV9jb250ZXh0PSEhZS5zZXF1ZW5jZSx0aGlzLm1hcHBpbmdfY29udGV4dD0hIWUubWFwcGluZyx0aGlzLnNpbXBsZV9rZXlfY29udGV4dD0hIWUuc2ltcGxlX2tleSx0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5BbGlhc0V2ZW50P3RoaXMuZXhwZWN0X2FsaWFzKCk6dGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uU2NhbGFyRXZlbnR8fHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLkNvbGxlY3Rpb25TdGFydEV2ZW50Pyh0aGlzLnByb2Nlc3NfYW5jaG9yKCImIiksdGhpcy5wcm9jZXNzX3RhZygpLHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50P3RoaXMuZXhwZWN0X3NjYWxhcigpOnRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNlcXVlbmNlU3RhcnRFdmVudD90aGlzLmZsb3dfbGV2ZWx8fHRoaXMuY2Fub25pY2FsfHx0aGlzLmV2ZW50LmZsb3dfc3R5bGV8fHRoaXMuY2hlY2tfZW1wdHlfc2VxdWVuY2UoKT90aGlzLmV4cGVjdF9mbG93X3NlcXVlbmNlKCk6dGhpcy5leHBlY3RfYmxvY2tfc2VxdWVuY2UoKTp0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5NYXBwaW5nU3RhcnRFdmVudD90aGlzLmZsb3dfbGV2ZWx8fHRoaXMuY2Fub25pY2FsfHx0aGlzLmV2ZW50LmZsb3dfc3R5bGV8fHRoaXMuY2hlY2tfZW1wdHlfbWFwcGluZygpP3RoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZygpOnRoaXMuZXhwZWN0X2Jsb2NrX21hcHBpbmcoKTp2b2lkIDApOnRoaXMuZXJyb3IoImV4cGVjdGVkIE5vZGVFdmVudCwgYnV0IGdvdCIsdGhpcy5ldmVudCl9LG4ucHJvdG90eXBlLmV4cGVjdF9hbGlhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV2ZW50LmFuY2hvcnx8dGhpcy5lcnJvcigiYW5jaG9yIGlzIG5vdCBzcGVjaWZpZWQgZm9yIGFsaWFzIiksdGhpcy5wcm9jZXNzX2FuY2hvcigiKiIpLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCl9LG4ucHJvdG90eXBlLmV4cGVjdF9zY2FsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmNyZWFzZV9pbmRlbnQoe2Zsb3c6ITB9KSx0aGlzLnByb2Nlc3Nfc2NhbGFyKCksdGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X3NlcXVlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JpdGVfaW5kaWNhdG9yKCJbIiwhMCx7d2hpdGVzcGFjZTohMH0pLHRoaXMuZmxvd19sZXZlbCsrLHRoaXMuaW5jcmVhc2VfaW5kZW50KHtmbG93OiEwfSksdGhpcy5zdGF0ZT10aGlzLmV4cGVjdF9maXJzdF9mbG93X3NlcXVlbmNlX2l0ZW19LG4ucHJvdG90eXBlLmV4cGVjdF9maXJzdF9mbG93X3NlcXVlbmNlX2l0ZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uU2VxdWVuY2VFbmRFdmVudD8odGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuZmxvd19sZXZlbC0tLHRoaXMud3JpdGVfaW5kaWNhdG9yKCJdIiwhMSksdGhpcy5zdGF0ZT10aGlzLnN0YXRlcy5wb3AoKSk6KCh0aGlzLmNhbm9uaWNhbHx8dGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoKSYmdGhpcy53cml0ZV9pbmRlbnQoKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfc2VxdWVuY2VfaXRlbSksdGhpcy5leHBlY3Rfbm9kZSh7c2VxdWVuY2U6ITB9KSl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X3NlcXVlbmNlX2l0ZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uU2VxdWVuY2VFbmRFdmVudD8odGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuZmxvd19sZXZlbC0tLHRoaXMuY2Fub25pY2FsJiYodGhpcy53cml0ZV9pbmRpY2F0b3IoIiwiLCExKSx0aGlzLndyaXRlX2luZGVudCgpKSx0aGlzLndyaXRlX2luZGljYXRvcigiXSIsITEpLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCkpOih0aGlzLndyaXRlX2luZGljYXRvcigiLCIsITEpLCh0aGlzLmNhbm9uaWNhbHx8dGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoKSYmdGhpcy53cml0ZV9pbmRlbnQoKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfc2VxdWVuY2VfaXRlbSksdGhpcy5leHBlY3Rfbm9kZSh7c2VxdWVuY2U6ITB9KSl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X21hcHBpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cml0ZV9pbmRpY2F0b3IoInsiLCEwLHt3aGl0ZXNwYWNlOiEwfSksdGhpcy5mbG93X2xldmVsKyssdGhpcy5pbmNyZWFzZV9pbmRlbnQoe2Zsb3c6ITB9KSx0aGlzLnN0YXRlPXRoaXMuZXhwZWN0X2ZpcnN0X2Zsb3dfbWFwcGluZ19rZXl9LG4ucHJvdG90eXBlLmV4cGVjdF9maXJzdF9mbG93X21hcHBpbmdfa2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLk1hcHBpbmdFbmRFdmVudD8odGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuZmxvd19sZXZlbC0tLHRoaXMud3JpdGVfaW5kaWNhdG9yKCJ9IiwhMSksdGhpcy5zdGF0ZT10aGlzLnN0YXRlcy5wb3AoKSk6KCh0aGlzLmNhbm9uaWNhbHx8dGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoKSYmdGhpcy53cml0ZV9pbmRlbnQoKSwhdGhpcy5jYW5vbmljYWwmJnRoaXMuY2hlY2tfc2ltcGxlX2tleSgpPyh0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZ19zaW1wbGVfdmFsdWUpLHRoaXMuZXhwZWN0X25vZGUoe21hcHBpbmc6ITAsc2ltcGxlX2tleTohMH0pKToodGhpcy53cml0ZV9pbmRpY2F0b3IoIj8iLCEwKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZ192YWx1ZSksdGhpcy5leHBlY3Rfbm9kZSh7bWFwcGluZzohMH0pKSl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X21hcHBpbmdfa2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLk1hcHBpbmdFbmRFdmVudD8odGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuZmxvd19sZXZlbC0tLHRoaXMuY2Fub25pY2FsJiYodGhpcy53cml0ZV9pbmRpY2F0b3IoIiwiLCExKSx0aGlzLndyaXRlX2luZGVudCgpKSx0aGlzLndyaXRlX2luZGljYXRvcigifSIsITEpLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCkpOih0aGlzLndyaXRlX2luZGljYXRvcigiLCIsITEpLCh0aGlzLmNhbm9uaWNhbHx8dGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoKSYmdGhpcy53cml0ZV9pbmRlbnQoKSwhdGhpcy5jYW5vbmljYWwmJnRoaXMuY2hlY2tfc2ltcGxlX2tleSgpPyh0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZ19zaW1wbGVfdmFsdWUpLHRoaXMuZXhwZWN0X25vZGUoe21hcHBpbmc6ITAsc2ltcGxlX2tleTohMH0pKToodGhpcy53cml0ZV9pbmRpY2F0b3IoIj8iLCEwKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZ192YWx1ZSksdGhpcy5leHBlY3Rfbm9kZSh7bWFwcGluZzohMH0pKSl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X21hcHBpbmdfc2ltcGxlX3ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JpdGVfaW5kaWNhdG9yKCI6IiwhMSksdGhpcy5zdGF0ZXMucHVzaCh0aGlzLmV4cGVjdF9mbG93X21hcHBpbmdfa2V5KSx0aGlzLmV4cGVjdF9ub2RlKHttYXBwaW5nOiEwfSl9LG4ucHJvdG90eXBlLmV4cGVjdF9mbG93X21hcHBpbmdfdmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5jYW5vbmljYWx8fHRoaXMuY29sdW1uPnRoaXMuYmVzdF93aWR0aCkmJnRoaXMud3JpdGVfaW5kZW50KCksdGhpcy53cml0ZV9pbmRpY2F0b3IoIjoiLCEwKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Zsb3dfbWFwcGluZ19rZXkpLHRoaXMuZXhwZWN0X25vZGUoe21hcHBpbmc6ITB9KX0sbi5wcm90b3R5cGUuZXhwZWN0X2Jsb2NrX3NlcXVlbmNlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5tYXBwaW5nX2NvbnRleHQmJiF0aGlzLmluZGVudGF0aW9uLHRoaXMuaW5jcmVhc2VfaW5kZW50KHtpbmRlbnRsZXNzOmV9KSx0aGlzLnN0YXRlPXRoaXMuZXhwZWN0X2ZpcnN0X2Jsb2NrX3NlcXVlbmNlX2l0ZW19LG4ucHJvdG90eXBlLmV4cGVjdF9maXJzdF9ibG9ja19zZXF1ZW5jZV9pdGVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwZWN0X2Jsb2NrX3NlcXVlbmNlX2l0ZW0oITApfSxuLnByb3RvdHlwZS5leHBlY3RfYmxvY2tfc2VxdWVuY2VfaXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZSYmKGU9ITEpLCFlJiZ0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5TZXF1ZW5jZUVuZEV2ZW50Pyh0aGlzLmluZGVudD10aGlzLmluZGVudHMucG9wKCksdGhpcy5zdGF0ZT10aGlzLnN0YXRlcy5wb3AoKSk6KHRoaXMud3JpdGVfaW5kZW50KCksdGhpcy53cml0ZV9pbmRpY2F0b3IoIi0iLCEwLHtpbmRlbnRhdGlvbjohMH0pLHRoaXMuc3RhdGVzLnB1c2godGhpcy5leHBlY3RfYmxvY2tfc2VxdWVuY2VfaXRlbSksdGhpcy5leHBlY3Rfbm9kZSh7c2VxdWVuY2U6ITB9KSl9LG4ucHJvdG90eXBlLmV4cGVjdF9ibG9ja19tYXBwaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5jcmVhc2VfaW5kZW50KCksdGhpcy5zdGF0ZT10aGlzLmV4cGVjdF9maXJzdF9ibG9ja19tYXBwaW5nX2tleX0sbi5wcm90b3R5cGUuZXhwZWN0X2ZpcnN0X2Jsb2NrX21hcHBpbmdfa2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwZWN0X2Jsb2NrX21hcHBpbmdfa2V5KCEwKX0sbi5wcm90b3R5cGUuZXhwZWN0X2Jsb2NrX21hcHBpbmdfa2V5PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lJiYoZT0hMSksIWUmJnRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLk1hcHBpbmdFbmRFdmVudD8odGhpcy5pbmRlbnQ9dGhpcy5pbmRlbnRzLnBvcCgpLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCkpOih0aGlzLndyaXRlX2luZGVudCgpLHRoaXMuY2hlY2tfc2ltcGxlX2tleSgpPyh0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Jsb2NrX21hcHBpbmdfc2ltcGxlX3ZhbHVlKSx0aGlzLmV4cGVjdF9ub2RlKHttYXBwaW5nOiEwLHNpbXBsZV9rZXk6ITB9KSk6KHRoaXMud3JpdGVfaW5kaWNhdG9yKCI/IiwhMCx7aW5kZW50YXRpb246ITB9KSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Jsb2NrX21hcHBpbmdfdmFsdWUpLHRoaXMuZXhwZWN0X25vZGUoe21hcHBpbmc6ITB9KSkpfSxuLnByb3RvdHlwZS5leHBlY3RfYmxvY2tfbWFwcGluZ19zaW1wbGVfdmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cml0ZV9pbmRpY2F0b3IoIjoiLCExKSx0aGlzLnN0YXRlcy5wdXNoKHRoaXMuZXhwZWN0X2Jsb2NrX21hcHBpbmdfa2V5KSx0aGlzLmV4cGVjdF9ub2RlKHttYXBwaW5nOiEwfSl9LG4ucHJvdG90eXBlLmV4cGVjdF9ibG9ja19tYXBwaW5nX3ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JpdGVfaW5kZW50KCksdGhpcy53cml0ZV9pbmRpY2F0b3IoIjoiLCEwLHtpbmRlbnRhdGlvbjohMH0pLHRoaXMuc3RhdGVzLnB1c2godGhpcy5leHBlY3RfYmxvY2tfbWFwcGluZ19rZXkpLHRoaXMuZXhwZWN0X25vZGUoe21hcHBpbmc6ITB9KX0sbi5wcm90b3R5cGUuY2hlY2tfZW1wdHlfZG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5ldmVudCBpbnN0YW5jZW9mIG8uRG9jdW1lbnRTdGFydEV2ZW50JiYwIT09dGhpcy5ldmVudHMubGVuZ3RoJiYoKGU9dGhpcy5ldmVudHNbMF0paW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50JiZudWxsPT1lLmFuY2hvciYmbnVsbD09ZS50YWcmJmUuaW1wbGljaXQmJiIiPT09ZS52YWx1ZSl9LG4ucHJvdG90eXBlLmNoZWNrX2VtcHR5X3NlcXVlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNlcXVlbmNlU3RhcnRFdmVudCYmdGhpcy5ldmVudHNbMF1pbnN0YW5jZW9mIG8uU2VxdWVuY2VFbmRFdmVudH0sbi5wcm90b3R5cGUuY2hlY2tfZW1wdHlfbWFwcGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5NYXBwaW5nU3RhcnRFdmVudCYmdGhpcy5ldmVudHNbMF1pbnN0YW5jZW9mIG8uTWFwcGluZ0VuZEV2ZW50fSxuLnByb3RvdHlwZS5jaGVja19zaW1wbGVfa2V5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9MCx0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5Ob2RlRXZlbnQmJm51bGwhPXRoaXMuZXZlbnQuYW5jaG9yJiYobnVsbD09dGhpcy5wcmVwYXJlZF9hbmNob3ImJih0aGlzLnByZXBhcmVkX2FuY2hvcj10aGlzLnByZXBhcmVfYW5jaG9yKHRoaXMuZXZlbnQuYW5jaG9yKSksZSs9dGhpcy5wcmVwYXJlZF9hbmNob3IubGVuZ3RoKSxudWxsIT10aGlzLmV2ZW50LnRhZyYmKHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50fHx0aGlzLmV2ZW50IGluc3RhbmNlb2Ygby5Db2xsZWN0aW9uU3RhcnRFdmVudCkmJihudWxsPT10aGlzLnByZXBhcmVkX3RhZyYmKHRoaXMucHJlcGFyZWRfdGFnPXRoaXMucHJlcGFyZV90YWcodGhpcy5ldmVudC50YWcpKSxlKz10aGlzLnByZXBhcmVkX3RhZy5sZW5ndGgpLHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50JiYobnVsbD09dGhpcy5hbmFseXNpcyYmKHRoaXMuYW5hbHlzaXM9dGhpcy5hbmFseXplX3NjYWxhcih0aGlzLmV2ZW50LnZhbHVlKSksZSs9dGhpcy5hbmFseXNpcy5zY2FsYXIubGVuZ3RoKSxlPDEyOCYmKHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLkFsaWFzRXZlbnR8fHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50JiYhdGhpcy5hbmFseXNpcy5lbXB0eSYmIXRoaXMuYW5hbHlzaXMubXVsdGlsaW5lfHx0aGlzLmNoZWNrX2VtcHR5X3NlcXVlbmNlKCl8fHRoaXMuY2hlY2tfZW1wdHlfbWFwcGluZygpKX0sbi5wcm90b3R5cGUucHJvY2Vzc19hbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PXRoaXMuZXZlbnQuYW5jaG9yP3ZvaWQodGhpcy5wcmVwYXJlZF9hbmNob3I9bnVsbCk6KG51bGw9PXRoaXMucHJlcGFyZWRfYW5jaG9yJiYodGhpcy5wcmVwYXJlZF9hbmNob3I9dGhpcy5wcmVwYXJlX2FuY2hvcih0aGlzLmV2ZW50LmFuY2hvcikpLHRoaXMucHJlcGFyZWRfYW5jaG9yJiZ0aGlzLndyaXRlX2luZGljYXRvcigiIitlK3RoaXMucHJlcGFyZWRfYW5jaG9yLCEwKSx0aGlzLnByZXBhcmVkX2FuY2hvcj1udWxsKX0sbi5wcm90b3R5cGUucHJvY2Vzc190YWc9ZnVuY3Rpb24oKXt2YXIgZTtpZihlPXRoaXMuZXZlbnQudGFnLHRoaXMuZXZlbnQgaW5zdGFuY2VvZiBvLlNjYWxhckV2ZW50KXtpZihudWxsPT10aGlzLnN0eWxlJiYodGhpcy5zdHlsZT10aGlzLmNob29zZV9zY2FsYXJfc3R5bGUoKSksKCF0aGlzLmNhbm9uaWNhbHx8bnVsbD09ZSkmJigiIj09PXRoaXMuc3R5bGUmJnRoaXMuZXZlbnQuaW1wbGljaXRbMF18fCIiIT09dGhpcy5zdHlsZSYmdGhpcy5ldmVudC5pbXBsaWNpdFsxXSkpcmV0dXJuIHZvaWQodGhpcy5wcmVwYXJlZF90YWc9bnVsbCk7dGhpcy5ldmVudC5pbXBsaWNpdFswXSYmbnVsbD09ZSYmKGU9IiEiLHRoaXMucHJlcGFyZWRfdGFnPW51bGwpfWVsc2UgaWYoKCF0aGlzLmNhbm9uaWNhbHx8bnVsbD09ZSkmJnRoaXMuZXZlbnQuaW1wbGljaXQpcmV0dXJuIHZvaWQodGhpcy5wcmVwYXJlZF90YWc9bnVsbCk7cmV0dXJuIG51bGw9PWUmJnRoaXMuZXJyb3IoInRhZyBpcyBub3Qgc3BlY2lmaWVkIiksbnVsbD09dGhpcy5wcmVwYXJlZF90YWcmJih0aGlzLnByZXBhcmVkX3RhZz10aGlzLnByZXBhcmVfdGFnKGUpKSx0aGlzLndyaXRlX2luZGljYXRvcih0aGlzLnByZXBhcmVkX3RhZywhMCksdGhpcy5wcmVwYXJlZF90YWc9bnVsbH0sbi5wcm90b3R5cGUucHJvY2Vzc19zY2FsYXI9ZnVuY3Rpb24oKXt2YXIgZTtzd2l0Y2gobnVsbD09dGhpcy5hbmFseXNpcyYmKHRoaXMuYW5hbHlzaXM9dGhpcy5hbmFseXplX3NjYWxhcih0aGlzLmV2ZW50LnZhbHVlKSksbnVsbD09dGhpcy5zdHlsZSYmKHRoaXMuc3R5bGU9dGhpcy5jaG9vc2Vfc2NhbGFyX3N0eWxlKCkpLGU9IXRoaXMuc2ltcGxlX2tleV9jb250ZXh0LHRoaXMuc3R5bGUpe2Nhc2UnIic6dGhpcy53cml0ZV9kb3VibGVfcXVvdGVkKHRoaXMuYW5hbHlzaXMuc2NhbGFyLGUpO2JyZWFrO2Nhc2UiJyI6dGhpcy53cml0ZV9zaW5nbGVfcXVvdGVkKHRoaXMuYW5hbHlzaXMuc2NhbGFyLGUpO2JyZWFrO2Nhc2UiPiI6dGhpcy53cml0ZV9mb2xkZWQodGhpcy5hbmFseXNpcy5zY2FsYXIpO2JyZWFrO2Nhc2UifCI6dGhpcy53cml0ZV9saXRlcmFsKHRoaXMuYW5hbHlzaXMuc2NhbGFyKTticmVhaztkZWZhdWx0OnRoaXMud3JpdGVfcGxhaW4odGhpcy5hbmFseXNpcy5zY2FsYXIsZSl9cmV0dXJuIHRoaXMuYW5hbHlzaXM9bnVsbCx0aGlzLnN0eWxlPW51bGx9LG4ucHJvdG90eXBlLmNob29zZV9zY2FsYXJfc3R5bGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbD09dGhpcy5hbmFseXNpcyYmKHRoaXMuYW5hbHlzaXM9dGhpcy5hbmFseXplX3NjYWxhcih0aGlzLmV2ZW50LnZhbHVlKSksJyInPT09dGhpcy5ldmVudC5zdHlsZXx8dGhpcy5jYW5vbmljYWw/JyInOnRoaXMuZXZlbnQuc3R5bGV8fCF0aGlzLmV2ZW50LmltcGxpY2l0WzBdfHx0aGlzLnNpbXBsZV9rZXlfY29udGV4dCYmKHRoaXMuYW5hbHlzaXMuZW1wdHl8fHRoaXMuYW5hbHlzaXMubXVsdGlsaW5lKXx8ISh0aGlzLmZsb3dfbGV2ZWwmJnRoaXMuYW5hbHlzaXMuYWxsb3dfZmxvd19wbGFpbnx8IXRoaXMuZmxvd19sZXZlbCYmdGhpcy5hbmFseXNpcy5hbGxvd19ibG9ja19wbGFpbik/dGhpcy5ldmVudC5zdHlsZSYmKGU9dGhpcy5ldmVudC5zdHlsZSxsLmNhbGwoInw+IixlKT49MCkmJiF0aGlzLmZsb3dfbGV2ZWwmJiF0aGlzLnNpbXBsZV9rZXlfY29udGV4dCYmdGhpcy5hbmFseXNpcy5hbGxvd19ibG9jaz90aGlzLmV2ZW50LnN0eWxlOnRoaXMuZXZlbnQuc3R5bGUmJiInIiE9PXRoaXMuZXZlbnQuc3R5bGV8fCF0aGlzLmFuYWx5c2lzLmFsbG93X3NpbmdsZV9xdW90ZWR8fHRoaXMuc2ltcGxlX2tleV9jb250ZXh0JiZ0aGlzLmFuYWx5c2lzLm11bHRpbGluZT8nIic6IiciOiIifSxuLnByb3RvdHlwZS5wcmVwYXJlX3ZlcnNpb249ZnVuY3Rpb24oZSl7dmFyIHQsbixyO3JldHVybiB0PWVbMF0sbj1lWzFdLHI9dCsiLiIrbiwxPT09dD9yOnRoaXMuZXJyb3IoInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiIscil9LG4ucHJvdG90eXBlLnByZXBhcmVfdGFnX2hhbmRsZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbztmb3IoZXx8dGhpcy5lcnJvcigidGFnIGhhbmRsZSBtdXN0IG5vdCBiZSBlbXB0eSIpLCIhIj09PWVbMF0mJiIhIj09PWUuc2xpY2UoLTEpfHx0aGlzLmVycm9yKCJ0YWcgaGFuZGxlIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoICchJzoiLGUpLG89ZS5zbGljZSgxLC0xKSxuPTAscj1vLmxlbmd0aDtuPHI7bisrKSIwIjw9KHQ9b1tuXSkmJnQ8PSI5Inx8IkEiPD10JiZ0PD0iWiJ8fCJhIjw9dCYmdDw9InoifHxsLmNhbGwoIi1fIix0KT49MHx8dGhpcy5lcnJvcigiaW52YWxpZCBjaGFyYWN0ZXIgJyIrdCsiJyBpbiB0aGUgdGFnIGhhbmRsZToiLGUpO3JldHVybiBlfSxuLnByb3RvdHlwZS5wcmVwYXJlX3RhZ19wcmVmaXg9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG87Zm9yKGV8fHRoaXMuZXJyb3IoInRhZyBwcmVmaXggbXVzdCBub3QgYmUgZW1wdHkiKSxuPVtdLG89MCxyPSsoIiEiPT09ZVswXSk7cjxlLmxlbmd0aDspdD1lW3JdLCIwIjw9dCYmdDw9IjkifHwiQSI8PXQmJnQ8PSJaInx8ImEiPD10JiZ0PD0ieiJ8fGwuY2FsbCgiLTsvPyE6QCY9KyQsXy5+KicoKVtdIix0KT49MD9yKys6KG88ciYmbi5wdXNoKGUuc2xpY2UobyxyKSksbz1yKz0xLG4ucHVzaCh0KSk7cmV0dXJuIG88ciYmbi5wdXNoKGUuc2xpY2UobyxyKSksbi5qb2luKCIiKX0sbi5wcm90b3R5cGUucHJlcGFyZV90YWc9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLHUsYyxkLF8scCxmO2lmKGV8fHRoaXMuZXJyb3IoInRhZyBtdXN0IG5vdCBiZSBlbXB0eSIpLCIhIj09PWUpcmV0dXJuIGU7Zm9yKG89bnVsbCxwPWUsZD1mdW5jdGlvbigpe3ZhciBlLHQ7ZT10aGlzLnRhZ19wcmVmaXhlcyx0PVtdO2ZvcihpIGluIGUpYS5jYWxsKGUsaSkmJnQucHVzaChpKTtyZXR1cm4gdH0uY2FsbCh0aGlzKS5zb3J0KCkscz0wLHU9ZC5sZW5ndGg7czx1O3MrKyljPWRbc10sMD09PWUuaW5kZXhPZihjKSYmKCIhIj09PWN8fGMubGVuZ3RoPGUubGVuZ3RoKSYmKG89dGhpcy50YWdfcHJlZml4ZXNbY10scD1lLnNsaWNlKGMubGVuZ3RoKSk7Zm9yKG49W10sXz1yPTA7cjxwLmxlbmd0aDspdD1wW3JdLCIwIjw9dCYmdDw9IjkifHwiQSI8PXQmJnQ8PSJaInx8ImEiPD10JiZ0PD0ieiJ8fGwuY2FsbCgiLTsvPyE6QCY9KyQsXy5+KicoKVtdIix0KT49MHx8IiEiPT09dCYmIiEiIT09bz9yKys6KF88ciYmbi5wdXNoKHAuc2xpY2UoXyxyKSksXz1yKz0xLG4ucHVzaCh0KSk7cmV0dXJuIF88ciYmbi5wdXNoKHAuc2xpY2UoXyxyKSksZj1uLmpvaW4oIiIpLG8/IiIrbytmOiIhPCIrZisiPiJ9LG4ucHJvdG90eXBlLnByZXBhcmVfYW5jaG9yPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtmb3IoZXx8dGhpcy5lcnJvcigiYW5jaG9yIG11c3Qgbm90IGJlIGVtcHR5Iiksbj0wLHI9ZS5sZW5ndGg7bjxyO24rKykiMCI8PSh0PWVbbl0pJiZ0PD0iOSJ8fCJBIjw9dCYmdDw9IloifHwiYSI8PXQmJnQ8PSJ6Inx8bC5jYWxsKCItXyIsdCk+PTB8fHRoaXMuZXJyb3IoImludmFsaWQgY2hhcmFjdGVyICciK3QrIicgaW4gdGhlIGFuY2hvcjoiLGUpO3JldHVybiBlfSxuLnByb3RvdHlwZS5hbmFseXplX3NjYWxhcj1mdW5jdGlvbih0KXt2YXIgbixvLHMsaSxhLHUsYyxkLF8scCxmLG0saCxnLGIsRSx5LHYsVCxBLEMsTyxTLFIsajtmb3IodHx8bmV3IGUodCwhMCwhMSwhMSwhMCwhMCwhMCwhMSksdT0hMSxfPSExLEU9ITEsUz0hMSwhMSxnPSExLGg9ITEsaj0hMSxSPSExLGM9ITEsTz0hMSwwIT09dC5pbmRleE9mKCItLS0iKSYmMCE9PXQuaW5kZXhPZigiLi4uIil8fCh1PSEwLF89ITApLHk9ITAscD0xPT09dC5sZW5ndGh8fChBPXRbMV0sbC5jYWxsKCJcMCBcdFxyXG7ChVx1MjAyOFx1MjAyOSIsQSk+PTApLFQ9ITEsdj0hMSxtPTAsbT1mPTAsYj10Lmxlbmd0aDtmPGI7bT0rK2YpZD10W21dLDA9PT1tP2wuY2FsbCgiIyxbXXt9JiohfD4nXCIlQGAiLGQpPj0wfHwiLSI9PT1kJiZwPyhfPSEwLHU9ITApOmwuY2FsbCgiPzoiLGQpPj0wJiYoXz0hMCxwJiYodT0hMCkpOmwuY2FsbCgiLD9bXXt9IixkKT49MD9fPSEwOiI6Ij09PWQ/KF89ITAscCYmKHU9ITApKToiIyI9PT1kJiZ5JiYoXz0hMCx1PSEwKSxsLmNhbGwoIlxuwoVcdTIwMjhcdTIwMjkiLGQpPj0wJiYoRT0hMCksIlxuIj09PWR8fCIgIjw9ZCYmZDw9In4ifHwoIlx1ZmVmZiIhPT1kJiYoIsKFIj09PWR8fCLCoCI8PWQmJmQ8PSLtn78ifHwi7oCAIjw9ZCYmZDw9Iu+/vSIpPyghMCx0aGlzLmFsbG93X3VuaWNvZGV8fChTPSEwKSk6Uz0hMCksIiAiPT09ZD8oMD09PW0mJihnPSEwKSxtPT09dC5sZW5ndGgtMSYmKGo9ITApLHYmJihjPSEwKSx2PSExLFQ9ITApOmwuY2FsbCgiXG7ChVx1MjAyOFx1MjAyOSIsZCk+PTA/KDA9PT1tJiYoaD0hMCksbT09PXQubGVuZ3RoLTEmJihSPSEwKSxUJiYoTz0hMCksdj0hMCxUPSExKToodj0hMSxUPSExKSx5PWwuY2FsbChyLGQpPj0wLHA9bSsyPj10Lmxlbmd0aHx8KEM9dFttKzJdLGwuY2FsbChyLEMpPj0wKTtyZXR1cm4gaT0hMCxvPSEwLGE9ITAscz0hMCxuPSEwLChnfHxofHxqfHxSKSYmKGk9bz0hMSksaiYmKG49ITEpLGMmJihpPW89YT0hMSksKE98fFMpJiYoaT1vPWE9bj0hMSksRSYmKGk9bz0hMSksXyYmKGk9ITEpLHUmJihvPSExKSxuZXcgZSh0LCExLEUsaSxvLGEscyxuKX0sbi5wcm90b3R5cGUud3JpdGVfc3RyZWFtX3N0YXJ0PWZ1bmN0aW9uKCl7aWYodGhpcy5lbmNvZGluZyYmMD09PXRoaXMuZW5jb2RpbmcuaW5kZXhPZigidXRmLTE2IikpcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKCJcdWZlZmYiLHRoaXMuZW5jb2RpbmcpfSxuLnByb3RvdHlwZS53cml0ZV9zdHJlYW1fZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmx1c2hfc3RyZWFtKCl9LG4ucHJvdG90eXBlLndyaXRlX2luZGljYXRvcj1mdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG51bGw9PW4mJihuPXt9KSxyPXRoaXMud2hpdGVzcGFjZXx8IXQ/ZToiICIrZSx0aGlzLndoaXRlc3BhY2U9ISFuLndoaXRlc3BhY2UsdGhpcy5pbmRlbnRhdGlvbiYmKHRoaXMuaW5kZW50YXRpb249ISFuLmluZGVudGF0aW9uKSx0aGlzLmNvbHVtbis9ci5sZW5ndGgsdGhpcy5vcGVuX2VuZGVkPSExLHRoaXMuc3RyZWFtLndyaXRlKHIsdGhpcy5lbmNvZGluZyl9LG4ucHJvdG90eXBlLndyaXRlX2luZGVudD1mdW5jdGlvbigpe3ZhciBlLHQsbjtpZih0PW51bGwhPShuPXRoaXMuaW5kZW50KT9uOjAsKCF0aGlzLmluZGVudGF0aW9ufHx0aGlzLmNvbHVtbj50fHx0aGlzLmNvbHVtbj09PXQmJiF0aGlzLndoaXRlc3BhY2UpJiZ0aGlzLndyaXRlX2xpbmVfYnJlYWsoKSx0aGlzLmNvbHVtbjx0KXJldHVybiB0aGlzLndoaXRlc3BhY2U9ITAsZT1uZXcgQXJyYXkodC10aGlzLmNvbHVtbisxKS5qb2luKCIgIiksdGhpcy5jb2x1bW49dCx0aGlzLnN0cmVhbS53cml0ZShlLHRoaXMuZW5jb2RpbmcpfSxuLnByb3RvdHlwZS53cml0ZV9saW5lX2JyZWFrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndoaXRlc3BhY2U9ITAsdGhpcy5pbmRlbnRhdGlvbj0hMCx0aGlzLmxpbmUrPTEsdGhpcy5jb2x1bW49MCx0aGlzLnN0cmVhbS53cml0ZShudWxsIT1lP2U6dGhpcy5iZXN0X2xpbmVfYnJlYWssdGhpcy5lbmNvZGluZyl9LG4ucHJvdG90eXBlLndyaXRlX3ZlcnNpb25fZGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0cmVhbS53cml0ZSgiJVlBTUwgIitlLHRoaXMuZW5jb2RpbmcpLHRoaXMud3JpdGVfbGluZV9icmVhaygpfSxuLnByb3RvdHlwZS53cml0ZV90YWdfZGlyZWN0aXZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKCIlVEFHICIrZSsiICIrdCx0aGlzLmVuY29kaW5nKSx0aGlzLndyaXRlX2xpbmVfYnJlYWsoKX0sbi5wcm90b3R5cGUud3JpdGVfc2luZ2xlX3F1b3RlZD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxzLGksYSx1LGMsZCxfO2ZvcihudWxsPT10JiYodD0hMCksdGhpcy53cml0ZV9pbmRpY2F0b3IoIiciLCEwKSxkPSExLHI9ITEsXz1pPTA7aTw9ZS5sZW5ndGg7KXtpZihvPWVbaV0sZCludWxsIT1vJiYiICI9PT1vfHwoXysxPT09aSYmdGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoJiZ0JiYwIT09XyYmaSE9PWUubGVuZ3RoP3RoaXMud3JpdGVfaW5kZW50KCk6KHM9ZS5zbGljZShfLGkpLHRoaXMuY29sdW1uKz1zLmxlbmd0aCx0aGlzLnN0cmVhbS53cml0ZShzLHRoaXMuZW5jb2RpbmcpKSxfPWkpO2Vsc2UgaWYocil7aWYobnVsbD09b3x8bC5jYWxsKCJcbsKFXHUyMDI4XHUyMDI5IixvKTwwKXtmb3IoIlxuIj09PWVbX10mJnRoaXMud3JpdGVfbGluZV9icmVhaygpLGM9ZS5zbGljZShfLGkpLGE9MCx1PWMubGVuZ3RoO2E8dTthKyspbj1jW2FdLCJcbiI9PT1uP3RoaXMud3JpdGVfbGluZV9icmVhaygpOnRoaXMud3JpdGVfbGluZV9icmVhayhuKTt0aGlzLndyaXRlX2luZGVudCgpLF89aX19ZWxzZShudWxsPT1vfHxsLmNhbGwoIiBcbsKFXHUyMDI4XHUyMDI5IixvKT49MHx8IiciPT09bykmJl88aSYmKHM9ZS5zbGljZShfLGkpLHRoaXMuY29sdW1uKz1zLmxlbmd0aCx0aGlzLnN0cmVhbS53cml0ZShzLHRoaXMuZW5jb2RpbmcpLF89aSk7IiciPT09byYmKHRoaXMuY29sdW1uKz0yLHRoaXMuc3RyZWFtLndyaXRlKCInJyIsdGhpcy5lbmNvZGluZyksXz1pKzEpLG51bGwhPW8mJihkPSIgIj09PW8scj1sLmNhbGwoIlxuwoVcdTIwMjhcdTIwMjkiLG8pPj0wKSxpKyt9cmV0dXJuIHRoaXMud3JpdGVfaW5kaWNhdG9yKCInIiwhMSl9LG4ucHJvdG90eXBlLndyaXRlX2RvdWJsZV9xdW90ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saTtmb3IobnVsbD09dCYmKHQ9ITApLHRoaXMud3JpdGVfaW5kaWNhdG9yKCciJywhMCksaT1vPTA7bzw9ZS5sZW5ndGg7KW49ZVtvXSwobnVsbD09bnx8bC5jYWxsKCciXFzChVx1MjAyOFx1MjAyOVx1ZmVmZicsbik+PTB8fCEoIiAiPD1uJiZuPD0ifiJ8fHRoaXMuYWxsb3dfdW5pY29kZSYmKCLCoCI8PW4mJm48PSLtn78ifHwi7oCAIjw9biYmbjw9Iu+/vSIpKSkmJihpPG8mJihyPWUuc2xpY2UoaSxvKSx0aGlzLmNvbHVtbis9ci5sZW5ndGgsdGhpcy5zdHJlYW0ud3JpdGUocix0aGlzLmVuY29kaW5nKSxpPW8pLG51bGwhPW4mJihyPW4gaW4gdT8iXFwiK3Vbbl06bjw9IsO/Ij8iXFx4IitzLnBhZF9sZWZ0KHMudG9faGV4KG4pLCIwIiwyKTpuPD0i77+/Ij8iXFx1IitzLnBhZF9sZWZ0KHMudG9faGV4KG4pLCIwIiw0KToiXFxVIitzLnBhZF9sZWZ0KHMudG9faGV4KG4pLCIwIiwxNiksdGhpcy5jb2x1bW4rPXIubGVuZ3RoLHRoaXMuc3RyZWFtLndyaXRlKHIsdGhpcy5lbmNvZGluZyksaT1vKzEpKSx0JiYwPG8mJm88ZS5sZW5ndGgtMSYmKCIgIj09PW58fGk+PW8pJiZ0aGlzLmNvbHVtbisoby1pKT50aGlzLmJlc3Rfd2lkdGgmJihyPWUuc2xpY2UoaSxvKSsiXFwiLGk8byYmKGk9byksdGhpcy5jb2x1bW4rPXIubGVuZ3RoLHRoaXMuc3RyZWFtLndyaXRlKHIsdGhpcy5lbmNvZGluZyksdGhpcy53cml0ZV9pbmRlbnQoKSx0aGlzLndoaXRlc3BhY2U9ITEsdGhpcy5pbmRlbnRhdGlvbj0hMSwiICI9PT1lW2ldJiYocj0iXFwiLHRoaXMuY29sdW1uKz1yLmxlbmd0aCx0aGlzLnN0cmVhbS53cml0ZShyLHRoaXMuZW5jb2RpbmcpKSksbysrO3JldHVybiB0aGlzLndyaXRlX2luZGljYXRvcignIicsITEpfSxuLnByb3RvdHlwZS53cml0ZV9mb2xkZWQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLGEsdSxjLGQsXyxwLGY7Zm9yKGk9dGhpcy5kZXRlcm1pbmVfYmxvY2tfaGludHMoZSksdGhpcy53cml0ZV9pbmRpY2F0b3IoIj4iK2ksITApLCIrIj09PWkuc2xpY2UoLTEpJiYodGhpcy5vcGVuX2VuZGVkPSEwKSx0aGlzLndyaXRlX2xpbmVfYnJlYWsoKSx1PSEwLG49ITAscD0hMSxmPXM9MCxfPVtdO3M8PWUubGVuZ3RoOyl7aWYocj1lW3NdLG4pe2lmKG51bGw9PXJ8fGwuY2FsbCgiXG7ChVx1MjAyOFx1MjAyOSIscik8MCl7Zm9yKHV8fG51bGw9PXJ8fCIgIj09PXJ8fCJcbiIhPT1lW2ZdfHx0aGlzLndyaXRlX2xpbmVfYnJlYWsoKSx1PSIgIj09PXIsZD1lLnNsaWNlKGYscyksYT0wLGM9ZC5sZW5ndGg7YTxjO2ErKyl0PWRbYV0sIlxuIj09PXQ/dGhpcy53cml0ZV9saW5lX2JyZWFrKCk6dGhpcy53cml0ZV9saW5lX2JyZWFrKHQpO251bGwhPXImJnRoaXMud3JpdGVfaW5kZW50KCksZj1zfX1lbHNlIHA/IiAiIT09ciYmKGYrMT09PXMmJnRoaXMuY29sdW1uPnRoaXMuYmVzdF93aWR0aD90aGlzLndyaXRlX2luZGVudCgpOihvPWUuc2xpY2UoZixzKSx0aGlzLmNvbHVtbis9by5sZW5ndGgsdGhpcy5zdHJlYW0ud3JpdGUobyx0aGlzLmVuY29kaW5nKSksZj1zKToobnVsbD09cnx8bC5jYWxsKCIgXG7ChVx1MjAyOFx1MjAyOSIscik+PTApJiYobz1lLnNsaWNlKGYscyksdGhpcy5jb2x1bW4rPW8ubGVuZ3RoLHRoaXMuc3RyZWFtLndyaXRlKG8sdGhpcy5lbmNvZGluZyksbnVsbD09ciYmdGhpcy53cml0ZV9saW5lX2JyZWFrKCksZj1zKTtudWxsIT1yJiYobj1sLmNhbGwoIlxuwoVcdTIwMjhcdTIwMjkiLHIpPj0wLHA9IiAiPT09ciksXy5wdXNoKHMrKyl9cmV0dXJuIF99LG4ucHJvdG90eXBlLndyaXRlX2xpdGVyYWw9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8scyxpLGEsdSxjLGQsXztmb3IoaT10aGlzLmRldGVybWluZV9ibG9ja19oaW50cyhlKSx0aGlzLndyaXRlX2luZGljYXRvcigifCIraSwhMCksIisiPT09aS5zbGljZSgtMSkmJih0aGlzLm9wZW5fZW5kZWQ9ITApLHRoaXMud3JpdGVfbGluZV9icmVhaygpLG49ITAsXz1zPTAsZD1bXTtzPD1lLmxlbmd0aDspe2lmKHI9ZVtzXSxuKXtpZihudWxsPT1yfHxsLmNhbGwoIlxuwoVcdTIwMjhcdTIwMjkiLHIpPDApe2ZvcihjPWUuc2xpY2UoXyxzKSxhPTAsdT1jLmxlbmd0aDthPHU7YSsrKXQ9Y1thXSwiXG4iPT09dD90aGlzLndyaXRlX2xpbmVfYnJlYWsoKTp0aGlzLndyaXRlX2xpbmVfYnJlYWsodCk7bnVsbCE9ciYmdGhpcy53cml0ZV9pbmRlbnQoKSxfPXN9fWVsc2UobnVsbD09cnx8bC5jYWxsKCJcbsKFXHUyMDI4XHUyMDI5IixyKT49MCkmJihvPWUuc2xpY2UoXyxzKSx0aGlzLnN0cmVhbS53cml0ZShvLHRoaXMuZW5jb2RpbmcpLG51bGw9PXImJnRoaXMud3JpdGVfbGluZV9icmVhaygpLF89cyk7bnVsbCE9ciYmKG49bC5jYWxsKCJcbsKFXHUyMDI4XHUyMDI5IixyKT49MCksZC5wdXNoKHMrKyl9cmV0dXJuIGR9LG4ucHJvdG90eXBlLndyaXRlX3BsYWluPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsaSxhLHUsYyxkLF8scDtpZihudWxsPT10JiYodD0hMCksZSl7Zm9yKHRoaXMucm9vdF9jb250ZXh0JiYodGhpcy5vcGVuX2VuZGVkPSEwKSx0aGlzLndoaXRlc3BhY2V8fChzPSIgIix0aGlzLmNvbHVtbis9cy5sZW5ndGgsdGhpcy5zdHJlYW0ud3JpdGUocyx0aGlzLmVuY29kaW5nKSksdGhpcy53aGl0ZXNwYWNlPSExLHRoaXMuaW5kZW50YXRpb249ITEsXz0hMSxyPSExLHA9aT0wLGQ9W107aTw9ZS5sZW5ndGg7KXtpZihvPWVbaV0sXykiICIhPT1vJiYocCsxPT09aSYmdGhpcy5jb2x1bW4+dGhpcy5iZXN0X3dpZHRoJiZ0Pyh0aGlzLndyaXRlX2luZGVudCgpLHRoaXMud2hpdGVzcGFjZT0hMSx0aGlzLmluZGVudGF0aW9uPSExKToocz1lLnNsaWNlKHAsaSksdGhpcy5jb2x1bW4rPXMubGVuZ3RoLHRoaXMuc3RyZWFtLndyaXRlKHMsdGhpcy5lbmNvZGluZykpLHA9aSk7ZWxzZSBpZihyKXtpZihsLmNhbGwoIlxuwoVcdTIwMjhcdTIwMjkiLG8pPDApe2ZvcigiXG4iPT09ZVtwXSYmdGhpcy53cml0ZV9saW5lX2JyZWFrKCksYz1lLnNsaWNlKHAsaSksYT0wLHU9Yy5sZW5ndGg7YTx1O2ErKyluPWNbYV0sIlxuIj09PW4/dGhpcy53cml0ZV9saW5lX2JyZWFrKCk6dGhpcy53cml0ZV9saW5lX2JyZWFrKG4pO3RoaXMud3JpdGVfaW5kZW50KCksdGhpcy53aGl0ZXNwYWNlPSExLHRoaXMuaW5kZW50YXRpb249ITEscD1pfX1lbHNlKG51bGw9PW98fGwuY2FsbCgiIFxuwoVcdTIwMjhcdTIwMjkiLG8pPj0wKSYmKHM9ZS5zbGljZShwLGkpLHRoaXMuY29sdW1uKz1zLmxlbmd0aCx0aGlzLnN0cmVhbS53cml0ZShzLHRoaXMuZW5jb2RpbmcpLHA9aSk7bnVsbCE9byYmKF89IiAiPT09byxyPWwuY2FsbCgiXG7ChVx1MjAyOFx1MjAyOSIsbyk+PTApLGQucHVzaChpKyspfXJldHVybiBkfX0sbi5wcm90b3R5cGUuZGV0ZXJtaW5lX2Jsb2NrX2hpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLHM7cmV0dXJuIG49IiIsdD1lWzBdLHI9ZS5sZW5ndGgtMixzPWVbcisrXSxvPWVbcisrXSxsLmNhbGwoIiBcbsKFXHUyMDI4XHUyMDI5Iix0KT49MCYmKG4rPXRoaXMuYmVzdF9pbmRlbnQpLGwuY2FsbCgiXG7ChVx1MjAyOFx1MjAyOSIsbyk8MD9uKz0iLSI6KDE9PT1lLmxlbmd0aHx8bC5jYWxsKCJcbsKFXHUyMDI4XHUyMDI5IixzKT49MCkmJihuKz0iKyIpLG59LG4ucHJvdG90eXBlLmZsdXNoX3N0cmVhbT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZihlPXRoaXMuc3RyZWFtKS5mbHVzaD9lLmZsdXNoKCk6dm9pZCAwfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlLG4pe3ZhciByLG87dGhyb3cgbiYmKG49bnVsbCE9KHI9bnVsbCE9biYmbnVsbCE9KG89bi5jb25zdHJ1Y3Rvcik/by5uYW1lOnZvaWQgMCk/cjpzLmluc3BlY3QobikpLG5ldyB0LkVtaXR0ZXJFcnJvcihlKyhuPyIgIituOiIiKSl9LG59KCksZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixvLHMsaSxhKXt0aGlzLnNjYWxhcj1lLHRoaXMuZW1wdHk9dCx0aGlzLm11bHRpbGluZT1uLHRoaXMuYWxsb3dfZmxvd19wbGFpbj1yLHRoaXMuYWxsb3dfYmxvY2tfcGxhaW49byx0aGlzLmFsbG93X3NpbmdsZV9xdW90ZWQ9cyx0aGlzLmFsbG93X2RvdWJsZV9xdW90ZWQ9aSx0aGlzLmFsbG93X2Jsb2NrPWF9cmV0dXJuIGV9KCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvZXJyb3JzLmpzIjpmdW5jdGlvbihlLHQpeyhmdW5jdGlvbigpe3ZhciBlPVtdLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5sZW5ndGg7dDxuO3QrKylpZih0IGluIHRoaXMmJnRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSx0PWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1mb3IodmFyIG8gaW4gdCluLmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIHIucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUuX19zdXBlcl9fPXQucHJvdG90eXBlLGV9LG49e30uaGFzT3duUHJvcGVydHk7dGhpcy5NYXJrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQsbixyKXt0aGlzLmxpbmU9ZSx0aGlzLmNvbHVtbj10LHRoaXMuYnVmZmVyPW4sdGhpcy5wb2ludGVyPXJ9cmV0dXJuIHQucHJvdG90eXBlLmdldF9zbmlwcGV0PWZ1bmN0aW9uKHQsbil7dmFyIHIsbyxzLGksYSxsLHU7aWYobnVsbD09dCYmKHQ9NCksbnVsbD09biYmKG49NzUpLG51bGw9PXRoaXMuYnVmZmVyKXJldHVybiBudWxsO2ZvcihyPSJcMFxyXG7ChVx1MjAyOFx1MjAyOSIscz0iIixsPXRoaXMucG9pbnRlcjtsPjAmJihpPXRoaXMuYnVmZmVyW2wtMV0sZS5jYWxsKHIsaSk8MCk7KWlmKGwtLSx0aGlzLnBvaW50ZXItbD5uLzItMSl7cz0iIC4uLiAiLGwrPTU7YnJlYWt9Zm9yKHU9IiIsbz10aGlzLnBvaW50ZXI7bzx0aGlzLmJ1ZmZlci5sZW5ndGgmJihhPXRoaXMuYnVmZmVyW29dLGUuY2FsbChyLGEpPDApOylpZigrK28tdGhpcy5wb2ludGVyPm4vMi0xKXt1PSIgLi4uICIsby09NTticmVha31yZXR1cm4iIituZXcgQXJyYXkodCkuam9pbigiICIpK3MrdGhpcy5idWZmZXIuc2xpY2UobCxvKSt1KyJcbiIrbmV3IEFycmF5KHQrdGhpcy5wb2ludGVyLWwrcy5sZW5ndGgpLmpvaW4oIiAiKSsiXiJ9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGUsdDtyZXR1cm4gZT10aGlzLmdldF9zbmlwcGV0KCksdD0iICBvbiBsaW5lICIrKHRoaXMubGluZSsxKSsiLCBjb2x1bW4gIisodGhpcy5jb2x1bW4rMSksZT90OnQrIjpcbiIrZX0sdH0oKSx0aGlzLllBTUxFcnJvcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3RoaXMubWVzc2FnZT1lLG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyksdGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrIlxuIisobmV3IEVycm9yKS5zdGFjay5zcGxpdCgiXG4iKS5zbGljZSgxKS5qb2luKCJcbiIpfXJldHVybiB0KG4sZSksbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfSxufShFcnJvciksdGhpcy5NYXJrZWRZQU1MRXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQscixvLHMpe3RoaXMuY29udGV4dD1lLHRoaXMuY29udGV4dF9tYXJrPXQsdGhpcy5wcm9ibGVtPXIsdGhpcy5wcm9ibGVtX21hcms9byx0aGlzLm5vdGU9cyxuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfXJldHVybiB0KG4sZSksbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1bXSxudWxsIT10aGlzLmNvbnRleHQmJmUucHVzaCh0aGlzLmNvbnRleHQpLG51bGw9PXRoaXMuY29udGV4dF9tYXJrfHxudWxsIT10aGlzLnByb2JsZW0mJm51bGwhPXRoaXMucHJvYmxlbV9tYXJrJiZ0aGlzLmNvbnRleHRfbWFyay5saW5lPT09dGhpcy5wcm9ibGVtX21hcmsubGluZSYmdGhpcy5jb250ZXh0X21hcmsuY29sdW1uPT09dGhpcy5wcm9ibGVtX21hcmsuY29sdW1ufHxlLnB1c2godGhpcy5jb250ZXh0X21hcmsudG9TdHJpbmcoKSksbnVsbCE9dGhpcy5wcm9ibGVtJiZlLnB1c2godGhpcy5wcm9ibGVtKSxudWxsIT10aGlzLnByb2JsZW1fbWFyayYmZS5wdXNoKHRoaXMucHJvYmxlbV9tYXJrLnRvU3RyaW5nKCkpLG51bGwhPXRoaXMubm90ZSYmZS5wdXNoKHRoaXMubm90ZSksZS5qb2luKCJcbiIpfSxufSh0aGlzLllBTUxFcnJvcil9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvZXZlbnRzLmpzIjpmdW5jdGlvbihlLHQpeyhmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1mb3IodmFyIG8gaW4gbil0LmNhbGwobixvKSYmKGVbb109bltvXSk7cmV0dXJuIHIucHJvdG90eXBlPW4ucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUuX19zdXBlcl9fPW4ucHJvdG90eXBlLGV9LHQ9e30uaGFzT3duUHJvcGVydHk7dGhpcy5FdmVudD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnN0YXJ0X21hcms9ZSx0aGlzLmVuZF9tYXJrPXR9cmV0dXJuIGV9KCksdGhpcy5Ob2RlRXZlbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy5hbmNob3I9ZSx0aGlzLnN0YXJ0X21hcms9dCx0aGlzLmVuZF9tYXJrPW59cmV0dXJuIGUobix0KSxufSh0aGlzLkV2ZW50KSx0aGlzLkNvbGxlY3Rpb25TdGFydEV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSx0LG4scixvLHMpe3RoaXMuYW5jaG9yPWUsdGhpcy50YWc9dCx0aGlzLmltcGxpY2l0PW4sdGhpcy5zdGFydF9tYXJrPXIsdGhpcy5lbmRfbWFyaz1vLHRoaXMuZmxvd19zdHlsZT1zfXJldHVybiBlKG4sdCksbn0odGhpcy5Ob2RlRXZlbnQpLHRoaXMuQ29sbGVjdGlvbkVuZEV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlKG4sdCksbn0odGhpcy5FdmVudCksdGhpcy5TdHJlYW1TdGFydEV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3RoaXMuc3RhcnRfbWFyaz1lLHRoaXMuZW5kX21hcms9dCx0aGlzLmVuY29kaW5nPW59cmV0dXJuIGUobix0KSxufSh0aGlzLkV2ZW50KSx0aGlzLlN0cmVhbUVuZEV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlKG4sdCksbn0odGhpcy5FdmVudCksdGhpcy5Eb2N1bWVudFN0YXJ0RXZlbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbixyLG8pe3RoaXMuc3RhcnRfbWFyaz1lLHRoaXMuZW5kX21hcms9dCx0aGlzLmV4cGxpY2l0PW4sdGhpcy52ZXJzaW9uPXIsdGhpcy50YWdzPW99cmV0dXJuIGUobix0KSxufSh0aGlzLkV2ZW50KSx0aGlzLkRvY3VtZW50RW5kRXZlbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy5zdGFydF9tYXJrPWUsdGhpcy5lbmRfbWFyaz10LHRoaXMuZXhwbGljaXQ9bn1yZXR1cm4gZShuLHQpLG59KHRoaXMuRXZlbnQpLHRoaXMuQWxpYXNFdmVudD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG59KHRoaXMuTm9kZUV2ZW50KSx0aGlzLlNjYWxhckV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSx0LG4scixvLHMsaSl7dGhpcy5hbmNob3I9ZSx0aGlzLnRhZz10LHRoaXMuaW1wbGljaXQ9bix0aGlzLnZhbHVlPXIsdGhpcy5zdGFydF9tYXJrPW8sdGhpcy5lbmRfbWFyaz1zLHRoaXMuc3R5bGU9aX1yZXR1cm4gZShuLHQpLG59KHRoaXMuTm9kZUV2ZW50KSx0aGlzLlNlcXVlbmNlU3RhcnRFdmVudD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG59KHRoaXMuQ29sbGVjdGlvblN0YXJ0RXZlbnQpLHRoaXMuU2VxdWVuY2VFbmRFdmVudD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG59KHRoaXMuQ29sbGVjdGlvbkVuZEV2ZW50KSx0aGlzLk1hcHBpbmdTdGFydEV2ZW50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlKG4sdCksbn0odGhpcy5Db2xsZWN0aW9uU3RhcnRFdmVudCksdGhpcy5NYXBwaW5nRW5kRXZlbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxufSh0aGlzLkNvbGxlY3Rpb25FbmRFdmVudCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvbG9hZGVyLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKCl7dmFyIGUsdCxyLG8scyxpLGEsbD1bXS5zbGljZTthPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3V0aWwuanMiKSxvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3JlYWRlci5qcyIpLGk9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvc2Nhbm5lci5qcyIpLHI9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcGFyc2VyLmpzIiksZT1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9jb21wb3Nlci5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVzb2x2ZXIuanMiKSx0PW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2NvbnN0cnVjdG9yLmpzIiksdGhpcy5tYWtlX2xvYWRlcj1mdW5jdGlvbihuLHUsYyxkLF8scCl7dmFyIGY7cmV0dXJuIG51bGw9PW4mJihuPW8uUmVhZGVyKSxudWxsPT11JiYodT1pLlNjYW5uZXIpLG51bGw9PWMmJihjPXIuUGFyc2VyKSxudWxsPT1kJiYoZD1lLkNvbXBvc2VyKSxudWxsPT1fJiYoXz1zLlJlc29sdmVyKSxudWxsPT1wJiYocD10LkNvbnN0cnVjdG9yKSxmPVtuLHUsYyxkLF8scF0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBuLHIsbztmb3IoZlswXS5jYWxsKHRoaXMsZSksbz1mLnNsaWNlKDEpLG49MCxyPW8ubGVuZ3RoO248cjtuKyspdD1vW25dLHQuY2FsbCh0aGlzKX12YXIgdDtyZXR1cm4gYS5leHRlbmQuYXBwbHkoYSxbZS5wcm90b3R5cGVdLmNvbmNhdChsLmNhbGwoZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKHI9W10sZT0wLG49Zi5sZW5ndGg7ZTxuO2UrKyl0PWZbZV0sci5wdXNoKHQucHJvdG90eXBlKTtyZXR1cm4gcn0oKSkpKSxlfSgpfSx0aGlzLkxvYWRlcj10aGlzLm1ha2VfbG9hZGVyKCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvbm9kZXMuanMiOmZ1bmN0aW9uKGUsdCl7KGZ1bmN0aW9uKCl7dmFyIGUsdD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciBvIGluIHQpbi5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiByLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgcixlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxuPXt9Lmhhc093blByb3BlcnR5O2U9MCx0aGlzLk5vZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbixyLG8pe3RoaXMudGFnPXQsdGhpcy52YWx1ZT1uLHRoaXMuc3RhcnRfbWFyaz1yLHRoaXMuZW5kX21hcms9byx0aGlzLnVuaXF1ZV9pZD0ibm9kZV8iK2UrK31yZXR1cm4gdH0oKSx0aGlzLlNjYWxhck5vZGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQscixvLHMpe3RoaXMudGFnPWUsdGhpcy52YWx1ZT10LHRoaXMuc3RhcnRfbWFyaz1yLHRoaXMuZW5kX21hcms9byx0aGlzLnN0eWxlPXMsbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0KG4sZSksbi5wcm90b3R5cGUuaWQ9InNjYWxhciIsbn0odGhpcy5Ob2RlKSx0aGlzLkNvbGxlY3Rpb25Ob2RlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oZSx0LHIsbyxzKXt0aGlzLnRhZz1lLHRoaXMudmFsdWU9dCx0aGlzLnN0YXJ0X21hcms9cix0aGlzLmVuZF9tYXJrPW8sdGhpcy5mbG93X3N0eWxlPXMsbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0KG4sZSksbn0odGhpcy5Ob2RlKSx0aGlzLlNlcXVlbmNlTm9kZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdChuLGUpLG4ucHJvdG90eXBlLmlkPSJzZXF1ZW5jZSIsbn0odGhpcy5Db2xsZWN0aW9uTm9kZSksdGhpcy5NYXBwaW5nTm9kZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdChuLGUpLG4ucHJvdG90eXBlLmlkPSJtYXBwaW5nIixufSh0aGlzLkNvbGxlY3Rpb25Ob2RlKX0pLmNhbGwodGhpcyl9LCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9wYXJzZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSxyLG8scz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciByIGluIHQpaS5jYWxsKHQscikmJihlW3JdPXRbcl0pO3JldHVybiBuLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxpPXt9Lmhhc093blByb3BlcnR5LGE9W10uc2xpY2U7cj1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9ldmVudHMuanMiKSxlPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLk1hcmtlZFlBTUxFcnJvcixvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3Rva2Vucy5qcyIpLHRoaXMuUGFyc2VyRXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHModCxlKSx0fShlKSx0aGlzLlBhcnNlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmN1cnJlbnRfZXZlbnQ9bnVsbCx0aGlzLnlhbWxfdmVyc2lvbj1udWxsLHRoaXMudGFnX2hhbmRsZXM9e30sdGhpcy5zdGF0ZXM9W10sdGhpcy5tYXJrcz1bXSx0aGlzLnN0YXRlPSJwYXJzZV9zdHJlYW1fc3RhcnQifXZhciBuO3JldHVybiBuPXsiISI6IiEiLCIhISI6InRhZzp5YW1sLm9yZywyMDAyOiJ9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZXM9W10sdGhpcy5zdGF0ZT1udWxsfSxlLnByb3RvdHlwZS5jaGVja19ldmVudD1mdW5jdGlvbigpe3ZhciBlLHQsbixyO2lmKHQ9MTw9YXJndW1lbnRzLmxlbmd0aD9hLmNhbGwoYXJndW1lbnRzLDApOltdLG51bGw9PT10aGlzLmN1cnJlbnRfZXZlbnQmJm51bGwhPXRoaXMuc3RhdGUmJih0aGlzLmN1cnJlbnRfZXZlbnQ9dGhpc1t0aGlzLnN0YXRlXSgpKSxudWxsIT09dGhpcy5jdXJyZW50X2V2ZW50KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoZT10W25dLHRoaXMuY3VycmVudF9ldmVudCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9cmV0dXJuITF9LGUucHJvdG90eXBlLnBlZWtfZXZlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuY3VycmVudF9ldmVudCYmbnVsbCE9dGhpcy5zdGF0ZSYmKHRoaXMuY3VycmVudF9ldmVudD10aGlzW3RoaXMuc3RhdGVdKCkpLHRoaXMuY3VycmVudF9ldmVudH0sZS5wcm90b3R5cGUuZ2V0X2V2ZW50PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT10aGlzLmN1cnJlbnRfZXZlbnQmJm51bGwhPXRoaXMuc3RhdGUmJih0aGlzLmN1cnJlbnRfZXZlbnQ9dGhpc1t0aGlzLnN0YXRlXSgpKSxlPXRoaXMuY3VycmVudF9ldmVudCx0aGlzLmN1cnJlbnRfZXZlbnQ9bnVsbCxlfSxlLnByb3RvdHlwZS5wYXJzZV9zdHJlYW1fc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZSx0O3JldHVybiB0PXRoaXMuZ2V0X3Rva2VuKCksZT1uZXcgci5TdHJlYW1TdGFydEV2ZW50KHQuc3RhcnRfbWFyayx0LmVuZF9tYXJrKSx0aGlzLnN0YXRlPSJwYXJzZV9pbXBsaWNpdF9kb2N1bWVudF9zdGFydCIsZX0sZS5wcm90b3R5cGUucGFyc2VfaW1wbGljaXRfZG9jdW1lbnRfc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LHMsaTtyZXR1cm4gdGhpcy5jaGVja190b2tlbihvLkRpcmVjdGl2ZVRva2VuLG8uRG9jdW1lbnRTdGFydFRva2VuLG8uU3RyZWFtRW5kVG9rZW4pP3RoaXMucGFyc2VfZG9jdW1lbnRfc3RhcnQoKToodGhpcy50YWdfaGFuZGxlcz1uLGk9dGhpcy5wZWVrX3Rva2VuKCkscz1lPWkuc3RhcnRfbWFyayx0PW5ldyByLkRvY3VtZW50U3RhcnRFdmVudChzLGUsITEpLHRoaXMuc3RhdGVzLnB1c2goInBhcnNlX2RvY3VtZW50X2VuZCIpLHRoaXMuc3RhdGU9InBhcnNlX2Jsb2NrX25vZGUiLHQpfSxlLnByb3RvdHlwZS5wYXJzZV9kb2N1bWVudF9zdGFydD1mdW5jdGlvbigpe2Zvcih2YXIgZSxuLHMsaSxhLGwsdTt0aGlzLmNoZWNrX3Rva2VuKG8uRG9jdW1lbnRFbmRUb2tlbik7KXRoaXMuZ2V0X3Rva2VuKCk7aWYodGhpcy5jaGVja190b2tlbihvLlN0cmVhbUVuZFRva2VuKSl7aWYobD10aGlzLmdldF90b2tlbigpLG49bmV3IHIuU3RyZWFtRW5kRXZlbnQobC5zdGFydF9tYXJrLGwuZW5kX21hcmspLDAhPT10aGlzLnN0YXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZXJyb3IsIHN0YXRlcyBzaG91bGQgYmUgZW1wdHkiKTtpZigwIT09dGhpcy5tYXJrcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZXJyb3IsIG1hcmtzIHNob3VsZCBiZSBlbXB0eSIpO3RoaXMuc3RhdGU9bnVsbH1lbHNle2lmKGk9dGhpcy5wZWVrX3Rva2VuKCkuc3RhcnRfbWFyayxzPXRoaXMucHJvY2Vzc19kaXJlY3RpdmVzKCksdT1zWzBdLGE9c1sxXSwhdGhpcy5jaGVja190b2tlbihvLkRvY3VtZW50U3RhcnRUb2tlbikpdGhyb3cgbmV3IHQuUGFyc2VyRXJyb3IoImV4cGVjdGVkICc8ZG9jdW1lbnQgc3RhcnQ+JywgYnV0IGZvdW5kICIrdGhpcy5wZWVrX3Rva2VuKCkuaWQsdGhpcy5wZWVrX3Rva2VuKCkuc3RhcnRfbWFyayk7bD10aGlzLmdldF90b2tlbigpLGU9bC5lbmRfbWFyayxuPW5ldyByLkRvY3VtZW50U3RhcnRFdmVudChpLGUsITAsdSxhKSx0aGlzLnN0YXRlcy5wdXNoKCJwYXJzZV9kb2N1bWVudF9lbmQiKSx0aGlzLnN0YXRlPSJwYXJzZV9kb2N1bWVudF9jb250ZW50In1yZXR1cm4gbn0sZS5wcm90b3R5cGUucGFyc2VfZG9jdW1lbnRfZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHMsaTtyZXR1cm4gaT10aGlzLnBlZWtfdG9rZW4oKSxzPWU9aS5zdGFydF9tYXJrLG49ITEsdGhpcy5jaGVja190b2tlbihvLkRvY3VtZW50RW5kVG9rZW4pJiYoaT10aGlzLmdldF90b2tlbigpLGU9aS5lbmRfbWFyayxuPSEwKSx0PW5ldyByLkRvY3VtZW50RW5kRXZlbnQocyxlLG4pLHRoaXMuc3RhdGU9InBhcnNlX2RvY3VtZW50X3N0YXJ0Iix0fSxlLnByb3RvdHlwZS5wYXJzZV9kb2N1bWVudF9jb250ZW50PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuY2hlY2tfdG9rZW4oby5EaXJlY3RpdmVUb2tlbixvLkRvY3VtZW50U3RhcnRUb2tlbixvLkRvY3VtZW50RW5kVG9rZW4sby5TdHJlYW1FbmRUb2tlbik/KGU9dGhpcy5wcm9jZXNzX2VtcHR5X3NjYWxhcih0aGlzLnBlZWtfdG9rZW4oKS5zdGFydF9tYXJrKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpLGUpOnRoaXMucGFyc2VfYmxvY2tfbm9kZSgpfSxlLnByb3RvdHlwZS5wcm9jZXNzX2RpcmVjdGl2ZXM9ZnVuY3Rpb24oKXt2YXIgZSxyLHMsYSxsLHUsYyxkLF87Zm9yKHRoaXMueWFtbF92ZXJzaW9uPW51bGwsdGhpcy50YWdfaGFuZGxlcz17fTt0aGlzLmNoZWNrX3Rva2VuKG8uRGlyZWN0aXZlVG9rZW4pOylpZihkPXRoaXMuZ2V0X3Rva2VuKCksIllBTUwiPT09ZC5uYW1lKXtpZihudWxsIT09dGhpcy55YW1sX3ZlcnNpb24pdGhyb3cgbmV3IHQuUGFyc2VyRXJyb3IobnVsbCxudWxsLCJmb3VuZCBkdXBsaWNhdGUgWUFNTCBkaXJlY3RpdmUiLGQuc3RhcnRfbWFyayk7aWYoYT1kLnZhbHVlLHI9YVswXSxhWzFdLDEhPT1yKXRocm93IG5ldyB0LlBhcnNlckVycm9yKG51bGwsbnVsbCwiZm91bmQgaW5jb21wYXRpYmxlIFlBTUwgZG9jdW1lbnQgKHZlcnNpb24gMS4qIGlzIHJlcXVpcmVkKSIsZC5zdGFydF9tYXJrKTt0aGlzLnlhbWxfdmVyc2lvbj1kLnZhbHVlfWVsc2UgaWYoIlRBRyI9PT1kLm5hbWUpe2lmKGw9ZC52YWx1ZSxlPWxbMF0scz1sWzFdLGUgaW4gdGhpcy50YWdfaGFuZGxlcyl0aHJvdyBuZXcgdC5QYXJzZXJFcnJvcihudWxsLG51bGwsImR1cGxpY2F0ZSB0YWcgaGFuZGxlICIrZSxkLnN0YXJ0X21hcmspO3RoaXMudGFnX2hhbmRsZXNbZV09c31jPW51bGwsdT10aGlzLnRhZ19oYW5kbGVzO2ZvcihlIGluIHUpaS5jYWxsKHUsZSkmJihzPXVbZV0sbnVsbD09YyYmKGM9e30pLGNbZV09cyk7Xz1bdGhpcy55YW1sX3ZlcnNpb24sY107Zm9yKGUgaW4gbilpLmNhbGwobixlKSYmKChzPW5bZV0paW4gdGhpcy50YWdfaGFuZGxlc3x8KHRoaXMudGFnX2hhbmRsZXNbZV09cykpO3JldHVybiBffSxlLnByb3RvdHlwZS5wYXJzZV9ibG9ja19ub2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2Vfbm9kZSghMCl9LGUucHJvdG90eXBlLnBhcnNlX2Zsb3dfbm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlX25vZGUoKX0sZS5wcm90b3R5cGUucGFyc2VfYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2Vfbm9kZSghMCwhMCl9LGUucHJvdG90eXBlLnBhcnNlX25vZGU9ZnVuY3Rpb24oZSxuKXt2YXIgcyxpLGEsbCx1LGMsZCxfLHAsZixtO2lmKG51bGw9PWUmJihlPSExKSxudWxsPT1uJiYobj0hMSksdGhpcy5jaGVja190b2tlbihvLkFsaWFzVG9rZW4pKW09dGhpcy5nZXRfdG9rZW4oKSxhPW5ldyByLkFsaWFzRXZlbnQobS52YWx1ZSxtLnN0YXJ0X21hcmssbS5lbmRfbWFyayksdGhpcy5zdGF0ZT10aGlzLnN0YXRlcy5wb3AoKTtlbHNle2lmKHM9bnVsbCxwPW51bGwsZD1pPWY9bnVsbCx0aGlzLmNoZWNrX3Rva2VuKG8uQW5jaG9yVG9rZW4pPyhtPXRoaXMuZ2V0X3Rva2VuKCksZD1tLnN0YXJ0X21hcmssaT1tLmVuZF9tYXJrLHM9bS52YWx1ZSx0aGlzLmNoZWNrX3Rva2VuKG8uVGFnVG9rZW4pJiYobT10aGlzLmdldF90b2tlbigpLGY9bS5zdGFydF9tYXJrLGk9bS5lbmRfbWFyayxwPW0udmFsdWUpKTp0aGlzLmNoZWNrX3Rva2VuKG8uVGFnVG9rZW4pJiYobT10aGlzLmdldF90b2tlbigpLGQ9Zj1tLnN0YXJ0X21hcmssaT1tLmVuZF9tYXJrLHA9bS52YWx1ZSx0aGlzLmNoZWNrX3Rva2VuKG8uQW5jaG9yVG9rZW4pJiYobT10aGlzLmdldF90b2tlbigpLGk9bS5lbmRfbWFyayxzPW0udmFsdWUpKSxudWxsIT09cClpZihsPXBbMF0sXz1wWzFdLG51bGwhPT1sKXtpZighKGwgaW4gdGhpcy50YWdfaGFuZGxlcykpdGhyb3cgbmV3IHQuUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBub2RlIixkLCJmb3VuZCB1bmRlZmluZWQgdGFnIGhhbmRsZSAiK2wsZik7cD10aGlzLnRhZ19oYW5kbGVzW2xdK199ZWxzZSBwPV87aWYobnVsbD09PWQmJihkPWk9dGhpcy5wZWVrX3Rva2VuKCkuc3RhcnRfbWFyayksYT1udWxsLHU9bnVsbD09PXB8fCIhIj09PXAsbiYmdGhpcy5jaGVja190b2tlbihvLkJsb2NrRW50cnlUb2tlbikpaT10aGlzLnBlZWtfdG9rZW4oKS5lbmRfbWFyayxhPW5ldyByLlNlcXVlbmNlU3RhcnRFdmVudChzLHAsdSxkLGkpLHRoaXMuc3RhdGU9InBhcnNlX2luZGVudGxlc3Nfc2VxdWVuY2VfZW50cnkiO2Vsc2UgaWYodGhpcy5jaGVja190b2tlbihvLlNjYWxhclRva2VuKSltPXRoaXMuZ2V0X3Rva2VuKCksaT1tLmVuZF9tYXJrLHU9bS5wbGFpbiYmbnVsbD09PXB8fCIhIj09PXA/WyEwLCExXTpudWxsPT09cD9bITEsITBdOlshMSwhMV0sYT1uZXcgci5TY2FsYXJFdmVudChzLHAsdSxtLnZhbHVlLGQsaSxtLnN0eWxlKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpO2Vsc2UgaWYodGhpcy5jaGVja190b2tlbihvLkZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW4pKWk9dGhpcy5wZWVrX3Rva2VuKCkuZW5kX21hcmssYT1uZXcgci5TZXF1ZW5jZVN0YXJ0RXZlbnQocyxwLHUsZCxpLCEwKSx0aGlzLnN0YXRlPSJwYXJzZV9mbG93X3NlcXVlbmNlX2ZpcnN0X2VudHJ5IjtlbHNlIGlmKHRoaXMuY2hlY2tfdG9rZW4oby5GbG93TWFwcGluZ1N0YXJ0VG9rZW4pKWk9dGhpcy5wZWVrX3Rva2VuKCkuZW5kX21hcmssYT1uZXcgci5NYXBwaW5nU3RhcnRFdmVudChzLHAsdSxkLGksITApLHRoaXMuc3RhdGU9InBhcnNlX2Zsb3dfbWFwcGluZ19maXJzdF9rZXkiO2Vsc2UgaWYoZSYmdGhpcy5jaGVja190b2tlbihvLkJsb2NrU2VxdWVuY2VTdGFydFRva2VuKSlpPXRoaXMucGVla190b2tlbigpLmVuZF9tYXJrLGE9bmV3IHIuU2VxdWVuY2VTdGFydEV2ZW50KHMscCx1LGQsaSwhMSksdGhpcy5zdGF0ZT0icGFyc2VfYmxvY2tfc2VxdWVuY2VfZmlyc3RfZW50cnkiO2Vsc2UgaWYoZSYmdGhpcy5jaGVja190b2tlbihvLkJsb2NrTWFwcGluZ1N0YXJ0VG9rZW4pKWk9dGhpcy5wZWVrX3Rva2VuKCkuZW5kX21hcmssYT1uZXcgci5NYXBwaW5nU3RhcnRFdmVudChzLHAsdSxkLGksITEpLHRoaXMuc3RhdGU9InBhcnNlX2Jsb2NrX21hcHBpbmdfZmlyc3Rfa2V5IjtlbHNle2lmKG51bGw9PT1zJiZudWxsPT09cCl0aHJvdyBjPWU/ImJsb2NrIjoiZmxvdyIsbT10aGlzLnBlZWtfdG9rZW4oKSxuZXcgdC5QYXJzZXJFcnJvcigid2hpbGUgcGFyc2luZyBhICIrYysiIG5vZGUiLGQsImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAiK20uaWQsbS5zdGFydF9tYXJrKTthPW5ldyByLlNjYWxhckV2ZW50KHMscCxbdSwhMV0sIiIsZCxpKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpfX1yZXR1cm4gYX0sZS5wcm90b3R5cGUucGFyc2VfYmxvY2tfc2VxdWVuY2VfZmlyc3RfZW50cnk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmdldF90b2tlbigpLHRoaXMubWFya3MucHVzaChlLnN0YXJ0X21hcmspLHRoaXMucGFyc2VfYmxvY2tfc2VxdWVuY2VfZW50cnkoKX0sZS5wcm90b3R5cGUucGFyc2VfYmxvY2tfc2VxdWVuY2VfZW50cnk9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKHRoaXMuY2hlY2tfdG9rZW4oby5CbG9ja0VudHJ5VG9rZW4pKXJldHVybiBuPXRoaXMuZ2V0X3Rva2VuKCksdGhpcy5jaGVja190b2tlbihvLkJsb2NrRW50cnlUb2tlbixvLkJsb2NrRW5kVG9rZW4pPyh0aGlzLnN0YXRlPSJwYXJzZV9ibG9ja19zZXF1ZW5jZV9lbnRyeSIsdGhpcy5wcm9jZXNzX2VtcHR5X3NjYWxhcihuLmVuZF9tYXJrKSk6KHRoaXMuc3RhdGVzLnB1c2goInBhcnNlX2Jsb2NrX3NlcXVlbmNlX2VudHJ5IiksdGhpcy5wYXJzZV9ibG9ja19ub2RlKCkpO2lmKCF0aGlzLmNoZWNrX3Rva2VuKG8uQmxvY2tFbmRUb2tlbikpdGhyb3cgbj10aGlzLnBlZWtfdG9rZW4oKSxuZXcgdC5QYXJzZXJFcnJvcigid2hpbGUgcGFyc2luZyBhIGJsb2NrIGNvbGxlY3Rpb24iLHRoaXMubWFya3Muc2xpY2UoLTEpWzBdLCJleHBlY3RlZCA8YmxvY2sgZW5kPiwgYnV0IGZvdW5kICIrbi5pZCxuLnN0YXJ0X21hcmspO3JldHVybiBuPXRoaXMuZ2V0X3Rva2VuKCksZT1uZXcgci5TZXF1ZW5jZUVuZEV2ZW50KG4uc3RhcnRfbWFyayxuLmVuZF9tYXJrKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpLHRoaXMubWFya3MucG9wKCksZX0sZS5wcm90b3R5cGUucGFyc2VfaW5kZW50bGVzc19zZXF1ZW5jZV9lbnRyeT1mdW5jdGlvbigpe3ZhciBlLHQ7cmV0dXJuIHRoaXMuY2hlY2tfdG9rZW4oby5CbG9ja0VudHJ5VG9rZW4pPyh0PXRoaXMuZ2V0X3Rva2VuKCksdGhpcy5jaGVja190b2tlbihvLkJsb2NrRW50cnlUb2tlbixvLktleVRva2VuLG8uVmFsdWVUb2tlbixvLkJsb2NrRW5kVG9rZW4pPyh0aGlzLnN0YXRlPSJwYXJzZV9pbmRlbnRsZXNzX3NlcXVlbmNlX2VudHJ5Iix0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKHQuZW5kX21hcmspKToodGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfaW5kZW50bGVzc19zZXF1ZW5jZV9lbnRyeSIpLHRoaXMucGFyc2VfYmxvY2tfbm9kZSgpKSk6KHQ9dGhpcy5wZWVrX3Rva2VuKCksZT1uZXcgci5TZXF1ZW5jZUVuZEV2ZW50KHQuc3RhcnRfbWFyayx0LnN0YXJ0X21hcmspLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCksZSl9LGUucHJvdG90eXBlLnBhcnNlX2Jsb2NrX21hcHBpbmdfZmlyc3Rfa2V5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5nZXRfdG9rZW4oKSx0aGlzLm1hcmtzLnB1c2goZS5zdGFydF9tYXJrKSx0aGlzLnBhcnNlX2Jsb2NrX21hcHBpbmdfa2V5KCl9LGUucHJvdG90eXBlLnBhcnNlX2Jsb2NrX21hcHBpbmdfa2V5PWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmNoZWNrX3Rva2VuKG8uS2V5VG9rZW4pKXJldHVybiBuPXRoaXMuZ2V0X3Rva2VuKCksdGhpcy5jaGVja190b2tlbihvLktleVRva2VuLG8uVmFsdWVUb2tlbixvLkJsb2NrRW5kVG9rZW4pPyh0aGlzLnN0YXRlPSJwYXJzZV9ibG9ja19tYXBwaW5nX3ZhbHVlIix0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKG4uZW5kX21hcmspKToodGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfYmxvY2tfbWFwcGluZ192YWx1ZSIpLHRoaXMucGFyc2VfYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlKCkpO2lmKCF0aGlzLmNoZWNrX3Rva2VuKG8uQmxvY2tFbmRUb2tlbikpdGhyb3cgbj10aGlzLnBlZWtfdG9rZW4oKSxuZXcgdC5QYXJzZXJFcnJvcigid2hpbGUgcGFyc2luZyBhIGJsb2NrIG1hcHBpbmciLHRoaXMubWFya3Muc2xpY2UoLTEpWzBdLCJleHBlY3RlZCA8YmxvY2sgZW5kPiwgYnV0IGZvdW5kICIrbi5pZCxuLnN0YXJ0X21hcmspO3JldHVybiBuPXRoaXMuZ2V0X3Rva2VuKCksZT1uZXcgci5NYXBwaW5nRW5kRXZlbnQobi5zdGFydF9tYXJrLG4uZW5kX21hcmspLHRoaXMuc3RhdGU9dGhpcy5zdGF0ZXMucG9wKCksdGhpcy5tYXJrcy5wb3AoKSxlfSxlLnByb3RvdHlwZS5wYXJzZV9ibG9ja19tYXBwaW5nX3ZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuY2hlY2tfdG9rZW4oby5WYWx1ZVRva2VuKT8oZT10aGlzLmdldF90b2tlbigpLHRoaXMuY2hlY2tfdG9rZW4oby5LZXlUb2tlbixvLlZhbHVlVG9rZW4sby5CbG9ja0VuZFRva2VuKT8odGhpcy5zdGF0ZT0icGFyc2VfYmxvY2tfbWFwcGluZ19rZXkiLHRoaXMucHJvY2Vzc19lbXB0eV9zY2FsYXIoZS5lbmRfbWFyaykpOih0aGlzLnN0YXRlcy5wdXNoKCJwYXJzZV9ibG9ja19tYXBwaW5nX2tleSIpLHRoaXMucGFyc2VfYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlKCkpKToodGhpcy5zdGF0ZT0icGFyc2VfYmxvY2tfbWFwcGluZ19rZXkiLGU9dGhpcy5wZWVrX3Rva2VuKCksdGhpcy5wcm9jZXNzX2VtcHR5X3NjYWxhcihlLnN0YXJ0X21hcmspKX0sZS5wcm90b3R5cGUucGFyc2VfZmxvd19zZXF1ZW5jZV9maXJzdF9lbnRyeT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZ2V0X3Rva2VuKCksdGhpcy5tYXJrcy5wdXNoKGUuc3RhcnRfbWFyayksdGhpcy5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5KCEwKX0sZS5wcm90b3R5cGUucGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeT1mdW5jdGlvbihlKXt2YXIgbixzO2lmKG51bGw9PWUmJihlPSExKSwhdGhpcy5jaGVja190b2tlbihvLkZsb3dTZXF1ZW5jZUVuZFRva2VuKSl7aWYoIWUpe2lmKCF0aGlzLmNoZWNrX3Rva2VuKG8uRmxvd0VudHJ5VG9rZW4pKXRocm93IHM9dGhpcy5wZWVrX3Rva2VuKCksbmV3IHQuUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBmbG93IHNlcXVlbmNlIix0aGlzLm1hcmtzLnNsaWNlKC0xKVswXSwiZXhwZWN0ZWQgJywnIG9yICddJywgYnV0IGdvdCAiK3MuaWQscy5zdGFydF9tYXJrKTt0aGlzLmdldF90b2tlbigpfWlmKHRoaXMuY2hlY2tfdG9rZW4oby5LZXlUb2tlbikpcmV0dXJuIHM9dGhpcy5wZWVrX3Rva2VuKCksbj1uZXcgci5NYXBwaW5nU3RhcnRFdmVudChudWxsLG51bGwsITAscy5zdGFydF9tYXJrLHMuZW5kX21hcmssITApLHRoaXMuc3RhdGU9InBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ19rZXkiLG47aWYoIXRoaXMuY2hlY2tfdG9rZW4oby5GbG93U2VxdWVuY2VFbmRUb2tlbikpcmV0dXJuIHRoaXMuc3RhdGVzLnB1c2goInBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnkiKSx0aGlzLnBhcnNlX2Zsb3dfbm9kZSgpfXJldHVybiBzPXRoaXMuZ2V0X3Rva2VuKCksbj1uZXcgci5TZXF1ZW5jZUVuZEV2ZW50KHMuc3RhcnRfbWFyayxzLmVuZF9tYXJrKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpLHRoaXMubWFya3MucG9wKCksbn0sZS5wcm90b3R5cGUucGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeV9tYXBwaW5nX2tleT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZ2V0X3Rva2VuKCksdGhpcy5jaGVja190b2tlbihvLlZhbHVlVG9rZW4sby5GbG93RW50cnlUb2tlbixvLkZsb3dTZXF1ZW5jZUVuZFRva2VuKT8odGhpcy5zdGF0ZT0icGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeV9tYXBwaW5nX3ZhbHVlIix0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKGUuZW5kX21hcmspKToodGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeV9tYXBwaW5nX3ZhbHVlIiksdGhpcy5wYXJzZV9mbG93X25vZGUoKSl9LGUucHJvdG90eXBlLnBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ192YWx1ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmNoZWNrX3Rva2VuKG8uVmFsdWVUb2tlbik/KGU9dGhpcy5nZXRfdG9rZW4oKSx0aGlzLmNoZWNrX3Rva2VuKG8uRmxvd0VudHJ5VG9rZW4sby5GbG93U2VxdWVuY2VFbmRUb2tlbik/KHRoaXMuc3RhdGU9InBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ19lbmQiLHRoaXMucHJvY2Vzc19lbXB0eV9zY2FsYXIoZS5lbmRfbWFyaykpOih0aGlzLnN0YXRlcy5wdXNoKCJwYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfZW5kIiksdGhpcy5wYXJzZV9mbG93X25vZGUoKSkpOih0aGlzLnN0YXRlPSJwYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfZW5kIixlPXRoaXMucGVla190b2tlbigpLHRoaXMucHJvY2Vzc19lbXB0eV9zY2FsYXIoZS5zdGFydF9tYXJrKSl9LGUucHJvdG90eXBlLnBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ19lbmQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5zdGF0ZT0icGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeSIsZT10aGlzLnBlZWtfdG9rZW4oKSxuZXcgci5NYXBwaW5nRW5kRXZlbnQoZS5zdGFydF9tYXJrLGUuc3RhcnRfbWFyayl9LGUucHJvdG90eXBlLnBhcnNlX2Zsb3dfbWFwcGluZ19maXJzdF9rZXk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmdldF90b2tlbigpLHRoaXMubWFya3MucHVzaChlLnN0YXJ0X21hcmspLHRoaXMucGFyc2VfZmxvd19tYXBwaW5nX2tleSghMCl9LGUucHJvdG90eXBlLnBhcnNlX2Zsb3dfbWFwcGluZ19rZXk9ZnVuY3Rpb24oZSl7dmFyIG4scztpZihudWxsPT1lJiYoZT0hMSksIXRoaXMuY2hlY2tfdG9rZW4oby5GbG93TWFwcGluZ0VuZFRva2VuKSl7aWYoIWUpe2lmKCF0aGlzLmNoZWNrX3Rva2VuKG8uRmxvd0VudHJ5VG9rZW4pKXRocm93IHM9dGhpcy5wZWVrX3Rva2VuKCksbmV3IHQuUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBmbG93IG1hcHBpbmciLHRoaXMubWFya3Muc2xpY2UoLTEpWzBdLCJleHBlY3RlZCAnLCcgb3IgJ30nLCBidXQgZ290ICIrcy5pZCxzLnN0YXJ0X21hcmspO3RoaXMuZ2V0X3Rva2VuKCl9aWYodGhpcy5jaGVja190b2tlbihvLktleVRva2VuKSlyZXR1cm4gcz10aGlzLmdldF90b2tlbigpLHRoaXMuY2hlY2tfdG9rZW4oby5WYWx1ZVRva2VuLG8uRmxvd0VudHJ5VG9rZW4sby5GbG93TWFwcGluZ0VuZFRva2VuKT8odGhpcy5zdGF0ZT0icGFyc2VfZmxvd19tYXBwaW5nX3ZhbHVlIix0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKHMuZW5kX21hcmspKToodGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfZmxvd19tYXBwaW5nX3ZhbHVlIiksdGhpcy5wYXJzZV9mbG93X25vZGUoKSk7aWYoIXRoaXMuY2hlY2tfdG9rZW4oby5GbG93TWFwcGluZ0VuZFRva2VuKSlyZXR1cm4gdGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfZmxvd19tYXBwaW5nX2VtcHR5X3ZhbHVlIiksdGhpcy5wYXJzZV9mbG93X25vZGUoKX1yZXR1cm4gcz10aGlzLmdldF90b2tlbigpLG49bmV3IHIuTWFwcGluZ0VuZEV2ZW50KHMuc3RhcnRfbWFyayxzLmVuZF9tYXJrKSx0aGlzLnN0YXRlPXRoaXMuc3RhdGVzLnBvcCgpLHRoaXMubWFya3MucG9wKCksbn0sZS5wcm90b3R5cGUucGFyc2VfZmxvd19tYXBwaW5nX3ZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuY2hlY2tfdG9rZW4oby5WYWx1ZVRva2VuKT8oZT10aGlzLmdldF90b2tlbigpLHRoaXMuY2hlY2tfdG9rZW4oby5GbG93RW50cnlUb2tlbixvLkZsb3dNYXBwaW5nRW5kVG9rZW4pPyh0aGlzLnN0YXRlPSJwYXJzZV9mbG93X21hcHBpbmdfa2V5Iix0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKGUuZW5kX21hcmspKToodGhpcy5zdGF0ZXMucHVzaCgicGFyc2VfZmxvd19tYXBwaW5nX2tleSIpLHRoaXMucGFyc2VfZmxvd19ub2RlKCkpKToodGhpcy5zdGF0ZT0icGFyc2VfZmxvd19tYXBwaW5nX2tleSIsZT10aGlzLnBlZWtfdG9rZW4oKSx0aGlzLnByb2Nlc3NfZW1wdHlfc2NhbGFyKGUuc3RhcnRfbWFyaykpfSxlLnByb3RvdHlwZS5wYXJzZV9mbG93X21hcHBpbmdfZW1wdHlfdmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZT0icGFyc2VfZmxvd19tYXBwaW5nX2tleSIsdGhpcy5wcm9jZXNzX2VtcHR5X3NjYWxhcih0aGlzLnBlZWtfdG9rZW4oKS5zdGFydF9tYXJrKX0sZS5wcm90b3R5cGUucHJvY2Vzc19lbXB0eV9zY2FsYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByLlNjYWxhckV2ZW50KG51bGwsbnVsbCxbITAsITFdLCIiLGUsZSl9LGV9KCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVhZGVyLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKCl7dmFyIGUscixvLHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcih2YXIgciBpbiB0KWkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gbi5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG4sZS5fX3N1cGVyX189dC5wcm90b3R5cGUsZX0saT17fS5oYXNPd25Qcm9wZXJ0eSxhPVtdLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5sZW5ndGg7dDxuO3QrKylpZih0IGluIHRoaXMmJnRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfTtvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLGU9by5NYXJrLHI9by5ZQU1MRXJyb3IsdGhpcy5SZWFkZXJFcnJvcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbixyKXt0aGlzLnBvc2l0aW9uPWUsdGhpcy5jaGFyYWN0ZXI9bix0aGlzLnJlYXNvbj1yLHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIHModCxlKSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ1bmFjY2VwdGFibGUgY2hhcmFjdGVyICMiK3RoaXMuY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKyI6ICIrdGhpcy5yZWFzb24rIlxuICBwb3NpdGlvbiAiK3RoaXMucG9zaXRpb259LHR9KHIpLHRoaXMuUmVhZGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihlKXt0aGlzLnN0cmluZz1lLHRoaXMubGluZT0wLHRoaXMuY29sdW1uPTAsdGhpcy5pbmRleD0wLHRoaXMuY2hlY2tfcHJpbnRhYmxlKCksdGhpcy5zdHJpbmcrPSJcMCJ9dmFyIHI7cmV0dXJuIHI9L1teXHgwOVx4MEFceDBEXHgyMC1ceDdFXHg4NVx4QTAtXHVGRkZEXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLG4ucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUmJihlPTApLHRoaXMuc3RyaW5nW3RoaXMuaW5kZXgrZV19LG4ucHJvdG90eXBlLnByZWZpeD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZSYmKGU9MSksdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K2UpfSxuLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKGUpe3ZhciB0LG47Zm9yKG51bGw9PWUmJihlPTEpLG49W107ZTspdD10aGlzLnN0cmluZ1t0aGlzLmluZGV4XSx0aGlzLmluZGV4KyssYS5jYWxsKCJcbsKF4oKCXHUyMDI5Iix0KT49MHx8IlxyIj09PXQmJiJcbiIhPT10aGlzLnN0cmluZ1t0aGlzLmluZGV4XT8odGhpcy5saW5lKyssdGhpcy5jb2x1bW49MCk6dGhpcy5jb2x1bW4rKyxuLnB1c2goZS0tKTtyZXR1cm4gbn0sbi5wcm90b3R5cGUuZ2V0X21hcms9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy5saW5lLHRoaXMuY29sdW1uLHRoaXMuc3RyaW5nLHRoaXMuaW5kZXgpfSxuLnByb3RvdHlwZS5jaGVja19wcmludGFibGU9ZnVuY3Rpb24oKXt2YXIgZSxuLG87aWYobj1yLmV4ZWModGhpcy5zdHJpbmcpKXRocm93IGU9blswXSxvPXRoaXMuc3RyaW5nLmxlbmd0aC10aGlzLmluZGV4K24uaW5kZXgsbmV3IHQuUmVhZGVyRXJyb3IobyxlLCJzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIil9LG59KCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVwcmVzZW50ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSxyLG89ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcih2YXIgciBpbiB0KXMuY2FsbCh0LHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gbi5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG4sZS5fX3N1cGVyX189dC5wcm90b3R5cGUsZX0scz17fS5oYXNPd25Qcm9wZXJ0eTtyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL25vZGVzLmpzIiksZT1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9lcnJvcnMuanMiKS5ZQU1MRXJyb3IsdGhpcy5SZXByZXNlbnRlckVycm9yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBvKHQsZSksdH0oZSksdGhpcy5CYXNlUmVwcmVzZW50ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0O3Q9bnVsbCE9ZT9lOnt9LHRoaXMuZGVmYXVsdF9zdHlsZT10LmRlZmF1bHRfc3R5bGUsdGhpcy5kZWZhdWx0X2Zsb3dfc3R5bGU9dC5kZWZhdWx0X2Zsb3dfc3R5bGUsdGhpcy5yZXByZXNlbnRlZF9vYmplY3RzPXt9LHRoaXMub2JqZWN0X2tlZXBlcj1bXSx0aGlzLmFsaWFzX2tleT1udWxsfXJldHVybiBlLnByb3RvdHlwZS55YW1sX3JlcHJlc2VudGVyc190eXBlcz1bXSxlLnByb3RvdHlwZS55YW1sX3JlcHJlc2VudGVyc19oYW5kbGVycz1bXSxlLnByb3RvdHlwZS55YW1sX211bHRpX3JlcHJlc2VudGVyc190eXBlcz1bXSxlLnByb3RvdHlwZS55YW1sX211bHRpX3JlcHJlc2VudGVyc19oYW5kbGVycz1bXSxlLmFkZF9yZXByZXNlbnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgieWFtbF9yZXByZXNlbnRlcnNfdHlwZXMiKXx8KHRoaXMucHJvdG90eXBlLnlhbWxfcmVwcmVzZW50ZXJzX3R5cGVzPVtdLmNvbmNhdCh0aGlzLnByb3RvdHlwZS55YW1sX3JlcHJlc2VudGVyc190eXBlcykpLHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJ5YW1sX3JlcHJlc2VudGVyc19oYW5kbGVycyIpfHwodGhpcy5wcm90b3R5cGUueWFtbF9yZXByZXNlbnRlcnNfaGFuZGxlcnM9W10uY29uY2F0KHRoaXMucHJvdG90eXBlLnlhbWxfcmVwcmVzZW50ZXJzX2hhbmRsZXJzKSksdGhpcy5wcm90b3R5cGUueWFtbF9yZXByZXNlbnRlcnNfdHlwZXMucHVzaChlKSx0aGlzLnByb3RvdHlwZS55YW1sX3JlcHJlc2VudGVyc19oYW5kbGVycy5wdXNoKHQpfSxlLmFkZF9tdWx0aV9yZXByZXNlbnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgieWFtbF9tdWx0aV9yZXByZXNlbnRlcnNfdHlwZXMiKXx8KHRoaXMucHJvdG90eXBlLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzX3R5cGVzPVtdLmNvbmNhdCh0aGlzLnByb3RvdHlwZS55YW1sX211bHRpX3JlcHJlc2VudGVyc190eXBlcykpLHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJ5YW1sX211bHRpX3JlcHJlc2VudGVyc19oYW5kbGVycyIpfHwodGhpcy5wcm90b3R5cGUueWFtbF9tdWx0aV9yZXByZXNlbnRlcnNfaGFuZGxlcnM9W10uY29uY2F0KHRoaXMucHJvdG90eXBlLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzX2hhbmRsZXJzKSksdGhpcy5wcm90b3R5cGUueWFtbF9tdWx0aV9yZXByZXNlbnRlcnNfdHlwZXMucHVzaChlKSx0aGlzLnByb3RvdHlwZS55YW1sX211bHRpX3JlcHJlc2VudGVyc19oYW5kbGVycy5wdXNoKHQpfSxlLnByb3RvdHlwZS5yZXByZXNlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5yZXByZXNlbnRfZGF0YShlKSx0aGlzLnNlcmlhbGl6ZSh0KSx0aGlzLnJlcHJlc2VudGVkX29iamVjdHM9e30sdGhpcy5vYmplY3Rfa2VlcGVyPVtdLHRoaXMuYWxpYXNfa2V5PW51bGx9LGUucHJvdG90eXBlLnJlcHJlc2VudF9kYXRhPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxzLGksYSxsO2lmKHRoaXMuaWdub3JlX2FsaWFzZXMoZSkpdGhpcy5hbGlhc19rZXk9bnVsbDtlbHNlIGlmKC0xIT09KG49dGhpcy5vYmplY3Rfa2VlcGVyLmluZGV4T2YoZSkpKXtpZih0aGlzLmFsaWFzX2tleT1uLHRoaXMuYWxpYXNfa2V5IGluIHRoaXMucmVwcmVzZW50ZWRfb2JqZWN0cylyZXR1cm4gdGhpcy5yZXByZXNlbnRlZF9vYmplY3RzW3RoaXMuYWxpYXNfa2V5XX1lbHNlIHRoaXMuYWxpYXNfa2V5PXRoaXMub2JqZWN0X2tlZXBlci5sZW5ndGgsdGhpcy5vYmplY3Rfa2VlcGVyLnB1c2goZSk7aWYoYT1udWxsLHQ9bnVsbD09PWU/Im51bGwiOnR5cGVvZiBlLCJvYmplY3QiPT09dCYmKHQ9ZS5jb25zdHJ1Y3RvciksLTEhPT0obj10aGlzLnlhbWxfcmVwcmVzZW50ZXJzX3R5cGVzLmxhc3RJbmRleE9mKHQpKSYmKGE9dGhpcy55YW1sX3JlcHJlc2VudGVyc19oYW5kbGVyc1tuXSksbnVsbD09YSlmb3IoaT10aGlzLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzX3R5cGVzLG49bz0wLHM9aS5sZW5ndGg7bzxzO249KytvKWlmKGw9aVtuXSxlIGluc3RhbmNlb2YgbCl7YT10aGlzLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzX2hhbmRsZXJzW25dO2JyZWFrfXJldHVybiBudWxsPT1hJiYoLTEhPT0obj10aGlzLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzX3R5cGVzLmxhc3RJbmRleE9mKHZvaWQgMCkpP2E9dGhpcy55YW1sX211bHRpX3JlcHJlc2VudGVyc19oYW5kbGVyc1tuXTotMSE9PShuPXRoaXMueWFtbF9yZXByZXNlbnRlcnNfdHlwZXMubGFzdEluZGV4T2Yodm9pZCAwKSkmJihhPXRoaXMueWFtbF9yZXByZXNlbnRlcnNfaGFuZGxlcnNbbl0pKSxudWxsIT1hP2EuY2FsbCh0aGlzLGUpOm5ldyByLlNjYWxhck5vZGUobnVsbCwiIitlKX0sZS5wcm90b3R5cGUucmVwcmVzZW50X3NjYWxhcj1mdW5jdGlvbihlLHQsbil7dmFyIG87cmV0dXJuIG51bGw9PW4mJihuPXRoaXMuZGVmYXVsdF9zdHlsZSksbz1uZXcgci5TY2FsYXJOb2RlKGUsdCxudWxsLG51bGwsbiksbnVsbCE9dGhpcy5hbGlhc19rZXkmJih0aGlzLnJlcHJlc2VudGVkX29iamVjdHNbdGhpcy5hbGlhc19rZXldPW8pLG99LGUucHJvdG90eXBlLnJlcHJlc2VudF9zZXF1ZW5jZT1mdW5jdGlvbihlLHQsbil7dmFyIG8scyxpLGEsbCx1LGMsZDtmb3IoZD1bXSxsPW5ldyByLlNlcXVlbmNlTm9kZShlLGQsbnVsbCxudWxsLG4pLG51bGwhPXRoaXMuYWxpYXNfa2V5JiYodGhpcy5yZXByZXNlbnRlZF9vYmplY3RzW3RoaXMuYWxpYXNfa2V5XT1sKSxvPSEwLGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspcz10W2ldLHU9dGhpcy5yZXByZXNlbnRfZGF0YShzKSx1IGluc3RhbmNlb2Ygci5TY2FsYXJOb2RlfHx1LnN0eWxlfHwobz0hMSksZC5wdXNoKHUpO3JldHVybiBudWxsPT1uJiYobC5mbG93X3N0eWxlPW51bGwhPShjPXRoaXMuZGVmYXVsdF9mbG93X3N0eWxlKT9jOm8pLGx9LGUucHJvdG90eXBlLnJlcHJlc2VudF9tYXBwaW5nPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpLGEsbCx1LGMsZCxfO189W10sbD1uZXcgci5NYXBwaW5nTm9kZShlLF8sbiksdGhpcy5hbGlhc19rZXkmJih0aGlzLnJlcHJlc2VudGVkX29iamVjdHNbdGhpcy5hbGlhc19rZXldPWwpLG89ITA7Zm9yKGkgaW4gdClzLmNhbGwodCxpKSYmKGE9dFtpXSx1PXRoaXMucmVwcmVzZW50X2RhdGEoaSksYz10aGlzLnJlcHJlc2VudF9kYXRhKGEpLHUgaW5zdGFuY2VvZiByLlNjYWxhck5vZGV8fHUuc3R5bGV8fChvPSExKSxjIGluc3RhbmNlb2Ygci5TY2FsYXJOb2RlfHxjLnN0eWxlfHwobz0hMSksXy5wdXNoKFt1LGNdKSk7cmV0dXJuIG58fChsLmZsb3dfc3R5bGU9bnVsbCE9KGQ9dGhpcy5kZWZhdWx0X2Zsb3dfc3R5bGUpP2Q6byksbH0sZS5wcm90b3R5cGUuaWdub3JlX2FsaWFzZXM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGV9KCksdGhpcy5SZXByZXNlbnRlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbyhuLGUpLG4ucHJvdG90eXBlLnJlcHJlc2VudF9ib29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlcHJlc2VudF9zY2FsYXIoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLGU/InRydWUiOiJmYWxzZSIpfSxuLnByb3RvdHlwZS5yZXByZXNlbnRfbnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXByZXNlbnRfc2NhbGFyKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIiwibnVsbCIpfSxuLnByb3RvdHlwZS5yZXByZXNlbnRfbnVtYmVyPWZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIHQ9InRhZzp5YW1sLm9yZywyMDAyOiIrKGUlMT09MD8iaW50IjoiZmxvYXQiKSxuPWUhPT1lPyIubmFuIjpJbmZpbml0eT09PWU/Ii5pbmYiOi1JbmZpbml0eT09PWU/Ii0uaW5mIjplLnRvU3RyaW5nKCksdGhpcy5yZXByZXNlbnRfc2NhbGFyKHQsbil9LG4ucHJvdG90eXBlLnJlcHJlc2VudF9zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVwcmVzZW50X3NjYWxhcigidGFnOnlhbWwub3JnLDIwMDI6c3RyIixlKX0sbi5wcm90b3R5cGUucmVwcmVzZW50X2FycmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlcHJlc2VudF9zZXF1ZW5jZSgidGFnOnlhbWwub3JnLDIwMDI6c2VxIixlKX0sbi5wcm90b3R5cGUucmVwcmVzZW50X2RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVwcmVzZW50X3NjYWxhcigidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIixlLnRvSVNPU3RyaW5nKCkpfSxuLnByb3RvdHlwZS5yZXByZXNlbnRfb2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlcHJlc2VudF9tYXBwaW5nKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLGUpfSxuLnByb3RvdHlwZS5yZXByZXNlbnRfdW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyB0LlJlcHJlc2VudGVyRXJyb3IoImNhbm5vdCByZXByZXNlbnQgYW4gb25iamVjdDogIitlKX0sbi5wcm90b3R5cGUuaWdub3JlX2FsaWFzZXM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWV8fCgiYm9vbGVhbiI9PSh0PXR5cGVvZiBlKXx8Im51bWJlciI9PT10fHwic3RyaW5nIj09PXQpfSxufSh0aGlzLkJhc2VSZXByZXNlbnRlciksdGhpcy5SZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoImJvb2xlYW4iLHRoaXMuUmVwcmVzZW50ZXIucHJvdG90eXBlLnJlcHJlc2VudF9ib29sZWFuKSx0aGlzLlJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcigibnVsbCIsdGhpcy5SZXByZXNlbnRlci5wcm90b3R5cGUucmVwcmVzZW50X251bGwpLHRoaXMuUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKCJudW1iZXIiLHRoaXMuUmVwcmVzZW50ZXIucHJvdG90eXBlLnJlcHJlc2VudF9udW1iZXIpLHRoaXMuUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKCJzdHJpbmciLHRoaXMuUmVwcmVzZW50ZXIucHJvdG90eXBlLnJlcHJlc2VudF9zdHJpbmcpLHRoaXMuUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKEFycmF5LHRoaXMuUmVwcmVzZW50ZXIucHJvdG90eXBlLnJlcHJlc2VudF9hcnJheSksdGhpcy5SZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoRGF0ZSx0aGlzLlJlcHJlc2VudGVyLnByb3RvdHlwZS5yZXByZXNlbnRfZGF0ZSksdGhpcy5SZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoT2JqZWN0LHRoaXMuUmVwcmVzZW50ZXIucHJvdG90eXBlLnJlcHJlc2VudF9vYmplY3QpLHRoaXMuUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKG51bGwsdGhpcy5SZXByZXNlbnRlci5wcm90b3R5cGUucmVwcmVzZW50X3VuZGVmaW5lZCl9KS5jYWxsKHRoaXMpfSwiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVzb2x2ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciByIGluIHQpcy5jYWxsKHQscikmJihlW3JdPXRbcl0pO3JldHVybiBuLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxzPXt9Lmhhc093blByb3BlcnR5LGk9W10uaW5kZXhPZnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj10aGlzLmxlbmd0aDt0PG47dCsrKWlmKHQgaW4gdGhpcyYmdGhpc1t0XT09PWUpcmV0dXJuIHQ7cmV0dXJuLTF9O3Q9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvbm9kZXMuanMiKSxyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3V0aWwuanMiKSxlPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLllBTUxFcnJvcix0aGlzLlJlc29sdmVyRXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG8odCxlKSx0fShlKSx0aGlzLkJhc2VSZXNvbHZlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnJlc29sdmVyX2V4YWN0X3BhdGhzPVtdLHRoaXMucmVzb2x2ZXJfcHJlZml4X3BhdGhzPVtdfXZhciBuLG8scztyZXR1cm4gbz0idGFnOnlhbWwub3JnLDIwMDI6c3RyIixzPSJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLG49InRhZzp5YW1sLm9yZywyMDAyOm1hcCIsZS5wcm90b3R5cGUueWFtbF9pbXBsaWNpdF9yZXNvbHZlcnM9e30sZS5wcm90b3R5cGUueWFtbF9wYXRoX3Jlc29sdmVycz17fSxlLmFkZF9pbXBsaWNpdF9yZXNvbHZlcj1mdW5jdGlvbihlLHQsbil7dmFyIG8scyxpLGEsbDtmb3IobnVsbD09biYmKG49W251bGxdKSx0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgieWFtbF9pbXBsaWNpdF9yZXNvbHZlcnMiKXx8KHRoaXMucHJvdG90eXBlLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzPXIuZXh0ZW5kKHt9LHRoaXMucHJvdG90eXBlLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzKSksbD1bXSxpPTAsYT1uLmxlbmd0aDtpPGE7aSsrKXM9bltpXSxsLnB1c2goKG51bGwhPShvPXRoaXMucHJvdG90eXBlLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzKVtzXT9vW3NdOm9bc109W10pLnB1c2goW2UsdF0pKTtyZXR1cm4gbH0sZS5wcm90b3R5cGUuZGVzY2VuZF9yZXNvbHZlcj1mdW5jdGlvbihlLHQpe3ZhciBuLG8scyxpLGEsbCx1LGMsZCxfLHAsZixtO2lmKCFyLmlzX2VtcHR5KHRoaXMueWFtbF9wYXRoX3Jlc29sdmVycykpe2lmKG89e30sZD1bXSxlKWZvcihuPXRoaXMucmVzb2x2ZXJfcHJlZml4X3BhdGhzLmxlbmd0aCxfPXRoaXMucmVzb2x2ZXJfcHJlZml4X3BhdGhzLnNsaWNlKC0xKVswXSxzPTAsbD1fLmxlbmd0aDtzPGw7cysrKXA9X1tzXSxjPXBbMF0sYT1wWzFdLHRoaXMuY2hlY2tfcmVzb2x2ZXJfcHJlZml4KG4sYyxhLGUsdCkmJihjLmxlbmd0aD5uP2QucHVzaChbYyxhXSk6b1thXT10aGlzLnlhbWxfcGF0aF9yZXNvbHZlcnNbY11bYV0pO2Vsc2UgZm9yKGY9dGhpcy55YW1sX3BhdGhfcmVzb2x2ZXJzLGk9MCx1PWYubGVuZ3RoO2k8dTtpKyspbT1mW2ldLGM9bVswXSxhPW1bMV0sYz9kLnB1c2goW2MsYV0pOm9bYV09dGhpcy55YW1sX3BhdGhfcmVzb2x2ZXJzW2NdW2FdO3JldHVybiB0aGlzLnJlc29sdmVyX2V4YWN0X3BhdGhzLnB1c2gobyksdGhpcy5yZXNvbHZlcl9wcmVmaXhfcGF0aHMucHVzaChkKX19LGUucHJvdG90eXBlLmFzY2VuZF9yZXNvbHZlcj1mdW5jdGlvbigpe2lmKCFyLmlzX2VtcHR5KHRoaXMueWFtbF9wYXRoX3Jlc29sdmVycykpcmV0dXJuIHRoaXMucmVzb2x2ZXJfZXhhY3RfcGF0aHMucG9wKCksdGhpcy5yZXNvbHZlcl9wcmVmaXhfcGF0aHMucG9wKCl9LGUucHJvdG90eXBlLmNoZWNrX3Jlc29sdmVyX3ByZWZpeD1mdW5jdGlvbihlLG4scixvLHMpe3ZhciBpLGEsbDtpZihsPW5bZS0xXSxhPWxbMF0saT1sWzFdLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoby50YWchPT1hKXJldHVybn1lbHNlIGlmKG51bGwhPT1hJiYhKG8gaW5zdGFuY2VvZiBhKSlyZXR1cm47aWYoKCEwIT09aXx8bnVsbD09PXMpJiYoITEhPT1pJiZudWxsIT09aXx8bnVsbCE9PXMpKXtpZigic3RyaW5nIj09dHlwZW9mIGkpe2lmKCEocyBpbnN0YW5jZW9mIHQuU2NhbGFyTm9kZSkmJmk9PT1zLnZhbHVlKXJldHVybn1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgaSYmaSE9PXMpcmV0dXJuO3JldHVybiEwfX0sZS5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihlLHIsYSl7dmFyIGwsdSxjLGQsXyxwLGYsbSxoLGcsYixFO2lmKGU9PT10LlNjYWxhck5vZGUmJmFbMF0pe2ZvcihiPSIiPT09cj9udWxsIT0ocD10aGlzLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzWyIiXSk/cDpbXTpudWxsIT0oZj10aGlzLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzW3JbMF1dKT9mOltdLGI9Yi5jb25jYXQobnVsbCE9KG09dGhpcy55YW1sX2ltcGxpY2l0X3Jlc29sdmVyc1tudWxsXSk/bTpbXSksYz0wLF89Yi5sZW5ndGg7YzxfO2MrKylpZihoPWJbY10sRT1oWzBdLGc9aFsxXSxyLm1hdGNoKGcpKXJldHVybiBFO2E9YVsxXX1sPSEwO2ZvcihkIGluIHRoaXMueWFtbF9wYXRoX3Jlc29sdmVycyludWxsPT17fVtkXSYmKGw9ITEpO2lmKCFsKXtpZih1PXRoaXMucmVzb2x2ZXJfZXhhY3RfcGF0aHMuc2xpY2UoLTEpWzBdLGkuY2FsbCh1LGUpPj0wKXJldHVybiB1W2VdO2lmKGkuY2FsbCh1LG51bGwpPj0wKXJldHVybiB1W251bGxdfXJldHVybiBlPT09dC5TY2FsYXJOb2RlP286ZT09PXQuU2VxdWVuY2VOb2RlP3M6ZT09PXQuTWFwcGluZ05vZGU/bjp2b2lkIDB9LGV9KCksdGhpcy5SZXNvbHZlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbyh0LGUpLHR9KHRoaXMuQmFzZVJlc29sdmVyKSx0aGlzLlJlc29sdmVyLmFkZF9pbXBsaWNpdF9yZXNvbHZlcigidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIsL14oPzp5ZXN8WWVzfFlFU3x0cnVlfFRydWV8VFJVRXxvbnxPbnxPTnxub3xOb3xOT3xmYWxzZXxGYWxzZXxGQUxTRXxvZmZ8T2ZmfE9GRikkLywieVluTnRUZkZvTyIpLHRoaXMuUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsL14oPzpbLStdPyg/OlswLTldWzAtOV9dKilcLlswLTlfXSooPzpbZUVdWy0rXVswLTldKyk/fFwuWzAtOV9dKyg/OltlRV1bLStdWzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1wuWzAtOV9dKnxbLStdP1wuKD86aW5mfEluZnxJTkYpfFwuKD86bmFufE5hTnxOQU4pKSQvLCItKzAxMjM0NTY3ODkuIiksdGhpcy5SZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoInRhZzp5YW1sLm9yZywyMDAyOmludCIsL14oPzpbLStdPzBiWzAxX10rfFstK10/MFswLTdfXSt8Wy0rXT8oPzowfFsxLTldWzAtOV9dKil8Wy0rXT8weFswLTlhLWZBLUZfXSt8Wy0rXT8wb1swLTdfXSt8Wy0rXT9bMS05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pKykkLywiLSswMTIzNDU2Nzg5IiksdGhpcy5SZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIiwvXig/Ojw8KSQvLCI8IiksdGhpcy5SZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLC9eKD86fnxudWxsfE51bGx8TlVMTHwpJC8sWyJ+IiwibiIsIk4iLCIiXSksdGhpcy5SZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIsL14oPzpbMC05XVswLTldWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV18WzAtOV1bMC05XVswLTldWzAtOV0tWzAtOV1bMC05XT8tWzAtOV1bMC05XT8oPzpbVHRdfFtceDIwXHRdKylbMC05XVswLTldPzpbMC05XVswLTldOlswLTldWzAtOV0oPzpcLlswLTldKik/KD86W1x4MjBcdF0qKD86WnxbLStdWzAtOV1bMC05XT8oPzo6WzAtOV1bMC05XSk/KSk/KSQvLCIwMTIzNDU2Nzg5IiksdGhpcy5SZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoInRhZzp5YW1sLm9yZywyMDAyOnZhbHVlIiwvXig/Oj0pJC8sIj0iKSx0aGlzLlJlc29sdmVyLmFkZF9pbXBsaWNpdF9yZXNvbHZlcigidGFnOnlhbWwub3JnLDIwMDI6eWFtbCIsL14oPzohfCZ8XCopJC8sIiEmKiIpfSkuY2FsbCh0aGlzKX0sIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3NjYW5uZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSxyLG8scyxpPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1mb3IodmFyIHIgaW4gdClhLmNhbGwodCxyKSYmKGVbcl09dFtyXSk7cmV0dXJuIG4ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUuX19zdXBlcl9fPXQucHJvdG90eXBlLGV9LGE9e30uaGFzT3duUHJvcGVydHksbD1bXS5zbGljZSx1PVtdLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49dGhpcy5sZW5ndGg7dDxuO3QrKylpZih0IGluIHRoaXMmJnRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfTtlPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLk1hcmtlZFlBTUxFcnJvcixvPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3Rva2Vucy5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvdXRpbC5qcyIpLHRoaXMuU2Nhbm5lckVycm9yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBpKHQsZSksdH0oZSkscj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixvLHMpe3RoaXMudG9rZW5fbnVtYmVyPWUsdGhpcy5yZXF1aXJlZD10LHRoaXMuaW5kZXg9bix0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1vLHRoaXMubWFyaz1zfXJldHVybiBlfSgpLHRoaXMuU2Nhbm5lcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmRvbmU9ITEsdGhpcy5mbG93X2xldmVsPTAsdGhpcy50b2tlbnM9W10sdGhpcy5mZXRjaF9zdHJlYW1fc3RhcnQoKSx0aGlzLnRva2Vuc190YWtlbj0wLHRoaXMuaW5kZW50PS0xLHRoaXMuaW5kZW50cz1bXSx0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITAsdGhpcy5wb3NzaWJsZV9zaW1wbGVfa2V5cz17fX12YXIgbixpLGMsZCxfO3JldHVybiBuPSJcclxuwoVcdTIwMjhcdTIwMjkiLGM9Ilx0ICIsaT0iMDEyMzQ1Njc4OSIsXz17MDoiXDAiLGE6IgciLGI6IlxiIix0OiJcdCIsIlx0IjoiXHQiLG46IlxuIix2OiJcdiIsZjoiXGYiLHI6IlxyIixlOiIbIiwiICI6IiAiLCciJzonIicsIlxcIjoiXFwiLE46IsKFIixfOiLCoCIsTDoiXHUyMDI4IixQOiJcdTIwMjkifSxkPXt4OjIsdTo0LFU6OH0sZS5wcm90b3R5cGUuY2hlY2tfdG9rZW49ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtmb3IodD0xPD1hcmd1bWVudHMubGVuZ3RoP2wuY2FsbChhcmd1bWVudHMsMCk6W107dGhpcy5uZWVkX21vcmVfdG9rZW5zKCk7KXRoaXMuZmV0Y2hfbW9yZV90b2tlbnMoKTtpZigwIT09dGhpcy50b2tlbnMubGVuZ3RoKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoZT10W25dLHRoaXMudG9rZW5zWzBdaW5zdGFuY2VvZiBlKXJldHVybiEwfXJldHVybiExfSxlLnByb3RvdHlwZS5wZWVrX3Rva2VuPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLm5lZWRfbW9yZV90b2tlbnMoKTspdGhpcy5mZXRjaF9tb3JlX3Rva2VucygpO2lmKDAhPT10aGlzLnRva2Vucy5sZW5ndGgpcmV0dXJuIHRoaXMudG9rZW5zWzBdfSxlLnByb3RvdHlwZS5nZXRfdG9rZW49ZnVuY3Rpb24oKXtmb3IoO3RoaXMubmVlZF9tb3JlX3Rva2VucygpOyl0aGlzLmZldGNoX21vcmVfdG9rZW5zKCk7aWYoMCE9PXRoaXMudG9rZW5zLmxlbmd0aClyZXR1cm4gdGhpcy50b2tlbnNfdGFrZW4rKyx0aGlzLnRva2Vucy5zaGlmdCgpfSxlLnByb3RvdHlwZS5uZWVkX21vcmVfdG9rZW5zPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZG9uZSYmKDA9PT10aGlzLnRva2Vucy5sZW5ndGh8fCh0aGlzLnN0YWxlX3Bvc3NpYmxlX3NpbXBsZV9rZXlzKCksdGhpcy5uZXh0X3Bvc3NpYmxlX3NpbXBsZV9rZXkoKT09PXRoaXMudG9rZW5zX3Rha2VuKSl9LGUucHJvdG90eXBlLmZldGNoX21vcmVfdG9rZW5zPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5zY2FuX3RvX25leHRfdG9rZW4oKSx0aGlzLnN0YWxlX3Bvc3NpYmxlX3NpbXBsZV9rZXlzKCksdGhpcy51bndpbmRfaW5kZW50KHRoaXMuY29sdW1uKSwiXDAiPT09KGU9dGhpcy5wZWVrKCkpKXJldHVybiB0aGlzLmZldGNoX3N0cmVhbV9lbmQoKTtpZigiJSI9PT1lJiZ0aGlzLmNoZWNrX2RpcmVjdGl2ZSgpKXJldHVybiB0aGlzLmZldGNoX2RpcmVjdGl2ZSgpO2lmKCItIj09PWUmJnRoaXMuY2hlY2tfZG9jdW1lbnRfc3RhcnQoKSlyZXR1cm4gdGhpcy5mZXRjaF9kb2N1bWVudF9zdGFydCgpO2lmKCIuIj09PWUmJnRoaXMuY2hlY2tfZG9jdW1lbnRfZW5kKCkpcmV0dXJuIHRoaXMuZmV0Y2hfZG9jdW1lbnRfZW5kKCk7aWYoIlsiPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9mbG93X3NlcXVlbmNlX3N0YXJ0KCk7aWYoInsiPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9mbG93X21hcHBpbmdfc3RhcnQoKTtpZigiXSI9PT1lKXJldHVybiB0aGlzLmZldGNoX2Zsb3dfc2VxdWVuY2VfZW5kKCk7aWYoIn0iPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9mbG93X21hcHBpbmdfZW5kKCk7aWYoIiwiPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9mbG93X2VudHJ5KCk7aWYoIi0iPT09ZSYmdGhpcy5jaGVja19ibG9ja19lbnRyeSgpKXJldHVybiB0aGlzLmZldGNoX2Jsb2NrX2VudHJ5KCk7aWYoIj8iPT09ZSYmdGhpcy5jaGVja19rZXkoKSlyZXR1cm4gdGhpcy5mZXRjaF9rZXkoKTtpZigiOiI9PT1lJiZ0aGlzLmNoZWNrX3ZhbHVlKCkpcmV0dXJuIHRoaXMuZmV0Y2hfdmFsdWUoKTtpZigiKiI9PT1lKXJldHVybiB0aGlzLmZldGNoX2FsaWFzKCk7aWYoIiYiPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9hbmNob3IoKTtpZigiISI9PT1lKXJldHVybiB0aGlzLmZldGNoX3RhZygpO2lmKCJ8Ij09PWUmJjA9PT10aGlzLmZsb3dfbGV2ZWwpcmV0dXJuIHRoaXMuZmV0Y2hfbGl0ZXJhbCgpO2lmKCI+Ij09PWUmJjA9PT10aGlzLmZsb3dfbGV2ZWwpcmV0dXJuIHRoaXMuZmV0Y2hfZm9sZGVkKCk7aWYoIiciPT09ZSlyZXR1cm4gdGhpcy5mZXRjaF9zaW5nbGUoKTtpZignIic9PT1lKXJldHVybiB0aGlzLmZldGNoX2RvdWJsZSgpO2lmKHRoaXMuY2hlY2tfcGxhaW4oKSlyZXR1cm4gdGhpcy5mZXRjaF9wbGFpbigpO3Rocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgZm9yIHRoZSBuZXh0IHRva2VuIixudWxsLCJmb3VuZCBjaGFyYWN0ZXIgIitlKyIgdGhhdCBjYW5ub3Qgc3RhcnQgYW55IHRva2VuIix0aGlzLmdldF9tYXJrKCkpfSxlLnByb3RvdHlwZS5uZXh0X3Bvc3NpYmxlX3NpbXBsZV9rZXk9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtuPW51bGwscj10aGlzLnBvc3NpYmxlX3NpbXBsZV9rZXlzO2Zvcih0IGluIHIpYS5jYWxsKHIsdCkmJihlPXJbdF0sKG51bGw9PT1ufHxlLnRva2VuX251bWJlcjxuKSYmKG49ZS50b2tlbl9udW1iZXIpKTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuc3RhbGVfcG9zc2libGVfc2ltcGxlX2tleXM9ZnVuY3Rpb24oKXt2YXIgZSxuLHIsbztyPXRoaXMucG9zc2libGVfc2ltcGxlX2tleXMsbz1bXTtmb3IobiBpbiByKWlmKGEuY2FsbChyLG4pJiYoZT1yW25dLCEoZS5saW5lPT09dGhpcy5saW5lJiZ0aGlzLmluZGV4LWUuaW5kZXg8PTEwMjQpKSl7aWYoZS5yZXF1aXJlZCl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgc2ltcGxlIGtleSIsZS5tYXJrLCJjb3VsZCBub3QgZmluZCBleHBlY3RlZCAnOiciLHRoaXMuZ2V0X21hcmsoKSk7by5wdXNoKGRlbGV0ZSB0aGlzLnBvc3NpYmxlX3NpbXBsZV9rZXlzW25dKX1yZXR1cm4gb30sZS5wcm90b3R5cGUuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5PWZ1bmN0aW9uKCl7dmFyIGUsdDtpZigoZT0wPT09dGhpcy5mbG93X2xldmVsJiZ0aGlzLmluZGVudD09PXRoaXMuY29sdW1uKSYmIXRoaXMuYWxsb3dfc2ltcGxlX2tleSl0aHJvdyBuZXcgRXJyb3IoImxvZ2ljIGZhaWx1cmUiKTtpZih0aGlzLmFsbG93X3NpbXBsZV9rZXkpcmV0dXJuIHRoaXMucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSx0PXRoaXMudG9rZW5zX3Rha2VuK3RoaXMudG9rZW5zLmxlbmd0aCx0aGlzLnBvc3NpYmxlX3NpbXBsZV9rZXlzW3RoaXMuZmxvd19sZXZlbF09bmV3IHIodCxlLHRoaXMuaW5kZXgsdGhpcy5saW5lLHRoaXMuY29sdW1uLHRoaXMuZ2V0X21hcmsoKSl9LGUucHJvdG90eXBlLnJlbW92ZV9wb3NzaWJsZV9zaW1wbGVfa2V5PWZ1bmN0aW9uKCl7dmFyIGU7aWYoZT10aGlzLnBvc3NpYmxlX3NpbXBsZV9rZXlzW3RoaXMuZmxvd19sZXZlbF0pe2lmKGUucmVxdWlyZWQpdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIHNpbXBsZSBrZXkiLGUubWFyaywiY291bGQgbm90IGZpbmQgZXhwZWN0ZWQgJzonIix0aGlzLmdldF9tYXJrKCkpO3JldHVybiBkZWxldGUgdGhpcy5wb3NzaWJsZV9zaW1wbGVfa2V5c1t0aGlzLmZsb3dfbGV2ZWxdfX0sZS5wcm90b3R5cGUudW53aW5kX2luZGVudD1mdW5jdGlvbihlKXt2YXIgdCxuO2lmKDA9PT10aGlzLmZsb3dfbGV2ZWwpe2ZvcihuPVtdO3RoaXMuaW5kZW50PmU7KXQ9dGhpcy5nZXRfbWFyaygpLHRoaXMuaW5kZW50PXRoaXMuaW5kZW50cy5wb3AoKSxuLnB1c2godGhpcy50b2tlbnMucHVzaChuZXcgby5CbG9ja0VuZFRva2VuKHQsdCkpKTtyZXR1cm4gbn19LGUucHJvdG90eXBlLmFkZF9pbmRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+dGhpcy5pbmRlbnQmJih0aGlzLmluZGVudHMucHVzaCh0aGlzLmluZGVudCksdGhpcy5pbmRlbnQ9ZSwhMCl9LGUucHJvdG90eXBlLmZldGNoX3N0cmVhbV9zdGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZ2V0X21hcmsoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBvLlN0cmVhbVN0YXJ0VG9rZW4oZSxlLHRoaXMuZW5jb2RpbmcpKX0sZS5wcm90b3R5cGUuZmV0Y2hfc3RyZWFtX2VuZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLnVud2luZF9pbmRlbnQoLTEpLHRoaXMucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSx0aGlzLmFsbG93X3Bvc3NpYmxlX3NpbXBsZV9rZXk9ITEsdGhpcy5wb3NzaWJsZV9zaW1wbGVfa2V5cz17fSxlPXRoaXMuZ2V0X21hcmsoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBvLlN0cmVhbUVuZFRva2VuKGUsZSkpLHRoaXMuZG9uZT0hMH0sZS5wcm90b3R5cGUuZmV0Y2hfZGlyZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW53aW5kX2luZGVudCgtMSksdGhpcy5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMSx0aGlzLnRva2Vucy5wdXNoKHRoaXMuc2Nhbl9kaXJlY3RpdmUoKSl9LGUucHJvdG90eXBlLmZldGNoX2RvY3VtZW50X3N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2hfZG9jdW1lbnRfaW5kaWNhdG9yKG8uRG9jdW1lbnRTdGFydFRva2VuKX0sZS5wcm90b3R5cGUuZmV0Y2hfZG9jdW1lbnRfZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2hfZG9jdW1lbnRfaW5kaWNhdG9yKG8uRG9jdW1lbnRFbmRUb2tlbil9LGUucHJvdG90eXBlLmZldGNoX2RvY3VtZW50X2luZGljYXRvcj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy51bndpbmRfaW5kZW50KC0xKSx0aGlzLnJlbW92ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCksdGhpcy5hbGxvd19zaW1wbGVfa2V5PSExLHQ9dGhpcy5nZXRfbWFyaygpLHRoaXMuZm9yd2FyZCgzKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBlKHQsdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX2Zsb3dfc2VxdWVuY2Vfc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaF9mbG93X2NvbGxlY3Rpb25fc3RhcnQoby5GbG93U2VxdWVuY2VTdGFydFRva2VuKX0sZS5wcm90b3R5cGUuZmV0Y2hfZmxvd19tYXBwaW5nX3N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2hfZmxvd19jb2xsZWN0aW9uX3N0YXJ0KG8uRmxvd01hcHBpbmdTdGFydFRva2VuKX0sZS5wcm90b3R5cGUuZmV0Y2hfZmxvd19jb2xsZWN0aW9uX3N0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLnNhdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLHRoaXMuZmxvd19sZXZlbCsrLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMCx0PXRoaXMuZ2V0X21hcmsoKSx0aGlzLmZvcndhcmQoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBlKHQsdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX2Zsb3dfc2VxdWVuY2VfZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2hfZmxvd19jb2xsZWN0aW9uX2VuZChvLkZsb3dTZXF1ZW5jZUVuZFRva2VuKX0sZS5wcm90b3R5cGUuZmV0Y2hfZmxvd19tYXBwaW5nX2VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoX2Zsb3dfY29sbGVjdGlvbl9lbmQoby5GbG93TWFwcGluZ0VuZFRva2VuKX0sZS5wcm90b3R5cGUuZmV0Y2hfZmxvd19jb2xsZWN0aW9uX2VuZD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLHRoaXMuZmxvd19sZXZlbC0tLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMSx0PXRoaXMuZ2V0X21hcmsoKSx0aGlzLmZvcndhcmQoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBlKHQsdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX2Zsb3dfZW50cnk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hbGxvd19zaW1wbGVfa2V5PSEwLHRoaXMucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSxlPXRoaXMuZ2V0X21hcmsoKSx0aGlzLmZvcndhcmQoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBvLkZsb3dFbnRyeVRva2VuKGUsdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX2Jsb2NrX2VudHJ5PWZ1bmN0aW9uKCl7dmFyIGUsbjtpZigwPT09dGhpcy5mbG93X2xldmVsKXtpZighdGhpcy5hbGxvd19zaW1wbGVfa2V5KXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcihudWxsLG51bGwsInNlcXVlbmNlIGVudHJpZXMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiLHRoaXMuZ2V0X21hcmsoKSk7dGhpcy5hZGRfaW5kZW50KHRoaXMuY29sdW1uKSYmKGU9dGhpcy5nZXRfbWFyaygpLHRoaXMudG9rZW5zLnB1c2gobmV3IG8uQmxvY2tTZXF1ZW5jZVN0YXJ0VG9rZW4oZSxlKSkpfXJldHVybiB0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITAsdGhpcy5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLG49dGhpcy5nZXRfbWFyaygpLHRoaXMuZm9yd2FyZCgpLHRoaXMudG9rZW5zLnB1c2gobmV3IG8uQmxvY2tFbnRyeVRva2VuKG4sdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX2tleT1mdW5jdGlvbigpe3ZhciBlLG47aWYoMD09PXRoaXMuZmxvd19sZXZlbCl7aWYoIXRoaXMuYWxsb3dfc2ltcGxlX2tleSl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IobnVsbCxudWxsLCJtYXBwaW5nIGtleXMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiLHRoaXMuZ2V0X21hcmsoKSk7dGhpcy5hZGRfaW5kZW50KHRoaXMuY29sdW1uKSYmKGU9dGhpcy5nZXRfbWFyaygpLHRoaXMudG9rZW5zLnB1c2gobmV3IG8uQmxvY2tNYXBwaW5nU3RhcnRUb2tlbihlLGUpKSl9cmV0dXJuIHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hdGhpcy5mbG93X2xldmVsLHRoaXMucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSxuPXRoaXMuZ2V0X21hcmsoKSx0aGlzLmZvcndhcmQoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBvLktleVRva2VuKG4sdGhpcy5nZXRfbWFyaygpKSl9LGUucHJvdG90eXBlLmZldGNoX3ZhbHVlPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2lmKGU9dGhpcy5wb3NzaWJsZV9zaW1wbGVfa2V5c1t0aGlzLmZsb3dfbGV2ZWxdKWRlbGV0ZSB0aGlzLnBvc3NpYmxlX3NpbXBsZV9rZXlzW3RoaXMuZmxvd19sZXZlbF0sdGhpcy50b2tlbnMuc3BsaWNlKGUudG9rZW5fbnVtYmVyLXRoaXMudG9rZW5zX3Rha2VuLDAsbmV3IG8uS2V5VG9rZW4oZS5tYXJrLGUubWFyaykpLDA9PT10aGlzLmZsb3dfbGV2ZWwmJnRoaXMuYWRkX2luZGVudChlLmNvbHVtbikmJnRoaXMudG9rZW5zLnNwbGljZShlLnRva2VuX251bWJlci10aGlzLnRva2Vuc190YWtlbiwwLG5ldyBvLkJsb2NrTWFwcGluZ1N0YXJ0VG9rZW4oZS5tYXJrLGUubWFyaykpLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMTtlbHNle2lmKDA9PT10aGlzLmZsb3dfbGV2ZWwpe2lmKCF0aGlzLmFsbG93X3NpbXBsZV9rZXkpdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKG51bGwsbnVsbCwibWFwcGluZyB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiLHRoaXMuZ2V0X21hcmsoKSk7dGhpcy5hZGRfaW5kZW50KHRoaXMuY29sdW1uKSYmKG49dGhpcy5nZXRfbWFyaygpLHRoaXMudG9rZW5zLnB1c2gobmV3IG8uQmxvY2tNYXBwaW5nU3RhcnRUb2tlbihuLG4pKSl9dGhpcy5hbGxvd19zaW1wbGVfa2V5PSF0aGlzLmZsb3dfbGV2ZWwsdGhpcy5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpfXJldHVybiByPXRoaXMuZ2V0X21hcmsoKSx0aGlzLmZvcndhcmQoKSx0aGlzLnRva2Vucy5wdXNoKG5ldyBvLlZhbHVlVG9rZW4ocix0aGlzLmdldF9tYXJrKCkpKX0sZS5wcm90b3R5cGUuZmV0Y2hfYWxpYXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYXZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSx0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITEsdGhpcy50b2tlbnMucHVzaCh0aGlzLnNjYW5fYW5jaG9yKG8uQWxpYXNUb2tlbikpfSxlLnByb3RvdHlwZS5mZXRjaF9hbmNob3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYXZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSx0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITEsdGhpcy50b2tlbnMucHVzaCh0aGlzLnNjYW5fYW5jaG9yKG8uQW5jaG9yVG9rZW4pKX0sZS5wcm90b3R5cGUuZmV0Y2hfdGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCksdGhpcy5hbGxvd19zaW1wbGVfa2V5PSExLHRoaXMudG9rZW5zLnB1c2godGhpcy5zY2FuX3RhZygpKX0sZS5wcm90b3R5cGUuZmV0Y2hfbGl0ZXJhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoX2Jsb2NrX3NjYWxhcigifCIpfSxlLnByb3RvdHlwZS5mZXRjaF9mb2xkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaF9ibG9ja19zY2FsYXIoIj4iKX0sZS5wcm90b3R5cGUuZmV0Y2hfYmxvY2tfc2NhbGFyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITAsdGhpcy5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLHRoaXMudG9rZW5zLnB1c2godGhpcy5zY2FuX2Jsb2NrX3NjYWxhcihlKSl9LGUucHJvdG90eXBlLmZldGNoX3NpbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoX2Zsb3dfc2NhbGFyKCInIil9LGUucHJvdG90eXBlLmZldGNoX2RvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoX2Zsb3dfc2NhbGFyKCciJyl9LGUucHJvdG90eXBlLmZldGNoX2Zsb3dfc2NhbGFyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNhdmVfcG9zc2libGVfc2ltcGxlX2tleSgpLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMSx0aGlzLnRva2Vucy5wdXNoKHRoaXMuc2Nhbl9mbG93X3NjYWxhcihlKSl9LGUucHJvdG90eXBlLmZldGNoX3BsYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCksdGhpcy5hbGxvd19zaW1wbGVfa2V5PSExLHRoaXMudG9rZW5zLnB1c2godGhpcy5zY2FuX3BsYWluKCkpfSxlLnByb3RvdHlwZS5jaGVja19kaXJlY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuY29sdW1ufSxlLnByb3RvdHlwZS5jaGVja19kb2N1bWVudF9zdGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiAwPT09dGhpcy5jb2x1bW4mJiItLS0iPT09dGhpcy5wcmVmaXgoMykmJihlPXRoaXMucGVlaygzKSx1LmNhbGwobitjKyJcMCIsZSk+PTApfSxlLnByb3RvdHlwZS5jaGVja19kb2N1bWVudF9lbmQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gMD09PXRoaXMuY29sdW1uJiYiLi4uIj09PXRoaXMucHJlZml4KDMpJiYoZT10aGlzLnBlZWsoMyksdS5jYWxsKG4rYysiXDAiLGUpPj0wKX0sZS5wcm90b3R5cGUuY2hlY2tfYmxvY2tfZW50cnk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLnBlZWsoMSksdS5jYWxsKG4rYysiXDAiLGUpPj0wfSxlLnByb3RvdHlwZS5jaGVja19rZXk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gMCE9PXRoaXMuZmxvd19sZXZlbHx8KGU9dGhpcy5wZWVrKDEpLHUuY2FsbChuK2MrIlwwIixlKT49MCl9LGUucHJvdG90eXBlLmNoZWNrX3ZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIDAhPT10aGlzLmZsb3dfbGV2ZWx8fChlPXRoaXMucGVlaygxKSx1LmNhbGwobitjKyJcMCIsZSk+PTApfSxlLnByb3RvdHlwZS5jaGVja19wbGFpbj1mdW5jdGlvbigpe3ZhciBlLHQ7cmV0dXJuIGU9dGhpcy5wZWVrKCksdS5jYWxsKG4rYysiXDAtPzosW117fSMmKiF8PidcIiVAYCIsZSk8MHx8KHQ9dGhpcy5wZWVrKDEpLHUuY2FsbChuK2MrIlwwIix0KTwwJiYoIi0iPT09ZXx8MD09PXRoaXMuZmxvd19sZXZlbCYmdS5jYWxsKCI/OiIsZSk+PTApKX0sZS5wcm90b3R5cGUuc2Nhbl90b19uZXh0X3Rva2VuPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2ZvcigwPT09dGhpcy5pbmRleCYmIlx1ZmVmZiI9PT10aGlzLnBlZWsoKSYmdGhpcy5mb3J3YXJkKCksZT0hMSxyPVtdOyFlOyl7Zm9yKDsiICI9PT10aGlzLnBlZWsoKTspdGhpcy5mb3J3YXJkKCk7aWYoIiMiPT09dGhpcy5wZWVrKCkpZm9yKDt0PXRoaXMucGVlaygpLHUuY2FsbChuKyJcMCIsdCk8MDspdGhpcy5mb3J3YXJkKCk7dGhpcy5zY2FuX2xpbmVfYnJlYWsoKT8wPT09dGhpcy5mbG93X2xldmVsP3IucHVzaCh0aGlzLmFsbG93X3NpbXBsZV9rZXk9ITApOnIucHVzaCh2b2lkIDApOnIucHVzaChlPSEwKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUuc2Nhbl9kaXJlY3RpdmU9ZnVuY3Rpb24oKXt2YXIgZSx0LHIscyxpO2lmKHM9dGhpcy5nZXRfbWFyaygpLHRoaXMuZm9yd2FyZCgpLHQ9dGhpcy5zY2FuX2RpcmVjdGl2ZV9uYW1lKHMpLGk9bnVsbCwiWUFNTCI9PT10KWk9dGhpcy5zY2FuX3lhbWxfZGlyZWN0aXZlX3ZhbHVlKHMpLGU9dGhpcy5nZXRfbWFyaygpO2Vsc2UgaWYoIlRBRyI9PT10KWk9dGhpcy5zY2FuX3RhZ19kaXJlY3RpdmVfdmFsdWUocyksZT10aGlzLmdldF9tYXJrKCk7ZWxzZSBmb3IoZT10aGlzLmdldF9tYXJrKCk7cj10aGlzLnBlZWsoKSx1LmNhbGwobisiXDAiLHIpPDA7KXRoaXMuZm9yd2FyZCgpO3JldHVybiB0aGlzLnNjYW5fZGlyZWN0aXZlX2lnbm9yZWRfbGluZShzKSxuZXcgby5EaXJlY3RpdmVUb2tlbih0LGkscyxlKX0sZS5wcm90b3R5cGUuc2Nhbl9kaXJlY3RpdmVfbmFtZT1mdW5jdGlvbihlKXt2YXIgcixvLHM7Zm9yKG89MCxyPXRoaXMucGVlayhvKTsiMCI8PXImJnI8PSI5Inx8IkEiPD1yJiZyPD0iWiJ8fCJhIjw9ciYmcjw9InoifHx1LmNhbGwoIi1fIixyKT49MDspbysrLHI9dGhpcy5wZWVrKG8pO2lmKDA9PT1vKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLGUsImV4cGVjdGVkIGFscGhhbnVtZXJpYyBvciBudW1lcmljIGNoYXJhY3RlciBidXQgZm91bmQgIityLHRoaXMuZ2V0X21hcmsoKSk7aWYocz10aGlzLnByZWZpeChvKSx0aGlzLmZvcndhcmQobykscj10aGlzLnBlZWsoKSx1LmNhbGwobisiXDAgIixyKTwwKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLGUsImV4cGVjdGVkIGFscGhhbnVtZXJpYyBvciBudW1lcmljIGNoYXJhY3RlciBidXQgZm91bmQgIityLHRoaXMuZ2V0X21hcmsoKSk7cmV0dXJuIHN9LGUucHJvdG90eXBlLnNjYW5feWFtbF9kaXJlY3RpdmVfdmFsdWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciByLG8sczsiICI9PT10aGlzLnBlZWsoKTspdGhpcy5mb3J3YXJkKCk7aWYocj10aGlzLnNjYW5feWFtbF9kaXJlY3RpdmVfbnVtYmVyKGUpLCIuIiE9PXRoaXMucGVlaygpKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLGUsImV4cGVjdGVkIGEgZGlnaXQgb3IgJy4nIGJ1dCBmb3VuZCAiK3RoaXMucGVlaygpLHRoaXMuZ2V0X21hcmsoKSk7aWYodGhpcy5mb3J3YXJkKCksbz10aGlzLnNjYW5feWFtbF9kaXJlY3RpdmVfbnVtYmVyKGUpLHM9dGhpcy5wZWVrKCksdS5jYWxsKG4rIlwwICIscyk8MCl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgZGlyZWN0aXZlIixlLCJleHBlY3RlZCBhIGRpZ2l0IG9yICcgJyBidXQgZm91bmQgIit0aGlzLnBlZWsoKSx0aGlzLmdldF9tYXJrKCkpO3JldHVybltyLG9dfSxlLnByb3RvdHlwZS5zY2FuX3lhbWxfZGlyZWN0aXZlX251bWJlcj1mdW5jdGlvbihlKXt2YXIgbixyLG8scztpZighKCIwIjw9KG49dGhpcy5wZWVrKCkpJiZuPD0iOSIpKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLGUsImV4cGVjdGVkIGEgZGlnaXQgYnV0IGZvdW5kICIrbix0aGlzLmdldF9tYXJrKCkpO2ZvcihyPTA7IjAiPD0obz10aGlzLnBlZWsocikpJiZvPD0iOSI7KXIrKztyZXR1cm4gcz1wYXJzZUludCh0aGlzLnByZWZpeChyKSksdGhpcy5mb3J3YXJkKHIpLHN9LGUucHJvdG90eXBlLnNjYW5fdGFnX2RpcmVjdGl2ZV92YWx1ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbjsiICI9PT10aGlzLnBlZWsoKTspdGhpcy5mb3J3YXJkKCk7Zm9yKHQ9dGhpcy5zY2FuX3RhZ19kaXJlY3RpdmVfaGFuZGxlKGUpOyIgIj09PXRoaXMucGVlaygpOyl0aGlzLmZvcndhcmQoKTtyZXR1cm4gbj10aGlzLnNjYW5fdGFnX2RpcmVjdGl2ZV9wcmVmaXgoZSksW3Qsbl19LGUucHJvdG90eXBlLnNjYW5fdGFnX2RpcmVjdGl2ZV9oYW5kbGU9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihyPXRoaXMuc2Nhbl90YWdfaGFuZGxlKCJkaXJlY3RpdmUiLGUpLCIgIiE9PShuPXRoaXMucGVlaygpKSl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgZGlyZWN0aXZlIixlLCJleHBlY3RlZCAnICcgYnV0IGZvdW5kICIrbix0aGlzLmdldF9tYXJrKCkpO3JldHVybiByfSxlLnByb3RvdHlwZS5zY2FuX3RhZ19kaXJlY3RpdmVfcHJlZml4PWZ1bmN0aW9uKGUpe3ZhciByLG87aWYobz10aGlzLnNjYW5fdGFnX3VyaSgiZGlyZWN0aXZlIixlKSxyPXRoaXMucGVlaygpLHUuY2FsbChuKyJcMCAiLHIpPDApdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRpcmVjdGl2ZSIsZSwiZXhwZWN0ZWQgJyAnIGJ1dCBmb3VuZCAiK3IsdGhpcy5nZXRfbWFyaygpKTtyZXR1cm4gb30sZS5wcm90b3R5cGUuc2Nhbl9kaXJlY3RpdmVfaWdub3JlZF9saW5lPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcixvOyIgIj09PXRoaXMucGVlaygpOyl0aGlzLmZvcndhcmQoKTtpZigiIyI9PT10aGlzLnBlZWsoKSlmb3IoO289dGhpcy5wZWVrKCksdS5jYWxsKG4rIlwwIixvKTwwOyl0aGlzLmZvcndhcmQoKTtpZihyPXRoaXMucGVlaygpLHUuY2FsbChuKyJcMCIscik8MCl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgZGlyZWN0aXZlIixlLCJleHBlY3RlZCBhIGNvbW1lbnQgb3IgYSBsaW5lIGJyZWFrIGJ1dCBmb3VuZCAiK3IsdGhpcy5nZXRfbWFyaygpKTtyZXR1cm4gdGhpcy5zY2FuX2xpbmVfYnJlYWsoKX0sZS5wcm90b3R5cGUuc2Nhbl9hbmNob3I9ZnVuY3Rpb24oZSl7dmFyIHIsbyxzLGksYSxsO2ZvcihhPXRoaXMuZ2V0X21hcmsoKSxvPXRoaXMucGVlaygpLGk9IioiPT09bz8iYWxpYXMiOiJhbmNob3IiLHRoaXMuZm9yd2FyZCgpLHM9MCxyPXRoaXMucGVlayhzKTsiMCI8PXImJnI8PSI5Inx8IkEiPD1yJiZyPD0iWiJ8fCJhIjw9ciYmcjw9InoifHx1LmNhbGwoIi1fIixyKT49MDspcysrLHI9dGhpcy5wZWVrKHMpO2lmKDA9PT1zKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYW4gIitpLGEsImV4cGVjdGVkIGFscGhhYmV0aWMgb3IgbnVtZXJpYyBjaGFyYWN0ZXIgYnV0IGZvdW5kICciK3IrIiciLHRoaXMuZ2V0X21hcmsoKSk7aWYobD10aGlzLnByZWZpeChzKSx0aGlzLmZvcndhcmQocykscj10aGlzLnBlZWsoKSx1LmNhbGwobitjKyJcMD86LF19JUBgIixyKTwwKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYW4gIitpLGEsImV4cGVjdGVkIGFscGhhYmV0aWMgb3IgbnVtZXJpYyBjaGFyYWN0ZXIgYnV0IGZvdW5kICciK3IrIiciLHRoaXMuZ2V0X21hcmsoKSk7cmV0dXJuIG5ldyBlKGwsYSx0aGlzLmdldF9tYXJrKCkpfSxlLnByb3RvdHlwZS5zY2FuX3RhZz1mdW5jdGlvbigpe3ZhciBlLHIscyxpLGEsbDtpZihpPXRoaXMuZ2V0X21hcmsoKSwiPCI9PT0oZT10aGlzLnBlZWsoMSkpKXtpZihyPW51bGwsdGhpcy5mb3J3YXJkKDIpLGE9dGhpcy5zY2FuX3RhZ191cmkoInRhZyIsaSksIj4iIT09dGhpcy5wZWVrKCkpdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBwYXJzaW5nIGEgdGFnIixpLCJleHBlY3RlZCAnPicgYnV0IGZvdW5kICIrdGhpcy5wZWVrKCksdGhpcy5nZXRfbWFyaygpKTt0aGlzLmZvcndhcmQoKX1lbHNlIGlmKHUuY2FsbChuK2MrIlwwIixlKT49MClyPW51bGwsYT0iISIsdGhpcy5mb3J3YXJkKCk7ZWxzZXtmb3Iocz0xLGw9ITE7dS5jYWxsKG4rIlwwICIsZSk8MDspe2lmKCIhIj09PWUpe2w9ITA7YnJlYWt9cysrLGU9dGhpcy5wZWVrKHMpfWw/cj10aGlzLnNjYW5fdGFnX2hhbmRsZSgidGFnIixpKToocj0iISIsdGhpcy5mb3J3YXJkKCkpLGE9dGhpcy5zY2FuX3RhZ191cmkoInRhZyIsaSl9aWYoZT10aGlzLnBlZWsoKSx1LmNhbGwobisiXDAgIixlKTwwKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSB0YWciLGksImV4cGVjdGVkICcgJyBidXQgZm91bmQgIitlLHRoaXMuZ2V0X21hcmsoKSk7cmV0dXJuIG5ldyBvLlRhZ1Rva2VuKFtyLGFdLGksdGhpcy5nZXRfbWFyaygpKX0sZS5wcm90b3R5cGUuc2Nhbl9ibG9ja19zY2FsYXI9ZnVuY3Rpb24oZSl7dmFyIHQscixpLGEsbCxjLGQsXyxwLGYsbSxoLGcsYixFLHksdixULEEsQztmb3IobD0iPiI9PT1lLGk9W10sQz10aGlzLmdldF9tYXJrKCksdGhpcy5mb3J3YXJkKCksZz10aGlzLnNjYW5fYmxvY2tfc2NhbGFyX2luZGljYXRvcnMoQykscj1nWzBdLGM9Z1sxXSx0aGlzLnNjYW5fYmxvY2tfc2NhbGFyX2lnbm9yZWRfbGluZShDKSxoPXRoaXMuaW5kZW50KzEsaDwxJiYoaD0xKSxudWxsPT1jPyhiPXRoaXMuc2Nhbl9ibG9ja19zY2FsYXJfaW5kZW50YXRpb24oKSx0PWJbMF0sbT1iWzFdLGE9YlsyXSxkPU1hdGgubWF4KGgsbSkpOihkPWgrYy0xLEU9dGhpcy5zY2FuX2Jsb2NrX3NjYWxhcl9icmVha3MoZCksdD1FWzBdLGE9RVsxXSksZj0iIjt0aGlzLmNvbHVtbj09PWQmJiJcMCIhPT10aGlzLnBlZWsoKTspe2ZvcihpPWkuY29uY2F0KHQpLHk9dGhpcy5wZWVrKCksXz11LmNhbGwoIiBcdCIseSk8MCxwPTA7dj10aGlzLnBlZWsocCksdS5jYWxsKG4rIlwwIix2KTwwOylwKys7aWYoaS5wdXNoKHRoaXMucHJlZml4KHApKSx0aGlzLmZvcndhcmQocCksZj10aGlzLnNjYW5fbGluZV9icmVhaygpLFQ9dGhpcy5zY2FuX2Jsb2NrX3NjYWxhcl9icmVha3MoZCksdD1UWzBdLGE9VFsxXSx0aGlzLmNvbHVtbiE9PWR8fCJcMCI9PT10aGlzLnBlZWsoKSlicmVhaztsJiYiXG4iPT09ZiYmXyYmKEE9dGhpcy5wZWVrKCksdS5jYWxsKCIgXHQiLEEpPDApP3MuaXNfZW1wdHkodCkmJmkucHVzaCgiICIpOmkucHVzaChmKX1yZXR1cm4hMSE9PXImJmkucHVzaChmKSwhMD09PXImJihpPWkuY29uY2F0KHQpKSxuZXcgby5TY2FsYXJUb2tlbihpLmpvaW4oIiIpLCExLEMsYSxlKX0sZS5wcm90b3R5cGUuc2Nhbl9ibG9ja19zY2FsYXJfaW5kaWNhdG9ycz1mdW5jdGlvbihlKXt2YXIgcixvLHM7aWYobz1udWxsLHM9bnVsbCxyPXRoaXMucGVlaygpLHUuY2FsbCgiKy0iLHIpPj0wKXtpZihvPSIrIj09PXIsdGhpcy5mb3J3YXJkKCkscj10aGlzLnBlZWsoKSx1LmNhbGwoaSxyKT49MCl7aWYoMD09PShzPXBhcnNlSW50KHIpKSl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgYmxvY2sgc2NhbGFyIixlLCJleHBlY3RlZCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaW4gdGhlIHJhbmdlIDEtOSBidXQgZm91bmQgMCIsdGhpcy5nZXRfbWFyaygpKTt0aGlzLmZvcndhcmQoKX19ZWxzZSBpZih1LmNhbGwoaSxyKT49MCl7aWYoMD09PShzPXBhcnNlSW50KHIpKSl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgYmxvY2sgc2NhbGFyIixlLCJleHBlY3RlZCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaW4gdGhlIHJhbmdlIDEtOSBidXQgZm91bmQgMCIsdGhpcy5nZXRfbWFyaygpKTt0aGlzLmZvcndhcmQoKSxyPXRoaXMucGVlaygpLHUuY2FsbCgiKy0iLHIpPj0wJiYobz0iKyI9PT1yLHRoaXMuZm9yd2FyZCgpKX1pZihyPXRoaXMucGVlaygpLHUuY2FsbChuKyJcMCAiLHIpPDApdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGJsb2NrIHNjYWxhciIsZSwiZXhwZWN0ZWQgY2hvbXBpbmcgb3IgaW5kZW50YXRpb24gaW5kaWNhdG9ycywgYnV0IGZvdW5kICIrcix0aGlzLmdldF9tYXJrKCkpO3JldHVybltvLHNdfSxlLnByb3RvdHlwZS5zY2FuX2Jsb2NrX3NjYWxhcl9pZ25vcmVkX2xpbmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciByLG87IiAiPT09dGhpcy5wZWVrKCk7KXRoaXMuZm9yd2FyZCgpO2lmKCIjIj09PXRoaXMucGVlaygpKWZvcig7bz10aGlzLnBlZWsoKSx1LmNhbGwobisiXDAiLG8pPDA7KXRoaXMuZm9yd2FyZCgpO2lmKHI9dGhpcy5wZWVrKCksdS5jYWxsKG4rIlwwIixyKTwwKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBibG9jayBzY2FsYXIiLGUsImV4cGVjdGVkIGEgY29tbWVudCBvciBhIGxpbmUgYnJlYWsgYnV0IGZvdW5kICIrcix0aGlzLmdldF9tYXJrKCkpO3JldHVybiB0aGlzLnNjYW5fbGluZV9icmVhaygpfSxlLnByb3RvdHlwZS5zY2FuX2Jsb2NrX3NjYWxhcl9pbmRlbnRhdGlvbj1mdW5jdGlvbigpe3ZhciBlLHQscixvO2ZvcihlPVtdLHI9MCx0PXRoaXMuZ2V0X21hcmsoKTtvPXRoaXMucGVlaygpLHUuY2FsbChuKyIgIixvKT49MDspIiAiIT09dGhpcy5wZWVrKCk/KGUucHVzaCh0aGlzLnNjYW5fbGluZV9icmVhaygpKSx0PXRoaXMuZ2V0X21hcmsoKSk6KHRoaXMuZm9yd2FyZCgpLHRoaXMuY29sdW1uPnImJihyPXRoaXMuY29sdW1uKSk7cmV0dXJuW2Uscix0XX0sZS5wcm90b3R5cGUuc2Nhbl9ibG9ja19zY2FsYXJfYnJlYWtzPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbztmb3IodD1bXSxyPXRoaXMuZ2V0X21hcmsoKTt0aGlzLmNvbHVtbjxlJiYiICI9PT10aGlzLnBlZWsoKTspdGhpcy5mb3J3YXJkKCk7Zm9yKDtvPXRoaXMucGVlaygpLHUuY2FsbChuLG8pPj0wOylmb3IodC5wdXNoKHRoaXMuc2Nhbl9saW5lX2JyZWFrKCkpLHI9dGhpcy5nZXRfbWFyaygpO3RoaXMuY29sdW1uPGUmJiIgIj09PXRoaXMucGVlaygpOyl0aGlzLmZvcndhcmQoKTtyZXR1cm5bdCxyXX0sZS5wcm90b3R5cGUuc2Nhbl9mbG93X3NjYWxhcj1mdW5jdGlvbihlKXt2YXIgdCxuLHIscztmb3Iobj0nIic9PT1lLHQ9W10scz10aGlzLmdldF9tYXJrKCkscj10aGlzLnBlZWsoKSx0aGlzLmZvcndhcmQoKSx0PXQuY29uY2F0KHRoaXMuc2Nhbl9mbG93X3NjYWxhcl9ub25fc3BhY2VzKG4scykpO3RoaXMucGVlaygpIT09cjspdD10LmNvbmNhdCh0aGlzLnNjYW5fZmxvd19zY2FsYXJfc3BhY2VzKG4scykpLHQ9dC5jb25jYXQodGhpcy5zY2FuX2Zsb3dfc2NhbGFyX25vbl9zcGFjZXMobixzKSk7cmV0dXJuIHRoaXMuZm9yd2FyZCgpLG5ldyBvLlNjYWxhclRva2VuKHQuam9pbigiIiksITEscyx0aGlzLmdldF9tYXJrKCksZSl9LGUucHJvdG90eXBlLnNjYW5fZmxvd19zY2FsYXJfbm9uX3NwYWNlcz1mdW5jdGlvbihlLHIpe3ZhciBvLHMsYSxsLHAsZixtLGgsZztmb3Iocz1bXTs7KXtmb3IoZj0wO209dGhpcy5wZWVrKGYpLHUuY2FsbChuK2MrIidcIlxcXDAiLG0pPDA7KWYrKztpZigwIT09ZiYmKHMucHVzaCh0aGlzLnByZWZpeChmKSksdGhpcy5mb3J3YXJkKGYpKSxvPXRoaXMucGVlaygpLGV8fCInIiE9PW98fCInIiE9PXRoaXMucGVlaygxKSlpZihlJiYiJyI9PT1vfHwhZSYmdS5jYWxsKCciXFwnLG8pPj0wKXMucHVzaChvKSx0aGlzLmZvcndhcmQoKTtlbHNle2lmKCFlfHwiXFwiIT09bylyZXR1cm4gcztpZih0aGlzLmZvcndhcmQoKSwobz10aGlzLnBlZWsoKSlpbiBfKXMucHVzaChfW29dKSx0aGlzLmZvcndhcmQoKTtlbHNlIGlmKG8gaW4gZCl7Zm9yKGY9ZFtvXSx0aGlzLmZvcndhcmQoKSxwPWw9MCxoPWY7MDw9aD9sPGg6bD5oO3A9MDw9aD8rK2w6LS1sKWlmKGc9dGhpcy5wZWVrKHApLHUuY2FsbChpKyJBQkNERUZhYmNkZWYiLGcpPDApdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRvdWJsZS1xdW90ZWQgc2NhbGFyIixyLCJleHBlY3RlZCBlc2NhcGUgc2VxdWVuY2Ugb2YgIitmKyIgaGV4YWRlY2ltYWwgbnVtYmVycywgYnV0IGZvdW5kICIrdGhpcy5wZWVrKHApLHRoaXMuZ2V0X21hcmsoKSk7YT1wYXJzZUludCh0aGlzLnByZWZpeChmKSwxNikscy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpLHRoaXMuZm9yd2FyZChmKX1lbHNle2lmKCEodS5jYWxsKG4sbyk+PTApKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkb3VibGUtcXVvdGVkIHNjYWxhciIsciwiZm91bmQgdW5rbm93biBlc2NhcGUgY2hhcmFjdGVyICIrbyx0aGlzLmdldF9tYXJrKCkpO3RoaXMuc2Nhbl9saW5lX2JyZWFrKCkscz1zLmNvbmNhdCh0aGlzLnNjYW5fZmxvd19zY2FsYXJfYnJlYWtzKGUscikpfX1lbHNlIHMucHVzaCgiJyIpLHRoaXMuZm9yd2FyZCgyKX19LGUucHJvdG90eXBlLnNjYW5fZmxvd19zY2FsYXJfc3BhY2VzPWZ1bmN0aW9uKGUscil7dmFyIG8scyxpLGEsbCxkLF87Zm9yKGk9W10sYT0wO2Q9dGhpcy5wZWVrKGEpLHUuY2FsbChjLGQpPj0wOylhKys7aWYoXz10aGlzLnByZWZpeChhKSx0aGlzLmZvcndhcmQoYSksIlwwIj09PShzPXRoaXMucGVlaygpKSl0aHJvdyBuZXcgdC5TY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgcXVvdGVkIHNjYWxhciIsciwiZm91bmQgdW5leHBlY3RlZCBlbmQgb2Ygc3RyZWFtIix0aGlzLmdldF9tYXJrKCkpO3JldHVybiB1LmNhbGwobixzKT49MD8obD10aGlzLnNjYW5fbGluZV9icmVhaygpLG89dGhpcy5zY2FuX2Zsb3dfc2NhbGFyX2JyZWFrcyhlLHIpLCJcbiIhPT1sP2kucHVzaChsKTowPT09by5sZW5ndGgmJmkucHVzaCgiICIpLGk9aS5jb25jYXQobykpOmkucHVzaChfKSxpfSxlLnByb3RvdHlwZS5zY2FuX2Zsb3dfc2NhbGFyX2JyZWFrcz1mdW5jdGlvbihlLHIpe3ZhciBvLHMsaSxhLGw7Zm9yKG89W107Oyl7aWYoIi0tLSI9PT0ocz10aGlzLnByZWZpeCgzKSl8fCIuLi4iPT09cyYmKGk9dGhpcy5wZWVrKDMpLHUuY2FsbChuK2MrIlwwIixpKT49MCkpdGhyb3cgbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIHF1b3RlZCBzY2FsYXIiLHIsImZvdW5kIHVuZXhwZWN0ZWQgZG9jdW1lbnQgc2VwYXJhdG9yIix0aGlzLmdldF9tYXJrKCkpO2Zvcig7YT10aGlzLnBlZWsoKSx1LmNhbGwoYyxhKT49MDspdGhpcy5mb3J3YXJkKCk7aWYobD10aGlzLnBlZWsoKSwhKHUuY2FsbChuLGwpPj0wKSlyZXR1cm4gbztvLnB1c2godGhpcy5zY2FuX2xpbmVfYnJlYWsoKSl9fSxlLnByb3RvdHlwZS5zY2FuX3BsYWluPWZ1bmN0aW9uKCl7dmFyIGUscixzLGksYSxsLGQsXyxwO2ZvcihyPVtdLHA9cz10aGlzLmdldF9tYXJrKCksaT10aGlzLmluZGVudCsxLF89W107Oyl7aWYoYT0wLCIjIj09PXRoaXMucGVlaygpKWJyZWFrO2Zvcig7Oyl7aWYoZT10aGlzLnBlZWsoYSksdS5jYWxsKG4rYysiXDAiLGUpPj0wfHwwPT09dGhpcy5mbG93X2xldmVsJiYiOiI9PT1lJiYobD10aGlzLnBlZWsoYSsxKSx1LmNhbGwobitjKyJcMCIsbCk+PTApfHwwIT09dGhpcy5mbG93X2xldmVsJiZ1LmNhbGwoIiw6P1tde30iLGUpPj0wKWJyZWFrO2ErK31pZigwIT09dGhpcy5mbG93X2xldmVsJiYiOiI9PT1lJiYoZD10aGlzLnBlZWsoYSsxKSx1LmNhbGwobitjKyJcMCxbXXt9IixkKTwwKSl0aHJvdyB0aGlzLmZvcndhcmQoYSksbmV3IHQuU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIHBsYWluIHNjYWxhciIscCwiZm91bmQgdW5leHBlY3RlZCAnOiciLHRoaXMuZ2V0X21hcmsoKSwiUGxlYXNlIGNoZWNrIGh0dHA6Ly9weXlhbWwub3JnL3dpa2kvWUFNTENvbG9uSW5GbG93Q29udGV4dCIpO2lmKDA9PT1hKWJyZWFrO2lmKHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMSxyPXIuY29uY2F0KF8pLHIucHVzaCh0aGlzLnByZWZpeChhKSksdGhpcy5mb3J3YXJkKGEpLHM9dGhpcy5nZXRfbWFyaygpLG51bGw9PShfPXRoaXMuc2Nhbl9wbGFpbl9zcGFjZXMoaSxwKSl8fDA9PT1fLmxlbmd0aHx8IiMiPT09dGhpcy5wZWVrKCl8fDA9PT10aGlzLmZsb3dfbGV2ZWwmJnRoaXMuY29sdW1uPGkpYnJlYWt9cmV0dXJuIG5ldyBvLlNjYWxhclRva2VuKHIuam9pbigiIiksITAscCxzKX0sZS5wcm90b3R5cGUuc2Nhbl9wbGFpbl9zcGFjZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcixvLHMsaSxhLGwsZCxfLHAsZixtO2ZvcihzPVtdLGk9MDtkPXRoaXMucGVlayhpKSx1LmNhbGwoIiAiLGQpPj0wOylpKys7aWYobT10aGlzLnByZWZpeChpKSx0aGlzLmZvcndhcmQoaSksbz10aGlzLnBlZWsoKSx1LmNhbGwobixvKT49MCl7aWYoYT10aGlzLnNjYW5fbGluZV9icmVhaygpLHRoaXMuYWxsb3dfc2ltcGxlX2tleT0hMCwiLS0tIj09PShsPXRoaXMucHJlZml4KDMpKXx8Ii4uLiI9PT1sJiYoXz10aGlzLnBlZWsoMyksdS5jYWxsKG4rYysiXDAiLF8pPj0wKSlyZXR1cm47Zm9yKHI9W107Zj10aGlzLnBlZWsoKSx1LmNhbGwobisiICIsZik+PTA7KWlmKCIgIj09PXRoaXMucGVlaygpKXRoaXMuZm9yd2FyZCgpO2Vsc2UgaWYoci5wdXNoKHRoaXMuc2Nhbl9saW5lX2JyZWFrKCkpLCItLS0iPT09KGw9dGhpcy5wcmVmaXgoMykpfHwiLi4uIj09PWwmJihwPXRoaXMucGVlaygzKSx1LmNhbGwobitjKyJcMCIscCk+PTApKXJldHVybjsiXG4iIT09YT9zLnB1c2goYSk6MD09PXIubGVuZ3RoJiZzLnB1c2goIiAiKSxzPXMuY29uY2F0KHIpfWVsc2UgbSYmcy5wdXNoKG0pO3JldHVybiBzfSxlLnByb3RvdHlwZS5zY2FuX3RhZ19oYW5kbGU9ZnVuY3Rpb24oZSxuKXt2YXIgcixvLHM7aWYoIiEiIT09KHI9dGhpcy5wZWVrKCkpKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSAiK2UsbiwiZXhwZWN0ZWQgJyEnIGJ1dCBmb3VuZCAiK3IsdGhpcy5nZXRfbWFyaygpKTtpZihvPTEsIiAiIT09KHI9dGhpcy5wZWVrKG8pKSl7Zm9yKDsiMCI8PXImJnI8PSI5Inx8IkEiPD1yJiZyPD0iWiJ8fCJhIjw9ciYmcjw9InoifHx1LmNhbGwoIi1fIixyKT49MDspbysrLHI9dGhpcy5wZWVrKG8pO2lmKCIhIiE9PXIpdGhyb3cgdGhpcy5mb3J3YXJkKG8pLG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSAiK2UsbiwiZXhwZWN0ZWQgJyEnIGJ1dCBmb3VuZCAiK3IsdGhpcy5nZXRfbWFyaygpKTtvKyt9cmV0dXJuIHM9dGhpcy5wcmVmaXgobyksdGhpcy5mb3J3YXJkKG8pLHN9LGUucHJvdG90eXBlLnNjYW5fdGFnX3VyaT1mdW5jdGlvbihlLG4pe3ZhciByLG8scztmb3Iobz1bXSxzPTAscj10aGlzLnBlZWsocyk7IjAiPD1yJiZyPD0iOSJ8fCJBIjw9ciYmcjw9IloifHwiYSI8PXImJnI8PSJ6Inx8dS5jYWxsKCItOy8/OkAmPSskLF8uIX4qJygpW10lIixyKT49MDspIiUiPT09cj8oby5wdXNoKHRoaXMucHJlZml4KHMpKSx0aGlzLmZvcndhcmQocykscz0wLG8ucHVzaCh0aGlzLnNjYW5fdXJpX2VzY2FwZXMoZSxuKSkpOnMrKyxyPXRoaXMucGVlayhzKTtpZigwIT09cyYmKG8ucHVzaCh0aGlzLnByZWZpeChzKSksdGhpcy5mb3J3YXJkKHMpLHM9MCksMD09PW8ubGVuZ3RoKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgcGFyc2luZyBhICIrZSxuLCJleHBlY3RlZCBVUkkgYnV0IGZvdW5kICIrcix0aGlzLmdldF9tYXJrKCkpO3JldHVybiBvLmpvaW4oIiIpfSxlLnByb3RvdHlwZS5zY2FuX3VyaV9lc2NhcGVzPWZ1bmN0aW9uKGUsbil7dmFyIHIsbyxzO2ZvcihyPVtdLHRoaXMuZ2V0X21hcmsoKTsiJSI9PT10aGlzLnBlZWsoKTspe2Zvcih0aGlzLmZvcndhcmQoKSxzPW89MDtvPD0yO3M9KytvKXRocm93IG5ldyB0LlNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSAiK2UsbiwiZXhwZWN0ZWQgVVJJIGVzY2FwZSBzZXF1ZW5jZSBvZiAyIGhleGFkZWNpbWFsIG51bWJlcnMgYnV0IGZvdW5kICIrdGhpcy5wZWVrKHMpLHRoaXMuZ2V0X21hcmsoKSk7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodGhpcy5wcmVmaXgoMiksMTYpKSksdGhpcy5mb3J3YXJkKDIpfXJldHVybiByLmpvaW4oIiIpfSxlLnByb3RvdHlwZS5zY2FuX2xpbmVfYnJlYWs9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLnBlZWsoKSx1LmNhbGwoIlxyXG7ChSIsZSk+PTA/KCJcclxuIj09PXRoaXMucHJlZml4KDIpP3RoaXMuZm9yd2FyZCgyKTp0aGlzLmZvcndhcmQoKSwiXG4iKTp1LmNhbGwoIlx1MjAyOFx1MjAyOSIsZSk+PTA/KHRoaXMuZm9yd2FyZCgpLGUpOiIifSxlfSgpfSkuY2FsbCh0aGlzKX0sIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3NlcmlhbGl6ZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbyxzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1mb3IodmFyIHIgaW4gdClpLmNhbGwodCxyKSYmKGVbcl09dFtyXSk7cmV0dXJuIG4ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUuX19zdXBlcl9fPXQucHJvdG90eXBlLGV9LGk9e30uaGFzT3duUHJvcGVydHk7dD1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9ldmVudHMuanMiKSxyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL25vZGVzLmpzIiksbz1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi91dGlsLmpzIiksZT1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9lcnJvcnMuanMiKS5ZQU1MRXJyb3IsdGhpcy5TZXJpYWxpemVyRXJyb3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHModCxlKSx0fShlKSx0aGlzLlNlcmlhbGl6ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0O3Q9bnVsbCE9ZT9lOnt9LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzLmV4cGxpY2l0X3N0YXJ0PXQuZXhwbGljaXRfc3RhcnQsdGhpcy5leHBsaWNpdF9lbmQ9dC5leHBsaWNpdF9lbmQsdGhpcy52ZXJzaW9uPXQudmVyc2lvbix0aGlzLnRhZ3M9dC50YWdzLHRoaXMuc2VyaWFsaXplZF9ub2Rlcz17fSx0aGlzLmFuY2hvcnM9e30sdGhpcy5sYXN0X2FuY2hvcl9pZD0wLHRoaXMuY2xvc2VkPW51bGx9cmV0dXJuIGUucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5jbG9zZWQpcmV0dXJuIHRoaXMuZW1pdChuZXcgdC5TdHJlYW1TdGFydEV2ZW50KHRoaXMuZW5jb2RpbmcpKSx0aGlzLmNsb3NlZD0hMTt0aHJvdyB0aGlzLmNsb3NlZD9uZXcgU2VyaWFsaXplckVycm9yKCJzZXJpYWxpemVyIGlzIGNsb3NlZCIpOm5ldyBTZXJpYWxpemVyRXJyb3IoInNlcmlhbGl6ZXIgaXMgYWxyZWFkeSBvcGVuIil9LGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMuY2xvc2VkKXRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IoInNlcmlhbGl6ZXIgaXMgbm90IG9wZW5lZCIpO2lmKCF0aGlzLmNsb3NlZClyZXR1cm4gdGhpcy5lbWl0KG5ldyB0LlN0cmVhbUVuZEV2ZW50KSx0aGlzLmNsb3NlZD0hMH0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKGUpe2lmKG51bGw9PT10aGlzLmNsb3NlZCl0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKCJzZXJpYWxpemVyIGlzIG5vdCBvcGVuZWQiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKCJzZXJpYWxpemVyIGlzIGNsb3NlZCIpO3JldHVybiBudWxsIT1lJiYodGhpcy5lbWl0KG5ldyB0LkRvY3VtZW50U3RhcnRFdmVudCh2b2lkIDAsdm9pZCAwLHRoaXMuZXhwbGljaXRfc3RhcnQsdGhpcy52ZXJzaW9uLHRoaXMudGFncykpLHRoaXMuYW5jaG9yX25vZGUoZSksdGhpcy5zZXJpYWxpemVfbm9kZShlKSx0aGlzLmVtaXQobmV3IHQuRG9jdW1lbnRFbmRFdmVudCh2b2lkIDAsdm9pZCAwLHRoaXMuZXhwbGljaXRfZW5kKSkpLHRoaXMuc2VyaWFsaXplZF9ub2Rlcz17fSx0aGlzLmFuY2hvcnM9e30sdGhpcy5sYXN0X2FuY2hvcl9pZD0wfSxlLnByb3RvdHlwZS5hbmNob3Jfbm9kZT1mdW5jdGlvbihlKXt2YXIgdCxuLG8scyxpLGEsbCx1LGMsZCxfLHAsZixtO2lmKGUudW5pcXVlX2lkIGluIHRoaXMuYW5jaG9ycylyZXR1cm4gbnVsbCE9KHQ9dGhpcy5hbmNob3JzKVt1PWUudW5pcXVlX2lkXT90W3VdOnRbdV09dGhpcy5nZW5lcmF0ZV9hbmNob3IoZSk7aWYodGhpcy5hbmNob3JzW2UudW5pcXVlX2lkXT1udWxsLGUgaW5zdGFuY2VvZiByLlNlcXVlbmNlTm9kZSl7Zm9yKGM9ZS52YWx1ZSxwPVtdLG49MCxhPWMubGVuZ3RoO248YTtuKyspbz1jW25dLHAucHVzaCh0aGlzLmFuY2hvcl9ub2RlKG8pKTtyZXR1cm4gcH1pZihlIGluc3RhbmNlb2Ygci5NYXBwaW5nTm9kZSl7Zm9yKGQ9ZS52YWx1ZSxmPVtdLHM9MCxsPWQubGVuZ3RoO3M8bDtzKyspXz1kW3NdLGk9X1swXSxtPV9bMV0sdGhpcy5hbmNob3Jfbm9kZShpKSxmLnB1c2godGhpcy5hbmNob3Jfbm9kZShtKSk7cmV0dXJuIGZ9fSxlLnByb3RvdHlwZS5nZW5lcmF0ZV9hbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuImlkIitvLnBhZF9sZWZ0KCsrdGhpcy5sYXN0X2FuY2hvcl9pZCwiMCIsNCl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZV9ub2RlPWZ1bmN0aW9uKGUsbixvKXt2YXIgcyxpLGEsbCx1LGMsZCxfLHAsZixtLGgsZyxiO2lmKHM9dGhpcy5hbmNob3JzW2UudW5pcXVlX2lkXSxlLnVuaXF1ZV9pZCBpbiB0aGlzLnNlcmlhbGl6ZWRfbm9kZXMpcmV0dXJuIHRoaXMuZW1pdChuZXcgdC5BbGlhc0V2ZW50KHMpKTtpZih0aGlzLnNlcmlhbGl6ZWRfbm9kZXNbZS51bmlxdWVfaWRdPSEwLHRoaXMuZGVzY2VuZF9yZXNvbHZlcihuLG8pLGUgaW5zdGFuY2VvZiByLlNjYWxhck5vZGUpYT10aGlzLnJlc29sdmUoci5TY2FsYXJOb2RlLGUudmFsdWUsWyEwLCExXSksaT10aGlzLnJlc29sdmUoci5TY2FsYXJOb2RlLGUudmFsdWUsWyExLCEwXSksdT1bZS50YWc9PT1hLGUudGFnPT09aV0sdGhpcy5lbWl0KG5ldyB0LlNjYWxhckV2ZW50KHMsZS50YWcsdSxlLnZhbHVlLHZvaWQgMCx2b2lkIDAsZS5zdHlsZSkpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIHIuU2VxdWVuY2VOb2RlKXtmb3IodT1lLnRhZz09PXRoaXMucmVzb2x2ZShyLlNlcXVlbmNlTm9kZSxlLnZhbHVlLCEwKSx0aGlzLmVtaXQobmV3IHQuU2VxdWVuY2VTdGFydEV2ZW50KHMsZS50YWcsdSx2b2lkIDAsdm9pZCAwLGUuZmxvd19zdHlsZSkpLG09ZS52YWx1ZSxvPWw9MCxwPW0ubGVuZ3RoO2w8cDtvPSsrbCljPW1bb10sdGhpcy5zZXJpYWxpemVfbm9kZShjLGUsbyk7dGhpcy5lbWl0KG5ldyB0LlNlcXVlbmNlRW5kRXZlbnQpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIHIuTWFwcGluZ05vZGUpe2Zvcih1PWUudGFnPT09dGhpcy5yZXNvbHZlKHIuTWFwcGluZ05vZGUsZS52YWx1ZSwhMCksdGhpcy5lbWl0KG5ldyB0Lk1hcHBpbmdTdGFydEV2ZW50KHMsZS50YWcsdSx2b2lkIDAsdm9pZCAwLGUuZmxvd19zdHlsZSkpLGg9ZS52YWx1ZSxkPTAsZj1oLmxlbmd0aDtkPGY7ZCsrKWc9aFtkXSxfPWdbMF0sYj1nWzFdLHRoaXMuc2VyaWFsaXplX25vZGUoXyxlLG51bGwpLHRoaXMuc2VyaWFsaXplX25vZGUoYixlLF8pO3RoaXMuZW1pdChuZXcgdC5NYXBwaW5nRW5kRXZlbnQpfXJldHVybiB0aGlzLmFzY2VuZF9yZXNvbHZlcigpfSxlfSgpfSkuY2FsbCh0aGlzKX0sIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3Rva2Vucy5qcyI6ZnVuY3Rpb24oZSx0KXsoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlLG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciBvIGluIG4pdC5jYWxsKG4sbykmJihlW29dPW5bb10pO3JldHVybiByLnByb3RvdHlwZT1uLnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgcixlLl9fc3VwZXJfXz1uLnByb3RvdHlwZSxlfSx0PXt9Lmhhc093blByb3BlcnR5O3RoaXMuVG9rZW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdGFydF9tYXJrPWUsdGhpcy5lbmRfbWFyaz10fXJldHVybiBlfSgpLHRoaXMuRGlyZWN0aXZlVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbixyKXt0aGlzLm5hbWU9ZSx0aGlzLnZhbHVlPXQsdGhpcy5zdGFydF9tYXJrPW4sdGhpcy5lbmRfbWFyaz1yfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuaWQ9IjxkaXJlY3RpdmU+IixufSh0aGlzLlRva2VuKSx0aGlzLkRvY3VtZW50U3RhcnRUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSI8ZG9jdW1lbnQgc3RhcnQ+IixufSh0aGlzLlRva2VuKSx0aGlzLkRvY3VtZW50RW5kVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iPGRvY3VtZW50IGVuZD4iLG59KHRoaXMuVG9rZW4pLHRoaXMuU3RyZWFtU3RhcnRUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsdCxuKXt0aGlzLnN0YXJ0X21hcms9ZSx0aGlzLmVuZF9tYXJrPXQsdGhpcy5lbmNvZGluZz1ufXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuaWQ9IjxzdHJlYW0gc3RhcnQ+IixufSh0aGlzLlRva2VuKSx0aGlzLlN0cmVhbUVuZFRva2VuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuaWQ9IjxzdHJlYW0gZW5kPiIsbn0odGhpcy5Ub2tlbiksdGhpcy5CbG9ja1NlcXVlbmNlU3RhcnRUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSI8YmxvY2sgc2VxdWVuY2Ugc3RhcnQ+IixufSh0aGlzLlRva2VuKSx0aGlzLkJsb2NrTWFwcGluZ1N0YXJ0VG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iPGJsb2NrIG1hcHBpbmcgZW5kPiIsbn0odGhpcy5Ub2tlbiksdGhpcy5CbG9ja0VuZFRva2VuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuaWQ9IjxibG9jayBlbmQ+IixufSh0aGlzLlRva2VuKSx0aGlzLkZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iWyIsbn0odGhpcy5Ub2tlbiksdGhpcy5GbG93TWFwcGluZ1N0YXJ0VG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0ieyIsbn0odGhpcy5Ub2tlbiksdGhpcy5GbG93U2VxdWVuY2VFbmRUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSJdIixufSh0aGlzLlRva2VuKSx0aGlzLkZsb3dNYXBwaW5nRW5kVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0ifSIsbn0odGhpcy5Ub2tlbiksdGhpcy5LZXlUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSI/IixufSh0aGlzLlRva2VuKSx0aGlzLlZhbHVlVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iOiIsbn0odGhpcy5Ub2tlbiksdGhpcy5CbG9ja0VudHJ5VG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iLSIsbn0odGhpcy5Ub2tlbiksdGhpcy5GbG93RW50cnlUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSIsIixufSh0aGlzLlRva2VuKSx0aGlzLkFsaWFzVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy52YWx1ZT1lLHRoaXMuc3RhcnRfbWFyaz10LHRoaXMuZW5kX21hcms9bn1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSI8YWxpYXM+IixufSh0aGlzLlRva2VuKSx0aGlzLkFuY2hvclRva2VuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3RoaXMudmFsdWU9ZSx0aGlzLnN0YXJ0X21hcms9dCx0aGlzLmVuZF9tYXJrPW59cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5pZD0iPGFuY2hvcj4iLG59KHRoaXMuVG9rZW4pLHRoaXMuVGFnVG9rZW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy52YWx1ZT1lLHRoaXMuc3RhcnRfbWFyaz10LHRoaXMuZW5kX21hcms9bn1yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmlkPSI8dGFnPiIsbn0odGhpcy5Ub2tlbiksdGhpcy5TY2FsYXJUb2tlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsdCxuLHIsbyl7dGhpcy52YWx1ZT1lLHRoaXMucGxhaW49dCx0aGlzLnN0YXJ0X21hcms9bix0aGlzLmVuZF9tYXJrPXIsdGhpcy5zdHlsZT1vfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuaWQ9IjxzY2FsYXI+IixufSh0aGlzLlRva2VuKX0pLmNhbGwodGhpcyl9LCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi91dGlsLmpzIjpmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpe3ZhciB0LHIsbyxzPVtdLnNsaWNlLGk9e30uaGFzT3duUHJvcGVydHk7dGhpcy5TdHJpbmdTdHJlYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zdHJpbmc9IiJ9cmV0dXJuIGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0cmluZys9ZX0sZX0oKSx0aGlzLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRlbmQoe30sdCl9fSh0aGlzKSx0aGlzLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG8saSxhO2ZvcihlPWFyZ3VtZW50c1swXSxpPTI8PWFyZ3VtZW50cy5sZW5ndGg/cy5jYWxsKGFyZ3VtZW50cywxKTpbXSx0PTAscj1pLmxlbmd0aDt0PHI7dCsrKXtvPWlbdF07Zm9yKG4gaW4gbylhPW9bbl0sZVtuXT1hfXJldHVybiBlfSx0aGlzLmlzX2VtcHR5PWZ1bmN0aW9uKGUpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSl8fCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gMD09PWUubGVuZ3RoO2Zvcih0IGluIGUpaWYoaS5jYWxsKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9LHRoaXMuaW5zcGVjdD1udWxsIT0odD1udWxsIT0ocj1udWxsIT0obz1uKCIuL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKSk/by5pbnNwZWN0OnZvaWQgMCk/cjplLmluc3BlY3QpP3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZX0sdGhpcy5wYWRfbGVmdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9U3RyaW5nKGUpLGUubGVuZ3RoPj1uP2U6ZS5sZW5ndGgrMT09PW4/IiIrdCtlOiIiK25ldyBBcnJheShuLWUubGVuZ3RoKzEpLmpvaW4odCkrZX0sdGhpcy50b19oZXg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLmNoYXJDb2RlQXQoMCkpLGUudG9TdHJpbmcoMTYpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIpKX0sIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3lhbWwuanMiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oKXt2YXIgZSxyLG87dGhpcy5jb21wb3Nlcj1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9jb21wb3Nlci5qcyIpLHRoaXMuY29uc3RydWN0b3I9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvY29uc3RydWN0b3IuanMiKSxlPXRoaXMuZHVtcGVyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2R1bXBlci5qcyIpLHRoaXMuZXJyb3JzPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2Vycm9ycy5qcyIpLHRoaXMuZXZlbnRzPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL2V2ZW50cy5qcyIpLHI9dGhpcy5sb2FkZXI9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvbG9hZGVyLmpzIiksdGhpcy5ub2Rlcz1uKCIuL25vZGVfbW9kdWxlcy95YW1sLWpzL2xpYi9ub2Rlcy5qcyIpLHRoaXMucGFyc2VyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3BhcnNlci5qcyIpLHRoaXMucmVhZGVyPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3JlYWRlci5qcyIpLHRoaXMucmVzb2x2ZXI9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvcmVzb2x2ZXIuanMiKSx0aGlzLnNjYW5uZXI9bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvc2Nhbm5lci5qcyIpLHRoaXMudG9rZW5zPW4oIi4vbm9kZV9tb2R1bGVzL3lhbWwtanMvbGliL3Rva2Vucy5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMveWFtbC1qcy9saWIvdXRpbC5qcyIpLHRoaXMuc2Nhbj1mdW5jdGlvbihlLHQpe3ZhciBuLG87Zm9yKG51bGw9PXQmJih0PXIuTG9hZGVyKSxuPW5ldyB0KGUpLG89W107bi5jaGVja190b2tlbigpOylvLnB1c2gobi5nZXRfdG9rZW4oKSk7cmV0dXJuIG99LHRoaXMucGFyc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixvO2ZvcihudWxsPT10JiYodD1yLkxvYWRlciksbj1uZXcgdChlKSxvPVtdO24uY2hlY2tfZXZlbnQoKTspby5wdXNoKG4uZ2V0X2V2ZW50KCkpO3JldHVybiBvfSx0aGlzLmNvbXBvc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbD09dCYmKHQ9ci5Mb2FkZXIpLG49bmV3IHQoZSksbi5nZXRfc2luZ2xlX25vZGUoKX0sdGhpcy5jb21wb3NlX2FsbD1mdW5jdGlvbihlLHQpe3ZhciBuLG87Zm9yKG51bGw9PXQmJih0PXIuTG9hZGVyKSxuPW5ldyB0KGUpLG89W107bi5jaGVja19ub2RlKCk7KW8ucHVzaChuLmdldF9ub2RlKCkpO3JldHVybiBvfSx0aGlzLmxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbD09dCYmKHQ9ci5Mb2FkZXIpLG49bmV3IHQoZSksbi5nZXRfc2luZ2xlX2RhdGEoKX0sdGhpcy5sb2FkX2FsbD1mdW5jdGlvbihlLHQpe3ZhciBuLG87Zm9yKG51bGw9PXQmJih0PXIuTG9hZGVyKSxuPW5ldyB0KGUpLG89W107bi5jaGVja19kYXRhKCk7KW8ucHVzaChuLmdldF9kYXRhKCkpO3JldHVybiBvfSx0aGlzLmVtaXQ9ZnVuY3Rpb24odCxuLHIscyl7dmFyIGksYSxsLHUsYztudWxsPT1yJiYocj1lLkR1bXBlciksbnVsbD09cyYmKHM9e30pLGE9bnx8bmV3IG8uU3RyaW5nU3RyZWFtLGk9bmV3IHIoYSxzKTt0cnl7Zm9yKHU9MCxjPXQubGVuZ3RoO3U8Yzt1KyspbD10W3VdLGkuZW1pdChsKX1maW5hbGx5e2kuZGlzcG9zZSgpfXJldHVybiBufHxhLnN0cmluZ30sdGhpcy5zZXJpYWxpemU9ZnVuY3Rpb24obixyLG8scyl7cmV0dXJuIG51bGw9PW8mJihvPWUuRHVtcGVyKSxudWxsPT1zJiYocz17fSksdC5zZXJpYWxpemVfYWxsKFtuXSxyLG8scyl9LHRoaXMuc2VyaWFsaXplX2FsbD1mdW5jdGlvbih0LG4scixzKXt2YXIgaSxhLGwsdSxjO251bGw9PXImJihyPWUuRHVtcGVyKSxudWxsPT1zJiYocz17fSksYT1ufHxuZXcgby5TdHJpbmdTdHJlYW0saT1uZXcgcihhLHMpO3RyeXtmb3IoaS5vcGVuKCksbD0wLHU9dC5sZW5ndGg7bDx1O2wrKyljPXRbbF0saS5zZXJpYWxpemUoYyk7aS5jbG9zZSgpfWZpbmFsbHl7aS5kaXNwb3NlKCl9cmV0dXJuIG58fGEuc3RyaW5nfSx0aGlzLmR1bXA9ZnVuY3Rpb24obixyLG8scyl7cmV0dXJuIG51bGw9PW8mJihvPWUuRHVtcGVyKSxudWxsPT1zJiYocz17fSksdC5kdW1wX2FsbChbbl0scixvLHMpfSx0aGlzLmR1bXBfYWxsPWZ1bmN0aW9uKHQsbixyLHMpe3ZhciBpLGEsbCx1LGM7bnVsbD09ciYmKHI9ZS5EdW1wZXIpLG51bGw9PXMmJihzPXt9KSxhPW58fG5ldyBvLlN0cmluZ1N0cmVhbSxpPW5ldyByKGEscyk7dHJ5e2ZvcihpLm9wZW4oKSx1PTAsYz10Lmxlbmd0aDt1PGM7dSsrKWw9dFt1XSxpLnJlcHJlc2VudChsKTtpLmNsb3NlKCl9ZmluYWxseXtpLmRpc3Bvc2UoKX1yZXR1cm4gbnx8YS5zdHJpbmd9fSkuY2FsbCh0aGlzKX0sIi4vbm9kZV9tb2R1bGVzL3plbnNjcm9sbC96ZW5zY3JvbGwuanMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLHM7IWZ1bmN0aW9uKG4saSl7bz1bXSxyPWkoKSx2b2lkIDAhPT0ocz0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHQsbyk6cikmJihlLmV4cG9ydHM9cyl9KDAsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuImdldENvbXB1dGVkU3R5bGUiaW4gd2luZG93JiYic21vb3RoIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpWyJzY3JvbGwtYmVoYXZpb3IiXX07aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCEoImRvY3VtZW50ImluIHdpbmRvdykpcmV0dXJue307dmFyIHQ9ZnVuY3Rpb24odCxuLHIpe249bnx8OTk5LHJ8fDA9PT1yfHwocj05KTt2YXIgbyxzPWZ1bmN0aW9uKGUpe289ZX0saT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChvKSxzKDApfSxhPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLHQuZ2V0VG9wT2YoZSktcil9LGw9ZnVuY3Rpb24ocixvLGEpe2lmKGkoKSwwPT09b3x8byYmbzwwfHxlKHQuYm9keSkpdC50b1kociksYSYmYSgpO2Vsc2V7dmFyIGw9dC5nZXRZKCksdT1NYXRoLm1heCgwLHIpLWwsYz0obmV3IERhdGUpLmdldFRpbWUoKTtvPW98fE1hdGgubWluKE1hdGguYWJzKHUpLG4pLGZ1bmN0aW9uIGUoKXtzKHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgbj1NYXRoLm1pbigxLCgobmV3IERhdGUpLmdldFRpbWUoKS1jKS9vKSxyPU1hdGgubWF4KDAsTWF0aC5mbG9vcihsK3UqKG48LjU/MipuKm46biooNC0yKm4pLTEpKSk7dC50b1kociksbjwxJiZ0LmdldEhlaWdodCgpK3I8dC5ib2R5LnNjcm9sbEhlaWdodD9lKCk6KHNldFRpbWVvdXQoaSw5OSksYSYmYSgpKX0sOSkpfSgpfX0sdT1mdW5jdGlvbihlLHQsbil7bChhKGUpLHQsbil9LGM9ZnVuY3Rpb24oZSxuLG8pe3ZhciBzPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LGk9dC5nZXRUb3BPZihlKStzLGM9dC5nZXRIZWlnaHQoKSxkPXQuZ2V0WSgpLF89ZCtjO2EoZSk8ZHx8cytyPmM/dShlLG4sbyk6aStyPl8/bChpLWMrcixuLG8pOm8mJm8oKX0sZD1mdW5jdGlvbihlLG4scixvKXtsKE1hdGgubWF4KDAsdC5nZXRUb3BPZihlKS10LmdldEhlaWdodCgpLzIrKHJ8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LzIpKSxuLG8pfTtyZXR1cm57c2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMD09PWV8fGUpJiYobj1lKSwoMD09PXR8fHQpJiYocj10KSx7ZGVmYXVsdER1cmF0aW9uOm4sZWRnZU9mZnNldDpyfX0sdG86dSx0b1k6bCxpbnRvVmlldzpjLGNlbnRlcjpkLHN0b3A6aSxtb3Zpbmc6ZnVuY3Rpb24oKXtyZXR1cm4hIW99LGdldFk6dC5nZXRZLGdldFRvcE9mOnQuZ2V0VG9wT2Z9fSxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5zY3JvbGxZfHxuLnNjcm9sbFRvcH0sbz10KHtib2R5OmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnR8fGRvY3VtZW50LmJvZHksdG9ZOmZ1bmN0aW9uKGUpe3dpbmRvdy5zY3JvbGxUbygwLGUpfSxnZXRZOnIsZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodHx8bi5jbGllbnRIZWlnaHR9LGdldFRvcE9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtyKCktbi5vZmZzZXRUb3B9fSk7aWYoby5jcmVhdGVTY3JvbGxlcj1mdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQoe2JvZHk6ZSx0b1k6ZnVuY3Rpb24odCl7ZS5zY3JvbGxUb3A9dH0sZ2V0WTpmdW5jdGlvbigpe3JldHVybiBlLnNjcm9sbFRvcH0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKGUuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8bi5jbGllbnRIZWlnaHQpfSxnZXRUb3BPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5vZmZzZXRUb3B9fSxyLG8pfSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB3aW5kb3cmJiF3aW5kb3cubm9aZW5zbW9vdGgmJiFlKGRvY3VtZW50LmJvZHkpKXt2YXIgcz0ic2Nyb2xsUmVzdG9yYXRpb24iaW4gaGlzdG9yeTtzJiYoaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj0iYXV0byIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3MmJihzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj0ibWFudWFsIn0sOSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixmdW5jdGlvbihlKXtlLnN0YXRlJiYiemVuc2Nyb2xsWSJpbiBlLnN0YXRlJiZvLnRvWShlLnN0YXRlLnplbnNjcm9sbFkpfSwhMSkpLHdpbmRvdy5sb2NhdGlvbi5oYXNoJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9by5zZXR1cCgpLmVkZ2VPZmZzZXQ7aWYoZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVsxXSk7aWYodCl7dmFyIG49TWF0aC5tYXgoMCxvLmdldFRvcE9mKHQpLWUpLHI9by5nZXRZKCktbjswPD1yJiZyPDkmJndpbmRvdy5zY3JvbGxUbygwLG4pfX19LDkpfSwhMSk7dmFyIGk9bmV3IFJlZ0V4cCgiKF58XFxzKW5vWmVuc21vb3RoKFxcc3wkKSIpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUudGFyZ2V0O3QmJiJBIiE9PXQudGFnTmFtZTspdD10LnBhcmVudE5vZGU7aWYoISghdHx8MSE9PWUud2hpY2h8fGUuc2hpZnRLZXl8fGUubWV0YUtleXx8ZS5jdHJsS2V5fHxlLmFsdEtleSkpe2lmKHMpdHJ5e2hpc3RvcnkucmVwbGFjZVN0YXRlKHt6ZW5zY3JvbGxZOm8uZ2V0WSgpfSwiIil9Y2F0Y2goZSl7fXZhciBuPXQuZ2V0QXR0cmlidXRlKCJocmVmIil8fCIiO2lmKDA9PT1uLmluZGV4T2YoIiMiKSYmIWkudGVzdCh0LmNsYXNzTmFtZSkpe3ZhciByPTAsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuLnN1YnN0cmluZygxKSk7aWYoIiMiIT09bil7aWYoIWEpcmV0dXJuO3I9by5nZXRUb3BPZihhKX1lLnByZXZlbnREZWZhdWx0KCk7dmFyIGw9ZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb249bn0sdT1vLnNldHVwKCkuZWRnZU9mZnNldDt1JiYocj1NYXRoLm1heCgwLHItdSksbD1mdW5jdGlvbigpe2hpc3RvcnkucHVzaFN0YXRlKG51bGwsIiIsbil9KSxvLnRvWShyLG51bGwsbCl9fX0sITEpfXJldHVybiBvfSl9LCIuL3NyYy9hcHAuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL2NvbnRhaW5lcnMvaW5pdGlhbERhdGFDb250YWluZXIvaW5kZXguanMiKSx1PW4oIi4vc3JjL3JvdXRlcy9wYWdlU3dpdGNoZXIuanN4IiksYz1yKHUpLGQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvbkNvbnRhaW5lci9pbmRleC5qcyIpLF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbml0aWFsRGlzcGF0Y2g7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGwuSW5pdGlhbERhdGFDb250YWluZXIse2luaXRpYWxEaXNwYXRjaDp0fSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChkLkxvY2FsaXphdGlvbkNvbnRhaW5lcixudWxsLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMuZGVmYXVsdCxudWxsKSkpfTtfLnByb3BUeXBlcz17aW5pdGlhbERpc3BhdGNoOmEuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9O3ZhciBwPV8sZj1wO3QuZGVmYXVsdD1mOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJBcHAiLCIvdXNyL3NyYy9hcHAvc3JjL2FwcC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJkZWZhdWx0IiwiL3Vzci9zcmMvYXBwL3NyYy9hcHAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiZGVmYXVsdCIsIi91c3Ivc3JjL2FwcC9zcmMvYXBwLmpzeCIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWNjb3VudFJvbGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LlVTRVI9IlVTRVIiLG89dC5BRE1JTklTVFJBVE9SPSJBRE1JTklTVFJBVE9SIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiVVNFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY2NvdW50Um9sZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJBRE1JTklTVFJBVE9SIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjY291bnRSb2xlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWNjb3VudFR5cGUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuSU5URVJOQUw9IklOVEVSTkFMIixvPXQuTERBUD0iTERBUCI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIklOVEVSTkFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjY291bnRUeXBlLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiTERBUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY2NvdW50VHlwZS5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQUNUSU9OX1RPX0dST1VQX01BUD10LkdST1VQX1RPX0FDVElPTl9NQVA9dC5BQ1RJT05TX1dJVEhfTEFVTkNIPXQuQUNUSU9OU19XSVRIX05PVElGSUNBVElPTlM9dC5BQ1RJT05TX1dJVEhfSU1QT1JUPXQuQUNUSU9OU19XSVRIX0RFRkVDVFM9dC5BQ1RJT05TX1dJVEhfQUFfU0VUVElOR1M9dC5BQ1RJT05TX1dJVEhfQlRTPXQuQUNUSU9OU19XSVRIX0ZJTFRFUlM9dC5BQ1RJT05TX1dJVEhfV0lER0VUUz10LkFDVElPTlNfV0lUSF9EQVNIQk9BUkRTPXQuQUNUSU9OU19XSVRIX0lTU1VFUz10LlVQREFURV9JVEVNPXQuU1dJVENIX09GRl9OT1RJRklDQVRJT05TPXQuU1dJVENIX09OX05PVElGSUNBVElPTlM9dC5VUERBVEVfTk9USUZJQ0FUSU9OUz10LkZJTklTSF9JTVBPUlQ9dC5TVEFSVF9JTVBPUlQ9dC5ERUxFVEVfREVGRUNUPXQuVVBEQVRFX0RFRkVDVD10LkNSRUFURV9ERUZFQ1Q9dC5ERUxFVEVfSU5ERVg9dC5HRU5FUkFURV9JTkRFWD10LlVQREFURV9BTkFMWVpFUj10LlVQREFURV9QUk9KRUNUPXQuREVMRVRFX0JUUz10LlVQREFURV9CVFM9dC5DUkVBVEVfQlRTPXQuREVMRVRFX0ZJTFRFUj10LlVQREFURV9GSUxURVI9dC5DUkVBVEVfRklMVEVSPXQuREVMRVRFX1dJREdFVD10LlVQREFURV9XSURHRVQ9dC5DUkVBVEVfV0lER0VUPXQuREVMRVRFX0RBU0hCT0FSRD10LlVQREFURV9EQVNIQk9BUkQ9dC5DUkVBVEVfREFTSEJPQVJEPXQuQ1JFQVRFX1VTRVI9dC5VTkxJTktfSVNTVUU9dC5MSU5LX0lTU1VFPXQuUE9TVF9JU1NVRT10LkRFTEVURV9MQVVOQ0g9dC5GSU5JU0hfTEFVTkNIPXQuU1RBUlRfTEFVTkNIPXZvaWQgMDt2YXIgcixvLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksaT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHMpLGE9dC5TVEFSVF9MQVVOQ0g9InN0YXJ0TGF1bmNoIixsPXQuRklOSVNIX0xBVU5DSD0iZmluaXNoTGF1bmNoIix1PXQuREVMRVRFX0xBVU5DSD0iZGVsZXRlTGF1bmNoIixjPXQuUE9TVF9JU1NVRT0icG9zdElzc3VlIixkPXQuTElOS19JU1NVRT0ibGlua0lzc3VlIixfPXQuVU5MSU5LX0lTU1VFPSJ1bmxpbmtJc3N1ZSIscD10LkNSRUFURV9VU0VSPSJjcmVhdGVVc2VyIixmPXQuQ1JFQVRFX0RBU0hCT0FSRD0iY3JlYXRlRGFzaGJvYXJkIixtPXQuVVBEQVRFX0RBU0hCT0FSRD0idXBkYXRlRGFzaGJvYXJkIixoPXQuREVMRVRFX0RBU0hCT0FSRD0iZGVsZXRlRGFzaGJvYXJkIixnPXQuQ1JFQVRFX1dJREdFVD0iY3JlYXRlV2lkZ2V0IixiPXQuVVBEQVRFX1dJREdFVD0idXBkYXRlV2lkZ2V0IixFPXQuREVMRVRFX1dJREdFVD0iZGVsZXRlV2lkZ2V0Iix5PXQuQ1JFQVRFX0ZJTFRFUj0iY3JlYXRlRmlsdGVyIix2PXQuVVBEQVRFX0ZJTFRFUj0idXBkYXRlRmlsdGVyIixUPXQuREVMRVRFX0ZJTFRFUj0iZGVsZXRlRmlsdGVyIixBPXQuQ1JFQVRFX0JUUz0iY3JlYXRlQnRzIixDPXQuVVBEQVRFX0JUUz0idXBkYXRlQnRzIixPPXQuREVMRVRFX0JUUz0iZGVsZXRlQnRzIixTPXQuVVBEQVRFX1BST0pFQ1Q9InVwZGF0ZVByb2plY3QiLFI9dC5VUERBVEVfQU5BTFlaRVI9InVwZGF0ZUFuYWx5emVyIixqPXQuR0VORVJBVEVfSU5ERVg9ImdlbmVyYXRlSW5kZXgiLHg9dC5ERUxFVEVfSU5ERVg9ImRlbGV0ZUluZGV4IixMPXQuQ1JFQVRFX0RFRkVDVD0iY3JlYXRlRGVmZWN0IixEPXQuVVBEQVRFX0RFRkVDVD0idXBkYXRlRGVmZWN0Iix3PXQuREVMRVRFX0RFRkVDVD0iZGVsZXRlRGVmZWN0IixNPXQuU1RBUlRfSU1QT1JUPSJzdGFydEltcG9ydCIsaz10LkZJTklTSF9JTVBPUlQ9ImZpbmlzaEltcG9ydCIsST10LlVQREFURV9OT1RJRklDQVRJT05TPSJ1cGRhdGVFbWFpbCIsUD10LlNXSVRDSF9PTl9OT1RJRklDQVRJT05TPSJvbkVtYWlsIixOPXQuU1dJVENIX09GRl9OT1RJRklDQVRJT05TPSJvZmZFbWFpbCIsSD10LlVQREFURV9JVEVNPSJ1cGRhdGVJdGVtIixGPXQuQUNUSU9OU19XSVRIX0lTU1VFUz0iaXNzdWVzQWN0aW9ucyIsQj10LkFDVElPTlNfV0lUSF9EQVNIQk9BUkRTPSJkYXNoYm9hcmRzQWN0aW9ucyIsVT10LkFDVElPTlNfV0lUSF9XSURHRVRTPSJ3aWRnZXRzQWN0aW9ucyIsRz10LkFDVElPTlNfV0lUSF9GSUxURVJTPSJmaWx0ZXJzQWN0aW9ucyIsej10LkFDVElPTlNfV0lUSF9CVFM9ImJ0c0FjdGlvbnMiLFY9dC5BQ1RJT05TX1dJVEhfQUFfU0VUVElOR1M9ImFhU2V0dGluZ3NBY3Rpb25zIixXPXQuQUNUSU9OU19XSVRIX0RFRkVDVFM9ImRlZmVjdHNBY3Rpb25zIixZPXQuQUNUSU9OU19XSVRIX0lNUE9SVD0iaW1wb3J0QWN0aW9ucyIscT10LkFDVElPTlNfV0lUSF9OT1RJRklDQVRJT05TPSJub3RpZmljYXRpb25zQWN0aW9ucyIsSz10LkFDVElPTlNfV0lUSF9MQVVOQ0g9ImxhdW5jaEFjdGlvbnMiLFg9dC5HUk9VUF9UT19BQ1RJT05fTUFQPShyPXt9LCgwLGkuZGVmYXVsdCkocixGLFtjLGQsX10pLCgwLGkuZGVmYXVsdCkocixCLFtmLG0saF0pLCgwLGkuZGVmYXVsdCkocixVLFtnLGIsRV0pLCgwLGkuZGVmYXVsdCkocixHLFt5LHYsVF0pLCgwLGkuZGVmYXVsdCkocix6LFtBLEMsT10pLCgwLGkuZGVmYXVsdCkocixWLFtSLGoseF0pLCgwLGkuZGVmYXVsdCkocixXLFtELHddKSwoMCxpLmRlZmF1bHQpKHIsWSxbTSxrXSksKDAsaS5kZWZhdWx0KShyLHEsW0ksUCxOXSksciksJD10LkFDVElPTl9UT19HUk9VUF9NQVA9KG89e30sKDAsaS5kZWZhdWx0KShvLGMsRiksKDAsaS5kZWZhdWx0KShvLGQsRiksKDAsaS5kZWZhdWx0KShvLF8sRiksKDAsaS5kZWZhdWx0KShvLGYsQiksKDAsaS5kZWZhdWx0KShvLG0sQiksKDAsaS5kZWZhdWx0KShvLGgsQiksKDAsaS5kZWZhdWx0KShvLGcsVSksKDAsaS5kZWZhdWx0KShvLGIsVSksKDAsaS5kZWZhdWx0KShvLEUsVSksKDAsaS5kZWZhdWx0KShvLHksRyksKDAsaS5kZWZhdWx0KShvLHYsRyksKDAsaS5kZWZhdWx0KShvLFQsRyksKDAsaS5kZWZhdWx0KShvLEEseiksKDAsaS5kZWZhdWx0KShvLEMseiksKDAsaS5kZWZhdWx0KShvLE8seiksKDAsaS5kZWZhdWx0KShvLFIsViksKDAsaS5kZWZhdWx0KShvLGosViksKDAsaS5kZWZhdWx0KShvLHgsViksKDAsaS5kZWZhdWx0KShvLEQsVyksKDAsaS5kZWZhdWx0KShvLHcsVyksKDAsaS5kZWZhdWx0KShvLE0sWSksKDAsaS5kZWZhdWx0KShvLGssWSksKDAsaS5kZWZhdWx0KShvLEkscSksKDAsaS5kZWZhdWx0KShvLFAscSksKDAsaS5kZWZhdWx0KShvLE4scSksbyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIlNUQVJUX0xBVU5DSCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkZJTklTSF9MQVVOQ0giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJERUxFVEVfTEFVTkNIIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiUE9TVF9JU1NVRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkxJTktfSVNTVUUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJVTkxJTktfSVNTVUUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJDUkVBVEVfVVNFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkNSRUFURV9EQVNIQk9BUkQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJVUERBVEVfREFTSEJPQVJEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiREVMRVRFX0RBU0hCT0FSRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIkNSRUFURV9XSURHRVQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJVUERBVEVfV0lER0VUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwiREVMRVRFX1dJREdFVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksIkNSRUFURV9GSUxURVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJVUERBVEVfRklMVEVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiREVMRVRFX0ZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEEsIkNSRUFURV9CVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJVUERBVEVfQlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTywiREVMRVRFX0JUUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFMsIlVQREFURV9QUk9KRUNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiVVBEQVRFX0FOQUxZWkVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaiwiR0VORVJBVEVfSU5ERVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJERUxFVEVfSU5ERVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJDUkVBVEVfREVGRUNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiVVBEQVRFX0RFRkVDVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHcsIkRFTEVURV9ERUZFQ1QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihNLCJTVEFSVF9JTVBPUlQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihrLCJGSU5JU0hfSU1QT1JUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSSwiVVBEQVRFX05PVElGSUNBVElPTlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJTV0lUQ0hfT05fTk9USUZJQ0FUSU9OUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE4sIlNXSVRDSF9PRkZfTk9USUZJQ0FUSU9OUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIlVQREFURV9JVEVNIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRiwiQUNUSU9OU19XSVRIX0lTU1VFUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIkFDVElPTlNfV0lUSF9EQVNIQk9BUkRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiQUNUSU9OU19XSVRIX1dJREdFVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJBQ1RJT05TX1dJVEhfRklMVEVSUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIkFDVElPTlNfV0lUSF9CVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJBQ1RJT05TX1dJVEhfQUFfU0VUVElOR1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJBQ1RJT05TX1dJVEhfREVGRUNUUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIkFDVElPTlNfV0lUSF9JTVBPUlQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihxLCJBQ1RJT05TX1dJVEhfTk9USUZJQ0FUSU9OUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIkFDVElPTlNfV0lUSF9MQVVOQ0giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihYLCJHUk9VUF9UT19BQ1RJT05fTUFQIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoJCwiQUNUSU9OX1RPX0dST1VQX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvY2hhcnRNb2Rlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NT0RFU19WQUxVRVM9dC5DSEFSVF9NT0RFUz12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT10LkNIQVJUX01PREVTPXtMQVVOQ0hfTU9ERToibGF1bmNoTW9kZSIsVElNRUxJTkVfTU9ERToidGltZWxpbmVNb2RlIixBTExfTEFVTkNIRVM6ImFsbExhdW5jaGVzIixMQVRFU1RfTEFVTkNIRVM6ImxhdGVzdExhdW5jaGVzIixBUkVBX1ZJRVc6ImFyZWFWaWV3IixCQVJfVklFVzoiYmFyVmlldyIsVEFCTEVfVklFVzoidGFibGVWaWV3IixQQU5FTF9WSUVXOiJwYW5lbFZpZXciLERPTlVUX1ZJRVc6ImRvbnV0VmlldyIsUElFX1ZJRVc6InBpZVZpZXcifSxhPXQuTU9ERVNfVkFMVUVTPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLkFMTF9MQVVOQ0hFUywhMSksKDAscy5kZWZhdWx0KShyLGkuTEFURVNUX0xBVU5DSEVTLCEwKSwoMCxzLmRlZmF1bHQpKHIsaS5BUkVBX1ZJRVcsImFyZWEtc3BsaW5lIiksKDAscy5kZWZhdWx0KShyLGkuUElFX1ZJRVcsInBpZSIpLCgwLHMuZGVmYXVsdCkocixpLkJBUl9WSUVXLCJiYXIiKSwoMCxzLmRlZmF1bHQpKHIsaS5MQVVOQ0hfTU9ERSwibGF1bmNoIiksKDAscy5kZWZhdWx0KShyLGkuVElNRUxJTkVfTU9ERSwiZGF5IiksKDAscy5kZWZhdWx0KShyLGkuVEFCTEVfVklFVywidGFibGUiKSwoMCxzLmRlZmF1bHQpKHIsaS5ET05VVF9WSUVXLCJkb251dCIpLCgwLHMuZGVmYXVsdCkocixpLlBBTkVMX1ZJRVcsInBhbmVsIikscik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkNIQVJUX01PREVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2NoYXJ0TW9kZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJNT0RFU19WQUxVRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY2hhcnRNb2Rlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkNPTE9SX0ZBSUxFRD0iI2YzNmM0YSIsbz10LkNPTE9SX0ZBSUxFRFNLSVBQRURUT1RBTD0iI2YzNmM0YSIscz10LkNPTE9SX1BBU1NFRD0iIzg3Yjc3YiIsaT10LkNPTE9SX1NLSVBQRUQ9IiNiZGM3Y2MiLGE9dC5DT0xPUl9UT1RBTD0iIzQ4OWJlYiIsbD10LkNPTE9SX0FVVE9NQVRJT05fQlVHPSIjZjdkNjNlIix1PXQuQ09MT1JfUFJPRFVDVF9CVUc9IiNlYzM5MDAiLGM9dC5DT0xPUl9OT19ERUZFQ1Q9IiM3Nzc3NzciLGQ9dC5DT0xPUl9TWVNURU1fSVNTVUU9IiMwMjc0ZDEiLF89dC5DT0xPUl9UT19JTlZFU1RJR0FURT0iI2ZmYjc0MyIscD10LkNPTE9SX0NIQVJUX0RVUkFUSU9OPSIjNTU3ZmQzIixmPXQuQ09MT1JfT1JBTkdFX1JFRD0iI2ZmMzIyMiIsbT10LkNPTE9SX0RBUktfUEFTVEVMX0dSRUVOPSIjNWNiNzU1IixoPXQuQ09MT1JfTk9UUEFTU0VEPXI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkNPTE9SX0ZBSUxFRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJDT0xPUl9GQUlMRURTS0lQUEVEVE9UQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiQ09MT1JfUEFTU0VEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkNPTE9SX1NLSVBQRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiQ09MT1JfVE9UQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQ09MT1JfQVVUT01BVElPTl9CVUciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiQ09MT1JfUFJPRFVDVF9CVUciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiQ09MT1JfTk9fREVGRUNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkNPTE9SX1NZU1RFTV9JU1NVRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJDT0xPUl9UT19JTlZFU1RJR0FURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJDT0xPUl9DSEFSVF9EVVJBVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJDT0xPUl9PUkFOR0VfUkVEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIkNPTE9SX0RBUktfUEFTVEVMX0dSRUVOIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsIkNPTE9SX05PVFBBU1NFRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbW1vbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5ERUJVRz0iZGVidWciLG89dC5ERUZBVUxUPSJkZWZhdWx0IjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiREVCVUciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvY29tbW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiREVGQVVMVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9jb21tb24uanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LlBST0RVQ1RfQlVHPSJwcm9kdWN0X2J1ZyIsbz10LkFVVE9NQVRJT05fQlVHPSJhdXRvbWF0aW9uX2J1ZyIscz10LlNZU1RFTV9JU1NVRT0ic3lzdGVtX2lzc3VlIixpPXQuTk9fREVGRUNUPSJub19kZWZlY3QiLGE9dC5UT19JTlZFU1RJR0FURT0idG9faW52ZXN0aWdhdGUiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJQUk9EVUNUX0JVRyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9kZWZlY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkFVVE9NQVRJT05fQlVHIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiU1lTVEVNX0lTU1VFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiTk9fREVGRUNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiVE9fSU5WRVNUSUdBVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZGVmZWN0VHlwZXMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2V2ZW50c0xvY2FsaXphdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5vYmplY3RUeXBlc01lc3NhZ2VzPXQuYWN0aW9uTWVzc2FnZXM9dm9pZCAwO3ZhciByLG8scz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGw9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLHU9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLGM9dC5hY3Rpb25NZXNzYWdlcz0oMCxhLmRlZmluZU1lc3NhZ2VzKSgocj17fSwoMCxpLmRlZmF1bHQpKHIsdS5DUkVBVEVfREFTSEJPQVJELHtpZDoiRXZlbnRBY3Rpb25zLmNyZWF0ZURhc2hib2FyZCIsZGVmYXVsdE1lc3NhZ2U6ImNyZWF0ZWQgZGFzaGJvYXJkIn0pLCgwLGkuZGVmYXVsdCkocix1LlVQREFURV9EQVNIQk9BUkQse2lkOiJFdmVudEFjdGlvbnMudXBkYXRlRGFzaGJvYXJkIixkZWZhdWx0TWVzc2FnZToidXBkYXRlZCBkYXNoYm9hcmQifSksKDAsaS5kZWZhdWx0KShyLHUuREVMRVRFX0RBU0hCT0FSRCx7aWQ6IkV2ZW50QWN0aW9ucy5kZWxldGVEYXNoYm9hcmQiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGVkIGRhc2hib2FyZCJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5DUkVBVEVfV0lER0VULHtpZDoiRXZlbnRBY3Rpb25zLmNyZWF0ZVdpZGdldCIsZGVmYXVsdE1lc3NhZ2U6ImNyZWF0ZWQgd2lkZ2V0In0pLCgwLGkuZGVmYXVsdCkocix1LlVQREFURV9XSURHRVQse2lkOiJFdmVudEFjdGlvbnMudXBkYXRlV2lkZ2V0IixkZWZhdWx0TWVzc2FnZToidXBkYXRlZCB3aWRnZXQifSksKDAsaS5kZWZhdWx0KShyLHUuREVMRVRFX1dJREdFVCx7aWQ6IkV2ZW50QWN0aW9ucy5kZWxldGVXaWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGVkIHdpZGdldCJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5DUkVBVEVfRklMVEVSLHtpZDoiRXZlbnRBY3Rpb25zLmNyZWF0ZUZpbHRlciIsZGVmYXVsdE1lc3NhZ2U6ImNyZWF0ZSBmaWx0ZXIifSksKDAsaS5kZWZhdWx0KShyLHUuVVBEQVRFX0ZJTFRFUix7aWQ6IkV2ZW50QWN0aW9ucy51cGRhdGVGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGUgZmlsdGVyIn0pLCgwLGkuZGVmYXVsdCkocix1LkRFTEVURV9GSUxURVIse2lkOiJFdmVudEFjdGlvbnMuZGVsZXRlRmlsdGVyIixkZWZhdWx0TWVzc2FnZToiZGVsZXRlIGZpbHRlciJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5TVEFSVF9MQVVOQ0gse2lkOiJFdmVudEFjdGlvbnMuc3RhcnRMYXVuY2giLGRlZmF1bHRNZXNzYWdlOiJzdGFydCBsYXVuY2gifSksKDAsaS5kZWZhdWx0KShyLHUuRklOSVNIX0xBVU5DSCx7aWQ6IkV2ZW50QWN0aW9ucy5maW5pc2hMYXVuY2giLGRlZmF1bHRNZXNzYWdlOiJmaW5pc2ggbGF1bmNoIn0pLCgwLGkuZGVmYXVsdCkocix1LkRFTEVURV9MQVVOQ0gse2lkOiJFdmVudEFjdGlvbnMuZGVsZXRlTGF1bmNoIixkZWZhdWx0TWVzc2FnZToiZGVsZXRlIGxhdW5jaCJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5TVEFSVF9JTVBPUlQse2lkOiJFdmVudEFjdGlvbnMuc3RhcnRJbXBvcnQiLGRlZmF1bHRNZXNzYWdlOiJzdGFydCBpbXBvcnQifSksKDAsaS5kZWZhdWx0KShyLHUuRklOSVNIX0lNUE9SVCx7aWQ6IkV2ZW50QWN0aW9ucy5maW5pc2hJbXBvcnQiLGRlZmF1bHRNZXNzYWdlOiJmaW5pc2ggaW1wb3J0In0pLCgwLGkuZGVmYXVsdCkocix1LkNSRUFURV9VU0VSLHtpZDoiRXZlbnRBY3Rpb25zLmNyZWF0ZVVzZXIiLGRlZmF1bHRNZXNzYWdlOiJjcmVhdGUgdXNlciJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5VUERBVEVfUFJPSkVDVCx7aWQ6IkV2ZW50QWN0aW9ucy51cGRhdGVQcm9qZWN0IixkZWZhdWx0TWVzc2FnZToidXBkYXRlIHByb2plY3QifSksKDAsaS5kZWZhdWx0KShyLHUuVVBEQVRFX0RFRkVDVCx7aWQ6IkV2ZW50QWN0aW9ucy51cGRhdGVEZWZlY3QiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGUgZGVmZWN0In0pLCgwLGkuZGVmYXVsdCkocix1LkRFTEVURV9ERUZFQ1Qse2lkOiJFdmVudEFjdGlvbnMuZGVsZXRlRGVmZWN0IixkZWZhdWx0TWVzc2FnZToiZGVsZXRlIGRlZmVjdCJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5QT1NUX0lTU1VFLHtpZDoiRXZlbnRBY3Rpb25zLnBvc3RJc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6InBvc3QgaXNzdWUifSksKDAsaS5kZWZhdWx0KShyLHUuTElOS19JU1NVRSx7aWQ6IkV2ZW50QWN0aW9ucy5saW5rSXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJsaW5rIGlzc3VlIn0pLCgwLGkuZGVmYXVsdCkocix1LkNSRUFURV9CVFMse2lkOiJFdmVudEFjdGlvbnMuY3JlYXRlQnRzIixkZWZhdWx0TWVzc2FnZToiY3JlYXRlIGJ0cyJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5VUERBVEVfQlRTLHtpZDoiRXZlbnRBY3Rpb25zLnVwZGF0ZUJ0cyIsZGVmYXVsdE1lc3NhZ2U6InVwZGF0ZSBidHMifSksKDAsaS5kZWZhdWx0KShyLHUuREVMRVRFX0JUUyx7aWQ6IkV2ZW50QWN0aW9ucy5kZWxldGVCdHMiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGUgYnRzIn0pLCgwLGkuZGVmYXVsdCkocix1LlVQREFURV9BTkFMWVpFUix7aWQ6IkV2ZW50QWN0aW9ucy51cGRhdGVBbmFseXplciIsZGVmYXVsdE1lc3NhZ2U6InVwZGF0ZSBhbmFsaXplciJ9KSwoMCxpLmRlZmF1bHQpKHIsdS5HRU5FUkFURV9JTkRFWCx7aWQ6IkV2ZW50QWN0aW9ucy5nZW5lcmF0ZUluZGV4IixkZWZhdWx0TWVzc2FnZToiZ2VuZXJhdGUgaW5kZXgifSksKDAsaS5kZWZhdWx0KShyLHUuQ1JFQVRFX0RFRkVDVCx7aWQ6IkV2ZW50QWN0aW9ucy5jcmVhdGVEZWZlY3QiLGRlZmF1bHRNZXNzYWdlOiJjcmVhdGUgZGVmZWN0In0pLCgwLGkuZGVmYXVsdCkocix1LlVQREFURV9JVEVNLHtpZDoiRXZlbnRBY3Rpb25zLnVwZGF0ZUl0ZW0iLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGUgaXRlbSJ9KSxyKSksZD10Lm9iamVjdFR5cGVzTWVzc2FnZXM9KDAsYS5kZWZpbmVNZXNzYWdlcykoKG89e30sKDAsaS5kZWZhdWx0KShvLGwuREFTSEJPQVJELHtpZDoiRXZlbnRPYmplY3RUeXBlcy5kYXNoYm9hcmQiLGRlZmF1bHRNZXNzYWdlOiJkYXNoYm9hcmQifSksKDAsaS5kZWZhdWx0KShvLGwuTEFVTkNILHtpZDoiRXZlbnRPYmplY3RUeXBlcy5sYXVuY2giLGRlZmF1bHRNZXNzYWdlOiJsYXVuY2gifSksKDAsaS5kZWZhdWx0KShvLGwuV0lER0VULHtpZDoiRXZlbnRPYmplY3RUeXBlcy53aWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJ3aWRnZXQifSksKDAsaS5kZWZhdWx0KShvLGwuRklMVEVSLHtpZDoiRXZlbnRPYmplY3RUeXBlcy5maWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJmaWx0ZXIifSksKDAsaS5kZWZhdWx0KShvLGwuSU1QT1JULHtpZDoiRXZlbnRPYmplY3RUeXBlcy5pbXBvcnQiLGRlZmF1bHRNZXNzYWdlOiJpbXBvcnQifSksKDAsaS5kZWZhdWx0KShvLGwuUFJPSkVDVCx7aWQ6IkV2ZW50T2JqZWN0VHlwZXMucHJvamVjdCIsZGVmYXVsdE1lc3NhZ2U6InByb2plY3QifSksKDAsaS5kZWZhdWx0KShvLGwuREVGRUNUX1RZUEUse2lkOiJFdmVudE9iamVjdFR5cGVzLmRlZmVjdFR5cGUiLGRlZmF1bHRNZXNzYWdlOiJkZWZlY3RUeXBlIn0pLCgwLGkuZGVmYXVsdCkobyxsLlVTRVIse2lkOiJFdmVudE9iamVjdFR5cGVzLnVzZXIiLGRlZmF1bHRNZXNzYWdlOiJ1c2VyIn0pLCgwLGkuZGVmYXVsdCkobyxsLkVNQUlMX0NPTkZJRyx7aWQ6IkV2ZW50T2JqZWN0VHlwZXMuZW1haWxDb25maWciLGRlZmF1bHRNZXNzYWdlOiJlbWFpbCBjb25maWcifSksKDAsaS5kZWZhdWx0KShvLGwuSVRFTV9JU1NVRSx7aWQ6IkV2ZW50T2JqZWN0VHlwZXMuaXRlbUlzc3VlIixkZWZhdWx0TWVzc2FnZToiVGVzdCBpdGVtIn0pLCgwLGkuZGVmYXVsdCkobyxsLlRFU1RfSVRFTSx7aWQ6IkV2ZW50T2JqZWN0VHlwZXMudGVzdEl0ZW0iLGRlZmF1bHRNZXNzYWdlOiJUZXN0IGl0ZW0ifSksbykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJhY3Rpb25NZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNMb2NhbGl6YXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJvYmplY3RUeXBlc01lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2V2ZW50c0xvY2FsaXphdGlvbi5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZXZlbnRzT2JqZWN0VHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuREFTSEJPQVJEPSJkYXNoYm9hcmQiLG89dC5MQVVOQ0g9ImxhdW5jaCIscz10LldJREdFVD0id2lkZ2V0IixpPXQuRklMVEVSPSJmaWx0ZXIiLGE9dC5JTVBPUlQ9ImltcG9ydCIsbD10LlBST0pFQ1Q9InByb2plY3QiLHU9dC5VU0VSX0ZJTFRFUj0idXNlckZpbHRlciIsYz10LlRFU1RfSVRFTT0idGVzdEl0ZW0iLGQ9dC5FWFRFUk5BTF9TWVNURU09ImV4dGVybmFsU3lzdGVtIixfPXQuREVGRUNUX1RZUEU9ImRlZmVjdFR5cGUiLHA9dC5VU0VSPSJ1c2VyIixmPXQuRU1BSUxfQ09ORklHPSJlbWFpbENvbmZpZyIsbT10LklURU1fSVNTVUU9Iml0ZW1Jc3N1ZSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkRBU0hCT0FSRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkxBVU5DSCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIldJREdFVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIklNUE9SVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlBST0pFQ1QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZXZlbnRzT2JqZWN0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJVU0VSX0ZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlRFU1RfSVRFTSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkVYVEVSTkFMX1NZU1RFTSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkRFRkVDVF9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2V2ZW50c09iamVjdFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiVVNFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkVNQUlMX0NPTkZJRyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9ldmVudHNPYmplY3RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIklURU1fSVNTVUUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZXZlbnRzT2JqZWN0VHlwZXMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2ZpbGVUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5YTUw9InhtbCIsbz10LkhUTUw9Imh0bWwiLHM9dC5KQVZBU0NSSVBUPSJqYXZhc2NyaXB0IixpPXQuSlNPTj0ianNvbiIsYT10LkNTUz0iY3NzIixsPXQuQ1NWPSJjc3YiLHU9dC5QSFA9InBocCIsYz10LkhBUj0iaGFyIixkPXQuVFhUPSJ0eHQiLF89dC5aSVA9InppcCIscD10LlJBUj0icmFyIixmPXQuVEdaPSJ0Z3oiLG09dC5UQVo9InRheiIsaD10LlRBUj0idGFyIixnPXQuR1pJUD0iZ3ppcCIsYj10LlBMQUlOPSJwbGFpbiIsRT10LklNQUdFPSJpbWFnZSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlhNTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJIVE1MIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2ZpbGVUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkpBVkFTQ1JJUFQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiSlNPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJDU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQ1NWIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2ZpbGVUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlBIUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJIQVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiVFhUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2ZpbGVUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIlpJUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJSQVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiVEdaIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2ZpbGVUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIlRBWiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJUQVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiR1pJUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJQTEFJTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJJTUFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2ludGVncmF0aW9uc05hbWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkpJUkE9IkpJUkEiLG89dC5SQUxMWT0iUkFMTFkiLHM9dC5FTUFJTD0iZW1haWwiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJKSVJBIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2ludGVncmF0aW9uc05hbWVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiUkFMTFkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvaW50ZWdyYXRpb25zTmFtZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJFTUFJTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9pbnRlZ3JhdGlvbnNOYW1lcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoQW5hbHl6ZVR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkxBVU5DSF9BTkFMWVpFX1RZUEVTPXtBTkFMWVpFUl9NT0RFOntBTEw6IkFMTCIsTEFVTkNIX05BTUU6IkxBVU5DSF9OQU1FIixDVVJSRU5UX0xBVU5DSDoiQ1VSUkVOVF9MQVVOQ0gifSxBTkFMWVpFX0lURU1TX01PREU6e1RPX0lOVkVTVElHQVRFOiJUT19JTlZFU1RJR0FURSIsQVVUT19BTkFMWVpFRDoiQVVUT19BTkFMWVpFRCIsTUFOVUFMTFlfQU5BTFlaRUQ6Ik1BTlVBTExZX0FOQUxZWkVEIn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkxBVU5DSF9BTkFMWVpFX1RZUEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaEFuYWx5emVUeXBlcy5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hJdGVtVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTEFVTkNIX0lURU1fVFlQRVM9e2xhdW5jaDoibGF1bmNoIixpdGVtOiJpdGVtIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiTEFVTkNIX0lURU1fVFlQRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoSXRlbVR5cGVzLmpzIil9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaExldmVscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5MRVZFTF9MQVVOQ0g9IkxBVU5DSCIsbz10LkxFVkVMX1NVSVRFPSJTVUlURSIscz10LkxFVkVMX1RFU1Q9IlRFU1QiLGk9dC5MRVZFTF9TVEVQPSJTVEVQIixhPXQuTEVWRUxfTE9HPSJMT0ciOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJMRVZFTF9MQVVOQ0giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoTGV2ZWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiTEVWRUxfU1VJVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoTGV2ZWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiTEVWRUxfVEVTVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hMZXZlbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJMRVZFTF9TVEVQIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaExldmVscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkxFVkVMX0xPRyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hMZXZlbHMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkZBSUxFRD0iZmFpbGVkIixvPXQuUEFTU0VEPSJwYXNzZWQiLHM9dC5TS0lQUEVEPSJza2lwcGVkIixpPXQuSU5URVJSVVBURUQ9ImludGVycnVwdGVkIixhPXQuSU5fUFJPR1JFU1M9ImluX3Byb2dyZXNzIixsPXQuU1RPUFBFRD0ic3RvcHBlZCIsdT10LlJFU0VURUQ9InJlc2V0ZWQiLGM9dC5NQU5ZPSJtYW55IixkPXQuTk9UX0ZPVU5EPSJub3RfZm91bmQiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJGQUlMRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJQQVNTRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJTS0lQUEVEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiSU5URVJSVVBURUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJJTl9QUk9HUkVTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hTdGF0dXNlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlNUT1BQRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJSRVNFVEVEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiTUFOWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hTdGF0dXNlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIk5PVF9GT1VORCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hTdGF0dXNlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxTdG9yYWdlS2V5cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5BUFBMSUNBVElPTl9TRVRUSU5HUz0iYXBwbGljYXRpb25TZXR0aW5ncyI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiQVBQTElDQVRJT05fU0VUVElOR1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxTdG9yYWdlS2V5cy5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2NhbGl6YXRpb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ09NTU9OX0xPQ0FMRV9LRVlTPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLG89dC5DT01NT05fTE9DQUxFX0tFWVM9KDAsci5kZWZpbmVNZXNzYWdlcykoe0RFTEVURTp7aWQ6IkNvbW1vbi5kZWxldGUiLGRlZmF1bHRNZXNzYWdlOiJEZWxldGUifSxDQU5DRUw6e2lkOiJDb21tb24uY2FuY2VsIixkZWZhdWx0TWVzc2FnZToiQ2FuY2VsIn0sVVBEQVRFOntpZDoiQ29tbW9uLnVwZGF0ZSIsZGVmYXVsdE1lc3NhZ2U6IlVwZGF0ZSJ9LFNBVkU6e2lkOiJDb21tb24uc2F2ZSIsZGVmYXVsdE1lc3NhZ2U6IlNhdmUifSxDT05GSVJNOntpZDoiQ29tbW9uLmNvbmZpcm0iLGRlZmF1bHRNZXNzYWdlOiJDb25maXJtIn0sRklOSVNIOntpZDoiQ29tbW9uLmZpbmlzaCIsZGVmYXVsdE1lc3NhZ2U6IkZpbmlzaCJ9LE1PVkU6e2lkOiJDb21tb24ubW92ZSIsZGVmYXVsdE1lc3NhZ2U6Ik1vdmUifSxTVUJNSVQ6e2lkOiJDb21tb24uc3VibWl0IixkZWZhdWx0TWVzc2FnZToiU3VibWl0In0sTUVSR0U6e2lkOiJDb21tb24ubWVyZ2UiLGRlZmF1bHRNZXNzYWdlOiJNZXJnZSJ9LElOVklURTp7aWQ6IkNvbW1vbi5pbnZpdGUiLGRlZmF1bHRNZXNzYWdlOiJJbnZpdGUifSxPSzp7aWQ6IkNvbW1vbi5vayIsZGVmYXVsdE1lc3NhZ2U6Ik9rIn0sQ0xPU0VfTU9EQUxfV0FSTklORzp7aWQ6IkNvbW1vbi5jbG9zZU1vZGFsV2FybmluZyIsZGVmYXVsdE1lc3NhZ2U6IllvdSBoYXZlIHRvIHNhdmUgY2hhbmdlcyBvciBjYW5jZWwgdGhlbSBiZWZvcmUgY2xvc2luZyB0aGUgd2luZG93In0sRElTQ0FSRDp7aWQ6IkNvbW1vbi5kaXNjYXJkIixkZWZhdWx0TWVzc2FnZToiRGlzY2FyZCJ9LEVESVQ6e2lkOiJDb21tb24uZWRpdCIsZGVmYXVsdE1lc3NhZ2U6IkVkaXQifSxDTE9ORTp7aWQ6IkNvbW1vbi5jbG9uZSIsZGVmYXVsdE1lc3NhZ2U6IkNsb25lIn0sQUREOntpZDoiQ29tbW9uLmFkZCIsZGVmYXVsdE1lc3NhZ2U6IkFkZCJ9LFNFQ09ORFM6e2lkOiJDb21tb24uc2Vjb25kcyIsZGVmYXVsdE1lc3NhZ2U6InNlY29uZHMifSxOT19SRVNVTFRTOntpZDoiQ29tbW9uLm5vUmVzdWx0cyIsZGVmYXVsdE1lc3NhZ2U6Ik5vIHJlc3VsdHMgZm91bmQifX0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkNPTU1PTl9MT0NBTEVfS0VZUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2NhbGl6YXRpb24uanMiKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9nTGV2ZWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkVSUk9SPSJFUlJPUiIsbz10LkZBVEFMPSJGQVRBTCIscz10LkRFQlVHPSJERUJVRyIsaT10LldBUk49IldBUk4iLGE9dC5JTkZPPSJJTkZPIixsPXQuVFJBQ0U9IlRSQUNFIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiRVJST1IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbG9nTGV2ZWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiRkFUQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbG9nTGV2ZWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiREVCVUciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbG9nTGV2ZWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiV0FSTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2dMZXZlbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJJTkZPIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xvZ0xldmVscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlRSQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL2xvZ0xldmVscy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuQkVGT1JFX1NVSVRFPSJCRUZPUkVfU1VJVEUiLG89dC5CRUZPUkVfR1JPVVBTPSJCRUZPUkVfR1JPVVBTIixzPXQuQkVGT1JFX0NMQVNTPSJCRUZPUkVfQ0xBU1MiLGk9dC5CRUZPUkVfVEVTVD0iQkVGT1JFX1RFU1QiLGE9dC5URVNUPSJURVNUIixsPXQuQkVGT1JFX01FVEhPRD0iQkVGT1JFX01FVEhPRCIsdT10LlNURVA9IlNURVAiLGM9dC5BRlRFUl9NRVRIT0Q9IkFGVEVSX01FVEhPRCIsZD10LkFGVEVSX1RFU1Q9IkFGVEVSX1RFU1QiLF89dC5BRlRFUl9DTEFTUz0iQUZURVJfQ0xBU1MiLHA9dC5BRlRFUl9HUk9VUFM9IkFGVEVSX0dST1VQUyIsZj10LkFGVEVSX1NVSVRFPSJBRlRFUl9TVUlURSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkJFRk9SRV9TVUlURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkJFRk9SRV9HUk9VUFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJCRUZPUkVfQ0xBU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJCRUZPUkVfVEVTVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIlRFU1QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJCRUZPUkVfTUVUSE9EIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL21ldGhvZFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiU1RFUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkFGVEVSX01FVEhPRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkFGVEVSX1RFU1QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJBRlRFUl9DTEFTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkFGVEVSX0dST1VQUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkFGVEVSX1NVSVRFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL21ldGhvZFR5cGVzLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlc0xvY2FsaXphdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tZXRob2RUeXBlc0xvY2FsaXphdGlvbj12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGE9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9tZXRob2RUeXBlcy5qcyIpLGw9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShhKSx1PXQubWV0aG9kVHlwZXNMb2NhbGl6YXRpb249KDAsaS5kZWZpbmVNZXNzYWdlcykoKHI9e30sKDAscy5kZWZhdWx0KShyLGwuVEVTVCx7aWQ6Ik1ldGhvZFR5cGVzLnRlc3QiLGRlZmF1bHRNZXNzYWdlOiJUZXN0IGNsYXNzIn0pLCgwLHMuZGVmYXVsdCkocixsLlNURVAse2lkOiJNZXRob2RUeXBlcy5zdGVwIixkZWZhdWx0TWVzc2FnZToiVGVzdCJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5BRlRFUl9DTEFTUyx7aWQ6Ik1ldGhvZFR5cGVzLmFmdGVyQ2xhc3MiLGRlZmF1bHRNZXNzYWdlOiJBZnRlciBjbGFzcyJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5BRlRFUl9HUk9VUFMse2lkOiJNZXRob2RUeXBlcy5hZnRlckdyb3VwcyIsZGVmYXVsdE1lc3NhZ2U6IkFmdGVyIGdyb3VwcyJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5BRlRFUl9NRVRIT0Qse2lkOiJNZXRob2RUeXBlcy5hZnRlck1ldGhvZCIsZGVmYXVsdE1lc3NhZ2U6IkFmdGVyIG1ldGhvZCJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5BRlRFUl9TVUlURSx7aWQ6Ik1ldGhvZFR5cGVzLmFmdGVyU3VpdGUiLGRlZmF1bHRNZXNzYWdlOiJBZnRlciBzdWl0ZSJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5BRlRFUl9URVNULHtpZDoiTWV0aG9kVHlwZXMuYWZ0ZXJUZXN0IixkZWZhdWx0TWVzc2FnZToiQWZ0ZXIgdGVzdCJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5CRUZPUkVfQ0xBU1Mse2lkOiJNZXRob2RUeXBlcy5iZWZvcmVDbGFzcyIsZGVmYXVsdE1lc3NhZ2U6IkJlZm9yZSBjbGFzcyJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5CRUZPUkVfR1JPVVBTLHtpZDoiTWV0aG9kVHlwZXMuYmVmb3JlR3JvdXBzIixkZWZhdWx0TWVzc2FnZToiQmVmb3JlIGdyb3VwcyJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5CRUZPUkVfTUVUSE9ELHtpZDoiTWV0aG9kVHlwZXMuYmVmb3JlTWV0aG9kIixkZWZhdWx0TWVzc2FnZToiQmVmb3JlIE1ldGhvZCJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5CRUZPUkVfU1VJVEUse2lkOiJNZXRob2RUeXBlcy5iZWZvcmVTdWl0ZSIsZGVmYXVsdE1lc3NhZ2U6IkJlZm9yZSBzdWl0ZSJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5CRUZPUkVfVEVTVCx7aWQ6Ik1ldGhvZFR5cGVzLmJlZm9yZVRlc3QiLGRlZmF1bHRNZXNzYWdlOiJCZWZvcmUgdGVzdCJ9KSxyKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwibWV0aG9kVHlwZXNMb2NhbGl6YXRpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXNMb2NhbGl6YXRpb24uanMiKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcGVybWlzc2lvbnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUEVSTUlTU0lPTlNfTUFQPXQuQUNUSU9OUz10Lk9XTkVSPXQuQUxMPXZvaWQgMDt2YXIgcixvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksdT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGwpLGM9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxkPXQuQUxMPSJBTEwiLF89dC5PV05FUj0iT1dORVIiLHA9dC5BQ1RJT05TPXtBQ0NFU1NfVE9fTUFOQUdFTUVOVF9TWVNURU06IkFDQ0VTU19UT19NQU5BR0VNRU5UX1NZU1RFTSIsQ1JFQVRFX1BST0pFQ1Q6IkNSRUFURV9QUk9KRUNUIixERUxFVEVfUFJPSkVDVDoiREVMRVRFX1BST0pFQ1QiLFVQREFURV9TRVRUSU5HUzoiVVBEQVRFX1NFVFRJTkdTIixTRUVfU0VUVElOR1M6IlNFRV9TRVRUSU5HUyIsQ1JFQVRFX0lOVEVSTkFMX1VTRVI6IkNSRUFURV9JTlRFUk5BTF9VU0VSIixJTlZJVEVfSU5URVJOQUxfVVNFUjoiSU5WSVRFX0lOVEVSTkFMX1VTRVIiLEFTU0lHTl9VTkFTU0lHTl9JTlRFUk5BTF9VU0VSOiJBU1NJR05fVU5BU1NJR05fSU5URVJOQUxfVVNFUiIsQ0hBTkdFX1VTRVJfUk9MRToiQ0hBTkdFX1VTRVJfUk9MRSIsREVMRVRFX1VTRVI6IkRFTEVURV9VU0VSIixTRUVfTUVNQkVSUzoiU0VFX01FTUJFUlMiLEVESVRfT1dOX0FDQ09VTlQ6IkVESVRfT1dOX0FDQ09VTlQiLERFTEVURV9MQVVOQ0g6IkRFTEVURV9MQVVOQ0giLEVESVRfTEFVTkNIOiJFRElUX0xBVU5DSCIsRk9SQ0VfRklOSVNIX0xBVU5DSDoiRk9SQ0VfRklOSVNIX0xBVU5DSCIsU1RBUlRfQU5BTFlTSVM6IlNUQVJUX0FOQUxZU0lTIixERUxFVEVfVEVTVF9JVEVNOiJERUxFVEVfVEVTVF9JVEVNIixNT1ZFX1RPX0RFQlVHOiJNT1ZFX1RPX0RFQlVHIixNRVJHRV9MQVVOQ0hFUzoiTUVSR0VfTEFVTkNIRVMiLFdPUktfV0lUSF9GSUxURVJTOiJXT1JLX1dJVEhfRklMVEVSUyIsUkVBRF9EQVRBOiJSRUFEX0RBVEEiLFJFU0laRV9BTkRfRFJBR19XSURHRVRTOiJSRVNJWkVfQU5EX0RSQUdfV0lER0VUUyIsREVMRVRFX1dJREdFVDoiREVMRVRFX1dJREdFVCIsREVMRVRFX0RBU0hCT0FSRDoiREVMRVRFX0RBU0hCT0FSRCIsREVMRVRFX0ZJTFRFUjoiREVMRVRFX0ZJTFRFUiIsU0VFX0RFTU9fREFUQToiU0VFX0RFTU9fREFUQSIsQ09ORklHVVJFX0VNQUlMX05PVElGSUNBVElPTjoiQ09ORklHVVJFX0VNQUlMX05PVElGSUNBVElPTiJ9LGY9dC5QRVJNSVNTSU9OU19NQVA9KGE9e30sKDAsdS5kZWZhdWx0KShhLGMuUFJPSkVDVF9NQU5BR0VSLChyPXt9LCgwLHUuZGVmYXVsdCkocixwLlVQREFURV9TRVRUSU5HUyxkKSwoMCx1LmRlZmF1bHQpKHIscC5TRUVfU0VUVElOR1MsZCksKDAsdS5kZWZhdWx0KShyLHAuSU5WSVRFX0lOVEVSTkFMX1VTRVIsZCksKDAsdS5kZWZhdWx0KShyLHAuQVNTSUdOX1VOQVNTSUdOX0lOVEVSTkFMX1VTRVIsZCksKDAsdS5kZWZhdWx0KShyLHAuQ0hBTkdFX1VTRVJfUk9MRSxkKSwoMCx1LmRlZmF1bHQpKHIscC5TRUVfTUVNQkVSUyxkKSwoMCx1LmRlZmF1bHQpKHIscC5FRElUX09XTl9BQ0NPVU5ULGQpLCgwLHUuZGVmYXVsdCkocixwLkRFTEVURV9MQVVOQ0gsZCksKDAsdS5kZWZhdWx0KShyLHAuRURJVF9MQVVOQ0gsZCksKDAsdS5kZWZhdWx0KShyLHAuRk9SQ0VfRklOSVNIX0xBVU5DSCxkKSwoMCx1LmRlZmF1bHQpKHIscC5TVEFSVF9BTkFMWVNJUyxkKSwoMCx1LmRlZmF1bHQpKHIscC5ERUxFVEVfVEVTVF9JVEVNLGQpLCgwLHUuZGVmYXVsdCkocixwLk1PVkVfVE9fREVCVUcsZCksKDAsdS5kZWZhdWx0KShyLHAuTUVSR0VfTEFVTkNIRVMsZCksKDAsdS5kZWZhdWx0KShyLHAuV09SS19XSVRIX0ZJTFRFUlMsZCksKDAsdS5kZWZhdWx0KShyLHAuUkVBRF9EQVRBLGQpLCgwLHUuZGVmYXVsdCkocixwLlJFU0laRV9BTkRfRFJBR19XSURHRVRTLF8pLCgwLHUuZGVmYXVsdCkocixwLkRFTEVURV9XSURHRVQsZCksKDAsdS5kZWZhdWx0KShyLHAuREVMRVRFX0RBU0hCT0FSRCxkKSwoMCx1LmRlZmF1bHQpKHIscC5ERUxFVEVfRklMVEVSLGQpLCgwLHUuZGVmYXVsdCkocixwLlNFRV9ERU1PX0RBVEEsZCksKDAsdS5kZWZhdWx0KShyLHAuQ09ORklHVVJFX0VNQUlMX05PVElGSUNBVElPTixkKSxyKSksKDAsdS5kZWZhdWx0KShhLGMuTUVNQkVSLChvPXt9LCgwLHUuZGVmYXVsdCkobyxwLlNFRV9TRVRUSU5HUyxkKSwoMCx1LmRlZmF1bHQpKG8scC5TRUVfTUVNQkVSUyxkKSwoMCx1LmRlZmF1bHQpKG8scC5FRElUX09XTl9BQ0NPVU5ULGQpLCgwLHUuZGVmYXVsdCkobyxwLkRFTEVURV9MQVVOQ0gsXyksKDAsdS5kZWZhdWx0KShvLHAuRURJVF9MQVVOQ0gsXyksKDAsdS5kZWZhdWx0KShvLHAuRk9SQ0VfRklOSVNIX0xBVU5DSCxfKSwoMCx1LmRlZmF1bHQpKG8scC5TVEFSVF9BTkFMWVNJUyxkKSwoMCx1LmRlZmF1bHQpKG8scC5ERUxFVEVfVEVTVF9JVEVNLF8pLCgwLHUuZGVmYXVsdCkobyxwLk1PVkVfVE9fREVCVUcsXyksKDAsdS5kZWZhdWx0KShvLHAuTUVSR0VfTEFVTkNIRVMsXyksKDAsdS5kZWZhdWx0KShvLHAuV09SS19XSVRIX0ZJTFRFUlMsZCksKDAsdS5kZWZhdWx0KShvLHAuUkVBRF9EQVRBLGQpLCgwLHUuZGVmYXVsdCkobyxwLlJFU0laRV9BTkRfRFJBR19XSURHRVRTLF8pLCgwLHUuZGVmYXVsdCkobyxwLkRFTEVURV9XSURHRVQsXyksKDAsdS5kZWZhdWx0KShvLHAuREVMRVRFX0RBU0hCT0FSRCxfKSwoMCx1LmRlZmF1bHQpKG8scC5ERUxFVEVfRklMVEVSLF8pLG8pKSwoMCx1LmRlZmF1bHQpKGEsYy5PUEVSQVRPUiwocz17fSwoMCx1LmRlZmF1bHQpKHMscC5TRUVfU0VUVElOR1MsZCksKDAsdS5kZWZhdWx0KShzLHAuU0VFX01FTUJFUlMsZCksKDAsdS5kZWZhdWx0KShzLHAuRURJVF9PV05fQUNDT1VOVCxkKSwoMCx1LmRlZmF1bHQpKHMscC5TVEFSVF9BTkFMWVNJUyxkKSwoMCx1LmRlZmF1bHQpKHMscC5XT1JLX1dJVEhfRklMVEVSUyxkKSwoMCx1LmRlZmF1bHQpKHMscC5SRUFEX0RBVEEsZCksKDAsdS5kZWZhdWx0KShzLHAuUkVTSVpFX0FORF9EUkFHX1dJREdFVFMsXyksKDAsdS5kZWZhdWx0KShzLHAuREVMRVRFX1dJREdFVCxfKSwoMCx1LmRlZmF1bHQpKHMscC5ERUxFVEVfREFTSEJPQVJELF8pLCgwLHUuZGVmYXVsdCkocyxwLkRFTEVURV9GSUxURVIsXykscykpLCgwLHUuZGVmYXVsdCkoYSxjLkNVU1RPTUVSLChpPXt9LCgwLHUuZGVmYXVsdCkoaSxwLlNFRV9TRVRUSU5HUyxkKSwoMCx1LmRlZmF1bHQpKGkscC5FRElUX09XTl9BQ0NPVU5ULGQpLCgwLHUuZGVmYXVsdCkoaSxwLkRFTEVURV9MQVVOQ0gsXyksKDAsdS5kZWZhdWx0KShpLHAuRURJVF9MQVVOQ0gsXyksKDAsdS5kZWZhdWx0KShpLHAuRk9SQ0VfRklOSVNIX0xBVU5DSCxfKSwoMCx1LmRlZmF1bHQpKGkscC5TVEFSVF9BTkFMWVNJUyxkKSwoMCx1LmRlZmF1bHQpKGkscC5ERUxFVEVfVEVTVF9JVEVNLF8pLCgwLHUuZGVmYXVsdCkoaSxwLk1FUkdFX0xBVU5DSEVTLF8pLCgwLHUuZGVmYXVsdCkoaSxwLldPUktfV0lUSF9GSUxURVJTLGQpLCgwLHUuZGVmYXVsdCkoaSxwLlJFQURfREFUQSxkKSwoMCx1LmRlZmF1bHQpKGkscC5SRVNJWkVfQU5EX0RSQUdfV0lER0VUUyxfKSwoMCx1LmRlZmF1bHQpKGkscC5ERUxFVEVfV0lER0VULF8pLCgwLHUuZGVmYXVsdCkoaSxwLkRFTEVURV9EQVNIQk9BUkQsXyksKDAsdS5kZWZhdWx0KShpLHAuREVMRVRFX0ZJTFRFUixfKSxpKSksYSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkFMTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIk9XTkVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiQUNUSU9OUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIlBFUk1JU1NJT05TX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wZXJtaXNzaW9ucy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcGx1Z2luc0dyb3VwVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTk9USUZJQ0FUSU9OX0dST1VQX1RZUEU9Ik5PVElGSUNBVElPTiIsbz10LkJUU19HUk9VUF9UWVBFPSJCVFMiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJOT1RJRklDQVRJT05fR1JPVVBfVFlQRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wbHVnaW5zR3JvdXBUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkJUU19HUk9VUF9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3BsdWdpbnNHcm91cFR5cGVzLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuUFJPSkVDVF9NQU5BR0VSPSJQUk9KRUNUX01BTkFHRVIiLG89dC5NRU1CRVI9Ik1FTUJFUiIscz10LkNVU1RPTUVSPSJDVVNUT01FUiIsaT10Lk9QRVJBVE9SPSJPUEVSQVRPUiIsYT10LlBST0pFQ1RfUk9MRVM9W3MsaSxvLHJdLGw9dC5ERUZBVUxUX1BST0pFQ1RfUk9MRT1vLHU9dC5ST0xFU19NQVA9W3t2YWx1ZTpzLGxhYmVsOnN9LHt2YWx1ZTppLGxhYmVsOml9LHt2YWx1ZTpvLGxhYmVsOm99LHt2YWx1ZTpyLGxhYmVsOnIuc3BsaXQoIl8iKS5qb2luKCIgIil9XTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiUFJPSkVDVF9NQU5BR0VSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RSb2xlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIk1FTUJFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJDVVNUT01FUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJPUEVSQVRPUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJQUk9KRUNUX1JPTEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RSb2xlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkRFRkFVTFRfUFJPSkVDVF9ST0xFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RSb2xlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlJPTEVTX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RTZWN0aW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5NRU1CRVJTPSJtZW1iZXJzIixvPXQuU0VUVElOR1M9InNldHRpbmdzIixzPXQuRVZFTlRTPSJldmVudHMiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJNRU1CRVJTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RTZWN0aW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlNFVFRJTkdTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Byb2plY3RTZWN0aW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkVWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0U2VjdGlvbnMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkFMTD0iYWxsIixvPXQuTEFURVNUPSJsYXRlc3QiLHM9dC5ORVdfRklMVEVSX1BSRUZJWD0iTmV3X2ZpbHRlciI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkFMTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkxBVEVTVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIk5FV19GSUxURVJfUFJFRklYIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9zY3JlZW5TaXplVmFyaWFibGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LlNDUkVFTl9YU19NQVg9IihtYXgtd2lkdGg6IDc2N3B4KSIsbz10LlNDUkVFTl9TTV9NQVg9IihtYXgtd2lkdGg6IDk5MXB4KSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlNDUkVFTl9YU19NQVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc2NyZWVuU2l6ZVZhcmlhYmxlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlNDUkVFTl9TTV9NQVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc2NyZWVuU2l6ZVZhcmlhYmxlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkdFTkVSQUw9ImdlbmVyYWwiLG89dC5OT1RJRklDQVRJT05TPSJub3RpZmljYXRpb25zIixzPXQuSU5URUdSQVRJT05TPSJpbnRlZ3JhdGlvbnMiLGk9dC5ERUZFQ1Q9ImRlZmVjdCIsYT10LkFOQUxZU0lTPSJhdXRvQW5hbHlzaXMiLGw9dC5ERU1PX0RBVEE9ImRlbW9EYXRhIix1PXQuRU1BSUxfU0VSVkVSPSJlbWFpbCIsYz10LkFVVEhPUklaQVRJT05fQ09ORklHVVJBVElPTj0iYXV0aCIsZD10LlNUQVRJU1RJQ1M9InN0YXRpc3RpY3MiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJHRU5FUkFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIk5PVElGSUNBVElPTlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiSU5URUdSQVRJT05TIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkRFRkVDVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zZXR0aW5nc1RhYnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJBTkFMWVNJUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zZXR0aW5nc1RhYnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJERU1PX0RBVEEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiRU1BSUxfU0VSVkVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkFVVEhPUklaQVRJT05fQ09ORklHVVJBVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zZXR0aW5nc1RhYnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJTVEFUSVNUSUNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TVEFUU19BQl9UT1RBTD0ic3RhdGlzdGljcyRkZWZlY3RzJGF1dG9tYXRpb25fYnVnJHRvdGFsIixvPXQuU1RBVFNfTkRfVE9UQUw9InN0YXRpc3RpY3MkZGVmZWN0cyRub19kZWZlY3QkdG90YWwiLHM9dC5TVEFUU19QQl9UT1RBTD0ic3RhdGlzdGljcyRkZWZlY3RzJHByb2R1Y3RfYnVnJHRvdGFsIixpPXQuU1RBVFNfU0lfVE9UQUw9InN0YXRpc3RpY3MkZGVmZWN0cyRzeXN0ZW1faXNzdWUkdG90YWwiLGE9dC5TVEFUU19USV9UT1RBTD0ic3RhdGlzdGljcyRkZWZlY3RzJHRvX2ludmVzdGlnYXRlJHRvdGFsIixsPXQuU1RBVFNfVE9UQUw9InN0YXRpc3RpY3MkZXhlY3V0aW9ucyR0b3RhbCIsdT10LlNUQVRTX0ZBSUxFRD0ic3RhdGlzdGljcyRleGVjdXRpb25zJGZhaWxlZCIsYz10LlNUQVRTX1BBU1NFRD0ic3RhdGlzdGljcyRleGVjdXRpb25zJHBhc3NlZCIsZD10LlNUQVRTX1NLSVBQRUQ9InN0YXRpc3RpY3MkZXhlY3V0aW9ucyRza2lwcGVkIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiU1RBVFNfQUJfVE9UQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlNUQVRTX05EX1RPVEFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJTVEFUU19QQl9UT1RBTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zdGF0aXN0aWNzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiU1RBVFNfU0lfVE9UQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIlNUQVRTX1RJX1RPVEFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJTVEFUU19UT1RBTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zdGF0aXN0aWNzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiU1RBVFNfRkFJTEVEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJTVEFUU19QQVNTRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlNUQVRTX1NLSVBQRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdHVzTG9jYWxpemF0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnN0YXR1c0xvY2FsaXphdGlvbj12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGE9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy90ZXN0U3RhdHVzZXMuanMiKSxsPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oYSksdT10LnN0YXR1c0xvY2FsaXphdGlvbj0oMCxpLmRlZmluZU1lc3NhZ2VzKSgocj17fSwoMCxzLmRlZmF1bHQpKHIsbC5QQVNTRUQse2lkOiJUZXN0U3RhdHVzZXMucGFzc2VkIixkZWZhdWx0TWVzc2FnZToiUGFzc2VkIn0pLCgwLHMuZGVmYXVsdCkocixsLkZBSUxFRCx7aWQ6IlRlc3RTdGF0dXNlcy5mYWlsZWQiLGRlZmF1bHRNZXNzYWdlOiJGYWlsZWQifSksKDAscy5kZWZhdWx0KShyLGwuSU5fUFJPR1JFU1Mse2lkOiJUZXN0U3RhdHVzZXMuaW5Qcm9ncmVzcyIsZGVmYXVsdE1lc3NhZ2U6IkluIHByb2dyZXNzIn0pLCgwLHMuZGVmYXVsdCkocixsLklOVEVSUlVQVEVELHtpZDoiVGVzdFN0YXR1c2VzLmludGVycnVwdGVkIixkZWZhdWx0TWVzc2FnZToiSW50ZXJydXB0ZWQifSksKDAscy5kZWZhdWx0KShyLGwuU0tJUFBFRCx7aWQ6IlRlc3RTdGF0dXNlcy5za2lwcGVkIixkZWZhdWx0TWVzc2FnZToiU2tpcHBlZCJ9KSwoMCxzLmRlZmF1bHQpKHIsbC5TVE9QUEVELHtpZDoiVGVzdFN0YXR1c2VzLnN0b3BwZWQiLGRlZmF1bHRNZXNzYWdlOiJTdG9wcGVkIn0pLCgwLHMuZGVmYXVsdCkocixsLlJFU0VURUQse2lkOiJUZXN0U3RhdHVzZXMucmVzZXRlZCIsZGVmYXVsdE1lc3NhZ2U6IlJlc2V0ZWQifSkscikpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInN0YXR1c0xvY2FsaXphdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy9zdGF0dXNMb2NhbGl6YXRpb24uanMiKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkZBSUxFRD0iRkFJTEVEIixvPXQuUEFTU0VEPSJQQVNTRUQiLHM9dC5TS0lQUEVEPSJTS0lQUEVEIixpPXQuSU5URVJSVVBURUQ9IklOVEVSUlVQVEVEIixhPXQuSU5fUFJPR1JFU1M9IklOX1BST0dSRVNTIixsPXQuU1RPUFBFRD0iU1RPUFBFRCIsdT10LlJFU0VURUQ9IlJFU0VURUQiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJGQUlMRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiUEFTU0VEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Rlc3RTdGF0dXNlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIlNLSVBQRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiSU5URVJSVVBURUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiSU5fUFJPR1JFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiU1RPUFBFRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy90ZXN0U3RhdHVzZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJSRVNFVEVEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3Rlc3RTdGF0dXNlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvdGltZURhdGVGb3JtYXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuVElNRV9JTlRFUlZBTD0xNSxvPXQuREFURV9GT1JNQVQ9Ik1NLURELVlZWVkiLHM9dC5USU1FX0ZPUk1BVD0iSEg6bW0iLGk9dC5USU1FX0RBVEVfRk9STUFUPSJISDptbSBNTS9ERC9ZWVlZIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiVElNRV9JTlRFUlZBTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy90aW1lRGF0ZUZvcm1hdC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkRBVEVfRk9STUFUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3RpbWVEYXRlRm9ybWF0LmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiVElNRV9GT1JNQVQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvdGltZURhdGVGb3JtYXQuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJUSU1FX0RBVEVfRk9STUFUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3RpbWVEYXRlRm9ybWF0LmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5MQVVOQ0hfU1RBVElTVElDUz0ic3RhdGlzdGljVHJlbmQiLG89dC5PVkVSQUxMX1NUQVRJU1RJQ1M9Im92ZXJhbGxTdGF0aXN0aWNzIixzPXQuTEFVTkNIX0RVUkFUSU9OPSJsYXVuY2hlc0R1cmF0aW9uQ2hhcnQiLGk9dC5MQVVOQ0hfRVhFQ1VUSU9OX0FORF9JU1NVRV9TVEFUSVNUSUNTPSJsYXVuY2hTdGF0aXN0aWNzIixhPXQuUFJPSkVDVF9BQ1RJVklUWT0iYWN0aXZpdHlTdHJlYW0iLGw9dC5URVNUX0NBU0VTX0dST1dUSF9UUkVORD0iY2FzZXNUcmVuZCIsdT10LklOVkVTVElHQVRFRF9QRVJDRU5UQUdFX09GX0xBVU5DSEVTPSJpbnZlc3RpZ2F0ZWRUcmVuZCIsYz10LkxBVU5DSEVTX1RBQkxFPSJsYXVuY2hlc1RhYmxlIixkPXQuVU5JUVVFX0JVR1NfVEFCTEU9InVuaXF1ZUJ1Z1RhYmxlIixfPXQuTU9TVF9GQUlMRURfVEVTVF9DQVNFU19UQUJMRT0idG9wVGVzdENhc2VzIixwPXQuRkFJTEVEX0NBU0VTX1RSRU5EPSJidWdUcmVuZCIsZj10Lk5PTl9QQVNTRURfVEVTVF9DQVNFU19UUkVORD0ibm90UGFzc2VkIixtPXQuRElGRkVSRU5UX0xBVU5DSEVTX0NPTVBBUklTT049ImxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0IixoPXQuUEFTU0lOR19SQVRFX1BFUl9MQVVOQ0g9InBhc3NpbmdSYXRlUGVyTGF1bmNoIixnPXQuUEFTU0lOR19SQVRFX1NVTU1BUlk9InBhc3NpbmdSYXRlU3VtbWFyeSIsYj10LkZMQUtZX1RFU1RfQ0FTRVNfVEFCTEU9ImZsYWt5VGVzdENhc2VzIixFPXQuQ1VNVUxBVElWRV9UUkVORD0iY3VtdWxhdGl2ZSIseT10LlBST0RVQ1RfU1RBVFVTPSJwcm9kdWN0U3RhdHVzIix2PXQuTU9TVF9USU1FX0NPTlNVTUlORz0ibW9zdFRpbWVDb25zdW1pbmciOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJMQVVOQ0hfU1RBVElTVElDUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIk9WRVJBTExfU1RBVElTVElDUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkxBVU5DSF9EVVJBVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkxBVU5DSF9FWEVDVVRJT05fQU5EX0lTU1VFX1NUQVRJU1RJQ1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJQUk9KRUNUX0FDVElWSVRZIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiVEVTVF9DQVNFU19HUk9XVEhfVFJFTkQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJJTlZFU1RJR0FURURfUEVSQ0VOVEFHRV9PRl9MQVVOQ0hFUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkxBVU5DSEVTX1RBQkxFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiVU5JUVVFX0JVR1NfVEFCTEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJNT1NUX0ZBSUxFRF9URVNUX0NBU0VTX1RBQkxFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiRkFJTEVEX0NBU0VTX1RSRU5EIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiTk9OX1BBU1NFRF9URVNUX0NBU0VTX1RSRU5EIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiRElGRkVSRU5UX0xBVU5DSEVTX0NPTVBBUklTT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJQQVNTSU5HX1JBVEVfUEVSX0xBVU5DSCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIlBBU1NJTkdfUkFURV9TVU1NQVJZIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYiwiRkxBS1lfVEVTVF9DQVNFU19UQUJMRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsIkNVTVVMQVRJVkVfVFJFTkQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJQUk9EVUNUX1NUQVRVUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL2NvbnN0YW50cy93aWRnZXRUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsIk1PU1RfVElNRV9DT05TVU1JTkciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi9jb25zdGFudHMvd2lkZ2V0VHlwZXMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vY3NzL2NvbW1vbi5zY3NzIjpmdW5jdGlvbihlLHQpe30sIi4vc3JjL2NvbW1vbi9jc3MvZm9udHMvZm9udHMuc2NzcyI6ZnVuY3Rpb24oZSx0KXt9LCIuL3NyYy9jb21tb24vaW1nL2FkZC1maWx0ZXItaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSItMiAtMyAyMCAyMCI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTIgMEw2Ljk3OSA2LjA1NnY2Ljk4NmwtMi45MjgtMi4yM1Y2LjAwN0wwIDB6Ij48L3BhdGg+PHBhdGggZD0iTTEyLjggOS4yVjZoLTEuNnYzLjJIOHYxLjZoMy4yVjE0aDEuNnYtMy4ySDE2VjkuMnoiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvYWRkLXByb2plY3QtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDIwIDIwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMCAtNSkiPjx1c2UgZmlsbD0iIzAwMCIgZmlsdGVyPSJ1cmwoI2EpIiB4bGluazpocmVmPSIjYiI+PC91c2U+PHVzZSBmaWxsPSIjRkZGIiB4bGluazpocmVmPSIjYiI+PC91c2U+PC9nPjxwYXRoIGZpbGw9IiMxQTlDQjAiIGQ9Ik0xMiAySDZjLTEuMjczIDAtMS45OTIuNzE2LTIgMnYxMmMwIDEuMjg0LjcyIDIgMiAyaDljMS4yNzMgMCAyLS43MTYgMi0yVjdsLTUtNXptLTEgMTF2MmgtMXYtMkg4di0xaDJ2LTJoMXYyaDJ2MWgtMnptMC02VjNsNCA0aC00eiI+PC9wYXRoPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9hZGQtdXNlci1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PHRpdGxlPjEyMzwvdGl0bGU+PGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+PGcgaWQ9IjEyMyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgaWQ9ImljLWFkZC11c2VyLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLCAxLjAwMDAwMCkiIGZpbGw9IiMxQTlDQjAiPjxwYXRoIGQ9Ik00LjgsMSBMNC44LDQuMiBMOCw0LjIgTDgsNS44IEw0LjgsNS44IEw0LjgsOSBMMy4yLDkgTDMuMiw1LjggTDAsNS44IEwwLDQuMiBMMy4yLDQuMiBMMy4yLDEgTDQuOCwxIFogTTEzLjA5LDYuOTEgQzEyLjE3Mzc2OSw2LjkxMDAwMDA0IDExLjI5NTA3OSw2LjU0NTk2MDI0IDEwLjY0NzI5OTYsNS44OTc5OTMyOSBDOS45OTk1MjAxNSw1LjI1MDAyNjM1IDkuNjM1NzM0NzMsNC4zNzEyMzEgOS42MzYsMy40NTUgQzkuNjM1NzM0NjQsMi41Mzg1OTU3MSA5Ljk5OTY1NzMxLDEuNjU5NjQ4NzUgMTAuNjQ3NjUzLDEuMDExNjUzMDMgQzExLjI5NTY0ODgsMC4zNjM2NTczMTUgMTIuMTc0NTk1NywtMC4wMDAyNjUzNTUyNDkgMTMuMDkxLDAgQzE0LjAwNzIzMSwtMy44Mzk5OTIzMmUtMDggMTQuODg1OTIxLDAuMzY0MDM5NzU2IDE1LjUzMzcwMDQsMS4wMTIwMDY3MSBDMTYuMTgxNDc5OCwxLjY1OTk3MzY1IDE2LjU0NTI2NTMsMi41Mzg3NjkgMTYuNTQ1LDMuNDU1IEMxNi41NDUsNC4zNzEwNTc3NiAxNi4xODEwOTc1LDUuMjQ5NTk2MTcgMTUuNTMzMzQ2OCw1Ljg5NzM0NjgyIEMxNC44ODU1OTYyLDYuNTQ1MDk3NDcgMTQuMDA3MDU3OCw2LjkwOSAxMy4wOTEsNi45MDkgTDEzLjA5LDYuOTEgWiBNNi4xODIsMTIuMDkgQzYuMTgyLDkuNzk0IDEwLjc4NSw4LjYzNiAxMy4wOTEsOC42MzYgQzE1LjM5Nyw4LjYzNiAyMCw5Ljc5NCAyMCwxMi4wOTEgTDIwLDE0LjAwNSBMNi4xODEsMTQuMDA1IEw2LjE4MSwxMi4wOSBMNi4xODIsMTIuMDkgWiIgaWQ9IlNoYXBlIj48L3BhdGg+PC9nPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9hcnJvdy1kb3duLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEyIDgiPjxwb2x5Z29uIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxLjQxNSAwIDAgMS40MTUgNiA3LjQxNSAxMiAxLjQxNSAxMC41ODUgMCA2IDQuNTg1Ij48L3BvbHlnb24+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvYXJyb3ctbGVmdC1zbWFsbC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii03IC01IDIwIDIwIj48cG9seWdvbiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iMTIgMTguOTM5IDE1LjI0NiAxNS41IDEyIDEyLjA2MSAxMy4wMDIgMTEgMTcuMjUgMTUuNSAxMy4wMDIgMjAiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDE3LjI1IC0xMSkiPjwvcG9seWdvbj48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9hcnJvdy1yaWdodC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTE0IDI5LjE3TDIyLjY1NyAyMCAxNCAxMC44MyAxNi42NzIgOCAyOCAyMCAxNi42NzIgMzJ6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvYXJyb3ctcmlnaHQtc21hbGwtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSItNyAtNSAyMCAyMCI+PHBvbHlnb24gZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjEyIDE4LjkzOSAxNS4yNDYgMTUuNSAxMiAxMi4wNjEgMTMuMDAyIDExIDE3LjI1IDE1LjUgMTMuMDAyIDIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAgLTExKSI+PC9wb2x5Z29uPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnQtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTEgMjAiPjxwYXRoIGQ9Ik05LjUgMTVjMCAyLjAxLTEuNzkgMy42MzYtNCAzLjYzNnMtNC0xLjYyNy00LTMuNjM2VjMuNjM2YzAtMS4yNTQgMS4xMi0yLjI3MiAyLjUtMi4yNzJzMi41IDEuMDE4IDIuNSAyLjI3MnY5LjU0NmMwIC41LS40NDUuOTA5LTEgLjkwOS0uNTU1IDAtMS0uNDEtMS0uOTFWNC41NDZIM3Y4LjYzN2MwIDEuMjU0IDEuMTIgMi4yNzMgMi41IDIuMjczUzggMTQuNDM2IDggMTMuMTgyVjMuNjM2QzggMS42MjcgNi4yMSAwIDQgMFMwIDEuNjI3IDAgMy42MzZWMTVjMCAyLjc2NCAyLjQ2NSA1IDUuNSA1czUuNS0yLjIzNiA1LjUtNVY0LjU0NUg5LjVWMTV6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvYXR0YWNobWVudHMvYXJjaGl2ZS5zdmciOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9hcmNoaXZlLnN2ZyJ9LCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2F0dGFjaG1lbnQuc3ZnIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsibWVkaWEvYXR0YWNobWVudC5zdmcifSwiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy9jc3Muc3ZnIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsibWVkaWEvY3NzLnN2ZyJ9LCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2Nzdi5zdmciOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9jc3Yuc3ZnIn0sIi4vc3JjL2NvbW1vbi9pbWcvYXR0YWNobWVudHMvaGFyLnN2ZyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArIm1lZGlhL2hhci5zdmcifSwiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy9odG1sLnN2ZyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArIm1lZGlhL2h0bWwuc3ZnIn0sIi4vc3JjL2NvbW1vbi9pbWcvYXR0YWNobWVudHMvanMuc3ZnIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsibWVkaWEvanMuc3ZnIn0sIi4vc3JjL2NvbW1vbi9pbWcvYXR0YWNobWVudHMvanNvbi5zdmciOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9qc29uLnN2ZyJ9LCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL3BocC5zdmciOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9waHAuc3ZnIn0sIi4vc3JjL2NvbW1vbi9pbWcvYXR0YWNobWVudHMvdHh0LnN2ZyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArIm1lZGlhL3R4dC5zdmcifSwiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy94bWwuc3ZnIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsibWVkaWEveG1sLnN2ZyJ9LCIuL3NyYy9jb21tb24vaW1nL2Jpbi1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE0IDdMNiA3IDYgMTcgMTQgMTcgMTQgN3pNNiAxOUM0LjkgMTkgNCAxOC4xMDAwMDA1IDQgMTdMNCA1IDE2IDUgMTYgMTdDMTYgMTguMTAwMDAwNSAxNS4xIDE5IDE0IDE5TDYgMTl6TTcuMzI4NDI3MTIgNEw2LjkxNDIxMzU2IDQgMTIuNjcxNTcyOSA0IDcuMzI4NDI3MTIgNHpNMTYuMTI1IDJMMTUuMjUgMiAxNi4xMjUgMnpNMTYuMTI1IDJMMTcgMiAxNyA0IDE3IDIgMTYuMTI1IDJ6TTYuNSAyTDMgMiA2LjUgMnpNMTMuNSAyTDE3IDIgMTcgNCAzIDQgMyAyIDYuNSAyIDcuNSAxIDEyLjUgMSAxMy41IDJ6Ij48L3BhdGg+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iNiIgeD0iOCIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjYiIHg9IjExIiB5PSI5Ij48L3JlY3Q+PC9nPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2J1Zy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZD0iTTE2LjY2NyA2LjY2N2gtMi4zNDJhNC45ODcgNC45ODcgMCAwIDAtMS41MTctMS42MzRsMS4zNTktMS4zNThMMTIuOTkyIDIuNWwtMS44MDkgMS44MDhBNS4wNTUgNS4wNTUgMCAwIDAgMTAgNC4xNjdjLS40MDggMC0uOC4wNS0xLjE3NS4xNDFMNy4wMDggMi41IDUuODMzIDMuNjc1bDEuMzUgMS4zNThhNS4wNTIgNS4wNTIgMCAwIDAtMS41MDggMS42MzRIMy4zMzN2MS42NjZoMS43NDJjLS4wNDIuMjc1LS4wNzUuNTUtLjA3NS44MzRWMTBIMy4zMzN2MS42NjdINXYuODMzYzAgLjI4My4wMzMuNTU4LjA3NS44MzNIMy4zMzNWMTVoMi4zNDJBNC45OTcgNC45OTcgMCAwIDAgMTAgMTcuNWE0Ljk5NyA0Ljk5NyAwIDAgMCA0LjMyNS0yLjVoMi4zNDJ2LTEuNjY3aC0xLjc0MmMuMDQyLS4yNzUuMDc1LS41NS4wNzUtLjgzM3YtLjgzM2gxLjY2N1YxMEgxNXYtLjgzM2MwLS4yODQtLjAzMy0uNTU5LS4wNzUtLjgzNGgxLjc0MlY2LjY2N3ptLTUgNi42NjZIOC4zMzN2LTEuNjY2aDMuMzM0djEuNjY2em0wLTMuMzMzSDguMzMzVjguMzMzaDMuMzM0VjEweiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2NpcmNsZS1jaGVjay1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBzdHJva2U9IiM5OTkiIGZpbGwtcnVsZT0ibm9uemVybyIgY3g9IjEwIiBjeT0iMTAiIHI9IjkuNSI+PC9jaXJjbGU+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDUuMDAwMDAwKSIgZmlsbD0iIzk5OSIgZmlsbC1ydWxlPSJub256ZXJvIj48cG9seWdvbiBwb2ludHM9IjEgNS41IDQuMzc1IDkgMTAgMy4xNjY2NjY2NyA4Ljg3NSAyIDQuMzc1IDYuNjY2NjY2NjcgMi4xMjUgNC4zMzMzMzMzMyI+PC9wb2x5Z29uPjwvZz48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvY2lyY2xlLWNyb3NzLWljb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjOTk5IiBkPSJNMTAgMS4wOTljLTQuOTA4IDAtOC45MDEgMy45OTMtOC45MDEgOC45MDEgMCA0LjkwOCAzLjk5MyA4LjkwMSA4LjkwMSA4LjkwMSA0LjkwOCAwIDguOTAxLTMuOTkzIDguOTAxLTguOTAxIDAtNC45MDgtMy45OTMtOC45MDEtOC45MDEtOC45MDFNMTAgMjBDNC40ODYgMjAgMCAxNS41MTQgMCAxMFM0LjQ4NiAwIDEwIDBzMTAgNC40ODYgMTAgMTAtNC40ODYgMTAtMTAgMTAiPjwvcGF0aD48cGF0aCBmaWxsPSIjOTk5IiBkPSJNNS45ODIgMTQuNzM3bC0uNzE5LS43MiA4Ljc1NS04Ljc1NC43MTkuNzJ6Ij48L3BhdGg+PHBhdGggZmlsbD0iIzk5OSIgZD0iTTE0LjAxOCAxNC43MzdMNS4yNjMgNS45ODNsLjcyLS43MiA4Ljc1NCA4Ljc1NHoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9jbG9jay1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZD0iTTkuOTk1IDBDNC40NyAwIDAgNC40NzUgMCAxMHM0LjQ3IDEwIDkuOTk1IDEwQzE1LjUyIDIwIDIwIDE1LjUyNSAyMCAxMFMxNS41MiAwIDkuOTk1IDB6TTEwIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIOXY1LjkwMkwxNC4yNDUgMTQgMTUgMTIuNzlsLTQuNS0yLjYyNlY1eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2Nsb25lLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjk2OCA1LjAwN0gyVjE2LjRBMS42IDEuNiAwIDAgMCAzLjYgMThoMTEuMzkydi0xLjk2M0gzLjk2OFY1LjAwN3ptMy42NTctMy4wMDFDNi43MjcgMi4wMDYgNiAyLjczMyA2IDMuNjN2OC43NDRDNiAxMy4yNzMgNi43MjcgMTQgNy42MjUgMTRoOC43MDVjLjg5OCAwIDEuNjI1LS43MjcgMS42MjUtMS42MjVWMy42MzFjMC0uODk4LS43MjctMS42MjUtMS42MjUtMS42MjVINy42MjV6bTUuMzk1IDcuMDQxVjEyaC0yLjA0NlY5LjA0N0g4VjYuOTloMi45NzRWMy45OTJoMi4wNDZWNi45OWgzLjAxNnYyLjA1N0gxMy4wMnoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9jb21tZW50LWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjNzc3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjYsMyBDMi43MTYsMyAyLjAwOCwzLjcxNiAyLjAwOCw0LjYgTDIsMTkgTDUuMDEyMTE1NDgsMTUuOTg3ODg0NSBMMTYuMzk5OTk5NiwxNS45ODc4ODQ1IEMxNy4yODM5OTk2LDE1Ljk4Nzg4NDUgMTcuOTk5OTk5NiwxNS4yNzE4ODQ1IDE3Ljk5OTk5OTYsMTQuMzg3ODg0NSBMMTgsNC42IEMxOCwzLjcxNiAxNy4yODQsMyAxNi40LDMgTDMuNiwzIFogTTUsOSBMMTUsOSBMMTUsMTAgTDUsMTAgTDUsOSBMNSw5IFogTTEyLDEzIEw1LDEzIEw1LDEyIEwxMiwxMiBMMTIsMTMgTDEyLDEzIFogTTE1LDcgTDUsNyBMNSw2IEwxNSw2IEwxNSw3IEwxNSw3IFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9jcm9zcy1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iLTMgLTMgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcgNS43MjdMMS4yNzMgMCAwIDEuMjczIDUuNzI3IDcgMCAxMi43MjcgMS4yNzMgMTQgNyA4LjI3MyAxMi43MjcgMTQgMTQgMTIuNzI3IDguMjczIDcgMTQgMS4yNzMgMTIuNzI3IDB6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvZGlzY2FyZC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMy44MDcgMkExLjggMS44IDAgMCAwIDIuMDEgMy44MDdMMiAxOWw1Ljk4LTIuNzU0TDE0IDE5VjRjLjAyOS0xLjE5MS0uODQ4LTItMS44NDctMkgzLjgwN3pNNy45NyAxMy43MjdMNCAxNlY0aDh2MTJsLTQuMDMtMi4yNzN6TTEyIDVoMnYxMGgtMlY1eiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMS4xNDMgNkwxMCA3LjE0MyAxMi44NTcgMTAgMTAgMTIuODU3IDExLjE0MyAxNCAxNCAxMS4xNDMgMTYuODU3IDE0IDE4IDEyLjg1NyAxNS4xNDMgMTBsMS40MjgtMS40MjlMMTggNy4xNDMgMTYuODU3IDYgMTQgOC44NTcgMTEuMTQzIDZ6Ij48L3BhdGg+PC9nPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2Rvd24tbGVmdC1hcnJvdy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMTgwIDEwIDEwKSI+PHBhdGggZD0iTTcuNSA0LjE2N3YxLjY2Nmg1LjQ5MmwtOS42NTkgOS42NTkgMS4xNzUgMS4xNzUgOS42NTktOS42NTlWMTIuNWgxLjY2NlY0LjE2N3oiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvZW1wdHlJdGVtLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iI0NDQyIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTguMTUyMDc2MSwxNy4wMDAwMDAyIEwxMC4wNTk5MTU1LDMuNTM2MDYyOTEgTDEuOTY3NzU1MDEsMTcgTDE4LjE1MjA3NjEsMTcuMDAwMDAwMiBaIj48L3BhdGg+PHBvbHlnb24gZmlsbD0iI0NDQyIgcG9pbnRzPSIxMSAxMiA4Ljk5NiAxMiA4Ljk5NiA4IDExIDgiPjwvcG9seWdvbj48cG9seWdvbiBmaWxsPSIjQ0NDIiBwb2ludHM9IjExIDE1IDkgMTUgOSAxMyAxMSAxMyI+PC9wb2x5Z29uPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9lcnJvci1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZD0iTTE0IDEyTDcgMSAwIDEyaDE0em0tNi0xSDZWOWgydjJ6bTAtM0g2VjVoMnYzeiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2V4cG9ydC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiMxQTlDQjAiIGQ9Ik01IDloM3Y0aDRWOWgzbC01LTUtNSA1em0wIDZ2MmgxMHYtMkg1eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2dsb2JlLWljb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDFjLTQuOTczIDAtOSA0LjAyNy05IDlzNC4wMjcgOSA5IDkgOS00LjAyNyA5LTktNC4wMjctOS05LTl6bS0uOSAxNi4xMzdBNy4xOTMgNy4xOTMgMCAwIDEgMi44IDEwYzAtLjU1My4wNjgtMS4wOTQuMTg5LTEuNjExTDcuMyAxMi43di45YTEuOCAxLjggMCAwIDAgMS44IDEuOHYxLjczN3ptNi4yMDYtMi4yODJBMS43ODggMS43ODggMCAwIDAgMTMuNiAxMy42aC0uOXYtMi43YzAtLjQ5NS0uNDA1LS45LS45LS45SDYuNFY4LjJoMS44Yy40OTUgMCAuOS0uNDA1LjktLjlWNS41aDEuOGExLjggMS44IDAgMCAwIDEuOC0xLjh2LS4zNzRBNy4xOTYgNy4xOTYgMCAwIDEgMTcuMiAxMGMwIDEuODcyLS43MiAzLjU3My0xLjg5NCA0Ljg1NXoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9ncmlkLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMUE5Q0IwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDEwaDVWNEgydjZ6bTAgN2g1di02SDJ2NnptNiAwaDV2LTZIOHY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNEg4djZ6bTYtNnY2aDVWNGgtNXoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9oaXN0b3J5LWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjg4IDEwLjAySDBsMy41NzcgNC4xNTkuMDY3LjEzNyA0LjAzNy00LjI5NmgtMi44OGMwLTMuNjUgMi44NDctNi4xMzEgNi41NTgtNi4xMzEgMy43MSAwIDYuNzIgMi45NiA2LjcyIDYuNjExIDAgMy42NS0zLjAxIDYuNjExLTYuNzIgNi42MTFhNi43NSA2Ljc1IDAgMCAxLTQuNzQ4LTEuOTRsLTEuMzU5IDEuMzM2QTguNjU4IDguNjU4IDAgMCAwIDExLjM1NCAxOUMxNi4xMzEgMTkgMjAgMTUuMTk0IDIwIDEwLjVTMTYuMTMgMiAxMS4zNTQgMkM2LjU3NyAyIDIuODggNS4zMjYgMi44OCAxMC4wMnpNMTAgMTEuNTIybDQuNDUgMi40MTkuNzUtMS4xNTctMy42NC0xLjk3NnYtNC41N0gxMHY1LjI4NHoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9pbmZvLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBkPSJNOSAxNWgyVjlIOXY2em0xLTE1QzQuNDc1IDAgMCA0LjQ3NSAwIDEwczQuNDc1IDEwIDEwIDEwIDEwLTQuNDc1IDEwLTEwUzE1LjUyNSAwIDEwIDB6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek05IDdoMlY1SDl2MnoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9pbnZpdGUtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxnIGZpbGw9IiMxQTlDQjAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggMTFIMFY1aDh2NnpNNyA2TDQgOC4xNTggMSA2djEuNzUyTDQgMTBsMy0yLjI0OFY2ek0xMy4wMiA5Ljg2OGEzLjQ4OSAzLjQ4OSAwIDAgMS0zLjQ5LTMuNDkgMy40ODkgMy40ODkgMCAwIDEgMy40OS0zLjQ5IDMuNDg5IDMuNDg5IDAgMCAxIDMuNDkgMy40OSAzLjQ4OSAzLjQ4OSAwIDAgMS0zLjQ5IDMuNDl6bS02Ljk4IDUuMjM0YzAtMi4zMiA0LjY1MS0zLjQ5IDYuOTgtMy40OSAyLjMzIDAgNi45OCAxLjE3IDYuOTggMy40OXYxLjkxOEg2LjA0di0xLjkxOHoiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvaXRlbS1pbi1wcm9ncmVzcy5naWYiOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9pdGVtLWluLXByb2dyZXNzLmdpZiJ9LCIuL3NyYy9jb21tb24vaW1nL2xpbmstaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGQ9Ik0zLjI1IDEwYTIuNTg2IDIuNTg2IDAgMCAxIDIuNTgzLTIuNTgzaDMuMzM0VjUuODMzSDUuODMzQTQuMTY4IDQuMTY4IDAgMCAwIDEuNjY3IDEwYzAgMi4zIDEuODY2IDQuMTY3IDQuMTY2IDQuMTY3aDMuMzM0di0xLjU4NEg1LjgzM0EyLjU4NiAyLjU4NiAwIDAgMSAzLjI1IDEwem0zLjQxNy44MzNoNi42NjZWOS4xNjdINi42Njd2MS42NjZ6bTcuNS01aC0zLjMzNHYxLjU4NGgzLjMzNEEyLjU4NiAyLjU4NiAwIDAgMSAxNi43NSAxMGEyLjU4NiAyLjU4NiAwIDAgMS0yLjU4MyAyLjU4M2gtMy4zMzR2MS41ODRoMy4zMzRjMi4zIDAgNC4xNjYtMS44NjcgNC4xNjYtNC4xNjdzLTEuODY2LTQuMTY3LTQuMTY2LTQuMTY3eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL2xpc3Qtdmlldy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxkZWZzPjxwYXRoIGlkPSJpY19saXN0LXZpZXctYSIgZD0iTTAsMTQgTDE0LDE0IEwxNCwxMiBMMCwxMiBMMCwxNCBaIE0wLDQgTDAsMTAgTDMsNyBMMCw0IFogTTYsMTEgTDE0LDExIEwxNCw5IEw2LDkgTDYsMTEgWiBNMCwwIEwwLDIgTDE0LDIgTDE0LDAgTDAsMCBaIE02LDUgTDE0LDUgTDE0LDMgTDYsMyBMNiw1IFogTTYsOCBMMTQsOCBMMTQsNiBMNiw2IEw2LDggWiI+PC9wYXRoPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PC9yZWN0PjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiPjxtYXNrIGlkPSJpY19saXN0LXZpZXctYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjaWNfbGlzdC12aWV3LWEiPjwvdXNlPjwvbWFzaz48dXNlIGZpbGw9IiM0NjQ1NDciIHhsaW5rOmhyZWY9IiNpY19saXN0LXZpZXctYSI+PC91c2U+PGcgbWFzaz0idXJsKCNpY19saXN0LXZpZXctYikiPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTgpIj48L3JlY3Q+PC9nPjwvZz48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvbm9JdGVtLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjY2NjY2NjIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCwxIEM1LjAyNzUsMSAxLDUuMDI3NSAxLDEwIEMxLDE0Ljk3MjUgNS4wMjc1LDE5IDEwLDE5IEMxNC45NzI1LDE5IDE5LDE0Ljk3MjUgMTksMTAgQzE5LDUuMDI3NSAxNC45NzI1LDEgMTAsMSBMMTAsMSBaIE0xMCwxNy4yIEM2LjAyMiwxNy4yIDIuOCwxMy45NzggMi44LDEwIEMyLjgsOC4zMzUgMy4zNzE1LDYuODA5NSA0LjMxNjUsNS41OSBMMTQuNDEsMTUuNjgzNSBDMTMuMTkwNSwxNi42Mjg1IDExLjY2NSwxNy4yIDEwLDE3LjIgTDEwLDE3LjIgWiBNMTUuNjgzNSwxNC40MSBMNS41OSw0LjMxNjUgQzYuODA5NSwzLjM3MTUgOC4zMzUsMi44IDEwLDIuOCBDMTMuOTc4LDIuOCAxNy4yLDYuMDIyIDE3LjIsMTAgQzE3LjIsMTEuNjY1IDE2LjYyODUsMTMuMTkwNSAxNS42ODM1LDE0LjQxIEwxNS42ODM1LDE0LjQxIFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9ub3RFeWVJdGVtLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDE3Ij48cGF0aCBmaWxsPSIjNzc3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjcyMTgxNDU0LDMuMjQ0ODk3OTYgQzEyLjI5OTUzMywzLjI0NDg5Nzk2IDE0LjM5MTU5NDQsNS4yNTYzMjY1MyAxNC4zOTE1OTQ0LDcuNzM0NjkzODggQzE0LjM5MTU5NDQsOC4zMTM4Nzc1NSAxNC4yNzAxODAxLDguODY2MTIyNDUgMTQuMDYwMDQsOS4zNzM0NjkzOSBMMTYuNzkxODYxMiwxMiBDMTguMjAyMTM0OCwxMC44Njg1NzE0IDE5LjMxMzU0MjQsOS40MDQ4OTc5NiAyMCw3LjczNDY5Mzg4IEMxOC4zNzk1ODY0LDMuNzkyNjUzMDYgMTQuMzk2MjY0MiwxIDkuNzIxODE0NTQsMSBDOC40MTQyNzYxOCwxIDcuMTYyNzc1MTgsMS4yMjQ0ODk4IDYsMS42Mjg1NzE0MyBMOC4wMTczNDQ5LDMuNTYzNjczNDcgQzguNTQ1MDMwMDIsMy4zNjYxMjI0NSA5LjExOTQxMjk0LDMuMjQ0ODk3OTYgOS43MjE4MTQ1NCwzLjI0NDg5Nzk2IEw5LjcyMTgxNDU0LDMuMjQ0ODk3OTYgWiBNMC45LDEuMTQwNzg5NDcgTDIuOTUxOTk5NTUsMy4xODA3ODk0NyBMMy4zNjE0OTk1NSwzLjU4Nzg5NDc0IEMxLjg3NjUsNC43NDIxMDUyNiAwLjcwMiw2LjI3NjU3ODk1IDAsOC4wNTI2MzE1OCBDMS41NTcsMTEuOTgwNTI2MyA1LjQsMTQuNzYzMTU3OSA5LjksMTQuNzYzMTU3OSBDMTEuMjk1LDE0Ljc2MzE1NzkgMTIuNjI3LDE0LjQ5NDczNzcgMTMuODQ2NSwxNC4wMDcxMDUzIEwxNC4yMjksMTQuMzg3MzY4NCBMMTYuODUyNSwxNyBMMTgsMTUuODYzNjgzOCBMMi4wNDc1LDAgTDAuOSwxLjE0MDc4OTQ3IEwwLjksMS4xNDA3ODk0NyBaIE01LjUxNTYzNTg2LDYgTDcuMDE4NzYzMDMsNy4yODc1IEM2Ljk3NDk4MjYzLDcuNDY2NjY2NjcgNi45NDU3OTU2OSw3LjY0NTgzMzMzIDYuOTQ1Nzk1NjksNy44MzMzMzMzMyBDNi45NDU3OTU2OSw5LjIxMjUgOC4yNTQzNDMyOSwxMC4zMzMzMzMzIDkuODY0NDg5MjMsMTAuMzMzMzMzMyBDMTAuMDgzMzkxMiwxMC4zMzMzMzMzIDEwLjI5MjU2NDMsMTAuMzA4MzMzMyAxMC40OTY4NzI4LDEwLjI3MDgzMzMgTDEyLDExLjU1ODMzMzMgQzExLjM1MzAyMjksMTEuODMzMzMzMyAxMC42MzMwNzg1LDEyIDkuODY0NDg5MjMsMTIgQzcuMTc5MjkxMTcsMTIgNSwxMC4xMzMzMzMzIDUsNy44MzMzMzMzMyBDNSw3LjE3NSA1LjE5NDU3OTU3LDYuNTU4MzMzMzMgNS41MTU2MzU4Niw2IEw1LjUxNTYzNTg2LDYgWiBNMTAsNS4wMTQyMTgwMSBMMTIuOTg1NzgyLDggTDEzLDcuODQzNjAxOSBDMTMsNi4yNzQ4ODE1MiAxMS43MjUxMTg1LDUgMTAuMTU2Mzk4MSw1IEwxMCw1LjAxNDIxODAxIEwxMCw1LjAxNDIxODAxIFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9wZW5jaWwtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyAxNC4wODNWMTdoMi45MTdsOC42MDctOC42MDctMi45MTctMi45MTdMMyAxNC4wODN6bTEzLjc3Mi03LjkzOGEuNzguNzggMCAwIDAgMC0xLjEwMWwtMS44MTYtMS44MTZhLjc4Ljc4IDAgMCAwLTEuMSAwTDEyLjQzMSA0LjY1bDIuOTE3IDIuOTE3IDEuNDIzLTEuNDIzeiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3Blcm1pc3Npb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDIwIDIwIj48ZyBmaWxsPSIjMUE5Q0IwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMSkiPjxwYXRoIGQ9Ik03LDEyLjk3MzI4MTIgQzcuODI1LDEyLjk3MzI4MTIgOC41LDEyLjI5ODI4MTIgOC41LDExLjQ3MzI4MTIgQzguNSwxMC42NDgyODEyIDcuODI1LDkuOTczMjgxMTcgNyw5Ljk3MzI4MTE3IEM2LjE3NSw5Ljk3MzI4MTE3IDUuNSwxMC42NDgyODEyIDUuNSwxMS40NzMyODEyIEM1LjUsMTIuMjk4MjgxMiA2LjE3NSwxMi45NzMyODEyIDcsMTIuOTczMjgxMiBMNywxMi45NzMyODEyIFogTTExLjAxNDM0MzMsNi4wMDIxNDQ4MSBMMTEuMDE0MzQzMywzLjk3MDk2MTgxIEMxMS4wMTQzNDMzLDEuODY4MTA0NjcgOS41MDg2MDU5NiwxLjI0Nzg0OTM2ZS0xNSA3LDguMTUzMjAwMzRlLTE2IEM0LjAyNzcwOTk2LDEuMjQ3ODQ5MzZlLTE1IDMuMDA2ODk2OTcsMi40NDczMjg1NCAzLjAwNjg5Njk3LDQuNTUwMTg1NjggTDQuOTU4MjUxOTUsNC41NTAxODU2OCBDNC45NTgyNTE5NSwzLjI0NzMyODU0IDUuMzc4OTY3MjksMS45NTg4MTU4MSA3LDEuOTU4ODE1ODEgQzguMDgzODAxMjcsMS45NTg4MTU4MSA5LjAzNjM3Njk1LDIuNjY4MTA0NjcgOS4wMzYzNzY5NSwzLjk3MDk2MTgxIEw5LjAzNjM3Njk1LDYuMDAyMTQ0ODEgTDEuNSw2LjAwMjE0NDk4IEMwLjY3NSw2LjAwMjE0NDk4IDEuMTEwMjIzMDJlLTE2LDYuNjg3ODU5MjcgMS4xMTAyMjMwMmUtMTYsNy41MjU5NTQ1MSBMMS4xMzY4NjgzOGUtMTMsMTUuNDQ5NDcxNiBDMS4xMzY4NjgzOGUtMTMsMTYuMjg3NTY2OSAwLjY3NSwxNi45NzMyODEyIDEuNSwxNi45NzMyODEyIEwxMi41LDE2Ljk3MzI4MTIgQzEzLjMyNSwxNi45NzMyODEyIDE0LDE2LjI4NzU2NjkgMTQsMTUuNDQ5NDcxNiBMMTQsNy41MjU5NTQ1MSBDMTQsNi42ODc4NTkyNyAxMy4zMjUsNi4wMDIxNDQ5OCAxMi41LDYuMDAyMTQ0OTggTDExLjAxNDM0MzMsNi4wMDIxNDQ4MSBaIE0yLDE0Ljk3MzI4MTIgTDIsNy45NzMyODExNyBMMTIsNy45NzMyODExNyBMMTIsMTQuOTczMjgxMiBMMiwxNC45NzMyODEyIFoiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvcGx1Z2lucy9lbWFpbC5zdmciOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bi5wKyJtZWRpYS9lbWFpbC5zdmcifSwiLi9zcmMvY29tbW9uL2ltZy9wbHVnaW5zL2ppcmEuc3ZnIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsibWVkaWEvamlyYS5zdmcifSwiLi9zcmMvY29tbW9uL2ltZy9wbHVnaW5zL3JhbGx5LnBuZyI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uLnArIm1lZGlhL3JhbGx5LnBuZyJ9LCIuL3NyYy9jb21tb24vaW1nL3BsdXMtYnV0dG9uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNhcGFfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9Ii0xNjAgLTE1MCA2NTAgNjUwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzNTcgMzU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PGcgaWQ9ImFkZCI+PHBhdGggZD0iTTM1NywyMDRIMjA0djE1M2gtNTFWMjA0SDB2LTUxaDE1M1YwaDUxdjE1M2gxNTNWMjA0eiI+PC9wYXRoPjwvZz48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvcHJvamVjdC1ldmVudHMtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE3IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjx0aXRsZT5TaGFwZTwvdGl0bGU+PGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+PGcgaWQ9IiNNQl9TZXR0aW5ncyZhbXA7TWVtYmVycy1QYWdlIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyBpZD0iMl9TZXR0aW5nc19HZW5lcmFsX01HIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTIyMC4wMDAwMDAsIC04MS4wMDAwMDApIiBmaWxsPSIjMUE5Q0IwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjxnIGlkPSJidHRuLVNldHRpbmdzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExOTUuMDAwMDAwLCA3NS4wMDAwMDApIj48ZyBpZD0iaWNfZXZlbnQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgNS4wMDAwMDApIj48cGF0aCBkPSJNMTQsOSBMNiw5IEw2LDExIEwxNCwxMSBMMTQsOSBaIE0xNSwzIEwxNSwxIEwxMywxIEwxMywzIEw3LDMgTDcsMSBMNSwxIEw1LDMgTDQsMyBDMi45ODQ4NjkwMSwzIDIsMyAyLDQgTDIsMTYgQzIsMTcuMjM1IDIuNzkxMTExMTEsMTggNCwxOCBMMTYsMTggQzE3LjIsMTggMTgsMTcuMjM1IDE4LDE2IEwxOCw0IEMxOCwzIDE2LjMxNDE3MjksMyAxNSwzIFogTTE2LDE2IEw0LDE2IEw0LDcgTDE2LDcgTDE2LDE2IFogTTExLDEyIEw2LDEyIEw2LDE0IEwxMSwxNCBMMTEsMTIgWiIgaWQ9IlNoYXBlIj48L3BhdGg+PC9nPjwvZz48L2c+PC9nPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3Byb2plY3Qtc2V0dGluZ3MtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9Jzxzdmcgdmlld0JveD0iMCAwIDE3IDE2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjx0aXRsZT5TaGFwZTwvdGl0bGU+PGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+PGcgaWQ9IiNNQl9TZXR0aW5ncyZhbXA7TWVtYmVycy1QYWdlIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyBpZD0iMl9TZXR0aW5nc19HZW5lcmFsX01HIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTA5NC4wMDAwMDAsIC04Mi4wMDAwMDApIiBmaWxsPSIjOTk5OTk5Ij48ZyBpZD0iYnR0bi1TZXR0aW5ncyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA3NS4wMDAwMDAsIDc1LjAwMDAwMCkiPjxwYXRoIGQ9Ik0zMy42NTI4Nzc5LDE1Ljc4IEMzMy42ODU3NjcyLDE1LjUyNCAzMy43MTA0MzQxLDE1LjI2NCAzMy43MTA0MzQxLDE1IEMzMy43MTA0MzQxLDE0LjczNiAzMy42ODU3NjcyLDE0LjQ3NiAzMy42NTI4Nzc5LDE0LjIyIEwzNS4zOTE4OTcxLDEyLjg5NiBDMzUuNTQ4MTIxLDEyLjc3NiAzNS41OTMzNDM4LDEyLjU2IDM1LjQ5MDU2NDksMTIuMzg0IEwzMy44NDYxMDIzLDkuNjEyIEMzMy43NDMzMjM0LDkuNDQgMzMuNTI5NTQzMiw5LjM2OCAzMy4zNDQ1NDEyLDkuNDQgTDMxLjI5NzE4NTMsMTAuMjQ0IEMzMC44NzM3MzYyLDkuOTI4IDMwLjQwOTE3NTUsOS42NiAyOS45MDc2MTQ0LDkuNDU2IEwyOS41OTkyNzc3LDcuMzM2IEMyOS41NjIyNzczLDcuMTQ4IDI5LjM5MzcxOTksNyAyOS4xODgxNjIxLDcgTDI1Ljg5OTIzNjksNyBDMjUuNjkzNjc5MSw3IDI1LjUyNTEyMTcsNy4xNDggMjUuNDkyMjMyNCw3LjMzNiBMMjUuMTgzODk1Nyw5LjQ1NiBDMjQuNjgyMzM0Niw5LjY2IDI0LjIxNzc3MzksOS45MjQgMjMuNzk0MzI0OCwxMC4yNDQgTDIxLjc0Njk2ODksOS40NCBDMjEuNTYxOTY2OSw5LjM3MiAyMS4zNDgxODY3LDkuNDQgMjEuMjQ1NDA3OCw5LjYxMiBMMTkuNjAwOTQ1MywxMi4zODQgQzE5LjQ5ODE2NjMsMTIuNTU2IDE5LjU0MzM4OTEsMTIuNzcyIDE5LjY5OTYxMywxMi44OTYgTDIxLjQzNDUyMSwxNC4yMiBDMjEuNDAxNjMxOCwxNC40NzYgMjEuMzc2OTY0OCwxNC43MzYgMjEuMzc2OTY0OCwxNSBDMjEuMzc2OTY0OCwxNS4yNjQgMjEuNDAxNjMxOCwxNS41MjQgMjEuNDM0NTIxLDE1Ljc4IEwxOS42OTk2MTMsMTcuMTA0IEMxOS41NDMzODkxLDE3LjIyNCAxOS40OTgxNjYzLDE3LjQ0IDE5LjYwMDk0NTMsMTcuNjE2IEwyMS4yNDU0MDc4LDIwLjM4OCBDMjEuMzQ4MTg2NywyMC41NiAyMS41NjE5NjY5LDIwLjYzMiAyMS43NDY5Njg5LDIwLjU2IEwyMy43OTQzMjQ4LDE5Ljc1NiBDMjQuMjE3NzczOSwyMC4wNzIgMjQuNjgyMzM0NiwyMC4zNCAyNS4xODM4OTU3LDIwLjU0NCBMMjUuNDkyMjMyNCwyMi42NjQgQzI1LjUyNTEyMTcsMjIuODUyIDI1LjY5MzY3OTEsMjMgMjUuODk5MjM2OSwyMyBMMjkuMTg4MTYyMSwyMyBDMjkuMzkzNzE5OSwyMyAyOS41NjIyNzczLDIyLjg1MiAyOS41OTUxNjY1LDIyLjY2NCBMMjkuOTAzNTAzMywyMC41NDQgQzMwLjQwNTA2NDQsMjAuMzQgMzAuODY5NjI1LDIwLjA3NiAzMS4yOTMwNzQxLDE5Ljc1NiBMMzMuMzQwNDMsMjAuNTYgQzMzLjUyNTQzMjEsMjAuNjI4IDMzLjczOTIxMjIsMjAuNTYgMzMuODQxOTkxMSwyMC4zODggTDM1LjQ4NjQ1MzcsMTcuNjE2IEMzNS41ODkyMzI2LDE3LjQ0NCAzNS41NDQwMDk5LDE3LjIyOCAzNS4zODc3ODU5LDE3LjEwNCBMMzMuNjUyODc3OSwxNS43OCBMMzMuNjUyODc3OSwxNS43OCBaIE0yNy41NDM2OTk1LDE3LjggQzI1Ljk1MjY4MTksMTcuOCAyNC42NjU4OSwxNi41NDggMjQuNjY1ODksMTUgQzI0LjY2NTg5LDEzLjQ1MiAyNS45NTI2ODE5LDEyLjIgMjcuNTQzNjk5NSwxMi4yIEMyOS4xMzQ3MTcsMTIuMiAzMC40MjE1MDksMTMuNDUyIDMwLjQyMTUwOSwxNSBDMzAuNDIxNTA5LDE2LjU0OCAyOS4xMzQ3MTcsMTcuOCAyNy41NDM2OTk1LDE3LjggTDI3LjU0MzY5OTUsMTcuOCBaIiBpZD0iU2hhcGUiPjwvcGF0aD48L2c+PC9nPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9wcm9qZWN0LXVzZXJzLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDE0Ij48cGF0aCBmaWxsPSIjMUE5Q0IwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNy45MSAyLjE0M0MxNy45MS45NTkgMTcuMTU3IDAgMTYuMDcgMGMtMS4wODUgMC0xLjg1NS45NTktMS44NTUgMi4xNDMgMCAxLjE4NC43NyAyLjE0MyAxLjg1NSAyLjE0MyAxLjA4NiAwIDEuODM5LS45NiAxLjgzOS0yLjE0M3ptLTUuMzQ3IDQuNDNjLjc5NC0uODA5IDIuNTIxLTEuMjE2IDMuNTA4LTEuMjE2QzE3LjM4MyA1LjM1NyAyMCA2LjA3NSAyMCA3LjV2MS43ODZoLTIuMzEzYy0uNjQtMS4zODMtMi45NzQtMi4yOS01LjEyNC0yLjcxM3ptLTUuMTI2IDBjLTIuMTUuNDI0LTQuNDgzIDEuMzMtNS4xMjQgMi43MTNIMFY3LjVjMC0xLjQyNSAyLjYxNy0yLjE0MyAzLjkyOS0yLjE0My45ODcgMCAyLjcxNC40MDcgMy41MDggMS4yMTZ6bS0xLjYyMi00LjQzYzAgMS4xODQtLjgwMSAyLjE0My0xLjg4NiAyLjE0My0xLjA4NiAwLTEuODgtLjk2LTEuODgtMi4xNDNDMi4wNS45NTkgMi44NDQgMCAzLjkzIDBjMS4wODUgMCAxLjg4Ni45NTkgMS44ODYgMi4xNDN6TTEwIDYuNDI5QTMuMjEzIDMuMjEzIDAgMSAxIDEwIDBhMy4yMTMgMy4yMTMgMCAxIDEgMCA2LjQyOXpNMy41NzEgMTEuMjVjMC0yLjEzNyA0LjI4My0zLjIxNCA2LjQyOS0zLjIxNHM2LjQyOSAxLjA3NyA2LjQyOSAzLjIxNHYxLjc1NUgzLjU3VjExLjI1eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3JlZnJlc2gtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTMgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjY4IDcuMzJsMy42NiAzLjY2TDIwIDcuMzJoLTIuNzQ1QTcuMzE4IDcuMzE4IDAgMCAwIDkuOTM2IDBDOC41IDAgNy4xNjguNDIgNi4wMzggMS4xMzVMNy4zNzQgMi40N2E1LjQyMyA1LjQyMyAwIDAgMSAyLjU2Mi0uNjQgNS40ODggNS40ODggMCAwIDEgNS40OSA1LjQ5SDEyLjY4em0xLjI4MiA1LjU0NWwtMS4zMzYtMS4zMzZhNS40MjMgNS40MjMgMCAwIDEtMi41NjIuNjQxIDUuNDg4IDUuNDg4IDAgMCAxLTUuNDktNS40OUg3LjMyTDMuNjYgMy4wMiAwIDYuNjhoMi43NDVBNy4zMTggNy4zMTggMCAwIDAgMTAuMDY0IDE0YzEuNDM2IDAgMi43NjgtLjQyIDMuODk4LTEuMTM1eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3JlZnJlc2gtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGw9IiMxQTlDQjAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjY2IDEwLjMzM0wxNi4zMyAxNCAyMCAxMC4zMzNoLTIuNzUyQTcuMzM0IDcuMzM0IDAgMCAwIDkuOTA4IDNDOC40NjggMyA3LjEzMyAzLjQyMiA2IDQuMTM3bDEuMzQgMS4zMzhhNS40NDMgNS40NDMgMCAwIDEgMi41NjgtLjY0MiA1LjUgNS41IDAgMCAxIDUuNTA1IDUuNUgxMi42NnptMS4zNCA1LjUzbC0xLjM0LTEuMzM4YTUuNDQzIDUuNDQzIDAgMCAxLTIuNTY4LjY0MiA1LjUgNS41IDAgMCAxLTUuNTA1LTUuNUg3LjM0TDMuNjcgNiAwIDkuNjY3aDIuNzUyQTcuMzM0IDcuMzM0IDAgMCAwIDEwLjA5MiAxN2MxLjQ0IDAgMi43NzUtLjQyMiAzLjkwOC0xLjEzN3oiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9yZXRyeS1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxMiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjOTk5IiBkPSJNMTcuNDQwODE0OSw0LjM4ODc0NDM1IEwxNy45Miw0Ljk5ODY2NDY4IEwxMi4xMjQxNDI2LDQuOTk4NjY0NjggTDEyLjEyNDE0MjYsMi42NDczNzc2IEM4LjQ1Nzk5NjYsMS4xMjY5OTY0OSA0LjI2NzAyODg2LDEuODYwNjY4NzcgMS4xNDA5MTY4MSw0Ljg3NDkxMjczIEwwLDMuNTQ4OTk4OTYgQzUuMDU4MDY0NTIsLTEuNDQ1Mjc2MjIgMTIuNjU2NTcwNSwtMS4xNzEyNTQwNCAxNy40NDA4MTQ5LDQuMzg4NzQ0MzUgWiI+PC9wYXRoPjxyZWN0IHdpZHRoPSI0IiBoZWlnaHQ9IjQiIHg9IjE0IiB5PSI4IiBmaWxsPSIjODdCNzdCIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcmVjdD48cmVjdCB3aWR0aD0iNCIgaGVpZ2h0PSI0IiB4PSI3IiB5PSI4IiBmaWxsPSIjRjM2QzRBIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjQiIGhlaWdodD0iNCIgeT0iOCIgZmlsbD0iI0YzNkM0QSI+PC9yZWN0PjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9yb3RhdGUtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuNTIxNDMzMjIsNS43OTU0ODEyOSBMMSwxMS4yODk5NTA2IEw2LjUyMTQzMzIyLDE2Ljc4NDQxOTkgTDEyLjA0Mjg2NjQsMTEuMjg5OTUwNiBMNi41MjE0MzMyMiw1Ljc5NTQ4MTI5IEw2LjUyMTQzMzIyLDUuNzk1NDgxMjkgWiBNMy40MDUyNTA0LDExLjI4OTk1MDYgTDYuNTE3MTc2MTQsOC4xOTMyMjE5MyBMOS42MzMzNTg5NSwxMS4yODk5NTA2IEw2LjUyMTQzMzIyLDE0LjM4NjY3OTIgTDMuNDA1MjUwNCwxMS4yODk5NTA2IEwzLjQwNTI1MDQsMTEuMjg5OTUwNiBaIE0xNi43NTU0NTQ0LDUuOTgxODc4MDkgQzE1LjI1Njk2MjEsNC40OTQ5Mzk5OSAxMy4yOTg3MDUxLDMuNzQ5MzUyNzkgMTEuMzM2MTkxMSwzLjc0OTM1Mjc5IEwxMS4zMzYxOTExLDEgTDcuNzIxOTI5ODgsNC41OTY2MTA5NyBMMTEuMzM2MTkxMSw4LjE4ODk4NTY0IEwxMS4zMzYxOTExLDUuNDQzODY5MTUgQzEyLjg2MDIyNTksNS40NDM4NjkxNSAxNC4zODg1MTc3LDYuMDI0MjQxIDE1LjU1MDcwMDYsNy4xODA3NDg0MSBDMTcuODc5MzIzNiw5LjQ5Nzk5OTUzIDE3Ljg3OTMyMzYsMTMuMjUxMzUzMyAxNS41NTA3MDA2LDE1LjU2ODYwNDQgQzE0LjM4ODUxNzcsMTYuNzI1MTEyMiAxMi44NjAyMjU5LDE3LjMwNTQ4MzYgMTEuMzM2MTkxMSwxNy4zMDU0ODM2IEMxMC41MTAzMTc1LDE3LjMwNTQ4MzYgOS42ODg3MDEsMTcuMTMxNzk1NyA4LjkyMjQyNjU0LDE2Ljc5Mjg5MjkgTDcuNjUzODE2NTksMTguMDU1MzA3MSBDOC43OTQ3MTQxMywxOC42ODIyNzgyIDEwLjA2MzMyNDEsMTkgMTEuMzM2MTkxMSwxOSBDMTMuMjk4NzA1MSwxOSAxNS4yNTY5NjIxLDE4LjI1NDQxMzcgMTYuNzU1NDU0NCwxNi43Njc0NzQ3IEMxOS43NDgxODE5LDEzLjc4OTM2MjIgMTkuNzQ4MTgxOSw4Ljk1OTk5MDU5IDE2Ljc1NTQ1NDQsNS45ODE4NzgwOSBMMTYuNzU1NDU0NCw1Ljk4MTg3ODA5IFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9zYXZlLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjgwNyAyQTEuOCAxLjggMCAwIDAgNC4wMSAzLjgwN0w0IDE4bDUuOTgtMi43NTRMMTUuOTYgMThWMy44MDdDMTUuOTYgMi44MSAxNS4xNTIgMiAxNC4xNTMgMkg1LjgwN3pNMTAgMTIuOTcybC00LjAzOCAyLjEzNFYzLjgxaDguMDZ2MTEuMjk2TDEwIDEyLjk3MnoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9zZWFyY2gtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjQzNSAxMC4wNjNoLS43MjdsLS4yNTItLjI1MmE1Ljg5IDUuODkgMCAwIDAgMS40MzctMy44NjUgNS45NDYgNS45NDYgMCAxIDAtNS45NDcgNS45NDcgNS45MSA1LjkxIDAgMCAwIDMuODY1LTEuNDMybC4yNTIuMjUxdi43MjNMMTQuNjM3IDE2IDE2IDE0LjYzN2wtNC41NjUtNC41NzR6TTEuODMgNS45NDZhNC4xMTcgNC4xMTcgMCAxIDEgOC4yMzQgMCA0LjExNyA0LjExNyAwIDAgMS04LjIzNCAweiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3NoYXJlLWljb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEzIDE0bC01LTNjLS4zNi0uNTgyLS4zMzMtLjc3MSAwLTEtLjMzMy0uMTU3LS4zNi0uMzQ1IDAtMWw1LTNjLjQ5Ni41NyAxLjA1Mi44MiAyIDEgLjk1NC0uMTggMi0xLjI2MSAyLTMgMC0uOTItMS4wNDYtMi0yLTItMS42MiAwLTIuNjY3IDEuMDgtMyAyIC4zMzMuNjAyLjM2Ljc5MSAwIDFMNyA4Yy0uNDk2LS4xMjQtMS4wNTItLjM3My0yIDAtLjk1NC0uMzczLTIgLjcwNy0yIDIgMCAxLjM2NSAxLjA0NiAyLjQ0NiAyIDIgLjk0OC40NDYgMS41MDQuMTk3IDIgMGw1IDNjLjQyMy4zMDEuNC40NzggMCAxIC40Ljk1MiAxLjQxNCAyIDMgMiAuOTE5IDAgMS45MzQtMS4wNDggMi0yLS4wNjYtMS42MzUtMS4wODEtMi42ODMtMi0zLS45MjQuMzE3LTEuNDU3LjU1NC0yIDF6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvc3F1YXJlLW1pbnVzLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjg4OSAwQy44NSAwIDAgLjg1IDAgMS44ODlWMTUuMTFDMCAxNi4xNS44NSAxNyAxLjg4OSAxN0gxNS4xMUMxNi4xNSAxNyAxNyAxNi4xNSAxNyAxNS4xMTFWMS44OUMxNyAuODUgMTYuMTUgMCAxNS4xMTEgMEgxLjg5ek0xIDFoMTV2MTVIMVYxem0xMyA4SDNWOGgxMXYxeiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3NxdWFyZS1wbHVzLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjg4OSAwQy44NSAwIDAgLjg1IDAgMS44ODlWMTUuMTFDMCAxNi4xNS44NSAxNyAxLjg4OSAxN0gxNS4xMUMxNi4xNSAxNyAxNyAxNi4xNSAxNyAxNS4xMTFWMS44OUMxNyAuODUgMTYuMTUgMCAxNS4xMTEgMEgxLjg5ek0xIDFoMTV2MTVIMVYxem0xMyA4SDl2NC45OTZIOFY5SDNWOGg1VjNoMXY1aDV2MXoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy9zdGFjay10cmFjZS1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAyMCI+PHBhdGggZD0iTTExLjgxNSAyQTIuOTkgMi45OSAwIDAgMCA5IDBhMi45OSAyLjk5IDAgMCAwLTIuODE1IDJIMmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMlY0YTIgMiAwIDAgMC0yLTJoLTQuMTg1ek05IDNhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yem0yIDE0SDR2LTJoN3Yyem0zLTRINHYtMmgxMHYyek00IDlWN2gxMHYySDR6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvdGFibGUtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGw9IiMxQTlDQjAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMTJoNFY4SDJ2NHptMCA1aDR2LTRIMnY0ek0yIDdoNFYzSDJ2NHptNSA1aDEyVjhIN3Y0em0wIDVoMTJ2LTRIN3Y0ek03IDN2NGgxMlYzSDd6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvdGFnLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEzIDEzIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTIpIj48cGF0aCBmaWxsPSIjNzc3IiBkPSJNMTAuODgwOTI3NCw1LjE1MzU1NzQ5IEMxMC44NDIzNDU3LDUuMjI2NTcxMTMgMTAuNzk1MDYyNiw1LjI5NjU4ODUyIDEwLjczODQyMTMsNS4zNjIxOTA0IEMxMC4zMjY5OTI1LDUuODM4NTkyNTIgOS42MjY4OTUxNCw2LjEwNzY0MTgyIDguOTk0MTkyNSw1LjU0MDM5OTM4IEM4LjM2MTQ4OTg3LDQuOTczMTU2OTUgOC41MzA4OTA0LDQuNDA3MzM2MSA4Ljk0MjMxOTI2LDMuOTMwOTMzOTggQzguOTk4OTYwNTEsMy44NjUzMzIxIDkuMDYyMDA0NjcsMy44MDc3NzI3NiA5LjEyOTQ4MTYzLDMuNzU3NzgyODcgTDcuODE3OTcxOCwyLjc1MTU5NjIyIEM3LjYyMjc2NDczLDIuNTk2MTA3MTQgNy4zMzM0ODM5NCwyLjYyMTk2OTQyIDcuMTcxNjA0OTEsMi44MDk0NzA5NSBMMC43NTU3NzE0MDMsMTAuMjE0OTk0OSBDMC41OTM4OTIzNjksMTAuNDAyNDk2NCAwLjYyMDgxNzQ4MiwxMC42ODAzNTgyIDAuODE2MDI0NTUzLDEwLjgzNTg0NzMgTDIuMTI4MTMxMjksMTEuODgxNTM1IEMyLjE2OTk5NjU2LDExLjc5MzIyNDggMi4yMjQ1MDM1LDExLjcwODU0MTYgMi4yOTIxNDQ2NCwxMS42MzAzMjM5IEMyLjcwMzU3MzUsMTEuMTUzOTIxOCAzLjM2ODA2NjQxLDEwLjk2NTM0NDEgMy45NzAyNjA2MiwxMS40NDUzMDYzIEM0LjU3MjQ1NDgzLDExLjkyNTI2ODUgNC40OTk2NzU1NywxMi41ODUxNzgyIDQuMDg4MjQ2NywxMy4wNjE1ODA0IEM0LjAyMDYwNTU3LDEzLjEzOTk1NTcgMy45NDQwOTg4NCwxMy4yMDY4MTkxIDMuODYxMzUzMzcsMTMuMjYyODAxNSBMNS4xNzc5NjQ3NywxNC4yNjY3OTE1IEM1LjM3MzE3MTg0LDE0LjQyMjI4MDYgNS42NjI0NTI2MywxNC4zOTY0MTgzIDUuODI0MzMxNjcsMTQuMjA4OTE2OCBMMTIuMjk0NTc3LDYuODE4OTM2MzcgQzEyLjQ1NjYyMDIsNi42MzE0MzQ4NCAxMi40Mjk2OTUxLDYuMzUzNDE1MzMgMTIuMjM0NDg4MSw2LjE5NzkyNjI2IEwxMC44ODA5Mjc0LDUuMTUzNTU3NDkgWiBNMy4xNzM5NDIxLDkuNTE1OTI0ODYgTDYuOTExMjc5MTYsNS4xODkwMzkyOCBMOS44MjYwODY4NSw3LjUxMTkxMzU2IEw2LjA4ODc0OTc5LDExLjgzODc5OTEgTDMuMTczOTQyMSw5LjUxNTkyNDg2IFogTTcuMTE4Njk4MTIsNi40NDM1NTE3OCBMOC4zNjY1NDc4OSw3LjU2MDQ3MjQ2IEw1Ljk1Mjg1MTgxLDEwLjQ2OTc2MDYgTDQuNjIwNjY3NTMsOS4yODczNzExNyBMNy4xMTg2OTgxMiw2LjQ0MzU1MTc4IFoiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvdGVzdC1wYXJhbXMtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCA5Ij48cGF0aCBkPSJNMCw0IEw2LDQgTDYsMCBMMCwwIEwwLDQgWiBNMCw5IEw2LDkgTDYsNSBMMCw1IEwwLDkgWiBNNyw0IEwxMyw0IEwxMywwIEw3LDAgTDcsNCBaIE03LDkgTDEzLDkgTDEzLDUgTDcsNSBMNyw5IFogTTE0LDQgTDIwLDQgTDIwLDAgTDE0LDAgTDE0LDQgWiBNMTQsOSBMMjAsOSBMMjAsNSBMMTQsNSBMMTQsOSBaIj48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbW1vbi9pbWcvdG9vbHRpcC1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjYgMEMuNzE2IDAgLjAwOC43MTYuMDA4IDEuNkwwIDE2bDMuMDEyLTMuMDEySDE0LjRhMS42IDEuNiAwIDAgMCAxLjYtMS42VjEuNkExLjYgMS42IDAgMCAwIDE0LjQgMEgxLjZ6TTMgNmgxMHYxSDNWNnptNyA0SDNWOWg3djF6bTMtNkgzVjNoMTB2MXoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL2ltZy91bmFzc2lnbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxnIGZpbGw9IiM5OTkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCA0KSI+PHBhdGggZD0iTTksNCBMMCw0IEwwLDYgTDksNiBMOSw0IEw5LDQgWiBNMTIsLTEuNzc2MzU2ODRlLTE1IEwwLC0xLjc3NjM1Njg0ZS0xNSBMMCwyIEwxMiwyIEwxMiwtMS43NzYzNTY4NGUtMTUgTDEyLC0xLjc3NjM1Njg0ZS0xNSBaIE0wLDEwIEwwLDggTDksOCBMOSwxMCBMMCwxMCBaIE0xMy4xNDI4NTcxLDUgTDE2LDcuODU3MTQyODYgTDE4Ljg1NzE0MjksNSBMMjAsNi4xNDI4NTcxNCBMMTcuMTQyODU3MSw5IEwyMCwxMS44NTcxNDI5IEwxOC44NTcxNDI5LDEzIEwxNiwxMC4xNDI4NTcxIEwxMy4xNDI4NTcxLDEzIEwxMiwxMS44NTcxNDI5IEwxNC44NTcxNDI5LDkgTDEyLDYuMTQyODU3MTQgTDEzLjE0Mjg1NzEsNSBaIj48L3BhdGg+PC9nPjwvc3ZnPid9LCIuL3NyYy9jb21tb24vaW1nL3VwLXJpZ2h0LWFycm93LWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48ZyB0cmFuc2Zvcm09InJvdGF0ZSgzNjAgMTAgMTApIj48cGF0aCBkPSJNNy41IDQuMTY3djEuNjY2aDUuNDkybC05LjY1OSA5LjY1OSAxLjE3NSAxLjE3NSA5LjY1OS05LjY1OVYxMi41aDEuNjY2VjQuMTY3eiI+PC9wYXRoPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tbW9uL3BvbHlmaWxscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKCIuL25vZGVfbW9kdWxlcy9hcnJheS5maW5kL2luZGV4LmpzIiksbigiLi9ub2RlX21vZHVsZXMvYXJyYXkuZmluZGluZGV4L3NyYy9hcnJheS1maW5kLWluZGV4LXBvbHlmaWxsLmpzIiksbigiLi9ub2RlX21vZHVsZXMvcHJvbWlzZS1wb2x5ZmlsbC9zcmMvcG9seWZpbGwuanMiKSx3aW5kb3cuTm9kZUxpc3QmJiFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCYmKE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7dD10fHx3aW5kb3c7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspZS5jYWxsKHQsdGhpc1tuXSxuLHRoaXMpfSl9LCIuL3NyYy9jb21tb24vdXJscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5VUkxTPXQuVUFUX0FQSV9VUkxfUFJFRklYPXQuREVGQVVMVF9BUElfVVJMX1BSRUZJWD12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKCIuL25vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLGE9bigiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9pbmRleC5qcyIpLGw9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSx1PXQuREVGQVVMVF9BUElfVVJMX1BSRUZJWD0iL2FwaS92MS8iLGM9dC5VQVRfQVBJX1VSTF9QUkVGSVg9Ii91YXQvIixkPXUsXz1jLHA9ZnVuY3Rpb24oKXtyZXR1cm4oKDAsaS5nZXRTdG9yYWdlSXRlbSkoYS5UT0tFTl9LRVkpfHx7fSkudmFsdWV9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5zdHJpbmdpZnkpKGUse2FkZFF1ZXJ5UHJlZml4OiEwfSl9LG09dC5VUkxTPXthcGlEb2NzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyJhcGktZG9jcyJ9LGRhdGFQaG90bzpmdW5jdGlvbihlKXtyZXR1cm4gZCsiZGF0YS9waG90byIrZih7YXQ6ZSxhY2Nlc3NfdG9rZW46cCgpfSl9LGRhdGFVc2VyUGhvdG86ZnVuY3Rpb24oZSl7cmV0dXJuIGQrImRhdGEvdXNlcnBob3RvIitmKHtpZDplLGFjY2Vzc190b2tlbjpwKCl9KX0sZGFzaGJvYXJkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIiIrZCtlKyIvZGFzaGJvYXJkLyIrdH0sZGFzaGJvYXJkczpmdW5jdGlvbihlKXtyZXR1cm4iIitkK2UrIi9kYXNoYm9hcmQifSxkYXNoYm9hcmRzU2hhcmVkOmZ1bmN0aW9uKGUpe3JldHVybiIiK2QrZSsiL2Rhc2hib2FyZC9zaGFyZWQiK2YoeyJwYWdlLnBhZ2UiOjEsInBhZ2Uuc2l6ZSI6MzAwfSl9LHdpZGdldDpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIiIrZCtlKyIvd2lkZ2V0LyIrdH0sd2lkZ2V0UHJldmlldzpmdW5jdGlvbihlKXtyZXR1cm4iIitkK2UrIi93aWRnZXQvcHJldmlldyJ9LHNoYXJlZFdpZGdldDpmdW5jdGlvbihlLHQpe3JldHVybiIiK2QrZSsiL3dpZGdldC9zaGFyZWQiK2YoKDAsby5kZWZhdWx0KSh7fSx0KSl9LHNoYXJlZFdpZGdldFNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiIiK2QrZSsiL3dpZGdldC9zaGFyZWQvc2VhcmNoIitmKCgwLG8uZGVmYXVsdCkoe30sdCkpfSxkYXNoYm9hcmRXaWRnZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiIiK2QrZSsiL2Rhc2hib2FyZC8iK3QrIi8iK259LGFkZERhc2hib2FyZFdpZGdldDpmdW5jdGlvbihlLHQpe3JldHVybiIiK2QrZSsiL2Rhc2hib2FyZC8iK3QrIi9hZGQifSxwcm9qZWN0V2lkZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtyZXR1cm4gZCsicHJvamVjdC8iK2UrIi93aWRnZXQvIit0K2Yoe2ludGVydmFsOm59KX0sZXh0ZXJuYWxTeXN0ZW1Jc3N1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIiIrZCtlKyIvZXh0ZXJuYWwtc3lzdGVtLyIrdCsiL3RpY2tldC8iK259LGZpbHRlcjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIiIrZCtlKyIvZmlsdGVyLyIrdH0sZmlsdGVyczpmdW5jdGlvbihlKXtyZXR1cm4iIitkK2UrIi9maWx0ZXIifSxmaWx0ZXJzU2VhcmNoOmZ1bmN0aW9uKGUpe3JldHVybiIiK2QrZSsiL2ZpbHRlcj9wYWdlLnNvcnQ9bmFtZSZwYWdlLnBhZ2U9MSZwYWdlLnNpemU9NTAmZmlsdGVyLmNudC5uYW1lPSJ9LGxhdW5jaGVzRmlsdGVyczpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107cmV0dXJuIiIrZCtlKyIvZmlsdGVyL2ZpbHRlcnM/aWRzPSIrdC5qb2luKCIsIil9LGRlYnVnOmZ1bmN0aW9uKGUpe3JldHVybiIiK2QrZSsiL2xhdW5jaC9tb2RlIn0sbGF1bmNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoLyIrdH0sbGF1bmNoQXR0cmlidXRlS2V5c1NlYXJjaDpmdW5jdGlvbihlKXtyZXR1cm4iIitkK2UrIi9sYXVuY2gvYXR0cmlidXRlL2tleXM/ZmlsdGVyLmNudC5hdHRyaWJ1dGVLZXk9In0sbGF1bmNoQXR0cmlidXRlVmFsdWVzU2VhcmNoOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIjtyZXR1cm4iIitkK2UrIi9sYXVuY2gvYXR0cmlidXRlL3ZhbHVlcz8iKyh0PyJmaWx0ZXIuZXEuYXR0cmlidXRlS2V5PSIrdCsiJiI6IiIpKyJmaWx0ZXIuY250LmF0dHJpYnV0ZVZhbHVlPSJ9LGxhdW5jaFRhZ3NTZWFyY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL3RhZ3M/ZmlsdGVyLmNudC50YWdzPSJ9LGxhdW5jaE5hbWVTZWFyY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL25hbWVzP2ZpbHRlci5jbnQubmFtZT0ifSxsYXVuY2hPd25lcnNTZWFyY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL293bmVycz9maWx0ZXIuY250LnVzZXI9In0sbGF1bmNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoIn0sbGF1bmNoZXNMYXRlc3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iIitkK2UrIi9sYXVuY2gvbGF0ZXN0IitmKHtpZHM6dH0pfSxsYXVuY2hVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL3VwZGF0ZSJ9LGxhdW5jaFN0b3A6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL3N0b3AifSxsYXVuY2hlc0l0ZW1zVXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iIitkK2UrIi8iK24rIi8iK3QrIi91cGRhdGUifSxsYXVuY2hlc01lcmdlOmZ1bmN0aW9uKGUpe3JldHVybiIiK2QrZSsiL2xhdW5jaC9tZXJnZSJ9LGxhdW5jaGVzQ29tcGFyZTpmdW5jdGlvbihlLHQpe3JldHVybiIiK2QrZSsiL2xhdW5jaC9jb21wYXJlIitmKHtpZHM6dH0pfSxsYXVuY2hJbXBvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvbGF1bmNoL2ltcG9ydCJ9LGV4cG9ydExhdW5jaDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIiIrZCtlKyIvbGF1bmNoLyIrdCsiL3JlcG9ydCIrZih7dmlldzpuLGFjY2Vzc190b2tlbjpwKCl9KX0sbGF1bmNoQW5hbHl6ZTpmdW5jdGlvbihlKXtyZXR1cm4iIitkK2UrIi9sYXVuY2gvYW5hbHl6ZSJ9LGxvZ2luOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gXysic3NvL29hdXRoL3Rva2VuIitmKHtncmFudF90eXBlOmUsdXNlcm5hbWU6dCxwYXNzd29yZDpufSl9LGFwaVRva2VuOmZ1bmN0aW9uKCl7cmV0dXJuIF8rInNzby9tZS9hcGl0b2tlbiJ9LHNlc3Npb25Ub2tlbjpmdW5jdGlvbigpe3JldHVybiBkKyJ1YXQvc3NvL21lIn0scHJvamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gZCsicHJvamVjdC8iK2V9LHByb2plY3RzOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInByb2plY3QvbGlzdCJ9LHByb2plY3RQcmVmZXJlbmNlczpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtyZXR1cm4gZCsicHJvamVjdC8iK2UrIi9wcmVmZXJlbmNlLyIrdCsiLyIrbn0scHJvamVjdFVzZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBkKyJwcm9qZWN0LyIrZSsiL3VzZXJzIn0scHJvamVjdEFkbWluU2VhcmNoVXNlcjpmdW5jdGlvbihlKXtyZXR1cm4gZCsidXNlci9zZWFyY2giK2YoeyJwYWdlLnBhZ2UiOjEsInBhZ2Uuc2l6ZSI6MTAsInBhZ2Uuc29ydCI6InVzZXIsQVNDIix0ZXJtOmV9KX0scHJvamVjdFVzZXJTZWFyY2hVc2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQrInByb2plY3QvIitlKyIvdXNlcm5hbWVzL3NlYXJjaCIrZih7InBhZ2UucGFnZSI6MSwicGFnZS5zaXplIjoxMCwicGFnZS5zb3J0IjoidXNlcixBU0MiLHRlcm06dH0pfSxwcm9qZWN0VXNlcm5hbWVzU2VhcmNoOmZ1bmN0aW9uKGUpe3JldHVybiBkKyJwcm9qZWN0LyIrZSsiL3VzZXJuYW1lcz9maWx0ZXIuY250LnVzZXJzPSJ9LHByb2plY3RJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZCsicHJvamVjdC8iK2UrIi9pbmRleCJ9LHByb2plY3RTdGF0dXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZCsicHJvamVjdC9saXN0LyIrZStmKHtpbnRlcnZhbDp0fSl9LGV4cG9ydFByb2plY3RzOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInByb2plY3QvZXhwb3J0IitmKHt2aWV3OmwuQ1NWLGFjY2Vzc190b2tlbjpwKCl9KX0scHJvamVjdE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGQrInByb2plY3QvIitlKyIvbm90aWZpY2F0aW9uIn0sc3VpdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iIitkK2UrIi9pdGVtLyIrdH0sdGVzdEl0ZW1zOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIiIrZCtlKyIvaXRlbSIrZih7aWRzOnR9KX0sdGVzdEl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiO3JldHVybiIiK2QrZSsiL2l0ZW0vIit0fSx0ZXN0SXRlbXNIaXN0b3J5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iIitkK2UrIi9pdGVtL2hpc3RvcnkiK2Yoe2lkczp0LGhpc3RvcnlfZGVwdGg6bn0pfSx0ZXN0SXRlbXNBZGRJc3N1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvaXRlbS9pc3N1ZS9hZGQifSxsb2dJdGVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iIitkK2UrIi9sb2ciK2YoeyJmaWx0ZXIuZXEuaXRlbSI6dCwiZmlsdGVyLmluLmxldmVsIjpuLCJwYWdlLnBhZ2UiOjEsInBhZ2Uuc2l6ZSI6MSwicGFnZS5zb3J0IjoibG9nVGltZSxERVNDIn0pfSxsb2dJdGVtczpmdW5jdGlvbihlLHQsbil7cmV0dXJuIiIrZCtlKyIvbG9nIitmKHsiZmlsdGVyLmVxLml0ZW0iOnQsImZpbHRlci5ndGUubGV2ZWwiOm59KX0sbG9nSXRlbUFjdGl2aXR5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIiIrZCtlKyIvYWN0aXZpdHkvaXRlbS8iK3R9LGxvZ0l0ZW1TdGFja1RyYWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIiIrZCtlKyIvbG9nIitmKHsiZmlsdGVyLmVxLml0ZW0iOnQsInBhZ2UucGFnZSI6MSwicGFnZS5zaXplIjoxLCJmaWx0ZXIuaW4ubGV2ZWwiOiJFUlJPUiIsInBhZ2Uuc29ydCI6ImxvZ1RpbWUsREVTQyJ9KX0sbG9nSXRlbVN0YWNrVHJhY2VNZXNzYWdlTG9jYXRpb246ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4iIitkK2UrIi9sb2cvIituKyIvcGFnZSIrZih7ImZpbHRlci5lcS5pdGVtIjp0LCJwYWdlLnBhZ2UiOjEsInBhZ2Uuc2l6ZSI6ciwiZmlsdGVyLmd0ZS5sZXZlbCI6bywicGFnZS5zb3J0IjoibG9nVGltZSxBU0MifSl9LHVzZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZCsidXNlciJ9LHVzZXJSZWdpc3RyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZCsidXNlci9yZWdpc3RyYXRpb24ifSx1c2VyUGFzc3dvcmRSZXNldDpmdW5jdGlvbigpe3JldHVybiBkKyJ1c2VyL3Bhc3N3b3JkL3Jlc2V0In0sdXNlclBhc3N3b3JkUmVzZXRUb2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gZCsidXNlci9wYXNzd29yZC9yZXNldC8iK2V9LHVzZXJQYXNzd29yZFJlc3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZCsidXNlci9wYXNzd29yZC9yZXN0b3JlIn0sdXNlckNoYW5nZVBhc3N3b3JkOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInVzZXIvcGFzc3dvcmQvY2hhbmdlIn0sdXNlclN5bmNocm9uaXplOmZ1bmN0aW9uKGUpe3JldHVybiBkKyJ1YXQvc3NvL21lLyIrZSsiL3N5bmNocm9uaXplIn0sdXNlckluZm86ZnVuY3Rpb24oZSl7cmV0dXJuIGQrInVzZXIvIitlfSx1c2VySW52aXRlSW50ZXJuYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGQrInByb2plY3QvIitlKyIvYXNzaWduIn0sdXNlckludml0ZUV4dGVybmFsOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInVzZXIvYmlkIn0sdXNlclVuYXNpZ246ZnVuY3Rpb24oZSl7cmV0dXJuIGQrInByb2plY3QvIitlKyIvdW5hc3NpZ24ifSxnZW5lcmF0ZURlbW9EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBkKyJkZW1vLyIrZX0sZ2V0RmlsZUJ5SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGQrImRhdGEvIitlK2Yoe2FjY2Vzc190b2tlbjpwKCl9KX0sc2VydmVyU2V0dGluZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gZCsic2V0dGluZ3MifSxlbWFpbFNlcnZlclNldHRpbmdzOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInNldHRpbmdzL2VtYWlsIn0sYXV0aFNldHRpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBfKyJzZXR0aW5ncy9hdXRoLyIrZX0sZ2l0aHViQXV0aFNldHRpbmdzOmZ1bmN0aW9uKCl7cmV0dXJuIF8rInNldHRpbmdzL29hdXRoL2dpdGh1YiJ9LHN0YXRpc3RpY3NTZXJ2ZXJTZXR0aW5nczpmdW5jdGlvbigpe3JldHVybiBkKyJzZXR0aW5ncy9hbmFseXRpY3MifSxldmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIiIrZCtlKyIvYWN0aXZpdHkifSxhbGxVc2VyczpmdW5jdGlvbigpe3JldHVybiBkKyJ1c2VyL2FsbCJ9LGV4cG9ydFVzZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGQrInVzZXIvZXhwb3J0IitmKHt2aWV3OiJjc3YiLGFjY2Vzc190b2tlbjpwKCl9KX0saW5mbzpmdW5jdGlvbigpe3JldHVybiBkKyJpbmZvIn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJERUZBVUxUX0FQSV9VUkxfUFJFRklYIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXJscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlVBVF9BUElfVVJMX1BSRUZJWCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3VybHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJVUkxTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXJscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsInVybEJhc2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91cmxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywidWF0QmFzZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3VybHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJnZXRUb2tlbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3VybHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJnZXRRdWVyeVBhcmFtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3VybHMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvYWRkVG9rZW5Ub0ltYWdlUGF0aC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShpLlRPS0VOX0tFWSl8fCIiKS5zcGxpdCgiICIpLG49KDAscy5kZWZhdWx0KSh0LDIpLHI9blsxXTtpZihyKXtyZXR1cm4iIitlKygtMSE9PWUuaW5kZXhPZigiPyIpPyImIjoiPyIpKyJhY2Nlc3NfdG9rZW49IityfXJldHVybiBlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKTt0LmFkZFRva2VuVG9JbWFnZVBhdGg9cjt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2luZGV4LmpzIik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiYWRkVG9rZW5Ub0ltYWdlUGF0aCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2FkZFRva2VuVG9JbWFnZVBhdGguanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9hcnJheURpZmZlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hcnJheURpZmZlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPXQuYXJyYXlEaWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxpPW5ldyBvLmRlZmF1bHQoKGU9W10pLmNvbmNhdC5hcHBseShlLG4pKTtyZXR1cm4gcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWkuaGFzKGUpfSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImFycmF5RGlmZmVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvYXJyYXlEaWZmZXIuanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9hcnJheVJlbW92ZURvdWJsZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuYXJyYXlSZW1vdmVEb3VibGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT1uLmluZGV4T2YoZSl9KX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiYXJyYXlSZW1vdmVEb3VibGVzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvYXJyYXlSZW1vdmVEb3VibGVzLmpzIil9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvYXR0cmlidXRlVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmtleTtyZXR1cm4gZS52YWx1ZXx8dH0sbz10LmZvcm1hdEF0dHJpYnV0ZT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUua2V5LG49ZS52YWx1ZTtyZXR1cm4gdCYmbj90KyI6IituOnIoe2tleTp0LHZhbHVlOm59KXx8IiJ9LHM9dC5zeXN0ZW1BdHRyaWJ1dGVQcmVkaWNhdGU9ZnVuY3Rpb24oKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLnN5c3RlbX0saT10Lm5vdFN5c3RlbUF0dHJpYnV0ZVByZWRpY2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4hcyhlKX0sYT10LmNvbXBhcmVBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiYoZS5rZXk9PT10LmtleSYmZS52YWx1ZT09PXQudmFsdWUmJmUuc3lzdGVtPT09dC5zeXN0ZW0pfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiZ2V0QXR0cmlidXRlVmFsdWUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9hdHRyaWJ1dGVVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZvcm1hdEF0dHJpYnV0ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2F0dHJpYnV0ZVV0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywic3lzdGVtQXR0cmlidXRlUHJlZGljYXRlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvYXR0cmlidXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJub3RTeXN0ZW1BdHRyaWJ1dGVQcmVkaWNhdGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9hdHRyaWJ1dGVVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImNvbXBhcmVBdHRyaWJ1dGVzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvYXR0cmlidXRlVXRpbHMuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvY29ubmVjdFJvdXRlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29ubmVjdFJvdXRlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxfPW4oIi4vc3JjL2NvbW1vbi91dGlscy9yb3V0aW5nVXRpbHMuanMiKSxwPW4oIi4vc3JjL2NvbW1vbi91dGlscy9vbWl0LmpzIiksZj1mdW5jdGlvbihlKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHt9LGUpfSxtPXQuY29ubmVjdFJvdXRlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpmLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4oMCxjLmNvbm5lY3QpKGZ1bmN0aW9uKHQscil7dmFyIG89KDAsZC5wYWdlUHJvcGVydGllc1NlbGVjdG9yKSh0KSxzPW4ubmFtZXNwYWNlfHxyLm5hbWVzcGFjZSxpPW4ubmFtZXNwYWNlU2VsZWN0b3J8fHIubmFtZXNwYWNlU2VsZWN0b3I7IW4ubmFtZXNwYWNlJiZpJiYocz1pKHQpKTt2YXIgYT1zPygwLF8uZXh0cmFjdE5hbWVzcGFjZWRRdWVyeSkobyxzKTpvO3JldHVybigwLHUuZGVmYXVsdCkoe25hbWVzcGFjZTpzfSxlKGEpKX0sZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuKDAsYS5kZWZhdWx0KSh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe25bcl09ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKDAsZC51cGRhdGVQYWdlUHJvcGVydGllc0FjdGlvbikoKDAsXy5jcmVhdGVOYW1lc3BhY2VkUXVlcnkpKHRbcl0uYXBwbHkodCxhcmd1bWVudHMpLG4pKSl9fX0pLG59LGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHt9LCgwLHAub21pdCkoZSxbIm5hbWVzcGFjZSIsIm5hbWVzcGFjZWRRdWVyeSIsIm5hbWVzcGFjZVNlbGVjdG9yIl0pLHIsKDAsYS5kZWZhdWx0KSh0KS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHt9LHQsKDAscy5kZWZhdWx0KSh7fSxuLHRbbl0oZS5uYW1lc3BhY2UpKSl9LG4pKX0pKHIpfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImNvbm5lY3RSb3V0ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9jb25uZWN0Um91dGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsInRha2VBbGwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9jb25uZWN0Um91dGVyLmpzeCIpKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9kZWJvdW5jZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5kZWJvdW5jZT1mdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHIpLHM9MDtzPHI7cysrKW9bc109YXJndW1lbnRzW3NdO3ZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodm9pZCAwLG8pfTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChpLHQpLGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dChuKX19fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJkZWJvdW5jZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2RlYm91bmNlLmpzIil9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvZmV0Y2guanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudXBkYXRlVG9rZW49dC5mZXRjaD10LkVSUk9SX1VOQVVUSE9SSVpFRD10LkVSUk9SX0NBTkNFTEVEPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiKSx1PXIobCksYz10LkVSUk9SX0NBTkNFTEVEPSJSRVFVRVNUX0NBTkNFTEVEIixkPXQuRVJST1JfVU5BVVRIT1JJWkVEPSJVTkFVVEhPUklaRUQiLF89ZnVuY3Rpb24oZSl7aWYodS5kZWZhdWx0LmlzQ2FuY2VsKGUpKXRocm93IG5ldyBFcnJvcihjKTtpZihlLnJlc3BvbnNlJiY0MDE9PT1lLnJlc3BvbnNlLnN0YXR1cyl0aHJvdyBuZXcgRXJyb3IoZCk7aWYoZS5yZXNwb25zZSYmZS5yZXNwb25zZS5kYXRhKXRocm93IGUucmVzcG9uc2UuZGF0YTt0aHJvdyBlfSxwPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGF9LGY9dC5mZXRjaD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj10JiZ0LmFib3J0P25ldyBsLkNhbmNlbFRva2VuKHQuYWJvcnQpOm51bGwscj10JiZ0LmhlYWRlcnMsbz0oMCxhLmRlZmF1bHQpKHt9LHJ8fHt9KSxpPSgwLHMuZGVmYXVsdCkoe30sdCx7Y2FuY2VsVG9rZW46bix1cmw6ZSxoZWFkZXJzOm99KTtyZXR1cm4oMCx1LmRlZmF1bHQpKGkpLmNhdGNoKF8pLnRoZW4ocCl9LG09dC51cGRhdGVUb2tlbj1mdW5jdGlvbihlKXt1LmRlZmF1bHQuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXphdGlvbj1lfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiRVJST1JfQ0FOQ0VMRUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9mZXRjaC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkVSUk9SX1VOQVVUSE9SSVpFRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2ZldGNoLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiZmV0Y2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9mZXRjaC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sInVwZGF0ZVRva2VuIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvZmV0Y2guanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJoYW5kbGVFcnJvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2ZldGNoLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiaGFuZGxlUmVzcG9uc2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9mZXRjaC5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9maWxlU2l6ZUNvbnZlcnRlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e3RiOiJUQiIsZ2I6IkdCIixtYjoiTUIiLGtiOiJLQiIsYjoiYiJ9LG89dC5maWxlU2l6ZUNvbnZlcnRlcj1mdW5jdGlvbihlKXtpZighKCFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSkmJmU+PTApKXRocm93IG5ldyBFcnJvcigiWW91IHNob3VsZCBwcm92aWRlIHBvc2l0aXZlIGludGVnZXIgb3IgemVybyBmb3IgdGhpcyBmdW5jdGlvbiIpO3ZhciB0PXZvaWQgMCxuPTAsbz1bInRiIiwiZ2IiLCJtYiIsImtiIiwiYiJdLHM9by5sZW5ndGgsaT12b2lkIDAsYT0wLGw9ImIiO2lmKGU+MCl7bz1bInRiIiwiZ2IiLCJtYiIsImtiIiwiYiJdO2Zvcih2YXIgdT0wO248czt1Kz0xLG4rPTEpaWYoaT1vW3VdLHQ9TWF0aC5wb3coMWUzLDQtdSkvMTAsZT49dCl7YT1lL01hdGgucG93KDFlMyw0LXUpLGw9aTticmVha31hPU1hdGgucm91bmQoMTAqYSkvMTB9cmV0dXJuIiIrYStyW2xdfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZmlsZVNpemVDb252ZXJ0ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9maWxlU2l6ZUNvbnZlcnRlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkZJTEVfU0laRV9VTklUU19ESUNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvZmlsZVNpemVDb252ZXJ0ZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigxZTMsIkZJTEVfU0laRV9CQVNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvZmlsZVNpemVDb252ZXJ0ZXIuanMiKSl9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvZ2V0VGlja2V0VXJsSWQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0vKGh0dHB8aHR0cHMpOlwvXC9bYS16MC05XC1fXSsoXC5bYS16MC05XC1fXSspKyhbYS16MC05XC0uLEA/Xj0lJjs6XC9+KyNdKlthLXowLTlcLUA/Xj0lJjtcL34rI10pPy9pLG49ZS5zZWFyY2godCkscj1lLnNsaWNlKDAsbi0xKSxvPWUuc2xpY2Uobik7cmV0dXJuIG4+MCYmcj97aWQ6cix1cmw6b306bnVsbH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRUaWNrZXRVcmxJZD1yOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImdldFRpY2tldFVybElkIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvZ2V0VGlja2V0VXJsSWQuanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5xdWV1ZVJlZHVjZXJzPXQuYXJyYXlEaWZmZXI9dC5yYW5nZT10LmdldFRpY2tldFVybElkPXQucGFyc2VEYXRlVGltZVJhbmdlPXQuYXJyYXlSZW1vdmVEb3VibGVzPXQuZGVib3VuY2U9dC5maWxlU2l6ZUNvbnZlcnRlcj10LnVuaXF1ZUlkPXQuY29ubmVjdFJvdXRlcj10LmdldE1pbnV0ZXNGcm9tVGltZXN0YW1wPXQuZ2V0VGltZXN0YW1wRnJvbU1pbnV0ZXM9dC51dGNPZmZzZXQ9dC5kYXlzQmV0d2Vlbj10LmRheXNGcm9tTm93PXQuZnJvbU5vd0Zvcm1hdD10LmRhdGVGb3JtYXQ9dC5hcHByb3hpbWF0ZVRpbWVGb3JtYXQ9dC5nZXREdXJhdGlvbj10LnVwZGF0ZVN0b3JhZ2VJdGVtPXQucmVtb3ZlU3RvcmFnZUl0ZW09dC5zZXRTdG9yYWdlSXRlbT10LmdldFN0b3JhZ2VJdGVtPXQuYWRkVG9rZW5Ub0ltYWdlUGF0aD10LkVSUk9SX1VOQVVUSE9SSVpFRD10LkVSUk9SX0NBTkNFTEVEPXQuZmV0Y2g9dC5yZWZlcmVuY2VEaWN0aW9uYXJ5PXQuaXNFbXB0eU9iamVjdD10LnZhbGlkYXRlPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vdXRpbHMvaXNFbXB0eU9iamVjdC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0VtcHR5T2JqZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5pc0VtcHR5T2JqZWN0fX0pO3ZhciBvPW4oIi4vc3JjL2NvbW1vbi91dGlscy9yZWZlcmVuY2VEaWN0aW9uYXJ5LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZmVyZW5jZURpY3Rpb25hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnJlZmVyZW5jZURpY3Rpb25hcnl9fSk7dmFyIHM9bigiLi9zcmMvY29tbW9uL3V0aWxzL2ZldGNoLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5mZXRjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRVJST1JfQ0FOQ0VMRUQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkVSUk9SX0NBTkNFTEVEfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFUlJPUl9VTkFVVEhPUklaRUQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkVSUk9SX1VOQVVUSE9SSVpFRH19KTt2YXIgaT1uKCIuL3NyYy9jb21tb24vdXRpbHMvYWRkVG9rZW5Ub0ltYWdlUGF0aC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhZGRUb2tlblRvSW1hZ2VQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZGRUb2tlblRvSW1hZ2VQYXRofX0pO3ZhciBhPW4oIi4vc3JjL2NvbW1vbi91dGlscy9zdG9yYWdlVXRpbHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0U3RvcmFnZUl0ZW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmdldFN0b3JhZ2VJdGVtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZXRTdG9yYWdlSXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuc2V0U3RvcmFnZUl0ZW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZVN0b3JhZ2VJdGVtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5yZW1vdmVTdG9yYWdlSXRlbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlU3RvcmFnZUl0ZW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnVwZGF0ZVN0b3JhZ2VJdGVtfX0pO3ZhciBsPW4oIi4vc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldER1cmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5nZXREdXJhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBwcm94aW1hdGVUaW1lRm9ybWF0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5hcHByb3hpbWF0ZVRpbWVGb3JtYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRhdGVGb3JtYXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRhdGVGb3JtYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZyb21Ob3dGb3JtYXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmZyb21Ob3dGb3JtYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRheXNGcm9tTm93Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kYXlzRnJvbU5vd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGF5c0JldHdlZW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRheXNCZXR3ZWVufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1dGNPZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLnV0Y09mZnNldH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0VGltZXN0YW1wRnJvbU1pbnV0ZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmdldFRpbWVzdGFtcEZyb21NaW51dGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRNaW51dGVzRnJvbVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZ2V0TWludXRlc0Zyb21UaW1lc3RhbXB9fSk7dmFyIHU9bigiLi9zcmMvY29tbW9uL3V0aWxzL2Nvbm5lY3RSb3V0ZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNvbm5lY3RSb3V0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LmNvbm5lY3RSb3V0ZXJ9fSk7dmFyIGM9bigiLi9zcmMvY29tbW9uL3V0aWxzL3VuaXF1ZUlkLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVuaXF1ZUlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmlxdWVJZH19KTt2YXIgZD1uKCIuL3NyYy9jb21tb24vdXRpbHMvZmlsZVNpemVDb252ZXJ0ZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmlsZVNpemVDb252ZXJ0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLmZpbGVTaXplQ29udmVydGVyfX0pO3ZhciBfPW4oIi4vc3JjL2NvbW1vbi91dGlscy9kZWJvdW5jZS5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWJvdW5jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uZGVib3VuY2V9fSk7dmFyIHA9bigiLi9zcmMvY29tbW9uL3V0aWxzL2FycmF5UmVtb3ZlRG91Ymxlcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhcnJheVJlbW92ZURvdWJsZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmFycmF5UmVtb3ZlRG91Ymxlc319KTt2YXIgZj1uKCIuL3NyYy9jb21tb24vdXRpbHMvcGFyc2VEYXRlVGltZVJhbmdlLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcnNlRGF0ZVRpbWVSYW5nZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyc2VEYXRlVGltZVJhbmdlfX0pO3ZhciBtPW4oIi4vc3JjL2NvbW1vbi91dGlscy9nZXRUaWNrZXRVcmxJZC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRUaWNrZXRVcmxJZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uZ2V0VGlja2V0VXJsSWR9fSk7dmFyIGg9bigiLi9zcmMvY29tbW9uL3V0aWxzL3JhbmdlLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJhbmdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5yYW5nZX19KTt2YXIgZz1uKCIuL3NyYy9jb21tb24vdXRpbHMvYXJyYXlEaWZmZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXJyYXlEaWZmZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmFycmF5RGlmZmVyfX0pO3ZhciBiPW4oIi4vc3JjL2NvbW1vbi91dGlscy9xdWV1ZVJlZHVjZXJzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInF1ZXVlUmVkdWNlcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLnF1ZXVlUmVkdWNlcnN9fSk7dmFyIEU9bigiLi9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSx5PWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oRSksdj10LnZhbGlkYXRlPXk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwidmFsaWRhdGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL2lzRW1wdHlPYmplY3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gMD09PSgwLHMuZGVmYXVsdCkoZSkubGVuZ3RofU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyk7dC5pc0VtcHR5T2JqZWN0PXI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiaXNFbXB0eU9iamVjdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2lzRW1wdHlPYmplY3QuanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9pc0VtcHR5VmFsdWUuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuaXNFbXB0eVZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiIiPT09ZXx8bnVsbD09PWV8fHZvaWQgMD09PWV9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImlzRW1wdHlWYWx1ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2lzRW1wdHlWYWx1ZS5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL2xvY2FsaXphdGlvblV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZvcm1hdFN0YXR1cz10LmZvcm1hdE1ldGhvZFR5cGU9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXNMb2NhbGl6YXRpb24uanMiKSxvPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdHVzTG9jYWxpemF0aW9uLmpzIikscz10LmZvcm1hdE1ldGhvZFR5cGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5tZXRob2RUeXBlc0xvY2FsaXphdGlvblt0XT9lKHIubWV0aG9kVHlwZXNMb2NhbGl6YXRpb25bdF0pOnR9LGk9dC5mb3JtYXRTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5zdGF0dXNMb2NhbGl6YXRpb25bdF0/ZShvLnN0YXR1c0xvY2FsaXphdGlvblt0XSk6dH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImZvcm1hdE1ldGhvZFR5cGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9sb2NhbGl6YXRpb25VdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImZvcm1hdFN0YXR1cyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL2xvY2FsaXphdGlvblV0aWxzLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL29taXQuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQub21pdD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSx1PXIobCksYz10Lm9taXQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107cmV0dXJuKDAsdS5kZWZhdWx0KShlKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4tMT09PXQuaW5kZXhPZihyKT8oMCxhLmRlZmF1bHQpKHt9LG4sKDAscy5kZWZhdWx0KSh7fSxyLGVbcl0pKTpufSx7fSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIm9taXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9vbWl0LmpzIil9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvcGFyc2VEYXRlVGltZVJhbmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnBhcnNlRGF0ZVRpbWVSYW5nZT12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksbz10LnBhcnNlRGF0ZVRpbWVSYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2lmKC0xIT09dC5pbmRleE9mKCIsIikpe3ZhciBuPXQuc3BsaXQoIiwiKTtyZXR1cm57c3RhcnQ6cGFyc2VJbnQoblswXSwxMCksZW5kOnBhcnNlSW50KG5bMV0sMTApLGR5bmFtaWM6ITF9fWlmKC0xIT09dC5pbmRleE9mKCI7Iikpe3ZhciBvPXQuc3BsaXQoIjsiKTtyZXR1cm57c3RhcnQ6KDAsci5nZXRUaW1lc3RhbXBGcm9tTWludXRlcykob1swXSksZW5kOigwLHIuZ2V0VGltZXN0YW1wRnJvbU1pbnV0ZXMpKG9bMV0pLGR5bmFtaWM6ITB9fXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlIHN0cmluZyBwcm92aWRlZCIpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJwYXJzZURhdGVUaW1lUmFuZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wYXJzZURhdGVUaW1lUmFuZ2UuanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImhhc0FjY2Vzc1RvTWFuYWdlbWVudFN5c3RlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaGFzQWNjZXNzVG9NYW5hZ2VtZW50U3lzdGVtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5DcmVhdGVQcm9qZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5DcmVhdGVQcm9qZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5EZWxldGVQcm9qZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5EZWxldGVQcm9qZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5VcGRhdGVTZXR0aW5ncyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuVXBkYXRlU2V0dGluZ3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhblNlZVNldHRpbmdzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5TZWVTZXR0aW5nc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuQ3JlYXRlSW50ZXJuYWxVc2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5DcmVhdGVJbnRlcm5hbFVzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhbkludml0ZUludGVybmFsVXNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuSW52aXRlSW50ZXJuYWxVc2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5Bc3NpZ25VbmFzc2lnbkludGVybmFsVXNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuQXNzaWduVW5hc3NpZ25JbnRlcm5hbFVzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhbkNoYW5nZVVzZXJSb2xlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5DaGFuZ2VVc2VyUm9sZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuRGVsZXRlVXNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuRGVsZXRlVXNlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuU2VlTWVtYmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuU2VlTWVtYmVyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuRWRpdE93bkFjY291bnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNhbkVkaXRPd25BY2NvdW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5EZWxldGVMYXVuY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNhbkRlbGV0ZUxhdW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuRWRpdExhdW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuRWRpdExhdW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuRm9yY2VGaW5pc2hMYXVuY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNhbkZvcmNlRmluaXNoTGF1bmNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5TdGFydEFuYWx5c2lzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5TdGFydEFuYWx5c2lzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5EZWxldGVUZXN0SXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuRGVsZXRlVGVzdEl0ZW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhbk1vdmVUb0RlYnVnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5Nb3ZlVG9EZWJ1Z319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuTWVyZ2VMYXVuY2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuTWVyZ2VMYXVuY2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuV29ya1dpdGhGaWx0ZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5Xb3JrV2l0aEZpbHRlcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhblJlYWREYXRhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5SZWFkRGF0YX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuRGVsZXRlV2lkZ2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5EZWxldGVXaWRnZXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhbkRlbGV0ZURhc2hib2FyZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuRGVsZXRlRGFzaGJvYXJkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5EZWxldGVGaWx0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNhbkRlbGV0ZUZpbHRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2FuUmVzaXplQW5kRHJhZ1dpZGdldHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNhblJlc2l6ZUFuZERyYWdXaWRnZXRzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW5Db25maWdyZUVtYWlsTm90aWZpY2F0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuQ29uZmlncmVFbWFpbE5vdGlmaWNhdGlvbnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNhblNlZURlbW9EYXRhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5TZWVEZW1vRGF0YX19KX0sIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jYW5Db25maWdyZUVtYWlsTm90aWZpY2F0aW9ucz10LmNhblNlZURlbW9EYXRhPXQuY2FuRGVsZXRlRmlsdGVyPXQuY2FuRGVsZXRlRGFzaGJvYXJkPXQuY2FuRGVsZXRlV2lkZ2V0PXQuY2FuUmVzaXplQW5kRHJhZ1dpZGdldHM9dC5jYW5SZWFkRGF0YT10LmNhbldvcmtXaXRoRmlsdGVycz10LmNhbk1lcmdlTGF1bmNoZXM9dC5jYW5Nb3ZlVG9EZWJ1Zz10LmNhbkRlbGV0ZVRlc3RJdGVtPXQuY2FuU3RhcnRBbmFseXNpcz10LmNhbkZvcmNlRmluaXNoTGF1bmNoPXQuY2FuRWRpdExhdW5jaD10LmNhbkRlbGV0ZUxhdW5jaD10LmNhbkVkaXRPd25BY2NvdW50PXQuY2FuU2VlTWVtYmVycz10LmNhbkRlbGV0ZVVzZXI9dC5jYW5DaGFuZ2VVc2VyUm9sZT10LmNhbkFzc2lnblVuYXNzaWduSW50ZXJuYWxVc2VyPXQuY2FuSW52aXRlSW50ZXJuYWxVc2VyPXQuY2FuQ3JlYXRlSW50ZXJuYWxVc2VyPXQuY2FuU2VlU2V0dGluZ3M9dC5jYW5VcGRhdGVTZXR0aW5ncz10LmNhbkRlbGV0ZVByb2plY3Q9dC5jYW5DcmVhdGVQcm9qZWN0PXQuaGFzQWNjZXNzVG9NYW5hZ2VtZW50U3lzdGVtPXQuY3JlYXRlQ2hlY2tQZXJtaXNzaW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Blcm1pc3Npb25zLmpzIiksbz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2FjY291bnRSb2xlcy5qcyIpLHM9dC5jcmVhdGVDaGVja1Blcm1pc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHMsaSl7aWYobj09PW8uQURNSU5JU1RSQVRPUilyZXR1cm4hMDtpZihlW3NdKXt2YXIgYT1lW3NdW3RdO3JldHVybiEhYSYmKGk/YT09PXIuQUxMfHxhPT09ci5PV05FUjphPT09ci5BTEwpfXJldHVybiExfX19LGk9cyhyLlBFUk1JU1NJT05TX01BUCksYT10Lmhhc0FjY2Vzc1RvTWFuYWdlbWVudFN5c3RlbT1pKHIuQUNUSU9OUy5BQ0NFU1NfVE9fTUFOQUdFTUVOVF9TWVNURU0pLGw9dC5jYW5DcmVhdGVQcm9qZWN0PWkoci5BQ1RJT05TLkNSRUFURV9QUk9KRUNUKSx1PXQuY2FuRGVsZXRlUHJvamVjdD1pKHIuQUNUSU9OUy5ERUxFVEVfUFJPSkVDVCksYz10LmNhblVwZGF0ZVNldHRpbmdzPWkoci5BQ1RJT05TLlVQREFURV9TRVRUSU5HUyksZD10LmNhblNlZVNldHRpbmdzPWkoci5BQ1RJT05TLlNFRV9TRVRUSU5HUyksXz10LmNhbkNyZWF0ZUludGVybmFsVXNlcj1pKHIuQUNUSU9OUy5DUkVBVEVfSU5URVJOQUxfVVNFUikscD10LmNhbkludml0ZUludGVybmFsVXNlcj1pKHIuQUNUSU9OUy5JTlZJVEVfSU5URVJOQUxfVVNFUiksZj10LmNhbkFzc2lnblVuYXNzaWduSW50ZXJuYWxVc2VyPWkoci5BQ1RJT05TLkFTU0lHTl9VTkFTU0lHTl9JTlRFUk5BTF9VU0VSKSxtPXQuY2FuQ2hhbmdlVXNlclJvbGU9aShyLkFDVElPTlMuQ0hBTkdFX1VTRVJfUk9MRSksaD10LmNhbkRlbGV0ZVVzZXI9aShyLkFDVElPTlMuREVMRVRFX1VTRVIpLGc9dC5jYW5TZWVNZW1iZXJzPWkoci5BQ1RJT05TLlNFRV9NRU1CRVJTKSxiPXQuY2FuRWRpdE93bkFjY291bnQ9aShyLkFDVElPTlMuRURJVF9PV05fQUNDT1VOVCksRT10LmNhbkRlbGV0ZUxhdW5jaD1pKHIuQUNUSU9OUy5ERUxFVEVfTEFVTkNIKSx5PXQuY2FuRWRpdExhdW5jaD1pKHIuQUNUSU9OUy5FRElUX0xBVU5DSCksdj10LmNhbkZvcmNlRmluaXNoTGF1bmNoPWkoci5BQ1RJT05TLkZPUkNFX0ZJTklTSF9MQVVOQ0gpLFQ9dC5jYW5TdGFydEFuYWx5c2lzPWkoci5BQ1RJT05TLlNUQVJUX0FOQUxZU0lTKSxBPXQuY2FuRGVsZXRlVGVzdEl0ZW09aShyLkFDVElPTlMuREVMRVRFX1RFU1RfSVRFTSksQz10LmNhbk1vdmVUb0RlYnVnPWkoci5BQ1RJT05TLk1PVkVfVE9fREVCVUcpLE89dC5jYW5NZXJnZUxhdW5jaGVzPWkoci5BQ1RJT05TLk1FUkdFX0xBVU5DSEVTKSxTPXQuY2FuV29ya1dpdGhGaWx0ZXJzPWkoci5BQ1RJT05TLldPUktfV0lUSF9GSUxURVJTKSxSPXQuY2FuUmVhZERhdGE9aShyLkFDVElPTlMuUkVBRF9EQVRBKSxqPXQuY2FuUmVzaXplQW5kRHJhZ1dpZGdldHM9aShyLkFDVElPTlMuUkVTSVpFX0FORF9EUkFHX1dJREdFVFMpLHg9dC5jYW5EZWxldGVXaWRnZXQ9aShyLkFDVElPTlMuREVMRVRFX1dJREdFVCksTD10LmNhbkRlbGV0ZURhc2hib2FyZD1pKHIuQUNUSU9OUy5ERUxFVEVfREFTSEJPQVJEKSxEPXQuY2FuRGVsZXRlRmlsdGVyPWkoci5BQ1RJT05TLkRFTEVURV9GSUxURVIpLHc9dC5jYW5TZWVEZW1vRGF0YT1pKHIuQUNUSU9OUy5TRUVfREVNT19EQVRBKSxNPXQuY2FuQ29uZmlncmVFbWFpbE5vdGlmaWNhdGlvbnM9aShyLkFDVElPTlMuQ09ORklHVVJFX0VNQUlMX05PVElGSUNBVElPTik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImNyZWF0ZUNoZWNrUGVybWlzc2lvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiaGFzQWNjZXNzVG9NYW5hZ2VtZW50U3lzdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJjYW5DcmVhdGVQcm9qZWN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJjYW5EZWxldGVQcm9qZWN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjYW5VcGRhdGVTZXR0aW5ncyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY2FuU2VlU2V0dGluZ3MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImNhbkNyZWF0ZUludGVybmFsVXNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY2FuSW52aXRlSW50ZXJuYWxVc2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJjYW5Bc3NpZ25VbmFzc2lnbkludGVybmFsVXNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiY2FuQ2hhbmdlVXNlclJvbGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImNhbkRlbGV0ZVVzZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImNhblNlZU1lbWJlcnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImNhbkVkaXRPd25BY2NvdW50IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJjYW5EZWxldGVMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImNhbkVkaXRMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsImNhbkZvcmNlRmluaXNoTGF1bmNoIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihULCJjYW5TdGFydEFuYWx5c2lzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJjYW5EZWxldGVUZXN0SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQywiY2FuTW92ZVRvRGVidWciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sImNhbk1lcmdlTGF1bmNoZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFMsImNhbldvcmtXaXRoRmlsdGVycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiY2FuUmVhZERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosImNhblJlc2l6ZUFuZERyYWdXaWRnZXRzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJjYW5EZWxldGVXaWRnZXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEwsImNhbkRlbGV0ZURhc2hib2FyZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiY2FuRGVsZXRlRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJjYW5TZWVEZW1vRGF0YSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiY2FuQ29uZmlncmVFbWFpbE5vdGlmaWNhdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImNoZWNrUGVybWlzc2lvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL3F1ZXVlUmVkdWNlcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQucXVldWVSZWR1Y2Vycz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoZSxuKX0sZSl9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJxdWV1ZVJlZHVjZXJzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcXVldWVSZWR1Y2Vycy5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL3JhbmdlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0PWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2FyZ3VtZW50cy5sZW5ndGg8PTEmJih0PWUpO2Zvcih2YXIgcj1NYXRoLm1heChNYXRoLmNlaWwoKHQtZSkvbiksMCksbz0wLHM9bmV3IEFycmF5KHIpO288cjspc1tvKytdPWUsZSs9bjtyZXR1cm4gc31PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5yYW5nZT1yOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsInJhbmdlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcmFuZ2UuanMiKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9yZWZlcmVuY2VEaWN0aW9uYXJ5LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LnJlZmVyZW5jZURpY3Rpb25hcnk9e3JwTGFuZGluZzoiaHR0cDovL3JlcG9ydHBvcnRhbC5pby8iLHJwRG9jOiJodHRwOi8vcmVwb3J0cG9ydGFsLmlvL2RvY3MiLHJwR2l0SHViOiJodHRwczovL2dpdGh1Yi5jb20vcmVwb3J0cG9ydGFsIixycEZhY2Vib29rOiJodHRwczovL3d3dy5mYWNlYm9vay5jb20vUmVwb3J0UG9ydGFsLmlvIixycFR3aXR0ZXI6Imh0dHA6Ly90d2l0dGVyLmNvbS9SZXBvcnRQb3J0YWxfaW8iLHJwWW91dHViZToiaHR0cDovL3lvdXR1YmUuY29tL2MvUmVwb3J0UG9ydGFsQ29tbXVuaXR5IixycFZrOiJodHRwczovL3ZrLmNvbS9yZXBvcnRwb3J0YWxfaW8iLHJwU2xhY2s6Imh0dHBzOi8vcmVwb3J0cG9ydGFsLXNsYWNrLWF1dG8uaGVyb2t1YXBwLmNvbS8iLHJwRW1haWw6Im1haWx0bzpzdXBwb3J0QHJlcG9ydHBvcnRhbC5pbyIscnBFcGFtOiJodHRwczovL3d3dy5lcGFtLmNvbS8ifTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJyZWZlcmVuY2VEaWN0aW9uYXJ5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcmVmZXJlbmNlRGljdGlvbmFyeS5qcyIpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL3JvdXRpbmdVdGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb3B5UXVlcnk9dC5jcmVhdGVOYW1lc3BhY2VkUXVlcnk9dC5leHRyYWN0TmFtZXNwYWNlZFF1ZXJ5PXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIpLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIlBhcmFtcyJ9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZXhPZigiUGFyYW1zIikmJmUuc3Vic3RyKDAsZS5pbmRleE9mKCJQYXJhbXMiKSl9LHA9dC5leHRyYWN0TmFtZXNwYWNlZFF1ZXJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsYy5wYXJzZSkoZVtkKHQpXSl9LGY9dC5jcmVhdGVOYW1lc3BhY2VkUXVlcnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8oMCx1LmRlZmF1bHQpKHt9LGQodCksKDAsYy5zdHJpbmdpZnkpKGUpKTplfSxtPXQuY29weVF1ZXJ5PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO3JldHVybigwLGEuZGVmYXVsdCkoZSkucmVkdWNlKGZ1bmN0aW9uKG4scil7dmFyIG89XyhyKTtyZXR1cm4gbyYmLTEhPT10LmluZGV4T2Yobyk/KDAscy5kZWZhdWx0KSh7fSxuLCgwLHUuZGVmYXVsdCkoe30scixlW3JdKSk6bn0se30pfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiZXh0cmFjdE5hbWVzcGFjZWRRdWVyeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3JvdXRpbmdVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImNyZWF0ZU5hbWVzcGFjZWRRdWVyeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3JvdXRpbmdVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImNvcHlRdWVyeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3JvdXRpbmdVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJQYXJhbXMiLCJMRVZFTF9QQVJBTVNfU1VGRklYIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcm91dGluZ1V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY2FsY3VsYXRlTmFtZXNwYWNlS2V5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvcm91dGluZ1V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiZ2V0TmFtZXNwYWNlRnJvbUtleSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3JvdXRpbmdVdGlscy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy9zdG9yYWdlVXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk/SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKSk6bnVsbH1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGUsKDAsZC5kZWZhdWx0KSh0KSl9ZnVuY3Rpb24gaShlKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlKX1mdW5jdGlvbiBhKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPW8oZSl8fHt9O3JldHVybiBzKGUsKDAsdS5kZWZhdWx0KSh7fSxuLHQpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnkuanMiKSxkPXIoYyk7dC5nZXRTdG9yYWdlSXRlbT1vLHQuc2V0U3RvcmFnZUl0ZW09cyx0LnJlbW92ZVN0b3JhZ2VJdGVtPWksdC51cGRhdGVTdG9yYWdlSXRlbT1hOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJnZXRTdG9yYWdlSXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3N0b3JhZ2VVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsInNldFN0b3JhZ2VJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvc3RvcmFnZVV0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwicmVtb3ZlU3RvcmFnZUl0ZW0iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy9zdG9yYWdlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ1cGRhdGVTdG9yYWdlSXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3N0b3JhZ2VVdGlscy5qcyIpKX0oKX0sIi4vc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1pbnV0ZXNGcm9tVGltZXN0YW1wPXQuZ2V0VGltZXN0YW1wRnJvbU1pbnV0ZXM9dC51dGNPZmZzZXQ9dC5kYXlzQmV0d2Vlbj10LmRheXNGcm9tTm93PXQuZnJvbU5vd0Zvcm1hdD10LmRhdGVGb3JtYXQ9dC5hcHByb3hpbWF0ZVRpbWVGb3JtYXQ9dC5nZXREdXJhdGlvbj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguZmxvb3IoZS84NjQwMCksbj1NYXRoLmZsb29yKChlLTg2NDAwKnQpLzM2MDApLHI9TWF0aC5mbG9vcigoZS04NjQwMCp0LTM2MDAqbikvNjApO3JldHVybntkYXlzOnQsaG91cnM6bixtaW51dGVzOnIsc2Vjb25kczplLTg2NDAwKnQtMzYwMCpuLTYwKnJ9fSxpPXQuZ2V0RHVyYXRpb249ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXBhcnNlSW50KCh0LWUpLzFlMywxMCksbz1zKHIpLGk9by5kYXlzLGE9by5ob3VycyxsPW8ubWludXRlcyx1PW8uc2Vjb25kcyxjPSIiO3JldHVybiBpPjAmJihjPWMraSsiZCAiKSxhPjAmJihjPWMrYSsiaCAiKSxsPjAmJihjPWMrbCsibSIsaXx8YXx8IXV8fChjKz0iICIrdSsicyIpKSwiIj09PWMmJnU+MD9jPXUrInMiOiIiPT09YyYmMD09PXUmJihjPW4/KHQtZSkvMWUzKyJzIjpNYXRoLnJvdW5kKCh0LWUpLzEwKS8xMDArInMiKSxjLnRyaW0oKX0sYT10LmFwcHJveGltYXRlVGltZUZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD1zKGUpLG49dC5kYXlzLHI9dC5ob3VycyxvPXQubWludXRlcyxpPXQuc2Vjb25kcyxhPSIiO3JldHVybiBuPjAmJihhPWErbisiZCAiKSxyPjAmJihhPWErcisiaCAiKSxvPjAmJihhPWErbysibSIpLCIiPT09YSYmaT4wP2E9aSsicyI6IiI9PT1hJiYwPT09aSYmKGE9TWF0aC5yb3VuZChlLzEwKS8xMDArInMiKSxhLnRyaW0oKX0sbD10LmRhdGVGb3JtYXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgRGF0ZShlKSxyPW4uZ2V0TW9udGgoKSsxLG89bi5nZXREYXRlKCkscz1uLmdldEhvdXJzKCksaT1uLmdldE1pbnV0ZXMoKSxhPW4uZ2V0U2Vjb25kcygpLGw9bi5nZXRUaW1lem9uZU9mZnNldCgpLzYwKi0xO2w9LTE9PT1sLnRvU3RyaW5nKCkuaW5kZXhPZigiLSIpPyJVVEMrIitsOiJVVEMiK2w7dmFyIHU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5sZW5ndGg8Mj8iMCIrZTplfTtyZXR1cm4gbi5nZXRGdWxsWWVhcigpKyItIit1KHIpKyItIit1KG8pKyIgIit1KHMpKyI6Iit1KGkpKyI6Iit1KGEpKyh0PyIgIitsOiIiKX0sdT10LmZyb21Ob3dGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5kZWZhdWx0KShlKS5mcm9tTm93KCl9LGM9dC5kYXlzRnJvbU5vdz1mdW5jdGlvbihlKXtyZXR1cm4gdShsKGUpKX0sZD10LmRheXNCZXR3ZWVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5hYnMoZS5nZXRUaW1lKCktdC5nZXRUaW1lKCkpO3JldHVybiBNYXRoLnJvdW5kKG4vODY0ZTUpfSxfPXQudXRjT2Zmc2V0PShuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS82MCotMSxwPXQuZ2V0VGltZXN0YW1wRnJvbU1pbnV0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnVuaXgoKTtyZXR1cm4gMWUzKig2MCpwYXJzZUludChlLDEwKSt0KX0sZj10LmdldE1pbnV0ZXNGcm9tVGltZXN0YW1wPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8uZGVmYXVsdCkoKS5zdGFydE9mKCJkYXkiKS51bml4KCk7cmV0dXJuIHBhcnNlSW50KCgoMCxvLmRlZmF1bHQpKGUpLnVuaXgoKS10KS82MCwxMCl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJnZXREdXJhdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJhcHByb3hpbWF0ZVRpbWVGb3JtYXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiZGF0ZUZvcm1hdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJmcm9tTm93Rm9ybWF0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdGltZURhdGVVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImRheXNGcm9tTm93IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdGltZURhdGVVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImRheXNCZXR3ZWVuIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdGltZURhdGVVdGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sInV0Y09mZnNldCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJnZXRUaW1lc3RhbXBGcm9tTWludXRlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJnZXRNaW51dGVzRnJvbVRpbWVzdGFtcCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJnZXRUaW1lVW5pdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIikpfSgpfSwiLi9zcmMvY29tbW9uL3V0aWxzL3VuaXF1ZUlkLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LnVuaXF1ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIl8iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJ1bmlxdWVJZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3VuaXF1ZUlkLmpzIil9KCl9LCIuL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5lbWFpbD1mdW5jdGlvbihlKXtyZXR1cm4hIS9eW2EtejAtOS4rXy1dK0BbYS16MC05Xy4tXSs/XC5bYS16MC05XXsyLH0kL2kuZXhlYyhlKX0sbz10LnBhc3N3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiEhL14oLil7NCwxMjh9JC8uZXhlYyhlKX0scz10LmxvZ2luPWZ1bmN0aW9uKGUpe3JldHVybiEhL15bMC05YS16QS1aLV8uXXsxLDEyOH0kLy5leGVjKGUpfSxpPXQubmFtZT1mdW5jdGlvbihlKXtyZXR1cm4hIS9eW2EtejAtOS5fXC1cc1x1MDQwMC1cdTA0RkZdezMsMjU2fSQvaS5leGVjKGUpfSxhPXQubWluU2hvdWxkTWF0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuL14oWzUtOV1bMC05XSkkfF4xMDAkLy5leGVjKGUpfSxsPXQubWluVGVybUZyZXE9ZnVuY3Rpb24oZSl7cmV0dXJuL15bMS05XSR8XjEwJC8uZXhlYyhlKX0sdT10Lm1pbkRvY0ZyZXE9ZnVuY3Rpb24oZSl7cmV0dXJuL15bMS05XSR8XjEwJC8uZXhlYyhlKX0sYz10LmZpbHRlck5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTI4fSxkPXQubGF1bmNoTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+PTEmJmUubGVuZ3RoPD0yNTZ9LF89dC5sYXVuY2hEZXNjcmlwdGlvbj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtyZXR1cm4gZS5sZW5ndGg+PTAmJmUubGVuZ3RoPD0xMDI0fSxwPXQuZGFzaGJvYXJkTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+PTMmJmUubGVuZ3RoPD0xMjh9LGY9dC53aWRnZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD49MyYmZS5sZW5ndGg8PTEyOH0sbT10Lml0ZW1OYW1lRW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD49MyYmZS5sZW5ndGg8PTI1Nn0saD10LmxhdW5jaE51bWVyaWNFbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPj0xJiZlLmxlbmd0aDw9MTgmJiEhZS5tYXRjaCgvXlswLTldKyQvKX0sZz10LmxhdW5jaERlc2NyaXB0aW9uRW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD49MyYmZS5sZW5ndGg8PTE4fSxiPXQuaW5SYW5nZVZhbGlkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTnVtYmVyKGUpPj10JiZOdW1iZXIoZSk8PW59LEU9dC5hdHRyaWJ1dGVLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPj0xJiZlLmxlbmd0aDw9MTI4fSx5PXQudXJsPWZ1bmN0aW9uKGUpe3JldHVybiEhL14oZnRwfGh0dHB8aHR0cHMpOlwvXC9bXiAiXSskLy5leGVjKGUpfSx2PXQuaXNzdWVJZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+PTEmJmUubGVuZ3RoPD0xMjh9LFQ9dC51cmxQYXJ0PWZ1bmN0aW9uKGUpe3JldHVybiEhLzpcL1wvLisvLmV4ZWMoZSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJlbWFpbCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJwYXNzd29yZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJsb2dpbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJuYW1lIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIm1pblNob3VsZE1hdGNoIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIm1pblRlcm1GcmVxIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIm1pbkRvY0ZyZXEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy92YWxpZGF0aW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiZmlsdGVyTmFtZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJsYXVuY2hOYW1lIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImxhdW5jaERlc2NyaXB0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImRhc2hib2FyZE5hbWUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy92YWxpZGF0aW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwid2lkZ2V0TmFtZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJpdGVtTmFtZUVudGl0eSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJsYXVuY2hOdW1lcmljRW50aXR5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImxhdW5jaERlc2NyaXB0aW9uRW50aXR5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImluUmFuZ2VWYWxpZGF0ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJhdHRyaWJ1dGVLZXkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy92YWxpZGF0aW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwidXJsIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21tb24vdXRpbHMvdmFsaWRhdGlvbi5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsImlzc3VlSWQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbW1vbi91dGlscy92YWxpZGF0aW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwidXJsUGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tbW9uL3V0aWxzL3ZhbGlkYXRpb24uanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvYmlnQnV0dG9uL2JpZ0J1dHRvbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpZ0J1dHRvbj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9iaWdCdXR0b24vYmlnQnV0dG9uLnNjc3MiKSxkPXIoYyksXz11LmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5CaWdCdXR0b249ZnVuY3Rpb24odCl7dmFyIG49dC50eXBlLHI9dC5jaGlsZHJlbixvPXQuZGlzYWJsZWQsaT10LmNsYXNzTmFtZSxhPXQubW9iaWxlRGlzYWJsZWQsbD10LmNvbG9yLHU9dC5yb3VuZGVkQ29ybmVycyxjPXQub25DbGljayxkPV8oImJpZy1idXR0b24iLGksKDAscy5kZWZhdWx0KSh7InJvdW5kZWQtY29ybmVycyI6dSwibW9iaWxlLWRpc2FibGVkIjphLGRpc2FibGVkOm99LCJjb2xvci0iK2wsbCkpO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse3R5cGU6bixkaXNhYmxlZDpvLGNsYXNzTmFtZTpkLG9uQ2xpY2s6Y30scil9O3AucHJvcFR5cGVzPXtjaGlsZHJlbjphLmRlZmF1bHQubm9kZSxtb2JpbGVEaXNhYmxlZDphLmRlZmF1bHQuYm9vbCxjbGFzc05hbWU6YS5kZWZhdWx0LnN0cmluZyxkaXNhYmxlZDphLmRlZmF1bHQuYm9vbCxjb2xvcjphLmRlZmF1bHQuc3RyaW5nLHR5cGU6YS5kZWZhdWx0LnN0cmluZyxyb3VuZGVkQ29ybmVyczphLmRlZmF1bHQuYm9vbCxvbkNsaWNrOmEuZGVmYXVsdC5mdW5jfSxwLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46IiIsbW9iaWxlRGlzYWJsZWQ6ITEsY2xhc3NOYW1lOiIiLGRpc2FibGVkOiExLGNvbG9yOiJib29nZXIiLHR5cGU6ImJ1dHRvbiIscm91bmRlZENvcm5lcnM6ITEsb25DbGljazpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJCaWdCdXR0b24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9iaWdCdXR0b24vYmlnQnV0dG9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvYmlnQnV0dG9uL2JpZ0J1dHRvbi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvYmlnQnV0dG9uL2JpZ0J1dHRvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImJpZy1idXR0b24iOiJiaWdCdXR0b25fX2JpZy1idXR0b25fX19pdlk3aiIsInJvdW5kZWQtY29ybmVycyI6ImJpZ0J1dHRvbl9fcm91bmRlZC1jb3JuZXJzX19fM3dLQkwiLGRpc2FibGVkOiJiaWdCdXR0b25fX2Rpc2FibGVkX19fQzJweTUiLCJjb2xvci1ib29nZXIiOiJiaWdCdXR0b25fX2NvbG9yLWJvb2dlcl9fXzJJZlFUIiwiY29sb3Itb3JnYW5pc2giOiJiaWdCdXR0b25fX2NvbG9yLW9yZ2FuaXNoX19fNGlZWHkiLCJjb2xvci1ncmF5LTYwIjoiYmlnQnV0dG9uX19jb2xvci1ncmF5LTYwX19fMkxVUDYiLCJjb2xvci10b21hdG8iOiJiaWdCdXR0b25fX2NvbG9yLXRvbWF0b19fX1d2eTVMIiwiY29sb3Itd2hpdGUtdHdvIjoiYmlnQnV0dG9uX19jb2xvci13aGl0ZS10d29fX18ycmdqUyIsImNvbG9yLXRvcGF6IjoiYmlnQnV0dG9uX19jb2xvci10b3Bhel9fXzJBTlczIiwibW9iaWxlLWRpc2FibGVkIjoiYmlnQnV0dG9uX19tb2JpbGUtZGlzYWJsZWRfX18ydWVlRiJ9fSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2JpZ0J1dHRvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2JpZ0J1dHRvbi9iaWdCdXR0b24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkJpZ0J1dHRvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQmlnQnV0dG9ufX0pfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0QnV0dG9uL2dob3N0QnV0dG9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2hvc3RCdXR0b249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdEJ1dHRvbi9naG9zdEJ1dHRvbi5zY3NzIikscD1yKF8pLGY9dS5kZWZhdWx0LmJpbmQocC5kZWZhdWx0KSxtPXQuR2hvc3RCdXR0b249ZnVuY3Rpb24odCl7dmFyIG4scj10LnR5cGUsbz10LmNoaWxkcmVuLGk9dC5kaXNhYmxlZCxhPXQudGl0bGUsbD10LmNvbG9yLHU9dC5pY29uLGM9dC5pY29uQXRSaWdodCxfPXQub25DbGljayxwPXQudGlueSxtPXQubW9iaWxlRGlzYWJsZWQsaD10LmdyYXlCb3JkZXIsZz1mKChuPXsiZ2hvc3QtYnV0dG9uIjohMCxkaXNhYmxlZDppLHRpbnk6cH0sKDAscy5kZWZhdWx0KShuLCJjb2xvci0iK2wsbCksKDAscy5kZWZhdWx0KShuLCJ3aXRoLWljb24iLHUpLCgwLHMuZGVmYXVsdCkobiwibW9iaWxlLW1pbmlmaWVkIix1JiZvKSwoMCxzLmRlZmF1bHQpKG4sIm1vYmlsZS1kaXNhYmxlZCIsbSksKDAscy5kZWZhdWx0KShuLCJncmF5LWJvcmRlciIsaCksbikpO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse3R5cGU6cixkaXNhYmxlZDppLGNsYXNzTmFtZTpnLG9uQ2xpY2s6Xyx0aXRsZTphfSx1JiZlLmNyZWF0ZUVsZW1lbnQoImkiLHtjbGFzc05hbWU6ZigiaWNvbiIseyJvbmx5LWljb24iOiFvLCJpY29uLWF0LXJpZ2h0IjpjfSl9LCgwLGQuZGVmYXVsdCkodSkpLG8mJmUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpmKCJ0ZXh0Iil9LG8pKX07bS5wcm9wVHlwZXM9e2NoaWxkcmVuOmEuZGVmYXVsdC5ub2RlLGRpc2FibGVkOmEuZGVmYXVsdC5ib29sLHRpbnk6YS5kZWZhdWx0LmJvb2wsbW9iaWxlRGlzYWJsZWQ6YS5kZWZhdWx0LmJvb2wsaWNvbkF0UmlnaHQ6YS5kZWZhdWx0LmJvb2wsdGl0bGU6YS5kZWZhdWx0LnN0cmluZyxjb2xvcjphLmRlZmF1bHQuc3RyaW5nLGljb246YS5kZWZhdWx0LnN0cmluZyx0eXBlOmEuZGVmYXVsdC5zdHJpbmcsb25DbGljazphLmRlZmF1bHQuZnVuYyxncmF5Qm9yZGVyOmEuZGVmYXVsdC5ib29sfSxtLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46bnVsbCxkaXNhYmxlZDohMSx0aW55OiExLG1vYmlsZURpc2FibGVkOiExLGljb25BdFJpZ2h0OiExLHRpdGxlOiIiLGNvbG9yOiJ0b3BheiIsaWNvbjoiIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6ZnVuY3Rpb24oKXt9LGdyYXlCb3JkZXI6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJHaG9zdEJ1dHRvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0QnV0dG9uL2dob3N0QnV0dG9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vZ2hvc3RCdXR0b24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0QnV0dG9uL2dob3N0QnV0dG9uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZ2hvc3QtYnV0dG9uIjoiZ2hvc3RCdXR0b25fX2dob3N0LWJ1dHRvbl9fXzFQaEY3IixkaXNhYmxlZDoiZ2hvc3RCdXR0b25fX2Rpc2FibGVkX19fMkFhY2UiLCJjb2xvci10b3BheiI6Imdob3N0QnV0dG9uX19jb2xvci10b3Bhel9fXzJHVGxhIiwibW9iaWxlLWRpc2FibGVkIjoiZ2hvc3RCdXR0b25fX21vYmlsZS1kaXNhYmxlZF9fXzJIdHkwIiwiZ3JheS1ib3JkZXIiOiJnaG9zdEJ1dHRvbl9fZ3JheS1ib3JkZXJfX18zRnBScyIsaWNvbjoiZ2hvc3RCdXR0b25fX2ljb25fX18yclJseSIsIm9ubHktaWNvbiI6Imdob3N0QnV0dG9uX19vbmx5LWljb25fX18xMjdxcyIsImljb24tYXQtcmlnaHQiOiJnaG9zdEJ1dHRvbl9faWNvbi1hdC1yaWdodF9fXzNVaTdtIiwibW9iaWxlLW1pbmlmaWVkIjoiZ2hvc3RCdXR0b25fX21vYmlsZS1taW5pZmllZF9fXzFtN1BqIix0ZXh0OiJnaG9zdEJ1dHRvbl9fdGV4dF9fX2VVYTlUIix0aW55OiJnaG9zdEJ1dHRvbl9fdGlueV9fXzJaRFljIn19LCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdEJ1dHRvbi9naG9zdEJ1dHRvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2hvc3RCdXR0b24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdob3N0QnV0dG9ufX0pfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0TWVudUJ1dHRvbi9naG9zdE1lbnVCdXR0b24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HaG9zdE1lbnVCdXR0b249dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL3NyYy9jb21tb24vaW1nL2Fycm93LWRvd24taW5saW5lLnN2ZyIpLE09cih3KSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdE1lbnVCdXR0b24vZ2hvc3RNZW51QnV0dG9uLnNjc3MiKSxJPXIoayksUD17R2hvc3RNZW51QnV0dG9uOntkaXNwbGF5TmFtZToiR2hvc3RNZW51QnV0dG9uIn19LE49KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0TWVudUJ1dHRvbi9naG9zdE1lbnVCdXR0b24uanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksSD0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RNZW51QnV0dG9uL2dob3N0TWVudUJ1dHRvbi5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxGPXguZGVmYXVsdC5iaW5kKEkuZGVmYXVsdCksQj10Lkdob3N0TWVudUJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE4oSCh0LGUpLGUpfX0oIkdob3N0TWVudUJ1dHRvbiIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e29wZW5lZDohMX0sci5oYW5kbGVPdXRzaWRlQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50b2dnbGVNZW51PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2ssITEpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLCExKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubm9kZSYmIXRoaXMubm9kZS5jb250YWlucyhlLnRhcmdldCkmJnRoaXMuc3RhdGUub3BlbmVkJiZ0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe29wZW5lZDohdGhpcy5zdGF0ZS5vcGVuZWR9KSx0aGlzLnByb3BzLm9uQ2xpY2soKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10aGlzLnByb3BzLHI9bi50aXRsZSxvPW4uaXRlbXMscz1uLmRpc2FibGVkLGk9bi5jb2xvcixsPW4udG9vbHRpcDtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3RpdGxlOmwsY2xhc3NOYW1lOkYoImdob3N0LW1lbnUtYnV0dG9uIiwoZT17ZGlzYWJsZWQ6c30sKDAsYS5kZWZhdWx0KShlLCJjb2xvci0iK2ksaSksKDAsYS5kZWZhdWx0KShlLCJvcGVuZWQiLHRoaXMuc3RhdGUub3BlbmVkKSxlKSkscmVmOmZ1bmN0aW9uKGUpe3Qubm9kZT1lfSxvbkNsaWNrOnM/bnVsbDp0aGlzLnRvZ2dsZU1lbnV9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIix7Y2xhc3NOYW1lOkYoImhhbWJ1cmdlci1pY29uIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RigiaGFtYnVyZ2VyLWljb24tcGFydCIpfSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpGKCJoYW1idXJnZXItaWNvbi1wYXJ0Iil9KSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoImhhbWJ1cmdlci1pY29uLXBhcnQiKX0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpGKCJ0aXRsZSIpfSxyKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTpGKCJ0b2dnbGUtaWNvbiIpfSwoMCxELmRlZmF1bHQpKE0uZGVmYXVsdCkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RigibWVudSIpfSxvLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5oaWRkZW59KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6ZS52YWx1ZSxjbGFzc05hbWU6RigibWVudS1pdGVtIix7ZGlzYWJsZWQ6ZS5kaXNhYmxlZH0pLHRpdGxlOmUudGl0bGV8fCIiLG9uQ2xpY2s6ZS5kaXNhYmxlZD9udWxsOmZ1bmN0aW9uKG4pe24uc3RvcFByb3BhZ2F0aW9uKCksZS5vbkNsaWNrKCksdC50b2dnbGVNZW51KCl9fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxlLmxhYmVsKSl9KSkpfX1dKSx0fShULkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3RpdGxlOlIuZGVmYXVsdC5zdHJpbmcsaXRlbXM6Ui5kZWZhdWx0LmFycmF5T2YoUi5kZWZhdWx0LnNoYXBlKHtsYWJlbDpSLmRlZmF1bHQuc3RyaW5nLHZhbHVlOlIuZGVmYXVsdC5zdHJpbmcsaGlkZGVuOlIuZGVmYXVsdC5ib29sLGRpc2FibGVkOlIuZGVmYXVsdC5ib29sLHRpdGxlOlIuZGVmYXVsdC5zdHJpbmcsb25DbGljazpSLmRlZmF1bHQuZnVuY30pKSxkaXNhYmxlZDpSLmRlZmF1bHQuYm9vbCxjb2xvcjpSLmRlZmF1bHQuc3RyaW5nLHRvb2x0aXA6Ui5kZWZhdWx0LnN0cmluZyxvbkNsaWNrOlIuZGVmYXVsdC5mdW5jfSxvLmRlZmF1bHRQcm9wcz17dGl0bGU6IiIsaXRlbXM6W10sZGlzYWJsZWQ6ITEsY29sb3I6InRvcGF6Iix0b29sdGlwOiIiLG9uQ2xpY2s6ZnVuY3Rpb24oKXt9fSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIkdob3N0TWVudUJ1dHRvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0TWVudUJ1dHRvbi9naG9zdE1lbnVCdXR0b24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdE1lbnVCdXR0b24vZ2hvc3RNZW51QnV0dG9uLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0TWVudUJ1dHRvbi9naG9zdE1lbnVCdXR0b24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJnaG9zdC1tZW51LWJ1dHRvbiI6Imdob3N0TWVudUJ1dHRvbl9fZ2hvc3QtbWVudS1idXR0b25fX19tZGZXSSIsZGlzYWJsZWQ6Imdob3N0TWVudUJ1dHRvbl9fZGlzYWJsZWRfX18xSTItZiIsImhhbWJ1cmdlci1pY29uLXBhcnQiOiJnaG9zdE1lbnVCdXR0b25fX2hhbWJ1cmdlci1pY29uLXBhcnRfX18yX3ctQyIsb3BlbmVkOiJnaG9zdE1lbnVCdXR0b25fX29wZW5lZF9fXzNpaEVaIiwidG9nZ2xlLWljb24iOiJnaG9zdE1lbnVCdXR0b25fX3RvZ2dsZS1pY29uX19fMnBvSnMiLG1lbnU6Imdob3N0TWVudUJ1dHRvbl9fbWVudV9fXzNHY1FkIiwiY29sb3ItdG9wYXoiOiJnaG9zdE1lbnVCdXR0b25fX2NvbG9yLXRvcGF6X19fMUtvUUoiLCJoYW1idXJnZXItaWNvbiI6Imdob3N0TWVudUJ1dHRvbl9faGFtYnVyZ2VyLWljb25fX19idE5FWiIsdGl0bGU6Imdob3N0TWVudUJ1dHRvbl9fdGl0bGVfX18yOV9TOSIsIm1lbnUtaXRlbSI6Imdob3N0TWVudUJ1dHRvbl9fbWVudS1pdGVtX19fLThGdHEifX0sIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdE1lbnVCdXR0b24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdE1lbnVCdXR0b24vZ2hvc3RNZW51QnV0dG9uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHaG9zdE1lbnVCdXR0b24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdob3N0TWVudUJ1dHRvbn19KX0sIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9tdWx0aUFjdGlvbkJ1dHRvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL211bHRpQWN0aW9uQnV0dG9uL211bHRpQWN0aW9uQnV0dG9uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNdWx0aUFjdGlvbkJ1dHRvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTXVsdGlBY3Rpb25CdXR0b259fSl9LCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvbXVsdGlBY3Rpb25CdXR0b24vbXVsdGlBY3Rpb25CdXR0b24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdWx0aUFjdGlvbkJ1dHRvbj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbW1vbi9pbWcvYXJyb3ctZG93bi1pbmxpbmUuc3ZnIiksTT1yKHcpLGs9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL211bHRpQWN0aW9uQnV0dG9uL211bHRpQWN0aW9uQnV0dG9uLnNjc3MiKSxJPXIoayksUD17TXVsdGlBY3Rpb25CdXR0b246e2Rpc3BsYXlOYW1lOiJNdWx0aUFjdGlvbkJ1dHRvbiJ9fSxOPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9tdWx0aUFjdGlvbkJ1dHRvbi9tdWx0aUFjdGlvbkJ1dHRvbi5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxIPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9tdWx0aUFjdGlvbkJ1dHRvbi9tdWx0aUFjdGlvbkJ1dHRvbi5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxGPXguZGVmYXVsdC5iaW5kKEkuZGVmYXVsdCksQj10Lk11bHRpQWN0aW9uQnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fSgiTXVsdGlBY3Rpb25CdXR0b24iKSgocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtvcGVuZWQ6ITF9LHIuaGFuZGxlT3V0c2lkZUNsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlTWVudT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX3RvZ2dsZU1lbnVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZU1lbnVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLCExKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZU91dHNpZGVDbGljaywhMSl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXshdGhpcy5ub2RlLmNvbnRhaW5zKGUudGFyZ2V0KSYmdGhpcy5zdGF0ZS5vcGVuZWQmJnRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pfX0se2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXRoaXMucHJvcHMscj1uLnRpdGxlLG89bi5pdGVtcyxzPW4uZGlzYWJsZWQsaT1uLmNvbG9yLGw9bi5tZW51QXRSaWdodCx1PW4ub25DbGljaztyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpGKCJtdWx0aS1hY3Rpb24tYnV0dG9uIiwoZT17ZGlzYWJsZWQ6c30sKDAsYS5kZWZhdWx0KShlLCJjb2xvci0iK2ksaSksKDAsYS5kZWZhdWx0KShlLCJvcGVuZWQiLHRoaXMuc3RhdGUub3BlbmVkKSxlKSkscmVmOmZ1bmN0aW9uKGUpe3Qubm9kZT1lfX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNzTmFtZTpGKCJidXR0b24tcGFydCIpLG9uQ2xpY2s6dSxkaXNhYmxlZDpzfSxyKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoIm1lbnUtcGFydCIpLG9uQ2xpY2s6dGhpcy50b2dnbGVNZW51fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTpGKCJ0b2dnbGUtaWNvbiIpfSwoMCxELmRlZmF1bHQpKE0uZGVmYXVsdCkpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoIm1lbnUiLHsiYXQtcmlnaHQiOmx9KX0sby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6ZS52YWx1ZSxjbGFzc05hbWU6RigibWVudS1pdGVtIix7ZGlzYWJsZWQ6ZS5kaXNhYmxlZH0pLG9uQ2xpY2s6ZS5kaXNhYmxlZD9udWxsOmUub25DbGlja30sZS5sYWJlbCl9KSkpfX1dKSx0fShULkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3RpdGxlOlIuZGVmYXVsdC5zdHJpbmcsaXRlbXM6Ui5kZWZhdWx0LmFycmF5T2YoUi5kZWZhdWx0LnNoYXBlKHtsYWJlbDpSLmRlZmF1bHQuc3RyaW5nLHZhbHVlOlIuZGVmYXVsdC5zdHJpbmcsZGlzYWJsZWQ6Ui5kZWZhdWx0LmJvb2wsb25DbGljazpSLmRlZmF1bHQuZnVuY30pKSxtZW51QXRSaWdodDpSLmRlZmF1bHQuYm9vbCxvbkNsaWNrOlIuZGVmYXVsdC5mdW5jLGRpc2FibGVkOlIuZGVmYXVsdC5ib29sLGNvbG9yOlIuZGVmYXVsdC5zdHJpbmd9LG8uZGVmYXVsdFByb3BzPXt0aXRsZToiIixpdGVtczpbXSxtZW51QXRSaWdodDohMSxkaXNhYmxlZDohMSxjb2xvcjoiYm9vZ2VyIixvbkNsaWNrOmZ1bmN0aW9uKCl7fX0scykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJNdWx0aUFjdGlvbkJ1dHRvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9idXR0b25zL211bHRpQWN0aW9uQnV0dG9uL211bHRpQWN0aW9uQnV0dG9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvbXVsdGlBY3Rpb25CdXR0b24vbXVsdGlBY3Rpb25CdXR0b24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvbXVsdGlBY3Rpb25CdXR0b24vbXVsdGlBY3Rpb25CdXR0b24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtdWx0aS1hY3Rpb24tYnV0dG9uIjoibXVsdGlBY3Rpb25CdXR0b25fX211bHRpLWFjdGlvbi1idXR0b25fX19rODhYNSIsZGlzYWJsZWQ6Im11bHRpQWN0aW9uQnV0dG9uX19kaXNhYmxlZF9fXzNIOXdyIixvcGVuZWQ6Im11bHRpQWN0aW9uQnV0dG9uX19vcGVuZWRfX190dkRaMiIsInRvZ2dsZS1pY29uIjoibXVsdGlBY3Rpb25CdXR0b25fX3RvZ2dsZS1pY29uX19fMWNkalUiLG1lbnU6Im11bHRpQWN0aW9uQnV0dG9uX19tZW51X19fMjYyZnMiLCJjb2xvci1ib29nZXIiOiJtdWx0aUFjdGlvbkJ1dHRvbl9fY29sb3ItYm9vZ2VyX19fRGppcUUiLCJidXR0b24tcGFydCI6Im11bHRpQWN0aW9uQnV0dG9uX19idXR0b24tcGFydF9fXzJhakJaIiwibWVudS1wYXJ0IjoibXVsdGlBY3Rpb25CdXR0b25fX21lbnUtcGFydF9fXzJmUjZDIiwiYXQtcmlnaHQiOiJtdWx0aUFjdGlvbkJ1dHRvbl9fYXQtcmlnaHRfX19BdVRIbiIsIm1lbnUtaXRlbSI6Im11bHRpQWN0aW9uQnV0dG9uX19tZW51LWl0ZW1fX19SVm04ViJ9fSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3NpZGViYXJCdXR0b24vc2lkZWJhckJ1dHRvbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lkZWJhckJ1dHRvbj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxfPXIoZCkscD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvc2lkZWJhckJ1dHRvbi9zaWRlYmFyQnV0dG9uLnNjc3MiKSxmPXIocCksbT11LmRlZmF1bHQuYmluZChmLmRlZmF1bHQpLGg9dC5TaWRlYmFyQnV0dG9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUub25DbGljayxuPWUuaWNvbixyPWUuY2hpbGRyZW4sbz1lLmxpbmsscz1lLmJvdHRvbSxpPW0oeyJzaWRlYmFyLW5hdi1idG4iOiEwLCJhdC1ib3R0b20iOnN9KTtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTppfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLk5hdkxpbmsse3RvOm8sY2xhc3NOYW1lOm0oIm5hdi1saW5rIiksYWN0aXZlQ2xhc3NOYW1lOm0oImFjdGl2ZSIpLG9uQ2xpY2s6dH0sYS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6bSgid3JhcHBlciIpfSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTptKCJidG4taWNvbiIpfSwoMCxfLmRlZmF1bHQpKG4pKSxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTptKCJidG4tdGl0bGUiKX0scikpKSl9O2gucHJvcFR5cGVzPXtsaW5rOnMuZGVmYXVsdC5vbmVPZlR5cGUoW3MuZGVmYXVsdC5vYmplY3Qscy5kZWZhdWx0LnN0cmluZ10pLGljb246cy5kZWZhdWx0LnN0cmluZyxib3R0b206cy5kZWZhdWx0LmJvb2wsY2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsb25DbGljazpzLmRlZmF1bHQuZnVuY30saC5kZWZhdWx0UHJvcHM9e2xpbms6Ii8iLGljb246IiIsYm90dG9tOiExLGNoaWxkcmVuOm51bGwsb25DbGljazpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJTaWRlYmFyQnV0dG9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvc2lkZWJhckJ1dHRvbi9zaWRlYmFyQnV0dG9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvc2lkZWJhckJ1dHRvbi9zaWRlYmFyQnV0dG9uLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9zaWRlYmFyQnV0dG9uL3NpZGViYXJCdXR0b24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzaWRlYmFyLW5hdi1idG4iOiJzaWRlYmFyQnV0dG9uX19zaWRlYmFyLW5hdi1idG5fX18xcHJFTyIsImF0LWJvdHRvbSI6InNpZGViYXJCdXR0b25fX2F0LWJvdHRvbV9fXzJYaHJzIiwibmF2LWxpbmsiOiJzaWRlYmFyQnV0dG9uX19uYXYtbGlua19fXzJUQzBMIixhY3RpdmU6InNpZGViYXJCdXR0b25fX2FjdGl2ZV9fXzNkdmdfIix3cmFwcGVyOiJzaWRlYmFyQnV0dG9uX193cmFwcGVyX19fM1E3OVgiLCJidG4taWNvbiI6InNpZGViYXJCdXR0b25fX2J0bi1pY29uX19fMWxKeEkiLCJidG4tdGl0bGUiOiJzaWRlYmFyQnV0dG9uX19idG4tdGl0bGVfX18xMDg2SiJ9fSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi90b2dnbGVCdXR0b24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRvZ2dsZUJ1dHRvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVG9nZ2xlQnV0dG9ufX0pfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi90b2dnbGVCdXR0b24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ub2dnbGVCdXR0b249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvdG9nZ2xlQnV0dG9uL3RvZ2dsZUJ1dHRvbi5zY3NzIiksdT1yKGwpLGM9YS5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxkPXQuVG9nZ2xlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBuPXQuaXRlbXMscj10LnZhbHVlLG89dC5zZXBhcmF0ZWQscz10Lm9uQ2hhbmdlLGk9dC5tb2JpbGVEaXNhYmxlZCxhPXQuZGlzYWJsZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoInRvZ2dsZS1idXR0b24iLHtzZXBhcmF0ZWQ6b30pfSxuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dC52YWx1ZSxjbGFzc05hbWU6YygiYnV0dG9uLWl0ZW0iLHthY3RpdmU6dC52YWx1ZT09PXIsIm1vYmlsZS1kaXNhYmxlZCI6aSxkaXNhYmxlZDphfSksc3R5bGU6e3dpZHRoOjEwMC9uLmxlbmd0aCsiJSJ9LG9uQ2xpY2s6YT9udWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHModC52YWx1ZSl9fSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6YygiaXRlbS1sYWJlbCIpfSx0LmxhYmVsKSl9KSl9O2QucHJvcFR5cGVzPXtpdGVtczpzLmRlZmF1bHQuYXJyYXlPZihzLmRlZmF1bHQuc2hhcGUoe3ZhbHVlOnMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxsYWJlbDpzLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9KSksZGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsbW9iaWxlRGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsc2VwYXJhdGVkOnMuZGVmYXVsdC5ib29sLHZhbHVlOnMuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2U6cy5kZWZhdWx0LmZ1bmN9LGQuZGVmYXVsdFByb3BzPXtpdGVtczpbXSx2YWx1ZToiIixkaXNhYmxlZDohMSxtb2JpbGVEaXNhYmxlZDohMSxzZXBhcmF0ZWQ6ITEsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiVG9nZ2xlQnV0dG9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvdG9nZ2xlQnV0dG9uL3RvZ2dsZUJ1dHRvbi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi90b2dnbGVCdXR0b24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi90b2dnbGVCdXR0b24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ0b2dnbGUtYnV0dG9uIjoidG9nZ2xlQnV0dG9uX190b2dnbGUtYnV0dG9uX19fMTZKMlUiLCJidXR0b24taXRlbSI6InRvZ2dsZUJ1dHRvbl9fYnV0dG9uLWl0ZW1fX18zYXMtayIsYWN0aXZlOiJ0b2dnbGVCdXR0b25fX2FjdGl2ZV9fXzFLQXRPIiwiaXRlbS1sYWJlbCI6InRvZ2dsZUJ1dHRvbl9faXRlbS1sYWJlbF9fXzFSZ1c4IixkaXNhYmxlZDoidG9nZ2xlQnV0dG9uX19kaXNhYmxlZF9fXzJQNzFkIiwibW9iaWxlLWRpc2FibGVkIjoidG9nZ2xlQnV0dG9uX19tb2JpbGUtZGlzYWJsZWRfX18zUjRzOCIsc2VwYXJhdGVkOiJ0b2dnbGVCdXR0b25fX3NlcGFyYXRlZF9fXzE2NWJuIn19LCIuL3NyYy9jb21wb25lbnRzL2NvbnRhaW5lcnMvaW5pdGlhbERhdGFDb250YWluZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvY29udGFpbmVycy9pbml0aWFsRGF0YUNvbnRhaW5lci9pbml0aWFsRGF0YUNvbnRhaW5lci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5pdGlhbERhdGFDb250YWluZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkluaXRpYWxEYXRhQ29udGFpbmVyfX0pfSwiLi9zcmMvY29tcG9uZW50cy9jb250YWluZXJzL2luaXRpYWxEYXRhQ29udGFpbmVyL2luaXRpYWxEYXRhQ29udGFpbmVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5pdGlhbERhdGFDb250YWluZXI9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxEPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9BbmFseXRpY3NXcmFwcGVyLmpzeCIpLGs9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9pbmRleC5qcyIpLE49e0luaXRpYWxEYXRhQ29udGFpbmVyOntkaXNwbGF5TmFtZToiSW5pdGlhbERhdGFDb250YWluZXIifX0sSD0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2NvbnRhaW5lcnMvaW5pdGlhbERhdGFDb250YWluZXIvaW5pdGlhbERhdGFDb250YWluZXIuanN4Iixjb21wb25lbnRzOk4sbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksRj0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2NvbnRhaW5lcnMvaW5pdGlhbERhdGFDb250YWluZXIvaW5pdGlhbERhdGFDb250YWluZXIuanN4Iixjb21wb25lbnRzOk4sbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksQj10LkluaXRpYWxEYXRhQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSChGKHQsZSksZSl9fSgiSW5pdGlhbERhdGFDb250YWluZXIiKSgobz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVQcm9qZWN0OigwLEkuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSxpc0FuYWx5dGljc0VuYWJsZWQ6KDAsdy5hbmFseXRpY3NFbmFibGVkU2VsZWN0b3IpKGUpfX0se2ZldGNoSW5mb0FjdGlvbjp3LmZldGNoSW5mb0FjdGlvbixmZXRjaFVzZXJBY3Rpb246SS5mZXRjaFVzZXJBY3Rpb24sZmV0Y2hQcm9qZWN0QWN0aW9uOmsuZmV0Y2hQcm9qZWN0QWN0aW9uLGF1dGhTdWNjZXNzQWN0aW9uOlAuYXV0aFN1Y2Nlc3NBY3Rpb24sc2V0VG9rZW5BY3Rpb246UC5zZXRUb2tlbkFjdGlvbixyZXNldFRva2VuQWN0aW9uOlAucmVzZXRUb2tlbkFjdGlvbn0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtpbml0aWFsRGF0YVJlYWR5OiExfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wcm9wcy5zZXRUb2tlbkFjdGlvbigoMCxELmdldFN0b3JhZ2VJdGVtKShQLlRPS0VOX0tFWSl8fFAuREVGQVVMVF9UT0tFTik7dmFyIHQ9dGhpcy5wcm9wcy5mZXRjaEluZm9BY3Rpb24oKSxuPXRoaXMucHJvcHMuZmV0Y2hVc2VyQWN0aW9uKCkudGhlbihmdW5jdGlvbih0KXt2YXIgbj10LmFjdGl2ZVByb2plY3Q7cmV0dXJuIGUucHJvcHMuZmV0Y2hQcm9qZWN0QWN0aW9uKG4pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm9wcy5hdXRoU3VjY2Vzc0FjdGlvbigpfSl9KS5jYXRjaChmdW5jdGlvbigpe2UucHJvcHMucmVzZXRUb2tlbkFjdGlvbigpfSk7dS5kZWZhdWx0LmFsbChbdCxuXSkudGhlbihmdW5jdGlvbigpe2UucHJvcHMuaW5pdGlhbERpc3BhdGNoKCksZS5zZXRTdGF0ZSh7aW5pdGlhbERhdGFSZWFkeTohMH0pfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pc0FuYWx5dGljc0VuYWJsZWQsdD1lP08uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uQW5hbHl0aWNzV3JhcHBlcixudWxsLHRoaXMucHJvcHMuY2hpbGRyZW4pOnRoaXMucHJvcHMuY2hpbGRyZW47cmV0dXJuIHRoaXMuc3RhdGUuaW5pdGlhbERhdGFSZWFkeT90Ok8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCJMb2FkaW5nLi4uIil9fV0pLHR9KEMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17ZmV0Y2hJbmZvQWN0aW9uOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZmV0Y2hQcm9qZWN0QWN0aW9uOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZmV0Y2hVc2VyQWN0aW9uOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYWN0aXZlUHJvamVjdDp4LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsYXV0aFN1Y2Nlc3NBY3Rpb246eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxjaGlsZHJlbjp4LmRlZmF1bHQubm9kZSxpbml0aWFsRGlzcGF0Y2g6eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpc0FuYWx5dGljc0VuYWJsZWQ6eC5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxzZXRUb2tlbkFjdGlvbjp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHJlc2V0VG9rZW5BY3Rpb246eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGx9LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJJbml0aWFsRGF0YUNvbnRhaW5lciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9jb250YWluZXJzL2luaXRpYWxEYXRhQ29udGFpbmVyL2luaXRpYWxEYXRhQ29udGFpbmVyLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEJvdHRvbUNvbnN0cmFpbnRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWVsZEJvdHRvbUNvbnN0cmFpbnRzPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGM9cih1KSxkPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMvZmllbGRCb3R0b21Db25zdHJhaW50cy5zY3NzIiksXz1yKGQpLHA9Yy5kZWZhdWx0LmJpbmQoXy5kZWZhdWx0KSxmPWZ1bmN0aW9uKHQpe3ZhciBuPXQudGV4dCxyPXQuY2hpbGRyZW4sbz0oMCxzLmRlZmF1bHQpKHQsWyJ0ZXh0IiwiY2hpbGRyZW4iXSk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoImZpZWxkLWJvdHRvbS1jb25zdHJhaW50cyIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJjb250YWluZXIiKX0sciYmKDAsaS5jbG9uZUVsZW1lbnQpKHIsbykpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInRleHQiKX0sbikpfTt0LkZpZWxkQm90dG9tQ29uc3RyYWludHM9ZixmLnByb3BUeXBlcz17dGV4dDpsLmRlZmF1bHQubm9kZSxjaGlsZHJlbjpsLmRlZmF1bHQubm9kZX0sZi5kZWZhdWx0UHJvcHM9e3RleHQ6IiIsY2hpbGRyZW46bnVsbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkZpZWxkQm90dG9tQ29uc3RyYWludHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMvZmllbGRCb3R0b21Db25zdHJhaW50cy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRCb3R0b21Db25zdHJhaW50cy9maWVsZEJvdHRvbUNvbnN0cmFpbnRzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMvZmllbGRCb3R0b21Db25zdHJhaW50cy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImZpZWxkLWJvdHRvbS1jb25zdHJhaW50cyI6ImZpZWxkQm90dG9tQ29uc3RyYWludHNfX2ZpZWxkLWJvdHRvbS1jb25zdHJhaW50c19fX2VKYW90Iixjb250YWluZXI6ImZpZWxkQm90dG9tQ29uc3RyYWludHNfX2NvbnRhaW5lcl9fX3dILUJLIix0ZXh0OiJmaWVsZEJvdHRvbUNvbnN0cmFpbnRzX190ZXh0X19fMWVTbW0ifX0sIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkQm90dG9tQ29uc3RyYWludHMvZmllbGRCb3R0b21Db25zdHJhaW50cy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRmllbGRCb3R0b21Db25zdHJhaW50cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRmllbGRCb3R0b21Db25zdHJhaW50c319KX0sIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2ZpZWxkRXJyb3JIaW50LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWVsZEVycm9ySGludD12b2lkIDA7dmFyIHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PW8obCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxkPW8oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxwPW8oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxtPW8oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxnPW8oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEU9byhiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHY9byh5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksTT1vKHcpLGs9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxJPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2ZpZWxkRXJyb3JIaW50LnNjc3MiKSxQPW8oSSksTj17RmllbGRFcnJvckhpbnQ6e2Rpc3BsYXlOYW1lOiJGaWVsZEVycm9ySGludCJ9fSxIPSgwLHguZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2ZpZWxkRXJyb3JIaW50LmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbZV0saW1wb3J0czpbUi5kZWZhdWx0XX0pLEY9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvZmllbGRFcnJvckhpbnQuanN4Iixjb21wb25lbnRzOk4sbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksQj1NLmRlZmF1bHQuYmluZChQLmRlZmF1bHQpLFU9KDAsay5kZWZpbmVNZXNzYWdlcykoe2xvZ2luSGludDp7aWQ6IlJlZ2lzdHJhdGlvbkZvcm0ubG9naW5IaW50IixkZWZhdWx0TWVzc2FnZToiTG9naW4gc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDEgdG8gMTI4IHN5bWJvbHMsIGxhdGluLCBudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbiwgdW5kZXJzY29yZSwgZG90LiJ9LG5hbWVIaW50OntpZDoiUmVnaXN0cmF0aW9uRm9ybS5uYW1lSGludCIsZGVmYXVsdE1lc3NhZ2U6IkZ1bGwgbmFtZSBzaG91bGQgaGF2ZSBzaXplIGZyb20gMyB0byAyNTYgc3ltYm9scywgbGF0aW4sIGN5cmlsbGljLCBudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbiwgdW5kZXJzY29yZSwgZG90LCBzcGFjZS4ifSxwYXNzd29yZEhpbnQ6e2lkOiJSZWdpc3RyYXRpb25Gb3JtLnBhc3N3b3JkSGludCIsZGVmYXVsdE1lc3NhZ2U6IlBhc3N3b3JkIHNob3VsZCBoYXZlIHNpemUgZnJvbSA0IHRvIDEyOCBzeW1ib2xzLiJ9LGVtYWlsSGludDp7aWQ6IkNvbW1vbi52YWxpZGF0aW9uLmVtYWlsIixkZWZhdWx0TWVzc2FnZToiRW1haWwgaXMgaW5jb3JyZWN0LiBQbGVhc2UgZW50ZXIgY29ycmVjdCBlbWFpbC4ifSxjb25maXJtUGFzc3dvcmRIaW50OntpZDoiUmVnaXN0cmF0aW9uRm9ybS5jb25maXJtUGFzc3dvcmRIaW50IixkZWZhdWx0TWVzc2FnZToiUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4ifSxmaWx0ZXJOYW1lRXJyb3I6e2lkOiJGaWx0ZXJzUGFnZS5maWx0ZXJOYW1lTGVuZ3RoIixkZWZhdWx0TWVzc2FnZToiRmlsdGVyIG5hbWUgbGVuZ3RoIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDEyOCBjaGFyYWN0ZXJzLiJ9LHNoYXJlZFdpZGdldFNlYXJjaEhpbnQ6e2lkOiJTaGFyZWRXaWRnZXRzU2VhcmNoLnNoYXJlZFdpZGdldFNlYXJjaEhpbnQiLGRlZmF1bHRNZXNzYWdlOiJWYWx1ZSBzaG91bGQgaGF2ZSBzaXplIGZyb20gMyB0byAyNTYuIn0sbGF1bmNoTmFtZUhpbnQ6e2lkOiJMYXVuY2hNZXJnZU1vZGFsLmxhdW5jaE5hbWVIaW50IixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIG5hbWUgc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDMgdG8gMjU2LiJ9LGxhdW5jaERlc2NyaXB0aW9uSGludDp7aWQ6IkxhdW5jaE1lcmdlTW9kYWwubGF1bmNoRGVzY3JpcHRpb25IaW50IixkZWZhdWx0TWVzc2FnZToiRGVzY3JpcHRpb24gc2hvdWxkIGhhdmUgc2l6ZSBub3QgbW9yZSB0aGFuIDEwMjQgc3ltYm9scy4ifSxkYXNoYm9hcmROYW1lSGludDp7aWQ6IkFkZEVkaXREYXNoYm9hcmQuZGFzaGJvYXJkTmFtZUhpbnQiLGRlZmF1bHRNZXNzYWdlOiJEYXNoYm9hcmQgbmFtZSBzaG91bGQgaGF2ZSBzaXplICBmcm9tIDMgdG8gMTI4LiJ9LGRhc2hib2FyZE5hbWVTZWFyY2hIaW50OntpZDoiU2VhcmNoRGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lU2VhcmNoSGludCIsZGVmYXVsdE1lc3NhZ2U6IkRhc2hib2FyZCBuYW1lIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDEyOCJ9LG1pblNob3VsZE1hdGNoSGludDp7aWQ6IkFjY3VyYWN5Rm9ybUJsb2NrLm1pblNob3VsZE1hdGNoSGludCIsZGVmYXVsdE1lc3NhZ2U6IlRoZSBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgdmFsdWUgZnJvbSA1MCB0byAxMDAifSxtaW5Eb2NGcmVxSGludDp7aWQ6IkFjY3VyYWN5Rm9ybUJsb2NrLm1pbkRvY0ZyZXFIaW50IixkZWZhdWx0TWVzc2FnZToiVGhlIHBhcmFtZXRlciBzaG91bGQgaGF2ZSB2YWx1ZSBmcm9tIDEgdG8gMTAifSxtaW5UZXJtRnJlcUhpbnQ6e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5taW5UZXJtRnJlcUhpbnQiLGRlZmF1bHRNZXNzYWdlOiJUaGUgcGFyYW1ldGVyIHNob3VsZCBoYXZlIHZhbHVlIGZyb20gMSB0byAxMCJ9LHByb2ZpbGVQYXNzd29yZDp7aWQ6IkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZVBhc3N3b3JkIixkZWZhdWx0TWVzc2FnZToiUGFzc3dvcmQgc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDQgdG8gMTI4IHN5bWJvbHMifSxwcm9maWxlQ29uZmlybVBhc3N3b3JkOntpZDoiQ2hhbmdlUGFzc3dvcmRNb2RhbC5wcm9maWxlQ29uZmlybVBhc3N3b3JkIixkZWZhdWx0TWVzc2FnZToiUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCJ9LHByb2ZpbGVVc2VyTmFtZTp7aWQ6IkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZVVzZXJOYW1lIixkZWZhdWx0TWVzc2FnZToiRnVsbCBuYW1lIHNob3VsZCBoYXZlIHNpemUgZnJvbSAzIHRvIDI1NiBzeW1ib2xzLCBsYXRpbiwgY3lyaWxsaWMsIG51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVuLCB1bmRlcnNjb3JlLCBkb3QsIHNwYWNlLiJ9LHByb2ZpbGVFbWFpbDp7aWQ6IkNoYW5nZVBhc3N3b3JkTW9kYWwucHJvZmlsZUVtYWlsIixkZWZhdWx0TWVzc2FnZToiRW1haWwgaXMgaW5jb3JyZWN0LiJ9LGl0ZW1OYW1lRW50aXR5SGludDp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuaXRlbU5hbWVFbnRpdHlIaW50IixkZWZhdWx0TWVzc2FnZToiQXQgbGVhc3QgMyBzeW1ib2xzIHJlcXVpcmVkIn0sbGF1bmNoTnVtZXJpY0VudGl0eUhpbnQ6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLmxhdW5jaE51bWJlckVudGl0eUhpbnQiLGRlZmF1bHRNZXNzYWdlOiJUaGlzIGZpbHRlciBhY2NlcHRzIG9ubHkgZGlnaXRzIn0sbGF1bmNoRGVzY3JpcHRpb25FbnRpdHlIaW50OntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5sYXVuY2hEZXNjcmlwdGlvbkVudGl0eUhpbnQiLGRlZmF1bHRNZXNzYWdlOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQifSxkZW1vRGF0YVBvc3RmaXhIaW50OntpZDoiRGVtb0RhdGFUYWJGb3JtLmRlbW9EYXRhUG9zdGZpeEhpbnQiLGRlZmF1bHRNZXNzYWdlOiJQb3N0Zml4IHNob3VsZCBoYXZlIHNpemUgZnJvbSAxIHRvIDkwIn0scmVjaXBpZW50c0hpbnQ6e2lkOiJlbWFpbENhc2UucmVjaXBpZW50c0hpbnQiLGRlZmF1bHRNZXNzYWdlOiJTZWxlY3QgYXQgbGVhc3Qgb25lIHJlY2lwaWVudCBvciBzZXQgdXAg4oCcT0ZG4oCdIGUtbWFpbCBub3RpZmljYXRpb25zIn0sdGFnc0hpbnQ6e2lkOiJlbWFpbENhc2UudGFnc0hpbnQiLGRlZmF1bHRNZXNzYWdlOiJUYWcgbmFtZSBzaG91bGQgaGF2ZSBzaXplIGZyb20gMyB0byAyNTYifSxsYXVuY2hlc0hpbnQ6e2lkOiJlbWFpbENhc2UubGF1bmNoZXNIaW50IixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIG5hbWUgc2hvdWxkIGhhdmUgc2l6ZSBmcm9tIDMgdG8gMjU2In0sdXJsSGludDp7aWQ6IkxpbmtJc3N1ZU1vZGFsLnVybEhpbnQiLGRlZmF1bHRNZXNzYWdlOiJMaW5rIHNob3VsZCBtYXRjaCBhIHZhbGlkIHdlYnNpdGUgYWRkcmVzcyJ9LGlzc3VlSWRIaW50OntpZDoiTGlua0lzc3VlTW9kYWwuaXNzdWVJZEhpbnQiLGRlZmF1bHRNZXNzYWdlOiJJc3N1ZSBJRCBzaG91bGQgaGF2ZSBzaXplIGZyb20gMSB0byAxMjgifSxyZXF1aXJlZEZpZWxkSGludDp7aWQ6IkNvbW1vbi5yZXF1aXJlZEZpZWxkSGludCIsZGVmYXVsdE1lc3NhZ2U6IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQifSxwb3J0RmllbGRIaW50OntpZDoiRW1haWxTZXJ2ZXJUYWIucG9ydEZpZWxkSGludCIsZGVmYXVsdE1lc3NhZ2U6Ik9ubHkgbnVtYmVycyBmcm9tICcxJyB0byAnNjU1MzUnIGFyZSBwb3NzaWJsZS4ifX0pLEc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIKEYodCxlKSxlKX19KCJGaWVsZEVycm9ySGludCIpKCgwLGsuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5pc0hpbnRWaXNpYmxlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0hpbnRWaXNpYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9faXNIaW50VmlzaWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNIaW50VmlzaWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNIaW50VmlzaWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNIaW50VmlzaWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNIaW50VmlzaWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmVycm9yLG49ZS5hY3RpdmU7cmV0dXJuIGUuc3RhdGljSGludD8hIXQ6ISF0JiZufX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmhpbnRUeXBlLG49ZS5jaGlsZHJlbixvPWUuaW50bCxzPWUuZXJyb3IsaT1lLmFjdGl2ZSxhPWUuc3RhdGljSGludCxsPSgwLGQuZGVmYXVsdCkoZSxbImhpbnRUeXBlIiwiY2hpbGRyZW4iLCJpbnRsIiwiZXJyb3IiLCJhY3RpdmUiLCJzdGF0aWNIaW50Il0pLGM9QigiZmllbGQtZXJyb3ItaGludCIsInR5cGUtIit0KTtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Y30sbiYmKDAsUy5jbG9uZUVsZW1lbnQpKG4sKDAsdS5kZWZhdWx0KSh7ZXJyb3I6cyxhY3RpdmU6aX0sbCkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoImhpbnQiLHsic3RhdGljLWhpbnQiOmEsdmlzaWJsZTp0aGlzLmlzSGludFZpc2libGUoKX0pfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpCKCJoaW50LWNvbnRlbnQiLCJ0eXBlLSIrdCx7InN0YXRpYy1oaW50IjphfSl9LHMmJlVbc10/by5mb3JtYXRNZXNzYWdlKFVbc10pOnMpKSl9fV0pLHR9KFMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aGludFR5cGU6RC5kZWZhdWx0LnN0cmluZyxjaGlsZHJlbjpELmRlZmF1bHQubm9kZSxpbnRsOmsuaW50bFNoYXBlLGVycm9yOkQuZGVmYXVsdC5zdHJpbmcsYWN0aXZlOkQuZGVmYXVsdC5ib29sLHN0YXRpY0hpbnQ6RC5kZWZhdWx0LmJvb2x9LGkuZGVmYXVsdFByb3BzPXtpbnRsOnt9LGhpbnRUeXBlOiJib3R0b20iLGNoaWxkcmVuOm51bGwsZXJyb3I6IiIsYWN0aXZlOiExLHN0YXRpY0hpbnQ6ITF9LHM9YSkpfHxzKTt0LkZpZWxkRXJyb3JIaW50PUc7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIkZpZWxkRXJyb3JIaW50IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9maWVsZEVycm9ySGludC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvZmllbGRFcnJvckhpbnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2ZpZWxkRXJyb3JIaW50LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9maWVsZEVycm9ySGludC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImZpZWxkLWVycm9yLWhpbnQiOiJmaWVsZEVycm9ySGludF9fZmllbGQtZXJyb3ItaGludF9fXzFMSGZrIixoaW50OiJmaWVsZEVycm9ySGludF9faGludF9fXzE3b2tsIix2aXNpYmxlOiJmaWVsZEVycm9ySGludF9fdmlzaWJsZV9fXzJjRWRGIiwidHlwZS1ib3R0b20iOiJmaWVsZEVycm9ySGludF9fdHlwZS1ib3R0b21fX18yRExhbCIsInR5cGUtdG9wIjoiZmllbGRFcnJvckhpbnRfX3R5cGUtdG9wX19fMjlVLWIiLCJoaW50LWNvbnRlbnQiOiJmaWVsZEVycm9ySGludF9faGludC1jb250ZW50X19fMUhUUEUiLCJzdGF0aWMtaGludCI6ImZpZWxkRXJyb3JIaW50X19zdGF0aWMtaGludF9fXzFFYUtzIn19LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvZmllbGRFcnJvckhpbnQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpZWxkRXJyb3JIaW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GaWVsZEVycm9ySGludH19KX0sIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRmlsdGVyRW50aXR5L2ZpZWxkRmlsdGVyRW50aXR5LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmllbGRGaWx0ZXJFbnRpdHk9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbW1vbi9pbWcvY3Jvc3MtaWNvbi1pbmxpbmUuc3ZnIiksZD1yKGMpLF89bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvZmllbGRGaWx0ZXJFbnRpdHkuc2NzcyIpLHA9cihfKSxmPWEuZGVmYXVsdC5iaW5kKHAuZGVmYXVsdCksbT10LkZpZWxkRmlsdGVyRW50aXR5PWZ1bmN0aW9uKHQpe3ZhciBuPXQudGl0bGUscj10LmNoaWxkcmVuLG89dC5yZW1vdmFibGUscz10LnN0cmV0Y2hhYmxlLGk9dC5zbWFsbFNpemUsYT10Lm9uUmVtb3ZlLGw9dC52ZXJ0aWNhbDtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZigiZmllbGQtZmlsdGVyLWVudGl0eSIse3N0cmV0Y2hhYmxlOnMsc21hbGw6aSx2ZXJ0aWNhbDpsfSl9LGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpmKCJlbnRpdHktbmFtZSIse3ZlcnRpY2FsOmx9KX0sbiksbyYmZS5jcmVhdGVFbGVtZW50KCJpIix7Y2xhc3NOYW1lOmYoImNsb3NlLWljb24iKSxvbkNsaWNrOmF9LCgwLHUuZGVmYXVsdCkoZC5kZWZhdWx0KSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZigiZW50aXR5LWlucHV0LWhvbGRlciIse3ZlcnRpY2FsOmx9KX0scikpfTttLnByb3BUeXBlcz17Y2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsdGl0bGU6cy5kZWZhdWx0LnN0cmluZyxzbWFsbFNpemU6cy5kZWZhdWx0LmJvb2wscmVtb3ZhYmxlOnMuZGVmYXVsdC5ib29sLHN0cmV0Y2hhYmxlOnMuZGVmYXVsdC5ib29sLHZlcnRpY2FsOnMuZGVmYXVsdC5ib29sLG9uUmVtb3ZlOnMuZGVmYXVsdC5mdW5jfSxtLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46bnVsbCx0aXRsZToiIixzbWFsbFNpemU6ITEscmVtb3ZhYmxlOiEwLHN0cmV0Y2hhYmxlOiExLHZlcnRpY2FsOiExLG9uUmVtb3ZlOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIkZpZWxkRmlsdGVyRW50aXR5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEZpbHRlckVudGl0eS9maWVsZEZpbHRlckVudGl0eS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvZmllbGRGaWx0ZXJFbnRpdHkuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvZmllbGRGaWx0ZXJFbnRpdHkuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJmaWVsZC1maWx0ZXItZW50aXR5IjoiZmllbGRGaWx0ZXJFbnRpdHlfX2ZpZWxkLWZpbHRlci1lbnRpdHlfX18xZGxZZyIsdmVydGljYWw6ImZpZWxkRmlsdGVyRW50aXR5X192ZXJ0aWNhbF9fX0RzalJCIixzdHJldGNoYWJsZToiZmllbGRGaWx0ZXJFbnRpdHlfX3N0cmV0Y2hhYmxlX19fMkJZSDciLHNtYWxsOiJmaWVsZEZpbHRlckVudGl0eV9fc21hbGxfX18ydDJfQyIsImVudGl0eS1uYW1lIjoiZmllbGRGaWx0ZXJFbnRpdHlfX2VudGl0eS1uYW1lX19fM25VNGoiLCJjbG9zZS1pY29uIjoiZmllbGRGaWx0ZXJFbnRpdHlfX2Nsb3NlLWljb25fX19kbzFGbSIsImVudGl0eS1pbnB1dC1ob2xkZXIiOiJmaWVsZEZpbHRlckVudGl0eV9fZW50aXR5LWlucHV0LWhvbGRlcl9fXzNnWlZrIn19LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEZpbHRlckVudGl0eS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvZmllbGRGaWx0ZXJFbnRpdHkuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpZWxkRmlsdGVyRW50aXR5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GaWVsZEZpbHRlckVudGl0eX19KX0sIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkUHJvdmlkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpZWxkUHJvdmlkZXI9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pbmRleC5qcyIpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuaW5wdXQscj1uLm9uQ2hhbmdlLG89bi5vbkJsdXIsaT1uLm9uRm9jdXMsdT1uLnZhbHVlLGM9bi5uYW1lLGQ9ZS5tZXRhLF89ZC5lcnJvcixwPWQuYWN0aXZlLGY9ZC50b3VjaGVkLG09KDAsYS5kZWZhdWx0KShlLFsiY2hpbGRyZW4iLCJpbnB1dCIsIm1ldGEiXSk7cmV0dXJuKDAsbC5jbG9uZUVsZW1lbnQpKHQsKDAscy5kZWZhdWx0KSh7b25DaGFuZ2U6cixvbkJsdXI6byxvbkZvY3VzOmksdmFsdWU6dSxuYW1lOmMsZXJyb3I6XyxhY3RpdmU6cCx0b3VjaGVkOmZ9LG0pKX0sZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49KDAsYS5kZWZhdWx0KShlLFsiY2hpbGRyZW4iXSk7cmV0dXJuIHUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8uRmllbGQsKDAscy5kZWZhdWx0KSh7fSxuLHtjb21wb25lbnQ6cH0pLHQpfTt0LkZpZWxkUHJvdmlkZXI9ZixmLnByb3BUeXBlcz17Y2hpbGRyZW46ZC5kZWZhdWx0Lm5vZGV9LGYuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiRmllbGRQcm92aWRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRQcm92aWRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJJbm5lckNvbXBvbmVudCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRQcm92aWRlci5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvZm9ybUZpZWxkLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Gb3JtRmllbGQ9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEE9cihUKSxDPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkUHJvdmlkZXIuanN4IiksTz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvZm9ybUZpZWxkLnNjc3MiKSxTPXIoTyksUj1BLmRlZmF1bHQuYmluZChTLmRlZmF1bHQpLGo9dC5Gb3JtRmllbGQ9KHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNvbnRhaW5lckNsYXNzTmFtZSxuPWUubGFiZWxDbGFzc05hbWUscj1lLmZpZWxkV3JhcHBlckNsYXNzTmFtZSxvPWUuY3VzdG9tQmxvY2sscz1lLmxhYmVsLGk9ZS5jaGlsZHJlbixsPWUucmVxdWlyZWQsdT1lLndpdGhvdXRQcm92aWRlcixjPSgwLGEuZGVmYXVsdCkoZSxbImNvbnRhaW5lckNsYXNzTmFtZSIsImxhYmVsQ2xhc3NOYW1lIiwiZmllbGRXcmFwcGVyQ2xhc3NOYW1lIiwiY3VzdG9tQmxvY2siLCJsYWJlbCIsImNoaWxkcmVuIiwicmVxdWlyZWQiLCJ3aXRob3V0UHJvdmlkZXIiXSk7cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6UigiZm9ybS1maWVsZCIsdCl9LEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlIoImZvcm0tZ3JvdXAtbGFiZWwiLG4se3JlcXVpcmVkOmx9KX0scyksRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpSKCJmaWVsZC13cmFwcGVyIixyKX0sdT9pOkUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuRmllbGRQcm92aWRlcixjLGkpKSxvJiZFLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlIoImN1c3RvbS1ibG9jayIsby53cmFwcGVyQ2xhc3NOYW1lKX0sby5ub2RlKSl9fV0pLHR9KGIuUHVyZUNvbXBvbmVudCksby5wcm9wVHlwZXM9e2NvbnRhaW5lckNsYXNzTmFtZTp2LmRlZmF1bHQuc3RyaW5nLGxhYmVsQ2xhc3NOYW1lOnYuZGVmYXVsdC5zdHJpbmcsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnYuZGVmYXVsdC5zdHJpbmcsY3VzdG9tQmxvY2s6di5kZWZhdWx0LnNoYXBlKHt3cmFwcGVyQ2xhc3NOYW1lOnYuZGVmYXVsdC5zdHJpbmcsbm9kZTp2LmRlZmF1bHQuZWxlbWVudH0pLGxhYmVsOnYuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2U6di5kZWZhdWx0LmZ1bmMsbm9ybWFsaXplOnYuZGVmYXVsdC5mdW5jLGZvcm1hdDp2LmRlZmF1bHQuZnVuYyxwYXJzZTp2LmRlZmF1bHQuZnVuYyxkaXNhYmxlZDp2LmRlZmF1bHQuYm9vbCxjaGlsZHJlbjp2LmRlZmF1bHQuYW55LHJlcXVpcmVkOnYuZGVmYXVsdC5ib29sLHdpdGhvdXRQcm92aWRlcjp2LmRlZmF1bHQuYm9vbH0sby5kZWZhdWx0UHJvcHM9e2NvbnRhaW5lckNsYXNzTmFtZToiIixsYWJlbENsYXNzTmFtZToiIixmaWVsZFdyYXBwZXJDbGFzc05hbWU6IiIsY3VzdG9tQmxvY2s6bnVsbCxsYWJlbDoiIixvbkNoYW5nZTpmdW5jdGlvbigpe30sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXNhYmxlZDohMSxjaGlsZHJlbjpudWxsLHJlcXVpcmVkOiExLHdpdGhvdXRQcm92aWRlcjohMX0scyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosIkZvcm1GaWVsZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZm9ybUZpZWxkL2Zvcm1GaWVsZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihSLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWVsZHMvZm9ybUZpZWxkL2Zvcm1GaWVsZC5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvZm9ybUZpZWxkLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZm9ybS1maWVsZCI6ImZvcm1GaWVsZF9fZm9ybS1maWVsZF9fXzJLOXcyIiwiZmllbGQtd3JhcHBlciI6ImZvcm1GaWVsZF9fZmllbGQtd3JhcHBlcl9fXzJ3dXEzIiwiY3VzdG9tLWJsb2NrIjoiZm9ybUZpZWxkX19jdXN0b20tYmxvY2tfX18xRDFXbyIsImZvcm0tZ3JvdXAtbGFiZWwiOiJmb3JtRmllbGRfX2Zvcm0tZ3JvdXAtbGFiZWxfX19qUEZkSyIscmVxdWlyZWQ6ImZvcm1GaWVsZF9fcmVxdWlyZWRfX18yT0l1eCJ9fSwiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZm9ybUZpZWxkL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvZm9ybUZpZWxkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJGb3JtRmllbGQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkZvcm1GaWVsZH19KX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkNPTkRJVElPTl9DTlQ9ImNudCIsbz10LkNPTkRJVElPTl9OT1RfQ05UPSIhY250IixzPXQuQ09ORElUSU9OX0VRPSJlcSIsaT10LkNPTkRJVElPTl9OT1RfRVE9Im5lIixhPXQuQ09ORElUSU9OX0dSRUFURVJfRVE9Imd0ZSIsbD10LkNPTkRJVElPTl9MRVNTX0VRPSJsdGUiLHU9dC5DT05ESVRJT05fQkVUV0VFTj0iYnR3IixjPXQuQ09ORElUSU9OX0hBUz0iaGFzIixkPXQuQ09ORElUSU9OX05PVF9IQVM9IiFoYXMiLF89dC5DT05ESVRJT05fSU49ImluIixwPXQuQ09ORElUSU9OX05PVF9JTj0iIWluIixmPXQuQ09ORElUSU9OX0VYPSJleCIsbT10LkNPTkRJVElPTl9BTlk9ImFueSIsaD10LkNPTkRJVElPTl9OT1RfQU5ZPSIhYW55IixnPXQuRU5USVRZX05BTUU9Im5hbWUiLGI9dC5BQ1RJVklUSUVTPSJhY3Rpdml0aWVzIixFPXQuRU5USVRZX05VTUJFUj0ibnVtYmVyIix5PXQuRU5USVRZX1VTRVI9InVzZXIiLHY9dC5FTlRJVFlfQUNUSU9OPSJhY3Rpb24iLFQ9dC5FTlRJVFlfT0JKRUNUX1RZUEU9ImVudGl0eSIsQT10LkVOVElUWV9PQkpFQ1RfTkFNRT0ib2JqZWN0TmFtZSIsQz10LkVOVElUWV9TVEFSVF9USU1FPSJzdGFydFRpbWUiLE89dC5FTlRJVFlfREVTQ1JJUFRJT049ImRlc2NyaXB0aW9uIixTPXQuRU5USVRZX1RBR1M9InRhZ3MiLFI9dC5FTlRJVFlfQVRUUklCVVRFX0tFWVM9ImF0dHJpYnV0ZUtleSIsaj10LkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTPSJhdHRyaWJ1dGVWYWx1ZSIseD10LkVOVElUWV9TVEFUVVM9InN0YXR1cyIsTD10LkVOVElUWV9NRVRIT0RfVFlQRT0idHlwZSIsRD10LkVOVElUWV9ERUZFQ1RfVFlQRT0iaXNzdWVUeXBlIix3PXQuRU5USVRZX0RFRkVDVF9DT01NRU5UPSJpc3N1ZSRpc3N1ZV9jb21tZW50IixNPXQuRU5USVRZX0JUU19JU1NVRVM9Imlzc3VlJGV4dGVybmFsU3lzdGVtSXNzdWVzJHRpY2tldF9pZCIsaz10LkVOVElUWV9JR05PUkVfQU5BTFlaRVI9Imlzc3VlJGlnbm9yZV9hbmFseXplciIsST10LkVOVElUWV9BVVRPQU5BTFlaRT0iaXNzdWUkYXV0b19hbmFseXplZCIsUD10LkVOVElUWV9DUkVBVElPTl9EQVRFPSJjcmVhdGlvbkRhdGUiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJDT05ESVRJT05fQ05UIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkNPTkRJVElPTl9OT1RfQ05UIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkNPTkRJVElPTl9FUSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJDT05ESVRJT05fTk9UX0VRIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkNPTkRJVElPTl9HUkVBVEVSX0VRIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkNPTkRJVElPTl9MRVNTX0VRIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkNPTkRJVElPTl9CRVRXRUVOIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkNPTkRJVElPTl9IQVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiQ09ORElUSU9OX05PVF9IQVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiQ09ORElUSU9OX0lOIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkNPTkRJVElPTl9OT1RfSU4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiQ09ORElUSU9OX0VYIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIkNPTkRJVElPTl9BTlkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiQ09ORElUSU9OX05PVF9BTlkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiRU5USVRZX05BTUUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYiwiQUNUSVZJVElFUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJFTlRJVFlfTlVNQkVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksIkVOVElUWV9VU0VSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsIkVOVElUWV9BQ1RJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiRU5USVRZX09CSkVDVF9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEEsIkVOVElUWV9PQkpFQ1RfTkFNRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJFTlRJVFlfU1RBUlRfVElNRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihPLCJFTlRJVFlfREVTQ1JJUFRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUywiRU5USVRZX1RBR1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiRU5USVRZX0FUVFJJQlVURV9LRVlTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosIkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHgsIkVOVElUWV9TVEFUVVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTCwiRU5USVRZX01FVEhPRF9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEQsIkVOVElUWV9ERUZFQ1RfVFlQRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJFTlRJVFlfREVGRUNUX0NPTU1FTlQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiRU5USVRZX0JUU19JU1NVRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiRU5USVRZX0lHTk9SRV9BTkFMWVpFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihJLCJFTlRJVFlfQVVUT0FOQUxZWkUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiRU5USVRZX0NSRUFUSU9OX0RBVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL2ZpbHRlckVudGl0aWVzQWRkSGFuZGxlckNvbnRhaW5lci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlckVudGl0aWVzQWRkSGFuZGxlckNvbnRhaW5lcj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPXtGaWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXI6e2Rpc3BsYXlOYW1lOiJGaWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXIifX0sRD0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNBZGRIYW5kbGVyQ29udGFpbmVyLmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbZV0saW1wb3J0czpbTy5kZWZhdWx0XX0pLHc9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL2ZpbHRlckVudGl0aWVzQWRkSGFuZGxlckNvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6TCxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxNPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRCh3KHQsZSksZSl9fSgiRmlsdGVyRW50aXRpZXNBZGRIYW5kbGVyQ29udGFpbmVyIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5oYW5kbGVBZGQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX2hhbmRsZUFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQWRkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVBZGRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuZmlsdGVyRW50aXRpZXMscj10Lm9uRmlsdGVyQWRkO3IoInN0cmluZyI9PXR5cGVvZiBlP24uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KTplKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5yZW5kZXIsbj0oMCx1LmRlZmF1bHQpKGUsWyJyZW5kZXIiXSk7cmV0dXJuIHQoKDAsYS5kZWZhdWx0KSh7fSxuLHtvbkZpbHRlckFkZDp0aGlzLmhhbmRsZUFkZH0pKX19XSksdH0oQy5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtmaWx0ZXJFbnRpdGllczp4LmRlZmF1bHQuYXJyYXkuaXNSZXF1aXJlZCxyZW5kZXI6eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkZpbHRlckFkZDp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG9uRmlsdGVyUmVtb3ZlOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25GaWx0ZXJWYWxpZGF0ZTp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG9uRmlsdGVyQ2hhbmdlOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZmlsdGVyRXJyb3JzOnguZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxmaWx0ZXJWYWx1ZXM6eC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxzKSk7dC5GaWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXI9TTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihNLCJGaWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXIuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc0NvbnRhaW5lci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsdGVyRW50aXRpZXNDb250YWluZXI9dm9pZCAwO3ZhciBzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksdT1vKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksZD1vKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIikscD1vKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbT1vKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZz1vKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxFPW8oYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx2PW8oeSksVD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksTz1vKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxSPW8oUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHg9byhqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLE09byh3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIpLEk9byhrKSxQPW4oIi4vc3JjL2NvbW1vbi91dGlscy9vbWl0LmpzIiksTj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaExldmVscy5qcyIpLEg9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9wcm9wVHlwZXMuanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc0FkZEhhbmRsZXJDb250YWluZXIuanN4IiksVT17RmlsdGVyRW50aXRpZXNDb250YWluZXI6e2Rpc3BsYXlOYW1lOiJGaWx0ZXJFbnRpdGllc0NvbnRhaW5lciJ9fSxHPSgwLEQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc0NvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W2VdLGltcG9ydHM6W3guZGVmYXVsdF19KSx6PSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc0NvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W10saW1wb3J0czpbeC5kZWZhdWx0LE8uZGVmYXVsdF19KSxWPShzPXt9LCgwLEEuZGVmYXVsdCkocyxOLkxFVkVMX0xBVU5DSCxILkxhdW5jaExldmVsRW50aXRpZXMpLCgwLEEuZGVmYXVsdCkocyxOLkxFVkVMX1NVSVRFLEguU3VpdGVMZXZlbEVudGl0aWVzKSwoMCxBLmRlZmF1bHQpKHMsTi5MRVZFTF9URVNULEguU3VpdGVMZXZlbEVudGl0aWVzKSwoMCxBLmRlZmF1bHQpKHMsTi5MRVZFTF9TVEVQLEguU3RlcExldmVsRW50aXRpZXMpLHMpLFc9dC5GaWx0ZXJFbnRpdGllc0NvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoeih0LGUpLGUpfX0oIkZpbHRlckVudGl0aWVzQ29udGFpbmVyIikoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17ZXJyb3JzOnt9LHZhbHVlczpyLnByb3BzLmVudGl0aWVzLHByZXZFbnRpdGllczpyLnByb3BzLmVudGl0aWVzfSxyLmNvbGxlY3RFbnRpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY29sbGVjdEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzVmFsaWRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2lzVmFsaWRDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlVmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZVZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUFkZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQWRkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZVJlbW92ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlUmVtb3ZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlUmVtb3ZlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQWRkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVWYWxpZGF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlVmFsaWRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc1ZhbGlkQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc1ZhbGlkQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb2xsZWN0RW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbGxlY3RFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29sbGVjdEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuKDAsZC5kZWZhdWx0KShlKS5yZWR1Y2UoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybiB0LmlzVmFsaWRDaGFuZ2Uocik/KDAsdS5kZWZhdWx0KSh7fSxuLCgwLEEuZGVmYXVsdCkoe30scixvKSk6bn0se30pfX0se2tleToiX19pc1ZhbGlkQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEodGhpcy5zdGF0ZS52YWx1ZXNbZV0mJnRoaXMuc3RhdGUudmFsdWVzW2VdLnZhbHVlJiZ0aGlzLnN0YXRlLmVycm9yc1tlXSl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5zZXRTdGF0ZSh7dmFsdWVzOigwLHUuZGVmYXVsdCkoe30sdGhpcy5zdGF0ZS52YWx1ZXMsKDAsQS5kZWZhdWx0KSh7fSxlLCgwLHUuZGVmYXVsdCkoe30sdGhpcy5zdGF0ZS52YWx1ZXNbZV0sdCkpKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5pc1ZhbGlkQ2hhbmdlKGUpJiZuLnByb3BzLm9uQ2hhbmdlKG4uY29sbGVjdEVudGl0aWVzKG4uc3RhdGUudmFsdWVzKSl9KX19LHtrZXk6Il9faGFuZGxlVmFsaWRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0P3RoaXMuc2V0U3RhdGUoe2Vycm9yczooMCx1LmRlZmF1bHQpKHt9LHRoaXMuc3RhdGUuZXJyb3JzLCgwLEEuZGVmYXVsdCkoe30sZSx0KSl9KTp0aGlzLnNldFN0YXRlKHtlcnJvcnM6KDAsUC5vbWl0KSh0aGlzLnN0YXRlLmVycm9ycyxbZV0pfSl9fSx7a2V5OiJfX2hhbmRsZUFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uKHQpe3JldHVybnt2YWx1ZXM6KDAsdS5kZWZhdWx0KSh7fSx0LnZhbHVlcywoMCxBLmRlZmF1bHQpKHt9LGUuaWQsZS52YWx1ZSkpfX0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWUudmFsdWUudmFsdWUmJnQucHJvcHMub25DaGFuZ2UodC5jb2xsZWN0RW50aXRpZXModC5zdGF0ZS52YWx1ZXMpKX0pfX0se2tleToiX19oYW5kbGVSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPSgwLFAub21pdCkodGhpcy5zdGF0ZS52YWx1ZXMsW2VdKTt0aGlzLnNldFN0YXRlKHt2YWx1ZXM6bn0sZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9wcy5vbkNoYW5nZSh0LmNvbGxlY3RFbnRpdGllcyh0LnN0YXRlLnZhbHVlcykpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuZXJyb3JzLG49ZS52YWx1ZXMsbz10aGlzLnByb3BzLHM9by5yZW5kZXIsaT1vLmxldmVsLGE9by5lbnRpdGllc1Byb3ZpZGVyLGw9YXx8VltpXTtyZXR1cm4gci5jcmVhdGVFbGVtZW50KGwse2ZpbHRlckVycm9yczp0LGZpbHRlclZhbHVlczpuLG9uRmlsdGVyQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLG9uRmlsdGVyVmFsaWRhdGU6dGhpcy5oYW5kbGVWYWxpZGF0ZSxvbkZpbHRlckFkZDp0aGlzLmhhbmRsZUFkZCxvbkZpbHRlclJlbW92ZTp0aGlzLmhhbmRsZVJlbW92ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChCLkZpbHRlckVudGl0aWVzQWRkSGFuZGxlckNvbnRhaW5lciwoMCx1LmRlZmF1bHQpKHt9LGUse3JlbmRlcjpzfSkpfX0pfX1dLFt7a2V5OiJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZW50aXRpZXM9PT10LnZhbHVlc3x8KDAsSS5kZWZhdWx0KShlLmVudGl0aWVzLHQucHJldkVudGl0aWVzKT9udWxsOntlcnJvcnM6e30sdmFsdWVzOmUuZW50aXRpZXMscHJldkVudGl0aWVzOmUuZW50aXRpZXN9fX1dKSx0fShqLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2VudGl0aWVzOk0uZGVmYXVsdC5vYmplY3RPZihGLmZpbHRlclZhbHVlU2hhcGUpLG9uQ2hhbmdlOk0uZGVmYXVsdC5mdW5jLHJlbmRlcjpNLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGxldmVsOk0uZGVmYXVsdC5zdHJpbmcsZW50aXRpZXNQcm92aWRlcjpNLmRlZmF1bHQuZWxlbWVudFR5cGV9LGkuZGVmYXVsdFByb3BzPXtlbnRpdGllczp7fSxvbkNoYW5nZTpmdW5jdGlvbigpe30sZW50aXRpZXNQcm92aWRlcjpudWxsLGxldmVsOiIifSxhKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIkZpbHRlckVudGl0aWVzQ29udGFpbmVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNDb250YWluZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoViwiRU5USVRZX1BST1ZJREVSUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL2ZpbHRlckVudGl0aWVzQ29udGFpbmVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWx0ZXJFbnRpdGllc1VSTENvbnRhaW5lcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy91dGlscy5qcyIpLGs9e0ZpbHRlckVudGl0aWVzVVJMQ29udGFpbmVyOntkaXNwbGF5TmFtZToiRmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIifX0sST0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIuanN4Iixjb21wb25lbnRzOmssbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksUD0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIuanN4Iixjb21wb25lbnRzOmssbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksTj10LkZpbHRlckVudGl0aWVzVVJMQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSShQKHQsZSksZSl9fSgiRmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIiKSgobz0oMCx3LmNvbm5lY3RSb3V0ZXIpKGZ1bmN0aW9uKGUpe3JldHVybntlbnRpdGllczooMCxNLmNvbGxlY3RGaWx0ZXJFbnRpdGllcykoZSl9fSx7dXBkYXRlRmlsdGVyczpmdW5jdGlvbihlKXtyZXR1cm4oMCxFLmRlZmF1bHQpKHt9LGUpfX0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZUNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmRlYm91bmNlZEhhbmRsZUNoYW5nZT0oMCx3LmRlYm91bmNlKShyLmhhbmRsZUNoYW5nZSwxZTMpLG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsRC5kZWZhdWx0KShlLHRoaXMucHJvcHMuZW50aXRpZXMpfHx0aGlzLnByb3BzLnVwZGF0ZUZpbHRlcnMoKDAsTS5jcmVhdGVGaWx0ZXJRdWVyeSkoZSx0aGlzLnByb3BzLmVudGl0aWVzKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcztyZXR1cm4oMCxlLnJlbmRlcikoe2VudGl0aWVzOmUuZW50aXRpZXMsb25DaGFuZ2U6ZS5kZWJvdW5jZWQ/dGhpcy5kZWJvdW5jZWRIYW5kbGVDaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2V9KX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtlbnRpdGllczp4LmRlZmF1bHQub2JqZWN0LHVwZGF0ZUZpbHRlcnM6eC5kZWZhdWx0LmZ1bmMscmVuZGVyOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZGVib3VuY2VkOnguZGVmYXVsdC5ib29sfSxpLmRlZmF1bHRQcm9wcz17ZW50aXRpZXM6e30sdXBkYXRlRmlsdGVyczpmdW5jdGlvbigpe30sZGVib3VuY2VkOiEwfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiRmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9maWx0ZXJFbnRpdGllc1VSTENvbnRhaW5lci5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpbHRlckVudGl0aWVzQ29udGFpbmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GaWx0ZXJFbnRpdGllc0NvbnRhaW5lcn19KTt2YXIgbz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvZmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpbHRlckVudGl0aWVzVVJMQ29udGFpbmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5GaWx0ZXJFbnRpdGllc1VSTENvbnRhaW5lcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVGaWx0ZXJRdWVyeT10LmNvbGxlY3RGaWx0ZXJFbnRpdGllcz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pc0VtcHR5VmFsdWUuanMiKSxwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uZGl0aW9uPyJmaWx0ZXIuIitlLmNvbmRpdGlvbisiLiIrdDoicHJlZGVmaW5lZEZpbHRlci4iK3R9LGY9dC5jb2xsZWN0RmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJuKDAsZC5kZWZhdWx0KShlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtpZigwPT09bi5pbmRleE9mKCJwcmVkZWZpbmVkRmlsdGVyLiIpKXt2YXIgcj1uLnNwbGl0KCIuIiksbz0oMCx1LmRlZmF1bHQpKHIsMiksaT1vWzFdO3JldHVybigwLGEuZGVmYXVsdCkoe30sdCwoMCxzLmRlZmF1bHQpKHt9LGkse3ZhbHVlOmVbbl18fG51bGx9KSl9aWYoMCE9PW4uaW5kZXhPZigiZmlsdGVyLiIpKXJldHVybiB0O3ZhciBsPW4uc3BsaXQoIi4iKSxjPSgwLHUuZGVmYXVsdCkobCwzKSxkPWNbMV0sXz1jWzJdO3JldHVybigwLGEuZGVmYXVsdCkoe30sdCwoMCxzLmRlZmF1bHQpKHt9LF8se2NvbmRpdGlvbjpkLHZhbHVlOmVbbl18fG51bGx9KSl9LHt9KX0sbT10LmNyZWF0ZUZpbHRlclF1ZXJ5PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49KDAsYS5kZWZhdWx0KSh7fSx0LGUpO3JldHVybigwLGQuZGVmYXVsdCkobikucmVkdWNlKGZ1bmN0aW9uKG4scil7dmFyIG89ZVtyXSxpPXRbcl07aWYoIW8mJmkpcmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxuLCgwLHMuZGVmYXVsdCkoe30scChpLHIpLG51bGwpKTt2YXIgbD0oMCxfLmlzRW1wdHlWYWx1ZSkoby52YWx1ZSk/bnVsbDpvLnZhbHVlO3JldHVybigwLGEuZGVmYXVsdCkoe30sbiwoMCxzLmRlZmF1bHQpKHt9LHAobyxyKSxsKSl9LHt9KX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImNvbGxlY3RGaWx0ZXJFbnRpdGllcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiY3JlYXRlRmlsdGVyUXVlcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJmaWx0ZXIuIiwiRklMVEVSX1BSRUZJWCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoInByZWRlZmluZWRGaWx0ZXIuIiwiUFJFREVGSU5FRF9GSUxURVJfUFJFRklYIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJnZXRGaWx0ZXJLZXkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy91dGlscy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNHcm91cC9lbnRpdGllc0dyb3VwLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdGllc0dyb3VwPXZvaWQgMDt2YXIgcyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1vKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxMPW8oeCksRD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx3PW8oRCksTT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaz1vKE0pLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc1NlbGVjdG9yL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL3Byb3BUeXBlcy5qcyIpLE49bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc0dyb3VwL2VudGl0aWVzR3JvdXAuc2NzcyIpLEg9byhOKSxGPXtFbnRpdGllc0dyb3VwOntkaXNwbGF5TmFtZToiRW50aXRpZXNHcm91cCJ9fSxCPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNHcm91cC9lbnRpdGllc0dyb3VwLmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLFU9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc0dyb3VwL2VudGl0aWVzR3JvdXAuanN4Iixjb21wb25lbnRzOkYsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksRz13LmRlZmF1bHQuYmluZChILmRlZmF1bHQpLHo9dC5FbnRpdGllc0dyb3VwPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQihVKHQsZSksZSl9fSgiRW50aXRpZXNHcm91cCIpKChzPSgwLEwuZGVmYXVsdCkoKSkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17YWN0aXZlRmllbGQ6bnVsbH0sci5nZXRFbnRpdHk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRBY3RpdmVFbnRpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0QWN0aXZlRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUZvY3VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUJsdXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlRW50aXR5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudmFsaWRhdGVFbnRpdHk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3ZhbGlkYXRlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fdmFsaWRhdGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZhbGlkYXRlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQmx1cl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQmx1cl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRm9jdXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZvY3VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZlRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEFjdGl2ZUVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMuZW50aXRpZXMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KX19LHtrZXk6Il9fZ2V0QWN0aXZlRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEFjdGl2ZUVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRBY3RpdmVFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QWN0aXZlRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEFjdGl2ZUVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuZW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZX0pfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChlLmV2ZW50SW5mbyksdGhpcy52YWxpZGF0ZUVudGl0eShlLHQudmFsdWUpLHRoaXMucHJvcHMub25DaGFuZ2UoZS5pZCx0KX19LHtrZXk6Il9faGFuZGxlRm9jdXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZvY3VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGb2N1c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRm9jdXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZvY3VzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldFN0YXRlKHthY3RpdmVGaWVsZDplfSl9fSx7a2V5OiJfX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUJsdXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlRmllbGQ9PT1lP3RoaXMuc2V0U3RhdGUoe2FjdGl2ZUZpZWxkOm51bGx9KTpudWxsfX0se2tleToiX190b2dnbGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEVudGl0eShlKTt0LmFjdGl2ZT90aGlzLnByb3BzLm9uUmVtb3ZlKGUpOnRoaXMucHJvcHMub25BZGQodCl9fSx7a2V5OiJfX3ZhbGlkYXRlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdmFsaWRhdGVFbnRpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZhbGlkYXRlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX192YWxpZGF0ZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFlLnZhbGlkYXRpb25GdW5jKXJldHVybiBudWxsO3ZhciBuPWUudmFsaWRhdGlvbkZ1bmMoKDAsYy5kZWZhdWx0KSh7fSxlLHt2YWx1ZTp0fSkpO3JldHVybiB0aGlzLnByb3BzLm9uVmFsaWRhdGUoZS5pZCxuKSxufX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5lbnRpdGllcyxvPXQuZW50aXR5U21hbGxTaXplLHM9dC5lcnJvcnMsaT10LnN0YXRpY01vZGUsYT10LnZlcnRpY2FsO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJlbnRpdGllcy1ncm91cCIpfSx0aGlzLmdldEFjdGl2ZUVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29tcG9uZW50O3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LmlkLGNsYXNzTmFtZTpHKCJlbnRpdHktaXRlbSIse3ZlcnRpY2FsOmF9KX0sci5jcmVhdGVFbGVtZW50KG4se2VudGl0eUlkOnQuaWQsc21hbGxTaXplOm8scmVtb3ZhYmxlOnQucmVtb3ZhYmxlLHRpdGxlOnQudGl0bGUsbWV0YTp0Lm1ldGEsb25SZW1vdmU6ZnVuY3Rpb24oKXtlLnRvZ2dsZUVudGl0eSh0LmlkKX0sb25DaGFuZ2U6ZnVuY3Rpb24obil7cmV0dXJuIGUuaGFuZGxlQ2hhbmdlKHQsbil9LG9uRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5oYW5kbGVGb2N1cyh0LmlkKX0sb25CbHVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUuaGFuZGxlQmx1cih0LmlkKX0sdmFsdWU6dC52YWx1ZSxhY3RpdmU6ZS5zdGF0ZS5hY3RpdmVGaWVsZD09PXQuaWQsZXJyb3I6c1t0LmlkXSx2ZXJ0aWNhbDphLGN1c3RvbVByb3BzOnQuY3VzdG9tUHJvcHN9KSl9KSwhaSYmci5jcmVhdGVFbGVtZW50KEkuRW50aXRpZXNTZWxlY3Rvcix7ZW50aXRpZXM6bixvbkNoYW5nZTp0aGlzLnRvZ2dsZUVudGl0eX0pKX19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtlbnRpdGllczprLmRlZmF1bHQuYXJyYXlPZihQLmZpbHRlckVudGl0eVNoYXBlKSxvbkFkZDprLmRlZmF1bHQuZnVuYyxvblJlbW92ZTprLmRlZmF1bHQuZnVuYyxvbkNoYW5nZTprLmRlZmF1bHQuZnVuYyxvblZhbGlkYXRlOmsuZGVmYXVsdC5mdW5jLGVycm9yczprLmRlZmF1bHQub2JqZWN0LGVudGl0eVNtYWxsU2l6ZTprLmRlZmF1bHQuYm9vbCx0cmFja2luZzprLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6ay5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOmsuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZCxzdGF0aWNNb2RlOmsuZGVmYXVsdC5ib29sLHZlcnRpY2FsOmsuZGVmYXVsdC5ib29sfSxhLmRlZmF1bHRQcm9wcz17ZW50aXRpZXM6W10sZXJyb3JzOnt9LG9uQWRkOmZ1bmN0aW9uKCl7fSxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uVmFsaWRhdGU6ZnVuY3Rpb24oKXt9LGVudGl0eVNtYWxsU2l6ZTohMSx0cmFja2luZzprLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6ay5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOmsuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZCxzdGF0aWNNb2RlOiExLHZlcnRpY2FsOiExfSxpPWwpKXx8aSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIkVudGl0aWVzR3JvdXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNHcm91cC9lbnRpdGllc0dyb3VwLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzR3JvdXAvZW50aXRpZXNHcm91cC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc0dyb3VwL2VudGl0aWVzR3JvdXAuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJlbnRpdGllcy1ncm91cCI6ImVudGl0aWVzR3JvdXBfX2VudGl0aWVzLWdyb3VwX19fMld2eWwiLCJlbnRpdHktaXRlbSI6ImVudGl0aWVzR3JvdXBfX2VudGl0eS1pdGVtX19fZ3ZhSlAiLHZlcnRpY2FsOiJlbnRpdGllc0dyb3VwX192ZXJ0aWNhbF9fXzFDNnRXIn19LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzR3JvdXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNHcm91cC9lbnRpdGllc0dyb3VwLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnRpdGllc0dyb3VwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FbnRpdGllc0dyb3VwfX0pfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc1NlbGVjdG9yL2VudGl0aWVzU2VsZWN0b3IuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVudGl0aWVzU2VsZWN0b3I9dm9pZCAwO3ZhciBzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPW8oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPW8odSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPW8oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9byhwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9byhtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHk9byhFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksVD1vKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxTPW8oTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvcHJvcFR5cGVzLmpzIiksdz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzU2VsZWN0b3IvZW50aXRpZXNTZWxlY3Rvci5zY3NzIiksTT1vKHcpLGs9e0VudGl0aWVzU2VsZWN0b3I6e2Rpc3BsYXlOYW1lOiJFbnRpdGllc1NlbGVjdG9yIn19LEk9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc1NlbGVjdG9yL2VudGl0aWVzU2VsZWN0b3IuanN4Iixjb21wb25lbnRzOmssbG9jYWxzOltlXSxpbXBvcnRzOltULmRlZmF1bHRdfSksUD0oMCx5LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzU2VsZWN0b3IvZW50aXRpZXNTZWxlY3Rvci5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSxOPVMuZGVmYXVsdC5iaW5kKE0uZGVmYXVsdCksSD10LkVudGl0aWVzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJKFAodCxlKSxlKX19KCJFbnRpdGllc1NlbGVjdG9yIikoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGwuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17b3BlbmVkOiExfSxyLmhhbmRsZU91dHNpZGVDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnRvZ2dsZU1lbnU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZU1lbnVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZU91dHNpZGVDbGljaywhMSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2ssITEpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7IXRoaXMubm9kZS5jb250YWlucyhlLnRhcmdldCkmJnRoaXMuc3RhdGUub3BlbmVkJiZ0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe29wZW5lZDohdGhpcy5zdGF0ZS5vcGVuZWR9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuZW50aXRpZXMsbz10Lm9uQ2hhbmdlO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH0sY2xhc3NOYW1lOk4oImVudGl0aWVzLXNlbGVjdG9yIix7b3BlbmVkOnRoaXMuc3RhdGUub3BlbmVkfSl9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk4oInRvZ2dsZXIiKSxvbkNsaWNrOnRoaXMudG9nZ2xlTWVudX0sci5jcmVhdGVFbGVtZW50KEwuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkVudGl0aWVzU2VsZWN0b3IubW9yZSIsZGVmYXVsdE1lc3NhZ2U6Ik1vcmUifSkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk4oImVudGl0aWVzLWxpc3QiKX0sbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3RhdGljJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LmlkLGNsYXNzTmFtZTpOKCJlbnRpdHktaXRlbSIseyJzdWItaXRlbSI6dC5tZXRhJiZ0Lm1ldGEuc3ViSXRlbX0pfSxyLmNyZWF0ZUVsZW1lbnQoeC5JbnB1dENoZWNrYm94LHt2YWx1ZTp0LmFjdGl2ZSxvbkNoYW5nZTpmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe29wZW5lZDohZS5zdGF0ZS5vcGVuZWR9KSxvKHQuaWQpfX0sdC5tZXRhJiZ0Lm1ldGEubG9uZ05hbWV8fHQudGl0bGUpKX0pKSl9fV0pLHR9KHYuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17ZW50aXRpZXM6ai5kZWZhdWx0LmFycmF5T2YoRC5maWx0ZXJFbnRpdHlTaGFwZSkuaXNSZXF1aXJlZCxvbkNoYW5nZTpqLmRlZmF1bHQuZnVuY30scy5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlOmZ1bmN0aW9uKCl7fX0saSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJFbnRpdGllc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzU2VsZWN0b3IvZW50aXRpZXNTZWxlY3Rvci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc1NlbGVjdG9yL2VudGl0aWVzU2VsZWN0b3IuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNTZWxlY3Rvci9lbnRpdGllc1NlbGVjdG9yLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZW50aXRpZXMtc2VsZWN0b3IiOiJlbnRpdGllc1NlbGVjdG9yX19lbnRpdGllcy1zZWxlY3Rvcl9fX0JQb2dmIixvcGVuZWQ6ImVudGl0aWVzU2VsZWN0b3JfX29wZW5lZF9fXzFKRHM3Iix0b2dnbGVyOiJlbnRpdGllc1NlbGVjdG9yX190b2dnbGVyX19fM0Fyc1QiLCJlbnRpdGllcy1saXN0IjoiZW50aXRpZXNTZWxlY3Rvcl9fZW50aXRpZXMtbGlzdF9fXzJjWU8tIiwiZW50aXR5LWl0ZW0iOiJlbnRpdGllc1NlbGVjdG9yX19lbnRpdHktaXRlbV9fXzFoanhFIiwic3ViLWl0ZW0iOiJlbnRpdGllc1NlbGVjdG9yX19zdWItaXRlbV9fX3NxOGRjIn19LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzU2VsZWN0b3IvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXRpZXNTZWxlY3Rvci9lbnRpdGllc1NlbGVjdG9yLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnRpdGllc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FbnRpdGllc1NlbGVjdG9yfX0pfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlDb250YWlucy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVudGl0eUNvbnRhaW5zPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksaz17RW50aXR5Q29udGFpbnM6e2Rpc3BsYXlOYW1lOiJFbnRpdHlDb250YWlucyJ9fSxJPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5Q29udGFpbnMuanN4Iixjb21wb25lbnRzOmssbG9jYWxzOltlXSxpbXBvcnRzOltTLmRlZmF1bHRdfSksUD0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUNvbnRhaW5zLmpzeCIsY29tcG9uZW50czprLGxvY2FsczpbXSxpbXBvcnRzOltTLmRlZmF1bHQsVC5kZWZhdWx0XX0pLE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJKFAodCxlKSxlKX19KCJFbnRpdHlDb250YWlucyIpKCgwLEQuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNoYW5nZUlucHV0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYW5nZUlucHV0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQmx1cklucHV0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkJsdXJJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX29uQmx1cklucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkJsdXJJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKHt2YWx1ZTplLnRhcmdldC52YWx1ZX0pfX0se2tleToiX19vbkJsdXJJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25CbHVySW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQmx1cklucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMub25CbHVyKHt2YWx1ZTplLnRhcmdldC52YWx1ZX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD0oZS5pbnRsLGUub25SZW1vdmUpLG49ZS5yZW1vdmFibGUscj1lLnRpdGxlLG89ZS5zbWFsbFNpemUscz1lLnZlcnRpY2FsLGk9ZS52YWx1ZSxhPSgwLGMuZGVmYXVsdCkoZSxbImludGwiLCJvblJlbW92ZSIsInJlbW92YWJsZSIsInRpdGxlIiwic21hbGxTaXplIiwidmVydGljYWwiLCJ2YWx1ZSJdKTtyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5GaWVsZEZpbHRlckVudGl0eSx7c3RyZXRjaGFibGU6ITAsdGl0bGU6cixzbWFsbFNpemU6byxyZW1vdmFibGU6bixvblJlbW92ZTp0LHZlcnRpY2FsOnN9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uSW5wdXQsKDAsbC5kZWZhdWx0KSh7dmFsdWU6aS52YWx1ZSxtYXhMZW5ndGg6IjEyOCIscmVhZE9ubHk6ITB9LGEse29uQ2hhbmdlOnRoaXMub25DaGFuZ2VJbnB1dCxvbkJsdXI6dGhpcy5vbkJsdXJJbnB1dH0pKSl9fV0pLHR9KE8uQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDpELmludGxTaGFwZS5pc1JlcXVpcmVkLHZhbHVlOkwuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0aXRsZTpMLmRlZmF1bHQuc3RyaW5nLHNtYWxsU2l6ZTpMLmRlZmF1bHQuYm9vbCxyZW1vdmFibGU6TC5kZWZhdWx0LmJvb2wsb25SZW1vdmU6TC5kZWZhdWx0LmZ1bmMsb25DaGFuZ2U6TC5kZWZhdWx0LmZ1bmMsb25CbHVyOkwuZGVmYXVsdC5mdW5jLHZlcnRpY2FsOkwuZGVmYXVsdC5ib29sfSxzLmRlZmF1bHRQcm9wcz17dGl0bGU6IiIsc21hbGxTaXplOiExLHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sdmVydGljYWw6ITF9LG89aSkpfHxvKTt0LkVudGl0eUNvbnRhaW5zPU47IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiRW50aXR5Q29udGFpbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5Q29udGFpbnMuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5RHJvcGRvd24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdHlEcm9wZG93bj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksUj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEZpbHRlckVudGl0eS9pbmRleC5qcyIpLGo9e0VudGl0eURyb3Bkb3duOntkaXNwbGF5TmFtZToiRW50aXR5RHJvcGRvd24ifX0seD0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eURyb3Bkb3duLmpzeCIsY29tcG9uZW50czpqLGxvY2FsczpbZV0saW1wb3J0czpbdi5kZWZhdWx0XX0pLEw9KDAsRS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlEcm9wZG93bi5qc3giLGNvbXBvbmVudHM6aixsb2NhbHM6W10saW1wb3J0czpbdi5kZWZhdWx0LGcuZGVmYXVsdF19KSxEPXQuRW50aXR5RHJvcGRvd249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB4KEwodCxlKSxlKX19KCJFbnRpdHlEcm9wZG93biIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGw9MDtsPHM7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0VmFsdWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAscC5kZWZhdWx0KShyLG8pfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS52YWx1ZTtyZXR1cm4gZS5tZXRhLm11bHRpcGxlP3QudmFsdWU/dC52YWx1ZS5zcGxpdCgiLCIpOltdOnQudmFsdWV9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKHtjb25kaXRpb246dGhpcy5wcm9wcy52YWx1ZS5jb25kaXRpb24sdmFsdWU6dGhpcy5wcm9wcy5tZXRhLm11bHRpcGxlP2Uuam9pbigiLCIpOmV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5vblJlbW92ZSxuPWUucmVtb3ZhYmxlLHI9ZS5lbnRpdHlJZCxvPWUuc21hbGxTaXplLHM9ZS50aXRsZSxpPWUubWV0YSxhPWUudmVydGljYWw7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFIuRmllbGRGaWx0ZXJFbnRpdHkse3RpdGxlOnN8fHIsc21hbGxTaXplOm8scmVtb3ZhYmxlOm4sb25SZW1vdmU6dCx2ZXJ0aWNhbDphfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLklucHV0RHJvcGRvd24se29wdGlvbnM6aS5vcHRpb25zLHZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxtdWx0aXBsZTppLm11bHRpcGxlLHNlbGVjdEFsbDppLnNlbGVjdEFsbH0pKX19XSksdH0oeS5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXt2YWx1ZTpPLmRlZmF1bHQub2JqZWN0LG1ldGE6Ty5kZWZhdWx0Lm9iamVjdCxlbnRpdHlJZDpPLmRlZmF1bHQuc3RyaW5nLHRpdGxlOk8uZGVmYXVsdC5zdHJpbmcsc21hbGxTaXplOk8uZGVmYXVsdC5ib29sLHJlbW92YWJsZTpPLmRlZmF1bHQuYm9vbCxvblJlbW92ZTpPLmRlZmF1bHQuZnVuYyxvbkNoYW5nZTpPLmRlZmF1bHQuZnVuYyx2ZXJ0aWNhbDpPLmRlZmF1bHQuYm9vbH0sby5kZWZhdWx0UHJvcHM9e2VudGl0eUlkOiIiLHRpdGxlOiIiLHNtYWxsU2l6ZTohMSx2YWx1ZTp7fSxtZXRhOnt9LHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LHZlcnRpY2FsOiExfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiRW50aXR5RHJvcGRvd24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5RHJvcGRvd24uanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZUtleXMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdHlJdGVtQXR0cmlidXRlS2V5cz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHU9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMuanN4IiksZD0oMCxsLmRlZmluZU1lc3NhZ2VzKSh7cGxhY2Vob2xkZXI6e2lkOiJFbnRpdHlJdGVtQXR0cmlidXRlS2V5cy5wbGFjZWhvbGRlciIsZGVmYXVsdE1lc3NhZ2U6IkVudGVyIGF0dHJpYnV0ZSBrZXlzIn19KSxfPSgwLGwuaW5qZWN0SW50bCkoZnVuY3Rpb24odCl7dmFyIG49dC5pbnRsLHI9KDAsYS5kZWZhdWx0KSh0LFsiaW50bCJdKTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KGMuRW50aXR5SXRlbUF0dHJpYnV0ZXMsKDAscy5kZWZhdWx0KSh7dXJsUmVzb2x2ZXI6dS5VUkxTLmxhdW5jaEF0dHJpYnV0ZUtleXNTZWFyY2gscGxhY2Vob2xkZXI6bi5mb3JtYXRNZXNzYWdlKGQucGxhY2Vob2xkZXIpfSxyKSl9KTt0LkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzPV87IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVudGl0eUl0ZW1BdHRyaWJ1dGVWYWx1ZXM9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx1PW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksYz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzLmpzeCIpLGQ9KDAsbC5kZWZpbmVNZXNzYWdlcykoe3BsYWNlaG9sZGVyOntpZDoiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5wbGFjZWhvbGRlciIsZGVmYXVsdE1lc3NhZ2U6IkVudGVyIGF0dHJpYnV0ZSB2YWx1ZXMifX0pLF89ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKCIsIik6ZX0scD0oMCxsLmluamVjdEludGwpKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW50bCxyPXQubWV0YSxvPSgwLGEuZGVmYXVsdCkodCxbImludGwiLCJtZXRhIl0pO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoYy5FbnRpdHlJdGVtQXR0cmlidXRlcywoMCxzLmRlZmF1bHQpKHt1cmxSZXNvbHZlcjpmdW5jdGlvbihlKXtyZXR1cm4gdS5VUkxTLmxhdW5jaEF0dHJpYnV0ZVZhbHVlc1NlYXJjaChlLF8oci5hdHRyaWJ1dGVLZXkpKX0scGxhY2Vob2xkZXI6bi5mb3JtYXRNZXNzYWdlKGQucGxhY2Vob2xkZXIpfSxvKSl9KTt0LkVudGl0eUl0ZW1BdHRyaWJ1dGVWYWx1ZXM9cDshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtQXR0cmlidXRlcy9lbnRpdHlJdGVtQXR0cmlidXRlVmFsdWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVWYWx1ZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywibm9ybWFsaXplVmFsdWUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRW50aXR5SXRlbUF0dHJpYnV0ZXM9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsVGFncy9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksSD17RW50aXR5SXRlbUF0dHJpYnV0ZXM6e2Rpc3BsYXlOYW1lOiJFbnRpdHlJdGVtQXR0cmlidXRlcyJ9fSxGPSgwLHguZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksQj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLFU9W3t2YWx1ZTpOLkNPTkRJVElPTl9IQVMsbGFiZWw6Ui5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5hbGwiLGRlZmF1bHRNZXNzYWdlOiJBbGwifSksc2hvcnRMYWJlbDpSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmFsbFNob3J0IixkZWZhdWx0TWVzc2FnZToiQWxsIn0pfSx7dmFsdWU6Ti5DT05ESVRJT05fTk9UX0hBUyxsYWJlbDpSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLndpdGhvdXRBbGwiLGRlZmF1bHRNZXNzYWdlOiJXaXRob3V0IGFsbCJ9KSxzaG9ydExhYmVsOlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMud2l0aG91dEFsbFNob3J0IixkZWZhdWx0TWVzc2FnZToiIWFsbCJ9KX0se3ZhbHVlOk4uQ09ORElUSU9OX0FOWSxsYWJlbDpSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmFueSIsZGVmYXVsdE1lc3NhZ2U6IkFueSJ9KSxzaG9ydExhYmVsOlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuYW55U2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJBbnkifSl9LHt2YWx1ZTpOLkNPTkRJVElPTl9OT1RfQU5ZLGxhYmVsOlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMud2l0aG91dEFueSIsZGVmYXVsdE1lc3NhZ2U6IldpdGhvdXQgYW55In0pLHNob3J0TGFiZWw6Ui5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy53aXRob3V0QW55U2hvcnQiLGRlZmF1bHRNZXNzYWdlOiIhYW55In0pfV0sRz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEYoQih0LGUpLGUpfX0oIkVudGl0eUl0ZW1BdHRyaWJ1dGVzIikoKG89KDAsdy5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57YWN0aXZlUHJvamVjdDooMCxrLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSl9fSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLG0uZGVmYXVsdCkodGhpcyx0KSwoMCxFLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wbGFjZWhvbGRlcixuPWUuYWN0aXZlUHJvamVjdCxyPWUudXJsUmVzb2x2ZXIsbz1lLm9uUmVtb3ZlLHM9ZS5yZW1vdmFibGUsaT1lLnRpdGxlLGE9ZS5zbWFsbFNpemUsbD0oMCxkLmRlZmF1bHQpKGUsWyJwbGFjZWhvbGRlciIsImFjdGl2ZVByb2plY3QiLCJ1cmxSZXNvbHZlciIsIm9uUmVtb3ZlIiwicmVtb3ZhYmxlIiwidGl0bGUiLCJzbWFsbFNpemUiXSk7cmV0dXJuIFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRGaWx0ZXJFbnRpdHkse3RpdGxlOmkscmVtb3ZhYmxlOnMsc21hbGxTaXplOmEsb25SZW1vdmU6byxzdHJldGNoYWJsZTohMH0sUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5JbnB1dENvbmRpdGlvbmFsVGFncywoMCx1LmRlZmF1bHQpKHt9LGwse2NvbmRpdGlvbnM6VSxwbGFjZWhvbGRlcjp0LHVybDpyKG4pLGlucHV0UHJvcHM6e21heExlbmd0aDoxMjh9fSkpKX19XSksdH0oUy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXt2YWx1ZTpELmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdGl0bGU6RC5kZWZhdWx0LnN0cmluZyxzbWFsbFNpemU6RC5kZWZhdWx0LmJvb2wscmVtb3ZhYmxlOkQuZGVmYXVsdC5ib29sLG9uUmVtb3ZlOkQuZGVmYXVsdC5mdW5jLHBsYWNlaG9sZGVyOkQuZGVmYXVsdC5zdHJpbmcsdXJsUmVzb2x2ZXI6RC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxhY3RpdmVQcm9qZWN0OkQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e3RpdGxlOiIiLHNtYWxsU2l6ZTohMSxyZW1vdmFibGU6ITAscGxhY2Vob2xkZXI6IiIsb25SZW1vdmU6ZnVuY3Rpb24oKXt9fSxzPWEpKXx8cyk7dC5FbnRpdHlJdGVtQXR0cmlidXRlcz1HOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJFbnRpdHlJdGVtQXR0cmlidXRlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtQXR0cmlidXRlcy9lbnRpdHlJdGVtQXR0cmlidXRlcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJjb25kaXRpb25zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtQXR0cmlidXRlcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtQXR0cmlidXRlcy9lbnRpdHlJdGVtQXR0cmlidXRlS2V5cy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5SXRlbUF0dHJpYnV0ZUtleXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzfX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbUF0dHJpYnV0ZXMvZW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlc319KX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbURlc2NyaXB0aW9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRW50aXR5SXRlbURlc2NyaXB0aW9uPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbC9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRGaWx0ZXJFbnRpdHkvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLFA9e0VudGl0eUl0ZW1EZXNjcmlwdGlvbjp7ZGlzcGxheU5hbWU6IkVudGl0eUl0ZW1EZXNjcmlwdGlvbiJ9fSxOPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbURlc2NyaXB0aW9uLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLEg9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtRGVzY3JpcHRpb24uanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksRj1be3ZhbHVlOkkuQ09ORElUSU9OX0NOVCxsYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmNudCIsZGVmYXVsdE1lc3NhZ2U6IkNvbnRhaW5zIn0pLHNob3J0TGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5jbnRTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6ImNudCJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX05PVF9DTlQsbGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5ub3RDbnQiLGRlZmF1bHRNZXNzYWdlOiJOb3QgY29udGFpbnMifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLm5vdENudFNob3J0IixkZWZhdWx0TWVzc2FnZToiIWNudCJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX0VRLGxhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuZXEiLGRlZmF1bHRNZXNzYWdlOiJFcXVhbHMifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmVxU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJlcSJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX05PVF9FUSxsYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLm5vdEVxIixkZWZhdWx0TWVzc2FnZToiTm90IGVxdWFscyJ9KSxzaG9ydExhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMubm90RXFTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IiFlcSJ9KX1dLEI9KDAsRC5kZWZpbmVNZXNzYWdlcykoe3BsYWNlaG9sZGVyOntpZDoiRW50aXR5SXRlbURlc2NyaXB0aW9uLnBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiRW50ZXIgZGVzY3JpcHRpb24ifX0pLFU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBOKEgodCxlKSxlKX19KCJFbnRpdHlJdGVtRGVzY3JpcHRpb24iKSgoMCxELmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGYuZGVmYXVsdCkodGhpcyx0KSwoMCxiLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS52YWx1ZSxyPWUub25SZW1vdmUsbz1lLnJlbW92YWJsZSxzPWUudGl0bGUsaT1lLm1ldGEsYT1lLnNtYWxsU2l6ZSx1PSgwLGMuZGVmYXVsdCkoZSxbImludGwiLCJ2YWx1ZSIsIm9uUmVtb3ZlIiwicmVtb3ZhYmxlIiwidGl0bGUiLCJtZXRhIiwic21hbGxTaXplIl0pO3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZpZWxkRXJyb3JIaW50LHUsUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5GaWVsZEZpbHRlckVudGl0eSx7dGl0bGU6cyxzbWFsbFNpemU6YSxyZW1vdmFibGU6byxvblJlbW92ZTpyfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LklucHV0Q29uZGl0aW9uYWwsKDAsbC5kZWZhdWx0KSh7Y29uZGl0aW9uczpGLHZhbHVlOm4scGxhY2Vob2xkZXI6aS5wbGFjZWhvbGRlcj9pLnBsYWNlaG9sZGVyOnQuZm9ybWF0TWVzc2FnZShCLnBsYWNlaG9sZGVyKSxtYXhMZW5ndGg6MTh9LHUpKSkpfX1dKSx0fShPLkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6RC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx2YWx1ZTpMLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdGl0bGU6TC5kZWZhdWx0LnN0cmluZyxzbWFsbFNpemU6TC5kZWZhdWx0LmJvb2wsbWV0YTpMLmRlZmF1bHQub2JqZWN0LHJlbW92YWJsZTpMLmRlZmF1bHQuYm9vbCxvblJlbW92ZTpMLmRlZmF1bHQuZnVuY30scy5kZWZhdWx0UHJvcHM9e3RpdGxlOiIiLHNtYWxsU2l6ZTohMSxtZXRhOnt9LHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe319LG89aSkpfHxvKTt0LkVudGl0eUl0ZW1EZXNjcmlwdGlvbj1VOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJFbnRpdHlJdGVtRGVzY3JpcHRpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbURlc2NyaXB0aW9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImNvbmRpdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbURlc2NyaXB0aW9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1EZXNjcmlwdGlvbi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbU5hbWUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdHlJdGVtTmFtZT12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRmlsdGVyRW50aXR5L2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxQPXtFbnRpdHlJdGVtTmFtZTp7ZGlzcGxheU5hbWU6IkVudGl0eUl0ZW1OYW1lIn19LE49KDAsai5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtTmFtZS5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxIPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbU5hbWUuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksRj1be3ZhbHVlOkkuQ09ORElUSU9OX0NOVCxsYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmNudCIsZGVmYXVsdE1lc3NhZ2U6IkNvbnRhaW5zIn0pLHNob3J0TGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5jbnRTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6ImNudCJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX05PVF9DTlQsbGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5ub3RDbnQiLGRlZmF1bHRNZXNzYWdlOiJOb3QgY29udGFpbnMifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLm5vdENudFNob3J0IixkZWZhdWx0TWVzc2FnZToiIWNudCJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX0VRLGxhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuZXEiLGRlZmF1bHRNZXNzYWdlOiJFcXVhbHMifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmVxU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJlcSJ9KX0se3ZhbHVlOkkuQ09ORElUSU9OX05PVF9FUSxsYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLm5vdEVxIixkZWZhdWx0TWVzc2FnZToiTm90IGVxdWFscyJ9KSxzaG9ydExhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMubm90RXFTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IiFlcSJ9KX1dLEI9KDAsRC5kZWZpbmVNZXNzYWdlcykoe3BsYWNlaG9sZGVyOntpZDoiRW50aXR5SXRlbU5hbWUucGxhY2Vob2xkZXIiLGRlZmF1bHRNZXNzYWdlOiJFbnRlciBuYW1lIn19KSxVPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fSgiRW50aXR5SXRlbU5hbWUiKSgoMCxELmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGYuZGVmYXVsdCkodGhpcyx0KSwoMCxiLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS52YWx1ZSxyPWUub25SZW1vdmUsbz1lLnJlbW92YWJsZSxzPWUudGl0bGUsaT1lLnNtYWxsU2l6ZSxhPSgwLGMuZGVmYXVsdCkoZSxbImludGwiLCJ2YWx1ZSIsIm9uUmVtb3ZlIiwicmVtb3ZhYmxlIiwidGl0bGUiLCJzbWFsbFNpemUiXSk7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRmllbGRFcnJvckhpbnQsYSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZpZWxkRmlsdGVyRW50aXR5LHt0aXRsZTpzLHNtYWxsU2l6ZTppLHJlbW92YWJsZTpvLG9uUmVtb3ZlOnJ9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXRDb25kaXRpb25hbCwoMCxsLmRlZmF1bHQpKHtjb25kaXRpb25zOkYsdmFsdWU6bixtYXhMZW5ndGg6MTI4LHBsYWNlaG9sZGVyOnQuZm9ybWF0TWVzc2FnZShCLnBsYWNlaG9sZGVyKX0sYSkpKSl9fV0pLHR9KE8uQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDpELmludGxTaGFwZS5pc1JlcXVpcmVkLHZhbHVlOkwuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0aXRsZTpMLmRlZmF1bHQuc3RyaW5nLHNtYWxsU2l6ZTpMLmRlZmF1bHQuYm9vbCxyZW1vdmFibGU6TC5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6TC5kZWZhdWx0LmZ1bmMsb25SZW1vdmU6TC5kZWZhdWx0LmZ1bmN9LHMuZGVmYXVsdFByb3BzPXt0aXRsZToiIixzbWFsbFNpemU6ITEscmVtb3ZhYmxlOiEwLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvblJlbW92ZTpmdW5jdGlvbigpe319LG89aSkpfHxvKTt0LkVudGl0eUl0ZW1OYW1lPVU7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIkVudGl0eUl0ZW1OYW1lIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1OYW1lLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImNvbmRpdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbU5hbWUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbU5hbWUuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1TdGFydFRpbWUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdHlJdGVtU3RhcnRUaW1lPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEZpbHRlckVudGl0eS9pbmRleC5qcyIpLF89bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUaW1lRGF0ZVJhbmdlL2luZGV4LmpzIikscD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLGY9W3tsYWJlbDoiVG9kYXkiLHZhbHVlOntzdGFydDooMCx1LmRlZmF1bHQpKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLGVuZDooMCx1LmRlZmF1bHQpKCkuZW5kT2YoImRheSIpLnZhbHVlT2YoKSsxLGR5bmFtaWM6ITB9fSx7bGFiZWw6Ikxhc3QgMiBkYXlzIix2YWx1ZTp7c3RhcnQ6KDAsdS5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnN1YnRyYWN0KDEsImRheXMiKS52YWx1ZU9mKCksZW5kOigwLHUuZGVmYXVsdCkoKS5lbmRPZigiZGF5IikudmFsdWVPZigpKzEsZHluYW1pYzohMH19LHtsYWJlbDoiTGFzdCA3IGRheXMiLHZhbHVlOntzdGFydDooMCx1LmRlZmF1bHQpKCkuc3RhcnRPZigiZGF5Iikuc3VidHJhY3QoMSwid2Vla3MiKS52YWx1ZU9mKCksZW5kOigwLHUuZGVmYXVsdCkoKS5lbmRPZigiZGF5IikudmFsdWVPZigpKzEsZHluYW1pYzohMH19LHtsYWJlbDoiTGFzdCAzMCBkYXlzIix2YWx1ZTp7c3RhcnQ6KDAsdS5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnN1YnRyYWN0KDEsIm1vbnRocyIpLnZhbHVlT2YoKSxlbmQ6KDAsdS5kZWZhdWx0KSgpLmVuZE9mKCJkYXkiKS52YWx1ZU9mKCkrMSxkeW5hbWljOiEwfX1dLG09IiIrKGMudXRjT2Zmc2V0Pi0xPyIrIitjLnV0Y09mZnNldDpjLnV0Y09mZnNldCksaD1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIGUuZHluYW1pYz8oMCxjLmdldE1pbnV0ZXNGcm9tVGltZXN0YW1wKSh0KSsiOyIrKDAsYy5nZXRNaW51dGVzRnJvbVRpbWVzdGFtcCkobikrIjsiK206dCsiLCIrbn0sZz10LkVudGl0eUl0ZW1TdGFydFRpbWU9ZnVuY3Rpb24odCl7dmFyIG49dC5vblJlbW92ZSxyPXQub25DaGFuZ2Usbz10LnJlbW92YWJsZSxpPXQudGl0bGUsYT10LnNtYWxsU2l6ZSxsPXQudmFsdWUsdT10LnZlcnRpY2FsO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoZC5GaWVsZEZpbHRlckVudGl0eSx7dGl0bGU6aSxzbWFsbFNpemU6YSxyZW1vdmFibGU6byxvblJlbW92ZTpuLHZlcnRpY2FsOnV9LGUuY3JlYXRlRWxlbWVudChfLklucHV0VGltZURhdGVSYW5nZSx7cHJlc2V0czpmLG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3Ioe2NvbmRpdGlvbjpwLkNPTkRJVElPTl9CRVRXRUVOLHZhbHVlOmgoKDAscy5kZWZhdWx0KSh7fSxlKSl9KX0sdmFsdWU6KDAsYy5wYXJzZURhdGVUaW1lUmFuZ2UpKGwpLHdpdGhvdXREeW5hbWljOiEwfSkpfTtnLnByb3BUeXBlcz17dmFsdWU6YS5kZWZhdWx0Lm9uZU9mVHlwZShbYS5kZWZhdWx0Lm9iamVjdCxhLmRlZmF1bHQuc3RyaW5nXSksdGl0bGU6YS5kZWZhdWx0LnN0cmluZyxzbWFsbFNpemU6YS5kZWZhdWx0LmJvb2wscmVtb3ZhYmxlOmEuZGVmYXVsdC5ib29sLG9uUmVtb3ZlOmEuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlOmEuZGVmYXVsdC5mdW5jLHZlcnRpY2FsOmEuZGVmYXVsdC5ib29sfSxnLmRlZmF1bHRQcm9wcz17dmFsdWU6e30scmVtb3ZhYmxlOiEwLHRpdGxlOiIiLHNtYWxsU2l6ZTohMSxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LHZlcnRpY2FsOiExfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiRW50aXR5SXRlbVN0YXJ0VGltZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtU3RhcnRUaW1lLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsInByZXNldHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXJ0VGltZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJ1dGNTdHJpbmciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXJ0VGltZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJmb3JtYXRWYWx1ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtU3RhcnRUaW1lLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXRpc3RpY3MuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbnRpdHlJdGVtU3RhdGlzdGljcz12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRmlsdGVyRW50aXR5L2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxQPXtFbnRpdHlJdGVtU3RhdGlzdGljczp7ZGlzcGxheU5hbWU6IkVudGl0eUl0ZW1TdGF0aXN0aWNzIn19LE49KDAsai5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtU3RhdGlzdGljcy5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxIPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXRpc3RpY3MuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksRj1be3ZhbHVlOkkuQ09ORElUSU9OX0dSRUFURVJfRVEsbGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5ndGUiLGRlZmF1bHRNZXNzYWdlOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmd0ZVNob3J0IixkZWZhdWx0TWVzc2FnZTpTdHJpbmcuZnJvbUNoYXJDb2RlKDg4MDUpfSl9LHt2YWx1ZTpJLkNPTkRJVElPTl9MRVNTX0VRLGxhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMubHRlIixkZWZhdWx0TWVzc2FnZToiTGVzcyB0aGFuIG9yIGVxdWFsIn0pLHNob3J0TGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5sdGVTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6U3RyaW5nLmZyb21DaGFyQ29kZSg4ODA0KX0pfSx7dmFsdWU6SS5DT05ESVRJT05fRVEsbGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5lcSIsZGVmYXVsdE1lc3NhZ2U6IkVxdWFscyJ9KSxzaG9ydExhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuZXFTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6ImVxIn0pfV0sQj0oMCxELmRlZmluZU1lc3NhZ2VzKSh7cGxhY2Vob2xkZXI6e2lkOiJFbnRpdHlJdGVtU3RhdGlzdGljcy5wbGFjZWhvbGRlciIsZGVmYXVsdE1lc3NhZ2U6IkVudGVyIHF1YW50aXR5In19KSxVPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fSgiRW50aXR5SXRlbVN0YXRpc3RpY3MiKSgoMCxELmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGYuZGVmYXVsdCkodGhpcyx0KSwoMCxiLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS52YWx1ZSxyPWUub25SZW1vdmUsbz1lLnJlbW92YWJsZSxzPWUuZW50aXR5SWQsaT1lLnRpdGxlLGE9ZS5zbWFsbFNpemUsdT0oMCxjLmRlZmF1bHQpKGUsWyJpbnRsIiwidmFsdWUiLCJvblJlbW92ZSIsInJlbW92YWJsZSIsImVudGl0eUlkIiwidGl0bGUiLCJzbWFsbFNpemUiXSk7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRmllbGRFcnJvckhpbnQsdSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZpZWxkRmlsdGVyRW50aXR5LHt0aXRsZTppfHxzLHNtYWxsU2l6ZTphLHJlbW92YWJsZTpvLG9uUmVtb3ZlOnJ9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXRDb25kaXRpb25hbCwoMCxsLmRlZmF1bHQpKHtjb25kaXRpb25zOkYsdmFsdWU6bixtYXhMZW5ndGg6MTgscGxhY2Vob2xkZXI6dC5mb3JtYXRNZXNzYWdlKEIucGxhY2Vob2xkZXIpfSx1KSkpKX19XSksdH0oTy5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOkQuaW50bFNoYXBlLmlzUmVxdWlyZWQsdmFsdWU6TC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGVudGl0eUlkOkwuZGVmYXVsdC5zdHJpbmcsdGl0bGU6TC5kZWZhdWx0LnN0cmluZyxzbWFsbFNpemU6TC5kZWZhdWx0LmJvb2wscmVtb3ZhYmxlOkwuZGVmYXVsdC5ib29sLG9uUmVtb3ZlOkwuZGVmYXVsdC5mdW5jfSxzLmRlZmF1bHRQcm9wcz17ZW50aXR5SWQ6IiIsdGl0bGU6IiIsc21hbGxTaXplOiIiLHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe319LG89aSkpfHxvKTt0LkVudGl0eUl0ZW1TdGF0aXN0aWNzPVU7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIkVudGl0eUl0ZW1TdGF0aXN0aWNzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1TdGF0aXN0aWNzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImNvbmRpdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXRpc3RpY3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXRpc3RpY3MuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUxhdW5jaE51bWJlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVudGl0eUxhdW5jaE51bWJlcj12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRmlsdGVyRW50aXR5L2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxQPXtFbnRpdHlMYXVuY2hOdW1iZXI6e2Rpc3BsYXlOYW1lOiJFbnRpdHlMYXVuY2hOdW1iZXIifX0sTj0oMCxqLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUxhdW5jaE51bWJlci5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxIPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5TGF1bmNoTnVtYmVyLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbXSxpbXBvcnRzOltTLmRlZmF1bHQsVC5kZWZhdWx0XX0pLEY9W3t2YWx1ZTpJLkNPTkRJVElPTl9HUkVBVEVSX0VRLGxhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuZ3RlIixkZWZhdWx0TWVzc2FnZToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIn0pLHNob3J0TGFiZWw6Uy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29uZGl0aW9ucy5ndGVTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6U3RyaW5nLmZyb21DaGFyQ29kZSg4ODA1KX0pfSx7dmFsdWU6SS5DT05ESVRJT05fTEVTU19FUSxsYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmx0ZSIsZGVmYXVsdE1lc3NhZ2U6Ikxlc3MgdGhhbiBvciBlcXVhbCJ9KSxzaG9ydExhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMubHRlU2hvcnQiLGRlZmF1bHRNZXNzYWdlOlN0cmluZy5mcm9tQ2hhckNvZGUoODgwNCl9KX0se3ZhbHVlOkkuQ09ORElUSU9OX0VRLGxhYmVsOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbmRpdGlvbnMuZXEiLGRlZmF1bHRNZXNzYWdlOiJFcXVhbHMifSksc2hvcnRMYWJlbDpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb25kaXRpb25zLmVxU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJlcSJ9KX1dLEI9KDAsRC5kZWZpbmVNZXNzYWdlcykoe3BsYWNlaG9sZGVyOntpZDoiRW50aXR5TGF1bmNoTnVtYmVyLnBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiRW50ZXIgbnVtYmVyIn19KSxVPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fSgiRW50aXR5TGF1bmNoTnVtYmVyIikoKDAsRC5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxmLmRlZmF1bHQpKHRoaXMsdCksKDAsYi5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bCxuPWUudmFsdWUscj1lLm9uUmVtb3ZlLG89ZS5yZW1vdmFibGUscz1lLnRpdGxlLGk9ZS5zaXplLGE9KDAsYy5kZWZhdWx0KShlLFsiaW50bCIsInZhbHVlIiwib25SZW1vdmUiLCJyZW1vdmFibGUiLCJ0aXRsZSIsInNpemUiXSk7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRmllbGRFcnJvckhpbnQsYSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZpZWxkRmlsdGVyRW50aXR5LHt0aXRsZTpzLHJlbW92YWJsZTpvLHNtYWxsU2l6ZTppLG9uUmVtb3ZlOnJ9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXRDb25kaXRpb25hbCwoMCxsLmRlZmF1bHQpKHtjb25kaXRpb25zOkYsdmFsdWU6bixtYXhMZW5ndGg6MTgscGxhY2Vob2xkZXI6dC5mb3JtYXRNZXNzYWdlKEIucGxhY2Vob2xkZXIpfSxhKSkpKX19XSksdH0oTy5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOkQuaW50bFNoYXBlLmlzUmVxdWlyZWQsdmFsdWU6TC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHRpdGxlOkwuZGVmYXVsdC5zdHJpbmcsc2l6ZTpMLmRlZmF1bHQuYm9vbCxyZW1vdmFibGU6TC5kZWZhdWx0LmJvb2wsb25SZW1vdmU6TC5kZWZhdWx0LmZ1bmN9LHMuZGVmYXVsdFByb3BzPXt0aXRsZToiIixzaXplOiExLHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe319LG89aSkpfHxvKTt0LkVudGl0eUxhdW5jaE51bWJlcj1VOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJFbnRpdHlMYXVuY2hOdW1iZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5TGF1bmNoTnVtYmVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImNvbmRpdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5TGF1bmNoTnVtYmVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUxhdW5jaE51bWJlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5TGF1bmNoT3duZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVudGl0eUxhdW5jaE93bmVyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5VXNlclNlYXJjaC5qc3giKSxhPXQuRW50aXR5TGF1bmNoT3duZXI9KDAsci5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57dXNlcnNTZWFyY2hVcmw6by5VUkxTLmxhdW5jaE93bmVyc1NlYXJjaCgoMCxzLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSkpfX0pKGkuRW50aXR5VXNlclNlYXJjaCk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRW50aXR5TGF1bmNoT3duZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5TGF1bmNoT3duZXIuanN4Iil9KCl9LCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eVByb2plY3RVc2Vycy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRW50aXR5UHJvamVjdFVzZXJzPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5VXNlclNlYXJjaC5qc3giKSxhPXQuRW50aXR5UHJvamVjdFVzZXJzPSgwLHIuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3VzZXJzU2VhcmNoVXJsOm8uVVJMUy5wcm9qZWN0VXNlcm5hbWVzU2VhcmNoKCgwLHMuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSl9fSkoaS5FbnRpdHlVc2VyU2VhcmNoKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJFbnRpdHlQcm9qZWN0VXNlcnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5UHJvamVjdFVzZXJzLmpzeCIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlVc2VyU2VhcmNoLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRW50aXR5VXNlclNlYXJjaD12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksaj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEZpbHRlckVudGl0eS9pbmRleC5qcyIpLHg9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2luZGV4LmpzIiksTD17RW50aXR5VXNlclNlYXJjaDp7ZGlzcGxheU5hbWU6IkVudGl0eVVzZXJTZWFyY2gifX0sRD0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eVVzZXJTZWFyY2guanN4Iixjb21wb25lbnRzOkwsbG9jYWxzOltlXSxpbXBvcnRzOltULmRlZmF1bHRdfSksdz0oMCx5LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eVVzZXJTZWFyY2guanN4Iixjb21wb25lbnRzOkwsbG9jYWxzOltdLGltcG9ydHM6W1QuZGVmYXVsdCxiLmRlZmF1bHRdfSksTT0oMCxSLmRlZmluZU1lc3NhZ2VzKSh7cGxhY2Vob2xkZXI6e2lkOiJFbnRpdHlVc2VyU2VhcmNoLnBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiRW50ZXIgdXNlcm5hbWUifSxmb2N1c1BsYWNlaG9sZGVyOntpZDoiRW50aXR5VXNlclNlYXJjaC5mb2N1c1BsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiQXQgbGVhc3QgMyBzeW1ib2xzIHJlcXVpcmVkLiJ9fSksaz10LkVudGl0eVVzZXJTZWFyY2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBEKHcodCxlKSxlKX19KCJFbnRpdHlVc2VyU2VhcmNoIikoKDAsUi5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5mb3JtYXRWYWx1ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19mb3JtYXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKHtjb25kaXRpb246dGhpcy5wcm9wcy52YWx1ZS5jb25kaXRpb24sdmFsdWU6ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KS5qb2luKCIsIil9KX19LHtrZXk6Il9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Zvcm1hdFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3ZhbHVlOmUsbGFiZWw6ZX19KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS52YWx1ZSxyPWUub25SZW1vdmUsbz1lLnJlbW92YWJsZSxzPWUudGl0bGUsaT1lLnNtYWxsU2l6ZSxhPWUudXNlcnNTZWFyY2hVcmwsbD1lLnZlcnRpY2FsLHU9dGhpcy5mb3JtYXRWYWx1ZShuLnZhbHVlLnNwbGl0KCIsIikpO3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZpZWxkRmlsdGVyRW50aXR5LHtzdHJldGNoYWJsZTohMCx0aXRsZTpzLHNtYWxsU2l6ZTppLHJlbW92YWJsZTpvLG9uUmVtb3ZlOnIsdmVydGljYWw6bH0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5JbnB1dFRhZ3NTZWFyY2gse3ZhbHVlOnUubGVuZ3RoJiZ1WzBdLnZhbHVlP3U6W10scGxhY2Vob2xkZXI6dC5mb3JtYXRNZXNzYWdlKE0ucGxhY2Vob2xkZXIpLGZvY3VzUGxhY2Vob2xkZXI6dC5mb3JtYXRNZXNzYWdlKE0uZm9jdXNQbGFjZWhvbGRlciksbWluTGVuZ3RoOjMsYXN5bmM6ITAsdXJpOmEsbWFrZU9wdGlvbnM6dGhpcy5mb3JtYXRWYWx1ZSxjcmVhdGFibGU6ITAsc2hvd05ld0xhYmVsOiEwLG11bHRpOiEwLHJlbW92ZVNlbGVjdGVkOiEwLG9uQ2hhbmdlOnRoaXMub25DaGFuZ2UsaW5wdXRQcm9wczp7bWF4TGVuZ3RoOjEyOH19KSl9fV0pLHR9KHYuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDpSLmludGxTaGFwZS5pc1JlcXVpcmVkLHZhbHVlOlMuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0aXRsZTpTLmRlZmF1bHQuc3RyaW5nLHNtYWxsU2l6ZTpTLmRlZmF1bHQuYm9vbCx1c2Vyc1NlYXJjaFVybDpTLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQscmVtb3ZhYmxlOlMuZGVmYXVsdC5ib29sLG9uUmVtb3ZlOlMuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlOlMuZGVmYXVsdC5mdW5jLHZlcnRpY2FsOlMuZGVmYXVsdC5ib29sfSxzLmRlZmF1bHRQcm9wcz17dGl0bGU6IiIsc21hbGxTaXplOiExLHJlbW92YWJsZTohMCxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LHZlcnRpY2FsOiExfSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGssIkVudGl0eVVzZXJTZWFyY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihNLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlVc2VyU2VhcmNoLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlJdGVtTmFtZS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5SXRlbU5hbWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkVudGl0eUl0ZW1OYW1lfX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbURlc2NyaXB0aW9uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnRpdHlJdGVtRGVzY3JpcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkVudGl0eUl0ZW1EZXNjcmlwdGlvbn19KTt2YXIgcz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUxhdW5jaE51bWJlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5TGF1bmNoTnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5FbnRpdHlMYXVuY2hOdW1iZXJ9fSk7dmFyIGk9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlMYXVuY2hPd25lci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5TGF1bmNoT3duZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkVudGl0eUxhdW5jaE93bmVyfX0pO3ZhciBhPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5SXRlbVN0YXJ0VGltZS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5SXRlbVN0YXJ0VGltZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuRW50aXR5SXRlbVN0YXJ0VGltZX19KTt2YXIgbD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1BdHRyaWJ1dGVzL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5FbnRpdHlJdGVtQXR0cmlidXRlS2V5c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlc319KTt2YXIgdT1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eUl0ZW1TdGF0aXN0aWNzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbnRpdHlJdGVtU3RhdGlzdGljcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuRW50aXR5SXRlbVN0YXRpc3RpY3N9fSk7dmFyIGM9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdHlEcm9wZG93bi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5RHJvcGRvd24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLkVudGl0eURyb3Bkb3dufX0pO3ZhciBkPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvZW50aXR5Q29udGFpbnMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVudGl0eUNvbnRhaW5zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5FbnRpdHlDb250YWluc319KTt2YXIgXz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0eVByb2plY3RVc2Vycy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW50aXR5UHJvamVjdFVzZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5FbnRpdHlQcm9qZWN0VXNlcnN9fSk7dmFyIHA9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9wcm9wVHlwZXMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmlsdGVyVmFsdWVTaGFwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlsdGVyVmFsdWVTaGFwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmlsdGVyRW50aXR5U2hhcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmZpbHRlckVudGl0eVNoYXBlfX0pfSwiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9wcm9wVHlwZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZmlsdGVyRW50aXR5U2hhcGU9dC5maWx0ZXJWYWx1ZVNoYXBlPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9dC5maWx0ZXJWYWx1ZVNoYXBlPW8uZGVmYXVsdC5zaGFwZSh7dmFsdWU6by5kZWZhdWx0Lm9uZU9mVHlwZShbby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQubnVtYmVyXSksY29uZGl0aW9uOm8uZGVmYXVsdC5zdHJpbmcsZmlsdGVyaW5nRmllbGQ6by5kZWZhdWx0LnN0cmluZ30pLGk9dC5maWx0ZXJFbnRpdHlTaGFwZT1vLmRlZmF1bHQuc2hhcGUoe2lkOm8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxjb21wb25lbnQ6by5kZWZhdWx0LmVsZW1lbnRUeXBlLHZhbHVlOnMuaXNSZXF1aXJlZCx0aXRsZTpvLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsaWRhdGlvbkZ1bmM6by5kZWZhdWx0LmZ1bmMsYWN0aXZlOm8uZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQscmVtb3ZhYmxlOm8uZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsc3RhdGljOm8uZGVmYXVsdC5ib29sLG1ldGE6by5kZWZhdWx0Lm9iamVjdH0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJmaWx0ZXJWYWx1ZVNoYXBlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL3Byb3BUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImZpbHRlckVudGl0eVNoYXBlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL3Byb3BUeXBlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9pbnB1dC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0fX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5wdXQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklucHV0PXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9pbnB1dC5zY3NzIiksZD1yKGMpLF89dS5kZWZhdWx0LmJpbmQoZC5kZWZhdWx0KSxwPXQuSW5wdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlLG49ZS52YWx1ZSxyPWUucmVhZG9ubHksbz1lLmNsYXNzTmFtZSxpPWUuZXJyb3IsYT1lLnBsYWNlaG9sZGVyLGw9ZS5tYXhMZW5ndGgsdT1lLmRpc2FibGVkLGM9ZS5tb2JpbGVEaXNhYmxlZCxkPWUucmVmRnVuY3Rpb24scD1lLm9uQ2hhbmdlLGY9ZS5vbkZvY3VzLG09ZS5vbkJsdXIsaD1lLm9uS2V5VXAsZz1lLm9uS2V5UHJlc3MsYj1lLnRvdWNoZWQ7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3JlZjpkLHR5cGU6dCxjbGFzc05hbWU6XygiaW5wdXQiLCJ0eXBlLSIrdCxvLHsibW9iaWxlLWRpc2FibGVkIjpjLGRpc2FibGVkOnUsZXJyb3I6aSx0b3VjaGVkOmIscmVhZG9ubHk6cn0pLHZhbHVlOm4scGxhY2Vob2xkZXI6YSxtYXhMZW5ndGg6bCxkaXNhYmxlZDp1LHJlYWRPbmx5OnIsb25DaGFuZ2U6cCxvbkZvY3VzOmYsb25CbHVyOm0sb25LZXlVcDpoLG9uS2V5UHJlc3M6Z30pfTtwLnByb3BUeXBlcz17dHlwZTphLmRlZmF1bHQuc3RyaW5nLHZhbHVlOmEuZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXI6YS5kZWZhdWx0LnN0cmluZyxtYXhMZW5ndGg6YS5kZWZhdWx0LnN0cmluZyxtb2JpbGVEaXNhYmxlZDphLmRlZmF1bHQuYm9vbCxkaXNhYmxlZDphLmRlZmF1bHQuYm9vbCxyZWFkb25seTphLmRlZmF1bHQuYm9vbCxjbGFzc05hbWU6YS5kZWZhdWx0LnN0cmluZyxlcnJvcjphLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlOmEuZGVmYXVsdC5mdW5jLG9uRm9jdXM6YS5kZWZhdWx0LmZ1bmMsb25CbHVyOmEuZGVmYXVsdC5mdW5jLG9uS2V5VXA6YS5kZWZhdWx0LmZ1bmMsb25LZXlQcmVzczphLmRlZmF1bHQuZnVuYyxyZWZGdW5jdGlvbjphLmRlZmF1bHQuZnVuYyx0b3VjaGVkOmEuZGVmYXVsdC5ib29sfSxwLmRlZmF1bHRQcm9wcz17dHlwZToidGV4dCIsdmFsdWU6IiIscGxhY2Vob2xkZXI6IiIsbWF4TGVuZ3RoOiIyNTYiLG1vYmlsZURpc2FibGVkOiExLGRpc2FibGVkOiExLHJlYWRvbmx5OiExLGNsYXNzTmFtZToiIixlcnJvcjoiIix0b3VjaGVkOiExLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvbkZvY3VzOmZ1bmN0aW9uKCl7fSxvbkJsdXI6ZnVuY3Rpb24oKXt9LG9uS2V5VXA6ZnVuY3Rpb24oKXt9LG9uS2V5UHJlc3M6ZnVuY3Rpb24oKXt9LHJlZkZ1bmN0aW9uOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIklucHV0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9pbnB1dC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5wdXQuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5wdXQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2lucHV0OiJpbnB1dF9faW5wdXRfX18zREM4aSIsZXJyb3I6ImlucHV0X19lcnJvcl9fXzNadkxFIix0b3VjaGVkOiJpbnB1dF9fdG91Y2hlZF9fXzFKcFE0IixkaXNhYmxlZDoiaW5wdXRfX2Rpc2FibGVkX19fMnlTckUiLCJ0eXBlLW51bWJlciI6ImlucHV0X190eXBlLW51bWJlcl9fX3ZCUC1fIiwibW9iaWxlLWRpc2FibGVkIjoiaW5wdXRfX21vYmlsZS1kaXNhYmxlZF9fXzJUdnF5In19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2lucHV0QmlnU3dpdGNoZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0QmlnU3dpdGNoZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0QmlnU3dpdGNoZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2lucHV0QmlnU3dpdGNoZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dEJpZ1N3aXRjaGVyPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx3PXIoRCksTT1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2lucHV0QmlnU3dpdGNoZXIuc2NzcyIpLGs9cihNKSxJPXtJbnB1dEJpZ1N3aXRjaGVyOntkaXNwbGF5TmFtZToiSW5wdXRCaWdTd2l0Y2hlciJ9fSxQPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0QmlnU3dpdGNoZXIvaW5wdXRCaWdTd2l0Y2hlci5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxOPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0QmlnU3dpdGNoZXIvaW5wdXRCaWdTd2l0Y2hlci5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxIPXcuZGVmYXVsdC5iaW5kKGsuZGVmYXVsdCksRj10LklucHV0QmlnU3dpdGNoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQKE4odCxlKSxlKX19KCJJbnB1dEJpZ1N3aXRjaGVyIikoKG89KDAseC5kZWZhdWx0KSgpKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubW9iaWxlRGlzYWJsZWQsbj1lLm9uQ2hhbmdlRXZlbnRJbmZvLHI9ZS50cmFja2luZyxvPWUub25DaGFuZ2Uscz1lLmRpc2FibGVkLGk9ZS5vbkZvY3VzLGE9ZS5vbkJsdXIsbD1lLmNoaWxkcmVuLHU9ZS52YWx1ZSxjPUgoeyJzd2l0Y2hlci13cmFwcGVyIjohMCwibW9iaWxlLWRpc2FibGVkIjp0LGRpc2FibGVkOnN9KSxkPUgoe3NsaWRlcjohMCwidHVybmVkLW9uIjohIXV9KSxfPWZ1bmN0aW9uKGUpe28oZS50YXJnZXQuY2hlY2tlZCksbiYmci50cmFja0V2ZW50KG4pfTtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxhYmVsIix7Y2xhc3NOYW1lOkgoImlucHV0LWJpZy1zd2l0Y2hlciIpLHRhYkluZGV4OiIxIn0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpjfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkgoIm9uIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkNvbW1vbi5vbiIsZGVmYXVsdE1lc3NhZ2U6Ik9OIn0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkgoIm9mZiIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb21tb24ub2ZmIixkZWZhdWx0TWVzc2FnZToiT0ZGIn0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6SCgiaW5wdXQiKSx0eXBlOiJjaGVja2JveCIsZGlzYWJsZWQ6cyxvbkZvY3VzOmksb25DaGFuZ2U6XyxvbkJsdXI6YX0pLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZH0pKSxsJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpIKCJjaGlsZHJlbi1jb250YWluZXIiKX0sbCkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2NoaWxkcmVuOlIuZGVmYXVsdC5ub2RlLHZhbHVlOlIuZGVmYXVsdC5ib29sLG1vYmlsZURpc2FibGVkOlIuZGVmYXVsdC5ib29sLGRpc2FibGVkOlIuZGVmYXVsdC5ib29sLG9uQ2hhbmdlOlIuZGVmYXVsdC5mdW5jLG9uRm9jdXM6Ui5kZWZhdWx0LmZ1bmMsb25CbHVyOlIuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlRXZlbnRJbmZvOlIuZGVmYXVsdC5vYmplY3QsdHJhY2tpbmc6Ui5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OlIuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTpSLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjoiIix2YWx1ZTohMSxtb2JpbGVEaXNhYmxlZDohMSxkaXNhYmxlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSxvbkNoYW5nZUV2ZW50SW5mbzp7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJJbnB1dEJpZ1N3aXRjaGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2lucHV0QmlnU3dpdGNoZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0QmlnU3dpdGNoZXIvaW5wdXRCaWdTd2l0Y2hlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0QmlnU3dpdGNoZXIvaW5wdXRCaWdTd2l0Y2hlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LWJpZy1zd2l0Y2hlciI6ImlucHV0QmlnU3dpdGNoZXJfX2lucHV0LWJpZy1zd2l0Y2hlcl9fX1VUVlp4Iiwic3dpdGNoZXItd3JhcHBlciI6ImlucHV0QmlnU3dpdGNoZXJfX3N3aXRjaGVyLXdyYXBwZXJfX18yLWR1ciIsZGlzYWJsZWQ6ImlucHV0QmlnU3dpdGNoZXJfX2Rpc2FibGVkX19fMWVxYXciLG9uOiJpbnB1dEJpZ1N3aXRjaGVyX19vbl9fX2NWTU5hIixvZmY6ImlucHV0QmlnU3dpdGNoZXJfX29mZl9fXzJhWEdpIiwibW9iaWxlLWRpc2FibGVkIjoiaW5wdXRCaWdTd2l0Y2hlcl9fbW9iaWxlLWRpc2FibGVkX19fMk92SzAiLGlucHV0OiJpbnB1dEJpZ1N3aXRjaGVyX19pbnB1dF9fXzJzbHdKIixzbGlkZXI6ImlucHV0QmlnU3dpdGNoZXJfX3NsaWRlcl9fXzFkUXNHIiwidHVybmVkLW9uIjoiaW5wdXRCaWdTd2l0Y2hlcl9fdHVybmVkLW9uX19fM01UbGoiLCJjaGlsZHJlbi1jb250YWluZXIiOiJpbnB1dEJpZ1N3aXRjaGVyX19jaGlsZHJlbi1jb250YWluZXJfX18xQWVuUSJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9jaGVja0ljb24vY2hlY2tJY29uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2hlY2tJY29uPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9jaGVja0ljb24vY2hlY2tJY29uLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5DaGVja0ljb249ZnVuY3Rpb24odCl7dmFyIG49dC5kaXNhYmxlZCxyPXQuY2VudGVyZWQsbz10LmNoZWNrZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoInNxdWFyZSIse2NlbnRlcmVkOnIsY2hlY2tlZDpvLGRpc2FibGVkOm59KX0sZS5jcmVhdGVFbGVtZW50KCJzdmciLHtjbGFzc05hbWU6YygiaWNvbiIpLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjkiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCA4IDcifSxlLmNyZWF0ZUVsZW1lbnQoInBvbHlnb24iLHtmaWxsOm4/IiM5OTkiOiIjZmZmIixmaWxsUnVsZToiZXZlbm9kZCIscG9pbnRzOiIwIDMuMTExIDMgNi4yMjIgOCAxLjAzNyA3IDAgMyA0LjE0OCAxIDIuMDc0In0pKSl9O2QucHJvcFR5cGVzPXtkaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxjZW50ZXJlZDpzLmRlZmF1bHQuYm9vbCxjaGVja2VkOnMuZGVmYXVsdC5ib29sfSxkLmRlZmF1bHRQcm9wcz17ZGlzYWJsZWQ6ITEsY2VudGVyZWQ6cy5kZWZhdWx0LmJvb2wsY2hlY2tlZDpzLmRlZmF1bHQuYm9vbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkNoZWNrSWNvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9jaGVja0ljb24vY2hlY2tJY29uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2NoZWNrSWNvbi9jaGVja0ljb24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9jaGVja0ljb24vY2hlY2tJY29uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtzcXVhcmU6ImNoZWNrSWNvbl9fc3F1YXJlX19fMjJUd2siLGNlbnRlcmVkOiJjaGVja0ljb25fX2NlbnRlcmVkX19fM1lfOEQiLGNoZWNrZWQ6ImNoZWNrSWNvbl9fY2hlY2tlZF9fXzFzR09QIixpY29uOiJjaGVja0ljb25fX2ljb25fX19nWUZkRSIsZGlzYWJsZWQ6ImNoZWNrSWNvbl9fZGlzYWJsZWRfX18xbl9VUyJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9jaGVja0ljb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q2hlY2tib3gvY2hlY2tJY29uL2NoZWNrSWNvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2hlY2tJY29uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5DaGVja0ljb259fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2lucHV0Q2hlY2tib3guanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0Q2hlY2tib3giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0Q2hlY2tib3h9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2lucHV0Q2hlY2tib3guanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dENoZWNrYm94PXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbnB1dENoZWNrYm94LnNjc3MiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2NoZWNrSWNvbi9pbmRleC5qcyIpLGQ9YS5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxfPXQuSW5wdXRDaGVja2JveD1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuLHI9dC52YWx1ZSxvPXQuZGlzYWJsZWQscz10Lm9uQ2hhbmdlLGk9dC5vbkZvY3VzLGE9dC5vbkJsdXI7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtjbGFzc05hbWU6ZCgiaW5wdXQtY2hlY2tib3giKSxvbkZvY3VzOmksb25CbHVyOmEsdGFiSW5kZXg6IjEifSxlLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToiY2hlY2tib3giLGNsYXNzTmFtZTpkKCJpbnB1dCIpLGNoZWNrZWQ6cixkaXNhYmxlZDpvLG9uQ2hhbmdlOnN9KSxlLmNyZWF0ZUVsZW1lbnQoYy5DaGVja0ljb24se2Rpc2FibGVkOm8sY2VudGVyZWQ6IW4sY2hlY2tlZDpyfSksbiYmZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmQoImNoaWxkcmVuLWNvbnRhaW5lciIse2Rpc2FibGVkOm99KX0sbikpfTtfLnByb3BUeXBlcz17Y2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsdmFsdWU6cy5kZWZhdWx0LmJvb2wsZGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6cy5kZWZhdWx0LmZ1bmMsb25Gb2N1czpzLmRlZmF1bHQuZnVuYyxvbkJsdXI6cy5kZWZhdWx0LmZ1bmN9LF8uZGVmYXVsdFByb3BzPXtjaGlsZHJlbjoiIix2YWx1ZTohMSxkaXNhYmxlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIklucHV0Q2hlY2tib3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q2hlY2tib3gvaW5wdXRDaGVja2JveC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbnB1dENoZWNrYm94LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q2hlY2tib3gvaW5wdXRDaGVja2JveC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LWNoZWNrYm94IjoiaW5wdXRDaGVja2JveF9faW5wdXQtY2hlY2tib3hfX18yUGtMeCIsc3F1YXJlOiJpbnB1dENoZWNrYm94X19zcXVhcmVfX19nTmhPcyIsY2hlY2tlZDoiaW5wdXRDaGVja2JveF9fY2hlY2tlZF9fXzFCUF9RIixkaXNhYmxlZDoiaW5wdXRDaGVja2JveF9fZGlzYWJsZWRfX18zODYxYSIsaW5wdXQ6ImlucHV0Q2hlY2tib3hfX2lucHV0X19fMV8wQ3MiLCJjaGlsZHJlbi1jb250YWluZXIiOiJpbnB1dENoZWNrYm94X19jaGlsZHJlbi1jb250YWluZXJfX18xbG8zdCJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbC9pbnB1dENvbmRpdGlvbmFsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnB1dENvbmRpdGlvbmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnB1dENvbmRpdGlvbmFsfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbC9pbnB1dENvbmRpdGlvbmFsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRDb25kaXRpb25hbD12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxSPXIoUyksaj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsL2lucHV0Q29uZGl0aW9uYWwuc2NzcyIpLHg9cihqKSxMPXtJbnB1dENvbmRpdGlvbmFsOntkaXNwbGF5TmFtZToiSW5wdXRDb25kaXRpb25hbCJ9fSxEPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5wdXRDb25kaXRpb25hbC5qc3giLGNvbXBvbmVudHM6TCxsb2NhbHM6W2VdLGltcG9ydHM6W3YuZGVmYXVsdF19KSx3PSgwLEUuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5wdXRDb25kaXRpb25hbC5qc3giLGNvbXBvbmVudHM6TCxsb2NhbHM6W10saW1wb3J0czpbdi5kZWZhdWx0LGcuZGVmYXVsdF19KSxNPVIuZGVmYXVsdC5iaW5kKHguZGVmYXVsdCksaz10LklucHV0Q29uZGl0aW9uYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBEKHcodCxlKSxlKX19KCJJbnB1dENvbmRpdGlvbmFsIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17b3BlbmVkOiExfSxyLm9uQ2xpY2tDb25kaXRpb25CbG9jaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja0NvbmRpdGlvbkJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2xpY2tDb25kaXRpb25JdGVtPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrQ29uZGl0aW9uSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkNoYW5nZUlucHV0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYW5nZUlucHV0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQmx1cklucHV0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkJsdXJJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkNsaWNrQ2xlYXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tDbGVhcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXRDb25kaXRpb25zQmxvY2tSZWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldENvbmRpdGlvbnNCbG9ja1JlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDbGlja091dHNpZGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRDb25kaXRpb25zQmxvY2tSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldENvbmRpdGlvbnNCbG9ja1JlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NsZWFyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrQ2xlYXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQmx1cklucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkJsdXJJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NvbmRpdGlvbkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrQ29uZGl0aW9uQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25CbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfX0se2tleToiX19vbkNsaWNrQ29uZGl0aW9uQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmRpc2FibGVkfHx0aGlzLnNldFN0YXRlKHtvcGVuZWQ6IXRoaXMuc3RhdGUub3BlbmVkfSl9fSx7a2V5OiJfX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmFsdWUhPT10aGlzLnByb3BzLnZhbHVlLmNvbmRpdGlvbiYmKHRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25DaGFuZ2Uoe3ZhbHVlOnRoaXMucHJvcHMudmFsdWUudmFsdWUsY29uZGl0aW9uOmUudmFsdWV9KSl9fSx7a2V5OiJfX29uQ2hhbmdlSW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5vbkNoYW5nZSh7dmFsdWU6ZS50YXJnZXQudmFsdWUsY29uZGl0aW9uOnRoaXMucHJvcHMudmFsdWUuY29uZGl0aW9ufSl9fSx7a2V5OiJfX29uQmx1cklucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMub25CbHVyKHt2YWx1ZTplLnRhcmdldC52YWx1ZSxjb25kaXRpb246dGhpcy5wcm9wcy52YWx1ZS5jb25kaXRpb259KX19LHtrZXk6Il9fb25DbGlja0NsZWFyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5vbkNoYW5nZSh7dmFsdWU6IiIsY29uZGl0aW9uOnRoaXMucHJvcHMudmFsdWUuY29uZGl0aW9ufSl9fSx7a2V5OiJfX3NldENvbmRpdGlvbnNCbG9ja1JlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbmRpdGlvbnNCbG9jaz1lfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jb25kaXRpb25zQmxvY2suY29udGFpbnMoZS50YXJnZXQpfHx0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQudmFsdWUscj10LmNvbmRpdGlvbnMsbz10LnBsYWNlaG9sZGVyLHM9dC5kaXNhYmxlZCxpPXQubW9iaWxlRGlzYWJsZWQsYT10LmVycm9yLGw9dC50b3VjaGVkLHU9dC5tYXhMZW5ndGgsYz10Lm9uRm9jdXMsZD10Lm9uS2V5VXAsXz10Lm9uS2V5UHJlc3MscD10LmNvbmRpdGlvbnNCbG9ja0NsYXNzTmFtZSxmPXQuaW5wdXRDbGFzc05hbWU7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TSgiaW5wdXQtY29uZGl0aW9uYWwiLHtvcGVuZWQ6dGhpcy5zdGF0ZS5vcGVuZWQsZGlzYWJsZWQ6cywibW9iaWxlLWRpc2FibGVkIjppfSl9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3R5cGU6InRleHQiLGNsYXNzTmFtZTpNKCJpbnB1dCIsZix7ZXJyb3I6YSx0b3VjaGVkOmx9KSx2YWx1ZTpuLnZhbHVlLHBsYWNlaG9sZGVyOm8sZGlzYWJsZWQ6cyxtYXhMZW5ndGg6dSxvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlSW5wdXQsb25Gb2N1czpjLG9uQmx1cjp0aGlzLm9uQmx1cklucHV0LG9uS2V5VXA6ZCxvbktleVByZXNzOl99KSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk0oImNvbmRpdGlvbnMtYmxvY2siLHApLHJlZjp0aGlzLnNldENvbmRpdGlvbnNCbG9ja1JlZn0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpNKCJjb25kaXRpb25zLXNlbGVjdG9yIiksb25DbGljazp0aGlzLm9uQ2xpY2tDb25kaXRpb25CbG9ja30sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6TSgiY29uZGl0aW9uLXNlbGVjdGVkIil9LHIubGVuZ3RoJiZuLmNvbmRpdGlvbiYmci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT1uLmNvbmRpdGlvbn0pWzBdLnNob3J0TGFiZWwpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIix7Y2xhc3NOYW1lOk0oImFycm93Iix7cm90YXRlZDp0aGlzLnN0YXRlLm9wZW5lZH0pfSkpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TSgiY29uZGl0aW9ucy1saXN0Iix7dmlzaWJsZTp0aGlzLnN0YXRlLm9wZW5lZH0pfSxyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LnZhbHVlLGNsYXNzTmFtZTpNKCJjb25kaXRpb24iLHthY3RpdmU6dC52YWx1ZT09PW4uY29uZGl0aW9uLGRpc2FibGVkOnQuZGlzYWJsZWR9KSxvbkNsaWNrOmZ1bmN0aW9uKCl7IXQuZGlzYWJsZWQmJmUub25DbGlja0NvbmRpdGlvbkl0ZW0odCl9fSx0LmxhYmVsKX0pKSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImkiLHtjbGFzc05hbWU6TSgiY2xlYXItaWNvbiIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrQ2xlYXJ9KSl9fV0pLHR9KHkuQ29tcG9uZW50KSxvLnByb3BUeXBlcz17dmFsdWU6Ty5kZWZhdWx0LnNoYXBlKHt2YWx1ZTpPLmRlZmF1bHQuc3RyaW5nLGNvbmRpdGlvbjpPLmRlZmF1bHQuc3RyaW5nfSksY29uZGl0aW9uczpPLmRlZmF1bHQuYXJyYXlPZihPLmRlZmF1bHQuc2hhcGUoe3ZhbHVlOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxsYWJlbDpPLmRlZmF1bHQub25lT2ZUeXBlKFtPLmRlZmF1bHQuc3RyaW5nLE8uZGVmYXVsdC5vYmplY3RdKS5pc1JlcXVpcmVkfSkpLGNvbmRpdGlvbnNCbG9ja0NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLGlucHV0Q2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXI6Ty5kZWZhdWx0LnN0cmluZyxkaXNhYmxlZDpPLmRlZmF1bHQuYm9vbCxtb2JpbGVEaXNhYmxlZDpPLmRlZmF1bHQuYm9vbCx0b3VjaGVkOk8uZGVmYXVsdC5ib29sLGVycm9yOk8uZGVmYXVsdC5zdHJpbmcsbWF4TGVuZ3RoOk8uZGVmYXVsdC5udW1iZXIsb25DaGFuZ2U6Ty5kZWZhdWx0LmZ1bmMsb25Gb2N1czpPLmRlZmF1bHQuZnVuYyxvbkJsdXI6Ty5kZWZhdWx0LmZ1bmMsb25LZXlVcDpPLmRlZmF1bHQuZnVuYyxvbktleVByZXNzOk8uZGVmYXVsdC5mdW5jfSxvLmRlZmF1bHRQcm9wcz17dmFsdWU6e30sY29uZGl0aW9uczpbXSxwbGFjZWhvbGRlcjoiIixjb25kaXRpb25zQmxvY2tDbGFzc05hbWU6IiIsaW5wdXRDbGFzc05hbWU6IiIsZGlzYWJsZWQ6ITEsbW9iaWxlRGlzYWJsZWQ6ITEsdG91Y2hlZDohMSxlcnJvcjoiIixtYXhMZW5ndGg6bnVsbCxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSxvbktleVVwOmZ1bmN0aW9uKCl7fSxvbktleVByZXNzOmZ1bmN0aW9uKCl7fX0scykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihrLCJJbnB1dENvbmRpdGlvbmFsIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsL2lucHV0Q29uZGl0aW9uYWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5wdXRDb25kaXRpb25hbC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWwvaW5wdXRDb25kaXRpb25hbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LWNvbmRpdGlvbmFsIjoiaW5wdXRDb25kaXRpb25hbF9faW5wdXQtY29uZGl0aW9uYWxfX18zbDhCYiIsZGlzYWJsZWQ6ImlucHV0Q29uZGl0aW9uYWxfX2Rpc2FibGVkX19fM3hCdnUiLCJjb25kaXRpb25zLWJsb2NrIjoiaW5wdXRDb25kaXRpb25hbF9fY29uZGl0aW9ucy1ibG9ja19fXzJIZ193IixpbnB1dDoiaW5wdXRDb25kaXRpb25hbF9faW5wdXRfX18xWlJRRSIsImNsZWFyLWljb24iOiJpbnB1dENvbmRpdGlvbmFsX19jbGVhci1pY29uX19fMWczejIiLCJtb2JpbGUtZGlzYWJsZWQiOiJpbnB1dENvbmRpdGlvbmFsX19tb2JpbGUtZGlzYWJsZWRfX18yanVZVyIsZXJyb3I6ImlucHV0Q29uZGl0aW9uYWxfX2Vycm9yX19fMnZleHoiLHRvdWNoZWQ6ImlucHV0Q29uZGl0aW9uYWxfX3RvdWNoZWRfX18zZ1BYNSIsImNvbmRpdGlvbnMtc2VsZWN0b3IiOiJpbnB1dENvbmRpdGlvbmFsX19jb25kaXRpb25zLXNlbGVjdG9yX19fM1dvcE4iLCJjb25kaXRpb24tc2VsZWN0ZWQiOiJpbnB1dENvbmRpdGlvbmFsX19jb25kaXRpb24tc2VsZWN0ZWRfX18yOUtwQSIsYXJyb3c6ImlucHV0Q29uZGl0aW9uYWxfX2Fycm93X19fMTFjc18iLHJvdGF0ZWQ6ImlucHV0Q29uZGl0aW9uYWxfX3JvdGF0ZWRfX18xWHhfcCIsImNvbmRpdGlvbnMtbGlzdCI6ImlucHV0Q29uZGl0aW9uYWxfX2NvbmRpdGlvbnMtbGlzdF9fXzNRV3cyIix2aXNpYmxlOiJpbnB1dENvbmRpdGlvbmFsX192aXNpYmxlX19fYjVpMDUiLGNvbmRpdGlvbjoiaW5wdXRDb25kaXRpb25hbF9fY29uZGl0aW9uX19fM0JwQ2giLGFjdGl2ZToiaW5wdXRDb25kaXRpb25hbF9fYWN0aXZlX19fM1pVZ0QifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWxUYWdzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsVGFncy9pbnB1dENvbmRpdGlvbmFsVGFncy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRDb25kaXRpb25hbFRhZ3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0Q29uZGl0aW9uYWxUYWdzfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbFRhZ3MvaW5wdXRDb25kaXRpb25hbFRhZ3MuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dENvbmRpdGlvbmFsVGFncz12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRhZ3NTZWFyY2gvaW5kZXguanMiKSxEPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWxUYWdzL2lucHV0Q29uZGl0aW9uYWxUYWdzLnNjc3MiKSx3PXIoRCksTT17SW5wdXRDb25kaXRpb25hbFRhZ3M6e2Rpc3BsYXlOYW1lOiJJbnB1dENvbmRpdGlvbmFsVGFncyJ9fSxrPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWxUYWdzL2lucHV0Q29uZGl0aW9uYWxUYWdzLmpzeCIsY29tcG9uZW50czpNLGxvY2FsczpbZV0saW1wb3J0czpbVC5kZWZhdWx0XX0pLEk9KDAseS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbFRhZ3MvaW5wdXRDb25kaXRpb25hbFRhZ3MuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W1QuZGVmYXVsdCxiLmRlZmF1bHRdfSksUD1qLmRlZmF1bHQuYmluZCh3LmRlZmF1bHQpLE49KDAseC5kZWZpbmVNZXNzYWdlcykoe3RhZ3NIaW50OntpZDoiSW5wdXRDb25kaXRpb25hbFRhZ3MudGFnc0hpbnQiLGRlZmF1bHRNZXNzYWdlOiJQbGVhc2UgZW50ZXIgMSBvciBtb3JlIGNoYXJhY3RlcnMifX0pLEg9dC5JbnB1dENvbmRpdGlvbmFsVGFncz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsoSSh0LGUpLGUpfX0oIklucHV0Q29uZGl0aW9uYWxUYWdzIikoKDAseC5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtvcGVuZWQ6ITF9LHIub25DbGlja0NvbmRpdGlvbkJsb2NrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrQ29uZGl0aW9uQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbGlja0NvbmRpdGlvbkl0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2hhbmdlVGFncz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFuZ2VUYWdzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldENvbmRpdGlvbnNCbG9ja1JlZj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2V0Q29uZGl0aW9uc0Jsb2NrUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmZvcm1hdFRhZ3M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2Zvcm1hdFRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucGFyc2VUYWdzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19wYXJzZVRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19wYXJzZVRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BhcnNlVGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZm9ybWF0VGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZm9ybWF0VGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldENvbmRpdGlvbnNCbG9ja1JlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0Q29uZGl0aW9uc0Jsb2NrUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZVRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhbmdlVGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NvbmRpdGlvbkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrQ29uZGl0aW9uQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25CbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfX0se2tleToiX19vbkNsaWNrQ29uZGl0aW9uQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25CbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NvbmRpdGlvbkJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pfX0se2tleToiX19vbkNsaWNrQ29uZGl0aW9uSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0NvbmRpdGlvbkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmFsdWUhPT10aGlzLnByb3BzLnZhbHVlLmNvbmRpdGlvbiYmKHRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25DaGFuZ2Uoe3ZhbHVlOnRoaXMucHJvcHMudmFsdWUudmFsdWUsY29uZGl0aW9uOmUudmFsdWV9KSl9fSx7a2V5OiJfX29uQ2hhbmdlVGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VUYWdzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZVRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5vbkNoYW5nZSh7dmFsdWU6dGhpcy5wYXJzZVRhZ3MoZSksY29uZGl0aW9uOnRoaXMucHJvcHMudmFsdWUuY29uZGl0aW9ufSl9fSx7a2V5OiJfX3NldENvbmRpdGlvbnNCbG9ja1JlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0Q29uZGl0aW9uc0Jsb2NrUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRDb25kaXRpb25zQmxvY2tSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jb25kaXRpb25zQmxvY2s9ZX19LHtrZXk6Il9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbmRpdGlvbnNCbG9jay5jb250YWlucyhlLnRhcmdldCl8fHRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pfX0se2tleToiX19mb3JtYXRUYWdzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRUYWdzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRUYWdzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dmFsdWU6ZSxsYWJlbDplfX0pOltdfX0se2tleToiX19wYXJzZVRhZ3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BhcnNlVGFnc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcGFyc2VUYWdzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLmpvaW4oIiwiKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuaW50bCxyPXQudmFsdWUsbz10LmNvbmRpdGlvbnMscz10LnVybCxpPXQucGxhY2Vob2xkZXIsYT10LmlucHV0UHJvcHMsbD1yLnZhbHVlP3RoaXMuZm9ybWF0VGFncyhyLnZhbHVlLnNwbGl0KCIsIikpOltdO3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoImlucHV0LWNvbmRpdGlvbmFsLXRhZ3MiLHtvcGVuZWQ6dGhpcy5zdGF0ZS5vcGVuZWR9KX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5JbnB1dFRhZ3NTZWFyY2gse3BsYWNlaG9sZGVyOmksZm9jdXNQbGFjZWhvbGRlcjpuLmZvcm1hdE1lc3NhZ2UoTi50YWdzSGludCksbWluTGVuZ3RoOjEsYXN5bmM6ITAsdXJpOnMsbWFrZU9wdGlvbnM6dGhpcy5mb3JtYXRUYWdzLGNyZWF0YWJsZTohMCxzaG93TmV3TGFiZWw6ITAsbXVsdGk6ITAscmVtb3ZlU2VsZWN0ZWQ6ITAsdmFsdWU6bC5sZW5ndGgmJmxbMF0udmFsdWU/bDpbXSxvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlVGFncyxpbnB1dFByb3BzOmF9KSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoImNvbmRpdGlvbnMtYmxvY2siKSxyZWY6dGhpcy5zZXRDb25kaXRpb25zQmxvY2tSZWZ9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6UCgiY29uZGl0aW9ucy1zZWxlY3RvciIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrQ29uZGl0aW9uQmxvY2t9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoImNvbmRpdGlvbi1zZWxlY3RlZCIpfSxvLmxlbmd0aCYmci5jb25kaXRpb24mJm8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09ci5jb25kaXRpb259KVswXS5zaG9ydExhYmVsKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTpQKCJhcnJvdyIse3JvdGF0ZWQ6dGhpcy5zdGF0ZS5vcGVuZWR9KX0pKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoImNvbmRpdGlvbnMtbGlzdCIse3Zpc2libGU6dGhpcy5zdGF0ZS5vcGVuZWR9KX0sbyYmby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dC52YWx1ZSxjbGFzc05hbWU6UCgiY29uZGl0aW9uIix7YWN0aXZlOnQudmFsdWU9PT1yLmNvbmRpdGlvbixkaXNhYmxlZDp0LmRpc2FibGVkfSksb25DbGljazpmdW5jdGlvbigpeyF0LmRpc2FibGVkJiZlLm9uQ2xpY2tDb25kaXRpb25JdGVtKHQpfX0sdC5sYWJlbCl9KSkpKX19XSksdH0odi5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOnguaW50bFNoYXBlLmlzUmVxdWlyZWQsdmFsdWU6Uy5kZWZhdWx0Lm9iamVjdCxjb25kaXRpb25zOlMuZGVmYXVsdC5hcnJheU9mKFMuZGVmYXVsdC5zaGFwZSh7dmFsdWU6Uy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGxhYmVsOlMuZGVmYXVsdC5vbmVPZlR5cGUoW1MuZGVmYXVsdC5zdHJpbmcsUy5kZWZhdWx0Lm9iamVjdF0pLmlzUmVxdWlyZWR9KSksaW5wdXRQcm9wczpTLmRlZmF1bHQub2JqZWN0LHBsYWNlaG9sZGVyOlMuZGVmYXVsdC5zdHJpbmcsdXJsOlMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkNoYW5nZTpTLmRlZmF1bHQuZnVuYyxvbkZvY3VzOlMuZGVmYXVsdC5mdW5jLG9uQmx1cjpTLmRlZmF1bHQuZnVuY30scy5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9LGNvbmRpdGlvbnM6W10saW5wdXRQcm9wczp7fSxwbGFjZWhvbGRlcjoiIixvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fX0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJJbnB1dENvbmRpdGlvbmFsVGFncyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDb25kaXRpb25hbFRhZ3MvaW5wdXRDb25kaXRpb25hbFRhZ3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWxUYWdzL2lucHV0Q29uZGl0aW9uYWxUYWdzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE4sIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsVGFncy9pbnB1dENvbmRpdGlvbmFsVGFncy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q29uZGl0aW9uYWxUYWdzL2lucHV0Q29uZGl0aW9uYWxUYWdzLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5wdXQtY29uZGl0aW9uYWwtdGFncyI6ImlucHV0Q29uZGl0aW9uYWxUYWdzX19pbnB1dC1jb25kaXRpb25hbC10YWdzX19fMV9UTGYiLGRpc2FibGVkOiJpbnB1dENvbmRpdGlvbmFsVGFnc19fZGlzYWJsZWRfX190QzJLayIsImNvbmRpdGlvbnMtYmxvY2siOiJpbnB1dENvbmRpdGlvbmFsVGFnc19fY29uZGl0aW9ucy1ibG9ja19fXzNHSXd4IixpbnB1dDoiaW5wdXRDb25kaXRpb25hbFRhZ3NfX2lucHV0X19fMkN3MmQiLCJjbGVhci1pY29uIjoiaW5wdXRDb25kaXRpb25hbFRhZ3NfX2NsZWFyLWljb25fX18ydExGQyIsZXJyb3I6ImlucHV0Q29uZGl0aW9uYWxUYWdzX19lcnJvcl9fXzFrb0NEIix0b3VjaGVkOiJpbnB1dENvbmRpdGlvbmFsVGFnc19fdG91Y2hlZF9fXzlWYmxwIiwiY29uZGl0aW9ucy1zZWxlY3RvciI6ImlucHV0Q29uZGl0aW9uYWxUYWdzX19jb25kaXRpb25zLXNlbGVjdG9yX19fM3haQjgiLCJjb25kaXRpb24tc2VsZWN0ZWQiOiJpbnB1dENvbmRpdGlvbmFsVGFnc19fY29uZGl0aW9uLXNlbGVjdGVkX19fM1dEeHEiLGFycm93OiJpbnB1dENvbmRpdGlvbmFsVGFnc19fYXJyb3dfX18ydGhCSiIscm90YXRlZDoiaW5wdXRDb25kaXRpb25hbFRhZ3NfX3JvdGF0ZWRfX18yRXpQdCIsImNvbmRpdGlvbnMtbGlzdCI6ImlucHV0Q29uZGl0aW9uYWxUYWdzX19jb25kaXRpb25zLWxpc3RfX18zU2N1SCIsdmlzaWJsZToiaW5wdXRDb25kaXRpb25hbFRhZ3NfX3Zpc2libGVfX19pVEZRTiIsY29uZGl0aW9uOiJpbnB1dENvbmRpdGlvbmFsVGFnc19fY29uZGl0aW9uX19fM2hLWkkiLGFjdGl2ZToiaW5wdXRDb25kaXRpb25hbFRhZ3NfX2FjdGl2ZV9fXzJuZF9KIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2lucHV0RHJvcGRvd24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0RHJvcGRvd24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0RHJvcGRvd259fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2lucHV0RHJvcGRvd24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dERyb3Bkb3duPXZvaWQgMDt2YXIgbyxzLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5wdXREcm9wZG93bi5zY3NzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93bi9pbnB1dERyb3Bkb3duT3B0aW9uL2lucHV0RHJvcGRvd25PcHRpb24uanN4IiksTT17SW5wdXREcm9wZG93bjp7ZGlzcGxheU5hbWU6IklucHV0RHJvcGRvd24ifX0saz0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2lucHV0RHJvcGRvd24uanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksST0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2lucHV0RHJvcGRvd24uanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksUD14LmRlZmF1bHQuYmluZChELmRlZmF1bHQpLE49dC5JbnB1dERyb3Bkb3duPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gayhJKHQsZSksZSl9fSgiSW5wdXREcm9wZG93biIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e29wZW5lZDohMX0sci5vbkNsaWNrU2VsZWN0QmxvY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXRSZWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRPcHRpb25DaGFuZ2VIYW5kbGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRPcHRpb25DaGFuZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzR3JvdXBPcHRpb25TZWxlY3RlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNHcm91cE9wdGlvblNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUdyb3VwQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVHcm91cENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVBbGxDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQWxsQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVBbGxDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQWxsQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUdyb3VwQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVHcm91cENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNHcm91cE9wdGlvblNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0dyb3VwT3B0aW9uU2VsZWN0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0T3B0aW9uQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0T3B0aW9uQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9fSx7a2V5OiJfX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLmRpc2FibGVkfHwodGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5zdGF0ZS5vcGVuZWQ/dGhpcy5wcm9wcy5vbkJsdXIoKTp0aGlzLnByb3BzLm9uRm9jdXMoKSl9fSx7a2V5OiJfX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGU9ZX19LHtrZXk6Il9fZ2V0T3B0aW9uQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD9udWxsOmUuZ3JvdXBJZCYmIXRoaXMucHJvcHMuaW5kZXBlbmRlbnRHcm91cFNlbGVjdGlvbj90aGlzLmhhbmRsZUdyb3VwQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLmNvbnRhaW5zKGUudGFyZ2V0KXx8KHRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25CbHVyKCkpfX0se2tleToiZGlzcGxheWVkVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubXVsdGlwbGUsbj1lLnZhbHVlLHI9ZS5vcHRpb25zLG89dm9pZCAwO3JldHVybiB0P3IuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLmluZGV4T2YoZS52YWx1ZSk+LTF9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGFiZWx9KS5qb2luKCIsICIpOihyLmZvckVhY2goZnVuY3Rpb24oZSl7ZS52YWx1ZT09PW4mJihvPWUubGFiZWwpfSksbyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5tdWx0aXBsZSxyPXQudmFsdWUsbz10Lm9uQ2hhbmdlO24/byhyLmluZGV4T2YoZSk+LTE/ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSk6W10uY29uY2F0KCgwLGEuZGVmYXVsdCkociksW2VdKSk6KG8oZSksdGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pKX19LHtrZXk6Il9faXNHcm91cE9wdGlvblNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ3JvdXBSZWY9PT1lfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT10LnByb3BzLnZhbHVlLmluZGV4T2YoZSl9KX19LHtrZXk6Il9faGFuZGxlR3JvdXBDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ3JvdXBSZWY9PT1lfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSk7dGhpcy5pc0dyb3VwT3B0aW9uU2VsZWN0ZWQoZSk/dGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnZhbHVlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW4uaW5kZXhPZihlKX0pKTp0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudmFsdWUuY29uY2F0KG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5wcm9wcy52YWx1ZS5pbmRleE9mKGUpfSkpKX19LHtrZXk6Il9faGFuZGxlQWxsQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnZhbHVlLmxlbmd0aCE9PXRoaXMucHJvcHMub3B0aW9ucy5sZW5ndGg/dGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkpOnRoaXMucHJvcHMub25DaGFuZ2UoW10pfX0se2tleToicmVuZGVyT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXZvaWQgMDtyZXR1cm4gbj1lLnByb3BzLm11bHRpcGxlP2UucHJvcHMudmFsdWUuaW5kZXhPZih0LnZhbHVlKT4tMTp0LnZhbHVlPT09ZS5wcm9wcy52YWx1ZSwhZS5wcm9wcy5pbmRlcGVuZGVudEdyb3VwU2VsZWN0aW9uJiZ0Lmdyb3VwSWQmJihuPWUuaXNHcm91cE9wdGlvblNlbGVjdGVkKHQuZ3JvdXBJZCkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuRHJvcGRvd25PcHRpb24se2tleTp0LnZhbHVlLHZhbHVlOnQudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZCxzZWxlY3RlZDpuLGxhYmVsOnQubGFiZWwsbXVsdGlwbGU6ZS5wcm9wcy5tdWx0aXBsZSxzdWJPcHRpb246ISF0Lmdyb3VwUmVmLG9uQ2hhbmdlOmUuZ2V0T3B0aW9uQ2hhbmdlSGFuZGxlcih0KX0pfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZXJyb3Isbj1lLnRvdWNoZWQscj1lLmRpc2FibGVkLG89ZS5tb2JpbGVEaXNhYmxlZCxzPWUubXVsdGlwbGUsaT1lLnNlbGVjdEFsbDtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLnNldFJlZixjbGFzc05hbWU6UCgiZHJvcGRvd24iLHtvcGVuZWQ6dGhpcy5zdGF0ZS5vcGVuZWR9KX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpQKCJzZWxlY3QtYmxvY2siLHtkaXNhYmxlZDpyLGVycm9yOnQsdG91Y2hlZDpuLCJtb2JpbGUtZGlzYWJsZWQiOm99KSxvbkNsaWNrOnRoaXMub25DbGlja1NlbGVjdEJsb2NrfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpQKCJ2YWx1ZSIpfSx0aGlzLmRpc3BsYXllZFZhbHVlKCkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoImFycm93Iil9KSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpQKCJzZWxlY3QtbGlzdCIpfSxzJiZpJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoInNlbGVjdC1hbGwtYmxvY2siKSxvbkNsaWNrOnRoaXMuaGFuZGxlQWxsQ2xpY2t9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoInNlbGVjdC1hbGwiKX0sIkFsbCIpKSx0aGlzLnJlbmRlck9wdGlvbnMoKSkpfX1dKSx0fShULkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3ZhbHVlOlIuZGVmYXVsdC5vbmVPZlR5cGUoW1IuZGVmYXVsdC5zdHJpbmcsUi5kZWZhdWx0LmFycmF5LFIuZGVmYXVsdC5ib29sXSksb3B0aW9uczpSLmRlZmF1bHQuYXJyYXksbXVsdGlwbGU6Ui5kZWZhdWx0LmJvb2wsc2VsZWN0QWxsOlIuZGVmYXVsdC5ib29sLGRpc2FibGVkOlIuZGVmYXVsdC5ib29sLGVycm9yOlIuZGVmYXVsdC5zdHJpbmcsdG91Y2hlZDpSLmRlZmF1bHQuYm9vbCxvbkNoYW5nZTpSLmRlZmF1bHQuZnVuYyxvbkZvY3VzOlIuZGVmYXVsdC5mdW5jLG9uQmx1cjpSLmRlZmF1bHQuZnVuYyxtb2JpbGVEaXNhYmxlZDpSLmRlZmF1bHQuYm9vbCxpbmRlcGVuZGVudEdyb3VwU2VsZWN0aW9uOlIuZGVmYXVsdC5ib29sfSxvLmRlZmF1bHRQcm9wcz17dmFsdWU6IiIsb3B0aW9uczpbXSxtdWx0aXBsZTohMSxzZWxlY3RBbGw6ITEsZGlzYWJsZWQ6ITEsZXJyb3I6IiIsdG91Y2hlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSxtb2JpbGVEaXNhYmxlZDohMSxpbmRlcGVuZGVudEdyb3VwU2VsZWN0aW9uOiExfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE4sIklucHV0RHJvcGRvd24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5wdXREcm9wZG93bi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93bi9pbnB1dERyb3Bkb3duLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93bi9pbnB1dERyb3Bkb3duLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtkcm9wZG93bjoiaW5wdXREcm9wZG93bl9fZHJvcGRvd25fX18xeko1ciIsb3BlbmVkOiJpbnB1dERyb3Bkb3duX19vcGVuZWRfX18yVWJUeiIsYXJyb3c6ImlucHV0RHJvcGRvd25fX2Fycm93X19fMmVZNlMiLCJzZWxlY3QtYmxvY2siOiJpbnB1dERyb3Bkb3duX19zZWxlY3QtYmxvY2tfX18yQ1FmLSIsInNlbGVjdC1saXN0IjoiaW5wdXREcm9wZG93bl9fc2VsZWN0LWxpc3RfX18xSjlRUCIsZXJyb3I6ImlucHV0RHJvcGRvd25fX2Vycm9yX19fMTR5amUiLHRvdWNoZWQ6ImlucHV0RHJvcGRvd25fX3RvdWNoZWRfX18yNDJkbyIsZGlzYWJsZWQ6ImlucHV0RHJvcGRvd25fX2Rpc2FibGVkX19fYmRpS00iLHZhbHVlOiJpbnB1dERyb3Bkb3duX192YWx1ZV9fXzJnQjJzIiwic2VsZWN0LWFsbC1ibG9jayI6ImlucHV0RHJvcGRvd25fX3NlbGVjdC1hbGwtYmxvY2tfX18ycGhZMyIsInNlbGVjdC1hbGwiOiJpbnB1dERyb3Bkb3duX19zZWxlY3QtYWxsX19fM3RKN20iLCJzZWxlY3QtaXRlbSI6ImlucHV0RHJvcGRvd25fX3NlbGVjdC1pdGVtX19fMThxRVYiLCJtb2JpbGUtZGlzYWJsZWQiOiJpbnB1dERyb3Bkb3duX19tb2JpbGUtZGlzYWJsZWRfX18xanAzTyJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93bi9pbnB1dERyb3Bkb3duT3B0aW9uL2lucHV0RHJvcGRvd25PcHRpb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bk9wdGlvbj12b2lkIDA7dmFyIG89bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbmRleC5qcyIpLHM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGw9cihhKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5wdXREcm9wZG93bk9wdGlvbi9pbnB1dERyb3Bkb3duT3B0aW9uLnNjc3MiKSxjPXIodSksZD1sLmRlZmF1bHQuYmluZChjLmRlZmF1bHQpLF89dC5Ecm9wZG93bk9wdGlvbj1mdW5jdGlvbih0KXt2YXIgbj10Lm11bHRpcGxlLHI9dC5sYWJlbCxzPXQuZGlzYWJsZWQsaT10LnNlbGVjdGVkLGE9dC5zdWJPcHRpb24sbD10Lm9uQ2hhbmdlLHU9dC52YWx1ZSxjPWZ1bmN0aW9uKCl7bCYmbCh1KX07cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmQoImRyb3Bkb3duLW9wdGlvbiIse3NlbGVjdGVkOiFuJiZpLGRpc2FibGVkOnMsInN1Yi1vcHRpb24iOmF9KX0sbj9lLmNyZWF0ZUVsZW1lbnQoby5JbnB1dENoZWNrYm94LHt2YWx1ZTppLGRpc2FibGVkOnMsb25DaGFuZ2U6Y30sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmQoIm9wdGlvbi1sYWJlbCIpfSxyKSk6ZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgic2luZ2xlLW9wdGlvbiIpLG9uQ2xpY2s6Y30scikpfTtfLnByb3BUeXBlcz17dmFsdWU6aS5kZWZhdWx0Lm9uZU9mVHlwZShbaS5kZWZhdWx0LnN0cmluZyxpLmRlZmF1bHQuYm9vbF0pLG11bHRpcGxlOmkuZGVmYXVsdC5ib29sLGxhYmVsOmkuZGVmYXVsdC5ub2RlLGRpc2FibGVkOmkuZGVmYXVsdC5ib29sLHN1Yk9wdGlvbjppLmRlZmF1bHQuYm9vbCxzZWxlY3RlZDppLmRlZmF1bHQuYm9vbCxvbkNoYW5nZTppLmRlZmF1bHQuZnVuY30sXy5kZWZhdWx0UHJvcHM9e3ZhbHVlOiIiLG11bHRpcGxlOiExLGxhYmVsOiIiLGRpc2FibGVkOiExLHN1Yk9wdGlvbjohMSxzZWxlY3RlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJEcm9wZG93bk9wdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93bi9pbnB1dERyb3Bkb3duT3B0aW9uL2lucHV0RHJvcGRvd25PcHRpb24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5wdXREcm9wZG93bk9wdGlvbi9pbnB1dERyb3Bkb3duT3B0aW9uLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5wdXREcm9wZG93bk9wdGlvbi9pbnB1dERyb3Bkb3duT3B0aW9uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZHJvcGRvd24tb3B0aW9uIjoiaW5wdXREcm9wZG93bk9wdGlvbl9fZHJvcGRvd24tb3B0aW9uX19fM1N6azMiLHNlbGVjdGVkOiJpbnB1dERyb3Bkb3duT3B0aW9uX19zZWxlY3RlZF9fXzJZcDFpIixkaXNhYmxlZDoiaW5wdXREcm9wZG93bk9wdGlvbl9fZGlzYWJsZWRfX18zMjZSYSIsInN1Yi1vcHRpb24iOiJpbnB1dERyb3Bkb3duT3B0aW9uX19zdWItb3B0aW9uX19fM09nckQiLCJvcHRpb24tbGFiZWwiOiJpbnB1dERyb3Bkb3duT3B0aW9uX19vcHRpb24tbGFiZWxfX18zZElKViIsInNpbmdsZS1vcHRpb24iOiJpbnB1dERyb3Bkb3duT3B0aW9uX19zaW5nbGUtb3B0aW9uX19fTkR3YmIifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd25Tb3J0aW5nL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXREcm9wZG93blNvcnRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0RHJvcGRvd25Tb3J0aW5nfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93blNvcnRpbmcvaW5wdXREcm9wZG93blNvcnRpbmcuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dERyb3Bkb3duU29ydGluZz12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vc3JjL2NvbW1vbi9pbWcvYXJyb3ctZG93bi1pbmxpbmUuc3ZnIiksRD1yKEwpLHc9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93blNvcnRpbmcvaW5wdXREcm9wZG93blNvcnRpbmcuc2NzcyIpLE09cih3KSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd25Tb3J0aW5nL2lucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uL2lucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uLmpzeCIpLEk9e0lucHV0RHJvcGRvd25Tb3J0aW5nOntkaXNwbGF5TmFtZToiSW5wdXREcm9wZG93blNvcnRpbmcifX0sUD0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZy5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W2VdLGltcG9ydHM6W3YuZGVmYXVsdF19KSxOPSgwLEUuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd25Tb3J0aW5nL2lucHV0RHJvcGRvd25Tb3J0aW5nLmpzeCIsY29tcG9uZW50czpJLGxvY2FsczpbXSxpbXBvcnRzOlt2LmRlZmF1bHQsZy5kZWZhdWx0XX0pLEg9eC5kZWZhdWx0LmJpbmQoTS5kZWZhdWx0KSxGPXQuSW5wdXREcm9wZG93blNvcnRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQKE4odCxlKSxlKX19KCJJbnB1dERyb3Bkb3duU29ydGluZyIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGw9MDtsPHM7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e29wZW5lZDohMX0sci5vbkNsaWNrU2VsZWN0QmxvY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXRSZWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDbGlja091dHNpZGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9fSx7a2V5OiJfX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5kaXNhYmxlZCxyPXQub25Gb2N1cyxvPXQub25CbHVyLHM9dGhpcy5zdGF0ZS5vcGVuZWQ7bnx8KHRoaXMuc2V0U3RhdGUoe29wZW5lZDohc30pLGUuc3RvcFByb3BhZ2F0aW9uKCkscz9vKCk6cigpKX19LHtrZXk6Il9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubm9kZT1lfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLmNvbnRhaW5zKGUudGFyZ2V0KXx8KHRoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25CbHVyKCkpfX0se2tleToiZGlzcGxheWVkVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUudmFsdWUsbj1lLm9wdGlvbnMscj0iIjtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudmFsdWU9PT10JiYocj1lLmxhYmVsKX0pLCgwLFIuZGVmYXVsdCkocil9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKGUpLHRoaXMuc2V0U3RhdGUoe29wZW5lZDohdGhpcy5zdGF0ZS5vcGVuZWR9KX19LHtrZXk6InJlbmRlck9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10Lm9wdGlvbnMscj10LnZhbHVlO3JldHVybiBuLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LnZhbHVlPT09cjtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Ecm9wZG93blNvcnRpbmdPcHRpb24se2tleTp0LnZhbHVlLHZhbHVlOnQudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZCxzZWxlY3RlZDpuLGxhYmVsOnQubGFiZWwsc3ViT3B0aW9uOiEhdC5ncm91cFJlZixvbkNoYW5nZTohdC5kaXNhYmxlZCYmZS5oYW5kbGVDaGFuZ2V8fG51bGx9KX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmVycm9yLG49ZS50b3VjaGVkLHI9ZS5kaXNhYmxlZCxvPWUubW9iaWxlRGlzYWJsZWQscz1lLnNvcnRpbmdNb2RlLGk9dGhpcy5zdGF0ZS5vcGVuZWQ7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6dGhpcy5zZXRSZWYsY2xhc3NOYW1lOkgoImRyb3Bkb3duIix7b3BlbmVkOml9KX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJzZWxlY3QtYmxvY2siLHtkaXNhYmxlZDpyLGVycm9yOnQsdG91Y2hlZDpuLCJtb2JpbGUtZGlzYWJsZWQiOm99KSxvbkNsaWNrOnRoaXMub25DbGlja1NlbGVjdEJsb2NrfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpIKCJ2YWx1ZSIpfSx0aGlzLmRpc3BsYXllZFZhbHVlKCkpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOkgoImFycm93Iix7YXNjOnN9KX0sKDAsUi5kZWZhdWx0KShELmRlZmF1bHQpKSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJzZWxlY3QtbGlzdCIpfSx0aGlzLnJlbmRlck9wdGlvbnMoKSkpfX1dKSx0fSh5LkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3dpZHRoOk8uZGVmYXVsdC5zdHJpbmcsdmFsdWU6Ty5kZWZhdWx0Lm9uZU9mVHlwZShbTy5kZWZhdWx0LnN0cmluZyxPLmRlZmF1bHQuYXJyYXldKSxvcHRpb25zOk8uZGVmYXVsdC5hcnJheSxzb3J0aW5nTW9kZTpPLmRlZmF1bHQuYm9vbCxkaXNhYmxlZDpPLmRlZmF1bHQuYm9vbCxlcnJvcjpPLmRlZmF1bHQuc3RyaW5nLHRvdWNoZWQ6Ty5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6Ty5kZWZhdWx0LmZ1bmMsb25Gb2N1czpPLmRlZmF1bHQuZnVuYyxvbkJsdXI6Ty5kZWZhdWx0LmZ1bmMsbW9iaWxlRGlzYWJsZWQ6Ty5kZWZhdWx0LmJvb2x9LG8uZGVmYXVsdFByb3BzPXt3aWR0aDoiMTAwJSIsdmFsdWU6IiIsb3B0aW9uczpbXSxzb3J0aW5nTW9kZTohMSxkaXNhYmxlZDohMSxlcnJvcjoiIix0b3VjaGVkOiExLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvbkZvY3VzOmZ1bmN0aW9uKCl7fSxvbkJsdXI6ZnVuY3Rpb24oKXt9LG1vYmlsZURpc2FibGVkOiExfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsIklucHV0RHJvcGRvd25Tb3J0aW5nIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93blNvcnRpbmcvaW5wdXREcm9wZG93blNvcnRpbmcuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ZHJvcGRvd246ImlucHV0RHJvcGRvd25Tb3J0aW5nX19kcm9wZG93bl9fXzI4WHp2IixvcGVuZWQ6ImlucHV0RHJvcGRvd25Tb3J0aW5nX19vcGVuZWRfX18ydWYxayIsInNlbGVjdC1saXN0IjoiaW5wdXREcm9wZG93blNvcnRpbmdfX3NlbGVjdC1saXN0X19fM05QaDQiLCJzZWxlY3QtYmxvY2siOiJpbnB1dERyb3Bkb3duU29ydGluZ19fc2VsZWN0LWJsb2NrX19fM0xKcy0iLGVycm9yOiJpbnB1dERyb3Bkb3duU29ydGluZ19fZXJyb3JfX18yV2xpbSIsdG91Y2hlZDoiaW5wdXREcm9wZG93blNvcnRpbmdfX3RvdWNoZWRfX18zS01DNSIsZGlzYWJsZWQ6ImlucHV0RHJvcGRvd25Tb3J0aW5nX19kaXNhYmxlZF9fXzNkRklQIix2YWx1ZToiaW5wdXREcm9wZG93blNvcnRpbmdfX3ZhbHVlX19fSG1MSzMiLGFycm93OiJpbnB1dERyb3Bkb3duU29ydGluZ19fYXJyb3dfX18yNmlmWCIsYXNjOiJpbnB1dERyb3Bkb3duU29ydGluZ19fYXNjX19fMlZJYmsiLCJzZWxlY3QtYWxsLWJsb2NrIjoiaW5wdXREcm9wZG93blNvcnRpbmdfX3NlbGVjdC1hbGwtYmxvY2tfX19zUVROUCIsInNlbGVjdC1hbGwiOiJpbnB1dERyb3Bkb3duU29ydGluZ19fc2VsZWN0LWFsbF9fXzFILW5NIiwic2VsZWN0LWl0ZW0iOiJpbnB1dERyb3Bkb3duU29ydGluZ19fc2VsZWN0LWl0ZW1fX18yYmVyZiIsIm1vYmlsZS1kaXNhYmxlZCI6ImlucHV0RHJvcGRvd25Tb3J0aW5nX19tb2JpbGUtZGlzYWJsZWRfX19yOTlPdyJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93blNvcnRpbmcvaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb24vaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duU29ydGluZ09wdGlvbj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXREcm9wZG93blNvcnRpbmcvaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb24vaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb24uc2NzcyIpLGQ9cihjKSxfPXUuZGVmYXVsdC5iaW5kKGQuZGVmYXVsdCkscD10LkRyb3Bkb3duU29ydGluZ09wdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsLG49ZS5kaXNhYmxlZCxyPWUuc2VsZWN0ZWQsbz1lLnN1Yk9wdGlvbixpPWUub25DaGFuZ2UsYT1lLnZhbHVlLGw9ZnVuY3Rpb24oKXtpJiZpKGEpfTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJkcm9wZG93bi1vcHRpb24iLHtzZWxlY3RlZDpyLGRpc2FibGVkOm4sInN1Yi1vcHRpb24iOm99KX0scy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJzaW5nbGUtb3B0aW9uIiksb25DbGljazpsfSx0KSl9O3AucHJvcFR5cGVzPXt2YWx1ZTphLmRlZmF1bHQuc3RyaW5nLGxhYmVsOmEuZGVmYXVsdC5ub2RlLGRpc2FibGVkOmEuZGVmYXVsdC5ib29sLHN1Yk9wdGlvbjphLmRlZmF1bHQuYm9vbCxzZWxlY3RlZDphLmRlZmF1bHQuYm9vbCxvbkNoYW5nZTphLmRlZmF1bHQuZnVuY30scC5kZWZhdWx0UHJvcHM9e3ZhbHVlOiIiLGxhYmVsOiIiLGRpc2FibGVkOiExLHN1Yk9wdGlvbjohMSxzZWxlY3RlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJEcm9wZG93blNvcnRpbmdPcHRpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd25Tb3J0aW5nL2lucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uL2lucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZ09wdGlvbi9pbnB1dERyb3Bkb3duU29ydGluZ09wdGlvbi5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duU29ydGluZy9pbnB1dERyb3Bkb3duU29ydGluZ09wdGlvbi9pbnB1dERyb3Bkb3duU29ydGluZ09wdGlvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImRyb3Bkb3duLW9wdGlvbiI6ImlucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uX19kcm9wZG93bi1vcHRpb25fX18yYW5MeCIsc2VsZWN0ZWQ6ImlucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uX19zZWxlY3RlZF9fXzJkUzNKIixkaXNhYmxlZDoiaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb25fX2Rpc2FibGVkX19fM3hwcFkiLCJzdWItb3B0aW9uIjoiaW5wdXREcm9wZG93blNvcnRpbmdPcHRpb25fX3N1Yi1vcHRpb25fX18yVVBGSSIsIm9wdGlvbi1sYWJlbCI6ImlucHV0RHJvcGRvd25Tb3J0aW5nT3B0aW9uX19vcHRpb24tbGFiZWxfX18zOVNpLSIsInNpbmdsZS1vcHRpb24iOiJpbnB1dERyb3Bkb3duU29ydGluZ09wdGlvbl9fc2luZ2xlLW9wdGlvbl9fXzIwcC02In19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEZpbHRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXJDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0RmlsdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnB1dEZpbHRlckNvbnRhaW5lcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRGaWx0ZXI9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL3NyYy9jb21tb24vaW1nL2FkZC1maWx0ZXItaW5saW5lLnN2ZyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbW1vbi9pbWcvY3Jvc3MtaWNvbi1pbmxpbmUuc3ZnIiksTT1yKHcpLGs9bigiLi9zcmMvY29tbW9uL2ltZy9zZWFyY2gtaWNvbi1pbmxpbmUuc3ZnIiksST1yKGspLFA9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9lbnRpdGllc0dyb3VwL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEZpbHRlci9pbnB1dEZpbHRlclRvb2xiYXIvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyLnNjc3MiKSxGPXIoSCksQj17SW5wdXRGaWx0ZXI6e2Rpc3BsYXlOYW1lOiJJbnB1dEZpbHRlciJ9fSxVPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbZV0saW1wb3J0czpbdi5kZWZhdWx0XX0pLEc9KDAsRS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXIuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltdLGltcG9ydHM6W3YuZGVmYXVsdCxnLmRlZmF1bHRdfSksej14LmRlZmF1bHQuYmluZChGLmRlZmF1bHQpLFY9dC5JbnB1dEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoRyh0LGUpLGUpfX0oIklucHV0RmlsdGVyIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17b3BlbmVkOiExfSxyLmhhbmRsZUNoYW5nZUlucHV0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDbGlja0NsZWFyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDbGlja0NsZWFyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUFwcGx5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVBcHBseV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDYW5jZWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNhbmNlbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50b2dnbGVQb3B1cD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdG9nZ2xlUG9wdXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxwLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVQb3B1cF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlUG9wdXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNhbmNlbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2FuY2VsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVBcHBseV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQXBwbHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrQ2xlYXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrQ2xlYXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZUlucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlSW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMub25GaWx0ZXJTdHJpbmdDaGFuZ2UoZS50YXJnZXQudmFsdWUpfX0se2tleToiX19oYW5kbGVDbGlja0NsZWFyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMub25GaWx0ZXJTdHJpbmdDaGFuZ2UoIiIpfX0se2tleToiX19oYW5kbGVBcHBseV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25GaWx0ZXJBcHBseSgpfX0se2tleToiX19oYW5kbGVDYW5jZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KSx0aGlzLnByb3BzLm9uQ2FuY2VsKCl9fSx7a2V5OiJfX3RvZ2dsZVBvcHVwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3RhdGUoe29wZW5lZDohdGhpcy5zdGF0ZS5vcGVuZWR9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5lcnJvcixuPWUuYWN0aXZlLHI9ZS5kaXNhYmxlZCxvPWUuY2xhc3NOYW1lLHM9ZS5wbGFjZWhvbGRlcixpPWUubWF4TGVuZ3RoLGE9ZS5vbkZpbHRlckNoYW5nZSxsPWUub25GaWx0ZXJWYWxpZGF0ZSx1PWUub25GaWx0ZXJSZW1vdmUsYz1lLm9uRmlsdGVyQWRkLGQ9ZS5maWx0ZXJFcnJvcnMsXz1lLmZpbHRlckVudGl0aWVzLHA9ZS5vbkNsZWFyLGY9ZS52YWx1ZSxtPWUuZmlsdGVyQWN0aXZlO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh2LmRlZmF1bHQuRnJhZ21lbnQsbnVsbCx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImlucHV0LWZpbHRlciIse2Vycm9yOnQsYWN0aXZlOm4sZGlzYWJsZWQ6cnx8dGhpcy5zdGF0ZS5vcGVuZWR9KX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJpY29uIiwic2VhcmNoIil9LCgwLFIuZGVmYXVsdCkoSS5kZWZhdWx0KSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJpY29uIiwiYWRkLWZpbHRlciIse2luYWN0aXZlOiFtfSksb25DbGljazp0aGlzLnRvZ2dsZVBvcHVwfSwoMCxSLmRlZmF1bHQpKEQuZGVmYXVsdCkpLCEhZiYmdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJpY29uIiwiY3Jvc3MiKSxvbkNsaWNrOnRoaXMuaGFuZGxlQ2xpY2tDbGVhcn0sKDAsUi5kZWZhdWx0KShNLmRlZmF1bHQpKSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6eigiaW5wdXQiLG8pLHZhbHVlOmYsZGlzYWJsZWQ6cnx8dGhpcy5zdGF0ZS5vcGVuZWQscGxhY2Vob2xkZXI6cyxtYXhMZW5ndGg6aSxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZUlucHV0fSkpLHRoaXMuc3RhdGUub3BlbmVkJiZ2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImZpbHRlcnMtY29udGFpbmVyIil9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiZmlsdGVycyIpfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkVudGl0aWVzR3JvdXAse29uQ2hhbmdlOmEsb25WYWxpZGF0ZTpsLG9uUmVtb3ZlOnUsb25BZGQ6YyxlcnJvcnM6ZCxlbnRpdGllczpfLHN0YXRpY01vZGU6ITAsdmVydGljYWw6ITB9KSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5JbnB1dEZpbHRlclRvb2xiYXIse29uQXBwbHk6dGhpcy5oYW5kbGVBcHBseSxvbkNsZWFyOnAsb25DYW5jZWw6dGhpcy5oYW5kbGVDYW5jZWwsZW50aXRpZXM6X30pKSl9fV0pLHR9KHkuQ29tcG9uZW50KSxvLnByb3BUeXBlcz17dmFsdWU6Ty5kZWZhdWx0LnN0cmluZyxwbGFjZWhvbGRlcjpPLmRlZmF1bHQuc3RyaW5nLG1heExlbmd0aDpPLmRlZmF1bHQuc3RyaW5nLGNsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLGFjdGl2ZTpPLmRlZmF1bHQuYm9vbCxkaXNhYmxlZDpPLmRlZmF1bHQuYm9vbCxlcnJvcjpPLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlOk8uZGVmYXVsdC5mdW5jLGZpbHRlckVudGl0aWVzOk8uZGVmYXVsdC5hcnJheSxvbkFkZDpPLmRlZmF1bHQuZnVuYyxvblJlbW92ZTpPLmRlZmF1bHQuZnVuYyxvblZhbGlkYXRlOk8uZGVmYXVsdC5mdW5jLGZpbHRlckVycm9yczpPLmRlZmF1bHQub2JqZWN0LG9uQ2xlYXI6Ty5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJDaGFuZ2U6Ty5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJWYWxpZGF0ZTpPLmRlZmF1bHQuZnVuYyxvbkZpbHRlclJlbW92ZTpPLmRlZmF1bHQuZnVuYyxvbkZpbHRlckFkZDpPLmRlZmF1bHQuZnVuYyxvbkZpbHRlckFwcGx5Ok8uZGVmYXVsdC5mdW5jLG9uRmlsdGVyU3RyaW5nQ2hhbmdlOk8uZGVmYXVsdC5mdW5jLGZpbHRlckFjdGl2ZTpPLmRlZmF1bHQuYm9vbCxvbkNhbmNlbDpPLmRlZmF1bHQuZnVuY30sby5kZWZhdWx0UHJvcHM9e3ZhbHVlOiIiLHBsYWNlaG9sZGVyOiIiLG1heExlbmd0aDoiMjU2IixjbGFzc05hbWU6IiIsYWN0aXZlOiExLGRpc2FibGVkOiExLGVycm9yOiIiLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxmaWx0ZXJFbnRpdGllczpbXSxvbkFkZDpmdW5jdGlvbigpe30sb25SZW1vdmU6ZnVuY3Rpb24oKXt9LG9uVmFsaWRhdGU6ZnVuY3Rpb24oKXt9LGZpbHRlckVycm9yczp7fSxvbkNsZWFyOmZ1bmN0aW9uKCl7fSxvbkZpbHRlckNoYW5nZTpmdW5jdGlvbigpe30sb25GaWx0ZXJWYWxpZGF0ZTpmdW5jdGlvbigpe30sb25GaWx0ZXJSZW1vdmU6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyQWRkOmZ1bmN0aW9uKCl7fSxvbkZpbHRlckFwcGx5OmZ1bmN0aW9uKCl7fSxvbkZpbHRlclN0cmluZ0NoYW5nZTpmdW5jdGlvbigpe30sZmlsdGVyQWN0aXZlOiExLG9uQ2FuY2VsOmZ1bmN0aW9uKCl7fX0scykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJJbnB1dEZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpbnB1dC1maWx0ZXIiOiJpbnB1dEZpbHRlcl9faW5wdXQtZmlsdGVyX19fMWRkWlkiLGFjdGl2ZToiaW5wdXRGaWx0ZXJfX2FjdGl2ZV9fXzNHOVpmIixlcnJvcjoiaW5wdXRGaWx0ZXJfX2Vycm9yX19fZlFiT3ciLGRpc2FibGVkOiJpbnB1dEZpbHRlcl9fZGlzYWJsZWRfX18xUlpBVyIsaWNvbjoiaW5wdXRGaWx0ZXJfX2ljb25fX18yemN2ZSIsc2VhcmNoOiJpbnB1dEZpbHRlcl9fc2VhcmNoX19fM2JMZTEiLCJhZGQtZmlsdGVyIjoiaW5wdXRGaWx0ZXJfX2FkZC1maWx0ZXJfX18zclh3TyIsaW5hY3RpdmU6ImlucHV0RmlsdGVyX19pbmFjdGl2ZV9fX0RycGhuIixjcm9zczoiaW5wdXRGaWx0ZXJfX2Nyb3NzX19fM21kSzciLGlucHV0OiJpbnB1dEZpbHRlcl9faW5wdXRfX18zSFFDWCIsImZpbHRlcnMtY29udGFpbmVyIjoiaW5wdXRGaWx0ZXJfX2ZpbHRlcnMtY29udGFpbmVyX19fMmVVYkwiLGZpbHRlcnM6ImlucHV0RmlsdGVyX19maWx0ZXJzX19fMWF0WWUifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyQ29udGFpbmVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRGaWx0ZXJDb250YWluZXI9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnRhaW5lcnMvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbW1vbi91dGlscy9kZWJvdW5jZS5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXIuanN4IiksUD17SW5wdXRGaWx0ZXJDb250YWluZXI6e2Rpc3BsYXlOYW1lOiJJbnB1dEZpbHRlckNvbnRhaW5lciJ9fSxOPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyQ29udGFpbmVyLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbZV0saW1wb3J0czpbTy5kZWZhdWx0XX0pLEg9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXJDb250YWluZXIuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksRj1mdW5jdGlvbigpe3JldHVybnthY3Rpdml0aWVzOnt2YWx1ZTphcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiJ9fX0sQj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gZS5hY3Rpdml0aWVzP2UuYWN0aXZpdGllcy52YWx1ZToiIn0sVT10LklucHV0RmlsdGVyQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fSgiSW5wdXRGaWx0ZXJDb250YWluZXIiKSgocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXt2YWx1ZXM6e30scHJldlZhbHVlczp7fSxmaWx0ZXJTdHJpbmc6IiJ9LHIuZGVib3VuY2VkQ2hhbmdlSGFuZGxlcj0oMCxrLmRlYm91bmNlKShmdW5jdGlvbihlKXtyZXR1cm4gci5wcm9wcy5vbkNoYW5nZSgoMCx1LmRlZmF1bHQpKHt9LHIucHJvcHMuZmlsdGVyVmFsdWVzLEYoZSkpKX0sMWUzKSxyLmhhbmRsZUZpbHRlckNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlRmlsdGVyQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUZpbHRlckFwcGx5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVGaWx0ZXJBcHBseV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVGaWx0ZXJDbGVhcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlRmlsdGVyQ2xlYXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRmlsdGVyU3RyaW5nQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVGaWx0ZXJTdHJpbmdDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2FuY2VsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDYW5jZWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVDYW5jZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNhbmNlbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyU3RyaW5nQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJTdHJpbmdDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckNsZWFyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJDbGVhcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQXBwbHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckFwcGx5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe3ZhbHVlczplfSl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckFwcGx5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnN0YXRlLnZhbHVlcyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckNsZWFyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7dmFsdWVzOnt9fSl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlclN0cmluZ0NoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuc2V0U3RhdGUoe2ZpbHRlclN0cmluZzplfSxmdW5jdGlvbigpe3JldHVybiB0LmRlYm91bmNlZENoYW5nZUhhbmRsZXIoZSl9KX19LHtrZXk6Il9faGFuZGxlQ2FuY2VsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U3RhdGUoe3ZhbHVlczp0aGlzLnN0YXRlLnByZXZWYWx1ZXN9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuZW50aXRpZXNQcm92aWRlcixyPXQuZmlsdGVyVmFsdWVzO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LkZpbHRlckVudGl0aWVzQ29udGFpbmVyLHtlbnRpdGllczp0aGlzLnN0YXRlLnZhbHVlcyxlbnRpdGllc1Byb3ZpZGVyOm4sb25DaGFuZ2U6dGhpcy5oYW5kbGVGaWx0ZXJDaGFuZ2UscmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZmlsdGVyRXJyb3JzLG89dC5maWx0ZXJFbnRpdGllcyxzPXQub25GaWx0ZXJDaGFuZ2UsaT10Lm9uRmlsdGVyVmFsaWRhdGU7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuSW5wdXRGaWx0ZXIse2ZpbHRlckVycm9yczpuLGZpbHRlckVudGl0aWVzOm8sb25GaWx0ZXJDaGFuZ2U6cyxvbkZpbHRlckFwcGx5OmUuaGFuZGxlRmlsdGVyQXBwbHksb25GaWx0ZXJWYWxpZGF0ZTppLG9uQ2xlYXI6ZS5oYW5kbGVGaWx0ZXJDbGVhcixvbkNhbmNlbDplLmhhbmRsZUNhbmNlbCx2YWx1ZTplLnN0YXRlLmZpbHRlclN0cmluZyxvbkZpbHRlclN0cmluZ0NoYW5nZTplLmhhbmRsZUZpbHRlclN0cmluZ0NoYW5nZSxmaWx0ZXJBY3RpdmU6KDAsYS5kZWZhdWx0KShyKS5sZW5ndGg+MH0pfX0pfX1dLFt7a2V5OiJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsRC5kZWZhdWx0KShlLmZpbHRlclZhbHVlcyx0LnByZXZWYWx1ZXMpP251bGw6e3ZhbHVlczplLmZpbHRlclZhbHVlcyxwcmV2VmFsdWVzOmUuZmlsdGVyVmFsdWVzLGZpbHRlclN0cmluZzpCKGUuZmlsdGVyVmFsdWVzKX19fV0pLHR9KEMuQ29tcG9uZW50KSxvLnByb3BUeXBlcz17ZmlsdGVyVmFsdWVzOnguZGVmYXVsdC5vYmplY3RPZihNLmZpbHRlclZhbHVlU2hhcGUpLG9uQ2hhbmdlOnguZGVmYXVsdC5mdW5jLGVudGl0aWVzUHJvdmlkZXI6eC5kZWZhdWx0LmVsZW1lbnRUeXBlfSxvLmRlZmF1bHRQcm9wcz17ZmlsdGVyVmFsdWVzOnt9LG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxlbnRpdGllc1Byb3ZpZGVyOm51bGx9LHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiSW5wdXRGaWx0ZXJDb250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyQ29udGFpbmVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsInBhcnNlRmlsdGVyU3RyaW5nIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEZpbHRlci9pbnB1dEZpbHRlckNvbnRhaW5lci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJmb3JtYXRGaWx0ZXJTdHJpbmciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyQ29udGFpbmVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXJUb29sYmFyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEZpbHRlci9pbnB1dEZpbHRlclRvb2xiYXIvaW5wdXRGaWx0ZXJUb29sYmFyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnB1dEZpbHRlclRvb2xiYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0RmlsdGVyVG9vbGJhcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyVG9vbGJhci9pbnB1dEZpbHRlclRvb2xiYXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklucHV0RmlsdGVyVG9vbGJhcj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFQ9cih2KSxBPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9iaWdCdXR0b24vaW5kZXguanMiKSxDPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyVG9vbGJhci9pbnB1dEZpbHRlclRvb2xiYXIuc2NzcyIpLE89cihDKSxTPVQuZGVmYXVsdC5iaW5kKE8uZGVmYXVsdCksUj10LklucHV0RmlsdGVyVG9vbGJhcj0ocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHRoaXMsdCksKDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUub25BcHBseSxuPWUub25DbGVhcixyPWUub25DYW5jZWw7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6UygiaW5wdXQtZmlsdGVyLXRvb2xiYXIiKX0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpTKCJidXR0b24tY29udGFpbmVyIiwibGVmdCIpfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLkJpZ0J1dHRvbix7Y29sb3I6IndoaXRlLXR3byIsb25DbGljazpufSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpTKCJidXR0b24iLCJjbGVhci1hbGwtZmlsdGVycyIpfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJJbnB1dEZpbHRlclRvb2xiYXIuY2xlYXJBbGxmaWx0ZXJzIixkZWZhdWx0TWVzc2FnZToiQ2xlYXIgYWxsIGZpbHRlcnMifSkpKSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpTKCJidXR0b24tY29udGFpbmVyIiwibWlkZGxlIil9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuQmlnQnV0dG9uLHtjb2xvcjoid2hpdGUtdHdvIixvbkNsaWNrOnJ9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlMoImJ1dHRvbiIsImNhbmNlbCIpfSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb21tb24uY2FuY2VsIixkZWZhdWx0TWVzc2FnZToiQ2FuY2VsIn0pKSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6UygiYnV0dG9uLWNvbnRhaW5lciIsInJpZ2h0Iil9LGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuQmlnQnV0dG9uLHtjb2xvcjoidG9wYXoiLHJvdW5kZWRDb3JuZXJzOiEwLG9uQ2xpY2s6dH0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6UygiYnV0dG9uIiwiYXBwbHkiKX0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5wdXRGaWx0ZXJUb29sYmFyLmFwcGx5IixkZWZhdWx0TWVzc2FnZToiQXBwbHkifSkpKSkpfX1dKSx0fShoLlB1cmVDb21wb25lbnQpLG8ucHJvcFR5cGVzPXtvbkFwcGx5OkUuZGVmYXVsdC5mdW5jLG9uQ2FuY2VsOkUuZGVmYXVsdC5mdW5jLG9uQ2xlYXI6RS5kZWZhdWx0LmZ1bmN9LG8uZGVmYXVsdFByb3BzPXtvbkFwcGx5OmZ1bmN0aW9uKCl7fSxvbkNhbmNlbDpmdW5jdGlvbigpe30sb25DbGVhcjpmdW5jdGlvbigpe319LHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihSLCJJbnB1dEZpbHRlclRvb2xiYXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyVG9vbGJhci9pbnB1dEZpbHRlclRvb2xiYXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RmlsdGVyL2lucHV0RmlsdGVyVG9vbGJhci9pbnB1dEZpbHRlclRvb2xiYXIuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5wdXRGaWx0ZXJUb29sYmFyL2lucHV0RmlsdGVyVG9vbGJhci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LWZpbHRlci10b29sYmFyIjoiaW5wdXRGaWx0ZXJUb29sYmFyX19pbnB1dC1maWx0ZXItdG9vbGJhcl9fXzM5amV0IiwiYnV0dG9uLWNvbnRhaW5lciI6ImlucHV0RmlsdGVyVG9vbGJhcl9fYnV0dG9uLWNvbnRhaW5lcl9fXzJRWlRvIixsZWZ0OiJpbnB1dEZpbHRlclRvb2xiYXJfX2xlZnRfX18yV19wTiIsbWlkZGxlOiJpbnB1dEZpbHRlclRvb2xiYXJfX21pZGRsZV9fXzM0alQwIixyaWdodDoiaW5wdXRGaWx0ZXJUb29sYmFyX19yaWdodF9fX1VHTWhuIixidXR0b246ImlucHV0RmlsdGVyVG9vbGJhcl9fYnV0dG9uX19fMVVCT3EiLGNhbmNlbDoiaW5wdXRGaWx0ZXJUb29sYmFyX19jYW5jZWxfX18zY2pSayIsYXBwbHk6ImlucHV0RmlsdGVyVG9vbGJhcl9fYXBwbHlfX18zS3BiWCIsImNsZWFyLWFsbC1maWx0ZXJzIjoiaW5wdXRGaWx0ZXJUb29sYmFyX19jbGVhci1hbGwtZmlsdGVyc19fX3lwV3hJIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dE91dHNpZGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0T3V0c2lkZS9pbnB1dE91dHNpZGUuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0T3V0c2lkZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSW5wdXRPdXRzaWRlfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRPdXRzaWRlL2lucHV0T3V0c2lkZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklucHV0T3V0c2lkZT12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0T3V0c2lkZS9pbnB1dE91dHNpZGUuc2NzcyIpLEQ9cihMKSx3PXtJbnB1dE91dHNpZGU6e2Rpc3BsYXlOYW1lOiJJbnB1dE91dHNpZGUifX0sTT0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dE91dHNpZGUvaW5wdXRPdXRzaWRlLmpzeCIsY29tcG9uZW50czp3LGxvY2FsczpbZV0saW1wb3J0czpbdi5kZWZhdWx0XX0pLGs9KDAsRS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRPdXRzaWRlL2lucHV0T3V0c2lkZS5qc3giLGNvbXBvbmVudHM6dyxsb2NhbHM6W10saW1wb3J0czpbdi5kZWZhdWx0LGcuZGVmYXVsdF19KSxJPXguZGVmYXVsdC5iaW5kKEQuZGVmYXVsdCksUD10LklucHV0T3V0c2lkZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE0oayh0LGUpLGUpfX0oIklucHV0T3V0c2lkZSIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGw9MDtsPHM7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e3Bhc3N3b3JkVmlzaWJsZTohMX0sci5nZXRJbnB1dFR5cGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldElucHV0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zaG93UGFzc3dvcmQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Nob3dQYXNzd29yZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oaWRlUGFzc3dvcmQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hpZGVQYXNzd29yZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX2hpZGVQYXNzd29yZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGlkZVBhc3N3b3JkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zaG93UGFzc3dvcmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Nob3dQYXNzd29yZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SW5wdXRUeXBlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRJbnB1dFR5cGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldElucHV0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwYXNzd29yZCIhPT10aGlzLnByb3BzLnR5cGU/dGhpcy5wcm9wcy50eXBlOnRoaXMuc3RhdGUucGFzc3dvcmRWaXNpYmxlPyJ0ZXh0IjoicGFzc3dvcmQifX0se2tleToiX19zaG93UGFzc3dvcmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLnN0YXRlLnBhc3N3b3JkVmlzaWJsZSYmdGhpcy5zZXRTdGF0ZSh7cGFzc3dvcmRWaXNpYmxlOiEwfSl9fSx7a2V5OiJfX2hpZGVQYXNzd29yZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zdGF0ZS5wYXNzd29yZFZpc2libGUmJnRoaXMuc2V0U3RhdGUoe3Bhc3N3b3JkVmlzaWJsZTohMX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnR5cGUsbj1lLnZhbHVlLHI9ZS5yZWFkb25seSxvPWUuaWNvbixzPWUucGxhY2Vob2xkZXIsaT1lLm1heExlbmd0aCxhPWUuZGlzYWJsZWQsbD1lLnJlZkZ1bmN0aW9uLHU9ZS5vbkNoYW5nZSxjPWUub25Gb2N1cyxkPWUub25CbHVyLF89ZS5vbktleVVwLHA9ZS5lcnJvcixmPWUuYWN0aXZlLG09ZS50b3VjaGVkO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoImlucHV0LW91dHNpZGUiLCJ0eXBlLSIrdCx7ZGlzYWJsZWQ6YSxpbnZhbGlkOnAmJihmfHxtKX0pfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoImljb24iKX0sKDAsTy5kZWZhdWx0KShvKSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7cmVmOmwsY2xhc3NOYW1lOkkoImlucHV0IiksdHlwZTp0aGlzLmdldElucHV0VHlwZSgpLHZhbHVlOm4scGxhY2Vob2xkZXI6cyxtYXhMZW5ndGg6aSxkaXNhYmxlZDphLHJlYWRPbmx5OnIsb25DaGFuZ2U6dSxvbkZvY3VzOmMsb25CbHVyOmQsb25LZXlVcDpffSksInBhc3N3b3JkIj09PXQmJnYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SSgiZXllLWljb24iLHtvcGVuZWQ6dGhpcy5zdGF0ZS5wYXNzd29yZFZpc2libGV9KSxvbk1vdXNlRG93bjp0aGlzLnNob3dQYXNzd29yZCxvbk1vdXNlTGVhdmU6dGhpcy5oaWRlUGFzc3dvcmQsb25Nb3VzZVVwOnRoaXMuaGlkZVBhc3N3b3JkLG9uVG91Y2hTdGFydDp0aGlzLnNob3dQYXNzd29yZCxvblRvdWNoRW5kOnRoaXMuaGlkZVBhc3N3b3JkLG9uVG91Y2hDYW5jZWw6dGhpcy5oaWRlUGFzc3dvcmR9KSl9fV0pLHR9KHkuQ29tcG9uZW50KSxvLnByb3BUeXBlcz17dHlwZTpSLmRlZmF1bHQuc3RyaW5nLHZhbHVlOlIuZGVmYXVsdC5zdHJpbmcsaWNvbjpSLmRlZmF1bHQuc3RyaW5nLHBsYWNlaG9sZGVyOlIuZGVmYXVsdC5zdHJpbmcsbWF4TGVuZ3RoOlIuZGVmYXVsdC5zdHJpbmcsZGlzYWJsZWQ6Ui5kZWZhdWx0LmJvb2wscmVhZG9ubHk6Ui5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6Ui5kZWZhdWx0LmZ1bmMsb25Gb2N1czpSLmRlZmF1bHQuZnVuYyxvbkJsdXI6Ui5kZWZhdWx0LmZ1bmMsb25LZXlVcDpSLmRlZmF1bHQuZnVuYyxyZWZGdW5jdGlvbjpSLmRlZmF1bHQuZnVuYyxhY3RpdmU6Ui5kZWZhdWx0LmJvb2wsdG91Y2hlZDpSLmRlZmF1bHQuYm9vbCxlcnJvcjpSLmRlZmF1bHQuc3RyaW5nfSxvLmRlZmF1bHRQcm9wcz17dHlwZToidGV4dCIsdmFsdWU6IiIsaWNvbjoiIixwbGFjZWhvbGRlcjoiIixtYXhMZW5ndGg6IjI1NiIsZGlzYWJsZWQ6ITEscmVhZG9ubHk6ITEsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sb25LZXlVcDpmdW5jdGlvbigpe30scmVmRnVuY3Rpb246ZnVuY3Rpb24oKXt9LGFjdGl2ZTohMSx0b3VjaGVkOiExLGVycm9yOiIifSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsIklucHV0T3V0c2lkZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRPdXRzaWRlL2lucHV0T3V0c2lkZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihJLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRPdXRzaWRlL2lucHV0T3V0c2lkZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0T3V0c2lkZS9pbnB1dE91dHNpZGUuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpbnB1dC1vdXRzaWRlIjoiaW5wdXRPdXRzaWRlX19pbnB1dC1vdXRzaWRlX19fM0RCaXgiLGRpc2FibGVkOiJpbnB1dE91dHNpZGVfX2Rpc2FibGVkX19fMlZQMHgiLGlucHV0OiJpbnB1dE91dHNpZGVfX2lucHV0X19fMVNnOXAiLGludmFsaWQ6ImlucHV0T3V0c2lkZV9faW52YWxpZF9fX1ZsSmFyIiwidHlwZS1wYXNzd29yZCI6ImlucHV0T3V0c2lkZV9fdHlwZS1wYXNzd29yZF9fXzJzSVFHIiwiZXllLWljb24iOiJpbnB1dE91dHNpZGVfX2V5ZS1pY29uX19fd1pXT2EiLG9wZW5lZDoiaW5wdXRPdXRzaWRlX19vcGVuZWRfX18zampJQSIsInR5cGUtbnVtYmVyIjoiaW5wdXRPdXRzaWRlX190eXBlLW51bWJlcl9fXzJSOURxIixpY29uOiJpbnB1dE91dHNpZGVfX2ljb25fX18xaHZSUiJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRSYWRpby9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRSYWRpby9pbnB1dFJhZGlvLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnB1dFJhZGlvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnB1dFJhZGlvfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRSYWRpby9pbnB1dFJhZGlvLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRSYWRpbz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0UmFkaW8vaW5wdXRSYWRpby5zY3NzIiksdT1yKGwpLGM9YS5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxkPXQuSW5wdXRSYWRpbz1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuLHI9dC52YWx1ZSxvPXQub3duVmFsdWUscz10Lm5hbWUsaT10LmRpc2FibGVkLGE9dC5jaXJjbGVBdFRvcCxsPXQub25DaGFuZ2UsdT10Lm9uRm9jdXMsZD10Lm9uQmx1cixfPXQubW9iaWxlRGlzYWJsZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtjbGFzc05hbWU6YygiaW5wdXQtcmFkaW8iLHtkaXNhYmxlZDppLCJtb2JpbGUtZGlzYWJsZWQiOl99KSxvbkZvY3VzOnUsb25CbHVyOmQsdGFiSW5kZXg6IjEifSxlLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToicmFkaW8iLGNsYXNzTmFtZTpjKCJpbnB1dCIpLGRpc2FibGVkOmksb25DaGFuZ2U6bCx2YWx1ZTpvLGNoZWNrZWQ6cj09PW8sbmFtZTpzfSksZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmMoInRvZ2dsZXIiLHtjaGVja2VkOnI9PT1vLCJhdC10b3AiOmF9KX0pLG4mJmUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpjKCJjaGlsZHJlbi1jb250YWluZXIiKX0sbikpfTtkLnByb3BUeXBlcz17Y2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsdmFsdWU6cy5kZWZhdWx0Lm9uZU9mVHlwZShbcy5kZWZhdWx0LnN0cmluZyxzLmRlZmF1bHQubnVtYmVyXSksb3duVmFsdWU6cy5kZWZhdWx0Lm9uZU9mVHlwZShbcy5kZWZhdWx0LnN0cmluZyxzLmRlZmF1bHQubnVtYmVyXSksbmFtZTpzLmRlZmF1bHQuc3RyaW5nLGRpc2FibGVkOnMuZGVmYXVsdC5ib29sLG1vYmlsZURpc2FibGVkOnMuZGVmYXVsdC5ib29sLGNpcmNsZUF0VG9wOnMuZGVmYXVsdC5ib29sLG9uQ2hhbmdlOnMuZGVmYXVsdC5mdW5jLG9uRm9jdXM6cy5kZWZhdWx0LmZ1bmMsb25CbHVyOnMuZGVmYXVsdC5mdW5jfSxkLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46IiIsdmFsdWU6IiIsb3duVmFsdWU6IiIsbmFtZToiIixkaXNhYmxlZDohMSxtb2JpbGVEaXNhYmxlZDohMSxjaXJjbGVBdFRvcDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIklucHV0UmFkaW8iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0UmFkaW8vaW5wdXRSYWRpby5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRSYWRpby9pbnB1dFJhZGlvLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0UmFkaW8vaW5wdXRSYWRpby5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LXJhZGlvIjoiaW5wdXRSYWRpb19faW5wdXQtcmFkaW9fX18xQXl4OCIsZGlzYWJsZWQ6ImlucHV0UmFkaW9fX2Rpc2FibGVkX19fUEk2bkMiLHRvZ2dsZXI6ImlucHV0UmFkaW9fX3RvZ2dsZXJfX18xLWpHUyIsIm1vYmlsZS1kaXNhYmxlZCI6ImlucHV0UmFkaW9fX21vYmlsZS1kaXNhYmxlZF9fX0x2TVZyIixpbnB1dDoiaW5wdXRSYWRpb19faW5wdXRfX18yek43dSIsImF0LXRvcCI6ImlucHV0UmFkaW9fX2F0LXRvcF9fX0xQWThXIixjaGVja2VkOiJpbnB1dFJhZGlvX19jaGVja2VkX19fMTYzQUMiLCJjaGlsZHJlbi1jb250YWluZXIiOiJpbnB1dFJhZGlvX19jaGlsZHJlbi1jb250YWluZXJfX18zMmtHRiJ9fSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTZWFyY2gvaW1nL3NlYXJjaC1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBpZD0iaWNfc2VhcmNoLWEiIGQ9Ik0xMS40MzUxMDU4LDEwLjA2Mjg5MzEgTDEwLjcwNzgzMywxMC4wNjI4OTMxIEwxMC40NTYyNjA3LDkuODExMzIwNzUgQzExLjM1Mjc3Myw4Ljc3MzAxMzE1IDExLjg5MjUxLDcuNDIzNjcwNjcgMTEuODkyNTEsNS45NDYyNTUgQzExLjg5MjUxLDIuNjYyMDkyNjIgOS4yMzA0MTczOCwwIDUuOTQ2MjU1LDAgQzIuNjYyMDkyNjIsMCAwLDIuNjYyMDkyNjIgMCw1Ljk0NjI1NSBDMCw5LjIzMDQxNzM4IDIuNjYyMDkyNjIsMTEuODkyNTEgNS45NDYyNTUsMTEuODkyNTEgQzcuNDIzNjcwNjcsMTEuODkyNTEgOC43NzMwMTMxNSwxMS4zNTI3NzMgOS44MTEzMjA3NSwxMC40NjA4MzQ4IEwxMC4wNjI4OTMxLDEwLjcxMjQwNzEgTDEwLjA2Mjg5MzEsMTEuNDM1MTA1OCBMMTQuNjM2OTM1NCwxNiBMMTYsMTQuNjM2OTM1NCBMMTEuNDM1MTA1OCwxMC4wNjI4OTMxIEwxMS40MzUxMDU4LDEwLjA2Mjg5MzEgWiBNMS44Mjk2MTY5Miw1Ljk0NjI1NSBDMS44Mjk2MTY5MiwzLjY3Mjk1NTk3IDMuNjcyOTU1OTcsMS44Mjk2MTY5MiA1Ljk0NjI1NSwxLjgyOTYxNjkyIEM4LjIxOTU1NDAzLDEuODI5NjE2OTIgMTAuMDYyODkzMSwzLjY3Mjk1NTk3IDEwLjA2Mjg5MzEsNS45NDYyNTUgQzEwLjA2Mjg5MzEsOC4yMTk1NTQwMyA4LjIxOTU1NDAzLDEwLjA2Mjg5MzEgNS45NDYyNTUsMTAuMDYyODkzMSBDMy42NzI5NTU5NywxMC4wNjI4OTMxIDEuODI5NjE2OTIsOC4yMTk1NTQwMyAxLjgyOTYxNjkyLDUuOTQ2MjU1IFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTZWFyY2gvaW5kZXguanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNlYXJjaC9pbnB1dFNlYXJjaC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRTZWFyY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0U2VhcmNofX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTZWFyY2gvaW5wdXRTZWFyY2guanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dFNlYXJjaD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTZWFyY2gvaW5wdXRTZWFyY2guc2NzcyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2VhcmNoL2ltZy9zZWFyY2gtaWNvbi1pbmxpbmUuc3ZnIikscD1yKF8pLGY9YS5kZWZhdWx0LmJpbmQoZC5kZWZhdWx0KSxtPXQuSW5wdXRTZWFyY2g9ZnVuY3Rpb24odCl7dmFyIG49dC50eXBlLHI9dC52YWx1ZSxvPXQuZXJyb3Iscz10LnBsYWNlaG9sZGVyLGk9dC5tYXhMZW5ndGgsYT10LmRpc2FibGVkLGw9dC5yZWZGdW5jdGlvbixjPXQub25DaGFuZ2UsZD10LmNsYXNzTmFtZSxfPXQuaWNvbkF0UmlnaHQsbT10LnNlYXJjaEhpbnQsaD10Lm9uRm9jdXMsZz10Lm9uQmx1cixiPXQub25LZXlVcCxFPXQuYWN0aXZlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpmKCJpbnB1dC1zZWFyY2giLHtlcnJvcjpvLGFjdGl2ZTpFLGRpc2FibGVkOmF9KX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZigiaWNvbiIseyJhdC1yaWdodCI6X30pfSwoMCx1LmRlZmF1bHQpKHAuZGVmYXVsdCkpLGUuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtyZWY6bCx0eXBlOm4sY2xhc3NOYW1lOmYoImlucHV0IiwidHlwZS0iK24sZCksdmFsdWU6cixkaXNhYmxlZDphLHBsYWNlaG9sZGVyOnMsbWF4TGVuZ3RoOmksb25DaGFuZ2U6YyxvbkZvY3VzOmgsb25CbHVyOmcsb25LZXlVcDpifSksbSYmZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Zigic2VhcmNoLWhpbnQiKX0sbSkpfTttLnByb3BUeXBlcz17dHlwZTpzLmRlZmF1bHQuc3RyaW5nLHZhbHVlOnMuZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXI6cy5kZWZhdWx0LnN0cmluZyxtYXhMZW5ndGg6cy5kZWZhdWx0LnN0cmluZyxjbGFzc05hbWU6cy5kZWZhdWx0LnN0cmluZyxpY29uQXRSaWdodDpzLmRlZmF1bHQuYm9vbCxzZWFyY2hIaW50OnMuZGVmYXVsdC5zdHJpbmcsYWN0aXZlOnMuZGVmYXVsdC5ib29sLGRpc2FibGVkOnMuZGVmYXVsdC5ib29sLGVycm9yOnMuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2U6cy5kZWZhdWx0LmZ1bmMsb25Gb2N1czpzLmRlZmF1bHQuZnVuYyxvbkJsdXI6cy5kZWZhdWx0LmZ1bmMsb25LZXlVcDpzLmRlZmF1bHQuZnVuYyxyZWZGdW5jdGlvbjpzLmRlZmF1bHQuZnVuY30sbS5kZWZhdWx0UHJvcHM9e3R5cGU6InRleHQiLHZhbHVlOiIiLHBsYWNlaG9sZGVyOiIiLG1heExlbmd0aDoiMjU2IixjbGFzc05hbWU6IiIsaWNvbkF0UmlnaHQ6ITEsc2VhcmNoSGludDoiIixhY3RpdmU6ITEsZGlzYWJsZWQ6ITEsZXJyb3I6IiIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sb25LZXlVcDpmdW5jdGlvbigpe30scmVmRnVuY3Rpb246ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiSW5wdXRTZWFyY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2VhcmNoL2lucHV0U2VhcmNoLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNlYXJjaC9pbnB1dFNlYXJjaC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNlYXJjaC9pbnB1dFNlYXJjaC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImlucHV0LXNlYXJjaCI6ImlucHV0U2VhcmNoX19pbnB1dC1zZWFyY2hfX18xSVJmeSIsYWN0aXZlOiJpbnB1dFNlYXJjaF9fYWN0aXZlX19fMm9ZMnciLGVycm9yOiJpbnB1dFNlYXJjaF9fZXJyb3JfX18yVG9DTCIsZGlzYWJsZWQ6ImlucHV0U2VhcmNoX19kaXNhYmxlZF9fXzJVVVc1IixpY29uOiJpbnB1dFNlYXJjaF9faWNvbl9fXzJuVGRjIiwiYXQtcmlnaHQiOiJpbnB1dFNlYXJjaF9fYXQtcmlnaHRfX18xdFN2QyIsaW5wdXQ6ImlucHV0U2VhcmNoX19pbnB1dF9fXzNlNGRiIiwidHlwZS1udW1iZXIiOiJpbnB1dFNlYXJjaF9fdHlwZS1udW1iZXJfX18zRTFFMiIsInNlYXJjaC1oaW50IjoiaW5wdXRTZWFyY2hfX3NlYXJjaC1oaW50X19fMzFvSDUifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2xpZGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNsaWRlci9pbnB1dFNsaWRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRTbGlkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0U2xpZGVyfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTbGlkZXIvaW5wdXRTbGlkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dFNsaWRlcj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JjLXNsaWRlci9lcy9pbmRleC5qcyIpLEQ9cihMKTtuKCIuL25vZGVfbW9kdWxlcy9yYy1zbGlkZXIvYXNzZXRzL2luZGV4LmNzcyIpLG4oIi4vbm9kZV9tb2R1bGVzL3JjLXRvb2x0aXAvYXNzZXRzL2Jvb3RzdHJhcC5jc3MiKTt2YXIgdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPXIodyksaz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNsaWRlci9pbnB1dFNsaWRlci5zY3NzIiksST1yKGspLFA9e0lucHV0U2xpZGVyOntkaXNwbGF5TmFtZToiSW5wdXRTbGlkZXIifX0sTj0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNsaWRlci9pbnB1dFNsaWRlci5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxIPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2xpZGVyL2lucHV0U2xpZGVyLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLEY9TS5kZWZhdWx0LmJpbmQoSS5kZWZhdWx0KSxCPXguZGVmYXVsdC5zaGFwZSh7aWQ6eC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGxhYmVsOnguZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0pLFU9dC5JbnB1dFNsaWRlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE4oSCh0LGUpLGUpfX0oIklucHV0U2xpZGVyIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0TWF4VmFsdWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldE1heFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldFNsaWRlclZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRTbGlkZXJWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jcmVhdGVNYXJrcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlTWFya3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19jcmVhdGVNYXJrc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlTWFya3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFNsaWRlclZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTbGlkZXJWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TWF4VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldE1heFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMub3B0aW9uc1tlXSl9fSx7a2V5OiJfX2dldE1heFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5sZW5ndGg/dGhpcy5wcm9wcy5vcHRpb25zLmxlbmd0aC0xOjB9fSx7a2V5OiJfX2dldFNsaWRlclZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5vcHRpb25zLmluZGV4T2YodGhpcy5wcm9wcy52YWx1ZSk7cmV0dXJuIGU+LTE/ZTowfX0se2tleToiX19jcmVhdGVNYXJrc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHt9LGUsKDAsYS5kZWZhdWx0KSh7fSxuLHQpKX0se30pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoImlucHV0LXNsaWRlciIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELmRlZmF1bHQse21pbjowLG1heDp0aGlzLmdldE1heFZhbHVlKCksbWFya3M6dGhpcy5jcmVhdGVNYXJrcygpLHN0ZXA6MSx2YWx1ZTp0aGlzLmdldFNsaWRlclZhbHVlKCksb25DaGFuZ2U6dGhpcy5vbkNoYW5nZX0pKX19XSksdH0oQy5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtvcHRpb25zOnguZGVmYXVsdC5hcnJheU9mKEIpLHZhbHVlOkIsb25DaGFuZ2U6eC5kZWZhdWx0LmZ1bmN9LG8uZGVmYXVsdFByb3BzPXtvcHRpb25zOltdLHZhbHVlOiIiLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fX0scykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJJbnB1dFNsaWRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTbGlkZXIvaW5wdXRTbGlkZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2xpZGVyL2lucHV0U2xpZGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIm9wdGlvblNoYXBlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNsaWRlci9pbnB1dFNsaWRlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0U2xpZGVyL2lucHV0U2xpZGVyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5wdXQtc2xpZGVyIjoiaW5wdXRTbGlkZXJfX2lucHV0LXNsaWRlcl9fXzJpM0JCIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFN3aXRjaGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFN3aXRjaGVyL2lucHV0U3dpdGNoZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0U3dpdGNoZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0U3dpdGNoZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFN3aXRjaGVyL2lucHV0U3dpdGNoZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dFN3aXRjaGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTd2l0Y2hlci9pbnB1dFN3aXRjaGVyLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5JbnB1dFN3aXRjaGVyPWZ1bmN0aW9uKHQpe3ZhciBuPXQuY2hpbGRyZW4scj10LnZhbHVlLG89dC5vbkNoYW5nZSxzPXQub25Gb2N1cyxpPXQub25CbHVyLGE9Yyh7InN3aXRjaGVyLXNsaWRlciI6ITAsY2VudGVyZWQ6IW4sZW5hYmxlZDpyfSksbD1mdW5jdGlvbihlKXtvKGUudGFyZ2V0LmNoZWNrZWQpfTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJsYWJlbCIse2NsYXNzTmFtZTpjKCJpbnB1dC1zd2l0Y2hlciIpLG9uRm9jdXM6cyxvbkJsdXI6aSx0YWJJbmRleDoiMSJ9LGUuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHt0eXBlOiJjaGVja2JveCIsY2xhc3NOYW1lOmMoImlucHV0IiksY2hlY2tlZDpyLG9uQ2hhbmdlOmx9KSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6YX0pLGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpjKCJjaGlsZHJlbi1jb250YWluZXIiKX0sbikpfTtkLnByb3BUeXBlcz17Y2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsdmFsdWU6cy5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6cy5kZWZhdWx0LmZ1bmMsb25Gb2N1czpzLmRlZmF1bHQuZnVuYyxvbkJsdXI6cy5kZWZhdWx0LmZ1bmN9LGQuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsLHZhbHVlOiExLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvbkZvY3VzOmZ1bmN0aW9uKCl7fSxvbkJsdXI6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiSW5wdXRTd2l0Y2hlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTd2l0Y2hlci9pbnB1dFN3aXRjaGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFN3aXRjaGVyL2lucHV0U3dpdGNoZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTd2l0Y2hlci9pbnB1dFN3aXRjaGVyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5wdXQtc3dpdGNoZXIiOiJpbnB1dFN3aXRjaGVyX19pbnB1dC1zd2l0Y2hlcl9fX3hkb2ZkIiwic3dpdGNoZXItc2xpZGVyIjoiaW5wdXRTd2l0Y2hlcl9fc3dpdGNoZXItc2xpZGVyX19fdU00VFIiLGlucHV0OiJpbnB1dFN3aXRjaGVyX19pbnB1dF9fXy1XZmJQIixlbmFibGVkOiJpbnB1dFN3aXRjaGVyX19lbmFibGVkX19fMjM2b0oiLGNlbnRlcmVkOiJpbnB1dFN3aXRjaGVyX19jZW50ZXJlZF9fX0NZRENXIiwiY2hpbGRyZW4tY29udGFpbmVyIjoiaW5wdXRTd2l0Y2hlcl9fY2hpbGRyZW4tY29udGFpbmVyX19fMXp2WlkifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGFnc1NlYXJjaC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRUYWdzU2VhcmNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnB1dFRhZ3NTZWFyY2h9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRhZ3NTZWFyY2gvaW5wdXRUYWdzU2VhcmNoLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRUYWdzU2VhcmNoPXZvaWQgMDt2YXIgbyxzLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9yZWFjdC1zZWxlY3QuZXMuanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxJPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGFnc1NlYXJjaC9pbnB1dFRhZ3NTZWFyY2guc2NzcyIpLFA9cihJKSxOPXtJbnB1dFRhZ3NTZWFyY2g6e2Rpc3BsYXlOYW1lOiJJbnB1dFRhZ3NTZWFyY2gifX0sSD0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRhZ3NTZWFyY2gvaW5wdXRUYWdzU2VhcmNoLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEY9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxCPXcuZGVmYXVsdC5iaW5kKFAuZGVmYXVsdCksVT1mdW5jdGlvbihlKXtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5TY3JvbGxXcmFwcGVyLHthdXRvSGVpZ2h0OiEwLGF1dG9IZWlnaHRNYXg6MjAwfSxSLmRlZmF1bHQuZGVmYXVsdFByb3BzLm1lbnVSZW5kZXJlcihlKSl9LEc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90P1MuQXN5bmNDcmVhdGFibGU6Uy5Bc3luYzp0P1MuQ3JlYXRhYmxlOlIuZGVmYXVsdH0sej10LklucHV0VGFnc1NlYXJjaD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEgoRih0LGUpLGUpfX0oIklucHV0VGFnc1NlYXJjaCIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e3NlYXJjaFByb21wdFRleHQ6ci5wcm9wcy5ub3RoaW5nRm91bmR9LHIub25JbnB1dENoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRJdGVtcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0SXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyT3B0aW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJPcHRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyTmV3SXRlbUxhYmVsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJOZXdJdGVtTGFiZWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJOZXdJdGVtTGFiZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlck5ld0l0ZW1MYWJlbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyT3B0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJPcHRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLm1pbkxlbmd0aC1lLmxlbmd0aDtpZih0aGlzLnByb3BzLmR5bmFtaWNTZWFyY2hQcm9tcHRUZXh0JiZ0aGlzLnByb3BzLm1pbkxlbmd0aCYmdD4wKXt2YXIgbj1BLmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJJbnB1dFRhZ3NTZWFyY2guZHluYW1pY1NlYXJjaFByb21wdFRleHQiLGRlZmF1bHRNZXNzYWdlOiJQbGVhc2UgZW50ZXIge2xlbmd0aH0gb3IgbW9yZSBjaGFyYWN0ZXJzIix2YWx1ZXM6e2xlbmd0aDp0fX0pO3RoaXMuc2V0U3RhdGUoe3NlYXJjaFByb21wdFRleHQ6bn0pfWVsc2UgdGhpcy5zZXRTdGF0ZSh7c2VhcmNoUHJvbXB0VGV4dDp0aGlzLnByb3BzLm5vdGhpbmdGb3VuZH0pO3JldHVybiBlfX0se2tleToiX19nZXRJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLmxlbmd0aD49dGhpcy5wcm9wcy5taW5MZW5ndGg/KDAsay5mZXRjaCkoIiIrdGhpcy5wcm9wcy51cmkrZSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm57b3B0aW9uczp0LnByb3BzLm1ha2VPcHRpb25zKGUpfX0pOmEuZGVmYXVsdC5yZXNvbHZlKHtvcHRpb25zOltdfSl9fSx7a2V5OiJfX3JlbmRlck9wdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoInNlbGVjdDItaXRlbSIpLGtleTplLnZhbHVlLG9uQ2xpY2s6ZnVuY3Rpb24oKXt0LnByb3BzLm9uQ2hhbmdlKGUudmFsdWUpfX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsZS5sYWJlbCkpfX0se2tleToiX19yZW5kZXJOZXdJdGVtTGFiZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMuc2hvd05ld0xhYmVsP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsZSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6QigibmV3Iil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGouRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IklucHV0VGFnc1NlYXJjaC5uZXciLGRlZmF1bHRNZXNzYWdlOiJOZXcifSkpKTplfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnRvdWNoZWQsbj1lLmFzeW5jLHI9ZS5jcmVhdGFibGUsbz1lLmxvYWRpbmdQbGFjZWhvbGRlcixzPWUuZm9jdXNQbGFjZWhvbGRlcixpPWUudmFsdWUsYT1lLm9wdGlvbnMsbD1lLm9uQ2hhbmdlLHU9ZS5tdWx0aSxjPWUucmVtb3ZlU2VsZWN0ZWQsZD1lLnBsYWNlaG9sZGVyLF89ZS5pc0NsZWFyYWJsZSxwPWUuZGlzYWJsZWQsZj1lLmVycm9yLG09ZS5vbkZvY3VzLGg9ZS5pc1ZhbGlkTmV3T3B0aW9uLGc9ZS5vbkJsdXIsYj1lLm1vYmlsZURpc2FibGVkLEU9ZS5jdXN0b21DbGFzcyx5PWUuaXNPcHRpb25VbmlxdWUsdj1lLmlucHV0UHJvcHMsVD1HKG4scik7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Qigic2VsZWN0LWNvbnRhaW5lciIse2Vycm9yOmYsdG91Y2hlZDp0LCJtb2JpbGUtZGlzYWJsZWQiOmJ9LEUpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULHtsb2FkT3B0aW9uczp0aGlzLmdldEl0ZW1zLHBsYWNlaG9sZGVyOmQsYXV0b2xvYWQ6ITEsY2FjaGU6ITEsY2xhc3NOYW1lOkIoInNlbGVjdDItc2VhcmNoLXRhZ3MiKSxub1Jlc3VsdHNUZXh0OnRoaXMuc3RhdGUuc2VhcmNoUHJvbXB0VGV4dCxvbklucHV0Q2hhbmdlOnRoaXMub25JbnB1dENoYW5nZSxvcHRpb25SZW5kZXJlcjp0aGlzLnJlbmRlck9wdGlvbixtZW51UmVuZGVyZXI6VSxwcm9tcHRUZXh0Q3JlYXRvcjp0aGlzLnJlbmRlck5ld0l0ZW1MYWJlbCxvbkJsdXI6Zyxsb2FkaW5nUGxhY2Vob2xkZXI6byxzZWFyY2hQcm9tcHRUZXh0OnMsdmFsdWU6aSxvcHRpb25zOmEsb25DaGFuZ2U6bCxvbkZvY3VzOm0sbXVsdGk6dSxpc1ZhbGlkTmV3T3B0aW9uOmgscmVtb3ZlU2VsZWN0ZWQ6Yyxpc0NsZWFyYWJsZTpfLGRpc2FibGVkOnAsaXNPcHRpb25VbmlxdWU6eXx8dm9pZCAwLGlucHV0UHJvcHM6dn0pKX19XSksdH0oVC5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXt1cmk6TC5kZWZhdWx0LnN0cmluZyxvcHRpb25zOkwuZGVmYXVsdC5hcnJheSx2YWx1ZTpMLmRlZmF1bHQub25lT2ZUeXBlKFtMLmRlZmF1bHQuYXJyYXksTC5kZWZhdWx0Lm9iamVjdF0pLHBsYWNlaG9sZGVyOkwuZGVmYXVsdC5zdHJpbmcsZm9jdXNQbGFjZWhvbGRlcjpMLmRlZmF1bHQuc3RyaW5nLGxvYWRpbmdQbGFjZWhvbGRlcjpMLmRlZmF1bHQuc3RyaW5nLG5vdGhpbmdGb3VuZDpMLmRlZmF1bHQuc3RyaW5nLGVycm9yOkwuZGVmYXVsdC5zdHJpbmcsdG91Y2hlZDpMLmRlZmF1bHQuYm9vbCxjcmVhdGFibGU6TC5kZWZhdWx0LmJvb2wsYXN5bmM6TC5kZWZhdWx0LmJvb2wsbXVsdGk6TC5kZWZhdWx0LmJvb2wscmVtb3ZlU2VsZWN0ZWQ6TC5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6TC5kZWZhdWx0LmZ1bmMsb25Gb2N1czpMLmRlZmF1bHQuZnVuYyxvbkJsdXI6TC5kZWZhdWx0LmZ1bmMsbWFrZU9wdGlvbnM6TC5kZWZhdWx0LmZ1bmMsaXNWYWxpZE5ld09wdGlvbjpMLmRlZmF1bHQuZnVuYyxtaW5MZW5ndGg6TC5kZWZhdWx0Lm51bWJlcixzaG93TmV3TGFiZWw6TC5kZWZhdWx0LmJvb2wsZHluYW1pY1NlYXJjaFByb21wdFRleHQ6TC5kZWZhdWx0LmJvb2wsaXNDbGVhcmFibGU6TC5kZWZhdWx0LmJvb2wsZGlzYWJsZWQ6TC5kZWZhdWx0LmJvb2wsbW9iaWxlRGlzYWJsZWQ6TC5kZWZhdWx0LmJvb2wsY3VzdG9tQ2xhc3M6TC5kZWZhdWx0LnN0cmluZyxpc09wdGlvblVuaXF1ZTpMLmRlZmF1bHQuZnVuYyxpbnB1dFByb3BzOkwuZGVmYXVsdC5vYmplY3R9LG8uZGVmYXVsdFByb3BzPXt1cmk6IiIsb3B0aW9uczpbXSx2YWx1ZTpudWxsLHBsYWNlaG9sZGVyOiIiLGZvY3VzUGxhY2Vob2xkZXI6IiIsbG9hZGluZ1BsYWNlaG9sZGVyOiIiLG5vdGhpbmdGb3VuZDoiIixlcnJvcjoiIix0b3VjaGVkOiExLGNyZWF0YWJsZTohMSxhc3luYzohMSxtdWx0aTohMSxyZW1vdmVTZWxlY3RlZDohMSxtYWtlT3B0aW9uczpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LGlzVmFsaWROZXdPcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGFiZWx9LG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sbWluTGVuZ3RoOjEsc2hvd05ld0xhYmVsOiExLGR5bmFtaWNTZWFyY2hQcm9tcHRUZXh0OiExLGlzQ2xlYXJhYmxlOiExLGRpc2FibGVkOiExLG1vYmlsZURpc2FibGVkOiExLGN1c3RvbUNsYXNzOm51bGwsaXNPcHRpb25VbmlxdWU6bnVsbCxpbnB1dFByb3BzOnt9fSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIklucHV0VGFnc1NlYXJjaCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJyZW5kZXJJdGVtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJzZWxlY3RUeXBlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRhZ3NTZWFyY2gvaW5wdXRUYWdzU2VhcmNoLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2lucHV0VGFnc1NlYXJjaC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InNlbGVjdC1jb250YWluZXIiOiJpbnB1dFRhZ3NTZWFyY2hfX3NlbGVjdC1jb250YWluZXJfX18yVnVLcSIsIm1vYmlsZS1kaXNhYmxlZCI6ImlucHV0VGFnc1NlYXJjaF9fbW9iaWxlLWRpc2FibGVkX19fTHJTemQiLGVycm9yOiJpbnB1dFRhZ3NTZWFyY2hfX2Vycm9yX19fX3ZmVGkiLHRvdWNoZWQ6ImlucHV0VGFnc1NlYXJjaF9fdG91Y2hlZF9fXzE5Wk1xIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRleHRBcmVhL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRleHRBcmVhL2lucHV0VGV4dEFyZWEuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0VGV4dEFyZWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLklucHV0VGV4dEFyZWF9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRleHRBcmVhL2lucHV0VGV4dEFyZWEuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnB1dFRleHRBcmVhPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUZXh0QXJlYS9pbnB1dFRleHRBcmVhLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5JbnB1dFRleHRBcmVhPWZ1bmN0aW9uKHQpe3ZhciBuPXQudmFsdWUscj10LnJlYWRvbmx5LG89dC5lcnJvcixzPXQucGxhY2Vob2xkZXIsaT10Lm1heExlbmd0aCxhPXQuZGlzYWJsZWQsbD10Lm1vYmlsZURpc2FibGVkLHU9dC5yZWZGdW5jdGlvbixkPXQub25DaGFuZ2UsXz10Lm9uRm9jdXMscD10Lm9uQmx1cixmPXQub25LZXlVcDtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIse3JlZjp1LGNsYXNzTmFtZTpjKCJpbnB1dC10ZXh0LWFyZWEiLHsibW9iaWxlLWRpc2FibGVkIjpsLGRpc2FibGVkOmEsZXJyb3I6b30pLHZhbHVlOm4scGxhY2Vob2xkZXI6cyxtYXhMZW5ndGg6aSxkaXNhYmxlZDphLHJlYWRPbmx5OnIsb25DaGFuZ2U6ZCxvbkZvY3VzOl8sb25CbHVyOnAsb25LZXlVcDpmfSxuKX07ZC5wcm9wVHlwZXM9e3ZhbHVlOnMuZGVmYXVsdC5zdHJpbmcscGxhY2Vob2xkZXI6cy5kZWZhdWx0LnN0cmluZyxtYXhMZW5ndGg6cy5kZWZhdWx0LnN0cmluZyxkaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxtb2JpbGVEaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxyZWFkb25seTpzLmRlZmF1bHQuYm9vbCxlcnJvcjpzLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlOnMuZGVmYXVsdC5mdW5jLG9uRm9jdXM6cy5kZWZhdWx0LmZ1bmMsb25CbHVyOnMuZGVmYXVsdC5mdW5jLG9uS2V5VXA6cy5kZWZhdWx0LmZ1bmMscmVmRnVuY3Rpb246cy5kZWZhdWx0LmZ1bmN9LGQuZGVmYXVsdFByb3BzPXt2YWx1ZToiIixwbGFjZWhvbGRlcjoiIixtYXhMZW5ndGg6IjI1NiIsZGlzYWJsZWQ6ITEsbW9iaWxlRGlzYWJsZWQ6ITEscmVhZG9ubHk6ITEsZXJyb3I6IiIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sb25LZXlVcDpmdW5jdGlvbigpe30scmVmRnVuY3Rpb246ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiSW5wdXRUZXh0QXJlYSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUZXh0QXJlYS9pbnB1dFRleHRBcmVhLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRleHRBcmVhL2lucHV0VGV4dEFyZWEuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUZXh0QXJlYS9pbnB1dFRleHRBcmVhLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5wdXQtdGV4dC1hcmVhIjoiaW5wdXRUZXh0QXJlYV9faW5wdXQtdGV4dC1hcmVhX19fNzFQeHEiLGVycm9yOiJpbnB1dFRleHRBcmVhX19lcnJvcl9fXzNSRXFTIixkaXNhYmxlZDoiaW5wdXRUZXh0QXJlYV9fZGlzYWJsZWRfX18yaHFjVCIsIm1vYmlsZS1kaXNhYmxlZCI6ImlucHV0VGV4dEFyZWFfX21vYmlsZS1kaXNhYmxlZF9fXzJWUWxaIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRpbWVEYXRlUmFuZ2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGltZURhdGVSYW5nZS9pbnB1dFRpbWVEYXRlUmFuZ2UuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIklucHV0VGltZURhdGVSYW5nZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSW5wdXRUaW1lRGF0ZVJhbmdlfX0pfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUaW1lRGF0ZVJhbmdlL2lucHV0VGltZURhdGVSYW5nZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklucHV0VGltZURhdGVSYW5nZT12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kYXRlcGlja2VyL2VzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q2hlY2tib3gvaW5kZXguanMiKTtuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kYXRlcGlja2VyL2Rpc3QvcmVhY3QtZGF0ZXBpY2tlci5jc3MiKTt2YXIgST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3RpbWVEYXRlRm9ybWF0LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRpbWVEYXRlUmFuZ2UvaW5wdXRUaW1lRGF0ZVJhbmdlLnNjc3MiKSxOPXIoUCksSD17SW5wdXRUaW1lRGF0ZVJhbmdlOntkaXNwbGF5TmFtZToiSW5wdXRUaW1lRGF0ZVJhbmdlIn19LEY9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUaW1lRGF0ZVJhbmdlL2lucHV0VGltZURhdGVSYW5nZS5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W2VdLGltcG9ydHM6W1QuZGVmYXVsdF19KSxCPSgwLHkuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGltZURhdGVSYW5nZS9pbnB1dFRpbWVEYXRlUmFuZ2UuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltdLGltcG9ydHM6W1QuZGVmYXVsdCxiLmRlZmF1bHRdfSksVT13LmRlZmF1bHQuYmluZChOLmRlZmF1bHQpLEc9KDAsTS5kZWZpbmVNZXNzYWdlcykoe2N1c3RvbVJhbmdlOntpZDoiSW5wdXRUaW1lRGF0ZVJhbmdlLmN1c3RvbVJhbmdlIixkZWZhdWx0TWVzc2FnZToiQ3VzdG9tIFJhbmdlIn0sZnJvbTp7aWQ6IklucHV0VGltZURhdGVSYW5nZS5mcm9tIixkZWZhdWx0TWVzc2FnZToiRnJvbSJ9LHRvOntpZDoiSW5wdXRUaW1lRGF0ZVJhbmdlLnRvIixkZWZhdWx0TWVzc2FnZToiVG8ifSx0aW1lOntpZDoiSW5wdXRUaW1lRGF0ZVJhbmdlLnRpbWUiLGRlZmF1bHRNZXNzYWdlOiJUaW1lIn0sZHluYW1pY1VwZGF0ZTp7aWQ6IklucHV0VGltZURhdGVSYW5nZS5keW5hbWljVXBkYXRlIixkZWZhdWx0TWVzc2FnZToiRHluYW1pYyB1cGRhdGUifSxkeW5hbWljVXBkYXRlSGludDp7aWQ6IklucHV0VGltZURhdGVSYW5nZS5keW5hbWljVXBkYXRlSGludCIsZGVmYXVsdE1lc3NhZ2U6IllvdXIgdGltZSByYW5nZSB3aWxsIGJlIHVwZGF0ZWQgZXZlcnkgZGF5In19KSx6PXQuSW5wdXRUaW1lRGF0ZVJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRihCKHQsZSksZSl9fSgiSW5wdXRUaW1lRGF0ZVJhbmdlIikoKDAsTS5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtvcGVuZWQ6ITF9LHIub25DbGlja1ZhbHVlQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tWYWx1ZUJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2xpY2tQcmVzZXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tQcmVzZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbGlja0NvbmRpdGlvbkl0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldFJlZj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNoYW5nZUZyb209ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2hhbmdlVG89ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNoYW5nZVRvX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNoYW5nZUR5bmFtaWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNoYW5nZUR5bmFtaWNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVDaGFuZ2VEeW5hbWljX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VEeW5hbWljX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDaGFuZ2VUb19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlVG9fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NvbmRpdGlvbkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrUHJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrUHJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrVmFsdWVCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1ZhbHVlQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6Il9fb25DbGlja1ZhbHVlQmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tWYWx1ZUJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrVmFsdWVCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKHtvcGVuZWQ6IXRoaXMuc3RhdGUub3BlbmVkfSksZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnN0YXRlLm9wZW5lZD90aGlzLnByb3BzLm9uQmx1cigpOnRoaXMucHJvcHMub25Gb2N1cygpfX0se2tleToiX19vbkNsaWNrUHJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrUHJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrUHJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe29wZW5lZDohMX0pLHRoaXMucHJvcHMub25DaGFuZ2UoZSl9fSx7a2V5OiJfX29uQ2xpY2tDb25kaXRpb25JdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrQ29uZGl0aW9uSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0NvbmRpdGlvbkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52YWx1ZSE9PXRoaXMucHJvcHMudmFsdWUuY29uZGl0aW9uJiYodGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiExfSksdGhpcy5wcm9wcy5vbkNoYW5nZSh7dmFsdWU6dGhpcy5wcm9wcy52YWx1ZS52YWx1ZSxjb25kaXRpb246ZS52YWx1ZX0pKX19LHtrZXk6Il9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGU9ZX19LHtrZXk6Il9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGUuY29udGFpbnMoZS50YXJnZXQpfHwodGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiExfSksdGhpcy5wcm9wcy5vbkJsdXIoKSl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZUZyb21fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5vbkNoYW5nZSh7c3RhcnQ6KDAsai5kZWZhdWx0KShlKS52YWx1ZU9mKCksZW5kOnRoaXMucHJvcHMudmFsdWUuZW5kLGR5bmFtaWM6dGhpcy5wcm9wcy52YWx1ZS5keW5hbWljfSl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZVRvX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VUb19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlVG9fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5vbkNoYW5nZSh7c3RhcnQ6dGhpcy5wcm9wcy52YWx1ZS5zdGFydCxlbmQ6KDAsai5kZWZhdWx0KShlKS52YWx1ZU9mKCksZHluYW1pYzp0aGlzLnByb3BzLnZhbHVlLmR5bmFtaWN9KX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlRHluYW1pY19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlRHluYW1pY19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlRHluYW1pY19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKHtzdGFydDp0aGlzLnByb3BzLnZhbHVlLnN0YXJ0LGVuZDp0aGlzLnByb3BzLnZhbHVlLmVuZCxkeW5hbWljOmUudGFyZ2V0LmNoZWNrZWR9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuaW50bCxyPXQucHJlc2V0cyxvPXQudmFsdWUscz10LndpdGhvdXREeW5hbWljO3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImlucHV0LXRpbWUtZGF0ZS1yYW5nZSIpLHJlZjp0aGlzLnNldFJlZn0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7cmVhZE9ubHk6ITAsdmFsdWU6KDAsai5kZWZhdWx0KShvLnN0YXJ0KS5mb3JtYXQoSS5USU1FX0RBVEVfRk9STUFUKSsiIC0gIisoMCxqLmRlZmF1bHQpKG8uZW5kKS5mb3JtYXQoSS5USU1FX0RBVEVfRk9STUFUKSxjbGFzc05hbWU6VSgiY3VycmVudC12YWx1ZSIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrVmFsdWVCbG9ja30pLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgibWVudSIse3Zpc2libGU6dGhpcy5zdGF0ZS5vcGVuZWR9KX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJwcmVzZXRzIil9LHIubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6bixjbGFzc05hbWU6VSgicHJlc2V0Iix7YWN0aXZlOm8uc3RhcnQ9PT10LnZhbHVlLnN0YXJ0JiZvLmVuZD09PXQudmFsdWUuZW5kJiZvLmR5bmFtaWM9PT10LnZhbHVlLmR5bmFtaWN9KSxvbkNsaWNrOmZ1bmN0aW9uKCl7ZS5vbkNsaWNrUHJlc2V0KHQudmFsdWUpfX0sdC5sYWJlbCl9KSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJjdXN0b20iKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VSgiY3VzdG9tLWxhYmVsIil9LG4uZm9ybWF0TWVzc2FnZShHLmN1c3RvbVJhbmdlKSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJmcm9tIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlUoImZyb20tbGFiZWwiKX0sbi5mb3JtYXRNZXNzYWdlKEcuZnJvbSkpLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuZGVmYXVsdCx7Y2xhc3NOYW1lOlUoImZyb20taW5wdXQiKSxmaXhlZEhlaWdodDohMCxzZWxlY3RzU3RhcnQ6ITAsc2VsZWN0ZWQ6KDAsai5kZWZhdWx0KShvLnN0YXJ0KSxzdGFydERhdGU6KDAsai5kZWZhdWx0KShvLnN0YXJ0KSxlbmREYXRlOigwLGouZGVmYXVsdCkoby5lbmQpLG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlRnJvbSxzaG93VGltZVNlbGVjdDohMCx0aW1lRm9ybWF0OkkuVElNRV9GT1JNQVQsdGltZUludGVydmFsczpJLlRJTUVfSU5URVJWQUwsZGF0ZUZvcm1hdDpJLkRBVEVfRk9STUFULHRpbWVDYXB0aW9uOm4uZm9ybWF0TWVzc2FnZShHLnRpbWUpLHBvcHBlck1vZGlmaWVyczp7cHJldmVudE92ZXJmbG93OntlbmFibGVkOiEwLGVzY2FwZVdpdGhSZWZlcmVuY2U6ITEsYm91bmRhcmllc0VsZW1lbnQ6InZpZXdwb3J0In19fSkpLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgidG8iKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VSgidG8tbGFiZWwiKX0sbi5mb3JtYXRNZXNzYWdlKEcudG8pKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLmRlZmF1bHQse2NsYXNzTmFtZTpVKCJ0by1pbnB1dCIpLGZpeGVkSGVpZ2h0OiEwLHNlbGVjdHNFbmQ6ITAsc2VsZWN0ZWQ6KDAsai5kZWZhdWx0KShvLmVuZCksc3RhcnREYXRlOigwLGouZGVmYXVsdCkoby5zdGFydCksZW5kRGF0ZTooMCxqLmRlZmF1bHQpKG8uZW5kKSxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZVRvLHNob3dUaW1lU2VsZWN0OiEwLHRpbWVGb3JtYXQ6SS5USU1FX0ZPUk1BVCx0aW1lSW50ZXJ2YWxzOkkuVElNRV9JTlRFUlZBTCxkYXRlRm9ybWF0OkkuREFURV9GT1JNQVQsdGltZUNhcHRpb246bi5mb3JtYXRNZXNzYWdlKEcudGltZSkscG9wcGVyTW9kaWZpZXJzOntwcmV2ZW50T3ZlcmZsb3c6e2VuYWJsZWQ6ITAsZXNjYXBlV2l0aFJlZmVyZW5jZTohMSxib3VuZGFyaWVzRWxlbWVudDoidmlld3BvcnQifX19KSkpLCFzJiZULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImR5bmFtaWMtdXBkYXRlIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuSW5wdXRDaGVja2JveCx7dmFsdWU6by5keW5hbWljLG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlRHluYW1pY30sbi5mb3JtYXRNZXNzYWdlKEcuZHluYW1pY1VwZGF0ZSkpLG8uZHluYW1pYyYmVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VSgiZHluYW1pYy11cGRhdGUtaGludCIpfSxuLmZvcm1hdE1lc3NhZ2UoRy5keW5hbWljVXBkYXRlSGludCkpKSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6TS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxwcmVzZXRzOlMuZGVmYXVsdC5hcnJheSx2YWx1ZTpTLmRlZmF1bHQub2JqZWN0LG9uQ2hhbmdlOlMuZGVmYXVsdC5mdW5jLG9uRm9jdXM6Uy5kZWZhdWx0LmZ1bmMsb25CbHVyOlMuZGVmYXVsdC5mdW5jLHdpdGhvdXREeW5hbWljOlMuZGVmYXVsdC5ib29sfSxzLmRlZmF1bHRQcm9wcz17cHJlc2V0czpbXSx2YWx1ZTp7fSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSx3aXRob3V0RHluYW1pYzohMX0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJJbnB1dFRpbWVEYXRlUmFuZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGltZURhdGVSYW5nZS9pbnB1dFRpbWVEYXRlUmFuZ2UuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGltZURhdGVSYW5nZS9pbnB1dFRpbWVEYXRlUmFuZ2UuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGltZURhdGVSYW5nZS9pbnB1dFRpbWVEYXRlUmFuZ2UuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFRpbWVEYXRlUmFuZ2UvaW5wdXRUaW1lRGF0ZVJhbmdlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5wdXQtdGltZS1kYXRlLXJhbmdlIjoiaW5wdXRUaW1lRGF0ZVJhbmdlX19pbnB1dC10aW1lLWRhdGUtcmFuZ2VfX18ybkFBTiIsImN1cnJlbnQtdmFsdWUiOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2N1cnJlbnQtdmFsdWVfX19vMlAtdCIsZXJyb3I6ImlucHV0VGltZURhdGVSYW5nZV9fZXJyb3JfX18yeHhURSIsdG91Y2hlZDoiaW5wdXRUaW1lRGF0ZVJhbmdlX190b3VjaGVkX19fMnEwZk8iLG1lbnU6ImlucHV0VGltZURhdGVSYW5nZV9fbWVudV9fXzIyVUhxIix2aXNpYmxlOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX3Zpc2libGVfX18zcjFkMSIscHJlc2V0czoiaW5wdXRUaW1lRGF0ZVJhbmdlX19wcmVzZXRzX19fMm45SnYiLHByZXNldDoiaW5wdXRUaW1lRGF0ZVJhbmdlX19wcmVzZXRfX18yYllxeiIsYWN0aXZlOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2FjdGl2ZV9fXzNNTGF0IixkaXNhYmxlZDoiaW5wdXRUaW1lRGF0ZVJhbmdlX19kaXNhYmxlZF9fXzJqVEFyIixjdXN0b206ImlucHV0VGltZURhdGVSYW5nZV9fY3VzdG9tX19fRlVoVjMiLCJjdXN0b20tbGFiZWwiOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2N1c3RvbS1sYWJlbF9fXzF3S2t4Iixmcm9tOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2Zyb21fX18xV0U2VCIsdG86ImlucHV0VGltZURhdGVSYW5nZV9fdG9fX18zN3V0ciIsImZyb20tbGFiZWwiOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2Zyb20tbGFiZWxfX18ySkJuYyIsInRvLWxhYmVsIjoiaW5wdXRUaW1lRGF0ZVJhbmdlX190by1sYWJlbF9fXzJvNE5NIiwiZHluYW1pYy11cGRhdGUiOiJpbnB1dFRpbWVEYXRlUmFuZ2VfX2R5bmFtaWMtdXBkYXRlX19fMzBTSU4iLCJkeW5hbWljLXVwZGF0ZS1oaW50IjoiaW5wdXRUaW1lRGF0ZVJhbmdlX19keW5hbWljLXVwZGF0ZS1oaW50X19fM2Z6bHIifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRVc2VyU2VhcmNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnB1dFVzZXJTZWFyY2h9fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvaW5wdXRVc2VyU2VhcmNoLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRVc2VyU2VhcmNoPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L3JlYWN0LXNlbGVjdC5lcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHA9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksZj1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLG09bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5zY3NzIiksaD1yKG0pLGc9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL3VzZXJzTGlzdC9pbmRleC5qcyIpLGI9ZC5kZWZhdWx0LmJpbmQoaC5kZWZhdWx0KSxFPWZ1bmN0aW9uKGUpe3JldHVybiBmLlVSTFMuZGF0YVVzZXJQaG90byhlKX0seT1mdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsO3JldHVybiBwLnZhbGlkYXRlLmVtYWlsKHQpfSx2PWZ1bmN0aW9uKGUpe3JldHVybntleHRlcm5hbFVzZXI6ITAsbGFiZWw6ZS5sYWJlbCx1c2VyTG9naW46ZS5sYWJlbH19LFQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LEE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0P2YuVVJMUy5wcm9qZWN0QWRtaW5TZWFyY2hVc2VyKGUpOmYuVVJMUy5wcm9qZWN0VXNlclNlYXJjaFVzZXIobixlKX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dXNlck5hbWU6ZS5mdWxsTmFtZXx8IiIsdXNlckxvZ2luOmUudXNlcklkLGVtYWlsOmUuZW1haWx8fCIiLGRpc2FibGVkOiEhZS5hc3NpZ25lZFByb2plY3RzW3RdLGlzQXNzaWduZWQ6ISFlLmFzc2lnbmVkUHJvamVjdHNbdF0sdXNlckF2YXRhcjpFKGUudXNlcklkKX19KX0sTz1mdW5jdGlvbihlLHQsbil7aWYoZSl7dmFyIHI9QShlLHQsbik7cmV0dXJuKDAscC5mZXRjaCkocikudGhlbihmdW5jdGlvbihlKXtyZXR1cm57b3B0aW9uczpDKGUuY29udGVudCxuKX19KX1yZXR1cm4gcy5kZWZhdWx0LnJlc29sdmUoe29wdGlvbnM6W119KX0sUz10LklucHV0VXNlclNlYXJjaD1mdW5jdGlvbih0KXt2YXIgbj10LmlzQWRtaW4scj10Lm9uQ2hhbmdlLG89dC5wcm9qZWN0SWQscz10LnBsYWNlaG9sZGVyLGk9dC52YWx1ZSxsPXQuZXJyb3IsdT10LnRvdWNoZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmIoInNlbGVjdDItc2VhcmNoLXVzZXJzIil9LGUuY3JlYXRlRWxlbWVudChhLmRlZmF1bHQuQXN5bmNDcmVhdGFibGUse2NsYXNzTmFtZTpiKHtlcnJvcjpsJiZ1fSksdmFsdWU6aSxjYWNoZTohMSxsb2FkT3B0aW9uczpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLG4sbyl9LGZpbHRlck9wdGlvbjpmdW5jdGlvbigpe3JldHVybiEwfSxsb2FkaW5nUGxhY2Vob2xkZXI6ZS5jcmVhdGVFbGVtZW50KF8uRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IklucHV0VXNlclNlYXJjaC5zZWFyY2hpbmciLGRlZmF1bHRNZXNzYWdlOiJTZWFyY2hpbmcuLi4ifSksbm9SZXN1bHRzVGV4dDplLmNyZWF0ZUVsZW1lbnQoXy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5wdXRVc2VyU2VhcmNoLm5vUmVzdWx0cyIsZGVmYXVsdE1lc3NhZ2U6Ik5vIG1hdGNoZXMgZm91bmQifSksc2VhcmNoUHJvbXB0VGV4dDplLmNyZWF0ZUVsZW1lbnQoXy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5wdXRVc2VyU2VhcmNoLnBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiUGxlYXNlIGVudGVyIDEgb3IgbW9yZSBjaGFyYWN0ZXIifSksb25DaGFuZ2U6cixtZW51UmVuZGVyZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLG49ZS5zZWxlY3RWYWx1ZTtyZXR1cm4oMCxnLlVzZXJzTGlzdCkoe29wdGlvbnM6dCxzZWxlY3RWYWx1ZTpufSl9LGlzVmFsaWROZXdPcHRpb246eSxuZXdPcHRpb25DcmVhdG9yOnYscHJvbXB0VGV4dENyZWF0b3I6VCxwbGFjZWhvbGRlcjpzfSkpfTtTLnByb3BUeXBlcz17aXNBZG1pbjp1LmRlZmF1bHQuYm9vbCxwcm9qZWN0SWQ6dS5kZWZhdWx0LnN0cmluZyxvbkNoYW5nZTp1LmRlZmF1bHQuZnVuYyxwbGFjZWhvbGRlcjp1LmRlZmF1bHQuc3RyaW5nLHZhbHVlOnUuZGVmYXVsdC5vYmplY3QsZXJyb3I6dS5kZWZhdWx0Lm9uZU9mVHlwZShbdS5kZWZhdWx0LnN0cmluZyx1LmRlZmF1bHQuYm9vbF0pLHRvdWNoZWQ6dS5kZWZhdWx0LmJvb2x9LFMuZGVmYXVsdFByb3BzPXtpc0FkbWluOiExLHByb2plY3RJZDoiIixvbkNoYW5nZTpmdW5jdGlvbigpe30scGxhY2Vob2xkZXI6IiIsdmFsdWU6e30sZXJyb3I6ITEsdG91Y2hlZDohMX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFMsIklucHV0VXNlclNlYXJjaCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJnZXRQaG90byIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJpc1ZhbGlkTmV3T3B0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvaW5wdXRVc2VyU2VhcmNoLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsIm5ld09wdGlvbkNyZWF0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC9pbnB1dFVzZXJTZWFyY2guanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwicHJvbXB0VGV4dENyZWF0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC9pbnB1dFVzZXJTZWFyY2guanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQSwibWFrZVVSTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJtYWtlT3B0aW9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihPLCJnZXRVc2VycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL2lucHV0VXNlclNlYXJjaC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvaW5wdXRVc2VyU2VhcmNoLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic2VsZWN0Mi1zZWFyY2gtdXNlcnMiOiJpbnB1dFVzZXJTZWFyY2hfX3NlbGVjdDItc2VhcmNoLXVzZXJzX19fMW5TR04ifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvdXNlcnNMaXN0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVc2Vyc0xpc3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlVzZXJzTGlzdH19KX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvaW52aXRlTmV3VXNlckl0ZW0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvaW52aXRlTmV3VXNlckl0ZW0vaW52aXRlTmV3VXNlckl0ZW0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkludml0ZU5ld1VzZXJJdGVtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnZpdGVOZXdVc2VySXRlbX19KX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvaW52aXRlTmV3VXNlckl0ZW0vaW52aXRlTmV3VXNlckl0ZW0uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbnZpdGVOZXdVc2VySXRlbT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxsPXIoYSksdT1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L2ludml0ZU5ld1VzZXJJdGVtL2ludml0ZU5ld1VzZXJJdGVtLnNjc3MiKSxjPXIodSksZD1sLmRlZmF1bHQuYmluZChjLmRlZmF1bHQpLF89dC5JbnZpdGVOZXdVc2VySXRlbT1mdW5jdGlvbih0KXt2YXIgbj10Lm9wdGlvbixyPXQub25DbGljaztyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgic2VsZWN0LW1lbnUtb3V0ZXIiKX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgic2VsZWN0LW1lbnUiKSxyb2xlOiJsaXN0Ym94In0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtvbkNsaWNrOnJ9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmQoImludml0ZS1uZXctdXNlciIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJtc2ctaWNvbiIpfSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiaW52aXRlLWluZm8iKX0sZS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOmQoInVzZXItaW5mbyIpfSxlLmNyZWF0ZUVsZW1lbnQoaS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5wdXRVc2VyU2VhcmNoLmludml0ZU5ld1VzZXIiLGRlZmF1bHRNZXNzYWdlOiJJbnZpdGUge3VzZXJFbWFpbH0iLHZhbHVlczp7dXNlckVtYWlsOm4ubGFiZWx9fSkpLGUuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZTpkKCJhY3Rpb24taW5mbyIpfSxlLmNyZWF0ZUVsZW1lbnQoaS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5wdXRVc2VyU2VhcmNoLmludml0ZU5ld1VzZXJJbmZvIixkZWZhdWx0TWVzc2FnZToiU2VuZCBpbnZpdGUgdmlhIGUtbWFpbCJ9KSkpKSkpKX07Xy5wcm9wVHlwZXM9e29wdGlvbjpzLmRlZmF1bHQub2JqZWN0LG9uQ2xpY2s6cy5kZWZhdWx0LmZ1bmN9LF8uZGVmYXVsdFByb3BzPXtvcHRpb246e30sb25DbGljazpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJJbnZpdGVOZXdVc2VySXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL3VzZXJzTGlzdC9pbnZpdGVOZXdVc2VySXRlbS9pbnZpdGVOZXdVc2VySXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL3VzZXJzTGlzdC9pbnZpdGVOZXdVc2VySXRlbS9pbnZpdGVOZXdVc2VySXRlbS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L2ludml0ZU5ld1VzZXJJdGVtL2ludml0ZU5ld1VzZXJJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW52aXRlLW5ldy11c2VyIjoiaW52aXRlTmV3VXNlckl0ZW1fX2ludml0ZS1uZXctdXNlcl9fXzF0cjdsIiwibXNnLWljb24iOiJpbnZpdGVOZXdVc2VySXRlbV9fbXNnLWljb25fX18xTlB0cyIsImludml0ZS1pbmZvIjoiaW52aXRlTmV3VXNlckl0ZW1fX2ludml0ZS1pbmZvX19fMi1MNUoiLCJhY3Rpb24taW5mbyI6Imludml0ZU5ld1VzZXJJdGVtX19hY3Rpb24taW5mb19fXzFkbEZmIiwidXNlci1pbmZvIjoiaW52aXRlTmV3VXNlckl0ZW1fX3VzZXItaW5mb19fXzFwTzJwIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL3VzZXJJdGVtLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVc2VySXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVXNlckl0ZW19fSl9LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL3VzZXJJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVXNlckl0ZW09dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL3VzZXJJdGVtLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5Vc2VySXRlbT1mdW5jdGlvbih0KXt2YXIgbj10LnVzZXJOYW1lLHI9dC51c2VyTG9naW4sbz10LnVzZXJBdmF0YXIscz10LmlzQXNzaWduZWQsaT10Lm9uQ2xpY2s7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoeyJ1c2VyLXNlYXJjaC1yZXN1bHQtd3JhcCI6ITAsImRpc2FibGVkLWl0ZW0iOnN9KSxvbkNsaWNrOml9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoInVzZXItYXZhdGFyIiksc3R5bGU6e2JhY2tncm91bmRJbWFnZToidXJsKCIrbysiKSJ9fSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YygidXNlci1zZWFyY2gtaW5mbyIpfSxlLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6YygidXNlci1zZWFyY2gtbmFtZSIpfSxuKSxlLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6YygidXNlci1zZWFyY2gtbG9naW4iKX0scikpLGUuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOmMoeyJhc3NpZ24tYnRuIjohMCwiYXNzaWduZWQtdXNlciI6c30pfSkpfTtkLnByb3BUeXBlcz17dXNlck5hbWU6cy5kZWZhdWx0LnN0cmluZyx1c2VyTG9naW46cy5kZWZhdWx0LnN0cmluZyx1c2VyQXZhdGFyOnMuZGVmYXVsdC5zdHJpbmcsaXNBc3NpZ25lZDpzLmRlZmF1bHQuYm9vbCxvbkNsaWNrOnMuZGVmYXVsdC5mdW5jfSxkLmRlZmF1bHRQcm9wcz17dXNlck5hbWU6IiIsdXNlckxvZ2luOiIiLHVzZXJBdmF0YXI6IiIsaXNBc3NpZ25lZDohMSxvbkNsaWNrOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlVzZXJJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL3VzZXJJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL3VzZXJJdGVtLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VXNlclNlYXJjaC91c2Vyc0xpc3QvdXNlckl0ZW0vdXNlckl0ZW0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ1c2VyLXNlYXJjaC1yZXN1bHQtd3JhcCI6InVzZXJJdGVtX191c2VyLXNlYXJjaC1yZXN1bHQtd3JhcF9fXzVXblEtIiwidXNlci1hdmF0YXIiOiJ1c2VySXRlbV9fdXNlci1hdmF0YXJfX18zUVpXdiIsInVzZXItc2VhcmNoLWluZm8iOiJ1c2VySXRlbV9fdXNlci1zZWFyY2gtaW5mb19fX2VBZXVIIiwidXNlci1zZWFyY2gtbmFtZSI6InVzZXJJdGVtX191c2VyLXNlYXJjaC1uYW1lX19fMTRVU0ciLCJ1c2VyLXNlYXJjaC1sb2dpbiI6InVzZXJJdGVtX191c2VyLXNlYXJjaC1sb2dpbl9fX0JnamdVIiwiYXNzaWduLWJ0biI6InVzZXJJdGVtX19hc3NpZ24tYnRuX19fM29DakoiLCJhc3NpZ25lZC11c2VyIjoidXNlckl0ZW1fX2Fzc2lnbmVkLXVzZXJfX18zTnZDeiIsImRpc2FibGVkLWl0ZW0iOiJ1c2VySXRlbV9fZGlzYWJsZWQtaXRlbV9fXzFid3ZnIn19LCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJzTGlzdC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVzZXJzTGlzdD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJJdGVtL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L2ludml0ZU5ld1VzZXJJdGVtL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJzTGlzdC5zY3NzIiksXz1yKGQpLHA9YS5kZWZhdWx0LmJpbmQoXy5kZWZhdWx0KSxmPXQuVXNlcnNMaXN0PWZ1bmN0aW9uKHQpe3ZhciBuPXQub3B0aW9ucyxyPXQuc2VsZWN0VmFsdWU7cmV0dXJuIG5bMF0mJm5bMF0uZXh0ZXJuYWxVc2VyP2UuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInVzZXJzLWxpc3QiKX0sZS5jcmVhdGVFbGVtZW50KGMuSW52aXRlTmV3VXNlckl0ZW0se29wdGlvbjpuWzBdLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcihuWzBdKX19KSk6ZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgidXNlcnMtbGlzdCIpfSxlLmNyZWF0ZUVsZW1lbnQobC5TY3JvbGxXcmFwcGVyLHthdXRvSGVpZ2h0OiEwLGF1dG9IZWlnaHRNYXg6MjAwfSxuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KHUuVXNlckl0ZW0se2tleTp0LnVzZXJMb2dpbixvbkNsaWNrOmZ1bmN0aW9uKCl7dC5kaXNhYmxlZHx8cih0KX0sdXNlck5hbWU6dC51c2VyTmFtZSx1c2VyTG9naW46dC51c2VyTG9naW4saXNBc3NpZ25lZDp0LmlzQXNzaWduZWQsdXNlckF2YXRhcjp0LnVzZXJBdmF0YXJ9KX0pKSl9O2YucHJvcFR5cGVzPXtvcHRpb25zOnMuZGVmYXVsdC5hcnJheSxzZWxlY3RWYWx1ZTpzLmRlZmF1bHQuZnVuY30sZi5kZWZhdWx0UHJvcHM9e29wdGlvbnM6W10sc2VsZWN0VmFsdWU6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiVXNlcnNMaXN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFVzZXJTZWFyY2gvdXNlcnNMaXN0L3VzZXJzTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL3VzZXJzTGlzdC91c2Vyc0xpc3QuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRVc2VyU2VhcmNoL3VzZXJzTGlzdC91c2Vyc0xpc3Quc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ1c2Vycy1saXN0IjoidXNlcnNMaXN0X191c2Vycy1saXN0X19fMVNmNkMifX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0V2l0aEljb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0V2l0aEljb24vaW5wdXRXaXRoSWNvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5wdXRXaXRoSWNvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSW5wdXRXaXRoSWNvbn19KX0sIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0V2l0aEljb24vaW5wdXRXaXRoSWNvbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW5wdXRXaXRoSWNvbj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5kZXguanMiKSxkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaWNvbixuPSgwLHMuZGVmYXVsdCkoZSxbImljb24iXSk7cmV0dXJuIGEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGkuRnJhZ21lbnQsbnVsbCxhLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLklucHV0LG4pLHQpfTt0LklucHV0V2l0aEljb249ZCxkLnByb3BUeXBlcz17aWNvbjp1LmRlZmF1bHQubm9kZX0sZC5kZWZhdWx0UHJvcHM9e2ljb246bnVsbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiSW5wdXRXaXRoSWNvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRXaXRoSWNvbi9pbnB1dFdpdGhJY29uLmpzeCIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvYWJzUmVsVGltZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFic1JlbFRpbWU9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx4PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxMPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvYWJzUmVsVGltZS5zY3NzIiksdz1yKEQpLE09e0Fic1JlbFRpbWU6e2Rpc3BsYXlOYW1lOiJBYnNSZWxUaW1lIn19LGs9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvYWJzUmVsVGltZS5qc3giLGNvbXBvbmVudHM6TSxsb2NhbHM6W2VdLGltcG9ydHM6W3YuZGVmYXVsdF19KSxJPSgwLEUuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2Fic1JlbFRpbWUuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W3YuZGVmYXVsdCxnLmRlZmF1bHRdfSksUD1SLmRlZmF1bHQuYmluZCh3LmRlZmF1bHQpLE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBrKEkodCxlKSxlKX19KCJBYnNSZWxUaW1lIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci50b2dnbGVGb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZUZvcm1hdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pc1JlbGF0aXZlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc1JlbGF0aXZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAscC5kZWZhdWx0KShyLG8pfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6Il9faXNSZWxhdGl2ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNSZWxhdGl2ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlRm9ybWF0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVGb3JtYXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUZvcm1hdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuc2V0U3RhcnRUaW1lRm9ybWF0QWN0aW9uKHRoaXMuaXNSZWxhdGl2ZSgpP3guU1RBUlRfVElNRV9GT1JNQVRfQUJTT0xVVEU6eC5TVEFSVF9USU1FX0ZPUk1BVF9SRUxBVElWRSl9fSx7a2V5OiJfX2lzUmVsYXRpdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5zdGFydFRpbWVGb3JtYXQ9PT14LlNUQVJUX1RJTUVfRk9STUFUX1JFTEFUSVZFfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoImFicy1yZWwtdGltZSIse3JlbGF0aXZlOnRoaXMuaXNSZWxhdGl2ZSgpfSx0aGlzLnByb3BzLmN1c3RvbUNsYXNzKSxvbkNsaWNrOnRoaXMudG9nZ2xlRm9ybWF0fSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpQKCJyZWxhdGl2ZS10aW1lIil9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGouRm9ybWF0dGVkUmVsYXRpdmUse3ZhbHVlOnRoaXMucHJvcHMuc3RhcnRUaW1lfSkpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoImFic29sdXRlLXRpbWUiKX0sKDAsTC5kYXRlRm9ybWF0KSh0aGlzLnByb3BzLnN0YXJ0VGltZSkpKX19XSksdH0oeS5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtzdGFydFRpbWU6Ty5kZWZhdWx0Lm51bWJlcixzdGFydFRpbWVGb3JtYXQ6Ty5kZWZhdWx0Lm9uZU9mKFt4LlNUQVJUX1RJTUVfRk9STUFUX1JFTEFUSVZFLHguU1RBUlRfVElNRV9GT1JNQVRfQUJTT0xVVEVdKSxzZXRTdGFydFRpbWVGb3JtYXRBY3Rpb246Ty5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxjdXN0b21DbGFzczpPLmRlZmF1bHQuc3RyaW5nfSxvLmRlZmF1bHRQcm9wcz17c3RhcnRUaW1lOjAsc3RhcnRUaW1lRm9ybWF0OnguU1RBUlRfVElNRV9GT1JNQVRfUkVMQVRJVkUsY3VzdG9tQ2xhc3M6IiJ9LHMpKTt0LkFic1JlbFRpbWU9TjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2Fic1JlbFRpbWUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiQWJzUmVsVGltZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvYWJzUmVsVGltZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2Fic1JlbFRpbWUuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhYnMtcmVsLXRpbWUiOiJhYnNSZWxUaW1lX19hYnMtcmVsLXRpbWVfX18ycGZiVyIsInJlbGF0aXZlLXRpbWUiOiJhYnNSZWxUaW1lX19yZWxhdGl2ZS10aW1lX19fMTlmNWIiLCJhYnNvbHV0ZS10aW1lIjoiYWJzUmVsVGltZV9fYWJzb2x1dGUtdGltZV9fXzF1Vi05IixyZWxhdGl2ZToiYWJzUmVsVGltZV9fcmVsYXRpdmVfX18zU21DQSJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWJzUmVsVGltZT12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2Fic1JlbFRpbWUuanN4IiksaT1mdW5jdGlvbihlKXtyZXR1cm57c3RhcnRUaW1lRm9ybWF0OigwLG8uc3RhcnRUaW1lRm9ybWF0U2VsZWN0b3IpKGUpfX0sYT17c2V0U3RhcnRUaW1lRm9ybWF0QWN0aW9uOm8uc2V0U3RhcnRUaW1lRm9ybWF0QWN0aW9ufSxsPSgwLHIuY29ubmVjdCkoaSxhKSx1PWwocy5BYnNSZWxUaW1lKTt0LkFic1JlbFRpbWU9dTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwibWFwU3RhdGVUb1Byb3BzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYWJzUmVsVGltZS9pbmRleC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImFjdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwid2l0aENvbm5lY3QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiQ29ubmVjdGVkQWJzUmVsVGltZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2Fic1JlbFRpbWUvaW5kZXguanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYWNjb3JkaW9uQ29udGFpbmVyL2FjY29yZGlvbkNvbnRhaW5lci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWNjb3JkaW9uQ29udGFpbmVyPXZvaWQgMDt2YXIgcyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1vKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPW8ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPW8obSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksYj1vKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9byh2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksQz1vKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGo9byhSKSx4PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hY2NvcmRpb25Db250YWluZXIvYWNjb3JkaW9uQ29udGFpbmVyLnNjc3MiKSxMPW8oeCksRD17QWNjb3JkaW9uQ29udGFpbmVyOntkaXNwbGF5TmFtZToiQWNjb3JkaW9uQ29udGFpbmVyIn19LHc9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FjY29yZGlvbkNvbnRhaW5lci9hY2NvcmRpb25Db250YWluZXIuanN4Iixjb21wb25lbnRzOkQsbG9jYWxzOltlXSxpbXBvcnRzOltULmRlZmF1bHRdfSksTT0oMCx5LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYWNjb3JkaW9uQ29udGFpbmVyL2FjY29yZGlvbkNvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6RCxsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSxrPWouZGVmYXVsdC5iaW5kKEwuZGVmYXVsdCksST10LkFjY29yZGlvbkNvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHcoTSh0LGUpLGUpfX0oIkFjY29yZGlvbkNvbnRhaW5lciIpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2V4cGFuZGVkOiExLHdpdGhBY2NvcmRpb246ITF9LHIuc2V0dXBSZWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldHVwQWNjb3JkaW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cEFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW1vdmVBY2NvcmRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbW92ZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVBY2NvcmRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50b2dnbGVBY2NvcmRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGYuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJfX3RvZ2dsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVtb3ZlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cEFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVBY2NvcmRpb24oKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZUFjY29yZGlvbigpfX0se2tleToiX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQ9ZX19LHtrZXk6Il9fc2V0dXBBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHt3aXRoQWNjb3JkaW9uOiEwfSksdGhpcy5lbGVtZW50LnN0eWxlLm1heEhlaWdodD10aGlzLnByb3BzLm1heEhlaWdodCsicHgifX0se2tleToiX19yZW1vdmVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHt3aXRoQWNjb3JkaW9uOiExfSksdGhpcy5lbGVtZW50LnN0eWxlLm1heEhlaWdodD1udWxsfX0se2tleToiX19oYW5kbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQmJih0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0PnRoaXMucHJvcHMubWF4SGVpZ2h0PyF0aGlzLnN0YXRlLndpdGhBY2NvcmRpb24mJnRoaXMuc2V0dXBBY2NvcmRpb24oKTp0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0PHRoaXMucHJvcHMubWF4SGVpZ2h0JiZ0aGlzLnN0YXRlLndpdGhBY2NvcmRpb24mJnRoaXMucmVtb3ZlQWNjb3JkaW9uKCkpfX0se2tleToiX190b2dnbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtleHBhbmRlZDohdGhpcy5zdGF0ZS5leHBhbmRlZH0pLHRoaXMuZWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5zdGF0ZS5leHBhbmRlZD90aGlzLnByb3BzLm1heEhlaWdodCsicHgiOm51bGx9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS53aXRoQWNjb3JkaW9uP2soIm92ZXJmbG93Iik6bnVsbDtyZXR1cm4gci5jcmVhdGVFbGVtZW50KHYuRnJhZ21lbnQsbnVsbCx0aGlzLnByb3BzLmNoaWxkcmVuKHtzZXR1cFJlZjp0aGlzLnNldHVwUmVmLGNsYXNzTmFtZTplfSksdGhpcy5zdGF0ZS53aXRoQWNjb3JkaW9uJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTprKCJhY2NvcmRpb24tYmxvY2siLHtleHBhbmRlZDp0aGlzLnN0YXRlLmV4cGFuZGVkfSl9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmsoeyJhY2NvcmRpb24tdG9nZ2xlciI6ITAscm90YXRlZDp0aGlzLnN0YXRlLmV4cGFuZGVkfSksb25DbGljazp0aGlzLnRvZ2dsZUFjY29yZGlvbn0pKSl9fV0pLHR9KHYuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17Y2hpbGRyZW46Uy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxtYXhIZWlnaHQ6Uy5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfSxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEksIkFjY29yZGlvbkNvbnRhaW5lciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FjY29yZGlvbkNvbnRhaW5lci9hY2NvcmRpb25Db250YWluZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hY2NvcmRpb25Db250YWluZXIvYWNjb3JkaW9uQ29udGFpbmVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYWNjb3JkaW9uQ29udGFpbmVyL2FjY29yZGlvbkNvbnRhaW5lci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17b3ZlcmZsb3c6ImFjY29yZGlvbkNvbnRhaW5lcl9fb3ZlcmZsb3dfX18yeE54SSIsImFjY29yZGlvbi1ibG9jayI6ImFjY29yZGlvbkNvbnRhaW5lcl9fYWNjb3JkaW9uLWJsb2NrX19fMm9TQjMiLGV4cGFuZGVkOiJhY2NvcmRpb25Db250YWluZXJfX2V4cGFuZGVkX19fMzRuZTQiLCJhY2NvcmRpb24tdG9nZ2xlciI6ImFjY29yZGlvbkNvbnRhaW5lcl9fYWNjb3JkaW9uLXRvZ2dsZXJfX18yalB5TCIscm90YXRlZDoiYWNjb3JkaW9uQ29udGFpbmVyX19yb3RhdGVkX19fVWlCTy0ifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hY2NvcmRpb25Db250YWluZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hY2NvcmRpb25Db250YWluZXIvYWNjb3JkaW9uQ29udGFpbmVyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBY2NvcmRpb25Db250YWluZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFjY29yZGlvbkNvbnRhaW5lcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFuYWx5dGljc1dyYXBwZXI9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxMPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vaW5kZXguanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZ2EvZGlzdC9yZWFjdC1nYS5qcyIpLGs9cihNKSxJPXtBbmFseXRpY3NXcmFwcGVyOntkaXNwbGF5TmFtZToiQW5hbHl0aWNzV3JhcHBlciJ9fSxQPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxOPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxIPXQuQW5hbHl0aWNzV3JhcHBlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0LGUpLGUpfX0oIkFuYWx5dGljc1dyYXBwZXIiKSgobz0oMCx4LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntpbnN0YW5jZUlkOigwLEwuaW5zdGFuY2VJZFNlbGVjdG9yKShlKX19KSxzPSgwLHcuZGVmYXVsdCkoe30se2Rpc3BhdGNoOmZ1bmN0aW9uKGUpe2UuYWN0aW9uVHlwZSYmInBhZ2V2aWV3Ij09PWUuYWN0aW9uVHlwZT9rLmRlZmF1bHQucGFnZXZpZXcoZS5wYWdlKTprLmRlZmF1bHQuZXZlbnQoZSl9LHByb2Nlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFnZT97YWN0aW9uVHlwZToicGFnZXZpZXcifTpudWxsfX0pLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2suZGVmYXVsdC5pbml0aWFsaXplKCJVQS05NjMyMTAzMS0xIiksay5kZWZhdWx0LnBhZ2V2aWV3KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxrLmRlZmF1bHQuc2V0KHtkaW1lbnNpb24xOnRoaXMucHJvcHMuaW5zdGFuY2VJZH0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVufX1dKSx0fShBLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2luc3RhbmNlSWQ6ai5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGNoaWxkcmVuOmouZGVmYXVsdC5ub2RlfSxhLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46bnVsbH0saT1sKSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIkFuYWx5dGljc1dyYXBwZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigicGFnZXZpZXciLCJQQUdFX1ZJRVciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigiVUEtOTYzMjEwMzEtMSIsIkdPT0dMRV9BTkFMWVRJQ1NfSU5TVEFOQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvQW5hbHl0aWNzV3JhcHBlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2FkbWluQWxsVXNlcnNQYWdlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5BRE1JTl9BTExfVVNFUlNfUEFHRV9NT0RBTF9FVkVOVFM9e0NMT1NFX0lDT05fREVMRVRFX01PREFMOntjYXRlZ29yeToiQWRtaW4gYWxsIHVzZXJzIHBhZ2UgbW9kYWwiLGFjdGlvbjonQ2xpY2sgb24gQ2xvc2UgSWNvbiBvbiBNb2RhbCAiRGVsZXRlIHVzZXJzIicsbGFiZWw6IkNsb3NlIE1vZGFsIERlbGV0ZSB1c2VyIn0sQ0FOQ0VMX0JUTl9ERUxFVEVfTU9EQUw6e2NhdGVnb3J5OiJBZG1pbiBhbGwgdXNlcnMgcGFnZSBtb2RhbCIsYWN0aW9uOidDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCAiRGVsZXRlIHVzZXIiJyxsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIHVzZXIifSxPS19CVE5fREVMRVRFX01PREFMOntjYXRlZ29yeToiQWRtaW4gYWxsIHVzZXJzIHBhZ2UgbW9kYWwiLGFjdGlvbjonQ2xpY2sgb24gQnR0biBPayBvbiBNb2RhbCAiRGVsZXRlIHVzZXIiJyxsYWJlbDoiRGVsZXRlIHVzZXIifX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkFETUlOX0FMTF9VU0VSU19QQUdFX01PREFMX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvYWRtaW5BbGxVc2Vyc1BhZ2VzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoIkFkbWluIGFsbCB1c2VycyBwYWdlIG1vZGFsIiwiQURNSU5fQUxMX1VTRVJTX1BBR0VfTU9EQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2FkbWluQWxsVXNlcnNQYWdlcy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2Rhc2hib2FyZHNQYWdlRXZlbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkRBU0hCT0FSRF9QQUdFPSJkYXNoYm9hcmRzIixvPXQuREFTSEJPQVJEX1BBR0VfRVZFTlRTPXtBRERfTkVXX0RBU0hCT0FSRF9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBOZXcgRGFzaGJvYXJkIixsYWJlbDoiQXJpc2UgTW9kYWwgQWRkIE5ldyBEYXNoYm9hcmQifSxFTlRFUl9QQVJBTV9GT1JfU0VBUkNIOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgcGFyYW1ldGVyIGZvciBzZWFyY2giLGxhYmVsOiJTaG93IGRhc2hib2FyZHMgYnkgcGFyYW1ldGVyIn0sREFTSEJPQVJEX05BTUVfQ0xJQ0s6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBEYXNoYm9hcmQgbmFtZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gRGFzaGJvYXJkIn0sREVMRVRFX0lDT05fREFTSEJPQVJEX1RJTEU6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIENsb3NlIG9uIERhc2hib2FyZCB0aWxlIixsYWJlbDoiQXJpc2UgTW9kYWwgRGVsZXRlIERhc2hib2FyZCJ9LFNIQVJFRF9EQVNIQk9BUkRfTkFNRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIFNoYXJlZCBEYXNoYm9hcmQgbmFtZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gRGFzaGJvYXJkIn0sQ0xPU0VfSUNPTl9BRERfTkVXX0RBU0hCT0FSRF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgQWRkIE5ldyBEYXNoYm9hcmQiLGxhYmVsOiJDbG9zZSBNb2RhbCBBZGQgTmV3IERhc2hib2FyZCJ9LEVOVEVSX0RFU0NSSVBUSU9OX0FERF9ORVdfREFTSEJPQVJEX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgZGVzY3JpcHRpb24gaW4gTW9kYWwgQWRkIE5ldyBEYXNoYm9hcmQiLGxhYmVsOiJEZXNjcmlwdGlvbiJ9LFNIQVJFX1NXSVRDSEVSX0FERF9ORVdfREFTSEJPQVJEX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gU2hhcmUgb24vb2ZmIGluIE1vZGFsIEFkZCBOZXcgRGFzaGJvYXJkIixsYWJlbDoiU2hhcmUvdW5zaGFyZSBEYXNoYm9hcmQifSxDQU5DRUxfQlROX0FERF9ORVdfREFTSEJPQVJEX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgaW4gTW9kYWwgQWRkIE5ldyBEYXNoYm9hcmQiLGxhYmVsOiJDbG9zZSBNb2RhbCBBZGQgTmV3IERhc2hib2FyZCJ9LEFERF9CVE5fQUREX05FV19EQVNIQk9BUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBpbiBNb2RhbCBBZGQgTmV3IERhc2hib2FyZCIsbGFiZWw6IkFkZCBEYXNoYm9hcmQifSxDTE9TRV9JQ09OX0VESVRfREFTSEJPQVJEX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBFZGl0IERhc2hib2FyZCIsbGFiZWw6IkNsb3NlIE1vZGFsIEVkaXQgRGFzaGJvYXJkIn0sRU5URVJfREVTQ1JJUFRJT05fRURJVF9EQVNIQk9BUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJFbnRlciBkZXNjcmlwdGlvbiBpbiBNb2RhbCBFZGl0IERhc2hib2FyZCIsbGFiZWw6IkRlc2NyaXB0aW9uIn0sU0hBUkVfU1dJVENIRVJfRURJVF9EQVNIQk9BUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBTaGFyZSBvbi9vZmYgaW4gTW9kYWwgRWRpdCBEYXNoYm9hcmQiLGxhYmVsOiJTaGFyZS91bnNoYXJlIERhc2hib2FyZCJ9LENBTkNFTF9CVE5fRURJVF9EQVNIQk9BUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBpbiBNb2RhbCBFZGl0IERhc2hib2FyZCIsbGFiZWw6IkNsb3NlIE1vZGFsIEVkaXQgRGFzaGJvYXJkIn0sVVBEQVRFX0JUTl9FRElUX0RBU0hCT0FSRF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gVXBkYXRlIGluIE1vZGFsIEVkaXQgRGFzaGJvYXJkIixsYWJlbDoiVXBkYXRlIERhc2hib2FyZCJ9LENMT1NFX0lDT05fREVMRVRFX0RBU0hCT0FSRF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgRGVsZXRlIERhc2hib2FyZCIsbGFiZWw6IkNsb3NlIE1vZGFsIERlbGV0ZSBEYXNoYm9hcmQifSxDQU5DRUxfQlROX0RFTEVURV9EQVNIQk9BUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBpbiBNb2RhbCBEZWxldGUgRGFzaGJvYXJkIixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIERhc2hib2FyZCJ9LERFTEVURV9CVE5fREVMRVRFX0RBU0hCT0FSRF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gRGVsZXRlIGluIE1vZGFsIERlbGV0ZSBEYXNoYm9hcmQiLGxhYmVsOiJEZWxldGUgRGFzaGJvYXJkIn0sQlJFQURDUlVNQl9BTExfREFTSEJPQVJEOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnJlYWQgQ3J1bWIgQWxsIERhc2hib2FyZHMiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEFsbCBEYXNoYm9hcmRzIn0sQUREX05FV19XSURHRVRfQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBBZGQgTmV3IFdpZGdldCBvbiBEYXNoYm9hcmQiLGxhYmVsOiJBcmlzZSBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LEFERF9TSEFSRURfV0lER0VUX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQWRkIFNoYXJlZCBXaWRnZXQgb24gRGFzaGJvYXJkIixsYWJlbDoiQXJpc2UgTW9kYWwgQWRkIFNoYXJlZCBXaWRnZXQifSxFRElUX0RBU0hCT0FSRF9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEVkaXQgb24gRGFzaGJvYXJkIixsYWJlbDoiQXJpc2UgTW9kYWwgRWRpdCBEYXNoYm9hcmQifSxGVUxMX1NDUkVFTl9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEZ1bGwgU2NyZWVuIG9uIERhc2hib2FyZCIsbGFiZWw6IkZ1bGwgU2NyZWVuIG9mIERhc2hib2FyZCJ9LERFTEVURV9EQVNIQk9BUkQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFJlbW92ZSBvbiBEYXNoYm9hcmQiLGxhYmVsOiJBcmlzZSBNb2RhbCBEZWxldGUgRGFzaGJvYXJkIn0sRFJBR19XSURHRVQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBhbmQgZHJhZyBXaWRnZXQiLGxhYmVsOiJNb3ZlIFdpZGdldCJ9LEVESVRfV0lER0VUOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBFZGl0IG9uIFdpZGdldCIsbGFiZWw6IkFyaXNlIE1vZGFsIEVkaXQgV2lkZ2V0In0sUkVGUkVTSF9XSURHRVQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIFJlZnJlc2ggb24gV2lkZ2V0IixsYWJlbDoiUmVmcmVzaCBXaWRnZXQifSxSRU1PVkVfV0lER0VUOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBSZW1vdmUgb24gV2lkZ2V0IixsYWJlbDoiQXJpc2UgTW9kYWwgRGVsZXRlIFdpZGdldCJ9LFJFU0laRV9XSURHRVQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBhbmQgZHJhZyBvbiBpY29uIFJlc2l6ZSBvbiBXaWRnZXQiLGxhYmVsOiJSZXNpemUgV2lkZ2V0In0sQ0xPU0VfSUNPTl9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IkNsb3NlIE1vZGFsIEFkZCBOZXcgV2lkZ2V0In0sQ0hPT1NFX1dJREdFVF9UWVBFX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDaG9vc2UgcmFkaW8gYnR0biBvZiBXaWRnZXQgdHlwZSBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IkNob29zZSBXaWRnZXQgdHlwZSBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LE5FWFRfU1RFUF9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBOZXh0IFN0ZXAgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIE5leHQgU3RlcCBvbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LEVOVEVSX1BBUkFNU19GT1JfU0VBUkNIX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJFbnRlciBwYXJhbWV0ZXIgZm9yIHNlYXJjaCIsbGFiZWw6IlNob3cgZmlsdGVyIGJ5IHBhcmFtZXRlciJ9LEFERF9GSUxURVJfQlROX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBGaWx0ZXIgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJBcmlzZSBmaWVsZHMgZm9yIGFkZGluZyBuZXcgZmlsdGVyIn0sQ0hPT1NFX0ZJTFRFUl9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gcmFkaW8gYnR0biBvZiBGaWx0ZXIgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJDaG9vc2UgZmlsdGVyIn0sRURJVF9GSUxURVJfQUREX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gRWRpdCBGaWx0ZXIgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJBcmlzZSBmaWVsZHMgdG8gZWRpdCBmaWx0ZXIifSxQUkVWSU9VU19TVEVQX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFByZXZpb3VzIFN0ZXAgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIFByZXZpb3VzIFN0ZXAgaW4gTW9kYWwgQWRkIE5ldyBXaWRnZXQifSxTRUxFQ1RfUEFSQU1TX05FV19GSUxURVJfQUREX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IlNlbGVjdCBwYXJhbWV0ZXJzIG9mIG5ldyBmaWx0ZXIgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQiLGxhYmVsOiJTaG93IHBhcmFtZXRlcnMgb2YgbmV3IGZpbHRlciBvbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LFNFTEVDVF9TT1JUSU5HX05FV19GSUxURVJfQUREX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IlNlbGVjdCBwYXJhbWV0ZXJzIG9mIHNvcnRpbmcgaW4gbmV3IGZpbHRlciBvbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IlNob3cgcGFyYW1ldGVycyBvZiBzb3J0aW5nIGluIG5ldyBmaWx0ZXIgb24gTW9kYWwgQWRkIE5ldyBXaWRnZXQifSxDQU5DRUxfQlROX0FERF9ORVdfRklMVEVSX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBpbiBBZGQgbmV3IGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IkNhbmNlbCBhZGRpbmcgbmV3IGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LEFERF9CVE5fQUREX05FV19GSUxURVJfQUREX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQWRkIGluIEFkZCBuZXcgZmlsdGVyIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiQWRkIG5ldyBmaWx0ZXIgaW4gTW9kYWwgQWRkIE5ldyBXaWRnZXQifSxFRElUX0ZJTFRFUl9OQU1FX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJFZGl0IGZpbHRlciBuYW1lIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiRWRpdGVkIGZpbHRlciBuYW1lIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0In0sU0VMRUNUX1BBUkFNU19GT1JfRURJVEVEX0ZJTFRFUl9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiU2VsZWN0IHBhcmFtZXRlcnMgb2YgZWRpdGVkIGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IlNob3cgcGFyYW1ldGVycyBvZiBlZGl0ZWQgZmlsdGVyIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0In0sU0VMRUNUX1NPUlRJTkdfRURJVEVEX0ZJTFRFUl9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiU2VsZWN0IHBhcmFtZXRlcnMgb2Ygc29ydGluZyBpbiBlZGl0ZWQgZmlsdGVyIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiU2hvdyBwYXJhbWV0ZXJzIG9mIHNvcnRpbmcgb2YgZWRpdGVkIGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LENBTkNFTF9CVE5fRURJVF9GSUxURVJfQUREX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIGluIEVkaXQgZmlsdGVyIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiQ2FuY2VsIEVkaXQgZmlsdGVyIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0In0sU1VCTUlUX0ZJTFRFUl9FRElUX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBpbiBFZGl0IGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IlN1Ym1pdCBjaGFuZ2VzIGluIGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LEVOVEVSX1dJREdFVF9ERVNDUklQVElPTl9BRERfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgV2lkZ2V0IGRlc2NyaXB0aW9uIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiV2lkZ2V0IGRlc2NyaXB0aW9uIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0In0sU0hBUkVfV0lER0VUX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBTaGFyZSBXaWRnZXQgb24vb2ZmIGluIE1vZGFsIEFkZCBOZXcgV2lkZ2V0IixsYWJlbDoiU2hhcmUvdW5zaGFyZSBXaWRnZXQifSxBRERfQlROX0FERF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCIsbGFiZWw6IlN1Ym1pdCBjaGFuZ2VzIGluIGZpbHRlciBpbiBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LENMT1NFX0lDT05fU0hBUkVfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBBZGQgU2hhcmVkIFdpZGdldCIsbGFiZWw6IkNsb3NlIE1vZGFsIEFkZCBTaGFyZWQgV2lkZ2V0In0sV0lER0VUX1RZUEVfU0hBUkVfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2hvb3NlIHJhZGlvIGJ0dG4gb2YgV2lkZ2V0IHR5cGUgaW4gTW9kYWwgQWRkIFNoYXJlZCBXaWRnZXQiLGxhYmVsOiJDaG9vc2UgV2lkZ2V0IHR5cGUgaW4gTW9kYWwgQWRkIFNoYXJlZCBXaWRnZXQifSxTQ1JPTExfV0lER0VUX1NIQVJFX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IlNjcm9sbCB3aWRnZXRzIGluIE1vZGFsIEFkZCBTaGFyZWQgV2lkZ2V0IixsYWJlbDoiU2Nyb2xsIHdpZGdldHMgaW4gTW9kYWwgQWRkIFNoYXJlZCBXaWRnZXQifSxDQU5DRUxfQlROX1NIQVJFX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIGluIE1vZGFsIEFkZCBTaGFyZWQgV2lkZ2V0IixsYWJlbDoiQ2FuY2VsIE1vZGFsIEFkZCBTaGFyZWQgV2lkZ2V0In0sQUREX0JUTl9TSEFSRV9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBpbiBNb2RhbCBBZGQgU2hhcmVkIFdpZGdldCIsbGFiZWw6IkFkZCBTaGFyZWQgV2lkZ2V0In0sQ0xPU0VfSUNPTl9FRElUX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJDbG9zZSBNb2RhbCBFZGl0IFdpZGdldCJ9LEVESVRfRklMVEVSX0lDT05fRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIEVkaXQgRmlsdGVyIG9uIE1vZGFsIEVkaXQgV2lkZ2V0IixsYWJlbDoiQXJpc2UgZmllbGRzIHRvIGVkaXQgZmlsdGVyIGluIE1vZGFsIEVkaXQgV2lkZ2V0In0sV0lER0VUX05BTUVfRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDaGFuZ2UgV2lkZ2V0IG5hbWUgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJOZXcgV2lkZ2V0IG5hbWUgaW4gTW9kYWwgRWRpdCBXaWRnZXQifSxXSURHRVRfREVTQ1JJUFRJT05fRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDaGFuZ2UgV2lkZ2V0IGRlc2NyaXB0aW9uIGluIE1vZGFsIEVkaXQgV2lkZ2V0IixsYWJlbDoiTmV3IFdpZGdldCBkZXNjcmlwdGlvbiBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LFNIQVJFX1dJREdFVF9FRElUX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIFNoYXJlIFdpZGdldCBvbi9vZmYgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJTaGFyZS91bnNoYXJlIFdpZGdldCJ9LENBTkNFTF9CVE5fRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IkNsb3NlIE1vZGFsIEVkaXQgV2lkZ2V0In0sU0FWRV9CVE5fRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFNhdmUgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJTYXZlIGNoYW5nZXMgaW4gTW9kYWwgRWRpdCBXaWRnZXQifSxFTlRFUl9TRUFSQ0hfUEFSQU1TX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgcGFyYW1ldHIgZm9yIHNlYXJjaCBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IlNob3cgZmlsdGVyIGJ5IHBhcmFtZXRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LEFERF9GSUxURVJfQlROX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBBZGQgRmlsdGVyIGluIE1vZGFsIEVkaXQgV2lkZ2V0IixsYWJlbDoiQXJpc2UgZmllbGRzIGZvciBhZGRpbmcgbmV3IGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LENIT09TRV9GSUxURVJfRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiByYWRpbyBidHRuIG9mIEZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IkNob29zZSBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQifSxDQU5DRUxfRURJVF9GSUxURVJfQlROX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgaW4gRWRpdCBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJDbG9zZSBFZGl0IGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LFNVQk1JVF9DSEFOR0VTX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBTdWJtaXQgZmlsdGVyIGNoYW5nZSBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IlNhdmUgZmlsdGVyIGNoYW5nZSBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LFBBUkFNU19GT1JfTkVXX0ZJTFRFUl9FRElUX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IlNlbGVjdCBwYXJhbWV0ZXJzIG9mIG5ldyBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJTaG93IHBhcmFtZXRlcnMgb2YgbmV3IGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LFNPUlRJTkdfRk9SX05FV19GSUxURVJfRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJTZWxlY3QgcGFyYW1ldGVycyBvZiBzb3J0aW5nIGluIG5ldyBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJTaG93IHBhcmFtZXRlcnMgb2Ygc29ydGluZyBvZiBuZXcgZmlsdGVyIGluIE1vZGFsIEVkaXQgV2lkZ2V0In0sQ0FOQ0VMX0JUTl9BRERfTkVXX0ZJTFRFUl9FRElUX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIGluIGFkZCBuZXcgZmlsdGVyIGluIE1vZGFsIEVkaXQgV2lkZ2V0IixsYWJlbDoiQ2FuY2VsIGFkZCBuZXcgZmlsdGVyIGluIE1vZGFsIEVkaXQgV2lkZ2V0In0sQUREX05FV19GSUxURVJfQlROX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBBZGQgaW4gYWRkIG5ldyBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJBZGQgbmV3IGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LEVESVRfRklMVEVSX1BBUkFNU19FRElUX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgZmlsdGVyIHBhcmFtZXRycyBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IlNob3cgbmV3IGZpbHRlciBwYXJhbWV0ZXJzIGluIE1vZGFsIEVkaXQgV2lkZ2V0In0sQ0FOQ0VMX0VESVRfRklMVEVSX0VESVRfV0lER0VUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgaW4gRWRpdCBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQiLGxhYmVsOiJDYW5jZWwgRWRpdCBmaWx0ZXIgaW4gTW9kYWwgRWRpdCBXaWRnZXQifSxTVUJNSVRfRURJVF9GSUxURVJfRURJVF9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBpbiBFZGl0IGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCIsbGFiZWw6IlN1Ym1pdCBjaGFuZ2VzIGluIGZpbHRlciBpbiBNb2RhbCBFZGl0IFdpZGdldCJ9LENMT1NFX0lDT05fREVMRVRFX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEljb24gQ2xvc2Ugb24gTW9kYWwgRGVsZXRlIFdpZGdldCIsbGFiZWw6IkNsb3NlIE1vZGFsIERlbGV0ZSBXaWRnZXQifSxDQU5DRUxfQlROX0RFTEVURV9XSURHRVRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCBEZWxldGUgV2lkZ2V0IixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIFdpZGdldCJ9LERFTEVURV9CVE5fREVMRVRFX1dJREdFVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gRGVsZXRlIG9uIE1vZGFsIERlbGV0ZSBXaWRnZXQiLGxhYmVsOiJEZWxldGUgV2lkZ2V0In0sRURJVF9XSURHRVRfTEVHRU5EOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBXaWRnZXQgbGVnZW5kIixsYWJlbDoiQ2hhbmdlIFdpZGdldCBsZWdlbmQifSxXSURHRVRfQ0xJQ0s6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBXaWRnZXQiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIGxhdW5jaGVzIHBhZ2UifSxBRERfTkVXX1dJREdFVF9MSU5LOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gbGluayBBZGQgTmV3IFdpZGdldCBvbiBEYXNoYm9hcmQiLGxhYmVsOiJBcmlzZSBNb2RhbCBBZGQgTmV3IFdpZGdldCJ9LEFERF9ORVdfV0lER0VUX0VNUFRZX1BBR0U6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBOZXcgRGFzaGJvYXJkIG9uIGVtcHR5IHBhZ2UiLGxhYmVsOiJBcmlzZSBNb2RhbCBBZGQgTmV3IERhc2hib2FyZCJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiREFTSEJPQVJEX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2Rhc2hib2FyZHNQYWdlRXZlbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiREFTSEJPQVJEX1BBR0VfRVZFTlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9kYXNoYm9hcmRzUGFnZUV2ZW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2ZpbHRlcnNQYWdlRXZlbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkZJTFRFUlNfUEFHRT0iZmlsdGVycyIsbz10LkZJTFRFUlNfUEFHRV9FVkVOVFM9e1NFQVJDSF9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOiJFbnRlciBwYXJhbWV0ZXIgZm9yIHNlYXJjaCIsbGFiZWw6IlNob3cgZmlsdGVycyBieSBwYXJhbWV0ZXIifSxDTElDS19BRERfRklMVEVSX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGJ1dHRvbiBBZGQgRmlsdGVyIixsYWJlbDoiVHJhbnNpdGlvbiB0byBMYXVuY2hlcyBQYWdlIn0sQ0xJQ0tfRklMVEVSX05BTUU6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBGaWx0ZXIgbmFtZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gTGF1bmNoIFBhZ2UifSxDTElDS19ESVNQTEFZX09OX0xBVU5DSF9TV0lUQ0hFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEZpbHRlciBvbi9vZmYgc3dpdGNoZXIiLGxhYmVsOiJTaG93L2hpZGUgRmlsdGVyIG9uIExhdW5jaCBQYWdlIn0sQ0xJQ0tfREVMRVRFX0ZJTFRFUl9JQ09OOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBEZWxldGUgb24gRmlsdGVyIFBhZ2UiLGxhYmVsOiJBcmlzZSBNb2RhbCBEZWxldGUgZmlsdGVyIn0sQ0xJQ0tfRURJVF9JQ09OOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBFZGl0IG9uIEZpbHRlciBuYW1lIixsYWJlbDoiQXJpc2UgTW9kYWwgRWRpdCBmaWx0ZXIifSxDTElDS19TSEFSRURfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gU2hhcmVkIG9uIEZpbHRlciIsbGFiZWw6IkFyaXNlIE1vZGFsIEVkaXQgZmlsdGVyIn0sQ0xJQ0tfQ0xPU0VfSUNPTl9NT0RBTF9FRElUX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgRWRpdCBGaWx0ZXIiLGxhYmVsOiJDbG9zZSBNb2RhbCBFZGl0IEZpbHRlciJ9LEVOVEVSX0RFU0NSSVBUSU9OX01PREFMX0VESVRfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgZGVzY3JpcHRpb24gaW4gTW9kYWwgRWRpdCBGaWx0ZXIiLGxhYmVsOiJEZXNjcmlwdGlvbiJ9LENMSUNLX1NIQVJFX1NXSVRDSEVSX01PREFMX0VESVRfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gU2hhcmUgb24vb2ZmIGluIE1vZGFsIEVkaXQgRmlsdGVyIixsYWJlbDoiU2hhcmUvdW5zaGFyZSBGaWx0ZXIifSxDTElDS19DQU5DRUxfQlROX01PREFMX0VESVRfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gYnV0dG9uIENhbmNlbCBpbiBNb2RhbCBFZGl0IEZpbHRlciIsbGFiZWw6IkNsb3NlIE1vZGFsIEVkaXQgRmlsdGVyIn0sQ0xJQ0tfVVBEQVRFX0JUTl9NT0RBTF9FRElUX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGJ1dHRvbiBVcGRhdGUgaW4gTW9kYWwgRWRpdCBGaWx0ZXIiLGxhYmVsOiJVcGRhdGUgTW9kYWwgRWRpdCBGaWx0ZXIifSxDTElDS19DTE9TRV9JQ09OX01PREFMX0RFTEVURV9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIENsb3NlIG9uIE1vZGFsIERlbGV0ZSBGaWx0ZXIiLGxhYmVsOiJDbG9zZSBNb2RhbCBEZWxldGUgRmlsdGVyIn0sQ0xJQ0tfQ0FOQ0VMX0JUTl9NT0RBTF9ERUxFVEVfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gYnV0dG9uIENhbmNlbCBpbiBNb2RhbCBEZWxldGUgRmlsdGVyIixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIEZpbHRlciJ9LENMSUNLX0RFTEVURV9CVE5fTU9EQUxfREVMRVRFX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGJ1dHRvbiBEZWxldGUgaW4gTW9kYWwgRGVsZXRlIEZpbHRlciIsbGFiZWw6IkRlbGV0ZSBGaWx0ZXIifSxDTElDS19BRERfQlROX0VNUFRZX0ZJTFRFUl9QQUdFOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gYnV0dG9uIEFkZCBGaWx0ZXIgb24gZW1wdHkgcGFnZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gTGF1bmNoZXMgUGFnZSJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiRklMVEVSU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9maWx0ZXJzUGFnZUV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkZJTFRFUlNfUEFHRV9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2ZpbHRlcnNQYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaGlzdG9yeVBhZ2VFdmVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuSElTVE9SWV9QQUdFPSJoaXN0b3J5IixvPXQuSElTVE9SWV9QQUdFX0VWRU5UUz17U0VMRUNUX0hJU1RPUllfREVQVEg6e2NhdGVnb3J5OnIsYWN0aW9uOidTZWxlY3QgImhpc3RvcnkgZGVwdGgiJyxsYWJlbDonU2hvdyBwYXJhbWV0ZXIgb2Ygc2VsZWN0ZWQgImhpc3RvcnkgZGVwdGgiJ30sQ0xJQ0tfT05fSVRFTTp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGl0ZW0iLGxhYmVsOidUcmFuc2l0aW9uIHRvICJJdGVtIid9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiSElTVE9SWV9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9oaXN0b3J5UGFnZUV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkhJU1RPUllfUEFHRV9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2hpc3RvcnlQYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2ZpbHRlcnNQYWdlRXZlbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZJTFRFUlNfUEFHRV9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkZJTFRFUlNfUEFHRV9FVkVOVFN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZJTFRFUlNfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRklMVEVSU19QQUdFfX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xhdW5jaGVzUGFnZUV2ZW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMQVVOQ0hFU19QQUdFX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uTEFVTkNIRVNfUEFHRV9FVkVOVFN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxBVU5DSEVTX01PREFMX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uTEFVTkNIRVNfTU9EQUxfRVZFTlRTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMQVVOQ0hFU19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5MQVVOQ0hFU19QQUdFfX0pO3ZhciBzPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xvZ2luUGFnZUV2ZW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMT0dJTl9QQUdFX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuTE9HSU5fUEFHRV9FVkVOVFN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxPR0lOX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkxPR0lOX1BBR0V9fSk7dmFyIGk9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2lkZWJhckhlYWRlckZvb3RlckV2ZW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTSURFQkFSX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU0lERUJBUl9FVkVOVFN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkhFQURFUl9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkhFQURFUl9FVkVOVFN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZPT1RFUl9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkZPT1RFUl9FVkVOVFN9fSk7dmFyIGE9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbWVtYmVyc1BhZ2VFdmVudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTUVNQkVSU19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5NRU1CRVJTX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1FTUJFUlNfUEFHRV9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLk1FTUJFUlNfUEFHRV9FVkVOVFN9fSk7dmFyIGw9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvcHJvZmlsZVBhZ2VFdmVudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUFJPRklMRV9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5QUk9GSUxFX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBST0ZJTEVfUEFHRV9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLlBST0ZJTEVfUEFHRV9FVkVOVFN9fSk7dmFyIHU9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2V0dGluZ3NQYWdlRXZlbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNFVFRJTkdTX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LlNFVFRJTkdTX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNFVFRJTkdTX1BBR0VfRVZFTlRTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5TRVRUSU5HU19QQUdFX0VWRU5UU319KTt2YXIgYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9zdWl0ZXNQYWdlRXZlbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNVSVRFX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLlNVSVRFX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNVSVRFU19QQUdFX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuU1VJVEVTX1BBR0VfRVZFTlRTfX0pO3ZhciBkPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3N0ZXBQYWdlRXZlbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNURVBfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuU1RFUF9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTVEVQX1BBR0VfRVZFTlRTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5TVEVQX1BBR0VfRVZFTlRTfX0pO3ZhciBfPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xvZ1BhZ2VFdmVudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTE9HX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLkxPR19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMT0dfUEFHRV9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLkxPR19QQUdFX0VWRU5UU319KTt2YXIgcD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9kYXNoYm9hcmRzUGFnZUV2ZW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEQVNIQk9BUkRfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuREFTSEJPQVJEX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRBU0hCT0FSRF9QQUdFX0VWRU5UUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuREFTSEJPQVJEX1BBR0VfRVZFTlRTfX0pO3ZhciBmPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2hpc3RvcnlQYWdlRXZlbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkhJU1RPUllfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuSElTVE9SWV9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJISVNUT1JZX1BBR0VfRVZFTlRTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5ISVNUT1JZX1BBR0VfRVZFTlRTfX0pO3ZhciBtPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2FkbWluQWxsVXNlcnNQYWdlcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBRE1JTl9BTExfVVNFUlNfUEFHRV9NT0RBTF9FVkVOVFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLkFETUlOX0FMTF9VU0VSU19QQUdFX01PREFMX0VWRU5UU319KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xhdW5jaGVzUGFnZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuJ0NsaWNrIG9uIEZpbHRlciBJY29uIGJlZm9yZSBUYWJsZSB0aXRsZSAiJytlKyciJ30sbz1mdW5jdGlvbigpe3JldHVybiJBcmlzZSBuZXcgZmllbGQgaW4gZmlsdGVyIn0scz10LkxBVU5DSEVTX1BBR0U9ImxhdW5jaGVzIixpPXQuTEFVTkNIRVNfUEFHRV9FVkVOVFM9e0NMSUNLX0lURU1fTkFNRTp7Y2F0ZWdvcnk6cyxhY3Rpb246IkNsaWNrIG9uIEl0ZW0gTmFtZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gSXRlbSBwYWdlIn0sQ0xJQ0tfSEFNQlVSR0VSX01FTlU6e2NhdGVnb3J5OnMsYWN0aW9uOiJDbGljayBvbiBJY29uIE1lbnUgbmVhciBMYXVuY2ggTmFtZSIsbGFiZWw6IkFyaXNlIERyb3Bkb3duIHdpdGggc2luZ2xlIGFjdGlvbnMgZm9yIHRoaXMgbGF1bmNoIn0sQ0xJQ0tfTU9WRV9UT19ERUJVR19MQVVOQ0hfTUVOVTp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uICJNb3ZlIHRvIERlYnVnIiBpbiBMYXVuY2ggTWVudScsbGFiZWw6J0FyaXNlIE1vZGFsICJNb3ZlIHRvIERlYnVnIid9LENMSUNLX0ZPUkNFX0ZJTklTSF9MQVVOQ0hfTUVOVTp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uICJGb3JjZSBGaW5pc2giIGluIExhdW5jaCBNZW51JyxsYWJlbDoiSW50ZXJydXB0IGxhdW5jaCBsb2FkaW5nIn0sQ0xJQ0tfQU5BTFlTSVNfTEFVTkNIX01FTlU6e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiAiQW5hbHlzaXMiIGluIExhdW5jaCBNZW51JyxsYWJlbDoiU3RhcnRzIEFuYWx5c2luZyJ9LENMSUNLX0RFTEVURV9MQVVOQ0hfTUVOVTp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uICJEZWxldGUiIGluIExhdW5jaCBNZW51JyxsYWJlbDonQXJpc2UgTW9kYWwgIkRlbGV0ZSBMYXVuY2giJ30sQ0xJQ0tfRVhQT1JUX1BERjp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uICJFeHBvcnQ6IFBERiIgaW4gTGF1bmNoIE1lbnUnLGxhYmVsOiJTdGFycyBkb3dubG9hZCBvZiByZXBvcnQgaW4gUERGIn0sQ0xJQ0tfRVhQT1JUX0hUTUw6e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiAiRXhwb3J0OiBIVE1MIiBpbiBMYXVuY2ggTWVudScsbGFiZWw6IlN0YXJzIGRvd25sb2FkIG9mIHJlcG9ydCBpbiBIVE1MIn0sQ0xJQ0tfRVhQT1JUX1hMUzp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uICJFeHBvcnQ6IFhMUyIgaW4gTGF1bmNoIE1lbnUnLGxhYmVsOiJTdGFycyBkb3dubG9hZCBvZiByZXBvcnQgaW4gWExTIn0sTkFNRV9GSUxURVI6e2NhdGVnb3J5OnMsYWN0aW9uOnIoIk5BTUUiKSxsYWJlbDoiQXJpc2UgbmV3IGZpZWxkIGluIGZpbHRlciJ9LFNUQVJUX1RJTUVfRklMVEVSOntjYXRlZ29yeTpzLGFjdGlvbjpyKCJTVEFSVCIpLGxhYmVsOiJBcmlzZSBuZXcgZmllbGQgaW4gZmlsdGVyIn0sVE9UQUxfRklMVEVSOntjYXRlZ29yeTpzLGFjdGlvbjpyKCJUT1RBTCIpLGxhYmVsOiJBcmlzZSBuZXcgZmllbGQgaW4gZmlsdGVyIn0sUEFTU0VEX0ZJTFRFUjp7Y2F0ZWdvcnk6cyxhY3Rpb246cigiUEFTU0VEIiksbGFiZWw6IkFyaXNlIG5ldyBmaWVsZCBpbiBmaWx0ZXIifSxGQUlMRURfRklMVEVSOntjYXRlZ29yeTpzLGFjdGlvbjpyKCJGQUlMRUQiKSxsYWJlbDoiQXJpc2UgbmV3IGZpZWxkIGluIGZpbHRlciJ9LFNLSVBQRURfRklMVEVSOntjYXRlZ29yeTpzLGFjdGlvbjpyKCJTS0lQUEVEIiksbGFiZWw6IkFyaXNlIG5ldyBmaWVsZCBpbiBmaWx0ZXIifSxQQl9GSUxURVI6e2NhdGVnb3J5OnMsYWN0aW9uOnIoIlBST0RVQ1QgQlVHIiksbGFiZWw6IkFyaXNlIG5ldyBmaWVsZCBpbiBmaWx0ZXIifSxBQl9GSUxURVI6e2NhdGVnb3J5OnMsYWN0aW9uOnIoIkFVVE8gQlVHIiksbGFiZWw6IkFyaXNlIG5ldyBmaWVsZCBpbiBmaWx0ZXIifSxTSV9GSUxURVI6e2NhdGVnb3J5OnMsYWN0aW9uOnIoIlNZU1RFTSBJU1NVRSIpLGxhYmVsOiJBcmlzZSBuZXcgZmllbGQgaW4gZmlsdGVyIn0sVElfRklMVEVSOntjYXRlZ29yeTpzLGFjdGlvbjpyKCJUTyBJTlZFU1RJR0FURSIpLGxhYmVsOiJBcmlzZSBuZXcgZmllbGQgaW4gZmlsdGVyIn0sRURJVF9JQ09OX0NMSUNLOntjYXRlZ29yeTpzLGFjdGlvbjoiQ2xpY2sgb24gRWRpdCBJY29uIGFmdGVyIGxhdW5jaCBuYW1lIixsYWJlbDonRWRpdCBMYXVuY2gvQXJpc2UgTW9kYWwgIkVkaXQgTGF1bmNoIid9LFBCX0NIQVJUOntjYXRlZ29yeTpzLGFjdGlvbjoiQ2xpY2sgb24gUHJvZHVjdCBCdWcgQ2lyY2xlIixsYWJlbDoiVHJhbnNpdGlvbiB0byBpbm5lciBsZXZlbCBvZiBsYXVuY2ggd2l0aCBQcm9kdWN0IEJ1Z3MifSxBQl9DSEFSVDp7Y2F0ZWdvcnk6cyxhY3Rpb246IkNsaWNrIG9uIEF1dG8gQnVnIENpcmNsZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gaW5uZXIgbGV2ZWwgb2YgbGF1bmNoIHdpdGggQXV0byBCdWcifSxTSV9DSEFSVDp7Y2F0ZWdvcnk6cyxhY3Rpb246IkNsaWNrIG9uIFN5c3RlbSBJc3N1ZSBDaXJjbGUiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIGlubmVyIGxldmVsIG9mIGxhdW5jaCB3aXRoIFN5c3RlbSBJc3N1ZSJ9LFRJX0NIQVJUOntjYXRlZ29yeTpzLGFjdGlvbjoiQ2xpY2sgb24gVG8gSW52ZXN0aWdhdGUgdGFnIixsYWJlbDoiVHJhbnNpdGlvbiB0byBpbm5lciBsZXZlbCBvZiBsYXVuY2ggd2l0aCBUbyBJbnZlc3RpZ2F0ZSJ9LFBCX1RPT0xUSVBfQ0xJQ0s6e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBUb29sdGlwICJUb3RhbCBQcm9kdWN0IEJ1Z3MiJyxsYWJlbDoiVHJhbnNpdGlvbiB0byBpbm5lciBsZXZlbCBvZiBsYXVuY2ggd2l0aCBQcm9kdWN0IEJ1Z3MifSxBQl9UT09MVElQOntjYXRlZ29yeTpzLGFjdGlvbjonQ2xpY2sgb24gVG9vbHRpcCAiVG90YWwgQXV0byBCdWciJyxsYWJlbDoiVHJhbnNpdGlvbiB0byBpbm5lciBsZXZlbCBvZiBsYXVuY2ggd2l0aCBBdXRvIEJ1ZyJ9LFNJX1RPT0xUSVBfQ0xJQ0s6e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBUb29sdGlwICJUb3RhbCBTeXN0ZW0gSXNzdWUiJyxsYWJlbDoiVHJhbnNpdGlvbiB0byBpbm5lciBsZXZlbCBvZiBsYXVuY2ggd2l0aCBTeXN0ZW0gSXNzdWUifSxDTElDS19TRUxFQ1RfQUxMX0lDT046e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBpdGVtIGljb24gInNlbGVjdCBhbGwgbGF1bmNoZXMiJyxsYWJlbDoiU2VsZWN0L3Vuc2VsZWN0IGFsbCBsYXVuY2hlcyJ9LENMSUNLX1NFTEVDVF9PTkVfSVRFTTp7Y2F0ZWdvcnk6cyxhY3Rpb246J0NsaWNrIG9uIGl0ZW0gaWNvbiAic2VsZWN0IG9uZSBsYXVuY2giJyxsYWJlbDoiU2VsZWN0L3Vuc2VsZWN0IG9uZSBsYXVuY2gifSxDTElDS19BQ1RJT05TX0JUTjp7Y2F0ZWdvcnk6cyxhY3Rpb246IkNsaWNrIG9uIGJ1dHRvbiBBY3Rpb25zIixsYWJlbDoiQXJpc2UgRHJvcGRvd24gd2l0aCBsaXN0IG9mIGFjdGlvbnMifSxDTElDS19NRVJHRV9BQ1RJT046e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBidXR0b24gIk1lcmdlIiBpbiBsaXN0IG9mIGFjdGlvbnMnLGxhYmVsOidBcmlzZSBNb2RhbCAiTWVyZ2UgTGF1bmNoZXMiJ30sQ0xJQ0tfQ09NUEFSRV9BQ1RJT046e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBidXR0b24gIkNvbXBhcmUiIGluIGxpc3Qgb2YgYWN0aW9ucycsbGFiZWw6J0FyaXNlIE1vZGFsICJDb21wYXJlIExhdW5jaGVzIid9LENMSUNLX01PVkVfVE9fREVCVUdfQUNUSU9OOntjYXRlZ29yeTpzLGFjdGlvbjonQ2xpY2sgb24gYnV0dG9uICJNb3ZlIHRvIERlYnVnIiBpbiBsaXN0IG9mIGFjdGlvbnMnLGxhYmVsOidBcmlzZSBNb2RhbCAiTW92ZSB0byBEZWJ1ZyInfSxDTElDS19GT1JDRV9GSU5JU0hfQUNUSU9OOntjYXRlZ29yeTpzLGFjdGlvbjonQ2xpY2sgb24gYnV0dG9uICJGb3JjZSBGaW5pc2giIGluIGxpc3Qgb2YgYWN0aW9ucycsbGFiZWw6IkZvcmNlIEZpbmlzaCJ9LENMSUNLX0RFTEVURV9BQ1RJT046e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBidXR0b24gIkRlbGV0ZSIgaW4gbGlzdCBvZiBhY3Rpb25zJyxsYWJlbDonQXJpc2UgTW9kYWwgIkRlbGV0ZSBMYXVuY2giJ30sQ0xJQ0tfQ0xPU0VfSUNPTl9GUk9NX1NFTEVDVElPTjp7Y2F0ZWdvcnk6cyxhY3Rpb246IkNsaWNrIG9uIENsb3NlIEljb24gb24gVGFnIG9mIExhdW5jaCIsbGFiZWw6IlJlbW92ZSBsYXVuY2ggZnJvbSAgc2VsZWN0aW9uIn0sQ0xJQ0tfQ0xPU0VfSUNPTl9BTExfU0VMRUNUSU9OOntjYXRlZ29yeTpzLGFjdGlvbjoiQ2xpY2sgb24gQ2xvc2UgSWNvbiBvZiBhbGwgc2VsZWN0aW9uIixsYWJlbDoiVW5zZWxlY3QgYWxsIGxhdW5jaGVzIn0sQ0xJQ0tfUFJPQ0VFRF9JVEVNU19CVVRUT046e2NhdGVnb3J5OnMsYWN0aW9uOidDbGljayBvbiBidXR0b24gIlByb2NlZWQgVmFsaWQgSXRlbXMiJyxsYWJlbDoiUmVtb3ZlIGludmFsaWQgbGF1bmNoZXMgZnJvbSBzZWxlY3Rpb24ifSxDTElDS19BTExfTEFVTkNIRVNfRFJPUERPV046e2NhdGVnb3J5OnMsYWN0aW9uOiJDbGljayBvbiBBbGwgTGF1bmNoZXMgZHJvcGRvd24gaWNvbiIsbGFiZWw6IkFyaXNlIGRyb3Bkb3duIn0sU0VMRUNUX0FMTF9MQVVOQ0hFUzp7Y2F0ZWdvcnk6cyxhY3Rpb246IlNlbGVjdCBBbGwgTGF1bmNoZXMgb24gZHJvcGRvd24iLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEFsbCBMYXVuY2hlcyJ9LFNFTEVDVF9MQVRFU1RfTEFVTkNIRVM6e2NhdGVnb3J5OnMsYWN0aW9uOiJTZWxlY3QgTGF0ZXN0IExhdW5jaGVzIGluIGRyb3Bkb3duIixsYWJlbDoiVHJhbnNpdGlvbiB0byBMYXRlc3QgTGF1bmNoZXMifSxDTElDS19JTVBPUlRfQlROOntjYXRlZ29yeTpzLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBJbXBvcnQiLGxhYmVsOiJBcmlzZSBNb2R1bCBJbXBvcnQgTGF1bmNoIn19LGE9Ik1vZGFsIGxhdW5jaGVzIixsPXQuTEFVTkNIRVNfTU9EQUxfRVZFTlRTPXtDTE9TRV9JQ09OX0VESVRfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBDbG9zZSBJY29uIG9uIE1vZGFsICJFZGl0IExhdW5jaCInLGxhYmVsOidDbG9zZSBtb2RhbCAiRWRpdCBMYXVuY2giJ30sRURJVF9ERVNDUklQVElPTl9FRElUX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonRWRpdCBkZXNjcmlwdGlvbiBpbiBNb2RhbCAiRWRpdCBMYXVuY2giJyxsYWJlbDoiRWRpdCBsYXVuY2ggZGVzY3JpcHRpb24ifSxDTElDS19DQU5DRUxfQlROX0VESVRfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCAiRWRpdCBMYXVuY2giJyxsYWJlbDonQ2xvc2UgbW9kYWwgIkVkaXQgTGF1bmNoIid9LENMSUNLX1NBVkVfQlROX0VESVRfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBCdHRuIFNhdmUgb24gTW9kYWwgIkVkaXQgTGF1bmNoIicsbGFiZWw6J1NhdmUgY2hhbmdlcyAiRWRpdCBMYXVuY2giJ30sQ0xPU0VfSUNPTl9NT1ZFX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQ2xvc2UgSWNvbiBvbiBNb2RhbCAiTW92ZSB0byBEZWJ1ZyInLGxhYmVsOidDbG9zZSBtb2RhbCAiTW92ZSB0byBEZWJ1ZyInfSxDTElDS19DQU5DRUxfQlROX01PVkVfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCAiTW92ZSB0byBEZWJ1ZyInLGxhYmVsOidDbG9zZSBtb2RhbCAiTW92ZSB0byBEZWJ1ZyInfSxDTElDS19NT1ZFX0JUTl9NT1ZFX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBNb3ZlIG9uIE1vZGFsICJNb3ZlIHRvIERlYnVnIicsbGFiZWw6J1NhdmUgY2hhbmdlcyAiTW92ZSB0byBEZWJ1ZyInfSxDTE9TRV9JQ09OX0RFTEVURV9NT0RBTDp7Y2F0ZWdvcnk6YSxhY3Rpb246J0NsaWNrIG9uIENsb3NlIEljb24gb24gTW9kYWwgIkRlbGV0ZSBMYXVuY2giJyxsYWJlbDonQ2xvc2UgbW9kYWwgIkRlbGV0ZSBMYXVuY2giJ30sQ0FOQ0VMX0JUTl9ERUxFVEVfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCAiRGVsZXRlIExhdW5jaCInLGxhYmVsOidDbG9zZSBtb2RhbCAiRGVsZXRlIExhdW5jaCInfSxERUxFVEVfQlROX0RFTEVURV9NT0RBTDp7Y2F0ZWdvcnk6YSxhY3Rpb246J0NsaWNrIG9uIEJ0dG4gRGVsZXRlIG9uIE1vZGFsICJEZWxldGUgTGF1bmNoIicsbGFiZWw6J0RlbGV0ZSBsYXVuY2ggbWVudGlvbmVkIGluIG1vZGFsICJEZWxldGUgTGF1bmNoIid9LENMT1NFX0lDT05fTUVSR0VfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBDbG9zZSBJY29uIG9uIE1vZGFsICJNZXJnZSBMYXVuY2hlcyInLGxhYmVsOidDbG9zZSBtb2RhbCAiTWVyZ2UgTGF1bmNoZXMiJ30sQ0FOQ0VMX0JUTl9NRVJHRV9NT0RBTDp7Y2F0ZWdvcnk6YSxhY3Rpb246J0NsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsICJNZXJnZSBMYXVuY2hlcyInLGxhYmVsOidDbG9zZSBtb2RhbCAiTWVyZ2UgTGF1bmNoZXMiJ30sTUVSR0VfQlROX01FUkdFX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBNZXJnZSBvbiBNb2RhbCAiTWVyZ2UgTGF1bmNoZXMiJyxsYWJlbDonTWVyZ2UgbGF1bmNoZXMgbWVudGlvbmVkIGluIG1vZGFsICJNZXJnZSBMYXVuY2hlcyInfSxDTE9TRV9JQ09OX0lNUE9SVF9NT0RBTDp7Y2F0ZWdvcnk6YSxhY3Rpb246J0NsaWNrIG9uIENsb3NlIEljb24gb24gTW9kYWwgIkltcG9ydCBMYXVuY2giJyxsYWJlbDoiQ2xvc2UgTW9kYWwgSW1wb3J0IExhdW5jaCJ9LENBTkNFTF9CVE5fSU1QT1JUX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgIkltcG9ydCBMYXVuY2giJyxsYWJlbDoiQ2xvc2UgTW9kYWwgSW1wb3J0IExhdW5jaCJ9LE9LX0JUTl9JTVBPUlRfTU9EQUw6e2NhdGVnb3J5OmEsYWN0aW9uOidDbGljayBvbiBCdHRuIE9rIG9uIE1vZGFsICJJbXBvcnQgTGF1bmNoIicsbGFiZWw6IkltcG9ydCBMYXVuY2gifSxMSU5FQVJfTUVSR0VfQlROX01FUkdFX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBMaW5lYXIgTWVyZ2Ugb24gTW9kYWwgIk1lcmdlIExhdW5jaGVzIicsbGFiZWw6IkxpbmVhciBNZXJnZSJ9LERFRVBfTUVSR0VfQlROX01FUkdFX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBEZWVwIE1lcmdlIG9uIE1vZGFsICJNZXJnZSBMYXVuY2hlcyInLGxhYmVsOiJEZWVwIE1lcmdlIn0sT0tfQlROX0FOQUxZU0lTX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBPayBvbiBNb2RhbCAiQW5hbHlzaXMgTGF1bmNoIicsbGFiZWw6IkFuYWx5c2lzIExhdW5jaCJ9LENMT1NFX0JUTl9BTkFMWVNJU19NT0RBTDp7Y2F0ZWdvcnk6YSxhY3Rpb246J0NsaWNrIG9uIENsb3NlIEljb24gb24gTW9kYWwgIkFuYWx5c2lzIExhdW5jaCInLGxhYmVsOiJDbG9zZSBBbmFseXNpcyBMYXVuY2ggTW9kYWwifSxDQU5DRUxfQlROX0FOQUxZU0lTX01PREFMOntjYXRlZ29yeTphLGFjdGlvbjonQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgIkFuYWx5c2lzIExhdW5jaCInLGxhYmVsOiJDYW5jZWwgQW5hbHlzaXMgTGF1bmNoIE1vZGFsIn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJMQVVOQ0hFU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9sYXVuY2hlc1BhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJMQVVOQ0hFU19QQUdFX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbGF1bmNoZXNQYWdlRXZlbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiTEFVTkNIRVNfTU9EQUxfRVZFTlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9sYXVuY2hlc1BhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJnZXRBY3Rpb25UYWJsZUZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbGF1bmNoZXNQYWdlRXZlbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZ2V0RGVzY3JpcHRpb25UYWJsZUZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbGF1bmNoZXNQYWdlRXZlbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiTEFVTkNIRVNfTU9EQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xhdW5jaGVzUGFnZUV2ZW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xvZ1BhZ2VFdmVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTE9HX1BBR0U9ImxvZyIsbz10LkxPR19QQUdFX0VWRU5UUz17UExVU19NSU5VU19CUkVBRENSVU1COntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnJlYWQgQ3J1bWIgaWNvbiBQbHVzL01pbnVzIixsYWJlbDoiU2hvdy9IaWRlIGFsbCBuYW1lcyBvZiBpdGVtcyJ9LEFMTF9MQUJFTF9CUkVBRENSVU1COntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnJlYWQgQ3J1bWIgQWxsIixsYWJlbDoiVHJhbnNpdGlvbiB0byBMYXVuY2hlcyBQYWdlIn0sSVRFTV9OQU1FX0JSRUFEQ1JVTUJfQ0xJQ0s6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCcmVhZCBDcnVtYiBJdGVtIG5hbWUiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEl0ZW0ifSxQUkVWSU9VU19JVEVNX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gcHJldiBNZXRob2QiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIHByZXYgTWV0aG9kIEl0ZW0ifSxORVhUX0lURU1fQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBuZXh0IE1ldGhvZCIsbGFiZWw6IlRyYW5zaXRpb24gdG8gbmV4dCBNZXRob2QgSXRlbSJ9LFJFRlJFU0hfQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBSZWZyZXNoIixsYWJlbDoiUmVmcmVzaCBwYWdlIn0sSElTVE9SWV9MSU5FX0lURU06e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBIaXN0b3J5IGV4ZWN1dGlvbiB0YWIiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIGl0ZW0gbG9nIHBhZ2UifSxERUZFQ1RfVFlQRV9UQUc6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBEZWZlY3QgdHlwZSB0YWciLGxhYmVsOiJBcmlzZSBNb2RhbCBFZGl0IERlZmVjdCB0eXBlIn0sUE9TVF9JU1NVRV9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFBvc3QgQnVnIixsYWJlbDoiQXJpc2UgTW9kYWwgUG9zdCBCdWcifSxMSU5LX0lTU1VFX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gTG9hZCBCdWciLGxhYmVsOiJBcmlzZSBNb2RhbCBMb2FkIEJ1ZyJ9LFNUQUNLX1RSQUNFX1RBQjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIFN0YWNrIFRyYWNlIHRhYiIsbGFiZWw6Ik9wZW4gU3RhY2sgVHJhY2UgdGFiIn0sQVRUQUNITUVOVF9UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBBdHRhY2htZW50cyB0YWIiLGxhYmVsOiJPcGVuIEF0dGFjaG1lbnRzIHRhYiJ9LElURU1fREVUQUlMU19UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJdGVtIERldGFpbHMgdGFiIixsYWJlbDoiT3BlbiBJdGVtIERldGFpbHMgdGFiIn0sQUNUSU9OU19UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBIaXN0b3J5IG9mIEFjdGlvbnMgdGFiIixsYWJlbDoiT3BlbiBIaXN0b3J5IG9mIEFjdGlvbnMgdGFiIn0sTE9HX0xFVkVMX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IlNlbGVjdCBMb2cgbGV2ZWwgZmlsdGVyIGluIGRyb3Bkb3duIixsYWJlbDoiRmlsdGVyIGJ5IHNlbGVjdGVkIHBhcmFtZXRyIn0sTE9HX1dJVEhfQVRUQUNITUVOVF9DSEVDS0JPWDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGNoZWNrYm94IExvZ3Mgd2l0aCBhdHRhY2htZW50cyIsbGFiZWw6IkNoZWNrL3VuY2hlY2sgbG9ncyB3aXRoIGF0dGFjaG1lbnRzIn0sTkVYVF9FUlJPUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gTmV4dCBFcnJvciIsbGFiZWw6IlRyYW5zaXRpb24gdG8gbmV4dCBlcnJvciBwYWdlIn0sUFJFVklPVVNfTE9HX01TR19QQUdFOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBQcmV2aW91cyBMb2cgbWVzc2FnZSBwYWdlIixsYWJlbDoiVHJhbnNpdGlvbiB0byBwcmV2aW91cyBsb2cgbWVzc2FnZSBwYWdlIn0sTkVYVF9MT0dfTVNHX1BBR0U6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIE5leHQgTG9nIG1lc3NhZ2UgcGFnZSIsbGFiZWw6IlRyYW5zaXRpb24gdG8gbmV4dCBsb2cgbWVzc2FnZSBwYWdlIn0sRU5URVJfTE9HX01TR19GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOiJFbnRlciBmaWx0ZXIgcGFyYW1ldGVyIGluIExvZyBtZXNzYWdlIGlucHV0IixsYWJlbDoiRmlsdGVyIGxvZyBtZXNzYWdlcyBieSBwYXJhbWV0ZXIifSxUSU1FX1NPUlRJTkc6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIFNvcnRpbmcgb24gVGltZSBpbiBMb2cgTWVzc2FnZSIsbGFiZWw6IlNvcnQgbG9ncyJ9LEFUVEFDSE1FTlRfSU5fTE9HX01TRzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEF0dGFjaG1lbnQgaW4gTG9nIE1lc3NhZ2UiLGxhYmVsOiJPcGVuIEF0dGFjaG1lbnQifSxFWFBBTkRfTE9HX01TRzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gRXhwYW5kIGluIExvZyBNZXNzYWdlIixsYWJlbDoiRXhwYW5kL2Nsb3NlIGxvZyJ9LFNUQUNLX1RSQUNFX0xJTks6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBHbyB0byBTdGFjayBUcmFjZSBsaW5rIGluIFN0YWNrIFRyYWNlIHRhYiIsbGFiZWw6Ik9wZW4gU3RhY2sgVHJhY2UgbG9nIG1lc3NhZ2UifSxDTE9TRV9JQ09OX1BPU1RfSVNTVUVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIENsb3NlIG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiQ2xvc2UgTW9kYWwgUG9zdCBCdWcifSxTQ1JFRU5TSE9UX1NXSVRDSEVSX1BPU1RfSVNTVUVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBTY3JlZW5zaG90cyBzd2l0Y2hlciBvbiBNb2RhbCBQb3N0IEJ1ZyIsbGFiZWw6Ik9uL29mZiBTY3JlZW5zaG90cyBpbiBNb2RhbCBQb3N0IEJ1ZyJ9LExPR1NfU1dJVENIRVJfUE9TVF9JU1NVRV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIExvZ3Mgc3dpdGNoZXIgb24gTW9kYWwgUG9zdCBCdWciLGxhYmVsOiJPbi9vZmYgTG9ncyBpbiBNb2RhbCBQb3N0IEJ1ZyJ9LENPTU1FTlRfU1dJVENIRVJfUE9TVF9JU1NVRV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIENvbW1lbnQgc3dpdGNoZXIgb24gTW9kYWwgUG9zdCBCdWciLGxhYmVsOiJPbi9vZmYgQ29tbWVudCBpbiBNb2RhbCBQb3N0IEJ1ZyJ9LENBTkNFTF9CVE5fUE9TVF9JU1NVRV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiQ2xvc2UgTW9kYWwgUG9zdCBCdWcifSxQT1NUX0JUTl9QT1NUX0lTU1VFX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBQb3N0IG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiUG9zdCBidWcifSxDTE9TRV9JQ09OX0xJTktfSVNTVUVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIENsb3NlIG9uIE1vZGFsIExvYWQgQnVnIixsYWJlbDoiQ2xvc2UgTW9kYWwgTG9hZCBCdWcifSxBRERfTkVXX0lTU1VFX0xJTktfSVNTVUVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBOZXcgSXNzdWUgb24gTW9kYWwgTG9hZCBCdWciLGxhYmVsOiJBZGQgaW1wdXRzIGluIE1vZGFsIExvYWQgQnVnIn0sQ0FOQ0VMX0JUTl9MSU5LX0lTU1VFX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgTG9hZCBCdWciLGxhYmVsOiJDbG9zZSBNb2RhbCBMb2FkIEJ1ZyJ9LExPQURfQlROX0xJTktfSVNTVUVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIExvYWQgb24gTW9kYWwgTG9hZCBCdWciLGxhYmVsOiJMb2FkIGJ1ZyJ9LFBSRVZJT1VTX0FUVEFDSE1FTlRfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gUHJldmlvdXMgQXR0YWNobWVudCIsbGFiZWw6IlNob3cgUHJldmlvdXMgQXR0YWNobWVudCJ9LE5FWFRfQVRUQUNITUVOVF9JQ09OOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBOZXh0IEF0dGFjaG1lbnQiLGxhYmVsOiJTaG93IE5leHQgQXR0YWNobWVudCJ9LEFUVEFDSE1FTlRfQ0xJQ0s6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBvcGVuZWQgQXR0YWNobWVudCIsbGFiZWw6IkFyaXNlIG1vZGFsIHdpdGggQXR0YWNobWVudCJ9LEFUVEFDSE1FTlRfVEhVTUJOQUlMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gdGh1bWJuYWlsIG9mIEF0dGFjaG1lbnQiLGxhYmVsOiJTaG93IHRoaXMgQXR0YWNobWVudCJ9LENMT1NFX0lDT05fQVRUQUNITUVOVF9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgQXR0YWNobWVudCIsbGFiZWw6IkNsb3NlIE1vZGFsIEF0dGFjaG1lbnQifSxST1RBVEVfSUNPTl9BVFRBQ0hNRU5UX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBSb3RhdGUgb24gTW9kYWwgQXR0YWNobWVudCIsbGFiZWw6IlJvdGF0ZSBBdHRhY2htZW50In0sQ0xPU0VfQlROX0FUVEFDSE1FTlRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENsb3NlIG9uIE1vZGFsIEF0dGFjaG1lbnQiLGxhYmVsOiJDbG9zZSBNb2RhbCBBdHRhY2htZW50In19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJMT0dfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbG9nUGFnZUV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkxPR19QQUdFX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbG9nUGFnZUV2ZW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2xvZ2luUGFnZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5MT0dJTl9QQUdFPSJsb2dpbiIsbz10LkxPR0lOX1BBR0VfRVZFTlRTPXtDTElDS19UV0lUVEVSX0xJTks6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiB0d2l0dGVyIGxpbmsiLGxhYmVsOiJPcGVuIHR3aXR0ZXIgbGluayJ9LENMSUNLX0dJVEhVQl9JQ09OOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gSWNvbiBHaXRodWIgb24gV2VsY29tZSBzY3JlZW4iLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEdpdGh1YiJ9LENMSUNLX0ZBQ0VCT09LX0lDT046e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIEZhY2Vib29rIG9uIFdlbGNvbWUgc2NyZWVuIixsYWJlbDoiVHJhbnNpdGlvbiB0byBGYWNlYm9vayJ9LENMSUNLX1RXRUVURVJfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEljb24gVHdlZXRlciBvbiBXZWxjb21lIHNjcmVlbiIsbGFiZWw6IlRyYW5zaXRpb24gdG8gVHdlZXRlciJ9LENMSUNLX1lPVVRVQkVfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEljb24gWW91VHViZSBvbiBXZWxjb21lIHNjcmVlbiIsbGFiZWw6IlRyYW5zaXRpb24gdG8gWW91VHViZSJ9LENMSUNLX1ZLX0lDT046e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIFZLIG9uIFdlbGNvbWUgc2NyZWVuIixsYWJlbDoiVHJhbnNpdGlvbiB0byBWSyJ9LENMSUNLX1NMQUNLX0lDT046e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIFNsYWNrIG9uIFdlbGNvbWUgc2NyZWVuIixsYWJlbDoiVHJhbnNpdGlvbiB0byBTbGFjayJ9LENMSUNLX01BSUxfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEljb24gTWFpbCBvbiBXZWxjb21lIHNjcmVlbiIsbGFiZWw6IkFyaXNlIE1haWwgd2luZG93In19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJMT0dJTl9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9sb2dpblBhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJMT0dJTl9QQUdFX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbG9naW5QYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvbWVtYmVyc1BhZ2VFdmVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTUVNQkVSU19QQUdFPSJtZW1iZXJzIixvPXQuTUVNQkVSU19QQUdFX0VWRU5UUz17RU5URVJfU0VBUkNIX1BBUkFNOntjYXRlZ29yeTpyLGFjdGlvbjoiRW50ZXIgcGFyYW1ldGVyIGZvciBzZWFyY2giLGxhYmVsOiJTaG93IG1lbWJlciBieSBwYXJhbWV0ZXIifSxQRVJNSVNTSU9OX01BUF9DTElDSzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gUGVybWlzc2lvbiBtYXAiLGxhYmVsOiJTaG93IFBlcm1pc3Npb24gbWFwIn0sSU5WSVRFX1VTRVJfQ0xJQ0s6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEludml0ZSB1c2VyIixsYWJlbDoiQXJpc2UgTW9kYWwgSW52aXRlIHVzZXIifSxDSEFOR0VfUFJPSkVDVF9ST0xFOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBpbnB1dCBQcm9qZWN0IHJvbGUiLGxhYmVsOiJDaGFuZ2UgUHJvamVjdCByb2xlIn0sVU5BU1NJR05fQlROX0NMSUNLOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBVbmFzc2lnbiIsbGFiZWw6IlVuYXNzaWduIHVzZXIifSxDTE9TRV9JQ09OX0lOVklURV9VU0VSX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBJbnZpdGUgdXNlciIsbGFiZWw6IkNsb3NlIE1vZGFsIEludml0ZSB1c2VyIn0sQ0FOQ0VMX0JUTl9JTlZJVEVfVVNFUl9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIEludml0ZSB1c2VyIixsYWJlbDoiQ2xvc2UgTW9kYWwgSW52aXRlIHVzZXIifSxJTlZJVEVfQlROX0lOVklURV9VU0VSX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBJbnZpdGUgb24gTW9kYWwgSW52aXRlIHVzZXIiLGxhYmVsOiJJbnZpdGUgdXNlciJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiTUVNQkVSU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9tZW1iZXJzUGFnZUV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIk1FTUJFUlNfUEFHRV9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL21lbWJlcnNQYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvcHJvZmlsZVBhZ2VFdmVudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuUFJPRklMRV9QQUdFPSJwcm9maWxlIixvPXQuUFJPRklMRV9QQUdFX0VWRU5UUz17Q0hBTkdFX1BBU1NXT1JEX0NMSUNLOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDaGFuZ2UgcGFzc3dvcmQiLGxhYmVsOiJBcmlzZSBNb2RhbCBDaGFuZ2UgcGFzc3dvcmQifSxFRElUX1VTRVJfTkFNRV9JQ09OOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBFZGl0IFVzZXIgbmFtZSIsbGFiZWw6IkFyaXNlIE1vZGFsIEVkaXQgUGVyc29uYWwgSW5mb3JtYXRpb24ifSxFRElUX0VNQUlMX0lDT046e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIEVkaXQgRW1haWwiLGxhYmVsOiJBcmlzZSBNb2RhbCBFZGl0IFBlcnNvbmFsIEluZm9ybWF0aW9uIn0sVVBMT0FEX1BIT1RPX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gVXBsb2FkIHBob3RvIixsYWJlbDoiVXBsb2FkIHBob3RvIn0sUkVNT1ZFX1BIT1RPX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGxpbmsgUmVtb3ZlIHBob3RvIixsYWJlbDoiQXJpc2UgTW9kYWwgRGVsZXRlIGltYWdlIn0sUkVHRU5FUkFURV9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFJlZ2VuZXJhdGUiLGxhYmVsOiJSZWdlbmVyYXRlIn0sU0VMRUNUX0NPTkZJR1VSQVRJT05fVEFCOntjYXRlZ29yeTpyLGFjdGlvbjoiU2VsZWN0IGNvbmZpZ3VyYXRpb24gdGFiIixsYWJlbDoiU2VsZWN0IGNvbmZpZ3VyYXRpb24gdGFiIn0sQ0xPU0VfSUNPTl9DSEFOR0VfUEFTU1dPUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIENsb3NlIG9uIE1vZGFsIENoYW5nZSBwYXNzd29yZCIsbGFiZWw6IkNsb3NlIE1vZGFsIENoYW5nZSBwYXNzd29yZCJ9LENBTkNFTF9CVE5fQ0hBTkdFX1BBU1NXT1JEX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgQ2hhbmdlIHBhc3N3b3JkIixsYWJlbDoiQ2xvc2UgTW9kYWwgQ2hhbmdlIHBhc3N3b3JkIn0sU1VCTUlUX0JUTl9DSEFOR0VfUEFTU1dPUkRfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBvbiBNb2RhbCBDaGFuZ2UgcGFzc3dvcmQiLGxhYmVsOiJTdWJtaXQgY2hhbmdlcyBvbiBNb2RhbCBDaGFuZ2UgcGFzc3dvcmQifSxDTE9TRV9JQ09OX0RFTEVURV9JTUFHRV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2xvc2Ugb24gTW9kYWwgRGVsZXRlIGltYWdlIixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIGltYWdlIn0sQ0FOQ0VMX0JUTl9ERUxFVEVfSU1BR0VfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIENhbmNlbCBvbiBNb2RhbCBEZWxldGUgaW1hZ2UiLGxhYmVsOiJDbG9zZSBNb2RhbCBEZWxldGUgaW1hZ2UifSxERUxFVEVfQlROX0RFTEVURV9JTUFHRV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gRGVsZXRlIG9uIE1vZGFsIERlbGV0ZSBpbWFnZSIsbGFiZWw6IkRlbGV0ZSBpbWFnZSJ9LENMT1NFX0lDT05fRURJVF9QRVJTT05BTF9JTkZPX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBFZGl0IHBlcnNvbmFsIGluZm9ybWF0aW9uIixsYWJlbDoiQ2xvc2UgTW9kYWwgRWRpdCBwZXJzb25hbCBpbmZvcm1hdGlvbiJ9LEVESVRfVVNFUl9OQU1FX0VESVRfUEVSU09OQUxfSU5GT19NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgVXNlciBuYW1lIG9uIE1vZGFsIEVkaXQgcGVyc29uYWwgaW5mb3JtYXRpb24iLGxhYmVsOiJFZGl0IFVzZXIgbmFtZSBvbiBNb2RhbCBFZGl0IHBlcnNvbmFsIGluZm9ybWF0aW9uIn0sRURJVF9FTUFJTF9FRElUX1BFUlNPTkFMX0lORk9fTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJFZGl0IGlucHV0IEVtYWlsIG9uIE1vZGFsIEVkaXQgcGVyc29uYWwgaW5mb3JtYXRpb24iLGxhYmVsOiJFZGl0IEVtYWlsIG9uIE1vZGFsIEVkaXQgcGVyc29uYWwgaW5mb3JtYXRpb24ifSxDQU5DRUxfQlROX0VESVRfUEVSU09OQUxfSU5GT19NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIEVkaXQgcGVyc29uYWwgaW5mb3JtYXRpb24iLGxhYmVsOiJDbG9zZSBNb2RhbCBFZGl0IHBlcnNvbmFsIGluZm9ybWF0aW9uIn0sU1VCTUlUX0JUTl9FRElUX1BFUlNPTkFMX0lORk9fTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBvbiBNb2RhbCBFZGl0IHBlcnNvbmFsIGluZm9ybWF0aW9uIixsYWJlbDoiU3VibWl0IGNoYW5nZXMgb24gTW9kYWwgRWRpdCBwZXJzb25hbCBpbmZvcm1hdGlvbiJ9LENIQU5HRV9MQU5HVUFHRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgTGFuZ3VhZ2UiLGxhYmVsOiJDaGFuZ2UgbGFuZ3VhZ2UifX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlBST0ZJTEVfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvcHJvZmlsZVBhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJQUk9GSUxFX1BBR0VfRVZFTlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9wcm9maWxlUGFnZUV2ZW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3NldHRpbmdzUGFnZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TRVRUSU5HU19QQUdFPSJzZXR0aW5ncyIsbz10LlNFVFRJTkdTX1BBR0VfRVZFTlRTPXtHRU5FUkFMX1RBQjp7Y2F0ZWdvcnk6cixhY3Rpb246Ik1ZIENVU1RPTSBFVkVOVCIsbGFiZWw6Ik1ZIENVU1RPTSBFVkVOVCJ9LElOQUNUSVZJVFlfVElNRU9VVF9HRU5FUkFMOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBpbnB1dCBMYXVuY2ggaW5hY3Rpdml0eSB0aW1lb3V0IG9uIHRhYiBHZW5lcmFsIixsYWJlbDoiQ2hhbmdlIGlucHV0IExhdW5jaCBpbmFjdGl2aXR5IHRpbWVvdXQgb24gdGFiIEdlbmVyYWwifSxLRUVQX0xPR1NfR0VORVJBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgS2VlcCBsb2dzIG9uIHRhYiBHZW5lcmFsIixsYWJlbDoiQ2hhbmdlIGlucHV0IEtlZXAgbG9ncyBvbiB0YWIgR2VuZXJhbCJ9LEtFRVBfU0NSRUVOU0hPVFNfR0VORVJBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgS2VlcCBzY3JlZW5zaG90cyBvbiB0YWIgR2VuZXJhbCIsbGFiZWw6IkNoYW5nZSBpbnB1dCBLZWVwIHNjcmVlbnNob3RzIG9uIHRhYiBHZW5lcmFsIn0sR0VORVJBTF9TVUJNSVQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBvbiB0YWIgR2VuZXJhbCIsbGFiZWw6IlN1Ym1pdCBjaGFuZ2VzIG9uIHRhYiBHZW5lcmFsIn0sTk9USUZJQ0FUSU9OU19UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiB0YWIgTm90aWZpY2F0aW9ucyBpbiBTZXR0aW5ncyIsbGFiZWw6Ik9wZW4gdGFiIE5vdGlmaWNhdGlvbnMgaW4gU2V0dGluZ3MifSxERUxFVEVfUlVMRV9OT1RJRklDQVRJT05TOntjYXRlZ29yeTpyLGFjdGlvbjoiRGVsZXRlIHJ1bGUgb24gdGFiIE5vdGlmaWNhdGlvbnMiLGxhYmVsOiJEZWxldGUgcnVsZSBvbiB0YWIgTm90aWZpY2F0aW9ucyJ9LEVESVRfUkVDSVBJRU5UU19JTlBVVF9OT1RJRklDQVRJT05TOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBpbnB1dCBSZWNpcGllbnRzIG9uIHRhYiBOb3RpZmljYXRpb25zIixsYWJlbDoiQ2hhbmdlIGlucHV0IFJlY2lwaWVudHMgb24gdGFiIE5vdGlmaWNhdGlvbnMifSxDSEVDS0JPWF9MQVVOQ0hfT1dORVJfTk9USUZJQ0FUSU9OUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgY2hlY2tib3ggTGF1bmNoIG93bmVyIG9uIHRhYiBOb3RpZmljYXRpb25zIixsYWJlbDoiQ2hlY2svdW5jaGVjayBMYXVuY2ggb3duZXIgb24gdGFiIE5vdGlmaWNhdGlvbnMifSxFRElUX0lOX0NBU0VfSU5QVVRfTk9USUZJQ0FUSU9OUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgSW4gY2FzZSBvbiB0YWIgTm90aWZpY2F0aW9ucyIsbGFiZWw6IkNoYW5nZSBpbnB1dCBJbiBjYXNlIG9uIHRhYiBOb3RpZmljYXRpb25zIn0sTEFVTkNIX05BTUVfSU5QVVRfTk9USUZJQ0FUSU9OUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgTGF1bmNoIG5hbWVzIG9uIHRhYiBOb3RpZmljYXRpb25zIixsYWJlbDoiQ2hhbmdlIGlucHV0IExhdW5jaCBuYW1lcyBvbiB0YWIgTm90aWZpY2F0aW9ucyJ9LFRBR1NfSU5QVVRfTk9USUZJQ0FUSU9OUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXQgVGFncyBvbiB0YWIgTm90aWZpY2F0aW9ucyIsbGFiZWw6IkNoYW5nZSBpbnB1dCBUYWdzIG9uIHRhYiBOb3RpZmljYXRpb25zIn0sQUREX1JVTEVfQlROX05PVElGSUNBVElPTlM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBuZXcgcnVsZSBvbiB0YWIgTm90aWZpY2F0aW9ucyIsbGFiZWw6IkFkZCBuZXcgcnVsZSBvbiB0YWIgTm90aWZpY2F0aW9ucyJ9LElOVEVHUkFUSU9OU19UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiB0YWIgSW50ZWdyYXRpb25zIGluIFNldHRpbmdzIixsYWJlbDoiT3BlbiB0YWIgSW50ZWdyYXRpb25zIGluIFNldHRpbmdzIn0sU0VMRUNUX0JUU19CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJFZGl0IGlucHV0IEJ1ZyB0cmFja2luZyBzeXN0ZW0gb24gdGFiIEludGVncmF0aW9ucyIsbGFiZWw6IkNoYW5nZSBpbnB1dCBCdWcgdHJhY2tpbmcgc3lzdGVtIG9uIHRhYiBJbnRlZ3JhdGlvbnMifSxDSEFOR0VfUFJPSkVDVF9CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDaGFuZ2UgcHJvamVjdCBvZiBCVFMgSW5zdGFuY2VzIG9uIHRhYiBJbnRlZ3JhdGlvbnMiLGxhYmVsOiJDaGFuZ2UgcHJvamVjdCBvZiBCVFMgSW5zdGFuY2VzIG9uIHRhYiBJbnRlZ3JhdGlvbnMifSxBRERfTkVXX0JUU19JTlNUQU5DRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGxpbmsgQWRkIG5ldyBpbnN0YW5jZSBvbiB0YWIgSW50ZWdyYXRpb25zIixsYWJlbDoiQXJpc2UgZmllbGRzIGZvciBhZGRpbmcgbmV3IHByb2plY3Qgb24gdGFiIEludGVncmF0aW9ucyJ9LEVESVRfUFJPSkVDVF9CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIEVkaXQgUHJvamVjdHMgQlRTIEluc3RhbmNlIG9uIHRhYiBJbnRlZ3JhdGlvbnMiLGxhYmVsOiJBcmlzZSBmaWVsZHMgZm9yIGVkaXRpbmcgUHJvamVjdHMgQlRTIEluc3RhbmNlIG9uIHRhYiBJbnRlZ3JhdGlvbnMifSxERUxFVEVfUFJPSkVDVF9CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIERlbGV0ZSBQcm9qZWN0cyBCVFMgSW5zdGFuY2Ugb24gdGFiIEludGVncmF0aW9ucyIsbGFiZWw6IkFyaXNlIE1vZGFsIGRlbGV0ZSBQcm9qZWN0cyBCVFMgSW5zdGFuY2Ugb24gdGFiIEludGVncmF0aW9ucyJ9LENBTkNFTF9FRElUX1BST0pFQ1RfQlRTOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgRWRpdCBQcm9qZWN0cyBCVFMgSW5zdGFuY2Ugb24gdGFiIEludGVncmF0aW9ucyIsbGFiZWw6IkNhbmNlbCBDaGFuZ2Ugb2YgUHJvamVjdHMgQlRTIEluc3RhbmNlIG9uIHRhYiBJbnRlZ3JhdGlvbnMifSxTVUJNSVRfRURJVF9QUk9KRUNUX0JUUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gU3VibWl0IEVkaXQgUHJvamVjdHMgQlRTIEluc3RhbmNlIG9uIHRhYiBJbnRlZ3JhdGlvbnMiLGxhYmVsOiJTdWJtaXQgQ2hhbmdlIG9mIFByb2plY3RzIEJUUyBJbnN0YW5jZSBvbiB0YWIgSW50ZWdyYXRpb25zIn0sQ0xPU0VfSUNPTl9ERUxFVEVfUFJPSkVDVF9NT0RBTF9CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIENsb3NlIG9uIE1vZGFsIERlbGV0ZSBQcm9qZWN0IixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIFByb2plY3QifSxDQU5DRUxfQlROX0RFTEVURV9QUk9KRUNUX01PREFMX0JUUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIERlbGV0ZSBQcm9qZWN0IixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIFByb2plY3QifSxERUxFVEVfQlROX0RFTEVURV9QUk9KRUNUX01PREFMX0JUUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gRGVsZXRlIG9uIE1vZGFsIERlbGV0ZSBQcm9qZWN0IixsYWJlbDoiRGVsZXRlIFByb2plY3QifSxFRElUX0RFRkFVTFRfUFJPUFNfRk9SX0lTU1VFX0JUUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkVkaXQgaW5wdXRzIG9mIERlZmF1bHQgcHJvcGVydGllcyBmb3IgaXNzdWUgZm9ybSBvbiB0YWIgSW50ZWdyYXRpb25zIixsYWJlbDoiQ2hhbmdlIGlucHV0cyBvZiBEZWZhdWx0IHByb3BlcnRpZXMgZm9yIGlzc3VlIGZvcm0gb24gdGFiIEludGVncmF0aW9ucyJ9LFVQREFURV9CVE5fREVGQVVMVF9QUk9QU19CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFVwZGF0ZSBEZWZhdWx0IHByb3BlcnRpZXMgZm9yIGlzc3VlIGZvcm0gb24gdGFiIEludGVncmF0aW9ucyIsbGFiZWw6IlVwZGF0ZSBEZWZhdWx0IHByb3BlcnRpZXMgZm9yIGlzc3VlIGZvcm0gb24gdGFiIEludGVncmF0aW9ucyJ9LFNVQk1JVF9CVE5fREVGQVVMVF9QUk9QU19CVFM6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBEZWZhdWx0IHByb3BlcnRpZXMgZm9yIGlzc3VlIGZvcm0gb24gdGFiIEludGVncmF0aW9ucyIsbGFiZWw6IlN1Ym1pdCBDaGFuZ2Ugb2YgRGVmYXVsdCBwcm9wZXJ0aWVzIGZvciBpc3N1ZSBmb3JtIG9uIHRhYiBJbnRlZ3JhdGlvbnMifSxFRElUX0RFRkVDVF9UQUdfREVGRUNUX1RZUEVTOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBFZGl0IGRlZmVjdCB0YWcgb24gdGFiIERlZmVjdCBUeXBlcyIsbGFiZWw6IkFyaXNlIGZpZWxkcyBmb3IgZWRpdGluZyBkZWZlY3QgdGFnIG9uIHRhYiBEZWZlY3QgVHlwZXMifSxERUxFVEVfSUNPTl9ERUZFQ1RfVFlQRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gRGVsZXRlIGRlZmVjdCB0YWcgb24gdGFiIERlZmVjdCBUeXBlcyIsbGFiZWw6IkFyaXNlIE1vZGFsIERlbGV0ZSBkZWZlY3QgdHlwZSBvbiB0YWIgRGVmZWN0IFR5cGVzIn0sRURJVF9ERUZFQ1RfVFlQRV9OQU1FX0RFRkVDVF9UWVBFOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBpbnB1dCBEZWZlY3QgdHlwZSBuYW1lIG9uIHRhYiBEZWZlY3QgVHlwZXMiLGxhYmVsOiJDaGFuZ2UgRGVmZWN0IHR5cGUgbmFtZSBvbiB0YWIgRGVmZWN0IFR5cGVzIn0sRURJVF9ERUZFQ1RfVFlQRV9BQkJSRVZJQVRJT046e2NhdGVnb3J5OnIsYWN0aW9uOiJFZGl0IGlucHV0IERlZmVjdCB0eXBlIGFiYnJldmlhdGlvbiBvbiB0YWIgRGVmZWN0IFR5cGVzIixsYWJlbDoiQ2hhbmdlIERlZmVjdCB0eXBlIGFiYnJldmlhdGlvbiBvbiB0YWIgRGVmZWN0IFR5cGVzIn0sQ0hBTkdFX0RFRkVDVF9UWVBFX0NPTE9SOntjYXRlZ29yeTpyLGFjdGlvbjoiRWRpdCBpbnB1dCBEZWZlY3QgdHlwZSBjb2xvciBvbiB0YWIgRGVmZWN0IFR5cGVzIixsYWJlbDoiQ2hhbmdlIERlZmVjdCB0eXBlIGNvbG9yIG9uIHRhYiBEZWZlY3QgVHlwZXMifSxTVUJNSVRfREVGRUNUX1RZUEVfQ0hBTkdFUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gU3VibWl0IGRlZmVjdCB0eXBlIGNoYW5nZSBvbiB0YWIgRGVmZWN0IFR5cGVzIixsYWJlbDoiQ2hhbmdlIGRlZmVjdCB0eXBlIG9uIHRhYiBEZWZlY3QgVHlwZXMifSxDQU5DRUxfREVGRUNUX1RZUEVfQ0hBTkdFUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGljb24gQ2FuY2VsIGRlZmVjdCB0eXBlIGNoYW5nZSBvbiB0YWIgRGVmZWN0IFR5cGVzIixsYWJlbDoiQ2FuY2VsIGRlZmVjdCB0eXBlIGNoYW5nZSBvbiB0YWIgRGVmZWN0IFR5cGVzIn0sQ0xPU0VfSUNPTl9ERUxFVEVfREVGRUNUX1RZUEU6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBpY29uIENsb3NlIG9uIE1vZGFsIERlbGV0ZSBEZWZlY3QgdHlwZSIsbGFiZWw6IkNsb3NlIE1vZGFsIERlbGV0ZSBEZWZlY3QgdHlwZSJ9LENBTkNFTF9CVE5fREVMRVRFX0RFRkVDVF9UWVBFX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgRGVsZXRlIERlZmVjdCB0eXBlIixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIERlZmVjdCB0eXBlIn0sREVMRVRFX0JUTl9ERUxFVEVfREVGRUNUX1RZUEVfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIERlbGV0ZSBvbiBNb2RhbCBEZWxldGUgRGVmZWN0IHR5cGUiLGxhYmVsOiJEZWxldGUgRGVmZWN0IHR5cGUifSxBRERfREVGRUNUX1RZUEVfQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBBZGQgZGVmZWN0IHR5cGUgb24gdGFiIERlZmVjdCB0eXBlcyIsbGFiZWw6IkFyaXNlIGZpZWxkZXMgZm9yIEFkZCBkZWZlY3QgdHlwZSBvbiB0YWIgRGVmZWN0IHR5cGVzIn0sUkVTRVRfREVGQVVMVF9DT0xPUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIGxpbmsgUmVzZXQgdG8gZGVmYXVsdCBjb2xvcnMgb24gdGFiIERlZmVjdCB0eXBlcyIsbGFiZWw6IkFyaXNlIGZpZWxkZXMgZm9yIEFkZCBkZWZlY3QgdHlwZSBvbiB0YWIgRGVmZWN0IHR5cGVzIn0sQ0xPU0VfSUNPTl9SRVNFVF9ERUZFQ1RfQ09MT1JTX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gaWNvbiBDbG9zZSBvbiBNb2RhbCBSZXNldCBEZWZlY3QgY29sb3JzIixsYWJlbDoiQ2xvc2UgTW9kYWwgUmVzZXQgRGVmZWN0IGNvbG9ycyJ9LENBTkNFTF9CVE5fUkVTRVRfREVGRUNUX0NPTE9SU19NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIFJlc2V0IERlZmVjdCBjb2xvcnMiLGxhYmVsOiJDbG9zZSBNb2RhbCBSZXNldCBEZWZlY3QgY29sb3JzIn0sUkVTRVRfQlROX1JFU0VUX0RFRkVDVF9DT0xPUlNfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFJlc2V0IG9uIE1vZGFsIFJlc2V0IERlZmVjdCBjb2xvcnMiLGxhYmVsOiJSZXNldCBEZWZlY3QgY29sb3JzIn0sREVGRUNUX1RZUEVfVEFCOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gdGFiIERlZmVjdCBUeXBlcyBpbiBTZXR0aW5ncyIsbGFiZWw6Ik9wZW4gdGFiIERlZmVjdCBUeXBlcyBpbiBTZXR0aW5ncyJ9LERFTU9fREFUQV9UQUI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiB0YWIgRGVtbyBEYXRhIGluIFNldHRpbmdzIixsYWJlbDoiT3BlbiB0YWIgRGVtbyBEYXRhIGluIFNldHRpbmdzIn0sRU5URVJfUE9TVEZJWF9ERU1PX0RBVEE6e2NhdGVnb3J5OnIsYWN0aW9uOiJFZGl0IGlucHV0IFBvc3RmaXggb24gdGFiIERlbW8gRGF0YSIsbGFiZWw6IkNoYW5nZSBQb3N0Zml4IG9uIHRhYiBEZW1vIERhdGEifSxHRU5FUkFURV9EQVRBX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gR2VuZXJhdGUgRGVtbyBEYXRhIG9uIHRhYiBEZW1vIERhdGEiLGxhYmVsOiJHZW5lcmF0ZSBEZW1vIERhdGEgb24gdGFiIERlbW8gRGF0YSJ9LEFVVE9fQU5BTFlTSVNfVEFCOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gdGFiIEF1dG8tQW5hbHlzaXMgaW4gU2V0dGluZ3MiLGxhYmVsOiJPcGVuIHRhYiBBdXRvLUFuYWx5c2lzIGluIFNldHRpbmdzIn0sQVVUT19BTkFMWVNJU19TV0lUQ0hFUjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEF1dG8tQW5hbHlzaXMgb24vb2ZmIGluIEF1dG8tQW5hbHlzaXMgdGFiIixsYWJlbDoiQXV0by1BbmFseXNpcyBvbi9vZmYifSxBVVRPX0FOQUxZU0lTX0JBU0VfUkFESU9fQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2hvb3NlIHJhZGlvIGJ0dG4gb2YgQmFzZSBmb3IgQXV0by1BbmFseXNpcyIsbGFiZWw6IkNob29zZSBCYXNlIGZvciBBdXRvLUFuYWx5c2lzIn0sVE9HR0xFX0FVVE9fQU5BTFlTSVNfTU9ERTp7Y2F0ZWdvcnk6cixhY3Rpb246IlRvZ2dsZSBNb2RlIG9mIEF1dG8tQW5hbHlzaXMgQWNjdXJhY3kiLGxhYmVsOiJDaG9vc2UgTW9kZSBvZiBBdXRvLUFuYWx5c2lzIn0sU1VCTUlUX0FVVE9fQU5BTFlTSVNfU0VUVElOR1M6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFN1Ym1pdCBpbiBBdXRvLUFuYWx5c2lzIHRhYiIsbGFiZWw6IlN1Ym1pdCBjaGFuZ2VzIGluIEF1dG8tQW5hbHlzaXMgdGFiIn0sUkVNT1ZFX0lOREVYX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gUmVtb3ZlIGluZGV4IGluIEF1dG8tQW5hbHlzaXMgdGFiIixsYWJlbDoiUmVtb3ZlIGluZGV4IGluIEF1dG8tQW5hbHlzaXMgdGFiIn0sR0VORVJBVEVfSU5ERVhfQlROOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBHZW5lcmF0ZSBpbmRleCBpbiBBdXRvLUFuYWx5c2lzIHRhYiIsbGFiZWw6IkdlbmVyYXRlIGluZGV4IGluIEF1dG8tQW5hbHlzaXMgdGFiIn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJTRVRUSU5HU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9zZXR0aW5nc1BhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJTRVRUSU5HU19QQUdFX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2V0dGluZ3NQYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2lkZWJhckhlYWRlckZvb3RlckV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TSURFQkFSX0VWRU5UUz17Q0xJQ0tfREFTSEJPQVJEX0JUTjp7Y2F0ZWdvcnk6InNpZGViYXIiLGFjdGlvbjoiQ2xpY2sgb24gTWVudSBidXR0b24gRGFzaGJvYXJkcyIsbGFiZWw6IlRyYW5zaXRpb24gb24gRGFzaGJvYXJkcyBQYWdlIn0sQ0xJQ0tfRklMVEVSU19CVE46e2NhdGVnb3J5OiJzaWRlYmFyIixhY3Rpb246IkNsaWNrIG9uIE1lbnUgYnV0dG9uIEZpbHRlcnMiLGxhYmVsOiJUcmFuc2l0aW9uIG9uIEZpbHRlcnMgUGFnZSJ9LENMSUNLX0RFQlVHX0JUTjp7Y2F0ZWdvcnk6InNpZGViYXIiLGFjdGlvbjoiQ2xpY2sgb24gTWVudSBidXR0b24gRGVidWciLGxhYmVsOiJUcmFuc2l0aW9uIG9uIERlYnVnIFBhZ2UifX0sbz0iaGVhZGVyIixzPXQuSEVBREVSX0VWRU5UUz17Q0xJQ0tfTUVNQkVSU19CVE46e2NhdGVnb3J5Om8sYWN0aW9uOiJDbGljayBvbiBNZW51IEJ0dG4gTWVtYmVycyIsbGFiZWw6IlRyYW5zaXRpb24gb24gTWVtYmVycyBQYWdlIn0sQ0xJQ0tfU0VUVElOR1NfQlROOntjYXRlZ29yeTpvLGFjdGlvbjoiQ2xpY2sgb24gTWVudSBCdHRuIFNldHRpbmdzIixsYWJlbDoiVHJhbnNpdGlvbiBvbiBTZXR0aW5ncyBQYWdlIn0sQ0xJQ0tfUFJPRklMRV9EUk9QRE9XTjp7Y2F0ZWdvcnk6byxhY3Rpb246IkNsaWNrIG9uIFByb2ZpbGUgRHJvcGRvd24iLGxhYmVsOiJBcmlzZSBEcm9wZG93biBNZW51In0sQ0xJQ0tfUFJPRklMRV9MSU5LOntjYXRlZ29yeTpvLGFjdGlvbjoiQ2xpY2sgb24gUHJvZmlsZSBsaW5rIG9uIERyb3Bkb3duIixsYWJlbDoiVHJhbnNpdGlvbiBvbiBQcm9maWxlIFBhZ2UifSxDTElDS19BRE1JTklTVFJBVEVfTElOSzp7Y2F0ZWdvcnk6byxhY3Rpb246IkNsaWNrIG9uIEFkbWluaXN0cmF0ZSBsaW5rIG9uIERyb3Bkb3duIixsYWJlbDoiVHJhbnNpdGlvbiB0byBBZG1pbmlzdHJhdGUgTW9kZSJ9LENMSUNLX0xPR09VVF9MSU5LOntjYXRlZ29yeTpvLGFjdGlvbjoiQ2xpY2sgb24gTG9nb3V0IGxpbmsgb24gRHJvcGRvd24iLGxhYmVsOiJMb2dvdXQgYW5kIHRyYW5zaXRpb24gb24gTGFuZGluZyBQYWdlIn0sQ0xJQ0tfUFJPSkVDVF9EUk9QRE9XTjp7Y2F0ZWdvcnk6byxhY3Rpb246IkNsaWNrIG9uIFByb2plY3QgRHJvcGRvd24iLGxhYmVsOiJBcmlzZSBEcm9wZG93biB3aXRoIGxpc3Qgb2YgUHJvamVjdHMifSxDTElDS19QUk9KRUNUX05BTUVfTElOSzp7Y2F0ZWdvcnk6byxhY3Rpb246IkNsaWNrIG9uIEFub3RoZXIgUHJvamVjdCBOYW1lIixsYWJlbDoiVHJhbnNpdGlvbiB0byBhbm90aGVyIHByb2plY3QifSxDTElDS19BUElfTElOSzp7Y2F0ZWdvcnk6byxhY3Rpb246IkNsaWNrIG9uIGxpbmsgQVBJIixsYWJlbDoiVHJhbnNpdGlvbiB0byBBUEkgcGFnZSJ9fSxpPXQuRk9PVEVSX0VWRU5UUz17QkFDS19UT19UT1BfQ0xJQ0s6e2NhdGVnb3J5OiJmb290ZXIiLGFjdGlvbjoiQ2xpY2sgb24gQmFjayB0byBUb3AgbGluayIsbGFiZWw6IlRyYW5zaXRpb24gdG8gdG9wIn0sRk9SS19VU19DTElDSzp7Y2F0ZWdvcnk6ImZvb3RlciIsYWN0aW9uOiJDbGljayBvbiBGb3JrIHVzIG9uIEdpdEh1YiBsaW5rIixsYWJlbDoiRm9yayBvbiBHaXRIdWIifSxTTEFDS19MSU5LOntjYXRlZ29yeToiZm9vdGVyIixhY3Rpb246IkNsaWNrIG9uIENoYXQgd2l0aCB1cyBvbiBTbGFjayBsaW5rIixsYWJlbDoiTW92ZSB0byBTbGFjayJ9LENPTlRBQ1RfVVNfTElOSzp7Y2F0ZWdvcnk6ImZvb3RlciIsYWN0aW9uOiJDbGljayBvbiBDb250YWN0IHVzIGxpbmsiLGxhYmVsOiJPcGVuIG1lc3NhZ2Ugd2luZG93In0sRVBBTV9MSU5LOntjYXRlZ29yeToiZm9vdGVyIixhY3Rpb246IkNsaWNrIG9uIEVQQU0gbGluayIsbGFiZWw6IlRyYW5zaXRpb24gdG8gRVBBTSBzaXRlIn0sRE9DVU1FTlRBVElPTl9MSU5LOntjYXRlZ29yeToiZm9vdGVyIixhY3Rpb246IkNsaWNrIG9uIERvY3VtZW50YXRpb24gbGluayIsbGFiZWw6IlRyYW5zaXRpb24gdG8gRG9jdW1lbnRhdGlvbiJ9LEVESVRfTlVNQkVSX1BFUl9QQUdFOntjYXRlZ29yeToiZm9vdGVyIixhY3Rpb246IkVkaXQgbnVtYmVyIHBlciBwYWdlIixsYWJlbDoiQ2hhbmdlIG51bWJlciBwZXIgcGFnZSJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiU0lERUJBUl9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3NpZGViYXJIZWFkZXJGb290ZXJFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJIRUFERVJfRVZFTlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9zaWRlYmFySGVhZGVyRm9vdGVyRXZlbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiRk9PVEVSX0VWRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2lkZWJhckhlYWRlckZvb3RlckV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJzaWRlYmFyIiwiU0lERUJBUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2lkZWJhckhlYWRlckZvb3RlckV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkhFQURFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc2lkZWJhckhlYWRlckZvb3RlckV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJmb290ZXIiLCJGT09URVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3NpZGViYXJIZWFkZXJGb290ZXJFdmVudHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9zdGVwUGFnZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TVEVQX1BBR0U9InN0ZXAiLG89dC5TVEVQX1BBR0VfRVZFTlRTPXtSRUZJTkVfQllfTkFNRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkVudGVyIHBhcmFtZXRlcnMgdG8gcmVmaW5lIGJ5IG5hbWUiLGxhYmVsOiJSZWZpbmUgYnkgbmFtZSJ9LFJFRklORV9CVE5fTU9SRTp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIFJlZmluZSBidHRuIE1vcmUiLGxhYmVsOiJBcmlzZSBkcm9wZG93biB3aXRoIHBhcmFtZXRlcnMifSxTRUxFQ1RfUkVGSU5FX1BBUkFNUzp7Y2F0ZWdvcnk6cixhY3Rpb246IlNlbGVjdCBwYXJhbWV0ZXJzIHRvIHJlZmluZSIsbGFiZWw6IlNob3cgcGFyYW1ldGVycyBmaWVsZHMgdG8gcmVmaW5lIn0sTUVUSE9EX1RZUEVfU1dJVENIRVI6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBNZXRob2QgdHlwZSBzd2l0Y2hlciIsbGFiZWw6IlNob3cvSGlkZSBtZXRob2QgdHlwZSJ9LE1FVEhPRF9UWVBFX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgTWV0aG9kIHR5cGUnLGxhYmVsOidBcmlzZXMgYWN0aXZlICJNZXRob2QgdHlwZSIgaW5wdXQnfSxNRVRIT0RfVFlQRV9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgTWV0aG9kIHR5cGUnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IE1ldGhvZCB0eXBlIn0sTkFNRV9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJmaWx0ZXIiIE5hbWUnLGxhYmVsOiJTdWl0ZSBuYW1lIGlucHV0IGJlY29tZXMgYWN0aXZlIn0sTkFNRV9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgTmFtZScsbGFiZWw6IlNvcnQgaXRlbXMgYnkgTmFtZSJ9LFNUQVRVU19GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJmaWx0ZXIiIFN0YXR1cycsbGFiZWw6J0FyaXNlcyBhY3RpdmUgIlN0YXR1cyIgaW5wdXQnfSxTVEFUVVNfU09SVElORzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gInNvcnRpbmciIFN0YXR1cycsbGFiZWw6IlNvcnQgaXRlbXMgYnkgU3RhdHVzIn0sU1RBUlRfVElNRV9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJmaWx0ZXIiIFN0YXJ0IHRpbWUnLGxhYmVsOidBcmlzZXMgYWN0aXZlICJTdGFydCB0aW1lIiBpbnB1dCd9LFNUQVJUX1RJTUVfU09SVElORzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gInNvcnRpbmciIFN0YXJ0IHRpbWUnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IFN0YXJ0IHRpbWUifSxERUZFQ1RfVFlQRV9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJmaWx0ZXIiIERlZmVjdCB0eXBlJyxsYWJlbDonQXJpc2VzIGFjdGl2ZSAiRGVmZWN0IHR5cGUiIGlucHV0J30sREVGRUNUX1RZUEVfU09SVElORzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gInNvcnRpbmciIERlZmVjdCB0eXBlJyxsYWJlbDoiU29ydCBpdGVtcyBieSBEZWZlY3QgdHlwZSJ9LEVESVRfSUNPTl9DTElDSzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGl0ZW0gaWNvbiAiZWRpdCInLGxhYmVsOidBcmlzZSBNb2RhbCAiRWRpdCBJdGVtIid9LEVESVRfREVGRUNUX1RZUEVfSUNPTjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImVkaXQiIG9mIERlZmVjdCB0eXBlIHRhZycsbGFiZWw6J0FyaXNlIE1vZGFsICJFZGl0IERlZmVjdCBUeXBlIid9LFNFTEVDVF9BTExfSVRFTVM6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpdGVtIGljb24gInNlbGVjdCBhbGwgaXRlbXMiJyxsYWJlbDoiU2VsZWN0L3Vuc2VsZWN0IGFsbCBpdGVtcyJ9LFNFTEVDVF9PTkVfSVRFTTp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGl0ZW0gaWNvbiAic2VsZWN0IG9uZSBpdGVtIicsbGFiZWw6IlNlbGVjdC91bnNlbGVjdCBvbmUgaXRlbSJ9LENMT1NFX0lDT05fRURJVF9JVEVNX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gQ2xvc2UgSWNvbiBvbiBNb2RhbCAiRWRpdCBJdGVtIicsbGFiZWw6J0Nsb3NlIG1vZGFsICJFZGl0IEl0ZW0iJ30sRURJVF9JVEVNX0RFU0NSSVBUSU9OOntjYXRlZ29yeTpyLGFjdGlvbjonRWRpdCBkZXNjcmlwdGlvbiBpbiBNb2RhbCAiRWRpdCBJdGVtIicsbGFiZWw6IkVkaXQgZGVzY3JpcHRpb24ifSxDQU5DRUxfQlROX0VESVRfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsICJFZGl0IEl0ZW0nLGxhYmVsOidDbG9zZSBtb2RhbCAiRWRpdCBJdGVtIid9LFNBVkVfQlROX0VESVRfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIEJ0dG4gU2F2ZSBvbiBNb2RhbCAiRWRpdCBJdGVtIicsbGFiZWw6IlNhdmUgY2hhbmdlcyJ9LENMT1NFX0lDT05fRURJVF9ERUZFQ1RfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBDbG9zZSBJY29uIG9uIE1vZGFsICJFZGl0IERlZmVjdCBUeXBlIicsbGFiZWw6J0Nsb3NlIG1vZGFsICJFZGl0IERlZmVjdCBUeXBlIid9LEVESVRfREVTQ1JJUFRJT05fRURJVF9ERUZFQ1RfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOidFZGl0IGRlc2NyaXB0aW9uIGluIE1vZGFsICJFZGl0IERlZmVjdCBUeXBlIicsbGFiZWw6IkVkaXQgZGVzY3JpcHRpb24ifSxDQU5DRUxfQlROX0VESVRfREVGRUNUX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgIkVkaXQgRGVmZWN0IFR5cGUiJyxsYWJlbDonQ2xvc2UgbW9kYWwgIkVkaXQgRGVmZWN0IFR5cGUiJ30sU0FWRV9CVE5fRURJVF9ERUZFQ1RfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuIFNhdmUgb24gTW9kYWwgIkVkaXQgRGVmZWN0IFR5cGUiJyxsYWJlbDoiU2F2ZSBjaGFuZ2VzIn0sQ0xPU0VfSUNPTl9TRUxFQ1RFRF9JVEVNOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAiY2xvc2UiIG9uIHNlbGVjdGVkIGl0ZW0nLGxhYmVsOiJVbnNlbGVjdCBpdGVtIn0sUFJPQ0VFRF9WQUxJRF9JVEVNUzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIEJ0dG4gIlByb2NlZWQgVmFsaWQgSXRlbXMiJyxsYWJlbDoiUmVtb3ZlIGludmFsaWQgbGF1bmNoZXMgZnJvbSBzZWxlY3Rpb24ifSxDTE9TRV9JQ09OX0ZPUl9BTExfU0VMRUNUSU9OUzp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIENsb3NlIEljb24gb2YgYWxsIHNlbGVjdGlvbiIsbGFiZWw6IkNsb3NlIHBhbmVsIHdpdGggc2VsZWN0ZWQgaXRlbXMifSxFRElUX0RFRkVDVF9BQ1RJT046e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuICJFZGl0IERlZmVjdCInLGxhYmVsOidBcmlzZSBNb2RhbCAiRWRpdCBEZWZlY3QgVHlwZSInfSxQT1NUX0JVR19BQ1RJT046e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuICJQb3N0IEJ1ZyInLGxhYmVsOidBcmlzZSBNb2RhbCAiUG9zdCBCdWciJ30sTE9BRF9CVUdfQUNUSU9OOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gQnR0biAiTG9hZCBCdWciJyxsYWJlbDonQXJpc2UgTW9kYWwgIkxvYWQgQnVnIid9LERFTEVURV9BQ1RJT046e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuICJEZWxldGUiJyxsYWJlbDonQXJpc2UgTW9kYWwgIkRlbGV0ZSBJdGVtIid9LEhJU1RPUllfQlROOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gQnR0biAiSGlzdG9yeSInLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEhpc3RvcnkgVmlldyBQYWdlIn0sUkVGUkVTSF9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuICJSZWZyZXNoIicsbGFiZWw6IlJlZnJlc2ggcGFnZSJ9LENMT1NFX0lDT05fUE9TVF9CVUdfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBJY29uIENsb3NlIG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiQ2xvc2UgTW9kYWwgUG9zdCBCdWcifSxTQ1JFRU5TSE9UU19TV0lUQ0hFUl9QT1NUX0JVR19NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIFNjcmVlbnNob3RzIHN3aXRjaGVyIG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiT24vb2ZmIFNjcmVlbnNob3RzIGluIE1vZGFsIFBvc3QgQnVnIn0sTE9HU19TV0lUQ0hFUl9QT1NUX0JVR19NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIExvZ3Mgc3dpdGNoZXIgb24gTW9kYWwgUG9zdCBCdWciLGxhYmVsOiJPbi9vZmYgTG9ncyBpbiBNb2RhbCBQb3N0IEJ1ZyJ9LENPTU1FTlRfU1dJVENIRVJfUE9TVF9CVUdfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBDb21tZW50IHN3aXRjaGVyIG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiT24vb2ZmIENvbW1lbnQgaW4gTW9kYWwgUG9zdCBCdWcifSxDQU5DRUxfQlROX1BPU1RfQlVHX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgUG9zdCBCdWciLGxhYmVsOiJDbG9zZSBNb2RhbCBQb3N0IEJ1ZyJ9LFBPU1RfQlROX1BPU1RfQlVHX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBQb3N0IG9uIE1vZGFsIFBvc3QgQnVnIixsYWJlbDoiUG9zdCBidWcifSxDTE9TRV9JQ09OX0xPQURfQlVHX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gSWNvbiBDbG9zZSBvbiBNb2RhbCBMb2FkIEJ1ZyIsbGFiZWw6IkNsb3NlIE1vZGFsIExvYWQgQnVnIn0sQUREX05FV19JU1NVRV9CVE5fTE9BRF9CVUdfTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEFkZCBOZXcgSXNzdWUgb24gTW9kYWwgTG9hZCBCdWciLGxhYmVsOiJBZGQgaW5wdXQgaW4gTW9kYWwgTG9hZCBCdWcifSxDQU5DRUxfQlROX0xPQURfQlVHX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgTG9hZCBCdWciLGxhYmVsOiJDbG9zZSBNb2RhbCBMb2FkIEJ1ZyJ9LExPQURfQlROX0xPQURfQlVHX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBMb2FkIG9uIE1vZGFsIExvYWQgQnVnIixsYWJlbDoiTG9hZCBidWcifSxDTE9TRV9JQ09OX0RFTEVURV9JVEVNX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gSWNvbiBDbG9zZSBvbiBNb2RhbCBEZWxldGUgSXRlbSIsbGFiZWw6IkNsb3NlIE1vZGFsIERlbGV0ZSBJdGVtIn0sQ0FOQ0VMX0JUTl9ERUxFVEVfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gQ2FuY2VsIG9uIE1vZGFsIERlbGV0ZSBJdGVtIixsYWJlbDoiQ2xvc2UgTW9kYWwgRGVsZXRlIEl0ZW0ifSxERUxFVEVfQlROX0RFTEVURV9JVEVNX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnR0biBEZWxldGUgb24gTW9kYWwgRGVsZXRlIEl0ZW0iLGxhYmVsOiJEZWxldGUgaXRlbSJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiU1RFUF9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9zdGVwUGFnZUV2ZW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlNURVBfUEFHRV9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3N0ZXBQYWdlRXZlbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc3VpdGVzUGFnZUV2ZW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TVUlURV9QQUdFPSJzdWl0ZXMiLG89dC5TVUlURVNfUEFHRV9FVkVOVFM9e1BMVVNfTUlOVVNfQlJFQURDUlVNQjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJyZWFkIENydW1iIGljb24gUGx1cy9NaW51cyIsbGFiZWw6IlNob3cvSGlkZSBhbGwgbmFtZXMgb2YgaXRlbXMifSxBTExfTEFCRUxfQlJFQURDUlVNQjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJyZWFkIENydW1iIEFsbCIsbGFiZWw6IlRyYW5zaXRpb24gdG8gTGF1bmNoZXMgUGFnZSJ9LElURU1fTkFNRV9CUkVBRENSVU1CX0NMSUNLOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gQnJlYWQgQ3J1bWIgSXRlbSBuYW1lIixsYWJlbDoiVHJhbnNpdGlvbiB0byBJdGVtIn0sREVMRVRFX0JUTjp7Y2F0ZWdvcnk6cixhY3Rpb246IkNsaWNrIG9uIEJ0dG4gRGVsZXRlIixsYWJlbDoiRGVsZXRlIHNlbGVjdGVkIEl0ZW1zIn0sSElTVE9SWV9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIEhpc3RvcnkiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEhpc3RvcnkgVmlldyBQYWdlIn0sUkVGUkVTSF9CVE46e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBCdHRuIFJlZnJlc2giLGxhYmVsOiJSZWZyZXNoIHRoZSBwYWdlIn0sUkVGSU5FX0JZX05BTUU6e2NhdGVnb3J5OnIsYWN0aW9uOiJFbnRlciBwYXJhbWV0ZXJzIHRvIHJlZmluZSBieSBuYW1lIixsYWJlbDoiUmVmaW5lIGJ5IG5hbWUifSxSRUZJTkVfQlROX01PUkU6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBSZWZpbmUgYnR0biBNb3JlIixsYWJlbDoiQXJpc2UgZHJvcGRvd24gd2l0aCBwYXJhbWV0ZXJzIn0sU0VMRUNUX1JFRklORV9QQVJBTVM6e2NhdGVnb3J5OnIsYWN0aW9uOiJTZWxlY3QgcGFyYW1ldGVycyB0byByZWZpbmUiLGxhYmVsOiJTaG93IHBhcmFtZXRlcnMgZmllbGRzIHRvIHJlZmluZSJ9LEVESVRfSUNPTl9DTElDSzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGl0ZW0gaWNvbiAiZWRpdCInLGxhYmVsOidBcmlzZSBNb2RhbCAiRWRpdCBJdGVtIid9LFNFTEVDVF9BTExfSVRFTVM6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpdGVtIGljb24gInNlbGVjdCBhbGwgaXRlbXMiJyxsYWJlbDoiU2VsZWN0L3Vuc2VsZWN0IGFsbCBpdGVtcyJ9LFNFTEVDVF9PTkVfSVRFTTp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGl0ZW0gaWNvbiAic2VsZWN0IG9uZSBpdGVtIicsbGFiZWw6IlNlbGVjdC91bnNlbGVjdCBvbmUgaXRlbSJ9LENMT1NFX0lDT05fU0VMRUNURURfSVRFTTp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImNsb3NlIiBvbiBzZWxlY3RlZCBpdGVtJyxsYWJlbDoiUmVtb3ZlIGl0ZW0gZnJvbSAgc2VsZWN0aW9uIn0sQ0xPU0VfSUNPTl9GT1JfQUxMX1NFTEVDVElPTlM6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJjbG9zZSIgb2YgYWxsIHNlbGVjdGlvbicsbGFiZWw6IlVuc2VsZWN0IGFsbCBpdGVtcyJ9LFBST0NFRURfVkFMSURfSVRFTVM6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBCdHRuICJQcm9jZWVkIFZhbGlkIEl0ZW1zIicsbGFiZWw6IlJlbW92ZSBpbnZhbGlkIGl0ZW1zIGZyb20gc2VsZWN0aW9uIn0sQ0xPU0VfSUNPTl9FRElUX0lURU1fTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBDbG9zZSBJY29uIG9uIE1vZGFsICJFZGl0IEl0ZW0iJyxsYWJlbDonQ2xvc2UgbW9kYWwgIkVkaXQgSXRlbSInfSxFRElUX0lURU1fREVTQ1JJUFRJT046e2NhdGVnb3J5OnIsYWN0aW9uOidFZGl0IGRlc2NyaXB0aW9uIGluIE1vZGFsICJFZGl0IEl0ZW0iJyxsYWJlbDoiRWRpdCBkZXNjcmlwdGlvbiJ9LENBTkNFTF9CVE5fRURJVF9JVEVNX01PREFMOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gQnR0biBDYW5jZWwgb24gTW9kYWwgIkVkaXQgSXRlbSInLGxhYmVsOidDbG9zZSBtb2RhbCAiRWRpdCBJdGVtIid9LFNBVkVfQlROX0VESVRfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIEJ0dG4gU2F2ZSBvbiBNb2RhbCAiRWRpdCBJdGVtIicsbGFiZWw6IlNhdmUgY2hhbmdlcyJ9LE5BTUVfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAiZmlsdGVyIiBvbiBOYW1lJyxsYWJlbDoiU3VpdGUgbmFtZSBpbnB1dCBiZWNvbWVzIGFjdGl2ZSJ9LE5BTUVfU09SVElORzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gInNvcnRpbmciIG9uIE5hbWUnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IG5hbWUifSxTVEFSVF9USU1FX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgb24gU3RhcnQgdGltZScsbGFiZWw6J0FyaXNlcyBhY3RpdmUgIlN0YXJ0IHRpbWUiIGlucHV0J30sU1RBUlRfVElNRV9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgb24gU3RhcnQgdGltZScsbGFiZWw6IlNvcnQgaXRlbXMgYnkgU3RhcnQgdGltZSJ9LFRPVEFMX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgb24gVG90YWwnLGxhYmVsOidBcmlzZXMgYWN0aXZlICJUb3RhbCIgaW5wdXQnfSxUT1RBTF9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgb24gVG90YWwnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IFRvdGFsIn0sUEFTU0VEX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgb24gUGFzc2VkJyxsYWJlbDonQXJpc2VzIGFjdGl2ZSAiUGFzc2VkIiBpbnB1dCd9LFBBU1NFRF9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgb24gUGFzc2VkJyxsYWJlbDoiU29ydCBpdGVtcyBieSBQYXNzZWQifSxGQUlMRURfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAiZmlsdGVyIiBvbiBGYWlsZWQnLGxhYmVsOidBcmlzZXMgYWN0aXZlICJGYWlsZWQiIGlucHV0J30sRkFJTEVEX1NPUlRJTkc6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJzb3J0aW5nIiBvbiBGYWlsZWQnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IEZhaWxlZCJ9LFNLSVBQRURfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAiZmlsdGVyIiBvbiBTa2lwcGVkJyxsYWJlbDonQXJpc2VzIGFjdGl2ZSAiU2tpcHBlZCIgaW5wdXQnfSxTS0lQUEVEX1NPUlRJTkc6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJzb3J0aW5nIiBvbiBTa2lwcGVkJyxsYWJlbDoiU29ydCBpdGVtcyBieSBTa2lwcGVkIn0sUEJfRklMVEVSOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAiZmlsdGVyIiBvbiBQcm9kdWN0IEJ1ZycsbGFiZWw6J0FyaXNlcyBhY3RpdmUgIlByb2R1Y3QgQnVnIiBpbnB1dCd9LFBCX1NPUlRJTkc6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJzb3J0aW5nIiBvbiBQcm9kdWN0IEJ1ZycsbGFiZWw6IlNvcnQgaXRlbXMgYnkgUHJvZHVjdCBCdWcifSxBQl9GSUxURVI6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJmaWx0ZXIiIG9uIEF1dG8gQnVnJyxsYWJlbDonQXJpc2VzIGFjdGl2ZSAiQXV0byBCdWciIGlucHV0J30sQUJfU09SVElORzp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gInNvcnRpbmciIG9uIEF1dG8gQnVnJyxsYWJlbDoiU29ydCBpdGVtcyBieSBBdXRvIEJ1ZyJ9LFNJX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgb24gU3lzdGVtIElzc3VlJyxsYWJlbDonQXJpc2VzIGFjdGl2ZSAiU3lzdGVtIElzc3VlIiBpbnB1dCd9LFNJX1NPUlRJTkc6e2NhdGVnb3J5OnIsYWN0aW9uOidDbGljayBvbiBpY29uICJzb3J0aW5nIiBvbiBTeXN0ZW0gSXNzdWUnLGxhYmVsOiJTb3J0IGl0ZW1zIGJ5IFN5c3RlbSBJc3N1ZSJ9LFRJX0ZJTFRFUjp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGljb24gImZpbHRlciIgb24gVG8gSW52ZXN0aWdhdGUnLGxhYmVsOidBcmlzZXMgYWN0aXZlICJUbyBJbnZlc3RpZ2F0ZSIgaW5wdXQnfSxUSV9TT1JUSU5HOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gaWNvbiAic29ydGluZyIgb24gVG8gSW52ZXN0aWdhdGVlJyxsYWJlbDoiU29ydCBpdGVtcyBieSBUbyBJbnZlc3RpZ2F0ZSJ9LFBCX0NIQVJUOntjYXRlZ29yeTpyLGFjdGlvbjoiQ2xpY2sgb24gUEIgQ2lyY2xlIixsYWJlbDoiVHJhbnNpdGlvbiB0byBQQiBsaXN0IHZpZXcifSxQQl9UT09MVElQOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gVG9vbHRpcCAiVG90YWwgUHJvZHVjdCBCdWdzIicsbGFiZWw6IlRyYW5zaXRpb24gdG8gUEIgbGlzdCB2aWV3In0sQUJfQ0hBUlQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBBQiBDaXJjbGUiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIEFCIGxpc3QgdmlldyAifSxBQl9UT09MVElQOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gVG9vbHRpcCAiQXV0byBCdWciJyxsYWJlbDoiVHJhbnNpdGlvbiB0byBBQiBsaXN0IHZpZXcgIn0sU0lfQ0hBUlQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBTSSBDaXJjbGUiLGxhYmVsOiJUcmFuc2l0aW9uIHRvIFNJIGxpc3QgdmlldyAifSxTSV9UT09MVElQOntjYXRlZ29yeTpyLGFjdGlvbjonQ2xpY2sgb24gVG9vbHRpcCAiVG90YWwgU3lzdGVtIElzc3VlIicsbGFiZWw6IlRyYW5zaXRpb24gdG8gU0kgbGlzdCB2aWV3In0sVElfQ0hBUlQ6e2NhdGVnb3J5OnIsYWN0aW9uOiJDbGljayBvbiBUSSB0YWciLGxhYmVsOiJUcmFuc2l0aW9uIHRvIFRJIGxpc3QgdmlldyJ9LFNBVkVfQlROX0RST1BET1dOX0VESVRfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246J0NsaWNrIG9uIGRyb3Bkb3duIGljb24gb24gU2F2ZSBCdHRub24gTW9kYWwgIkVkaXQgSXRlbSInLGxhYmVsOiJBcmlzZSBkcm9wZG93biJ9LFBPU1RfQlVHX0JUTl9FRElUX0lURU1fTU9EQUw6e2NhdGVnb3J5OnIsYWN0aW9uOidTZWxlY3QgU2F2ZSBhbmQgUG9zdCBCdWcgb24gZHJvcGRvd24gaW4gTW9kYWwgIkVkaXQgSXRlbSInLGxhYmVsOidBcmlzZSBNb2RhbCAiUG9zdCBCdWciJ30sTE9BRF9CVUdfQlROX0VESVRfSVRFTV9NT0RBTDp7Y2F0ZWdvcnk6cixhY3Rpb246J1NlbGVjdCBTYXZlIGFuZCBMb2FkIEJ1ZyBvbiBkcm9wZG93biBpbiBNb2RhbCAiRWRpdCBJdGVtIicsbGFiZWw6J0FyaXNlIE1vZGFsICJMb2FkIEJ1ZyInfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlNVSVRFX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3N1aXRlc1BhZ2VFdmVudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJTVUlURVNfUEFHRV9FVkVOVFMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL3N1aXRlc1BhZ2VFdmVudHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9hdHRyaWJ1dGVMaXN0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQXR0cmlidXRlTGlzdD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLF89bigiLi9zcmMvY29tbW9uL3V0aWxzL2F0dHJpYnV0ZVV0aWxzLmpzIikscD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9pbmRleC5qcyIpLGY9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvYXR0cmlidXRlTGlzdC5zY3NzIiksbT1yKGYpLGg9Yy5kZWZhdWx0LmJpbmQobS5kZWZhdWx0KSxnPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89W10uY29uY2F0KCgwLHMuZGVmYXVsdCkoZSkpO29bdF09cixuKG8pfX0sYj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9W10uY29uY2F0KCgwLHMuZGVmYXVsdCkoZSkpO3Iuc3BsaWNlKHQsMSksbihyKX19LEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmZS5rZXk9PT10LmtleSYmZS52YWx1ZT09PXQudmFsdWV9LHk9dC5BdHRyaWJ1dGVMaXN0PWZ1bmN0aW9uKHQpe3ZhciBuPXQuYXR0cmlidXRlcyxyPXQuZWRpdGVkQXR0cmlidXRlLG89dC5vbkNoYW5nZSxzPXQub25FZGl0LGE9dC5vbkFkZE5ldyxsPXQuZGlzYWJsZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChpLkZyYWdtZW50LG51bGwsbi5maWx0ZXIoXy5ub3RTeXN0ZW1BdHRyaWJ1dGVQcmVkaWNhdGUpLm1hcChmdW5jdGlvbih0LGksYSl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChwLkVkaXRhYmxlQXR0cmlidXRlLHtrZXk6dC5rZXkrIl8iK3QudmFsdWUsYXR0cmlidXRlOnQsYXR0cmlidXRlczphLGVkaXRNb2RlOkUodCxyKSxvbkNoYW5nZTpnKG4saSxvKSxvblJlbW92ZTpiKG4saSxvKSxvbkVkaXQ6cyxkaXNhYmxlZDpsfSl9KSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJhZGQtbmV3LWJ1dHRvbiIse2Rpc2FibGVkOiEhcnx8bH0pLG9uQ2xpY2s6cnx8bD92b2lkIDA6YX0sIisgIixlLmNyZWF0ZUVsZW1lbnQoZC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQXR0cmlidXRlTGlzdC5hZGROZXciLGRlZmF1bHRNZXNzYWdlOiJBZGQgbmV3In0pKSl9O3kucHJvcFR5cGVzPXthdHRyaWJ1dGVzOmwuZGVmYXVsdC5hcnJheU9mKGwuZGVmYXVsdC5vYmplY3QpLGVkaXRlZEF0dHJpYnV0ZTpsLmRlZmF1bHQub2JqZWN0LGRpc2FibGVkOmwuZGVmYXVsdC5ib29sLG9uQ2hhbmdlOmwuZGVmYXVsdC5mdW5jLG9uRWRpdDpsLmRlZmF1bHQuZnVuYyxvbkFkZE5ldzpsLmRlZmF1bHQuZnVuY30seS5kZWZhdWx0UHJvcHM9e2F0dHJpYnV0ZXM6W10sZWRpdGVkQXR0cmlidXRlOm51bGwsZGlzYWJsZWQ6ITEsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uRWRpdDpmdW5jdGlvbigpe30sb25BZGROZXc6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwiQXR0cmlidXRlTGlzdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvYXR0cmlidXRlTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvYXR0cmlidXRlTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJjcmVhdGVFZGl0SGFuZGxlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvYXR0cmlidXRlTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJjcmVhdGVSZW1vdmVIYW5kbGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9hdHRyaWJ1dGVMaXN0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsImlzRWRpdE1vZGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2F0dHJpYnV0ZUxpc3QuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvYXR0cmlidXRlTGlzdC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImFkZC1uZXctYnV0dG9uIjoiYXR0cmlidXRlTGlzdF9fYWRkLW5ldy1idXR0b25fX19fU2tHaSIsZGlzYWJsZWQ6ImF0dHJpYnV0ZUxpc3RfX2Rpc2FibGVkX19fMUFzMGQifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2F0dHJpYnV0ZUxpc3RGaWVsZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkF0dHJpYnV0ZUxpc3RGaWVsZD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGVMaXN0LmpzeCIpLGQ9ZnVuY3Rpb24odCl7dmFyIG49dC52YWx1ZSxyPSgwLGEuZGVmYXVsdCkodCxbInZhbHVlIl0pO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoYy5FZGl0YWJsZUF0dHJpYnV0ZUxpc3QsKDAscy5kZWZhdWx0KSh7YXR0cmlidXRlczpufSxyKSl9O3QuQXR0cmlidXRlTGlzdEZpZWxkPWQsZC5wcm9wVHlwZXM9e3ZhbHVlOnUuZGVmYXVsdC5hcnJheX0sZC5kZWZhdWx0UHJvcHM9e3ZhbHVlOltdfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJBdHRyaWJ1dGVMaXN0RmllbGQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2F0dHJpYnV0ZUxpc3RGaWVsZC5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZS9hdHRyaWJ1dGUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BdHRyaWJ1dGU9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbW1vbi91dGlscy9hdHRyaWJ1dGVVdGlscy5qcyIpLGQ9bigiLi9zcmMvY29tbW9uL2ltZy9jcm9zcy1pY29uLWlubGluZS5zdmciKSxfPXIoZCkscD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGUvYXR0cmlidXRlLnNjc3MiKSxmPXIocCksbT1hLmRlZmF1bHQuYmluZChmLmRlZmF1bHQpLGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZSgpfX0sZz10LkF0dHJpYnV0ZT1mdW5jdGlvbih0KXt2YXIgbj10LmF0dHJpYnV0ZSxyPXQub25DbGljayxvPXQub25SZW1vdmUscz10LmRpc2FibGVkO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJhdHRyaWJ1dGUiLHtkaXNhYmxlZDpzfSksb25DbGljazpzP3ZvaWQgMDpyfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJyZW1vdmUtaWNvbiIpLG9uQ2xpY2s6cz92b2lkIDA6aChvKX0sKDAsdS5kZWZhdWx0KShfLmRlZmF1bHQpKSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJsYWJlbCIpfSwoMCxjLmZvcm1hdEF0dHJpYnV0ZSkobikpKX07Zy5wcm9wVHlwZXM9e2F0dHJpYnV0ZTpzLmRlZmF1bHQub2JqZWN0LGRpc2FibGVkOnMuZGVmYXVsdC5ib29sLG9uQ2xpY2s6cy5kZWZhdWx0LmZ1bmMsb25SZW1vdmU6cy5kZWZhdWx0LmZ1bmN9LGcuZGVmYXVsdFByb3BzPXthdHRyaWJ1dGU6e30sZGlzYWJsZWQ6ITEsb25DbGljazpmdW5jdGlvbigpe30sb25SZW1vdmU6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiQXR0cmlidXRlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGUvYXR0cmlidXRlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGUvYXR0cmlidXRlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImNyZWF0ZVJlbW92ZUNsaWNrSGFuZGxlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlL2F0dHJpYnV0ZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGUvYXR0cmlidXRlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXthdHRyaWJ1dGU6ImF0dHJpYnV0ZV9fYXR0cmlidXRlX19fMzVuZlEiLGRpc2FibGVkOiJhdHRyaWJ1dGVfX2Rpc2FibGVkX19fRXY4TFUiLGxhYmVsOiJhdHRyaWJ1dGVfX2xhYmVsX19fMzBYQV8iLCJyZW1vdmUtaWNvbiI6ImF0dHJpYnV0ZV9fcmVtb3ZlLWljb25fX18zeGwzTCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGUvYXR0cmlidXRlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBdHRyaWJ1dGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkF0dHJpYnV0ZX19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZUVkaXRvci9hdHRyaWJ1dGVFZGl0b3IuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkF0dHJpYnV0ZUVkaXRvcj12b2lkIDA7dmFyIHMsaSxhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9byhjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9byhfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09byhmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1vKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1vKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx2PW8oeSksVD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksTz1vKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxSPW8oUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHg9byhqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLE09byh3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxQPW8oSSksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksSD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLEY9byhIKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkUHJvdmlkZXIuanN4IiksVT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLEc9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLHo9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLFc9bigiLi9zcmMvY29tbW9uL2ltZy9jaXJjbGUtY3Jvc3MtaWNvbi1pbmxpbmUuc3ZnIiksWT1vKFcpLHE9bigiLi9zcmMvY29tbW9uL2ltZy9jaXJjbGUtY2hlY2staW5saW5lLnN2ZyIpLEs9byhxKSxYPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZUVkaXRvci9hdHRyaWJ1dGVJbnB1dC9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2F0dHJpYnV0ZUVkaXRvci5zY3NzIiksUT1vKCQpLEo9e0F0dHJpYnV0ZUVkaXRvcjp7ZGlzcGxheU5hbWU6IkF0dHJpYnV0ZUVkaXRvciJ9fSxaPSgwLEQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZUVkaXRvci9hdHRyaWJ1dGVFZGl0b3IuanN4Iixjb21wb25lbnRzOkosbG9jYWxzOltlXSxpbXBvcnRzOlt4LmRlZmF1bHRdfSksZWU9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2F0dHJpYnV0ZUVkaXRvci5qc3giLGNvbXBvbmVudHM6Sixsb2NhbHM6W10saW1wb3J0czpbeC5kZWZhdWx0LE8uZGVmYXVsdF19KSx0ZT1QLmRlZmF1bHQuYmluZChRLmRlZmF1bHQpLG5lPSgwLE4uZm9ybVZhbHVlcykoe2F0dHJpYnV0ZUtleToia2V5In0pKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlS2V5LG49ZS5wYXJzZSxvPWUuZm9ybWF0LHM9ZS5hdHRyaWJ1dGVDb21wYXJhdG9yLGk9ZS5wcm9qZWN0SWQsYT0oMCxBLmRlZmF1bHQpKGUsWyJhdHRyaWJ1dGVLZXkiLCJwYXJzZSIsImZvcm1hdCIsImF0dHJpYnV0ZUNvbXBhcmF0b3IiLCJwcm9qZWN0SWQiXSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChCLkZpZWxkUHJvdmlkZXIse25hbWU6InZhbHVlIixmb3JtYXQ6byxwYXJzZTpufSxyLmNyZWF0ZUVsZW1lbnQoVi5GaWVsZEVycm9ySGludCx7c3RhdGljSGludDohMH0sci5jcmVhdGVFbGVtZW50KFguQXR0cmlidXRlSW5wdXQsKDAsdi5kZWZhdWx0KSh7Y3VzdG9tQ2xhc3M6dGUoImlucHV0IiksYXN5bmM6ITAsbWluTGVuZ3RoOjEsYXR0cmlidXRlQ29tcGFyYXRvcjpzLHVyaTpVLlVSTFMubGF1bmNoQXR0cmlidXRlVmFsdWVzU2VhcmNoKGksdCksY3JlYXRhYmxlOiEwLHNob3dOZXdMYWJlbDohMH0sYSkpKSl9KSxyZT10LkF0dHJpYnV0ZUVkaXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFooZWUodCxlKSxlKX19KCJBdHRyaWJ1dGVFZGl0b3IiKSgocz0oMCxrLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsRy5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpfX0pLGk9KDAsTi5yZWR1eEZvcm0pKHt2YWxpZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmtleSxuPWUudmFsdWUscj12b2lkIDA7cmV0dXJuIG4/ei52YWxpZGF0ZS5hdHRyaWJ1dGVLZXkobil8fChyPSJhdHRyaWJ1dGVMZW5ndGhIaW50Iik6cj0icmVxdWlyZWRGaWVsZEhpbnQiLHtrZXk6dCYmIXoudmFsaWRhdGUuYXR0cmlidXRlS2V5KHQpPyJhdHRyaWJ1dGVMZW5ndGhIaW50Ijp2b2lkIDAsdmFsdWU6cn19fSkscyhhPWkoKHU9bD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5ieUtleUNvbXBhcmF0b3I9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2J5S2V5Q29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5ieVZhbHVlQ29tcGFyYXRvcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fYnlWYWx1ZUNvbXBhcmF0b3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZm9ybWF0VmFsdWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2Zvcm1hdFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnBhcnNlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3BhcnNlVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19wYXJzZVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wYXJzZVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2J5VmFsdWVDb21wYXJhdG9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ieVZhbHVlQ29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYnlLZXlDb21wYXJhdG9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ieUtleUNvbXBhcmF0b3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2J5S2V5Q29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYnlLZXlDb21wYXJhdG9yX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19ieUtleUNvbXBhcmF0b3JfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2J5S2V5Q29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYnlLZXlDb21wYXJhdG9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLmtleT09PXQmJmUudmFsdWU9PT1yfX0se2tleToiX19ieVZhbHVlQ29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYnlWYWx1ZUNvbXBhcmF0b3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2J5VmFsdWVDb21wYXJhdG9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ieVZhbHVlQ29tcGFyYXRvcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYnlWYWx1ZUNvbXBhcmF0b3JfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmtleT09PW4mJmUudmFsdWU9PT10fX0se2tleToiX19mb3JtYXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2Zvcm1hdFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZm9ybWF0VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/e3ZhbHVlOmUsbGFiZWw6ZX06bnVsbH19LHtrZXk6Il9fcGFyc2VWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyc2VWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcGFyc2VWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyc2VWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcGFyc2VWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLnZhbHVlOnZvaWQgMH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wcm9qZWN0SWQsbj1lLmF0dHJpYnV0ZXMsbz1lLm9uQ29uZmlybSxzPWUub25DYW5jZWwsaT1lLmhhbmRsZVN1Ym1pdDtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGUoImF0dHJpYnV0ZS1lZGl0b3IiKX0sci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGUoImNvbnRyb2wiKX0sci5jcmVhdGVFbGVtZW50KEIuRmllbGRQcm92aWRlcix7bmFtZToia2V5Iixmb3JtYXQ6dGhpcy5mb3JtYXRWYWx1ZSxwYXJzZTp0aGlzLnBhcnNlVmFsdWV9LHIuY3JlYXRlRWxlbWVudChWLkZpZWxkRXJyb3JIaW50LHtzdGF0aWNIaW50OiEwfSxyLmNyZWF0ZUVsZW1lbnQoWC5BdHRyaWJ1dGVJbnB1dCx7Y3VzdG9tQ2xhc3M6dGUoImlucHV0IiksYXR0cmlidXRlczpuLGFzeW5jOiEwLG1pbkxlbmd0aDoxLGF0dHJpYnV0ZUNvbXBhcmF0b3I6dGhpcy5ieUtleUNvbXBhcmF0b3IsdXJpOlUuVVJMUy5sYXVuY2hBdHRyaWJ1dGVLZXlzU2VhcmNoKHQpLGNyZWF0YWJsZTohMCxpc0NsZWFyYWJsZTohMCxzaG93TmV3TGFiZWw6ITB9KSkpKSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgiY29udHJvbCIpfSxyLmNyZWF0ZUVsZW1lbnQobmUse3BhcnNlOnRoaXMucGFyc2VWYWx1ZSxmb3JtYXQ6dGhpcy5mb3JtYXRWYWx1ZSxwcm9qZWN0SWQ6dCxhdHRyaWJ1dGVDb21wYXJhdG9yOnRoaXMuYnlWYWx1ZUNvbXBhcmF0b3IsYXR0cmlidXRlczpufSkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRlKCJjb250cm9sIil9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRlKCJpY29uIiksb25DbGljazppKG8pfSwoMCxGLmRlZmF1bHQpKEsuZGVmYXVsdCkpKSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgiY29udHJvbCIpfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgiaWNvbiIpLG9uQ2xpY2s6c30sKDAsRi5kZWZhdWx0KShZLmRlZmF1bHQpKSkpfX1dKSx0fShqLkNvbXBvbmVudCksbC5wcm9wVHlwZXM9e3Byb2plY3RJZDpNLmRlZmF1bHQuc3RyaW5nLGF0dHJpYnV0ZXM6TS5kZWZhdWx0LmFycmF5LG9uQ29uZmlybTpNLmRlZmF1bHQuZnVuYyxvbkNhbmNlbDpNLmRlZmF1bHQuZnVuYyxoYW5kbGVTdWJtaXQ6TS5kZWZhdWx0LmZ1bmN9LGwuZGVmYXVsdFByb3BzPXtwcm9qZWN0SWQ6bnVsbCxhdHRyaWJ1dGVzOltdLGhhbmRsZVN1Ym1pdDpmdW5jdGlvbigpe30sb25Db25maXJtOmZ1bmN0aW9uKCl7fSxvbkNhbmNlbDpmdW5jdGlvbigpe319LGE9dSkpfHxhKXx8YSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyZSwiQXR0cmlidXRlRWRpdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlRWRpdG9yLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHRlLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2F0dHJpYnV0ZUVkaXRvci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihuZSwiVmFsdWVGaWVsZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2F0dHJpYnV0ZUVkaXRvci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2F0dHJpYnV0ZUVkaXRvci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImF0dHJpYnV0ZS1lZGl0b3IiOiJhdHRyaWJ1dGVFZGl0b3JfX2F0dHJpYnV0ZS1lZGl0b3JfX18xeHBsOCIsaW5wdXQ6ImF0dHJpYnV0ZUVkaXRvcl9faW5wdXRfX18xbDVpdSIsY29udHJvbDoiYXR0cmlidXRlRWRpdG9yX19jb250cm9sX19fM0JVaGsiLGljb246ImF0dHJpYnV0ZUVkaXRvcl9faWNvbl9fXzFpYzRWIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlSW5wdXQvYXR0cmlidXRlSW5wdXQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkF0dHJpYnV0ZUlucHV0PXZvaWQgMDt2YXIgcyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksYj1vKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxUPW8odiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQz1vKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxTPW8oTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGo9byhSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTD1vKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHc9byhEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0VGFnc1NlYXJjaC9pbmRleC5qcyIpLEk9e0F0dHJpYnV0ZUlucHV0OntkaXNwbGF5TmFtZToiQXR0cmlidXRlSW5wdXQifX0sUD0oMCxMLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlSW5wdXQvYXR0cmlidXRlSW5wdXQuanN4Iixjb21wb25lbnRzOkksbG9jYWxzOltlXSxpbXBvcnRzOltqLmRlZmF1bHRdfSksTj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlSW5wdXQvYXR0cmlidXRlSW5wdXQuanN4Iixjb21wb25lbnRzOkksbG9jYWxzOltdLGltcG9ydHM6W2ouZGVmYXVsdCxDLmRlZmF1bHRdfSksSD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0LGUpLGUpfX0oIkF0dHJpYnV0ZUlucHV0IikoKHM9KDAsTS5mb3JtVmFsdWVzKSh7YXR0cmlidXRlS2V5OiJrZXkiLGF0dHJpYnV0ZVZhbHVlOiJ2YWx1ZSJ9KSkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsaC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCx5LmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGYuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5pc0F0dHJpYnV0ZVVuaXF1ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNBdHRyaWJ1dGVVbmlxdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIubWFrZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX21ha2VPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAseS5kZWZhdWx0KShyLG8pfXJldHVybigwLFQuZGVmYXVsdCkodCxlKSwoMCxiLmRlZmF1bHQpKHQsW3trZXk6Il9fbWFrZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21ha2VPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0F0dHJpYnV0ZVVuaXF1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNBdHRyaWJ1dGVVbmlxdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzQXR0cmlidXRlVW5pcXVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0F0dHJpYnV0ZVVuaXF1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNBdHRyaWJ1dGVVbmlxdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzQXR0cmlidXRlVW5pcXVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0F0dHJpYnV0ZVVuaXF1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbixuPXRoaXMucHJvcHMscj1uLmF0dHJpYnV0ZXMsbz1uLmF0dHJpYnV0ZUtleSxzPW4uYXR0cmlidXRlVmFsdWUsaT1uLmF0dHJpYnV0ZUNvbXBhcmF0b3I7cmV0dXJuIXIuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gaShlLHQudmFsdWUsbyxzKX0pfX0se2tleToiX19tYWtlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbWFrZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX21ha2VPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19tYWtlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbWFrZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuYXR0cmlidXRlcyxyPXQuYXR0cmlidXRlS2V5LG89dC5hdHRyaWJ1dGVWYWx1ZSxzPXQuYXR0cmlidXRlQ29tcGFyYXRvcjtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gcyh0LGUscixvKX0pfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLGxhYmVsOmV9fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PShlLmF0dHJpYnV0ZXMsZS5hdHRyaWJ1dGVLZXksZS5hdHRyaWJ1dGVWYWx1ZSxlLmF0dHJpYnV0ZUNvbXBhcmF0b3IsKDAsXy5kZWZhdWx0KShlLFsiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUtleSIsImF0dHJpYnV0ZVZhbHVlIiwiYXR0cmlidXRlQ29tcGFyYXRvciJdKSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChrLklucHV0VGFnc1NlYXJjaCwoMCxjLmRlZmF1bHQpKHt9LHQse21ha2VPcHRpb25zOnRoaXMubWFrZU9wdGlvbnMsaXNPcHRpb25VbmlxdWU6dGhpcy5pc0F0dHJpYnV0ZVVuaXF1ZX0pKX19XSksdH0oUi5Db21wb25lbnQpLGEucHJvcFR5cGVzPXthdHRyaWJ1dGVzOncuZGVmYXVsdC5hcnJheSxhdHRyaWJ1dGVLZXk6dy5kZWZhdWx0LnN0cmluZyxhdHRyaWJ1dGVWYWx1ZTp3LmRlZmF1bHQuc3RyaW5nLGF0dHJpYnV0ZUNvbXBhcmF0b3I6dy5kZWZhdWx0LmZ1bmN9LGEuZGVmYXVsdFByb3BzPXthdHRyaWJ1dGVzOltdLGF0dHJpYnV0ZUtleTpudWxsLGF0dHJpYnV0ZVZhbHVlOm51bGwsYXR0cmlidXRlQ29tcGFyYXRvcjpmdW5jdGlvbigpe319LGk9bCkpfHxpKTt0LkF0dHJpYnV0ZUlucHV0PUg7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiQXR0cmlidXRlSW5wdXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZUVkaXRvci9hdHRyaWJ1dGVJbnB1dC9hdHRyaWJ1dGVJbnB1dC5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlSW5wdXQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZUVkaXRvci9hdHRyaWJ1dGVJbnB1dC9hdHRyaWJ1dGVJbnB1dC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXR0cmlidXRlSW5wdXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkF0dHJpYnV0ZUlucHV0fX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9hdHRyaWJ1dGVFZGl0b3IvYXR0cmlidXRlRWRpdG9yLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBdHRyaWJ1dGVFZGl0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkF0dHJpYnV0ZUVkaXRvcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2VkaXRhYmxlQXR0cmlidXRlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FZGl0YWJsZUF0dHJpYnV0ZT12b2lkIDA7dmFyIHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbD1vKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1vKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9byh4KSxEPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2F0dHJpYnV0ZS9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvYXR0cmlidXRlRWRpdG9yL2luZGV4LmpzIiksTT17RWRpdGFibGVBdHRyaWJ1dGU6e2Rpc3BsYXlOYW1lOiJFZGl0YWJsZUF0dHJpYnV0ZSJ9fSxrPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlL2VkaXRhYmxlQXR0cmlidXRlLmpzeCIsY29tcG9uZW50czpNLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLEk9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvZWRpdGFibGVBdHRyaWJ1dGUuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksUD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsoSSh0LGUpLGUpfX0oIkVkaXRhYmxlQXR0cmlidXRlIikoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5lbnRlckVkaXRNb2RlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19lbnRlckVkaXRNb2RlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmV4aXRFZGl0TW9kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZXhpdEVkaXRNb2RlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmNhbGN1bGF0ZUZvcm1OYW1lPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jYWxjdWxhdGVGb3JtTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX2NhbGN1bGF0ZUZvcm1OYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jYWxjdWxhdGVGb3JtTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZXhpdEVkaXRNb2RlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19leGl0RWRpdE1vZGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2VudGVyRWRpdE1vZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2VudGVyRWRpdE1vZGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2VudGVyRWRpdE1vZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5vbkVkaXQodGhpcy5wcm9wcy5hdHRyaWJ1dGUpfX0se2tleToiX19leGl0RWRpdE1vZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5vbkVkaXQobnVsbCl9fSx7a2V5OiJfX2NhbGN1bGF0ZUZvcm1OYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmtleSYmZS52YWx1ZT8oImF0dHJpYnV0ZXNFZGl0b3JfXyIrZS5rZXkrIl8iK2UudmFsdWUpLnJlcGxhY2UoL1xXL2csIl8iKToiYXR0cmlidXRlc0VkaXRvciJ9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYXR0cmlidXRlLG49ZS5vbkNoYW5nZSxvPWUuZWRpdE1vZGUscz0oMCxjLmRlZmF1bHQpKGUsWyJhdHRyaWJ1dGUiLCJvbkNoYW5nZSIsImVkaXRNb2RlIl0pO3JldHVybiBvP3IuY3JlYXRlRWxlbWVudCh3LkF0dHJpYnV0ZUVkaXRvciwoMCxsLmRlZmF1bHQpKHt9LHMse2Zvcm06dGhpcy5jYWxjdWxhdGVGb3JtTmFtZSh0KSxpbml0aWFsVmFsdWVzOnQsb25Db25maXJtOm4sb25DYW5jZWw6dGhpcy5leGl0RWRpdE1vZGV9KSk6ci5jcmVhdGVFbGVtZW50KEQuQXR0cmlidXRlLCgwLGwuZGVmYXVsdCkoe30sdGhpcy5wcm9wcyx7b25DbGljazp0aGlzLmVudGVyRWRpdE1vZGV9KSl9fV0pLHR9KE8uQ29tcG9uZW50KSxzLnByb3BUeXBlcz17YXR0cmlidXRlOkwuZGVmYXVsdC5vYmplY3QsYXR0cmlidXRlczpMLmRlZmF1bHQuYXJyYXksZWRpdE1vZGU6TC5kZWZhdWx0LmJvb2wsZGlzYWJsZWQ6TC5kZWZhdWx0LmJvb2wsb25FZGl0OkwuZGVmYXVsdC5mdW5jLG9uUmVtb3ZlOkwuZGVmYXVsdC5mdW5jLG9uQ2hhbmdlOkwuZGVmYXVsdC5mdW5jfSxzLmRlZmF1bHRQcm9wcz17YXR0cmlidXRlOnt9LGF0dHJpYnV0ZXM6W10sZWRpdE1vZGU6ITEsZGlzYWJsZWQ6ITEsb25FZGl0OmZ1bmN0aW9uKCl7fSxvblJlbW92ZTpmdW5jdGlvbigpe30sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9fSxpKSk7dC5FZGl0YWJsZUF0dHJpYnV0ZT1QOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsIkVkaXRhYmxlQXR0cmlidXRlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9lZGl0YWJsZUF0dHJpYnV0ZS5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYXR0cmlidXRlTGlzdC9lZGl0YWJsZUF0dHJpYnV0ZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGUvZWRpdGFibGVBdHRyaWJ1dGUuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVkaXRhYmxlQXR0cmlidXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FZGl0YWJsZUF0dHJpYnV0ZX19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlTGlzdC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRWRpdGFibGVBdHRyaWJ1dGVMaXN0PXZvaWQgMDt2YXIgcyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksbD1vKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPW8obSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1vKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPW8odiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9byhBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1vKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGo9byhSKSx4PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2F0dHJpYnV0ZUxpc3QuanN4IiksTD17RWRpdGFibGVBdHRyaWJ1dGVMaXN0OntkaXNwbGF5TmFtZToiRWRpdGFibGVBdHRyaWJ1dGVMaXN0In19LEQ9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGVMaXN0LmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLHc9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGVMaXN0LmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLE09e3N5c3RlbTohMX0saz10LkVkaXRhYmxlQXR0cmlidXRlTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEQodyh0LGUpLGUpfX0oIkVkaXRhYmxlQXR0cmlidXRlTGlzdCIpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2FjdGl2ZUF0dHJpYnV0ZTpudWxsLGlzTmV3OiExfSxyLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEF0dHJpYnV0ZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY2hhbmdlQWN0aXZlQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jaGFuZ2VBY3RpdmVBdHRyaWJ1dGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQWRkTmV3PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVBZGROZXdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxoLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQWRkTmV3X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVBZGROZXdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZUFjdGl2ZUF0dHJpYnV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hhbmdlQWN0aXZlQXR0cmlidXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRBdHRyaWJ1dGVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRBdHRyaWJ1dGVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRBdHRyaWJ1dGVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuaXNOZXcsbj1lLmFjdGl2ZUF0dHJpYnV0ZSxyPXRoaXMucHJvcHMuYXR0cmlidXRlcztyZXR1cm4gdD9bXS5jb25jYXQoKDAsbC5kZWZhdWx0KShyKSxbbl0pOnJ9fSx7a2V5OiJfX2NoYW5nZUFjdGl2ZUF0dHJpYnV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3JldHVybiB0aGlzLnNldFN0YXRlKHthY3RpdmVBdHRyaWJ1dGU6ZSxpc05ldzp0fSl9fSx7a2V5OiJfX2hhbmRsZUFkZE5ld19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoYW5nZUFjdGl2ZUF0dHJpYnV0ZShNLCEwKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY2hhbmdlQWN0aXZlQXR0cmlidXRlKG51bGwpLHRoaXMucHJvcHMub25DaGFuZ2UoZSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuY3JlYXRlRWxlbWVudCh4LkF0dHJpYnV0ZUxpc3Qse2F0dHJpYnV0ZXM6dGhpcy5nZXRBdHRyaWJ1dGVzKCksZWRpdGVkQXR0cmlidXRlOnRoaXMuc3RhdGUuYWN0aXZlQXR0cmlidXRlLG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLG9uRWRpdDp0aGlzLmNoYW5nZUFjdGl2ZUF0dHJpYnV0ZSxvbkFkZE5ldzp0aGlzLmhhbmRsZUFkZE5ldyxkaXNhYmxlZDp0aGlzLnByb3BzLmRpc2FibGVkfSl9fV0pLHR9KEEuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17YXR0cmlidXRlczpqLmRlZmF1bHQuYXJyYXlPZihqLmRlZmF1bHQub2JqZWN0KSxvbkNoYW5nZTpqLmRlZmF1bHQuZnVuYyxkaXNhYmxlZDpqLmRlZmF1bHQuYm9vbH0scy5kZWZhdWx0UHJvcHM9e2F0dHJpYnV0ZXM6W10sb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LGRpc2FibGVkOiExfSxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGssIkVkaXRhYmxlQXR0cmlidXRlTGlzdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvZWRpdGFibGVBdHRyaWJ1dGVMaXN0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE0sIk5FV19BVFRSSUJVVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlTGlzdC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2VkaXRhYmxlQXR0cmlidXRlTGlzdC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXR0cmlidXRlTGlzdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRWRpdGFibGVBdHRyaWJ1dGVMaXN0fX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2F0dHJpYnV0ZUxpc3RGaWVsZC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXR0cmlidXRlTGlzdEZpZWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BdHRyaWJ1dGVMaXN0RmllbGR9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnJlYWRjcnVtYj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tbW9uL2ltZy9saXN0LXZpZXctaW5saW5lLnN2ZyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2xpbmtJdGVtL2luZGV4LmpzIikscD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9lcnJvckl0ZW0vaW5kZXguanMiKSxmPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9wcm9wVHlwZXMuanMiKSxtPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2JyZWFkY3J1bWIuc2NzcyIpLGg9cihtKSxnPXUuZGVmYXVsdC5iaW5kKGguZGVmYXVsdCksYj10LkJyZWFkY3J1bWI9ZnVuY3Rpb24odCl7dmFyIG49dC5kZXNjcmlwdG9yLHI9bi5lcnJvcixvPW4uYWN0aXZlLGk9bi5saW5rLGE9bi50aXRsZSxsPW4ubGlzdFZpZXcsdT10Lm9uQ2xpY2s7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmcoImJyZWFkY3J1bWIiKX0sbCYmZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygibGlzdC12aWV3LWljb24iKSx0aXRsZToiTGlzdCB2aWV3In0sKDAscy5kZWZhdWx0KShkLmRlZmF1bHQpKSxyP2UuY3JlYXRlRWxlbWVudChwLkVycm9ySXRlbSxudWxsKTplLmNyZWF0ZUVsZW1lbnQoXy5MaW5rSXRlbSx7YWN0aXZlOm8sbGluazppLHRpdGxlOmEsb25DbGljazp1fSkpfTtiLnByb3BUeXBlcz17ZGVzY3JpcHRvcjpmLmJyZWFkY3J1bWJEZXNjcmlwdG9yU2hhcGUuaXNSZXF1aXJlZCxvbkNsaWNrOmEuZGVmYXVsdC5mdW5jfSxiLmRlZmF1bHRQcm9wcz17b25DbGljazpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJCcmVhZGNydW1iIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2JyZWFkY3J1bWIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2JyZWFkY3J1bWI6ImJyZWFkY3J1bWJfX2JyZWFkY3J1bWJfX18xQ0RjMyIsImxpc3Qtdmlldy1pY29uIjoiYnJlYWRjcnVtYl9fbGlzdC12aWV3LWljb25fX18yaER0OCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvZXJyb3JJdGVtL2Vycm9ySXRlbS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVycm9ySXRlbT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21tb24vaW1nL2Vycm9yLWlubGluZS5zdmciKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9lcnJvckl0ZW0vZXJyb3JJdGVtLnNjc3MiKSxkPXIoYyksXz1zLmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5FcnJvckl0ZW09ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygiZXJyb3ItaXRlbSIpfSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6XygiZXJyb3ItaWNvbiIpfSwoMCxhLmRlZmF1bHQpKHUuZGVmYXVsdCkpLGUuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiRXJyb3IgSXRlbSIpKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkVycm9ySXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvZXJyb3JJdGVtL2Vycm9ySXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvZXJyb3JJdGVtL2Vycm9ySXRlbS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9lcnJvckl0ZW0vZXJyb3JJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZXJyb3ItaXRlbSI6ImVycm9ySXRlbV9fZXJyb3ItaXRlbV9fXzM4Y0V0IiwiZXJyb3ItaWNvbiI6ImVycm9ySXRlbV9fZXJyb3ItaWNvbl9fXzFxQjBQIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9lcnJvckl0ZW0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2Vycm9ySXRlbS9lcnJvckl0ZW0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkVycm9ySXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRXJyb3JJdGVtfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2JyZWFkY3J1bWIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkJyZWFkY3J1bWIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkJyZWFkY3J1bWJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9saW5rSXRlbS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvbGlua0l0ZW0vbGlua0l0ZW0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxpbmtJdGVtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5MaW5rSXRlbX19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1iL2xpbmtJdGVtL2xpbmtJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGlua0l0ZW09dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9saW5rSXRlbS9saW5rSXRlbS5zY3NzIiksYz1yKHUpLGQ9YS5kZWZhdWx0LmJpbmQoYy5kZWZhdWx0KSxfPXQuTGlua0l0ZW09ZnVuY3Rpb24odCl7dmFyIG49dC5saW5rLHI9dC5hY3RpdmUsbz10LnRpdGxlLHM9dC5vbkNsaWNrO3JldHVybiByP2UuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxvKTplLmNyZWF0ZUVsZW1lbnQobC5OYXZMaW5rLHtjbGFzc05hbWU6ZCgibGluayIpLHRvOm4sb25DbGljazpzfSxvKX07Xy5wcm9wVHlwZXM9e2xpbms6cy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHRpdGxlOnMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxhY3RpdmU6cy5kZWZhdWx0LmJvb2wsb25DbGljazpzLmRlZmF1bHQuZnVuY30sXy5kZWZhdWx0UHJvcHM9e2FjdGl2ZTohMSxvbkNsaWNrOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkxpbmtJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYi9saW5rSXRlbS9saW5rSXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvbGlua0l0ZW0vbGlua0l0ZW0uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvbGlua0l0ZW0vbGlua0l0ZW0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2xpbms6ImxpbmtJdGVtX19saW5rX19fM2FMM0sifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1icy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnJlYWRjcnVtYnM9dm9pZCAwO3ZhciBzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPW8obSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1vKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPW8odiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9byhBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1vKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxqPW8oUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1vKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksTT1vKHcpLGs9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksST1vKGspLFA9bigiLi9zcmMvY29tbW9uL2ltZy9hcnJvdy1yaWdodC1pbmxpbmUuc3ZnIiksTj1vKFApLEg9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3Byb3BUeXBlcy5qcyIpLEY9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWIvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy90b2dnbGVyL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuc2NzcyIpLEc9byhVKSx6PXtCcmVhZGNydW1iczp7ZGlzcGxheU5hbWU6IkJyZWFkY3J1bWJzIn19LFY9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLFc9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFk9SS5kZWZhdWx0LmJpbmQoRy5kZWZhdWx0KSxxPXQuQnJlYWRjcnVtYnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBWKFcodCxlKSxlKX19KCJCcmVhZGNydW1icyIpKChzPSgwLGouZGVmYXVsdCkoKSkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17ZXhwYW5kZWQ6ITF9LHIub25DbGlja0JyZWFkY3J1bWJJdGVtPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrQnJlYWRjcnVtYkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlRXhwYW5kPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxoLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0JyZWFkY3J1bWJJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrQnJlYWRjcnVtYkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tCcmVhZGNydW1iSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0JyZWFkY3J1bWJJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrQnJlYWRjcnVtYkl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tCcmVhZGNydW1iSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0JyZWFkY3J1bWJJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCgwPT09ZT90aGlzLnByb3BzLmFsbEV2ZW50Q2xpY2s6dGhpcy5wcm9wcy5icmVhZGNydW1iRXZlbnRJbmZvKX19LHtrZXk6Il9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnRvZ2dsZXJFdmVudEluZm8mJnRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLnRvZ2dsZXJFdmVudEluZm8pLHRoaXMuc2V0U3RhdGUoe2V4cGFuZGVkOiF0aGlzLnN0YXRlLmV4cGFuZGVkfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuZGVzY3JpcHRvcnNbMV0mJnRoaXMucHJvcHMuZGVzY3JpcHRvcnNbMV0ubG9zdDtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgiYnJlYWRjcnVtYnMiKX0sci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgidG9nZ2xlci1jb250YWluZXIiKX0sci5jcmVhdGVFbGVtZW50KEIuVG9nZ2xlcix7ZGlzYWJsZWQ6dCxleHBhbmRlZDp0aGlzLnN0YXRlLmV4cGFuZGVkLG9uVG9nZ2xlRXhwYW5kOnRoaXMudG9nZ2xlRXhwYW5kfSkpLHQ/ci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgibG9zdC1sYXVuY2giKX0sci5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkJyZWFkY3J1bWJzLmxvc3RMYXVuY2giLGRlZmF1bHRNZXNzYWdlOiJPcmlnaW5hbCBsYXVuY2ggd2FzIGxvc3QifSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgicmVzdG9yZS1sYXVuY2gtY29udGFpbmVyIil9LHIuY3JlYXRlRWxlbWVudCgiYSIse2NsYXNzTmFtZTpZKCJyZXN0b3JlLWxhdW5jaC1idXR0b24iKSxvbkNsaWNrOnRoaXMucHJvcHMub25SZXN0b3JlUGF0aH0sci5jcmVhdGVFbGVtZW50KEQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkJyZWFkY3J1bWJzLnJlc3RvcmVQYXRoIixkZWZhdWx0TWVzc2FnZToiUmVzdG9yZSBwYXRoIn0pKSkpOnRoaXMucHJvcHMuZGVzY3JpcHRvcnMubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChBLkZyYWdtZW50LHtrZXk6dC5pZH0sbj4wJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpZKCJzZXBhcmF0b3IiKX0sKDAsTS5kZWZhdWx0KShOLmRlZmF1bHQpKSxyLmNyZWF0ZUVsZW1lbnQoRi5CcmVhZGNydW1iLHtkZXNjcmlwdG9yOnQsb25DbGljazpmdW5jdGlvbih0KXtyZXR1cm4gZS5vbkNsaWNrQnJlYWRjcnVtYkl0ZW0odCl9fSkpfSkpfX1dKSx0fShBLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2Rlc2NyaXB0b3JzOkwuZGVmYXVsdC5hcnJheU9mKEguYnJlYWRjcnVtYkRlc2NyaXB0b3JTaGFwZSksb25SZXN0b3JlUGF0aDpMLmRlZmF1bHQuZnVuYyx0b2dnbGVyRXZlbnRJbmZvOkwuZGVmYXVsdC5vYmplY3QsYnJlYWRjcnVtYkV2ZW50SW5mbzpMLmRlZmF1bHQub2JqZWN0LGFsbEV2ZW50Q2xpY2s6TC5kZWZhdWx0Lm9iamVjdCx0cmFja2luZzpMLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6TC5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOkwuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sYS5kZWZhdWx0UHJvcHM9e2Rlc2NyaXB0b3JzOltdLG9uUmVzdG9yZVBhdGg6ZnVuY3Rpb24oKXt9LHRvZ2dsZXJFdmVudEluZm86e30sYnJlYWRjcnVtYkV2ZW50SW5mbzp7fSxhbGxFdmVudENsaWNrOnt9fSxpPWwpKXx8aSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkJyZWFkY3J1bWJzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9icmVhZGNydW1icy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXticmVhZGNydW1iczoiYnJlYWRjcnVtYnNfX2JyZWFkY3J1bWJzX19fMVVOX3QiLCJ0b2dnbGVyLWNvbnRhaW5lciI6ImJyZWFkY3J1bWJzX190b2dnbGVyLWNvbnRhaW5lcl9fXzhac0l1IixzZXBhcmF0b3I6ImJyZWFkY3J1bWJzX19zZXBhcmF0b3JfX18xOWlUaCIsImxvc3QtbGF1bmNoIjoiYnJlYWRjcnVtYnNfX2xvc3QtbGF1bmNoX19fWEV0ODEiLCJyZXN0b3JlLWxhdW5jaC1jb250YWluZXIiOiJicmVhZGNydW1ic19fcmVzdG9yZS1sYXVuY2gtY29udGFpbmVyX19fMTBjOWMiLCJyZXN0b3JlLWxhdW5jaC1idXR0b24iOiJicmVhZGNydW1ic19fcmVzdG9yZS1sYXVuY2gtYnV0dG9uX19fMWxZb2UifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCcmVhZGNydW1icyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQnJlYWRjcnVtYnN9fSk7dmFyIG89bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3Byb3BUeXBlcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJicmVhZGNydW1iRGVzY3JpcHRvclNoYXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5icmVhZGNydW1iRGVzY3JpcHRvclNoYXBlfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3Byb3BUeXBlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5icmVhZGNydW1iRGVzY3JpcHRvclNoYXBlPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9dC5icmVhZGNydW1iRGVzY3JpcHRvclNoYXBlPW8uZGVmYXVsdC5zaGFwZSh7aWQ6by5kZWZhdWx0Lm9uZU9mVHlwZShbby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQubnVtYmVyXSksdGl0bGU6by5kZWZhdWx0LnN0cmluZyxsaW5rOm8uZGVmYXVsdC5vYmplY3QsZXJyb3I6by5kZWZhdWx0LmJvb2wsbGlzdFZpZXc6by5kZWZhdWx0LmJvb2wsYWN0aXZlOm8uZGVmYXVsdC5ib29sfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiYnJlYWRjcnVtYkRlc2NyaXB0b3JTaGFwZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3Byb3BUeXBlcy5qcyIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3RvZ2dsZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy90b2dnbGVyL3RvZ2dsZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRvZ2dsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRvZ2dsZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vYnJlYWRjcnVtYnMvdG9nZ2xlci90b2dnbGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9nZ2xlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tbW9uL2ltZy9zcXVhcmUtcGx1cy1pbmxpbmUuc3ZnIiksZD1yKGMpLF89bigiLi9zcmMvY29tbW9uL2ltZy9zcXVhcmUtbWludXMtaW5saW5lLnN2ZyIpLHA9cihfKSxmPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy90b2dnbGVyL3RvZ2dsZXIuc2NzcyIpLG09cihmKSxoPXUuZGVmYXVsdC5iaW5kKG0uZGVmYXVsdCksZz10LlRvZ2dsZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5kaXNhYmxlZCxyPXQuZXhwYW5kZWQsbz10Lm9uVG9nZ2xlRXhwYW5kO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJ0b2dnbGVyIix7ZGlzYWJsZWQ6bn0pLG9uQ2xpY2s6b30sIW4mJigwLGEuZGVmYXVsdCkocj9wLmRlZmF1bHQ6ZC5kZWZhdWx0KSl9O2cucHJvcFR5cGVzPXtleHBhbmRlZDpzLmRlZmF1bHQuYm9vbCxvblRvZ2dsZUV4cGFuZDpzLmRlZmF1bHQuZnVuYyxkaXNhYmxlZDpzLmRlZmF1bHQuYm9vbH0sZy5kZWZhdWx0UHJvcHM9e2V4cGFuZGVkOiExLG9uVG9nZ2xlRXhwYW5kOmZ1bmN0aW9uKCl7fSxkaXNhYmxlZDohMX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIlRvZ2dsZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy90b2dnbGVyL3RvZ2dsZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy90b2dnbGVyL3RvZ2dsZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2JyZWFkY3J1bWJzL3RvZ2dsZXIvdG9nZ2xlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17dG9nZ2xlcjoidG9nZ2xlcl9fdG9nZ2xlcl9fXzJNZUlIIixkaXNhYmxlZDoidG9nZ2xlcl9fZGlzYWJsZWRfX18zblNkOSJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2NvbnRhaW5lcldpdGhUYWJzL2NvbnRhaW5lcldpdGhUYWJzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29udGFpbmVyV2l0aFRhYnM9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2NvbnRhaW5lcldpdGhUYWJzL2NvbnRhaW5lcldpdGhUYWJzLnNjc3MiKSxNPXIodyksaz17Q29udGFpbmVyV2l0aFRhYnM6e2Rpc3BsYXlOYW1lOiJDb250YWluZXJXaXRoVGFicyJ9fSxJPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9jb250YWluZXJXaXRoVGFicy9jb250YWluZXJXaXRoVGFicy5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxQPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9jb250YWluZXJXaXRoVGFicy9jb250YWluZXJXaXRoVGFicy5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxOPUQuZGVmYXVsdC5iaW5kKE0uZGVmYXVsdCksSD10LkNvbnRhaW5lcldpdGhUYWJzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSShQKHQsZSksZSl9fSgiQ29udGFpbmVyV2l0aFRhYnMiKSgobz0oMCxSLmRlZmF1bHQpKCkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2FjdGl2ZTowfSxyLnRhYkNsaWNrSGFuZGxlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdGFiQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNlbGVjdFRhYlRyYWNraW5nPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZWxlY3RUYWJUcmFja2luZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX3NlbGVjdFRhYlRyYWNraW5nX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZWxlY3RUYWJUcmFja2luZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdGFiQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190YWJDbGlja0hhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RhYkNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdGFiQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190YWJDbGlja0hhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RhYkNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdGFiQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PStlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5pZDt0aGlzLnNlbGVjdFRhYlRyYWNraW5nKHQpLHRoaXMuc3RhdGUuYWN0aXZlIT09dCYmdGhpcy5zZXRTdGF0ZSh7YWN0aXZlOnR9KX19LHtrZXk6Il9fc2VsZWN0VGFiVHJhY2tpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NlbGVjdFRhYlRyYWNraW5nX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZWxlY3RUYWJUcmFja2luZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2VsZWN0VGFiVHJhY2tpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NlbGVjdFRhYlRyYWNraW5nX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuc2VsZWN0VGFiRXZlbnRJbmZvP3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLnNlbGVjdFRhYkV2ZW50SW5mbyk6dGhpcy5wcm9wcy5kYXRhW2VdLmV2ZW50SW5mbyYmdGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KHRoaXMucHJvcHMuZGF0YVtlXS5ldmVudEluZm8pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TigiY29udGFpbmVyLXdpdGgtdGFicyIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk4oInRhYnMtd3JhcHBlciIpfSx0aGlzLnByb3BzLmRhdGEubGVuZ3RoP3RoaXMucHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTpuLCJkYXRhLWlkIjpuLGNsYXNzTmFtZTpOKHt0YWI6ITAsYWN0aXZlOmUuc3RhdGUuYWN0aXZlPT09bn0pLG9uQ2xpY2s6ZS50YWJDbGlja0hhbmRsZXJ9LHQubmFtZSl9KTpudWxsKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk4oImNvbnRlbnQtd3JhcHBlciIpfSx0aGlzLnByb3BzLmRhdGEubGVuZ3RoP3RoaXMucHJvcHMuZGF0YVt0aGlzLnN0YXRlLmFjdGl2ZV0uY29udGVudDpudWxsKSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17ZGF0YTp4LmRlZmF1bHQuYXJyYXlPZih4LmRlZmF1bHQub2JqZWN0KSxzZWxlY3RUYWJFdmVudEluZm86eC5kZWZhdWx0Lm9iamVjdCx0cmFja2luZzp4LmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6eC5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOnguZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e2RhdGE6W10sc2VsZWN0VGFiRXZlbnRJbmZvOiIifSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIkNvbnRhaW5lcldpdGhUYWJzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vY29udGFpbmVyV2l0aFRhYnMvY29udGFpbmVyV2l0aFRhYnMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9jb250YWluZXJXaXRoVGFicy9jb250YWluZXJXaXRoVGFicy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9jb250YWluZXJXaXRoVGFicy9jb250YWluZXJXaXRoVGFicy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImNvbnRhaW5lci13aXRoLXRhYnMiOiJjb250YWluZXJXaXRoVGFic19fY29udGFpbmVyLXdpdGgtdGFic19fXzFmcENfIiwidGFicy13cmFwcGVyIjoiY29udGFpbmVyV2l0aFRhYnNfX3RhYnMtd3JhcHBlcl9fXzJHZTZaIix0YWI6ImNvbnRhaW5lcldpdGhUYWJzX190YWJfX18yQnRYayIsYWN0aXZlOiJjb250YWluZXJXaXRoVGFic19fYWN0aXZlX19fM19aYjQiLCJjb250ZW50LXdyYXBwZXIiOiJjb250YWluZXJXaXRoVGFic19fY29udGVudC13cmFwcGVyX19fRVVzb0EifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9jb250YWluZXJXaXRoVGFicy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2NvbnRhaW5lcldpdGhUYWJzL2NvbnRhaW5lcldpdGhUYWJzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDb250YWluZXJXaXRoVGFicyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQ29udGFpbmVyV2l0aFRhYnN9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuQUxJR05fTEVGVD0ibGVmdCIsbz10LkFMSUdOX0NFTlRFUj0iY2VudGVyIixzPXQuQUxJR05fUklHSFQ9InJpZ2h0IixpPXQuTE9HX01FU1NBR0VfSElHSExJR0hUX1RJTUVPVVQ9M2UzOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJBTElHTl9MRUZUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJBTElHTl9DRU5URVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkFMSUdOX1JJR0hUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJMT0dfTUVTU0FHRV9ISUdITElHSFRfVElNRU9VVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdyaWQ9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksZD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxfPXIoZCkscD1uKCIuL3NyYy9jb21wb25lbnRzL3ByZWxvYWRlcnMvc3Bpbm5pbmdQcmVsb2FkZXIvaW5kZXguanMiKSxmPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvaW5kZXguanMiKSxtPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2luZGV4LmpzIiksaD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9wcm9wVHlwZXMuanMiKSxnPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWQuc2NzcyIpLGI9cihnKSxFPV8uZGVmYXVsdC5iaW5kKGIuZGVmYXVsdCkseT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KSxvPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIG8uaW5jbHVkZXMoZS5pZCl8fHIuaW5jbHVkZXMoZS5pZCl9KX0sdj1mdW5jdGlvbih0KXt2YXIgbj10LmNvbHVtbnMscj10LmRhdGEsbz10LnNvcnRpbmdDb2x1bW4saT10LnNvcnRpbmdEaXJlY3Rpb24sbD10Lm9uQ2hhbmdlU29ydGluZyx1PXQub25GaWx0ZXJDbGljayxkPXQuc2VsZWN0YWJsZSxfPXQuc2VsZWN0ZWRJdGVtcyxoPXQub25Ub2dnbGVTZWxlY3RBbGwsZz10Lm9uVG9nZ2xlU2VsZWN0aW9uLGI9dC5jbGFzc05hbWUsdj10LmNoYW5nZU9ubHlNb2JpbGVMYXlvdXQsVD10LmxvYWRpbmcsQT10LnJvd0NsYXNzTWFwcGVyLEM9dC5ncm91cGVkLE89dC5ncm91cEhlYWRlcixTPXQuZ3JvdXBGdW5jdGlvbixSPXQuZXhjbHVkZUZyb21TZWxlY3Rpb24saj0oMCxhLmRlZmF1bHQpKHQsWyJjb2x1bW5zIiwiZGF0YSIsInNvcnRpbmdDb2x1bW4iLCJzb3J0aW5nRGlyZWN0aW9uIiwib25DaGFuZ2VTb3J0aW5nIiwib25GaWx0ZXJDbGljayIsInNlbGVjdGFibGUiLCJzZWxlY3RlZEl0ZW1zIiwib25Ub2dnbGVTZWxlY3RBbGwiLCJvblRvZ2dsZVNlbGVjdGlvbiIsImNsYXNzTmFtZSIsImNoYW5nZU9ubHlNb2JpbGVMYXlvdXQiLCJsb2FkaW5nIiwicm93Q2xhc3NNYXBwZXIiLCJncm91cGVkIiwiZ3JvdXBIZWFkZXIiLCJncm91cEZ1bmN0aW9uIiwiZXhjbHVkZUZyb21TZWxlY3Rpb24iXSk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChjLkZyYWdtZW50LG51bGwsZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RSgiZ3JpZCIsYil9LGUuY3JlYXRlRWxlbWVudChmLkdyaWRIZWFkZXIse2NvbHVtbnM6bixzb3J0aW5nQ29sdW1uOm8sc29ydGluZ0RpcmVjdGlvbjppLG9uQ2hhbmdlU29ydGluZzpsLG9uRmlsdGVyQ2xpY2s6dSxzZWxlY3RhYmxlOmQsYWxsU2VsZWN0ZWQ6ISFfLmxlbmd0aCYmeShyLF8sUiksb25Ub2dnbGVTZWxlY3RBbGw6aCxoaWRlSGVhZGVyRm9yTW9iaWxlOnZ9KSwhVCYmZS5jcmVhdGVFbGVtZW50KG0uR3JpZEJvZHksKDAscy5kZWZhdWx0KSh7Y29sdW1uczpuLGRhdGE6cixzZWxlY3RhYmxlOmQsc2VsZWN0ZWRJdGVtczpfLG9uVG9nZ2xlU2VsZWN0aW9uOmcsY2hhbmdlT25seU1vYmlsZUxheW91dDp2LHJvd0NsYXNzTWFwcGVyOkEsZ3JvdXBIZWFkZXI6Tyxncm91cEZ1bmN0aW9uOlMsZ3JvdXBlZDpDLGV4Y2x1ZGVGcm9tU2VsZWN0aW9uOlJ9LGopKSksVCYmZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RSgic3Bpbm5lci1ibG9jayIpfSxlLmNyZWF0ZUVsZW1lbnQocC5TcGlubmluZ1ByZWxvYWRlcixudWxsKSkpfTt0LkdyaWQ9dix2LnByb3BUeXBlcz17Y29sdW1uczp1LmRlZmF1bHQuYXJyYXlPZih1LmRlZmF1bHQuc2hhcGUoaC5jb2x1bW5Qcm9wVHlwZXMpKSxkYXRhOnUuZGVmYXVsdC5hcnJheU9mKHUuZGVmYXVsdC5vYmplY3QpLHNvcnRpbmdEaXJlY3Rpb246dS5kZWZhdWx0LnN0cmluZyxzb3J0aW5nQ29sdW1uOnUuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2VTb3J0aW5nOnUuZGVmYXVsdC5mdW5jLG9uRmlsdGVyQ2xpY2s6dS5kZWZhdWx0LmZ1bmMsc2VsZWN0YWJsZTp1LmRlZmF1bHQuYm9vbCxzZWxlY3RlZEl0ZW1zOnUuZGVmYXVsdC5hcnJheU9mKHUuZGVmYXVsdC5vYmplY3QpLG9uVG9nZ2xlU2VsZWN0aW9uOnUuZGVmYXVsdC5mdW5jLG9uVG9nZ2xlU2VsZWN0QWxsOnUuZGVmYXVsdC5mdW5jLGNsYXNzTmFtZTp1LmRlZmF1bHQuc3RyaW5nLGNoYW5nZU9ubHlNb2JpbGVMYXlvdXQ6dS5kZWZhdWx0LmJvb2wsbG9hZGluZzp1LmRlZmF1bHQuYm9vbCxyb3dDbGFzc01hcHBlcjp1LmRlZmF1bHQuZnVuYyxncm91cGVkOnUuZGVmYXVsdC5ib29sLGdyb3VwRnVuY3Rpb246dS5kZWZhdWx0LmZ1bmMsZ3JvdXBIZWFkZXI6dS5kZWZhdWx0Lm9uZU9mVHlwZShbdS5kZWZhdWx0Lm5vZGUsdS5kZWZhdWx0LmZ1bmNdKSxyb3dIaWdobGlnaHRpbmdDb25maWc6dS5kZWZhdWx0LnNoYXBlKHtvbkdyaWRSb3dIaWdobGlnaHRlZDp1LmRlZmF1bHQuZnVuYyxpc0dyaWRSb3dIaWdobGlnaHRlZDp1LmRlZmF1bHQuYm9vbCxoaWdobGlnaHRlZFJvd0lkOnUuZGVmYXVsdC5vbmVPZlR5cGUoW3UuZGVmYXVsdC5zdHJpbmcsdS5kZWZhdWx0Lm51bWJlcl0pfSksZXhjbHVkZUZyb21TZWxlY3Rpb246dS5kZWZhdWx0LmFycmF5T2YodS5kZWZhdWx0Lm9iamVjdCl9LHYuZGVmYXVsdFByb3BzPXtjb2x1bW5zOltdLGRhdGE6W10sc29ydGluZ0RpcmVjdGlvbjoiREVTQyIsc29ydGluZ0NvbHVtbjpudWxsLG9uQ2hhbmdlU29ydGluZzpmdW5jdGlvbigpe30sb25GaWx0ZXJDbGljazpmdW5jdGlvbigpe30sc2VsZWN0YWJsZTohMSxzZWxlY3RlZEl0ZW1zOltdLG9uVG9nZ2xlU2VsZWN0QWxsOmZ1bmN0aW9uKCl7fSxvblRvZ2dsZVNlbGVjdGlvbjpmdW5jdGlvbigpe30sY2xhc3NOYW1lOiIiLGNoYW5nZU9ubHlNb2JpbGVMYXlvdXQ6ITEsbG9hZGluZzohMSxyb3dDbGFzc01hcHBlcjpudWxsLGdyb3VwRnVuY3Rpb246ZnVuY3Rpb24oKXt9LGdyb3VwZWQ6ITEsZ3JvdXBIZWFkZXI6bnVsbCxyb3dIaWdobGlnaHRpbmdDb25maWc6e30sZXhjbHVkZUZyb21TZWxlY3Rpb246W119OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJHcmlkIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImlzQWxsSXRlbXNTZWxlY3RlZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtncmlkOiJncmlkX19ncmlkX19fdXRJSkEiLCJzcGlubmVyLWJsb2NrIjoiZ3JpZF9fc3Bpbm5lci1ibG9ja19fX1ZkXzNFIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkQm9keS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR3JpZEJvZHk9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvcHJvcFR5cGVzLmpzIikscD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2luZGV4LmpzIiksZj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncm91cGVkR3JpZEJvZHkuanN4IiksbT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbnMsbj1lLmRhdGEscj1lLmdyb3VwRnVuY3Rpb24sbz1lLmdyb3VwSGVhZGVyLGk9ZS5ncm91cGVkLGw9KDAsYS5kZWZhdWx0KShlLFsiY29sdW1ucyIsImRhdGEiLCJncm91cEZ1bmN0aW9uIiwiZ3JvdXBIZWFkZXIiLCJncm91cGVkIl0pO3JldHVybiBpP3UuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGYuR3JvdXBlZEdyaWRCb2R5LCgwLHMuZGVmYXVsdCkoe2NvbHVtbnM6dCxkYXRhOm4sZ3JvdXBGdW5jdGlvbjpyLGdyb3VwSGVhZGVyOm99LGwpKTpuLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiB1LmRlZmF1bHQuY3JlYXRlRWxlbWVudChwLkdyaWRSb3csKDAscy5kZWZhdWx0KSh7a2V5OmUuaWR8fG4sY29sdW1uczp0LHZhbHVlOmV9LGwpKX0pfTt0LkdyaWRCb2R5PW0sbS5wcm9wVHlwZXM9e2NvbHVtbnM6ZC5kZWZhdWx0LmFycmF5T2YoZC5kZWZhdWx0LnNoYXBlKF8uY29sdW1uUHJvcFR5cGVzKSksZGF0YTpkLmRlZmF1bHQuYXJyYXksZ3JvdXBGdW5jdGlvbjpkLmRlZmF1bHQuZnVuYyxncm91cEhlYWRlcjpkLmRlZmF1bHQub25lT2ZUeXBlKFtkLmRlZmF1bHQubm9kZSxkLmRlZmF1bHQuZnVuY10pLGdyb3VwZWQ6ZC5kZWZhdWx0LmJvb2x9LG0uZGVmYXVsdFByb3BzPXtjb2x1bW5zOltdLGRhdGE6W10sZ3JvdXBGdW5jdGlvbjpmdW5jdGlvbigpe30sZ3JvdXBIZWFkZXI6bnVsbCxncm91cGVkOiExfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJHcmlkQm9keSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZEJvZHkuanN4Iil9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2NoZWNrYm94Q2VsbC9jaGVja2JveENlbGwuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaGVja2JveENlbGw9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2NoZWNrYm94Q2VsbC9jaGVja2JveENlbGwuc2NzcyIpLGM9cih1KSxkPWEuZGVmYXVsdC5iaW5kKGMuZGVmYXVsdCksXz10LkNoZWNrYm94Q2VsbD1mdW5jdGlvbih0KXt2YXIgbj10LmNsYXNzTmFtZSxyPXQudmFsdWUsbz10LmN1c3RvbVByb3BzLHM9by5zZWxlY3RlZCxpPW8ub25DaGFuZ2UsYT1vLmRpc2FibGVkO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJjaGVja2JveC1jZWxsIixuKX0sZS5jcmVhdGVFbGVtZW50KGwuSW5wdXRDaGVja2JveCx7dmFsdWU6cyxvbkNoYW5nZTpmdW5jdGlvbigpe3JldHVybiBpKHIpfSxkaXNhYmxlZDphfSkpfTtfLnByb3BUeXBlcz17Y2xhc3NOYW1lOnMuZGVmYXVsdC5zdHJpbmcsdmFsdWU6cy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGN1c3RvbVByb3BzOnMuZGVmYXVsdC5zaGFwZSh7c2VsZWN0ZWQ6cy5kZWZhdWx0LmJvb2wsZGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsb25DaGFuZ2U6cy5kZWZhdWx0LmZ1bmN9KX0sXy5kZWZhdWx0UHJvcHM9e2NsYXNzTmFtZToiIixjdXN0b21Qcm9wczp7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkNoZWNrYm94Q2VsbCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9jaGVja2JveENlbGwvY2hlY2tib3hDZWxsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2NoZWNrYm94Q2VsbC9jaGVja2JveENlbGwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9jaGVja2JveENlbGwvY2hlY2tib3hDZWxsLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiY2hlY2tib3gtY2VsbCI6ImNoZWNrYm94Q2VsbF9fY2hlY2tib3gtY2VsbF9fX2s2RjIyIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2NoZWNrYm94Q2VsbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9jaGVja2JveENlbGwvY2hlY2tib3hDZWxsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDaGVja2JveENlbGwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNoZWNrYm94Q2VsbH19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZENlbGwvZ3JpZENlbGwuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HcmlkQ2VsbD12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEM9cihBKSxPPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL3Byb3BUeXBlcy5qcyIpLFM9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvY29uc3RhbnRzLmpzIiksUj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2dyaWRDZWxsL2dyaWRDZWxsLnNjc3MiKSxqPXIoUikseD1DLmRlZmF1bHQuYmluZChqLmRlZmF1bHQpLEw9ZnVuY3Rpb24odCl7dmFyIG49dC5jbGFzc05hbWUscj10LnZhbHVlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp4KG4sInRleHQtY2VsbCIpfSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwscikpfTtMLnByb3BUeXBlcz17Y2xhc3NOYW1lOlQuZGVmYXVsdC5zdHJpbmcsdmFsdWU6VC5kZWZhdWx0LmFueX0sTC5kZWZhdWx0UHJvcHM9e2NsYXNzTmFtZToiIix2YWx1ZToiIn07dmFyIEQ9dC5HcmlkQ2VsbD0ocz1vPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCxwLmRlZmF1bHQpKHRoaXMsbiksKDAsZy5kZWZhdWx0KSh0aGlzLChuLl9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KShuKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxFLmRlZmF1bHQpKG4sdCksKDAsbS5kZWZhdWx0KShuLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuY29tcG9uZW50LHI9dC5yZWZGdW5jdGlvbixvPXQudmFsdWUscz10LmFsaWduLGk9dC5mb3JtYXR0ZXIsYT10LnRpdGxlLGw9dC5jdXN0b21Qcm9wcyxjPXQuZXhwYW5kZWQsZD10LnRvZ2dsZUV4cGFuZCxfPW47cmV0dXJuIGUuY3JlYXRlRWxlbWVudChfLHtjbGFzc05hbWU6eCgiZ3JpZC1jZWxsIiwoMCx1LmRlZmF1bHQpKHt9LCJhbGlnbi0iK3MscykpLHJlZkZ1bmN0aW9uOnIsdGl0bGU6YSx2YWx1ZTppKG8pLGN1c3RvbVByb3BzOmwsZXhwYW5kZWQ6Yyx0b2dnbGVFeHBhbmQ6ZH0pfX1dKSxufSh5LlB1cmVDb21wb25lbnQpLG8ucHJvcFR5cGVzPSgwLGEuZGVmYXVsdCkoe30sTy5jb2x1bW5Qcm9wVHlwZXMse2NvbXBvbmVudDpULmRlZmF1bHQub25lT2ZUeXBlKFtULmRlZmF1bHQubm9kZSxULmRlZmF1bHQuZnVuY10pLHZhbHVlOlQuZGVmYXVsdC5vYmplY3QscmVmRnVuY3Rpb246VC5kZWZhdWx0LmZ1bmMsZXhwYW5kZWQ6VC5kZWZhdWx0LmJvb2wsdG9nZ2xlRXhwYW5kOlQuZGVmYXVsdC5mdW5jfSksby5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDpMLHZhbHVlOnt9LGFsaWduOlMuQUxJR05fTEVGVCxmb3JtYXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRpdGxlOnt9LHJlZkZ1bmN0aW9uOmZ1bmN0aW9uKCl7fSxleHBhbmRlZDohMSx0b2dnbGVFeHBhbmQ6ZnVuY3Rpb24oKXt9fSxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiR3JpZENlbGwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZENlbGwvZ3JpZENlbGwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZENlbGwvZ3JpZENlbGwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTCwiVGV4dENlbGwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZENlbGwvZ3JpZENlbGwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9ncmlkQ2VsbC9ncmlkQ2VsbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImdyaWQtY2VsbCI6ImdyaWRDZWxsX19ncmlkLWNlbGxfX18zZTJtUyIsImFsaWduLWxlZnQiOiJncmlkQ2VsbF9fYWxpZ24tbGVmdF9fXzJiZUlHIiwiYWxpZ24tY2VudGVyIjoiZ3JpZENlbGxfX2FsaWduLWNlbnRlcl9fXzJaSUtXIiwiYWxpZ24tcmlnaHQiOiJncmlkQ2VsbF9fYWxpZ24tcmlnaHRfX18xNTM0USIsInRleHQtY2VsbCI6ImdyaWRDZWxsX190ZXh0LWNlbGxfX19xQ0hmTCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9ncmlkQ2VsbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9ncmlkQ2VsbC9ncmlkQ2VsbC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JpZENlbGwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdyaWRDZWxsfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9ncmlkUm93LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR3JpZFJvdz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLE09cih3KSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2NvbnN0YW50cy5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvcHJvcFR5cGVzLmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2dyaWRDZWxsL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2NoZWNrYm94Q2VsbC9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9ncmlkUm93LnNjc3MiKSxGPXIoSCksQj17R3JpZFJvdzp7ZGlzcGxheU5hbWU6IkdyaWRSb3cifX0sVT0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2dyaWRSb3cuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksRz0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2dyaWRSb3cuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksej1NLmRlZmF1bHQuYmluZChGLmRlZmF1bHQpLFY9dC5HcmlkUm93PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiR3JpZFJvdyIpKChvPSgwLHguZGVmYXVsdCkoKSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17d2l0aEFjY29yZGlvbjohMSxleHBhbmRlZDohMX0sci5zZXR1cFJlZj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2V0dXBSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0dXBBY2NvcmRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldHVwQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldEhpZ2hMaWdodEJsb2NrU2l6ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0SGlnaExpZ2h0QmxvY2tTaXplX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldEhpZ2hsaWdodEJsb2NrQ2xhc3Nlcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0SGlnaGxpZ2h0QmxvY2tDbGFzc2VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzSXRlbVNlbGVjdGVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0l0ZW1TZWxlY3RlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pc0l0ZW1EaXNhYmxlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNJdGVtRGlzYWJsZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oaWdobGlnaHRCbG9ja1JlZj1PLmRlZmF1bHQuY3JlYXRlUmVmKCksci5yb3dSZWY9Ty5kZWZhdWx0LmNyZWF0ZVJlZigpLHIuaGlnaExpZ2h0QmxvY2tDbGFzc2VzPXooImhpZ2hsaWdodCIpKyIgIit6KCJoaWRlLWhpZ2hsaWdodCIpLHIucmVtb3ZlQWNjb3JkaW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW1vdmVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQWNjb3JkaW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlQWNjb3JkaW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVtb3ZlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGVja0lmVGhlSGlnaGxpZ2h0TmVlZGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGVja0lmVGhlSGlnaGxpZ2h0TmVlZGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0l0ZW1EaXNhYmxlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNJdGVtRGlzYWJsZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSXRlbVNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0l0ZW1TZWxlY3RlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SGlnaGxpZ2h0QmxvY2tDbGFzc2VzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRIaWdobGlnaHRCbG9ja0NsYXNzZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEhpZ2hMaWdodEJsb2NrU2l6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0SGlnaExpZ2h0QmxvY2tTaXplX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cEFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0dXBBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlQWNjb3JkaW9uKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVBY2NvcmRpb24oKSx0aGlzLmNoZWNrSWZUaGVIaWdobGlnaHROZWVkZWQoKSYmdGhpcy5oaWdoTGlnaHRHcmlkUm93KCl9fSx7a2V5OiJfX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm92ZXJmbG93Q2VsbD1lfX0se2tleToiX19zZXR1cEFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0dXBBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cEFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHt3aXRoQWNjb3JkaW9uOiEwfSksdGhpcy5vdmVyZmxvd0NlbGwuc3R5bGUubWF4SGVpZ2h0PXRoaXMub3ZlcmZsb3dDZWxsTWF4SGVpZ2h0KyJweCJ9fSx7a2V5OiJfX2dldEhpZ2hMaWdodEJsb2NrU2l6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0SGlnaExpZ2h0QmxvY2tTaXplX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRIaWdoTGlnaHRCbG9ja1NpemVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEhpZ2hMaWdodEJsb2NrU2l6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SGlnaExpZ2h0QmxvY2tTaXplX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93UmVmJiZ0aGlzLnJvd1JlZi5jdXJyZW50P3toZWlnaHQ6dGhpcy5yb3dSZWYuY3VycmVudC5jbGllbnRIZWlnaHQrInB4Iix3aWR0aDp0aGlzLnJvd1JlZi5jdXJyZW50LmNsaWVudFdpZHRoKyJweCJ9Ont9fX0se2tleToiX19nZXRIaWdobGlnaHRCbG9ja0NsYXNzZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEhpZ2hsaWdodEJsb2NrQ2xhc3Nlc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SGlnaGxpZ2h0QmxvY2tDbGFzc2VzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRIaWdobGlnaHRCbG9ja0NsYXNzZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEhpZ2hsaWdodEJsb2NrQ2xhc3Nlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoZWNrSWZUaGVIaWdobGlnaHROZWVkZWQoKT90aGlzLmhpZ2hMaWdodEJsb2NrQ2xhc3NlczoiIn19LHtrZXk6Il9faXNJdGVtU2VsZWN0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzSXRlbVNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0l0ZW1TZWxlY3RlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNJdGVtU2VsZWN0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSXRlbVNlbGVjdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lLnByb3BzLnZhbHVlLmlkfSl9fSx7a2V5OiJfX2lzSXRlbURpc2FibGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0l0ZW1EaXNhYmxlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNJdGVtRGlzYWJsZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzSXRlbURpc2FibGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0l0ZW1EaXNhYmxlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucHJvcHMuZXhjbHVkZUZyb21TZWxlY3Rpb24uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWUucHJvcHMudmFsdWUuaWR9KX19LHtrZXk6Il9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2hlY2tJZlRoZUhpZ2hsaWdodE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMucm93SGlnaGxpZ2h0aW5nQ29uZmlnLHQ9ZS5oaWdobGlnaHRlZFJvd0lkLG49ZS5pc0dyaWRSb3dIaWdobGlnaHRlZDtyZXR1cm4gdGhpcy5oaWdobGlnaHRCbG9ja1JlZi5jdXJyZW50JiZ0PT09dGhpcy5wcm9wcy52YWx1ZS5pZCYmIW59fSx7a2V5OiJoaWdoTGlnaHRHcmlkUm93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5oaWdobGlnaHRCbG9ja1JlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIn0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnByb3BzLnJvd0hpZ2hsaWdodGluZ0NvbmZpZy5vbkdyaWRSb3dIaWdobGlnaHRlZCgpfSxrLkxPR19NRVNTQUdFX0hJR0hMSUdIVF9USU1FT1VUKX19LHtrZXk6Il9fcmVtb3ZlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVtb3ZlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHt3aXRoQWNjb3JkaW9uOiExfSksdGhpcy5vdmVyZmxvd0NlbGwuc3R5bGUubWF4SGVpZ2h0PW51bGx9fSx7a2V5OiJfX2hhbmRsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvd0NlbGwmJih0aGlzLm92ZXJmbG93Q2VsbC5vZmZzZXRIZWlnaHQ+dGhpcy5vdmVyZmxvd0NlbGxNYXhIZWlnaHQ/IXRoaXMuc3RhdGUud2l0aEFjY29yZGlvbiYmdGhpcy5zZXR1cEFjY29yZGlvbigpOnRoaXMub3ZlcmZsb3dDZWxsLm9mZnNldEhlaWdodDx0aGlzLm92ZXJmbG93Q2VsbE1heEhlaWdodCYmdGhpcy5zdGF0ZS53aXRoQWNjb3JkaW9uJiZ0aGlzLnJlbW92ZUFjY29yZGlvbigpKX19LHtrZXk6Il9fdG9nZ2xlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUFjY29yZGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlQWNjb3JkaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVBY2NvcmRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMub3ZlcmZsb3dDZWxsJiYodGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KHRoaXMucHJvcHMudG9nZ2xlQWNjb3JkaW9uRXZlbnRJbmZvKSx0aGlzLnNldFN0YXRlKHtleHBhbmRlZDohdGhpcy5zdGF0ZS5leHBhbmRlZH0sZnVuY3Rpb24oKXtlLm92ZXJmbG93Q2VsbC5zdHlsZS5tYXhIZWlnaHQ9ZS5zdGF0ZS5leHBhbmRlZD9udWxsOmUub3ZlcmZsb3dDZWxsTWF4SGVpZ2h0KyJweCJ9KSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNvbHVtbnMscj10LnZhbHVlLG89dC5zZWxlY3RhYmxlLHM9dC5jaGFuZ2VPbmx5TW9iaWxlTGF5b3V0LGk9dC5yb3dDbGFzc01hcHBlcixhPXRoaXMuc3RhdGUuZXhwYW5kZWQsbD1pJiZpKHIpfHx7fTtyZXR1cm4gTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJncmlkLXJvdy13cmFwcGVyIiwoMCx1LmRlZmF1bHQpKHtzZWxlY3RlZDp0aGlzLmlzSXRlbVNlbGVjdGVkKCl9LGwpKSwiZGF0YS1pZCI6ci5pZCxyZWY6dGhpcy5yb3dSZWZ9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiZ3JpZC1yb3ciKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjp0aGlzLmhpZ2hsaWdodEJsb2NrUmVmLGNsYXNzTmFtZTp6KCJoaWdobGlnaHQtYmxvY2siLHRoaXMuZ2V0SGlnaGxpZ2h0QmxvY2tDbGFzc2VzKCkpLHN0eWxlOnRoaXMuZ2V0SGlnaExpZ2h0QmxvY2tTaXplKCl9KSksdGhpcy5zdGF0ZS53aXRoQWNjb3JkaW9uJiZPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImFjY29yZGlvbi13cmFwcGVyLW1vYmlsZSIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImFjY29yZGlvbi10b2dnbGVyLW1vYmlsZSIse3JvdGF0ZWQ6dGhpcy5zdGF0ZS5leHBhbmRlZH0pLG9uQ2xpY2s6dGhpcy50b2dnbGVBY2NvcmRpb259KSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJncmlkLXJvdyIseyJjaGFuZ2UtbW9iaWxlIjpzfSl9LG4ubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQubWF4SGVpZ2h0JiYoZS5vdmVyZmxvd0NlbGxNYXhIZWlnaHQ9dC5tYXhIZWlnaHQpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuR3JpZENlbGwse2tleTp0LmlkfHxuLHJlZkZ1bmN0aW9uOnQubWF4SGVpZ2h0P2Uuc2V0dXBSZWY6bnVsbCxtb2JpbGVXaWR0aDp0Lm1vYmlsZVdpZHRoLHZhbHVlOnIsYWxpZ246dC5hbGlnbixjb21wb25lbnQ6dC5jb21wb25lbnQsZm9ybWF0dGVyOnQuZm9ybWF0dGVyLHRpdGxlOnQudGl0bGUsY3VzdG9tUHJvcHM6dC5jdXN0b21Qcm9wcyxleHBhbmRlZDphLHRvZ2dsZUV4cGFuZDplLnRvZ2dsZUFjY29yZGlvbn0pfSksbyYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5HcmlkQ2VsbCx7YWxpZ246InJpZ2h0Iixjb21wb25lbnQ6Ti5DaGVja2JveENlbGwsdmFsdWU6cixjdXN0b21Qcm9wczp7ZGlzYWJsZWQ6dGhpcy5pc0l0ZW1EaXNhYmxlZCgpLHNlbGVjdGVkOnRoaXMuaXNJdGVtU2VsZWN0ZWQoKSxvbkNoYW5nZTp0aGlzLnByb3BzLm9uVG9nZ2xlU2VsZWN0aW9ufX0pKSx0aGlzLnN0YXRlLndpdGhBY2NvcmRpb24mJk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiZ3JpZC1yb3ciKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJhY2NvcmRpb24td3JhcHBlciIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImFjY29yZGlvbi1ibG9jayIse2V4cGFuZGVkOnRoaXMuc3RhdGUuZXhwYW5kZWR9KX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJhY2NvcmRpb24tdG9nZ2xlciIse3JvdGF0ZWQ6dGhpcy5zdGF0ZS5leHBhbmRlZH0pLG9uQ2xpY2s6dGhpcy50b2dnbGVBY2NvcmRpb259KSkpKSl9fV0pLHR9KEMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17Y29sdW1uczpELmRlZmF1bHQuYXJyYXlPZihELmRlZmF1bHQuc2hhcGUoSS5jb2x1bW5Qcm9wVHlwZXMpKSx2YWx1ZTpELmRlZmF1bHQub2JqZWN0LHNlbGVjdGFibGU6RC5kZWZhdWx0LmJvb2wsc2VsZWN0ZWRJdGVtczpELmRlZmF1bHQuYXJyYXlPZihELmRlZmF1bHQub2JqZWN0KSxvblRvZ2dsZVNlbGVjdGlvbjpELmRlZmF1bHQuZnVuYyxjaGFuZ2VPbmx5TW9iaWxlTGF5b3V0OkQuZGVmYXVsdC5ib29sLHJvd0NsYXNzTWFwcGVyOkQuZGVmYXVsdC5mdW5jLHRvZ2dsZUFjY29yZGlvbkV2ZW50SW5mbzpELmRlZmF1bHQub2JqZWN0LHRyYWNraW5nOkQuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpELmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6RC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkLHJvd0hpZ2hsaWdodGluZ0NvbmZpZzpELmRlZmF1bHQuc2hhcGUoe29uR3JpZFJvd0hpZ2hsaWdodGVkOkQuZGVmYXVsdC5mdW5jLGlzR3JpZFJvd0hpZ2hsaWdodGVkOkQuZGVmYXVsdC5ib29sLGhpZ2hsaWdodGVkUm93SWQ6RC5kZWZhdWx0Lm9uZU9mVHlwZShbRC5kZWZhdWx0LnN0cmluZyxELmRlZmF1bHQubnVtYmVyXSl9KSxleGNsdWRlRnJvbVNlbGVjdGlvbjpELmRlZmF1bHQuYXJyYXlPZihELmRlZmF1bHQub2JqZWN0KX0saS5kZWZhdWx0UHJvcHM9e2NvbHVtbnM6W10sdmFsdWU6e30sc2VsZWN0YWJsZTohMSxzZWxlY3RlZEl0ZW1zOltdLG9uVG9nZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7fSxjaGFuZ2VPbmx5TW9iaWxlTGF5b3V0OiExLHJvd0NsYXNzTWFwcGVyOm51bGwsdG9nZ2xlQWNjb3JkaW9uRXZlbnRJbmZvOnt9LHJvd0hpZ2hsaWdodGluZ0NvbmZpZzp7fSxleGNsdWRlRnJvbVNlbGVjdGlvbjpbXX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJHcmlkUm93IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkUm93L2dyaWRSb3cuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZFJvdy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZFJvdy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImdyaWQtcm93LXdyYXBwZXIiOiJncmlkUm93X19ncmlkLXJvdy13cmFwcGVyX19fMWRJOUsiLHNlbGVjdGVkOiJncmlkUm93X19zZWxlY3RlZF9fX1JZUEdCIiwiYWNjb3JkaW9uLWJsb2NrIjoiZ3JpZFJvd19fYWNjb3JkaW9uLWJsb2NrX19fRlVCWlEiLGV4cGFuZGVkOiJncmlkUm93X19leHBhbmRlZF9fX3JPZVBuIiwiZ3JpZC1yb3ciOiJncmlkUm93X19ncmlkLXJvd19fXzFwUy01IiwiY2hhbmdlLW1vYmlsZSI6ImdyaWRSb3dfX2NoYW5nZS1tb2JpbGVfX18zS2xfViIsImFjY29yZGlvbi13cmFwcGVyIjoiZ3JpZFJvd19fYWNjb3JkaW9uLXdyYXBwZXJfX18xOTg0eCIsImFjY29yZGlvbi10b2dnbGVyIjoiZ3JpZFJvd19fYWNjb3JkaW9uLXRvZ2dsZXJfX18xMDNsZCIscm90YXRlZDoiZ3JpZFJvd19fcm90YXRlZF9fXzJ0ZTB6IiwiYWNjb3JkaW9uLXdyYXBwZXItbW9iaWxlIjoiZ3JpZFJvd19fYWNjb3JkaW9uLXdyYXBwZXItbW9iaWxlX19fZmpaZjEiLCJhY2NvcmRpb24tdG9nZ2xlci1tb2JpbGUiOiJncmlkUm93X19hY2NvcmRpb24tdG9nZ2xlci1tb2JpbGVfX19sdklOVSIsbG9nOiJncmlkUm93X19sb2dfX18zV1NLRiIsImVycm9yLXJvdyI6ImdyaWRSb3dfX2Vycm9yLXJvd19fXzJGaUI3Iiwicm93LWNvbnNvbGUiOiJncmlkUm93X19yb3ctY29uc29sZV9fXzIybkIxIiwiaGlnaGxpZ2h0LWJsb2NrIjoiZ3JpZFJvd19faGlnaGxpZ2h0LWJsb2NrX19fMjQ2aWQiLGhpZ2hsaWdodDoiZ3JpZFJvd19faGlnaGxpZ2h0X19fMjBoYnEiLCJoaWRlLWhpZ2hsaWdodCI6ImdyaWRSb3dfX2hpZGUtaGlnaGxpZ2h0X19fMVBXcFYifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyaWRSb3cvZ3JpZFJvdy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JpZFJvdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuR3JpZFJvd319KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyb3VwZWRHcmlkQm9keS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lkdyb3VwZWRHcmlkQm9keT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscD1yKF8pLGY9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEJvZHkvZ3JpZFJvdy9pbmRleC5qcyIpLG09bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvcHJvcFR5cGVzLmpzIiksaD1mdW5jdGlvbih0KXt2YXIgbj10LmRhdGEscj10Lmdyb3VwRnVuY3Rpb24sbz10Lmdyb3VwSGVhZGVyLGk9KDAsZC5kZWZhdWx0KSh0LFsiZGF0YSIsImdyb3VwRnVuY3Rpb24iLCJncm91cEhlYWRlciJdKSxsPXIobil8fFtdO3JldHVybigwLHUuZGVmYXVsdCkobCkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuW10uY29uY2F0KCgwLGEuZGVmYXVsdCkodCksW2UuY3JlYXRlRWxlbWVudChvLHtrZXk6bixncm91cElkOm4sZGF0YTpsW25dfSldLCgwLGEuZGVmYXVsdCkobFtuXS5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KGYuR3JpZFJvdywoMCxzLmRlZmF1bHQpKHtrZXk6dC5pZHx8bix2YWx1ZTp0fSxpKSl9KSkpfSxbXSl9O3QuR3JvdXBlZEdyaWRCb2R5PWgsaC5wcm9wVHlwZXM9e2NvbHVtbnM6cC5kZWZhdWx0LmFycmF5T2YocC5kZWZhdWx0LnNoYXBlKG0uY29sdW1uUHJvcFR5cGVzKSksZGF0YTpwLmRlZmF1bHQuYXJyYXksZ3JvdXBGdW5jdGlvbjpwLmRlZmF1bHQuZnVuYyxncm91cEhlYWRlcjpwLmRlZmF1bHQub25lT2ZUeXBlKFtwLmRlZmF1bHQubm9kZSxwLmRlZmF1bHQuZnVuY10pLGdyb3VwZWQ6cC5kZWZhdWx0LmJvb2x9LGguZGVmYXVsdFByb3BzPXtjb2x1bW5zOltdLGRhdGE6W10sZ3JvdXBGdW5jdGlvbjpmdW5jdGlvbigpe30sZ3JvdXBIZWFkZXI6bnVsbCxncm91cGVkOiExfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJHcm91cGVkR3JpZEJvZHkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2dyb3VwZWRHcmlkQm9keS5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRCb2R5L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkQm9keS9ncmlkQm9keS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JpZEJvZHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdyaWRCb2R5fX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9jaGVja2JveEhlYWRlckNlbGwvY2hlY2tib3hIZWFkZXJDZWxsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2hlY2tib3hIZWFkZXJDZWxsPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbmRleC5qcyIpLHU9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9jaGVja2JveEhlYWRlckNlbGwvY2hlY2tib3hIZWFkZXJDZWxsLnNjc3MiKSxjPXIodSksZD1hLmRlZmF1bHQuYmluZChjLmRlZmF1bHQpLF89dC5DaGVja2JveEhlYWRlckNlbGw9ZnVuY3Rpb24odCl7dmFyIG49dC52YWx1ZSxyPXQub25DaGFuZ2U7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmQoImNoZWNrYm94LWhlYWRlci1jZWxsIil9LGUuY3JlYXRlRWxlbWVudChsLklucHV0Q2hlY2tib3gse3ZhbHVlOm4sb25DaGFuZ2U6cn0pKX07Xy5wcm9wVHlwZXM9e3ZhbHVlOnMuZGVmYXVsdC5ib29sLG9uQ2hhbmdlOnMuZGVmYXVsdC5mdW5jfSxfLmRlZmF1bHRQcm9wcz17dmFsdWU6ITEsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiQ2hlY2tib3hIZWFkZXJDZWxsIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2NoZWNrYm94SGVhZGVyQ2VsbC9jaGVja2JveEhlYWRlckNlbGwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvY2hlY2tib3hIZWFkZXJDZWxsL2NoZWNrYm94SGVhZGVyQ2VsbC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2NoZWNrYm94SGVhZGVyQ2VsbC9jaGVja2JveEhlYWRlckNlbGwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJjaGVja2JveC1oZWFkZXItY2VsbCI6ImNoZWNrYm94SGVhZGVyQ2VsbF9fY2hlY2tib3gtaGVhZGVyLWNlbGxfX19JQ2ZqYyJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9jaGVja2JveEhlYWRlckNlbGwvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvY2hlY2tib3hIZWFkZXJDZWxsL2NoZWNrYm94SGVhZGVyQ2VsbC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2hlY2tib3hIZWFkZXJDZWxsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5DaGVja2JveEhlYWRlckNlbGx9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2dyaWRIZWFkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HcmlkSGVhZGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvcHJvcFR5cGVzLmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2hlYWRlckNlbGwvaW5kZXguanMiKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvY2hlY2tib3hIZWFkZXJDZWxsL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2dyaWRIZWFkZXIuc2NzcyIpLF89cihkKSxwPWEuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj10LkdyaWRIZWFkZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5jb2x1bW5zLHI9dC5zb3J0aW5nQ29sdW1uLG89dC5zb3J0aW5nRGlyZWN0aW9uLHM9dC5zZWxlY3RhYmxlLGk9dC5hbGxTZWxlY3RlZCxhPXQub25DaGFuZ2VTb3J0aW5nLGw9dC5vbkZpbHRlckNsaWNrLGQ9dC5vblRvZ2dsZVNlbGVjdEFsbCxfPXQuaGlkZUhlYWRlckZvck1vYmlsZTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgiZ3JpZC1oZWFkZXIiLHsibW9iaWxlLWhpZGUiOl99KX0sbi5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KHUuSGVhZGVyQ2VsbCx7a2V5OnQuaWR8fG4sdGl0bGU6dC50aXRsZSxhbGlnbjp0LmFsaWduLHNvcnRhYmxlOnQuc29ydGFibGUsaWQ6dC5pZCx3aXRoRmlsdGVyOnQud2l0aEZpbHRlcixmaWx0ZXJFdmVudEluZm86dC5maWx0ZXJFdmVudEluZm8sc29ydGluZ0V2ZW50SW5mbzp0LnNvcnRpbmdFdmVudEluZm8sc29ydGluZ0RpcmVjdGlvbjpvLHNvcnRpbmdBY3RpdmU6cj09PXQuaWQsb25DaGFuZ2VTb3J0aW5nOmEsb25GaWx0ZXJDbGljazpsfSl9KSxzJiZlLmNyZWF0ZUVsZW1lbnQoYy5DaGVja2JveEhlYWRlckNlbGwse3ZhbHVlOmksb25DaGFuZ2U6ZH0pKX07Zi5wcm9wVHlwZXM9e2NvbHVtbnM6cy5kZWZhdWx0LmFycmF5T2Yocy5kZWZhdWx0LnNoYXBlKGwuY29sdW1uUHJvcFR5cGVzKSksc29ydGluZ0NvbHVtbjpzLmRlZmF1bHQuc3RyaW5nLHNvcnRpbmdEaXJlY3Rpb246cy5kZWZhdWx0LnN0cmluZyxzZWxlY3RhYmxlOnMuZGVmYXVsdC5ib29sLGFsbFNlbGVjdGVkOnMuZGVmYXVsdC5ib29sLGhpZGVIZWFkZXJGb3JNb2JpbGU6cy5kZWZhdWx0LmJvb2wsb25DaGFuZ2VTb3J0aW5nOnMuZGVmYXVsdC5mdW5jLG9uRmlsdGVyQ2xpY2s6cy5kZWZhdWx0LmZ1bmMsb25Ub2dnbGVTZWxlY3RBbGw6cy5kZWZhdWx0LmZ1bmN9LGYuZGVmYXVsdFByb3BzPXtjb2x1bW5zOltdLHNvcnRpbmdDb2x1bW46IiIsc29ydGluZ0RpcmVjdGlvbjpudWxsLHNlbGVjdGFibGU6ITEsYWxsU2VsZWN0ZWQ6ITEsaGlkZUhlYWRlckZvck1vYmlsZTohMSxvbkNoYW5nZVNvcnRpbmc6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyQ2xpY2s6ZnVuY3Rpb24oKXt9LG9uVG9nZ2xlU2VsZWN0QWxsOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkdyaWRIZWFkZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvZ3JpZEhlYWRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9ncmlkSGVhZGVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvZ3JpZEhlYWRlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImdyaWQtaGVhZGVyIjoiZ3JpZEhlYWRlcl9fZ3JpZC1oZWFkZXJfX18zcWRWUSIsIm1vYmlsZS1oaWRlIjoiZ3JpZEhlYWRlcl9fbW9iaWxlLWhpZGVfX19iUllfZSIsImdyaWQtaGVhZGVyLWNlbGwiOiJncmlkSGVhZGVyX19ncmlkLWhlYWRlci1jZWxsX19fMlNVQ20iLCJhbGlnbi1sZWZ0IjoiZ3JpZEhlYWRlcl9fYWxpZ24tbGVmdF9fXzEzbVNuIiwiYWxpZ24tY2VudGVyIjoiZ3JpZEhlYWRlcl9fYWxpZ24tY2VudGVyX19fMXQyam8iLCJhbGlnbi1yaWdodCI6ImdyaWRIZWFkZXJfX2FsaWduLXJpZ2h0X19fMk5fVnIifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvaGVhZGVyQ2VsbC9oZWFkZXJDZWxsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSGVhZGVyQ2VsbD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLG09cihmKSxoPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL3Byb3BUeXBlcy5qcyIpLGc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvaW5kZXguanMiKSxiPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvaGVhZGVyQ2VsbC9pbWcvYXJyb3ctZG93bi1pbmxpbmUuc3ZnIiksRT1yKGIpLHk9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2ltZy9pY29uLWZpbHRlci1pbmxpbmUuc3ZnIiksdj1yKHkpLFQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2hlYWRlckNlbGwuc2NzcyIpLEE9cihUKSxDPXAuZGVmYXVsdC5iaW5kKEEuZGVmYXVsdCksTz10LkhlYWRlckNlbGw9KDAsZC5kZWZhdWx0KSgpKGZ1bmN0aW9uKHQpe3ZhciBuLHI9dC50aXRsZSxvPXQuYWxpZ24saT10LnNvcnRhYmxlLGw9dC5pZCx1PXQuc29ydGluZ0FjdGl2ZSxjPXQuc29ydGluZ0RpcmVjdGlvbixkPXQub25DaGFuZ2VTb3J0aW5nLF89dC53aXRoRmlsdGVyLHA9dC5vbkZpbHRlckNsaWNrLGY9dC5maWx0ZXJFdmVudEluZm8saD10LnNvcnRpbmdFdmVudEluZm8sZz10LnRyYWNraW5nLGI9KG49e30sKDAsYS5kZWZhdWx0KShuLCJhbGlnbi0iK28sbyksKDAsYS5kZWZhdWx0KShuLCJzb3J0aW5nLSIrYy50b0xvd2VyQ2FzZSgpLGMpLCgwLGEuZGVmYXVsdCkobiwic29ydGFibGUiLGkpLCgwLGEuZGVmYXVsdCkobiwic29ydGluZy1hY3RpdmUiLHUpLCgwLGEuZGVmYXVsdCkobiwid2l0aC1maWx0ZXIiLF8pLG4pLHk9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxwKGwpLGYmJmcudHJhY2tFdmVudChmKX0sVD1yLmNvbXBvbmVudCxBPXIuY29tcG9uZW50UHJvcHM7cmV0dXJuIHIuY29tcG9uZW50P2UuY3JlYXRlRWxlbWVudChULCgwLHMuZGVmYXVsdCkoe2NsYXNzTmFtZTpDKCJoZWFkZXItY2VsbCIsYil9LEEpKTplLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpDKCJoZWFkZXItY2VsbCIsYiksb25DbGljazpmdW5jdGlvbigpe2cudHJhY2tFdmVudChoKSxkKGwpfX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QygidGl0bGUtY29udGFpbmVyIil9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkMoImZpbHRlciIpLG9uQ2xpY2s6eX0sKDAsbS5kZWZhdWx0KSh2LmRlZmF1bHQpKSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6QygidGl0bGUtZnVsbCIpfSxyLmZ1bGwpLGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpDKCJ0aXRsZS1zaG9ydCIpfSxyLnNob3J0fHxyLmZ1bGwpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkMoImFycm93Iil9LCgwLG0uZGVmYXVsdCkoRS5kZWZhdWx0KSkpKX0pO08ucHJvcFR5cGVzPSgwLHMuZGVmYXVsdCkoe30saC5jb2x1bW5Qcm9wVHlwZXMse3NvcnRpbmdEaXJlY3Rpb246dS5kZWZhdWx0LnN0cmluZyxzb3J0aW5nQWN0aXZlOnUuZGVmYXVsdC5ib29sLG9uQ2hhbmdlU29ydGluZzp1LmRlZmF1bHQuZnVuYyxvbkZpbHRlckNsaWNrOnUuZGVmYXVsdC5mdW5jLGZpbHRlckV2ZW50SW5mbzp1LmRlZmF1bHQub2JqZWN0LHNvcnRpbmdFdmVudEluZm86dS5kZWZhdWx0Lm9iamVjdCx0cmFja2luZzp1LmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6dS5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOnUuZGVmYXVsdC5mdW5jfSl9KSxPLmRlZmF1bHRQcm9wcz17dGl0bGU6e2Z1bGw6IiJ9LGFsaWduOmcuQUxJR05fTEVGVCxzb3J0YWJsZTohMSxpZDoiIix3aXRoRmlsdGVyOiExLHNvcnRpbmdEaXJlY3Rpb246IkRFU0MiLHNvcnRpbmdBY3RpdmU6ITEsb25DaGFuZ2VTb3J0aW5nOmZ1bmN0aW9uKCl7fSxvbkZpbHRlckNsaWNrOmZ1bmN0aW9uKCl7fSxmaWx0ZXJFdmVudEluZm86e30sc29ydGluZ0V2ZW50SW5mbzp7fSx0cmFja2luZzp7dHJhY2tFdmVudDpmdW5jdGlvbigpe30sZ2V0VHJhY2tpbmdEYXRhOmZ1bmN0aW9uKCl7fX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihPLCJIZWFkZXJDZWxsIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2hlYWRlckNlbGwvaGVhZGVyQ2VsbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2hlYWRlckNlbGwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2hlYWRlckNlbGwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJoZWFkZXItY2VsbCI6ImhlYWRlckNlbGxfX2hlYWRlci1jZWxsX19faHJRaXQiLCJhbGlnbi1sZWZ0IjoiaGVhZGVyQ2VsbF9fYWxpZ24tbGVmdF9fXzJYcDlEIiwiYWxpZ24tY2VudGVyIjoiaGVhZGVyQ2VsbF9fYWxpZ24tY2VudGVyX19fMjZXMGQiLCJhbGlnbi1yaWdodCI6ImhlYWRlckNlbGxfX2FsaWduLXJpZ2h0X19fMmxRX2EiLCJ0aXRsZS1zaG9ydCI6ImhlYWRlckNlbGxfX3RpdGxlLXNob3J0X19fM19zMUEiLCJ0aXRsZS1mdWxsIjoiaGVhZGVyQ2VsbF9fdGl0bGUtZnVsbF9fXzJDVTlXIiwidGl0bGUtY29udGFpbmVyIjoiaGVhZGVyQ2VsbF9fdGl0bGUtY29udGFpbmVyX19fQnQzYXMiLGFycm93OiJoZWFkZXJDZWxsX19hcnJvd19fXzFCQ0l6Iixzb3J0YWJsZToiaGVhZGVyQ2VsbF9fc29ydGFibGVfX18zdmNuSCIsInNvcnRpbmctYXNjIjoiaGVhZGVyQ2VsbF9fc29ydGluZy1hc2NfX18yMXBTQSIsInNvcnRpbmctYWN0aXZlIjoiaGVhZGVyQ2VsbF9fc29ydGluZy1hY3RpdmVfX18xdE4ydCIsZmlsdGVyOiJoZWFkZXJDZWxsX19maWx0ZXJfX18ycFFLaSIsIndpdGgtZmlsdGVyIjoiaGVhZGVyQ2VsbF9fd2l0aC1maWx0ZXJfX18zVHdJTCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2ltZy9hcnJvdy1kb3duLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEyIDgiPjxwb2x5Z29uIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxLjQxNSAwIDAgMS40MTUgNiA3LjQxNSAxMiAxLjQxNSAxMC41ODUgMCA2IDQuNTg1Ij48L3BvbHlnb24+PC9zdmc+J30sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvaGVhZGVyQ2VsbC9pbWcvaWNvbi1maWx0ZXItaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAgMTAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDBMNS45MTYgNS4xNDV2NC44NEw0LjA5NCA4LjY2VjUuMTQ1TDAgMHoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvZ3JpZEhlYWRlci9oZWFkZXJDZWxsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkSGVhZGVyL2hlYWRlckNlbGwvaGVhZGVyQ2VsbC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSGVhZGVyQ2VsbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSGVhZGVyQ2VsbH19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2dyaWRIZWFkZXIvZ3JpZEhlYWRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR3JpZEhlYWRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuR3JpZEhlYWRlcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9ncmlkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHcmlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5HcmlkfX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBTElHTl9MRUZUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BTElHTl9MRUZUfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBTElHTl9SSUdIVCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uQUxJR05fUklHSFR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFMSUdOX0NFTlRFUiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uQUxJR05fQ0VOVEVSfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvcHJvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbHVtblByb3BUeXBlcz12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2NvbnN0YW50cy5qcyIpLGk9dC5jb2x1bW5Qcm9wVHlwZXM9e3RpdGxlOm8uZGVmYXVsdC5zaGFwZSh7ZnVsbDpvLmRlZmF1bHQuc3RyaW5nLHNob3J0Om8uZGVmYXVsdC5zdHJpbmcsY29tcG9uZW50Om8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5ub2RlLG8uZGVmYXVsdC5mdW5jXSl9KSxjdXN0b21Qcm9wczpvLmRlZmF1bHQub2JqZWN0LGNvbXBvbmVudDpvLmRlZmF1bHQub25lT2ZUeXBlKFtvLmRlZmF1bHQubm9kZSxvLmRlZmF1bHQuZnVuY10pLGFsaWduOm8uZGVmYXVsdC5vbmVPZihbcy5BTElHTl9MRUZULHMuQUxJR05fQ0VOVEVSLHMuQUxJR05fUklHSFRdKSxmb3JtYXR0ZXI6by5kZWZhdWx0LmZ1bmMsc29ydGFibGU6by5kZWZhdWx0LmJvb2wsaWQ6by5kZWZhdWx0LnN0cmluZ307IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiY29sdW1uUHJvcFR5cGVzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vZ3JpZC9wcm9wVHlwZXMuanMiKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9pY29uL2ljb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lkljb249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9pY29uL2ljb24uc2NzcyIpLGQ9cihjKSxfPXUuZGVmYXVsdC5iaW5kKGQuZGVmYXVsdCkscD10Lkljb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlLG49ZS5vbkNsaWNrO3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTpfKCJpY29uIix0KSxvbkNsaWNrOm59KX07cC5wcm9wVHlwZXM9e3R5cGU6YS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLG9uQ2xpY2s6YS5kZWZhdWx0LmZ1bmN9LHAuZGVmYXVsdFByb3BzPXtvbkNsaWNrOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkljb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9pY29uL2ljb24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9pY29uL2ljb24uanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2ljb24vaWNvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17aWNvbjoiaWNvbl9faWNvbl9fXzJtNk9kIiwiaWNvbi1jaGVjayI6Imljb25fX2ljb24tY2hlY2tfX18xNDZNbSIsImljb24tcGVuY2lsIjoiaWNvbl9faWNvbi1wZW5jaWxfX18yLVI2YiIsImljb24tZGVsZXRlIjoiaWNvbl9faWNvbi1kZWxldGVfX18xaklIRiIsImljb24tY2xvc2UiOiJpY29uX19pY29uLWNsb3NlX19fMWx0ZVkiLCJpY29uLXRhYmxlcyI6Imljb25fX2ljb24tdGFibGVzX19fMzFFSm8iLCJpY29uLXBsYW5ldCI6Imljb25fX2ljb24tcGxhbmV0X19fM2tsSjQiLCJpY29uLWdyaWQiOiJpY29uX19pY29uLWdyaWRfX18ySDRtVCIsImljb24tdGFibGUiOiJpY29uX19pY29uLXRhYmxlX19fM2NtSXgifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9pY29uL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vaWNvbi9pY29uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJY29uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JY29ufX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvbkNvbnRhaW5lci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvbkNvbnRhaW5lci9sb2NhbGl6YXRpb25Db250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxvY2FsaXphdGlvbkNvbnRhaW5lciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTG9jYWxpemF0aW9uQ29udGFpbmVyfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvbkNvbnRhaW5lci9sb2NhbGl6YXRpb25Db250YWluZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGl6YXRpb25Db250YWluZXI9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9sb2NhbGUtZGF0YS9lbi5qcyIpLE09cih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbG9jYWxlLWRhdGEvcnUuanMiKSxJPXIoayksUD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xvY2FsZS1kYXRhL2JlLmpzIiksTj1yKFApLEg9bigiLi9zcmMvY29udHJvbGxlcnMvbGFuZy9pbmRleC5qcyIpLEY9bigiLi9sb2NhbGl6YXRpb24vdHJhbnNsYXRlZC9ydS5qc29uIiksQj1yKEYpLFU9bigiLi9sb2NhbGl6YXRpb24vdHJhbnNsYXRlZC9iZS5qc29uIiksRz1yKFUpLHo9e0xvY2FsaXphdGlvbkNvbnRhaW5lcjp7ZGlzcGxheU5hbWU6IkxvY2FsaXphdGlvbkNvbnRhaW5lciJ9fSxWPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9sb2NhbGl6YXRpb25Db250YWluZXIvbG9jYWxpemF0aW9uQ29udGFpbmVyLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbZV0saW1wb3J0czpbTy5kZWZhdWx0XX0pLFc9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvbkNvbnRhaW5lci9sb2NhbGl6YXRpb25Db250YWluZXIuanN4Iixjb21wb25lbnRzOnosbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSk7KDAsRC5hZGRMb2NhbGVEYXRhKShbXS5jb25jYXQoKDAsRS5kZWZhdWx0KShNLmRlZmF1bHQpLCgwLEUuZGVmYXVsdCkoSS5kZWZhdWx0KSwoMCxFLmRlZmF1bHQpKE4uZGVmYXVsdCkpKTt2YXIgWT10LkxvY2FsaXphdGlvbkNvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFYoVyh0LGUpLGUpfX0oIkxvY2FsaXphdGlvbkNvbnRhaW5lciIpKChvPSgwLEwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2xhbmc6KDAsSC5sYW5nU2VsZWN0b3IpKGUpfX0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7KDAsZC5kZWZhdWx0KSh0aGlzLHQpO3ZhciByPSgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIHIubWVzc2FnZXM9e3J1OkIuZGVmYXVsdCxiZTpHLmRlZmF1bHR9LHdpbmRvdy5JbnRsP3Iuc3RhdGU9e3JlYWR5OiEwfTooci5zdGF0ZT17cmVhZHk6ITF9LG4uZSgwKS50aGVuKGZ1bmN0aW9uKGUpe24oIi4vbm9kZV9tb2R1bGVzL2ludGwvaW5kZXguanMiKSxuKCIuL25vZGVfbW9kdWxlcy9pbnRsL2xvY2FsZS1kYXRhL2pzb25wL2VuLmpzIiksbigiLi9ub2RlX21vZHVsZXMvaW50bC9sb2NhbGUtZGF0YS9qc29ucC9ydS5qcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2ludGwvbG9jYWxlLWRhdGEvanNvbnAvYmUuanMiKSxyLnNldFN0YXRlKHtyZWFkeTohMH0pfS5iaW5kKG51bGwsbikpLmNhdGNoKG4ub2UpKSxyfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWFkeT9PLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkludGxQcm92aWRlcix7bG9jYWxlOnRoaXMucHJvcHMubGFuZyxtZXNzYWdlczp0aGlzLm1lc3NhZ2VzW3RoaXMucHJvcHMubGFuZ119LE8uZGVmYXVsdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZHJlbix7a2V5OnRoaXMucHJvcHMubGFuZ30pKTpPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsKX19XSksdH0oTy5kZWZhdWx0LkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2xhbmc6eC5kZWZhdWx0LnN0cmluZyxjaGlsZHJlbjp4LmRlZmF1bHQubm9kZX0saS5kZWZhdWx0UHJvcHM9e2xhbmc6ImJlIixjaGlsZHJlbjpudWxsfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiTG9jYWxpemF0aW9uQ29udGFpbmVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbG9jYWxpemF0aW9uQ29udGFpbmVyL2xvY2FsaXphdGlvbkNvbnRhaW5lci5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvblN3aXRjaGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbG9jYWxpemF0aW9uU3dpdGNoZXIvbG9jYWxpemF0aW9uU3dpdGNoZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxvY2FsaXphdGlvblN3aXRjaGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Mb2NhbGl6YXRpb25Td2l0Y2hlcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9sb2NhbGl6YXRpb25Td2l0Y2hlci9sb2NhbGl6YXRpb25Td2l0Y2hlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsaXphdGlvblN3aXRjaGVyPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIikseT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksQT1yKFQpLEM9bigiLi9zcmMvY29udHJvbGxlcnMvbGFuZy9pbmRleC5qcyIpLE89bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvY2FsaXphdGlvblN3aXRjaGVyL2xvY2FsaXphdGlvblN3aXRjaGVyLnNjc3MiKSxTPXIoTyksUj1BLmRlZmF1bHQuYmluZChTLmRlZmF1bHQpLGo9dC5Mb2NhbGl6YXRpb25Td2l0Y2hlcj0obz0oMCxFLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntsYW5nOigwLEMubGFuZ1NlbGVjdG9yKShlKX19LHtzZXRMYW5nQWN0aW9uOkMuc2V0TGFuZ0FjdGlvbn0pKSgoYT1pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsbiksKDAsbS5kZWZhdWx0KSh0aGlzLChuLl9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KShuKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKG4sdCksKDAscC5kZWZhdWx0KShuLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6UigiY29udGFpbmVyIil9LGUuY3JlYXRlRWxlbWVudCh4LHtsYW5nOnRoaXMucHJvcHMubGFuZyxjdXJyZW50TGFuZzoiZW4iLHNldExhbmc6dGhpcy5wcm9wcy5zZXRMYW5nQWN0aW9ufSksZS5jcmVhdGVFbGVtZW50KHgse2xhbmc6dGhpcy5wcm9wcy5sYW5nLGN1cnJlbnRMYW5nOiJydSIsc2V0TGFuZzp0aGlzLnByb3BzLnNldExhbmdBY3Rpb259KSxlLmNyZWF0ZUVsZW1lbnQoeCx7bGFuZzp0aGlzLnByb3BzLmxhbmcsY3VycmVudExhbmc6ImJlIixzZXRMYW5nOnRoaXMucHJvcHMuc2V0TGFuZ0FjdGlvbn0pKX19XSksbn0oYi5QdXJlQ29tcG9uZW50KSxpLnByb3BUeXBlcz17bGFuZzp2LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsc2V0TGFuZ0FjdGlvbjp2LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxzPWEpKXx8cyx4PWZ1bmN0aW9uKHQpe3ZhciBuPXQubGFuZyxyPXQuY3VycmVudExhbmcsbz10LnNldExhbmc7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6Uih7YWN0aXZlOm49PT1yLGl0ZW06ITB9KSxvbkNsaWNrOmZ1bmN0aW9uKCl7byhyKX19LHIpfTt4LnByb3BUeXBlcz17bGFuZzp2LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsY3VycmVudExhbmc6di5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHNldExhbmc6di5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosIkxvY2FsaXphdGlvblN3aXRjaGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbG9jYWxpemF0aW9uU3dpdGNoZXIvbG9jYWxpemF0aW9uU3dpdGNoZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9sb2NhbGl6YXRpb25Td2l0Y2hlci9sb2NhbGl6YXRpb25Td2l0Y2hlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJMb2NhbGl6YXRpb25Td2l0Y2hlckl0ZW0iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9sb2NhbGl6YXRpb25Td2l0Y2hlci9sb2NhbGl6YXRpb25Td2l0Y2hlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbG9jYWxpemF0aW9uU3dpdGNoZXIvbG9jYWxpemF0aW9uU3dpdGNoZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2NvbnRhaW5lcjoibG9jYWxpemF0aW9uU3dpdGNoZXJfX2NvbnRhaW5lcl9fXzNrTnR5IixpdGVtOiJsb2NhbGl6YXRpb25Td2l0Y2hlcl9faXRlbV9fXzNjMG1fIixhY3RpdmU6ImxvY2FsaXphdGlvblN3aXRjaGVyX19hY3RpdmVfX19MNURqWiJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL2xvZ01lc3NhZ2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9sb2dNZXNzYWdlL2xvZ01lc3NhZ2UuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxvZ01lc3NhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxvZ01lc3NhZ2V9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbG9nTWVzc2FnZS9sb2dNZXNzYWdlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTG9nTWVzc2FnZT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9sb2dNZXNzYWdlL2xvZ01lc3NhZ2Uuc2NzcyIpLGQ9cihjKSxfPXUuZGVmYXVsdC5iaW5kKGQuZGVmYXVsdCkscD10LkxvZ01lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIG49dC5pdGVtO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJsb2ctbWVzc2FnZSIsKDAscy5kZWZhdWx0KSh7fSwibGV2ZWwtIituLmxldmVsLnRvTG93ZXJDYXNlKCksITApKX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygibWVzc2FnZSIpfSxuLm1lc3NhZ2UpKX07cC5wcm9wVHlwZXM9e2l0ZW06YS5kZWZhdWx0LnNoYXBlKHtsZXZlbDphLmRlZmF1bHQuc3RyaW5nLG1lc3NhZ2U6YS5kZWZhdWx0LnN0cmluZ30pLmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJMb2dNZXNzYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbG9nTWVzc2FnZS9sb2dNZXNzYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbG9nTWVzc2FnZS9sb2dNZXNzYWdlLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9sb2dNZXNzYWdlL2xvZ01lc3NhZ2Uuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJsb2ctbWVzc2FnZSI6ImxvZ01lc3NhZ2VfX2xvZy1tZXNzYWdlX19fMzFranYiLCJsZXZlbC1lcnJvciI6ImxvZ01lc3NhZ2VfX2xldmVsLWVycm9yX19fMUxheC0iLG1lc3NhZ2U6ImxvZ01lc3NhZ2VfX21lc3NhZ2VfX18yZWdJNyJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25WaWV3ZXIvbWFya2Rvd25WaWV3ZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1hcmtkb3duVmlld2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5NYXJrZG93blZpZXdlcn19KTt2YXIgbz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25FZGl0b3IvbWFya2Rvd25FZGl0b3IuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1hcmtkb3duRWRpdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5NYXJrZG93bkVkaXRvcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93bkVkaXRvci9tYXJrZG93bkVkaXRvci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1hcmtkb3duRWRpdG9yPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvc2ltcGxlbWRlL3NyYy9qcy9zaW1wbGVtZGUuanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGs9cihNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFA9cihJKTtuKCIuL25vZGVfbW9kdWxlcy9zaW1wbGVtZGUvZGlzdC9zaW1wbGVtZGUubWluLmNzcyIpO3ZhciBOPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93blZpZXdlci9tYXJrZG93blZpZXdlci5qc3giKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93bkVkaXRvci9tYXJrZG93bkVkaXRvci5zY3NzIiksRj1yKEgpLEI9e01hcmtkb3duRWRpdG9yOntkaXNwbGF5TmFtZToiTWFya2Rvd25FZGl0b3IifX0sVT0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25FZGl0b3IvbWFya2Rvd25FZGl0b3IuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksRz0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25FZGl0b3IvbWFya2Rvd25FZGl0b3IuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksej1QLmRlZmF1bHQuYmluZChGLmRlZmF1bHQpLFY9KDAsdy5kZWZpbmVNZXNzYWdlcykoe2hlYWRpbmcxOntpZDoiTWFya2Rvd25FZGl0b3IuaGVhZGluZzEiLGRlZmF1bHRNZXNzYWdlOiJCaWcgaGVhZGluZyJ9LGhlYWRpbmcyOntpZDoiTWFya2Rvd25FZGl0b3IuaGVhZGluZzIiLGRlZmF1bHRNZXNzYWdlOiJNZWRpdW0gaGVhZGluZyJ9LGhlYWRpbmczOntpZDoiTWFya2Rvd25FZGl0b3IuaGVhZGluZzMiLGRlZmF1bHRNZXNzYWdlOiJTbWFsbCBoZWFkaW5nIn0sY2xlYW5CbG9jazp7aWQ6Ik1hcmtkb3duRWRpdG9yLmNsZWFuQmxvY2siLGRlZmF1bHRNZXNzYWdlOiJDbGVhbiBibG9jayJ9LGJvbGQ6e2lkOiJNYXJrZG93bkVkaXRvci5ib2xkIixkZWZhdWx0TWVzc2FnZToiQm9sZCJ9LGl0YWxpYzp7aWQ6Ik1hcmtkb3duRWRpdG9yLml0YWxpYyIsZGVmYXVsdE1lc3NhZ2U6Ikl0YWxpYyJ9LHN0cmlrZXRocm91Z2g6e2lkOiJNYXJrZG93bkVkaXRvci5zdHJpa2V0aHJvdWdoIixkZWZhdWx0TWVzc2FnZToiU3RyaWtldGhyb3VnaCJ9LHVub3JkZXJlZExpc3Q6e2lkOiJNYXJrZG93bkVkaXRvci51bm9yZGVyZWRMaXN0IixkZWZhdWx0TWVzc2FnZToiR2VuZXJpYyBsaXN0In0sb3JkZXJlZExpc3Q6e2lkOiJNYXJrZG93bkVkaXRvci5vcmRlcmVkTGlzdCIsZGVmYXVsdE1lc3NhZ2U6Ik51bWJlcmVkIGxpc3QifSxpbWFnZTp7aWQ6Ik1hcmtkb3duRWRpdG9yLmltYWdlIixkZWZhdWx0TWVzc2FnZToiSW5zZXJ0IGltYWdlIn0sbGluazp7aWQ6Ik1hcmtkb3duRWRpdG9yLmxpbmsiLGRlZmF1bHRNZXNzYWdlOiJDcmVhdGUgbGluayJ9LHF1b3RlOntpZDoiTWFya2Rvd25FZGl0b3IucXVvdGUiLGRlZmF1bHRNZXNzYWdlOiJRdW90ZSJ9LGNvZGU6e2lkOiJNYXJrZG93bkVkaXRvci5jb2RlIixkZWZhdWx0TWVzc2FnZToiQ29kZSJ9LHByZXZpZXc6e2lkOiJNYXJrZG93bkVkaXRvci5wcmV2aWV3IixkZWZhdWx0TWVzc2FnZToiVG9nZ2xlIHByZXZpZXcifX0pLFc9dC5NYXJrZG93bkVkaXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoRyh0LGUpLGUpfX0oIk1hcmtkb3duRWRpdG9yIikoKG89KDAsUi5kZWZhdWx0KSgpLCgwLHcuaW5qZWN0SW50bCkocz1vKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25DaGFuZ2VIYW5kbGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYW5nZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19vbkNoYW5nZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlO3RoaXMuaG9sZGVyLnZhbHVlPXRoaXMucHJvcHMudmFsdWUsdGhpcy5zaW1wbGVNREU9bmV3IEQuZGVmYXVsdCh7ZWxlbWVudDp0aGlzLmhvbGRlcixzdGF0dXM6ITEsYXV0b0Rvd25sb2FkRm9udEF3ZXNvbWU6ITEsdG9vbGJhcjpbe25hbWU6ImhlYWRpbmctMSIsYWN0aW9uOkQuZGVmYXVsdC50b2dnbGVIZWFkaW5nMSxjbGFzc05hbWU6Imljb24taGVhZGVyLTEiLHRpdGxlOmUoVi5oZWFkaW5nMSl9LHtuYW1lOiJoZWFkaW5nLTIiLGFjdGlvbjpELmRlZmF1bHQudG9nZ2xlSGVhZGluZzIsY2xhc3NOYW1lOiJpY29uLWhlYWRlci0yIix0aXRsZTplKFYuaGVhZGluZzIpfSx7bmFtZToiaGVhZGluZy0zIixhY3Rpb246RC5kZWZhdWx0LnRvZ2dsZUhlYWRpbmczLGNsYXNzTmFtZToiaWNvbi1oZWFkZXItMyIsdGl0bGU6ZShWLmhlYWRpbmczKX0se25hbWU6ImNsZWFuLWJsb2NrIixhY3Rpb246RC5kZWZhdWx0LmNsZWFuQmxvY2ssY2xhc3NOYW1lOiJpY29uLWNsZWFuLWJsb2NrIix0aXRsZTplKFYuY2xlYW5CbG9jayl9LCJ8Iix7bmFtZToiYm9sZCIsYWN0aW9uOkQuZGVmYXVsdC50b2dnbGVCb2xkLGNsYXNzTmFtZToiaWNvbi1ib2xkIix0aXRsZTplKFYuYm9sZCl9LHtuYW1lOiJpdGFsaWMiLGFjdGlvbjpELmRlZmF1bHQudG9nZ2xlSXRhbGljLGNsYXNzTmFtZToiaWNvbi1pdGFsaWMiLHRpdGxlOmUoVi5pdGFsaWMpfSx7bmFtZToic3RyaWtldGhyb3VnaCIsYWN0aW9uOkQuZGVmYXVsdC50b2dnbGVTdHJpa2V0aHJvdWdoLGNsYXNzTmFtZToiaWNvbi1zdHJpa2V0aHJvdWdoIix0aXRsZTplKFYuc3RyaWtldGhyb3VnaCl9LCJ8Iix7bmFtZToidW5vcmRlcmVkLWxpc3QiLGFjdGlvbjpELmRlZmF1bHQudG9nZ2xlVW5vcmRlcmVkTGlzdCxjbGFzc05hbWU6Imljb24tdW5vcmRlcmVkLWxpc3QiLHRpdGxlOmUoVi51bm9yZGVyZWRMaXN0KX0se25hbWU6Im9yZGVyZWQtbGlzdCIsYWN0aW9uOkQuZGVmYXVsdC50b2dnbGVPcmRlcmVkTGlzdCxjbGFzc05hbWU6Imljb24tb3JkZXJlZC1saXN0Iix0aXRsZTplKFYub3JkZXJlZExpc3QpfSwifCIse25hbWU6ImltYWdlIixhY3Rpb246RC5kZWZhdWx0LmRyYXdJbWFnZSxjbGFzc05hbWU6Imljb24taW1hZ2UiLHRpdGxlOmUoVi5pbWFnZSl9LHtuYW1lOiJsaW5rIixhY3Rpb246RC5kZWZhdWx0LmRyYXdMaW5rLGNsYXNzTmFtZToiaWNvbi1saW5rIix0aXRsZTplKFYubGluayl9LCJ8Iix7bmFtZToicXVvdGUiLGFjdGlvbjpELmRlZmF1bHQudG9nZ2xlQmxvY2txdW90ZSxjbGFzc05hbWU6Imljb24tcXVvdGUiLHRpdGxlOmUoVi5xdW90ZSl9LHtuYW1lOiJjb2RlIixhY3Rpb246RC5kZWZhdWx0LnRvZ2dsZUNvZGVCbG9jayxjbGFzc05hbWU6Imljb24tY29kZSIsdGl0bGU6ZShWLmNvZGUpfSwifCIse25hbWU6InByZXZpZXciLGFjdGlvbjpELmRlZmF1bHQudG9nZ2xlUHJldmlldyxjbGFzc05hbWU6Imljb24tcHJldmlldyBuby1kaXNhYmxlIix0aXRsZTplKFYucHJldmlldyl9XSxwbGFjZWhvbGRlcjp0aGlzLnByb3BzLnBsYWNlaG9sZGVyfHwiIixzcGVsbENoZWNrZXI6ITEsYmxvY2tTdHlsZXM6e2JvbGQ6IioqIixpdGFsaWM6IioiLGNvZGU6ImAifSxwcmV2aWV3UmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRlZmF1bHQucmVuZGVyVG9TdGF0aWNNYXJrdXAoQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5NYXJrZG93blZpZXdlcix7dmFsdWU6ZX0pKX19KSx0aGlzLnNpbXBsZU1ERS5jb2RlbWlycm9yLm9uKCJjaGFuZ2UiLHRoaXMub25DaGFuZ2VIYW5kbGVyKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2ltcGxlTURFLmNvZGVtaXJyb3Iub2ZmKCJjaGFuZ2UiLHRoaXMub25DaGFuZ2VIYW5kbGVyKX19LHtrZXk6Il9fb25DaGFuZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMuc2ltcGxlTURFLnZhbHVlKCkpLHRoaXMucHJvcHMub25DaGFuZ2VFdmVudEluZm8mJnRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLm9uQ2hhbmdlRXZlbnRJbmZvKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooIm1hcmtkb3duLWVkaXRvciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiLHtyZWY6ZnVuY3Rpb24odCl7ZS5ob2xkZXI9dH0sdmFsdWU6dGhpcy5wcm9wcy52YWx1ZSxvbkNoYW5nZTp0aGlzLnByb3BzLm9uQ2hhbmdlfSkpfX1dKSx0fShBLmRlZmF1bHQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17dmFsdWU6ay5kZWZhdWx0LnN0cmluZyxwbGFjZWhvbGRlcjprLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlOmsuZGVmYXVsdC5mdW5jLGludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCxvbkNoYW5nZUV2ZW50SW5mbzprLmRlZmF1bHQub2JqZWN0LHRyYWNraW5nOmsuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDprLmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6ay5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxpLmRlZmF1bHRQcm9wcz17dmFsdWU6IiIscGxhY2Vob2xkZXI6IiIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uQ2hhbmdlRXZlbnRJbmZvOnt9fSxzPWEpKXx8cyl8fHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiTWFya2Rvd25FZGl0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93bkVkaXRvci9tYXJrZG93bkVkaXRvci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL21hcmtkb3duRWRpdG9yL21hcmtkb3duRWRpdG9yLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsInRvb2xiYXJUaXRsZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93bkVkaXRvci9tYXJrZG93bkVkaXRvci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93bkVkaXRvci9tYXJrZG93bkVkaXRvci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im1hcmtkb3duLWVkaXRvciI6Im1hcmtkb3duRWRpdG9yX19tYXJrZG93bi1lZGl0b3JfX18xUFZMOSIsZm9jdXNlZDoibWFya2Rvd25FZGl0b3JfX2ZvY3VzZWRfX18yTnF0VSJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL21hcmtkb3duVmlld2VyL21hcmtkb3duVmlld2VyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWFya2Rvd25WaWV3ZXI9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25WaWV3ZXIvbWFya2Rvd25WaWV3ZXIuc2NzcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9zaW5nbGV0b25NYXJrZG93bk9iamVjdC5qcyIpLE09e01hcmtkb3duVmlld2VyOntkaXNwbGF5TmFtZToiTWFya2Rvd25WaWV3ZXIifX0saz0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25WaWV3ZXIvbWFya2Rvd25WaWV3ZXIuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltlXSxpbXBvcnRzOlt2LmRlZmF1bHRdfSksST0oMCxFLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vbWFya2Rvd25WaWV3ZXIvbWFya2Rvd25WaWV3ZXIuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W3YuZGVmYXVsdCxnLmRlZmF1bHRdfSksUD14LmRlZmF1bHQuYmluZChELmRlZmF1bHQpLE49dC5NYXJrZG93blZpZXdlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsoSSh0LGUpLGUpfX0oIk1hcmtkb3duVmlld2VyIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeygwLHUuZGVmYXVsdCkodGhpcyx0KTt2YXIgbj0oMCxwLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBuLnVwZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX191cGRhdGVFbGVtZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5lc2NhcGVIdG1sPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19lc2NhcGVIdG1sX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLmluZGVudFNwYWNlcz1mdW5jdGlvbigpe3JldHVybiBuLl9faW5kZW50U3BhY2VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLnNpbXBsZU1ERT13LlNpbmdsZXRvbk1hcmtkb3duT2JqZWN0LmdldEluc3RhbmNlKCksbn1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX2luZGVudFNwYWNlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5kZW50U3BhY2VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19lc2NhcGVIdG1sX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19lc2NhcGVIdG1sX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVFbGVtZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlRWxlbWVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUVsZW1lbnRzKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVFbGVtZW50cygpfX0se2tleToiX191cGRhdGVFbGVtZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiaW1nIikuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm9ubG9hZD1mdW5jdGlvbigpe2UucHJvcHMub25SZXNpemUoKX19KSx0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJhIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX2JsYW5rIil9KSx0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJjb2RlIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlubmVySFRNTD1lLnRleHRDb250ZW50fSl9fSx7a2V5OiJfX2VzY2FwZUh0bWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpfX0se2tleToiX19pbmRlbnRTcGFjZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXiArL2dtLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyAvZywiJm5ic3A7Iil9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKHQpe2UuY29udGFpbmVyPXR9LGNsYXNzTmFtZTpQKCJtYXJrZG93bi12aWV3ZXIiKX0sKDAsTy5kZWZhdWx0KSh0aGlzLnNpbXBsZU1ERS5tYXJrZG93bih0aGlzLmluZGVudFNwYWNlcyh0aGlzLmVzY2FwZUh0bWwodGhpcy5wcm9wcy52YWx1ZSkpLnJlcGxhY2UoIl8iLCImIzk1OyIpKSkpfX1dKSx0fSh5LkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3ZhbHVlOlIuZGVmYXVsdC5zdHJpbmcsb25SZXNpemU6Ui5kZWZhdWx0LmZ1bmN9LG8uZGVmYXVsdFByb3BzPXt2YWx1ZToiIixvblJlc2l6ZTpmdW5jdGlvbigpe319LHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiTWFya2Rvd25WaWV3ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9tYXJrZG93blZpZXdlci9tYXJrZG93blZpZXdlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL21hcmtkb3duVmlld2VyL21hcmtkb3duVmlld2VyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL21hcmtkb3duVmlld2VyL21hcmtkb3duVmlld2VyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibWFya2Rvd24tdmlld2VyIjoibWFya2Rvd25WaWV3ZXJfX21hcmtkb3duLXZpZXdlcl9fXzEzb3hxIixDb2RlTWlycm9yOiJtYXJrZG93blZpZXdlcl9fQ29kZU1pcnJvcl9fXzFsX3pMIiwiQ29kZU1pcnJvci1saW5lcyI6Im1hcmtkb3duVmlld2VyX19Db2RlTWlycm9yLWxpbmVzX19fM1JvVHEiLCJjbS1oZWFkZXItMSI6Im1hcmtkb3duVmlld2VyX19jbS1oZWFkZXItMV9fXzN2MUM0IiwiY20taGVhZGVyLTIiOiJtYXJrZG93blZpZXdlcl9fY20taGVhZGVyLTJfX18yTkxxWiIsImNtLWhlYWRlci0zIjoibWFya2Rvd25WaWV3ZXJfX2NtLWhlYWRlci0zX19fMmp3NkwiLCJjbS1oZWFkZXIiOiJtYXJrZG93blZpZXdlcl9fY20taGVhZGVyX19fM01LMUYifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9zaW5nbGV0b25NYXJrZG93bk9iamVjdC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TaW5nbGV0b25NYXJrZG93bk9iamVjdD12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvc2ltcGxlbWRlL3NyYy9qcy9zaW1wbGVtZGUuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1udWxsLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5pbm5lckhUTUw9Ijx0ZXh0YXJlYT48L3RleHRhcmVhPiI7dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gc3x8KHM9bmV3IG8uZGVmYXVsdCh7YXV0b0Rvd25sb2FkRm9udEF3ZXNvbWU6ITEsZWxlbWVudDppLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdLHNwZWxsQ2hlY2tlcjohMSxibG9ja1N0eWxlczp7Ym9sZDoiKioiLGl0YWxpYzoiKiIsY29kZToiYCJ9fSkpLHN9LGw9dC5TaW5nbGV0b25NYXJrZG93bk9iamVjdD17Z2V0SW5zdGFuY2U6YX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlNpbmdsZXRvbk1hcmtkb3duT2JqZWN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vc2luZ2xldG9uTWFya2Rvd25PYmplY3QuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJpbnN0YW5jZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21hcmtkb3duL3NpbmdsZXRvbk1hcmtkb3duT2JqZWN0LmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiZWwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9zaW5nbGV0b25NYXJrZG93bk9iamVjdC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImdldEluc3RhbmNlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbWFya2Rvd24vc2luZ2xldG9uTWFya2Rvd25PYmplY3QuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL3dpdGhNb2RhbC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ3aXRoTW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLndpdGhNb2RhbH19KTt2YXIgbz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1vZGFsQ29udGFpbmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Nb2RhbENvbnRhaW5lcn19KTt2YXIgcz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxMYXlvdXQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1vZGFsTGF5b3V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5Nb2RhbExheW91dH19KTt2YXIgaT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxDb250ZW50L2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1vZGFsQ29udGVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuTW9kYWxDb250ZW50fX0pO3ZhciBhPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEhlYWRlci9tb2RhbEhlYWRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTW9kYWxIZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLk1vZGFsSGVhZGVyfX0pO3ZhciBsPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZvb3Rlci9tb2RhbEZvb3Rlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTW9kYWxGb290ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLk1vZGFsRm9vdGVyfX0pO3ZhciB1PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZpZWxkL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1vZGFsRmllbGQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1Lk1vZGFsRmllbGR9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxDb250YWluZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Nb2RhbENvbnRhaW5lcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLHg9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPXIoTCksdz17TW9kYWxDb250YWluZXI6e2Rpc3BsYXlOYW1lOiJNb2RhbENvbnRhaW5lciJ9fSxNPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbENvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6dyxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxrPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbENvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6dyxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxJPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RhbC1yb290IiksUD10Lk1vZGFsQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTShrKHQsZSksZSl9fSgiTW9kYWxDb250YWluZXIiKSgobz0oMCxqLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVNb2RhbDooMCx4LmFjdGl2ZU1vZGFsU2VsZWN0b3IpKGUpfX0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAseC5nZXRNb2RhbCkodGhpcy5wcm9wcy5hY3RpdmVNb2RhbCk7cmV0dXJuIFIuZGVmYXVsdC5jcmVhdGVQb3J0YWwoZT9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLHtkYXRhOnRoaXMucHJvcHMuYWN0aXZlTW9kYWwuZGF0YX0pOm51bGwsSSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17YWN0aXZlTW9kYWw6RC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2FjdGl2ZU1vZGFsOm51bGx9LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiTW9kYWxDb250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbENvbnRhaW5lci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihJLCJNb2RhbFJvb3QiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbENvbnRhaW5lci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbENvbnRlbnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbENvbnRlbnQvbW9kYWxDb250ZW50LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNb2RhbENvbnRlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk1vZGFsQ29udGVudH19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbENvbnRlbnQvbW9kYWxDb250ZW50LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Nb2RhbENvbnRlbnQ9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbENvbnRlbnQvbW9kYWxDb250ZW50LnNjc3MiKSxkPXIoYyksXz11LmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5Nb2RhbENvbnRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJtb2RhbC1jb250ZW50Iil9LHQpfTtwLnByb3BUeXBlcz17Y2hpbGRyZW46YS5kZWZhdWx0Lm5vZGV9LHAuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiTW9kYWxDb250ZW50IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxDb250ZW50L21vZGFsQ29udGVudC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsQ29udGVudC9tb2RhbENvbnRlbnQuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsQ29udGVudC9tb2RhbENvbnRlbnQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2RhbC1jb250ZW50IjoibW9kYWxDb250ZW50X19tb2RhbC1jb250ZW50X19fMVNpQTMifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZpZWxkL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGaWVsZC9tb2RhbEZpZWxkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNb2RhbEZpZWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Nb2RhbEZpZWxkfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsRmllbGQvbW9kYWxGaWVsZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1vZGFsRmllbGQ9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGaWVsZC9tb2RhbEZpZWxkLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5Nb2RhbEZpZWxkPWZ1bmN0aW9uKHQpe3ZhciBuPXQuY2xhc3NOYW1lLHI9dC5sYWJlbCxvPXQuY2hpbGRyZW4scz10LnRpcCxpPXQubGFiZWxXaWR0aDtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YygibW9kYWwtZmllbGQiLG4pfSxyJiZlLmNyZWF0ZUVsZW1lbnQocCx7bGFiZWw6cixsYWJlbFdpZHRoOml9KSxlLmNyZWF0ZUVsZW1lbnQoZixudWxsLG8scyYmZS5jcmVhdGVFbGVtZW50KF8se3RpcDpzfSkpKX07ZC5wcm9wVHlwZXM9e2NsYXNzTmFtZTpzLmRlZmF1bHQuc3RyaW5nLGxhYmVsOnMuZGVmYXVsdC5zdHJpbmcsdGlwOnMuZGVmYXVsdC5zdHJpbmcsY2hpbGRyZW46cy5kZWZhdWx0Lm5vZGUsbGFiZWxXaWR0aDpzLmRlZmF1bHQubnVtYmVyfSxkLmRlZmF1bHRQcm9wcz17Y2xhc3NOYW1lOiIiLGxhYmVsOiIiLHRpcDoiIixjaGlsZHJlbjpudWxsLGxhYmVsV2lkdGg6bnVsbH07dmFyIF89ZnVuY3Rpb24odCl7dmFyIG49dC50aXA7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoIm1vZGFsLWZpZWxkLXRpcCIpfSxuKX07Xy5wcm9wVHlwZXM9e3RpcDpzLmRlZmF1bHQuc3RyaW5nfSxfLmRlZmF1bHRQcm9wcz17dGlwOiIifTt2YXIgcD1mdW5jdGlvbih0KXt2YXIgbj10LmxhYmVsLHI9dC5sYWJlbFdpZHRoO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpjKCJtb2RhbC1maWVsZC1sYWJlbCIseyJuby1taW4taGVpZ2h0IjoiICI9PT1ufSksc3R5bGU6e3dpZHRoOnJ8fCJ1bnNldCJ9fSxuKX07cC5wcm9wVHlwZXM9e2xhYmVsOnMuZGVmYXVsdC5zdHJpbmcsbGFiZWxXaWR0aDpzLmRlZmF1bHQubnVtYmVyfSxwLmRlZmF1bHRQcm9wcz17bGFiZWw6IiIsbGFiZWxXaWR0aDpudWxsfTt2YXIgZj1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpjKCJtb2RhbC1maWVsZC1jb250ZW50Iil9LG4pfTtmLnByb3BUeXBlcz17Y2hpbGRyZW46cy5kZWZhdWx0Lm5vZGV9LGYuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiTW9kYWxGaWVsZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsRmllbGQvbW9kYWxGaWVsZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsRmllbGQvbW9kYWxGaWVsZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJUaXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZpZWxkL21vZGFsRmllbGQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiTGFiZWwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZpZWxkL21vZGFsRmllbGQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiQ29udGVudCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsRmllbGQvbW9kYWxGaWVsZC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGaWVsZC9tb2RhbEZpZWxkLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibW9kYWwtZmllbGQiOiJtb2RhbEZpZWxkX19tb2RhbC1maWVsZF9fXzJxWWZFIiwibW9kYWwtZmllbGQtbGFiZWwiOiJtb2RhbEZpZWxkX19tb2RhbC1maWVsZC1sYWJlbF9fXzJha1BiIiwibm8tbWluLWhlaWdodCI6Im1vZGFsRmllbGRfX25vLW1pbi1oZWlnaHRfX18zVnFMMiIsIm1vZGFsLWZpZWxkLXRpcCI6Im1vZGFsRmllbGRfX21vZGFsLWZpZWxkLXRpcF9fX2NoaHkyIiwibW9kYWwtZmllbGQtY29udGVudCI6Im1vZGFsRmllbGRfX21vZGFsLWZpZWxkLWNvbnRlbnRfX18zSGpKWCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsRm9vdGVyL21vZGFsRm9vdGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTW9kYWxGb290ZXI9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9iaWdCdXR0b24vaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0Q2hlY2tib3gvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9pbWcvZXJyb3ItaW5saW5lLnN2ZyIpLEk9cihrKSxQPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZvb3Rlci9tb2RhbEZvb3Rlci5zY3NzIiksTj1yKFApLEg9e01vZGFsRm9vdGVyOntkaXNwbGF5TmFtZToiTW9kYWxGb290ZXIifX0sRj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGb290ZXIvbW9kYWxGb290ZXIuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksQj0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGb290ZXIvbW9kYWxGb290ZXIuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksVT14LmRlZmF1bHQuYmluZChOLmRlZmF1bHQpLEc9dC5Nb2RhbEZvb3Rlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEYoQih0LGUpLGUpfX0oIk1vZGFsRm9vdGVyIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5jbG9zZUNvbmZpcm1DaGFuZ2VIYW5kbGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jbG9zZUNvbmZpcm1DaGFuZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fY2xvc2VDb25maXJtQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2xvc2VDb25maXJtQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2xvc2VDb25maXJtQ2hhbmdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY2xvc2VDb25maXJtZWQ7dGhpcy5wcm9wcy5vbkNsb3NlQ29uZmlybSghZSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUud2FybmluZ01lc3NhZ2Usbj1lLm9rQnV0dG9uLHI9ZS5jYW5jZWxCdXR0b24sbz1lLmN1c3RvbUJ1dHRvbixzPWUuY2xvc2VIYW5kbGVyLGk9ZS5vbkNsaWNrT2ssbD1lLnNob3dDb25maXJtYXRpb24sdT1lLmNvbmZpcm1hdGlvbk1lc3NhZ2UsYz1lLmNvbmZpcm1hdGlvbldhcm5pbmcsZD1lLmNvbmZpcm1hdGlvbldhcm5pbmdDbGFzc05hbWUsXz1lLmNsb3NlQ29uZmlybWVkLHA9ZS5jb25maXJtV2l0aENoZWNrYm94O3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoIm1vZGFsLWZvb3RlciIpfSxsJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImNvbmZpcm1hdGlvbi1ibG9jayIpfSxjJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoIndhcm5pbmctYmxvY2std3JhcCIsZCl9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgid2FybmluZy1ibG9jayIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTpVKCJ3YXJuaW5nLWljb24iKX0sKDAsRC5kZWZhdWx0KShJLmRlZmF1bHQpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpVKCJ3YXJuaW5nLW1lc3NhZ2UiKX0sYykpKSxwJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLklucHV0Q2hlY2tib3gse3ZhbHVlOl8sb25DaGFuZ2U6dGhpcy5jbG9zZUNvbmZpcm1DaGFuZ2VIYW5kbGVyfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpVKCJjb25maXJtYXRpb24tbGFiZWwiKX0sdSkpKSx0JiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoIndhcm5pbmctYmxvY2siKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImkiLHtjbGFzc05hbWU6VSgid2FybmluZy1pY29uIil9LCgwLEQuZGVmYXVsdCkoSS5kZWZhdWx0KSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VSgid2FybmluZy1tZXNzYWdlIil9LHQpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImJ1dHRvbnMtYmxvY2siKX0sciYmQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJidXR0b24tY29udGFpbmVyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuQmlnQnV0dG9uLHtjb2xvcjoiZ3JheS02MCIsb25DbGljazpzLGRpc2FibGVkOnIuZGlzYWJsZWR9LHIudGV4dCkpLG4mJkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgiYnV0dG9uLWNvbnRhaW5lciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LkJpZ0J1dHRvbix7Y29sb3I6bi5kYW5nZXI/InRvbWF0byI6ImJvb2dlciIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuLm9uQ2xpY2soaSl9LGRpc2FibGVkOm4uZGlzYWJsZWR9LG4udGV4dCkpLG8mJkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgiYnV0dG9uLWNvbnRhaW5lciIse2xlZnQ6by5jb21wb25lbnQ/by5sZWZ0Om8ucHJvcHMubGVmdH0pfSxvLmNvbXBvbmVudD9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudChvLmNvbXBvbmVudCwoMCxhLmRlZmF1bHQpKHt9LG8uYnV0dG9uUHJvcHMse29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gby5vbkNsaWNrKGkpfX0pKTpvKSkpfX1dKSx0fShULkNvbXBvbmVudCksby5wcm9wVHlwZXM9e3dhcm5pbmdNZXNzYWdlOlIuZGVmYXVsdC5zdHJpbmcsb2tCdXR0b246Ui5kZWZhdWx0LnNoYXBlKHt0ZXh0OlIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkaXNhYmxlZDpSLmRlZmF1bHQuYm9vbCxkYW5nZXI6Ui5kZWZhdWx0LmJvb2x9KSxjYW5jZWxCdXR0b246Ui5kZWZhdWx0LnNoYXBlKHt0ZXh0OlIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0pLGN1c3RvbUJ1dHRvbjpSLmRlZmF1bHQub25lT2ZUeXBlKFtSLmRlZmF1bHQubm9kZSxSLmRlZmF1bHQuc2hhcGUoe29uQ2xpY2s6Ui5kZWZhdWx0LmZ1bmMsY29tcG9uZW50OlIuZGVmYXVsdC5mdW5jLGJ1dHRvblByb3BzOlIuZGVmYXVsdC5vYmplY3QsbGVmdDpSLmRlZmF1bHQuYm9vbH0pXSksb25DbGlja09rOlIuZGVmYXVsdC5mdW5jLGNsb3NlSGFuZGxlcjpSLmRlZmF1bHQuZnVuYyxvbkNsb3NlQ29uZmlybTpSLmRlZmF1bHQuZnVuYyxzaG93Q29uZmlybWF0aW9uOlIuZGVmYXVsdC5ib29sLGNsb3NlQ29uZmlybWVkOlIuZGVmYXVsdC5ib29sLGNvbmZpcm1hdGlvbk1lc3NhZ2U6Ui5kZWZhdWx0LnN0cmluZyxjb25maXJtYXRpb25XYXJuaW5nOlIuZGVmYXVsdC5zdHJpbmcsY29uZmlybWF0aW9uV2FybmluZ0NsYXNzTmFtZTpSLmRlZmF1bHQuc3RyaW5nLGNvbmZpcm1XaXRoQ2hlY2tib3g6Ui5kZWZhdWx0LmJvb2x9LG8uZGVmYXVsdFByb3BzPXt3YXJuaW5nTWVzc2FnZToiIixva0J1dHRvbjpudWxsLGNhbmNlbEJ1dHRvbjpudWxsLGN1c3RvbUJ1dHRvbjpudWxsLG9uQ2xpY2tPazpmdW5jdGlvbigpe30sY2xvc2VIYW5kbGVyOmZ1bmN0aW9uKCl7fSxvbkNsb3NlQ29uZmlybTpmdW5jdGlvbigpe30sc2hvd0NvbmZpcm1hdGlvbjohMSxjbG9zZUNvbmZpcm1lZDohMSxjb25maXJtYXRpb25NZXNzYWdlOiIiLGNvbmZpcm1hdGlvbldhcm5pbmc6IiIsY29uZmlybWF0aW9uV2FybmluZ0NsYXNzTmFtZToiIixjb25maXJtV2l0aENoZWNrYm94OiExfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIk1vZGFsRm9vdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxGb290ZXIvbW9kYWxGb290ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZvb3Rlci9tb2RhbEZvb3Rlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEZvb3Rlci9tb2RhbEZvb3Rlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im1vZGFsLWZvb3RlciI6Im1vZGFsRm9vdGVyX19tb2RhbC1mb290ZXJfX18zaTgzdiIsIndhcm5pbmctYmxvY2std3JhcCI6Im1vZGFsRm9vdGVyX193YXJuaW5nLWJsb2NrLXdyYXBfX18yWnd5ViIsIndhcm5pbmctYmxvY2siOiJtb2RhbEZvb3Rlcl9fd2FybmluZy1ibG9ja19fXzI4V0R0Iiwid2FybmluZy1pY29uIjoibW9kYWxGb290ZXJfX3dhcm5pbmctaWNvbl9fXzFGUFBHIiwid2FybmluZy1tZXNzYWdlIjoibW9kYWxGb290ZXJfX3dhcm5pbmctbWVzc2FnZV9fXzFpX1JYIiwiYnV0dG9ucy1ibG9jayI6Im1vZGFsRm9vdGVyX19idXR0b25zLWJsb2NrX19fMTRuUkwiLGxlZnQ6Im1vZGFsRm9vdGVyX19sZWZ0X19fMS1JdmoiLCJidXR0b24tY29udGFpbmVyIjoibW9kYWxGb290ZXJfX2J1dHRvbi1jb250YWluZXJfX18yUlhGUiIsInBlcm1pc3Npb24tZm9vdGVyIjoibW9kYWxGb290ZXJfX3Blcm1pc3Npb24tZm9vdGVyX19fMVhNWlciLCJjb25maXJtYXRpb24tYmxvY2siOiJtb2RhbEZvb3Rlcl9fY29uZmlybWF0aW9uLWJsb2NrX19fMkNiVUsiLCJjb25maXJtYXRpb24tbGFiZWwiOiJtb2RhbEZvb3Rlcl9fY29uZmlybWF0aW9uLWxhYmVsX19fM1ZqTGQifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEhlYWRlci9tb2RhbEhlYWRlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1vZGFsSGVhZGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vc3JjL2NvbW1vbi9pbWcvY3Jvc3MtaWNvbi1pbmxpbmUuc3ZnIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEhlYWRlci9tb2RhbEhlYWRlci5zY3NzIikscD1yKF8pLGY9ZC5kZWZhdWx0LmJpbmQocC5kZWZhdWx0KSxtPXQuTW9kYWxIZWFkZXI9ZnVuY3Rpb24odCl7dmFyIG49dC50ZXh0LHI9dC5vbkNsb3NlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpmKCJtb2RhbC1oZWFkZXIiKX0sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmYoIm1vZGFsLXRpdGxlIil9LG4pLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmYoImNsb3NlLW1vZGFsLWljb24iKSxvbkNsaWNrOnJ9LCgwLHMuZGVmYXVsdCkoYS5kZWZhdWx0KSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Zigic2VwYXJhdG9yIil9KSl9O20ucHJvcFR5cGVzPXt0ZXh0OnUuZGVmYXVsdC5vbmVPZlR5cGUoW3UuZGVmYXVsdC5zdHJpbmcsdS5kZWZhdWx0Lm5vZGVdKSxvbkNsb3NlOnUuZGVmYXVsdC5mdW5jfSxtLmRlZmF1bHRQcm9wcz17dGV4dDoiIixvbkNsb3NlOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIk1vZGFsSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxIZWFkZXIvbW9kYWxIZWFkZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbEhlYWRlci9tb2RhbEhlYWRlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxIZWFkZXIvbW9kYWxIZWFkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2RhbC1oZWFkZXIiOiJtb2RhbEhlYWRlcl9fbW9kYWwtaGVhZGVyX19fYnN0dkoiLCJtb2RhbC10aXRsZSI6Im1vZGFsSGVhZGVyX19tb2RhbC10aXRsZV9fXzJwaDlHIiwiY2xvc2UtbW9kYWwtaWNvbiI6Im1vZGFsSGVhZGVyX19jbG9zZS1tb2RhbC1pY29uX19fMXFlTmwiLHNlcGFyYXRvcjoibW9kYWxIZWFkZXJfX3NlcGFyYXRvcl9fXzFTS0F5In19LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxMYXlvdXQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Nb2RhbExheW91dD12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvaW5kZXguanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvaW5kZXguanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9pbmRleC5qcyIpLEk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFA9cihJKSxOPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEg9cihOKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsTGF5b3V0LnNjc3MiKSxVPXIoQiksRz17TW9kYWxMYXlvdXQ6e2Rpc3BsYXlOYW1lOiJNb2RhbExheW91dCJ9fSx6PSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbExheW91dC5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxWPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9tb2RhbExheW91dC9tb2RhbExheW91dC5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxXPUguZGVmYXVsdC5iaW5kKFUuZGVmYXVsdCksWT10Lk1vZGFsTGF5b3V0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geihWKHQsZSksZSl9fSgiTW9kYWxMYXlvdXQiKSgobz0oMCxNLmNvbm5lY3QpKG51bGwse2hpZGVNb2RhbEFjdGlvbjprLmhpZGVNb2RhbEFjdGlvbn0pLHM9KDAsTC5kZWZhdWx0KSgpLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGYuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsYi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e3Nob3duOiExLGNsb3NlQ29uZmlybWVkOiExLHNob3dDb25maXJtYXRpb246ITF9LHIub25LZXlkb3duPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbktleWRvd25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbGlja01vZGFsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbG9zZUNvbmZpcm09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xvc2VDb25maXJtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2xpY2tDYW5jZWxCdXR0b249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbGlja0Nsb3NlSWNvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jbG9zZU1vZGFsV2l0aE9rPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jbG9zZU1vZGFsV2l0aE9rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmNsb3NlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2Nsb3NlTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY2xvc2VNb2RhbFdpdGhDb25maXJtYXRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2Nsb3NlTW9kYWxXaXRoQ29uZmlybWF0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fY2xvc2VNb2RhbFdpdGhDb25maXJtYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Nsb3NlTW9kYWxXaXRoQ29uZmlybWF0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jbG9zZU1vZGFsV2l0aE9rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jbG9zZU1vZGFsV2l0aE9rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrQ2xvc2VJY29uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrQ2xvc2VJY29uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrQ2FuY2VsQnV0dG9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrQ2FuY2VsQnV0dG9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsb3NlQ29uZmlybV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbG9zZUNvbmZpcm1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja01vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbktleWRvd25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uS2V5ZG93bl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMub25LZXlkb3duLCExKSx0aGlzLm9uTW91bnQoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMub25LZXlkb3duLCExKX19LHtrZXk6Im9uTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7c2hvd246ITB9KX19LHtrZXk6Il9fb25LZXlkb3duX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbktleWRvd25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uS2V5ZG93bl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25LZXlkb3duX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbktleWRvd25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQub2tCdXR0b24scj10LmN1c3RvbUJ1dHRvbjsyNz09PWUua2V5Q29kZSYmdGhpcy5jbG9zZU1vZGFsKCksKGUuY3RybEtleSYmMTM9PT1lLmtleUNvZGV8fGUubWV0YUtleSYmMTM9PT1lLmtleUNvZGUpJiYobiYmbi5vbkNsaWNrJiZuLm9uQ2xpY2sodGhpcy5jbG9zZU1vZGFsV2l0aE9rKXx8ciYmci5vbkNsaWNrJiZyLm9uQ2xpY2sodGhpcy5jbG9zZU1vZGFsV2l0aE9rKSl9fSx7a2V5OiJfX29uQ2xpY2tNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja01vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja01vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuY2xvc2VDb25maXJtYXRpb247dGhpcy5tb2RhbC5jb250YWlucyhlLnRhcmdldCl8fCh0P3RoaXMuc2V0U3RhdGUoe3Nob3dDb25maXJtYXRpb246ITB9KTp0aGlzLmNsb3NlTW9kYWwoKSl9fSx7a2V5OiJfX29uQ2xvc2VDb25maXJtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsb3NlQ29uZmlybV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbG9zZUNvbmZpcm1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xvc2VDb25maXJtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsb3NlQ29uZmlybV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKHtjbG9zZUNvbmZpcm1lZDplfSl9fSx7a2V5OiJfX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tDYW5jZWxCdXR0b25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlTW9kYWwoKSx0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQodGhpcy5wcm9wcy5jYW5jZWxCdXR0b24uZXZlbnRJbmZvKX19LHtrZXk6Il9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0Nsb3NlSWNvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VNb2RhbCgpLHRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLmNsb3NlSWNvbkV2ZW50SW5mbyl9fSx7a2V5OiJfX2Nsb3NlTW9kYWxXaXRoT2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Nsb3NlTW9kYWxXaXRoT2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2Nsb3NlTW9kYWxXaXRoT2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Nsb3NlTW9kYWxXaXRoT2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2Nsb3NlTW9kYWxXaXRoT2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtzaG93bjohMX0pfX0se2tleToiX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5jbG9zZUNvbmZpcm1hdGlvbj90aGlzLmNsb3NlTW9kYWxXaXRoQ29uZmlybWF0aW9uKCk6dGhpcy5zZXRTdGF0ZSh7c2hvd246ITF9KX19LHtrZXk6Il9fY2xvc2VNb2RhbFdpdGhDb25maXJtYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Nsb3NlTW9kYWxXaXRoQ29uZmlybWF0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jbG9zZU1vZGFsV2l0aENvbmZpcm1hdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2xvc2VNb2RhbFdpdGhDb25maXJtYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2Nsb3NlTW9kYWxXaXRoQ29uZmlybWF0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5jbG9zZUNvbmZpcm1lZCx0PXRoaXMucHJvcHMuY2xvc2VDb25maXJtYXRpb24sbj10LmNsb3NlQ29uZmlybWVkQ2FsbGJhY2sscj10LndpdGhDaGVja2JveDtyJiZlJiYobiYmbigpLHRoaXMuc2V0U3RhdGUoe3Nob3duOiExfSkpLHI/dGhpcy5zZXRTdGF0ZSh7c2hvd0NvbmZpcm1hdGlvbjohMH0pOnRoaXMuc2V0U3RhdGUoe3Nob3duOiExfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LnRpdGxlLHI9dC53YXJuaW5nTWVzc2FnZSxvPXQub2tCdXR0b24scz10LmNhbmNlbEJ1dHRvbixpPXQuY3VzdG9tQnV0dG9uLGE9dC5jaGlsZHJlbixsPXQuY2xvc2VDb25maXJtYXRpb24sdT17d2FybmluZ01lc3NhZ2U6cixva0J1dHRvbjpvLGNhbmNlbEJ1dHRvbjpzLGN1c3RvbUJ1dHRvbjppLGNvbmZpcm1hdGlvbk1lc3NhZ2U6bCYmbC5jb25maXJtYXRpb25NZXNzYWdlLGNvbmZpcm1hdGlvbldhcm5pbmc6bCYmbC5jb25maXJtYXRpb25XYXJuaW5nLGNvbmZpcm1hdGlvbldhcm5pbmdDbGFzc05hbWU6bCYmbC5jb25maXJtYXRpb25XYXJuaW5nQ2xhc3NOYW1lLHNob3dDb25maXJtYXRpb246dGhpcy5zdGF0ZS5zaG93Q29uZmlybWF0aW9uLGNsb3NlQ29uZmlybWVkOnRoaXMuc3RhdGUuY2xvc2VDb25maXJtZWQsb25DbG9zZUNvbmZpcm06dGhpcy5vbkNsb3NlQ29uZmlybSxjb25maXJtV2l0aENoZWNrYm94OmwmJmwud2l0aENoZWNrYm94fTtyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJtb2RhbC1sYXlvdXQiKX0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJzY3JvbGxpbmctY29udGVudCIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrTW9kYWx9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuU2Nyb2xsYmFycyxudWxsLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuQ1NTVHJhbnNpdGlvbix7dGltZW91dDozMDAsaW46dGhpcy5zdGF0ZS5zaG93bixjbGFzc05hbWVzOlcoIm1vZGFsLXdpbmRvdy1hbmltYXRpb24iKSxvbkV4aXRlZDp0aGlzLnByb3BzLmhpZGVNb2RhbEFjdGlvbn0sZnVuY3Rpb24odCl7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6ZnVuY3Rpb24odCl7ZS5tb2RhbD10fSxjbGFzc05hbWU6VygibW9kYWwtd2luZG93IixlLnByb3BzLmNsYXNzTmFtZSl9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuTW9kYWxIZWFkZXIse3RleHQ6bixvbkNsb3NlOmUub25DbGlja0Nsb3NlSWNvbn0pLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuTW9kYWxDb250ZW50LG51bGwsImV4aXRlZCIhPT10P2E6bnVsbCksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5Nb2RhbEZvb3RlciwoMCxjLmRlZmF1bHQpKHt9LHUse29uQ2xpY2tPazplLmNsb3NlTW9kYWxXaXRoT2ssY2xvc2VIYW5kbGVyOmUub25DbGlja0NhbmNlbEJ1dHRvbixjbGFzc05hbWU6ZS5wcm9wcy5jbGFzc05hbWV9KSkpfSkpKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LkNTU1RyYW5zaXRpb24se3RpbWVvdXQ6MzAwLGluOnRoaXMuc3RhdGUuc2hvd24sY2xhc3NOYW1lczpXKCJtb2RhbC1iYWNrZHJvcC1hbmltYXRpb24iKX0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJiYWNrZHJvcCIpfSkpKX19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtjbGFzc05hbWU6UC5kZWZhdWx0LnN0cmluZyxoaWRlTW9kYWxBY3Rpb246UC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCx0aXRsZTpQLmRlZmF1bHQub25lT2ZUeXBlKFtQLmRlZmF1bHQuc3RyaW5nLFAuZGVmYXVsdC5ub2RlXSksY2hpbGRyZW46UC5kZWZhdWx0Lm5vZGUsd2FybmluZ01lc3NhZ2U6UC5kZWZhdWx0LnN0cmluZyxva0J1dHRvbjpQLmRlZmF1bHQuc2hhcGUoe3RleHQ6UC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGRpc2FibGVkOlAuZGVmYXVsdC5ib29sLGRhbmdlcjpQLmRlZmF1bHQuYm9vbCxvbkNsaWNrOlAuZGVmYXVsdC5mdW5jfSksY2FuY2VsQnV0dG9uOlAuZGVmYXVsdC5zaGFwZSh7dGV4dDpQLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsZXZlbnRJbmZvOlAuZGVmYXVsdC5vYmplY3R9KSxjdXN0b21CdXR0b246UC5kZWZhdWx0Lm9uZU9mVHlwZShbUC5kZWZhdWx0Lm5vZGUsUC5kZWZhdWx0LnNoYXBlKHtvbkNsaWNrOlAuZGVmYXVsdC5mdW5jLGNvbXBvbmVudDpQLmRlZmF1bHQuZnVuYyxidXR0b25Qcm9wczpQLmRlZmF1bHQub2JqZWN0fSldKSxjbG9zZUNvbmZpcm1hdGlvbjpQLmRlZmF1bHQuc2hhcGUoe2Nsb3NlQ29uZmlybWVkQ2FsbGJhY2s6UC5kZWZhdWx0LmZ1bmMsd2l0aENoZWNrYm94OlAuZGVmYXVsdC5ib29sLGNvbmZpcm1hdGlvbk1lc3NhZ2U6UC5kZWZhdWx0LnN0cmluZyxjb25maXJtYXRpb25XYXJuaW5nQ2xhc3NOYW1lOlAuZGVmYXVsdC5zdHJpbmcsY29uZmlybWF0aW9uV2FybmluZzpQLmRlZmF1bHQuc3RyaW5nfSksY2xvc2VJY29uRXZlbnRJbmZvOlAuZGVmYXVsdC5vYmplY3QsdHJhY2tpbmc6UC5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OlAuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTpQLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGEuZGVmYXVsdFByb3BzPXtjbGFzc05hbWU6IiIsdGl0bGU6IiIsY2hpbGRyZW46bnVsbCx3YXJuaW5nTWVzc2FnZToiIixva0J1dHRvbjpudWxsLGNhbmNlbEJ1dHRvbjpudWxsLGN1c3RvbUJ1dHRvbjpudWxsLHN0b3BPdXRzaWRlQ2xvc2U6ITEsY2xvc2VDb25maXJtYXRpb246bnVsbCxjbG9zZUljb25FdmVudEluZm86e319LGk9bCkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJNb2RhbExheW91dCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL21vZGFsTGF5b3V0L21vZGFsTGF5b3V0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxMYXlvdXQuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvbW9kYWxMYXlvdXQvbW9kYWxMYXlvdXQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2RhbC1sYXlvdXQiOiJtb2RhbExheW91dF9fbW9kYWwtbGF5b3V0X19fM1NlVEwiLCJzY3JvbGxpbmctY29udGVudCI6Im1vZGFsTGF5b3V0X19zY3JvbGxpbmctY29udGVudF9fXzIwZDFvIixiYWNrZHJvcDoibW9kYWxMYXlvdXRfX2JhY2tkcm9wX19fYS1xTmgiLCJtb2RhbC13aW5kb3ciOiJtb2RhbExheW91dF9fbW9kYWwtd2luZG93X19fMkNQOG4ifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9uYXZpZ2F0aW9uVGFicy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL25hdmlnYXRpb25UYWJzL25hdmlnYXRpb25UYWJzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOYXZpZ2F0aW9uVGFicyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTmF2aWdhdGlvblRhYnN9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbmF2aWdhdGlvblRhYnMvbmF2aWdhdGlvblRhYnMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5hdmlnYXRpb25UYWJzPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxqPXIoUikseD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksTD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbmF2aWdhdGlvblRhYnMvbmF2aWdhdGlvblRhYnMuc2NzcyIpLEQ9cihMKSx3PWouZGVmYXVsdC5iaW5kKEQuZGVmYXVsdCksTT10Lk5hdmlnYXRpb25UYWJzPShvPSgwLEEuZGVmYXVsdCkoKSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNoYW5nZVRhYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFuZ2VUYWJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2VuZXJhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlVGFiX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZVRhYl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VUYWJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhbmdlVGFiX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZVRhYl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VUYWJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlVGFiX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZVRhYl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VUYWJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5vbkNoYW5nZVRhYih0aGlzLnByb3BzLmNvbmZpZ1tlXS5saW5rKX19LHtrZXk6Il9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dlbmVyYXRlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4oMCx1LmRlZmF1bHQpKHRoaXMucHJvcHMuY29uZmlnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2xhYmVsOnYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuTmF2TGluayx7dG86ZS5wcm9wcy5jb25maWdbdF0ubGluayxhY3RpdmVDbGFzc05hbWU6dygiYWN0aXZlLWxpbmsiKSxjbGFzc05hbWU6dygibGluayIpLG9uQ2xpY2s6ZnVuY3Rpb24oKXtlLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoZS5wcm9wcy5jb25maWdbdF0uZXZlbnRJbmZvKX19LGUucHJvcHMuY29uZmlnW3RdLm5hbWUpLHZhbHVlOnR9fSl9fSx7a2V5OiJfX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5jb25maWcscj10LmFjdGl2ZVRhYixvPXQubW9iaWxlRGlzYWJsZWQ7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygibmF2aWdhdGlvbi10YWJzIil9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygidGFicy1tb2JpbGUiKX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5JbnB1dERyb3Bkb3duLHtvcHRpb25zOnRoaXMuZ2VuZXJhdGVPcHRpb25zKCksdmFsdWU6cixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlVGFifSkpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygidGFicy13cmFwcGVyIil9LG4mJigwLHUuZGVmYXVsdCkobikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLk5hdkxpbmsse2tleTp0LGNsYXNzTmFtZTp3KCJ0YWIiKSx0bzpuW3RdLmxpbmssYWN0aXZlQ2xhc3NOYW1lOncoImFjdGl2ZS10YWIiKSxvbkNsaWNrOmZ1bmN0aW9uKCl7ZS5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KGUucHJvcHMuY29uZmlnW3RdLmV2ZW50SW5mbyl9fSxuW3RdLm5hbWUpfSkpLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygiY29udGVudC13cmFwcGVyIil9LHImJm5bcl0uY29tcG9uZW50LG8mJnYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygibW9iaWxlLWRpc2FibGluZy1jb3ZlciIpfSkpKX19XSksdH0oeS5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtvbkNoYW5nZVRhYjpTLmRlZmF1bHQuZnVuYyxjb25maWc6Uy5kZWZhdWx0Lm9iamVjdCxhY3RpdmVUYWI6Uy5kZWZhdWx0LnN0cmluZyx0cmFja2luZzpTLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6Uy5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOlMuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZCxtb2JpbGVEaXNhYmxlZDpTLmRlZmF1bHQuYm9vbH0saS5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlVGFiOmZ1bmN0aW9uKCl7fSxjb25maWc6e30sYWN0aXZlVGFiOiIiLG1vYmlsZURpc2FibGVkOiExfSxzPWEpKXx8czshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiTmF2aWdhdGlvblRhYnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9uYXZpZ2F0aW9uVGFicy9uYXZpZ2F0aW9uVGFicy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25hdmlnYXRpb25UYWJzL25hdmlnYXRpb25UYWJzLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9uYXZpZ2F0aW9uVGFicy9uYXZpZ2F0aW9uVGFicy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im5hdmlnYXRpb24tdGFicyI6Im5hdmlnYXRpb25UYWJzX19uYXZpZ2F0aW9uLXRhYnNfX18zaFZ3ciIsInRhYnMtd3JhcHBlciI6Im5hdmlnYXRpb25UYWJzX190YWJzLXdyYXBwZXJfX18zejhwYSIsdGFiOiJuYXZpZ2F0aW9uVGFic19fdGFiX19fVlJVNjkiLCJhY3RpdmUtdGFiIjoibmF2aWdhdGlvblRhYnNfX2FjdGl2ZS10YWJfX18zQ01tcCIsImNvbnRlbnQtd3JhcHBlciI6Im5hdmlnYXRpb25UYWJzX19jb250ZW50LXdyYXBwZXJfX18xQzNlMSIsIm1vYmlsZS1kaXNhYmxpbmctY292ZXIiOiJuYXZpZ2F0aW9uVGFic19fbW9iaWxlLWRpc2FibGluZy1jb3Zlcl9fXzNsUTY0IiwidGFicy1tb2JpbGUiOiJuYXZpZ2F0aW9uVGFic19fdGFicy1tb2JpbGVfX18xdW9WTyIsbGluazoibmF2aWdhdGlvblRhYnNfX2xpbmtfX18ydHhRLSIsImFjdGl2ZS1saW5rIjoibmF2aWdhdGlvblRhYnNfX2FjdGl2ZS1saW5rX19fMWF5T0oifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ub0l0ZW1NZXNzYWdlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm9JdGVtTWVzc2FnZS9ub0l0ZW1NZXNzYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb0l0ZW1NZXNzYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob0l0ZW1NZXNzYWdlfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL25vSXRlbU1lc3NhZ2Uvbm9JdGVtTWVzc2FnZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTm9JdGVtTWVzc2FnZT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxkPXIoYyksXz1uKCIuL3NyYy9jb21tb24vaW1nL2Vycm9yLWlubGluZS5zdmciKSxwPXIoXyksZj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm9JdGVtTWVzc2FnZS9ub0l0ZW1NZXNzYWdlLnNjc3MiKSxtPXIoZiksaD11LmRlZmF1bHQuYmluZChtLmRlZmF1bHQpLGc9dC5Ob0l0ZW1NZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWVzc2FnZTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJuby1pdGVtLW1lc3NhZ2UiKX0scy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJ3YXJuaW5nLWljb24iKX0sKDAsZC5kZWZhdWx0KShwLmRlZmF1bHQpKSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmgoIm1lc3NhZ2UiKX0sdCkpfTtnLnByb3BUeXBlcz17bWVzc2FnZTphLmRlZmF1bHQuc3RyaW5nfSxnLmRlZmF1bHRQcm9wcz17bWVzc2FnZToiIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIk5vSXRlbU1lc3NhZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ub0l0ZW1NZXNzYWdlL25vSXRlbU1lc3NhZ2UuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ub0l0ZW1NZXNzYWdlL25vSXRlbU1lc3NhZ2UuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL25vSXRlbU1lc3NhZ2Uvbm9JdGVtTWVzc2FnZS5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im5vLWl0ZW0tbWVzc2FnZSI6Im5vSXRlbU1lc3NhZ2VfX25vLWl0ZW0tbWVzc2FnZV9fX1BGeHc4Iiwid2FybmluZy1pY29uIjoibm9JdGVtTWVzc2FnZV9fd2FybmluZy1pY29uX19fcG4wQkEiLG1lc3NhZ2U6Im5vSXRlbU1lc3NhZ2VfX21lc3NhZ2VfX18yeWRZUCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9pbmRleC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTm90aWZpY2F0aW9ucz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9pbmRleC5qcyIpLHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vdGlmaWNhdGlvbi1yb290IiksYz10Lk5vdGlmaWNhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWZhdWx0LmNyZWF0ZVBvcnRhbChzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLk5vdGlmaWNhdGlvbkNvbnRhaW5lcixudWxsKSx1KX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIk5vdGlmaWNhdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vaW5kZXguanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwibm90aWZpY2F0aW9uUm9vdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9pbmRleC5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob3RpZmljYXRpb25Db250YWluZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uQ29udGFpbmVyL25vdGlmaWNhdGlvbkNvbnRhaW5lci5qc3giKSxpPWZ1bmN0aW9uKGUpe3JldHVybntub3RpZmljYXRpb25zOmUubm90aWZpY2F0aW9uc319LGE9dC5Ob3RpZmljYXRpb25Db250YWluZXI9KDAsci5jb25uZWN0KShpLHtoaWRlTm90aWZpY2F0aW9uOm8uaGlkZU5vdGlmaWNhdGlvbn0pKHMuTm90aWZpY2F0aW9uQ29udGFpbmVyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiTm90aWZpY2F0aW9uQ29udGFpbmVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9pbmRleC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIm1hcFN0YXRlVG9Qcm9wcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvaW5kZXguanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9ub3RpZmljYXRpb25Db250YWluZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vdGlmaWNhdGlvbkNvbnRhaW5lcj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2luZGV4LmpzIiksQT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxDPXIoQSksTz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9ub3RpZmljYXRpb25JdGVtL2luZGV4LmpzIiksUz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9ub3RpZmljYXRpb25Db250YWluZXIuc2NzcyIpLFI9cihTKSxqPUMuZGVmYXVsdC5iaW5kKFIuZGVmYXVsdCkseD10Lk5vdGlmaWNhdGlvbkNvbnRhaW5lcj0ocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubm90aWZpY2F0aW9ucyxuPWUuaGlkZU5vdGlmaWNhdGlvbjtyZXR1cm4gRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpqKCJub3RpZmljYXRpb24tY29udGFpbmVyIil9LEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQuVHJhbnNpdGlvbkdyb3VwLG51bGwsdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEUuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQuQ1NTVHJhbnNpdGlvbix7a2V5OmUudWlkLHRpbWVvdXQ6NTAwLGNsYXNzTmFtZXM6Im5vdGlmaWNhdGlvbi10cmFuc2l0aW9uIn0sRS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTy5Ob3RpZmljYXRpb24sKDAsYS5kZWZhdWx0KSh7fSxlLHtvbk1lc3NhZ2VDbGljazpufSkpKX0pKSl9fV0pLHR9KGIuUHVyZUNvbXBvbmVudCksby5wcm9wVHlwZXM9e25vdGlmaWNhdGlvbnM6di5kZWZhdWx0LmFycmF5T2Yodi5kZWZhdWx0Lm9iamVjdCkuaXNSZXF1aXJlZCxoaWRlTm90aWZpY2F0aW9uOnYuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJOb3RpZmljYXRpb25Db250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uQ29udGFpbmVyL25vdGlmaWNhdGlvbkNvbnRhaW5lci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihqLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uQ29udGFpbmVyLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uQ29udGFpbmVyL25vdGlmaWNhdGlvbkNvbnRhaW5lci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im5vdGlmaWNhdGlvbi1jb250YWluZXIiOiJub3RpZmljYXRpb25Db250YWluZXJfX25vdGlmaWNhdGlvbi1jb250YWluZXJfX18xakhFNCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uSXRlbS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob3RpZmljYXRpb249dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9ub3RpZmljYXRpb25JdGVtL25vdGlmaWNhdGlvbi5qc3giKSxzPXQuTm90aWZpY2F0aW9uPSgwLHIuaW5qZWN0SW50bCkoby5Ob3RpZmljYXRpb24pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIk5vdGlmaWNhdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uSXRlbS9pbmRleC5qcyIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uSXRlbS9ub3RpZmljYXRpb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vdGlmaWNhdGlvbj12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEM9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2NvbnN0YW50cy5qcyIpLE89bigiLi9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uSXRlbS9ub3RpZmljYXRpb24uc2NzcyIpLFM9cihPKSxSPVQuZGVmYXVsdC5iaW5kKFMuZGVmYXVsdCksaj0oMCxBLmRlZmluZU1lc3NhZ2VzKSh7c3VjY2Vzc0xvZ2luOntpZDoiTm90aWZpY2F0aW9uLnN1Y2Nlc3NMb2dpbiIsZGVmYXVsdE1lc3NhZ2U6IlNpZ25lZCBpbiBzdWNjZXNzZnVsbHkifSxmYWlsdXJlRGVmYXVsdDp7aWQ6Ik5vdGlmaWNhdGlvbi5mYWlsdXJlRGVmYXVsdCIsZGVmYXVsdE1lc3NhZ2U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbm5lY3RpbmcgdG8gc2VydmVyOiB7ZXJyb3J9In0saW5mb0xvZ291dDp7aWQ6Ik5vdGlmaWNhdGlvbi5pbmZvTG9nb3V0IixkZWZhdWx0TWVzc2FnZToiWW91IGhhdmUgYmVlbiBsb2dnZWQgb3V0In19KSx4PXQuTm90aWZpY2F0aW9uPSgwLEEuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGwuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5tZXNzYWdlQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX21lc3NhZ2VDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGYuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJfX21lc3NhZ2VDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbWVzc2FnZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19tZXNzYWdlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21lc3NhZ2VDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbWVzc2FnZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19tZXNzYWdlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX21lc3NhZ2VDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMub25NZXNzYWdlQ2xpY2sodGhpcy5wcm9wcy51aWQpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1lc3NhZ2Usbj1lLnR5cGUscj1lLm1lc3NhZ2VJZCxvPWUuaW50bCxzPWUudmFsdWVzO3JldHVybiIiPT09dCYmIiI9PT1yP251bGw6Yi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LG9uQ2xpY2s6dGhpcy5tZXNzYWdlQ2xpY2t9LGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6UigibWVzc2FnZS1jb250YWluZXIiLG4pfSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCwiICIscj9vLmZvcm1hdE1lc3NhZ2UoaltyXSxzKTp0KSkpfX1dKSx0fShnLlB1cmVDb21wb25lbnQpLHMucHJvcFR5cGVzPXttZXNzYWdlOnkuZGVmYXVsdC5zdHJpbmcsbWVzc2FnZUlkOnkuZGVmYXVsdC5zdHJpbmcsdHlwZTp5LmRlZmF1bHQub25lT2YoW0MuTk9USUZJQ0FUSU9OX1RZUEVTLkVSUk9SLEMuTk9USUZJQ0FUSU9OX1RZUEVTLklORk8sQy5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU10pLHZhbHVlczp5LmRlZmF1bHQub2JqZWN0LHVpZDp5LmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsb25NZXNzYWdlQ2xpY2s6eS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbnRsOkEuaW50bFNoYXBlLmlzUmVxdWlyZWR9LHMuZGVmYXVsdFByb3BzPXttZXNzYWdlOiIiLG1lc3NhZ2VJZDoiIix0eXBlOkMuTk9USUZJQ0FUSU9OX1RZUEVTLklORk8sdmFsdWVzOnt9fSxvPWkpKXx8bzshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwiTm90aWZpY2F0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbkNvbnRhaW5lci9ub3RpZmljYXRpb25JdGVtL25vdGlmaWNhdGlvbi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihSLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb25Db250YWluZXIvbm90aWZpY2F0aW9uSXRlbS9ub3RpZmljYXRpb24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uQ29udGFpbmVyL25vdGlmaWNhdGlvbkl0ZW0vbm90aWZpY2F0aW9uLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uQ29udGFpbmVyL25vdGlmaWNhdGlvbkl0ZW0vbm90aWZpY2F0aW9uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibWVzc2FnZS1jb250YWluZXIiOiJub3RpZmljYXRpb25fX21lc3NhZ2UtY29udGFpbmVyX19fM0hyWWkiLHN1Y2Nlc3M6Im5vdGlmaWNhdGlvbl9fc3VjY2Vzc19fXzEyX2lwIixlcnJvcjoibm90aWZpY2F0aW9uX19lcnJvcl9fXzIxVGViIiwib3BhY2l0eS1lbnRlci1hY3RpdmUiOiJub3RpZmljYXRpb25fX29wYWNpdHktZW50ZXItYWN0aXZlX19fcHpfRDYiLCJvcGFjaXR5LWxlYXZlLWFjdGl2ZSI6Im5vdGlmaWNhdGlvbl9fb3BhY2l0eS1sZWF2ZS1hY3RpdmVfX18xZThpbCJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnaW5hdGlvblRvb2xiYXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhZ2luYXRpb25Ub29sYmFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QYWdpbmF0aW9uVG9vbGJhcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9pdGVtQ291bnRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2l0ZW1Db3VudGVyL2l0ZW1Db3VudGVyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJdGVtQ291bnRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSXRlbUNvdW50ZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvaXRlbUNvdW50ZXIvaXRlbUNvdW50ZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JdGVtQ291bnRlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxsPXIoYSksdT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvaXRlbUNvdW50ZXIvaXRlbUNvdW50ZXIuc2NzcyIpLGM9cih1KSxkPWwuZGVmYXVsdC5iaW5kKGMuZGVmYXVsdCksXz10Lkl0ZW1Db3VudGVyPWZ1bmN0aW9uKHQpe3ZhciBuPXQuYWN0aXZlUGFnZSxyPXQucGFnZVNpemUsbz10Lml0ZW1Db3VudCxzPW4qcixhPXMtcjtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiaXRlbS1jb3VudGVyIil9LGErMSsiIC0gIisoczxvP3M6byksIiAiLGUuY3JlYXRlRWxlbWVudChpLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb21tb24ub2YiLGRlZmF1bHRNZXNzYWdlOiJvZiJ9KSwiICIsbyl9O18ucHJvcFR5cGVzPXthY3RpdmVQYWdlOnMuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxwYWdlU2l6ZTpzLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsaXRlbUNvdW50OnMuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkl0ZW1Db3VudGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvaXRlbUNvdW50ZXIvaXRlbUNvdW50ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9pdGVtQ291bnRlci9pdGVtQ291bnRlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvaXRlbUNvdW50ZXIvaXRlbUNvdW50ZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpdGVtLWNvdW50ZXIiOiJpdGVtQ291bnRlcl9faXRlbS1jb3VudGVyX19fNVJZdjUifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbWcvZmlyc3QtcGFnZS1hcnJvdy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMSI+PHBhdGggZD0iTTE2IDE0LjI1bC0zLjgyLTMuODIxTDE2IDYuNjA4bC0xLjE4LTEuMTgtNSA1IDUgNXpNOS44IDE0LjI1bC0zLjgyLTMuODIxTDkuOCA2LjYwOGwtMS4xOC0xLjE4LTUgNSA1IDV6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbWcvbGFzdC1wYWdlLWFycm93LWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIxIj48cGF0aCBkPSJNNCAxNC4yNWwzLjgyLTMuODIxTDQgNi42MDhsMS4xOC0xLjE4IDUgNS01IDV6TTEwLjIgMTQuMjVsMy44Mi0zLjgyMS0zLjgyLTMuODIxIDEuMTgtMS4xOCA1IDUtNSA1eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZUJ1dHRvbnMvaW1nL25leHQtcGFnZS1hcnJvdy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTE0IDI5LjE3TDIyLjY1NyAyMCAxNCAxMC44MyAxNi42NzIgOCAyOCAyMCAxNi42NzIgMzJ6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbWcvcHJldmlvdXMtcGFnZS1hcnJvdy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTI2IDI5LjE3TDE3LjM0MyAyMCAyNiAxMC44MyAyMy4zMjggOCAxMiAyMGwxMS4zMjggMTJ6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b25zLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYWdlQnV0dG9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGFnZUJ1dHRvbnN9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZUJ1dHRvbnMvcGFnZUJ1dHRvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b24vcGFnZUJ1dHRvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGFnZUJ1dHRvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGFnZUJ1dHRvbn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlQnV0dG9uL3BhZ2VCdXR0b24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlQnV0dG9uPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b24vcGFnZUJ1dHRvbi5zY3NzIiksdT1yKGwpLGM9YS5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxkPXQuUGFnZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuLHI9dC5kaXNhYmxlZCxvPXQuYWN0aXZlLHM9dC5oaWRlT25Nb2JpbGUsaT10Lm9uQ2xpY2s7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6YygicGFnZS1idXR0b24iLHthY3RpdmU6byxkaXNhYmxlZDpyLGhpZGVPbk1vYmlsZTpzfSksb25DbGljazpyP3ZvaWQgMDppfSxuKX07ZC5wcm9wVHlwZXM9e2NoaWxkcmVuOnMuZGVmYXVsdC5ub2RlLGRpc2FibGVkOnMuZGVmYXVsdC5ib29sLGFjdGl2ZTpzLmRlZmF1bHQuYm9vbCxoaWRlT25Nb2JpbGU6cy5kZWZhdWx0LmJvb2wsb25DbGljazpzLmRlZmF1bHQuZnVuY30sZC5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGwsZGlzYWJsZWQ6ITEsYWN0aXZlOiExLGhpZGVPbk1vYmlsZTohMSxvbkNsaWNrOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlBhZ2VCdXR0b24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlQnV0dG9uL3BhZ2VCdXR0b24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlQnV0dG9uL3BhZ2VCdXR0b24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b24vcGFnZUJ1dHRvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InBhZ2UtYnV0dG9uIjoicGFnZUJ1dHRvbl9fcGFnZS1idXR0b25fX19PSFlLTiIsaGlkZU9uTW9iaWxlOiJwYWdlQnV0dG9uX19oaWRlT25Nb2JpbGVfX18xSXZBVyIsYWN0aXZlOiJwYWdlQnV0dG9uX19hY3RpdmVfX18zSjVZcyIsZGlzYWJsZWQ6InBhZ2VCdXR0b25fX2Rpc2FibGVkX19fMy1SWWoifX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlQnV0dG9ucy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2VCdXR0b25zPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZUJ1dHRvbnMvcGFnZUJ1dHRvbi9pbmRleC5qcyIpLGQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VOdW1iZXJCdXR0b25zLmpzeCIpLF89bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL2ltZy9sYXN0LXBhZ2UtYXJyb3ctaW5saW5lLnN2ZyIpLHA9cihfKSxmPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbWcvZmlyc3QtcGFnZS1hcnJvdy1pbmxpbmUuc3ZnIiksbT1yKGYpLGg9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL2ltZy9uZXh0LXBhZ2UtYXJyb3ctaW5saW5lLnN2ZyIpLGc9cihoKSxiPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbWcvcHJldmlvdXMtcGFnZS1hcnJvdy1pbmxpbmUuc3ZnIiksRT1yKGIpLHk9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b25zLnNjc3MiKSx2PXIoeSksVD1hLmRlZmF1bHQuYmluZCh2LmRlZmF1bHQpLEE9dC5QYWdlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgbj10LmFjdGl2ZVBhZ2Uscj10LnBhZ2VDb3VudCxvPXQub25DaGFuZ2VQYWdlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOlQoInBhZ2UtYnV0dG9ucyIpfSxlLmNyZWF0ZUVsZW1lbnQoYy5QYWdlQnV0dG9uLHtkaXNhYmxlZDoxPT09bixoaWRlT25Nb2JpbGU6ITAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBvKDEpfX0sKDAsdS5kZWZhdWx0KShtLmRlZmF1bHQpKSxlLmNyZWF0ZUVsZW1lbnQoYy5QYWdlQnV0dG9uLHtkaXNhYmxlZDoxPT09bixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG8obi0xKX19LCgwLHUuZGVmYXVsdCkoRS5kZWZhdWx0KSksZS5jcmVhdGVFbGVtZW50KGQuUGFnZU51bWJlckJ1dHRvbnMse2FjdGl2ZVBhZ2U6bixwYWdlQ291bnQ6cixvbkNoYW5nZVBhZ2U6b30pLGUuY3JlYXRlRWxlbWVudChjLlBhZ2VCdXR0b24se2Rpc2FibGVkOm49PT1yLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyhuKzEpfX0sKDAsdS5kZWZhdWx0KShnLmRlZmF1bHQpKSxlLmNyZWF0ZUVsZW1lbnQoYy5QYWdlQnV0dG9uLHtkaXNhYmxlZDpuPT09cixoaWRlT25Nb2JpbGU6ITAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBvKHIpfX0sKDAsdS5kZWZhdWx0KShwLmRlZmF1bHQpKSl9O0EucHJvcFR5cGVzPXthY3RpdmVQYWdlOnMuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxwYWdlQ291bnQ6cy5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLG9uQ2hhbmdlUGFnZTpzLmRlZmF1bHQuZnVuY30sQS5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlUGFnZTpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJQYWdlQnV0dG9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b25zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFQsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZUJ1dHRvbnMvcGFnZUJ1dHRvbnMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VCdXR0b25zLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicGFnZS1idXR0b25zIjoicGFnZUJ1dHRvbnNfX3BhZ2UtYnV0dG9uc19fX3VSQURTIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZUJ1dHRvbnMvcGFnZU51bWJlckJ1dHRvbnMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlTnVtYmVyQnV0dG9ucz12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxiPXIoZyksRT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3NjcmVlblNpemVWYXJpYWJsZXMuanMiKSx5PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlQnV0dG9uL2luZGV4LmpzIiksdj0xMCxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9ZTtyPD10O3IrKyluLnB1c2gocik7cmV0dXJuIG59LEE9ZnVuY3Rpb24odCxuLHIsbyl7dmFyIHM9W10saT1wYXJzZUludCh0LzIsMTApO3M9cjw9dD9UKDEscik6bjw9aT9UKDEsdCk6bj49ci1pP1Qoci0odC0xKSxyKTpUKG4tKGktMSksbitpKTt2YXIgYT1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KHkuUGFnZUJ1dHRvbix7a2V5OnQsYWN0aXZlOm49PT10LG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbiE9PXQmJm8odCl9fSx0KX0pO3JldHVybiAxIT09c1swXSYmYS51bnNoaWZ0KCIuLi4iKSxzW3MubGVuZ3RoLTFdIT09ciYmYS5wdXNoKCIuLi4iKSxhfSxDPXQuUGFnZU51bWJlckJ1dHRvbnM9KHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17c2hvd25QYWdlczp2fSxyLnNldFNob3duUGFnZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldFNob3duUGFnZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxwLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToiX19zZXRTaG93blBhZ2VzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRTaG93blBhZ2VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tYXRjaD13aW5kb3cubWF0Y2hNZWRpYShFLlNDUkVFTl9TTV9NQVgpLHRoaXMubWF0Y2guYWRkTGlzdGVuZXIodGhpcy5zZXRTaG93blBhZ2VzKSx0aGlzLnNldFNob3duUGFnZXModGhpcy5tYXRjaCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hdGNoJiZ0aGlzLm1hdGNoLnJlbW92ZUxpc3RlbmVyKHRoaXMuc2V0U2hvd25QYWdlcyl9fSx7a2V5OiJfX3NldFNob3duUGFnZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldFNob3duUGFnZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldFNob3duUGFnZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0U3RhdGUoe3Nob3duUGFnZXM6ZS5tYXRjaGVzPzQ6dn0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuc3RhdGUuc2hvd25QYWdlcyx0aGlzLnByb3BzLmFjdGl2ZVBhZ2UsdGhpcy5wcm9wcy5wYWdlQ291bnQsdGhpcy5wcm9wcy5vbkNoYW5nZVBhZ2UpfX1dKSx0fShoLlB1cmVDb21wb25lbnQpLG8ucHJvcFR5cGVzPXthY3RpdmVQYWdlOmIuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxwYWdlQ291bnQ6Yi5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLG9uQ2hhbmdlUGFnZTpiLmRlZmF1bHQuZnVuY30sby5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlUGFnZTpmdW5jdGlvbigpe319LHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJQYWdlTnVtYmVyQnV0dG9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VOdW1iZXJCdXR0b25zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsIkRFU0tUT1BfTUFYX1ZJU0lCTEVfUEFHRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlTnVtYmVyQnV0dG9ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcig0LCJNT0JJTEVfTUFYX1ZJU0lCTEVfUEFHRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlTnVtYmVyQnV0dG9ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihULCJjcmVhdGVQYWdlUmFuZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9wYWdlTnVtYmVyQnV0dG9ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJjcmVhdGVQYWdlTnVtYmVyQnV0dG9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VCdXR0b25zL3BhZ2VOdW1iZXJCdXR0b25zLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvcGFnZVNpemVDb250cm9sLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYWdlU2l6ZUNvbnRyb2wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlBhZ2VTaXplQ29udHJvbH19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvcGFnZVNpemVDb250cm9sLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlU2l6ZUNvbnRyb2w9dm9pZCAwO3ZhciBzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxjPW8odSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxfPW8oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxmPW8ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxoPW8obSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHk9byhFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLFQ9byh2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxMPW8oeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLHc9byhEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxrPW8oTSksST1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLFA9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksTj1vKFApLEg9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZVNpemVDb250cm9sL3BhZ2VTaXplQ29udHJvbC5zY3NzIiksVT1vKEIpLEc9e1BhZ2VTaXplQ29udHJvbDp7ZGlzcGxheU5hbWU6IlBhZ2VTaXplQ29udHJvbCJ9fSx6PSgwLEwuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvcGFnZVNpemVDb250cm9sLmpzeCIsY29tcG9uZW50czpHLGxvY2FsczpbZV0saW1wb3J0czpbai5kZWZhdWx0XX0pLFY9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VTaXplQ29udHJvbC9wYWdlU2l6ZUNvbnRyb2wuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltdLGltcG9ydHM6W2ouZGVmYXVsdCxDLmRlZmF1bHRdfSksVz1OLmRlZmF1bHQuYmluZChVLmRlZmF1bHQpLFk9dC5QYWdlU2l6ZUNvbnRyb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB6KFYodCxlKSxlKX19KCJQYWdlU2l6ZUNvbnRyb2wiKSgocz0oMCx3LmRlZmF1bHQpKCkpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGguZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAseS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxmLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2lucHV0VmlzaWJsZTohMSxpbnB1dFZhbHVlOiIifSxyLmlucHV0UmVmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pbnB1dFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zaG93SW5wdXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Nob3dJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5ub3JtYWxpemVJbnB1dD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fbm9ybWFsaXplSW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlS2V5UHJlc3M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUtleVByZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUVudGVyS2V5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVFbnRlcktleV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHkuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxULmRlZmF1bHQpKHQsZSksKDAsYi5kZWZhdWx0KSh0LFt7a2V5OiJfX2hhbmRsZUVudGVyS2V5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVFbnRlcktleV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlS2V5UHJlc3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUtleVByZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19ub3JtYWxpemVJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbm9ybWFsaXplSW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zaG93SW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Nob3dJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faW5wdXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lucHV0UmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pbnB1dFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5wdXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lucHV0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pbnB1dFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faW5wdXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pbnB1dE5vZGU9ZX19LHtrZXk6Il9fc2hvd0lucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zaG93SW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Nob3dJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2hvd0lucHV0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zaG93SW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnNldFN0YXRlKHtpbnB1dFZpc2libGU6ITB9LGZ1bmN0aW9uKCl7ZS5pbnB1dE5vZGUuZm9jdXMoKX0pfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoRi5GT09URVJfRVZFTlRTLkVESVRfTlVNQkVSX1BFUl9QQUdFKSx0aGlzLnNldFN0YXRlKHtpbnB1dFZhbHVlOmUudGFyZ2V0LnZhbHVlfSl9fSx7a2V5OiJfX25vcm1hbGl6ZUlucHV0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ub3JtYWxpemVJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbm9ybWFsaXplSW5wdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX25vcm1hbGl6ZUlucHV0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19ub3JtYWxpemVJbnB1dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUpPDB8fGlzTmFOKE51bWJlcihlKSk/IjAiOk51bWJlcihlKT4zMDA/U3RyaW5nKDMwMCk6ZX19LHtrZXk6Il9faGFuZGxlS2V5UHJlc3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUtleVByZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVLZXlQcmVzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlS2V5UHJlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUtleVByZXNzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZXx8ZS53aGljaDsvKFsrLS5lXXxcRCkvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZSh0KSkmJmUucHJldmVudERlZmF1bHQoKX19LHtrZXk6Il9faGFuZGxlRW50ZXJLZXlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUVudGVyS2V5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVFbnRlcktleV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRW50ZXJLZXlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUVudGVyS2V5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RhdGUuaW5wdXRWYWx1ZTsxMz09PWUua2V5Q29kZSYmKHRoaXMuc2V0U3RhdGUoe2lucHV0VmlzaWJsZTohMSxpbnB1dFZhbHVlOiIifSksdGhpcy5wcm9wcy5vbkNoYW5nZVBhZ2VTaXplKE51bWJlcih0aGlzLm5vcm1hbGl6ZUlucHV0KHQpKSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJwYWdlLXNpemUiLHsiaW5wdXQtdmlzaWJsZSI6dGhpcy5zdGF0ZS5pbnB1dFZpc2libGV9KX0sdGhpcy5zdGF0ZS5pbnB1dFZpc2libGU/ci5jcmVhdGVFbGVtZW50KHEse3JlZkZ1bmN0aW9uOnRoaXMuaW5wdXRSZWYsdmFsdWU6dGhpcy5zdGF0ZS5pbnB1dFZhbHVlLG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLG9uS2V5VXA6dGhpcy5oYW5kbGVFbnRlcktleSxvbktleVByZXNzOnRoaXMuaGFuZGxlS2V5UHJlc3N9KTpyLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Vygic2l6ZS10ZXh0Iiksb25DbGljazp0aGlzLnNob3dJbnB1dH0sdGhpcy5wcm9wcy5wYWdlU2l6ZSksIiAiLHIuY3JlYXRlRWxlbWVudChJLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJQYWdlU2l6ZUNvbnRyb2wucGVyUGFnZSIsZGVmYXVsdE1lc3NhZ2U6InBlciBwYWdlIn0pKX19XSksdH0oUi5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtwYWdlU2l6ZTprLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsb25DaGFuZ2VQYWdlU2l6ZTprLmRlZmF1bHQuZnVuYyx0cmFja2luZzprLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6ay5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOmsuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sYS5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlUGFnZVNpemU6ZnVuY3Rpb24oKXt9fSxpPWwpKXx8aSkscT1mdW5jdGlvbihlKXt2YXIgdD0oMCxfLmRlZmF1bHQpKGUsW10pO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJzaXplLWlucHV0Iil9LHIuY3JlYXRlRWxlbWVudChILklucHV0LCgwLGMuZGVmYXVsdCkoe30sdCx7dHlwZToidGV4dCIsbWF4TGVuZ3RoOiIzIn0pKSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJQYWdlU2l6ZUNvbnRyb2wiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvcGFnZVNpemVDb250cm9sLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZVNpemVDb250cm9sL3BhZ2VTaXplQ29udHJvbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigzMDAsIk1BWF9TSVpFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZVNpemVDb250cm9sL3BhZ2VTaXplQ29udHJvbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihxLCJTaXplSW5wdXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlU2l6ZUNvbnRyb2wvcGFnZVNpemVDb250cm9sLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnZVNpemVDb250cm9sL3BhZ2VTaXplQ29udHJvbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InBhZ2Utc2l6ZSI6InBhZ2VTaXplQ29udHJvbF9fcGFnZS1zaXplX19fMlpqb3UiLCJpbnB1dC12aXNpYmxlIjoicGFnZVNpemVDb250cm9sX19pbnB1dC12aXNpYmxlX19feFdPdkciLCJzaXplLXRleHQiOiJwYWdlU2l6ZUNvbnRyb2xfX3NpemUtdGV4dF9fXzJmX0k2Iiwic2l6ZS1pbnB1dCI6InBhZ2VTaXplQ29udHJvbF9fc2l6ZS1pbnB1dF9fXzNHRUEyIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnaW5hdGlvblRvb2xiYXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdpbmF0aW9uVG9vbGJhcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9wYWdpbmF0aW9uVG9vbGJhci9wYWdlQnV0dG9ucy9pbmRleC5qcyIpLHU9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2VTaXplQ29udHJvbC9pbmRleC5qcyIpLGM9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2l0ZW1Db3VudGVyL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnaW5hdGlvblRvb2xiYXIuc2NzcyIpLF89cihkKSxwPWEuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj10LlBhZ2luYXRpb25Ub29sYmFyPWZ1bmN0aW9uKHQpe3ZhciBuPXQuYWN0aXZlUGFnZSxyPXQucGFnZUNvdW50LG89dC5wYWdlU2l6ZSxzPXQuaXRlbUNvdW50LGk9dC5vbkNoYW5nZVBhZ2UsYT10Lm9uQ2hhbmdlUGFnZVNpemU7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInBhZ2luYXRpb24tdG9vbGJhciIpfSxzJiZlLmNyZWF0ZUVsZW1lbnQoYy5JdGVtQ291bnRlcix7YWN0aXZlUGFnZTpuLHBhZ2VTaXplOm8saXRlbUNvdW50OnN9KSxyPjEmJmUuY3JlYXRlRWxlbWVudChsLlBhZ2VCdXR0b25zLHthY3RpdmVQYWdlOm4scGFnZUNvdW50OnIsb25DaGFuZ2VQYWdlOml9KSxvJiZlLmNyZWF0ZUVsZW1lbnQodS5QYWdlU2l6ZUNvbnRyb2wse3BhZ2VTaXplOm8sb25DaGFuZ2VQYWdlU2l6ZTphfSkpfTtmLnByb3BUeXBlcz17YWN0aXZlUGFnZTpzLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsaXRlbUNvdW50OnMuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxwYWdlQ291bnQ6cy5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHBhZ2VTaXplOnMuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxvbkNoYW5nZVBhZ2U6cy5kZWZhdWx0LmZ1bmMsb25DaGFuZ2VQYWdlU2l6ZTpzLmRlZmF1bHQuZnVuY30sZi5kZWZhdWx0UHJvcHM9e29uQ2hhbmdlUGFnZTpmdW5jdGlvbigpe30sb25DaGFuZ2VQYWdlU2l6ZTpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJQYWdpbmF0aW9uVG9vbGJhciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2luYXRpb25Ub29sYmFyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vcGFnaW5hdGlvblRvb2xiYXIvcGFnaW5hdGlvblRvb2xiYXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL3BhZ2luYXRpb25Ub29sYmFyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicGFnaW5hdGlvbi10b29sYmFyIjoicGFnaW5hdGlvblRvb2xiYXJfX3BhZ2luYXRpb24tdG9vbGJhcl9fX3ZLeVpWIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vc2NyZWVuTG9jay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3NjcmVlbkxvY2svc2NyZWVuTG9jay5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2NyZWVuTG9jayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU2NyZWVuTG9ja319KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JlZW5Mb2NrL3NjcmVlbkxvY2suanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TY3JlZW5Mb2NrPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLE09bigiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29tcG9uZW50cy9wcmVsb2FkZXJzL3NwaW5uaW5nUHJlbG9hZGVyL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2NyZWVuTG9jay9zY3JlZW5Mb2NrLnNjc3MiKSxQPXIoSSksTj17U2NyZWVuTG9jazp7ZGlzcGxheU5hbWU6IlNjcmVlbkxvY2sifX0sSD0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vc2NyZWVuTG9jay9zY3JlZW5Mb2NrLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEY9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3NjcmVlbkxvY2svc2NyZWVuTG9jay5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxCPUQuZGVmYXVsdC5iaW5kKFAuZGVmYXVsdCksVT10LlNjcmVlbkxvY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIKEYodCxlKSxlKX19KCJTY3JlZW5Mb2NrIikoKG89KDAsdy5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57dmlzaWJsZTooMCxNLnNjcmVlbkxvY2tWaXNpYmlsaXR5U2VsZWN0b3IpKGUpfX0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnNjcmVlbkxvY2tSb290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JlZW4tbG9jay1yb290Iiksbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQuRnJhZ21lbnQsbnVsbCx0aGlzLnByb3BzLnZpc2libGUmJlIuZGVmYXVsdC5jcmVhdGVQb3J0YWwoQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpCKCJzY3JlZW4tbG9jayIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoImJhY2tkcm9wIil9KSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLlNwaW5uaW5nUHJlbG9hZGVyLG51bGwpKSx0aGlzLnNjcmVlbkxvY2tSb290KSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17dmlzaWJsZTp4LmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIlNjcmVlbkxvY2siLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JlZW5Mb2NrL3NjcmVlbkxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JlZW5Mb2NrL3NjcmVlbkxvY2suanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vc2NyZWVuTG9jay9zY3JlZW5Mb2NrLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic2NyZWVuLWxvY2siOiJzY3JlZW5Mb2NrX19zY3JlZW4tbG9ja19fXzNfMXRmIixiYWNrZHJvcDoic2NyZWVuTG9ja19fYmFja2Ryb3BfX18zMjlPViJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3Njcm9sbFdyYXBwZXIvaW1nL3RvcC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzg0LjkyMyAzODQuOTIzIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzODQuOTIzIDM4NC45MjM7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48Zz48cGF0aCBpZD0iQXJyb3dfVXB3YXJkIiBkPSJNMzIxLjMzNywxMjIuNTY3TDIwMS4wNDYsMy40NzljLTQuNzc2LTQuNzI4LTEyLjM5MS00LjU0Ny0xNy4xNzksMGwtMTIwLjI5MSwxMTkuMSBjLTQuNzQsNC43MDQtNC43NCwxMi4zMTksMCwxNy4wMTFjNC43NTIsNC43MDQsMTIuNDM5LDQuNzA0LDE3LjE5MSwwbDk5LjU1MS05OC41NTJ2MzMxLjg1NmMwLDYuNjQxLDUuNDM4LDEyLjAzLDEyLjE1MSwxMi4wMyBzMTIuMTUxLTUuMzksMTIuMTUxLTEyLjAzVjQxLjAyNWw5OS41NTEsOTguNTUyYzQuNzQsNC43MDQsMTIuNDM5LDQuNzA0LDE3LjE3OSwwQzMyNi4wODksMTM0Ljg4NiwzMjYuMDg5LDEyNy4yNywzMjEuMzM3LDEyMi41NjcgeiIgZmlsbD0iIzc3Nzc3NyI+PC9wYXRoPjwvZz48L3N2Zz4nfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3Njcm9sbFdyYXBwZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL3Njcm9sbFdyYXBwZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNjcm9sbFdyYXBwZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNjcm9sbFdyYXBwZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9zY3JvbGxXcmFwcGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2Nyb2xsV3JhcHBlcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLE09cih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksST1yKGspLFA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxOPW4oIi4vbm9kZV9tb2R1bGVzL3JlYm91bmQvZGlzdC9yZWJvdW5kLmpzIiksSD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1jdXN0b20tc2Nyb2xsYmFycy9saWIvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9pbWcvdG9wLWlubGluZS5zdmciKSxVPXIoQiksRz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9zY3JvbGxXcmFwcGVyLnNjc3MiKSx6PXIoRyksVj17U2Nyb2xsV3JhcHBlcjp7ZGlzcGxheU5hbWU6IlNjcm9sbFdyYXBwZXIifX0sVz0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9zY3JvbGxXcmFwcGVyLmpzeCIsY29tcG9uZW50czpWLGxvY2FsczpbZV0saW1wb3J0czpbTy5kZWZhdWx0XX0pLFk9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3Njcm9sbFdyYXBwZXIvc2Nyb2xsV3JhcHBlci5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxxPUQuZGVmYXVsdC5iaW5kKHouZGVmYXVsdCksSz10LlNjcm9sbFdyYXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBXKFkodCxlKSxlKX19KCJTY3JvbGxXcmFwcGVyIikoKG89KDAseC5kZWZhdWx0KSgpKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtzaG93QnV0dG9uOiExfSxyLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jb21wb25lbnREaWRNb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY29tcG9uZW50V2lsbFVubW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRTY3JvbGxUb3BfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0U2Nyb2xsSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRTY3JvbGxIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0dXBSZWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZVNwcmluZ1VwZGF0ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlU3ByaW5nVXBkYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNjcm9sbFRvcD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2Nyb2xsVG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZVNjcm9sbEZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVTY3JvbGxGcmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVTY3JvbGxTdG9wPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlU2Nyb2xsU3RvcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlU2Nyb2xsU3RvcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlU2Nyb2xsRnJhbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZVNjcm9sbEZyYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zY3JvbGxUb3BfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Njcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlU3ByaW5nVXBkYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTcHJpbmdVcGRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SGVpZ2h0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFNjcm9sbEhlaWdodF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U2Nyb2xsSGVpZ2h0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTY3JvbGxUb3BfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFNjcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29tcG9uZW50V2lsbFVubW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbXBvbmVudFdpbGxVbm1vdW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb21wb25lbnREaWRNb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29tcG9uZW50RGlkTW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NvbXBvbmVudERpZE1vdW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb21wb25lbnREaWRNb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29tcG9uZW50RGlkTW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbXBvbmVudERpZE1vdW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb21wb25lbnREaWRNb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMud2l0aEJhY2tUb1RvcCYmKHRoaXMuc3ByaW5nU3lzdGVtPW5ldyBOLlNwcmluZ1N5c3RlbSx0aGlzLnNwcmluZz10aGlzLnNwcmluZ1N5c3RlbS5jcmVhdGVTcHJpbmcoKSx0aGlzLnNwcmluZy5hZGRMaXN0ZW5lcih7b25TcHJpbmdVcGRhdGU6dGhpcy5oYW5kbGVTcHJpbmdVcGRhdGV9KSx0aGlzLnN0b3BTY3JvbGw9ITEpfX0se2tleToiX19jb21wb25lbnRXaWxsVW5tb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29tcG9uZW50V2lsbFVubW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NvbXBvbmVudFdpbGxVbm1vdW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb21wb25lbnRXaWxsVW5tb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29tcG9uZW50V2lsbFVubW91bnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLndpdGhCYWNrVG9Ub3AmJih0aGlzLnNwcmluZ1N5c3RlbS5kZXJlZ2lzdGVyU3ByaW5nKHRoaXMuc3ByaW5nKSx0aGlzLnNwcmluZ1N5c3RlbS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzLnNwcmluZ1N5c3RlbT12b2lkIDAsdGhpcy5zcHJpbmcuZGVzdHJveSgpLHRoaXMuc3ByaW5nPXZvaWQgMCl9fSx7a2V5OiJfX2dldFNjcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U2Nyb2xsVG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTY3JvbGxUb3BfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFNjcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U2Nyb2xsVG9wX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsYmFycy5nZXRTY3JvbGxUb3AoKX19LHtrZXk6Il9fZ2V0U2Nyb2xsSGVpZ2h0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTY3JvbGxIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFNjcm9sbEhlaWdodF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U2Nyb2xsSGVpZ2h0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTY3JvbGxIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxiYXJzLmdldFNjcm9sbEhlaWdodCgpfX0se2tleToiX19nZXRIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEhlaWdodF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SGVpZ2h0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRIZWlnaHRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEhlaWdodF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbGJhcnMuZ2V0SGVpZ2h0KCl9fSx7a2V5OiJfX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwUmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbGJhcnM9ZX19LHtrZXk6Il9faGFuZGxlU3ByaW5nVXBkYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTcHJpbmdVcGRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVNwcmluZ1VwZGF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlU3ByaW5nVXBkYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVTcHJpbmdVcGRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRDdXJyZW50VmFsdWUoKTtpZighdGhpcy5zdG9wU2Nyb2xsKXJldHVybiB0PDE/KHRoaXMuc2Nyb2xsYmFycy5zY3JvbGxUb3AoMCksdm9pZCh0aGlzLnN0b3BTY3JvbGw9ITApKTp2b2lkIHRoaXMuc2Nyb2xsYmFycy5zY3JvbGxUb3AodCl9fSx7a2V5OiJfX3Njcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2Nyb2xsVG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zY3JvbGxUb3BfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Njcm9sbFRvcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2Nyb2xsVG9wX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KEYuRk9PVEVSX0VWRU5UUy5CQUNLX1RPX1RPUF9DTElDSyksdGhpcy5zdG9wU2Nyb2xsPSExO3ZhciBlPXRoaXMuc2Nyb2xsYmFycy5nZXRTY3JvbGxUb3AoKTt0aGlzLnNwcmluZy5zZXRDdXJyZW50VmFsdWUoZSkuc2V0QXRSZXN0KCksdGhpcy5zcHJpbmcuc2V0RW5kVmFsdWUoMCl9fSx7a2V5OiJfX2hhbmRsZVNjcm9sbEZyYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTY3JvbGxGcmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlU2Nyb2xsRnJhbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZVNjcm9sbEZyYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVTY3JvbGxGcmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvcCxuPWUuc2Nyb2xsTGVmdCxyPWUudG9wLG89dGhpcy5zY3JvbGxiYXJzLHM9by5sYXN0Vmlld1Njcm9sbFRvcCxpPW8ubGFzdFZpZXdTY3JvbGxMZWZ0LGE9dGhpcy5wcm9wcyxsPWEud2l0aEJhY2tUb1RvcCx1PWEub25MYXp5TG9hZDt0aGlzLnNldFN0YXRlKHtzaG93QnV0dG9uOmwmJnQ+MTAwfSksITEhPT11JiZyPi45JiZ1KCksdCE9PXMmJih0aGlzLnNjcm9sbGJhcnMudGh1bWJWZXJ0aWNhbC5zdHlsZS5vcGFjaXR5PTEpLG4hPT1pJiYodGhpcy5zY3JvbGxiYXJzLnRodW1iSG9yaXpvbnRhbC5zdHlsZS5vcGFjaXR5PTEpfX0se2tleToiX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVTY3JvbGxTdG9wX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxiYXJzLnRodW1iVmVydGljYWwuc3R5bGUub3BhY2l0eT0iIix0aGlzLnNjcm9sbGJhcnMudGh1bWJIb3Jpem9udGFsLnN0eWxlLm9wYWNpdHk9IiJ9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguU2Nyb2xsYmFycyx7cmVmOnRoaXMuc2V0dXBSZWYsY2xhc3NOYW1lOnEoInNjcm9sbC1jb21wb25lbnQiKSxhdXRvSGlkZTp0aGlzLnByb3BzLmF1dG9IaWRlLGF1dG9IZWlnaHQ6dGhpcy5wcm9wcy5hdXRvSGVpZ2h0LGF1dG9IZWlnaHRNaW46dGhpcy5wcm9wcy5hdXRvSGVpZ2h0TWluLGF1dG9IZWlnaHRNYXg6dGhpcy5wcm9wcy5hdXRvSGVpZ2h0TWF4LGF1dG9IaWRlVGltZW91dDp0aGlzLnByb3BzLmF1dG9IaWRlVGltZW91dCxyZW5kZXJUcmFja0hvcml6b250YWw6dGhpcy5wcm9wcy5yZW5kZXJUcmFja0hvcml6b250YWwscmVuZGVyVHJhY2tWZXJ0aWNhbDp0aGlzLnByb3BzLnJlbmRlclRyYWNrVmVydGljYWwscmVuZGVyVGh1bWJIb3Jpem9udGFsOnRoaXMucHJvcHMucmVuZGVyVGh1bWJIb3Jpem9udGFsLHJlbmRlclRodW1iVmVydGljYWw6dGhpcy5wcm9wcy5yZW5kZXJUaHVtYlZlcnRpY2FsLHJlbmRlclZpZXc6dGhpcy5wcm9wcy5yZW5kZXJWaWV3LGhpZGVUcmFja3NXaGVuTm90TmVlZGVkOnRoaXMucHJvcHMuaGlkZVRyYWNrc1doZW5Ob3ROZWVkZWQsdGh1bWJNaW5TaXplOnRoaXMucHJvcHMudGh1bWJNaW5TaXplLG9uU2Nyb2xsRnJhbWU6dGhpcy5oYW5kbGVTY3JvbGxGcmFtZSxvblNjcm9sbFN0b3A6dGhpcy5oYW5kbGVTY3JvbGxTdG9wfSx0aGlzLnByb3BzLmNoaWxkcmVuLHRoaXMuc3RhdGUuc2hvd0J1dHRvbiYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNzTmFtZTpxKCJiYWNrLXRvLXRvcCIpLG9uQ2xpY2s6dGhpcy5zY3JvbGxUb3B9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIix7Y2xhc3NOYW1lOnEoInRvcC1pY29uIil9LCgwLEkuZGVmYXVsdCkoVS5kZWZhdWx0KSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiU2Nyb2xsV3JhcHBlci5iYWNrVG9Ub3AiLGRlZmF1bHRNZXNzYWdlOiJCYWNrIHRvIHRvcCJ9KSkpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2NoaWxkcmVuOk0uZGVmYXVsdC5ub2RlLGF1dG9IaWRlOk0uZGVmYXVsdC5ib29sLGF1dG9IZWlnaHQ6TS5kZWZhdWx0LmJvb2wsYXV0b0hlaWdodE1pbjpNLmRlZmF1bHQubnVtYmVyLGF1dG9IaWRlVGltZW91dDpNLmRlZmF1bHQubnVtYmVyLGF1dG9IZWlnaHRNYXg6TS5kZWZhdWx0Lm9uZU9mVHlwZShbTS5kZWZhdWx0LnN0cmluZyxNLmRlZmF1bHQubnVtYmVyXSkscmVuZGVyVHJhY2tIb3Jpem9udGFsOk0uZGVmYXVsdC5mdW5jLHJlbmRlclRyYWNrVmVydGljYWw6TS5kZWZhdWx0LmZ1bmMscmVuZGVyVGh1bWJIb3Jpem9udGFsOk0uZGVmYXVsdC5mdW5jLHJlbmRlclRodW1iVmVydGljYWw6TS5kZWZhdWx0LmZ1bmMscmVuZGVyVmlldzpNLmRlZmF1bHQuZnVuYyxvbkxhenlMb2FkOk0uZGVmYXVsdC5vbmVPZlR5cGUoW00uZGVmYXVsdC5mdW5jLE0uZGVmYXVsdC5ib29sXSksaGlkZVRyYWNrc1doZW5Ob3ROZWVkZWQ6TS5kZWZhdWx0LmJvb2wsdGh1bWJNaW5TaXplOk0uZGVmYXVsdC5udW1iZXIsd2l0aEJhY2tUb1RvcDpNLmRlZmF1bHQuYm9vbCx0cmFja2luZzpNLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6TS5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOk0uZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOnt9LGF1dG9IaWRlOiExLGF1dG9IZWlnaHQ6ITEsYXV0b0hlaWdodE1pbjowLGF1dG9IZWlnaHRNYXg6IjEwMCUiLGF1dG9IaWRlVGltZW91dDo1MDAscmVuZGVyVHJhY2tIb3Jpem9udGFsOmZ1bmN0aW9uKGUpe3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IiwoMCx1LmRlZmF1bHQpKHt9LGUse2NsYXNzTmFtZTpxKCJ0cmFjay1ob3Jpem9udGFsIil9KSl9LHJlbmRlclRyYWNrVmVydGljYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLCgwLHUuZGVmYXVsdCkoe30sZSx7Y2xhc3NOYW1lOnEoInRyYWNrLXZlcnRpY2FsIil9KSl9LHJlbmRlclRodW1iSG9yaXpvbnRhbDpmdW5jdGlvbihlKXtyZXR1cm4gTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsKDAsdS5kZWZhdWx0KSh7fSxlLHtjbGFzc05hbWU6cSgidGh1bWItaG9yaXpvbnRhbCIpfSkpfSxyZW5kZXJUaHVtYlZlcnRpY2FsOmZ1bmN0aW9uKGUpe3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IiwoMCx1LmRlZmF1bHQpKHt9LGUse2NsYXNzTmFtZTpxKCJ0aHVtYi12ZXJ0aWNhbCIpfSkpfSxyZW5kZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2IiwoMCx1LmRlZmF1bHQpKHt9LGUse2NsYXNzTmFtZTpxKCJzY3JvbGxpbmctY29udGVudCIpfSkpfSxvbkxhenlMb2FkOiExLGhpZGVUcmFja3NXaGVuTm90TmVlZGVkOiExLHRodW1iTWluU2l6ZTozMCx3aXRoQmFja1RvVG9wOiExfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIlNjcm9sbFdyYXBwZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL3Njcm9sbFdyYXBwZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL3Njcm9sbFdyYXBwZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9zY3JvbGxXcmFwcGVyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic2Nyb2xsLWNvbXBvbmVudCI6InNjcm9sbFdyYXBwZXJfX3Njcm9sbC1jb21wb25lbnRfX18zdnV2NyIsInRodW1iLWhvcml6b250YWwiOiJzY3JvbGxXcmFwcGVyX190aHVtYi1ob3Jpem9udGFsX19fMzJWVGUiLCJ0aHVtYi12ZXJ0aWNhbCI6InNjcm9sbFdyYXBwZXJfX3RodW1iLXZlcnRpY2FsX19fMlJOUHciLCJ0cmFjay1ob3Jpem9udGFsIjoic2Nyb2xsV3JhcHBlcl9fdHJhY2staG9yaXpvbnRhbF9fXzMyeWJDIiwidHJhY2stdmVydGljYWwiOiJzY3JvbGxXcmFwcGVyX190cmFjay12ZXJ0aWNhbF9fXzFNU3R5Iiwic2Nyb2xsaW5nLWNvbnRlbnQiOiJzY3JvbGxXcmFwcGVyX19zY3JvbGxpbmctY29udGVudF9fX1hXZ2VHIiwiYmFjay10by10b3AiOiJzY3JvbGxXcmFwcGVyX19iYWNrLXRvLXRvcF9fXzE2ZXhpIiwidG9wLWljb24iOiJzY3JvbGxXcmFwcGVyX190b3AtaWNvbl9fXzIxWmhYIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vc2VjdGlvbkhlYWRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3NlY3Rpb25IZWFkZXIvc2VjdGlvbkhlYWRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2VjdGlvbkhlYWRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU2VjdGlvbkhlYWRlcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zZWN0aW9uSGVhZGVyL3NlY3Rpb25IZWFkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWN0aW9uSGVhZGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3NlY3Rpb25IZWFkZXIvc2VjdGlvbkhlYWRlci5zY3NzIiksdT1yKGwpLGM9YS5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxkPXQuU2VjdGlvbkhlYWRlcj1mdW5jdGlvbih0KXt2YXIgbj10LnRleHQscj10LmVycm9yO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpjKCJzZWN0aW9uLWhlYWRlciIse2Vycm9yOnJ9KX0sbil9O2QucHJvcFR5cGVzPXt0ZXh0OnMuZGVmYXVsdC5vbmVPZlR5cGUoW3MuZGVmYXVsdC5ub2RlLHMuZGVmYXVsdC5zdHJpbmddKSxlcnJvcjpzLmRlZmF1bHQuYm9vbH0sZC5kZWZhdWx0UHJvcHM9e3RleHQ6IiIsZXJyb3I6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJTZWN0aW9uSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vc2VjdGlvbkhlYWRlci9zZWN0aW9uSGVhZGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vc2VjdGlvbkhlYWRlci9zZWN0aW9uSGVhZGVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zZWN0aW9uSGVhZGVyL3NlY3Rpb25IZWFkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzZWN0aW9uLWhlYWRlciI6InNlY3Rpb25IZWFkZXJfX3NlY3Rpb24taGVhZGVyX19fMWk3LVAiLGVycm9yOiJzZWN0aW9uSGVhZGVyX19lcnJvcl9fXzNUWW5OIn19LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkFMSUdOX0xFRlQ9ImxlZnQiLG89dC5BTElHTl9SSUdIVD0icmlnaHQiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJBTElHTl9MRUZUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiQUxJR05fUklHSFQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvaG92ZXJhYmxlVG9vbHRpcC9ob3ZlcmFibGVUb29sdGlwLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaG92ZXItcmVjdCI6ImhvdmVyYWJsZVRvb2x0aXBfX2hvdmVyLXJlY3RfX18yTExKMSIsImhvdmVyYWJsZS10b29sdGlwIjoiaG92ZXJhYmxlVG9vbHRpcF9faG92ZXJhYmxlLXRvb2x0aXBfX18xSnVIcyIsIm5vLWFycm93IjoiaG92ZXJhYmxlVG9vbHRpcF9fbm8tYXJyb3dfX18xTDhnMCIsIm5vLW1vYmlsZSI6ImhvdmVyYWJsZVRvb2x0aXBfX25vLW1vYmlsZV9fXzNKM1lUIiwiZGVza3RvcC1vbmx5IjoiaG92ZXJhYmxlVG9vbHRpcF9fZGVza3RvcC1vbmx5X19fMXdkQ2wiLCJob3ZlcmFibGUtdG9vbHRpcC1jb250ZW50IjoiaG92ZXJhYmxlVG9vbHRpcF9faG92ZXJhYmxlLXRvb2x0aXAtY29udGVudF9fXzFrZk56In19LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvaG92ZXJhYmxlVG9vbHRpcC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL2hvdmVyYWJsZVRvb2x0aXAvd2l0aEhvdmVyYWJsZVRvb2x0aXAuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIndpdGhIb3ZlcmFibGVUb29sdGlwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci53aXRoSG92ZXJhYmxlVG9vbHRpcH19KX0sIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9ob3ZlcmFibGVUb29sdGlwL3dpdGhIb3ZlcmFibGVUb29sdGlwLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEQodyh0LGUpLGUpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC53aXRoSG92ZXJhYmxlVG9vbHRpcD12b2lkIDA7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksaT1yKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFM9cihPKSxSPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9ob3ZlcmFibGVUb29sdGlwL2hvdmVyYWJsZVRvb2x0aXAuc2NzcyIpLGo9cihSKSx4PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9jb25zdGFudHMuanMiKSxMPXtXcmFwcGVyOntkaXNwbGF5TmFtZToiV3JhcHBlciIsaXNJbkZ1bmN0aW9uOiEwfX0sRD0oMCxULmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvaG92ZXJhYmxlVG9vbHRpcC93aXRoSG92ZXJhYmxlVG9vbHRpcC5qc3giLGNvbXBvbmVudHM6TCxsb2NhbHM6W2VdLGltcG9ydHM6W3kuZGVmYXVsdF19KSx3PSgwLGIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9ob3ZlcmFibGVUb29sdGlwL3dpdGhIb3ZlcmFibGVUb29sdGlwLmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbXSxpbXBvcnRzOlt5LmRlZmF1bHQsaC5kZWZhdWx0XX0pLE09Uy5kZWZhdWx0LmJpbmQoai5kZWZhdWx0KSxrPXQud2l0aEhvdmVyYWJsZVRvb2x0aXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5Ub29sdGlwQ29tcG9uZW50LG49ZS5kYXRhO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixzO3JldHVybiBvKCJXcmFwcGVyIikoKHM9cj1mdW5jdGlvbihyKXtmdW5jdGlvbiBvKCl7cmV0dXJuKDAsbC5kZWZhdWx0KSh0aGlzLG8pLCgwLF8uZGVmYXVsdCkodGhpcywoby5fX3Byb3RvX198fCgwLGkuZGVmYXVsdCkobykpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZi5kZWZhdWx0KShvLHIpLCgwLGMuZGVmYXVsdCkobyxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bi53aWR0aHx8MjAwLHQ9MDtzd2l0Y2godGhpcy50b29sdGlwLnN0eWxlLndpZHRoPWUrInB4IixuLmFsaWduKXtjYXNlIHguQUxJR05fTEVGVDp0PTA7YnJlYWs7Y2FzZSB4LkFMSUdOX1JJR0hUOnQ9dGhpcy5ob3ZlclJlY3Qub2Zmc2V0V2lkdGgtZTticmVhaztkZWZhdWx0OnQ9IiIrKHRoaXMuaG92ZXJSZWN0Lm9mZnNldFdpZHRoLzItZS8yKX1uLmxlZnRPZmZzZXQmJih0Kz1uLmxlZnRPZmZzZXQpLHRoaXMudG9vbHRpcC5zdHlsZS5sZWZ0PXQrInB4IixuLnZlcnRpY2FsT2Zmc2V0JiYodGhpcy50b29sdGlwLnN0eWxlLnRvcD10aGlzLmhvdmVyUmVjdC5vZmZzZXRIZWlnaHQrbi52ZXJ0aWNhbE9mZnNldCsicHgiKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOk0oImhvdmVyLXJlY3QiKSxyZWY6ZnVuY3Rpb24oZSl7ci5ob3ZlclJlY3Q9ZX19LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGUsdGhpcy5wcm9wcyx0aGlzLnByb3BzLmNoaWxkcmVuKSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKGUpe3IudG9vbHRpcD1lfSxjbGFzc05hbWU6TSgiaG92ZXJhYmxlLXRvb2x0aXAiLHsibm8tYXJyb3ciOm4ubm9BcnJvdywibm8tbW9iaWxlIjpuLm5vTW9iaWxlLCJkZXNrdG9wLW9ubHkiOm4uZGVza3RvcE9ubHl9KX0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpNKCJob3ZlcmFibGUtdG9vbHRpcC1jb250ZW50Iil9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHQsdGhpcy5wcm9wcykpKSl9fV0pLG99KEUuQ29tcG9uZW50KSxyLnByb3BUeXBlcz17Y2hpbGRyZW46Qy5kZWZhdWx0Lm5vZGV9LHIuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfSxzKSl9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywid2l0aEhvdmVyYWJsZVRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9ob3ZlcmFibGVUb29sdGlwL3dpdGhIb3ZlcmFibGVUb29sdGlwLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE0sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvaG92ZXJhYmxlVG9vbHRpcC93aXRoSG92ZXJhYmxlVG9vbHRpcC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigyMDAsIkRFRkFVTFRfVE9PTFRJUF9XSURUSCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL2hvdmVyYWJsZVRvb2x0aXAvd2l0aEhvdmVyYWJsZVRvb2x0aXAuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdGV4dFRvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90ZXh0VG9vbHRpcC90ZXh0VG9vbHRpcC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVGV4dFRvb2x0aXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRleHRUb29sdGlwfX0pfSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL3RleHRUb29sdGlwL3RleHRUb29sdGlwLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dFRvb2x0aXA9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdGV4dFRvb2x0aXAvdGV4dFRvb2x0aXAuc2NzcyIpLHU9cihsKSxjPXMuZGVmYXVsdC5iaW5kKHUuZGVmYXVsdCksZD10LlRleHRUb29sdGlwPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9vbHRpcENvbnRlbnQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoInRleHQtdG9vbHRpcCIpfSxuKX07ZC5wcm9wVHlwZXM9e3Rvb2x0aXBDb250ZW50OmEuZGVmYXVsdC5zdHJpbmd9LGQuZGVmYXVsdFByb3BzPXt0b29sdGlwQ29udGVudDoiIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlRleHRUb29sdGlwIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdGV4dFRvb2x0aXAvdGV4dFRvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90ZXh0VG9vbHRpcC90ZXh0VG9vbHRpcC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdGV4dFRvb2x0aXAvdGV4dFRvb2x0aXAuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJkZWZlY3QtdHlwZS10b29sdGlwIjoidGV4dFRvb2x0aXBfX2RlZmVjdC10eXBlLXRvb2x0aXBfX19UVnRDbSJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL3Rvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL3dpdGhUb29sdGlwLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ3aXRoVG9vbHRpcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIud2l0aFRvb2x0aXB9fSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC90b29sdGlwLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9vbHRpcD12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvaW5kZXguanMiKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxqPXIoUikseD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC90b29sdGlwLnNjc3MiKSxMPXIoeCksRD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvY29uc3RhbnRzLmpzIiksdz17VG9vbHRpcDp7ZGlzcGxheU5hbWU6IlRvb2x0aXAifX0sTT0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC90b29sdGlwLmpzeCIsY29tcG9uZW50czp3LGxvY2FsczpbZV0saW1wb3J0czpbdi5kZWZhdWx0XX0pLGs9KDAsRS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL3Rvb2x0aXAvdG9vbHRpcC5qc3giLGNvbXBvbmVudHM6dyxsb2NhbHM6W10saW1wb3J0czpbdi5kZWZhdWx0LGcuZGVmYXVsdF19KSxJPWouZGVmYXVsdC5iaW5kKEwuZGVmYXVsdCksUD10LlRvb2x0aXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNKGsodCxlKSxlKX19KCJUb29sdGlwIikoKHM9bz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsdS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksbD0wO2w8cztsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49cj0oMCxwLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGEuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17c2hvd246ITF9LHIuc2V0VG9vbHRpcFBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXRUb29sdGlwUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0Qm94PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRCb3hfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIubW91c2VMZWF2ZUhhbmRsZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX21vdXNlTGVhdmVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAscC5kZWZhdWx0KShyLG8pfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6Il9fbW91c2VMZWF2ZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21vdXNlTGVhdmVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCb3hfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJveF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0VG9vbHRpcFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRUb29sdGlwUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmhvdmVyUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix0aGlzLm1vdXNlTGVhdmVIYW5kbGVyLCExKSx0aGlzLnNldFRvb2x0aXBQb3NpdGlvbigpLHRoaXMub25Nb3VudCgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5ob3ZlclJlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdGhpcy5tb3VzZUxlYXZlSGFuZGxlciwhMSl9fSx7a2V5OiJvbk1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe3Nob3duOiEwfSl9fSx7a2V5OiJfX3NldFRvb2x0aXBQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuZGF0YSx0PXRoaXMuZ2V0Qm94KHRoaXMucHJvcHMuaG92ZXJSZWN0KSxuPWUud2lkdGh8fDIwMCxyPTA7c3dpdGNoKGUuZHluYW1pY1dpZHRoP3RoaXMudG9vbHRpcC5zdHlsZS5tYXhXaWR0aD1uKyJweCI6dGhpcy50b29sdGlwLnN0eWxlLndpZHRoPW4rInB4Iix0aGlzLnRvb2x0aXAuc3R5bGUudG9wPXQudG9wK3QuaGVpZ2h0KyJweCIsZS5hbGlnbil7Y2FzZSBELkFMSUdOX0xFRlQ6cj10LmxlZnQ7YnJlYWs7Y2FzZSBELkFMSUdOX1JJR0hUOnI9dC5yaWdodC1uO2JyZWFrO2RlZmF1bHQ6cj10LmxlZnQrKHQud2lkdGgvMi1uLzIpfWUubGVmdE9mZnNldCYmKHIrPWUubGVmdE9mZnNldCksdGhpcy50b29sdGlwLnN0eWxlLmxlZnQ9cisicHgifX0se2tleToiX19nZXRCb3hfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsdG9wOnQudG9wK3dpbmRvdy5wYWdlWU9mZnNldCxsZWZ0OnQubGVmdCt3aW5kb3cucGFnZVhPZmZzZXQscmlnaHQ6dC5yaWdodH19fSx7a2V5OiJfX21vdXNlTGVhdmVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7c2hvd246ITF9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLkNTU1RyYW5zaXRpb24se2luOnRoaXMuc3RhdGUuc2hvd24sdGltZW91dDozMDAsY2xhc3NOYW1lczpJKCJ0b29sdGlwLWZhZGUiKSxvbkV4aXRlZDp0aGlzLnByb3BzLmhpZGVUb29sdGlwfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKHQpe2UudG9vbHRpcD10fSxjbGFzc05hbWU6SSgidG9vbHRpcCIseyJuby1hcnJvdyI6dGhpcy5wcm9wcy5kYXRhLm5vQXJyb3d9KX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpJKCJ0b29sdGlwLWNvbnRlbnQiKX0sdGhpcy5wcm9wcy5jaGlsZHJlbikpKX19XSksdH0oeS5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtkYXRhOlMuZGVmYXVsdC5vYmplY3QsaG92ZXJSZWN0OlMuZGVmYXVsdC5vYmplY3QsaGlkZVRvb2x0aXA6Uy5kZWZhdWx0LmZ1bmMsY2hpbGRyZW46Uy5kZWZhdWx0Lm5vZGV9LG8uZGVmYXVsdFByb3BzPXtkYXRhOnt9LGhvdmVyUmVjdDpudWxsLGhpZGVUb29sdGlwOmZ1bmN0aW9uKCl7fSxjaGlsZHJlbjpudWxsfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsIlRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL3Rvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL3Rvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoMjAwLCJERUZBVUxUX1RPT0xUSVBfV0lEVEgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL3Rvb2x0aXAuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC90b29sdGlwLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt0b29sdGlwOiJ0b29sdGlwX190b29sdGlwX19fMjUydzIiLCJuby1hcnJvdyI6InRvb2x0aXBfX25vLWFycm93X19fM0VhU2oiLCJ0b29sdGlwLWNvbnRlbnQiOiJ0b29sdGlwX190b29sdGlwLWNvbnRlbnRfX18zNVV2MSJ9fSwiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL3Rvb2x0aXAvd2l0aFRvb2x0aXAuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChMKHQsZSksZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LndpdGhUb29sdGlwPXZvaWQgMDt2YXIgcz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxpPXIocyksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL3Rvb2x0aXAvdG9vbHRpcC5qc3giKSxqPXtXcmFwcGVyOntkaXNwbGF5TmFtZToiV3JhcHBlciIsaXNJbkZ1bmN0aW9uOiEwfX0seD0oMCxULmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC93aXRoVG9vbHRpcC5qc3giLGNvbXBvbmVudHM6aixsb2NhbHM6W2VdLGltcG9ydHM6W3kuZGVmYXVsdF19KSxMPSgwLGIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL3dpdGhUb29sdGlwLmpzeCIsY29tcG9uZW50czpqLGxvY2FsczpbXSxpbXBvcnRzOlt5LmRlZmF1bHQsaC5kZWZhdWx0XX0pLEQ9dC53aXRoVG9vbHRpcD1mdW5jdGlvbihlKXt2YXIgdD1lLlRvb2x0aXBDb21wb25lbnQsbj1lLmRhdGE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLHM7cmV0dXJuIG8oIldyYXBwZXIiKSgocz1yPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG8oKXt2YXIgZSx0LG4scjsoMCxsLmRlZmF1bHQpKHRoaXMsbyk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYT1BcnJheShzKSx1PTA7dTxzO3UrKylhW3VdPWFyZ3VtZW50c1t1XTtyZXR1cm4gdD1uPSgwLF8uZGVmYXVsdCkodGhpcywoZT1vLl9fcHJvdG9fX3x8KDAsaS5kZWZhdWx0KShvKSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSxuLnN0YXRlPXtzaG93bjohMSxob3ZlclJlY3Q6bnVsbH0sbi50b29sdGlwUm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9vbHRpcC1yb290Iiksbi5tb3VzZUVudGVySGFuZGxlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPW4pLl9fbW91c2VFbnRlckhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG4uaGlkZVRvb2x0aXA9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1uKS5fX2hpZGVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyPXQsKDAsXy5kZWZhdWx0KShuLHIpfXJldHVybigwLGYuZGVmYXVsdCkobyxyKSwoMCxjLmRlZmF1bHQpKG8sW3trZXk6Il9faGlkZVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hpZGVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19tb3VzZUVudGVySGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbW91c2VFbnRlckhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdmVyUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix0aGlzLm1vdXNlRW50ZXJIYW5kbGVyLCExKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG92ZXJSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHRoaXMubW91c2VFbnRlckhhbmRsZXIsITEpfX0se2tleToiX19tb3VzZUVudGVySGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe3Nob3duOiEwfSl9fSx7a2V5OiJfX2hpZGVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7c2hvd246ITF9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChFLkZyYWdtZW50LG51bGwsdGhpcy5zdGF0ZS5zaG93biYmQy5kZWZhdWx0LmNyZWF0ZVBvcnRhbCh5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChSLlRvb2x0aXAse2RhdGE6bixob3ZlclJlY3Q6dGhpcy5ob3ZlclJlY3QsaGlkZVRvb2x0aXA6dGhpcy5oaWRlVG9vbHRpcH0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodCx0aGlzLnByb3BzKSksdGhpcy50b29sdGlwUm9vdCkseS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0scmVmOmZ1bmN0aW9uKGUpe3IuaG92ZXJSZWN0PWV9fSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLHRoaXMucHJvcHMsdGhpcy5wcm9wcy5jaGlsZHJlbikpKX19XSksb30oRS5Db21wb25lbnQpLHIucHJvcFR5cGVzPXtjaGlsZHJlbjpTLmRlZmF1bHQubm9kZX0sci5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGx9LHMpKX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEQsIndpdGhUb29sdGlwIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdG9vbHRpcC93aXRoVG9vbHRpcC5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy9wcmVsb2FkZXJzL3NwaW5uaW5nUHJlbG9hZGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3ByZWxvYWRlcnMvc3Bpbm5pbmdQcmVsb2FkZXIvc3Bpbm5pbmdQcmVsb2FkZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNwaW5uaW5nUHJlbG9hZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TcGlubmluZ1ByZWxvYWRlcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvcHJlbG9hZGVycy9zcGlubmluZ1ByZWxvYWRlci9zcGlubmluZ1ByZWxvYWRlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNwaW5uaW5nUHJlbG9hZGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxzPXIobyksaT1uKCIuL3NyYy9jb21wb25lbnRzL3ByZWxvYWRlcnMvc3Bpbm5pbmdQcmVsb2FkZXIvc3Bpbm5pbmdQcmVsb2FkZXIuc2NzcyIpLGE9cihpKSxsPXMuZGVmYXVsdC5iaW5kKGEuZGVmYXVsdCksdT10LlNwaW5uaW5nUHJlbG9hZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmwoInNwaW5uaW5nLXByZWxvYWRlciIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsKCJwcmVsb2FkZXIiKX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bCgicHJlbG9hZGVyLXBhcnQiKX0pLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmwoInByZWxvYWRlci1wYXJ0Iil9KSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsKCJwcmVsb2FkZXItcGFydCIpfSkpKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlNwaW5uaW5nUHJlbG9hZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3ByZWxvYWRlcnMvc3Bpbm5pbmdQcmVsb2FkZXIvc3Bpbm5pbmdQcmVsb2FkZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvcHJlbG9hZGVycy9zcGlubmluZ1ByZWxvYWRlci9zcGlubmluZ1ByZWxvYWRlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL3ByZWxvYWRlcnMvc3Bpbm5pbmdQcmVsb2FkZXIvc3Bpbm5pbmdQcmVsb2FkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzcGlubmluZy1wcmVsb2FkZXIiOiJzcGlubmluZ1ByZWxvYWRlcl9fc3Bpbm5pbmctcHJlbG9hZGVyX19fMjlpUmEiLHByZWxvYWRlcjoic3Bpbm5pbmdQcmVsb2FkZXJfX3ByZWxvYWRlcl9fXzNROHZBIiwicHJlbG9hZGVyLXBhcnQiOiJzcGlubmluZ1ByZWxvYWRlcl9fcHJlbG9hZGVyLXBhcnRfX183OHJJeiIsc3Bpbjoic3Bpbm5pbmdQcmVsb2FkZXJfX3NwaW5fX19jZjhibCJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vYzNjaGFydC9jM2NoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQzNDaGFydD12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2MzL2MzLmpzIikseD1yKGopLEw9e0MzQ2hhcnQ6e2Rpc3BsYXlOYW1lOiJDM0NoYXJ0In19LEQ9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vYzNjaGFydC9jM2NoYXJ0LmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLHc9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vYzNjaGFydC9jM2NoYXJ0LmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLE09dC5DM0NoYXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRCh3KHQsZSksZSl9fSgiQzNDaGFydCIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2VuZXJhdGVDaGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2VuZXJhdGVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX2dlbmVyYXRlQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUNoYXJ0KHRoaXMucHJvcHMuY29uZmlnKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUNoYXJ0KHRoaXMucHJvcHMuY29uZmlnKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveUNoYXJ0KCl9fSx7a2V5OiJkZXN0cm95Q2hhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jaGFydCYmdGhpcy5jaGFydC5kZXN0cm95KCl9fSx7a2V5OiJfX2dlbmVyYXRlQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxhLmRlZmF1bHQpKHtiaW5kdG86ZX0sdCk7cmV0dXJuIHguZGVmYXVsdC5nZW5lcmF0ZShuKX19LHtrZXk6ImxvYWROZXdEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNoYXJ0LmxvYWQoZSl9fSx7a2V5OiJ1bmxvYWREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2hhcnQudW5sb2FkKCl9fSx7a2V5OiJ1cGRhdGVDaGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jaGFydHx8KHRoaXMuY2hhcnQ9dGhpcy5nZW5lcmF0ZUNoYXJ0KHRoaXMubm9kZSxlKSx0aGlzLnByb3BzLm9uQ2hhcnRDcmVhdGVkKHRoaXMuY2hhcnQsdGhpcy5ub2RlKSksZS51bmxvYWRCZWZvcmVMb2FkJiZ0aGlzLnVubG9hZERhdGEoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLmRlZmF1bHQuRnJhZ21lbnQsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKHQpe2Uubm9kZT10fSxjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWUsc3R5bGU6dGhpcy5wcm9wcy5zdHlsZX0pLHRoaXMucHJvcHMuY2hpbGRyZW4pfX1dKSx0fShBLmRlZmF1bHQuQ29tcG9uZW50KSxvLnByb3BUeXBlcz17Y2hpbGRyZW46Ui5kZWZhdWx0Lm5vZGUsY29uZmlnOlIuZGVmYXVsdC5vYmplY3Qsb25DaGFydENyZWF0ZWQ6Ui5kZWZhdWx0LmZ1bmMsY2xhc3NOYW1lOlIuZGVmYXVsdC5zdHJpbmcsc3R5bGU6Ui5kZWZhdWx0Lm9iamVjdH0sby5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGwsY29uZmlnOnt9LG9uQ2hhcnRDcmVhdGVkOmZ1bmN0aW9uKCl7fSxjbGFzc05hbWU6IiIsc3R5bGU6e319LHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihNLCJDM0NoYXJ0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2MzY2hhcnQuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2MzY2hhcnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2MzY2hhcnQvYzNjaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQzNDaGFydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQzNDaGFydH19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2xlZ2VuZC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbGVnZW5kL2xlZ2VuZC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGVnZW5kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5MZWdlbmR9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvbGVnZW5kLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGVnZW5kPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbGVnZW5kL2xlZ2VuZC5zY3NzIiksUD1yKEkpLE49e0xlZ2VuZDp7ZGlzcGxheU5hbWU6IkxlZ2VuZCJ9fSxIPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2xlZ2VuZC9sZWdlbmQuanN4Iixjb21wb25lbnRzOk4sbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksRj0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvbGVnZW5kLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLEI9Ui5kZWZhdWx0LmJpbmQoUC5kZWZhdWx0KSxVPXQuTGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSChGKHQsZSksZSl9fSgiTGVnZW5kIikoKG89KDAsTC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57ZGVmZWN0VHlwZXM6KDAsRC5kZWZlY3RUeXBlc1NlbGVjdG9yKShlKX19KSkocz0oMCx3LmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25DbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbk1vdXNlT3Zlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0RWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEVsZW1lbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldFRhcmdldD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0VGFyZ2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0VGFyZ2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRUYXJnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEVsZW1lbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFbGVtZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0VGFyZ2V0KGUpO3QuY2xhc3NMaXN0LnRvZ2dsZShCKCJ1bmNoZWNrZWQiKSksdGhpcy5wcm9wcy5vbkNsaWNrKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWlkIikpfX0se2tleToiX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRUYXJnZXQoZSk7dGhpcy5wcm9wcy5vbk1vdXNlT3Zlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1pZCIpKX19LHtrZXk6Il9fZ2V0RWxlbWVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEVsZW1lbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRFbGVtZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RWxlbWVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEVsZW1lbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10Lml0ZW1zLHI9dC5ub1RvdGFsLG89dC5vbk1vdXNlT3V0LHM9dC5pbnRsLmZvcm1hdE1lc3NhZ2U7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPSgwLGsuZ2V0SXRlbU5hbWVDb25maWcpKHQpO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2tleTp0LCJkYXRhLWlkIjp0LGNsYXNzTmFtZTpCKCJsZWdlbmQtaXRlbSIpLG9uQ2xpY2s6ZS5vbkNsaWNrLG9uTW91c2VPdmVyOmUub25Nb3VzZU92ZXIsb25Nb3VzZU91dDpvfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpCKCJjb2xvci1tYXJrIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjooMCxrLmdldEl0ZW1Db2xvcikobixlLnByb3BzLmRlZmVjdFR5cGVzKX19KSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpCKCJpdGVtLW5hbWUiKX0sKDAsay5nZXRJdGVtTmFtZSkobixlLnByb3BzLmRlZmVjdFR5cGVzLHMscikpKX0pfX0se2tleToiX19nZXRUYXJnZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFRhcmdldF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0VGFyZ2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRUYXJnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFRhcmdldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoImRhdGEtaWQiKT90OnQucGFyZW50RWxlbWVudH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmN1c3RvbUJsb2NrO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoImxlZ2VuZCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLlNjcm9sbFdyYXBwZXIse2F1dG9IaWRlOiEwLGF1dG9IZWlnaHQ6ITAsYXV0b0hlaWdodE1heDo2NSxoaWRlVHJhY2tzV2hlbk5vdE5lZWRlZDohMH0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpCKCJjb250ZW50LXdyYXBwZXIiKX0sZT9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoIndpdGgtY3VzdG9tLWJsb2NrIil9LGUsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpCKCJsZWdlbmQtZWxlbWVudHMiKX0sdGhpcy5nZXRFbGVtZW50cygpKSk6dGhpcy5nZXRFbGVtZW50cygpKSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCxkZWZlY3RUeXBlczp4LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsaXRlbXM6eC5kZWZhdWx0LmFycmF5LG5vVG90YWw6eC5kZWZhdWx0LmJvb2wsb25DbGljazp4LmRlZmF1bHQuZnVuYyxvbk1vdXNlT3Zlcjp4LmRlZmF1bHQuZnVuYyxvbk1vdXNlT3V0OnguZGVmYXVsdC5mdW5jLGN1c3RvbUJsb2NrOnguZGVmYXVsdC5ub2RlfSxpLmRlZmF1bHRQcm9wcz17aXRlbXM6W10sbm9Ub3RhbDohMSxvbkNsaWNrOmZ1bmN0aW9uKCl7fSxvbk1vdXNlT3ZlcjpmdW5jdGlvbigpe30sb25Nb3VzZU91dDpmdW5jdGlvbigpe30sY3VzdG9tQmxvY2s6bnVsbH0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiTGVnZW5kIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvbGVnZW5kLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvbGVnZW5kLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbGVnZW5kL2xlZ2VuZC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17bGVnZW5kOiJsZWdlbmRfX2xlZ2VuZF9fXzFxcnZGIiwiY29udGVudC13cmFwcGVyIjoibGVnZW5kX19jb250ZW50LXdyYXBwZXJfX18zdnhEaSIsIndpdGgtY3VzdG9tLWJsb2NrIjoibGVnZW5kX193aXRoLWN1c3RvbS1ibG9ja19fXzJmak9hIiwibGVnZW5kLWVsZW1lbnRzIjoibGVnZW5kX19sZWdlbmQtZWxlbWVudHNfX18xNDFDUSIsImNvbG9yLW1hcmsiOiJsZWdlbmRfX2NvbG9yLW1hcmtfX18xaWJiSCIsdW5jaGVja2VkOiJsZWdlbmRfX3VuY2hlY2tlZF9fXzJxV0lNIiwiaXRlbS1uYW1lIjoibGVnZW5kX19pdGVtLW5hbWVfX18yNTk4biIsImxlZ2VuZC1pdGVtIjoibGVnZW5kX19sZWdlbmQtaXRlbV9fXzFsaHc0In19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9tZXNzYWdlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tZXNzYWdlcz12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxvPXQubWVzc2FnZXM9KDAsci5kZWZpbmVNZXNzYWdlcykoe3RvdGFsOntpZDoiQ2hhcnRzLnRvdGFsIixkZWZhdWx0TWVzc2FnZToiVG90YWwge3R5cGV9In0sc2k6e2lkOiJDaGFydHMuc2kiLGRlZmF1bHRNZXNzYWdlOiJTSSJ9LGFiOntpZDoiQ2hhcnRzLmFiIixkZWZhdWx0TWVzc2FnZToiQUIifSx0aTp7aWQ6IkNoYXJ0cy50aSIsZGVmYXVsdE1lc3NhZ2U6IlRJIn0scGI6e2lkOiJDaGFydHMucGIiLGRlZmF1bHRNZXNzYWdlOiJQQiJ9LG5kOntpZDoiQ2hhcnRzLm5kIixkZWZhdWx0TWVzc2FnZToiTkQifSxwYXNzZWQ6e2lkOiJDaGFydHMucGFzc2VkIixkZWZhdWx0TWVzc2FnZToiUGFzc2VkIn0sZmFpbGVkOntpZDoiQ2hhcnRzLmZhaWxlZCIsZGVmYXVsdE1lc3NhZ2U6IkZhaWxlZCJ9LHNraXBwZWQ6e2lkOiJDaGFydHMuc2tpcHBlZCIsZGVmYXVsdE1lc3NhZ2U6IlNraXBwZWQifSxub3RQYXNzZWQ6e2lkOiJDaGFydHMubm90UGFzc2VkIixkZWZhdWx0TWVzc2FnZToiTm90IHBhc3NlZCJ9LGNhc2VzOntpZDoiQ2hhcnRzLmNhc2VzIixkZWZhdWx0TWVzc2FnZToiY2FzZXMifSxsYXVuY2hOYW1lOntpZDoiQ2hhcnRzLmxhdW5jaE5hbWUiLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggbmFtZToifSxmYWlsZWRTa2lwcGVkVG90YWw6e2lkOiJDaGFydHMuZmFpbGVkU2tpcHBlZFRvdGFsIixkZWZhdWx0TWVzc2FnZToiJSAoRmFpbGVkK1NraXBwZWQpL1RvdGFsIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbWVzc2FnZXMuanMiKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVG9vbHRpcFdyYXBwZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRvb2x0aXBXcmFwcGVyfX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcENvbnRlbnQvaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVG9vbHRpcENvbnRlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLlRvb2x0aXBDb250ZW50fX0pfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC90b29sdGlwQ29udGVudC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC90b29sdGlwQ29udGVudC90b29sdGlwQ29udGVudC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVG9vbHRpcENvbnRlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRvb2x0aXBDb250ZW50fX0pfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC90b29sdGlwQ29udGVudC90b29sdGlwQ29udGVudC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9vbHRpcENvbnRlbnQ9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIiksZD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL3Rvb2x0aXBDb250ZW50L3Rvb2x0aXBDb250ZW50LnNjc3MiKSxfPXIoZCkscD11LmRlZmF1bHQuYmluZChfLmRlZmF1bHQpLGY9dC5Ub29sdGlwQ29udGVudD1mdW5jdGlvbihlKXt2YXIgdD1lLmxhdW5jaE5hbWUsbj1lLmxhdW5jaE51bWJlcixyPWUuc3RhcnRUaW1lLG89ZS5pdGVtQ2FzZXMsaT1lLmNvbG9yLGE9ZS5pdGVtTmFtZTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocy5kZWZhdWx0LkZyYWdtZW50LG51bGwscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJsYXVuY2gtbmFtZSIpfSx0LG4mJiIgIyIrbiksciYmcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJsYXVuY2gtc3RhcnQtdGltZSIpfSwoMCxjLmRhdGVGb3JtYXQpKHIpKSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoIml0ZW0td3JhcHBlciIpfSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpwKCJjb2xvci1tYXJrIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjppfX0pLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnAoIml0ZW0tbmFtZSIpfSxhKyI6Iikscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6cCgiaXRlbS1jYXNlcyIpfSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxvKSkpKX07Zi5wcm9wVHlwZXM9e2xhdW5jaE5hbWU6YS5kZWZhdWx0LnN0cmluZyxsYXVuY2hOdW1iZXI6YS5kZWZhdWx0Lm51bWJlcixzdGFydFRpbWU6YS5kZWZhdWx0Lm51bWJlcixpdGVtQ2FzZXM6YS5kZWZhdWx0Lm9uZU9mVHlwZShbYS5kZWZhdWx0Lm51bWJlcixhLmRlZmF1bHQuc3RyaW5nXSksaXRlbU5hbWU6YS5kZWZhdWx0LnN0cmluZyxjb2xvcjphLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LGYuZGVmYXVsdFByb3BzPXtsYXVuY2hOYW1lOiIiLGxhdW5jaE51bWJlcjoiIixzdGFydFRpbWU6MCxpdGVtQ2FzZXM6MCxpdGVtTmFtZToiIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIlRvb2x0aXBDb250ZW50IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL3Rvb2x0aXBDb250ZW50L3Rvb2x0aXBDb250ZW50LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL3Rvb2x0aXBDb250ZW50L3Rvb2x0aXBDb250ZW50LmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcENvbnRlbnQvdG9vbHRpcENvbnRlbnQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJjb2xvci1tYXJrIjoidG9vbHRpcENvbnRlbnRfX2NvbG9yLW1hcmtfX19HOVgxayIsImxhdW5jaC1uYW1lIjoidG9vbHRpcENvbnRlbnRfX2xhdW5jaC1uYW1lX19fMkIyT2giLCJsYXVuY2gtc3RhcnQtdGltZSI6InRvb2x0aXBDb250ZW50X19sYXVuY2gtc3RhcnQtdGltZV9fXzFUT0tNIiwiaXRlbS1uYW1lIjoidG9vbHRpcENvbnRlbnRfX2l0ZW0tbmFtZV9fXzNnQ2lBIiwiaXRlbS1jYXNlcyI6InRvb2x0aXBDb250ZW50X19pdGVtLWNhc2VzX19fMkdrUHUifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvdG9vbHRpcFdyYXBwZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRvb2x0aXBXcmFwcGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ub29sdGlwV3JhcHBlcn19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvdG9vbHRpcFdyYXBwZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlRvb2x0aXBXcmFwcGVyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL3Rvb2x0aXBXcmFwcGVyL3Rvb2x0aXBXcmFwcGVyLnNjc3MiKSxkPXIoYyksXz11LmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5Ub29sdGlwV3JhcHBlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5jbGFzc05hbWU7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygidG9vbHRpcCIsbil9LHQpfTtwLnByb3BUeXBlcz17Y2hpbGRyZW46YS5kZWZhdWx0Lm5vZGUsY2xhc3NOYW1lOmEuZGVmYXVsdC5zdHJpbmd9LHAuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsLGNsYXNzTmFtZTpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiVG9vbHRpcFdyYXBwZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvdG9vbHRpcFdyYXBwZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvdG9vbHRpcFdyYXBwZXIvdG9vbHRpcFdyYXBwZXIuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC90b29sdGlwV3JhcHBlci90b29sdGlwV3JhcHBlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17dG9vbHRpcDoidG9vbHRpcFdyYXBwZXJfX3Rvb2x0aXBfX19lSmcxXyJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEl0ZW1OYW1lQ29uZmlnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRJdGVtTmFtZUNvbmZpZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0VGltZWxpbmVBeGlzVGlja3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmdldFRpbWVsaW5lQXhpc1RpY2tzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRJdGVtTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0SXRlbU5hbWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEl0ZW1Db2xvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0SXRlbUNvbG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREZWZlY3RUeXBlTG9jYXRvcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmdldERlZmVjdFR5cGVMb2NhdG9yc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0TGF1bmNoQXhpc1RpY2tzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRMYXVuY2hBeGlzVGlja3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldExpc3RBdmVyYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRMaXN0QXZlcmFnZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0VGltZVR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmdldFRpbWVUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1ZhbHVlSW50ZXJydXB0ZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmlzVmFsdWVJbnRlcnJ1cHRlZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmFuZ2VNYXhWYWx1ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucmFuZ2VNYXhWYWx1ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHJhbnNmb3JtQ2F0ZWdvcnlMYWJlbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtQ2F0ZWdvcnlMYWJlbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsaWRJdGVtc0ZpbHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsaWRJdGVtc0ZpbHRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsaWRTdGF0dXNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsaWRTdGF0dXNlc319KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRpbWVsaW5lQXhpc1RpY2tzPXQuZ2V0TGF1bmNoQXhpc1RpY2tzPXQuZ2V0SXRlbU5hbWU9dC5nZXRJdGVtQ29sb3I9dC5nZXREZWZlY3RUeXBlTG9jYXRvcnM9dC5nZXRJdGVtTmFtZUNvbmZpZz10LmdldExpc3RBdmVyYWdlPXQucmFuZ2VNYXhWYWx1ZT10LnZhbGlkSXRlbXNGaWx0ZXI9dC50cmFuc2Zvcm1DYXRlZ29yeUxhYmVsPXQuZ2V0VGltZVR5cGU9dC5pc1ZhbHVlSW50ZXJydXB0ZWQ9dC52YWxpZFN0YXR1c2VzPXQuVElNRV9UWVBFUz10LlNUQVRVU0VTPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShyKSxzPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL21lc3NhZ2VzLmpzIiksaT10LlNUQVRVU0VTPXtGQUlMRUQ6IkZBSUxFRCIsU1RPUFBFRDoiU1RPUFBFRCIsUEFTU0VEOiJQQVNTRUQiLElOVEVSUlVQVEVEOiJJTlRFUlJVUFRFRCJ9LGE9dC5USU1FX1RZUEVTPXtTRUNPTkRTOiJzZWNvbmRzIixNSU5VVEVTOiJtaW51dGVzIixIT1VSUzoiaG91cnMifSxsPXQudmFsaWRTdGF0dXNlcz1baS5GQUlMRUQsaS5TVE9QUEVELGkuUEFTU0VEXSx1PXQuaXNWYWx1ZUludGVycnVwdGVkPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PWkuSU5URVJSVVBURUR9LGM9dC5nZXRUaW1lVHlwZT1mdW5jdGlvbihlKXtpZihlPjApe2lmKGU8NmU0KXJldHVybnt2YWx1ZToxZTMsdHlwZTphLlNFQ09ORFN9O2lmKGU8PTcyZTUpcmV0dXJue3ZhbHVlOjZlNCx0eXBlOmEuTUlOVVRFU319cmV0dXJue3ZhbHVlOjM2ZTUsdHlwZTphLkhPVVJTfX0sZD10LnRyYW5zZm9ybUNhdGVnb3J5TGFiZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIiMgIitlLm51bWJlcn0sXz10LnZhbGlkSXRlbXNGaWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGwuaW5kZXhPZihlLnN0YXR1cyk+LTF9LHA9dC5yYW5nZU1heFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlPjY/TWF0aC5yb3VuZChlLzEyKToxfSxmPXQuZ2V0TGlzdEF2ZXJhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGUuZmlsdGVyKF8pLmZvckVhY2goZnVuY3Rpb24oZSl7dShlKXx8KHQrPTEsbis9K2UuZHVyYXRpb24pfSksbi90fSxtPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxyPVtdLG89MCxzPWU7czx0O3MrPW4pcltvXT1zLG8rPTE7cmV0dXJuIHJ9LGg9dC5nZXRJdGVtTmFtZUNvbmZpZz1mdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCIkIik7cmV0dXJue2l0ZW1UeXBlOnRbMV0sZGVmZWN0VHlwZTp0WzJdLGxvY2F0b3I6dFszXX19LGc9dC5nZXREZWZlY3RUeXBlTG9jYXRvcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmRlZmVjdFR5cGUscj1lLmxvY2F0b3Isbz10W24udG9VcHBlckNhc2UoKV07aWYobyl7dmFyIHM9by5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvY2F0b3I9PT1yfSk7cmV0dXJuIHMmJltzLmxvY2F0b3JdfHxvLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdG9yfSl9cmV0dXJuIG51bGx9LGI9dC5nZXRJdGVtQ29sb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLml0ZW1UeXBlLHI9ZS5kZWZlY3RUeXBlLHM9ZS5sb2NhdG9yO2lmKCJkZWZlY3RzIiE9PW4pcmV0dXJuIG9bIkNPTE9SXyIrci50b1VwcGVyQ2FzZSgpXTt2YXIgaT10W3IudG9VcHBlckNhc2UoKV07cmV0dXJuKGkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdG9yPT09c30pfHx7fSkuY29sb3J8fGlbMF0uY29sb3J9LEU9dC5nZXRJdGVtTmFtZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5pdGVtVHlwZSxvPWUuZGVmZWN0VHlwZSxpPWUubG9jYXRvcixhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107aWYoImRlZmVjdHMiIT09cilyZXR1cm4gbihzLm1lc3NhZ2VzW29dLHt0eXBlOiIifSk7dmFyIGw9dFtvLnRvVXBwZXJDYXNlKCldO3JldHVybiBhP2xbMF0ubG9uZ05hbWU6KGwuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdG9yPT09aX0pfHx7fSkubG9uZ05hbWV8fG4ocy5tZXNzYWdlcy50b3RhbCx7dHlwZTpuKHMubWVzc2FnZXNbbFswXS5zaG9ydE5hbWUudG9Mb3dlckNhc2UoKV0pfSl9LHk9dC5nZXRMYXVuY2hBeGlzVGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIG0oMCxlLHAoZSkpfSx2PXQuZ2V0VGltZWxpbmVBeGlzVGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIG0oZT41PygoZS81LzIpLnRvRml4ZWQoKS8yKS50b0ZpeGVkKCk6MCxlLGU+NT8oZS81KS50b0ZpeGVkKCk6MSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJTVEFUVVNFUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJUSU1FX1RZUEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInZhbGlkU3RhdHVzZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiaXNWYWx1ZUludGVycnVwdGVkIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImdldFRpbWVUeXBlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsInRyYW5zZm9ybUNhdGVnb3J5TGFiZWwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywidmFsaWRJdGVtc0ZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJyYW5nZU1heFZhbHVlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImdldExpc3RBdmVyYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImdldEl0ZW1OYW1lQ29uZmlnIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImdldERlZmVjdFR5cGVMb2NhdG9ycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJnZXRJdGVtQ29sb3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwiZ2V0SXRlbU5hbWUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwiZ2V0TGF1bmNoQXhpc1RpY2tzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsImdldFRpbWVsaW5lQXhpc1RpY2tzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJkZWZlY3RzIiwiREVGRUNUUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJyYW5nZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvdXRpbHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2ZhaWxlZENhc2VzVHJlbmRDaGFydC9jb25maWd1cmF0aW9uLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRpY2tzPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxvPXQuZ2V0VGlja3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LWUsbz12b2lkIDAscz1bZV07c3dpdGNoKCEwKXtjYXNlIG48MTpvPS4yO2JyZWFrO2Nhc2UgbjwxMDpvPTI7YnJlYWs7ZGVmYXVsdDpvPTEwKk1hdGgucm91bmQobi82LzEwKX1yZXR1cm4oMCxyLnJhbmdlKSgwLHQsb3x8MSkuZm9yRWFjaChmdW5jdGlvbih0KXt0PmUmJnMucHVzaCh0KX0pLHMucHVzaCh0KSxzfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJnZXRUaWNrcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvY29uZmlndXJhdGlvbi5qcyIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmFpbGVkQ2FzZXNUcmVuZENoYXJ0PXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksTT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvdGVzdFN0YXR1c2VzLmpzIiksST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXR1c0xvY2FsaXphdGlvbi5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbWVzc2FnZXMuanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3Rvb2x0aXAvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2MzY2hhcnQvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2xlZ2VuZC9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxVPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2NvbmZpZ3VyYXRpb24uanMiKSxHPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2ZhaWxlZENhc2VzVHJlbmRDaGFydC5zY3NzIiksej1yKEcpLFY9e0ZhaWxlZENhc2VzVHJlbmRDaGFydDp7ZGlzcGxheU5hbWU6IkZhaWxlZENhc2VzVHJlbmRDaGFydCJ9fSxXPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2ZhaWxlZENhc2VzVHJlbmRDaGFydC5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W2VdLGltcG9ydHM6W1QuZGVmYXVsdF19KSxZPSgwLHkuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2ZhaWxlZENhc2VzVHJlbmRDaGFydC5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSxxPUQuZGVmYXVsdC5iaW5kKHouZGVmYXVsdCksSz0oMCx4LmRlZmluZU1lc3NhZ2VzKSh7ZmFpbGVkQ2FzZXNMYWJlbDp7aWQ6IkZhaWxlZENhc2VzVHJlbmRDaGFydC5mYWlsZWRDYXNlcyIsZGVmYXVsdE1lc3NhZ2U6ImZhaWxlZCBjYXNlcyJ9fSksWD10LkZhaWxlZENhc2VzVHJlbmRDaGFydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFcoWSh0LGUpLGUpfX0oIkZhaWxlZENhc2VzVHJlbmRDaGFydCIpKCgwLHguaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGwuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNDb25maWdSZWFkeTohMX0sci5vbkNoYXJ0Q3JlYXRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldHVwQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZXNpemVDaGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyQ29udGVudHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZi5kZWZhdWx0KShyLG8pfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxfLmRlZmF1bHQpKHQsW3trZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7IXRoaXMucHJvcHMuaXNQcmV2aWV3JiZ0aGlzLnByb3BzLm9ic2VydmVyLnN1YnNjcmliZSgid2lkZ2V0UmVzaXplZCIsdGhpcy5yZXNpemVDaGFydCksdGhpcy5nZXRDb25maWcoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuaXNQcmV2aWV3fHwodGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5zZXR1cENvb3JkcyksdGhpcy5wcm9wcy5vYnNlcnZlci51bnN1YnNjcmliZSgid2lkZ2V0UmVzaXplZCIsdGhpcy5yZXNpemVDaGFydCkpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5jaGFydD1lLHRoaXMubm9kZT10LHRoaXMucHJvcHMud2lkZ2V0LmNvbnRlbnQucmVzdWx0JiYhdGhpcy5wcm9wcy5pc1ByZXZpZXcmJih0aGlzLnJlc2l6ZUNoYXJ0KCksdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5zZXR1cENvb3JkcykpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LndpZGdldCxyPXQuaW50bCxvPXQuaXNQcmV2aWV3O3RoaXMuY2hhcnREYXRhPVsiZmFpbGVkIl0sdGhpcy5pdGVtRGF0YT1bXTt2YXIgcz0wLGk9MS8wO24uY29udGVudC5yZXN1bHQuZm9yRWFjaChmdW5jdGlvbih0KXsrdC52YWx1ZXMudG90YWw+cyYmKHM9K3QudmFsdWVzLnRvdGFsKSwrdC52YWx1ZXMudG90YWw8aSYmKGk9K3QudmFsdWVzLnRvdGFsKSxlLml0ZW1EYXRhLnB1c2goe2lkOnQuaWQsbmFtZTp0Lm5hbWUsbnVtYmVyOnQubnVtYmVyLHN0YXJ0VGltZTp0LnN0YXJ0VGltZX0pLGUuY2hhcnREYXRhLnB1c2godC52YWx1ZXMudG90YWwpfSksdGhpcy5jb25maWc9e2RhdGE6e2NvbHVtbnM6W3RoaXMuY2hhcnREYXRhXSxjb2xvcnM6e2ZhaWxlZDp3LkNPTE9SX0ZBSUxFRH19LHBvaW50OntzZW5zaXRpdml0eToxZTMscjoxPT09dGhpcy5pdGVtRGF0YS5sZW5ndGg/NToxLGZvY3VzOntleHBhbmQ6e3I6NX19fSxncmlkOnt5OntzaG93OiFvfX0sYXhpczp7eDp7c2hvdzohbyx0eXBlOiJjYXRlZ29yeSIsY2F0ZWdvcmllczp0aGlzLml0ZW1EYXRhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iIyAiK2UubnVtYmVyfSksdGljazp7dmFsdWVzOigwLEIuZ2V0TGF1bmNoQXhpc1RpY2tzKSh0aGlzLml0ZW1EYXRhLmxlbmd0aCksd2lkdGg6NjAsY2VudGVyZWQ6ITAsaW5uZXI6ITAsbXVsdGlsaW5lOiExLG91dGVyOiExfX0seTp7c2hvdzohbyx0aWNrOnt2YWx1ZXM6KDAsVS5nZXRUaWNrcykoaSxzKSxvdXRlcjohMX0scGFkZGluZzp7dG9wOjUsYm90dG9tOjB9LGxhYmVsOnt0ZXh0OnIuZm9ybWF0TWVzc2FnZShLLmZhaWxlZENhc2VzTGFiZWwpLHBvc2l0aW9uOiJvdXRlci1taWRkbGUifX19LGludGVyYWN0aW9uOntlbmFibGVkOiFvfSxwYWRkaW5nOnt0b3A6bz8wOjg1LGxlZnQ6bz8wOjYwLHJpZ2h0Om8/MDoyMCxib3R0b206MH0sbGVnZW5kOntzaG93OiExfSx0b29sdGlwOntncm91cGVkOiEwLHBvc2l0aW9uOnRoaXMuZ2V0UG9zaXRpb24sY29udGVudHM6dGhpcy5yZW5kZXJDb250ZW50c319LHRoaXMuc2V0U3RhdGUoe2lzQ29uZmlnUmVhZHk6ITB9KX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy54LXIubGVmdC10LzI7cmV0dXJue3RvcDp0aGlzLnktci50b3Atbi04LGxlZnQ6b319fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYWdlWCxuPWUucGFnZVk7dGhpcy54PXQsdGhpcy55PW59fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsdD10aGlzLnByb3BzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDt0aGlzLmhlaWdodCE9PWU/KHRoaXMuY2hhcnQucmVzaXplKHtoZWlnaHQ6ZX0pLHRoaXMuaGVpZ2h0PWUpOnRoaXMud2lkdGghPT10JiYodGhpcy5jaGFydC5mbHVzaCgpLHRoaXMud2lkdGg9dCl9fSx7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcy5pdGVtRGF0YVtlWzBdLmluZGV4XSxzPW8ubmFtZSxpPW8ubnVtYmVyLGE9by5zdGFydFRpbWUsbD1lWzBdLmlkO3JldHVybiBqLmRlZmF1bHQucmVuZGVyVG9TdGF0aWNNYXJrdXAoVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5Ub29sdGlwV3JhcHBlcixudWxsLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uVG9vbHRpcENvbnRlbnQse2xhdW5jaE5hbWU6cyxsYXVuY2hOdW1iZXI6aSxzdGFydFRpbWU6TnVtYmVyKGEpLGl0ZW1DYXNlczplWzBdLnZhbHVlKyIgIit0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShQLm1lc3NhZ2VzLmNhc2VzKSxjb2xvcjpyKGwpLGl0ZW1OYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEkuc3RhdHVzTG9jYWxpemF0aW9uW2suRkFJTEVEXSl9KSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaXNQcmV2aWV3LHQ9cSgiZmFpbGVkLWNhc2VzLXRyZW5kLWNoYXJ0Iix7InByZXZpZXctdmlldyI6ZX0pO3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnR9LHRoaXMuc3RhdGUuaXNDb25maWdSZWFkeSYmVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5DM0NoYXJ0LHtjb25maWc6dGhpcy5jb25maWcsb25DaGFydENyZWF0ZWQ6dGhpcy5vbkNoYXJ0Q3JlYXRlZH0sIWUmJlQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuTGVnZW5kLHtpdGVtczpbTS5TVEFUU19GQUlMRURdLG9uQ2xpY2s6dGhpcy5vbkNsaWNrLG9uTW91c2VPdmVyOnRoaXMub25Nb3VzZU92ZXIsb25Nb3VzZU91dDp0aGlzLm9uTW91c2VPdXR9KSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6eC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6Uy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGNvbnRhaW5lcjpTLmRlZmF1bHQuaW5zdGFuY2VPZihFbGVtZW50KS5pc1JlcXVpcmVkLGlzUHJldmlldzpTLmRlZmF1bHQuYm9vbCxoZWlnaHQ6Uy5kZWZhdWx0Lm51bWJlcixvYnNlcnZlcjpTLmRlZmF1bHQub2JqZWN0fSxzLmRlZmF1bHRQcm9wcz17aXNQcmV2aWV3OiExLGhlaWdodDowLG9ic2VydmVyOnt9fSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsIkZhaWxlZENhc2VzVHJlbmRDaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2ZhaWxlZENhc2VzVHJlbmRDaGFydC9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSywibG9jYWxNZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZmFpbGVkLWNhc2VzLXRyZW5kLWNoYXJ0IjoiZmFpbGVkQ2FzZXNUcmVuZENoYXJ0X19mYWlsZWQtY2FzZXMtdHJlbmQtY2hhcnRfX19reTVwTCIsImxhdW5jaC1uYW1lIjoiZmFpbGVkQ2FzZXNUcmVuZENoYXJ0X19sYXVuY2gtbmFtZV9fXzJMeDZVIiwibGF1bmNoLWR1cmF0aW9uIjoiZmFpbGVkQ2FzZXNUcmVuZENoYXJ0X19sYXVuY2gtZHVyYXRpb25fX18zeDVLMiJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9mYWlsZWRDYXNlc1RyZW5kQ2hhcnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2ZhaWxlZENhc2VzVHJlbmRDaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRmFpbGVkQ2FzZXNUcmVuZENoYXJ0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GYWlsZWRDYXNlc1RyZW5kQ2hhcnR9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcz10LlBhc3NpbmdSYXRlUGVyTGF1bmNoPXQuTm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydD10LkZhaWxlZENhc2VzVHJlbmRDaGFydD10LkxhdW5jaFN0YXRpc3RpY3NDaGFydD10LkxhdW5jaGVzRHVyYXRpb25DaGFydD10LkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0PXQuVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydD12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0L2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0L2luZGV4LmpzIikscz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9pbmRleC5qcyIpLGk9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvZmFpbGVkQ2FzZXNUcmVuZENoYXJ0L2luZGV4LmpzIiksbD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvaW5kZXguanMiKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2luZGV4LmpzIik7dC5UZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0PXIuVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydCx0LkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0PW8uTGF1bmNoZXNDb21wYXJpc29uQ2hhcnQsdC5MYXVuY2hlc0R1cmF0aW9uQ2hhcnQ9cy5MYXVuY2hlc0R1cmF0aW9uQ2hhcnQsdC5MYXVuY2hTdGF0aXN0aWNzQ2hhcnQ9aS5MYXVuY2hTdGF0aXN0aWNzQ2hhcnQsdC5GYWlsZWRDYXNlc1RyZW5kQ2hhcnQ9YS5GYWlsZWRDYXNlc1RyZW5kQ2hhcnQsdC5Ob25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0PWwuTm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydCx0LlBhc3NpbmdSYXRlUGVyTGF1bmNoPXUuUGFzc2luZ1JhdGVQZXJMYXVuY2gsdC5MYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3M9Yy5MYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3N9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9jaGFydFV0aWxzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRDaGFydERhdGE9dC5nZXREZWZlY3RJdGVtcz10LmdldFBlcmNlbnRhZ2U9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvY29sb3JzLmpzIiksaT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHMpLGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24obixyKXtyZXR1cm4gZS5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF09PT1uW3RdfSk9PT1yfSl9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIiQiKVsyXS50b1VwcGVyQ2FzZSgpfSx1PXQuZ2V0UGVyY2VudGFnZT1mdW5jdGlvbihlKXtyZXR1cm4oMTAwKmUpLnRvRml4ZWQoMil9LGM9dC5nZXREZWZlY3RJdGVtcz1mdW5jdGlvbihlKXtyZXR1cm4gYShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57aWQ6ZVswXSxjb3VudDplWzFdLG5hbWU6ZVswXS5zcGxpdCgiJCIpLnNsaWNlKDAsMykuam9pbigiJCIpfX0pLCJuYW1lIil9LGQ9dC5nZXRDaGFydERhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPVtdO3JldHVybigwLG8uZGVmYXVsdCkoZSkuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLmluY2x1ZGVzKHQpKXt2YXIgcz1sKG8pO25bb109K2Vbb10scltvXT1pWyJDT0xPUl8iK3NdfX0pLHtpdGVtVHlwZXM6bixpdGVtQ29sb3JzOnJ9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiZ2V0UGVyY2VudGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvY2hhcnRVdGlscy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJnZXREZWZlY3RJdGVtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvY2hhcnRVdGlscy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJnZXRDaGFydERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2NoYXJ0VXRpbHMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwidW5pcXVlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9jaGFydFV0aWxzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImdldEl0ZW1OYW1lIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9jaGFydFV0aWxzLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25DaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGF1bmNoRXhlY3V0aW9uQ2hhcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaEV4ZWN1dGlvbkNoYXJ0fX0pO3ZhciBvPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2lzc3VlU3RhdGlzdGljc0NoYXJ0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJc3N1ZVN0YXRpc3RpY3NDaGFydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uSXNzdWVTdGF0aXN0aWNzQ2hhcnR9fSk7dmFyIHM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc319KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2lzc3VlU3RhdGlzdGljc0NoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSXNzdWVTdGF0aXN0aWNzQ2hhcnQ9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxrPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oTSksST1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxQPXIoSSksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxGPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9zZXJ2ZXIuYnJvd3Nlci5qcyIpLEI9cihGKSxVPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksej1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLFc9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC9pbmRleC5qcyIpLFk9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vYzNjaGFydC9pbmRleC5qcyIpLHE9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzLnNjc3MiKSxLPXIocSksWD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZXNDaGFydExlZ2VuZC5qc3giKSwkPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksUT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3NUb29sdGlwLmpzeCIpLEo9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvY2hhcnRVdGlscy5qc3giKSxaPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL21lc3NhZ2VzLmpzIiksZWU9e0lzc3VlU3RhdGlzdGljc0NoYXJ0OntkaXNwbGF5TmFtZToiSXNzdWVTdGF0aXN0aWNzQ2hhcnQifX0sdGU9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvaXNzdWVTdGF0aXN0aWNzQ2hhcnQuanN4Iixjb21wb25lbnRzOmVlLGxvY2FsczpbZV0saW1wb3J0czpbUi5kZWZhdWx0XX0pLG5lPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2lzc3VlU3RhdGlzdGljc0NoYXJ0LmpzeCIsY29tcG9uZW50czplZSxsb2NhbHM6W10saW1wb3J0czpbUi5kZWZhdWx0LEEuZGVmYXVsdF19KSxyZT1QLmRlZmF1bHQuYmluZChLLmRlZmF1bHQpLG9lPXQuSXNzdWVTdGF0aXN0aWNzQ2hhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0ZShuZSh0LGUpLGUpfX0oIklzc3VlU3RhdGlzdGljc0NoYXJ0IikoKG89KDAsTi5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdDooMCx6LmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSksZGVmZWN0VHlwZXM6KDAsRy5kZWZlY3RUeXBlc1NlbGVjdG9yKShlKSxnZXREZWZlY3RMaW5rOmZ1bmN0aW9uKHQpe3JldHVybigwLFUuZGVmZWN0TGlua1NlbGVjdG9yKShlLHQpfX19LHtyZWRpcmVjdDpILnJlZGlyZWN0fSksKDAsdy5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNDb25maWdSZWFkeTohMX0sci5vbklzc3Vlc0NoYXJ0Q3JlYXRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Jc3N1ZXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25Jc3N1ZXNNb3VzZU91dD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Jc3N1ZXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbklzc3Vlc01vdXNlT3Zlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Jc3N1ZXNNb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25Jc3N1ZXNDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkNoYXJ0Q2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREZWZhdWx0TGlua1BhcmFtcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0Q29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXRDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0SXNzdWVzUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldElzc3Vlc1Bvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlc2l6ZUlzc3Vlc0NoYXJ0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZXNpemVJc3N1ZXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXJJc3N1ZXNDb250ZW50cz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVuZGVySXNzdWVzQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxFLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsdi5kZWZhdWx0KSh0LGUpLCgwLGcuZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJJc3N1ZXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVySXNzdWVzQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUlzc3Vlc0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVJc3N1ZXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SXNzdWVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldElzc3Vlc1Bvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXNzdWVzQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbklzc3Vlc01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Jc3N1ZXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Jc3N1ZXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Jc3N1ZXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXNzdWVzQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7IXRoaXMucHJvcHMuaXNQcmV2aWV3JiZ0aGlzLnByb3BzLm9ic2VydmVyLnN1YnNjcmliZSgid2lkZ2V0UmVzaXplZCIsdGhpcy5yZXNpemVJc3N1ZXNDaGFydCksdGhpcy5nZXRDb25maWcoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuaXNQcmV2aWV3fHwodGhpcy5pc3N1ZXNOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5zZXRDb29yZHMpLHRoaXMucHJvcHMub2JzZXJ2ZXIudW5zdWJzY3JpYmUoIndpZGdldFJlc2l6ZWQiLHRoaXMucmVzaXplSXNzdWVzQ2hhcnQpKX19LHtrZXk6Il9fb25Jc3N1ZXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXNzdWVzQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbklzc3Vlc0NoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Jc3N1ZXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5pc3N1ZXNDaGFydD1lLHRoaXMuaXNzdWVzTm9kZT10LHRoaXMucHJvcHMud2lkZ2V0LmNvbnRlbnQucmVzdWx0JiYhdGhpcy5wcm9wcy5pc1ByZXZpZXcmJihrLnNlbGVjdChlLmVsZW1lbnQpLnNlbGVjdCgiLmMzLWNoYXJ0LWFyY3MtdGl0bGUiKS5hdHRyKCJkeSIsLTE1KS5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLDMwKS5hdHRyKCJ4IiwwKS5hdHRyKCJmaWxsIiwiIzY2NiIpLnRleHQoIklTU1VFUyIpLHRoaXMuaXNzdWVzTm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuc2V0Q29vcmRzKSl9fSx7a2V5OiJfX29uSXNzdWVzTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXNzdWVzTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXNzdWVzTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzc3Vlc0NoYXJ0LnJldmVydCgpfX0se2tleToiX19vbklzc3Vlc01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Jc3N1ZXNNb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXNzdWVzTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbklzc3Vlc01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Jc3N1ZXNNb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pc3N1ZXNDaGFydC5mb2N1cyhlKX19LHtrZXk6Il9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Jc3N1ZXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmlzc3Vlc0NoYXJ0LnRvZ2dsZShlKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQud2lkZ2V0LHI9dC5nZXREZWZlY3RMaW5rLG89dC5kZWZlY3RUeXBlcyxzPSgwLCQuZ2V0SXRlbU5hbWVDb25maWcpKGUuaWQpLGk9bi5jb250ZW50LnJlc3VsdFswXS5pZCxhPXRoaXMuZ2V0RGVmYXVsdExpbmtQYXJhbXMoaSksbD0oMCwkLmdldERlZmVjdFR5cGVMb2NhdG9ycykocyxvKSx1PXIoe2RlZmVjdHM6bCxpdGVtSWQ6aX0pO3RoaXMucHJvcHMucmVkaXJlY3QoKDAsZC5kZWZhdWx0KSh1LGEpKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybntwYXlsb2FkOntwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0LGZpbHRlcklkOiJhbGwiLHRlc3RJdGVtSWRzOmV9LHR5cGU6Vi5URVNUX0lURU1fUEFHRX19fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LndpZGdldCxyPXQuY29udGFpbmVyLG89bi5jb250ZW50LnJlc3VsdFswXS52YWx1ZXMscz0oMCxKLmdldENoYXJ0RGF0YSkobywiJGRlZmVjdHMkIiksaT1zLml0ZW1UeXBlcyxhPXMuaXRlbUNvbG9ycyxsPVtdO2lmKHRoaXMuaGVpZ2h0PXIub2Zmc2V0SGVpZ2h0LHRoaXMud2lkdGg9ci5vZmZzZXRXaWR0aCx0aGlzLm5vQXZhaWxhYmxlRGF0YT0hMSxuLmNvbnRlbnRQYXJhbWV0ZXJzLmNvbnRlbnRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbihlKXsoMCx1LmRlZmF1bHQpKGkpLmZvckVhY2goZnVuY3Rpb24odCl7ZT09PXQmJmwucHVzaChbZSxpW2VdXSl9KX0pLCFsLmxlbmd0aClyZXR1cm4gdm9pZCh0aGlzLm5vQXZhaWxhYmxlRGF0YT0hMCk7dGhpcy5kZWZlY3RJdGVtcz0oMCxKLmdldERlZmVjdEl0ZW1zKShsKSx0aGlzLmlzc3VlQ29uZmlnPXtkYXRhOntjb2x1bW5zOmwsdHlwZToiZG9udXQiLG9yZGVyOm51bGwsY29sb3JzOmEsb25jbGljazp0aGlzLm9uQ2hhcnRDbGlja30saW50ZXJhY3Rpb246e2VuYWJsZWQ6IXNlbGYuaXNQcmV2aWV3fSxwYWRkaW5nOnt0b3A6c2VsZi5pc1ByZXZpZXc/MDo4NX0sbGVnZW5kOntzaG93OiExfSxkb251dDp7dGl0bGU6MCxsYWJlbDp7c2hvdzohMSx0aHJlc2hvbGQ6LjA1fX0sdG9vbHRpcDp7Z3JvdXBlZDohMSxwb3NpdGlvbjp0aGlzLmdldElzc3Vlc1Bvc2l0aW9uLGNvbnRlbnRzOnRoaXMucmVuZGVySXNzdWVzQ29udGVudHN9LG9ucmVuZGVyZWQ6ZnVuY3Rpb24oKXtpZihlLmlzc3Vlc0NoYXJ0KXt2YXIgdD1lLmlzc3Vlc0NoYXJ0LmRhdGEuc2hvd24oKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LnZhbHVlc1swXS52YWx1ZX0sMCk7ZS5pc3N1ZXNOb2RlLnF1ZXJ5U2VsZWN0b3IoIi5jMy1jaGFydC1hcmNzLXRpdGxlIikuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudD10fX19LHRoaXMuc2V0U3RhdGUoe2lzQ29uZmlnUmVhZHk6ITB9KX19LHtrZXk6Il9fc2V0Q29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0Q29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYWdlWCxuPWUucGFnZVk7dGhpcy54PXQsdGhpcy55PW59fSx7a2V5OiJfX2dldElzc3Vlc1Bvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRJc3N1ZXNQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SXNzdWVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldElzc3Vlc1Bvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRJc3N1ZXNQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5pc3N1ZXNOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy54LXIubGVmdC10LzI7cmV0dXJue3RvcDp0aGlzLnktci50b3Atbi04LGxlZnQ6b319fSx7a2V5OiJfX3Jlc2l6ZUlzc3Vlc0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVJc3N1ZXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplSXNzdWVzQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUlzc3Vlc0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVJc3N1ZXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldEhlaWdodCx0PXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0IT09ZT8odGhpcy5pc3N1ZXNDaGFydC5yZXNpemUoe2hlaWdodDplfSksdGhpcy5oZWlnaHQ9ZSk6dGhpcy53aWR0aCE9PXQmJih0aGlzLmlzc3Vlc0NoYXJ0LmZsdXNoKCksdGhpcy53aWR0aD10KX19LHtrZXk6Il9fcmVuZGVySXNzdWVzQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlcklzc3Vlc0NvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJJc3N1ZXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVySXNzdWVzQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlcklzc3Vlc0NvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMuZGVmZWN0SXRlbXMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWVbMF0uaWR9KTtyZXR1cm4gQi5kZWZhdWx0LnJlbmRlclRvU3RhdGljTWFya3VwKFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFcuVG9vbHRpcFdyYXBwZXIsbnVsbCxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChRLkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXAse2xhdW5jaE51bWJlcjplWzBdLnZhbHVlLGR1cmF0aW9uOigwLEouZ2V0UGVyY2VudGFnZSkoZVswXS5yYXRpbyksY29sb3I6cihlWzBdLm5hbWUpLGl0ZW1OYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFoubWVzc2FnZXNbby5uYW1lLnNwbGl0KCIkdG90YWwiKVswXV0pfSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmlzUHJldmlldyx0PXJlKHsicHJldmlldy12aWV3IjplfSksbj10aGlzLnN0YXRlLmlzQ29uZmlnUmVhZHk7cmV0dXJuIFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dH0sbiYmUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpyZSgiaXNzdWUtc3RhdGlzdGljcy1jaGFydCIpfSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnJlKCJkYXRhLWpzLWlzc3VlLXN0YXRpc3RpY3MtY2hhcnQtY29udGFpbmVyIil9LCFlJiZSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChYLkxlZ2VuZCx7aXRlbXM6dGhpcy5kZWZlY3RJdGVtcyxvbkNsaWNrOnRoaXMub25Jc3N1ZXNDbGljayxvbk1vdXNlT3Zlcjp0aGlzLm9uSXNzdWVzTW91c2VPdmVyLG9uTW91c2VPdXQ6dGhpcy5vbklzc3Vlc01vdXNlT3V0fSksUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoWS5DM0NoYXJ0LHtjb25maWc6dGhpcy5pc3N1ZUNvbmZpZyxvbkNoYXJ0Q3JlYXRlZDp0aGlzLm9uSXNzdWVzQ2hhcnRDcmVhdGVkLGNsYXNzTmFtZTpyZSgiYzMiKX0pKSkpfX1dKSx0fShTLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6RC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGlzUHJldmlldzpELmRlZmF1bHQuYm9vbCxkZWZlY3RUeXBlczpELmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0RGVmZWN0TGluazpELmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHJlZGlyZWN0OkQuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQscHJvamVjdDpELmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsY29udGFpbmVyOkQuZGVmYXVsdC5pbnN0YW5jZU9mKEVsZW1lbnQpLmlzUmVxdWlyZWQsb2JzZXJ2ZXI6RC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2lzUHJldmlldzohMSxoZWlnaHQ6MCxvYnNlcnZlcjp7fX0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG9lLCJJc3N1ZVN0YXRpc3RpY3NDaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvaXNzdWVTdGF0aXN0aWNzQ2hhcnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocmUsImNoYXJ0Q3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2lzc3VlU3RhdGlzdGljc0NoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5MYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3M9dm9pZCAwO3ZhciBzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9byhsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9byhjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9byhfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1vKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1vKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9byhiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1vKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksTD1vKHgpLEQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQ2hhcnQuanN4Iiksdz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9pc3N1ZVN0YXRpc3RpY3NDaGFydC5qc3giKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy5zY3NzIiksaz1vKE0pLEk9e0xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljczp7ZGlzcGxheU5hbWU6IkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcyJ9fSxQPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxOPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxIPUwuZGVmYXVsdC5iaW5kKGsuZGVmYXVsdCksRj10LkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0LGUpLGUpfX0oIkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcyIpKCgwLFMuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJsYXVuY2gtZXhlY3V0aW9uLWFuZC1pc3N1ZXMtY2hhcnQiKX0sci5jcmVhdGVFbGVtZW50KEQuTGF1bmNoRXhlY3V0aW9uQ2hhcnQse3dpZGdldDp0aGlzLnByb3BzLndpZGdldCxjb250YWluZXI6dGhpcy5wcm9wcy5jb250YWluZXIsb2JzZXJ2ZXI6dGhpcy5wcm9wcy5vYnNlcnZlcixpc1ByZXZpZXc6dGhpcy5wcm9wcy5pc1ByZXZpZXd9KSxyLmNyZWF0ZUVsZW1lbnQody5Jc3N1ZVN0YXRpc3RpY3NDaGFydCx7d2lkZ2V0OnRoaXMucHJvcHMud2lkZ2V0LGNvbnRhaW5lcjp0aGlzLnByb3BzLmNvbnRhaW5lcixvYnNlcnZlcjp0aGlzLnByb3BzLm9ic2VydmVyLGlzUHJldmlldzp0aGlzLnByb3BzLmlzUHJldmlld30pKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOlMuaW50bFNoYXBlLmlzUmVxdWlyZWQsd2lkZ2V0OmouZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjb250YWluZXI6ai5kZWZhdWx0Lmluc3RhbmNlT2YoRWxlbWVudCkuaXNSZXF1aXJlZCxpc1ByZXZpZXc6ai5kZWZhdWx0LmJvb2wsb2JzZXJ2ZXI6ai5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2lzUHJldmlldzohMSxoZWlnaHQ6MCxvYnNlcnZlcjp7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJMYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3Muc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJsYXVuY2gtZXhlY3V0aW9uLWFuZC1pc3N1ZXMtY2hhcnQiOiJsYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3NfX2xhdW5jaC1leGVjdXRpb24tYW5kLWlzc3Vlcy1jaGFydF9fX1FRYzVVIiwibGF1bmNoLWV4ZWN1dGlvbi1jaGFydCI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc19fbGF1bmNoLWV4ZWN1dGlvbi1jaGFydF9fXzJSWEN5IiwiaXNzdWUtc3RhdGlzdGljcy1jaGFydCI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc19faXNzdWUtc3RhdGlzdGljcy1jaGFydF9fX3NQZWFYIixsZWdlbmQ6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc19fbGVnZW5kX19fakpiTm0iLCJwcmV2aWV3LXZpZXciOiJsYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3NfX3ByZXZpZXctdmlld19fXzNFRVJ5IixjMzoibGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzX19jM19fXzFBZUtwIiwiZGF0YS1qcy1sYXVuY2gtZXhlY3V0aW9uLWNoYXJ0LWNvbnRhaW5lciI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc19fZGF0YS1qcy1sYXVuY2gtZXhlY3V0aW9uLWNoYXJ0LWNvbnRhaW5lcl9fXzNCeG51IiwiZGF0YS1qcy1pc3N1ZS1zdGF0aXN0aWNzLWNoYXJ0LWNvbnRhaW5lciI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc19fZGF0YS1qcy1pc3N1ZS1zdGF0aXN0aWNzLWNoYXJ0LWNvbnRhaW5lcl9fXzFDNnZqIiwibGVnZW5kLXRpdGxlIjoibGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzX19sZWdlbmQtdGl0bGVfX18zMHFoQyJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcC5zY3NzIiksZD1yKGMpLF89dS5kZWZhdWx0LmJpbmQoZC5kZWZhdWx0KSxwPXQuTGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcD1mdW5jdGlvbihlKXt2YXIgdD1lLmxhdW5jaE51bWJlcixuPWUuaXRlbU5hbWUscj1lLmR1cmF0aW9uLG89ZS5jb2xvcjtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocy5kZWZhdWx0LkZyYWdtZW50LG51bGwsdCwiICIsIigiK3IrIiUpIixzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8oIml0ZW0td3JhcHBlciIpfSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpfKCJjb2xvci1tYXJrIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjpvfX0pLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOl8oIml0ZW0tbmFtZSIpfSxuKSkpfTtwLnByb3BUeXBlcz17bGF1bmNoTnVtYmVyOmEuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxjb2xvcjphLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsaXRlbU5hbWU6YS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGR1cmF0aW9uOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXAuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Iml0ZW0td3JhcHBlciI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXBfX2l0ZW0td3JhcHBlcl9fXzJyZ0JtIiwiY29sb3ItbWFyayI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXBfX2NvbG9yLW1hcmtfX18yYl9TVyIsIml0ZW0tbmFtZSI6ImxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljc1Rvb2x0aXBfX2l0ZW0tbmFtZV9fXzJkT3ZfIn19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZXNDaGFydExlZ2VuZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxlZ2VuZD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9BcnJheS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSxJPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvbGVnZW5kLnNjc3MiKSxIPXIoTiksRj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3Muc2NzcyIpLEI9cihGKSxVPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksRz17TGVnZW5kOntkaXNwbGF5TmFtZToiTGVnZW5kIn19LHo9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVzQ2hhcnRMZWdlbmQuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksVj0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZXNDaGFydExlZ2VuZC5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxXPXguZGVmYXVsdC5iaW5kKEguZGVmYXVsdCksWT14LmRlZmF1bHQuYmluZChCLmRlZmF1bHQpLHE9dC5MZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB6KFYodCxlKSxlKX19KCJMZWdlbmQiKSgobz0oMCxJLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0OigwLFAuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSxkZWZlY3RUeXBlczooMCxrLmRlZmVjdFR5cGVzU2VsZWN0b3IpKGUpfX0se3JlZGlyZWN0OncucmVkaXJlY3R9KSwoMCxNLmluamVjdEludGwpKHM9bygoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXt1bmNoZWNrZWRJZHM6W119LHIuY2FsY3VsYXRlSXRlbUNsYXNzTmFtZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY2FsY3VsYXRlSXRlbUNsYXNzTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlVW5jaGVja2VkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVVbmNoZWNrZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVVbmNoZWNrZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZVVuY2hlY2tlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09dGhpcy5zdGF0ZS51bmNoZWNrZWRJZHMuaW5kZXhPZihlKT9XKCJ1bmNoZWNrZWQiKTpudWxsfX0se2tleToiX19oYW5kbGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVVbmNoZWNrZWQoZSksdGhpcy5wcm9wcy5vbkNsaWNrKGUpfX0se2tleToiX190b2dnbGVVbmNoZWNrZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZVVuY2hlY2tlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlVW5jaGVja2VkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVVbmNoZWNrZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZVVuY2hlY2tlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCx1LmRlZmF1bHQpKHRoaXMuc3RhdGUudW5jaGVja2VkSWRzKSxuPXQuc2xpY2UoMCk7bi5pbmNsdWRlcyhlKT9uLnNwbGljZShuLmluZGV4T2YoZSksMSk6bi5wdXNoKGUpLHRoaXMuc2V0U3RhdGUoe3VuY2hlY2tlZElkczpufSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwuZm9ybWF0TWVzc2FnZSxyPXQuaXRlbXMsbz10Lm9uTW91c2VPdXQscz1XKCJsZWdlbmQiKSsiICIrWSgibGVnZW5kLXRpdGxlIik7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6c30sci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7a2V5OnQubmFtZSwiZGF0YS1pZCI6dC5pZCxjbGFzc05hbWU6VygibGVnZW5kLWl0ZW0iKSsiICIrZS5jYWxjdWxhdGVJdGVtQ2xhc3NOYW1lKHQuaWQpLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5oYW5kbGVDbGljayh0LmlkKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm9wcy5vbk1vdXNlT3Zlcih0LmlkKX0sb25Nb3VzZU91dDpvfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpXKCJjb2xvci1tYXJrIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjooMCxVLmdldEl0ZW1Db2xvcikoKDAsVS5nZXRJdGVtTmFtZUNvbmZpZykodC5uYW1lKSxlLnByb3BzLmRlZmVjdFR5cGVzKX19KSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpXKCJpdGVtLW5hbWUiKX0sKDAsVS5nZXRJdGVtTmFtZSkoKDAsVS5nZXRJdGVtTmFtZUNvbmZpZykodC5pZCksZS5wcm9wcy5kZWZlY3RUeXBlcyxuKSkpfSkpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxpdGVtczpELmRlZmF1bHQuYXJyYXksZGVmZWN0VHlwZXM6RC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHByb2plY3Q6RC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLG9uQ2xpY2s6RC5kZWZhdWx0LmZ1bmMsb25Nb3VzZU92ZXI6RC5kZWZhdWx0LmZ1bmMsb25Nb3VzZU91dDpELmRlZmF1bHQuZnVuY30saS5kZWZhdWx0UHJvcHM9e2l0ZW1zOltdLG9uQ2xpY2s6ZnVuY3Rpb24oKXt9LG9uTW91c2VPdmVyOmZ1bmN0aW9uKCl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKCl7fX0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkxlZ2VuZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVzQ2hhcnRMZWdlbmQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiY29tbW9uQ3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3Vlc0NoYXJ0TGVnZW5kLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksImNoYXJ0Q3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3Vlc0NoYXJ0TGVnZW5kLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQ2hhcnQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5MYXVuY2hFeGVjdXRpb25DaGFydD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIpLHc9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGs9cihNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksUD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLE49bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIiksSD1yKE4pLEY9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxVPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL2luZGV4LmpzIiksej1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3Muc2NzcyIpLFc9cihWKSxZPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3Vlc0NoYXJ0TGVnZW5kLmpzeCIpLHE9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzVG9vbHRpcC5qc3giKSxLPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2NoYXJ0VXRpbHMuanN4IiksWD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9tZXNzYWdlcy5qcyIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxRPXtMYXVuY2hFeGVjdXRpb25DaGFydDp7ZGlzcGxheU5hbWU6IkxhdW5jaEV4ZWN1dGlvbkNoYXJ0In19LEo9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQ2hhcnQuanN4Iixjb21wb25lbnRzOlEsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksWj0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcy9sYXVuY2hFeGVjdXRpb25DaGFydC5qc3giLGNvbXBvbmVudHM6USxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxlZT1rLmRlZmF1bHQuYmluZChXLmRlZmF1bHQpLHRlPXQuTGF1bmNoRXhlY3V0aW9uQ2hhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBKKFoodCxlKSxlKX19KCJMYXVuY2hFeGVjdXRpb25DaGFydCIpKChvPSgwLEkuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3Q6KDAsQi5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpLGdldFN0YXRpc3RpY3NMaW5rOmZ1bmN0aW9uKHQpe3JldHVybigwLEYuc3RhdGlzdGljc0xpbmtTZWxlY3RvcikoZSx7c3RhdHVzZXM6W3RdfSl9fX0se3JlZGlyZWN0OlAucmVkaXJlY3R9KSwoMCxMLmluamVjdEludGwpKHM9bygoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtpc0NvbmZpZ1JlYWR5OiExfSxyLm9uU3RhdHVzQ2hhcnRDcmVhdGVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vblN0YXR1c0NoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vblN0YXR1c01vdXNlT3V0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vblN0YXR1c01vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uU3RhdHVzTW91c2VPdmVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vblN0YXR1c01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vblN0YXR1c0NsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2hhcnRDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldERlZmF1bHRMaW5rUGFyYW1zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXRDb29yZHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRTdGF0dXNQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0U3RhdHVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVzaXplU3RhdHVzQ2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Jlc2l6ZVN0YXR1c0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlbmRlclN0YXR1c0NvbnRlbnRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJTdGF0dXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlclN0YXR1c0NvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJTdGF0dXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplU3RhdHVzQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZVN0YXR1c0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdGF0dXNQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3RhdHVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0Q29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TdGF0dXNDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNNb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uU3RhdHVzTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblN0YXR1c01vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblN0YXR1c01vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblN0YXR1c0NoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TdGF0dXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5wcm9wcy5pc1ByZXZpZXcmJnRoaXMucHJvcHMub2JzZXJ2ZXIuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZVN0YXR1c0NoYXJ0KSx0aGlzLmdldENvbmZpZygpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pc1ByZXZpZXd8fCh0aGlzLnN0YXR1c05vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldENvb3JkcyksdGhpcy5wcm9wcy5vYnNlcnZlci51bnN1YnNjcmliZSgid2lkZ2V0UmVzaXplZCIsdGhpcy5yZXNpemVTdGF0dXNDaGFydCkpfX0se2tleToiX19vblN0YXR1c0NoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TdGF0dXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uU3RhdHVzQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblN0YXR1c0NoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0YXR1c0NoYXJ0PWUsdGhpcy5zdGF0dXNOb2RlPXQsdGhpcy5wcm9wcy53aWRnZXQuY29udGVudC5yZXN1bHQmJiF0aGlzLnByb3BzLmlzUHJldmlldyYmKHcuc2VsZWN0KGUuZWxlbWVudCkuc2VsZWN0KCIuYzMtY2hhcnQtYXJjcy10aXRsZSIpLmF0dHIoImR5IiwtMTUpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJkeSIsMzApLmF0dHIoIngiLDApLmF0dHIoImZpbGwiLCIjNjY2IikudGV4dCgiU1VNIiksdGhpcy5zdGF0dXNOb2RlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5zZXRDb29yZHMpKX19LHtrZXk6Il9fb25TdGF0dXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TdGF0dXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TdGF0dXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNNb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzQ2hhcnQucmV2ZXJ0KCl9fSx7a2V5OiJfX29uU3RhdHVzTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblN0YXR1c01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TdGF0dXNNb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uU3RhdHVzTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblN0YXR1c01vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXR1c0NoYXJ0LmZvY3VzKGUpfX0se2tleToiX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblN0YXR1c0NsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhdHVzQ2hhcnQudG9nZ2xlKGUpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC53aWRnZXQscj10LmdldFN0YXRpc3RpY3NMaW5rLG89bi5jb250ZW50LnJlc3VsdFswXS5pZCxzPXRoaXMuZ2V0RGVmYXVsdExpbmtQYXJhbXMobyksaT0oMCwkLmdldEl0ZW1OYW1lQ29uZmlnKShlLmlkKSxhPXIoaS5kZWZlY3RUeXBlLnRvVXBwZXJDYXNlKCkpO3RoaXMucHJvcHMucmVkaXJlY3QoKDAsdS5kZWZhdWx0KShhLHMpKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybntwYXlsb2FkOntwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0LGZpbHRlcklkOiJhbGwiLHRlc3RJdGVtSWRzOmV9LHR5cGU6VS5URVNUX0lURU1fUEFHRX19fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LndpZGdldCxyPXQuY29udGFpbmVyLG89bi5jb250ZW50LnJlc3VsdFswXS52YWx1ZXMscz0oMCxLLmdldENoYXJ0RGF0YSkobywiJGV4ZWN1dGlvbnMkIiksaT1zLml0ZW1UeXBlcyxhPXMuaXRlbUNvbG9ycyxsPVtdO2lmKHRoaXMuaGVpZ2h0PXIub2Zmc2V0SGVpZ2h0LHRoaXMud2lkdGg9ci5vZmZzZXRXaWR0aCx0aGlzLm5vQXZhaWxhYmxlRGF0YT0hMSxpLnN0YXRpc3RpY3MkZXhlY3V0aW9ucyRwYXNzZWQmJmwucHVzaChbInN0YXRpc3RpY3MkZXhlY3V0aW9ucyRwYXNzZWQiLGkuc3RhdGlzdGljcyRleGVjdXRpb25zJHBhc3NlZF0pLGkuc3RhdGlzdGljcyRleGVjdXRpb25zJGZhaWxlZCYmbC5wdXNoKFsic3RhdGlzdGljcyRleGVjdXRpb25zJGZhaWxlZCIsaS5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkZmFpbGVkXSksaS5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkc2tpcHBlZCYmbC5wdXNoKFsic3RhdGlzdGljcyRleGVjdXRpb25zJHNraXBwZWQiLGkuc3RhdGlzdGljcyRleGVjdXRpb25zJHNraXBwZWRdKSwwPT0rbC5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWx8fCFsLmxlbmd0aClyZXR1cm4gdm9pZCh0aGlzLm5vQXZhaWxhYmxlRGF0YT0hMCk7dGhpcy5zdGF0dXNJdGVtcz0oMCxLLmdldERlZmVjdEl0ZW1zKShsKSx0aGlzLnN0YXR1c0NvbmZpZz17ZGF0YTp7Y29sdW1uczpsLHR5cGU6ImRvbnV0IixvcmRlcjpudWxsLGNvbG9yczphLG9uY2xpY2s6dGhpcy5vbkNoYXJ0Q2xpY2t9LGludGVyYWN0aW9uOntlbmFibGVkOiFzZWxmLmlzUHJldmlld30scGFkZGluZzp7dG9wOnNlbGYuaXNQcmV2aWV3PzA6ODV9LGxlZ2VuZDp7c2hvdzohMSxwb3NpdGlvbjoiYm90dG9tIn0sZG9udXQ6e3RpdGxlOjAsbGFiZWw6e3Nob3c6ITEsdGhyZXNob2xkOi4wNX19LHRvb2x0aXA6e2dyb3VwZWQ6ITEscG9zaXRpb246dGhpcy5nZXRTdGF0dXNQb3NpdGlvbixjb250ZW50czp0aGlzLnJlbmRlclN0YXR1c0NvbnRlbnRzfSxvbnJlbmRlcmVkOmZ1bmN0aW9uKCl7aWYoZS5zdGF0dXNDaGFydCl7dmFyIHQ9ZS5zdGF0dXNDaGFydC5kYXRhLnNob3duKCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC52YWx1ZXNbMF0udmFsdWV9LDApO2Uuc3RhdHVzTm9kZS5xdWVyeVNlbGVjdG9yKCIuYzMtY2hhcnQtYXJjcy10aXRsZSIpLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQ9dH19fSx0aGlzLnNldFN0YXRlKHtpc0NvbmZpZ1JlYWR5OiEwfSl9fSx7a2V5OiJfX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0Q29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0Q29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZVgsbj1lLnBhZ2VZO3RoaXMueD10LHRoaXMueT1ufX0se2tleToiX19nZXRTdGF0dXNQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3RhdHVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN0YXR1c1Bvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdGF0dXNQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3RhdHVzUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuc3RhdHVzTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXRoaXMueC1yLmxlZnQtdC8yO3JldHVybnt0b3A6dGhpcy55LXIudG9wLW4tOCxsZWZ0Om99fX0se2tleToiX19yZXNpemVTdGF0dXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplU3RhdHVzQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZVN0YXR1c0NoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVTdGF0dXNDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplU3RhdHVzQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsdD10aGlzLnByb3BzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDt0aGlzLmhlaWdodCE9PWU/KHRoaXMuc3RhdHVzQ2hhcnQucmVzaXplKHtoZWlnaHQ6ZX0pLHRoaXMuaGVpZ2h0PWUpOnRoaXMud2lkdGghPT10JiYodGhpcy5zdGF0dXNDaGFydC5mbHVzaCgpLHRoaXMud2lkdGg9dCl9fSx7a2V5OiJfX3JlbmRlclN0YXR1c0NvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJTdGF0dXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyU3RhdHVzQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclN0YXR1c0NvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJTdGF0dXNDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLnN0YXR1c0l0ZW1zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lWzBdLmlkfSk7cmV0dXJuIEguZGVmYXVsdC5yZW5kZXJUb1N0YXRpY01hcmt1cChPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLlRvb2x0aXBXcmFwcGVyLG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocS5MYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3NUb29sdGlwLHtsYXVuY2hOdW1iZXI6ZVswXS52YWx1ZSxkdXJhdGlvbjooMCxLLmdldFBlcmNlbnRhZ2UpKGVbMF0ucmF0aW8pLGNvbG9yOnIoby5uYW1lKSxpdGVtTmFtZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShYLm1lc3NhZ2VzW28ubmFtZS5zcGxpdCgiJHRvdGFsIilbMF1dKX0pKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pc1ByZXZpZXcsdD1lZSh7InByZXZpZXctdmlldyI6ZX0pO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnR9LHRoaXMuc3RhdGUuaXNDb25maWdSZWFkeSYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTplZSgibGF1bmNoLWV4ZWN1dGlvbi1jaGFydCIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmVlKCJkYXRhLWpzLWxhdW5jaC1leGVjdXRpb24tY2hhcnQtY29udGFpbmVyIil9LCFlJiZPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChZLkxlZ2VuZCx7aXRlbXM6dGhpcy5zdGF0dXNJdGVtcyxvbkNsaWNrOnRoaXMub25TdGF0dXNDbGljayxvbk1vdXNlT3Zlcjp0aGlzLm9uU3RhdHVzTW91c2VPdmVyLG9uTW91c2VPdXQ6dGhpcy5vblN0YXR1c01vdXNlT3V0fSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoei5DM0NoYXJ0LHtjb25maWc6dGhpcy5zdGF0dXNDb25maWcsb25DaGFydENyZWF0ZWQ6dGhpcy5vblN0YXR1c0NoYXJ0Q3JlYXRlZCxjbGFzc05hbWU6ZWUoImMzIil9KSkpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOkwuaW50bFNoYXBlLmlzUmVxdWlyZWQsd2lkZ2V0OnguZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxpc1ByZXZpZXc6eC5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxzdGF0aXN0aWNzTGluazp4LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0U3RhdGlzdGljc0xpbms6eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxyZWRpcmVjdDp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHByb2plY3Q6eC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGNvbnRhaW5lcjp4LmRlZmF1bHQuaW5zdGFuY2VPZihFbGVtZW50KS5pc1JlcXVpcmVkLG9ic2VydmVyOnguZGVmYXVsdC5vYmplY3R9LGkuZGVmYXVsdFByb3BzPXtoZWlnaHQ6MCxvYnNlcnZlcjp7fX0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHRlLCJMYXVuY2hFeGVjdXRpb25DaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbGF1bmNoRXhlY3V0aW9uQ2hhcnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZWUsImNoYXJ0Q3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoRXhlY3V0aW9uQW5kSXNzdWVTdGF0aXN0aWNzL2xhdW5jaEV4ZWN1dGlvbkNoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbWVzc2FnZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWVzc2FnZXM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbz10Lm1lc3NhZ2VzPSgwLHIuZGVmaW5lTWVzc2FnZXMpKHtzdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWw6e2lkOiJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWwiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCJ9LHN0YXRpc3RpY3MkZXhlY3V0aW9ucyRwYXNzZWQ6e2lkOiJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkcGFzc2VkIixkZWZhdWx0TWVzc2FnZToiUGFzc2VkIn0sc3RhdGlzdGljcyRleGVjdXRpb25zJGZhaWxlZDp7aWQ6IkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZXhlY3V0aW9ucyRmYWlsZWQiLGRlZmF1bHRNZXNzYWdlOiJGYWlsZWQifSxzdGF0aXN0aWNzJGV4ZWN1dGlvbnMkc2tpcHBlZDp7aWQ6IkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZXhlY3V0aW9ucyRza2lwcGVkIixkZWZhdWx0TWVzc2FnZToiU2tpcHBlZCJ9LHN0YXRpc3RpY3MkZGVmZWN0cyRwcm9kdWN0X2J1Zzp7aWQ6IkZpbHRlck5hbWVCeUlkLnN0YXRpc3RpY3MkZGVmZWN0cyRwcm9kdWN0X2J1ZyIsZGVmYXVsdE1lc3NhZ2U6IlByb2R1Y3QgYnVnIn0sc3RhdGlzdGljcyRkZWZlY3RzJGF1dG9tYXRpb25fYnVnOntpZDoiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRkZWZlY3RzJGF1dG9tYXRpb25fYnVnIixkZWZhdWx0TWVzc2FnZToiQXV0b21hdGlvbiBidWcifSxzdGF0aXN0aWNzJGRlZmVjdHMkc3lzdGVtX2lzc3VlOntpZDoiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRkZWZlY3RzJHN5c3RlbV9pc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6IlN5c3RlbSBpc3N1ZSJ9LHN0YXRpc3RpY3MkZGVmZWN0cyRub19kZWZlY3Q6e2lkOiJGaWx0ZXJOYW1lQnlJZC5zdGF0aXN0aWNzJGRlZmVjdHMkbm9fZGVmZWN0IixkZWZhdWx0TWVzc2FnZToiTm8gZGVmZWN0In0sc3RhdGlzdGljcyRkZWZlY3RzJHRvX2ludmVzdGlnYXRlOntpZDoiRmlsdGVyTmFtZUJ5SWQuc3RhdGlzdGljcyRkZWZlY3RzJHRvX2ludmVzdGlnYXRlIixkZWZhdWx0TWVzc2FnZToiVG8gaW52ZXN0aWdhdGUifSxvZlRlc3RDYXNlczp7aWQ6IldpZGdldHMub2ZUZXN0Q2FzZXMiLGRlZmF1bHRNZXNzYWdlOiJvZiB0ZXN0IGNhc2VzIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hFeGVjdXRpb25BbmRJc3N1ZVN0YXRpc3RpY3MvbWVzc2FnZXMuanMiKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoU3RhdGlzdGljc0NoYXJ0L2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5UT1RBTF9LRVk9InRvdGFsIixvPXQuQ0hBUlRfT0ZGU0VUPTQwLjU7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlRPVEFMX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiQ0hBUlRfT0ZGU0VUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaFN0YXRpc3RpY3NDaGFydC9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaFN0YXRpc3RpY3NDaGFydC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMYXVuY2hTdGF0aXN0aWNzQ2hhcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaFN0YXRpc3RpY3NDaGFydH19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoU3RhdGlzdGljc0NoYXJ0L2xhdW5jaFN0YXRpc3RpY3NDaGFydC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaFN0YXRpc3RpY3NDaGFydD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hdGgvdHJ1bmMuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxNPXIodyksaz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksST1yKGspLFA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxOPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEg9cihOKSxGPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksQj1uKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiksVT1yKEIpLEc9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSx6PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxWPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oeiksVz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vc2VydmVyLmJyb3dzZXIuanMiKSxZPXIoVykscT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEs9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLFg9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSwkPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxRPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9pbmRleC5qcyIpLEo9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy90ZXN0U3RhdHVzZXMuanMiKSxaPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvY2hhcnRNb2Rlcy5qcyIpLGVlPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksdGU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxuZT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2luZGV4LmpzIikscmU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vbGVnZW5kL2luZGV4LmpzIiksb2U9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC9pbmRleC5qcyIpLHNlPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL21lc3NhZ2VzLmpzIiksaWU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvY29uc3RhbnRzLmpzIiksYWU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LnNjc3MiKSxsZT1yKGFlKSx1ZT17TGF1bmNoU3RhdGlzdGljc0NoYXJ0OntkaXNwbGF5TmFtZToiTGF1bmNoU3RhdGlzdGljc0NoYXJ0In19LGNlPSgwLE0uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoU3RhdGlzdGljc0NoYXJ0L2xhdW5jaFN0YXRpc3RpY3NDaGFydC5qc3giLGNvbXBvbmVudHM6dWUsbG9jYWxzOltlXSxpbXBvcnRzOltELmRlZmF1bHRdfSksZGU9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LmpzeCIsY29tcG9uZW50czp1ZSxsb2NhbHM6W10saW1wb3J0czpbRC5kZWZhdWx0LFIuZGVmYXVsdF19KSxfZT1ILmRlZmF1bHQuYmluZChsZS5kZWZhdWx0KSxwZT10LkxhdW5jaFN0YXRpc3RpY3NDaGFydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGNlKGRlKHQsZSksZSl9fSgiTGF1bmNoU3RhdGlzdGljc0NoYXJ0IikoKG89KDAsRi5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdDooMCwkLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSksZGVmZWN0VHlwZXM6KDAsSy5kZWZlY3RUeXBlc1NlbGVjdG9yKShlKSxnZXREZWZlY3RMaW5rOmZ1bmN0aW9uKHQpe3JldHVybigwLFguZGVmZWN0TGlua1NlbGVjdG9yKShlLHQpfSxnZXRTdGF0aXN0aWNzTGluazpmdW5jdGlvbih0KXtyZXR1cm4oMCxYLnN0YXRpc3RpY3NMaW5rU2VsZWN0b3IpKGUsdCl9fX0se3JlZGlyZWN0OkcucmVkaXJlY3QsY3JlYXRlRmlsdGVyQWN0aW9uOlEuY3JlYXRlRmlsdGVyQWN0aW9ufSksKDAsUC5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsRS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxBLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGcuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNDb25maWdSZWFkeTohMX0sci5vbkNoYXJ0Q3JlYXRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25EZWZhdWx0Q2hhcnRDcmVhdGVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkRlZmF1bHRDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DdXN0b21DaGFydENyZWF0ZWQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ3VzdG9tQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uTW91c2VPdXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25Nb3VzZU92ZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DaGFydENsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25JdGVtTW91c2VPdmVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkl0ZW1Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25JdGVtTW91c2VPdXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uSXRlbU1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uSXRlbU1vdXNlTW92ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25JdGVtTW91c2VNb3ZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldExpbmtQYXJhbWV0ZXJzU3RhdHVzZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldExpbmtQYXJhbWV0ZXJzU3RhdHVzZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0RGVmYXVsdExpbmtQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldHVwQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0dXBDb25maWdEYXRhPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cENvbmZpZ0RhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIubGF1bmNoTW9kZUNsaWNrSGFuZGxlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50aW1lTGluZU1vZGVDbGlja0hhbmRsZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RpbWVMaW5lTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5wcmVwYXJlQ2hhcnREYXRhPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19wcmVwYXJlQ2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmNyZWF0ZUludGVyYWN0aXZlVG9vbHRpcD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlSW50ZXJhY3RpdmVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlbW92ZUNoYXJ0TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW1vdmVDaGFydExpc3RlbmVyc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pc1NpbmdsZUNvbHVtbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNTaW5nbGVDb2x1bW5fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaXNDdXN0b21Ub29sdGlwTmVlZGVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0N1c3RvbVRvb2x0aXBOZWVkZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVzaXplQ2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlbmRlckNvbnRlbnRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLEEuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxPLmRlZmF1bHQpKHQsZSksKDAsdi5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0N1c3RvbVRvb2x0aXBOZWVkZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzQ3VzdG9tVG9vbHRpcE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNTaW5nbGVDb2x1bW5fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2luZ2xlQ29sdW1uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVDaGFydExpc3RlbmVyc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVtb3ZlQ2hhcnRMaXN0ZW5lcnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZUludGVyYWN0aXZlVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlSW50ZXJhY3RpdmVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wcmVwYXJlQ2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlQ2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190aW1lTGluZU1vZGVDbGlja0hhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RpbWVMaW5lTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb25maWdEYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvbmZpZ0RhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRMaW5rUGFyYW1ldGVyc1N0YXR1c2VzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRMaW5rUGFyYW1ldGVyc1N0YXR1c2VzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkl0ZW1Nb3VzZU1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXRlbU1vdXNlTW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JdGVtTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXRlbU1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkl0ZW1Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXRlbU1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DdXN0b21DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ3VzdG9tQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkRlZmF1bHRDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRGVmYXVsdENoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7IXRoaXMucHJvcHMuaXNQcmV2aWV3JiZ0aGlzLnByb3BzLm9ic2VydmVyLnN1YnNjcmliZSgid2lkZ2V0UmVzaXplZCIsdGhpcy5yZXNpemVDaGFydCksdGhpcy5nZXRDb25maWcoKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuaXNQcmV2aWV3fHwodGhpcy5pc0N1c3RvbVRvb2x0aXBOZWVkZWQoKT90aGlzLnJlbW92ZUNoYXJ0TGlzdGVuZXJzKCk6dGhpcy5ub2RlJiZ0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSx0aGlzLnByb3BzLm9ic2VydmVyLnVuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuY2hhcnQ9ZSx0aGlzLm5vZGU9dCx0aGlzLnByb3BzLmlzUHJldmlld3x8KHRoaXMuaXNDdXN0b21Ub29sdGlwTmVlZGVkKCk/dGhpcy5vbkN1c3RvbUNoYXJ0Q3JlYXRlZCgpOnRoaXMub25EZWZhdWx0Q2hhcnRDcmVhdGVkKCkpfX0se2tleToiX19vbkRlZmF1bHRDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRGVmYXVsdENoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25EZWZhdWx0Q2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkRlZmF1bHRDaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRGVmYXVsdENoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuc2V0dXBDb29yZHMpfX0se2tleToiX19vbkN1c3RvbUNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DdXN0b21DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ3VzdG9tQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkN1c3RvbUNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DdXN0b21DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmludGVyYWN0RWxlbXM9Vi5zZWxlY3RBbGwodGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pc1NpbmdsZUNvbHVtbigpPyIuYzMtY2lyY2xlIjoiLmMzLWFyZWEiKSksdGhpcy5pc1NpbmdsZUNvbHVtbigpJiZ0aGlzLmludGVyYWN0RWxlbXMuX2dyb3Vwc1swXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudmFsdWV8fFYuc2VsZWN0KHRoaXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpfSksdGhpcy5jcmVhdGVJbnRlcmFjdGl2ZVRvb2x0aXAoKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2hhcnQucmV2ZXJ0KCl9fSx7a2V5OiJfX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNoYXJ0LmZvY3VzKGUpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY2hhcnQudG9nZ2xlKGUpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb25maWdEYXRhLmlzVGltZUxpbmU/dGhpcy50aW1lTGluZU1vZGVDbGlja0hhbmRsZXIoZSk6dGhpcy5sYXVuY2hNb2RlQ2xpY2tIYW5kbGVyKGUpfX0se2tleToiX19vbkl0ZW1Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXRlbU1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JdGVtTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkl0ZW1Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXRlbU1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2x0aXAuc3R5bGUoImRpc3BsYXkiLCJibG9jayIpfX0se2tleToiX19vbkl0ZW1Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25JdGVtTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXRlbU1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkl0ZW1Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JdGVtTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b29sdGlwLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpfX0se2tleToiX19vbkl0ZW1Nb3VzZU1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uSXRlbU1vdXNlTW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JdGVtTW91c2VNb3ZlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkl0ZW1Nb3VzZU1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uSXRlbU1vdXNlTW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jMy1ldmVudC1yZWN0IilbMF0uZ2V0QXR0cmlidXRlKCJ3aWR0aCIpLHI9Vi5tb3VzZSh0aGlzLmNoYXJ0LmVsZW1lbnQpLG89bi9lLnZhbHVlcy5sZW5ndGgscz0oMCxtLmRlZmF1bHQpKChyWzBdLWllLkNIQVJUX09GRlNFVCkvbyk7dGhpcy5zZWxlY3RlZExhdW5jaERhdGE9ZS52YWx1ZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleD09PXN9KSx0aGlzLnRvb2x0aXAuaHRtbChmdW5jdGlvbigpe3JldHVybiB0LnJlbmRlckNvbnRlbnRzKFt0LnNlbGVjdGVkTGF1bmNoRGF0YV0sbnVsbCxudWxsLGZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbmZpZ0RhdGEuY29sb3JzW2VdfSl9KS5zdHlsZSgibGVmdCIsclswXS05MCsicHgiKS5zdHlsZSgidG9wIixyWzFdLTExNisicHgiKX19LHtrZXk6Il9fZ2V0TGlua1BhcmFtZXRlcnNTdGF0dXNlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0TGlua1BhcmFtZXRlcnNTdGF0dXNlc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TGlua1BhcmFtZXRlcnNTdGF0dXNlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0TGlua1BhcmFtZXRlcnNTdGF0dXNlc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TGlua1BhcmFtZXRlcnNTdGF0dXNlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmVjdFR5cGU7cmV0dXJuIHQ9PT1pZS5UT1RBTF9LRVk/W0ouUEFTU0VELEouRkFJTEVELEouU0tJUFBFRCxKLklOVEVSUlVQVEVEXTpbdC50b1VwcGVyQ2FzZSgpXX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybntwYXlsb2FkOntwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0LGZpbHRlcklkOiJhbGwiLHRlc3RJdGVtSWRzOmV9LHR5cGU6cS5URVNUX0lURU1fUEFHRX19fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VYLG49ZS5wYWdlWTt0aGlzLng9dCx0aGlzLnk9bn19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuaXNQcmV2aWV3LHI9dC53aWRnZXQuY29udGVudDtyJiYoMCxwLmRlZmF1bHQpKHIpLmxlbmd0aCYmKHRoaXMucHJlcGFyZUNoYXJ0RGF0YSgpLHRoaXMuY29uZmlnPXtkYXRhOntjb2x1bW5zOnRoaXMuY29uZmlnRGF0YS5jaGFydERhdGFPcmRlcmVkLHR5cGU6dGhpcy5jb25maWdEYXRhLndpZGdldFZpZXdNb2RlLG9uY2xpY2s6bnx8dGhpcy5pc0N1c3RvbVRvb2x0aXBOZWVkZWQoKT9udWxsOnRoaXMub25DaGFydENsaWNrLG9yZGVyOm51bGwsY29sb3JzOnRoaXMuY29uZmlnRGF0YS5jb2xvcnMsZ3JvdXBzOlt0aGlzLmNvbmZpZ0RhdGEuaXRlbU5hbWVzXX0scG9pbnQ6e3Nob3c6dGhpcy5pc1NpbmdsZUNvbHVtbigpJiZ0aGlzLmNvbmZpZ0RhdGEud2lkZ2V0Vmlld01vZGU9PT1aLk1PREVTX1ZBTFVFU1taLkNIQVJUX01PREVTLkFSRUFfVklFV10scjozLGZvY3VzOntleHBhbmQ6e3I6NX19fSxheGlzOnt4OntzaG93OiFuLHR5cGU6ImNhdGVnb3J5IixjYXRlZ29yaWVzOnRoaXMuY29uZmlnRGF0YS5pdGVtRGF0YS5tYXAoZnVuY3Rpb24odCl7aWYoZS5jb25maWdEYXRhLmlzVGltZUxpbmUpe3JldHVybigwLFUuZGVmYXVsdCkodC5kYXRlKS5mb3JtYXQoImRkZGQiKS5zdWJzdHJpbmcoMCwzKSsiLCAiK3QuZGF0ZX1yZXR1cm4iIyIrdC5udW1iZXJ9KSx0aWNrOnt2YWx1ZXM6dGhpcy5jb25maWdEYXRhLmlzVGltZUxpbmU/KDAsdGUuZ2V0VGltZWxpbmVBeGlzVGlja3MpKHRoaXMuY29uZmlnRGF0YS5pdGVtRGF0YS5sZW5ndGgpOigwLHRlLmdldExhdW5jaEF4aXNUaWNrcykodGhpcy5jb25maWdEYXRhLml0ZW1EYXRhLmxlbmd0aCksd2lkdGg6NjAsY2VudGVyZWQ6ITAsaW5uZXI6ITAsbXVsdGlsaW5lOnRoaXMuY29uZmlnRGF0YS5pc1RpbWVMaW5lLG91dGVyOiExfX0seTp7c2hvdzohbiYmdGhpcy5wcm9wcy5pc0Z1bGxzY3JlZW4scGFkZGluZzp7dG9wOnRoaXMuY29uZmlnRGF0YS53aWRnZXRWaWV3TW9kZT09PVouTU9ERVNfVkFMVUVTW1ouQ0hBUlRfTU9ERVMuQVJFQV9WSUVXXT8zOjB9fX0saW50ZXJhY3Rpb246e2VuYWJsZWQ6IW59LHpvb206e2VuYWJsZWQ6IW4mJnRoaXMuY29uZmlnRGF0YS5pc1pvb21FbmFibGVkLHJlc2NhbGU6IW4mJnRoaXMuY29uZmlnRGF0YS5pc1pvb21FbmFibGVkLG9uem9vbWVuZDpmdW5jdGlvbigpe2UuY2hhcnQuZmx1c2goKX19LHN1YmNoYXJ0OntzaG93OiFuJiZ0aGlzLmNvbmZpZ0RhdGEuaXNab29tRW5hYmxlZCxzaXplOntoZWlnaHQ6MzB9fSxwYWRkaW5nOnt0b3A6bj8wOjg1LGxlZnQ6bj8wOjQwLHJpZ2h0Om4/MDoyMCxib3R0b206bnx8IXRoaXMuY29uZmlnRGF0YS5pc1RpbWVMaW5lPzA6MTB9LGxlZ2VuZDp7c2hvdzohMX0sdG9vbHRpcDp7c2hvdzohbiYmIXRoaXMuaXNDdXN0b21Ub29sdGlwTmVlZGVkKCksZ3JvdXBlZDohMSxwb3NpdGlvbjp0aGlzLmdldFBvc2l0aW9uLGNvbnRlbnRzOnRoaXMucmVuZGVyQ29udGVudHN9LHNpemU6e2hlaWdodDp0aGlzLmhlaWdodH19LHRoaXMuc2V0U3RhdGUoe2lzQ29uZmlnUmVhZHk6ITB9KSl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy54LXIubGVmdC10LzI7cmV0dXJue3RvcDp0aGlzLnktci50b3Atbi04LGxlZnQ6b319fSx7a2V5OiJfX3NldHVwQ29uZmlnRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0dXBDb25maWdEYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvbmZpZ0RhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29uZmlnRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb25maWdEYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4uZGVmZWN0VHlwZXMsbz1uLndpZGdldC5jb250ZW50UGFyYW1ldGVycyxzPW8uY29udGVudEZpZWxkcyxpPW8ud2lkZ2V0T3B0aW9ucyxhPVtdLGw9e30sdT1bXSxjPXt9O3MuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0oMCx0ZS5nZXRJdGVtTmFtZUNvbmZpZykoZSk7bFtlXT1bZV0sY1tlXT0oMCx0ZS5nZXRJdGVtQ29sb3IpKHQscil9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49KDAsZC5kZWZhdWx0KSh7fSxlKTtkZWxldGUgbi52YWx1ZXMsYS5wdXNoKG4pLHMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1lLnZhbHVlc1tuXXx8MDtsW25dLnB1c2goIU51bWJlcihyKSYmdD9udWxsOk51bWJlcihyKSl9KX0pLHMuZm9yRWFjaChmdW5jdGlvbihlKXt1LnB1c2gobFtlXSl9KSx0aGlzLmNvbmZpZ0RhdGE9e2l0ZW1EYXRhOmEsY2hhcnREYXRhT3JkZXJlZDp1LGl0ZW1OYW1lczp1Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pLGNvbG9yczpjLGlzVGltZUxpbmU6dCxpc1pvb21FbmFibGVkOmkuem9vbSx3aWRnZXRWaWV3TW9kZTppLnZpZXdNb2RlfX19LHtrZXk6Il9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbGF1bmNoTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC53aWRnZXQscj10LmdldERlZmVjdExpbmssbz10LmdldFN0YXRpc3RpY3NMaW5rLHM9dC5kZWZlY3RUeXBlcyxpPSgwLHRlLmdldEl0ZW1OYW1lQ29uZmlnKShlLmlkKSxhPW4uY29udGVudC5yZXN1bHRbZS5pbmRleF0uaWQsbD10aGlzLmdldERlZmF1bHRMaW5rUGFyYW1zKGEpLGM9KDAsdGUuZ2V0RGVmZWN0VHlwZUxvY2F0b3JzKShpLHMpLGQ9Yz9yKHtkZWZlY3RzOmMsaXRlbUlkOmF9KTpvKHtzdGF0dXNlczp0aGlzLmdldExpbmtQYXJhbWV0ZXJzU3RhdHVzZXMoaSl9KTt0aGlzLnByb3BzLnJlZGlyZWN0KCgwLHUuZGVmYXVsdCkoZCxsKSl9fSx7a2V5OiJfX3RpbWVMaW5lTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdGltZUxpbmVNb2RlQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190aW1lTGluZU1vZGVDbGlja0hhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RpbWVMaW5lTW9kZUNsaWNrSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdGltZUxpbmVNb2RlQ2xpY2tIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uZmlnRGF0YS5pdGVtRGF0YVtlLmluZGV4XS5kYXRlLG49KDAsVS5kZWZhdWx0KSh0KS52YWx1ZU9mKCkscj1uKyIsIisobis4NjRlNSksbz10aGlzLnByb3BzLndpZGdldC5hcHBsaWVkRmlsdGVyc1swXSxzPXtmaWx0ZXJpbmdGaWVsZDplZS5FTlRJVFlfU1RBUlRfVElNRSx2YWx1ZTpyLGNvbmRpdGlvbjplZS5DT05ESVRJT05fQkVUV0VFTn0saT17b3JkZXJzOm8ub3JkZXJzLHR5cGU6by50eXBlLGNvbmRpdGlvbnM6by5jb25kaXRpb25zLmNvbmNhdChzKX07dGhpcy5wcm9wcy5jcmVhdGVGaWx0ZXJBY3Rpb24oaSl9fSx7a2V5OiJfX3ByZXBhcmVDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jb250YWluZXIsbj1lLndpZGdldCxyPW4uY29udGVudC5yZXN1bHQsbz1uLmNvbnRlbnRQYXJhbWV0ZXJzLndpZGdldE9wdGlvbnMscz1bXSxpPW8udGltZWxpbmU9PT1aLk1PREVTX1ZBTFVFU1taLkNIQVJUX01PREVTLlRJTUVMSU5FX01PREVdO2k/KDAscC5kZWZhdWx0KShyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3MucHVzaCh7ZGF0ZTplLHZhbHVlczpyW2VdLnZhbHVlc30pfSk6cz1yLHRoaXMuaGVpZ2h0PXQub2Zmc2V0SGVpZ2h0LHRoaXMud2lkdGg9dC5vZmZzZXRXaWR0aCx0aGlzLnNldHVwQ29uZmlnRGF0YShzLGkpfX0se2tleToiX19jcmVhdGVJbnRlcmFjdGl2ZVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUludGVyYWN0aXZlVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlSW50ZXJhY3RpdmVUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVJbnRlcmFjdGl2ZVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZUludGVyYWN0aXZlVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50b29sdGlwPVYuc2VsZWN0KHRoaXMubm9kZS5xdWVyeVNlbGVjdG9yKCIuYzMtdG9vbHRpcC1jb250YWluZXIiKSksdGhpcy5pbnRlcmFjdEVsZW1zJiZ0aGlzLmludGVyYWN0RWxlbXMub24oIm1vdXNlbW92ZSIsdGhpcy5vbkl0ZW1Nb3VzZU1vdmUpLm9uKCJtb3VzZW92ZXIiLHRoaXMub25JdGVtTW91c2VPdmVyKS5vbigibW91c2VvdXQiLHRoaXMub25JdGVtTW91c2VPdXQpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkNoYXJ0Q2xpY2soZS5zZWxlY3RlZExhdW5jaERhdGEpfSl9fSx7a2V5OiJfX3JlbW92ZUNoYXJ0TGlzdGVuZXJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVDaGFydExpc3RlbmVyc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVtb3ZlQ2hhcnRMaXN0ZW5lcnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbW92ZUNoYXJ0TGlzdGVuZXJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVDaGFydExpc3RlbmVyc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaW50ZXJhY3RFbGVtcyYmdGhpcy5pbnRlcmFjdEVsZW1zLm9uKCJjbGljayBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IixudWxsKX19LHtrZXk6Il9faXNTaW5nbGVDb2x1bW5fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2luZ2xlQ29sdW1uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc1NpbmdsZUNvbHVtbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNTaW5nbGVDb2x1bW5fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzU2luZ2xlQ29sdW1uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZmlnRGF0YS5pdGVtRGF0YS5sZW5ndGg8Mn19LHtrZXk6Il9faXNDdXN0b21Ub29sdGlwTmVlZGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0N1c3RvbVRvb2x0aXBOZWVkZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzQ3VzdG9tVG9vbHRpcE5lZWRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNDdXN0b21Ub29sdGlwTmVlZGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0N1c3RvbVRvb2x0aXBOZWVkZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWdEYXRhLndpZGdldFZpZXdNb2RlPT09Wi5NT0RFU19WQUxVRVNbWi5DSEFSVF9NT0RFUy5BUkVBX1ZJRVddJiYhdGhpcy5jb25maWdEYXRhLmlzVGltZUxpbmV9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldEhlaWdodCx0PXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0IT09ZT8odGhpcy5jaGFydC5yZXNpemUoe2hlaWdodDplfSksdGhpcy5oZWlnaHQ9ZSk6dGhpcy53aWR0aCE9PXQmJih0aGlzLmNoYXJ0LmZsdXNoKCksdGhpcy53aWR0aD10KX19LHtrZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMuY29uZmlnRGF0YS5pdGVtRGF0YVtlWzBdLmluZGV4XSxzPW8ubmFtZSxpPW8ubnVtYmVyLGE9by5zdGFydFRpbWUsbD1vLmRhdGUsdT10aGlzLnByb3BzLGM9dS5pbnRsLmZvcm1hdE1lc3NhZ2UsZD11LmRlZmVjdFR5cGVzLF89ZVswXS5pZDtyZXR1cm4gWS5kZWZhdWx0LnJlbmRlclRvU3RhdGljTWFya3VwKEQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KG9lLlRvb2x0aXBXcmFwcGVyLG51bGwsRC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQob2UuVG9vbHRpcENvbnRlbnQse2xhdW5jaE5hbWU6dGhpcy5jb25maWdEYXRhLmlzVGltZUxpbmU/bDpzLGxhdW5jaE51bWJlcjp0aGlzLmNvbmZpZ0RhdGEuaXNUaW1lTGluZT9udWxsOmksc3RhcnRUaW1lOnRoaXMuY29uZmlnRGF0YS5pc1RpbWVMaW5lP251bGw6TnVtYmVyKGEpLGl0ZW1DYXNlczplWzBdLnZhbHVlKyIgIitjKHNlLm1lc3NhZ2VzLmNhc2VzKSxjb2xvcjpyKF8pLGl0ZW1OYW1lOigwLHRlLmdldEl0ZW1OYW1lKSgoMCx0ZS5nZXRJdGVtTmFtZUNvbmZpZykoXyksZCxjKX0pKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuaXNDb25maWdSZWFkeSYmRC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobmUuQzNDaGFydCx7Y2xhc3NOYW1lOl9lKCJsYXVuY2gtc3RhdGlzdGljcy1jaGFydCIseyJhcmVhLXZpZXciOnRoaXMuY29uZmlnRGF0YS53aWRnZXRWaWV3TW9kZT09PVouTU9ERVNfVkFMVUVTW1ouQ0hBUlRfTU9ERVMuQVJFQV9WSUVXXSwiZnVsbC1zY3JlZW4iOnRoaXMucHJvcHMuaXNGdWxsc2NyZWVuLCJ0aW1lLWxpbmUiOnRoaXMuY29uZmlnRGF0YS5pc1RpbWVMaW5lLHByZXZpZXc6dGhpcy5wcm9wcy5pc1ByZXZpZXd9KSxjb25maWc6dGhpcy5jb25maWcsb25DaGFydENyZWF0ZWQ6dGhpcy5vbkNoYXJ0Q3JlYXRlZH0sIXRoaXMucHJvcHMuaXNQcmV2aWV3JiZELmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZS5MZWdlbmQse2l0ZW1zOnRoaXMuY29uZmlnRGF0YS5pdGVtTmFtZXMsb25DbGljazp0aGlzLm9uQ2xpY2ssb25Nb3VzZU92ZXI6dGhpcy5vbk1vdXNlT3Zlcixvbk1vdXNlT3V0OnRoaXMub25Nb3VzZU91dH0pKX19XSksdH0oTC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOlAuaW50bFNoYXBlLmlzUmVxdWlyZWQscmVkaXJlY3Q6SS5kZWZhdWx0LmZ1bmMsd2lkZ2V0OkkuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxwcm9qZWN0OkkuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkZWZlY3RUeXBlczpJLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0RGVmZWN0TGluazpJLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRpc3RpY3NMaW5rOkkuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsY29udGFpbmVyOkkuZGVmYXVsdC5pbnN0YW5jZU9mKEVsZW1lbnQpLmlzUmVxdWlyZWQsY3JlYXRlRmlsdGVyQWN0aW9uOkkuZGVmYXVsdC5mdW5jLGlzUHJldmlldzpJLmRlZmF1bHQuYm9vbCxpc0Z1bGxzY3JlZW46SS5kZWZhdWx0LmJvb2wsaGVpZ2h0OkkuZGVmYXVsdC5udW1iZXIsb2JzZXJ2ZXI6SS5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e3JlZGlyZWN0OmZ1bmN0aW9uKCl7fSxnZXREZWZlY3RMaW5rOmZ1bmN0aW9uKCl7fSxnZXRTdGF0aXN0aWNzTGluazpmdW5jdGlvbigpe30sY3JlYXRlRmlsdGVyQWN0aW9uOmZ1bmN0aW9uKCl7fSxpc1ByZXZpZXc6ITEsaXNGdWxsc2NyZWVuOiExLGhlaWdodDowLG9ic2VydmVyOnt9fSxzPWEpKXx8cyl8fHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocGUsIkxhdW5jaFN0YXRpc3RpY3NDaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF9lLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hTdGF0aXN0aWNzQ2hhcnQvbGF1bmNoU3RhdGlzdGljc0NoYXJ0LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibGF1bmNoLXN0YXRpc3RpY3MtY2hhcnQiOiJsYXVuY2hTdGF0aXN0aWNzQ2hhcnRfX2xhdW5jaC1zdGF0aXN0aWNzLWNoYXJ0X19fMXJrdUMiLHByZXZpZXc6ImxhdW5jaFN0YXRpc3RpY3NDaGFydF9fcHJldmlld19fXzNKYVgzIiwiYXJlYS12aWV3IjoibGF1bmNoU3RhdGlzdGljc0NoYXJ0X19hcmVhLXZpZXdfX18xMERUVyIsInRpbWUtbGluZSI6ImxhdW5jaFN0YXRpc3RpY3NDaGFydF9fdGltZS1saW5lX19fbTVoZ3ciLCJmdWxsLXNjcmVlbiI6ImxhdW5jaFN0YXRpc3RpY3NDaGFydF9fZnVsbC1zY3JlZW5fX18zRV9tTSJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0fX0pfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0PXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLE09cih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLFA9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxOPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxIPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0oTiksRj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vc2VydmVyLmJyb3dzZXIuanMiKSxCPXIoRiksVT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEc9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLHo9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSxWPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxXPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksWT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2luZGV4LmpzIikscT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL2luZGV4LmpzIiksSz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvaW5kZXguanMiKSxYPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQuc2NzcyIpLCQ9cihYKSxRPXtMYXVuY2hlc0NvbXBhcmlzb25DaGFydDp7ZGlzcGxheU5hbWU6IkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0In19LEo9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC5qc3giLGNvbXBvbmVudHM6USxsb2NhbHM6W2VdLGltcG9ydHM6W1IuZGVmYXVsdF19KSxaPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQuanN4Iixjb21wb25lbnRzOlEsbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksZWU9TS5kZWZhdWx0LmJpbmQoJC5kZWZhdWx0KSx0ZT0oMCxrLmRlZmluZU1lc3NhZ2VzKSh7b2ZUZXN0Q2FzZXM6e2lkOiJXaWRnZXRzLm9mVGVzdENhc2VzIixkZWZhdWx0TWVzc2FnZToib2YgdGVzdCBjYXNlcyJ9fSksbmU9dC5MYXVuY2hlc0NvbXBhcmlzb25DaGFydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEooWih0LGUpLGUpfX0oIkxhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0IikoKG89KDAsSS5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdDooMCxWLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSksZGVmZWN0VHlwZXM6KDAsRy5kZWZlY3RUeXBlc1NlbGVjdG9yKShlKSxnZXREZWZlY3RMaW5rOmZ1bmN0aW9uKHQpe3JldHVybigwLHouZGVmZWN0TGlua1NlbGVjdG9yKShlLHQpfSxnZXRTdGF0aXN0aWNzTGluazpmdW5jdGlvbih0KXtyZXR1cm4oMCx6LnN0YXRpc3RpY3NMaW5rU2VsZWN0b3IpKGUse3N0YXR1c2VzOlt0XX0pfX19LHtyZWRpcmVjdDpQLnJlZGlyZWN0fSksKDAsay5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNDb25maWdSZWFkeTohMX0sci5vbkNoYXJ0Q3JlYXRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25Nb3VzZU91dD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbk1vdXNlT3Zlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkNoYXJ0Q2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREZWZhdWx0TGlua1BhcmFtcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldENvbmZpZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldHVwQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZXNpemVDaGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyQ29udGVudHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5wcm9wcy5pc1ByZXZpZXcmJnRoaXMucHJvcHMub2JzZXJ2ZXIuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSx0aGlzLmdldENvbmZpZygpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pc1ByZXZpZXd8fCh0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSx0aGlzLnByb3BzLm9ic2VydmVyLnVuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuY2hhcnQ9ZSx0aGlzLm5vZGU9dCx0aGlzLnByb3BzLndpZGdldC5jb250ZW50LnJlc3VsdCYmIXRoaXMucHJvcHMuaXNQcmV2aWV3JiYodGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5zZXR1cENvb3JkcyksSC5zZWxlY3RBbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmMzLWNoYXJ0LWJhciBwYXRoIikpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1ILnNlbGVjdCh0aGlzKTswPT09ZS5kYXR1bSgpLnZhbHVlJiZlLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIzcHgiKX0pKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU91dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2hhcnQucmV2ZXJ0KCl9fSx7a2V5OiJfX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNoYXJ0LmZvY3VzKGUpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY2hhcnQudG9nZ2xlKGUpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC53aWRnZXQscj10LmdldERlZmVjdExpbmssbz10LmdldFN0YXRpc3RpY3NMaW5rLHM9dC5kZWZlY3RUeXBlcyxpPSgwLFcuZ2V0SXRlbU5hbWVDb25maWcpKGUuaWQpLGE9bi5jb250ZW50LnJlc3VsdFtlLmluZGV4XS5pZCxsPXRoaXMuZ2V0RGVmYXVsdExpbmtQYXJhbXMoYSksdT0oMCxXLmdldERlZmVjdFR5cGVMb2NhdG9ycykoaSxzKSxjPXU/cih7ZGVmZWN0czp1LGl0ZW1JZDphfSk6byhpLmRlZmVjdFR5cGUudG9VcHBlckNhc2UoKSk7dGhpcy5wcm9wcy5yZWRpcmVjdCgoMCxkLmRlZmF1bHQpKGMsbCkpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue3BheWxvYWQ6e3Byb2plY3RJZDp0aGlzLnByb3BzLnByb2plY3QsZmlsdGVySWQ6ImFsbCIsdGVzdEl0ZW1JZHM6ZX0sdHlwZTpVLlRFU1RfSVRFTV9QQUdFfX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLngtci5sZWZ0LXQvMjtyZXR1cm57dG9wOnRoaXMueS1yLnRvcC1uLTgsbGVmdDpvfX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQud2lkZ2V0LHI9dC5pbnRsLG89dC5pc1ByZXZpZXcscz10LmNvbnRhaW5lcixpPW4uY29udGVudC5yZXN1bHQsYT17fSxsPVtdLGM9e30sZD1uLmNvbnRlbnRQYXJhbWV0ZXJzLmNvbnRlbnRGaWVsZHM7dGhpcy5oZWlnaHQ9cy5vZmZzZXRIZWlnaHQsdGhpcy53aWR0aD1zLm9mZnNldFdpZHRoLHRoaXMuaXRlbURhdGE9W10sZC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPSgwLFcuZ2V0SXRlbU5hbWVDb25maWcpKHQpO2FbdF09W3RdLGNbdF09KDAsVy5nZXRJdGVtQ29sb3IpKG4sZS5wcm9wcy5kZWZlY3RUeXBlcyl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5pdGVtRGF0YS5wdXNoKHtpZDp0LmlkLG5hbWU6dC5uYW1lLG51bWJlcjp0Lm51bWJlcixzdGFydFRpbWU6dC5zdGFydFRpbWV9KSwoMCx1LmRlZmF1bHQpKHQudmFsdWVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQudmFsdWVzW2VdO2FbZV0ucHVzaChuKX0pfSksZC5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJzdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWwiIT09ZSYmbC5wdXNoKGFbZV0pfSksdGhpcy5pdGVtTmFtZXM9bC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSx0aGlzLmNvbmZpZz17ZGF0YTp7Y29sdW1uczpsLHR5cGU6ImJhciIsb25jbGljazp0aGlzLm9uQ2hhcnRDbGljayxvcmRlcjpudWxsLGNvbG9yczpjfSxncmlkOnt5OntzaG93OiFvfX0sYXhpczp7eDp7c2hvdzohbyx0eXBlOiJjYXRlZ29yeSIsY2F0ZWdvcmllczp0aGlzLml0ZW1EYXRhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iIyIrZS5udW1iZXJ9KSx0aWNrOntjZW50ZXJlZDohMCxpbm5lcjohMCxvdXRlcjohMX0sbGluZXM6W3t2YWx1ZTo1LHRleHQ6IkxhYmVsIixjbGFzczoiY29sb3ItZ3JpZCJ9XX0seTp7c2hvdzohbyxwYWRkaW5nOnt0b3A6MH0sbWF4OjEwMCxsYWJlbDp7dGV4dDoiJSAiK3IuZm9ybWF0TWVzc2FnZSh0ZS5vZlRlc3RDYXNlcykscG9zaXRpb246Im91dGVyLW1pZGRsZSJ9fX0saW50ZXJhY3Rpb246e2VuYWJsZWQ6IW99LHBhZGRpbmc6e3RvcDpvPzA6ODUsbGVmdDpvPzA6NjAscmlnaHQ6bz8wOjIwLGJvdHRvbTowfSxsZWdlbmQ6e3Nob3c6ITF9LHRvb2x0aXA6e2dyb3VwZWQ6ITEscG9zaXRpb246dGhpcy5nZXRQb3NpdGlvbixjb250ZW50czp0aGlzLnJlbmRlckNvbnRlbnRzfSxzaXplOntoZWlnaHQ6dGhpcy5oZWlnaHR9fSx0aGlzLnNldFN0YXRlKHtpc0NvbmZpZ1JlYWR5OiEwfSl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VYLG49ZS5wYWdlWTt0aGlzLng9dCx0aGlzLnk9bn19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LHQ9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0V2lkdGg7dGhpcy5oZWlnaHQhPT1lPyh0aGlzLmNoYXJ0LnJlc2l6ZSh7aGVpZ2h0OmV9KSx0aGlzLmhlaWdodD1lKTp0aGlzLndpZHRoIT09dCYmKHRoaXMuY2hhcnQuZmx1c2goKSx0aGlzLndpZHRoPXQpfX0se2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcy5pdGVtRGF0YVtlWzBdLmluZGV4XSxzPW8ubmFtZSxpPW8ubnVtYmVyLGE9by5zdGFydFRpbWUsbD10aGlzLnByb3BzLHU9bC5pbnRsLmZvcm1hdE1lc3NhZ2UsYz1sLmRlZmVjdFR5cGVzLGQ9ZVswXS5pZDtyZXR1cm4gQi5kZWZhdWx0LnJlbmRlclRvU3RhdGljTWFya3VwKFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHEuVG9vbHRpcFdyYXBwZXIsbnVsbCxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChxLlRvb2x0aXBDb250ZW50LHtsYXVuY2hOYW1lOnMsbGF1bmNoTnVtYmVyOmksc3RhcnRUaW1lOk51bWJlcihhKSxpdGVtQ2FzZXM6ZVswXS52YWx1ZSsiJSIsY29sb3I6cihkKSxpdGVtTmFtZTooMCxXLmdldEl0ZW1OYW1lKSgoMCxXLmdldEl0ZW1OYW1lQ29uZmlnKShkKSxjLHUsITApfSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS5pc0NvbmZpZ1JlYWR5JiZSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmVlKCJsYXVuY2hlcy1jb21wYXJpc29uLWNoYXJ0Iil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFkuQzNDaGFydCx7Y29uZmlnOnRoaXMuY29uZmlnLG9uQ2hhcnRDcmVhdGVkOnRoaXMub25DaGFydENyZWF0ZWR9LCF0aGlzLnByb3BzLmlzUHJldmlldyYmUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSy5MZWdlbmQse2l0ZW1zOnRoaXMuaXRlbU5hbWVzLG5vVG90YWw6ITAsb25DbGljazp0aGlzLm9uQ2xpY2ssb25Nb3VzZU92ZXI6dGhpcy5vbk1vdXNlT3Zlcixvbk1vdXNlT3V0OnRoaXMub25Nb3VzZU91dH0pKSl9fV0pLHR9KFMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDprLmludGxTaGFwZS5pc1JlcXVpcmVkLHJlZGlyZWN0OkQuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsd2lkZ2V0OkQuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxwcm9qZWN0OkQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkZWZlY3RUeXBlczpELmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZ2V0RGVmZWN0TGluazpELmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRpc3RpY3NMaW5rOkQuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsY29udGFpbmVyOkQuZGVmYXVsdC5pbnN0YW5jZU9mKEVsZW1lbnQpLmlzUmVxdWlyZWQsaXNQcmV2aWV3OkQuZGVmYXVsdC5ib29sLGhlaWdodDpELmRlZmF1bHQubnVtYmVyLG9ic2VydmVyOkQuZGVmYXVsdC5vYmplY3R9LGkuZGVmYXVsdFByb3BzPXtpc1ByZXZpZXc6ITEsaGVpZ2h0OjAsb2JzZXJ2ZXI6e319LHM9YSkpfHxzKXx8cykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihuZSwiTGF1bmNoZXNDb21wYXJpc29uQ2hhcnQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZWUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0L2xhdW5jaGVzQ29tcGFyaXNvbkNoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHRlLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC9sYXVuY2hlc0NvbXBhcmlzb25DaGFydC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQvbGF1bmNoZXNDb21wYXJpc29uQ2hhcnQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJsYXVuY2hlcy1jb21wYXJpc29uLWNoYXJ0IjoibGF1bmNoZXNDb21wYXJpc29uQ2hhcnRfX2xhdW5jaGVzLWNvbXBhcmlzb24tY2hhcnRfX18yMHl2MiJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkRVUkFUSU9OPSJkdXJhdGlvbiI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiRFVSQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2NvbnN0YW50cy5qcyIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaGVzRHVyYXRpb25DaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGF1bmNoZXNEdXJhdGlvbkNoYXJ0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5MYXVuY2hlc0R1cmF0aW9uQ2hhcnR9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9sYXVuY2hEdXJhdGlvblRvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaER1cmF0aW9uVG9vbHRpcC9sYXVuY2hEdXJhdGlvblRvb2x0aXAuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxhdW5jaER1cmF0aW9uVG9vbHRpcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTGF1bmNoRHVyYXRpb25Ub29sdGlwfX0pfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoRHVyYXRpb25Ub29sdGlwL2xhdW5jaER1cmF0aW9uVG9vbHRpcC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoRHVyYXRpb25Ub29sdGlwPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxjPXIodSksZD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL3Rvb2x0aXBXcmFwcGVyL2luZGV4LmpzIiksXz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHA9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoRHVyYXRpb25Ub29sdGlwL2xhdW5jaER1cmF0aW9uVG9vbHRpcC5zY3NzIiksZj1yKHApLG09Yy5kZWZhdWx0LmJpbmQoZi5kZWZhdWx0KSxoPXQuTGF1bmNoRHVyYXRpb25Ub29sdGlwPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGF1bmNoRGF0YSxuPWUudGltZVR5cGUscj1NYXRoLmFicyh0LmR1cmF0aW9uL24udmFsdWUpLG89KDAsbC5kdXJhdGlvbikocixuLnR5cGUpLmh1bWFuaXplKCEwKTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZC5Ub29sdGlwV3JhcHBlcixudWxsLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bSgibGF1bmNoLW5hbWUiKX0sdC5uYW1lLCIgIyIsdC5udW1iZXIpLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bSgibGF1bmNoLWR1cmF0aW9uIil9LCgwLF8uaXNWYWx1ZUludGVycnVwdGVkKSh0KT90LnRleHQud2lkZ2V0cy5sYXVuY2hJbnRlcnJ1cHRlZDpvKSl9O2gucHJvcFR5cGVzPXtsYXVuY2hEYXRhOmEuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0aW1lVHlwZTphLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJMYXVuY2hEdXJhdGlvblRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaER1cmF0aW9uVG9vbHRpcC9sYXVuY2hEdXJhdGlvblRvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaER1cmF0aW9uVG9vbHRpcC9sYXVuY2hEdXJhdGlvblRvb2x0aXAuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoRHVyYXRpb25Ub29sdGlwL2xhdW5jaER1cmF0aW9uVG9vbHRpcC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImxhdW5jaC1uYW1lIjoibGF1bmNoRHVyYXRpb25Ub29sdGlwX19sYXVuY2gtbmFtZV9fX2pYQnRYIiwibGF1bmNoLWR1cmF0aW9uIjoibGF1bmNoRHVyYXRpb25Ub29sdGlwX19sYXVuY2gtZHVyYXRpb25fX18yVXRBMyJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoZXNEdXJhdGlvbkNoYXJ0PXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxQPXIoSSksTj1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxCPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxpemF0aW9uLmpzIiksVT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIiksRz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHo9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vYzNjaGFydC9pbmRleC5qcyIpLFY9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoRHVyYXRpb25Ub29sdGlwL2luZGV4LmpzIiksVz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9wcmVwYXJlQ2hhcnREYXRhLmpzIiksWT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9jb25zdGFudHMuanMiKSxxPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaGVzRHVyYXRpb25DaGFydC5zY3NzIiksSz1yKHEpLFg9e0xhdW5jaGVzRHVyYXRpb25DaGFydDp7ZGlzcGxheU5hbWU6IkxhdW5jaGVzRHVyYXRpb25DaGFydCJ9fSwkPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaGVzRHVyYXRpb25DaGFydC5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxRPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L2xhdW5jaGVzRHVyYXRpb25DaGFydC5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxKPVAuZGVmYXVsdC5iaW5kKEsuZGVmYXVsdCksWj10LkxhdW5jaGVzRHVyYXRpb25DaGFydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuICQoUSh0LGUpLGUpfX0oIkxhdW5jaGVzRHVyYXRpb25DaGFydCIpKChvPSgwLE0uY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RJZDooMCxOLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSl9fSx7cmVkaXJlY3Q6ay5yZWRpcmVjdH0pLCgwLEwuaW5qZWN0SW50bCkocz1vKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHAuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZy5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxkLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2lzQ29uZmlnUmVhZHk6ITF9LHIub25DaGFydENsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DaGFydENyZWF0ZWQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXR1cENvb3Jkcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVzaXplQ2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlbmRlckNvbnRlbnRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5wcm9wcy5pc1ByZXZpZXcmJnRoaXMucHJvcHMub2JzZXJ2ZXIuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSx0aGlzLmdldENvbmZpZygpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pc1ByZXZpZXd8fCh0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSx0aGlzLnByb3BzLm9ic2VydmVyLnVuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMucHJvamVjdElkO3RoaXMucHJvcHMucmVkaXJlY3Qoe3R5cGU6SC5URVNUX0lURU1fUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6dCxmaWx0ZXJJZDpVLkFMTCx0ZXN0SXRlbUlkczoiIit0aGlzLml0ZW1EYXRhW2UuaW5kZXhdLmlkfX0pfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmNoYXJ0PWUsdGhpcy5ub2RlPXQsdGhpcy5wcm9wcy53aWRnZXQuY29udGVudC5yZXN1bHQmJiF0aGlzLnByb3BzLmlzUHJldmlldyYmKHRoaXMucmVzaXplQ2hhcnQoKSx0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy54LXIubGVmdC10LzI7cmV0dXJue3RvcDp0aGlzLnktci50b3Atbi04LGxlZnQ6b319fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUud2lkZ2V0LG49ZS5pc1ByZXZpZXcscj1lLmNvbnRhaW5lcjt0aGlzLmhlaWdodD1yLm9mZnNldEhlaWdodCx0aGlzLndpZHRoPXIub2Zmc2V0V2lkdGg7dmFyIG89KDAsVy5wcmVwYXJlQ2hhcnREYXRhKSh0KSxzPW8udGltZVR5cGUsaT1vLmNoYXJ0RGF0YSxhPW8uaXRlbURhdGEsbD12b2lkIDA9PT1hP1tdOmE7dGhpcy5pdGVtRGF0YT1sLHRoaXMudGltZVR5cGU9cyx0aGlzLmNvbmZpZz17ZGF0YTp7Y29sdW1uczpbaV0sdHlwZToiYmFyIixvbmNsaWNrOnRoaXMub25DaGFydENsaWNrLGNvbG9yczooMCx1LmRlZmF1bHQpKHt9LFkuRFVSQVRJT04sRi5DT0xPUl9DSEFSVF9EVVJBVElPTiksZ3JvdXBzOltbWS5EVVJBVElPTl1dLGNvbG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGxbdC5pbmRleF0mJigwLEcuaXNWYWx1ZUludGVycnVwdGVkKShsW3QuaW5kZXhdKT9GLkNPTE9SX0ZBSUxFRDplfX0sZ3JpZDp7eTp7c2hvdzohbn19LGF4aXM6e3JvdGF0ZWQ6ITAseDp7c2hvdzohbix0eXBlOiJjYXRlZ29yeSIsY2F0ZWdvcmllczpsLm1hcChHLnRyYW5zZm9ybUNhdGVnb3J5TGFiZWwpLHRpY2s6e3ZhbHVlczooMCxHLmdldExhdW5jaEF4aXNUaWNrcykobC5sZW5ndGgpLHdpZHRoOjYwLGNlbnRlcmVkOiEwLGlubmVyOiEwLG11bHRpbGluZTohMSxvdXRlcjohMX19LHk6e3Nob3c6IW4sdGljazp7Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybihwYXJzZUludChlLDEwKS9zLnZhbHVlKS50b0ZpeGVkKDIpfX0scGFkZGluZzp7dG9wOjAsYm90dG9tOjB9LGxhYmVsOnt0ZXh0OnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEIuQ09NTU9OX0xPQ0FMRV9LRVlTLlNFQ09ORFMpLHBvc2l0aW9uOiJvdXRlci1jZW50ZXIifX19LGludGVyYWN0aW9uOntlbmFibGVkOiFufSxwYWRkaW5nOnt0b3A6bj8wOjIwLGxlZnQ6bj8wOjQwLHJpZ2h0Om4/MDoyMCxib3R0b206bj8wOjEwfSxsZWdlbmQ6e3Nob3c6ITF9LHRvb2x0aXA6e2dyb3VwZWQ6ITAscG9zaXRpb246dGhpcy5nZXRQb3NpdGlvbixjb250ZW50czp0aGlzLnJlbmRlckNvbnRlbnRzfSxzaXplOntoZWlnaHQ6dGhpcy5oZWlnaHR9fSx0aGlzLnNldFN0YXRlKHtpc0NvbmZpZ1JlYWR5OiEwfSl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VYLG49ZS5wYWdlWTt0aGlzLng9dCx0aGlzLnk9bn19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LHQ9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0V2lkdGg7dGhpcy5oZWlnaHQhPT1lPyh0aGlzLmNoYXJ0LnJlc2l6ZSh7aGVpZ2h0OmV9KSx0aGlzLmhlaWdodD1lKTp0aGlzLndpZHRoIT09dCYmKHRoaXMuY2hhcnQuZmx1c2goKSx0aGlzLndpZHRoPXQpfX0se2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pdGVtRGF0YVtlWzBdLmluZGV4XTtyZXR1cm4gdy5kZWZhdWx0LnJlbmRlclRvU3RhdGljTWFya3VwKE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFYuTGF1bmNoRHVyYXRpb25Ub29sdGlwLHtsYXVuY2hEYXRhOnQsdGltZVR5cGU6dGhpcy50aW1lVHlwZX0pKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmlzUHJldmlldyx0PUooImxhdW5jaGVzLWR1cmF0aW9uLWNoYXJ0Iix7ImlzUHJldmlldy12aWV3IjplfSk7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dH0sdGhpcy5zdGF0ZS5pc0NvbmZpZ1JlYWR5JiZPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LkMzQ2hhcnQse2NvbmZpZzp0aGlzLmNvbmZpZyxvbkNoYXJ0Q3JlYXRlZDp0aGlzLm9uQ2hhcnRDcmVhdGVkfSkpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxyZWRpcmVjdDp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHByb2plY3RJZDp4LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsd2lkZ2V0OnguZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjb250YWluZXI6eC5kZWZhdWx0Lmluc3RhbmNlT2YoRWxlbWVudCkuaXNSZXF1aXJlZCxpc1ByZXZpZXc6eC5kZWZhdWx0LmJvb2wsaGVpZ2h0OnguZGVmYXVsdC5udW1iZXIsb2JzZXJ2ZXI6eC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2lzUHJldmlldzohMSxoZWlnaHQ6MCxvYnNlcnZlcjp7fX0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFosIkxhdW5jaGVzRHVyYXRpb25DaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEosImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2xhdW5jaGVzRHVyYXRpb25DaGFydC9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJsYXVuY2hlcy1kdXJhdGlvbi1jaGFydCI6ImxhdW5jaGVzRHVyYXRpb25DaGFydF9fbGF1bmNoZXMtZHVyYXRpb24tY2hhcnRfX18xOFdXWCJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvcHJlcGFyZUNoYXJ0RGF0YS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcmVwYXJlQ2hhcnREYXRhPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9sYXVuY2hlc0R1cmF0aW9uQ2hhcnQvY29uc3RhbnRzLmpzIikscz10LnByZXBhcmVDaGFydERhdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9W28uRFVSQVRJT05dLG49W10scz0wLGk9KDAsci5nZXRMaXN0QXZlcmFnZSkoZS5jb250ZW50LnJlc3VsdCk7cmV0dXJuIGUuY29udGVudC5yZXN1bHQuZmlsdGVyKHIudmFsaWRJdGVtc0ZpbHRlcikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbz1wYXJzZUludChlLmR1cmF0aW9uLDEwKSxhPWUuaWQsbD1lLm5hbWUsdT1lLm51bWJlcixjPWUuc3RhdHVzLGQ9ZS5zdGFydFRpbWUsXz1lLmVuZFRpbWU7cz1vPnM/bzpzLG4ucHVzaCh7aWQ6YSxuYW1lOmwsbnVtYmVyOnUsc3RhdHVzOmMsc3RhcnRUaW1lOmQsZW5kVGltZTpfLGR1cmF0aW9uOm99KSx0LnB1c2goKDAsci5pc1ZhbHVlSW50ZXJydXB0ZWQpKGUpP2k6byl9KSx7dGltZVR5cGU6KDAsci5nZXRUaW1lVHlwZSkocyksY2hhcnREYXRhOnQsaXRlbURhdGE6bn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsInByZXBhcmVDaGFydERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbGF1bmNoZXNEdXJhdGlvbkNoYXJ0L3ByZXBhcmVDaGFydERhdGEuanMiKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0L25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnR9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQ9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL3NlcnZlci5icm93c2VyLmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL21lc3NhZ2VzLmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5zY3NzIiksRj1yKEgpLEI9e05vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQ6e2Rpc3BsYXlOYW1lOiJOb25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0In19LFU9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0L25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltULmRlZmF1bHRdfSksRz0oMCx5LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSx6PUQuZGVmYXVsdC5iaW5kKEYuZGVmYXVsdCksVj0oMCxSLmRlZmluZU1lc3NhZ2VzKSh7bm9uUGFzc2VkQ2FzZXM6e2lkOiJOb25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0Lm5vblBhc3NlZENhc2VzIixkZWZhdWx0TWVzc2FnZToib2Ygbm9uLXBhc3NlZCBjYXNlcyJ9fSksVz10Lk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKEcodCxlKSxlKX19KCJOb25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0IikoKDAsUi5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtpc0NvbmZpZ1JlYWR5OiExfSxyLm9uQ2hhcnRDcmVhdGVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0dXBDb29yZHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlc2l6ZUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXJDb250ZW50cz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5wcm9wcy5pc1ByZXZpZXcmJnRoaXMucHJvcHMub2JzZXJ2ZXIuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSx0aGlzLmdldENvbmZpZygpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5pc1ByZXZpZXd8fCh0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSx0aGlzLnByb3BzLm9ic2VydmVyLnVuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmNoYXJ0PWUsdGhpcy5ub2RlPXQsdGhpcy5wcm9wcy53aWRnZXQuY29udGVudC5yZXN1bHQmJiF0aGlzLnByb3BzLmlzUHJldmlldyYmKHRoaXMucmVzaXplQ2hhcnQoKSx0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQud2lkZ2V0LHI9dC5pbnRsLG89dC5pc1ByZXZpZXc7dGhpcy5jaGFydERhdGE9WyJub3RQYXNzZWQiXSx0aGlzLml0ZW1EYXRhPVtdLG4uY29udGVudC5yZXN1bHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1wYXJzZUZsb2F0KHQudmFsdWVzWyIlIChGYWlsZWQrU2tpcHBlZCkvVG90YWwiXSkscj10LmlkLG89dC5uYW1lLHM9dC5udW1iZXIsaT10LnN0YXJ0VGltZTtlLml0ZW1EYXRhLnB1c2goe2lkOnIsbmFtZTpvLG51bWJlcjpzLHN0YXJ0VGltZTppfSksZS5jaGFydERhdGEucHVzaChuKX0pLHRoaXMuY29uZmlnPXtkYXRhOntjb2x1bW5zOlt0aGlzLmNoYXJ0RGF0YV0sY29sb3JzOntub3RQYXNzZWQ6dy5DT0xPUl9GQUlMRURTS0lQUEVEVE9UQUx9fSxwb2ludDp7c2Vuc2l0aXZpdHk6MWUzLHI6MT09PXRoaXMuaXRlbURhdGEubGVuZ3RoPzU6MSxmb2N1czp7ZXhwYW5kOntyOjV9fX0sZ3JpZDp7eTp7c2hvdzohb319LGF4aXM6e3g6e3Nob3c6IW8sdHlwZToiY2F0ZWdvcnkiLGNhdGVnb3JpZXM6dGhpcy5pdGVtRGF0YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIiMgIitlLm51bWJlcn0pLHRpY2s6e3ZhbHVlczooMCxOLmdldExhdW5jaEF4aXNUaWNrcykodGhpcy5pdGVtRGF0YS5sZW5ndGgpLHdpZHRoOjYwLGNlbnRlcmVkOiEwLGlubmVyOiEwLG11bHRpbGluZTohMSxvdXRlcjohMX19LHk6e3Nob3c6IW8sbWF4OjEwMCxtaW46MCxwYWRkaW5nOnt0b3A6NSxib3R0b206MH0sbGFiZWw6e3RleHQ6IiUgIityLmZvcm1hdE1lc3NhZ2UoVi5ub25QYXNzZWRDYXNlcykscG9zaXRpb246Im91dGVyLW1pZGRsZSJ9fX0saW50ZXJhY3Rpb246e2VuYWJsZWQ6IW99LHBhZGRpbmc6e3RvcDpvPzA6ODUsbGVmdDpvPzA6NjAscmlnaHQ6bz8wOjIwLGJvdHRvbTowfSxsZWdlbmQ6e3Nob3c6ITF9LHRvb2x0aXA6e2dyb3VwZWQ6ITAscG9zaXRpb246dGhpcy5nZXRQb3NpdGlvbixjb250ZW50czp0aGlzLnJlbmRlckNvbnRlbnRzfX0sdGhpcy5zZXRTdGF0ZSh7aXNDb25maWdSZWFkeTohMH0pfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLngtci5sZWZ0LXQvMjtyZXR1cm57dG9wOnRoaXMueS1yLnRvcC1uLTgsbGVmdDpvfX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VYLG49ZS5wYWdlWTt0aGlzLng9dCx0aGlzLnk9bn19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldEhlaWdodCx0PXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0IT09ZT8odGhpcy5jaGFydC5yZXNpemUoe2hlaWdodDplfSksdGhpcy5oZWlnaHQ9ZSk6dGhpcy53aWR0aCE9PXQmJih0aGlzLmNoYXJ0LmZsdXNoKCksdGhpcy53aWR0aD10KX19LHtrZXk6Il9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLml0ZW1EYXRhW2VbMF0uaW5kZXhdLHM9by5uYW1lLGk9by5udW1iZXIsYT1vLnN0YXJ0VGltZSxsPWVbMF0uaWQ7cmV0dXJuIHguZGVmYXVsdC5yZW5kZXJUb1N0YXRpY01hcmt1cChULmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLlRvb2x0aXBXcmFwcGVyLG51bGwsVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Ub29sdGlwQ29udGVudCx7bGF1bmNoTmFtZTpzLGxhdW5jaE51bWJlcjppLHN0YXJ0VGltZTphLGl0ZW1DYXNlczplWzBdLnZhbHVlLGNvbG9yOnIobCksaXRlbU5hbWU6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS5tZXNzYWdlcy5mYWlsZWRTa2lwcGVkVG90YWwpfSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmlzUHJldmlldyx0PXooIm5vbi1wYXNzZWQtY2FzZXMtdHJlbmQtY2hhcnQiLHsicHJldmlldy12aWV3IjplfSk7cmV0dXJuIFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dH0sdGhpcy5zdGF0ZS5pc0NvbmZpZ1JlYWR5JiZULmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkMzQ2hhcnQse2NvbmZpZzp0aGlzLmNvbmZpZyxvbkNoYXJ0Q3JlYXRlZDp0aGlzLm9uQ2hhcnRDcmVhdGVkfSwhZSYmVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5MZWdlbmQse2l0ZW1zOlsic3RhdGlzdGljcyRleGVjdXRpb25zJGZhaWxlZFNraXBwZWRUb3RhbCJdLG9uQ2xpY2s6dGhpcy5vbkNsaWNrLG9uTW91c2VPdmVyOnRoaXMub25Nb3VzZU92ZXIsb25Nb3VzZU91dDp0aGlzLm9uTW91c2VPdXR9KSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6Ui5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6Uy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGNvbnRhaW5lcjpTLmRlZmF1bHQuaW5zdGFuY2VPZihFbGVtZW50KS5pc1JlcXVpcmVkLGlzUHJldmlldzpTLmRlZmF1bHQuYm9vbCxoZWlnaHQ6Uy5kZWZhdWx0Lm51bWJlcixvYnNlcnZlcjpTLmRlZmF1bHQub2JqZWN0fSxzLmRlZmF1bHRQcm9wcz17aXNQcmV2aWV3OiExLGhlaWdodDowLG9ic2VydmVyOnt9fSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIk5vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJsb2NhbE1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigiJSAoRmFpbGVkK1NraXBwZWQpL1RvdGFsIiwiRkFJTEVEX1NLSVBQRURfVE9UQUwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJzdGF0aXN0aWNzJGV4ZWN1dGlvbnMkZmFpbGVkU2tpcHBlZFRvdGFsIiwiRkFJTEVEX1NLSVBQRURfU1RBVElTVElDU19LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvbm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydC9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9ub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0L25vblBhc3NlZFRlc3RDYXNlc1RyZW5kQ2hhcnQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJub24tcGFzc2VkLWNhc2VzLXRyZW5kLWNoYXJ0Ijoibm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydF9fbm9uLXBhc3NlZC1jYXNlcy10cmVuZC1jaGFydF9fXzFrcXVYIiwibGF1bmNoLW5hbWUiOiJub25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0X19sYXVuY2gtbmFtZV9fX3VLY2FQIiwibGF1bmNoLWR1cmF0aW9uIjoibm9uUGFzc2VkVGVzdENhc2VzVHJlbmRDaGFydF9fbGF1bmNoLWR1cmF0aW9uX19fMW9wUGYifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhc3NpbmdSYXRlUGVyTGF1bmNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QYXNzaW5nUmF0ZVBlckxhdW5jaH19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXNzaW5nUmF0ZVBlckxhdW5jaD12b2lkIDA7dmFyIHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PW8obCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxkPW8oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxwPW8oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxtPW8oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxnPW8oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEU9byhiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHY9byh5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9zZXJ2ZXIuYnJvd3Nlci5qcyIpLGs9byhNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxQPXIoSSksTj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxIPW8oTiksRj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2NvbG9ycy5qcyIpLEI9cihGKSxVPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLEc9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9jaGFydE1vZGVzLmpzIiksej1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9jM2NoYXJ0L2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9sZWdlbmQvaW5kZXguanMiKSxXPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL21lc3NhZ2VzLmpzIiksWT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHE9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9wYXNzaW5nUmF0ZVBlckxhdW5jaC9wYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAvaW5kZXguanMiKSxLPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guc2NzcyIpLFg9byhLKSwkPXtQYXNzaW5nUmF0ZVBlckxhdW5jaDp7ZGlzcGxheU5hbWU6IlBhc3NpbmdSYXRlUGVyTGF1bmNoIn19LFE9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9wYXNzaW5nUmF0ZVBlckxhdW5jaC9wYXNzaW5nUmF0ZVBlckxhdW5jaC5qc3giLGNvbXBvbmVudHM6JCxsb2NhbHM6W2VdLGltcG9ydHM6W1IuZGVmYXVsdF19KSxKPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4Iixjb21wb25lbnRzOiQsbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksWj1ILmRlZmF1bHQuYmluZChYLmRlZmF1bHQpLGVlPSJzdGF0aXN0aWNzJGV4ZWN1dGlvbnMkbm90UGFzc2VkIix0ZT10LlBhc3NpbmdSYXRlUGVyTGF1bmNoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUShKKHQsZSksZSl9fSgiUGFzc2luZ1JhdGVQZXJMYXVuY2giKSgoMCx3LmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLG0uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsRS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2lzQ29uZmlnUmVhZHk6ITF9LHIub25DaGFydENyZWF0ZWQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uTW91c2VPdXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25Nb3VzZU92ZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRQcm9jZXNzZWREYXRhPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRQcm9jZXNzZWREYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldENvbmZpZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldHVwQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRQZXJjZW50YWdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRQZXJjZW50YWdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlc2l6ZUhlbHBlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVzaXplSGVscGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlc2l6ZUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jdXN0b21CbG9jaz1SLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlooImxhdW5jaC1pbmZvLWJsb2NrIil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlooImxhdW5jaC1uYW1lLXRpdGxlIil9LHIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFcubWVzc2FnZXMubGF1bmNoTmFtZSkpLFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlooImxhdW5jaC1uYW1lIil9LHIucHJvcHMud2lkZ2V0Lm5hbWUpKSxyLnJlbmRlckNvbnRlbnRzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLEUuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx2LmRlZmF1bHQpKHQsZSksKDAsZy5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVIZWxwZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUhlbHBlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UGVyY2VudGFnZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UGVyY2VudGFnZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UHJvY2Vzc2VkRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UHJvY2Vzc2VkRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpeyF0aGlzLnByb3BzLmlzUHJldmlldyYmdGhpcy5wcm9wcy5vYnNlcnZlci5zdWJzY3JpYmUoIndpZGdldFJlc2l6ZWQiLHRoaXMucmVzaXplQ2hhcnQpLHRoaXMuZ2V0Q29uZmlnKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmlzUHJldmlld3x8KHRoaXMubm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuc2V0dXBDb29yZHMpLHRoaXMucHJvcHMub2JzZXJ2ZXIudW5zdWJzY3JpYmUoIndpZGdldFJlc2l6ZWQiLHRoaXMucmVzaXplQ2hhcnQpKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5jaGFydD1lLHRoaXMubm9kZT10LCF0aGlzLnByb3BzLndpZGdldC5jb250ZW50LnJlc3VsdHx8dGhpcy5wcm9wcy5pc1ByZXZpZXcpcmV0dXJuIHZvaWQgUC5zZWxlY3RBbGwoIi5jMy1jaGFydC10ZXh0cyB0ZXh0LCAuYzMtY2hhcnQtYXJjIHRleHQiKS5lYWNoKGZ1bmN0aW9uKCl7UC5zZWxlY3QobikucmVtb3ZlKCl9KTt0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLnNldHVwQ29vcmRzKSx0aGlzLnJlc2l6ZUhlbHBlcigpfX0se2tleToiX19vbk1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbk1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5yZXZlcnQoKX19LHtrZXk6Il9fb25Nb3VzZU92ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uTW91c2VPdmVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbk1vdXNlT3Zlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNoYXJ0LmZvY3VzKGUpfX0se2tleToiX19nZXRQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLngtci5sZWZ0LXQvMjtyZXR1cm57dG9wOnRoaXMueS1yLnRvcC1uLTgsbGVmdDpvfX19LHtrZXk6Il9fZ2V0UHJvY2Vzc2VkRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UHJvY2Vzc2VkRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UHJvY2Vzc2VkRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnRlbnQscz12b2lkIDA9PT1vP3t9Om8saT1lLmNvbnRlbnRQYXJhbWV0ZXJzLGE9dm9pZCAwPT09aT97fTppLGw9dGhpcyxjPWEud2lkZ2V0T3B0aW9ucy52aWV3TW9kZSxfPVtVLlNUQVRTX1BBU1NFRCxlZV0scD0ocj17fSwoMCxkLmRlZmF1bHQpKHIsVS5TVEFUU19QQVNTRUQsTnVtYmVyKHMucmVzdWx0LnBhc3NlZCkpLCgwLGQuZGVmYXVsdCkocixlZSxOdW1iZXIocy5yZXN1bHQudG90YWwpLU51bWJlcihzLnJlc3VsdC5wYXNzZWQpKSxyKSxmPVtbVS5TVEFUU19QQVNTRUQscFtVLlNUQVRTX1BBU1NFRF1dLFtlZSxwW2VlXV1dLG09e2NvbHVtbnM6Zixncm91cHM6W19dLHR5cGU6YyxvcmRlcjpudWxsLGNvbG9yczpuLGxhYmVsczp7c2hvdzohdCxmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdD8iIjpsLmdldFBlcmNlbnRhZ2UocFtuXSkrIiUifX19LGg9e307cmV0dXJuIGg9Yz09PUcuTU9ERVNfVkFMVUVTW0cuQ0hBUlRfTU9ERVMuQkFSX1ZJRVddP3tiYXI6e3dpZHRoOntyYXRpbzouMzV9fSxwYWRkaW5nOnt0b3A6dD8wOjMwLGxlZnQ6MjAscmlnaHQ6MjAsYm90dG9tOjB9LGF4aXM6e3JvdGF0ZWQ6ITAseDp7c2hvdzohMX0seTp7c2hvdzohMSxwYWRkaW5nOnt0b3A6MH19LGJhcjp7d2lkdGg6e3JhdGlvOi4zNX19fX06e3BpZTp7bGFiZWw6e3Nob3c6IXQsdGhyZXNob2xkOi4wNSxmb3JtYXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmdldFBlcmNlbnRhZ2UocFtuXSkrIiUifX19LHBhZGRpbmc6e3RvcDp0PzA6ODV9fSwoMCx1LmRlZmF1bHQpKHtkYXRhOm19LGgpfX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUud2lkZ2V0LG49ZS5pc1ByZXZpZXcscj1lLmNvbnRhaW5lcixvPXQuY29udGVudC5yZXN1bHQscz17fTtzW1UuU1RBVFNfUEFTU0VEXT1CLkNPTE9SX1BBU1NFRCxzW2VlXT1CLkNPTE9SX05PVFBBU1NFRDt2YXIgaT10aGlzLmdldFByb2Nlc3NlZERhdGEodCxuLHMpO3RoaXMuaGVpZ2h0PXIub2Zmc2V0SGVpZ2h0LHRoaXMud2lkdGg9ci5vZmZzZXRXaWR0aCx0aGlzLnRvdGFsSXRlbXM9TnVtYmVyKG8udG90YWwpLHRoaXMuY29uZmlnPSgwLHUuZGVmYXVsdCkoe30saSx7aW50ZXJhY3Rpb246e2VuYWJsZWQ6IW59LGxlZ2VuZDp7c2hvdzohMX0sdG9vbHRpcDp7Z3JvdXBlZDohMSxwb3NpdGlvbjp0aGlzLmdldFBvc2l0aW9uLGNvbnRlbnRzOnRoaXMucmVuZGVyQ29udGVudHN9LHNpemU6e2hlaWdodDp0aGlzLmhlaWdodH0sb25yZW5kZXJlZDp0aGlzLnByb3BzLmlzUHJldmlldz90aGlzLnJlc2l6ZUhlbHBlcjp2b2lkIDB9KSx0aGlzLnNldFN0YXRlKHtpc0NvbmZpZ1JlYWR5OiEwfSl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYWdlWCxuPWUucGFnZVk7dGhpcy54PXQsdGhpcy55PW59fSx7a2V5OiJfX2dldFBlcmNlbnRhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFBlcmNlbnRhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFBlcmNlbnRhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKGUvdGhpcy50b3RhbEl0ZW1zKjEwMCkudG9GaXhlZCgyKX19LHtrZXk6Il9fcmVzaXplSGVscGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVIZWxwZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUhlbHBlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubm9kZTtlJiZQLnNlbGVjdEFsbChlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5iYXIgLmMzLWNoYXJ0LXRleHRzIC5jMy10ZXh0IikpLmVhY2goZnVuY3Rpb24odCl7dmFyIG49ImMzLXRhcmdldC0iK3QuaWQscj1QLnNlbGVjdEFsbChlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUobikpLm5vZGUoKS5nZXRCQm94KCksbz1QLnNlbGVjdCh0aGlzKS5ub2RlKCkscz1vLmdldEJCb3goKSxpPXIueCtyLndpZHRoLzItcy53aWR0aC8yO3QuaWQ9PT1VLlNUQVRTX1BBU1NFRCYmaTw1JiYoaT01KSx0LmlkPT09ZWUmJmkrcy53aWR0aD5yLngrci53aWR0aCYmKGk9ci54K3Iud2lkdGgtcy53aWR0aC01KSxvLnNldEF0dHJpYnV0ZSgieCIsIiIraSl9KX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldEhlaWdodCx0PXRoaXMucHJvcHMuY29udGFpbmVyLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0IT09ZT8odGhpcy5jaGFydC5yZXNpemUoe2hlaWdodDplfSksdGhpcy5oZWlnaHQ9ZSk6dGhpcy53aWR0aCE9PXQmJih0aGlzLmNoYXJ0LmZsdXNoKCksdGhpcy53aWR0aD10KSx0aGlzLnJlc2l6ZUhlbHBlcigpfX0se2tleToiX19yZW5kZXJDb250ZW50c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyQ29udGVudHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlckNvbnRlbnRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPU51bWJlcihlWzBdLnZhbHVlKSxzPWVbMF0uaWQsaT0oMCxZLmdldEl0ZW1OYW1lQ29uZmlnKShlWzBdLm5hbWUpO3JldHVybiBrLmRlZmF1bHQucmVuZGVyVG9TdGF0aWNNYXJrdXAoUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocS5QYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAse2xhdW5jaE51bWJlcjpvLGxhdW5jaFBlcmNlbnQ6dGhpcy5nZXRQZXJjZW50YWdlKG8pLGNvbG9yOnIocyksaXRlbU5hbWU6KDAsWS5nZXRJdGVtTmFtZSkoaSx7fSx0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSl9KSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy53aWRnZXQuY29udGVudFBhcmFtZXRlcnMud2lkZ2V0T3B0aW9ucy52aWV3TW9kZTtyZXR1cm4gdGhpcy5zdGF0ZS5pc0NvbmZpZ1JlYWR5JiZSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LkMzQ2hhcnQse2NvbmZpZzp0aGlzLmNvbmZpZyxvbkNoYXJ0Q3JlYXRlZDp0aGlzLm9uQ2hhcnRDcmVhdGVkLGNsYXNzTmFtZTpaKCJwYXNzaW5nLXJhdGUtcGVyLWxhdW5jaCIpKyIgIitlfSwhdGhpcy5wcm9wcy5pc1ByZXZpZXcmJlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFYuTGVnZW5kLHtpdGVtczpbVS5TVEFUU19QQVNTRUQsZWVdLG9uTW91c2VPdmVyOnRoaXMub25Nb3VzZU92ZXIsb25Nb3VzZU91dDp0aGlzLm9uTW91c2VPdXQsY3VzdG9tQmxvY2s6dGhpcy5jdXN0b21CbG9ja30pKX19XSksdH0oUy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOncuaW50bFNoYXBlLmlzUmVxdWlyZWQsd2lkZ2V0OkQuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxpc1ByZXZpZXc6RC5kZWZhdWx0LmJvb2wsaGVpZ2h0OkQuZGVmYXVsdC5udW1iZXIsY29udGFpbmVyOkQuZGVmYXVsdC5pbnN0YW5jZU9mKEVsZW1lbnQpLmlzUmVxdWlyZWQsb2JzZXJ2ZXI6RC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2lzUHJldmlldzohMSxoZWlnaHQ6MCxvYnNlcnZlcjp7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih0ZSwiUGFzc2luZ1JhdGVQZXJMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZWUsIk5PVF9QQVNTRURfU1RBVElTVElDU19LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2guanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Bhc3NpbmdSYXRlUGVyTGF1bmNoL3Bhc3NpbmdSYXRlUGVyTGF1bmNoLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicGFzc2luZy1yYXRlLXBlci1sYXVuY2giOiJwYXNzaW5nUmF0ZVBlckxhdW5jaF9fcGFzc2luZy1yYXRlLXBlci1sYXVuY2hfX18zWk5GMSIsImxhdW5jaC1pbmZvLWJsb2NrIjoicGFzc2luZ1JhdGVQZXJMYXVuY2hfX2xhdW5jaC1pbmZvLWJsb2NrX19fMWdhTDYiLCJsYXVuY2gtbmFtZS10aXRsZSI6InBhc3NpbmdSYXRlUGVyTGF1bmNoX19sYXVuY2gtbmFtZS10aXRsZV9fXzJjR2pnIiwibGF1bmNoLW5hbWUiOiJwYXNzaW5nUmF0ZVBlckxhdW5jaF9fbGF1bmNoLW5hbWVfX18xSHBSRyJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9wYXNzaW5nUmF0ZVBlckxhdW5jaC9wYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwL3Bhc3NpbmdSYXRlUGVyTGF1bmNoVG9vbHRpcC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXB9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Bhc3NpbmdSYXRlUGVyTGF1bmNoL3Bhc3NpbmdSYXRlUGVyTGF1bmNoVG9vbHRpcC9wYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhc3NpbmdSYXRlUGVyTGF1bmNoVG9vbHRpcD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdG9vbHRpcC90b29sdGlwV3JhcHBlci9pbmRleC5qcyIpLGQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9wYXNzaW5nUmF0ZVBlckxhdW5jaC9wYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAvcGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwLnNjc3MiKSxfPXIoZCkscD11LmRlZmF1bHQuYmluZChfLmRlZmF1bHQpLGY9dC5QYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXVuY2hQZXJjZW50LG49ZS5sYXVuY2hOdW1iZXIscj1lLmNvbG9yLG89ZS5pdGVtTmFtZTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYy5Ub29sdGlwV3JhcHBlcixudWxsLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgibGF1bmNoLW5hbWUiKX0sbisiICgiK3QrIiUpIikscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJpdGVtLXdyYXBwZXIiKX0scy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6cCgiY29sb3ItbWFyayIpLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6cn19KSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpwKCJpdGVtLW5hbWUiKX0sIiIrbykpKX07Zi5wcm9wVHlwZXM9e2xhdW5jaFBlcmNlbnQ6YS5kZWZhdWx0LnN0cmluZyxsYXVuY2hOdW1iZXI6YS5kZWZhdWx0Lm51bWJlcixpdGVtTmFtZTphLmRlZmF1bHQuc3RyaW5nLGNvbG9yOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0sZi5kZWZhdWx0UHJvcHM9e2xhdW5jaFBlcmNlbnQ6IiIsbGF1bmNoTnVtYmVyOjAsaXRlbU5hbWU6IiJ9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJQYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwL3Bhc3NpbmdSYXRlUGVyTGF1bmNoVG9vbHRpcC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9wYXNzaW5nUmF0ZVBlckxhdW5jaC9wYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXAvcGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvcGFzc2luZ1JhdGVQZXJMYXVuY2gvcGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwL3Bhc3NpbmdSYXRlUGVyTGF1bmNoVG9vbHRpcC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImNvbG9yLW1hcmsiOiJwYXNzaW5nUmF0ZVBlckxhdW5jaFRvb2x0aXBfX2NvbG9yLW1hcmtfX18zWTRVdSIsImxhdW5jaC1uYW1lIjoicGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwX19sYXVuY2gtbmFtZV9fXzItdWdjIiwiaXRlbS1uYW1lIjoicGFzc2luZ1JhdGVQZXJMYXVuY2hUb29sdGlwX19pdGVtLW5hbWVfX18xZXVfLSJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydH19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydD12b2lkIDA7dmFyIHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGM9byh1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLF89byhkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYj1vKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikseT1vKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxUPW8odiksQT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksUz1vKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxqPW8oUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEw9byh4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksdz1vKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGs9byhNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFA9byhJKSxOPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9zZXJ2ZXIuYnJvd3Nlci5qcyIpLEg9byhOKSxGPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksQj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLFU9bigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpLEc9byhVKSx6PW4oIi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiKSxWPXIoeiksVz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLFk9bigiLi9zcmMvY29tbW9uL3V0aWxzL3RpbWVEYXRlVXRpbHMuanMiKSxxPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIiksSz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksWD1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9jb2xvcnMuanMiKSxRPXIoJCksSj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Rlc3RTdGF0dXNlcy5qcyIpLFo9cihKKSxlZT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2NoYXJ0TW9kZXMuanMiKSx0ZT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi9tZXNzYWdlcy5qcyIpLG5lPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvY29tbW9uL2MzY2hhcnQvaW5kZXguanMiKSxyZT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL2NvbW1vbi90b29sdGlwL2luZGV4LmpzIiksb2U9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxzZT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC5zY3NzIiksaWU9byhzZSksYWU9e1Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQ6e2Rpc3BsYXlOYW1lOiJUZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0In19LGxlPSgwLHcuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9jaGFydHMvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0LmpzeCIsY29tcG9uZW50czphZSxsb2NhbHM6W2VdLGltcG9ydHM6W0wuZGVmYXVsdF19KSx1ZT0oMCxqLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC5qc3giLGNvbXBvbmVudHM6YWUsbG9jYWxzOltdLGltcG9ydHM6W0wuZGVmYXVsdCxTLmRlZmF1bHRdfSksY2U9UC5kZWZhdWx0LmJpbmQoaWUuZGVmYXVsdCksZGU9KDAsVy5kZWZpbmVNZXNzYWdlcykoe2dyb3dUZXN0Q2FzZXM6e2lkOiJXaWRnZXRzLmdyb3d0ZXN0Q2FzZXMiLGRlZmF1bHRNZXNzYWdlOiJHcm93IHRlc3QgY2FzZXMifSx0b3RhbFRlc3RDYXNlczp7aWQ6IldpZGdldHMudG90YWxUZXN0Q2FzZXMiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCB0ZXN0IGNhc2VzIn19KSxfZT10LlRlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsZSh1ZSh0LGUpLGUpfX0oIlRlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQiKSgocz0oMCxGLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0OigwLEsuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSxzdGF0aXN0aWNzTGluazooMCxxLnN0YXRpc3RpY3NMaW5rU2VsZWN0b3IpKGUse3N0YXR1c2VzOltaLlBBU1NFRCxaLkZBSUxFRCxaLlNLSVBQRUQsWi5JTlRFUlJVUFRFRF19KX19LHtyZWRpcmVjdDpCLnJlZGlyZWN0fSksKDAsVy5pbmplY3RJbnRsKShpPXMoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxULmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNDb25maWdSZWFkeTohMX0sci5vbkNoYXJ0Q3JlYXRlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DaGFydENsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25DaGFydFJlbmRlcmVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNoYXJ0UmVuZGVyZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2V0dXBDb29yZHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldERlZmF1bHRMaW5rUGFyYW1zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRUb29sdGlwUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFRvb2x0aXBQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZXNpemVDaGFydD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyVG9vbHRpcD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVuZGVyVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLFQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxDLmRlZmF1bHQpKHQsZSksKDAseS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlclRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0VG9vbHRpcFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRUb29sdGlwUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydFJlbmRlcmVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0UmVuZGVyZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5wcm9wcy5pc1ByZXZpZXcmJnRoaXMucHJvcHMub2JzZXJ2ZXIuc3Vic2NyaWJlKCJ3aWRnZXRSZXNpemVkIix0aGlzLnJlc2l6ZUNoYXJ0KSx0aGlzLmdldENvbmZpZygpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25DaGFydFJlbmRlcmVkKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmlzUHJldmlld3x8KHRoaXMubm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuc2V0dXBDb29yZHMpLHRoaXMucHJvcHMub2JzZXJ2ZXIudW5zdWJzY3JpYmUoIndpZGdldFJlc2l6ZWQiLHRoaXMucmVzaXplQ2hhcnQpKX19LHtrZXk6Il9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0Q3JlYXRlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydENyZWF0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDcmVhdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5jaGFydD1lLHRoaXMubm9kZT10LHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuc2V0dXBDb29yZHMpfX0se2tleToiX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFydENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5pc1RpbWVMaW5lKXt2YXIgdD10aGlzLnByb3BzLG49dC53aWRnZXQscj10LnN0YXRpc3RpY3NMaW5rLG89bi5jb250ZW50LnJlc3VsdFtlLmluZGV4XS5pZCxzPXRoaXMuZ2V0RGVmYXVsdExpbmtQYXJhbXMobyk7dGhpcy5wcm9wcy5yZWRpcmVjdCgoMCxmLmRlZmF1bHQpKHIscykpfX19LHtrZXk6Il9fb25DaGFydFJlbmRlcmVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYXJ0UmVuZGVyZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhcnRSZW5kZXJlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFydFJlbmRlcmVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYXJ0UmVuZGVyZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO1Yuc2VsZWN0KHRoaXMubm9kZSkuc2VsZWN0QWxsKCIuYzMtYmFycy1iYXIgcGF0aCIpLmVhY2goZnVuY3Rpb24odCxuKXt2YXIgcj1WLnNlbGVjdChlLm5vZGUpLnNlbGVjdCgiLmMzLWJhcnMtYmFyIHBhdGguYzMtYmFyLSIrbik7MD09PXQudmFsdWUmJnIuc3R5bGUoInN0cm9rZS13aWR0aCIsIjFweCIpLnN0eWxlKCJzdHJva2UiLCIjNDY0NTQ3Iikuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImluaXRpYWwiKX0pfX0se2tleToiX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldHVwQ29vcmRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXR1cENvb3Jkc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0dXBDb29yZHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYWdlWCxuPWUucGFnZVk7dGhpcy54PXQsdGhpcy55PW59fSx7a2V5OiJfX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmYXVsdExpbmtQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlZmF1bHRMaW5rUGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWZhdWx0TGlua1BhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57cGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMucHJvamVjdCxmaWx0ZXJJZDoiYWxsIix0ZXN0SXRlbUlkczplfSx0eXBlOlguVEVTVF9JVEVNX1BBR0V9fX0se2tleToiX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC53aWRnZXQscj10LmludGwsbz10LmlzUHJldmlldyxzPXQuY29udGFpbmVyO3RoaXMuaXNUaW1lTGluZT1uLmNvbnRlbnRQYXJhbWV0ZXJzJiZuLmNvbnRlbnRQYXJhbWV0ZXJzLndpZGdldE9wdGlvbnMudGltZWxpbmU9PT1lZS5NT0RFU19WQUxVRVNbZWUuQ0hBUlRfTU9ERVMuVElNRUxJTkVfTU9ERV07dmFyIGk9dm9pZCAwO2k9dGhpcy5pc1RpbWVMaW5lPygwLF8uZGVmYXVsdCkobi5jb250ZW50LnJlc3VsdCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLGMuZGVmYXVsdCkoe2RhdGU6ZX0sbi5jb250ZW50LnJlc3VsdFtlXSl9KTpuLmNvbnRlbnQucmVzdWx0LHRoaXMuaGVpZ2h0PXMub2Zmc2V0SGVpZ2h0LHRoaXMud2lkdGg9cy5vZmZzZXRXaWR0aCx0aGlzLml0ZW1EYXRhPVtdO3ZhciBhPVsib2Zmc2V0Il0sbD1bImJhciJdO3RoaXMucG9zaXRpdmVUcmVuZD1bXSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC52YWx1ZXM7K24uZGVsdGE8MD8oZS5wb3NpdGl2ZVRyZW5kLnB1c2goITEpLGEucHVzaCgrbi5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWwpKTooZS5wb3NpdGl2ZVRyZW5kLnB1c2goITApLGEucHVzaCgrbi5zdGF0aXN0aWNzJGV4ZWN1dGlvbnMkdG90YWwtK24uZGVsdGEpKSxsLnB1c2goTWF0aC5hYnMoK24uZGVsdGEpKSxlLmlzVGltZUxpbmU/ZS5pdGVtRGF0YS5wdXNoKHtkYXRlOnQuZGF0ZX0pOmUuaXRlbURhdGEucHVzaCh7aWQ6dC5pZCxuYW1lOnQubmFtZSxudW1iZXI6dC5udW1iZXIsc3RhcnRUaW1lOnQuc3RhcnRUaW1lfSl9KSx0aGlzLmNvbmZpZz17ZGF0YTp7Y29sdW1uczpbYSxsXSx0eXBlOmVlLk1PREVTX1ZBTFVFU1tlZS5DSEFSVF9NT0RFUy5CQVJfVklFV10sb3JkZXI6bnVsbCxncm91cHM6W1sib2Zmc2V0IiwiYmFyIl1dLG9uY2xpY2s6dGhpcy5vbkNoYXJ0Q2xpY2ssY29sb3I6ZnVuY3Rpb24odCxuKXt2YXIgcj12b2lkIDA7c3dpdGNoKG4uaWQpe2Nhc2UiYmFyIjppZihlLnBvc2l0aXZlVHJlbmRbbi5pbmRleF0pe3I9US5DT0xPUl9EQVJLX1BBU1RFTF9HUkVFTjticmVha31yPVEuQ09MT1JfT1JBTkdFX1JFRDticmVhaztkZWZhdWx0OnI9bnVsbH1yZXR1cm4gcn0sbGFiZWxzOntmb3JtYXQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBzPWUuaXRlbURhdGEubGVuZ3RoPDIwPzE6MjtyZXR1cm4gZS5pc1RpbWVMaW5lJiZlLml0ZW1EYXRhLmxlbmd0aD49MjAmJihzPTYpLG98fCJiYXIiIT09bnx8ciVzIT0wP251bGw6ZS5wb3NpdGl2ZVRyZW5kW3JdP3Q6LXR9fX0sZ3JpZDp7eTp7c2hvdzohb319LGF4aXM6e3g6e3Nob3c6IW8sdHlwZToiY2F0ZWdvcnkiLGNhdGVnb3JpZXM6dGhpcy5pdGVtRGF0YS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuaXNUaW1lTGluZT8oMCxHLmRlZmF1bHQpKHQuZGF0ZSkuZm9ybWF0KCJkZGRkIikuc3Vic3RyaW5nKDAsMykrIiwgIit0LmRhdGU6IiMiK3QubnVtYmVyfSksdGljazp7dmFsdWVzOnRoaXMuaXNUaW1lTGluZT8oMCxvZS5nZXRUaW1lbGluZUF4aXNUaWNrcykodGhpcy5pdGVtRGF0YS5sZW5ndGgpOigwLG9lLmdldExhdW5jaEF4aXNUaWNrcykodGhpcy5pdGVtRGF0YS5sZW5ndGgpLHdpZHRoOjYwLGNlbnRlcmVkOiEwLGlubmVyOiEwLG91dGVyOiExLG11bHRpbGluZTp0aGlzLmlzVGltZUxpbmV9fSx5OntzaG93OiFvLHBhZGRpbmc6e3RvcDoxMCxib3R0b206MH0sbGFiZWw6e3RleHQ6IiIrci5mb3JtYXRNZXNzYWdlKHRlLm1lc3NhZ2VzLmNhc2VzKSxwb3NpdGlvbjoib3V0ZXItbWlkZGxlIn19fSxpbnRlcmFjdGlvbjp7ZW5hYmxlZDohb30scGFkZGluZzp7dG9wOm8/MDoxMCxsZWZ0Om8/MDo2MCxyaWdodDpvPzA6MjAsYm90dG9tOm98fCF0aGlzLmlzVGltZUxpbmU/MDoxMH0sbGVnZW5kOntzaG93OiExfSxzaXplOntoZWlnaHQ6dGhpcy5oZWlnaHR9LHRvb2x0aXA6e2dyb3VwZWQ6ITAscG9zaXRpb246dGhpcy5nZXRUb29sdGlwUG9zaXRpb24sY29udGVudHM6dGhpcy5yZW5kZXJUb29sdGlwfSxvbnJlbmRlcmVkOnRoaXMub25DaGFydFJlbmRlcmVkfSx0aGlzLnNldFN0YXRlKHtpc0NvbmZpZ1JlYWR5OiEwfSl9fSx7a2V5OiJfX2dldFRvb2x0aXBQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0VG9vbHRpcFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRUb29sdGlwUG9zaXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFRvb2x0aXBQb3NpdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0VG9vbHRpcFBvc2l0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLngtci5sZWZ0LXQvMjtyZXR1cm57dG9wOnRoaXMueS1yLnRvcC1uLTgsbGVmdDpvfX19LHtrZXk6Il9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZXNpemVDaGFydF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVzaXplQ2hhcnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Jlc2l6ZUNoYXJ0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LHQ9dGhpcy5wcm9wcy5jb250YWluZXIub2Zmc2V0V2lkdGg7dGhpcy5oZWlnaHQhPT1lPyh0aGlzLmNoYXJ0LnJlc2l6ZSh7aGVpZ2h0OmV9KSx0aGlzLmhlaWdodD1lKTp0aGlzLndpZHRoIT09dCYmKHRoaXMuY2hhcnQuZmx1c2goKSx0aGlzLndpZHRoPXQpfX0se2tleToiX19yZW5kZXJUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaXRlbURhdGFbZVswXS5pbmRleF0sbj10Lm5hbWUscj10Lm51bWJlcixvPXQuc3RhcnRUaW1lLHM9dC5kYXRlLGk9dm9pZCAwLGE9dm9pZCAwO3RoaXMucG9zaXRpdmVUcmVuZFtlWzBdLmluZGV4XT8oYT1lWzFdLnZhbHVlLGk9ZVswXS52YWx1ZStlWzFdLnZhbHVlKTooYT0tZVsxXS52YWx1ZSxpPWVbMF0udmFsdWUpO3ZhciBsPSgwLFAuZGVmYXVsdCkoe2luY3JlYXNlOmE+MCxkZWNyZWFzZTphPDB9KTtyZXR1cm4gSC5kZWZhdWx0LnJlbmRlclRvU3RhdGljTWFya3VwKEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlLlRvb2x0aXBXcmFwcGVyLG51bGwsIXRoaXMuaXNUaW1lTGluZSYmTC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpjZSgibGF1bmNoLW5hbWUiKX0sbisiICMiK3IpLEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Y2UoImxhdW5jaC1zdGFydC10aW1lIix7InRpbWVsaW5lLW1vZGUiOnRoaXMuaXNUaW1lTGluZX0pfSx0aGlzLmlzVGltZUxpbmU/czooMCxZLmRhdGVGb3JtYXQpKE51bWJlcihvKSkpLEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Y2UoIml0ZW0td3JhcHBlciIpfSxMLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmNlKCJpdGVtLWNhc2VzIil9LEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Y2UoIml0ZW0tY2FzZXMtZ3Jvd3RoIil9LHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKGRlLmdyb3dUZXN0Q2FzZXMpLCI6IiwiICIsTC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Y2UobCl9LGEpKSxMLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmNlKCJpdGVtLWNhc2VzLXRvdGFsIil9LHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKGRlLnRvdGFsVGVzdENhc2VzKSwiOiAiLEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLGkpKSkpKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Y2UoInRlc3QtY2FzZXMtZ3Jvd3RoLXRyZW5kLWNoYXJ0Iil9LHRoaXMuc3RhdGUuaXNDb25maWdSZWFkeSYmTC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobmUuQzNDaGFydCx7Y29uZmlnOnRoaXMuY29uZmlnLG9uQ2hhcnRDcmVhdGVkOnRoaXMub25DaGFydENyZWF0ZWR9KSl9fV0pLHR9KHguQ29tcG9uZW50KSxhLnByb3BUeXBlcz17aW50bDpXLmludGxTaGFwZS5pc1JlcXVpcmVkLHdpZGdldDprLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsY29udGFpbmVyOmsuZGVmYXVsdC5pbnN0YW5jZU9mKEVsZW1lbnQpLmlzUmVxdWlyZWQscHJvamVjdDprLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsc3RhdGlzdGljc0xpbms6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHJlZGlyZWN0OmsuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsaXNQcmV2aWV3OmsuZGVmYXVsdC5ib29sLGhlaWdodDprLmRlZmF1bHQubnVtYmVyLG9ic2VydmVyOmsuZGVmYXVsdC5vYmplY3R9LGEuZGVmYXVsdFByb3BzPXtpc1ByZXZpZXc6ITEsaGVpZ2h0OjAsb2JzZXJ2ZXI6e319LGk9bCkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfZSwiVGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0L3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoY2UsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkZSwibG9jYWxNZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy90ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0L3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnRzL3Rlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQvdGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InRlc3QtY2FzZXMtZ3Jvd3RoLXRyZW5kLWNoYXJ0IjoidGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydF9fdGVzdC1jYXNlcy1ncm93dGgtdHJlbmQtY2hhcnRfX19GalVfUiIsImxhdW5jaC1uYW1lIjoidGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydF9fbGF1bmNoLW5hbWVfX18xZWN6XyIsImxhdW5jaC1zdGFydC10aW1lIjoidGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydF9fbGF1bmNoLXN0YXJ0LXRpbWVfX18zakdEeSIsInRpbWVsaW5lLW1vZGUiOiJ0ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0X190aW1lbGluZS1tb2RlX19fMUVnVnIiLCJpdGVtLXdyYXBwZXIiOiJ0ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0X19pdGVtLXdyYXBwZXJfX18yYkw0ciIsIml0ZW0tY2FzZXMiOiJ0ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0X19pdGVtLWNhc2VzX19fMnZQYTEiLCJpdGVtLWNhc2VzLWdyb3d0aCI6InRlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnRfX2l0ZW0tY2FzZXMtZ3Jvd3RoX19fMnh1WUciLGluY3JlYXNlOiJ0ZXN0Q2FzZXNHcm93dGhUcmVuZENoYXJ0X19pbmNyZWFzZV9fXzFoakUzIixkZWNyZWFzZToidGVzdENhc2VzR3Jvd3RoVHJlbmRDaGFydF9fZGVjcmVhc2VfX18zaHliUiJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vRGF0YUF2YWlsYWJsZT10LkNIQVJUUz12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3dpZGdldFR5cGVzLmpzIiksYT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL25vRGF0YUF2YWlsYWJsZS9pbmRleC5qcyIpLHU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0cy9pbmRleC5qcyIpLGM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9pbmRleC5qcyIpLGQ9KHI9e30sKDAscy5kZWZhdWx0KShyLGEuRElGRkVSRU5UX0xBVU5DSEVTX0NPTVBBUklTT04sdS5MYXVuY2hlc0NvbXBhcmlzb25DaGFydCksKDAscy5kZWZhdWx0KShyLGEuTEFVTkNIX1NUQVRJU1RJQ1MsdS5MYXVuY2hTdGF0aXN0aWNzQ2hhcnQpLCgwLHMuZGVmYXVsdCkocixhLkxBVU5DSF9EVVJBVElPTix1LkxhdW5jaGVzRHVyYXRpb25DaGFydCksKDAscy5kZWZhdWx0KShyLGEuRkFJTEVEX0NBU0VTX1RSRU5ELHUuRmFpbGVkQ2FzZXNUcmVuZENoYXJ0KSwoMCxzLmRlZmF1bHQpKHIsYS5OT05fUEFTU0VEX1RFU1RfQ0FTRVNfVFJFTkQsdS5Ob25QYXNzZWRUZXN0Q2FzZXNUcmVuZENoYXJ0KSwoMCxzLmRlZmF1bHQpKHIsYS5URVNUX0NBU0VTX0dST1dUSF9UUkVORCx1LlRlc3RDYXNlc0dyb3d0aFRyZW5kQ2hhcnQpLCgwLHMuZGVmYXVsdCkocixhLkxBVU5DSF9EVVJBVElPTix1LkxhdW5jaGVzRHVyYXRpb25DaGFydCksKDAscy5kZWZhdWx0KShyLGEuUEFTU0lOR19SQVRFX1BFUl9MQVVOQ0gsdS5QYXNzaW5nUmF0ZVBlckxhdW5jaCksKDAscy5kZWZhdWx0KShyLGEuTEFVTkNIX0VYRUNVVElPTl9BTkRfSVNTVUVfU1RBVElTVElDUyx1LkxhdW5jaEV4ZWN1dGlvbkFuZElzc3VlU3RhdGlzdGljcyksKDAscy5kZWZhdWx0KShyLGEuTEFVTkNIRVNfVEFCTEUsYy5MYXVuY2hlc1RhYmxlKSwoMCxzLmRlZmF1bHQpKHIsYS5VTklRVUVfQlVHU19UQUJMRSxjLlVuaXF1ZUJ1Z3NUYWJsZSksKDAscy5kZWZhdWx0KShyLGEuRkxBS1lfVEVTVF9DQVNFU19UQUJMRSxjLkZsYWt5VGVzdHMpLCgwLHMuZGVmYXVsdCkocixhLk1PU1RfRkFJTEVEX1RFU1RfQ0FTRVNfVEFCTEUsYy5Nb3N0RmFpbGVkVGVzdHMpLCgwLHMuZGVmYXVsdCkocixhLlBST0pFQ1RfQUNUSVZJVFksYy5Qcm9qZWN0QWN0aXZpdHkpLHIpO3QuQ0hBUlRTPWQsdC5Ob0RhdGFBdmFpbGFibGU9bC5Ob0RhdGFBdmFpbGFibGU7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiQ0hBUlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXguanMiKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9ub0RhdGFBdmFpbGFibGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9ub0RhdGFBdmFpbGFibGUvbm9EYXRhQXZhaWxhYmxlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb0RhdGFBdmFpbGFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5vRGF0YUF2YWlsYWJsZX19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9ub0RhdGFBdmFpbGFibGUvbm9EYXRhQXZhaWxhYmxlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob0RhdGFBdmFpbGFibGU9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9ub0RhdGFBdmFpbGFibGUvbm9EYXRhQXZhaWxhYmxlLnNjc3MiKSxjPXIodSksZD1hLmRlZmF1bHQuYmluZChjLmRlZmF1bHQpLF89dC5Ob0RhdGFBdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJuby1kYXRhLWF2YWlsYWJsZSIpfSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChsLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJOb0RhdGFBdmFpbGFibGUubm9EYXRhTWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6Ik5vIGRhdGEgYXZhaWxhYmxlLiJ9KSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJOb0RhdGFBdmFpbGFibGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9ub0RhdGFBdmFpbGFibGUvbm9EYXRhQXZhaWxhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvbm9EYXRhQXZhaWxhYmxlL25vRGF0YUF2YWlsYWJsZS5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvbm9EYXRhQXZhaWxhYmxlL25vRGF0YUF2YWlsYWJsZS5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im5vLWRhdGEtYXZhaWxhYmxlIjoibm9EYXRhQXZhaWxhYmxlX19uby1kYXRhLWF2YWlsYWJsZV9fXzNFSDZ2In19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QVHlwZXM9dC5UZXN0c1RhYmxlV2lkZ2V0PXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0ocikscz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlV2lkZ2V0LmpzeCIpO3QuVGVzdHNUYWJsZVdpZGdldD1zLlRlc3RzVGFibGVXaWRnZXQsdC5QVHlwZXM9b30sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L2xhdW5jaEluZm9CbG9jay9pbmRleC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoSW5mb0Jsb2NrPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9sYXVuY2hJbmZvQmxvY2svbGF1bmNoSW5mb0Jsb2NrLnNjc3MiKSxkPXIoYyksXz11LmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5MYXVuY2hJbmZvQmxvY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXVuY2hOYW1lLG49ZS5pc3N1ZVR5cGU7cmV0dXJuIHMuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8oImluZm8tYmxvY2siKX0scy5jcmVhdGVFbGVtZW50KCJwIixudWxsLHMuY3JlYXRlRWxlbWVudChhLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5sYXVuY2hOYW1lIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIG5hbWUifSksIjoiLCIgIixzLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6XygiaW5mby1ibG9jay1sYXVuY2gtbmFtZSIpfSx0KSksbiYmcy5jcmVhdGVFbGVtZW50KCJwIixudWxsLHMuY3JlYXRlRWxlbWVudChhLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJUZXN0c1RhYmxlV2lkZ2V0LmhlYWRlci5iYXNlZE9uIixkZWZhdWx0TWVzc2FnZToiQmFzZWQgb24ifSksIjoiLCIgIixzLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6XygiaW5mby1ibG9jay1sYXVuY2gtbmFtZSIpfSxuKSkpfTtwLnByb3BUeXBlcz17bGF1bmNoTmFtZTppLnN0cmluZy5pc1JlcXVpcmVkLGlzc3VlVHlwZTppLmVsZW1lbnR9LHAuZGVmYXVsdFByb3BzPXtpc3N1ZVR5cGU6bnVsbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkxhdW5jaEluZm9CbG9jayIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvbGF1bmNoSW5mb0Jsb2NrL2luZGV4LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9sYXVuY2hJbmZvQmxvY2svaW5kZXguanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvbGF1bmNoSW5mb0Jsb2NrL2xhdW5jaEluZm9CbG9jay5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImluZm8tYmxvY2siOiJsYXVuY2hJbmZvQmxvY2tfX2luZm8tYmxvY2tfX18zWTlYYSIsImluZm8tYmxvY2stbGF1bmNoLW5hbWUiOiJsYXVuY2hJbmZvQmxvY2tfX2luZm8tYmxvY2stbGF1bmNoLW5hbWVfX18zQWdjaSJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBUVGVzdHM9dC5QVENvbHVtbnM9dC5QVFRlc3Q9dC5QVFN0YXR1cz10LlBUTGF1bmNoPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIikscz10LlBUTGF1bmNoPSgwLHIuc2hhcGUpKHtpZDpyLnN0cmluZy5pc1JlcXVpcmVkLG5hbWU6ci5zdHJpbmcuaXNSZXF1aXJlZCxudW1iZXI6ci5zdHJpbmcuaXNSZXF1aXJlZCxpc3N1ZVR5cGU6ci5zdHJpbmd9KSxpPXQuUFRTdGF0dXM9KDAsci5vbmVPZikoW28uRkFJTEVELnRvVXBwZXJDYXNlKCksby5QQVNTRUQudG9VcHBlckNhc2UoKSxvLlNLSVBQRUQudG9VcHBlckNhc2UoKV0pLGE9dC5QVFRlc3Q9KDAsci5zaGFwZSkoe25hbWU6ci5zdHJpbmcsaXRlbU5hbWU6ci5zdHJpbmcsdW5pcXVlSWQ6ci5zdHJpbmcuaXNSZXF1aXJlZCxzdGF0dXM6KDAsci5hcnJheU9mKShyLmJvb2wpLHRvdGFsOnIubnVtYmVyLmlzUmVxdWlyZWQsY3JpdGVyaWE6ci5udW1iZXIsZmxha3lDb3VudDpyLm51bWJlcixzdGF0dXNlczooMCxyLmFycmF5T2YpKGkpfSksbD10LlBUQ29sdW1ucz0oMCxyLnNoYXBlKSh7bmFtZTooMCxyLnNoYXBlKSh7aGVhZGVyOnIubm9kZS5pc1JlcXVpcmVkLG5hbWVLZXk6ci5zdHJpbmcuaXNSZXF1aXJlZH0pLmlzUmVxdWlyZWQsY291bnQ6KDAsci5zaGFwZSkoe2hlYWRlcjpyLm5vZGUuaXNSZXF1aXJlZCxoZWFkZXJTaG9ydDpyLm5vZGUuaXNSZXF1aXJlZCxjb3VudEtleTpyLnN0cmluZy5pc1JlcXVpcmVkLG1hdHJpeEtleTpyLnN0cmluZy5pc1JlcXVpcmVkLHJlbmRlckFzQm9vbDpyLmJvb2x9KS5pc1JlcXVpcmVkLHBlcmNlbnRzOigwLHIuc2hhcGUpKHtoZWFkZXI6ci5ub2RlLmlzUmVxdWlyZWQsaGVhZGVyU2hvcnQ6ci5ub2RlLmlzUmVxdWlyZWR9KSxkYXRlOigwLHIuc2hhcGUpKHtoZWFkZXI6ci5ub2RlLmlzUmVxdWlyZWQsZGF0ZUtleTpyLnN0cmluZy5pc1JlcXVpcmVkfSl9KSx1PXQuUFRUZXN0cz0oMCxyLmFycmF5T2YpKGEpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJQVExhdW5jaCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvcFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiUFRTdGF0dXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3BUeXBlcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIlBUVGVzdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvcFR5cGVzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiUFRDb2x1bW5zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJQVFRlc3RzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL2NvdW50L2NvdW50LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db3VudD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0obyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS9jb3VudC9jb3VudC5zY3NzIiksZD1yKGMpLF89dS5kZWZhdWx0LmJpbmQoZC5kZWZhdWx0KSxwPXQuQ291bnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb3VudCxuPWUudG90YWw7cmV0dXJuIHMuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8oImNvdW50Iil9LHQsIiAiLHMuY3JlYXRlRWxlbWVudChhLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb21tb24ub2YiLGRlZmF1bHRNZXNzYWdlOiJvZiJ9KSwiICIsbil9O3AucHJvcFR5cGVzPXtjb3VudDppLm51bWJlci5pc1JlcXVpcmVkLHRvdGFsOmkubnVtYmVyLmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJDb3VudCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS9jb3VudC9jb3VudC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS9jb3VudC9jb3VudC5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL2NvdW50L2NvdW50LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtjb3VudDoiY291bnRfX2NvdW50X19faFUxY1YifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvY291bnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvY291bnQvY291bnQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNvdW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Db3VudH19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVGVzdHNUYWJsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVGVzdHNUYWJsZX19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvbWF0cml4RmFjdG9yeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS9tYXRyaXhGYWN0b3J5L21hdHJpeEZhY3RvcnkuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm1hdHJpeEZhY3RvcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm1hdHJpeEZhY3Rvcnl9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL21hdHJpeEZhY3RvcnkvbWF0cml4RmFjdG9yeS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lP2Y6bSxuPWZ1bmN0aW9uKGUpe3ZhciBuPWUudGVzdHMscj1lLmlkO3JldHVybiBpLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJtYXRyaXgiKX0saS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgic3F1YXJlcy13cmFwcGVyIil9LG4ubWFwKHQocikpKSl9O3JldHVybiBuLnByb3BUeXBlcz17dGVzdHM6KDAsYS5hcnJheU9mKSgoMCxhLm9uZU9mVHlwZSkoW2EuYm9vbCxjLlBUU3RhdHVzXSkpLmlzUmVxdWlyZWQsaWQ6YS5zdHJpbmcuaXNSZXF1aXJlZH0sbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tYXRyaXhGYWN0b3J5PW87dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxpPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxkPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvbWF0cml4RmFjdG9yeS9tYXRyaXhGYWN0b3J5LnNjc3MiKSxfPXIoZCkscD11LmRlZmF1bHQuYmluZChfLmRlZmF1bHQpLGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGkuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OmUrIi1zcXVhcmUtIituLGNsYXNzTmFtZTpwKCJzcXVhcmUiLHsibW9zdC1mYWlsZWQiOnR9KX0pfX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6ZSsiLXNxdWFyZS0iK24sY2xhc3NOYW1lOnAoInNxdWFyZSIsdC50b0xvd2VyQ2FzZSgpKX0pfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIm1hdHJpeEZhY3RvcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvbWF0cml4RmFjdG9yeS9tYXRyaXhGYWN0b3J5LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL21hdHJpeEZhY3RvcnkvbWF0cml4RmFjdG9yeS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJyZW5kZXJGb3JCb29sIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL21hdHJpeEZhY3RvcnkvbWF0cml4RmFjdG9yeS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJyZW5kZXJGb3JTdHJpbmciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvbWF0cml4RmFjdG9yeS9tYXRyaXhGYWN0b3J5LmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvbWF0cml4RmFjdG9yeS9tYXRyaXhGYWN0b3J5LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXttYXRyaXg6Im1hdHJpeEZhY3RvcnlfX21hdHJpeF9fXzNJX1FjIiwic3F1YXJlcy13cmFwcGVyIjoibWF0cml4RmFjdG9yeV9fc3F1YXJlcy13cmFwcGVyX19fUnNpakoiLHNxdWFyZToibWF0cml4RmFjdG9yeV9fc3F1YXJlX19fMVgza0wiLCJtb3N0LWZhaWxlZCI6Im1hdHJpeEZhY3RvcnlfX21vc3QtZmFpbGVkX19fMjAzVDQiLHBhc3NlZDoibWF0cml4RmFjdG9yeV9fcGFzc2VkX19fMllTNGUiLGZhaWxlZDoibWF0cml4RmFjdG9yeV9fZmFpbGVkX19fMmQ4dzUiLHNraXBwZWQ6Im1hdHJpeEZhY3RvcnlfX3NraXBwZWRfX18xRVR1SSJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UZXN0c1RhYmxlPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVIZWFkZXIvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUJvZHkvaW5kZXguanMiKSxfPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3BUeXBlcy5qcyIpLHA9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlLnNjc3MiKSxmPXIocCksbT1hLmRlZmF1bHQuYmluZChmLmRlZmF1bHQpLGg9dC5UZXN0c1RhYmxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGVzdHMsbj1lLmNvbHVtbnMscj1lLmxhdW5jaElkO3JldHVybiBzLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJ0ZXN0cy10YWJsZSIpfSxzLmNyZWF0ZUVsZW1lbnQodS5TY3JvbGxXcmFwcGVyLG51bGwscy5jcmVhdGVFbGVtZW50KGMuVGVzdHNUYWJsZUhlYWRlcix7Y29sdW1uczpufSkscy5jcmVhdGVFbGVtZW50KGQuVGVzdHNUYWJsZUJvZHkse2NvbHVtbnM6bix0ZXN0czp0LGxhdW5jaElkOnJ9KSkpfTtoLnByb3BUeXBlcz17dGVzdHM6Xy5QVFRlc3RzLmlzUmVxdWlyZWQsY29sdW1uczpfLlBUQ29sdW1ucy5pc1JlcXVpcmVkLGxhdW5jaElkOigwLGwub25lT2ZUeXBlKShbbC5udW1iZXIsbC5zdHJpbmddKS5pc1JlcXVpcmVkfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiVGVzdHNUYWJsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGUuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsidGVzdHMtdGFibGUiOiJ0ZXN0c1RhYmxlX190ZXN0cy10YWJsZV9fXzJDS3RwIn19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L3Rlc3RzVGFibGVCb2R5LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUZXN0c1RhYmxlQm9keSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVGVzdHNUYWJsZUJvZHl9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L3Rlc3RzVGFibGVCb2R5LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGVzdHNUYWJsZUJvZHk9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdj1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxTPXIoTyksUj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxqPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZVJvdy9pbmRleC5qcyIpLHg9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS9tYXRyaXhGYWN0b3J5L2luZGV4LmpzIiksTD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L3Rlc3RzVGFibGVCb2R5LnNjc3MiKSxEPXIoTCksdz17VGVzdHNUYWJsZUJvZHk6e2Rpc3BsYXlOYW1lOiJUZXN0c1RhYmxlQm9keSJ9fSxNPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUJvZHkvdGVzdHNUYWJsZUJvZHkuanN4Iixjb21wb25lbnRzOncsbG9jYWxzOltlXSxpbXBvcnRzOlt2LmRlZmF1bHRdfSksaz0oMCxFLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L3Rlc3RzVGFibGVCb2R5LmpzeCIsY29tcG9uZW50czp3LGxvY2FsczpbXSxpbXBvcnRzOlt2LmRlZmF1bHQsZy5kZWZhdWx0XX0pLEk9Uy5kZWZhdWx0LmJpbmQoRC5kZWZhdWx0KSxQPXQuVGVzdHNUYWJsZUJvZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNKGsodCxlKSxlKX19KCJUZXN0c1RhYmxlQm9keSIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAscC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5yZW5kZXJSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX3JlbmRlclJvd19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5tYXRyaXhDb21wb25lbnQ9KDAseC5tYXRyaXhGYWN0b3J5KShuLnByb3BzLmNvbHVtbnMuY291bnQucmVuZGVyQXNCb29sKSxufXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6Il9fcmVuZGVyUm93X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJSb3dfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlclJvd19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5jb2x1bW5zLHI9dC5sYXVuY2hJZCxvPW4uY291bnQscz1uLm5hbWUsaT1uLmRhdGU7cmV0dXJuIHYuY3JlYXRlRWxlbWVudChqLlRlc3RzVGFibGVSb3cse2tleToicm93LSIrZS51bmlxdWVJZCxsYXVuY2hJZDpyLGRhdGE6ZSxuYW1lOmVbcy5uYW1lS2V5XSxjb3VudDplW28uY291bnRLZXldLG1hdHJpeERhdGE6ZVtvLm1hdHJpeEtleV0sdGltZTplW2kuZGF0ZUtleV0sbWF0cml4Q29tcG9uZW50OnRoaXMubWF0cml4Q29tcG9uZW50fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoInRlc3RzLXRhYmxlLWJvZHkiKX0sdGhpcy5wcm9wcy50ZXN0cy5tYXAodGhpcy5yZW5kZXJSb3cpKX19XSksdH0odi5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXt0ZXN0czpSLlBUVGVzdHMsY29sdW1uczpSLlBUQ29sdW1ucy5pc1JlcXVpcmVkLGxhdW5jaElkOigwLEMub25lT2ZUeXBlKShbQy5udW1iZXIsQy5zdHJpbmddKS5pc1JlcXVpcmVkfSxvLmRlZmF1bHRQcm9wcz17dGVzdHM6W119LHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiVGVzdHNUYWJsZUJvZHkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUJvZHkvdGVzdHNUYWJsZUJvZHkuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUJvZHkvdGVzdHNUYWJsZUJvZHkuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVCb2R5L3Rlc3RzVGFibGVCb2R5LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsidGVzdHMtdGFibGUtYm9keSI6InRlc3RzVGFibGVCb2R5X190ZXN0cy10YWJsZS1ib2R5X19fMjN3OFcifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUhlYWRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlSGVhZGVyL3Rlc3RzVGFibGVIZWFkZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRlc3RzVGFibGVIZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRlc3RzVGFibGVIZWFkZXJ9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVIZWFkZXIvdGVzdHNUYWJsZUhlYWRlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLmNvbHVtbnMsbj10Lm5hbWUscj10LmNvdW50LG89dC5wZXJjZW50cyxzPXQuZGF0ZTtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygidGVzdHMtdGFibGUtaGVhZGVyIil9LGkuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8oImNvbCIsImNvbC1uYW1lIil9LG4uaGVhZGVyKSxpLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJjb2wiLCJjb2wtY291bnQiKX0saS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOl8oImZ1bGwiKX0sci5oZWFkZXIpLGkuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpfKCJzaG9ydCIpfSxyLmhlYWRlclNob3J0KSksaS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygiY29sIiwiY29sLXBlcmNlbnRzIil9LGkuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpfKCJmdWxsIil9LG8uaGVhZGVyKSxpLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Xygic2hvcnQiKX0sby5oZWFkZXJTaG9ydCkpLGkuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOl8oImNvbCIsImNvbC1kYXRlIil9LHMuaGVhZGVyKSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGVzdHNUYWJsZUhlYWRlcj12b2lkIDA7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxpPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0ocyksYT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxsPXIoYSksdT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZUhlYWRlci90ZXN0c1RhYmxlSGVhZGVyLnNjc3MiKSxkPXIoYyksXz1sLmRlZmF1bHQuYmluZChkLmRlZmF1bHQpO28ucHJvcFR5cGVzPXtjb2x1bW5zOnUuUFRDb2x1bW5zLmlzUmVxdWlyZWR9LHQuVGVzdHNUYWJsZUhlYWRlcj1vOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJUZXN0c1RhYmxlSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVIZWFkZXIvdGVzdHNUYWJsZUhlYWRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlSGVhZGVyL3Rlc3RzVGFibGVIZWFkZXIuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlSGVhZGVyL3Rlc3RzVGFibGVIZWFkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ0ZXN0cy10YWJsZS1oZWFkZXIiOiJ0ZXN0c1RhYmxlSGVhZGVyX190ZXN0cy10YWJsZS1oZWFkZXJfX18xMXBLTiIsY29sOiJ0ZXN0c1RhYmxlSGVhZGVyX19jb2xfX19yb1U2ZSIsImNvbC1uYW1lIjoidGVzdHNUYWJsZUhlYWRlcl9fY29sLW5hbWVfX19yRkVJaCIsImNvbC1jb3VudCI6InRlc3RzVGFibGVIZWFkZXJfX2NvbC1jb3VudF9fX0pPX1BiIixzaG9ydDoidGVzdHNUYWJsZUhlYWRlcl9fc2hvcnRfX192XzZ5WiIsZnVsbDoidGVzdHNUYWJsZUhlYWRlcl9fZnVsbF9fXzJmMDZIIiwiY29sLXBlcmNlbnRzIjoidGVzdHNUYWJsZUhlYWRlcl9fY29sLXBlcmNlbnRzX19fc2JEM0giLCJjb2wtZGF0ZSI6InRlc3RzVGFibGVIZWFkZXJfX2NvbC1kYXRlX19fM19lZ0cifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZVJvdy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlUm93L3Rlc3RzVGFibGVSb3cuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRlc3RzVGFibGVSb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlRlc3RzVGFibGVSb3d9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVSb3cvdGVzdHNUYWJsZVJvdy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGVzdHNUYWJsZVJvdz12b2lkIDA7dmFyIHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPW8odSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPW8oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPW8ocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9byhtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9byhnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9byh2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1vKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPW8oTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC9wVHlwZXMuanMiKSxJPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvY291bnQvaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZVJvdy90ZXN0c1RhYmxlUm93LnNjc3MiKSxOPW8oUCksSD17VGVzdHNUYWJsZVJvdzp7ZGlzcGxheU5hbWU6IlRlc3RzVGFibGVSb3cifX0sRj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVSb3cvdGVzdHNUYWJsZVJvdy5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxCPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZVJvdy90ZXN0c1RhYmxlUm93LmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFU9eC5kZWZhdWx0LmJpbmQoTi5kZWZhdWx0KSxHPXQuVGVzdHNUYWJsZVJvdz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEYoQih0LGUpLGUpfX0oIlRlc3RzVGFibGVSb3ciKSgocz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3Rlc3RDYXNlTmFtZUxpbms6KDAsdy50ZXN0Q2FzZU5hbWVMaW5rU2VsZWN0b3IpKGUse3VuaXF1ZUlkOnQuZGF0YS51bmlxdWVJZCx0ZXN0SXRlbUlkczp0LmxhdW5jaElkfSl9fSkpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5kYXRhLG49ZS5jb3VudCxvPWUubmFtZSxzPWUubWF0cml4RGF0YSxpPWUudGltZSxhPWUubWF0cml4Q29tcG9uZW50LGw9ZS50ZXN0Q2FzZU5hbWVMaW5rLHU9dC50b3RhbCxjPXQudW5pcXVlSWQsZD1hLF89KG4vdSoxMDApLnRvRml4ZWQoMik7cmV0dXJuIHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoInJvdyIpfSxyLmNyZWF0ZUVsZW1lbnQoRC5OYXZMaW5rLHtjbGFzc05hbWU6VSgiY29sIiwiY29sLW5hbWUiKSx0bzpsfSxyLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsbykpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImNvbCIsImNvbC1jb3VudCIpfSxyLmNyZWF0ZUVsZW1lbnQoSS5Db3VudCx7Y291bnQ6bix0b3RhbDp1fSksci5jcmVhdGVFbGVtZW50KGQse3Rlc3RzOnMsaWQ6Y30pKSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJjb2wiLCJjb2wtcGVyY2VudHMiKX0sXywiJSIpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImNvbCIsImNvbC1kYXRlIil9LHIuY3JlYXRlRWxlbWVudChNLkFic1JlbFRpbWUse3N0YXJ0VGltZTpBcnJheS5pc0FycmF5KGkpP2lbaS5sZW5ndGgtMV06aX0pKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17dGVzdENhc2VOYW1lTGluazpSLm9iamVjdC5pc1JlcXVpcmVkLGRhdGE6ay5QVFRlc3QuaXNSZXF1aXJlZCxuYW1lOlIuc3RyaW5nLmlzUmVxdWlyZWQsY291bnQ6Ui5udW1iZXIuaXNSZXF1aXJlZCx0aW1lOigwLFIub25lT2ZUeXBlKShbUi5udW1iZXIsUi5hcnJheV0pLmlzUmVxdWlyZWQsbWF0cml4RGF0YTpSLmFycmF5LmlzUmVxdWlyZWQsbWF0cml4Q29tcG9uZW50OlIuZnVuYy5pc1JlcXVpcmVkLGxhdW5jaElkOigwLFIub25lT2ZUeXBlKShbUi5udW1iZXIsUi5zdHJpbmddKS5pc1JlcXVpcmVkfSxpPWwpKXx8aSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIlRlc3RzVGFibGVSb3ciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvdGVzdHNUYWJsZVJvdy90ZXN0c1RhYmxlUm93LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlL3Rlc3RzVGFibGVSb3cvdGVzdHNUYWJsZVJvdy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZS90ZXN0c1RhYmxlUm93L3Rlc3RzVGFibGVSb3cuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3JvdzoidGVzdHNUYWJsZVJvd19fcm93X19fMWlHMEoiLGNvbDoidGVzdHNUYWJsZVJvd19fY29sX19fMnNFQjgiLCJjb2wtbmFtZSI6InRlc3RzVGFibGVSb3dfX2NvbC1uYW1lX19fM2hHNDYiLCJjb2wtY291bnQiOiJ0ZXN0c1RhYmxlUm93X19jb2wtY291bnRfX19Vc0s4MSIsImNvbC1wZXJjZW50cyI6InRlc3RzVGFibGVSb3dfX2NvbC1wZXJjZW50c19fXzE5TzRCIiwiY29sLWRhdGUiOiJ0ZXN0c1RhYmxlUm93X19jb2wtZGF0ZV9fX3dDV0tOIixyZWxhdGl2ZToidGVzdHNUYWJsZVJvd19fcmVsYXRpdmVfX18xenlKSiIsYWJzb2x1dGU6InRlc3RzVGFibGVSb3dfX2Fic29sdXRlX19fMlh4VmoiLCJkYXRlLWZyb20tbm93IjoidGVzdHNUYWJsZVJvd19fZGF0ZS1mcm9tLW5vd19fXzFZNm1aIn19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlV2lkZ2V0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UZXN0c1RhYmxlV2lkZ2V0PXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGw9cihhKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L2xhdW5jaEluZm9CbG9jay9pbmRleC5qc3giKSxjPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGUvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3BUeXBlcy5qcyIpLF89bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvdGVzdHNUYWJsZVdpZGdldC5zY3NzIikscD1yKF8pLGY9bC5kZWZhdWx0LmJpbmQocC5kZWZhdWx0KSxtPXQuVGVzdHNUYWJsZVdpZGdldD1mdW5jdGlvbihlKXt2YXIgdD1lLmxhdW5jaCxuPWUudGVzdHMscj1lLmlzc3VlVHlwZSxvPWUuY29sdW1ucztyZXR1cm4gcy5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZigidGVzdHMtdGFibGUtd2lkZ2V0Iil9LHMuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmYoIndpZGdldC13cmFwcGVyIil9LHMuY3JlYXRlRWxlbWVudCh1LkxhdW5jaEluZm9CbG9jayx7bGF1bmNoTmFtZTp0Lm5hbWUsaXNzdWVUeXBlOnJ9KSxzLmNyZWF0ZUVsZW1lbnQoYy5UZXN0c1RhYmxlLHtjb2x1bW5zOm8sdGVzdHM6bixsYXVuY2hJZDp0LmlkfSkpKX07bS5wcm9wVHlwZXM9e2xhdW5jaDppLm9iamVjdC5pc1JlcXVpcmVkLHRlc3RzOmQuUFRUZXN0cy5pc1JlcXVpcmVkLGlzc3VlVHlwZTppLmVsZW1lbnQsY29sdW1uczpkLlBUQ29sdW1ucy5pc1JlcXVpcmVkfSxtLmRlZmF1bHRQcm9wcz17aXNzdWVUeXBlOm51bGx9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJUZXN0c1RhYmxlV2lkZ2V0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlV2lkZ2V0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2NvbXBvbmVudHMvdGVzdHNUYWJsZVdpZGdldC90ZXN0c1RhYmxlV2lkZ2V0LmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L3Rlc3RzVGFibGVXaWRnZXQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ0ZXN0cy10YWJsZS13aWRnZXQiOiJ0ZXN0c1RhYmxlV2lkZ2V0X190ZXN0cy10YWJsZS13aWRnZXRfX18xdFBmTCIsIndpZGdldC13cmFwcGVyIjoidGVzdHNUYWJsZVdpZGdldF9fd2lkZ2V0LXdyYXBwZXJfX18xRVNtZiJ9fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9mbGFreVRlc3RzL2ZsYWt5VGVzdHMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYWt5VGVzdHM9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShpKSxsPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvY29tcG9uZW50cy90ZXN0c1RhYmxlV2lkZ2V0L2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2ZsYWt5VGVzdHMvZmxha3lUZXN0c0NmZy5qc3giKSxjPXIodSksZD10LkZsYWt5VGVzdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWRnZXQuY29udGVudDtyZXR1cm4gcy5jcmVhdGVFbGVtZW50KGwuVGVzdHNUYWJsZVdpZGdldCx7dGVzdHM6dC5mbGFreSxsYXVuY2g6dC5sYXRlc3RMYXVuY2gsY29sdW1uczpjLmNvbHVtbnN9KX07ZC5wcm9wVHlwZXM9e3dpZGdldDphLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkZsYWt5VGVzdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvZmxha3lUZXN0cy9mbGFreVRlc3RzLmpzeCIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9mbGFreVRlc3RzL2ZsYWt5VGVzdHNDZmcuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbHVtbnM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxpPXtuYW1lOntoZWFkZXI6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLnRlc3RDYXNlIixkZWZhdWx0TWVzc2FnZToiVGVzdCBjYXNlIn0pLG5hbWVLZXk6Iml0ZW1OYW1lIn0sY291bnQ6e2hlYWRlcjpvLmNyZWF0ZUVsZW1lbnQocy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIuc3dpdGNoZXMiLGRlZmF1bHRNZXNzYWdlOiJTd2l0Y2hlcyJ9KSxoZWFkZXJTaG9ydDpvLmNyZWF0ZUVsZW1lbnQocy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRmxha3lUZXN0cy50YWJsZS5oZWFkZXIuc3dpdGNoZXNTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IlN3dGNocyJ9KSxjb3VudEtleToiZmxha3lDb3VudCIsbWF0cml4S2V5OiJzdGF0dXNlcyJ9LHBlcmNlbnRzOntoZWFkZXI6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkZsYWt5VGVzdHMudGFibGUuaGVhZGVyLm9mU3dpdGNoZXMiLGRlZmF1bHRNZXNzYWdlOiIlIG9mIHN3aXRjaGVzIn0pLGhlYWRlclNob3J0Om8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGbGFreVRlc3RzLnRhYmxlLmhlYWRlci5vZlN3aXRjaGVzU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiIlIHN3dGNocyJ9KX0sZGF0ZTp7aGVhZGVyOm8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGbGFreVRlc3RzLnRhYmxlLmhlYWRlci5sYXN0U3dpdGNoIixkZWZhdWx0TWVzc2FnZToiTGFzdCBzd2l0Y2gifSksZGF0ZUtleToiZW5kVGltZSJ9fTt0LmNvbHVtbnM9aTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJjb2x1bW5zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2ZsYWt5VGVzdHMvZmxha3lUZXN0c0NmZy5qc3giKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvZmxha3lUZXN0cy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GbGFreVRlc3RzPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2ZsYWt5VGVzdHMvZmxha3lUZXN0cy5qc3giKTt0LkZsYWt5VGVzdHM9ci5GbGFreVRlc3RzfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0QWN0aXZpdHk9dC5MYXVuY2hlc1RhYmxlPXQuVW5pcXVlQnVnc1RhYmxlPXQuTW9zdEZhaWxlZFRlc3RzPXQuRmxha3lUZXN0cz12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9mbGFreVRlc3RzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL21vc3RGYWlsZWRUZXN0cy9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9pbmRleC5qcyIpLGE9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvaW5kZXguanMiKTt0LkZsYWt5VGVzdHM9ci5GbGFreVRlc3RzLHQuTW9zdEZhaWxlZFRlc3RzPW8uTW9zdEZhaWxlZFRlc3RzLHQuVW5pcXVlQnVnc1RhYmxlPXMuVW5pcXVlQnVnc1RhYmxlLHQuTGF1bmNoZXNUYWJsZT1pLkxhdW5jaGVzVGFibGUsdC5Qcm9qZWN0QWN0aXZpdHk9YS5Qcm9qZWN0QWN0aXZpdHl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LlNUQVRTX1RJPSJzdGF0aXN0aWNzJGRlZmVjdHMkdG9faW52ZXN0aWdhdGUkdGkwMDEiLG89dC5TVEFUU19BQj0ic3RhdGlzdGljcyRkZWZlY3RzJGF1dG9tYXRpb25fYnVnJGFiMDAxIixzPXQuU1RBVFNfUEI9InN0YXRpc3RpY3MkZGVmZWN0cyRwcm9kdWN0X2J1ZyRwYjAwMSIsaT10LlNUQVRTX1NJPSJzdGF0aXN0aWNzJGRlZmVjdHMkc3lzdGVtX2lzc3VlJHNpMDAxIixhPXQuTkFNRT0ibmFtZSIsbD10LlNUQVRVUz0ic3RhdHVzIix1PXQuU1RBUlRfVElNRT0ic3RhcnRUaW1lIixjPXQuRU5EX1RJTUU9ImVuZFRpbWUiLGQ9dC5USU1FX0NPTFVNTl9LRVk9InRpbWUiLF89dC5ERUZFQ1RfQ09MVU1OX0tFWT0iZGVmZWN0IixwPXQuU1RBVElTVElDU19DT0xVTU5fS0VZPSJzdGF0aXN0aWNzIixmPXQuU1RBVFVTX0NPTFVNTl9LRVk9InN0YXR1cyIsbT10Lk5BTUVfQ09MVU1OX0tFWT0ibmFtZSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlNUQVRTX1RJIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiU1RBVFNfQUIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJTVEFUU19QQiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIlNUQVRTX1NJIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiTkFNRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlNUQVRVUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlNUQVJUX1RJTUUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJFTkRfVElNRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlRJTUVfQ09MVU1OX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkRFRkVDVF9DT0xVTU5fS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiU1RBVElTVElDU19DT0xVTU5fS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiU1RBVFVTX0NPTFVNTl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJOQU1FX0NPTFVNTl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9sYXVuY2hlc1RhYmxlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMYXVuY2hlc1RhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5MYXVuY2hlc1RhYmxlfX0pfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaGVzVGFibGU9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaz1yKE0pLEk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLE49bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLEg9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYWJzUmVsVGltZS9pbmRleC5qcyIpLEc9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9pbmRleC5qcyIpLHo9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZXhlY3V0aW9uU3RhdGlzdGljcy9pbmRleC5qcyIpLFY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZGVmZWN0U3RhdGlzdGljcy9pbmRleC5qcyIpLFc9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvdG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3MvaW5kZXguanMiKSxZPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3RhdGlzdGljc0xpbmsvaW5kZXguanMiKSxxPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0TGluay9pbmRleC5qcyIpLEs9bigiLi9zcmMvY29tbW9uL3V0aWxzL2xvY2FsaXphdGlvblV0aWxzLmpzIiksWD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL3V0aWxzLmpzIiksUT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvY29uc3RhbnRzLmpzIiksSj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksWj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbGF1bmNoZXNUYWJsZS5zY3NzIiksZWU9cihaKSx0ZT1ELmRlZmF1bHQuYmluZChlZS5kZWZhdWx0KSxuZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jbGFzc05hbWUsbz1lLnZhbHVlLHM9bi5saW5rUGF5bG9hZCxpPW8udmFsdWVzLGE9by5hdHRyaWJ1dGVzLGw9e2lkOm8uaWQsbmFtZTpvLm5hbWUsb3duZXI6aS51c2VyLG51bWJlcjpvLm51bWJlcixkZXNjcmlwdGlvbjppLmRlc2NyaXB0aW9uLGF0dHJpYnV0ZXM6YXx8bnVsbH0sdT17cGFnZTpGLlRFU1RfSVRFTV9QQUdFLHBheWxvYWQ6c307cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGUoIm5hbWUtY29sIixyKX0seC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5JdGVtSW5mbyx7Y3VzdG9tUHJvcHM6e293bkxpbmtQYXJhbXM6dX0sdmFsdWU6bCxlZGl0RGlzYWJsZWQ6ITB9KSl9O25lLnByb3BUeXBlcz17dmFsdWU6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGNsYXNzTmFtZTprLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciByZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jbGFzc05hbWUsbz1lLnZhbHVlLnZhbHVlcyxzPW4uZm9ybWF0TWVzc2FnZTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgic3RhdHVzLWNvbCIscil9LHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnRlKCJtb2JpbGUtaGludCIpfSxzKEouaGludE1lc3NhZ2VzLnN0YXR1c0hpbnQpKSwoMCxLLmZvcm1hdFN0YXR1cykocyxvLnN0YXR1cykpfTtyZS5wcm9wVHlwZXM9e3ZhbHVlOmsuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjbGFzc05hbWU6ay5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfTt2YXIgb2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuY2xhc3NOYW1lLG89ZS52YWx1ZSxzPW4uZm9ybWF0TWVzc2FnZTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgidGltZS1jb2wiLHIpfSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTp0ZSgibW9iaWxlLWhpbnQiKX0scyh0PT09US5TVEFSVF9USU1FP0ouaGludE1lc3NhZ2VzLnN0YXJ0VGltZUhpbnQ6Si5oaW50TWVzc2FnZXMuZW5kVGltZUhpbnQpKSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChVLkFic1JlbFRpbWUse3N0YXJ0VGltZTpuZXcgRGF0ZSh0PT09US5TVEFSVF9USU1FP28uc3RhcnRUaW1lOm8udmFsdWVzLmVuZFRpbWUpLmdldFRpbWUoKX0pKX07b2UucHJvcFR5cGVzPXt2YWx1ZTprLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsY2xhc3NOYW1lOmsuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIHNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmNsYXNzTmFtZSxvPWUudmFsdWUscz1uLmxpbmtQYXlsb2FkLGk9e2l0ZW1JZDpOdW1iZXIoby5pZCksc3RhdHVzZXM6KDAsJC5nZXRTdGF0aXN0aWNzU3RhdHVzZXMpKHQpLG93bkxpbmtQYXJhbXM6e3BhZ2U6Ri5URVNUX0lURU1fUEFHRSxwYXlsb2FkOnN9fTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgic3RhdGlzdGljcy1jb2wiLHIpfSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRlKCJkZXNrdG9wLWJsb2NrIil9LHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KHouRXhlY3V0aW9uU3RhdGlzdGljcywoMCxSLmRlZmF1bHQpKHt2YWx1ZTpOdW1iZXIoby52YWx1ZXNbdF0pfSxpKSkpLHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGUoIm1vYmlsZS1ibG9jayIsInN0YXRpc3RpY3MtIit0LnNwbGl0KCIkIilbMl0pfSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRlKCJibG9jay1jb250ZW50Iil9LHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KFkuU3RhdGlzdGljc0xpbmssKDAsUi5kZWZhdWx0KSh7Y2xhc3NOYW1lOnRlKCJ2YWx1ZSIpfSxpKSxOdW1iZXIoby52YWx1ZXNbdF0pKSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTp0ZSgibWVzc2FnZSIpfSxKLmRlZmF1bHRTdGF0aXN0aWNzTWVzc2FnZXNbdF0pKSkpfTtzZS5wcm9wVHlwZXM9e3ZhbHVlOmsuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjbGFzc05hbWU6ay5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfTt2YXIgaWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8scz1lLmNsYXNzTmFtZSxpPWUudmFsdWUsYT1uLmxpbmtQYXlsb2FkLGw9dC5zcGxpdCgiJCIpLHU9bFsyXSxjPWxbM10sZD1pLnZhbHVlc1t0XSxfPXtpdGVtSWQ6TnVtYmVyKGkuaWQpLG93bkxpbmtQYXJhbXM6e3BhZ2U6Ri5URVNUX0lURU1fUEFHRSxwYXlsb2FkOmF9fTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgiZGVmZWN0LWNvbCIscyl9LHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dGUoImRlc2t0b3AtYmxvY2siKX0sISFOdW1iZXIoZCkmJih0PT09US5TVEFUU19UST94LmRlZmF1bHQuY3JlYXRlRWxlbWVudChXLlRvSW52ZXN0aWdhdGVTdGF0aXN0aWNzLCgwLFIuZGVmYXVsdCkoe3ZhbHVlOihyPXt9LCgwLE8uZGVmYXVsdCkocixjLGQpLCgwLE8uZGVmYXVsdCkociwidG90YWwiLGQpLHIpfSxfKSk6eC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5EZWZlY3RTdGF0aXN0aWNzLCgwLFIuZGVmYXVsdCkoe3R5cGU6dSxkYXRhOihvPXt9LCgwLE8uZGVmYXVsdCkobyxjLGQpLCgwLE8uZGVmYXVsdCkobywidG90YWwiLGQpLG8pfSxfKSkpKSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnRlKCJtb2JpbGUtYmxvY2siLCJkZWZlY3QtIit1KX0seC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp0ZSgiYmxvY2stY29udGVudCIpfSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChxLkRlZmVjdExpbmssKDAsUi5kZWZhdWx0KSh7fSxfLHtkZWZlY3RzOltjLCJ0b3RhbCJdfSksZCkseC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6dGUoIm1lc3NhZ2UiKX0sSi5kZWZhdWx0U3RhdHVzZXNNZXNzYWdlc1t0XSkpKSl9O2llLnByb3BUeXBlcz17dmFsdWU6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGNsYXNzTmFtZTprLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciBhZT0obz17fSwoMCxPLmRlZmF1bHQpKG8sUS5TVEFUSVNUSUNTX0NPTFVNTl9LRVksc2UpLCgwLE8uZGVmYXVsdCkobyxRLkRFRkVDVF9DT0xVTU5fS0VZLGllKSwoMCxPLmRlZmF1bHQpKG8sUS5USU1FX0NPTFVNTl9LRVksb2UpLCgwLE8uZGVmYXVsdCkobyxRLk5BTUVfQ09MVU1OX0tFWSxuZSksKDAsTy5kZWZhdWx0KShvLFEuU1RBVFVTX0NPTFVNTl9LRVkscmUpLG8pLGxlPShzPXt9LCgwLE8uZGVmYXVsdCkocyxRLk5BTUUsUS5OQU1FX0NPTFVNTl9LRVkpLCgwLE8uZGVmYXVsdCkocyxRLlNUQVRVUyxRLlNUQVRVU19DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5TVEFSVF9USU1FLFEuVElNRV9DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5FTkRfVElNRSxRLlRJTUVfQ09MVU1OX0tFWSksKDAsTy5kZWZhdWx0KShzLFAuU1RBVFNfVE9UQUwsUS5TVEFUSVNUSUNTX0NPTFVNTl9LRVkpLCgwLE8uZGVmYXVsdCkocyxQLlNUQVRTX1BBU1NFRCxRLlNUQVRJU1RJQ1NfQ09MVU1OX0tFWSksKDAsTy5kZWZhdWx0KShzLFAuU1RBVFNfRkFJTEVELFEuU1RBVElTVElDU19DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUC5TVEFUU19TS0lQUEVELFEuU1RBVElTVElDU19DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5TVEFUU19BQixRLkRFRkVDVF9DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5TVEFUU19QQixRLkRFRkVDVF9DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5TVEFUU19TSSxRLkRFRkVDVF9DT0xVTU5fS0VZKSwoMCxPLmRlZmF1bHQpKHMsUS5TVEFUU19USSxRLkRFRkVDVF9DT0xVTU5fS0VZKSxzKSx1ZT1mdW5jdGlvbihlLHQpe3JldHVybntpZDplLHRpdGxlOkouQ09MVU1OX05BTUVTX01BUFtlXSxjb21wb25lbnQ6ZnVuY3Rpb24obil7cmV0dXJuIGFlW2xlW2VdXShuLGUsdCl9fX0sY2U9dC5MYXVuY2hlc1RhYmxlPShpPSgwLEkuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RJZDooMCxILmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSl9fSkpKGE9KDAsdy5pbmplY3RJbnRsKSgodT1sPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxnLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLHYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldENvbHVtbnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY29sdW1ucz1yLmdldENvbHVtbnMoKSxvPW4sKDAsdi5kZWZhdWx0KShyLG8pfXJldHVybigwLEEuZGVmYXVsdCkodCxlKSwoMCxFLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMud2lkZ2V0LmNvbnRlbnRQYXJhbWV0ZXJzLmNvbnRlbnRGaWVsZHMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsUi5kZWZhdWx0KSh7fSxlLCgwLE8uZGVmYXVsdCkoe30sdCx0KSl9LHt9KSx0PXtmb3JtYXRNZXNzYWdlOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlLGxpbmtQYXlsb2FkOntwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0SWQsZmlsdGVySWQ6Ti5BTEx9fTtyZXR1cm4oMCxwLmRlZmF1bHQpKGxlKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4gZVtyXT9bXS5jb25jYXQoKDAsZC5kZWZhdWx0KShuKSxbdWUocix0KV0pOm59LFtdKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLndpZGdldC5jb250ZW50LnJlc3VsdDtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoWC5TY3JvbGxXcmFwcGVyLHtoaWRlVHJhY2tzV2hlbk5vdE5lZWRlZDohMH0seC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQi5HcmlkLHtjb2x1bW5zOnRoaXMuY29sdW1ucyxkYXRhOmV9KSl9fV0pLHR9KGouUHVyZUNvbXBvbmVudCksbC5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHByb2plY3RJZDprLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LGE9dSkpfHxhKXx8YTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoY2UsIkxhdW5jaGVzVGFibGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9sYXVuY2hlc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHRlLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobmUsIk5hbWVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9sYXVuY2hlc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHJlLCJTdGF0dXNDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9sYXVuY2hlc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG9lLCJUaW1lQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbGF1bmNoZXNUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzZSwiU3RhdGlzdGljc0NvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaWUsIkRlZmVjdHNDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9sYXVuY2hlc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGFlLCJjb2x1bW5Db21wb25lbnRzTWFwIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbGF1bmNoZXNUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsZSwiQ09MVU1OU19LRVlTX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodWUsImdldENvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2xhdW5jaGVzVGFibGUuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJuYW1lLWNvbCI6ImxhdW5jaGVzVGFibGVfX25hbWUtY29sX19fMjZidnciLCJ0aW1lLWNvbCI6ImxhdW5jaGVzVGFibGVfX3RpbWUtY29sX19fVEZvVzEiLCJtb2JpbGUtaGludCI6ImxhdW5jaGVzVGFibGVfX21vYmlsZS1oaW50X19fMXpDV0siLCJzdGF0dXMtY29sIjoibGF1bmNoZXNUYWJsZV9fc3RhdHVzLWNvbF9fXzFVdDJKIiwic3RhdGlzdGljcy1jb2wiOiJsYXVuY2hlc1RhYmxlX19zdGF0aXN0aWNzLWNvbF9fXzFrVnBnIiwibW9iaWxlLWJsb2NrIjoibGF1bmNoZXNUYWJsZV9fbW9iaWxlLWJsb2NrX19fM1RjZnoiLCJzdGF0aXN0aWNzLXBhc3NlZCI6ImxhdW5jaGVzVGFibGVfX3N0YXRpc3RpY3MtcGFzc2VkX19fNmhpZ0oiLCJzdGF0aXN0aWNzLWZhaWxlZCI6ImxhdW5jaGVzVGFibGVfX3N0YXRpc3RpY3MtZmFpbGVkX19fM2hYMTEiLCJzdGF0aXN0aWNzLXNraXBwZWQiOiJsYXVuY2hlc1RhYmxlX19zdGF0aXN0aWNzLXNraXBwZWRfX18zYWlBaCIsInN0YXRpc3RpY3MtdG90YWwiOiJsYXVuY2hlc1RhYmxlX19zdGF0aXN0aWNzLXRvdGFsX19fNzJGdHoiLHZhbHVlOiJsYXVuY2hlc1RhYmxlX192YWx1ZV9fXzNQTE9YIiwiZGVmZWN0LWNvbCI6ImxhdW5jaGVzVGFibGVfX2RlZmVjdC1jb2xfX18yTEl3WiIsImRlZmVjdC10b19pbnZlc3RpZ2F0ZSI6ImxhdW5jaGVzVGFibGVfX2RlZmVjdC10b19pbnZlc3RpZ2F0ZV9fXzNSMHpoIiwiZGVmZWN0LXN5c3RlbV9pc3N1ZSI6ImxhdW5jaGVzVGFibGVfX2RlZmVjdC1zeXN0ZW1faXNzdWVfX18ySnhqLSIsImRlZmVjdC1wcm9kdWN0X2J1ZyI6ImxhdW5jaGVzVGFibGVfX2RlZmVjdC1wcm9kdWN0X2J1Z19fXzJMZEo4IiwiZGVmZWN0LWF1dG9tYXRpb25fYnVnIjoibGF1bmNoZXNUYWJsZV9fZGVmZWN0LWF1dG9tYXRpb25fYnVnX19fWFhoNzIiLCJibG9jay1jb250ZW50IjoibGF1bmNoZXNUYWJsZV9fYmxvY2stY29udGVudF9fXzNZdE9sIixtZXNzYWdlOiJsYXVuY2hlc1RhYmxlX19tZXNzYWdlX19fMnhSVGEiLCJkZXNrdG9wLWJsb2NrIjoibGF1bmNoZXNUYWJsZV9fZGVza3RvcC1ibG9ja19fXzI0RTV5In19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNPTFVNTl9OQU1FU19NQVA9dC5kZWZhdWx0U3RhdGlzdGljc01lc3NhZ2VzPXQuZGVmYXVsdFN0YXR1c2VzTWVzc2FnZXM9dC5oaW50TWVzc2FnZXM9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxfPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLHA9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL2NvbnN0YW50cy5qcyIpLGY9Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNUYWJsZS5uYW1lQ29sdW1uIixkZWZhdWx0TWVzc2FnZToiTmFtZSJ9KSxtPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuc3RhdHVzQ29sdW1uIixkZWZhdWx0TWVzc2FnZToiU3RhdHVzIn0pLGg9Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNUYWJsZS5zdGFydFRpbWVDb2x1bW5GdWxsIixkZWZhdWx0TWVzc2FnZToiU3RhcnQgdGltZSJ9KSxnPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuc3RhcnRUaW1lQ29sdW1uU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJTdGFydCJ9KSxiPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuZW5kVGltZUNvbHVtbkZ1bGwiLGRlZmF1bHRNZXNzYWdlOiJGaW5pc2ggdGltZSJ9KSxFPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuZW5kVGltZUNvbHVtblNob3J0IixkZWZhdWx0TWVzc2FnZToiRmluaXNoIn0pLHk9Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNUYWJsZS50b3RhbENvbHVtbkZ1bGwiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCJ9KSx2PWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUudG90YWxDb2x1bW5TaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IlR0bCJ9KSxUPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUucGFzc2VkQ29sdW1uRnVsbCIsZGVmYXVsdE1lc3NhZ2U6IlBhc3NlZCJ9KSxBPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUucGFzc2VkQ29sdW1uU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJwcyJ9KSxDPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuZmFpbGVkQ29sdW1uRnVsbCIsZGVmYXVsdE1lc3NhZ2U6IkZhaWxlZCJ9KSxPPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuZmFpbGVkQ29sdW1uU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJmbCJ9KSxTPWMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkxhdW5jaGVzVGFibGUuc2tpcHBlZENvbHVtbkZ1bGwiLGRlZmF1bHRNZXNzYWdlOiJTa2lwcGVkIn0pLFI9Yy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoZC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNUYWJsZS5za2lwcGVkQ29sdW1uU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJza3AifSksaj10LmhpbnRNZXNzYWdlcz0oMCxkLmRlZmluZU1lc3NhZ2VzKSh7c3RhdHVzSGludDp7aWQ6IkxhdW5jaGVzVGFibGUuc3RhdHVzSGludCIsZGVmYXVsdE1lc3NhZ2U6IlN0YXR1czoifSxzdGFydFRpbWVIaW50OntpZDoiTGF1bmNoZXNUYWJsZS5zdGFydFRpbWVIaW50IixkZWZhdWx0TWVzc2FnZToiU3RhcnQgdGltZToifSxlbmRUaW1lSGludDp7aWQ6IkxhdW5jaGVzVGFibGUuZW5kVGltZUhpbnQiLGRlZmF1bHRNZXNzYWdlOiJGaW5pc2ggdGltZToifX0pLHg9dC5kZWZhdWx0U3RhdHVzZXNNZXNzYWdlcz0obz17fSwoMCxsLmRlZmF1bHQpKG8scC5TVEFUU19USSwiVG8gaW52ZXN0aWdhdGUiKSwoMCxsLmRlZmF1bHQpKG8scC5TVEFUU19QQiwiUHJvZHVjdCBidWciKSwoMCxsLmRlZmF1bHQpKG8scC5TVEFUU19BQiwiQXV0b21hdGlvbiBidWciKSwoMCxsLmRlZmF1bHQpKG8scC5TVEFUU19TSSwiU3lzdGVtIGlzc3VlIiksbyksTD10LmRlZmF1bHRTdGF0aXN0aWNzTWVzc2FnZXM9KHM9e30sKDAsbC5kZWZhdWx0KShzLF8uU1RBVFNfVE9UQUwseSksKDAsbC5kZWZhdWx0KShzLF8uU1RBVFNfUEFTU0VELFQpLCgwLGwuZGVmYXVsdCkocyxfLlNUQVRTX0ZBSUxFRCxDKSwoMCxsLmRlZmF1bHQpKHMsXy5TVEFUU19TS0lQUEVELFMpLHMpLEQ9dC5DT0xVTU5fTkFNRVNfTUFQPShpPXt9LCgwLGwuZGVmYXVsdCkoaSxwLk5BTUUse2Z1bGw6ZixzaG9ydDpmfSksKDAsbC5kZWZhdWx0KShpLHAuU1RBVFVTLHtmdWxsOm0sc2hvcnQ6bX0pLCgwLGwuZGVmYXVsdCkoaSxwLlNUQVJUX1RJTUUse2Z1bGw6aCxzaG9ydDpnfSksKDAsbC5kZWZhdWx0KShpLHAuRU5EX1RJTUUse2Z1bGw6YixzaG9ydDpFfSksKDAsbC5kZWZhdWx0KShpLF8uU1RBVFNfVE9UQUwse2Z1bGw6eSxzaG9ydDp2fSksKDAsbC5kZWZhdWx0KShpLF8uU1RBVFNfUEFTU0VELHtmdWxsOlQsc2hvcnQ6QX0pLCgwLGwuZGVmYXVsdCkoaSxfLlNUQVRTX0ZBSUxFRCx7ZnVsbDpDLHNob3J0Ok99KSwoMCxsLmRlZmF1bHQpKGksXy5TVEFUU19TS0lQUEVELHtmdWxsOlMsc2hvcnQ6Un0pLCgwLGwuZGVmYXVsdCkoaSxwLlNUQVRTX1RJLHtmdWxsOnhbcC5TVEFUU19USV0sc2hvcnQ6InRvIGludmVzdCJ9KSwoMCxsLmRlZmF1bHQpKGkscC5TVEFUU19BQix7ZnVsbDoiQXV0byBidWciLHNob3J0OiJBdXRvIGJ1ZyJ9KSwoMCxsLmRlZmF1bHQpKGkscC5TVEFUU19QQix7ZnVsbDp4W3AuU1RBVFNfUEJdLHNob3J0OnhbcC5TVEFUU19QQl19KSwoMCxsLmRlZmF1bHQpKGkscC5TVEFUU19TSSx7ZnVsbDp4W3AuU1RBVFNfU0ldLHNob3J0OnhbcC5TVEFUU19TSV19KSxpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaiwiaGludE1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwiZGVmYXVsdFN0YXR1c2VzTWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9tZXNzYWdlcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJkZWZhdWx0U3RhdGlzdGljc01lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiQ09MVU1OX05BTUVTX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIm5hbWVDb2x1bW5UaXRsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sInN0YXR1c0NvbHVtblRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwic3RhcnRUaW1lQ29sdW1uRnVsbFRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywic3RhcnRUaW1lQ29sdW1uU2hvcnRUaXRsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImVuZFRpbWVDb2x1bW5GdWxsVGl0bGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9tZXNzYWdlcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJlbmRUaW1lQ29sdW1uU2hvcnRUaXRsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksInRvdGFsQ29sdW1uRnVsbFRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwidG90YWxDb2x1bW5TaG9ydFRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwicGFzc2VkQ29sdW1uRnVsbFRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQSwicGFzc2VkQ29sdW1uU2hvcnRUaXRsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEMsImZhaWxlZENvbHVtbkZ1bGxUaXRsZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9sYXVuY2hlc1RhYmxlL21lc3NhZ2VzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sImZhaWxlZENvbHVtblNob3J0VGl0bGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9tZXNzYWdlcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihTLCJza2lwcGVkQ29sdW1uRnVsbFRpdGxlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwic2tpcHBlZENvbHVtblNob3J0VGl0bGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS9tZXNzYWdlcy5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL2xhdW5jaGVzVGFibGUvdXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0U3RhdGlzdGljc1N0YXR1c2VzPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIiksbz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxzPXQuZ2V0U3RhdGlzdGljc1N0YXR1c2VzPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIG8uU1RBVFNfVE9UQUw6cmV0dXJuW3IuUEFTU0VELnRvVXBwZXJDYXNlKCksci5GQUlMRUQudG9VcHBlckNhc2UoKSxyLlNLSVBQRUQudG9VcHBlckNhc2UoKSxyLklOVEVSUlVQVEVELnRvVXBwZXJDYXNlKCldO2Nhc2Ugby5TVEFUU19QQVNTRUQ6cmV0dXJuW3IuUEFTU0VELnRvVXBwZXJDYXNlKCldO2Nhc2Ugby5TVEFUU19GQUlMRUQ6cmV0dXJuW3IuRkFJTEVELnRvVXBwZXJDYXNlKCksci5JTlRFUlJVUFRFRC50b1VwcGVyQ2FzZSgpXTtjYXNlIG8uU1RBVFNfU0tJUFBFRDpyZXR1cm5bci5TS0lQUEVELnRvVXBwZXJDYXNlKCldfXJldHVybltdfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJnZXRTdGF0aXN0aWNzU3RhdHVzZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbGF1bmNoZXNUYWJsZS91dGlscy5qcyIpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9tb3N0RmFpbGVkVGVzdHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbW9zdEZhaWxlZFRlc3RzL21vc3RGYWlsZWRUZXN0cy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTW9zdEZhaWxlZFRlc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Nb3N0RmFpbGVkVGVzdHN9fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL21vc3RGYWlsZWRUZXN0cy9tb3N0RmFpbGVkVGVzdHMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Nb3N0RmFpbGVkVGVzdHM9dm9pZCAwO3ZhciBzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPW8oYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPW8odSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPW8oZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9byhwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9byhtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHk9byhFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUz1vKE8pLFI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9jb21wb25lbnRzL3Rlc3RzVGFibGVXaWRnZXQvaW5kZXguanMiKSxqPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbW9zdEZhaWxlZFRlc3RzL21vc3RGYWlsZWRUZXN0c0NmZy5qc3giKSx4PXIoaiksTD17TW9zdEZhaWxlZFRlc3RzOntkaXNwbGF5TmFtZToiTW9zdEZhaWxlZFRlc3RzIn19LEQ9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9tb3N0RmFpbGVkVGVzdHMvbW9zdEZhaWxlZFRlc3RzLmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbZV0saW1wb3J0czpbVC5kZWZhdWx0XX0pLHc9KDAseS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9tb3N0RmFpbGVkVGVzdHMvbW9zdEZhaWxlZFRlc3RzLmpzeCIsY29tcG9uZW50czpMLGxvY2FsczpbXSxpbXBvcnRzOltULmRlZmF1bHQsYi5kZWZhdWx0XX0pLE09dC5Nb3N0RmFpbGVkVGVzdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBEKHcodCxlKSxlKX19KCJNb3N0RmFpbGVkVGVzdHMiKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldElzc3VlVHlwZU1lc3NhZ2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldElzc3VlVHlwZU1lc3NhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19nZXRJc3N1ZVR5cGVNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRJc3N1ZVR5cGVNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRJc3N1ZVR5cGVNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIiQiKVsyXTtyZXR1cm4geC5pc3N1ZVR5cGVzW3RdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMud2lkZ2V0LHQ9ZS5jb250ZW50LG49ZS5jb250ZW50UGFyYW1ldGVycy5jb250ZW50RmllbGRzLHI9blswXTtyZXR1cm4gVC5jcmVhdGVFbGVtZW50KFIuVGVzdHNUYWJsZVdpZGdldCx7dGVzdHM6dC5yZXN1bHQsbGF1bmNoOnQubGF0ZXN0TGF1bmNoLGlzc3VlVHlwZTp0aGlzLmdldElzc3VlVHlwZU1lc3NhZ2UociksY29sdW1uczp4LmNvbHVtbnN9KX19XSksdH0oVC5Db21wb25lbnQpLHMucHJvcFR5cGVzPXt3aWRnZXQ6Uy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiTW9zdEZhaWxlZFRlc3RzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL21vc3RGYWlsZWRUZXN0cy9tb3N0RmFpbGVkVGVzdHMuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbW9zdEZhaWxlZFRlc3RzL21vc3RGYWlsZWRUZXN0c0NmZy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29sdW1ucz10Lmlzc3VlVHlwZXM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHIpLHM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxpPXtmYWlsZWQ6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy5oZWFkZXIuaXNzdWVUeXBlLmZhaWxlZCIsZGVmYXVsdE1lc3NhZ2U6IkZhaWxlZCJ9KSxza2lwcGVkOm8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJNb3N0RmFpbGVkVGVzdHMuaGVhZGVyLmlzc3VlVHlwZS5za2lwcGVkIixkZWZhdWx0TWVzc2FnZToiU2tpcHBlZCJ9KSxwcm9kdWN0X2J1ZzpvLmNyZWF0ZUVsZW1lbnQocy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUucHJvZHVjdF9idWciLGRlZmF1bHRNZXNzYWdlOiJQcm9kdWN0IEJ1ZyJ9KSxhdXRvbWF0aW9uX2J1ZzpvLmNyZWF0ZUVsZW1lbnQocy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTW9zdEZhaWxlZFRlc3RzLmhlYWRlci5pc3N1ZVR5cGUuYXV0b21hdGlvbl9idWciLGRlZmF1bHRNZXNzYWdlOiJBdXRvbWF0aW9uIEJ1ZyJ9KSxzeXN0ZW1faXNzdWU6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy5oZWFkZXIuaXNzdWVUeXBlLnN5c3RlbV9pc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6IlN5c3RlbSBJc3N1ZSJ9KSxub19kZWZlY3Q6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy5oZWFkZXIuaXNzdWVUeXBlLm5vX2RlZmVjdCIsZGVmYXVsdE1lc3NhZ2U6Ik5vIERlZmVjdCJ9KX0sYT17bmFtZTp7aGVhZGVyOm8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLnRlc3RDYXNlIixkZWZhdWx0TWVzc2FnZToiVGVzdCBjYXNlIn0pLG5hbWVLZXk6Im5hbWUifSxjb3VudDp7aGVhZGVyOm8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLmlzc3Vlc0luRXhlYyIsZGVmYXVsdE1lc3NhZ2U6Iklzc3VlcyBpbiBleGVjdXRpb24ifSksaGVhZGVyU2hvcnQ6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIuaXNzdWVzSW5FeGVjU2hvcnQiLGRlZmF1bHRNZXNzYWdlOiJJc3N1ZXMifSksY291bnRLZXk6ImNyaXRlcmlhIixtYXRyaXhLZXk6InN0YXR1cyIscmVuZGVyQXNCb29sOiEwfSxwZXJjZW50czp7aGVhZGVyOm8uY3JlYXRlRWxlbWVudChzLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJNb3N0RmFpbGVkVGVzdHMudGFibGUuaGVhZGVyLm9mSXNzdWVzIixkZWZhdWx0TWVzc2FnZToiJSBvZiBpc3N1ZXMifSksaGVhZGVyU2hvcnQ6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIub2ZJc3N1ZXNTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IiUgaXNzdWVzIn0pfSxkYXRlOntoZWFkZXI6by5jcmVhdGVFbGVtZW50KHMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6Ik1vc3RGYWlsZWRUZXN0cy50YWJsZS5oZWFkZXIubGFzdElzc3VlIixkZWZhdWx0TWVzc2FnZToiTGFzdCBpc3N1ZSJ9KSxkYXRlS2V5OiJzdGFydFRpbWUifX07dC5pc3N1ZVR5cGVzPWksdC5jb2x1bW5zPWE7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImlzc3VlVHlwZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvbW9zdEZhaWxlZFRlc3RzL21vc3RGYWlsZWRUZXN0c0NmZy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJjb2x1bW5zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL21vc3RGYWlsZWRUZXN0cy9tb3N0RmFpbGVkVGVzdHNDZmcuanN4IikpfSgpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9hbmFseXNpc0NvbmZpZ3VyYXRpb25zLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BbmFseXNpc0NvbmZpZ3VyYXRpb25zPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxwPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIiksZj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksbT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3V0aWxzLmpzIiksaD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbi5zY3NzIiksZz1yKGgpLGI9dS5kZWZhdWx0LmJpbmQoZy5kZWZhdWx0KSxFPXQuQW5hbHlzaXNDb25maWd1cmF0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD1lLmFjdGl2aXR5O3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChvLkZyYWdtZW50LG51bGwscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6YigidXNlci1uYW1lIil9LHQudXNlcikscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQW5hbHlzaXNDb25maWd1cmF0aW9ucy51cGRhdGUiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGVkIn0pLHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGQuZGVmYXVsdCx7dG86KDAsbS5nZXRQcm9qZWN0U2V0dGluZ1RhYlBhZ2VMaW5rKSh0LnByb2plY3ROYW1lLHAuQU5BTFlTSVMpLGNsYXNzTmFtZTpiKCJsaW5rIiksdGFyZ2V0OiJfYmxhbmsifSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBbmFseXNpc0NvbmZpZ3VyYXRpb25zLmFuYWx5c2lzQ29uZmlndXJhdGlvbnMiLGRlZmF1bHRNZXNzYWdlOiJBdXRvLUFuYWx5c2lzIGNvbmZpZ3VyYXRpb25zOiJ9KSksdC5hY3Rpb25UeXBlPT09Zi5HRU5FUkFURV9JTkRFWD9zLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBbmFseXNpc0NvbmZpZ3VyYXRpb25zLmdlbmVyYXRlSW5kZXgiLGRlZmF1bHRNZXNzYWdlOiJnZW5lcmF0ZSBpbmRleCJ9KTpzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBbmFseXNpc0NvbmZpZ3VyYXRpb25zLnJlbW92ZUluZGV4IixkZWZhdWx0TWVzc2FnZToicmVtb3ZlIGluZGV4In0pKX07RS5wcm9wVHlwZXM9e2FjdGl2aXR5OmEuZGVmYXVsdC5vYmplY3R9LEUuZGVmYXVsdFByb3BzPXthY3Rpdml0eTp7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsIkFuYWx5c2lzQ29uZmlndXJhdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYW5hbHlzaXNDb25maWd1cmF0aW9ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9hbmFseXNpc0NvbmZpZ3VyYXRpb25zLmpzeCIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYW5hbHlzaXNQcm9wZXJ0aWVzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQW5hbHlzaXNQcm9wZXJ0aWVzPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPXIodyksaz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLE49cihQKSxIPXtBbmFseXNpc1Byb3BlcnRpZXM6e2Rpc3BsYXlOYW1lOiJBbmFseXNpc1Byb3BlcnRpZXMifX0sRj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2FuYWx5c2lzUHJvcGVydGllcy5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxCPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYW5hbHlzaXNQcm9wZXJ0aWVzLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFU9TS5kZWZhdWx0LmJpbmQoTi5kZWZhdWx0KSxHPSgwLHguZGVmaW5lTWVzc2FnZXMpKHtpc0F1dG9BbmFseXplckVuYWJsZWQ6e2lkOiJVcGRhdGVBbmFseXNpc1NldHRpbmdzLmF1dG9BbmFseXplIixkZWZhdWx0TWVzc2FnZToic3dpdGNoIEF1dG8gQW5hbHlzaXMifSxudW1iZXJPZkxvZ0xpbmVzOntpZDoiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5udW1iZXJPZkxvZ0xpbmVzIixkZWZhdWx0TWVzc2FnZToiTnVtYmVyIG9mIGxvZyBsaW5lcyJ9LG1pbkRvY0ZyZXE6e2lkOiJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pbkRvY0ZyZXEiLGRlZmF1bHRNZXNzYWdlOiJNaW5pbXVtIGRvY3VtZW50IGZyZXF1ZW5jeSJ9LG1pblNob3VsZE1hdGNoOntpZDoiVXBkYXRlQW5hbHlzaXNTZXR0aW5ncy5taW5TaG91bGRNYXRjaCIsZGVmYXVsdE1lc3NhZ2U6Ik1pbmltdW0gc2hvdWxkIG1hdGNoIn0sbWluVGVybUZyZXE6e2lkOiJVcGRhdGVBbmFseXNpc1NldHRpbmdzLm1pblRlcm1GcmVxIixkZWZhdWx0TWVzc2FnZToiTWluaW11bSB0ZXJtIGZyZXF1ZW5jeSJ9LGF1dG9BbmFseXplck1vZGU6e2lkOiJVcGRhdGVBbmFseXNpc1NldHRpbmdzLmFuYWx5emVNb2RlIixkZWZhdWx0TWVzc2FnZToiQmFzZSBmb3IgQXV0byBBbmFseXNpcyJ9LGZyb206e2lkOiJBbmFseXNpc1Byb3BlcnRpZXMuZnJvbSIsZGVmYXVsdE1lc3NhZ2U6ImZyb20ifSx0bzp7aWQ6IkFuYWx5c2lzUHJvcGVydGllcy50byIsZGVmYXVsdE1lc3NhZ2U6InRvIn0sYWxsOntpZDoiQW5hbHlzaXNQcm9wZXJ0aWVzLmFsbCIsZGVmYXVsdE1lc3NhZ2U6IkFsbCJ9LG9uOntpZDoiQW5hbHlzaXNQcm9wZXJ0aWVzLm9uIixkZWZhdWx0TWVzc2FnZToiT04ifSxvZmY6e2lkOiJBbmFseXNpc1Byb3BlcnRpZXMub2ZmIixkZWZhdWx0TWVzc2FnZToiT0ZGIn19KSx6PXQuQW5hbHlzaXNQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRihCKHQsZSksZSl9fSgiQW5hbHlzaXNQcm9wZXJ0aWVzIikoKDAseC5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxfLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGguZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldEFjdGl2aXR5SGlzdG9yeT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0QWN0aXZpdHlIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnZhbHVlUmVwbGFjZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3ZhbHVlUmVwbGFjZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxoLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToiX192YWx1ZVJlcGxhY2VyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWx1ZVJlcGxhY2VyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRBY3Rpdml0eUhpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEFjdGl2aXR5SGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdHlIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRBY3Rpdml0eUhpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEFjdGl2aXR5SGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRy5mcm9tKSxyPXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEcudG8pLG89W107cmV0dXJuKDAsbC5kZWZhdWx0KShlLmhpc3RvcnkpLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoZS5oaXN0b3J5W3NdLm5ld1ZhbHVlJiZlLmhpc3Rvcnlbc10ub2xkVmFsdWUpe3ZhciBpPUdbc10/dC5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoR1tzXSk6IiIsYT10LnZhbHVlUmVwbGFjZXIoZS5oaXN0b3J5W3NdLm9sZFZhbHVlKXx8ZS5oaXN0b3J5W3NdLm9sZFZhbHVlLGw9dC52YWx1ZVJlcGxhY2VyKGUuaGlzdG9yeVtzXS5uZXdWYWx1ZSl8fGUuaGlzdG9yeVtzXS5uZXdWYWx1ZTtvLnB1c2goaSsiICIrbisiICIrYSsiICIrcisiICIrbCl9fSksby5qb2luKCIsICIpKyIuIn19LHtrZXk6Il9fdmFsdWVSZXBsYWNlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdmFsdWVSZXBsYWNlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdmFsdWVSZXBsYWNlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS50b1N0cmluZygpKXtjYXNlIi0xIjpyZXR1cm4gdGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRy5hbGwpO2Nhc2UidHJ1ZSI6cmV0dXJuIHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEcub24pO2Nhc2UiZmFsc2UiOnJldHVybiB0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShHLm9mZik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5hY3Rpdml0eTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQS5GcmFnbWVudCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlUoInVzZXItbmFtZSIpfSxlLnVzZXIpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHguRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MudXBkYXRlZCIsZGVmYXVsdE1lc3NhZ2U6InVwZGF0ZWQifSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5kZWZhdWx0LHtjbGFzc05hbWU6VSgibGluayIpLHRhcmdldDoiX2JsYW5rIix0bzooMCxJLmdldFByb2plY3RTZXR0aW5nVGFiUGFnZUxpbmspKGUucHJvamVjdE5hbWUsay5BTkFMWVNJUyl9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHguRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlVwZGF0ZUFuYWx5c2lzU2V0dGluZ3MuYW5hbHlzaXNQcm9wcyIsZGVmYXVsdE1lc3NhZ2U6IkF1dG8tQW5hbHlzaXMgcHJvcGVydGllczoifSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHRoaXMuZ2V0QWN0aXZpdHlIaXN0b3J5KGUpKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDp4LmludGxTaGFwZS5pc1JlcXVpcmVkLGFjdGl2aXR5OmouZGVmYXVsdC5vYmplY3R9LHMuZGVmYXVsdFByb3BzPXthY3Rpdml0eTp7fX0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJBbmFseXNpc1Byb3BlcnRpZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYW5hbHlzaXNQcm9wZXJ0aWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2FuYWx5c2lzUHJvcGVydGllcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9hbmFseXNpc1Byb3BlcnRpZXMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2J0cy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJ0cz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPXIodyksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIiksSD1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksRj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3V0aWxzLmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbi5zY3NzIiksVT1yKEIpLEc9e0J0czp7ZGlzcGxheU5hbWU6IkJ0cyJ9fSx6PSgwLHguZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYnRzLmpzeCIsY29tcG9uZW50czpHLGxvY2FsczpbZV0saW1wb3J0czpbUi5kZWZhdWx0XX0pLFY9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9idHMuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksVz1NLmRlZmF1bHQuYmluZChVLmRlZmF1bHQpLFk9KDAsay5kZWZpbmVNZXNzYWdlcykoKG89e30sKDAsdi5kZWZhdWx0KShvLEguQ1JFQVRFX0JUUyx7aWQ6IkV4dGVybmFsU3lzdGVtcy5jcmV0ZUJUcyIsZGVmYXVsdE1lc3NhZ2U6ImNvbmZpZ3VyZWQifSksKDAsdi5kZWZhdWx0KShvLEguVVBEQVRFX0JUUyx7aWQ6IkV4dGVybmFsU3lzdGVtcy51cGRhdGVCdHMiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGVkIn0pLCgwLHYuZGVmYXVsdCkobyxILkRFTEVURV9CVFMse2lkOiJFeHRlcm5hbFN5c3RlbXMuZGVsZXRlQnRzIixkZWZhdWx0TWVzc2FnZToicmVtb3ZlZCJ9KSwoMCx2LmRlZmF1bHQpKG8sInByb3BlcnRpZXMiLHtpZDoiRXh0ZXJuYWxTeXN0ZW1zLnByb3BlcnRpZXMiLGRlZmF1bHRNZXNzYWdlOiJwcm9wZXJ0aWVzIn0pLCgwLHYuZGVmYXVsdCkobywiZnJvbVByb2plY3QiLHtpZDoiRXh0ZXJuYWxTeXN0ZW1zLmZyb21Qcm9qZWN0IixkZWZhdWx0TWVzc2FnZToiZnJvbSBwcm9qZWN0In0pLG8pKSxxPXQuQnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geihWKHQsZSksZSl9fSgiQnRzIikoKDAsay5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmJ0c05hbWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2J0c05hbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19idHNOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19idHNOYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19idHNOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19idHNOYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19idHNOYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIjoiKSxuPSgwLHUuZGVmYXVsdCkodCwyKSxyPW5bMF0sbz1uWzFdO3JldHVybnt0eXBlOnIsbmFtZTpvJiYibnVsbCIhPT1vP286bnVsbH19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZpdHksbj1lLmludGwuZm9ybWF0TWVzc2FnZSxyPXRoaXMuYnRzTmFtZSh0LmRldGFpbHMub2JqZWN0TmFtZSksbz17dGFyZ2V0OiJfYmxhbmsiLHRvOigwLEYuZ2V0UHJvamVjdFNldHRpbmdUYWJQYWdlTGluaykodC5wcm9qZWN0TmFtZSxOLkJUUyksY2xhc3NOYW1lOlcoImxpbmsiKX07cmV0dXJuIFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMuRnJhZ21lbnQsbnVsbCxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpXKCJ1c2VyLW5hbWUiKX0sdC51c2VyKSwoWVt0LmFjdGlvblR5cGVdJiZuKFlbdC5hY3Rpb25UeXBlXSkpKyIgIityLnR5cGUsdC5hY3Rpb25UeXBlPT09SC5VUERBVEVfQlRTJiZSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLkZyYWdtZW50LG51bGwsIiAiK3IubmFtZSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLmRlZmF1bHQsbyxuKFkucHJvcGVydGllcyksIi4iKSksdC5hY3Rpb25UeXBlPT09SC5DUkVBVEVfQlRTJiZSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLmRlZmF1bHQsbyxyLm5hbWUsIi4iKSx0LmFjdGlvblR5cGU9PT1ILkRFTEVURV9CVFMmJlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMuRnJhZ21lbnQsbnVsbCxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLmRlZmF1bHQsbyxyLm5hbWUpLG4oWS5mcm9tUHJvamVjdCksIi4iKSl9fV0pLHR9KFMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDprLmludGxTaGFwZS5pc1JlcXVpcmVkLGFjdGl2aXR5OkQuZGVmYXVsdC5vYmplY3R9LGkuZGVmYXVsdFByb3BzPXthY3Rpdml0eTp7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihxLCJCdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYnRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2J0cy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9idHMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InVzZXItbmFtZSI6ImNvbW1vbl9fdXNlci1uYW1lX19fMWJlYXAiLGxpbms6ImNvbW1vbl9fbGlua19fXzE1aW10IiwibmV3LXVzZXItbmFtZSI6ImNvbW1vbl9fbmV3LXVzZXItbmFtZV9fXzZJSHFKIiwiYWN0aXZpdHktbmFtZSI6ImNvbW1vbl9fYWN0aXZpdHktbmFtZV9fXzNMRFZvIn19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbkVudGl0eS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNvbW1vbkVudGl0eT12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWN0aW9uVHlwZXMuanMiKSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvY29tbW9uLnNjc3MiKSxJPXIoayksUD17Q29tbW9uRW50aXR5OntkaXNwbGF5TmFtZToiQ29tbW9uRW50aXR5In19LE49KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb25FbnRpdHkuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksSD0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbkVudGl0eS5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxGPUQuZGVmYXVsdC5iaW5kKEkuZGVmYXVsdCksQj0oMCx3LmRlZmluZU1lc3NhZ2VzKSgobz17fSwoMCxFLmRlZmF1bHQpKG8sTS5DUkVBVEVfREFTSEJPQVJELHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5jcmVhdGUiLGRlZmF1bHRNZXNzYWdlOiJjcmVhdGVkIGRhc2hib2FyZCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5VUERBVEVfREFTSEJPQVJELHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy51cGRhdGVEYXNoYm9hcmQiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGVkIGRhc2hib2FyZCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5ERUxFVEVfREFTSEJPQVJELHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5kZWxldGVEYXNoYm9hcmQiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGVkIGRhc2hib2FyZCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5DUkVBVEVfV0lER0VULHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5jcmVhdGVXaWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJjcmVhdGVkIHdpZGdldCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5VUERBVEVfV0lER0VULHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy51cGRhdGVXaWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGVkIHdpZGdldCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5ERUxFVEVfV0lER0VULHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5kZWxldGVXaWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGVkIHdpZGdldCJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5DUkVBVEVfRklMVEVSLHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5jcmVhdGVGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJjcmVhdGVkIGZpbHRlciJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5VUERBVEVfRklMVEVSLHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy51cGRhdGVGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJ1cGRhdGVkIGZpbHRlciJ9KSwoMCxFLmRlZmF1bHQpKG8sTS5ERUxFVEVfRklMVEVSLHtpZDoiQ29tbW9uRW50aXR5Q2hhbmdlcy5kZWxldGVGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJkZWxldGVkIGZpbHRlciJ9KSxvKSksVT10LkNvbW1vbkVudGl0eT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE4oSCh0LGUpLGUpfX0oIkNvbW1vbkVudGl0eSIpKCgwLHcuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17dGVzdEl0ZW06bnVsbH0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZpdHksbj1lLmludGw7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuRnJhZ21lbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpGKCJ1c2VyLW5hbWUiKX0sdC51c2VyKSxCW3QuYWN0aW9uVHlwZV0mJm4uZm9ybWF0TWVzc2FnZShCW3QuYWN0aW9uVHlwZV0pLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOkYoImFjdGl2aXR5LW5hbWUiKX0sIiAiLHQuZGV0YWlscy5vYmplY3ROYW1lLCIuIikpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCxhY3Rpdml0eTp4LmRlZmF1bHQub2JqZWN0fSxpLmRlZmF1bHRQcm9wcz17YWN0aXZpdHk6e319LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiQ29tbW9uRW50aXR5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NvbW1vbkVudGl0eS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb25FbnRpdHkuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvY29tbW9uRW50aXR5LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jcmVhdGVVc2VyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DcmVhdGVVc2VyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLF89cihkKSxwPXUuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj10LkNyZWF0ZVVzZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hY3Rpdml0eTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJjcmVhdGUtdXNlciIsImNsZWFyZml4Iil9LHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnAoIm5ldy11c2VyLW5hbWUiKX0sdC5kZXRhaWxzLm9iamVjdE5hbWUsIiwgIikscy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ3JlYXRlVXNlci53ZWxjb21lIixkZWZhdWx0TWVzc2FnZToid2VsY29tZSB0byBSZXBvcnQgUG9ydGFsISJ9KSl9O2YucHJvcFR5cGVzPXthY3Rpdml0eTphLmRlZmF1bHQub2JqZWN0fSxmLmRlZmF1bHRQcm9wcz17YWN0aXZpdHk6e319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJDcmVhdGVVc2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2NyZWF0ZVVzZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvY3JlYXRlVXNlci5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2RlZmF1bHRQcm9qZWN0U2V0dGluZ3MuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWZhdWx0UHJvamVjdFNldHRpbmdzPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxNPXIodyksaz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLFA9cihJKSxOPXtEZWZhdWx0UHJvamVjdFNldHRpbmdzOntkaXNwbGF5TmFtZToiRGVmYXVsdFByb2plY3RTZXR0aW5ncyJ9fSxIPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmYXVsdFByb2plY3RTZXR0aW5ncy5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxGPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmYXVsdFByb2plY3RTZXR0aW5ncy5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxCPUQuZGVmYXVsdC5iaW5kKFAuZGVmYXVsdCksVT0oMCx4LmRlZmluZU1lc3NhZ2VzKSh7a2VlcExvZ3M6e2lkOiJEZWZhdWx0UHJvamVjdFNldHRpbmdzLmtlZXBMb2dzIixkZWZhdWx0TWVzc2FnZToiS2VlcCBsb2dzIn0sa2VlcFNjcmVlbnNob3RzOntpZDoiRGVmYXVsdFByb2plY3RTZXR0aW5ncy5rZWVwQXR0YWNobWVudHMiLGRlZmF1bHRNZXNzYWdlOiJLZWVwIGF0dGFjaG1lbnRzIn0sbGF1bmNoSW5hY3Rpdml0eTp7aWQ6IkRlZmF1bHRQcm9qZWN0U2V0dGluZ3MubGF1bmNoSW5hY3Rpdml0eSIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaCBpbmFjdGl2aXR5IHRpbWVvdXQifSxmcm9tOntpZDoiRGVmYXVsdFByb2plY3RTZXR0aW5ncy5mcm9tIixkZWZhdWx0TWVzc2FnZToiZnJvbSJ9LHRvOntpZDoiRGVmYXVsdFByb2plY3RTZXR0aW5ncy50byIsZGVmYXVsdE1lc3NhZ2U6InRvIn19KSxHPXQuRGVmYXVsdFByb2plY3RTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEgoRih0LGUpLGUpfX0oIkRlZmF1bHRQcm9qZWN0U2V0dGluZ3MiKSgoMCx4LmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0QWN0aXZpdHlIaXN0b3J5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRBY3Rpdml0eUhpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0UHJvamVjdFNldHRpbmdzTGluaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0UHJvamVjdFNldHRpbmdzTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGguZGVmYXVsdCkocixvKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJfX2dldFByb2plY3RTZXR0aW5nc0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFByb2plY3RTZXR0aW5nc0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEFjdGl2aXR5SGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QWN0aXZpdHlIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRBY3Rpdml0eUhpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEFjdGl2aXR5SGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdHlIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShVLmZyb20pLHI9dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoVS50byksbz1bXTtyZXR1cm4oMCxsLmRlZmF1bHQpKGUuaGlzdG9yeSkuZm9yRWFjaChmdW5jdGlvbihzKXtpZihlLmhpc3Rvcnlbc10ubmV3VmFsdWUmJmUuaGlzdG9yeVtzXS5vbGRWYWx1ZSl7dmFyIGk9VVtzXT90LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShVW3NdKToiIixhPWUuaGlzdG9yeVtzXS5vbGRWYWx1ZSxsPWUuaGlzdG9yeVtzXS5uZXdWYWx1ZTtvLnB1c2goaSsiICIrbisiICIrYSsiICIrcisiICIrbCl9fSksby5qb2luKCIsICIpKyIuIn19LHtrZXk6Il9fZ2V0UHJvamVjdFNldHRpbmdzTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0UHJvamVjdFNldHRpbmdzTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0UHJvamVjdFNldHRpbmdzTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57dHlwZTprLlBST0pFQ1RfU0VUVElOR1NfUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6ZX19fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuYWN0aXZpdHk7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuRnJhZ21lbnQsbnVsbCxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpCKCJ1c2VyLW5hbWUiKX0sZS51c2VyKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJQcm9qZWN0QWN0aXZpdHkudXBkYXRlUHJvamVjdCIsZGVmYXVsdE1lc3NhZ2U6InVwZGF0ZWQifSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5kZWZhdWx0LHt0bzp0aGlzLmdldFByb2plY3RTZXR0aW5nc0xpbmsoZS5wcm9qZWN0TmFtZSksY2xhc3NOYW1lOkIoImxpbmsiKSx0YXJnZXQ6Il9ibGFuayJ9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHguRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlByb2plY3RBY3Rpdml0eS5wcm9qZWN0UHJvcHMiLGRlZmF1bHRNZXNzYWdlOiJwcm9wZXJ0aWVzIG9mIHByb2plY3Q6In0pKSx0aGlzLmdldEFjdGl2aXR5SGlzdG9yeShlKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDp4LmludGxTaGFwZS5pc1JlcXVpcmVkLGFjdGl2aXR5OmouZGVmYXVsdC5vYmplY3R9LHMuZGVmYXVsdFByb3BzPXthY3Rpdml0eTp7fX0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJEZWZhdWx0UHJvamVjdFNldHRpbmdzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2RlZmF1bHRQcm9qZWN0U2V0dGluZ3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmYXVsdFByb2plY3RTZXR0aW5ncy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9kZWZhdWx0UHJvamVjdFNldHRpbmdzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9kZWZlY3RUeXBlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGVmZWN0VHlwZT12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLFA9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLE49bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpLEg9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLEY9cihIKSxCPXtEZWZlY3RUeXBlOntkaXNwbGF5TmFtZToiRGVmZWN0VHlwZSJ9fSxVPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmZWN0VHlwZS5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxHPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmZWN0VHlwZS5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSx6PXcuZGVmYXVsdC5iaW5kKEYuZGVmYXVsdCksVj0oMCxMLmRlZmluZU1lc3NhZ2VzKSgobz17fSwoMCxFLmRlZmF1bHQpKG8sUC5ERUxFVEVfREVGRUNULHtpZDoiRGVmZWN0VHlwZUNoYW5nZXMuZGVsZXRlIixkZWZhdWx0TWVzc2FnZToiZGVsZXRlZCBkZWZlY3QgdHlwZSJ9KSwoMCxFLmRlZmF1bHQpKG8sUC5VUERBVEVfREVGRUNULHtpZDoiRGVmZWN0VHlwZUNoYW5nZXMudXBkYXRlIixkZWZhdWx0TWVzc2FnZToidXBkYXRlZCJ9KSwoMCxFLmRlZmF1bHQpKG8sImRlZmVjdFR5cGVzIix7aWQ6IkRlZmVjdFR5cGVDaGFuZ2VzLmRlZmVjdFR5cGVzIixkZWZhdWx0TWVzc2FnZToiZGVmZWN0IHR5cGVzIn0pLG8pKSxXPXQuRGVmZWN0VHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoRyh0LGUpLGUpfX0oIkRlZmVjdFR5cGUiKSgoMCxMLmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e3Rlc3RJdGVtOm51bGx9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2aXR5LG49ZS5pbnRsO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLkZyYWdtZW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6eigidXNlci1uYW1lIil9LHQudXNlciksVlt0LmFjdGlvblR5cGVdJiZuLmZvcm1hdE1lc3NhZ2UoVlt0LmFjdGlvblR5cGVdKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLmRlZmF1bHQse3RvOigwLE4uZ2V0UHJvamVjdFNldHRpbmdUYWJQYWdlTGluaykodC5wcm9qZWN0TmFtZSxJLkRFRkVDVCksY2xhc3NOYW1lOnooImxpbmsiKSx0YXJnZXQ6Il9ibGFuayJ9LHQuYWN0aW9uVHlwZT09PVAuREVMRVRFX0RFRkVDVD90LmRldGFpbHMub2JqZWN0TmFtZTpuLmZvcm1hdE1lc3NhZ2UoVi5kZWZlY3RUeXBlcykpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOkwuaW50bFNoYXBlLmlzUmVxdWlyZWQsYWN0aXZpdHk6eC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2FjdGl2aXR5Ont9fSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIkRlZmVjdFR5cGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvZGVmZWN0VHlwZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9kZWZlY3RUeXBlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2RlZmVjdFR5cGUuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2xhdW5jaC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLE49bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLEg9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpLEY9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLEI9cihGKSxVPXtMYXVuY2g6e2Rpc3BsYXlOYW1lOiJMYXVuY2gifX0sRz0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2xhdW5jaC5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSx6PSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvbGF1bmNoLmpzeCIsY29tcG9uZW50czpVLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLFY9dy5kZWZhdWx0LmJpbmQoQi5kZWZhdWx0KSxXPSgwLEwuZGVmaW5lTWVzc2FnZXMpKChvPXt9LCgwLEUuZGVmYXVsdCkobyxOLlNUQVJUX0xBVU5DSCx7aWQ6IkxhdW5jaENoYW5nZXMuc3RhcnQiLGRlZmF1bHRNZXNzYWdlOiJzdGFydGVkIn0pLCgwLEUuZGVmYXVsdCkobyxOLkZJTklTSF9MQVVOQ0gse2lkOiJMYXVuY2hDaGFuZ2VzLmZpbmlzaCIsZGVmYXVsdE1lc3NhZ2U6ImZpbmlzaGVkIn0pLCgwLEUuZGVmYXVsdCkobyxOLkRFTEVURV9MQVVOQ0gse2lkOiJMYXVuY2hDaGFuZ2VzLmRlbGV0ZSIsZGVmYXVsdE1lc3NhZ2U6ImRlbGV0ZWQifSksKDAsRS5kZWZhdWx0KShvLE4uU1RBUlRfSU1QT1JULHtpZDoiTGF1bmNoQ2hhbmdlcy5zdGFydEltcG9ydCIsZGVmYXVsdE1lc3NhZ2U6InN0YXJ0ZWQgaW1wb3J0In0pLCgwLEUuZGVmYXVsdCkobyxOLkZJTklTSF9JTVBPUlQse2lkOiJMYXVuY2hDaGFuZ2VzLmZpbmlzaEltcG9ydCIsZGVmYXVsdE1lc3NhZ2U6ImZpbmlzaGVkIGltcG9ydCJ9KSwoMCxFLmRlZmF1bHQpKG8sImxhdW5jaCIse2lkOiJMYXVuY2hDaGFuZ2VzLmxhdW5jaCIsZGVmYXVsdE1lc3NhZ2U6ImxhdW5jaCJ9KSxvKSksWT10LkxhdW5jaD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoeih0LGUpLGUpfX0oIkxhdW5jaCIpKCgwLEwuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRMYXVuY2hlc1BhZ2VMaW5rPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRMYXVuY2hlc1BhZ2VMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0TGF1bmNoZXNQYWdlTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0TGF1bmNoZXNQYWdlTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TGF1bmNoZXNQYWdlTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0TGF1bmNoZXNQYWdlTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TGF1bmNoZXNQYWdlTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57dHlwZTpJLlBST0pFQ1RfTEFVTkNIRVNfUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6ZSxmaWx0ZXJJZDpQLkFMTH19fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2aXR5LG49ZS5pbnRsLmZvcm1hdE1lc3NhZ2U7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuRnJhZ21lbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpWKCJ1c2VyLW5hbWUiKX0sdC51c2VyKSwiIisoV1t0LmFjdGlvblR5cGVdJiZuKFdbdC5hY3Rpb25UeXBlXSkpLHQuYWN0aW9uVHlwZT09PU4uREVMRVRFX0xBVU5DSCYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5GcmFnbWVudCxudWxsLCIgIituKFcubGF1bmNoKSsiICIsdC5kZXRhaWxzLm9iamVjdE5hbWUsIi4iKSwodC5hY3Rpb25UeXBlPT09Ti5TVEFSVF9MQVVOQ0h8fHQuYWN0aW9uVHlwZT09PU4uRklOSVNIX0xBVU5DSCkmJk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuRnJhZ21lbnQsbnVsbCwiICIrbihXLmxhdW5jaCksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LHt0bzooMCxILmdldFRlc3RJdGVtUGFnZUxpbmspKHQucHJvamVjdE5hbWUsdC5sb2dnZWRPYmplY3RJZCksY2xhc3NOYW1lOlYoImxpbmsiKSx0YXJnZXQ6Il9ibGFuayJ9LHQuZGV0YWlscy5vYmplY3ROYW1lLCIuIikpLCh0LmFjdGlvblR5cGU9PT1OLlNUQVJUX0lNUE9SVHx8dC5hY3Rpb25UeXBlPT09Ti5GSU5JU0hfSU1QT1JUKSYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LHt0bzp0aGlzLmdldExhdW5jaGVzUGFnZUxpbmsodC5wcm9qZWN0TmFtZSksY2xhc3NOYW1lOlYoImxpbmsiKSx0YXJnZXQ6Il9ibGFuayJ9LHQuZGV0YWlscy5vYmplY3ROYW1lLCIuIikpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxhY3Rpdml0eTp4LmRlZmF1bHQub2JqZWN0fSxpLmRlZmF1bHRQcm9wcz17YWN0aXZpdHk6e319LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiTGF1bmNoIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2xhdW5jaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9sYXVuY2guanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvbGF1bmNoLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9ub3RpZmljYXRpb25zLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTm90aWZpY2F0aW9ucz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3NldHRpbmdzVGFicy5qcyIpLFA9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLE49bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpLEg9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLEY9cihIKSxCPXtOb3RpZmljYXRpb25zOntkaXNwbGF5TmFtZToiTm90aWZpY2F0aW9ucyJ9fSxVPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvbm90aWZpY2F0aW9ucy5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxHPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvbm90aWZpY2F0aW9ucy5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSx6PXcuZGVmYXVsdC5iaW5kKEYuZGVmYXVsdCksVj0oMCxMLmRlZmluZU1lc3NhZ2VzKSgobz17bm90aWZpY2F0aW9uczp7aWQ6Ik5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucyIsZGVmYXVsdE1lc3NhZ2U6IkUtbWFpbCBub3RpZmljYXRpb25zIn19LCgwLEUuZGVmYXVsdCkobyxQLlVQREFURV9OT1RJRklDQVRJT05TLHtpZDoiTm90aWZpY2F0aW9ucy51cGRhdGVFbWFpbCIsZGVmYXVsdE1lc3NhZ2U6InVwZGF0ZWQifSksKDAsRS5kZWZhdWx0KShvLFAuU1dJVENIX09OX05PVElGSUNBVElPTlMse2lkOiJOb3RpZmljYXRpb25zLm9uRW1haWwiLGRlZmF1bHRNZXNzYWdlOiJjb25maWd1cmVkIn0pLCgwLEUuZGVmYXVsdCkobyxQLlNXSVRDSF9PRkZfTk9USUZJQ0FUSU9OUyx7aWQ6Ik5vdGlmaWNhdGlvbnMub2ZmRW1haWwiLGRlZmF1bHRNZXNzYWdlOiJzd2l0Y2hlZCBvZmYifSksbykpLFc9dC5Ob3RpZmljYXRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiTm90aWZpY2F0aW9ucyIpKCgwLEwuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2aXR5LG49ZS5pbnRsO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLkZyYWdtZW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6eigidXNlci1uYW1lIil9LHQudXNlciksVlt0LmFjdGlvblR5cGVdJiZuLmZvcm1hdE1lc3NhZ2UoVlt0LmFjdGlvblR5cGVdKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLmRlZmF1bHQse3RvOigwLE4uZ2V0UHJvamVjdFNldHRpbmdUYWJQYWdlTGluaykodC5wcm9qZWN0TmFtZSxJLk5PVElGSUNBVElPTlMpLGNsYXNzTmFtZTp6KCJsaW5rIiksdGFyZ2V0OiJfYmxhbmsifSxuLmZvcm1hdE1lc3NhZ2UoVi5ub3RpZmljYXRpb25zKSwiLiIpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOkwuaW50bFNoYXBlLmlzUmVxdWlyZWQsYWN0aXZpdHk6eC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2FjdGl2aXR5Ont9fSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIk5vdGlmaWNhdGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvbm90aWZpY2F0aW9ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9ub3RpZmljYXRpb25zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL25vdGlmaWNhdGlvbnMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3Rlc3RJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGVzdEl0ZW09dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLE09cih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksUD1yKEkpLE49bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxIPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpLFU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb24uc2NzcyIpLEc9cihVKSx6PXtUZXN0SXRlbTp7ZGlzcGxheU5hbWU6IlRlc3RJdGVtIn19LFY9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy90ZXN0SXRlbS5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W1IuZGVmYXVsdF19KSxXPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvdGVzdEl0ZW0uanN4Iixjb21wb25lbnRzOnosbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksWT1NLmRlZmF1bHQuYmluZChHLmRlZmF1bHQpLHE9KDAsay5kZWZpbmVNZXNzYWdlcykoKG89e30sKDAsdi5kZWZhdWx0KShvLEYuTElOS19JU1NVRSx7aWQ6IlRlc3RJdGVtQ2hhbmdlcy5saW5rSXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJsaW5rZWQgaXNzdWUifSksKDAsdi5kZWZhdWx0KShvLEYuVU5MSU5LX0lTU1VFLHtpZDoiVGVzdEl0ZW1DaGFuZ2VzLnVubGlua0lzc3VlIixkZWZhdWx0TWVzc2FnZToidW5saW5rZWQgaXNzdWUifSksKDAsdi5kZWZhdWx0KShvLEYuUE9TVF9JU1NVRSx7aWQ6IlRlc3RJdGVtQ2hhbmdlcy5wb3N0SXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJwb3N0ZWQgaXNzdWUifSksKDAsdi5kZWZhdWx0KShvLCJmcm9tSXRlbSIse2lkOiJUZXN0SXRlbUNoYW5nZXMuZnJvbUl0ZW0iLGRlZmF1bHRNZXNzYWdlOiJmcm9tIHRlc3QgaXRlbSJ9KSwoMCx2LmRlZmF1bHQpKG8sInRvSXRlbSIse2lkOiJUZXN0SXRlbUNoYW5nZXMudG9JdGVtIixkZWZhdWx0TWVzc2FnZToidG8gdGVzdCBpdGVtIn0pLG8pKSxLPXQuVGVzdEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBWKFcodCxlKSxlKX19KCJUZXN0SXRlbSIpKCgwLGsuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17dGVzdEl0ZW06bnVsbH0sci5nZXRUaWNrZXRVcmxJZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0VGlja2V0VXJsSWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0VGlja2V0cz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0VGlja2V0c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX2dldFRpY2tldHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFRpY2tldHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFRpY2tldFVybElkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRUaWNrZXRVcmxJZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7KDAsSC5mZXRjaCkoTi5VUkxTLnRlc3RJdGVtKHRoaXMucHJvcHMuYWN0aXZpdHkucHJvamVjdE5hbWUsdGhpcy5wcm9wcy5hY3Rpdml0eS5sb2dnZWRPYmplY3RJZCkse21ldGhvZDoiZ2V0In0pLnRoZW4oZnVuY3Rpb24odCl7ZS5zZXRTdGF0ZSh7dGVzdEl0ZW06dH0pfSl9fSx7a2V5OiJfX2dldFRpY2tldFVybElkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRUaWNrZXRVcmxJZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0VGlja2V0VXJsSWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWFyY2goLyhodHRwfGh0dHBzKTpcL1wvW2EtejAtOVwtX10rKFwuW2EtejAtOVwtX10rKSsoW2EtejAtOVwtLixAP149JSY7OlwvfisjXSpbYS16MC05XC1AP149JSY7XC9+KyNdKT8vaSksbj17aWQ6ZSx1cmw6bnVsbH07cmV0dXJuIHQ+PTAmJihuPXtpZDplLnNsaWNlKDAsdC0xKSx1cmw6ZS5zbGljZSh0KX0pLG59fSx7a2V5OiJfX2dldFRpY2tldHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFRpY2tldHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFRpY2tldHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50aWNrZXRJZCRuZXdWYWx1ZT9lLnRpY2tldElkJG5ld1ZhbHVlLnNwbGl0KCIsIikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W10sbj1lLnRpY2tldElkJG9sZFZhbHVlP2UudGlja2V0SWQkb2xkVmFsdWUuc3BsaXQoIiwiKTpbXTtyZXR1cm4gZS5hY3Rpb25UeXBlPT09W0YuVU5MSU5LX0lTU1VFXT8oMCxILmFycmF5RGlmZmVyKShuLHQpOigwLEguYXJyYXlEaWZmZXIpKHQsbil9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmFjdGl2aXR5LHI9dC5pbnRsLG89dGhpcy5zdGF0ZS50ZXN0SXRlbSYmdGhpcy5zdGF0ZS50ZXN0SXRlbS5sYXVuY2hJZCsiLyIrKDAsdS5kZWZhdWx0KSh0aGlzLnN0YXRlLnRlc3RJdGVtLnBhdGhfbmFtZXMpLmpvaW4oIi8iKSsiLyIrbi5sb2dnZWRPYmplY3RJZDtyZXR1cm4gUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUy5GcmFnbWVudCxudWxsLFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlkoInVzZXItbmFtZSIpfSxuLnVzZXIpLHFbbi5hY3Rpb25UeXBlXSYmci5mb3JtYXRNZXNzYWdlKHFbbi5hY3Rpb25UeXBlXSksdGhpcy5nZXRUaWNrZXRzKG4pLm1hcChmdW5jdGlvbih0LG4scil7dmFyIG89ZS5nZXRUaWNrZXRVcmxJZCh0KSxzPXIubGVuZ3RoPjEmJm48ci5sZW5ndGgtMT8iLCI6IiI7cmV0dXJuIFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7dGFyZ2V0OiJfYmxhbmsiLGNsYXNzTmFtZTpZKCJsaW5rIiksaHJlZjpvLnVybCxrZXk6IiIrKG4rMSl9LG8uaWQscyl9KSwiICIsbi5hY3Rpb25UeXBlPT09W0YuVU5MSU5LX0lTU1VFXT9yLmZvcm1hdE1lc3NhZ2UocS5mcm9tSXRlbSk6ci5mb3JtYXRNZXNzYWdlKHEudG9JdGVtKSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLmRlZmF1bHQse3RvOigwLEIuZ2V0VGVzdEl0ZW1QYWdlTGluaykobi5wcm9qZWN0TmFtZSxvKSxjbGFzc05hbWU6WSgibGluayIpLHRhcmdldDoiX2JsYW5rIn0sbi5kZXRhaWxzLm9iamVjdE5hbWUpKX19XSksdH0oUy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOmsuaW50bFNoYXBlLmlzUmVxdWlyZWQsYWN0aXZpdHk6RC5kZWZhdWx0Lm9iamVjdH0saS5kZWZhdWx0UHJvcHM9e2FjdGl2aXR5Ont9fSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIlRlc3RJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3Rlc3RJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3Rlc3RJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3Rlc3RJdGVtLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRUZXN0SXRlbVBhZ2VMaW5rPXQuZ2V0UHJvamVjdFNldHRpbmdUYWJQYWdlTGluaz12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcmVzZXJ2ZWRGaWx0ZXJJZHMuanMiKSxzPXQuZ2V0UHJvamVjdFNldHRpbmdUYWJQYWdlTGluaz1mdW5jdGlvbihlLHQpe3JldHVybnt0eXBlOnIuUFJPSkVDVF9TRVRUSU5HU19UQUJfUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6ZSxzZXR0aW5nc1RhYjp0fX19LGk9dC5nZXRUZXN0SXRlbVBhZ2VMaW5rPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5URVNUX0lURU1fUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6ZSxmaWx0ZXJJZDpvLkFMTCx0ZXN0SXRlbUlkczp0fX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJnZXRQcm9qZWN0U2V0dGluZ1RhYlBhZ2VMaW5rIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiZ2V0VGVzdEl0ZW1QYWdlTGluayIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy91dGlscy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByb2plY3RBY3Rpdml0eT12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIpO3QuUHJvamVjdEFjdGl2aXR5PXIuUHJvamVjdEFjdGl2aXR5fSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUHJvamVjdEFjdGl2aXR5PXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksaz1yKE0pLEk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFA9cihJKSxOPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9hY3Rpb25UeXBlcy5qcyIpLFU9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxHPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksej1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2RlZmF1bHRQcm9qZWN0U2V0dGluZ3MuanN4IiksVz1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2FuYWx5c2lzUHJvcGVydGllcy5qc3giKSxZPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYW5hbHlzaXNDb25maWd1cmF0aW9ucy5qc3giKSxxPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L2FjdGl2aXRpZXMvYnRzLmpzeCIpLEs9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9sYXVuY2guanN4IiksWD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL3Rlc3RJdGVtLmpzeCIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jcmVhdGVVc2VyLmpzeCIpLFE9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvYWN0aXZpdGllcy9jb21tb25FbnRpdHkuanN4IiksSj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL2RlZmVjdFR5cGUuanN4IiksWj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3Byb2plY3RBY3Rpdml0eS9hY3Rpdml0aWVzL25vdGlmaWNhdGlvbnMuanN4IiksZWU9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LnNjc3MiKSx0ZT1yKGVlKSxuZT17UHJvamVjdEFjdGl2aXR5OntkaXNwbGF5TmFtZToiUHJvamVjdEFjdGl2aXR5In19LHJlPSgwLEQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L3Byb2plY3RBY3Rpdml0eS5qc3giLGNvbXBvbmVudHM6bmUsbG9jYWxzOltlXSxpbXBvcnRzOlt4LmRlZmF1bHRdfSksb2U9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIsY29tcG9uZW50czpuZSxsb2NhbHM6W10saW1wb3J0czpbeC5kZWZhdWx0LE8uZGVmYXVsdF19KSxzZT1rLmRlZmF1bHQuYmluZCh0ZS5kZWZhdWx0KSxpZT0oMCxOLmRlZmluZU1lc3NhZ2VzKSh7amFudWFyeTp7aWQ6IlByb2plY3RBY3Rpdml0eS5qYW51YXJ5IixkZWZhdWx0TWVzc2FnZToiSmFudWFyeSJ9LGZlYnJ1YXJ5OntpZDoiUHJvamVjdEFjdGl2aXR5LmZlYnJ1YXJ5IixkZWZhdWx0TWVzc2FnZToiRmVicnVhcnkifSxtYXJjaDp7aWQ6IlByb2plY3RBY3Rpdml0eS5tYXJjaCIsZGVmYXVsdE1lc3NhZ2U6Ik1hcmNoIn0sYXByaWw6e2lkOiJQcm9qZWN0QWN0aXZpdHkuYXByaWwiLGRlZmF1bHRNZXNzYWdlOiJBcHJpbCJ9LG1heTp7aWQ6IlByb2plY3RBY3Rpdml0eS5tYXkiLGRlZmF1bHRNZXNzYWdlOiJNYXkifSxqdW5lOntpZDoiUHJvamVjdEFjdGl2aXR5Lmp1bmUiLGRlZmF1bHRNZXNzYWdlOiJKdW5lIn0sanVseTp7aWQ6IlByb2plY3RBY3Rpdml0eS5qdWx5IixkZWZhdWx0TWVzc2FnZToiSnVseSJ9LGF1Z3VzdDp7aWQ6IlByb2plY3RBY3Rpdml0eS5hdWd1c3QiLGRlZmF1bHRNZXNzYWdlOiJBdWd1c3QifSxzZXB0ZW1iZXI6e2lkOiJQcm9qZWN0QWN0aXZpdHkuc2VwdGVtYmVyIixkZWZhdWx0TWVzc2FnZToiU2VwdGVtYmVyIn0sb2N0b2Jlcjp7aWQ6IlByb2plY3RBY3Rpdml0eS5vY3RvYmVyIixkZWZhdWx0TWVzc2FnZToiT2N0b2JlciJ9LG5vdmVtYmVyOntpZDoiUHJvamVjdEFjdGl2aXR5Lm5vdmVtYmVyIixkZWZhdWx0TWVzc2FnZToiTm92ZW1iZXIifSxkZWNlbWJlcjp7aWQ6IlByb2plY3RBY3Rpdml0eS5kZWNlbWJlciIsZGVmYXVsdE1lc3NhZ2U6IkRlY2VtYmVyIn0sdG9kYXk6e2lkOiJQcm9qZWN0QWN0aXZpdHkudG9kYXkiLGRlZmF1bHRNZXNzYWdlOiJUb2RheSJ9LHllc3RlcmRheTp7aWQ6IlByb2plY3RBY3Rpdml0eS55ZXN0ZXJkYXkiLGRlZmF1bHRNZXNzYWdlOiJZZXN0ZXJkYXkifSxtb25kYXk6e2lkOiJQcm9qZWN0QWN0aXZpdHkubW9uZGF5IixkZWZhdWx0TWVzc2FnZToiTW9uZGF5In0sdHVlc2RheTp7aWQ6IlByb2plY3RBY3Rpdml0eS50dWVzZGF5IixkZWZhdWx0TWVzc2FnZToiVHVlc2RheSJ9LHdlZG5lc2RheTp7aWQ6IlByb2plY3RBY3Rpdml0eS53ZWRuZXNkYXkiLGRlZmF1bHRNZXNzYWdlOiJXZWRuZXNkYXkifSx0aHVyc2RheTp7aWQ6IlByb2plY3RBY3Rpdml0eS50aHVyc2RheSIsZGVmYXVsdE1lc3NhZ2U6IlRodXJzZGF5In0sZnJpZGF5OntpZDoiUHJvamVjdEFjdGl2aXR5LmZyaWRheSIsZGVmYXVsdE1lc3NhZ2U6IkZyaWRheSJ9LHNhdHVyZGF5OntpZDoiUHJvamVjdEFjdGl2aXR5LnNhdHVyZGF5IixkZWZhdWx0TWVzc2FnZToiU2F0dXJkYXkifSxzdW5kYXk6e2lkOiJQcm9qZWN0QWN0aXZpdHkuc3VuZGF5IixkZWZhdWx0TWVzc2FnZToiU3VuZGF5In19KSxhZT1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl0sbGU9WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHVlPXQuUHJvamVjdEFjdGl2aXR5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcmUob2UodCxlKSxlKX19KCJQcm9qZWN0QWN0aXZpdHkiKSgobz0oMCx3LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntoYXNCdHM6KDAsei5leHRlcm5hbFN5c3RlbVNlbGVjdG9yKShlKS5sZW5ndGg+MH19KSkocz0oMCxOLmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGcuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsdi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxtLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0QWN0aXZpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREYXlLZXk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldERheUtleV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREYXRlVGl0bGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldERhdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRVc2VyQXZhdGFyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRVc2VyQXZhdGFyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnVwZGF0ZVByb2plY3RWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudXBkYXRlQW5hbHl6ZXJPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX191cGRhdGVBbmFseXplck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaXNWYWxpZEFjdGl2aXR5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc1ZhbGlkQWN0aXZpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2VsZWN0QWN0aXZpdGllc0NvbXBvbmVudD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2VsZWN0QWN0aXZpdGllc0NvbXBvbmVudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXJEYXRlQWN0aXZpdHk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlckRhdGVBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHYuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxBLmRlZmF1bHQpKHQsZSksKDAsRS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlckRhdGVBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyRGF0ZUFjdGl2aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZWxlY3RBY3Rpdml0aWVzQ29tcG9uZW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZWxlY3RBY3Rpdml0aWVzQ29tcG9uZW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc1ZhbGlkQWN0aXZpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzVmFsaWRBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlQW5hbHl6ZXJPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVBbmFseXplck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERhdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGF0ZVRpdGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREYXlLZXlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERheUtleV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QWN0aXZpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1bXSxuPXRoaXMucHJvcHMud2lkZ2V0LmNvbnRlbnQucmVzdWx0O3JldHVybih2b2lkIDA9PT1uP1tdOm4pLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dm9pZCAwLG89dm9pZCAwLHM9dm9pZCAwO2UuaXNWYWxpZEFjdGl2aXR5KG4pJiYocz1uLmFjdGlvblR5cGU9PT1CLlVQREFURV9QUk9KRUNUP2UudXBkYXRlUHJvamVjdFZhbHVlcyhuKTpuLmFjdGlvblR5cGU9PT1CLlVQREFURV9BTkFMWVpFUj9lLnVwZGF0ZUFuYWx5emVyT3B0aW9ucyhuKTpuLHI9ZS5nZXREYXlLZXkocy5sYXN0TW9kaWZpZWQpLG89dC5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRheT09PXJ9KSxvP28uaXRlbXMucHVzaChzKTp0LnB1c2goe2RheTpyLGRheVRpdGxlOmUuZ2V0RGF0ZVRpdGxlKHIpLGl0ZW1zOltzXX0pKX0pLHR9fSx7a2V5OiJfX2dldERheUtleV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGF5S2V5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREYXlLZXlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERheUtleV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGF5S2V5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKHBhcnNlRmxvYXQoZSkpLG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSk7cmV0dXJuIERhdGUucGFyc2Uobil9fSx7a2V5OiJfX2dldERhdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGF0ZVRpdGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREYXRlVGl0bGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERhdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGF0ZVRpdGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW50bCxuPW5ldyBEYXRlLHI9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSkudmFsdWVPZigpLG89bmV3IERhdGUoci04NjRlNSkudmFsdWVPZigpLHM9bmV3IERhdGUocGFyc2VGbG9hdChlKSk7cmV0dXJuIGU9PT1yP3QuZm9ybWF0TWVzc2FnZShpZS50b2RheSk6ZT09PW8/dC5mb3JtYXRNZXNzYWdlKGllLnllc3RlcmRheSk6ci1lPD02MDQ4ZTU/bGVbcy5nZXREYXkoKV06dC5mb3JtYXRNZXNzYWdlKGllW2FlW3MuZ2V0TW9udGgoKV1dKSsiICIrcy5nZXREYXRlKCl9fSx7a2V5OiJfX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFVzZXJBdmF0YXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9VS5VUkxTLmRhdGFVc2VyUGhvdG8oZS51c2VyKTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse2NsYXNzTmFtZTpzZSgiYXZhdGFyIiksc3JjOnQsYWx0OiJhdmF0YXIifSl9fSx7a2V5OiJfX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZVByb2plY3RWYWx1ZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2lkOmUuaWQsaGlzdG9yeTp7fX0sbj0oMCxwLmRlZmF1bHQpKHt9LGUpO3JldHVybiBkZWxldGUgbi5pZCwoMCxkLmRlZmF1bHQpKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZS5zcGxpdCgiJCIpLG89clswXSxzPXJbMV0saT17fTtlLmluZGV4T2YoIlZhbHVlIik+MCYmKCJlbWFpbEVuYWJsZWQkbmV3VmFsdWUiPT09ZT90LmFjdGlvblR5cGU9ImZhbHNlIj09PW5bZV0/Qi5PRkZfRU1BSUw6Qi5PTl9FTUFJTDoiZW1haWxDYXNlcyRuZXdWYWx1ZSI9PT1lP3QuYWN0aW9uVHlwZT1CLlVQREFURV9FTUFJTDoocj1lLnNwbGl0KCIkIiksbz1yWzBdLHM9clsxXSxpW3NdPW5bZV0sdC5oaXN0b3J5W29dP3QuaGlzdG9yeVtvXT0oMCx1LmRlZmF1bHQpKHQuaGlzdG9yeVtvXSxpKTp0Lmhpc3Rvcnlbb109aSkpLHRbZV09bltlXX0pLHR9fSx7a2V5OiJfX3VwZGF0ZUFuYWx5emVyT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQW5hbHl6ZXJPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVBbmFseXplck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUFuYWx5emVyT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlQW5hbHl6ZXJPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXtpZDplLmlkLGhpc3Rvcnk6e319LG49KDAscC5kZWZhdWx0KSh7fSxlKTtyZXR1cm4gZGVsZXRlIG4uaWQsKDAsZC5kZWZhdWx0KShuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUuc3BsaXQoIiQiKSxvPXJbMF0scz1yWzFdLGk9e307ZS5pbmRleE9mKCJWYWx1ZSIpPjAmJihyPWUuc3BsaXQoIiQiKSxvPXJbMF0scz1yWzFdLGlbc109bltlXSx0Lmhpc3Rvcnlbb10/dC5oaXN0b3J5W29dPSgwLHUuZGVmYXVsdCkodC5oaXN0b3J5W29dLGkpOnQuaGlzdG9yeVtvXT1pKSx0W2VdPW5bZV19KSx0fX0se2tleToiX19pc1ZhbGlkQWN0aXZpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzVmFsaWRBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNWYWxpZEFjdGl2aXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc1ZhbGlkQWN0aXZpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzVmFsaWRBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hKCF0aGlzLnByb3BzLmhhc0J0cyYmInRlc3RJdGVtIj09PWUub2JqZWN0VHlwZSYmZS5hY3Rpb25UeXBlLmluZGV4T2YoImlzc3VlIik+MCl9fSx7a2V5OiJfX3NlbGVjdEFjdGl2aXRpZXNDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NlbGVjdEFjdGl2aXRpZXNDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NlbGVjdEFjdGl2aXRpZXNDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NlbGVjdEFjdGl2aXRpZXNDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NlbGVjdEFjdGl2aXRpZXNDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKEIuQUNUSU9OX1RPX0dST1VQX01BUFtlLmFjdGlvblR5cGVdfHxlLmFjdGlvblR5cGUpe2Nhc2UgQi5BQ1RJT05TX1dJVEhfSVNTVUVTOnJldHVybiB4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChYLlRlc3RJdGVtLHthY3Rpdml0eTplfSk7Y2FzZSBCLkFDVElPTlNfV0lUSF9EQVNIQk9BUkRTOmNhc2UgQi5BQ1RJT05TX1dJVEhfV0lER0VUUzpjYXNlIEIuQUNUSU9OU19XSVRIX0ZJTFRFUlM6cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEuQ29tbW9uRW50aXR5LHthY3Rpdml0eTplfSk7Y2FzZSBCLkFDVElPTlNfV0lUSF9CVFM6cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KHEuQnRzLHthY3Rpdml0eTplfSk7Y2FzZSBCLkFDVElPTlNfV0lUSF9BQV9TRVRUSU5HUzpyZXR1cm4gZS5hY3Rpb25UeXBlPT09Qi5VUERBVEVfQU5BTFlaRVI/eC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVy5BbmFseXNpc1Byb3BlcnRpZXMse2FjdGl2aXR5OmV9KTp4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChZLkFuYWx5c2lzQ29uZmlndXJhdGlvbnMse2FjdGl2aXR5OmV9KTtjYXNlIEIuQUNUSU9OU19XSVRIX0RFRkVDVFM6cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KEouRGVmZWN0VHlwZSx7YWN0aXZpdHk6ZX0pO2Nhc2UgQi5BQ1RJT05TX1dJVEhfSU1QT1JUOmNhc2UgQi5TVEFSVF9MQVVOQ0g6Y2FzZSBCLkZJTklTSF9MQVVOQ0g6Y2FzZSBCLkRFTEVURV9MQVVOQ0g6cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KEsuTGF1bmNoLHthY3Rpdml0eTplfSk7Y2FzZSBCLlVQREFURV9QUk9KRUNUOnJldHVybiB4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChWLkRlZmF1bHRQcm9qZWN0U2V0dGluZ3Mse2FjdGl2aXR5OmV9KTtjYXNlIEIuQ1JFQVRFX1VTRVI6cmV0dXJuIHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCQuQ3JlYXRlVXNlcix7YWN0aXZpdHk6ZX0pO2Nhc2UgQi5BQ1RJT05TX1dJVEhfTk9USUZJQ0FUSU9OUzpyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoWi5Ob3RpZmljYXRpb25zLHthY3Rpdml0eTplfSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fSx7a2V5OiJfX3JlbmRlckRhdGVBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyRGF0ZUFjdGl2aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJEYXRlQWN0aXZpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckRhdGVBY3Rpdml0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyRGF0ZUFjdGl2aXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUuaXRlbXMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuc2VsZWN0QWN0aXZpdGllc0NvbXBvbmVudChlKTtyZXR1cm4gbiYmeC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpzZSgicm93LWNvbnRlbnQiKSxrZXk6ZS5pZH0sZS5hY3Rpb25UeXBlPT09Qi5DUkVBVEVfVVNFUj94LmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZyYWdtZW50LG51bGwsbix4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLkFic1JlbFRpbWUse3NldFN0YXJ0VGltZUZvcm1hdEFjdGlvbjpGLlNUQVJUX1RJTUVfRk9STUFUX0FCU09MVVRFLHN0YXJ0VGltZTorZS5sYXN0TW9kaWZpZWQsY3VzdG9tQ2xhc3M6c2UoInRpbWUiKX0pKTp4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZyYWdtZW50LG51bGwsdC5nZXRVc2VyQXZhdGFyKGUpLHguZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6c2UoImNsZWFyZml4Iil9LG4seC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5BYnNSZWxUaW1lLHtzZXRTdGFydFRpbWVGb3JtYXRBY3Rpb246Ri5TVEFSVF9USU1FX0ZPUk1BVF9BQlNPTFVURSxzdGFydFRpbWU6K2UubGFzdE1vZGlmaWVkLGN1c3RvbUNsYXNzOnNlKCJ0aW1lIil9KSkpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldEFjdGl2aXRpZXMoKTtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpzZSgicHJvamVjdC1hY3Rpdml0eSIpfSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudChILlNjcm9sbFdyYXBwZXIsbnVsbCx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnNlKCJ3aWRnZXQtd3JhcHBlciIpfSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4geC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoai5GcmFnbWVudCx7a2V5OnQuZGF5fSx4LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZTpzZSgiZGF5LXRpdGxlIil9LHQuZGF5VGl0bGUpLGUucmVuZGVyRGF0ZUFjdGl2aXR5KHQpKX0pKSkpfX1dKSx0fShqLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6Ti5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6UC5kZWZhdWx0Lm9iamVjdCxoYXNCdHM6UC5kZWZhdWx0LmJvb2x9LGkuZGVmYXVsdFByb3BzPXt3aWRnZXQ6e2NvbnRlbnQ6e3Jlc3VsdDpbXX19LGhhc0J0czohMX0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodWUsIlByb2plY3RBY3Rpdml0eSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHNlLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGllLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGFlLCJtb250aHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvcHJvamVjdEFjdGl2aXR5L3Byb2plY3RBY3Rpdml0eS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsZSwiZGF5cyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy9wcm9qZWN0QWN0aXZpdHkvcHJvamVjdEFjdGl2aXR5LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicHJvamVjdC1hY3Rpdml0eSI6InByb2plY3RBY3Rpdml0eV9fcHJvamVjdC1hY3Rpdml0eV9fXzJfVzVhIiwid2lkZ2V0LXdyYXBwZXIiOiJwcm9qZWN0QWN0aXZpdHlfX3dpZGdldC13cmFwcGVyX19feEpUTjEiLCJyb3ctY29udGVudCI6InByb2plY3RBY3Rpdml0eV9fcm93LWNvbnRlbnRfX18zNlVEbSIsY2xlYXJmaXg6InByb2plY3RBY3Rpdml0eV9fY2xlYXJmaXhfX18zbHVXMSIsYXZhdGFyOiJwcm9qZWN0QWN0aXZpdHlfX2F2YXRhcl9fX280T2xRIix0aW1lOiJwcm9qZWN0QWN0aXZpdHlfX3RpbWVfX18yYi1aayIsImRheS10aXRsZSI6InByb2plY3RBY3Rpdml0eV9fZGF5LXRpdGxlX19fMW1LR0IifX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5CVUdfSURfQ09MVU1OX0tFWT0iYnVnSUQiLG89dC5TVUJNSVRfREFURV9DT0xVTU5fS0VZPSJzdWJtaXREYXRlIixzPXQuRk9VTkRfSU5fQ09MVU1OX0tFWT0iZm91bmRJbiIsaT10LlNVQk1JVFRFUl9DT0xVTU5fS0VZPSJzdWJtaXR0ZXIiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJCVUdfSURfQ09MVU1OX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiU1VCTUlUX0RBVEVfQ09MVU1OX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiRk9VTkRfSU5fQ09MVU1OX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiU1VCTUlUVEVSX0NPTFVNTl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL2ZvdW5kSW4vZm91bmRJbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm91bmRJbj10LmN4PXZvaWQgMDt2YXIgcyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLGM9byh1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89byhkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9byhwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9byhtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1vKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1vKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9byh2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1vKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPW8oTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9byhSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksTD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxEPW8oTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaz1vKE0pLEk9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLE49bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxIPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vYXR0cmlidXRlc0Jsb2NrL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9mb3VuZEluL2ZvdW5kSW4uc2NzcyIpLEI9byhGKSxVPXtGb3VuZEluOntkaXNwbGF5TmFtZToiRm91bmRJbiJ9fSxHPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL2ZvdW5kSW4vZm91bmRJbi5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSx6PSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL2ZvdW5kSW4vZm91bmRJbi5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxWPXQuY3g9RC5kZWZhdWx0LmJpbmQoQi5kZWZhdWx0KSxXPXQuRm91bmRJbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoeih0LGUpLGUpfX0oIkZvdW5kSW4iKSgocz0oMCx4LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsSS5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpfX0pKSgobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGIuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldEl0ZW1GcmFnZW50PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRJdGVtRnJhZ2VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX2dldEl0ZW1GcmFnZW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRJdGVtRnJhZ2VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0SXRlbUZyYWdlbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEl0ZW1GcmFnZW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRJdGVtRnJhZ2VudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0SXRlbUZyYWdlbnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEl0ZW1GcmFnZW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtlLmxhdW5jaElkXS5jb25jYXQoKDAsYy5kZWZhdWx0KShlLnBhdGhOYW1lcyksZS5pZCkuam9pbigiLyIpLG49e3R5cGU6Ti5QUk9KRUNUX0xPR19QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDp0aGlzLnByb3BzLnByb2plY3RJZCxmaWx0ZXJJZDpQLkFMTCx0ZXN0SXRlbUlkczp0fX07cmV0dXJuIHIuY3JlYXRlRWxlbWVudChPLkZyYWdtZW50LHtrZXk6ZS5pZH0sci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiaXRlbSIpLHRpdGxlOmUubmFtZX0sci5jcmVhdGVFbGVtZW50KHcuTmF2TGluayx7dG86bixjbGFzc05hbWU6VigiZm91bmQtbGluayIpfSxlLm5hbWUpKSxlLmF0dHJpYnV0ZXMmJnIuY3JlYXRlRWxlbWVudChILkF0dHJpYnV0ZXNCbG9jayx7YXR0cmlidXRlczplLmF0dHJpYnV0ZXN9KSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUudmFsdWUsbj1lLmNsYXNzTmFtZTtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiZm91bmQtaW4tY29sIixuKX0sdC5mb3VuZEluJiZ0LmZvdW5kSW4ubWFwKHRoaXMuZ2V0SXRlbUZyYWdlbnQpKX19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXt2YWx1ZTprLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsY2xhc3NOYW1lOmsuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxwcm9qZWN0SWQ6ay5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfSxpPWwpKXx8aSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9mb3VuZEluL2ZvdW5kSW4uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiRm91bmRJbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvZm91bmRJbi9mb3VuZEluLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9mb3VuZEluL2ZvdW5kSW4uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJmb3VuZC1pbi1jb2wiOiJmb3VuZEluX19mb3VuZC1pbi1jb2xfX18xdDFCdyIsaXRlbToiZm91bmRJbl9faXRlbV9fXzE2VGdhIiwiZm91bmQtbGluayI6ImZvdW5kSW5fX2ZvdW5kLWxpbmtfX19zMUQ3QyIsaWNvbjoiZm91bmRJbl9faWNvbl9fXzE0RUV0In19LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9mb3VuZEluL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9mb3VuZEluL2ZvdW5kSW4uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZvdW5kSW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkZvdW5kSW59fSl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvdW5pcXVlQnVnc1RhYmxlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmlxdWVCdWdzVGFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlVuaXF1ZUJ1Z3NUYWJsZX19KX0sIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL21lc3NhZ2VzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5oaW50TWVzc2FnZXM9dC5DT0xVTU5fTkFNRVNfTUFQPXZvaWQgMDt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksYT1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9jb25zdGFudHMuanMiKSxsPXQuQ09MVU1OX05BTUVTX01BUD0oMCxpLmRlZmluZU1lc3NhZ2VzKSgocj17fSwoMCxzLmRlZmF1bHQpKHIsYS5CVUdfSURfQ09MVU1OX0tFWSx7aWQ6IlVuaXF1ZUJ1Z3NUYWJsZS5idWdJRENvbHVtbiIsZGVmYXVsdE1lc3NhZ2U6IkJVRyBJRCJ9KSwoMCxzLmRlZmF1bHQpKHIsYS5TVUJNSVRfREFURV9DT0xVTU5fS0VZLHtpZDoiVW5pcXVlQnVnc1RhYmxlLnN1Ym1pdERhdGVDb2x1bW4iLGRlZmF1bHRNZXNzYWdlOiJTVUJNSVQgREFURSJ9KSwoMCxzLmRlZmF1bHQpKHIsYS5GT1VORF9JTl9DT0xVTU5fS0VZLHtpZDoiVW5pcXVlQnVnc1RhYmxlLmZvdW5kSW5Db2x1bW4iLGRlZmF1bHRNZXNzYWdlOiJGT1VORCBJTiJ9KSwoMCxzLmRlZmF1bHQpKHIsYS5TVUJNSVRURVJfQ09MVU1OX0tFWSx7aWQ6IlVuaXF1ZUJ1Z3NUYWJsZS5zdWJtaXR0ZXJDb2x1bW4iLGRlZmF1bHRNZXNzYWdlOiJTVUJNSVRURVIifSkscikpLHU9dC5oaW50TWVzc2FnZXM9KDAsaS5kZWZpbmVNZXNzYWdlcykoe3N1Ym1pdERhdGVIaW50OntpZDoiVW5pcXVlQnVnc1RhYmxlLnN1Ym1pdERhdGVIaW50IixkZWZhdWx0TWVzc2FnZToiU3VibWl0IGRhdGU6In19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQ09MVU1OX05BTUVTX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvbWVzc2FnZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiaGludE1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9tZXNzYWdlcy5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS91bmlxdWVCdWdzVGFibGUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVuaXF1ZUJ1Z3NUYWJsZT10LmN4PXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYWJzUmVsVGltZS9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvdW5pcXVlQnVnc1RhYmxlLnNjc3MiKSxJPXIoayksUD1uKCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS9jb25zdGFudHMuanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL21lc3NhZ2VzLmpzeCIpLEg9bigiLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvZm91bmRJbi9pbmRleC5qcyIpLEY9dC5jeD1ELmRlZmF1bHQuYmluZChJLmRlZmF1bHQpLEI9e3ZhbHVlOnguZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxjbGFzc05hbWU6eC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfSxVPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS52YWx1ZTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpGKCJidWctaWQtY29sIix0KX0sbi51cmw/Qy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUi5kZWZhdWx0LHt0bzpuLnVybCx0YXJnZXQ6Il9ibGFuayIsY2xhc3NOYW1lOkYoImJ1Zy1saW5rIil9LG4uYnVnSUQpOm4uYnVnSUQpfTtVLnByb3BUeXBlcz1CO3ZhciBHPWZ1bmN0aW9uKGUpe3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChILkZvdW5kSW4sZSl9LHo9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuY2xhc3NOYW1lLG89ZS52YWx1ZTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpGKCJzdWJtaXQtZGF0ZS1jb2wiLHIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpGKCJtb2JpbGUtaGludCIpfSxuKE4uaGludE1lc3NhZ2VzLnN1Ym1pdERhdGVIaW50KSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5BYnNSZWxUaW1lLHtzdGFydFRpbWU6TnVtYmVyKG8uc3VibWl0RGF0ZSl9KSl9O3oucHJvcFR5cGVzPUI7dmFyIFY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLnZhbHVlO3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoInN1Ym1pdHRlci1jb2wiLHQpfSxuLnN1Ym1pdHRlcil9O1YucHJvcFR5cGVzPUI7dmFyIFc9KG89e30sKDAsVC5kZWZhdWx0KShvLFAuQlVHX0lEX0NPTFVNTl9LRVksVSksKDAsVC5kZWZhdWx0KShvLFAuRk9VTkRfSU5fQ09MVU1OX0tFWSxHKSwoMCxULmRlZmF1bHQpKG8sUC5TVUJNSVRfREFURV9DT0xVTU5fS0VZLHopLCgwLFQuZGVmYXVsdCkobyxQLlNVQk1JVFRFUl9DT0xVTU5fS0VZLFYpLG8pLFk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntpZDplLHRpdGxlOntmdWxsOm4oTi5DT0xVTU5fTkFNRVNfTUFQW2VdKX0sY29tcG9uZW50OmZ1bmN0aW9uKHIpe3JldHVybiBXW3RdKHIsZSxuKX19fSxxPShzPXt9LCgwLFQuZGVmYXVsdCkocyxQLkJVR19JRF9DT0xVTU5fS0VZLFAuQlVHX0lEX0NPTFVNTl9LRVkpLCgwLFQuZGVmYXVsdCkocyxQLkZPVU5EX0lOX0NPTFVNTl9LRVksUC5GT1VORF9JTl9DT0xVTU5fS0VZKSwoMCxULmRlZmF1bHQpKHMsUC5TVUJNSVRfREFURV9DT0xVTU5fS0VZLFAuU1VCTUlUX0RBVEVfQ09MVU1OX0tFWSksKDAsVC5kZWZhdWx0KShzLFAuU1VCTUlUVEVSX0NPTFVNTl9LRVksUC5TVUJNSVRURVJfQ09MVU1OX0tFWSkscyksSz10LlVuaXF1ZUJ1Z3NUYWJsZT0oMCxPLmluamVjdEludGwpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAsYi5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5nZXRDb2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLmNvbHVtbnM9bi5nZXRDb2x1bW5zKGUuaW50bC5mb3JtYXRNZXNzYWdlKSxufXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wcy53aWRnZXQuY29udGVudFBhcmFtZXRlcnMuY29udGVudEZpZWxkcy5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gcVtuXT9bXS5jb25jYXQoKDAsYy5kZWZhdWx0KSh0KSxbWShuLHFbbl0sZSldKTp0fSxbXSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy53aWRnZXQuY29udGVudC5yZXN1bHQ7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuR3JpZCx7Y29sdW1uczp0aGlzLmNvbHVtbnMsZGF0YTplfSl9fV0pLHR9KEEuUHVyZUNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6Ty5pbnRsU2hhcGUuaXNSZXF1aXJlZCx3aWRnZXQ6eC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxpPWwpKXx8aTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL3VuaXF1ZUJ1Z3NUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihLLCJVbmlxdWVCdWdzVGFibGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL3VuaXF1ZUJ1Z3NUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJDb2x1bW5Qcm9wcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvdW5pcXVlQnVnc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIkJ1Z0lEQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS91bmlxdWVCdWdzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywiRm91bmRJbkNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29tcG9uZW50cy93aWRnZXRzL3RhYmxlcy91bmlxdWVCdWdzVGFibGUvdW5pcXVlQnVnc1RhYmxlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIlN1Ym1pdERhdGVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL3VuaXF1ZUJ1Z3NUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJTdWJtaXR0ZXJDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL3VuaXF1ZUJ1Z3NUYWJsZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJjb2x1bW5Db21wb25lbnRzTWFwIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS91bmlxdWVCdWdzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiZ2V0Q29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS91bmlxdWVCdWdzVGFibGUuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiQ09MVU1OU19NQVAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy90YWJsZXMvdW5pcXVlQnVnc1RhYmxlL3VuaXF1ZUJ1Z3NUYWJsZS5qc3giKSl9KCl9LCIuL3NyYy9jb21wb25lbnRzL3dpZGdldHMvdGFibGVzL3VuaXF1ZUJ1Z3NUYWJsZS91bmlxdWVCdWdzVGFibGUuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJidWctaWQtY29sIjoidW5pcXVlQnVnc1RhYmxlX19idWctaWQtY29sX19fMUNEN2oiLCJzdWJtaXQtZGF0ZS1jb2wiOiJ1bmlxdWVCdWdzVGFibGVfX3N1Ym1pdC1kYXRlLWNvbF9fXzNVLXFZIiwic3VibWl0dGVyLWNvbCI6InVuaXF1ZUJ1Z3NUYWJsZV9fc3VibWl0dGVyLWNvbF9fXzMwRUZjIiwiYnVnLWxpbmsiOiJ1bmlxdWVCdWdzVGFibGVfX2J1Zy1saW5rX19fMnVObi0iLCJtb2JpbGUtaGludCI6InVuaXF1ZUJ1Z3NUYWJsZV9fbW9iaWxlLWhpbnRfX180T3BkciJ9fSwiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoUHJvamVjdERhdGFBY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9jb25zdGFudHMuanMiKSxvPXQuZmV0Y2hQcm9qZWN0RGF0YUFjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuRkVUQ0hfUFJPSkVDVF9EQVRBfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZmV0Y2hQcm9qZWN0RGF0YUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FjdGlvbkNyZWF0b3JzLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVsZXRlSXRlbXNBY3Rpb249dC51bnNlbGVjdEFsbFVzZXJzQWN0aW9uPXQudG9nZ2xlQWxsVXNlcnNBY3Rpb249dC50b2dnbGVVc2VyU2VsZWN0aW9uQWN0aW9uPXQuZmV0Y2hBbGxVc2Vyc0FjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2NvbnN0YW50cy5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2FjdGlvblZhbGlkYXRvcnMuanMiKSxhPXQuZmV0Y2hBbGxVc2Vyc0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnMuRkVUQ0hfQUxMX1VTRVJTfX0sbD10LnRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb249KDAsci50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uKShzLk5BTUVTUEFDRSksdT10LnRvZ2dsZUFsbFVzZXJzQWN0aW9uPSgwLHIudG9nZ2xlQWxsSXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxjPXQudW5zZWxlY3RBbGxVc2Vyc0FjdGlvbj0oMCxyLnVuc2VsZWN0QWxsSXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxkPXQuZGVsZXRlSXRlbXNBY3Rpb249KDAsci5kZWZpbmVHcm91cE9wZXJhdGlvbikocy5OQU1FU1BBQ0UsImRlbGV0ZVVzZXJzIixmdW5jdGlvbihlLHQpe3ZhciBuPXQub25Db25maXJtLHI9dC5oZWFkZXIscz10Lm1haW5Db250ZW50LGk9dC5ldmVudHNJbmZvO3JldHVybigwLG8uc2hvd01vZGFsQWN0aW9uKSh7aWQ6ImRlbGV0ZUl0ZW1zTW9kYWwiLGRhdGE6e2l0ZW1zOmUsb25Db25maXJtOm4saGVhZGVyOnIsbWFpbkNvbnRlbnQ6cyxldmVudHNJbmZvOml9fSl9LGkudmFsaWRhdGVEZWxldGVVc2VyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiZmV0Y2hBbGxVc2Vyc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwidG9nZ2xlVXNlclNlbGVjdGlvbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwidG9nZ2xlQWxsVXNlcnNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInVuc2VsZWN0QWxsVXNlcnNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImRlbGV0ZUl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvYWN0aW9uVmFsaWRhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZURlbGV0ZVVzZXI9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9pbmRleC5qcyIpLHM9dC52YWxpZGF0ZURlbGV0ZVVzZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPSgwLHIudXNlckluZm9TZWxlY3RvcikobiksaT0oMCxyLnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yKShuKSxhPSgwLHIuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3Rvcikobik7cmV0dXJuKDAsby5jYW5EZWxldGVVc2VyKShpLGEsZS5pZCE9PXMuaWQpP251bGw6ImNhbnREZWxldGVZb3VyU2VsZiJ9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsInZhbGlkYXRlRGVsZXRlVXNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2FjdGlvblZhbGlkYXRvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuRkVUQ0hfQUxMX1VTRVJTPSJmZXRjaEFsbFVzZXJzIixvPXQuTkFNRVNQQUNFPSJhbGxVc2VycyIscz10LkRFRkFVTFRfUEFHRV9TSVpFPTUwOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJGRVRDSF9BTExfVVNFUlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJOQU1FU1BBQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJERUZBVUxUX1BBR0VfU0laRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoQWxsVXNlcnNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZldGNoQWxsVXNlcnNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvZ2dsZUFsbFVzZXJzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50b2dnbGVBbGxVc2Vyc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVsZXRlSXRlbXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlbGV0ZUl0ZW1zQWN0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFsbFVzZXJzUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYWxsVXNlcnNSZWR1Y2VyfX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWxsVXNlcnNQYWdpbmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmFsbFVzZXJzUGFnaW5hdGlvblNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhbGxVc2Vyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbGxVc2Vyc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkaW5nU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmxvYWRpbmdTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VsZWN0ZWRVc2Vyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zZWxlY3RlZFVzZXJzU2VsZWN0b3J9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFsbFVzZXJzU2FnYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFsbFVzZXJzU2FnYXN9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOQU1FU1BBQ0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLk5BTUVTUEFDRX19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFsbFVzZXJzUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL2luZGV4LmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvaW5kZXguanMiKSxsPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9jb25zdGFudHMuanMiKSx1PXQuYWxsVXNlcnNSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7YWxsVXNlcnM6KDAsby5mZXRjaFJlZHVjZXIpKGwuTkFNRVNQQUNFLHtjb250ZW50UGF0aDoiY29udGVudCJ9KSxwYWdpbmF0aW9uOigwLHMucGFnaW5hdGlvblJlZHVjZXIpKGwuTkFNRVNQQUNFKSxsb2FkaW5nOigwLGkubG9hZGluZ1JlZHVjZXIpKGwuTkFNRVNQQUNFKSxncm91cE9wZXJhdGlvbnM6KDAsYS5ncm91cE9wZXJhdGlvbnNSZWR1Y2VyKShsLk5BTUVTUEFDRSl9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJhbGxVc2Vyc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9yZWR1Y2VyLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlO3JldHVybiBsLmRlZmF1bHQud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsKDAsZC5zZWxlY3QpKGYucXVlcnlTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPXQuc2VudCx0Lm5leHQ9NSwoMCxkLnB1dCkoKDAscC5mZXRjaERhdGFBY3Rpb24pKG0uTkFNRVNQQUNFKShfLlVSTFMuYWxsVXNlcnMoKSx7cGFyYW1zOigwLGMuZGVmYXVsdCkoe30sZSl9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSxoLHRoaXMpfWZ1bmN0aW9uIHMoKXtyZXR1cm4gbC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGQudGFrZUV2ZXJ5KShtLkZFVENIX0FMTF9VU0VSUyxvKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGcsdGhpcyl9ZnVuY3Rpb24gaSgpe3JldHVybiBsLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZC5hbGwpKFtzKCldKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGIsdGhpcyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGM9cih1KTt0LmFsbFVzZXJzU2FnYXM9aTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxfPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIikscD1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGY9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL3NlbGVjdG9ycy5qcyIpLG09bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2NvbnN0YW50cy5qcyIpLGg9bC5kZWZhdWx0Lm1hcmsobyksZz1sLmRlZmF1bHQubWFyayhzKSxiPWwuZGVmYXVsdC5tYXJrKGkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaEFsbFVzZXJzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJ3YXRjaEZldGNoQWxsVXNlcnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImFsbFVzZXJzU2FnYXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucXVlcnlTZWxlY3Rvcj10LnNlbGVjdGVkVXNlcnNTZWxlY3Rvcj10LmxvYWRpbmdTZWxlY3Rvcj10LmFsbFVzZXJzU2VsZWN0b3I9dC5hbGxVc2Vyc1BhZ2luYXRpb25TZWxlY3Rvcj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NlbGVjdG9ycy5qcyIpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS5hZG1pbmlzdHJhdGVEb21haW5TZWxlY3RvcikoZSkuYWxsVXNlcnN8fHt9fSxsPXQuYWxsVXNlcnNQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkucGFnaW5hdGlvbn0sdT10LmFsbFVzZXJzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkuYWxsVXNlcnN9LGM9dC5sb2FkaW5nU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkubG9hZGluZ3x8ITF9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkuZ3JvdXBPcGVyYXRpb25zfSxfPXQuc2VsZWN0ZWRVc2Vyc1NlbGVjdG9yPSgwLHMuY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yKShkKSxwPXQucXVlcnlTZWxlY3Rvcj0oMCxvLmNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yKSh7ZGVmYXVsdFBhZ2luYXRpb246ci5ERUZBVUxUX1BBR0lOQVRJT059KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiYWxsVXNlcnNQYWdpbmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJhbGxVc2Vyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywibG9hZGluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywic2VsZWN0ZWRVc2Vyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwicXVlcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImRvbWFpblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiZ3JvdXBPcGVyYXRpb25zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10Lk5BTUVTUEFDRT0iYWRtaW4iLG89dC5GRVRDSF9QUk9KRUNUX0RBVEE9ImZldGNoUHJvamVjdERhdGEiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJOQU1FU1BBQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJGRVRDSF9QUk9KRUNUX0RBVEEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoRXZlbnRzQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL2NvbnN0YW50cy5qcyIpLG89dC5mZXRjaEV2ZW50c0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuRkVUQ0hfRVZFTlRTfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZmV0Y2hFdmVudHNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvYWN0aW9uQ3JlYXRvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfU09SVElORz10LkRFRkFVTFRfUEFHRV9TSVpFPXQuTkFNRVNQQUNFPXQuRkVUQ0hfRVZFTlRTPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLHM9dC5GRVRDSF9FVkVOVFM9ImZldGNoRXZlbnRzIixpPXQuTkFNRVNQQUNFPSJldmVudHMiLGE9dC5ERUZBVUxUX1BBR0VfU0laRT01MCxsPXQuREVGQVVMVF9TT1JUSU5HPSgwLHIuZm9ybWF0U29ydGluZ1N0cmluZykoW28uRU5USVRZX0NSRUFUSU9OX0RBVEVdLHIuU09SVElOR19ERVNDKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiRkVUQ0hfRVZFTlRTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIk5BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJERUZBVUxUX1BBR0VfU0laRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJERUZBVUxUX1NPUlRJTkciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEV2ZW50c0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmV0Y2hFdmVudHNBY3Rpb259fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV2ZW50c1JlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmV2ZW50c1JlZHVjZXJ9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZXZlbnRzUGFnaW5hdGlvblNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5ldmVudHNQYWdpbmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV2ZW50c1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5ldmVudHNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZGluZ1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5sb2FkaW5nU2VsZWN0b3J9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJldmVudHNTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZXZlbnRzU2FnYXN9fSl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZXZlbnRzUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL2luZGV4LmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL2NvbnN0YW50cy5qcyIpLGw9dC5ldmVudHNSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7ZXZlbnRzOigwLG8uZmV0Y2hSZWR1Y2VyKShhLk5BTUVTUEFDRSx7Y29udGVudFBhdGg6ImNvbnRlbnQifSkscGFnaW5hdGlvbjooMCxzLnBhZ2luYXRpb25SZWR1Y2VyKShhLk5BTUVTUEFDRSksbG9hZGluZzooMCxpLmxvYWRpbmdSZWR1Y2VyKShhLk5BTUVTUEFDRSl9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJldmVudHNSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlLHQ7cmV0dXJuIGwuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9MiwoMCxkLnNlbGVjdCkocC5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gZT1uLnNlbnQsbi5uZXh0PTUsKDAsZC5zZWxlY3QpKGgucXVlcnlTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiB0PW4uc2VudCxuLm5leHQ9OCwoMCxkLnB1dCkoKDAsXy5mZXRjaERhdGFBY3Rpb24pKG0uTkFNRVNQQUNFKShmLlVSTFMuZXZlbnRzKGUpLHtwYXJhbXM6KDAsYy5kZWZhdWx0KSh7fSx0KX0pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LGcsdGhpcyl9ZnVuY3Rpb24gcygpe3JldHVybiBsLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZC50YWtlRXZlcnkpKG0uRkVUQ0hfRVZFTlRTLG8pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sYix0aGlzKX1mdW5jdGlvbiBpKCl7cmV0dXJuIGwuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxkLmFsbCkoW3MoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRSx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpO3QuZXZlbnRzU2FnYXM9aTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxfPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIikscD1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksZj1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLG09bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9jb25zdGFudHMuanMiKSxoPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvc2VsZWN0b3JzLmpzIiksZz1sLmRlZmF1bHQubWFyayhvKSxiPWwuZGVmYXVsdC5tYXJrKHMpLEU9bC5kZWZhdWx0Lm1hcmsoaSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZldGNoRXZlbnRzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywid2F0Y2hGZXRjaEV2ZW50cyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImV2ZW50c1NhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL3NhZ2FzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucXVlcnlTZWxlY3Rvcj10LmxvYWRpbmdTZWxlY3Rvcj10LmV2ZW50c1NlbGVjdG9yPXQuZXZlbnRzUGFnaW5hdGlvblNlbGVjdG9yPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9jb25zdGFudHMuanMiKSxpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9zZWxlY3RvcnMuanMiKSxhPWZ1bmN0aW9uKGUpe3JldHVybigwLGkuYWRtaW5pc3RyYXRlRG9tYWluU2VsZWN0b3IpKGUpLmV2ZW50c3x8e319LGw9dC5ldmVudHNQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkucGFnaW5hdGlvbn0sdT10LmV2ZW50c1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUpLmV2ZW50c30sYz10LmxvYWRpbmdTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gYShlKS5sb2FkaW5nfHwhMX0sZD10LnF1ZXJ5U2VsZWN0b3I9KDAsby5jcmVhdGVRdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcikoe2RlZmF1bHRQYWdpbmF0aW9uOnIuREVGQVVMVF9QQUdJTkFUSU9OLGRlZmF1bHRTb3J0aW5nOnMuREVGQVVMVF9TT1JUSU5HfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImV2ZW50c1BhZ2luYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJldmVudHNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJsb2FkaW5nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9ldmVudHMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwicXVlcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFkbWluaXN0cmF0ZVJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmFkbWluaXN0cmF0ZVJlZHVjZXJ9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJldmVudHNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZXZlbnRzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoRXZlbnRzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaEV2ZW50c0FjdGlvbn19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWxsVXNlcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxsVXNlcnNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hBbGxVc2Vyc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZmV0Y2hBbGxVc2Vyc0FjdGlvbn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hQcm9qZWN0RGF0YUFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZmV0Y2hQcm9qZWN0RGF0YUFjdGlvbn19KTt2YXIgYT1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFETUlOX05BTUVTUEFDRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuTkFNRVNQQUNFfX0pO3ZhciBsPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhZG1pbmlzdHJhdGVTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYWRtaW5pc3RyYXRlU2FnYXN9fSl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3RhcnRTZXRWaWV3TW9kZT10LmZldGNoUHJvamVjdHNBY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9jb25zdGFudHMuanMiKSxvPXQuZmV0Y2hQcm9qZWN0c0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLkZFVENIX1BST0pFQ1RTLHBheWxvYWQ6ZX19LHM9dC5zdGFydFNldFZpZXdNb2RlPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuU1RBUlRfU0VUX1ZJRVdfTU9ERSxwYXlsb2FkOnt2aWV3TW9kZTplfX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaFByb2plY3RzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJzdGFydFNldFZpZXdNb2RlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNUQVJUX1NFVF9WSUVXX01PREU9dC5TRVRfUFJPSkVDVFNfVklFV19NT0RFPXQuVVNFUl9WSUVXPXQuR1JJRF9WSUVXPXQuVEFCTEVfVklFVz10LkRFRkFVTFRfUEFHSU5BVElPTj10LkRFRkFVTFRfUEFHRV9TSVpFPXQuTkFNRVNQQUNFPXQuRkVUQ0hfUFJPSkVDVFM9dm9pZCAwO3ZhciByLG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9pbmRleC5qcyIpLGE9dC5GRVRDSF9QUk9KRUNUUz0iZmV0Y2hQcm9qZWN0cyIsbD10Lk5BTUVTUEFDRT0icHJvamVjdHMiLHU9dC5ERUZBVUxUX1BBR0VfU0laRT0xMixjPXQuREVGQVVMVF9QQUdJTkFUSU9OPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLlBBR0VfS0VZLDEpLCgwLHMuZGVmYXVsdCkocixpLlNJWkVfS0VZLHUpLHIpLGQ9dC5UQUJMRV9WSUVXPSJ0YWJsZSIsXz10LkdSSURfVklFVz0iZ3JpZCIscD10LlVTRVJfVklFVz0icHJvamVjdHNfdmlld19tb2RlIixmPXQuU0VUX1BST0pFQ1RTX1ZJRVdfTU9ERT0ic2V0UHJvamVjdHNWaWV3TW9kZSIsbT10LlNUQVJUX1NFVF9WSUVXX01PREU9InN0YXJ0U2V0UHJvamVjdHNWaWV3TW9kZSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkZFVENIX1BST0pFQ1RTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiREVGQVVMVF9QQUdFX1NJWkUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJERUZBVUxUX1BBR0lOQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJUQUJMRV9WSUVXIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiR1JJRF9WSUVXIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiVVNFUl9WSUVXIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiU0VUX1BST0pFQ1RTX1ZJRVdfTU9ERSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3Byb2plY3RzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIlNUQVJUX1NFVF9WSUVXX01PREUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFByb2plY3RzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mZXRjaFByb2plY3RzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGFydFNldFZpZXdNb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zdGFydFNldFZpZXdNb2RlfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb2plY3RzUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucHJvamVjdHNSZWR1Y2VyfX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvamVjdHNQYWdpbmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnByb2plY3RzUGFnaW5hdGlvblNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0c1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5wcm9qZWN0c1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkaW5nU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmxvYWRpbmdTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmlld01vZGVTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudmlld01vZGVTZWxlY3Rvcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2FnYXMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvamVjdHNTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdHNTYWdhc319KTt2YXIgYT1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRFRkFVTFRfUEFHRV9TSVpFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5ERUZBVUxUX1BBR0VfU0laRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiREVGQVVMVF9QQUdJTkFUSU9OIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5ERUZBVUxUX1BBR0lOQVRJT059fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdSSURfVklFVyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuR1JJRF9WSUVXfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJUQUJMRV9WSUVXIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5UQUJMRV9WSUVXfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3Byb2plY3RzL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucHJvamVjdHNSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvYWRpbmcvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9jb25zdGFudHMuanMiKSxsPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmEuR1JJRF9WSUVXLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGEuU0VUX1BST0pFQ1RTX1ZJRVdfTU9ERTpyZXR1cm4gcjtkZWZhdWx0OnJldHVybiBlfX0sdT10LnByb2plY3RzUmVkdWNlcj0oMCxyLmNvbWJpbmVSZWR1Y2Vycykoe3Byb2plY3RzOigwLG8uZmV0Y2hSZWR1Y2VyKShhLk5BTUVTUEFDRSx7Y29udGVudFBhdGg6ImNvbnRlbnQifSkscGFnaW5hdGlvbjooMCxzLnBhZ2luYXRpb25SZWR1Y2VyKShhLk5BTUVTUEFDRSksbG9hZGluZzooMCxpLmxvYWRpbmdSZWR1Y2VyKShhLk5BTUVTUEFDRSksdmlld01vZGU6bH0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJwcm9qZWN0c1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwic2V0Vmlld01vZGVSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKCl7dmFyIGU7cmV0dXJuIGMuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MiwoMCxwLnNlbGVjdCkoYi5xdWVyeVNlbGVjdG9yKTtjYXNlIDI6cmV0dXJuIGU9dC5zZW50LHQubmV4dD01LCgwLHAucHV0KSgoMCxmLmZldGNoRGF0YUFjdGlvbikoZy5OQU1FU1BBQ0UpKG0uVVJMUy5wcm9qZWN0cygpLHtwYXJhbXM6KDAsXy5kZWZhdWx0KSh7fSxlKX0pKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19LEUsdGhpcyl9ZnVuY3Rpb24gcygpe3JldHVybiBjLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAscC50YWtlRXZlcnkpKGcuRkVUQ0hfUFJPSkVDVFMsbyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx5LHRoaXMpfWZ1bmN0aW9uIGkoZSl7dmFyIHQsbjtyZXR1cm4gYy5kZWZhdWx0LndyYXAoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9KDAsaC5nZXRTdG9yYWdlSXRlbSkoZy5VU0VSX1ZJRVcpfHxnLkdSSURfVklFVyxuPWUucGF5bG9hZC52aWV3TW9kZXx8dCwoMCxoLnNldFN0b3JhZ2VJdGVtKShnLlVTRVJfVklFVyxuKSxyLm5leHQ9NSwoMCxwLnB1dCkoe3R5cGU6Zy5TRVRfUFJPSkVDVFNfVklFV19NT0RFLHBheWxvYWQ6bn0pO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0sdix0aGlzKX1mdW5jdGlvbiBhKCl7cmV0dXJuIGMuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxwLnRha2VFdmVyeSkoZy5TVEFSVF9TRVRfVklFV19NT0RFLGkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sVCx0aGlzKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGMuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxwLmFsbCkoW3MoKSxhKCldKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEEsdGhpcyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLF89cihkKTt0LnByb2plY3RzU2FnYXM9bDt2YXIgcD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxmPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksbT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLGg9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksZz1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvY29uc3RhbnRzLmpzIiksYj1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2VsZWN0b3JzLmpzIiksRT1jLmRlZmF1bHQubWFyayhvKSx5PWMuZGVmYXVsdC5tYXJrKHMpLHY9Yy5kZWZhdWx0Lm1hcmsoaSksVD1jLmRlZmF1bHQubWFyayhhKSxBPWMuZGVmYXVsdC5tYXJrKGwpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaFByb2plY3RzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJ3YXRjaEZldGNoUHJvamVjdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksInNldFZpZXdNb2RlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ3YXRjaFNldFZpZXdNb2RlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJwcm9qZWN0c1NhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnF1ZXJ5U2VsZWN0b3I9dC52aWV3TW9kZVNlbGVjdG9yPXQubG9hZGluZ1NlbGVjdG9yPXQucHJvamVjdHNTZWxlY3Rvcj10LnByb2plY3RzUGFnaW5hdGlvblNlbGVjdG9yPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3Byb2plY3RzL2NvbnN0YW50cy5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NlbGVjdG9ycy5qcyIpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5hZG1pbmlzdHJhdGVEb21haW5TZWxlY3RvcikoZSkucHJvamVjdHN8fHt9fSxhPXQucHJvamVjdHNQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkucGFnaW5hdGlvbn0sbD10LnByb2plY3RzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkucHJvamVjdHN9LHU9dC5sb2FkaW5nU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkubG9hZGluZ3x8ITF9LGM9dC52aWV3TW9kZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBpKGUpLnZpZXdNb2RlfSxkPXQucXVlcnlTZWxlY3Rvcj0oMCxyLmNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yKSh7ZGVmYXVsdFBhZ2luYXRpb246by5ERUZBVUxUX1BBR0lOQVRJT059KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwicHJvamVjdHNQYWdpbmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJwcm9qZWN0c1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwibG9hZGluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywidmlld01vZGVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3Byb2plY3RzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsInF1ZXJ5U2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3Byb2plY3RzL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFkbWluaXN0cmF0ZVJlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvZXZlbnRzL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9pbmRleC5qcyIpLGE9dC5hZG1pbmlzdHJhdGVSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7ZXZlbnRzOm8uZXZlbnRzUmVkdWNlcixhbGxVc2VyczpzLmFsbFVzZXJzUmVkdWNlcixwcm9qZWN0czppLnByb2plY3RzUmVkdWNlcn0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImFkbWluaXN0cmF0ZVJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9yZWR1Y2VyLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlLHQsbjtyZXR1cm4gdS5kZWZhdWx0LndyYXAoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLCgwLF8uc2VsZWN0KShmLnByb2plY3RTZWN0aW9uU2VsZWN0b3IpO2Nhc2UgMjppZigoZT1yLnNlbnQpJiZBW2VdKXtyLm5leHQ9NTticmVha31yZXR1cm4gci5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNTpyZXR1cm4gci5uZXh0PTcsKDAsXy5zZWxlY3QpKGYucHJvamVjdElkU2VsZWN0b3IpO2Nhc2UgNzpyZXR1cm4gdD1yLnNlbnQsbj0hMCxyLm5leHQ9MTEsKDAsXy5wdXQpKEFbZV0odCxuKSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0seSx0aGlzKX1mdW5jdGlvbiBzKCl7cmV0dXJuIHUuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxfLnRha2VFdmVyeSkoRS5GRVRDSF9QUk9KRUNUX0RBVEEsbyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx2LHRoaXMpfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLF8uYWxsKShbKDAsaC5ldmVudHNTYWdhcykoKSxzKCksKDAsZy5hbGxVc2Vyc1NhZ2FzKSgpLCgwLGIucHJvamVjdHNTYWdhcykoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sVCx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksZD1yKGMpO3QuYWRtaW5pc3RyYXRlU2FnYXM9aTt2YXIgXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxwPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcHJvamVjdFNlY3Rpb25zLmpzIiksZj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLG09bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLGg9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9pbmRleC5qcyIpLGc9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2FsbFVzZXJzL2luZGV4LmpzIiksYj1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvcHJvamVjdHMvaW5kZXguanMiKSxFPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9jb25zdGFudHMuanMiKSx5PXUuZGVmYXVsdC5tYXJrKG8pLHY9dS5kZWZhdWx0Lm1hcmsocyksVD11LmRlZmF1bHQubWFyayhpKSxBPShhPXt9LCgwLGQuZGVmYXVsdCkoYSxwLkVWRU5UUyxoLmZldGNoRXZlbnRzQWN0aW9uKSwoMCxkLmRlZmF1bHQpKGEscC5TRVRUSU5HUyxtLmZldGNoUHJvamVjdEFjdGlvbiksYSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZldGNoUHJvamVjdERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIndhdGNoRmV0Y2hQcm9qZWN0RGF0YSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiYWRtaW5pc3RyYXRlU2FnYXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEEsInBhZ2VEYXRhQWN0aW9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NhZ2FzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5hZG1pbmlzdHJhdGVEb21haW5TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZS5hZG1pbmlzdHJhdGV8fHt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJhZG1pbmlzdHJhdGVEb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL3NlbGVjdG9ycy5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5mZXRjaEluZm9BY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9jb25zdGFudHMuanMiKSxpPXQuZmV0Y2hJbmZvQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKDAsci5mZXRjaERhdGFBY3Rpb24pKHMuTkFNRVNQQUNFLCEwKShvLlVSTFMuaW5mbygpKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiZmV0Y2hJbmZvQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hcHBJbmZvL2FjdGlvbkNyZWF0b3JzLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hcHBJbmZvL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5OQU1FU1BBQ0U9ImFwcEluZm8iOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIk5BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9jb25zdGFudHMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhcHBJbmZvUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwSW5mb1JlZHVjZXJ9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEluZm9BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZldGNoSW5mb0FjdGlvbn19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9hcHBJbmZvL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhdXRoRXh0ZW5zaW9uc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hdXRoRXh0ZW5zaW9uc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJidWlsZFZlcnNpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuYnVpbGRWZXJzaW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImluc3RhbmNlSWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuaW5zdGFuY2VJZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhbmFseXRpY3NFbmFibGVkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmFuYWx5dGljc0VuYWJsZWRTZWxlY3Rvcn19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vcmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hcHBJbmZvUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vY29uc3RhbnRzLmpzIikscz10LmFwcEluZm9SZWR1Y2VyPSgwLHIuZmV0Y2hSZWR1Y2VyKShvLk5BTUVTUEFDRSx7aW5pdGlhbFN0YXRlOnt9fSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiYXBwSW5mb1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vcmVkdWNlci5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuYXBwSW5mb1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcEluZm98fHt9fSxvPXQuYnVpbGRWZXJzaW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtyZXR1cm4gdC5idWlsZD90LmJ1aWxkLnZlcnNpb246IiJ9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkuZXh0ZW5zaW9uc3x8e319LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkucmVzdWx0fHx7fX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gcihlKS5VQVR8fHt9fSxsPXQuYXV0aEV4dGVuc2lvbnNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gYShlKS5hdXRoX2V4dGVuc2lvbnN8fHt9fSx1PXQuaW5zdGFuY2VJZFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpWyJzZXJ2ZXIuZGV0YWlscy5pbnN0YW5jZSJdfHwiIn0sYz10LmFuYWx5dGljc0VuYWJsZWRTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4hIWkoZSlbInNlcnZlci5hbmFseXRpY3MuYWxsIl19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJhcHBJbmZvU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiYnVpbGRWZXJzaW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiYXV0aEV4dGVuc2lvbnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJpbnN0YW5jZUlkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiYW5hbHl0aWNzRW5hYmxlZFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hcHBJbmZvL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImV4dGVuc2lvbnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJleHRlbnNpb25Db25maWdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXBwSW5mby9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJVQVRJbmZvU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5yZXNldEFkbWluQWNjZXNzQWN0aW9uPXQuc2V0QWRtaW5BY2Nlc3NBY3Rpb249dC5yZXNldFRva2VuQWN0aW9uPXQuc2V0VG9rZW5BY3Rpb249dC5sb2dvdXRBY3Rpb249dC5sb2dpbkFjdGlvbj10LmF1dGhFcnJvckFjdGlvbj10LmF1dGhTdWNjZXNzQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyIpLG89dC5hdXRoU3VjY2Vzc0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuQVVUSF9TVUNDRVNTfX0scz10LmF1dGhFcnJvckFjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuQVVUSF9FUlJPUn19LGk9dC5sb2dpbkFjdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxvZ2luLG49ZS5wYXNzd29yZDtyZXR1cm57dHlwZTpyLkxPR0lOLHBheWxvYWQ6e2xvZ2luOnQscGFzc3dvcmQ6bn19fSxhPXQubG9nb3V0QWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5MT0dPVVR9fSxsPXQuc2V0VG9rZW5BY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5TRVRfVE9LRU4scGF5bG9hZDplfX0sdT10LnJlc2V0VG9rZW5BY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gbChyLkRFRkFVTFRfVE9LRU4pfSxjPXQuc2V0QWRtaW5BY2Nlc3NBY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLlNFVF9BRE1JTl9BQ0NFU1N9fSxkPXQucmVzZXRBZG1pbkFjY2Vzc0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuUkVTRVRfQURNSU5fQUNDRVNTfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImF1dGhTdWNjZXNzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiYXV0aEVycm9yQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwibG9naW5BY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJsb2dvdXRBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJzZXRUb2tlbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInJlc2V0VG9rZW5BY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJzZXRBZG1pbkFjY2Vzc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsInJlc2V0QWRtaW5BY2Nlc3NBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5UT0tFTl9LRVk9InRva2VuIixvPXQuREVGQVVMVF9UT0tFTj17dHlwZToiQmFzaWMiLHZhbHVlOiJkV2s2ZFdsdFlXND0ifSxzPXQuQVVUSF9TVUNDRVNTPSJhdXRoU3VjY2Vzc0FjdGlvbiIsaT10LkFVVEhfRVJST1I9ImF1dGhFcnJvckFjdGlvbiIsYT10LkxPR09VVD0ibG9nb3V0QWN0aW9uIixsPXQuTE9HSU49ImxvZ2luQWN0aW9uIix1PXQuU0VUX1RPS0VOPSJzZXRUb2tlbiIsYz10LlNFVF9BRE1JTl9BQ0NFU1M9InNldEFkbWluQWNjZXNzIixkPXQuUkVTRVRfQURNSU5fQUNDRVNTPSJyZXNldEFkbWluQWNjZXNzIixfPXQuR1JBTlRfVFlQRVM9e1BBU1NXT1JEOiJwYXNzd29yZCJ9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJUT0tFTl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiREVGQVVMVF9UT0tFTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJBVVRIX1NVQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiQVVUSF9FUlJPUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJMT0dPVVQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiTE9HSU4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiU0VUX1RPS0VOIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlNFVF9BRE1JTl9BQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiUkVTRVRfQURNSU5fQUNDRVNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkdSQU5UX1RZUEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRPS0VOX0tFWSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVE9LRU5fS0VZfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJERUZBVUxUX1RPS0VOIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5ERUZBVUxUX1RPS0VOfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTRVRfVE9LRU4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNFVF9UT0tFTn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvZ2luQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5sb2dpbkFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9nb3V0QWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5sb2dvdXRBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImF1dGhTdWNjZXNzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5hdXRoU3VjY2Vzc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2V0VG9rZW5BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnNldFRva2VuQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZXNldFRva2VuQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5yZXNldFRva2VuQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZXRBZG1pbkFjY2Vzc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2V0QWRtaW5BY2Nlc3NBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlc2V0QWRtaW5BY2Nlc3NBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnJlc2V0QWRtaW5BY2Nlc3NBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImF1dGhSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hdXRoUmVkdWNlcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc0F1dGhvcml6ZWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNBdXRob3JpemVkU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRva2VuU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnRva2VuU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzQWRtaW5BY2Nlc3NTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNBZG1pbkFjY2Vzc1NlbGVjdG9yfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmF1dGhSZWR1Y2VyPXQuaXNBZG1pbkFjY2Vzc1JlZHVjZXI9dC50b2tlblJlZHVjZXI9dC5hdXRob3JpemVkUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvY29uc3RhbnRzLmpzIikscz10LmF1dGhvcml6ZWRSZWR1Y2VyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtzd2l0Y2goYXJndW1lbnRzWzFdLnR5cGUpe2Nhc2Ugby5BVVRIX1NVQ0NFU1M6cmV0dXJuITA7Y2FzZSBvLkxPR09VVDpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiBlfX0saT10LnRva2VuUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpvLkRFRkFVTFRfVE9LRU4sdD1hcmd1bWVudHNbMV0sbj10LnR5cGUscj10LnBheWxvYWQ7c3dpdGNoKG4pe2Nhc2Ugby5TRVRfVE9LRU46cmV0dXJuIHJ8fG8uREVGQVVMVF9UT0tFTjtkZWZhdWx0OnJldHVybiBlfX0sYT10LmlzQWRtaW5BY2Nlc3NSZWR1Y2VyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtzd2l0Y2goYXJndW1lbnRzWzFdLnR5cGUpe2Nhc2Ugby5TRVRfQURNSU5fQUNDRVNTOnJldHVybiEwO2Nhc2Ugby5SRVNFVF9BRE1JTl9BQ0NFU1M6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4gZX19LGw9dC5hdXRoUmVkdWNlcj0oMCxyLmNvbWJpbmVSZWR1Y2Vycykoe2F1dGhvcml6ZWQ6cyx0b2tlbjppLGlzQWRtaW5BY2Nlc3M6YX0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJhdXRob3JpemVkUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwidG9rZW5SZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJpc0FkbWluQWNjZXNzUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiYXV0aFJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC5wdXQpKCgwLHYucmVzZXRUb2tlbkFjdGlvbikoKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxBLHRoaXMpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGgudGFrZUV2ZXJ5KShULkxPR09VVCxyKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEMsdGhpcyl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHIsbz1lLnBheWxvYWQ7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXZvaWQgMCxlLnByZXY9MSxlLm5leHQ9NCwoMCxoLmNhbGwpKGYuZmV0Y2gsbS5VUkxTLmxvZ2luKFQuR1JBTlRfVFlQRVMuUEFTU1dPUkQsby5sb2dpbixvLnBhc3N3b3JkKSx7bWV0aG9kOiJQT1NUIn0pO2Nhc2UgNDp0PWUuc2VudCxlLm5leHQ9MTM7YnJlYWs7Y2FzZSA3OnJldHVybiBlLnByZXY9NyxlLnQwPWUuY2F0Y2goMSksbj1lLnQwLnJlc3BvbnNlJiZlLnQwLnJlc3BvbnNlLmRhdGEmJmUudDAucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHxlLnQwLm1lc3NhZ2UsZS5uZXh0PTEyLCgwLGgucHV0KSgoMCxnLnNob3dOb3RpZmljYXRpb24pKHttZXNzYWdlSWQ6ImZhaWx1cmVEZWZhdWx0Iix0eXBlOmIuTk9USUZJQ0FUSU9OX1RZUEVTLkVSUk9SLHZhbHVlczp7ZXJyb3I6bn19KSk7Y2FzZSAxMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6cmV0dXJuIGUubmV4dD0xNSwoMCxoLnB1dCkoKDAsdi5zZXRUb2tlbkFjdGlvbikoe3R5cGU6dC50b2tlbl90eXBlLHZhbHVlOnQuYWNjZXNzX3Rva2VufSkpO2Nhc2UgMTU6cmV0dXJuIGUubmV4dD0xNyxoLnB1dC5yZXNvbHZlKCgwLEUuZmV0Y2hVc2VyQWN0aW9uKSgpKTtjYXNlIDE3OnJldHVybiBlLm5leHQ9MTksKDAsaC5zZWxlY3QpKEUuYWN0aXZlUHJvamVjdFNlbGVjdG9yKTtjYXNlIDE5OnJldHVybiByPWUuc2VudCxlLm5leHQ9MjIsKDAsaC5wdXQpKCgwLHkuZmV0Y2hQcm9qZWN0QWN0aW9uKShyKSk7Y2FzZSAyMjpyZXR1cm4gZS5uZXh0PTI0LCgwLGgucHV0KSgoMCx2LmF1dGhTdWNjZXNzQWN0aW9uKSgpKTtjYXNlIDI0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxPLHRoaXMsW1sxLDddXSl9ZnVuY3Rpb24gaSgpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC50YWtlRXZlcnkpKFQuTE9HSU4scyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxTLHRoaXMpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5wYXlsb2FkO3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC5jYWxsKShmLnNldFN0b3JhZ2VJdGVtLFQuVE9LRU5fS0VZLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sUix0aGlzKX1mdW5jdGlvbiBsKCl7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxoLnRha2VFdmVyeSkoVC5TRVRfVE9LRU4sYSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxqLHRoaXMpfWZ1bmN0aW9uIHUoKXt2YXIgZTtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLCgwLGguc2VsZWN0KShFLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPXQuc2VudCx0Lm5leHQ9NSwoMCxoLnB1dCkoKDAseS5mZXRjaFByb2plY3RBY3Rpb24pKGUpKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19LHgsdGhpcyl9ZnVuY3Rpb24gYygpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC50YWtlRXZlcnkpKFQuUkVTRVRfQURNSU5fQUNDRVNTLHUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sTCx0aGlzKX1mdW5jdGlvbiBkKCl7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxoLmFsbCkoW2koKSxvKCksbCgpLGMoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRCx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShfKTt0LmF1dGhTYWdhcz1kO3ZhciBmPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLG09bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyIpLGc9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2luZGV4LmpzIiksYj1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vY29uc3RhbnRzLmpzIiksRT1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIikseT1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksdj1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2FjdGlvbkNyZWF0b3JzLmpzIiksVD1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2NvbnN0YW50cy5qcyIpLEE9cC5kZWZhdWx0Lm1hcmsociksQz1wLmRlZmF1bHQubWFyayhvKSxPPXAuZGVmYXVsdC5tYXJrKHMpLFM9cC5kZWZhdWx0Lm1hcmsoaSksUj1wLmRlZmF1bHQubWFyayhhKSxqPXAuZGVmYXVsdC5tYXJrKGwpLHg9cC5kZWZhdWx0Lm1hcmsodSksTD1wLmRlZmF1bHQubWFyayhjKSxEPXAuZGVmYXVsdC5tYXJrKGQpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJoYW5kbGVMb2dvdXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJ3YXRjaExvZ291dCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImhhbmRsZUxvZ2luIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwid2F0Y2hMb2dpbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImhhbmRsZVNldFRva2VuIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwid2F0Y2hTZXRUb2tlbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImhhbmRsZVJlc2V0QWRtaW5BY2Nlc3MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJ3YXRjaFJlc2V0QWRtaW5BY2Nlc3MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJhdXRoU2FnYXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC50b2tlblNlbGVjdG9yPXQuaXNBZG1pbkFjY2Vzc1NlbGVjdG9yPXQuaXNBdXRob3JpemVkU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXV0aHx8e319LGk9dC5pc0F1dGhvcml6ZWRTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4hIXMoZSkuYXV0aG9yaXplZH0sYT10LmlzQWRtaW5BY2Nlc3NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKS5pc0FkbWluQWNjZXNzfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLnRva2VufSx1PWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpLnR5cGV9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkudmFsdWV9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSkrIiAiK2MoZSl9LF89dC50b2tlblNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybigwLG8uZGFzaGJvYXJkRnVsbFNjcmVlbk1vZGVTZWxlY3RvcikoZSk/KDAsci5hcGlUb2tlblN0cmluZ1NlbGVjdG9yKShlKTpkKGUpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiaXNBdXRob3JpemVkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiaXNBZG1pbkFjY2Vzc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sInRva2VuU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2F1dGgvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiYXV0aFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInVzZXJUb2tlblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInRva2VuVHlwZVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInRva2VuVmFsdWVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvYXV0aC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJ0b2tlblN0cmluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9hdXRoL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jaGFuZ2VGdWxsU2NyZWVuTW9kZUFjdGlvbj10LnRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uPXQuYWRkRGFzaGJvYXJkQWN0aW9uPXQuZWRpdERhc2hib2FyZEFjdGlvbj10LmRlbGV0ZURhc2hib2FyZEFjdGlvbj10LmNoYW5nZVZpc2liaWxpdHlUeXBlQWN0aW9uPXQudXBkYXRlRGFzaGJvYXJkV2lkZ2V0c0FjdGlvbj10LmZldGNoRGFzaGJvYXJkQWN0aW9uPXQuZmV0Y2hEYXNoYm9hcmRzQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLGk9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxsPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksYz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQoe3R5cGU6dS5VUERBVEVfREFTSEJPQVJEX0lURU1fU1VDQ0VTUyxwYXlsb2FkOmV9KX19LGQ9dC5mZXRjaERhc2hib2FyZHNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZXx8KDAsYS5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKG4oKSk7KDAscy5mZXRjaCkoaS5VUkxTLmRhc2hib2FyZHMocikpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dCh7dHlwZTp1LkZFVENIX0RBU0hCT0FSRF9TVUNDRVNTLHBheWxvYWQ6ZS5jb250ZW50fSl9KX19LF89dC5mZXRjaERhc2hib2FyZEFjdGlvbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPSgwLGEuYWN0aXZlUHJvamVjdFNlbGVjdG9yKSh0KCkpLHI9KDAsbC5hY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yKSh0KCkpOygwLHMuZmV0Y2gpKGkuVVJMUy5kYXNoYm9hcmQobixyKSkudGhlbihmdW5jdGlvbih0KXtjKHQpKGUpfSkuY2F0Y2goZnVuY3Rpb24oKXsodm9pZCAwKS5wcm9wcy5yZWRpcmVjdCh7dHlwZTpsLlBST0pFQ1RfREFTSEJPQVJEX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOm59fSl9KX19LHA9dC51cGRhdGVEYXNoYm9hcmRXaWRnZXRzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPSgwLGEuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShuKCkpO3JldHVybigwLHMuZmV0Y2gpKGkuVVJMUy5kYXNoYm9hcmQocixlLmlkKSx7bWV0aG9kOiJQVVQiLGRhdGE6e3VwZGF0ZVdpZGdldHM6ZS53aWRnZXRzfX0pLnRoZW4oZnVuY3Rpb24oKXtjKGUpKHQpfSl9fSxmPXQuY2hhbmdlVmlzaWJpbGl0eVR5cGVBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPSgwLHMuZ2V0U3RvcmFnZUl0ZW0pKCJkYXNoYm9hcmRfdHlwZSIpfHx1LkRBU0hCT0FSRFNfVEFCTEVfVklFVyxyPWV8fG47KDAscy5zZXRTdG9yYWdlSXRlbSkoImRhc2hib2FyZF90eXBlIixyKSx0KHt0eXBlOnUuQ0hBTkdFX1ZJU0lCSUxJVFlfVFlQRSxwYXlsb2FkOnJ9KX19LG09dC5kZWxldGVEYXNoYm9hcmRBY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj0oMCxhLmFjdGl2ZVByb2plY3RTZWxlY3RvcikobigpKTsoMCxzLmZldGNoKShpLlVSTFMuZGFzaGJvYXJkKHIsdCkse21ldGhvZDoiREVMRVRFIn0pLnRoZW4oZnVuY3Rpb24oKXtlKHt0eXBlOnUuREVMRVRFX0RBU0hCT0FSRF9JVEVNX1NVQ0NFU1MscGF5bG9hZDp0fSl9KX19LGg9dC5lZGl0RGFzaGJvYXJkQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPSgwLGEuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShuKCkpLGw9ZS5uYW1lLHU9ZS5kZXNjcmlwdGlvbixkPWUuc2hhcmUsXz1lLmlkOygwLHMuZmV0Y2gpKGkuVVJMUy5kYXNoYm9hcmQocixfKSx7bWV0aG9kOiJQVVQiLGRhdGE6e25hbWU6bCxkZXNjcmlwdGlvbjp1LHNoYXJlOmR9fSkudGhlbihmdW5jdGlvbihuKXt2YXIgcj0oMCxvLmRlZmF1bHQpKHt9LGUsbik7YyhyKSh0KX0pfX0sZz10LmFkZERhc2hib2FyZEFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsoMCxzLmZldGNoKShpLlVSTFMuZGFzaGJvYXJkcygoMCxhLmFjdGl2ZVByb2plY3RTZWxlY3RvcikobigpKSkse21ldGhvZDoiUE9TVCIsZGF0YTplfSkudGhlbihmdW5jdGlvbihyKXt2YXIgcz0oMCxvLmRlZmF1bHQpKHt9LGUscix7b3duZXI6KDAsYS51c2VySWRTZWxlY3RvcikobigpKX0pO3Qoe3R5cGU6dS5BRERfREFTSEJPQVJEX0lURU1fU1VDQ0VTUyxwYXlsb2FkOnN9KX0pfX0sYj10LnRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dS5UT0dHTEVfRlVMTF9TQ1JFRU5fTU9ERX19LEU9dC5jaGFuZ2VGdWxsU2NyZWVuTW9kZUFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTp1LkNIQU5HRV9GVUxMX1NDUkVFTl9NT0RFLHBheWxvYWQ6ZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJmZXRjaERhc2hib2FyZHNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImZldGNoRGFzaGJvYXJkQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJ1cGRhdGVEYXNoYm9hcmRXaWRnZXRzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJjaGFuZ2VWaXNpYmlsaXR5VHlwZUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiZGVsZXRlRGFzaGJvYXJkQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJlZGl0RGFzaGJvYXJkQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJhZGREYXNoYm9hcmRBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsInRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJjaGFuZ2VGdWxsU2NyZWVuTW9kZUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywidXBkYXRlRGFzaGJvYXJkSXRlbUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UT0dHTEVfRlVMTF9TQ1JFRU5fTU9ERT10LkNIQU5HRV9GVUxMX1NDUkVFTl9NT0RFPXQuREFTSEJPQVJEU19HUklEX1ZJRVc9dC5EQVNIQk9BUkRTX1RBQkxFX1ZJRVc9dC5ERUxFVEVfREFTSEJPQVJEX0lURU1fU1VDQ0VTUz10LkFERF9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTPXQuVVBEQVRFX0RBU0hCT0FSRF9JVEVNX1NVQ0NFU1M9dC5DSEFOR0VfVklTSUJJTElUWV9UWVBFPXQuRkVUQ0hfREFTSEJPQVJEX1NVQ0NFU1M9dC5JTklUSUFMX1NUQVRFPXQuZGFzaGJvYXJkSXRlbVByb3BUeXBlcz12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPXQuZGFzaGJvYXJkSXRlbVByb3BUeXBlcz1vLmRlZmF1bHQuc2hhcGUoe2lkOm8uZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxuYW1lOm8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0pLGk9dC5JTklUSUFMX1NUQVRFPXtkYXNoYm9hcmRJdGVtczpbXSxncmlkVHlwZToiIixmdWxsU2NyZWVuTW9kZTohMX0sYT10LkZFVENIX0RBU0hCT0FSRF9TVUNDRVNTPSJmZXRjaERhc2hib2FyZFN1Y2Nlc3MiLGw9dC5DSEFOR0VfVklTSUJJTElUWV9UWVBFPSJjaGFuZ2VWaXNpYmlsaXR5VHlwZSIsdT10LlVQREFURV9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTPSJVcGRhdGVEYXNoYm9hcmRJdGVtSW5pdGlhbGl6ZSIsYz10LkFERF9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTPSJBZGREYXNoYm9hcmRJdGVtU3VjY2VzcyIsZD10LkRFTEVURV9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTPSJEZWxldGVEYXNoYm9hcmRJdGVtU3VjY2VzcyIsXz10LkRBU0hCT0FSRFNfVEFCTEVfVklFVz0idGFibGUiLHA9dC5EQVNIQk9BUkRTX0dSSURfVklFVz0iZ3JpZCIsZj10LkNIQU5HRV9GVUxMX1NDUkVFTl9NT0RFPSJjaGFuZ2VGdWxsU2NyZWVuTW9kZSIsbT10LlRPR0dMRV9GVUxMX1NDUkVFTl9NT0RFPSJ0b2dnbGVGdWxsU2NyZWVuTW9kZSI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImRhc2hib2FyZEl0ZW1Qcm9wVHlwZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJJTklUSUFMX1NUQVRFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRkVUQ0hfREFTSEJPQVJEX1NVQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJDSEFOR0VfVklTSUJJTElUWV9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiVVBEQVRFX0RBU0hCT0FSRF9JVEVNX1NVQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJBRERfREFTSEJPQVJEX0lURU1fU1VDQ0VTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkRFTEVURV9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiREFTSEJPQVJEU19UQUJMRV9WSUVXIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiREFTSEJPQVJEU19HUklEX1ZJRVciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJDSEFOR0VfRlVMTF9TQ1JFRU5fTU9ERSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIlRPR0dMRV9GVUxMX1NDUkVFTl9NT0RFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hEYXNoYm9hcmRzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mZXRjaERhc2hib2FyZHNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNoYW5nZVZpc2liaWxpdHlUeXBlQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jaGFuZ2VWaXNpYmlsaXR5VHlwZUFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVsZXRlRGFzaGJvYXJkQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWxldGVEYXNoYm9hcmRBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImVkaXREYXNoYm9hcmRBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmVkaXREYXNoYm9hcmRBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFkZERhc2hib2FyZEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRGFzaGJvYXJkQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaERhc2hib2FyZEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmV0Y2hEYXNoYm9hcmRBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVwZGF0ZURhc2hib2FyZFdpZGdldHNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnVwZGF0ZURhc2hib2FyZFdpZGdldHNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50b2dnbGVGdWxsU2NyZWVuTW9kZUFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2hhbmdlRnVsbFNjcmVlbk1vZGVBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZUZ1bGxTY3JlZW5Nb2RlQWN0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRhc2hib2FyZFJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRhc2hib2FyZFJlZHVjZXJ9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkYXNoYm9hcmRJdGVtc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kYXNoYm9hcmRJdGVtc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkYXNoYm9hcmRHcmlkVHlwZVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kYXNoYm9hcmRHcmlkVHlwZVNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhY3RpdmVEYXNoYm9hcmRJdGVtU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmFjdGl2ZURhc2hib2FyZEl0ZW1TZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGFzaGJvYXJkRnVsbFNjcmVlbk1vZGVTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGFzaGJvYXJkRnVsbFNjcmVlbk1vZGVTZWxlY3Rvcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRBU0hCT0FSRFNfVEFCTEVfVklFVyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuREFTSEJPQVJEU19UQUJMRV9WSUVXfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEQVNIQk9BUkRTX0dSSURfVklFVyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuREFTSEJPQVJEU19HUklEX1ZJRVd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRhc2hib2FyZEl0ZW1Qcm9wVHlwZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRhc2hib2FyZEl0ZW1Qcm9wVHlwZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNIQU5HRV9GVUxMX1NDUkVFTl9NT0RFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5DSEFOR0VfRlVMTF9TQ1JFRU5fTU9ERX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVE9HR0xFX0ZVTExfU0NSRUVOX01PREUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLlRPR0dMRV9GVUxMX1NDUkVFTl9NT0RFfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGFzaGJvYXJkUmVkdWNlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvY29uc3RhbnRzLmpzIiksdT10LmRhc2hib2FyZFJlZHVjZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bC5JTklUSUFMX1NUQVRFLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGwuRkVUQ0hfREFTSEJPQVJEX1NVQ0NFU1M6cmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxlLHtkYXNoYm9hcmRJdGVtczpyfSk7Y2FzZSBsLkNIQU5HRV9WSVNJQklMSVRZX1RZUEU6cmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxlLHtncmlkVHlwZTpyfSk7Y2FzZSBsLkFERF9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSx7ZGFzaGJvYXJkSXRlbXM6W10uY29uY2F0KCgwLHMuZGVmYXVsdCkoZS5kYXNoYm9hcmRJdGVtcyksW3JdKX0pO2Nhc2UgbC5ERUxFVEVfREFTSEJPQVJEX0lURU1fU1VDQ0VTUzpyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LGUse2Rhc2hib2FyZEl0ZW1zOmUuZGFzaGJvYXJkSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkIT09cn0pfSk7Y2FzZSBsLlVQREFURV9EQVNIQk9BUkRfSVRFTV9TVUNDRVNTOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSx7ZGFzaGJvYXJkSXRlbXM6ZS5kYXNoYm9hcmRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT1yLmlkP3I6ZX0pfSk7Y2FzZSBsLkNIQU5HRV9GVUxMX1NDUkVFTl9NT0RFOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSx7ZnVsbFNjcmVlbk1vZGU6cn0pO2Nhc2UgbC5UT0dHTEVfRlVMTF9TQ1JFRU5fTU9ERTpyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LGUse2Z1bGxTY3JlZW5Nb2RlOiFlLmZ1bGxTY3JlZW5Nb2RlfSk7ZGVmYXVsdDpyZXR1cm4gZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImRhc2hib2FyZFJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9yZWR1Y2VyLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRhc2hib2FyZEZ1bGxTY3JlZW5Nb2RlU2VsZWN0b3I9dC5hY3RpdmVEYXNoYm9hcmRJdGVtU2VsZWN0b3I9dC5kYXNoYm9hcmRHcmlkVHlwZVNlbGVjdG9yPXQuZGFzaGJvYXJkSXRlbXNTZWxlY3Rvcj10LmRhc2hib2FyZEl0ZW1zVW5zb3J0ZWRTZWxlY3Rvcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGFzaGJvYXJkfHx7fX0saT10LmRhc2hib2FyZEl0ZW1zVW5zb3J0ZWRTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKS5kYXNoYm9hcmRJdGVtc30sYT10LmRhc2hib2FyZEl0ZW1zU2VsZWN0b3I9KDAsci5jcmVhdGVTZWxlY3RvcikoaSxmdW5jdGlvbihlKXtyZXR1cm4gZS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZS5sb2NhbGVDb21wYXJlKHQubmFtZSl9KX0pLGw9dC5kYXNoYm9hcmRHcmlkVHlwZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLmdyaWRUeXBlfSx1PXQuYWN0aXZlRGFzaGJvYXJkSXRlbVNlbGVjdG9yPSgwLHIuY3JlYXRlU2VsZWN0b3IpKGksby5hY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXR9KXx8e319KSxjPXQuZGFzaGJvYXJkRnVsbFNjcmVlbk1vZGVTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKS5mdWxsU2NyZWVuTW9kZX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImRhc2hib2FyZEl0ZW1zVW5zb3J0ZWRTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImRhc2hib2FyZEl0ZW1zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJkYXNoYm9hcmRHcmlkVHlwZVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiYWN0aXZlRGFzaGJvYXJkSXRlbVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiZGFzaGJvYXJkRnVsbFNjcmVlbk1vZGVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImRvbWFpblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29uY2F0RmV0Y2hEYXRhQWN0aW9uPXQuY29uY2F0RmV0Y2hTdWNjZXNzQWN0aW9uPXQuYnVsa0ZldGNoRGF0YUFjdGlvbj10LmZldGNoRGF0YUFjdGlvbj10LmZldGNoU3RhcnRBY3Rpb249dC5mZXRjaEVycm9yQWN0aW9uPXQuZmV0Y2hTdWNjZXNzQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9jb25zdGFudHMuanMiKSxvPXQuZmV0Y2hTdWNjZXNzQWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5GRVRDSF9TVUNDRVNTLHBheWxvYWQ6dCxtZXRhOntuYW1lc3BhY2U6ZX19fSxzPXQuZmV0Y2hFcnJvckFjdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJue3R5cGU6ci5GRVRDSF9FUlJPUixwYXlsb2FkOnQsbWV0YTp7bmFtZXNwYWNlOmUsc2lsZW50Om59fX0saT10LmZldGNoU3RhcnRBY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZTpyLkZFVENIX1NUQVJULHBheWxvYWQ6dCxtZXRhOntuYW1lc3BhY2U6ZX19fSxhPXQuZmV0Y2hEYXRhQWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7cmV0dXJue3R5cGU6ci5GRVRDSF9EQVRBLHBheWxvYWQ6e3VybDpuLG9wdGlvbnM6b30sbWV0YTp7bmFtZXNwYWNlOmUsc2lsZW50OnR9fX19LGw9dC5idWxrRmV0Y2hEYXRhQWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7cmV0dXJue3R5cGU6ci5CVUxLX0ZFVENIX0RBVEEscGF5bG9hZDp7dXJsczpuLG9wdGlvbnM6b30sbWV0YTp7bmFtZXNwYWNlOmUsc2lsZW50OnR9fX19LHU9dC5jb25jYXRGZXRjaFN1Y2Nlc3NBY3Rpb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt0eXBlOnIuQ09OQ0FUX0ZFVENIX1NVQ0NFU1MscGF5bG9hZDp0LG1ldGE6e25hbWVzcGFjZTplfSxjb25jYXQ6bn19LGM9dC5jb25jYXRGZXRjaERhdGFBY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixvKXtyZXR1cm57dHlwZTpyLkNPTkNBVF9GRVRDSF9EQVRBLHBheWxvYWQ6e3VybDpuLG9wdGlvbnM6byxjb25jYXQ6dH0sbWV0YTp7bmFtZXNwYWNlOmV9fX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaFN1Y2Nlc3NBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZmV0Y2hFcnJvckFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJmZXRjaFN0YXJ0QWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImZldGNoRGF0YUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJidWxrRmV0Y2hEYXRhQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImNvbmNhdEZldGNoU3VjY2Vzc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjb25jYXRGZXRjaERhdGFBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkZFVENIX0RBVEE9ImZldGNoRGF0YSIsbz10LkJVTEtfRkVUQ0hfREFUQT0iYnVsa0ZldGNoRGF0YSIscz10LkNPTkNBVF9GRVRDSF9EQVRBPSJjb25jYXRGZXRjaERhdGEiLGk9dC5DT05DQVRfRkVUQ0hfU1VDQ0VTUz0iY29uY2F0RmV0Y2hTdWNjZXNzIixhPXQuRkVUQ0hfU1RBUlQ9ImZldGNoU3RhcnQiLGw9dC5GRVRDSF9TVUNDRVNTPSJmZXRjaFN1Y2Nlc3MiLHU9dC5GRVRDSF9FUlJPUj0iZmV0Y2hFcnJvciIsYz10LklOSVRJQUxfU1RBVEU9W10sZD10LkRFRkFVTFRfT1BUSU9OUz17aW5pdGlhbFN0YXRlOmN9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJGRVRDSF9EQVRBIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJCVUxLX0ZFVENIX0RBVEEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIkNPTkNBVF9GRVRDSF9EQVRBIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJDT05DQVRfRkVUQ0hfU1VDQ0VTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRkVUQ0hfU1RBUlQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkZFVENIX1NVQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkZFVENIX0VSUk9SIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJJTklUSUFMX1NUQVRFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJERUZBVUxUX09QVElPTlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFNhZ2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mZXRjaFNhZ2FzfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoRGF0YUFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZmV0Y2hEYXRhQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEVycm9yQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaEVycm9yQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFN1Y2Nlc3NBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZldGNoU3VjY2Vzc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYnVsa0ZldGNoRGF0YUFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYnVsa0ZldGNoRGF0YUFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY29uY2F0RmV0Y2hEYXRhQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jb25jYXRGZXRjaERhdGFBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNvbmNhdEZldGNoU3VjY2Vzc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY29uY2F0RmV0Y2hTdWNjZXNzQWN0aW9ufX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5mZXRjaFJlZHVjZXJ9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZFVENIX1NVQ0NFU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkZFVENIX1NVQ0NFU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZFVENIX1NUQVJUIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5GRVRDSF9TVEFSVH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRkVUQ0hfRVJST1IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkZFVENIX0VSUk9SfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDT05DQVRfRkVUQ0hfU1VDQ0VTUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuQ09OQ0FUX0ZFVENIX1NVQ0NFU1N9fSl9LCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvY29uc3RhbnRzLmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImluaXRpYWxTdGF0ZSIpP2UuaW5pdGlhbFN0YXRlOnIuREVGQVVMVF9PUFRJT05TLmluaXRpYWxTdGF0ZX0scz10LmZldGNoUmVkdWNlcj1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ci5ERUZBVUxUX09QVElPTlM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm8odCkscz1hcmd1bWVudHNbMV0saT1zLnR5cGUsYT1zLnBheWxvYWQsbD1zLm1ldGEsdT1zLmNvbmNhdDtpZihsJiZsLm5hbWVzcGFjZSYmbC5uYW1lc3BhY2UhPT1lKXJldHVybiBuO3ZhciBjPXQuY29udGVudFBhdGh8fHIuREVGQVVMVF9PUFRJT05TLmNvbnRlbnRQYXRoO3N3aXRjaChpKXtjYXNlIHIuRkVUQ0hfU1VDQ0VTUzpyZXR1cm4gYz9hW2NdOmE7Y2FzZSByLkNPTkNBVF9GRVRDSF9TVUNDRVNTOnZhciBkPWM/YVtjXTphO3JldHVybiBkIGluc3RhbmNlb2YgQXJyYXkmJnU/bi5jb25jYXQoZCk6ZDtjYXNlIHIuRkVUQ0hfRVJST1I6cmV0dXJuIG8odCk7ZGVmYXVsdDpyZXR1cm4gbn19fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZmV0Y2hSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiY29tcHV0ZUluaXRpYWxTdGF0ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL3NhZ2FzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbixyLG8scz1lLnBheWxvYWQsaT1lLm1ldGE7cmV0dXJuIG0uZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubmFtZXNwYWNlLG49cy51cmxzLHI9aS5zaWxlbnQ/STpnLmZldGNoLGUucHJldj0zLGUubmV4dD02LCgwLGgucHV0KSgoMCxBLmZldGNoU3RhcnRBY3Rpb24pKHQscykpO2Nhc2UgNjpyZXR1cm4gZS5uZXh0PTgsKDAsaC5hbGwpKG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLGguY2FsbCkocixlLHMub3B0aW9ucyl9KSk7Y2FzZSA4OnJldHVybiBvPWUuc2VudCxlLm5leHQ9MTEsKDAsaC5wdXQpKCgwLEEuZmV0Y2hTdWNjZXNzQWN0aW9uKSh0LG8pKTtjYXNlIDExOmUubmV4dD0xNzticmVhaztjYXNlIDEzOnJldHVybiBlLnByZXY9MTMsZS50MD1lLmNhdGNoKDMpLGUubmV4dD0xNywoMCxoLnB1dCkoKDAsQS5mZXRjaEVycm9yQWN0aW9uKSh0LGUudDApKTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxDLHRoaXMsW1szLDEzXV0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQsbixyLG8scyxpPWUucGF5bG9hZCxhPWUubWV0YTtyZXR1cm4gbS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9YS5uYW1lc3BhY2Usbj1pLnVybCxyPWkub3B0aW9ucyxvPWkuY29uY2F0LGUucHJldj0yLGUubmV4dD01LCgwLGgucHV0KSgoMCxBLmZldGNoU3RhcnRBY3Rpb24pKHQsaSkpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsKDAsaC5jYWxsKShnLmZldGNoLG4scik7Y2FzZSA3OnJldHVybiBzPWUuc2VudCxlLm5leHQ9MTAsKDAsaC5wdXQpKCgwLEEuY29uY2F0RmV0Y2hTdWNjZXNzQWN0aW9uKSh0LHMsbykpO2Nhc2UgMTA6ZS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTI6cmV0dXJuIGUucHJldj0xMixlLnQwPWUuY2F0Y2goMiksZS5uZXh0PTE2LCgwLGgucHV0KSgoMCxBLmZldGNoRXJyb3JBY3Rpb24pKHQsZS50MCkpO2Nhc2UgMTY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LE8sdGhpcyxbWzIsMTJdXSl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHI9ZS5wYXlsb2FkLG89ZS5tZXRhO3JldHVybiBtLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1vLm5hbWVzcGFjZSxlLnByZXY9MSxlLm5leHQ9NCwoMCxoLnB1dCkoKDAsQS5mZXRjaFN0YXJ0QWN0aW9uKSh0LHIpKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LCgwLGguY2FsbCkoZy5mZXRjaCxyLnVybCxyLm9wdGlvbnMpO2Nhc2UgNjpyZXR1cm4gbj1lLnNlbnQsZS5uZXh0PTksKDAsaC5wdXQpKCgwLEEuZmV0Y2hTdWNjZXNzQWN0aW9uKSh0LG4pKTtjYXNlIDk6ZS5uZXh0PTE1O2JyZWFrO2Nhc2UgMTE6cmV0dXJuIGUucHJldj0xMSxlLnQwPWUuY2F0Y2goMSksZS5uZXh0PTE1LCgwLGgucHV0KSgoMCxBLmZldGNoRXJyb3JBY3Rpb24pKHQsZS50MCxvLnNpbGVudCkpO2Nhc2UgMTU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LFMsdGhpcyxbWzEsMTFdXSl9ZnVuY3Rpb24gaSgpe3ZhciBlO3JldHVybiBtLmRlZmF1bHQud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsKDAsaC5zZWxlY3QpKEUudG9rZW5TZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPXQuc2VudCx0Lm5leHQ9NSwoMCxoLmNhbGwpKGcudXBkYXRlVG9rZW4sZSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSxSLHRoaXMpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gbS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGgudGFrZUV2ZXJ5KShbRS5TRVRfVE9LRU4seS5TRVRfQVBJX1RPS0VOLHYuQ0hBTkdFX0ZVTExfU0NSRUVOX01PREUsdi5UT0dHTEVfRlVMTF9TQ1JFRU5fTU9ERV0saSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxqLHRoaXMpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGgudGFrZUV2ZXJ5KShULkJVTEtfRkVUQ0hfREFUQSxyKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LHgsdGhpcyl9ZnVuY3Rpb24gdSgpe3JldHVybiBtLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC50YWtlRXZlcnkpKFQuQ09OQ0FUX0ZFVENIX0RBVEEsbyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxMLHRoaXMpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gbS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGgudGFrZUV2ZXJ5KShULkZFVENIX0RBVEEscyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxELHRoaXMpfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZS5wYXlsb2FkLG49ZS5tZXRhO249dm9pZCAwPT09bj97fTpuO3ZhciByPW4uc2lsZW50O3JldHVybiBtLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighcil7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LCgwLGgucHV0KSgoMCxiLnNob3dOb3RpZmljYXRpb24pKHttZXNzYWdlOnQubWVzc2FnZSx0eXBlOmIuTk9USUZJQ0FUSU9OX1RZUEVTLkVSUk9SfSkpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sdyx0aGlzKX1mdW5jdGlvbiBfKCl7cmV0dXJuIG0uZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxoLnRha2VFdmVyeSkoVC5GRVRDSF9FUlJPUixkKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LE0sdGhpcyl9ZnVuY3Rpb24gcCgpe3JldHVybiBtLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsaC5hbGwpKFtjKCksXygpLGwoKSx1KCksYSgpXSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxrLHRoaXMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksbT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGYpO3QuZmV0Y2hTYWdhcz1wO3ZhciBoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyIpLGc9bigiLi9zcmMvY29tbW9uL3V0aWxzL2ZldGNoLmpzIiksYj1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vaW5kZXguanMiKSxFPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvaW5kZXguanMiKSx5PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSx2PW4oIi4vc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9pbmRleC5qcyIpLFQ9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvY29uc3RhbnRzLmpzIiksQT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9hY3Rpb25DcmVhdG9ycy5qcyIpLEM9bS5kZWZhdWx0Lm1hcmsociksTz1tLmRlZmF1bHQubWFyayhvKSxTPW0uZGVmYXVsdC5tYXJrKHMpLFI9bS5kZWZhdWx0Lm1hcmsoaSksaj1tLmRlZmF1bHQubWFyayhhKSx4PW0uZGVmYXVsdC5tYXJrKGwpLEw9bS5kZWZhdWx0Lm1hcmsodSksRD1tLmRlZmF1bHQubWFyayhjKSx3PW0uZGVmYXVsdC5tYXJrKGQpLE09bS5kZWZhdWx0Lm1hcmsoXyksaz1tLmRlZmF1bHQubWFyayhwKSxJPWZ1bmN0aW9uKCl7cmV0dXJuIGcuZmV0Y2guYXBwbHkodm9pZCAwLGFyZ3VtZW50cykuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiYnVsa0ZldGNoRGF0YSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJjb25jYXRGZXRjaERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZmV0Y2hEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksInVwZGF0ZVRva2VuV29ya2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIndhdGNoVXBkYXRlVG9rZW4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZldGNoL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwid2F0Y2hCdWxrRmV0Y2hEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIndhdGNoQ29uY2F0RmV0Y2hEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIndhdGNoRmV0Y2hEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImhhbmRsZUVycm9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIndhdGNoRmV0Y2hFcnJvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmV0Y2gvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJmZXRjaFNhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEksInNpbGVudEZldGNoIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9mZXRjaC9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51cGRhdGVGaWx0ZXJTdWNjZXNzQWN0aW9uPXQuc2F2ZU5ld0ZpbHRlckFjdGlvbj10LmFkZEZpbHRlckFjdGlvbj10LnJlbW92ZUxhdW5jaGVzRmlsdGVyQWN0aW9uPXQucmVtb3ZlRmlsdGVyQWN0aW9uPXQuY3JlYXRlRmlsdGVyQWN0aW9uPXQucmVzZXRGaWx0ZXJBY3Rpb249dC51cGRhdGVGaWx0ZXJBY3Rpb249dC51cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9uPXQuY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9uPXQuZmV0Y2hVc2VyRmlsdGVyc1N1Y2Nlc3NBY3Rpb249dC5mZXRjaEZpbHRlcnNDb25jYXRBY3Rpb249dC5mZXRjaEZpbHRlcnNBY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxvPXQuZmV0Y2hGaWx0ZXJzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuRkVUQ0hfRklMVEVSUyxwYXlsb2FkOmV9fSxzPXQuZmV0Y2hGaWx0ZXJzQ29uY2F0QWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuRkVUQ0hfRklMVEVSU19DT05DQVQscGF5bG9hZDplfX0saT10LmZldGNoVXNlckZpbHRlcnNTdWNjZXNzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuRkVUQ0hfVVNFUl9GSUxURVJTX1NVQ0NFU1MscGF5bG9hZDplfX0sYT10LmNoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLkNIQU5HRV9BQ1RJVkVfRklMVEVSLHBheWxvYWQ6ZX19LGw9dC51cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ci5VUERBVEVfRklMVEVSX0NPTkRJVElPTlMscGF5bG9hZDp7ZmlsdGVySWQ6ZSxjb25kaXRpb25zOnR9fX0sdT10LnVwZGF0ZUZpbHRlckFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLlVQREFURV9GSUxURVIscGF5bG9hZDplfX0sYz10LnJlc2V0RmlsdGVyQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuUkVTRVRfRklMVEVSLHBheWxvYWQ6ZX19LGQ9dC5jcmVhdGVGaWx0ZXJBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5DUkVBVEVfRklMVEVSLHBheWxvYWQ6ZX19LF89dC5yZW1vdmVGaWx0ZXJBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5SRU1PVkVfRklMVEVSLHBheWxvYWQ6ZX19LHA9dC5yZW1vdmVMYXVuY2hlc0ZpbHRlckFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLlJFTU9WRV9MQVVOQ0hFU19GSUxURVIscGF5bG9hZDplfX0sZj10LmFkZEZpbHRlckFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpyLkFERF9GSUxURVIscGF5bG9hZDplfX0sbT10LnNhdmVOZXdGaWx0ZXJBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5TQVZFX05FV19GSUxURVIscGF5bG9hZDplfX0saD10LnVwZGF0ZUZpbHRlclN1Y2Nlc3NBY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm57dHlwZTpyLlVQREFURV9GSUxURVJfU1VDQ0VTUyxwYXlsb2FkOmUsbWV0YTp7b2xkSWQ6dH19fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZmV0Y2hGaWx0ZXJzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJmZXRjaEZpbHRlcnNDb25jYXRBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImZldGNoVXNlckZpbHRlcnNTdWNjZXNzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJjaGFuZ2VBY3RpdmVGaWx0ZXJBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInVwZGF0ZUZpbHRlckNvbmRpdGlvbnNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInVwZGF0ZUZpbHRlckFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywicmVzZXRGaWx0ZXJBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImNyZWF0ZUZpbHRlckFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywicmVtb3ZlRmlsdGVyQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJyZW1vdmVMYXVuY2hlc0ZpbHRlckFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiYWRkRmlsdGVyQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJzYXZlTmV3RmlsdGVyQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJ1cGRhdGVGaWx0ZXJTdWNjZXNzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfRklMVEVSPXQuRkVUQ0hfVVNFUl9GSUxURVJTX1NVQ0NFU1M9dC5VUERBVEVfRklMVEVSX1NVQ0NFU1M9dC5SRU1PVkVfTEFVTkNIRVNfRklMVEVSPXQuUkVNT1ZFX0ZJTFRFUj10LlNBVkVfTkVXX0ZJTFRFUj10LkFERF9GSUxURVI9dC5DUkVBVEVfRklMVEVSPXQuUkVTRVRfRklMVEVSPXQuVVBEQVRFX0ZJTFRFUj10LlVQREFURV9GSUxURVJfQ09ORElUSU9OUz10LkNIQU5HRV9BQ1RJVkVfRklMVEVSPXQuTEFVTkNIRVNfRklMVEVSU19VUERBVEVfTkFNRVNQQUNFPXQuTEFVTkNIRVNfRklMVEVSU19OQU1FU1BBQ0U9dC5ERUZBVUxUX1BBR0lOQVRJT049dC5ERUZBVUxUX1BBR0VfU0laRT10Lk5BTUVTUEFDRT10LkZFVENIX0ZJTFRFUlNfQ09OQ0FUPXQuRkVUQ0hfRklMVEVSUz12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksYT10LkZFVENIX0ZJTFRFUlM9ImZldGNoRmlsdGVycyIsbD10LkZFVENIX0ZJTFRFUlNfQ09OQ0FUPSJmZXRjaEZpbHRlcnNDb25jYXQiLHU9dC5OQU1FU1BBQ0U9ImZpbHRlcnMiLGM9dC5ERUZBVUxUX1BBR0VfU0laRT01MCxkPXQuREVGQVVMVF9QQUdJTkFUSU9OPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLlBBR0VfS0VZLDEpLCgwLHMuZGVmYXVsdCkocixpLlNJWkVfS0VZLGMpLHIpLF89dC5MQVVOQ0hFU19GSUxURVJTX05BTUVTUEFDRT11KyIvbGF1bmNoZXNGaWx0ZXJzIixwPXQuTEFVTkNIRVNfRklMVEVSU19VUERBVEVfTkFNRVNQQUNFPXUrIi9sYXVuY2hlc0ZpbHRlcnNVcGRhdGUiLGY9dC5DSEFOR0VfQUNUSVZFX0ZJTFRFUj0iY2hhbmdlQWN0aXZlRmlsdGVyIixtPXQuVVBEQVRFX0ZJTFRFUl9DT05ESVRJT05TPSJ1cGRhdGVGaWx0ZXJDb25kaXRpb25zIixoPXQuVVBEQVRFX0ZJTFRFUj0idXBkYXRlRmlsdGVyIixnPXQuUkVTRVRfRklMVEVSPSJyZXNldEZpbHRlciIsYj10LkNSRUFURV9GSUxURVI9ImNyZWF0ZUZpbHRlciIsRT10LkFERF9GSUxURVI9ImFkZEZpbHRlciIseT10LlNBVkVfTkVXX0ZJTFRFUj0ic2F2ZU5ld0ZpbHRlciIsdj10LlJFTU9WRV9GSUxURVI9InJlbW92ZUZpbHRlciIsVD10LlJFTU9WRV9MQVVOQ0hFU19GSUxURVI9InJlbW92ZUxhdW5jaGVzRmlsdGVyIixBPXQuVVBEQVRFX0ZJTFRFUl9TVUNDRVNTPSJ1cGRhdGVGaWx0ZXJTdWNjZXNzIixDPXQuRkVUQ0hfVVNFUl9GSUxURVJTX1NVQ0NFU1M9ImZldGNoVXNlckZpbHRlcnNTdWNjZXNzIixPPXQuREVGQVVMVF9GSUxURVI9e2NvbmRpdGlvbnM6W10sdHlwZToibGF1bmNoIixvcmRlcnM6W3tpc0FzYzohMSxzb3J0aW5nQ29sdW1uOiJzdGFydFRpbWUifSx7aXNBc2M6ITEsc29ydGluZ0NvbHVtbjoibnVtYmVyIn1dfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRkVUQ0hfRklMVEVSUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkZFVENIX0ZJTFRFUlNfQ09OQ0FUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiREVGQVVMVF9QQUdFX1NJWkUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJERUZBVUxUX1BBR0lOQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJMQVVOQ0hFU19GSUxURVJTX05BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkxBVU5DSEVTX0ZJTFRFUlNfVVBEQVRFX05BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkNIQU5HRV9BQ1RJVkVfRklMVEVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiVVBEQVRFX0ZJTFRFUl9DT05ESVRJT05TIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiVVBEQVRFX0ZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIlJFU0VUX0ZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsIkNSRUFURV9GSUxURVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJBRERfRklMVEVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwiU0FWRV9ORVdfRklMVEVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwiUkVNT1ZFX0ZJTFRFUiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFQsIlJFTU9WRV9MQVVOQ0hFU19GSUxURVIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJVUERBVEVfRklMVEVSX1NVQ0NFU1MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJGRVRDSF9VU0VSX0ZJTFRFUlNfU1VDQ0VTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sIkRFRkFVTFRfRklMVEVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvd2l0aEZpbHRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwid2l0aEZpbHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIud2l0aEZpbHRlcn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hGaWx0ZXJzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaEZpbHRlcnNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoRmlsdGVyc0NvbmNhdEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZmV0Y2hGaWx0ZXJzQ29uY2F0QWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFVzZXJGaWx0ZXJzU3VjY2Vzc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZmV0Y2hVc2VyRmlsdGVyc1N1Y2Nlc3NBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby51cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1cGRhdGVGaWx0ZXJBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnVwZGF0ZUZpbHRlckFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVzZXRGaWx0ZXJBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnJlc2V0RmlsdGVyQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVGaWx0ZXJBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmNyZWF0ZUZpbHRlckFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2F2ZU5ld0ZpbHRlckFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2F2ZU5ld0ZpbHRlckFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVtb3ZlRmlsdGVyQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5yZW1vdmVGaWx0ZXJBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZUxhdW5jaGVzRmlsdGVyQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5yZW1vdmVMYXVuY2hlc0ZpbHRlckFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWRkRmlsdGVyQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5hZGRGaWx0ZXJBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmlsdGVyUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZmlsdGVyUmVkdWNlcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbHRlcnNQYWdpbmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmZpbHRlcnNQYWdpbmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbHRlcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZmlsdGVyc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkaW5nU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmxvYWRpbmdTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGF1bmNoRmlsdGVyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sYXVuY2hGaWx0ZXJzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGl2ZUZpbHRlclNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hY3RpdmVGaWx0ZXJTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidW5zYXZlZEZpbHRlcklkc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51bnNhdmVkRmlsdGVySWRzU2VsZWN0b3J9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbHRlclNhZ2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWx0ZXJTYWdhc319KTt2YXIgbD1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRFRkFVTFRfUEFHRV9TSVpFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5ERUZBVUxUX1BBR0VfU0laRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTEFVTkNIRVNfRklMVEVSU19OQU1FU1BBQ0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLkxBVU5DSEVTX0ZJTFRFUlNfTkFNRVNQQUNFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBRERfRklMVEVSIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5BRERfRklMVEVSfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSRU1PVkVfRklMVEVSIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5SRU1PVkVfRklMVEVSfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVUERBVEVfRklMVEVSX1NVQ0NFU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLlVQREFURV9GSUxURVJfU1VDQ0VTU319KTt2YXIgdT1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvdXRpbHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlRmlsdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS51cGRhdGVGaWx0ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFkZEZpbHRlcmluZ0ZpZWxkVG9Db25kaXRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5hZGRGaWx0ZXJpbmdGaWVsZFRvQ29uZGl0aW9uc319KX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZpbHRlclJlZHVjZXI9dC5sYXVuY2hlc0ZpbHRlcnNSZWR1Y2VyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGM9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9pbmRleC5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvbG9hZGluZy9pbmRleC5qcyIpLF89bigiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL2NvbnN0YW50cy5qcyIpLHA9bigiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3V0aWxzLmpzIiksZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pO3JldHVybigwLHAudXBkYXRlRmlsdGVyKShlLCgwLGEuZGVmYXVsdCkoe30scix7Y29uZGl0aW9uczpufSkpfSxtPXQubGF1bmNoZXNGaWx0ZXJzUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZCxvPXQubWV0YTtvPXZvaWQgMD09PW8/e306bzt2YXIgaT1vLm9sZElkO3N3aXRjaChuKXtjYXNlIF8uRkVUQ0hfVVNFUl9GSUxURVJTX1NVQ0NFU1M6cmV0dXJuIHI7Y2FzZSBfLlVQREFURV9GSUxURVJfQ09ORElUSU9OUzpyZXR1cm4gZihlLHIuZmlsdGVySWQsci5jb25kaXRpb25zKTtjYXNlIF8uVVBEQVRFX0ZJTFRFUl9TVUNDRVNTOnJldHVybigwLHAudXBkYXRlRmlsdGVyKShlLHIsaSk7Y2FzZSBfLkFERF9GSUxURVI6cmV0dXJuW10uY29uY2F0KCgwLHMuZGVmYXVsdCkoZSksW3JdKTtjYXNlIF8uUkVNT1ZFX0ZJTFRFUjpyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQhPT1yfSk7ZGVmYXVsdDpyZXR1cm4gZX19LGg9dC5maWx0ZXJSZWR1Y2VyPSgwLGwuY29tYmluZVJlZHVjZXJzKSh7ZmlsdGVyczooMCx1LmZldGNoUmVkdWNlcikoXy5OQU1FU1BBQ0Use2NvbnRlbnRQYXRoOiJjb250ZW50In0pLHBhZ2luYXRpb246KDAsYy5wYWdpbmF0aW9uUmVkdWNlcikoXy5OQU1FU1BBQ0UpLGxvYWRpbmc6KDAsZC5sb2FkaW5nUmVkdWNlcikoXy5OQU1FU1BBQ0UpLGxhdW5jaGVzRmlsdGVyczptfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImxhdW5jaGVzRmlsdGVyc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiZmlsdGVyUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJ1cGRhdGVGaWx0ZXJDb25kaXRpb25zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKCl7dmFyIGUsdDtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLCgwLE8uc2VsZWN0KShqLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPW4uc2VudCxuLm5leHQ9NSwoMCxPLnNlbGVjdCkoUC5xdWVyeVNlbGVjdG9yKTtjYXNlIDU6cmV0dXJuIHQ9bi5zZW50LG4ubmV4dD04LCgwLE8ucHV0KSgoMCxSLmZldGNoRGF0YUFjdGlvbikoSS5OQU1FU1BBQ0UpKHguVVJMUy5maWx0ZXJzKGUpLHtwYXJhbXM6KDAsQy5kZWZhdWx0KSh7fSx0KX0pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LEgsdGhpcyl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxuLHI9ZS5wYXlsb2FkLG89ci5wYXJhbXMscz1yLmNvbmNhdDtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8uc2VsZWN0KShqLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLm5leHQ9NSwoMCxPLnNlbGVjdCkoUC5xdWVyeVNlbGVjdG9yKTtjYXNlIDU6cmV0dXJuIG49ZS5zZW50LGUubmV4dD04LCgwLE8ucHV0KSgoMCxSLmNvbmNhdEZldGNoRGF0YUFjdGlvbikoSS5OQU1FU1BBQ0UscykoeC5VUkxTLmZpbHRlcnModCkse3BhcmFtczooMCxDLmRlZmF1bHQpKHt9LG4sbyl9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxGLHRoaXMpfWZ1bmN0aW9uIGkoZSl7dmFyIHQsbj1lLnBheWxvYWQ7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLnNlbGVjdCkoai5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5uZXh0PTUsKDAsTy5wdXQpKCgwLFIuZmV0Y2hEYXRhQWN0aW9uKShJLkxBVU5DSEVTX0ZJTFRFUlNfVVBEQVRFX05BTUVTUEFDRSkoeC5VUkxTLmZpbHRlcih0LG4uaWQpLHttZXRob2Q6InB1dCIsZGF0YTooMCxNLm9taXQpKG4sWyJpZCJdKX0pKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LCgwLE8ucHV0KSgoMCxOLnVwZGF0ZUZpbHRlclN1Y2Nlc3NBY3Rpb24pKG4pKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEIsdGhpcyl9ZnVuY3Rpb24gYShlKXt2YXIgdCxuPWUucGF5bG9hZDtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8uc2VsZWN0KShqLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLm5leHQ9NSwoMCxPLnB1dCkoKDAsUy5yZWRpcmVjdCkoe3R5cGU6dy5QUk9KRUNUX0xBVU5DSEVTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnQsZmlsdGVySWQ6bn19KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxVLHRoaXMpfWZ1bmN0aW9uIGwoZSl7dmFyIHQsbixyPWUucGF5bG9hZDtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8uc2VsZWN0KShMLnVzZXJGaWx0ZXJzU2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsbj10LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT1yfSksZS5uZXh0PTYsKDAsTy5wdXQpKCgwLE4udXBkYXRlRmlsdGVyU3VjY2Vzc0FjdGlvbikobikpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRyx0aGlzKX1mdW5jdGlvbiB1KGUpe3ZhciB0LG4scixvPWUucGF5bG9hZCxzPXZvaWQgMD09PW8/e306bztyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8uc2VsZWN0KShQLmxhdW5jaEZpbHRlcnNTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxuPXQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaWQ8ZT90LmlkOmV9LDApLHI9KDAsQy5kZWZhdWx0KSh7fSxJLkRFRkFVTFRfRklMVEVSLHMse2lkOm4tMSxuYW1lOmsuTkVXX0ZJTFRFUl9QUkVGSVgrIiAiKy0obi0xKX0pLGUubmV4dD03LCgwLE8ucHV0KSgoMCxOLmFkZEZpbHRlckFjdGlvbikocikpO2Nhc2UgNzpyZXR1cm4gZS5uZXh0PTksKDAsTy5wdXQpKCgwLE4uY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9uKShyLmlkKSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx6LHRoaXMpfWZ1bmN0aW9uIGMoZSl7dmFyIHQsbixyLG8scz1lLnBheWxvYWQ7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLnNlbGVjdCkoai5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5uZXh0PTUsKDAsTy5wdXQpKCgwLFIuZmV0Y2hEYXRhQWN0aW9uKShJLkxBVU5DSEVTX0ZJTFRFUlNfVVBEQVRFX05BTUVTUEFDRSkoeC5VUkxTLmZpbHRlcih0KSx7bWV0aG9kOiJwb3N0IixkYXRhOigwLE0ub21pdCkocyxbImlkIl0pfSkpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsKDAsTy50YWtlKShmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUsbj1lLm1ldGE7cmV0dXJuIHQ9PT1SLkZFVENIX1NVQ0NFU1MmJm4mJm4ubmFtZXNwYWNlPT09SS5MQVVOQ0hFU19GSUxURVJTX1VQREFURV9OQU1FU1BBQ0V9KTtjYXNlIDc6cmV0dXJuIG49ZS5zZW50LHI9bi5wYXlsb2FkLmlkLG89KDAsQy5kZWZhdWx0KSh7fSxzLHtpZDpyfSksZS5uZXh0PTEyLCgwLE8ucHV0KSgoMCxOLnVwZGF0ZUZpbHRlclN1Y2Nlc3NBY3Rpb24pKG8scy5pZCkpO2Nhc2UgMTI6cmV0dXJuIGUubmV4dD0xNCwoMCxPLnB1dCkoKDAsTC51cGRhdGVQcm9qZWN0RmlsdGVyUHJlZmVyZW5jZXNBY3Rpb24pKG8uaWQsIlBVVCIpKTtjYXNlIDE0OnJldHVybiBlLm5leHQ9MTYsKDAsTy5wdXQpKCgwLE4uY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9uKShyKSk7Y2FzZSAxNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sVix0aGlzKX1mdW5jdGlvbiBkKCl7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLnRha2VFdmVyeSkoSS5GRVRDSF9GSUxURVJTLG8pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sVyx0aGlzKX1mdW5jdGlvbiBfKCl7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLnRha2VFdmVyeSkoSS5GRVRDSF9GSUxURVJTX0NPTkNBVCxzKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LFksdGhpcyl9ZnVuY3Rpb24gcChlKXt2YXIgdCxuPWUucGF5bG9hZDtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8uc2VsZWN0KShELmxhdW5jaERpc3RpbmN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5uZXh0PTUsKDAsTy5wdXQpKCgwLE4uY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9uKSh0KSk7Y2FzZSA1OnJldHVybiBlLm5leHQ9NywoMCxPLnB1dCkoKDAsTi5yZW1vdmVGaWx0ZXJBY3Rpb24pKG4pKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LHEsdGhpcyl9ZnVuY3Rpb24gZigpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsTy50YWtlRXZlcnkpKEkuQ0hBTkdFX0FDVElWRV9GSUxURVIsYSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxLLHRoaXMpfWZ1bmN0aW9uIG0oKXtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLE8udGFrZUV2ZXJ5KShJLlJFU0VUX0ZJTFRFUixsKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LFgsdGhpcyl9ZnVuY3Rpb24gaCgpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsTy50YWtlRXZlcnkpKEkuVVBEQVRFX0ZJTFRFUixpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LCQsdGhpcyl9ZnVuY3Rpb24gZygpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsTy50YWtlRXZlcnkpKEkuQ1JFQVRFX0ZJTFRFUix1KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LFEsdGhpcyl9ZnVuY3Rpb24gYigpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsTy50YWtlRXZlcnkpKEkuU0FWRV9ORVdfRklMVEVSLGMpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sSix0aGlzKX1mdW5jdGlvbiBFKCl7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLnRha2VFdmVyeSkoSS5SRU1PVkVfTEFVTkNIRVNfRklMVEVSLHApO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sWix0aGlzKX1mdW5jdGlvbiB5KCl7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxPLmFsbCkoW2QoKSxfKCksZigpLG0oKSxoKCksZygpLGIoKSxFKCldKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGVlLHRoaXMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxDPXIoQSk7dC5maWx0ZXJTYWdhcz15O3ZhciBPPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyIpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxSPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksaj1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIikseD1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLEw9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLEQ9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2luZGV4LmpzIiksdz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tbW9uL3V0aWxzL29taXQuanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcmVzZXJ2ZWRGaWx0ZXJJZHMuanMiKSxJPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9jb25zdGFudHMuanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9hY3Rpb25DcmVhdG9ycy5qcyIpLEg9VC5kZWZhdWx0Lm1hcmsobyksRj1ULmRlZmF1bHQubWFyayhzKSxCPVQuZGVmYXVsdC5tYXJrKGkpLFU9VC5kZWZhdWx0Lm1hcmsoYSksRz1ULmRlZmF1bHQubWFyayhsKSx6PVQuZGVmYXVsdC5tYXJrKHUpLFY9VC5kZWZhdWx0Lm1hcmsoYyksVz1ULmRlZmF1bHQubWFyayhkKSxZPVQuZGVmYXVsdC5tYXJrKF8pLHE9VC5kZWZhdWx0Lm1hcmsocCksSz1ULmRlZmF1bHQubWFyayhmKSxYPVQuZGVmYXVsdC5tYXJrKG0pLCQ9VC5kZWZhdWx0Lm1hcmsoaCksUT1ULmRlZmF1bHQubWFyayhnKSxKPVQuZGVmYXVsdC5tYXJrKGIpLFo9VC5kZWZhdWx0Lm1hcmsoRSksZWU9VC5kZWZhdWx0Lm1hcmsoeSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZldGNoRmlsdGVycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZmV0Y2hGaWx0ZXJzQ29uY2F0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJ1cGRhdGVMYXVuY2hlc0ZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiY2hhbmdlQWN0aXZlRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJyZXNldEZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiY3JlYXRlRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJzYXZlTmV3RmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJ3YXRjaEZldGNoRmlsdGVycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywid2F0Y2hGZXRjaEZpbHRlcnNDb25jYXQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsInJlc2V0QWN0aXZlRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJ3YXRjaENoYW5nZUFjdGl2ZUZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwid2F0Y2hSZXNldEZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwid2F0Y2hVcGRhdGVMYXVuY2hlc0ZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywid2F0Y2hDcmVhdGVGaWx0ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsIndhdGNoU2F2ZU5ld0ZpbHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwid2F0Y2hSZW1vdmVGaWx0ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImZpbHRlclNhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnVuc2F2ZWRGaWx0ZXJJZHNTZWxlY3Rvcj10LmFjdGl2ZUZpbHRlclNlbGVjdG9yPXQubGF1bmNoRmlsdGVyc1NlbGVjdG9yPXQucXVlcnlTZWxlY3Rvcj10LmxvYWRpbmdTZWxlY3Rvcj10LmZpbHRlcnNTZWxlY3Rvcj10LmZpbHRlcnNQYWdpbmF0aW9uU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3Jlc2VsZWN0L2xpYi9pbmRleC5qcyIpLG89bigiLi9ub2RlX21vZHVsZXMvZmFzdC1kZWVwLWVxdWFsL2luZGV4LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksbD1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvY29uc3RhbnRzLmpzIiksdT1mdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXJzfHx7fX0sYz10LmZpbHRlcnNQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSkucGFnaW5hdGlvbn0sZD10LmZpbHRlcnNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdShlKS5maWx0ZXJzfSxfPXQubG9hZGluZ1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmxvYWRpbmd8fCExfSxwPXQucXVlcnlTZWxlY3Rvcj0oMCxpLmNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yKSh7ZGVmYXVsdFBhZ2luYXRpb246bC5ERUZBVUxUX1BBR0lOQVRJT04sZGVmYXVsdFNvcnRpbmc6Im5hbWUifSksZj10LmxhdW5jaEZpbHRlcnNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdShlKS5sYXVuY2hlc0ZpbHRlcnN8fFtdfSxtPXQuYWN0aXZlRmlsdGVyU2VsZWN0b3I9KDAsci5jcmVhdGVTZWxlY3RvcikoZixpLmZpbHRlcklkU2VsZWN0b3IsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pfSksaD10LnVuc2F2ZWRGaWx0ZXJJZHNTZWxlY3Rvcj0oMCxyLmNyZWF0ZVNlbGVjdG9yKShmLGEudXNlckZpbHRlcnNTZWxlY3RvcixmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQ9PT1lLmlkfSk7cmV0dXJuIG4mJiEoMCxzLmRlZmF1bHQpKGUsbik/bi5pZDpudWxsfSkuZmlsdGVyKEJvb2xlYW4pfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImZpbHRlcnNQYWdpbmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJmaWx0ZXJzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJsb2FkaW5nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJxdWVyeVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwibGF1bmNoRmlsdGVyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiYWN0aXZlRmlsdGVyU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJ1bnNhdmVkRmlsdGVySWRzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRGaWx0ZXJpbmdGaWVsZFRvQ29uZGl0aW9ucz10LnVwZGF0ZUZpbHRlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSx1PXIobCksYz10LnVwZGF0ZUZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnx8dC5pZCxvPWUuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09cn0pO2lmKC0xPT09bylyZXR1cm5bXS5jb25jYXQoKDAsdS5kZWZhdWx0KShlKSxbdF0pO3ZhciBzPVtdLmNvbmNhdCgoMCx1LmRlZmF1bHQpKGUpKTtyZXR1cm4gcy5zcGxpY2UobywxLHQpLHN9LGQ9dC5hZGRGaWx0ZXJpbmdGaWVsZFRvQ29uZGl0aW9ucz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4oMCxhLmRlZmF1bHQpKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4oMCxzLmRlZmF1bHQpKHt9LGVbdF0se2ZpbHRlcmluZ0ZpZWxkOnR9KX0pfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywidXBkYXRlRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJhZGRGaWx0ZXJpbmdGaWVsZFRvQ29uZGl0aW9ucyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3V0aWxzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3dpdGhGaWx0ZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJKFAodCxlKSxlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQud2l0aEZpbHRlcj12b2lkIDA7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPW8oaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSx1PW8obCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPW8oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPW8oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPW8oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9byhoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9byhiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHY9byh5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksaz17RmlsdGVyV3JhcHBlcjp7ZGlzcGxheU5hbWU6IkZpbHRlcldyYXBwZXIiLGlzSW5GdW5jdGlvbjohMH19LEk9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3dpdGhGaWx0ZXIuanN4Iixjb21wb25lbnRzOmssbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksUD0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvd2l0aEZpbHRlci5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W10saW1wb3J0czpbUi5kZWZhdWx0LEEuZGVmYXVsdF19KSxOPWZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkocikscz0wO3M8cjtzKyspb1tzXT1hcmd1bWVudHNbc107Y2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChmdW5jdGlvbigpe249bnVsbCxlLmFwcGx5KHZvaWQgMCxvKX0sdCl9fSxIPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5maWx0ZXJLZXksbj12b2lkIDA9PT10PyJmaWx0ZXIuY250Lm5hbWUiOnQsbz1lLm5hbWVzcGFjZTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsaTtyZXR1cm4oMCxNLmNvbm5lY3RSb3V0ZXIpKGZ1bmN0aW9uKGUpe3JldHVybntmaWx0ZXI6ZVtuXX19LHt1cGRhdGVGaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHQ9e30sKDAsdi5kZWZhdWx0KSh0LG4sZSksKDAsdi5kZWZhdWx0KSh0LHcuUEFHRV9LRVksMSksdH19LHtuYW1lc3BhY2U6b30pKHMoIkZpbHRlcldyYXBwZXIiKSgoaT10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXt2YXIgZSx0LHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsbik7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gdD1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT1uLl9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KShuKSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZUZpbHRlckNoYW5nZT1OKGZ1bmN0aW9uKGUpe3IucHJvcHMudXBkYXRlRmlsdGVyKGV8fHZvaWQgMCl9LDMwMCksbz10LCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKG4sdCksKDAsbS5kZWZhdWx0KShuLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQuZmlsdGVyLG89KHQudXBkYXRlRmlsdGVyLCgwLHUuZGVmYXVsdCkodCxbImZpbHRlciIsInVwZGF0ZUZpbHRlciJdKSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChlLCgwLGEuZGVmYXVsdCkoe2ZpbHRlcjpuLG9uRmlsdGVyQ2hhbmdlOnRoaXMuaGFuZGxlRmlsdGVyQ2hhbmdlfSxvKSl9fV0pLG59KFMuQ29tcG9uZW50KSx0LmRpc3BsYXlOYW1lPSJ3aXRoRmlsdGVyKCIrKGUuZGlzcGxheU5hbWV8fGUubmFtZSkrIikiLHQucHJvcFR5cGVzPXtmaWx0ZXI6RC5kZWZhdWx0LnN0cmluZyx1cGRhdGVGaWx0ZXI6RC5kZWZhdWx0LmZ1bmN9LHQuZGVmYXVsdFByb3BzPXtmaWx0ZXI6bnVsbCx1cGRhdGVGaWx0ZXI6ZnVuY3Rpb24oKXt9fSxpKSkpfX07dC53aXRoRmlsdGVyPUg7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIndpdGhGaWx0ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci93aXRoRmlsdGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCJmaWx0ZXIuY250Lm5hbWUiLCJGSUxURVJfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9maWx0ZXIvd2l0aEZpbHRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJkZWJvdW5jZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZmlsdGVyL3dpdGhGaWx0ZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVQcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249dC5zZXRMYXN0T3BlcmF0aW9uTmFtZUFjdGlvbj10LnVuc2VsZWN0QWxsSXRlbXNBY3Rpb249dC50b2dnbGVBbGxJdGVtc0FjdGlvbj10LnVuc2VsZWN0SXRlbXNBY3Rpb249dC5zZWxlY3RJdGVtc0FjdGlvbj10LnRvZ2dsZUl0ZW1TZWxlY3Rpb25BY3Rpb249dC5yZW1vdmVWYWxpZGF0aW9uRXJyb3JBY3Rpb249dC5yZW1vdmVWYWxpZGF0aW9uRXJyb3JzQWN0aW9uPXQucmVzZXRWYWxpZGF0aW9uRXJyb3JzQWN0aW9uPXQuc2V0VmFsaWRhdGlvbkVycm9yc0FjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLG89dC5zZXRWYWxpZGF0aW9uRXJyb3JzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm57dHlwZTpyLlNFVF9WQUxJREFUSU9OX0VSUk9SUyxwYXlsb2FkOnQsbWV0YTp7bmFtZXNwYWNlOmV9fX19LHM9dC5yZXNldFZhbGlkYXRpb25FcnJvcnNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5TRVRfVkFMSURBVElPTl9FUlJPUlMscGF5bG9hZDp7fSxtZXRhOntuYW1lc3BhY2U6ZX19fX0saT10LnJlbW92ZVZhbGlkYXRpb25FcnJvcnNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOnIuUkVNT1ZFX1ZBTElEQVRJT05fRVJST1JTLHBheWxvYWQ6dCxtZXRhOntuYW1lc3BhY2U6ZX19fX0sYT10LnJlbW92ZVZhbGlkYXRpb25FcnJvckFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6ci5SRU1PVkVfVkFMSURBVElPTl9FUlJPUlMscGF5bG9hZDpbdF0sbWV0YTp7bmFtZXNwYWNlOmV9fX19LGw9dC50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm57dHlwZTpyLlRPR0dMRV9JVEVNX1NFTEVDVElPTixwYXlsb2FkOnQsbWV0YTp7bmFtZXNwYWNlOmV9fX19LHU9dC5zZWxlY3RJdGVtc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6ci5TRUxFQ1RfSVRFTVMscGF5bG9hZDp0LG1ldGE6e25hbWVzcGFjZTplfX19fSxjPXQudW5zZWxlY3RJdGVtc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6ci5VTlNFTEVDVF9JVEVNUyxwYXlsb2FkOnQsbWV0YTp7bmFtZXNwYWNlOmV9fX19LGQ9dC50b2dnbGVBbGxJdGVtc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6ci5UT0dHTEVfQUxMX0lURU1TLHBheWxvYWQ6dCxtZXRhOntuYW1lc3BhY2U6ZX19fX0sXz10LnVuc2VsZWN0QWxsSXRlbXNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5VTlNFTEVDVF9BTExfSVRFTVMsbWV0YTp7bmFtZXNwYWNlOmV9fX19LHA9dC5zZXRMYXN0T3BlcmF0aW9uTmFtZUFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6ci5TRVRfTEFTVF9PUEVSQVRJT05fTkFNRSxwYXlsb2FkOnQsbWV0YTp7bmFtZXNwYWNlOmV9fX19LGY9dC5jcmVhdGVQcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixvKXtyZXR1cm57dHlwZTpyLlBST0NFRURfV0lUSF9WQUxJRF9JVEVNUyxwYXlsb2FkOntuYW1lOnQsc2VsZWN0ZWRJdGVtczpuLGFkZGl0aW9uYWxBcmdzOm99LG1ldGE6e25hbWVzcGFjZTplfX19fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywic2V0VmFsaWRhdGlvbkVycm9yc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywicmVzZXRWYWxpZGF0aW9uRXJyb3JzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJyZW1vdmVWYWxpZGF0aW9uRXJyb3JzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJyZW1vdmVWYWxpZGF0aW9uRXJyb3JBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInRvZ2dsZUl0ZW1TZWxlY3Rpb25BY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInNlbGVjdEl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJ1bnNlbGVjdEl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJ0b2dnbGVBbGxJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywidW5zZWxlY3RBbGxJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwic2V0TGFzdE9wZXJhdGlvbk5hbWVBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImNyZWF0ZVByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5UT0dHTEVfSVRFTV9TRUxFQ1RJT049InRvZ2dsZUl0ZW1TZWxlY3Rpb24iLG89dC5TRUxFQ1RfSVRFTVM9InNlbGVjdEl0ZW1zIixzPXQuVU5TRUxFQ1RfSVRFTVM9InVuc2VsZWN0SXRlbXMiLGk9dC5UT0dHTEVfQUxMX0lURU1TPSJ0b2dnbGVBbGxJdGVtcyIsYT10LlVOU0VMRUNUX0FMTF9JVEVNUz0idW5zZWxlY3RBbGxJdGVtcyIsbD10LlNFVF9WQUxJREFUSU9OX0VSUk9SUz0ic2V0VmFsaWRhdGlvbkVycm9ycyIsdT10LlJFU0VUX1ZBTElEQVRJT05fRVJST1JTPSJyZXNldFZhbGlkYXRpb25FcnJvcnMiLGM9dC5SRU1PVkVfVkFMSURBVElPTl9FUlJPUlM9InJlbW92ZVZhbGlkYXRpb25FcnJvcnNBY3Rpb24iLGQ9dC5TRVRfTEFTVF9PUEVSQVRJT05fTkFNRT0ic2V0TGFzdE9wZXJhdGlvbk5hbWUiLF89dC5FWEVDVVRFX0dST1VQX09QRVJBVElPTj0iZXhlY3V0ZUdyb3VwT3BlcmF0aW9uIixwPXQuUFJPQ0VFRF9XSVRIX1ZBTElEX0lURU1TPSJwcm9jZWVkV2l0aFZhbGlkSXRlbXMiLGY9dC5WQUxJREFUSU9OX0VSUk9SU19JTklUSUFMX1NUQVRFPXt9LG09dC5TRUxFQ1RFRF9JVEVNU19JTklUSUFMX1NUQVRFPVtdLGg9dC5MQVNUX09QRVJBVElPTl9JTklUSUFMX1NUQVRFPSIiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJUT0dHTEVfSVRFTV9TRUxFQ1RJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJTRUxFQ1RfSVRFTVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJVTlNFTEVDVF9JVEVNUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIlRPR0dMRV9BTExfSVRFTVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJVTlNFTEVDVF9BTExfSVRFTVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJTRVRfVkFMSURBVElPTl9FUlJPUlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJSRVNFVF9WQUxJREFUSU9OX0VSUk9SUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlJFTU9WRV9WQUxJREFUSU9OX0VSUk9SUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlNFVF9MQVNUX09QRVJBVElPTl9OQU1FIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiRVhFQ1VURV9HUk9VUF9PUEVSQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJQUk9DRUVEX1dJVEhfVkFMSURfSVRFTVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJWQUxJREFUSU9OX0VSUk9SU19JTklUSUFMX1NUQVRFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiU0VMRUNURURfSVRFTVNfSU5JVElBTF9TVEFURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsIkxBU1RfT1BFUkFUSU9OX0lOSVRJQUxfU1RBVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZWxlY3RJdGVtc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc2VsZWN0SXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVuc2VsZWN0QWxsSXRlbXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnVuc2VsZWN0QWxsSXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY3JlYXRlUHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b2dnbGVBbGxJdGVtc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudG9nZ2xlQWxsSXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZVZhbGlkYXRpb25FcnJvcnNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnJlbW92ZVZhbGlkYXRpb25FcnJvcnNBY3Rpb259fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ3JvdXBPcGVyYXRpb25zUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZ3JvdXBPcGVyYXRpb25zUmVkdWNlcn19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvdXRpbHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmaW5lR3JvdXBPcGVyYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmluZUdyb3VwT3BlcmF0aW9ufX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJncm91cE9wZXJhdGlvbnNTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBPcGVyYXRpb25zU2FnYXN9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVMYXN0T3BlcmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUxhc3RPcGVyYXRpb25TZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jcmVhdGVTZWxlY3RlZEl0ZW1zU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVZhbGlkYXRpb25FcnJvcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlVmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ3JvdXBPcGVyYXRpb25zUmVkdWNlcj10Lmxhc3RPcGVyYXRpb25SZWR1Y2VyPXQudmFsaWRhdGlvbkVycm9yc1JlZHVjZXI9dC5zZWxlY3RlZEl0ZW1zUmVkdWNlcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLHA9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2NvbnN0YW50cy5qcyIpLGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkPT09ZX19LG09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5maW5kKGYodC5pZCkpP2UuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkIT09dC5pZH0pOltdLmNvbmNhdCgoMCxkLmRlZmF1bHQpKGUpLFt0XSl9LGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bXS5jb25jYXQoKDAsZC5kZWZhdWx0KShlKSwoMCxkLmRlZmF1bHQpKHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLmZpbmQoZih0LmlkKSl9KSkpfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiF0LmZpbmQoZihlLmlkKSl9KX0sYj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD4wJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiEhZS5maW5kKGYodC5pZCkpfSk/ZyhlLHQpOmgoZSx0KX0sRT10LnNlbGVjdGVkSXRlbXNSZWR1Y2VyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpwLlNFTEVDVEVEX0lURU1TX0lOSVRJQUxfU1RBVEUsbj1hcmd1bWVudHNbMV0scj1uLnR5cGUsbz1uLnBheWxvYWQscz1uLm1ldGE7aWYocyYmcy5uYW1lc3BhY2UmJnMubmFtZXNwYWNlIT09ZSlyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSBwLlRPR0dMRV9JVEVNX1NFTEVDVElPTjpyZXR1cm4gbSh0LG8pO2Nhc2UgcC5TRUxFQ1RfSVRFTVM6cmV0dXJuIGgodCxvKTtjYXNlIHAuVU5TRUxFQ1RfSVRFTVM6cmV0dXJuIGcodCxvKTtjYXNlIHAuVE9HR0xFX0FMTF9JVEVNUzpyZXR1cm4gYih0LG8pO2Nhc2UgcC5VTlNFTEVDVF9BTExfSVRFTVM6cmV0dXJuW107ZGVmYXVsdDpyZXR1cm4gdH19fSx5PXQudmFsaWRhdGlvbkVycm9yc1JlZHVjZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnAuVkFMSURBVElPTl9FUlJPUlNfSU5JVElBTF9TVEFURSxuPWFyZ3VtZW50c1sxXSxyPW4udHlwZSxvPW4ucGF5bG9hZCxpPW4ubWV0YTtpZihpJiZpLm5hbWVzcGFjZSYmaS5uYW1lc3BhY2UhPT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIHAuU0VUX1ZBTElEQVRJT05fRVJST1JTOnJldHVybigwLHUuZGVmYXVsdCkoe30sbyk7Y2FzZSBwLlJFTU9WRV9WQUxJREFUSU9OX0VSUk9SUzp2YXIgbD0oMCxhLmRlZmF1bHQpKHQpLGM9by5tYXAoU3RyaW5nKTtyZXR1cm4gbC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx1LmRlZmF1bHQpKHt9LGUsKDAscy5kZWZhdWx0KSh7fSxuLHRbbl0pKX0scC5WQUxJREFUSU9OX0VSUk9SU19JTklUSUFMX1NUQVRFKTtjYXNlIHAuUkVTRVRfVkFMSURBVElPTl9FUlJPUlM6cmV0dXJuIHAuVkFMSURBVElPTl9FUlJPUlNfSU5JVElBTF9TVEFURTtkZWZhdWx0OnJldHVybiB0fX19LHY9dC5sYXN0T3BlcmF0aW9uUmVkdWNlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06cC5MQVNUX09QRVJBVElPTl9JTklUSUFMX1NUQVRFLG49YXJndW1lbnRzWzFdLHI9bi50eXBlLG89bi5wYXlsb2FkLHM9bi5tZXRhO2lmKHMmJnMubmFtZXNwYWNlJiZzLm5hbWVzcGFjZSE9PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgcC5TRVRfTEFTVF9PUEVSQVRJT05fTkFNRTpyZXR1cm4gbztkZWZhdWx0OnJldHVybiB0fX19LFQ9dC5ncm91cE9wZXJhdGlvbnNSZWR1Y2VyPWZ1bmN0aW9uKGUpe3JldHVybigwLF8uY29tYmluZVJlZHVjZXJzKSh7c2VsZWN0ZWRJdGVtczpFKGUpLGVycm9yczp5KGUpLGxhc3RPcGVyYXRpb246dihlKX0pfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwic2VsZWN0ZWRJdGVtc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwidmFsaWRhdGlvbkVycm9yc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwibGFzdE9wZXJhdGlvblJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiZ3JvdXBPcGVyYXRpb25zUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJjcmVhdGVJZENvbXBhcmF0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwidG9nZ2xlSXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJzZWxlY3RJdGVtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJ1bnNlbGVjdEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsInNlbGVjdEFsbCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3JlZHVjZXIuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLnBheWxvYWQsbj1lLm1ldGEubmFtZXNwYWNlO3JldHVybiBiLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsRS5wdXQpKCgwLHkucmVtb3ZlVmFsaWRhdGlvbkVycm9yc0FjdGlvbikobikodC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sQSx0aGlzKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxFLnRha2VFdmVyeSkodi5UT0dHTEVfQUxMX0lURU1TLG8pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sQyx0aGlzKX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUucGF5bG9hZCxuPWUubWV0YS5uYW1lc3BhY2U7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxFLnB1dCkoKDAseS5yZW1vdmVWYWxpZGF0aW9uRXJyb3JBY3Rpb24pKG4pKHQuaWQpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LE8sdGhpcyl9ZnVuY3Rpb24gYSgpe3JldHVybiBiLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsRS50YWtlRXZlcnkpKHYuVE9HR0xFX0lURU1fU0VMRUNUSU9OLGkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sUyx0aGlzKX1mdW5jdGlvbiBsKGUpe3ZhciB0PWUubWV0YS5uYW1lc3BhY2U7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxFLnB1dCkoKDAseS5yZXNldFZhbGlkYXRpb25FcnJvcnNBY3Rpb24pKHQpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sUix0aGlzKX1mdW5jdGlvbiB1KCl7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxFLnRha2VFdmVyeSkodi5VTlNFTEVDVF9BTExfSVRFTVMsbCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxqLHRoaXMpfWZ1bmN0aW9uIGMoZSl7dmFyIHQsbixyLG8scyxpLGEsbD1lLnBheWxvYWQsdT1lLm1ldGE7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHQ9bC5uYW1lLG49bC5zZWxlY3RlZEl0ZW1zLHI9bC5hZGRpdGlvbmFsQXJncyxvPXUubmFtZXNwYWNlLChzPSgwLFQuZ2V0R3JvdXBPcGVyYXRpb25EZXNjcmlwdG9yKSh0KSkmJm4mJjAhPT1uLmxlbmd0aCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LCgwLEUuc2VsZWN0KShrKTtjYXNlIDc6cmV0dXJuIGk9ZS5zZW50LGUubmV4dD0xMCwoMCxFLnB1dCkoKDAseS5zZXRMYXN0T3BlcmF0aW9uTmFtZUFjdGlvbikobykodCkpO2Nhc2UgMTA6cmV0dXJuIGUubmV4dD0xMiwoMCxFLnB1dCkoKDAseS5yZXNldFZhbGlkYXRpb25FcnJvcnNBY3Rpb24pKG8pKCkpO2Nhc2UgMTI6aWYoYT0oMCxULnZhbGlkYXRlSXRlbXMpKG4scy52YWxpZGF0b3IsaSksISgoMCxoLmRlZmF1bHQpKGEpLmxlbmd0aD4wKSl7ZS5uZXh0PTE3O2JyZWFrfXJldHVybiBlLm5leHQ9MTYsKDAsRS5wdXQpKCgwLHkuc2V0VmFsaWRhdGlvbkVycm9yc0FjdGlvbikobykoYSkpO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE3OnJldHVybiBlLm5leHQ9MTksKDAsRS5wdXQpKCgwLHkuc2V0TGFzdE9wZXJhdGlvbk5hbWVBY3Rpb24pKG8pKCIiKSk7Y2FzZSAxOTpyZXR1cm4gZS5uZXh0PTIxLCgwLEUucHV0KShzLmFjdGlvbihuLHIpKTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx4LHRoaXMpfWZ1bmN0aW9uIGQoKXtyZXR1cm4gYi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLEUudGFrZUV2ZXJ5KSh2LkVYRUNVVEVfR1JPVVBfT1BFUkFUSU9OLGMpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sTCx0aGlzKX1mdW5jdGlvbiBfKGUpe3ZhciB0LG4scixvLHMsaSxhLGwsdSxjLGQsXyxwPWUucGF5bG9hZCxmPWUubWV0YTtyZXR1cm4gYi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD1wLm5hbWUsbj1wLnNlbGVjdGVkSXRlbXMscj1wLmFkZGl0aW9uYWxBcmdzLChvPSgwLFQuZ2V0R3JvdXBPcGVyYXRpb25EZXNjcmlwdG9yKSh0KSkmJm4mJjAhPT1uLmxlbmd0aCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQ6cmV0dXJuIHM9by5hY3Rpb24saT1vLnZhbGlkYXRvcixhPWYubmFtZXNwYWNlLGUubmV4dD04LCgwLEUuc2VsZWN0KShrKTtjYXNlIDg6aWYobD1lLnNlbnQsdT1uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4haShlLG4sbCl9KSxjPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUsbixsKX0pLCEoYy5sZW5ndGg+MCkpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5uZXh0PTE0LCgwLEUucHV0KSgoMCx5LnVuc2VsZWN0SXRlbXNBY3Rpb24pKGEpKGMpKTtjYXNlIDE0OmlmKGQ9dS5sZW5ndGg+MD91Om4sXz0oMCxULnZhbGlkYXRlSXRlbXMpKGQsaSxsKSwhKCgwLGguZGVmYXVsdCkoXykubGVuZ3RoPjApKXtlLm5leHQ9MjA7YnJlYWt9cmV0dXJuIGUubmV4dD0xOSwoMCxFLnB1dCkoKDAseS5zZXRWYWxpZGF0aW9uRXJyb3JzQWN0aW9uKShhKShfKSk7Y2FzZSAxOTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjA6cmV0dXJuIGUubmV4dD0yMiwoMCxFLnB1dCkoKDAseS5zZWxlY3RJdGVtc0FjdGlvbikoYSkodSkpO2Nhc2UgMjI6cmV0dXJuIGUubmV4dD0yNCwoMCxFLnB1dCkocyh1LHIpKTtjYXNlIDI0OnJldHVybiBlLm5leHQ9MjYsKDAsRS5wdXQpKCgwLHkuc2V0TGFzdE9wZXJhdGlvbk5hbWVBY3Rpb24pKGEpKCIiKSk7Y2FzZSAyNjpyZXR1cm4gZS5uZXh0PTI4LCgwLEUucHV0KSgoMCx5LnJlc2V0VmFsaWRhdGlvbkVycm9yc0FjdGlvbikoYSkoKSk7Y2FzZSAyODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRCx0aGlzKX1mdW5jdGlvbiBwKCl7cmV0dXJuIGIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxFLnRha2VFdmVyeSkodi5QUk9DRUVEX1dJVEhfVkFMSURfSVRFTVMsXyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx3LHRoaXMpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gYi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLEUuYWxsKShbYSgpLHUoKSxzKCksZCgpLHAoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sTSx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLGI9cihnKTt0Lmdyb3VwT3BlcmF0aW9uc1NhZ2FzPWY7dmFyIEU9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9lZmZlY3RzLmpzIikseT1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvYWN0aW9uQ3JlYXRvcnMuanMiKSx2PW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSxUPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy91dGlscy5qcyIpLEE9Yi5kZWZhdWx0Lm1hcmsobyksQz1iLmRlZmF1bHQubWFyayhzKSxPPWIuZGVmYXVsdC5tYXJrKGkpLFM9Yi5kZWZhdWx0Lm1hcmsoYSksUj1iLmRlZmF1bHQubWFyayhsKSxqPWIuZGVmYXVsdC5tYXJrKHUpLHg9Yi5kZWZhdWx0Lm1hcmsoYyksTD1iLmRlZmF1bHQubWFyayhkKSxEPWIuZGVmYXVsdC5tYXJrKF8pLHc9Yi5kZWZhdWx0Lm1hcmsocCksTT1iLmRlZmF1bHQubWFyayhmKSxrPWZ1bmN0aW9uKGUpe3JldHVybiBlfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywicmVtb3ZlVmFsaWRhdGlvbkVycm9ycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywid2F0Y2hUb2dnbGVBbGxJdGVtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwicmVtb3ZlVmFsaWRhdGlvbkVycm9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ3YXRjaFRvZ2dsZUl0ZW1TZWxlY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInJlc2V0VmFsaWRhdGlvbkVycm9ycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwid2F0Y2hVbnNlbGVjdEFsbEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJleGVjdXRlR3JvdXBPcGVyYXRpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIndhdGNoRXhlY3V0ZUdyb3VwT3BlcmF0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJwcm9jZWVkV2l0aFZhbGlkSXRlbXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIndhdGNoUHJvY2VlZFdpdGhWYWxpZEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJncm91cE9wZXJhdGlvbnNTYWdhcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiZ2V0U3RhdGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KS5zZWxlY3RlZEl0ZW1zfX0sbz10LmNyZWF0ZVZhbGlkYXRpb25FcnJvcnNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkuZXJyb3JzfX0scz10LmNyZWF0ZUxhc3RPcGVyYXRpb25TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkubGFzdE9wZXJhdGlvbn19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJjcmVhdGVTZWxlY3RlZEl0ZW1zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJjcmVhdGVMYXN0T3BlcmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvdXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmaW5lR3JvdXBPcGVyYXRpb249dC5nZXRHcm91cE9wZXJhdGlvbkRlc2NyaXB0b3I9dC52YWxpZGF0ZUl0ZW1zPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9jb25zdGFudHMuanMiKSx1PXQudmFsaWRhdGVJdGVtcz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx0PWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1syXTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24ocixvKXt2YXIgaT10KG8sZSxuKTtyZXR1cm4gaT8oMCxhLmRlZmF1bHQpKHt9LHIsKDAscy5kZWZhdWx0KSh7fSxvLmlkLGkpKTpyfSx7fSl9LGM9e30sZD10LmdldEdyb3VwT3BlcmF0aW9uRGVzY3JpcHRvcj1mdW5jdGlvbihlKXtyZXR1cm4gY1tlXX0sXz10LmRlZmluZUdyb3VwT3BlcmF0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBjW3RdPXthY3Rpb246bix2YWxpZGF0b3I6cn0sZnVuY3Rpb24obixyKXtyZXR1cm57dHlwZTpsLkVYRUNVVEVfR1JPVVBfT1BFUkFUSU9OLHBheWxvYWQ6e25hbWU6dCxzZWxlY3RlZEl0ZW1zOm4sYWRkaXRpb25hbEFyZ3M6cn0sbWV0YTp7bmFtZXNwYWNlOmV9fX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJ2YWxpZGF0ZUl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJnZXRHcm91cE9wZXJhdGlvbkRlc2NyaXB0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImRlZmluZUdyb3VwT3BlcmF0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJncm91cE9wZXJhdGlvbk1hcCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL3V0aWxzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJlZnJlc2hIaXN0b3J5PXQucmVzZXRIaXN0b3J5PXQuc2V0VmlzaWJsZUl0ZW1zQ291bnQ9dC5mZXRjaEhpc3RvcnlQYWdlSW5mbz10LnNldEl0ZW1zSGlzdG9yeT10LmZldGNoSXRlbXNIaXN0b3J5QWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvY29uc3RhbnRzLmpzIiksbz10LmZldGNoSXRlbXNIaXN0b3J5QWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5oaXN0b3J5RGVwdGgsbj1lLmxvYWRNb3JlO3JldHVybnt0eXBlOnIuRkVUQ0hfSVRFTVNfSElTVE9SWSxwYXlsb2FkOntoaXN0b3J5RGVwdGg6dCxsb2FkTW9yZTpufX19LHM9dC5zZXRJdGVtc0hpc3Rvcnk9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5TRVRfSVRFTVNfSElTVE9SWSxwYXlsb2FkOmV9fSxpPXQuZmV0Y2hIaXN0b3J5UGFnZUluZm89ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLkZFVENIX0hJU1RPUllfUEFHRV9JTkZPfX0sYT10LnNldFZpc2libGVJdGVtc0NvdW50PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuU0VUX1ZJU0lCTEVfSVRFTVNfQ09VTlQscGF5bG9hZDplfX0sbD10LnJlc2V0SGlzdG9yeT1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuUkVTRVRfSElTVE9SWX19LHU9dC5yZWZyZXNoSGlzdG9yeT1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuUkVTRVRfRkVUQ0hfSElTVE9SWX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaEl0ZW1zSGlzdG9yeUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywic2V0SXRlbXNIaXN0b3J5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJmZXRjaEhpc3RvcnlQYWdlSW5mbyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwic2V0VmlzaWJsZUl0ZW1zQ291bnQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInJlc2V0SGlzdG9yeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwicmVmcmVzaEhpc3RvcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9hY3Rpb25DcmVhdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuRkVUQ0hfSVRFTVNfSElTVE9SWT0iZmV0Y2hJdGVtc0hpc3RvcnkiLG89dC5ISVNUT1JZX0lURU1TX1RPX0xPQUQ9MzAscz10Lk9QVElNQUxfSElTVE9SWV9ERVBUSF9GT1JfUkVOREVSPTUsaT10Lk5BTUVTUEFDRT0iaGlzdG9yeSIsYT10LkZFVENIX0hJU1RPUllfUEFHRV9JTkZPPSJmZXRjaEhpc3RvcnlQYWdlSW5mbyIsbD10LlNFVF9JVEVNU19ISVNUT1JZPSJzZXRJdGVtc0Zvckhpc3RvcnkiLHU9dC5TRVRfVklTSUJMRV9JVEVNU19DT1VOVD0ic2V0VmlzaWJsZUl0ZW1zQ291bnQiLGM9dC5SRVNFVF9ISVNUT1JZPSJyZXNldEhpc3RvcnkiLGQ9dC5SRVNFVF9GRVRDSF9ISVNUT1JZPSJyZWZyZXNoSGlzdG9yeSIsXz10LkhJU1RPUllfREVQVEhfQ09ORklHPXtuYW1lOiJoaXN0b3J5RGVwdGgiLGRlZmF1bHRWYWx1ZToiMTAiLG9wdGlvbnM6W3t2YWx1ZToiMyIsbGFiZWw6IjMifSx7dmFsdWU6IjUiLGxhYmVsOiI1In0se3ZhbHVlOiIxMCIsbGFiZWw6IjEwIn0se3ZhbHVlOiIxNSIsbGFiZWw6IjE1In0se3ZhbHVlOiIyMCIsbGFiZWw6IjIwIn0se3ZhbHVlOiIyNSIsbGFiZWw6IjI1In0se3ZhbHVlOiIzMCIsbGFiZWw6IjMwIn1dfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiRkVUQ0hfSVRFTVNfSElTVE9SWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkhJU1RPUllfSVRFTVNfVE9fTE9BRCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIk9QVElNQUxfSElTVE9SWV9ERVBUSF9GT1JfUkVOREVSIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRkVUQ0hfSElTVE9SWV9QQUdFX0lORk8iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJTRVRfSVRFTVNfSElTVE9SWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlNFVF9WSVNJQkxFX0lURU1TX0NPVU5UIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiUkVTRVRfSElTVE9SWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlJFU0VUX0ZFVENIX0hJU1RPUlkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJISVNUT1JZX0RFUFRIX0NPTkZJRyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXRlbXNIaXN0b3J5UmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuaXRlbXNIaXN0b3J5UmVkdWNlcn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hJdGVtc0hpc3RvcnlBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZldGNoSXRlbXNIaXN0b3J5QWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEhpc3RvcnlQYWdlSW5mbyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZmV0Y2hIaXN0b3J5UGFnZUluZm99fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldFZpc2libGVJdGVtc0NvdW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zZXRWaXNpYmxlSXRlbXNDb3VudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVmcmVzaEhpc3RvcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnJlZnJlc2hIaXN0b3J5fX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9jb25zdGFudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRkVUQ0hfSVRFTVNfSElTVE9SWSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuRkVUQ0hfSVRFTVNfSElTVE9SWX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiT1BUSU1BTF9ISVNUT1JZX0RFUFRIX0ZPUl9SRU5ERVIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLk9QVElNQUxfSElTVE9SWV9ERVBUSF9GT1JfUkVOREVSfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJISVNUT1JZX0lURU1TX1RPX0xPQUQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkhJU1RPUllfSVRFTVNfVE9fTE9BRH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUkVTRVRfSElTVE9SWSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUkVTRVRfSElTVE9SWX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSElTVE9SWV9ERVBUSF9DT05GSUciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkhJU1RPUllfREVQVEhfQ09ORklHfX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJoaXN0b3J5U2FnYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmhpc3RvcnlTYWdhc319KTt2YXIgYT1uKCIuL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3Rvcnkvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIml0ZW1zSGlzdG9yeVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pdGVtc0hpc3RvcnlTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGlzdG9yeVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5oaXN0b3J5U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZpc2libGVJdGVtc0NvdW50U2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnZpc2libGVJdGVtc0NvdW50U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubG9hZGluZ1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJoaXN0b3J5SXRlbXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaGlzdG9yeUl0ZW1zU2VsZWN0b3J9fSl9LCIuL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvcmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pdGVtc0hpc3RvcnlSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGE9bigiLi9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLGw9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV0sbj10LnR5cGUscj10LnBheWxvYWQ7c3dpdGNoKG4pe2Nhc2UgYS5TRVRfSVRFTVNfSElTVE9SWTpyZXR1cm4gcjtkZWZhdWx0OnJldHVybiBlfX0sdT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGEuU0VUX1ZJU0lCTEVfSVRFTVNfQ09VTlQ6cmV0dXJuIHI7Y2FzZSBhLlJFU0VUX0hJU1RPUlk6cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4gZX19LGM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV0sbj10LnR5cGUscj10LnBheWxvYWQscz10Lm1ldGE7aWYocyYmcy5uYW1lc3BhY2UmJnMubmFtZXNwYWNlIT09YS5OQU1FU1BBQ0UpcmV0dXJuIGU7dmFyIGw9dm9pZCAwO3N3aXRjaChuKXtjYXNlIGkuRkVUQ0hfU1VDQ0VTUzpyZXR1cm4gMD09PWUubGVuZ3RoP3IucmV2ZXJzZSgpOihsPXIucmV2ZXJzZSgpLGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsby5kZWZhdWx0KSh7fSxlLHtyZXNvdXJjZXM6ZS5yZXNvdXJjZXMuY29uY2F0KGxbdF0mJmxbdF0ucmVzb3VyY2VzKX0pfSkpO2Nhc2UgYS5SRVNFVF9ISVNUT1JZOnJldHVybltdO2RlZmF1bHQ6cmV0dXJuIGV9fSxkPXQuaXRlbXNIaXN0b3J5UmVkdWNlcj0oMCxzLmNvbWJpbmVSZWR1Y2Vycykoe2hpc3Rvcnk6YyxpdGVtczpsLHZpc2libGVJdGVtc0NvdW50OnV9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiaXRlbXNIaXN0b3J5UmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJpdGVtc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwidmlzaWJsZUl0ZW1zQ291bnRSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImhpc3RvcnlSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3RvcnkvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG4scixvLHMsaSxhLGw9ZS5wYXlsb2FkO3JldHVybiBkLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsXy5zZWxlY3QpKEUuaXRlbXNIaXN0b3J5U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5uZXh0PTUsKDAsXy5zZWxlY3QpKEUudmlzaWJsZUl0ZW1zQ291bnRTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiBuPWUuc2VudCxyPXZvaWQgMCxvPXZvaWQgMCxsJiZsLmxvYWRNb3JlPyhyPW4sbz1uK3kuSElTVE9SWV9JVEVNU19UT19MT0FEKToocz10Lmxlbmd0aDw9eS5ISVNUT1JZX0lURU1TX1RPX0xPQUQmJnQubGVuZ3RofHx5LkhJU1RPUllfSVRFTVNfVE9fTE9BRCxyPTAsbz1zKSxlLm5leHQ9MTEsKDAsXy5zZWxlY3QpKGguYWN0aXZlUHJvamVjdFNlbGVjdG9yKTtjYXNlIDExOnJldHVybiBpPWUuc2VudCxhPXQuc2xpY2UocixvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuaWR9KS5qb2luKCIsIiksZS5uZXh0PTE1LCgwLF8ucHV0KSgoMCxwLmZldGNoRGF0YUFjdGlvbikoeS5OQU1FU1BBQ0UpKGYuVVJMUy50ZXN0SXRlbXNIaXN0b3J5KGksYSxsJiZsLmhpc3RvcnlEZXB0aHx8KDAsbS5nZXRTdG9yYWdlSXRlbSkoeS5ISVNUT1JZX0RFUFRIX0NPTkZJRy5uYW1lKXx8eS5ISVNUT1JZX0RFUFRIX0NPTkZJRy5kZWZhdWx0VmFsdWUpKSk7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LCgwLF8ucHV0KSgoMCxiLnNldFZpc2libGVJdGVtc0NvdW50KSh0LnNsaWNlKHIsbykubGVuZ3RoK24pKTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSx2LHRoaXMpfWZ1bmN0aW9uIG8oKXt2YXIgZTtyZXR1cm4gZC5kZWZhdWx0LndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLCgwLF8ucHV0KSgoMCxiLnJlc2V0SGlzdG9yeSkoKSk7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCwoMCxfLnB1dCkoKDAsZy5mZXRjaFRlc3RJdGVtc0FjdGlvbikoKSk7Y2FzZSA0OnJldHVybiB0Lm5leHQ9NiwoMCxfLnRha2UpKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT1nLlNFVF9QQUdFX0xPQURJTkcmJiExPT09ZS5wYXlsb2FkfSk7Y2FzZSA2OnJldHVybiB0Lm5leHQ9OCwoMCxfLnNlbGVjdCkoRS5oaXN0b3J5SXRlbXNTZWxlY3Rvcik7Y2FzZSA4OnJldHVybiBlPXQuc2VudCx0Lm5leHQ9MTEsKDAsXy5wdXQpKCgwLGIuc2V0SXRlbXNIaXN0b3J5KShlKSk7Y2FzZSAxMTpyZXR1cm4gdC5uZXh0PTEzLCgwLF8ucHV0KSgoMCxiLmZldGNoSXRlbXNIaXN0b3J5QWN0aW9uKSgpKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSxULHRoaXMpfWZ1bmN0aW9uIHMoKXtyZXR1cm4gZC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLF8ucHV0KSgoMCxiLnJlc2V0SGlzdG9yeSkoKSk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCwoMCxfLnB1dCkoKDAsYi5mZXRjaEl0ZW1zSGlzdG9yeUFjdGlvbikoKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxBLHRoaXMpfWZ1bmN0aW9uIGkoKXtyZXR1cm4gZC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLF8udGFrZUV2ZXJ5KSh5LkZFVENIX0lURU1TX0hJU1RPUlkscik7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxDLHRoaXMpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gZC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLF8udGFrZUV2ZXJ5KSh5LkZFVENIX0hJU1RPUllfUEFHRV9JTkZPLG8pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sTyx0aGlzKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxfLnRha2VFdmVyeSkoeS5SRVNFVF9GRVRDSF9ISVNUT1JZLHMpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sUyx0aGlzKX1mdW5jdGlvbiB1KCl7cmV0dXJuIGQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxfLmFsbCkoW2koKSxhKCksbCgpXSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxSLHRoaXMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksZD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGMpO3QuaGlzdG9yeVNhZ2FzPXU7dmFyIF89bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9lZmZlY3RzLmpzIikscD1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGY9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxtPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLGg9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLGc9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSxiPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9hY3Rpb25DcmVhdG9ycy5qcyIpLEU9bigiLi9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NlbGVjdG9ycy5qcyIpLHk9bigiLi9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L2NvbnN0YW50cy5qcyIpLHY9ZC5kZWZhdWx0Lm1hcmsociksVD1kLmRlZmF1bHQubWFyayhvKSxBPWQuZGVmYXVsdC5tYXJrKHMpLEM9ZC5kZWZhdWx0Lm1hcmsoaSksTz1kLmRlZmF1bHQubWFyayhhKSxTPWQuZGVmYXVsdC5tYXJrKGwpLFI9ZC5kZWZhdWx0Lm1hcmsodSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImdldEhpc3RvcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImdldEhpc3RvcnlQYWdlSW5mbyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZ2V0TmV3SGlzdG9yeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwid2F0Y2hGZXRjaEhpc3RvcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIndhdGNoRmV0Y2hIaXN0b3J5UGFnZUluZm8iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIndhdGNoUmVzZXRGZXRjaEhzdG9yeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiaGlzdG9yeVNhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3Rvcnkvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3Rvcnkvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmhpc3RvcnlJdGVtc1NlbGVjdG9yPXQubG9hZGluZ1NlbGVjdG9yPXQudmlzaWJsZUl0ZW1zQ291bnRTZWxlY3Rvcj10Lmhpc3RvcnlTZWxlY3Rvcj10Lml0ZW1zSGlzdG9yeVNlbGVjdG9yPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZXNlbGVjdC9saWIvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pdGVtc0hpc3Rvcnl8fHt9fSxpPXQuaXRlbXNIaXN0b3J5U2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkuaXRlbXN9LGE9dC5oaXN0b3J5U2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkuaGlzdG9yeX0sbD10LnZpc2libGVJdGVtc0NvdW50U2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkudmlzaWJsZUl0ZW1zQ291bnR9LHU9dC5sb2FkaW5nU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkubG9hZGluZ30sYz10Lmhpc3RvcnlJdGVtc1NlbGVjdG9yPSgwLHIuY3JlYXRlU2VsZWN0b3IpKG8uaXRlbXNTZWxlY3RvcixmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZUlkPT09ZS51bmlxdWVJZH0pLmxlbmd0aHx8dC5wdXNoKGUpfSksdH0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJpdGVtc0hpc3RvcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImhpc3RvcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInZpc2libGVJdGVtc0NvdW50U2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJsb2FkaW5nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2l0ZW1zSGlzdG9yeS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJoaXN0b3J5SXRlbXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvaXRlbXNIaXN0b3J5L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImRvbWFpblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9pdGVtc0hpc3Rvcnkvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbGFuZy9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zZXRMYW5nQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9sYW5nL2NvbnN0YW50cy5qcyIpLG89dC5zZXRMYW5nQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuQ0hBTkdFX0xBTkdfQUNUSU9OLHBheWxvYWQ6ZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sInNldExhbmdBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhbmcvYWN0aW9uQ3JlYXRvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhbmcvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkNIQU5HRV9MQU5HX0FDVElPTj0iQ0hBTkdFX0xBTkdfQUNUSU9OIixvPXQuSU5JVElBTF9TVEFURT0iZW4iOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJDSEFOR0VfTEFOR19BQ1RJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhbmcvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiSU5JVElBTF9TVEFURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGFuZy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sYW5nL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9sYW5nL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGFuZ1JlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmxhbmdSZWR1Y2VyfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhbmcvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2V0TGFuZ0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2V0TGFuZ0FjdGlvbn19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9sYW5nL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsYW5nU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmxhbmdTZWxlY3Rvcn19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhbmcvcmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sYW5nUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsU3RvcmFnZUtleXMuanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhbmcvY29uc3RhbnRzLmpzIiksaT1mdW5jdGlvbigpe3JldHVybigwLHIuZ2V0U3RvcmFnZUl0ZW0pKG8uQVBQTElDQVRJT05fU0VUVElOR1MpJiYoMCxyLmdldFN0b3JhZ2VJdGVtKShvLkFQUExJQ0FUSU9OX1NFVFRJTkdTKS5hcHBMYW5ndWFnZXx8cy5JTklUSUFMX1NUQVRFfSxhPXQubGFuZ1JlZHVjZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06aSgpLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIHMuQ0hBTkdFX0xBTkdfQUNUSU9OOnJldHVybiByO2RlZmF1bHQ6cmV0dXJuIGV9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwibGFuZ1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhbmcvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImdldERlZmF1bHRTdGF0ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGFuZy9yZWR1Y2VyLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbGFuZy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQubGFuZ1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxhbmd9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImxhbmdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGFuZy9zZWxlY3RvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWxldGVJdGVtc0FjdGlvbj10Lm1vdmVMYXVuY2hlc0FjdGlvbj10LmNvbXBhcmVMYXVuY2hlc0FjdGlvbj10Lm1lcmdlTGF1bmNoZXNBY3Rpb249dC5mb3JjZUZpbmlzaExhdW5jaGVzQWN0aW9uPXQucHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uPXQudG9nZ2xlQWxsTGF1bmNoZXNBY3Rpb249dC51bnNlbGVjdEFsbExhdW5jaGVzQWN0aW9uPXQuc2VsZWN0TGF1bmNoZXNBY3Rpb249dC50b2dnbGVMYXVuY2hTZWxlY3Rpb25BY3Rpb249dC5mZXRjaExhdW5jaGVzUGFnZURhdGE9dC5mZXRjaExhdW5jaGVzV2l0aFBhcmFtc0FjdGlvbj10LmZldGNoTGF1bmNoZXNBY3Rpb249dC5jaGFuZ2VMYXVuY2hEaXN0aW5jdEFjdGlvbj10LnNldERlYnVnTW9kZT12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2NvbnN0YW50cy5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvblZhbGlkYXRvcnMuanMiKSxhPXQuc2V0RGVidWdNb2RlPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnMuU0VUX0RFQlVHX01PREUscGF5bG9hZDplfX0sbD10LmNoYW5nZUxhdW5jaERpc3RpbmN0QWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnMuQ0hBTkdFX0xBVU5DSF9ESVNUSU5DVCxwYXlsb2FkOmV9fSx1PXQuZmV0Y2hMYXVuY2hlc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpzLkZFVENIX0xBVU5DSEVTLHBheWxvYWQ6ZX19LGM9dC5mZXRjaExhdW5jaGVzV2l0aFBhcmFtc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpzLkZFVENIX0xBVU5DSEVTX1dJVEhfUEFSQU1TLHBheWxvYWQ6ZX19LGQ9dC5mZXRjaExhdW5jaGVzUGFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLkZFVENIX0xBVU5DSEVTX1BBR0VfREFUQX19LF89dC50b2dnbGVMYXVuY2hTZWxlY3Rpb25BY3Rpb249KDAsby50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uKShzLk5BTUVTUEFDRSkscD10LnNlbGVjdExhdW5jaGVzQWN0aW9uPSgwLG8uc2VsZWN0SXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxmPXQudW5zZWxlY3RBbGxMYXVuY2hlc0FjdGlvbj0oMCxvLnVuc2VsZWN0QWxsSXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxtPXQudG9nZ2xlQWxsTGF1bmNoZXNBY3Rpb249KDAsby50b2dnbGVBbGxJdGVtc0FjdGlvbikocy5OQU1FU1BBQ0UpLGg9dC5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249KDAsby5jcmVhdGVQcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxnPXQuZm9yY2VGaW5pc2hMYXVuY2hlc0FjdGlvbj0oMCxvLmRlZmluZUdyb3VwT3BlcmF0aW9uKShzLk5BTUVTUEFDRSwiZmluaXNoRm9yY2VMYXVuY2hlcyIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZldGNoRnVuYztyZXR1cm4oMCxyLnNob3dNb2RhbEFjdGlvbikoe2lkOiJsYXVuY2hGaW5pc2hGb3JjZU1vZGFsIixkYXRhOntpdGVtczplLGZldGNoRnVuYzpufX0pfSxpLnZhbGlkYXRlRmluaXNoRm9yY2VMYXVuY2gpLGI9dC5tZXJnZUxhdW5jaGVzQWN0aW9uPSgwLG8uZGVmaW5lR3JvdXBPcGVyYXRpb24pKHMuTkFNRVNQQUNFLCJtZXJnZUxhdW5jaGVzIixmdW5jdGlvbihlLHQpe3ZhciBuPXQuZmV0Y2hGdW5jO3JldHVybigwLHIuc2hvd01vZGFsQWN0aW9uKSh7aWQ6ImxhdW5jaE1lcmdlTW9kYWwiLGRhdGE6e2xhdW5jaGVzOmUsZmV0Y2hGdW5jOm59fSl9LGkudmFsaWRhdGVNZXJnZUxhdW5jaCksRT10LmNvbXBhcmVMYXVuY2hlc0FjdGlvbj0oMCxvLmRlZmluZUdyb3VwT3BlcmF0aW9uKShzLk5BTUVTUEFDRSwiY29tcGFyZUxhdW5jaGVzIixmdW5jdGlvbihlKXtyZXR1cm4oMCxyLnNob3dNb2RhbEFjdGlvbikoe2lkOiJsYXVuY2hDb21wYXJlTW9kYWwiLHdpZHRoOjkwMCxkYXRhOntpZHM6ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KX19KX0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLHk9dC5tb3ZlTGF1bmNoZXNBY3Rpb249KDAsby5kZWZpbmVHcm91cE9wZXJhdGlvbikocy5OQU1FU1BBQ0UsIm1vdmVMYXVuY2hlcyIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZldGNoRnVuYyxvPXQuZGVidWdNb2RlO3JldHVybigwLHIuc2hvd01vZGFsQWN0aW9uKSh7aWQ6Im1vdmVMYXVuY2hlc01vZGFsIixkYXRhOntpZHM6ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KSxmZXRjaEZ1bmM6bixkZWJ1Z01vZGU6b319KX0saS52YWxpZGF0ZU1vdmVMYXVuY2gpLHY9dC5kZWxldGVJdGVtc0FjdGlvbj0oMCxvLmRlZmluZUdyb3VwT3BlcmF0aW9uKShzLk5BTUVTUEFDRSwiZGVsZXRlTGF1bmNoZXMiLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vbkNvbmZpcm0sbz10LmhlYWRlcixzPXQubWFpbkNvbnRlbnQsaT10LnVzZXJJZCxhPXQud2FybmluZyxsPXQuZXZlbnRzSW5mbztyZXR1cm4oMCxyLnNob3dNb2RhbEFjdGlvbikoe2lkOiJkZWxldGVJdGVtc01vZGFsIixkYXRhOntpdGVtczplLG9uQ29uZmlybTpuLGhlYWRlcjpvLG1haW5Db250ZW50OnMsdXNlcklkOmksd2FybmluZzphLGV2ZW50c0luZm86bH19KX0saS52YWxpZGF0ZURlbGV0ZUxhdW5jaCk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsInNldERlYnVnTW9kZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiY2hhbmdlTGF1bmNoRGlzdGluY3RBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImZldGNoTGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImZldGNoTGF1bmNoZXNXaXRoUGFyYW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJmZXRjaExhdW5jaGVzUGFnZURhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sInRvZ2dsZUxhdW5jaFNlbGVjdGlvbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwic2VsZWN0TGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsInVuc2VsZWN0QWxsTGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sInRvZ2dsZUFsbExhdW5jaGVzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJwcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImZvcmNlRmluaXNoTGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsIm1lcmdlTGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsImNvbXBhcmVMYXVuY2hlc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwibW92ZUxhdW5jaGVzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJkZWxldGVJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoOTAwLCJNT0RBTF9DT01QQVJFX1dJRFRIIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvYWN0aW9uVmFsaWRhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZURlbGV0ZUxhdW5jaD10LnZhbGlkYXRlTW92ZUxhdW5jaD10LnZhbGlkYXRlRmluaXNoRm9yY2VMYXVuY2g9dC52YWxpZGF0ZU1lcmdlTGF1bmNoPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIikscz1uKCIuL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvaW5kZXguanMiKSxpPXQudmFsaWRhdGVNZXJnZUxhdW5jaD1mdW5jdGlvbihlLHQsbil7aWYodC5sZW5ndGg8MilyZXR1cm4ic2VsZWN0TW9yZUl0ZW1zIjt2YXIgaT0oMCxyLnVzZXJJbmZvU2VsZWN0b3IpKG4pLGE9KDAsci51c2VyQWNjb3VudFJvbGVTZWxlY3RvcikobiksbD0oMCxyLmFjdGl2ZVByb2plY3RSb2xlU2VsZWN0b3IpKG4pO3JldHVybigwLHMuY2FuTWVyZ2VMYXVuY2hlcykoYSxsLGUub3duZXI9PT1pLnVzZXJJZCk/ZS5zdGF0dXMmJmUuc3RhdHVzLnRvTG93ZXJDYXNlKCk9PT1vLklOX1BST0dSRVNTPyJsYXVuY2hOb3RJblByb2dyZXNzIjplLmlzUHJvY2Vzc2luZz8ibGF1bmNoSXNQcm9jZXNzaW5nIjpudWxsOiJub3RZb3VyT3duTGF1bmNoIn0sYT10LnZhbGlkYXRlRmluaXNoRm9yY2VMYXVuY2g9ZnVuY3Rpb24oZSx0LG4pe2lmKGUuc3RhdHVzJiZlLnN0YXR1cy50b0xvd2VyQ2FzZSgpIT09by5JTl9QUk9HUkVTUylyZXR1cm4ibGF1bmNoRmluaXNoZWQiO3ZhciBpPSgwLHIudXNlckluZm9TZWxlY3RvcikobiksYT0oMCxyLnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yKShuKSxsPSgwLHIuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3Rvcikobik7cmV0dXJuKDAscy5jYW5Gb3JjZUZpbmlzaExhdW5jaCkoYSxsLGUub3duZXI9PT1pLnVzZXJJZCk/bnVsbDoibm90WW91ck93bkxhdW5jaCJ9LGw9dC52YWxpZGF0ZU1vdmVMYXVuY2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPSgwLHIudXNlckluZm9TZWxlY3RvcikobiksaT0oMCxyLnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yKShuKSxhPSgwLHIuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3Rvcikobik7cmV0dXJuKDAscy5jYW5Nb3ZlVG9EZWJ1ZykoaSxhLGUub3duZXI9PT1vLnVzZXJJZCk/bnVsbDoibm90WW91ck93bkxhdW5jaCJ9LHU9dC52YWxpZGF0ZURlbGV0ZUxhdW5jaD1mdW5jdGlvbihlLHQsbil7dmFyIGk9KDAsci51c2VySW5mb1NlbGVjdG9yKShuKSxhPSgwLHIudXNlckFjY291bnRSb2xlU2VsZWN0b3IpKG4pLGw9KDAsci5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yKShuKTtyZXR1cm4oMCxzLmNhbkRlbGV0ZUxhdW5jaCkoYSxsLGUub3duZXI9PT1pLnVzZXJJZCk/ZS5zdGF0dXMmJmUuc3RhdHVzLnRvTG93ZXJDYXNlKCk9PT1vLklOX1BST0dSRVNTPyJsYXVuY2hOb3RJblByb2dyZXNzIjpudWxsOiJub3RZb3VyT3duTGF1bmNoIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksInZhbGlkYXRlTWVyZ2VMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwidmFsaWRhdGVGaW5pc2hGb3JjZUxhdW5jaCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2FjdGlvblZhbGlkYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJ2YWxpZGF0ZU1vdmVMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwidmFsaWRhdGVEZWxldGVMYXVuY2giLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25WYWxpZGF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5ERUZBVUxUX1NPUlRJTkc9dC5OQU1FU1BBQ0U9dC5GRVRDSF9MQVVOQ0hFU19QQUdFX0RBVEE9dC5GRVRDSF9MQVVOQ0hFU19XSVRIX1BBUkFNUz10LkNIQU5HRV9MQVVOQ0hfRElTVElOQ1Q9dC5TRVRfREVCVUdfTU9ERT10LkZFVENIX0xBVU5DSEVTPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL2luZGV4LmpzIiksbz10LkZFVENIX0xBVU5DSEVTPSJmZXRjaExhdW5jaGVzQWN0aW9uIixzPXQuU0VUX0RFQlVHX01PREU9InNldERlYnVnTW9kZSIsaT10LkNIQU5HRV9MQVVOQ0hfRElTVElOQ1Q9ImNoYW5nZUxhdW5jaERpc3RpbmN0IixhPXQuRkVUQ0hfTEFVTkNIRVNfV0lUSF9QQVJBTVM9ImZldGNoTGF1bmNoZXNXaXRoUGFyYW1zQWN0aW9uIixsPXQuRkVUQ0hfTEFVTkNIRVNfUEFHRV9EQVRBPSJmZXRjaExhdW5jaGVzUGFnZURhdGEiLHU9dC5OQU1FU1BBQ0U9ImxhdW5jaGVzIixjPXQuREVGQVVMVF9TT1JUSU5HPSgwLHIuZm9ybWF0U29ydGluZ1N0cmluZykoWyJzdGFydFRpbWUiLCJudW1iZXIiXSxyLlNPUlRJTkdfREVTQyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkZFVENIX0xBVU5DSEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiU0VUX0RFQlVHX01PREUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJDSEFOR0VfTEFVTkNIX0RJU1RJTkNUIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiRkVUQ0hfTEFVTkNIRVNfV0lUSF9QQVJBTVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJGRVRDSF9MQVVOQ0hFU19QQUdFX0RBVEEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJOQU1FU1BBQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJERUZBVUxUX1NPUlRJTkciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b2dnbGVMYXVuY2hTZWxlY3Rpb25BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRvZ2dsZUxhdW5jaFNlbGVjdGlvbkFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VsZWN0TGF1bmNoZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnNlbGVjdExhdW5jaGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1bnNlbGVjdEFsbExhdW5jaGVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci51bnNlbGVjdEFsbExhdW5jaGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZm9yY2VGaW5pc2hMYXVuY2hlc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZm9yY2VGaW5pc2hMYXVuY2hlc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWVyZ2VMYXVuY2hlc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubWVyZ2VMYXVuY2hlc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibW92ZUxhdW5jaGVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5tb3ZlTGF1bmNoZXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNvbXBhcmVMYXVuY2hlc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY29tcGFyZUxhdW5jaGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaExhdW5jaGVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5mZXRjaExhdW5jaGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b2dnbGVBbGxMYXVuY2hlc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudG9nZ2xlQWxsTGF1bmNoZXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldERlYnVnTW9kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc2V0RGVidWdNb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjaGFuZ2VMYXVuY2hEaXN0aW5jdEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2hhbmdlTGF1bmNoRGlzdGluY3RBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlbGV0ZUl0ZW1zQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWxldGVJdGVtc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hMYXVuY2hlc1dpdGhQYXJhbXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZldGNoTGF1bmNoZXNXaXRoUGFyYW1zQWN0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VsZWN0ZWRMYXVuY2hlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zZWxlY3RlZExhdW5jaGVzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbGlkYXRpb25FcnJvcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8udmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsYXN0T3BlcmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmxhc3RPcGVyYXRpb25TZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGF1bmNoZXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubGF1bmNoZXNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGF1bmNoUGFnaW5hdGlvblNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5sYXVuY2hQYWdpbmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubG9hZGluZ1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWJ1Z01vZGVTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVidWdNb2RlU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhdW5jaERpc3RpbmN0U2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmxhdW5jaERpc3RpbmN0U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFsbExhdW5jaGVzTGlrU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmFsbExhdW5jaGVzTGlrU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhdGVzdExhdW5jaGVzTGlua1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5sYXRlc3RMYXVuY2hlc0xpbmtTZWxlY3Rvcn19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsYXVuY2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5sYXVuY2hSZWR1Y2VyfX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsYXVuY2hTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkubGF1bmNoU2FnYXN9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOQU1FU1BBQ0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLk5BTUVTUEFDRX19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxhdW5jaFJlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxTdG9yYWdlS2V5cy5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSxsPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLHU9bigiLi9zcmMvY29udHJvbGxlcnMvbG9hZGluZy9pbmRleC5qcyIpLGM9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2NvbnN0YW50cy5qcyIpLF89ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLmdldFN0b3JhZ2VJdGVtKShzLkFQUExJQ0FUSU9OX1NFVFRJTkdTKSYmKDAsby5nZXRTdG9yYWdlSXRlbSkocy5BUFBMSUNBVElPTl9TRVRUSU5HUykubGF1bmNoRGlzdGluY3R8fGMuQUxMfSxwPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZDtzd2l0Y2gobil7Y2FzZSBkLlNFVF9ERUJVR19NT0RFOnJldHVybiByO2RlZmF1bHQ6cmV0dXJuIGV9fSxmPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOl8oKSx0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZDtzd2l0Y2gobil7Y2FzZSBkLkNIQU5HRV9MQVVOQ0hfRElTVElOQ1Q6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gZX19LG09dC5sYXVuY2hSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7bGF1bmNoZXM6KDAsaS5mZXRjaFJlZHVjZXIpKGQuTkFNRVNQQUNFLHtjb250ZW50UGF0aDoiY29udGVudCJ9KSxwYWdpbmF0aW9uOigwLGEucGFnaW5hdGlvblJlZHVjZXIpKGQuTkFNRVNQQUNFKSxncm91cE9wZXJhdGlvbnM6KDAsbC5ncm91cE9wZXJhdGlvbnNSZWR1Y2VyKShkLk5BTUVTUEFDRSksbG9hZGluZzooMCx1LmxvYWRpbmdSZWR1Y2VyKShkLk5BTUVTUEFDRSksZGVidWdNb2RlOnAsbGF1bmNoRGlzdGluY3Q6Zn0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJsYXVuY2hSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImdldERlZmF1bHRMYXVuY2hEaXN0aW5jdFN0YXRlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImRlYnVnTW9kZVJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwibGF1bmNoRGlzdGluY3RSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvcmVkdWNlci5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUpe3ZhciB0LG4scixvLHMsaSxhPWUucGF5bG9hZDtyZXR1cm4gZi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGcuc2VsZWN0KShBLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLm5leHQ9NSwoMCxnLnNlbGVjdCkoTC5xdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiBuPWUuc2VudCxlLm5leHQ9OCwoMCxnLnNlbGVjdCkodi5kZWJ1Z01vZGVTZWxlY3Rvcik7Y2FzZSA4OnJldHVybiByPWUuc2VudCxvPSgwLGguZGVmYXVsdCkoe30sbixhKSxlLm5leHQ9MTIsKDAsZy5zZWxlY3QpKEwubGF1bmNoRGlzdGluY3RTZWxlY3Rvcik7Y2FzZSAxMjpyZXR1cm4gcz1lLnNlbnQsaT1zPT09Qy5MQVRFU1Q/RS5VUkxTLmxhdW5jaGVzTGF0ZXN0OkUuVVJMUy5sYXVuY2hlcyxlLm5leHQ9MTYsKDAsZy5wdXQpKCgwLFQuZmV0Y2hEYXRhQWN0aW9uKSh4Lk5BTUVTUEFDRSkocj9FLlVSTFMuZGVidWcodCk6aSh0KSx7cGFyYW1zOm99KSk7Y2FzZSAxNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRCx0aGlzKX1mdW5jdGlvbiBzKCl7dmFyIGUsdCxuLHI7cmV0dXJuIGYuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKHMpe2Zvcig7Oylzd2l0Y2gocy5wcmV2PXMubmV4dCl7Y2FzZSAwOnJldHVybiBzLm5leHQ9MiwoMCxnLnNlbGVjdCkoUy5maWx0ZXJJZFNlbGVjdG9yKTtjYXNlIDI6cmV0dXJuIGU9cy5zZW50LHMubmV4dD01LCgwLGcuc2VsZWN0KShPLmxhdW5jaEZpbHRlcnNTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiB0PXMuc2VudCxuPXQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KSxyPW4/bi5jb25kaXRpb25zLmZpbHRlcihIKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxoLmRlZmF1bHQpKHt9LGUsKDAsXy5kZWZhdWx0KSh7fSwiZmlsdGVyLiIrdC5jb25kaXRpb24rIi4iK3QuZmlsdGVyaW5nRmllbGQsdC52YWx1ZSkpfSx7fSk6e30scy5uZXh0PTEwLCgwLGcuY2FsbCkobyx7cGF5bG9hZDpyfSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHMuc3RvcCgpfX0sdyx0aGlzKX1mdW5jdGlvbiBpKGUpe3ZhciB0LG4scj1lLnBheWxvYWQ7cmV0dXJuIGYuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybigwLFIudXBkYXRlU3RvcmFnZUl0ZW0pKHkuQVBQTElDQVRJT05fU0VUVElOR1Mse2xhdW5jaERpc3RpbmN0OnJ9KSxlLm5leHQ9MywoMCxnLnNlbGVjdCkoUy5maWx0ZXJJZFNlbGVjdG9yKTtjYXNlIDM6aWYodD1lLnNlbnQsIUwubGF1bmNoZXNEaXN0aW5jdExpbmtzU2VsZWN0b3JzTWFwW3RdKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUubmV4dD03LCgwLGcuc2VsZWN0KShMLmxhdW5jaGVzRGlzdGluY3RMaW5rc1NlbGVjdG9yc01hcFtyXSk7Y2FzZSA3OnJldHVybiBuPWUuc2VudCxlLm5leHQ9MTAsKDAsZy5wdXQpKCgwLGIucmVkaXJlY3QpKG4pKTtjYXNlIDEwOmUubmV4dD0xNDticmVhaztjYXNlIDEyOnJldHVybiBlLm5leHQ9MTQsKDAsZy5jYWxsKShzKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxNLHRoaXMpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gZi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGcudGFrZUV2ZXJ5KSh4LkNIQU5HRV9MQVVOQ0hfRElTVElOQ1QsaSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxrLHRoaXMpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gZi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGcudGFrZUV2ZXJ5KSh4LkZFVENIX0xBVU5DSEVTLHMpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sSSx0aGlzKX1mdW5jdGlvbiB1KCl7cmV0dXJuIGYuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxnLnRha2VFdmVyeSkoeC5GRVRDSF9MQVVOQ0hFU19XSVRIX1BBUkFNUyxvKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LFAsdGhpcyl9ZnVuY3Rpb24gYygpe3JldHVybiBmLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZy5hbGwpKFtsKCksdSgpLGEoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sTix0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksaD1yKG0pO3QubGF1bmNoU2FnYXM9Yzt2YXIgZz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiksRT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLHk9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2NhbFN0b3JhZ2VLZXlzLmpzIiksdj1uKCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvaW5kZXguanMiKSxUPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksQT1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksQz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIiksTz1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvaW5kZXguanMiKSxTPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksUj1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxqPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pc0VtcHR5VmFsdWUuanMiKSx4PW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9jb25zdGFudHMuanMiKSxMPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxEPWYuZGVmYXVsdC5tYXJrKG8pLHc9Zi5kZWZhdWx0Lm1hcmsocyksTT1mLmRlZmF1bHQubWFyayhpKSxrPWYuZGVmYXVsdC5tYXJrKGEpLEk9Zi5kZWZhdWx0Lm1hcmsobCksUD1mLmRlZmF1bHQubWFyayh1KSxOPWYuZGVmYXVsdC5tYXJrKGMpLEg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4hKDAsai5pc0VtcHR5VmFsdWUpKHQpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZmV0Y2hMYXVuY2hlc1dpdGhQYXJhbXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImZldGNoTGF1bmNoZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImNoYW5nZUxhdW5jaERpc3RpbmN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ3YXRjaENoYW5nZUxhdW5jaERpc3RpbmN0IiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJ3YXRjaEZldGNoTGF1bmNoZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIndhdGNoRmV0Y2hMYXVuY2hlc1dpdGhQYXJhbXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImxhdW5jaFNhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJub3RFbXB0eUNvbmRpdGlvbnNQcmVkaWNhdGUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubGF1bmNoZXNEaXN0aW5jdExpbmtzU2VsZWN0b3JzTWFwPXQubGF1bmNoRGlzdGluY3RTZWxlY3Rvcj10LmRlYnVnTW9kZVNlbGVjdG9yPXQucXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3I9dC5sb2FkaW5nU2VsZWN0b3I9dC5sYXVuY2hQYWdpbmF0aW9uU2VsZWN0b3I9dC5sYXVuY2hlc1NlbGVjdG9yPXQubGFzdE9wZXJhdGlvblNlbGVjdG9yPXQudmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yPXQuc2VsZWN0ZWRMYXVuY2hlc1NlbGVjdG9yPXZvaWQgMDt2YXIgbyxzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGk9cihzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksXz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIikscD1uKCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvY29uc3RhbnRzLmpzIiksZj1mdW5jdGlvbihlKXtyZXR1cm4gZS5sYXVuY2hlc3x8e319LG09ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkuZ3JvdXBPcGVyYXRpb25zfSxoPXQuc2VsZWN0ZWRMYXVuY2hlc1NlbGVjdG9yPSgwLGMuY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yKShtKSxnPXQudmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yPSgwLGMuY3JlYXRlVmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yKShtKSxiPXQubGFzdE9wZXJhdGlvblNlbGVjdG9yPSgwLGMuY3JlYXRlTGFzdE9wZXJhdGlvblNlbGVjdG9yKShtKSxFPXQubGF1bmNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZihlKS5sYXVuY2hlc30seT10LmxhdW5jaFBhZ2luYXRpb25TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZihlKS5wYWdpbmF0aW9ufSx2PXQubG9hZGluZ1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpLmxvYWRpbmd8fCExfSxUPXQucXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3I9KDAsZC5jcmVhdGVRdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcikoe25hbWVzcGFjZTpwLk5BTUVTUEFDRSxkZWZhdWx0U29ydGluZzpwLkRFRkFVTFRfU09SVElOR30pLEE9dC5kZWJ1Z01vZGVTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZihlKS5kZWJ1Z01vZGV8fCExfSxDPXQubGF1bmNoRGlzdGluY3RTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZihlKS5sYXVuY2hEaXN0aW5jdHx8Xy5BTEx9LE89ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdS5jcmVhdGVTZWxlY3RvcikoZC5wYWdlU2VsZWN0b3IsZC5wYXlsb2FkU2VsZWN0b3IsZC5wYWdlUHJvcGVydGllc1NlbGVjdG9yLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm57dHlwZTp0LHBheWxvYWQ6KDAsbC5kZWZhdWx0KSh7fSxuLHtmaWx0ZXJJZDplfSksbWV0YTp7cXVlcnk6cn19fSl9LFM9dC5sYXVuY2hlc0Rpc3RpbmN0TGlua3NTZWxlY3RvcnNNYXA9KG89e30sKDAsaS5kZWZhdWx0KShvLF8uQUxMLE8oXy5BTEwpKSwoMCxpLmRlZmF1bHQpKG8sXy5MQVRFU1QsTyhfLkxBVEVTVCkpLG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJzZWxlY3RlZExhdW5jaGVzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJ2YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJsYXN0T3BlcmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJsYXVuY2hlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwibGF1bmNoUGFnaW5hdGlvblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwibG9hZGluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwicXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJkZWJ1Z01vZGVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEMsImxhdW5jaERpc3RpbmN0U2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihTLCJsYXVuY2hlc0Rpc3RpbmN0TGlua3NTZWxlY3RvcnNNYXAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbGF1bmNoL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImdyb3VwT3BlcmF0aW9uc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sYXVuY2gvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTywiY3JlYXRlTGF1bmNoZXNMaW5rU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZGluZ1JlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmxvYWRpbmdSZWR1Y2VyfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvbG9hZGluZy9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvYWRpbmdSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLG89dC5sb2FkaW5nUmVkdWNlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLG49YXJndW1lbnRzWzFdLG89bi50eXBlLHM9bi5tZXRhO2lmKHMmJnMubmFtZXNwYWNlJiZzLm5hbWVzcGFjZSE9PWUpcmV0dXJuIHQ7c3dpdGNoKG8pe2Nhc2Ugci5GRVRDSF9TVEFSVDpyZXR1cm4hMDtjYXNlIHIuRkVUQ0hfU1VDQ0VTUzpjYXNlIHIuQ09OQ0FUX0ZFVENIX1NVQ0NFU1M6Y2FzZSByLkZFVENIX0VSUk9SOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywibG9hZGluZ1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvYWRpbmcvcmVkdWNlci5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoSGlzdG9yeUVudHJpZXNBY3Rpb249dC5yZWZyZXNoTG9nUGFnZURhdGE9dC5mZXRjaExvZ1BhZ2VEYXRhPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvY29uc3RhbnRzLmpzIiksbz10LmZldGNoTG9nUGFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLkZFVENIX0xPR19QQUdFX0RBVEF9fSxzPXQucmVmcmVzaExvZ1BhZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5GRVRDSF9MT0dfUEFHRV9EQVRBLG1ldGE6e3JlZnJlc2g6ITB9fX0saT10LmZldGNoSGlzdG9yeUVudHJpZXNBY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLkZFVENIX0hJU1RPUllfRU5UUklFU319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaExvZ1BhZ2VEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJyZWZyZXNoTG9nUGFnZURhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImZldGNoSGlzdG9yeUVudHJpZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hY3Rpb25DcmVhdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5vcGVuQXR0YWNobWVudEFjdGlvbj10LmNsZWFyQXR0YWNobWVudHNBY3Rpb249dC5mZXRjaEF0dGFjaG1lbnRzQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksbz10LmZldGNoQXR0YWNobWVudHNBY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpyLkZFVENIX0FUVEFDSE1FTlRTX0FDVElPTn19LHM9dC5jbGVhckF0dGFjaG1lbnRzQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5DTEVBUl9BVFRBQ0hNRU5UU19BQ1RJT059fSxpPXQub3BlbkF0dGFjaG1lbnRBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5PUEVOX0FUVEFDSE1FTlRfQUNUSU9OLHBheWxvYWQ6ZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaEF0dGFjaG1lbnRzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJjbGVhckF0dGFjaG1lbnRzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJvcGVuQXR0YWNobWVudEFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GSUxFX01PREFMX0lEU19NQVA9dC5GSUxFX1BBVFRFUk5TX01BUD10LkZJTEVfUFJFVklFV1NfTUFQPXQuQVRUQUNITUVOVF9DT0RFX01PREFMX0lEPXQuQVRUQUNITUVOVF9IQVJfRklMRV9NT0RBTF9JRD10LkFUVEFDSE1FTlRfSU1BR0VfTU9EQUxfSUQ9dC5PUEVOX0FUVEFDSE1FTlRfQUNUSU9OPXQuQ0xFQVJfQVRUQUNITUVOVFNfQUNUSU9OPXQuRkVUQ0hfQVRUQUNITUVOVFNfQUNUSU9OPXQuQVRUQUNITUVOVFNfTkFNRVNQQUNFPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxsPXIoYSksdT1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL3htbC5zdmciKSxjPXIodSksZD1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL3BocC5zdmciKSxfPXIoZCkscD1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2pzb24uc3ZnIiksZj1yKHApLG09bigiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy9qcy5zdmciKSxoPXIobSksZz1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2hhci5zdmciKSxiPXIoZyksRT1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2Nzcy5zdmciKSx5PXIoRSksdj1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2Nzdi5zdmciKSxUPXIodiksQT1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2h0bWwuc3ZnIiksQz1yKEEpLE89bigiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy90eHQuc3ZnIiksUz1yKE8pLFI9bigiLi9zcmMvY29tbW9uL2ltZy9hdHRhY2htZW50cy9hcmNoaXZlLnN2ZyIpLGo9cihSKSx4PW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksTD1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9KHgpLEQ9dC5BVFRBQ0hNRU5UU19OQU1FU1BBQ0U9ImxvZy9hdHRhY2htZW50cyIsdz10LkZFVENIX0FUVEFDSE1FTlRTX0FDVElPTj0iZmV0Y2hBdHRhY2htZW50c0FjdGlvbiIsTT10LkNMRUFSX0FUVEFDSE1FTlRTX0FDVElPTj0iY2xlYXJBdHRhY2htZW50c0FjdGlvbiIsaz10Lk9QRU5fQVRUQUNITUVOVF9BQ1RJT049Im9wZW5BdHRhY2htZW50QWN0aW9uIixJPXQuQVRUQUNITUVOVF9JTUFHRV9NT0RBTF9JRD0iYXR0YWNobWVudEltYWdlTW9kYWwiLFA9dC5BVFRBQ0hNRU5UX0hBUl9GSUxFX01PREFMX0lEPSJhdHRhY2htZW50SGFyRmlsZU1vZGFsIixOPXQuQVRUQUNITUVOVF9DT0RFX01PREFMX0lEPSJhdHRhY2htZW50Q29kZU1vZGFsIixIPXQuRklMRV9QUkVWSUVXU19NQVA9KG89e30sKDAsbC5kZWZhdWx0KShvLEwuWE1MLGMuZGVmYXVsdCksKDAsbC5kZWZhdWx0KShvLEwuSkFWQVNDUklQVCxoLmRlZmF1bHQpLCgwLGwuZGVmYXVsdCkobyxMLkpTT04sZi5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5DU1MseS5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5QSFAsXy5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5IQVIsYi5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5UWFQsUy5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5QTEFJTixTLmRlZmF1bHQpLCgwLGwuZGVmYXVsdCkobyxMLkhUTUwsQy5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5DU1YsVC5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5aSVAsai5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5SQVIsai5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5UR1osai5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5UQVosai5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5UQVIsai5kZWZhdWx0KSwoMCxsLmRlZmF1bHQpKG8sTC5HWklQLGouZGVmYXVsdCksbyksRj10LkZJTEVfUEFUVEVSTlNfTUFQPShzPXt9LCgwLGwuZGVmYXVsdCkocyxMLlJBUiwvXGJyYXJcYi9pKSwoMCxsLmRlZmF1bHQpKHMsTC5IQVIsL1xiaGFyXGIvaSksKDAsbC5kZWZhdWx0KShzLEwuUEhQLC9cYnBocFxiL2kpLHMpLEI9dC5GSUxFX01PREFMX0lEU19NQVA9KGk9e30sKDAsbC5kZWZhdWx0KShpLEwuWE1MLE4pLCgwLGwuZGVmYXVsdCkoaSxMLkpBVkFTQ1JJUFQsTiksKDAsbC5kZWZhdWx0KShpLEwuSlNPTixOKSwoMCxsLmRlZmF1bHQpKGksTC5DU1MsTiksKDAsbC5kZWZhdWx0KShpLEwuUEhQLE4pLCgwLGwuZGVmYXVsdCkoaSxMLkhBUixQKSwoMCxsLmRlZmF1bHQpKGksTC5JTUFHRSxJKSxpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwiQVRUQUNITUVOVFNfTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodywiRkVUQ0hfQVRUQUNITUVOVFNfQUNUSU9OIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiQ0xFQVJfQVRUQUNITUVOVFNfQUNUSU9OIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiT1BFTl9BVFRBQ0hNRU5UX0FDVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEksIkFUVEFDSE1FTlRfSU1BR0VfTU9EQUxfSUQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJBVFRBQ0hNRU5UX0hBUl9GSUxFX01PREFMX0lEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiQVRUQUNITUVOVF9DT0RFX01PREFMX0lEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiRklMRV9QUkVWSUVXU19NQVAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJGSUxFX1BBVFRFUk5TX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIkZJTEVfTU9EQUxfSURTX01BUCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm9wZW5BdHRhY2htZW50QWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5vcGVuQXR0YWNobWVudEFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hBdHRhY2htZW50c0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmV0Y2hBdHRhY2htZW50c0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2xlYXJBdHRhY2htZW50c0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY2xlYXJBdHRhY2htZW50c0FjdGlvbn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZJTEVfUFJFVklFV1NfTUFQIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5GSUxFX1BSRVZJRVdTX01BUH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRklMRV9NT0RBTF9JRFNfTUFQIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5GSUxFX01PREFMX0lEU19NQVB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFUVEFDSE1FTlRfQ09ERV9NT0RBTF9JRCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uQVRUQUNITUVOVF9DT0RFX01PREFMX0lEfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBVFRBQ0hNRU5UX0hBUl9GSUxFX01PREFMX0lEIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BVFRBQ0hNRU5UX0hBUl9GSUxFX01PREFMX0lEfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBVFRBQ0hNRU5UX0lNQUdFX01PREFMX0lEIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BVFRBQ0hNRU5UX0lNQUdFX01PREFMX0lEfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBVFRBQ0hNRU5UU19OQU1FU1BBQ0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkFUVEFDSE1FTlRTX05BTUVTUEFDRX19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvdXRpbHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0RmlsZUljb25Tb3VyY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmdldEZpbGVJY29uU291cmNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRBdHRhY2htZW50TW9kYWxJZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0QXR0YWNobWVudE1vZGFsSWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4dHJhY3RFeHRlbnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmV4dHJhY3RFeHRlbnNpb259fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhdHRhY2htZW50SXRlbXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXR0YWNobWVudEl0ZW1zU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImF0dGFjaG1lbnRzTG9hZGluZ1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hdHRhY2htZW50c0xvYWRpbmdTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9nc1dpdGhBdHRhY2htZW50c1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sb2dzV2l0aEF0dGFjaG1lbnRzU2VsZWN0b3J9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImF0dGFjaG1lbnRTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYXR0YWNobWVudFNhZ2FzfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYXR0YWNobWVudHNSZWR1Y2VyPXQubG9nc1dpdGhBdHRhY2htZW50c1JlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL2luZGV4LmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvY29uc3RhbnRzLmpzIiksbD10LmxvZ3NXaXRoQXR0YWNobWVudHNSZWR1Y2VyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3N3aXRjaChhcmd1bWVudHNbMV0udHlwZSl7Y2FzZSBhLkNMRUFSX0FUVEFDSE1FTlRTX0FDVElPTjpyZXR1cm5bXTtkZWZhdWx0OnJldHVybiBlfX0sdT10LmF0dGFjaG1lbnRzUmVkdWNlcj0oMCxyLmNvbWJpbmVSZWR1Y2Vycykoe2xvZ3NXaXRoQXR0YWNobWVudHM6KDAsby5xdWV1ZVJlZHVjZXJzKSgoMCxzLmZldGNoUmVkdWNlcikoYS5BVFRBQ0hNRU5UU19OQU1FU1BBQ0Use2NvbnRlbnRQYXRoOiJjb250ZW50In0pLGwpLGxvYWRpbmc6KDAsaS5sb2FkaW5nUmVkdWNlcikoYS5BVFRBQ0hNRU5UU19OQU1FU1BBQ0UpfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImxvZ3NXaXRoQXR0YWNobWVudHNSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImF0dGFjaG1lbnRzUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3JlZHVjZXIuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbygpe3ZhciBlLHQ7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9MiwoMCxBLnNlbGVjdCkoai5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gZT1uLnNlbnQsbi5uZXh0PTUsKDAsQS5zZWxlY3QpKHguYWN0aXZlTG9nSWRTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiB0PW4uc2VudCxuLm5leHQ9OCwoMCxBLnB1dCkoKDAsUi5mZXRjaERhdGFBY3Rpb24pKEQuQVRUQUNITUVOVFNfTkFNRVNQQUNFKShDLlVSTFMubG9nSXRlbXMoZSx0KSx7cGFyYW1zOnsiZmlsdGVyLmV4LmJpbmFyeUNvbnRlbnQiOiEwfX0pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LE0sdGhpcyl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmJpbmFyeUlkO3JldHVybiB5LmRlZmF1bHQucmVzb2x2ZSh7aW1hZ2U6Qy5VUkxTLmdldEZpbGVCeUlkKHQpfSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLmJpbmFyeUlkO3JldHVybigwLE8uZmV0Y2gpKEMuVVJMUy5nZXRGaWxlQnlJZCh0KSl9ZnVuY3Rpb24gYShlKXt2YXIgdCxuPWUuYmluYXJ5SWQ7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxBLmNhbGwpKHMse2JpbmFyeUlkOm59KTtjYXNlIDI6cmV0dXJuIHQ9ZS5zZW50LGUubmV4dD01LCgwLEEucHV0KSgoMCxTLnNob3dNb2RhbEFjdGlvbikoe2lkOkQuQVRUQUNITUVOVF9JTUFHRV9NT0RBTF9JRCxkYXRhOnR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxrLHRoaXMpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ7cmV0dXJuIFQuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9MiwoMCxBLmNhbGwpKGksZSk7Y2FzZSAyOnJldHVybiB0PW4uc2VudCxuLm5leHQ9NSwoMCxBLnB1dCkoKDAsUy5zaG93TW9kYWxBY3Rpb24pKHtpZDpELkFUVEFDSE1FTlRfSEFSX0ZJTEVfTU9EQUxfSUQsZGF0YTp7aGFyRGF0YTp0fX0pKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LEksdGhpcyl9ZnVuY3Rpb24gdShlKXt2YXIgdCxuO3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsKDAsQS5jYWxsKShpLGUpO2Nhc2UgMjpyZXR1cm4gdD1yLnNlbnQsbj1lLmV4dGVuc2lvbj09PUwuSlNPTj8oMCxiLmRlZmF1bHQpKHQsbnVsbCw0KTp0LHIubmV4dD02LCgwLEEucHV0KSgoMCxTLnNob3dNb2RhbEFjdGlvbikoe2lkOkQuQVRUQUNITUVOVF9DT0RFX01PREFMX0lELGRhdGE6e2V4dGVuc2lvbjplLmV4dGVuc2lvbixjb250ZW50Om59fSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0sUCx0aGlzKX1mdW5jdGlvbiBjKGUpe3ZhciB0LG4scj1lLnBheWxvYWQsbz1yLmlkLHM9ci5jb250ZW50VHlwZTtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0PSgwLHcuZ2V0QXR0YWNobWVudE1vZGFsSWQpKHMpKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBuPXtiaW5hcnlJZDpvLGV4dGVuc2lvbjooMCx3LmV4dHJhY3RFeHRlbnNpb24pKHMpfSxlLnByZXY9MyxlLm5leHQ9NiwoMCxBLmNhbGwpKFVbdF0sbik7Y2FzZSA2OmUubmV4dD0xMDticmVhaztjYXNlIDg6ZS5wcmV2PTgsZS50MD1lLmNhdGNoKDMpO2Nhc2UgMTA6ZS5uZXh0PTEzO2JyZWFrO2Nhc2UgMTI6d2luZG93Lm9wZW4oQy5VUkxTLmdldEZpbGVCeUlkKG8pKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxOLHRoaXMsW1szLDhdXSl9ZnVuY3Rpb24gZCgpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsQS50YWtlTGF0ZXN0KShELkZFVENIX0FUVEFDSE1FTlRTX0FDVElPTixvKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEgsdGhpcyl9ZnVuY3Rpb24gXygpe3JldHVybiBULmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsQS50YWtlTGF0ZXN0KShELk9QRU5fQVRUQUNITUVOVF9BQ1RJT04sYyk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxGLHRoaXMpfWZ1bmN0aW9uIHAoKXtyZXR1cm4gVC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLEEuYWxsKShbXygpLGQoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sQix0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGYsbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnkuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKSxUPXIodik7dC5mZXRjaEltYWdlRGF0YT1zLHQuZmV0Y2hEYXRhPWksdC5hdHRhY2htZW50U2FnYXM9cDt2YXIgQT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxDPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksTz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxTPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL2luZGV4LmpzIiksUj1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGo9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLHg9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLEw9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9maWxlVHlwZXMuanMiKSxEPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9jb25zdGFudHMuanMiKSx3PW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy91dGlscy5qcyIpLE09VC5kZWZhdWx0Lm1hcmsobyksaz1ULmRlZmF1bHQubWFyayhhKSxJPVQuZGVmYXVsdC5tYXJrKGwpLFA9VC5kZWZhdWx0Lm1hcmsodSksTj1ULmRlZmF1bHQubWFyayhjKSxIPVQuZGVmYXVsdC5tYXJrKGQpLEY9VC5kZWZhdWx0Lm1hcmsoXyksQj1ULmRlZmF1bHQubWFyayhwKSxVPShmPXt9LCgwLGguZGVmYXVsdCkoZixELkFUVEFDSE1FTlRfSU1BR0VfTU9EQUxfSUQsYSksKDAsaC5kZWZhdWx0KShmLEQuQVRUQUNITUVOVF9IQVJfRklMRV9NT0RBTF9JRCxsKSwoMCxoLmRlZmF1bHQpKGYsRC5BVFRBQ0hNRU5UX0NPREVfTU9EQUxfSUQsdSksZik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZldGNoQXR0YWNobWVudHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImZldGNoSW1hZ2VEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJmZXRjaERhdGEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIm9wZW5JbWFnZU1vZGFsc1dvcmtlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwib3Blbkhhck1vZGFsc1dvcmtlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwib3BlbkJpbmFyeU1vZGFsc1dvcmtlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywib3BlbkF0dGFjaG1lbnQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIndhdGNoRmV0Y2hBdHRhY2htZW50cyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywid2F0Y2hPcGVuQXR0YWNobWVudCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiYXR0YWNobWVudFNhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJBVFRBQ0hNRU5UX01PREFMX1dPUktFUlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYXR0YWNobWVudEl0ZW1zU2VsZWN0b3I9dC5hdHRhY2htZW50c0xvYWRpbmdTZWxlY3Rvcj10LmxvZ3NXaXRoQXR0YWNobWVudHNTZWxlY3Rvcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvdXRpbHMuanMiKSxpPXQubG9nc1dpdGhBdHRhY2htZW50c1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybigwLG8uYXR0YWNobWVudHNTZWxlY3RvcikoZSkubG9nc1dpdGhBdHRhY2htZW50c3x8W119LGE9dC5hdHRhY2htZW50c0xvYWRpbmdTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4oMCxvLmF0dGFjaG1lbnRzU2VsZWN0b3IpKGUpLmxvYWRpbmd8fCExfSxsPXQuYXR0YWNobWVudEl0ZW1zU2VsZWN0b3I9KDAsci5jcmVhdGVTZWxlY3RvcikoaSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYmluYXJ5Q29udGVudH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57aWQ6ZS5pZCxzcmM6KDAscy5nZXRGaWxlSWNvblNvdXJjZSkoZSksYWx0OmUuY29udGVudFR5cGUsY29udGVudFR5cGU6ZS5jb250ZW50VHlwZX19KX0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJsb2dzV2l0aEF0dGFjaG1lbnRzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJhdHRhY2htZW50c0xvYWRpbmdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImF0dGFjaG1lbnRJdGVtc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEF0dGFjaG1lbnRNb2RhbElkPXQuZ2V0RmlsZUljb25Tb3VyY2U9dC5nZXRFeHRlbnNpb25Gcm9tUGF0dGVybj10LmV4dHJhY3RFeHRlbnNpb249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSx1PW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZmlsZVR5cGVzLmpzIiksYz1uKCIuL3NyYy9jb21tb24vaW1nL2F0dGFjaG1lbnRzL2F0dGFjaG1lbnQuc3ZnIiksZD1yKGMpLF89bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2NvbnN0YW50cy5qcyIpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLyIpfHwiIn0sZj10LmV4dHJhY3RFeHRlbnNpb249ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKTtyZXR1cm4gdFsxXXx8dFswXXx8IiJ9LG09dC5nZXRFeHRlbnNpb25Gcm9tUGF0dGVybj1mdW5jdGlvbihlKXtyZXR1cm4oMCxhLmRlZmF1bHQpKF8uRklMRV9QQVRURVJOU19NQVApLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuISFfLkZJTEVfUEFUVEVSTlNfTUFQW3RdLmV4ZWMoZSl9KX0saD10LmdldEZpbGVJY29uU291cmNlPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZS5jb250ZW50VHlwZSksbj0oMCxzLmRlZmF1bHQpKHQsMikscj1uWzBdLG89blsxXTtpZihyPT09dS5JTUFHRSlyZXR1cm4gbC5VUkxTLmdldEZpbGVCeUlkKGUuaWQpO3ZhciBpPW0ob3x8cik7cmV0dXJuIF8uRklMRV9QUkVWSUVXU19NQVBbb3x8cl18fF8uRklMRV9QUkVWSUVXU19NQVBbaV18fGQuZGVmYXVsdH0sZz10LmdldEF0dGFjaG1lbnRNb2RhbElkPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSksbj0oMCxzLmRlZmF1bHQpKHQsMikscj1uWzBdLG89blsxXSxpPW0ob3x8cik7cmV0dXJuIF8uRklMRV9NT0RBTF9JRFNfTUFQW3I9PT11LklNQUdFP3UuSU1BR0U6b3x8cl18fF8uRklMRV9NT0RBTF9JRFNfTUFQW2ldfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiZXh0cmFjdEV4dGVuc2lvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiZ2V0RXh0ZW5zaW9uRnJvbVBhdHRlcm4iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImdldEZpbGVJY29uU291cmNlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJnZXRBdHRhY2htZW50TW9kYWxJZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiZ2V0QXR0YWNobWVudFR5cGVDb25maWciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9hdHRhY2htZW50cy91dGlscy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9TT1JUSU5HPXQuV0lUSF9BVFRBQ0hNRU5UU19TVE9SQUdFX0tFWT10LkRFRkFVTFRfV0lUSF9BVFRBQ0hNRU5UUz10LkxPR19MRVZFTF9TVE9SQUdFX0tFWT10LkRFRkFVTFRfTE9HX0xFVkVMPXQuREVGQVVMVF9ISVNUT1JZX0RFUFRIPXQuRkVUQ0hfSElTVE9SWV9FTlRSSUVTPXQuRkVUQ0hfTE9HX1BBR0VfREFUQT10LkhJU1RPUllfTkFNRVNQQUNFPXQuQUNUSVZJVFlfTkFNRVNQQUNFPXQuTE9HX0lURU1TX05BTUVTUEFDRT10Lk5BTUVTUEFDRT12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2dMZXZlbHMuanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvaW5kZXguanMiKSxzPXQuTkFNRVNQQUNFPSJsb2ciLGk9dC5MT0dfSVRFTVNfTkFNRVNQQUNFPXMrIi9sb2dJdGVtcyIsYT10LkFDVElWSVRZX05BTUVTUEFDRT1zKyIvYWN0aXZpdHkiLGw9dC5ISVNUT1JZX05BTUVTUEFDRT1zKyIvaGlzdG9yeSIsdT10LkZFVENIX0xPR19QQUdFX0RBVEE9ImZldGNoTG9nUGFnZURhdGEiLGM9dC5GRVRDSF9ISVNUT1JZX0VOVFJJRVM9ImZldGNoSGlzdG9yeUVudHJpZXMiLGQ9dC5ERUZBVUxUX0hJU1RPUllfREVQVEg9MTAsXz10LkRFRkFVTFRfTE9HX0xFVkVMPXIuVFJBQ0UscD10LkxPR19MRVZFTF9TVE9SQUdFX0tFWT0ibG9nRmlsdGVyaW5nTGV2ZWwiLGY9dC5ERUZBVUxUX1dJVEhfQVRUQUNITUVOVFM9ITEsbT10LldJVEhfQVRUQUNITUVOVFNfU1RPUkFHRV9LRVk9ImxvZ0ZpbHRlcmluZ0xldmVsV2l0aEF0dGFjaG1lbnRzIixoPXQuREVGQVVMVF9TT1JUSU5HPSgwLG8uZm9ybWF0U29ydGluZ1N0cmluZykoWyJsb2dUaW1lIl0sby5TT1JUSU5HX0FTQyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIk5BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkxPR19JVEVNU19OQU1FU1BBQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJBQ1RJVklUWV9OQU1FU1BBQ0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJISVNUT1JZX05BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkZFVENIX0xPR19QQUdFX0RBVEEiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJGRVRDSF9ISVNUT1JZX0VOVFJJRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJERUZBVUxUX0hJU1RPUllfREVQVEgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJERUZBVUxUX0xPR19MRVZFTCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkxPR19MRVZFTF9TVE9SQUdFX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkRFRkFVTFRfV0lUSF9BVFRBQ0hNRU5UUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sIldJVEhfQVRUQUNITUVOVFNfU1RPUkFHRV9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJERUZBVUxUX1NPUlRJTkciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sb2cvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9zYWdhcy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2dTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubG9nU2FnYXN9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoTG9nUGFnZURhdGEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZldGNoTG9nUGFnZURhdGF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZnJlc2hMb2dQYWdlRGF0YSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVmcmVzaExvZ1BhZ2VEYXRhfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEhpc3RvcnlFbnRyaWVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaEhpc3RvcnlFbnRyaWVzQWN0aW9ufX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvZ1JlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmxvZ1JlZHVjZXJ9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOQU1FU1BBQ0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLk5BTUVTUEFDRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiREVGQVVMVF9MT0dfTEVWRUwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkRFRkFVTFRfTE9HX0xFVkVMfX0pO3ZhciBhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGlzdG9yeUl0ZW1zU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmhpc3RvcnlJdGVtc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhY3RpdmVMb2dJZFNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hY3RpdmVMb2dJZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhY3RpdmVMb2dTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWN0aXZlTG9nU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvZ0FjdGl2aXR5U2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmxvZ0FjdGl2aXR5U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhc3RMb2dBY3Rpdml0eVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sYXN0TG9nQWN0aXZpdHlTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9nSXRlbXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubG9nSXRlbXNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9nUGFnaW5hdGlvblNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sb2dQYWdpbmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubG9hZGluZ1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmV2aW91c0l0ZW1TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucHJldmlvdXNJdGVtU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5leHRJdGVtU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLm5leHRJdGVtU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5leHRMb2dMaW5rU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLm5leHRMb2dMaW5rU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByZXZpb3VzTG9nTGlua1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wcmV2aW91c0xvZ0xpbmtTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmV0cnlMaW5rU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnJldHJ5TGlua1NlbGVjdG9yfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubG9nUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2FkaW5nL2luZGV4LmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvY29uc3RhbnRzLmpzIiksbD1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvYXR0YWNobWVudHMvcmVkdWNlci5qcyIpLHU9dC5sb2dSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7bG9nSXRlbXM6KDAsby5mZXRjaFJlZHVjZXIpKGEuTE9HX0lURU1TX05BTUVTUEFDRSx7Y29udGVudFBhdGg6ImNvbnRlbnQifSkscGFnaW5hdGlvbjooMCxzLnBhZ2luYXRpb25SZWR1Y2VyKShhLkxPR19JVEVNU19OQU1FU1BBQ0UpLGxvYWRpbmc6KDAsaS5sb2FkaW5nUmVkdWNlcikoYS5MT0dfSVRFTVNfTkFNRVNQQUNFKSxhY3Rpdml0eTooMCxvLmZldGNoUmVkdWNlcikoYS5BQ1RJVklUWV9OQU1FU1BBQ0UpLGhpc3RvcnlFbnRyaWVzOigwLG8uZmV0Y2hSZWR1Y2VyKShhLkhJU1RPUllfTkFNRVNQQUNFKSxhdHRhY2htZW50czpsLmF0dGFjaG1lbnRzUmVkdWNlcn0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImxvZ1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9yZWR1Y2VyLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sb2cvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3ZhciBlLHQ7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9MiwoMCxmLnNlbGVjdCkoYi5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gZT1uLnNlbnQsbi5uZXh0PTUsKDAsZi5zZWxlY3QpKFQuYWN0aXZlTG9nSWRTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiB0PW4uc2VudCxuLm5leHQ9OCwoMCxmLnB1dCkoKDAseS5mZXRjaERhdGFBY3Rpb24pKHYuQUNUSVZJVFlfTkFNRVNQQUNFKShnLlVSTFMubG9nSXRlbUFjdGl2aXR5KGUsdCkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LEMsdGhpcyl9ZnVuY3Rpb24gbygpe3ZhciBlLHQsbixyLG87cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKHMpe2Zvcig7Oylzd2l0Y2gocy5wcmV2PXMubmV4dCl7Y2FzZSAwOnJldHVybiBzLm5leHQ9MiwoMCxmLnNlbGVjdCkoYi5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gZT1zLnNlbnQscy5uZXh0PTUsKDAsZi5zZWxlY3QpKEUucGFnZVByb3BlcnRpZXNTZWxlY3Rvcix2Lk5BTUVTUEFDRSk7Y2FzZSA1OnJldHVybiB0PXMuc2VudCxuPXRbImZpbHRlci5ndGUubGV2ZWwiXXx8KDAsbS5nZXRTdG9yYWdlSXRlbSkodi5MT0dfTEVWRUxfU1RPUkFHRV9LRVkpfHx2LkRFRkFVTFRfTE9HX0xFVkVMLHMubmV4dD05LCgwLGYuc2VsZWN0KShULnF1ZXJ5U2VsZWN0b3Isdi5OQU1FU1BBQ0UpO2Nhc2UgOTpyZXR1cm4gcj1zLnNlbnQscy5uZXh0PTEyLCgwLGYuc2VsZWN0KShULmFjdGl2ZUxvZ0lkU2VsZWN0b3IpO2Nhc2UgMTI6cmV0dXJuIG89cy5zZW50LHMubmV4dD0xNSwoMCxmLnB1dCkoKDAseS5mZXRjaERhdGFBY3Rpb24pKHYuTE9HX0lURU1TX05BTUVTUEFDRSkoZy5VUkxTLmxvZ0l0ZW1zKGUsbyxuKSx7cGFyYW1zOnJ9KSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHMuc3RvcCgpfX0sTyx0aGlzKX1mdW5jdGlvbiBzKCl7dmFyIGUsdDtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLCgwLGYuc2VsZWN0KShiLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPW4uc2VudCxuLm5leHQ9NSwoMCxmLnNlbGVjdCkoRS5sb2dJdGVtSWRTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiB0PW4uc2VudCxuLm5leHQ9OCwoMCxmLnB1dCkoKDAseS5mZXRjaERhdGFBY3Rpb24pKHYuSElTVE9SWV9OQU1FU1BBQ0UpKGcuVVJMUy50ZXN0SXRlbXNIaXN0b3J5KGUsdCx2LkRFRkFVTFRfSElTVE9SWV9ERVBUSCkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19LFMsdGhpcyl9ZnVuY3Rpb24gaSgpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZi5wdXQpKCgwLGguZmV0Y2hUZXN0SXRlbXNBY3Rpb24pKHtvZmZzZXQ6MX0pKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LCgwLGYuYWxsKShbKDAsZi5jYWxsKShoLmZldGNoUGFyZW50SXRlbXMpLCgwLGYuY2FsbCkocyksKDAsZi5jYWxsKShvKSwoMCxmLmNhbGwpKHIpXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxSLHRoaXMpfWZ1bmN0aW9uIGEoKXt2YXIgZSx0O3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsKDAsZi5zZWxlY3QpKFQuYWN0aXZlTG9nSWRTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPW4uc2VudCxuLm5leHQ9NSwoMCxmLnNlbGVjdCkoVC5wcmV2QWN0aXZlTG9nSWRTZWxlY3Rvcik7Y2FzZSA1OmlmKHQ9bi5zZW50LGU9PT10KXtuLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG4ubmV4dD05LCgwLGYuYWxsKShbKDAsZi5jYWxsKShvKSwoMCxmLmNhbGwpKHIpLCgwLGYucHV0KSgoMCxBLmNsZWFyQXR0YWNobWVudHNBY3Rpb24pKCkpXSk7Y2FzZSA5Om4ubmV4dD0xMzticmVhaztjYXNlIDExOnJldHVybiBuLm5leHQ9MTMsKDAsZi5jYWxsKShvKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSxqLHRoaXMpfWZ1bmN0aW9uIGwoZSl7dmFyIHQsbj1lLm1ldGEsbD12b2lkIDA9PT1uP3t9Om47cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxmLnNlbGVjdCkoRS5wYXRobmFtZUNoYW5nZWRTZWxlY3Rvcik7Y2FzZSAyOmlmKHQ9ZS5zZW50LCFsLnJlZnJlc2gpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLm5leHQ9NiwoMCxmLmFsbCkoWygwLGYuY2FsbCkocyksKDAsZi5jYWxsKShvKSwoMCxmLmNhbGwpKHIpLCgwLGYucHV0KSgoMCxBLmZldGNoQXR0YWNobWVudHNBY3Rpb24pKCkpXSk7Y2FzZSA2OnJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA3OmlmKCF0KXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUubmV4dD0xMCwoMCxmLmNhbGwpKGkpO2Nhc2UgMTA6ZS5uZXh0PTE0O2JyZWFrO2Nhc2UgMTI6cmV0dXJuIGUubmV4dD0xNCwoMCxmLmNhbGwpKGEpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LHgsdGhpcyl9ZnVuY3Rpb24gdSgpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZi50YWtlRXZlcnkpKHYuRkVUQ0hfTE9HX1BBR0VfREFUQSxsKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEwsdGhpcyl9ZnVuY3Rpb24gYygpe3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsZi50YWtlRXZlcnkpKHYuRkVUQ0hfSElTVE9SWV9FTlRSSUVTLHMpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRCx0aGlzKX1mdW5jdGlvbiBkKCl7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxmLmFsbCkoW3UoKSxjKCksKDAsQS5hdHRhY2htZW50U2FnYXMpKCldKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LHcsdGhpcyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKSxwPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oXyk7dC5sb2dTYWdhcz1kO3ZhciBmPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyIpLG09bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksaD1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9pbmRleC5qcyIpLGc9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxiPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxFPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIikseT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLHY9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2NvbnN0YW50cy5qcyIpLFQ9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLEE9bigiLi9zcmMvY29udHJvbGxlcnMvbG9nL2F0dGFjaG1lbnRzL2luZGV4LmpzIiksQz1wLmRlZmF1bHQubWFyayhyKSxPPXAuZGVmYXVsdC5tYXJrKG8pLFM9cC5kZWZhdWx0Lm1hcmsocyksUj1wLmRlZmF1bHQubWFyayhpKSxqPXAuZGVmYXVsdC5tYXJrKGEpLHg9cC5kZWZhdWx0Lm1hcmsobCksTD1wLmRlZmF1bHQubWFyayh1KSxEPXAuZGVmYXVsdC5tYXJrKGMpLHc9cC5kZWZhdWx0Lm1hcmsoZCk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImZldGNoQWN0aXZpdHkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImZldGNoTG9nSXRlbXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImZldGNoSGlzdG9yeUVudHJpZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksImZldGNoV2hvbGVQYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJmZXRjaEhpc3RvcnlJdGVtRGF0YSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiZmV0Y2hMb2dQYWdlRGF0YSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwid2F0Y2hGZXRjaExvZ1BhZ2VEYXRhIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJ3YXRjaEZldGNoSGlzdG9yeUVudHJpZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImxvZ1NhZ2FzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJldHJ5TGlua1NlbGVjdG9yPXQubmV4dEl0ZW1TZWxlY3Rvcj10LnByZXZpb3VzSXRlbVNlbGVjdG9yPXQubmV4dExvZ0xpbmtTZWxlY3Rvcj10LnByZXZpb3VzTG9nTGlua1NlbGVjdG9yPXQuYWN0aXZlTG9nU2VsZWN0b3I9dC5wcmV2QWN0aXZlTG9nSWRTZWxlY3Rvcj10LmFjdGl2ZUxvZ0lkU2VsZWN0b3I9dC5oaXN0b3J5SXRlbXNTZWxlY3Rvcj10LnF1ZXJ5U2VsZWN0b3I9dC5hdHRhY2htZW50c1NlbGVjdG9yPXQubG9hZGluZ1NlbGVjdG9yPXQubG9nUGFnaW5hdGlvblNlbGVjdG9yPXQubG9nSXRlbXNTZWxlY3Rvcj10Lmxhc3RMb2dBY3Rpdml0eVNlbGVjdG9yPXQubG9nQWN0aXZpdHlTZWxlY3Rvcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZXNlbGVjdC9saWIvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9pbmRleC5qcyIpLF89bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2luZGV4LmpzIikscD1uKCIuL3NyYy9jb21tb24vdXRpbHMvcm91dGluZ1V0aWxzLmpzIiksZj1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvdXRpbHMuanMiKSxtPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvZy9jb25zdGFudHMuanMiKSxoPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxvZ3x8e319LGc9dC5sb2dBY3Rpdml0eVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLmFjdGl2aXR5fHxbXX0sYj10Lmxhc3RMb2dBY3Rpdml0eVNlbGVjdG9yPSgwLGwuY3JlYXRlU2VsZWN0b3IpKGcsZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoP2VbMF06bnVsbH0pLEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkuaGlzdG9yeUVudHJpZXN8fFtdfSx5PXQubG9nSXRlbXNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gaChlKS5sb2dJdGVtc3x8W119LHY9dC5sb2dQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkucGFnaW5hdGlvbn0sVD10LmxvYWRpbmdTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gaChlKS5sb2FkaW5nfHwhMX0sQT10LmF0dGFjaG1lbnRzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkuYXR0YWNobWVudHN8fHt9fSxDPXQucXVlcnlTZWxlY3Rvcj0oMCx1LmNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yKSh7ZGVmYXVsdFBhZ2luYXRpb246Yy5ERUZBVUxUX1BBR0lOQVRJT04sZGVmYXVsdFNvcnRpbmc6bS5ERUZBVUxUX1NPUlRJTkd9KSxPPXQuaGlzdG9yeUl0ZW1zU2VsZWN0b3I9KDAsbC5jcmVhdGVTZWxlY3RvcikoRSx1LmxvZ0l0ZW1JZFNlbGVjdG9yLGZ1bmN0aW9uKGUsdCl7aWYoIWUubGVuZ3RoKXJldHVybltdO3ZhciBuPVtdLmNvbmNhdCgoMCxhLmRlZmF1bHQpKGUpKS5yZXZlcnNlKCkscj1uLnBvcCgpO2lmKCFyKXJldHVybltdO3ZhciBvPXIucmVzb3VyY2VzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10fSk7aWYoIW8pcmV0dXJuW107dmFyIGk9bi5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXNvdXJjZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVuaXF1ZUlkPT09by51bmlxdWVJZH0pO3JldHVybigwLHMuZGVmYXVsdCkoe30sKDAsZi5ub3JtYWxpemVIaXN0b3J5SXRlbSkoZSx0KSl9KTtyZXR1cm4gby5sYXVuY2hOdW1iZXI9ci5sYXVuY2hOdW1iZXIsaS5wdXNoKG8pLCgwLGYuY2FsY3VsYXRlR3Jvd3RoRHVyYXRpb24pKGkpfSksUz1mdW5jdGlvbihlKXtyZXR1cm4oMCxsLmNyZWF0ZVNlbGVjdG9yKSh1LmxvZ0l0ZW1JZFNlbGVjdG9yLGUsZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxwLmV4dHJhY3ROYW1lc3BhY2VkUXVlcnkpKHQsbS5OQU1FU1BBQ0UpO3JldHVybiBOdW1iZXIobi5oaXN0b3J5KXx8ZX0pfSxSPXQuYWN0aXZlTG9nSWRTZWxlY3Rvcj1TKHUucGFnZVByb3BlcnRpZXNTZWxlY3Rvciksaj10LnByZXZBY3RpdmVMb2dJZFNlbGVjdG9yPVModS5wcmV2UGFnZVByb3BlcnRpZXNTZWxlY3RvcikseD10LmFjdGl2ZUxvZ1NlbGVjdG9yPSgwLGwuY3JlYXRlU2VsZWN0b3IpKE8sUixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10fSl9KSxMPXQucHJldmlvdXNMb2dMaW5rU2VsZWN0b3I9KDAsbC5jcmVhdGVTZWxlY3RvcikodS5wYXlsb2FkU2VsZWN0b3IsdS5wYWdlUHJvcGVydGllc1NlbGVjdG9yLHUudGVzdEl0ZW1JZHNBcnJheVNlbGVjdG9yLHUubG9nSXRlbUlkU2VsZWN0b3IsXy5kZWJ1Z01vZGVTZWxlY3RvcixkLml0ZW1zU2VsZWN0b3IsZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBsPSgwLGYuZ2V0UHJldmlvdXNJdGVtKShpLHIpO2lmKCFsKXJldHVybiBudWxsO3ZhciBjPSgwLGYuZ2V0VXBkYXRlZExvZ1F1ZXJ5KSh0LGwuaWQpO3JldHVybnt0eXBlOm8/dS5QUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRTp1LlBST0pFQ1RfTE9HX1BBR0UscGF5bG9hZDooMCxzLmRlZmF1bHQpKHt9LGUse3Rlc3RJdGVtSWRzOltdLmNvbmNhdCgoMCxhLmRlZmF1bHQpKG4uc2xpY2UoMCxuLmxlbmd0aC0xKSksW2wuaWRdKS5qb2luKCIvIil9KSxtZXRhOntxdWVyeTooMCxzLmRlZmF1bHQpKHt9LHQsYyl9fX0pLEQ9dC5uZXh0TG9nTGlua1NlbGVjdG9yPSgwLGwuY3JlYXRlU2VsZWN0b3IpKHUucGF5bG9hZFNlbGVjdG9yLHUucGFnZVByb3BlcnRpZXNTZWxlY3Rvcix1LnRlc3RJdGVtSWRzQXJyYXlTZWxlY3Rvcix1LmxvZ0l0ZW1JZFNlbGVjdG9yLF8uZGVidWdNb2RlU2VsZWN0b3IsZC5pdGVtc1NlbGVjdG9yLGZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgbD0oMCxmLmdldE5leHRJdGVtKShpLHIpO2lmKCFsKXJldHVybiBudWxsO3ZhciBjPSgwLGYuZ2V0VXBkYXRlZExvZ1F1ZXJ5KSh0LGwuaWQpO3JldHVybnt0eXBlOm8/dS5QUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRTp1LlBST0pFQ1RfTE9HX1BBR0UscGF5bG9hZDooMCxzLmRlZmF1bHQpKHt9LGUse3Rlc3RJdGVtSWRzOltdLmNvbmNhdCgoMCxhLmRlZmF1bHQpKG4uc2xpY2UoMCxuLmxlbmd0aC0xKSksW2wuaWRdKS5qb2luKCIvIil9KSxtZXRhOntxdWVyeTooMCxzLmRlZmF1bHQpKHt9LHQsYyl9fX0pLHc9dC5wcmV2aW91c0l0ZW1TZWxlY3Rvcj0oMCxsLmNyZWF0ZVNlbGVjdG9yKShkLml0ZW1zU2VsZWN0b3IsdS5sb2dJdGVtSWRTZWxlY3RvcixmdW5jdGlvbihlLHQpe3JldHVybigwLGYuZ2V0UHJldmlvdXNJdGVtKShlLHQpfSksTT10Lm5leHRJdGVtU2VsZWN0b3I9KDAsbC5jcmVhdGVTZWxlY3RvcikoZC5pdGVtc1NlbGVjdG9yLHUubG9nSXRlbUlkU2VsZWN0b3IsZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxmLmdldE5leHRJdGVtKShlLHQpfSksaz10LnJldHJ5TGlua1NlbGVjdG9yPSgwLGwuY3JlYXRlU2VsZWN0b3IpKHUucGF5bG9hZFNlbGVjdG9yLHUucGFnZVByb3BlcnRpZXNTZWxlY3RvcixfLmRlYnVnTW9kZVNlbGVjdG9yLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucmV0cnlJZH0sZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3R5cGU6bj91LlBST0pFQ1RfVVNFUkRFQlVHX0xPR19QQUdFOnUuUFJPSkVDVF9MT0dfUEFHRSxwYXlsb2FkOigwLHMuZGVmYXVsdCkoe30sZSx7dGVzdEl0ZW1JZHM6W10uY29uY2F0KCgwLGEuZGVmYXVsdCkoKGUudGVzdEl0ZW1JZHN8fCIiKS5zcGxpdCgiLyIpKSxbcl0pLmpvaW4oIi8iKX0pLG1ldGE6e3F1ZXJ5OigwLHMuZGVmYXVsdCkoe30sdCwoMCxwLmNyZWF0ZU5hbWVzcGFjZWRRdWVyeSkoe3JldHJ5SWQ6cn0sbS5OQU1FU1BBQ0UpKX19fSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImxvZ0FjdGl2aXR5U2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJsYXN0TG9nQWN0aXZpdHlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImxvZ0l0ZW1zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJsb2dQYWdpbmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihULCJsb2FkaW5nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJhdHRhY2htZW50c1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQywicXVlcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sImhpc3RvcnlJdGVtc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiYWN0aXZlTG9nSWRTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosInByZXZBY3RpdmVMb2dJZFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwiYWN0aXZlTG9nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJwcmV2aW91c0xvZ0xpbmtTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEQsIm5leHRMb2dMaW5rU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJwcmV2aW91c0l0ZW1TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE0sIm5leHRJdGVtU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL2xvZy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihrLCJyZXRyeUxpbmtTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImxvZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwiaGlzdG9yeUVudHJpZXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFMsImNyZWF0ZUFjdGl2ZUxvZ0l0ZW1JZFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbG9nL3V0aWxzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFVwZGF0ZWRMb2dRdWVyeT10LmdldE5leHRJdGVtPXQuZ2V0UHJldmlvdXNJdGVtPXQubm9ybWFsaXplSGlzdG9yeUl0ZW09dC5jYWxjdWxhdGVHcm93dGhEdXJhdGlvbj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIiksaT1uKCIuL3NyYy9jb21tb24vdXRpbHMvcm91dGluZ1V0aWxzLmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9sb2cvY29uc3RhbnRzLmpzIiksbD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdGF0dXM9PT1zLkZBSUxFRC50b1VwcGVyQ2FzZSgpfHxlLnN0YXR1cz09PXMuUEFTU0VELnRvVXBwZXJDYXNlKCl9LHU9dC5jYWxjdWxhdGVHcm93dGhEdXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBlLnJldmVyc2UoKS5tYXAoZnVuY3Rpb24obixyKXtpZighbChuKXx8cj49dClyZXR1cm4gbjtmb3IodmFyIHM9KDAsby5kZWZhdWx0KSh7fSxuKSxpPXIrMTshbChlW2ldKSYmaTx0OylpKz0xO2lmKGk8PXQpe3ZhciBhPWVbaV0uZW5kVGltZS1lW2ldLnN0YXJ0VGltZSx1PW4uZW5kVGltZS1uLnN0YXJ0VGltZSxjPXUvYS0xO2M+MCYmKHMuZ3Jvd3RoRHVyYXRpb249IisiK01hdGgucm91bmQoMTAwKmMpKyIlIil9cmV0dXJuIHN9KS5yZXZlcnNlKCl9LGM9dC5ub3JtYWxpemVIaXN0b3J5SXRlbT1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLG8uZGVmYXVsdCkoe2xhdW5jaE51bWJlcjplLmxhdW5jaE51bWJlcn0sdFswXSk7cmV0dXJuIHQubGVuZ3RoP3QubGVuZ3RoPjEmJihuLnN0YXR1cz1zLk1BTlkudG9VcHBlckNhc2UoKSxkZWxldGUgbi5pc3N1ZSxkZWxldGUgbi5zdGF0aXN0aWNzKTpuLnN0YXR1cz1zLk5PVF9GT1VORC50b1VwcGVyQ2FzZSgpLG59LGQ9dC5nZXRQcmV2aW91c0l0ZW09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV07cmV0dXJuIGUubGVuZ3RoPDI/bnVsbDplW2UuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pLTFdfHxudWxsfSxfPXQuZ2V0TmV4dEl0ZW09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV07cmV0dXJuIGUubGVuZ3RoPDI/bnVsbDplW2UuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKzFdfHxudWxsfSxwPXQuZ2V0VXBkYXRlZExvZ1F1ZXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsaS5leHRyYWN0TmFtZXNwYWNlZFF1ZXJ5KShlLGEuTkFNRVNQQUNFKTtyZXR1cm4gbi5oaXN0b3J5JiYobi5oaXN0b3J5PXQpLCgwLGkuY3JlYXRlTmFtZXNwYWNlZFF1ZXJ5KShuLGEuTkFNRVNQQUNFKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImNhbGN1bGF0ZUdyb3d0aER1cmF0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJub3JtYWxpemVIaXN0b3J5SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiZ2V0UHJldmlvdXNJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJnZXROZXh0SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbG9nL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiZ2V0VXBkYXRlZExvZ1F1ZXJ5IiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJ2YWxpZEZvckdyb3d0aER1cmF0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9sb2cvdXRpbHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoTWVtYmVyc0FjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9jb25zdGFudHMuanMiKSxvPXQuZmV0Y2hNZW1iZXJzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOnIuRkVUQ0hfTUVNQkVSUyxwYXlsb2FkOmV9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaE1lbWJlcnNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvYWN0aW9uQ3JlYXRvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfUEFHSU5BVElPTj10LkRFRkFVTFRfUEFHRV9TSVpFPXQuTkFNRVNQQUNFPXQuRkVUQ0hfTUVNQkVSUz12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksYT10LkZFVENIX01FTUJFUlM9ImZldGNoTWVtYmVycyIsbD10Lk5BTUVTUEFDRT0ibWVtYmVycyIsdT10LkRFRkFVTFRfUEFHRV9TSVpFPTUwLGM9dC5ERUZBVUxUX1BBR0lOQVRJT049KHI9e30sKDAscy5kZWZhdWx0KShyLGkuUEFHRV9LRVksMSksKDAscy5kZWZhdWx0KShyLGkuU0laRV9LRVksdSkscik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkZFVENIX01FTUJFUlMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkRFRkFVTFRfUEFHRV9TSVpFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkRFRkFVTFRfUEFHSU5BVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL2FjdGlvbkNyZWF0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoTWVtYmVyc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmV0Y2hNZW1iZXJzQWN0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJtZW1iZXJzUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubWVtYmVyc1JlZHVjZXJ9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWVtYmVyc1BhZ2luYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubWVtYmVyc1BhZ2luYXRpb25TZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWVtYmVyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5tZW1iZXJzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubG9hZGluZ1NlbGVjdG9yfX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvc2FnYXMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibWVtYmVyc1NhZ2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5tZW1iZXJzU2FnYXN9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9jb25zdGFudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiREVGQVVMVF9QQUdFX1NJWkUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLkRFRkFVTFRfUEFHRV9TSVpFfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm1lbWJlcnNSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvYWRpbmcvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvY29uc3RhbnRzLmpzIiksbD10Lm1lbWJlcnNSZWR1Y2VyPSgwLHIuY29tYmluZVJlZHVjZXJzKSh7bWVtYmVyczooMCxvLmZldGNoUmVkdWNlcikoYS5OQU1FU1BBQ0Use2NvbnRlbnRQYXRoOiJjb250ZW50In0pLHBhZ2luYXRpb246KDAscy5wYWdpbmF0aW9uUmVkdWNlcikoYS5OQU1FU1BBQ0UpLGxvYWRpbmc6KDAsaS5sb2FkaW5nUmVkdWNlcikoYS5OQU1FU1BBQ0UpfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwibWVtYmVyc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvcmVkdWNlci5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKCl7dmFyIGUsdDtyZXR1cm4gbC5kZWZhdWx0LndyYXAoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLCgwLGQuc2VsZWN0KShwLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiBlPW4uc2VudCxuLm5leHQ9NSwoMCxkLnNlbGVjdCkoaC5xdWVyeVNlbGVjdG9yKTtjYXNlIDU6cmV0dXJuIHQ9bi5zZW50LG4ubmV4dD04LCgwLGQucHV0KSgoMCxfLmZldGNoRGF0YUFjdGlvbikobS5OQU1FU1BBQ0UpKGYuVVJMUy5wcm9qZWN0VXNlcnMoZSkse3BhcmFtczooMCxjLmRlZmF1bHQpKHt9LHQpfSkpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0sZyx0aGlzKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGwuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxkLnRha2VFdmVyeSkobS5GRVRDSF9NRU1CRVJTLG8pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sYix0aGlzKX1mdW5jdGlvbiBpKCl7cmV0dXJuIGwuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxkLmFsbCkoW3MoKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sRSx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpO3QubWVtYmVyc1NhZ2FzPWk7dmFyIGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9lZmZlY3RzLmpzIiksXz1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLHA9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLGY9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxtPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvY29uc3RhbnRzLmpzIiksaD1uKCIuL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL3NlbGVjdG9ycy5qcyIpLGc9bC5kZWZhdWx0Lm1hcmsobyksYj1sLmRlZmF1bHQubWFyayhzKSxFPWwuZGVmYXVsdC5tYXJrKGkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJmZXRjaE1lbWJlcnMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJ3YXRjaEZldGNoTWVtYmVycyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIm1lbWJlcnNTYWdhcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zYWdhcy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnF1ZXJ5U2VsZWN0b3I9dC5sb2FkaW5nU2VsZWN0b3I9dC5tZW1iZXJzU2VsZWN0b3I9dC5tZW1iZXJzUGFnaW5hdGlvblNlbGVjdG9yPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9jb25zdGFudHMuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlLm1lbWJlcnN8fHt9fSxpPXQubWVtYmVyc1BhZ2luYXRpb25TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKS5wYWdpbmF0aW9ufSxhPXQubWVtYmVyc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLm1lbWJlcnN9LGw9dC5sb2FkaW5nU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkubG9hZGluZ3x8ITF9LHU9dC5xdWVyeVNlbGVjdG9yPSgwLHIuY3JlYXRlUXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3IpKHtkZWZhdWx0UGFnaW5hdGlvbjpvLkRFRkFVTFRfUEFHSU5BVElPTn0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJtZW1iZXJzUGFnaW5hdGlvblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tZW1iZXJzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIm1lbWJlcnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJsb2FkaW5nU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21lbWJlcnMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwicXVlcnlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbWVtYmVycy9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5oaWRlTW9kYWxBY3Rpb249dC5zaG93TW9kYWxBY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL2NvbnN0YW50cy5qcyIpLG89dC5zaG93TW9kYWxBY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZCxuPWUuZGF0YTtyZXR1cm57dHlwZTpyLlNIT1dfTU9EQUwscGF5bG9hZDp7YWN0aXZlTW9kYWw6e2lkOnQsZGF0YTpufX19fSxzPXQuaGlkZU1vZGFsQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ci5ISURFX01PREFMfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sInNob3dNb2RhbEFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbW9kYWwvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJoaWRlTW9kYWxBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21vZGFsL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LlNIT1dfTU9EQUw9InNob3dNb2RhbCIsbz10LkhJREVfTU9EQUw9ImhpZGVNb2RhbCIscz10LklOSVRJQUxfU1RBVEU9e2FjdGl2ZU1vZGFsOm51bGx9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJTSE9XX01PREFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tb2RhbC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJISURFX01PREFMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tb2RhbC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJJTklUSUFMX1NUQVRFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9tb2RhbC9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNIT1dfTU9EQUwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNIT1dfTU9EQUx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkhJREVfTU9EQUwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkhJREVfTU9EQUx9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hvd01vZGFsQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zaG93TW9kYWxBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImhpZGVNb2RhbEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaGlkZU1vZGFsQWN0aW9ufX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibW9kYWxSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5tb2RhbFJlZHVjZXJ9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGl2ZU1vZGFsU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFjdGl2ZU1vZGFsU2VsZWN0b3J9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvbW9kYWxzTWFwLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRNb2RhbH19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL21vZGFsc01hcC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e30sbz10LmFkZE1vZGFsPWZ1bmN0aW9uKGUsdCl7cltlXT10fSxzPXQuZ2V0TW9kYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnJbZS5pZF19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJhZGRNb2RhbCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbW9kYWwvbW9kYWxzTWFwLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZ2V0TW9kYWwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21vZGFsL21vZGFsc01hcC5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIm1vZGFsc01hcCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbW9kYWwvbW9kYWxzTWFwLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvcmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tb2RhbFJlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvY29uc3RhbnRzLmpzIiksaT10Lm1vZGFsUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpzLklOSVRJQUxfU1RBVEUsdD1hcmd1bWVudHNbMV0sbj10LnR5cGUscj10LnBheWxvYWQ7c3dpdGNoKG4pe2Nhc2Ugcy5TSE9XX01PREFMOnJldHVybigwLG8uZGVmYXVsdCkoe30sZSx7YWN0aXZlTW9kYWw6ci5hY3RpdmVNb2RhbH0pO2Nhc2Ugcy5ISURFX01PREFMOnJldHVybigwLG8uZGVmYXVsdCkoe30sZSx7YWN0aXZlTW9kYWw6bnVsbH0pO2RlZmF1bHQ6cmV0dXJuIGV9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJtb2RhbFJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21vZGFsL3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubW9kYWx8fHt9fSxvPXQuYWN0aXZlTW9kYWxTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKS5hY3RpdmVNb2RhbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sImFjdGl2ZU1vZGFsU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21vZGFsL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIm1vZGFsU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL21vZGFsL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL3dpdGhNb2RhbC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC53aXRoTW9kYWw9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL21vZGFsc01hcC5qcyIpLG89dC53aXRoTW9kYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybigwLHIuYWRkTW9kYWwpKGUsdCksdH19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIndpdGhNb2RhbCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbW9kYWwvd2l0aE1vZGFsLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaGlkZU5vdGlmaWNhdGlvbj10LnNob3dOb3RpZmljYXRpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9jb25zdGFudHMuanMiKSxvPXQuc2hvd05vdGlmaWNhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1lc3NhZ2Usbj1lLnR5cGUsbz1lLm1lc3NhZ2VJZCxzPWUudmFsdWVzO3JldHVybnt0eXBlOnIuU0hPV19OT1RJRklDQVRJT04scGF5bG9hZDp7bWVzc2FnZTp0LG1lc3NhZ2VJZDpvLHR5cGU6bix2YWx1ZXM6cyx1aWQ6KG5ldyBEYXRlKS52YWx1ZU9mKCl9fX0scz10LmhpZGVOb3RpZmljYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ci5ISURFX05PVElGSUNBVElPTixwYXlsb2FkOmV9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywic2hvd05vdGlmaWNhdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiaGlkZU5vdGlmaWNhdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5TSE9XX05PVElGSUNBVElPTj0iW25vdGlmaWNhdGlvbnNdIHNob3cgbm90aWZpY2F0aW9uIixvPXQuSElERV9OT1RJRklDQVRJT049Iltub3RpZmljYXRpb25zXSBoaWRlIG5vdGlmaWNhdGlvbiIscz10Lk5PVElGSUNBVElPTl9UWVBFUz17RVJST1I6ImVycm9yIixJTkZPOiJpbmZvIixTVUNDRVNTOiJzdWNjZXNzIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlNIT1dfTk9USUZJQ0FUSU9OIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiSElERV9OT1RJRklDQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJOT1RJRklDQVRJT05fVFlQRVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5vdGlmaWNhdGlvblJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLm5vdGlmaWNhdGlvblJlZHVjZXJ9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5vdGlmaWNhdGlvblNhZ2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5ub3RpZmljYXRpb25TYWdhc319KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hvd05vdGlmaWNhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuc2hvd05vdGlmaWNhdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGlkZU5vdGlmaWNhdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuaGlkZU5vdGlmaWNhdGlvbn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5PVElGSUNBVElPTl9UWVBFUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuTk9USUZJQ0FUSU9OX1RZUEVTfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubm90aWZpY2F0aW9uUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2NvbnN0YW50cy5qcyIpLGk9dC5ub3RpZmljYXRpb25SZWR1Y2VyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIHMuU0hPV19OT1RJRklDQVRJT046cmV0dXJuW10uY29uY2F0KCgwLG8uZGVmYXVsdCkoZSksW3JdKTtjYXNlIHMuSElERV9OT1RJRklDQVRJT046cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVpZCE9PXJ9KTtkZWZhdWx0OnJldHVybiBlfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwibm90aWZpY2F0aW9uUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9zYWdhcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUucGF5bG9hZDtyZXR1cm4gYS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLHUuY2FsbCkobC5kZWxheSw4ZTMpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsKDAsdS5wdXQpKCgwLGQuaGlkZU5vdGlmaWNhdGlvbikodC51aWQpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LF8sdGhpcyl9ZnVuY3Rpb24gbygpe3JldHVybiBhLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsdS50YWtlRXZlcnkpKGMuU0hPV19OT1RJRklDQVRJT04scik7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxwLHRoaXMpfWZ1bmN0aW9uIHMoKXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLHUuYWxsKShbbygpXSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxmLHRoaXMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksYT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGkpO3Qubm90aWZpY2F0aW9uU2FnYXM9czt2YXIgbD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1zYWdhL2VzL2VmZmVjdHMuanMiKSxjPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9jb25zdGFudHMuanMiKSxkPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9hY3Rpb25DcmVhdG9ycy5qcyIpLF89YS5kZWZhdWx0Lm1hcmsocikscD1hLmRlZmF1bHQubWFyayhvKSxmPWEuZGVmYXVsdC5tYXJrKHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJoaWRlTm90aWZpY2F0aW9uRGVsYXkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIndhdGNoQWRkTm90aWZpY2F0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJub3RpZmljYXRpb25TYWdhcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL3NhZ2FzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudXBkYXRlUGFnZVByb3BlcnRpZXNBY3Rpb249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxkPW4oIi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIpLF89cihkKSxwPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsdS5kZWZhdWx0KSh7fSxlLHQpO3JldHVybigwLGEuZGVmYXVsdCkobikucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PW5bdF18fG51bGw9PT1uW3RdP2U6KDAsdS5kZWZhdWx0KSh7fSxlLCgwLHMuZGVmYXVsdCkoe30sdCxuW3RdKSl9LHt9KX0sZj10LnVwZGF0ZVBhZ2VQcm9wZXJ0aWVzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPW4oKSxvPXIubG9jYXRpb24scz1vLnR5cGUsaT1vLnBheWxvYWQsYT1vLnF1ZXJ5LGw9cChhLGUpO2lmKCEoMCxfLmRlZmF1bHQpKGEsbCkpe3ZhciB1PXt0eXBlOnMscGF5bG9hZDppLG1ldGE6e3F1ZXJ5Omx9fTt0KCgwLGMucmVkaXJlY3QpKHUpKX19fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwidXBkYXRlUGFnZVByb3BlcnRpZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwibWVyZ2VRdWVyeSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGFnZU5hbWVzPXQuUkVHSVNUUkFUSU9OX1BBR0U9dC5MT0dJTl9QQUdFPXQuTEFVTkNIRVNfUEFHRT10LlRFU1RfSVRFTV9QQUdFPXQuSElTVE9SWV9QQUdFPXQuVVNFUl9QUk9GSUxFX1BBR0U9dC5QUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRT10LlBST0pFQ1RfTE9HX1BBR0U9dC5QUk9KRUNUX1VTRVJERUJVR19URVNUX0lURU1fUEFHRT10LlBST0pFQ1RfVVNFUkRFQlVHX1BBR0U9dC5QUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFPXQuUFJPSkVDVF9TRVRUSU5HU19QQUdFPXQuUFJPSkVDVF9TQU5EQk9YX1BBR0U9dC5QUk9KRUNUX01FTUJFUlNfUEFHRT10LlBST0pFQ1RfTEFVTkNIRVNfUEFHRT10LlBST0pFQ1RfRklMVEVSU19QQUdFPXQuUFJPSkVDVF9EQVNIQk9BUkRfSVRFTV9QQUdFPXQuUFJPSkVDVF9EQVNIQk9BUkRfUEFHRT10LlBST0pFQ1RfUEFHRT10LkFQSV9QQUdFPXQuUExVR0lOU19QQUdFPXQuU0VSVkVSX1NFVFRJTkdTX1RBQl9QQUdFPXQuU0VSVkVSX1NFVFRJTkdTX1BBR0U9dC5BTExfVVNFUlNfUEFHRT10LlBST0pFQ1RfREVUQUlMU19QQUdFPXQuUFJPSkVDVFNfUEFHRT10LkFETUlOSVNUUkFURV9QQUdFPXQuTk9fUEFHRT12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLGE9dC5OT19QQUdFPXZvaWQgMCxsPXQuQURNSU5JU1RSQVRFX1BBR0U9IkFETUlOSVNUUkFURV9QQUdFIix1PXQuUFJPSkVDVFNfUEFHRT0iUFJPSkVDVFNfUEFHRSIsYz10LlBST0pFQ1RfREVUQUlMU19QQUdFPSJQUk9KRUNUX0RFVEFJTFNfUEFHRSIsZD10LkFMTF9VU0VSU19QQUdFPSJBTExfVVNFUlNfUEFHRSIsXz10LlNFUlZFUl9TRVRUSU5HU19QQUdFPSJTRVJWRVJfU0VUVElOR1NfUEFHRSIscD10LlNFUlZFUl9TRVRUSU5HU19UQUJfUEFHRT0iU0VSVkVSX1NFVFRJTkdTX1RBQl9QQUdFIixmPXQuUExVR0lOU19QQUdFPSJQTFVHSU5TX1BBR0UiLG09dC5BUElfUEFHRT0iQVBJX1BBR0UiLGg9dC5QUk9KRUNUX1BBR0U9IlBST0pFQ1RfUEFHRSIsZz10LlBST0pFQ1RfREFTSEJPQVJEX1BBR0U9IlBST0pFQ1RfREFTSEJPQVJEX1BBR0UiLGI9dC5QUk9KRUNUX0RBU0hCT0FSRF9JVEVNX1BBR0U9IlBST0pFQ1RfREFTSEJPQVJEX0lURU1fUEFHRSIsRT10LlBST0pFQ1RfRklMVEVSU19QQUdFPSJQUk9KRUNUX0ZJTFRFUlNfUEFHRSIseT10LlBST0pFQ1RfTEFVTkNIRVNfUEFHRT0iUFJPSkVDVF9MQVVOQ0hFU19QQUdFIix2PXQuUFJPSkVDVF9NRU1CRVJTX1BBR0U9IlBST0pFQ1RfTUVNQkVSU19QQUdFIixUPXQuUFJPSkVDVF9TQU5EQk9YX1BBR0U9IlBST0pFQ1RfU0FOREJPWF9QQUdFIixBPXQuUFJPSkVDVF9TRVRUSU5HU19QQUdFPSJQUk9KRUNUX1NFVFRJTkdTX1BBR0UiLEM9dC5QUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFPSJQUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFIixPPXQuUFJPSkVDVF9VU0VSREVCVUdfUEFHRT0iUFJPSkVDVF9VU0VSREVCVUdfUEFHRSIsUz10LlBST0pFQ1RfVVNFUkRFQlVHX1RFU1RfSVRFTV9QQUdFPSJQUk9KRUNUX1VTRVJERUJVR19URVNUX0lURU1fUEFHRSIsUj10LlBST0pFQ1RfTE9HX1BBR0U9IlBST0pFQ1RfTE9HX1BBR0UiLGo9dC5QUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRT0iUFJPSkVDVF9VU0VSREVCVUdfTE9HX1BBR0UiLHg9dC5VU0VSX1BST0ZJTEVfUEFHRT0iVVNFUl9QUk9GSUxFX1BBR0UiLEw9dC5ISVNUT1JZX1BBR0U9IkhJU1RPUllfUEFHRSIsRD10LlRFU1RfSVRFTV9QQUdFPSJURVNUX0lURU1fUEFHRSIsdz10LkxBVU5DSEVTX1BBR0U9IkxBVU5DSEVTX1BBR0UiLE09dC5MT0dJTl9QQUdFPSJMT0dJTl9QQUdFIixrPXQuUkVHSVNUUkFUSU9OX1BBR0U9IlJFR0lTVFJBVElPTl9QQUdFIixJPXQucGFnZU5hbWVzPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLk5PVF9GT1VORCxpLk5PVF9GT1VORCksKDAscy5kZWZhdWx0KShyLCJBRE1JTklTVFJBVEVfUEFHRSIsbCksKDAscy5kZWZhdWx0KShyLCJQUk9KRUNUU19QQUdFIix1KSwoMCxzLmRlZmF1bHQpKHIsIlBST0pFQ1RfREVUQUlMU19QQUdFIixjKSwoMCxzLmRlZmF1bHQpKHIsIkFMTF9VU0VSU19QQUdFIixkKSwoMCxzLmRlZmF1bHQpKHIsIlNFUlZFUl9TRVRUSU5HU19QQUdFIixfKSwoMCxzLmRlZmF1bHQpKHIsIlNFUlZFUl9TRVRUSU5HU19UQUJfUEFHRSIscCksKDAscy5kZWZhdWx0KShyLCJQTFVHSU5TX1BBR0UiLGYpLCgwLHMuZGVmYXVsdCkociwiQVBJX1BBR0UiLG0pLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9EQVNIQk9BUkRfUEFHRSIsZyksKDAscy5kZWZhdWx0KShyLCJQUk9KRUNUX0RBU0hCT0FSRF9JVEVNX1BBR0UiLGIpLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9GSUxURVJTX1BBR0UiLEUpLCgwLHMuZGVmYXVsdCkociwiTEFVTkNIRVNfUEFHRSIsdyksKDAscy5kZWZhdWx0KShyLCJQUk9KRUNUX0xBVU5DSEVTX1BBR0UiLHkpLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9NRU1CRVJTX1BBR0UiLHYpLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9TQU5EQk9YX1BBR0UiLFQpLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9TRVRUSU5HU19QQUdFIixBKSwoMCxzLmRlZmF1bHQpKHIsIlBST0pFQ1RfU0VUVElOR1NfVEFCX1BBR0UiLEMpLCgwLHMuZGVmYXVsdCkociwiUFJPSkVDVF9VU0VSREVCVUdfUEFHRSIsTyksKDAscy5kZWZhdWx0KShyLCJQUk9KRUNUX1VTRVJERUJVR19URVNUX0lURU1fUEFHRSIsUyksKDAscy5kZWZhdWx0KShyLCJVU0VSX1BST0ZJTEVfUEFHRSIseCksKDAscy5kZWZhdWx0KShyLCJMT0dJTl9QQUdFIixNKSwoMCxzLmRlZmF1bHQpKHIsIlJFR0lTVFJBVElPTl9QQUdFIixrKSwoMCxzLmRlZmF1bHQpKHIsIlRFU1RfSVRFTV9QQUdFIixEKSwoMCxzLmRlZmF1bHQpKHIsIkhJU1RPUllfUEFHRSIsTCksKDAscy5kZWZhdWx0KShyLCJQUk9KRUNUX0xPR19QQUdFIixSKSwoMCxzLmRlZmF1bHQpKHIsIlBST0pFQ1RfVVNFUkRFQlVHX0xPR19QQUdFIixqKSxyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiTk9fUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQURNSU5JU1RSQVRFX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIlBST0pFQ1RTX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlBST0pFQ1RfREVUQUlMU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJBTExfVVNFUlNfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiU0VSVkVSX1NFVFRJTkdTX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIlNFUlZFUl9TRVRUSU5HU19UQUJfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiUExVR0lOU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJBUElfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiUFJPSkVDVF9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJQUk9KRUNUX0RBU0hCT0FSRF9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJQUk9KRUNUX0RBU0hCT0FSRF9JVEVNX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsIlBST0pFQ1RfRklMVEVSU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJQUk9KRUNUX0xBVU5DSEVTX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsIlBST0pFQ1RfTUVNQkVSU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihULCJQUk9KRUNUX1NBTkRCT1hfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQSwiUFJPSkVDVF9TRVRUSU5HU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihDLCJQUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihPLCJQUk9KRUNUX1VTRVJERUJVR19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihTLCJQUk9KRUNUX1VTRVJERUJVR19URVNUX0lURU1fUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiUFJPSkVDVF9MT0dfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaiwiUFJPSkVDVF9VU0VSREVCVUdfTE9HX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHgsIlVTRVJfUFJPRklMRV9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJISVNUT1JZX1BBR0UiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEQsIlRFU1RfSVRFTV9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJMQVVOQ0hFU19QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihNLCJMT0dJTl9QQUdFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihrLCJSRUdJU1RSQVRJT05fUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSSwicGFnZU5hbWVzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhZ2VTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucGFnZVNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYWdlUHJvcGVydGllc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wYWdlUHJvcGVydGllc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5hY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0SWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvamVjdElkU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb2plY3RTZWN0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnByb2plY3RTZWN0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhdW5jaElkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmxhdW5jaElkU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN1aXRlSWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3VpdGVJZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXlsb2FkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnBheWxvYWRTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdEl0ZW1JZHNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudGVzdEl0ZW1JZHNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdEl0ZW1JZHNBcnJheVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5jcmVhdGVRdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmlsdGVySWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmlsdGVySWRTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicGF0aG5hbWVDaGFuZ2VkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnBhdGhuYW1lQ2hhbmdlZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2dJdGVtSWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubG9nSXRlbUlkU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRpbmdzVGFiU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnNldHRpbmdzVGFiU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByZXZQYWdlUHJvcGVydGllc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wcmV2UGFnZVByb3BlcnRpZXNTZWxlY3Rvcn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1cGRhdGVQYWdlUHJvcGVydGllc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8udXBkYXRlUGFnZVByb3BlcnRpZXNBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5PX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLk5PX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFETUlOSVNUUkFURV9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5BRE1JTklTVFJBVEVfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUFJPSkVDVFNfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVFNfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUFJPSkVDVF9ERVRBSUxTX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBST0pFQ1RfREVUQUlMU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBTExfVVNFUlNfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuQUxMX1VTRVJTX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNFUlZFUl9TRVRUSU5HU19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5TRVJWRVJfU0VUVElOR1NfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU0VSVkVSX1NFVFRJTkdTX1RBQl9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5TRVJWRVJfU0VUVElOR1NfVEFCX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBMVUdJTlNfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUExVR0lOU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBUElfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuQVBJX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBST0pFQ1RfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVF9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX0RBU0hCT0FSRF9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QUk9KRUNUX0RBU0hCT0FSRF9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX0RBU0hCT0FSRF9JVEVNX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBST0pFQ1RfREFTSEJPQVJEX0lURU1fUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUFJPSkVDVF9GSUxURVJTX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBST0pFQ1RfRklMVEVSU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMQVVOQ0hFU19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5MQVVOQ0hFU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX0xBVU5DSEVTX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBST0pFQ1RfTEFVTkNIRVNfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUFJPSkVDVF9NRU1CRVJTX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBST0pFQ1RfTUVNQkVSU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX1NBTkRCT1hfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVF9TQU5EQk9YX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBST0pFQ1RfU0VUVElOR1NfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVF9TRVRUSU5HU19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QUk9KRUNUX1NFVFRJTkdTX1RBQl9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX1VTRVJERUJVR19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QUk9KRUNUX1VTRVJERUJVR19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX1VTRVJERUJVR19URVNUX0lURU1fUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVF9VU0VSREVCVUdfVEVTVF9JVEVNX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVTRVJfUFJPRklMRV9QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5VU0VSX1BST0ZJTEVfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTE9HSU5fUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuTE9HSU5fUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUkVHSVNUUkFUSU9OX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlJFR0lTVFJBVElPTl9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJISVNUT1JZX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkhJU1RPUllfUEFHRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVEVTVF9JVEVNX1BBR0UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlRFU1RfSVRFTV9QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX0xPR19QQUdFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QUk9KRUNUX0xPR19QQUdFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuUFJPSkVDVF9VU0VSREVCVUdfTE9HX1BBR0V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhZ2VOYW1lcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMucGFnZU5hbWVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOT1RfRk9VTkQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLk5PVF9GT1VORH19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYXRobmFtZUNoYW5nZWRTZWxlY3Rvcj10LmxhdW5jaElkU2VsZWN0b3I9dC5jcmVhdGVRdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcj10LnByZXZQYWdlUHJvcGVydGllc1NlbGVjdG9yPXQucGFnZVByb3BlcnRpZXNTZWxlY3Rvcj10LnByb2plY3RTZWN0aW9uU2VsZWN0b3I9dC5wYWdlU2VsZWN0b3I9dC5zZXR0aW5nc1RhYlNlbGVjdG9yPXQubG9nSXRlbUlkU2VsZWN0b3I9dC50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3I9dC50ZXN0SXRlbUlkc1NlbGVjdG9yPXQuZmlsdGVySWRTZWxlY3Rvcj10LnN1aXRlSWRTZWxlY3Rvcj10LnByb2plY3RJZFNlbGVjdG9yPXQuYWN0aXZlRGFzaGJvYXJkSWRTZWxlY3Rvcj10LnBheWxvYWRTZWxlY3Rvcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZXNlbGVjdC9saWIvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbW1vbi91dGlscy9yb3V0aW5nVXRpbHMuanMiKSxfPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSxwPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvaW5kZXguanMiKSxmPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcmVzZXJ2ZWRGaWx0ZXJJZHMuanMiKSxtPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLGg9dC5wYXlsb2FkU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9jYXRpb24ucGF5bG9hZHx8e319LGc9dC5hY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLmRhc2hib2FyZElkfSxiPXQucHJvamVjdElkU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkucHJvamVjdElkfSxFPXQuc3VpdGVJZFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLnN1aXRlSWR9LHk9dC5maWx0ZXJJZFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLmZpbHRlcklkfHxmLkFMTH0sdj10LnRlc3RJdGVtSWRzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkudGVzdEl0ZW1JZHMmJlN0cmluZyhoKGUpLnRlc3RJdGVtSWRzKX0sVD10LnRlc3RJdGVtSWRzQXJyYXlTZWxlY3Rvcj0oMCxjLmNyZWF0ZVNlbGVjdG9yKSh2LGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnNwbGl0KCIvIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSl9KXx8W119KSxBPXQubG9nSXRlbUlkU2VsZWN0b3I9KDAsYy5jcmVhdGVTZWxlY3RvcikoVCxmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdKXx8MH0pLEM9dC5zZXR0aW5nc1RhYlNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLnNldHRpbmdzVGFifSxPPXQucGFnZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBtLnBhZ2VOYW1lc1tlLmxvY2F0aW9uLnR5cGVdfHxtLk5PX1BBR0V9LFM9dC5wcm9qZWN0U2VjdGlvblNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUpLnByb2plY3RTZWN0aW9ufHwiIn0sUj1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpcmV0dXJue307dmFyIHI9dD8oMCxkLmV4dHJhY3ROYW1lc3BhY2VkUXVlcnkpKGUsdCk6ZTtpZighbilyZXR1cm4gcjt2YXIgbz17fTtyZXR1cm4oMCx1LmRlZmF1bHQpKG4pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsZSkpe3ZhciB0PW5bZV07b1t0XT1yW2VdfX0pLG99LGo9dC5wYWdlUHJvcGVydGllc1NlbGVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5sb2NhdGlvbjt0PXZvaWQgMD09PXQ/e306dDt2YXIgbj10LnF1ZXJ5LHI9YXJndW1lbnRzWzFdLG89YXJndW1lbnRzWzJdO3JldHVybiBSKG4scixvKX0seD10LnByZXZQYWdlUHJvcGVydGllc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmxvY2F0aW9uLnByZXYucXVlcnk7cmV0dXJuIFIocix0LG4pfSxMPXQuY3JlYXRlUXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLm5hbWVzcGFjZSxuPWUuZGVmYXVsdFBhZ2luYXRpb24scj1lLmRlZmF1bHRTb3J0aW5nO3JldHVybiBmdW5jdGlvbihlLG8pe3ZhciBpPWooZSx0fHxvKTtyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LG58fF8uREVGQVVMVF9QQUdJTkFUSU9OLCgwLHMuZGVmYXVsdCkoe30scC5TT1JUSU5HX0tFWSxyfHwiIiksaSl9fSxEPXQubGF1bmNoSWRTZWxlY3Rvcj1mdW5jdGlvbihlKXt2YXIgdD1UKGUpO3JldHVybiB0JiZ0WzBdfSx3PXQucGF0aG5hbWVDaGFuZ2VkU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9jYXRpb24ucGF0aG5hbWUhPT1lLmxvY2F0aW9uLnByZXYucGF0aG5hbWV9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJwYXlsb2FkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImFjdGl2ZURhc2hib2FyZElkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsInByb2plY3RJZFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJzdWl0ZUlkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImZpbHRlcklkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsInRlc3RJdGVtSWRzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFQsInRlc3RJdGVtSWRzQXJyYXlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQSwibG9nSXRlbUlkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEMsInNldHRpbmdzVGFiU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sInBhZ2VTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUywicHJvamVjdFNlY3Rpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaiwicGFnZVByb3BlcnRpZXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwicHJldlBhZ2VQcm9wZXJ0aWVzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEwsImNyZWF0ZVF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihELCJsYXVuY2hJZFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdlcy9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJwYXRobmFtZUNoYW5nZWRTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUiwiY29tbW9uUGFnZVByb3BlcnRpZXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnZXMvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9QQUdJTkFUSU9OPXQuU0laRV9LRVk9dC5QQUdFX0tFWT10LkNIQU5HRV9TSVpFPXQuQ0hBTkdFX1BBR0U9dC5NRVJHRV9QQUdJTkFUSU9OPXZvaWQgMDt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPXQuTUVSR0VfUEFHSU5BVElPTj0icGFnaW5hdGlvbi9tZXJnZVBhZ2luYXRpb24iLGE9dC5DSEFOR0VfUEFHRT0icGFnaW5hdGlvbi9jaGFuZ2VQYWdlIixsPXQuQ0hBTkdFX1NJWkU9InBhZ2luYXRpb24vY2hhbmdlU2l6ZSIsdT10LlBBR0VfS0VZPSJwYWdlLnBhZ2UiLGM9dC5TSVpFX0tFWT0icGFnZS5zaXplIixkPXQuREVGQVVMVF9QQUdJTkFUSU9OPShyPXt9LCgwLHMuZGVmYXVsdCkocix1LDEpLCgwLHMuZGVmYXVsdCkocixjLDUwKSxyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiTUVSR0VfUEFHSU5BVElPTiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJDSEFOR0VfUEFHRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJDSEFOR0VfU0laRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJQQUdFX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJTSVpFX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJERUZBVUxUX1BBR0lOQVRJT04iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi93aXRoUGFnaW5hdGlvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwid2l0aFBhZ2luYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLndpdGhQYWdpbmF0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYWdpbmF0aW9uUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFnaW5hdGlvblJlZHVjZXJ9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdFBhZ2luYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdFBhZ2luYXRpb25TZWxlY3Rvcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTSVpFX0tFWSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU0laRV9LRVl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBBR0VfS0VZIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5QQUdFX0tFWX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiREVGQVVMVF9QQUdJTkFUSU9OIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ERUZBVUxUX1BBR0lOQVRJT059fSl9LCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGFnaW5hdGlvblJlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksbz10LnBhZ2luYXRpb25SZWR1Y2VyPWZ1bmN0aW9uKGUpe3JldHVybigwLHIuZmV0Y2hSZWR1Y2VyKShlLHtjb250ZW50UGF0aDoicGFnZSIsaW5pdGlhbFN0YXRlOnt9fSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sInBhZ2luYXRpb25SZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vc2VsZWN0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHRQYWdpbmF0aW9uU2VsZWN0b3I9dC50b3RhbFBhZ2VzU2VsZWN0b3I9dC50b3RhbEVsZW1lbnRzU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vY29uc3RhbnRzLmpzIiksbz10LnRvdGFsRWxlbWVudHNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkudG90YWxFbGVtZW50c319LHM9dC50b3RhbFBhZ2VzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLnRvdGFsUGFnZXN9fSxpPXQuZGVmYXVsdFBhZ2luYXRpb25TZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiByLkRFRkFVTFRfUEFHSU5BVElPTn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sInRvdGFsRWxlbWVudHNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJ0b3RhbFBhZ2VzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiZGVmYXVsdFBhZ2luYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL3dpdGhQYWdpbmF0aW9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTihIKHQsZSksZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LndpdGhQYWdpbmF0aW9uPXZvaWQgMDt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9byhpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLHU9byhsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9byhjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9byhfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09byhmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1vKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1vKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksdj1vKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEE9byhUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksTz1vKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxSPW8oUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLHg9byhqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPW8oTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL3NlbGVjdG9ycy5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi9jb25zdGFudHMuanMiKSxQPXtQYWdpbmF0aW9uV3JhcHBlcjp7ZGlzcGxheU5hbWU6IlBhZ2luYXRpb25XcmFwcGVyIixpc0luRnVuY3Rpb246ITB9fSxOPSgwLHguZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vd2l0aFBhZ2luYXRpb24uanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksSD0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL3dpdGhQYWdpbmF0aW9uLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLEY9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnBhZ2luYXRpb25TZWxlY3RvcixuPXZvaWQgMD09PXQ/ay5kZWZhdWx0UGFnaW5hdGlvblNlbGVjdG9yOnQsbz1lLm5hbWVzcGFjZSxpPWUubmFtZXNwYWNlU2VsZWN0b3I7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LGwsYyxfLGYsaD0oMCxrLnRvdGFsRWxlbWVudHNTZWxlY3RvcikobiksYj0oMCxrLnRvdGFsUGFnZXNTZWxlY3Rvcikobik7cmV0dXJuIHMoIlBhZ2luYXRpb25XcmFwcGVyIikoKHQ9KDAsTS5jb25uZWN0Um91dGVyKShmdW5jdGlvbihlKXtyZXR1cm57cGFnZTplW0kuUEFHRV9LRVldJiZOdW1iZXIoZVtJLlBBR0VfS0VZXSksc2l6ZTplW0kuU0laRV9LRVldJiZOdW1iZXIoZVtJLlNJWkVfS0VZXSl9fSx7dXBkYXRlUGFnaW5hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBuPXt9LCgwLHYuZGVmYXVsdCkobixJLlBBR0VfS0VZLGUpLCgwLHYuZGVmYXVsdCkobixJLlNJWkVfS0VZLHQpLG59fSx7bmFtZXNwYWNlOm8sbmFtZXNwYWNlU2VsZWN0b3I6aX0pLGw9KDAsdy5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57dG90YWxFbGVtZW50czpoKGUpLHRvdGFsUGFnZXM6YihlKX19KSx0KGM9bCgoZj1fPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXt2YXIgZSx0LHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsbik7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gdD1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT1uLl9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KShuKSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmNoYW5nZVBhZ2VIYW5kbGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jaGFuZ2VQYWdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jaGFuZ2VTaXplSGFuZGxlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY2hhbmdlU2l6ZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY2hhbmdlUGFnaW5hdGlvbk9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NoYW5nZVBhZ2luYXRpb25PcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPXQsKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkobix0KSwoMCxtLmRlZmF1bHQpKG4sW3trZXk6Il9fY2hhbmdlUGFnaW5hdGlvbk9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVBhZ2luYXRpb25PcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGFuZ2VTaXplSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hhbmdlU2l6ZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVBhZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGFuZ2VQYWdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2hhbmdlUGFnZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVBhZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGFuZ2VQYWdlSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hhbmdlUGFnZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVBhZ2VIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNoYW5nZVBhZ2luYXRpb25PcHRpb25zKHtwYWdlOmV9KX19LHtrZXk6Il9fY2hhbmdlU2l6ZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVNpemVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGFuZ2VTaXplSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hhbmdlU2l6ZUhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNpemVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNoYW5nZVBhZ2luYXRpb25PcHRpb25zKHtzaXplOmUscGFnZToxfSl9fSx7a2V5OiJfX2NoYW5nZVBhZ2luYXRpb25PcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGFuZ2VQYWdpbmF0aW9uT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2hhbmdlUGFnaW5hdGlvbk9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVBhZ2luYXRpb25PcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGFuZ2VQYWdpbmF0aW9uT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5wYWdlLHI9dC5zaXplO3RoaXMucHJvcHMudXBkYXRlUGFnaW5hdGlvbihlLnBhZ2V8fG4sZS5zaXplfHxyKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLG49dC5wYWdlLG89dC5zaXplLHM9dC50b3RhbEVsZW1lbnRzLGk9dC50b3RhbFBhZ2VzLGw9KHQudXBkYXRlUGFnaW5hdGlvbiwoMCx1LmRlZmF1bHQpKHQsWyJwYWdlIiwic2l6ZSIsInRvdGFsRWxlbWVudHMiLCJ0b3RhbFBhZ2VzIiwidXBkYXRlUGFnaW5hdGlvbiJdKSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChlLCgwLGEuZGVmYXVsdCkoe2FjdGl2ZVBhZ2U6bixpdGVtQ291bnQ6cyxwYWdlQ291bnQ6aSxwYWdlU2l6ZTpvLG9uQ2hhbmdlUGFnZTp0aGlzLmNoYW5nZVBhZ2VIYW5kbGVyLG9uQ2hhbmdlUGFnZVNpemU6dGhpcy5jaGFuZ2VTaXplSGFuZGxlcn0sbCkpfX1dKSxufShTLkNvbXBvbmVudCksXy5kaXNwbGF5TmFtZT0id2l0aFBhZ2luYXRpb24oIisoZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSsiKSIsXy5wcm9wVHlwZXM9e2ZpbHRlcjpELmRlZmF1bHQuc3RyaW5nLHBhZ2U6RC5kZWZhdWx0Lm51bWJlcixzaXplOkQuZGVmYXVsdC5udW1iZXIsdXBkYXRlUGFnaW5hdGlvbjpELmRlZmF1bHQuZnVuYyxzb3J0aW5nU3RyaW5nOkQuZGVmYXVsdC5zdHJpbmcsdG90YWxFbGVtZW50czpELmRlZmF1bHQubnVtYmVyLHRvdGFsUGFnZXM6RC5kZWZhdWx0Lm51bWJlcn0sXy5kZWZhdWx0UHJvcHM9e2ZpbHRlcjpudWxsLHBhZ2U6dm9pZCAwLHNpemU6dm9pZCAwLHNvcnRpbmdTdHJpbmc6bnVsbCx0b3RhbEVsZW1lbnRzOjAsdG90YWxQYWdlczoxLHVwZGF0ZVBhZ2luYXRpb246ZnVuY3Rpb24oKXt9fSxjPWYpKXx8Yyl8fGMpKX19O3Qud2l0aFBhZ2luYXRpb249RjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJ3aXRoUGFnaW5hdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcGFnaW5hdGlvbi93aXRoUGFnaW5hdGlvbi5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2FjdGlvbkNyZWF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZldGNoQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb249dC5mZXRjaFByb2plY3RBY3Rpb249dC5oaWRlRmlsdGVyT25MYXVuY2hlc0FjdGlvbj10LnNob3dGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uPXQudXBkYXRlUHJvamVjdE5vdGlmaWNhdGlvbnNDb25maWc9dC51cGRhdGVQcm9qZWN0RmlsdGVyUHJlZmVyZW5jZXNBY3Rpb249dC51cGRhdGVDb25maWd1cmF0aW9uQXR0cmlidXRlc0FjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksbD1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2NvbnN0YW50cy5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmMuRkVUQ0hfUFJPSkVDVF9TVUNDRVNTLHBheWxvYWQ6ZX19LHA9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Yy5GRVRDSF9QUk9KRUNUX1BSRUZFUkVOQ0VTX1NVQ0NFU1MscGF5bG9hZDplfX0sZj10LnVwZGF0ZUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmMuVVBEQVRFX0NPTkZJR1VSQVRJT05fQVRUUklCVVRFUyxwYXlsb2FkOmUuY29uZmlndXJhdGlvbi5hdHRyaWJ1dGVzfX0sbT10LnVwZGF0ZVByb2plY3RGaWx0ZXJQcmVmZXJlbmNlc0FjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybigwLHMuZmV0Y2gpKGkuVVJMUy5wcm9qZWN0UHJlZmVyZW5jZXMoKDAsYS5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKHIoKSksKDAsYS51c2VySWRTZWxlY3RvcikocigpKSxlKSx7bWV0aG9kOnR9KX19LGg9dC51cGRhdGVQcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj0oMCxkLnByb2plY3ROb3RpZmljYXRpb25zQ29uZmlndXJhdGlvblNlbGVjdG9yKShuKCkpLGE9KDAsby5kZWZhdWx0KSh7fSxyLGUpOygwLHMuZmV0Y2gpKGkuVVJMUy5wcm9qZWN0Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbigoMCx1LnByb2plY3RJZFNlbGVjdG9yKShuKCkpKSx7bWV0aG9kOiJQVVQiLGRhdGE6YX0pLnRoZW4oZnVuY3Rpb24oKXt0KHt0eXBlOmMuVVBEQVRFX05PVElGSUNBVElPTlNfQ09ORklHX1NVQ0NFU1MscGF5bG9hZDphfSl9KX19LGc9dC5zaG93RmlsdGVyT25MYXVuY2hlc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dCgoMCxsLmFkZEZpbHRlckFjdGlvbikoZSkpLHQobShlLmlkLCJQVVQiKSl9fSxiPXQuaGlkZUZpbHRlck9uTGF1bmNoZXNBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QoKDAsbC5yZW1vdmVGaWx0ZXJBY3Rpb24pKGUuaWQpKSx0KG0oZS5pZCwiREVMRVRFIikpfX0sRT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4oMCxzLmZldGNoKShpLlVSTFMucHJvamVjdFByZWZlcmVuY2VzKGUsKDAsYS51c2VySWRTZWxlY3RvcikobigpKSkpLnRoZW4oZnVuY3Rpb24oZSl7dChwKGUpKSx0KCgwLGwuZmV0Y2hVc2VyRmlsdGVyc1N1Y2Nlc3NBY3Rpb24pKGUuZmlsdGVycykpfSl9fSx5PXQuZmV0Y2hQcm9qZWN0QWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybigwLHMuZmV0Y2gpKGkuVVJMUy5wcm9qZWN0KGUpKS50aGVuKGZ1bmN0aW9uKHIpe24oXyhyKSksIXQmJm4oRShlKSl9KX19LHY9dC5mZXRjaENvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXsoMCxzLmZldGNoKShpLlVSTFMucHJvamVjdChlKSkudGhlbihmdW5jdGlvbihlKXt0KGYoZSkpfSl9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwidXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJ1cGRhdGVQcm9qZWN0RmlsdGVyUHJlZmVyZW5jZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJ1cGRhdGVQcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsInNob3dGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYiwiaGlkZUZpbHRlck9uTGF1bmNoZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJmZXRjaFByb2plY3RBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJmZXRjaENvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiZmV0Y2hQcm9qZWN0U3VjY2Vzc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImZldGNoUHJvamVjdFByZWZlcmVuY2VzU3VjY2Vzc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsImZldGNoUHJvamVjdFByZWZlcmVuY2VzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuUFJPSkVDVF9JTkZPX0lOSVRJQUxfU1RBVEU9e30sbz10LlBST0pFQ1RfUFJFRkVSRU5DRVNfSU5JVElBTF9TVEFURT17ZmlsdGVyczpbXX0scz10LkZFVENIX1BST0pFQ1RfU1VDQ0VTUz0iZmV0Y2hQcm9qZWN0U3VjY2VzcyIsaT10LkZFVENIX1BST0pFQ1RfUFJFRkVSRU5DRVNfU1VDQ0VTUz0iZmV0Y2hQcm9qZWN0UHJlZmVyZW5jZXNTdWNjZXNzIixhPXQuVVBEQVRFX0NPTkZJR1VSQVRJT05fQVRUUklCVVRFUz0idXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXMiLGw9dC5VUERBVEVfTk9USUZJQ0FUSU9OU19DT05GSUdfU1VDQ0VTUz0idXBkYXRlTm90aWZpY2F0aW9uc0NvbmZpZ1N1Y2Nlc3MiLHU9dC5BTkFMWVpFUl9BVFRSSUJVVEVfUFJFRklYPSJhbmFseXplciIsYz10LkpPQl9BVFRSSUJVVEVfUFJFRklYPSJqb2IiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJQUk9KRUNUX0lORk9fSU5JVElBTF9TVEFURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJQUk9KRUNUX1BSRUZFUkVOQ0VTX0lOSVRJQUxfU1RBVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiRkVUQ0hfUFJPSkVDVF9TVUNDRVNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIkZFVENIX1BST0pFQ1RfUFJFRkVSRU5DRVNfU1VDQ0VTUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJVUERBVEVfQ09ORklHVVJBVElPTl9BVFRSSUJVVEVTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIlVQREFURV9OT1RJRklDQVRJT05TX0NPTkZJR19TVUNDRVNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkFOQUxZWkVSX0FUVFJJQlVURV9QUkVGSVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiSk9CX0FUVFJJQlVURV9QUkVGSVgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9jb25zdGFudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRkVUQ0hfUFJPSkVDVF9TVUNDRVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GRVRDSF9QUk9KRUNUX1NVQ0NFU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZFVENIX1BST0pFQ1RfUFJFRkVSRU5DRVNfU1VDQ0VTUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRkVUQ0hfUFJPSkVDVF9QUkVGRVJFTkNFU19TVUNDRVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBTkFMWVpFUl9BVFRSSUJVVEVfUFJFRklYIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BTkFMWVpFUl9BVFRSSUJVVEVfUFJFRklYfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJKT0JfQVRUUklCVVRFX1BSRUZJWCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSk9CX0FUVFJJQlVURV9QUkVGSVh9fSk7dmFyIG89bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFByb2plY3RBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZldGNoUHJvamVjdEFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlUHJvamVjdEZpbHRlclByZWZlcmVuY2VzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby51cGRhdGVQcm9qZWN0RmlsdGVyUHJlZmVyZW5jZXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNob3dGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zaG93RmlsdGVyT25MYXVuY2hlc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGlkZUZpbHRlck9uTGF1bmNoZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmhpZGVGaWx0ZXJPbkxhdW5jaGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaENvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaENvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1cGRhdGVDb25maWd1cmF0aW9uQXR0cmlidXRlc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8udXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVwZGF0ZVByb2plY3ROb3RpZmljYXRpb25zQ29uZmlnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby51cGRhdGVQcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZ319KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvamVjdFJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnByb2plY3RSZWR1Y2VyfX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb2plY3RDb25maWdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdENvbmZpZ1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0TWVtYmVyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5wcm9qZWN0TWVtYmVyc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0Q3JlYXRpb25EYXRlU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnByb2plY3RDcmVhdGlvbkRhdGVTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXNlckZpbHRlcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkudXNlckZpbHRlcnNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmZWN0Q29sb3JzU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmVjdENvbG9yc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZlY3RUeXBlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZlY3RUeXBlc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZ3VyYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdE5vdGlmaWNhdGlvbnNDb25maWd1cmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb2plY3ROb3RpZmljYXRpb25zQ2FzZXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdE5vdGlmaWNhdGlvbnNDYXNlc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0Tm90aWZpY2F0aW9uc0VuYWJsZWRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdE5vdGlmaWNhdGlvbnNFbmFibGVkU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4dGVybmFsU3lzdGVtU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmV4dGVybmFsU3lzdGVtU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFuYWx5emVyQXR0cmlidXRlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hbmFseXplckF0dHJpYnV0ZXNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiam9iQXR0cmlidXRlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5qb2JBdHRyaWJ1dGVzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb2plY3RJbnRlZ3JhdGlvbnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucHJvamVjdEludGVncmF0aW9uc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9qZWN0SW50ZWdyYXRpb25zU29ydGVkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnByb2plY3RJbnRlZ3JhdGlvbnNTb3J0ZWRTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ3JvdXBlZEludGVncmF0aW9uc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ncm91cGVkSW50ZWdyYXRpb25zU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVR5cGVkSW50ZWdyYXRpb25zU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmNyZWF0ZVR5cGVkSW50ZWdyYXRpb25zU2VsZWN0b3J9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC91dGlscy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFByZWZpeCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubm9ybWFsaXplQXR0cmlidXRlc1dpdGhQcmVmaXh9fSl9LCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucHJvamVjdFJlZHVjZXI9dC5wcm9qZWN0UHJlZmVyZW5jZXNSZWR1Y2VyPXQucHJvamVjdEluZm9SZWR1Y2VyPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksdT1uKCIuL3NyYy9jb250cm9sbGVycy9maWx0ZXIvaW5kZXguanMiKSxjPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvY29uc3RhbnRzLmpzIiksZD10LnByb2plY3RJbmZvUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpjLlBST0pFQ1RfSU5GT19JTklUSUFMX1NUQVRFLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGMuRkVUQ0hfUFJPSkVDVF9TVUNDRVNTOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSxyKTtjYXNlIGMuVVBEQVRFX0NPTkZJR1VSQVRJT05fQVRUUklCVVRFUzpyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LGUse2NvbmZpZ3VyYXRpb246KDAsYS5kZWZhdWx0KSh7fSxlLmNvbmZpZ3VyYXRpb24se2F0dHJpYnV0ZXM6KDAsYS5kZWZhdWx0KSh7fSxlLmNvbmZpZ3VyYXRpb24mJmUuY29uZmlndXJhdGlvbi5hdHRyaWJ1dGVzfHx7fSxyKX0pfSk7Y2FzZSBjLlVQREFURV9OT1RJRklDQVRJT05TX0NPTkZJR19TVUNDRVNTOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSx7Y29uZmlndXJhdGlvbjooMCxhLmRlZmF1bHQpKHt9LGUuY29uZmlndXJhdGlvbix7bm90aWZpY2F0aW9uc0NvbmZpZ3VyYXRpb246cn0pfSk7ZGVmYXVsdDpyZXR1cm4gZX19LF89dC5wcm9qZWN0UHJlZmVyZW5jZXNSZWR1Y2VyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmMuUFJPSkVDVF9QUkVGRVJFTkNFU19JTklUSUFMX1NUQVRFLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkLG89dC5tZXRhO289dm9pZCAwPT09bz97fTpvO3ZhciBpPW8ub2xkSWQ7c3dpdGNoKG4pe2Nhc2UgYy5GRVRDSF9QUk9KRUNUX1BSRUZFUkVOQ0VTX1NVQ0NFU1M6cmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxlLHIpO2Nhc2UgdS5VUERBVEVfRklMVEVSX1NVQ0NFU1M6cmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxlLHtmaWx0ZXJzOigwLHUudXBkYXRlRmlsdGVyKShlLmZpbHRlcnMscixpKX0pO2Nhc2UgdS5BRERfRklMVEVSOnJldHVybigwLGEuZGVmYXVsdCkoe30sZSx7ZmlsdGVyczpbXS5jb25jYXQoKDAscy5kZWZhdWx0KShlLmZpbHRlcnMpLFtyXSl9KTtjYXNlIHUuUkVNT1ZFX0ZJTFRFUjpyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LGUse2ZpbHRlcnM6ZS5maWx0ZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pZCE9PXJ9KX0pO2RlZmF1bHQ6cmV0dXJuIGV9fSxwPXQucHJvamVjdFJlZHVjZXI9KDAsbC5jb21iaW5lUmVkdWNlcnMpKHtpbmZvOmQscHJlZmVyZW5jZXM6X30pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJwcm9qZWN0SW5mb1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sInByb2plY3RQcmVmZXJlbmNlc1JlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvcmVkdWNlci5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsInByb2plY3RSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3JlZHVjZXIuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZlY3RDb2xvcnNTZWxlY3Rvcj10LnByb2plY3ROb3RpZmljYXRpb25zRW5hYmxlZFNlbGVjdG9yPXQucHJvamVjdE5vdGlmaWNhdGlvbnNDYXNlc1NlbGVjdG9yPXQucHJvamVjdE5vdGlmaWNhdGlvbnNDb25maWd1cmF0aW9uU2VsZWN0b3I9dC5jcmVhdGVUeXBlZEludGVncmF0aW9uc1NlbGVjdG9yPXQuZ3JvdXBlZEludGVncmF0aW9uc1NlbGVjdG9yPXQucHJvamVjdEludGVncmF0aW9uc1NvcnRlZFNlbGVjdG9yPXQuZXh0ZXJuYWxTeXN0ZW1TZWxlY3Rvcj10LmpvYkF0dHJpYnV0ZXNTZWxlY3Rvcj10LmFuYWx5emVyQXR0cmlidXRlc1NlbGVjdG9yPXQuZGVmZWN0VHlwZXNTZWxlY3Rvcj10LnVzZXJGaWx0ZXJzU2VsZWN0b3I9dC5wcm9qZWN0UHJlZmVyZW5jZXNTZWxlY3Rvcj10LnByb2plY3RJbnRlZ3JhdGlvbnNTZWxlY3Rvcj10LnByb2plY3RDcmVhdGlvbkRhdGVTZWxlY3Rvcj10LnByb2plY3RNZW1iZXJzU2VsZWN0b3I9dC5wcm9qZWN0Q29uZmlnU2VsZWN0b3I9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvbGliL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Blcm1pc3Npb25zLmpzIiksXz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2NvbnN0YW50cy5qcyIpLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvamVjdHx8e319LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSkuaW5mb3x8e319LG09dC5wcm9qZWN0Q29uZmlnU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkuY29uZmlndXJhdGlvbnx8e319LGg9dC5wcm9qZWN0TWVtYmVyc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpLnVzZXJzfHxbXX0sZz10LnByb2plY3RDcmVhdGlvbkRhdGVTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZihlKS5jcmVhdGlvbkRhdGV8fDB9LGI9dC5wcm9qZWN0SW50ZWdyYXRpb25zU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkuaW50ZWdyYXRpb25zfHxbXX0sRT10LnByb2plY3RQcmVmZXJlbmNlc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBwKGUpLnByZWZlcmVuY2VzfHx7fX0seT10LnVzZXJGaWx0ZXJzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEUoZSkuZmlsdGVyc3x8W119LHY9dC5kZWZlY3RUeXBlc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpLnN1YlR5cGVzfHx7fX0sVD1mdW5jdGlvbihlKXtyZXR1cm4gbShlKS5hdHRyaWJ1dGVzfHx7fX0sQT1mdW5jdGlvbihlKXtyZXR1cm4oMCxjLmNyZWF0ZVNlbGVjdG9yKShULGZ1bmN0aW9uKHQpe3JldHVybigwLHUuZGVmYXVsdCkodCkucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIHIubWF0Y2goZSsiLiIpPygwLGEuZGVmYXVsdCkoe30sbiwoMCxzLmRlZmF1bHQpKHt9LHIucmVwbGFjZShlKyIuIiwiIiksdFtyXSkpOm59LHt9KX0pfSxDPXQuYW5hbHl6ZXJBdHRyaWJ1dGVzU2VsZWN0b3I9QShfLkFOQUxZWkVSX0FUVFJJQlVURV9QUkVGSVgpLE89dC5qb2JBdHRyaWJ1dGVzU2VsZWN0b3I9QShfLkpPQl9BVFRSSUJVVEVfUFJFRklYKSxTPXQuZXh0ZXJuYWxTeXN0ZW1TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gbShlKS5leHRlcm5hbFN5c3RlbXx8W119LFI9dC5wcm9qZWN0SW50ZWdyYXRpb25zU29ydGVkU2VsZWN0b3I9KDAsYy5jcmVhdGVTZWxlY3RvcikoYixmdW5jdGlvbihlKXtyZXR1cm4gZS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaW50ZWdyYXRpb25UeXBlLmdyb3VwVHlwZS5sb2NhbGVDb21wYXJlKHQuaW50ZWdyYXRpb25UeXBlLmdyb3VwVHlwZSl9KX0pLGo9dC5ncm91cGVkSW50ZWdyYXRpb25zU2VsZWN0b3I9KDAsYy5jcmVhdGVTZWxlY3RvcikoUixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmludGVncmF0aW9uVHlwZS5ncm91cFR5cGUscj0oMCxhLmRlZmF1bHQpKHt9LGUpO3JldHVybiByW25dP3Jbbl0ucHVzaCh0KTpyW25dPVt0XSxyfSx7fSl9KSx4PXQuY3JlYXRlVHlwZWRJbnRlZ3JhdGlvbnNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4oMCxjLmNyZWF0ZVNlbGVjdG9yKShiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5pbnRlZ3JhdGlvblR5cGUuZ3JvdXBUeXBlPT09ZX0pfSl9LEw9dC5wcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZ3VyYXRpb25TZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gbShlKS5ub3RpZmljYXRpb25zQ29uZmlndXJhdGlvbnx8e319LEQ9dC5wcm9qZWN0Tm90aWZpY2F0aW9uc0Nhc2VzU2VsZWN0b3I9KDAsYy5jcmVhdGVTZWxlY3RvcikoTCxmdW5jdGlvbihlKXt2YXIgdD1lLmNhc2VzO3JldHVybih2b2lkIDA9PT10P1tdOnQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLmRlZmF1bHQpKHt9LGUse2luZm9ybU93bmVyOmUucmVjaXBpZW50cy5pbmNsdWRlcyhkLk9XTkVSKSxzdWJtaXR0ZWQ6ITAsY29uZmlybWVkOiEwLHJlY2lwaWVudHM6ZS5yZWNpcGllbnRzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWQuT1dORVJ9KX0pfSl9KSx3PXQucHJvamVjdE5vdGlmaWNhdGlvbnNFbmFibGVkU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkuZW5hYmxlZHx8ITF9LE09dC5kZWZlY3RDb2xvcnNTZWxlY3Rvcj0oMCxjLmNyZWF0ZVNlbGVjdG9yKShtLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybigwLHUuZGVmYXVsdCkoZSkubGVuZ3RoJiYoMCx1LmRlZmF1bHQpKGUuc3ViVHlwZXMpLmZvckVhY2goZnVuY3Rpb24obil7dFtuLnRvTG93ZXJDYXNlKCldPWUuc3ViVHlwZXNbbl1bMF0uY29sb3IsZS5zdWJUeXBlc1tuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZS5sb2NhdG9yXT1lLmNvbG9yfSl9KSx0fSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sInByb2plY3RDb25maWdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJwcm9qZWN0TWVtYmVyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsInByb2plY3RDcmVhdGlvbkRhdGVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJwcm9qZWN0SW50ZWdyYXRpb25zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRSwicHJvamVjdFByZWZlcmVuY2VzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeSwidXNlckZpbHRlcnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJkZWZlY3RUeXBlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEMsImFuYWx5emVyQXR0cmlidXRlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sImpvYkF0dHJpYnV0ZXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihTLCJleHRlcm5hbFN5c3RlbVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFIsInByb2plY3RJbnRlZ3JhdGlvbnNTb3J0ZWRTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihqLCJncm91cGVkSW50ZWdyYXRpb25zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeCwiY3JlYXRlVHlwZWRJbnRlZ3JhdGlvbnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJwcm9qZWN0Tm90aWZpY2F0aW9uc0NvbmZpZ3VyYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihELCJwcm9qZWN0Tm90aWZpY2F0aW9uc0Nhc2VzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodywicHJvamVjdE5vdGlmaWNhdGlvbnNFbmFibGVkU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiZGVmZWN0Q29sb3JzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwicHJvamVjdFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsInByb2plY3RJbmZvU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Byb2plY3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiYXR0cmlidXRlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEEsImNyZWF0ZVByZWZpeGVkQXR0cmlidXRlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvdXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubm9ybWFsaXplQXR0cmlidXRlc1dpdGhQcmVmaXg9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9dC5ub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFByZWZpeD1mdW5jdGlvbihlLHQpe3JldHVybiB0PygwLHUuZGVmYXVsdCkoZSkucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuKDAsYS5kZWZhdWx0KSh7fSxuLCgwLHMuZGVmYXVsdCkoe30sdCsiLiIrcixlW3JdKSl9LHt9KTplfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFByZWZpeCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvcHJvamVjdC91dGlscy5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5oaWRlU2NyZWVuTG9ja0FjdGlvbj10LnNob3dTY3JlZW5Mb2NrQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2NvbnN0YW50cy5qcyIpLG89dC5zaG93U2NyZWVuTG9ja0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuU0hPV19TQ1JFRU5fTE9DSyxwYXlsb2FkOnt2aXNpYmxlOiEwfX19LHM9dC5oaWRlU2NyZWVuTG9ja0FjdGlvbj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnIuSElERV9TQ1JFRU5fTE9DSyxwYXlsb2FkOnt2aXNpYmxlOiExfX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJzaG93U2NyZWVuTG9ja0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsImhpZGVTY3JlZW5Mb2NrQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuU0hPV19TQ1JFRU5fTE9DSz0ic2hvd1NjcmVlbkxvY2siLG89dC5ISURFX1NDUkVFTl9MT0NLPSJoaWRlU2NyZWVuTG9jayI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlNIT1dfU0NSRUVOX0xPQ0siLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NjcmVlbkxvY2svY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiSElERV9TQ1JFRU5fTE9DSyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTSE9XX1NDUkVFTl9MT0NLIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TSE9XX1NDUkVFTl9MT0NLfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJISURFX1NDUkVFTl9MT0NLIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5ISURFX1NDUkVFTl9MT0NLfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NjcmVlbkxvY2svYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hvd1NjcmVlbkxvY2tBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnNob3dTY3JlZW5Mb2NrQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJoaWRlU2NyZWVuTG9ja0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaGlkZVNjcmVlbkxvY2tBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNjcmVlbkxvY2tSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zY3JlZW5Mb2NrUmVkdWNlcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzY3JlZW5Mb2NrVmlzaWJpbGl0eVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zY3JlZW5Mb2NrVmlzaWJpbGl0eVNlbGVjdG9yfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNjcmVlbkxvY2tSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2NvbnN0YW50cy5qcyIpLG89dC5zY3JlZW5Mb2NrUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7dmlzaWJsZTohMX0sdD1hcmd1bWVudHNbMV0sbj10LnR5cGUsbz10LnBheWxvYWQ7c3dpdGNoKG4pe2Nhc2Ugci5TSE9XX1NDUkVFTl9MT0NLOmNhc2Ugci5ISURFX1NDUkVFTl9MT0NLOnJldHVybiBvO2RlZmF1bHQ6cmV0dXJuIGV9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJzY3JlZW5Mb2NrUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9yZWR1Y2VyLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NyZWVuTG9ja3x8e319LG89dC5zY3JlZW5Mb2NrVmlzaWJpbGl0eVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpLnZpc2libGV8fCExfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywic2NyZWVuTG9ja1Zpc2liaWxpdHlTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJzY3JlZW5Mb2NrU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NjcmVlbkxvY2svc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuU09SVElOR19BU0M9IkFTQyIsbz10LlNPUlRJTkdfREVTQz0iREVTQyIscz10LlNPUlRJTkdfS0VZPSJwYWdlLnNvcnQiOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJTT1JUSU5HX0FTQyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc29ydGluZy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJTT1JUSU5HX0RFU0MiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiU09SVElOR19LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy93aXRoU29ydGluZy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwid2l0aFNvcnRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLndpdGhTb3J0aW5nfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNPUlRJTkdfREVTQyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uU09SVElOR19ERVNDfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTT1JUSU5HX0FTQyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uU09SVElOR19BU0N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNPUlRJTkdfS0VZIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5TT1JUSU5HX0tFWX19KTt2YXIgcz1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzb3J0aW5nU3RyaW5nU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnNvcnRpbmdTdHJpbmdTZWxlY3Rvcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3V0aWxzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZvcm1hdFNvcnRpbmdTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmZvcm1hdFNvcnRpbmdTdHJpbmd9fSk7dmFyIGE9bigiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy93aXRoU29ydGluZ1VSTC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwid2l0aFNvcnRpbmdVUkwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLndpdGhTb3J0aW5nVVJMfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc29ydGluZ1N0cmluZ1NlbGVjdG9yPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy9jb25zdGFudHMuanMiKSxzPXQuc29ydGluZ1N0cmluZ1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsci5wYWdlUHJvcGVydGllc1NlbGVjdG9yKShlLHQpW28uU09SVElOR19LRVldfHwiIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywic29ydGluZ1N0cmluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3NlbGVjdG9ycy5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5mb3JtYXRTb3J0aW5nU3RyaW5nPXQucGFyc2VTb3J0aW5nU3RyaW5nPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0ocikscz1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL2NvbnN0YW50cy5qcyIpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1zLlNPUlRJTkdfQVNDfHxlPT09cy5TT1JUSU5HX0RFU0N9LGE9dC5wYXJzZVNvcnRpbmdTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsdD1lLmxlbmd0aD4wP2Uuc3BsaXQoIiwiKTpbXTtyZXR1cm57ZmllbGRzOnQsZGlyZWN0aW9uOmkodFt0Lmxlbmd0aC0xXSk/dC5wb3AoKTpudWxsfX0sbD10LmZvcm1hdFNvcnRpbmdTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV07cmV0dXJuKHQ/W10uY29uY2F0KCgwLG8uZGVmYXVsdCkoZSksW3RdKTplKS5qb2luKCIsIil9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJwYXJzZVNvcnRpbmdTdHJpbmciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJmb3JtYXRTb3J0aW5nU3RyaW5nIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiaXNEaXJlY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvdXRpbHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3dpdGhTb3J0aW5nLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQud2l0aFNvcnRpbmc9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGc9bigiLi9zcmMvY29udHJvbGxlcnMvc29ydGluZy9jb25zdGFudHMuanMiKSxiPXQud2l0aFNvcnRpbmc9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj10LmRlZmF1bHRTb3J0aW5nQ29sdW1uLHI9dC5kZWZhdWx0U29ydGluZ0RpcmVjdGlvbjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG8saTtyZXR1cm4gaT1vPWZ1bmN0aW9uKG8pe2Z1bmN0aW9uIGkoKXt2YXIgZSx0LG8sczsoMCx1LmRlZmF1bHQpKHRoaXMsaSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShsKSxkPTA7ZDxsO2QrKyljW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gdD1vPSgwLHAuZGVmYXVsdCkodGhpcywoZT1pLl9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KShpKSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYykpKSxvLnN0YXRlPXtzb3J0aW5nQ29sdW1uOm4sc29ydGluZ0RpcmVjdGlvbjpyfHxnLlNPUlRJTkdfREVTQ30sby5jaGFuZ2VTb3J0aW5nPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9bykuX19jaGFuZ2VTb3J0aW5nX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvLnRvZ2dsZVNvcnRpbmdEaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1vKS5fX3RvZ2dsZVNvcnRpbmdEaXJlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG8uY3JlYXRlU29ydGluZ1N0cmluZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPW8pLl9fY3JlYXRlU29ydGluZ1N0cmluZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0scz10LCgwLHAuZGVmYXVsdCkobyxzKX1yZXR1cm4oMCxtLmRlZmF1bHQpKGksbyksKDAsZC5kZWZhdWx0KShpLFt7a2V5OiJfX2NyZWF0ZVNvcnRpbmdTdHJpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVNvcnRpbmdTdHJpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZVNvcnRpbmdEaXJlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZVNvcnRpbmdEaXJlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT09PXRoaXMuc3RhdGUuc29ydGluZ0NvbHVtbj90aGlzLnNldFN0YXRlKHtzb3J0aW5nRGlyZWN0aW9uOnRoaXMudG9nZ2xlU29ydGluZ0RpcmVjdGlvbigpfSk6dGhpcy5zZXRTdGF0ZSh7c29ydGluZ0RpcmVjdGlvbjpnLlNPUlRJTkdfQVNDLHNvcnRpbmdDb2x1bW46ZX0pfX0se2tleToiX190b2dnbGVTb3J0aW5nRGlyZWN0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuc29ydGluZ0RpcmVjdGlvbj09PWcuU09SVElOR19ERVNDP2cuU09SVElOR19BU0M6Zy5TT1JUSU5HX0RFU0N9fSx7a2V5OiJfX2NyZWF0ZVNvcnRpbmdTdHJpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5zb3J0aW5nQ29sdW1uLG49ZS5zb3J0aW5nRGlyZWN0aW9uO3JldHVybiB0JiZuJiZ0KyIsIitufX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQodCwoMCxzLmRlZmF1bHQpKHt9LHRoaXMucHJvcHMse3NvcnRpbmdTdHJpbmc6dGhpcy5jcmVhdGVTb3J0aW5nU3RyaW5nKCksc29ydGluZ0NvbHVtbjp0aGlzLnN0YXRlLnNvcnRpbmdDb2x1bW4sc29ydGluZ0RpcmVjdGlvbjp0aGlzLnN0YXRlLnNvcnRpbmdEaXJlY3Rpb24sb25DaGFuZ2VTb3J0aW5nOnRoaXMuY2hhbmdlU29ydGluZ30pKX19XSksaX0oaC5QdXJlQ29tcG9uZW50KSxvLmRpc3BsYXlOYW1lPSJ3aXRoU29ydGluZygiKyh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKyIpIixpfX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYiwid2l0aFNvcnRpbmciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvd2l0aFNvcnRpbmcuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3dpdGhTb3J0aW5nVVJMLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSChGKHQsZSksZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LndpdGhTb3J0aW5nVVJMPXZvaWQgMDt2YXIgaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGE9byhpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLHU9byhsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIpLGQ9byhjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHA9byhfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLG09byhmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGc9byhoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksRT1vKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksdj1vKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksQT1vKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEQ9byhMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxNPW8odyksaz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxJPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvY29uc3RhbnRzLmpzIiksUD1uKCIuL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3V0aWxzLmpzIiksTj17U29ydGluZ1dyYXBwZXI6e2Rpc3BsYXlOYW1lOiJTb3J0aW5nV3JhcHBlciIsaXNJbkZ1bmN0aW9uOiEwfX0sSD0oMCxELmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zb3J0aW5nL3dpdGhTb3J0aW5nVVJMLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbZV0saW1wb3J0czpbeC5kZWZhdWx0XX0pLEY9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc29ydGluZy93aXRoU29ydGluZ1VSTC5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W10saW1wb3J0czpbeC5kZWZhdWx0LE8uZGVmYXVsdF19KSxCPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5kZWZhdWx0RmllbGRzLG49dm9pZCAwPT09dD9bXTp0LG89ZS5kZWZhdWx0RGlyZWN0aW9uLGk9ZS5zdGF0aWNGaWVsZHMsbD12b2lkIDA9PT1pP1tdOmksYz1lLm5hbWVzcGFjZSxfPWUubmFtZXNwYWNlU2VsZWN0b3I7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LGksZjtyZXR1cm4gcygiU29ydGluZ1dyYXBwZXIiKSgoMCxrLmNvbm5lY3RSb3V0ZXIpKGZ1bmN0aW9uKGUpe3JldHVybntzb3J0aW5nU3RyaW5nOmVbSS5TT1JUSU5HX0tFWV19fSx7dXBkYXRlU29ydGluZzpmdW5jdGlvbihlKXtyZXR1cm4oMCxBLmRlZmF1bHQpKHt9LEkuU09SVElOR19LRVksZSl9fSx7bmFtZXNwYWNlOmMsbmFtZXNwYWNlU2VsZWN0b3I6X30pKChmPWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcygpe3ZhciBlLHQsbixyOygwLG0uZGVmYXVsdCkodGhpcyxzKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KG8pLGE9MDthPG87YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiB0PW49KDAsRS5kZWZhdWx0KSh0aGlzLChlPXMuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHMpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLG4uY2hhbmdlU29ydGluZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPW4pLl9fY2hhbmdlU29ydGluZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0scj10LCgwLEUuZGVmYXVsdCkobixyKX1yZXR1cm4oMCx2LmRlZmF1bHQpKHMsdCksKDAsZy5kZWZhdWx0KShzLFt7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoYW5nZVNvcnRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsUC5wYXJzZVNvcnRpbmdTdHJpbmcpKHRoaXMucHJvcHMuc29ydGluZ1N0cmluZykscj10LmZpZWxkcyxzPXQuZGlyZWN0aW9uLGk9c3x8bzsoci5sZW5ndGg+MD9yOm4pLmluY2x1ZGVzKGUpJiYoaT1pPT09SS5TT1JUSU5HX0FTQz9JLlNPUlRJTkdfREVTQzpJLlNPUlRJTkdfQVNDKSx0aGlzLnByb3BzLnVwZGF0ZVNvcnRpbmcoKDAsUC5mb3JtYXRTb3J0aW5nU3RyaW5nKShbZV0uY29uY2F0KCgwLGQuZGVmYXVsdCkobCkpLGkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLHM9KHQuc29ydGluZ1N0cmluZyx0LnVwZGF0ZVNvcnRpbmcsKDAsdS5kZWZhdWx0KSh0LFsic29ydGluZ1N0cmluZyIsInVwZGF0ZVNvcnRpbmciXSkpLGk9KDAsUC5wYXJzZVNvcnRpbmdTdHJpbmcpKHRoaXMucHJvcHMuc29ydGluZ1N0cmluZyksbD1pLmZpZWxkcyxjPWkuZGlyZWN0aW9uLGQ9bFswXXx8blswXTtyZXR1cm4gci5jcmVhdGVFbGVtZW50KGUsKDAsYS5kZWZhdWx0KSh7c29ydGluZ0NvbHVtbjpkLHNvcnRpbmdEaXJlY3Rpb246Y3x8byxvbkNoYW5nZVNvcnRpbmc6dGhpcy5jaGFuZ2VTb3J0aW5nfSxzKSl9fV0pLHN9KGouQ29tcG9uZW50KSxpLnByb3BUeXBlcz17c29ydGluZ1N0cmluZzpNLmRlZmF1bHQuc3RyaW5nLHVwZGF0ZVNvcnRpbmc6TS5kZWZhdWx0LmZ1bmN9LGkuZGVmYXVsdFByb3BzPXtzb3J0aW5nU3RyaW5nOiIiLHVwZGF0ZVNvcnRpbmc6ZnVuY3Rpb24oKXt9fSx0PWYpKXx8dCl9fTt0LndpdGhTb3J0aW5nVVJMPUI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQiwid2l0aFNvcnRpbmdVUkwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvd2l0aFNvcnRpbmdVUkwuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5saW5rSXNzdWVBY3Rpb249dC5lZGl0RGVmZWN0c0FjdGlvbj10LnVubGlua0lzc3VlQWN0aW9uPXQuaW5jbHVkZUluQXV0b0FuYWx5c2lzQWN0aW9uPXQuaWdub3JlSW5BdXRvQW5hbHlzaXNBY3Rpb249dC5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249dC51bnNlbGVjdEFsbFN0ZXBzQWN0aW9uPXQuc2VsZWN0U3RlcHNBY3Rpb249dC50b2dnbGVTdGVwU2VsZWN0aW9uQWN0aW9uPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9zdGVwL2NvbnN0YW50cy5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksYT10LnRvZ2dsZVN0ZXBTZWxlY3Rpb25BY3Rpb249KDAsci50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uKShzLk5BTUVTUEFDRSksbD10LnNlbGVjdFN0ZXBzQWN0aW9uPSgwLHIuc2VsZWN0SXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSx1PXQudW5zZWxlY3RBbGxTdGVwc0FjdGlvbj0oMCxyLnVuc2VsZWN0QWxsSXRlbXNBY3Rpb24pKHMuTkFNRVNQQUNFKSxjPXQucHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uPSgwLHIuY3JlYXRlUHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uKShzLk5BTUVTUEFDRSksZD10Lmlnbm9yZUluQXV0b0FuYWx5c2lzQWN0aW9uPSgwLHIuZGVmaW5lR3JvdXBPcGVyYXRpb24pKHMuTkFNRVNQQUNFLCJpZ25vcmUtaW4tYWEiLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mZXRjaEZ1bmM7cmV0dXJuKDAsby5zaG93TW9kYWxBY3Rpb24pKHtpZDoiaWdub3JlSW5BQU1vZGFsIixkYXRhOntpdGVtczplLGZldGNoRnVuYzpufX0pfSxpLnZhbGlkYXRlSWdub3JlSW5BQSksXz10LmluY2x1ZGVJbkF1dG9BbmFseXNpc0FjdGlvbj0oMCxyLmRlZmluZUdyb3VwT3BlcmF0aW9uKShzLk5BTUVTUEFDRSwiaW5jbHVkZS1pbi1hYSIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZldGNoRnVuYztyZXR1cm4oMCxvLnNob3dNb2RhbEFjdGlvbikoe2lkOiJpbmNsdWRlSW5BQU1vZGFsIixkYXRhOntpdGVtczplLGZldGNoRnVuYzpufX0pfSxpLnZhbGlkYXRlSW5jbHVkZUluQUEpLHA9dC51bmxpbmtJc3N1ZUFjdGlvbj0oMCxyLmRlZmluZUdyb3VwT3BlcmF0aW9uKShzLk5BTUVTUEFDRSwidW5saW5rLWlzc3VlIixmdW5jdGlvbihlLHQpe3ZhciBuPXQuZmV0Y2hGdW5jO3JldHVybigwLG8uc2hvd01vZGFsQWN0aW9uKSh7aWQ6InVubGlua0lzc3VlTW9kYWwiLGRhdGE6e2l0ZW1zOmUsZmV0Y2hGdW5jOm59fSl9LGkudmFsaWRhdGVVbmxpbmtJc3N1ZSksZj10LmVkaXREZWZlY3RzQWN0aW9uPSgwLHIuZGVmaW5lR3JvdXBPcGVyYXRpb24pKHMuTkFNRVNQQUNFLCJlZGl0LWRlZmVjdCIsZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZldGNoRnVuYyxyPXQuZGVidWdNb2RlO3JldHVybigwLG8uc2hvd01vZGFsQWN0aW9uKSh7aWQ6ImVkaXREZWZlY3RNb2RhbCIsZGF0YTp7aXRlbXM6ZSxmZXRjaEZ1bmM6bixkZWJ1Z01vZGU6cn19KX0saS52YWxpZGF0ZUVkaXREZWZlY3QpLG09dC5saW5rSXNzdWVBY3Rpb249KDAsci5kZWZpbmVHcm91cE9wZXJhdGlvbikocy5OQU1FU1BBQ0UsImxpbmstaXNzdWUiLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mZXRjaEZ1bmM7cmV0dXJuKDAsby5zaG93TW9kYWxBY3Rpb24pKHtpZDoibGlua0lzc3VlTW9kYWwiLGRhdGE6e2l0ZW1zOmUsZmV0Y2hGdW5jOm59fSl9LGkudmFsaWRhdGVMaW5rSXNzdWUpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ0b2dnbGVTdGVwU2VsZWN0aW9uQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwic2VsZWN0U3RlcHNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJ1bnNlbGVjdEFsbFN0ZXBzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywicHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiaWdub3JlSW5BdXRvQW5hbHlzaXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJpbmNsdWRlSW5BdXRvQW5hbHlzaXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJ1bmxpbmtJc3N1ZUFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsImVkaXREZWZlY3RzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwibGlua0lzc3VlQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2FjdGlvbkNyZWF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LnZhbGlkYXRlSWdub3JlSW5BQT1mdW5jdGlvbihlKXtyZXR1cm4gZS5pc3N1ZSYmIWUuaXNzdWUuaXNzdWVUeXBlPyJub0RlZmVjdFR5cGUiOmUuaXNzdWUmJmUuaXNzdWUuaWdub3JlQW5hbHl6ZXI/ImFscmVhZHlJZ25vcmVkIjpudWxsfSxvPXQudmFsaWRhdGVJbmNsdWRlSW5BQT1mdW5jdGlvbihlKXtyZXR1cm4gZS5pc3N1ZSYmIWUuaXNzdWUuaXNzdWVUeXBlPyJub0RlZmVjdFR5cGUiOmUuaXNzdWUmJiFlLmlzc3VlLmlnbm9yZUFuYWx5emVyPyJhbHJlYWR5SW5jbHVkZWQiOm51bGx9LHM9dC52YWxpZGF0ZVVubGlua0lzc3VlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlzc3VlJiZlLmlzc3VlLmV4dGVybmFsU3lzdGVtSXNzdWVzJiZlLmlzc3VlLmV4dGVybmFsU3lzdGVtSXNzdWVzLmxlbmd0aD9udWxsOiJub0xpbmtlZElzc3VlIn0saT10LnZhbGlkYXRlTGlua0lzc3VlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlzc3VlP251bGw6Im5vRGVmZWN0VHlwZVRvTGlua0lzc3VlIn0sYT10LnZhbGlkYXRlRWRpdERlZmVjdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5pc3N1ZT9udWxsOiJub0lzc3VlIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsInZhbGlkYXRlSWdub3JlSW5BQSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywidmFsaWRhdGVJbmNsdWRlSW5BQSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywidmFsaWRhdGVVbmxpbmtJc3N1ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwidmFsaWRhdGVMaW5rSXNzdWUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvYWN0aW9uVmFsaWRhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsInZhbGlkYXRlRWRpdERlZmVjdCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25WYWxpZGF0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTkFNRVNQQUNFPSJzdGVwIixvPXQuUFJFREVGSU5FRF9GSUxURVJfS0VZPSJwcmVkZWZpbmVkRmlsdGVyIixzPXQuRklMVEVSX0NPTExBUFNFRD0iY29sbGFwc2VkIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlBSRURFRklORURfRklMVEVSX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJGSUxURVJfQ09MTEFQU0VEIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3N0ZXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3N0ZXAvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5BTUVTUEFDRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTkFNRVNQQUNFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQUkVERUZJTkVEX0ZJTFRFUl9LRVkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlBSRURFRklORURfRklMVEVSX0tFWX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRklMVEVSX0NPTExBUFNFRCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRklMVEVSX0NPTExBUFNFRH19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy9zdGVwL3JlZHVjZXIuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic3RlcFJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnN0ZXBSZWR1Y2VyfX0pO3ZhciBzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3N0ZXAvc2VsZWN0b3JzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0ZXBzU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnN0ZXBzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhc3RPcGVyYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubGFzdE9wZXJhdGlvblNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnZhbGlkYXRpb25FcnJvcnNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VsZWN0ZWRTdGVwc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zZWxlY3RlZFN0ZXBzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0ZXBQYWdpbmF0aW9uU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnN0ZXBQYWdpbmF0aW9uU2VsZWN0b3J9fSk7dmFyIGk9bigiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZWxlY3RTdGVwc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VsZWN0U3RlcHNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImVkaXREZWZlY3RzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5lZGl0RGVmZWN0c0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRvZ2dsZVN0ZXBTZWxlY3Rpb25BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVN0ZXBTZWxlY3Rpb25BY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVuc2VsZWN0QWxsU3RlcHNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnVuc2VsZWN0QWxsU3RlcHNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlnbm9yZUluQXV0b0FuYWx5c2lzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pZ25vcmVJbkF1dG9BbmFseXNpc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaW5jbHVkZUluQXV0b0FuYWx5c2lzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pbmNsdWRlSW5BdXRvQW5hbHlzaXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVubGlua0lzc3VlQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51bmxpbmtJc3N1ZUFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGlua0lzc3VlQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5saW5rSXNzdWVBY3Rpb259fSl9LCIuL3NyYy9jb250cm9sbGVycy9zdGVwL3JlZHVjZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3RlcFJlZHVjZXI9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy9zdGVwL2NvbnN0YW50cy5qcyIpLGw9dC5zdGVwUmVkdWNlcj0oMCxyLmNvbWJpbmVSZWR1Y2Vycykoe3N0ZXBzOigwLG8uZmV0Y2hSZWR1Y2VyKShhLk5BTUVTUEFDRSx7Y29udGVudFBhdGg6ImNvbnRlbnQifSksZ3JvdXBPcGVyYXRpb25zOigwLHMuZ3JvdXBPcGVyYXRpb25zUmVkdWNlcikoYS5OQU1FU1BBQ0UpLHBhZ2luYXRpb246KDAsaS5wYWdpbmF0aW9uUmVkdWNlcikoYS5OQU1FU1BBQ0UpfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwic3RlcFJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvcmVkdWNlci5qcyIpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3RlcFBhZ2luYXRpb25TZWxlY3Rvcj10LnN0ZXBzU2VsZWN0b3I9dC5sYXN0T3BlcmF0aW9uU2VsZWN0b3I9dC52YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3I9dC5zZWxlY3RlZFN0ZXBzU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RlcH0scz1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKS5ncm91cE9wZXJhdGlvbnN9LGk9dC5zZWxlY3RlZFN0ZXBzU2VsZWN0b3I9KDAsci5jcmVhdGVTZWxlY3RlZEl0ZW1zU2VsZWN0b3IpKHMpLGE9dC52YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3I9KDAsci5jcmVhdGVWYWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IpKHMpLGw9dC5sYXN0T3BlcmF0aW9uU2VsZWN0b3I9KDAsci5jcmVhdGVMYXN0T3BlcmF0aW9uU2VsZWN0b3IpKHMpLHU9dC5zdGVwc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLnN0ZXBzfHxbXX0sYz10LnN0ZXBQYWdpbmF0aW9uU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkucGFnaW5hdGlvbn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksInNlbGVjdGVkU3RlcHNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ2YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwibGFzdE9wZXJhdGlvblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdGVwL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInN0ZXBzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N0ZXAvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywic3RlcFBhZ2luYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJncm91cE9wZXJhdGlvbnNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3RlcC9zZWxlY3RvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249dC50b2dnbGVBbGxTdWl0ZXNBY3Rpb249dC51bnNlbGVjdEFsbFN1aXRlc0FjdGlvbj10LnNlbGVjdFN1aXRlc0FjdGlvbj10LnRvZ2dsZVN1aXRlU2VsZWN0aW9uQWN0aW9uPXQuZmV0Y2hTdWl0ZXNBY3Rpb249dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvc3VpdGUvY29uc3RhbnRzLmpzIikscz10LmZldGNoU3VpdGVzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOm8uRkVUQ0hfU1VJVEVTLHBheWxvYWQ6ZX19LGk9dC50b2dnbGVTdWl0ZVNlbGVjdGlvbkFjdGlvbj0oMCxyLnRvZ2dsZUl0ZW1TZWxlY3Rpb25BY3Rpb24pKG8uTkFNRVNQQUNFKSxhPXQuc2VsZWN0U3VpdGVzQWN0aW9uPSgwLHIuc2VsZWN0SXRlbXNBY3Rpb24pKG8uTkFNRVNQQUNFKSxsPXQudW5zZWxlY3RBbGxTdWl0ZXNBY3Rpb249KDAsci51bnNlbGVjdEFsbEl0ZW1zQWN0aW9uKShvLk5BTUVTUEFDRSksdT10LnRvZ2dsZUFsbFN1aXRlc0FjdGlvbj0oMCxyLnRvZ2dsZUFsbEl0ZW1zQWN0aW9uKShvLk5BTUVTUEFDRSksYz10LnByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbj0oMCxyLmNyZWF0ZVByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbikoby5OQU1FU1BBQ0UpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJmZXRjaFN1aXRlc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJ0b2dnbGVTdWl0ZVNlbGVjdGlvbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJzZWxlY3RTdWl0ZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwidW5zZWxlY3RBbGxTdWl0ZXNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwidG9nZ2xlQWxsU3VpdGVzQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdWl0ZS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvYWN0aW9uQ3JlYXRvcnMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTkFNRVNQQUNFPSJzdWl0ZXMiLG89dC5GRVRDSF9TVUlURVM9ImZldGNoU3VpdGVzIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdWl0ZS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJGRVRDSF9TVUlURVMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3N1aXRlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN1aXRlUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3VpdGVSZWR1Y2VyfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN1aXRlU2FnYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnN1aXRlU2FnYXN9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvc3VpdGUvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hTdWl0ZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmZldGNoU3VpdGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZWxlY3RTdWl0ZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnNlbGVjdFN1aXRlc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9nZ2xlU3VpdGVTZWxlY3Rpb25BY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnRvZ2dsZVN1aXRlU2VsZWN0aW9uQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidW5zZWxlY3RBbGxTdWl0ZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnVuc2VsZWN0QWxsU3VpdGVzQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0b2dnbGVBbGxTdWl0ZXNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnRvZ2dsZUFsbFN1aXRlc0FjdGlvbn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibGFzdE9wZXJhdGlvblNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sYXN0T3BlcmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbGlkYXRpb25FcnJvcnNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkudmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZWxlY3RlZFN1aXRlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zZWxlY3RlZFN1aXRlc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdWl0ZVBhZ2luYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuc3VpdGVQYWdpbmF0aW9uU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN1aXRlc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zdWl0ZXNTZWxlY3Rvcn19KTt2YXIgYT1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9jb25zdGFudHMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTkFNRVNQQUNFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5OQU1FU1BBQ0V9fSl9LCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnN1aXRlUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIikscz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy9ncm91cE9wZXJhdGlvbnMvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3N1aXRlL2NvbnN0YW50cy5qcyIpLGw9dC5zdWl0ZVJlZHVjZXI9KDAsci5jb21iaW5lUmVkdWNlcnMpKHtzdWl0ZXM6KDAsby5mZXRjaFJlZHVjZXIpKGEuTkFNRVNQQUNFLHtjb250ZW50UGF0aDoiY29udGVudCJ9KSxwYWdpbmF0aW9uOigwLHMucGFnaW5hdGlvblJlZHVjZXIpKGEuTkFNRVNQQUNFKSxncm91cE9wZXJhdGlvbnM6KDAsaS5ncm91cE9wZXJhdGlvbnNSZWR1Y2VyKShhLk5BTUVTUEFDRSl9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJzdWl0ZVJlZHVjZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NhZ2FzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQsbixyPWUucGF5bG9hZDtyZXR1cm4gYS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGwuc2VsZWN0KShjLmFjdGl2ZVByb2plY3RTZWxlY3Rvcik7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLm5leHQ9NSwoMCxsLnNlbGVjdCkoZC5sYXVuY2hJZFNlbGVjdG9yKTtjYXNlIDU6cmV0dXJuIG49ZS5zZW50LGUubmV4dD04LCgwLGwucHV0KSgoMCx1LmZldGNoRGF0YUFjdGlvbikocC5OQU1FU1BBQ0UpKF8uVVJMUy50ZXN0SXRlbXModCxuKSxyKSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxmLHRoaXMpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGwudGFrZUV2ZXJ5KShwLkZFVENIX1NVSVRFUyxyKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LG0sdGhpcyl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsbC5hbGwpKFtvKCldKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGgsdGhpcyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiKSxhPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oaSk7dC5zdWl0ZVNhZ2FzPXM7dmFyIGw9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9lZmZlY3RzLmpzIiksdT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLGM9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxfPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIikscD1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9jb25zdGFudHMuanMiKSxmPWEuZGVmYXVsdC5tYXJrKHIpLG09YS5kZWZhdWx0Lm1hcmsobyksaD1hLmRlZmF1bHQubWFyayhzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiZ2V0U3VpdGVzIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdWl0ZS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIndhdGNoRmV0Y2hTdWl0ZXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywic3VpdGVTYWdhcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc3VpdGVQYWdpbmF0aW9uU2VsZWN0b3I9dC5zdWl0ZXNTZWxlY3Rvcj10Lmxhc3RPcGVyYXRpb25TZWxlY3Rvcj10LnZhbGlkYXRpb25FcnJvcnNTZWxlY3Rvcj10LnNlbGVjdGVkU3VpdGVzU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VpdGVzfHx7fX0scz1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKS5ncm91cE9wZXJhdGlvbnN9LGk9dC5zZWxlY3RlZFN1aXRlc1NlbGVjdG9yPSgwLHIuY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yKShzKSxhPXQudmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yPSgwLHIuY3JlYXRlVmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yKShzKSxsPXQubGFzdE9wZXJhdGlvblNlbGVjdG9yPSgwLHIuY3JlYXRlTGFzdE9wZXJhdGlvblNlbGVjdG9yKShzKSx1PXQuc3VpdGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkuc3VpdGVzfHxbXX0sYz10LnN1aXRlUGFnaW5hdGlvblNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLnBhZ2luYXRpb259OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJzZWxlY3RlZFN1aXRlc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdWl0ZS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ2YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImxhc3RPcGVyYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwic3VpdGVzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInN1aXRlUGFnaW5hdGlvblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy9zdWl0ZS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJkb21haW5TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvc3VpdGUvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZ3JvdXBPcGVyYXRpb25zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3N1aXRlL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uPXQudG9nZ2xlQWxsVGVzdHNBY3Rpb249dC51bnNlbGVjdEFsbFRlc3RzQWN0aW9uPXQuc2VsZWN0VGVzdHNBY3Rpb249dC50b2dnbGVUZXN0U2VsZWN0aW9uQWN0aW9uPXQuZmV0Y2hUZXN0c0FjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0L2NvbnN0YW50cy5qcyIpLHM9dC5mZXRjaFRlc3RzQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOm8uRkVUQ0hfVEVTVFMscGF5bG9hZDplfX0saT10LnRvZ2dsZVRlc3RTZWxlY3Rpb25BY3Rpb249KDAsci50b2dnbGVJdGVtU2VsZWN0aW9uQWN0aW9uKShvLk5BTUVTUEFDRSksYT10LnNlbGVjdFRlc3RzQWN0aW9uPSgwLHIuc2VsZWN0SXRlbXNBY3Rpb24pKG8uTkFNRVNQQUNFKSxsPXQudW5zZWxlY3RBbGxUZXN0c0FjdGlvbj0oMCxyLnVuc2VsZWN0QWxsSXRlbXNBY3Rpb24pKG8uTkFNRVNQQUNFKSx1PXQudG9nZ2xlQWxsVGVzdHNBY3Rpb249KDAsci50b2dnbGVBbGxJdGVtc0FjdGlvbikoby5OQU1FU1BBQ0UpLGM9dC5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb249KDAsci5jcmVhdGVQcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb24pKG8uTkFNRVNQQUNFKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZmV0Y2hUZXN0c0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksInRvZ2dsZVRlc3RTZWxlY3Rpb25BY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJzZWxlY3RUZXN0c0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInVuc2VsZWN0QWxsVGVzdHNBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3QvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJ0b2dnbGVBbGxUZXN0c0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdC9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInByb2NlZWRXaXRoVmFsaWRJdGVtc0FjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdC9hY3Rpb25DcmVhdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10Lk5BTUVTUEFDRT0idGVzdCIsbz10LkZFVENIX1RFU1RTPSJmZXRjaFRlc3RzIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiTkFNRVNQQUNFIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0L2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIkZFVENIX1RFU1RTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0L2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvY2VlZFdpdGhWYWxpZEl0ZW1zQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wcm9jZWVkV2l0aFZhbGlkSXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZldGNoVGVzdHNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZldGNoVGVzdHNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNlbGVjdFRlc3RzQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zZWxlY3RUZXN0c0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9nZ2xlVGVzdFNlbGVjdGlvbkFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudG9nZ2xlVGVzdFNlbGVjdGlvbkFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidW5zZWxlY3RBbGxUZXN0c0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIudW5zZWxlY3RBbGxUZXN0c0FjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidG9nZ2xlQWxsVGVzdHNBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRvZ2dsZUFsbFRlc3RzQWN0aW9ufX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0ZXN0UmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8udGVzdFJlZHVjZXJ9fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdC9zZWxlY3RvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy52YWxpZGF0aW9uRXJyb3JzU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxhc3RPcGVyYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubGFzdE9wZXJhdGlvblNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZWxlY3RlZFRlc3RzU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnNlbGVjdGVkVGVzdHNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdFBhZ2luYXRpb25TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudGVzdFBhZ2luYXRpb25TZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdHNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudGVzdHNTZWxlY3Rvcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0L3NhZ2FzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInRlc3RTYWdhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkudGVzdFNhZ2FzfX0pO3ZhciBhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3QvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5BTUVTUEFDRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuTkFNRVNQQUNFfX0pfSwiLi9zcmMvY29udHJvbGxlcnMvdGVzdC9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnRlc3RSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9pbmRleC5qcyIpLG89bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSxpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2dyb3VwT3BlcmF0aW9ucy9pbmRleC5qcyIpLGE9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdC9jb25zdGFudHMuanMiKSxsPXQudGVzdFJlZHVjZXI9KDAsci5jb21iaW5lUmVkdWNlcnMpKHt0ZXN0czooMCxvLmZldGNoUmVkdWNlcikoYS5OQU1FU1BBQ0Use2NvbnRlbnRQYXRoOiJjb250ZW50In0pLHBhZ2luYXRpb246KDAscy5wYWdpbmF0aW9uUmVkdWNlcikoYS5OQU1FU1BBQ0UpLGdyb3VwT3BlcmF0aW9uczooMCxpLmdyb3VwT3BlcmF0aW9uc1JlZHVjZXIpKGEuTkFNRVNQQUNFKX0pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsInRlc3RSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0L3JlZHVjZXIuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxuLHIsbz1lLnBheWxvYWQ7cmV0dXJuIGEuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxsLnNlbGVjdCkoYy5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5uZXh0PTUsKDAsbC5zZWxlY3QpKGQubGF1bmNoSWRTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiBuPWUuc2VudCxlLm5leHQ9OCwoMCxsLnNlbGVjdCkoZC5zdWl0ZUlkU2VsZWN0b3IpO2Nhc2UgODpyZXR1cm4gcj1lLnNlbnQsZS5uZXh0PTExLCgwLGwucHV0KSgoMCx1LmZldGNoRGF0YUFjdGlvbikocC5OQU1FU1BBQ0UpKF8uVVJMUy50ZXN0SXRlbXModCxuLHIpLG8pKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxmLHRoaXMpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLGwudGFrZUV2ZXJ5KShwLkZFVENIX1RFU1RTLHIpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sbSx0aGlzKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MiwoMCxsLmFsbCkoW28oKV0pO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0saCx0aGlzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShpKTt0LnRlc3RTYWdhcz1zO3ZhciBsPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LXNhZ2EvZXMvZWZmZWN0cy5qcyIpLHU9bigiLi9zcmMvY29udHJvbGxlcnMvZmV0Y2gvaW5kZXguanMiKSxjPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksXz1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLHA9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdC9jb25zdGFudHMuanMiKSxmPWEuZGVmYXVsdC5tYXJrKHIpLG09YS5kZWZhdWx0Lm1hcmsobyksaD1hLmRlZmF1bHQubWFyayhzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiZ2V0VGVzdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJ3YXRjaEZldGNoVGVzdHMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJ0ZXN0U2FnYXMiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy90ZXN0L3NlbGVjdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC50ZXN0UGFnaW5hdGlvblNlbGVjdG9yPXQudGVzdHNTZWxlY3Rvcj10Lmxhc3RPcGVyYXRpb25TZWxlY3Rvcj10LnZhbGlkYXRpb25FcnJvcnNTZWxlY3Rvcj10LnNlbGVjdGVkVGVzdHNTZWxlY3Rvcj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZS50ZXN0c3x8e319LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkuZ3JvdXBPcGVyYXRpb25zfSxpPXQuc2VsZWN0ZWRUZXN0c1NlbGVjdG9yPSgwLHIuY3JlYXRlU2VsZWN0ZWRJdGVtc1NlbGVjdG9yKShzKSxhPXQudmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yPSgwLHIuY3JlYXRlVmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yKShzKSxsPXQubGFzdE9wZXJhdGlvblNlbGVjdG9yPSgwLHIuY3JlYXRlTGFzdE9wZXJhdGlvblNlbGVjdG9yKShzKSx1PXQudGVzdHNTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKS50ZXN0c3x8W119LGM9dC50ZXN0UGFnaW5hdGlvblNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLnBhZ2luYXRpb259OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJzZWxlY3RlZFRlc3RzU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwidmFsaWRhdGlvbkVycm9yc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImxhc3RPcGVyYXRpb25TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdC9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJ0ZXN0c1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0L3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInRlc3RQYWdpbmF0aW9uU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiZG9tYWluU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiZ3JvdXBPcGVyYXRpb25zU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3Qvc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vYWN0aW9uQ3JlYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVsZXRlSXRlbXNBY3Rpb249dC5zZXRQYWdlTG9hZGluZ0FjdGlvbj10LnJlc3RvcmVQYXRoQWN0aW9uPXQuZmV0Y2hUZXN0SXRlbXNBY3Rpb249dC5zZXRMZXZlbEFjdGlvbj12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvZ3JvdXBPcGVyYXRpb25zL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vYWN0aW9uVmFsaWRhdG9ycy5qcyIpLGk9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vY29uc3RhbnRzLmpzIiksYT10LnNldExldmVsQWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmkuU0VUX0xFVkVMLHBheWxvYWQ6ZX19LGw9dC5mZXRjaFRlc3RJdGVtc0FjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTppLkZFVENIX1RFU1RfSVRFTVMscGF5bG9hZDplfX0sdT10LnJlc3RvcmVQYXRoQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6aS5SRVNUT1JFX1BBVEh9fSxjPXQuc2V0UGFnZUxvYWRpbmdBY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6aS5TRVRfUEFHRV9MT0FESU5HLHBheWxvYWQ6ZX19LGQ9dC5kZWxldGVJdGVtc0FjdGlvbj0oMCxyLmRlZmluZUdyb3VwT3BlcmF0aW9uKShpLk5BTUVTUEFDRSwiZGVsZXRlVGVzdEl0ZW1zIixmdW5jdGlvbihlLHQpe3ZhciBuPXQub25Db25maXJtLHI9dC5oZWFkZXIscz10Lm1haW5Db250ZW50LGk9dC51c2VySWQsYT10LmN1cnJlbnRMYXVuY2gsbD10Lndhcm5pbmcsdT10LmV2ZW50c0luZm87cmV0dXJuKDAsby5zaG93TW9kYWxBY3Rpb24pKHtpZDoiZGVsZXRlSXRlbXNNb2RhbCIsZGF0YTp7aXRlbXM6ZSxvbkNvbmZpcm06bixoZWFkZXI6cixtYWluQ29udGVudDpzLHVzZXJJZDppLGN1cnJlbnRMYXVuY2g6YSx3YXJuaW5nOmwsZXZlbnRzSW5mbzp1fX0pfSxzLnZhbGlkYXRlRGVsZXRlSXRlbSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsInNldExldmVsQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImZldGNoVGVzdEl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsInJlc3RvcmVQYXRoQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsInNldFBhZ2VMb2FkaW5nQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImRlbGV0ZUl0ZW1zQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2FjdGlvblZhbGlkYXRvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudmFsaWRhdGVEZWxldGVJdGVtPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9pbmRleC5qcyIpLHM9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hTdGF0dXNlcy5qcyIpLGk9bigiLi9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL2luZGV4LmpzIiksYT10LnZhbGlkYXRlRGVsZXRlSXRlbT1mdW5jdGlvbihlLHQsbil7dmFyIGE9KDAsci51c2VySW5mb1NlbGVjdG9yKShuKSxsPSgwLHIudXNlckFjY291bnRSb2xlU2VsZWN0b3IpKG4pLHU9KDAsci5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yKShuKSxjPSgwLG8ubGF1bmNoU2VsZWN0b3IpKG4pfHx7fTtyZXR1cm4oMCxpLmNhbkRlbGV0ZVRlc3RJdGVtKShsLHUsYy5vd25lcj09PWEudXNlcklkKT9jLnN0YXR1cyYmYy5zdGF0dXMudG9Mb3dlckNhc2UoKT09PXMuSU5fUFJPR1JFU1M/ImxhdW5jaE5vdEluUHJvZ3Jlc3MiOm51bGw6Im5vdFlvdXJPd25MYXVuY2gifTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJ2YWxpZGF0ZURlbGV0ZUl0ZW0iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2FjdGlvblZhbGlkYXRvcnMuanMiKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5ERUZBVUxUX1NPUlRJTkc9dC5TRVRfUEFHRV9MT0FESU5HPXQuUEFSRU5UX0lURU1TX05BTUVTUEFDRT10Lk5BTUVTUEFDRT10LlJFU1RPUkVfUEFUSD10LkZFVENIX1RFU1RfSVRFTVM9dC5TRVRfTEVWRUw9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvaW5kZXguanMiKSxvPXQuU0VUX0xFVkVMPSJzZXRMZXZlbCIscz10LkZFVENIX1RFU1RfSVRFTVM9ImZldGNoVGVzdEl0ZW1zIixpPXQuUkVTVE9SRV9QQVRIPSJyZXN0b3JlUGF0aCIsYT10Lk5BTUVTUEFDRT0idGVzdEl0ZW0iLGw9dC5QQVJFTlRfSVRFTVNfTkFNRVNQQUNFPWErIi9wYXJlbnRJdGVtcyIsdT10LlNFVF9QQUdFX0xPQURJTkc9YSsiL3NldFBhZ2VMb2FkaW5nIixjPXQuREVGQVVMVF9TT1JUSU5HPSgwLHIuZm9ybWF0U29ydGluZ1N0cmluZykoWyJzdGFydFRpbWUiXSxyLlNPUlRJTkdfQVNDKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiU0VUX0xFVkVMIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJGRVRDSF9URVNUX0lURU1TIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJSRVNUT1JFX1BBVEgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIk5BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiUEFSRU5UX0lURU1TX05BTUVTUEFDRSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiU0VUX1BBR0VfTE9BRElORyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiREVGQVVMVF9TT1JUSU5HIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vcmVkdWNlci5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ0ZXN0SXRlbVJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnRlc3RJdGVtUmVkdWNlcn19KTt2YXIgbz1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9hY3Rpb25DcmVhdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaFRlc3RJdGVtc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZmV0Y2hUZXN0SXRlbXNBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlc3RvcmVQYXRoQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5yZXN0b3JlUGF0aEFjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2V0TGV2ZWxBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnNldExldmVsQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWxldGVJdGVtc0FjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVsZXRlSXRlbXNBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hQYXJlbnRJdGVtcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZmV0Y2hQYXJlbnRJdGVtc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdEl0ZW1zU2FnYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnRlc3RJdGVtc1NhZ2FzfX0pO3ZhciBpPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2NvbnN0YW50cy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTRVRfUEFHRV9MT0FESU5HIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5TRVRfUEFHRV9MT0FESU5HfX0pO3ZhciBhPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsYXVuY2hTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubGF1bmNoU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxldmVsU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmxldmVsU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubG9hZGluZ1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJuYW1lc3BhY2VTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEubmFtZXNwYWNlU2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhcmVudEl0ZW1TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGFyZW50SXRlbVNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJlbnRJdGVtc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXJlbnRJdGVtc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVQYXJlbnRJdGVtc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jcmVhdGVQYXJlbnRJdGVtc1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJicmVhZGNydW1ic1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5icmVhZGNydW1ic1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJuYW1lTGlua1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5uYW1lTGlua1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGF0aXN0aWNzTGlua1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zdGF0aXN0aWNzTGlua1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZlY3RMaW5rU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmVjdExpbmtTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicGFnZUxvYWRpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGFnZUxvYWRpbmdTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNMaXN0Vmlld1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pc0xpc3RWaWV3U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5xdWVyeVBhcmFtZXRlcnNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXRlbXNTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXRlbXNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGVzdENhc2VOYW1lTGlua1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS50ZXN0Q2FzZU5hbWVMaW5rU2VsZWN0b3J9fSl9LCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9sZXZlbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTEVWRUxTPXZvaWQgMDt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoTGV2ZWxzLmpzIiksYT1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0L2luZGV4LmpzIiksbD1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9pbmRleC5qcyIpLHU9bigiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9pbmRleC5qcyIpLGM9dC5MRVZFTFM9KHI9e30sKDAscy5kZWZhdWx0KShyLGkuTEVWRUxfU1VJVEUse29yZGVyOjAsbmFtZXNwYWNlOmwuTkFNRVNQQUNFfSksKDAscy5kZWZhdWx0KShyLGkuTEVWRUxfVEVTVCx7b3JkZXI6MSxuYW1lc3BhY2U6YS5OQU1FU1BBQ0V9KSwoMCxzLmRlZmF1bHQpKHIsaS5MRVZFTF9TVEVQLHtvcmRlcjoyLG5hbWVzcGFjZTp1Lk5BTUVTUEFDRX0pLHIpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkxFVkVMUyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vbGV2ZWxzLmpzIil9KCl9LCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9yZWR1Y2VyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnRlc3RJdGVtUmVkdWNlcj12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgvZXMvaW5kZXguanMiKSxvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xvYWRpbmcvaW5kZXguanMiKSxzPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZldGNoL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9jb25zdGFudHMuanMiKSxhPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGkuU0VUX0xFVkVMOnJldHVybiByO2RlZmF1bHQ6cmV0dXJuIGV9fSxsPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZDtzd2l0Y2gobil7Y2FzZSBpLlNFVF9QQUdFX0xPQURJTkc6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gZX19LHU9dC50ZXN0SXRlbVJlZHVjZXI9KDAsci5jb21iaW5lUmVkdWNlcnMpKHtsZXZlbDphLGxvYWRpbmc6KDAsby5sb2FkaW5nUmVkdWNlcikoaS5OQU1FU1BBQ0UpLHBhZ2VMb2FkaW5nOmwscGFyZW50SXRlbXM6KDAscy5mZXRjaFJlZHVjZXIpKGkuUEFSRU5UX0lURU1TX05BTUVTUEFDRSx7aW5pdGlhbFN0YXRlOltdfSl9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwidGVzdEl0ZW1SZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwibGV2ZWxSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwicGFnZUxvYWRpbmdSZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9yZWR1Y2VyLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHI7cmV0dXJuIGYuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKG8pe2Zvcig7Oylzd2l0Y2goby5wcmV2PW8ubmV4dCl7Y2FzZSAwOnJldHVybiBvLm5leHQ9MiwoMCx2LnNlbGVjdCkoVC5wYXlsb2FkU2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gdD1vLnNlbnQsby5uZXh0PTUsKDAsdi5zZWxlY3QpKFQucGFnZVByb3BlcnRpZXNTZWxlY3Rvcik7Y2FzZSA1OnJldHVybiBuPW8uc2VudCxvLm5leHQ9OCwoMCx2LnNlbGVjdCkoVC50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3IpO2Nhc2UgODpyZXR1cm4gcj1vLnNlbnQsby5uZXh0PTExLCgwLHYucHV0KSgoMCxFLnJlZGlyZWN0KSh7dHlwZTpULlRFU1RfSVRFTV9QQUdFLHBheWxvYWQ6KDAsYi5kZWZhdWx0KSh7fSx0LHt0ZXN0SXRlbUlkczpbZV0uY29uY2F0KCgwLGguZGVmYXVsdCkoci5zbGljZSgxKSkpLmpvaW4oIi8iKX0pLG1ldGE6e3F1ZXJ5Om59fSkpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19LEwsdGhpcyl9ZnVuY3Rpb24gcygpe3ZhciBlO3JldHVybiBmLmRlZmF1bHQud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsKDAsdi5zZWxlY3QpKGoucGFyZW50SXRlbVNlbGVjdG9yKTtjYXNlIDI6aWYoZT10LnNlbnQpe3QubmV4dD01O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA1OnJldHVybiB0Lm5leHQ9NywoMCx2LmNhbGwpKG8sZS5sYXVuY2hJZCk7Y2FzZSA3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSxELHRoaXMpfWZ1bmN0aW9uIGkoKXt2YXIgZSx0LG47cmV0dXJuIGYuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9MiwoMCx2LnNlbGVjdCkoVC50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3IpO2Nhc2UgMjpyZXR1cm4gZT1yLnNlbnQsci5uZXh0PTUsKDAsdi5zZWxlY3QpKEMuYWN0aXZlUHJvamVjdFNlbGVjdG9yKTtjYXNlIDU6cmV0dXJuIHQ9ci5zZW50LG49ZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gMD09PW4/QS5VUkxTLmxhdW5jaCh0LGUpOkEuVVJMUy50ZXN0SXRlbSh0LGUpfSksci5uZXh0PTksKDAsdi5wdXQpKCgwLHkuYnVsa0ZldGNoRGF0YUFjdGlvbikoUy5QQVJFTlRfSVRFTVNfTkFNRVNQQUNFLCEwKShuKSk7Y2FzZSA5OnJldHVybiByLm5leHQ9MTEsKDAsdi50YWtlKShOKFMuUEFSRU5UX0lURU1TX05BTUVTUEFDRSkpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19LHcsdGhpcyl9ZnVuY3Rpb24gYShlKXt2YXIgdCxuLHIsbyxzLGEsbCx1LGMsZCxwLG0saCxnLEUsTCxELHc9ZS5wYXlsb2FkLGs9dm9pZCAwPT09dz97fTp3O3JldHVybiBmLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1rLm9mZnNldHx8MCxlLm5leHQ9MywoMCx2LnNlbGVjdCkoVC5wYXRobmFtZUNoYW5nZWRTZWxlY3Rvcik7Y2FzZSAzOmlmKCEobj1lLnNlbnQpfHxrLm9mZnNldCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUubmV4dD03LCgwLHYucHV0KSgoMCxPLnNldFBhZ2VMb2FkaW5nQWN0aW9uKSghMCkpO2Nhc2UgNzpyZXR1cm4gZS5uZXh0PTksKDAsdi5jYWxsKShpKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSwoMCx2LnNlbGVjdCkoVC50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3IpO2Nhc2UgMTE6cmV0dXJuIHI9ZS5zZW50LG89dD9yLnNsaWNlKDAsci5sZW5ndGgtdCk6cixlLm5leHQ9MTUsKDAsdi5zZWxlY3QpKFQubGF1bmNoSWRTZWxlY3Rvcik7Y2FzZSAxNTpyZXR1cm4gcz1lLnNlbnQsZS5uZXh0PTE4LCgwLHYuc2VsZWN0KShqLmlzTG9zdExhdW5jaFNlbGVjdG9yKTtjYXNlIDE4OmlmKGE9ZS5zZW50LGw9dm9pZCAwLCFhKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIHU9dm9pZCAwLGUucHJldj0yMixlLm5leHQ9MjUsKDAsdi5zZWxlY3QpKCgwLGouY3JlYXRlUGFyZW50SXRlbXNTZWxlY3RvcikodCkpO2Nhc2UgMjU6dT1lLnNlbnQsZS5uZXh0PTMwO2JyZWFrO2Nhc2UgMjg6ZS5wcmV2PTI4LGUudDA9ZS5jYXRjaCgyMik7Y2FzZSAzMDpzPXU/dS5sYXVuY2hJZDpzO2Nhc2UgMzE6cmV0dXJuIG8ubGVuZ3RoPjEmJihsPW9bby5sZW5ndGgtMV0pLGUubmV4dD0zNCwoMCx2LnNlbGVjdCkoQy5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpO2Nhc2UgMzQ6cmV0dXJuIGM9ZS5zZW50LGUubmV4dD0zNywoMCx2LnNlbGVjdCkoai5uYW1lc3BhY2VTZWxlY3Rvcix0KTtjYXNlIDM3OnJldHVybiBkPWUuc2VudCxlLm5leHQ9NDAsKDAsdi5zZWxlY3QpKGoucXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3IsZCk7Y2FzZSA0MDpyZXR1cm4gcD1lLnNlbnQsZS5uZXh0PTQzLCgwLHYuc2VsZWN0KShULnBhZ2VQcm9wZXJ0aWVzU2VsZWN0b3IpO2Nhc2UgNDM6cmV0dXJuIG09ZS5zZW50LGg9ImZpbHRlci5lcS51bmlxdWVJZCIsZz0iZmlsdGVyLmVxLmhhc0NoaWxkcmVuImluIHAsZS5uZXh0PTQ4LCgwLHYucHV0KSgoMCx5LmZldGNoRGF0YUFjdGlvbikoUy5OQU1FU1BBQ0UpKEEuVVJMUy50ZXN0SXRlbXMoYykse3BhcmFtczooMCxiLmRlZmF1bHQpKCgwLF8uZGVmYXVsdCkoeyJmaWx0ZXIuZXEubGF1bmNoSWQiOnMsImZpbHRlci5lcS5wYXJlbnRJZCI6Zz92b2lkIDA6bCwiZmlsdGVyLmxldmVsLnBhdGgiOmx8fGc/dm9pZCAwOjEsImZpbHRlci51bmRlci5wYXRoIjpnP28uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09c30pLmpvaW4oIi4iKTp2b2lkIDB9LGgsbVtoXSkscCl9KSk7Y2FzZSA0ODpyZXR1cm4gZS5uZXh0PTUwLCgwLHYudGFrZSkoTihTLk5BTUVTUEFDRSkpO2Nhc2UgNTA6cmV0dXJuIEU9ZS5zZW50LGUubmV4dD01MywoMCx2LnNlbGVjdCkoai5sZXZlbFNlbGVjdG9yKTtjYXNlIDUzOmlmKEw9ZS5zZW50LEQ9KDAseC5jYWxjdWxhdGVMZXZlbCkoRS5wYXlsb2FkLmNvbnRlbnQpfHxMLCFSLkxFVkVMU1tEXSl7ZS5uZXh0PTU4O2JyZWFrfXJldHVybiBlLm5leHQ9NTgsKDAsdi5wdXQpKCgwLHkuZmV0Y2hTdWNjZXNzQWN0aW9uKShSLkxFVkVMU1tEXS5uYW1lc3BhY2UsRS5wYXlsb2FkKSk7Y2FzZSA1ODpyZXR1cm4gZS5uZXh0PTYwLCgwLHYucHV0KSgoMCxPLnNldExldmVsQWN0aW9uKShEKSk7Y2FzZSA2MDpyZXR1cm4gZS5uZXh0PTYyLCgwLHYucHV0KSgoMCxPLnNldFBhZ2VMb2FkaW5nQWN0aW9uKSghMSkpO2Nhc2UgNjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LE0sdGhpcyxbWzIyLDI4XV0pfWZ1bmN0aW9uIGwoKXtyZXR1cm4gZi5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLCgwLHYudGFrZUV2ZXJ5KShTLlJFU1RPUkVfUEFUSCxzKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGssdGhpcyl9ZnVuY3Rpb24gdSgpe3JldHVybiBmLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsdi50YWtlRXZlcnkpKFMuRkVUQ0hfVEVTVF9JVEVNUyxhKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LEksdGhpcyl9ZnVuY3Rpb24gYygpe3JldHVybiBmLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsKDAsdi5hbGwpKFt1KCksbCgpXSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxQLHRoaXMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxiPXIoZyk7dC5mZXRjaFBhcmVudEl0ZW1zPWksdC50ZXN0SXRlbXNTYWdhcz1jO3ZhciBFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIikseT1uKCIuL3NyYy9jb250cm9sbGVycy9mZXRjaC9pbmRleC5qcyIpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtc2FnYS9lcy9lZmZlY3RzLmpzIiksVD1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEE9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxDPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxPPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2FjdGlvbkNyZWF0b3JzLmpzIiksUz1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9jb25zdGFudHMuanMiKSxSPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2xldmVscy5qcyIpLGo9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIikseD1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS91dGlscy5qcyIpLEw9Zi5kZWZhdWx0Lm1hcmsobyksRD1mLmRlZmF1bHQubWFyayhzKSx3PWYuZGVmYXVsdC5tYXJrKGkpLE09Zi5kZWZhdWx0Lm1hcmsoYSksaz1mLmRlZmF1bHQubWFyayhsKSxJPWYuZGVmYXVsdC5tYXJrKHUpLFA9Zi5kZWZhdWx0Lm1hcmsoYyksTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PXkuRkVUQ0hfU1VDQ0VTUyYmdC5tZXRhJiZ0Lm1ldGEubmFtZXNwYWNlPT09ZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJ1cGRhdGVMYXVuY2hJZCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJyZXN0b3JlUGF0aCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJmZXRjaFBhcmVudEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsImZldGNoVGVzdEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zYWdhcy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIndhdGNoUmVzdG9yZVBhdGgiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NhZ2FzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwid2F0Y2hGZXRjaFRlc3RJdGVtcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJ0ZXN0SXRlbXNTYWdhcyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJjcmVhdGVUZXN0SXRlbUFjdGlvblByZWRpY2F0ZSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2FnYXMuanMiKSl9KCl9LCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudGVzdENhc2VOYW1lTGlua1NlbGVjdG9yPXQuZGVmZWN0TGlua1NlbGVjdG9yPXQuc3RhdGlzdGljc0xpbmtTZWxlY3Rvcj10Lm5hbWVMaW5rU2VsZWN0b3I9dC5icmVhZGNydW1ic1NlbGVjdG9yPXQuaXNMaXN0Vmlld1NlbGVjdG9yPXQuaXRlbXNTZWxlY3Rvcj10LmlzTG9zdExhdW5jaFNlbGVjdG9yPXQubGF1bmNoU2VsZWN0b3I9dC5wYXJlbnRJdGVtU2VsZWN0b3I9dC5jcmVhdGVQYXJlbnRJdGVtc1NlbGVjdG9yPXQucGFyZW50SXRlbXNTZWxlY3Rvcj10LnF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yPXQubmFtZXNwYWNlU2VsZWN0b3I9dC5wYWdlTG9hZGluZ1NlbGVjdG9yPXQubG9hZGluZ1NlbGVjdG9yPXQubGV2ZWxTZWxlY3Rvcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZXNlbGVjdC9saWIvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksZD1uKCIuL3NyYy9jb250cm9sbGVycy9sYXVuY2gvaW5kZXguanMiKSxfPW4oIi4vc3JjL2NvbW1vbi91dGlscy9yb3V0aW5nVXRpbHMuanMiKSxwPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoTGV2ZWxzLmpzIiksZj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIiksbT1uKCIuL3NyYy9jb250cm9sbGVycy9zdWl0ZS9pbmRleC5qcyIpLGg9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdC9pbmRleC5qcyIpLGc9bigiLi9zcmMvY29udHJvbGxlcnMvc3RlcC9pbmRleC5qcyIpLGI9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLEU9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vY29uc3RhbnRzLmpzIikseT1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS91dGlscy5qcyIpLHY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVzdEl0ZW18fHt9fSxUPXQubGV2ZWxTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdihlKS5sZXZlbH0sQT10LmxvYWRpbmdTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdihlKS5sb2FkaW5nfSxDPXQucGFnZUxvYWRpbmdTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gdihlKS5wYWdlTG9hZGluZ30sTz10Lm5hbWVzcGFjZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybigwLHkuZ2V0UXVlcnlOYW1lc3BhY2UpKCgwLHUudGVzdEl0ZW1JZHNBcnJheVNlbGVjdG9yKShlKS5sZW5ndGgtMS10KX0sUz10LnF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yPSgwLHUuY3JlYXRlUXVlcnlQYXJhbWV0ZXJzU2VsZWN0b3IpKHtkZWZhdWx0U29ydGluZzpFLkRFRkFVTFRfU09SVElOR30pLFI9dC5wYXJlbnRJdGVtc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiB2KGUpLnBhcmVudEl0ZW1zfHxbXX0saj10LmNyZWF0ZVBhcmVudEl0ZW1zU2VsZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4oMCxsLmNyZWF0ZVNlbGVjdG9yKShSLGIuZGVmZWN0VHlwZXNTZWxlY3RvcixmdW5jdGlvbih0LG4pe3JldHVybigwLHkubm9ybWFsaXplVGVzdEl0ZW0pKHRbdC5sZW5ndGgtMS1lXSxuKX0pfSx4PXQucGFyZW50SXRlbVNlbGVjdG9yPWooKSxMPXQubGF1bmNoU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIFIoZSlbMF19LEQ9dC5pc0xvc3RMYXVuY2hTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gUihlKS5sZW5ndGg+MSYmIUwoZSl9LHc9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxfLmV4dHJhY3ROYW1lc3BhY2VkUXVlcnkpKGUsdCk7cmV0dXJuIG4mJiJmaWx0ZXIuZXEuaGFzQ2hpbGRyZW4iaW4gbn0sTT10Lml0ZW1zU2VsZWN0b3I9ZnVuY3Rpb24oZSl7c3dpdGNoKFQoZSkpe2Nhc2UgcC5MRVZFTF9TVUlURTpyZXR1cm4oMCxtLnN1aXRlc1NlbGVjdG9yKShlKTtjYXNlIHAuTEVWRUxfVEVTVDpyZXR1cm4oMCxoLnRlc3RzU2VsZWN0b3IpKGUpO2Nhc2UgcC5MRVZFTF9TVEVQOnJldHVybigwLGcuc3RlcHNTZWxlY3RvcikoZSk7ZGVmYXVsdDpyZXR1cm5bXX19LGs9dC5pc0xpc3RWaWV3U2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdygoMCx1LnBhZ2VQcm9wZXJ0aWVzU2VsZWN0b3IpKGUpLHQpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBlLm51bWJlcnx8MD09PWUubnVtYmVyP2UubmFtZSsiICMiK2UubnVtYmVyOmUubmFtZX0sUD10LmJyZWFkY3J1bWJzU2VsZWN0b3I9KDAsbC5jcmVhdGVTZWxlY3RvcikoYy5hY3RpdmVQcm9qZWN0U2VsZWN0b3IsdS5maWx0ZXJJZFNlbGVjdG9yLFIsdS50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3IsdS5wYWdlUHJvcGVydGllc1NlbGVjdG9yLGQuZGVidWdNb2RlU2VsZWN0b3IsZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBsPVtkLk5BTUVTUEFDRV0sYz1be2lkOnQsdGl0bGU6U3RyaW5nKHQpLGxpbms6e3R5cGU6aT91LlBST0pFQ1RfVVNFUkRFQlVHX1BBR0U6dS5QUk9KRUNUX0xBVU5DSEVTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOmUsZmlsdGVySWQ6dH0sbWV0YTp7cXVlcnk6KDAsXy5jb3B5UXVlcnkpKG8sbCl9fSxhY3RpdmU6IXJ8fDA9PT1yLmxlbmd0aH1dO3JldHVybiByJiYwIT09ci5sZW5ndGg/W10uY29uY2F0KGMsKDAsYS5kZWZhdWx0KShuLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBhPyhsLnB1c2goKDAseS5nZXRRdWVyeU5hbWVzcGFjZSkoYykpLHtpZDphLmlkLHRpdGxlOkkoYSksbGluazp7dHlwZTppP3UuUFJPSkVDVF9VU0VSREVCVUdfVEVTVF9JVEVNX1BBR0U6dS5URVNUX0lURU1fUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6ZSxmaWx0ZXJJZDp0LHRlc3RJdGVtSWRzOnImJnIuc2xpY2UoMCxjKzEpLmpvaW4oIi8iKX0sbWV0YTp7cXVlcnk6KDAscy5kZWZhdWx0KSh7fSwoMCxfLmNvcHlRdWVyeSkobyxsKSl9fSxhY3RpdmU6Yz09PW4ubGVuZ3RoLTEsbGlzdFZpZXc6dyhvLCgwLHkuZ2V0UXVlcnlOYW1lc3BhY2UpKGMpKX0pOntpZDpyW2NdfHxjLGVycm9yOiEwLGxvc3Q6MD09PWMmJm4ubGVuZ3RoPjF9fSkpKTpjfSksTj10Lm5hbWVMaW5rU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm93bkxpbmtQYXJhbXMmJnQub3duTGlua1BhcmFtcy5wYXlsb2FkfHwoMCx1LnBheWxvYWRTZWxlY3RvcikoZSkscj10Lm93bkxpbmtQYXJhbXMmJnQudGVzdEl0ZW1JZHN8fCgwLHUudGVzdEl0ZW1JZHNTZWxlY3RvcikoZSksbz0oMCxkLmRlYnVnTW9kZVNlbGVjdG9yKShlKSxpPVQoZSksYT0oMCx1LnBhZ2VQcm9wZXJ0aWVzU2VsZWN0b3IpKGUpLGw9dC5vd25MaW5rUGFyYW1zJiZ0Lm93bkxpbmtQYXJhbXMucGFnZXx8KDAseS5nZXROZXh0UGFnZSkoaSxvKTtyZXR1cm4gdC51bmlxdWVJZCYmKGE9KDAscy5kZWZhdWx0KSh7fSxhLHsiZmlsdGVyLmVxLnVuaXF1ZUlkIjp0LnVuaXF1ZUlkfSkpLCgwLHkuY3JlYXRlTGluaykocix0Lml0ZW1JZCxuLGEsbCl9LEg9dC5zdGF0aXN0aWNzTGlua1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsdS5wYWdlUHJvcGVydGllc1NlbGVjdG9yKShlKSxyPXQub3duTGlua1BhcmFtcyYmdC5vd25MaW5rUGFyYW1zLnBheWxvYWR8fCgwLHUucGF5bG9hZFNlbGVjdG9yKShlKSxvPSgwLHUudGVzdEl0ZW1JZHNTZWxlY3RvcikoZSksaT0oMCxkLmRlYnVnTW9kZVNlbGVjdG9yKShlKSxhPVQoZSksbD10Lm93bkxpbmtQYXJhbXMmJnQub3duTGlua1BhcmFtcy5wYWdlfHwoMCx5LmdldE5leHRQYWdlKShhLGkpO3JldHVybigwLHkuY3JlYXRlTGluaykobyx0Lml0ZW1JZCxyLCgwLHMuZGVmYXVsdCkoe30sbiwoMCxfLmNyZWF0ZU5hbWVzcGFjZWRRdWVyeSkoeyJmaWx0ZXIuZXEuaGFzQ2hpbGRyZW4iOiExLCJmaWx0ZXIuaW4udHlwZSI6cC5MRVZFTF9TVEVQLCJmaWx0ZXIuaW4uc3RhdHVzIjp0LnN0YXR1c2VzJiZ0LnN0YXR1c2VzLmpvaW4oIiwiKX0sKDAseS5nZXRRdWVyeU5hbWVzcGFjZSkoKDAsdS50ZXN0SXRlbUlkc0FycmF5U2VsZWN0b3IpKGUpPygwLHUudGVzdEl0ZW1JZHNBcnJheVNlbGVjdG9yKShlKS5sZW5ndGg6MCkpKSxsKX0sRj10LmRlZmVjdExpbmtTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLHUucGFnZVByb3BlcnRpZXNTZWxlY3RvcikoZSkscj10Lm93bkxpbmtQYXJhbXMmJnQub3duTGlua1BhcmFtcy5wYXlsb2FkfHwoMCx1LnBheWxvYWRTZWxlY3RvcikoZSksbz0oMCx1LnRlc3RJdGVtSWRzU2VsZWN0b3IpKGUpLGk9KDAsZC5kZWJ1Z01vZGVTZWxlY3RvcikoZSksYT1UKGUpLGw9MDsoMCx1LnRlc3RJdGVtSWRzQXJyYXlTZWxlY3RvcikoZSkubGVuZ3RoPj0wJiYobD10Lml0ZW1JZD8oMCx1LnRlc3RJdGVtSWRzQXJyYXlTZWxlY3RvcikoZSkubGVuZ3RoOigwLHUudGVzdEl0ZW1JZHNBcnJheVNlbGVjdG9yKShlKS5sZW5ndGgtMSk7dmFyIGM9dC5vd25MaW5rUGFyYW1zJiZ0Lm93bkxpbmtQYXJhbXMucGFnZXx8KDAseS5nZXROZXh0UGFnZSkoYSxpKTtyZXR1cm4oMCx5LmNyZWF0ZUxpbmspKG8sdC5pdGVtSWQsciwoMCxzLmRlZmF1bHQpKHt9LG4sKDAsXy5jcmVhdGVOYW1lc3BhY2VkUXVlcnkpKHsiZmlsdGVyLmVxLmhhc0NoaWxkcmVuIjohMSwiZmlsdGVyLmluLmlzc3VlVHlwZSI6KDAseS5nZXREZWZlY3RzU3RyaW5nKSh0LmRlZmVjdHMpfSwoMCx5LmdldFF1ZXJ5TmFtZXNwYWNlKShsKSkpLGMpfSxCPXQudGVzdENhc2VOYW1lTGlua1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsYy5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpLHI9e3Byb2plY3RJZDpuLGZpbHRlcklkOmYuQUxMfTtyZXR1cm4oMCx5LmNyZWF0ZUxpbmspKHQudGVzdEl0ZW1JZHMsdC5pdGVtSWQsciwoMCxzLmRlZmF1bHQpKHt9LCgwLF8uY3JlYXRlTmFtZXNwYWNlZFF1ZXJ5KSh7ImZpbHRlci5lcS51bmlxdWVJZCI6dC51bmlxdWVJZCwiZmlsdGVyLmVxLmhhc0NoaWxkcmVuIjohMX0sKDAseS5nZXRRdWVyeU5hbWVzcGFjZSkoMCkpKSx1LlRFU1RfSVRFTV9QQUdFKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFQsImxldmVsU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEEsImxvYWRpbmdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQywicGFnZUxvYWRpbmdTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTywibmFtZXNwYWNlU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFMsInF1ZXJ5UGFyYW1ldGVyc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihSLCJwYXJlbnRJdGVtc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihqLCJjcmVhdGVQYXJlbnRJdGVtc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJwYXJlbnRJdGVtU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEwsImxhdW5jaFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihELCJpc0xvc3RMYXVuY2hTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwiaXRlbXNTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiaXNMaXN0Vmlld1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJicmVhZGNydW1ic1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJuYW1lTGlua1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihILCJzdGF0aXN0aWNzTGlua1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJkZWZlY3RMaW5rU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsInRlc3RDYXNlTmFtZUxpbmtTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodiwiZG9tYWluU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHcsImlzTGlzdFZpZXciLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEksIml0ZW1UaXRsZUZvcm1hdHRlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vc2VsZWN0b3JzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vdXRpbHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubm9ybWFsaXplVGVzdEl0ZW09dC5nZXREZWZlY3RzU3RyaW5nPXQuY3JlYXRlTGluaz10LmdldE5leHRQYWdlPXQuZ2V0UXVlcnlOYW1lc3BhY2U9dC5jYWxjdWxhdGVMZXZlbD12b2lkIDA7dmFyIHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksaT1vKHMpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksbD1vKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxjPW8odSksZD1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLF89bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hMZXZlbHMuanMiKSxwPXIoXyksZj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL21ldGhvZFR5cGVzLmpzIiksbT1yKGYpLGg9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vbGV2ZWxzLmpzIiksZz1mdW5jdGlvbihlKXtyZXR1cm4hcFsiTEVWRUxfIitlXSYmbVtlXT9wLkxFVkVMX1NURVA6ZX0sYj10LmNhbGN1bGF0ZUxldmVsPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiB0LnR5cGU7dmFyIG49Zyh0LnR5cGUpLHI9ZyhlKTtyZXR1cm4gaC5MRVZFTFNbcl0mJmguTEVWRUxTW3JdLm9yZGVyPmguTEVWRUxTW25dLm9yZGVyP246cn0sIiIpfSxFPXQuZ2V0UXVlcnlOYW1lc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIml0ZW0iK2V9LHk9dC5nZXROZXh0UGFnZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09cC5MRVZFTF9TVEVQP3Q/ZC5QUk9KRUNUX1VTRVJERUJVR19MT0dfUEFHRTpkLlBST0pFQ1RfTE9HX1BBR0U6dD9kLlBST0pFQ1RfVVNFUkRFQlVHX1RFU1RfSVRFTV9QQUdFOmQuVEVTVF9JVEVNX1BBR0V9LHY9dC5jcmVhdGVMaW5rPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIHM9ZTtyZXR1cm4gdCYmKHM9ZT9lKyIvIit0OnQpLHt0eXBlOm8scGF5bG9hZDooMCxjLmRlZmF1bHQpKHt9LG4se3Rlc3RJdGVtSWRzOnN9KSxtZXRhOntxdWVyeTpyfX19LFQ9dC5nZXREZWZlY3RzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4idG90YWwiIT09ZX0pLmpvaW4oIiwiKX0sQT10Lm5vcm1hbGl6ZVRlc3RJdGVtPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPWUuc3RhdGlzdGljcyYmZS5zdGF0aXN0aWNzLmRlZmVjdHN8fHt9LHI9KDAsbC5kZWZhdWx0KSh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCkscz1uW29dfHx7fSxhPXRbcl0ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsYy5kZWZhdWx0KSh7fSxlLCgwLGkuZGVmYXVsdCkoe30sdC5sb2NhdG9yLHNbdC5sb2NhdG9yXXx8MCkpfSx7dG90YWw6cy50b3RhbHx8MH0pO3JldHVybigwLGMuZGVmYXVsdCkoe30sZSwoMCxpLmRlZmF1bHQpKHt9LG8sYSkpfSx7fSk7cmV0dXJuKDAsYy5kZWZhdWx0KSh7fSxlLHtzdGF0aXN0aWNzOigwLGMuZGVmYXVsdCkoe30sZS5zdGF0aXN0aWNzfHx7fSx7ZGVmZWN0czpyfSl9KX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImNhbGN1bGF0ZUxldmVsIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsImdldFF1ZXJ5TmFtZXNwYWNlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImdldE5leHRQYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS91dGlscy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsImNyZWF0ZUxpbmsiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiZ2V0RGVmZWN0c1N0cmluZyIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihBLCJub3JtYWxpemVUZXN0SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vdXRpbHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJnZXRJdGVtTGV2ZWwiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL3V0aWxzLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zZXRTdGFydFRpbWVGb3JtYXRBY3Rpb249dC5mZXRjaFVzZXJBY3Rpb249dC5mZXRjaEFwaVRva2VuQWN0aW9uPXQuZ2VuZXJhdGVBcGlUb2tlbkFjdGlvbj10LnNldEFjdGl2ZVByb2plY3RBY3Rpb249dC5zZXRQaG90b1RpbWVTdGFtcEFjdGlvbj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSx1PW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksYz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2NvbnN0YW50cy5qcyIpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmMuRkVUQ0hfVVNFUl9TVUNDRVNTLHBheWxvYWQ6ZX19LHA9dC5zZXRQaG90b1RpbWVTdGFtcEFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpjLlNFVF9QSE9UT19USU1FX1NUQU1QLHBheWxvYWQ6ZX19LGY9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Yy5TRVRfQVBJX1RPS0VOLHBheWxvYWQ6e3R5cGU6ZS50b2tlbl90eXBlLHZhbHVlOmUuYWNjZXNzX3Rva2VufX19LG09dC5zZXRBY3RpdmVQcm9qZWN0QWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPSgwLGQudXNlckluZm9TZWxlY3RvcikobigpKSxvPSgwLGwuZ2V0U3RvcmFnZUl0ZW0pKHIudXNlcklkKyJfc2V0dGluZ3MiKXx8e307KDAsbC5zZXRTdG9yYWdlSXRlbSkoci51c2VySWQrIl9zZXR0aW5ncyIsKDAsYS5kZWZhdWx0KSh7fSxvLHthY3RpdmVQcm9qZWN0OmV9KSksdCh7dHlwZTpjLlNFVF9BQ1RJVkVfUFJPSkVDVCxwYXlsb2FkOmV9KX19LGg9dC5nZW5lcmF0ZUFwaVRva2VuQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybigwLGwuZmV0Y2gpKHUuVVJMUy5hcGlUb2tlbigpLHttZXRob2Q6InBvc3QifSkudGhlbihmdW5jdGlvbih0KXtlKGYodCkpfSl9fSxnPXQuZmV0Y2hBcGlUb2tlbkFjdGlvbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oMCxsLmZldGNoKSh1LlVSTFMuYXBpVG9rZW4oKSx7bWV0aG9kOiJnZXQifSkudGhlbihmdW5jdGlvbih0KXtlKGYodCkpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZShoKCkpfSl9fSxiPXQuZmV0Y2hVc2VyQWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybigwLGwuZmV0Y2gpKHUuVVJMUy51c2VyKCkpLnRoZW4oZnVuY3Rpb24odCl7dmFyIG49KDAsbC5nZXRTdG9yYWdlSXRlbSkodC51c2VySWQrIl9zZXR0aW5ncyIpfHx7fSxyPW4uYWN0aXZlUHJvamVjdCxvPXImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmFzc2lnbmVkUHJvamVjdHMscik/cjooMCxzLmRlZmF1bHQpKHQuYXNzaWduZWRQcm9qZWN0cylbMF07cmV0dXJuIGUoZygpKSxlKF8odCkpLGUobShvKSkse3VzZXI6dCxhY3RpdmVQcm9qZWN0Om99fSl9fSxFPXQuc2V0U3RhcnRUaW1lRm9ybWF0QWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmMuU0VUX1NUQVJUX1RJTUVfRk9STUFULHBheWxvYWQ6ZX19OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJzZXRQaG90b1RpbWVTdGFtcEFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sInNldEFjdGl2ZVByb2plY3RBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJnZW5lcmF0ZUFwaVRva2VuQWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL2FjdGlvbkNyZWF0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiZmV0Y2hBcGlUb2tlbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImZldGNoVXNlckFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsInNldFN0YXJ0VGltZUZvcm1hdEFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImZldGNoVXNlclN1Y2Nlc3NBY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvYWN0aW9uQ3JlYXRvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJzZXRBcGlUb2tlbkFjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9hY3Rpb25DcmVhdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LkZFVENIX1VTRVJfU1VDQ0VTUz0iZmV0Y2hVc2VyU3VjY2VzcyIsbz10LlNFVF9BQ1RJVkVfUFJPSkVDVD0ic2V0QWN0aXZlUHJvamVjdCIscz10LlNFVF9TVEFSVF9USU1FX0ZPUk1BVD0ic2V0U3RhcnRUaW1lRm9ybWF0IixpPXQuU0VUX1BIT1RPX1RJTUVfU1RBTVA9InNldFBob3RvVGltZVN0YW1wIixhPXQuU1RBUlRfVElNRV9GT1JNQVRfUkVMQVRJVkU9InJlbGF0aXZlIixsPXQuU1RBUlRfVElNRV9GT1JNQVRfQUJTT0xVVEU9ImFic29sdXRlIix1PXQuU0VUVElOR1NfSU5JVElBTF9TVEFURT17c3RhcnRUaW1lRm9ybWF0OmEscGhvdG9UaW1lU3RhbXA6RGF0ZS5ub3coKX0sYz10LlNFVF9BUElfVE9LRU49InNldEFwaVRva2VuIjshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIociwiRkVUQ0hfVVNFUl9TVUNDRVNTIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIlNFVF9BQ1RJVkVfUFJPSkVDVCIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJTRVRfU1RBUlRfVElNRV9GT1JNQVQiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwiU0VUX1BIT1RPX1RJTUVfU1RBTVAiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiU1RBUlRfVElNRV9GT1JNQVRfUkVMQVRJVkUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiU1RBUlRfVElNRV9GT1JNQVRfQUJTT0xVVEUiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiU0VUVElOR1NfSU5JVElBTF9TVEFURSIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJTRVRfQVBJX1RPS0VOIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvY29uc3RhbnRzLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNUQVJUX1RJTUVfRk9STUFUX0FCU09MVVRFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TVEFSVF9USU1FX0ZPUk1BVF9BQlNPTFVURX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU1RBUlRfVElNRV9GT1JNQVRfUkVMQVRJVkUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNUQVJUX1RJTUVfRk9STUFUX1JFTEFUSVZFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTRVRfQVBJX1RPS0VOIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TRVRfQVBJX1RPS0VOfX0pO3ZhciBvPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvYWN0aW9uQ3JlYXRvcnMuanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hVc2VyQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaFVzZXJBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldEFjdGl2ZVByb2plY3RBY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnNldEFjdGl2ZVByb2plY3RBY3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldFN0YXJ0VGltZUZvcm1hdEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2V0U3RhcnRUaW1lRm9ybWF0QWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZW5lcmF0ZUFwaVRva2VuQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5nZW5lcmF0ZUFwaVRva2VuQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmZXRjaEFwaVRva2VuQWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5mZXRjaEFwaVRva2VuQWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzZXRQaG90b1RpbWVTdGFtcEFjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2V0UGhvdG9UaW1lU3RhbXBBY3Rpb259fSk7dmFyIHM9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9yZWR1Y2VyLmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInVzZXJSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy51c2VyUmVkdWNlcn19KTt2YXIgaT1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ1c2VySW5mb1NlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51c2VySW5mb1NlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0UHJvamVjdFNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0UHJvamVjdFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhY3RpdmVQcm9qZWN0U2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFjdGl2ZVByb2plY3RTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXNlcklkU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnVzZXJJZFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGFydFRpbWVGb3JtYXRTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuc3RhcnRUaW1lRm9ybWF0U2VsZWN0b3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzQWRtaW5TZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNBZG1pblNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhc3NpZ25lZFByb2plY3RzU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFzc2lnbmVkUHJvamVjdHNTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWN0aXZlUHJvamVjdFJvbGVTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXNlckFjY291bnRSb2xlU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwaG90b1RpbWVTdGFtcFNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5waG90b1RpbWVTdGFtcFNlbGVjdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhcGlUb2tlblZhbHVlU2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmFwaVRva2VuVmFsdWVTZWxlY3Rvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBpVG9rZW5TdHJpbmdTZWxlY3RvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBpVG9rZW5TdHJpbmdTZWxlY3Rvcn19KX0sIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvcmVkdWNlci5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51c2VyUmVkdWNlcj10LmFwaVRva2VuUmVkdWNlcj10LmFjdGl2ZVByb2plY3RSZWR1Y2VyPXQudXNlckluZm9SZWR1Y2VyPXQuc2V0dGluZ3NSZWR1Y2VyPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4L2VzL2luZGV4LmpzIiksaT1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2NvbnN0YW50cy5qcyIpLGE9dC5zZXR0aW5nc1JlZHVjZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06aS5TRVRUSU5HU19JTklUSUFMX1NUQVRFLHQ9YXJndW1lbnRzWzFdLG49dC50eXBlLHI9dC5wYXlsb2FkO3N3aXRjaChuKXtjYXNlIGkuU0VUX1NUQVJUX1RJTUVfRk9STUFUOnJldHVybigwLG8uZGVmYXVsdCkoe30sZSx7c3RhcnRUaW1lRm9ybWF0OnJ9KTtjYXNlIGkuU0VUX1BIT1RPX1RJTUVfU1RBTVA6cmV0dXJuKDAsby5kZWZhdWx0KSh7fSxlLHtwaG90b1RpbWVTdGFtcDpyfSk7ZGVmYXVsdDpyZXR1cm4gZX19LGw9dC51c2VySW5mb1JlZHVjZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHNbMV0sbj10LnR5cGUscj10LnBheWxvYWQ7c3dpdGNoKG4pe2Nhc2UgaS5GRVRDSF9VU0VSX1NVQ0NFU1M6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gZX19LHU9dC5hY3RpdmVQcm9qZWN0UmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIix0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZDtzd2l0Y2gobil7Y2FzZSBpLlNFVF9BQ1RJVkVfUFJPSkVDVDpyZXR1cm4gcjtkZWZhdWx0OnJldHVybiBlfX0sYz10LmFwaVRva2VuUmVkdWNlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWFyZ3VtZW50c1sxXSxuPXQudHlwZSxyPXQucGF5bG9hZDtzd2l0Y2gobil7Y2FzZSBpLlNFVF9BUElfVE9LRU46cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gZX19LGQ9dC51c2VyUmVkdWNlcj0oMCxzLmNvbWJpbmVSZWR1Y2Vycykoe2luZm86bCxhY3RpdmVQcm9qZWN0OnUsc2V0dGluZ3M6YSx0b2tlbjpjfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsInNldHRpbmdzUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwidXNlckluZm9SZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJhY3RpdmVQcm9qZWN0UmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9yZWR1Y2VyLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiYXBpVG9rZW5SZWR1Y2VyIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3JlZHVjZXIuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJ1c2VyUmVkdWNlciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9yZWR1Y2VyLmpzIikpfSgpfSwiLi9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYXBpVG9rZW5TdHJpbmdTZWxlY3Rvcj10LmFwaVRva2VuVHlwZVNlbGVjdG9yPXQuYXBpVG9rZW5WYWx1ZVNlbGVjdG9yPXQuaXNBZG1pblNlbGVjdG9yPXQuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3Rvcj10LnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yPXQuYXNzaWduZWRQcm9qZWN0c1NlbGVjdG9yPXQucGhvdG9UaW1lU3RhbXBTZWxlY3Rvcj10LnN0YXJ0VGltZUZvcm1hdFNlbGVjdG9yPXQuc2V0dGluZ3NTZWxlY3Rvcj10LnVzZXJJZFNlbGVjdG9yPXQuYWN0aXZlUHJvamVjdFNlbGVjdG9yPXQuZGVmYXVsdFByb2plY3RTZWxlY3Rvcj10LnVzZXJJbmZvU2VsZWN0b3I9dm9pZCAwO3ZhciByPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWNjb3VudFJvbGVzLmpzIiksbz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2NvbnN0YW50cy5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudXNlcnx8e319LGk9dC51c2VySW5mb1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLmluZm98fHt9fSxhPXQuZGVmYXVsdFByb2plY3RTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gaShlKS5kZWZhdWx0UHJvamVjdHx8IiJ9LGw9dC5hY3RpdmVQcm9qZWN0U2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSkuYWN0aXZlUHJvamVjdHx8YShlKXx8IiJ9LHU9dC51c2VySWRTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gaShlKS51c2VySWR9LGM9dC5zZXR0aW5nc1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLnNldHRpbmdzfHx7fX0sZD10LnN0YXJ0VGltZUZvcm1hdFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBjKGUpLnN0YXJ0VGltZUZvcm1hdHx8by5TVEFSVF9USU1FX0ZPUk1BVF9SRUxBVElWRX0sXz10LnBob3RvVGltZVN0YW1wU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSkucGhvdG9UaW1lU3RhbXB8fG51bGx9LHA9dC5hc3NpZ25lZFByb2plY3RzU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkuYXNzaWduZWRQcm9qZWN0c3x8e319LGY9dC51c2VyQWNjb3VudFJvbGVTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gaShlKS51c2VyUm9sZXx8IiJ9LG09dC5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWwoZSksbj1wKGUpW3RdO3JldHVybiBuJiZuLnByb2plY3RSb2xlfSxoPXQuaXNBZG1pblNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBpKGUpLnVzZXJSb2xlPT09ci5BRE1JTklTVFJBVE9SfSxnPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpLnRva2VufHwiIn0sYj10LmFwaVRva2VuVmFsdWVTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKS52YWx1ZX0sRT10LmFwaVRva2VuVHlwZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpLnR5cGV9LHk9dC5hcGlUb2tlblN0cmluZ1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBFKGUpKyIgIitiKGUpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaSwidXNlckluZm9TZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJkZWZhdWx0UHJvamVjdFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImFjdGl2ZVByb2plY3RTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJ1c2VySWRTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJzZXR0aW5nc1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsInN0YXJ0VGltZUZvcm1hdFNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sInBob3RvVGltZVN0YW1wU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiYXNzaWduZWRQcm9qZWN0c1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsInVzZXJBY2NvdW50Um9sZVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImFjdGl2ZVByb2plY3RSb2xlU2VsZWN0b3IiLCIvdXNyL3NyYy9hcHAvc3JjL2NvbnRyb2xsZXJzL3VzZXIvc2VsZWN0b3JzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiaXNBZG1pblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsImFwaVRva2VuVmFsdWVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJhcGlUb2tlblR5cGVTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJhcGlUb2tlblN0cmluZ1NlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsInVzZXJTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvY29udHJvbGxlcnMvdXNlci9zZWxlY3RvcnMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJhcGlUb2tlblNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9jb250cm9sbGVycy91c2VyL3NlbGVjdG9ycy5qcyIpKX0oKX0sIi4vc3JjL2luZGV4LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9oaXN0b3J5L2VzL2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9xaGlzdG9yeS9lcy9pbmRleC5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIpO24oIi4vc3JjL2NvbW1vbi9wb2x5ZmlsbHMuanMiKSxuKCIuL25vZGVfbW9kdWxlcy9yZXNldC1jc3MvcmVzZXQuY3NzIiksbigiLi9zcmMvY29tbW9uL2Nzcy9mb250cy9mb250cy5zY3NzIiksbigiLi9zcmMvY29tbW9uL2Nzcy9jb21tb24uc2NzcyIpLG4oIi4vbm9kZV9tb2R1bGVzL2MzL2MzLmNzcyIpO3ZhciBfPW4oIi4vc3JjL2FwcC5qc3giKSxwPXIoXyksZj1uKCIuL3NyYy9zdG9yZS9pbmRleC5qcyIpO2lmKCF0LmVudi5wcm9kdWN0aW9uKXt2YXIgbT0oMCxkLnBhcnNlKShsb2NhdGlvbi5zZWFyY2gse2lnbm9yZVF1ZXJ5UHJlZml4OiEwfSksaD0id2h5RGlkWW91VXBkYXRlQ29tcG9uZW50ImluIG0mJihtLndoeURpZFlvdVVwZGF0ZUNvbXBvbmVudHx8Ii4qIik7aWYoaCl7KDAsbigiLi9ub2RlX21vZHVsZXMvd2h5LWRpZC15b3UtdXBkYXRlL2xpYi9pbmRleC5qcyIpLndoeURpZFlvdVVwZGF0ZSkocy5kZWZhdWx0LHtpbmNsdWRlOm5ldyBSZWdFeHAoaCl9KSxjb25zb2xlLmxvZygiVXNlIGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8/d2h5RGlkWW91VXBkYXRlQ29tcG9uZW50PV5Db21wb25lbnQkIyAod2l0aCByZWdleCBhcyBxdWVyeSB2YWx1ZSkgdG8gY2hlY2sgd2h5IGNlcnRhaW4gY29tcG9uZW50IHJlcmVuZGVyLiIpfX12YXIgZz0oMCxjLmRlZmF1bHQpKCgwLGwuY3JlYXRlSGFzaEhpc3RvcnkpKHtoYXNoVHlwZToibm9zbGFzaCJ9KSxkLnN0cmluZ2lmeSxkLnBhcnNlKSxiPSgwLGYuY29uZmlndXJlU3RvcmUpKGcsd2luZG93LlJFRFVYX1NUQVRFKSxFPWIuc3RvcmUseT1iLmluaXRpYWxEaXNwYXRjaCx2PWZ1bmN0aW9uKGUpeygwLGkucmVuZGVyKShzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChhLlByb3ZpZGVyLHtzdG9yZTpFfSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChlLHtpbml0aWFsRGlzcGF0Y2g6eX0pKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYXBwIikpfTtlLmhvdC5hY2NlcHQoIi4vc3JjL2FwcC5qc3giLGZ1bmN0aW9uKCl7dmFyIGU9bigiLi9zcmMvYXBwLmpzeCIpLmRlZmF1bHQ7dihlKX0pLHYocC5kZWZhdWx0KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywicXVlcnlQYXJzZUhpc3RvcnkiLCIvdXNyL3NyYy9hcHAvc3JjL2luZGV4LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsInN0b3JlIiwiL3Vzci9zcmMvYXBwL3NyYy9pbmRleC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih5LCJpbml0aWFsRGlzcGF0Y2giLCIvdXNyL3NyYy9hcHAvc3JjL2luZGV4LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsInJlcmVuZGVyQXBwIiwiL3Vzci9zcmMvYXBwL3NyYy9pbmRleC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIpKX0sIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5IZWFkZXIvYWRtaW5IZWFkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BZG1pbkhlYWRlcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3Jlc2VydmVkRmlsdGVySWRzLmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9jb25zdGFudHMuanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxOPW4oIi4vc3JjL2xheW91dHMvY29tbW9uL21vYmlsZUhlYWRlci9pbmRleC5qcyIpLEg9bigiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9hZG1pbkhlYWRlci5zY3NzIiksRj1yKEgpLEI9e0FkbWluSGVhZGVyOntkaXNwbGF5TmFtZToiQWRtaW5IZWFkZXIifX0sVT0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluSGVhZGVyL2FkbWluSGVhZGVyLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEc9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9hZG1pbkhlYWRlci5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSx6PXguZGVmYXVsdC5iaW5kKEYuZGVmYXVsdCksVj10LkFkbWluSGVhZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiQWRtaW5IZWFkZXIiKSgobz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVQcm9qZWN0OigwLFAuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKX19LHtsb2dvdXQ6ay5sb2dvdXRBY3Rpb259KSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVByb2plY3Qsbj1lLnNpZGVNZW51T3BlbmVkLHI9ZS5hZG1pbkhlYWRlckNydW1iLG89ZS50b2dnbGVTaWRlTWVudSxzPWUubG9nb3V0O3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaGVhZGVyIix7Y2xhc3NOYW1lOnooImhlYWRlciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLk1vYmlsZUhlYWRlcix7b3BlbmVkOm4sdG9nZ2xlU2lkZU1lbnU6b30pLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiY29udGFpbmVyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoMyIse2NsYXNzTmFtZTp6KCJoZWFkZXItbmFtZSIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBZG1pbkhlYWRlci5oZWFkZXIiLGRlZmF1bHRNZXNzYWdlOiJNYW5hZ2VtZW50IGJvYXJkIn0pLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnooImhlYWRlci1jcnVtYiIpfSxyKSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJhZG1pbi1oZWFkZXItY29udHJvbHMiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5OYXZMaW5rLHtjbGFzc05hbWU6eigiYmFjay10by1wcm9qZWN0IiwiYnRuIiksdG86e3R5cGU6SS5QUk9KRUNUX0xBVU5DSEVTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnQsZmlsdGVySWQ6TS5BTEx9fX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQWRtaW5IZWFkZXIuYnRuVG9Qcm9qZWN0IixkZWZhdWx0TWVzc2FnZToiQmFjayB0byBwcm9qZWN0In0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOnooImxvZ291dCIsImJ0biIpLG9uQ2xpY2s6c30sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQWRtaW5IZWFkZXIuYnRuTG9nb3V0IixkZWZhdWx0TWVzc2FnZToiTG9nb3V0In0pKSkpKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXthY3RpdmVQcm9qZWN0OlIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxzaWRlTWVudU9wZW5lZDpSLmRlZmF1bHQuYm9vbCx0b2dnbGVTaWRlTWVudTpSLmRlZmF1bHQuZnVuYyxhZG1pbkhlYWRlckNydW1iOlIuZGVmYXVsdC5zdHJpbmcsbG9nb3V0OlIuZGVmYXVsdC5mdW5jfSxpLmRlZmF1bHRQcm9wcz17YWRtaW5IZWFkZXJDcnVtYjoiIixzaWRlTWVudU9wZW5lZDohMSxsb2dvdXQ6ZnVuY3Rpb24oKXt9LHRvZ2dsZVNpZGVNZW51OmZ1bmN0aW9uKCl7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJBZG1pbkhlYWRlciIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9hZG1pbkhlYWRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9hZG1pbkhlYWRlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5IZWFkZXIvYWRtaW5IZWFkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2hlYWRlcjoiYWRtaW5IZWFkZXJfX2hlYWRlcl9fX05hemFTIixjb250YWluZXI6ImFkbWluSGVhZGVyX19jb250YWluZXJfX18zZmVvQSIsImhlYWRlci1uYW1lIjoiYWRtaW5IZWFkZXJfX2hlYWRlci1uYW1lX19fM0dTNXAiLCJoZWFkZXItY3J1bWIiOiJhZG1pbkhlYWRlcl9faGVhZGVyLWNydW1iX19fM2NkTnQiLCJhZG1pbi1oZWFkZXItY29udHJvbHMiOiJhZG1pbkhlYWRlcl9fYWRtaW4taGVhZGVyLWNvbnRyb2xzX19fQ0I5LVQiLGJ0bjoiYWRtaW5IZWFkZXJfX2J0bl9fXzJGSjVsIixsb2dvdXQ6ImFkbWluSGVhZGVyX19sb2dvdXRfX19vUlk3eSIsImJhY2stdG8tcHJvamVjdCI6ImFkbWluSGVhZGVyX19iYWNrLXRvLXByb2plY3RfX18xdFZpUyJ9fSwiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkhlYWRlci9hZG1pbkhlYWRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQWRtaW5IZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFkbWluSGVhZGVyfX0pfSwiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkxheW91dC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFkbWluTGF5b3V0PXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2luZGV4LmpzIiksaT1uKCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluSGVhZGVyL2luZGV4LmpzIiksYT1uKCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbmRleC5qcyIpLGw9dC5BZG1pbkxheW91dD1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQocy5MYXlvdXQse0hlYWRlcjppLkFkbWluSGVhZGVyLFNpZGViYXI6YS5BZG1pblNpZGViYXJ9LG4pfTtsLnByb3BUeXBlcz17Y2hpbGRyZW46by5kZWZhdWx0Lm5vZGV9LGwuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJBZG1pbkxheW91dCIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pbkxheW91dC5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2FkbWluU2lkZWJhci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFkbWluU2lkZWJhcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLFI9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx4PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLEw9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvaW5kZXguanMiKSxrPW4oIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2ltZy9wcm9qZWN0cy1pbmxpbmUuc3ZnIiksST1yKGspLFA9bigiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pblNpZGViYXIvaW1nL3VzZXJzLWlubGluZS5zdmciKSxOPXIoUCksSD1uKCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbWcvc2V0dGluZ3MtaW5saW5lLnN2ZyIpLEY9cihIKSxCPW4oIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2ltZy9iYWNrLWlubGluZS5zdmciKSxVPXIoQiksRz1uKCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbWcvcHJvZmlsZS1pbmxpbmUuc3ZnIiksej1yKEcpLFY9e0FkbWluU2lkZWJhcjp7ZGlzcGxheU5hbWU6IkFkbWluU2lkZWJhciJ9fSxXPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2FkbWluU2lkZWJhci5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxZPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2FkbWluU2lkZWJhci5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxxPXQuQWRtaW5TaWRlYmFyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVyhZKHQsZSksZSl9fSgiQWRtaW5TaWRlYmFyIikoKG89KDAsUy5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57YWN0aXZlUHJvamVjdDooMCxSLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSl9fSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuY3JlYXRlVG9wU2lkZWJhckl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jcmVhdGVUb3BTaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jcmVhdGVCb3R0b21TaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19jcmVhdGVCb3R0b21TaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVG9wU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUb3BTaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlVG9wU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUb3BTaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVG9wU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tvbkNsaWNrOnRoaXMucHJvcHMub25DbGlja05hdkJ0bixsaW5rOnt0eXBlOnguUFJPSkVDVFNfUEFHRX0saWNvbjpJLmRlZmF1bHQsbWVzc2FnZTpBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBZG1pblNpZGViYXIuYWxsUHJvamVjdHMiLGRlZmF1bHRNZXNzYWdlOiJQcm9qZWN0cyJ9KX0se29uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrTmF2QnRuLGxpbms6e3R5cGU6eC5BTExfVVNFUlNfUEFHRX0saWNvbjpOLmRlZmF1bHQsbWVzc2FnZTpBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBZG1pblNpZGViYXIuYWxsVXNlcnMiLGRlZmF1bHRNZXNzYWdlOiJBbGwgVXNlcnMifSl9LHtvbkNsaWNrOnRoaXMucHJvcHMub25DbGlja05hdkJ0bixsaW5rOnt0eXBlOnguU0VSVkVSX1NFVFRJTkdTX1BBR0V9LGljb246Ri5kZWZhdWx0LG1lc3NhZ2U6QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoai5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQWRtaW5TaWRlYmFyLnNldHRpbmdzIixkZWZhdWx0TWVzc2FnZToiU2VydmVyIHNldHRpbmdzIn0pfSx7b25DbGljazp0aGlzLnByb3BzLm9uQ2xpY2tOYXZCdG4sbGluazp7dHlwZTp4LlBMVUdJTlNfUEFHRX0saWNvbjpGLmRlZmF1bHQsbWVzc2FnZTpBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBZG1pblNpZGViYXIucGx1Z2lucyIsZGVmYXVsdE1lc3NhZ2U6IlBsdWdpbnMifSl9XX19LHtrZXk6Il9fY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVCb3R0b21TaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVCb3R0b21TaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be29uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrTmF2QnRuLGxpbms6e3R5cGU6eC5QUk9KRUNUX0xBVU5DSEVTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMuYWN0aXZlUHJvamVjdCxmaWx0ZXJJZDpMLkFMTH19LGljb246VS5kZWZhdWx0LG1lc3NhZ2U6QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoai5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQWRtaW5TaWRlYmFyLmJ0blRvUHJvamVjdCIsZGVmYXVsdE1lc3NhZ2U6IkJhY2sgdG8gcHJvamVjdCJ9KX0se29uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrTmF2QnRuLGxpbms6e3R5cGU6eC5VU0VSX1BST0ZJTEVfUEFHRX0saWNvbjp6LmRlZmF1bHQsbWVzc2FnZTpBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChqLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJBZG1pblNpZGViYXIuYnRuUHJvZmlsZSIsZGVmYXVsdE1lc3NhZ2U6IlByb2ZpbGUifSl9XX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZVRvcFNpZGViYXJJdGVtcygpLHQ9dGhpcy5jcmVhdGVCb3R0b21TaWRlYmFySXRlbXMoKTtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5TaWRlYmFyLHt0b3BTaWRlYmFySXRlbXM6ZSxib3R0b21TaWRlYmFySXRlbXM6dH0pfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e29uQ2xpY2tOYXZCdG46dy5kZWZhdWx0LmZ1bmMsYWN0aXZlUHJvamVjdDp3LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXtvbkNsaWNrTmF2QnRuOmZ1bmN0aW9uKCl7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkFkbWluU2lkZWJhciIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pblNpZGViYXIvYWRtaW5TaWRlYmFyLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbWcvYmFjay1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZmlsbD0iI0U5RTlFOSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTQuODg3IDMuODg3TDEzIDJsLTggOCA4IDggMS44ODctMS44ODdMOC43NzMgMTB6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2ltZy9wcm9maWxlLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjRTlFOUU5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxMGE0LjQ5OSA0LjQ5OSAwIDEgMCAwLTkgNC40OTkgNC40OTkgMCAwIDAtNC41IDQuNUM1LjUgNy45OCA3LjUxNCAxMCAxMCAxMHptMCAyLjI1Yy0yLjk5OCAwLTkgMS41MDItOSA0LjVWMTloMTh2LTIuMjVjMC0yLjk5OC02LjAwMi00LjUtOS00LjV6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2ltZy9wcm9qZWN0cy1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAzMCI+PHBhdGggZD0iTTggMjJoMjB2M0g4di0zem0tNiAwaDN2M0gydi0zem02LTZoMjB2M0g4di0zem0tNiAwaDN2M0gydi0zem02LTZoMjB2M0g4di0zem0tNiAwaDN2M0gydi0zem02LTZoMjB2M0g4VjR6TTIgNGgzdjNIMlY0eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbWcvc2V0dGluZ3MtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzAgMjgiPjxwYXRoIGQ9Ik0yOC4wMTUgMTkuMDM4YzAtLjI4NS0uMDI3LS41NjYtLjA2My0uODQzbDEuODgyLTEuNDMzYS40MjQuNDI0IDAgMCAwIC4xMDYtLjU1M2wtMS43NzktMi45OTljLS4xMS0uMTg2LS4zNDItLjI2NC0uNTQyLS4xODZsLTIuMjE1Ljg3YTYuNzk1IDYuNzk1IDAgMCAwLTEuNTAzLS44NTNsLS4zMzMtMi4yOTNhLjQ1NC40NTQgMCAwIDAtLjQ0NS0uMzYzaC0zLjU1OGEuNDQ2LjQ0NiAwIDAgMC0uNDQuMzYzbC0uMzM0IDIuMjkzYTYuNjI3IDYuNjI3IDAgMCAwLTEuNTAzLjg1M2wtMi4yMTUtLjg3YS40NTEuNDUxIDAgMCAwLS41NDIuMTg2bC0xLjc3OSAyLjk5OWEuNDI2LjQyNiAwIDAgMCAuMTA3LjU1M2wxLjg3NiAxLjQzM2E2LjYxMyA2LjYxMyAwIDAgMC0uMDYyLjg0M2MwIC4yODYuMDI3LjU2Ny4wNjIuODQ0bC0xLjg3NiAxLjQzMmEuNDI0LjQyNCAwIDAgMC0uMTA3LjU1NGwxLjc3OSAyLjk5OWEuNDQ2LjQ0NiAwIDAgMCAuNTQyLjE4NmwyLjIxNS0uODdjLjQ1OC4zNDIuOTYuNjMyIDEuNTAzLjg1M2wuMzM0IDIuMjkzYS40NDYuNDQ2IDAgMCAwIC40NC4zNjNoMy41NThjLjIyMiAwIC40MDQtLjE2LjQ0LS4zNjNsLjMzNC0yLjI5M2E2LjYyNyA2LjYyNyAwIDAgMCAxLjUwMy0uODUzbDIuMjE0Ljg3Yy4yLjA3My40MzIgMCAuNTQzLS4xODZsMS43NzktMi45OTlhLjQyNi40MjYgMCAwIDAtLjEwNy0uNTU0bC0xLjg3Ny0xLjQzMmMuMDM2LS4yNzcuMDYzLS41NTguMDYzLS44NDR6bS0xMC43MDcgMEE0LjAzNiA0LjAzNiAwIDAgMSAyMS4zNDYgMTVhNC4wMzYgNC4wMzYgMCAwIDEgNC4wMzkgNC4wMzggNC4wMzYgNC4wMzYgMCAwIDEtNC4wMzkgNC4wMzkgNC4wMzYgNC4wMzYgMCAwIDEtNC4wMzgtNC4wMzl6TTE0LjY1MiA2Ljk2NWE0Ljg1IDQuODUgMCAwIDAgLjA0Ni0uNjE5YzAtLjIxLS4wMi0uNDE2LS4wNDYtLjYxOWwxLjM4LTEuMDVhLjMxLjMxIDAgMCAwIC4wNzgtLjQwNmwtMS4zMDQtMi4xOTlhLjMyNy4zMjcgMCAwIDAtLjM5OC0uMTM2bC0xLjYyNC42MzdhNC45ODMgNC45ODMgMCAwIDAtMS4xMDMtLjYyNUwxMS40MzcuMjY3QS4zMzMuMzMzIDAgMCAwIDExLjExIDBIOC41YS4zMjcuMzI3IDAgMCAwLS4zMjIuMjY3bC0uMjQ1IDEuNjgxYTQuODYgNC44NiAwIDAgMC0xLjEwMi42MjVsLTEuNjI0LS42MzdhLjMzLjMzIDAgMCAwLS4zOTguMTM2TDMuNTA1IDQuMjcxYS4zMTIuMzEyIDAgMCAwIC4wNzkuNDA2bDEuMzc2IDEuMDVhNC44NSA0Ljg1IDAgMCAwLS4wNDYuNjJjMCAuMjA5LjAyLjQxNS4wNDYuNjE4bC0xLjM3NiAxLjA1YS4zMS4zMSAwIDAgMC0uMDc5LjQwNmwxLjMwNSAyLjJhLjMyNy4zMjcgMCAwIDAgLjM5OC4xMzZsMS42MjQtLjYzOGMuMzM2LjI1LjcwNC40NjMgMS4xMDIuNjI1bC4yNDUgMS42ODJjLjAyNi4xNDkuMTYuMjY2LjMyMy4yNjZoMi42MDlhLjMyNy4zMjcgMCAwIDAgLjMyMi0uMjY2bC4yNDUtMS42ODJhNC44NiA0Ljg2IDAgMCAwIDEuMTAyLS42MjVsMS42MjQuNjM4YS4zMy4zMyAwIDAgMCAuMzk4LS4xMzdsMS4zMDUtMi4xOTlhLjMxMi4zMTIgMCAwIDAtLjA3OC0uNDA2bC0xLjM3Ny0xLjA1em0tNC44NDYgMi4xYy0xLjU0NSAwLTIuNzk0LTEuMjE2LTIuNzk0LTIuNzE5czEuMjUtMi43MTkgMi43OTQtMi43MTljMS41NDUgMCAyLjc5NCAxLjIxNiAyLjc5NCAyLjcyIDAgMS41MDItMS4yNSAyLjcxOC0yLjc5NCAyLjcxOHpNNy45NTggMTguOTEyYy4wMi0uMTQ4LjAzNC0uMjk4LjAzNC0uNDUgMC0uMTUzLS4wMTUtLjMwMy0uMDM0LS40NWwxLjE4NC0uNzY0YS4yMjYuMjI2IDAgMCAwIC4wNTctLjI5NmwtLjk0OS0xLjU5OWMtLjA2LS4xLS4xODItLjE0LS4yOS0uMWwtMS4xOC40NjVhMy42MjQgMy42MjQgMCAwIDAtLjgwMi0uNDU1TDUuOCAxNC4wNGEuMjQyLjI0MiAwIDAgMC0uMjM3LS4xOTRIMy42NjVhLjIzOC4yMzggMCAwIDAtLjIzNC4xOTRsLS4xNzggMS4yMjNjLS4yOS4xMTgtLjU1OC4yNy0uODAyLjQ1NWwtMS4xODEtLjQ2NGEuMjQuMjQgMCAwIDAtLjI5LjFsLS45NDggMS41OThjLS4wNi4xLS4wMzMuMjI0LjA1Ny4yOTZsMS4xOC43NjRhMy41MjcgMy41MjcgMCAwIDAtLjAzMi40NWMwIC4xNTIuMDE0LjMwMi4wMzMuNDVsLTEuMTgxLjc2M2EuMjI2LjIyNiAwIDAgMC0uMDU3LjI5NkwuOTggMjEuNTdjLjA1OS4xLjE4Mi4xNC4yODkuMWwxLjE4MS0uNDY1Yy4yNDQuMTgzLjUxMi4zMzcuODAyLjQ1NWwuMTc4IDEuMjIzYS4yMzguMjM4IDAgMCAwIC4yMzQuMTk0aDEuODk4YS4yMzguMjM4IDAgMCAwIC4yMzUtLjE5NGwuMTc4LTEuMjIzYy4yODktLjExOC41NTctLjI3LjgwMS0uNDU1bDEuMTgxLjQ2NGMuMTA3LjA0LjIzIDAgLjI5LS4wOTlsLjk0OS0xLjZhLjIyNy4yMjcgMCAwIDAtLjA1Ny0uMjk1bC0xLjAwMS0uNzYzaC0uMTh6bS01LjIxLS40NDljMC0xLjAwNC44MzQtMS44MTcgMS44NjUtMS44MTcgMS4wMzIgMCAxLjg2Ni44MTMgMS44NjYgMS44MTcgMCAxLjAwNS0uODM0IDEuODE4LTEuODY2IDEuODE4LTEuMDMgMC0xLjg2NS0uODEzLTEuODY1LTEuODE4eiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluU2lkZWJhci9pbWcvdXNlcnMtaW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzAgMzAiPjxwYXRoIGQ9Ik0yNi44NjUgOWMwLTEuNjU3LTEuMTMtMy0yLjc1OC0zLTEuNjI4IDAtMi43ODIgMS4zNDMtMi43ODIgMyAwIDEuNjU4IDEuMTU0IDMgMi43ODIgMyAxLjYyOCAwIDIuNzU4LTEuMzQyIDIuNzU4LTN6bS04LjEzMSA2LjgzOGMxLjEzMi0xLjIgMy44NDQtMS44MDIgNS4zNzMtMS44MDIgMS45NjcgMCA1Ljg5My45OTggNS44OTMgMi45OFYxOS41aC0zLjcxYy0xLjIyOC0xLjg1Ny00LjUyOS0zLjA4LTcuNTU2LTMuNjYyem0tNy40NjggMGMtMy4wMjcuNTgzLTYuMzI4IDEuODA1LTcuNTU1IDMuNjYySDB2LTIuNDg0YzAtMS45ODIgMy45MjYtMi45OCA1Ljg5My0yLjk4IDEuNTI5IDAgNC4yNDEuNjAzIDUuMzczIDEuODAyek04LjcyMiA5YzAgMS42NTgtMS4yMDEgMy0yLjgzIDMtMS42MjcgMC0yLjgxNy0xLjM0Mi0yLjgxNy0zIDAtMS42NTcgMS4xOS0zIDIuODE4LTNDNy41MiA2IDguNzIyIDcuMzQzIDguNzIyIDl6TTE1IDE1LjY0M2E0LjgyIDQuODIgMCAwIDEtNC44MjEtNC44MjJBNC44MiA0LjgyIDAgMCAxIDE1IDZhNC44MiA0LjgyIDAgMCAxIDQuODIxIDQuODIxQTQuODIgNC44MiAwIDAgMSAxNSAxNS42NDN6bS05LjAwNyA3LjIzMmMwLTMuMjA2IDUuNzg5LTQuODIxIDkuMDA3LTQuODIxczkuMDIyIDEuNjE1IDkuMDIyIDQuODIxdjIuNjMySDUuOTkydi0yLjYzMnoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvbGF5b3V0cy9hZG1pbkxheW91dC9hZG1pblNpZGViYXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2xheW91dHMvYWRtaW5MYXlvdXQvYWRtaW5TaWRlYmFyL2FkbWluU2lkZWJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQWRtaW5TaWRlYmFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BZG1pblNpZGViYXJ9fSl9LCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9sYXlvdXRzL2FkbWluTGF5b3V0L2FkbWluTGF5b3V0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBZG1pbkxheW91dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQWRtaW5MYXlvdXR9fSl9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvYXBwSGVhZGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQXBwSGVhZGVyPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLFU9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vbW9iaWxlSGVhZGVyL2luZGV4LmpzIiksRz1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvcHJvamVjdFNlbGVjdG9yL2luZGV4LmpzIiksej1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvdXNlckJsb2NrL2luZGV4LmpzIiksVj1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvYXBwSGVhZGVyLnNjc3MiKSxXPXIoViksWT17QXBwSGVhZGVyOntkaXNwbGF5TmFtZToiQXBwSGVhZGVyIn19LHE9KDAsai5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL2FwcEhlYWRlci5qc3giLGNvbXBvbmVudHM6WSxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxLPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9hcHBIZWFkZXIuanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksWD1QLmRlZmF1bHQuYmluZChXLmRlZmF1bHQpLCQ9dC5BcHBIZWFkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBxKEsodCxlKSxlKX19KCJBcHBIZWFkZXIiKSgobz0oMCxNLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnt1c2VyOigwLEgudXNlckluZm9TZWxlY3RvcikoZSksYWN0aXZlUHJvamVjdDooMCxILmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSksYXNzaWduZWRQcm9qZWN0czooMCxILmFzc2lnbmVkUHJvamVjdHNTZWxlY3RvcikoZSksYWNjb3VudFJvbGU6KDAsSC51c2VyQWNjb3VudFJvbGVTZWxlY3RvcikoZSksdXNlclJvbGU6KDAsSC5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yKShlKX19KSxzPSgwLHcuZGVmYXVsdCkoKSxvKGk9cygobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGIuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLm9uQ2xpY2tMaW5rPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChlKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuc2lkZU1lbnVPcGVuZWQscj10LnVzZXIsbz10LnRvZ2dsZVNpZGVNZW51LHM9dC5hY3RpdmVQcm9qZWN0LGk9dC5hc3NpZ25lZFByb2plY3RzLGE9dC5hY2NvdW50Um9sZSxsPXQudXNlclJvbGU7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoZWFkZXIiLHtjbGFzc05hbWU6WCgiaGVhZGVyIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuTW9iaWxlSGVhZGVyLHtvcGVuZWQ6bix0b2dnbGVTaWRlTWVudTpvfSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpYKCJwcm9qZWN0cy1ibG9jayIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLlByb2plY3RTZWxlY3Rvcix7cHJvamVjdHM6KDAsYy5kZWZhdWx0KShpKS5zb3J0KCksYWN0aXZlUHJvamVjdDpzfSkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WCgic2VwYXJhdG9yIil9KSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlgoIm5hdi1idG5zLWJsb2NrIil9LCgwLEYuY2FuU2VlTWVtYmVycykoYSxsKSYmUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5OYXZMaW5rLHt0bzp7dHlwZTpCLlBST0pFQ1RfTUVNQkVSU19QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDpzfX0sY2xhc3NOYW1lOlgoIm5hdi1idG4iLCJtZW1iZXJzLWJ0biIpLGFjdGl2ZUNsYXNzTmFtZTpYKCJhY3RpdmUiKSxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUub25DbGlja0xpbmsoTi5IRUFERVJfRVZFTlRTLkNMSUNLX01FTUJFUlNfQlROKX19KSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLk5hdkxpbmsse3RvOnt0eXBlOkIuUFJPSkVDVF9TRVRUSU5HU19QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDpzfX0sY2xhc3NOYW1lOlgoIm5hdi1idG4iLCJzZXR0aW5ncy1idG4iKSxhY3RpdmVDbGFzc05hbWU6WCgiYWN0aXZlIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLm9uQ2xpY2tMaW5rKE4uSEVBREVSX0VWRU5UUy5DTElDS19TRVRUSU5HU19CVE4pfX0pKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LlVzZXJCbG9jayx7dXNlcjpyfSkpfX1dKSx0fShPLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2FjdGl2ZVByb2plY3Q6TC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHVzZXI6TC5kZWZhdWx0Lm9iamVjdCxhc3NpZ25lZFByb2plY3RzOkwuZGVmYXVsdC5vYmplY3Qsc2lkZU1lbnVPcGVuZWQ6TC5kZWZhdWx0LmJvb2wsdG9nZ2xlU2lkZU1lbnU6TC5kZWZhdWx0LmZ1bmMsYWNjb3VudFJvbGU6TC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHVzZXJSb2xlOkwuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx0cmFja2luZzpMLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6TC5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOkwuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sYS5kZWZhdWx0UHJvcHM9e3VzZXI6e30sYXNzaWduZWRQcm9qZWN0czp7fSxzaWRlTWVudU9wZW5lZDohMSx0b2dnbGVTaWRlTWVudTpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigkLCJBcHBIZWFkZXIiLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9hcHBIZWFkZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9hcHBIZWFkZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvYXBwSGVhZGVyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtoZWFkZXI6ImFwcEhlYWRlcl9faGVhZGVyX19fazRCQjciLCJwcm9qZWN0cy1ibG9jayI6ImFwcEhlYWRlcl9fcHJvamVjdHMtYmxvY2tfX19PcEpneCIsc2VwYXJhdG9yOiJhcHBIZWFkZXJfX3NlcGFyYXRvcl9fXzFLa2M5IiwibmF2LWJ0bnMtYmxvY2siOiJhcHBIZWFkZXJfX25hdi1idG5zLWJsb2NrX19fM0NYNzEiLCJuYXYtYnRuIjoiYXBwSGVhZGVyX19uYXYtYnRuX19fMkplUkgiLCJtZW1iZXJzLWJ0biI6ImFwcEhlYWRlcl9fbWVtYmVycy1idG5fX19tYlI0cSIsYWN0aXZlOiJhcHBIZWFkZXJfX2FjdGl2ZV9fX3o2b3BSIiwic2V0dGluZ3MtYnRuIjoiYXBwSGVhZGVyX19zZXR0aW5ncy1idG5fX18xWTFZSyJ9fSwiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvYXBwSGVhZGVyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBcHBIZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFwcEhlYWRlcn19KX0sIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9wcm9qZWN0U2VsZWN0b3IvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9wcm9qZWN0U2VsZWN0b3IvcHJvamVjdFNlbGVjdG9yLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQcm9qZWN0U2VsZWN0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlByb2plY3RTZWxlY3Rvcn19KX0sIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9wcm9qZWN0U2VsZWN0b3IvcHJvamVjdFNlbGVjdG9yLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUHJvamVjdFNlbGVjdG9yPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9tYXAuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3Njcm9sbFdyYXBwZXIvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLEg9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3Byb2plY3RTZWxlY3Rvci9wcm9qZWN0U2VsZWN0b3Iuc2NzcyIpLEY9cihIKSxCPXtQcm9qZWN0U2VsZWN0b3I6e2Rpc3BsYXlOYW1lOiJQcm9qZWN0U2VsZWN0b3IifX0sVT0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvcHJvamVjdFNlbGVjdG9yL3Byb2plY3RTZWxlY3Rvci5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxHPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9wcm9qZWN0U2VsZWN0b3IvcHJvamVjdFNlbGVjdG9yLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLHo9eC5kZWZhdWx0LmJpbmQoRi5kZWZhdWx0KSxWPXQuUHJvamVjdFNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiUHJvamVjdFNlbGVjdG9yIikoKG89KDAsRC5kZWZhdWx0KSgpKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtvcGVuZWQ6ITF9LHIub25DbGlja1Byb2plY3ROYW1lPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrUHJvamVjdE5hbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudG9nZ2xlU2hvd0xpc3Q9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZVNob3dMaXN0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZU91dHNpZGVDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZVNob3dMaXN0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVTaG93TGlzdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1Byb2plY3ROYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrUHJvamVjdE5hbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2ssITEpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLCExKX19LHtrZXk6Il9fb25DbGlja1Byb2plY3ROYW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrUHJvamVjdE5hbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tQcm9qZWN0TmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1Byb2plY3ROYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrUHJvamVjdE5hbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KEkuSEVBREVSX0VWRU5UUy5DTElDS19QUk9KRUNUX05BTUVfTElOSyksZS5zdG9wUHJvcGFnYXRpb24oKX19LHtrZXk6Il9fdG9nZ2xlU2hvd0xpc3RfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZVNob3dMaXN0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVTaG93TGlzdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlU2hvd0xpc3RfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZVNob3dMaXN0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KEkuSEVBREVSX0VWRU5UUy5DTElDS19QUk9KRUNUX0RST1BET1dOKSx0aGlzLnNldFN0YXRlKHtvcGVuZWQ6IXRoaXMuc3RhdGUub3BlbmVkfSl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubm9kZSYmIXRoaXMubm9kZS5jb250YWlucyhlLnRhcmdldCkmJnRoaXMuc3RhdGUub3BlbmVkJiZ0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmZ1bmN0aW9uKHQpe2Uubm9kZT10fSxjbGFzc05hbWU6eigicHJvamVjdC1zZWxlY3RvciIpLG9uQ2xpY2s6dGhpcy50b2dnbGVTaG93TGlzdH0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJjdXJyZW50LXByb2plY3QtYmxvY2siKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJjdXJyZW50LXByb2plY3QtbmFtZSIpfSx0aGlzLnByb3BzLmFjdGl2ZVByb2plY3QpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eih7InNob3ctbGlzdC1pY29uIjohMCwidHVybmVkLW92ZXIiOnRoaXMuc3RhdGUub3BlbmVkfSl9KSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KHsicHJvamVjdHMtbGlzdCI6ITAsc2hvd246dGhpcy5zdGF0ZS5vcGVuZWR9KX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5TY3JvbGxXcmFwcGVyLHthdXRvSGVpZ2h0OiEwLGF1dG9IZWlnaHRNYXg6NjAwfSwoMCx1LmRlZmF1bHQpKHRoaXMucHJvcHMucHJvamVjdHMsZnVuY3Rpb24odCl7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuTmF2TGluayx7dG86e3R5cGU6Ti5QUk9KRUNUX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnR9fSxrZXk6dCxjbGFzc05hbWU6eigicHJvamVjdC1saXN0LWl0ZW0iKSxhY3RpdmVDbGFzc05hbWU6eigiYWN0aXZlIiksb25DbGljazplLm9uQ2xpY2tQcm9qZWN0TmFtZX0sdCl9KSkpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtwcm9qZWN0czprLmRlZmF1bHQuYXJyYXlPZihrLmRlZmF1bHQuc3RyaW5nKSxhY3RpdmVQcm9qZWN0OmsuZGVmYXVsdC5zdHJpbmcsdHJhY2tpbmc6ay5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OmsuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTprLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXtwcm9qZWN0czpbXSxhY3RpdmVQcm9qZWN0OiIifSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIlByb2plY3RTZWxlY3RvciIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3Byb2plY3RTZWxlY3Rvci9wcm9qZWN0U2VsZWN0b3IuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci9wcm9qZWN0U2VsZWN0b3IvcHJvamVjdFNlbGVjdG9yLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3Byb2plY3RTZWxlY3Rvci9wcm9qZWN0U2VsZWN0b3Iuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJwcm9qZWN0LXNlbGVjdG9yIjoicHJvamVjdFNlbGVjdG9yX19wcm9qZWN0LXNlbGVjdG9yX19fMVVlaVciLCJjdXJyZW50LXByb2plY3QtYmxvY2siOiJwcm9qZWN0U2VsZWN0b3JfX2N1cnJlbnQtcHJvamVjdC1ibG9ja19fXzFFVUZWIiwiY3VycmVudC1wcm9qZWN0LW5hbWUiOiJwcm9qZWN0U2VsZWN0b3JfX2N1cnJlbnQtcHJvamVjdC1uYW1lX19fMm1sQV8iLCJzaG93LWxpc3QtaWNvbiI6InByb2plY3RTZWxlY3Rvcl9fc2hvdy1saXN0LWljb25fX19zSFRtUiIsInR1cm5lZC1vdmVyIjoicHJvamVjdFNlbGVjdG9yX190dXJuZWQtb3Zlcl9fX2Yzak5jIiwicHJvamVjdHMtbGlzdCI6InByb2plY3RTZWxlY3Rvcl9fcHJvamVjdHMtbGlzdF9fXzhIOXZvIixzaG93bjoicHJvamVjdFNlbGVjdG9yX19zaG93bl9fX21Vb2FDIiwicHJvamVjdC1saXN0LWl0ZW0iOiJwcm9qZWN0U2VsZWN0b3JfX3Byb2plY3QtbGlzdC1pdGVtX19fMUR1N3AiLGFjdGl2ZToicHJvamVjdFNlbGVjdG9yX19hY3RpdmVfX18xb3ZnUSJ9fSwiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3VzZXJCbG9jay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3VzZXJCbG9jay91c2VyQmxvY2suanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVzZXJCbG9jayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuVXNlckJsb2NrfX0pfSwiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3VzZXJCbG9jay91c2VyQmxvY2suanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlVzZXJCbG9jaz12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGo9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLHg9bigiLi9zcmMvY29udHJvbGxlcnMvYXV0aC9pbmRleC5qcyIpLEw9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksRD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci1saW5rL2Rpc3QvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvYWNjb3VudFJvbGVzLmpzIiksST1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLFA9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwSGVhZGVyL3VzZXJCbG9jay91c2VyQmxvY2suc2NzcyIpLE49cihQKSxIPUMuZGVmYXVsdC5iaW5kKE4uZGVmYXVsdCksRj10LlVzZXJCbG9jaz0obz0oMCx3LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnt1c2VyOigwLGoudXNlckluZm9TZWxlY3RvcikoZSkscGhvdG9UaW1lU3RhbXA6KDAsai5waG90b1RpbWVTdGFtcFNlbGVjdG9yKShlKX19LHtsb2dvdXQ6eC5sb2dvdXRBY3Rpb259KSxzPSgwLFQuZGVmYXVsdCkoKSxvKGk9cygobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxfLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGguZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXttZW51T3BlbmVkOiExfSxyLm9uQ2xpY2tMaW5rPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkNsaWNrTG9nb3V0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrTG9nb3V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZU91dHNpZGVDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnRvZ2dsZU1lbnU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZU1lbnVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxoLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsYi5kZWZhdWx0KSh0LGUpLCgwLGYuZGVmYXVsdCkodCxbe2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLCExKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZU91dHNpZGVDbGljaywhMSl9fSx7a2V5OiJfX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChlKX19LHtrZXk6Il9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0xvZ291dF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMubG9nb3V0KCksdGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KEQuSEVBREVSX0VWRU5UUy5DTElDS19MT0dPVVRfTElOSyl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGUmJiF0aGlzLm5vZGUuY29udGFpbnMoZS50YXJnZXQpJiZ0aGlzLnN0YXRlLm1lbnVPcGVuZWQmJnRoaXMuc2V0U3RhdGUoe21lbnVPcGVuZWQ6ITF9KX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe21lbnVPcGVuZWQ6IXRoaXMuc3RhdGUubWVudU9wZW5lZH0pLCF0aGlzLnN0YXRlLm1lbnVPcGVuZWQmJnRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChELkhFQURFUl9FVkVOVFMuQ0xJQ0tfUFJPRklMRV9EUk9QRE9XTil9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH0sY2xhc3NOYW1lOkgoInVzZXItYmxvY2siKSxvbkNsaWNrOnRoaXMudG9nZ2xlTWVudX0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJ1c2VyLXdyYXBwZXIiKX0sdGhpcy5wcm9wcy51c2VyLnVzZXJSb2xlPT09ay5BRE1JTklTVFJBVE9SJiZ5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkgoImFkbWluLWJhZGdlIil9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFIuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlVzZXJCbG9jay5hZG1pbkJhZGdlIixkZWZhdWx0TWVzc2FnZToiYWRtaW4ifSkpLHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SCgidXNlcm5hbWUiKX0sdGhpcy5wcm9wcy51c2VyLnVzZXJJZCkpLHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SCgiYXZhdGFyLXdyYXBwZXIiKX0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse2NsYXNzTmFtZTpIKCJhdmF0YXIiKSxzcmM6SS5VUkxTLmRhdGFQaG90byh0aGlzLnByb3BzLnBob3RvVGltZVN0YW1wKSxhbHQ6ImF2YXRhciJ9KSkseS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJtZW51LWljb24iLHtmbGlwcGVkOnRoaXMuc3RhdGUubWVudU9wZW5lZH0pfSkseS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJtZW51Iix7b3BlbmVkOnRoaXMuc3RhdGUubWVudU9wZW5lZH0pfSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLk5hdkxpbmsse3RvOnt0eXBlOkwuQVBJX1BBR0V9LGNsYXNzTmFtZTpIKCJtZW51LWl0ZW0iKSxhY3RpdmVDbGFzc05hbWU6SCgiYWN0aXZlIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLm9uQ2xpY2tMaW5rKEQuSEVBREVSX0VWRU5UUy5DTElDS19BUElfTElOSyl9fSwiQVBJIiksdGhpcy5wcm9wcy51c2VyLnVzZXJSb2xlPT09ay5BRE1JTklTVFJBVE9SJiZ5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLk5hdkxpbmsse3RvOnt0eXBlOkwuQURNSU5JU1RSQVRFX1BBR0V9LGNsYXNzTmFtZTpIKCJtZW51LWl0ZW0iKSxhY3RpdmVDbGFzc05hbWU6SCgiYWN0aXZlIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLm9uQ2xpY2tMaW5rKEQuSEVBREVSX0VWRU5UUy5DTElDS19BRE1JTklTVFJBVEVfTElOSyl9fSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChSLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJVc2VyQmxvY2suYWRtaW5pc3RyYXRlIixkZWZhdWx0TWVzc2FnZToiQWRtaW5pc3RyYXRlIn0pKSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLk5hdkxpbmsse3RvOnt0eXBlOkwuVVNFUl9QUk9GSUxFX1BBR0V9LGNsYXNzTmFtZTpIKCJtZW51LWl0ZW0iKSxhY3RpdmVDbGFzc05hbWU6SCgiYWN0aXZlIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoRC5IRUFERVJfRVZFTlRTLkNMSUNLX1BST0ZJTEVfTElOSyl9fSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChSLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJVc2VyQmxvY2sucHJvZmlsZSIsZGVmYXVsdE1lc3NhZ2U6IlByb2ZpbGUifSkpLHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SCgibWVudS1pdGVtIiksb25DbGljazp0aGlzLm9uQ2xpY2tMb2dvdXR9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFIuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlVzZXJCbG9jay5sb2dvdXQiLGRlZmF1bHRNZXNzYWdlOiJMb2dvdXQifSkpKSl9fV0pLHR9KEUuUHVyZUNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2xvZ291dDpTLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHVzZXI6Uy5kZWZhdWx0Lm9iamVjdCxwaG90b1RpbWVTdGFtcDpTLmRlZmF1bHQubnVtYmVyLHRyYWNraW5nOlMuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpTLmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6Uy5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxhLmRlZmF1bHRQcm9wcz17dXNlcjp7fSxwaG90b1RpbWVTdGFtcDpudWxsfSxpPWwpKXx8aSl8fGkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJVc2VyQmxvY2siLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcEhlYWRlci91c2VyQmxvY2svdXNlckJsb2NrLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvdXNlckJsb2NrL3VzZXJCbG9jay5qc3giKSl9KCl9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvdXNlckJsb2NrL3VzZXJCbG9jay5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InVzZXItYmxvY2siOiJ1c2VyQmxvY2tfX3VzZXItYmxvY2tfX18zY1Y5WCIsInVzZXItd3JhcHBlciI6InVzZXJCbG9ja19fdXNlci13cmFwcGVyX19fMWpBcGIiLCJhZG1pbi1iYWRnZSI6InVzZXJCbG9ja19fYWRtaW4tYmFkZ2VfX18xa2tkTiIsdXNlcm5hbWU6InVzZXJCbG9ja19fdXNlcm5hbWVfX18yWmtJViIsImF2YXRhci13cmFwcGVyIjoidXNlckJsb2NrX19hdmF0YXItd3JhcHBlcl9fX01xZV9jIixhdmF0YXI6InVzZXJCbG9ja19fYXZhdGFyX19fZ0hrOUciLCJtZW51LWljb24iOiJ1c2VyQmxvY2tfX21lbnUtaWNvbl9fX183RzNHIixmbGlwcGVkOiJ1c2VyQmxvY2tfX2ZsaXBwZWRfX18xVXFFMiIsbWVudToidXNlckJsb2NrX19tZW51X19feFZGU3UiLG9wZW5lZDoidXNlckJsb2NrX19vcGVuZWRfX18ydWpUciIsIm1lbnUtaXRlbSI6InVzZXJCbG9ja19fbWVudS1pdGVtX19fNkZydWYiLGFjdGl2ZToidXNlckJsb2NrX19hY3RpdmVfX18xeVBCeiJ9fSwiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwTGF5b3V0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQXBwTGF5b3V0PXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2luZGV4LmpzIiksaT1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBIZWFkZXIvaW5kZXguanMiKSxhPW4oIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvaW5kZXguanMiKSxsPXQuQXBwTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIGUuY3JlYXRlRWxlbWVudChzLkxheW91dCx7SGVhZGVyOmkuQXBwSGVhZGVyLFNpZGViYXI6YS5BcHBTaWRlYmFyfSxuKX07bC5wcm9wVHlwZXM9e2NoaWxkcmVuOm8uZGVmYXVsdC5ub2RlfSxsLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46bnVsbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQXBwTGF5b3V0IiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBMYXlvdXQuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2FwcFNpZGViYXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BcHBTaWRlYmFyPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEk9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxQPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcmVzZXJ2ZWRGaWx0ZXJJZHMuanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2NvbnN0YW50cy5qcyIpLEg9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vc2lkZWJhci9pbmRleC5qcyIpLEY9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9pbWcvZGFzaGJvYXJkLWljb24taW5saW5lLnN2ZyIpLEI9cihGKSxVPW4oIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvaW1nL2xhdW5jaGVzLWljb24taW5saW5lLnN2ZyIpLEc9cihVKSx6PW4oIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvaW1nL2ZpbHRlcnMtaWNvbi1pbmxpbmUuc3ZnIiksVj1yKHopLFc9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9pbWcvZGVidWctaWNvbi1pbmxpbmUuc3ZnIiksWT1yKFcpLHE9bigiLi9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9pbWcvcHJvZmlsZS1pY29uLWlubGluZS5zdmciKSxLPXIocSksWD1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9hZG1pbmlzdHJhdGUtaWNvbi1pbmxpbmUuc3ZnIiksJD1yKFgpLFE9e0FwcFNpZGViYXI6e2Rpc3BsYXlOYW1lOiJBcHBTaWRlYmFyIn19LEo9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9hcHBTaWRlYmFyLmpzeCIsY29tcG9uZW50czpRLGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLFo9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9hcHBTaWRlYmFyLmpzeCIsY29tcG9uZW50czpRLGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLGVlPXQuQXBwU2lkZWJhcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEooWih0LGUpLGUpfX0oIkFwcFNpZGViYXIiKSgobz0oMCxSLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVQcm9qZWN0OigwLHcuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSxwcm9qZWN0Um9sZTooMCx3LmFjdGl2ZVByb2plY3RSb2xlU2VsZWN0b3IpKGUpfX0pLHM9KDAsRC5kZWZhdWx0KSgpLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25DbGlja0J1dHRvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jcmVhdGVUb3BTaWRlYmFySXRlbXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jcmVhdGVCb3R0b21TaWRlYmFySXRlbXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGguZGVmYXVsdCkocixvKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJfX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUb3BTaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0J1dHRvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2xpY2tOYXZCdG4oKSx0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoZSl9fSx7a2V5OiJfX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlVG9wU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUb3BTaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVRvcFNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVG9wU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm5be29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkNsaWNrQnV0dG9uKE0uU0lERUJBUl9FVkVOVFMuQ0xJQ0tfREFTSEJPQVJEX0JUTil9LGxpbms6e3R5cGU6Ti5QUk9KRUNUX0RBU0hCT0FSRF9QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDp0aGlzLnByb3BzLmFjdGl2ZVByb2plY3R9fSxpY29uOkIuZGVmYXVsdCxtZXNzYWdlOkMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlNpZGViYXIuZGFzaGJvYXJkc0J0biIsZGVmYXVsdE1lc3NhZ2U6IkRhc2hib2FyZCJ9KX0se29uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrTmF2QnRuLGxpbms6e3R5cGU6Ti5MQVVOQ0hFU19QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDp0aGlzLnByb3BzLmFjdGl2ZVByb2plY3R9fSxpY29uOkcuZGVmYXVsdCxtZXNzYWdlOkMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlNpZGViYXIubGF1bmNoZXNCdG4iLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2hlcyJ9KX0se29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkNsaWNrQnV0dG9uKE0uU0lERUJBUl9FVkVOVFMuQ0xJQ0tfRklMVEVSU19CVE4pfSxsaW5rOnt0eXBlOk4uUFJPSkVDVF9GSUxURVJTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMuYWN0aXZlUHJvamVjdH19LGljb246Vi5kZWZhdWx0LG1lc3NhZ2U6Qy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiU2lkZWJhci5maWx0ZXJzQnRuIixkZWZhdWx0TWVzc2FnZToiRmlsdGVycyJ9KX0se29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkNsaWNrQnV0dG9uKE0uU0lERUJBUl9FVkVOVFMuQ0xJQ0tfREVCVUdfQlROKX0sbGluazp7dHlwZTpOLlBST0pFQ1RfVVNFUkRFQlVHX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMuYWN0aXZlUHJvamVjdCxmaWx0ZXJJZDpQLkFMTH19LGljb246WS5kZWZhdWx0LG1lc3NhZ2U6Qy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiU2lkZWJhci5kZWJ1Z0J0biIsZGVmYXVsdE1lc3NhZ2U6IkRlYnVnIn0pfV19fSx7a2V5OiJfX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVCb3R0b21TaWRlYmFySXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUJvdHRvbVNpZGViYXJJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tvbkNsaWNrOnRoaXMucHJvcHMub25DbGlja05hdkJ0bixsaW5rOnt0eXBlOk4uVVNFUl9QUk9GSUxFX1BBR0V9LGljb246Sy5kZWZhdWx0LG1lc3NhZ2U6Qy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiU2lkZWJhci5wcm9maWxlQnRuIixkZWZhdWx0TWVzc2FnZToiUHJvZmlsZSJ9KX0se29uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsaWNrTmF2QnRuLGxpbms6e3R5cGU6Ti5BRE1JTklTVFJBVEVfUEFHRX0saWNvbjokLmRlZmF1bHQsbWVzc2FnZTpDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJTaWRlYmFyLmFkbWluaXN0cmF0ZUJ0biIsZGVmYXVsdE1lc3NhZ2U6IkFkbWluaXN0cmF0ZSJ9KX1dfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMucHJvamVjdFJvbGUsdD10aGlzLmNyZWF0ZVRvcFNpZGViYXJJdGVtcygpO2U9PT1JLkNVU1RPTUVSJiZ0LnBvcCgpO3ZhciBuPXRoaXMuY3JlYXRlQm90dG9tU2lkZWJhckl0ZW1zKCk7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguU2lkZWJhcix7dG9wU2lkZWJhckl0ZW1zOnQsYm90dG9tU2lkZWJhckl0ZW1zOm59KX19XSksdH0oQS5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtwcm9qZWN0Um9sZTp4LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsb25DbGlja05hdkJ0bjp4LmRlZmF1bHQuZnVuYyxhY3RpdmVQcm9qZWN0OnguZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx0cmFja2luZzp4LmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6eC5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOnguZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sYS5kZWZhdWx0UHJvcHM9e29uQ2xpY2tOYXZCdG46ZnVuY3Rpb24oKXt9fSxpPWwpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihlZSwiQXBwU2lkZWJhciIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9hcHBMYXlvdXQvYXBwU2lkZWJhci9hcHBTaWRlYmFyLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9hZG1pbmlzdHJhdGUtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMSwxNSBMMSwxNyBMNywxNyBMNywxNSBMMSwxNSBaIE0xLDMgTDEsNSBMMTEsNSBMMTEsMyBMMSwzIFogTTExLDE5IEwxMSwxNyBMMTksMTcgTDE5LDE1IEwxMSwxNSBMMTEsMTMgTDksMTMgTDksMTkgTDExLDE5IFogTTUsNyBMNSw5IEwxLDkgTDEsMTEgTDUsMTEgTDUsMTMgTDcsMTMgTDcsNyBMNSw3IFogTTE5LDExIEwxOSw5IEw5LDkgTDksMTEgTDE5LDExIFogTTEzLDcgTDE1LDcgTDE1LDUgTDE5LDUgTDE5LDMgTDE1LDMgTDE1LDEgTDEzLDEgTDEzLDcgWiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9kYXNoYm9hcmQtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyMSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMCwwIEw2LDAgTDYsNSBMMCw1IEwwLDAgWiBNOSwwIEwxNSwwIEwxNSw1IEw5LDUgTDksMCBaIE0xOCwwIEwyNCwwIEwyNCw1IEwxOCw1IEwxOCwwIFogTTAsOCBMNiw4IEw2LDEzIEwwLDEzIEwwLDggWiBNOSw4IEwxNSw4IEwxNSwxMyBMOSwxMyBMOSw4IFogTTE4LDggTDI0LDggTDI0LDEzIEwxOCwxMyBMMTgsOCBaIE0wLDE2IEw2LDE2IEw2LDIxIEwwLDIxIEwwLDE2IFogTTksMTYgTDE1LDE2IEwxNSwyMSBMOSwyMSBMOSwxNiBaIE0xOCwxNiBMMjQsMTYgTDI0LDIxIEwxOCwyMSBMMTgsMTYgWiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9kZWJ1Zy1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMwIDMwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNSwxNi41IEMxMy4zNDU4LDE2LjUgMTIsMTUuMTU0MiAxMiwxMy41IEMxMiwxMS44NDU4IDEzLjM0NTgsMTAuNSAxNSwxMC41IEMxNi42NTQyLDEwLjUgMTgsMTEuODQ1OCAxOCwxMy41IEMxOCwxNS4xNTQyIDE2LjY1NDIsMTYuNSAxNSwxNi41IEwxNSwxNi41IFogTTI5LjgxODgzMzQsMTQuMTgzNjMxMiBDMjYuNzk2MzM5Miw4LjEyMDE0MTg0IDIxLjI4MTQ2ODMsNC41IDE1LjA2NjY0NzQsNC41IEM4Ljg2MDA3NDUxLDQuNSAzLjI5NjA5MDg5LDguMTEzMzkwMDcgMC4xODI4Njk0MDUsMTQuMTY1MzYxNyBDLTAuMDU5MzIwMDMwOSwxNC42MzYgLTAuMDYwODE5NjU1OSwxNS4yMDM5NDMzIDAuMTc3NjIwNzE4LDE1LjY3NjE3MDIgQzMuMjg5NzE3NDgsMjEuODI3NDMyNiA4LjgzNzk1NTA0LDI1LjUgMTUuMDE5NDA5MywyNS41IEMyMS4yMDM4NjI3LDI1LjUgMjYuNzM1NjA0NCwyMS44MjUwNDk2IDI5LjgxNzMzMzgsMTUuNjY5ODE1NiBDMzAuMDUwMTUwNSwxNS4yMDUxMzQ4IDMwLjA1MDUyNTUsMTQuNjQ4NzA5MiAyOS44MTg4MzM0LDE0LjE4MzYzMTIgTDI5LjgxODgzMzQsMTQuMTgzNjMxMiBaIE0xNS4wMTY2Mzc5LDIyLjUgQzkuODk2NDUyNzksMjIuNSA1LjI1NDM4NjE0LDE5LjY4NzUyNTQgMi40NDI0NDE4NywxNC45MzEwNTA4IEM1LjI1NTU4NTQzLDEwLjI2MTIyMDMgOS45MTUyNDE3Miw3LjUgMTUuMDY2NjA4NSw3LjUgQzIwLjIxMjM3ODUsNy41IDI0LjgyMDg2NSwxMC4yNTgzNzI5IDI3LjU1MDA1OCwxNC45MjI5MTUzIEMyNC43NjcyOTY1LDE5LjY4NDY3OCAyMC4xMzg4MjE5LDIyLjUgMTUuMDE2NjM3OSwyMi41IEwxNS4wMTY2Mzc5LDIyLjUgWiBNOSwxMy40OTg1IEM5LDE2LjgwNTk4MDYgMTEuNjkxMDE5NCwxOS40OTY5OTk5IDE0Ljk5ODUsMTkuNDk2OTk5OSBDMTguMzA1OTgwNiwxOS40OTY5OTk5IDIwLjk5Njk5OTksMTYuODA1OTgwNiAyMC45OTY5OTk5LDEzLjQ5ODUgQzIwLjk5Njk5OTksMTAuMTkxMDE5NCAyMC4xNTc3MTQ4LDcuNSAxNC45OTg1LDcuNSBDOS44MzkyODUwOSw3LjUgOSwxMC4xOTEwMTk0IDksMTMuNDk4NSBaIj48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvaW1nL2ZpbHRlcnMtaWNvbi1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiI+PHBvbHlnb24gZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjAgMCA4Ljk4NSAxMS4zMTkgOC45ODUgMjEuOTY3IDEyLjk5MyAxOS4wNDkgMTIuOTkzIDExLjMxOSAyMiAwIiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyMiAwKSI+PC9wb2x5Z29uPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9sYXVuY2hlcy1pY29uLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI4IDI4Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC41Nzc4MiwyNy40ODMxODc2IEwxMC4zOTY2MTk4LDIyLjU2ODgzMzEgQzYuODE3MjY4NTQsMjMuNTUzNTc1MSA3LjY3Mjc5NTI5LDI0LjMyOTMzNjMgNS41MzMzNjU4LDIyLjE4OTkwNjggQzMuMzkyNzUzNDIsMjAuMDQ5Mjk0NCA0LjI0OTAzMzg4LDIwLjcyMDc1OTQgNS4yMzI0MzUyMywxNy4xMzI0OTI4IEwwLjQ2MzQ1MzA4NCwxNy4xMzI0OTI4IEwtNS4zNDI5NDgzMWUtMTYsMTYuODI3NDg4OCBMMy4xMDIwNzUzLDEzLjA2NjY0NjYgTDguNjA3MTMwMDUsMTMuMTQzNDE4MSBDMTEuOTI2NzA3NSw5LjE0MDcwMTA1IDE0Ljk2ODY0ODIsNS4zNTQzNjgxIDE2LjI0NDI2MzIsNC4wNzg3NTMwNiBDMjAuMTEyMDgyLDAuMjEwOTM0MjkgMjYuODkwNTY0LC0wLjMyOTc4NzUxIDI3LjYxNzM3MDYsMC4xNDQ2Mzg3NTUgQzI3Ljc1NDc2MDcsMC45NTE5NTA3ODggMjcuNTQ3NDI2MSw3LjU3NjEwMjI1IDIzLjY0NDUxOTYsMTEuNDc5MDA5NCBDMjIuMzY3NDI0NywxMi43NTYxMDQzIDE4LjY1MzQ2MDgsMTUuOTMxNzI1NiAxNC40NTU0MDA1LDE5LjE4NTQxMzggTDE0LjUzMTc1MTYsMjQuNjYwMzI0OCBMMTAuOTU3MjI3NywyNy44NjI1OTUzIEwxMC41Nzc4MiwyNy40ODMxODc2IFogTTIyLjkzODM2NzYsNi4xMzkzMjg3IEMyMy43NjY3OTQ4LDYuMTM5MzI4NyAyNC40MzgzNjc2LDUuNDY3NzU1ODIgMjQuNDM4MzY3Niw0LjYzOTMyODcgQzI0LjQzODM2NzYsMy44MTA5MDE1NyAyMy43NjY3OTQ4LDMuMTM5MzI4NyAyMi45MzgzNjc2LDMuMTM5MzI4NyBDMjIuMTA5OTQwNSwzLjEzOTMyODcgMjEuNDM4MzY3NiwzLjgxMDkwMTU3IDIxLjQzODM2NzYsNC42MzkzMjg3IEMyMS40MzgzNjc2LDUuNDY3NzU1ODIgMjIuMTA5OTQwNSw2LjEzOTMyODcgMjIuOTM4MzY3Niw2LjEzOTMyODcgWiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBTaWRlYmFyL2ltZy9wcm9maWxlLWljb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwLDEwIEMxMi40ODYyNSwxMCAxNC41LDcuOTgwNjI1IDE0LjUsNS41IEMxNC41LDMuMDEzNzUgMTIuNDg2MjUsMSAxMCwxIEM3LjUxMzc1LDEgNS41LDMuMDEzNzUgNS41LDUuNSBDNS41LDcuOTgwNjI1IDcuNTEzNzUsMTAgMTAsMTAgWiBNMTAsMTIuMjUgQzcuMDAxODc1LDEyLjI1IDEsMTMuNzUxODc1IDEsMTYuNzUgTDEsMTkgTDE5LDE5IEwxOSwxNi43NSBDMTksMTMuNzUxODc1IDEyLjk5ODEyNSwxMi4yNSAxMCwxMi4yNSBaIj48L3BhdGg+PC9zdmc+J30sIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2FwcFNpZGViYXIvYXBwU2lkZWJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXBwU2lkZWJhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQXBwU2lkZWJhcn19KX0sIi4vc3JjL2xheW91dHMvYXBwTGF5b3V0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9sYXlvdXRzL2FwcExheW91dC9hcHBMYXlvdXQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFwcExheW91dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQXBwTGF5b3V0fX0pfSwiLi9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2Zvb3Rlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvb3Rlcj12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPXIodyksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEg9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2Zvb3Rlci5zY3NzIiksRj1yKEgpLEI9e0Zvb3Rlcjp7ZGlzcGxheU5hbWU6IkZvb3RlciJ9fSxVPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvY29tbW9uL2Zvb3Rlci9mb290ZXIuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltDLmRlZmF1bHRdfSksRz0oMCxULmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9mb290ZXIvZm9vdGVyLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLHo9TS5kZWZhdWx0LmJpbmQoRi5kZWZhdWx0KSxWPXQuRm9vdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiRm9vdGVyIikoKG89KDAseC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57YnVpbGRWZXJzaW9uOigwLFAuYnVpbGRWZXJzaW9uU2VsZWN0b3IpKGUpfX0pLHM9KDAsai5kZWZhdWx0KSgpLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5idWlsZFZlcnNpb24sbj1lLnRyYWNraW5nO3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZm9vdGVyIix7Y2xhc3NOYW1lOnooImZvb3RlciIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImZvb3Rlci1saW5rcyIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6Ti5yZWZlcmVuY2VEaWN0aW9uYXJ5LnJwR2l0SHViLHRhcmdldDoiX2JsYW5rIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4udHJhY2tFdmVudChJLkZPT1RFUl9FVkVOVFMuRk9SS19VU19DTElDSyl9fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGb290ZXIuZ2l0IixkZWZhdWx0TWVzc2FnZToiRm9yayB1cyBvbiBHaXRIdWIifSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjpOLnJlZmVyZW5jZURpY3Rpb25hcnkucnBTbGFjayx0YXJnZXQ6Il9ibGFuayIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuLnRyYWNrRXZlbnQoSS5GT09URVJfRVZFTlRTLlNMQUNLX0xJTkspfX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRm9vdGVyLnNsYWNrIixkZWZhdWx0TWVzc2FnZToiQ2hhdCB3aXRoIHVzIG9uIFNsYWNrIn0pKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6Ti5yZWZlcmVuY2VEaWN0aW9uYXJ5LnJwRW1haWwsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuLnRyYWNrRXZlbnQoSS5GT09URVJfRVZFTlRTLkNPTlRBQ1RfVVNfTElOSyl9fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGb290ZXIuY29udGFjdCIsZGVmYXVsdE1lc3NhZ2U6IkNvbnRhY3QgdXMifSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjpOLnJlZmVyZW5jZURpY3Rpb25hcnkucnBFcGFtLHRhcmdldDoiX2JsYW5rIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4udHJhY2tFdmVudChJLkZPT1RFUl9FVkVOVFMuRVBBTV9MSU5LKX19LCJFUEFNIiksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOk4ucmVmZXJlbmNlRGljdGlvbmFyeS5ycERvYyx0YXJnZXQ6Il9ibGFuayIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuLnRyYWNrRXZlbnQoSS5GT09URVJfRVZFTlRTLkRPQ1VNRU5UQVRJT05fTElOSyl9fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGb290ZXIuZG9jdW1lbnRhdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkRvY3VtZW50YXRpb24ifSkpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooInRleHQtd3JhcHBlciIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImZvb3Rlci10ZXh0Iil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkZvb3Rlci5idWlsZCIsZGVmYXVsdE1lc3NhZ2U6IkJ1aWxkIn0pLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLCI6ICIsdCkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiZm9vdGVyLXRleHQiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIiDCqSBSZXBvcnQgUG9ydGFsIDIwMTggIiksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRm9vdGVyLmNvcHlyaWdodCIsZGVmYXVsdE1lc3NhZ2U6IkFsbCByaWdodHMgcmVzZXJ2ZWQifSkpKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17YnVpbGRWZXJzaW9uOkQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx0cmFja2luZzpELmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6RC5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOkQuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0saT1sKSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIkZvb3RlciIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2Zvb3Rlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2Zvb3Rlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2xheW91dHMvY29tbW9uL2Zvb3Rlci9mb290ZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2Zvb3RlcjoiZm9vdGVyX19mb290ZXJfX19EdHJqMCIsImZvb3Rlci1saW5rcyI6ImZvb3Rlcl9fZm9vdGVyLWxpbmtzX19fOVFJUFYiLCJ0ZXh0LXdyYXBwZXIiOiJmb290ZXJfX3RleHQtd3JhcHBlcl9fXzFsT2lFIiwiZm9vdGVyLXRleHQiOiJmb290ZXJfX2Zvb3Rlci10ZXh0X19fMVNnZnUifX0sIi4vc3JjL2xheW91dHMvY29tbW9uL2Zvb3Rlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2Zvb3Rlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRm9vdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Gb290ZXJ9fSl9LCIuL3NyYy9sYXlvdXRzL2NvbW1vbi9pbWcvbG9nb3V0LWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjRTlFOUU5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjcxNCAxNS4xNDNMMy41NzEgMTBsNS4xNDMtNS4xNDNMMTAgNi4xNDMgNy40MjkgOC43MTRoNi40Mjh2Mi41NzJINy40M0wxMCAxMy44NTdsLTEuMjg2IDEuMjg2ek0xNi40MyAxSDMuNTdDMS44OTUgMSAxIDEuODk1IDEgMy41NzFWNy40M2gyLjU3MVYzLjU3SDE2LjQzVjE2LjQzSDMuNTdWMTIuNTdIMXYzLjg1OEMxIDE4LjEwNSAxLjg5NSAxOSAzLjU3MSAxOUgxNi40M0MxOC4xMDUgMTkgMTkgMTguMTA1IDE5IDE2LjQyOVYzLjU3QzE5IDEuODk1IDE4LjEwNSAxIDE2LjQyOSAxeiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9sYXlvdXRzL2NvbW1vbi9sYXlvdXQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2xheW91dHMvY29tbW9uL2xheW91dC9sYXlvdXQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxheW91dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTGF5b3V0fX0pfSwiLi9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2xheW91dC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxheW91dD12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxSPXIoUyksaj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9pbmRleC5qcyIpLHg9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vZm9vdGVyL2luZGV4LmpzIiksTD1uKCIuL3NyYy9sYXlvdXRzL2NvbW1vbi9sYXlvdXQvbGF5b3V0LnNjc3MiKSxEPXIoTCksdz17TGF5b3V0OntkaXNwbGF5TmFtZToiTGF5b3V0In19LE09KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2xheW91dC5qc3giLGNvbXBvbmVudHM6dyxsb2NhbHM6W2VdLGltcG9ydHM6W3YuZGVmYXVsdF19KSxrPSgwLEUuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvY29tbW9uL2xheW91dC9sYXlvdXQuanN4Iixjb21wb25lbnRzOncsbG9jYWxzOltdLGltcG9ydHM6W3YuZGVmYXVsdCxnLmRlZmF1bHRdfSksST1SLmRlZmF1bHQuYmluZChELmRlZmF1bHQpLFA9dC5MYXlvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNKGsodCxlKSxlKX19KCJMYXlvdXQiKSgocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxsPTA7bDxzO2wrKylpW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gbj1yPSgwLHAuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtzaWRlTWVudU9wZW5lZDohMX0sci53aW5kb3dSZXNpemVIYW5kbGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX193aW5kb3dSZXNpemVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnRvZ2dsZVNpZGVNZW51PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVTaWRlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX3RvZ2dsZVNpZGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVTaWRlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fd2luZG93UmVzaXplSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd2luZG93UmVzaXplSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMud2luZG93UmVzaXplSGFuZGxlciwhMSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLndpbmRvd1Jlc2l6ZUhhbmRsZXIsITEpfX0se2tleToiX193aW5kb3dSZXNpemVIYW5kbGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZS5zaWRlTWVudU9wZW5lZCYmd2luZG93LmlubmVyV2lkdGg+NzY3JiZ0aGlzLnNldFN0YXRlKHtzaWRlTWVudU9wZW5lZDohMX0pfX0se2tleToiX190b2dnbGVTaWRlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoe3NpZGVNZW51T3BlbmVkOiF0aGlzLnN0YXRlLnNpZGVNZW51T3BlbmVkfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LkhlYWRlcixyPXQuU2lkZWJhcjtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpJKCJsYXlvdXQiKX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpJKCJzbGlkZS1jb250YWluZXIiLHsic2lkZS1tZW51LW9wZW5lZCI6dGhpcy5zdGF0ZS5zaWRlTWVudU9wZW5lZH0pfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoInNpZGViYXItY29udGFpbmVyIil9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SSgiY29ybmVyLWFyZWEiKX0pLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHIse29uQ2xpY2tOYXZCdG46ZnVuY3Rpb24oKXtlLnN0YXRlLnNpZGVNZW51T3BlbmVkJiZlLnNldFN0YXRlKHtzaWRlTWVudU9wZW5lZDohMX0pfX0pKSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoImNvbnRlbnQiKX0sdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoai5TY3JvbGxXcmFwcGVyLHt3aXRoQmFja1RvVG9wOiEwfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoInNjcm9sbGluZy1jb250ZW50Iil9LHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SSgiaGVhZGVyLWNvbnRhaW5lciIpfSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChuLHtpc1NpZGVNZW51T3BlbmVkOnRoaXMuc3RhdGUuc2lkZU1lbnVPcGVuZWQsdG9nZ2xlU2lkZU1lbnU6dGhpcy50b2dnbGVTaWRlTWVudX0pKSx2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkkoInBhZ2UtY29udGFpbmVyIil9LHRoaXMucHJvcHMuY2hpbGRyZW4pLHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHguRm9vdGVyLG51bGwpKSksdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpJKCJzaWRlYmFyLWNsb3NlLWFyZWEiLHt2aXNpYmxlOnRoaXMuc3RhdGUuc2lkZU1lbnVPcGVuZWR9KSxvbkNsaWNrOnRoaXMudG9nZ2xlU2lkZU1lbnV9KSkpKX19XSksdH0oeS5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtjaGlsZHJlbjpPLmRlZmF1bHQubm9kZSxIZWFkZXI6Ty5kZWZhdWx0LmZ1bmMsU2lkZWJhcjpPLmRlZmF1bHQuZnVuY30sby5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGwsSGVhZGVyOm51bGwsU2lkZWJhcjpudWxsfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsIkxheW91dCIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2xheW91dC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihJLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9jb21tb24vbGF5b3V0L2xheW91dC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2xheW91dHMvY29tbW9uL2xheW91dC9sYXlvdXQuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2xheW91dDoibGF5b3V0X19sYXlvdXRfX19iTlE3QSIsInNsaWRlLWNvbnRhaW5lciI6ImxheW91dF9fc2xpZGUtY29udGFpbmVyX19fMmkwX3AiLCJzaWRlLW1lbnUtb3BlbmVkIjoibGF5b3V0X19zaWRlLW1lbnUtb3BlbmVkX19fMUFpTC0iLCJzaWRlYmFyLWNvbnRhaW5lciI6ImxheW91dF9fc2lkZWJhci1jb250YWluZXJfX19nWDJiWSIsImNvcm5lci1hcmVhIjoibGF5b3V0X19jb3JuZXItYXJlYV9fX0R3TENUIixjb250ZW50OiJsYXlvdXRfX2NvbnRlbnRfX18yYmJXZCIsInNpZGViYXItY2xvc2UtYXJlYSI6ImxheW91dF9fc2lkZWJhci1jbG9zZS1hcmVhX19fcXRyZHIiLHZpc2libGU6ImxheW91dF9fdmlzaWJsZV9fXzFVX29iIiwiaGVhZGVyLWNvbnRhaW5lciI6ImxheW91dF9faGVhZGVyLWNvbnRhaW5lcl9fXzFXLXhzIiwicGFnZS1jb250YWluZXIiOiJsYXlvdXRfX3BhZ2UtY29udGFpbmVyX19fcWtGNTAiLCJzY3JvbGxpbmctY29udGVudCI6ImxheW91dF9fc2Nyb2xsaW5nLWNvbnRlbnRfX18xV2RhdSJ9fSwiLi9zcmMvbGF5b3V0cy9jb21tb24vbW9iaWxlSGVhZGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9sYXlvdXRzL2NvbW1vbi9tb2JpbGVIZWFkZXIvbW9iaWxlSGVhZGVyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNb2JpbGVIZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk1vYmlsZUhlYWRlcn19KX0sIi4vc3JjL2xheW91dHMvY29tbW9uL21vYmlsZUhlYWRlci9tb2JpbGVIZWFkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1vYmlsZUhlYWRlcj12b2lkIDA7dmFyIG8scyxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdj1yKHkpLFQ9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vbW9iaWxlSGVhZGVyL21vYmlsZUhlYWRlci5zY3NzIiksQT1yKFQpLEM9di5kZWZhdWx0LmJpbmQoQS5kZWZhdWx0KSxPPXQuTW9iaWxlSGVhZGVyPShzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLHUuZGVmYXVsdCkodGhpcyx0KSwoMCxwLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLG0uZGVmYXVsdCkodCxlKSwoMCxkLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5vcGVuZWQsbj1lLnRvZ2dsZVNpZGVNZW51O3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkMoIm1vYmlsZS1oZWFkZXIiKX0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpDKCJoYW1idXJnZXIiLHtvcGVuZWQ6dH0pLG9uQ2xpY2s6bn0sZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpDKCJoYW1idXJnZXItcGFydCIpfSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpDKCJoYW1idXJnZXItcGFydCIpfSksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpDKCJoYW1idXJnZXItcGFydCIpfSkpLGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QygicnAtbG9nbyIpfSkpfX1dKSx0fShoLlB1cmVDb21wb25lbnQpLG8ucHJvcFR5cGVzPXtvcGVuZWQ6RS5kZWZhdWx0LmJvb2wsdG9nZ2xlU2lkZU1lbnU6RS5kZWZhdWx0LmZ1bmN9LG8uZGVmYXVsdFByb3BzPXtvcGVuZWQ6ITEsdG9nZ2xlU2lkZU1lbnU6ZnVuY3Rpb24oKXt9fSxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTywiTW9iaWxlSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9tb2JpbGVIZWFkZXIvbW9iaWxlSGVhZGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9tb2JpbGVIZWFkZXIvbW9iaWxlSGVhZGVyLmpzeCIpKX0oKX0sIi4vc3JjL2xheW91dHMvY29tbW9uL21vYmlsZUhlYWRlci9tb2JpbGVIZWFkZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2JpbGUtaGVhZGVyIjoibW9iaWxlSGVhZGVyX19tb2JpbGUtaGVhZGVyX19fMlZwazQiLGhhbWJ1cmdlcjoibW9iaWxlSGVhZGVyX19oYW1idXJnZXJfX185NWo0SiIsImhhbWJ1cmdlci1wYXJ0IjoibW9iaWxlSGVhZGVyX19oYW1idXJnZXItcGFydF9fXzI4OU5NIixvcGVuZWQ6Im1vYmlsZUhlYWRlcl9fb3BlbmVkX19fb3RkNUciLCJycC1sb2dvIjoibW9iaWxlSGVhZGVyX19ycC1sb2dvX19fUVdtb2wifX0sIi4vc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvc2lkZWJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2lkZWJhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU2lkZWJhcn19KX0sIi4vc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvc2lkZWJhci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNpZGViYXI9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxSPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2F1dGgvaW5kZXguanMiKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvc2lkZWJhckJ1dHRvbi9zaWRlYmFyQnV0dG9uLmpzeCIpLHc9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvY29uc3RhbnRzLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaz1yKE0pLEk9bigiLi9zcmMvbGF5b3V0cy9jb21tb24vc2lkZWJhci9zaWRlYmFyLnNjc3MiKSxQPXIoSSksTj1uKCIuL3NyYy9sYXlvdXRzL2NvbW1vbi9pbWcvbG9nb3V0LWlubGluZS5zdmciKSxIPXIoTiksRj17U2lkZWJhcjp7ZGlzcGxheU5hbWU6IlNpZGViYXIifX0sQj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9zaWRlYmFyL3NpZGViYXIuanN4Iixjb21wb25lbnRzOkYsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksVT0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9zaWRlYmFyL3NpZGViYXIuanN4Iixjb21wb25lbnRzOkYsbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksRz14LmRlZmF1bHQuYmluZChQLmRlZmF1bHQpLHo9dC5TaWRlYmFyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQihVKHQsZSksZSl9fSgiU2lkZWJhciIpKChvPSgwLFMuY29ubmVjdCkobnVsbCx7bG9nb3V0OlIubG9nb3V0QWN0aW9ufSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGQuZGVmYXVsdCkodGhpcyx0KSwoMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS50b3BTaWRlYmFySXRlbXMsbj1lLmJvdHRvbVNpZGViYXJJdGVtcztyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImFzaWRlIix7Y2xhc3NOYW1lOkcoInNpZGViYXIiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJ0b3AtYmxvY2siKX0sdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6ZS5saW5rLnR5cGUsY2xhc3NOYW1lOkcoInNpZGViYXItYnRuIiksb25DbGljazplLm9uQ2xpY2t9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuU2lkZWJhckJ1dHRvbix7bGluazplLmxpbmssaWNvbjplLmljb259LGUubWVzc2FnZSkpfSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RygiYm90dG9tLWJsb2NrIil9LG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OmUubGluay50eXBlLGNsYXNzTmFtZTpHKCJzaWRlYmFyLWJ0biIpLG9uQ2xpY2s6ZS5vbkNsaWNrfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELlNpZGViYXJCdXR0b24se2xpbms6ZS5saW5rLGljb246ZS5pY29uLGJvdHRvbTohMH0sZS5tZXNzYWdlKSl9KSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoInNpZGViYXItYnRuIiksb25DbGljazp0aGlzLnByb3BzLmxvZ291dH0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5TaWRlYmFyQnV0dG9uLHtsaW5rOnt0eXBlOncuTE9HSU5fUEFHRX0saWNvbjpILmRlZmF1bHQsYm90dG9tOiEwfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJTaWRlYmFyLmxvZ291dEJ0biIsZGVmYXVsdE1lc3NhZ2U6IkxvZ291dCJ9KSkpKSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17bG9nb3V0OmsuZGVmYXVsdC5mdW5jLHRvcFNpZGViYXJJdGVtczprLmRlZmF1bHQuYXJyYXksYm90dG9tU2lkZWJhckl0ZW1zOmsuZGVmYXVsdC5hcnJheX0saS5kZWZhdWx0UHJvcHM9e2xvZ291dDpmdW5jdGlvbigpe30sdG9wU2lkZWJhckl0ZW1zOltdLGJvdHRvbVNpZGViYXJJdGVtczpbXX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJTaWRlYmFyIiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL2NvbW1vbi9zaWRlYmFyL3NpZGViYXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvc2lkZWJhci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL2xheW91dHMvY29tbW9uL3NpZGViYXIvc2lkZWJhci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17c2lkZWJhcjoic2lkZWJhcl9fc2lkZWJhcl9fXzFKN2FEIiwidG9wLWJsb2NrIjoic2lkZWJhcl9fdG9wLWJsb2NrX19fNm9DTnMiLCJib3R0b20tYmxvY2siOiJzaWRlYmFyX19ib3R0b20tYmxvY2tfX18zRUgyQSIsInNpZGViYXItYnRuIjoic2lkZWJhcl9fc2lkZWJhci1idG5fX18xa0diSiJ9fSwiLi9zcmMvbGF5b3V0cy9lbXB0eUxheW91dC9lbXB0eUxheW91dC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRW1wdHlMYXlvdXQ9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vc3JjL2xheW91dHMvZW1wdHlMYXlvdXQvZW1wdHlMYXlvdXQuc2NzcyIpLGQ9cihjKSxfPXUuZGVmYXVsdC5iaW5kKGQuZGVmYXVsdCkscD10LkVtcHR5TGF5b3V0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6XygiZW1wdHktbGF5b3V0Iil9LHQpfTtwLnByb3BUeXBlcz17Y2hpbGRyZW46YS5kZWZhdWx0Lm5vZGV9LHAuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiRW1wdHlMYXlvdXQiLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvZW1wdHlMYXlvdXQvZW1wdHlMYXlvdXQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvZW1wdHlMYXlvdXQvZW1wdHlMYXlvdXQuanN4IikpfSgpfSwiLi9zcmMvbGF5b3V0cy9lbXB0eUxheW91dC9lbXB0eUxheW91dC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImVtcHR5LWxheW91dCI6ImVtcHR5TGF5b3V0X19lbXB0eS1sYXlvdXRfX18zSXhRQiJ9fSwiLi9zcmMvbGF5b3V0cy9lbXB0eUxheW91dC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvbGF5b3V0cy9lbXB0eUxheW91dC9lbXB0eUxheW91dC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW1wdHlMYXlvdXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkVtcHR5TGF5b3V0fX0pfSwiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvcGFnZUxheW91dC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGFnZUxheW91dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGFnZUxheW91dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGFnZUhlYWRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGFnZUhlYWRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGFnZVNlY3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlBhZ2VTZWN0aW9ufX0pfSwiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9wYWdlQnJlYWRjcnVtYnMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhZ2VCcmVhZGNydW1icyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGFnZUJyZWFkY3J1bWJzfX0pfSwiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9wYWdlQnJlYWRjcnVtYnMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlQnJlYWRjcnVtYnM9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLE09bigiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9wYWdlQnJlYWRjcnVtYnMuc2NzcyIpLGs9cihNKSxJPXtQYWdlQnJlYWRjcnVtYnM6e2Rpc3BsYXlOYW1lOiJQYWdlQnJlYWRjcnVtYnMifX0sUD0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvcGFnZUJyZWFkY3J1bWJzL3BhZ2VCcmVhZGNydW1icy5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxOPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvcGFnZUxheW91dC9wYWdlQnJlYWRjcnVtYnMvcGFnZUJyZWFkY3J1bWJzLmpzeCIsY29tcG9uZW50czpJLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLEg9RC5kZWZhdWx0LmJpbmQoay5kZWZhdWx0KSxGPXQuUGFnZUJyZWFkY3J1bWJzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUChOKHQsZSksZSl9fSgiUGFnZUJyZWFkY3J1bWJzIikoKG89KDAseC5kZWZhdWx0KSgpKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGF0YSxuPWUudHJhY2tpbmc7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZTpIKCJwYWdlLWJyZWFkY3J1bWJzIil9LHQubWFwKGZ1bmN0aW9uKGUscil7dmFyIG89ZS50aXRsZSxzPWUubGluayxpPWUuZXZlbnRJbmZvO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLHtrZXk6byxjbGFzc05hbWU6SCgicGFnZS1icmVhZGNydW1icy1pdGVtIil9LHI9PT10Lmxlbmd0aC0xP0EuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLG8pOkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuTmF2TGluayx7dG86cyxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4udHJhY2tFdmVudChpKX0sY2xhc3NOYW1lOkgoInBhZ2UtYnJlYWRjcnVtYnMtbGluayIpfSxvKSl9KSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17ZGF0YTpSLmRlZmF1bHQuYXJyYXksdHJhY2tpbmc6Ui5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OlIuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTpSLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXtkYXRhOltdfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsIlBhZ2VCcmVhZGNydW1icyIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9wYWdlQnJlYWRjcnVtYnMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvcGFnZUxheW91dC9wYWdlQnJlYWRjcnVtYnMvcGFnZUJyZWFkY3J1bWJzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VCcmVhZGNydW1icy9wYWdlQnJlYWRjcnVtYnMuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJwYWdlLWJyZWFkY3J1bWJzIjoicGFnZUJyZWFkY3J1bWJzX19wYWdlLWJyZWFkY3J1bWJzX19fMjlyZW0iLCJwYWdlLWJyZWFkY3J1bWJzLWxpbmsiOiJwYWdlQnJlYWRjcnVtYnNfX3BhZ2UtYnJlYWRjcnVtYnMtbGlua19fX2dpN0V5IiwicGFnZS1icmVhZGNydW1icy1pdGVtIjoicGFnZUJyZWFkY3J1bWJzX19wYWdlLWJyZWFkY3J1bWJzLWl0ZW1fX18xR3pyTiJ9fSwiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VMYXlvdXQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlU2VjdGlvbj10LlBhZ2VIZWFkZXI9dC5QYWdlTGF5b3V0PXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VMYXlvdXQuc2NzcyIpLHU9cihsKSxjPW4oIi4vc3JjL2xheW91dHMvcGFnZUxheW91dC9wYWdlQnJlYWRjcnVtYnMvaW5kZXguanMiKSxkPWEuZGVmYXVsdC5iaW5kKHUuZGVmYXVsdCksXz10LlBhZ2VMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIG49dC5jaGlsZHJlbjtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgicGFnZS1sYXlvdXQiKX0sbil9O18ucHJvcFR5cGVzPXtjaGlsZHJlbjpzLmRlZmF1bHQubm9kZX0sXy5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGx9O3ZhciBwPXQuUGFnZUhlYWRlcj1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuLHI9dC5icmVhZGNydW1icztyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgicGFnZS1oZWFkZXIiKX0sZS5jcmVhdGVFbGVtZW50KGMuUGFnZUJyZWFkY3J1bWJzLHtkYXRhOnJ9KSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJjaGlsZHJlbi1jb250YWluZXIiKX0sbikpfTtwLnByb3BUeXBlcz17YnJlYWRjcnVtYnM6cy5kZWZhdWx0LmFycmF5LGNoaWxkcmVuOnMuZGVmYXVsdC5ub2RlfSxwLmRlZmF1bHRQcm9wcz17YnJlYWRjcnVtYnM6W10sY2hpbGRyZW46bnVsbH07dmFyIGY9dC5QYWdlU2VjdGlvbj1mdW5jdGlvbih0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJwYWdlLWNvbnRlbnQiKX0sbil9O2YucHJvcFR5cGVzPXtjaGlsZHJlbjpzLmRlZmF1bHQubm9kZX0sZi5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGx9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJQYWdlTGF5b3V0IiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvcGFnZUxheW91dC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJQYWdlSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvcGFnZUxheW91dC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJQYWdlU2VjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L3BhZ2VMYXlvdXQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL2xheW91dHMvcGFnZUxheW91dC9wYWdlTGF5b3V0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL2xheW91dHMvcGFnZUxheW91dC9wYWdlTGF5b3V0LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicGFnZS1sYXlvdXQiOiJwYWdlTGF5b3V0X19wYWdlLWxheW91dF9fXzFZZlN3IiwicGFnZS10aXRsZSI6InBhZ2VMYXlvdXRfX3BhZ2UtdGl0bGVfX18ya1V1aiIsInBhZ2UtY29udGVudCI6InBhZ2VMYXlvdXRfX3BhZ2UtY29udGVudF9fXzJSMzZWIiwicGFnZS1oZWFkZXIiOiJwYWdlTGF5b3V0X19wYWdlLWhlYWRlcl9fXzFFaDl3IiwiY2hpbGRyZW4tY29udGFpbmVyIjoicGFnZUxheW91dF9fY2hpbGRyZW4tY29udGFpbmVyX19fM3pYYTAifX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lci9hZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXI9dm9pZCAwO3ZhciBvLHMsaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxSPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcHJvamVjdFNlY3Rpb25zLmpzIiksaj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2luZGV4LmpzIikseD17QWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyOntkaXNwbGF5TmFtZToiQWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyIn19LEw9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyL2FkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6eCxsb2NhbHM6W2VdLGltcG9ydHM6W3YuZGVmYXVsdF19KSxEPSgwLEUuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lci9hZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIuanN4Iixjb21wb25lbnRzOngsbG9jYWxzOltdLGltcG9ydHM6W3YuZGVmYXVsdCxnLmRlZmF1bHRdfSksdz10LkFkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEwoRCh0LGUpLGUpfX0oIkFkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lciIpKChzPW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGw9MDtsPHM7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBuPXI9KDAscC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxhLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuY3JlYXRlVGFiTGluaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlVGFiTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHAuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxtLmRlZmF1bHQpKHQsZSksKDAsZC5kZWZhdWx0KSh0LFt7a2V5OiJfX2NyZWF0ZVRhYkxpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVRhYkxpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZVRhYkxpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Uy5QUk9KRUNUX0RFVEFJTFNfUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0SWQscHJvamVjdFNlY3Rpb246Ui5TRVRUSU5HUyxzZXR0aW5nc1RhYjplfX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGouU2V0dGluZ3NQYWdlLHtwcm9qZWN0SWQ6dGhpcy5wcm9wcy5wcm9qZWN0SWQsY3JlYXRlVGFiTGluazp0aGlzLmNyZWF0ZVRhYkxpbmt9KX19XSksdH0oeS5Db21wb25lbnQpLG8ucHJvcFR5cGVzPXtwcm9qZWN0SWQ6Ty5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodywiQWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIvYWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lci9hZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQWRtaW5Qcm9qZWN0U2V0dGluZ3NQYWdlQ29udGFpbmVyfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9hbGxVc2Vyc0dyaWQuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFsbFVzZXJzR3JpZD12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEM9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvaW5kZXguanMiKSxPPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksUz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vaW5kZXguanMiKSxSPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvbmFtZUNvbHVtbi9pbmRleC5qcyIpLGo9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9hbGxVc2Vyc0dyaWQuc2NzcyIpLHg9cihqKSxMPVQuZGVmYXVsdC5iaW5kKHguZGVmYXVsdCksRD0oMCxBLmRlZmluZU1lc3NhZ2VzKSh7bmFtZUNvbDp7aWQ6IkFsbFVzZXJzR3JpZC5uYW1lQ29sIixkZWZhdWx0TWVzc2FnZToiTmFtZSJ9LHR5cGVDb2w6e2lkOiJBbGxVc2Vyc0dyaWQudHlwZUNvbCIsZGVmYXVsdE1lc3NhZ2U6IlR5cGUifSxsb2dpbkNvbDp7aWQ6IkFsbFVzZXJzR3JpZC5sb2dpbkNvbCIsZGVmYXVsdE1lc3NhZ2U6IkxvZ2luIn0sZW1haWxDb2w6e2lkOiJBbGxVc2Vyc0dyaWQuZW1haWxDb2wiLGRlZmF1bHRNZXNzYWdlOiJFbWFpbCJ9LGxhc3RMb2dpbkNvbDp7aWQ6IkFsbFVzZXJzR3JpZC5sYXN0TG9naW5Db2wiLGRlZmF1bHRNZXNzYWdlOiJMYXN0IExvZ2luIn0scHJvamVjdHNBbmRSb2xlc0NvbDp7aWQ6IkFsbFVzZXJzR3JpZC5wcm9qZWN0c0FuZFJvbGVzQ29sIixkZWZhdWx0TWVzc2FnZToiUHJvamVjdHMgYW5kIHJvbGVzIn19KSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS52YWx1ZTtyZXR1cm4gYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpMKCJ0eXBlLWNvbCIsdCl9LG4uYWNjb3VudFR5cGUudG9Mb3dlckNhc2UoKSl9O3cucHJvcFR5cGVzPXtjbGFzc05hbWU6eS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHZhbHVlOnkuZGVmYXVsdC5vYmplY3R9LHcuZGVmYXVsdFByb3BzPXt2YWx1ZTp7fX07dmFyIE09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLnZhbHVlO3JldHVybiBiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkwoImxvZ2luLWNvbCIsdCl9LG4udXNlcklkKX07TS5wcm9wVHlwZXM9e2NsYXNzTmFtZTp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6eS5kZWZhdWx0Lm9iamVjdH0sTS5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fTt2YXIgaz1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TCgiZW1haWwtY29sIix0KX0sYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6TCgibW9iaWxlLWxhYmVsIil9LGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkFsbFVzZXJzR3JpZC5lbWFpbENvbCIsZGVmYXVsdE1lc3NhZ2U6IkVtYWlsIn0pKSxuLmVtYWlsKX07ay5wcm9wVHlwZXM9e2NsYXNzTmFtZTp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6eS5kZWZhdWx0Lm9iamVjdH0say5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fTt2YXIgST1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6TCgibGFzdC1sb2dpbi1jb2wiLHQpfSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpMKCJtb2JpbGUtbGFiZWwiLCJsYXN0LWxvZ2luLWxhYmVsIil9LGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkFsbFVzZXJzR3JpZC5sb2dpbkNvbCIsZGVmYXVsdE1lc3NhZ2U6IkxvZ2luIn0pKSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudChPLkFic1JlbFRpbWUse3N0YXJ0VGltZTpuLm1ldGFkYXRhLmxhc3RfbG9naW59KSl9O0kucHJvcFR5cGVzPXtjbGFzc05hbWU6eS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHZhbHVlOnkuZGVmYXVsdC5vYmplY3R9LEkuZGVmYXVsdFByb3BzPXt2YWx1ZTp7fX07dmFyIFA9dC5BbGxVc2Vyc0dyaWQ9KDAsQS5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldENvbHVtbnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuQ09MVU1OUz1yLmdldENvbHVtbnMoKSxvPW4sKDAsZi5kZWZhdWx0KShyLG8pfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxfLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7aWQ6Im5hbWUiLHRpdGxlOntmdWxsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEQubmFtZUNvbCl9LG1heEhlaWdodDoxNzAsY29tcG9uZW50OlIuTmFtZUNvbHVtbn0se2lkOiJsb2dpbiIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRC5sb2dpbkNvbCl9LGNvbXBvbmVudDpNfSx7aWQ6ImVtaWwiLHRpdGxlOntmdWxsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEQuZW1haWxDb2wpfSxjb21wb25lbnQ6a30se2lkOiJsYXN0TG9naW4iLHRpdGxlOntmdWxsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEQubGFzdExvZ2luQ29sKX0sY29tcG9uZW50Okl9LHtpZDoidHlwZSIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRC50eXBlQ29sKX0sY29tcG9uZW50Ond9LHtpZDoicHJvamVjdHNBbmRSb2xlcyIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRC5wcm9qZWN0c0FuZFJvbGVzQ29sKX0sY29tcG9uZW50OlMuUHJvamVjdHNBbmRSb2xlc0NvbHVtbn1dfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9uVG9nZ2xlU2VsZWN0aW9uLG49ZS5zZWxlY3RlZEl0ZW1zLHI9ZS5leGNsdWRlRnJvbVNlbGVjdGlvbixvPWUub25Ub2dnbGVTZWxlY3RBbGw7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEMuR3JpZCx7Y29sdW1uczp0aGlzLkNPTFVNTlMsZGF0YTp0aGlzLnByb3BzLmRhdGEsbG9hZGluZzp0aGlzLnByb3BzLmxvYWRpbmcsb25Ub2dnbGVTZWxlY3Rpb246dCxvblRvZ2dsZVNlbGVjdEFsbDpvLGNoYW5nZU9ubHlNb2JpbGVMYXlvdXQ6ITAsc2VsZWN0ZWRJdGVtczpuLHNlbGVjdGFibGU6ITAsZXhjbHVkZUZyb21TZWxlY3Rpb246cn0pfX1dKSx0fShnLlB1cmVDb21wb25lbnQpLHMucHJvcFR5cGVzPXtkYXRhOnkuZGVmYXVsdC5hcnJheU9mKHkuZGVmYXVsdC5vYmplY3QpLGludGw6QS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxsb2FkaW5nOnkuZGVmYXVsdC5ib29sLG9uVG9nZ2xlU2VsZWN0aW9uOnkuZGVmYXVsdC5mdW5jLG9uVG9nZ2xlU2VsZWN0QWxsOnkuZGVmYXVsdC5mdW5jLHNlbGVjdGVkSXRlbXM6eS5kZWZhdWx0LmFycmF5T2YoeS5kZWZhdWx0Lm9iamVjdCksZXhjbHVkZUZyb21TZWxlY3Rpb246eS5kZWZhdWx0LmFycmF5T2YoeS5kZWZhdWx0Lm9iamVjdCl9LHMuZGVmYXVsdFByb3BzPXtkYXRhOltdLGxvYWRpbmc6ITEsb25Ub2dnbGVTZWxlY3RBbGw6ZnVuY3Rpb24oKXt9LG9uVG9nZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7fSxzZWxlY3RlZEl0ZW1zOltdLGV4Y2x1ZGVGcm9tU2VsZWN0aW9uOltdfSxvPWkpKXx8bzshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUCwiQWxsVXNlcnNHcmlkIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL2FsbFVzZXJzR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9hbGxVc2Vyc0dyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRCwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvYWxsVXNlcnNHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHcsIlR5cGVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvYWxsVXNlcnNHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE0sIkxvZ2luQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL2FsbFVzZXJzR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihrLCJFbWFpbENvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9hbGxVc2Vyc0dyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSSwiTGFzdExvZ2luQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL2FsbFVzZXJzR3JpZC5qc3giKSl9KCl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL2FsbFVzZXJzR3JpZC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InR5cGUtY29sIjoiYWxsVXNlcnNHcmlkX190eXBlLWNvbF9fXzM5empWIiwibG9naW4tY29sIjoiYWxsVXNlcnNHcmlkX19sb2dpbi1jb2xfX18zZ08tMSIsImVtYWlsLWNvbCI6ImFsbFVzZXJzR3JpZF9fZW1haWwtY29sX19fM0dtVVgiLCJsYXN0LWxvZ2luLWNvbCI6ImFsbFVzZXJzR3JpZF9fbGFzdC1sb2dpbi1jb2xfX18zX2U2ViIsInByb2plY3RzLWFuZC1yb2xlcy1jb2wiOiJhbGxVc2Vyc0dyaWRfX3Byb2plY3RzLWFuZC1yb2xlcy1jb2xfX18zY19aUCIsbGFiZWw6ImFsbFVzZXJzR3JpZF9fbGFiZWxfX18zSWpfVCIsImF2YXRhci13cmFwcGVyIjoiYWxsVXNlcnNHcmlkX19hdmF0YXItd3JhcHBlcl9fX1FMR09mIiwibW9iaWxlLWxhYmVsIjoiYWxsVXNlcnNHcmlkX19tb2JpbGUtbGFiZWxfX18yR3BXNCIsImxhc3QtbG9naW4tbGFiZWwiOiJhbGxVc2Vyc0dyaWRfX2xhc3QtbG9naW4tbGFiZWxfX18xcHZqZCIsInNob3duLW9uLW1vYmlsZSI6ImFsbFVzZXJzR3JpZF9fc2hvd24tb24tbW9iaWxlX19fMWZXaXEifX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvYWxsVXNlcnNHcmlkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbGxVc2Vyc0dyaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFsbFVzZXJzR3JpZH19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvbmFtZUNvbHVtbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9uYW1lQ29sdW1uL25hbWVDb2x1bW4uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5hbWVDb2x1bW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5hbWVDb2x1bW59fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL25hbWVDb2x1bW4vbmFtZUNvbHVtbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5hbWVDb2x1bW49dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2FjY291bnRSb2xlcy5qcyIpLGs9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9hbGxVc2Vycy9pbmRleC5qcyIpLE49bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb250cm9sbGVycy9tb2RhbC9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9uYW1lQ29sdW1uL25hbWVDb2x1bW4uc2NzcyIpLEI9cihGKSxVPXtOYW1lQ29sdW1uOntkaXNwbGF5TmFtZToiTmFtZUNvbHVtbiJ9fSxHPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvbmFtZUNvbHVtbi9uYW1lQ29sdW1uLmpzeCIsY29tcG9uZW50czpVLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLHo9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9uYW1lQ29sdW1uL25hbWVDb2x1bW4uanN4Iixjb21wb25lbnRzOlUsbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksVj1ELmRlZmF1bHQuYmluZChCLmRlZmF1bHQpLFc9KDAseC5kZWZpbmVNZXNzYWdlcykoe3lvdUxhYmVsOntpZDoiTmFtZUNvbHVtbi55b3VMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6InlvdSJ9LGFkbWluTGFiZWw6e2lkOiJOYW1lQ29sdW1uLmFkbWluTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJhZG1pbiJ9LG1ha2VBZG1pbkxhYmVsOntpZDoiTmFtZUNvbHVtbi5tYWtlQWRtaW5MYWJlbCIsZGVmYXVsdE1lc3NhZ2U6Im1ha2UgYWRtaW4ifSxjaGFuZ2VBY2NvdW50Um9sZU5vdGlmaWNhdGlvbjp7aWQ6Ik5hbWVDb2x1bW4uY2hhbmdlQWNjb3VudFJvbGVOb3RpZmljYXRpb24iLGRlZmF1bHRNZXNzYWdlOiJVc2VyIHJvbGUgZm9yICd7bmFtZX0nIHdhcyBjaGFuZ2VkLiJ9fSksWT10Lk5hbWVDb2x1bW49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKHoodCxlKSxlKX19KCJOYW1lQ29sdW1uIikoKG89KDAsai5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57Y3VycmVudFVzZXI6KDAsay51c2VySWRTZWxlY3RvcikoZSl9fSx7c2hvd01vZGFsOkguc2hvd01vZGFsQWN0aW9uLGZldGNoQWxsVXNlcnM6UC5mZXRjaEFsbFVzZXJzQWN0aW9uLHNob3dOb3RpZmljYXRpb246Ti5zaG93Tm90aWZpY2F0aW9ufSkpKHM9KDAseC5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLm9uQ2hhbmdlQWNjb3VudFJvbGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2hhbmdlQWNjb3VudFJvbGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZUFjY291bnRSb2xlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwscj10LnNob3dNb2RhbCxvPXQudmFsdWUscz10LmZldGNoQWxsVXNlcnMsaT1mdW5jdGlvbigpeygwLHcuZmV0Y2gpKEkuVVJMUy51c2VySW5mbyhvLnVzZXJJZCkse21ldGhvZDoiUFVUIixkYXRhOntyb2xlOm8udXNlclJvbGU9PT1NLkFETUlOSVNUUkFUT1I/TS5VU0VSOk0uQURNSU5JU1RSQVRPUn19KS50aGVuKGZ1bmN0aW9uKCl7cygpLGUucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7dHlwZTpOLk5PVElGSUNBVElPTl9UWVBFUy5TVUNDRVNTLG1lc3NhZ2U6bi5mb3JtYXRNZXNzYWdlKFcuY2hhbmdlQWNjb3VudFJvbGVOb3RpZmljYXRpb24se25hbWU6by5mdWxsTmFtZX0pfSl9KX07cih7aWQ6ImFsbFVzZXJzQ2hhbmdlUHJvamVjdFJvbGVNb2RhbCIsZGF0YTp7bmFtZTpvLmZ1bGxOYW1lLG9uU3VibWl0Oml9fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUudmFsdWUsbj1lLmNsYXNzTmFtZSxyPWUuY3VycmVudFVzZXIsbz1lLmludGw7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigibmFtZS1jb2wiLG4pfSx0LnBob3RvTG9hZGVkJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlYoImF2YXRhci13cmFwcGVyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpbWciLHtjbGFzc05hbWU6VigiYXZhdGFyIiksc3JjOkkuVVJMUy5kYXRhVXNlclBob3RvKHQudXNlcklkKSxhbHQ6ImF2YXRhciJ9KSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VigibmFtZSIpfSx0LmZ1bGxOYW1lKSx0LnVzZXJJZD09PXImJkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlYoImxhYmVsIiwieW91LWxhYmVsIil9LG8uZm9ybWF0TWVzc2FnZShXLnlvdUxhYmVsKSksdC51c2VyUm9sZT09PU0uQURNSU5JU1RSQVRPUj9BLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpWKCJsYWJlbCIsImFkbWluLWxhYmVsIiksb25DbGljazp0LnVzZXJJZCE9PXI/dGhpcy5vbkNoYW5nZUFjY291bnRSb2xlOnZvaWQgMH0sby5mb3JtYXRNZXNzYWdlKFcuYWRtaW5MYWJlbCkpOkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlYoImxhYmVsIiwibWFrZS1hZG1pbi1sYWJlbCIpLG9uQ2xpY2s6dGhpcy5vbkNoYW5nZUFjY291bnRSb2xlfSxvLmZvcm1hdE1lc3NhZ2UoVy5tYWtlQWRtaW5MYWJlbCkpKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtjbGFzc05hbWU6Ui5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHZhbHVlOlIuZGVmYXVsdC5vYmplY3QsY3VycmVudFVzZXI6Ui5kZWZhdWx0LnN0cmluZyxpbnRsOnguaW50bFNoYXBlLmlzUmVxdWlyZWQsc2hvd01vZGFsOlIuZGVmYXVsdC5mdW5jLGZldGNoQWxsVXNlcnM6Ui5kZWZhdWx0LmZ1bmMsc2hvd05vdGlmaWNhdGlvbjpSLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxpLmRlZmF1bHRQcm9wcz17dmFsdWU6e30sY3VycmVudFVzZXI6IiIsc2hvd01vZGFsOmZ1bmN0aW9uKCl7fSxmZXRjaEFsbFVzZXJzOmZ1bmN0aW9uKCl7fX0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiTmFtZUNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9uYW1lQ29sdW1uL25hbWVDb2x1bW4uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoViwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvbmFtZUNvbHVtbi9uYW1lQ29sdW1uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL25hbWVDb2x1bW4vbmFtZUNvbHVtbi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvbmFtZUNvbHVtbi9uYW1lQ29sdW1uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibmFtZS1jb2wiOiJuYW1lQ29sdW1uX19uYW1lLWNvbF9fXzNkcU5RIiwibWFrZS1hZG1pbi1sYWJlbCI6Im5hbWVDb2x1bW5fX21ha2UtYWRtaW4tbGFiZWxfX18xakQxTSIsImFkbWluLWxhYmVsIjoibmFtZUNvbHVtbl9fYWRtaW4tbGFiZWxfX18yOTdSUyIsbmFtZToibmFtZUNvbHVtbl9fbmFtZV9fXzNLMGxJIixsYWJlbDoibmFtZUNvbHVtbl9fbGFiZWxfX18yV3A4aiIsInlvdS1sYWJlbCI6Im5hbWVDb2x1bW5fX3lvdS1sYWJlbF9fXzFnTkV5IiwiYXZhdGFyLXdyYXBwZXIiOiJuYW1lQ29sdW1uX19hdmF0YXItd3JhcHBlcl9fXzNQM1B1IixhdmF0YXI6Im5hbWVDb2x1bW5fX2F2YXRhcl9fXzFvaDZfIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvcHJvamVjdHNBbmRSb2xlc0NvbHVtbi9wcm9qZWN0c0FuZFJvbGVzQ29sdW1uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQcm9qZWN0c0FuZFJvbGVzQ29sdW1uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Qcm9qZWN0c0FuZFJvbGVzQ29sdW1ufX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9wcm9qZWN0c0FuZFJvbGVzQ29sdW1uL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0c0FuZFJvbGVzQ29sdW1uPXZvaWQgMDt2YXIgbyxzLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vcHJvamVjdHNBbmRSb2xlc0NvbHVtbi5zY3NzIiksdz1yKEQpLE09e1Byb2plY3RzQW5kUm9sZXNDb2x1bW46e2Rpc3BsYXlOYW1lOiJQcm9qZWN0c0FuZFJvbGVzQ29sdW1uIn19LGs9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9wcm9qZWN0c0FuZFJvbGVzQ29sdW1uL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4uanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksST0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vcHJvamVjdHNBbmRSb2xlc0NvbHVtbi5qc3giLGNvbXBvbmVudHM6TSxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxQPXguZGVmYXVsdC5iaW5kKHcuZGVmYXVsdCksTj1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiICIpfSxIPXQuUHJvamVjdHNBbmRSb2xlc0NvbHVtbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsoSSh0LGUpLGUpfX0oIlByb2plY3RzQW5kUm9sZXNDb2x1bW4iKSgocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtleHBhbmRlZDohMX0sci5oYW5kbGVFeHBhbmQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX2hhbmRsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtleHBhbmRlZDohdGhpcy5zdGF0ZS5leHBhbmRlZH0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxuPWUudmFsdWUscj0oMCxhLmRlZmF1bHQpKG4uYXNzaWduZWRQcm9qZWN0cyksbz1yLnNsaWNlKDAsMikscz1yLnNsaWNlKDIpO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoInByb2plY3RzLWFuZC1yb2xlcy1jb2wiLHQpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpQKCJtb2JpbGUtbGFiZWwiLCJwcm9qZWN0cy1hbmQtcm9sZXMtbW9iaWxlLWxhYmVsIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkFsbFVzZXJzR3JpZC5wcm9qZWN0c0FuZFJvbGVzQ29sIixkZWZhdWx0TWVzc2FnZToiUHJvamVjdHMgYW5kIHJvbGVzIn0pKSxvLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2tleTplLGNsYXNzTmFtZTpQKCJwcm9qZWN0Iil9LGUsdDxvLmxlbmd0aC0xJiYiLCAiLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoInNob3duLW9uLW1vYmlsZSIpfSx0Pj0wJiYiLCAiLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoInByb2plY3Qtcm9sZSIpfSxOKG4uYXNzaWduZWRQcm9qZWN0c1tlXS5wcm9qZWN0Um9sZSkpKSl9KSx0aGlzLnN0YXRlLmV4cGFuZGVkJiZzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2tleTplLGNsYXNzTmFtZTpQKCJwcm9qZWN0Iiwic2hvd24tb24tbW9iaWxlIil9LGUsdDxzLmxlbmd0aCYmIiwgIixBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpQKCJwcm9qZWN0LXJvbGUiKX0sTihuLmFzc2lnbmVkUHJvamVjdHNbZV0ucHJvamVjdFJvbGUpKSl9KSxzLmxlbmd0aD4wJiYhdGhpcy5zdGF0ZS5leHBhbmRlZCYmQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6UCgic2hvdy1tb3JlLXByb2plY3RzIiksb25DbGljazp0aGlzLmhhbmRsZUV4cGFuZH0sIisiLHMubGVuZ3RoLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoIm1vYmlsZS1sYWJlbCIsInNob3ctbW9yZS1wcm9qZWN0cy1sYWJlbCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJQcm9qZWN0c0FuZFJvbGVzQ29sdW1uLm1vcmUiLGRlZmF1bHRNZXNzYWdlOiJtb3JlIn0pKSkpfX1dKSx0fShULkNvbXBvbmVudCksby5wcm9wVHlwZXM9e2NsYXNzTmFtZTpSLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6Ui5kZWZhdWx0Lm9iamVjdH0sby5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fSxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIlByb2plY3RzQW5kUm9sZXNDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvcHJvamVjdHNBbmRSb2xlc0NvbHVtbi9wcm9qZWN0c0FuZFJvbGVzQ29sdW1uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vcHJvamVjdHNBbmRSb2xlc0NvbHVtbi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJmb3JtYXRQcm9qZWN0Um9sZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzR3JpZC9wcm9qZWN0c0FuZFJvbGVzQ29sdW1uL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNHcmlkL3Byb2plY3RzQW5kUm9sZXNDb2x1bW4vcHJvamVjdHNBbmRSb2xlc0NvbHVtbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InByb2plY3RzLWFuZC1yb2xlcy1jb2wiOiJwcm9qZWN0c0FuZFJvbGVzQ29sdW1uX19wcm9qZWN0cy1hbmQtcm9sZXMtY29sX19fOGVHOTAiLGxhYmVsOiJwcm9qZWN0c0FuZFJvbGVzQ29sdW1uX19sYWJlbF9fX1dXWlFaIixwcm9qZWN0OiJwcm9qZWN0c0FuZFJvbGVzQ29sdW1uX19wcm9qZWN0X19fM0ZQUTAiLCJzaG93LW1vcmUtcHJvamVjdHMiOiJwcm9qZWN0c0FuZFJvbGVzQ29sdW1uX19zaG93LW1vcmUtcHJvamVjdHNfX18yX2VzNSIsIm1vYmlsZS1sYWJlbCI6InByb2plY3RzQW5kUm9sZXNDb2x1bW5fX21vYmlsZS1sYWJlbF9fX0V0YnhRIiwicHJvamVjdHMtYW5kLXJvbGVzLW1vYmlsZS1sYWJlbCI6InByb2plY3RzQW5kUm9sZXNDb2x1bW5fX3Byb2plY3RzLWFuZC1yb2xlcy1tb2JpbGUtbGFiZWxfX18xa0xlRSIsInNob3ctbW9yZS1wcm9qZWN0cy1sYWJlbCI6InByb2plY3RzQW5kUm9sZXNDb2x1bW5fX3Nob3ctbW9yZS1wcm9qZWN0cy1sYWJlbF9fXzJ1VHZPIiwic2hvd24tb24tbW9iaWxlIjoicHJvamVjdHNBbmRSb2xlc0NvbHVtbl9fc2hvd24tb24tbW9iaWxlX19fMWdUYUQiLCJwcm9qZWN0LXJvbGUiOiJwcm9qZWN0c0FuZFJvbGVzQ29sdW1uX19wcm9qZWN0LXJvbGVfX18xSlp5UiJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzUGFnZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFsbFVzZXJzUGFnZT12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vc3JjL2xheW91dHMvcGFnZUxheW91dC9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy9zY3JlZW5Mb2NrL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksRj1uKCIuL3NyYy9jb250cm9sbGVycy9hZG1pbmlzdHJhdGUvYWxsVXNlcnMvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxVPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvaW5kZXguanMiKSxHPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9hbGxVc2Vyc0dyaWQvaW5kZXguanMiKSx6PXtBbGxVc2Vyc1BhZ2U6e2Rpc3BsYXlOYW1lOiJBbGxVc2Vyc1BhZ2UifX0sVj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNQYWdlLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLFc9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2FsbFVzZXJzUGFnZS5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxZPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHtwYWdlVGl0bGU6e2lkOiJhZG1pbmlzdHJhdGVVc2Vyc1BhZ2UuYWxsVXNlcnMiLGRlZmF1bHRNZXNzYWdlOiJBbGwgdXNlcnMifSxkZWxldGVNb2RhbEhlYWRlcjp7aWQ6ImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5kZWxldGVNb2RhbEhlYWRlciIsZGVmYXVsdE1lc3NhZ2U6IkRlbGV0ZSB1c2VyIn0sZGVsZXRlTW9kYWxNdWx0aXBsZUhlYWRlcjp7aWQ6ImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5kZWxldGVNb2RhbE11bHRpcGxlSGVhZGVyIixkZWZhdWx0TWVzc2FnZToiRGVsZXRlIHVzZXIncyJ9LGRlbGV0ZU1vZGFsQ29udGVudDp7aWQ6ImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5kZWxldGVNb2RhbENvbnRlbnQiLGRlZmF1bHRNZXNzYWdlOiJBcmUgeW91IHN1cmUgdG8gZGVsZXRlIHVzZXIgPGI+J3tuYW1lfSc8L2I+PyJ9LGRlbGV0ZU1vZGFsTXVsdGlwbGVDb250ZW50OntpZDoiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmRlbGV0ZU1vZGFsTXVsdGlwbGVDb250ZW50IixkZWZhdWx0TWVzc2FnZToiQXJlIHlvdSBzdXJlIHRvIGRlbGV0ZSB1c2Vycz8gPGJyPiA8Yj57bmFtZXN9PC9iPiJ9LHN1Y2Nlc3M6e2lkOiJhZG1pbmlzdHJhdGVVc2Vyc1BhZ2Uuc3VjY2VzcyIsZGVmYXVsdE1lc3NhZ2U6IlVzZXIgd2FzIGRlbGV0ZWQifSxzdWNjZXNzTXVsdGlwbGU6e2lkOiJhZG1pbmlzdHJhdGVVc2Vyc1BhZ2Uuc3VjY2Vzc011bHRpcGxlIixkZWZhdWx0TWVzc2FnZToiVXNlcidzIHdlcmUgZGVsZXRlZCJ9LGVycm9yOntpZDoiYWRtaW5pc3RyYXRlVXNlcnNQYWdlLmVycm9yIixkZWZhdWx0TWVzc2FnZToiRXJyb3Igd2hlbiBkZWxldGluZyB1c2VyIn0sZXJyb3JNdWx0aXBsZTp7aWQ6ImFkbWluaXN0cmF0ZVVzZXJzUGFnZS5lcnJvck11bHRpcGxlIixkZWZhdWx0TWVzc2FnZToiRXJyb3Igd2hlbiBkZWxldGluZyB1c2VyJ3MifX0pLHE9dC5BbGxVc2Vyc1BhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBWKFcodCxlKSxlKX19KCJBbGxVc2Vyc1BhZ2UiKSgobz0oMCx4LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnt1cmw6SC5VUkxTLmFsbFVzZXJzKGUpLHVzZXJzOigwLEYuYWxsVXNlcnNTZWxlY3RvcikoZSksbG9hZGluZzooMCxGLmxvYWRpbmdTZWxlY3RvcikoZSksc2VsZWN0ZWRVc2VyczooMCxGLnNlbGVjdGVkVXNlcnNTZWxlY3RvcikoZSksdXNlckluZm86KDAsQi51c2VySW5mb1NlbGVjdG9yKShlKSx1c2VySWQ6KDAsQi51c2VySWRTZWxlY3RvcikoZSl9fSx7dG9nZ2xlVXNlclNlbGVjdGlvbkFjdGlvbjpGLnRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb24sdG9nZ2xlQWxsVXNlcnNBY3Rpb246Ri50b2dnbGVBbGxVc2Vyc0FjdGlvbixkZWxldGVJdGVtc0FjdGlvbjpGLmRlbGV0ZUl0ZW1zQWN0aW9uLHNob3dTY3JlZW5Mb2NrQWN0aW9uOmsuc2hvd1NjcmVlbkxvY2tBY3Rpb24saGlkZVNjcmVlbkxvY2tBY3Rpb246ay5oaWRlU2NyZWVuTG9ja0FjdGlvbixzaG93Tm90aWZpY2F0aW9uOkkuc2hvd05vdGlmaWNhdGlvbix1bnNlbGVjdEFsbFVzZXJzQWN0aW9uOkYudW5zZWxlY3RBbGxVc2Vyc0FjdGlvbixmZXRjaEFsbFVzZXJzQWN0aW9uOkYuZmV0Y2hBbGxVc2Vyc0FjdGlvbn0pLHM9KDAsTS53aXRoUGFnaW5hdGlvbikoe3BhZ2luYXRpb25TZWxlY3RvcjpGLmFsbFVzZXJzUGFnaW5hdGlvblNlbGVjdG9yfSksbyhpPXMoaT0oMCxMLmluamVjdEludGwpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0QnJlYWRjcnVtYnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZU9uZVVzZXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZU9uZVVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlVG9nZ2xlQWxsVXNlclNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlVG9nZ2xlQWxsVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jb25maXJtRGVsZXRlSXRlbXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NvbmZpcm1EZWxldGVJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVyRGVsZXRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlckRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlckRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29uZmlybURlbGV0ZUl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb25maXJtRGVsZXRlSXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZU9uZVVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU9uZVVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3t0aXRsZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLnBhZ2VUaXRsZSl9XX19LHtrZXk6Il9faGFuZGxlT25lVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT25lVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT25lVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT25lVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT25lVXNlclNlbGVjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLnRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb24oZSl9fSx7a2V5OiJfX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVRvZ2dsZUFsbFVzZXJTZWxlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVzZXJzQXZhaWxhYmxlRm9yU2VsZWN0aW9uO3RoaXMucHJvcHMudG9nZ2xlQWxsVXNlcnNBY3Rpb24oZSl9fSx7a2V5OiJfX2NvbmZpcm1EZWxldGVJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29uZmlybURlbGV0ZUl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb25maXJtRGVsZXRlSXRlbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbmZpcm1EZWxldGVJdGVtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29uZmlybURlbGV0ZUl0ZW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZH0pO3RoaXMucHJvcHMuc2hvd1NjcmVlbkxvY2tBY3Rpb24oKSwoMCxOLmZldGNoKShILlVSTFMudXNlcigpLHttZXRob2Q6ImRlbGV0ZSIsZGF0YTp7aWRzOm59fSkudGhlbihmdW5jdGlvbigpe3QucHJvcHMudW5zZWxlY3RBbGxVc2Vyc0FjdGlvbigpLHQucHJvcHMuZmV0Y2hBbGxVc2Vyc0FjdGlvbigpLHQucHJvcHMuaGlkZVNjcmVlbkxvY2tBY3Rpb24oKSx0LnByb3BzLnNob3dOb3RpZmljYXRpb24oe21lc3NhZ2U6MT09PWUubGVuZ3RoP3QucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFkuc3VjY2Vzcyk6dC5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoWS5zdWNjZXNzTXVsdGlwbGUpLHR5cGU6SS5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pfSkuY2F0Y2goZnVuY3Rpb24oKXt0LnByb3BzLmhpZGVTY3JlZW5Mb2NrQWN0aW9uKCksdC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOjE9PT1lLmxlbmd0aD90LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLmVycm9yKTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLmVycm9yTXVsdGlwbGUpLHR5cGU6SS5OT1RJRklDQVRJT05fVFlQRVMuRVJST1J9KX0pfX0se2tleToiX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVyRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc2VsZWN0ZWRVc2VycyxuPWUuaW50bDt0aGlzLnByb3BzLmRlbGV0ZUl0ZW1zQWN0aW9uKHRoaXMucHJvcHMuc2VsZWN0ZWRVc2Vycyx7b25Db25maXJtOnRoaXMuY29uZmlybURlbGV0ZUl0ZW1zLGhlYWRlcjoxPT09dC5sZW5ndGg/bi5mb3JtYXRNZXNzYWdlKFkuZGVsZXRlTW9kYWxIZWFkZXIpOm4uZm9ybWF0TWVzc2FnZShZLmRlbGV0ZU1vZGFsTXVsdGlwbGVIZWFkZXIpLG1haW5Db250ZW50OjE9PT10Lmxlbmd0aD9uLmZvcm1hdE1lc3NhZ2UoWS5kZWxldGVNb2RhbENvbnRlbnQse25hbWU6dGhpcy5zZWxlY3RlZFVzZXJzTmFtZXN9KTpuLmZvcm1hdE1lc3NhZ2UoWS5kZWxldGVNb2RhbE11bHRpcGxlQ29udGVudCx7bmFtZXM6dGhpcy5zZWxlY3RlZFVzZXJzTmFtZXN9KSxldmVudHNJbmZvOntjbG9zZUljb246UC5BRE1JTl9BTExfVVNFUlNfUEFHRV9NT0RBTF9FVkVOVFMuQ0xPU0VfSUNPTl9ERUxFVEVfTU9EQUwsY2FuY2VsQnRuOlAuQURNSU5fQUxMX1VTRVJTX1BBR0VfTU9EQUxfRVZFTlRTLkNBTkNFTF9CVE5fREVMRVRFX01PREFMLGRlbGV0ZUJ0bjpQLkFETUlOX0FMTF9VU0VSU19QQUdFX01PREFMX0VWRU5UUy5ERUxFVEVfQlROX0RFTEVURV9NT0RBTH19KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY3RpdmVQYWdlLG49ZS5pdGVtQ291bnQscj1lLnBhZ2VDb3VudCxvPWUucGFnZVNpemUscz1lLm9uQ2hhbmdlUGFnZSxpPWUub25DaGFuZ2VQYWdlU2l6ZSxhPWUubG9hZGluZyxsPWUudXNlcnMsdT1lLnNlbGVjdGVkVXNlcnM7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuUGFnZUxheW91dCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuUGFnZUhlYWRlcix7YnJlYWRjcnVtYnM6dGhpcy5nZXRCcmVhZGNydW1icygpfSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5QYWdlU2VjdGlvbixudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuVXNlcnNUb29sYmFyLHtvbkRlbGV0ZTp0aGlzLmhhbmRsZXJEZWxldGUsc2VsZWN0ZWRVc2Vyczp1fSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5BbGxVc2Vyc0dyaWQse2RhdGE6bCxsb2FkaW5nOmEsc2VsZWN0ZWRJdGVtczp1LG9uVG9nZ2xlU2VsZWN0aW9uOnRoaXMuaGFuZGxlT25lVXNlclNlbGVjdGlvbixleGNsdWRlRnJvbVNlbGVjdGlvbjp0aGlzLmV4Y2x1ZGVGcm9tU2VsZWN0aW9uLG9uVG9nZ2xlU2VsZWN0QWxsOnRoaXMuaGFuZGxlVG9nZ2xlQWxsVXNlclNlbGVjdGlvbn0pLCEhciYmIWEmJkMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuUGFnaW5hdGlvblRvb2xiYXIse2FjdGl2ZVBhZ2U6dCxpdGVtQ291bnQ6bixwYWdlQ291bnQ6cixwYWdlU2l6ZTpvLG9uQ2hhbmdlUGFnZTpzLG9uQ2hhbmdlUGFnZVNpemU6aX0pKSl9fSx7a2V5OiJleGNsdWRlRnJvbVNlbGVjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucHJvcHMudXNlckluZm9dfX0se2tleToic2VsZWN0ZWRVc2Vyc05hbWVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3RlZFVzZXJzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4nIicrZS5mdWxsTmFtZSsnIid9KS5qb2luKCIsICIpfX0se2tleToidXNlcnNBdmFpbGFibGVGb3JTZWxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnVzZXJzLG49ZS51c2VySW5mby5pZDtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQhPT1ufSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17YWN0aXZlUGFnZTpqLmRlZmF1bHQubnVtYmVyLGl0ZW1Db3VudDpqLmRlZmF1bHQubnVtYmVyLHBhZ2VDb3VudDpqLmRlZmF1bHQubnVtYmVyLHBhZ2VTaXplOmouZGVmYXVsdC5udW1iZXIsc29ydGluZ0NvbHVtbjpqLmRlZmF1bHQuc3RyaW5nLHNvcnRpbmdEaXJlY3Rpb246ai5kZWZhdWx0LnN0cmluZyxzaG93TW9kYWxBY3Rpb246ai5kZWZhdWx0LmZ1bmMsb25DaGFuZ2VQYWdlOmouZGVmYXVsdC5mdW5jLG9uQ2hhbmdlUGFnZVNpemU6ai5kZWZhdWx0LmZ1bmMsbG9hZGluZzpqLmRlZmF1bHQuYm9vbCx1c2VyczpqLmRlZmF1bHQuYXJyYXlPZihqLmRlZmF1bHQub2JqZWN0KSxzZWxlY3RlZFVzZXJzOmouZGVmYXVsdC5hcnJheU9mKGouZGVmYXVsdC5vYmplY3QpLGludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx0b2dnbGVBbGxVc2Vyc0FjdGlvbjpqLmRlZmF1bHQuZnVuYyx1bnNlbGVjdEFsbFVzZXJzQWN0aW9uOmouZGVmYXVsdC5mdW5jLHRvZ2dsZVVzZXJTZWxlY3Rpb25BY3Rpb246ai5kZWZhdWx0LmZ1bmMsdXNlckluZm86ai5kZWZhdWx0Lm9iamVjdCxkZWxldGVJdGVtc0FjdGlvbjpqLmRlZmF1bHQuZnVuYyx1c2VySWQ6ai5kZWZhdWx0LnN0cmluZyxzaG93U2NyZWVuTG9ja0FjdGlvbjpqLmRlZmF1bHQuZnVuYyxoaWRlU2NyZWVuTG9ja0FjdGlvbjpqLmRlZmF1bHQuZnVuYyxzaG93Tm90aWZpY2F0aW9uOmouZGVmYXVsdC5mdW5jLGZldGNoQWxsVXNlcnNBY3Rpb246ai5kZWZhdWx0LmZ1bmN9LGEuZGVmYXVsdFByb3BzPXthY3RpdmVQYWdlOjEsaXRlbUNvdW50Om51bGwscGFnZUNvdW50Om51bGwscGFnZVNpemU6TS5ERUZBVUxUX1BBR0lOQVRJT05bTS5TSVpFX0tFWV0sc29ydGluZ0NvbHVtbjpudWxsLHNvcnRpbmdEaXJlY3Rpb246bnVsbCx1c2VySWQ6IiIsc2hvd01vZGFsQWN0aW9uOmZ1bmN0aW9uKCl7fSxvbkNoYW5nZVBhZ2U6ZnVuY3Rpb24oKXt9LG9uQ2hhbmdlUGFnZVNpemU6ZnVuY3Rpb24oKXt9LGxvYWRpbmc6ITEsdXNlcnM6W10sc2VsZWN0ZWRVc2VyczpbXSx0b2dnbGVBbGxVc2Vyc0FjdGlvbjpmdW5jdGlvbigpe30sdW5zZWxlY3RBbGxVc2Vyc0FjdGlvbjpmdW5jdGlvbigpe30sdG9nZ2xlVXNlclNlbGVjdGlvbkFjdGlvbjpmdW5jdGlvbigpe30sdXNlckluZm86e30sZGVsZXRlSXRlbXNBY3Rpb246ZnVuY3Rpb24oKXt9LHNob3dTY3JlZW5Mb2NrQWN0aW9uOmZ1bmN0aW9uKCl7fSxoaWRlU2NyZWVuTG9ja0FjdGlvbjpmdW5jdGlvbigpe30sc2hvd05vdGlmaWNhdGlvbjpmdW5jdGlvbigpe30sZmV0Y2hBbGxVc2Vyc0FjdGlvbjpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiQWxsVXNlcnNQYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNQYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNQYWdlLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvYWxsVXNlcnNQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbGxVc2Vyc1BhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFsbFVzZXJzUGFnZX19KTt2YXIgbz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvbW9kYWxzL2NoYW5nZVByb2plY3RSb2xlTW9kYWwvaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uQ2hhbmdlUHJvamVjdFJvbGVNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9tb2RhbHMvY2hhbmdlUHJvamVjdFJvbGVNb2RhbC9jaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2hhbmdlUHJvamVjdFJvbGVNb2RhbD12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9pbmRleC5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPXtDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsOntkaXNwbGF5TmFtZToiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbCJ9fSxrPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9tb2RhbHMvY2hhbmdlUHJvamVjdFJvbGVNb2RhbC9jaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmpzeCIsY29tcG9uZW50czpNLGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLEk9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL21vZGFscy9jaGFuZ2VQcm9qZWN0Um9sZU1vZGFsL2NoYW5nZVByb2plY3RSb2xlTW9kYWwuanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksUD0oMCx3LmRlZmluZU1lc3NhZ2VzKSh7Y2hhbmdlQWNjb3VudFJvbGVUZXh0OntpZDoiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbC5jaGFuZ2VBY2NvdW50Um9sZVRleHQiLGRlZmF1bHRNZXNzYWdlOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBhY2NvdW50IHJvbGUgZm9yIHRoZSAne25hbWV9JyA/In0sY2hhbmdlQWNjb3VudFJvbGVUaXRsZTp7aWQ6IkNoYW5nZVByb2plY3RSb2xlTW9kYWwuY2hhbmdlQWNjb3VudFJvbGVUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkNoYW5nZSByb2xlIn0sc3VibWl0VGV4dDp7aWQ6IkNoYW5nZVByb2plY3RSb2xlTW9kYWwuc3VibWl0VGV4dCIsZGVmYXVsdE1lc3NhZ2U6IkNoYW5nZSJ9LGNhbmNlbFRleHQ6e2lkOiJDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmNhbmNlbFRleHQiLGRlZmF1bHRNZXNzYWdlOiJDYW5jZWwifX0pLE49dC5DaGFuZ2VQcm9qZWN0Um9sZU1vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gayhJKHQsZSksZSl9fSgiQ2hhbmdlUHJvamVjdFJvbGVNb2RhbCIpKChvPSgwLEQud2l0aE1vZGFsKSgiYWxsVXNlcnNDaGFuZ2VQcm9qZWN0Um9sZU1vZGFsIikscz0oMCxqLmRlZmF1bHQpKCksbyhpPXMoaT0oMCx3LmluamVjdEludGwpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmRhdGEsdD1lLm9uU3VibWl0LG49ZS5uYW1lLHI9dGhpcy5wcm9wcy5pbnRsO3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChELk1vZGFsTGF5b3V0LHt0aXRsZTpyLmZvcm1hdE1lc3NhZ2UoUC5jaGFuZ2VBY2NvdW50Um9sZVRpdGxlKSxva0J1dHRvbjp7dGV4dDpyLmZvcm1hdE1lc3NhZ2UoUC5zdWJtaXRUZXh0KSxkYW5nZXI6ITEsb25DbGljazpmdW5jdGlvbihlKXtlKCksdCgpfX0sY2FuY2VsQnV0dG9uOnt0ZXh0OnIuZm9ybWF0TWVzc2FnZShQLmNhbmNlbFRleHQpfX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxyLmZvcm1hdE1lc3NhZ2UoUC5jaGFuZ2VBY2NvdW50Um9sZVRleHQse25hbWU6bn0pKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17ZGF0YTpMLmRlZmF1bHQub2JqZWN0LGludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCx0cmFja2luZzpMLmRlZmF1bHQuc2hhcGUoe2dldFRyYWNraW5nRGF0YTpMLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGEuZGVmYXVsdFByb3BzPXtkYXRhOnt9fSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE4sIkNoYW5nZVByb2plY3RSb2xlTW9kYWwiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9tb2RhbHMvY2hhbmdlUHJvamVjdFJvbGVNb2RhbC9jaGFuZ2VQcm9qZWN0Um9sZU1vZGFsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFAsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvbW9kYWxzL2NoYW5nZVByb2plY3RSb2xlTW9kYWwvY2hhbmdlUHJvamVjdFJvbGVNb2RhbC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS9tb2RhbHMvY2hhbmdlUHJvamVjdFJvbGVNb2RhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL21vZGFscy9jaGFuZ2VQcm9qZWN0Um9sZU1vZGFsL2NoYW5nZVByb2plY3RSb2xlTW9kYWwuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNoYW5nZVByb2plY3RSb2xlTW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNoYW5nZVByb2plY3RSb2xlTW9kYWx9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWN0aW9uUGFuZWw9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEw9cih4KSxEPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdEJ1dHRvbi9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29tbW9uL2ltZy9leHBvcnQtaW5saW5lLnN2ZyIpLE09cih3KSxrPW4oIi4vc3JjL2NvbW1vbi9pbWcvaW52aXRlLWlubGluZS5zdmciKSxJPXIoayksUD1uKCIuL3NyYy9jb21tb24vaW1nL2FkZC11c2VyLWlubGluZS5zdmciKSxOPXIoUCksSD1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLEY9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9jb25zdGFudHMuanMiKSxCPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuc2NzcyIpLFU9cihCKSxHPXtBY3Rpb25QYW5lbDp7ZGlzcGxheU5hbWU6IkFjdGlvblBhbmVsIn19LHo9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9hY3Rpb25QYW5lbC5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxWPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksVz1MLmRlZmF1bHQuYmluZChVLmRlZmF1bHQpLFk9KDAsai5kZWZpbmVNZXNzYWdlcykoKG89e30sKDAsRS5kZWZhdWx0KShvLEYuRVhQT1JULHtpZDoiQWxsVXNlcnNQYWdlLmV4cG9ydCIsZGVmYXVsdE1lc3NhZ2U6IkV4cG9ydCJ9KSwoMCxFLmRlZmF1bHQpKG8sRi5JTlZJVEVfVVNFUix7aWQ6IkFsbFVzZXJzUGFnZS5pbnZpdGVVc2VyIixkZWZhdWx0TWVzc2FnZToiSW52aXRlIHVzZXIifSksKDAsRS5kZWZhdWx0KShvLEYuQUREX1VTRVIse2lkOiJBbGxVc2Vyc1BhZ2UuQWRkVXNlciIsZGVmYXVsdE1lc3NhZ2U6IkFkZCB1c2VyIn0pLG8pKSxxPXQuQWN0aW9uUGFuZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB6KFYodCxlKSxlKX19KCJBY3Rpb25QYW5lbCIpKCgwLGouaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkV4cG9ydFVzZXJzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlbmRlckhlYWRlckJ1dHRvbnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlckhlYWRlckJ1dHRvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJIZWFkZXJCdXR0b25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJIZWFkZXJCdXR0b25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkV4cG9ydFVzZXJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLmhyZWY9SC5VUkxTLmV4cG9ydFVzZXJzKCl9fSx7a2V5OiJfX3JlbmRlckhlYWRlckJ1dHRvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlckhlYWRlckJ1dHRvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlckhlYWRlckJ1dHRvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSx0PVt7a2V5OkYuRVhQT1JULGljb246TS5kZWZhdWx0LG9uQ2xpY2s6dGhpcy5vbkV4cG9ydFVzZXJzfSx7a2V5OkYuSU5WSVRFX1VTRVIsaWNvbjpJLmRlZmF1bHR9LHtrZXk6Ri5BRERfVVNFUixpY29uOk4uZGVmYXVsdH1dO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlcoImFjdGlvbi1idXR0b25zIil9LHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQua2V5LHI9dC5pY29uLG89dC5vbkNsaWNrO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlcoImFjdGlvbi1idXR0b24iKSxrZXk6bn0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5HaG9zdEJ1dHRvbix7aWNvbjpyLG9uQ2xpY2s6b30sZShZW25dKSkpfSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlckhlYWRlckJ1dHRvbnMoKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOmouaW50bFNoYXBlLmlzUmVxdWlyZWR9LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiQWN0aW9uUGFuZWwiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYWN0aW9uLWJ1dHRvbnMiOiJhY3Rpb25QYW5lbF9fYWN0aW9uLWJ1dHRvbnNfX19fQ01yQSIsImFjdGlvbi1idXR0b24iOiJhY3Rpb25QYW5lbF9fYWN0aW9uLWJ1dHRvbl9fXzJlSVZpIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2FjdGlvblBhbmVsL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5FWFBPUlQ9ImV4cG9ydCIsbz10LklOVklURV9VU0VSPSJpbnZpdGUgdXNlciIscz10LkFERF9VU0VSPSJhZGQgdXNlciI7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIkVYUE9SVCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJJTlZJVEVfVVNFUiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJBRERfVVNFUiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2FjdGlvblBhbmVsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBY3Rpb25QYW5lbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQWN0aW9uUGFuZWx9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL3VzZXJzVG9vbGJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXNlcnNUb29sYmFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Vc2Vyc1Rvb2xiYXJ9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL3VzZXJzVG9vbGJhci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVXNlcnNUb29sYmFyPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksQz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLE89bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci9hY3Rpb25QYW5lbC9pbmRleC5qcyIpLFM9bigiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci91c2Vyc1Rvb2xiYXIuc2NzcyIpLFI9cihTKSxqPVQuZGVmYXVsdC5iaW5kKFIuZGVmYXVsdCkseD0oMCxBLmRlZmluZU1lc3NhZ2VzKSh7ZGVsZXRlTW9kYWxDb250ZW50OntpZDoiYWRtaW5pc3RyYXRlVXNlcnNQYWdlVG9vbGJhci5hbGxVc2VycyIsZGVmYXVsdE1lc3NhZ2U6Intjb3VudH0gaXRlbXMgc2VsZWN0ZWQifX0pLEw9dC5Vc2Vyc1Rvb2xiYXI9KDAsQS5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldFNlbGVjdGVkVXNlcnNDb3VudD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0U2VsZWN0ZWRVc2Vyc0NvdW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzU2hvd0J1bGtFZGl0UGFuZWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVyUmlnaHRTaWRlQ29tcG9uZW50PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJSaWdodFNpZGVDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19yZW5kZXJSaWdodFNpZGVDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclJpZ2h0U2lkZUNvbXBvbmVudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNTaG93QnVsa0VkaXRQYW5lbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNTaG93QnVsa0VkaXRQYW5lbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U2VsZWN0ZWRVc2Vyc0NvdW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTZWxlY3RlZFVzZXJzQ291bnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFNlbGVjdGVkVXNlcnNDb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U2VsZWN0ZWRVc2Vyc0NvdW50X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTZWxlY3RlZFVzZXJzQ291bnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFNlbGVjdGVkVXNlcnNDb3VudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U2VsZWN0ZWRVc2Vyc0NvdW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0ZWRVc2Vycy5sZW5ndGh9fSx7a2V5OiJfX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzU2hvd0J1bGtFZGl0UGFuZWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTZWxlY3RlZFVzZXJzQ291bnQoKT4wfX0se2tleToiX19yZW5kZXJSaWdodFNpZGVDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclJpZ2h0U2lkZUNvbXBvbmVudF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyUmlnaHRTaWRlQ29tcG9uZW50X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJSaWdodFNpZGVDb21wb25lbnRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlclJpZ2h0U2lkZUNvbXBvbmVudF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLm9uRGVsZXRlO3JldHVybiB0aGlzLmlzU2hvd0J1bGtFZGl0UGFuZWwoKT9iLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmooInVzZXJzLWJ1bGstdG9vbGJhciIpfSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmooInVzZXJzLWJ1bGstdG9vbGJhci1pdGVtIil9LHQuZm9ybWF0TWVzc2FnZSh4LmRlbGV0ZU1vZGFsQ29udGVudCx7Y291bnQ6dGhpcy5nZXRTZWxlY3RlZFVzZXJzQ291bnQoKX0pKSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmooWyJ1c2Vycy1idWxrLWJ1dHRvbiIsInVzZXJzLWJ1bGstdG9vbGJhci1pdGVtIl0pLG9uQ2xpY2s6bn0sdC5mb3JtYXRNZXNzYWdlKEMuQ09NTU9OX0xPQ0FMRV9LRVlTLkRFTEVURSkpKTpiLmRlZmF1bHQuY3JlYXRlRWxlbWVudChPLkFjdGlvblBhbmVsLG51bGwpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmooInVzZXJzLXRvb2xiYXIiKX0sYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCksdGhpcy5yZW5kZXJSaWdodFNpZGVDb21wb25lbnQoKSl9fV0pLHR9KGcuUHVyZUNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6QS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxzZWxlY3RlZFVzZXJzOnkuZGVmYXVsdC5hcnJheU9mKHkuZGVmYXVsdC5vYmplY3QpLG9uRGVsZXRlOnkuZGVmYXVsdC5mdW5jfSxzLmRlZmF1bHRQcm9wcz17c2VsZWN0ZWRVc2VyczpbXSxvbkRlbGV0ZTpmdW5jdGlvbigpe319LG89aSkpfHxvOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihMLCJVc2Vyc1Rvb2xiYXIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL2FsbFVzZXJzUGFnZS91c2Vyc1Rvb2xiYXIvdXNlcnNUb29sYmFyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9hbGxVc2Vyc1BhZ2UvdXNlcnNUb29sYmFyL3VzZXJzVG9vbGJhci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih4LCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci91c2Vyc1Rvb2xiYXIuanN4IikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vYWxsVXNlcnNQYWdlL3VzZXJzVG9vbGJhci91c2Vyc1Rvb2xiYXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJ1c2Vycy10b29sYmFyIjoidXNlcnNUb29sYmFyX191c2Vycy10b29sYmFyX19fMzBFZksiLCJ1c2Vycy1idWxrLXRvb2xiYXIiOiJ1c2Vyc1Rvb2xiYXJfX3VzZXJzLWJ1bGstdG9vbGJhcl9fXzNQdFpjIiwidXNlcnMtYnVsay10b29sYmFyLWl0ZW0iOiJ1c2Vyc1Rvb2xiYXJfX3VzZXJzLWJ1bGstdG9vbGJhci1pdGVtX19fQ3VkUFoiLCJ1c2Vycy1idWxrLWJ1dHRvbiI6InVzZXJzVG9vbGJhcl9fdXNlcnMtYnVsay1idXR0b25fX18xUVFpUyJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcGx1Z2luc1BhZ2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3BsdWdpbnNQYWdlL3BsdWdpbnNQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQbHVnaW5zUGFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUGx1Z2luc1BhZ2V9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wbHVnaW5zUGFnZS9wbHVnaW5zUGFnZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10LlBsdWdpbnNQYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiaDEiLG51bGwsIlBsdWdpbnMgcGFnZSIpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihuLCJQbHVnaW5zUGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcGx1Z2luc1BhZ2UvcGx1Z2luc1BhZ2UuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNFbnRpdGllcy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkV2ZW50c0VudGl0aWVzPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpLE09cih3KSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvaW5kZXguanMiKSxJPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksUD1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2FjdGlvblR5cGVzLmpzIiksTj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2V2ZW50c09iamVjdFR5cGVzLmpzIiksSD17RXZlbnRzRW50aXRpZXM6e2Rpc3BsYXlOYW1lOiJFdmVudHNFbnRpdGllcyJ9fSxGPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0VudGl0aWVzLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLEI9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzRW50aXRpZXMuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksVT0oMCxELmRlZmluZU1lc3NhZ2VzKSh7dGltZUNvbDp7aWQ6IkV2ZW50c0dyaWQudGltZUNvbCIsZGVmYXVsdE1lc3NhZ2U6IlRpbWUifSx1c2VyQ29sOntpZDoiRXZlbnRzR3JpZC51c2VyQ29sIixkZWZhdWx0TWVzc2FnZToiVXNlciJ9LGFjdGlvbkNvbDp7aWQ6IkV2ZW50c0dyaWQuYWN0aW9uQ29sIixkZWZhdWx0TWVzc2FnZToiQWN0aW9uIn0sb2JqZWN0VHlwZUNvbDp7aWQ6IkV2ZW50c0dyaWQub2JqZWN0VHlwZUNvbCIsZGVmYXVsdE1lc3NhZ2U6Ik9iamVjdCBUeXBlIn0sb2JqZWN0TmFtZUNvbDp7aWQ6IkV2ZW50c0dyaWQub2JqZWN0TmFtZUNvbCIsZGVmYXVsdE1lc3NhZ2U6Ik9iamVjdCBOYW1lIn0sb2xkVmFsdWVDb2w6e2lkOiJFdmVudHNHcmlkLm9sZFZhbHVlQ29sIixkZWZhdWx0TWVzc2FnZToiT2xkIFZhbHVlIn0sbmV3VmFsdWVDb2w6e2lkOiJFdmVudHNHcmlkLm5ld1ZhbHVlQ29sIixkZWZhdWx0TWVzc2FnZToiTmV3IFZhbHVlIn0sY29udGFpbnM6e2lkOiJFdmVudHNHcmlkLmNvbnRhaW5zIixkZWZhdWx0TWVzc2FnZToiQ29udGFpbnMifX0pLEc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBGKEIodCxlKSxlKX19KCJFdmVudHNFbnRpdGllcyIpKCgwLEQuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRFbnRpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxiLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAseS5kZWZhdWx0KSh0LGUpLCgwLGguZGVmYXVsdCkodCxbe2tleToiX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS5maWx0ZXJWYWx1ZXM7cmV0dXJuW3tpZDpJLkFDVElWSVRJRVMsY29tcG9uZW50OmsuRW50aXR5Q29udGFpbnMsdmFsdWU6SS5BQ1RJVklUSUVTIGluIG4/bltJLkFDVElWSVRJRVNdOntmaWx0ZXJpbmdGaWVsZDpJLkFDVElWSVRJRVMsdmFsdWU6IiJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShVLmNvbnRhaW5zKSxhY3RpdmU6ITAscmVtb3ZhYmxlOiExfSx7aWQ6SS5FTlRJVFlfQUNUSU9OLGNvbXBvbmVudDprLkVudGl0eURyb3Bkb3duLHZhbHVlOm5bSS5FTlRJVFlfQUNUSU9OXXx8e3ZhbHVlOltQLlNUQVJUX0xBVU5DSCxQLkZJTklTSF9MQVVOQ0gsUC5ERUxFVEVfTEFVTkNILFAuUE9TVF9JU1NVRSxQLkxJTktfSVNTVUUsUC5VTkxJTktfSVNTVUUsUC5DUkVBVEVfVVNFUixQLkNSRUFURV9EQVNIQk9BUkQsUC5VUERBVEVfREFTSEJPQVJELFAuREVMRVRFX0RBU0hCT0FSRCxQLkNSRUFURV9XSURHRVQsUC5VUERBVEVfV0lER0VULFAuREVMRVRFX1dJREdFVCxQLkNSRUFURV9GSUxURVIsUC5VUERBVEVfRklMVEVSLFAuREVMRVRFX0ZJTFRFUixQLkNSRUFURV9CVFMsUC5VUERBVEVfQlRTLFAuREVMRVRFX0JUUyxQLlVQREFURV9QUk9KRUNULFAuVVBEQVRFX0FOQUxZWkVSLFAuR0VORVJBVEVfSU5ERVgsUC5ERUxFVEVfSU5ERVgsUC5VUERBVEVfREVGRUNULFAuREVMRVRFX0RFRkVDVCxQLlNUQVJUX0lNUE9SVCxQLkZJTklTSF9JTVBPUlQsUC5VUERBVEVfTk9USUZJQ0FUSU9OUyxQLlNXSVRDSF9PTl9OT1RJRklDQVRJT05TLFAuU1dJVENIX09GRl9OT1RJRklDQVRJT05TXS5qb2luKCIsIiksY29uZGl0aW9uOkkuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVS5hY3Rpb25Db2wpLGFjdGl2ZTohMCxyZW1vdmFibGU6ITEsbWV0YTp7bXVsdGlwbGU6ITAsc2VsZWN0QWxsOiEwLG9wdGlvbnM6W3tsYWJlbDoiQ3JlYXRlIGRhc2hib2FyZCIsdmFsdWU6UC5DUkVBVEVfREFTSEJPQVJEfSx7bGFiZWw6IlVwZGF0ZSBEYXNoYm9hcmQiLHZhbHVlOlAuVVBEQVRFX0RBU0hCT0FSRH0se2xhYmVsOiJEZWxldGUgZGFzaGJvYXJkIix2YWx1ZTpQLkRFTEVURV9EQVNIQk9BUkR9LHtsYWJlbDoiQ3JlYXRlIHdpZGdldCIsdmFsdWU6UC5DUkVBVEVfV0lER0VUfSx7bGFiZWw6IlVwZGF0ZSB3aWRnZXQiLHZhbHVlOlAuVVBEQVRFX1dJREdFVH0se2xhYmVsOiJEZWxldGUgd2lkZ2V0Iix2YWx1ZTpQLkRFTEVURV9XSURHRVR9LHtsYWJlbDoiQ3JlYXRlIGZpbHRlciIsdmFsdWU6UC5DUkVBVEVfRklMVEVSfSx7bGFiZWw6IlVwZGF0ZSBmaWx0ZXIiLHZhbHVlOlAuVVBEQVRFX0ZJTFRFUn0se2xhYmVsOiJEZWxldGUgZmlsdGVyIix2YWx1ZTpQLkRFTEVURV9GSUxURVJ9LHtsYWJlbDoiVXBkYXRlIGRlZmVjdCIsdmFsdWU6UC5VUERBVEVfREVGRUNUfSx7bGFiZWw6IkRlbGV0ZSBkZWZlY3QiLHZhbHVlOlAuREVMRVRFX0RFRkVDVH0se2xhYmVsOiJDcmVhdGUgQlRTIix2YWx1ZTpQLkNSRUFURV9CVFN9LHtsYWJlbDoiVXBkYXRlIEJUUyIsdmFsdWU6UC5VUERBVEVfQlRTfSx7bGFiZWw6IkRlbGV0ZSBCVFMiLHZhbHVlOlAuREVMRVRFX0JUU30se2xhYmVsOiJTdGFydCBsYXVuY2giLHZhbHVlOlAuU1RBUlRfTEFVTkNIfSx7bGFiZWw6IkZpbmlzaCBsYXVuY2giLHZhbHVlOlAuRklOSVNIX0xBVU5DSH0se2xhYmVsOiJEZWxldGUgbGF1bmNoIix2YWx1ZTpQLkRFTEVURV9MQVVOQ0h9LHtsYWJlbDoiVXBkYXRlIHByb2plY3QiLHZhbHVlOlAuVVBEQVRFX1BST0pFQ1R9LHtsYWJlbDoiVXBkYXRlIEF1dG8tQW5hbHlzaXMiLHZhbHVlOlAuVVBEQVRFX0FOQUxZWkVSfSx7bGFiZWw6IlBvc3QgaXNzdWUiLHZhbHVlOlAuUE9TVF9JU1NVRX0se2xhYmVsOiJMaW5rIGlzc3VlIix2YWx1ZTpQLkxJTktfSVNTVUV9LHtsYWJlbDoiVW5saW5rIGlzc3VlIix2YWx1ZTpQLlVOTElOS19JU1NVRX0se2xhYmVsOiJDcmVhdGUgdXNlciIsdmFsdWU6UC5DUkVBVEVfVVNFUn0se2xhYmVsOiJSZW1vdmUgaW5kZXgiLHZhbHVlOlAuREVMRVRFX0lOREVYfSx7bGFiZWw6IkdlbmVyYXRlIGluZGV4Iix2YWx1ZTpQLkdFTkVSQVRFX0lOREVYfSx7bGFiZWw6IlN0YXJ0IGltcG9ydCIsdmFsdWU6UC5TVEFSVF9JTVBPUlR9LHtsYWJlbDoiRmluaXNoIGltcG9ydCIsdmFsdWU6UC5GSU5JU0hfSU1QT1JUfSx7bGFiZWw6IlVwZGF0ZSBub3RpZmljYXRpb25zIix2YWx1ZTpQLlVQREFURV9OT1RJRklDQVRJT05TfSx7bGFiZWw6IlN3aXRjaCBvbiBub3RpZmljYXRpb25zIix2YWx1ZTpQLlNXSVRDSF9PTl9OT1RJRklDQVRJT05TfSx7bGFiZWw6IlN3aXRjaCBvZmYgbm90aWZpY2F0aW9ucyIsdmFsdWU6UC5TV0lUQ0hfT0ZGX05PVElGSUNBVElPTlN9XX19LHtpZDpJLkVOVElUWV9DUkVBVElPTl9EQVRFLGNvbXBvbmVudDprLkVudGl0eUl0ZW1TdGFydFRpbWUsdmFsdWU6SS5FTlRJVFlfU1RBUlRfVElNRSBpbiBuP25bSS5FTlRJVFlfU1RBUlRfVElNRV06e2ZpbHRlcmluZ0ZpZWxkOkkuRU5USVRZX1NUQVJUX1RJTUUsdmFsdWU6KDAsTS5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnN1YnRyYWN0KDEsIm1vbnRocyIpLnZhbHVlT2YoKSsiLCIrKCgwLE0uZGVmYXVsdCkoKS5lbmRPZigiZGF5IikudmFsdWVPZigpKzEpLGNvbmRpdGlvbjpJLkNPTkRJVElPTl9CRVRXRUVOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVS50aW1lQ29sKSxhY3RpdmU6ITAscmVtb3ZhYmxlOiExfSx7aWQ6SS5FTlRJVFlfT0JKRUNUX1RZUEUsY29tcG9uZW50OmsuRW50aXR5RHJvcGRvd24sdmFsdWU6bltJLkVOVElUWV9PQkpFQ1RfVFlQRV18fHt2YWx1ZTpbTi5EQVNIQk9BUkQsTi5MQVVOQ0gsTi5XSURHRVQsTi5GSUxURVIsTi5JTVBPUlQsTi5QUk9KRUNULE4uREVGRUNUX1RZUEUsTi5VU0VSLE4uVVNFUl9GSUxURVIsTi5URVNUX0lURU0sTi5FWFRFUk5BTF9TWVNURU1dLmpvaW4oIiwiKSxjb25kaXRpb246SS5DT05ESVRJT05fSU59LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShVLm9iamVjdFR5cGVDb2wpLGFjdGl2ZTohMCxyZW1vdmFibGU6ITEsbWV0YTp7bXVsdGlwbGU6ITAsc2VsZWN0QWxsOiEwLG9wdGlvbnM6W3tsYWJlbDoiUHJvamVjdCIsdmFsdWU6Ti5QUk9KRUNUfSx7bGFiZWw6IkRlZmVjdCB0eXBlIix2YWx1ZTpOLkRFRkVDVF9UWVBFfSx7bGFiZWw6IlRlc3QgaXRlbSIsdmFsdWU6Ti5URVNUX0lURU19LHtsYWJlbDoiTGF1bmNoIix2YWx1ZTpOLkxBVU5DSH0se2xhYmVsOiJFeHRlcm5hbCBzeXN0ZW0iLHZhbHVlOk4uRVhURVJOQUxfU1lTVEVNfSx7bGFiZWw6IkRhc2hib2FyZCIsdmFsdWU6Ti5EQVNIQk9BUkR9LHtsYWJlbDoiVXNlciIsdmFsdWU6Ti5VU0VSfSx7bGFiZWw6IldpZGdldCIsdmFsdWU6Ti5XSURHRVR9LHtsYWJlbDoiVXNlciBmaWx0ZXIiLHZhbHVlOk4uVVNFUl9GSUxURVJ9LHtsYWJlbDoiRmlsdGVyIix2YWx1ZTpOLkZJTFRFUn0se2xhYmVsOiJJbXBvcnQiLHZhbHVlOk4uSU1QT1JUfV19fSx7aWQ6SS5FTlRJVFlfVVNFUixjb21wb25lbnQ6ay5FbnRpdHlQcm9qZWN0VXNlcnMsdmFsdWU6SS5FTlRJVFlfVVNFUiBpbiBuP25bSS5FTlRJVFlfVVNFUl06e2ZpbHRlcmluZ0ZpZWxkOkkuRU5USVRZX1VTRVIsdmFsdWU6IiIsY29uZGl0aW9uOkkuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVS51c2VyQ29sKSxhY3RpdmU6ITAscmVtb3ZhYmxlOiExfV19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucmVuZGVyLG49KDAsYy5kZWZhdWx0KShlLFsicmVuZGVyIl0pO3JldHVybiB0KCgwLGwuZGVmYXVsdCkoe30sbix7ZmlsdGVyRW50aXRpZXM6dGhpcy5nZXRFbnRpdGllcygpfSkpfX1dKSx0fShPLkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6RC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxmaWx0ZXJWYWx1ZXM6TC5kZWZhdWx0Lm9iamVjdCxyZW5kZXI6TC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0scy5kZWZhdWx0UHJvcHM9e2xvYWRpbmc6ITEsZXZlbnRzOltdLGZpbHRlclZhbHVlczp7fX0sbz1pKSl8fG8pO3QuRXZlbnRzRW50aXRpZXM9RzshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywiRXZlbnRzRW50aXRpZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0VudGl0aWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNFbnRpdGllcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0dyaWQvZXZlbnRzR3JpZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRXZlbnRzR3JpZD12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEM9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvaW5kZXguanMiKSxPPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksUz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2V2ZW50c0xvY2FsaXphdGlvbi5qcyIpLFI9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL25vSXRlbU1lc3NhZ2UvaW5kZXguanMiKSxqPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxpemF0aW9uLmpzIikseD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLEw9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLnNjc3MiKSxEPXIoTCksdz1ULmRlZmF1bHQuYmluZChELmRlZmF1bHQpLE09KDAsQS5kZWZpbmVNZXNzYWdlcykoe3RpbWVDb2w6e2lkOiJFdmVudHNHcmlkLnRpbWVDb2wiLGRlZmF1bHRNZXNzYWdlOiJUaW1lIn0sdXNlckNvbDp7aWQ6IkV2ZW50c0dyaWQudXNlckNvbCIsZGVmYXVsdE1lc3NhZ2U6IlVzZXIifSxhY3Rpb25Db2w6e2lkOiJFdmVudHNHcmlkLmFjdGlvbkNvbCIsZGVmYXVsdE1lc3NhZ2U6IkFjdGlvbiJ9LG9iamVjdFR5cGVDb2w6e2lkOiJFdmVudHNHcmlkLm9iamVjdFR5cGVDb2wiLGRlZmF1bHRNZXNzYWdlOiJPYmplY3QgVHlwZSJ9LG9iamVjdE5hbWVDb2w6e2lkOiJFdmVudHNHcmlkLm9iamVjdE5hbWVDb2wiLGRlZmF1bHRNZXNzYWdlOiJPYmplY3QgTmFtZSJ9LG9sZFZhbHVlQ29sOntpZDoiRXZlbnRzR3JpZC5vbGRWYWx1ZUNvbCIsZGVmYXVsdE1lc3NhZ2U6Ik9sZCBWYWx1ZSJ9LG5ld1ZhbHVlQ29sOntpZDoiRXZlbnRzR3JpZC5uZXdWYWx1ZUNvbCIsZGVmYXVsdE1lc3NhZ2U6Ik5ldyBWYWx1ZSJ9fSksaz1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygidGltZS1jb2wiLHQpfSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudChPLkFic1JlbFRpbWUse3N0YXJ0VGltZTpuLmxhc3RNb2RpZmllZH0pKX07ay5wcm9wVHlwZXM9e2NsYXNzTmFtZTp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6eS5kZWZhdWx0Lm9iamVjdH0say5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fTt2YXIgST1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygidXNlci1jb2wiLHQpfSxuLnVzZXIpfTtJLnByb3BUeXBlcz17Y2xhc3NOYW1lOnkuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx2YWx1ZTp5LmRlZmF1bHQub2JqZWN0fSxJLmRlZmF1bHRQcm9wcz17dmFsdWU6e319O3ZhciBQPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS52YWx1ZSxyPWUuY3VzdG9tUHJvcHMuZm9ybWF0TWVzc2FnZTtyZXR1cm4gYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp3KCJhY3Rpb24tY29sIix0KX0sbi5hY3Rpb25UeXBlJiZTLmFjdGlvbk1lc3NhZ2VzW24uYWN0aW9uVHlwZV0/cihTLmFjdGlvbk1lc3NhZ2VzW24uYWN0aW9uVHlwZV0pOm4uYWN0aW9uVHlwZSl9O1AucHJvcFR5cGVzPXtjbGFzc05hbWU6eS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHZhbHVlOnkuZGVmYXVsdC5vYmplY3QsY3VzdG9tUHJvcHM6eS5kZWZhdWx0LnNoYXBlKHtmb3JtYXRNZXNzYWdlOnkuZGVmYXVsdC5mdW5jfSl9LFAuZGVmYXVsdFByb3BzPXt2YWx1ZTp7fSxjdXN0b21Qcm9wczp7fX07dmFyIE49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLnZhbHVlLHI9ZS5jdXN0b21Qcm9wcy5mb3JtYXRNZXNzYWdlO3JldHVybiBiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOncoIm9iamVjdC10eXBlLWNvbCIsdCl9LG4ub2JqZWN0VHlwZSYmUy5vYmplY3RUeXBlc01lc3NhZ2VzW24ub2JqZWN0VHlwZV0/cihTLm9iamVjdFR5cGVzTWVzc2FnZXNbbi5vYmplY3RUeXBlXSk6bi5vYmplY3RUeXBlKX07Ti5wcm9wVHlwZXM9e2NsYXNzTmFtZTp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6eS5kZWZhdWx0Lm9iamVjdCxjdXN0b21Qcm9wczp5LmRlZmF1bHQuc2hhcGUoe2Zvcm1hdE1lc3NhZ2U6eS5kZWZhdWx0LmZ1bmN9KX0sTi5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9LGN1c3RvbVByb3BzOnt9fTt2YXIgSD1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6dygib2JqZWN0LW5hbWUtY29sIix0KX0sbi5kZXRhaWxzLm9iamVjdE5hbWUpfTtILnByb3BUeXBlcz17Y2xhc3NOYW1lOnkuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx2YWx1ZTp5LmRlZmF1bHQub2JqZWN0fSxILmRlZmF1bHRQcm9wcz17dmFsdWU6e319O3ZhciBGPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS52YWx1ZSxyPWUuY3VzdG9tUHJvcHMudmFsdWVUeXBlO3JldHVybiBiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOncoInZhbHVlLWNvbCIsdCl9LG4uZGV0YWlscy5oaXN0b3J5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoYi5kZWZhdWx0LkZyYWdtZW50LHtrZXk6ZS5maWVsZCsiX18iK2Uub2xkVmFsdWUrIl9fIitlLm5ld1ZhbHVlfSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOncoInZhbHVlLWZpZWxkIil9LGUuZmllbGQsIjoiKSxiLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOncoInZhbHVlIil9LGVbcl0pKX0pKX07Ri5wcm9wVHlwZXM9e2NsYXNzTmFtZTp5LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6eS5kZWZhdWx0Lm9iamVjdCxjdXN0b21Qcm9wczp5LmRlZmF1bHQuc2hhcGUoe3ZhbHVlVHlwZTp5LmRlZmF1bHQuc3RyaW5nfSl9LEYuZGVmYXVsdFByb3BzPXt2YWx1ZTp7fSxjdXN0b21Qcm9wczp7fX07dmFyIEI9dC5FdmVudHNHcmlkPSgwLEEuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGwuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRDb2x1bW5zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLkNPTFVNTlM9ci5nZXRDb2x1bW5zKCksbz1uLCgwLGYuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJfX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENvbHVtbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be2lkOnguRU5USVRZX0NSRUFUSU9OX0RBVEUsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS50aW1lQ29sKX0sc29ydGFibGU6ITAsbWF4SGVpZ2h0OjE3MCxjb21wb25lbnQ6a30se2lkOnguRU5USVRZX1VTRVIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS51c2VyQ29sKX0sc29ydGFibGU6ITAsY29tcG9uZW50Okl9LHtpZDp4LkVOVElUWV9BQ1RJT04sdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS5hY3Rpb25Db2wpfSxzb3J0YWJsZTohMCxjb21wb25lbnQ6UCxjdXN0b21Qcm9wczp7Zm9ybWF0TWVzc2FnZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZX19LHtpZDp4LkVOVElUWV9PQkpFQ1RfVFlQRSx0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShNLm9iamVjdFR5cGVDb2wpfSxzb3J0YWJsZTohMCxjb21wb25lbnQ6TixjdXN0b21Qcm9wczp7Zm9ybWF0TWVzc2FnZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZX19LHtpZDp4LkVOVElUWV9PQkpFQ1RfTkFNRSx0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShNLm9iamVjdE5hbWVDb2wpfSxjb21wb25lbnQ6SH0se2lkOiJvbGRWYWx1ZSIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS5vbGRWYWx1ZUNvbCl9LGNvbXBvbmVudDpGLGN1c3RvbVByb3BzOnt2YWx1ZVR5cGU6Im9sZFZhbHVlIn19LHtpZDoibmV3VmFsdWUiLHRpdGxlOntmdWxsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKE0ubmV3VmFsdWVDb2wpfSxjb21wb25lbnQ6RixjdXN0b21Qcm9wczp7dmFsdWVUeXBlOiJuZXdWYWx1ZSJ9fV19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGF0YSxuPWUubG9hZGluZyxyPWUuaW50bCxvPWUuc29ydGluZ0NvbHVtbixzPWUuc29ydGluZ0RpcmVjdGlvbixpPWUub25DaGFuZ2VTb3J0aW5nO3JldHVybiBiLmRlZmF1bHQuY3JlYXRlRWxlbWVudChnLkZyYWdtZW50LG51bGwsYi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5HcmlkLHtjb2x1bW5zOnRoaXMuQ09MVU1OUyxkYXRhOnQsbG9hZGluZzpuLHNvcnRpbmdDb2x1bW46byxzb3J0aW5nRGlyZWN0aW9uOnMsb25DaGFuZ2VTb3J0aW5nOml9KSwhdC5sZW5ndGgmJiFuJiZiLmRlZmF1bHQuY3JlYXRlRWxlbWVudChSLk5vSXRlbU1lc3NhZ2Use21lc3NhZ2U6ci5mb3JtYXRNZXNzYWdlKGouQ09NTU9OX0xPQ0FMRV9LRVlTLk5PX1JFU1VMVFMpfSkpfX1dKSx0fShnLlB1cmVDb21wb25lbnQpLHMucHJvcFR5cGVzPXtkYXRhOnkuZGVmYXVsdC5hcnJheU9mKHkuZGVmYXVsdC5vYmplY3QpLGludGw6QS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxsb2FkaW5nOnkuZGVmYXVsdC5ib29sLHNvcnRpbmdDb2x1bW46eS5kZWZhdWx0LnN0cmluZyxzb3J0aW5nRGlyZWN0aW9uOnkuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2VTb3J0aW5nOnkuZGVmYXVsdC5mdW5jfSxzLmRlZmF1bHRQcm9wcz17ZGF0YTpbXSxsb2FkaW5nOiExLHNvcnRpbmdDb2x1bW46bnVsbCxzb3J0aW5nRGlyZWN0aW9uOm51bGwsb25DaGFuZ2VTb3J0aW5nOmZ1bmN0aW9uKCl7fX0sbz1pKSl8fG87IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIkV2ZW50c0dyaWQiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0dyaWQvZXZlbnRzR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih3LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE0sIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNHcmlkL2V2ZW50c0dyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiVGltZUNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEksIlVzZXJDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0dyaWQvZXZlbnRzR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJBY3Rpb25Db2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0dyaWQvZXZlbnRzR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJPYmplY3RUeXBlQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNHcmlkL2V2ZW50c0dyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiT2JqZWN0TmFtZUNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsIlZhbHVlQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNHcmlkL2V2ZW50c0dyaWQuanN4IikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsidGltZS1jb2wiOiJldmVudHNHcmlkX190aW1lLWNvbF9fX3U4MTRoIiwidXNlci1jb2wiOiJldmVudHNHcmlkX191c2VyLWNvbF9fXzNzX2d3IiwiYWN0aW9uLWNvbCI6ImV2ZW50c0dyaWRfX2FjdGlvbi1jb2xfX18zN1hoSyIsIm9iamVjdC10eXBlLWNvbCI6ImV2ZW50c0dyaWRfX29iamVjdC10eXBlLWNvbF9fXzNBN291Iiwib2JqZWN0LW5hbWUtY29sIjoiZXZlbnRzR3JpZF9fb2JqZWN0LW5hbWUtY29sX19fRTBWVjkiLCJ2YWx1ZS1jb2wiOiJldmVudHNHcmlkX192YWx1ZS1jb2xfX19zMzdKTCIsInZhbHVlLWZpZWxkIjoiZXZlbnRzR3JpZF9fdmFsdWUtZmllbGRfX18yVmgtSyJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzR3JpZC9ldmVudHNHcmlkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFdmVudHNHcmlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FdmVudHNHcmlkfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzVG9vbGJhci9ldmVudHNUb29sYmFyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRXZlbnRzVG9vbGJhcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikscz1yKG8pLGk9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRGaWx0ZXIvaW5kZXguanMiKSxhPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29udGFpbmVycy9pbmRleC5qcyIpLGw9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzRW50aXRpZXMuanN4IiksdT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9ldmVudHNUb29sYmFyL2V2ZW50c1Rvb2xiYXIuc2NzcyIpLGM9cih1KSxkPXMuZGVmYXVsdC5iaW5kKGMuZGVmYXVsdCksXz10LkV2ZW50c1Rvb2xiYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiZXZlbnRzLXRvb2xiYXIiKX0sZS5jcmVhdGVFbGVtZW50KGEuRmlsdGVyRW50aXRpZXNVUkxDb250YWluZXIse2RlYm91bmNlZDohMSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIG49dC5lbnRpdGllcyxyPXQub25DaGFuZ2U7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChpLklucHV0RmlsdGVyLHtlbnRpdGllc1Byb3ZpZGVyOmwuRXZlbnRzRW50aXRpZXMsZmlsdGVyVmFsdWVzOm4sb25DaGFuZ2U6cn0pfX0pKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkV2ZW50c1Rvb2xiYXIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c1Rvb2xiYXIvZXZlbnRzVG9vbGJhci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzVG9vbGJhci9ldmVudHNUb29sYmFyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c1Rvb2xiYXIvZXZlbnRzVG9vbGJhci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImV2ZW50cy10b29sYmFyIjoiZXZlbnRzVG9vbGJhcl9fZXZlbnRzLXRvb2xiYXJfX18xdWxzaiJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzVG9vbGJhci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzVG9vbGJhci9ldmVudHNUb29sYmFyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFdmVudHNUb29sYmFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FdmVudHNUb29sYmFyfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL3Byb2plY3RFdmVudHNQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQcm9qZWN0RXZlbnRzUGFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUHJvamVjdEV2ZW50c1BhZ2V9fSk7dmFyIG89bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvZXZlbnRzRW50aXRpZXMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkV2ZW50c0VudGl0aWVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5FdmVudHNFbnRpdGllc319KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL3Byb2plY3RFdmVudHNQYWdlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUHJvamVjdEV2ZW50c1BhZ2U9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2luZGV4LmpzIiksdz1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLGs9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvYWRtaW5pc3RyYXRlL2V2ZW50cy9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3NvcnRpbmcvaW5kZXguanMiKSxIPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c0dyaWQvaW5kZXguanMiKSxGPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL2V2ZW50c1Rvb2xiYXIvaW5kZXguanMiKSxCPXtQcm9qZWN0RXZlbnRzUGFnZTp7ZGlzcGxheU5hbWU6IlByb2plY3RFdmVudHNQYWdlIn19LFU9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvcHJvamVjdEV2ZW50c1BhZ2UuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksRz0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0RXZlbnRzUGFnZS9wcm9qZWN0RXZlbnRzUGFnZS5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSx6PXQuUHJvamVjdEV2ZW50c1BhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKEcodCxlKSxlKX19KCJQcm9qZWN0RXZlbnRzUGFnZSIpKChvPSgwLEwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3VybDpNLlVSTFMuZXZlbnRzKCgwLGsuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSksZXZlbnRzOigwLEkuZXZlbnRzU2VsZWN0b3IpKGUpLGxvYWRpbmc6KDAsSS5sb2FkaW5nU2VsZWN0b3IpKGUpfX0pLHM9KDAsTi53aXRoU29ydGluZ1VSTCkoe2RlZmF1bHRGaWVsZHM6W1AuRU5USVRZX0NSRUFUSU9OX0RBVEVdLGRlZmF1bHREaXJlY3Rpb246Ti5TT1JUSU5HX0RFU0N9KSxpPSgwLHcud2l0aFBhZ2luYXRpb24pKHtwYWdpbmF0aW9uU2VsZWN0b3I6SS5ldmVudHNQYWdpbmF0aW9uU2VsZWN0b3J9KSxvKGE9cyhhPWkoKHU9bD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAscC5kZWZhdWx0KSh0aGlzLHQpLCgwLGcuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVBhZ2Usbj1lLml0ZW1Db3VudCxyPWUucGFnZUNvdW50LG89ZS5wYWdlU2l6ZSxzPWUub25DaGFuZ2VQYWdlLGk9ZS5vbkNoYW5nZVBhZ2VTaXplLGE9ZS5sb2FkaW5nLGw9ZS5ldmVudHMsdT1lLnNvcnRpbmdDb2x1bW4sYz1lLnNvcnRpbmdEaXJlY3Rpb24sZD1lLm9uQ2hhbmdlU29ydGluZztyZXR1cm4gTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTy5kZWZhdWx0LkZyYWdtZW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5FdmVudHNUb29sYmFyLG51bGwpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguRXZlbnRzR3JpZCx7ZGF0YTpsLGxvYWRpbmc6YSxzb3J0aW5nQ29sdW1uOnUsc29ydGluZ0RpcmVjdGlvbjpjLG9uQ2hhbmdlU29ydGluZzpkfSksISFyJiYhYSYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5QYWdpbmF0aW9uVG9vbGJhcix7YWN0aXZlUGFnZTp0LGl0ZW1Db3VudDpuLHBhZ2VDb3VudDpyLHBhZ2VTaXplOm8sb25DaGFuZ2VQYWdlOnMsb25DaGFuZ2VQYWdlU2l6ZTppfSkpfX1dKSx0fShDLkNvbXBvbmVudCksbC5wcm9wVHlwZXM9e2FjdGl2ZVBhZ2U6eC5kZWZhdWx0Lm51bWJlcixpdGVtQ291bnQ6eC5kZWZhdWx0Lm51bWJlcixwYWdlQ291bnQ6eC5kZWZhdWx0Lm51bWJlcixwYWdlU2l6ZTp4LmRlZmF1bHQubnVtYmVyLHNvcnRpbmdDb2x1bW46eC5kZWZhdWx0LnN0cmluZyxzb3J0aW5nRGlyZWN0aW9uOnguZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2VTb3J0aW5nOnguZGVmYXVsdC5mdW5jLHNob3dNb2RhbEFjdGlvbjp4LmRlZmF1bHQuZnVuYyxvbkNoYW5nZVBhZ2U6eC5kZWZhdWx0LmZ1bmMsb25DaGFuZ2VQYWdlU2l6ZTp4LmRlZmF1bHQuZnVuYyxsb2FkaW5nOnguZGVmYXVsdC5ib29sLGV2ZW50czp4LmRlZmF1bHQuYXJyYXlPZih4LmRlZmF1bHQub2JqZWN0KX0sbC5kZWZhdWx0UHJvcHM9e2FjdGl2ZVBhZ2U6MSxpdGVtQ291bnQ6bnVsbCxwYWdlQ291bnQ6bnVsbCxwYWdlU2l6ZTp3LkRFRkFVTFRfUEFHSU5BVElPTlt3LlNJWkVfS0VZXSxzb3J0aW5nQ29sdW1uOm51bGwsc29ydGluZ0RpcmVjdGlvbjpudWxsLG9uQ2hhbmdlU29ydGluZzpmdW5jdGlvbigpe30sc2hvd01vZGFsQWN0aW9uOmZ1bmN0aW9uKCl7fSxvbkNoYW5nZVBhZ2U6ZnVuY3Rpb24oKXt9LG9uQ2hhbmdlUGFnZVNpemU6ZnVuY3Rpb24oKXt9LGxvYWRpbmc6ITEsZXZlbnRzOltdfSxhPXUpKXx8YSl8fGEpfHxhKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiUHJvamVjdEV2ZW50c1BhZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RFdmVudHNQYWdlL3Byb2plY3RFdmVudHNQYWdlLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuUEVSSU9EX1ZBTFVFUz17c2l4TW9udGhzOiI2TSIsdGhyZWVNb250aHM6IjNNIixvbmVNb250aDoiMU0ifSxvPXQuV0lER0VUU19JRFM9e2dlbmVyYWw6ImdlbmVyYWwiLG93bmVyczoib3duZXJzIixsYXVuY2hlc1F1YW50aXR5OiJsYXVuY2hlc1F1YW50aXR5IixpbnZlc3RpZ2F0ZWQ6ImludmVzdGlnYXRlZCIsbGFzdExhdW5jaDoibGFzdExhdW5jaCIsaXNzdWVzQ2hhcnQ6Imlzc3Vlc0NoYXJ0IixzeXN0ZW1Jc3N1ZXM6InN5c3RlbUlzc3VlcyIsYXV0b0J1Z3M6ImF1dG9CdWdzIixsYXVuY2hTdGF0aXN0aWNzOiJsYXVuY2hTdGF0aXN0aWNzIixhY3Rpdml0aWVzOiJhY3Rpdml0aWVzIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsIlBFUklPRF9WQUxVRVMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG8sIldJREdFVFNfSURTIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9jb25zdGFudHMuanMiKSl9KCl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2UvcHJvamVjdFN0YXR1c1BhZ2UuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlByb2plY3RTdGF0dXNQYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Qcm9qZWN0U3RhdHVzUGFnZX19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3Byb2plY3RTdGF0dXNQYWdlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUHJvamVjdFN0YXR1c1BhZ2U9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikseD1yKGopLEw9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi9pbmRleC5qcyIpLEQ9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvaW5kZXguanMiKSx3PW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL2NvbnN0YW50cy5qcyIpLE09bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2UvcHJvamVjdFN0YXR1c1BhZ2Uuc2NzcyIpLGs9cihNKSxJPXtQcm9qZWN0U3RhdHVzUGFnZTp7ZGlzcGxheU5hbWU6IlByb2plY3RTdGF0dXNQYWdlIn19LFA9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2UvcHJvamVjdFN0YXR1c1BhZ2UuanN4Iixjb21wb25lbnRzOkksbG9jYWxzOltlXSxpbXBvcnRzOltULmRlZmF1bHRdfSksTj0oMCx5LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9wcm9qZWN0U3RhdHVzUGFnZS5qc3giLGNvbXBvbmVudHM6SSxsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSxIPXguZGVmYXVsdC5iaW5kKGsuZGVmYXVsdCksRj0oMCxSLmRlZmluZU1lc3NhZ2VzKSh7c2l4TW9udGhzOntpZDoiUHJvamVjdFN0YXR1c1BhZ2Uuc2l4TW9udGhzIixkZWZhdWx0TWVzc2FnZToiNiBtb250aHMifSx0aHJlZU1vbnRoczp7aWQ6IlByb2plY3RTdGF0dXNQYWdlLnRocmVlTW9udGhzIixkZWZhdWx0TWVzc2FnZToiMyBtb250aHMifSxvbmVNb250aDp7aWQ6IlByb2plY3RTdGF0dXNQYWdlLm9uZU1vbnRoIixkZWZhdWx0TWVzc2FnZToiMSBtb250aCJ9fSksQj10LlByb2plY3RTdGF0dXNQYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUChOKHQsZSksZSl9fSgiUHJvamVjdFN0YXR1c1BhZ2UiKSgoMCxSLmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e3NlbGVjdGVkUGVyaW9kOncuUEVSSU9EX1ZBTFVFUy50aHJlZU1vbnRoc30sci5vblBlcmlvZENoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25QZXJpb2RDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucGVyaW9kcz1be3ZhbHVlOncuUEVSSU9EX1ZBTFVFUy5zaXhNb250aHMsbGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoRi5zaXhNb250aHMpfSx7dmFsdWU6dy5QRVJJT0RfVkFMVUVTLnRocmVlTW9udGhzLGxhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEYudGhyZWVNb250aHMpfSx7dmFsdWU6dy5QRVJJT0RfVkFMVUVTLm9uZU1vbnRoLGxhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEYub25lTW9udGgpfV0sbz1uLCgwLGYuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJfX29uUGVyaW9kQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblBlcmlvZENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25QZXJpb2RDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uUGVyaW9kQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblBlcmlvZENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRQZXJpb2Q6ZX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkgoInByb2plY3Qtc3RhdHVzLXBhZ2UiKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpIKCJ0b2dnbGUtY29udGFpbmVyIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuVG9nZ2xlQnV0dG9uLHtpdGVtczp0aGlzLnBlcmlvZHMsdmFsdWU6dGhpcy5zdGF0ZS5zZWxlY3RlZFBlcmlvZCxzZXBhcmF0ZWQ6ITAsb25DaGFuZ2U6dGhpcy5vblBlcmlvZENoYW5nZX0pKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChELlN0YXR1c1BhZ2VDb250ZW50LHtpbnRlcnZhbDp0aGlzLnN0YXRlLnNlbGVjdGVkUGVyaW9kLHByb2plY3RJZDp0aGlzLnByb3BzLnByb2plY3RJZH0pKX19XSksdH0odi5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOlIuaW50bFNoYXBlLmlzUmVxdWlyZWQscHJvamVjdElkOlMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJQcm9qZWN0U3RhdHVzUGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2UvcHJvamVjdFN0YXR1c1BhZ2UuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3Byb2plY3RTdGF0dXNQYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9wcm9qZWN0U3RhdHVzUGFnZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3Byb2plY3RTdGF0dXNQYWdlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicHJvamVjdC1zdGF0dXMtcGFnZSI6InByb2plY3RTdGF0dXNQYWdlX19wcm9qZWN0LXN0YXR1cy1wYWdlX19fOGxORkEiLCJ0b2dnbGUtY29udGFpbmVyIjoicHJvamVjdFN0YXR1c1BhZ2VfX3RvZ2dsZS1jb250YWluZXJfX18xS0JpTCJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VDb250ZW50LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTdGF0dXNQYWdlQ29udGVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU3RhdHVzUGFnZUNvbnRlbnR9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9tZXNzYWdlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tZXNzYWdlcz12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxvPXQubWVzc2FnZXM9KDAsci5kZWZpbmVNZXNzYWdlcykoe2dlbmVyYWw6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5nZW5lcmFsIixkZWZhdWx0TWVzc2FnZToiR2VuZXJhbCBpbmZvcm1hdGlvbiJ9LG93bmVyczp7aWQ6IlN0YXR1c1BhZ2VDb250ZW50Lm93bmVycyIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaGVzIG93bmVycyJ9LGxhc3RMYXVuY2g6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5sYXN0TGF1bmNoIixkZWZhdWx0TWVzc2FnZToiTGFzdCBsYXVuY2ggc3RhdGlzdGljIn0sbGF1bmNoZXNRdWFudGl0eTp7aWQ6IlN0YXR1c1BhZ2VDb250ZW50LmxhdW5jaGVzUXVhbnRpdHkiLGRlZmF1bHRNZXNzYWdlOiJRdWFudGl0eSBvZiBsYXVuY2hlcyJ9LGxhdW5jaFN0YXRpc3RpY3M6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5sYXVuY2hTdGF0aXN0aWNzIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIHN0YXRpc3RpY3MifSxpbnZlc3RpZ2F0ZWQ6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5pbnZlc3RpZ2F0ZWQiLGRlZmF1bHRNZXNzYWdlOiJQZXJjZW50YWdlIG9mIGludmVzdGlnYXRpb25zIn0saXNzdWVzQ2hhcnQ6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5pc3N1ZXNDaGFydCIsZGVmYXVsdE1lc3NhZ2U6IlBlcmNlbnRhZ2Ugb2YgcHJvZHVjdCBidWdzIn0sc3lzdGVtSXNzdWVzOntpZDoiU3RhdHVzUGFnZUNvbnRlbnQuc3lzdGVtSXNzdWVzIixkZWZhdWx0TWVzc2FnZToiUGVyY2VudGFnZSBvZiBzeXN0ZW0gaXNzdWVzIn0sYXV0b0J1Z3M6e2lkOiJTdGF0dXNQYWdlQ29udGVudC5hdXRvQnVncyIsZGVmYXVsdE1lc3NhZ2U6IlBlcmNlbnRhZ2Ugb2YgYXV0byBidWdzIn0sYWN0aXZpdGllczp7aWQ6IlN0YXR1c1BhZ2VDb250ZW50LmFjdGl2aXRpZXMiLGRlZmF1bHRNZXNzYWdlOiJQcm9qZWN0IGFjdGl2aXR5IHBhbmVsIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvbWVzc2FnZXMuanMiKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VDb250ZW50LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RhdHVzUGFnZUNvbnRlbnQ9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx3PXIoRCksTT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaz1yKE0pLEk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxQPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLE49cihQKSxIPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tcG9uZW50cy9wcmVsb2FkZXJzL3NwaW5uaW5nUHJlbG9hZGVyL2luZGV4LmpzIiksQj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlV2lkZ2V0cy5qc3giKSxVPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VJdGVtL2luZGV4LmpzIiksRz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlQ29udGVudC5zY3NzIiksej1yKEcpLFY9e1N0YXR1c1BhZ2VDb250ZW50OntkaXNwbGF5TmFtZToiU3RhdHVzUGFnZUNvbnRlbnQifX0sVz0oMCx3LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlQ29udGVudC5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W2VdLGltcG9ydHM6W0wuZGVmYXVsdF19KSxZPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VDb250ZW50LmpzeCIsY29tcG9uZW50czpWLGxvY2FsczpbXSxpbXBvcnRzOltMLmRlZmF1bHQsUy5kZWZhdWx0XX0pLHE9Ti5kZWZhdWx0LmJpbmQoei5kZWZhdWx0KSxLPXQuU3RhdHVzUGFnZUNvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBXKFkodCxlKSxlKX19KCJTdGF0dXNQYWdlQ29udGVudCIpKCgwLEkuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsYi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxULmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17bG9hZGluZzohMH0sci5mZXRjaERhdGE9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2ZldGNoRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXJXaWRnZXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlcldpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLFQuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxDLmRlZmF1bHQpKHQsZSksKDAseS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlcldpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyV2lkZ2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mZXRjaERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmV0Y2hEYXRhKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2UuaW50ZXJ2YWw9PT10aGlzLnByb3BzLmludGVydmFsJiZlLnByb2plY3RJZD09PXRoaXMucHJvcHMucHJvamVjdElkfHx0aGlzLmZldGNoRGF0YSgpfX0se2tleToiX19mZXRjaERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZmV0Y2hEYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LnByb2plY3RJZCxyPXQuaW50ZXJ2YWw7dGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMH0pO3ZhciBvPVtdLmNvbmNhdCgoMCxmLmRlZmF1bHQpKEIuc3RhdHVzUGFnZVdpZGdldHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVybH0pKSxbQi5hY3Rpdml0eUl0ZW1dKTtfLmRlZmF1bHQuYWxsKG8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLEguZmV0Y2gpKGUuZ2V0VXJsKG4scikpfSkpLnRoZW4oZnVuY3Rpb24odCl7dmFyIG49by5yZWR1Y2UoZnVuY3Rpb24oZSxuLHIpe3JldHVybigwLGMuZGVmYXVsdCkoe30sZSwoMCxsLmRlZmF1bHQpKHt9LG4uaWQsdFtyXSkpfSx7fSk7ZS5zZXRTdGF0ZSgoMCxjLmRlZmF1bHQpKHt9LG4se2xvYWRpbmc6ITF9KSl9KS5jYXRjaChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2xvYWRpbmc6ITF9KX0pfX0se2tleToiX19yZW5kZXJXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlcldpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyV2lkZ2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBMLmRlZmF1bHQuY3JlYXRlRWxlbWVudChVLlN0YXR1c1BhZ2VJdGVtLHt0aXRsZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShlLnRpdGxlKX0sdGhpcy5zdGF0ZS5sb2FkaW5nP0wuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuU3Bpbm5pbmdQcmVsb2FkZXIsbnVsbCk6ZS5jb21wb25lbnQodGhpcy5zdGF0ZVtlLnNvdXJjZV0pKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBMLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnEoInN0YXR1cy1wYWdlLWNvbnRlbnQiKX0sTC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpxKCJzdGF0dXMtaXRlbXMtYmxvY2siKX0sQi5zdGF0dXNQYWdlV2lkZ2V0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEwuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dC5pZCxjbGFzc05hbWU6cSgic3RhdHVzLWl0ZW0td3JhcHBlciIpfSxlLnJlbmRlcldpZGdldCh0KSl9KSksTC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpxKCJhY3Rpdml0eS1ibG9jayIpfSx0aGlzLnJlbmRlcldpZGdldChCLmFjdGl2aXR5SXRlbSkpKX19XSksdH0oeC5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOkkuaW50bFNoYXBlLmlzUmVxdWlyZWQscHJvamVjdElkOmsuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxpbnRlcnZhbDprLmRlZmF1bHQuc3RyaW5nfSxzLmRlZmF1bHRQcm9wcz17aW50ZXJ2YWw6IiJ9LG89aSkpfHxvKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSywiU3RhdHVzUGFnZUNvbnRlbnQiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VDb250ZW50LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlQ29udGVudC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VDb250ZW50LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic3RhdHVzLXBhZ2UtY29udGVudCI6InN0YXR1c1BhZ2VDb250ZW50X19zdGF0dXMtcGFnZS1jb250ZW50X19fcjYxRU8iLCJzdGF0dXMtaXRlbXMtYmxvY2siOiJzdGF0dXNQYWdlQ29udGVudF9fc3RhdHVzLWl0ZW1zLWJsb2NrX19fMlAzWnUiLCJzdGF0dXMtaXRlbS13cmFwcGVyIjoic3RhdHVzUGFnZUNvbnRlbnRfX3N0YXR1cy1pdGVtLXdyYXBwZXJfX19taHdVbyIsImFjdGl2aXR5LWJsb2NrIjoic3RhdHVzUGFnZUNvbnRlbnRfX2FjdGl2aXR5LWJsb2NrX19fTUVYLTMifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VJdGVtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlSXRlbS9zdGF0dXNQYWdlSXRlbS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU3RhdHVzUGFnZUl0ZW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlN0YXR1c1BhZ2VJdGVtfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvc3RhdHVzUGFnZUl0ZW0vc3RhdHVzUGFnZUl0ZW0uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdGF0dXNQYWdlSXRlbT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VJdGVtL3N0YXR1c1BhZ2VJdGVtLnNjc3MiKSx1PXIobCksYz1hLmRlZmF1bHQuYmluZCh1LmRlZmF1bHQpLGQ9dC5TdGF0dXNQYWdlSXRlbT1mdW5jdGlvbih0KXt2YXIgbj10LnRpdGxlLHI9dC5jaGlsZHJlbjtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Yygic3RhdHVzLXBhZ2UtaXRlbSIpfSxlLmNyZWF0ZUVsZW1lbnQoImg0Iix7Y2xhc3NOYW1lOmMoIml0ZW0tdGl0bGUiKX0sbikscil9O2QucHJvcFR5cGVzPXt0aXRsZTpzLmRlZmF1bHQuc3RyaW5nLGNoaWxkcmVuOnMuZGVmYXVsdC5ub2RlfSxkLmRlZmF1bHRQcm9wcz17dGl0bGU6IiIsY2hpbGRyZW46bnVsbH07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIlN0YXR1c1BhZ2VJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlSXRlbS9zdGF0dXNQYWdlSXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvc3RhdHVzUGFnZUl0ZW0vc3RhdHVzUGFnZUl0ZW0uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvc3RhdHVzUGFnZUl0ZW0vc3RhdHVzUGFnZUl0ZW0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzdGF0dXMtcGFnZS1pdGVtIjoic3RhdHVzUGFnZUl0ZW1fX3N0YXR1cy1wYWdlLWl0ZW1fX190ek51MCIsIml0ZW0tdGl0bGUiOiJzdGF0dXNQYWdlSXRlbV9faXRlbS10aXRsZV9fXzJ2VHJxIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9zdGF0dXNQYWdlV2lkZ2V0cy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFjdGl2aXR5SXRlbT10LnN0YXR1c1BhZ2VXaWRnZXRzPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLG89bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9pbmRleC5qcyIpLHM9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2UvY29uc3RhbnRzLmpzIiksaT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC9tZXNzYWdlcy5qcyIpLGE9dC5zdGF0dXNQYWdlV2lkZ2V0cz1be3RpdGxlOmkubWVzc2FnZXMuZ2VuZXJhbCxpZDpzLldJREdFVFNfSURTLmdlbmVyYWwsc291cmNlOnMuV0lER0VUU19JRFMuZ2VuZXJhbCxjb21wb25lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChvLkdlbmVyYWxJbmZvLHtkYXRhOnR9KX0sZ2V0VXJsOnIuVVJMUy5wcm9qZWN0U3RhdHVzfSx7dGl0bGU6aS5tZXNzYWdlcy5vd25lcnMsaWQ6cy5XSURHRVRTX0lEUy5vd25lcnMsc291cmNlOnMuV0lER0VUU19JRFMuZ2VuZXJhbCxjb21wb25lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChvLk93bmVyc0luZm8se2RhdGE6dH0pfX0se3RpdGxlOmkubWVzc2FnZXMubGFzdExhdW5jaCxpZDpzLldJREdFVFNfSURTLmxhc3RMYXVuY2gsc291cmNlOnMuV0lER0VUU19JRFMubGFzdExhdW5jaCxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfSxnZXRVcmw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5VUkxTLnByb2plY3RXaWRnZXQoZSxzLldJREdFVFNfSURTLmxhc3RMYXVuY2gsdCl9fSx7dGl0bGU6aS5tZXNzYWdlcy5sYXVuY2hlc1F1YW50aXR5LGlkOnMuV0lER0VUU19JRFMubGF1bmNoZXNRdWFudGl0eSxzb3VyY2U6cy5XSURHRVRTX0lEUy5sYXVuY2hlc1F1YW50aXR5LGNvbXBvbmVudDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCl9LGdldFVybDpmdW5jdGlvbihlLHQpe3JldHVybiByLlVSTFMucHJvamVjdFdpZGdldChlLHMuV0lER0VUU19JRFMubGF1bmNoZXNRdWFudGl0eSx0KX19LHt0aXRsZTppLm1lc3NhZ2VzLmxhdW5jaFN0YXRpc3RpY3MsaWQ6cy5XSURHRVRTX0lEUy5sYXVuY2hTdGF0aXN0aWNzLHNvdXJjZTpzLldJREdFVFNfSURTLmludmVzdGlnYXRlZCxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfX0se3RpdGxlOmkubWVzc2FnZXMuaW52ZXN0aWdhdGVkLGlkOnMuV0lER0VUU19JRFMuaW52ZXN0aWdhdGVkLHNvdXJjZTpzLldJREdFVFNfSURTLmludmVzdGlnYXRlZCxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfSxnZXRVcmw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5VUkxTLnByb2plY3RXaWRnZXQoZSxzLldJREdFVFNfSURTLmludmVzdGlnYXRlZCx0KX19LHt0aXRsZTppLm1lc3NhZ2VzLmlzc3Vlc0NoYXJ0LGlkOnMuV0lER0VUU19JRFMuaXNzdWVzQ2hhcnQsc291cmNlOnMuV0lER0VUU19JRFMuaXNzdWVzQ2hhcnQsY29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsKX0sZ2V0VXJsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuVVJMUy5wcm9qZWN0V2lkZ2V0KGUscy5XSURHRVRTX0lEUy5pc3N1ZXNDaGFydCx0KX19LHt0aXRsZTppLm1lc3NhZ2VzLnN5c3RlbUlzc3VlcyxpZDpzLldJREdFVFNfSURTLnN5c3RlbUlzc3Vlcyxzb3VyY2U6cy5XSURHRVRTX0lEUy5pc3N1ZXNDaGFydCxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfX0se3RpdGxlOmkubWVzc2FnZXMuYXV0b0J1Z3MsaWQ6cy5XSURHRVRTX0lEUy5hdXRvQnVncyxzb3VyY2U6cy5XSURHRVRTX0lEUy5pc3N1ZXNDaGFydCxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfX1dLGw9dC5hY3Rpdml0eUl0ZW09e3RpdGxlOmkubWVzc2FnZXMuYWN0aXZpdGllcyxpZDpzLldJREdFVFNfSURTLmFjdGl2aXRpZXMsc291cmNlOnMuV0lER0VUU19JRFMuYWN0aXZpdGllcyxjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwpfSxnZXRVcmw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5VUkxTLnByb2plY3RXaWRnZXQoZSxzLldJREdFVFNfSURTLmFjdGl2aXRpZXMsdCl9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwic3RhdHVzUGFnZVdpZGdldHMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3N0YXR1c1BhZ2VXaWRnZXRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsImFjdGl2aXR5SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvc3RhdHVzUGFnZVdpZGdldHMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSU5GT19DT05GSUc9dC5VTklRVUVfVElDS0VUUz10LlVTRVJTX1FVQU5USVRZPXQuTEFVTkNIRVNfUVVBTlRJVFk9dC5MQVVOQ0hFU19QRVJfV0VFSz12b2lkIDA7dmFyIHIsbyxzPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShzKSxhPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbD10LkxBVU5DSEVTX1BFUl9XRUVLPSJsYXVuY2hlc1BlcldlZWsiLHU9dC5MQVVOQ0hFU19RVUFOVElUWT0ibGF1bmNoZXNRdWFudGl0eSIsYz10LlVTRVJTX1FVQU5USVRZPSJ1c2Vyc1F1YW50aXR5IixkPXQuVU5JUVVFX1RJQ0tFVFM9InVuaXF1ZVRpY2tldHMiLF89KDAsYS5kZWZpbmVNZXNzYWdlcykoKHI9e30sKDAsaS5kZWZhdWx0KShyLHUse2lkOiJHZW5lcmFsSW5mby5sYXVuY2hlc1F1YW50aXR5IixkZWZhdWx0TWVzc2FnZToibGF1bmNoZXMifSksKDAsaS5kZWZhdWx0KShyLGwse2lkOiJHZW5lcmFsSW5mby5sYXVuY2hlc1BlcldlZWsiLGRlZmF1bHRNZXNzYWdlOiJsYXVuY2hlcyBhdmVyYWdlIHBlciB3ZWVrIn0pLCgwLGkuZGVmYXVsdCkocixjLHtpZDoiR2VuZXJhbEluZm8udXNlcnNRdWFudGl0eSIsZGVmYXVsdE1lc3NhZ2U6Im1lbWJlcnMifSksKDAsaS5kZWZhdWx0KShyLGQse2lkOiJHZW5lcmFsSW5mby51bmlxdWVUaWNrZXRzIixkZWZhdWx0TWVzc2FnZToidW5pcXVlIGJ1ZyBwb3N0ZWQifSkscikpLHA9dC5JTkZPX0NPTkZJRz0obz17fSwoMCxpLmRlZmF1bHQpKG8sdSxfW3VdKSwoMCxpLmRlZmF1bHQpKG8sbCxfW2xdKSwoMCxpLmRlZmF1bHQpKG8sYyxfW2NdKSwoMCxpLmRlZmF1bHQpKG8sZCxfW2RdKSxvKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiTEFVTkNIRVNfUEVSX1dFRUsiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiTEFVTkNIRVNfUVVBTlRJVFkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYywiVVNFUlNfUVVBTlRJVFkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiVU5JUVVFX1RJQ0tFVFMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiSU5GT19DT05GSUciLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9nZW5lcmFsSW5mby5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdlbmVyYWxJbmZvPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGM9cih1KSxkPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vY29uc3RhbnRzLmpzIiksXz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC93aWRnZXRzL2dlbmVyYWxJbmZvL2dlbmVyYWxJbmZvLnNjc3MiKSxwPXIoXyksZj1jLmRlZmF1bHQuYmluZChwLmRlZmF1bHQpLG09dC5HZW5lcmFsSW5mbz0oMCxsLmluamVjdEludGwpKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW50bC5mb3JtYXRNZXNzYWdlLHI9dC5kYXRhO3JldHVybigwLHMuZGVmYXVsdCkoZC5JTkZPX0NPTkZJRykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LGNsYXNzTmFtZTpmKCJpbmZvLXJvdyIpfSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ZigiZGF0YS12YWx1ZSIpfSxyW3RdKSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ZigiZGF0YS10ZXh0Iil9LG4oZC5JTkZPX0NPTkZJR1t0XSkpKX0pfSk7bS5wcm9wVHlwZXM9e2RhdGE6YS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiR2VuZXJhbEluZm8iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vZ2VuZXJhbEluZm8uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvZ2VuZXJhbEluZm8vZ2VuZXJhbEluZm8uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9nZW5lcmFsSW5mby5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImdlbmVyYWwtaW5mbyI6ImdlbmVyYWxJbmZvX19nZW5lcmFsLWluZm9fX18zYkVuSyIsImluZm8tcm93IjoiZ2VuZXJhbEluZm9fX2luZm8tcm93X19fUE9jSmMiLCJkYXRhLXZhbHVlIjoiZ2VuZXJhbEluZm9fX2RhdGEtdmFsdWVfX18zTXQzNiIsImRhdGEtdGV4dCI6ImdlbmVyYWxJbmZvX19kYXRhLXRleHRfX18xNjNCYyJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9nZW5lcmFsSW5mby5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2VuZXJhbEluZm8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdlbmVyYWxJbmZvfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9nZW5lcmFsSW5mby9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHZW5lcmFsSW5mbyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuR2VuZXJhbEluZm99fSk7dmFyIG89bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9vd25lcnNJbmZvL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk93bmVyc0luZm8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLk93bmVyc0luZm99fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC93aWRnZXRzL293bmVyc0luZm8vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvb3duZXJzSW5mby9vd25lcnNJbmZvLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPd25lcnNJbmZvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Pd25lcnNJbmZvfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9vd25lcnNJbmZvL293bmVyc0luZm8uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Pd25lcnNJbmZvPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxhPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGw9cihhKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zY3JvbGxXcmFwcGVyL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbm9JdGVtTWVzc2FnZS9pbmRleC5qcyIpLGQ9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9vd25lcnNJbmZvL293bmVyc0luZm8uc2NzcyIpLF89cihkKSxwPWwuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj0oMCxpLmRlZmluZU1lc3NhZ2VzKSh7bm9EYXRhTWVzc2FnZTp7aWQ6Ik93bmVyc0luZm8ubm9EYXRhTWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6Ik5vIGxhdW5jaGVzIHdlcmUgcGVyZm9ybWVkIGF0IHRoZSBzZWxlY3RlZCBwZXJpb2QifX0pLG09dC5Pd25lcnNJbmZvPSgwLGkuaW5qZWN0SW50bCkoZnVuY3Rpb24odCl7dmFyIG49dC5pbnRsLmZvcm1hdE1lc3NhZ2Uscj10LmRhdGEubGF1bmNoZXNQZXJVc2VyLG89dm9pZCAwPT09cj9bXTpyO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJvd25lcnMtaW5mbyIpfSxlLmNyZWF0ZUVsZW1lbnQodS5TY3JvbGxXcmFwcGVyLHthdXRvSGVpZ2h0OiEwLGF1dG9IZWlnaHRNYXg6MTgwLGhpZGVUcmFja3NXaGVuTm90TmVlZGVkOiEwfSxvLmxlbmd0aD9vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dC5mdWxsTmFtZSxjbGFzc05hbWU6cCgiaW5mby1yb3ciKX0sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnAoImluZm8taXRlbSIpfSx0LmZ1bGxOYW1lKSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6cCgiaW5mby1pdGVtIil9LHQuY291bnQpKX0pOmUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoIm5vLWRhdGEtd3JhcHBlciIpfSxlLmNyZWF0ZUVsZW1lbnQoYy5Ob0l0ZW1NZXNzYWdlLHttZXNzYWdlOm4oZi5ub0RhdGFNZXNzYWdlKX0pKSkpfSk7bS5wcm9wVHlwZXM9e2RhdGE6cy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiT3duZXJzSW5mbyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdFN0YXR1c1BhZ2Uvc3RhdHVzUGFnZUNvbnRlbnQvd2lkZ2V0cy9vd25lcnNJbmZvL293bmVyc0luZm8uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RTdGF0dXNQYWdlL3N0YXR1c1BhZ2VDb250ZW50L3dpZGdldHMvb3duZXJzSW5mby9vd25lcnNJbmZvLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC93aWRnZXRzL293bmVyc0luZm8vb3duZXJzSW5mby5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9zdGF0dXNQYWdlQ29udGVudC93aWRnZXRzL293bmVyc0luZm8vb3duZXJzSW5mby5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im93bmVycy1pbmZvIjoib3duZXJzSW5mb19fb3duZXJzLWluZm9fX18zejZjZCIsImluZm8tcm93Ijoib3duZXJzSW5mb19faW5mby1yb3dfX18zVzkzRiIsImluZm8taXRlbSI6Im93bmVyc0luZm9fX2luZm8taXRlbV9fXzJ6R3pPIiwibm8tZGF0YS13cmFwcGVyIjoib3duZXJzSW5mb19fbm8tZGF0YS13cmFwcGVyX19fMWxLUUkifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzUGFnZS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUHJvamVjdHNQYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Qcm9qZWN0c1BhZ2V9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHMvcHJvamVjdHMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0cz12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2luYXRpb24vaW5kZXguanMiKSx3PW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9pbmRleC5qcyIpLE09bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3BhZ2luYXRpb25Ub29sYmFyL2luZGV4LmpzIiksaz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNHcmlkL2luZGV4LmpzIiksST1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNUb29sYmFyL2luZGV4LmpzIiksUD17UHJvamVjdHM6e2Rpc3BsYXlOYW1lOiJQcm9qZWN0cyJ9fSxOPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0cy9wcm9qZWN0cy5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxIPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0cy9wcm9qZWN0cy5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxGPXQuUHJvamVjdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBOKEgodCxlKSxlKX19KCJQcm9qZWN0cyIpKChvPSgwLHguY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RzOigwLHcucHJvamVjdHNTZWxlY3RvcikoZSksbG9hZGluZzooMCx3LmxvYWRpbmdTZWxlY3RvcikoZSksdmlld01vZGU6KDAsdy52aWV3TW9kZVNlbGVjdG9yKShlKX19KSxzPSgwLEQud2l0aFBhZ2luYXRpb24pKHtwYWdpbmF0aW9uU2VsZWN0b3I6dy5wcm9qZWN0c1BhZ2luYXRpb25TZWxlY3Rvcn0pLG8oaT1zKGk9KDAsTC5pbmplY3RJbnRsKSgobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxfLmRlZmF1bHQpKHRoaXMsdCksKDAsaC5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsYy5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlUGFnZSxuPWUuaXRlbUNvdW50LHI9ZS5wYWdlQ291bnQsbz1lLnBhZ2VTaXplLHM9ZS5vbkNoYW5nZVBhZ2UsaT1lLm9uQ2hhbmdlUGFnZVNpemUsYT1lLmxvYWRpbmcsbD1lLnByb2plY3RzLHU9ZS52aWV3TW9kZTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5kZWZhdWx0LkZyYWdtZW50LG51bGwsQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Qcm9qZWN0c1Rvb2xiYXIsbnVsbCksdT09PXcuVEFCTEVfVklFVyYmQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Qcm9qZWN0c0dyaWQse2RhdGE6bCxsb2FkaW5nOmF9KSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLlBhZ2luYXRpb25Ub29sYmFyLHthY3RpdmVQYWdlOnQsaXRlbUNvdW50Om4scGFnZUNvdW50OnIscGFnZVNpemU6byxvbkNoYW5nZVBhZ2U6cyxvbkNoYW5nZVBhZ2VTaXplOml9KSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17YWN0aXZlUGFnZTpqLmRlZmF1bHQubnVtYmVyLGl0ZW1Db3VudDpqLmRlZmF1bHQubnVtYmVyLHBhZ2VDb3VudDpqLmRlZmF1bHQubnVtYmVyLHBhZ2VTaXplOmouZGVmYXVsdC5udW1iZXIsb25DaGFuZ2VQYWdlOmouZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25DaGFuZ2VQYWdlU2l6ZTpqLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGxvYWRpbmc6ai5kZWZhdWx0LmJvb2wscHJvamVjdHM6ai5kZWZhdWx0LmFycmF5T2Yoai5kZWZhdWx0Lm9iamVjdCksaW50bDpMLmludGxTaGFwZS5pc1JlcXVpcmVkLHZpZXdNb2RlOmouZGVmYXVsdC5zdHJpbmd9LGEuZGVmYXVsdFByb3BzPXthY3RpdmVQYWdlOjEsaXRlbUNvdW50Om51bGwscGFnZUNvdW50Om51bGwscGFnZVNpemU6dy5ERUZBVUxUX1BBR0lOQVRJT05bRC5TSVpFX0tFWV0sbG9hZGluZzohMSxwcm9qZWN0czpbXSx2aWV3TW9kZTp3LkdSSURfVklFV30saT1sKSl8fGkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsIlByb2plY3RzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHMvcHJvamVjdHMuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQcm9qZWN0c0dyaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlByb2plY3RzR3JpZH19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0c0dyaWQ9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxUPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9ncmlkL2luZGV4LmpzIiksQT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNHcmlkL3Byb2plY3RzR3JpZENvbHVtbnMuanN4IiksQz0oMCx2LmRlZmluZU1lc3NhZ2VzKSh7bmFtZUNvbDp7aWQ6IlByb2plY3RzR3JpZC5uYW1lQ29sIixkZWZhdWx0TWVzc2FnZToiTmFtZSJ9LHByb2plY3RUeXBlQ29sOntpZDoiUHJvamVjdHNHcmlkLnByb2plY3RUeXBlQ29sIixkZWZhdWx0TWVzc2FnZToiUHJvamVjdCBUeXBlIn0sb3JnYW5pemF0aW9uQ29sOntpZDoiUHJvamVjdHNHcmlkLm9yZ2FuaXphdGlvbkNvbCIsZGVmYXVsdE1lc3NhZ2U6Ik9yZ2FuaXphdGlvbiJ9LG1lbWJlcnNDb2w6e2lkOiJQcm9qZWN0c0dyaWQubWVtYmVyc0NvbCIsZGVmYXVsdE1lc3NhZ2U6Ik1lbWJlcnMifSxsYXVuY2hlc0NvbDp7aWQ6IlByb2plY3RzR3JpZC5sYXVuY2hlc0NvbCIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaGVzIn0sbGFzdExhdW5jaENvbDp7aWQ6IlByb2plY3RzR3JpZC5sYXN0TGF1bmNoQ29sIixkZWZhdWx0TWVzc2FnZToiTGFzdCBMYXVuY2ggZGF0ZSJ9fSksTz10LlByb2plY3RzR3JpZD0oMCx2LmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0Q29sdW1ucz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0Q29sdW1uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5DT0xVTU5TPXIuZ2V0Q29sdW1ucygpLG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb2x1bW5zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tpZDoibmFtZSIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoQy5uYW1lQ29sKX0sbWF4SGVpZ2h0OjE3MCxjb21wb25lbnQ6QS5OYW1lQ29sdW1ufSx7aWQ6InByb2plY3RUeXBlIix0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShDLnByb2plY3RUeXBlQ29sKX0sY29tcG9uZW50OkEuUHJvamVjdFR5cGVDb2x1bW59LHtpZDoib3JnYW5pemF0aW9uIix0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShDLm9yZ2FuaXphdGlvbkNvbCl9LGNvbXBvbmVudDpBLk9yZ2FuaXphdGlvbkNvbHVtbn0se2lkOiJtZW1iZXJzIix0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShDLm1lbWJlcnNDb2wpfSxjb21wb25lbnQ6QS5NZW1iZXJzQ29sdW1ufSx7aWQ6ImxhdW5jaGVzIix0aXRsZTp7ZnVsbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShDLmxhdW5jaGVzQ29sKX0sY29tcG9uZW50OkEuTGF1bmNoZXNDb2x1bW59LHtpZDoibGFzdExhdW5jaCIsdGl0bGU6e2Z1bGw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoQy5sYXN0TGF1bmNoQ29sKX0sY29tcG9uZW50OkEuTGFzdExhdW5jaENvbHVtbn1dfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmRhdGEsbj1lLmxvYWRpbmc7cmV0dXJuIGIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQuR3JpZCx7Y29sdW1uczp0aGlzLkNPTFVNTlMsZGF0YTp0LGxvYWRpbmc6bixjaGFuZ2VPbmx5TW9iaWxlTGF5b3V0OiEwLHNlbGVjdGFibGU6ITB9KX19XSksdH0oZy5QdXJlQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDp2LmludGxTaGFwZS5pc1JlcXVpcmVkLGRhdGE6eS5kZWZhdWx0LmFycmF5T2YoeS5kZWZhdWx0Lm9iamVjdCksbG9hZGluZzp5LmRlZmF1bHQuYm9vbH0scy5kZWZhdWx0UHJvcHM9e2RhdGE6W10sbG9hZGluZzohMX0sbz1pKSl8fG87IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE8sIlByb2plY3RzR3JpZCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicHJvamVjdHMtY29sIjoicHJvamVjdHNHcmlkX19wcm9qZWN0cy1jb2xfX18yMzZxViIsInByb2plY3QtdHlwZS1jb2wiOiJwcm9qZWN0c0dyaWRfX3Byb2plY3QtdHlwZS1jb2xfX18zaVUzUCJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWRDb2x1bW5zLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5MYXN0TGF1bmNoQ29sdW1uPXQuTGF1bmNoZXNDb2x1bW49dC5NZW1iZXJzQ29sdW1uPXQuT3JnYW5pemF0aW9uQ29sdW1uPXQuUHJvamVjdFR5cGVDb2x1bW49dC5OYW1lQ29sdW1uPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYWJzUmVsVGltZS9pbmRleC5qcyIpLGQ9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWQuc2NzcyIpLF89cihkKSxwPXUuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj10Lk5hbWVDb2x1bW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLnZhbHVlO3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInByb2plY3RzLWNvbCIsdCl9LG4ucHJvamVjdE5hbWUpfTtmLnByb3BUeXBlcz17Y2xhc3NOYW1lOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx2YWx1ZTphLmRlZmF1bHQub2JqZWN0fSxmLmRlZmF1bHRQcm9wcz17dmFsdWU6e319O3ZhciBtPXQuUHJvamVjdFR5cGVDb2x1bW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLnZhbHVlO3JldHVybiBzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInByb2plY3RzLWNvbCIsInByb2plY3QtdHlwZS1jb2wiLHQpfSxuLmVudHJ5VHlwZS50b0xvd2VyQ2FzZSgpKX07bS5wcm9wVHlwZXM9e2NsYXNzTmFtZTphLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6YS5kZWZhdWx0Lm9iamVjdH0sbS5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fTt2YXIgaD10Lk9yZ2FuaXphdGlvbkNvbHVtbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgicHJvamVjdHMtY29sIix0KX0sbi5vcmdhbml6YXRpb24pfTtoLnByb3BUeXBlcz17Y2xhc3NOYW1lOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx2YWx1ZTphLmRlZmF1bHQub2JqZWN0fSxoLmRlZmF1bHRQcm9wcz17dmFsdWU6e319O3ZhciBnPXQuTWVtYmVyc0NvbHVtbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgicHJvamVjdHMtY29sIix0KX0sbi51c2Vyc1F1YW50aXR5KX07Zy5wcm9wVHlwZXM9e2NsYXNzTmFtZTphLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdmFsdWU6YS5kZWZhdWx0Lm9iamVjdH0sZy5kZWZhdWx0UHJvcHM9e3ZhbHVlOnt9fTt2YXIgYj10LkxhdW5jaGVzQ29sdW1uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49ZS52YWx1ZTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJwcm9qZWN0cy1jb2wiLHQpfSxuLmxhdW5jaGVzUXVhbnRpdHkpfTtiLnByb3BUeXBlcz17Y2xhc3NOYW1lOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx2YWx1ZTphLmRlZmF1bHQub2JqZWN0fSxiLmRlZmF1bHRQcm9wcz17dmFsdWU6e319O3ZhciBFPXQuTGFzdExhdW5jaENvbHVtbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUudmFsdWU7cmV0dXJuIHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgicHJvamVjdHMtY29sIix0KX0sbi5sYXN0UnVuJiZzLmRlZmF1bHQuY3JlYXRlRWxlbWVudChjLkFic1JlbFRpbWUse3N0YXJ0VGltZTpuLmxhc3RSdW59KSl9O0UucHJvcFR5cGVzPXtjbGFzc05hbWU6YS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHZhbHVlOmEuZGVmYXVsdC5vYmplY3R9LEUuZGVmYXVsdFByb3BzPXt2YWx1ZTp7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIk5hbWVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkQ29sdW1ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJQcm9qZWN0VHlwZUNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWRDb2x1bW5zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsIk9yZ2FuaXphdGlvbkNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWRDb2x1bW5zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIk1lbWJlcnNDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkQ29sdW1ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJMYXVuY2hlc0NvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWRDb2x1bW5zLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEUsIkxhc3RMYXVuY2hDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c0dyaWQvcHJvamVjdHNHcmlkQ29sdW1ucy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzR3JpZC9wcm9qZWN0c0dyaWRDb2x1bW5zLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1BhZ2UuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0c1BhZ2U9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksST1yKGspLFA9bigiLi9zcmMvbGF5b3V0cy9wYWdlTGF5b3V0L2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0U2VjdGlvbnMuanMiKSxGPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxVPW4oIi4vc3JjL2NvbW1vbi9pbWcvYWRkLXByb2plY3QtaW5saW5lLnN2ZyIpLEc9cihVKSx6PW4oIi4vc3JjL2NvbW1vbi9pbWcvcHJvamVjdC11c2Vycy1pbmxpbmUuc3ZnIiksVj1yKHopLFc9bigiLi9zcmMvY29tbW9uL2ltZy9wcm9qZWN0LXNldHRpbmdzLWlubGluZS5zdmciKSxZPXIoVykscT1uKCIuL3NyYy9jb21tb24vaW1nL3Byb2plY3QtZXZlbnRzLWlubGluZS5zdmciKSxLPXIocSksWD1uKCIuL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0U3RhdHVzUGFnZS9pbmRleC5qcyIpLCQ9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdEV2ZW50c1BhZ2UvaW5kZXguanMiKSxRPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0cy9wcm9qZWN0cy5qc3giKSxKPW4oIi4vc3JjL3BhZ2VzL2FkbWluL2FkbWluUHJvamVjdFNldHRpbmdzUGFnZUNvbnRhaW5lci9pbmRleC5qcyIpLFo9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzUGFnZS5zY3NzIiksZWU9cihaKSx0ZT17UHJvamVjdHNQYWdlOntkaXNwbGF5TmFtZToiUHJvamVjdHNQYWdlIn19LG5lPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1BhZ2UuanN4Iixjb21wb25lbnRzOnRlLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLHJlPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1BhZ2UuanN4Iixjb21wb25lbnRzOnRlLGxvY2FsczpbXSxpbXBvcnRzOltTLmRlZmF1bHQsVC5kZWZhdWx0XX0pLG9lPUkuZGVmYXVsdC5iaW5kKGVlLmRlZmF1bHQpLHNlPSgwLE0uZGVmaW5lTWVzc2FnZXMpKChvPXtwYWdlVGl0bGU6e2lkOiJQcm9qZWN0c1BhZ2UudGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJBbGwgcHJvamVjdHMifSxhZGRQcm9qZWN0OntpZDoiUHJvamVjdHNQYWdlLmFkZFByb2plY3QiLGRlZmF1bHRNZXNzYWdlOiJBZGQgTmV3IFByb2plY3QifX0sKDAseS5kZWZhdWx0KShvLEguU0VUVElOR1MrIlRpdGxlIix7aWQ6IlByb2plY3REZXRhaWxzUGFnZVNldHRpbmdzLnRpdGxlIixkZWZhdWx0TWVzc2FnZToiU2V0dGluZ3MifSksKDAseS5kZWZhdWx0KShvLEguTUVNQkVSUysiVGl0bGUiLHtpZDoiUHJvamVjdERldGFpbHNQYWdlTWVtYmVycy50aXRsZSIsZGVmYXVsdE1lc3NhZ2U6Ik1lbWJlcnMifSksKDAseS5kZWZhdWx0KShvLEguRVZFTlRTKyJUaXRsZSIse2lkOiJQcm9qZWN0RGV0YWlsc1BhZ2VFdmVudHMudGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJFdmVudHMifSksbykpLGllPVt7a2V5OkguTUVNQkVSUyxpY29uOlYuZGVmYXVsdH0se2tleTpILlNFVFRJTkdTLGljb246WS5kZWZhdWx0fSx7a2V5OkguRVZFTlRTLGljb246Sy5kZWZhdWx0fV0sYWU9dC5Qcm9qZWN0c1BhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuZShyZSh0LGUpLGUpfX0oIlByb2plY3RzUGFnZSIpKChzPSgwLEQuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RJZDooMCxOLnByb2plY3RJZFNlbGVjdG9yKShlKSxzZWN0aW9uOigwLE4ucHJvamVjdFNlY3Rpb25TZWxlY3RvcikoZSl9fSx7cmVkaXJlY3RUb1NlY3Rpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCx3LnJlZGlyZWN0KSh7dHlwZTpOLlBST0pFQ1RfREVUQUlMU19QQUdFLHBheWxvYWQ6e3Byb2plY3RJZDplLHByb2plY3RTZWN0aW9uOnQsc2V0dGluZ3NUYWI6dD09PUguU0VUVElOR1M/Ri5HRU5FUkFMOnZvaWQgMH19KX19KSkoaT0oMCxNLmluamVjdEludGwpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25IZWFkZXJCdXR0b25DbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25IZWFkZXJCdXR0b25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRCcmVhZGNydW1icz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucmVuZGVySGVhZGVyQnV0dG9ucz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXJTZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW5kZXJTZWN0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fcmVuZGVyU2VjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyU2VjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkhlYWRlckJ1dHRvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7dC5wcm9wcy5yZWRpcmVjdFRvU2VjdGlvbih0LnByb3BzLnByb2plY3RJZCxlKX19fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUucHJvamVjdElkLHI9ZS5zZWN0aW9uLG89W3t0aXRsZTp0KHNlLnBhZ2VUaXRsZSksbGluazp7dHlwZTpOLlBST0pFQ1RTX1BBR0V9fV07cmV0dXJuIG4mJm8ucHVzaCh7dGl0bGU6bixsaW5rOnt0eXBlOk4uUFJPSkVDVF9ERVRBSUxTX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOm4scHJvamVjdFNlY3Rpb246bnVsbH19fSksciYmby5wdXNoKHt0aXRsZTp0KHNlW3IrIlRpdGxlIl0pfSksb319LHtrZXk6Il9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVySGVhZGVyQnV0dG9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5pbnRsLmZvcm1hdE1lc3NhZ2Uscj10LnByb2plY3RJZCxvPXQuc2VjdGlvbjtyZXR1cm4gcj9TLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm9lKCJoZWFkZXItYnV0dG9ucyIpfSxpZS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dC5rZXkscz10Lmljb247cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEIuR2hvc3RCdXR0b24se2tleTpyLGRpc2FibGVkOm89PT1yLGljb246cyxvbkNsaWNrOmUub25IZWFkZXJCdXR0b25DbGljayhyKSx0aXRsZTpuKHNlW3IrIlRpdGxlIl0pfSxuKHNlW3IrIlRpdGxlIl0pKX0pKTpTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChCLkdob3N0QnV0dG9uLHtpY29uOkcuZGVmYXVsdH0sbihzZS5hZGRQcm9qZWN0KSl9fSx7a2V5OiJfX3JlbmRlclNlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclNlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlclNlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlclNlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlclNlY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wcm9qZWN0SWQsbj1lLnNlY3Rpb247aWYoIXQpcmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEuUHJvamVjdHMsbnVsbCk7c3dpdGNoKG4pe2Nhc2UgSC5TRVRUSU5HUzpyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSi5BZG1pblByb2plY3RTZXR0aW5nc1BhZ2VDb250YWluZXIse3Byb2plY3RJZDp0fSk7Y2FzZSBILk1FTUJFUlM6cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJoMSIsbnVsbCwiUHJvamVjdCBNZW1iZXJzIik7Y2FzZSBILkVWRU5UUzpyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJC5Qcm9qZWN0RXZlbnRzUGFnZSxudWxsKTtkZWZhdWx0OnJldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChYLlByb2plY3RTdGF0dXNQYWdlLHtwcm9qZWN0SWQ6dH0pfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5QYWdlTGF5b3V0LG51bGwsUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5QYWdlSGVhZGVyLHticmVhZGNydW1iczp0aGlzLmdldEJyZWFkY3J1bWJzKCl9LHRoaXMucmVuZGVySGVhZGVyQnV0dG9ucygpKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLlBhZ2VTZWN0aW9uLG51bGwsdGhpcy5yZW5kZXJTZWN0aW9uKCkpKX19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtpbnRsOk0uaW50bFNoYXBlLmlzUmVxdWlyZWQsc2VjdGlvbjpMLmRlZmF1bHQuc3RyaW5nLHByb2plY3RJZDpMLmRlZmF1bHQub25lT2ZUeXBlKFtMLmRlZmF1bHQubnVtYmVyLEwuZGVmYXVsdC5zdHJpbmddKSxyZWRpcmVjdFRvU2VjdGlvbjpMLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxhLmRlZmF1bHRQcm9wcz17c2VjdGlvbjp2b2lkIDAscHJvamVjdElkOnZvaWQgMH0saT1sKSl8fGkpfHxpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYWUsIlByb2plY3RzUGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzUGFnZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvZSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1BhZ2UuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoc2UsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNQYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGllLCJIRUFERVJfQlVUVE9OUyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzUGFnZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1BhZ2Uuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJoZWFkZXItYnV0dG9ucyI6InByb2plY3RzUGFnZV9faGVhZGVyLWJ1dHRvbnNfX18xNVd2eCJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9wcm9qZWN0c1Rvb2xiYXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlByb2plY3RzVG9vbGJhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUHJvamVjdHNUb29sYmFyfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9wcm9qZWN0c1Rvb2xiYXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qcm9qZWN0c1Rvb2xiYXI9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRTZWFyY2gvaW5kZXguanN4IiksTT1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FkbWluaXN0cmF0ZS9wcm9qZWN0cy9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tbW9uL2ltZy9leHBvcnQtaW5saW5lLnN2ZyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbW1vbi9pbWcvZ3JpZC1pbmxpbmUuc3ZnIiksSD1yKE4pLEY9bigiLi9zcmMvY29tbW9uL2ltZy90YWJsZS1pbmxpbmUuc3ZnIiksQj1yKEYpLFU9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxHPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1Rvb2xiYXIvcHJvamVjdHNUb29sYmFyLnNjc3MiKSx6PXIoRyksVj17UHJvamVjdHNUb29sYmFyOntkaXNwbGF5TmFtZToiUHJvamVjdHNUb29sYmFyIn19LFc9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9wcm9qZWN0c1Rvb2xiYXIuanN4Iixjb21wb25lbnRzOlYsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksWT0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNUb29sYmFyL3Byb2plY3RzVG9vbGJhci5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxxPUQuZGVmYXVsdC5iaW5kKHouZGVmYXVsdCksSz0oMCx4LmRlZmluZU1lc3NhZ2VzKSh7c2VhcmNoUGxhY2Vob2xkZXI6e2lkOiJQcm9qZWN0c1Rvb2xiYXIuc2VhcmNoUGxhY2Vob2xkZXIiLGRlZmF1bHRNZXNzYWdlOiJTZWFyY2gifX0pLFg9dC5Qcm9qZWN0c1Rvb2xiYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBXKFkodCxlKSxlKX19KCJQcm9qZWN0c1Rvb2xiYXIiKSgobz0oMCxqLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnt2aWV3TW9kZTooMCxrLnZpZXdNb2RlU2VsZWN0b3IpKGUpfX0se3NldFZpZXdNb2RlOmsuc3RhcnRTZXRWaWV3TW9kZX0pKShzPSgwLHguaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkV4cG9ydFByb2plY3RzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkV4cG9ydFByb2plY3RzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25FeHBvcnRQcm9qZWN0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5ocmVmPVUuVVJMUy5leHBvcnRQcm9qZWN0cygpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLnZpZXdNb2RlLHI9ZS5zZXRWaWV3TW9kZTtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpxKCJ0b29sYmFyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cSgic2VhcmNoIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXRTZWFyY2gse21heExlbmd0aDoiMTI4IixwbGFjZWhvbGRlcjp0LmZvcm1hdE1lc3NhZ2UoSy5zZWFyY2hQbGFjZWhvbGRlcil9KSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpxKCJidXR0b25zIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cSgidG9vbGJhci1idXR0b24iKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5HaG9zdEJ1dHRvbix7aWNvbjpQLmRlZmF1bHQsbW9iaWxlRGlzYWJsZWQ6ITAsb25DbGljazp0aGlzLm9uRXhwb3J0UHJvamVjdHN9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHguRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlByb2plY3RzVG9vbGJhci5leHBvcnQiLGRlZmF1bHRNZXNzYWdlOiJFeHBvcnQifSkpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnEoInRvb2xiYXItYnV0dG9uIix7InRvb2xiYXItYWN0aXZlLWJ1dHRvbiI6bj09PWsuR1JJRF9WSUVXfSl9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uR2hvc3RCdXR0b24se2ljb246SC5kZWZhdWx0LG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcihrLkdSSURfVklFVyl9fSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cSgidG9vbGJhci1idXR0b24iLHsidG9vbGJhci1hY3RpdmUtYnV0dG9uIjpuPT09ay5UQUJMRV9WSUVXfSl9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uR2hvc3RCdXR0b24se2ljb246Qi5kZWZhdWx0LG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcihrLlRBQkxFX1ZJRVcpfX0pKSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6eC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx2aWV3TW9kZTpSLmRlZmF1bHQuc3RyaW5nLHNldFZpZXdNb2RlOlIuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXt2aWV3TW9kZTprLkdSSURfVklFV30scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWCwiUHJvamVjdHNUb29sYmFyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9wcm9qZWN0c1BhZ2UvcHJvamVjdHNUb29sYmFyL3Byb2plY3RzVG9vbGJhci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihxLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9wcm9qZWN0c1Rvb2xiYXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3Byb2plY3RzUGFnZS9wcm9qZWN0c1Rvb2xiYXIvcHJvamVjdHNUb29sYmFyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vcHJvamVjdHNQYWdlL3Byb2plY3RzVG9vbGJhci9wcm9qZWN0c1Rvb2xiYXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e3Rvb2xiYXI6InByb2plY3RzVG9vbGJhcl9fdG9vbGJhcl9fX2ZIZTkyIixzZWFyY2g6InByb2plY3RzVG9vbGJhcl9fc2VhcmNoX19fMUpYbkgiLGJ1dHRvbnM6InByb2plY3RzVG9vbGJhcl9fYnV0dG9uc19fX0pzdTBPIiwidG9vbGJhci1idXR0b24iOiJwcm9qZWN0c1Rvb2xiYXJfX3Rvb2xiYXItYnV0dG9uX19fVTRyZTYiLCJ0b29sYmFyLWFjdGl2ZS1idXR0b24iOiJwcm9qZWN0c1Rvb2xiYXJfX3Rvb2xiYXItYWN0aXZlLWJ1dHRvbl9fXzFkb1pJIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tZXNzYWdlcz10LkxEQVBTX1BSRUZJWD10LkxEQVBfUFJFRklYPXQuUEhPVE9fS0VZPXQuRlVMTF9OQU1FX0tFWT10LkVNQUlMX0tFWT10LkJBU0VfRE5fS0VZPXQuVVJMX0tFWT10LkVOQUJMRURfS0VZPXQuTERBUF9BVFRSSUJVVEVTX0tFWT12b2lkIDA7dmFyIHI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxvPXQuTERBUF9BVFRSSUJVVEVTX0tFWT0ibGRhcEF0dHJpYnV0ZXMiLHM9dC5FTkFCTEVEX0tFWT0iZW5hYmxlZCIsaT10LlVSTF9LRVk9InVybCIsYT10LkJBU0VfRE5fS0VZPSJiYXNlRG4iLGw9dC5FTUFJTF9LRVk9InN5bmNocm9uaXphdGlvbkF0dHJpYnV0ZXMuZW1haWwiLHU9dC5GVUxMX05BTUVfS0VZPSJzeW5jaHJvbml6YXRpb25BdHRyaWJ1dGVzLmZ1bGxOYW1lIixjPXQuUEhPVE9fS0VZPSJzeW5jaHJvbml6YXRpb25BdHRyaWJ1dGVzLnBob3RvIixkPXQuTERBUF9QUkVGSVg9ImxkYXA6Ly8iLF89dC5MREFQU19QUkVGSVg9ImxkYXBzOi8vIixwPXQubWVzc2FnZXM9KDAsci5kZWZpbmVNZXNzYWdlcykoe3dhcm5pbmdNZXNzYWdlOntpZDoiU2VydmVyU2V0dGluZ3NUYWJzLndhcm5pbmdNZXNzYWdlIixkZWZhdWx0TWVzc2FnZToiVGVzdCBjb25uZWN0aW9uIHdhcyBmYWlsZWQ6In0sdXBkYXRlQXV0aFN1Y2Nlc3M6e2lkOiJTZXJ2ZXJTZXR0aW5nc1RhYnMudXBkYXRlQXV0aFN1Y2Nlc3MiLGRlZmF1bHRNZXNzYWdlOiJPQXV0aCBpbnRlZ3JhdGlvbiBzZXR0aW5ncyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiTERBUF9BVFRSSUJVVEVTX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJFTkFCTEVEX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJVUkxfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkJBU0VfRE5fS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkVNQUlMX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJGVUxMX05BTUVfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlBIT1RPX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJMREFQX1BSRUZJWCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJMREFQU19QUkVGSVgiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9mb3JtQ29udHJvbGxlci9mb3JtQ29udHJvbGxlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvcm1Db250cm9sbGVyPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx3PXIoRCksTT1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLGs9cihNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxpemF0aW9uLmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy9wcmVsb2FkZXJzL3NwaW5uaW5nUHJlbG9hZGVyL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvYmlnQnV0dG9uL2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb21tb24vaW1nL2Vycm9yLWlubGluZS5zdmciKSx6PXIoRyksVj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2luZGV4LmpzIiksVz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2VjdGlvbkhlYWRlci9pbmRleC5qcyIpLFk9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxxPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvZm9ybUNvbnRyb2xsZXIuc2NzcyIpLEs9cihxKSxYPXtGb3JtQ29udHJvbGxlcjp7ZGlzcGxheU5hbWU6IkZvcm1Db250cm9sbGVyIn19LCQ9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9mb3JtQ29udHJvbGxlci9mb3JtQ29udHJvbGxlci5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxRPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvZm9ybUNvbnRyb2xsZXIuanN4Iixjb21wb25lbnRzOlgsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksSj13LmRlZmF1bHQuYmluZChLLmRlZmF1bHQpLFo9dC5Gb3JtQ29udHJvbGxlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuICQoUSh0LGUpLGUpfX0oIkZvcm1Db250cm9sbGVyIikoKG89KDAsSS5jb25uZWN0KShudWxsLHtzaG93Tm90aWZpY2F0aW9uOkYuc2hvd05vdGlmaWNhdGlvbn0pKShzPSgwLEwuaW5qZWN0SW50bCkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17bG9hZGluZzohMCxlcnJvck1lc3NhZ2U6IiJ9LHIub25Gb3JtU3VibWl0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudXBkYXRlQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX191cGRhdGVDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZmV0Y2hJbml0aWFsQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19mZXRjaEluaXRpYWxDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudXBkYXRlQ29uZmlnU3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jYXRjaFJlcXVlc3RFcnJvcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc3RvcExvYWRpbmc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3N0b3BMb2FkaW5nX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6Il9fc3RvcExvYWRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N0b3BMb2FkaW5nX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYXRjaFJlcXVlc3RFcnJvcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUNvbmZpZ1N1Y2Nlc3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUNvbmZpZ1N1Y2Nlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZldGNoSW5pdGlhbENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmV0Y2hJbml0aWFsQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUNvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZldGNoSW5pdGlhbENvbmZpZygpfX0se2tleToiX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKHtsb2FkaW5nOiEwLGVycm9yTWVzc2FnZToiIn0pO3ZhciB0PXRoaXMucHJvcHMucHJlcGFyZURhdGFCZWZvcmVTdWJtaXQoZSksbj17bWV0aG9kOnRoaXMucHJvcHMuZW5hYmxlZD8iUE9TVCI6IkRFTEVURSJ9O3JldHVybiB0aGlzLnByb3BzLmVuYWJsZWQmJihuLmRhdGE9dCksdGhpcy51cGRhdGVDb25maWcobixlLmlkKX19LHtrZXk6Il9fdXBkYXRlQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUNvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybigwLFAuZmV0Y2gpKHRoaXMucHJvcHMuZm9ybU9wdGlvbnMuZ2V0U3VibWl0VXJsKHQpLGUpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG4udXBkYXRlQ29uZmlnU3VjY2VzcyhlLm1ldGhvZCx0KX0pLmNhdGNoKHRoaXMuY2F0Y2hSZXF1ZXN0RXJyb3IpfX0se2tleToiX19mZXRjaEluaXRpYWxDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoSW5pdGlhbENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZmV0Y2hJbml0aWFsQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mZXRjaEluaXRpYWxDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZldGNoSW5pdGlhbENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuKDAsUC5mZXRjaCkodGhpcy5wcm9wcy5mb3JtT3B0aW9ucy5pbml0aWFsQ29uZmlnVXJsKS50aGVuKGZ1bmN0aW9uKHQpe3ZhciBuPWUucHJvcHMscj1uLnByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZSxvPW4uaW5pdGlhbGl6ZSxzPW4uZm9ybU9wdGlvbnMuZGVmYXVsdEZvcm1Db25maWcsaT1yKHQpO28oKDAsdS5kZWZhdWx0KSh7fSxzLGkpKSxlLnN0b3BMb2FkaW5nKCl9KS5jYXRjaCh0aGlzLnN0b3BMb2FkaW5nKX19LHtrZXk6Il9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlQ29uZmlnU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLmludGwuZm9ybWF0TWVzc2FnZSxvPW4uZm9ybU9wdGlvbnMuZGVmYXVsdEZvcm1Db25maWcscz1uLnN1Y2Nlc3NNZXNzYWdlLGk9bi5wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemU7KDAsbi5pbml0aWFsaXplKSgiREVMRVRFIj09PWU/bzooMCx1LmRlZmF1bHQpKHt9LG8saSh0KSkpLHRoaXMucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTpyKHMpLHR5cGU6Ri5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pLHRoaXMuc3RvcExvYWRpbmcoKX19LHtrZXk6Il9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NhdGNoUmVxdWVzdEVycm9yX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jYXRjaFJlcXVlc3RFcnJvcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NhdGNoUmVxdWVzdEVycm9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoe2xvYWRpbmc6ITEsZXJyb3JNZXNzYWdlOnRoaXMucHJvcHMuZm9ybU9wdGlvbnMud2l0aEVycm9yQmxvY2smJmUubWVzc2FnZX0pfX0se2tleToiX19zdG9wTG9hZGluZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc3RvcExvYWRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3N0b3BMb2FkaW5nX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdG9wTG9hZGluZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc3RvcExvYWRpbmdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUuZm9ybU9wdGlvbnMscj1uLkZpZWxkc0NvbXBvbmVudCxvPW4uY3VzdG9tUHJvcHMscz1uLndpdGhFcnJvckJsb2NrLGk9bi5zd2l0Y2hlckxhYmVsLGE9bi5mb3JtSGVhZGVyLGw9ZS5oYW5kbGVTdWJtaXQsdT1lLmVuYWJsZWQ7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SigiZm9ybS1jb250cm9sbGVyIil9LGEmJk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SigiaGVhZGluZy13cmFwcGVyIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFcuU2VjdGlvbkhlYWRlcix7dGV4dDphfSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJmb3JtIix7Y2xhc3NOYW1lOkooImZvcm0iKSxvblN1Ym1pdDpsKHRoaXMub25Gb3JtU3VibWl0KX0sdGhpcy5zdGF0ZS5sb2FkaW5nP08uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEIuU3Bpbm5pbmdQcmVsb2FkZXIsbnVsbCk6Ty5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5Gb3JtRmllbGQse25hbWU6WS5FTkFCTEVEX0tFWSxsYWJlbDp0KGkpLGxhYmVsQ2xhc3NOYW1lOkooImxhYmVsIiksZm9ybWF0OkJvb2xlYW4scGFyc2U6Qm9vbGVhbn0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5JbnB1dEJpZ1N3aXRjaGVyLHttb2JpbGVEaXNhYmxlZDohMH0pKSx1JiZPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyLG8pLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuQmlnQnV0dG9uLHtjbGFzc05hbWU6Sigic3VibWl0LWJ1dHRvbiIpLGRpc2FibGVkOnRoaXMuc3RhdGUubG9hZGluZyx0eXBlOiJzdWJtaXQiLG1vYmlsZURpc2FibGVkOiEwfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpKKCJzdWJtaXQtYnV0dG9uLXRpdGxlIil9LHQoTi5DT01NT05fTE9DQUxFX0tFWVMuU1VCTUlUKSkpLHMmJnRoaXMuc3RhdGUuZXJyb3JNZXNzYWdlJiZPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkooImVycm9yLW1lc3NhZ2UtYmxvY2siKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIse2NsYXNzTmFtZTpKKCJ3YXJuaW5nLXdyYXBwZXIiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpKKCJ3YXJuaW5nLWljb24iKX0sKDAsay5kZWZhdWx0KSh6LmRlZmF1bHQpKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpKKCJ3YXJuaW5nLW1lc3NhZ2UiKX0sdChZLm1lc3NhZ2VzLndhcm5pbmdNZXNzYWdlKSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SigiZXJyb3ItbWVzc2FnZSIpfSx0aGlzLnN0YXRlLmVycm9yTWVzc2FnZSkpKSl9fV0pLHR9KEMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDpMLmludGxTaGFwZS5pc1JlcXVpcmVkLGhhbmRsZVN1Ym1pdDp4LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGluaXRpYWxpemU6eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxlbmFibGVkOnguZGVmYXVsdC5ib29sLHByZXBhcmVEYXRhQmVmb3JlU3VibWl0OnguZGVmYXVsdC5mdW5jLHByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZTp4LmRlZmF1bHQuZnVuYyxzaG93Tm90aWZpY2F0aW9uOnguZGVmYXVsdC5mdW5jLHN1Y2Nlc3NNZXNzYWdlOnguZGVmYXVsdC5vbmVPZlR5cGUoW3guZGVmYXVsdC5zdHJpbmcseC5kZWZhdWx0Lm9iamVjdF0pLGZvcm1PcHRpb25zOnguZGVmYXVsdC5zaGFwZSh7c3dpdGNoZXJMYWJlbDp4LmRlZmF1bHQub25lT2ZUeXBlKFt4LmRlZmF1bHQuc3RyaW5nLHguZGVmYXVsdC5vYmplY3RdKS5pc1JlcXVpcmVkLEZpZWxkc0NvbXBvbmVudDp4LmRlZmF1bHQub25lT2ZUeXBlKFt4LmRlZmF1bHQuZnVuYyx4LmRlZmF1bHQubm9kZV0pLmlzUmVxdWlyZWQsaW5pdGlhbENvbmZpZ1VybDp4LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsZ2V0U3VibWl0VXJsOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZm9ybUhlYWRlcjp4LmRlZmF1bHQub25lT2ZUeXBlKFt4LmRlZmF1bHQuc3RyaW5nLHguZGVmYXVsdC5ub2RlXSksY3VzdG9tUHJvcHM6eC5kZWZhdWx0Lm9iamVjdCx3aXRoRXJyb3JCbG9jazp4LmRlZmF1bHQuYm9vbCxkZWZhdWx0Rm9ybUNvbmZpZzp4LmRlZmF1bHQub2JqZWN0fSl9LGkuZGVmYXVsdFByb3BzPXtlbmFibGVkOiExLHByZXBhcmVEYXRhQmVmb3JlU3VibWl0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxwcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHNob3dOb3RpZmljYXRpb246ZnVuY3Rpb24oKXt9LHN1Y2Nlc3NNZXNzYWdlOiIiLGZvcm1PcHRpb25zOntmb3JtSGVhZGVyOiIiLGN1c3RvbVByb3BzOnt9LHdpdGhFcnJvckJsb2NrOiExLGRlZmF1bHRGb3JtQ29uZmlnOnt9fX0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWiwiRm9ybUNvbnRyb2xsZXIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvZm9ybUNvbnRyb2xsZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvZm9ybUNvbnRyb2xsZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2Zvcm1Db250cm9sbGVyL2Zvcm1Db250cm9sbGVyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZm9ybS1jb250cm9sbGVyIjoiZm9ybUNvbnRyb2xsZXJfX2Zvcm0tY29udHJvbGxlcl9fXzNMZkxuIiwiaGVhZGluZy13cmFwcGVyIjoiZm9ybUNvbnRyb2xsZXJfX2hlYWRpbmctd3JhcHBlcl9fXzNxUGpjIixmb3JtOiJmb3JtQ29udHJvbGxlcl9fZm9ybV9fXy00empMIixsYWJlbDoiZm9ybUNvbnRyb2xsZXJfX2xhYmVsX19fZDhTb28iLCJzdWJtaXQtYnV0dG9uIjoiZm9ybUNvbnRyb2xsZXJfX3N1Ym1pdC1idXR0b25fX185bHpUOCIsInN1Ym1pdC1idXR0b24tdGl0bGUiOiJmb3JtQ29udHJvbGxlcl9fc3VibWl0LWJ1dHRvbi10aXRsZV9fXzNwQlBZIiwiZXJyb3ItbWVzc2FnZS1ibG9jayI6ImZvcm1Db250cm9sbGVyX19lcnJvci1tZXNzYWdlLWJsb2NrX19fM1QzeHkiLCJ3YXJuaW5nLXdyYXBwZXIiOiJmb3JtQ29udHJvbGxlcl9fd2FybmluZy13cmFwcGVyX19fMm11ZXAiLCJ3YXJuaW5nLWljb24iOiJmb3JtQ29udHJvbGxlcl9fd2FybmluZy1pY29uX19fR05QYjUiLCJ3YXJuaW5nLW1lc3NhZ2UiOiJmb3JtQ29udHJvbGxlcl9fd2FybmluZy1tZXNzYWdlX19fMkptWnMiLCJlcnJvci1tZXNzYWdlIjoiZm9ybUNvbnRyb2xsZXJfX2Vycm9yLW1lc3NhZ2VfX18xU1Q0UCJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9mb3JtQ29udHJvbGxlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9mb3JtQ29udHJvbGxlci9mb3JtQ29udHJvbGxlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRm9ybUNvbnRyb2xsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkZvcm1Db250cm9sbGVyfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemU9dC52YWxpZGF0ZUxkYXBBdHRyaWJ1dGVzPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHU9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxjPXQudmFsaWRhdGVMZGFwQXR0cmlidXRlcz1mdW5jdGlvbihlKXtyZXR1cm57dXJsOighZXx8IWUudXJsfHwhbC52YWxpZGF0ZS51cmxQYXJ0KGUudXJsKSkmJiJyZXF1aXJlZEZpZWxkSGludCIsYmFzZURuOighZXx8IWUuYmFzZURuKSYmInJlcXVpcmVkRmllbGRIaW50IixzeW5jaHJvbml6YXRpb25BdHRyaWJ1dGVzOntlbWFpbDooIWV8fCFlLnN5bmNocm9uaXphdGlvbkF0dHJpYnV0ZXN8fCFlLnN5bmNocm9uaXphdGlvbkF0dHJpYnV0ZXMuZW1haWwpJiYicmVxdWlyZWRGaWVsZEhpbnQifX19LGQ9dC5wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9KGVbdS5MREFQX0FUVFJJQlVURVNfS0VZXXx8e30pW3UuRU5BQkxFRF9LRVldLG49KDAsYS5kZWZhdWx0KSh7fSx1LkVOQUJMRURfS0VZLHQpO3JldHVybiB0JiYobj0oMCxzLmRlZmF1bHQpKHt9LG4sZSkpLG59OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJ2YWxpZGF0ZUxkYXBBdHRyaWJ1dGVzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwicHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL3V0aWxzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTZXJ2ZXJTZXR0aW5nc1BhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNlcnZlclNldHRpbmdzUGFnZX19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1BhZ2UuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZXJ2ZXJTZXR0aW5nc1BhZ2U9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksUz1uKCIuL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvaW5kZXguanMiKSxSPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvaW5kZXguanMiKSxqPXtTZXJ2ZXJTZXR0aW5nc1BhZ2U6e2Rpc3BsYXlOYW1lOiJTZXJ2ZXJTZXR0aW5nc1BhZ2UifX0seD0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NQYWdlLmpzeCIsY29tcG9uZW50czpqLGxvY2FsczpbZV0saW1wb3J0czpbVC5kZWZhdWx0XX0pLEw9KDAseS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzUGFnZS5qc3giLGNvbXBvbmVudHM6aixsb2NhbHM6W10saW1wb3J0czpbVC5kZWZhdWx0LGIuZGVmYXVsdF19KSxEPSgwLE8uZGVmaW5lTWVzc2FnZXMpKHtwYWdlVGl0bGU6e2lkOiJTZXJ2ZXJTZXR0aW5nc1BhZ2UudGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJTZXJ2ZXIgc2V0dGluZ3MifX0pLHc9dC5TZXJ2ZXJTZXR0aW5nc1BhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB4KEwodCxlKSxlKX19KCJTZXJ2ZXJTZXR0aW5nc1BhZ2UiKSgoMCxPLmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0QnJlYWRjcnVtYnM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZi5kZWZhdWx0KShyLG8pfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxfLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3t0aXRsZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShELnBhZ2VUaXRsZSl9XX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUy5QYWdlTGF5b3V0LG51bGwsVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUy5QYWdlSGVhZGVyLHticmVhZGNydW1iczp0aGlzLmdldEJyZWFkY3J1bWJzKCl9KSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLlBhZ2VTZWN0aW9uLG51bGwsVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUi5TZXJ2ZXJTZXR0aW5nc1RhYnMsbnVsbCkpKX19XSksdH0odi5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOk8uaW50bFNoYXBlLmlzUmVxdWlyZWR9LG89aSkpfHxvKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodywiU2VydmVyU2V0dGluZ3NQYWdlIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NQYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEQsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NQYWdlLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9hdXRoQ29uZmlndXJhdGlvblRhYi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkF1dGhDb25maWd1cmF0aW9uVGFiPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxzPXIobyksaT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2luZGV4LmpzIiksYT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2F1dGhDb25maWd1cmF0aW9uVGFiLnNjc3MiKSxsPXIoYSksdT1zLmRlZmF1bHQuYmluZChsLmRlZmF1bHQpLGM9dC5BdXRoQ29uZmlndXJhdGlvblRhYj1mdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp1KCJhdXRoLWNvbmZpZ3VyYXRpb24tdGFiIil9LGUuY3JlYXRlRWxlbWVudChpLkdpdGh1YkF1dGhGb3JtLG51bGwpLGUuY3JlYXRlRWxlbWVudChpLkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtLG51bGwpLGUuY3JlYXRlRWxlbWVudChpLkxkYXBBdXRoRm9ybSxudWxsKSl9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJBdXRoQ29uZmlndXJhdGlvblRhYiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9hdXRoQ29uZmlndXJhdGlvblRhYi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9hdXRoQ29uZmlndXJhdGlvblRhYi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2F1dGhDb25maWd1cmF0aW9uVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYXV0aC1jb25maWd1cmF0aW9uLXRhYiI6ImF1dGhDb25maWd1cmF0aW9uVGFiX19hdXRoLWNvbmZpZ3VyYXRpb24tdGFiX19fZTBiZUIifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BY3RpdmVEaXJlY3RvcnlBdXRoRm9ybT12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksaz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxJPXIoayksUD1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLE49bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxIPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiKSxGPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvaW5kZXguanMiKSxCPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vdXRpbHMuanMiKSxVPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIiksRz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLHo9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy9pbmRleC5qcyIpLFY9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS5zY3NzIiksVz1yKFYpLFk9e0FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtOntkaXNwbGF5TmFtZToiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0ifX0scT0oMCxMLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtLmpzeCIsY29tcG9uZW50czpZLGxvY2FsczpbZV0saW1wb3J0czpbai5kZWZhdWx0XX0pLEs9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS5qc3giLGNvbXBvbmVudHM6WSxsb2NhbHM6W10saW1wb3J0czpbai5kZWZhdWx0LEMuZGVmYXVsdF19KSxYPUkuZGVmYXVsdC5iaW5kKFcuZGVmYXVsdCksJD0oMCxNLmRlZmluZU1lc3NhZ2VzKSh7c3dpdGNoZXJMYWJlbDp7aWQ6IkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtLnN3aXRjaGVyTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJBY3RpdmUgZGlyZWN0b3J5IGF1dGhvcml6YXRpb24ifSxmb3JtSGVhZGVyOntpZDoiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uZm9ybUhlYWRlciIsZGVmYXVsdE1lc3NhZ2U6IkFjdGl2ZSBkaXJlY3RvcnkifX0pLFE9dC5BY3RpdmVEaXJlY3RvcnlBdXRoRm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHEoSyh0LGUpLGUpfX0oIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtIikoKG89KDAsSC5yZWR1eEZvcm0pKHtmb3JtOkcuQURfQVVUSF9GT1JNLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9tYWluLG49ZS5sZGFwQXR0cmlidXRlcztyZXR1cm57ZG9tYWluOiF0JiYicmVxdWlyZWRGaWVsZEhpbnQiLGxkYXBBdHRyaWJ1dGVzOigwLEIudmFsaWRhdGVMZGFwQXR0cmlidXRlcykobil9fSxpbml0aWFsVmFsdWVzOkcuREVGQVVMVF9GT1JNX0NPTkZJR30pLHM9KDAsTi5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57ZW5hYmxlZDooMCxILmZvcm1WYWx1ZVNlbGVjdG9yKShHLkFEX0FVVEhfRk9STSkoZSxVLkVOQUJMRURfS0VZKX19KSxvKGk9cyhpPSgwLE0uaW5qZWN0SW50bCkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsaC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCx5LmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGYuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRTdWJtaXRVcmw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCx5LmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsVC5kZWZhdWx0KSh0LGUpLCgwLGIuZGVmYXVsdCkodCxbe2tleToiX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdWJtaXRVcmxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdWJtaXRVcmxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gUC5VUkxTLmF1dGhTZXR0aW5ncyh0aGlzLnByb3BzLmVuYWJsZWQ/Ry5BRF9BVVRIX1RZUEU6ZSl9fSx7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxfLmRlZmF1bHQpKHt9LGUsKDAsYy5kZWZhdWx0KSh7fSxVLkxEQVBfQVRUUklCVVRFU19LRVksKDAsXy5kZWZhdWx0KSh7fSxlW1UuTERBUF9BVFRSSUJVVEVTX0tFWV0sKDAsYy5kZWZhdWx0KSh7fSxVLkVOQUJMRURfS0VZLGVbVS5FTkFCTEVEX0tFWV0pKSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUuZW5hYmxlZCxyPWUuaW5pdGlhbGl6ZSxvPWUuaGFuZGxlU3VibWl0LHM9e2Zvcm1IZWFkZXI6dCgkLmZvcm1IZWFkZXIpLHN3aXRjaGVyTGFiZWw6JC5zd2l0Y2hlckxhYmVsLEZpZWxkc0NvbXBvbmVudDp6LkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLGluaXRpYWxDb25maWdVcmw6UC5VUkxTLmF1dGhTZXR0aW5ncyhHLkFEX0FVVEhfVFlQRSksZ2V0U3VibWl0VXJsOnRoaXMuZ2V0U3VibWl0VXJsLHdpdGhFcnJvckJsb2NrOiExLGRlZmF1bHRGb3JtQ29uZmlnOkcuREVGQVVMVF9GT1JNX0NPTkZJR307cmV0dXJuIGouZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WCgiYWN0aXZlLWRpcmVjdG9yeS1hdXRoLWZvcm0iKX0sai5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5Gb3JtQ29udHJvbGxlcix7ZW5hYmxlZDpuLHByZXBhcmVEYXRhQmVmb3JlU3VibWl0OnRoaXMucHJlcGFyZURhdGFCZWZvcmVTdWJtaXQscHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplOkIucHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplLHN1Y2Nlc3NNZXNzYWdlOlUubWVzc2FnZXMudXBkYXRlQXV0aFN1Y2Nlc3MsaW5pdGlhbGl6ZTpyLGZvcm1PcHRpb25zOnMsaGFuZGxlU3VibWl0Om99KSl9fV0pLHR9KFIuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17aW50bDpNLmludGxTaGFwZS5pc1JlcXVpcmVkLGVuYWJsZWQ6dy5kZWZhdWx0LmJvb2wsaW5pdGlhbGl6ZTp3LmRlZmF1bHQuZnVuYyxoYW5kbGVTdWJtaXQ6dy5kZWZhdWx0LmZ1bmN9LGEuZGVmYXVsdFByb3BzPXtlbmFibGVkOiExLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGhhbmRsZVN1Ym1pdDpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUSwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoJCwibG9jYWxNZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhY3RpdmUtZGlyZWN0b3J5LWF1dGgtZm9ybSI6ImFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtX19hY3RpdmUtZGlyZWN0b3J5LWF1dGgtZm9ybV9fXzJwUnEwIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHM9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2Zvcm1GaWVsZC9pbmRleC5qcyIpLEQ9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvaW5kZXguanMiKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsL2luZGV4LmpzIiksaz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLEk9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9jb25zdGFudHMuanMiKSxQPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuc2NzcyIpLE49cihQKSxIPXtBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkczp7ZGlzcGxheU5hbWU6IkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzIn19LEY9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxCPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuanN4Iixjb21wb25lbnRzOkgsbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksVT1qLmRlZmF1bHQuYmluZChOLmRlZmF1bHQpLEc9KDAseC5kZWZpbmVNZXNzYWdlcykoe2RvbWFpbkxhYmVsOntpZDoiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuZG9tYWluTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJEb21haW4ifSx1cmxMYWJlbDp7aWQ6IkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLnVybExhYmVsIixkZWZhdWx0TWVzc2FnZToiVXJsIn0sYmFzZURuTGFiZWw6e2lkOiJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5iYXNlRG5MYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IkJhc2UgRE4ifSxlbWFpbEF0dHJpYnV0ZUxhYmVsOntpZDoiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuZW1haWxBdHRyaWJ1dGVMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IkVtYWlsIGF0dHJpYnV0ZSJ9LGZ1bGxOYW1lQXR0cmlidXRlTGFiZWw6e2lkOiJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5mdWxsTmFtZUF0dHJpYnV0ZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiRnVsbCBuYW1lIGF0dHJpYnV0ZSJ9LHBob3RvQXR0cmlidXRlTGFiZWw6e2lkOiJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcy5waG90b0F0dHJpYnV0ZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiUGhvdG8gYXR0cmlidXRlIn19KSx6PXQuQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBGKEIodCxlKSxlKX19KCJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkcyIpKCgwLHguaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeygwLF8uZGVmYXVsdCkodGhpcyx0KTt2YXIgbj0oMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBuLmZvcm1hdENvbmRpdGlvbmFsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX2Zvcm1hdENvbmRpdGlvbmFsVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4ucGFyc2VDb25kaXRpb25hbFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19wYXJzZUNvbmRpdGlvbmFsVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4udXJsQ29uZGl0aW9ucz1be3ZhbHVlOmsuTERBUFNfUFJFRklYLGxhYmVsOmsuTERBUFNfUFJFRklYLHNob3J0TGFiZWw6ay5MREFQU19QUkVGSVh9LHt2YWx1ZTprLkxEQVBfUFJFRklYLGxhYmVsOmsuTERBUF9QUkVGSVgsc2hvcnRMYWJlbDprLkxEQVBfUFJFRklYfV0sbn1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJfX3BhcnNlQ29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyc2VDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXt2YWx1ZToiIixjb25kaXRpb246dGhpcy51cmxDb25kaXRpb25zWzBdLmNvbmRpdGlvbn07aWYoZSl7dmFyIG49ZS5zcGxpdCgiLy8iKSxyPSgwLGwuZGVmYXVsdCkobiwyKSxvPXJbMF07dD17dmFsdWU6clsxXSxjb25kaXRpb246bysiLy8ifX1yZXR1cm4gdH19LHtrZXk6Il9fcGFyc2VDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wYXJzZUNvbmRpdGlvbmFsVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3BhcnNlQ29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmIiIrZS5jb25kaXRpb24rZS52YWx1ZX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJhY3RpdmUtZGlyZWN0b3J5LWF1dGgtZm9ybS1maWVsZHMiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5Gb3JtRmllbGQse25hbWU6SS5ET01BSU5fS0VZLHJlcXVpcmVkOiEwLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpVKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDplKEcuZG9tYWluTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlUoImxhYmVsIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRmllbGRFcnJvckhpbnQsbnVsbCxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRm9ybUZpZWxkLHtuYW1lOmsuTERBUF9BVFRSSUJVVEVTX0tFWSsiLiIray5VUkxfS0VZLHJlcXVpcmVkOiEwLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpVKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDplKEcudXJsTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlUoImxhYmVsIiksZm9ybWF0OnRoaXMuZm9ybWF0Q29uZGl0aW9uYWxWYWx1ZSxwYXJzZTp0aGlzLnBhcnNlQ29uZGl0aW9uYWxWYWx1ZX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5GaWVsZEVycm9ySGludCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uSW5wdXRDb25kaXRpb25hbCx7Y29uZGl0aW9uczp0aGlzLnVybENvbmRpdGlvbnMsaW5wdXRDbGFzc05hbWU6VSgiY29uZGl0aW9uYWwtaW5wdXQiKSxjb25kaXRpb25zQmxvY2tDbGFzc05hbWU6VSgiY29uZGl0aW9ucy1ibG9jayIpLG1vYmlsZURpc2FibGVkOiEwfSkpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLkZvcm1GaWVsZCx7bmFtZTprLkxEQVBfQVRUUklCVVRFU19LRVkrIi4iK2suQkFTRV9ETl9LRVkscmVxdWlyZWQ6ITAsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlUoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOmUoRy5iYXNlRG5MYWJlbCksbGFiZWxDbGFzc05hbWU6VSgibGFiZWwiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5GaWVsZEVycm9ySGludCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5Gb3JtRmllbGQse25hbWU6ay5MREFQX0FUVFJJQlVURVNfS0VZKyIuIitrLkVNQUlMX0tFWSxyZXF1aXJlZDohMCxmaWVsZFdyYXBwZXJDbGFzc05hbWU6VSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6ZShHLmVtYWlsQXR0cmlidXRlTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlUoImxhYmVsIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRmllbGRFcnJvckhpbnQsbnVsbCxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRm9ybUZpZWxkLHtuYW1lOmsuTERBUF9BVFRSSUJVVEVTX0tFWSsiLiIray5GVUxMX05BTUVfS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpVKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDplKEcuZnVsbE5hbWVBdHRyaWJ1dGVMYWJlbCksbGFiZWxDbGFzc05hbWU6VSgibGFiZWwiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5GaWVsZEVycm9ySGludCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5Gb3JtRmllbGQse25hbWU6ay5MREFQX0FUVFJJQlVURVNfS0VZKyIuIitrLlBIT1RPX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6VSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6ZShHLnBob3RvQXR0cmlidXRlTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlUoImxhYmVsIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuRmllbGRFcnJvckhpbnQsbnVsbCxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpKX19XSksdH0oQS5Db21wb25lbnQpLHMucHJvcFR5cGVzPXtpbnRsOnguaW50bFNoYXBlLmlzUmVxdWlyZWR9LG89aSkpfHxvKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYWN0aXZlLWRpcmVjdG9yeS1hdXRoLWZvcm0tZmllbGRzIjoiYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHNfX2FjdGl2ZS1kaXJlY3RvcnktYXV0aC1mb3JtLWZpZWxkc19fXzNsc053IiwiZm9ybS1maWVsZC13cmFwcGVyIjoiYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHNfX2Zvcm0tZmllbGQtd3JhcHBlcl9fX2w3ZzlSIixsYWJlbDoiYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHNfX2xhYmVsX19fM3hxQi0iLCJjb25kaXRpb25hbC1pbnB1dCI6ImFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzX19jb25kaXRpb25hbC1pbnB1dF9fXzN4Q1l1IiwiY29uZGl0aW9ucy1ibG9jayI6ImFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzX19jb25kaXRpb25zLWJsb2NrX19fU2ExdGkifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm1GaWVsZHMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtRmllbGRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BY3RpdmVEaXJlY3RvcnlBdXRoRm9ybUZpZWxkc319KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfRk9STV9DT05GSUc9dC5BRF9BVVRIX0ZPUk09dC5BRF9BVVRIX1RZUEU9dC5ET01BSU5fS0VZPXZvaWQgMDt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIiksYT10LkRPTUFJTl9LRVk9ImRvbWFpbiIsbD10LkFEX0FVVEhfVFlQRT0iYWQiLHU9dC5BRF9BVVRIX0ZPUk09ImFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtIixjPXQuREVGQVVMVF9GT1JNX0NPTkZJRz0ocj17fSwoMCxzLmRlZmF1bHQpKHIsaS5FTkFCTEVEX0tFWSwhMSksKDAscy5kZWZhdWx0KShyLGkuTERBUF9BVFRSSUJVVEVTX0tFWSwoMCxzLmRlZmF1bHQpKHt9LGkuVVJMX0tFWSxpLkxEQVBfUFJFRklYKSkscik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkRPTUFJTl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobCwiQURfQVVUSF9UWVBFIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsIkFEX0FVVEhfRk9STSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJERUZBVUxUX0ZPUk1fQ09ORklHIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2FjdGl2ZURpcmVjdG9yeUF1dGhGb3JtL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0vYWN0aXZlRGlyZWN0b3J5QXV0aEZvcm0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFjdGl2ZURpcmVjdG9yeUF1dGhGb3JtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BY3RpdmVEaXJlY3RvcnlBdXRoRm9ybX19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfRk9STV9DT05GSUc9dC5HSVRIVUJfQVVUSF9GT1JNPXQuT1JHQU5JWkFUSU9OU19LRVk9dC5DTElFTlRfU0VDUkVUX0tFWT10LkNMSUVOVF9JRF9LRVk9dm9pZCAwO3ZhciByLG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KG8pLGk9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxhPXQuQ0xJRU5UX0lEX0tFWT0iY2xpZW50SWQiLGw9dC5DTElFTlRfU0VDUkVUX0tFWT0iY2xpZW50U2VjcmV0Iix1PXQuT1JHQU5JWkFUSU9OU19LRVk9InJlc3RyaWN0aW9ucy5vcmdhbml6YXRpb25zIixjPXQuR0lUSFVCX0FVVEhfRk9STT0iZ2l0aHViQXV0aEZvcm0iLGQ9dC5ERUZBVUxUX0ZPUk1fQ09ORklHPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLkVOQUJMRURfS0VZLCExKSwoMCxzLmRlZmF1bHQpKHIsInJlc3RyaWN0aW9ucyIse29yZ2FuaXphdGlvbnM6W119KSxyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiQ0xJRU5UX0lEX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihsLCJDTElFTlRfU0VDUkVUX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJPUkdBTklaQVRJT05TX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJHSVRIVUJfQVVUSF9GT1JNIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsIkRFRkFVTFRfRk9STV9DT05GSUciLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdpdGh1YkF1dGhGb3JtPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEk9cihrKSxQPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9mb3JtQ29udHJvbGxlci9pbmRleC5qcyIpLEI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL2NvbW1vbi9jb25zdGFudHMuanMiKSxVPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vdXRpbHMuanMiKSxHPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vY29uc3RhbnRzLmpzIiksej1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2luZGV4LmpzIiksVj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtLnNjc3MiKSxXPXIoViksWT17R2l0aHViQXV0aEZvcm06e2Rpc3BsYXlOYW1lOiJHaXRodWJBdXRoRm9ybSJ9fSxxPSgwLEwuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm0uanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltlXSxpbXBvcnRzOltqLmRlZmF1bHRdfSksSz0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtLmpzeCIsY29tcG9uZW50czpZLGxvY2FsczpbXSxpbXBvcnRzOltqLmRlZmF1bHQsQy5kZWZhdWx0XX0pLFg9SS5kZWZhdWx0LmJpbmQoVy5kZWZhdWx0KSwkPSgwLE0uZGVmaW5lTWVzc2FnZXMpKHtzd2l0Y2hlckxhYmVsOntpZDoiR2l0aHViQXV0aEZvcm0uc3dpdGNoZXJMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IkdpdEh1YiBhdXRob3JpemF0aW9uIn0sZm9ybUhlYWRlcjp7aWQ6IkdpdGh1YkF1dGhGb3JtLmZvcm1IZWFkZXIiLGRlZmF1bHRNZXNzYWdlOiJHaXRodWIifX0pLFE9dC5HaXRodWJBdXRoRm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHEoSyh0LGUpLGUpfX0oIkdpdGh1YkF1dGhGb3JtIikoKG89KDAsSC5yZWR1eEZvcm0pKHtmb3JtOkcuR0lUSFVCX0FVVEhfRk9STSx2YWxpZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNsaWVudElkLG49ZS5jbGllbnRTZWNyZXQ7cmV0dXJue2NsaWVudElkOiF0JiYicmVxdWlyZWRGaWVsZEhpbnQiLGNsaWVudFNlY3JldDohbiYmInJlcXVpcmVkRmllbGRIaW50In19LGluaXRpYWxWYWx1ZXM6Ry5ERUZBVUxUX0ZPUk1fQ09ORklHfSkscz0oMCxOLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntlbmFibGVkOigwLEguZm9ybVZhbHVlU2VsZWN0b3IpKEcuR0lUSFVCX0FVVEhfRk9STSkoZSxCLkVOQUJMRURfS0VZKX19KSxvKGk9cyhpPSgwLE0uaW5qZWN0SW50bCkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsaC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCx5LmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGYuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIucHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCx5LmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsVC5kZWZhdWx0KSh0LGUpLCgwLGIuZGVmYXVsdCkodCxbe2tleToiX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsVS5qb2luT3JnYW5pemF0aW9ucykoZS5yZXN0cmljdGlvbnMub3JnYW5pemF0aW9ucyk7cmV0dXJuKDAsXy5kZWZhdWx0KSh7fSxlLHtyZXN0cmljdGlvbnM6e29yZ2FuaXphdGlvbnM6dH19KX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsXy5kZWZhdWx0KSh7fSxlLCgwLGMuZGVmYXVsdCkoe3Jlc3RyaWN0aW9uczp7b3JnYW5pemF0aW9uczooMCxVLnNwbGl0T3JnYW5pemF0aW9ucykoZS5yZXN0cmljdGlvbnMub3JnYW5pemF0aW9ucyl9fSxCLkVOQUJMRURfS0VZLCEwKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bC5mb3JtYXRNZXNzYWdlLG49ZS5lbmFibGVkLHI9ZS5pbml0aWFsaXplLG89ZS5oYW5kbGVTdWJtaXQscz17Zm9ybUhlYWRlcjp0KCQuZm9ybUhlYWRlciksc3dpdGNoZXJMYWJlbDokLnN3aXRjaGVyTGFiZWwsRmllbGRzQ29tcG9uZW50OnouR2l0aHViQXV0aEZvcm1GaWVsZHMsaW5pdGlhbENvbmZpZ1VybDpQLlVSTFMuZ2l0aHViQXV0aFNldHRpbmdzKCksZ2V0U3VibWl0VXJsOlAuVVJMUy5naXRodWJBdXRoU2V0dGluZ3Msd2l0aEVycm9yQmxvY2s6ITEsZGVmYXVsdEZvcm1Db25maWc6Ry5ERUZBVUxUX0ZPUk1fQ09ORklHfTtyZXR1cm4gai5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpYKCJnaXRodWItYXV0aC1mb3JtIil9LGouZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuRm9ybUNvbnRyb2xsZXIse2VuYWJsZWQ6bixwcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdDp0aGlzLnByZXBhcmVEYXRhQmVmb3JlU3VibWl0LHByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZTp0aGlzLnByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZSxzdWNjZXNzTWVzc2FnZTpCLm1lc3NhZ2VzLnVwZGF0ZUF1dGhTdWNjZXNzLGluaXRpYWxpemU6cixmb3JtT3B0aW9uczpzLGhhbmRsZVN1Ym1pdDpvfSkpfX1dKSx0fShSLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6TS5pbnRsU2hhcGUuaXNSZXF1aXJlZCxlbmFibGVkOncuZGVmYXVsdC5ib29sLGluaXRpYWxpemU6dy5kZWZhdWx0LmZ1bmMsaGFuZGxlU3VibWl0OncuZGVmYXVsdC5mdW5jfSxhLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxoYW5kbGVTdWJtaXQ6ZnVuY3Rpb24oKXt9fSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFEsIkdpdGh1YkF1dGhGb3JtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCQsImxvY2FsTWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm0uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZ2l0aHViLWF1dGgtZm9ybSI6ImdpdGh1YkF1dGhGb3JtX19naXRodWItYXV0aC1mb3JtX19fM2hzMzIifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvY2F0ZWdvcmllc0xpc3QvY2F0ZWdvcmllc0xpc3QuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRlZ29yaWVzTGlzdD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2NvbW1vbi9pbWcvY2lyY2xlLWNyb3NzLWljb24taW5saW5lLnN2ZyIpLGs9cihNKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2Zvcm1GaWVsZC9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQvaW5kZXguanMiKSxVPW4oIi4vc3JjL2NvbW1vbi9pbWcvcGx1cy1idXR0b24taW5saW5lLnN2ZyIpLEc9cihVKSx6PW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvY2F0ZWdvcmllc0xpc3QvY2F0ZWdvcmllc0xpc3Quc2NzcyIpLFY9cih6KSxXPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vY29uc3RhbnRzLmpzIiksWT17Q2F0ZWdvcmllc0xpc3Q6e2Rpc3BsYXlOYW1lOiJDYXRlZ29yaWVzTGlzdCJ9fSxxPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvY2F0ZWdvcmllc0xpc3QvY2F0ZWdvcmllc0xpc3QuanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksSz0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2NhdGVnb3JpZXNMaXN0L2NhdGVnb3JpZXNMaXN0LmpzeCIsY29tcG9uZW50czpZLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLFg9UC5kZWZhdWx0LmJpbmQoVi5kZWZhdWx0KSwkPSgwLGouZGVmaW5lTWVzc2FnZXMpKHthZGRPcmdhbml6YXRpb25CdXR0b25UaXRsZTp7aWQ6IkNhdGVnb3JpZXNMaXN0LmFkZE9yZ2FuaXphdGlvbkJ1dHRvblRpdGxlIixkZWZhdWx0TWVzc2FnZToiQWRkIEdpdEh1YiBvcmdhbml6YXRpb24ifSxvcmdhbml6YXRpb25OYW1lTGFiZWw6e2lkOiJDYXRlZ29yaWVzTGlzdC5vcmdhbml6YXRpb25OYW1lTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJPcmdhbml6YXRpb24gbmFtZSJ9fSksUT10LkNhdGVnb3JpZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcShLKHQsZSksZSl9fSgiQ2F0ZWdvcmllc0xpc3QiKSgobz0oMCx4LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntvcmdhbml6YXRpb25zOigwLEwuZm9ybVZhbHVlU2VsZWN0b3IpKFcuR0lUSFVCX0FVVEhfRk9STSkoZSxXLk9SR0FOSVpBVElPTlNfS0VZKX19LHtzaG93TW9kYWxBY3Rpb246Ti5zaG93TW9kYWxBY3Rpb259KSkocz0oMCxqLmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIucmVtb3ZlT3JnYW5pemF0aW9uSGFuZGxlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVtb3ZlT3JnYW5pemF0aW9uSGFuZGxlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2UubmV3P3RoaXMucHJvcHMuZmllbGRzLnJlbW92ZSh0KTp0aGlzLnByb3BzLnNob3dNb2RhbEFjdGlvbih7aWQ6InJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsIixkYXRhOntvbkNvbmZpcm06ZnVuY3Rpb24oKXtyZXR1cm4gbi5wcm9wcy5maWVsZHMucmVtb3ZlKHQpfSxvcmdhbml6YXRpb25Gb3JSZW1vdmU6ZS5vcmdhbml6YXRpb259fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwuZm9ybWF0TWVzc2FnZSxyPXQuZmllbGRzLG89ci5nZXRBbGwoKXx8W107cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFQuRnJhZ21lbnQsbnVsbCxyLm1hcChmdW5jdGlvbih0LG8pe3ZhciBzPXIuZ2V0KG8pO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlgoIm9yZ2FuaXphdGlvbi1jb250YWluZXIiKSxrZXk6dCsiLiIrb30sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5Gb3JtRmllbGQse25hbWU6dCsiLm9yZ2FuaXphdGlvbiIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlgoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOm4oJC5vcmdhbml6YXRpb25OYW1lTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlgoImxhYmVsIiksZGlzYWJsZWQ6IXMubmV3fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChCLklucHV0LHttb2JpbGVEaXNhYmxlZDohMH0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpYKCJyZW1vdmUtb3JnYW5pemF0aW9uIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLnJlbW92ZU9yZ2FuaXphdGlvbkhhbmRsZXIocyxvKX19LCgwLHcuZGVmYXVsdCkoay5kZWZhdWx0KSkpfSksIW8uc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXd9KSYmQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpYKCJidXR0b24td3JhcHBlciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChILkdob3N0QnV0dG9uLHtvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHIucHVzaCh7b3JnYW5pemF0aW9uOiIiLG5ldzohMH0pfSxpY29uOkcuZGVmYXVsdH0sbigkLmFkZE9yZ2FuaXphdGlvbkJ1dHRvblRpdGxlKSkpKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOlIuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxmaWVsZHM6Ui5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNob3dNb2RhbEFjdGlvbjpSLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxzPWEpKXx8cyl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihRLCJDYXRlZ29yaWVzTGlzdCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9jYXRlZ29yaWVzTGlzdC9jYXRlZ29yaWVzTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihYLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9jYXRlZ29yaWVzTGlzdC9jYXRlZ29yaWVzTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigkLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9jYXRlZ29yaWVzTGlzdC9jYXRlZ29yaWVzTGlzdC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvY2F0ZWdvcmllc0xpc3QvY2F0ZWdvcmllc0xpc3Quc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJmb3JtLWZpZWxkLXdyYXBwZXIiOiJjYXRlZ29yaWVzTGlzdF9fZm9ybS1maWVsZC13cmFwcGVyX19fdEdxWXoiLGxhYmVsOiJjYXRlZ29yaWVzTGlzdF9fbGFiZWxfX19NYlNkZiIsIm9yZ2FuaXphdGlvbi1jb250YWluZXIiOiJjYXRlZ29yaWVzTGlzdF9fb3JnYW5pemF0aW9uLWNvbnRhaW5lcl9fXzFLaVRtIiwicmVtb3ZlLW9yZ2FuaXphdGlvbiI6ImNhdGVnb3JpZXNMaXN0X19yZW1vdmUtb3JnYW5pemF0aW9uX19fMy0ySVQiLCJidXR0b24td3JhcHBlciI6ImNhdGVnb3JpZXNMaXN0X19idXR0b24td3JhcHBlcl9fXzNtc3l4In19LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2NhdGVnb3JpZXNMaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2NhdGVnb3JpZXNMaXN0L2NhdGVnb3JpZXNMaXN0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDYXRlZ29yaWVzTGlzdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQ2F0ZWdvcmllc0xpc3R9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2dpdGh1YkF1dGhGb3JtRmllbGRzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2l0aHViQXV0aEZvcm1GaWVsZHM9dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIikseD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvaW5kZXguanMiKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2luZGV4LmpzIiksRD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9pbmRleC5qcyIpLHc9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9jb25zdGFudHMuanMiKSxNPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvY2F0ZWdvcmllc0xpc3QvaW5kZXguanMiKSxrPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvZ2l0aHViQXV0aEZvcm1GaWVsZHMuc2NzcyIpLEk9cihrKSxQPXtHaXRodWJBdXRoRm9ybUZpZWxkczp7ZGlzcGxheU5hbWU6IkdpdGh1YkF1dGhGb3JtRmllbGRzIn19LE49KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9naXRodWJBdXRoRm9ybUZpZWxkcy5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W1QuZGVmYXVsdF19KSxIPSgwLHkuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vZ2l0aHViQXV0aEZvcm1GaWVsZHMvZ2l0aHViQXV0aEZvcm1GaWVsZHMuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W1QuZGVmYXVsdCxiLmRlZmF1bHRdfSksRj1TLmRlZmF1bHQuYmluZChJLmRlZmF1bHQpLEI9KDAsai5kZWZpbmVNZXNzYWdlcykoe2NsaWVudElkTGFiZWw6e2lkOiJHaXRodWJBdXRoRm9ybUZpZWxkcy5jbGllbnRJZExhYmVsIixkZWZhdWx0TWVzc2FnZToiQ2xpZW50IElEIn0sY2xpZW50U2VjcmV0TGFiZWw6e2lkOiJHaXRodWJBdXRoRm9ybUZpZWxkcy5jbGllbnRTZWNyZXRMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IkNsaWVudCBzZWNyZXQifX0pLFU9dC5HaXRodWJBdXRoRm9ybUZpZWxkcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE4oSCh0LGUpLGUpfX0oIkdpdGh1YkF1dGhGb3JtRmllbGRzIikoKDAsai5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxjLmRlZmF1bHQpKHRoaXMsdCksKDAsZi5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2U7cmV0dXJuIFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RigiZ2l0aHViLWF1dGgtZm9ybS1maWVsZHMiKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5Gb3JtRmllbGQse25hbWU6dy5DTElFTlRfSURfS0VZLHJlcXVpcmVkOiEwLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpGKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDplKEIuY2xpZW50SWRMYWJlbCksbGFiZWxDbGFzc05hbWU6RigibGFiZWwiKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5GaWVsZEVycm9ySGludCxudWxsLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEQuSW5wdXQse21vYmlsZURpc2FibGVkOiEwfSkpKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LkZvcm1GaWVsZCx7bmFtZTp3LkNMSUVOVF9TRUNSRVRfS0VZLHJlcXVpcmVkOiEwLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpGKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDplKEIuY2xpZW50U2VjcmV0TGFiZWwpLGxhYmVsQ2xhc3NOYW1lOkYoImxhYmVsIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRmllbGRFcnJvckhpbnQsbnVsbCxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChELklucHV0LHttb2JpbGVEaXNhYmxlZDohMH0pKSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUi5GaWVsZEFycmF5LHtuYW1lOncuT1JHQU5JWkFUSU9OU19LRVksY29tcG9uZW50Ok0uQ2F0ZWdvcmllc0xpc3R9KSl9fV0pLHR9KHYuQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDpqLmludGxTaGFwZS5pc1JlcXVpcmVkfSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIkdpdGh1YkF1dGhGb3JtRmllbGRzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2dpdGh1YkF1dGhGb3JtRmllbGRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2dpdGh1YkF1dGhGb3JtRmllbGRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL2dpdGh1YkF1dGhGb3JtRmllbGRzL2dpdGh1YkF1dGhGb3JtRmllbGRzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9naXRodWJBdXRoRm9ybUZpZWxkcy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImdpdGh1Yi1hdXRoLWZvcm0tZmllbGRzIjoiZ2l0aHViQXV0aEZvcm1GaWVsZHNfX2dpdGh1Yi1hdXRoLWZvcm0tZmllbGRzX19fMUFqS2kiLCJmb3JtLWZpZWxkLXdyYXBwZXIiOiJnaXRodWJBdXRoRm9ybUZpZWxkc19fZm9ybS1maWVsZC13cmFwcGVyX19fQjh3S2siLGxhYmVsOiJnaXRodWJBdXRoRm9ybUZpZWxkc19fbGFiZWxfX19idWFDTSJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybUZpZWxkcy9naXRodWJBdXRoRm9ybUZpZWxkcy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2l0aHViQXV0aEZvcm1GaWVsZHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdpdGh1YkF1dGhGb3JtRmllbGRzfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9naXRodWJBdXRoRm9ybS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2l0aHViQXV0aEZvcm0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdpdGh1YkF1dGhGb3JtfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS91dGlscy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9dC5qb2luT3JnYW5pemF0aW9ucz1mdW5jdGlvbigpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmdhbml6YXRpb259KS5maWx0ZXIoQm9vbGVhbikuam9pbigiLCIpfSxvPXQuc3BsaXRPcmdhbml6YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIikuc3BsaXQoIiwiKS5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uKGUpe3JldHVybntvcmdhbml6YXRpb246ZX19KX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHIsImpvaW5Pcmdhbml6YXRpb25zIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL3V0aWxzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywic3BsaXRPcmdhbml6YXRpb25zIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2dpdGh1YkF1dGhGb3JtL3V0aWxzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHaXRodWJBdXRoRm9ybSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuR2l0aHViQXV0aEZvcm19fSk7dmFyIG89bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9hY3RpdmVEaXJlY3RvcnlBdXRoRm9ybS9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBY3RpdmVEaXJlY3RvcnlBdXRoRm9ybSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uQWN0aXZlRGlyZWN0b3J5QXV0aEZvcm19fSk7dmFyIHM9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGRhcEF1dGhGb3JtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5MZGFwQXV0aEZvcm19fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9GT1JNX0NPTkZJRz10LkxEQVBfQVVUSF9GT1JNPXQuTERBUF9BVVRIX1RZUEU9dC5QQVNTV09SRF9BVFRSSUJVVEVfS0VZPXQuUEFTU1dPUkRfRU5DT0RFUl9UWVBFX0tFWT10LkdST1VQX1NFQVJDSF9GSUxURVJfS0VZPXQuR1JPVVBfU0VBUkNIX0JBU0VfS0VZPXQuVVNFUl9TRUFSQ0hfRklMVEVSX0tFWT10LlVTRVJfRE5fUEFUVEVSTl9LRVk9dC5NQU5BR0VSX1BBU1NXT1JEX0tFWT10Lk1BTkFHRVJfRE5fS0VZPXZvaWQgMDt2YXIgcixvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShvKSxpPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIiksYT10Lk1BTkFHRVJfRE5fS0VZPSJtYW5hZ2VyRG4iLGw9dC5NQU5BR0VSX1BBU1NXT1JEX0tFWT0ibWFuYWdlclBhc3N3b3JkIix1PXQuVVNFUl9ETl9QQVRURVJOX0tFWT0idXNlckRuUGF0dGVybiIsYz10LlVTRVJfU0VBUkNIX0ZJTFRFUl9LRVk9InVzZXJTZWFyY2hGaWx0ZXIiLGQ9dC5HUk9VUF9TRUFSQ0hfQkFTRV9LRVk9Imdyb3VwU2VhcmNoQmFzZSIsXz10LkdST1VQX1NFQVJDSF9GSUxURVJfS0VZPSJncm91cFNlYXJjaEZpbHRlciIscD10LlBBU1NXT1JEX0VOQ09ERVJfVFlQRV9LRVk9InBhc3N3b3JkRW5jb2RlclR5cGUiLGY9dC5QQVNTV09SRF9BVFRSSUJVVEVfS0VZPSJwYXNzd29yZEF0dHJpYnV0ZSIsbT10LkxEQVBfQVVUSF9UWVBFPSJsZGFwIixoPXQuTERBUF9BVVRIX0ZPUk09ImxkYXBBdXRoRm9ybSIsZz10LkRFRkFVTFRfRk9STV9DT05GSUc9KHI9e30sKDAscy5kZWZhdWx0KShyLGkuRU5BQkxFRF9LRVksITEpLCgwLHMuZGVmYXVsdCkocixwLCIiKSwoMCxzLmRlZmF1bHQpKHIsaS5MREFQX0FUVFJJQlVURVNfS0VZLCgwLHMuZGVmYXVsdCkoe30saS5VUkxfS0VZLGkuTERBUF9QUkVGSVgpKSxyKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoYSwiTUFOQUdFUl9ETl9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIk1BTkFHRVJfUEFTU1dPUkRfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih1LCJVU0VSX0ROX1BBVFRFUk5fS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjLCJVU0VSX1NFQVJDSF9GSUxURVJfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJHUk9VUF9TRUFSQ0hfQkFTRV9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkdST1VQX1NFQVJDSF9GSUxURVJfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJQQVNTV09SRF9FTkNPREVSX1RZUEVfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJQQVNTV09SRF9BVFRSSUJVVEVfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJMREFQX0FVVEhfVFlQRSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiTERBUF9BVVRIX0ZPUk0iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIkRFRkFVTFRfRk9STV9DT05GSUciLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxkYXBBdXRoRm9ybSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTGRhcEF1dGhGb3JtfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGRhcEF1dGhGb3JtPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEk9cihrKSxQPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvaW5kZXguanMiKSxCPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vdXRpbHMuanMiKSxVPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vZm9ybUNvbnRyb2xsZXIvaW5kZXguanMiKSxHPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9jb21tb24vY29uc3RhbnRzLmpzIiksej1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9jb25zdGFudHMuanMiKSxWPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2xkYXBBdXRoRm9ybUZpZWxkcy9pbmRleC5qcyIpLFc9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtLnNjc3MiKSxZPXIoVykscT17TGRhcEF1dGhGb3JtOntkaXNwbGF5TmFtZToiTGRhcEF1dGhGb3JtIn19LEs9KDAsTC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtLmpzeCIsY29tcG9uZW50czpxLGxvY2FsczpbZV0saW1wb3J0czpbai5kZWZhdWx0XX0pLFg9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtLmpzeCIsY29tcG9uZW50czpxLGxvY2FsczpbXSxpbXBvcnRzOltqLmRlZmF1bHQsQy5kZWZhdWx0XX0pLCQ9SS5kZWZhdWx0LmJpbmQoWS5kZWZhdWx0KSxRPSgwLE0uZGVmaW5lTWVzc2FnZXMpKHtzd2l0Y2hlckxhYmVsOntpZDoiTGRhcEF1dGhGb3JtLnN3aXRjaGVyTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJMREFQIGF1dGhvcml6YXRpb24ifX0pLEo9ai5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTokKCJsYWJlbC1jb250YWluZXIiKX0sIkxkYXAiLGouZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuQmV0YUJhZGdlLHtjbGFzc05hbWU6JCgiYmV0YSIpfSkpLFo9dC5MZGFwQXV0aEZvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBLKFgodCxlKSxlKX19KCJMZGFwQXV0aEZvcm0iKSgobz0oMCxILnJlZHV4Rm9ybSkoe2Zvcm06ei5MREFQX0FVVEhfRk9STSx2YWxpZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxkYXBBdHRyaWJ1dGVzO3JldHVybntsZGFwQXR0cmlidXRlczooMCxCLnZhbGlkYXRlTGRhcEF0dHJpYnV0ZXMpKHQpfX0saW5pdGlhbFZhbHVlczp6LkRFRkFVTFRfRk9STV9DT05GSUd9KSxzPSgwLE4uY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2VuYWJsZWQ6KDAsSC5mb3JtVmFsdWVTZWxlY3Rvcikoei5MREFQX0FVVEhfRk9STSkoZSxHLkVOQUJMRURfS0VZKX19KSxvKGk9cygobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxoLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLHkuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZi5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldFN1Ym1pdFVybD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnByZXBhcmVEYXRhQmVmb3JlU3VibWl0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLHkuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxULmRlZmF1bHQpKHQsZSksKDAsYi5kZWZhdWx0KSh0LFt7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdWJtaXRVcmxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdWJtaXRVcmxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFN1Ym1pdFVybF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3VibWl0VXJsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBQLlVSTFMuYXV0aFNldHRpbmdzKHRoaXMucHJvcHMuZW5hYmxlZD96LkxEQVBfQVVUSF9UWVBFOmUpfX0se2tleToiX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVTdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsXy5kZWZhdWx0KSh7fSxlLCgwLGMuZGVmYXVsdCkoe30sRy5MREFQX0FUVFJJQlVURVNfS0VZLCgwLF8uZGVmYXVsdCkoe30sZVtHLkxEQVBfQVRUUklCVVRFU19LRVldLCgwLGMuZGVmYXVsdCkoe30sRy5FTkFCTEVEX0tFWSxlW0cuRU5BQkxFRF9LRVldKSkpKTtyZXR1cm4gdFt6LlBBU1NXT1JEX0VOQ09ERVJfVFlQRV9LRVldfHxkZWxldGUgdFt6LlBBU1NXT1JEX0FUVFJJQlVURV9LRVldLHR9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZW5hYmxlZCxuPWUuaW5pdGlhbGl6ZSxyPWUuaGFuZGxlU3VibWl0LG89e2Zvcm1IZWFkZXI6Sixzd2l0Y2hlckxhYmVsOlEuc3dpdGNoZXJMYWJlbCxGaWVsZHNDb21wb25lbnQ6Vi5MZGFwQXV0aEZvcm1GaWVsZHMsaW5pdGlhbENvbmZpZ1VybDpQLlVSTFMuYXV0aFNldHRpbmdzKHouTERBUF9BVVRIX1RZUEUpLGdldFN1Ym1pdFVybDp0aGlzLmdldFN1Ym1pdFVybCx3aXRoRXJyb3JCbG9jazohMSxkZWZhdWx0Rm9ybUNvbmZpZzp6LkRFRkFVTFRfRk9STV9DT05GSUd9O3JldHVybiBqLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiQoImxkYXAtYXV0aC1mb3JtIil9LGouZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuRm9ybUNvbnRyb2xsZXIse2VuYWJsZWQ6dCxwcmVwYXJlRGF0YUJlZm9yZVN1Ym1pdDp0aGlzLnByZXBhcmVEYXRhQmVmb3JlU3VibWl0LHByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZTpCLnByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZSxpbml0aWFsaXplOm4sZm9ybU9wdGlvbnM6byxoYW5kbGVTdWJtaXQ6cixzdWNjZXNzTWVzc2FnZTpHLm1lc3NhZ2VzLnVwZGF0ZUF1dGhTdWNjZXNzfSkpfX1dKSx0fShSLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2VuYWJsZWQ6dy5kZWZhdWx0LmJvb2wsaW5pdGlhbGl6ZTp3LmRlZmF1bHQuZnVuYyxoYW5kbGVTdWJtaXQ6dy5kZWZhdWx0LmZ1bmN9LGEuZGVmYXVsdFByb3BzPXtlbmFibGVkOiExLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGhhbmRsZVN1Ym1pdDpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihaLCJMZGFwQXV0aEZvcm0iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2xkYXBBdXRoRm9ybS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFEsImxvY2FsTWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2xkYXBBdXRoRm9ybS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihKLCJsZGFwSGVhZGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm0uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJsZGFwLWF1dGgtZm9ybSI6ImxkYXBBdXRoRm9ybV9fbGRhcC1hdXRoLWZvcm1fX18xRGFpYyIsImxhYmVsLWNvbnRhaW5lciI6ImxkYXBBdXRoRm9ybV9fbGFiZWwtY29udGFpbmVyX19fQkFjWnQiLGJldGE6ImxkYXBBdXRoRm9ybV9fYmV0YV9fXzNzWEhJIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm1GaWVsZHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2xkYXBBdXRoRm9ybUZpZWxkcy9sZGFwQXV0aEZvcm1GaWVsZHMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxkYXBBdXRoRm9ybUZpZWxkcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTGRhcEF1dGhGb3JtRmllbGRzfX0pfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtRmllbGRzL2xkYXBBdXRoRm9ybUZpZWxkcy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxkYXBBdXRoRm9ybUZpZWxkcz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiKSxJPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2Zvcm1GaWVsZC9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENvbmRpdGlvbmFsL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksQj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLFU9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vY29uc3RhbnRzLmpzIiksRz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm1GaWVsZHMvbGRhcEF1dGhGb3JtRmllbGRzLnNjc3MiKSx6PXIoRyksVj17TGRhcEF1dGhGb3JtRmllbGRzOntkaXNwbGF5TmFtZToiTGRhcEF1dGhGb3JtRmllbGRzIn19LFc9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtRmllbGRzL2xkYXBBdXRoRm9ybUZpZWxkcy5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxZPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvbGRhcEF1dGhGb3JtL2xkYXBBdXRoRm9ybUZpZWxkcy9sZGFwQXV0aEZvcm1GaWVsZHMuanN4Iixjb21wb25lbnRzOlYsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSkscT13LmRlZmF1bHQuYmluZCh6LmRlZmF1bHQpLEs9KDAsTS5kZWZpbmVNZXNzYWdlcykoe3VybExhYmVsOntpZDoiTGRhcEF1dGhGb3JtRmllbGRzLnVybExhYmVsIixkZWZhdWx0TWVzc2FnZToiVXJsIn0sYmFzZURuTGFiZWw6e2lkOiJMZGFwQXV0aEZvcm1GaWVsZHMuYmFzZURuTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJCYXNlIEROIn0sbWFuYWdlckRuTGFiZWw6e2lkOiJMZGFwQXV0aEZvcm1GaWVsZHMubWFuYWdlckRuTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJNYW5hZ2VyIEROIn0sbWFuYWdlclBhc3N3b3JkTGFiZWw6e2lkOiJMZGFwQXV0aEZvcm1GaWVsZHMubWFuYWdlclBhc3N3b3JkTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJNYW5hZ2VyIHBhc3N3b3JkIn0sdXNlckRuUGF0dGVybkxhYmVsOntpZDoiTGRhcEF1dGhGb3JtRmllbGRzLnVzZXJEblBhdHRlcm5MYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IlVzZXIgRE4gcGF0dGVybiJ9LHVzZXJTZWFyY2hGaWx0ZXJMYWJlbDp7aWQ6IkxkYXBBdXRoRm9ybUZpZWxkcy51c2VyU2VhcmNoRmlsdGVyTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJVc2VyIHNlYXJjaCBmaWx0ZXIifSxncm91cFNlYXJjaEJhc2VMYWJlbDp7aWQ6IkxkYXBBdXRoRm9ybUZpZWxkcy5ncm91cFNlYXJjaEJhc2VMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6Ikdyb3VwIHNlYXJjaCBiYXNlIn0sZ3JvdXBTZWFyY2hGaWx0ZXJMYWJlbDp7aWQ6IkxkYXBBdXRoRm9ybUZpZWxkcy5ncm91cFNlYXJjaEZpbHRlckxhYmVsIixkZWZhdWx0TWVzc2FnZToiR3JvdXAgc2VhcmNoIGZpbHRlciJ9LHBhc3N3b3JkRW5jb2RlclR5cGVMYWJlbDp7aWQ6IkxkYXBBdXRoRm9ybUZpZWxkcy5wYXNzd29yZEVuY29kZXJUeXBlTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJQYXNzd29yZCBlbmNvZGVyIHR5cGUifSxwYXNzd29yZEF0dHJpYnV0ZUxhYmVsOntpZDoiTGRhcEF1dGhGb3JtRmllbGRzLnBhc3N3b3JkQXR0cmlidXRlTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJQYXNzd29yZCBhdHRyaWJ1dGUifSxlbWFpbEF0dHJpYnV0ZUxhYmVsOntpZDoiTGRhcEF1dGhGb3JtRmllbGRzLmVtYWlsQXR0cmlidXRlTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJFbWFpbCBhdHRyaWJ1dGUifSxmdWxsTmFtZUF0dHJpYnV0ZUxhYmVsOntpZDoiTGRhcEF1dGhGb3JtRmllbGRzLmZ1bGxOYW1lQXR0cmlidXRlTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJGdWxsIG5hbWUgYXR0cmlidXRlIn0scGhvdG9BdHRyaWJ1dGVMYWJlbDp7aWQ6IkxkYXBBdXRoRm9ybUZpZWxkcy5waG90b0F0dHJpYnV0ZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiUGhvdG8gYXR0cmlidXRlIn19KSxYPXQuTGRhcEF1dGhGb3JtRmllbGRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVyhZKHQsZSksZSl9fSgiTGRhcEF1dGhGb3JtRmllbGRzIikoKG89KDAsTC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cGFzc3dvcmRFbmNvZGVyVHlwZTooMCxrLmZvcm1WYWx1ZVNlbGVjdG9yKShVLkxEQVBfQVVUSF9GT1JNKShlLFUuUEFTU1dPUkRfRU5DT0RFUl9UWVBFX0tFWSl9fSkpKHM9KDAsTS5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7KDAscC5kZWZhdWx0KSh0aGlzLHQpO3ZhciBuPSgwLGcuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwodGhpcyxlKSk7cmV0dXJuIG4uZm9ybWF0Q29uZGl0aW9uYWxWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBuLl9fZm9ybWF0Q29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5wYXJzZUNvbmRpdGlvbmFsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX3BhcnNlQ29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi51cmxDb25kaXRpb25zPVt7dmFsdWU6Qi5MREFQU19QUkVGSVgsbGFiZWw6Qi5MREFQU19QUkVGSVgsc2hvcnRMYWJlbDpCLkxEQVBTX1BSRUZJWH0se3ZhbHVlOkIuTERBUF9QUkVGSVgsbGFiZWw6Qi5MREFQX1BSRUZJWCxzaG9ydExhYmVsOkIuTERBUF9QUkVGSVh9XSxuLnBhc3N3b3JkRW5jb2Rlck9wdGlvbnM9W3t2YWx1ZToiIixsYWJlbDoiTk8ifSx7dmFsdWU6IlBMQUlOIixsYWJlbDoiUExBSU4ifSx7dmFsdWU6IlNIQSIsbGFiZWw6IlNIQSJ9LHt2YWx1ZToiTERBUF9TSEEiLGxhYmVsOiJMREFQX1NIQSJ9LHt2YWx1ZToiTUQ0IixsYWJlbDoiTUQ0In0se3ZhbHVlOiJNRDUiLGxhYmVsOiJNRDUifV0sbn1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX3BhcnNlQ29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyc2VDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXt2YWx1ZToiIixjb25kaXRpb246dGhpcy51cmxDb25kaXRpb25zWzBdLmNvbmRpdGlvbn07aWYoZSl7dmFyIG49ZS5zcGxpdCgiLy8iKSxyPSgwLHUuZGVmYXVsdCkobiwyKSxvPXJbMF07dD17dmFsdWU6clsxXSxjb25kaXRpb246bysiLy8ifX1yZXR1cm4gdH19LHtrZXk6Il9fcGFyc2VDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wYXJzZUNvbmRpdGlvbmFsVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3BhcnNlQ29uZGl0aW9uYWxWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyc2VDb25kaXRpb25hbFZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wYXJzZUNvbmRpdGlvbmFsVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiIiK2UuY29uZGl0aW9uK2UudmFsdWV9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bC5mb3JtYXRNZXNzYWdlLG49ZS5wYXNzd29yZEVuY29kZXJUeXBlO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnEoImxkYXAtYXV0aC1mb3JtLWZpZWxkcyIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLkZvcm1GaWVsZCx7bmFtZTpCLkxEQVBfQVRUUklCVVRFU19LRVkrIi4iK0IuVVJMX0tFWSxyZXF1aXJlZDohMCxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLnVybExhYmVsKSxsYWJlbENsYXNzTmFtZTpxKCJsYWJlbCIpLGZvcm1hdDp0aGlzLmZvcm1hdENvbmRpdGlvbmFsVmFsdWUscGFyc2U6dGhpcy5wYXJzZUNvbmRpdGlvbmFsVmFsdWV9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChILklucHV0Q29uZGl0aW9uYWwse2NvbmRpdGlvbnM6dGhpcy51cmxDb25kaXRpb25zLGlucHV0Q2xhc3NOYW1lOnEoImNvbmRpdGlvbmFsLWlucHV0IiksY29uZGl0aW9uc0Jsb2NrQ2xhc3NOYW1lOnEoImNvbmRpdGlvbnMtYmxvY2siKSxtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6Qi5MREFQX0FUVFJJQlVURVNfS0VZKyIuIitCLkJBU0VfRE5fS0VZLHJlcXVpcmVkOiEwLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpxKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KEsuYmFzZURuTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOnEoImxhYmVsIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOlUuTUFOQUdFUl9ETl9LRVksZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnEoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOnQoSy5tYW5hZ2VyRG5MYWJlbCksbGFiZWxDbGFzc05hbWU6cSgibGFiZWwiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5GaWVsZEVycm9ySGludCxudWxsLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6VS5NQU5BR0VSX1BBU1NXT1JEX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLm1hbmFnZXJQYXNzd29yZExhYmVsKSxsYWJlbENsYXNzTmFtZTpxKCJsYWJlbCIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkZpZWxkRXJyb3JIaW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5JbnB1dCx7bWF4TGVuZ3RoOiIxMjgiLG1vYmlsZURpc2FibGVkOiEwfSkpKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLkZvcm1GaWVsZCx7bmFtZTpVLlVTRVJfRE5fUEFUVEVSTl9LRVksZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnEoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOnQoSy51c2VyRG5QYXR0ZXJuTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOnEoImxhYmVsIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOlUuVVNFUl9TRUFSQ0hfRklMVEVSX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLnVzZXJTZWFyY2hGaWx0ZXJMYWJlbCksbGFiZWxDbGFzc05hbWU6cSgibGFiZWwiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5GaWVsZEVycm9ySGludCxudWxsLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6VS5HUk9VUF9TRUFSQ0hfQkFTRV9LRVksZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnEoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOnQoSy5ncm91cFNlYXJjaEJhc2VMYWJlbCksbGFiZWxDbGFzc05hbWU6cSgibGFiZWwiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5GaWVsZEVycm9ySGludCxudWxsLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6VS5HUk9VUF9TRUFSQ0hfRklMVEVSX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLmdyb3VwU2VhcmNoRmlsdGVyTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOnEoImxhYmVsIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOlUuUEFTU1dPUkRfRU5DT0RFUl9UWVBFX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLnBhc3N3b3JkRW5jb2RlclR5cGVMYWJlbCksZm9ybWF0OlN0cmluZyxsYWJlbENsYXNzTmFtZTpxKCJsYWJlbCIpfSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkZpZWxkRXJyb3JIaW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5JbnB1dERyb3Bkb3duLHtvcHRpb25zOnRoaXMucGFzc3dvcmRFbmNvZGVyT3B0aW9ucyxtb2JpbGVEaXNhYmxlZDohMH0pKSksbiYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6VS5QQVNTV09SRF9BVFRSSUJVVEVfS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpxKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KEsucGFzc3dvcmRBdHRyaWJ1dGVMYWJlbCksbGFiZWxDbGFzc05hbWU6cSgibGFiZWwiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5GaWVsZEVycm9ySGludCxudWxsLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6Qi5MREFQX0FUVFJJQlVURVNfS0VZKyIuIitCLkVNQUlMX0tFWSxyZXF1aXJlZDohMCxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLmVtYWlsQXR0cmlidXRlTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOnEoImxhYmVsIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOkIuTERBUF9BVFRSSUJVVEVTX0tFWSsiLiIrQi5GVUxMX05BTUVfS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpxKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KEsuZnVsbE5hbWVBdHRyaWJ1dGVMYWJlbCksbGFiZWxDbGFzc05hbWU6cSgibGFiZWwiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5GaWVsZEVycm9ySGludCxudWxsLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXQse21heExlbmd0aDoiMTI4Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6Qi5MREFQX0FUVFJJQlVURVNfS0VZKyIuIitCLlBIT1RPX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6cSgiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChLLnBob3RvQXR0cmlidXRlTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOnEoImxhYmVsIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRmllbGRFcnJvckhpbnQsbnVsbCxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0LHttYXhMZW5ndGg6IjEyOCIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOk0uaW50bFNoYXBlLmlzUmVxdWlyZWQscGFzc3dvcmRFbmNvZGVyVHlwZTp4LmRlZmF1bHQuc3RyaW5nfSxpLmRlZmF1bHRQcm9wcz17cGFzc3dvcmRFbmNvZGVyVHlwZToiIn0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWCwiTGRhcEF1dGhGb3JtRmllbGRzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm1GaWVsZHMvbGRhcEF1dGhGb3JtRmllbGRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm1GaWVsZHMvbGRhcEF1dGhGb3JtRmllbGRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL2Zvcm1zL2xkYXBBdXRoRm9ybS9sZGFwQXV0aEZvcm1GaWVsZHMvbGRhcEF1dGhGb3JtRmllbGRzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9sZGFwQXV0aEZvcm0vbGRhcEF1dGhGb3JtRmllbGRzL2xkYXBBdXRoRm9ybUZpZWxkcy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImxkYXAtYXV0aC1mb3JtLWZpZWxkcyI6ImxkYXBBdXRoRm9ybUZpZWxkc19fbGRhcC1hdXRoLWZvcm0tZmllbGRzX19fMmZRbVgiLCJmb3JtLWZpZWxkLXdyYXBwZXIiOiJsZGFwQXV0aEZvcm1GaWVsZHNfX2Zvcm0tZmllbGQtd3JhcHBlcl9fXzJlVDJZIixsYWJlbDoibGRhcEF1dGhGb3JtRmllbGRzX19sYWJlbF9fX1gtdnpkIiwiY29uZGl0aW9uYWwtaW5wdXQiOiJsZGFwQXV0aEZvcm1GaWVsZHNfX2NvbmRpdGlvbmFsLWlucHV0X19fM3dWU3kiLCJjb25kaXRpb25zLWJsb2NrIjoibGRhcEF1dGhGb3JtRmllbGRzX19jb25kaXRpb25zLWJsb2NrX19fMnVlYWEifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvYXV0aENvbmZpZ3VyYXRpb25UYWIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkF1dGhDb25maWd1cmF0aW9uVGFiIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BdXRoQ29uZmlndXJhdGlvblRhYn19KTt2YXIgbz1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL21vZGFscy9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uUmVtb3ZlT3JnYW5pemF0aW9uTW9kYWx9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL21vZGFscy9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9tb2RhbHMvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5SZW1vdmVPcmdhbml6YXRpb25Nb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvbW9kYWxzL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUmVtb3ZlT3JnYW5pemF0aW9uTW9kYWw9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sb2NhbGl6YXRpb24uanMiKSxQPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLE49cihQKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxCPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLFU9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9mb3Jtcy9naXRodWJBdXRoRm9ybS9jb25zdGFudHMuanMiKSxHPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvZm9ybXMvZ2l0aHViQXV0aEZvcm0vdXRpbHMuanMiKSx6PW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvbW9kYWxzL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLnNjc3MiKSxWPXIoeiksVz17UmVtb3ZlT3JnYW5pemF0aW9uTW9kYWw6e2Rpc3BsYXlOYW1lOiJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbCJ9fSxZPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvbW9kYWxzL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLmpzeCIsY29tcG9uZW50czpXLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLHE9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9tb2RhbHMvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwuanN4Iixjb21wb25lbnRzOlcsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksSz1OLmRlZmF1bHQuYmluZChWLmRlZmF1bHQpLFg9KDAsdy5kZWZpbmVNZXNzYWdlcykoe3JlbW92ZU9yZ2FuaXphdGlvbkhlYWRlcjp7aWQ6IlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLnJlbW92ZU9yZ2FuaXphdGlvbkhlYWRlciIsZGVmYXVsdE1lc3NhZ2U6IkRlbGV0ZSBnaXRodWIgb3JnYW5pemF0aW9uIn0sY29udGVudEhlYWRlck1lc3NhZ2U6e2lkOiJSZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgc2VsZWN0ZWQgb3JnYW5pemF0aW9uPyBBbGwgYXNzaWduZWQgdXNlcnMgY291bGQgbm90IGJlIGFibGUgdG8gbG9naW4gUmVwb3J0IFBvcnRhbC4ifSxyZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uOntpZDoiUmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkdpdEh1YiBvcmdhbml6YXRpb24gaGFzIGJlZW4gZGVsZXRlZCJ9fSksJD10LlJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gWShxKHQsZSksZSl9fSgiUmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwiKSgobz0oMCxILndpdGhNb2RhbCkoInJlbW92ZU9yZ2FuaXphdGlvbk1vZGFsIikscz0oMCxNLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntmb3JtRGF0YTooMCxELmZvcm1WYWx1ZVNlbGVjdG9yKShVLkdJVEhVQl9BVVRIX0ZPUk0pKGUsVS5PUkdBTklaQVRJT05TX0tFWSxVLkNMSUVOVF9JRF9LRVksVS5DTElFTlRfU0VDUkVUX0tFWSl9fSx7c2hvd05vdGlmaWNhdGlvbjprLnNob3dOb3RpZmljYXRpb24sY2hhbmdlOkQuY2hhbmdlfSksbyhpPXMoaT0oMCx3LmluamVjdEludGwpKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGYuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsYi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25DbGlja1JlbW92ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMucHJvcHMscj1uLmRhdGEsbz1uLmZvcm1EYXRhLHM9by5yZXN0cmljdGlvbnMub3JnYW5pemF0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3JnYW5pemF0aW9uIT09ci5vcmdhbml6YXRpb25Gb3JSZW1vdmV9KSxpPSgwLEcuam9pbk9yZ2FuaXphdGlvbnMpKHMpLGE9KDAsYy5kZWZhdWx0KSh7fSxvLHtyZXN0cmljdGlvbnM6e29yZ2FuaXphdGlvbnM6aX19KTsoMCxCLmZldGNoKShGLlVSTFMuZ2l0aHViQXV0aFNldHRpbmdzKCkse21ldGhvZDoiUFVUIixkYXRhOmF9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5kYXRhLm9uQ29uZmlybSgpLHQucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShYLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pLHR5cGU6ay5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOmUubXNnLHR5cGU6ay5OT1RJRklDQVRJT05fVFlQRVMuRVJST1J9KX0pLGUoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT17dGV4dDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShJLkNPTU1PTl9MT0NBTEVfS0VZUy5ERUxFVEUpLGRhbmdlcjohMCxvbkNsaWNrOnRoaXMub25DbGlja1JlbW92ZX0sdD17dGV4dDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShJLkNPTU1PTl9MT0NBTEVfS0VZUy5DQU5DRUwpfTtyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5Nb2RhbExheW91dCx7dGl0bGU6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoWC5yZW1vdmVPcmdhbml6YXRpb25IZWFkZXIpLG9rQnV0dG9uOmUsY2FuY2VsQnV0dG9uOnR9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOksoIm1vZGFsLWNvbnRlbnQtaGVhZGVyIil9LHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFguY29udGVudEhlYWRlck1lc3NhZ2UpKSl9fV0pLHR9KE8uQ29tcG9uZW50KSxhLnByb3BUeXBlcz17aW50bDp3LmludGxTaGFwZSxmb3JtRGF0YTpMLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsZGF0YTpMLmRlZmF1bHQub2JqZWN0LGNoYW5nZTpMLmRlZmF1bHQuZnVuYyxzaG93Tm90aWZpY2F0aW9uOkwuZGVmYXVsdC5mdW5jfSxhLmRlZmF1bHRQcm9wcz17aW50bDp7fSxkYXRhOnt9LGNoYW5nZTpmdW5jdGlvbigpe30sc2hvd05vdGlmaWNhdGlvbjpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoJCwiUmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvbW9kYWxzL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsL3JlbW92ZU9yZ2FuaXphdGlvbk1vZGFsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL21vZGFscy9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihYLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9hdXRoQ29uZmlndXJhdGlvblRhYi9tb2RhbHMvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwvcmVtb3ZlT3JnYW5pemF0aW9uTW9kYWwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2F1dGhDb25maWd1cmF0aW9uVGFiL21vZGFscy9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC9yZW1vdmVPcmdhbml6YXRpb25Nb2RhbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im1vZGFsLWNvbnRlbnQtaGVhZGVyIjoicmVtb3ZlT3JnYW5pemF0aW9uTW9kYWxfX21vZGFsLWNvbnRlbnQtaGVhZGVyX19fMnBEZ3oifX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfRk9STV9DT05GSUc9dC5QQVNTV09SRF9LRVk9dC5VU0VSTkFNRV9LRVk9dC5QT1JUX0tFWT10LkhPU1RfS0VZPXQuRlJPTV9LRVk9dC5UTFNfS0VZPXQuU1NMX0tFWT10LlBST1RPQ09MX0tFWT10LkFVVEhfRU5BQkxFRF9LRVk9dC5FTUFJTF9TRVJWRVJfRk9STT12b2lkIDA7dmFyIHIsbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0obyksaT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLGE9dC5FTUFJTF9TRVJWRVJfRk9STT0iZW1haWxTZXJ2ZXJUYWJGb3JtIixsPXQuQVVUSF9FTkFCTEVEX0tFWT0iYXV0aEVuYWJsZWQiLHU9dC5QUk9UT0NPTF9LRVk9InByb3RvY29sIixjPXQuU1NMX0tFWT0ic3NsRW5hYmxlZCIsZD10LlRMU19LRVk9InN0YXJUbHNFbmFibGVkIixfPXQuRlJPTV9LRVk9ImZyb20iLHA9dC5IT1NUX0tFWT0iaG9zdCIsZj10LlBPUlRfS0VZPSJwb3J0IixtPXQuVVNFUk5BTUVfS0VZPSJ1c2VybmFtZSIsaD10LlBBU1NXT1JEX0tFWT0icGFzc3dvcmQiLGc9dC5ERUZBVUxUX0ZPUk1fQ09ORklHPShyPXt9LCgwLHMuZGVmYXVsdCkocixpLkVOQUJMRURfS0VZLCExKSwoMCxzLmRlZmF1bHQpKHIsbCwhMSksKDAscy5kZWZhdWx0KShyLHUsInNtdHAiKSwoMCxzLmRlZmF1bHQpKHIsYywhMSksKDAscy5kZWZhdWx0KShyLGQsITEpLCgwLHMuZGVmYXVsdCkocixtLCIiKSwoMCxzLmRlZmF1bHQpKHIsaCwiIikscik7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGEsIkVNQUlMX1NFUlZFUl9GT1JNIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGwsIkFVVEhfRU5BQkxFRF9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIodSwiUFJPVE9DT0xfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIlNTTF9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiVExTX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJGUk9NX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJIT1NUX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJQT1JUX0tFWSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJVU0VSTkFNRV9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiUEFTU1dPUkRfS0VZIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsIkRFRkFVTFRfRk9STV9DT05GSUciLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVtYWlsU2VydmVyVGFiPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksSD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxGPXIoSCksQj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2Zvcm1Db250cm9sbGVyL2luZGV4LmpzIiksVT1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2UvY29tbW9uL2NvbnN0YW50cy5qcyIpLEc9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9jb25zdGFudHMuanMiKSx6PW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzL2luZGV4LmpzIiksVj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLnNjc3MiKSxXPXIoViksWT17RW1haWxTZXJ2ZXJUYWI6e2Rpc3BsYXlOYW1lOiJFbWFpbFNlcnZlclRhYiJ9fSxxPSgwLEwuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvZW1haWxTZXJ2ZXJUYWIuanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltlXSxpbXBvcnRzOltqLmRlZmF1bHRdfSksSz0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLmpzeCIsY29tcG9uZW50czpZLGxvY2FsczpbXSxpbXBvcnRzOltqLmRlZmF1bHQsQy5kZWZhdWx0XX0pLFg9Ri5kZWZhdWx0LmJpbmQoVy5kZWZhdWx0KSwkPSgwLE0uZGVmaW5lTWVzc2FnZXMpKHtlbWFpbFN3aXRjaGVyOntpZDoiRW1haWxTZXJ2ZXJUYWIuZW1haWxTd2l0Y2hlciIsZGVmYXVsdE1lc3NhZ2U6IkVuYWJsZSBlbWFpbCBzZXJ2ZXIifSx1cGRhdGVFbWFpbFNlcnZlclN1Y2Nlc3M6e2lkOiJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMudXBkYXRlRW1haWxTZXJ2ZXJTdWNjZXNzIixkZWZhdWx0TWVzc2FnZToiRW1haWwgc2VydmVyIHNldHRpbmdzIGhhdmUgYmVlbiB1cGRhdGVkIn19KSxRPXQuRW1haWxTZXJ2ZXJUYWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBxKEsodCxlKSxlKX19KCJFbWFpbFNlcnZlclRhYiIpKChvPSgwLE4ucmVkdXhGb3JtKSh7Zm9ybTpHLkVNQUlMX1NFUlZFUl9GT1JNLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaG9zdCxuPWUucG9ydDtyZXR1cm57aG9zdDohdCYmInJlcXVpcmVkRmllbGRIaW50Iixwb3J0Oighbnx8IWsudmFsaWRhdGUuaW5SYW5nZVZhbGlkYXRlKG4sMSw2NTUzNSkpJiYicG9ydEZpZWxkSGludCJ9fSxpbml0aWFsVmFsdWVzOkcuREVGQVVMVF9GT1JNX0NPTkZJR30pLHM9KDAsUC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57ZW5hYmxlZDooMCxOLmZvcm1WYWx1ZVNlbGVjdG9yKShHLkVNQUlMX1NFUlZFUl9GT1JNKShlLFUuRU5BQkxFRF9LRVkpfX0pLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGguZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAseS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxmLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIucHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCx5LmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsVC5kZWZhdWx0KSh0LGUpLCgwLGIuZGVmYXVsdCkodCxbe2tleToiX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3ByZXBhcmVEYXRhQmVmb3JlSW5pdGlhbGl6ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcHJlcGFyZURhdGFCZWZvcmVJbml0aWFsaXplX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsXy5kZWZhdWx0KSgoMCxjLmRlZmF1bHQpKHt9LFUuRU5BQkxFRF9LRVksISFlLnNlcnZlckVtYWlsQ29uZmlnKSxHLkRFRkFVTFRfRk9STV9DT05GSUcsZS5zZXJ2ZXJFbWFpbENvbmZpZ3x8e30pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmVuYWJsZWQsbj1lLmluaXRpYWxpemUscj1lLmhhbmRsZVN1Ym1pdCxvPXtzd2l0Y2hlckxhYmVsOiQuZW1haWxTd2l0Y2hlcixGaWVsZHNDb21wb25lbnQ6ei5FbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMsaW5pdGlhbENvbmZpZ1VybDpJLlVSTFMuc2VydmVyU2V0dGluZ3MoKSxnZXRTdWJtaXRVcmw6SS5VUkxTLmVtYWlsU2VydmVyU2V0dGluZ3Msd2l0aEVycm9yQmxvY2s6ITEsZGVmYXVsdEZvcm1Db25maWc6Ry5ERUZBVUxUX0ZPUk1fQ09ORklHfTtyZXR1cm4gai5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpYKCJlbWFpbC1zZXJ2ZXItdGFiIil9LGouZGVmYXVsdC5jcmVhdGVFbGVtZW50KEIuRm9ybUNvbnRyb2xsZXIse2VuYWJsZWQ6dCxzdWNjZXNzTWVzc2FnZTokLnVwZGF0ZUVtYWlsU2VydmVyU3VjY2Vzcyxpbml0aWFsaXplOm4sZm9ybU9wdGlvbnM6byxoYW5kbGVTdWJtaXQ6cixwcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemU6dGhpcy5wcmVwYXJlRGF0YUJlZm9yZUluaXRpYWxpemV9KSl9fV0pLHR9KFIuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17ZW5hYmxlZDp3LmRlZmF1bHQuYm9vbCxpbml0aWFsaXplOncuZGVmYXVsdC5mdW5jLGhhbmRsZVN1Ym1pdDp3LmRlZmF1bHQuZnVuYyxjaGFuZ2U6dy5kZWZhdWx0LmZ1bmN9LGEuZGVmYXVsdFByb3BzPXtlbmFibGVkOiExLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGhhbmRsZVN1Ym1pdDpmdW5jdGlvbigpe30sY2hhbmdlOmZ1bmN0aW9uKCl7fX0saT1sKSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFEsIkVtYWlsU2VydmVyVGFiIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCQsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImVtYWlsLXNlcnZlci10YWIiOiJlbWFpbFNlcnZlclRhYl9fZW1haWwtc2VydmVyLXRhYl9fX0E2VzhsIn19LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5FbWFpbFNlcnZlclRhYkZvcm1GaWVsZHM9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIikseD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE09bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZm9ybUZpZWxkL2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZFByb3ZpZGVyLmpzeCIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRFcnJvckhpbnQvaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2NvbnN0YW50cy5qcyIpLEI9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLnNjc3MiKSxVPXIoQiksRz17RW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzOntkaXNwbGF5TmFtZToiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzIn19LHo9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmpzeCIsY29tcG9uZW50czpHLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLFY9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmpzeCIsY29tcG9uZW50czpHLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLFc9TC5kZWZhdWx0LmJpbmQoVS5kZWZhdWx0KSxZPSgwLHcuZGVmaW5lTWVzc2FnZXMpKHtob3N0TGFiZWw6e2lkOiJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMuaG9zdExhYmVsIixkZWZhdWx0TWVzc2FnZToiSG9zdCJ9LHByb3RvY29sTGFiZWw6e2lkOiJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucHJvdG9jb2xMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IlByb3RvY29sIn0sZnJvbUxhYmVsOntpZDoiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmZyb21MYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IkRlZmF1bHQgc2VuZGVyIG5hbWUifSxwb3J0TGFiZWw6e2lkOiJFbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMucG9ydExhYmVsIixkZWZhdWx0TWVzc2FnZToiUG9ydCJ9LGF1dGhMYWJlbDp7aWQ6IkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy5hdXRoTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJBdXRob3JpemF0aW9uIn0sdXNlcm5hbWVMYWJlbDp7aWQ6IkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy51c2VybmFtZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiVXNlcm5hbWUifSxwYXNzd29yZExhYmVsOntpZDoiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLnBhc3N3b3JkTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJQYXNzd29yZCJ9fSkscT10LkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHooVih0LGUpLGUpfX0oIkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcyIpKChvPSgwLGouY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2F1dGhFbmFibGVkOigwLEQuZm9ybVZhbHVlU2VsZWN0b3IpKEYuRU1BSUxfU0VSVkVSX0ZPUk0pKGUsRi5BVVRIX0VOQUJMRURfS0VZKX19KSkocz0oMCx3LmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5vbkNoYW5nZUF1dGhBdmFpbGFiaWxpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX29uQ2hhbmdlQXV0aEF2YWlsYWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5wcm90b2NvbE9wdGlvbnM9W3t2YWx1ZToic210cCIsbGFiZWw6IlNNVFAifV0sbi5hdXRoT3B0aW9ucz1be3ZhbHVlOiEwLGxhYmVsOiJPTiJ9LHt2YWx1ZTohMSxsYWJlbDoiT0ZGIn1dLG59cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19vbkNoYW5nZUF1dGhBdmFpbGFiaWxpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2hhbmdlQXV0aEF2YWlsYWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DaGFuZ2VBdXRoQXZhaWxhYmlsaXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNoYW5nZUF1dGhBdmFpbGFiaWxpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2hhbmdlQXV0aEF2YWlsYWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DaGFuZ2VBdXRoQXZhaWxhYmlsaXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNoYW5nZUF1dGhBdmFpbGFiaWxpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0fHwodGhpcy5wcm9wcy5jaGFuZ2VGaWVsZFZhbHVlKEYuVVNFUk5BTUVfS0VZLCIiKSx0aGlzLnByb3BzLmNoYW5nZUZpZWxkVmFsdWUoRi5QQVNTV09SRF9LRVksIiIpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLmZvcm1hdE1lc3NhZ2Usbj1lLmF1dGhFbmFibGVkO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlcoImVtYWlsLXNlcnZlci10YWItZm9ybS1maWVsZHMiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Gb3JtRmllbGQse25hbWU6Ri5IT1NUX0tFWSxyZXF1aXJlZDohMCxmaWVsZFdyYXBwZXJDbGFzc05hbWU6VygiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChZLmhvc3RMYWJlbCksbGFiZWxDbGFzc05hbWU6VygibGFiZWwiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5GaWVsZEVycm9ySGludCxudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuSW5wdXQse21vYmlsZURpc2FibGVkOiEwfSkpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZvcm1GaWVsZCx7bmFtZTpGLlBST1RPQ09MX0tFWSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6VygiZm9ybS1maWVsZC13cmFwcGVyIiksbGFiZWw6dChZLnByb3RvY29sTGFiZWwpLGxhYmVsQ2xhc3NOYW1lOlcoImxhYmVsIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5wdXREcm9wZG93bix7b3B0aW9uczp0aGlzLnByb3RvY29sT3B0aW9ucyxtb2JpbGVEaXNhYmxlZDohMH0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZvcm1GaWVsZCx7bmFtZTpGLkZST01fS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpXKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KFkuZnJvbUxhYmVsKSxsYWJlbENsYXNzTmFtZTpXKCJsYWJlbCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLkZpZWxkRXJyb3JIaW50LG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5JbnB1dCx7bW9iaWxlRGlzYWJsZWQ6ITB9KSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRm9ybUZpZWxkLHtuYW1lOkYuUE9SVF9LRVkscmVxdWlyZWQ6ITAsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlcoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOnQoWS5wb3J0TGFiZWwpLGZvcm1hdDpTdHJpbmcscGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJk51bWJlcihlKX0sbGFiZWxDbGFzc05hbWU6VygibGFiZWwiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5GaWVsZEVycm9ySGludCxudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuSW5wdXQse3R5cGU6Im51bWJlciIsbWF4TGVuZ3RoOiI1Iixtb2JpbGVEaXNhYmxlZDohMH0pKSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Gb3JtRmllbGQse25hbWU6Ri5BVVRIX0VOQUJMRURfS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpXKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KFkuYXV0aExhYmVsKSxmb3JtYXQ6Qm9vbGVhbixvbkNoYW5nZTp0aGlzLm9uQ2hhbmdlQXV0aEF2YWlsYWJpbGl0eSxsYWJlbENsYXNzTmFtZTpXKCJsYWJlbCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLklucHV0RHJvcGRvd24se29wdGlvbnM6dGhpcy5hdXRoT3B0aW9ucyxtb2JpbGVEaXNhYmxlZDohMH0pKSxuJiZBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULkZyYWdtZW50LG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Gb3JtRmllbGQse25hbWU6Ri5VU0VSTkFNRV9LRVksZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlcoImZvcm0tZmllbGQtd3JhcHBlciIpLGxhYmVsOnQoWS51c2VybmFtZUxhYmVsKSxsYWJlbENsYXNzTmFtZTpXKCJsYWJlbCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLkZpZWxkRXJyb3JIaW50LG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5JbnB1dCx7bW9iaWxlRGlzYWJsZWQ6ITB9KSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRm9ybUZpZWxkLHtuYW1lOkYuUEFTU1dPUkRfS0VZLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpXKCJmb3JtLWZpZWxkLXdyYXBwZXIiKSxsYWJlbDp0KFkucGFzc3dvcmRMYWJlbCksbGFiZWxDbGFzc05hbWU6VygibGFiZWwiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5GaWVsZEVycm9ySGludCxudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuSW5wdXQse3R5cGU6InBhc3N3b3JkIixtb2JpbGVEaXNhYmxlZDohMH0pKSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VygiY2hlY2tib3hlcy1jb250YWluZXIiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJjaGVja2JveC13cmFwcGVyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRmllbGRQcm92aWRlcix7bmFtZTpGLlRMU19LRVksZm9ybWF0OkJvb2xlYW59LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguSW5wdXRDaGVja2JveCxudWxsLCJUTFMiKSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VygiY2hlY2tib3gtd3JhcHBlciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLkZpZWxkUHJvdmlkZXIse25hbWU6Ri5TU0xfS0VZLGZvcm1hdDpCb29sZWFufSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChILklucHV0Q2hlY2tib3gsbnVsbCwiU1NMIikpKSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUuaXNSZXF1aXJlZCxhdXRoRW5hYmxlZDpSLmRlZmF1bHQuYm9vbCxjaGFuZ2VGaWVsZFZhbHVlOlIuZGVmYXVsdC5mdW5jfSxpLmRlZmF1bHRQcm9wcz17YXV0aEVuYWJsZWQ6ITEsY2hhbmdlRmllbGRWYWx1ZTpmdW5jdGlvbigpe319LHM9YSkpfHxzKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkVtYWlsU2VydmVyVGFiRm9ybUZpZWxkcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzL2VtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzL2VtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImVtYWlsLXNlcnZlci10YWItZm9ybS1maWVsZHMiOiJlbWFpbFNlcnZlclRhYkZvcm1GaWVsZHNfX2VtYWlsLXNlcnZlci10YWItZm9ybS1maWVsZHNfX18zQXdwciIsImZvcm0tZmllbGQtd3JhcHBlciI6ImVtYWlsU2VydmVyVGFiRm9ybUZpZWxkc19fZm9ybS1maWVsZC13cmFwcGVyX19fM29iZ1UiLGxhYmVsOiJlbWFpbFNlcnZlclRhYkZvcm1GaWVsZHNfX2xhYmVsX19fQzZ4U2wiLCJjaGVja2JveGVzLWNvbnRhaW5lciI6ImVtYWlsU2VydmVyVGFiRm9ybUZpZWxkc19fY2hlY2tib3hlcy1jb250YWluZXJfX18ya3IzTSIsImNoZWNrYm94LXdyYXBwZXIiOiJlbWFpbFNlcnZlclRhYkZvcm1GaWVsZHNfX2NoZWNrYm94LXdyYXBwZXJfX18yMC1nTiJ9fSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9lbWFpbFNlcnZlclRhYi9lbWFpbFNlcnZlclRhYkZvcm1GaWVsZHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvZW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzL2VtYWlsU2VydmVyVGFiRm9ybUZpZWxkcy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRW1haWxTZXJ2ZXJUYWJGb3JtRmllbGRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FbWFpbFNlcnZlclRhYkZvcm1GaWVsZHN9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2VtYWlsU2VydmVyVGFiL2VtYWlsU2VydmVyVGFiLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFbWFpbFNlcnZlclRhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRW1haWxTZXJ2ZXJUYWJ9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3NlcnZlclNldHRpbmdzVGFicy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2VydmVyU2V0dGluZ3NUYWJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TZXJ2ZXJTZXR0aW5nc1RhYnN9fSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3NlcnZlclNldHRpbmdzVGFicy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2VydmVyU2V0dGluZ3NUYWJzPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZpcnN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLFI9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxqPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc2V0dGluZ3NUYWJzLmpzIikseD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbmF2aWdhdGlvblRhYnMvaW5kZXguanMiKSxMPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvZW1haWxTZXJ2ZXJUYWIvaW5kZXguanMiKSxEPW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvYXV0aENvbmZpZ3VyYXRpb25UYWIvaW5kZXguanMiKSx3PW4oIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9pbmRleC5qcyIpLE09KDAsUy5kZWZpbmVNZXNzYWdlcykoe2VNYWlsU2VydmVyOntpZDoiU2VydmVyU2V0dGluZ3NUYWJzLmVNYWlsU2VydmVyIixkZWZhdWx0TWVzc2FnZToiRS1tYWlsIHNlcnZlciJ9LGF1dGhDb25maWd1cmF0aW9uOntpZDoiU2VydmVyU2V0dGluZ3NUYWJzLmF1dGhDb25maWd1cmF0aW9uIixkZWZhdWx0TWVzc2FnZToiQXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIn0sc3RhdGlzdGljczp7aWQ6IlNlcnZlclNldHRpbmdzVGFicy5zdGF0aXN0aWNzIixkZWZhdWx0TWVzc2FnZToiU3RhdGlzdGljcyJ9fSksaz10LlNlcnZlclNldHRpbmdzVGFicz0obz0oMCxDLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVUYWI6KDAsUi5zZXR0aW5nc1RhYlNlbGVjdG9yKShlKX19LHtvbkNoYW5nZVRhYjpPLnJlZGlyZWN0fSkpKHM9KDAsUy5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmNyZWF0ZVRhYkxpbms9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NyZWF0ZVRhYkxpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY3JlYXRlVGFic0NvbmZpZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGcuZGVmYXVsdCkocixvKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJMaW5rX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlIuU0VSVkVSX1NFVFRJTkdTX1RBQl9QQUdFLHBheWxvYWQ6e3NldHRpbmdzVGFiOmV9fX19LHtrZXk6Il9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlVGFic0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXt9LCgwLHUuZGVmYXVsdCkoZSxqLkVNQUlMX1NFUlZFUix7bmFtZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShNLmVNYWlsU2VydmVyKSxsaW5rOnRoaXMuY3JlYXRlVGFiTGluayhqLkVNQUlMX1NFUlZFUiksY29tcG9uZW50OnYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEwuRW1haWxTZXJ2ZXJUYWIsbnVsbCl9KSwoMCx1LmRlZmF1bHQpKGUsai5BVVRIT1JJWkFUSU9OX0NPTkZJR1VSQVRJT04se25hbWU6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoTS5hdXRoQ29uZmlndXJhdGlvbiksbGluazp0aGlzLmNyZWF0ZVRhYkxpbmsoai5BVVRIT1JJWkFUSU9OX0NPTkZJR1VSQVRJT04pLGNvbXBvbmVudDp2LmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkF1dGhDb25maWd1cmF0aW9uVGFiLG51bGwpfSksKDAsdS5kZWZhdWx0KShlLGouU1RBVElTVElDUyx7bmFtZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShNLnN0YXRpc3RpY3MpLGxpbms6dGhpcy5jcmVhdGVUYWJMaW5rKGouU1RBVElTVElDUyksY29tcG9uZW50OnYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuU3RhdGlzdGljc1RhYixudWxsKX0pLGV9fSx7a2V5OiJfX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVuZGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVuZGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW5kZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbmRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4Lk5hdmlnYXRpb25UYWJzLHtjb25maWc6dGhpcy5jcmVhdGVUYWJzQ29uZmlnKCksYWN0aXZlVGFiOnRoaXMucHJvcHMuYWN0aXZlVGFiLG9uQ2hhbmdlVGFiOnRoaXMucHJvcHMub25DaGFuZ2VUYWIsbW9iaWxlRGlzYWJsZWQ6ITB9KX19XSksdH0oeS5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOlMuaW50bFNoYXBlLmlzUmVxdWlyZWQsYWN0aXZlVGFiOkEuZGVmYXVsdC5zdHJpbmcsb25DaGFuZ2VUYWI6QS5kZWZhdWx0LmZ1bmN9LGkuZGVmYXVsdFByb3BzPXthY3RpdmVUYWI6ai5FTUFJTF9TRVJWRVIsb25DaGFuZ2VUYWI6ZnVuY3Rpb24oKXt9fSxzPWEpKXx8cyl8fHM7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGssIlNlcnZlclNldHRpbmdzVGFicyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zZXJ2ZXJTZXR0aW5nc1RhYnMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc2VydmVyU2V0dGluZ3NUYWJzLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9GT1JNX0NPTkZJRz10LlNUQVRJU1RJQ1NfVFlQRT10LlNUQVRJU1RJQ1NfRU5BQkxFRF9LRVk9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fShyKSxzPXQuU1RBVElTVElDU19FTkFCTEVEX0tFWT0iZW5hYmxlZCIsaT10LlNUQVRJU1RJQ1NfVFlQRT0ic2VydmVyLmFuYWx5dGljcy5hbGwiLGE9dC5ERUZBVUxUX0ZPUk1fQ09ORklHPSgwLG8uZGVmYXVsdCkoe30scywhMSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHMsIlNUQVRJU1RJQ1NfRU5BQkxFRF9LRVkiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpLCJTVEFUSVNUSUNTX1RZUEUiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJERUZBVUxUX0ZPUk1fQ09ORklHIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3N0YXRpc3RpY3NUYWIvY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zdGF0aXN0aWNzVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3N0YXRpc3RpY3NUYWIvc3RhdGlzdGljc1RhYi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU3RhdGlzdGljc1RhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU3RhdGlzdGljc1RhYn19KX0sIi4vc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9zdGF0aXN0aWNzVGFiLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RhdGlzdGljc1RhYj12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxNPXIodyksaz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxJPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksUD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLE49bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLEI9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRQcm92aWRlci5qc3giKSxVPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEc9cihVKSx6PW4oIi4vc3JjL2NvbXBvbmVudHMvcHJlbG9hZGVycy9zcGlubmluZ1ByZWxvYWRlci9pbmRleC5qcyIpLFY9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRDaGVja2JveC9pbmRleC5qcyIpLFc9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2JpZ0J1dHRvbi9pbmRleC5qcyIpLFk9bigiLi9zcmMvY29tbW9uL2ltZy9hcnJvdy1yaWdodC1pbmxpbmUuc3ZnIikscT1yKFkpLEs9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zdGF0aXN0aWNzVGFiL2NvbnN0YW50cy5qcyIpLFg9bigiLi9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zdGF0aXN0aWNzVGFiL3N0YXRpc3RpY3NUYWIuc2NzcyIpLCQ9cihYKSxRPXtTdGF0aXN0aWNzVGFiOntkaXNwbGF5TmFtZToiU3RhdGlzdGljc1RhYiJ9fSxKPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9zdGF0aXN0aWNzVGFiLmpzeCIsY29tcG9uZW50czpRLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLFo9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zdGF0aXN0aWNzVGFiL3N0YXRpc3RpY3NUYWIuanN4Iixjb21wb25lbnRzOlEsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksZWU9Ry5kZWZhdWx0LmJpbmQoJC5kZWZhdWx0KSx0ZT0oMCxELmRlZmluZU1lc3NhZ2VzKSh7c3RhdGlzdGljc0luZm86e2lkOiJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NJbmZvIixkZWZhdWx0TWVzc2FnZToiWW91IGNhbiBoZWxwIHVzIGltcHJvdmUgUmVwb3J0UG9ydGFsIGJ5IG9wdGluZyB0byBzZW5kIHVzYWdlIHN0YXRpc3RpY3MuIFdoaWxlIHlvdSdyZSB1c2luZyB0aGUgYXBwLCB3ZSdsbCBnYXRoZXIgZGF0YSB0aGF0IG1pZ2h0IGhlbHAgdXMgaW1wcm92ZSBSZXBvcnQgUG9ydGFsIHBlcmZvcm1hbmNlIGFuZCB1c2FiaWxpdHkgYnkgdHJhY2tpbmcgdXNhZ2UgZnJlcXVlbmN5IG9mIHBhcnRpY3VsYXIgZmVhdHVyZXMuIFNlZSBiZWxvdyBmb3IgZGV0YWlscyBhYm91dCB3aGF0IGluZm9ybWF0aW9uIGlzIHNlbnQuIn0sc3RhdGlzdGljc0xpc3Q6e2lkOiJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NMaXN0IixkZWZhdWx0TWVzc2FnZToiTElTVCBPRiBTRU5UIFNUQVRJU1RJQ1MifSxzdGF0aXN0aWNzTGlzdE1lc3NhZ2U6e2lkOiJTdGF0aXN0aWNzVGFiLnN0YXRpc3RpY3NMaXN0TWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6IlVzYWdlIHN0YXRpc3RpY3MgcmVwb3J0cyB1c3VhbGx5IHdvbid0IGluY2x1ZGUgYW55IHBlcnNvbmFsIGluZm9ybWF0aW9uLCBidXQgdGhleSBtaWdodCBpbmNsdWRlOiJ9LHN0YXRpc3RpY3NMaXN0UG9pbnQxOntpZDoiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzTGlzdFBvaW50MSIsZGVmYXVsdE1lc3NhZ2U6IkRldmljZSBpbmZvcm1hdGlvbiAtIHN1Y2ggYXMgeW91ciBoYXJkd2FyZSBtb2RlbCwgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uLCBzY3JlZW4gcmVzb2x1dGlvbiwgYnJvd3NlciB2ZXJzaW9uOyJ9LHN0YXRpc3RpY3NMaXN0UG9pbnQyOntpZDoiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzTGlzdFBvaW50MiIsZGVmYXVsdE1lc3NhZ2U6IkxvZyBpbmZvcm1hdGlvbiAtIHN1Y2ggYXMgZGV0YWlscyBvZiBob3cgeW91IHVzZSBSZXBvcnRQb3J0YWwsIHdoZXJlIHlvdSBjbGljayBhbmQgd2hhdCBhY3Rpb25zIHlvdSBkbywgaG93IGxvbmcgeW91IGxlYXZlIGFwcCBvcGVuLiJ9LHN0YXRpc3RpY3NFbmFibGVkOntpZDoiU3RhdGlzdGljc1RhYi5zdGF0aXN0aWNzRW5hYmxlZCIsZGVmYXVsdE1lc3NhZ2U6IkhlbHAgbWFrZSBSZXBvcnQgUG9ydGFsIGJldHRlciBieSBhdXRvbWF0aWNhbGx5IHNlbmRpbmcgc3RhdGlzdGljcyB0byB1cyJ9LHVwZGF0ZVN0YXRpc3RpY3NFbmFibGVkU3VjY2Vzczp7aWQ6IlN0YXRpc3RpY3NUYWIudXBkYXRlU3RhdGlzdGljc0VuYWJsZWRTdWNjZXNzIixkZWZhdWx0TWVzc2FnZToiU2VydmVyIHNldHRpbmdzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQifX0pLG5lPXQuU3RhdGlzdGljc1RhYj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEooWih0LGUpLGUpfX0oIlN0YXRpc3RpY3NUYWIiKSgobz0oMCxOLnJlZHV4Rm9ybSkoe2Zvcm06InN0YXRpc3RpY3NUYWJGb3JtIixpbml0aWFsVmFsdWVzOksuREVGQVVMVF9GT1JNX0NPTkZJR30pLHM9KDAsUC5jb25uZWN0KShudWxsLHtzaG93Tm90aWZpY2F0aW9uOkguc2hvd05vdGlmaWNhdGlvbn0pLG8oaT1zKGk9KDAsRC5pbmplY3RJbnRsKSgobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGIuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtsb2FkaW5nOiEwLGxpc3RTaG93bjohMX0sci5vbkZvcm1TdWJtaXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkxpc3RDbGljaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25MaXN0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudXBkYXRlU3RhdGlzdGljc0NvbmZpZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdXBkYXRlU3RhdGlzdGljc0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5mZXRjaFN0YXRpc3RpY3NDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2ZldGNoU3RhdGlzdGljc0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci51cGRhdGVTZXR0aW5nU3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdXBkYXRlU2V0dGluZ1N1Y2Nlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY2F0Y2hSZXF1ZXN0RXJyb3I9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NhdGNoUmVxdWVzdEVycm9yX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NhdGNoUmVxdWVzdEVycm9yX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVTZXR0aW5nU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlU2V0dGluZ1N1Y2Nlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZldGNoU3RhdGlzdGljc0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmV0Y2hTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkxpc3RDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25MaXN0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mZXRjaFN0YXRpc3RpY3NDb25maWcoKX19LHtrZXk6Il9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMH0pLHRoaXMudXBkYXRlU3RhdGlzdGljc0NvbmZpZyhlLmVuYWJsZWQpfX0se2tleToiX19vbkxpc3RDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25MaXN0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uTGlzdENsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkxpc3RDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25MaXN0Q2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKGZ1bmN0aW9uKGUpe3JldHVybntsaXN0U2hvd246IWUubGlzdFNob3dufX0pfX0se2tleToiX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KDAsay5mZXRjaCkoSS5VUkxTLnN0YXRpc3RpY3NTZXJ2ZXJTZXR0aW5ncygpLHttZXRob2Q6IlBPU1QiLGRhdGE6e3R5cGU6Sy5TVEFUSVNUSUNTX1RZUEUsZW5hYmxlZDplfX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC51cGRhdGVTZXR0aW5nU3VjY2VzcygpfSkuY2F0Y2godGhpcy5jYXRjaFJlcXVlc3RFcnJvcil9fSx7a2V5OiJfX2ZldGNoU3RhdGlzdGljc0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmV0Y2hTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mZXRjaFN0YXRpc3RpY3NDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoU3RhdGlzdGljc0NvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZmV0Y2hTdGF0aXN0aWNzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczsoMCxrLmZldGNoKShJLlVSTFMuc2VydmVyU2V0dGluZ3MoKSkudGhlbihmdW5jdGlvbih0KXt2YXIgbj10LmFuYWx5dGljc1Jlc291cmNlJiZ0LmFuYWx5dGljc1Jlc291cmNlW0suU1RBVElTVElDU19UWVBFXSxyPSgwLGMuZGVmYXVsdCkoe30sSy5TVEFUSVNUSUNTX0VOQUJMRURfS0VZLCEoIW58fCFuLmVuYWJsZWQpKTtlLnByb3BzLmluaXRpYWxpemUociksZS5zZXRTdGF0ZSh7bG9hZGluZzohMX0pfSkuY2F0Y2godGhpcy5jYXRjaFJlcXVlc3RFcnJvcil9fSx7a2V5OiJfX3VwZGF0ZVNldHRpbmdTdWNjZXNzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVTZXR0aW5nU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlU2V0dGluZ1N1Y2Nlc3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZVNldHRpbmdTdWNjZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVTZXR0aW5nU3VjY2Vzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlO3RoaXMucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTplKHRlLnVwZGF0ZVN0YXRpc3RpY3NFbmFibGVkU3VjY2VzcyksdHlwZTpILk5PVElGSUNBVElPTl9UWVBFUy5TVUNDRVNTfSksdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMX0pfX0se2tleToiX19jYXRjaFJlcXVlc3RFcnJvcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NhdGNoUmVxdWVzdEVycm9yX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jYXRjaFJlcXVlc3RFcnJvcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2F0Y2hSZXF1ZXN0RXJyb3JfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMX0pLHRoaXMucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTplLm1lc3NhZ2UsdHlwZTpILk5PVElGSUNBVElPTl9UWVBFUy5FUlJPUn0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUuaGFuZGxlU3VibWl0O3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmVlKCJzdGF0aXN0aWNzLXNldHRpbmdzLXRhYiIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZm9ybSIse2NsYXNzTmFtZTplZSgic3RhdGlzdGljcy1zZXR0aW5ncy1mb3JtIiksb25TdWJtaXQ6bih0aGlzLm9uRm9ybVN1Ym1pdCl9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZWUoImltYWdlLWhvbGRlciIpfSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6ZWUoInN0YXRpc3RpY3MtaW5mbyIpfSx0KHRlLnN0YXRpc3RpY3NJbmZvKSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTplZSgic3RhdGlzdGljcy1saXN0Iil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZWUoInN0YXRpc3RpY3MtbGlzdC10b2dnbGVyIiksb25DbGljazp0aGlzLm9uTGlzdENsaWNrfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCx0KHRlLnN0YXRpc3RpY3NMaXN0KSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ZWUoImFycm93Iix7cm90YXRlZDp0aGlzLnN0YXRlLmxpc3RTaG93bn0pfSwoMCxNLmRlZmF1bHQpKHEuZGVmYXVsdCkpKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmVlKCJsaXN0LW1lc3NhZ2UiLHsibGlzdC1zaG93biI6dGhpcy5zdGF0ZS5saXN0U2hvd259KX0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdCh0ZS5zdGF0aXN0aWNzTGlzdE1lc3NhZ2UpKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgidWwiLG51bGwsUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxpIix7Y2xhc3NOYW1lOmVlKCJzdGF0aXN0aWNzLXBvaW50Iil9LHQodGUuc3RhdGlzdGljc0xpc3RQb2ludDEpKSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6ZWUoInN0YXRpc3RpY3MtcG9pbnQiKX0sdCh0ZS5zdGF0aXN0aWNzTGlzdFBvaW50MikpKSkpLHRoaXMuc3RhdGUubG9hZGluZz9TLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LlNwaW5uaW5nUHJlbG9hZGVyLG51bGwpOlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZWUoImVuYWJsZWQtY2hlY2tib3giKX0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQi5GaWVsZFByb3ZpZGVyLHtuYW1lOksuU1RBVElTVElDU19FTkFCTEVEX0tFWSxmb3JtYXQ6Qm9vbGVhbn0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5JbnB1dENoZWNrYm94LHtjbGFzc05hbWU6ZWUoImVuYWJsZWQtY2hlY2tib3giKX0sdCh0ZS5zdGF0aXN0aWNzRW5hYmxlZCkpKSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVy5CaWdCdXR0b24se2NsYXNzTmFtZTplZSgic3VibWl0LWJ1dHRvbiIpLGRpc2FibGVkOnRoaXMuc3RhdGUubG9hZGluZyx0eXBlOiJzdWJtaXQiLG1vYmlsZURpc2FibGVkOiEwfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTplZSgic3VibWl0LWJ1dHRvbi10aXRsZSIpfSx0KEYuQ09NTU9OX0xPQ0FMRV9LRVlTLlNVQk1JVCkpKSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTplZSgibW9iaWxlLWRpc2FibGluZy1jb3ZlciIpfSkpfX1dKSx0fShPLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6RC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxpbml0aWFsaXplOkwuZGVmYXVsdC5mdW5jLGhhbmRsZVN1Ym1pdDpMLmRlZmF1bHQuZnVuYyxzaG93Tm90aWZpY2F0aW9uOkwuZGVmYXVsdC5mdW5jfSxhLmRlZmF1bHRQcm9wcz17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe30saGFuZGxlU3VibWl0OmZ1bmN0aW9uKCl7fSxjaGFuZ2U6ZnVuY3Rpb24oKXt9LHNob3dOb3RpZmljYXRpb246ZnVuY3Rpb24oKXt9fSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG5lLCJTdGF0aXN0aWNzVGFiIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3N0YXRpc3RpY3NUYWIvc3RhdGlzdGljc1RhYi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihlZSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2FkbWluL3NlcnZlclNldHRpbmdzUGFnZS9zZXJ2ZXJTZXR0aW5nc1RhYnMvc3RhdGlzdGljc1RhYi9zdGF0aXN0aWNzVGFiLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHRlLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvYWRtaW4vc2VydmVyU2V0dGluZ3NQYWdlL3NlcnZlclNldHRpbmdzVGFicy9zdGF0aXN0aWNzVGFiL3N0YXRpc3RpY3NUYWIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9hZG1pbi9zZXJ2ZXJTZXR0aW5nc1BhZ2Uvc2VydmVyU2V0dGluZ3NUYWJzL3N0YXRpc3RpY3NUYWIvc3RhdGlzdGljc1RhYi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InN0YXRpc3RpY3Mtc2V0dGluZ3MtdGFiIjoic3RhdGlzdGljc1RhYl9fc3RhdGlzdGljcy1zZXR0aW5ncy10YWJfX18yeUExUSIsInN0YXRpc3RpY3Mtc2V0dGluZ3MtZm9ybSI6InN0YXRpc3RpY3NUYWJfX3N0YXRpc3RpY3Mtc2V0dGluZ3MtZm9ybV9fXzNmWVVNIiwiaW1hZ2UtaG9sZGVyIjoic3RhdGlzdGljc1RhYl9faW1hZ2UtaG9sZGVyX19fMkxfLU0iLCJzdGF0aXN0aWNzLWluZm8iOiJzdGF0aXN0aWNzVGFiX19zdGF0aXN0aWNzLWluZm9fX18yeFVFRyIsInN0YXRpc3RpY3MtbGlzdCI6InN0YXRpc3RpY3NUYWJfX3N0YXRpc3RpY3MtbGlzdF9fXzFhM2R1Iiwic3RhdGlzdGljcy1saXN0LXRvZ2dsZXIiOiJzdGF0aXN0aWNzVGFiX19zdGF0aXN0aWNzLWxpc3QtdG9nZ2xlcl9fX3FzYmtGIixhcnJvdzoic3RhdGlzdGljc1RhYl9fYXJyb3dfX19QVXNRciIscm90YXRlZDoic3RhdGlzdGljc1RhYl9fcm90YXRlZF9fXzJBaEdDIiwibGlzdC1tZXNzYWdlIjoic3RhdGlzdGljc1RhYl9fbGlzdC1tZXNzYWdlX19fMmRzbEoiLCJsaXN0LXNob3duIjoic3RhdGlzdGljc1RhYl9fbGlzdC1zaG93bl9fX0Q5cU9DIiwic3RhdGlzdGljcy1wb2ludCI6InN0YXRpc3RpY3NUYWJfX3N0YXRpc3RpY3MtcG9pbnRfX18zVFdnQyIsImVuYWJsZWQtY2hlY2tib3giOiJzdGF0aXN0aWNzVGFiX19lbmFibGVkLWNoZWNrYm94X19fM1pZdnciLCJzdWJtaXQtYnV0dG9uIjoic3RhdGlzdGljc1RhYl9fc3VibWl0LWJ1dHRvbl9fX1lCSlhwIiwic3VibWl0LWJ1dHRvbi10aXRsZSI6InN0YXRpc3RpY3NUYWJfX3N1Ym1pdC1idXR0b24tdGl0bGVfX18xdmxQdCIsIm1vYmlsZS1kaXNhYmxpbmctY292ZXIiOiJzdGF0aXN0aWNzVGFiX19tb2JpbGUtZGlzYWJsaW5nLWNvdmVyX19fMWo5ODMifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hY2N1cmFjeUZvcm1CbG9jay9hY2N1cmFjeUZvcm1CbG9jay5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFjY3VyYWN5Rm9ybUJsb2NrPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksRD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFdpdGhJY29uL2luZGV4LmpzIiksdz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2JpZ0J1dHRvbi9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZm9ybUZpZWxkL2luZGV4LmpzIiksUD1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYWNjdXJhY3lGb3JtQmxvY2svYWNjdXJhY3lGb3JtQmxvY2suc2NzcyIpLE49cihQKSxIPXtBY2N1cmFjeUZvcm1CbG9jazp7ZGlzcGxheU5hbWU6IkFjY3VyYWN5Rm9ybUJsb2NrIn19LEY9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FjY3VyYWN5Rm9ybUJsb2NrL2FjY3VyYWN5Rm9ybUJsb2NrLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbZV0saW1wb3J0czpbVC5kZWZhdWx0XX0pLEI9KDAseS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FjY3VyYWN5Rm9ybUJsb2NrL2FjY3VyYWN5Rm9ybUJsb2NrLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbXSxpbXBvcnRzOltULmRlZmF1bHQsYi5kZWZhdWx0XX0pLFU9Uy5kZWZhdWx0LmJpbmQoTi5kZWZhdWx0KSxHPSgwLHguZGVmaW5lTWVzc2FnZXMpKHttaW5pbXVtU2hvdWxkTWF0Y2hUaXRsZTp7aWQ6IkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1TaG91bGRNYXRjaFRpdGxlIixkZWZhdWx0TWVzc2FnZToiTWluaW11bSBzaG91bGQgbWF0Y2gifSxtaW5pbXVtRG9jRnJlcVRpdGxlOntpZDoiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bURvY0ZyZXFUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6Ik1pbmltdW0gZG9jdW1lbnQgZnJlcXVlbmN5In0sbWluaW11bVRlcm1GcmVxVGl0bGU6e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5taW5pbXVtVGVybUZyZXFUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6Ik1pbmltdW0gdGVybSBmcmVxdWVuY3kifSxudW1iZXJPZkxvZ0xpbmVzVGl0bGU6e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5udW1iZXJPZkxvZ0xpbmVzVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJOdW1iZXIgb2YgbG9nIGxpbmVzIn0sbWluaW11bVNob3VsZE1hdGNoRGVzY3JpcHRpb246e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5taW5pbXVtU2hvdWxkTWF0Y2hEZXNjcmlwdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IlBlcmNlbnQgb2Ygd29yZHMgZXF1YWxpdHkgYmV0d2VlbiBhbmFseXplZCBsb2cgYW5kIHBhcnRpY3VsYXIgbG9nIGZyb20gdGhlIEVsYXN0aWNTZWFyY2guIElmIGEgbG9nIGZyb20gRWxhc3RpY1NlYXJjaCBoYXMgdGhlIHZhbHVlIGxlc3MgdGhlbiBzZXQsIHRoaXMgbG9nIHdpbGwgYmUgaWdub3JlZCBmb3IgQUEuIn0sbWluaW11bURvY0ZyZXFEZXNjcmlwdGlvbjp7aWQ6IkFjY3VyYWN5Rm9ybUJsb2NrLm1pbmltdW1Eb2NGcmVxRGVzY3JpcHRpb24iLGRlZmF1bHRNZXNzYWdlOiJTZXQgdGhlIG1pbmltdW0gZnJlcXVlbmN5IG9mIHRoZSBzYXZlZCBsb2dzIGluIEVsYXN0aWNTZWFyY2ggKGluZGV4KSBpbiB3aGljaCB3b3JkIGZyb20gYW5hbHl6ZWQgbG9nIHNob3VsZCBiZSB1c2VkLiBJZiB0aGUgbG9nIGNvdW50IGlzIGJlbG93IHRoZSBzcGVjaWZpZWQgdmFsdWUsIHRoYXQgd29yZCB3aWxsIGJlIGlnbm9yZWQgZm9yIEFBIGluIHRoZSBhbmFseXplZCBsb2cuIFRoZSBtb3JlIG9mdGVuIHRoZSB3b3JkIGFwcGVhcnMgaW4gaW5kZXgsIHRoZSBsb3dlciBpdCB3ZWlnaHRzLiJ9LG1pbmltdW1UZXJtRnJlcURlc2NyaXB0aW9uOntpZDoiQWNjdXJhY3lGb3JtQmxvY2subWluaW11bVRlcm1GcmVxRGVzY3JpcHRpb24iLGRlZmF1bHRNZXNzYWdlOiJTZXQgdGhlIG1pbmltdW0gZnJlcXVlbmN5IG9mIHRoZSB3b3JkIGluIHRoZSBhbmFseXplZCBsb2cuIElmIHRoZSB3b3JkIGNvdW50IGlzIGJlbG93IHRoZSBzcGVjaWZpZWQgdmFsdWUsIHRoaXMgd29yZCB3aWxsIGJlIGlnbm9yZWQgZm9yIEFBLiBUaGUgbW9yZSBvZnRlbiB0aGUgd29yZCBhcHBlYXJzIGluIHRoZSBhbmFseXplZCBsb2csIHRoZSBoaWdoZXIgaXQgd2VpZ2h0cy4ifSxudW1iZXJPZkxvZ0xpbmVzRGVzY3JpcHRpb246e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5udW1iZXJPZkxvZ0xpbmVzRGVzY3JpcHRpb24iLGRlZmF1bHRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIGZpcnN0IGxpbmVzIG9mIGxvZyBtZXNzYWdlIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW4gRWxhc3RpY1NlYXJjaC4ifSxudW1iZXJPZkxvZ0xpbmVzQWxsT3B0aW9uOntpZDoiQWNjdXJhY3lGb3JtQmxvY2subnVtYmVyT2ZMb2dMaW5lc0FsbE9wdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkFsbCJ9LHN1Ym1pdEJ1dHRvblRleHQ6e2lkOiJBY2N1cmFjeUZvcm1CbG9jay5zdWJtaXRCdXR0b25UZXh0IixkZWZhdWx0TWVzc2FnZToiU3VibWl0In19KSx6PXQuQWNjdXJhY3lGb3JtQmxvY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBGKEIodCxlKSxlKX19KCJBY2N1cmFjeUZvcm1CbG9jayIpKCgwLHguaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpeygwLGMuZGVmYXVsdCkodGhpcyx0KTt2YXIgbj0oMCxmLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsKHRoaXMsZSkpO3JldHVybiBuLm5vcm1hbGl6ZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19ub3JtYWxpemVWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5kcm9wRG93bk9wdGlvbnM9W3t2YWx1ZToiMiIsbGFiZWw6IjIifSx7dmFsdWU6IjMiLGxhYmVsOiIzIn0se3ZhbHVlOiI0IixsYWJlbDoiNCJ9LHt2YWx1ZToiNSIsbGFiZWw6IjUifSx7dmFsdWU6Ii0xIixsYWJlbDplLmludGwuZm9ybWF0TWVzc2FnZShHLm51bWJlck9mTG9nTGluZXNBbGxPcHRpb24pfV0sbn1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJfX25vcm1hbGl6ZVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ub3JtYWxpemVWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbm9ybWFsaXplVmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX25vcm1hbGl6ZVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19ub3JtYWxpemVWYWx1ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmKCIiK2UpLnJlcGxhY2UoL1xEKy9nLCIiKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS5kaXNhYmxlZDtyZXR1cm4gVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodi5GcmFnbWVudCxudWxsLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOiJtaW5TaG91bGRNYXRjaCIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlUoImFjY3VyYWN5LWZvcm0taW5wdXQtd3JhcHBlciIpLGxhYmVsOnQuZm9ybWF0TWVzc2FnZShHLm1pbmltdW1TaG91bGRNYXRjaFRpdGxlKSxvbkNoYW5nZTp0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2Usbm9ybWFsaXplOnRoaXMubm9ybWFsaXplVmFsdWUsZm9ybWF0OlN0cmluZyxjdXN0b21CbG9jazp7bm9kZTpULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCx0LmZvcm1hdE1lc3NhZ2UoRy5taW5pbXVtU2hvdWxkTWF0Y2hEZXNjcmlwdGlvbikpfSxkaXNhYmxlZDpufSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZpZWxkRXJyb3JIaW50LG51bGwsVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRC5JbnB1dFdpdGhJY29uLHtpY29uOlQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJpIix7Y2xhc3NOYW1lOlUoInBlcmNlbnQtaWNvbiIpfSwiJSIpLG1heExlbmd0aDoiMyIsbW9iaWxlRGlzYWJsZWQ6ITB9KSkpLFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuRm9ybUZpZWxkLHtuYW1lOiJtaW5Eb2NGcmVxIixmaWVsZFdyYXBwZXJDbGFzc05hbWU6VSgiYWNjdXJhY3ktZm9ybS1pbnB1dC13cmFwcGVyIiksbGFiZWw6dC5mb3JtYXRNZXNzYWdlKEcubWluaW11bURvY0ZyZXFUaXRsZSksb25DaGFuZ2U6dGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlLG5vcm1hbGl6ZTp0aGlzLm5vcm1hbGl6ZVZhbHVlLGZvcm1hdDpTdHJpbmcsY3VzdG9tQmxvY2s6e25vZGU6VC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKEcubWluaW11bURvY0ZyZXFEZXNjcmlwdGlvbikpfSxkaXNhYmxlZDpufSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkZpZWxkRXJyb3JIaW50LG51bGwsVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5JbnB1dCx7bWF4TGVuZ3RoOiIyIixtb2JpbGVEaXNhYmxlZDohMH0pKSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtRmllbGQse25hbWU6Im1pblRlcm1GcmVxIixmaWVsZFdyYXBwZXJDbGFzc05hbWU6VSgiYWNjdXJhY3ktZm9ybS1pbnB1dC13cmFwcGVyIiksbGFiZWw6dC5mb3JtYXRNZXNzYWdlKEcubWluaW11bVRlcm1GcmVxVGl0bGUpLG9uQ2hhbmdlOnRoaXMucHJvcHMub25JbnB1dENoYW5nZSxub3JtYWxpemU6dGhpcy5ub3JtYWxpemVWYWx1ZSxmb3JtYXQ6U3RyaW5nLGN1c3RvbUJsb2NrOntub2RlOlQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQuZm9ybWF0TWVzc2FnZShHLm1pbmltdW1UZXJtRnJlcURlc2NyaXB0aW9uKSl9LGRpc2FibGVkOm59LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRmllbGRFcnJvckhpbnQsbnVsbCxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChMLklucHV0LHttYXhMZW5ndGg6IjIiLG1vYmlsZURpc2FibGVkOiEwfSkpKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLkZvcm1GaWVsZCx7bmFtZToibnVtYmVyT2ZMb2dMaW5lcyIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlUoImRyb3AtZG93bi1ibG9jayIpLGxhYmVsOnQuZm9ybWF0TWVzc2FnZShHLm51bWJlck9mTG9nTGluZXNUaXRsZSksb25DaGFuZ2U6dGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlLGZvcm1hdDpTdHJpbmcsY3VzdG9tQmxvY2s6e25vZGU6VC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKEcubnVtYmVyT2ZMb2dMaW5lc0Rlc2NyaXB0aW9uKSl9LGRpc2FibGVkOm59LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuSW5wdXREcm9wZG93bix7b3B0aW9uczp0aGlzLmRyb3BEb3duT3B0aW9ucyxtb2JpbGVEaXNhYmxlZDohMH0pKSxULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoInN1Ym1pdC1idXR0b24tY29udGFpbmVyIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgic3VibWl0LWJ1dHRvbi13cmFwcGVyIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuQmlnQnV0dG9uLHt0eXBlOiJzdWJtaXQiLGRpc2FibGVkOm59LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlUoInN1Ym1pdC1idXR0b24tdGV4dCIpfSx0LmZvcm1hdE1lc3NhZ2UoRy5zdWJtaXRCdXR0b25UZXh0KSkpKSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2Rpc2FibGVkOmouZGVmYXVsdC5ib29sLGludGw6eC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxvbklucHV0Q2hhbmdlOmouZGVmYXVsdC5mdW5jfSxzLmRlZmF1bHRQcm9wcz17ZGlzYWJsZWQ6ITEsb25JbnB1dENoYW5nZTpmdW5jdGlvbigpe319LG89aSkpfHxvKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiQWNjdXJhY3lGb3JtQmxvY2siLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hY2N1cmFjeUZvcm1CbG9jay9hY2N1cmFjeUZvcm1CbG9jay5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FjY3VyYWN5Rm9ybUJsb2NrL2FjY3VyYWN5Rm9ybUJsb2NrLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYWNjdXJhY3lGb3JtQmxvY2svYWNjdXJhY3lGb3JtQmxvY2suanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYWNjdXJhY3lGb3JtQmxvY2svYWNjdXJhY3lGb3JtQmxvY2suc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhY2N1cmFjeS1mb3JtLWlucHV0LXdyYXBwZXIiOiJhY2N1cmFjeUZvcm1CbG9ja19fYWNjdXJhY3ktZm9ybS1pbnB1dC13cmFwcGVyX19fMWxKRWMiLCJkcm9wLWRvd24tYmxvY2siOiJhY2N1cmFjeUZvcm1CbG9ja19fZHJvcC1kb3duLWJsb2NrX19fZ3dXZEIiLCJzdWJtaXQtYnV0dG9uLWNvbnRhaW5lciI6ImFjY3VyYWN5Rm9ybUJsb2NrX19zdWJtaXQtYnV0dG9uLWNvbnRhaW5lcl9fX1lFaWZMIiwic3VibWl0LWJ1dHRvbi13cmFwcGVyIjoiYWNjdXJhY3lGb3JtQmxvY2tfX3N1Ym1pdC1idXR0b24td3JhcHBlcl9fXzNCQnhYIiwic3VibWl0LWJ1dHRvbi10ZXh0IjoiYWNjdXJhY3lGb3JtQmxvY2tfX3N1Ym1pdC1idXR0b24tdGV4dF9fXzFqdm9qIiwicGVyY2VudC1pY29uIjoiYWNjdXJhY3lGb3JtQmxvY2tfX3BlcmNlbnQtaWNvbl9fXzI2QkRCIn19LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYWNjdXJhY3lGb3JtQmxvY2svaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hY2N1cmFjeUZvcm1CbG9jay9hY2N1cmFjeUZvcm1CbG9jay5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQWNjdXJhY3lGb3JtQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFjY3VyYWN5Rm9ybUJsb2NrfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FuYWx5c2lzRm9ybS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFuYWx5c2lzRm9ybT12b2lkIDA7dmFyIG8scyxpLGEsbCx1LGMsZCxfLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksaz1yKE0pLEk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxQPXIoSSksTj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEg9cihOKSxGPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxCPXIoRiksVT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxHPXIoVSksej1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksVj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLFc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxZPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLHE9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxLPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSxYPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL3RvZ2dsZUJ1dHRvbi9pbmRleC5qcyIpLFE9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSxKPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9zdHJhdGVneUJsb2NrL2luZGV4LmpzIiksWj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYWNjdXJhY3lGb3JtQmxvY2svaW5kZXguanMiKSxlZT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vY29uc3RhbnRzLmpzIiksdGU9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FuYWx5c2lzRm9ybS5zY3NzIiksbmU9cih0ZSkscmU9e0FuYWx5c2lzRm9ybTp7ZGlzcGxheU5hbWU6IkFuYWx5c2lzRm9ybSJ9fSxvZT0oMCxQLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYW5hbHlzaXNGb3JtLmpzeCIsY29tcG9uZW50czpyZSxsb2NhbHM6W2VdLGltcG9ydHM6W2suZGVmYXVsdF19KSxzZT0oMCx3LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYW5hbHlzaXNGb3JtLmpzeCIsY29tcG9uZW50czpyZSxsb2NhbHM6W10saW1wb3J0czpbay5kZWZhdWx0LEwuZGVmYXVsdF19KSxpZT1HLmRlZmF1bHQuYmluZChuZS5kZWZhdWx0KSxhZT0oMCxXLmRlZmluZU1lc3NhZ2VzKSh7YW5hbHlzaXNNb2RlVGl0bGU6e2lkOiJBbmFseXNpc0Zvcm0uYW5hbHlzaXNNb2RlVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJNb2RlIG9mIEF1dG8tQW5hbHlzZSBBY2N1cmFjeSJ9LGFuYWx5c2lzQ2xhc3NpY01vZGVUaXRsZTp7aWQ6IkFuYWx5c2lzRm9ybS5hbmFseXNpc0NsYXNzaWNNb2RlVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJDbGFzc2ljIn0sYW5hbHlzaXNNb2RlcmF0ZU1vZGVUaXRsZTp7aWQ6IkFuYWx5c2lzRm9ybS5hbmFseXNpc01vZGVyYXRlTW9kZVRpdGxlIixkZWZhdWx0TWVzc2FnZToiTW9kZXJhdGUifSxhbmFseXNpc0xpZ2h0TW9kZVRpdGxlOntpZDoiQW5hbHlzaXNGb3JtLmFuYWx5c2lzTGlnaHRNb2RlVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJMaWdodCJ9LHVwZGF0ZVN1Y2Nlc3NOb3RpZmljYXRpb246e2lkOiJBbmFseXNpc0Zvcm0udXBkYXRlU3VjY2Vzc05vdGlmaWNhdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IlByb2plY3Qgc2V0dGluZ3Mgd2VyZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCJ9LHVwZGF0ZUVycm9yTm90aWZpY2F0aW9uOntpZDoiQW5hbHlzaXNGb3JtLnVwZGF0ZUVycm9yTm90aWZpY2F0aW9uIixkZWZhdWx0TWVzc2FnZToiU29tZXRoaW5nIHdlbnQgd3JvbmcifX0pLGxlPSgwLHouZm9ybVZhbHVlU2VsZWN0b3IpKCJhbmFseXNpc0Zvcm0iKSx1ZT17Q2xhc3NpYzoobz17fSwoMCxqLmRlZmF1bHQpKG8sZWUuTUlOX1NIT1VMRF9NQVRDSCw5NSksKDAsai5kZWZhdWx0KShvLGVlLk1JTl9ET0NfRlJFUSwxKSwoMCxqLmRlZmF1bHQpKG8sZWUuTUlOX1RFUk1fRlJFUSwxKSwoMCxqLmRlZmF1bHQpKG8sZWUuTlVNQkVSX09GX0xPR19MSU5FUywtMSksbyksTW9kZXJhdGU6KHM9e30sKDAsai5kZWZhdWx0KShzLGVlLk1JTl9TSE9VTERfTUFUQ0gsODApLCgwLGouZGVmYXVsdCkocyxlZS5NSU5fRE9DX0ZSRVEsMSksKDAsai5kZWZhdWx0KShzLGVlLk1JTl9URVJNX0ZSRVEsMSksKDAsai5kZWZhdWx0KShzLGVlLk5VTUJFUl9PRl9MT0dfTElORVMsNSkscyksTGlnaHQ6KGk9e30sKDAsai5kZWZhdWx0KShpLGVlLk1JTl9TSE9VTERfTUFUQ0gsNjApLCgwLGouZGVmYXVsdCkoaSxlZS5NSU5fRE9DX0ZSRVEsMSksKDAsai5kZWZhdWx0KShpLGVlLk1JTl9URVJNX0ZSRVEsMSksKDAsai5kZWZhdWx0KShpLGVlLk5VTUJFUl9PRl9MT0dfTElORVMsMyksaSl9LGNlPSJDbGFzc2ljIixkZT10LkFuYWx5c2lzRm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG9lKHNlKHQsZSksZSl9fSgiQW5hbHlzaXNGb3JtIikoKGE9KDAsei5yZWR1eEZvcm0pKHtmb3JtOiJhbmFseXNpc0Zvcm0iLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluU2hvdWxkTWF0Y2gsbj1lLm1pblRlcm1GcmVxLHI9ZS5taW5Eb2NGcmVxO3JldHVybnttaW5TaG91bGRNYXRjaDooIXR8fCFZLnZhbGlkYXRlLm1pblNob3VsZE1hdGNoKHQpKSYmIm1pblNob3VsZE1hdGNoSGludCIsbWluVGVybUZyZXE6KCFufHwhWS52YWxpZGF0ZS5taW5UZXJtRnJlcShuKSkmJiJtaW5UZXJtRnJlcUhpbnQiLG1pbkRvY0ZyZXE6KCFyfHwhWS52YWxpZGF0ZS5taW5Eb2NGcmVxKHIpKSYmIm1pblRlcm1GcmVxSGludCJ9fX0pLGw9KDAsVi5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57YW5hbHl6ZXJDb25maWd1cmF0aW9uOigwLEsuYW5hbHl6ZXJBdHRyaWJ1dGVzU2VsZWN0b3IpKGUpLGZvcm1JbnB1dHNWYWx1ZXM6bGUoZSxlZS5NSU5fU0hPVUxEX01BVENILGVlLk1JTl9ET0NfRlJFUSxlZS5NSU5fVEVSTV9GUkVRLGVlLk5VTUJFUl9PRl9MT0dfTElORVMpfX0se3Nob3dOb3RpZmljYXRpb246WC5zaG93Tm90aWZpY2F0aW9uLHVwZGF0ZUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uOksudXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb259KSx1PSgwLEguZGVmYXVsdCkoKSwoMCxXLmluamVjdEludGwpKGM9YShjPWwoYz11KChfPWQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLHkuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsQy5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxiLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2F1dG9BbmFseXNpc01vZGU6Y2V9LHIub25JbnB1dENoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5vbkZvcm1TdWJtaXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zZXRBbmFseXNpc01vZGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3NldEFuYWx5c2lzTW9kZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50YWJJdGVtcz1be3ZhbHVlOiJDbGFzc2ljIixsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShhZS5hbmFseXNpc0NsYXNzaWNNb2RlVGl0bGUpfSx7dmFsdWU6Ik1vZGVyYXRlIixsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShhZS5hbmFseXNpc01vZGVyYXRlTW9kZVRpdGxlKX0se3ZhbHVlOiJMaWdodCIsbGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoYWUuYW5hbHlzaXNMaWdodE1vZGVUaXRsZSl9XSxyLnRhYkNoYW5nZUhhbmRsZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsQy5kZWZhdWx0KShyLG8pfXJldHVybigwLFMuZGVmYXVsdCkodCxlKSwoMCxULmRlZmF1bHQpKHQsW3trZXk6Il9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190YWJDaGFuZ2VIYW5kbGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldEFuYWx5c2lzTW9kZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0QW5hbHlzaXNNb2RlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLGguZGVmYXVsdCkoe30sdGhpcy5wcm9wcy5hbmFseXplckNvbmZpZ3VyYXRpb24pO2RlbGV0ZSBlW2VlLklOREVYSU5HX1JVTk5JTkddLHRoaXMuc2V0QW5hbHlzaXNNb2RlKGUpLHRoaXMucHJvcHMuaW5pdGlhbGl6ZShlKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25JbnB1dENoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLnByb3BzLmZvcm1JbnB1dHNWYWx1ZXM7b1tyXT10LHRoaXMuc2V0QW5hbHlzaXNNb2RlKG8pfX0se2tleToiX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49KDAsSy5ub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFByZWZpeCkoZSxLLkFOQUxZWkVSX0FUVFJJQlVURV9QUkVGSVgpLHI9e2NvbmZpZ3VyYXRpb246e2F0dHJpYnV0ZXM6KDAsaC5kZWZhdWx0KSh7fSxuKX19O3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChRLlNFVFRJTkdTX1BBR0VfRVZFTlRTLlNVQk1JVF9BVVRPX0FOQUxZU0lTX1NFVFRJTkdTKSwoMCxZLmZldGNoKShxLlVSTFMucHJvamVjdCh0aGlzLnByb3BzLnByb2plY3RJZCkse21ldGhvZDoicHV0IixkYXRhOnJ9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOnQucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKGFlLnVwZGF0ZVN1Y2Nlc3NOb3RpZmljYXRpb24pLHR5cGU6WC5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pLHQucHJvcHMudXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb24ocil9KS5jYXRjaChmdW5jdGlvbigpe3QucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShhZS51cGRhdGVFcnJvck5vdGlmaWNhdGlvbiksdHlwZTpYLk5PVElGSUNBVElPTl9UWVBFUy5FUlJPUn0pfSl9fSx7a2V5OiJfX3NldEFuYWx5c2lzTW9kZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0QW5hbHlzaXNNb2RlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRBbmFseXNpc01vZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldEFuYWx5c2lzTW9kZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2V0QW5hbHlzaXNNb2RlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLGYuZGVmYXVsdCkodWUpLG49dC5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB1ZVt0XVtlZS5NSU5fU0hPVUxEX01BVENIXT09PU51bWJlcihlW2VlLk1JTl9TSE9VTERfTUFUQ0hdKSYmdWVbdF1bZWUuTUlOX0RPQ19GUkVRXT09PU51bWJlcihlW2VlLk1JTl9ET0NfRlJFUV0pJiZ1ZVt0XVtlZS5NSU5fVEVSTV9GUkVRXT09PU51bWJlcihlW2VlLk1JTl9URVJNX0ZSRVFdKSYmdWVbdF1bZWUuTlVNQkVSX09GX0xPR19MSU5FU109PT1OdW1iZXIoZVtlZS5OVU1CRVJfT0ZfTE9HX0xJTkVTXSl9KTt0aGlzLnNldFN0YXRlKHthdXRvQW5hbHlzaXNNb2RlOm58fCIifSl9fSx7a2V5OiJfX3RhYkNoYW5nZUhhbmRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190YWJDaGFuZ2VIYW5kbGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RhYkNoYW5nZUhhbmRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChRLlNFVFRJTkdTX1BBR0VfRVZFTlRTLlRPR0dMRV9BVVRPX0FOQUxZU0lTX01PREUpLHRoaXMucHJvcHMuY2hhbmdlKGVlLk1JTl9TSE9VTERfTUFUQ0gsdWVbZV1bZWUuTUlOX1NIT1VMRF9NQVRDSF0pLHRoaXMucHJvcHMuY2hhbmdlKGVlLk1JTl9ET0NfRlJFUSx1ZVtlXVtlZS5NSU5fRE9DX0ZSRVFdKSx0aGlzLnByb3BzLmNoYW5nZShlZS5NSU5fVEVSTV9GUkVRLHVlW2VdW2VlLk1JTl9URVJNX0ZSRVFdKSx0aGlzLnByb3BzLmNoYW5nZShlZS5OVU1CRVJfT0ZfTE9HX0xJTkVTLHVlW2VdW2VlLk5VTUJFUl9PRl9MT0dfTElORVNdKSx0aGlzLnNldFN0YXRlKHthdXRvQW5hbHlzaXNNb2RlOmV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS5oYW5kbGVTdWJtaXQscj1lLmRpc2FibGVkO3JldHVybiBrLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZm9ybSIse2NsYXNzTmFtZTppZSgiYW5hbHlzaXMtZm9ybSIpLG9uU3VibWl0Om4odGhpcy5vbkZvcm1TdWJtaXQpfSxrLmRlZmF1bHQuY3JlYXRlRWxlbWVudChKLlN0cmF0ZWd5QmxvY2sse2Rpc2FibGVkOnJ9KSxrLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmllKCJhY2N1cmFjeS1mb3JtLWdyb3VwIil9LGsuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmllKCJ0YWJzLWNvbnRhaW5lci1sYWJlbCIpfSx0LmZvcm1hdE1lc3NhZ2UoYWUuYW5hbHlzaXNNb2RlVGl0bGUpKSxrLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmllKCJ0b2dnbGUtYnV0dG9uLXdyYXBwZXIiKX0say5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJC5Ub2dnbGVCdXR0b24se2Rpc2FibGVkOnIsaXRlbXM6dGhpcy50YWJJdGVtcyx2YWx1ZTp0aGlzLnN0YXRlLmF1dG9BbmFseXNpc01vZGUsbW9iaWxlRGlzYWJsZWQ6ITAsb25DaGFuZ2U6dGhpcy50YWJDaGFuZ2VIYW5kbGV9KSkpLGsuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFouQWNjdXJhY3lGb3JtQmxvY2sse2Rpc2FibGVkOnIsb25JbnB1dENoYW5nZTp0aGlzLm9uSW5wdXRDaGFuZ2V9KSl9fV0pLHR9KE0uQ29tcG9uZW50KSxkLnByb3BUeXBlcz17ZGlzYWJsZWQ6Qi5kZWZhdWx0LmJvb2wsaW50bDpXLmludGxTaGFwZS5pc1JlcXVpcmVkLGFuYWx5emVyQ29uZmlndXJhdGlvbjpCLmRlZmF1bHQub2JqZWN0LHByb2plY3RJZDpCLmRlZmF1bHQuc3RyaW5nLGluaXRpYWxpemU6Qi5kZWZhdWx0LmZ1bmMsY2hhbmdlOkIuZGVmYXVsdC5mdW5jLGhhbmRsZVN1Ym1pdDpCLmRlZmF1bHQuZnVuYyxzaG93Tm90aWZpY2F0aW9uOkIuZGVmYXVsdC5mdW5jLHVwZGF0ZUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uOkIuZGVmYXVsdC5mdW5jLGZvcm1JbnB1dHNWYWx1ZXM6Qi5kZWZhdWx0Lm9iamVjdCx0cmFja2luZzpCLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6Qi5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOkIuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sZC5kZWZhdWx0UHJvcHM9e2Rpc2FibGVkOiExLGFuYWx5emVyQ29uZmlndXJhdGlvbjp7fSxwcm9qZWN0SWQ6IiIsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sY2hhbmdlOmZ1bmN0aW9uKCl7fSxoYW5kbGVTdWJtaXQ6ZnVuY3Rpb24oKXt9LHNob3dOb3RpZmljYXRpb246ZnVuY3Rpb24oKXt9LHVwZGF0ZUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uOmZ1bmN0aW9uKCl7fSxmb3JtSW5wdXRzVmFsdWVzOnt9fSxjPV8pKXx8Yyl8fGMpfHxjKXx8YykpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkZSwiQW5hbHlzaXNGb3JtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYW5hbHlzaXNGb3JtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGllLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FuYWx5c2lzRm9ybS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhZSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hbmFseXNpc0Zvcm0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobGUsInNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vYW5hbHlzaXNGb3JtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHVlLCJhbmFseXNpc01vZGVDb25maWciLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hbmFseXNpc0Zvcm0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoY2UsIkRFRkFVTFRfQU5BTFlTSVNfTU9ERSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2FuYWx5c2lzRm9ybS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hbmFseXNpc0Zvcm0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhbmFseXNpcy1mb3JtIjoiYW5hbHlzaXNGb3JtX19hbmFseXNpcy1mb3JtX19fMzJqb2giLCJhY2N1cmFjeS1mb3JtLWdyb3VwIjoiYW5hbHlzaXNGb3JtX19hY2N1cmFjeS1mb3JtLWdyb3VwX19fUzZ5XzgiLCJ0YWJzLWNvbnRhaW5lci1sYWJlbCI6ImFuYWx5c2lzRm9ybV9fdGFicy1jb250YWluZXItbGFiZWxfX18zOWt5YSIsInRvZ2dsZS1idXR0b24td3JhcHBlciI6ImFuYWx5c2lzRm9ybV9fdG9nZ2xlLWJ1dHRvbi13cmFwcGVyX19fMXczZFUifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXQuTUlOX1NIT1VMRF9NQVRDSD0ibWluU2hvdWxkTWF0Y2giLG89dC5NSU5fRE9DX0ZSRVE9Im1pbkRvY0ZyZXEiLHM9dC5NSU5fVEVSTV9GUkVRPSJtaW5UZXJtRnJlcSIsaT10Lk5VTUJFUl9PRl9MT0dfTElORVM9Im51bWJlck9mTG9nTGluZXMiLGE9dC5JTkRFWElOR19SVU5OSU5HPSJpbmRleGluZ1J1bm5pbmciOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJNSU5fU0hPVUxEX01BVENIIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiTUlOX0RPQ19GUkVRIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywiTUlOX1RFUk1fRlJFUSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL2NvbnN0YW50cy5qcyIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGksIk5VTUJFUl9PRl9MT0dfTElORVMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihhLCJJTkRFWElOR19SVU5OSU5HIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vY29uc3RhbnRzLmpzIikpfSgpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL3N0cmF0ZWd5QmxvY2svaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9zdHJhdGVneUJsb2NrL3N0cmF0ZWd5QmxvY2suanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN0cmF0ZWd5QmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlN0cmF0ZWd5QmxvY2t9fSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vc3RyYXRlZ3lCbG9jay9zdHJhdGVneUJsb2NrLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RyYXRlZ3lCbG9jaz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dEJpZ1N3aXRjaGVyL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFJhZGlvL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vc3RyYXRlZ3lCbG9jay9zdHJhdGVneUJsb2NrLnNjc3MiKSxCPXIoRiksVT17U3RyYXRlZ3lCbG9jazp7ZGlzcGxheU5hbWU6IlN0cmF0ZWd5QmxvY2sifX0sRz0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vc3RyYXRlZ3lCbG9jay9zdHJhdGVneUJsb2NrLmpzeCIsY29tcG9uZW50czpVLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLHo9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYW5hbHlzaXNGb3JtL3N0cmF0ZWd5QmxvY2svc3RyYXRlZ3lCbG9jay5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxWPUQuZGVmYXVsdC5iaW5kKEIuZGVmYXVsdCksVz0oMCx3LmRlZmluZU1lc3NhZ2VzKSh7YXV0b0FuYWx5c2lzU3dpdGNoZXJUaXRsZTp7aWQ6IlN0cmF0ZWd5QmxvY2suYXV0b0FuYWx5c2lzU3dpdGNoZXJUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkF1dG8gYW5hbHlzaXMifSxzdHJhdGVneVNlbGVjdG9yVGl0bGU6e2lkOiJTdHJhdGVneUJsb2NrLnN0cmF0ZWd5U2VsZWN0b3JUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkJhc2UgZm9yIEF1dG8gQW5hbHlzaXMifSxhbmFseXNpc1N0YXR1c0luZm86e2lkOiJTdHJhdGVneUJsb2NrLmFuYWx5c2lzU3RhdHVzSW5mbyIsZGVmYXVsdE1lc3NhZ2U6IklmIE9OIC0gYW5hbHlzaXMgc3RhcnRzIGFzIHNvb24gYXMgYW55IGxhdW5jaCBmaW5pc2hlZDxici8+SWYgT0ZGIC0gbm90IGF1dG9tYXRpYywgYnV0IGNhbiBiZSBpbnZva2VkIG1hbnVhbGx5In0sc2FtZU5hbWVMYXVuY2hlc0NhcHRpb246e2lkOiJTdHJhdGVneUJsb2NrLnNhbWVOYW1lTGF1bmNoZXNDYXB0aW9uIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoZXMgd2l0aCB0aGUgc2FtZSBuYW1lIn0sc2FtZU5hbWVMYXVuY2hlc0luZm86e2lkOiJTdHJhdGVneUJsb2NrLnNhbWVOYW1lTGF1bmNoZXNJbmZvIixkZWZhdWx0TWVzc2FnZToiVGhlIHRlc3QgaXRlbXMgYXJlIGFuYWx5emVkIG9uIGJhc2Ugb2YgcHJldmlvdXNseSBpbnZlc3RpZ2F0ZWQgZGF0YSBpbiBsYXVuY2hlcyB3aXRoIHRoZSBzYW1lIG5hbWUifSxhbGxMYXVuY2hlc0NhcHRpb246e2lkOiJTdHJhdGVneUJsb2NrLmFsbExhdW5jaGVzQ2FwdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBsYXVuY2hlcyJ9LGFsbExhdW5jaGVzSW5mbzp7aWQ6IlN0cmF0ZWd5QmxvY2suYWxsTGF1bmNoZXNJbmZvIixkZWZhdWx0TWVzc2FnZToiVGhlIHRlc3QgaXRlbXMgYXJlIGFuYWx5emVkIG9uIGJhc2Ugb2YgcHJldmlvdXNseSBpbnZlc3RpZ2F0ZWQgZGF0YSBpbiBhbGwgbGF1bmNoZXMifX0pLFk9dC5TdHJhdGVneUJsb2NrPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRyh6KHQsZSksZSl9fSgiU3RyYXRlZ3lCbG9jayIpKChvPSgwLFIuZGVmYXVsdCkoKSwoMCx3LmluamVjdEludGwpKHM9bygoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmZvcm1hdEFuYWx5emVyQXZhaWxhYmlsaXR5VmFsdWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2Zvcm1hdEFuYWx5emVyQXZhaWxhYmlsaXR5VmFsdWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRBbmFseXplckF2YWlsYWJpbGl0eVZhbHVlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZKU09OLnBhcnNlKGUpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLmRpc2FibGVkLHI9ZS50cmFja2luZztyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVC5GcmFnbWVudCxudWxsLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uRm9ybUZpZWxkLHtuYW1lOiJpc0F1dG9BbmFseXplckVuYWJsZWQiLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpWKCJzd2l0Y2hlci13cmFwcGVyIiksbGFiZWw6dC5mb3JtYXRNZXNzYWdlKFcuYXV0b0FuYWx5c2lzU3dpdGNoZXJUaXRsZSksY3VzdG9tQmxvY2s6e25vZGU6QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsKDAsay5kZWZhdWx0KSh0LmZvcm1hdE1lc3NhZ2UoVy5hbmFseXNpc1N0YXR1c0luZm8pKSl9LGZvcm1hdDp0aGlzLmZvcm1hdEFuYWx5emVyQXZhaWxhYmlsaXR5VmFsdWUscGFyc2U6Qm9vbGVhbixkaXNhYmxlZDpuLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7ci50cmFja0V2ZW50KEguU0VUVElOR1NfUEFHRV9FVkVOVFMuQVVUT19BTkFMWVNJU19TV0lUQ0hFUil9fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJLklucHV0QmlnU3dpdGNoZXIse21vYmlsZURpc2FibGVkOiEwfSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uRm9ybUZpZWxkLHtuYW1lOiJhdXRvQW5hbHl6ZXJNb2RlIixjb250YWluZXJDbGFzc05hbWU6VigicmFkaW8tY29udGFpbmVyIiksZmllbGRXcmFwcGVyQ2xhc3NOYW1lOlYoImFhLXN0cmF0ZWd5LW9wdGlvbi1zZWxlY3RvciIpLGN1c3RvbUJsb2NrOntub2RlOkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQuZm9ybWF0TWVzc2FnZShXLnNhbWVOYW1lTGF1bmNoZXNJbmZvKSksd3JhcHBlckNsYXNzTmFtZTpWKCJyYWRpby1kZXNjcmlwdGlvbiIpfSxsYWJlbDp0LmZvcm1hdE1lc3NhZ2UoVy5zdHJhdGVneVNlbGVjdG9yVGl0bGUpLGRpc2FibGVkOm4sb25DaGFuZ2U6ZnVuY3Rpb24oKXtyLnRyYWNrRXZlbnQoSC5TRVRUSU5HU19QQUdFX0VWRU5UUy5BVVRPX0FOQUxZU0lTX0JBU0VfUkFESU9fQlROKX19LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuSW5wdXRSYWRpbyx7b3duVmFsdWU6IkxBVU5DSF9OQU1FIixuYW1lOiJhYS1zdHJhdGVneSIsbW9iaWxlRGlzYWJsZWQ6ITB9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlYoInJhZGlvLWNoaWxkcmVuIil9LHQuZm9ybWF0TWVzc2FnZShXLnNhbWVOYW1lTGF1bmNoZXNDYXB0aW9uKSkpKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLkZvcm1GaWVsZCx7bmFtZToiYXV0b0FuYWx5emVyTW9kZSIsY29udGFpbmVyQ2xhc3NOYW1lOlYoInJhZGlvLWNvbnRhaW5lciIpLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpWKCJhYS1zdHJhdGVneS1vcHRpb24tc2VsZWN0b3IiKSxsYWJlbENsYXNzTmFtZTpWKCJuby1sYWJlbCIpLGN1c3RvbUJsb2NrOntub2RlOkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQuZm9ybWF0TWVzc2FnZShXLmFsbExhdW5jaGVzSW5mbykpLHdyYXBwZXJDbGFzc05hbWU6VigicmFkaW8tZGVzY3JpcHRpb24iKX0sZGlzYWJsZWQ6bixvbkNoYW5nZTpmdW5jdGlvbigpe3IudHJhY2tFdmVudChILlNFVFRJTkdTX1BBR0VfRVZFTlRTLkFVVE9fQU5BTFlTSVNfQkFTRV9SQURJT19CVE4pfX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5JbnB1dFJhZGlvLHtvd25WYWx1ZToiQUxMIixuYW1lOiJhYS1zdHJhdGVneSIsbW9iaWxlRGlzYWJsZWQ6ITB9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlYoInJhZGlvLWNoaWxkcmVuIil9LHQuZm9ybWF0TWVzc2FnZShXLmFsbExhdW5jaGVzQ2FwdGlvbikpKSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpWKCJmb3JtLWJyZWFrLWxpbmUiKX0pKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOncuaW50bFNoYXBlLmlzUmVxdWlyZWQsZGlzYWJsZWQ6eC5kZWZhdWx0LmJvb2wsdHJhY2tpbmc6eC5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OnguZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTp4LmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGkuZGVmYXVsdFByb3BzPXtkaXNhYmxlZDohMX0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIlN0cmF0ZWd5QmxvY2siLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9zdHJhdGVneUJsb2NrL3N0cmF0ZWd5QmxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoViwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9zdHJhdGVneUJsb2NrL3N0cmF0ZWd5QmxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9zdHJhdGVneUJsb2NrL3N0cmF0ZWd5QmxvY2suanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vc3RyYXRlZ3lCbG9jay9zdHJhdGVneUJsb2NrLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic3dpdGNoZXItd3JhcHBlciI6InN0cmF0ZWd5QmxvY2tfX3N3aXRjaGVyLXdyYXBwZXJfX18zUVZmdiIsIm5vLWxhYmVsIjoic3RyYXRlZ3lCbG9ja19fbm8tbGFiZWxfX184YWh2OSIsImFhLXN0cmF0ZWd5LW9wdGlvbi1zZWxlY3RvciI6InN0cmF0ZWd5QmxvY2tfX2FhLXN0cmF0ZWd5LW9wdGlvbi1zZWxlY3Rvcl9fX1dhWFROIiwicmFkaW8tY29udGFpbmVyIjoic3RyYXRlZ3lCbG9ja19fcmFkaW8tY29udGFpbmVyX19fRHVEaWQiLCJyYWRpby1kZXNjcmlwdGlvbiI6InN0cmF0ZWd5QmxvY2tfX3JhZGlvLWRlc2NyaXB0aW9uX19faWdod3giLCJmb3JtLWJyZWFrLWxpbmUiOiJzdHJhdGVneUJsb2NrX19mb3JtLWJyZWFrLWxpbmVfX18zZkwySSIsInJhZGlvLWNoaWxkcmVuIjoic3RyYXRlZ3lCbG9ja19fcmFkaW8tY2hpbGRyZW5fX18zcjNWUiJ9fSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQXV0b0FuYWx5c2lzVGFiPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9pbmRleC5qcyIpLE09bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxQPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2FuYWx5c2lzRm9ybS9hbmFseXNpc0Zvcm0uanN4IiksTj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleEFjdGlvbnNCbG9jay9pbmRleC5qcyIpLEg9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLnNjc3MiKSxGPXIoSCksQj17QXV0b0FuYWx5c2lzVGFiOntkaXNwbGF5TmFtZToiQXV0b0FuYWx5c2lzVGFiIn19LFU9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEc9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLHo9eC5kZWZhdWx0LmJpbmQoRi5kZWZhdWx0KSxWPXQuQXV0b0FuYWx5c2lzVGFiPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiQXV0b0FuYWx5c2lzVGFiIikoKG89KDAsTC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdElkOigwLEkucHJvamVjdElkU2VsZWN0b3IpKGUpLGFjY291bnRSb2xlOigwLGsudXNlckFjY291bnRSb2xlU2VsZWN0b3IpKGUpLHVzZXJSb2xlOigwLGsuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3RvcikoZSl9fSx7ZmV0Y2hDb25maWd1cmF0aW9uQXR0cmlidXRlc0FjdGlvbjpNLmZldGNoQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb259KSkocz0oMCxELmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGQuZGVmYXVsdCkodGhpcyx0KSwoMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuZmV0Y2hDb25maWd1cmF0aW9uQXR0cmlidXRlc0FjdGlvbih0aGlzLnByb3BzLnByb2plY3RJZCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigiYXV0by1hbmFseXNpcy10YWIiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5BbmFseXNpc0Zvcm0se3Byb2plY3RJZDp0aGlzLnByb3BzLnByb2plY3RJZCxkaXNhYmxlZDohKDAsdy5jYW5VcGRhdGVTZXR0aW5ncykodGhpcy5wcm9wcy5hY2NvdW50Um9sZSx0aGlzLnByb3BzLnVzZXJSb2xlKX0pLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uSW5kZXhBY3Rpb25zQmxvY2sse2Rpc2FibGVkOiEoMCx3LmNhblVwZGF0ZVNldHRpbmdzKSh0aGlzLnByb3BzLmFjY291bnRSb2xlLHRoaXMucHJvcHMudXNlclJvbGUpfSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e3Byb2plY3RJZDpSLmRlZmF1bHQuc3RyaW5nLGZldGNoQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb246Ui5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxhY2NvdW50Um9sZTpSLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdXNlclJvbGU6Ui5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfSxpLmRlZmF1bHRQcm9wcz17cHJvamVjdElkOiIiLGZldGNoQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb246ZnVuY3Rpb24oKXt9fSxzPWEpKXx8cyl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJBdXRvQW5hbHlzaXNUYWIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2F1dG9BbmFseXNpc1RhYi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvYXV0b0FuYWx5c2lzVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYXV0by1hbmFseXNpcy10YWIiOiJhdXRvQW5hbHlzaXNUYWJfX2F1dG8tYW5hbHlzaXMtdGFiX19fMjE5Sm4ifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hdXRvQW5hbHlzaXNUYWIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkF1dG9BbmFseXNpc1RhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQXV0b0FuYWx5c2lzVGFifX0pO3ZhciBvPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9yZW1vdmVJbmRleE1vZGFsL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlJlbW92ZUluZGV4TW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLlJlbW92ZUluZGV4TW9kYWx9fSk7dmFyIHM9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL2dlbmVyYXRlSW5kZXhNb2RhbC9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHZW5lcmF0ZUluZGV4TW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkdlbmVyYXRlSW5kZXhNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2luZGV4QWN0aW9uc0Jsb2NrL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleEFjdGlvbnNCbG9jay9pbmRleEFjdGlvbnNCbG9jay5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSW5kZXhBY3Rpb25zQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkluZGV4QWN0aW9uc0Jsb2NrfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvaW5kZXhBY3Rpb25zQmxvY2svaW5kZXhBY3Rpb25zQmxvY2suanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbmRleEFjdGlvbnNCbG9jaz12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE09bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vc2VsZWN0b3JzLmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxQPXIoSSksTj1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9hbmFseXNpc0Zvcm0vY29uc3RhbnRzLmpzIiksVT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleEFjdGlvbnNCbG9jay9pbmRleEFjdGlvbnNCbG9jay5zY3NzIiksRz1yKFUpLHo9e0luZGV4QWN0aW9uc0Jsb2NrOntkaXNwbGF5TmFtZToiSW5kZXhBY3Rpb25zQmxvY2sifX0sVj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleEFjdGlvbnNCbG9jay9pbmRleEFjdGlvbnNCbG9jay5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxXPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2luZGV4QWN0aW9uc0Jsb2NrL2luZGV4QWN0aW9uc0Jsb2NrLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFk9UC5kZWZhdWx0LmJpbmQoRy5kZWZhdWx0KSxxPSgwLHcuZGVmaW5lTWVzc2FnZXMpKHtpbmRleEFjdGlvbnNCbG9ja1RpdGxlOntpZDoiSW5kZXhBY3Rpb25zQmxvY2sudGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJBY3Rpb25zIHdpdGggaW5kZXgifSxyZW1vdmVJbmRleERlc2NyaXB0aW9uOntpZDoiSW5kZXhBY3Rpb25zQmxvY2sucmVtb3ZlSW5kZXhEZXNjcmlwdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBkYXRhIHdpdGggeW91ciBpbnZlc3RpZ2F0aW9ucyB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUgRWxhc3RpY1NlYXJjaC4gRm9yIGNyZWF0aW5nIGEgbmV3IG9uZSB5b3UgY291bGQgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGVzdCByZXN1bHRzIG1hbnVhbGx5IG9yIGdlbmVyYXRlIGRhdGEgYmFzZWQgb24gcHJldmlvdXMgcmVzdWx0cyBvbiB0aGUgcHJvamVjdCBvbmNlIGFnYWluIn0sZ2VuZXJhdGVJbmRleERlc2NyaXB0aW9uOntpZDoiSW5kZXhBY3Rpb25zQmxvY2suZ2VuZXJhdGVJbmRleERlc2NyaXB0aW9uIixkZWZhdWx0TWVzc2FnZToiQWxsIGRhdGEgaXMgcmVtb3ZlZCBmcm9tIEVsYXN0aWNTZWFyY2ggYW5kIG5ldyBvbmUgaXMgZ2VuZXJhdGVkIGJhc2VkIG9uIGFsbCBwcmV2aW91cyBpbnZlc3RpZ2F0aW9ucyBvbiB0aGUgcHJvamVjdCBpbiBhY2NvcmRhbmNlIHdpdGggY3VycmVudCBhbmFseXNpcyBzZXR0aW5ncy4gWW91IGNhbiBzdGFydCBhdXRvLWFuYWx5c2UgdGVzdCByZXN1bHRzIGFmdGVyIHJlY2VpdmluZyBhbiBlLW1haWwgYWJvdXQgdGhlIGVuZCBvZiB0aGUgZ2VuZXJhdGlvbiBwcm9jZXNzIn0scmVtb3ZlSW5kZXhCdXR0b25DYXB0aW9uOntpZDoiSW5kZXhBY3Rpb25zQmxvY2sucmVtb3ZlSW5kZXhCdXR0b25DYXB0aW9uIixkZWZhdWx0TWVzc2FnZToiUmVtb3ZlIGluZGV4In0sZ2VuZXJhdGVJbmRleEJ1dHRvbkNhcHRpb246e2lkOiJJbmRleEFjdGlvbnNCbG9jay5nZW5lcmF0ZUluZGV4QnV0dG9uQ2FwdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkdlbmVyYXRlIGluZGV4In0sZ2VuZXJhdGVJbmRleEJ1dHRvblByb2dyZXNzQ2FwdGlvbjp7aWQ6IkluZGV4QWN0aW9uc0Jsb2NrLmdlbmVyYXRlSW5kZXhCdXR0b25Qcm9ncmVzc0NhcHRpb24iLGRlZmF1bHRNZXNzYWdlOiJJbiBwcm9ncmVzcy4uLiJ9LGFuYWx5emVyRGlzYWJsZWRCdXR0b25UaXRsZTp7aWQ6IkluZGV4QWN0aW9uc0Jsb2NrLmFuYWx5emVyRGlzYWJsZWRCdXR0b25UaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlNlcnZpY2UgQU5BTFlaRVIgaXMgbm90IHJ1bm5pbmcifX0pLEs9dC5JbmRleEFjdGlvbnNCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFYoVyh0LGUpLGUpfX0oIkluZGV4QWN0aW9uc0Jsb2NrIikoKG89KDAsRC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57aW5kZXhpbmdSdW5uaW5nOkpTT04ucGFyc2UoKDAsSC5hbmFseXplckF0dHJpYnV0ZXNTZWxlY3RvcikoZSlbQi5JTkRFWElOR19SVU5OSU5HXXx8ImZhbHNlIiksYXBwSW5mbzooMCxrLmFwcEluZm9TZWxlY3RvcikoZSl9fSx7c2hvd1JlbW92ZUluZGV4TW9kYWw6ZnVuY3Rpb24oKXtyZXR1cm4oMCxNLnNob3dNb2RhbEFjdGlvbikoe2lkOiJyZW1vdmVJbmRleE1vZGFsIn0pfSxzaG93R2VuZXJhdGVJbmRleE1vZGFsOmZ1bmN0aW9uKCl7cmV0dXJuKDAsTS5zaG93TW9kYWxBY3Rpb24pKHtpZDoiZ2VuZXJhdGVJbmRleE1vZGFsIn0pfX0pLHM9KDAsai5kZWZhdWx0KSgpLG8oaT0oMCx3LmluamVjdEludGwpKGk9cygobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxfLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGguZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnJlbW92ZUluZGV4PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW1vdmVJbmRleF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZW5lcmF0ZUluZGV4PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZW5lcmF0ZUluZGV4X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2VuZXJhdGVJbmRleF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2VuZXJhdGVJbmRleF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVtb3ZlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlbW92ZUluZGV4X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVJbmRleF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVtb3ZlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlbW92ZUluZGV4X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVJbmRleF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcmVtb3ZlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoRi5TRVRUSU5HU19QQUdFX0VWRU5UUy5SRU1PVkVfSU5ERVhfQlROKSx0aGlzLnByb3BzLnNob3dSZW1vdmVJbmRleE1vZGFsKCl9fSx7a2V5OiJfX2dlbmVyYXRlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dlbmVyYXRlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dlbmVyYXRlSW5kZXhfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoRi5TRVRUSU5HU19QQUdFX0VWRU5UUy5HRU5FUkFURV9JTkRFWF9CVE4pLHRoaXMucHJvcHMuc2hvd0dlbmVyYXRlSW5kZXhNb2RhbCgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLmRpc2FibGVkO3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChBLkZyYWdtZW50LG51bGwsQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpZKCJpbmRleC1hY3Rpb25zLXRpdGxlLXdyYXBwZXIiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6WSgiaW5kZXgtYWN0aW9ucy10aXRsZSIpfSx0LmZvcm1hdE1lc3NhZ2UocS5pbmRleEFjdGlvbnNCbG9ja1RpdGxlKSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgiZm9ybS1ncm91cC1jb250YWluZXIiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpZKCJpbmRleC1hY3Rpb24tZGVzY3JpcHRpb24iKX0sdC5mb3JtYXRNZXNzYWdlKHEucmVtb3ZlSW5kZXhEZXNjcmlwdGlvbikpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgiZm9ybS1ncm91cC1jb2x1bW4iKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5HaG9zdEJ1dHRvbix7ZGlzYWJsZWQ6dGhpcy5wcm9wcy5pbmRleGluZ1J1bm5pbmd8fCF0aGlzLnByb3BzLmFwcEluZm8uQU5BTFlaRVJ8fG4sb25DbGljazp0aGlzLnJlbW92ZUluZGV4LG1vYmlsZURpc2FibGVkOiEwfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpZKCJpbmRleC1hY3Rpb24tY2FwdGlvbiIpfSx0LmZvcm1hdE1lc3NhZ2UocS5yZW1vdmVJbmRleEJ1dHRvbkNhcHRpb24pKSkpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlkoImZvcm0tZ3JvdXAtY29udGFpbmVyIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgiaW5kZXgtYWN0aW9uLWRlc2NyaXB0aW9uIil9LHQuZm9ybWF0TWVzc2FnZShxLmdlbmVyYXRlSW5kZXhEZXNjcmlwdGlvbikpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WSgiZm9ybS1ncm91cC1jb2x1bW4iKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTi5HaG9zdEJ1dHRvbix7ZGlzYWJsZWQ6dGhpcy5wcm9wcy5pbmRleGluZ1J1bm5pbmd8fCF0aGlzLnByb3BzLmFwcEluZm8uQU5BTFlaRVJ8fG4sb25DbGljazp0aGlzLmdlbmVyYXRlSW5kZXgsdGl0bGU6dGhpcy5wcm9wcy5hcHBJbmZvLkFOQUxZWkVSPyIiOnQuZm9ybWF0TWVzc2FnZShxLmFuYWx5emVyRGlzYWJsZWRCdXR0b25UaXRsZSksbW9iaWxlRGlzYWJsZWQ6ITB9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlkoImluZGV4LWFjdGlvbi1jYXB0aW9uIil9LHQuZm9ybWF0TWVzc2FnZShxW3RoaXMucHJvcHMuaW5kZXhpbmdSdW5uaW5nPyJnZW5lcmF0ZUluZGV4QnV0dG9uUHJvZ3Jlc3NDYXB0aW9uIjoiZ2VuZXJhdGVJbmRleEJ1dHRvbkNhcHRpb24iXSkpKSkpKX19XSksdH0oQS5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtpbnRsOncuaW50bFNoYXBlLmlzUmVxdWlyZWQsZGlzYWJsZWQ6TC5kZWZhdWx0LmJvb2wsaW5kZXhpbmdSdW5uaW5nOkwuZGVmYXVsdC5ib29sLGFwcEluZm86TC5kZWZhdWx0Lm9iamVjdCxzaG93UmVtb3ZlSW5kZXhNb2RhbDpMLmRlZmF1bHQuZnVuYyxzaG93R2VuZXJhdGVJbmRleE1vZGFsOkwuZGVmYXVsdC5mdW5jLHRyYWNraW5nOkwuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpMLmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6TC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxhLmRlZmF1bHRQcm9wcz17ZGlzYWJsZWQ6ITEsaW5kZXhpbmdSdW5uaW5nOiExLGFwcEluZm86e30sc2hvd1JlbW92ZUluZGV4TW9kYWw6ZnVuY3Rpb24oKXt9LHNob3dHZW5lcmF0ZUluZGV4TW9kYWw6ZnVuY3Rpb24oKXt9fSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIkluZGV4QWN0aW9uc0Jsb2NrIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleEFjdGlvbnNCbG9jay9pbmRleEFjdGlvbnNCbG9jay5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvaW5kZXhBY3Rpb25zQmxvY2svaW5kZXhBY3Rpb25zQmxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL2luZGV4QWN0aW9uc0Jsb2NrL2luZGV4QWN0aW9uc0Jsb2NrLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvaW5kZXhBY3Rpb25zQmxvY2svaW5kZXhBY3Rpb25zQmxvY2suc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJmb3JtLWdyb3VwLWNvbnRhaW5lciI6ImluZGV4QWN0aW9uc0Jsb2NrX19mb3JtLWdyb3VwLWNvbnRhaW5lcl9fXzFyN25GIiwiZm9ybS1ncm91cC1jb2x1bW4iOiJpbmRleEFjdGlvbnNCbG9ja19fZm9ybS1ncm91cC1jb2x1bW5fX19sTHBwTCIsImluZGV4LWFjdGlvbnMtdGl0bGUtd3JhcHBlciI6ImluZGV4QWN0aW9uc0Jsb2NrX19pbmRleC1hY3Rpb25zLXRpdGxlLXdyYXBwZXJfX19SS1VsQiIsImluZGV4LWFjdGlvbnMtdGl0bGUiOiJpbmRleEFjdGlvbnNCbG9ja19faW5kZXgtYWN0aW9ucy10aXRsZV9fXzExeG5nIiwiaW5kZXgtYWN0aW9uLWRlc2NyaXB0aW9uIjoiaW5kZXhBY3Rpb25zQmxvY2tfX2luZGV4LWFjdGlvbi1kZXNjcmlwdGlvbl9fXzN0UTYwIiwiaW5kZXgtYWN0aW9uLWNhcHRpb24iOiJpbmRleEFjdGlvbnNCbG9ja19faW5kZXgtYWN0aW9uLWNhcHRpb25fX18ydWk1dyJ9fSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL2dlbmVyYXRlSW5kZXhNb2RhbC9nZW5lcmF0ZUluZGV4TW9kYWwuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5HZW5lcmF0ZUluZGV4TW9kYWw9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLGs9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLFA9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLE49bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL2luZGV4LmpzIiksQj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9tb2RhbHMvZ2VuZXJhdGVJbmRleE1vZGFsL2dlbmVyYXRlSW5kZXhNb2RhbC5zY3NzIiksVT1yKEIpLEc9e0dlbmVyYXRlSW5kZXhNb2RhbDp7ZGlzcGxheU5hbWU6IkdlbmVyYXRlSW5kZXhNb2RhbCJ9fSx6PSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9nZW5lcmF0ZUluZGV4TW9kYWwvZ2VuZXJhdGVJbmRleE1vZGFsLmpzeCIsY29tcG9uZW50czpHLGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLFY9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL2dlbmVyYXRlSW5kZXhNb2RhbC9nZW5lcmF0ZUluZGV4TW9kYWwuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksVz1ELmRlZmF1bHQuYmluZChVLmRlZmF1bHQpLFk9KDAsdy5kZWZpbmVNZXNzYWdlcykoe2dlbmVyYXRlSW5kZXhIZWFkZXI6e2lkOiJHZW5lcmF0ZUluZGV4TW9kYWwuaGVhZGVyR2VuZXJhdGVJbmRleE1vZGFsIixkZWZhdWx0TWVzc2FnZToiR2VuZXJhdGUgaW5kZXgifSxjb250ZW50SGVhZGVyTWVzc2FnZTp7aWQ6IkdlbmVyYXRlSW5kZXhNb2RhbC5jb250ZW50SGVhZGVyTWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6IkFyZSB5b3Ugc3VyZSB0byBnZW5lcmF0ZSBpbmRleCBpbiB0aGUgRWxhc3RpY1NlYXJjaD8ifSxub3RlQmxvY2tUaXRsZTp7aWQ6IkdlbmVyYXRlSW5kZXhNb2RhbC5ub3RlQmxvY2tUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6Ik5vdGU6In0sbm90ZUJsb2NrVGV4dDp7aWQ6IkdlbmVyYXRlSW5kZXhNb2RhbC5ub3RlQmxvY2tUZXh0IixkZWZhdWx0TWVzc2FnZToiWW91IHdpbGwgcmVjZWl2ZSBhbiBlLW1haWwgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcy4ifSxnZW5lcmF0ZUJ1dHRvblRleHQ6e2lkOiJHZW5lcmF0ZUluZGV4TW9kYWwuZ2VuZXJhdGVCdXR0b25UZXh0IixkZWZhdWx0TWVzc2FnZToiR2VuZXJhdGUifSxnZW5lcmF0ZVN1Y2Nlc3NOb3RpZmljYXRpb246e2lkOiJHZW5lcmF0ZUluZGV4TW9kYWwuZ2VuZXJhdGVTdWNjZXNzTm90aWZpY2F0aW9uIixkZWZhdWx0TWVzc2FnZToiSW5kZXggZ2VuZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyJ9LGdlbmVyYXRlRXJyb3JOb3RpZmljYXRpb246e2lkOiJHZW5lcmF0ZUluZGV4TW9kYWwuZ2VuZXJhdGVFcnJvck5vdGlmaWNhdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkluZGV4IGdlbmVyYXRpb24gd2FzIGNhbmNlbGVkIn19KSxxPXQuR2VuZXJhdGVJbmRleE1vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geihWKHQsZSksZSl9fSgiR2VuZXJhdGVJbmRleE1vZGFsIikoKG89KDAsRi53aXRoTW9kYWwpKCJnZW5lcmF0ZUluZGV4TW9kYWwiKSxzPSgwLHguY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RJZDooMCxOLnByb2plY3RJZFNlbGVjdG9yKShlKX19LHtmZXRjaFByb2plY3RBY3Rpb246UC5mZXRjaFByb2plY3RBY3Rpb24sc2hvd05vdGlmaWNhdGlvbjpILnNob3dOb3RpZmljYXRpb259KSxvKGk9cyhpPSgwLHcuaW5qZWN0SW50bCkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNsaWNrR2VuZXJhdGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQ2xpY2tHZW5lcmF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGguZGVmYXVsdCkocixvKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJfX29uQ2xpY2tHZW5lcmF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0dlbmVyYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrR2VuZXJhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tHZW5lcmF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0dlbmVyYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrR2VuZXJhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tHZW5lcmF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzOygwLGsuZmV0Y2gpKE0uVVJMUy5wcm9qZWN0SW5kZXgodGhpcy5wcm9wcy5wcm9qZWN0SWQpLHttZXRob2Q6InB1dCJ9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOnQucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFkuZ2VuZXJhdGVTdWNjZXNzTm90aWZpY2F0aW9uKSx0eXBlOkguTk9USUZJQ0FUSU9OX1RZUEVTLlNVQ0NFU1N9KSx0LnByb3BzLmZldGNoUHJvamVjdEFjdGlvbih0LnByb3BzLnByb2plY3RJZCl9KS5jYXRjaChmdW5jdGlvbigpe3QucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLmdlbmVyYXRlRXJyb3JOb3RpZmljYXRpb24pLHR5cGU6SC5OT1RJRklDQVRJT05fVFlQRVMuRVJST1J9KX0pLGUoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT17dGV4dDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLmdlbmVyYXRlQnV0dG9uVGV4dCksb25DbGljazp0aGlzLm9uQ2xpY2tHZW5lcmF0ZX0sdD17dGV4dDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShJLkNPTU1PTl9MT0NBTEVfS0VZUy5DQU5DRUwpfTtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5Nb2RhbExheW91dCx7dGl0bGU6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoWS5nZW5lcmF0ZUluZGV4SGVhZGVyKSxva0J1dHRvbjplLGNhbmNlbEJ1dHRvbjp0fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZTpXKCJtb2RhbC1jb250ZW50LWhlYWRlciIpfSx0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLmNvbnRlbnRIZWFkZXJNZXNzYWdlKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpXKCJub3RlLWJsb2NrIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOlcoIm5vdGUtdGl0bGUiKX0sdGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoWS5ub3RlQmxvY2tUaXRsZSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOlcoIm5vdGUtdGV4dCIpfSx0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShZLm5vdGVCbG9ja1RleHQpKSkpfX1dKSx0fShBLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6dy5pbnRsU2hhcGUscHJvamVjdElkOmouZGVmYXVsdC5zdHJpbmcsZmV0Y2hQcm9qZWN0QWN0aW9uOmouZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsc2hvd05vdGlmaWNhdGlvbjpqLmRlZmF1bHQuZnVuY30sYS5kZWZhdWx0UHJvcHM9e2ludGw6e30scHJvamVjdElkOiIiLGZldGNoUHJvamVjdEFjdGlvbjpmdW5jdGlvbigpe30sc2hvd05vdGlmaWNhdGlvbjpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiR2VuZXJhdGVJbmRleE1vZGFsIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9tb2RhbHMvZ2VuZXJhdGVJbmRleE1vZGFsL2dlbmVyYXRlSW5kZXhNb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL2dlbmVyYXRlSW5kZXhNb2RhbC9nZW5lcmF0ZUluZGV4TW9kYWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9nZW5lcmF0ZUluZGV4TW9kYWwvZ2VuZXJhdGVJbmRleE1vZGFsLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL2dlbmVyYXRlSW5kZXhNb2RhbC9nZW5lcmF0ZUluZGV4TW9kYWwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2RhbC1jb250ZW50LWhlYWRlciI6ImdlbmVyYXRlSW5kZXhNb2RhbF9fbW9kYWwtY29udGVudC1oZWFkZXJfX18zT3RXbiIsIm5vdGUtYmxvY2siOiJnZW5lcmF0ZUluZGV4TW9kYWxfX25vdGUtYmxvY2tfX18xRVJ1eiIsIm5vdGUtdGl0bGUiOiJnZW5lcmF0ZUluZGV4TW9kYWxfX25vdGUtdGl0bGVfX18zWVNlYyIsIm5vdGUtdGV4dCI6ImdlbmVyYXRlSW5kZXhNb2RhbF9fbm90ZS10ZXh0X19fMlNZWnYifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9nZW5lcmF0ZUluZGV4TW9kYWwvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9nZW5lcmF0ZUluZGV4TW9kYWwvZ2VuZXJhdGVJbmRleE1vZGFsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHZW5lcmF0ZUluZGV4TW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkdlbmVyYXRlSW5kZXhNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9yZW1vdmVJbmRleE1vZGFsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9tb2RhbHMvcmVtb3ZlSW5kZXhNb2RhbC9yZW1vdmVJbmRleE1vZGFsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZW1vdmVJbmRleE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5SZW1vdmVJbmRleE1vZGFsfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL3JlbW92ZUluZGV4TW9kYWwvcmVtb3ZlSW5kZXhNb2RhbC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlbW92ZUluZGV4TW9kYWw9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx3PXIoRCksTT1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLGs9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLFA9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9tb2RhbHMvcmVtb3ZlSW5kZXhNb2RhbC9yZW1vdmVJbmRleE1vZGFsLnNjc3MiKSxCPXIoRiksVT17UmVtb3ZlSW5kZXhNb2RhbDp7ZGlzcGxheU5hbWU6IlJlbW92ZUluZGV4TW9kYWwifX0sRz0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9tb2RhbHMvcmVtb3ZlSW5kZXhNb2RhbC9yZW1vdmVJbmRleE1vZGFsLmpzeCIsY29tcG9uZW50czpVLGxvY2FsczpbZV0saW1wb3J0czpbQy5kZWZhdWx0XX0pLHo9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL3JlbW92ZUluZGV4TW9kYWwvcmVtb3ZlSW5kZXhNb2RhbC5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxWPXcuZGVmYXVsdC5iaW5kKEIuZGVmYXVsdCksVz0oMCx4LmRlZmluZU1lc3NhZ2VzKSh7cmVtb3ZlSW5kZXhIZWFkZXI6e2lkOiJSZW1vdmVJbmRleE1vZGFsLmhlYWRlclJlbW92ZUluZGV4TW9kYWwiLGRlZmF1bHRNZXNzYWdlOiJSZW1vdmUgaW5kZXgifSxjb250ZW50SGVhZGVyTWVzc2FnZTp7aWQ6IlJlbW92ZUluZGV4TW9kYWwuY29udGVudEhlYWRlck1lc3NhZ2UiLGRlZmF1bHRNZXNzYWdlOiJBcmUgeW91IHN1cmUgdG8gcmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIEVsYXN0aWNTZWFyY2g/In0scmVtb3ZlQnV0dG9uVGV4dDp7aWQ6IlJlbW92ZUluZGV4TW9kYWwucmVtb3ZlQnV0dG9uVGV4dCIsZGVmYXVsdE1lc3NhZ2U6IlJlbW92ZSJ9LHJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb246e2lkOiJSZW1vdmVJbmRleE1vZGFsLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24iLGRlZmF1bHRNZXNzYWdlOiJJbmRleCB3YXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHkifSxyZW1vdmVFcnJvck5vdGlmaWNhdGlvbjp7aWQ6IlJlbW92ZUluZGV4TW9kYWwucmVtb3ZlRXJyb3JOb3RpZmljYXRpb24iLGRlZmF1bHRNZXNzYWdlOiJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiJ9fSksWT10LlJlbW92ZUluZGV4TW9kYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKHoodCxlKSxlKX19KCJSZW1vdmVJbmRleE1vZGFsIikoKG89KDAsSC53aXRoTW9kYWwpKCJyZW1vdmVJbmRleE1vZGFsIikscz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsTi5wcm9qZWN0SWRTZWxlY3RvcikoZSl9fSx7c2hvd05vdGlmaWNhdGlvbjpQLnNob3dOb3RpZmljYXRpb259KSxvKGk9cyhpPSgwLHguaW5qZWN0SW50bCkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkNsaWNrUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkNsaWNrUmVtb3ZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1JlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzOygwLGsuZmV0Y2gpKE0uVVJMUy5wcm9qZWN0SW5kZXgodGhpcy5wcm9wcy5wcm9qZWN0SWQpLHttZXRob2Q6ImRlbGV0ZSJ9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOnQucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFcucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbiksdHlwZTpQLk5PVElGSUNBVElPTl9UWVBFUy5TVUNDRVNTfSl9KS5jYXRjaChmdW5jdGlvbigpe3QucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShXLnJlbW92ZUVycm9yTm90aWZpY2F0aW9uKSx0eXBlOlAuTk9USUZJQ0FUSU9OX1RZUEVTLkVSUk9SfSl9KSxlKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e3RleHQ6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoVy5yZW1vdmVCdXR0b25UZXh0KSxkYW5nZXI6ITAsb25DbGljazp0aGlzLm9uQ2xpY2tSZW1vdmV9LHQ9e3RleHQ6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoSS5DT01NT05fTE9DQUxFX0tFWVMuQ0FOQ0VMKX07cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguTW9kYWxMYXlvdXQse3RpdGxlOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFcucmVtb3ZlSW5kZXhIZWFkZXIpLG9rQnV0dG9uOmUsY2FuY2VsQnV0dG9uOnR9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOlYoIm1vZGFsLWNvbnRlbnQtaGVhZGVyIil9LHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFcuY29udGVudEhlYWRlck1lc3NhZ2UpKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17aW50bDp4LmludGxTaGFwZSxwcm9qZWN0SWQ6ai5kZWZhdWx0LnN0cmluZyxzaG93Tm90aWZpY2F0aW9uOmouZGVmYXVsdC5mdW5jfSxhLmRlZmF1bHRQcm9wcz17aW50bDp7fSxwcm9qZWN0SWQ6IiIsc2hvd05vdGlmaWNhdGlvbjpmdW5jdGlvbigpe319LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiUmVtb3ZlSW5kZXhNb2RhbCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL3JlbW92ZUluZGV4TW9kYWwvcmVtb3ZlSW5kZXhNb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL3JlbW92ZUluZGV4TW9kYWwvcmVtb3ZlSW5kZXhNb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9hdXRvQW5hbHlzaXNUYWIvbW9kYWxzL3JlbW92ZUluZGV4TW9kYWwvcmVtb3ZlSW5kZXhNb2RhbC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvYXV0b0FuYWx5c2lzVGFiL21vZGFscy9yZW1vdmVJbmRleE1vZGFsL3JlbW92ZUluZGV4TW9kYWwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJtb2RhbC1jb250ZW50LWhlYWRlciI6InJlbW92ZUluZGV4TW9kYWxfX21vZGFsLWNvbnRlbnQtaGVhZGVyX19fM1N0TDEifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZGVtb0RhdGFUYWIvZGVtb0RhdGFUYWIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZW1vRGF0YVRhYj12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxrPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxQPXIoSSksTj1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksRj1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29udHJvbGxlcnMvbm90aWZpY2F0aW9uL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLEc9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2JpZ0J1dHRvbi9pbmRleC5qcyIpLHo9bigiLi9zcmMvY29tcG9uZW50cy9wcmVsb2FkZXJzL3NwaW5uaW5nUHJlbG9hZGVyL2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21tb24vaW1nL2Vycm9yLWlubGluZS5zdmciKSxXPXIoViksWT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2RlbW9EYXRhVGFiLnNjc3MiKSxxPXIoWSksSz17RGVtb0RhdGFUYWI6e2Rpc3BsYXlOYW1lOiJEZW1vRGF0YVRhYiJ9fSxYPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZGVtb0RhdGFUYWIvZGVtb0RhdGFUYWIuanN4Iixjb21wb25lbnRzOkssbG9jYWxzOltlXSxpbXBvcnRzOltDLmRlZmF1bHRdfSksJD0oMCxULmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2RlbW9EYXRhVGFiLmpzeCIsY29tcG9uZW50czpLLGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFE9UC5kZWZhdWx0LmJpbmQocS5kZWZhdWx0KSxKPSgwLE0uZGVmaW5lTWVzc2FnZXMpKHttb2JpbGVIaW50OntpZDoiRGVtb0RhdGFUYWIubW9iaWxlSGludCIsZGVmYXVsdE1lc3NhZ2U6IllvdSBjYW4gZ2VuZXJhdGUgZGF0YSBvbmx5IG9uIGRlc2t0b3Agdmlldy4ifSxkZXNjcmlwdGlvbkhlYWRlcjp7aWQ6IkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uSGVhZGVyIixkZWZhdWx0TWVzc2FnZToiVGhlIHN5c3RlbSB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZGVtbyBkYXRhOiJ9LGRlc2NyaXB0aW9uTGlzdEZpcnN0SXRlbTp7aWQ6IkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uTGlzdEZpcnN0SXRlbSIsZGVmYXVsdE1lc3NhZ2U6IjEwIGxhdW5jaGVzIn0sZGVzY3JpcHRpb25MaXN0U2VjSXRlbTp7aWQ6IkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uTGlzdFNlY0l0ZW0iLGRlZmF1bHRNZXNzYWdlOiIxIGRhc2hib2FyZCB3aXRoIDkgd2lkZ2V0cyJ9LGRlc2NyaXB0aW9uTGlzdFRoaXJkSXRlbTp7aWQ6IkRlbW9EYXRhVGFiLmRlc2NyaXB0aW9uTGlzdFRoaXJkSXRlbSIsZGVmYXVsdE1lc3NhZ2U6IjEgZmlsdGVyIn0sZ2VuZXJhdGVCdXR0b25UaXRsZTp7aWQ6IkRlbW9EYXRhVGFiRm9ybS5nZW5lcmF0ZUJ1dHRvblRpdGxlIixkZWZhdWx0TWVzc2FnZToiR2VuZXJhdGUgZGVtbyBkYXRhIn0scHJlbG9hZGVySW5mbzp7aWQ6IkRlbW9EYXRhVGFiRm9ybS5wcmVsb2FkZXJJbmZvIixkZWZhdWx0TWVzc2FnZToiRGF0YSBnZW5lcmF0aW9uIGhhcyBzdGFydGVkLiBUaGUgcHJvY2VzcyBjYW4gdGFrZSBzZXZlcmFsIG1pbnV0ZXMsIHBsZWFzZSB3YWl0LiJ9LGdlbmVyYXRlRGVtb0RhdGFTdWNjZXNzOntpZDoiU3VjY2Vzc01lc3NhZ2VzLmdlbmVyYXRlRGVtb0RhdGFTdWNjZXNzIixkZWZhdWx0TWVzc2FnZToiRGVtbyBkYXRhIGhhcyBiZWVuIGdlbmVyYXRlZCJ9LHdhcm5pbmdUZXh0OntpZDoiRGVtb0RhdGFUYWIud2FybmluZ1RleHQiLGRlZmF1bHRNZXNzYWdlOiJXYXJuaW5nISJ9LHdhcm5pbmdJbmZvOntpZDoiRGVtb0RhdGFUYWIud2FybmluZ0luZm8iLGRlZmF1bHRNZXNzYWdlOiJZb3Ugd2lsbCBoYXZlIHRvIHJlbW92ZSB0aGUgZGVtbyBkYXRhIG1hbnVhbGx5LiJ9fSksWj10LkRlbW9EYXRhVGFiPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gWCgkKHQsZSksZSl9fSgiRGVtb0RhdGFUYWIiKSgobz0oMCxrLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsRi5wcm9qZWN0SWRTZWxlY3RvcikoZSl9fSx7c2hvd05vdGlmaWNhdGlvbjpCLnNob3dOb3RpZmljYXRpb259KSxzPSgwLGouZGVmYXVsdCkoKSxvKGk9KDAsTS5pbmplY3RJbnRsKShpPXMoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17aXNMb2FkaW5nOiExfSxyLm9uR2VuZXJhdGVEZW1vRGF0YT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25HZW5lcmF0ZURlbW9EYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fb25HZW5lcmF0ZURlbW9EYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkdlbmVyYXRlRGVtb0RhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uR2VuZXJhdGVEZW1vRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25HZW5lcmF0ZURlbW9EYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkdlbmVyYXRlRGVtb0RhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uR2VuZXJhdGVEZW1vRGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25HZW5lcmF0ZURlbW9EYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwscj10LnByb2plY3RJZCxvPXQudHJhY2tpbmc7dGhpcy5zZXRTdGF0ZSh7aXNMb2FkaW5nOiEwfSksby50cmFja0V2ZW50KFUuU0VUVElOR1NfUEFHRV9FVkVOVFMuR0VORVJBVEVfREFUQV9CVE4pLCgwLE4uZmV0Y2gpKEguVVJMUy5nZW5lcmF0ZURlbW9EYXRhKHIpLHttZXRob2Q6IlBPU1QiLGRhdGE6e319KS50aGVuKGZ1bmN0aW9uKCl7ZS5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOm4uZm9ybWF0TWVzc2FnZShKLmdlbmVyYXRlRGVtb0RhdGFTdWNjZXNzKSx0eXBlOkIuTk9USUZJQ0FUSU9OX1RZUEVTLlNVQ0NFU1N9KSxlLnNldFN0YXRlKHtpc0xvYWRpbmc6ITF9KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe2UucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZUlkOiJmYWlsdXJlRGVmYXVsdCIsdHlwZTpCLk5PVElGSUNBVElPTl9UWVBFUy5FUlJPUix2YWx1ZXM6e2Vycm9yOnQubWVzc2FnZX19KSxlLnNldFN0YXRlKHtpc0xvYWRpbmc6ITF9KX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW50bDtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpRKCJkZW1vLWRhdGEtdGFiIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlEoIm1vYmlsZS1oaW50Iil9LGUuZm9ybWF0TWVzc2FnZShKLm1vYmlsZUhpbnQpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDUiLHtjbGFzc05hbWU6USgiZGVzY3JpcHRpb24taGVhZGVyIil9LGUuZm9ybWF0TWVzc2FnZShKLmRlc2NyaXB0aW9uSGVhZGVyKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOlEoImRlc2NyaXB0aW9uLWxpc3QiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxpIixudWxsLGUuZm9ybWF0TWVzc2FnZShKLmRlc2NyaXB0aW9uTGlzdEZpcnN0SXRlbSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJsaSIsbnVsbCxlLmZvcm1hdE1lc3NhZ2UoSi5kZXNjcmlwdGlvbkxpc3RTZWNJdGVtKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImxpIixudWxsLGUuZm9ybWF0TWVzc2FnZShKLmRlc2NyaXB0aW9uTGlzdFRoaXJkSXRlbSkpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLkJpZ0J1dHRvbix7Y2xhc3NOYW1lOlEoImdlbmVyYXRlLWJ1dHRvbiIpLG1vYmlsZURpc2FibGVkOiEwLG9uQ2xpY2s6dGhpcy5vbkdlbmVyYXRlRGVtb0RhdGEsZGlzYWJsZWQ6dGhpcy5zdGF0ZS5pc0xvYWRpbmd9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlEoImdlbmVyYXRlLWJ1dHRvbi10aXRsZSIpfSxlLmZvcm1hdE1lc3NhZ2UoSi5nZW5lcmF0ZUJ1dHRvblRpdGxlKSkpLHRoaXMuc3RhdGUuaXNMb2FkaW5nJiZDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoInByZWxvYWRlci1ibG9jayIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoInByZWxvYWRlci1pY29uIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHouU3Bpbm5pbmdQcmVsb2FkZXIsbnVsbCkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6USgicHJlbG9hZGVyLWluZm8iKX0sZS5mb3JtYXRNZXNzYWdlKEoucHJlbG9hZGVySW5mbykpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoIndhcm5pbmctYmxvY2siKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImkiLHtjbGFzc05hbWU6USgid2FybmluZy1pY29uIil9LCgwLHcuZGVmYXVsdCkoVy5kZWZhdWx0KSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6USgid2FybmluZy10ZXh0Iil9LGUuZm9ybWF0TWVzc2FnZShKLndhcm5pbmdUZXh0KSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6USgid2FybmluZy1pbmZvIil9LGUuZm9ybWF0TWVzc2FnZShKLndhcm5pbmdJbmZvKSkpKX19XSksdH0oQS5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtpbnRsOk0uaW50bFNoYXBlLmlzUmVxdWlyZWQscHJvamVjdElkOkwuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxzaG93Tm90aWZpY2F0aW9uOkwuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsdHJhY2tpbmc6TC5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OkwuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTpMLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGk9bCkpfHxpKXx8aSl8fGkpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWiwiRGVtb0RhdGFUYWIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZGVtb0RhdGFUYWIvZGVtb0RhdGFUYWIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZGVtb0RhdGFUYWIvZGVtb0RhdGFUYWIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZGVtb0RhdGFUYWIvZGVtb0RhdGFUYWIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2RlbW9EYXRhVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZGVtby1kYXRhLXRhYiI6ImRlbW9EYXRhVGFiX19kZW1vLWRhdGEtdGFiX19fMzJQZlUiLCJkZXNjcmlwdGlvbi1oZWFkZXIiOiJkZW1vRGF0YVRhYl9fZGVzY3JpcHRpb24taGVhZGVyX19fMXlvaWwiLCJtb2JpbGUtaGludCI6ImRlbW9EYXRhVGFiX19tb2JpbGUtaGludF9fX1RTT3N0IiwiZGVzY3JpcHRpb24tbGlzdCI6ImRlbW9EYXRhVGFiX19kZXNjcmlwdGlvbi1saXN0X19fMXlLR2QiLCJ3YXJuaW5nLWJsb2NrIjoiZGVtb0RhdGFUYWJfX3dhcm5pbmctYmxvY2tfX18zZ2ZVQyIsIndhcm5pbmctaWNvbiI6ImRlbW9EYXRhVGFiX193YXJuaW5nLWljb25fX190Q3ZMdCIsIndhcm5pbmctdGV4dCI6ImRlbW9EYXRhVGFiX193YXJuaW5nLXRleHRfX18yZWdCbSIsIndhcm5pbmctaW5mbyI6ImRlbW9EYXRhVGFiX193YXJuaW5nLWluZm9fX18yaGZhWiIsImdlbmVyYXRlLWJ1dHRvbiI6ImRlbW9EYXRhVGFiX19nZW5lcmF0ZS1idXR0b25fX18xMjhIeiIsImdlbmVyYXRlLWJ1dHRvbi10aXRsZSI6ImRlbW9EYXRhVGFiX19nZW5lcmF0ZS1idXR0b24tdGl0bGVfX18ya3laNCIsInByZWxvYWRlci1ibG9jayI6ImRlbW9EYXRhVGFiX19wcmVsb2FkZXItYmxvY2tfX18xbXhSNSIsInByZWxvYWRlci1pY29uIjoiZGVtb0RhdGFUYWJfX3ByZWxvYWRlci1pY29uX19fMjQzOUciLCJwcmVsb2FkZXItaW5mbyI6ImRlbW9EYXRhVGFiX19wcmVsb2FkZXItaW5mb19fX183QTVhIn19LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2RlbW9EYXRhVGFiLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZW1vRGF0YVRhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRGVtb0RhdGFUYWJ9fSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2dlbmVyYWxUYWIvZ2VuZXJhbFRhYi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdlbmVyYWxUYWI9dm9pZCAwO3ZhciBvLHMsaSxhLGwsdSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTT1yKHcpLGs9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksST1yKGspLFA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxOPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksSD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLEI9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21tb24vdXRpbHMvcGVybWlzc2lvbnMvaW5kZXguanMiKSxHPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0L2luZGV4LmpzIiksej1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvYmlnQnV0dG9uL2luZGV4LmpzIiksVz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLFk9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLHE9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSxLPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2Zvcm1GaWVsZC9pbmRleC5qcyIpLFg9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxRPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2FwcEluZm8vaW5kZXguanMiKSxKPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLFo9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2dlbmVyYWxUYWIuc2NzcyIpLGVlPXIoWiksdGU9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2dlbmVyYWxUYWJNZXNzYWdlcy5qcyIpLG5lPXtHZW5lcmFsVGFiOntkaXNwbGF5TmFtZToiR2VuZXJhbFRhYiJ9fSxyZT0oMCx4LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2dlbmVyYWxUYWIvZ2VuZXJhbFRhYi5qc3giLGNvbXBvbmVudHM6bmUsbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksb2U9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2dlbmVyYWxUYWIuanN4Iixjb21wb25lbnRzOm5lLGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLHNlPUkuZGVmYXVsdC5iaW5kKGVlLmRlZmF1bHQpLGllPXQuR2VuZXJhbFRhYj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHJlKG9lKHQsZSksZSl9fSgiR2VuZXJhbFRhYiIpKChvPSgwLEgucmVkdXhGb3JtKSh7Zm9ybToiZ2VuZXJhbEZvcm0ifSkscz0oMCxQLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsJC5wcm9qZWN0SWRTZWxlY3RvcikoZSksam9iQ29uZmlnOigwLFkuam9iQXR0cmlidXRlc1NlbGVjdG9yKShlKSxpc0VwYW1JbnN0YW5jZTohISgwLFEuYXV0aEV4dGVuc2lvbnNTZWxlY3RvcikoZSkuZXBhbSxhY2NvdW50Um9sZTooMCxYLnVzZXJBY2NvdW50Um9sZVNlbGVjdG9yKShlKSx1c2VyUm9sZTooMCxYLmFjdGl2ZVByb2plY3RSb2xlU2VsZWN0b3IpKGUpfX0se3Nob3dOb3RpZmljYXRpb246Si5zaG93Tm90aWZpY2F0aW9uLHVwZGF0ZUNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzQWN0aW9uOlkudXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb259KSxpPSgwLEQuZGVmYXVsdCkoKSxvKGE9cyhhPSgwLE4uaW5qZWN0SW50bCkoYT1pKCh1PWw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLG0uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsRS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25Gb3JtU3VibWl0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZmlsdGVyT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZmlsdGVyT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pbnRlcnJ1cHRKb2JUaW1lPVt7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMuaG91cjEpLHZhbHVlOiIxIGhvdXIifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMuaG91cjMpLHZhbHVlOiIzIGhvdXJzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmhvdXI2KSx2YWx1ZToiNiBob3VycyJ9LHtsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5ob3VyMTIpLHZhbHVlOiIxMiBob3VycyJ9LHtsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5kYXkxKSx2YWx1ZToiMSBkYXkifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMud2VlazEpLHZhbHVlOiIxIHdlZWsifV0sci5rZWVwTG9ncz1be2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLndlZWsyKSx2YWx1ZToiMiB3ZWVrcyJ9LHtsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5tb250aDEpLHZhbHVlOiIxIG1vbnRoIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLm1vbnRoMyksdmFsdWU6IjMgbW9udGhzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLm1vbnRoNiksdmFsdWU6IjYgbW9udGhzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmZvcmV2ZXIpLHZhbHVlOiJmb3JldmVyIn1dLHIua2VlcFNjcmVlbnNob3RzPVt7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMud2VlazEpLHZhbHVlOiIxIHdlZWsifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMud2VlazIpLHZhbHVlOiIyIHdlZWtzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLndlZWszKSx2YWx1ZToiMyB3ZWVrcyJ9LHtsYWJlbDpyLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5tb250aDEpLHZhbHVlOiIxIG1vbnRoIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLm1vbnRoMyksdmFsdWU6IjMgbW9udGhzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmZvcmV2ZXIpLHZhbHVlOiJmb3JldmVyIn1dLHIua2VlcExhdW5jaGVzPVt7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMud2VlazIpLHZhbHVlOiIyIHdlZWtzIn0se2xhYmVsOnIucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLm1vbnRoMSksdmFsdWU6IjEgbW9udGgifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMubW9udGgzKSx2YWx1ZToiMyBtb250aHMifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMubW9udGg2KSx2YWx1ZToiNiBtb250aHMifSx7bGFiZWw6ci5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMuZm9yZXZlciksdmFsdWU6ImZvcmV2ZXIifV0sbz1uLCgwLEUuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx2LmRlZmF1bHQpKHQsZSksKDAsZy5kZWZhdWx0KSh0LFt7a2V5OiJfX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5qb2JDb25maWcsdD1lLmludGVycnVwdEpvYlRpbWUsbj1lLmtlZXBMb2dzLHI9ZS5rZWVwU2NyZWVuc2hvdHMsbz1lLmtlZXBMYXVuY2hlczt0aGlzLnByb3BzLmluaXRpYWxpemUoe2ludGVycnVwdEpvYlRpbWU6dC50b0xvd2VyQ2FzZSgpLGtlZXBMYXVuY2hlczpvLnRvTG93ZXJDYXNlKCksa2VlcExvZ3M6bi50b0xvd2VyQ2FzZSgpLGtlZXBTY3JlZW5zaG90czpyLnRvTG93ZXJDYXNlKCl9KX19LHtrZXk6Il9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRm9ybVN1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Gb3JtU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkZvcm1TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQocS5TRVRUSU5HU19QQUdFX0VWRU5UUy5HRU5FUkFMX1NVQk1JVCk7dmFyIG49KDAsWS5ub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFByZWZpeCkoZSxZLkpPQl9BVFRSSUJVVEVfUFJFRklYKSxyPXtjb25maWd1cmF0aW9uOnthdHRyaWJ1dGVzOigwLGQuZGVmYXVsdCkoe30sbil9fTsoMCxCLmZldGNoKShGLlVSTFMucHJvamVjdCh0aGlzLnByb3BzLnByb2plY3RJZCkse21ldGhvZDoicHV0IixkYXRhOnJ9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOnQucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLnVwZGF0ZVN1Y2Nlc3NOb3RpZmljYXRpb24pLHR5cGU6Si5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pLHQucHJvcHMudXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb24ocil9KS5jYXRjaChmdW5jdGlvbigpe3QucHJvcHMuc2hvd05vdGlmaWNhdGlvbih7bWVzc2FnZTp0LnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy51cGRhdGVFcnJvck5vdGlmaWNhdGlvbiksdHlwZTpKLk5PVElGSUNBVElPTl9UWVBFUy5FUlJPUn0pfSl9fSx7a2V5OiJfX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZpbHRlck9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMuaXNFcGFtSW5zdGFuY2U/ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuImZvcmV2ZXIiIT09ZS52YWx1ZX0pOmV9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bCxuPWUuYWNjb3VudFJvbGUscj1lLnVzZXJSb2xlLG89ZS50cmFja2luZztyZXR1cm4gUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpzZSgiZ2VuZXJhbC10YWIiKX0sUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImZvcm0iLHtvblN1Ym1pdDp0aGlzLnByb3BzLmhhbmRsZVN1Ym1pdCh0aGlzLm9uRm9ybVN1Ym1pdCl9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEsuRm9ybUZpZWxkLHtmaWVsZFdyYXBwZXJDbGFzc05hbWU6c2UoImZpZWxkLWlucHV0IiksbGFiZWw6dC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLnByb2plY3ROYW1lTGFiZWwpLHdpdGhvdXRQcm92aWRlcjohMH0sUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5JbnB1dCx7ZGlzYWJsZWQ6ITAsdmFsdWU6dGhpcy5wcm9wcy5wcm9qZWN0SWR9KSksUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSy5Gb3JtRmllbGQse25hbWU6ImludGVycnVwdEpvYlRpbWUiLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpzZSgiZmllbGQtaW5wdXQiKSxsYWJlbDp0LmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMuaW50ZXJydXB0ZWRKb2IpLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG8udHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLklOQUNUSVZJVFlfVElNRU9VVF9HRU5FUkFMKX0sY3VzdG9tQmxvY2s6e25vZGU6Ui5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmludGVycnVwdGVkSm9iRGVzY3JpcHRpb24pKX0sZGlzYWJsZWQ6ISgwLFUuY2FuVXBkYXRlU2V0dGluZ3MpKG4scil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHouSW5wdXREcm9wZG93bix7b3B0aW9uczp0aGlzLmludGVycnVwdEpvYlRpbWUsbW9iaWxlRGlzYWJsZWQ6ITB9KSksUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSy5Gb3JtRmllbGQse25hbWU6ImtlZXBMYXVuY2hlcyIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnNlKCJmaWVsZC1pbnB1dCIpLGxhYmVsOnQuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5rZWVwTGF1bmNoZXMpLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG8udHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLklOQUNUSVZJVFlfVElNRU9VVF9HRU5FUkFMKX0sY3VzdG9tQmxvY2s6e25vZGU6Ui5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmtlZXBMYXVuY2hlc0Rlc2NyaXB0aW9uKSl9LGRpc2FibGVkOiEoMCxVLmNhblVwZGF0ZVNldHRpbmdzKShuLHIpfSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LklucHV0RHJvcGRvd24se29wdGlvbnM6dGhpcy5maWx0ZXJPcHRpb25zKHRoaXMua2VlcExhdW5jaGVzKSxtb2JpbGVEaXNhYmxlZDohMH0pKSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChLLkZvcm1GaWVsZCx7bmFtZToia2VlcExvZ3MiLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpzZSgiZmllbGQtaW5wdXQiKSxsYWJlbDp0LmZvcm1hdE1lc3NhZ2UodGUuTWVzc2FnZXMua2VlcExvZ3MpLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG8udHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLktFRVBfTE9HU19HRU5FUkFMKX0sY3VzdG9tQmxvY2s6e25vZGU6Ui5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKHRlLk1lc3NhZ2VzLmtlZXBMb2dzRGVzY3JpcHRpb24pKX0sZGlzYWJsZWQ6ISgwLFUuY2FuVXBkYXRlU2V0dGluZ3MpKG4scil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHouSW5wdXREcm9wZG93bix7b3B0aW9uczp0aGlzLmZpbHRlck9wdGlvbnModGhpcy5rZWVwTG9ncyksbW9iaWxlRGlzYWJsZWQ6ITB9KSksUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSy5Gb3JtRmllbGQse25hbWU6ImtlZXBTY3JlZW5zaG90cyIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOnNlKCJmaWVsZC1pbnB1dCIpLGxhYmVsOnQuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5rZWVwU2NyZWVuc2hvdHMpLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG8udHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLktFRVBfU0NSRUVOU0hPVFNfR0VORVJBTCl9LGN1c3RvbUJsb2NrOntub2RlOlIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQuZm9ybWF0TWVzc2FnZSh0ZS5NZXNzYWdlcy5rZWVwU2NyZWVuc2hvdHNEZXNjcmlwdGlvbikpfSxkaXNhYmxlZDohKDAsVS5jYW5VcGRhdGVTZXR0aW5ncykobixyKX0sUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoei5JbnB1dERyb3Bkb3duLHtvcHRpb25zOnRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLmtlZXBTY3JlZW5zaG90cyksbW9iaWxlRGlzYWJsZWQ6ITB9KSksUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpzZSgiYnV0dG9uLWNvbnRhaW5lciIpfSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnNlKCJzdWJtaXQtYnV0dG9uIil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFYuQmlnQnV0dG9uLHtjb2xvcjoiYm9vZ2VyIix0eXBlOiJzdWJtaXQiLGRpc2FibGVkOiEoMCxVLmNhblVwZGF0ZVNldHRpbmdzKShuLHIpfSx0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShXLkNPTU1PTl9MT0NBTEVfS0VZUy5TVUJNSVQpKSkpKSl9fV0pLHR9KFMuQ29tcG9uZW50KSxsLnByb3BUeXBlcz17aW50bDpOLmludGxTaGFwZS5pc1JlcXVpcmVkLGhhbmRsZVN1Ym1pdDpNLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHByb2plY3RJZDpNLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsam9iQ29uZmlnOk0uZGVmYXVsdC5zaGFwZSh7aW50ZXJydXB0Sm9iVGltZTpNLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsa2VlcExvZ3M6TS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGtlZXBTY3JlZW5zaG90czpNLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsa2VlcExhdW5jaGVzOk0uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0pLmlzUmVxdWlyZWQsaXNFcGFtSW5zdGFuY2U6TS5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxzaG93Tm90aWZpY2F0aW9uOk0uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsdXBkYXRlQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXNBY3Rpb246TS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbml0aWFsaXplOk0uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYWNjb3VudFJvbGU6TS5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHVzZXJSb2xlOk0uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx0cmFja2luZzpNLmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6TS5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOk0uZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sbC5kZWZhdWx0UHJvcHM9e3Byb2plY3RJZDoiIixmZXRjaFByb2plY3RBY3Rpb246ZnVuY3Rpb24oKXt9fSxhPXUpKXx8YSl8fGEpfHxhKXx8YSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihpZSwiR2VuZXJhbFRhYiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2dlbmVyYWxUYWIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoc2UsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2dlbmVyYWxUYWIvZ2VuZXJhbFRhYi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZ2VuZXJhbFRhYi9nZW5lcmFsVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZ2VuZXJhbC10YWIiOiJnZW5lcmFsVGFiX19nZW5lcmFsLXRhYl9fX185X3ptIiwiZmllbGQtaW5wdXQiOiJnZW5lcmFsVGFiX19maWVsZC1pbnB1dF9fXzMyUE1sIiwiYnV0dG9uLWNvbnRhaW5lciI6ImdlbmVyYWxUYWJfX2J1dHRvbi1jb250YWluZXJfX18yaS10XyIsInN1Ym1pdC1idXR0b24iOiJnZW5lcmFsVGFiX19zdWJtaXQtYnV0dG9uX19fMU5hdEwifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvZ2VuZXJhbFRhYi9nZW5lcmFsVGFiTWVzc2FnZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZXM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbz10Lk1lc3NhZ2VzPSgwLHIuZGVmaW5lTWVzc2FnZXMpKHtwcm9qZWN0TmFtZUxhYmVsOntpZDoiR2VuZXJhbFRhYi5wcm9qZWN0TmFtZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiTmFtZSJ9LGludGVycnVwdGVkSm9iOntpZDoiR2VuZXJhbFRhYi5pbnRlcnJ1cHRlZEpvYiIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaCBpbmFjdGl2aXR5IHRpbWVvdXQifSxpbnRlcnJ1cHRlZEpvYkRlc2NyaXB0aW9uOntpZDoiR2VuZXJhbFRhYi5pbnRlcnJ1cHRlZEpvYkRlc2NyaXB0aW9uIixkZWZhdWx0TWVzc2FnZToiU2NoZWR1bGUgdGltZSBmb3IgSm9iIHRvIGludGVycnVwdCBpbmFjdGl2ZSBsYXVuY2hlcyJ9LGtlZXBMb2dzOntpZDoiR2VuZXJhbFRhYi5rZWVwTG9ncyIsZGVmYXVsdE1lc3NhZ2U6IktlZXAgbG9ncyJ9LGtlZXBMYXVuY2hlczp7aWQ6IkdlbmVyYWxUYWIua2VlcExhdW5jaGVzIixkZWZhdWx0TWVzc2FnZToi4oCLS2VlcCBsYXVuY2hlcyJ9LGtlZXBMYXVuY2hlc0Rlc2NyaXB0aW9uOntpZDoiR2VuZXJhbFRhYi5rZWVwTGF1bmNoZXNEZXNjcmlwdGlvbiIsZGVmYXVsdE1lc3NhZ2U6IkhvdyBsb25nIHRvIGtlZXAgb2xkIGxhdW5jaGVzLiBBIGxhdW5jaCBhbmQgYWxsIGl0IGRlc2NlbmRhbnRzIChzdWl0ZXMsIHRlc3RzLCBzdGVwcywgbG9ncykgd2lsbCBiZSBkZWxldGVkLiBMYXVuY2ggd2lsbCBiZSBkZWxldGVkIGZyb20gZmlsdGVycyBhbmQgd2lkZ2V0cy4ifSxrZWVwTG9nc0Rlc2NyaXB0aW9uOntpZDoiR2VuZXJhbFRhYi5rZWVwTG9nc0Rlc2NyaXB0aW9uIixkZWZhdWx0TWVzc2FnZToiSG93IGxvbmcgdG8ga2VlcCBvbGQgbG9ncyBpbiBsYXVuY2hlcy4gUmVsYXRlZCBsYXVuY2hlcyBzdHJ1Y3R1cmUgd2lsbCBiZSBzYXZlZCwgaW4gb3JkZXIgdG8ga2VlcCBzdGF0aXN0aWNzIn0sa2VlcFNjcmVlbnNob3RzOntpZDoiR2VuZXJhbFRhYi5rZWVwU2NyZWVuc2hvdHMiLGRlZmF1bHRNZXNzYWdlOiJLZWVwIGF0dGFjaG1lbnRzIn0sa2VlcFNjcmVlbnNob3RzRGVzY3JpcHRpb246e2lkOiJHZW5lcmFsVGFiLmtlZXBTY3JlZW5zaG90c0Rlc2NyaXB0aW9uIixkZWZhdWx0TWVzc2FnZToiSG93IGxvbmcgdG8ga2VlcCBhdHRhY2htZW50cyBpbiBzeXN0ZW0ifSx1cGRhdGVTdWNjZXNzTm90aWZpY2F0aW9uOntpZDoiR2VuZXJhbFRhYi51cGRhdGVTdWNjZXNzTm90aWZpY2F0aW9uIixkZWZhdWx0TWVzc2FnZToiUHJvamVjdCBzZXR0aW5ncyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIn0sdXBkYXRlRXJyb3JOb3RpZmljYXRpb246e2lkOiJHZW5lcmFsVGFiLnVwZGF0ZUVycm9yTm90aWZpY2F0aW9uIixkZWZhdWx0TWVzc2FnZToiRmFpbGVkIHRvIHVwZGF0ZSBwcm9qZWN0IHNldHRpbmdzIn0saG91cjE6e2lkOiJHZW5lcmFsVGFiLmhvdXIxIixkZWZhdWx0TWVzc2FnZToiMSBob3VyIn0saG91cjM6e2lkOiJHZW5lcmFsVGFiLmhvdXIzIixkZWZhdWx0TWVzc2FnZToiMyBob3VycyJ9LGhvdXI2OntpZDoiR2VuZXJhbFRhYi5ob3VyNiIsZGVmYXVsdE1lc3NhZ2U6IjYgaG91cnMifSxob3VyMTI6e2lkOiJHZW5lcmFsVGFiLmhvdXIxMiIsZGVmYXVsdE1lc3NhZ2U6IjEyIGhvdXJzIn0sZGF5MTp7aWQ6IkdlbmVyYWxUYWIuZGF5MSIsZGVmYXVsdE1lc3NhZ2U6IjEgZGF5In0sd2VlazE6e2lkOiJHZW5lcmFsVGFiLndlZWsxIixkZWZhdWx0TWVzc2FnZToiMSB3ZWVrIn0sd2VlazI6e2lkOiJHZW5lcmFsVGFiLndlZWsyIixkZWZhdWx0TWVzc2FnZToiMiB3ZWVrcyJ9LHdlZWszOntpZDoiR2VuZXJhbFRhYi53ZWVrMyIsZGVmYXVsdE1lc3NhZ2U6IjMgd2Vla3MifSxtb250aDE6e2lkOiJHZW5lcmFsVGFiLm1vbnRoMSIsZGVmYXVsdE1lc3NhZ2U6IjEgbW9udGgifSxtb250aDM6e2lkOiJHZW5lcmFsVGFiLm1vbnRoMyIsZGVmYXVsdE1lc3NhZ2U6IjMgbW9udGhzIn0sbW9udGg2OntpZDoiR2VuZXJhbFRhYi5tb250aDYiLGRlZmF1bHRNZXNzYWdlOiI2IG1vbnRocyJ9LGZvcmV2ZXI6e2lkOiJHZW5lcmFsVGFiLmZvcmV2ZXIiLGRlZmF1bHRNZXNzYWdlOiJGb3JldmVyIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJNZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2dlbmVyYWxUYWJNZXNzYWdlcy5qcyIpfSgpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2dlbmVyYWxUYWIvZ2VuZXJhbFRhYi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiR2VuZXJhbFRhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuR2VuZXJhbFRhYn19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvc2V0dGluZ3NQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTZXR0aW5nc1BhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNldHRpbmdzUGFnZX19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNUYWIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkludGVncmF0aW9uc1RhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSW50ZWdyYXRpb25zVGFifX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnRlZ3JhdGlvbnNMaXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbnRlZ3JhdGlvbnNMaXN0fX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW50ZWdyYXRpb25zTGlzdD12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGs9cihNKSxJPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvcGx1Z2luc0dyb3VwVHlwZXMuanMiKSxQPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdEl0ZW0vaW5kZXguanMiKSxOPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdC5zY3NzIiksSD1yKE4pLEY9e0ludGVncmF0aW9uc0xpc3Q6e2Rpc3BsYXlOYW1lOiJJbnRlZ3JhdGlvbnNMaXN0In19LEI9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0LmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbZV0saW1wb3J0czpbUi5kZWZhdWx0XX0pLFU9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0LmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLEc9ay5kZWZhdWx0LmJpbmQoSC5kZWZhdWx0KSx6PSgwLHcuZGVmaW5lTWVzc2FnZXMpKChvPXt9LCgwLHYuZGVmYXVsdCkobyxJLkJUU19HUk9VUF9UWVBFLHtpZDoiSW50ZWdyYXRpb25zTGlzdC5idHMiLGRlZmF1bHRNZXNzYWdlOiJCdWcgVHJhY2tpbmcgU3lzdGVtcyJ9KSwoMCx2LmRlZmF1bHQpKG8sSS5OT1RJRklDQVRJT05fR1JPVVBfVFlQRSx7aWQ6IkludGVncmF0aW9uc0xpc3Qubm90aWZpY2F0aW9uIixkZWZhdWx0TWVzc2FnZToiTm90aWZpY2F0aW9ucyJ9KSxvKSksVj10LkludGVncmF0aW9uc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBCKFUodCxlKSxlKX19KCJJbnRlZ3JhdGlvbnNMaXN0IikoKDAsdy5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxwLmRlZmF1bHQpKHRoaXMsdCksKDAsZy5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bC5mb3JtYXRNZXNzYWdlLG49ZS5ncm91cGVkSW50ZWdyYXRpb25zO3JldHVybiBSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoImludGVncmF0aW9ucy1saXN0Iil9LCgwLHUuZGVmYXVsdCkobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoImludGVncmF0aW9ucy1ncm91cCIpfSxSLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoImludGVncmF0aW9ucy1ncm91cC1oZWFkZXIiKX0seltlXT90KHpbZV0pOmUsIiAoIituW2VdLmxlbmd0aCsiKSIpLFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RygiaW50ZWdyYXRpb25zLWdyb3VwLWl0ZW1zIil9LG5bZV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBSLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkludGVncmF0aW9uc0xpc3RJdGVtLHtpdGVtOmV9KX0pKSl9KSl9fV0pLHR9KFMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDp3LmludGxTaGFwZS5pc1JlcXVpcmVkLGdyb3VwZWRJbnRlZ3JhdGlvbnM6RC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIkludGVncmF0aW9uc0xpc3QiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2ludGVncmF0aW9uc0xpc3QuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2ludGVncmF0aW9uc0xpc3Quc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpbnRlZ3JhdGlvbnMtbGlzdCI6ImludGVncmF0aW9uc0xpc3RfX2ludGVncmF0aW9ucy1saXN0X19fYU9nd1ciLCJpbnRlZ3JhdGlvbnMtZ3JvdXAiOiJpbnRlZ3JhdGlvbnNMaXN0X19pbnRlZ3JhdGlvbnMtZ3JvdXBfX18xUk9QWiIsImludGVncmF0aW9ucy1ncm91cC1oZWFkZXIiOiJpbnRlZ3JhdGlvbnNMaXN0X19pbnRlZ3JhdGlvbnMtZ3JvdXAtaGVhZGVyX19fVzJPeEgiLCJpbnRlZ3JhdGlvbnMtZ3JvdXAtaXRlbXMiOiJpbnRlZ3JhdGlvbnNMaXN0X19pbnRlZ3JhdGlvbnMtZ3JvdXAtaXRlbXNfX18xbzV0SyJ9fSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0SXRlbS9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSU5URUdSQVRJT05TX0lNQUdFU19NQVA9dm9pZCAwO3ZhciBvLHM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksaT1yKHMpLGE9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9pbnRlZ3JhdGlvbnNOYW1lcy5qcyIpLGw9bigiLi9zcmMvY29tbW9uL2ltZy9wbHVnaW5zL2ppcmEuc3ZnIiksdT1yKGwpLGM9bigiLi9zcmMvY29tbW9uL2ltZy9wbHVnaW5zL3JhbGx5LnBuZyIpLGQ9cihjKSxfPW4oIi4vc3JjL2NvbW1vbi9pbWcvcGx1Z2lucy9lbWFpbC5zdmciKSxwPXIoXyksZj10LklOVEVHUkFUSU9OU19JTUFHRVNfTUFQPShvPXt9LCgwLGkuZGVmYXVsdCkobyxhLkpJUkEsdS5kZWZhdWx0KSwoMCxpLmRlZmF1bHQpKG8sYS5SQUxMWSxkLmRlZmF1bHQpLCgwLGkuZGVmYXVsdCkobyxhLkVNQUlMLHAuZGVmYXVsdCksbyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiSU5URUdSQVRJT05TX0lNQUdFU19NQVAiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdEl0ZW0vY29uc3RhbnRzLmpzIil9KCl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2ludGVncmF0aW9uc0xpc3RJdGVtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2ludGVncmF0aW9uc0xpc3RJdGVtL2ludGVncmF0aW9uc0xpc3RJdGVtLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnRlZ3JhdGlvbnNMaXN0SXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuSW50ZWdyYXRpb25zTGlzdEl0ZW19fSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2ludGVncmF0aW9uc0xpc3RJdGVtL2ludGVncmF0aW9uc0xpc3RJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSW50ZWdyYXRpb25zTGlzdEl0ZW09dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxTPXIoTyksUj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGo9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikseD1yKGopLEw9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0SXRlbS9jb25zdGFudHMuanMiKSxEPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdEl0ZW0vaW50ZWdyYXRpb25zTGlzdEl0ZW0uc2NzcyIpLHc9cihEKSxNPXtJbnRlZ3JhdGlvbnNMaXN0SXRlbTp7ZGlzcGxheU5hbWU6IkludGVncmF0aW9uc0xpc3RJdGVtIn19LGs9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0SXRlbS9pbnRlZ3JhdGlvbnNMaXN0SXRlbS5qc3giLGNvbXBvbmVudHM6TSxsb2NhbHM6W2VdLGltcG9ydHM6W1QuZGVmYXVsdF19KSxJPSgwLHkuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdEl0ZW0vaW50ZWdyYXRpb25zTGlzdEl0ZW0uanN4Iixjb21wb25lbnRzOk0sbG9jYWxzOltdLGltcG9ydHM6W1QuZGVmYXVsdCxiLmRlZmF1bHRdfSksUD14LmRlZmF1bHQuYmluZCh3LmRlZmF1bHQpLE49dC5JbnRlZ3JhdGlvbnNMaXN0SXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsoSSh0LGUpLGUpfX0oIkludGVncmF0aW9uc0xpc3RJdGVtIikoKDAsUi5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxjLmRlZmF1bHQpKHRoaXMsdCksKDAsZi5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxoLmRlZmF1bHQpKHQsZSksKDAsXy5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pdGVtO3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlAoImludGVncmF0aW9ucy1saXN0LWl0ZW0iKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse2NsYXNzTmFtZTpQKCJpbnRlZ3JhdGlvbi1pbWFnZSIpLHNyYzpMLklOVEVHUkFUSU9OU19JTUFHRVNfTUFQW2UuaW50ZWdyYXRpb25UeXBlLm5hbWVdLGFsdDplLmludGVncmF0aW9uVHlwZS5uYW1lfSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpQKCJpbnRlZ3JhdGlvbi1pbmZvLWJsb2NrIil9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOlAoImludGVncmF0aW9uLW5hbWUiKX0sZS5pbnRlZ3JhdGlvblR5cGUubmFtZSksVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6UCgicGx1Z2luLWF1dGhvciIpfSwiYnkgIitlLmludGVncmF0aW9uVHlwZS51cGxvYWRlZEJ5KSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6Ui5pbnRsU2hhcGUuaXNSZXF1aXJlZCxpdGVtOlMuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihOLCJJbnRlZ3JhdGlvbnNMaXN0SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0SXRlbS9pbnRlZ3JhdGlvbnNMaXN0SXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihQLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zTGlzdC9pbnRlZ3JhdGlvbnNMaXN0SXRlbS9pbnRlZ3JhdGlvbnNMaXN0SXRlbS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc0xpc3QvaW50ZWdyYXRpb25zTGlzdEl0ZW0vaW50ZWdyYXRpb25zTGlzdEl0ZW0uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpbnRlZ3JhdGlvbnMtbGlzdC1pdGVtIjoiaW50ZWdyYXRpb25zTGlzdEl0ZW1fX2ludGVncmF0aW9ucy1saXN0LWl0ZW1fX18yTHlfbyIsImludGVncmF0aW9uLWltYWdlIjoiaW50ZWdyYXRpb25zTGlzdEl0ZW1fX2ludGVncmF0aW9uLWltYWdlX19fMk5qRWUiLCJpbnRlZ3JhdGlvbi1pbmZvLWJsb2NrIjoiaW50ZWdyYXRpb25zTGlzdEl0ZW1fX2ludGVncmF0aW9uLWluZm8tYmxvY2tfX18yQnNpVyIsImludGVncmF0aW9uLW5hbWUiOiJpbnRlZ3JhdGlvbnNMaXN0SXRlbV9faW50ZWdyYXRpb24tbmFtZV9fXzZSMERaIiwicGx1Z2luLWF1dGhvciI6ImludGVncmF0aW9uc0xpc3RJdGVtX19wbHVnaW4tYXV0aG9yX19fOExVYWoifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc1RhYi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkludGVncmF0aW9uc1RhYj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEw9cih4KSxEPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksdz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksTT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNMaXN0L2luZGV4LmpzIiksaz1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNUYWIuc2NzcyIpLEk9cihrKSxQPXtJbnRlZ3JhdGlvbnNUYWI6e2Rpc3BsYXlOYW1lOiJJbnRlZ3JhdGlvbnNUYWIifX0sTj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNUYWIuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksSD0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbnRlZ3JhdGlvbnNUYWIuanN4Iixjb21wb25lbnRzOlAsbG9jYWxzOltdLGltcG9ydHM6W0EuZGVmYXVsdCxFLmRlZmF1bHRdfSksRj1MLmRlZmF1bHQuYmluZChJLmRlZmF1bHQpLEI9dC5JbnRlZ3JhdGlvbnNUYWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBOKEgodCxlKSxlKX19KCJJbnRlZ3JhdGlvbnNUYWIiKSgobz0oMCxqLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsRC5wcm9qZWN0SWRTZWxlY3RvcikoZSksZ3JvdXBlZEludGVncmF0aW9uczooMCx3Lmdyb3VwZWRJbnRlZ3JhdGlvbnNTZWxlY3RvcikoZSl9fSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGQuZGVmYXVsdCkodGhpcyx0KSwoMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpGKCJpbnRlZ3JhdGlvbnMtdGFiIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uSW50ZWdyYXRpb25zTGlzdCx7Z3JvdXBlZEludGVncmF0aW9uczp0aGlzLnByb3BzLmdyb3VwZWRJbnRlZ3JhdGlvbnN9KSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17cHJvamVjdElkOlIuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxncm91cGVkSW50ZWdyYXRpb25zOlIuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZH0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJJbnRlZ3JhdGlvbnNUYWIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2UvaW50ZWdyYXRpb25zVGFiL2ludGVncmF0aW9uc1RhYi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihGLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zVGFiLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9pbnRlZ3JhdGlvbnNUYWIvaW50ZWdyYXRpb25zVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW50ZWdyYXRpb25zLXRhYiI6ImludGVncmF0aW9uc1RhYl9faW50ZWdyYXRpb25zLXRhYl9fX3U2NHo1In19LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvY29uc3RhbnRzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj10LmxhYmVsV2lkdGg9MTQwLG89dC5sYXVuY2hTdGF0dXNlcz17QUxXQVlTOiJhbHdheXMiLE1PUkVfMTA6Im1vcmUxMCIsTU9SRV8yMDoibW9yZTIwIixNT1JFXzUwOiJtb3JlNTAiLEZBSUxFRDoiZmFpbGVkIixUT19JTlZFU1RJR0FURToidG9JbnZlc3RpZ2F0ZSJ9LHM9dC5kZWZhdWx0Q2FzZT17bGF1bmNoTmFtZXM6W10scmVjaXBpZW50czpbXSxpbmZvcm1Pd25lcjohMCxzZW5kQ2FzZTpvLkFMV0FZUyxhdHRyaWJ1dGVzOltdLHN1Ym1pdHRlZDohMSxjb25maXJtZWQ6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihyLCJsYWJlbFdpZHRoIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvY29uc3RhbnRzLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywibGF1bmNoU3RhdHVzZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9jb25zdGFudHMuanMiKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJkZWZhdWx0Q2FzZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL2NvbnN0YW50cy5qcyIpKX0oKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob3RpZmljYXRpb25zRW5hYmxlRm9ybX19KTt2YXIgbz1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vaW5kZXguanMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm90aWZpY2F0aW9uQ2FzZUZvcm0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLk5vdGlmaWNhdGlvbkNhc2VGb3JtfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUZvcm0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vdGlmaWNhdGlvbkNhc2VGb3JtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob3RpZmljYXRpb25DYXNlRm9ybX19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlRm9ybS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vdGlmaWNhdGlvbkNhc2VGb3JtPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIikseD1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3QvaW5kZXguanMiKSxMPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS92YWxpZGF0aW9uLmpzIiksRD17Tm90aWZpY2F0aW9uQ2FzZUZvcm06e2Rpc3BsYXlOYW1lOiJOb3RpZmljYXRpb25DYXNlRm9ybSJ9fSx3PSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlRm9ybS5qc3giLGNvbXBvbmVudHM6RCxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxNPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlRm9ybS5qc3giLGNvbXBvbmVudHM6RCxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxrPXQuTm90aWZpY2F0aW9uQ2FzZUZvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB3KE0odCxlKSxlKX19KCJOb3RpZmljYXRpb25DYXNlRm9ybSIpKChvPSgwLGoucmVkdXhGb3JtKSh7ZGVzdHJveU9uVW5tb3VudDohMSxmb3JtOiJub3RpZmljYXRpb25DYXNlRm9ybSIsdmFsaWRhdGU6TC52YWxpZGF0ZX0pKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5yZWFkT25seTtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoai5GaWVsZEFycmF5LHtuYW1lOiJjYXNlcyIsY29tcG9uZW50OnguTm90aWZpY2F0aW9uQ2FzZUxpc3QscmVyZW5kZXJPbkV2ZXJ5Q2hhbmdlOiEwLHJlYWRPbmx5OmV9KX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtyZWFkT25seTpSLmRlZmF1bHQuYm9vbH0saS5kZWZhdWx0UHJvcHM9e3JlYWRPbmx5OiExfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaywiTm90aWZpY2F0aW9uQ2FzZUZvcm0iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlRm9ybS5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZUxpc3QuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk5vdGlmaWNhdGlvbkNhc2VMaXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob3RpZmljYXRpb25DYXNlTGlzdH19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9ub3RpZmljYXRpb25DYXNlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb3RpZmljYXRpb25DYXNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob3RpZmljYXRpb25DYXNlfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvbWVzc2FnZXMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWVzc2FnZXM9dm9pZCAwO3ZhciByPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksbz10Lm1lc3NhZ2VzPSgwLHIuZGVmaW5lTWVzc2FnZXMpKHtyZWNpcGllbnRzTGFiZWw6e2lkOiJOb3RpZmljYXRpb25DYXNlLnJlY2lwaWVudHNMYWJlbCIsZGVmYXVsdE1lc3NhZ2U6IlJlY2lwaWVudHMifSxyZWNpcGllbnRzUGxhY2Vob2xkZXI6e2lkOiJOb3RpZmljYXRpb25DYXNlLnJlY2lwaWVudHNQbGFjZWhvbGRlciIsZGVmYXVsdE1lc3NhZ2U6IlNlbGVjdCB0ZWFtIG1lbWJlcnMifSxyZWNpcGllbnRzSGludDp7aWQ6Ik5vdGlmaWNhdGlvbkNhc2UucmVjaXBpZW50c0hpbnQiLGRlZmF1bHRNZXNzYWdlOiJQbGVhc2UgZW50ZXIgY29ycmVjdCBlbWFpbCJ9LGxhdW5jaE93bmVyTGFiZWw6e2lkOiJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE93bmVyTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggb3duZXIgKHdobyBsYXVuY2hlZCAtIHRoYXQgcmVjZWl2ZWQpIn0saW5DYXNlTGFiZWw6e2lkOiJOb3RpZmljYXRpb25DYXNlLmluQ2FzZUxhYmVsIixkZWZhdWx0TWVzc2FnZToiSW4gY2FzZSJ9LGxhdW5jaE5hbWVzTGFiZWw6e2lkOiJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE5hbWVzTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggbmFtZXMgKGFuZCkifSxsYXVuY2hOYW1lc1BsYWNlaG9sZGVyOntpZDoiTm90aWZpY2F0aW9uQ2FzZS5sYXVuY2hOYW1lc1BsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiU2VsZWN0IGxhdW5jaGVzIG5hbWVzIn0sbGF1bmNoTmFtZXNIaW50OntpZDoiTm90aWZpY2F0aW9uQ2FzZS5sYXVuY2hOYW1lc0hpbnQiLGRlZmF1bHRNZXNzYWdlOiJBdCBsZWFzdCAzIHN5bWJvbHMgcmVxdWlyZWQgZm9yIGF1dG9jb21wbGV0ZS4ifSxsYXVuY2hOYW1lc05vdGU6e2lkOiJOb3RpZmljYXRpb25DYXNlLmxhdW5jaE5hbWVzTm90ZSIsZGVmYXVsdE1lc3NhZ2U6IlNlbmQgbm90aWZpY2F0aW9ucyBhYm91dCBzZWxlY3RlZCBsYXVuY2hlcyBmaW5pc2hlZCJ9LGF0dHJpYnV0ZXNMYWJlbDp7aWQ6Ik5vdGlmaWNhdGlvbkNhc2UuYXR0cmlidXRlc0xhYmVsIixkZWZhdWx0TWVzc2FnZToiQXR0cmlidXRlcyAoYW5kKSJ9LGF0dHJpYnV0ZXNOb3RlOntpZDoiTm90aWZpY2F0aW9uQ2FzZS5hdHRyaWJ1dGVzTm90ZSIsZGVmYXVsdE1lc3NhZ2U6IlNlbmQgbm90aWZpY2F0aW9ucyBhYm91dCBsYXVuY2hlcyBjb250YWluaW5nIHNwZWNpZmllZCBhdHRyaWJ1dGVzIn0sZHJvcGRvd25WYWx1ZUFsd2F5czp7aWQ6Ik5vdGlmaWNhdGlvbkNhc2UuZHJvcGRvd25WYWx1ZUFsd2F5cyIsZGVmYXVsdE1lc3NhZ2U6IkFsd2F5cyJ9LGRyb3Bkb3duVmFsdWVNb3JlMTA6e2lkOiJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVNb3JlMTAiLGRlZmF1bHRNZXNzYWdlOiI+IDEwJSBvZiBpdGVtcyBoYXZlIGlzc3VlcyJ9LGRyb3Bkb3duVmFsdWVNb3JlMjA6e2lkOiJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVNb3JlMjAiLGRlZmF1bHRNZXNzYWdlOiI+IDIwJSBvZiBpdGVtcyBoYXZlIGlzc3VlcyJ9LGRyb3Bkb3duVmFsdWVNb3JlNTA6e2lkOiJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVNb3JlNTAiLGRlZmF1bHRNZXNzYWdlOiI+IDUwJSBvZiBpdGVtcyBoYXZlIGlzc3VlcyJ9LGRyb3Bkb3duVmFsdWVGYWlsZWQ6e2lkOiJOb3RpZmljYXRpb25DYXNlLmRyb3Bkb3duVmFsdWVGYWlsZWQiLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggaGFzIGlzc3VlcyJ9LGRyb3Bkb3duVmFsdWVUb0ludmVzdGlnYXRlOntpZDoiTm90aWZpY2F0aW9uQ2FzZS5kcm9wZG93blZhbHVlVG9JbnZlc3RpZ2F0ZSIsZGVmYXVsdE1lc3NhZ2U6J0xhdW5jaCBoYXMgIlRvIEludmVzdGlnYXRlIiBpdGVtcyd9LGNvbnRyb2xQYW5lbE5hbWU6e2lkOiJOb3RpZmljYXRpb25DYXNlLmNvbnRyb2xQYW5lbE5hbWUiLGRlZmF1bHRNZXNzYWdlOiJSdWxlIn0sZHVwbGljYXRpb25FcnJvck1lc3NhZ2U6e2lkOiJOb3RpZmljYXRpb25DYXNlLmR1cGxpY2F0aW9uRXJyb3JNZXNzYWdlIixkZWZhdWx0TWVzc2FnZToiU3VjaCBub3RpZmljYXRpb24gcnVsZSBhbHJlYWR5IGV4aXN0cy4gWW91IGNhbid0IGNyZWF0ZSBkdXBsaWNhdGUuIn19KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvbWVzc2FnZXMuanMiKX0oKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL25vdGlmaWNhdGlvbkNhc2UuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob3RpZmljYXRpb25DYXNlPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTD1yKHgpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxrPXIoTSksST1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksSD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9maWVsZEVycm9ySGludC9pbmRleC5qcyIpLFU9bigiLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvaW5wdXRUYWdzU2VhcmNoL2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dENoZWNrYm94L2luZGV4LmpzIiksej1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dERyb3Bkb3duL2luZGV4LmpzIiksVj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpZWxkcy9mb3JtRmllbGQvaW5kZXguanMiKSxXPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkUHJvdmlkZXIuanN4IiksWT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvY29uc3RhbnRzLmpzIikscT1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLEs9bigiLi9zcmMvY29tbW9uL2ltZy9jaXJjbGUtY3Jvc3MtaWNvbi1pbmxpbmUuc3ZnIiksWD1yKEspLCQ9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2F0dHJpYnV0ZUxpc3QvaW5kZXguanMiKSxRPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL3BlbmNpbENoZWNrYm94L2luZGV4LmpzIiksSj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9tZXNzYWdlcy5qcyIpLFo9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2Uvbm90aWZpY2F0aW9uQ2FzZS5zY3NzIiksZWU9cihaKSx0ZT17Tm90aWZpY2F0aW9uQ2FzZTp7ZGlzcGxheU5hbWU6Ik5vdGlmaWNhdGlvbkNhc2UifX0sbmU9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2Uvbm90aWZpY2F0aW9uQ2FzZS5qc3giLGNvbXBvbmVudHM6dGUsbG9jYWxzOltlXSxpbXBvcnRzOltDLmRlZmF1bHRdfSkscmU9KDAsVC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2Uvbm90aWZpY2F0aW9uQ2FzZS5qc3giLGNvbXBvbmVudHM6dGUsbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksb2U9ay5kZWZhdWx0LmJpbmQoZWUuZGVmYXVsdCksc2U9dC5Ob3RpZmljYXRpb25DYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmUocmUodCxlKSxlKX19KCJOb3RpZmljYXRpb25DYXNlIikoKG89KDAsRC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdFVzZXJuYW1lc1NlYXJjaDpOLlVSTFMucHJvamVjdFVzZXJuYW1lc1NlYXJjaCgoMCxGLnByb2plY3RJZFNlbGVjdG9yKShlKSksbGF1bmNoTmFtZVNlYXJjaDpOLlVSTFMubGF1bmNoTmFtZVNlYXJjaCgoMCxGLnByb2plY3RJZFNlbGVjdG9yKShlKSl9fSkscz0oMCxqLmRlZmF1bHQpKCksKDAsdy5pbmplY3RJbnRsKShpPW8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLF8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsaC5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3RhdGU9e2lzRHVwbGljYXRpbmc6ITF9LHIub25EZWxldGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLm9uVmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uVmFsaWRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0RHJvcGRvd25JbnB1dENvbmZpZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRFcnJvck1lc3NhZ2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEVycm9yTWVzc2FnZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5mb3JtYXRPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnBhcnNlT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcGFyc2VPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnZhbGlkYXRlUmVjaXBpZW50c05ld0l0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3ZhbGlkYXRlUmVjaXBpZW50c05ld0l0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudmFsaWRhdGVMYXVuY2hOYW1lc05ld0l0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3ZhbGlkYXRlTGF1bmNoTmFtZXNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fdmFsaWRhdGVMYXVuY2hOYW1lc05ld0l0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZhbGlkYXRlTGF1bmNoTmFtZXNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19wYXJzZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BhcnNlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZm9ybWF0T3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZm9ybWF0T3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RXJyb3JNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFcnJvck1lc3NhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERyb3Bkb3duSW5wdXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERyb3Bkb3duSW5wdXRDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uVmFsaWRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uVmFsaWRhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25EZWxldGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25EZWxldGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5wcm9wcyxyPW4uY29uZmlybWVkLG89bi5zdWJtaXR0ZWQscz1uLnRyYWNraW5nLGk9b3x8cjtzLnRyYWNrRXZlbnQocS5TRVRUSU5HU19QQUdFX0VWRU5UUy5ERUxFVEVfUlVMRV9OT1RJRklDQVRJT05TKSx0LnByb3BzLm9uRGVsZXRlKGUsaSl9fX0se2tleToiX19vblZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblZhbGlkYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RXJyb3JNZXNzYWdlKGUpO3RoaXMuc2V0U3RhdGUoe2lzRHVwbGljYXRpbmc6dH0pfX0se2tleToiX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pbnRsO3JldHVyblt7dmFsdWU6WS5sYXVuY2hTdGF0dXNlcy5BTFdBWVMsbGFiZWw6ZS5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHJvcGRvd25WYWx1ZUFsd2F5cyl9LHt2YWx1ZTpZLmxhdW5jaFN0YXR1c2VzLk1PUkVfMTAsbGFiZWw6ZS5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHJvcGRvd25WYWx1ZU1vcmUxMCl9LHt2YWx1ZTpZLmxhdW5jaFN0YXR1c2VzLk1PUkVfMjAsbGFiZWw6ZS5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHJvcGRvd25WYWx1ZU1vcmUyMCl9LHt2YWx1ZTpZLmxhdW5jaFN0YXR1c2VzLk1PUkVfNTAsbGFiZWw6ZS5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHJvcGRvd25WYWx1ZU1vcmU1MCl9LHt2YWx1ZTpZLmxhdW5jaFN0YXR1c2VzLkZBSUxFRCxsYWJlbDplLmZvcm1hdE1lc3NhZ2UoSi5tZXNzYWdlcy5kcm9wZG93blZhbHVlRmFpbGVkKX0se3ZhbHVlOlkubGF1bmNoU3RhdHVzZXMuVE9fSU5WRVNUSUdBVEUsbGFiZWw6ZS5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHJvcGRvd25WYWx1ZVRvSW52ZXN0aWdhdGUpfV19fSx7a2V5OiJfX2dldEVycm9yTWVzc2FnZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RXJyb3JNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRFcnJvck1lc3NhZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEVycm9yTWVzc2FnZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RXJyb3JNZXNzYWdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW50bDtzd2l0Y2goZSl7Y2FzZSJoYXNEdXBsaWNhdGVzIjpyZXR1cm4gdC5mb3JtYXRNZXNzYWdlKEoubWVzc2FnZXMuZHVwbGljYXRpb25FcnJvck1lc3NhZ2UpO2RlZmF1bHQ6cmV0dXJuITF9fX0se2tleToiX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mb3JtYXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dmFsdWU6ZSxsYWJlbDplfX0pfX0se2tleToiX19wYXJzZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BhcnNlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fcGFyc2VPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wYXJzZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3BhcnNlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KXx8dm9pZCAwfX0se2tleToiX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX192YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGFiZWw7cmV0dXJuIHQmJkgudmFsaWRhdGUuZW1haWwodCl9fSx7a2V5OiJfX3ZhbGlkYXRlTGF1bmNoTmFtZXNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZUxhdW5jaE5hbWVzTmV3SXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdmFsaWRhdGVMYXVuY2hOYW1lc05ld0l0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZhbGlkYXRlTGF1bmNoTmFtZXNOZXdJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX192YWxpZGF0ZUxhdW5jaE5hbWVzTmV3SXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsO3JldHVybiB0JiZ0Lmxlbmd0aD49M319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLmZvcm1hdE1lc3NhZ2Usbj1lLnByb2plY3RVc2VybmFtZXNTZWFyY2gscj1lLmxhdW5jaE5hbWVTZWFyY2gsbz1lLmlkLHM9ZS5ub3RpZmljYXRpb25DYXNlLGk9ZS5jb25maXJtZWQsYT1lLnJlYWRPbmx5LGw9ZS5udW1iZXJPZkNvbmZpcm1lZFJ1bGVzLHU9ZS50b3RhbE51bWJlck9mRmllbGRzLGM9ZS50cmFja2luZyxkPSFpLF89dT4xJiYoIWl8fGw+MSkscD10aGlzLnN0YXRlLmlzRHVwbGljYXRpbmc7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEEuRnJhZ21lbnQsbnVsbCxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm9lKCJjb250cm9sLXBhbmVsIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOm9lKCJjb250cm9sLXBhbmVsLW5hbWUiKX0sdChKLm1lc3NhZ2VzLmNvbnRyb2xQYW5lbE5hbWUpLCIgIixvKzEpLCFhJiZDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm9lKCJjb250cm9sLXBhbmVsLWJ1dHRvbnMiKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvZSgiY29udHJvbC1wYW5lbC1idXR0b24iKX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVy5GaWVsZFByb3ZpZGVyLHtuYW1lOnMrIi5jb25maXJtZWQiLGZvcm1hdDpCb29sZWFuLG9uVmFsaWRhdGU6dGhpcy5vblZhbGlkYXRlfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChRLlBlbmNpbENoZWNrYm94LG51bGwpKSksXyYmQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNzTmFtZTpvZSgiY29udHJvbC1wYW5lbC1idXR0b24iKSxvbkNsaWNrOnRoaXMub25EZWxldGUobyl9LCgwLFAuZGVmYXVsdCkoWC5kZWZhdWx0KSkpKSxwJiZDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZTpvZSgiZm9ybS1pbnZhbGlkLW1lc3NhZ2UiKX0scCksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5Gb3JtRmllbGQse2xhYmVsOnQoSi5tZXNzYWdlcy5yZWNpcGllbnRzTGFiZWwpLG5hbWU6cysiLnJlY2lwaWVudHMiLGZvcm1hdDp0aGlzLmZvcm1hdE9wdGlvbnMscGFyc2U6dGhpcy5wYXJzZU9wdGlvbnMsZGlzYWJsZWQ6IWQsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOm9lKCJmb3JtLWlucHV0Iiksb25DaGFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gYy50cmFja0V2ZW50KHEuU0VUVElOR1NfUEFHRV9FVkVOVFMuRURJVF9SRUNJUElFTlRTX0lOUFVUX05PVElGSUNBVElPTlMpfX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQi5GaWVsZEVycm9ySGludCx7aGludFR5cGU6InRvcCJ9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuSW5wdXRUYWdzU2VhcmNoLHtwbGFjZWhvbGRlcjp0KEoubWVzc2FnZXMucmVjaXBpZW50c1BsYWNlaG9sZGVyKSxub3RoaW5nRm91bmQ6dChKLm1lc3NhZ2VzLnJlY2lwaWVudHNIaW50KSxtaW5MZW5ndGg6Myxhc3luYzohMCx1cmk6bixtYWtlT3B0aW9uczp0aGlzLmZvcm1hdE9wdGlvbnMsY3JlYXRhYmxlOiEwLG11bHRpOiEwLHJlbW92ZVNlbGVjdGVkOiEwLGlzVmFsaWROZXdPcHRpb246dGhpcy52YWxpZGF0ZVJlY2lwaWVudHNOZXdJdGVtLGR5bmFtaWNTZWFyY2hQcm9tcHRUZXh0OiEwfSkpKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChWLkZvcm1GaWVsZCx7bmFtZTpzKyIuaW5mb3JtT3duZXIiLGZvcm1hdDpCb29sZWFuLGRpc2FibGVkOiFkLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGMudHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLkNIRUNLQk9YX0xBVU5DSF9PV05FUl9OT1RJRklDQVRJT05TKX0sZmllbGRXcmFwcGVyQ2xhc3NOYW1lOm9lKCJmb3JtLWlucHV0LWNoZWNrYm94Iil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEcuSW5wdXRDaGVja2JveCxudWxsLHQoSi5tZXNzYWdlcy5sYXVuY2hPd25lckxhYmVsKSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFYuRm9ybUZpZWxkLHtsYWJlbDp0KEoubWVzc2FnZXMuaW5DYXNlTGFiZWwpLGxhYmVsV2lkdGg6WS5sYWJlbFdpZHRoLG5hbWU6cysiLnNlbmRDYXNlIixkaXNhYmxlZDohZCxmaWVsZFdyYXBwZXJDbGFzc05hbWU6b2UoImZvcm0taW5wdXQiKSxvbkNoYW5nZTpmdW5jdGlvbigpe3JldHVybiBjLnRyYWNrRXZlbnQocS5TRVRUSU5HU19QQUdFX0VWRU5UUy5FRElUX0lOX0NBU0VfSU5QVVRfTk9USUZJQ0FUSU9OUyl9fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LklucHV0RHJvcGRvd24se29wdGlvbnM6dGhpcy5nZXREcm9wZG93bklucHV0Q29uZmlnKCl9KSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5Gb3JtRmllbGQse2xhYmVsOnQoSi5tZXNzYWdlcy5sYXVuY2hOYW1lc0xhYmVsKSxjdXN0b21CbG9jazp7bm9kZTpDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgicCIsbnVsbCx0KEoubWVzc2FnZXMubGF1bmNoTmFtZXNOb3RlKSl9LG5hbWU6cysiLmxhdW5jaE5hbWVzIixmb3JtYXQ6dGhpcy5mb3JtYXRPcHRpb25zLHBhcnNlOnRoaXMucGFyc2VPcHRpb25zLGRpc2FibGVkOiFkLGZpZWxkV3JhcHBlckNsYXNzTmFtZTpvZSgiZm9ybS1pbnB1dCIpLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGMudHJhY2tFdmVudChxLlNFVFRJTkdTX1BBR0VfRVZFTlRTLkxBVU5DSF9OQU1FX0lOUFVUX05PVElGSUNBVElPTlMpfX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQi5GaWVsZEVycm9ySGludCx7aGludFR5cGU6InRvcCJ9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFUuSW5wdXRUYWdzU2VhcmNoLHtwbGFjZWhvbGRlcjp0KEoubWVzc2FnZXMubGF1bmNoTmFtZXNQbGFjZWhvbGRlciksZm9jdXNQbGFjZWhvbGRlcjp0KEoubWVzc2FnZXMubGF1bmNoTmFtZXNIaW50KSxhc3luYzohMCxtaW5MZW5ndGg6Myx1cmk6cixtYWtlT3B0aW9uczp0aGlzLmZvcm1hdE9wdGlvbnMsY3JlYXRhYmxlOiEwLG11bHRpOiEwLHJlbW92ZVNlbGVjdGVkOiEwLGlzVmFsaWROZXdPcHRpb246dGhpcy52YWxpZGF0ZUxhdW5jaE5hbWVzTmV3SXRlbX0pKSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5Gb3JtRmllbGQse2xhYmVsOnQoSi5tZXNzYWdlcy5hdHRyaWJ1dGVzTGFiZWwpLGN1c3RvbUJsb2NrOntub2RlOkMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQoSi5tZXNzYWdlcy5hdHRyaWJ1dGVzTm90ZSkpfSxmaWVsZFdyYXBwZXJDbGFzc05hbWU6b2UoImZvcm0taW5wdXQiKSxuYW1lOnMrIi5hdHRyaWJ1dGVzIixkaXNhYmxlZDohZCxvbkNoYW5nZTpmdW5jdGlvbigpe3JldHVybiBjLnRyYWNrRXZlbnQocS5TRVRUSU5HU19QQUdFX0VWRU5UUy5UQUdTX0lOUFVUX05PVElGSUNBVElPTlMpfX0sQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJC5BdHRyaWJ1dGVMaXN0RmllbGQsbnVsbCkpKX19XSksdH0oQS5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtpbnRsOncuaW50bFNoYXBlLmlzUmVxdWlyZWQsbm90aWZpY2F0aW9uQ2FzZTpMLmRlZmF1bHQuc3RyaW5nLHByb2plY3RVc2VybmFtZXNTZWFyY2g6TC5kZWZhdWx0LnN0cmluZyxsYXVuY2hOYW1lU2VhcmNoOkwuZGVmYXVsdC5zdHJpbmcsb25EZWxldGU6TC5kZWZhdWx0LmZ1bmMscmVhZE9ubHk6TC5kZWZhdWx0LmJvb2wsZGVsZXRhYmxlOkwuZGVmYXVsdC5ib29sLGNvbmZpcm1lZDpMLmRlZmF1bHQuYm9vbCxzdWJtaXR0ZWQ6TC5kZWZhdWx0LmJvb2wsaWQ6TC5kZWZhdWx0Lm51bWJlcixudW1iZXJPZkNvbmZpcm1lZFJ1bGVzOkwuZGVmYXVsdC5udW1iZXIsdG90YWxOdW1iZXJPZkZpZWxkczpMLmRlZmF1bHQubnVtYmVyLHRyYWNraW5nOkwuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpMLmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6TC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxhLmRlZmF1bHRQcm9wcz17bm90aWZpY2F0aW9uQ2FzZToiIixwcm9qZWN0VXNlcm5hbWVzU2VhcmNoOiIiLGxhdW5jaE5hbWVTZWFyY2g6IiIsb25EZWxldGU6ZnVuY3Rpb24oKXt9LHJlYWRPbmx5OiExLGRlbGV0YWJsZTohMSxjb25maXJtZWQ6ITEsc3VibWl0dGVkOiExLGlkOjAsbnVtYmVyT2ZDb25maXJtZWRSdWxlczowLHRvdGFsTnVtYmVyT2ZGaWVsZHM6MH0saT1sKSl8fGkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzZSwiTm90aWZpY2F0aW9uQ2FzZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2Uvbm90aWZpY2F0aW9uQ2FzZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvZSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL25vdGlmaWNhdGlvbkNhc2UuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9ub3RpZmljYXRpb25DYXNlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZm9ybS1pbnB1dCI6Im5vdGlmaWNhdGlvbkNhc2VfX2Zvcm0taW5wdXRfX18xQnNtLSIsImZvcm0taW52YWxpZC1tZXNzYWdlIjoibm90aWZpY2F0aW9uQ2FzZV9fZm9ybS1pbnZhbGlkLW1lc3NhZ2VfX18ySG81biIsImNvbnRyb2wtcGFuZWwiOiJub3RpZmljYXRpb25DYXNlX19jb250cm9sLXBhbmVsX19fM2tLVS0iLCJjb250cm9sLXBhbmVsLW5hbWUiOiJub3RpZmljYXRpb25DYXNlX19jb250cm9sLXBhbmVsLW5hbWVfX19BX0dITyIsImNvbnRyb2wtcGFuZWwtYnV0dG9ucyI6Im5vdGlmaWNhdGlvbkNhc2VfX2NvbnRyb2wtcGFuZWwtYnV0dG9uc19fXzNxZVVZIiwiY29udHJvbC1wYW5lbC1idXR0b24iOiJub3RpZmljYXRpb25DYXNlX19jb250cm9sLXBhbmVsLWJ1dHRvbl9fXzNGMmJKIn19LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9wZW5jaWxDaGVja2JveC9pbWcvaWMtY2hlY2staW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGw9IiMzOUMyRDciIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAsMTAgQzAsNC40NzcxNDE2NyA0LjQ3NzEzMjUsMCAxMCwwIEMxNS41MjI4NjY3LDAgMjAsNC40NzcxNDE2NyAyMCwxMCBDMjAsMTUuNTIyODU1IDE1LjUyMjg2NjcsMjAgMTAsMjAgQzQuNDc3MTMyNSwyMCAwLDE1LjUyMjg1NSAwLDEwIFogTTEuMDg3MjUyMjYsOS44NTcxNDU0NCBDMS4wMDA1MDM4MSwxNC44MjY5NjA2IDUuMjEyNTY2NDEsMTguODk2MjE2MyAxMC4xODIzNTM3LDE4Ljk4Mjk2NDIgQzE1LjE1MjE5NzYsMTkuMDY5NzEzMiAxOC45NzA2MjQ1LDE0Ljg3MDkzODYgMTkuMDU3MzczLDkuOTAxMTIzNDcgQzE5LjE0NDEyMTMsNC45MzEzMTU1MSAxNS4xOTk0ODM5LDEuMDk3MTcxMzggMTAuMjI5NjQsMS4wMTA0MjI0MyBDNS4yNTk4NTI3MywwLjkyMzY3NDQ3MiAxLjE3NDAwMDU4LDQuODg3MzM3NDggMS4wODcyNTIyNiw5Ljg1NzE0NTQ0IFogTTkuOTMzMzE2NjcsMTMuNjEwODMzMyBDOS45MDM4MTY2NywxMy43MzQ0MTA4IDkuODQwMzQxNjcsMTMuODQ3MjYxNyA5Ljc1MDAwODMzLDEzLjkzNjY4NSBDOS41OTI0OTE2NywxNC4wOTUwODQyIDkuMzcyMiwxNC4xNzQzMzQyIDkuMTQ5OTgzMzMsMTQuMTUyNTAxNyBDOC43OTI5NzUsMTQuMTc3NDA1IDguNDY2OSwxMy45NTAxODI1IDguMzY2NywxMy42MDY2NjkyIEw2LjAxNjY5MzMzLDExLjI1ODMzMzMgQzUuNzUzMjc1ODMsMTAuOTYxNTY2NyA1Ljc2NjY1MjUsMTAuNTExMDMzMyA2LjA0NzA1ODMzLDEwLjIzMDM1ODMgQzYuMzI3NDY0MTcsOS45NDk2ODMzMyA2Ljc3ODAwNSw5LjkzNjAxNjY3IDcuMDc0OTkxNjcsMTAuMTk5MTU4MyBMOC44OTE3LDEyLjAxOTE2NDIgTDEyLjYwODM5MTcsNS40MyBDMTIuNzE2MjE2Nyw1LjIzMjcyNSAxMi44OTkxNjY3LDUuMDg3Mzc1IDEzLjExNTY5MTcsNS4wMjY5NjY2NyBDMTMuMzMyMjY2Nyw0Ljk2NjU1IDEzLjU2NDA1LDQuOTk2MTkxNjcgMTMuNzU4MzkxNyw1LjEwOTE2NjY3IEMxNC4xNjA2NjY3LDUuMzU3MzQxNjcgMTQuMjkzMzY2Nyw1Ljg3OTkxNjY3IDE0LjA1ODM4MzMsNi4yOSBMOS45MzMzMTY2NywxMy42MTA4MzMzIFoiPjwvcGF0aD48L3N2Zz4nfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvcGVuY2lsQ2hlY2tib3gvaW1nL2ljb24tcGVuY2lsLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjOTk5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDE0LjA4M1YxN2gyLjkxN2w4LjYwNy04LjYwNy0yLjkxNy0yLjkxN0w0IDE0LjA4M3ptMTMuNzcyLTcuOTM4YS43OC43OCAwIDAgMCAwLTEuMTAxbC0xLjgxNi0xLjgxNmEuNzguNzggMCAwIDAtMS4xIDBMMTMuNDMxIDQuNjVsMi45MTcgMi45MTcgMS40MjMtMS40MjN6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL3BlbmNpbENoZWNrYm94L2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9wZW5jaWxDaGVja2JveC9wZW5jaWxDaGVja2JveC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGVuY2lsQ2hlY2tib3giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlBlbmNpbENoZWNrYm94fX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvcGVuY2lsQ2hlY2tib3gvcGVuY2lsQ2hlY2tib3guanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QZW5jaWxDaGVja2JveD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvcGVuY2lsQ2hlY2tib3gvcGVuY2lsQ2hlY2tib3guc2NzcyIpLGQ9cihjKSxfPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL3BlbmNpbENoZWNrYm94L2ltZy9pYy1jaGVjay1pbmxpbmUuc3ZnIikscD1yKF8pLGY9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2UvcGVuY2lsQ2hlY2tib3gvaW1nL2ljb24tcGVuY2lsLWlubGluZS5zdmciKSxtPXIoZiksaD1hLmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLGc9dC5QZW5jaWxDaGVja2JveD1mdW5jdGlvbih0KXt2YXIgbj10LnZhbHVlLHI9dC5kaXNhYmxlZCxvPXQub25DaGFuZ2Uscz10Lm9uRm9jdXMsaT10Lm9uQmx1cixhPXQub25WYWxpZGF0ZSxsPXQuZXJyb3IsYz1mdW5jdGlvbihlKXthKGwpLGx8fG8oZSl9O3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImxhYmVsIix7Y2xhc3NOYW1lOmgoInBlbmNpbC1jaGVja2JveCIpLG9uRm9jdXM6cyxvbkJsdXI6aX0sZS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3R5cGU6ImNoZWNrYm94IixjbGFzc05hbWU6aCgiaGlkZGVuIiksY2hlY2tlZDpuLGRpc2FibGVkOnIsb25DaGFuZ2U6Y30pLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmgoImljb24iLHtjaGVja2VkOm4sZGlzYWJsZWQ6cn0pfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJwZW5jaWwiKX0sKDAsdS5kZWZhdWx0KShtLmRlZmF1bHQpKSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpoKCJjaGVjayIpfSwoMCx1LmRlZmF1bHQpKHAuZGVmYXVsdCkpKSl9O2cucHJvcFR5cGVzPXtjaGlsZHJlbjpzLmRlZmF1bHQubm9kZSx2YWx1ZTpzLmRlZmF1bHQuYm9vbCxkaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxvbkNoYW5nZTpzLmRlZmF1bHQuZnVuYyxvbkZvY3VzOnMuZGVmYXVsdC5mdW5jLG9uQmx1cjpzLmRlZmF1bHQuZnVuYyxvblZhbGlkYXRlOnMuZGVmYXVsdC5mdW5jLGVycm9yOnMuZGVmYXVsdC5zdHJpbmd9LGcuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjoiIix2YWx1ZTohMSxkaXNhYmxlZDohMSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25Gb2N1czpmdW5jdGlvbigpe30sb25CbHVyOmZ1bmN0aW9uKCl7fSxvblZhbGlkYXRlOmZ1bmN0aW9uKCl7fSxlcnJvcjpudWxsfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiUGVuY2lsQ2hlY2tib3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlL3BlbmNpbENoZWNrYm94L3BlbmNpbENoZWNrYm94LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9wZW5jaWxDaGVja2JveC9wZW5jaWxDaGVja2JveC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9wZW5jaWxDaGVja2JveC9wZW5jaWxDaGVja2JveC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InBlbmNpbC1jaGVja2JveCI6InBlbmNpbENoZWNrYm94X19wZW5jaWwtY2hlY2tib3hfX18yRFVaMyIsaGlkZGVuOiJwZW5jaWxDaGVja2JveF9faGlkZGVuX19fMUdrQzQiLGljb246InBlbmNpbENoZWNrYm94X19pY29uX19fM2l6TkUiLGNoZWNrZWQ6InBlbmNpbENoZWNrYm94X19jaGVja2VkX19fM1RTU1kiLGNoZWNrOiJwZW5jaWxDaGVja2JveF9fY2hlY2tfX18xYnNONyIscGVuY2lsOiJwZW5jaWxDaGVja2JveF9fcGVuY2lsX19fMWRVeTkifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlTGlzdC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5vdGlmaWNhdGlvbkNhc2VMaXN0PXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx3PXIoRCksTT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxJPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLFA9cihJKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL21vZGFsL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvY29uc3RhbnRzLmpzIiksVT1uKCIuL3NyYy9jb21tb24vaW1nL3BsdXMtYnV0dG9uLWlubGluZS5zdmciKSxHPXIoVSksej1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZS9pbmRleC5qcyIpLFY9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2VzTGlzdC5zY3NzIiksVz1yKFYpLFk9e05vdGlmaWNhdGlvbkNhc2VMaXN0OntkaXNwbGF5TmFtZToiTm90aWZpY2F0aW9uQ2FzZUxpc3QifX0scT0oMCxqLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZUxpc3QuanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltlXSxpbXBvcnRzOltTLmRlZmF1bHRdfSksSz0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZUxpc3QuanN4Iixjb21wb25lbnRzOlksbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksWD0oMCxrLmRlZmluZU1lc3NhZ2VzKSh7YWRkTmV3UnVsZUJ1dHRvbjp7aWQ6Ik5vdGlmaWNhdGlvbkNhc2VMaXN0LmFkZE5ld1J1bGVCdXR0b24iLGRlZmF1bHRNZXNzYWdlOiJBZGQgTmV3IFJ1bGUifX0pLCQ9UC5kZWZhdWx0LmJpbmQoVy5kZWZhdWx0KSxRPXQuTm90aWZpY2F0aW9uQ2FzZUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBxKEsodCxlKSxlKX19KCJOb3RpZmljYXRpb25DYXNlTGlzdCIpKChvPSgwLE0uY29ubmVjdCkobnVsbCx7c2hvd01vZGFsOk4uc2hvd01vZGFsQWN0aW9ufSkscz0oMCxMLmRlZmF1bHQpKCksKDAsay5pbmplY3RJbnRsKShpPW8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGYuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsYi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIub25EZWxldGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldE51bWJlck9mQ29uZmlybWVkUnVsZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuYWRkTm90aWZpY2F0aW9uQ2FzZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5yZW1vdmVOb3RpZmljYXRpb25DYXNlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fcmVtb3ZlTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVtb3ZlTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TnVtYmVyT2ZDb25maXJtZWRSdWxlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0TnVtYmVyT2ZDb25maXJtZWRSdWxlc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25EZWxldGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25EZWxldGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRGVsZXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkRlbGV0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25EZWxldGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5wcm9wcy5zaG93TW9kYWw7dD9yKHtpZDoiZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsIixkYXRhOntpbmRleDplKzEsb25TdWJtaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZW1vdmVOb3RpZmljYXRpb25DYXNlKGUpfX19KTp0aGlzLnJlbW92ZU5vdGlmaWNhdGlvbkNhc2UoZSl9fSx7a2V5OiJfX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldE51bWJlck9mQ29uZmlybWVkUnVsZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QWxsKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbmZpcm1lZH0pLmxlbmd0aH19LHtrZXk6Il9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fYWRkTm90aWZpY2F0aW9uQ2FzZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChGLlNFVFRJTkdTX1BBR0VfRVZFTlRTLkFERF9SVUxFX0JUTl9OT1RJRklDQVRJT05TKSx0aGlzLnByb3BzLmZpZWxkcy5wdXNoKEIuZGVmYXVsdENhc2UpfX0se2tleToiX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZW1vdmVOb3RpZmljYXRpb25DYXNlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzLmZpZWxkcy5yZW1vdmUoZSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwscj10LmZpZWxkcyxvPXQucmVhZE9ubHkscz10aGlzLmdldE51bWJlck9mQ29uZmlybWVkUnVsZXMociksaT1yLmxlbmd0aCxhPXRoaXMuc3VibWl0O3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChPLkZyYWdtZW50LG51bGwsci5tYXAoZnVuY3Rpb24odCxuLHIpe3ZhciBsPXIuZ2V0KG4pLHU9bC5zdWJtaXR0ZWQsZD1sLmNvbmZpcm1lZCxfPXtzdWJtaXR0ZWQ6dSxyZWFkT25seTpvLHN1Ym1pdDphLGNvbmZpcm1lZDpkLG51bWJlck9mQ29uZmlybWVkUnVsZXM6cyx0b3RhbE51bWJlck9mRmllbGRzOml9O3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6Lk5vdGlmaWNhdGlvbkNhc2UsKDAsYy5kZWZhdWx0KSh7a2V5OiJpbmRleF8iK24saWQ6bixub3RpZmljYXRpb25DYXNlOnQsb25EZWxldGU6ZS5vbkRlbGV0ZX0sXykpfSksIW8mJlMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6JCgibm90aWZpY2F0aW9uLWZvcm0tYnV0dG9uIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEguR2hvc3RCdXR0b24se2ljb246Ry5kZWZhdWx0LG9uQ2xpY2s6dGhpcy5hZGROb3RpZmljYXRpb25DYXNlfSxuLmZvcm1hdE1lc3NhZ2UoWC5hZGROZXdSdWxlQnV0dG9uKSkpKX19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtzaG93TW9kYWw6dy5kZWZhdWx0LmZ1bmMsaW50bDprLmludGxTaGFwZS5pc1JlcXVpcmVkLGNvbmZpZ3VyYWJsZTp3LmRlZmF1bHQuYm9vbCxmaWVsZHM6dy5kZWZhdWx0Lm9iamVjdCxyZWFkT25seTp3LmRlZmF1bHQuYm9vbCx0cmFja2luZzp3LmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6dy5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOncuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZH0sYS5kZWZhdWx0UHJvcHM9e3Nob3dNb2RhbDpmdW5jdGlvbigpe30sY29uZmlndXJhYmxlOiExLGZpZWxkczp7fSxyZWFkT25seTohMX0saT1sKSl8fGkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihRLCJOb3RpZmljYXRpb25DYXNlTGlzdCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbkNhc2VGb3JtL25vdGlmaWNhdGlvbkNhc2VMaXN0L25vdGlmaWNhdGlvbkNhc2VMaXN0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vbm90aWZpY2F0aW9uQ2FzZUxpc3Qvbm90aWZpY2F0aW9uQ2FzZUxpc3QuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoJCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlTGlzdC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS9ub3RpZmljYXRpb25DYXNlTGlzdC9ub3RpZmljYXRpb25DYXNlc0xpc3Quc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJub3RpZmljYXRpb24tZm9ybS1idXR0b24iOiJub3RpZmljYXRpb25DYXNlc0xpc3RfX25vdGlmaWNhdGlvbi1mb3JtLWJ1dHRvbl9fX0tEU0ZtIn19LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vdmFsaWRhdGlvbi5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52YWxpZGF0ZT12b2lkIDA7dmFyIHI9bigiLi9zcmMvY29tbW9uL3V0aWxzL2F0dHJpYnV0ZVV0aWxzLmpzIiksbz1mdW5jdGlvbihlLHQpe3JldHVybiBlLnNlbmRDYXNlPT09dC5zZW5kQ2FzZSYmKGUuYXR0cmlidXRlcy5sZW5ndGg9PT10LmF0dHJpYnV0ZXMubGVuZ3RoJiYoZS5sYXVuY2hOYW1lcy5sZW5ndGg9PT10LmxhdW5jaE5hbWVzLmxlbmd0aCYmKGUucmVjaXBpZW50cy5sZW5ndGg9PT10LnJlY2lwaWVudHMubGVuZ3RoJiYoZS5hdHRyaWJ1dGVzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiB0LmF0dHJpYnV0ZXMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4oMCxyLmNvbXBhcmVBdHRyaWJ1dGVzKShlLHQpfSl9KSYmZS5sYXVuY2hOYW1lcy5zb3J0KCkuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIHQubGF1bmNoTmFtZXMuaW5jbHVkZXMoZSl9KSYmZS5yZWNpcGllbnRzLnNvcnQoKS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWNpcGllbnRzLmluY2x1ZGVzKGUpfSkpKSkpfSxzPXQudmFsaWRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYXNlcztyZXR1cm57Y2FzZXM6dC5tYXAoZnVuY3Rpb24oZSxuKXtpZigwPT09ZS5yZWNpcGllbnRzLmxlbmd0aCYmIWUuaW5mb3JtT3duZXIpcmV0dXJue2NvbmZpcm1lZDoiZXJyb3IiLHJlY2lwaWVudHM6InJlY2lwaWVudHNIaW50In07aWYodC5sZW5ndGg+MSl7aWYodC5maW5kKGZ1bmN0aW9uKHQscil7cmV0dXJuIG8odCxlKSYmciE9PW59KSlyZXR1cm57Y29uZmlybWVkOiJoYXNEdXBsaWNhdGVzIn19cmV0dXJuIG51bGx9KS5maWx0ZXIoQm9vbGVhbil9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocywidmFsaWRhdGUiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25DYXNlRm9ybS92YWxpZGF0aW9uLmpzIiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobywiY29tcGFyZUNhc2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uQ2FzZUZvcm0vdmFsaWRhdGlvbi5qcyIpKX0oKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOb3RpZmljYXRpb25zRW5hYmxlRm9ybSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTm90aWZpY2F0aW9uc0VuYWJsZUZvcm19fSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uc0VuYWJsZUZvcm0vbm90aWZpY2F0aW9uc0VuYWJsZUZvcm0uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob3RpZmljYXRpb25zRW5hYmxlRm9ybT12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlZHV4LWZvcm0vZXMvaW5kZXguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEQ9cihMKSx3PW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0QmlnU3dpdGNoZXIvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2Zvcm1GaWVsZC9pbmRleC5qcyIpLEk9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL2NvbnN0YW50cy5qcyIpLFA9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnNjc3MiKSxOPXIoUCksSD17Tm90aWZpY2F0aW9uc0VuYWJsZUZvcm06e2Rpc3BsYXlOYW1lOiJOb3RpZmljYXRpb25zRW5hYmxlRm9ybSJ9fSxGPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxCPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxVPSgwLGouZGVmaW5lTWVzc2FnZXMpKHt0b2dnbGVOb3RpZmljYXRpb25zTGFiZWw6e2lkOiJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50b2dnbGVOb3RpZmljYXRpb25zTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJFLW1haWwgbm90aWZpY2F0aW9uIn0sdG9nZ2xlTm90aWZpY2F0aW9uc05vdGU6e2lkOiJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50b2dnbGVOb3RpZmljYXRpb25zTm90ZSIsZGVmYXVsdE1lc3NhZ2U6IlNlbmQgZS1tYWlsIG5vdGlmaWNhdGlvbnMgYWJvdXQgbGF1bmNoZXMgZmluaXNoZWQifSx0dXJuT246e2lkOiJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50dXJuT24iLGRlZmF1bHRNZXNzYWdlOiJPbiJ9LHR1cm5PZmY6e2lkOiJOb3RpZmljYXRpb25zRW5hYmxlRm9ybS50dXJuT2ZmIixkZWZhdWx0TWVzc2FnZToiT2ZmIn19KSxHPUQuZGVmYXVsdC5iaW5kKE4uZGVmYXVsdCksej10Lk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRihCKHQsZSksZSl9fSgiTm90aWZpY2F0aW9uc0VuYWJsZUZvcm0iKSgobz0oMCx4LnJlZHV4Rm9ybSkoe2Zvcm06Im5vdGlmaWNhdGlvbnNFbmFibGVGb3JtIixkZXN0cm95T25Vbm1vdW50OiExfSksKDAsai5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxtLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXREcm9wZG93bklucHV0Q29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREcm9wZG93bklucHV0Q29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsbS5kZWZhdWx0KShyLG8pfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RHJvcGRvd25JbnB1dENvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7dmFsdWU6ITAsbGFiZWw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoVS50dXJuT24pfSx7dmFsdWU6ITEsbGFiZWw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoVS50dXJuT2ZmKX1dfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLnJlYWRPbmx5O3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChULkZyYWdtZW50LG51bGwsQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJlbWFpbC1ub3RpZmljYXRpb24tdG9nZ2xlLS1kZXNrdG9wIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGsuRm9ybUZpZWxkLHtsYWJlbDp0LmZvcm1hdE1lc3NhZ2UoVS50b2dnbGVOb3RpZmljYXRpb25zTGFiZWwpLGxhYmVsV2lkdGg6SS5sYWJlbFdpZHRoLGN1c3RvbUJsb2NrOntub2RlOkEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJwIixudWxsLHQuZm9ybWF0TWVzc2FnZShVLnRvZ2dsZU5vdGlmaWNhdGlvbnNOb3RlKSl9LG5hbWU6ImVuYWJsZWQiLGRpc2FibGVkOm4sZm9ybWF0OkJvb2xlYW4scGFyc2U6Qm9vbGVhbn0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5JbnB1dEJpZ1N3aXRjaGVyLG51bGwpKSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJlbWFpbC1ub3RpZmljYXRpb24tdG9nZ2xlLS1tb2JpbGUiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5Gb3JtRmllbGQse2xhYmVsOnQuZm9ybWF0TWVzc2FnZShVLnRvZ2dsZU5vdGlmaWNhdGlvbnNMYWJlbCksY3VzdG9tQmxvY2s6e25vZGU6QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsdC5mb3JtYXRNZXNzYWdlKFUudG9nZ2xlTm90aWZpY2F0aW9uc05vdGUpKX0sbmFtZToiZW5hYmxlZCIsZmllbGRXcmFwcGVyQ2xhc3NOYW1lOkcoImZvcm0taW5wdXQiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5JbnB1dERyb3Bkb3duLHtvcHRpb25zOnRoaXMuZ2V0RHJvcGRvd25JbnB1dENvbmZpZygpfSkpKSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW5pdGlhbGl6ZTpSLmRlZmF1bHQuZnVuYyxlbmFibGVkOlIuZGVmYXVsdC5vYmplY3QsaW50bDpqLmludGxTaGFwZS5pc1JlcXVpcmVkLHJlYWRPbmx5OlIuZGVmYXVsdC5ib29sfSxpLmRlZmF1bHRQcm9wcz17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sZW5hYmxlZDp7fSxyZWFkT25seTohMH0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIk5vdGlmaWNhdGlvbnNFbmFibGVGb3JtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvbm90aWZpY2F0aW9uc0VuYWJsZUZvcm0vbm90aWZpY2F0aW9uc0VuYWJsZUZvcm0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS9ub3RpZmljYXRpb25zRW5hYmxlRm9ybS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2Zvcm1zL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtL25vdGlmaWNhdGlvbnNFbmFibGVGb3JtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZm9ybS1pbnB1dCI6Im5vdGlmaWNhdGlvbnNFbmFibGVGb3JtX19mb3JtLWlucHV0X19fMlBVTTgiLCJlbWFpbC1ub3RpZmljYXRpb24tdG9nZ2xlLS1tb2JpbGUiOiJub3RpZmljYXRpb25zRW5hYmxlRm9ybV9fZW1haWwtbm90aWZpY2F0aW9uLXRvZ2dsZS0tbW9iaWxlX19fMnBzNHMiLCJlbWFpbC1ub3RpZmljYXRpb24tdG9nZ2xlLS1kZXNrdG9wIjoibm90aWZpY2F0aW9uc0VuYWJsZUZvcm1fX2VtYWlsLW5vdGlmaWNhdGlvbi10b2dnbGUtLWRlc2t0b3BfX184d0xsXyJ9fSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbm90aWZpY2F0aW9uc1RhYi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm90aWZpY2F0aW9uc1RhYiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTm90aWZpY2F0aW9uc1RhYn19KTt2YXIgbz1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbW9kYWxzL2luZGV4LmpzIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uRGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsfX0pfSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL21vZGFscy9kZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWw9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tb2RhbC9pbmRleC5qcyIpLGs9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL21vZGFscy9kZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwuc2NzcyIpLEk9cihrKSxQPXtEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWw6e2Rpc3BsYXlOYW1lOiJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwifX0sTj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbW9kYWxzL2RlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5qc3giLGNvbXBvbmVudHM6UCxsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxIPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9tb2RhbHMvZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmpzeCIsY29tcG9uZW50czpQLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLEY9eC5kZWZhdWx0LmJpbmQoSS5kZWZhdWx0KSxCPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHt0aXRsZTp7aWQ6IkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC50aXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkRlbGV0ZSBOb3RpZmljYXRpb24gUnVsZSJ9LG1lc3NhZ2U6e2lkOiJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwubWVzc2FnZSIsZGVmYXVsdE1lc3NhZ2U6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgbm90aWZpY2F0aW9uICBydWxlIDxiPntudW1iZXJ9PC9iPj8ifSxzdWJtaXRCdXR0b246e2lkOiJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwuc3VibWl0QnV0dG9uIixkZWZhdWx0TWVzc2FnZToiRGVsZXRlIn0sY2FuY2VsQnV0dG9uOntpZDoiRGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmNhbmNlbEJ1dHRvbiIsZGVmYXVsdE1lc3NhZ2U6IkNhbmNlbCJ9fSksVT10LkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE4oSCh0LGUpLGUpfX0oIkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbCIpKChvPSgwLE0ud2l0aE1vZGFsKSgiZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsIikpKHM9KDAsTC5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxkLmRlZmF1bHQpKHRoaXMsdCksKDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bCxuPWUuZGF0YSxyPW4uaW5kZXgsbz1uLm9uU3VibWl0O3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLk1vZGFsTGF5b3V0LHt0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoQi50aXRsZSksb2tCdXR0b246e3RleHQ6dC5mb3JtYXRNZXNzYWdlKEIuc3VibWl0QnV0dG9uKSxkYW5nZXI6ITAsb25DbGljazpmdW5jdGlvbihlKXtvKCksZSgpfX0sY2FuY2VsQnV0dG9uOnt0ZXh0OnQuZm9ybWF0TWVzc2FnZShCLmNhbmNlbEJ1dHRvbil9fSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkYoIm1lc3NhZ2UiKX0sKDAsdy5kZWZhdWx0KSh0LmZvcm1hdE1lc3NhZ2UoQi5tZXNzYWdlLHtudW1iZXI6cn0pKSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxkYXRhOlIuZGVmYXVsdC5vYmplY3R9LGkuZGVmYXVsdFByb3BzPXtkYXRhOnt9fSxzPWEpKXx8cyl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9tb2RhbHMvZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbW9kYWxzL2RlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL21vZGFscy9kZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbW9kYWxzL2RlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17bWVzc2FnZToiZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsX19tZXNzYWdlX19fSzlxU3UifX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9tb2RhbHMvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9tb2RhbHMvZGVsZXRlTm90aWZpY2F0aW9uQ2FzZU1vZGFsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWxldGVOb3RpZmljYXRpb25DYXNlTW9kYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkRlbGV0ZU5vdGlmaWNhdGlvbkNhc2VNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9ub3RpZmljYXRpb25zVGFiLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTm90aWZpY2F0aW9uc1RhYj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLE09bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksaz1yKE0pLEk9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wZXJtaXNzaW9ucy5qcyIpLFA9bigiLi9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvZm9ybXMvaW5kZXguanMiKSxCPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9mb3Jtcy9jb25zdGFudHMuanMiKSxVPW4oIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9ub3RpZmljYXRpb25zVGFiLnNjc3MiKSxHPXIoVSksej17Tm90aWZpY2F0aW9uc1RhYjp7ZGlzcGxheU5hbWU6Ik5vdGlmaWNhdGlvbnNUYWIifX0sVj0oMCx4LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbm90aWZpY2F0aW9uc1RhYi5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W1IuZGVmYXVsdF19KSxXPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9ub3RpZmljYXRpb25zVGFiLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLFk9ay5kZWZhdWx0LmJpbmQoRy5kZWZhdWx0KSxxPXQuTm90aWZpY2F0aW9uc1RhYj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFYoVyh0LGUpLGUpfX0oIk5vdGlmaWNhdGlvbnNUYWIiKSgobz0oMCx3LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0Um9sZTooMCxILmFjdGl2ZVByb2plY3RSb2xlU2VsZWN0b3IpKGUpLHVzZXJSb2xlOigwLEgudXNlckFjY291bnRSb2xlU2VsZWN0b3IpKGUpLGVuYWJsZWQ6KDAsTi5wcm9qZWN0Tm90aWZpY2F0aW9uc0VuYWJsZWRTZWxlY3RvcikoZSksY2FzZXM6KDAsTi5wcm9qZWN0Tm90aWZpY2F0aW9uc0Nhc2VzU2VsZWN0b3IpKGUpfX0se3VwZGF0ZTpOLnVwZGF0ZVByb2plY3ROb3RpZmljYXRpb25zQ29uZmlnfSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLG0uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsRS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuc3VibWl0Rm9ybT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc3VibWl0Rm9ybV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pc0FibGVUb0VkaXRGb3JtPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzQWJsZVRvU3VibWl0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0FibGVUb1N1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9fY29udmVydE5vdGlmaWNhdGlvbnNDYXNlRm9yU3VibWlzc2lvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29udmVydE5vdGlmaWNhdGlvbnNDYXNlRm9yU3VibWlzc2lvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNBYmxlVG9TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzQWJsZVRvU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zdWJtaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9KGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pLG49dGhpcy5wcm9wcyxyPW4udXBkYXRlLG89bi5lbmFibGVkLHM9bi5jYXNlcyxpPXQudmFsaWQsYT10LmRpcnR5LGw9KDAsZC5kZWZhdWx0KSh7ZW5hYmxlZDpvLGNhc2VzOnN9LGUpLHU9KHMmJnMubGVuZ3RoKT4oZS5jYXNlcyYmZS5jYXNlcy5sZW5ndGgpLGM9dGhpcy5pc0FibGVUb1N1Ym1pdChsKSxfPXRoaXMucHJlcGFyZURhdGEobCk7YyYmYSYmKGl8fHUpJiZyKF8pfX0se2tleToiX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0FibGVUb0VkaXRGb3JtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsUC5jYW5Db25maWdyZUVtYWlsTm90aWZpY2F0aW9ucykodGhpcy5wcm9wcy51c2VyUm9sZSx0aGlzLnByb3BzLnByb2plY3RSb2xlKX19LHtrZXk6Il9faXNBYmxlVG9TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzQWJsZVRvU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0FibGVUb1N1Ym1pdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNBYmxlVG9TdWJtaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzQWJsZVRvU3VibWl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNhc2VzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbmZpcm1lZH0pfX0se2tleToiX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5mb3JtT3duZXIsbj1lLnJlY2lwaWVudHMscj1lLnNlbmRDYXNlLG89ZS5sYXVuY2hOYW1lcyxzPXZvaWQgMD09PW8/W106byxpPWUuYXR0cmlidXRlcztyZXR1cm57bGF1bmNoTmFtZXM6cyxzZW5kQ2FzZTpyLGF0dHJpYnV0ZXM6dm9pZCAwPT09aT9bXTppLHJlY2lwaWVudHM6dD9bXS5jb25jYXQoKDAsdS5kZWZhdWx0KShuKSxbSS5PV05FUl0pOm59fX0se2tleToicHJlcGFyZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PShlLmNhc2VzJiZlLmNhc2VzLmxlbmd0aCYmZS5jYXNlc3x8W0IuZGVmYXVsdENhc2VdKS5tYXAodGhpcy5jb252ZXJ0Tm90aWZpY2F0aW9uc0Nhc2VGb3JTdWJtaXNzaW9uKTtyZXR1cm4oMCxkLmRlZmF1bHQpKHt9LGUse2Nhc2VzOnR9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5lbmFibGVkLG49ZS5jYXNlcyxyPSF0aGlzLmlzQWJsZVRvRWRpdEZvcm0oKTtyZXR1cm4gUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpZKCJub3RpZmljYXRpb24tdGFiIil9LFIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuTm90aWZpY2F0aW9uc0VuYWJsZUZvcm0se2luaXRpYWxWYWx1ZXM6e2VuYWJsZWQ6dH0sZW5hYmxlUmVpbml0aWFsaXplOiEwLG9uQ2hhbmdlOnRoaXMuc3VibWl0Rm9ybSxyZWFkT25seTpyfSksdCYmUi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRi5Ob3RpZmljYXRpb25DYXNlRm9ybSx7aW5pdGlhbFZhbHVlczp7Y2FzZXM6bn0sb25DaGFuZ2U6dGhpcy5zdWJtaXRGb3JtLHJlYWRPbmx5OnIsZW5hYmxlUmVpbml0aWFsaXplOiEwfSkpfX1dKSx0fShTLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2VuYWJsZWQ6RC5kZWZhdWx0LmJvb2wsY2FzZXM6RC5kZWZhdWx0LmFycmF5LHVwZGF0ZTpELmRlZmF1bHQuZnVuYyxvblN1Ym1pdDpELmRlZmF1bHQuZnVuYyxzaG93TW9kYWw6RC5kZWZhdWx0LmZ1bmMscHJvamVjdFJvbGU6RC5kZWZhdWx0LnN0cmluZyx1c2VyUm9sZTpELmRlZmF1bHQuc3RyaW5nfSxpLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMSxjYXNlczpbXSx1cGRhdGU6ZnVuY3Rpb24oKXt9LG9uU3VibWl0OmZ1bmN0aW9uKCl7fSxzaG93TW9kYWw6ZnVuY3Rpb24oKXt9LHByb2plY3RSb2xlOiIiLHVzZXJSb2xlOiIifSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIk5vdGlmaWNhdGlvbnNUYWIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9ub3RpZmljYXRpb25zVGFiLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL25vdGlmaWNhdGlvbnNUYWIvbm90aWZpY2F0aW9uc1RhYi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvbm90aWZpY2F0aW9uc1RhYi9ub3RpZmljYXRpb25zVGFiLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsibm90aWZpY2F0aW9uLXRhYiI6Im5vdGlmaWNhdGlvbnNUYWJfX25vdGlmaWNhdGlvbi10YWJfX18yODNLSSJ9fSwiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9zZXR0aW5nc1BhZ2UuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZXR0aW5nc1BhZ2U9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXIvZGlzdC9pbmRleC5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGs9cihNKSxJPW4oIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9zZXR0aW5nc1RhYnMuanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksRj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLEI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvaW5kZXguanMiKSxVPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9uYXZpZ2F0aW9uVGFicy9pbmRleC5qcyIpLEc9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9nZW5lcmFsVGFiL2luZGV4LmpzIiksej1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2F1dG9BbmFseXNpc1RhYi9pbmRleC5qcyIpLFY9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9ub3RpZmljYXRpb25zVGFiL2luZGV4LmpzIiksVz1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2RlbW9EYXRhVGFiL2luZGV4LmpzIiksWT1uKCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL2ludGVncmF0aW9uc1RhYi9pbmRleC5qcyIpLHE9bigiLi9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9zZXR0aW5nc1BhZ2Uuc2NzcyIpLEs9cihxKSxYPXtTZXR0aW5nc1BhZ2U6e2Rpc3BsYXlOYW1lOiJTZXR0aW5nc1BhZ2UifX0sJD0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL3NldHRpbmdzUGFnZS5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxRPSgwLEEuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvc2V0dGluZ3NQYWdlLmpzeCIsY29tcG9uZW50czpYLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLEo9ay5kZWZhdWx0LmJpbmQoSy5kZWZhdWx0KSxaPSgwLHcuZGVmaW5lTWVzc2FnZXMpKHtnZW5lcmFsOntpZDoiU2V0dGluZ3NQYWdlLmdlbmVyYWwiLGRlZmF1bHRNZXNzYWdlOiJHZW5lcmFsIn0sbm90aWZpY2F0aW9uczp7aWQ6IlNldHRpbmdzUGFnZS5ub3RpZmljYXRpb25zIixkZWZhdWx0TWVzc2FnZToiTm90aWZpY2F0aW9ucyJ9LGludGVncmF0aW9uczp7aWQ6IlNldHRpbmdzUGFnZS5pbnRlZ3JhdGlvbnMiLGRlZmF1bHRNZXNzYWdlOiJJbnRlZ3JhdGlvbnMifSxkZWZlY3Q6e2lkOiJTZXR0aW5nc1BhZ2UuZGVmZWN0IixkZWZhdWx0TWVzc2FnZToiRGVmZWN0IHR5cGVzIn0sYW5hbHlzaXM6e2lkOiJTZXR0aW5nc1BhZ2UuYW5hbHlzaXMiLGRlZmF1bHRNZXNzYWdlOiJBdXRvLUFuYWx5c2lzIn0sZGVtb0RhdGE6e2lkOiJTZXR0aW5nc1BhZ2UuZGVtb0RhdGEiLGRlZmF1bHRNZXNzYWdlOiJEZW1vIGRhdGEifX0pLGVlPXQuU2V0dGluZ3NQYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gJChRKHQsZSksZSl9fSgiU2V0dGluZ3NQYWdlIikoKG89KDAsTC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57YWN0aXZlVGFiOigwLE4uc2V0dGluZ3NUYWJTZWxlY3RvcikoZSksYWNjb3VudFJvbGU6KDAsSC51c2VyQWNjb3VudFJvbGVTZWxlY3RvcikoZSksdXNlclJvbGU6KDAsSC5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yKShlKX19LHtjaGFuZ2VUYWI6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsRC5yZWRpcmVjdCkoZSl9fSkpKHM9KDAsdy5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmNyZWF0ZVRhYnNDb25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NyZWF0ZVRhYnNDb25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVUYWJzQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0oZT17fSwoMCx1LmRlZmF1bHQpKGUsUC5HRU5FUkFMLHtuYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFouZ2VuZXJhbCksbGluazp0aGlzLnByb3BzLmNyZWF0ZVRhYkxpbmsoUC5HRU5FUkFMKSxjb21wb25lbnQ6Ty5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5HZW5lcmFsVGFiLG51bGwpLGV2ZW50SW5mbzpGLlNFVFRJTkdTX1BBR0VfRVZFTlRTLkdFTkVSQUxfVEFCfSksKDAsdS5kZWZhdWx0KShlLFAuSU5URUdSQVRJT05TLHtuYW1lOk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLHRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFouaW50ZWdyYXRpb25zKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChCLkJldGFCYWRnZSx7Y2xhc3NOYW1lOkooImJldGEiKX0pKSxsaW5rOnRoaXMucHJvcHMuY3JlYXRlVGFiTGluayhQLklOVEVHUkFUSU9OUyksY29tcG9uZW50Ok8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFkuSW50ZWdyYXRpb25zVGFiLG51bGwpLGV2ZW50SW5mbzpGLlNFVFRJTkdTX1BBR0VfRVZFTlRTLklOVEVHUkFUSU9OU19UQUJ9KSwoMCx1LmRlZmF1bHQpKGUsUC5OT1RJRklDQVRJT05TLHtuYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFoubm90aWZpY2F0aW9ucyksbGluazp0aGlzLnByb3BzLmNyZWF0ZVRhYkxpbmsoUC5OT1RJRklDQVRJT05TKSxjb21wb25lbnQ6Ty5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVi5Ob3RpZmljYXRpb25zVGFiLG51bGwpLGV2ZW50SW5mbzpGLlNFVFRJTkdTX1BBR0VfRVZFTlRTLk5PVElGSUNBVElPTlNfVEFCfSksKDAsdS5kZWZhdWx0KShlLFAuREVGRUNULHtuYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFouZGVmZWN0KSxsaW5rOnRoaXMucHJvcHMuY3JlYXRlVGFiTGluayhQLkRFRkVDVCksY29tcG9uZW50Ok8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsImRlZmVjdCIpLGV2ZW50SW5mbzpGLlNFVFRJTkdTX1BBR0VfRVZFTlRTLkRFRkVDVF9UWVBFX1RBQn0pLCgwLHUuZGVmYXVsdCkoZSxQLkFOQUxZU0lTLHtuYW1lOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFouYW5hbHlzaXMpLGxpbms6dGhpcy5wcm9wcy5jcmVhdGVUYWJMaW5rKFAuQU5BTFlTSVMpLGNvbXBvbmVudDpPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh6LkF1dG9BbmFseXNpc1RhYixudWxsKSxldmVudEluZm86Ri5TRVRUSU5HU19QQUdFX0VWRU5UUy5BVVRPX0FOQUxZU0lTX1RBQn0pLCgwLHUuZGVmYXVsdCkoZSxQLkRFTU9fREFUQSx7bmFtZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShaLmRlbW9EYXRhKSxsaW5rOnRoaXMucHJvcHMuY3JlYXRlVGFiTGluayhQLkRFTU9fREFUQSksY29tcG9uZW50Ok8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFcuRGVtb0RhdGFUYWIsbnVsbCksZXZlbnRJbmZvOkYuU0VUVElOR1NfUEFHRV9FVkVOVFMuREVNT19EQVRBX1RBQn0pLGUpO3JldHVybigwLEkuY2FuU2VlRGVtb0RhdGEpKHRoaXMucHJvcHMuYWNjb3VudFJvbGUsdGhpcy5wcm9wcy51c2VyUm9sZSl8fGRlbGV0ZSB0W1AuREVNT19EQVRBXSx0fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkooInNldHRpbmdzLXBhZ2UiKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVS5OYXZpZ2F0aW9uVGFicyx7Y29uZmlnOnRoaXMuY3JlYXRlVGFic0NvbmZpZygpLGFjdGl2ZVRhYjp0aGlzLnByb3BzLmFjdGl2ZVRhYixvbkNoYW5nZVRhYjp0aGlzLnByb3BzLmNoYW5nZVRhYixtb2JpbGVEaXNhYmxlZDohMH0pKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtwcm9qZWN0SWQ6eC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGNyZWF0ZVRhYkxpbms6eC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbnRsOncuaW50bFNoYXBlLmlzUmVxdWlyZWQsY2hhbmdlVGFiOnguZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsYWN0aXZlVGFiOnguZGVmYXVsdC5zdHJpbmcsYWNjb3VudFJvbGU6eC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHVzZXJSb2xlOnguZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e2FjdGl2ZVRhYjpQLkdFTkVSQUx9LHM9YSkpfHxzKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGVlLCJTZXR0aW5nc1BhZ2UiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2NvbW1vbi9zZXR0aW5nc1BhZ2Uvc2V0dGluZ3NQYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEosImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL3NldHRpbmdzUGFnZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihaLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvY29tbW9uL3NldHRpbmdzUGFnZS9zZXR0aW5nc1BhZ2UuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9jb21tb24vc2V0dGluZ3NQYWdlL3NldHRpbmdzUGFnZS5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InNldHRpbmdzLXBhZ2UiOiJzZXR0aW5nc1BhZ2VfX3NldHRpbmdzLXBhZ2VfX18xamo4aiIsYmV0YToic2V0dGluZ3NQYWdlX19iZXRhX19fM1NhOHMifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9hcGlQYWdlL2FwaVBhZ2UuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BcGlQYWdlPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksUj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvZGlzdC9zd2FnZ2VyLXVpLmpzIiksTT1yKHcpO24oIi4vbm9kZV9tb2R1bGVzL3N3YWdnZXItdWkvZGlzdC9zd2FnZ2VyLXVpLmNzcyIpO3ZhciBrPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksST1uKCIuL3NyYy9jb250cm9sbGVycy9hdXRoL2luZGV4LmpzIiksUD1uKCIuL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy90b2dnbGVCdXR0b24vaW5kZXguanMiKSxIPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9hcGlQYWdlL2FwaVBhZ2Uuc2NzcyIpLEY9cihIKSxCPXtBcGlQYWdlOntkaXNwbGF5TmFtZToiQXBpUGFnZSJ9fSxVPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9hcGlQYWdlL2FwaVBhZ2UuanN4Iixjb21wb25lbnRzOkIsbG9jYWxzOltlXSxpbXBvcnRzOltBLmRlZmF1bHRdfSksRz0oMCx2LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvYXBpUGFnZS9hcGlQYWdlLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLHo9ai5kZWZhdWx0LmJpbmQoRi5kZWZhdWx0KSxWPSgwLFMuZGVmaW5lTWVzc2FnZXMpKHthcGlQYWdlVGl0bGU6e2lkOiJBcGlQYWdlLnRpdGxlIixkZWZhdWx0TWVzc2FnZToiQVBJIERvY3VtZW50YXRpb24ifX0pLFc9dC5BcGlQYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShHKHQsZSksZSl9fSgiQXBpUGFnZSIpKChvPSgwLHguY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Rva2VuOigwLEkudG9rZW5TZWxlY3RvcikoZSl9fSkpKHM9KDAsUy5pbmplY3RJbnRsKSgoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLG0uZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXthcGlUeXBlOmsuREVGQVVMVF9BUElfVVJMX1BSRUZJWH0sci5nZXRCcmVhZGNydW1icz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudGFiQ2hhbmdlSGFuZGxlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190YWJDaGFuZ2VIYW5kbGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuY3JlYXRlU3dhZ2dlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlU3dhZ2dlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50YWJJdGVtcz1be3ZhbHVlOmsuREVGQVVMVF9BUElfVVJMX1BSRUZJWCxsYWJlbDoiQVBJIn0se3ZhbHVlOmsuVUFUX0FQSV9VUkxfUFJFRklYLGxhYmVsOiJVQVQifV0sbz1uLCgwLG0uZGVmYXVsdCkocixvKX1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX2NyZWF0ZVN3YWdnZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZVN3YWdnZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RhYkNoYW5nZUhhbmRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZVN3YWdnZXIodGhpcy5zdGF0ZS5hcGlUeXBlKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3t0aXRsZTp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShWLmFwaVBhZ2VUaXRsZSl9XX19LHtrZXk6Il9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190YWJDaGFuZ2VIYW5kbGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RhYkNoYW5nZUhhbmRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdGFiQ2hhbmdlSGFuZGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190YWJDaGFuZ2VIYW5kbGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZSh7YXBpVHlwZTplfSksdGhpcy5jcmVhdGVTd2FnZ2VyKGUpfX0se2tleToiX19jcmVhdGVTd2FnZ2VyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVTd2FnZ2VyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVTd2FnZ2VyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVTd2FnZ2VyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVTd2FnZ2VyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KDAsTS5kZWZhdWx0KSh7dXJsOmsuVVJMUy5hcGlEb2NzKGUpLGRvbV9pZDoiI3N3YWdnZXIiLHN1cHBvcnRlZFN1Ym1pdE1ldGhvZHM6WyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIiwicGF0Y2giLCJoZWFkIiwib3B0aW9ucyJdLHZhbGlkYXRvclVybDpudWxsLGRvY0V4cGFuc2lvbjoibm9uZSIsYXBpc1NvcnRlcjoiYWxwaGEiLGpzb25FZGl0b3I6ITEsZGVmYXVsdE1vZGVsUmVuZGVyaW5nOiJzY2hlbWEiLHNob3dSZXF1ZXN0SGVhZGVyczohMSxzaG93T3BlcmF0aW9uSWRzOiExLGNvbmZpZ3M6e3ByZUZldGNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLmhlYWRlcnMuQXV0aG9yaXphdGlvbj10LnByb3BzLnRva2VuLGV9fX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLlBhZ2VMYXlvdXQsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLlBhZ2VIZWFkZXIse2JyZWFkY3J1bWJzOnRoaXMuZ2V0QnJlYWRjcnVtYnMoKX0pLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuUGFnZVNlY3Rpb24sbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImFwaS1wYWdlLWNvbnRlbnQtd3JhcHBlciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnooImFwaS10eXBlLXN3aXRjaGVyIil9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eigic3dpdGNoZXItd3JhcHBlciIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLlRvZ2dsZUJ1dHRvbix7aXRlbXM6dGhpcy50YWJJdGVtcyx2YWx1ZTp0aGlzLnN0YXRlLmFwaVR5cGUsb25DaGFuZ2U6dGhpcy50YWJDaGFuZ2VIYW5kbGV9KSkpLEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtpZDoic3dhZ2dlciIsY2xhc3NOYW1lOnooInN3YWdnZXItd3JhcHBlciIpfSkpKSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDpTLmludGxTaGFwZS5pc1JlcXVpcmVkLHRva2VuOkQuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiQXBpUGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2FwaVBhZ2UvYXBpUGFnZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2FwaVBhZ2UvYXBpUGFnZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2FwaVBhZ2UvYXBpUGFnZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9hcGlQYWdlL2FwaVBhZ2Uuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhcGktcGFnZS1jb250ZW50LXdyYXBwZXIiOiJhcGlQYWdlX19hcGktcGFnZS1jb250ZW50LXdyYXBwZXJfX18yRXgtTSIsImFwaS10eXBlLXN3aXRjaGVyIjoiYXBpUGFnZV9fYXBpLXR5cGUtc3dpdGNoZXJfX18yVXpaUiIsInN3aXRjaGVyLXdyYXBwZXIiOiJhcGlQYWdlX19zd2l0Y2hlci13cmFwcGVyX19fanI2YnUifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9hcGlQYWdlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvYXBpUGFnZS9hcGlQYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBcGlQYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BcGlQYWdlfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvYmV0YUJhZGdlLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5CZXRhQmFkZ2U9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksZD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2JldGFCYWRnZS9iZXRhQmFkZ2Uuc2NzcyIpLF89cihkKSxwPXUuZGVmYXVsdC5iaW5kKF8uZGVmYXVsdCksZj10LkJldGFCYWRnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZTtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6cCgiYmV0YS1iYWRnZSIsdCl9LHMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkJldGFCYWRnZS5iZXRhIixkZWZhdWx0TWVzc2FnZToiYmV0YSJ9KSl9O2YucHJvcFR5cGVzPXtjbGFzc05hbWU6YS5kZWZhdWx0LnN0cmluZ30sZi5kZWZhdWx0UHJvcHM9e2NsYXNzTmFtZToiIn07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGYsIkJldGFCYWRnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvYmV0YUJhZGdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2JldGFCYWRnZS9iZXRhQmFkZ2UuanN4IikpfSgpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvYmV0YUJhZGdlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYmV0YS1iYWRnZSI6ImJldGFCYWRnZV9fYmV0YS1iYWRnZV9fXzEyZXdHIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2JldGFCYWRnZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9iZXRhQmFkZ2UvYmV0YUJhZGdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCZXRhQmFkZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkJldGFCYWRnZX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9hZGREYXNoYm9hcmRCdXR0b24vYWRkRGFzaGJvYXJkQnV0dG9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWRkRGFzaGJvYXJkQnV0dG9uPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx3PXIoRCksTT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxrPXIoTSksST1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2Rhc2hib2FyZC9pbmRleC5qcyIpLE49bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxIPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvYWRkRGFzaGJvYXJkQnV0dG9uL2ltZy9pYy1hZGQtZGFzaC1pbmxpbmUuc3ZnIiksQj1yKEYpLFU9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2FkZERhc2hib2FyZEJ1dHRvbi9hZGREYXNoYm9hcmRCdXR0b24uc2NzcyIpLEc9cihVKSx6PXtBZGREYXNoYm9hcmRCdXR0b246e2Rpc3BsYXlOYW1lOiJBZGREYXNoYm9hcmRCdXR0b24ifX0sVj0oMCxTLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvYWRkRGFzaGJvYXJkQnV0dG9uL2FkZERhc2hib2FyZEJ1dHRvbi5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxXPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9hZGREYXNoYm9hcmRCdXR0b24vYWRkRGFzaGJvYXJkQnV0dG9uLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOltDLmRlZmF1bHQseS5kZWZhdWx0XX0pLFk9ay5kZWZhdWx0LmJpbmQoRy5kZWZhdWx0KSxxPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHthZGRNb2RhbFRpdGxlOntpZDoiRGFzaGJvYXJkRm9ybS5hZGRNb2RhbFRpdGxlIixkZWZhdWx0TWVzc2FnZToiQWRkIE5ldyBEYXNoYm9hcmQifX0pLEs9dC5BZGREYXNoYm9hcmRCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBWKFcodCxlKSxlKX19KCJBZGREYXNoYm9hcmRCdXR0b24iKSgobz0oMCx4LmNvbm5lY3QpKG51bGwse3Nob3dNb2RhbDpOLnNob3dNb2RhbEFjdGlvbixhZGREYXNoYm9hcmQ6UC5hZGREYXNoYm9hcmRBY3Rpb259KSxzPSgwLGouZGVmYXVsdCkoKSxvKGk9KDAsTC5pbmplY3RJbnRsKShpPXMoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5vbkFkZERhc2hib2FyZEl0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQWRkRGFzaGJvYXJkSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGguZGVmYXVsdCkocixvKX1yZXR1cm4oMCxiLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJfX29uQWRkRGFzaGJvYXJkSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25BZGREYXNoYm9hcmRJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkFkZERhc2hib2FyZEl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQWRkRGFzaGJvYXJkSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25BZGREYXNoYm9hcmRJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkFkZERhc2hib2FyZEl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQWRkRGFzaGJvYXJkSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNob3dNb2RhbCxuPWUuYWRkRGFzaGJvYXJkLHI9ZS5ldmVudHNJbmZvO2UudHJhY2tpbmcudHJhY2tFdmVudChILkRBU0hCT0FSRF9QQUdFX0VWRU5UUy5BRERfTkVXX0RBU0hCT0FSRF9CVE4pLHQoe2lkOiJkYXNoYm9hcmRBZGRFZGl0TW9kYWwiLGRhdGE6e29uU3VibWl0Om4sdHlwZToiYWRkIixldmVudHNJbmZvOnJ9fSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pbnRsO3JldHVybiBDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlkoImFkZC1kYXNoYm9hcmQtYnRuIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuR2hvc3RCdXR0b24se29uQ2xpY2s6dGhpcy5vbkFkZERhc2hib2FyZEl0ZW0saWNvbjpCLmRlZmF1bHQsZ3JheUJvcmRlcjohMH0sZS5mb3JtYXRNZXNzYWdlKHEuYWRkTW9kYWxUaXRsZSkpKX19XSksdH0oQS5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtpbnRsOkwuaW50bFNoYXBlLmlzUmVxdWlyZWQsc2hvd01vZGFsOncuZGVmYXVsdC5mdW5jLGFkZERhc2hib2FyZDp3LmRlZmF1bHQuZnVuYyxldmVudHNJbmZvOncuZGVmYXVsdC5vYmplY3QsdHJhY2tpbmc6dy5kZWZhdWx0LnNoYXBlKHt0cmFja0V2ZW50OncuZGVmYXVsdC5mdW5jLGdldFRyYWNraW5nRGF0YTp3LmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWR9LGEuZGVmYXVsdFByb3BzPXtzaG93TW9kYWw6ZnVuY3Rpb24oKXt9LGFkZERhc2hib2FyZDpmdW5jdGlvbigpe30sZXZlbnRzSW5mbzp7fX0saT1sKSl8fGkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihLLCJBZGREYXNoYm9hcmRCdXR0b24iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9hZGREYXNoYm9hcmRCdXR0b24vYWRkRGFzaGJvYXJkQnV0dG9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvYWRkRGFzaGJvYXJkQnV0dG9uL2FkZERhc2hib2FyZEJ1dHRvbi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihxLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2FkZERhc2hib2FyZEJ1dHRvbi9hZGREYXNoYm9hcmRCdXR0b24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvYWRkRGFzaGJvYXJkQnV0dG9uL2FkZERhc2hib2FyZEJ1dHRvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImFkZC1kYXNoYm9hcmQtYnRuIjoiYWRkRGFzaGJvYXJkQnV0dG9uX19hZGQtZGFzaGJvYXJkLWJ0bl9fX193NzVpIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvYWRkRGFzaGJvYXJkQnV0dG9uL2ltZy9pYy1hZGQtZGFzaC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIC0zLjYgMjAgMjAiPjxnIGZpbGw9IiMxQTlDQjAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTE2LjggOC4yVjVoLTEuNnYzLjJIMTJ2MS42aDMuMlYxM2gxLjZWOS44SDIwVjguMnpNMCAwaDR2M0gwVjB6bTYgMGg0djNINlYwem02IDBoNHYzaC00VjB6TTAgNWg0djNIMFY1em02IDBoNHYzSDZWNXptLTYgNWg0djNIMHYtM3ptNiAwaDR2M0g2di0zeiI+PC9wYXRoPjwvZz48L3N2Zz4nfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2FkZERhc2hib2FyZEJ1dHRvbi9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2FkZERhc2hib2FyZEJ1dHRvbi9hZGREYXNoYm9hcmRCdXR0b24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFkZERhc2hib2FyZEJ1dHRvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQWRkRGFzaGJvYXJkQnV0dG9ufX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2Rhc2hib2FyZFBhZ2VIZWFkZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EYXNoYm9hcmRQYWdlSGVhZGVyPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLHg9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3BhZ2VzL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb250cm9sbGVycy9kYXNoYm9hcmQvaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0RHJvcGRvd24vaW5kZXguanMiKSxOPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9hZGREYXNoYm9hcmRCdXR0b24vaW5kZXguanMiKSxIPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9kYXNoYm9hcmRQYWdlSGVhZGVyLnNjc3MiKSxGPXIoSCksQj17RGFzaGJvYXJkUGFnZUhlYWRlcjp7ZGlzcGxheU5hbWU6IkRhc2hib2FyZFBhZ2VIZWFkZXIifX0sVT0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvZGFzaGJvYXJkUGFnZUhlYWRlci5qc3giLGNvbXBvbmVudHM6Qixsb2NhbHM6W2VdLGltcG9ydHM6W0EuZGVmYXVsdF19KSxHPSgwLHYuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9kYXNoYm9hcmRQYWdlSGVhZGVyLmpzeCIsY29tcG9uZW50czpCLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLHo9dy5kZWZhdWx0LmJpbmQoRi5kZWZhdWx0KSxWPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHthbGxEYXNoYm9hcmRzVGl0bGU6e2lkOiJEYXNoYm9hcmRQYWdlSGVhZGVyLmFsbERhc2hib2FyZHNUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBkYXNoYm9hcmRzIn19KSxXPXQuRGFzaGJvYXJkUGFnZUhlYWRlcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFUoRyh0LGUpLGUpfX0oIkRhc2hib2FyZFBhZ2VIZWFkZXIiKSgobz0oMCxqLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsTS5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpLGRhc2hib2FyZHM6KDAsSS5kYXNoYm9hcmRJdGVtc1NlbGVjdG9yKShlKSxhY3RpdmVJdGVtSWQ6KDAsay5hY3RpdmVEYXNoYm9hcmRJZFNlbGVjdG9yKShlKX19KSkocz0oMCxMLmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGQuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsbS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0RGFzaGJvYXJkUGFnZUl0ZW09ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldERhc2hib2FyZFBhZ2VJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmNyZWF0ZURhc2hib2FyZExpbms9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2VuZXJhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxtLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToiX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlRGFzaGJvYXJkTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlRGFzaGJvYXJkTGlua19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkUGFnZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERhc2hib2FyZFBhZ2VJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREYXNoYm9hcmRQYWdlSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGFzaGJvYXJkUGFnZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERhc2hib2FyZFBhZ2VJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREYXNoYm9hcmRQYWdlSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkUGFnZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57bGFiZWw6QS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5OYXZMaW5rLHtleGFjdDohMCx0bzp7dHlwZTprLlBST0pFQ1RfREFTSEJPQVJEX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMucHJvamVjdElkfX0sY2xhc3NOYW1lOnooImxpbmsiKSxhY3RpdmVDbGFzc05hbWU6eigiYWN0aXZlLWxpbmsiKX0sdGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoVi5hbGxEYXNoYm9hcmRzVGl0bGUpKSx2YWx1ZToiQWxsIn19fSx7a2V5OiJfX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZURhc2hib2FyZExpbmtfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6ay5QUk9KRUNUX0RBU0hCT0FSRF9JVEVNX1BBR0UscGF5bG9hZDp7cHJvamVjdElkOnRoaXMucHJvcHMucHJvamVjdElkLGRhc2hib2FyZElkOmV9fX19LHtrZXk6Il9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dlbmVyYXRlT3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2VuZXJhdGVPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZW5lcmF0ZU9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVyblt0aGlzLmdldERhc2hib2FyZFBhZ2VJdGVtKCldLmNvbmNhdCh0aGlzLnByb3BzLmRhc2hib2FyZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntsYWJlbDpBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4Lk5hdkxpbmsse3RvOmUuY3JlYXRlRGFzaGJvYXJkTGluayh0LmlkKSxjbGFzc05hbWU6eigibGluayIpLGFjdGl2ZUNsYXNzTmFtZTp6KCJhY3RpdmUtbGluayIpfSx0Lm5hbWUpLHZhbHVlOnQuaWR9fSkpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZUl0ZW1JZCxuPWUuZXZlbnRzSW5mbztyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJkYXNoYm9hcmQtcGFnZS1oZWFkZXIiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp6KCJkYXNoYm9hcmRzLW5hdi1saXN0LW1vYmlsZSIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLklucHV0RHJvcGRvd24se29wdGlvbnM6dGhpcy5nZW5lcmF0ZU9wdGlvbnMoKSx2YWx1ZTp0fHwiQWxsIn0pKSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChOLkFkZERhc2hib2FyZEJ1dHRvbix7ZXZlbnRzSW5mbzpufSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCxwcm9qZWN0SWQ6Ui5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGFjdGl2ZUl0ZW1JZDpSLmRlZmF1bHQub25lT2ZUeXBlKFtSLmRlZmF1bHQuc3RyaW5nLFIuZGVmYXVsdC5udW1iZXJdKSxkYXNoYm9hcmRzOlIuZGVmYXVsdC5hcnJheU9mKEkuZGFzaGJvYXJkSXRlbVByb3BUeXBlcyksZXZlbnRzSW5mbzpSLmRlZmF1bHQub2JqZWN0fSxpLmRlZmF1bHRQcm9wcz17YWN0aXZlSXRlbUlkOiIiLGRhc2hib2FyZHM6W10sZXZlbnRzSW5mbzp7fX0scz1hKSl8fHMpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywiRGFzaGJvYXJkUGFnZUhlYWRlciIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2Rhc2hib2FyZFBhZ2VIZWFkZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9kYXNoYm9hcmRQYWdlSGVhZGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvZGFzaGJvYXJkUGFnZUhlYWRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcigiQWxsIiwiREFTSEJPQVJEX1BBR0VfSVRFTV9WQUxVRSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2Rhc2hib2FyZFBhZ2VIZWFkZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvZGFzaGJvYXJkUGFnZUhlYWRlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImRhc2hib2FyZC1wYWdlLWhlYWRlciI6ImRhc2hib2FyZFBhZ2VIZWFkZXJfX2Rhc2hib2FyZC1wYWdlLWhlYWRlcl9fXzFiT3ZPIiwiZGFzaGJvYXJkcy1uYXYtbGlzdC1tb2JpbGUiOiJkYXNoYm9hcmRQYWdlSGVhZGVyX19kYXNoYm9hcmRzLW5hdi1saXN0LW1vYmlsZV9fXzNGYkF1IixsaW5rOiJkYXNoYm9hcmRQYWdlSGVhZGVyX19saW5rX19fMWVHcEEiLCJhY3RpdmUtbGluayI6ImRhc2hib2FyZFBhZ2VIZWFkZXJfX2FjdGl2ZS1saW5rX19fMllYaFoifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGFzaGJvYXJkUGFnZUhlYWRlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kYXNoYm9hcmRQYWdlSGVhZGVyL2Rhc2hib2FyZFBhZ2VIZWFkZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRhc2hib2FyZFBhZ2VIZWFkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkRhc2hib2FyZFBhZ2VIZWFkZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdExpbmsvZGVmZWN0TGluay5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZmVjdExpbms9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYWNraW5nL2J1aWxkL2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLF89cihkKSxwPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIiksZj0oMCxjLmRlZmF1bHQpKCkoKDAsbC5jb25uZWN0KShmdW5jdGlvbihlLHQpe3JldHVybntsaW5rOigwLHAuZGVmZWN0TGlua1NlbGVjdG9yKShlLHQpfX0pKGZ1bmN0aW9uKHQpe3ZhciBuPSh0Lml0ZW1JZCx0LmxpbmspLHI9dC5jaGlsZHJlbixvPSh0LmRlZmVjdHMsdC5ldmVudEluZm8pLGk9dC50cmFja2luZyxsPSh0Lm93bkxpbmtQYXJhbXMsKDAsYS5kZWZhdWx0KSh0LFsiaXRlbUlkIiwibGluayIsImNoaWxkcmVuIiwiZGVmZWN0cyIsImV2ZW50SW5mbyIsInRyYWNraW5nIiwib3duTGlua1BhcmFtcyJdKSk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChfLmRlZmF1bHQsKDAscy5kZWZhdWx0KSh7dG86bn0sbCx7b25DbGljazpmdW5jdGlvbigpe3JldHVybiBvJiZpLnRyYWNrRXZlbnQobyl9fSkscil9KSk7dC5EZWZlY3RMaW5rPWY7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiRGVmZWN0TGluayIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RMaW5rL2RlZmVjdExpbmsuanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdExpbmsvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0TGluay9kZWZlY3RMaW5rLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWZlY3RMaW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RMaW5rfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlSXRlbS9kZWZlY3RUeXBlSXRlbS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGVmZWN0VHlwZUl0ZW09dm9pZCAwO3ZhciBzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1vKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9byh4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPW8odyksaz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksST1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2RlZmVjdFR5cGVJdGVtLnNjc3MiKSxQPW8oSSksTj17RGVmZWN0VHlwZUl0ZW06e2Rpc3BsYXlOYW1lOiJEZWZlY3RUeXBlSXRlbSJ9fSxIPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZUl0ZW0vZGVmZWN0VHlwZUl0ZW0uanN4Iixjb21wb25lbnRzOk4sbG9jYWxzOltlXSxpbXBvcnRzOltTLmRlZmF1bHRdfSksRj0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2RlZmVjdFR5cGVJdGVtLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbXSxpbXBvcnRzOltTLmRlZmF1bHQsVC5kZWZhdWx0XX0pLEI9TS5kZWZhdWx0LmJpbmQoUC5kZWZhdWx0KSxVPXQuRGVmZWN0VHlwZUl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIKEYodCxlKSxlKX19KCJEZWZlY3RUeXBlSXRlbSIpKChzPSgwLEQuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RDb25maWc6KDAsay5wcm9qZWN0Q29uZmlnU2VsZWN0b3IpKGUpfX0pKSgobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGIuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldERlZmVjdFR5cGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldERlZmVjdFR5cGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxiLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAseS5kZWZhdWx0KSh0LGUpLCgwLGguZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnByb2plY3RDb25maWcsbj1lLnR5cGU7cmV0dXJuKDAsYy5kZWZhdWx0KSh0LnN1YlR5cGVzKS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zdWJUeXBlc1tyXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvY2F0b3I9PT1ufSl8fGV9LG51bGwpfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnR5cGU7KDAsZS5vbkNsaWNrKSh0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5ub0JvcmRlcixuPWUubGVzc2VyRm9udCxvPWUub25DbGljayxzPXRoaXMuZ2V0RGVmZWN0VHlwZSgpO3JldHVybiBzP3IuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoImRlZmVjdC10eXBlLWl0ZW0iLHsibm8tYm9yZGVyIjp0LCJsZXNzZXItRm9udCI6bn0pLHRpdGxlOnMubG9uZ05hbWUsb25DbGljazpvfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpCKCJkZWZlY3QtdHlwZS1jaXJjbGUiKSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOnMuY29sb3J9fSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QigiZGVmZWN0LXR5cGUtbmFtZSIpfSxzLmxvbmdOYW1lKSk6bnVsbH19XSksdH0oTy5Db21wb25lbnQpLGEucHJvcFR5cGVzPXtwcm9qZWN0Q29uZmlnOkwuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0eXBlOkwuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkNsaWNrOkwuZGVmYXVsdC5mdW5jLG5vQm9yZGVyOkwuZGVmYXVsdC5ib29sLGxlc3NlckZvbnQ6TC5kZWZhdWx0LmJvb2x9LGEuZGVmYXVsdFByb3BzPXtvbkNsaWNrOmZ1bmN0aW9uKCl7fSxub0JvcmRlcjohMSxsZXNzZXJGb250OiExfSxpPWwpKXx8aSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFUsIkRlZmVjdFR5cGVJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2RlZmVjdFR5cGVJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEIsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2RlZmVjdFR5cGVJdGVtLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2RlZmVjdFR5cGVJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZGVmZWN0LXR5cGUtaXRlbSI6ImRlZmVjdFR5cGVJdGVtX19kZWZlY3QtdHlwZS1pdGVtX19fMldRa1UiLCJuby1ib3JkZXIiOiJkZWZlY3RUeXBlSXRlbV9fbm8tYm9yZGVyX19fMUV5R1kiLCJsZXNzZXItRm9udCI6ImRlZmVjdFR5cGVJdGVtX19sZXNzZXItRm9udF9fXzJxNDJRIiwiZGVmZWN0LXR5cGUtY2lyY2xlIjoiZGVmZWN0VHlwZUl0ZW1fX2RlZmVjdC10eXBlLWNpcmNsZV9fXzFVMkhFIiwiZGVmZWN0LXR5cGUtbmFtZSI6ImRlZmVjdFR5cGVJdGVtX19kZWZlY3QtdHlwZS1uYW1lX19fMVpLbjAifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZUl0ZW0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZUl0ZW0vZGVmZWN0VHlwZUl0ZW0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlZmVjdFR5cGVJdGVtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RUeXBlSXRlbX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2NvbnN0YW50cy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5ERUZFQ1RfVFlQRV9DT05GSUdVUkFUSU9OPXZvaWQgMDt2YXIgcj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksbz10LkRFRkVDVF9UWVBFX0NPTkZJR1VSQVRJT049W3IuUFJPRFVDVF9CVUcudG9VcHBlckNhc2UoKSxyLkFVVE9NQVRJT05fQlVHLnRvVXBwZXJDYXNlKCksci5TWVNURU1fSVNTVUUudG9VcHBlckNhc2UoKSxyLk5PX0RFRkVDVC50b1VwcGVyQ2FzZSgpXTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihvLCJERUZFQ1RfVFlQRV9DT05GSUdVUkFUSU9OIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVTZWxlY3Rvci9jb25zdGFudHMuanMiKX0oKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2RlZmVjdFR5cGVTZWxlY3Rvci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZmVjdFR5cGVTZWxlY3Rvcj12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZGVmZWN0VHlwZXMuanMiKSxJPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2NvbnN0YW50cy5qcyIpLFA9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlU2VsZWN0b3IvZGVmZWN0VHlwZVNlbGVjdG9yLnNjc3MiKSxOPXIoUCksSD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVJdGVtL2luZGV4LmpzIiksRj17RGVmZWN0VHlwZVNlbGVjdG9yOntkaXNwbGF5TmFtZToiRGVmZWN0VHlwZVNlbGVjdG9yIn19LEI9KDAsUi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlU2VsZWN0b3IvZGVmZWN0VHlwZVNlbGVjdG9yLmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbZV0saW1wb3J0czpbTy5kZWZhdWx0XX0pLFU9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlU2VsZWN0b3IvZGVmZWN0VHlwZVNlbGVjdG9yLmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLEc9RC5kZWZhdWx0LmJpbmQoTi5kZWZhdWx0KSx6PXQuRGVmZWN0VHlwZVNlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQihVKHQsZSksZSl9fSgiRGVmZWN0VHlwZVNlbGVjdG9yIikoKG89KDAsdy5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57ZGVmZWN0VHlwZXM6KDAsTS5kZWZlY3RUeXBlc1NlbGVjdG9yKShlKX19KSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAscC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxnLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGQuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17b3BlbmVkOiExfSxyLm9uQ2xpY2tTZWxlY3RCbG9jaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnNldFJlZj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrU2VsZWN0QmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6Il9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrU2VsZWN0QmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tTZWxlY3RCbG9ja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1NlbGVjdEJsb2NrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrU2VsZWN0QmxvY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5zdGF0ZS5vcGVuZWQ/dGhpcy5wcm9wcy5vbkJsdXIoKTp0aGlzLnByb3BzLm9uRm9jdXMoKX19LHtrZXk6Il9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3NldFJlZl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2V0UmVmX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zZXRSZWZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5ub2RlPWV9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubm9kZS5jb250YWlucyhlLnRhcmdldCl8fCh0aGlzLnNldFN0YXRlKHtvcGVuZWQ6ITF9KSx0aGlzLnByb3BzLm9uQmx1cigpKX19LHtrZXk6ImZvcm1hdFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmRlZmVjdFR5cGVzLG49ZS52YWx1ZSxyPW51bGw7cmV0dXJuKDAsdS5kZWZhdWx0KSh0KS5maW5kKGZ1bmN0aW9uKGUpe3ZhciBvPXRbZV0uZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdG9yPT09bn0pO3JldHVybiBvJiYocj1vKSxvfSksciYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5EZWZlY3RUeXBlSXRlbSx7dHlwZTpyLmxvY2F0b3J9KX19LHtrZXk6Il9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsdGhpcy5wcm9wcy5vbkNoYW5nZSkoZSksdGhpcy5zZXRTdGF0ZSh7b3BlbmVkOiF0aGlzLnN0YXRlLm9wZW5lZH0pfX0se2tleToicmVuZGVyT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxuPXQuZGVmZWN0VHlwZXMscj10LnZhbHVlLG89bltrLlRPX0lOVkVTVElHQVRFLnRvVXBwZXJDYXNlKCldWzBdO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLkZyYWdtZW50LG51bGwsTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJ0by1pbnZlc3RpZ2F0ZS1vcHRpb24iKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5EZWZlY3RUeXBlSXRlbSx7dHlwZTpvLmxvY2F0b3Isbm9Cb3JkZXI6by5sb2NhdG9yIT09cixsZXNzZXJGb250Om8ubG9jYXRvcj09PXIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLmhhbmRsZUNoYW5nZShvLmxvY2F0b3IpfX0pKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoImRlZmVjdC1vcHRpb25zIil9LEkuREVGRUNUX1RZUEVfQ09ORklHVVJBVElPTi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dCxjbGFzc05hbWU6Rygic2VsZWN0LW9wdGlvbi1ncm91cCIpfSxuW3RdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0LmxvY2F0b3IsY2xhc3NOYW1lOkcoInNlbGVjdC1vcHRpb24iKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5EZWZlY3RUeXBlSXRlbSx7dHlwZTp0LmxvY2F0b3Isbm9Cb3JkZXI6dC5sb2NhdG9yIT09cixsZXNzZXJGb250OnQubG9jYXRvcj09PXIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLmhhbmRsZUNoYW5nZSh0LmxvY2F0b3IpfX0pKX0pKX0pKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGVmZWN0VHlwZXMsbj1lLnBsYWNlaG9sZGVyO3JldHVybiEhKDAsdS5kZWZhdWx0KSh0KS5sZW5ndGgmJk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6dGhpcy5zZXRSZWYsY2xhc3NOYW1lOkcoImRlZmVjdC10eXBlLXNlbGVjdG9yIix7b3BlbmVkOnRoaXMuc3RhdGUub3BlbmVkfSl9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Rygic2VsZWN0LWJsb2NrIiksb25DbGljazp0aGlzLm9uQ2xpY2tTZWxlY3RCbG9ja30sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6RygidmFsdWUiKX0sdGhpcy5mb3JtYXRWYWx1ZSgpfHxuKSxPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpHKCJhcnJvdyIpfSkpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Rygic2VsZWN0LWxpc3QiKX0sdGhpcy5yZW5kZXJPcHRpb25zKCkpKX19XSksdH0oQy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXt2YWx1ZTp4LmRlZmF1bHQuc3RyaW5nLGRlZmVjdFR5cGVzOnguZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxvbkNoYW5nZTp4LmRlZmF1bHQuZnVuYyxvbkZvY3VzOnguZGVmYXVsdC5mdW5jLG9uQmx1cjp4LmRlZmF1bHQuZnVuYyxwbGFjZWhvbGRlcjp4LmRlZmF1bHQuc3RyaW5nfSxpLmRlZmF1bHRQcm9wcz17dmFsdWU6IiIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30scGxhY2Vob2xkZXI6IiJ9LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwiRGVmZWN0VHlwZVNlbGVjdG9yIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVTZWxlY3Rvci9kZWZlY3RUeXBlU2VsZWN0b3IuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2RlZmVjdFR5cGVTZWxlY3Rvci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2RlZmVjdFR5cGVTZWxlY3Rvci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImRlZmVjdC10eXBlLXNlbGVjdG9yIjoiZGVmZWN0VHlwZVNlbGVjdG9yX19kZWZlY3QtdHlwZS1zZWxlY3Rvcl9fX1ZRQmlkIixvcGVuZWQ6ImRlZmVjdFR5cGVTZWxlY3Rvcl9fb3BlbmVkX19fM2c1TnAiLGFycm93OiJkZWZlY3RUeXBlU2VsZWN0b3JfX2Fycm93X19fMXd0UTciLCJzZWxlY3QtYmxvY2siOiJkZWZlY3RUeXBlU2VsZWN0b3JfX3NlbGVjdC1ibG9ja19fXzJCYmpfIiwic2VsZWN0LWxpc3QiOiJkZWZlY3RUeXBlU2VsZWN0b3JfX3NlbGVjdC1saXN0X19fMUpNYXAiLHZhbHVlOiJkZWZlY3RUeXBlU2VsZWN0b3JfX3ZhbHVlX19fMnFrNFoiLCJzZWxlY3QtYWxsLWJsb2NrIjoiZGVmZWN0VHlwZVNlbGVjdG9yX19zZWxlY3QtYWxsLWJsb2NrX19fMVRzenMiLCJzZWxlY3QtYWxsIjoiZGVmZWN0VHlwZVNlbGVjdG9yX19zZWxlY3QtYWxsX19fM24wWXYiLCJzZWxlY3QtaXRlbSI6ImRlZmVjdFR5cGVTZWxlY3Rvcl9fc2VsZWN0LWl0ZW1fX18zY2gzSSIsInRvLWludmVzdGlnYXRlLW9wdGlvbiI6ImRlZmVjdFR5cGVTZWxlY3Rvcl9fdG8taW52ZXN0aWdhdGUtb3B0aW9uX19fM1ZYYjIiLCJkZWZlY3Qtb3B0aW9ucyI6ImRlZmVjdFR5cGVTZWxlY3Rvcl9fZGVmZWN0LW9wdGlvbnNfX19VVXZwbiIsInNlbGVjdC1vcHRpb24tZ3JvdXAiOiJkZWZlY3RUeXBlU2VsZWN0b3JfX3NlbGVjdC1vcHRpb24tZ3JvdXBfX19VRGs3YSIsInNlbGVjdC1vcHRpb24iOiJkZWZlY3RUeXBlU2VsZWN0b3JfX3NlbGVjdC1vcHRpb25fX18xZkY1RiJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlU2VsZWN0b3IvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVNlbGVjdG9yL2RlZmVjdFR5cGVTZWxlY3Rvci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVmZWN0VHlwZVNlbGVjdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RUeXBlU2VsZWN0b3J9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVUb29sdGlwL2RlZmVjdFR5cGVUb29sdGlwLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGVmZWN0VHlwZVRvb2x0aXA9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEQ9cihMKSx3PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksTT1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksaz1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLFA9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RMaW5rL2luZGV4LmpzIiksTj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVUb29sdGlwL2RlZmVjdFR5cGVUb29sdGlwLnNjc3MiKSxIPXIoTiksRj17RGVmZWN0VHlwZVRvb2x0aXA6e2Rpc3BsYXlOYW1lOiJEZWZlY3RUeXBlVG9vbHRpcCJ9fSxCPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvZGVmZWN0VHlwZVRvb2x0aXAuanN4Iixjb21wb25lbnRzOkYsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksVT0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVUb29sdGlwL2RlZmVjdFR5cGVUb29sdGlwLmpzeCIsY29tcG9uZW50czpGLGxvY2FsczpbXSxpbXBvcnRzOltPLmRlZmF1bHQsdi5kZWZhdWx0XX0pLEc9eC5kZWZhdWx0LmJpbmQoSC5kZWZhdWx0KSx6PSgwLEkuZGVmaW5lTWVzc2FnZXMpKHtwcm9kdWN0X2J1Z190b3RhbDp7aWQ6IkRlZmVjdFR5cGVUb29sdGlwLnBiLXRvdGFsIixkZWZhdWx0TWVzc2FnZToiVG90YWwgcHJvZHVjdCBidWdzIn0sYXV0b21hdGlvbl9idWdfdG90YWw6e2lkOiJEZWZlY3RUeXBlVG9vbHRpcC5hYi10b3RhbCIsZGVmYXVsdE1lc3NhZ2U6IlRvdGFsIGF1dG9tYXRpb24gYnVncyJ9LHN5c3RlbV9pc3N1ZV90b3RhbDp7aWQ6IkRlZmVjdFR5cGVUb29sdGlwLnNpLXRvdGFsIixkZWZhdWx0TWVzc2FnZToiVG90YWwgc3lzdGVtIGlzc3VlcyJ9LG5vX2RlZmVjdF90b3RhbDp7aWQ6IkRlZmVjdFR5cGVUb29sdGlwLm5kLXRvdGFsIixkZWZhdWx0TWVzc2FnZToiVG90YWwgbm8gZGVmZWN0cyJ9fSksVj10LkRlZmVjdFR5cGVUb29sdGlwPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQihVKHQsZSksZSl9fSgiRGVmZWN0VHlwZVRvb2x0aXAiKSgobz0oMCx3LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0Q29uZmlnOigwLGsucHJvamVjdENvbmZpZ1NlbGVjdG9yKShlKX19KSwoMCxJLmluamVjdEludGwpKHM9bygoYT1pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4oMCxwLmRlZmF1bHQpKHRoaXMsdCksKDAsZy5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlLG49dGhpcy5wcm9wcy5wcm9qZWN0Q29uZmlnLnN1YlR5cGVzJiZ0aGlzLnByb3BzLnByb2plY3RDb25maWcuc3ViVHlwZXNbdGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCldO3JldHVybiBPLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkcoImRlZmVjdC10eXBlLXRvb2x0aXAiKX0sbiYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5GcmFnbWVudCxudWxsLHRoaXMucHJvcHMudHlwZSE9PU0uVE9fSU5WRVNUSUdBVEUmJk8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRGVmZWN0TGluayx7aXRlbUlkOnRoaXMucHJvcHMuaXRlbUlkLGRlZmVjdHM6KDAsdS5kZWZhdWx0KSh0aGlzLnByb3BzLmRhdGEpLGNsYXNzTmFtZTpHKCJ0b3RhbC1pdGVtIiksZXZlbnRJbmZvOnRoaXMucHJvcHMudG9vbHRpcEV2ZW50SW5mb30sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJuYW1lIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RygiY2lyY2xlIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjpuWzBdLmNvbG9yfX0pLHQoelt0aGlzLnByb3BzLnR5cGUrIl90b3RhbCJdKSksTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6RygidmFsdWUiKX0sdGhpcy5wcm9wcy5kYXRhLnRvdGFsKSksKDAsdS5kZWZhdWx0KSh0aGlzLnByb3BzLmRhdGEpLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9jYXRvcj09PXR9KTtyZXR1cm4gciYmTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5EZWZlY3RMaW5rLHtrZXk6dCxpdGVtSWQ6ZS5wcm9wcy5pdGVtSWQsZGVmZWN0czpbdF0sY2xhc3NOYW1lOkcoIml0ZW0iKX0sTy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpHKCJuYW1lIil9LE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6RygiY2lyY2xlIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjpyLmNvbG9yfX0pLHIubG9uZ05hbWUpLE8uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOkcoInZhbHVlIil9LGUucHJvcHMuZGF0YVtyLmxvY2F0b3JdKSl9KSkpfX1dKSx0fShDLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e3R5cGU6RC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGRhdGE6RC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHByb2plY3RDb25maWc6RC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGludGw6SS5pbnRsU2hhcGUuaXNSZXF1aXJlZCx0b29sdGlwRXZlbnRJbmZvOkQuZGVmYXVsdC5vYmplY3QsaXRlbUlkOkQuZGVmYXVsdC5udW1iZXJ9LGkuZGVmYXVsdFByb3BzPXtpdGVtSWQ6bnVsbCx0b29sdGlwRXZlbnRJbmZvOnt9fSxzPWEpKXx8cyl8fHMpKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoViwiRGVmZWN0VHlwZVRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvZGVmZWN0VHlwZVRvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoRywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvZGVmZWN0VHlwZVRvb2x0aXAuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoeiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvZGVmZWN0VHlwZVRvb2x0aXAuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVUb29sdGlwL2RlZmVjdFR5cGVUb29sdGlwLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsidG90YWwtaXRlbSI6ImRlZmVjdFR5cGVUb29sdGlwX190b3RhbC1pdGVtX19fMkEtbUgiLG5hbWU6ImRlZmVjdFR5cGVUb29sdGlwX19uYW1lX19fRXV2N0MiLHZhbHVlOiJkZWZlY3RUeXBlVG9vbHRpcF9fdmFsdWVfX18yMFNnNCIsaXRlbToiZGVmZWN0VHlwZVRvb2x0aXBfX2l0ZW1fX19UNU9QbyIsY2lyY2xlOiJkZWZlY3RUeXBlVG9vbHRpcF9fY2lyY2xlX19feGloNnkifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZGVmZWN0VHlwZVRvb2x0aXAvZGVmZWN0VHlwZVRvb2x0aXAuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlZmVjdFR5cGVUb29sdGlwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RUeXBlVG9vbHRpcH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZHVyYXRpb25CbG9jay9kdXJhdGlvbkJsb2NrLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRHVyYXRpb25CbG9jaz12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFQ9cih2KSxBPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksQz1yKEEpLE89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiksdz1yKEQpLE09bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGs9cihNKSxJPW4oIi4vc3JjL2NvbW1vbi9pbWcvaXRlbS1pbi1wcm9ncmVzcy5naWYiKSxQPXIoSSksTj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2R1cmF0aW9uQmxvY2svaW1nL2Nsb2NrLWljb24taW5saW5lLnN2ZyIpLEg9cihOKSxGPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZHVyYXRpb25CbG9jay9kdXJhdGlvbkJsb2NrLnNjc3MiKSxCPXIoRiksVT17RHVyYXRpb25CbG9jazp7ZGlzcGxheU5hbWU6IkR1cmF0aW9uQmxvY2sifX0sRz0oMCxDLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2R1cmF0aW9uQmxvY2svZHVyYXRpb25CbG9jay5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W2VdLGltcG9ydHM6W1QuZGVmYXVsdF19KSx6PSgwLHkuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZHVyYXRpb25CbG9jay9kdXJhdGlvbkJsb2NrLmpzeCIsY29tcG9uZW50czpVLGxvY2FsczpbXSxpbXBvcnRzOltULmRlZmF1bHQsYi5kZWZhdWx0XX0pLFY9Uy5kZWZhdWx0LmJpbmQoQi5kZWZhdWx0KSxXPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHtpblByb2dyZXNzV2l0aEVuZDp7aWQ6IkR1cmF0aW9uQmxvY2suaW5Qcm9ncmVzc1dpdGhFbmQiLGRlZmF1bHRNZXNzYWdlOiJXcm9uZyBzdGF0dXM6ICdJbiBwcm9ncmVzcycgd2l0aCBmaW5pc2ggdGltZSJ9LG5vdEluUHJvZ3Jlc3NXaXRob3V0RW5kOntpZDoiRHVyYXRpb25CbG9jay5ub3RJblByb2dyZXNzV2l0aG91dEVuZCIsZGVmYXVsdE1lc3NhZ2U6Ildyb25nIHN0YXRlOiBpdGVtIGlzIG5vdCAnSW4gcHJvZ3Jlc3MnLCBidXQgaGFzIG5vIGZpbmlzaCB0aW1lIn0saW5Qcm9ncmVzczp7aWQ6IkR1cmF0aW9uQmxvY2suaW5Qcm9ncmVzcyIsZGVmYXVsdE1lc3NhZ2U6IkluIHByb2dyZXNzIn0sc2tpcHBlZDp7aWQ6IkR1cmF0aW9uQmxvY2suc2tpcHBlZCIsZGVmYXVsdE1lc3NhZ2U6IlNLSVBQRUQuIER1cmF0aW9uOiB7ZHVyYXRpb25UaW1lfSJ9LHN0b3BwZWQ6e2lkOiJEdXJhdGlvbkJsb2NrLnN0b3BwZWQiLGRlZmF1bHRNZXNzYWdlOiJSdW4gU1RPUFBFRCBhZnRlcjoge2R1cmF0aW9uVGltZX0uIFN0b3BwZWQgYXQ6IHtlbmRUaW1lfSJ9LGludGVycnVwdGVkOntpZDoiRHVyYXRpb25CbG9jay5pbnRlcnJ1cHRlZCIsZGVmYXVsdE1lc3NhZ2U6IlJ1biBJTlRFUlJVUFRFRCBhZnRlcjoge2R1cmF0aW9uVGltZX0uIFN0b3BwZWQgYXQ6IHtlbmRUaW1lfSJ9LGZpbmlzaGVkOntpZDoiRHVyYXRpb25CbG9jay5maW5pc2hlZCIsZGVmYXVsdE1lc3NhZ2U6IkR1cmF0aW9uOiB7ZHVyYXRpb25UaW1lfS4gRmluaXNoIHRpbWU6IHtlbmRUaW1lfSJ9LG92ZXJBcHByb3hpbWF0ZTp7aWQ6IkR1cmF0aW9uQmxvY2sub3ZlckFwcHJveGltYXRlIixkZWZhdWx0TWVzc2FnZToiQXZlcmFnZSBleGVjdXRpb25zIHRpbWUgLSB7ZW5kfSwgY3VycmVudCBvdmVybGFwIC0ge292ZXJ9In19KSxZPXQuRHVyYXRpb25CbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoeih0LGUpLGUpfX0oIkR1cmF0aW9uQmxvY2siKSgoMCxMLmluamVjdEludGwpKChpPXM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxsLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0U3RhdHVzVGl0bGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFN0YXR1c1RpdGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldE92ZXJBcHByb3hpbWF0ZVRpdGxlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRPdmVyQXBwcm94aW1hdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRBcHByb3hpbWF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEFwcHJveGltYXRlVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5pc0ludmFsaWREdXJhdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNJbnZhbGlkRHVyYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFzU3RhcnRBbmRFbmRUaW1lPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYXNTdGFydEFuZEVuZFRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFzU3RhcnROb0VuZFRpbWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhc1N0YXJ0Tm9FbmRUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzSW5Qcm9ncmVzcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzU3RvcHBlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNTdG9wcGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzU2tpcHBlZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faXNTa2lwcGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmlzSW50ZXJydXB0ZWQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2lzSW50ZXJydXB0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudmFsaWRhdGVGb3JBcHByb3hpbWF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3ZhbGlkYXRlRm9yQXBwcm94aW1hdGVUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZi5kZWZhdWx0KShyLG8pfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxfLmRlZmF1bHQpKHQsW3trZXk6Il9fdmFsaWRhdGVGb3JBcHByb3hpbWF0ZVRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZhbGlkYXRlRm9yQXBwcm94aW1hdGVUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0ludGVycnVwdGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0ludGVycnVwdGVkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc1NraXBwZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2tpcHBlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNTdG9wcGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc1N0b3BwZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSW5Qcm9ncmVzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYXNTdGFydE5vRW5kVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFzU3RhcnROb0VuZFRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhc1N0YXJ0QW5kRW5kVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFzU3RhcnRBbmRFbmRUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0ludmFsaWREdXJhdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNJbnZhbGlkRHVyYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEFwcHJveGltYXRlVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QXBwcm94aW1hdGVUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRPdmVyQXBwcm94aW1hdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0T3ZlckFwcHJveGltYXRlVGl0bGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN0YXR1c1RpdGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdGF0dXNUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3RhdHVzVGl0bGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFN0YXR1c1RpdGxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdGF0dXNUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlLHQ9KDAseC5nZXREdXJhdGlvbikodGhpcy5wcm9wcy50aW1pbmcuc3RhcnQsdGhpcy5wcm9wcy50aW1pbmcuZW5kKSxuPSgwLHguZGF0ZUZvcm1hdCkodGhpcy5wcm9wcy50aW1pbmcuZW5kLCEwKSxyPXRoaXMuZ2V0QXBwcm94aW1hdGVUaW1lKCk7cmV0dXJuIHRoaXMuaXNJbnZhbGlkRHVyYXRpb24oKT9lKHRoaXMuaGFzU3RhcnRBbmRFbmRUaW1lKCk/Vy5pblByb2dyZXNzV2l0aEVuZDpXLm5vdEluUHJvZ3Jlc3NXaXRob3V0RW5kKTp0aGlzLmlzSW5Qcm9ncmVzcygpP3RoaXMudmFsaWRhdGVGb3JBcHByb3hpbWF0ZVRpbWUoKSYmcjw9MCYmMSE9PXRoaXMucHJvcHMuaXRlbU51bWJlcj90aGlzLmdldE92ZXJBcHByb3hpbWF0ZVRpdGxlKCk6ZShXLmluUHJvZ3Jlc3MpOnRoaXMuaXNTa2lwcGVkKCk/ZShXLnNraXBwZWQse2R1cmF0aW9uVGltZTp0fSk6dGhpcy5pc1N0b3BwZWQoKT9lKFcuc3RvcHBlZCx7ZHVyYXRpb25UaW1lOnQsZW5kVGltZTpufSk6dGhpcy5pc0ludGVycnVwdGVkKCk/ZShXLmludGVycnVwdGVkLHtkdXJhdGlvblRpbWU6dCxlbmRUaW1lOm59KTplKFcuZmluaXNoZWQse2R1cmF0aW9uVGltZTp0LGVuZFRpbWU6bn0pfX0se2tleToiX19nZXRPdmVyQXBwcm94aW1hdGVUaXRsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0T3ZlckFwcHJveGltYXRlVGl0bGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldE92ZXJBcHByb3hpbWF0ZVRpdGxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UsdD10aGlzLmdldEFwcHJveGltYXRlVGltZSgpLG49KDAseC5hcHByb3hpbWF0ZVRpbWVGb3JtYXQpKHRoaXMucHJvcHMudGltaW5nLmFwcHJveFRpbWUvMWUzKSxyPSgwLHguYXBwcm94aW1hdGVUaW1lRm9ybWF0KSgtdCk7cmV0dXJuIHQ+MD8iIjplKFcub3ZlckFwcHJveGltYXRlLHtlbmQ6bixvdmVyOnJ9KX19LHtrZXk6Il9fZ2V0QXBwcm94aW1hdGVUaW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRBcHByb3hpbWF0ZVRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEFwcHJveGltYXRlVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU1hdGgucm91bmQodGhpcy5wcm9wcy50aW1pbmcuYXBwcm94VGltZSk7cmV0dXJuIE1hdGgucm91bmQoKHRoaXMucHJvcHMudGltaW5nLnN0YXJ0K2UtMWUzKigwLHcuZGVmYXVsdCkoKS51bml4KCkpLzFlMyl9fSx7a2V5OiJfX2lzSW52YWxpZER1cmF0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0ludmFsaWREdXJhdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNJbnZhbGlkRHVyYXRpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5oYXNTdGFydEFuZEVuZFRpbWUoKXx8IXRoaXMuaXNJblByb2dyZXNzKCkmJnRoaXMuaGFzU3RhcnROb0VuZFRpbWUoKX19LHtrZXk6Il9faGFzU3RhcnRBbmRFbmRUaW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYXNTdGFydEFuZEVuZFRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhc1N0YXJ0QW5kRW5kVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMucHJvcHMudGltaW5nLnN0YXJ0fHwhdGhpcy5wcm9wcy50aW1pbmcuZW5kKX19LHtrZXk6Il9faGFzU3RhcnROb0VuZFRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhc1N0YXJ0Tm9FbmRUaW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYXNTdGFydE5vRW5kVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLnRpbWluZy5zdGFydCYmIXRoaXMucHJvcHMudGltaW5nLmVuZH19LHtrZXk6Il9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0luUHJvZ3Jlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSW5Qcm9ncmVzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJJTl9QUk9HUkVTUyI9PT10aGlzLnByb3BzLnN0YXR1c319LHtrZXk6Il9faXNTdG9wcGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc1N0b3BwZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzU3RvcHBlZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJTVE9QUEVEIj09PXRoaXMucHJvcHMuc3RhdHVzfX0se2tleToiX19pc1NraXBwZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzU2tpcHBlZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNTa2lwcGVkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIlNLSVBQRUQiPT09dGhpcy5wcm9wcy5zdGF0dXN9fSx7a2V5OiJfX2lzSW50ZXJydXB0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzSW50ZXJydXB0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSW50ZXJydXB0ZWRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iSU5URVJSVVBURUQiPT09dGhpcy5wcm9wcy5zdGF0dXN9fSx7a2V5OiJfX3ZhbGlkYXRlRm9yQXBwcm94aW1hdGVUaW1lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192YWxpZGF0ZUZvckFwcHJveGltYXRlVGltZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdmFsaWRhdGVGb3JBcHByb3hpbWF0ZVRpbWVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnR5cGUsdD0iTEFVTkNIIj09PWV8fCFlO3JldHVybiB0aGlzLmlzSW5Qcm9ncmVzcygpJiZ0fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBULmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlYoeyJkdXJhdGlvbi1ibG9jayI6ITAsZXJyb3I6dGhpcy5pc1N0b3BwZWQoKXx8dGhpcy5pc0ludGVycnVwdGVkKCl9KSx0aXRsZTp0aGlzLmdldFN0YXR1c1RpdGxlKCl9LFQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiaWNvbiIpfSwoMCxqLmRlZmF1bHQpKEguZGVmYXVsdCkpLHRoaXMuaXNJblByb2dyZXNzKCk/VC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VigiaW4tcHJvZ3Jlc3MiKX0sVC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImltZyIse3NyYzpQLmRlZmF1bHQsYWx0OiJJbiBwcm9ncmVzcyJ9KSk6VC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6VigiZHVyYXRpb24iKX0sKDAseC5nZXREdXJhdGlvbikodGhpcy5wcm9wcy50aW1pbmcuc3RhcnQsdGhpcy5wcm9wcy50aW1pbmcuZW5kKSkpfX1dKSx0fSh2LkNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx0eXBlOmsuZGVmYXVsdC5zdHJpbmcsdGltaW5nOmsuZGVmYXVsdC5zaGFwZSh7c3RhcnQ6ay5kZWZhdWx0Lm51bWJlcixlbmQ6ay5kZWZhdWx0Lm51bWJlcixhcHByb3hUaW1lOmsuZGVmYXVsdC5udW1iZXJ9KS5pc1JlcXVpcmVkLHN0YXR1czprLmRlZmF1bHQuc3RyaW5nLGl0ZW1OdW1iZXI6ay5kZWZhdWx0Lm51bWJlcn0scy5kZWZhdWx0UHJvcHM9e3R5cGU6IiIsc3RhdHVzOiIiLGl0ZW1OdW1iZXI6bnVsbH0sbz1pKSl8fG8pOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJEdXJhdGlvbkJsb2NrIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2R1cmF0aW9uQmxvY2svZHVyYXRpb25CbG9jay5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kdXJhdGlvbkJsb2NrL2R1cmF0aW9uQmxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVywibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZHVyYXRpb25CbG9jay9kdXJhdGlvbkJsb2NrLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kdXJhdGlvbkJsb2NrL2R1cmF0aW9uQmxvY2suc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJkdXJhdGlvbi1ibG9jayI6ImR1cmF0aW9uQmxvY2tfX2R1cmF0aW9uLWJsb2NrX19fMVpSTDMiLGVycm9yOiJkdXJhdGlvbkJsb2NrX19lcnJvcl9fX1lzRE1JIixpY29uOiJkdXJhdGlvbkJsb2NrX19pY29uX19fMUlsZHEiLGR1cmF0aW9uOiJkdXJhdGlvbkJsb2NrX19kdXJhdGlvbl9fX0c5alJ4IiwiaW4tcHJvZ3Jlc3MiOiJkdXJhdGlvbkJsb2NrX19pbi1wcm9ncmVzc19fX1RnMnJOIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2R1cmF0aW9uQmxvY2svaW1nL2Nsb2NrLWljb24taW5saW5lLnN2ZyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTQgMTQiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuOTk3IDBBNi45OTUgNi45OTUgMCAwIDAgMCA3YzAgMy44NjcgMy4xMjkgNyA2Ljk5NyA3YTcuMDAxIDcuMDAxIDAgMSAwIDAtMTR6TTcgMTIuNkE1LjU5OCA1LjU5OCAwIDAgMSAxLjQgN2MwLTMuMDk0IDIuNTA2LTUuNiA1LjYtNS42czUuNiAyLjUwNiA1LjYgNS42LTIuNTA2IDUuNi01LjYgNS42em0uMzUtOS4xSDYuM3Y0LjJsMy42NzIgMi4yMDUuNTI4LS44NjEtMy4xNS0xLjg2OVYzLjV6Ij48L3BhdGg+PC9zdmc+J30sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZHVyYXRpb25CbG9jay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kdXJhdGlvbkJsb2NrL2R1cmF0aW9uQmxvY2suanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkR1cmF0aW9uQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkR1cmF0aW9uQmxvY2t9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2xhdW5jaExldmVsRW50aXRpZXMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxhdW5jaExldmVsRW50aXRpZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaExldmVsRW50aXRpZXN9fSk7dmFyIG89bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9zdWl0ZUxldmVsRW50aXRpZXMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN1aXRlTGV2ZWxFbnRpdGllcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uU3VpdGVMZXZlbEVudGl0aWVzfX0pO3ZhciBzPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvc3RlcExldmVsRW50aXRpZXMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN0ZXBMZXZlbEVudGl0aWVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5TdGVwTGV2ZWxFbnRpdGllc319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvbGF1bmNoTGV2ZWxFbnRpdGllcy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaExldmVsRW50aXRpZXM9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxkPXIoYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx3PW4oIi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiKSxNPXIodyksaz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksST1yKGspLFA9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL3N0YXRpc3RpY3MuanMiKSxIPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZGVmZWN0VHlwZXMuanMiKSxGPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvZmlsdGVyRW50aXRpZXMvY29uc3RhbnRzLmpzIiksVT1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksRz17TGF1bmNoTGV2ZWxFbnRpdGllczp7ZGlzcGxheU5hbWU6IkxhdW5jaExldmVsRW50aXRpZXMifX0sej0oMCx4LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2xhdW5jaExldmVsRW50aXRpZXMuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksVj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2xhdW5jaExldmVsRW50aXRpZXMuanN4Iixjb21wb25lbnRzOkcsbG9jYWxzOltdLGltcG9ydHM6W1IuZGVmYXVsdCxBLmRlZmF1bHRdfSksVz0oMCxELmRlZmluZU1lc3NhZ2VzKSh7TmFtZVRpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggbmFtZSJ9LE51bWJlclRpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5OdW1iZXJUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaCBudW1iZXIifSxEZXNjcmlwdGlvblRpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5EZXNjcmlwdGlvblRpdGxlIixkZWZhdWx0TWVzc2FnZToiRGVzY3JpcHRpb24ifSxTdGFydFRpbWVUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuU3RhcnRUaW1lVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJTdGFydCB0aW1lIn0sT3duZXJUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuT3duZXJUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6Ik93bmVyIn0sQXR0cmlidXRlS2V5c1RpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5BdHRyaWJ1dGVLZXlzVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJBdHRyaWJ1dGUga2V5cyJ9LEF0dHJpYnV0ZVZhbHVlc1RpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5BdHRyaWJ1dGVWYWx1ZXNUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkF0dHJpYnV0ZSB2YWx1ZXMifSxUb3RhbFRpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5Ub3RhbFRpdGxlIixkZWZhdWx0TWVzc2FnZToiVG90YWwifSxQYXNzZWRUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuUGFzc2VkVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJQYXNzZWQifSxGYWlsZWRUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuRmFpbGVkVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJGYWlsZWQifSxTa2lwcGVkVGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLlNraXBwZWRUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlNraXBwZWQifSxQUk9EVUNUX0JVR190aXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuUFJPRFVDVF9CVUdfdGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJQcm9kdWN0IGJ1ZyJ9LFBST0RVQ1RfQlVHX3RvdGFsVGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX3RvdGFsVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCBwcm9kdWN0IGJ1Z3MifSxBVVRPTUFUSU9OX0JVR190aXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuQVVUT01BVElPTl9CVUdfdGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJBdXRvbWF0aW9uIGJ1ZyJ9LEFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCBhdXRvbWF0aW9uIGJ1Z3MifSxTWVNURU1fSVNTVUVfdGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLlNZU1RFTV9JU1NVRV90aXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlN5c3RlbSBpc3N1ZSJ9LFNZU1RFTV9JU1NVRV90b3RhbFRpdGxlOntpZDoiTGF1bmNoTGV2ZWxFbnRpdGllcy5TWVNURU1fSVNTVUVfdG90YWxUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlRvdGFsIHN5c3RlbSBpc3N1ZXMifSxUT19JTlZFU1RJR0FURV90aXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuVE9fSU5WRVNUSUdBVEVfdGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUbyBpbnZlc3RpZ2F0ZSJ9fSksWT1bSC5QUk9EVUNUX0JVRy50b1VwcGVyQ2FzZSgpLEguQVVUT01BVElPTl9CVUcudG9VcHBlckNhc2UoKSxILlNZU1RFTV9JU1NVRS50b1VwcGVyQ2FzZSgpLEguVE9fSU5WRVNUSUdBVEUudG9VcHBlckNhc2UoKV0scT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHooVih0LGUpLGUpfX0oIkxhdW5jaExldmVsRW50aXRpZXMiKSgobz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntkZWZlY3RUeXBlczooMCxVLmRlZmVjdFR5cGVzU2VsZWN0b3IpKGUpfX0pLCgwLEQuaW5qZWN0SW50bCkocz1vKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLG0uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsRS5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0U3RhdGljRW50aXRpZXM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldER5bmFtaWNFbnRpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RHluYW1pY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0RHluYW1pY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdGF0aWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdGF0aWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bCxuPWUuZmlsdGVyVmFsdWVzO3JldHVyblt7aWQ6Qi5FTlRJVFlfTkFNRSxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtTmFtZSx2YWx1ZTpCLkVOVElUWV9OQU1FIGluIG4/bltCLkVOVElUWV9OQU1FXTp7ZmlsdGVyaW5nRmllbGQ6Qi5FTlRJVFlfTkFNRSx2YWx1ZToiIixjb25kaXRpb246Qi5DT05ESVRJT05fQ05UfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5pdGVtTmFtZUVudGl0eShlLnZhbHVlKSkmJiJpdGVtTmFtZUVudGl0eUhpbnQifSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVy5OYW1lVGl0bGUpLGFjdGl2ZTohMCxyZW1vdmFibGU6ITEsc3RhdGljOiEwfSx7aWQ6Qi5FTlRJVFlfTlVNQkVSLGNvbXBvbmVudDpGLkVudGl0eUxhdW5jaE51bWJlcix2YWx1ZTpCLkVOVElUWV9OVU1CRVIgaW4gbj9uW0IuRU5USVRZX05VTUJFUl06e2ZpbHRlcmluZ0ZpZWxkOkIuRU5USVRZX05VTUJFUix2YWx1ZToiIixjb25kaXRpb246Qi5DT05ESVRJT05fR1JFQVRFUl9FUX0sdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoTnVtZXJpY0VudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hOdW1lcmljRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLk51bWJlclRpdGxlKSxhY3RpdmU6Qi5FTlRJVFlfTlVNQkVSIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Qi5FTlRJVFlfREVTQ1JJUFRJT04sY29tcG9uZW50OkYuRW50aXR5SXRlbURlc2NyaXB0aW9uLHZhbHVlOkIuRU5USVRZX0RFU0NSSVBUSU9OIGluIG4/bltCLkVOVElUWV9ERVNDUklQVElPTl06e2ZpbHRlcmluZ0ZpZWxkOkIuRU5USVRZX0RFU0NSSVBUSU9OLHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9DTlR9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLkRlc2NyaXB0aW9uVGl0bGUpLHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaERlc2NyaXB0aW9uRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaERlc2NyaXB0aW9uRW50aXR5SGludCJ9LGFjdGl2ZTpCLkVOVElUWV9ERVNDUklQVElPTiBpbiBuLHJlbW92YWJsZTohMH0se2lkOkIuRU5USVRZX1VTRVIsY29tcG9uZW50OkYuRW50aXR5TGF1bmNoT3duZXIsdmFsdWU6Qi5FTlRJVFlfVVNFUiBpbiBuP25bQi5FTlRJVFlfVVNFUl06e2ZpbHRlcmluZ0ZpZWxkOkIuRU5USVRZX1VTRVIsdmFsdWU6IiIsY29uZGl0aW9uOkIuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVy5Pd25lclRpdGxlKSxhY3RpdmU6Qi5FTlRJVFlfVVNFUiBpbiBuLHJlbW92YWJsZTohMH0se2lkOkIuRU5USVRZX1NUQVJUX1RJTUUsY29tcG9uZW50OkYuRW50aXR5SXRlbVN0YXJ0VGltZSx2YWx1ZTpCLkVOVElUWV9TVEFSVF9USU1FIGluIG4/bltCLkVOVElUWV9TVEFSVF9USU1FXTp7ZmlsdGVyaW5nRmllbGQ6Qi5FTlRJVFlfU1RBUlRfVElNRSx2YWx1ZTooMCxNLmRlZmF1bHQpKCkuc3RhcnRPZigiZGF5Iikuc3VidHJhY3QoMSwibW9udGhzIikudmFsdWVPZigpKyIsIisoKDAsTS5kZWZhdWx0KSgpLmVuZE9mKCJkYXkiKS52YWx1ZU9mKCkrMSksY29uZGl0aW9uOkIuQ09ORElUSU9OX0JFVFdFRU59LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLlN0YXJ0VGltZVRpdGxlKSxhY3RpdmU6Qi5FTlRJVFlfU1RBUlRfVElNRSBpbiBuLHJlbW92YWJsZTohMH0se2lkOkIuRU5USVRZX0FUVFJJQlVURV9LRVlTLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzLHZhbHVlOkIuRU5USVRZX0FUVFJJQlVURV9LRVlTIGluIG4/bltCLkVOVElUWV9BVFRSSUJVVEVfS0VZU106e2ZpbHRlcmluZ0ZpZWxkOkIuRU5USVRZX0FUVFJJQlVURV9LRVlTLHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9IQVN9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLkF0dHJpYnV0ZUtleXNUaXRsZSksYWN0aXZlOkIuRU5USVRZX0FUVFJJQlVURV9LRVlTIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Qi5FTlRJVFlfQVRUUklCVVRFX1ZBTFVFUyxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtQXR0cmlidXRlVmFsdWVzLHZhbHVlOkIuRU5USVRZX0FUVFJJQlVURV9WQUxVRVMgaW4gbj9uW0IuRU5USVRZX0FUVFJJQlVURV9WQUxVRVNdOntmaWx0ZXJpbmdGaWVsZDpCLkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTLHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9IQVN9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLkF0dHJpYnV0ZVZhbHVlc1RpdGxlKSxhY3RpdmU6Qi5FTlRJVFlfQVRUUklCVVRFX1ZBTFVFUyBpbiBuLHJlbW92YWJsZTohMCxtZXRhOnthdHRyaWJ1dGVLZXk6KG5bQi5FTlRJVFlfQVRUUklCVVRFX0tFWVNdfHx7fSkudmFsdWV9fSx7aWQ6Ti5TVEFUU19UT1RBTCxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtU3RhdGlzdGljcyx2YWx1ZTpOLlNUQVRTX1RPVEFMIGluIG4/bltOLlNUQVRTX1RPVEFMXTp7ZmlsdGVyaW5nRmllbGQ6Ti5TVEFUU19UT1RBTCx2YWx1ZToiIixjb25kaXRpb246Qi5DT05ESVRJT05fR1JFQVRFUl9FUX0sdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoTnVtZXJpY0VudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hOdW1lcmljRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShXLlRvdGFsVGl0bGUpLGFjdGl2ZTpOLlNUQVRTX1RPVEFMIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Ti5TVEFUU19QQVNTRUQsY29tcG9uZW50OkYuRW50aXR5SXRlbVN0YXRpc3RpY3MsdmFsdWU6Ti5TVEFUU19QQVNTRUQgaW4gbj9uW04uU1RBVFNfUEFTU0VEXTp7ZmlsdGVyaW5nRmllbGQ6Ti5TVEFUU19QQVNTRUQsdmFsdWU6IiIsY29uZGl0aW9uOkIuQ09ORElUSU9OX0dSRUFURVJfRVF9LHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaE51bWVyaWNFbnRpdHkoZS52YWx1ZSkpJiYibGF1bmNoTnVtZXJpY0VudGl0eUhpbnQifSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVy5QYXNzZWRUaXRsZSksYWN0aXZlOk4uU1RBVFNfUEFTU0VEIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Ti5TVEFUU19GQUlMRUQsY29tcG9uZW50OkYuRW50aXR5SXRlbVN0YXRpc3RpY3MsdmFsdWU6Ti5TVEFUU19GQUlMRUQgaW4gbj9uW04uU1RBVFNfRkFJTEVEXTp7ZmlsdGVyaW5nRmllbGQ6Ti5TVEFUU19GQUlMRUQsdmFsdWU6IiIsY29uZGl0aW9uOkIuQ09ORElUSU9OX0dSRUFURVJfRVF9LHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaE51bWVyaWNFbnRpdHkoZS52YWx1ZSkpJiYibGF1bmNoTnVtZXJpY0VudGl0eUhpbnQifSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoVy5GYWlsZWRUaXRsZSksYWN0aXZlOk4uU1RBVFNfRkFJTEVEIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Ti5TVEFUU19TS0lQUEVELGNvbXBvbmVudDpGLkVudGl0eUl0ZW1TdGF0aXN0aWNzLHZhbHVlOk4uU1RBVFNfU0tJUFBFRCBpbiBuP25bTi5TVEFUU19TS0lQUEVEXTp7ZmlsdGVyaW5nRmllbGQ6Ti5TVEFUU19TS0lQUEVELHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9HUkVBVEVSX0VRfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5sYXVuY2hOdW1lcmljRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaE51bWVyaWNFbnRpdHlIaW50In0sdGl0bGU6dC5mb3JtYXRNZXNzYWdlKFcuU2tpcHBlZFRpdGxlKSxhY3RpdmU6Ti5TVEFUU19TS0lQUEVEIGluIG4scmVtb3ZhYmxlOiEwfV19fSx7a2V5OiJfX2dldER5bmFtaWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RHluYW1pY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldER5bmFtaWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RHluYW1pY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuZmlsdGVyVmFsdWVzLG49W107cmV0dXJuIFkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLnByb3BzLmRlZmVjdFR5cGVzW3JdLHM9by5sZW5ndGg+MSxpPSJzdGF0aXN0aWNzJGRlZmVjdHMkIityLnRvTG93ZXJDYXNlKCkrIiR0b3RhbCI7bi5wdXNoKHtpZDppLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1TdGF0aXN0aWNzLHZhbHVlOmkgaW4gdD90W2ldOntmaWx0ZXJpbmdGaWVsZDppLHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9HUkVBVEVSX0VRfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5sYXVuY2hOdW1lcmljRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaE51bWVyaWNFbnRpdHlIaW50In0sdGl0bGU6ZS5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoV1tyKyJfIisocz8idG90YWxUaXRsZSI6InRpdGxlIildKSxhY3RpdmU6aSBpbiB0LHJlbW92YWJsZTohMH0pLHMmJihuPW4uY29uY2F0KG8ubWFwKGZ1bmN0aW9uKG4pe3ZhciBvPSJzdGF0aXN0aWNzJGRlZmVjdHMkIituLnR5cGVSZWYudG9Mb3dlckNhc2UoKSsiJCIrbi5sb2NhdG9yO3JldHVybntpZDpvLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1TdGF0aXN0aWNzLHZhbHVlOm8gaW4gdD90W29dOntmaWx0ZXJpbmdGaWVsZDpvLHZhbHVlOiIiLGNvbmRpdGlvbjpCLkNPTkRJVElPTl9HUkVBVEVSX0VRfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5sYXVuY2hOdW1lcmljRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaE51bWVyaWNFbnRpdHlIaW50In0sdGl0bGU6ZS5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoV1tyKyJfdGl0bGUiXSkrIiAiK24uc2hvcnROYW1lLGFjdGl2ZTpvIGluIHQscmVtb3ZhYmxlOiEwLG1ldGE6e2xvbmdOYW1lOm4ubG9uZ05hbWUsc3ViSXRlbTohMH19fSkpKX0pLG59fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucmVuZGVyLG49KDAsZC5kZWZhdWx0KShlLFsicmVuZGVyIl0pO3JldHVybiB0KCgwLHUuZGVmYXVsdCkoe30sbix7ZmlsdGVyRW50aXRpZXM6dGhpcy5nZXRTdGF0aWNFbnRpdGllcygpLmNvbmNhdCh0aGlzLmdldER5bmFtaWNFbnRpdGllcygpKX0pKX19XSksdH0oUy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOkQuaW50bFNoYXBlLmlzUmVxdWlyZWQsZGVmZWN0VHlwZXM6SS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGZpbHRlclZhbHVlczpJLmRlZmF1bHQub2JqZWN0LHJlbmRlcjpJLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxpLmRlZmF1bHRQcm9wcz17ZmlsdGVyVmFsdWVzOnt9fSxzPWEpKXx8cyl8fHMpKTt0LkxhdW5jaExldmVsRW50aXRpZXM9cTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiTGF1bmNoTGV2ZWxFbnRpdGllcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9sYXVuY2hMZXZlbEVudGl0aWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2xhdW5jaExldmVsRW50aXRpZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwiREVGRUNUX1RZUEVTX1NFUVVFTkNFIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL2xhdW5jaExldmVsRW50aXRpZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoInN0YXRpc3RpY3MkZGVmZWN0cyQiLCJERUZFQ1RfRU5USVRZX0lEX0JBU0UiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvbGF1bmNoTGV2ZWxFbnRpdGllcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvc3RlcExldmVsRW50aXRpZXMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdGVwTGV2ZWxFbnRpdGllcz12b2lkIDA7dmFyIG8scyxpLGEsbD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLG09cihmKSxoPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHc9bigiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIpLE09cih3KSxrPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxJPXIoayksUD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxIPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvZGVmZWN0VHlwZXMuanMiKSxGPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbWV0aG9kVHlwZXMuanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLHo9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLFY9e1N0ZXBMZXZlbEVudGl0aWVzOntkaXNwbGF5TmFtZToiU3RlcExldmVsRW50aXRpZXMifX0sVz0oMCx4LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N0ZXBMZXZlbEVudGl0aWVzLmpzeCIsY29tcG9uZW50czpWLGxvY2FsczpbZV0saW1wb3J0czpbUi5kZWZhdWx0XX0pLFk9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9zdGVwTGV2ZWxFbnRpdGllcy5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbUi5kZWZhdWx0LEEuZGVmYXVsdF19KSxxPSgwLEQuZGVmaW5lTWVzc2FnZXMpKHtOYW1lVGl0bGU6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUZXN0IG5hbWUifSxEZXNjcmlwdGlvblRpdGxlOntpZDoiU3RlcExldmVsRW50aXRpZXMuRGVzY3JpcHRpb25UaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkRlc2NyaXB0aW9uIn0sRGVzY3JpcHRpb25QbGFjZWhvbGRlcjp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkRlc2NyaXB0aW9uUGxhY2Vob2xkZXIiLGRlZmF1bHRNZXNzYWdlOiJFbnRlciBkZXNjcmlwdGlvbiJ9LFN0YXR1c1RpdGxlOntpZDoiU3RlcExldmVsRW50aXRpZXMuU3RhdHVzVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJTdGF0dXMifSxTdGFydFRpbWVUaXRsZTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlN0YXJ0VGltZVRpdGxlIixkZWZhdWx0TWVzc2FnZToiU3RhcnQgdGltZSJ9LERlZmVjdENvbW1lbnRUaXRsZTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdENvbW1lbnRUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkRlZmVjdCBjb21tZW50In0sRGVmZWN0Q29tbWVudFBsYWNlaG9sZGVyOntpZDoiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0Q29tbWVudFBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiRW50ZXIgY29tbWVudCJ9LEF0dHJpYnV0ZUtleXNUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuQXR0cmlidXRlS2V5c1RpdGxlIixkZWZhdWx0TWVzc2FnZToiQXR0cmlidXRlIGtleXMifSxBdHRyaWJ1dGVWYWx1ZXNUaXRsZTp7aWQ6IkxhdW5jaExldmVsRW50aXRpZXMuQXR0cmlidXRlVmFsdWVzVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJBdHRyaWJ1dGUgdmFsdWVzIn0sQnRzSXNzdWVUaXRsZTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkJ0c0lzc3VlVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJJc3N1ZSBpbiBCVFMifSxCdHNJc3N1ZU9wdGlvbjE6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5CdHNJc3N1ZU9wdGlvbjEiLGRlZmF1bHRNZXNzYWdlOiJMaW5rZWQgYnVnIn0sQnRzSXNzdWVPcHRpb24yOntpZDoiU3RlcExldmVsRW50aXRpZXMuQnRzSXNzdWVPcHRpb24yIixkZWZhdWx0TWVzc2FnZToiTm8gbGlua2VkIGJ1ZyJ9LElnbm9yZUFBVGl0bGU6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5JZ25vcmVBQVRpdGxlIixkZWZhdWx0TWVzc2FnZToiSWdub3JlIGluIEFBIn0sSWdub3JlQUFPcHRpb24xOntpZDoiU3RlcExldmVsRW50aXRpZXMuSWdub3JlQUFPcHRpb24xIixkZWZhdWx0TWVzc2FnZTonV2l0aCAiSWdub3JlIEFBIiBtYXJrJ30sSWdub3JlQUFPcHRpb24yOntpZDoiU3RlcExldmVsRW50aXRpZXMuSWdub3JlQUFPcHRpb24yIixkZWZhdWx0TWVzc2FnZTonV2l0aG91dCAiSWdub3JlIEFBIiBtYXJrJ30sQW5hbHlzZVRpdGxlOntpZDoiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZVRpdGxlIixkZWZhdWx0TWVzc2FnZToiQW5hbHlzZWQgYnkgUlAgKEFBKSJ9LEFuYWx5c2VPcHRpb24xOntpZDoiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZU9wdGlvbjEiLGRlZmF1bHRNZXNzYWdlOidXaXRoICJBQSIgbWFyayd9LEFuYWx5c2VPcHRpb24yOntpZDoiU3RlcExldmVsRW50aXRpZXMuQW5hbHlzZU9wdGlvbjIiLGRlZmF1bHRNZXNzYWdlOidXaXRob3V0ICJBQSIgbWFyayd9LExhdW5jaFN0YXR1c1Bhc3NlZDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkxhdW5jaFN0YXR1c1Bhc3NlZCIsZGVmYXVsdE1lc3NhZ2U6IlBhc3NlZCJ9LExhdW5jaFN0YXR1c0ZhaWxlZDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkxhdW5jaFN0YXR1c0ZhaWxlZCIsZGVmYXVsdE1lc3NhZ2U6IkZhaWxlZCJ9LExhdW5jaFN0YXR1c1NraXBwZWQ6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNTa2lwcGVkIixkZWZhdWx0TWVzc2FnZToiU2tpcHBlZCJ9LExhdW5jaFN0YXR1c0ludGVycnVwdGVkOntpZDoiU3RlcExldmVsRW50aXRpZXMuTGF1bmNoU3RhdHVzSW50ZXJydXB0ZWQiLGRlZmF1bHRNZXNzYWdlOiJJbnRlcnJ1cHRlZCJ9LExhdW5jaFN0YXR1c0luUHJvZ3Jlc3M6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5MYXVuY2hTdGF0dXNJblByb2dyZXNzIixkZWZhdWx0TWVzc2FnZToiSW4gcHJvZ3Jlc3MifSxNZXRob2RUeXBlVGl0bGU6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5NZXRob2RUeXBlVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJNZXRob2QgdHlwZSJ9LERlZmVjdFR5cGVUaXRsZTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdFR5cGVUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkRlZmVjdCB0eXBlIn0sVHlwZUJlZm9yZVN1aXRlOntpZDoiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZVN1aXRlIixkZWZhdWx0TWVzc2FnZToiQmVmb3JlIHN1aXRlIn0sVHlwZUJlZm9yZUdyb3Vwczp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVCZWZvcmVHcm91cHMiLGRlZmF1bHRNZXNzYWdlOiJCZWZvcmUgZ3JvdXBzIn0sVHlwZUJlZm9yZUNsYXNzOntpZDoiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZUNsYXNzIixkZWZhdWx0TWVzc2FnZToiQmVmb3JlIGNsYXNzIn0sVHlwZUJlZm9yZVRlc3Q6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQmVmb3JlVGVzdCIsZGVmYXVsdE1lc3NhZ2U6IkJlZm9yZSB0ZXN0In0sVHlwZVRlc3Q6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlVGVzdCIsZGVmYXVsdE1lc3NhZ2U6IlRlc3QgY2xhc3MifSxUeXBlQmVmb3JlTWV0aG9kOntpZDoiU3RlcExldmVsRW50aXRpZXMuVHlwZUJlZm9yZU1ldGhvZCIsZGVmYXVsdE1lc3NhZ2U6IkJlZm9yZSBtZXRob2QifSxUeXBlU3RlcDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVTdGVwIixkZWZhdWx0TWVzc2FnZToiVGVzdCJ9LFR5cGVBZnRlck1ldGhvZDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlck1ldGhvZCIsZGVmYXVsdE1lc3NhZ2U6IkFmdGVyIG1ldGhvZCJ9LFR5cGVBZnRlclRlc3Q6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5UeXBlQWZ0ZXJUZXN0IixkZWZhdWx0TWVzc2FnZToiQWZ0ZXIgdGVzdCJ9LFR5cGVBZnRlckNsYXNzOntpZDoiU3RlcExldmVsRW50aXRpZXMuVHlwZUFmdGVyQ2xhc3MiLGRlZmF1bHRNZXNzYWdlOiJBZnRlciBjbGFzcyJ9LFR5cGVBZnRlckdyb3Vwczp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlR5cGVBZnRlckdyb3VwcyIsZGVmYXVsdE1lc3NhZ2U6IkFmdGVyIGdyb3VwcyJ9LFR5cGVBZnRlclN1aXRlOntpZDoiU3RlcExldmVsRW50aXRpZXMuVHlwZUFmdGVyU3VpdGUiLGRlZmF1bHRNZXNzYWdlOiJBZnRlciBzdWl0ZSJ9LFBST0RVQ1RfQlVHX0FMTDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLlBST0RVQ1RfQlVHX0FMTCIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBwcm9kdWN0IGJ1Z3MifSxBVVRPTUFUSU9OX0JVR19BTEw6e2lkOiJTdGVwTGV2ZWxFbnRpdGllcy5BVVRPTUFUSU9OX0JVR19BTEwiLGRlZmF1bHRNZXNzYWdlOiJBbGwgYXV0b21hdGlvbiBidWcifSxTWVNURU1fSVNTVUVfQUxMOntpZDoiU3RlcExldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX0FMTCIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBzeXN0ZW0gaXNzdWVzIn0sTk9fREVGRUNUX0FMTDp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLk5PX0RFRkVDVF9BTEwiLGRlZmF1bHRNZXNzYWdlOiJBbGwgbm8gZGVmZWN0cyJ9LERlZmVjdF9UeXBlX0FCMDAxOntpZDoiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0X1R5cGVfQUIwMDEiLGRlZmF1bHRNZXNzYWdlOiJBdXRvbWF0aW9uIGJ1ZyJ9LERlZmVjdF9UeXBlX1BCMDAxOntpZDoiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0X1R5cGVfUEIwMDEiLGRlZmF1bHRNZXNzYWdlOiJQcm9kdWN0IGJ1ZyJ9LERlZmVjdF9UeXBlX1NJMDAxOntpZDoiU3RlcExldmVsRW50aXRpZXMuRGVmZWN0X1R5cGVfU0kwMDEiLGRlZmF1bHRNZXNzYWdlOiJTeXN0ZW0gaXNzdWUifSxEZWZlY3RfVHlwZV9USTAwMTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX1RJMDAxIixkZWZhdWx0TWVzc2FnZToiVG8gaW52ZXN0aWdhdGUifSxEZWZlY3RfVHlwZV9ORDAwMTp7aWQ6IlN0ZXBMZXZlbEVudGl0aWVzLkRlZmVjdF9UeXBlX05EMDAxIixkZWZhdWx0TWVzc2FnZToiTm8gZGVmZWN0In19KSxLPVtILlRPX0lOVkVTVElHQVRFLnRvVXBwZXJDYXNlKCksSC5QUk9EVUNUX0JVRy50b1VwcGVyQ2FzZSgpLEguQVVUT01BVElPTl9CVUcudG9VcHBlckNhc2UoKSxILlNZU1RFTV9JU1NVRS50b1VwcGVyQ2FzZSgpLEguTk9fREVGRUNULnRvVXBwZXJDYXNlKCldLFg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBXKFkodCxlKSxlKX19KCJTdGVwTGV2ZWxFbnRpdGllcyIpKChvPSgwLEwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2RlZmVjdFR5cGVzOigwLHouZGVmZWN0VHlwZXNTZWxlY3RvcikoZSl9fSksKDAsRC5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXREZWZlY3RUeXBlRW50aXR5PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREZWZlY3RUeXBlRW50aXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldEVudGl0aWVzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLEUuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx2LmRlZmF1bHQpKHQsZSksKDAsZy5kZWZhdWx0KSh0LFt7a2V5OiJfX2dldEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGVmZWN0VHlwZUVudGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLmRlZmVjdFR5cGVzLHI9ZS5maWx0ZXJWYWx1ZXMsbz1bXSxzPVtdO3JldHVybiBLLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bltlXSxpPXIubGVuZ3RoPjE7bz1vLmNvbmNhdChyLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdG9yfSkpLGk/KHMucHVzaCh7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHFbclswXS50eXBlUmVmKyJfQUxMIl0pLHZhbHVlOnJbMF0udHlwZVJlZixncm91cElkOnJbMF0udHlwZVJlZn0pLHM9cy5jb25jYXQoci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2dyb3VwUmVmOmUudHlwZVJlZix2YWx1ZTplLmxvY2F0b3IsbGFiZWw6cVtlLmxvY2F0b3JdP3QuZm9ybWF0TWVzc2FnZShxWyJEZWZlY3RfVHlwZV8iK2UubG9jYXRvcl0pOmUubG9uZ05hbWV9fSkpKTpzPXMuY29uY2F0KHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLmxvY2F0b3IsbGFiZWw6cVtlLmxvY2F0b3JdP3QuZm9ybWF0TWVzc2FnZShxWyJEZWZlY3RfVHlwZV8iK2UubG9jYXRvcl0pOmUubG9uZ05hbWV9fSkpfSkse2lkOkcuRU5USVRZX0RFRkVDVF9UWVBFLGNvbXBvbmVudDpVLkVudGl0eURyb3Bkb3duLHZhbHVlOnJbRy5FTlRJVFlfREVGRUNUX1RZUEVdfHx7dmFsdWU6by5qb2luKCIsIiksY29uZGl0aW9uOkcuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5EZWZlY3RUeXBlVGl0bGUpLGFjdGl2ZTpHLkVOVElUWV9ERUZFQ1RfVFlQRSBpbiByLHJlbW92YWJsZTohMCxtZXRhOntvcHRpb25zOnMsbXVsdGlwbGU6ITAsc2VsZWN0QWxsOiEwfX19fSx7a2V5OiJfX2dldEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEVudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLmZpbHRlclZhbHVlcztyZXR1cm5be2lkOkcuRU5USVRZX05BTUUsY29tcG9uZW50OlUuRW50aXR5SXRlbU5hbWUsdmFsdWU6bltHLkVOVElUWV9OQU1FXXx8e3ZhbHVlOiIiLGNvbmRpdGlvbjpHLkNPTkRJVElPTl9DTlR9LHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLml0ZW1OYW1lRW50aXR5KGUudmFsdWUpKSYmIml0ZW1OYW1lRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShxLk5hbWVUaXRsZSksYWN0aXZlOiEwLHJlbW92YWJsZTohMSxzdGF0aWM6ITAsZXZlbnRJbmZvOkIuU1RFUF9QQUdFX0VWRU5UUy5SRUZJTkVfQllfTkFNRX0se2lkOkcuRU5USVRZX01FVEhPRF9UWVBFLGNvbXBvbmVudDpVLkVudGl0eURyb3Bkb3duLHZhbHVlOm5bRy5FTlRJVFlfTUVUSE9EX1RZUEVdfHx7dmFsdWU6W0YuQkVGT1JFX1NVSVRFLEYuQkVGT1JFX0dST1VQUyxGLkJFRk9SRV9DTEFTUyxGLkJFRk9SRV9URVNULEYuVEVTVCxGLkJFRk9SRV9NRVRIT0QsRi5TVEVQLEYuQUZURVJfTUVUSE9ELEYuQUZURVJfVEVTVCxGLkFGVEVSX0NMQVNTLEYuQUZURVJfR1JPVVBTLEYuQUZURVJfU1VJVEVdLmpvaW4oIiwiKSxjb25kaXRpb246Ry5DT05ESVRJT05fSU59LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShxLk1ldGhvZFR5cGVUaXRsZSksYWN0aXZlOkcuRU5USVRZX01FVEhPRF9UWVBFIGluIG4scmVtb3ZhYmxlOiEwLG1ldGE6e29wdGlvbnM6W3tsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5UeXBlQmVmb3JlU3VpdGUpLHZhbHVlOkYuQkVGT1JFX1NVSVRFfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZUJlZm9yZUdyb3VwcyksdmFsdWU6Ri5CRUZPUkVfR1JPVVBTfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZUJlZm9yZUNsYXNzKSx2YWx1ZTpGLkJFRk9SRV9DTEFTU30se2xhYmVsOnQuZm9ybWF0TWVzc2FnZShxLlR5cGVCZWZvcmVUZXN0KSx2YWx1ZTpGLkJFRk9SRV9URVNUfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZVRlc3QpLHZhbHVlOkYuVEVTVH0se2xhYmVsOnQuZm9ybWF0TWVzc2FnZShxLlR5cGVCZWZvcmVNZXRob2QpLHZhbHVlOkYuQkVGT1JFX01FVEhPRH0se2xhYmVsOnQuZm9ybWF0TWVzc2FnZShxLlR5cGVTdGVwKSx2YWx1ZTpGLlNURVB9LHtsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5UeXBlQWZ0ZXJNZXRob2QpLHZhbHVlOkYuQUZURVJfTUVUSE9EfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZUFmdGVyVGVzdCksdmFsdWU6Ri5BRlRFUl9URVNUfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZUFmdGVyQ2xhc3MpLHZhbHVlOkYuQUZURVJfQ0xBU1N9LHtsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5UeXBlQWZ0ZXJHcm91cHMpLHZhbHVlOkYuQUZURVJfR1JPVVBTfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuVHlwZUFmdGVyU3VpdGUpLHZhbHVlOkYuQUZURVJfU1VJVEV9XSxtdWx0aXBsZTohMCxzZWxlY3RBbGw6ITB9fSx7aWQ6Ry5FTlRJVFlfREVTQ1JJUFRJT04sY29tcG9uZW50OlUuRW50aXR5SXRlbURlc2NyaXB0aW9uLHZhbHVlOm5bRy5FTlRJVFlfREVTQ1JJUFRJT05dfHx7dmFsdWU6IiIsY29uZGl0aW9uOkcuQ09ORElUSU9OX0NOVH0sdGl0bGU6dC5mb3JtYXRNZXNzYWdlKHEuRGVzY3JpcHRpb25UaXRsZSksdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoRGVzY3JpcHRpb25FbnRpdHkoZS52YWx1ZSkpJiYibGF1bmNoRGVzY3JpcHRpb25FbnRpdHlIaW50In0sYWN0aXZlOkcuRU5USVRZX0RFU0NSSVBUSU9OIGluIG4scmVtb3ZhYmxlOiEwLG1ldGE6e3BsYWNlaG9sZGVyOnQuZm9ybWF0TWVzc2FnZShxLkRlc2NyaXB0aW9uUGxhY2Vob2xkZXIpfX0se2lkOkcuRU5USVRZX1NUQVRVUyxjb21wb25lbnQ6VS5FbnRpdHlEcm9wZG93bix2YWx1ZTpuW0cuRU5USVRZX1NUQVRVU118fHt2YWx1ZTpbTi5GQUlMRUQsTi5QQVNTRUQsTi5TS0lQUEVELE4uSU5URVJSVVBURUQsTi5JTl9QUk9HUkVTU10ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KS5qb2luKCIsIiksY29uZGl0aW9uOkcuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5TdGF0dXNUaXRsZSksYWN0aXZlOkcuRU5USVRZX1NUQVRVUyBpbiBuLHJlbW92YWJsZTohMCxtZXRhOntvcHRpb25zOlt7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuTGF1bmNoU3RhdHVzUGFzc2VkKSx2YWx1ZTpOLlBBU1NFRC50b1VwcGVyQ2FzZSgpfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuTGF1bmNoU3RhdHVzRmFpbGVkKSx2YWx1ZTpOLkZBSUxFRC50b1VwcGVyQ2FzZSgpfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuTGF1bmNoU3RhdHVzU2tpcHBlZCksdmFsdWU6Ti5TS0lQUEVELnRvVXBwZXJDYXNlKCl9LHtsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5MYXVuY2hTdGF0dXNJbnRlcnJ1cHRlZCksdmFsdWU6Ti5JTlRFUlJVUFRFRC50b1VwcGVyQ2FzZSgpfSx7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuTGF1bmNoU3RhdHVzSW5Qcm9ncmVzcyksdmFsdWU6Ti5JTl9QUk9HUkVTUy50b1VwcGVyQ2FzZSgpfV0sbXVsdGlwbGU6ITAsc2VsZWN0QWxsOiEwfX0se2lkOkcuRU5USVRZX1NUQVJUX1RJTUUsY29tcG9uZW50OlUuRW50aXR5SXRlbVN0YXJ0VGltZSx2YWx1ZTpuW0cuRU5USVRZX1NUQVJUX1RJTUVdfHx7dmFsdWU6KDAsTS5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnN1YnRyYWN0KDEsIm1vbnRocyIpLnZhbHVlT2YoKSsiLCIrKCgwLE0uZGVmYXVsdCkoKS5lbmRPZigiZGF5IikudmFsdWVPZigpKzEpLGNvbmRpdGlvbjpHLkNPTkRJVElPTl9CRVRXRUVOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5TdGFydFRpbWVUaXRsZSksYWN0aXZlOkcuRU5USVRZX1NUQVJUX1RJTUUgaW4gbixyZW1vdmFibGU6ITB9LHRoaXMuZ2V0RGVmZWN0VHlwZUVudGl0eSgpLHtpZDpHLkVOVElUWV9ERUZFQ1RfQ09NTUVOVCxjb21wb25lbnQ6VS5FbnRpdHlJdGVtRGVzY3JpcHRpb24sdmFsdWU6bltHLkVOVElUWV9ERUZFQ1RfQ09NTUVOVF18fHt2YWx1ZToiIixjb25kaXRpb246Ry5DT05ESVRJT05fQ05UfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5EZWZlY3RDb21tZW50VGl0bGUpLHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaERlc2NyaXB0aW9uRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaERlc2NyaXB0aW9uRW50aXR5SGludCJ9LGFjdGl2ZTpHLkVOVElUWV9ERUZFQ1RfQ09NTUVOVCBpbiBuLHJlbW92YWJsZTohMCxtZXRhOntwbGFjZWhvbGRlcjp0LmZvcm1hdE1lc3NhZ2UocS5EZWZlY3RDb21tZW50UGxhY2Vob2xkZXIpfX0se2lkOkcuRU5USVRZX0FUVFJJQlVURV9LRVlTLGNvbXBvbmVudDpVLkVudGl0eUl0ZW1BdHRyaWJ1dGVLZXlzLHZhbHVlOkcuRU5USVRZX0FUVFJJQlVURV9LRVlTIGluIG4/bltHLkVOVElUWV9BVFRSSUJVVEVfS0VZU106e3ZhbHVlOiIiLGNvbmRpdGlvbjpHLkNPTkRJVElPTl9IQVN9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShxLkF0dHJpYnV0ZUtleXNUaXRsZSksYWN0aXZlOkcuRU5USVRZX0FUVFJJQlVURV9LRVlTIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Ry5FTlRJVFlfQVRUUklCVVRFX1ZBTFVFUyxjb21wb25lbnQ6VS5FbnRpdHlJdGVtQXR0cmlidXRlVmFsdWVzLHZhbHVlOkcuRU5USVRZX0FUVFJJQlVURV9WQUxVRVMgaW4gbj9uW0cuRU5USVRZX0FUVFJJQlVURV9WQUxVRVNdOnt2YWx1ZToiIixjb25kaXRpb246Ry5DT05ESVRJT05fSEFTfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5BdHRyaWJ1dGVWYWx1ZXNUaXRsZSksYWN0aXZlOkcuRU5USVRZX0FUVFJJQlVURV9WQUxVRVMgaW4gbixyZW1vdmFibGU6ITAsbWV0YTp7YXR0cmlidXRlS2V5OihuW0cuRU5USVRZX0FUVFJJQlVURV9LRVlTXXx8e30pLnZhbHVlfX0se2lkOkcuRU5USVRZX0FVVE9BTkFMWVpFLGNvbXBvbmVudDpVLkVudGl0eURyb3Bkb3duLHZhbHVlOm5bRy5FTlRJVFlfQVVUT0FOQUxZWkVdfHx7dmFsdWU6IiIsY29uZGl0aW9uOkcuQ09ORElUSU9OX0lOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UocS5BbmFseXNlVGl0bGUpLGFjdGl2ZTpHLkVOVElUWV9BVVRPQU5BTFlaRSBpbiBuLHJlbW92YWJsZTohMCxtZXRhOntvcHRpb25zOlt7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuQW5hbHlzZU9wdGlvbjEpLHZhbHVlOiJUUlVFIn0se2xhYmVsOnQuZm9ybWF0TWVzc2FnZShxLkFuYWx5c2VPcHRpb24yKSx2YWx1ZToiRkFMU0UifV19fSx7aWQ6Ry5FTlRJVFlfSUdOT1JFX0FOQUxZWkVSLGNvbXBvbmVudDpVLkVudGl0eURyb3Bkb3duLHZhbHVlOm5bRy5FTlRJVFlfSUdOT1JFX0FOQUxZWkVSXXx8e3ZhbHVlOiIiLGNvbmRpdGlvbjpHLkNPTkRJVElPTl9JTn0sdGl0bGU6dC5mb3JtYXRNZXNzYWdlKHEuSWdub3JlQUFUaXRsZSksYWN0aXZlOkcuRU5USVRZX0lHTk9SRV9BTkFMWVpFUiBpbiBuLHJlbW92YWJsZTohMCxtZXRhOntvcHRpb25zOlt7bGFiZWw6dC5mb3JtYXRNZXNzYWdlKHEuSWdub3JlQUFPcHRpb24xKSx2YWx1ZToiVFJVRSJ9LHtsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5JZ25vcmVBQU9wdGlvbjIpLHZhbHVlOiJGQUxTRSJ9XX19LHtpZDpHLkVOVElUWV9CVFNfSVNTVUVTLGNvbXBvbmVudDpVLkVudGl0eURyb3Bkb3duLHZhbHVlOm5bRy5FTlRJVFlfQlRTX0lTU1VFU118fHt2YWx1ZToiIixjb25kaXRpb246Ry5DT05ESVRJT05fRVh9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShxLkJ0c0lzc3VlVGl0bGUpLGFjdGl2ZTpHLkVOVElUWV9CVFNfSVNTVUVTIGluIG4scmVtb3ZhYmxlOiEwLG1ldGE6e29wdGlvbnM6W3tsYWJlbDp0LmZvcm1hdE1lc3NhZ2UocS5CdHNJc3N1ZU9wdGlvbjEpLHZhbHVlOiJUUlVFIn0se2xhYmVsOnQuZm9ybWF0TWVzc2FnZShxLkJ0c0lzc3VlT3B0aW9uMiksdmFsdWU6IkZBTFNFIn1dfX1dfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnJlbmRlcixuPSgwLGQuZGVmYXVsdCkoZSxbInJlbmRlciJdKTtyZXR1cm4gdCgoMCx1LmRlZmF1bHQpKHt9LG4se2ZpbHRlckVudGl0aWVzOnRoaXMuZ2V0RW50aXRpZXMoKX0pKX19XSksdH0oUy5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtpbnRsOkQuaW50bFNoYXBlLmlzUmVxdWlyZWQsZGVmZWN0VHlwZXM6SS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGZpbHRlclZhbHVlczpJLmRlZmF1bHQub2JqZWN0LHJlbmRlcjpJLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkfSxpLmRlZmF1bHRQcm9wcz17ZmlsdGVyVmFsdWVzOnt9fSxzPWEpKXx8cyl8fHMpKTt0LlN0ZXBMZXZlbEVudGl0aWVzPVg7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsIlN0ZXBMZXZlbEVudGl0aWVzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N0ZXBMZXZlbEVudGl0aWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N0ZXBMZXZlbEVudGl0aWVzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIkRFRkVDVF9UWVBFU19TRVFVRU5DRSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9zdGVwTGV2ZWxFbnRpdGllcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvc3VpdGVMZXZlbEVudGl0aWVzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3VpdGVMZXZlbEVudGl0aWVzPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQT1yKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiksTT1yKHcpLGs9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEk9cihrKSxQPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLE49bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9zdGF0aXN0aWNzLmpzIiksSD1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksRj1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vYW5hbHl0aWNzL2V2ZW50cy9pbmRleC5qcyIpLFU9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb25zdGFudHMuanMiKSxHPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSx6PXtTdWl0ZUxldmVsRW50aXRpZXM6e2Rpc3BsYXlOYW1lOiJTdWl0ZUxldmVsRW50aXRpZXMifX0sVj0oMCx4LmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N1aXRlTGV2ZWxFbnRpdGllcy5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W1IuZGVmYXVsdF19KSxXPSgwLE8uZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vZmlsdGVyRW50aXRpZXNHcm91cHMvc3VpdGVMZXZlbEVudGl0aWVzLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOltSLmRlZmF1bHQsQS5kZWZhdWx0XX0pLFk9KDAsRC5kZWZpbmVNZXNzYWdlcykoe05hbWVUaXRsZTp7aWQ6IlN1aXRlTGV2ZWxFbnRpdGllcy5OYW1lVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJTdWl0ZSBuYW1lIn0sRGVzY3JpcHRpb25UaXRsZTp7aWQ6IlN1aXRlTGV2ZWxFbnRpdGllcy5EZXNjcmlwdGlvblRpdGxlIixkZWZhdWx0TWVzc2FnZToiRGVzY3JpcHRpb24ifSxTdGFydFRpbWVUaXRsZTp7aWQ6IlN1aXRlTGV2ZWxFbnRpdGllcy5TdGFydFRpbWVUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlN0YXJ0IHRpbWUifSxBdHRyaWJ1dGVLZXlzVGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLkF0dHJpYnV0ZUtleXNUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkF0dHJpYnV0ZSBrZXlzIn0sQXR0cmlidXRlVmFsdWVzVGl0bGU6e2lkOiJMYXVuY2hMZXZlbEVudGl0aWVzLkF0dHJpYnV0ZVZhbHVlc1RpdGxlIixkZWZhdWx0TWVzc2FnZToiQXR0cmlidXRlIHZhbHVlcyJ9LFRvdGFsVGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuVG90YWxUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlRvdGFsIn0sUGFzc2VkVGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuUGFzc2VkVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJQYXNzZWQifSxGYWlsZWRUaXRsZTp7aWQ6IlN1aXRlTGV2ZWxFbnRpdGllcy5GYWlsZWRUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkZhaWxlZCJ9LFNraXBwZWRUaXRsZTp7aWQ6IlN1aXRlTGV2ZWxFbnRpdGllcy5Ta2lwcGVkVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJTa2lwcGVkIn0sUFJPRFVDVF9CVUdfdGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuUFJPRFVDVF9CVUdfdGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJQcm9kdWN0IGJ1ZyJ9LFBST0RVQ1RfQlVHX3RvdGFsVGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuUFJPRFVDVF9CVUdfdG90YWxUaXRsZSIsZGVmYXVsdE1lc3NhZ2U6IlRvdGFsIHByb2R1Y3QgYnVncyJ9LEFVVE9NQVRJT05fQlVHX3RpdGxlOntpZDoiU3VpdGVMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RpdGxlIixkZWZhdWx0TWVzc2FnZToiQXV0b21hdGlvbiBidWcifSxBVVRPTUFUSU9OX0JVR190b3RhbFRpdGxlOntpZDoiU3VpdGVMZXZlbEVudGl0aWVzLkFVVE9NQVRJT05fQlVHX3RvdGFsVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCBhdXRvbWF0aW9uIGJ1Z3MifSxTWVNURU1fSVNTVUVfdGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX3RpdGxlIixkZWZhdWx0TWVzc2FnZToiU3lzdGVtIGlzc3VlIn0sU1lTVEVNX0lTU1VFX3RvdGFsVGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuU1lTVEVNX0lTU1VFX3RvdGFsVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCBzeXN0ZW0gaXNzdWVzIn0sVE9fSU5WRVNUSUdBVEVfdGl0bGU6e2lkOiJTdWl0ZUxldmVsRW50aXRpZXMuVE9fSU5WRVNUSUdBVEVfdGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJUbyBpbnZlc3RpZ2F0ZSJ9fSkscT1bSC5QUk9EVUNUX0JVRy50b1VwcGVyQ2FzZSgpLEguQVVUT01BVElPTl9CVUcudG9VcHBlckNhc2UoKSxILlNZU1RFTV9JU1NVRS50b1VwcGVyQ2FzZSgpLEguVE9fSU5WRVNUSUdBVEUudG9VcHBlckNhc2UoKV0sSz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFYoVyh0LGUpLGUpfX0oIlN1aXRlTGV2ZWxFbnRpdGllcyIpKChvPSgwLEwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2RlZmVjdFR5cGVzOigwLEcuZGVmZWN0VHlwZXNTZWxlY3RvcikoZSl9fSksKDAsRC5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsbS5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxFLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLHAuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRTdGF0aWNFbnRpdGllcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZ2V0RHluYW1pY0VudGl0aWVzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxFLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsdi5kZWZhdWx0KSh0LGUpLCgwLGcuZGVmYXVsdCkodCxbe2tleToiX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldER5bmFtaWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRTdGF0aWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldFN0YXRpY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRTdGF0aWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0U3RhdGljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS5maWx0ZXJWYWx1ZXM7cmV0dXJuW3tpZDpVLkVOVElUWV9OQU1FLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1OYW1lLHZhbHVlOm5bVS5FTlRJVFlfTkFNRV18fHt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fQ05UfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5pdGVtTmFtZUVudGl0eShlLnZhbHVlKSkmJiJpdGVtTmFtZUVudGl0eUhpbnQifSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoWS5OYW1lVGl0bGUpLGFjdGl2ZTohMCxyZW1vdmFibGU6ITEsc3RhdGljOiEwLGV2ZW50SW5mbzpCLlNVSVRFU19QQUdFX0VWRU5UUy5SRUZJTkVfQllfTkFNRX0se2lkOlUuRU5USVRZX1NUQVJUX1RJTUUsY29tcG9uZW50OkYuRW50aXR5SXRlbVN0YXJ0VGltZSx2YWx1ZTpuW1UuRU5USVRZX1NUQVJUX1RJTUVdfHx7dmFsdWU6KDAsTS5kZWZhdWx0KSgpLnN0YXJ0T2YoImRheSIpLnN1YnRyYWN0KDEsIm1vbnRocyIpLnZhbHVlT2YoKSsiLCIrKCgwLE0uZGVmYXVsdCkoKS5lbmRPZigiZGF5IikudmFsdWVPZigpKzEpLGNvbmRpdGlvbjpVLkNPTkRJVElPTl9CRVRXRUVOfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoWS5TdGFydFRpbWVUaXRsZSksYWN0aXZlOlUuRU5USVRZX1NUQVJUX1RJTUUgaW4gbixyZW1vdmFibGU6ITB9LHtpZDpVLkVOVElUWV9ERVNDUklQVElPTixjb21wb25lbnQ6Ri5FbnRpdHlJdGVtRGVzY3JpcHRpb24sdmFsdWU6bltVLkVOVElUWV9ERVNDUklQVElPTl18fHt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fQ05UfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoWS5EZXNjcmlwdGlvblRpdGxlKSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5sYXVuY2hEZXNjcmlwdGlvbkVudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hEZXNjcmlwdGlvbkVudGl0eUhpbnQifSxhY3RpdmU6VS5FTlRJVFlfREVTQ1JJUFRJT04gaW4gbixyZW1vdmFibGU6ITB9LHtpZDpVLkVOVElUWV9BVFRSSUJVVEVfS0VZUyxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtQXR0cmlidXRlS2V5cyx2YWx1ZTpVLkVOVElUWV9BVFRSSUJVVEVfS0VZUyBpbiBuP25bVS5FTlRJVFlfQVRUUklCVVRFX0tFWVNdOnt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fSEFTfSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoWS5BdHRyaWJ1dGVLZXlzVGl0bGUpLGFjdGl2ZTpVLkVOVElUWV9BVFRSSUJVVEVfS0VZUyBpbiBuLHJlbW92YWJsZTohMH0se2lkOlUuRU5USVRZX0FUVFJJQlVURV9WQUxVRVMsY29tcG9uZW50OkYuRW50aXR5SXRlbUF0dHJpYnV0ZVZhbHVlcyx2YWx1ZTpVLkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTIGluIG4/bltVLkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTXTp7dmFsdWU6IiIsY29uZGl0aW9uOlUuQ09ORElUSU9OX0hBU30sdGl0bGU6dC5mb3JtYXRNZXNzYWdlKFkuQXR0cmlidXRlVmFsdWVzVGl0bGUpLGFjdGl2ZTpVLkVOVElUWV9BVFRSSUJVVEVfVkFMVUVTIGluIG4scmVtb3ZhYmxlOiEwLG1ldGE6e2F0dHJpYnV0ZUtleToobltVLkVOVElUWV9BVFRSSUJVVEVfS0VZU118fHt9KS52YWx1ZX19LHtpZDpOLlNUQVRTX1RPVEFMLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1TdGF0aXN0aWNzLHZhbHVlOm5bTi5TVEFUU19UT1RBTF18fHt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fR1JFQVRFUl9FUX0sdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoTnVtZXJpY0VudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hOdW1lcmljRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShZLlRvdGFsVGl0bGUpLGFjdGl2ZTpOLlNUQVRTX1RPVEFMIGluIG4scmVtb3ZhYmxlOiEwfSx7aWQ6Ti5TVEFUU19QQVNTRUQsY29tcG9uZW50OkYuRW50aXR5SXRlbVN0YXRpc3RpY3MsdmFsdWU6bltOLlNUQVRTX1BBU1NFRF18fHt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fR1JFQVRFUl9FUX0sdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoTnVtZXJpY0VudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hOdW1lcmljRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShZLlBhc3NlZFRpdGxlKSxhY3RpdmU6Ti5TVEFUU19QQVNTRUQgaW4gbixyZW1vdmFibGU6ITB9LHtpZDpOLlNUQVRTX0ZBSUxFRCxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtU3RhdGlzdGljcyx2YWx1ZTpuW04uU1RBVFNfRkFJTEVEXXx8e3ZhbHVlOiIiLGNvbmRpdGlvbjpVLkNPTkRJVElPTl9HUkVBVEVSX0VRfSx2YWxpZGF0aW9uRnVuYzpmdW5jdGlvbihlKXtyZXR1cm4oIWV8fCFlLnZhbHVlfHwhUC52YWxpZGF0ZS5sYXVuY2hOdW1lcmljRW50aXR5KGUudmFsdWUpKSYmImxhdW5jaE51bWVyaWNFbnRpdHlIaW50In0sdGl0bGU6dC5mb3JtYXRNZXNzYWdlKFkuRmFpbGVkVGl0bGUpLGFjdGl2ZTpOLlNUQVRTX0ZBSUxFRCBpbiBuLHJlbW92YWJsZTohMH0se2lkOk4uU1RBVFNfU0tJUFBFRCxjb21wb25lbnQ6Ri5FbnRpdHlJdGVtU3RhdGlzdGljcyx2YWx1ZTpuW04uU1RBVFNfU0tJUFBFRF18fHt2YWx1ZToiIixjb25kaXRpb246VS5DT05ESVRJT05fR1JFQVRFUl9FUX0sdmFsaWRhdGlvbkZ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKCFlfHwhZS52YWx1ZXx8IVAudmFsaWRhdGUubGF1bmNoTnVtZXJpY0VudGl0eShlLnZhbHVlKSkmJiJsYXVuY2hOdW1lcmljRW50aXR5SGludCJ9LHRpdGxlOnQuZm9ybWF0TWVzc2FnZShZLlNraXBwZWRUaXRsZSksYWN0aXZlOk4uU1RBVFNfU0tJUFBFRCBpbiBuLHJlbW92YWJsZTohMH1dfX0se2tleToiX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldER5bmFtaWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RHluYW1pY0VudGl0aWVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREeW5hbWljRW50aXRpZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldER5bmFtaWNFbnRpdGllc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5pbnRsLHI9dC5maWx0ZXJWYWx1ZXMsbz1bXTtyZXR1cm4gcS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBzPWUucHJvcHMuZGVmZWN0VHlwZXNbdF0saT1zLmxlbmd0aD4xO28ucHVzaCh7aWQ6InN0YXRpc3RpY3MkZGVmZWN0cyQiK3QudG9Mb3dlckNhc2UoKSsiJHRvdGFsIixjb21wb25lbnQ6Ri5FbnRpdHlJdGVtU3RhdGlzdGljcyx2YWx1ZTpyWyJzdGF0aXN0aWNzJGRlZmVjdHMkIit0LnRvTG93ZXJDYXNlKCkrIiR0b3RhbCJdfHx7dmFsdWU6IiIsY29uZGl0aW9uOlUuQ09ORElUSU9OX0dSRUFURVJfRVF9LHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaE51bWVyaWNFbnRpdHkoZS52YWx1ZSkpJiYibGF1bmNoTnVtZXJpY0VudGl0eUhpbnQifSx0aXRsZTpuLmZvcm1hdE1lc3NhZ2UoWVt0KyJfIisoaT8idG90YWxUaXRsZSI6InRpdGxlIildKSxhY3RpdmU6InN0YXRpc3RpY3MkZGVmZWN0cyQiK3QudG9Mb3dlckNhc2UoKSsiJHRvdGFsImluIHIscmVtb3ZhYmxlOiEwfSksaSYmKG89by5jb25jYXQocy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2lkOiJzdGF0aXN0aWNzJGRlZmVjdHMkIitlLnR5cGVSZWYudG9Mb3dlckNhc2UoKSsiJCIrZS5sb2NhdG9yLGNvbXBvbmVudDpGLkVudGl0eUl0ZW1TdGF0aXN0aWNzLHZhbHVlOnJbInN0YXRpc3RpY3MkZGVmZWN0cyQiK2UudHlwZVJlZi50b0xvd2VyQ2FzZSgpKyIkIitlLmxvY2F0b3JdfHx7dmFsdWU6IiIsY29uZGl0aW9uOlUuQ09ORElUSU9OX0dSRUFURVJfRVF9LHZhbGlkYXRpb25GdW5jOmZ1bmN0aW9uKGUpe3JldHVybighZXx8IWUudmFsdWV8fCFQLnZhbGlkYXRlLmxhdW5jaE51bWVyaWNFbnRpdHkoZS52YWx1ZSkpJiYibGF1bmNoTnVtZXJpY0VudGl0eUhpbnQifSx0aXRsZTpuLmZvcm1hdE1lc3NhZ2UoWVt0KyJfdGl0bGUiXSkrIiAiK2Uuc2hvcnROYW1lLGFjdGl2ZToic3RhdGlzdGljcyRkZWZlY3RzJCIrZS50eXBlUmVmLnRvTG93ZXJDYXNlKCkrIiQiK2UubG9jYXRvciBpbiByLHJlbW92YWJsZTohMCxtZXRhOntsb25nTmFtZTplLmxvbmdOYW1lLHN1Ykl0ZW06ITB9fX0pKSl9KSxvfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnJlbmRlcixuPSgwLGQuZGVmYXVsdCkoZSxbInJlbmRlciJdKTtyZXR1cm4gdCgoMCx1LmRlZmF1bHQpKHt9LG4se2ZpbHRlckVudGl0aWVzOnRoaXMuZ2V0U3RhdGljRW50aXRpZXMoKS5jb25jYXQodGhpcy5nZXREeW5hbWljRW50aXRpZXMoKSl9KSl9fV0pLHR9KFMuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17aW50bDpELmludGxTaGFwZS5pc1JlcXVpcmVkLGRlZmVjdFR5cGVzOkkuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxmaWx0ZXJWYWx1ZXM6SS5kZWZhdWx0Lm9iamVjdCxyZW5kZXI6SS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0saS5kZWZhdWx0UHJvcHM9e2ZpbHRlclZhbHVlczp7fX0scz1hKSl8fHMpfHxzKSk7dC5TdWl0ZUxldmVsRW50aXRpZXM9SzshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSywiU3VpdGVMZXZlbEVudGl0aWVzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N1aXRlTGV2ZWxFbnRpdGllcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihZLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9zdWl0ZUxldmVsRW50aXRpZXMuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocSwiREVGRUNUX1RZUEVTX1NFUVVFTkNFIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2ZpbHRlckVudGl0aWVzR3JvdXBzL3N1aXRlTGV2ZWxFbnRpdGllcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcigic3RhdGlzdGljcyRkZWZlY3RzJCIsIkRFRkVDVF9FTlRJVFlfSURfQkFTRSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9maWx0ZXJFbnRpdGllc0dyb3Vwcy9zdWl0ZUxldmVsRW50aXRpZXMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmFyQ2hhcnQ9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL2luZGV4LmpzIiksRD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0LnNjc3MiKSx3PXIoRCksTT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0VG9vbHRpcC9pbmRleC5qcyIpLGs9e0JhckNoYXJ0OntkaXNwbGF5TmFtZToiQmFyQ2hhcnQifX0sST0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0LmpzeCIsY29tcG9uZW50czprLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLFA9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9iYXJDaGFydC5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxOPVIuZGVmYXVsdC5iaW5kKHcuZGVmYXVsdCksSD10LkJhckNoYXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSShQKHQsZSksZSl9fSgiQmFyQ2hhcnQiKSgobz0oMCxMLndpdGhUb29sdGlwKSh7VG9vbHRpcENvbXBvbmVudDpNLkJhckNoYXJ0VG9vbHRpcCxkYXRhOnt3aWR0aDoxNzAsYWxpZ246ImxlZnQiLG5vQXJyb3c6ITB9fSkpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLGQuZGVmYXVsdCkodGhpcyx0KSwoMCxtLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCx1LmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGcuZGVmYXVsdCkodCxlKSwoMCxwLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpOKCJiYXItY2hhcnQiKX0sQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpOKCJzZWdtZW50IiwicGFzc2VkIiksc3R5bGU6e3dpZHRoOnRoaXMucHJvcHMucGFzc2VkKyJweCJ9fSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpOKCJzZWdtZW50IiwiZmFpbGVkIiksc3R5bGU6e3dpZHRoOnRoaXMucHJvcHMuZmFpbGVkKyJweCJ9fSksQS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpOKCJzZWdtZW50Iiwic2tpcHBlZCIpLHN0eWxlOnt3aWR0aDp0aGlzLnByb3BzLnNraXBwZWQrInB4In19KSl9fV0pLHR9KFQuQ29tcG9uZW50KSxpLnByb3BUeXBlcz17cGFzc2VkOnguZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxmYWlsZWQ6eC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHNraXBwZWQ6eC5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfSxzPWEpKXx8cyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEgsIkJhckNoYXJ0IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKE4sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0LmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9iYXJDaGFydC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImJhci1jaGFydCI6ImJhckNoYXJ0X19iYXItY2hhcnRfX18xM044SiIsc2VnbWVudDoiYmFyQ2hhcnRfX3NlZ21lbnRfX18xcHFDRyIscGFzc2VkOiJiYXJDaGFydF9fcGFzc2VkX19fMUhhMXMiLGZhaWxlZDoiYmFyQ2hhcnRfX2ZhaWxlZF9fXzNpOGVqIixza2lwcGVkOiJiYXJDaGFydF9fc2tpcHBlZF9fX2VlS0Q0In19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0VG9vbHRpcC9iYXJDaGFydFRvb2x0aXAuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5CYXJDaGFydFRvb2x0aXA9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHU9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9iYXJDaGFydFRvb2x0aXAvYmFyQ2hhcnRUb29sdGlwLnNjc3MiKSxjPXIodSksZD1zLmRlZmF1bHQuYmluZChjLmRlZmF1bHQpLF89dC5CYXJDaGFydFRvb2x0aXA9ZnVuY3Rpb24odCl7dmFyIG49dC5wYXNzZWQscj10LmZhaWxlZCxvPXQuc2tpcHBlZDtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiYmFyLWNoYXJ0LXRvb2x0aXAiKX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgic3RhdHMtaXRlbSIpfSxlLmNyZWF0ZUVsZW1lbnQobC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQmFyQ2hhcnRUb29sdGlwLnBhc3NlZCIsZGVmYXVsdE1lc3NhZ2U6IlBhc3NlZDoifSksZS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLG4udG9GaXhlZCgyKSsiJSIpKSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJzdGF0cy1pdGVtIil9LGUuY3JlYXRlRWxlbWVudChsLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJCYXJDaGFydFRvb2x0aXAuZmFpbGVkIixkZWZhdWx0TWVzc2FnZToiRmFpbGVkOiJ9KSxlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsci50b0ZpeGVkKDIpKyIlIikpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmQoInN0YXRzLWl0ZW0iKX0sZS5jcmVhdGVFbGVtZW50KGwuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkJhckNoYXJ0VG9vbHRpcC5za2lwcGVkIixkZWZhdWx0TWVzc2FnZToiU2tpcHBlZDoifSksZS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLG8udG9GaXhlZCgyKSsiJSIpKSl9O18ucHJvcFR5cGVzPXtwYXNzZWQ6YS5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLGZhaWxlZDphLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsc2tpcHBlZDphLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJCYXJDaGFydFRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvYmFyQ2hhcnQvYmFyQ2hhcnRUb29sdGlwL2JhckNoYXJ0VG9vbHRpcC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9iYXJDaGFydFRvb2x0aXAvYmFyQ2hhcnRUb29sdGlwLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvYmFyQ2hhcnQvYmFyQ2hhcnRUb29sdGlwL2JhckNoYXJ0VG9vbHRpcC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImJhci1jaGFydC10b29sdGlwIjoiYmFyQ2hhcnRUb29sdGlwX19iYXItY2hhcnQtdG9vbHRpcF9fXzFReUh4Iiwic3RhdHMtaXRlbSI6ImJhckNoYXJ0VG9vbHRpcF9fc3RhdHMtaXRlbV9fXzI3MFlJIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2JhckNoYXJ0L2JhckNoYXJ0VG9vbHRpcC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9iYXJDaGFydFRvb2x0aXAvYmFyQ2hhcnRUb29sdGlwLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJCYXJDaGFydFRvb2x0aXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkJhckNoYXJ0VG9vbHRpcH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvYmFyQ2hhcnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvYmFyQ2hhcnQvYmFyQ2hhcnQuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkJhckNoYXJ0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5CYXJDaGFydH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZmVjdFR5cGVCbG9jaz12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLGM9cih1KSxkPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLF89cihkKSxwPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksYj1yKGcpLEU9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGo9cihSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxMPXIoeCksRD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLE09bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RUeXBlVG9vbHRpcC9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL3Rvb2x0aXBzL2hvdmVyYWJsZVRvb2x0aXAvaW5kZXguanMiKSxJPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5zY3NzIiksUD1yKEkpLE49e0RlZmVjdFR5cGVCbG9jazp7ZGlzcGxheU5hbWU6IkRlZmVjdFR5cGVCbG9jayJ9fSxIPSgwLFMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxGPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5qc3giLGNvbXBvbmVudHM6Tixsb2NhbHM6W10saW1wb3J0czpbQy5kZWZhdWx0LHkuZGVmYXVsdF19KSxCPWouZGVmYXVsdC5iaW5kKFAuZGVmYXVsdCksVT10LkRlZmVjdFR5cGVCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEgoRih0LGUpLGUpfX0oIkRlZmVjdFR5cGVCbG9jayIpKChvPSgwLGsud2l0aEhvdmVyYWJsZVRvb2x0aXApKHtUb29sdGlwQ29tcG9uZW50Ok0uRGVmZWN0VHlwZVRvb2x0aXAsZGF0YTp7d2lkdGg6MjM1LGFsaWduOiJyaWdodCIsbm9BcnJvdzohMCxkZXNrdG9wT25seTohMH19KSxzPSgwLEQuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3RDb25maWc6KDAsdy5wcm9qZWN0Q29uZmlnU2VsZWN0b3IpKGUpfX0pLG8oaT1zKChsPWE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybigwLF8uZGVmYXVsdCkodGhpcyx0KSwoMCxoLmRlZmF1bHQpKHRoaXMsKHQuX19wcm90b19ffHwoMCxjLmRlZmF1bHQpKHQpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnByb2plY3RDb25maWcuc3ViVHlwZXMmJnRoaXMucHJvcHMucHJvamVjdENvbmZpZy5zdWJUeXBlc1t0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKV1bMF07cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QigiZGVmZWN0LXR5cGUtYmxvY2siKX0sZSYmQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQS5GcmFnbWVudCxudWxsLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QigiY2lyY2xlIiksc3R5bGU6e2JhY2tncm91bmRDb2xvcjplLmNvbG9yfX0pLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOkIoInRpdGxlIil9LGUuc2hvcnROYW1lKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoInZhbHVlIiksc3R5bGU6e2JvcmRlckNvbG9yOmUuY29sb3J9fSx0aGlzLnByb3BzLmRhdGEudG90YWwpKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17ZGF0YTpMLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQscHJvamVjdENvbmZpZzpMLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdHlwZTpMLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LGk9bCkpfHxpKXx8aSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJEZWZlY3RUeXBlQmxvY2siLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kZWZlY3RUeXBlQmxvY2svZGVmZWN0VHlwZUJsb2NrLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kZWZlY3RUeXBlQmxvY2svZGVmZWN0VHlwZUJsb2NrLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZGVmZWN0LXR5cGUtYmxvY2siOiJkZWZlY3RUeXBlQmxvY2tfX2RlZmVjdC10eXBlLWJsb2NrX19fMzBrYk0iLGNpcmNsZToiZGVmZWN0VHlwZUJsb2NrX19jaXJjbGVfX18yT0xuQiIsdGl0bGU6ImRlZmVjdFR5cGVCbG9ja19fdGl0bGVfX18xSS1hWSIsdmFsdWU6ImRlZmVjdFR5cGVCbG9ja19fdmFsdWVfX18yRng4TyJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kZWZlY3RUeXBlQmxvY2svaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZGVmZWN0VHlwZUJsb2NrL2RlZmVjdFR5cGVCbG9jay5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVmZWN0VHlwZUJsb2NrIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RUeXBlQmxvY2t9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRHVyYXRpb249dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1yKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1yKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PXIoeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1yKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksUj1yKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHg9cihqKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL2luZGV4LmpzIiksRD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uLnNjc3MiKSx3PXIoRCksTT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uVG9vbHRpcC9pbmRleC5qcyIpLGs9e0R1cmF0aW9uOntkaXNwbGF5TmFtZToiRHVyYXRpb24ifX0sST0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uLmpzeCIsY29tcG9uZW50czprLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLFA9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kdXJhdGlvbi9kdXJhdGlvbi5qc3giLGNvbXBvbmVudHM6ayxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxOPVIuZGVmYXVsdC5iaW5kKHcuZGVmYXVsdCksSD10LkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSShQKHQsZSksZSl9fSgiRHVyYXRpb24iKSgobz0oMCxMLndpdGhUb29sdGlwKSh7VG9vbHRpcENvbXBvbmVudDpNLkR1cmF0aW9uVG9vbHRpcCxkYXRhOnt3aWR0aDo0MjAsbGVmdE9mZnNldDoxNTAsbm9BcnJvdzohMH19KSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpOKCJkdXJhdGlvbiIpfSx0aGlzLnByb3BzLmR1cmF0aW9uKX19XSksdH0oVC5Db21wb25lbnQpLGkucHJvcFR5cGVzPXtkdXJhdGlvbjp4LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9LHM9YSkpfHxzKTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSCwiRHVyYXRpb24iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vZHVyYXRpb24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vZHVyYXRpb24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtkdXJhdGlvbjoiZHVyYXRpb25fX2R1cmF0aW9uX19fM2tPWDAifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vZHVyYXRpb25Ub29sdGlwL2R1cmF0aW9uVG9vbHRpcC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkR1cmF0aW9uVG9vbHRpcD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxhPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vZHVyYXRpb25Ub29sdGlwL2R1cmF0aW9uVG9vbHRpcC5zY3NzIiksbD1yKGEpLHU9cy5kZWZhdWx0LmJpbmQobC5kZWZhdWx0KSxjPXQuRHVyYXRpb25Ub29sdGlwPWZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnUoImR1cmF0aW9uLXRvb2x0aXAiKX0sZS5jcmVhdGVFbGVtZW50KGkuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkR1cmF0aW9uVG9vbHRpcC5tZXNzYWdlIixkZWZhdWx0TWVzc2FnZToiRHVyYXRpb24gaXMgaW50ZXJ2YWwgYmV0d2VlbiBmaXJzdCBjaGlsZCBzdGFydHMgYW5kIGxhc3QgY2hpbGQgZW5kcy4gQnV0IGlmIGNoaWxkIHJ1biBpbiBwYXJhbGxlbCwgZW5kIHRpbWUgaXMgYSB0aW1lIG9mIGxvbmdlc3QgY2hpbGQsIGluIHRoaXMgY2FzZSBkdXJhdGlvbiB3aWxsIG5vdCBiZSBlcXVhbCB0byBjaGlsZCBkdXJhdGlvbiBzdW0uIn0pKX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsIkR1cmF0aW9uVG9vbHRpcCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kdXJhdGlvbi9kdXJhdGlvblRvb2x0aXAvZHVyYXRpb25Ub29sdGlwLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uVG9vbHRpcC9kdXJhdGlvblRvb2x0aXAuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kdXJhdGlvbi9kdXJhdGlvblRvb2x0aXAvZHVyYXRpb25Ub29sdGlwLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZHVyYXRpb24tdG9vbHRpcCI6ImR1cmF0aW9uVG9vbHRpcF9fZHVyYXRpb24tdG9vbHRpcF9fXzFJbm5aIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2R1cmF0aW9uL2R1cmF0aW9uVG9vbHRpcC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kdXJhdGlvbi9kdXJhdGlvblRvb2x0aXAvZHVyYXRpb25Ub29sdGlwLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEdXJhdGlvblRvb2x0aXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkR1cmF0aW9uVG9vbHRpcH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvZHVyYXRpb24vZHVyYXRpb24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkR1cmF0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EdXJhdGlvbn19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvaW5mb0xpbmUuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkluZm9MaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JbmZvTGluZX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvaW5mb0xpbmUuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbmZvTGluZT12b2lkIDA7dmFyIG8scyxpLGE9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vc3JjL2NvbW1vbi91dGlscy90aW1lRGF0ZVV0aWxzLmpzIiksaz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksST1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLFA9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9pbmZvTGluZS5zY3NzIiksTj1yKFApLEg9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9iYXJDaGFydC9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kdXJhdGlvbi9pbmRleC5qcyIpLEI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9kZWZlY3RUeXBlQmxvY2svaW5kZXguanMiKSxVPXtJbmZvTGluZTp7ZGlzcGxheU5hbWU6IkluZm9MaW5lIn19LEc9KDAsai5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9pbmZvTGluZS5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSx6PSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvaW5mb0xpbmUuanN4Iixjb21wb25lbnRzOlUsbG9jYWxzOltdLGltcG9ydHM6W1MuZGVmYXVsdCxULmRlZmF1bHRdfSksVj13LmRlZmF1bHQuYmluZChOLmRlZmF1bHQpLFc9KDAsSS5kZWZpbmVNZXNzYWdlcykoe3Bhc3NlZDp7aWQ6IkluZm9MaW5lLnBhc3NlZCIsZGVmYXVsdE1lc3NhZ2U6IlBhc3NlZCB7dmFsdWV9JSJ9LHRvdGFsOntpZDoiSW5mb0xpbmUudG90YWwiLGRlZmF1bHRNZXNzYWdlOiJUb3RhbCB7dmFsdWV9In19KSxZPWZ1bmN0aW9uKGUpe3JldHVybnt0b3RhbDplLnRvdGFsfHwwLHBhc3NlZDplLnBhc3NlZHx8MCxmYWlsZWQ6ZS5mYWlsZWR8fDAsc2tpcHBlZDplLnNraXBwZWR8fDB9fSxxPXQuSW5mb0xpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKHoodCxlKSxlKX19KCJJbmZvTGluZSIpKCgwLEkuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZi5kZWZhdWx0KSh0aGlzLHQpLCgwLGIuZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAseS5kZWZhdWx0KSh0LGUpLCgwLGguZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wcy5ldmVudHMsbj10aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZSxyPXRoaXMucHJvcHMuZGF0YS5zdGF0aXN0aWNzLmRlZmVjdHMsbz1ZKHRoaXMucHJvcHMuZGF0YS5zdGF0aXN0aWNzLmV4ZWN1dGlvbnMpLHM9by5wYXNzZWQvby50b3RhbCoxMDAsaT1vLmZhaWxlZC9vLnRvdGFsKjEwMCxhPW8uc2tpcHBlZC9vLnRvdGFsKjEwMCx1PXRoaXMucHJvcHMuZGF0YS5lbmRUaW1lLGQ9dGhpcy5wcm9wcy5kYXRhLnN0YXJ0VGltZSxfPSgwLE0uZ2V0RHVyYXRpb24pKGQsdSkscD0oZT17fSwoMCxjLmRlZmF1bHQpKGUsay5QUk9EVUNUX0JVRyx0LlBCX1RPT0xUSVApLCgwLGMuZGVmYXVsdCkoZSxrLlNZU1RFTV9JU1NVRSx0LlNJX1RPT0xUSVApLCgwLGMuZGVmYXVsdCkoZSxrLkFVVE9NQVRJT05fQlVHLHQuQUJfVE9PTFRJUCksZSk7cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiaW5mby1saW5lIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiYmFyLWNoYXJ0LWhvbGRlciIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChILkJhckNoYXJ0LHtwYXNzZWQ6cyxmYWlsZWQ6aSxza2lwcGVkOmF9KSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpWKCJwYXNzZWQiKX0sbihXLnBhc3NlZCx7dmFsdWU6cy50b0ZpeGVkKDIpfSkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigidG90YWwiKX0sbihXLnRvdGFsLHt2YWx1ZTpvLnRvdGFsfSkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiZHVyYXRpb24iKX0sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiSW5mb0xpbmUuZHVyYXRpb24iLGRlZmF1bHRNZXNzYWdlOiJEdXJhdGlvbiJ9KSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlYoImR1cmF0aW9uLXZhbHVlIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuRHVyYXRpb24se2R1cmF0aW9uOl99KSkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigiZGVmZWN0LXR5cGVzIil9LCgwLGwuZGVmYXVsdCkocikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OmUsY2xhc3NOYW1lOlYoImRlZmVjdC10eXBlIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEIuRGVmZWN0VHlwZUJsb2NrLHt0eXBlOmUsZGF0YTpyW2VdLHRvb2x0aXBFdmVudEluZm86cFtlXX0pKX0pKSl9fV0pLHR9KE8uQ29tcG9uZW50KSxzLnByb3BUeXBlcz17ZGF0YTpMLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsaW50bDpJLmludGxTaGFwZS5pc1JlcXVpcmVkLGV2ZW50czpMLmRlZmF1bHQub2JqZWN0fSxzLmRlZmF1bHRQcm9wcz17ZXZlbnRzOnt9fSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkluZm9MaW5lIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2luZm9MaW5lLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2luZm9MaW5lLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2luZm9MaW5lLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIm5vcm1hbGl6ZUV4ZWN1dGlvbnMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaW5mb0xpbmUvaW5mb0xpbmUuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2luZm9MaW5lL2luZm9MaW5lLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaW5mby1saW5lIjoiaW5mb0xpbmVfX2luZm8tbGluZV9fXzNLQW9UIiwiYmFyLWNoYXJ0LWhvbGRlciI6ImluZm9MaW5lX19iYXItY2hhcnQtaG9sZGVyX19fM0Q5aVciLHBhc3NlZDoiaW5mb0xpbmVfX3Bhc3NlZF9fXzFTZC1pIix0b3RhbDoiaW5mb0xpbmVfX3RvdGFsX19fMVpqRzkiLGR1cmF0aW9uOiJpbmZvTGluZV9fZHVyYXRpb25fX18zeHNubiIsImR1cmF0aW9uLXZhbHVlIjoiaW5mb0xpbmVfX2R1cmF0aW9uLXZhbHVlX19fQWNkR0EiLCJkZWZlY3QtdHlwZXMiOiJpbmZvTGluZV9fZGVmZWN0LXR5cGVzX19fMnpyV1IiLCJkZWZlY3QtdHlwZSI6ImluZm9MaW5lX19kZWZlY3QtdHlwZV9fX2EzSTd6In19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2F0dHJpYnV0ZXNCbG9jay9hdHRyaWJ1dGVzQmxvY2suanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BdHRyaWJ1dGVzQmxvY2s9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL3NyYy9jb21tb24vdXRpbHMvYXR0cmlidXRlVXRpbHMuanMiKSx1PW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vYXR0cmlidXRlc0Jsb2NrL2F0dHJpYnV0ZXNCbG9jay5zY3NzIiksYz1yKHUpLGQ9cy5kZWZhdWx0LmJpbmQoYy5kZWZhdWx0KSxfPXQuQXR0cmlidXRlc0Jsb2NrPWZ1bmN0aW9uKHQpe3ZhciBuPXQuYXR0cmlidXRlcyxyPXQub25DbGlja0F0dHJpYnV0ZTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiYXR0cmlidXRlcy1ibG9jayIpfSxuLnNvbWUobC5ub3RTeXN0ZW1BdHRyaWJ1dGVQcmVkaWNhdGUpJiZlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpkKCJhdHRyaWJ1dGVzLWljb24iKX0pLG4uZmlsdGVyKGwubm90U3lzdGVtQXR0cmlidXRlUHJlZGljYXRlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OigwLGwuZm9ybWF0QXR0cmlidXRlKSh0KSxjbGFzc05hbWU6ZCgiYXR0cmlidXRlIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiByKHQpfX0sKDAsbC5mb3JtYXRBdHRyaWJ1dGUpKHQpKX0pKX07Xy5wcm9wVHlwZXM9e2F0dHJpYnV0ZXM6YS5kZWZhdWx0LmFycmF5T2YoYS5kZWZhdWx0LnNoYXBlKHtrZXk6YS5kZWZhdWx0LnN0cmluZyx2YWx1ZTphLmRlZmF1bHQuc3RyaW5nLHN5c3RlbTphLmRlZmF1bHQuYm9vbH0pKS5pc1JlcXVpcmVkLG9uQ2xpY2tBdHRyaWJ1dGU6YS5kZWZhdWx0LmZ1bmN9LF8uZGVmYXVsdFByb3BzPXtvbkNsaWNrQXR0cmlidXRlOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIkF0dHJpYnV0ZXNCbG9jayIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9hdHRyaWJ1dGVzQmxvY2svYXR0cmlidXRlc0Jsb2NrLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGQsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2F0dHJpYnV0ZXNCbG9jay9hdHRyaWJ1dGVzQmxvY2suanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9hdHRyaWJ1dGVzQmxvY2svYXR0cmlidXRlc0Jsb2NrLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiYXR0cmlidXRlcy1ibG9jayI6ImF0dHJpYnV0ZXNCbG9ja19fYXR0cmlidXRlcy1ibG9ja19fXzI3OFRfIiwiYXR0cmlidXRlcy1pY29uIjoiYXR0cmlidXRlc0Jsb2NrX19hdHRyaWJ1dGVzLWljb25fX18yVVVxaSIsYXR0cmlidXRlOiJhdHRyaWJ1dGVzQmxvY2tfX2F0dHJpYnV0ZV9fXzJXWnU0In19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2F0dHJpYnV0ZXNCbG9jay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9hdHRyaWJ1dGVzQmxvY2svYXR0cmlidXRlc0Jsb2NrLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBdHRyaWJ1dGVzQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkF0dHJpYnV0ZXNCbG9ja319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vaXRlbUluZm8uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkl0ZW1JbmZvIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5JdGVtSW5mb319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vaXRlbUluZm8uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lkl0ZW1JbmZvPXZvaWQgMDt2YXIgcyxpLGEsbCx1LGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1vKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1vKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1vKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPW8oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPW8oYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1vKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHc9byhEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksaz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxJPW8oayksUD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLE49byhQKSxIPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLEY9bigiLi9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaExldmVscy5qcyIpLFU9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEc9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSx6PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9pbmRleC5qcyIpLFY9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSxXPW4oIi4vc3JjL2NvbW1vbi91dGlscy9sb2NhbGl6YXRpb25VdGlscy5qcyIpLFk9bigiLi9zcmMvY29tbW9uL2ltZy90ZXN0LXBhcmFtcy1pY29uLWlubGluZS5zdmciKSxxPW8oWSksSz1uKCIuL3NyYy9jb21tb24vaW1nL3BlbmNpbC1pY29uLWlubGluZS5zdmciKSxYPW8oSyksJD1uKCIuL3NyYy9jb21tb24vaW1nL3JldHJ5LWlubGluZS5zdmciKSxRPW8oJCksSj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL25hbWVMaW5rL2luZGV4LmpzIiksWj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2R1cmF0aW9uQmxvY2svaW5kZXguanMiKSxlZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2F0dHJpYnV0ZXNCbG9jay9pbmRleC5qcyIpLHRlPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vb3duZXJCbG9jay9pbmRleC5qcyIpLG5lPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vcmV0cmllc0NvdW50ZXIvaW5kZXguanMiKSxyZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2l0ZW1JbmZvLnNjc3MiKSxvZT1vKHJlKSxzZT17SXRlbUluZm86e2Rpc3BsYXlOYW1lOiJJdGVtSW5mbyJ9fSxpZT0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2l0ZW1JbmZvLmpzeCIsY29tcG9uZW50czpzZSxsb2NhbHM6W2VdLGltcG9ydHM6W08uZGVmYXVsdF19KSxhZT0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2l0ZW1JbmZvLmpzeCIsY29tcG9uZW50czpzZSxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxsZT1JLmRlZmF1bHQuYmluZChvZS5kZWZhdWx0KSx1ZT0oMCxNLmRlZmluZU1lc3NhZ2VzKSh7cmV0cnlUb29sdGlwOntpZDoiSXRlbUluZm8uUmV0cnlUb29sdGlwIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIGhhcyB0ZXN0IGl0ZW1zIHdpdGggcmV0cmllcyJ9fSksY2U9dC5JdGVtSW5mbz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGllKGFlKHQsZSksZSl9fSgiSXRlbUluZm8iKSgocz0oMCxMLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnt1c2VyQWNjb3VudFJvbGU6KDAsVS51c2VyQWNjb3VudFJvbGVTZWxlY3RvcikoZSksdXNlclByb2plY3RSb2xlOigwLFUuYWN0aXZlUHJvamVjdFJvbGVTZWxlY3RvcikoZSksdXNlcklkOigwLFUudXNlcklkU2VsZWN0b3IpKGUpLGlzU3RlcExldmVsOigwLEcubGV2ZWxTZWxlY3RvcikoZSk9PT1CLkxFVkVMX1NURVAsbGF1bmNoOigwLEcubGF1bmNoU2VsZWN0b3IpKGUpfX0pLGk9KDAseC5kZWZhdWx0KSgpLCgwLE0uaW5qZWN0SW50bCkoYT1zKGE9aSgodT1sPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZUVkaXRJdGVtPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVFZGl0SXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVTaG93VGVzdFBhcmFtcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlU2hvd1Rlc3RQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxnLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsRS5kZWZhdWx0KSh0LGUpLCgwLG0uZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVTaG93VGVzdFBhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlU2hvd1Rlc3RQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUVkaXRJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVFZGl0SXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRWRpdEl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUVkaXRJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVFZGl0SXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRWRpdEl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUVkaXRJdGVtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jdXN0b21Qcm9wcyx0PWUub25FZGl0SXRlbSxuPWUuZXZlbnRzO3QmJih0KHRoaXMucHJvcHMudmFsdWUpLHRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChuLkVESVRfSUNPTl9DTElDSykpfX0se2tleToiX19oYW5kbGVTaG93VGVzdFBhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlU2hvd1Rlc3RQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVNob3dUZXN0UGFyYW1zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVTaG93VGVzdFBhcmFtc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlU2hvd1Rlc3RQYXJhbXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmN1c3RvbVByb3BzLm9uU2hvd1Rlc3RQYXJhbXM7ZSYmZSh0aGlzLnByb3BzLnZhbHVlKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLG49ZS52YWx1ZSxvPWUuZWRpdERpc2FibGVkLHM9ZS5yZWZGdW5jdGlvbixpPWUuYW5hbHl6aW5nLGE9ZS51c2VyUHJvamVjdFJvbGUsbD1lLnVzZXJBY2NvdW50Um9sZSx1PWUudXNlcklkLGM9ZS5pc1N0ZXBMZXZlbCxkPWUubGF1bmNoLF89ZS50cmFja2luZyxwPWUub25DbGlja1JldHJpZXMsZj1lLmN1c3RvbVByb3BzO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpzLGNsYXNzTmFtZTpsZSgiaXRlbS1pbmZvIil9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJtYWluLWluZm8iKX0sci5jcmVhdGVFbGVtZW50KEouTmFtZUxpbmsse2l0ZW1JZDpuLmlkLG93bkxpbmtQYXJhbXM6Zi5vd25MaW5rUGFyYW1zLGNsYXNzTmFtZTpsZSgibmFtZS1saW5rIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfLnRyYWNrRXZlbnQoVi5MQVVOQ0hFU19QQUdFX0VWRU5UUy5DTElDS19JVEVNX05BTUUpfX0sci5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmxlKCJuYW1lIil9LG4ubmFtZSksbi5udW1iZXImJnIuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpsZSgibnVtYmVyIil9LCIjIixuLm51bWJlcikpLGkmJnIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJhbmFseXNpcy1iYWRnZSIpfSwiQW5hbHlzaXMiKSxjJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsZSgidGVzdC1wYXJhbXMtaWNvbiIpLG9uQ2xpY2s6dGhpcy5oYW5kbGVTaG93VGVzdFBhcmFtc30sKDAsTi5kZWZhdWx0KShxLmRlZmF1bHQpKSwoMCxGLmNhbkVkaXRMYXVuY2gpKGwsYSxuLm93bmVyP3U9PT1uLm93bmVyOnU9PT1kLm93bmVyKSYmIW8mJnIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJlZGl0LWljb24iKSxvbkNsaWNrOnRoaXMuaGFuZGxlRWRpdEl0ZW19LCgwLE4uZGVmYXVsdCkoWC5kZWZhdWx0KSkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJhZGRpdGlvbmFsLWluZm8iKX0sbi5zdGFydFRpbWUmJnIuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpsZSgiZHVyYXRpb24tYmxvY2siKX0sci5jcmVhdGVFbGVtZW50KFouRHVyYXRpb25CbG9jayx7dHlwZTpuLnR5cGUsc3RhdHVzOm4uc3RhdHVzLGl0ZW1OdW1iZXI6bi5udW1iZXIsdGltaW5nOntzdGFydDpuLnN0YXJ0VGltZSxlbmQ6bi5lbmRUaW1lLGFwcHJveFRpbWU6bi5hcHByb3hpbWF0ZUR1cmF0aW9ufX0pKSxuLnN0YXJ0VGltZSYmci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bGUoIm1vYmlsZS1zdGFydC10aW1lIil9LCgwLEguZnJvbU5vd0Zvcm1hdCkobi5zdGFydFRpbWUpKSxuLmhhc1JldHJpZXMmJnIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJyZXRyeS1pY29uIiksdGl0bGU6dC5mb3JtYXRNZXNzYWdlKHVlLnJldHJ5VG9vbHRpcCl9LCgwLE4uZGVmYXVsdCkoUS5kZWZhdWx0KSksbi5vd25lciYmci5jcmVhdGVFbGVtZW50KHRlLk93bmVyQmxvY2sse293bmVyOm4ub3duZXJ9KSxuLmF0dHJpYnV0ZXMmJiEhbi5hdHRyaWJ1dGVzLmxlbmd0aCYmci5jcmVhdGVFbGVtZW50KGVlLkF0dHJpYnV0ZXNCbG9jayx7YXR0cmlidXRlczpuLmF0dHJpYnV0ZXMsb25DbGlja0F0dHJpYnV0ZTpmLm9uQ2xpY2tBdHRyaWJ1dGV9KSxjJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpsZSgibW9iaWxlLWluZm8iKX0sIkAiLCgwLFcuZm9ybWF0TWV0aG9kVHlwZSkodC5mb3JtYXRNZXNzYWdlLG4udHlwZSksci5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmxlKCJtb2JpbGUtc3RhdHVzIil9LCgwLFcuZm9ybWF0U3RhdHVzKSh0LmZvcm1hdE1lc3NhZ2Usbi5zdGF0dXMpKSksYyYmbi5yZXRyaWVzJiZuLnJldHJpZXMubGVuZ3RoPjAmJnIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJyZXRyaWVzLWNvdW50ZXIiKX0sci5jcmVhdGVFbGVtZW50KG5lLlJldHJpZXNDb3VudGVyLHt0ZXN0SXRlbTpuLG9uTGFiZWxDbGljazpwfSkpLG4uZGVzY3JpcHRpb24mJnIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmxlKCJpdGVtLWRlc2NyaXB0aW9uIil9LHIuY3JlYXRlRWxlbWVudCh6Lk1hcmtkb3duVmlld2VyLHt2YWx1ZTpuLmRlc2NyaXB0aW9ufSkpKSl9fV0pLHR9KEMuQ29tcG9uZW50KSxsLnByb3BUeXBlcz17aW50bDp3LmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWQsdmFsdWU6dy5kZWZhdWx0Lm9iamVjdCxyZWZGdW5jdGlvbjp3LmRlZmF1bHQuZnVuYyxhbmFseXppbmc6dy5kZWZhdWx0LmJvb2wsY3VzdG9tUHJvcHM6dy5kZWZhdWx0Lm9iamVjdCx1c2VyUHJvamVjdFJvbGU6dy5kZWZhdWx0LnN0cmluZyx1c2VyQWNjb3VudFJvbGU6dy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHVzZXJJZDp3LmRlZmF1bHQuc3RyaW5nLGlzU3RlcExldmVsOncuZGVmYXVsdC5ib29sLGxhdW5jaDp3LmRlZmF1bHQub2JqZWN0LGVkaXREaXNhYmxlZDp3LmRlZmF1bHQuYm9vbCx3aWRnZXRWaWV3OncuZGVmYXVsdC5ib29sLHRyYWNraW5nOncuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDp3LmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6dy5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkLG9uQ2xpY2tSZXRyaWVzOncuZGVmYXVsdC5mdW5jfSxsLmRlZmF1bHRQcm9wcz17dmFsdWU6e30sYW5hbHl6aW5nOiExLGN1c3RvbVByb3BzOntvd25MaW5rUGFyYW1zOnt9LG9uRWRpdEl0ZW06ZnVuY3Rpb24oKXt9LG9uU2hvd1Rlc3RQYXJhbXM6ZnVuY3Rpb24oKXt9LG9uQ2xpY2tBdHRyaWJ1dGU6ZnVuY3Rpb24oKXt9fSx1c2VySWQ6IiIsdXNlclByb2plY3RSb2xlOiIiLGlzU3RlcExldmVsOiExLGVkaXREaXNhYmxlZDohMSx3aWRnZXRWaWV3OiExLGxhdW5jaDp7fSxvbkNsaWNrUmV0cmllczpmdW5jdGlvbigpe30scmVmRnVuY3Rpb246bnVsbH0sYT11KSl8fGEpfHxhKXx8YSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihjZSwiSXRlbUluZm8iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vaXRlbUluZm8uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobGUsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2l0ZW1JbmZvLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHVlLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9pdGVtSW5mby5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9pdGVtSW5mby5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Iml0ZW0taW5mbyI6Iml0ZW1JbmZvX19pdGVtLWluZm9fX19RVDA2TSIsImVkaXQtaWNvbiI6Iml0ZW1JbmZvX19lZGl0LWljb25fX18zZDlpWSIsInRlc3QtcGFyYW1zLWljb24iOiJpdGVtSW5mb19fdGVzdC1wYXJhbXMtaWNvbl9fXzFNQ3piIiwibWFpbi1pbmZvIjoiaXRlbUluZm9fX21haW4taW5mb19fXzJIQjlnIiwibmFtZS1saW5rIjoiaXRlbUluZm9fX25hbWUtbGlua19fXzFJdFBjIixuYW1lOiJpdGVtSW5mb19fbmFtZV9fXzI3ZndJIixudW1iZXI6Iml0ZW1JbmZvX19udW1iZXJfX18xdWZDMiIsImFuYWx5c2lzLWJhZGdlIjoiaXRlbUluZm9fX2FuYWx5c2lzLWJhZGdlX19fMmxOUkMiLCJhdXRvLWFuYWx5emUtYmxpbmsiOiJpdGVtSW5mb19fYXV0by1hbmFseXplLWJsaW5rX19fMVNhdXoiLCJtb2JpbGUtc3RhcnQtdGltZSI6Iml0ZW1JbmZvX19tb2JpbGUtc3RhcnQtdGltZV9fXzFocHZyIiwiYWRkaXRpb25hbC1pbmZvIjoiaXRlbUluZm9fX2FkZGl0aW9uYWwtaW5mb19fXzFQWnhFIiwiZHVyYXRpb24tYmxvY2siOiJpdGVtSW5mb19fZHVyYXRpb24tYmxvY2tfX19kTkhEbiIsIml0ZW0tZGVzY3JpcHRpb24iOiJpdGVtSW5mb19faXRlbS1kZXNjcmlwdGlvbl9fXzFZc2NSIiwibW9iaWxlLWluZm8iOiJpdGVtSW5mb19fbW9iaWxlLWluZm9fX18xbEdxeiIsIm1vYmlsZS1zdGF0dXMiOiJpdGVtSW5mb19fbW9iaWxlLXN0YXR1c19fXzFxb0t4IiwicmV0cnktaWNvbiI6Iml0ZW1JbmZvX19yZXRyeS1pY29uX19fNWRRWHYiLHJldHJpZXM6Iml0ZW1JbmZvX19yZXRyaWVzX19fVlVvM24iLCJyZXRyaWVzLWNvdW50ZXIiOiJpdGVtSW5mb19fcmV0cmllcy1jb3VudGVyX19fNnRIN3oifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vb3duZXJCbG9jay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9vd25lckJsb2NrL293bmVyQmxvY2suanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk93bmVyQmxvY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk93bmVyQmxvY2t9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL293bmVyQmxvY2svb3duZXJCbG9jay5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3duZXJCbG9jaz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGE9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksbD1yKGEpLHU9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGM9cih1KSxkPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vb3duZXJCbG9jay9vd25lckJsb2NrLnNjc3MiKSxfPXIoZCkscD1sLmRlZmF1bHQuYmluZChfLmRlZmF1bHQpLGY9KDAsaS5kZWZpbmVNZXNzYWdlcykoe293bmVyVGl0bGU6e2lkOiJPd25lckJsb2NrLm93bmVyVGl0bGUiLGRlZmF1bHRNZXNzYWdlOiJPd25lciJ9fSksbT10Lk93bmVyQmxvY2s9KDAsaS5pbmplY3RJbnRsKShmdW5jdGlvbihlKXt2YXIgdD1lLmludGwsbj1lLm93bmVyLHI9ZS5kaXNhYmxlZDtyZXR1cm4gcy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJvd25lci1ibG9jayIse2Rpc2FibGVkOnJ9KSx0aXRsZTp0LmZvcm1hdE1lc3NhZ2UoZi5vd25lclRpdGxlKX0scy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJvd25lci1pY29uIil9KSxzLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpwKCJvd25lciIpfSxuKSl9KTttLnByb3BUeXBlcz17b3duZXI6Yy5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGRpc2FibGVkOmMuZGVmYXVsdC5ib29sfSxtLmRlZmF1bHRQcm9wcz17ZGlzYWJsZWQ6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJPd25lckJsb2NrIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL293bmVyQmxvY2svb3duZXJCbG9jay5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9vd25lckJsb2NrL293bmVyQmxvY2suanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vb3duZXJCbG9jay9vd25lckJsb2NrLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vb3duZXJCbG9jay9vd25lckJsb2NrLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsib3duZXItYmxvY2siOiJvd25lckJsb2NrX19vd25lci1ibG9ja19fXzNrSGYyIiwib3duZXItaWNvbiI6Im93bmVyQmxvY2tfX293bmVyLWljb25fX19sRE45QiIsb3duZXI6Im93bmVyQmxvY2tfX293bmVyX19fcjRVNXYiLGRpc2FibGVkOiJvd25lckJsb2NrX19kaXNhYmxlZF9fXzJOSUtwIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL3JldHJpZXNDb3VudGVyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL3JldHJpZXNDb3VudGVyL3JldHJpZXNDb3VudGVyLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZXRyaWVzQ291bnRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUmV0cmllc0NvdW50ZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL3JldHJpZXNDb3VudGVyL3JldHJpZXNDb3VudGVyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUmV0cmllc0NvdW50ZXI9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGQ9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9yZXRyaWVzQ291bnRlci9yZXRyaWVzQ291bnRlci5zY3NzIiksXz1yKGQpLHA9dS5kZWZhdWx0LmJpbmQoXy5kZWZhdWx0KSxmPWZ1bmN0aW9uKCl7cmV0dXJuInN0YXR1cy0iKyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpLnRvTG93ZXJDYXNlKCl9LG09ZnVuY3Rpb24oZSl7cmV0dXJuW10uY29uY2F0KCgwLHMuZGVmYXVsdCkoZS5yZXRyaWVzKSxbZV0pfSxoPXQuUmV0cmllc0NvdW50ZXI9ZnVuY3Rpb24odCl7dmFyIG49dC50ZXN0SXRlbSxyPXQub25MYWJlbENsaWNrLG89bShuKTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgicmV0cmllcy1jb3VudGVyIil9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInJldHJpZXMtc3RhdHVzZXMiKX0sby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnQuaWQsY2xhc3NOYW1lOnAoInN0YXR1cy1pbmRpY2F0b3IiLGYodC5zdGF0dXMpKX0pfSkpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInJldHJpZXMtbGFiZWwiKX0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgiZGVza3RvcC1sYWJlbCIpLG9uQ2xpY2s6cn0sZS5jcmVhdGVFbGVtZW50KGMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlJldHJpZXNDb3VudGVyLmxhYmVsIixkZWZhdWx0TWVzc2FnZToie2NvdW50fSByZXRyaWVzIix2YWx1ZXM6e2NvdW50Om8ubGVuZ3RofX0pKSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJtb2JpbGUtbGFiZWwiKX0sZS5jcmVhdGVFbGVtZW50KGMuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IlJldHJpZXNDb3VudGVyLmxhYmVsIixkZWZhdWx0TWVzc2FnZToie2NvdW50fSByZXRyaWVzIix2YWx1ZXM6e2NvdW50Om8ubGVuZ3RofX0pKSkpfTtoLnByb3BUeXBlcz17dGVzdEl0ZW06YS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHJldHJpZXM6YS5kZWZhdWx0LmFycmF5T2YoYS5kZWZhdWx0Lm9iamVjdCksb25MYWJlbENsaWNrOmEuZGVmYXVsdC5mdW5jfSxoLmRlZmF1bHRQcm9wcz17cmV0cmllczpbXSxvbkxhYmVsQ2xpY2s6ZnVuY3Rpb24oKXt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoaCwiUmV0cmllc0NvdW50ZXIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vcmV0cmllc0NvdW50ZXIvcmV0cmllc0NvdW50ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vcmV0cmllc0NvdW50ZXIvcmV0cmllc0NvdW50ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiZm9ybWF0U3RhdHVzQ2xhc3NOYW1lIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL3JldHJpZXNDb3VudGVyL3JldHJpZXNDb3VudGVyLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG0sImdldFJldHJpZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vaXRlbUluZm8vcmV0cmllc0NvdW50ZXIvcmV0cmllc0NvdW50ZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pdGVtSW5mby9yZXRyaWVzQ291bnRlci9yZXRyaWVzQ291bnRlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InJldHJpZXMtY291bnRlciI6InJldHJpZXNDb3VudGVyX19yZXRyaWVzLWNvdW50ZXJfX19rWjFEOSIsInJldHJpZXMtc3RhdHVzZXMiOiJyZXRyaWVzQ291bnRlcl9fcmV0cmllcy1zdGF0dXNlc19fXzN2bEhvIiwic3RhdHVzLWluZGljYXRvciI6InJldHJpZXNDb3VudGVyX19zdGF0dXMtaW5kaWNhdG9yX19fSVNfcXkiLCJzdGF0dXMtcGFzc2VkIjoicmV0cmllc0NvdW50ZXJfX3N0YXR1cy1wYXNzZWRfX19wMU1LMiIsInN0YXR1cy1mYWlsZWQiOiJyZXRyaWVzQ291bnRlcl9fc3RhdHVzLWZhaWxlZF9fXzFGcHZ3Iiwic3RhdHVzLXNraXBwZWQiOiJyZXRyaWVzQ291bnRlcl9fc3RhdHVzLXNraXBwZWRfX18xaTk4YSIsInJldHJpZXMtbGFiZWwiOiJyZXRyaWVzQ291bnRlcl9fcmV0cmllcy1sYWJlbF9fXzNyTjdlIiwiZGVza3RvcC1sYWJlbCI6InJldHJpZXNDb3VudGVyX19kZXNrdG9wLWxhYmVsX19fMVBZVEQiLCJtb2JpbGUtbGFiZWwiOiJyZXRyaWVzQ291bnRlcl9fbW9iaWxlLWxhYmVsX19fMzZJaUwifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc0NvbnRhaW5lci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzQ29udGFpbmVyL2xhdW5jaEZpbHRlcnNDb250YWluZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkxhdW5jaEZpbHRlcnNDb250YWluZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaEZpbHRlcnNDb250YWluZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNDb250YWluZXIvbGF1bmNoRmlsdGVyc0NvbnRhaW5lci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxhdW5jaEZpbHRlcnNDb250YWluZXI9dm9pZCAwO3ZhciBvLHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxnPXIoaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLHY9cih5KSxUPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLFI9cihTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikseD1yKGopLEw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxEPXIoTCksdz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksTT1yKHcpLGs9bigiLi9ub2RlX21vZHVsZXMvZmFzdC1kZWVwLWVxdWFsL2luZGV4LmpzIiksST1yKGspLFA9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2xhdW5jaC9pbmRleC5qcyIpLEI9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksVT1uKCIuL3NyYy9jb250cm9sbGVycy9wcm9qZWN0L2luZGV4LmpzIiksRz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaXNFbXB0eVZhbHVlLmpzIiksej17TGF1bmNoRmlsdGVyc0NvbnRhaW5lcjp7ZGlzcGxheU5hbWU6IkxhdW5jaEZpbHRlcnNDb250YWluZXIifX0sVj0oMCxELmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNDb250YWluZXIvbGF1bmNoRmlsdGVyc0NvbnRhaW5lci5qc3giLGNvbXBvbmVudHM6eixsb2NhbHM6W2VdLGltcG9ydHM6W3guZGVmYXVsdF19KSxXPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc0NvbnRhaW5lci9sYXVuY2hGaWx0ZXJzQ29udGFpbmVyLmpzeCIsY29tcG9uZW50czp6LGxvY2FsczpbXSxpbXBvcnRzOlt4LmRlZmF1bHQsTy5kZWZhdWx0XX0pLFk9dC5MYXVuY2hGaWx0ZXJzQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVihXKHQsZSksZSl9fSgiTGF1bmNoRmlsdGVyc0NvbnRhaW5lciIpKChvPSgwLFAuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2xhdW5jaEZpbHRlcnM6KDAsTi5sYXVuY2hGaWx0ZXJzU2VsZWN0b3IpKGUpLGFjdGl2ZUZpbHRlcklkOigwLEguZmlsdGVySWRTZWxlY3RvcikoZSksYWN0aXZlRmlsdGVyOigwLE4uYWN0aXZlRmlsdGVyU2VsZWN0b3IpKGUpfX0se2NoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbjpOLmNoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbixmZXRjaExhdW5jaGVzV2l0aFBhcmFtc0FjdGlvbjpGLmZldGNoTGF1bmNoZXNXaXRoUGFyYW1zQWN0aW9uLHVwZGF0ZUZpbHRlckNvbmRpdGlvbnNBY3Rpb246Ti51cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9uLGZldGNoTGF1bmNoZXNBY3Rpb246Ri5mZXRjaExhdW5jaGVzQWN0aW9uLGhpZGVGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uOlUuaGlkZUZpbHRlck9uTGF1bmNoZXNBY3Rpb24scmVtb3ZlTGF1bmNoZXNGaWx0ZXJBY3Rpb246Ti5yZW1vdmVMYXVuY2hlc0ZpbHRlckFjdGlvbixjcmVhdGVGaWx0ZXI6Ti5jcmVhdGVGaWx0ZXJBY3Rpb259KSkoKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCx2LmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLG0uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5nZXRDb25kaXRpb25zPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmZldGNoTGF1bmNoZXM9KDAsQi5kZWJvdW5jZSkoZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvcHMuZmV0Y2hMYXVuY2hlc1dpdGhQYXJhbXNBY3Rpb24oZSl9LDFlMyksci5jcmVhdGVGaWx0ZXJRdWVyeT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY3JlYXRlRmlsdGVyUXVlcnlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRmlsdGVyQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVGaWx0ZXJDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRmlsdGVyUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVGaWx0ZXJSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRmlsdGVyU2VsZWN0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVGaWx0ZXJTZWxlY3RfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIudXBkYXRlRmlsdGVyPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX191cGRhdGVGaWx0ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCx2LmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsQS5kZWZhdWx0KSh0LGUpLCgwLEUuZGVmYXVsdCkodCxbe2tleToiX191cGRhdGVGaWx0ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyU2VsZWN0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJTZWxlY3RfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlclJlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRmlsdGVyUmVtb3ZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlRmlsdGVyUXVlcnlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUZpbHRlclF1ZXJ5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDb25kaXRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5hY3RpdmVGaWx0ZXI7cmV0dXJuIGU/ZS5jb25kaXRpb25zLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybigwLHAuZGVmYXVsdCkoe30sZSwoMCxkLmRlZmF1bHQpKHt9LHQuZmlsdGVyaW5nRmllbGQsdCkpfSx7fSk6e319fSx7a2V5OiJfX2NyZWF0ZUZpbHRlclF1ZXJ5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jcmVhdGVGaWx0ZXJRdWVyeV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY3JlYXRlRmlsdGVyUXVlcnlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUZpbHRlclF1ZXJ5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVGaWx0ZXJRdWVyeV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCx1LmRlZmF1bHQpKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKDAsRy5pc0VtcHR5VmFsdWUpKGVbdF0udmFsdWUpfSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVtuXTtyZXR1cm4oMCxwLmRlZmF1bHQpKHt9LHQsKDAsZC5kZWZhdWx0KSh7fSwiZmlsdGVyLiIrci5jb25kaXRpb24rIi4iK24sci52YWx1ZSkpfSx7fSl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRmlsdGVyQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDaGFuZ2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNoYW5nZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQ2hhbmdlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRmlsdGVyUXVlcnkoZSksbj10aGlzLmNyZWF0ZUZpbHRlclF1ZXJ5KHRoaXMuZ2V0Q29uZGl0aW9ucygpKTsoMCxJLmRlZmF1bHQpKG4sdCl8fHRoaXMuZmV0Y2hMYXVuY2hlcyh0KSx0aGlzLnByb3BzLmFjdGl2ZUZpbHRlcj90aGlzLnVwZGF0ZUZpbHRlcih0aGlzLnByb3BzLmFjdGl2ZUZpbHRlcklkLCgwLE4uYWRkRmlsdGVyaW5nRmllbGRUb0NvbmRpdGlvbnMpKGUpKTp0aGlzLnByb3BzLmNyZWF0ZUZpbHRlcih7Y29uZGl0aW9uczooMCxOLmFkZEZpbHRlcmluZ0ZpZWxkVG9Db25kaXRpb25zKShlKX0pfX0se2tleToiX19oYW5kbGVGaWx0ZXJSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlclJlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyUmVtb3ZlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJSZW1vdmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlclJlbW92ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtlLmlkPj0wJiZ0aGlzLnByb3BzLmhpZGVGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uKGUpLHRoaXMucHJvcHMucmVtb3ZlTGF1bmNoZXNGaWx0ZXJBY3Rpb24oZS5pZCl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlclNlbGVjdF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRmlsdGVyU2VsZWN0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJTZWxlY3RfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlclNlbGVjdF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyU2VsZWN0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuY2hhbmdlQWN0aXZlRmlsdGVyQWN0aW9uKGUpfX0se2tleToiX191cGRhdGVGaWx0ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlRmlsdGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVGaWx0ZXJfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb3BzLnVwZGF0ZUZpbHRlckNvbmRpdGlvbnNBY3Rpb24oZSx0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3JldHVybigwLGUucmVuZGVyKSh7bGF1bmNoRmlsdGVyczplLmxhdW5jaEZpbHRlcnMsYWN0aXZlRmlsdGVySWQ6ZS5hY3RpdmVGaWx0ZXJJZCxhY3RpdmVGaWx0ZXI6ZS5hY3RpdmVGaWx0ZXIsb25TZWxlY3RGaWx0ZXI6dGhpcy5oYW5kbGVGaWx0ZXJTZWxlY3Qsb25SZW1vdmVGaWx0ZXI6dGhpcy5oYW5kbGVGaWx0ZXJSZW1vdmUsb25DaGFuZ2VGaWx0ZXI6dGhpcy5oYW5kbGVGaWx0ZXJDaGFuZ2UsYWN0aXZlRmlsdGVyQ29uZGl0aW9uczp0aGlzLmdldENvbmRpdGlvbnMoKSxvblJlc2V0RmlsdGVyOnRoaXMucHJvcHMuZmV0Y2hMYXVuY2hlc0FjdGlvbn0pfX1dKSx0fShqLkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2xhdW5jaEZpbHRlcnM6TS5kZWZhdWx0LmFycmF5LGFjdGl2ZUZpbHRlcklkOk0uZGVmYXVsdC5vbmVPZlR5cGUoW00uZGVmYXVsdC5zdHJpbmcsTS5kZWZhdWx0Lm51bWJlcl0pLGFjdGl2ZUZpbHRlcjpNLmRlZmF1bHQub2JqZWN0LHJlbmRlcjpNLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGNoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbjpNLmRlZmF1bHQuZnVuYyxmZXRjaExhdW5jaGVzV2l0aFBhcmFtc0FjdGlvbjpNLmRlZmF1bHQuZnVuYyx1cGRhdGVGaWx0ZXJDb25kaXRpb25zQWN0aW9uOk0uZGVmYXVsdC5mdW5jLGZldGNoTGF1bmNoZXNBY3Rpb246TS5kZWZhdWx0LmZ1bmMsaGlkZUZpbHRlck9uTGF1bmNoZXNBY3Rpb246TS5kZWZhdWx0LmZ1bmMscmVtb3ZlTGF1bmNoZXNGaWx0ZXJBY3Rpb246TS5kZWZhdWx0LmZ1bmMsY3JlYXRlRmlsdGVyOk0uZGVmYXVsdC5mdW5jfSxpLmRlZmF1bHRQcm9wcz17bGF1bmNoRmlsdGVyczpbXSxhY3RpdmVGaWx0ZXI6bnVsbCxhY3RpdmVGaWx0ZXJJZDpudWxsLGNoYW5nZUFjdGl2ZUZpbHRlckFjdGlvbjpmdW5jdGlvbigpe30sZmV0Y2hMYXVuY2hlc1dpdGhQYXJhbXNBY3Rpb246ZnVuY3Rpb24oKXt9LHVwZGF0ZUZpbHRlckNvbmRpdGlvbnNBY3Rpb246ZnVuY3Rpb24oKXt9LGZldGNoTGF1bmNoZXNBY3Rpb246ZnVuY3Rpb24oKXt9LGhpZGVGaWx0ZXJPbkxhdW5jaGVzQWN0aW9uOmZ1bmN0aW9uKCl7fSxyZW1vdmVMYXVuY2hlc0ZpbHRlckFjdGlvbjpmdW5jdGlvbigpe30sY3JlYXRlRmlsdGVyOmZ1bmN0aW9uKCl7fX0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIkxhdW5jaEZpbHRlcnNDb250YWluZXIiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc0NvbnRhaW5lci9sYXVuY2hGaWx0ZXJzQ29udGFpbmVyLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNTZWN0aW9uL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNTZWN0aW9uL2xhdW5jaEZpbHRlcnNTZWN0aW9uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMYXVuY2hGaWx0ZXJzU2VjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuTGF1bmNoRmlsdGVyc1NlY3Rpb259fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNTZWN0aW9uL2xhdW5jaEZpbHRlcnNTZWN0aW9uLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoRmlsdGVyc1NlY3Rpb249dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiksYT1yKGkpLGw9bigiLi9zcmMvY29tcG9uZW50cy9maWx0ZXJFbnRpdGllcy9jb250YWluZXJzL2luZGV4LmpzIiksdT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNDb250YWluZXIvaW5kZXguanMiKSxjPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoTGV2ZWxzLmpzIiksXz1mdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQodS5MYXVuY2hGaWx0ZXJzQ29udGFpbmVyLHtyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIG49dC5sYXVuY2hGaWx0ZXJzLHI9dC5hY3RpdmVGaWx0ZXJJZCxvPXQuYWN0aXZlRmlsdGVyLGk9dC5hY3RpdmVGaWx0ZXJFbnRpdGllcyx1PXQub25TZWxlY3RGaWx0ZXIsXz10Lm9uUmVtb3ZlRmlsdGVyLHA9dC5vbkNoYW5nZUZpbHRlcixmPXQub25SZXNldEZpbHRlcjtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KGwuRmlsdGVyRW50aXRpZXNDb250YWluZXIse2xldmVsOmQuTEVWRUxfTEFVTkNILGZpbHRlcklkOnIsZW50aXRpZXM6aSxvbkNoYW5nZTpwLHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgaT10Lm9uRmlsdGVyQWRkLGw9KDAsYS5kZWZhdWx0KSh0LFsib25GaWx0ZXJBZGQiXSk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChjLkxhdW5jaEZpbHRlcnNUb29sYmFyLCgwLHMuZGVmYXVsdCkoe2ZpbHRlcnM6bixhY3RpdmVGaWx0ZXJJZDpyLGFjdGl2ZUZpbHRlcjpvLG9uU2VsZWN0RmlsdGVyOnUsb25SZW1vdmVGaWx0ZXI6XyxvbkZpbHRlckFkZDppLG9uUmVzZXRGaWx0ZXI6Zn0sbCkpfX0pfX0pfTt0LkxhdW5jaEZpbHRlcnNTZWN0aW9uPV87IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiTGF1bmNoRmlsdGVyc1NlY3Rpb24iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1NlY3Rpb24vbGF1bmNoRmlsdGVyc1NlY3Rpb24uanN4Iil9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2FsbExhdGVzdERyb3Bkb3duL2FsbExhdGVzdERyb3Bkb3duLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BbGxMYXRlc3REcm9wZG93bj12b2lkIDA7dmFyIHMsaSxhLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksdT1vKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZD1vKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikscD1vKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxtPW8oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxnPW8oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksRT1vKGIpLHk9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSx2PW8oeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEE9byhUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksTz1vKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLFI9byhTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHg9byhqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksRD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHc9byhEKSxNPW4oIi4vc3JjL2NvbW1vbi9pbWcvYXJyb3ctZG93bi1pbmxpbmUuc3ZnIiksaz1vKE0pLEk9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9yZXNlcnZlZEZpbHRlcklkcy5qcyIpLFA9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5zY3NzIiksTj1vKFApLEg9e0FsbExhdGVzdERyb3Bkb3duOntkaXNwbGF5TmFtZToiQWxsTGF0ZXN0RHJvcGRvd24ifX0sRj0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2FsbExhdGVzdERyb3Bkb3duL2FsbExhdGVzdERyb3Bkb3duLmpzeCIsY29tcG9uZW50czpILGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEI9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5qc3giLGNvbXBvbmVudHM6SCxsb2NhbHM6W10saW1wb3J0czpbQS5kZWZhdWx0LEUuZGVmYXVsdF19KSxVPXguZGVmYXVsdC5iaW5kKE4uZGVmYXVsdCksRz0oMCxMLmRlZmluZU1lc3NhZ2VzKSh7YWxsOntpZDoiQWxsTGF0ZXN0RHJvcGRvd24uYWxsTGF1bmNoZXMiLGRlZmF1bHRNZXNzYWdlOiJBbGwgbGF1bmNoZXMifSxsYXRlc3Q6e2lkOiJBbGxMYXRlc3REcm9wZG93bi5sYXRlc3RMYXVuY2hlcyIsZGVmYXVsdE1lc3NhZ2U6IkxhdGVzdCBsYXVuY2hlcyJ9LGFsbFNob3J0OntpZDoiQWxsTGF0ZXN0RHJvcGRvd24uYWxsTGF1bmNoZXNTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IkFsbCJ9LGxhdGVzdFNob3J0OntpZDoiQWxsTGF0ZXN0RHJvcGRvd24ubGF0ZXN0TGF1bmNoZXNTaG9ydCIsZGVmYXVsdE1lc3NhZ2U6IkxhdGVzdCJ9fSksej10LkFsbExhdGVzdERyb3Bkb3duPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRihCKHQsZSksZSl9fSgiQWxsTGF0ZXN0RHJvcGRvd24iKSgoMCxMLmluamVjdEludGwpKChhPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCxkLmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAsbS5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsdS5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5zdGF0ZT17ZXhwYW5kZWQ6ITF9LG4uZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBuLl9fZ2V0T3B0aW9uc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5oYW5kbGVDbGlja091dHNpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5oYW5kbGVPcHRpb25DbGljaz1mdW5jdGlvbigpe3JldHVybiBuLl9faGFuZGxlT3B0aW9uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4uaGFuZGxlQ3VycmVudE9wdGlvbkNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19oYW5kbGVDdXJyZW50T3B0aW9uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4udG9nZ2xlRXhwYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4uaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX2lzQWN0aXZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLm5vZGVSZWY9KDAsVC5jcmVhdGVSZWYpKCksbn1yZXR1cm4oMCxnLmRlZmF1bHQpKHQsZSksKDAscC5kZWZhdWx0KSh0LFt7a2V5OiJfX2lzQWN0aXZlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0FjdGl2ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUN1cnJlbnRPcHRpb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ3VycmVudE9wdGlvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPcHRpb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT3B0aW9uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRPcHRpb25zX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6ImNvbXBvbmVudFdpbGxVbm1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9fSx7a2V5OiJfX2dldE9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldE9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldE9wdGlvbnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZTtyZXR1cm5be2xhYmVsOmUoRy5hbGwpLHNob3J0TGFiZWw6ZShHLmFsbFNob3J0KSx2YWx1ZTpJLkFMTH0se2xhYmVsOmUoRy5sYXRlc3QpLHNob3J0TGFiZWw6ZShHLmxhdGVzdFNob3J0KSx2YWx1ZTpJLkxBVEVTVH1dfX0se2tleToiX19oYW5kbGVDbGlja091dHNpZGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUNsaWNrT3V0c2lkZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlQ2xpY2tPdXRzaWRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubm9kZVJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KXx8dGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6ITF9KX19LHtrZXk6Il9faGFuZGxlT3B0aW9uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZU9wdGlvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPcHRpb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uQ2hhbmdlKGUpLHRoaXMuc2V0U3RhdGUoe2V4cGFuZGVkOiExfSl9fSx7a2V5OiJfX2hhbmRsZUN1cnJlbnRPcHRpb25DbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQ3VycmVudE9wdGlvbkNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVDdXJyZW50T3B0aW9uQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy52YWx1ZSl9fSx7a2V5OiJfX3RvZ2dsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7ZXhwYW5kZWQ6IXRoaXMuc3RhdGUuZXhwYW5kZWR9KX19LHtrZXk6Il9faXNBY3RpdmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lzQWN0aXZlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0FjdGl2ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmFjdGl2ZUZpbHRlcklkPT09SS5BTEx8fHRoaXMucHJvcHMuYWN0aXZlRmlsdGVySWQ9PT1JLkxBVEVTVH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy52YWx1ZSxuPXRoaXMuZ2V0T3B0aW9ucygpLG89bi5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dH0pLHM9byYmby5sYWJlbCxpPW8mJm8uc2hvcnRMYWJlbDtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6dGhpcy5ub2RlUmVmLGNsYXNzTmFtZTpVKCJhbGwtbGF0ZXN0LWRyb3Bkb3duIix7YWN0aXZlOnRoaXMuaXNBY3RpdmUoKX0pfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJzZWxlY3RlZC12YWx1ZSIpfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJ2YWx1ZSIse2FjdGl2ZTp0aGlzLmlzQWN0aXZlKCl9KSxvbkNsaWNrOnRoaXMuaGFuZGxlQ3VycmVudE9wdGlvbkNsaWNrfSxzKSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJ2YWx1ZS1zaG9ydCIpLG9uQ2xpY2s6dGhpcy50b2dnbGVFeHBhbmR9LGkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImFycm93Iiksb25DbGljazp0aGlzLnRvZ2dsZUV4cGFuZH0sci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgic2VwYXJhdG9yIil9KSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJpY29uIix7YWN0aXZlOnRoaXMuaXNBY3RpdmUoKX0pfSwoMCx3LmRlZmF1bHQpKGsuZGVmYXVsdCkpKSksdGhpcy5zdGF0ZS5leHBhbmRlZCYmci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgib3B0aW9uLWxpc3QiKX0sbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7a2V5OnQudmFsdWUsY2xhc3NOYW1lOlUoIm9wdGlvbiIse3NlbGVjdGVkOnQudmFsdWU9PT1vLnZhbHVlfSksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlLmhhbmRsZU9wdGlvbkNsaWNrKHQudmFsdWUpfX0sdC5sYWJlbCl9KSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx2YWx1ZTpSLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlOlIuZGVmYXVsdC5mdW5jLG9uQ2xpY2s6Ui5kZWZhdWx0LmZ1bmMsYWN0aXZlRmlsdGVySWQ6Ui5kZWZhdWx0Lm9uZU9mVHlwZShbUi5kZWZhdWx0LnN0cmluZyxSLmRlZmF1bHQubnVtYmVyXSl9LGkuZGVmYXVsdFByb3BzPXt2YWx1ZTpJLkFMTCxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25DbGljazpmdW5jdGlvbigpe30sYWN0aXZlRmlsdGVySWQ6bnVsbH0scz1hKSl8fHMpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih6LCJBbGxMYXRlc3REcm9wZG93biIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihHLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9hbGxMYXRlc3REcm9wZG93bi9hbGxMYXRlc3REcm9wZG93bi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImFsbC1sYXRlc3QtZHJvcGRvd24iOiJhbGxMYXRlc3REcm9wZG93bl9fYWxsLWxhdGVzdC1kcm9wZG93bl9fXzN0RVB4IixhY3RpdmU6ImFsbExhdGVzdERyb3Bkb3duX19hY3RpdmVfX182R1pjQSIsInNlbGVjdGVkLXZhbHVlIjoiYWxsTGF0ZXN0RHJvcGRvd25fX3NlbGVjdGVkLXZhbHVlX19fV045WkciLHZhbHVlOiJhbGxMYXRlc3REcm9wZG93bl9fdmFsdWVfX19NclVDeiIsInZhbHVlLXNob3J0IjoiYWxsTGF0ZXN0RHJvcGRvd25fX3ZhbHVlLXNob3J0X19fTDBvbWUiLHNlcGFyYXRvcjoiYWxsTGF0ZXN0RHJvcGRvd25fX3NlcGFyYXRvcl9fX21lOWNXIixhcnJvdzoiYWxsTGF0ZXN0RHJvcGRvd25fX2Fycm93X19fMTFkME0iLGljb246ImFsbExhdGVzdERyb3Bkb3duX19pY29uX19fMUJiTnkiLCJvcHRpb24tbGlzdCI6ImFsbExhdGVzdERyb3Bkb3duX19vcHRpb24tbGlzdF9fXzFGN0Q0IixvcHRpb246ImFsbExhdGVzdERyb3Bkb3duX19vcHRpb25fX18xRTg0aiIsc2VsZWN0ZWQ6ImFsbExhdGVzdERyb3Bkb3duX19zZWxlY3RlZF9fXzE2Y1BpIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2FsbExhdGVzdERyb3Bkb3duL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2FsbExhdGVzdERyb3Bkb3duL2FsbExhdGVzdERyb3Bkb3duLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbGxMYXRlc3REcm9wZG93biIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQWxsTGF0ZXN0RHJvcGRvd259fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2V4cGFuZFRvZ2dsZXIvZXhwYW5kVG9nZ2xlci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkV4cGFuZFRvZ2dsZXI9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksZD1uKCIuL3NyYy9jb21tb24vaW1nL2Fycm93LWRvd24taW5saW5lLnN2ZyIpLF89cihkKSxwPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZXhwYW5kVG9nZ2xlci9leHBhbmRUb2dnbGVyLnNjc3MiKSxmPXIocCksbT1hLmRlZmF1bHQuYmluZChmLmRlZmF1bHQpLGg9dC5FeHBhbmRUb2dnbGVyPWZ1bmN0aW9uKHQpe3ZhciBuPXQuZXhwYW5kZWQscj10Lm9uVG9nZ2xlRXhwYW5kO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJleHBhbmQtdG9nZ2xlciIpLG9uQ2xpY2s6cn0sbj9lLmNyZWF0ZUVsZW1lbnQoYy5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRXhwYW5kVG9nZ2xlci5oaWRlQ3JpdGVyaWEiLGRlZmF1bHRNZXNzYWdlOiJIaWRlIGNyaXRlcmlhIn0pOmUuY3JlYXRlRWxlbWVudChjLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJFeHBhbmRUb2dnbGVyLnNob3dDcml0ZXJpYSIsZGVmYXVsdE1lc3NhZ2U6IlNob3cgY3JpdGVyaWEifSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bSgiaWNvbiIse2V4cGFuZGVkOm59KX0sKDAsdS5kZWZhdWx0KShfLmRlZmF1bHQpKSl9O2gucHJvcFR5cGVzPXtleHBhbmRlZDpzLmRlZmF1bHQuYm9vbC5pc1JlcXVpcmVkLG9uVG9nZ2xlRXhwYW5kOnMuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJFeHBhbmRUb2dnbGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2V4cGFuZFRvZ2dsZXIvZXhwYW5kVG9nZ2xlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9leHBhbmRUb2dnbGVyL2V4cGFuZFRvZ2dsZXIuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9leHBhbmRUb2dnbGVyL2V4cGFuZFRvZ2dsZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJleHBhbmQtdG9nZ2xlciI6ImV4cGFuZFRvZ2dsZXJfX2V4cGFuZC10b2dnbGVyX19fMldKaWgiLGljb246ImV4cGFuZFRvZ2dsZXJfX2ljb25fX18xU0NFYSIsZXhwYW5kZWQ6ImV4cGFuZFRvZ2dsZXJfX2V4cGFuZGVkX19fMTFwcUMifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZXhwYW5kVG9nZ2xlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9leHBhbmRUb2dnbGVyL2V4cGFuZFRvZ2dsZXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkV4cGFuZFRvZ2dsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkV4cGFuZFRvZ2dsZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsdGVySXRlbT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvY29tbW9uL2ltZy9jcm9zcy1pY29uLWlubGluZS5zdmciKSxkPXIoYyksXz1uKCIuL3NyYy9jb21tb24vaW1nL3NoYXJlLWljb24taW5saW5lLnN2ZyIpLHA9cihfKSxmPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJJdGVtL2ZpbHRlclRvb2x0aXBJY29uL2luZGV4LmpzIiksbT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJJdGVtLnNjc3MiKSxoPXIobSksZz1hLmRlZmF1bHQuYmluZChoLmRlZmF1bHQpLGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZSh0KX19LEU9dC5GaWx0ZXJJdGVtPWZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZSxyPXQuYWN0aXZlLG89dC5zaGFyZSxzPXQuZGVzY3JpcHRpb24saT10LnVuc2F2ZWQsYT10Lm9uQ2xpY2ssbD10Lm9uUmVtb3ZlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpnKCJmaWx0ZXItaXRlbSIse2FjdGl2ZTpyfSksb25DbGljazphfSxvJiZlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpnKCJpY29uIil9LCgwLHUuZGVmYXVsdCkocC5kZWZhdWx0KSksZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmcoIm5hbWUiKX0sbixpJiZlLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ZygidW5zYXZlZCIpfSwiKiIpKSxzJiZlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpnKCJpY29uIil9LGUuY3JlYXRlRWxlbWVudChmLkZpbHRlclRvb2x0aXBJY29uLHt0b29sdGlwQ29udGVudDpzfSkpLHImJmUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmcoImljb24iKSxvbkNsaWNrOmIobCl9LCgwLHUuZGVmYXVsdCkoZC5kZWZhdWx0KSkpfTtFLnByb3BUeXBlcz17bmFtZTpzLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsYWN0aXZlOnMuZGVmYXVsdC5ib29sLGRlc2NyaXB0aW9uOnMuZGVmYXVsdC5zdHJpbmcsc2hhcmU6cy5kZWZhdWx0LmJvb2wsdW5zYXZlZDpzLmRlZmF1bHQuYm9vbCxvbkNsaWNrOnMuZGVmYXVsdC5mdW5jLG9uUmVtb3ZlOnMuZGVmYXVsdC5mdW5jfSxFLmRlZmF1bHRQcm9wcz17YWN0aXZlOiExLGRlc2NyaXB0aW9uOm51bGwsc2hhcmU6ITEsdW5zYXZlZDohMSxvbkNsaWNrOmZ1bmN0aW9uKCl7fSxvblJlbW92ZTpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihFLCJGaWx0ZXJJdGVtIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGIsInN0b3BQcm9wYWdhdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckl0ZW0vZmlsdGVySXRlbS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZmlsdGVyLWl0ZW0iOiJmaWx0ZXJJdGVtX19maWx0ZXItaXRlbV9fX2tPMmZOIixhY3RpdmU6ImZpbHRlckl0ZW1fX2FjdGl2ZV9fXzJfalhiIixpY29uOiJmaWx0ZXJJdGVtX19pY29uX19fMnMyTDYiLG5hbWU6ImZpbHRlckl0ZW1fX25hbWVfX18zZXYwRyIsdW5zYXZlZDoiZmlsdGVySXRlbV9fdW5zYXZlZF9fXzJVdjEzIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJUb29sdGlwSWNvbi9maWx0ZXJUb29sdGlwSWNvbi5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlclRvb2x0aXBJY29uPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy9jb25zdGFudHMuanMiKSx1PW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvdGV4dFRvb2x0aXAvaW5kZXguanMiKSxkPW4oIi4vc3JjL2NvbW1vbi9pbWcvdG9vbHRpcC1pY29uLWlubGluZS5zdmciKSxfPXIoZCkscD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJUb29sdGlwSWNvbi9maWx0ZXJUb29sdGlwSWNvbi5zY3NzIiksZj1yKHApLG09cy5kZWZhdWx0LmJpbmQoZi5kZWZhdWx0KSxoPXQuRmlsdGVyVG9vbHRpcEljb249KDAsdS53aXRoVG9vbHRpcCkoe1Rvb2x0aXBDb21wb25lbnQ6Yy5UZXh0VG9vbHRpcCxkYXRhOnthbGlnbjpsLkFMSUdOX0xFRlQsbGVmdE9mZnNldDotNTAsbm9BcnJvdzohMCxkeW5hbWljV2lkdGg6ITB9fSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6bSgiZmlsdGVyLXRvb2x0aXAtaWNvbiIpfSwoMCxhLmRlZmF1bHQpKF8uZGVmYXVsdCkpfSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGgsIkZpbHRlclRvb2x0aXBJY29uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9maWx0ZXJUb29sdGlwSWNvbi9maWx0ZXJUb29sdGlwSWNvbi5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihtLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckl0ZW0vZmlsdGVyVG9vbHRpcEljb24vZmlsdGVyVG9vbHRpcEljb24uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckl0ZW0vZmlsdGVyVG9vbHRpcEljb24vZmlsdGVyVG9vbHRpcEljb24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJmaWx0ZXItdG9vbHRpcC1pY29uIjoiZmlsdGVyVG9vbHRpcEljb25fX2ZpbHRlci10b29sdGlwLWljb25fX18zeDJVRiJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckl0ZW0vZmlsdGVyVG9vbHRpcEljb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJJdGVtL2ZpbHRlclRvb2x0aXBJY29uL2ZpbHRlclRvb2x0aXBJY29uLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJGaWx0ZXJUb29sdGlwSWNvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRmlsdGVyVG9vbHRpcEljb259fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVySXRlbS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckl0ZW0vZmlsdGVySXRlbS5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRmlsdGVySXRlbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRmlsdGVySXRlbX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJMaXN0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsdGVyTGlzdD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJJdGVtL2luZGV4LmpzIiksdT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL3Byb3BUeXBlcy5qcyIpLGM9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2ZpbHRlckxpc3Quc2NzcyIpLGQ9cihjKSxfPWEuZGVmYXVsdC5iaW5kKGQuZGVmYXVsdCkscD10LkZpbHRlckxpc3Q9ZnVuY3Rpb24odCl7dmFyIG49dC5maWx0ZXJzLHI9dC5hY3RpdmVGaWx0ZXJJZCxvPXQudW5zYXZlZEZpbHRlcklkcyxzPXQub25TZWxlY3RGaWx0ZXIsaT10Lm9uUmVtb3ZlRmlsdGVyO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJmaWx0ZXItbGlzdCIpfSxuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6dC5pZCxjbGFzc05hbWU6XygiaXRlbSIpfSxlLmNyZWF0ZUVsZW1lbnQobC5GaWx0ZXJJdGVtLHtuYW1lOnQubmFtZSxkZXNjcmlwdGlvbjp0LmRlc2NyaXB0aW9uLGFjdGl2ZTp0LmlkPT09cixzaGFyZTp0LnNoYXJlLHVuc2F2ZWQ6by5pbmRleE9mKHQuaWQpPi0xLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcyh0LmlkKX0sb25SZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaSh0KX19KSl9KSl9O3AucHJvcFR5cGVzPXtmaWx0ZXJzOnMuZGVmYXVsdC5hcnJheU9mKHUuZmlsdGVyU2hhcGUpLGFjdGl2ZUZpbHRlcklkOnMuZGVmYXVsdC5vbmVPZlR5cGUoW3MuZGVmYXVsdC5zdHJpbmcscy5kZWZhdWx0Lm51bWJlcl0pLHVuc2F2ZWRGaWx0ZXJJZHM6cy5kZWZhdWx0LmFycmF5T2Yocy5kZWZhdWx0Lm9uZU9mVHlwZShbcy5kZWZhdWx0LnN0cmluZyxzLmRlZmF1bHQubnVtYmVyXSkpLG9uU2VsZWN0RmlsdGVyOnMuZGVmYXVsdC5mdW5jLG9uUmVtb3ZlRmlsdGVyOnMuZGVmYXVsdC5mdW5jfSxwLmRlZmF1bHRQcm9wcz17ZmlsdGVyczpbXSx1bnNhdmVkRmlsdGVySWRzOltdLGFjdGl2ZUZpbHRlcklkOm51bGwsb25TZWxlY3RGaWx0ZXI6ZnVuY3Rpb24oKXt9LG9uUmVtb3ZlRmlsdGVyOmZ1bmN0aW9uKCl7fX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIkZpbHRlckxpc3QiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJMaXN0LmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVyTGlzdC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvZmlsdGVyTGlzdC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImZpbHRlci1saXN0IjoiZmlsdGVyTGlzdF9fZmlsdGVyLWxpc3RfX19MZllKayIsaXRlbToiZmlsdGVyTGlzdF9faXRlbV9fXzMtdjNOIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlckxpc3QvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyTGlzdC9maWx0ZXJMaXN0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJGaWx0ZXJMaXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GaWx0ZXJMaXN0fX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlckNvbnRyb2xzL2ZpbHRlckNvbnRyb2xzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsdGVyQ29udHJvbHM9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLHU9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0QnV0dG9uL2luZGV4LmpzIiksYz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLGQ9bigiLi9zcmMvY29tbW9uL2ltZy9wZW5jaWwtaWNvbi1pbmxpbmUuc3ZnIiksXz1yKGQpLHA9bigiLi9zcmMvY29tbW9uL2ltZy9jbG9uZS1pbmxpbmUuc3ZnIiksZj1yKHApLG09bigiLi9zcmMvY29tbW9uL2ltZy9kaXNjYXJkLWlubGluZS5zdmciKSxoPXIobSksZz1uKCIuL3NyYy9jb21tb24vaW1nL3NhdmUtaW5saW5lLnN2ZyIpLGI9cihnKSxFPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyc0FjdGlvbkJhci9maWx0ZXJDb250cm9scy9maWx0ZXJDb250cm9scy5zY3NzIikseT1yKEUpLHY9YS5kZWZhdWx0LmJpbmQoeS5kZWZhdWx0KSxUPXQuRmlsdGVyQ29udHJvbHM9KDAsbC5pbmplY3RJbnRsKShmdW5jdGlvbih0KXt2YXIgbj10LmludGwscj10LmRpc2NhcmREaXNhYmxlZCxvPXQuY2xvbmVEaXNhYmxlZCxzPXQuZWRpdERpc2FibGVkLGk9dC5zYXZlRGlzYWJsZWQsYT10Lm9uRGlzY2FyZCxsPXQub25DbG9uZSxkPXQub25FZGl0LHA9dC5vblNhdmU7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnYoImZpbHRlci1jb250cm9scyIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp2KCJjb250cm9sLWJ1dHRvbiIpfSxlLmNyZWF0ZUVsZW1lbnQodS5HaG9zdEJ1dHRvbix7aWNvbjpoLmRlZmF1bHQsdGl0bGU6bi5mb3JtYXRNZXNzYWdlKGMuQ09NTU9OX0xPQ0FMRV9LRVlTLkRJU0NBUkQpLGRpc2FibGVkOnIsb25DbGljazphfSxuLmZvcm1hdE1lc3NhZ2UoYy5DT01NT05fTE9DQUxFX0tFWVMuRElTQ0FSRCkpKSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp2KCJjb250cm9sLWJ1dHRvbiIpfSxlLmNyZWF0ZUVsZW1lbnQodS5HaG9zdEJ1dHRvbix7aWNvbjpmLmRlZmF1bHQsdGl0bGU6bi5mb3JtYXRNZXNzYWdlKGMuQ09NTU9OX0xPQ0FMRV9LRVlTLkNMT05FKSxkaXNhYmxlZDpvLG9uQ2xpY2s6bH0sbi5mb3JtYXRNZXNzYWdlKGMuQ09NTU9OX0xPQ0FMRV9LRVlTLkNMT05FKSkpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnYoImNvbnRyb2wtYnV0dG9uIil9LGUuY3JlYXRlRWxlbWVudCh1Lkdob3N0QnV0dG9uLHtpY29uOl8uZGVmYXVsdCx0aXRsZTpuLmZvcm1hdE1lc3NhZ2UoYy5DT01NT05fTE9DQUxFX0tFWVMuRURJVCksZGlzYWJsZWQ6cyxvbkNsaWNrOmR9LG4uZm9ybWF0TWVzc2FnZShjLkNPTU1PTl9MT0NBTEVfS0VZUy5FRElUKSkpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnYoImNvbnRyb2wtYnV0dG9uIil9LGUuY3JlYXRlRWxlbWVudCh1Lkdob3N0QnV0dG9uLHtpY29uOmIuZGVmYXVsdCx0aXRsZTpuLmZvcm1hdE1lc3NhZ2UoYy5DT01NT05fTE9DQUxFX0tFWVMuU0FWRSksZGlzYWJsZWQ6aSxvbkNsaWNrOnB9LG4uZm9ybWF0TWVzc2FnZShjLkNPTU1PTl9MT0NBTEVfS0VZUy5TQVZFKSkpKX0pO1QucHJvcFR5cGVzPXtkaXNjYXJkRGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsY2xvbmVEaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxlZGl0RGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsc2F2ZURpc2FibGVkOnMuZGVmYXVsdC5ib29sLG9uQ2hhbmdlU29ydGluZzpzLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG9uRGlzY2FyZDpzLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLG9uQ2xvbmU6cy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkVkaXQ6cy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvblNhdmU6cy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0sVC5kZWZhdWx0UHJvcHM9e2Rpc2NhcmREaXNhYmxlZDohMSxjbG9uZURpc2FibGVkOiExLGVkaXREaXNhYmxlZDohMSxzYXZlRGlzYWJsZWQ6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihULCJGaWx0ZXJDb250cm9scyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlckNvbnRyb2xzL2ZpbHRlckNvbnRyb2xzLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHYsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvZmlsdGVyQ29udHJvbHMvZmlsdGVyQ29udHJvbHMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlckNvbnRyb2xzL2ZpbHRlckNvbnRyb2xzLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZmlsdGVyLWNvbnRyb2xzIjoiZmlsdGVyQ29udHJvbHNfX2ZpbHRlci1jb250cm9sc19fXzNOb3gwIiwiY29udHJvbC1idXR0b24iOiJmaWx0ZXJDb250cm9sc19fY29udHJvbC1idXR0b25fX19YeDh6NyJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlckNvbnRyb2xzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvZmlsdGVyQ29udHJvbHMvZmlsdGVyQ29udHJvbHMuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkZpbHRlckNvbnRyb2xzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5GaWx0ZXJDb250cm9sc319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyc0FjdGlvbkJhci9maWx0ZXJzQWN0aW9uQmFyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsdGVyc0FjdGlvbkJhcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksYT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxsPXIoYSksdT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvc2hhcmVkTWVzc2FnZS9pbmRleC5qcyIpLGM9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlckNvbnRyb2xzL2luZGV4LmpzIiksZD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvZmlsdGVyc0FjdGlvbkJhci5zY3NzIiksXz1yKGQpLHA9bC5kZWZhdWx0LmJpbmQoXy5kZWZhdWx0KSxmPXQuRmlsdGVyc0FjdGlvbkJhcj1mdW5jdGlvbih0KXt2YXIgbj10LmZpbHRlcixyPXQudW5zYXZlZCxvPXQuZGlzY2FyZERpc2FibGVkLHM9dC5jbG9uZURpc2FibGVkLGE9dC5lZGl0RGlzYWJsZWQsbD10LnNhdmVEaXNhYmxlZCxkPXQub25EaXNjYXJkLF89dC5vbkNsb25lLGY9dC5vbkVkaXQsbT10Lm9uU2F2ZTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgiZmlsdGVycy1hY3Rpb24tYmFyIil9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoImluZm8tc2VjdGlvbiIpfSxuLnNoYXJlJiZlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJzaGFyZWQiKX0sZS5jcmVhdGVFbGVtZW50KHUuU2hhcmVkTWVzc2FnZSxudWxsKSksciYmZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgidW5zYXZlZC1tZXNzYWdlIil9LGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpwKCJhc3RlcmlzayIpfSwiKiIpLGUuY3JlYXRlRWxlbWVudChpLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJGaWx0ZXJzQWN0aW9uQmFyLnVuc2F2ZWRGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJGaWx0ZXIgaXMgbm90IHNhdmVkIn0pKSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cCgiY29udHJvbHMtc2VjdGlvbiIpfSxlLmNyZWF0ZUVsZW1lbnQoYy5GaWx0ZXJDb250cm9scyx7Y2xvbmVEaXNhYmxlZDpzLGVkaXREaXNhYmxlZDphLHNhdmVEaXNhYmxlZDpsLGRpc2NhcmREaXNhYmxlZDpvLG9uQ2hhbmdlU29ydGluZzpmdW5jdGlvbigpe30sb25EaXNjYXJkOmQsb25DbG9uZTpfLG9uRWRpdDpmLG9uU2F2ZTptfSkpKX07Zi5wcm9wVHlwZXM9e2ZpbHRlcjpzLmRlZmF1bHQub2JqZWN0LHVuc2F2ZWQ6cy5kZWZhdWx0LmJvb2wsZGlzY2FyZERpc2FibGVkOnMuZGVmYXVsdC5ib29sLGNsb25lRGlzYWJsZWQ6cy5kZWZhdWx0LmJvb2wsZWRpdERpc2FibGVkOnMuZGVmYXVsdC5ib29sLHNhdmVEaXNhYmxlZDpzLmRlZmF1bHQuYm9vbCxvbkRpc2NhcmQ6cy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxvbkNsb25lOnMuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25FZGl0OnMuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsb25TYXZlOnMuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LGYuZGVmYXVsdFByb3BzPXtmaWx0ZXI6e30sdW5zYXZlZDohMSxkaXNjYXJkRGlzYWJsZWQ6ITEsY2xvbmVEaXNhYmxlZDohMSxlZGl0RGlzYWJsZWQ6ITEsc2F2ZURpc2FibGVkOiExfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiRmlsdGVyc0FjdGlvbkJhciIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2ZpbHRlcnNBY3Rpb25CYXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyc0FjdGlvbkJhci9maWx0ZXJzQWN0aW9uQmFyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyc0FjdGlvbkJhci9maWx0ZXJzQWN0aW9uQmFyLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZmlsdGVycy1hY3Rpb24tYmFyIjoiZmlsdGVyc0FjdGlvbkJhcl9fZmlsdGVycy1hY3Rpb24tYmFyX19fMXlwVi0iLCJpbmZvLXNlY3Rpb24iOiJmaWx0ZXJzQWN0aW9uQmFyX19pbmZvLXNlY3Rpb25fX18yQ2hrUCIsc2hhcmVkOiJmaWx0ZXJzQWN0aW9uQmFyX19zaGFyZWRfX18zbGRIeCIsInVuc2F2ZWQtbWVzc2FnZSI6ImZpbHRlcnNBY3Rpb25CYXJfX3Vuc2F2ZWQtbWVzc2FnZV9fXzJFV25MIixhc3RlcmlzazoiZmlsdGVyc0FjdGlvbkJhcl9fYXN0ZXJpc2tfX18zNHdpdCJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvZmlsdGVyc0FjdGlvbkJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRmlsdGVyc0FjdGlvbkJhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRmlsdGVyc0FjdGlvbkJhcn19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZmlsdGVyc0FjdGlvbkJhci9zaGFyZWRNZXNzYWdlL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvc2hhcmVkTWVzc2FnZS9zaGFyZWRNZXNzYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTaGFyZWRNZXNzYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TaGFyZWRNZXNzYWdlfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL3NoYXJlZE1lc3NhZ2Uvc2hhcmVkTWVzc2FnZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNoYXJlZE1lc3NhZ2U9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIikscz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxpPXIocyksYT1uKCIuL25vZGVfbW9kdWxlcy9odG1sLXJlYWN0LXBhcnNlci9pbmRleC5qcyIpLGw9cihhKSx1PW4oIi4vc3JjL2NvbW1vbi9pbWcvc2hhcmUtaWNvbi1pbmxpbmUuc3ZnIiksYz1yKHUpLGQ9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL3NoYXJlZE1lc3NhZ2Uvc2hhcmVkTWVzc2FnZS5zY3NzIiksXz1yKGQpLHA9aS5kZWZhdWx0LmJpbmQoXy5kZWZhdWx0KSxmPXQuU2hhcmVkTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJzaGFyZWQtbWVzc2FnZSIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpwKCJpY29uIil9LCgwLGwuZGVmYXVsdCkoYy5kZWZhdWx0KSksZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnAoInRleHQiKX0sZS5jcmVhdGVFbGVtZW50KG8uRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkZpbHRlcnNBY3Rpb25CYXIuc2hhcmVkRmlsdGVyIixkZWZhdWx0TWVzc2FnZToiRmlsdGVyIGlzIHNoYXJlZCJ9KSkpfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZiwiU2hhcmVkTWVzc2FnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL3NoYXJlZE1lc3NhZ2Uvc2hhcmVkTWVzc2FnZS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihwLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJzQWN0aW9uQmFyL3NoYXJlZE1lc3NhZ2Uvc2hhcmVkTWVzc2FnZS5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvc2hhcmVkTWVzc2FnZS9zaGFyZWRNZXNzYWdlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic2hhcmVkLW1lc3NhZ2UiOiJzaGFyZWRNZXNzYWdlX19zaGFyZWQtbWVzc2FnZV9fX3BwRUhmIixpY29uOiJzaGFyZWRNZXNzYWdlX19pY29uX19fMjJCWGoiLHRleHQ6InNoYXJlZE1lc3NhZ2VfX3RleHRfX18xLUNfVCJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTGF1bmNoRmlsdGVyc1Rvb2xiYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaEZpbHRlcnNUb29sYmFyfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoRmlsdGVyc1Rvb2xiYXI9dm9pZCAwO3ZhciBzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1vKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPW8obSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1vKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPW8odiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9byhBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1vKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGo9byhSKSx4PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksdz1vKEQpLE09bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbnRyb2xsZXJzL2ZpbHRlci9pbmRleC5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvbGF1bmNoL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL2J1dHRvbnMvZ2hvc3RCdXR0b24vaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzR3JvdXAvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbW1vbi9pbWcvYWRkLWZpbHRlci1pbmxpbmUuc3ZnIiksQj1vKEYpLFU9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9maWx0ZXJMaXN0L2luZGV4LmpzIiksRz1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaEZpbHRlcnNUb29sYmFyL2ZpbHRlcnNBY3Rpb25CYXIvaW5kZXguanMiKSx6PW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvZXhwYW5kVG9nZ2xlci9pbmRleC5qcyIpLFY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9wcm9wVHlwZXMuanMiKSxXPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvYWxsTGF0ZXN0RHJvcGRvd24vaW5kZXguanMiKSxZPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvbGF1bmNoRmlsdGVyc1Rvb2xiYXIuc2NzcyIpLHE9byhZKSxLPXtMYXVuY2hGaWx0ZXJzVG9vbGJhcjp7ZGlzcGxheU5hbWU6IkxhdW5jaEZpbHRlcnNUb29sYmFyIn19LFg9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5qc3giLGNvbXBvbmVudHM6Syxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSwkPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvbGF1bmNoRmlsdGVyc1Rvb2xiYXIuanN4Iixjb21wb25lbnRzOkssbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksUT13LmRlZmF1bHQuYmluZChxLmRlZmF1bHQpLEo9dC5MYXVuY2hGaWx0ZXJzVG9vbGJhcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFgoJCh0LGUpLGUpfX0oIkxhdW5jaEZpbHRlcnNUb29sYmFyIikoKHM9KDAsTC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57dW5zYXZlZEZpbHRlcklkczooMCxrLnVuc2F2ZWRGaWx0ZXJJZHNTZWxlY3RvcikoZSksbGF1bmNoRGlzdGluY3Q6KDAsSS5sYXVuY2hEaXN0aW5jdFNlbGVjdG9yKShlKSxsZXZlbDooMCxOLmxldmVsU2VsZWN0b3IpKGUpfX0se3Nob3dNb2RhbDpNLnNob3dNb2RhbEFjdGlvbix1cGRhdGVGaWx0ZXI6ay51cGRhdGVGaWx0ZXJBY3Rpb24scmVzZXRGaWx0ZXI6ay5yZXNldEZpbHRlckFjdGlvbixjcmVhdGVGaWx0ZXI6ay5jcmVhdGVGaWx0ZXJBY3Rpb24sc2F2ZU5ld0ZpbHRlcjprLnNhdmVOZXdGaWx0ZXJBY3Rpb24sY2hhbmdlTGF1bmNoRGlzdGluY3Q6SS5jaGFuZ2VMYXVuY2hEaXN0aW5jdEFjdGlvbixyZWRpcmVjdFRvTGF1bmNoZXM6ay5jaGFuZ2VBY3RpdmVGaWx0ZXJBY3Rpb259KSkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17ZXhwYW5kZWQ6ITB9LHIuaGFuZGxlRmlsdGVyQ2xvbmU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUZpbHRlckNsb25lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUZpbHRlckNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlRmlsdGVyQ3JlYXRlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZUZpbHRlckVkaXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaGFuZGxlRmlsdGVyUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZUZpbHRlclJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnJlZGlyZWN0VG9MYXVuY2hlcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fcmVkaXJlY3RUb0xhdW5jaGVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnVwZGF0ZUFjdGl2ZUZpbHRlcj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdXBkYXRlQWN0aXZlRmlsdGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnRvZ2dsZUV4cGFuZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUFjdGl2ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQWN0aXZlRmlsdGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZWRpcmVjdFRvTGF1bmNoZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3JlZGlyZWN0VG9MYXVuY2hlc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyUmVzZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlclJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJFZGl0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJFZGl0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDcmVhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNyZWF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQ2xvbmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNsb25lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDbG9uZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRmlsdGVyQ2xvbmVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckNsb25lX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJDbG9uZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQ2xvbmVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY3RpdmVGaWx0ZXI7KDAsZS5jcmVhdGVGaWx0ZXIpKHQpfX0se2tleToiX19oYW5kbGVGaWx0ZXJDcmVhdGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckNyZWF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlRmlsdGVyQ3JlYXRlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVGaWx0ZXJDcmVhdGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckNyZWF0ZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuY3JlYXRlRmlsdGVyKCl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlckVkaXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzOygwLGUuc2hvd01vZGFsKSh7aWQ6ImZpbHRlckVkaXRNb2RhbCIsZGF0YTp7ZmlsdGVyOmUuYWN0aXZlRmlsdGVyLG9uRWRpdDplLnVwZGF0ZUZpbHRlcn19KX19LHtrZXk6Il9faGFuZGxlRmlsdGVyUmVzZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUZpbHRlclJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVGaWx0ZXJSZXNldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlRmlsdGVyUmVzZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUZpbHRlclJlc2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlRmlsdGVyLG49ZS5yZXNldEZpbHRlcixyPWUub25SZXNldEZpbHRlcjtuKHQuaWQpLHIoKX19LHtrZXk6Il9fcmVkaXJlY3RUb0xhdW5jaGVzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZWRpcmVjdFRvTGF1bmNoZXNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3JlZGlyZWN0VG9MYXVuY2hlc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVkaXJlY3RUb0xhdW5jaGVzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19yZWRpcmVjdFRvTGF1bmNoZXNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5yZWRpcmVjdFRvTGF1bmNoZXModGhpcy5wcm9wcy5sYXVuY2hEaXN0aW5jdCl9fSx7a2V5OiJfX3VwZGF0ZUFjdGl2ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlQWN0aXZlRmlsdGVyX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX191cGRhdGVBY3RpdmVGaWx0ZXJfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUFjdGl2ZUZpbHRlcl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlQWN0aXZlRmlsdGVyX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlRmlsdGVyLG49ZS51cGRhdGVGaWx0ZXIscj1lLmFjdGl2ZUZpbHRlcklkLG89ZS5zaG93TW9kYWwscz1lLnNhdmVOZXdGaWx0ZXI7cjwwP28oe2lkOiJmaWx0ZXJFZGl0TW9kYWwiLGRhdGE6e2NyZWF0aW9uTW9kZTohMCxmaWx0ZXI6dCxvbkVkaXQ6c319KTpuKHQpfX0se2tleToiX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlRXhwYW5kX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVFeHBhbmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUV4cGFuZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFN0YXRlKHtleHBhbmRlZDohdGhpcy5zdGF0ZS5leHBhbmRlZH0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmZpbHRlcnMsbj1lLmFjdGl2ZUZpbHRlcklkLG89ZS5sYXVuY2hEaXN0aW5jdCxzPWUuYWN0aXZlRmlsdGVyLGk9ZS5vblNlbGVjdEZpbHRlcixhPWUub25SZW1vdmVGaWx0ZXIsbD1lLmZpbHRlckVudGl0aWVzLHU9ZS5maWx0ZXJFcnJvcnMsYz1lLm9uRmlsdGVyQ2hhbmdlLGQ9ZS5vbkZpbHRlclZhbGlkYXRlLF89ZS5vbkZpbHRlckFkZCxwPWUub25GaWx0ZXJSZW1vdmUsZj1lLmNoYW5nZUxhdW5jaERpc3RpbmN0LG09ZS51bnNhdmVkRmlsdGVySWRzLGg9ZS5sZXZlbCxnPS0xIT09bS5pbmRleE9mKG4pLGI9bjwwO3JldHVybiByLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpRKCJsYXVuY2gtZmlsdGVycy10b29sYmFyIil9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoImZpbHRlci10aWNrZXRzLXJvdyIpfSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpRKCJhbGwtbGF0ZXN0LXN3aXRjaGVyIil9LHIuY3JlYXRlRWxlbWVudChXLkFsbExhdGVzdERyb3Bkb3duLHthY3RpdmVGaWx0ZXJJZDpuLHZhbHVlOm8sb25DbGljazp0aGlzLnJlZGlyZWN0VG9MYXVuY2hlcyxvbkNoYW5nZTpmfSkpLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoInNlcGFyYXRvciIpfSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6USgiYWRkLWZpbHRlci1idXR0b24iKX0sci5jcmVhdGVFbGVtZW50KFAuR2hvc3RCdXR0b24se2ljb246Qi5kZWZhdWx0LG9uQ2xpY2s6dGhpcy5oYW5kbGVGaWx0ZXJDcmVhdGV9LHIuY3JlYXRlRWxlbWVudCh4LkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJMYXVuY2hGaWx0ZXJzVG9vbGJhci5hZGRGaWx0ZXIiLGRlZmF1bHRNZXNzYWdlOiJBZGQgZmlsdGVyIn0pKSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6USgiZmlsdGVyLXRpY2tldHMtY29udGFpbmVyIil9LHIuY3JlYXRlRWxlbWVudChVLkZpbHRlckxpc3Qse2ZpbHRlcnM6dCxhY3RpdmVGaWx0ZXJJZDpuLHVuc2F2ZWRGaWx0ZXJJZHM6bSxvblNlbGVjdEZpbHRlcjppLG9uUmVtb3ZlRmlsdGVyOmF9KSksISFzJiYhaCYmci5jcmVhdGVFbGVtZW50KHouRXhwYW5kVG9nZ2xlcix7ZXhwYW5kZWQ6dGhpcy5zdGF0ZS5leHBhbmRlZCxvblRvZ2dsZUV4cGFuZDp0aGlzLnRvZ2dsZUV4cGFuZH0pKSx0aGlzLnN0YXRlLmV4cGFuZGVkJiYhaCYmISFzJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpRKCJmaWx0ZXItY29udHJvbHMtY29udGFpbmVyIil9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlEoImZpbHRlci1lbnRpdGllcy1jb250YWluZXIiKX0sci5jcmVhdGVFbGVtZW50KEguRW50aXRpZXNHcm91cCx7b25DaGFuZ2U6YyxvblZhbGlkYXRlOmQsb25SZW1vdmU6cCxvbkFkZDpfLGVycm9yczp1LGVudGl0aWVzOmx9KSksci5jcmVhdGVFbGVtZW50KEcuRmlsdGVyc0FjdGlvbkJhcix7dW5zYXZlZDpnLGRpc2NhcmREaXNhYmxlZDohZyxzYXZlRGlzYWJsZWQ6IWcsY2xvbmVEaXNhYmxlZDpnLGVkaXREaXNhYmxlZDpnfHxiLG9uRGlzY2FyZDp0aGlzLmhhbmRsZUZpbHRlclJlc2V0LG9uRWRpdDp0aGlzLmhhbmRsZUZpbHRlckVkaXQsb25TYXZlOnRoaXMudXBkYXRlQWN0aXZlRmlsdGVyLG9uQ2xvbmU6dGhpcy5oYW5kbGVGaWx0ZXJDbG9uZSxmaWx0ZXI6c30pKSl9fV0pLHR9KEEuQ29tcG9uZW50KSxhLnByb3BUeXBlcz17ZmlsdGVyczpqLmRlZmF1bHQuYXJyYXlPZihWLmZpbHRlclNoYXBlKSxhY3RpdmVGaWx0ZXJJZDpqLmRlZmF1bHQub25lT2ZUeXBlKFtqLmRlZmF1bHQuc3RyaW5nLGouZGVmYXVsdC5udW1iZXJdKSxhY3RpdmVGaWx0ZXI6ai5kZWZhdWx0Lm9iamVjdCx1bnNhdmVkRmlsdGVySWRzOmouZGVmYXVsdC5hcnJheSxvblNlbGVjdEZpbHRlcjpqLmRlZmF1bHQuZnVuYyxvblJlbW92ZUZpbHRlcjpqLmRlZmF1bHQuZnVuYyxvbkZpbHRlckFkZDpqLmRlZmF1bHQuZnVuYyxvbkZpbHRlclJlbW92ZTpqLmRlZmF1bHQuZnVuYyxvbkZpbHRlclZhbGlkYXRlOmouZGVmYXVsdC5mdW5jLG9uRmlsdGVyQ2hhbmdlOmouZGVmYXVsdC5mdW5jLGZpbHRlckVycm9yczpqLmRlZmF1bHQub2JqZWN0LGZpbHRlckVudGl0aWVzOmouZGVmYXVsdC5hcnJheSxzaG93TW9kYWw6ai5kZWZhdWx0LmZ1bmMsdXBkYXRlRmlsdGVyOmouZGVmYXVsdC5mdW5jLHJlc2V0RmlsdGVyOmouZGVmYXVsdC5mdW5jLG9uUmVzZXRGaWx0ZXI6ai5kZWZhdWx0LmZ1bmMsY3JlYXRlRmlsdGVyOmouZGVmYXVsdC5mdW5jLHNhdmVOZXdGaWx0ZXI6ai5kZWZhdWx0LmZ1bmMscmVkaXJlY3RUb0xhdW5jaGVzOmouZGVmYXVsdC5mdW5jLGNoYW5nZUxhdW5jaERpc3RpbmN0OmouZGVmYXVsdC5mdW5jLGxhdW5jaERpc3RpbmN0OmouZGVmYXVsdC5zdHJpbmcsbGV2ZWw6ai5kZWZhdWx0LnN0cmluZ30sYS5kZWZhdWx0UHJvcHM9e2ZpbHRlcnM6W10sYWN0aXZlRmlsdGVySWQ6bnVsbCxhY3RpdmVGaWx0ZXI6bnVsbCx1bnNhdmVkRmlsdGVySWRzOltdLG9uU2VsZWN0RmlsdGVyOmZ1bmN0aW9uKCl7fSxvblJlbW92ZUZpbHRlcjpmdW5jdGlvbigpe30sb25GaWx0ZXJBZGQ6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyUmVtb3ZlOmZ1bmN0aW9uKCl7fSxvbkZpbHRlclZhbGlkYXRlOmZ1bmN0aW9uKCl7fSxvbkZpbHRlckNoYW5nZTpmdW5jdGlvbigpe30sZmlsdGVyRXJyb3JzOnt9LGZpbHRlckVudGl0aWVzOltdLHNob3dNb2RhbDpmdW5jdGlvbigpe30sdXBkYXRlRmlsdGVyOmZ1bmN0aW9uKCl7fSxyZXNldEZpbHRlcjpmdW5jdGlvbigpe30sb25SZXNldEZpbHRlcjpmdW5jdGlvbigpe30sY3JlYXRlRmlsdGVyOmZ1bmN0aW9uKCl7fSxzYXZlTmV3RmlsdGVyOmZ1bmN0aW9uKCl7fSxyZWRpcmVjdFRvTGF1bmNoZXM6ZnVuY3Rpb24oKXt9LGNoYW5nZUxhdW5jaERpc3RpbmN0OmZ1bmN0aW9uKCl7fSxsYXVuY2hEaXN0aW5jdDoiIixsZXZlbDoiIn0saT1sKSl8fGkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihKLCJMYXVuY2hGaWx0ZXJzVG9vbGJhciIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihRLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9sYXVuY2hGaWx0ZXJzVG9vbGJhci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImxhdW5jaC1maWx0ZXJzLXRvb2xiYXIiOiJsYXVuY2hGaWx0ZXJzVG9vbGJhcl9fbGF1bmNoLWZpbHRlcnMtdG9vbGJhcl9fXzcwWEZVIiwiZmlsdGVyLXRpY2tldHMtcm93IjoibGF1bmNoRmlsdGVyc1Rvb2xiYXJfX2ZpbHRlci10aWNrZXRzLXJvd19fXzN1cXpoIiwiZmlsdGVyLXRpY2tldHMtY29udGFpbmVyIjoibGF1bmNoRmlsdGVyc1Rvb2xiYXJfX2ZpbHRlci10aWNrZXRzLWNvbnRhaW5lcl9fXzFaVzBFIiwiYWxsLWxhdGVzdC1zd2l0Y2hlciI6ImxhdW5jaEZpbHRlcnNUb29sYmFyX19hbGwtbGF0ZXN0LXN3aXRjaGVyX19fMXFha2ciLHNlcGFyYXRvcjoibGF1bmNoRmlsdGVyc1Rvb2xiYXJfX3NlcGFyYXRvcl9fXzJOei11IiwiZmlsdGVyLWNvbnRyb2xzLWNvbnRhaW5lciI6ImxhdW5jaEZpbHRlcnNUb29sYmFyX19maWx0ZXItY29udHJvbHMtY29udGFpbmVyX19fM0N3ZlQiLCJmaWx0ZXItZW50aXRpZXMtY29udGFpbmVyIjoibGF1bmNoRmlsdGVyc1Rvb2xiYXJfX2ZpbHRlci1lbnRpdGllcy1jb250YWluZXJfX18yWHliTyIsImFkZC1maWx0ZXItYnV0dG9uIjoibGF1bmNoRmlsdGVyc1Rvb2xiYXJfX2FkZC1maWx0ZXItYnV0dG9uX19fR3FTTzMifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoRmlsdGVyc1Rvb2xiYXIvcHJvcFR5cGVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZpbHRlclNoYXBlPXZvaWQgMDt2YXIgcj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksbz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KHIpLHM9dC5maWx0ZXJTaGFwZT1vLmRlZmF1bHQuc2hhcGUoe25hbWU6by5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGRlc2NyaXB0aW9uOm8uZGVmYXVsdC5zdHJpbmcsc2hhcmU6by5kZWZhdWx0LmJvb2x9KTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihzLCJmaWx0ZXJTaGFwZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hGaWx0ZXJzVG9vbGJhci9wcm9wVHlwZXMuanMiKX0oKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZGVmZWN0U3RhdGlzdGljcy5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZmVjdFN0YXRpc3RpY3M9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksXz1yKGQpLHA9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RMaW5rL2luZGV4LmpzIiksZj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RvbnV0Q2hhcnQvaW5kZXguanMiKSxtPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZGVmZWN0U3RhdGlzdGljcy5zY3NzIiksaD1yKG0pLGc9Yy5kZWZhdWx0LmJpbmQoaC5kZWZhdWx0KSxiPXQuRGVmZWN0U3RhdGlzdGljcz1mdW5jdGlvbih0KXt2YXIgbj10LnR5cGUscj10LmRhdGEsbz10LmN1c3RvbVByb3BzLGk9dC5pdGVtSWQsdT10LmV2ZW50SW5mbyxjPXQudG9vbHRpcEV2ZW50SW5mbyxkPXQub3duTGlua1BhcmFtcztyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygiZGVmZWN0LXN0YXRpc3RpY3MiKX0sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmcoInRpdGxlIil9LGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpnKCJjaXJjbGUiLCgwLGEuZGVmYXVsdCkoe30sInR5cGUtIituLG4pKX0pLG8uYWJicmV2aWF0aW9uKSwhIXIudG90YWwmJmUuY3JlYXRlRWxlbWVudChsLkZyYWdtZW50LG51bGwsZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygiZGVza3RvcC12aXNpYmxlIil9LGUuY3JlYXRlRWxlbWVudChmLkRvbnV0Q2hhcnQse2l0ZW1JZDppLGRhdGE6cix0eXBlOm4sdmlld0JveDo2NCxzdHJva2VXaWR0aDoxMyxldmVudEluZm86dSxvd25MaW5rUGFyYW1zOmQsdG9vbHRpcEV2ZW50SW5mbzpjfSkpLGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmcoImRlc2t0b3AtaGlkZGVuIil9LGUuY3JlYXRlRWxlbWVudChwLkRlZmVjdExpbmsse2l0ZW1JZDppLGRlZmVjdHM6KDAscy5kZWZhdWx0KShyKSxvd25MaW5rUGFyYW1zOmQsZXZlbnRJbmZvOnV9LHIudG90YWwpKSkpfTtiLnByb3BUeXBlcz17dHlwZTpfLmRlZmF1bHQuc3RyaW5nLGRhdGE6Xy5kZWZhdWx0Lm9iamVjdCxjdXN0b21Qcm9wczpfLmRlZmF1bHQub2JqZWN0LGl0ZW1JZDpfLmRlZmF1bHQub25lT2ZUeXBlKFtfLmRlZmF1bHQuc3RyaW5nLF8uZGVmYXVsdC5udW1iZXJdKS5pc1JlcXVpcmVkLGV2ZW50SW5mbzpfLmRlZmF1bHQub2JqZWN0LHRvb2x0aXBFdmVudEluZm86Xy5kZWZhdWx0Lm9iamVjdCxvd25MaW5rUGFyYW1zOl8uZGVmYXVsdC5zaGFwZSh7cGF5bG9hZDpfLmRlZmF1bHQub2JqZWN0LHBhZ2U6Xy5kZWZhdWx0LnN0cmluZ30pfSxiLmRlZmF1bHRQcm9wcz17dHlwZToiIixjdXN0b21Qcm9wczp7fSxkYXRhOnt9LGV2ZW50SW5mbzp7fSx0b29sdGlwRXZlbnRJbmZvOnt9LG93bkxpbmtQYXJhbXM6e319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJEZWZlY3RTdGF0aXN0aWNzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RlZmVjdFN0YXRpc3RpY3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZGVmZWN0U3RhdGlzdGljcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RlZmVjdFN0YXRpc3RpY3Muc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJkZWZlY3Qtc3RhdGlzdGljcyI6ImRlZmVjdFN0YXRpc3RpY3NfX2RlZmVjdC1zdGF0aXN0aWNzX19fMXJaWkoiLHRpdGxlOiJkZWZlY3RTdGF0aXN0aWNzX190aXRsZV9fX19leENjIixjaXJjbGU6ImRlZmVjdFN0YXRpc3RpY3NfX2NpcmNsZV9fXzN2NS1IIiwidHlwZS1wcm9kdWN0X2J1ZyI6ImRlZmVjdFN0YXRpc3RpY3NfX3R5cGUtcHJvZHVjdF9idWdfX18ybHpybSIsInR5cGUtYXV0b21hdGlvbl9idWciOiJkZWZlY3RTdGF0aXN0aWNzX190eXBlLWF1dG9tYXRpb25fYnVnX19fVnpvS20iLCJ0eXBlLXN5c3RlbV9pc3N1ZSI6ImRlZmVjdFN0YXRpc3RpY3NfX3R5cGUtc3lzdGVtX2lzc3VlX19fMmUwWXoiLHZhbHVlOiJkZWZlY3RTdGF0aXN0aWNzX192YWx1ZV9fXzF6SjlBIiwiZGVza3RvcC12aXNpYmxlIjoiZGVmZWN0U3RhdGlzdGljc19fZGVza3RvcC12aXNpYmxlX19fM2dvQnQiLCJkZXNrdG9wLWhpZGRlbiI6ImRlZmVjdFN0YXRpc3RpY3NfX2Rlc2t0b3AtaGlkZGVuX19fMmQtQXoifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZG9udXRDaGFydC9kb251dENoYXJ0LmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Eb251dENoYXJ0PXZvaWQgMDt2YXIgcyxpLGEsbCx1LGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiksZD1vKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIikscD1vKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksbT1vKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZz1vKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxFPW8oYikseT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx2PW8oeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksQT1vKFQpLEM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxPPW8oQyksUz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFI9byhTKSxqPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIikseD1vKGopLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxrPW8oTSksST1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdFR5cGVUb29sdGlwL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vdG9vbHRpcHMvaG92ZXJhYmxlVG9vbHRpcC9pbmRleC5qcyIpLE49bigiLi9zcmMvY29udHJvbGxlcnMvcHJvamVjdC9pbmRleC5qcyIpLEg9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9kZWZlY3RMaW5rL2luZGV4LmpzIiksRj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RvbnV0Q2hhcnQvZG9udXRDaGFydC5zY3NzIiksQj1vKEYpLFU9e0RvbnV0Q2hhcnQ6e2Rpc3BsYXlOYW1lOiJEb251dENoYXJ0In19LEc9KDAseC5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZGVmZWN0U3RhdGlzdGljcy9kb251dENoYXJ0L2RvbnV0Q2hhcnQuanN4Iixjb21wb25lbnRzOlUsbG9jYWxzOltlXSxpbXBvcnRzOltSLmRlZmF1bHRdfSksej0oMCxPLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RvbnV0Q2hhcnQvZG9udXRDaGFydC5qc3giLGNvbXBvbmVudHM6VSxsb2NhbHM6W10saW1wb3J0czpbUi5kZWZhdWx0LEEuZGVmYXVsdF19KSxWPUQuZGVmYXVsdC5iaW5kKEIuZGVmYXVsdCksVz10LkRvbnV0Q2hhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKHoodCxlKSxlKX19KCJEb251dENoYXJ0IikoKHM9KDAsUC53aXRoSG92ZXJhYmxlVG9vbHRpcCkoe1Rvb2x0aXBDb21wb25lbnQ6SS5EZWZlY3RUeXBlVG9vbHRpcCxkYXRhOnt3aWR0aDoyMzUsYWxpZ246InJpZ2h0Iixub0Fycm93OiEwLGRlc2t0b3BPbmx5OiEwLHZlcnRpY2FsT2Zmc2V0Oi0xMH19KSxpPSgwLHcuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2RlZmVjdENvbG9yczooMCxOLmRlZmVjdENvbG9yc1NlbGVjdG9yKShlKX19KSxzKGE9aSgodT1sPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxtLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLEUuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAscC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmdldENoYXJ0RGF0YT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0Q2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmNoYXJ0RGF0YT1bXSxvPW4sKDAsRS5kZWZhdWx0KShyLG8pfXJldHVybigwLHYuZGVmYXVsdCkodCxlKSwoMCxnLmRlZmF1bHQpKHQsW3trZXk6Il9fZ2V0Q2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldENoYXJ0RGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDaGFydERhdGFfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENoYXJ0RGF0YV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q2hhcnREYXRhX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuZGF0YSxuPVtdLHI9NzU7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLnByb3BzLmRhdGEpLmZvckVhY2goZnVuY3Rpb24obyl7aWYoInRvdGFsIiE9PW8pe3ZhciBzPXRbb10saT1zL3QudG90YWwqMTAwO24ucHVzaCh7aWQ6byx2YWx1ZTppLGNvbG9yOmUucHJvcHMuZGVmZWN0Q29sb3JzW29dLG9mZnNldDoxMDAtcn0pLHIrPWl9fSksbn19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5kYXRhLG49ZS50eXBlLG89ZS52aWV3Qm94LHM9ZS5zdHJva2VXaWR0aCxpPWUuaXRlbUlkLGE9ZS5kZWZlY3RDb2xvcnMsbD1lLmV2ZW50SW5mbyx1PWUub3duTGlua1BhcmFtcyxjPW8vMixfPTEwMC8oMipNYXRoLlBJKTtyZXR1cm4gYSYmKHRoaXMuY2hhcnREYXRhPXRoaXMuZ2V0Q2hhcnREYXRhKCkpLHIuY3JlYXRlRWxlbWVudChILkRlZmVjdExpbmsse2RlZmVjdHM6KDAsZC5kZWZhdWx0KSh0KSxpdGVtSWQ6aSxldmVudEluZm86bCxvd25MaW5rUGFyYW1zOnV9LHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlYoImNoYXJ0LWNvbnRhaW5lciIpfSxyLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHZpZXdCb3g6IjAgMCAiK28rIiAiK28sY2xhc3NOYW1lOiJkb251dCJ9LHIuY3JlYXRlRWxlbWVudCgiY2lyY2xlIix7Y3g6YyxjeTpjLHI6XyxmaWxsOiJ0cmFuc3BhcmVudCJ9KSxyLmNyZWF0ZUVsZW1lbnQoImNpcmNsZSIse2N4OmMsY3k6YyxyOl8sZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToiI2QyZDNkNCIsc3Ryb2tlV2lkdGg6c30pLHRoaXMuY2hhcnREYXRhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gci5jcmVhdGVFbGVtZW50KCJjaXJjbGUiLHtrZXk6ZS5pZCxjeDpjLGN5OmMscjpfLGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6ZS5jb2xvcixzdHJva2VXaWR0aDpzLHN0cm9rZURhc2hhcnJheTplLnZhbHVlKyIgIisoMTAwLWUudmFsdWUpLHN0cm9rZURhc2hvZmZzZXQ6ZS5vZmZzZXR9KX0pKSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VigidG90YWwiKSxzdHlsZTp7Ym9yZGVyQ29sb3I6dGhpcy5wcm9wcy5kZWZlY3RDb2xvcnNbbl19fSx0LnRvdGFsKSl9fV0pLHR9KFMuQ29tcG9uZW50KSxsLnByb3BUeXBlcz17dHlwZTprLmRlZmF1bHQuc3RyaW5nLGRhdGE6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHZpZXdCb3g6ay5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHN0cm9rZVdpZHRoOmsuZGVmYXVsdC5udW1iZXIuaXNSZXF1aXJlZCxkZWZlY3RDb2xvcnM6ay5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLGl0ZW1JZDprLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWQsZXZlbnRJbmZvOmsuZGVmYXVsdC5vYmplY3Qsb3duTGlua1BhcmFtczprLmRlZmF1bHQuc2hhcGUoe2lzT3RoZXJQYWdlOmsuZGVmYXVsdC5ib29sLHBheWxvYWQ6ay5kZWZhdWx0Lm9iamVjdCxwYWdlOmsuZGVmYXVsdC5zdHJpbmd9KX0sbC5kZWZhdWx0UHJvcHM9e3R5cGU6IiIsZXZlbnRJbmZvOnt9LG93bkxpbmtQYXJhbXM6e319LGE9dSkpfHxhKXx8YSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJEb251dENoYXJ0IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RvbnV0Q2hhcnQvZG9udXRDaGFydC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZGVmZWN0U3RhdGlzdGljcy9kb251dENoYXJ0L2RvbnV0Q2hhcnQuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShlKSxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZG9udXRDaGFydC9kb251dENoYXJ0LnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt0b3RhbDoiZG9udXRDaGFydF9fdG90YWxfX18zUXFKciIsImNoYXJ0LWNvbnRhaW5lciI6ImRvbnV0Q2hhcnRfX2NoYXJ0LWNvbnRhaW5lcl9fXzJwbktSIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2RvbnV0Q2hhcnQvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2RlZmVjdFN0YXRpc3RpY3MvZG9udXRDaGFydC9kb251dENoYXJ0LmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEb251dENoYXJ0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Eb251dENoYXJ0fX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZGVmZWN0U3RhdGlzdGljcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZGVmZWN0U3RhdGlzdGljcy9kZWZlY3RTdGF0aXN0aWNzLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEZWZlY3RTdGF0aXN0aWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5EZWZlY3RTdGF0aXN0aWNzfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvZXhlY3V0aW9uU3RhdGlzdGljcy9leGVjdXRpb25TdGF0aXN0aWNzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRXhlY3V0aW9uU3RhdGlzdGljcz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3RhdGlzdGljc0xpbmsvaW5kZXguanMiKSx1PW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2V4ZWN1dGlvblN0YXRpc3RpY3MvZXhlY3V0aW9uU3RhdGlzdGljcy5zY3NzIiksYz1yKHUpLGQ9cy5kZWZhdWx0LmJpbmQoYy5kZWZhdWx0KSxfPXQuRXhlY3V0aW9uU3RhdGlzdGljcz1mdW5jdGlvbih0KXt2YXIgbj10LnZhbHVlLHI9dC50aXRsZSxvPXQuYm9sZCxzPXQuaXRlbUlkLGk9dC5zdGF0dXNlcyxhPXQub3duTGlua1BhcmFtcztyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZCgiZXhlY3V0aW9uLXN0YXRpc3RpY3MiKX0sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOmQoInRpdGxlIil9LHIuZnVsbCksISFOdW1iZXIobikmJmUuY3JlYXRlRWxlbWVudChsLlN0YXRpc3RpY3NMaW5rLHtpdGVtSWQ6cyxzdGF0dXNlczppLGNsYXNzTmFtZTpkKCJ2YWx1ZSIse2JvbGQ6b30pLG93bkxpbmtQYXJhbXM6YX0sbikpfTtfLnByb3BUeXBlcz17dmFsdWU6YS5kZWZhdWx0Lm51bWJlcix0aXRsZTphLmRlZmF1bHQub2JqZWN0LGJvbGQ6YS5kZWZhdWx0LmJvb2wsaXRlbUlkOmEuZGVmYXVsdC5vbmVPZlR5cGUoW2EuZGVmYXVsdC5zdHJpbmcsYS5kZWZhdWx0Lm51bWJlcl0pLmlzUmVxdWlyZWQsc3RhdHVzZXM6YS5kZWZhdWx0LmFycmF5T2YoYS5kZWZhdWx0LnN0cmluZykuaXNSZXF1aXJlZCxvd25MaW5rUGFyYW1zOmEuZGVmYXVsdC5zaGFwZSh7cGF5bG9hZDphLmRlZmF1bHQub2JqZWN0LHBhZ2U6YS5kZWZhdWx0LnN0cmluZ30pfSxfLmRlZmF1bHRQcm9wcz17Ym9sZDohMSx0aXRsZTp7fSx2YWx1ZTpudWxsLG93bkxpbmtQYXJhbXM6e319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJFeGVjdXRpb25TdGF0aXN0aWNzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9leGVjdXRpb25TdGF0aXN0aWNzL2V4ZWN1dGlvblN0YXRpc3RpY3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2V4ZWN1dGlvblN0YXRpc3RpY3MvZXhlY3V0aW9uU3RhdGlzdGljcy5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9leGVjdXRpb25TdGF0aXN0aWNzL2V4ZWN1dGlvblN0YXRpc3RpY3Muc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJleGVjdXRpb24tc3RhdGlzdGljcyI6ImV4ZWN1dGlvblN0YXRpc3RpY3NfX2V4ZWN1dGlvbi1zdGF0aXN0aWNzX19fMWllazciLHRpdGxlOiJleGVjdXRpb25TdGF0aXN0aWNzX190aXRsZV9fXzNsdXI4Iix2YWx1ZToiZXhlY3V0aW9uU3RhdGlzdGljc19fdmFsdWVfX18yZDIxciIsYm9sZDoiZXhlY3V0aW9uU3RhdGlzdGljc19fYm9sZF9fXzJiVEd6In19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9leGVjdXRpb25TdGF0aXN0aWNzL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9leGVjdXRpb25TdGF0aXN0aWNzL2V4ZWN1dGlvblN0YXRpc3RpY3MuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkV4ZWN1dGlvblN0YXRpc3RpY3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkV4ZWN1dGlvblN0YXRpc3RpY3N9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9oYW1idXJnZXIvaGFtYnVyZ2VyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSGFtYnVyZ2VyPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEw9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRD1yKEwpLHc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdEJ1dHRvbi9pbmRleC5qcyIpLGs9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9wcm9qZWN0Um9sZXMuanMiKSxJPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbGF1bmNoU3RhdHVzZXMuanMiKSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTj1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksSD1yKE4pLEY9bigiLi9zcmMvY29tbW9uL3V0aWxzL3Blcm1pc3Npb25zL2luZGV4LmpzIiksQj1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLFU9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLEc9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlck1lbnVJdGVtL2luZGV4LmpzIiksej1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9oYW1idXJnZXIvaGFtYnVyZ2VyLnNjc3MiKSxWPXIoeiksVz17SGFtYnVyZ2VyOntkaXNwbGF5TmFtZToiSGFtYnVyZ2VyIn19LFk9KDAsUy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlci5qc3giLGNvbXBvbmVudHM6Vyxsb2NhbHM6W2VdLGltcG9ydHM6W0MuZGVmYXVsdF19KSxxPSgwLFQuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2hhbWJ1cmdlci9oYW1idXJnZXIuanN4Iixjb21wb25lbnRzOlcsbG9jYWxzOltdLGltcG9ydHM6W0MuZGVmYXVsdCx5LmRlZmF1bHRdfSksSz1ELmRlZmF1bHQuYmluZChWLmRlZmF1bHQpLFg9KDAsUC5kZWZpbmVNZXNzYWdlcykoe3RvRGVidWc6e2lkOiJIYW1idXJnZXIudG9EZWJ1ZyIsZGVmYXVsdE1lc3NhZ2U6Ik1vdmUgdG8gZGVidWcifSx0b0FsbExhdW5jaGVzOntpZDoiSGFtYnVyZ2VyLnRvQWxsTGF1bmNoZXMiLGRlZmF1bHRNZXNzYWdlOiJNb3ZlIHRvIGFsbCBsYXVuY2hlcyJ9LGZvcmNlRmluaXNoOntpZDoiSGFtYnVyZ2VyLmZvcmNlRmluaXNoIixkZWZhdWx0TWVzc2FnZToiRm9yY2UgRmluaXNoIn0sYW5hbHlzaXM6e2lkOiJIYW1idXJnZXIuYW5hbHlzaXMiLGRlZmF1bHRNZXNzYWdlOiJBbmFseXNpcyJ9LGRlbGV0ZTp7aWQ6IkhhbWJ1cmdlci5kZWxldGUiLGRlZmF1bHRNZXNzYWdlOiJEZWxldGUifSxsYXVuY2hGaW5pc2hlZDp7aWQ6IkhhbWJ1cmdlci5sYXVuY2hGaW5pc2hlZCIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaCBpcyBmaW5pc2hlZCJ9LG5vUGVybWlzc2lvbnM6e2lkOiJIYW1idXJnZXIubm9QZXJtaXNzaW9ucyIsZGVmYXVsdE1lc3NhZ2U6IllvdSBhcmUgbm90IGEgbGF1bmNoIG93bmVyIn0sbGF1bmNoSW5Qcm9ncmVzczp7aWQ6IkhhbWJ1cmdlci5sYXVuY2hJblByb2dyZXNzIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIHNob3VsZCBub3QgYmUgaW4gdGhlIHN0YXR1cyBwcm9ncmVzcyJ9LG5vdFlvdXJMYXVuY2g6e2lkOiJIYW1idXJnZXIubm90WW91ckxhdW5jaCIsZGVmYXVsdE1lc3NhZ2U6IllvdSBhcmUgbm90IGEgbGF1bmNoIG93bmVyIn19KSwkPXQuSGFtYnVyZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gWShxKHQsZSksZSl9fSgiSGFtYnVyZ2VyIikoKG89KDAseC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdFJvbGU6KDAsVS5hY3RpdmVQcm9qZWN0Um9sZVNlbGVjdG9yKShlKSx1c2VySWQ6KDAsVS51c2VySWRTZWxlY3RvcikoZSksYWNjb3VudFJvbGU6KDAsVS51c2VyQWNjb3VudFJvbGVTZWxlY3RvcikoZSkscHJvamVjdElkOigwLFUuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKX19KSxzPSgwLGouZGVmYXVsdCkoKSwoMCxQLmluamVjdEludGwpKGk9byhpPXMoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsXy5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17bWVudVNob3duOiExLGRpc2FibGVFdmVudFRyYWNrOiExfSxyLm9uRXhwb3J0TGF1bmNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19vbkV4cG9ydExhdW5jaF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRGb3JjZUZpbmlzaFRvb2x0aXA9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldEZvcmNlRmluaXNoVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXRNb3ZlVG9EZWJ1Z1Rvb2x0aXA9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldE1vdmVUb0RlYnVnVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREZWxldGVJdGVtVG9vbHRpcD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZ2V0RGVsZXRlSXRlbVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuaXNJblByb2dyZXNzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19pc0luUHJvZ3Jlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuZXhwb3J0QXNQREY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2V4cG9ydEFzUERGX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmV4cG9ydEFzWExTPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19leHBvcnRBc1hMU19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5leHBvcnRBc0hUTUw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2V4cG9ydEFzSFRNTF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5oYW5kbGVPdXRzaWRlQ2xpY2s9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci50b2dnbGVNZW51PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsaC5kZWZhdWx0KShyLG8pfXJldHVybigwLGIuZGVmYXVsdCkodCxlKSwoMCxmLmRlZmF1bHQpKHQsW3trZXk6Il9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlTWVudV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2V4cG9ydEFzSFRNTF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZXhwb3J0QXNIVE1MX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19leHBvcnRBc1hMU19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZXhwb3J0QXNYTFNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2V4cG9ydEFzUERGX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19leHBvcnRBc1BERl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0luUHJvZ3Jlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlbGV0ZUl0ZW1Ub29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXREZWxldGVJdGVtVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TW92ZVRvRGVidWdUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRNb3ZlVG9EZWJ1Z1Rvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEZvcmNlRmluaXNoVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Rm9yY2VGaW5pc2hUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkV4cG9ydExhdW5jaF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25FeHBvcnRMYXVuY2hfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2ssITEpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLCExKX19LHtrZXk6Il9fb25FeHBvcnRMYXVuY2hfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uRXhwb3J0TGF1bmNoX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkV4cG9ydExhdW5jaF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25FeHBvcnRMYXVuY2hfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uRXhwb3J0TGF1bmNoX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3dpbmRvdy5sb2NhdGlvbi5ocmVmPUIuVVJMUy5leHBvcnRMYXVuY2godGhpcy5wcm9wcy5wcm9qZWN0SWQsdGhpcy5wcm9wcy5sYXVuY2guaWQsZSl9fSx7a2V5OiJfX2dldEZvcmNlRmluaXNoVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Rm9yY2VGaW5pc2hUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRGb3JjZUZpbmlzaFRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEZvcmNlRmluaXNoVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Rm9yY2VGaW5pc2hUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bCxuPWUucHJvamVjdFJvbGUscj1lLmFjY291bnRSb2xlLG89IiI7cmV0dXJuKDAsRi5jYW5Gb3JjZUZpbmlzaExhdW5jaCkocixuLHRoaXMucHJvcHMudXNlcklkPT09dGhpcy5wcm9wcy5sYXVuY2gub3duZXIpfHwobz10LmZvcm1hdE1lc3NhZ2UoWC5ub1Blcm1pc3Npb25zKSksdGhpcy5pc0luUHJvZ3Jlc3MoKXx8KG89dC5mb3JtYXRNZXNzYWdlKFgubGF1bmNoRmluaXNoZWQpKSxvfX0se2tleToiX19nZXRNb3ZlVG9EZWJ1Z1Rvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldE1vdmVUb0RlYnVnVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0TW92ZVRvRGVidWdUb29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRNb3ZlVG9EZWJ1Z1Rvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldE1vdmVUb0RlYnVnVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwsbj1lLnByb2plY3RSb2xlLHI9ZS5hY2NvdW50Um9sZSxvPWUudXNlcklkLHM9ZS5sYXVuY2g7cmV0dXJuKDAsRi5jYW5Nb3ZlVG9EZWJ1ZykocixuLG89PT1zLm93bmVyKT8iIjp0LmZvcm1hdE1lc3NhZ2UoWC5ub1Blcm1pc3Npb25zKX19LHtrZXk6Il9fZ2V0RGVsZXRlSXRlbVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldERlbGV0ZUl0ZW1Ub29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXREZWxldGVJdGVtVG9vbHRpcF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGVsZXRlSXRlbVRvb2x0aXBfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldERlbGV0ZUl0ZW1Ub29sdGlwX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsRi5jYW5EZWxldGVMYXVuY2gpKHRoaXMucHJvcHMuYWNjb3VudFJvbGUsdGhpcy5wcm9wcy5wcm9qZWN0Um9sZSx0aGlzLnByb3BzLnVzZXJJZD09PXRoaXMucHJvcHMubGF1bmNoLm93bmVyKT90aGlzLmlzSW5Qcm9ncmVzcygpP3RoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFgubGF1bmNoSW5Qcm9ncmVzcyk6IiI6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2UoWC5ub3RZb3VyTGF1bmNoKX19LHtrZXk6Il9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pc0luUHJvZ3Jlc3NfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2lzSW5Qcm9ncmVzc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXNJblByb2dyZXNzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19pc0luUHJvZ3Jlc3NfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5sYXVuY2guc3RhdHVzPT09SS5JTl9QUk9HUkVTUy50b1VwcGVyQ2FzZSgpfX0se2tleToiX19leHBvcnRBc1BERl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZXhwb3J0QXNQREZfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2V4cG9ydEFzUERGX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19leHBvcnRBc1BERl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZXhwb3J0QXNQREZfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9uRXhwb3J0TGF1bmNoKCJwZGYiKSx0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQody5MQVVOQ0hFU19QQUdFX0VWRU5UUy5DTElDS19FWFBPUlRfUERGKX19LHtrZXk6Il9fZXhwb3J0QXNYTFNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2V4cG9ydEFzWExTX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19leHBvcnRBc1hMU19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZXhwb3J0QXNYTFNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2V4cG9ydEFzWExTX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkV4cG9ydExhdW5jaCgieGxzIiksdGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KHcuTEFVTkNIRVNfUEFHRV9FVkVOVFMuQ0xJQ0tfRVhQT1JUX1hMUyl9fSx7a2V5OiJfX2V4cG9ydEFzSFRNTF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZXhwb3J0QXNIVE1MX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19leHBvcnRBc0hUTUxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2V4cG9ydEFzSFRNTF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZXhwb3J0QXNIVE1MX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkV4cG9ydExhdW5jaCgiaHRtbCIpLHRoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh3LkxBVU5DSEVTX1BBR0VfRVZFTlRTLkNMSUNLX0VYUE9SVF9IVE1MKX19LHtrZXk6Il9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZU91dHNpZGVDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlT3V0c2lkZUNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVPdXRzaWRlQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pY29uJiYhdGhpcy5pY29uLmNvbnRhaW5zKGUudGFyZ2V0KSYmdGhpcy5zdGF0ZS5tZW51U2hvd24mJnRoaXMuc2V0U3RhdGUoe21lbnVTaG93bjohMX0pfX0se2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX190b2dnbGVNZW51X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7bWVudVNob3duOiF0aGlzLnN0YXRlLm1lbnVTaG93bn0pLHRoaXMuc3RhdGUuZGlzYWJsZUV2ZW50VHJhY2t8fCh0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQody5MQVVOQ0hFU19QQUdFX0VWRU5UUy5DTElDS19IQU1CVVJHRVJfTUVOVSksdGhpcy5zZXRTdGF0ZSh7ZGlzYWJsZUV2ZW50VHJhY2s6ITB9KSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmludGwscj10LnByb2plY3RSb2xlLG89dC5hY2NvdW50Um9sZSxzPXQubGF1bmNoLGk9dC5jdXN0b21Qcm9wcyxhPXQudHJhY2tpbmc7cmV0dXJuIEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiaGFtYnVyZ2VyIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6ZnVuY3Rpb24odCl7ZS5pY29uPXR9LGNsYXNzTmFtZTpLKCJoYW1idXJnZXItaWNvbiIpLG9uQ2xpY2s6dGhpcy50b2dnbGVNZW51fSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOksoImhhbWJ1cmdlci1pY29uLXBhcnQiKX0pLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiaGFtYnVyZ2VyLWljb24tcGFydCIpfSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpLKCJoYW1idXJnZXItaWNvbi1wYXJ0Iil9KSksQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpLKCJoYW1idXJnZXItbWVudSIse3Nob3duOnRoaXMuc3RhdGUubWVudVNob3dufSl9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiaGFtYnVyZ2VyLW1lbnUtYWN0aW9ucyIpfSxyIT09ay5DVVNUT01FUiYmQy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQS5GcmFnbWVudCxudWxsLCJERUZBVUxUIj09PXMubW9kZT9DLmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLkhhbWJ1cmdlck1lbnVJdGVtLHt0aXRsZTp0aGlzLmdldE1vdmVUb0RlYnVnVG9vbHRpcCgpLHRleHQ6bi5mb3JtYXRNZXNzYWdlKFgudG9EZWJ1ZyksZGlzYWJsZWQ6ISgwLEYuY2FuTW92ZVRvRGVidWcpKG8scix0aGlzLnByb3BzLnVzZXJJZD09PXRoaXMucHJvcHMubGF1bmNoLm93bmVyKSxvbkNsaWNrOmZ1bmN0aW9uKCl7YS50cmFja0V2ZW50KHcuTEFVTkNIRVNfUEFHRV9FVkVOVFMuQ0xJQ0tfTU9WRV9UT19ERUJVR19MQVVOQ0hfTUVOVSksaS5vbk1vdmUocyl9fSk6Qy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRy5IYW1idXJnZXJNZW51SXRlbSx7dGV4dDpuLmZvcm1hdE1lc3NhZ2UoWC50b0FsbExhdW5jaGVzKSx0aXRsZTp0aGlzLmdldE1vdmVUb0RlYnVnVG9vbHRpcCgpLGRpc2FibGVkOiEoMCxGLmNhbk1vdmVUb0RlYnVnKShvLHIsdGhpcy5wcm9wcy51c2VySWQ9PT10aGlzLnByb3BzLmxhdW5jaC5vd25lciksb25DbGljazpmdW5jdGlvbigpe2kub25Nb3ZlKHMpfX0pKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChHLkhhbWJ1cmdlck1lbnVJdGVtLHt0ZXh0Om4uZm9ybWF0TWVzc2FnZShYLmZvcmNlRmluaXNoKSx0aXRsZTp0aGlzLmdldEZvcmNlRmluaXNoVG9vbHRpcCgpLGRpc2FibGVkOiEoMCxGLmNhbkZvcmNlRmluaXNoTGF1bmNoKShvLHIsdGhpcy5wcm9wcy51c2VySWQ9PT10aGlzLnByb3BzLmxhdW5jaC5vd25lcil8fCF0aGlzLmlzSW5Qcm9ncmVzcygpLG9uQ2xpY2s6ZnVuY3Rpb24oKXthLnRyYWNrRXZlbnQody5MQVVOQ0hFU19QQUdFX0VWRU5UUy5DTElDS19GT1JDRV9GSU5JU0hfTEFVTkNIX01FTlUpLGkub25Gb3JjZUZpbmlzaChzKX19KSwiREVGQVVMVCI9PT1zLm1vZGUmJkMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEcuSGFtYnVyZ2VyTWVudUl0ZW0se3RleHQ6bi5mb3JtYXRNZXNzYWdlKFguYW5hbHlzaXMpLG9uQ2xpY2s6ZnVuY3Rpb24oKXthLnRyYWNrRXZlbnQody5MQVVOQ0hFU19QQUdFX0VWRU5UUy5DTElDS19BTkFMWVNJU19MQVVOQ0hfTUVOVSksaS5vbkFuYWx5c2lzKHMpfX0pLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEcuSGFtYnVyZ2VyTWVudUl0ZW0se3RleHQ6bi5mb3JtYXRNZXNzYWdlKFguZGVsZXRlKSxkaXNhYmxlZDohKDAsRi5jYW5EZWxldGVMYXVuY2gpKG8scix0aGlzLnByb3BzLnVzZXJJZD09PXRoaXMucHJvcHMubGF1bmNoLm93bmVyKXx8dGhpcy5pc0luUHJvZ3Jlc3MoKSxvbkNsaWNrOmZ1bmN0aW9uKCl7YS50cmFja0V2ZW50KHcuTEFVTkNIRVNfUEFHRV9FVkVOVFMuQ0xJQ0tfREVMRVRFX0xBVU5DSF9NRU5VKSxpLm9uRGVsZXRlSXRlbShzKX0sdGl0bGU6dGhpcy5nZXREZWxldGVJdGVtVG9vbHRpcCgpfSkpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiZXhwb3J0LWJsb2NrIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiZXhwb3J0LWxhYmVsIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRm9ybWF0dGVkTWVzc2FnZSx7aWQ6IkhhbWJ1cmdlci5leHBvcnQiLGRlZmF1bHRNZXNzYWdlOiJFeHBvcnQ6In0pKSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOksoImV4cG9ydC1idXR0b25zIil9LEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiZXhwb3J0LWJ1dHRvbiIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkdob3N0QnV0dG9uLHt0aW55OiEwLG9uQ2xpY2s6dGhpcy5leHBvcnRBc1BERixkaXNhYmxlZDp0aGlzLmlzSW5Qcm9ncmVzcygpfSwiUERGIikpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiZXhwb3J0LWJ1dHRvbiIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkdob3N0QnV0dG9uLHt0aW55OiEwLG9uQ2xpY2s6dGhpcy5leHBvcnRBc1hMUyxkaXNhYmxlZDp0aGlzLmlzSW5Qcm9ncmVzcygpfSwiWExTIikpLEMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6SygiZXhwb3J0LWJ1dHRvbiIpfSxDLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNLkdob3N0QnV0dG9uLHt0aW55OiEwLG9uQ2xpY2s6dGhpcy5leHBvcnRBc0hUTUwsZGlzYWJsZWQ6dGhpcy5pc0luUHJvZ3Jlc3MoKX0sIkhUTUwiKSkpKSkpfX1dKSx0fShBLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6UC5pbnRsU2hhcGUuaXNSZXF1aXJlZCx1c2VySWQ6SC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHByb2plY3RSb2xlOkguZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvbkFjdGlvbjpILmRlZmF1bHQuZnVuYyxsYXVuY2g6SC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHByb2plY3RJZDpILmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsY3VzdG9tUHJvcHM6SC5kZWZhdWx0Lm9iamVjdCxhY2NvdW50Um9sZTpILmRlZmF1bHQuc3RyaW5nLHRyYWNraW5nOkguZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpILmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6SC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxhLmRlZmF1bHRQcm9wcz17b25BY3Rpb246ZnVuY3Rpb24oKXt9LGN1c3RvbVByb3BzOnt9LGFjY291bnRSb2xlOiIifSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCQsIkhhbWJ1cmdlciIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihLLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihYLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlci5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2hhbWJ1cmdlci9oYW1idXJnZXIuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2hhbWJ1cmdlcjoiaGFtYnVyZ2VyX19oYW1idXJnZXJfX18xV0V5cyIsImhhbWJ1cmdlci1pY29uIjoiaGFtYnVyZ2VyX19oYW1idXJnZXItaWNvbl9fXzNYLUdGIiwiaGFtYnVyZ2VyLWljb24tcGFydCI6ImhhbWJ1cmdlcl9faGFtYnVyZ2VyLWljb24tcGFydF9fXzJSbFFNIiwiaGFtYnVyZ2VyLW1lbnUiOiJoYW1idXJnZXJfX2hhbWJ1cmdlci1tZW51X19fbVUybmciLHNob3duOiJoYW1idXJnZXJfX3Nob3duX19fMWhBaXoiLCJoYW1idXJnZXItbWVudS1hY3Rpb25zIjoiaGFtYnVyZ2VyX19oYW1idXJnZXItbWVudS1hY3Rpb25zX19fMTUxR3giLCJleHBvcnQtYmxvY2siOiJoYW1idXJnZXJfX2V4cG9ydC1ibG9ja19fX0NDU0kyIiwiZXhwb3J0LWxhYmVsIjoiaGFtYnVyZ2VyX19leHBvcnQtbGFiZWxfX18xVjlRSyIsImV4cG9ydC1idXR0b25zIjoiaGFtYnVyZ2VyX19leHBvcnQtYnV0dG9uc19fXzNXTlpBIiwiZXhwb3J0LWJ1dHRvbiI6ImhhbWJ1cmdlcl9fZXhwb3J0LWJ1dHRvbl9fXzJBT1ZJIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9oYW1idXJnZXIvaGFtYnVyZ2VyTWVudUl0ZW0vaGFtYnVyZ2VyTWVudUl0ZW0uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IYW1idXJnZXJNZW51SXRlbT12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2hhbWJ1cmdlci9oYW1idXJnZXJNZW51SXRlbS9oYW1idXJnZXJNZW51SXRlbS5zY3NzIiksdT1yKGwpLGM9cy5kZWZhdWx0LmJpbmQodS5kZWZhdWx0KSxkPXQuSGFtYnVyZ2VyTWVudUl0ZW09ZnVuY3Rpb24odCl7dmFyIG49dC5vbkNsaWNrLHI9dC50ZXh0LG89dC50aXRsZSxzPXQuZGlzYWJsZWQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmMoImhhbWJ1cmdlci1tZW51LWl0ZW0iLHtkaXNhYmxlZDpzfSksdGl0bGU6byxvbkNsaWNrOnM/dm9pZCAwOm59LHIpfTtkLnByb3BUeXBlcz17b25DbGljazphLmRlZmF1bHQuZnVuYyx0ZXh0OmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCx0aXRsZTphLmRlZmF1bHQuc3RyaW5nLGRpc2FibGVkOmEuZGVmYXVsdC5ib29sfSxkLmRlZmF1bHRQcm9wcz17b25DbGljazpmdW5jdGlvbigpe30sdGl0bGU6IiIsZGlzYWJsZWQ6ITF9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihkLCJIYW1idXJnZXJNZW51SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlck1lbnVJdGVtL2hhbWJ1cmdlck1lbnVJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGMsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9oYW1idXJnZXIvaGFtYnVyZ2VyTWVudUl0ZW0vaGFtYnVyZ2VyTWVudUl0ZW0uanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlck1lbnVJdGVtL2hhbWJ1cmdlck1lbnVJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiaGFtYnVyZ2VyLW1lbnUtaXRlbSI6ImhhbWJ1cmdlck1lbnVJdGVtX19oYW1idXJnZXItbWVudS1pdGVtX19fY1p2LTkiLGRpc2FibGVkOiJoYW1idXJnZXJNZW51SXRlbV9fZGlzYWJsZWRfX18xLTN2WiJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlck1lbnVJdGVtL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9oYW1idXJnZXIvaGFtYnVyZ2VyTWVudUl0ZW0vaGFtYnVyZ2VyTWVudUl0ZW0uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkhhbWJ1cmdlck1lbnVJdGVtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5IYW1idXJnZXJNZW51SXRlbX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2hhbWJ1cmdlci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2hhbWJ1cmdlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSGFtYnVyZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5IYW1idXJnZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJMYXVuY2hTdWl0ZUdyaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkxhdW5jaFN1aXRlR3JpZH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGF1bmNoU3VpdGVHcmlkPXZvaWQgMDt2YXIgbyxzLGksYT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxsPXIoYSksdT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGY9cihwKSxtPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLGg9cihtKSxnPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikseT1yKEUpLHY9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxUPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLEE9cihUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxPPXIoQyksUz1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2RlZmVjdFR5cGVzLmpzIiksUj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaFN0YXR1c2VzLmpzIiksaj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLHg9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2dyaWQvaW5kZXguanMiKSxMPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hYnNSZWxUaW1lL2luZGV4LmpzIiksRD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2l0ZW1JbmZvL2luZGV4LmpzIiksdz1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2NvbnN0YW50cy5qcyIpLE09bigiLi9zcmMvY29tcG9uZW50cy9tYWluL25vSXRlbU1lc3NhZ2UvaW5kZXguanMiKSxrPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvc3RhdGlzdGljcy5qcyIpLEk9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvaGFtYnVyZ2VyL2luZGV4LmpzIiksUD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9leGVjdXRpb25TdGF0aXN0aWNzL2luZGV4LmpzIiksTj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9kZWZlY3RTdGF0aXN0aWNzL2luZGV4LmpzIiksSD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC90b0ludmVzdGlnYXRlU3RhdGlzdGljcy9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLnNjc3MiKSxCPXIoRiksVT1BLmRlZmF1bHQuYmluZChCLmRlZmF1bHQpLEc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj0oMCxiLmRlZmF1bHQpKGUsWyJjbGFzc05hbWUiXSk7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgiaGFtYnVyZ2VyLWNvbCIsdCl9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEkuSGFtYnVyZ2VyLHtsYXVuY2g6bi52YWx1ZSxjdXN0b21Qcm9wczpuLmN1c3RvbVByb3BzfSkpfTtHLnByb3BUeXBlcz17Y2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIHo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj0oMCxiLmRlZmF1bHQpKGUsWyJjbGFzc05hbWUiXSk7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgibmFtZS1jb2wiLHQpfSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChELkl0ZW1JbmZvLG4pKX07ei5wcm9wVHlwZXM9e2NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciBWPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49KDAsYi5kZWZhdWx0KShlLFsiY2xhc3NOYW1lIl0pO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoInN0YXJ0LXRpbWUtY29sIix0KX0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTC5BYnNSZWxUaW1lLHtzdGFydFRpbWU6bi52YWx1ZS5zdGFydFRpbWV9KSl9O1YucHJvcFR5cGVzPXtjbGFzc05hbWU6Ty5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkfTt2YXIgVz1mdW5jdGlvbihlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPSgwLGIuZGVmYXVsdCkoZSxbImNsYXNzTmFtZSJdKTtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpVKCJ0b3RhbC1jb2wiLHQpfSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkV4ZWN1dGlvblN0YXRpc3RpY3Mse2l0ZW1JZDpuLnZhbHVlLmlkLHRpdGxlOm4udGl0bGUsdmFsdWU6bi52YWx1ZS5zdGF0aXN0aWNzLmV4ZWN1dGlvbnMmJm4udmFsdWUuc3RhdGlzdGljcy5leGVjdXRpb25zLnRvdGFsLGJvbGQ6ITAsc3RhdHVzZXM6W1IuUEFTU0VELnRvVXBwZXJDYXNlKCksUi5GQUlMRUQudG9VcHBlckNhc2UoKSxSLlNLSVBQRUQudG9VcHBlckNhc2UoKSxSLklOVEVSUlVQVEVELnRvVXBwZXJDYXNlKCldfSkpfTtXLnByb3BUeXBlcz17Y2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIFk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj0oMCxiLmRlZmF1bHQpKGUsWyJjbGFzc05hbWUiXSk7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgicGFzc2VkLWNvbCIsdCl9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFAuRXhlY3V0aW9uU3RhdGlzdGljcyx7aXRlbUlkOm4udmFsdWUuaWQsdGl0bGU6bi50aXRsZSx2YWx1ZTpuLnZhbHVlLnN0YXRpc3RpY3MuZXhlY3V0aW9ucyYmbi52YWx1ZS5zdGF0aXN0aWNzLmV4ZWN1dGlvbnMucGFzc2VkLHN0YXR1c2VzOltSLlBBU1NFRC50b1VwcGVyQ2FzZSgpXX0pKX07WS5wcm9wVHlwZXM9e2NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciBxPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49KDAsYi5kZWZhdWx0KShlLFsiY2xhc3NOYW1lIl0pO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImZhaWxlZC1jb2wiLHQpfSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkV4ZWN1dGlvblN0YXRpc3RpY3Mse2l0ZW1JZDpuLnZhbHVlLmlkLHRpdGxlOm4udGl0bGUsdmFsdWU6bi52YWx1ZS5zdGF0aXN0aWNzLmV4ZWN1dGlvbnMmJm4udmFsdWUuc3RhdGlzdGljcy5leGVjdXRpb25zLmZhaWxlZCxzdGF0dXNlczpbUi5GQUlMRUQudG9VcHBlckNhc2UoKSxSLklOVEVSUlVQVEVELnRvVXBwZXJDYXNlKCldfSkpfTtxLnByb3BUeXBlcz17Y2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIEs9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj0oMCxiLmRlZmF1bHQpKGUsWyJjbGFzc05hbWUiXSk7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgic2tpcHBlZC1jb2wiLHQpfSx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChQLkV4ZWN1dGlvblN0YXRpc3RpY3Mse2l0ZW1JZDpuLnZhbHVlLmlkLHRpdGxlOm4udGl0bGUsdmFsdWU6bi52YWx1ZS5zdGF0aXN0aWNzLmV4ZWN1dGlvbnMmJm4udmFsdWUuc3RhdGlzdGljcy5leGVjdXRpb25zLnNraXBwZWQsc3RhdHVzZXM6W1IuU0tJUFBFRC50b1VwcGVyQ2FzZSgpXX0pKX07Sy5wcm9wVHlwZXM9e2NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciBYPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49KDAsYi5kZWZhdWx0KShlLFsiY2xhc3NOYW1lIl0pO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoInBiLWNvbCIsdCl9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uRGVmZWN0U3RhdGlzdGljcyx7dHlwZTpTLlBST0RVQ1RfQlVHLGN1c3RvbVByb3BzOm4uY3VzdG9tUHJvcHMsZGF0YTpuLnZhbHVlLnN0YXRpc3RpY3MuZGVmZWN0cyYmbi52YWx1ZS5zdGF0aXN0aWNzLmRlZmVjdHMucHJvZHVjdF9idWcsaXRlbUlkOm4udmFsdWUuaWQsZXZlbnRJbmZvOm4uY3VzdG9tUHJvcHMuZXZlbnRzLlBCX0NIQVJULHRvb2x0aXBFdmVudEluZm86bi5jdXN0b21Qcm9wcy5ldmVudHMuUEJfVE9PTFRJUH0pKX07WC5wcm9wVHlwZXM9e2NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciAkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49KDAsYi5kZWZhdWx0KShlLFsiY2xhc3NOYW1lIl0pO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoImFiLWNvbCIsdCl9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uRGVmZWN0U3RhdGlzdGljcyx7dHlwZTpTLkFVVE9NQVRJT05fQlVHLGN1c3RvbVByb3BzOm4uY3VzdG9tUHJvcHMsZGF0YTpuLnZhbHVlLnN0YXRpc3RpY3MuZGVmZWN0cyYmbi52YWx1ZS5zdGF0aXN0aWNzLmRlZmVjdHMuYXV0b21hdGlvbl9idWcsaXRlbUlkOm4udmFsdWUuaWQsZXZlbnRJbmZvOm4uY3VzdG9tUHJvcHMuZXZlbnRzLkFCX0NIQVJULHRvb2x0aXBFdmVudEluZm86bi5jdXN0b21Qcm9wcy5ldmVudHMuQUJfVE9PTFRJUH0pKX07JC5wcm9wVHlwZXM9e2NsYXNzTmFtZTpPLmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWR9O3ZhciBRPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xhc3NOYW1lLG49KDAsYi5kZWZhdWx0KShlLFsiY2xhc3NOYW1lIl0pO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlUoInNpLWNvbCIsdCl9LHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE4uRGVmZWN0U3RhdGlzdGljcyx7dHlwZTpTLlNZU1RFTV9JU1NVRSxjdXN0b21Qcm9wczpuLmN1c3RvbVByb3BzLGRhdGE6bi52YWx1ZS5zdGF0aXN0aWNzLmRlZmVjdHMmJm4udmFsdWUuc3RhdGlzdGljcy5kZWZlY3RzLnN5c3RlbV9pc3N1ZSxpdGVtSWQ6bi52YWx1ZS5pZCxldmVudEluZm86bi5jdXN0b21Qcm9wcy5ldmVudHMuU0lfQ0hBUlQsdG9vbHRpcEV2ZW50SW5mbzpuLmN1c3RvbVByb3BzLmV2ZW50cy5TSV9UT09MVElQfSkpfTtRLnByb3BUeXBlcz17Y2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIEo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj0oMCxiLmRlZmF1bHQpKGUsWyJjbGFzc05hbWUiXSk7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6VSgidGktY29sIix0KX0seS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5Ub0ludmVzdGlnYXRlU3RhdGlzdGljcyx7Y3VzdG9tUHJvcHM6bi5jdXN0b21Qcm9wcyx2YWx1ZTpuLnZhbHVlLnN0YXRpc3RpY3MuZGVmZWN0cyYmbi52YWx1ZS5zdGF0aXN0aWNzLmRlZmVjdHMudG9faW52ZXN0aWdhdGUsaXRlbUlkOm4udmFsdWUuaWQsZXZlbnRJbmZvOm4uY3VzdG9tUHJvcHMuZXZlbnRzLlRJX0NIQVJUfSkpfTtKLnByb3BUeXBlcz17Y2xhc3NOYW1lOk8uZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZH07dmFyIFo9dC5MYXVuY2hTdWl0ZUdyaWQ9KDAsdi5pbmplY3RJbnRsKSgoaT1zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGYuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsbC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmhhbmRsZUF0dHJpYnV0ZUZpbHRlckNsaWNrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19oYW5kbGVBdHRyaWJ1dGVGaWx0ZXJDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5DT0xVTU5TPXIuZ2V0Q29sdW1ucygpLG89biwoMCxmLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsaC5kZWZhdWx0KSh0LGUpLCgwLF8uZGVmYXVsdCkodCxbe2tleToiX19oYW5kbGVBdHRyaWJ1dGVGaWx0ZXJDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQXR0cmlidXRlRmlsdGVyQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJnZXRDb2x1bW5zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXtjb21wb25lbnQ6RyxjdXN0b21Qcm9wczp7b25EZWxldGVJdGVtOnRoaXMucHJvcHMub25EZWxldGVJdGVtLG9uTW92ZTp0aGlzLnByb3BzLm9uTW92ZSxvbkZvcmNlRmluaXNoOnRoaXMucHJvcHMub25Gb3JjZUZpbmlzaCxvbkFuYWx5c2lzOnRoaXMucHJvcHMub25BbmFseXNpc319LHQ9dGhpcy5wcm9wcy5ldmVudHMsbj1be2lkOncuRU5USVRZX05BTUUsdGl0bGU6e2Z1bGw6Im5hbWUiLHNob3J0OiJuYW1lIn0sbWF4SGVpZ2h0OjE3MCxjb21wb25lbnQ6eixzb3J0YWJsZTohMCxjdXN0b21Qcm9wczp7b25FZGl0SXRlbTp0aGlzLnByb3BzLm9uRWRpdEl0ZW0sb25DbGlja0F0dHJpYnV0ZTp0aGlzLmhhbmRsZUF0dHJpYnV0ZUZpbHRlckNsaWNrLGV2ZW50czp0fSxzb3J0aW5nRXZlbnRJbmZvOnQuTkFNRV9TT1JUSU5HfSx7aWQ6dy5FTlRJVFlfU1RBUlRfVElNRSx0aXRsZTp7ZnVsbDoic3RhcnQgdGltZSIsc2hvcnQ6InN0YXJ0In0sY29tcG9uZW50OlYsc29ydGFibGU6ITAsd2l0aEZpbHRlcjohMCxmaWx0ZXJFdmVudEluZm86dC5TVEFSVF9USU1FX0ZJTFRFUixzb3J0aW5nRXZlbnRJbmZvOnQuU1RBUlRfVElNRV9TT1JUSU5HfSx7aWQ6ay5TVEFUU19UT1RBTCx0aXRsZTp7ZnVsbDoidG90YWwiLHNob3J0OiJ0dGwifSxjb21wb25lbnQ6Vyxzb3J0YWJsZTohMCx3aXRoRmlsdGVyOiEwLGZpbHRlckV2ZW50SW5mbzp0LlRPVEFMX0ZJTFRFUixzb3J0aW5nRXZlbnRJbmZvOnQuVE9UQUxfU09SVElOR30se2lkOmsuU1RBVFNfUEFTU0VELHRpdGxlOntmdWxsOiJwYXNzZWQiLHNob3J0OiJwcyJ9LGNvbXBvbmVudDpZLHNvcnRhYmxlOiEwLHdpdGhGaWx0ZXI6ITAsZmlsdGVyRXZlbnRJbmZvOnQuUEFTU0VEX0ZJTFRFUixzb3J0aW5nRXZlbnRJbmZvOnQuUEFTU0VEX1NPUlRJTkd9LHtpZDprLlNUQVRTX0ZBSUxFRCx0aXRsZTp7ZnVsbDoiZmFpbGVkIixzaG9ydDoiZmwifSxjb21wb25lbnQ6cSxzb3J0YWJsZTohMCx3aXRoRmlsdGVyOiEwLGZpbHRlckV2ZW50SW5mbzp0LkZBSUxFRF9GSUxURVIsc29ydGluZ0V2ZW50SW5mbzp0LkZBSUxFRF9TT1JUSU5HfSx7aWQ6ay5TVEFUU19TS0lQUEVELHRpdGxlOntmdWxsOiJza2lwcGVkIixzaG9ydDoic2twIn0sY29tcG9uZW50Okssc29ydGFibGU6ITAsd2l0aEZpbHRlcjohMCxmaWx0ZXJFdmVudEluZm86dC5TS0lQUEVEX0ZJTFRFUixzb3J0aW5nRXZlbnRJbmZvOnQuU0tJUFBFRF9TT1JUSU5HfSx7aWQ6ay5TVEFUU19QQl9UT1RBTCx0aXRsZTp7ZnVsbDoicHJvZHVjdCBidWciLHNob3J0OiJwcm9kdWN0IGJ1ZyJ9LGNvbXBvbmVudDpYLGN1c3RvbVByb3BzOnthYmJyZXZpYXRpb246InBiIixldmVudHM6dH0sc29ydGFibGU6ITAsd2l0aEZpbHRlcjohMCxmaWx0ZXJFdmVudEluZm86dC5QQl9GSUxURVIsc29ydGluZ0V2ZW50SW5mbzp0LlBCX1NPUlRJTkd9LHtpZDprLlNUQVRTX0FCX1RPVEFMLHRpdGxlOntmdWxsOiJhdXRvIGJ1ZyIsc2hvcnQ6ImF1dG8gYnVnIn0sY29tcG9uZW50OiQsY3VzdG9tUHJvcHM6e2FiYnJldmlhdGlvbjoiYWIiLGV2ZW50czp0fSxzb3J0YWJsZTohMCx3aXRoRmlsdGVyOiEwLGZpbHRlckV2ZW50SW5mbzp0LkFCX0ZJTFRFUixzb3J0aW5nRXZlbnRJbmZvOnQuQUJfU09SVElOR30se2lkOmsuU1RBVFNfU0lfVE9UQUwsdGl0bGU6e2Z1bGw6InN5c3RlbSBpc3N1ZSIsc2hvcnQ6InN5c3RlbSBpc3N1ZSJ9LGNvbXBvbmVudDpRLGN1c3RvbVByb3BzOnthYmJyZXZpYXRpb246InNpIixldmVudHM6dH0sc29ydGFibGU6ITAsd2l0aEZpbHRlcjohMCxmaWx0ZXJFdmVudEluZm86dC5TSV9GSUxURVIsc29ydGluZ0V2ZW50SW5mbzp0LlNJX1NPUlRJTkd9LHtpZDprLlNUQVRTX1RJX1RPVEFMLHRpdGxlOntmdWxsOiJ0byBpbnZlc3RpZ2F0ZSIsc2hvcnQ6InRvIGludmVzdCJ9LGNvbXBvbmVudDpKLGN1c3RvbVByb3BzOnthYmJyZXZpYXRpb246InRpIixldmVudHM6dH0sc29ydGFibGU6ITAsd2l0aEZpbHRlcjohMCxmaWx0ZXJFdmVudEluZm86dC5USV9GSUxURVIsc29ydGluZ0V2ZW50SW5mbzp0LlRJX1NPUlRJTkd9XTtyZXR1cm4gdGhpcy5wcm9wcy53aXRoSGFtYnVyZ2VyJiZuLnNwbGljZSgwLDAsZSksbn19LHtrZXk6Il9faGFuZGxlQXR0cmlidXRlRmlsdGVyQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2hhbmRsZUF0dHJpYnV0ZUZpbHRlckNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19oYW5kbGVBdHRyaWJ1dGVGaWx0ZXJDbGlja19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faGFuZGxlQXR0cmlidXRlRmlsdGVyQ2xpY2tfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZUF0dHJpYnV0ZUZpbHRlckNsaWNrX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMub25GaWx0ZXJDbGljayh7aWQ6dy5FTlRJVFlfQVRUUklCVVRFX0tFWVMsdmFsdWU6e2ZpbHRlcmluZ0ZpZWxkOncuRU5USVRZX0FUVFJJQlVURV9LRVlTLGNvbmRpdGlvbjp3LkNPTkRJVElPTl9IQVMsdmFsdWU6ZS5rZXl8fCIifX0pLHRoaXMucHJvcHMub25GaWx0ZXJDbGljayh7aWQ6dy5FTlRJVFlfQVRUUklCVVRFX1ZBTFVFUyx2YWx1ZTp7ZmlsdGVyaW5nRmllbGQ6dy5FTlRJVFlfQVRUUklCVVRFX1ZBTFVFUyxjb25kaXRpb246dy5DT05ESVRJT05fSEFTLHZhbHVlOmUudmFsdWV8fCIifX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUuZGF0YSxyPWUub25DaGFuZ2VTb3J0aW5nLG89ZS5zb3J0aW5nQ29sdW1uLHM9ZS5zb3J0aW5nRGlyZWN0aW9uLGk9ZS5zZWxlY3RlZEl0ZW1zLGE9ZS5vbkl0ZW1TZWxlY3QsbD1lLm9uQWxsSXRlbXNTZWxlY3QsdT1lLmxvYWRpbmcsYz1lLm9uRmlsdGVyQ2xpY2s7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEUuRnJhZ21lbnQsbnVsbCx5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LkdyaWQse2NvbHVtbnM6dGhpcy5DT0xVTU5TLGRhdGE6bixzb3J0aW5nQ29sdW1uOm8sc29ydGluZ0RpcmVjdGlvbjpzLG9uQ2hhbmdlU29ydGluZzpyLHNlbGVjdGVkSXRlbXM6aSxzZWxlY3RhYmxlOiEwLG9uVG9nZ2xlU2VsZWN0aW9uOmEsb25Ub2dnbGVTZWxlY3RBbGw6bCxsb2FkaW5nOnUsb25GaWx0ZXJDbGljazpjfSksIW4ubGVuZ3RoJiYhdSYmeS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTS5Ob0l0ZW1NZXNzYWdlLHttZXNzYWdlOnQoai5DT01NT05fTE9DQUxFX0tFWVMuTk9fUkVTVUxUUyl9KSl9fV0pLHR9KEUuUHVyZUNvbXBvbmVudCkscy5wcm9wVHlwZXM9e2ludGw6di5pbnRsU2hhcGUuaXNSZXF1aXJlZCxkYXRhOk8uZGVmYXVsdC5hcnJheSxzb3J0aW5nQ29sdW1uOk8uZGVmYXVsdC5zdHJpbmcsc29ydGluZ0RpcmVjdGlvbjpPLmRlZmF1bHQuc3RyaW5nLG9uQ2hhbmdlU29ydGluZzpPLmRlZmF1bHQuZnVuYyxvbkRlbGV0ZUl0ZW06Ty5kZWZhdWx0LmZ1bmMsb25Nb3ZlOk8uZGVmYXVsdC5mdW5jLG9uRWRpdEl0ZW06Ty5kZWZhdWx0LmZ1bmMsb25Gb3JjZUZpbmlzaDpPLmRlZmF1bHQuZnVuYyxzZWxlY3RlZEl0ZW1zOk8uZGVmYXVsdC5hcnJheU9mKE8uZGVmYXVsdC5vYmplY3QpLG9uSXRlbVNlbGVjdDpPLmRlZmF1bHQuZnVuYyxvbkFsbEl0ZW1zU2VsZWN0Ok8uZGVmYXVsdC5mdW5jLHdpdGhIYW1idXJnZXI6Ty5kZWZhdWx0LmJvb2wsbG9hZGluZzpPLmRlZmF1bHQuYm9vbCxvbkZpbHRlckNsaWNrOk8uZGVmYXVsdC5mdW5jLGV2ZW50czpPLmRlZmF1bHQub2JqZWN0LG9uQW5hbHlzaXM6Ty5kZWZhdWx0LmZ1bmN9LHMuZGVmYXVsdFByb3BzPXtkYXRhOltdLHNvcnRpbmdDb2x1bW46bnVsbCxzb3J0aW5nRGlyZWN0aW9uOm51bGwsb25DaGFuZ2VTb3J0aW5nOmZ1bmN0aW9uKCl7fSxvbkRlbGV0ZUl0ZW06ZnVuY3Rpb24oKXt9LG9uTW92ZTpmdW5jdGlvbigpe30sb25FZGl0SXRlbTpmdW5jdGlvbigpe30sb25Gb3JjZUZpbmlzaDpmdW5jdGlvbigpe30sc2VsZWN0ZWRJdGVtczpbXSxvbkl0ZW1TZWxlY3Q6ZnVuY3Rpb24oKXt9LG9uQWxsSXRlbXNTZWxlY3Q6ZnVuY3Rpb24oKXt9LHdpdGhIYW1idXJnZXI6ITEsbG9hZGluZzohMSxvbkZpbHRlckNsaWNrOmZ1bmN0aW9uKCl7fSxldmVudHM6e30sb25BbmFseXNpczpmdW5jdGlvbigpe319LG89aSkpfHxvOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihaLCJMYXVuY2hTdWl0ZUdyaWQiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihVLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIkhhbWJ1cmdlckNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHosIk5hbWVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihWLCJTdGFydFRpbWVDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJUb3RhbENvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFksIlBhc3NlZENvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIkZhaWxlZENvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIlNraXBwZWRDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihYLCJQYkNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCQsIkFiQ29sdW1uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC9sYXVuY2hTdWl0ZUdyaWQuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoUSwiU2lDb2x1bW4iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihKLCJUaUNvbHVtbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvbGF1bmNoU3VpdGVHcmlkLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL2xhdW5jaFN1aXRlR3JpZC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImhhbWJ1cmdlci1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX2hhbWJ1cmdlci1jb2xfX18yRW5SUCIsIm5hbWUtY29sIjoibGF1bmNoU3VpdGVHcmlkX19uYW1lLWNvbF9fX19zZnAxIiwic3RhcnQtdGltZS1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX3N0YXJ0LXRpbWUtY29sX19fMm5FYkUiLCJ0b3RhbC1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX3RvdGFsLWNvbF9fXzF6VDh6IiwicGFzc2VkLWNvbCI6ImxhdW5jaFN1aXRlR3JpZF9fcGFzc2VkLWNvbF9fXzJFWk5DIiwiZmFpbGVkLWNvbCI6ImxhdW5jaFN1aXRlR3JpZF9fZmFpbGVkLWNvbF9fXzFMS09iIiwic2tpcHBlZC1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX3NraXBwZWQtY29sX19fMXp2YXAiLCJwYi1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX3BiLWNvbF9fXy1RLTVmIiwiYWItY29sIjoibGF1bmNoU3VpdGVHcmlkX19hYi1jb2xfX18xZTNPNyIsInNpLWNvbCI6ImxhdW5jaFN1aXRlR3JpZF9fc2ktY29sX19fMXNlbEQiLCJ0aS1jb2wiOiJsYXVuY2hTdWl0ZUdyaWRfX3RpLWNvbF9fXzMzTzcyIiwic2VsZWN0LWNvbCI6ImxhdW5jaFN1aXRlR3JpZF9fc2VsZWN0LWNvbF9fXzNJdHBuIn19LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2xhdW5jaFN1aXRlR3JpZC90b0ludmVzdGlnYXRlU3RhdGlzdGljcy9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvdG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3MvdG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3MuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlRvSW52ZXN0aWdhdGVTdGF0aXN0aWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ub0ludmVzdGlnYXRlU3RhdGlzdGljc319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3M9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2RlZmVjdExpbmsvaW5kZXguanMiKSxkPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzLnNjc3MiKSxfPXIoZCkscD1hLmRlZmF1bHQuYmluZChfLmRlZmF1bHQpLGY9dC5Ub0ludmVzdGlnYXRlU3RhdGlzdGljcz1mdW5jdGlvbih0KXt2YXIgbj10LnZhbHVlLHI9dC5jdXN0b21Qcm9wcyxvPXQuaXRlbUlkLGk9dC5ldmVudEluZm8sYT10Lm93bkxpbmtQYXJhbXM7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOnAoInRvLWludmVzdGlnYXRlLXN0YXRpc3RpY3MiKX0sZS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOnAoInRpdGxlIil9LGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTpwKCJjaXJjbGUiKX0pLHIuYWJicmV2aWF0aW9uKSwhIW4udG90YWwmJmUuY3JlYXRlRWxlbWVudChjLkRlZmVjdExpbmsse2l0ZW1JZDpvLGRlZmVjdHM6KDAscy5kZWZhdWx0KShuKSxjbGFzc05hbWU6cCgidmFsdWUiKSxldmVudEluZm86aSxvd25MaW5rUGFyYW1zOmF9LG4udG90YWwpKX07Zi5wcm9wVHlwZXM9e3ZhbHVlOnUuZGVmYXVsdC5vYmplY3QsY3VzdG9tUHJvcHM6dS5kZWZhdWx0Lm9iamVjdCxpdGVtSWQ6dS5kZWZhdWx0Lm9uZU9mVHlwZShbdS5kZWZhdWx0LnN0cmluZyx1LmRlZmF1bHQubnVtYmVyXSkuaXNSZXF1aXJlZCxldmVudEluZm86dS5kZWZhdWx0Lm9iamVjdCxvd25MaW5rUGFyYW1zOnUuZGVmYXVsdC5zaGFwZSh7cGF5bG9hZDp1LmRlZmF1bHQub2JqZWN0LHBhZ2U6dS5kZWZhdWx0LnN0cmluZ30pfSxmLmRlZmF1bHRQcm9wcz17Y3VzdG9tUHJvcHM6e30sdmFsdWU6e30sZXZlbnRJbmZvOnt9LG93bkxpbmtQYXJhbXM6e319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihmLCJUb0ludmVzdGlnYXRlU3RhdGlzdGljcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9sYXVuY2hTdWl0ZUdyaWQvdG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3MvdG9JbnZlc3RpZ2F0ZVN0YXRpc3RpY3MuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIocCwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbGF1bmNoU3VpdGVHcmlkL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzL3RvSW52ZXN0aWdhdGVTdGF0aXN0aWNzLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsidG8taW52ZXN0aWdhdGUtc3RhdGlzdGljcyI6InRvSW52ZXN0aWdhdGVTdGF0aXN0aWNzX190by1pbnZlc3RpZ2F0ZS1zdGF0aXN0aWNzX19fM1lraVUiLHRpdGxlOiJ0b0ludmVzdGlnYXRlU3RhdGlzdGljc19fdGl0bGVfX18zRW8wcSIsY2lyY2xlOiJ0b0ludmVzdGlnYXRlU3RhdGlzdGljc19fY2lyY2xlX19fM1pxd3QiLHZhbHVlOiJ0b0ludmVzdGlnYXRlU3RhdGlzdGljc19fdmFsdWVfX18ybkFLayJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZGVsZXRlSXRlbXNNb2RhbC9kZWxldGVJdGVtc01vZGFsLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWxldGVJdGVtc01vZGFsPXZvaWQgMDt2YXIgcyxpLGEsbCx1LGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksZD1vKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIikscD1vKF8pLGY9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksbT1vKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxnPW8oaCksYj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxFPW8oYikseT1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksdj1vKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxBPW8oVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLE89byhDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksUj1vKFMpLGo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhY2tpbmcvYnVpbGQvaW5kZXguanMiKSx4PW8oaiksTD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksRD1vKEwpLHc9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxNPW8odyksaz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxJPW8oayksUD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLE49bigiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLEY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZGVsZXRlSXRlbXNNb2RhbC9kZWxldGVJdGVtc01vZGFsLnNjc3MiKSxCPW8oRiksVT17RGVsZXRlSXRlbXNNb2RhbDp7ZGlzcGxheU5hbWU6IkRlbGV0ZUl0ZW1zTW9kYWwifX0sRz0oMCxSLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9kZWxldGVJdGVtc01vZGFsL2RlbGV0ZUl0ZW1zTW9kYWwuanN4Iixjb21wb25lbnRzOlUsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSksej0oMCxBLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9kZWxldGVJdGVtc01vZGFsL2RlbGV0ZUl0ZW1zTW9kYWwuanN4Iixjb21wb25lbnRzOlUsbG9jYWxzOltdLGltcG9ydHM6W08uZGVmYXVsdCx2LmRlZmF1bHRdfSksVj1JLmRlZmF1bHQuYmluZChCLmRlZmF1bHQpLFc9dC5EZWxldGVJdGVtc01vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRyh6KHQsZSksZSl9fSgiRGVsZXRlSXRlbXNNb2RhbCIpKChzPSgwLE4ud2l0aE1vZGFsKSgiZGVsZXRlSXRlbXNNb2RhbCIpLGk9KDAseC5kZWZhdWx0KSgpLHMoYT0oMCxQLmluamVjdEludGwpKGE9aSgodT1sPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGcuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLmNvbmZpcm1BbmRDbG9zZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fY29uZmlybUFuZENsb3NlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsZy5kZWZhdWx0KShyLG8pfXJldHVybigwLEUuZGVmYXVsdCkodCxlKSwoMCxtLmRlZmF1bHQpKHQsW3trZXk6Il9fY29uZmlybUFuZENsb3NlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb25maXJtQW5kQ2xvc2VfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NvbmZpcm1BbmRDbG9zZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29uZmlybUFuZENsb3NlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jb25maXJtQW5kQ2xvc2VfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbmZpcm1BbmRDbG9zZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY29uZmlybUFuZENsb3NlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLmRhdGEuZXZlbnRzSW5mby5kZWxldGVCdG4pLHRoaXMucHJvcHMuZGF0YS5vbkNvbmZpcm0odGhpcy5wcm9wcy5kYXRhLml0ZW1zKSxlKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pbnRsLHQ9dGhpcy5wcm9wcy5kYXRhLG49dC5oZWFkZXIsbz10Lm1haW5Db250ZW50LHM9dC5ldmVudHNJbmZvLGk9e3RleHQ6ZS5mb3JtYXRNZXNzYWdlKEguQ09NTU9OX0xPQ0FMRV9LRVlTLkRFTEVURSksZGFuZ2VyOiEwLG9uQ2xpY2s6dGhpcy5jb25maXJtQW5kQ2xvc2UsZXZlbnRJbmZvOnMuY2FuY2VsQnRufSxhPXt0ZXh0OmUuZm9ybWF0TWVzc2FnZShILkNPTU1PTl9MT0NBTEVfS0VZUy5DQU5DRUwpLGV2ZW50SW5mbzpzLmNhbmNlbEJ0bn07cmV0dXJuIHIuY3JlYXRlRWxlbWVudChOLk1vZGFsTGF5b3V0LHt0aXRsZTpuLG9rQnV0dG9uOmksY2FuY2VsQnV0dG9uOmEsY2xvc2VJY29uRXZlbnRJbmZvOnMuY2xvc2VJY29ufSxyLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6VigibWVzc2FnZSIpfSwoMCxNLmRlZmF1bHQpKG8pKSl9fV0pLHR9KEMuQ29tcG9uZW50KSxsLnByb3BUeXBlcz17aW50bDpQLmludGxTaGFwZS5pc1JlcXVpcmVkLGRhdGE6RC5kZWZhdWx0LnNoYXBlKHtvbkNvbmZpcm06RC5kZWZhdWx0LmZ1bmMsaXRlbXM6RC5kZWZhdWx0LmFycmF5LGhlYWRlcjpELmRlZmF1bHQuc3RyaW5nLG1haW5Db250ZW50OkQuZGVmYXVsdC5zdHJpbmcsbmFtZXNwYWNlOkQuZGVmYXVsdC5zdHJpbmcsY3VycmVudExhdW5jaDpELmRlZmF1bHQub2JqZWN0LGV2ZW50c0luZm86RC5kZWZhdWx0Lm9iamVjdH0pLHRyYWNraW5nOkQuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpELmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6RC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxsLmRlZmF1bHRQcm9wcz17ZGF0YTp7aXRlbXM6W10sb25Db25maXJtOmZ1bmN0aW9uKCl7fSxldmVudHNJbmZvOnt9fX0sYT11KSl8fGEpfHxhKXx8YSkpOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihXLCJEZWxldGVJdGVtc01vZGFsIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9kZWxldGVJdGVtc01vZGFsL2RlbGV0ZUl0ZW1zTW9kYWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoViwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2RlbGV0ZUl0ZW1zTW9kYWwvZGVsZXRlSXRlbXNNb2RhbC5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpLG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZGVsZXRlSXRlbXNNb2RhbC9kZWxldGVJdGVtc01vZGFsLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXttZXNzYWdlOiJkZWxldGVJdGVtc01vZGFsX19tZXNzYWdlX19fMzN4MmgifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2RlbGV0ZUl0ZW1zTW9kYWwvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2RlbGV0ZUl0ZW1zTW9kYWwvZGVsZXRlSXRlbXNNb2RhbC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRGVsZXRlSXRlbXNNb2RhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRGVsZXRlSXRlbXNNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2VkaXRJdGVtTW9kYWwvZWRpdEl0ZW1Nb2RhbC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRWRpdEl0ZW1Nb2RhbD12b2lkIDA7dmFyIHMsaSxhLGwsdSxjLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1vKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1vKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1vKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPW8oZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PW8oRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1vKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPW8oQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9byhPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1vKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9byh4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9byhEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1mb3JtL2VzL2luZGV4LmpzIiksST1uKCIuL3NyYy9jb250cm9sbGVycy9ub3RpZmljYXRpb24vaW5kZXguanMiKSxQPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3VzZXIvaW5kZXguanMiKSxOPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9zZWN0aW9uSGVhZGVyL2luZGV4LmpzIiksSD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vbW9kYWwvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxpemF0aW9uLmpzIiksQj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xhdW5jaEl0ZW1UeXBlcy5qcyIpLFU9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRQcm92aWRlci5qc3giKSxHPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9tYXJrZG93bi9pbmRleC5qcyIpLHo9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiKSxWPW4oIi4vc3JjL2NvbW1vbi91dGlscy9pbmRleC5qcyIpLFc9bigiLi9zcmMvY29tbW9uL3VybHMuanMiKSxZPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hdHRyaWJ1dGVMaXN0L2luZGV4LmpzIikscT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9lZGl0SXRlbU1vZGFsL2VkaXRJdGVtTW9kYWwuc2NzcyIpLEs9byhxKSxYPXtFZGl0SXRlbU1vZGFsOntkaXNwbGF5TmFtZToiRWRpdEl0ZW1Nb2RhbCJ9fSwkPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2VkaXRJdGVtTW9kYWwvZWRpdEl0ZW1Nb2RhbC5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxRPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2VkaXRJdGVtTW9kYWwvZWRpdEl0ZW1Nb2RhbC5qc3giLGNvbXBvbmVudHM6WCxsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxKPXcuZGVmYXVsdC5iaW5kKEsuZGVmYXVsdCksWj0oMCxNLmRlZmluZU1lc3NhZ2VzKSh7YXR0cmlidXRlc0xhYmVsOntpZDoiRWRpdEl0ZW1Nb2RhbC5hdHRyaWJ1dGVzTGFiZWwiLGRlZmF1bHRNZXNzYWdlOiJBdHRyaWJ1dGVzIn0sZGVzY3JpcHRpb25QbGFjZWhvbGRlcjp7aWQ6IkVkaXRJdGVtTW9kYWwuZGVzY3JpcHRpb25QbGFjZWhvbGRlciIsZGVmYXVsdE1lc3NhZ2U6IkVudGVyIHt0eXBlfSBkZXNjcmlwdGlvbiJ9LG1vZGFsSGVhZGVyOntpZDoiRWRpdEl0ZW1Nb2RhbC5tb2RhbEhlYWRlciIsZGVmYXVsdE1lc3NhZ2U6IkVkaXQge3R5cGV9In0sbGF1bmNoOntpZDoiRWRpdEl0ZW1Nb2RhbC5sYXVuY2giLGRlZmF1bHRNZXNzYWdlOiJsYXVuY2gifSxpdGVtOntpZDoiRWRpdEl0ZW1Nb2RhbC5pdGVtIixkZWZhdWx0TWVzc2FnZToiaXRlbSJ9LGNvbnRlbnRUaXRsZTp7aWQ6IkVkaXRJdGVtTW9kYWwuY29udGVudFRpdGxlIixkZWZhdWx0TWVzc2FnZToie3R5cGV9IGRldGFpbHMifSxsYXVuY2hVcGRhdGVTdWNjZXNzOntpZDoiRWRpdEl0ZW1Nb2RhbC5sYXVuY2hVcGRhdGVTdWNjZXNzIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIGhhcyBiZWVuIHVwZGF0ZWQifSxpdGVtVXBkYXRlU3VjY2Vzczp7aWQ6IkVkaXRJdGVtTW9kYWwuaXRlbVVwZGF0ZVN1Y2Nlc3MiLGRlZmF1bHRNZXNzYWdlOiJDb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISJ9fSksZWU9dC5FZGl0SXRlbU1vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gJChRKHQsZSksZSl9fSgiRWRpdEl0ZW1Nb2RhbCIpKChzPSgwLEgud2l0aE1vZGFsKSgiZWRpdEl0ZW1Nb2RhbCIpLGk9KDAsay5yZWR1eEZvcm0pKHtmb3JtOiJlZGl0SXRlbUZvcm0ifSksYT0oMCx6LmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntjdXJyZW50UHJvamVjdDooMCxQLmFjdGl2ZVByb2plY3RTZWxlY3RvcikoZSl9fSx7c2hvd05vdGlmaWNhdGlvbjpJLnNob3dOb3RpZmljYXRpb259KSxzKGw9KDAsTS5pbmplY3RJbnRsKShsPWkobD1hKChjPXU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG4scixvOygwLGYuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHMpLGE9MDthPHM7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9KDAsYi5kZWZhdWx0KSh0aGlzLChlPXQuX19wcm90b19ffHwoMCxfLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuZ2V0Q2xvc2VDb25maXJtYXRpb25Db25maWc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2dldENsb3NlQ29uZmlybWF0aW9uQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnVwZGF0ZUl0ZW1BbmRDbG9zZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX191cGRhdGVJdGVtQW5kQ2xvc2VNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci51cGRhdGVJdGVtPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX191cGRhdGVJdGVtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fdXBkYXRlSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlSXRlbV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlSXRlbUFuZENsb3NlTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUl0ZW1BbmRDbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDbG9zZUNvbmZpcm1hdGlvbkNvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Q2xvc2VDb25maXJtYXRpb25Db25maWdfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLmluaXRpYWxpemUoe2Rlc2NyaXB0aW9uOnRoaXMucHJvcHMuZGF0YS5pdGVtLmRlc2NyaXB0aW9ufHwiIixhdHRyaWJ1dGVzOnRoaXMucHJvcHMuZGF0YS5pdGVtLmF0dHJpYnV0ZXN8fFtdfSl9fSx7a2V5OiJfX2dldENsb3NlQ29uZmlybWF0aW9uQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRDbG9zZUNvbmZpcm1hdGlvbkNvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0Q2xvc2VDb25maXJtYXRpb25Db25maWdfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldENsb3NlQ29uZmlybWF0aW9uQ29uZmlnX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19nZXRDbG9zZUNvbmZpcm1hdGlvbkNvbmZpZ19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmRpcnR5P3tjb25maXJtYXRpb25XYXJuaW5nOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKEYuQ09NTU9OX0xPQ0FMRV9LRVlTLkNMT1NFX01PREFMX1dBUk5JTkcpfTpudWxsfX0se2tleToiX191cGRhdGVJdGVtQW5kQ2xvc2VNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdXBkYXRlSXRlbUFuZENsb3NlTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUl0ZW1BbmRDbG9zZU1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX191cGRhdGVJdGVtQW5kQ2xvc2VNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdXBkYXRlSXRlbUFuZENsb3NlTW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24obil7dC5wcm9wcy5kaXJ0eSYmdC51cGRhdGVJdGVtKG4pLGUoKX19fSx7a2V5OiJfX3VwZGF0ZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3VwZGF0ZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3VwZGF0ZUl0ZW1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMucHJvcHMscj1uLmludGwuZm9ybWF0TWVzc2FnZSxvPW4uY3VycmVudFByb2plY3Qscz1uLmRhdGEsaT1zLml0ZW0sYT1zLnR5cGUsbD1zLmZldGNoRnVuYzsoMCxWLmZldGNoKShXLlVSTFMubGF1bmNoZXNJdGVtc1VwZGF0ZShvLGkuaWQsYSkse21ldGhvZDoicHV0IixkYXRhOmV9KS50aGVuKGZ1bmN0aW9uKCl7dC5wcm9wcy5zaG93Tm90aWZpY2F0aW9uKHttZXNzYWdlOnIoWlthKyJVcGRhdGVTdWNjZXNzIl0pLHR5cGU6SS5OT1RJRklDQVRJT05fVFlQRVMuU1VDQ0VTU30pLGwoKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5pbnRsLmZvcm1hdE1lc3NhZ2Usbz10LmRhdGEscz1vLml0ZW0saT1vLnR5cGUsYT10LmhhbmRsZVN1Ym1pdCxsPXt0ZXh0Om4oRi5DT01NT05fTE9DQUxFX0tFWVMuU0FWRSksb25DbGljazpmdW5jdGlvbih0KXthKGUudXBkYXRlSXRlbUFuZENsb3NlTW9kYWwodCkpKCl9fSx1PXt0ZXh0Om4oRi5DT01NT05fTE9DQUxFX0tFWVMuQ0FOQ0VMKX07cmV0dXJuIHIuY3JlYXRlRWxlbWVudChILk1vZGFsTGF5b3V0LHt0aXRsZTpuKFoubW9kYWxIZWFkZXIse3R5cGU6bihaW2ldKX0pLG9rQnV0dG9uOmwsY2FuY2VsQnV0dG9uOnUsY2xvc2VDb25maXJtYXRpb246dGhpcy5nZXRDbG9zZUNvbmZpcm1hdGlvbkNvbmZpZygpfSxyLmNyZWF0ZUVsZW1lbnQoImZvcm0iLG51bGwsci5jcmVhdGVFbGVtZW50KEguTW9kYWxGaWVsZCxudWxsLHIuY3JlYXRlRWxlbWVudChOLlNlY3Rpb25IZWFkZXIse3RleHQ6bihaLmNvbnRlbnRUaXRsZSx7dHlwZTpuKFpbaV0pfSl9KSksci5jcmVhdGVFbGVtZW50KEguTW9kYWxGaWVsZCxudWxsLHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkooIml0ZW0tbmFtZSIpfSxzLm5hbWUsaT09PUIuTEFVTkNIX0lURU1fVFlQRVMubGF1bmNoJiYiICMiK3MubnVtYmVyKSksci5jcmVhdGVFbGVtZW50KEguTW9kYWxGaWVsZCx7bGFiZWw6bihaLmF0dHJpYnV0ZXNMYWJlbCl9LHIuY3JlYXRlRWxlbWVudChVLkZpZWxkUHJvdmlkZXIse25hbWU6ImF0dHJpYnV0ZXMifSxyLmNyZWF0ZUVsZW1lbnQoWS5BdHRyaWJ1dGVMaXN0RmllbGQsbnVsbCkpKSxyLmNyZWF0ZUVsZW1lbnQoSC5Nb2RhbEZpZWxkLG51bGwsci5jcmVhdGVFbGVtZW50KFUuRmllbGRQcm92aWRlcix7bmFtZToiZGVzY3JpcHRpb24ifSxyLmNyZWF0ZUVsZW1lbnQoRy5NYXJrZG93bkVkaXRvcix7cGxhY2Vob2xkZXI6bihaLmRlc2NyaXB0aW9uUGxhY2Vob2xkZXIse3R5cGU6bihaW2ldKX0pfSkpKSkpfX1dKSx0fShPLkNvbXBvbmVudCksdS5wcm9wVHlwZXM9e2RhdGE6TC5kZWZhdWx0LnNoYXBlKHtpdGVtOkwuZGVmYXVsdC5vYmplY3QsdHlwZTpMLmRlZmF1bHQuc3RyaW5nLGZldGNoRnVuYzpMLmRlZmF1bHQuZnVuY30pLmlzUmVxdWlyZWQsaW5pdGlhbGl6ZTpMLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGRpcnR5OkwuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsaGFuZGxlU3VibWl0OkwuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsY3VycmVudFByb2plY3Q6TC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLHNob3dOb3RpZmljYXRpb246TC5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxpbnRsOk0uaW50bFNoYXBlLmlzUmVxdWlyZWR9LGw9YykpfHxsKXx8bCl8fGwpfHxsKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGVlLCJFZGl0SXRlbU1vZGFsIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9lZGl0SXRlbU1vZGFsL2VkaXRJdGVtTW9kYWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoSiwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbW9kYWxzL2VkaXRJdGVtTW9kYWwvZWRpdEl0ZW1Nb2RhbC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihaLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZWRpdEl0ZW1Nb2RhbC9lZGl0SXRlbU1vZGFsLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL21vZGFscy9lZGl0SXRlbU1vZGFsL2VkaXRJdGVtTW9kYWwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJpdGVtLW5hbWUiOiJlZGl0SXRlbU1vZGFsX19pdGVtLW5hbWVfX18zM19QdCJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZWRpdEl0ZW1Nb2RhbC9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9tb2RhbHMvZWRpdEl0ZW1Nb2RhbC9lZGl0SXRlbU1vZGFsLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJFZGl0SXRlbU1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5FZGl0SXRlbU1vZGFsfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9uYW1lTGluay9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9uYW1lTGluay9uYW1lTGluay5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTmFtZUxpbmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5hbWVMaW5rfX0pfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9uYW1lTGluay9uYW1lTGluay5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5hbWVMaW5rPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9yZWR1eC1maXJzdC1yb3V0ZXItbGluay9kaXN0L2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9zcmMvY29udHJvbGxlcnMvdGVzdEl0ZW0vaW5kZXguanMiKSxfPSgwLGwuY29ubmVjdCkoZnVuY3Rpb24oZSx0KXtyZXR1cm57bGluazooMCxkLm5hbWVMaW5rU2VsZWN0b3IpKGUsdCl9fSkoZnVuY3Rpb24odCl7dmFyIG49dC5jbGFzc05hbWUscj0odC5wYWdlLHQubGluayksbz0odC5pdGVtSWQsdC5jaGlsZHJlbiksaT0odC51bmlxdWVJZCx0LnRlc3RJdGVtSWRzLHQub3duTGlua1BhcmFtcywoMCxhLmRlZmF1bHQpKHQsWyJjbGFzc05hbWUiLCJwYWdlIiwibGluayIsIml0ZW1JZCIsImNoaWxkcmVuIiwidW5pcXVlSWQiLCJ0ZXN0SXRlbUlkcyIsIm93bkxpbmtQYXJhbXMiXSkpO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoYy5kZWZhdWx0LCgwLHMuZGVmYXVsdCkoe3RvOnIsY2xhc3NOYW1lOm59LGkpLG8pfSk7dC5OYW1lTGluaz1fOyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJl9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKF8sIk5hbWVMaW5rIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL25hbWVMaW5rL25hbWVMaW5rLmpzeCIpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9ub1Jlc3VsdHNGb3JGaWx0ZXIvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbm9SZXN1bHRzRm9yRmlsdGVyL25vUmVzdWx0c0ZvckZpbHRlci5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm9SZXN1bHRzRm9yRmlsdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ob1Jlc3VsdHNGb3JGaWx0ZXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL25vUmVzdWx0c0ZvckZpbHRlci9ub1Jlc3VsdHNGb3JGaWx0ZXIuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ob1Jlc3VsdHNGb3JGaWx0ZXI9dm9pZCAwO3ZhciBvPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksdT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxjPXIodSksZD1uKCIuL3NyYy9jb21tb24vaW1nL2Vycm9yLWlubGluZS5zdmciKSxfPXIoZCkscD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL25vUmVzdWx0c0ZvckZpbHRlci9ub1Jlc3VsdHNGb3JGaWx0ZXIuc2NzcyIpLGY9cihwKSxtPWMuZGVmYXVsdC5iaW5kKGYuZGVmYXVsdCksaD0oMCxsLmRlZmluZU1lc3NhZ2VzKSh7Y2hlY2tRdWVyeTp7aWQ6Ik5vUmVzdWx0c0ZvckZpbHRlci5jaGVja1F1ZXJ5IixkZWZhdWx0TWVzc2FnZToiQ2hlY2sgeW91ciBxdWVyeSBhbmQgdHJ5IGFnYWluIn19KSxnPXQuTm9SZXN1bHRzRm9yRmlsdGVyPSgwLGwuaW5qZWN0SW50bCkoZnVuY3Rpb24odCl7dmFyIG49dC5pbnRsLmZvcm1hdE1lc3NhZ2Uscj10LmZpbHRlcixvPXQubm90Rm91bmRNZXNzYWdlO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTptKCJuby1yZXN1bHRzLWZvci1maWx0ZXIiKX0sZS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOm0oIm5vLXJlc3VsdHMtZm9yLWZpbHRlci10ZXh0Iil9LGUuY3JlYXRlRWxlbWVudCgiaSIse2NsYXNzTmFtZTptKCJuby1yZXN1bHRzLWZvci1maWx0ZXItaWNvbiIpfSwoMCxzLmRlZmF1bHQpKF8uZGVmYXVsdCkpLCgwLHMuZGVmYXVsdCkobihvLHtmaWx0ZXI6IjxzcGFuIGNsYXNzTmFtZT0iK20oIm5vLXJlc3VsdHMtZm9yLWZpbHRlci1leHByZXNzaW9uIikrIj4iK3IrIjwvc3Bhbj4ifSkpKSxlLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6bSgibm8tcmVzdWx0cy1mb3ItZmlsdGVyLWhpbnQiKX0sbihoLmNoZWNrUXVlcnkpKSl9KTtnLnByb3BUeXBlcz17ZmlsdGVyOmEuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxub3RGb3VuZE1lc3NhZ2U6YS5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiYoX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoZywiTm9SZXN1bHRzRm9yRmlsdGVyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL25vUmVzdWx0c0ZvckZpbHRlci9ub1Jlc3VsdHNGb3JGaWx0ZXIuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIobSwiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbm9SZXN1bHRzRm9yRmlsdGVyL25vUmVzdWx0c0ZvckZpbHRlci5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihoLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9ub1Jlc3VsdHNGb3JGaWx0ZXIvbm9SZXN1bHRzRm9yRmlsdGVyLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vbm9SZXN1bHRzRm9yRmlsdGVyL25vUmVzdWx0c0ZvckZpbHRlci5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Im5vLXJlc3VsdHMtZm9yLWZpbHRlciI6Im5vUmVzdWx0c0ZvckZpbHRlcl9fbm8tcmVzdWx0cy1mb3ItZmlsdGVyX19fMUpmSjUiLCJuby1yZXN1bHRzLWZvci1maWx0ZXItaWNvbiI6Im5vUmVzdWx0c0ZvckZpbHRlcl9fbm8tcmVzdWx0cy1mb3ItZmlsdGVyLWljb25fX19xclhYXyIsIm5vLXJlc3VsdHMtZm9yLWZpbHRlci10ZXh0Ijoibm9SZXN1bHRzRm9yRmlsdGVyX19uby1yZXN1bHRzLWZvci1maWx0ZXItdGV4dF9fXzFGSEJYIiwibm8tcmVzdWx0cy1mb3ItZmlsdGVyLWV4cHJlc3Npb24iOiJub1Jlc3VsdHNGb3JGaWx0ZXJfX25vLXJlc3VsdHMtZm9yLWZpbHRlci1leHByZXNzaW9uX19fMjdBOW4iLCJuby1yZXN1bHRzLWZvci1maWx0ZXItaGludCI6Im5vUmVzdWx0c0ZvckZpbHRlcl9fbm8tcmVzdWx0cy1mb3ItZmlsdGVyLWhpbnRfX191a0EyMSJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3NlbGVjdGVkSXRlbXMvc2VsZWN0ZWRJdGVtcy5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2VsZWN0ZWRJdGVtcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuU2VsZWN0ZWRJdGVtc319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vc2VsZWN0ZWRJdGVtLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJTZWxlY3RlZEl0ZW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNlbGVjdGVkSXRlbX19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vc2VsZWN0ZWRJdGVtLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2VsZWN0ZWRJdGVtPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx1PXIobCksYz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLGQ9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvaHRtbC1yZWFjdC1wYXJzZXIvaW5kZXguanMiKSxmPXIocCksbT1uKCIuL3NyYy9jb21tb24vaW1nL2Nyb3NzLWljb24taW5saW5lLnN2ZyIpLGg9cihtKSxnPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi90b29sdGlwcy90b29sdGlwL2luZGV4LmpzIiksYj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3NlbGVjdGVkSXRlbXMvc2VsZWN0ZWRJdGVtL3NlbGVjdGVkSXRlbS5zY3NzIiksRT1yKGIpLHk9Xy5kZWZhdWx0LmJpbmQoRS5kZWZhdWx0KSx2PSgwLGMuZGVmaW5lTWVzc2FnZXMpKHtzZWxlY3RNb3JlSXRlbXM6e2lkOiJMYXVuY2hlc1BhZ2Uuc2VsZWN0TW9yZUl0ZW1zIixkZWZhdWx0TWVzc2FnZToiWW91IG11c3Qgc2VsZWN0IG1vcmUgdGhhbiBvbmUgaXRlbSJ9LG5vdFlvdXJPd25MYXVuY2g6e2lkOiJMYXVuY2hlc1BhZ2Uubm90WW91ck93bkxhdW5jaCIsZGVmYXVsdE1lc3NhZ2U6IllvdSBhcmUgbm90IGEgbGF1bmNoIG93bmVyIn0sbGF1bmNoTm90SW5Qcm9ncmVzczp7aWQ6IkxhdW5jaGVzUGFnZS5sYXVuY2hOb3RJblByb2dyZXNzIixkZWZhdWx0TWVzc2FnZToiTGF1bmNoIHNob3VsZCBub3QgYmUgaW4gdGhlIHN0YXR1cyBJbiBwcm9ncmVzcyEifSxsYXVuY2hGaW5pc2hlZDp7aWQ6IkxhdW5jaGVzUGFnZS5sYXVuY2hGaW5pc2hlZCIsZGVmYXVsdE1lc3NhZ2U6IkxhdW5jaCBpcyBmaW5pc2hlZCJ9LGxhdW5jaElzUHJvY2Vzc2luZzp7aWQ6IkxhdW5jaGVzUGFnZS5sYXVuY2hJc1Byb2Nlc3NpbmciLGRlZmF1bHRNZXNzYWdlOiJMYXVuY2ggc2hvdWxkIG5vdCBiZSBwcm9jZXNzaW5nIGJ5IEF1dG8gYW5hbHlzaXMhIn0sbm9EZWZlY3RUeXBlOntpZDoiTGF1bmNoZXNQYWdlLm5vRGVmZWN0VHlwZSIsZGVmYXVsdE1lc3NhZ2U6Ikl0ZW0gZG9lcyBub3QgaGF2ZSBkZWZlY3QgdHlwZSJ9LG5vRGVmZWN0VHlwZVRvTGlua0lzc3VlOntpZDoiTGF1bmNoZXNQYWdlLm5vRGVmZWN0VHlwZVRvTGlua0lzc3VlIixkZWZhdWx0TWVzc2FnZToiWW91IGNhbid0IGxpbmsgaXNzdWUgaWYgaXRlbSBoYXMgbm8gZGVmZWN0IHR5cGUifSxhbHJlYWR5SWdub3JlZDp7aWQ6IkxhdW5jaGVzUGFnZS5hbHJlYWR5SWdub3JlZCIsZGVmYXVsdE1lc3NhZ2U6Ikl0ZW0gYWxyZWFkeSBpZ25vcmVkIGluIEF1dG8tQW5hbHlzaXMifSxhbHJlYWR5SW5jbHVkZWQ6e2lkOiJMYXVuY2hlc1BhZ2UuYWxyZWFkeUluY2x1ZGVkIixkZWZhdWx0TWVzc2FnZToiSXRlbSBhbHJlYWR5IGluY2x1ZGVkIGluIEF1dG8tQW5hbHlzaXMifSxub0xpbmtlZElzc3VlOntpZDoiTGF1bmNoZXNQYWdlLm5vTGlua2VkSXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJJdGVtIGRvZXNuJ3QgaGF2ZSBhIGxpbmtlZCBpc3N1ZSJ9LG5vSXNzdWU6e2lkOiJMYXVuY2hlc1BhZ2Uubm9Jc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6Ikl0ZW0gaGFzIG5vdCBpc3N1ZSBmb3IgZWRpdCJ9fSksVD0oMCxjLmluamVjdEludGwpKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW50bCxyPXQuZXJyb3I7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG4uZm9ybWF0TWVzc2FnZSh2W3JdKSl9KTtULnByb3BUeXBlcz17ZXJyb3I6dS5kZWZhdWx0LnN0cmluZ30sVC5kZWZhdWx0UHJvcHM9e2Vycm9yOiIifTt2YXIgQT1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UrIiAjIit0OmV9LEM9ZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lLHI9dC5udW1iZXIsbz10LmVycm9yLHM9dC5vblVuc2VsZWN0O3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp5KCJzZWxlY3RlZC1pdGVtIix7ZXJyb3I6ISFvfSl9LGUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZTp5KCJuYW1lIil9LEEobixyKSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eSgiY3Jvc3MtaWNvbiIpLG9uQ2xpY2s6c30sKDAsZi5kZWZhdWx0KShoLmRlZmF1bHQpKSl9O0MucHJvcFR5cGVzPXtjbGFzc05hbWU6dS5kZWZhdWx0LnN0cmluZyxuYW1lOnUuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxvblVuc2VsZWN0OnUuZGVmYXVsdC5mdW5jLGVycm9yOnUuZGVmYXVsdC5zdHJpbmcsbnVtYmVyOnUuZGVmYXVsdC5udW1iZXJ9LEMuZGVmYXVsdFByb3BzPXtjbGFzc05hbWU6IiIsb25VbnNlbGVjdDpmdW5jdGlvbigpe30sZXJyb3I6bnVsbCxudW1iZXI6bnVsbH07dmFyIE89KDAsZy53aXRoVG9vbHRpcCkoe1Rvb2x0aXBDb21wb25lbnQ6VCxkYXRhOnt3aWR0aDoyMDAsbGVmdE9mZnNldDoxMCxub0Fycm93OiEwfX0pKEMpLFM9ZnVuY3Rpb24odCl7dmFyIG49dC5lcnJvcixyPSgwLGEuZGVmYXVsdCkodCxbImVycm9yIl0pO3JldHVybiBuP2UuY3JlYXRlRWxlbWVudChPLCgwLHMuZGVmYXVsdCkoe2Vycm9yOm59LHIpKTplLmNyZWF0ZUVsZW1lbnQoQyxyKX07dC5TZWxlY3RlZEl0ZW09UyxTLnByb3BUeXBlcz17Y2xhc3NOYW1lOnUuZGVmYXVsdC5zdHJpbmcsbmFtZTp1LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsb25VbnNlbGVjdDp1LmRlZmF1bHQuZnVuYyxlcnJvcjp1LmRlZmF1bHQuc3RyaW5nLG51bWJlcjp1LmRlZmF1bHQubnVtYmVyfSxTLmRlZmF1bHRQcm9wcz17Y2xhc3NOYW1lOiIiLG9uVW5zZWxlY3Q6ZnVuY3Rpb24oKXt9LGVycm9yOm51bGwsbnVtYmVyOm51bGx9OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihTLCJTZWxlY3RlZEl0ZW0iLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vc2VsZWN0ZWRJdGVtLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHksImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3NlbGVjdGVkSXRlbXMvc2VsZWN0ZWRJdGVtL3NlbGVjdGVkSXRlbS5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3Rlcih2LCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbS9zZWxlY3RlZEl0ZW0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoVCwiVG9vbHRpcENvbXBvbmVudCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbS9zZWxlY3RlZEl0ZW0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQSwiZm9ybWF0SXRlbSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbS9zZWxlY3RlZEl0ZW0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoQywiU2VsZWN0ZWRJdGVtQm9keSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbS9zZWxlY3RlZEl0ZW0uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoTywiU2VsZWN0ZWRJdGVtV2l0aFRvb2x0aXAiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vc2VsZWN0ZWRJdGVtLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc2VsZWN0ZWRJdGVtcy9zZWxlY3RlZEl0ZW0vc2VsZWN0ZWRJdGVtLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsic2VsZWN0ZWQtaXRlbSI6InNlbGVjdGVkSXRlbV9fc2VsZWN0ZWQtaXRlbV9fX05VR01GIixuYW1lOiJzZWxlY3RlZEl0ZW1fX25hbWVfX18yVkZDcCIsImNyb3NzLWljb24iOiJzZWxlY3RlZEl0ZW1fX2Nyb3NzLWljb25fX19PVWt1WCIsZXJyb3I6InNlbGVjdGVkSXRlbV9fZXJyb3JfX19JUnFpMiJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbXMuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWxlY3RlZEl0ZW1zPXZvaWQgMDt2YXIgbz1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIikscz1yKG8pLGk9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksYz1yKHUpLGQ9bigiLi9zcmMvY29tbW9uL2ltZy9jcm9zcy1pY29uLWlubGluZS5zdmciKSxfPXIoZCkscD1uKCIuL3NyYy9jb21wb25lbnRzL21haW4vc2Nyb2xsV3JhcHBlci9pbmRleC5qcyIpLGY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbS9pbmRleC5qcyIpLG09bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbXMuc2NzcyIpLGg9cihtKSxnPWEuZGVmYXVsdC5iaW5kKGguZGVmYXVsdCksYj10LlNlbGVjdGVkSXRlbXM9ZnVuY3Rpb24odCl7dmFyIG49dC5zZWxlY3RlZEl0ZW1zLHI9dC5lcnJvcnMsbz10Lm9uQ2xvc2Uscz10Lm9uVW5zZWxlY3Q7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmcoInNlbGVjdGVkLWl0ZW1zIil9LGUuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmcoImhlYWRlciIpfSxlLmNyZWF0ZUVsZW1lbnQobC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNQYWdlLm11bHRpcGxlU2VsZWN0SGVhZGVyIixkZWZhdWx0TWVzc2FnZToiWW91IGNhbiBwZXJmb3JtIGFjdGlvbnMgd2l0aCBzZWxlY3RlZCBpdGVtczoifSksZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygiY2xvc2UtaWNvbiIpLG9uQ2xpY2s6b30sKDAsYy5kZWZhdWx0KShfLmRlZmF1bHQpKSksZS5jcmVhdGVFbGVtZW50KHAuU2Nyb2xsV3JhcHBlcix7YXV0b0hlaWdodDohMCxhdXRvSGVpZ2h0TWF4OjEyMCxoaWRlVHJhY2tzV2hlbk5vdE5lZWRlZDohMH0sZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygibGlzdCIpfSxuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygiaXRlbSIpLGtleTp0LmlkfSxlLmNyZWF0ZUVsZW1lbnQoZi5TZWxlY3RlZEl0ZW0se25hbWU6dC5uYW1lLG51bWJlcjp0Lm51bWJlcixlcnJvcjpyW3QuaWRdLG9uVW5zZWxlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gcyh0KX19KSl9KSkpLG4uc29tZShmdW5jdGlvbihlKXtyZXR1cm4hIXJbZS5pZF19KSYmZS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZygiZXJyb3ItbWVzc2FnZSIpfSxlLmNyZWF0ZUVsZW1lbnQobC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiTGF1bmNoZXNQYWdlLm11bHRpU2VsZWN0RXJyb3IiLGRlZmF1bHRNZXNzYWdlOiJZb3UgY2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIHRvIGludmFsaWQgaXRlbXMifSkpKX07Yi5wcm9wVHlwZXM9e3NlbGVjdGVkSXRlbXM6cy5kZWZhdWx0LmFycmF5T2Yocy5kZWZhdWx0Lm9iamVjdCksb25DbG9zZTpzLmRlZmF1bHQuZnVuYyxvblVuc2VsZWN0OnMuZGVmYXVsdC5mdW5jLGVycm9yczpzLmRlZmF1bHQub2JqZWN0fSxiLmRlZmF1bHRQcm9wcz17c2VsZWN0ZWRJdGVtczpbXSxlcnJvcnM6e30sb25DbG9zZTpmdW5jdGlvbigpe30sb25VbnNlbGVjdDpmdW5jdGlvbigpe319OyFmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgX19SRUFDVF9IT1RfTE9BREVSX18mJihfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihiLCJTZWxlY3RlZEl0ZW1zIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3NlbGVjdGVkSXRlbXMvc2VsZWN0ZWRJdGVtcy5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihnLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbXMuanN4IikpfSgpfSkuY2FsbCh0LG4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIikpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL3NlbGVjdGVkSXRlbXMuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzZWxlY3RlZC1pdGVtcyI6InNlbGVjdGVkSXRlbXNfX3NlbGVjdGVkLWl0ZW1zX19fMVYwdUIiLGhlYWRlcjoic2VsZWN0ZWRJdGVtc19faGVhZGVyX19fMTRtcGMiLGxpc3Q6InNlbGVjdGVkSXRlbXNfX2xpc3RfX18ybzVTcCIsaXRlbToic2VsZWN0ZWRJdGVtc19faXRlbV9fXzJfZy1qIiwiY2xvc2UtaWNvbiI6InNlbGVjdGVkSXRlbXNfX2Nsb3NlLWljb25fX18xaG9aTyIsImVycm9yLW1lc3NhZ2UiOiJzZWxlY3RlZEl0ZW1zX19lcnJvci1tZXNzYWdlX19famxpZ3AifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3RhdGlzdGljc0xpbmsvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3RhdGlzdGljc0xpbmsvc3RhdGlzdGljc0xpbmsuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN0YXRpc3RpY3NMaW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TdGF0aXN0aWNzTGlua319KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3RhdGlzdGljc0xpbmsvc3RhdGlzdGljc0xpbmsuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdGF0aXN0aWNzTGluaz12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxzPXIobyksaT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiKSxhPXIoaSksbD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLHU9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyLWxpbmsvZGlzdC9pbmRleC5qcyIpLGM9cih1KSxkPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Rlc3RJdGVtL2luZGV4LmpzIiksXz0oMCxsLmNvbm5lY3QpKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2xpbms6KDAsZC5zdGF0aXN0aWNzTGlua1NlbGVjdG9yKShlLHQpfX0pKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGluayxyPSh0Lml0ZW1JZCx0LnN0YXRpc3RpY3MsdC5jaGlsZHJlbiksbz0odC5vd25MaW5rUGFyYW1zLCgwLGEuZGVmYXVsdCkodCxbImxpbmsiLCJpdGVtSWQiLCJzdGF0aXN0aWNzIiwiY2hpbGRyZW4iLCJvd25MaW5rUGFyYW1zIl0pKTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KGMuZGVmYXVsdCwoMCxzLmRlZmF1bHQpKHt0bzpufSxvKSxyKX0pO3QuU3RhdGlzdGljc0xpbms9XzshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJTdGF0aXN0aWNzTGluayIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdGF0aXN0aWNzTGluay9zdGF0aXN0aWNzTGluay5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9hY3Rpb25QYW5lbC9hY3Rpb25QYW5lbC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQWN0aW9uUGFuZWw9dm9pZCAwO3ZhciBzLGksYSxsLHUsYz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxkPW8oYyksXz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxwPW8oXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxtPW8oZiksaD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGc9byhoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLEU9byhiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSx2PW8oeSksVD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEE9byhUKSxDPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksTz1vKEMpLFM9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxSPW8oUyksaj1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLHg9byhqKSxMPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxEPW8oTCksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPW8odyksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLEk9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZmlyc3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiKSxQPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksTj1uKCIuL3NyYy9jb250cm9sbGVycy90ZXN0SXRlbS9pbmRleC5qcyIpLEg9bigiLi9zcmMvY29udHJvbGxlcnMvcGFnZXMvaW5kZXguanMiKSxGPW4oIi4vc3JjL2NvbnRyb2xsZXJzL3Byb2plY3QvaW5kZXguanMiKSxCPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9icmVhZGNydW1icy9pbmRleC5qcyIpLFU9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvc3VpdGVzUGFnZUV2ZW50cy5qcyIpLEc9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL2FuYWx5dGljcy9ldmVudHMvaW5kZXguanMiKSx6PW4oIi4vc3JjL2NvbXBvbmVudHMvYnV0dG9ucy9naG9zdEJ1dHRvbi9pbmRleC5qcyIpLFY9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0TWVudUJ1dHRvbi9pbmRleC5qcyIpLFc9bigiLi9zcmMvY29tbW9uL2NvbnN0YW50cy9sYXVuY2hMZXZlbHMuanMiKSxZPW4oIi4vc3JjL2NvbW1vbi9jb25zdGFudHMvbG9jYWxpemF0aW9uLmpzIikscT1uKCIuL3NyYy9jb21tb24vaW1nL3JlZnJlc2gtaW5saW5lLnN2ZyIpLEs9byhxKSxYPW4oIi4vc3JjL2NvbW1vbi9pbWcvaGlzdG9yeS1pbmxpbmUuc3ZnIiksJD1vKFgpLFE9bigiLi9zcmMvY29tbW9uL2ltZy9iaW4taWNvbi1pbmxpbmUuc3ZnIiksSj1vKFEpLFo9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLnNjc3MiKSxlZT1vKFopLHRlPXtBY3Rpb25QYW5lbDp7ZGlzcGxheU5hbWU6IkFjdGlvblBhbmVsIn19LG5lPSgwLFIuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9hY3Rpb25QYW5lbC9hY3Rpb25QYW5lbC5qc3giLGNvbXBvbmVudHM6dGUsbG9jYWxzOltlXSxpbXBvcnRzOltPLmRlZmF1bHRdfSkscmU9KDAsQS5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCIsY29tcG9uZW50czp0ZSxsb2NhbHM6W10saW1wb3J0czpbTy5kZWZhdWx0LHYuZGVmYXVsdF19KSxvZT1NLmRlZmF1bHQuYmluZChlZS5kZWZhdWx0KSxzZT0oMCxQLmRlZmluZU1lc3NhZ2VzKSh7YWN0aW9uc0J0bjp7aWQ6IkFjdGlvblBhbmVsLmFjdGlvbnNCdG4iLGRlZmF1bHRNZXNzYWdlOiJBY3Rpb25zIn0sZWRpdERlZmVjdHM6e2lkOiJBY3Rpb25QYW5lbC5lZGl0RGVmZWN0cyIsZGVmYXVsdE1lc3NhZ2U6IkVkaXQgZGVmZWN0cyJ9LHBvc3RJc3N1ZTp7aWQ6IkFjdGlvblBhbmVsLnBvc3RJc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6IlBvc3QgaXNzdWUifSxsaW5rSXNzdWU6e2lkOiJBY3Rpb25QYW5lbC5saW5rSXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJMaW5rIGlzc3VlIn0sdW5saW5rSXNzdWU6e2lkOiJBY3Rpb25QYW5lbC51bmxpbmtJc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6IlVubGluayBpc3N1ZSJ9LGlnbm9yZUluQUE6e2lkOiJBY3Rpb25QYW5lbC5pZ25vcmVJbkFBIixkZWZhdWx0TWVzc2FnZToiSWdub3JlIGluIEF1dG8gQW5hbHlzaXMifSxpbmNsdWRlSW5BQTp7aWQ6IkFjdGlvblBhbmVsLmluY2x1ZGVJbkFBIixkZWZhdWx0TWVzc2FnZToiSW5jbHVkZSBpbnRvIEF1dG8gQW5hbHlzaXMifSxwcm9jZWVkQnV0dG9uOntpZDoiQWN0aW9uUGFuZWwucHJvY2VlZEJ1dHRvbiIsZGVmYXVsdE1lc3NhZ2U6IlByb2NlZWQgVmFsaWQgSXRlbXMifSxhY3Rpb25zQnRuVG9vbHRpcDp7aWQ6IkFjdGlvblBhbmVsLmFjdGlvbnNCdG5Ub29sdGlwIixkZWZhdWx0TWVzc2FnZToiU2VsZWN0IHNldmVyYWwgaXRlbXMgdG8gcHJvY2Vzc2luZyJ9LGRlbGV0ZUJ0blRvb2x0aXA6e2lkOiJBY3Rpb25QYW5lbC5kZWxldGVCdG5Ub29sdGlwIixkZWZhdWx0TWVzc2FnZToiRGVsZXRlIHRlc3QgaXRlbXMgaW4gYnVsayJ9LG5vQnVnVHJhY2tpbmdTeXN0ZW1Ub0xpbmtJc3N1ZTp7aWQ6IkFjdGlvblBhbmVsLm5vQnVnVHJhY2tpbmdTeXN0ZW1Ub0xpbmtJc3N1ZSIsZGVmYXVsdE1lc3NhZ2U6IkNvbmZpZ3VyZSBidWcgdHJhY2tpbmcgc3lzdGVtIHRvIGxpbmsgaXNzdWUifSxub0J1Z1RyYWNraW5nU3lzdGVtVG9Qb3N0SXNzdWU6e2lkOiJBY3Rpb25QYW5lbC5ub0J1Z1RyYWNraW5nU3lzdGVtVG9Qb3N0SXNzdWUiLGRlZmF1bHRNZXNzYWdlOiJDb25maWd1cmUgYnVnIHRyYWNraW5nIHN5c3RlbSB0byBwb3N0IGlzc3VlIn19KSxpZT10LkFjdGlvblBhbmVsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmUocmUodCxlKSxlKX19KCJBY3Rpb25QYW5lbCIpKChzPSgwLGsuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue2JyZWFkY3J1bWJzOigwLE4uYnJlYWRjcnVtYnNTZWxlY3RvcikoZSksbGV2ZWw6KDAsTi5sZXZlbFNlbGVjdG9yKShlKSxsaXN0VmlldzooMCxOLmlzTGlzdFZpZXdTZWxlY3RvcikoZSwoMCxOLm5hbWVzcGFjZVNlbGVjdG9yKShlKSkscGF5bG9hZDooMCxILnBheWxvYWRTZWxlY3RvcikoZSksZXh0ZXJuYWxTeXN0ZW1zOigwLEYuZXh0ZXJuYWxTeXN0ZW1TZWxlY3RvcikoZSl9fSx7cmVzdG9yZVBhdGg6Ti5yZXN0b3JlUGF0aEFjdGlvbixyZWRpcmVjdDpJLnJlZGlyZWN0fSksaT0oMCx4LmRlZmF1bHQpKCkscyhhPSgwLFAuaW5qZWN0SW50bCkoYT1pKCh1PWw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXsoMCxwLmRlZmF1bHQpKHRoaXMsdCk7dmFyIG49KDAsZy5kZWZhdWx0KSh0aGlzLCh0Ll9fcHJvdG9fX3x8KDAsZC5kZWZhdWx0KSh0KSkuY2FsbCh0aGlzLGUpKTtyZXR1cm4gbi5vbkNsaWNrSGlzdG9yeT1mdW5jdGlvbigpe3JldHVybiBuLl9fb25DbGlja0hpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShuLGFyZ3VtZW50cyl9LG4ub25DbGlja1JlZnJlc2g9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX29uQ2xpY2tSZWZyZXNoX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLmNoZWNrSWZUaGVQb3N0SXNzdWVVbmF2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiBuLl9fY2hlY2tJZlRoZVBvc3RJc3N1ZVVuYXZhaWxhYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkobixhcmd1bWVudHMpfSxuLmNyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX19jcmVhdGVBY3Rpb25EZXNjcmlwdG9yc19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5jaGVja1Zpc2liaWxpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fX2NoZWNrVmlzaWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KG4sYXJndW1lbnRzKX0sbi5hY3Rpb25EZXNjcmlwdG9ycz1uLmNyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzKCksbn1yZXR1cm4oMCxFLmRlZmF1bHQpKHQsZSksKDAsbS5kZWZhdWx0KSh0LFt7a2V5OiJfX2NoZWNrVmlzaWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tWaXNpYmlsaXR5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVBY3Rpb25EZXNjcmlwdG9yc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlQWN0aW9uRGVzY3JpcHRvcnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoZWNrSWZUaGVQb3N0SXNzdWVVbmF2YWlsYWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZlRoZVBvc3RJc3N1ZVVuYXZhaWxhYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrUmVmcmVzaF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja1JlZnJlc2hfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrSGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja0hpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrSGlzdG9yeV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25DbGlja0hpc3RvcnlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ2xpY2tIaXN0b3J5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KHRoaXMucHJvcHMubGV2ZWw9PT1XLkxFVkVMX1NURVA/Ry5TVEVQX1BBR0VfRVZFTlRTLkhJU1RPUllfQlROOlUuU1VJVEVTX1BBR0VfRVZFTlRTLkhJU1RPUllfQlROKSx0aGlzLnByb3BzLnJlZGlyZWN0KHt0eXBlOkguSElTVE9SWV9QQUdFLHBheWxvYWQ6dGhpcy5wcm9wcy5wYXlsb2FkfSl9fSx7a2V5OiJfX29uQ2xpY2tSZWZyZXNoX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNsaWNrUmVmcmVzaF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25DbGlja1JlZnJlc2hfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ2xpY2tSZWZyZXNoX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNsaWNrUmVmcmVzaF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudCh0aGlzLnByb3BzLmxldmVsPT09Vy5MRVZFTF9TVEVQP0cuU1RFUF9QQUdFX0VWRU5UUy5SRUZSRVNIX0JUTjpVLlNVSVRFU19QQUdFX0VWRU5UUy5SRUZSRVNIX0JUTiksdGhpcy5wcm9wcy5vblJlZnJlc2goKX19LHtrZXk6Il9fY2hlY2tJZlRoZVBvc3RJc3N1ZVVuYXZhaWxhYmxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGVja0lmVGhlUG9zdElzc3VlVW5hdmFpbGFibGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoZWNrSWZUaGVQb3N0SXNzdWVVbmF2YWlsYWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZlRoZVBvc3RJc3N1ZVVuYXZhaWxhYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGVja0lmVGhlUG9zdElzc3VlVW5hdmFpbGFibGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcm9wcy5leHRlcm5hbFN5c3RlbXMubGVuZ3RofHwhdGhpcy5wcm9wcy5leHRlcm5hbFN5c3RlbXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmllbGRzJiZlLmZpZWxkcy5sZW5ndGh9KX19LHtrZXk6Il9fY3JlYXRlQWN0aW9uRGVzY3JpcHRvcnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jcmVhdGVBY3Rpb25EZXNjcmlwdG9yc19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY3JlYXRlQWN0aW9uRGVzY3JpcHRvcnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm5be2xhYmVsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHNlLmVkaXREZWZlY3RzKSx2YWx1ZToiYWN0aW9uLWVkaXQtZGVmZWN0cyIsb25DbGljazpmdW5jdGlvbih0KXtlLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoRy5TVEVQX1BBR0VfRVZFTlRTLkVESVRfREVGRUNUX0FDVElPTiksZS5wcm9wcy5vbkVkaXREZWZlY3RzKHQpfX0se2xhYmVsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKHNlLnBvc3RJc3N1ZSksdmFsdWU6ImFjdGlvbi1wb3N0LWlzc3VlIixoaWRkZW46dGhpcy5wcm9wcy5kZWJ1Z01vZGUsZGlzYWJsZWQ6dGhpcy5jaGVja0lmVGhlUG9zdElzc3VlVW5hdmFpbGFibGUoKSx0aXRsZTp0aGlzLmNoZWNrSWZUaGVQb3N0SXNzdWVVbmF2YWlsYWJsZSgpJiZ0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShzZS5ub0J1Z1RyYWNraW5nU3lzdGVtVG9Qb3N0SXNzdWUpfHwiIixvbkNsaWNrOmZ1bmN0aW9uKCl7ZS5wcm9wcy50cmFja2luZy50cmFja0V2ZW50KEcuU1RFUF9QQUdFX0VWRU5UUy5QT1NUX0JVR19BQ1RJT04pLGUucHJvcHMub25Qb3N0SXNzdWUoKX19LHtsYWJlbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShzZS5saW5rSXNzdWUpLHZhbHVlOiJhY3Rpb24tbGluay1pc3N1ZSIsaGlkZGVuOnRoaXMucHJvcHMuZGVidWdNb2RlLGRpc2FibGVkOiF0aGlzLnByb3BzLmV4dGVybmFsU3lzdGVtcy5sZW5ndGgsdGl0bGU6IXRoaXMucHJvcHMuZXh0ZXJuYWxTeXN0ZW1zLmxlbmd0aCYmdGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2Uoc2Uubm9CdWdUcmFja2luZ1N5c3RlbVRvTGlua0lzc3VlKXx8IiIsb25DbGljazpmdW5jdGlvbigpe2UucHJvcHMudHJhY2tpbmcudHJhY2tFdmVudChHLlNURVBfUEFHRV9FVkVOVFMuTE9BRF9CVUdfQUNUSU9OKSxlLnByb3BzLm9uTGlua0lzc3VlKCl9fSx7bGFiZWw6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2Uoc2UudW5saW5rSXNzdWUpLHZhbHVlOiJhY3Rpb24tdW5saW5rLWlzc3VlIixoaWRkZW46dGhpcy5wcm9wcy5kZWJ1Z01vZGUsb25DbGljazp0aGlzLnByb3BzLm9uVW5saW5rSXNzdWV9LHtsYWJlbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShzZS5pZ25vcmVJbkFBKSx2YWx1ZToiYWN0aW9uLWlnbm9yZS1pbi1BQSIsaGlkZGVuOnRoaXMucHJvcHMuZGVidWdNb2RlLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbklnbm9yZUluQUF9LHtsYWJlbDp0aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShzZS5pbmNsdWRlSW5BQSksdmFsdWU6ImFjdGlvbi1pbmNsdWRlLWludG8tQUEiLGhpZGRlbjp0aGlzLnByb3BzLmRlYnVnTW9kZSxvbkNsaWNrOnRoaXMucHJvcHMub25JbmNsdWRlSW5BQX0se2xhYmVsOnRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlKFkuQ09NTU9OX0xPQ0FMRV9LRVlTLkRFTEVURSksdmFsdWU6ImFjdGlvbi1kZWxldGUiLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbkRlbGV0ZX1dfX0se2tleToiX19jaGVja1Zpc2liaWxpdHlfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NoZWNrVmlzaWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fY2hlY2tWaXNpYmlsaXR5X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGVja1Zpc2liaWxpdHlfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoZWNrVmlzaWJpbGl0eV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvcHMubGV2ZWw9PT1lfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYnJlYWRjcnVtYnMsbj1lLnJlc3RvcmVQYXRoLG89ZS5zaG93QnJlYWRjcnVtYnMscz1lLmhhc0Vycm9ycyxpPWUuaW50bCxhPWUuaGFzVmFsaWRJdGVtcyxsPWUub25Qcm9jZWVkVmFsaWRJdGVtcyx1PWUuc2VsZWN0ZWRJdGVtcyxjPWUubGlzdFZpZXcsZD1lLmRlYnVnTW9kZSxfPWUubGV2ZWw7cmV0dXJuIHIuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOm9lKCJhY3Rpb24tcGFuZWwiLHsicmlnaHQtYnV0dG9ucy1vbmx5IjohbyYmIXN9KX0sbyYmci5jcmVhdGVFbGVtZW50KEIuQnJlYWRjcnVtYnMse3RvZ2dsZXJFdmVudEluZm86XyE9PVcuTEVWRUxfU1RFUD9VLlNVSVRFU19QQUdFX0VWRU5UUy5QTFVTX01JTlVTX0JSRUFEQ1JVTUI6e30sYnJlYWRjcnVtYkV2ZW50SW5mbzpfIT09Vy5MRVZFTF9TVEVQP1UuU1VJVEVTX1BBR0VfRVZFTlRTLklURU1fTkFNRV9CUkVBRENSVU1CX0NMSUNLOnt9LGFsbEV2ZW50Q2xpY2s6XyE9PVcuTEVWRUxfU1RFUD9VLlNVSVRFU19QQUdFX0VWRU5UUy5BTExfTEFCRUxfQlJFQURDUlVNQjp7fSxkZXNjcmlwdG9yczp0LG9uUmVzdG9yZVBhdGg6bn0pLHMmJnIuY3JlYXRlRWxlbWVudCh6Lkdob3N0QnV0dG9uLHtkaXNhYmxlZDohYSxvbkNsaWNrOmx9LGkuZm9ybWF0TWVzc2FnZShzZS5wcm9jZWVkQnV0dG9uKSksci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6b2UoImFjdGlvbi1idXR0b25zIil9LHRoaXMuY2hlY2tWaXNpYmlsaXR5KFtXLkxFVkVMX1NURVBdKSYmci5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6b2UoImFjdGlvbi1idXR0b24iLCJtb2JpbGUtaGlkZGVuIil9LHIuY3JlYXRlRWxlbWVudChWLkdob3N0TWVudUJ1dHRvbix7dGl0bGU6aS5mb3JtYXRNZXNzYWdlKHNlLmFjdGlvbnNCdG4pLGl0ZW1zOnRoaXMuYWN0aW9uRGVzY3JpcHRvcnMsZGlzYWJsZWQ6IXUubGVuZ3RofSkpLHRoaXMuY2hlY2tWaXNpYmlsaXR5KFtXLkxFVkVMX1NVSVRFLFcuTEVWRUxfVEVTVF0pJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvZSgiYWN0aW9uLWJ1dHRvbiIpfSxyLmNyZWF0ZUVsZW1lbnQoei5HaG9zdEJ1dHRvbix7aWNvbjpKLmRlZmF1bHQsb25DbGljazp0aGlzLnByb3BzLm9uRGVsZXRlLGRpc2FibGVkOnRoaXMucHJvcHMuZGVsZXRlRGlzYWJsZWQsdGl0bGU6dGhpcy5wcm9wcy5kZWxldGVEaXNhYmxlZD90aGlzLnByb3BzLmludGwuZm9ybWF0TWVzc2FnZShzZS5hY3Rpb25zQnRuVG9vbHRpcCk6dGhpcy5wcm9wcy5pbnRsLmZvcm1hdE1lc3NhZ2Uoc2UuZGVsZXRlQnRuVG9vbHRpcCl9LHIuY3JlYXRlRWxlbWVudChQLkZvcm1hdHRlZE1lc3NhZ2Use2lkOiJDb21tb24uZGVsZXRlIixkZWZhdWx0TWVzc2FnZToiRGVsZXRlIn0pKSksIWMmJiFkJiZyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvZSgiYWN0aW9uLWJ1dHRvbiIpfSxyLmNyZWF0ZUVsZW1lbnQoei5HaG9zdEJ1dHRvbix7aWNvbjokLmRlZmF1bHQsb25DbGljazp0aGlzLm9uQ2xpY2tIaXN0b3J5fSxyLmNyZWF0ZUVsZW1lbnQoUC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQWN0aW9uUGFuZWwuaGlzdG9yeSIsZGVmYXVsdE1lc3NhZ2U6Ikhpc3RvcnkifSkpKSxyLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpvZSgiYWN0aW9uLWJ1dHRvbiIpfSxyLmNyZWF0ZUVsZW1lbnQoei5HaG9zdEJ1dHRvbix7aWNvbjpLLmRlZmF1bHQsb25DbGljazp0aGlzLm9uQ2xpY2tSZWZyZXNofSxyLmNyZWF0ZUVsZW1lbnQoUC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiQ29tbW9uLnJlZnJlc2giLGRlZmF1bHRNZXNzYWdlOiJSZWZyZXNoIn0pKSkpKX19XSksdH0oQy5Db21wb25lbnQpLGwucHJvcFR5cGVzPXtwYXlsb2FkOkQuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxkZWJ1Z01vZGU6RC5kZWZhdWx0LmJvb2wsb25SZWZyZXNoOkQuZGVmYXVsdC5mdW5jLGJyZWFkY3J1bWJzOkQuZGVmYXVsdC5hcnJheU9mKEIuYnJlYWRjcnVtYkRlc2NyaXB0b3JTaGFwZSkscmVzdG9yZVBhdGg6RC5kZWZhdWx0LmZ1bmMsc2hvd0JyZWFkY3J1bWJzOkQuZGVmYXVsdC5ib29sLGhhc0Vycm9yczpELmRlZmF1bHQuYm9vbCxpbnRsOkQuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCxoYXNWYWxpZEl0ZW1zOkQuZGVmYXVsdC5ib29sLGxldmVsOkQuZGVmYXVsdC5zdHJpbmcsb25Qcm9jZWVkVmFsaWRJdGVtczpELmRlZmF1bHQuZnVuYyxzZWxlY3RlZEl0ZW1zOkQuZGVmYXVsdC5hcnJheSxvbkVkaXREZWZlY3RzOkQuZGVmYXVsdC5mdW5jLG9uUG9zdElzc3VlOkQuZGVmYXVsdC5mdW5jLG9uTGlua0lzc3VlOkQuZGVmYXVsdC5mdW5jLG9uVW5saW5rSXNzdWU6RC5kZWZhdWx0LmZ1bmMsb25JZ25vcmVJbkFBOkQuZGVmYXVsdC5mdW5jLG9uSW5jbHVkZUluQUE6RC5kZWZhdWx0LmZ1bmMsb25EZWxldGU6RC5kZWZhdWx0LmZ1bmMsbGlzdFZpZXc6RC5kZWZhdWx0LmJvb2wsZXh0ZXJuYWxTeXN0ZW1zOkQuZGVmYXVsdC5hcnJheSxkZWxldGVEaXNhYmxlZDpELmRlZmF1bHQuYm9vbCxyZWRpcmVjdDpELmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHRyYWNraW5nOkQuZGVmYXVsdC5zaGFwZSh7dHJhY2tFdmVudDpELmRlZmF1bHQuZnVuYyxnZXRUcmFja2luZ0RhdGE6RC5kZWZhdWx0LmZ1bmN9KS5pc1JlcXVpcmVkfSxsLmRlZmF1bHRQcm9wcz17ZGVidWdNb2RlOiExLG9uUmVmcmVzaDpmdW5jdGlvbigpe30sYnJlYWRjcnVtYnM6W10sZXJyb3JzOnt9LHJlc3RvcmVQYXRoOmZ1bmN0aW9uKCl7fSxsZXZlbDoiIixzaG93QnJlYWRjcnVtYnM6ITAsaGFzRXJyb3JzOiExLGFjdGlvbkRlc2NyaXB0b3JzOltdLGFjdGlvbnNNZW51RGlzYWJsZWQ6ITEsaGFzVmFsaWRJdGVtczohMSxvblByb2NlZWRWYWxpZEl0ZW1zOmZ1bmN0aW9uKCl7fSxzZWxlY3RlZEl0ZW1zOltdLG9uRWRpdERlZmVjdHM6ZnVuY3Rpb24oKXt9LG9uUG9zdElzc3VlOmZ1bmN0aW9uKCl7fSxvbkxpbmtJc3N1ZTpmdW5jdGlvbigpe30sb25VbmxpbmtJc3N1ZTpmdW5jdGlvbigpe30sb25JZ25vcmVJbkFBOmZ1bmN0aW9uKCl7fSxvbkluY2x1ZGVJbkFBOmZ1bmN0aW9uKCl7fSxvbkRlbGV0ZTpmdW5jdGlvbigpe30sbGlzdFZpZXc6ITEsZXh0ZXJuYWxTeXN0ZW1zOltdLGRlbGV0ZURpc2FibGVkOiExfSxhPXUpKXx8YSl8fGEpfHxhKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGllLCJBY3Rpb25QYW5lbCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKG9lLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHNlLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2FjdGlvblBhbmVsLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSksbigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJhY3Rpb24tcGFuZWwiOiJhY3Rpb25QYW5lbF9fYWN0aW9uLXBhbmVsX19fMktPM2IiLCJyaWdodC1idXR0b25zLW9ubHkiOiJhY3Rpb25QYW5lbF9fcmlnaHQtYnV0dG9ucy1vbmx5X19fMWNCVmIiLCJhY3Rpb24tYnV0dG9ucyI6ImFjdGlvblBhbmVsX19hY3Rpb24tYnV0dG9uc19fXzN5aVlzIiwiYWN0aW9uLWJ1dHRvbiI6ImFjdGlvblBhbmVsX19hY3Rpb24tYnV0dG9uX19fMmFZYzQiLCJtb2JpbGUtaGlkZGVuIjoiYWN0aW9uUGFuZWxfX21vYmlsZS1oaWRkZW5fX18xQWtMNyJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvYWN0aW9uUGFuZWwvYWN0aW9uUGFuZWwuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFjdGlvblBhbmVsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BY3Rpb25QYW5lbH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL3N1aXRlVGVzdFRvb2xiYXIuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlN1aXRlVGVzdFRvb2xiYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlN1aXRlVGVzdFRvb2xiYXJ9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvcmVmaW5lRmlsdGVyc1BhbmVsL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvcmVmaW5lRmlsdGVyc1BhbmVsL3JlZmluZUZpbHRlcnNQYW5lbC5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVmaW5lRmlsdGVyc1BhbmVsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5SZWZpbmVGaWx0ZXJzUGFuZWx9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvcmVmaW5lRmlsdGVyc1BhbmVsL3JlZmluZUZpbHRlcnNQYW5lbC5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZmluZUZpbHRlcnNQYW5lbD12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLHM9cihvKSxpPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLGE9cihpKSxsPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksdT1uKCIuL3NyYy9jb21wb25lbnRzL2ZpbHRlckVudGl0aWVzL2VudGl0aWVzR3JvdXAvaW5kZXguanMiKSxjPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9yZWZpbmVGaWx0ZXJzUGFuZWwvcmVmaW5lRmlsdGVyc1BhbmVsLnNjc3MiKSxkPXIoYyksXz1hLmRlZmF1bHQuYmluZChkLmRlZmF1bHQpLHA9dC5SZWZpbmVGaWx0ZXJzUGFuZWw9ZnVuY3Rpb24odCl7dmFyIG49dC5vbkZpbHRlckFkZCxyPXQub25GaWx0ZXJSZW1vdmUsbz10Lm9uRmlsdGVyVmFsaWRhdGUscz10Lm9uRmlsdGVyQ2hhbmdlLGk9dC5maWx0ZXJFcnJvcnMsYT10LmZpbHRlckVudGl0aWVzO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJyZWZpbmUtZmlsdGVycy1wYW5lbCIpfSxlLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpfKCJsYWJlbCIpfSxlLmNyZWF0ZUVsZW1lbnQobC5Gb3JtYXR0ZWRNZXNzYWdlLHtpZDoiRmlsdGVycy5yZWZpbmUiLGRlZmF1bHRNZXNzYWdlOiJSZWZpbmU6In0pKSxlLmNyZWF0ZUVsZW1lbnQodS5FbnRpdGllc0dyb3VwLHtvbkNoYW5nZTpzLG9uVmFsaWRhdGU6byxvblJlbW92ZTpyLG9uQWRkOm4sZXJyb3JzOmksZW50aXRpZXM6YX0pKX07cC5wcm9wVHlwZXM9e2VudGl0aWVzQ29tcG9uZW50OnMuZGVmYXVsdC5mdW5jLHVwZGF0ZUZpbHRlcnM6cy5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJBZGQ6cy5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJSZW1vdmU6cy5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJWYWxpZGF0ZTpzLmRlZmF1bHQuZnVuYyxvbkZpbHRlckNoYW5nZTpzLmRlZmF1bHQuZnVuYyxmaWx0ZXJFcnJvcnM6cy5kZWZhdWx0Lm9iamVjdCxmaWx0ZXJFbnRpdGllczpzLmRlZmF1bHQuYXJyYXl9LHAuZGVmYXVsdFByb3BzPXtlbnRpdGllc0NvbXBvbmVudDpudWxsLHVwZGF0ZUZpbHRlcnM6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyQWRkOmZ1bmN0aW9uKCl7fSxvbkZpbHRlclJlbW92ZTpmdW5jdGlvbigpe30sb25GaWx0ZXJWYWxpZGF0ZTpmdW5jdGlvbigpe30sb25GaWx0ZXJDaGFuZ2U6ZnVuY3Rpb24oKXt9LGZpbHRlckVycm9yczp7fSxmaWx0ZXJFbnRpdGllczpbXX07IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHAsIlJlZmluZUZpbHRlcnNQYW5lbCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL3JlZmluZUZpbHRlcnNQYW5lbC9yZWZpbmVGaWx0ZXJzUGFuZWwuanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoXywiY3giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9yZWZpbmVGaWx0ZXJzUGFuZWwvcmVmaW5lRmlsdGVyc1BhbmVsLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9yZWZpbmVGaWx0ZXJzUGFuZWwvcmVmaW5lRmlsdGVyc1BhbmVsLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsicmVmaW5lLWZpbHRlcnMtcGFuZWwiOiJyZWZpbmVGaWx0ZXJzUGFuZWxfX3JlZmluZS1maWx0ZXJzLXBhbmVsX19fM1JPaVEiLGxhYmVsOiJyZWZpbmVGaWx0ZXJzUGFuZWxfX2xhYmVsX19fSTdHOW4ifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9jb21tb24vc3VpdGVUZXN0VG9vbGJhci9zdWl0ZVRlc3RUb29sYmFyLmpzeCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3VpdGVUZXN0VG9vbGJhcj12b2lkIDA7dmFyIG89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIikscz1yKG8pLGk9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9pbmZvTGluZS9pbmRleC5qcyIpLGE9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zZWxlY3RlZEl0ZW1zL2luZGV4LmpzIiksbD1uKCIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiksdT1yKGwpLGM9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2NvbW1vbi9zdWl0ZVRlc3RUb29sYmFyL2FjdGlvblBhbmVsL2luZGV4LmpzIiksZD1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvcmVmaW5lRmlsdGVyc1BhbmVsL2luZGV4LmpzIiksXz10LlN1aXRlVGVzdFRvb2xiYXI9ZnVuY3Rpb24odCl7dmFyIG49dC5wYXJlbnRJdGVtLHI9dC5zZWxlY3RlZEl0ZW1zLG89dC5lcnJvcnMsbD10Lm9uVW5zZWxlY3QsdT10Lm9uVW5zZWxlY3RBbGwsXz10Lm9uUmVmcmVzaCxwPXQub25Qcm9jZWVkVmFsaWRJdGVtcyxmPXQub25JZ25vcmVJbkFBLG09dC5vbkluY2x1ZGVJbkFBLGg9dC5vblVubGlua0lzc3VlLGc9dC5vbkxpbmtJc3N1ZSxiPXQub25FZGl0RGVmZWN0cyxFPXQuZGVidWdNb2RlLHk9dC5vbkRlbGV0ZSx2PXQuZXZlbnRzLFQ9dC5vbkZpbHRlckFkZCxBPXQub25GaWx0ZXJSZW1vdmUsQz10Lm9uRmlsdGVyVmFsaWRhdGUsTz10Lm9uRmlsdGVyQ2hhbmdlLFM9dC5maWx0ZXJFcnJvcnMsUj10LmZpbHRlckVudGl0aWVzO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCwhIXIubGVuZ3RoJiZlLmNyZWF0ZUVsZW1lbnQoYS5TZWxlY3RlZEl0ZW1zLHtzZWxlY3RlZEl0ZW1zOnIsZXJyb3JzOm8sb25VbnNlbGVjdDpsLG9uQ2xvc2U6dX0pLGUuY3JlYXRlRWxlbWVudChjLkFjdGlvblBhbmVsLHtkZWJ1Z01vZGU6RSxoYXNFcnJvcnM6ci5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEhb1tlLmlkXX0pLGhhc1ZhbGlkSXRlbXM6ci5sZW5ndGg+KDAscy5kZWZhdWx0KShvKS5sZW5ndGgsb25Qcm9jZWVkVmFsaWRJdGVtczpwLHNob3dCcmVhZGNydW1iczowPT09ci5sZW5ndGgsb25SZWZyZXNoOl8sc2VsZWN0ZWRJdGVtczpyLG9uSWdub3JlSW5BQTpmLG9uSW5jbHVkZUluQUE6bSxvblVubGlua0lzc3VlOmgsb25MaW5rSXNzdWU6ZyxvbkVkaXREZWZlY3RzOmIsb25EZWxldGU6eSxkZWxldGVEaXNhYmxlZDohci5sZW5ndGh9KSxuJiZlLmNyZWF0ZUVsZW1lbnQoaS5JbmZvTGluZSx7ZGF0YTpuLGV2ZW50czp2fSksZS5jcmVhdGVFbGVtZW50KGQuUmVmaW5lRmlsdGVyc1BhbmVsLHtvbkZpbHRlckFkZDpULG9uRmlsdGVyUmVtb3ZlOkEsb25GaWx0ZXJWYWxpZGF0ZTpDLG9uRmlsdGVyQ2hhbmdlOk8sZmlsdGVyRXJyb3JzOlMsZmlsdGVyRW50aXRpZXM6Un0pKX07Xy5wcm9wVHlwZXM9e3NlbGVjdGVkSXRlbXM6dS5kZWZhdWx0LmFycmF5T2YodS5kZWZhdWx0Lm9iamVjdCksZXJyb3JzOnUuZGVmYXVsdC5vYmplY3Qsb25VbnNlbGVjdDp1LmRlZmF1bHQuZnVuYyxvblVuc2VsZWN0QWxsOnUuZGVmYXVsdC5mdW5jLHBhcmVudEl0ZW06dS5kZWZhdWx0Lm9iamVjdCxvblJlZnJlc2g6dS5kZWZhdWx0LmZ1bmMsb25Qcm9jZWVkVmFsaWRJdGVtczp1LmRlZmF1bHQuZnVuYyxvbklnbm9yZUluQUE6dS5kZWZhdWx0LmZ1bmMsb25JbmNsdWRlSW5BQTp1LmRlZmF1bHQuZnVuYyxvblVubGlua0lzc3VlOnUuZGVmYXVsdC5mdW5jLG9uTGlua0lzc3VlOnUuZGVmYXVsdC5mdW5jLG9uRWRpdERlZmVjdHM6dS5kZWZhdWx0LmZ1bmMsZGVidWdNb2RlOnUuZGVmYXVsdC5ib29sLG9uRGVsZXRlOnUuZGVmYXVsdC5mdW5jLGV2ZW50czp1LmRlZmF1bHQub2JqZWN0LG9uRmlsdGVyQWRkOnUuZGVmYXVsdC5mdW5jLG9uRmlsdGVyUmVtb3ZlOnUuZGVmYXVsdC5mdW5jLG9uRmlsdGVyVmFsaWRhdGU6dS5kZWZhdWx0LmZ1bmMsb25GaWx0ZXJDaGFuZ2U6dS5kZWZhdWx0LmZ1bmMsZmlsdGVyRXJyb3JzOnUuZGVmYXVsdC5vYmplY3QsZmlsdGVyRW50aXRpZXM6dS5kZWZhdWx0LmFycmF5fSxfLmRlZmF1bHRQcm9wcz17c2VsZWN0ZWRJdGVtczpbXSxlcnJvcnM6e30sb25VbnNlbGVjdDpmdW5jdGlvbigpe30sb25VbnNlbGVjdEFsbDpmdW5jdGlvbigpe30scGFyZW50SXRlbTpudWxsLG9uUmVmcmVzaDpmdW5jdGlvbigpe30sb25Qcm9jZWVkVmFsaWRJdGVtczpmdW5jdGlvbigpe30sb25JZ25vcmVJbkFBOmZ1bmN0aW9uKCl7fSxvbkluY2x1ZGVJbkFBOmZ1bmN0aW9uKCl7fSxvblVubGlua0lzc3VlOmZ1bmN0aW9uKCl7fSxvbkxpbmtJc3N1ZTpmdW5jdGlvbigpe30sb25FZGl0RGVmZWN0czpmdW5jdGlvbigpe30sb25EZWxldGU6ZnVuY3Rpb24oKXt9LGRlYnVnTW9kZTohMSx1cGRhdGVGaWx0ZXJzOmZ1bmN0aW9uKCl7fSxvbkZpbHRlckFkZDpmdW5jdGlvbigpe30sb25GaWx0ZXJSZW1vdmU6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyVmFsaWRhdGU6ZnVuY3Rpb24oKXt9LG9uRmlsdGVyQ2hhbmdlOmZ1bmN0aW9uKCl7fSxmaWx0ZXJFcnJvcnM6e30sZmlsdGVyRW50aXRpZXM6W10sZXZlbnRzOnt9fTshZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfSE9UX0xPQURFUl9fJiZfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihfLCJTdWl0ZVRlc3RUb29sYmFyIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL3N1aXRlVGVzdFRvb2xiYXIvc3VpdGVUZXN0VG9vbGJhci5qc3giKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9kYXNoYm9hcmRJdGVtUGFnZS5qc3giOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhc2hib2FyZEl0ZW1QYWdlPXZvaWQgMDt2YXIgbyxzLGksYSxsLHU9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiKSxjPXIodSksZD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiKSxfPXIoZCkscD1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiKSxmPXIocCksbT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiKSxoPXIobSksZz1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIpLGI9cihnKSxFPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpLHk9cihFKSx2PW4oIi4vbm9kZV9tb2R1bGVzL3JlZGJveC1yZWFjdC9saWIvaW5kZXguanMiKSxUPXIodiksQT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0tY2F0Y2gtZXJyb3JzL2xpYi9pbmRleC5qcyIpLEM9cihBKSxPPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiksUz1yKE8pLFI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWhtci9saWIvaW5kZXguanMiKSxqPXIoUikseD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFja2luZy9idWlsZC9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSx3PXIoRCksTT1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIpLGs9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtZnVsbC1zY3JlZW4vZGlzdC9pbmRleC5qcyIpLEk9cihrKSxQPW4oIi4vbm9kZV9tb2R1bGVzL2h0bWwtcmVhY3QtcGFyc2VyL2luZGV4LmpzIiksTj1yKFApLEg9bigiLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIiksRj1yKEgpLEI9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvaW5kZXguZXMuanMiKSxVPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksRz1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSx6PW4oIi4vc3JjL2NvbW1vbi91dGlscy9wZXJtaXNzaW9ucy9pbmRleC5qcyIpLFY9bigiLi9zcmMvY29udHJvbGxlcnMvZGFzaGJvYXJkL2luZGV4LmpzIiksVz1uKCIuL3NyYy9jb250cm9sbGVycy91c2VyL2luZGV4LmpzIiksWT1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdlcy9pbmRleC5qcyIpLHE9bigiLi9zcmMvY29udHJvbGxlcnMvbW9kYWwvaW5kZXguanMiKSxLPW4oIi4vc3JjL2NvbnRyb2xsZXJzL25vdGlmaWNhdGlvbi9pbmRleC5qcyIpLFg9bigiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9pbmRleC5qcyIpLCQ9bigiLi9zcmMvY29tcG9uZW50cy9idXR0b25zL2dob3N0QnV0dG9uL2luZGV4LmpzIiksUT1uKCIuL3NyYy9sYXlvdXRzL3BhZ2VMYXlvdXQvaW5kZXguanMiKSxKPW4oIi4vc3JjL2NvbXBvbmVudHMvbWFpbi9hbmFseXRpY3MvZXZlbnRzL2luZGV4LmpzIiksWj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvY29tbW9uL2Rhc2hib2FyZFBhZ2VIZWFkZXIvaW5kZXguanMiKSxlZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvaW1nL2FkZC1pbmxpbmUuc3ZnIiksdGU9cihlZSksbmU9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2ltZy9hZGQtc2hhcmVkLWlubGluZS5zdmciKSxyZT1yKG5lKSxvZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvaW1nL2VkaXQtaW5saW5lLnN2ZyIpLHNlPXIob2UpLGllPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9pbWcvY2FuY2VsLWlubGluZS5zdmciKSxhZT1yKGllKSxsZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvaW1nL2Z1bGwtc2NyZWVuLWlubGluZS5zdmciKSx1ZT1yKGxlKSxjZT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvZGFzaGJvYXJkSXRlbVBhZ2Uuc2NzcyIpLGRlPXIoY2UpLF9lPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS93aWRnZXRzR3JpZC9pbmRleC5qcyIpLHBlPXtEYXNoYm9hcmRJdGVtUGFnZTp7ZGlzcGxheU5hbWU6IkRhc2hib2FyZEl0ZW1QYWdlIn19LGZlPSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9kYXNoYm9hcmRJdGVtUGFnZS5qc3giLGNvbXBvbmVudHM6cGUsbG9jYWxzOltlXSxpbXBvcnRzOltTLmRlZmF1bHRdfSksbWU9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLmpzeCIsY29tcG9uZW50czpwZSxsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxoZT1GLmRlZmF1bHQuYmluZChkZS5kZWZhdWx0KSxnZT0oMCxCLmRlZmluZU1lc3NhZ2VzKSh7cGFnZVRpdGxlOntpZDoiRGFzaGJvYXJkUGFnZS50aXRsZSIsZGVmYXVsdE1lc3NhZ2U6IkFsbCBEYXNoYm9hcmRzIn0sYWRkTmV3V2lkZ2V0OntpZDoiRGFzaGJvYXJkSXRlbVBhZ2UuYWRkTmV3V2lkZ2V0IixkZWZhdWx0TWVzc2FnZToiQWRkIG5ldyB3aWRnZXQifSxhZGRTaGFyZWRXaWRnZXQ6e2lkOiJEYXNoYm9hcmRJdGVtUGFnZS5hZGRTaGFyZWRXaWRnZXQiLGRlZmF1bHRNZXNzYWdlOiJBZGQgc2hhcmVkIHdpZGdldCJ9LGVkaXREYXNoYm9hcmQ6e2lkOiJEYXNoYm9hcmRJdGVtUGFnZS5lZGl0RGFzaGJvYXJkIixkZWZhdWx0TWVzc2FnZToiRWRpdCJ9LGRlbGV0ZTp7aWQ6IkRhc2hib2FyZEl0ZW1QYWdlLmRlbGV0ZSIsZGVmYXVsdE1lc3NhZ2U6IkRlbGV0ZSJ9LGZ1bGxzY3JlZW46e2lkOiJEYXNoYm9hcmRJdGVtUGFnZS5mdWxsc2NyZWVuIixkZWZhdWx0TWVzc2FnZToiRnVsbCBzY3JlZW4ifSxhZGRXaWRnZXRTdWNjZXNzOntpZDoiRGFzaGJvYXJkSXRlbVBhZ2UuYWRkV2lkZ2V0U3VjY2VzcyIsZGVmYXVsdE1lc3NhZ2U6IldpZGdldCBoYXMgYmVlbiBhZGRlZCJ9fSksYmU9dC5EYXNoYm9hcmRJdGVtUGFnZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZlKG1lKHQsZSksZSl9fSgiRGFzaGJvYXJkSXRlbVBhZ2UiKSgobz0oMCxNLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybnthY3RpdmVQcm9qZWN0OigwLFcuYWN0aXZlUHJvamVjdFNlbGVjdG9yKShlKSxkYXNoYm9hcmQ6KDAsVi5hY3RpdmVEYXNoYm9hcmRJdGVtU2VsZWN0b3IpKGUpLHVzZXJJbmZvOigwLFcudXNlckluZm9TZWxlY3RvcikoZSksZnVsbFNjcmVlbk1vZGU6KDAsVi5kYXNoYm9hcmRGdWxsU2NyZWVuTW9kZVNlbGVjdG9yKShlKX19LHtzaG93TW9kYWxBY3Rpb246cS5zaG93TW9kYWxBY3Rpb24sZmV0Y2hEYXNoYm9hcmRBY3Rpb246Vi5mZXRjaERhc2hib2FyZEFjdGlvbix1cGRhdGVEYXNoYm9hcmRXaWRnZXRzQWN0aW9uOlYudXBkYXRlRGFzaGJvYXJkV2lkZ2V0c0FjdGlvbixzaG93Tm90aWZpY2F0aW9uOksuc2hvd05vdGlmaWNhdGlvbixoaWRlU2NyZWVuTG9ja0FjdGlvbjpYLmhpZGVTY3JlZW5Mb2NrQWN0aW9uLGNoYW5nZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uOlYuY2hhbmdlRnVsbFNjcmVlbk1vZGVBY3Rpb24sdG9nZ2xlRnVsbFNjcmVlbk1vZGVBY3Rpb246Vi50b2dnbGVGdWxsU2NyZWVuTW9kZUFjdGlvbn0pLHM9KDAsTC5kZWZhdWx0KSgpLCgwLEIuaW5qZWN0SW50bCkoaT1vKGk9cygobD1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCxmLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxhPTA7YTxzO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPSgwLGIuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsXy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLm9uQ29uZmlybT1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25Db25maXJtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmdldEJyZWFkY3J1bWJzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5nZXREYXNoYm9hcmROYW1lPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9cikuX19nZXREYXNoYm9hcmROYW1lX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLnRvZ2dsZUZ1bGxzY3JlZW49ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIuc2hvd1dpZGdldFdpemFyZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fc2hvd1dpZGdldFdpemFyZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5zaG93QWRkU2hhcmVkV2lkZ2V0TW9kYWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX3Nob3dBZGRTaGFyZWRXaWRnZXRNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sci5jaGVja0lmV2lkZ2V0c01vZGlmaWFibGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX2NoZWNrSWZXaWRnZXRzTW9kaWZpYWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KGUsYXJndW1lbnRzKX0sbz1uLCgwLGIuZGVmYXVsdCkocixvKX1yZXR1cm4oMCx5LmRlZmF1bHQpKHQsZSksKDAsaC5kZWZhdWx0KSh0LFt7a2V5OiJfX2NoZWNrSWZXaWRnZXRzTW9kaWZpYWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZldpZGdldHNNb2RpZmlhYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zaG93QWRkU2hhcmVkV2lkZ2V0TW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Nob3dBZGRTaGFyZWRXaWRnZXRNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fc2hvd1dpZGdldFdpemFyZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2hvd1dpZGdldFdpemFyZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fdG9nZ2xlRnVsbHNjcmVlbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9nZ2xlRnVsbHNjcmVlbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNvbmZpcm1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQ29uZmlybV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25Db25maXJtX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkNvbmZpcm1fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQ29uZmlybV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25Db25maXJtX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vbkNvbmZpcm1fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5wcm9wcyxvPXIuaW50bC5mb3JtYXRNZXNzYWdlLHM9ci5hY3RpdmVQcm9qZWN0LGk9ci5kYXNoYm9hcmQ7cmV0dXJuKDAsRy5mZXRjaCkoVS5VUkxTLmFkZERhc2hib2FyZFdpZGdldChzLGkuaWQpLHttZXRob2Q6InB1dCIsZGF0YTp7YWRkV2lkZ2V0OmV9fSkudGhlbihmdW5jdGlvbigpe3ZhciB0PWkud2lkZ2V0cyxyPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybigwLGMuZGVmYXVsdCkoe30sdCx7d2lkZ2V0UG9zaXRpb246KDAsYy5kZWZhdWx0KSh7fSx0LndpZGdldFBvc2l0aW9uLHtwb3NpdGlvblk6dC53aWRnZXRQb3NpdGlvbi5wb3NpdGlvblkrZS53aWRnZXRTaXplLmhlaWdodH0pfSl9KTtyZXR1cm4gci51bnNoaWZ0KGUpLG4ucHJvcHMudXBkYXRlRGFzaGJvYXJkV2lkZ2V0c0FjdGlvbigoMCxjLmRlZmF1bHQpKHt9LG4ucHJvcHMuZGFzaGJvYXJkLHt3aWRnZXRzOnJ9KSl9KS50aGVuKGZ1bmN0aW9uKCl7bi5wcm9wcy5oaWRlU2NyZWVuTG9ja0FjdGlvbigpLHQoKSxuLnByb3BzLnNob3dOb3RpZmljYXRpb24oe21lc3NhZ2U6byhnZS5hZGRXaWRnZXRTdWNjZXNzKSx0eXBlOksuTk9USUZJQ0FUSU9OX1RZUEVTLlNVQ0NFU1N9KX0pLmNhdGNoKGZ1bmN0aW9uKGUpe24ucHJvcHMuaGlkZVNjcmVlbkxvY2tBY3Rpb24oKSxuLnByb3BzLnNob3dOb3RpZmljYXRpb24oe21lc3NhZ2U6ZS5tZXNzYWdlLHR5cGU6Sy5OT1RJRklDQVRJT05fVFlQRVMuRVJST1J9KX0pfX0se2tleToiX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2dldEJyZWFkY3J1bWJzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCcmVhZGNydW1ic19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0QnJlYWRjcnVtYnNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hY3RpdmVQcm9qZWN0O3JldHVyblt7dGl0bGU6ZS5pbnRsLmZvcm1hdE1lc3NhZ2UoZ2UucGFnZVRpdGxlKSxsaW5rOnt0eXBlOlkuUFJPSkVDVF9EQVNIQk9BUkRfUEFHRSxwYXlsb2FkOntwcm9qZWN0SWQ6dH19fSx7dGl0bGU6dGhpcy5nZXREYXNoYm9hcmROYW1lKCl9XX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZ2V0RGFzaGJvYXJkTmFtZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmRhc2hib2FyZCYmdGhpcy5wcm9wcy5kYXNoYm9hcmQubmFtZXx8IiJ9fSx7a2V5OiJfX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3RvZ2dsZUZ1bGxzY3JlZW5fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoSi5EQVNIQk9BUkRfUEFHRV9FVkVOVFMuRlVMTF9TQ1JFRU5fQlROKSx0aGlzLnByb3BzLnRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uKCl9fSx7a2V5OiJfX3Nob3dXaWRnZXRXaXphcmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Nob3dXaWRnZXRXaXphcmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Nob3dXaWRnZXRXaXphcmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Nob3dXaWRnZXRXaXphcmRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Nob3dXaWRnZXRXaXphcmRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnRyYWNraW5nLnRyYWNrRXZlbnQoSi5EQVNIQk9BUkRfUEFHRV9FVkVOVFMuQUREX05FV19XSURHRVRfQlROKSx0aGlzLnByb3BzLnNob3dNb2RhbEFjdGlvbih7aWQ6IndpZGdldFdpemFyZE1vZGFsIixkYXRhOntvbkNvbmZpcm06dGhpcy5vbkNvbmZpcm0sZXZlbnRzSW5mbzp7Y2xvc2VJY29uOkouREFTSEJPQVJEX1BBR0VfRVZFTlRTLkNMT1NFX0lDT05fQUREX1dJREdFVF9NT0RBTCxjaG9vc2VXaWRnZXRUeXBlOkouREFTSEJPQVJEX1BBR0VfRVZFTlRTLkNIT09TRV9XSURHRVRfVFlQRV9BRERfV0lER0VUX01PREFMLG5leHRTdGVwOkouREFTSEJPQVJEX1BBR0VfRVZFTlRTLk5FWFRfU1RFUF9BRERfV0lER0VUX01PREFMLHByZXZTdGVwOkouREFTSEJPQVJEX1BBR0VfRVZFTlRTLlBSRVZJT1VTX1NURVBfQUREX1dJREdFVF9NT0RBTCxjaGFuZ2VEZXNjcmlwdGlvbjpKLkRBU0hCT0FSRF9QQUdFX0VWRU5UUy5FTlRFUl9XSURHRVRfREVTQ1JJUFRJT05fQUREX1dJREdFVF9NT0RBTCxzaGFyZVdpZGdldDpKLkRBU0hCT0FSRF9QQUdFX0VWRU5UUy5TSEFSRV9XSURHRVRfQUREX1dJREdFVF9NT0RBTCxhZGRXaWRnZXQ6Si5EQVNIQk9BUkRfUEFHRV9FVkVOVFMuQUREX0JUTl9BRERfV0lER0VUX01PREFMfX19KX19LHtrZXk6Il9fc2hvd0FkZFNoYXJlZFdpZGdldE1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zaG93QWRkU2hhcmVkV2lkZ2V0TW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX3Nob3dBZGRTaGFyZWRXaWRnZXRNb2RhbF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fc2hvd0FkZFNoYXJlZFdpZGdldE1vZGFsX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19zaG93QWRkU2hhcmVkV2lkZ2V0TW9kYWxfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnNob3dNb2RhbEFjdGlvbih7aWQ6ImFkZFNoYXJlZFdpZGdldE1vZGFsIixkYXRhOntvbkNvbmZpcm06dGhpcy5vbkNvbmZpcm0sY3VycmVudERhc2hib2FyZDp0aGlzLnByb3BzLmRhc2hib2FyZH19KX19LHtrZXk6Il9fY2hlY2tJZldpZGdldHNNb2RpZmlhYmxlX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jaGVja0lmV2lkZ2V0c01vZGlmaWFibGVfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2NoZWNrSWZXaWRnZXRzTW9kaWZpYWJsZV9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hlY2tJZldpZGdldHNNb2RpZmlhYmxlX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19jaGVja0lmV2lkZ2V0c01vZGlmaWFibGVfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS51c2VySW5mbyxuPWUuYWN0aXZlUHJvamVjdCxyPWUuZGFzaGJvYXJkLG89ci5vd25lcj09PXQudXNlcklkLHM9dC5hc3NpZ25lZFByb2plY3RzW25dJiZ0LmFzc2lnbmVkUHJvamVjdHNbbl0ucHJvamVjdFJvbGU7cmV0dXJuKDAsei5jYW5SZXNpemVBbmREcmFnV2lkZ2V0cykodC51c2VyUm9sZSxzLG8pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmludGwuZm9ybWF0TWVzc2FnZSxuPWUuZGFzaGJvYXJkLHI9ZS5mdWxsU2NyZWVuTW9kZSxvPWUuY2hhbmdlRnVsbFNjcmVlbk1vZGVBY3Rpb247cmV0dXJuIFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEuUGFnZUxheW91dCxudWxsLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEuUGFnZUhlYWRlcix7YnJlYWRjcnVtYnM6dGhpcy5nZXRCcmVhZGNydW1icygpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChaLkRhc2hib2FyZFBhZ2VIZWFkZXIsbnVsbCkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFEuUGFnZVNlY3Rpb24sbnVsbCxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmhlKCJkYXNoYm9hcmQtaXRlbSIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmhlKCJidXR0b25zLWNvbnRhaW5lciIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmhlKCJuYXYtbGVmdCIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgkLkdob3N0QnV0dG9uLHtpY29uOnRlLmRlZmF1bHQsb25DbGljazp0aGlzLnNob3dXaWRnZXRXaXphcmR9LHQoZ2UuYWRkTmV3V2lkZ2V0KSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJC5HaG9zdEJ1dHRvbix7aWNvbjpyZS5kZWZhdWx0LG9uQ2xpY2s6dGhpcy5zaG93QWRkU2hhcmVkV2lkZ2V0TW9kYWx9LHQoZ2UuYWRkU2hhcmVkV2lkZ2V0KSkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6aGUoIm5hdi1yaWdodCIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgkLkdob3N0QnV0dG9uLHtpY29uOnNlLmRlZmF1bHR9LHQoZ2UuZWRpdERhc2hib2FyZCkpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCQuR2hvc3RCdXR0b24se2ljb246dWUuZGVmYXVsdCxvbkNsaWNrOnRoaXMudG9nZ2xlRnVsbHNjcmVlbn0sdChnZS5mdWxsc2NyZWVuKSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJC5HaG9zdEJ1dHRvbix7aWNvbjphZS5kZWZhdWx0fSx0KGdlLmRlbGV0ZSkpKSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSS5kZWZhdWx0LHtlbmFibGVkOnIsb25DaGFuZ2U6b30sUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX2UuV2lkZ2V0c0dyaWQse2lzTW9kaWZpYWJsZTp0aGlzLmNoZWNrSWZXaWRnZXRzTW9kaWZpYWJsZSgpLGRhc2hib2FyZDpuLGlzRnVsbHNjcmVlbjpyLHNob3dXaWRnZXRXaXphcmQ6dGhpcy5zaG93V2lkZ2V0V2l6YXJkfSksciYmUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImkiLHtjbGFzc05hbWU6aGUoImljb24tY2xvc2UiKSxvbkNsaWNrOnRoaXMudG9nZ2xlRnVsbHNjcmVlbn0sKDAsTi5kZWZhdWx0KShhZS5kZWZhdWx0KSkpKSkpfX1dKSx0fShPLkNvbXBvbmVudCksYS5wcm9wVHlwZXM9e2ludGw6Qi5pbnRsU2hhcGUuaXNSZXF1aXJlZCxzaG93TW9kYWxBY3Rpb246dy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxmZXRjaERhc2hib2FyZEFjdGlvbjp3LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHVwZGF0ZURhc2hib2FyZFdpZGdldHNBY3Rpb246dy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxzaG93Tm90aWZpY2F0aW9uOncuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsaGlkZVNjcmVlbkxvY2tBY3Rpb246dy5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxhY3RpdmVQcm9qZWN0OncuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxkYXNoYm9hcmQ6dy5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHVzZXJJbmZvOncuZGVmYXVsdC5vYmplY3QuaXNSZXF1aXJlZCx0cmFja2luZzp3LmRlZmF1bHQuc2hhcGUoe3RyYWNrRXZlbnQ6dy5kZWZhdWx0LmZ1bmMsZ2V0VHJhY2tpbmdEYXRhOncuZGVmYXVsdC5mdW5jfSkuaXNSZXF1aXJlZCxmdWxsU2NyZWVuTW9kZTp3LmRlZmF1bHQuYm9vbCxjaGFuZ2VGdWxsU2NyZWVuTW9kZUFjdGlvbjp3LmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLHRvZ2dsZUZ1bGxTY3JlZW5Nb2RlQWN0aW9uOncuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWR9LGEuZGVmYXVsdFByb3BzPXtjdXJyZW50RGFzaGJvYXJkOnt9LGZ1bGxTY3JlZW5Nb2RlOiExfSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGJlLCJEYXNoYm9hcmRJdGVtUGFnZSIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGhlLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGdlLCJtZXNzYWdlcyIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLnNjc3MiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXsiZGFzaGJvYXJkLWl0ZW0iOiJkYXNoYm9hcmRJdGVtUGFnZV9fZGFzaGJvYXJkLWl0ZW1fX196LS1DbCIsImljb24tY2xvc2UiOiJkYXNoYm9hcmRJdGVtUGFnZV9faWNvbi1jbG9zZV9fXzEta094IiwiYnV0dG9ucy1jb250YWluZXIiOiJkYXNoYm9hcmRJdGVtUGFnZV9fYnV0dG9ucy1jb250YWluZXJfX18yOG0zSyIsIm5hdi1sZWZ0IjoiZGFzaGJvYXJkSXRlbVBhZ2VfX25hdi1sZWZ0X19fMVNOajgiLCJuYXYtcmlnaHQiOiJkYXNoYm9hcmRJdGVtUGFnZV9fbmF2LXJpZ2h0X19fMkllSF8ifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9pbWcvYWRkLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9Ii0yIC0yIDIwIDIwIj48cGF0aCBpZD0iaWNfYWRkLXdkZ3QtYSIgZD0iTTgsMCBDMy41ODQsMCAwLDMuNTg0IDAsOCBDMCwxMi40MTYgMy41ODQsMTYgOCwxNiBDMTIuNDE2LDE2IDE2LDEyLjQxNiAxNiw4IEMxNiwzLjU4NCAxMi40MTYsMCA4LDAgTDgsMCBaIE0xMiw4LjggTDguOCw4LjggTDguOCwxMiBMNy4yLDEyIEw3LjIsOC44IEw0LDguOCBMNCw3LjIgTDcuMiw3LjIgTDcuMiw0IEw4LjgsNCBMOC44LDcuMiBMMTIsNy4yIEwxMiw4LjggTDEyLDguOCBaIj48L3BhdGg+PC9zdmc+J30sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9pbWcvYWRkLXNoYXJlZC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSItMiAtMiAyMCAyMCI+PHBhdGggaWQ9ImljX2FkZC1zaGFyZWQtd2RndC1hIiBkPSJNOC44LDQgTDcuMiw0IEw3LjIsNy4yIEw0LDcuMiBMNCw4LjggTDcuMiw4LjggTDcuMiwxMiBMOC44LDEyIEw4LjgsOC44IEwxMiw4LjggTDEyLDcuMiBMOC44LDcuMiBMOC44LDQgTDguOCw0IFogTTgsMCBDMy41ODQsMCAwLDMuNTg0IDAsOCBDMCwxMi40MTYgMy41ODQsMTYgOCwxNiBDMTIuNDE2LDE2IDE2LDEyLjQxNiAxNiw4IEMxNiwzLjU4NCAxMi40MTYsMCA4LDAgTDgsMCBaIE04LDE0LjQgQzQuNDcyLDE0LjQgMS42LDExLjUyOCAxLjYsOCBDMS42LDQuNDcyIDQuNDcyLDEuNiA4LDEuNiBDMTEuNTI4LDEuNiAxNC40LDQuNDcyIDE0LjQsOCBDMTQuNCwxMS41MjggMTEuNTI4LDE0LjQgOCwxNC40IEw4LDE0LjQgWiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvaW1nL2NhbmNlbC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHZlcnNpb249IjEuMSI+PGcgaWQ9InN1cmZhY2UxIj48cGF0aCBzdHlsZT0iICIgZD0iTSA1LjYyNSA0LjIxODc1IEwgNC4yMTg3NSA1LjYyNSBMIDEwLjU5Mzc1IDEyIEwgNC4yMTg3NSAxOC4zNzUgTCA1LjYyNSAxOS43ODEyNSBMIDEyIDEzLjQwNjI1IEwgMTguMzc1IDE5Ljc4MTI1IEwgMTkuNzgxMjUgMTguMzc1IEwgMTMuNDA2MjUgMTIgTCAxOS43ODEyNSA1LjYyNSBMIDE4LjM3NSA0LjIxODc1IEwgMTIgMTAuNTkzNzUgWiAiPjwvcGF0aD48L2c+PC9zdmc+J30sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9pbWcvZWRpdC1pbmxpbmUuc3ZnIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSItMiAtMiAyMCAyMCI+PHBhdGggaWQ9ImljX2VkaXQtYSIgZD0iTTAsMTIuMDgxMjM4NCBMMCwxNC45OTc1IEwyLjkxNjI2MTYzLDE0Ljk5NzUgTDExLjUxNzI4OTMsNi4zOTY0NzIzNiBMOC42MDEwMjc2NCwzLjQ4MDIxMDczIEwwLDEyLjA4MTIzODQgTDAsMTIuMDgxMjM4NCBaIE0xMy43NzI1MzE2LDQuMTQxMjMwMDQgQzE0LjA3NTgyMjgsMy44Mzc5Mzg4MyAxNC4wNzU4MjI4LDMuMzQ4MDA2ODcgMTMuNzcyNTMxNiwzLjA0NDcxNTY2IEwxMS45NTI3ODQzLDEuMjI0OTY4NDEgQzExLjY0OTQ5MzEsMC45MjE2NzcxOTggMTEuMTU5NTYxMiwwLjkyMTY3NzE5OCAxMC44NTYyNywxLjIyNDk2ODQxIEw5LjQzMzEzNDI5LDIuNjQ4MTA0MDggTDEyLjM0OTM5NTksNS41NjQzNjU3MSBMMTMuNzcyNTMxNiw0LjE0MTIzMDA0IEwxMy43NzI1MzE2LDQuMTQxMjMwMDQgWiI+PC9wYXRoPjwvc3ZnPid9LCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvaW1nL2Z1bGwtc2NyZWVuLWlubGluZS5zdmciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9Ii0yIC0yIDIwIDIwIj48cGF0aCBpZD0iaWNfZnVsbC1zY3JlZW4tYSIgZD0iTTEwLjY2NjY2NjcsMCBMMTIuNzExMTExMSwyLjA0NDQ0NDQ0IEwxMC4xNDIyMjIyLDQuNTk1NTU1NTYgTDExLjQwNDQ0NDQsNS44NTc3Nzc3OCBMMTMuOTU1NTU1NiwzLjI4ODg4ODg5IEwxNiw1LjMzMzMzMzMzIEwxNiwwIEwxMC42NjY2NjY3LDAgWiBNMCw1LjMzMzMzMzMzIEwyLjA0NDQ0NDQ0LDMuMjg4ODg4ODkgTDQuNTk1NTU1NTYsNS44NTc3Nzc3OCBMNS44NTc3Nzc3OCw0LjU5NTU1NTU2IEwzLjI4ODg4ODg5LDIuMDQ0NDQ0NDQgTDUuMzMzMzMzMzMsMCBMMCwwIEwwLDUuMzMzMzMzMzMgWiBNNS4zMzMzMzMzMywxNiBMMy4yODg4ODg4OSwxMy45NTU1NTU2IEw1Ljg1Nzc3Nzc4LDExLjQwNDQ0NDQgTDQuNTk1NTU1NTYsMTAuMTQyMjIyMiBMMi4wNDQ0NDQ0NCwxMi43MTExMTExIEwwLDEwLjY2NjY2NjcgTDAsMTYgTDUuMzMzMzMzMzMsMTYgWiBNMTYsMTAuNjY2NjY2NyBMMTMuOTU1NTU1NiwxMi43MTExMTExIEwxMS40MDQ0NDQ0LDEwLjE0MjIyMjIgTDEwLjE0MjIyMjIsMTEuNDA0NDQ0NCBMMTIuNzExMTExMSwxMy45NTU1NTU2IEwxMC42NjY2NjY3LDE2IEwxNiwxNiBMMTYsMTAuNjY2NjY2NyBaIj48L3BhdGg+PC9zdmc+J30sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9pbmRleC5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL2Rhc2hib2FyZEl0ZW1QYWdlLmpzeCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJEYXNoYm9hcmRJdGVtUGFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuRGFzaGJvYXJkSXRlbVBhZ2V9fSk7dmFyIG89bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9pbmRleC5qcyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJXaWRnZXRXaXphcmRNb2RhbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uV2lkZ2V0V2l6YXJkTW9kYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFkZFNoYXJlZFdpZGdldE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BZGRTaGFyZWRXaWRnZXRNb2RhbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRWRpdFdpZGdldE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5FZGl0V2lkZ2V0TW9kYWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkRlbGV0ZVdpZGdldE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5EZWxldGVXaWRnZXRNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvYWRkU2hhcmVkV2lkZ2V0TW9kYWwuanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BZGRTaGFyZWRXaWRnZXRNb2RhbD12b2lkIDA7dmFyIG8scyxpLGEsbCx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyIpLHc9cihEKSxNPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzIiksaz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEk9bigiLi9zcmMvY29udHJvbGxlcnMvdXNlci9pbmRleC5qcyIpLFA9bigiLi9zcmMvY29tcG9uZW50cy9tYWluL21vZGFsL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLEg9bigiLi9zcmMvY29udHJvbGxlcnMvc2NyZWVuTG9jay9pbmRleC5qcyIpLEY9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9jb21tb24vY29uc3RhbnRzLmpzIiksQj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uL2luZGV4LmpzIiksVT1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9pbmRleC5qcyIpLEc9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9hZGRTaGFyZWRXaWRnZXRNb2RhbC5zY3NzIiksej1yKEcpLFY9e0FkZFNoYXJlZFdpZGdldE1vZGFsOntkaXNwbGF5TmFtZToiQWRkU2hhcmVkV2lkZ2V0TW9kYWwifX0sVz0oMCxqLmRlZmF1bHQpKHtmaWxlbmFtZToiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL2FkZFNoYXJlZFdpZGdldE1vZGFsLmpzeCIsY29tcG9uZW50czpWLGxvY2FsczpbZV0saW1wb3J0czpbUy5kZWZhdWx0XX0pLFk9KDAsQy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9hZGRTaGFyZWRXaWRnZXRNb2RhbC5qc3giLGNvbXBvbmVudHM6Vixsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxxPXcuZGVmYXVsdC5iaW5kKHouZGVmYXVsdCksSz0oMCxrLmRlZmluZU1lc3NhZ2VzKSh7aGVhZGVyVGV4dDp7aWQ6IkFkZFNoYXJlZFdpZGdldE1vZGFsLmhlYWRlclRleHQiLGRlZmF1bHRNZXNzYWdlOiJBZGQgc2hhcmVkIHdpZGdldCJ9fSksWD10LkFkZFNoYXJlZFdpZGdldE1vZGFsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVyhZKHQsZSksZSl9fSgiQWRkU2hhcmVkV2lkZ2V0TW9kYWwiKSgobz0oMCxQLndpdGhNb2RhbCkoImFkZFNoYXJlZFdpZGdldE1vZGFsIikscz0oMCxNLmNvbm5lY3QpKGZ1bmN0aW9uKGUpe3JldHVybntwcm9qZWN0SWQ6KDAsSS5hY3RpdmVQcm9qZWN0U2VsZWN0b3IpKGUpfX0se3Nob3dTY3JlZW5Mb2NrQWN0aW9uOkguc2hvd1NjcmVlbkxvY2tBY3Rpb259KSxvKGk9cyhpPSgwLGsuaW5qZWN0SW50bCkoKGw9YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17c2VsZWN0ZWRXaWRnZXQ6bnVsbH0sci5vblNlbGVjdFdpZGdldD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fb25TZWxlY3RXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LHIub25BZGQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX29uQWRkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9fb25BZGRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uQWRkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblNlbGVjdFdpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25TZWxlY3RXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uU2VsZWN0V2lkZ2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vblNlbGVjdFdpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25TZWxlY3RXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29uU2VsZWN0V2lkZ2V0X19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19vblNlbGVjdFdpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRXaWRnZXQ6ZX0pfX0se2tleToiX19vbkFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb25BZGRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX29uQWRkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vbkFkZF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fb25BZGRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5kYXRhLm9uQ29uZmlybTt0aGlzLnByb3BzLnNob3dTY3JlZW5Mb2NrQWN0aW9uKCksdCgoMCxjLmRlZmF1bHQpKHt3aWRnZXRJZDp0aGlzLnN0YXRlLnNlbGVjdGVkV2lkZ2V0LmlkfSxGLkRFRkFVTFRfV0lER0VUX0NPTkZJRyksZSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaW50bC5mb3JtYXRNZXNzYWdlLG49ZS5wcm9qZWN0SWQscj1lLmRhdGEuY3VycmVudERhc2hib2FyZCxvPXt0ZXh0OnQoTi5DT01NT05fTE9DQUxFX0tFWVMuQUREKSxvbkNsaWNrOnRoaXMub25BZGQsZGlzYWJsZWQ6IXRoaXMuc3RhdGUuc2VsZWN0ZWRXaWRnZXR9LHM9e3RleHQ6dChOLkNPTU1PTl9MT0NBTEVfS0VZUy5DQU5DRUwpfTtyZXR1cm4gUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUC5Nb2RhbExheW91dCx7dGl0bGU6dChLLmhlYWRlclRleHQpLG9rQnV0dG9uOm8sY2FuY2VsQnV0dG9uOnMsY2xhc3NOYW1lOnEoImFkZC1zaGFyZWQtd2lkZ2V0LW1vZGFsIil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6cSgic2hhcmVkLXdpZGdldC1tb2RhbC1jb250ZW50Iil9LFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEIuU2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24se3NlbGVjdGVkV2lkZ2V0OnRoaXMuc3RhdGUuc2VsZWN0ZWRXaWRnZXQscHJvamVjdElkOm59KSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudChVLlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbix7cHJvamVjdElkOm4sY3VycmVudERhc2hib2FyZDpyLHNlbGVjdGVkV2lkZ2V0OnRoaXMuc3RhdGUuc2VsZWN0ZWRXaWRnZXQsb25TZWxlY3RXaWRnZXQ6dGhpcy5vblNlbGVjdFdpZGdldH0pKSl9fV0pLHR9KE8uQ29tcG9uZW50KSxhLnByb3BUeXBlcz17aW50bDprLmludGxTaGFwZS5pc1JlcXVpcmVkLHNob3dTY3JlZW5Mb2NrQWN0aW9uOkwuZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZGF0YTpMLmRlZmF1bHQuc2hhcGUoe29uQ29uZmlybTpMLmRlZmF1bHQuZnVuYyxjdXJyZW50RGFzaGJvYXJkOkwuZGVmYXVsdC5vYmplY3R9KSxwcm9qZWN0SWQ6TC5kZWZhdWx0LnN0cmluZ30sYS5kZWZhdWx0UHJvcHM9e2RhdGE6e29uQ29uZmlybTpmdW5jdGlvbigpe30sY3VycmVudERhc2hib2FyZDp7fX0scHJvamVjdElkOiIifSxpPWwpKXx8aSl8fGkpfHxpKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFgsIkFkZFNoYXJlZFdpZGdldE1vZGFsIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL2FkZFNoYXJlZFdpZGdldE1vZGFsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL2FkZFNoYXJlZFdpZGdldE1vZGFsLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEssIm1lc3NhZ2VzIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL2FkZFNoYXJlZFdpZGdldE1vZGFsLmpzeCIpKX0oKX0pLmNhbGwodCxuKCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikoZSkpfSwiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9hZGRTaGFyZWRXaWRnZXRNb2RhbC5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17ImFkZC1zaGFyZWQtd2lkZ2V0LW1vZGFsIjoiYWRkU2hhcmVkV2lkZ2V0TW9kYWxfX2FkZC1zaGFyZWQtd2lkZ2V0LW1vZGFsX19fMnhjc1MiLCJzaGFyZWQtd2lkZ2V0LW1vZGFsLWNvbnRlbnQiOiJhZGRTaGFyZWRXaWRnZXRNb2RhbF9fc2hhcmVkLXdpZGdldC1tb2RhbC1jb250ZW50X19fMkZNUXIifX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvYWRkU2hhcmVkV2lkZ2V0TW9kYWwuanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFkZFNoYXJlZFdpZGdldE1vZGFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5BZGRTaGFyZWRXaWRnZXRNb2RhbH19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24vc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24uanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNoYXJlZFdpZGdldEluZm9TZWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TaGFyZWRXaWRnZXRJbmZvU2VjdGlvbn19KX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24vc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNoYXJlZFdpZGdldEluZm9TZWN0aW9uPXZvaWQgMDt2YXIgbyxzLGk9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksYT1yKGkpLGw9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksdT1yKGwpLGM9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksZD1yKGMpLF89bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxwPXIoXyksZj1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSxtPXIoZiksaD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLGc9cihoKSxiPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxFPXIoYikseT1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx2PXIoeSksVD1uKCIuL3NyYy9jb21tb24vdXRpbHMvaW5kZXguanMiKSxBPW4oIi4vc3JjL2NvbW1vbi91cmxzLmpzIiksQz1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2NvbW1vbi93aWRnZXRQcmV2aWV3L2luZGV4LmpzIiksTz1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uLnNjc3MiKSxTPXIoTyksUj12LmRlZmF1bHQuYmluZChTLmRlZmF1bHQpLGo9dC5TaGFyZWRXaWRnZXRJbmZvU2VjdGlvbj0ocz1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuLHIsbzsoMCx1LmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShzKSxsPTA7bDxzO2wrKylpW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gbj1yPSgwLHAuZGVmYXVsdCkodGhpcywoZT10Ll9fcHJvdG9fX3x8KDAsYS5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXtsb2FkaW5nOiExLHdpZGdldFR5cGU6IiIsd2lkZ2V0RGF0YTp7fX0sci5mZXRjaFdpZGdldD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZmV0Y2hXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseShlLGFyZ3VtZW50cyl9LG89biwoMCxwLmRlZmF1bHQpKHIsbyl9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGQuZGVmYXVsdCkodCxbe2tleToiX19mZXRjaFdpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmV0Y2hXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnNlbGVjdGVkV2lkZ2V0JiZ0aGlzLmZldGNoV2lkZ2V0KCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0ZWRXaWRnZXQmJmUuc2VsZWN0ZWRXaWRnZXQuaWQ9PT10aGlzLnByb3BzLnNlbGVjdGVkV2lkZ2V0LmlkfHx0aGlzLmZldGNoV2lkZ2V0KCl9fSx7a2V5OiJfX2ZldGNoV2lkZ2V0X19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mZXRjaFdpZGdldF9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZmV0Y2hXaWRnZXRfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc2V0U3RhdGUoe2xvYWRpbmc6ITAsd2lkZ2V0VHlwZTp0aGlzLnByb3BzLnNlbGVjdGVkV2lkZ2V0LndpZGdldFR5cGV9KSwoMCxULmZldGNoKShBLlVSTFMud2lkZ2V0KHRoaXMucHJvcHMucHJvamVjdElkLHRoaXMucHJvcHMuc2VsZWN0ZWRXaWRnZXQuaWQpKS50aGVuKGZ1bmN0aW9uKHQpe2Uuc2V0U3RhdGUoe2xvYWRpbmc6ITEsd2lkZ2V0RGF0YTp0fSl9KS5jYXRjaChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2xvYWRpbmc6ITF9KX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2VsZWN0ZWRXaWRnZXQsdD10aGlzLnN0YXRlLG49dC5sb2FkaW5nLHI9dC53aWRnZXRUeXBlLG89dC53aWRnZXREYXRhO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlIoInNoYXJlZC13aWRnZXQtaW5mby1zZWN0aW9uIil9LGUmJmcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDIiLHtjbGFzc05hbWU6Uigid2lkZ2V0LW5hbWUiKX0sZS5uYW1lKSxnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChDLldpZGdldFByZXZpZXcse3dpZGdldFR5cGU6cixkYXRhOm8sbG9hZGluZzpufSkpKX19XSksdH0oaC5QdXJlQ29tcG9uZW50KSxvLnByb3BUeXBlcz17cHJvamVjdElkOkUuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxzZWxlY3RlZFdpZGdldDpFLmRlZmF1bHQub2JqZWN0fSxvLmRlZmF1bHRQcm9wcz17c2VsZWN0ZWRXaWRnZXQ6bnVsbH0scyk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKGosIlNoYXJlZFdpZGdldEluZm9TZWN0aW9uIiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFIsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uL3NoYXJlZFdpZGdldEluZm9TZWN0aW9uLmpzeCIpKX0oKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24vc2hhcmVkV2lkZ2V0SW5mb1NlY3Rpb24uc2NzcyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9eyJzaGFyZWQtd2lkZ2V0LWluZm8tc2VjdGlvbiI6InNoYXJlZFdpZGdldEluZm9TZWN0aW9uX19zaGFyZWQtd2lkZ2V0LWluZm8tc2VjdGlvbl9fXzF4OFJ5Iiwid2lkZ2V0LW5hbWUiOiJzaGFyZWRXaWRnZXRJbmZvU2VjdGlvbl9fd2lkZ2V0LW5hbWVfX18xeTFWNSJ9fSwiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vaW5kZXguanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5qc3giKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5TaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb259fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24uanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb249dm9pZCAwO3ZhciBvLHMsaSxhPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIpLGw9cihhKSx1PW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiksYz1yKHUpLGQ9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiksXz1yKGQpLHA9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiksZj1yKHApLG09bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiksaD1yKG0pLGc9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiKSxiPXIoZyksRT1uKCIuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiKSx5PXIoRSksdj1uKCIuL25vZGVfbW9kdWxlcy9yZWRib3gtcmVhY3QvbGliL2luZGV4LmpzIiksVD1yKHYpLEE9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNmb3JtLWNhdGNoLWVycm9ycy9saWIvaW5kZXguanMiKSxDPXIoQSksTz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpLFM9cihPKSxSPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1obXIvbGliL2luZGV4LmpzIiksaj1yKFIpLHg9bigiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpLEw9cih4KSxEPW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmVzLmpzIiksdz1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSxNPXIodyksaz1uKCIuL3NyYy9jb21tb24vdXJscy5qcyIpLEk9bigiLi9zcmMvY29tbW9uL3V0aWxzL2luZGV4LmpzIiksUD1uKCIuL3NyYy9jb250cm9sbGVycy9wYWdpbmF0aW9uL2luZGV4LmpzIiksTj1uKCIuL3NyYy9jb21tb24vY29uc3RhbnRzL2xvY2FsaXphdGlvbi5qcyIpLEg9bigiLi9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vd2lkZ2V0c0xpc3QvaW5kZXguanMiKSxGPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNTZWFyY2gvaW5kZXguanMiKSxCPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5zY3NzIiksVT1yKEIpLEc9e1NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbjp7ZGlzcGxheU5hbWU6IlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbiJ9fSx6PSgwLGouZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W2VdLGltcG9ydHM6W1MuZGVmYXVsdF19KSxWPSgwLEMuZGVmYXVsdCkoe2ZpbGVuYW1lOiIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5qc3giLGNvbXBvbmVudHM6Ryxsb2NhbHM6W10saW1wb3J0czpbUy5kZWZhdWx0LFQuZGVmYXVsdF19KSxXPU0uZGVmYXVsdC5iaW5kKFUuZGVmYXVsdCksWT0oMCxELmRlZmluZU1lc3NhZ2VzKSh7d2lkZ2V0c0xpc3RIZWFkZXI6e2lkOiJTaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24ud2lkZ2V0c0xpc3RIZWFkZXIiLGRlZmF1bHRNZXNzYWdlOiJTZWxlY3Qgc2hhcmVkIHdpZGdldCJ9fSkscT10LlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHooVih0LGUpLGUpfX0oIlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbiIpKCgwLEQuaW5qZWN0SW50bCkoKGk9cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbixyLG87KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkocyksYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj0oMCxiLmRlZmF1bHQpKHRoaXMsKGU9dC5fX3Byb3RvX198fCgwLF8uZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17cGFnZToxLHNpemU6MTAsc2VhcmNoVmFsdWU6ITEsbG9hZGluZzohMCx3aWRnZXRzOltdLHBhZ2luYXRpb246e319LHIubWFya0FscmVhZHlBZGRlZFdpZGdldHM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4oZT1yKS5fX21hcmtBbHJlYWR5QWRkZWRXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmZldGNoV2lkZ2V0c0NvbmNhdEFjdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZmV0Y2hXaWRnZXRzQ29uY2F0QWN0aW9uX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmZldGNoV2lkZ2V0cz1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9fZmV0Y2hXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZVdpZGdldHNMaXN0TG9hZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXIpLl9faGFuZGxlV2lkZ2V0c0xpc3RMb2FkX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkoZSxhcmd1bWVudHMpfSxyLmhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlPSgwLEkuZGVib3VuY2UpKGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO3JldHVybiByLmZldGNoV2lkZ2V0cyh7cGFnZToxLHNlYXJjaFZhbHVlOmV9KX0sMzAwKSxvPW4sKDAsYi5kZWZhdWx0KShyLG8pfXJldHVybigwLHkuZGVmYXVsdCkodCxlKSwoMCxoLmRlZmF1bHQpKHQsW3trZXk6Il9faGFuZGxlV2lkZ2V0c0xpc3RMb2FkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVXaWRnZXRzTGlzdExvYWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZldGNoV2lkZ2V0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmV0Y2hXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiX19mZXRjaFdpZGdldHNDb25jYXRBY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoV2lkZ2V0c0NvbmNhdEFjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fbWFya0FscmVhZHlBZGRlZFdpZGdldHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21hcmtBbHJlYWR5QWRkZWRXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZSgpfX0se2tleToiX19tYXJrQWxyZWFkeUFkZGVkV2lkZ2V0c19fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbWFya0FscmVhZHlBZGRlZFdpZGdldHNfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX21hcmtBbHJlYWR5QWRkZWRXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuY3VycmVudERhc2hib2FyZC53aWRnZXRzfHxbXTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10LmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWRnZXRJZD09PWUuaWR9KT9lOigwLGMuZGVmYXVsdCkoe30sZSx7YWxyZWFkeUFkZGVkOiEwfSl9KX19LHtrZXk6Il9fZmV0Y2hXaWRnZXRzQ29uY2F0QWN0aW9uX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19mZXRjaFdpZGdldHNDb25jYXRBY3Rpb25fX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2ZldGNoV2lkZ2V0c0NvbmNhdEFjdGlvbl9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5wYXJhbXMscj1lLmNvbmNhdCxvPW4udGVybT9rLlVSTFMuc2hhcmVkV2lkZ2V0U2VhcmNoKHRoaXMucHJvcHMucHJvamVjdElkLG4pOmsuVVJMUy5zaGFyZWRXaWRnZXQodGhpcy5wcm9wcy5wcm9qZWN0SWQsbik7dGhpcy5zZXRTdGF0ZSh7bG9hZGluZzohMH0pLCgwLEkuZmV0Y2gpKG8pLnRoZW4oZnVuY3Rpb24oZSl7dmFyIG49ZS5jb250ZW50LG89ZS5wYWdlLHM9cj90LnN0YXRlLndpZGdldHMuY29uY2F0KG4pOm47dC5zZXRTdGF0ZSh7bG9hZGluZzohMSx3aWRnZXRzOnQubWFya0FscmVhZHlBZGRlZFdpZGdldHMocykscGFnaW5hdGlvbjpvfSl9KS5jYXRjaChmdW5jdGlvbigpe3Quc2V0U3RhdGUoe2xvYWRpbmc6ITF9KX0pfX0se2tleToiX19mZXRjaFdpZGdldHNfX1JFQUNUX0hPVF9MT0FERVJfXyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZldGNoV2lkZ2V0c19fUkVBQ1RfSE9UX0xPQURFUl9fLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHtrZXk6Il9fZmV0Y2hXaWRnZXRzX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5wYWdlLHI9ZS5zaXplLG89ZS5zZWFyY2hWYWx1ZSxzPXRoaXMuc3RhdGUsaT1zLnNpemUsYT1zLnBhZ2UsdT0odD17fSwoMCxsLmRlZmF1bHQpKHQsUC5QQUdFX0tFWSxufHxhKSwoMCxsLmRlZmF1bHQpKHQsUC5TSVpFX0tFWSxyfHxpKSx0KSxjPW4+MTtvJiYodS50ZXJtPW8pLHRoaXMuZmV0Y2hXaWRnZXRzQ29uY2F0QWN0aW9uKHtwYXJhbXM6dSxjb25jYXQ6Y30pLHRoaXMuc2V0U3RhdGUoe3BhZ2U6bisxLHNlYXJjaFZhbHVlOm99KX19LHtrZXk6Il9faGFuZGxlV2lkZ2V0c0xpc3RMb2FkX19SRUFDVF9IT1RfTE9BREVSX18iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYW5kbGVXaWRnZXRzTGlzdExvYWRfX1JFQUNUX0hPVF9MT0FERVJfXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJfX2hhbmRsZVdpZGdldHNMaXN0TG9hZF9fUkVBQ1RfSE9UX0xPQURFUl9fIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUsdD1lLnBhZ2Usbj1lLnNlYXJjaFZhbHVlLHI9ZS53aWRnZXRzLG89ZS5sb2FkaW5nLHM9ZS5wYWdpbmF0aW9uLGk9cy50b3RhbEVsZW1lbnRzLGE9cy50b3RhbFBhZ2VzO3IubGVuZ3RoPj1pJiZ0Pj1hfHxvfHx0aGlzLmZldGNoV2lkZ2V0cyh7cGFnZTp0LHNlYXJjaFZhbHVlOm59KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5pbnRsLmZvcm1hdE1lc3NhZ2Usbj1lLnNlbGVjdGVkV2lkZ2V0LHI9ZS5vblNlbGVjdFdpZGdldCxvPXRoaXMuc3RhdGUscz1vLnNlYXJjaFZhbHVlLGk9by53aWRnZXRzLGE9by5sb2FkaW5nO3JldHVybiBTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlcoInNoYXJlZC13aWRnZXRzLWxpc3Qtc2VjdGlvbiIpfSxTLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiaDEiLHtjbGFzc05hbWU6Vygid2lkZ2V0cy1saXN0LXRpdGxlIil9LHQoWS53aWRnZXRzTGlzdEhlYWRlcikpLFMuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEYuU2hhcmVkV2lkZ2V0c1NlYXJjaCx7dmFsdWU6cyxvbkZpbHRlckNoYW5nZTp0aGlzLmhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlfSksUy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSC5XaWRnZXRzTGlzdCx7d2lkZ2V0czppLGFjdGl2ZUlkOm4/bi5pZDoiIixvbkNoYW5nZTpyLGxvYWRpbmc6YSxvbkxhenlMb2FkOnRoaXMuaGFuZGxlV2lkZ2V0c0xpc3RMb2FkLG5vSXRlbXNNZXNzYWdlOnQoTi5DT01NT05fTE9DQUxFX0tFWVMuTk9fUkVTVUxUUyl9KSl9fV0pLHR9KE8uQ29tcG9uZW50KSxzLnByb3BUeXBlcz17aW50bDpELmludGxTaGFwZSxwcm9qZWN0SWQ6TC5kZWZhdWx0LnN0cmluZy5pc1JlcXVpcmVkLGN1cnJlbnREYXNoYm9hcmQ6TC5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkLHNlbGVjdGVkV2lkZ2V0OkwuZGVmYXVsdC5vYmplY3Qsb25TZWxlY3RXaWRnZXQ6TC5kZWZhdWx0LmZ1bmN9LHMuZGVmYXVsdFByb3BzPXtpbnRsOnt9LHNlbGVjdGVkV2lkZ2V0Om51bGwsb25TZWxlY3RXaWRnZXQ6ZnVuY3Rpb24oKXt9fSxvPWkpKXx8byk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKHEsIlNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbiIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uLmpzeCIpLF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKFcsImN4IiwiL3Vzci9zcmMvYXBwL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24uanN4IiksX19SRUFDVF9IT1RfTE9BREVSX18ucmVnaXN0ZXIoWSwibWVzc2FnZXMiLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5qc3giKSl9KCl9KS5jYWxsKHQsbigiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcyIpKGUpKX0sIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi5zY3NzIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17InNoYXJlZC13aWRnZXRzLWxpc3Qtc2VjdGlvbiI6InNoYXJlZFdpZGdldHNMaXN0U2VjdGlvbl9fc2hhcmVkLXdpZGdldHMtbGlzdC1zZWN0aW9uX19fMkFyRUYiLCJ3aWRnZXRzLWxpc3QtdGl0bGUiOiJzaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb25fX3dpZGdldHMtbGlzdC10aXRsZV9fX0luZUo3In19LCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9zaGFyZWRXaWRnZXRzU2VhcmNoL2luZGV4LmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9zaGFyZWRXaWRnZXRzU2VhcmNoL3NoYXJlZFdpZGdldHNTZWFyY2guanN4Iik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNoYXJlZFdpZGdldHNTZWFyY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLlNoYXJlZFdpZGdldHNTZWFyY2h9fSl9LCIuL3NyYy9wYWdlcy9pbnNpZGUvZGFzaGJvYXJkSXRlbVBhZ2UvbW9kYWxzL2FkZFNoYXJlZFdpZGdldE1vZGFsL3NoYXJlZFdpZGdldHNMaXN0U2VjdGlvbi9zaGFyZWRXaWRnZXRzU2VhcmNoL3NoYXJlZFdpZGdldHNTZWFyY2guanN4IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TaGFyZWRXaWRnZXRzU2VhcmNoPXZvaWQgMDt2YXIgbyxzLGksYSxsPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIpLHU9cihsKSxjPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpLGQ9cihjKSxfPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIpLHA9cihfKSxmPW4oIi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiksbT1yKGYpLGg9bigiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiksZz1yKGgpLGI9bigiLi9ub2RlX21vZHVsZXMvcmVkYm94LXJlYWN0L2xpYi9pbmRleC5qcyIpLEU9cihiKSx5PW4oIi4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zZm9ybS1jYXRjaC1lcnJvcnMvbGliL2luZGV4LmpzIiksdj1yKHkpLFQ9bigiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKSxBPXIoVCksQz1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2Zvcm0taG1yL2xpYi9pbmRleC5qcyIpLE89cihDKSxTPW4oIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKSxSPXIoUyksaj1uKCIuL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMiKSx4PXIoaiksTD1uKCIuL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9pbmRleC5lcy5qcyIpLEQ9bigiLi9ub2RlX21vZHVsZXMvcmVkdXgtZm9ybS9lcy9pbmRleC5qcyIpLHc9bigiLi9zcmMvY29tcG9uZW50cy9maWVsZHMvZmllbGRQcm92aWRlci5qc3giKSxNPW4oIi4vc3JjL2NvbXBvbmVudHMvZmllbGRzL2ZpZWxkRXJyb3JIaW50L2luZGV4LmpzIiksaz1uKCIuL3NyYy9jb21wb25lbnRzL2lucHV0cy9pbnB1dFNlYXJjaC9pbmRleC5qc3giKSxJPW4oIi4vc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNTZWFyY2gvc2hhcmVkV2lkZ2V0c1NlYXJjaC5zY3NzIiksUD1yKEkpLE49e1NoYXJlZFdpZGdldHNTZWFyY2g6e2Rpc3BsYXlOYW1lOiJTaGFyZWRXaWRnZXRzU2VhcmNoIn19LEg9KDAsTy5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vc2hhcmVkV2lkZ2V0c1NlYXJjaC9zaGFyZWRXaWRnZXRzU2VhcmNoLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbZV0saW1wb3J0czpbQS5kZWZhdWx0XX0pLEY9KDAsdi5kZWZhdWx0KSh7ZmlsZW5hbWU6Ii91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vc2hhcmVkV2lkZ2V0c1NlYXJjaC9zaGFyZWRXaWRnZXRzU2VhcmNoLmpzeCIsY29tcG9uZW50czpOLGxvY2FsczpbXSxpbXBvcnRzOltBLmRlZmF1bHQsRS5kZWZhdWx0XX0pLEI9eC5kZWZhdWx0LmJpbmQoUC5kZWZhdWx0KSxVPSgwLEwuZGVmaW5lTWVzc2FnZXMpKHtzZWFyY2hJbnB1dFBsYWNlaG9sZGVyOntpZDoiU2hhcmVkV2lkZ2V0c1NlYXJjaC5zZWFyY2hJbnB1dFBsYWNlaG9sZGVyIixkZWZhdWx0TWVzc2FnZToiU2VhcmNoIGJ5IG5hbWUsIG93bmVyIn19KSxHPXQuU2hhcmVkV2lkZ2V0c1NlYXJjaD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEgoRih0LGUpLGUpfX0oIlNoYXJlZFdpZGdldHNTZWFyY2giKSgobz0oMCxELnJlZHV4Rm9ybSkoe2Zvcm06InNoYXJlZFdpZGdldFNlYXJjaEZvcm0iLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlsdGVyO3JldHVybntmaWx0ZXI6dCYmdC5sZW5ndGg8MyYmInNoYXJlZFdpZGdldFNlYXJjaEhpbnQifX0sb25DaGFuZ2U6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZmlsdGVyLG89bi5vbkZpbHRlckNoYW5nZTtyJiZyLmxlbmd0aDwzfHxvKHJ8fHZvaWQgMCl9fSksKDAsTC5pbmplY3RJbnRsKShzPW8oKGE9aT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsZC5kZWZhdWx0KSh0aGlzLHQpLCgwLG0uZGVmYXVsdCkodGhpcywodC5fX3Byb3RvX198fCgwLHUuZGVmYXVsdCkodCkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsZy5kZWZhdWx0KSh0LGUpLCgwLHAuZGVmYXVsdCkodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaW50bC5mb3JtYXRNZXNzYWdlO3JldHVybiBBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoInNoYXJlZC13aWRnZXRzLXNlYXJjaCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOkIoInNlYXJjaC1pbnB1dCIpfSxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LkZpZWxkUHJvdmlkZXIse25hbWU6ImZpbHRlciJ9LEEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KE0uRmllbGRFcnJvckhpbnQsbnVsbCxBLmRlZmF1bHQuY3JlYXRlRWxlbWVudChrLklucHV0U2VhcmNoLHtwbGFjZWhvbGRlcjplKFUuc2VhcmNoSW5wdXRQbGFjZWhvbGRlciksbWF4TGVuZ3RoOiIyNTYifSkpKSkpfX1dKSx0fShULkNvbXBvbmVudCksaS5wcm9wVHlwZXM9e2ludGw6TC5pbnRsU2hhcGUsc2VsZWN0ZWRXaWRnZXQ6Ui5kZWZhdWx0Lm9iamVjdCx2YWx1ZTpSLmRlZmF1bHQub25lT2ZUeXBlKFtSLmRlZmF1bHQuc3RyaW5nLFIuZGVmYXVsdC5ib29sXSl9LGkuZGVmYXVsdFByb3BzPXtpbnRsOnt9LHNlbGVjdGVkV2lkZ2V0Om51bGwsdmFsdWU6bnVsbH0scz1hKSl8fHMpfHxzKSk7IWZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyYmKF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKEcsIlNoYXJlZFdpZGdldHNTZWFyY2giLCIvdXNyL3NyYy9hcHAvc3JjL3BhZ2VzL2luc2lkZS9kYXNoYm9hcmRJdGVtUGFnZS9tb2RhbHMvYWRkU2hhcmVkV2lkZ2V0TW9kYWwvc2hhcmVkV2lkZ2V0c0xpc3RTZWN0aW9uL3NoYXJlZFdpZGdldHNTZWFyY2gvc2hhcmVkV2lkZ2V0c1NlYXJjaC5qc3giKSxfX1JFQUNUX0hPVF9MT0FERVJfXy5yZWdpc3RlcihCLCJjeCIsIi91c3Ivc3JjL2FwcC9zcmMvcGFnZXMvaW5zaWRlL2Rhc2hib2FyZEl0ZW1QYWdlL21vZGFscy9hZGRTaGFyZWRXaWRnZXRNb2RhbC9zaGFyZWRXaWRnZXRzTGlzdFNlY3Rpb24vc2hhcmVkV2lkZ2V0c1NlYXJjaC9zaGFyZWRXaWRnZXRzU2VhcmNoLmpzeCIpLF9fUkVBQ1RfSE9